diff --git a/extension/background_page/background_script.js b/extension/background_page/background_script.js index f156e452..ea5166f9 100644 --- a/extension/background_page/background_script.js +++ b/extension/background_page/background_script.js @@ -62,7 +62,7 @@ chrome.runtime.onMessage.addListener( var queue = new Queue() var browser = new ChromePopupBrowser({ pageLoadDelay: request.pageLoadDelay - }, {$, window, document}) + }) var scraper = new Scraper({ queue: queue, diff --git a/extension/generated/background-scraper.js b/extension/generated/background-scraper.js index 63c58947..9a1393c5 100644 --- a/extension/generated/background-scraper.js +++ b/extension/generated/background-scraper.js @@ -151,7 +151,7 @@ chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { var queue = new Queue(); var browser = new ChromePopupBrowser({ pageLoadDelay: request.pageLoadDelay - }, { $, window, document }); + }); var scraper = new Scraper({ queue: queue, @@ -343,7 +343,7 @@ module.exports = BackgroundScript; var jquery = require('jquery-deferred'); var whenCallSequentially = require('../assets/jquery.whencallsequentially'); -var ChromePopupBrowser = function (options, moreOptions) { +var ChromePopupBrowser = function (options) { this.pageLoadDelay = options.pageLoadDelay; // Not setting window here as it conflicts with this.window. In any case window must be defined in this case @@ -1417,7 +1417,7 @@ var jqueryDeferred = require('jquery-deferred'); const contentScraper = require('../content_script/content_scraper'); var whenCallSequentially = require('../assets/jquery.whencallsequentially'); -var JSDOMBrowser = function (options, moreOptions) { +var JSDOMBrowser = function (options) { this.pageLoadDelay = options.pageLoadDelay; }; @@ -1486,7 +1486,7 @@ module.exports = function (self) { const data = ev.data; const UUID = data.UUID; if (data.topic === 'init') { - browser = new JSDOMBrowser(data.options, {}); + browser = new JSDOMBrowser(data.options); return self.postMessage({ UUID }); @@ -3852,7 +3852,7 @@ const jsdomBrowserLoader = require('./JSDOMBrowserLoader'); var jqueryDeferred = require('jquery-deferred'); var whenCallSequentially = require('../assets/jquery.whencallsequentially'); -const WebJSDOMBrowser = function (options, moreOptions) { +const WebJSDOMBrowser = function (options) { this.pageLoadDelay = options.pageLoadDelay; const promises = {}; this.promises = promises; @@ -164133,4 +164133,4 @@ function extend() { },{}]},{},[3])(3) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJleHRlbnNpb24vYXNzZXRzL2Jhc2U2NC5qcyIsImV4dGVuc2lvbi9hc3NldHMvanF1ZXJ5LndoZW5jYWxsc2VxdWVudGlhbGx5LmpzIiwiZXh0ZW5zaW9uL2JhY2tncm91bmRfcGFnZS9iYWNrZ3JvdW5kX3NjcmlwdC5qcyIsImV4dGVuc2lvbi9jb250ZW50X3NjcmlwdC9jb250ZW50X3NjcmFwZXIuanMiLCJleHRlbnNpb24vc2NyaXB0cy9CYWNrZ3JvdW5kU2NyaXB0LmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvQ2hyb21lUG9wdXBCcm93c2VyLmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvQ29uZmlnLmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvQ29udGVudFNjcmlwdC5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL0NvbnRlbnRTZWxlY3Rvci5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL0RhdGFFeHRyYWN0b3IuanMiLCJleHRlbnNpb24vc2NyaXB0cy9FbGVtZW50UXVlcnkuanMiLCJleHRlbnNpb24vc2NyaXB0cy9KU0RPTUJyb3dzZXIuanMiLCJleHRlbnNpb24vc2NyaXB0cy9KU0RPTUJyb3dzZXJMb2FkZXIuanMiLCJleHRlbnNpb24vc2NyaXB0cy9Kb2IuanMiLCJleHRlbnNpb24vc2NyaXB0cy9RdWV1ZS5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NjcmFwZXIuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3Rvci5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9yRWxlbWVudC5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9yRWxlbWVudEF0dHJpYnV0ZS5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9yRWxlbWVudENsaWNrLmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvU2VsZWN0b3IvU2VsZWN0b3JFbGVtZW50U2Nyb2xsLmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvU2VsZWN0b3IvU2VsZWN0b3JHcm91cC5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9ySFRNTC5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9ySW1hZ2UuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3Rvci9TZWxlY3RvckxpbmsuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3Rvci9TZWxlY3RvclBvcHVwTGluay5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9yVGFibGUuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3Rvci9TZWxlY3RvclRleHQuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3Rvckxpc3QuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3RvcnMuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TaXRlbWFwLmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvU3RvcmUuanMiLCJleHRlbnNpb24vc2NyaXB0cy9VbmlxdWVFbGVtZW50TGlzdC5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1dlYkpTRE9NQnJvd3Nlci5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL2dldEJhY2tncm91bmRTY3JpcHQuanMiLCJleHRlbnNpb24vc2NyaXB0cy9nZXRDb250ZW50U2NyaXB0LmpzIiwibm9kZV9tb2R1bGVzL2FiYWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWJhYi9saWIvYXRvYi5qcyIsIm5vZGVfbW9kdWxlcy9hYmFiL2xpYi9idG9hLmpzIiwibm9kZV9tb2R1bGVzL2Fjb3JuLWdsb2JhbHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWNvcm4vZGlzdC9hY29ybi5qcyIsIm5vZGVfbW9kdWxlcy9hY29ybi9kaXN0L3dhbGsuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9hanYuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2NhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9fcnVsZXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9mb3JtYXRzLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvcmVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvcnVsZXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3NjaGVtYV9vYmouanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3VjczJsZW5ndGguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3V0aWwuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3ZhbGlkYXRpb25fZXJyb3IuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fZm9ybWF0TGltaXQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXRJdGVtcy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL19saW1pdExlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL19saW1pdFByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9hbGxPZi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2FueU9mLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9jdXN0b20uanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9kZXBlbmRlbmNpZXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9lbnVtLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvaXRlbXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9tdWx0aXBsZU9mLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvbm90LmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvb25lT2YuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9wYXR0ZXJuLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvcGF0dGVyblJlcXVpcmVkLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvcHJvcGVydGllcy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL3JlZi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL3JlcXVpcmVkLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvc3dpdGNoLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvdW5pcXVlSXRlbXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy92YWxpZGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2tleXdvcmQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9yZWZzL2pzb24tc2NoZW1hLWRyYWZ0LTA0Lmpzb24iLCJub2RlX21vZHVsZXMvYWp2L2xpYi9yZWZzL2pzb24tc2NoZW1hLXY1Lmpzb24iLCJub2RlX21vZHVsZXMvYWp2L2xpYi92NS5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbm9kZV9tb2R1bGVzL2pzb24tc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hbWRlZmluZS9hbWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9hcnJheS1lcXVhbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYXBpLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9idWZmZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9ub2RlLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9yZXBvcnRlci5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2NvbnN0YW50cy9kZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9jb25zdGFudHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9kZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2RlY29kZXJzL3BlbS5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2VuY29kZXJzL2Rlci5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2VuY29kZXJzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZW5jb2RlcnMvcGVtLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEvbGliL2Jlci9lcnJvcnMuanMiLCJub2RlX21vZHVsZXMvYXNuMS9saWIvYmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FzbjEvbGliL2Jlci9yZWFkZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS9saWIvYmVyL3R5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEvbGliL2Jlci93cml0ZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYXNzZXJ0LXBsdXMvYXNzZXJ0LmpzIiwibm9kZV9tb2R1bGVzL2Fzc2VydC9hc3NlcnQuanMiLCJub2RlX21vZHVsZXMvYXdzLXNpZ24yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2F3czQvYXdzNC5qcyIsIm5vZGVfbW9kdWxlcy9hd3M0L2xydS5qcyIsIm5vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYmNyeXB0LXBia2RmL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIsIm5vZGVfbW9kdWxlcy9icm9yYW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXItcmVzb2x2ZS9lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9hZXMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYXV0aENpcGhlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2RlY3J5cHRlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9lbmNyeXB0ZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvZ2hhc2guanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2JjLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NmYi5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9jZmIxLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NmYjguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY3RyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2VjYi5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9vZmIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvc3RyZWFtQ2lwaGVyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktY2lwaGVyL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1kZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1kZXMvbW9kZXMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1yc2EvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2FsZ29zLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9icm93c2VyL2FsZ29yaXRobXMuanNvbiIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci9jdXJ2ZXMuanNvbiIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci9zaWduLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9icm93c2VyL3ZlcmlmeS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXpsaWIvc3JjL2JpbmRpbmcuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS16bGliL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9idWZmZXItc2hpbXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnVmZmVyLXhvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnVpbHRpbi1zdGF0dXMtY29kZXMvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9jYXNlbGVzcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaXBoZXItYmFzZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jby9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb21iaW5lZC1zdHJlYW0vbGliL2NvbWJpbmVkX3N0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9jb250ZW50LXR5cGUtcGFyc2VyL2xpYi9jb250ZW50LXR5cGUtcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9jcmVhdGUtZWNkaC9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvY3JlYXRlLWhhc2gvbWFrZS1oYXNoLmpzIiwibm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL21kNS5qcyIsIm5vZGVfbW9kdWxlcy9jcmVhdGUtaG1hYy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NyZWF0ZS1obWFjL2xlZ2FjeS5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tYnJvd3NlcmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jc3Mtc2VsZWN0b3IvbGliL0Nzc1NlbGVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9DU1NEb2N1bWVudFJ1bGUuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL0NTU0ZvbnRGYWNlUnVsZS5qcyIsIm5vZGVfbW9kdWxlcy9jc3NvbS9saWIvQ1NTSG9zdFJ1bGUuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL0NTU0ltcG9ydFJ1bGUuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL0NTU0tleWZyYW1lUnVsZS5qcyIsIm5vZGVfbW9kdWxlcy9jc3NvbS9saWIvQ1NTS2V5ZnJhbWVzUnVsZS5qcyIsIm5vZGVfbW9kdWxlcy9jc3NvbS9saWIvQ1NTTWVkaWFSdWxlLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9DU1NSdWxlLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9DU1NTdHlsZURlY2xhcmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9DU1NTdHlsZVJ1bGUuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL0NTU1N0eWxlU2hlZXQuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL0NTU1ZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9DU1NWYWx1ZUV4cHJlc3Npb24uanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL01hdGNoZXJMaXN0LmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9NZWRpYUxpc3QuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL1N0eWxlU2hlZXQuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL2Nsb25lLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jc3NvbS9saWIvcGFyc2UuanMiLCJub2RlX21vZHVsZXMvY3Nzc3R5bGUvbGliL0NTU1N0eWxlRGVjbGFyYXRpb24uanMiLCJub2RlX21vZHVsZXMvY3Nzc3R5bGUvbGliL3BhcnNlcnMuanMiLCJub2RlX21vZHVsZXMvY3Nzc3R5bGUvbGliL3Byb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvZGVsYXllZC1zdHJlYW0vbGliL2RlbGF5ZWRfc3RyZWFtLmpzIiwibm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzLmpzIiwibm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzL2NiYy5qcyIsIm5vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy9jaXBoZXIuanMiLCJub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvZGVzLmpzIiwibm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzL2VkZS5qcyIsIm5vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2RpZmZpZS1oZWxsbWFuL2xpYi9kaC5qcyIsIm5vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9saWIvZ2VuZXJhdGVQcmltZS5qcyIsIm5vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9saWIvcHJpbWVzLmpzb24iLCJub2RlX21vZHVsZXMvZWNjLWpzYm4vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZWNjLWpzYm4vbGliL2VjLmpzIiwibm9kZV9tb2R1bGVzL2VjYy1qc2JuL2xpYi9zZWMuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9iYXNlLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9lZHdhcmRzLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvbW9udC5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvc2hvcnQuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlcy5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL2tleS5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWMvc2lnbmF0dXJlLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lZGRzYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2Eva2V5LmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lZGRzYS9zaWduYXR1cmUuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3ByZWNvbXB1dGVkL3NlY3AyNTZrMS5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvcGFja2FnZS5qc29uIiwibm9kZV9tb2R1bGVzL2VzY29kZWdlbi9lc2NvZGVnZW4uanMiLCJub2RlX21vZHVsZXMvZXNjb2RlZ2VuL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLmpzIiwibm9kZV9tb2R1bGVzL2VzY29kZWdlbi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvc291cmNlLW1hcC9hcnJheS1zZXQuanMiLCJub2RlX21vZHVsZXMvZXNjb2RlZ2VuL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwL2Jhc2U2NC12bHEuanMiLCJub2RlX21vZHVsZXMvZXNjb2RlZ2VuL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwL2Jhc2U2NC5qcyIsIm5vZGVfbW9kdWxlcy9lc2NvZGVnZW4vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAvYmFzaWMtc291cmNlLW1hcC1jb25zdW1lci5qcyIsIm5vZGVfbW9kdWxlcy9lc2NvZGVnZW4vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAvYmluYXJ5LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy9lc2NvZGVnZW4vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAvaW5kZXhlZC1zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwibm9kZV9tb2R1bGVzL2VzY29kZWdlbi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvc291cmNlLW1hcC9tYXBwaW5nLWxpc3QuanMiLCJub2RlX21vZHVsZXMvZXNjb2RlZ2VuL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvZXNjb2RlZ2VuL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2VzY29kZWdlbi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvc291cmNlLW1hcC9zb3VyY2Utbm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9lc2NvZGVnZW4vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9lc2NvZGVnZW4vcGFja2FnZS5qc29uIiwibm9kZV9tb2R1bGVzL2VzdHJhdmVyc2UvZXN0cmF2ZXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi9hc3QuanMiLCJub2RlX21vZHVsZXMvZXN1dGlscy9saWIvY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi9rZXl3b3JkLmpzIiwibm9kZV9tb2R1bGVzL2VzdXRpbHMvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJub2RlX21vZHVsZXMvZXZwX2J5dGVzdG9rZXkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2V4dHNwcmludGYvbGliL2V4dHNwcmludGYuanMiLCJub2RlX21vZHVsZXMvZm9yZXZlci1hZ2VudC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvYWZ0ZXJSZXF1ZXN0Lmpzb24iLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvYmVmb3JlUmVxdWVzdC5qc29uIiwibm9kZV9tb2R1bGVzL2hhci1zY2hlbWEvbGliL2Jyb3dzZXIuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9jYWNoZS5qc29uIiwibm9kZV9tb2R1bGVzL2hhci1zY2hlbWEvbGliL2NvbnRlbnQuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9jb29raWUuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9jcmVhdG9yLmpzb24iLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvZW50cnkuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9oYXIuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9oZWFkZXIuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9sb2cuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9wYWdlLmpzb24iLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvcGFnZVRpbWluZ3MuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9wb3N0RGF0YS5qc29uIiwibm9kZV9tb2R1bGVzL2hhci1zY2hlbWEvbGliL3F1ZXJ5Lmpzb24iLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvcmVxdWVzdC5qc29uIiwibm9kZV9tb2R1bGVzL2hhci1zY2hlbWEvbGliL3Jlc3BvbnNlLmpzb24iLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvdGltaW5ncy5qc29uIiwibm9kZV9tb2R1bGVzL2hhci12YWxpZGF0b3IvbGliL25vZGU0L2Vycm9yLmpzIiwibm9kZV9tb2R1bGVzL2hhci12YWxpZGF0b3IvbGliL25vZGU0L3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvaGFzaC1iYXNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanMiLCJub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9jb21tb24uanMiLCJub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9obWFjLmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvaGF3ay9saWIvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9obWFjLWRyYmcvbGliL2htYWMtZHJiZy5qcyIsIm5vZGVfbW9kdWxlcy9odG1sLWVuY29kaW5nLXNuaWZmZXIvbGliL2h0bWwtZW5jb2Rpbmctc25pZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9odHRwLXNpZ25hdHVyZS9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaHR0cC1zaWduYXR1cmUvbGliL3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9odHRwLXNpZ25hdHVyZS9saWIvc2lnbmVyLmpzIiwibm9kZV9tb2R1bGVzL2h0dHAtc2lnbmF0dXJlL2xpYi91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9odHRwLXNpZ25hdHVyZS9saWIvdmVyaWZ5LmpzIiwibm9kZV9tb2R1bGVzL2h0dHBzLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvZGJjcy1jb2RlYy5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9kYmNzLWRhdGEuanMiLCJub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvaW50ZXJuYWwuanMiLCJub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3Mvc2Jjcy1jb2RlYy5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWRhdGEtZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3NiY3MtZGF0YS5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvYmlnNS1hZGRlZC5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9jcDkzNi5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9jcDk0OS5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9jcDk1MC5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9ldWNqcC5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9nYjE4MDMwLXJhbmdlcy5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9nYmstYWRkZWQuanNvbiIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvc2hpZnRqaXMuanNvbiIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy91dGYxNi5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy91dGY3LmpzIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvbGliL2JvbS1oYW5kbGluZy5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9leHRlbmQtbm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9zdHJlYW1zLmpzIiwibm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaW5kZXhvZi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pcy10eXBlZGFycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaXNzdHJlYW0vaXNzdHJlYW0uanMiLCJub2RlX21vZHVsZXMvam9kaWQyNTUxOS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qb2RpZDI1NTE5L2xpYi9jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2pvZGlkMjU1MTkvbGliL2N1cnZlMjU1LmpzIiwibm9kZV9tb2R1bGVzL2pvZGlkMjU1MTkvbGliL2RoLmpzIiwibm9kZV9tb2R1bGVzL2pvZGlkMjU1MTkvbGliL2VkZHNhLmpzIiwibm9kZV9tb2R1bGVzL2pvZGlkMjU1MTkvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2pxdWVyeS1kZWZlcnJlZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qcXVlcnktZGVmZXJyZWQvbGliL2pxdWVyeS1jYWxsYmFja3MuanMiLCJub2RlX21vZHVsZXMvanF1ZXJ5LWRlZmVycmVkL2xpYi9qcXVlcnktY29yZS5qcyIsIm5vZGVfbW9kdWxlcy9qcXVlcnktZGVmZXJyZWQvbGliL2pxdWVyeS1kZWZlcnJlZC5qcyIsIm5vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCJub2RlX21vZHVsZXMvanNibi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvYXBpLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9icm93c2VyL1dpbmRvdy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vYnJvd3Nlci9kZWZhdWx0LXN0eWxlc2hlZXQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2Jyb3dzZXIvZG9jdW1lbnRBZGFwdGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9icm93c2VyL2RvY3VtZW50ZmVhdHVyZXMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2Jyb3dzZXIvZG9tdG9odG1sLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9icm93c2VyL2h0bWx0b2RvbS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vYnJvd3Nlci9ub3QtaW1wbGVtZW50ZWQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2Jyb3dzZXIvcmVzb3VyY2UtbG9hZGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9sZXZlbDIvc3R5bGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xldmVsMy94cGF0aC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2F0dHJpYnV0ZXMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9hdHRyaWJ1dGVzL0F0dHItaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2RvbS10b2tlbi1saXN0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZG9tcGFyc2luZy9ET01QYXJzZXItaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2V2ZW50cy9DdXN0b21FdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZXZlbnRzL0Vycm9yRXZlbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2V2ZW50cy9FdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZXZlbnRzL0V2ZW50VGFyZ2V0LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ldmVudHMvRm9jdXNFdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZXZlbnRzL0hhc2hDaGFuZ2VFdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZXZlbnRzL0tleWJvYXJkRXZlbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2V2ZW50cy9NZXNzYWdlRXZlbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2V2ZW50cy9Nb3VzZUV2ZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ldmVudHMvUG9wU3RhdGVFdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZXZlbnRzL1Byb2dyZXNzRXZlbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2V2ZW50cy9Ub3VjaEV2ZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ldmVudHMvVUlFdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZmlsZS1hcGkvQmxvYi1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZmlsZS1hcGkvRmlsZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZmlsZS1hcGkvRmlsZUxpc3QtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2ZpbGUtYXBpL0ZpbGVSZWFkZXItaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9BdHRyLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0Jsb2IuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvQmxvYlByb3BlcnR5QmFnLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0NEQVRBU2VjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9DaGFyYWN0ZXJEYXRhLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0NoaWxkTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9Db21tZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0N1c3RvbUV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0N1c3RvbUV2ZW50SW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9ET01JbXBsZW1lbnRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9ET01QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRG9jdW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRG9jdW1lbnRGcmFnbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9Eb2N1bWVudFR5cGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9FbGVtZW50Q1NTSW5saW5lU3R5bGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRWxlbWVudENvbnRlbnRFZGl0YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9FcnJvckV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0Vycm9yRXZlbnRJbml0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0V2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0V2ZW50SW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9FdmVudE1vZGlmaWVySW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9FdmVudFRhcmdldC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9GaWxlLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0ZpbGVMaXN0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0ZpbGVQcm9wZXJ0eUJhZy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9GaWxlUmVhZGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0ZvY3VzRXZlbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRm9jdXNFdmVudEluaXQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRm9ybURhdGEuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvR2xvYmFsRXZlbnRIYW5kbGVycy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MQW5jaG9yRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MQXBwbGV0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MQXJlYUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTEF1ZGlvRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MQlJFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxCYXNlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MQm9keUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTEJ1dHRvbkVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTENhbnZhc0VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTERMaXN0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRGF0YUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTERhdGFMaXN0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRGlhbG9nRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRGlyZWN0b3J5RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRGl2RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRW1iZWRFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxGaWVsZFNldEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTEZvbnRFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxGb3JtRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRnJhbWVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxGcmFtZVNldEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTEhSRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MSGVhZEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTEhlYWRpbmdFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxIdG1sRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxJRnJhbWVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxJbWFnZUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTElucHV0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MTElFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxMYWJlbEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTExlZ2VuZEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTExpbmtFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxNYXBFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxNZWRpYUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTE1lbnVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxNZXRhRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MTWV0ZXJFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxNb2RFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxPTGlzdEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTE9iamVjdEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTE9wdEdyb3VwRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MT3B0aW9uRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MT3V0cHV0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MUGFyYWdyYXBoRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MUGFyYW1FbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxQcmVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxQcm9ncmVzc0VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFF1b3RlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MU2NyaXB0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MU2VsZWN0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MU291cmNlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MU3BhbkVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFN0eWxlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGFibGVDZWxsRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGFibGVDb2xFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxUYWJsZURhdGFDZWxsRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGFibGVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxUYWJsZVJvd0VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFRlbXBsYXRlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGV4dEFyZWFFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxUaW1lRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGl0bGVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxUcmFja0VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFVMaXN0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVW5rbm93bkVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFZpZGVvRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IYXNoQ2hhbmdlRXZlbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSGFzaENoYW5nZUV2ZW50SW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IaXN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0tleWJvYXJkRXZlbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvS2V5Ym9hcmRFdmVudEluaXQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvTGlua1N0eWxlLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0xvY2F0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL01lc3NhZ2VFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9NZXNzYWdlRXZlbnRJbml0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL01vdXNlRXZlbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvTW91c2VFdmVudEluaXQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvTmF2aWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9OYXZpZ2F0b3JDb29raWVzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05hdmlnYXRvcklELmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05hdmlnYXRvckxhbmd1YWdlLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05hdmlnYXRvck9uTGluZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9OYXZpZ2F0b3JQbHVnaW5zLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05vZGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05vbkVsZW1lbnRQYXJlbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL1BhcmVudE5vZGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvUG9wU3RhdGVFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9Qb3BTdGF0ZUV2ZW50SW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvUHJvZ3Jlc3NFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9Qcm9ncmVzc0V2ZW50SW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9UZXh0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL1RvdWNoRXZlbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvVHJlZVdhbGtlci5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9VSUV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL1VJRXZlbnRJbml0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL1dpbmRvd0V2ZW50SGFuZGxlcnMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvWE1MRG9jdW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvaGVscGVycy9mb2N1c2luZy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2hlbHBlcnMvZm9ybS1jb250cm9scy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvaGVscGVycy9vcmRlcmVkLXNldC1wYXJzZXIuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9oZWxwZXJzL3Byb3hpZWQtd2luZG93LWV2ZW50LWhhbmRsZXJzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvaGVscGVycy9ydW50aW1lLXNjcmlwdC1lcnJvcnMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9oZWxwZXJzL3NlbGVjdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2hlbHBlcnMvc3RyaW5ncy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2hlbHBlcnMvc3R5bGVzaGVldHMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9oZWxwZXJzL3RyYXZlcnNhbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2hlbHBlcnMvdmFsaWRhdGUtbmFtZXMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9odG1sLWNvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25hbWVkLXByb3BlcnRpZXMtd2luZG93LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbmF2aWdhdG9yL05hdmlnYXRvci1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbmF2aWdhdG9yL05hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbmF2aWdhdG9yL05hdmlnYXRvckNvb2tpZXMtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25hdmlnYXRvci9OYXZpZ2F0b3JJRC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbmF2aWdhdG9yL05hdmlnYXRvckxhbmd1YWdlLWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9uYXZpZ2F0b3IvTmF2aWdhdG9yT25MaW5lLWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9uYXZpZ2F0b3IvTmF2aWdhdG9yUGx1Z2lucy1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZS1kb2N1bWVudC1wb3NpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGUtZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZS1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGUtbGlzdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGUtdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9DREFUQVNlY3Rpb24taW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0NoYXJhY3RlckRhdGEtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0NoaWxkTm9kZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvQ29tbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvRE9NSW1wbGVtZW50YXRpb24taW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0RvY3VtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9Eb2N1bWVudEZyYWdtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9Eb2N1bWVudFR5cGUtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0VsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0VsZW1lbnRDU1NJbmxpbmVTdHlsZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvRWxlbWVudENvbnRlbnRFZGl0YWJsZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvR2xvYmFsRXZlbnRIYW5kbGVycy1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEFuY2hvckVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxBcHBsZXRFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MQXJlYUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxBdWRpb0VsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxCUkVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxCYXNlRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEJvZHlFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MQnV0dG9uRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTENhbnZhc0VsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxETGlzdEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxEYXRhRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTERhdGFMaXN0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTERpYWxvZ0VsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxEaXJlY3RvcnlFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MRGl2RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxFbWJlZEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxGaWVsZFNldEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxGb250RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEZvcm1FbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MRnJhbWVFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MRnJhbWVTZXRFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MSFJFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MSGVhZEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxIZWFkaW5nRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEh0bWxFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MSUZyYW1lRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEltYWdlRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTElucHV0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTExJRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTExhYmVsRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTExlZ2VuZEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxMaW5rRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTE1hcEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxNZWRpYUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxNZW51RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTE1ldGFFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MTWV0ZXJFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MTW9kRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTE9MaXN0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTE9iamVjdEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxPcHRHcm91cEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxPcHRpb25FbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MT3V0cHV0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFBhcmFncmFwaEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxQYXJhbUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxQcmVFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MUHJvZ3Jlc3NFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MUXVvdGVFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MU2NyaXB0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFNlbGVjdEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxTb3VyY2VFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MU3BhbkVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxTdHlsZUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MVGFibGVDZWxsRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRhYmxlQ29sRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MVGFibGVFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRhYmxlUm93RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxUZW1wbGF0ZUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxUZXh0QXJlYUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxUaW1lRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRpdGxlRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRyYWNrRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFVMaXN0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFVua25vd25FbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MVmlkZW9FbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9MaW5rU3R5bGUtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL05vZGUtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL05vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvTm9uRWxlbWVudFBhcmVudE5vZGUtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL1BhcmVudE5vZGUtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvVGV4dC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvV2luZG93RXZlbnRIYW5kbGVycy1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvWE1MRG9jdW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL3Bvc3QtbWVzc2FnZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL3JlZ2lzdGVyLWVsZW1lbnRzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvdHJhdmVyc2FsL1RyZWVXYWxrZXItaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL3dpbmRvdy9IaXN0b3J5LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy93aW5kb3cvTG9jYXRpb24taW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL3dpbmRvdy9uYXZpZ2F0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcveGhyLXV0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcveGhyL0Zvcm1EYXRhLWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy94bWxodHRwcmVxdWVzdC1ldmVudC10YXJnZXQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy94bWxodHRwcmVxdWVzdC1zeW1ib2xzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcveG1saHR0cHJlcXVlc3QtdXBsb2FkLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcveG1saHR0cHJlcXVlc3QuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL25hbWVkLXByb3BlcnRpZXMtdHJhY2tlci5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vdXRpbHMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL3ZpcnR1YWwtY29uc29sZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vdm0tc2hpbS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vd2ViLWlkbC9ET01FeGNlcHRpb24uanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL3dlYi1pZGwvZG9tLWV4Y2VwdGlvbi10YWJsZS5qc29uIiwibm9kZV9tb2R1bGVzL2pzZG9tL3BhY2thZ2UuanNvbiIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS9saWIvdmFsaWRhdGUuanMiLCJub2RlX21vZHVsZXMvanNvbi1zdHJpbmdpZnktc2FmZS9zdHJpbmdpZnkuanMiLCJub2RlX21vZHVsZXMvanNvbmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qc29uaWZ5L2xpYi9wYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9qc29uaWZ5L2xpYi9zdHJpbmdpZnkuanMiLCJub2RlX21vZHVsZXMvanNwcmltL2xpYi9qc3ByaW0uanMiLCJub2RlX21vZHVsZXMvanNwcmltL25vZGVfbW9kdWxlcy9hc3NlcnQtcGx1cy9hc3NlcnQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzVW5kZWZpbmVkLmpzIiwibm9kZV9tb2R1bGVzL21pbGxlci1yYWJpbi9saWIvbXIuanMiLCJub2RlX21vZHVsZXMvbWltZS1kYi9kYi5qc29uIiwibm9kZV9tb2R1bGVzL21pbWUtZGIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbWltZS10eXBlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9taW5pbWFsaXN0aWMtYXNzZXJ0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL253bWF0Y2hlci9zcmMvbndtYXRjaGVyLW5vcXNhLmpzIiwibm9kZV9tb2R1bGVzL29hdXRoLXNpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvb3MtYnJvd3NlcmlmeS9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3Bha28vbGliL3V0aWxzL2NvbW1vbi5qcyIsIm5vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2FkbGVyMzIuanMiLCJub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jcmMzMi5qcyIsIm5vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMiLCJub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZmYXN0LmpzIiwibm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZnRyZWVzLmpzIiwibm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvbWVzc2FnZXMuanMiLCJub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi90cmVlcy5qcyIsIm5vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL3pzdHJlYW0uanMiLCJub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9hZXNpZC5qc29uIiwibm9kZV9tb2R1bGVzL3BhcnNlLWFzbjEvYXNuMS5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2NlcnRpZmljYXRlLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLWFzbjEvZml4UHJvYy5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9kb2N0eXBlLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL2ZvcmVpZ25fY29udGVudC5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9odG1sLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL3VuaWNvZGUuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vdXRpbHMuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9qc2RvbS9qc2RvbV9wYXJzZXIuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9qc2RvbS9wYXJzaW5nX3VuaXQuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6ZXIuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9zaW1wbGVfYXBpL3NpbXBsZV9hcGlfcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvc2ltcGxlX2FwaS90b2tlbml6ZXJfcHJveHkuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vbG9jYXRpb25faW5mb19taXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi9uYW1lZF9lbnRpdHlfdHJpZS5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi9wcmVwcm9jZXNzb3IuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vdG9rZW5pemVyLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9hZGFwdGVycy9kZWZhdWx0LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9hZGFwdGVycy9odG1scGFyc2VyMi5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL2Zvcm1hdHRpbmdfZWxlbWVudF9saXN0LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vbG9jYXRpb25faW5mb19taXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL29wZW5fZWxlbWVudF9zdGFjay5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9wYmtkZjIvbGliL2RlZmF1bHQtZW5jb2RpbmcuanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL2xpYi9wcmVjb25kaXRpb24uanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL2xpYi9zeW5jLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcGVyZm9ybWFuY2Utbm93L2xpYi9wZXJmb3JtYW5jZS1ub3cuanMiLCJub2RlX21vZHVsZXMvcG4vX3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvcG4vX3Byb21pc2lmeS5qcyIsIm5vZGVfbW9kdWxlcy9wbi9mcy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC9tZ2YuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvcHJpdmF0ZURlY3J5cHQuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvcHVibGljRW5jcnlwdC5qcyIsIm5vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC93aXRoUHVibGljLmpzIiwibm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L3hvci5qcyIsIm5vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcyIsIm5vZGVfbW9kdWxlcy9xcy9saWIvZm9ybWF0cy5qcyIsIm5vZGVfbW9kdWxlcy9xcy9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcXMvbGliL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL3FzL2xpYi9zdHJpbmdpZnkuanMiLCJub2RlX21vZHVsZXMvcXMvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmFuZG9tYnl0ZXMvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZHVwbGV4LWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcGFzc3Rocm91Z2guanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUtYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0LXByb21pc2UtY29yZS9jb25maWd1cmUvcmVxdWVzdDIuanMiLCJub2RlX21vZHVsZXMvcmVxdWVzdC1wcm9taXNlLWNvcmUvbGliL2Vycm9ycy5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0LXByb21pc2UtY29yZS9saWIvcGx1bWJpbmcuanMiLCJub2RlX21vZHVsZXMvcmVxdWVzdC1wcm9taXNlLW5hdGl2ZS9saWIvcnAuanMiLCJub2RlX21vZHVsZXMvcmVxdWVzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi9hdXRoLmpzIiwibm9kZV9tb2R1bGVzL3JlcXVlc3QvbGliL2Nvb2tpZXMuanMiLCJub2RlX21vZHVsZXMvcmVxdWVzdC9saWIvZ2V0UHJveHlGcm9tVVJJLmpzIiwibm9kZV9tb2R1bGVzL3JlcXVlc3QvbGliL2hhci5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi9oZWxwZXJzLmpzIiwibm9kZV9tb2R1bGVzL3JlcXVlc3QvbGliL211bHRpcGFydC5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi9vYXV0aC5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi9xdWVyeXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi9yZWRpcmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi90dW5uZWwuanMiLCJub2RlX21vZHVsZXMvcmVxdWVzdC9yZXF1ZXN0LmpzIiwibm9kZV9tb2R1bGVzL3JpcGVtZDE2MC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3NheC9saWIvc2F4LmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9oYXNoLmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zaGEuanMvc2hhLmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9zaGExLmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEyMjQuanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL3NoYTI1Ni5qcyIsIm5vZGVfbW9kdWxlcy9zaGEuanMvc2hhMzg0LmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9zaGE1MTIuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2FsZ3MuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2NlcnRpZmljYXRlLmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL2xpYi9kaGUuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2VkLWNvbXBhdC5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvZXJyb3JzLmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL2xpYi9maW5nZXJwcmludC5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvZm9ybWF0cy9hdXRvLmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL2xpYi9mb3JtYXRzL29wZW5zc2gtY2VydC5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvZm9ybWF0cy9wZW0uanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2Zvcm1hdHMvcGtjczEuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2Zvcm1hdHMvcGtjczguanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2Zvcm1hdHMvcmZjNDI1My5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvZm9ybWF0cy9zc2gtcHJpdmF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvZm9ybWF0cy9zc2guanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2Zvcm1hdHMveDUwOS1wZW0uanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2Zvcm1hdHMveDUwOS5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvaWRlbnRpdHkuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL2xpYi9rZXkuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL3ByaXZhdGUta2V5LmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL2xpYi9zaWduYXR1cmUuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL3NzaC1idWZmZXIuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL25vZGVfbW9kdWxlcy9hc3NlcnQtcGx1cy9hc3NlcnQuanMiLCJub2RlX21vZHVsZXMvc3RlYWx0aHktcmVxdWlyZS9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbGliL2NhcGFiaWxpdHkuanMiLCJub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbGliL3JlcXVlc3QuanMiLCJub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbGliL3Jlc3BvbnNlLmpzIiwibm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N0cmluZ3N0cmVhbS9zdHJpbmdzdHJlYW0uanMiLCJub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1N5bWJvbFRyZWUuanMiLCJub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1N5bWJvbFRyZWVOb2RlLmpzIiwibm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9UcmVlSXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVQb3NpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy90by1hcnJheWJ1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90b3VnaC1jb29raWUvbGliL2Nvb2tpZS5qcyIsIm5vZGVfbW9kdWxlcy90b3VnaC1jb29raWUvbGliL21lbXN0b3JlLmpzIiwibm9kZV9tb2R1bGVzL3RvdWdoLWNvb2tpZS9saWIvcGF0aE1hdGNoLmpzIiwibm9kZV9tb2R1bGVzL3RvdWdoLWNvb2tpZS9saWIvcGVybXV0ZURvbWFpbi5qcyIsIm5vZGVfbW9kdWxlcy90b3VnaC1jb29raWUvbGliL3B1YnN1ZmZpeC5qcyIsIm5vZGVfbW9kdWxlcy90b3VnaC1jb29raWUvbGliL3N0b3JlLmpzIiwibm9kZV9tb2R1bGVzL3RvdWdoLWNvb2tpZS9wYWNrYWdlLmpzb24iLCJub2RlX21vZHVsZXMvdHI0Ni9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90cjQ2L2xpYi9tYXBwaW5nVGFibGUuanNvbiIsIm5vZGVfbW9kdWxlcy90dW5uZWwtYWdlbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdHdlZXRuYWNsL25hY2wtZmFzdC5qcyIsIm5vZGVfbW9kdWxlcy91cmwvdXJsLmpzIiwibm9kZV9tb2R1bGVzL3VybC91dGlsLmpzIiwibm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L2lzQnVmZmVyQnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiLCJub2RlX21vZHVsZXMvdXVpZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIm5vZGVfbW9kdWxlcy91dWlkL2xpYi9ybmctYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy91dWlkL3YxLmpzIiwibm9kZV9tb2R1bGVzL3V1aWQvdjQuanMiLCJub2RlX21vZHVsZXMvdmVycm9yL2xpYi92ZXJyb3IuanMiLCJub2RlX21vZHVsZXMvdm0tYnJvd3NlcmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy93ZWJpZGwtY29udmVyc2lvbnMvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3dlYndvcmtpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvd2hhdHdnLWVuY29kaW5nL2xpYi9sYWJlbHMtdG8tbmFtZXMuanNvbiIsIm5vZGVfbW9kdWxlcy93aGF0d2ctZW5jb2RpbmcvbGliL3N1cHBvcnRlZC1uYW1lcy5qc29uIiwibm9kZV9tb2R1bGVzL3doYXR3Zy1lbmNvZGluZy9saWIvd2hhdHdnLWVuY29kaW5nLmpzIiwibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC5qcyIsIm5vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi9wdWJsaWMtYXBpLmpzIiwibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL3VybC1zdGF0ZS1tYWNoaW5lLmpzIiwibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbm9kZV9tb2R1bGVzL3dlYmlkbC1jb252ZXJzaW9ucy9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMveG1sLW5hbWUtdmFsaWRhdG9yL2xpYi9nZW5lcmF0ZWQtcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL3htbC1uYW1lLXZhbGlkYXRvci9saWIveG1sLW5hbWUtdmFsaWRhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3h0ZW5kL2ltbXV0YWJsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQTs7OztBQUlBLElBQUksU0FBUzs7QUFFWCxnQkFBYyxVQUFVLElBQVYsRUFBZ0I7QUFDNUIsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EsUUFBSSxTQUFTLElBQUksVUFBSixFQUFiO0FBQ0EsV0FBTyxNQUFQLEdBQWdCLFlBQVk7QUFDMUIsVUFBSSxVQUFVLE9BQU8sTUFBckI7QUFDQSxVQUFJLFNBQVMsUUFBUSxLQUFSLENBQWMsR0FBZCxFQUFtQixDQUFuQixDQUFiO0FBQ0EsdUJBQWlCLE9BQWpCLENBQXlCLE1BQXpCO0FBQ0QsS0FKRDtBQUtBLFdBQU8sYUFBUCxDQUFxQixJQUFyQjs7QUFFQSxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0QsR0FiVTs7QUFlWCxnQkFBYyxVQUFVLE1BQVYsRUFBa0IsUUFBbEIsRUFBNEI7QUFDeEMsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBTCxDQUFiO0FBQ0EsUUFBSSxNQUFNLE9BQU8sTUFBakI7QUFDQSxRQUFJLFNBQVMsSUFBSSxXQUFKLENBQWdCLEdBQWhCLENBQWI7QUFDQSxRQUFJLE9BQU8sSUFBSSxVQUFKLENBQWUsTUFBZixDQUFYO0FBQ0EsU0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEdBQXBCLEVBQXlCLEdBQXpCLEVBQThCO0FBQzVCLFdBQUssQ0FBTCxJQUFVLE9BQU8sVUFBUCxDQUFrQixDQUFsQixDQUFWO0FBQ0Q7QUFDRCxRQUFJLE9BQU8sSUFBSSxJQUFKLENBQVMsQ0FBQyxJQUFELENBQVQsRUFBaUIsRUFBQyxNQUFNLFFBQVAsRUFBakIsQ0FBWDtBQUNBLHFCQUFpQixPQUFqQixDQUF5QixJQUF6Qjs7QUFFQSxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0Q7QUE1QlUsQ0FBYjs7QUErQkEsT0FBTyxPQUFQLEdBQWlCLE1BQWpCOzs7QUNwQ0EsSUFBSSxTQUFTLFFBQVEsaUJBQVIsQ0FBYjtBQUNBOzs7Ozs7OztBQVFBLE9BQU8sT0FBUCxHQUFpQixTQUFTLG9CQUFULENBQStCLGFBQS9CLEVBQThDO0FBQzdELE1BQUksa0JBQWtCLE9BQU8sUUFBUCxFQUF0QjtBQUNBLE1BQUksYUFBYSxFQUFqQjs7QUFFRDtBQUNDLE1BQUksY0FBYyxNQUFkLEtBQXlCLENBQTdCLEVBQWdDO0FBQzlCLFdBQU8sZ0JBQWdCLE9BQWhCLENBQXdCLFVBQXhCLEVBQW9DLE9BQXBDLEVBQVA7QUFDRDs7QUFFRCxNQUFJLGtCQUFrQixjQUFjLEtBQWQsSUFBdEI7QUFDRDtBQUNDLFNBQU8sZ0JBQWdCLEtBQWhCLE9BQTRCLFVBQW5DLEVBQStDO0FBQzdDLG9CQUFnQixJQUFoQixDQUFxQixVQUFVLElBQVYsRUFBZ0I7QUFDbkMsaUJBQVcsSUFBWCxDQUFnQixJQUFoQjtBQUNELEtBRkQ7QUFHQSxRQUFJLGNBQWMsTUFBZCxLQUF5QixDQUE3QixFQUFnQztBQUM5QixhQUFPLGdCQUFnQixPQUFoQixDQUF3QixVQUF4QixFQUFvQyxPQUFwQyxFQUFQO0FBQ0Q7QUFDRCxzQkFBa0IsY0FBYyxLQUFkLElBQWxCO0FBQ0Q7O0FBRUY7QUFDQyxNQUFJLFdBQVcsWUFBWSxZQUFZO0FBQ3ZDO0FBQ0UsV0FBTyxnQkFBZ0IsS0FBaEIsT0FBNEIsVUFBbkMsRUFBK0M7QUFDN0Msc0JBQWdCLElBQWhCLENBQXFCLFVBQVUsSUFBVixFQUFnQjtBQUNuQyxtQkFBVyxJQUFYLENBQWdCLElBQWhCO0FBQ0QsT0FGRDtBQUdBLFVBQUksY0FBYyxNQUFkLEtBQXlCLENBQTdCLEVBQWdDO0FBQzlCLHNCQUFjLFFBQWQ7QUFDQSx3QkFBZ0IsT0FBaEIsQ0FBd0IsVUFBeEI7QUFDQTtBQUNEO0FBQ0Qsd0JBQWtCLGNBQWMsS0FBZCxJQUFsQjtBQUNEO0FBQ0YsR0FiYyxFQWFaLEVBYlksQ0FBZjs7QUFlQSxTQUFPLGdCQUFnQixPQUFoQixFQUFQO0FBQ0QsQ0F0Q0Q7OztBQ1RBLElBQUksU0FBUyxRQUFRLG1CQUFSLENBQWI7QUFDQSxJQUFJLFFBQVEsUUFBUSxrQkFBUixDQUFaO0FBQ0EsSUFBSSxVQUFVLFFBQVEsb0JBQVIsQ0FBZDtBQUNBLElBQUksUUFBUSxRQUFRLGtCQUFSLENBQVo7QUFDQSxJQUFJLFVBQVUsUUFBUSxvQkFBUixDQUFkO0FBQ0EsSUFBSSxxQkFBcUIsUUFBUSwrQkFBUixDQUF6QjtBQUNBLE1BQU0sa0JBQWtCLFFBQVEsNEJBQVIsQ0FBeEI7QUFDQSxJQUFJLHNCQUFzQixRQUFRLGdDQUFSLENBQTFCO0FBQ0EsSUFBSSxJQUFJLFFBQVEsUUFBUixDQUFSO0FBQ0EsSUFBSSxTQUFTLElBQUksTUFBSixFQUFiO0FBQ0EsSUFBSSxLQUFKO0FBQ0EsT0FBTyxpQkFBUCxDQUF5QixZQUFZO0FBQ25DLFVBQVEsR0FBUiwwRkFBWSx1QkFBWixFQUFxQyxNQUFyQztBQUNBLFVBQVEsSUFBSSxLQUFKLENBQVUsTUFBVixFQUFrQixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUFsQixDQUFSO0FBQ0QsQ0FIRDs7QUFLQSxPQUFPLE9BQVAsQ0FBZSxTQUFmLENBQXlCLFdBQXpCLENBQXFDLFlBQVk7QUFDL0MsU0FBTyxpQkFBUCxDQUF5QixZQUFZO0FBQ25DLFlBQVEsR0FBUiwwRkFBWSx1QkFBWixFQUFxQyxNQUFyQztBQUNBLFlBQVEsSUFBSSxLQUFKLENBQVUsTUFBVixFQUFrQixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUFsQixDQUFSO0FBQ0QsR0FIRDtBQUlELENBTEQ7O0FBT0EsSUFBSSxrQkFBa0IsVUFBVSxPQUFWLEVBQW1CLFFBQW5CLEVBQTZCO0FBQ2pELFNBQU8sSUFBUCxDQUFZLEtBQVosQ0FBa0I7QUFDaEIsWUFBUSxJQURRO0FBRWhCLG1CQUFlO0FBRkMsR0FBbEIsRUFHRyxVQUFVLElBQVYsRUFBZ0I7QUFDakIsUUFBSSxLQUFLLE1BQUwsR0FBYyxDQUFsQixFQUFxQjtBQUNuQixXQUFLLE9BQUwsQ0FBYSxHQUFiLENBQWlCLDBCQUFqQjtBQUNELEtBRkQsTUFFTztBQUNMLFVBQUksTUFBTSxLQUFLLENBQUwsQ0FBVjtBQUNBLGFBQU8sSUFBUCxDQUFZLFdBQVosQ0FBd0IsSUFBSSxFQUE1QixFQUFnQyxPQUFoQyxFQUF5QyxRQUF6QztBQUNEO0FBQ0YsR0FWRDtBQVdELENBWkQ7O0FBY0EsT0FBTyxPQUFQLENBQWUsU0FBZixDQUF5QixXQUF6QixDQUNDLFVBQVUsT0FBVixFQUFtQixNQUFuQixFQUEyQixZQUEzQixFQUF5QztBQUN4QyxVQUFRLEdBQVIsOEZBQVksMEJBQVosRUFBd0MsT0FBeEM7O0FBRUEsTUFBSSxRQUFRLGFBQVosRUFBMkI7QUFDekIsVUFBTSxhQUFOLENBQW9CLFFBQVEsT0FBNUIsRUFBcUMsWUFBckM7QUFDQSxXQUFPLElBQVA7QUFDRCxHQUhELE1BR08sSUFBSSxRQUFRLFdBQVosRUFBeUI7QUFDOUIsVUFBTSxXQUFOLENBQWtCLFFBQVEsT0FBMUIsRUFBbUMsWUFBbkM7QUFDQSxXQUFPLElBQVA7QUFDRCxHQUhNLE1BR0EsSUFBSSxRQUFRLGFBQVosRUFBMkI7QUFDaEMsVUFBTSxhQUFOLENBQW9CLFFBQVEsT0FBNUIsRUFBcUMsWUFBckM7QUFDQSxXQUFPLElBQVA7QUFDRCxHQUhNLE1BR0EsSUFBSSxRQUFRLGNBQVosRUFBNEI7QUFDakMsVUFBTSxjQUFOLENBQXFCLFlBQXJCO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FITSxNQUdBLElBQUksUUFBUSxhQUFaLEVBQTJCO0FBQ2hDLFVBQU0sYUFBTixDQUFvQixRQUFRLFNBQTVCLEVBQXVDLFlBQXZDO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FITSxNQUdBLElBQUksUUFBUSxjQUFaLEVBQTRCO0FBQ2pDLFVBQU0sY0FBTixDQUFxQixJQUFJLE9BQUosQ0FBWSxRQUFRLE9BQXBCLEVBQTZCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQTdCLENBQXJCLEVBQTBFLFlBQTFFO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FITSxNQUdBLElBQUksUUFBUSxhQUFaLEVBQTJCO0FBQ2hDLFFBQUksVUFBVSxJQUFJLE9BQUosQ0FBWSxRQUFRLE9BQXBCLEVBQTZCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQTdCLENBQWQ7QUFDQSxRQUFJLFFBQVEsSUFBSSxLQUFKLEVBQVo7QUFDQSxRQUFJLFVBQVUsSUFBSSxrQkFBSixDQUF1QjtBQUNuQyxxQkFBZSxRQUFRO0FBRFksS0FBdkIsRUFFWCxFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUZXLENBQWQ7O0FBSUEsUUFBSSxVQUFVLElBQUksT0FBSixDQUFZO0FBQ3hCLGFBQU8sS0FEaUI7QUFFeEIsZUFBUyxPQUZlO0FBR3hCLGVBQVMsT0FIZTtBQUl4QixhQUFPLEtBSmlCO0FBS3hCLHVCQUFpQixRQUFRO0FBTEQsS0FBWixFQU1YLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBTlcsQ0FBZDs7QUFRQSxRQUFJO0FBQ0YsY0FBUSxHQUFSLENBQVksWUFBWTtBQUN0QixnQkFBUSxLQUFSO0FBQ0EsWUFBSSxlQUFlLE9BQU8sYUFBUCxDQUFxQixNQUFyQixDQUE0QixtQkFBNUIsRUFBaUQ7QUFDbEUsZ0JBQU0sT0FENEQ7QUFFbEUsbUJBQVMsMkJBRnlEO0FBR2xFLGlCQUFPLG9CQUgyRDtBQUlsRSxtQkFBUyx1QkFBdUIsUUFBUTtBQUowQixTQUFqRCxFQUtoQixVQUFVLEVBQVYsRUFBYztBQUNuQjtBQUNHLFNBUGtCLENBQW5CO0FBUUE7QUFDRCxPQVhEO0FBWUQsS0FiRCxDQWFJLE9BQU8sQ0FBUCxFQUFVO0FBQ1osY0FBUSxHQUFSLDJGQUFZLDhCQUE4QixDQUExQztBQUNEOztBQUVELFdBQU8sSUFBUDtBQUNELEdBakNNLE1BaUNBLElBQUksUUFBUSxxQkFBWixFQUFtQztBQUN4QyxVQUFNLFVBQVUsSUFBSSxPQUFKLENBQVksUUFBUSxPQUFwQixFQUE2QixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUE3QixDQUFoQjtBQUNBLFVBQU0sUUFBUSxJQUFJLEtBQUosRUFBZDtBQUNBLFVBQU0sVUFBVSxJQUFJLGVBQUosQ0FBb0I7QUFDbEMscUJBQWUsUUFBUTtBQURXLEtBQXBCLEVBRWIsRUFBQyxDQUFELEVBQUksTUFBSixFQUFZLFFBQVosRUFGYSxDQUFoQjs7QUFJQSxVQUFNLFVBQVUsSUFBSSxPQUFKLENBQVk7QUFDMUIsYUFBTyxLQURtQjtBQUUxQixlQUFTLE9BRmlCO0FBRzFCLGVBQVMsT0FIaUI7QUFJMUIsYUFBTyxLQUptQjtBQUsxQix1QkFBaUIsUUFBUTtBQUxDLEtBQVosRUFNYixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQU5hLENBQWhCOztBQVFBLFFBQUk7QUFDRixjQUFRLEdBQVIsQ0FBWSxZQUFZO0FBQ3RCLGdCQUFRLEtBQVI7QUFDQSxZQUFJLGVBQWUsT0FBTyxhQUFQLENBQXFCLE1BQXJCLENBQTRCLG1CQUE1QixFQUFpRDtBQUNsRSxnQkFBTSxPQUQ0RDtBQUVsRSxtQkFBUywyQkFGeUQ7QUFHbEUsaUJBQU8sb0JBSDJEO0FBSWxFLG1CQUFTLHVCQUF1QixRQUFRO0FBSjBCLFNBQWpELEVBS2hCLFVBQVUsRUFBVixFQUFjO0FBQ2Y7QUFDRCxTQVBrQixDQUFuQjtBQVFBO0FBQ0QsT0FYRDtBQVlELEtBYkQsQ0FhSSxPQUFPLENBQVAsRUFBVTtBQUNaLGNBQVEsR0FBUiw0RkFBWSw4QkFBOEIsQ0FBMUM7QUFDRDtBQUNELFdBQU8sSUFBUDtBQUNELEdBaENNLE1BZ0NBLElBQUksUUFBUSxtQkFBWixFQUFpQztBQUN0QyxXQUFPLElBQVAsQ0FBWSxLQUFaLENBQWtCO0FBQ2hCLGNBQVEsSUFEUTtBQUVoQixxQkFBZTtBQUZDLEtBQWxCLEVBR0csVUFBVSxJQUFWLEVBQWdCO0FBQ2pCLFVBQUksS0FBSyxNQUFMLEdBQWMsQ0FBbEIsRUFBcUI7QUFDbkIsYUFBSyxPQUFMLENBQWEsR0FBYixDQUFpQiwwQkFBakI7QUFDRCxPQUZELE1BRU87QUFDTCxZQUFJLE1BQU0sS0FBSyxDQUFMLENBQVY7QUFDQSxlQUFPLElBQVAsQ0FBWSxXQUFaLENBQXdCLElBQUksRUFBNUIsRUFBZ0MsT0FBaEMsRUFBeUMsWUFBekM7QUFDRDtBQUNGLEtBVkQ7QUFXQSxXQUFPLElBQVA7QUFDRCxHQWJNLE1BYUEsSUFBSSxRQUFRLG9CQUFaLEVBQWtDO0FBQ3ZDLFFBQUksbUJBQW1CLG9CQUFvQixrQkFBcEIsQ0FBdkI7QUFDQSxRQUFJLG1CQUFtQixpQkFBaUIsUUFBUSxFQUF6QixFQUE2QixRQUFRLE9BQXJDLENBQXZCO0FBQ0EscUJBQWlCLElBQWpCLENBQXNCLFVBQVUsUUFBVixFQUFvQjtBQUN4QyxtQkFBYSxRQUFiO0FBQ0QsS0FGRDs7QUFJQSxXQUFPLElBQVA7QUFDRDtBQUNGLENBN0dEOzs7QUNyQ0EsSUFBSSxnQkFBZ0IsUUFBUSw0QkFBUixDQUFwQjtBQUNBLElBQUksbUJBQW1CLFFBQVEsK0JBQVIsQ0FBdkI7O0FBRUEsU0FBUyxpQkFBVCxDQUE0QixPQUE1QixFQUFxQyxNQUFyQyxFQUE2QyxZQUE3QyxFQUEyRCxPQUEzRCxFQUFvRTtBQUNsRSxNQUFJLElBQUksUUFBUSxDQUFoQjtBQUNBLE1BQUksV0FBVyxRQUFRLFFBQXZCO0FBQ0EsTUFBSSxTQUFTLFFBQVEsTUFBckI7QUFDQSxVQUFRLEdBQVIsMEZBQVksMEJBQVosRUFBd0MsT0FBeEM7O0FBRUEsTUFBSSxRQUFRLFdBQVosRUFBeUI7QUFDdkIsWUFBUSxHQUFSLG1HQUFZLGtDQUFaLEVBQWdELE9BQWhEO0FBQ0EsUUFBSSxZQUFZLElBQUksYUFBSixDQUFrQixPQUFsQixFQUEyQixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUEzQixDQUFoQjtBQUNBLFFBQUksZUFBZSxVQUFVLE9BQVYsRUFBbkI7QUFDQSxpQkFBYSxJQUFiLENBQWtCLFVBQVUsSUFBVixFQUFnQjtBQUNoQyxjQUFRLEdBQVIsa0ZBQVksb0JBQVosRUFBa0MsSUFBbEM7QUFDQSxtQkFBYSxJQUFiO0FBQ0QsS0FIRDtBQUlBLFdBQU8sSUFBUDtBQUNELEdBVEQsTUFTTyxJQUFJLFFBQVEsbUJBQVosRUFBaUM7QUFDdEMsWUFBUSxHQUFSLDJHQUFZLDBDQUFaLEVBQXdELE9BQXhEO0FBQ0EsUUFBSSxZQUFZLElBQUksYUFBSixDQUFrQixPQUFsQixFQUEyQixFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUEzQixDQUFoQjtBQUNBLFFBQUksZUFBZSxVQUFVLHFCQUFWLENBQWdDLFFBQVEsaUJBQXhDLEVBQTJELFFBQVEsVUFBbkUsQ0FBbkI7QUFDQSxpQkFBYSxJQUFiLENBQWtCLFVBQVUsSUFBVixFQUFnQjtBQUNoQyxjQUFRLEdBQVIsa0ZBQVksb0JBQVosRUFBa0MsSUFBbEM7QUFDQSxtQkFBYSxJQUFiO0FBQ0QsS0FIRDtBQUlBLFdBQU8sSUFBUDtBQUNEO0FBQ0Q7QUFWTyxPQVdGLElBQUksUUFBUSxpQkFBWixFQUErQjtBQUNsQyxVQUFJLGdCQUFnQixpQkFBaUIsZUFBakIsQ0FBcEI7O0FBRUEsY0FBUSxHQUFSLGlHQUFZLGdDQUFaLEVBQThDLE9BQTlDOztBQUVBLFVBQUksbUJBQW1CLGNBQWMsUUFBUSxFQUF0QixFQUEwQixRQUFRLE9BQWxDLEVBQTJDLEVBQUMsQ0FBRCxFQUFJLFFBQUosRUFBYyxNQUFkLEVBQTNDLENBQXZCO0FBQ0EsdUJBQWlCLElBQWpCLENBQXNCLFVBQVUsUUFBVixFQUFvQjtBQUN4QyxxQkFBYSxRQUFiO0FBQ0QsT0FGRDs7QUFJQSxhQUFPLElBQVA7QUFDRDtBQUNGOztBQUVELE9BQU8sT0FBUCxHQUFpQixpQkFBakI7OztBQzNDQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiO0FBQ0E7OztBQUdBLElBQUksbUJBQW1COztBQUVyQixTQUFPLFlBQVk7QUFDakIsV0FBTyxPQUFPLFFBQVAsR0FBa0IsT0FBbEIsQ0FBMEIsT0FBMUIsRUFBbUMsT0FBbkMsRUFBUDtBQUNELEdBSm9COztBQU10Qjs7OztBQUlDLGtCQUFnQixZQUFZO0FBQzFCLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2Qjs7QUFFQSxXQUFPLElBQVAsQ0FBWSxLQUFaLENBQWtCO0FBQ2hCLGNBQVEsSUFEUTtBQUVoQixxQkFBZTtBQUZDLEtBQWxCLEVBR0csVUFBVSxJQUFWLEVBQWdCO0FBQ2pCLFVBQUksS0FBSyxNQUFMLEdBQWMsQ0FBbEIsRUFBcUI7QUFDdkI7QUFDSSx5QkFBaUIsTUFBakIsQ0FBd0IsOEJBQXhCO0FBQ0QsT0FIRCxNQUdPO0FBQ0wsWUFBSSxRQUFRLEtBQUssQ0FBTCxFQUFRLEVBQXBCO0FBQ0EseUJBQWlCLE9BQWpCLENBQXlCLEtBQXpCO0FBQ0Q7QUFDRixLQVhEO0FBWUEsV0FBTyxpQkFBaUIsT0FBakIsRUFBUDtBQUNELEdBMUJvQjs7QUE0QnRCOzs7OztBQUtDLHdCQUFzQixVQUFVLE9BQVYsRUFBbUI7QUFDdkMsUUFBSSxxQkFBcUI7QUFDdkIseUJBQW1CLElBREk7QUFFdkIsVUFBSSxRQUFRLEVBRlc7QUFHdkIsZUFBUyxRQUFRO0FBSE0sS0FBekI7QUFLQSxRQUFJLG1CQUFtQixPQUFPLFFBQVAsRUFBdkI7QUFDQSxRQUFJLHNCQUFzQixLQUFLLGNBQUwsRUFBMUI7QUFDQSx3QkFBb0IsSUFBcEIsQ0FBeUIsVUFBVSxLQUFWLEVBQWlCO0FBQ3hDLGFBQU8sSUFBUCxDQUFZLFdBQVosQ0FBd0IsS0FBeEIsRUFBK0Isa0JBQS9CLEVBQW1ELFVBQVUsUUFBVixFQUFvQjtBQUNyRSx5QkFBaUIsT0FBakIsQ0FBeUIsUUFBekI7QUFDRCxPQUZEO0FBR0QsS0FKRDs7QUFNQSxXQUFPLGdCQUFQO0FBQ0Q7QUFoRG9CLENBQXZCOztBQW1EQSxPQUFPLE9BQVAsR0FBaUIsZ0JBQWpCOzs7QUN2REEsSUFBSSxTQUFTLFFBQVEsaUJBQVIsQ0FBYjtBQUNBLElBQUksdUJBQXVCLFFBQVEsdUNBQVIsQ0FBM0I7O0FBRUEsSUFBSSxxQkFBcUIsVUFBVSxPQUFWLEVBQW1CLFdBQW5CLEVBQWdDO0FBQ3ZELE9BQUssYUFBTCxHQUFxQixRQUFRLGFBQTdCOztBQUVBO0FBQ0Q7QUFDQSxDQUxEOztBQU9BLG1CQUFtQixTQUFuQixHQUErQjs7QUFFN0Isb0JBQWtCLFVBQVUsUUFBVixFQUFvQixLQUFwQixFQUEyQjtBQUMzQyxRQUFJLFVBQVUsSUFBZDtBQUNBLFFBQUksS0FBSyxNQUFMLEtBQWdCLFNBQXBCLEVBQStCO0FBQ2hDO0FBQ0csYUFBTyxJQUFQLENBQVksR0FBWixDQUFnQixLQUFLLEdBQUwsQ0FBUyxFQUF6QixFQUE2QixVQUFVLEdBQVYsRUFBZTtBQUMxQyxZQUFJLENBQUMsR0FBTCxFQUFVO0FBQ1IsZ0JBQU0sd0JBQU47QUFDRDtBQUNGLE9BSkQ7O0FBTUEsZUFBUyxJQUFULENBQWMsS0FBZDtBQUNBO0FBQ0Q7O0FBRUQsV0FBTyxPQUFQLENBQWUsTUFBZixDQUFzQixFQUFDLFFBQVEsT0FBVCxFQUFrQixPQUFPLElBQXpCLEVBQStCLFFBQVEsR0FBdkMsRUFBNEMsU0FBUyxJQUFyRCxFQUEyRCxLQUFLLGlCQUFoRSxFQUF0QixFQUEwRyxVQUFVLE1BQVYsRUFBa0I7QUFDMUgsY0FBUSxNQUFSLEdBQWlCLE1BQWpCO0FBQ0EsY0FBUSxHQUFSLEdBQWMsT0FBTyxJQUFQLENBQVksQ0FBWixDQUFkOztBQUVBLGVBQVMsSUFBVCxDQUFjLEtBQWQ7QUFDRCxLQUxEO0FBTUQsR0F0QjRCOztBQXdCN0IsV0FBUyxVQUFVLEdBQVYsRUFBZSxRQUFmLEVBQXlCO0FBQ2hDLFFBQUksTUFBTSxLQUFLLEdBQWY7O0FBRUEsUUFBSSxrQkFBa0IsVUFBVSxLQUFWLEVBQWlCLFVBQWpCLEVBQTZCLEdBQTdCLEVBQWtDO0FBQ3RELFVBQUksVUFBVSxLQUFLLEdBQUwsQ0FBUyxFQUF2QixFQUEyQjtBQUN6QixZQUFJLFdBQVcsTUFBWCxLQUFzQixVQUExQixFQUFzQztBQUN6Qzs7QUFFQTtBQUNLLGlCQUFPLElBQVAsQ0FBWSxTQUFaLENBQXNCLGNBQXRCLENBQXFDLGVBQXJDOztBQUVMO0FBQ0sscUJBQVcsUUFBWCxFQUFxQixLQUFLLGFBQTFCO0FBQ0Q7QUFDRjtBQUNGLEtBWnFCLENBWXBCLElBWm9CLENBWWYsSUFaZSxDQUF0QjtBQWFBLFdBQU8sSUFBUCxDQUFZLFNBQVosQ0FBc0IsV0FBdEIsQ0FBa0MsZUFBbEM7O0FBRUEsV0FBTyxJQUFQLENBQVksTUFBWixDQUFtQixJQUFJLEVBQXZCLEVBQTJCLEVBQUMsS0FBSyxHQUFOLEVBQTNCO0FBQ0QsR0EzQzRCOztBQTZDN0IsU0FBTyxZQUFZO0FBQ2pCLFdBQU8sT0FBUCxDQUFlLE1BQWYsQ0FBc0IsS0FBSyxNQUFMLENBQVksRUFBbEM7QUFDRCxHQS9DNEI7QUFnRDdCOzs7OztBQUtBLGNBQVksVUFBVSxNQUFWLEVBQWtCLGNBQWxCLEVBQWtDO0FBQzVDLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2QjtBQUNBLFFBQUksMEJBQTBCLEVBQTlCO0FBQ0EsUUFBSSxlQUFlLGdCQUFnQixNQUFuQzs7QUFFQSxTQUFLLElBQUksSUFBVCxJQUFpQixNQUFqQixFQUF5QjtBQUN2QixVQUFJLEtBQUssTUFBTCxDQUFZLENBQVosRUFBZSxZQUFmLE1BQWlDLGVBQXJDLEVBQXNEO0FBQ3BELFlBQUksYUFBYSxLQUFLLFNBQUwsQ0FBZSxZQUFmLEVBQTZCLEtBQUssTUFBbEMsQ0FBakI7QUFDQSxnQ0FBd0IsSUFBeEIsQ0FBNkIsVUFBVSxVQUFWLEVBQXNCO0FBQ2pELGNBQUksY0FBYyxPQUFPLGtCQUFrQixVQUF6QixDQUFsQjtBQUNBLGNBQUksdUJBQXVCLE9BQU8sUUFBUCxFQUEzQjs7QUFFQTtBQUNBLGNBQUksT0FBTyxVQUFVLFdBQVYsRUFBdUIsT0FBTyxvQkFBb0IsVUFBM0IsQ0FBdkIsQ0FBWDs7QUFFQSxpQkFBTyxPQUFPLG9CQUFvQixVQUEzQixDQUFQO0FBQ0EsaUJBQU8sT0FBTyxrQkFBa0IsVUFBekIsQ0FBUDs7QUFFQSxjQUFJLGNBQWMsT0FBTyxHQUFQLENBQVcsZUFBWCxDQUEyQixJQUEzQixDQUFsQjtBQUNBLGNBQUksZUFBZSxlQUFlLFVBQWYsQ0FBbkI7O0FBRUE7QUFDQSxjQUFJLGtCQUFrQjtBQUNwQixpQkFBSyxXQURlO0FBRXBCLHNCQUFVO0FBRlUsV0FBdEI7O0FBS0E7QUFDQSxpQkFBTyxTQUFQLENBQWlCLFFBQWpCLENBQTBCLGVBQTFCLEVBQTJDLFVBQVUsVUFBVixFQUFzQjtBQUMvRCxnQkFBSSxlQUFlLFVBQVUsWUFBVixFQUF3QjtBQUN6QyxrQkFBSSxhQUFhLEVBQWIsS0FBb0IsVUFBcEIsSUFBa0MsYUFBYSxLQUFuRCxFQUEwRDtBQUN4RCxvQkFBSSxhQUFhLEtBQWIsQ0FBbUIsT0FBbkIsS0FBK0IsVUFBbkMsRUFBK0M7QUFDN0MsdUNBQXFCLE9BQXJCO0FBQ0EseUJBQU8sU0FBUCxDQUFpQixTQUFqQixDQUEyQixjQUEzQixDQUEwQyxZQUExQztBQUNELGlCQUhELE1BR08sSUFBSSxhQUFhLEtBQWIsQ0FBbUIsT0FBbkIsS0FBK0IsYUFBbkMsRUFBa0Q7QUFDdkQsdUNBQXFCLE1BQXJCLENBQTRCLGlCQUE1QjtBQUNBLHlCQUFPLFNBQVAsQ0FBaUIsU0FBakIsQ0FBMkIsY0FBM0IsQ0FBMEMsWUFBMUM7QUFDRDtBQUNGO0FBQ0YsYUFWRDs7QUFZQSxtQkFBTyxTQUFQLENBQWlCLFNBQWpCLENBQTJCLFdBQTNCLENBQXVDLFlBQXZDO0FBQ0QsV0FkRDs7QUFnQkEsaUJBQU8scUJBQXFCLE9BQXJCLEVBQVA7QUFDRCxTQXJDNEIsQ0FxQzNCLElBckMyQixDQXFDdEIsSUFyQ3NCLEVBcUNoQixVQXJDZ0IsQ0FBN0I7QUFzQ0Q7QUFDRjs7QUFFRCx5QkFBcUIsdUJBQXJCLEVBQThDLElBQTlDLENBQW1ELFlBQVk7QUFDN0QsdUJBQWlCLE9BQWpCO0FBQ0QsS0FGRDs7QUFJQSxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0QsR0EzRzRCO0FBNEc3QixhQUFXLFVBQVUsR0FBVixFQUFlLE9BQWYsRUFBd0IsZ0JBQXhCLEVBQTBDLFFBQTFDLEVBQW9ELEtBQXBELEVBQTJEO0FBQ3BFLFFBQUksVUFBVSxJQUFkOztBQUVBLFNBQUssZ0JBQUwsQ0FBc0IsWUFBWTtBQUNoQyxVQUFJLE1BQU0sUUFBUSxHQUFsQjtBQUNBLGNBQVEsR0FBUix3RUFBWSxrQkFBWjtBQUNBLGNBQVEsT0FBUixDQUFnQixHQUFoQixFQUFxQixZQUFZO0FBQy9CLFlBQUksVUFBVTtBQUNaLHVCQUFhLElBREQ7QUFFWixtQkFBUyxLQUFLLEtBQUwsQ0FBVyxLQUFLLFNBQUwsQ0FBZSxPQUFmLENBQVgsQ0FGRztBQUdaLDRCQUFrQjtBQUhOLFNBQWQ7O0FBTUEsZUFBTyxJQUFQLENBQVksV0FBWixDQUF3QixJQUFJLEVBQTVCLEVBQWdDLE9BQWhDLEVBQXlDLFVBQVUsSUFBVixFQUFnQjtBQUN2RCxrQkFBUSxHQUFSLHlGQUFZLDhCQUFaLEVBQTRDLElBQTVDO0FBQ0EsbUJBQVMsSUFBVCxDQUFjLEtBQWQsRUFBcUIsSUFBckIsRUFBMkIsSUFBM0I7QUFDRCxTQUhEO0FBSUQsT0FYRDtBQVlELEtBZkQsRUFlRyxJQWZIO0FBZ0JEO0FBL0g0QixDQUEvQjs7QUFrSUEsT0FBTyxPQUFQLEdBQWlCLGtCQUFqQjs7QUFFQSxTQUFTLFNBQVQsQ0FBb0IsT0FBcEIsRUFBNkIsY0FBYyxFQUEzQyxFQUErQyxZQUFZLEdBQTNELEVBQWdFO0FBQzlELFFBQU0saUJBQWlCLE9BQU8sSUFBUCxDQUFZLE9BQVosQ0FBdkI7QUFDQSxRQUFNLGFBQWEsRUFBbkI7O0FBRUEsT0FBSyxJQUFJLFNBQVMsQ0FBbEIsRUFBcUIsU0FBUyxlQUFlLE1BQTdDLEVBQXFELFVBQVUsU0FBL0QsRUFBMEU7QUFDeEUsVUFBTSxRQUFRLGVBQWUsS0FBZixDQUFxQixNQUFyQixFQUE2QixTQUFTLFNBQXRDLENBQWQ7O0FBRUEsVUFBTSxjQUFjLElBQUksS0FBSixDQUFVLE1BQU0sTUFBaEIsQ0FBcEI7QUFDQSxTQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksTUFBTSxNQUExQixFQUFrQyxHQUFsQyxFQUF1QztBQUNyQyxrQkFBWSxDQUFaLElBQWlCLE1BQU0sVUFBTixDQUFpQixDQUFqQixDQUFqQjtBQUNEOztBQUVELFVBQU0sWUFBWSxJQUFJLFVBQUosQ0FBZSxXQUFmLENBQWxCOztBQUVBLGVBQVcsSUFBWCxDQUFnQixTQUFoQjtBQUNEOztBQUVELFFBQU0sT0FBTyxJQUFJLE9BQU8sSUFBWCxDQUFnQixVQUFoQixFQUE0QixFQUFDLE1BQU0sV0FBUCxFQUE1QixDQUFiO0FBQ0EsU0FBTyxJQUFQO0FBQ0Q7OztBQ2pLRCxJQUFJLFNBQVMsWUFBWSxDQUV4QixDQUZEOztBQUlBLE9BQU8sU0FBUCxHQUFtQjs7QUFFakIsYUFBVywyQkFGTTtBQUdqQixVQUFRLDJCQUhTOztBQUtqQixZQUFVO0FBQ1IsaUJBQWEsT0FETDtBQUVWO0FBQ0UsZUFBVyxrQkFISDtBQUlWO0FBQ0E7QUFDRSxZQUFRO0FBTkEsR0FMTzs7QUFjbEI7OztBQUdDLHFCQUFtQixVQUFVLFFBQVYsRUFBb0I7QUFDckMsV0FBTyxPQUFQLENBQWUsSUFBZixDQUFvQixHQUFwQixDQUF3QixDQUFDLFdBQUQsRUFBYyxRQUFkLEVBQXdCLGFBQXhCLENBQXhCLEVBQWdFLFVBQVUsS0FBVixFQUFpQjtBQUMvRSxXQUFLLFdBQUwsR0FBbUIsTUFBTSxXQUFOLElBQXFCLEtBQUssUUFBTCxDQUFjLFdBQXREO0FBQ0EsVUFBSSxLQUFLLFdBQUwsS0FBcUIsT0FBekIsRUFBa0M7QUFDaEMsYUFBSyxTQUFMLEdBQWlCLEtBQUssUUFBTCxDQUFjLFNBQS9CO0FBQ0EsYUFBSyxNQUFMLEdBQWMsS0FBSyxRQUFMLENBQWMsTUFBNUI7QUFDRCxPQUhELE1BR087QUFDTCxhQUFLLFNBQUwsR0FBaUIsTUFBTSxTQUFOLElBQW1CLEtBQUssUUFBTCxDQUFjLFNBQWxEO0FBQ0EsYUFBSyxNQUFMLEdBQWMsTUFBTSxNQUFOLElBQWdCLEtBQUssUUFBTCxDQUFjLE1BQTVDO0FBQ0Q7O0FBRUQ7QUFDRCxLQVgrRCxDQVc5RCxJQVg4RCxDQVd6RCxJQVh5RCxDQUFoRTtBQVlELEdBOUJnQjs7QUFnQ2xCOzs7Ozs7QUFNQyx1QkFBcUIsVUFBVSxLQUFWLEVBQWlCLFFBQWpCLEVBQTJCO0FBQzlDLFdBQU8sT0FBUCxDQUFlLElBQWYsQ0FBb0IsR0FBcEIsQ0FBd0IsS0FBeEIsRUFBK0IsUUFBL0I7QUFDRDtBQXhDZ0IsQ0FBbkI7O0FBMkNBLE9BQU8sT0FBUCxHQUFpQixNQUFqQjs7O0FDL0NBLElBQUksa0JBQWtCLFFBQVEsbUJBQVIsQ0FBdEI7QUFDQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiO0FBQ0E7OztBQUdBLElBQUksZ0JBQWdCOztBQUVuQjs7Ozs7QUFLQyxXQUFTLFVBQVUsT0FBVixFQUFtQixPQUFuQixFQUE0QjtBQUNuQyxRQUFJLElBQUksUUFBUSxDQUFoQjtBQUNBLFFBQUksZUFBZSxPQUFPLFFBQVAsRUFBbkI7QUFDQSxRQUFJLE9BQU8sRUFBRSxRQUFRLFdBQVYsRUFBdUIsS0FBdkIsR0FBK0IsSUFBL0IsQ0FBb0MsS0FBcEMsRUFBMkMsTUFBM0MsR0FBb0QsSUFBcEQsRUFBWDtBQUNBLGlCQUFhLE9BQWIsQ0FBcUIsSUFBckI7QUFDQSxXQUFPLGFBQWEsT0FBYixFQUFQO0FBQ0QsR0FiaUI7O0FBZW5COzs7O0FBSUMsZ0NBQThCLFlBQVk7QUFDeEMsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EsUUFBSSxrQkFBa0IsT0FBTyxFQUE3QjtBQUNBLFFBQUksb0JBQW9CLFNBQXhCLEVBQW1DO0FBQ2pDLHVCQUFpQixPQUFqQjtBQUNELEtBRkQsTUFFTztBQUNMLHNCQUFnQixTQUFoQjtBQUNBLGFBQU8sRUFBUCxHQUFZLFNBQVo7QUFDQSx1QkFBaUIsT0FBakI7QUFDRDs7QUFFRCxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0QsR0EvQmlCOztBQWlDbkI7Ozs7O0FBS0Msa0JBQWdCLFVBQVUsT0FBVixFQUFtQixPQUFuQixFQUE0QjtBQUMxQyxRQUFJLElBQUksUUFBUSxDQUFoQjtBQUNBLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2Qjs7QUFFQSxTQUFLLDRCQUFMLEdBQW9DLElBQXBDLENBQXlDLFlBQVk7QUFDbkQsVUFBSSxrQkFBa0IsSUFBSSxlQUFKLENBQW9CO0FBQ3hDLDJCQUFtQixRQUFRLGlCQURhO0FBRXhDLHlCQUFpQixRQUFRO0FBRmUsT0FBcEIsRUFHbkIsRUFBQyxDQUFELEVBQUksUUFBSixFQUFjLE1BQWQsRUFIbUIsQ0FBdEI7QUFJQSxhQUFPLEVBQVAsR0FBWSxlQUFaOztBQUVBLFVBQUksc0JBQXNCLGdCQUFnQixjQUFoQixFQUExQjtBQUNBLDBCQUFvQixJQUFwQixDQUF5QixVQUFVLFFBQVYsRUFBb0I7QUFDM0MsYUFBSyw0QkFBTCxHQUFvQyxJQUFwQyxDQUF5QyxZQUFZO0FBQ25ELDJCQUFpQixPQUFqQixDQUF5QixRQUF6QjtBQUNBLGlCQUFPLEVBQVAsR0FBWSxTQUFaO0FBQ0QsU0FIRDtBQUlELE9BTHdCLENBS3ZCLElBTHVCLENBS2xCLElBTGtCLENBQXpCLEVBS2MsSUFMZCxDQUttQixVQUFVLE9BQVYsRUFBbUI7QUFDcEMseUJBQWlCLE1BQWpCLENBQXdCLE9BQXhCO0FBQ0EsZUFBTyxFQUFQLEdBQVksU0FBWjtBQUNELE9BUkQ7QUFTRCxLQWpCd0MsQ0FpQnZDLElBakJ1QyxDQWlCbEMsSUFqQmtDLENBQXpDOztBQW1CQSxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0QsR0E5RGlCOztBQWdFbkI7Ozs7O0FBS0MsbUJBQWlCLFVBQVUsT0FBVixFQUFtQixPQUFuQixFQUE0QjtBQUMzQyxRQUFJLElBQUksUUFBUSxDQUFoQjtBQUNBLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2QjtBQUNBLFNBQUssNEJBQUwsR0FBb0MsSUFBcEMsQ0FBeUMsWUFBWTtBQUNuRCxVQUFJLGtCQUFrQixJQUFJLGVBQUosQ0FBb0I7QUFDeEMsMkJBQW1CLFFBQVE7QUFEYSxPQUFwQixFQUVuQixFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUZtQixDQUF0QjtBQUdBLGFBQU8sRUFBUCxHQUFZLGVBQVo7O0FBRUEsVUFBSSwwQkFBMEIsZ0JBQWdCLGVBQWhCLENBQWdDLFFBQVEsa0JBQXhDLENBQTlCO0FBQ0EsOEJBQXdCLElBQXhCLENBQTZCLFlBQVk7QUFDdkMseUJBQWlCLE9BQWpCO0FBQ0QsT0FGRCxFQUVHLElBRkgsQ0FFUSxVQUFVLE9BQVYsRUFBbUI7QUFDekIseUJBQWlCLE1BQWpCLENBQXdCLE9BQXhCO0FBQ0EsZUFBTyxFQUFQLEdBQVksU0FBWjtBQUNELE9BTEQ7QUFNRCxLQWJEO0FBY0EsV0FBTyxnQkFBUDtBQUNEO0FBdkZpQixDQUFwQjs7QUEwRkEsT0FBTyxPQUFQLEdBQWlCLGFBQWpCOzs7QUMvRkEsSUFBSSxlQUFlLFFBQVEsZ0JBQVIsQ0FBbkI7QUFDQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiO0FBQ0EsSUFBSSxjQUFjLFFBQVEsY0FBUixFQUF3QixXQUExQztBQUNBOzs7OztBQUtBLElBQUksa0JBQWtCLFVBQVUsT0FBVixFQUFtQixXQUFuQixFQUFnQztBQUNyRDtBQUNDLE9BQUssMkJBQUwsR0FBbUMsT0FBTyxRQUFQLEVBQW5DOztBQUVBLE9BQUssZUFBTCxHQUF1QixRQUFRLGVBQS9CO0FBQ0EsT0FBSyxpQkFBTCxHQUF5QixRQUFRLGlCQUFSLENBQTBCLElBQTFCLEVBQXpCO0FBQ0EsT0FBSyxLQUFMLEdBQWEsUUFBUSxLQUFSLElBQWlCLFVBQVUsR0FBVixFQUFlO0FBQUUsVUFBTSxHQUFOO0FBQVksR0FBM0Q7O0FBRUEsT0FBSyxDQUFMLEdBQVMsWUFBWSxDQUFyQjtBQUNBLE9BQUssUUFBTCxHQUFnQixZQUFZLFFBQTVCO0FBQ0EsT0FBSyxNQUFMLEdBQWMsWUFBWSxNQUExQjtBQUNBLE1BQUksQ0FBQyxLQUFLLENBQVYsRUFBYSxNQUFNLElBQUksS0FBSixDQUFVLG9DQUFWLENBQU47QUFDYixNQUFJLENBQUMsS0FBSyxRQUFWLEVBQW9CLE1BQU0sSUFBSSxLQUFKLENBQVUsa0JBQVYsQ0FBTjtBQUNwQixNQUFHLENBQUMsS0FBSyxNQUFULEVBQWlCLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0JBQVYsQ0FBTjtBQUNqQixNQUFJLEtBQUssaUJBQVQsRUFBNEI7QUFDMUIsU0FBSyxNQUFMLEdBQWMsS0FBSyxDQUFMLENBQU8sS0FBSyxpQkFBWixFQUErQixDQUEvQixDQUFkOztBQUVGO0FBQ0UsUUFBSSxLQUFLLE1BQUwsS0FBZ0IsU0FBcEIsRUFBK0I7QUFDN0IsV0FBSywyQkFBTCxDQUFpQyxNQUFqQyxDQUF3QywyQkFBeEM7QUFDQSxXQUFLLEtBQUwsQ0FBVywyQkFBWDtBQUNEO0FBQ0YsR0FSRCxNQVFPO0FBQ0wsU0FBSyxNQUFMLEdBQWMsS0FBSyxDQUFMLENBQU8sTUFBUCxFQUFlLENBQWYsQ0FBZDtBQUNEO0FBQ0YsQ0F6QkQ7O0FBMkJBLGdCQUFnQixTQUFoQixHQUE0Qjs7QUFFM0I7OztBQUdDLGtCQUFnQixVQUFVLE9BQVYsRUFBbUI7QUFDakMsUUFBSSxLQUFLLDJCQUFMLENBQWlDLEtBQWpDLE9BQTZDLFVBQWpELEVBQTZEO0FBQzlEO0FBQ0csV0FBSyxnQkFBTCxHQUF3QixFQUF4QjtBQUNIO0FBQ0csV0FBSyxHQUFMLEdBQVcsQ0FBWDs7QUFFSDtBQUNHLFdBQUssZUFBTCxDQUFxQixLQUFyQjs7QUFFQSxXQUFLLE9BQUw7QUFDRDs7QUFFRCxXQUFPLEtBQUssMkJBQUwsQ0FBaUMsT0FBakMsRUFBUDtBQUNELEdBbkJ5Qjs7QUFxQjFCLHlCQUF1QixZQUFZO0FBQ2pDLFFBQUksS0FBSyxnQkFBTCxJQUF5QixLQUFLLGdCQUFMLENBQXNCLE1BQXRCLEdBQStCLENBQTVELEVBQStEO0FBQzdELFVBQUksV0FBSjs7QUFFSDtBQUNHLFVBQUksS0FBSyxnQkFBTCxFQUFKLEVBQTZCO0FBQzNCLFlBQUksS0FBSyxnQkFBTCxDQUFzQixNQUF0QixLQUFpQyxDQUFyQyxFQUF3QztBQUN0Qyx3QkFBYyxVQUFkO0FBQ0QsU0FGRCxNQUVPLElBQUksS0FBSyxDQUFMLENBQU8sb0RBQVAsRUFBNkQsSUFBN0QsQ0FBa0UsU0FBbEUsQ0FBSixFQUFrRjtBQUN2RixjQUFJLG1CQUFtQixLQUFLLGdCQUFMLENBQXNCLEtBQXRCLEVBQXZCO0FBQ0EsMkJBQWlCLE1BQWpCLENBQXdCLGlCQUFpQixPQUFqQixDQUF5QixLQUFLLE1BQTlCLENBQXhCLEVBQStELENBQS9EO0FBQ0Esd0JBQWMsZUFBZSxLQUFLLFdBQUwsQ0FBaUIsY0FBakIsQ0FBZ0MsZ0JBQWhDLEVBQWtELEtBQUssR0FBdkQsQ0FBN0I7QUFDRCxTQUpNLE1BSUE7QUFDVjtBQUNLLHdCQUFjLEtBQUssV0FBTCxDQUFpQixjQUFqQixDQUFnQyxLQUFLLGdCQUFyQyxFQUF1RCxLQUFLLEdBQTVELENBQWQ7QUFDRDtBQUNGLE9BWEQsTUFXUztBQUNQLHNCQUFjLEtBQUssV0FBTCxDQUFpQixjQUFqQixDQUFnQyxLQUFLLGdCQUFyQyxFQUF1RCxLQUFLLEdBQTVELENBQWQ7QUFDRDs7QUFFRCxhQUFPLFdBQVA7QUFDRDtBQUNELFdBQU8sRUFBUDtBQUNELEdBNUN5Qjs7QUE4QzFCLG9CQUFrQixZQUFZO0FBQzVCLFdBQU8sS0FBSyxnQkFBTCxDQUFzQixPQUF0QixDQUE4QixLQUFLLE1BQW5DLE1BQStDLENBQUMsQ0FBdkQ7QUFDRCxHQWhEeUI7O0FBa0QzQjs7OztBQUlDLG1CQUFpQixVQUFVLHNCQUFWLEVBQWtDO0FBQ2pELFNBQUssV0FBTCxHQUFtQixJQUFJLFdBQUosQ0FBZ0I7QUFDakMsZ0NBQTBCLElBRE87QUFFakMsY0FBUSxLQUFLLE1BRm9CO0FBR2pDLDhCQUF3QixzQkFIUztBQUlqQyxzQkFBZ0IsQ0FDZCwrQkFEYyxFQUVkLDRCQUZjLEVBR2QsaUJBSGMsRUFJZCx5QkFKYyxFQUtkLCtCQUxjLENBSmlCO0FBV2pDLGFBQU8sS0FBSztBQVhxQixLQUFoQixDQUFuQjtBQWFELEdBcEV5Qjs7QUFzRTFCLG1CQUFpQixVQUFVLGtCQUFWLEVBQThCO0FBQzdDLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDQSxRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0EsUUFBSSxLQUFLLDJCQUFMLENBQWlDLEtBQWpDLE9BQTZDLFVBQWpELEVBQTZEO0FBQzNELFdBQUssZUFBTDtBQUNBLFFBQUUsYUFBYSxrQkFBYixFQUFpQyxLQUFLLE1BQXRDLEVBQThDLEVBQUMsQ0FBRCxFQUFJLFFBQUosRUFBYyxNQUFkLEVBQTlDLENBQUYsRUFBd0UsUUFBeEUsQ0FBaUYsK0JBQWpGO0FBQ0EsV0FBSywyQkFBTCxDQUFpQyxPQUFqQztBQUNEOztBQUVELFdBQU8sS0FBSywyQkFBTCxDQUFpQyxPQUFqQyxFQUFQO0FBQ0QsR0FqRnlCOztBQW1GMUIsV0FBUyxZQUFZO0FBQ25CLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsU0FBSyxlQUFMOztBQUVGO0FBQ0UsU0FBSyxZQUFMLEdBQW9CLEtBQUssQ0FBTCxDQUFPLEtBQUssZUFBTCxHQUF1QixvREFBOUIsRUFBb0YsS0FBSyxNQUF6RixDQUFwQjtBQUNGO0FBQ0UsUUFBSSxLQUFLLE1BQUwsS0FBZ0IsU0FBUyxJQUE3QixFQUFtQztBQUNqQyxXQUFLLFlBQUwsQ0FBa0IsSUFBbEIsQ0FBdUIsS0FBSyxNQUE1QjtBQUNEOztBQUVELFNBQUssb0JBQUw7QUFDQSxTQUFLLG9CQUFMO0FBQ0EsU0FBSyxrQ0FBTDtBQUNBLFNBQUssYUFBTDtBQUNBLFNBQUsseUJBQUw7QUFDQSxTQUFLLDBCQUFMO0FBQ0EsU0FBSyxtQkFBTDtBQUNELEdBckd5Qjs7QUF1RzFCLHdCQUFzQixZQUFZO0FBQ2hDLFNBQUssWUFBTCxDQUFrQixJQUFsQixDQUF1Qix1QkFBdkIsRUFBZ0QsVUFBVSxDQUFWLEVBQWE7QUFDM0QsVUFBSSxVQUFVLEVBQUUsYUFBaEI7QUFDQSxVQUFJLEtBQUssZ0JBQUwsQ0FBc0IsT0FBdEIsQ0FBOEIsT0FBOUIsTUFBMkMsQ0FBQyxDQUFoRCxFQUFtRDtBQUNqRCxhQUFLLGdCQUFMLENBQXNCLElBQXRCLENBQTJCLE9BQTNCO0FBQ0Q7QUFDRCxXQUFLLHlCQUFMOztBQUVIO0FBQ0csYUFBTyxLQUFQO0FBQ0QsS0FUK0MsQ0FTOUMsSUFUOEMsQ0FTekMsSUFUeUMsQ0FBaEQ7QUFVRCxHQWxIeUI7O0FBb0gzQjs7O0FBR0MsMEJBQXdCLFlBQVk7QUFDbEMsUUFBSSxVQUFVLEtBQUssZ0JBQW5CO0FBQ0EsUUFBSSxPQUFKLEVBQWE7QUFDWCxXQUFLLGdCQUFMLENBQXNCLElBQXRCLENBQTJCLE9BQTNCO0FBQ0EsV0FBSyx5QkFBTDtBQUNEO0FBQ0YsR0E3SHlCOztBQStIMUIsd0JBQXNCLFlBQVk7QUFDaEMsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLE1BQUUsS0FBSyxZQUFQLEVBQXFCLElBQXJCLENBQTBCLDJCQUExQixFQUF1RCxVQUFVLENBQVYsRUFBYTtBQUNsRSxVQUFJLFVBQVUsRUFBRSxhQUFoQjtBQUNBLFdBQUssZ0JBQUwsR0FBd0IsT0FBeEI7QUFDQSxRQUFFLE9BQUYsRUFBVyxRQUFYLENBQW9CLDRCQUFwQjtBQUNBLGFBQU8sS0FBUDtBQUNELEtBTHNELENBS3JELElBTHFELENBS2hELElBTGdELENBQXZELEVBS2MsSUFMZCxDQUttQiwwQkFMbkIsRUFLK0MsVUFBVSxDQUFWLEVBQWE7QUFDMUQsVUFBSSxVQUFVLEVBQUUsYUFBaEI7QUFDQSxXQUFLLGdCQUFMLEdBQXdCLElBQXhCO0FBQ0EsUUFBRSxPQUFGLEVBQVcsV0FBWCxDQUF1Qiw0QkFBdkI7QUFDQSxhQUFPLEtBQVA7QUFDRCxLQUw4QyxDQUs3QyxJQUw2QyxDQUt4QyxJQUx3QyxDQUwvQztBQVdELEdBNUl5Qjs7QUE4STFCLHVCQUFxQixZQUFZO0FBQy9CLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDQSxNQUFFLE1BQUYsRUFBVSxRQUFWLENBQW1CLCtCQUFuQjs7QUFFRjtBQUNFLFFBQUksS0FBSyxlQUFMLEtBQXlCLEtBQTdCLEVBQW9DO0FBQ2xDLFFBQUUsS0FBRixFQUFTLE1BQVQsQ0FBZ0IsVUFBVSxDQUFWLEVBQWEsT0FBYixFQUFzQjtBQUNwQyxlQUFPLEVBQUUsT0FBRixFQUFXLEdBQVgsQ0FBZSxVQUFmLE1BQStCLFFBQXRDO0FBQ0QsT0FGRCxFQUVHLFFBRkgsQ0FFWSx5QkFGWjtBQUdEO0FBQ0YsR0F4SnlCOztBQTBKMUIseUJBQXVCLFlBQVk7QUFDakMsU0FBSyxDQUFMLENBQU8sb0NBQVAsRUFBNkMsV0FBN0MsQ0FBeUQsK0JBQXpEO0FBQ0EsU0FBSyxDQUFMLENBQU8sNkJBQVAsRUFBc0MsV0FBdEMsQ0FBa0QseUJBQWxEO0FBQ0QsR0E3SnlCOztBQStKMUIsZUFBYSxZQUFZO0FBQ3ZCLFNBQUssR0FBTDtBQUNBLFFBQUksS0FBSyxHQUFMLEdBQVcsQ0FBZixFQUFrQjtBQUNoQixXQUFLLEdBQUwsR0FBVyxDQUFYO0FBQ0Q7QUFDRixHQXBLeUI7QUFxSzFCLGdCQUFjLFlBQVk7QUFDeEIsU0FBSyxHQUFMO0FBQ0QsR0F2S3lCOztBQXlLM0I7QUFDQyxzQ0FBb0MsWUFBWTtBQUM5QyxRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsUUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDRjtBQUNFLFFBQUksZUFBSjtBQUNBLFNBQUsscUJBQUwsR0FBNkIsWUFBWSxZQUFZO0FBQ25ELFVBQUksUUFBUSxTQUFTLFFBQVQsRUFBWjtBQUNBLFVBQUksVUFBVSxlQUFkLEVBQStCO0FBQy9CLHdCQUFrQixLQUFsQjs7QUFFQSxRQUFFLGdDQUFGLEVBQW9DLFdBQXBDLENBQWdELE1BQWhELEVBQXdELENBQUMsS0FBekQ7QUFDQSxRQUFFLGdDQUFGLEVBQW9DLFdBQXBDLENBQWdELE1BQWhELEVBQXdELEtBQXhEO0FBQ0QsS0FQNEIsRUFPMUIsR0FQMEIsQ0FBN0I7O0FBU0Y7QUFDQTtBQUNFLE1BQUUsUUFBRixFQUFZLElBQVosQ0FBaUIsK0JBQWpCLEVBQWtELFVBQVUsS0FBVixFQUFpQjtBQUNwRTtBQUNHLFVBQUksTUFBTSxPQUFOLEtBQWtCLEVBQXRCLEVBQTBCO0FBQ3hCLGFBQUssaUJBQUwsQ0FBdUIsRUFBRSxzQ0FBRixDQUF2QjtBQUNBLGFBQUssV0FBTDtBQUNEO0FBQ0o7QUFKRyxXQUtLLElBQUksTUFBTSxPQUFOLEtBQWtCLEVBQXRCLEVBQTBCO0FBQzdCLGVBQUssaUJBQUwsQ0FBdUIsRUFBRSx1Q0FBRixDQUF2QjtBQUNBLGVBQUssWUFBTDtBQUNEO0FBQ0o7QUFKUSxhQUtBLElBQUksTUFBTSxPQUFOLEtBQWtCLEVBQXRCLEVBQTBCO0FBQzdCLGlCQUFLLGlCQUFMLENBQXVCLEVBQUUsdUNBQUYsQ0FBdkI7QUFDQSxpQkFBSyxzQkFBTDtBQUNEOztBQUVELFdBQUsseUJBQUw7QUFDRCxLQWxCaUQsQ0FrQmhELElBbEJnRCxDQWtCM0MsSUFsQjJDLENBQWxEO0FBbUJELEdBN015Qjs7QUErTTFCLHFCQUFtQixVQUFVLE9BQVYsRUFBbUI7QUFDcEMsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLE1BQUUsT0FBRixFQUFXLFdBQVgsQ0FBdUIsU0FBdkIsRUFBa0MsV0FBbEMsQ0FBOEMsbUJBQTlDO0FBQ0EsZUFBVyxZQUFZO0FBQ3JCLFFBQUUsT0FBRixFQUFXLFFBQVgsQ0FBb0IsU0FBcEI7QUFDQSxpQkFBVyxZQUFZO0FBQ3JCLFVBQUUsT0FBRixFQUFXLFFBQVgsQ0FBb0IsbUJBQXBCO0FBQ0QsT0FGRCxFQUVHLEdBRkg7QUFHRCxLQUxELEVBS0csQ0FMSDtBQU1ELEdBeE55Qjs7QUEwTjFCLDZCQUEyQixZQUFZO0FBQ3JDLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDQSxRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0EsUUFBSTtBQUNGLFVBQUksb0JBQW9CLEtBQUsscUJBQUwsRUFBeEI7O0FBRUEsUUFBRSxtQ0FBRixFQUF1QyxJQUF2QyxDQUE0QyxpQkFBNUM7QUFDSDtBQUNHLFFBQUUsZ0NBQUYsRUFBb0MsV0FBcEMsQ0FBZ0QsK0JBQWhEO0FBQ0EsUUFBRSxhQUFhLGlCQUFiLEVBQWdDLEtBQUssTUFBckMsRUFBNkMsRUFBQyxDQUFELEVBQUksUUFBSixFQUFjLE1BQWQsRUFBN0MsQ0FBRixFQUF1RSxRQUF2RSxDQUFnRiwrQkFBaEY7QUFDRCxLQVBELENBT0UsT0FBTyxHQUFQLEVBQVk7QUFDWixVQUFJLFFBQVEsb0VBQVosRUFBa0Y7QUFDaEYsZ0JBQVEsR0FBUixrR0FBWSwrQ0FBWjs7QUFFQSxhQUFLLHNCQUFMO0FBQ0o7QUFDSSxhQUFLLGdCQUFMLENBQXNCLEdBQXRCO0FBQ0EsYUFBSyx5QkFBTDtBQUNEO0FBQ0Y7QUFDRixHQS9PeUI7O0FBaVAxQiwwQkFBd0IsWUFBWTtBQUNsQyxTQUFLLENBQUwsQ0FBTyw2QkFBUCxFQUFzQyxJQUF0QyxDQUEyQyxPQUEzQyxFQUFvRCwyQkFBcEQ7QUFDRCxHQW5QeUI7O0FBcVAxQiwwQkFBd0IsWUFBWTtBQUNsQyxTQUFLLENBQUwsQ0FBTyw2QkFBUCxFQUFzQyxJQUF0QyxDQUEyQyxPQUEzQyxFQUFvRCxFQUFwRDtBQUNELEdBdlB5Qjs7QUF5UDFCLDhCQUE0QixZQUFZO0FBQ3RDLFNBQUssQ0FBTCxDQUFPLG9DQUFQLEVBQTZDLEtBQTdDLENBQW1ELEtBQUssc0JBQUwsQ0FBNEIsSUFBNUIsQ0FBaUMsSUFBakMsQ0FBbkQ7QUFDRCxHQTNQeUI7O0FBNlAxQixnQ0FBOEIsWUFBWTtBQUN4QyxTQUFLLENBQUwsQ0FBTyxvQ0FBUCxFQUE2QyxNQUE3QyxDQUFvRCxPQUFwRDtBQUNELEdBL1B5Qjs7QUFpUTFCLDZCQUEyQixZQUFZO0FBQ3JDLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDQSxNQUFFLG9EQUFGLEVBQXdELE1BQXhELENBQStELFVBQVUsQ0FBVixFQUFhO0FBQzFFLFVBQUksRUFBRSxFQUFFLGFBQUosRUFBbUIsRUFBbkIsQ0FBc0IsVUFBdEIsQ0FBSixFQUF1QztBQUNyQyxhQUFLLGVBQUwsQ0FBcUIsSUFBckI7QUFDRCxPQUZELE1BRU87QUFDTCxhQUFLLGVBQUwsQ0FBcUIsS0FBckI7QUFDRDtBQUNGLEtBTjhELENBTTdELElBTjZELENBTXhELElBTndELENBQS9EO0FBT0QsR0ExUXlCO0FBMlExQiwrQkFBNkIsWUFBWTtBQUN2QyxTQUFLLENBQUwsQ0FBTyw4Q0FBUCxFQUF1RCxNQUF2RCxDQUE4RCxRQUE5RDtBQUNELEdBN1F5Qjs7QUErUTFCLGlCQUFlLFlBQVk7QUFDekIsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLFFBQUksV0FBVyxpQ0FDaEIsaUdBRGdCLEdBRWhCLDJDQUZnQixHQUdmLHlHQUhlLEdBSWYsMkJBSmUsR0FLZiw0QkFMZSxHQU1mLDJCQU5lLEdBT2YsK0JBUGUsR0FRZixtQkFSZSxHQVNmLCtEQVRlLEdBVWYsMkRBVmUsR0FXZix5REFYZSxHQVlmLFFBWmUsR0FhZixRQWJlLEdBY2YsUUFkZSxHQWVoQixRQWZnQixHQWdCaEIsa0lBaEJnQixHQWlCaEIsc0dBakJnQixHQWtCaEIscUdBbEJnQixHQW1CaEIsbUdBbkJnQixHQW9CaEIsb0VBcEJnQixHQXFCaEIsUUFyQkM7QUFzQkEsTUFBRSxNQUFGLEVBQVUsTUFBVixDQUFpQixRQUFqQjs7QUFFQSxNQUFFLGdEQUFGLEVBQW9ELEtBQXBELENBQTBELFlBQVk7QUFDcEUsV0FBSyxpQkFBTDtBQUNELEtBRnlELENBRXhELElBRndELENBRW5ELElBRm1ELENBQTFEO0FBR0QsR0E1U3lCO0FBNlMxQixtQkFBaUIsWUFBWTtBQUMzQixRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0Y7QUFDRSxRQUFJLENBQUMsRUFBRSxLQUFLLE1BQVAsRUFBZSxFQUFmLENBQWtCLE1BQWxCLENBQUQsSUFBOEIsQ0FBQyxFQUFFLEtBQUssTUFBUCxFQUFlLEVBQWYsQ0FBa0IsVUFBbEIsQ0FBbkMsRUFBa0U7QUFDaEUsUUFBRSxLQUFLLE1BQVAsRUFBZSxRQUFmLENBQXdCLGlCQUF4QjtBQUNEO0FBQ0YsR0FuVHlCOztBQXFUMUIsMEJBQXdCLFlBQVk7QUFDbEMsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLE1BQUUsS0FBSyxZQUFQLEVBQXFCLE1BQXJCLENBQTRCLHVCQUE1QjtBQUNGO0FBQ0UsU0FBSywrQkFBTDtBQUNELEdBMVR5QjtBQTJUMUIsbUNBQWlDLFlBQVk7QUFDM0MsU0FBSyxDQUFMLENBQU8sZ0NBQVAsRUFBeUMsV0FBekMsQ0FBcUQsK0JBQXJEO0FBQ0EsU0FBSyxDQUFMLENBQU8sa0JBQVAsRUFBMkIsV0FBM0IsQ0FBdUMsaUJBQXZDO0FBQ0QsR0E5VHlCO0FBK1QxQiwwQkFBd0IsWUFBWTtBQUNsQyxTQUFLLENBQUwsQ0FBTyxLQUFLLFlBQVosRUFBMEIsTUFBMUIsQ0FBaUMsMkJBQWpDLEVBQ0EsTUFEQSxDQUNPLDBCQURQO0FBRUQsR0FsVXlCO0FBbVUxQixzQ0FBb0MsWUFBWTtBQUM5QyxTQUFLLENBQUwsQ0FBTyxRQUFQLEVBQWlCLE1BQWpCLENBQXdCLCtCQUF4QjtBQUNBLGtCQUFjLEtBQUsscUJBQW5CO0FBQ0QsR0F0VXlCO0FBdVUxQixpQkFBZSxZQUFZO0FBQ3pCLFNBQUssQ0FBTCxDQUFPLDJCQUFQLEVBQW9DLE1BQXBDLENBQTJDLE9BQTNDO0FBQ0EsU0FBSyxDQUFMLENBQU8sb0JBQVAsRUFBNkIsTUFBN0I7QUFDRCxHQTFVeUI7O0FBNFUzQjs7O0FBR0MsYUFBVyxZQUFZO0FBQ3JCLFNBQUssc0JBQUw7QUFDQSxTQUFLLHNCQUFMO0FBQ0EsU0FBSyxrQ0FBTDtBQUNBLFNBQUssNEJBQUw7QUFDQSxTQUFLLDJCQUFMO0FBQ0EsU0FBSyxxQkFBTDtBQUNBLFNBQUssYUFBTDtBQUNELEdBdlZ5Qjs7QUF5VjFCLHFCQUFtQixZQUFZO0FBQzdCLFFBQUksb0JBQW9CLEtBQUsscUJBQUwsRUFBeEI7O0FBRUEsU0FBSywyQkFBTCxDQUFpQyxPQUFqQyxDQUF5QztBQUN2QyxtQkFBYTtBQUQwQixLQUF6QztBQUdEO0FBL1Z5QixDQUE1Qjs7QUFrV0EsT0FBTyxPQUFQLEdBQWlCLGVBQWpCOzs7QUNyWUEsSUFBSSxlQUFlLFFBQVEsZ0JBQVIsQ0FBbkI7QUFDQSxJQUFJLFVBQVUsUUFBUSxXQUFSLENBQWQ7QUFDQSxJQUFJLHVCQUF1QixRQUFRLHVDQUFSLENBQTNCO0FBQ0EsSUFBSSxTQUFTLFFBQVEsaUJBQVIsQ0FBYjs7QUFFQSxJQUFJLGdCQUFnQixVQUFVLE9BQVYsRUFBbUIsV0FBbkIsRUFBZ0M7QUFDbEQsT0FBSyxDQUFMLEdBQVMsWUFBWSxDQUFyQjtBQUNGLE9BQUssUUFBTCxHQUFnQixZQUFZLFFBQTVCO0FBQ0EsT0FBSyxNQUFMLEdBQWMsWUFBWSxNQUExQjtBQUNFLE1BQUksQ0FBQyxZQUFZLENBQWpCLEVBQW9CO0FBQ2xCLFVBQU0sSUFBSSxLQUFKLENBQVUsa0NBQVYsQ0FBTjtBQUNEO0FBQ0QsTUFBSSxDQUFDLFlBQVksUUFBakIsRUFBMkI7QUFDekIsVUFBTSxJQUFJLEtBQUosQ0FBVSxvQ0FBVixDQUFOO0FBQ0Q7QUFDRCxNQUFJLENBQUMsWUFBWSxNQUFqQixFQUF5QjtBQUN2QixVQUFNLElBQUksS0FBSixDQUFVLGtDQUFWLENBQU47QUFDRDtBQUNELE1BQUksSUFBSSxLQUFLLENBQWI7QUFDQSxNQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLE1BQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0EsTUFBSSxRQUFRLE9BQVIsWUFBMkIsT0FBL0IsRUFBd0M7QUFDdEMsU0FBSyxPQUFMLEdBQWUsUUFBUSxPQUF2QjtBQUNELEdBRkQsTUFFTztBQUNMLFNBQUssT0FBTCxHQUFlLElBQUksT0FBSixDQUFZLFFBQVEsT0FBcEIsRUFBNkIsRUFBQyxDQUFELEVBQUksUUFBSixFQUFjLE1BQWQsRUFBN0IsQ0FBZjtBQUNEOztBQUVELE9BQUssZ0JBQUwsR0FBd0IsUUFBUSxnQkFBaEM7QUFDQSxPQUFLLGFBQUwsR0FBcUIsUUFBUSxhQUFSLElBQXlCLEVBQUUsTUFBRixFQUFVLENBQVYsQ0FBOUM7QUFDRCxDQXhCRDs7QUEwQkEsY0FBYyxTQUFkLEdBQTBCOztBQUV6Qjs7OztBQUlDLHFCQUFtQixZQUFZO0FBQzdCLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDQSxRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0EsV0FBTyxLQUFLLGtCQUFMLENBQXdCLEtBQUssZ0JBQTdCLEVBQStDLElBQUksWUFBSixDQUFpQixJQUFqQixFQUF1QixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUF2QixDQUEvQyxDQUFQO0FBQ0QsR0FYdUI7O0FBYXpCOzs7Ozs7QUFNQyw4QkFBNEIsVUFBVSxRQUFWLEVBQW9CO0FBQ2hEO0FBQ0E7QUFDRSxRQUFJLFNBQVMseUJBQVQsRUFBSixFQUEwQztBQUN4QyxhQUFPLEtBQVA7QUFDRDs7QUFFSDtBQUNBO0FBQ0UsUUFBSSxTQUFTLGdCQUFULE1BQ0wsS0FBSyxPQUFMLENBQWEsdUJBQWIsQ0FBcUMsU0FBUyxFQUE5QyxFQUFrRCxNQUFsRCxHQUEyRCxDQUQxRCxFQUM2RDtBQUMzRCxhQUFPLEtBQVA7QUFDRDs7QUFFSDtBQUNFLFFBQUksaUJBQWlCLEtBQUssT0FBTCxDQUFhLGVBQWIsQ0FBNkIsU0FBUyxFQUF0QyxDQUFyQjtBQUNBLFNBQUssSUFBSSxDQUFULElBQWMsY0FBZCxFQUE4QjtBQUM1QixVQUFJLGdCQUFnQixlQUFlLENBQWYsQ0FBcEI7QUFDQSxVQUFJLENBQUMsS0FBSywwQkFBTCxDQUFnQyxhQUFoQyxDQUFMLEVBQXFEO0FBQ25ELGVBQU8sS0FBUDtBQUNEO0FBQ0Y7QUFDRCxXQUFPLElBQVA7QUFDRCxHQTFDdUI7O0FBNEN4QixnQ0FBOEIsVUFBVSxnQkFBVixFQUE0QjtBQUN4RCxRQUFJLGtCQUFrQixFQUF0QjtBQUNBLFFBQUksaUJBQWlCLEtBQUssT0FBTCxDQUFhLHVCQUFiLENBQXFDLGdCQUFyQyxDQUFyQjs7QUFFQSxtQkFBZSxPQUFmLENBQXVCLFVBQVUsYUFBVixFQUF5QjtBQUM5QyxVQUFJLEtBQUssMEJBQUwsQ0FBZ0MsYUFBaEMsQ0FBSixFQUFvRDtBQUNsRCx3QkFBZ0IsSUFBaEIsQ0FBcUIsYUFBckI7QUFDSjs7QUFFSSxZQUFJLHlCQUF5QixLQUFLLE9BQUwsQ0FBYSxlQUFiLENBQTZCLGNBQWMsRUFBM0MsQ0FBN0I7QUFDQSwrQkFBdUIsT0FBdkIsQ0FBK0IsVUFBVSxRQUFWLEVBQW9CO0FBQ2pELGNBQUksZ0JBQWdCLE9BQWhCLENBQXdCLFFBQXhCLE1BQXNDLENBQUMsQ0FBM0MsRUFBOEM7QUFDNUMsNEJBQWdCLElBQWhCLENBQXFCLFFBQXJCO0FBQ0Q7QUFDRixTQUpEO0FBS0Q7QUFDRixLQVpzQixDQVlyQixJQVpxQixDQVloQixJQVpnQixDQUF2Qjs7QUFjQSxXQUFPLGVBQVA7QUFDRCxHQS9EdUI7O0FBaUV4QixzQkFBb0IsVUFBVSxnQkFBVixFQUE0Qix5QkFBNUIsRUFBdUQ7QUFDekUsUUFBSSxrQkFBa0IsMEJBQTBCLE1BQTFCLENBQWlDLEtBQUssNEJBQUwsQ0FBa0MsZ0JBQWxDLENBQWpDLENBQXRCOztBQUVGO0FBQ0UsUUFBSSxnQkFBZ0IsRUFBcEI7QUFDQSxRQUFJLGlCQUFpQixLQUFLLE9BQUwsQ0FBYSx1QkFBYixDQUFxQyxnQkFBckMsQ0FBckI7QUFDQSxtQkFBZSxPQUFmLENBQXVCLFVBQVUsUUFBVixFQUFvQjtBQUN6QyxVQUFJLENBQUMsS0FBSywwQkFBTCxDQUFnQyxRQUFoQyxDQUFMLEVBQWdEO0FBQ2xEO0FBQ0E7QUFDSSxZQUFJLENBQUMsU0FBUywwQkFBVCxFQUFMLEVBQTRDO0FBQzFDLGNBQUksZUFBZSxnQkFBZ0IsTUFBaEIsQ0FBdUIsQ0FBQyxRQUFELENBQXZCLENBQW5CO0FBQ0Esd0JBQWMsSUFBZCxDQUFtQixZQUFuQjtBQUNELFNBSEQsTUFHTztBQUNWO0FBQ0ssY0FBSSw0QkFBNEIsZ0JBQWdCLE1BQWhCLENBQXVCLENBQUMsUUFBRCxDQUF2QixDQUFoQztBQUNBLGNBQUkscUJBQXFCLEtBQUssa0JBQUwsQ0FBd0IsU0FBUyxFQUFqQyxFQUFxQyx5QkFBckMsQ0FBekI7QUFDQSwwQkFBZ0IsY0FBYyxNQUFkLENBQXFCLGtCQUFyQixDQUFoQjtBQUNEO0FBQ0Y7QUFDRixLQWRzQixDQWNyQixJQWRxQixDQWNoQixJQWRnQixDQUF2Qjs7QUFnQkY7QUFDRSxRQUFJLGNBQWMsTUFBZCxLQUF5QixDQUE3QixFQUFnQztBQUM5QixhQUFPLENBQUMsZUFBRCxDQUFQO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsYUFBTyxhQUFQO0FBQ0Q7QUFDRixHQTdGdUI7O0FBK0Z4Qiw2QkFBMkIsVUFBVSxTQUFWLEVBQXFCLGdCQUFyQixFQUF1QyxhQUF2QyxFQUFzRDtBQUMvRSxRQUFJLGlCQUFpQixVQUFVLHVCQUFWLENBQWtDLGdCQUFsQyxDQUFyQjtBQUNBLFFBQUksb0JBQW9CLEVBQXhCO0FBQ0EsbUJBQWUsT0FBZixDQUF1QixVQUFVLFFBQVYsRUFBb0I7QUFDekMsVUFBSSxDQUFDLFVBQVUseUJBQVYsQ0FBb0MsU0FBUyxFQUE3QyxDQUFMLEVBQXVEO0FBQ3JELDBCQUFrQixJQUFsQixDQUF1QixLQUFLLHFCQUFMLENBQTJCLElBQTNCLENBQWdDLElBQWhDLEVBQXNDLFNBQXRDLEVBQWlELFFBQWpELEVBQTJELGFBQTNELENBQXZCO0FBQ0Q7QUFDRixLQUpzQixDQUlyQixJQUpxQixDQUloQixJQUpnQixDQUF2Qjs7QUFNQSxRQUFJLG1CQUFtQixPQUFPLFFBQVAsRUFBdkI7QUFDQSx5QkFBcUIsaUJBQXJCLEVBQXdDLElBQXhDLENBQTZDLFVBQVUsU0FBVixFQUFxQjtBQUNoRSxVQUFJLGFBQWEsRUFBakI7QUFDQSxnQkFBVSxPQUFWLENBQWtCLFVBQVUsSUFBVixFQUFnQjtBQUNoQyxxQkFBYSxPQUFPLE1BQVAsQ0FBYyxVQUFkLEVBQTBCLElBQTFCLENBQWI7QUFDRCxPQUZEO0FBR0EsdUJBQWlCLE9BQWpCLENBQXlCLFVBQXpCO0FBQ0QsS0FORDs7QUFRQSxXQUFPLGdCQUFQO0FBQ0QsR0FsSHVCOztBQW9IeEIseUJBQXVCLFVBQVUsU0FBVixFQUFxQixRQUFyQixFQUErQixhQUEvQixFQUE4QztBQUNuRSxRQUFJLElBQUksT0FBTyxRQUFQLEVBQVI7QUFDQSxRQUFJLGVBQWUsU0FBUyxPQUFULENBQWlCLGFBQWpCLENBQW5CO0FBQ0EsaUJBQWEsSUFBYixDQUFrQixVQUFVLElBQVYsRUFBZ0I7QUFDaEMsVUFBSSxTQUFTLGtCQUFULEVBQUosRUFBbUM7QUFDakMsWUFBSSxtQkFBbUIsS0FBSyxDQUFMLENBQXZCO0FBQ0EsWUFBSSwwQkFBMEIsS0FBSyx5QkFBTCxDQUErQixTQUEvQixFQUEwQyxTQUFTLEVBQW5ELEVBQXVELGdCQUF2RCxDQUE5QjtBQUNBLGdDQUF3QixJQUF4QixDQUE2QixVQUFVLElBQVYsRUFBZ0I7QUFDM0MsWUFBRSxPQUFGLENBQVUsSUFBVjtBQUNELFNBRkQ7QUFHRCxPQU5ELE1BTVM7QUFDUCxVQUFFLE9BQUYsQ0FBVSxLQUFLLENBQUwsQ0FBVjtBQUNEO0FBQ0YsS0FWaUIsQ0FVaEIsSUFWZ0IsQ0FVWCxJQVZXLENBQWxCOztBQVlBLFdBQU8sQ0FBUDtBQUNELEdBcEl1Qjs7QUFzSXpCOzs7QUFHQyx3QkFBc0IsVUFBVSxTQUFWLEVBQXFCLFFBQXJCLEVBQStCLGFBQS9CLEVBQThDLFVBQTlDLEVBQTBEO0FBQzlFLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2QjtBQUNBLFFBQUksWUFBSjtBQUNGO0FBQ0UsUUFBSSxDQUFDLFNBQVMsa0JBQVQsRUFBTCxFQUFvQztBQUNsQyxxQkFBZSxTQUFTLE9BQVQsQ0FBaUIsYUFBakIsQ0FBZjtBQUNBLG1CQUFhLElBQWIsQ0FBa0IsVUFBVSxZQUFWLEVBQXdCO0FBQ3hDLFlBQUksZ0JBQWdCLEtBQUssS0FBTCxDQUFXLEtBQUssU0FBTCxDQUFlLFVBQWYsQ0FBWCxDQUFwQjtBQUNBLFlBQUksYUFBYSxFQUFqQjs7QUFFQSxxQkFBYSxPQUFiLENBQXFCLFVBQVUsTUFBVixFQUFrQjtBQUNyQyxpQkFBTyxNQUFQLENBQWMsTUFBZCxFQUFzQixhQUF0QjtBQUNBLHFCQUFXLElBQVgsQ0FBZ0IsTUFBaEI7QUFDRCxTQUhEOztBQUtBLHlCQUFpQixPQUFqQixDQUF5QixVQUF6QjtBQUNELE9BVkQ7QUFXRDs7QUFFSDtBQUNFLG1CQUFlLFNBQVMsT0FBVCxDQUFpQixhQUFqQixDQUFmO0FBQ0EsaUJBQWEsSUFBYixDQUFrQixVQUFVLFlBQVYsRUFBd0I7QUFDeEMsVUFBSSxvQkFBb0IsRUFBeEI7O0FBRUEsbUJBQWEsT0FBYixDQUFxQixVQUFVLE9BQVYsRUFBbUI7QUFDdEMsWUFBSSxnQkFBZ0IsS0FBSyxLQUFMLENBQVcsS0FBSyxTQUFMLENBQWUsVUFBZixDQUFYLENBQXBCO0FBQ0EsWUFBSSwwQkFBMEIsS0FBSyxtQkFBTCxDQUF5QixJQUF6QixDQUE4QixJQUE5QixFQUFvQyxTQUFwQyxFQUErQyxTQUFTLEVBQXhELEVBQTRELE9BQTVELEVBQXFFLGFBQXJFLENBQTlCO0FBQ0EsMEJBQWtCLElBQWxCLENBQXVCLHVCQUF2QjtBQUNELE9BSm9CLENBSW5CLElBSm1CLENBSWQsSUFKYyxDQUFyQjs7QUFNQSwyQkFBcUIsaUJBQXJCLEVBQXdDLElBQXhDLENBQTZDLFVBQVUsU0FBVixFQUFxQjtBQUNoRSxZQUFJLGFBQWEsRUFBakI7QUFDQSxrQkFBVSxPQUFWLENBQWtCLFVBQVUsZUFBVixFQUEyQjtBQUMzQywwQkFBZ0IsT0FBaEIsQ0FBd0IsVUFBVSxXQUFWLEVBQXVCO0FBQzdDLGdCQUFJLE1BQU0sRUFBVjtBQUNBLG1CQUFPLE1BQVAsQ0FBYyxHQUFkLEVBQW1CLFdBQW5CO0FBQ0EsdUJBQVcsSUFBWCxDQUFnQixHQUFoQjtBQUNELFdBSkQ7QUFLRCxTQU5EO0FBT0EseUJBQWlCLE9BQWpCLENBQXlCLFVBQXpCO0FBQ0QsT0FWRDtBQVdELEtBcEJpQixDQW9CaEIsSUFwQmdCLENBb0JYLElBcEJXLENBQWxCOztBQXNCQSxXQUFPLGdCQUFQO0FBQ0QsR0FyTHVCOztBQXVMeEIsdUJBQXFCLFVBQVUsU0FBVixFQUFxQixnQkFBckIsRUFBdUMsYUFBdkMsRUFBc0QsVUFBdEQsRUFBa0U7QUFDckYsUUFBSSxpQkFBaUIsVUFBVSx1QkFBVixDQUFrQyxnQkFBbEMsQ0FBckI7QUFDQSxRQUFJLDBCQUEwQixLQUFLLHlCQUFMLENBQStCLFNBQS9CLEVBQTBDLGdCQUExQyxFQUE0RCxhQUE1RCxDQUE5QjtBQUNBLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2Qjs7QUFFQSw0QkFBd0IsSUFBeEIsQ0FBNkIsVUFBVSxlQUFWLEVBQTJCO0FBQ3RELG1CQUFhLE9BQU8sTUFBUCxDQUFjLFVBQWQsRUFBMEIsZUFBMUIsQ0FBYjs7QUFFQSxVQUFJLG9CQUFvQixFQUF4Qjs7QUFFQSxxQkFBZSxPQUFmLENBQXVCLFVBQVUsUUFBVixFQUFvQjtBQUN6QyxZQUFJLFVBQVUseUJBQVYsQ0FBb0MsU0FBUyxFQUE3QyxDQUFKLEVBQXNEO0FBQ3BELGNBQUksZ0JBQWdCLEtBQUssS0FBTCxDQUFXLEtBQUssU0FBTCxDQUFlLFVBQWYsQ0FBWCxDQUFwQjtBQUNBLGNBQUksbUJBQW1CLEtBQUssb0JBQUwsQ0FBMEIsSUFBMUIsQ0FBK0IsSUFBL0IsRUFBcUMsU0FBckMsRUFBZ0QsUUFBaEQsRUFBMEQsYUFBMUQsRUFBeUUsYUFBekUsQ0FBdkI7QUFDQSw0QkFBa0IsSUFBbEIsQ0FBdUIsZ0JBQXZCO0FBQ0Q7QUFDRixPQU5zQixDQU1yQixJQU5xQixDQU1oQixJQU5nQixDQUF2Qjs7QUFRSDtBQUNHLDJCQUFxQixpQkFBckIsRUFBd0MsSUFBeEMsQ0FBNkMsVUFBVSxTQUFWLEVBQXFCO0FBQ2hFLFlBQUksYUFBYSxFQUFqQjtBQUNBLGtCQUFVLE9BQVYsQ0FBa0IsVUFBVSxZQUFWLEVBQXdCO0FBQ3hDLHVCQUFhLE9BQWIsQ0FBcUIsVUFBVSxXQUFWLEVBQXVCO0FBQzFDLGdCQUFJLE1BQU0sRUFBVjtBQUNBLG1CQUFPLE1BQVAsQ0FBYyxHQUFkLEVBQW1CLFdBQW5CO0FBQ0EsdUJBQVcsSUFBWCxDQUFnQixHQUFoQjtBQUNELFdBSkQ7QUFLRCxTQU5EOztBQVFBLFlBQUksV0FBVyxNQUFYLEtBQXNCLENBQTFCLEVBQTZCO0FBQ2hDO0FBQ0E7QUFDSyxjQUFJLE9BQU8sSUFBUCxDQUFZLFVBQVosRUFBd0IsTUFBeEIsS0FBbUMsQ0FBdkMsRUFBMEM7QUFDeEMsNkJBQWlCLE9BQWpCLENBQXlCLEVBQXpCO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsNkJBQWlCLE9BQWpCLENBQXlCLENBQUMsVUFBRCxDQUF6QjtBQUNEO0FBQ0YsU0FSRCxNQVFVO0FBQ1IsMkJBQWlCLE9BQWpCLENBQXlCLFVBQXpCO0FBQ0Q7QUFDRixPQXJCRDtBQXNCRCxLQXBDNEIsQ0FvQzNCLElBcEMyQixDQW9DdEIsSUFwQ3NCLENBQTdCOztBQXNDQSxXQUFPLGdCQUFQO0FBQ0QsR0FuT3VCOztBQXFPeEIsV0FBUyxZQUFZO0FBQ25CLFFBQUksZ0JBQWdCLEtBQUssaUJBQUwsRUFBcEI7QUFDQSxRQUFJLG9CQUFvQixFQUF4Qjs7QUFFQSxrQkFBYyxPQUFkLENBQXNCLFVBQVUsWUFBVixFQUF3QjtBQUM1QyxVQUFJLHVCQUF1QixLQUFLLG1CQUFMLENBQXlCLElBQXpCLENBQThCLElBQTlCLEVBQW9DLFlBQXBDLEVBQWtELEtBQUssZ0JBQXZELEVBQXlFLEtBQUssYUFBOUUsRUFBNkYsRUFBN0YsQ0FBM0I7QUFDQSx3QkFBa0IsSUFBbEIsQ0FBdUIsb0JBQXZCO0FBQ0QsS0FIcUIsQ0FHcEIsSUFIb0IsQ0FHZixJQUhlLENBQXRCOztBQUtBLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2QjtBQUNBLHlCQUFxQixpQkFBckIsRUFBd0MsSUFBeEMsQ0FBNkMsVUFBVSxTQUFWLEVBQXFCO0FBQ2hFLFVBQUksVUFBVSxFQUFkO0FBQ0EsZ0JBQVUsT0FBVixDQUFrQixVQUFVLFdBQVYsRUFBdUI7QUFDdkMsa0JBQVUsUUFBUSxNQUFSLENBQWUsV0FBZixDQUFWO0FBQ0QsT0FGRDtBQUdBLHVCQUFpQixPQUFqQixDQUF5QixPQUF6QjtBQUNELEtBTkQ7QUFPQSxXQUFPLGdCQUFQO0FBQ0QsR0F2UHVCOztBQXlQeEIseUJBQXVCLFVBQVUsaUJBQVYsRUFBNkIsVUFBN0IsRUFBeUMsT0FBekMsRUFBa0Q7QUFDdkUsUUFBSSxJQUFJLEtBQUssQ0FBTCxJQUFVLFFBQVEsQ0FBMUI7QUFDQSxRQUFJLFdBQVcsS0FBSyxRQUFMLElBQWlCLFFBQVEsUUFBeEM7QUFDQSxRQUFJLFNBQVMsS0FBSyxNQUFMLElBQWUsUUFBUSxNQUFwQzs7QUFFRjtBQUNBO0FBQ0UsUUFBSSxVQUFVLEtBQUssT0FBbkI7QUFDQSxRQUFJLFdBQVcsS0FBSyxPQUFMLENBQWEsU0FBYixDQUF1QixXQUF2QixDQUFtQyxVQUFuQyxDQUFmO0FBQ0EsUUFBSSxpQkFBaUIsUUFBUSxTQUFSLENBQWtCLGVBQWxCLENBQWtDLFVBQWxDLENBQXJCO0FBQ0EsUUFBSSxrQkFBa0IsRUFBdEI7QUFDQSxRQUFJLENBQUo7QUFDQSxRQUFJLEVBQUo7QUFDQSxRQUFJLGNBQUo7QUFDQSxTQUFLLElBQUksa0JBQWtCLE1BQWxCLEdBQTJCLENBQXBDLEVBQXVDLEtBQUssQ0FBNUMsRUFBK0MsR0FBL0MsRUFBb0Q7QUFDbEQsV0FBSyxrQkFBa0IsQ0FBbEIsQ0FBTDtBQUNBLFVBQUksT0FBTyxPQUFYLEVBQW9CO0FBQ3BCLHVCQUFpQixLQUFLLE9BQUwsQ0FBYSxTQUFiLENBQXVCLFdBQXZCLENBQW1DLEVBQW5DLENBQWpCO0FBQ0Esc0JBQWdCLElBQWhCLENBQXFCLGNBQXJCO0FBQ0Q7O0FBRUg7QUFDRSxRQUFJLFlBQVksZ0JBQWdCLE1BQWhCLENBQXVCLGNBQXZCLENBQWhCO0FBQ0EsY0FBVSxJQUFWLENBQWUsUUFBZjtBQUNBLFlBQVEsU0FBUixHQUFvQixJQUFJLFlBQUosQ0FBaUIsU0FBakIsRUFBNEIsRUFBQyxDQUFELEVBQUksTUFBSixFQUFZLFFBQVosRUFBNUIsQ0FBcEI7O0FBRUEsUUFBSSxnQkFBSjtBQUNGO0FBQ0UsU0FBSyxJQUFJLGtCQUFrQixNQUFsQixHQUEyQixDQUFwQyxFQUF1QyxLQUFLLENBQTVDLEVBQStDLEdBQS9DLEVBQW9EO0FBQ2xELFdBQUssa0JBQWtCLENBQWxCLENBQUw7QUFDQSxVQUFJLE9BQU8sT0FBWCxFQUFvQjtBQUNsQiwyQkFBbUIsRUFBbkI7QUFDQTtBQUNEO0FBQ0QsdUJBQWlCLEtBQUssT0FBTCxDQUFhLFNBQWIsQ0FBdUIsV0FBdkIsQ0FBbUMsa0JBQWtCLENBQWxCLENBQW5DLENBQWpCO0FBQ0EsVUFBSSxDQUFDLGVBQWUsa0JBQWYsRUFBTCxFQUEwQztBQUN4QywyQkFBbUIsRUFBbkI7QUFDQTtBQUNEO0FBQ0Y7QUFDRCxTQUFLLGdCQUFMLEdBQXdCLGdCQUF4Qjs7QUFFQSxXQUFPLEtBQUssT0FBTCxFQUFQO0FBQ0Q7QUFwU3VCLENBQTFCOztBQXVTQSxPQUFPLE9BQVAsR0FBaUIsYUFBakI7OztBQ3RVQTs7Ozs7O0FBTUEsSUFBSSxlQUFlLFVBQVUsV0FBVixFQUF1QixhQUF2QixFQUFzQyxPQUF0QyxFQUErQztBQUNoRSxnQkFBYyxlQUFlLEVBQTdCO0FBQ0EsT0FBSyxDQUFMLEdBQVMsUUFBUSxDQUFqQjtBQUNGLE9BQUssUUFBTCxHQUFnQixRQUFRLFFBQXhCO0FBQ0EsT0FBSyxNQUFMLEdBQWMsUUFBUSxNQUF0QjtBQUNFLE1BQUksQ0FBQyxLQUFLLENBQVYsRUFBYSxNQUFNLElBQUksS0FBSixDQUFVLGlDQUFWLENBQU47QUFDZixNQUFJLENBQUMsS0FBSyxRQUFWLEVBQW9CLE1BQU0sSUFBSSxLQUFKLENBQVUsa0JBQVYsQ0FBTjtBQUNwQixNQUFHLENBQUMsS0FBSyxNQUFULEVBQWdCLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0JBQVYsQ0FBTjtBQUNkLE1BQUksbUJBQW1CLEVBQXZCOztBQUVBLE1BQUksYUFBYSxVQUFVLE9BQVYsRUFBbUI7QUFDbEMsUUFBSSxpQkFBaUIsT0FBakIsQ0FBeUIsT0FBekIsTUFBc0MsQ0FBQyxDQUEzQyxFQUE4QztBQUM1Qyx1QkFBaUIsSUFBakIsQ0FBc0IsT0FBdEI7QUFDRDtBQUNGLEdBSkQ7O0FBTUEsTUFBSSxnQkFBZ0IsYUFBYSxnQkFBYixDQUE4QixXQUE5QixDQUFwQjtBQUNBLE1BQUksT0FBTyxJQUFYO0FBQ0EsZ0JBQWMsT0FBZCxDQUFzQixVQUFVLFFBQVYsRUFBb0I7QUFDMUM7QUFDRSxRQUFJLGFBQWEsVUFBakIsRUFBNkI7QUFDM0IsV0FBSyxDQUFMLENBQU8sYUFBUCxFQUFzQixJQUF0QixDQUEyQixVQUFVLENBQVYsRUFBYSxPQUFiLEVBQXNCO0FBQy9DLG1CQUFXLE9BQVg7QUFDRCxPQUZEO0FBR0QsS0FKRCxNQUlRO0FBQ04sVUFBSSxXQUFXLEtBQUssQ0FBTCxDQUFPLFFBQVAsRUFBaUIsS0FBSyxDQUFMLENBQU8sYUFBUCxDQUFqQixDQUFmO0FBQ0EsZUFBUyxJQUFULENBQWMsVUFBVSxDQUFWLEVBQWEsT0FBYixFQUFzQjtBQUNsQyxtQkFBVyxPQUFYO0FBQ0QsT0FGRDtBQUdEO0FBQ0YsR0FaRDs7QUFjQSxTQUFPLGdCQUFQO0FBQ0QsQ0FqQ0Q7O0FBbUNBLGFBQWEsZ0JBQWIsR0FBZ0MsVUFBVSxXQUFWLEVBQXVCO0FBQ3JELE1BQUksWUFBWSxZQUFZLEtBQVosQ0FBa0IseUJBQWxCLENBQWhCOztBQUVBLE1BQUksa0JBQWtCLEVBQXRCO0FBQ0EsTUFBSSxrQkFBa0IsRUFBdEI7QUFDQSxZQUFVLE9BQVYsQ0FBa0IsVUFBVSxRQUFWLEVBQW9CO0FBQ3BDLFFBQUksYUFBYSxHQUFqQixFQUFzQjtBQUNwQixVQUFJLGdCQUFnQixJQUFoQixHQUF1QixNQUEzQixFQUFtQztBQUNqQyx3QkFBZ0IsSUFBaEIsQ0FBcUIsZ0JBQWdCLElBQWhCLEVBQXJCO0FBQ0Q7QUFDRCx3QkFBa0IsRUFBbEI7QUFDRCxLQUxELE1BS1E7QUFDTix5QkFBbUIsUUFBbkI7QUFDRDtBQUNGLEdBVEQ7QUFVQSxNQUFJLGdCQUFnQixJQUFoQixHQUF1QixNQUEzQixFQUFtQztBQUNqQyxvQkFBZ0IsSUFBaEIsQ0FBcUIsZ0JBQWdCLElBQWhCLEVBQXJCO0FBQ0Q7O0FBRUQsU0FBTyxlQUFQO0FBQ0QsQ0FwQkQ7O0FBc0JBLE9BQU8sT0FBUCxHQUFpQixZQUFqQjs7O0FDL0RBLE1BQU0sUUFBUSxRQUFRLE9BQVIsQ0FBZDtBQUNBLE1BQU0sU0FBUyxRQUFRLFFBQVIsQ0FBZjtBQUNBLElBQUksaUJBQWlCLFFBQVEsaUJBQVIsQ0FBckI7O0FBRUEsTUFBTSxpQkFBaUIsUUFBUSxtQ0FBUixDQUF2QjtBQUNBLElBQUksdUJBQXVCLFFBQVEsdUNBQVIsQ0FBM0I7O0FBRUEsSUFBSSxlQUFlLFVBQVUsT0FBVixFQUFtQixXQUFuQixFQUFnQztBQUNqRCxPQUFLLGFBQUwsR0FBcUIsUUFBUSxhQUE3QjtBQUNELENBRkQ7O0FBSUEsYUFBYSxTQUFiLEdBQXlCO0FBQ3ZCLFdBQVMsVUFBVSxHQUFWLEVBQWUsUUFBZixFQUF5QjtBQUNoQyxVQUFNLEVBQUMsS0FBRCxLQUFVLEtBQWhCO0FBQ0EsVUFBTSxVQUFVLElBQWhCO0FBQ0EsVUFBTSxPQUFOLENBQWMsR0FBZCxFQUNHLElBREgsQ0FDUSxVQUFVLEdBQVYsRUFBZTtBQUNuQixZQUFNLFNBQVMsSUFBSSxNQUFuQjtBQUNBLFlBQU0sV0FBVyxPQUFPLFFBQXhCO0FBQ0EsWUFBTSxJQUFJLE9BQU8sSUFBSSxNQUFYLENBQVY7QUFDQSxpQkFBVyxZQUFZO0FBQ3JCLGlCQUFTLElBQVQsRUFBZSxFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUFmO0FBQ0QsT0FGRCxFQUVHLFFBQVEsYUFGWDtBQUdELEtBUkgsRUFRSyxLQVJMLENBUVcsS0FBSyxTQUFTLENBQVQsQ0FSaEI7QUFTRCxHQWJzQjtBQWN2QixTQUFPLFlBQVksQ0FFbEIsQ0FoQnNCO0FBaUJ2QixjQUFZLFVBQVUsTUFBVixFQUFrQixjQUFsQixFQUFrQztBQUM1QyxRQUFJLG1CQUFtQixlQUFlLFFBQWYsRUFBdkI7QUFDQSxRQUFJLDBCQUEwQixFQUE5QjtBQUNBLFFBQUksZUFBZSxnQkFBZ0IsTUFBbkM7QUFDQSxTQUFLLElBQUksSUFBVCxJQUFpQixNQUFqQixFQUF5QjtBQUN2QixVQUFJLEtBQUssTUFBTCxDQUFZLENBQVosRUFBZSxZQUFmLE1BQWlDLGVBQXJDLEVBQXNEO0FBQ3BELGNBQU0sSUFBSSxLQUFKLENBQVUseUNBQVYsQ0FBTjtBQUNEO0FBQ0Y7QUFDRCx5QkFBcUIsdUJBQXJCLEVBQThDLElBQTlDLENBQW1ELFlBQVk7QUFDN0QsdUJBQWlCLE9BQWpCO0FBQ0QsS0FGRDs7QUFJQSxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0QsR0EvQnNCO0FBZ0N2QixhQUFXLFVBQVUsR0FBVixFQUFlLE9BQWYsRUFBd0IsZ0JBQXhCLEVBQTBDLFFBQTFDLEVBQW9ELEtBQXBELEVBQTJEO0FBQ3BFLFVBQU0sVUFBVSxJQUFoQjtBQUNBLFlBQVEsR0FBUix1RUFBWSx3QkFBWjtBQUNBLFlBQVEsT0FBUixDQUFnQixHQUFoQixFQUFxQixVQUFVLEdBQVYsRUFBZSxFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUFmLEVBQXNDO0FBQ3pELFVBQUksR0FBSixFQUFTO0FBQ1AsZUFBTyxTQUFTLEdBQVQsQ0FBUDtBQUNEOztBQUVELFVBQUksVUFBVTtBQUNaLHFCQUFhLElBREQ7QUFFWixpQkFBUyxLQUFLLEtBQUwsQ0FBVyxLQUFLLFNBQUwsQ0FBZSxPQUFmLENBQVgsQ0FGRztBQUdaLDBCQUFrQjtBQUhOLE9BQWQ7QUFLQSxlQUFTLFlBQVQsQ0FBdUIsSUFBdkIsRUFBNkI7QUFDM0IsaUJBQVMsSUFBVCxDQUFjLEtBQWQsRUFBcUIsSUFBckIsRUFBMkIsSUFBM0I7QUFDRDtBQUNELHFCQUFlLE9BQWYsRUFBd0IsSUFBeEIsRUFBOEIsWUFBOUIsRUFBNEMsRUFBQyxDQUFELEVBQUksUUFBSixFQUFjLE1BQWQsRUFBNUM7QUFDRCxLQWREO0FBZUQ7QUFsRHNCLENBQXpCOztBQXFEQSxPQUFPLE9BQVAsR0FBaUIsWUFBakI7OztBQ2hFQSxNQUFNLGVBQWUsUUFBUSxnQkFBUixDQUFyQjtBQUNBLE9BQU8sT0FBUCxHQUFpQixVQUFVLElBQVYsRUFBZ0I7QUFDL0IsTUFBSSxVQUVKLEtBQUssT0FBTCxHQUFlLFVBQVUsR0FBVixFQUFlO0FBQzVCLFNBQUssV0FBTCxDQUFpQjtBQUNmLFdBQUssSUFBSSxLQUFKLENBQVUsR0FBVjtBQURVLEtBQWpCO0FBR0EsU0FBSyxLQUFMO0FBQ0QsR0FQRDtBQVFBLE9BQUssZ0JBQUwsQ0FBc0IsU0FBdEIsRUFBaUMsVUFBVSxFQUFWLEVBQWM7QUFDN0MsVUFBTSxPQUFPLEdBQUcsSUFBaEI7QUFDQSxVQUFNLE9BQU8sS0FBSyxJQUFsQjtBQUNBLFFBQUksS0FBSyxLQUFMLEtBQWUsTUFBbkIsRUFBMkI7QUFDekIsZ0JBQVUsSUFBSSxZQUFKLENBQWlCLEtBQUssT0FBdEIsRUFBK0IsRUFBL0IsQ0FBVjtBQUNBLGFBQU8sS0FBSyxXQUFMLENBQWlCO0FBQ3RCO0FBRHNCLE9BQWpCLENBQVA7QUFHRCxLQUxELE1BS08sSUFBSSxLQUFLLEtBQUwsS0FBZSxTQUFuQixFQUE4QjtBQUNuQyxjQUFRLE9BQVIsQ0FBZ0IsS0FBSyxHQUFyQixFQUEwQixVQUFVLEdBQVYsRUFBZSxFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUFmLEVBQXNDO0FBQzlELFlBQUksR0FBSixFQUFTO0FBQ1AsaUJBQU8sS0FBSyxXQUFMLENBQWlCO0FBQ3RCLGdCQURzQjtBQUV0QjtBQUZzQixXQUFqQixDQUFQO0FBSUQ7QUFDRCxhQUFLLFdBQUwsQ0FBaUI7QUFDZjtBQURlLFNBQWpCO0FBR0QsT0FWRDtBQVdELEtBWk0sTUFZQSxJQUFJLEtBQUssS0FBTCxLQUFlLFdBQW5CLEVBQWdDO0FBQ3JDLGNBQVEsU0FBUixDQUFrQixLQUFLLEdBQXZCLEVBQTRCLEtBQUssT0FBakMsRUFBMEMsS0FBSyxnQkFBL0MsRUFBaUUsVUFBVSxHQUFWLEVBQWUsT0FBZixFQUF3QjtBQUN2RixZQUFJLEdBQUosRUFBUztBQUNQLGlCQUFPLEtBQUssV0FBTCxDQUFpQjtBQUN0QixnQkFEc0I7QUFFdEI7QUFGc0IsV0FBakIsQ0FBUDtBQUlEO0FBQ0QsYUFBSyxXQUFMLENBQWlCO0FBQ2YsY0FEZTtBQUVmLGdCQUFNO0FBQ0o7QUFESTtBQUZTLFNBQWpCO0FBTUQsT0FiRCxFQWFHLElBYkg7QUFjRCxLQWZNLE1BZUE7QUFDTCxXQUFLLFdBQUwsQ0FBaUI7QUFDZixhQUFLLElBQUksS0FBSixDQUFVLG9CQUFvQixLQUFLLEtBQW5DO0FBRFUsT0FBakI7QUFHRDtBQUNGLEdBeENEO0FBeUNELENBbEREOzs7O0FDQUEsSUFBSSxNQUFNLFVBQVUsR0FBVixFQUFlLGNBQWYsRUFBK0IsT0FBL0IsRUFBd0MsU0FBeEMsRUFBbUQsUUFBbkQsRUFBNkQ7QUFDckUsTUFBSSxjQUFjLFNBQWxCLEVBQTZCO0FBQzNCLFNBQUssR0FBTCxHQUFXLEtBQUssV0FBTCxDQUFpQixVQUFVLEdBQTNCLEVBQWdDLEdBQWhDLENBQVg7QUFDRCxHQUZELE1BRU87QUFDTCxTQUFLLEdBQUwsR0FBVyxHQUFYO0FBQ0Q7QUFDRCxPQUFLLGNBQUwsR0FBc0IsY0FBdEI7QUFDQSxPQUFLLE9BQUwsR0FBZSxPQUFmO0FBQ0EsT0FBSyxTQUFMLEdBQWlCLEVBQWpCO0FBQ0EsT0FBSyxRQUFMLEdBQWdCLFlBQVksRUFBNUI7QUFDRCxDQVZEOztBQVlBLElBQUksU0FBSixHQUFnQjs7QUFFZCxlQUFhLFVBQVUsU0FBVixFQUFxQixRQUFyQixFQUErQjtBQUMxQyxRQUFJLGFBQWEsSUFBSSxNQUFKLENBQVcsK0lBQVgsRUFBNEosR0FBNUosQ0FBakI7O0FBRUEsUUFBSSxnQkFBZ0IsVUFBVSxLQUFWLENBQWdCLFVBQWhCLENBQXBCO0FBQ0EsUUFBSSxlQUFlLFNBQVMsS0FBVCxDQUFlLFVBQWYsQ0FBbkI7O0FBRUY7QUFDRSxRQUFJLGFBQWEsQ0FBYixNQUFvQixTQUFwQixJQUFpQyxhQUFhLENBQWIsTUFBb0IsU0FBckQsSUFBa0UsYUFBYSxDQUFiLE1BQW9CLFNBQXRGLElBQW1HLGFBQWEsQ0FBYixNQUFvQixTQUEzSCxFQUFzSTtBQUNwSSxVQUFJLE1BQU0sY0FBYyxDQUFkLElBQW1CLGNBQWMsQ0FBZCxDQUFuQixHQUFzQyxjQUFjLENBQWQsQ0FBdEMsR0FBeUQsY0FBYyxDQUFkLENBQXpELEdBQTRFLGFBQWEsQ0FBYixDQUF0RjtBQUNBLGFBQU8sR0FBUDtBQUNEOztBQUVELFFBQUksYUFBYSxDQUFiLE1BQW9CLFNBQXhCLEVBQW1DO0FBQ2pDLG1CQUFhLENBQWIsSUFBa0IsY0FBYyxDQUFkLENBQWxCO0FBQ0Q7QUFDRCxRQUFJLGFBQWEsQ0FBYixNQUFvQixTQUF4QixFQUFtQztBQUNqQyxtQkFBYSxDQUFiLElBQWtCLGNBQWMsQ0FBZCxDQUFsQjtBQUNEO0FBQ0QsUUFBSSxhQUFhLENBQWIsTUFBb0IsU0FBeEIsRUFBbUM7QUFDakMsVUFBSSxjQUFjLENBQWQsTUFBcUIsU0FBekIsRUFBb0M7QUFDbEMscUJBQWEsQ0FBYixJQUFrQixHQUFsQjtBQUNELE9BRkQsTUFFTztBQUNMLHFCQUFhLENBQWIsSUFBa0IsY0FBYyxDQUFkLENBQWxCO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJLGFBQWEsQ0FBYixNQUFvQixTQUF4QixFQUFtQztBQUNqQyxtQkFBYSxDQUFiLElBQWtCLEVBQWxCO0FBQ0Q7QUFDRCxRQUFJLGFBQWEsQ0FBYixNQUFvQixTQUF4QixFQUFtQztBQUNqQyxtQkFBYSxDQUFiLElBQWtCLEVBQWxCO0FBQ0Q7O0FBRUQsV0FBTyxhQUFhLENBQWIsSUFBa0IsYUFBYSxDQUFiLENBQWxCLEdBQW9DLGFBQWEsQ0FBYixDQUFwQyxHQUFzRCxhQUFhLENBQWIsQ0FBdEQsR0FBd0UsYUFBYSxDQUFiLENBQS9FO0FBQ0QsR0FwQ2E7O0FBc0NkLFdBQVMsVUFBVSxPQUFWLEVBQW1CLFFBQW5CLEVBQTZCLEtBQTdCLEVBQW9DO0FBQzNDLFFBQUksVUFBVSxLQUFLLE9BQUwsQ0FBYSxPQUEzQjtBQUNBLFFBQUksTUFBTSxJQUFWO0FBQ0EsWUFBUSxHQUFSLHlEQUFZLG1CQUFaO0FBQ0EsWUFBUSxTQUFSLENBQWtCLEtBQUssR0FBdkIsRUFBNEIsT0FBNUIsRUFBcUMsS0FBSyxjQUExQyxFQUEwRCxVQUFVLEdBQVYsRUFBZSxPQUFmLEVBQXdCO0FBQ2hGLFVBQUksR0FBSixFQUFTO0FBQ1AsZUFBTyxTQUFTLEdBQVQsQ0FBUDtBQUNEO0FBQ0QsY0FBUSxHQUFSLHlEQUFZLG1CQUFaO0FBQ0g7QUFDRyxXQUFLLElBQUksQ0FBVCxJQUFjLE9BQWQsRUFBdUI7QUFDckIsWUFBSSxTQUFTLFFBQVEsQ0FBUixDQUFiO0FBQ0EsYUFBSyxJQUFJLEdBQVQsSUFBZ0IsS0FBSyxRQUFyQixFQUErQjtBQUM3QixjQUFJLEVBQUUsT0FBTyxNQUFULENBQUosRUFBc0I7QUFDcEIsbUJBQU8sR0FBUCxJQUFjLEtBQUssUUFBTCxDQUFjLEdBQWQsQ0FBZDtBQUNEO0FBQ0Y7QUFDRCxhQUFLLFNBQUwsQ0FBZSxJQUFmLENBQW9CLE1BQXBCO0FBQ0Q7QUFDRCxlQUFTLElBQVQsRUFBZSxHQUFmO0FBQ0QsS0FoQnlELENBZ0J4RCxJQWhCd0QsQ0FnQm5ELElBaEJtRCxDQUExRCxFQWdCYyxJQWhCZDtBQWlCRCxHQTNEYTtBQTREZCxjQUFZLFlBQVk7QUFDdEIsV0FBTyxLQUFLLFNBQVo7QUFDRDtBQTlEYSxDQUFoQjs7QUFpRUEsT0FBTyxPQUFQLEdBQWlCLEdBQWpCOzs7O0FDN0VBLElBQUksUUFBUSxZQUFZO0FBQ3RCLE9BQUssSUFBTCxHQUFZLEVBQVo7QUFDQSxPQUFLLFdBQUwsR0FBbUIsRUFBbkI7QUFDRCxDQUhEOztBQUtBLE1BQU0sU0FBTixHQUFrQjs7QUFFakI7Ozs7O0FBS0MsT0FBSyxVQUFVLEdBQVYsRUFBZTtBQUNsQixRQUFJLEtBQUssVUFBTCxDQUFnQixHQUFoQixDQUFKLEVBQTBCO0FBQ3hCLFdBQUssSUFBTCxDQUFVLElBQVYsQ0FBZSxHQUFmO0FBQ0EsV0FBSyxjQUFMLENBQW9CLElBQUksR0FBeEI7QUFDQSxhQUFPLElBQVA7QUFDRDtBQUNELFdBQU8sS0FBUDtBQUNELEdBZGU7O0FBZ0JoQixjQUFZLFVBQVUsR0FBVixFQUFlO0FBQ3pCLFFBQUksS0FBSyxTQUFMLENBQWUsSUFBSSxHQUFuQixDQUFKLEVBQTZCO0FBQzNCLGFBQU8sS0FBUDtBQUNEOztBQUVIO0FBQ0UsUUFBSSxJQUFJLEdBQUosQ0FBUSxLQUFSLENBQWMsaUNBQWQsTUFBcUQsSUFBekQsRUFBK0Q7QUFDN0QsYUFBTyxLQUFQO0FBQ0Q7QUFDRCxXQUFPLElBQVA7QUFDRCxHQTFCZTs7QUE0QmhCLGdCQUFjLFlBQVk7QUFDeEIsV0FBTyxLQUFLLElBQUwsQ0FBVSxNQUFqQjtBQUNELEdBOUJlOztBQWdDaEIsYUFBVyxVQUFVLEdBQVYsRUFBZTtBQUN4QixXQUFRLEtBQUssV0FBTCxDQUFpQixHQUFqQixNQUEwQixTQUFsQztBQUNELEdBbENlOztBQW9DaEIsa0JBQWdCLFVBQVUsR0FBVixFQUFlO0FBQzdCLFNBQUssV0FBTCxDQUFpQixHQUFqQixJQUF3QixJQUF4QjtBQUNELEdBdENlOztBQXdDaEIsY0FBWSxZQUFZO0FBQ3hCO0FBQ0UsUUFBSSxLQUFLLFlBQUwsS0FBc0IsQ0FBMUIsRUFBNkI7QUFDM0IsYUFBTyxLQUFLLElBQUwsQ0FBVSxHQUFWLEVBQVA7QUFDRCxLQUZELE1BRU87QUFDTCxhQUFPLEtBQVA7QUFDRDtBQUNGO0FBL0NlLENBQWxCOztBQWtEQSxPQUFPLE9BQVAsR0FBaUIsS0FBakI7OztBQ3hEQSxJQUFJLHVCQUF1QixRQUFRLHVDQUFSLENBQTNCO0FBQ0EsSUFBSSxNQUFNLFFBQVEsT0FBUixDQUFWOztBQUVBLElBQUksVUFBVSxVQUFVLE9BQVYsRUFBbUIsV0FBbkIsRUFBZ0M7QUFDNUMsT0FBSyxLQUFMLEdBQWEsUUFBUSxLQUFyQjtBQUNBLE9BQUssT0FBTCxHQUFlLFFBQVEsT0FBdkI7QUFDQSxPQUFLLEtBQUwsR0FBYSxRQUFRLEtBQXJCO0FBQ0EsT0FBSyxPQUFMLEdBQWUsUUFBUSxPQUF2QjtBQUNBLE9BQUssWUFBTCxHQUFvQixJQUFwQixDQUw0QyxDQUtuQjtBQUN6QixPQUFLLGVBQUwsR0FBdUIsU0FBUyxRQUFRLGVBQWpCLENBQXZCO0FBQ0EsT0FBSyxhQUFMLEdBQXFCLFNBQVMsUUFBUSxhQUFqQixDQUFyQjs7QUFFQTtBQUNBLE9BQUssQ0FBTCxHQUFTLFlBQVksQ0FBckI7QUFDQSxPQUFLLFFBQUwsR0FBZ0IsWUFBWSxRQUE1QjtBQUNBLE9BQUssTUFBTCxHQUFjLFlBQVksTUFBMUI7QUFDQSxNQUFJLENBQUMsWUFBWSxDQUFqQixFQUFvQixNQUFNLElBQUksS0FBSixDQUFVLGdCQUFWLENBQU47QUFDcEIsTUFBSSxDQUFDLFlBQVksTUFBakIsRUFBeUIsTUFBTSxJQUFJLEtBQUosQ0FBVSxnQkFBVixDQUFOO0FBQ3pCLE1BQUksQ0FBQyxZQUFZLFFBQWpCLEVBQTJCLE1BQU0sSUFBSSxLQUFKLENBQVUsa0JBQVYsQ0FBTjtBQUM1QixDQWhCRDs7QUFrQkEsUUFBUSxTQUFSLEdBQW9COztBQUVuQjs7O0FBR0MsbUJBQWlCLElBTEM7QUFNbEIsNEJBQTBCLENBTlI7O0FBUWxCLGlCQUFlLFlBQVk7QUFDekIsUUFBSSxPQUFPLEtBQUssT0FBTCxDQUFhLFlBQWIsRUFBWDs7QUFFQSxTQUFLLE9BQUwsQ0FBYSxVQUFVLEdBQVYsRUFBZTtBQUMxQixVQUFJLFdBQVcsSUFBSSxHQUFKLENBQVEsR0FBUixFQUFhLE9BQWIsRUFBc0IsSUFBdEIsQ0FBZjtBQUNBLFdBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxRQUFmO0FBQ0QsS0FIWSxDQUdYLElBSFcsQ0FHTixJQUhNLENBQWI7QUFJRCxHQWZpQjs7QUFpQmxCLE9BQUssVUFBVSxpQkFBVixFQUE2QjtBQUNoQyxRQUFJLFVBQVUsSUFBZDs7QUFFRjtBQUNFLFNBQUssaUJBQUwsR0FBeUIsaUJBQXpCOztBQUVBLFNBQUssYUFBTDs7QUFFQSxTQUFLLEtBQUwsQ0FBVyxpQkFBWCxDQUE2QixLQUFLLE9BQUwsQ0FBYSxHQUExQyxFQUErQyxVQUFVLFlBQVYsRUFBd0I7QUFDckUsY0FBUSxZQUFSLEdBQXVCLFlBQXZCO0FBQ0EsY0FBUSxJQUFSO0FBQ0QsS0FIRDtBQUlELEdBN0JpQjs7QUErQmxCLDBCQUF3QixVQUFVLE1BQVYsRUFBa0I7QUFDeEMsUUFBSSxPQUFPLE9BQVAsS0FBbUIsU0FBdkIsRUFBa0M7QUFDaEMsYUFBTyxLQUFQO0FBQ0Q7O0FBRUQsUUFBSSxhQUFhLE9BQU8saUJBQXhCO0FBQ0EsUUFBSSxpQkFBaUIsS0FBSyxPQUFMLENBQWEsdUJBQWIsQ0FBcUMsVUFBckMsQ0FBckI7QUFDQSxRQUFJLGVBQWUsTUFBZixLQUEwQixDQUE5QixFQUFpQztBQUMvQixhQUFPLEtBQVA7QUFDRCxLQUZELE1BRU87QUFDTCxhQUFPLElBQVA7QUFDRDtBQUNGLEdBM0NpQjs7QUE2Q2xCLG1CQUFpQixVQUFVLEdBQVYsRUFBZTtBQUM5QixRQUFJLFFBQVEsSUFBSSxLQUFKLENBQVUsR0FBVixDQUFaO0FBQ0EsUUFBSSxXQUFXLE1BQU0sTUFBTSxNQUFOLEdBQWUsQ0FBckIsQ0FBZjtBQUNBLGVBQVcsU0FBUyxPQUFULENBQWlCLEtBQWpCLEVBQXdCLEVBQXhCLENBQVg7QUFDQSxRQUFJLFNBQVMsTUFBVCxHQUFrQixHQUF0QixFQUEyQjtBQUN6QixpQkFBVyxTQUFTLE1BQVQsQ0FBZ0IsQ0FBaEIsRUFBbUIsR0FBbkIsQ0FBWDtBQUNEO0FBQ0QsV0FBTyxRQUFQO0FBQ0QsR0FyRGlCOztBQXVEbkI7Ozs7QUFJQyxjQUFZLFVBQVUsTUFBVixFQUFrQjtBQUM1QixRQUFJLFVBQVUsS0FBSyxPQUFuQjtBQUNBLFdBQU8sUUFBUSxVQUFSLENBQW1CLE1BQW5CLEVBQTJCLGVBQWUsSUFBZixDQUFvQixJQUFwQixDQUEzQixDQUFQOztBQUVBLGFBQVMsY0FBVCxDQUF5QixVQUF6QixFQUFxQztBQUFFLGFBQU8sS0FBSyxPQUFMLENBQWEsR0FBYixHQUFtQixHQUFuQixHQUF5QixVQUF6QixHQUFzQyxHQUF0QyxHQUE0QyxLQUFLLGVBQUwsQ0FBcUIsT0FBTyxhQUFhLE1BQXBCLENBQXJCLENBQW5EO0FBQXNHO0FBQzlJLEdBaEVpQjs7QUFrRW5CO0FBQ0MsUUFBTSxZQUFZO0FBQ2hCLFFBQUksTUFBTSxLQUFLLEtBQUwsQ0FBVyxVQUFYLEVBQVY7QUFDQSxRQUFJLFFBQVEsS0FBWixFQUFtQjtBQUNqQixjQUFRLEdBQVIseUVBQVksK0JBQVo7QUFDQSxXQUFLLE9BQUwsQ0FBYSxLQUFiO0FBQ0EsV0FBSyxpQkFBTDtBQUNBO0FBQ0Q7QUFDRCxZQUFRLEdBQVIsNERBQVksa0JBQVo7QUFDQSxRQUFJLE9BQUosQ0FBWSxLQUFLLE9BQWpCLEVBQTBCLFVBQVUsR0FBVixFQUFlLEdBQWYsRUFBb0I7QUFDNUMsVUFBSSxHQUFKLEVBQVM7QUFDUDtBQUNBLGVBQU8sUUFBUSxLQUFSLDZEQUFjLGNBQWQsRUFBOEIsR0FBOUIsQ0FBUDtBQUNEO0FBQ0QsY0FBUSxHQUFSLCtEQUFZLG9CQUFaO0FBQ0EsVUFBSSxpQkFBaUIsRUFBckI7QUFDQSxVQUFJLDRCQUE0QixFQUFoQzs7QUFFQSxVQUFJLFVBQVUsSUFBSSxVQUFKLEVBQWQ7QUFDQSxjQUFRLE9BQVIsQ0FBZ0IsVUFBVSxNQUFWLEVBQWtCO0FBQ3BDOztBQUVJLGtDQUEwQixJQUExQixDQUErQixLQUFLLFVBQUwsQ0FBZ0IsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkIsTUFBM0IsQ0FBL0I7O0FBRUo7QUFDSSxZQUFJLEtBQUssc0JBQUwsQ0FBNEIsTUFBNUIsQ0FBSixFQUF5QztBQUN2QyxjQUFJLG1CQUFtQixPQUFPLGlCQUE5QjtBQUNBLGNBQUksWUFBWSxPQUFPLFNBQVAsQ0FBaEI7QUFDQSxpQkFBTyxPQUFPLFNBQVAsQ0FBUDtBQUNBLGlCQUFPLE9BQU8sbUJBQVAsQ0FBUDtBQUNBLGNBQUksU0FBUyxJQUFJLEdBQUosQ0FBUSxTQUFSLEVBQW1CLGdCQUFuQixFQUFxQyxJQUFyQyxFQUEyQyxHQUEzQyxFQUFnRCxNQUFoRCxDQUFiO0FBQ0EsY0FBSSxLQUFLLEtBQUwsQ0FBVyxVQUFYLENBQXNCLE1BQXRCLENBQUosRUFBbUM7QUFDakMsaUJBQUssS0FBTCxDQUFXLEdBQVgsQ0FBZSxNQUFmO0FBQ0QsV0FGRCxNQUVPO0FBQ0w7QUFDQSxvQkFBUSxHQUFSLDBEQUFZLGVBQVo7QUFDQSxvQkFBUSxHQUFSLCtDQUFZLE1BQVo7QUFDWjtBQUNXO0FBQ0YsU0FkRCxNQWNPO0FBQ0wsY0FBSSxPQUFPLE9BQVAsS0FBbUIsU0FBdkIsRUFBa0M7QUFDaEMsbUJBQU8sT0FBTyxTQUFQLENBQVA7QUFDQSxtQkFBTyxPQUFPLG1CQUFQLENBQVA7QUFDRDtBQUNELHlCQUFlLElBQWYsQ0FBb0IsTUFBcEI7QUFDRDtBQUNGLE9BM0JlLENBMkJkLElBM0JjLENBMkJULElBM0JTLENBQWhCOztBQTZCQSwyQkFBcUIseUJBQXJCLEVBQWdELElBQWhELENBQXFELFlBQVk7QUFDL0QsYUFBSyxZQUFMLENBQWtCLFNBQWxCLENBQTRCLGNBQTVCLEVBQTRDLFlBQVk7QUFDdEQsY0FBSSxNQUFPLElBQUksSUFBSixFQUFELENBQWEsT0FBYixFQUFWO0FBQ0w7QUFDSyxlQUFLLHdCQUFMLEdBQWdDLE1BQU0sS0FBSyxlQUEzQztBQUNBLGNBQUksT0FBTyxLQUFLLHdCQUFoQixFQUEwQztBQUN4QyxpQkFBSyxJQUFMO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsZ0JBQUksUUFBUSxLQUFLLHdCQUFMLEdBQWdDLEdBQTVDO0FBQ0EsdUJBQVcsWUFBWTtBQUNyQixtQkFBSyxJQUFMO0FBQ0QsYUFGVSxDQUVULElBRlMsQ0FFSixJQUZJLENBQVgsRUFFYyxLQUZkO0FBR0Q7QUFDRixTQVoyQyxDQVkxQyxJQVowQyxDQVlyQyxJQVpxQyxDQUE1QztBQWFELE9BZG9ELENBY25ELElBZG1ELENBYzlDLElBZDhDLENBQXJEO0FBZUQsS0F0RHlCLENBc0R4QixJQXREd0IsQ0FzRG5CLElBdERtQixDQUExQjtBQXVERDtBQW5JaUIsQ0FBcEI7O0FBc0lBLE9BQU8sT0FBUCxHQUFpQixPQUFqQjs7O0FDM0pBLElBQUksWUFBWSxRQUFRLGFBQVIsQ0FBaEI7QUFDQSxJQUFJLGVBQWUsUUFBUSxnQkFBUixDQUFuQjtBQUNBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7O0FBRUEsSUFBSSxXQUFXLFVBQVUsUUFBVixFQUFvQixPQUFwQixFQUE2QjtBQUMxQyxNQUFJLElBQUksUUFBUSxDQUFoQjtBQUNBLE1BQUksV0FBVyxRQUFRLFFBQXZCO0FBQ0EsTUFBSSxTQUFTLFFBQVEsTUFBckI7QUFDQTtBQUNBLFNBQU8sY0FBUCxDQUFzQixJQUF0QixFQUE0QixHQUE1QixFQUFpQztBQUMvQixXQUFPLENBRHdCO0FBRS9CLGdCQUFZO0FBRm1CLEdBQWpDO0FBSUEsU0FBTyxjQUFQLENBQXNCLElBQXRCLEVBQTRCLFFBQTVCLEVBQXNDO0FBQ3BDLFdBQU8sTUFENkI7QUFFcEMsZ0JBQVk7QUFGd0IsR0FBdEM7QUFJQSxTQUFPLGNBQVAsQ0FBc0IsSUFBdEIsRUFBNEIsVUFBNUIsRUFBd0M7QUFDdEMsV0FBTyxRQUQrQjtBQUV0QyxnQkFBWTtBQUYwQixHQUF4QztBQUlBLE1BQUksQ0FBQyxLQUFLLENBQVYsRUFBYSxNQUFNLElBQUksS0FBSixDQUFVLGdCQUFWLENBQU47QUFDYixNQUFJLENBQUMsS0FBSyxRQUFWLEVBQW9CLE1BQU0sSUFBSSxLQUFKLENBQVUsa0JBQVYsQ0FBTjtBQUNwQixNQUFHLENBQUMsS0FBSyxNQUFULEVBQWdCLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0JBQVYsQ0FBTjs7QUFFaEIsT0FBSyxVQUFMLENBQWdCLFFBQWhCO0FBQ0EsT0FBSyxRQUFMO0FBQ0QsQ0F2QkQ7O0FBeUJBLFNBQVMsU0FBVCxHQUFxQjs7QUFFcEI7Ozs7QUFJQyw2QkFBMkIsWUFBWTtBQUNyQyxXQUFPLEtBQUssd0JBQUwsTUFBbUMsS0FBSyxRQUEvQztBQUNELEdBUmtCOztBQVVwQjs7OztBQUlDLGNBQVksVUFBVSxJQUFWLEVBQWdCO0FBQzFCLFFBQUksY0FBYyxDQUFDLFFBQUQsRUFBVyxVQUFYLEVBQXVCLElBQXZCLEVBQTZCLE1BQTdCLEVBQXFDLFVBQXJDLEVBQWlELGlCQUFqRCxDQUFsQjtBQUNBLFlBQVEsR0FBUixnRUFBWSxXQUFaLEVBQXlCLEtBQUssSUFBOUI7QUFDQSxrQkFBYyxZQUFZLE1BQVosQ0FBbUIsVUFBVSxLQUFLLElBQWYsRUFBcUIsV0FBckIsRUFBbkIsQ0FBZDtBQUNBLFFBQUksR0FBSjtBQUNGO0FBQ0UsU0FBSyxHQUFMLElBQVksSUFBWixFQUFrQjtBQUNoQixVQUFJLFlBQVksT0FBWixDQUFvQixHQUFwQixNQUE2QixDQUFDLENBQTlCLElBQW1DLE9BQU8sS0FBSyxHQUFMLENBQVAsS0FBcUIsVUFBNUQsRUFBd0U7QUFDdEUsYUFBSyxHQUFMLElBQVksS0FBSyxHQUFMLENBQVo7QUFDRDtBQUNGOztBQUVIO0FBQ0UsU0FBSyxHQUFMLElBQVksSUFBWixFQUFrQjtBQUNoQixVQUFJLFlBQVksT0FBWixDQUFvQixHQUFwQixNQUE2QixDQUFDLENBQTlCLElBQW1DLE9BQU8sS0FBSyxHQUFMLENBQVAsS0FBcUIsVUFBNUQsRUFBd0U7QUFDdEUsZUFBTyxLQUFLLEdBQUwsQ0FBUDtBQUNEO0FBQ0Y7QUFDRixHQWhDa0I7O0FBa0NwQjs7OztBQUlDLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sR0FBUDtBQUNELEdBeENrQjs7QUEwQ3BCOzs7QUFHQyxZQUFVLFlBQVk7QUFDcEIsUUFBSSxVQUFVLEtBQUssSUFBZixNQUF5QixTQUE3QixFQUF3QztBQUN0QyxZQUFNLElBQUksS0FBSixDQUFVLCtCQUErQixLQUFLLElBQTlDLENBQU47QUFDRDs7QUFFSDtBQUNFLFNBQUssSUFBSSxDQUFULElBQWMsVUFBVSxLQUFLLElBQWYsQ0FBZCxFQUFvQztBQUNsQyxXQUFLLENBQUwsSUFBVSxVQUFVLEtBQUssSUFBZixFQUFxQixDQUFyQixDQUFWO0FBQ0Q7QUFDRixHQXREa0I7O0FBd0RwQjs7Ozs7QUFLQyxxQkFBbUIsVUFBVSxVQUFWLEVBQXNCO0FBQ3ZDLFdBQVEsS0FBSyxlQUFMLENBQXFCLE9BQXJCLENBQTZCLFVBQTdCLE1BQTZDLENBQUMsQ0FBdEQ7QUFDRCxHQS9Ea0I7O0FBaUVuQix3QkFBc0IsVUFBVSxVQUFWLEVBQXNCO0FBQzFDLFFBQUksUUFBUSxLQUFLLGVBQUwsQ0FBcUIsT0FBckIsQ0FBNkIsVUFBN0IsQ0FBWjtBQUNBLFFBQUksVUFBVSxDQUFDLENBQWYsRUFBa0I7QUFDaEIsV0FBSyxlQUFMLENBQXFCLE1BQXJCLENBQTRCLEtBQTVCLEVBQW1DLENBQW5DO0FBQ0Q7QUFDRixHQXRFa0I7O0FBd0VuQix3QkFBc0IsVUFBVSxVQUFWLEVBQXNCLGFBQXRCLEVBQXFDO0FBQ3pELFFBQUksS0FBSyxpQkFBTCxDQUF1QixVQUF2QixDQUFKLEVBQXdDO0FBQ3RDLFVBQUksTUFBTSxLQUFLLGVBQUwsQ0FBcUIsT0FBckIsQ0FBNkIsVUFBN0IsQ0FBVjtBQUNBLFdBQUssZUFBTCxDQUFxQixNQUFyQixDQUE0QixHQUE1QixFQUFpQyxDQUFqQyxFQUFvQyxhQUFwQztBQUNEO0FBQ0YsR0E3RWtCOztBQStFbkIsbUJBQWlCLFVBQVUsYUFBVixFQUF5QjtBQUN4QyxRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsUUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxRQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNBLFFBQUksV0FBVyxhQUFhLEtBQUssUUFBbEIsRUFBNEIsYUFBNUIsRUFBMkMsRUFBQyxDQUFELEVBQUksUUFBSixFQUFjLE1BQWQsRUFBM0MsQ0FBZjtBQUNBLFFBQUksS0FBSyxRQUFULEVBQW1CO0FBQ2pCLGFBQU8sUUFBUDtBQUNELEtBRkQsTUFFTyxJQUFJLFNBQVMsTUFBVCxHQUFrQixDQUF0QixFQUF5QjtBQUM5QixhQUFPLENBQUMsU0FBUyxDQUFULENBQUQsQ0FBUDtBQUNELEtBRk0sTUFFQTtBQUNMLGFBQU8sRUFBUDtBQUNEO0FBQ0YsR0EzRmtCOztBQTZGbkIsV0FBUyxVQUFVLGFBQVYsRUFBeUI7QUFDaEMsUUFBSSxJQUFJLE9BQU8sUUFBUCxFQUFSO0FBQ0EsUUFBSSxVQUFVLEtBQUssS0FBTCxJQUFjLENBQTVCOztBQUVGO0FBQ0UsUUFBSSxZQUFZLENBQWhCLEVBQW1CO0FBQ2pCLFVBQUksZUFBZSxLQUFLLFFBQUwsQ0FBYyxhQUFkLENBQW5CO0FBQ0EsbUJBQWEsSUFBYixDQUFrQixVQUFVLElBQVYsRUFBZ0I7QUFDaEMsVUFBRSxPQUFGLENBQVUsSUFBVjtBQUNELE9BRkQ7QUFHRCxLQUxELE1BS087QUFDTCxpQkFBVyxZQUFZO0FBQ3JCLFlBQUksZUFBZSxLQUFLLFFBQUwsQ0FBYyxhQUFkLENBQW5CO0FBQ0EscUJBQWEsSUFBYixDQUFrQixVQUFVLElBQVYsRUFBZ0I7QUFDaEMsWUFBRSxPQUFGLENBQVUsSUFBVjtBQUNELFNBRkQ7QUFHRCxPQUxVLENBS1QsSUFMUyxDQUtKLElBTEksQ0FBWCxFQUtjLE9BTGQ7QUFNRDs7QUFFRCxXQUFPLEVBQUUsT0FBRixFQUFQO0FBQ0Q7QUFqSGtCLENBQXJCOztBQW9IQSxPQUFPLE9BQVAsR0FBaUIsUUFBakI7OztBQ2pKQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiOztBQUVBLElBQUksa0JBQWtCOztBQUVwQiw0QkFBMEIsWUFBWTtBQUNwQyxXQUFPLElBQVA7QUFDRCxHQUptQjs7QUFNcEIseUJBQXVCLFlBQVk7QUFDakMsV0FBTyxJQUFQO0FBQ0QsR0FSbUI7O0FBVXBCLDhCQUE0QixZQUFZO0FBQ3RDLFdBQU8sSUFBUDtBQUNELEdBWm1COztBQWNwQixvQkFBa0IsWUFBWTtBQUM1QixXQUFPLEtBQVA7QUFDRCxHQWhCbUI7QUFpQnBCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sSUFBUDtBQUNELEdBbkJtQjtBQW9CcEIsWUFBVSxVQUFVLGFBQVYsRUFBeUI7QUFDakMsUUFBSSxNQUFNLE9BQU8sUUFBUCxFQUFWOztBQUVBLFFBQUksV0FBVyxLQUFLLGVBQUwsQ0FBcUIsYUFBckIsQ0FBZjtBQUNBLFFBQUksT0FBSixDQUFZLEtBQUssQ0FBTCxDQUFPLFNBQVAsQ0FBaUIsUUFBakIsQ0FBWjs7QUFFQSxXQUFPLElBQUksT0FBSixFQUFQO0FBQ0QsR0EzQm1COztBQTZCcEIsa0JBQWdCLFlBQVk7QUFDMUIsV0FBTyxFQUFQO0FBQ0QsR0EvQm1COztBQWlDcEIsZUFBYSxZQUFZO0FBQ3ZCLFdBQU8sQ0FBQyxVQUFELEVBQWEsT0FBYixDQUFQO0FBQ0Q7QUFuQ21CLENBQXRCOztBQXNDQSxPQUFPLE9BQVAsR0FBaUIsZUFBakI7OztBQ3hDQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiO0FBQ0EsSUFBSSwyQkFBMkI7QUFDN0IsNEJBQTBCLFlBQVk7QUFDcEMsV0FBTyxJQUFQO0FBQ0QsR0FINEI7O0FBSzdCLHlCQUF1QixZQUFZO0FBQ2pDLFdBQU8sS0FBUDtBQUNELEdBUDRCOztBQVM3Qiw4QkFBNEIsWUFBWTtBQUN0QyxXQUFPLEtBQVA7QUFDRCxHQVg0Qjs7QUFhN0Isb0JBQWtCLFlBQVk7QUFDNUIsV0FBTyxLQUFQO0FBQ0QsR0FmNEI7QUFnQjdCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sS0FBUDtBQUNELEdBbEI0QjtBQW1CN0IsWUFBVSxVQUFVLGFBQVYsRUFBeUI7QUFDakMsUUFBSSxNQUFNLE9BQU8sUUFBUCxFQUFWO0FBQ0EsUUFBSSxPQUFPLElBQVg7QUFDQSxRQUFJLFdBQVcsS0FBSyxlQUFMLENBQXFCLGFBQXJCLENBQWY7O0FBRUEsUUFBSSxTQUFTLEVBQWI7QUFDQSxTQUFLLENBQUwsQ0FBTyxRQUFQLEVBQWlCLElBQWpCLENBQXNCLFVBQVUsQ0FBVixFQUFhLE9BQWIsRUFBc0I7QUFDMUMsVUFBSSxPQUFPLEVBQVg7O0FBRUEsV0FBSyxLQUFLLEVBQVYsSUFBZ0IsS0FBSyxDQUFMLENBQU8sT0FBUCxFQUFnQixJQUFoQixDQUFxQixLQUFLLGdCQUExQixDQUFoQjtBQUNBLGFBQU8sSUFBUCxDQUFZLElBQVo7QUFDRCxLQUxxQixDQUtwQixJQUxvQixDQUtmLElBTGUsQ0FBdEI7O0FBT0EsUUFBSSxLQUFLLFFBQUwsS0FBa0IsS0FBbEIsSUFBMkIsU0FBUyxNQUFULEtBQW9CLENBQW5ELEVBQXNEO0FBQ3BELFVBQUksT0FBTyxFQUFYO0FBQ0EsV0FBSyxLQUFLLEVBQUwsR0FBVSxNQUFmLElBQXlCLElBQXpCO0FBQ0EsYUFBTyxJQUFQLENBQVksSUFBWjtBQUNEO0FBQ0QsUUFBSSxPQUFKLENBQVksTUFBWjs7QUFFQSxXQUFPLElBQUksT0FBSixFQUFQO0FBQ0QsR0F4QzRCOztBQTBDN0Isa0JBQWdCLFlBQVk7QUFDMUIsV0FBTyxDQUFDLEtBQUssRUFBTixDQUFQO0FBQ0QsR0E1QzRCOztBQThDN0IsZUFBYSxZQUFZO0FBQ3ZCLFdBQU8sQ0FBQyxVQUFELEVBQWEsa0JBQWIsRUFBaUMsT0FBakMsQ0FBUDtBQUNEO0FBaEQ0QixDQUEvQjs7QUFtREEsT0FBTyxPQUFQLEdBQWlCLHdCQUFqQjs7O0FDcERBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQSxJQUFJLG9CQUFvQixRQUFRLHdCQUFSLENBQXhCO0FBQ0EsSUFBSSxlQUFlLFFBQVEsbUJBQVIsQ0FBbkI7QUFDQSxJQUFJLGNBQWMsUUFBUSxjQUFSLEVBQXdCLFdBQTFDO0FBQ0EsSUFBSSx1QkFBdUI7O0FBRXpCLDRCQUEwQixZQUFZO0FBQ3BDLFdBQU8sSUFBUDtBQUNELEdBSndCOztBQU16Qix5QkFBdUIsWUFBWTtBQUNqQyxXQUFPLElBQVA7QUFDRCxHQVJ3Qjs7QUFVekIsOEJBQTRCLFlBQVk7QUFDdEMsV0FBTyxJQUFQO0FBQ0QsR0Fad0I7O0FBY3pCLG9CQUFrQixZQUFZO0FBQzVCLFdBQU8sS0FBUDtBQUNELEdBaEJ3QjtBQWlCekIsc0JBQW9CLFlBQVk7QUFDOUIsV0FBTyxJQUFQO0FBQ0QsR0FuQndCOztBQXFCekIsb0JBQWtCLFVBQVUsYUFBVixFQUF5QjtBQUN6QyxRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsUUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxRQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNBLFFBQUksZ0JBQWdCLGFBQWEsS0FBSyxvQkFBbEIsRUFBd0MsYUFBeEMsRUFBdUQsRUFBQyxDQUFELEVBQUksUUFBSixFQUFjLE1BQWQsRUFBdkQsQ0FBcEI7QUFDQSxXQUFPLGFBQVA7QUFDRCxHQTNCd0I7O0FBNkIxQjs7OztBQUlDLG1CQUFpQixVQUFVLE9BQVYsRUFBbUI7QUFDbEMsV0FBTyxLQUFLLENBQUwsQ0FBTyxPQUFQLEVBQWdCLE9BQWhCLENBQXdCLE1BQXhCLEVBQWdDLE1BQWhDLEtBQTJDLENBQWxEO0FBQ0QsR0FuQ3dCOztBQXFDekIsc0JBQW9CLFVBQVUsWUFBVixFQUF3QjtBQUMxQyxRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksS0FBSyxJQUFJLFdBQUosQ0FBZ0I7QUFDdkIsZ0NBQTBCLEtBREg7QUFFdkIsY0FBUSxLQUFLLENBQUwsQ0FBTyxNQUFQLEVBQWUsQ0FBZixDQUZlO0FBR3ZCLDZCQUF1QjtBQUhBLEtBQWhCLENBQVQ7QUFLQSxRQUFJLGNBQWMsR0FBRyxjQUFILENBQWtCLENBQUMsWUFBRCxDQUFsQixDQUFsQjs7QUFFQSxhQUFTLGdCQUFULENBQTBCLFdBQTFCLEVBQXVDLENBQXZDLEVBQTBDLEtBQTFDO0FBQ0o7Ozs7Ozs7OztBQVNHLEdBeER3Qjs7QUEwRHpCLGlDQUErQixZQUFZO0FBQ3pDLFFBQUksS0FBSywwQkFBTCxLQUFvQyxTQUF4QyxFQUFtRDtBQUNqRCxhQUFPLFlBQVA7QUFDRCxLQUZELE1BRU87QUFDTCxhQUFPLEtBQUssMEJBQVo7QUFDRDtBQUNGLEdBaEV3Qjs7QUFrRXpCLFlBQVUsVUFBVSxhQUFWLEVBQXlCO0FBQ2pDLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDQSxRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0EsUUFBSSxRQUFRLFNBQVMsS0FBSyxLQUFkLEtBQXdCLENBQXBDO0FBQ0EsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EsUUFBSSxnQkFBZ0IsSUFBSSxpQkFBSixDQUFzQixZQUF0QixFQUFvQyxFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUFwQyxDQUFwQjtBQUNBLFFBQUksZ0JBQWdCLEtBQUssZ0JBQUwsQ0FBc0IsYUFBdEIsQ0FBcEI7QUFDQSxRQUFJLHVCQUF1QixJQUFJLGlCQUFKLENBQXNCLEtBQUssNkJBQUwsRUFBdEIsRUFBNEQsRUFBQyxDQUFELEVBQUksUUFBSixFQUFjLE1BQWQsRUFBNUQsQ0FBM0I7O0FBRUY7QUFDRSxRQUFJLFdBQVcsS0FBSyxlQUFMLENBQXFCLGFBQXJCLENBQWY7QUFDQSxhQUFTLE9BQVQsQ0FBaUIsY0FBYyxJQUFkLENBQW1CLElBQW5CLENBQXdCLGFBQXhCLENBQWpCOztBQUVGO0FBQ0UsUUFBSSxLQUFLLHNCQUFULEVBQWlDO0FBQy9CLHNCQUFnQixJQUFJLGlCQUFKLENBQXNCLFlBQXRCLEVBQW9DLEVBQUMsQ0FBRCxFQUFJLFFBQUosRUFBYyxNQUFkLEVBQXBDLENBQWhCO0FBQ0Q7O0FBRUg7QUFDRSxRQUFJLGNBQWMsTUFBZCxLQUF5QixDQUE3QixFQUFnQztBQUM5Qix1QkFBaUIsT0FBakIsQ0FBeUIsYUFBekI7QUFDQSxhQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0Q7O0FBRUg7QUFDRSxRQUFJLHNCQUFzQixjQUFjLENBQWQsQ0FBMUI7QUFDQSxTQUFLLGtCQUFMLENBQXdCLG1CQUF4QjtBQUNBLFFBQUksdUJBQXdCLElBQUksSUFBSixFQUFELENBQWEsT0FBYixLQUF5QixLQUFwRDs7QUFFRjtBQUNFLFFBQUksV0FBVyxZQUFZLFlBQVk7QUFDeEM7QUFDRyxVQUFJLG1CQUFtQixLQUFLLGdCQUFMLENBQXNCLGFBQXRCLENBQXZCO0FBQ0Esc0JBQWdCLEVBQWhCO0FBQ0EsdUJBQWlCLE9BQWpCLENBQXlCLFVBQVUsT0FBVixFQUFtQjtBQUMxQyxZQUFJLENBQUMscUJBQXFCLE9BQXJCLENBQTZCLE9BQTdCLENBQUwsRUFBNEM7QUFDMUMsd0JBQWMsSUFBZCxDQUFtQixPQUFuQjtBQUNEO0FBQ0YsT0FKRDs7QUFNQSxVQUFJLE1BQU8sSUFBSSxJQUFKLEVBQUQsQ0FBYSxPQUFiLEVBQVY7QUFDSDtBQUNHLFVBQUksTUFBTSxvQkFBVixFQUFnQztBQUNsQztBQUNJO0FBQ0Q7O0FBRUo7QUFDRyxVQUFJLFdBQVcsS0FBSyxlQUFMLENBQXFCLGFBQXJCLENBQWY7QUFDQSxVQUFJLGlCQUFpQixLQUFyQjtBQUNBLGVBQVMsT0FBVCxDQUFpQixVQUFVLE9BQVYsRUFBbUI7QUFDbEMsWUFBSSxRQUFRLGNBQWMsSUFBZCxDQUFtQixPQUFuQixDQUFaO0FBQ0EsWUFBSSxLQUFKLEVBQVc7QUFDVCwyQkFBaUIsSUFBakI7QUFDRDtBQUNGLE9BTEQ7QUFNSDs7QUFFQTtBQUNHLFVBQUksQ0FBQyxjQUFMLEVBQXFCO0FBQ25CLDZCQUFxQixJQUFyQixDQUEwQixtQkFBMUI7QUFDRDs7QUFFSjtBQUNBO0FBQ0E7QUFDRyxVQUFJLGNBQWMsTUFBZCxLQUF5QixDQUE3QixFQUFnQztBQUM5QixzQkFBYyxRQUFkO0FBQ0EseUJBQWlCLE9BQWpCLENBQXlCLGFBQXpCO0FBQ0QsT0FIRCxNQUdPO0FBQ1Q7QUFDSSw4QkFBc0IsY0FBYyxDQUFkLENBQXRCO0FBQ0o7QUFDSSxZQUFJLEtBQUssU0FBTCxLQUFtQixXQUF2QixFQUFvQztBQUNsQywrQkFBcUIsSUFBckIsQ0FBMEIsbUJBQTFCO0FBQ0Q7QUFDRCxhQUFLLGtCQUFMLENBQXdCLG1CQUF4QjtBQUNBLCtCQUF1QixNQUFNLEtBQTdCO0FBQ0Q7QUFDRixLQWpEMEIsQ0FpRHpCLElBakR5QixDQWlEcEIsSUFqRG9CLENBQVosRUFpREQsRUFqREMsQ0FBZjs7QUFtREEsV0FBTyxpQkFBaUIsT0FBakIsRUFBUDtBQUNELEdBckp3Qjs7QUF1SnpCLGtCQUFnQixZQUFZO0FBQzFCLFdBQU8sRUFBUDtBQUNELEdBekp3Qjs7QUEySnpCLGVBQWEsWUFBWTtBQUN2QixXQUFPLENBQUMsVUFBRCxFQUFhLE9BQWIsRUFBc0Isc0JBQXRCLEVBQThDLFdBQTlDLEVBQTJELHdCQUEzRCxFQUFxRiw0QkFBckYsQ0FBUDtBQUNEO0FBN0p3QixDQUEzQjs7QUFnS0EsT0FBTyxPQUFQLEdBQWlCLG9CQUFqQjs7O0FDcEtBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQSxJQUFJLHdCQUF3Qjs7QUFFMUIsNEJBQTBCLFlBQVk7QUFDcEMsV0FBTyxJQUFQO0FBQ0QsR0FKeUI7O0FBTTFCLHlCQUF1QixZQUFZO0FBQ2pDLFdBQU8sSUFBUDtBQUNELEdBUnlCOztBQVUxQiw4QkFBNEIsWUFBWTtBQUN0QyxXQUFPLElBQVA7QUFDRCxHQVp5Qjs7QUFjMUIsb0JBQWtCLFlBQVk7QUFDNUIsV0FBTyxLQUFQO0FBQ0QsR0FoQnlCO0FBaUIxQixzQkFBb0IsWUFBWTtBQUM5QixXQUFPLElBQVA7QUFDRCxHQW5CeUI7QUFvQjFCLGtCQUFnQixZQUFZO0FBQzFCLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsV0FBTyxRQUFQLENBQWdCLENBQWhCLEVBQW1CLFNBQVMsSUFBVCxDQUFjLFlBQWpDO0FBQ0QsR0F2QnlCO0FBd0IxQixZQUFVLFVBQVUsYUFBVixFQUF5QjtBQUNqQyxRQUFJLFFBQVEsU0FBUyxLQUFLLEtBQWQsS0FBd0IsQ0FBcEM7QUFDQSxRQUFJLG1CQUFtQixPQUFPLFFBQVAsRUFBdkI7QUFDQSxRQUFJLGdCQUFnQixFQUFwQjs7QUFFRjtBQUNFLFNBQUssY0FBTDtBQUNBLFFBQUksdUJBQXdCLElBQUksSUFBSixFQUFELENBQWEsT0FBYixLQUF5QixLQUFwRDs7QUFFRjtBQUNFLFFBQUksV0FBVyxZQUFZLFlBQVk7QUFDckMsVUFBSSxNQUFPLElBQUksSUFBSixFQUFELENBQWEsT0FBYixFQUFWO0FBQ0g7QUFDRyxVQUFJLE1BQU0sb0JBQVYsRUFBZ0M7QUFDOUI7QUFDRDs7QUFFRCxVQUFJLFdBQVcsS0FBSyxlQUFMLENBQXFCLGFBQXJCLENBQWY7QUFDSDtBQUNHLFVBQUksU0FBUyxNQUFULEtBQW9CLGNBQWMsTUFBdEMsRUFBOEM7QUFDNUMsc0JBQWMsUUFBZDtBQUNBLHlCQUFpQixPQUFqQixDQUF5QixLQUFLLENBQUwsQ0FBTyxTQUFQLENBQWlCLFFBQWpCLENBQXpCO0FBQ0QsT0FIRCxNQUdPO0FBQ1Q7QUFDSSx3QkFBZ0IsUUFBaEI7QUFDQSxhQUFLLGNBQUw7QUFDQSwrQkFBdUIsTUFBTSxLQUE3QjtBQUNEO0FBQ0YsS0FsQjBCLENBa0J6QixJQWxCeUIsQ0FrQnBCLElBbEJvQixDQUFaLEVBa0JELEVBbEJDLENBQWY7O0FBb0JBLFdBQU8saUJBQWlCLE9BQWpCLEVBQVA7QUFDRCxHQXZEeUI7O0FBeUQxQixrQkFBZ0IsWUFBWTtBQUMxQixXQUFPLEVBQVA7QUFDRCxHQTNEeUI7O0FBNkQxQixlQUFhLFlBQVk7QUFDdkIsV0FBTyxDQUFDLFVBQUQsRUFBYSxPQUFiLENBQVA7QUFDRDtBQS9EeUIsQ0FBNUI7O0FBa0VBLE9BQU8sT0FBUCxHQUFpQixxQkFBakI7OztBQ25FQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiO0FBQ0EsSUFBSSxnQkFBZ0I7O0FBRWxCLDRCQUEwQixZQUFZO0FBQ3BDLFdBQU8sS0FBUDtBQUNELEdBSmlCOztBQU1sQix5QkFBdUIsWUFBWTtBQUNqQyxXQUFPLEtBQVA7QUFDRCxHQVJpQjs7QUFVbEIsOEJBQTRCLFlBQVk7QUFDdEMsV0FBTyxLQUFQO0FBQ0QsR0FaaUI7O0FBY2xCLG9CQUFrQixZQUFZO0FBQzVCLFdBQU8sS0FBUDtBQUNELEdBaEJpQjtBQWlCbEIsc0JBQW9CLFlBQVk7QUFDOUIsV0FBTyxLQUFQO0FBQ0QsR0FuQmlCO0FBb0JsQixZQUFVLFVBQVUsYUFBVixFQUF5QjtBQUNqQyxRQUFJLE1BQU0sT0FBTyxRQUFQLEVBQVY7QUFDQSxRQUFJLE9BQU8sSUFBWDtBQUNGO0FBQ0UsUUFBSSxXQUFXLEtBQUssQ0FBTCxDQUFPLEtBQUssUUFBWixFQUFzQixhQUF0QixDQUFmOztBQUVBLFFBQUksVUFBVSxFQUFkO0FBQ0EsU0FBSyxDQUFMLENBQU8sUUFBUCxFQUFpQixJQUFqQixDQUFzQixVQUFVLENBQVYsRUFBYSxPQUFiLEVBQXNCO0FBQzFDLFVBQUksT0FBTyxFQUFYOztBQUVBLFdBQUssS0FBSyxFQUFWLElBQWdCLEtBQUssQ0FBTCxDQUFPLE9BQVAsRUFBZ0IsSUFBaEIsRUFBaEI7O0FBRUEsVUFBSSxLQUFLLGdCQUFULEVBQTJCO0FBQ3pCLGFBQUssS0FBSyxFQUFMLEdBQVUsR0FBVixHQUFnQixLQUFLLGdCQUExQixJQUE4QyxLQUFLLENBQUwsQ0FBTyxPQUFQLEVBQWdCLElBQWhCLENBQXFCLEtBQUssZ0JBQTFCLENBQTlDO0FBQ0Q7O0FBRUQsY0FBUSxJQUFSLENBQWEsSUFBYjtBQUNELEtBVnFCLENBVXBCLElBVm9CLENBVWYsSUFWZSxDQUF0Qjs7QUFZQSxRQUFJLFNBQVMsRUFBYjtBQUNBLFdBQU8sS0FBSyxFQUFaLElBQWtCLE9BQWxCOztBQUVBLFFBQUksT0FBSixDQUFZLENBQUMsTUFBRCxDQUFaO0FBQ0EsV0FBTyxJQUFJLE9BQUosRUFBUDtBQUNELEdBNUNpQjs7QUE4Q2xCLGtCQUFnQixZQUFZO0FBQzFCLFdBQU8sQ0FBQyxLQUFLLEVBQU4sQ0FBUDtBQUNELEdBaERpQjs7QUFrRGxCLGVBQWEsWUFBWTtBQUN2QixXQUFPLENBQUMsT0FBRCxFQUFVLGtCQUFWLENBQVA7QUFDRDtBQXBEaUIsQ0FBcEI7O0FBdURBLE9BQU8sT0FBUCxHQUFpQixhQUFqQjs7O0FDeERBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQSxJQUFJLGVBQWU7O0FBRWpCLDRCQUEwQixZQUFZO0FBQ3BDLFdBQU8sSUFBUDtBQUNELEdBSmdCOztBQU1qQix5QkFBdUIsWUFBWTtBQUNqQyxXQUFPLEtBQVA7QUFDRCxHQVJnQjs7QUFVakIsOEJBQTRCLFlBQVk7QUFDdEMsV0FBTyxLQUFQO0FBQ0QsR0FaZ0I7O0FBY2pCLG9CQUFrQixZQUFZO0FBQzVCLFdBQU8sS0FBUDtBQUNELEdBaEJnQjtBQWlCakIsc0JBQW9CLFlBQVk7QUFDOUIsV0FBTyxLQUFQO0FBQ0QsR0FuQmdCO0FBb0JqQixZQUFVLFVBQVUsYUFBVixFQUF5QjtBQUNqQyxRQUFJLE1BQU0sT0FBTyxRQUFQLEVBQVY7QUFDQSxRQUFJLE9BQU8sSUFBWDtBQUNBLFFBQUksV0FBVyxLQUFLLGVBQUwsQ0FBcUIsYUFBckIsQ0FBZjs7QUFFQSxRQUFJLFNBQVMsRUFBYjtBQUNBLFNBQUssQ0FBTCxDQUFPLFFBQVAsRUFBaUIsSUFBakIsQ0FBc0IsVUFBVSxDQUFWLEVBQWEsT0FBYixFQUFzQjtBQUMxQyxVQUFJLE9BQU8sRUFBWDtBQUNBLFVBQUksT0FBTyxLQUFLLENBQUwsQ0FBTyxPQUFQLEVBQWdCLElBQWhCLEVBQVg7O0FBRUEsVUFBSSxLQUFLLEtBQUwsS0FBZSxTQUFmLElBQTRCLEtBQUssS0FBTCxDQUFXLE1BQTNDLEVBQW1EO0FBQ2pELFlBQUksVUFBVSxLQUFLLEtBQUwsQ0FBVyxJQUFJLE1BQUosQ0FBVyxLQUFLLEtBQWhCLENBQVgsQ0FBZDtBQUNBLFlBQUksWUFBWSxJQUFoQixFQUFzQjtBQUNwQixpQkFBTyxRQUFRLENBQVIsQ0FBUDtBQUNELFNBRkQsTUFFTztBQUNMLGlCQUFPLElBQVA7QUFDRDtBQUNGO0FBQ0QsV0FBSyxLQUFLLEVBQVYsSUFBZ0IsSUFBaEI7O0FBRUEsYUFBTyxJQUFQLENBQVksSUFBWjtBQUNELEtBZnFCLENBZXBCLElBZm9CLENBZWYsSUFmZSxDQUF0Qjs7QUFpQkEsUUFBSSxLQUFLLFFBQUwsS0FBa0IsS0FBbEIsSUFBMkIsU0FBUyxNQUFULEtBQW9CLENBQW5ELEVBQXNEO0FBQ3BELFVBQUksT0FBTyxFQUFYO0FBQ0EsV0FBSyxLQUFLLEVBQVYsSUFBZ0IsSUFBaEI7QUFDQSxhQUFPLElBQVAsQ0FBWSxJQUFaO0FBQ0Q7O0FBRUQsUUFBSSxPQUFKLENBQVksTUFBWjtBQUNBLFdBQU8sSUFBSSxPQUFKLEVBQVA7QUFDRCxHQW5EZ0I7O0FBcURqQixrQkFBZ0IsWUFBWTtBQUMxQixXQUFPLENBQUMsS0FBSyxFQUFOLENBQVA7QUFDRCxHQXZEZ0I7O0FBeURqQixlQUFhLFlBQVk7QUFDdkIsV0FBTyxDQUFDLFVBQUQsRUFBYSxPQUFiLEVBQXNCLE9BQXRCLENBQVA7QUFDRDtBQTNEZ0IsQ0FBbkI7O0FBOERBLE9BQU8sT0FBUCxHQUFpQixZQUFqQjs7O0FDL0RBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQSxJQUFJLHVCQUF1QixRQUFRLDBDQUFSLENBQTNCO0FBQ0EsSUFBSSxTQUFTLFFBQVEscUJBQVIsQ0FBYjtBQUNBLElBQUksZ0JBQWdCO0FBQ2xCLDRCQUEwQixZQUFZO0FBQ3BDLFdBQU8sSUFBUDtBQUNELEdBSGlCOztBQUtsQix5QkFBdUIsWUFBWTtBQUNqQyxXQUFPLEtBQVA7QUFDRCxHQVBpQjs7QUFTbEIsOEJBQTRCLFlBQVk7QUFDdEMsV0FBTyxLQUFQO0FBQ0QsR0FYaUI7O0FBYWxCLG9CQUFrQixZQUFZO0FBQzVCLFdBQU8sS0FBUDtBQUNELEdBZmlCO0FBZ0JsQixzQkFBb0IsWUFBWTtBQUM5QixXQUFPLEtBQVA7QUFDRCxHQWxCaUI7QUFtQmxCLFlBQVUsVUFBVSxhQUFWLEVBQXlCO0FBQ2pDLFFBQUksTUFBTSxPQUFPLFFBQVAsRUFBVjs7QUFFQSxRQUFJLFdBQVcsS0FBSyxlQUFMLENBQXFCLGFBQXJCLENBQWY7O0FBRUEsUUFBSSxvQkFBb0IsRUFBeEI7QUFDQSxTQUFLLENBQUwsQ0FBTyxRQUFQLEVBQWlCLElBQWpCLENBQXNCLFVBQVUsQ0FBVixFQUFhLE9BQWIsRUFBc0I7QUFDMUMsd0JBQWtCLElBQWxCLENBQXVCLFlBQVk7QUFDakMsWUFBSSxlQUFlLE9BQU8sUUFBUCxFQUFuQjs7QUFFQSxZQUFJLE9BQU8sRUFBWDtBQUNBLGFBQUssS0FBSyxFQUFMLEdBQVUsTUFBZixJQUF5QixRQUFRLEdBQWpDOztBQUVKO0FBQ0ksWUFBSSxDQUFDLEtBQUssYUFBVixFQUF5QjtBQUN2Qix1QkFBYSxPQUFiLENBQXFCLElBQXJCO0FBQ0QsU0FGRCxNQUVPO0FBQ0wsY0FBSSxzQkFBc0IsS0FBSyxtQkFBTCxDQUF5QixRQUFRLEdBQWpDLENBQTFCOztBQUVBLDhCQUFvQixJQUFwQixDQUF5QixVQUFVLGFBQVYsRUFBeUI7QUFDaEQsaUJBQUssa0JBQWtCLEtBQUssRUFBNUIsSUFBa0MsY0FBYyxXQUFoRDtBQUNBLGlCQUFLLG9CQUFvQixLQUFLLEVBQTlCLElBQW9DLGNBQWMsUUFBbEQ7O0FBRUEseUJBQWEsT0FBYixDQUFxQixJQUFyQjtBQUNELFdBTHdCLENBS3ZCLElBTHVCLENBS2xCLElBTGtCLENBQXpCLEVBS2MsSUFMZCxDQUttQixZQUFZO0FBQ25DO0FBQ0E7QUFDTSx5QkFBYSxPQUFiLENBQXFCLElBQXJCO0FBQ0QsV0FURDtBQVVEOztBQUVELGVBQU8sYUFBYSxPQUFiLEVBQVA7QUFDRCxPQXpCc0IsQ0F5QnJCLElBekJxQixDQXlCaEIsSUF6QmdCLENBQXZCO0FBMEJELEtBM0JxQixDQTJCcEIsSUEzQm9CLENBMkJmLElBM0JlLENBQXRCOztBQTZCQSx5QkFBcUIsaUJBQXJCLEVBQXdDLElBQXhDLENBQTZDLFVBQVUsV0FBVixFQUF1QjtBQUNsRSxVQUFJLEtBQUssUUFBTCxLQUFrQixLQUFsQixJQUEyQixTQUFTLE1BQVQsS0FBb0IsQ0FBbkQsRUFBc0Q7QUFDcEQsWUFBSSxPQUFPLEVBQVg7QUFDQSxhQUFLLEtBQUssRUFBTCxHQUFVLE1BQWYsSUFBeUIsSUFBekI7QUFDQSxvQkFBWSxJQUFaLENBQWlCLElBQWpCO0FBQ0Q7O0FBRUQsVUFBSSxPQUFKLENBQVksV0FBWjtBQUNELEtBUkQ7O0FBVUEsV0FBTyxJQUFJLE9BQUosRUFBUDtBQUNELEdBakVpQjs7QUFtRWxCLHNCQUFvQixVQUFVLEdBQVYsRUFBZTtBQUNqQyxRQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNBLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2QjtBQUNBLFFBQUksTUFBTSxJQUFJLE9BQU8sY0FBWCxFQUFWO0FBQ0EsUUFBSSxrQkFBSixHQUF5QixZQUFZO0FBQ25DLFVBQUksS0FBSyxVQUFMLElBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLFlBQUksS0FBSyxNQUFMLElBQWUsR0FBbkIsRUFBd0I7QUFDdEIsY0FBSSxPQUFPLEtBQUssUUFBaEI7QUFDQSwyQkFBaUIsT0FBakIsQ0FBeUIsSUFBekI7QUFDRCxTQUhELE1BR087QUFDTCwyQkFBaUIsTUFBakIsQ0FBd0IsSUFBSSxVQUE1QjtBQUNEO0FBQ0Y7QUFDRixLQVREO0FBVUEsUUFBSSxJQUFKLENBQVMsS0FBVCxFQUFnQixHQUFoQjtBQUNBLFFBQUksWUFBSixHQUFtQixNQUFuQjtBQUNBLFFBQUksSUFBSjs7QUFFQSxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0QsR0F0RmlCOztBQXdGbEIsdUJBQXFCLFVBQVUsR0FBVixFQUFlO0FBQ2xDLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2QjtBQUNBLFFBQUksbUJBQW1CLEtBQUssa0JBQUwsQ0FBd0IsR0FBeEIsQ0FBdkI7QUFDQSxxQkFBaUIsSUFBakIsQ0FBc0IsVUFBVSxJQUFWLEVBQWdCO0FBQ3BDLFVBQUksV0FBVyxLQUFLLElBQXBCO0FBQ0EsVUFBSSxlQUFlLE9BQU8sWUFBUCxDQUFvQixJQUFwQixDQUFuQjtBQUNBLG1CQUFhLElBQWIsQ0FBa0IsVUFBVSxXQUFWLEVBQXVCO0FBQ3ZDLHlCQUFpQixPQUFqQixDQUF5QjtBQUN2QixvQkFBVSxRQURhO0FBRXZCLHVCQUFhO0FBRlUsU0FBekI7QUFJRCxPQUxEO0FBTUQsS0FURCxFQVNHLElBVEgsQ0FTUSxpQkFBaUIsSUFUekI7QUFVQSxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0QsR0F0R2lCOztBQXdHbEIsa0JBQWdCLFlBQVk7QUFDMUIsV0FBTyxDQUFDLEtBQUssRUFBTCxHQUFVLE1BQVgsQ0FBUDtBQUNELEdBMUdpQjs7QUE0R2xCLGVBQWEsWUFBWTtBQUN2QixXQUFPLENBQUMsVUFBRCxFQUFhLE9BQWIsRUFBc0IsZUFBdEIsQ0FBUDtBQUNELEdBOUdpQjs7QUFnSGxCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sS0FBUDtBQUNEO0FBbEhpQixDQUFwQjs7QUFxSEEsT0FBTyxPQUFQLEdBQWlCLGFBQWpCOzs7QUN4SEEsSUFBSSxTQUFTLFFBQVEsaUJBQVIsQ0FBYjtBQUNBLElBQUksdUJBQXVCLFFBQVEsMENBQVIsQ0FBM0I7O0FBRUEsSUFBSSxlQUFlO0FBQ2pCLDRCQUEwQixZQUFZO0FBQ3BDLFdBQU8sSUFBUDtBQUNELEdBSGdCOztBQUtqQix5QkFBdUIsWUFBWTtBQUNqQyxXQUFPLElBQVA7QUFDRCxHQVBnQjs7QUFTakIsOEJBQTRCLFlBQVk7QUFDdEMsV0FBTyxLQUFQO0FBQ0QsR0FYZ0I7O0FBYWpCLG9CQUFrQixZQUFZO0FBQzVCLFdBQU8sSUFBUDtBQUNELEdBZmdCO0FBZ0JqQixzQkFBb0IsWUFBWTtBQUM5QixXQUFPLEtBQVA7QUFDRCxHQWxCZ0I7QUFtQmpCLFlBQVUsVUFBVSxhQUFWLEVBQXlCO0FBQ2pDLFFBQUksV0FBVyxLQUFLLGVBQUwsQ0FBcUIsYUFBckIsQ0FBZjtBQUNBLFFBQUksT0FBTyxJQUFYOztBQUVBLFFBQUksTUFBTSxPQUFPLFFBQVAsRUFBVjs7QUFFRjtBQUNFLFFBQUksS0FBSyxRQUFMLEtBQWtCLEtBQWxCLElBQTJCLFNBQVMsTUFBVCxLQUFvQixDQUFuRCxFQUFzRDtBQUNwRCxVQUFJLE9BQU8sRUFBWDtBQUNBLFdBQUssS0FBSyxFQUFWLElBQWdCLElBQWhCO0FBQ0EsVUFBSSxPQUFKLENBQVksQ0FBQyxJQUFELENBQVo7QUFDQSxhQUFPLEdBQVA7QUFDRDs7QUFFSDtBQUNFLFFBQUksOEJBQThCLEVBQWxDO0FBQ0EsU0FBSyxDQUFMLENBQU8sUUFBUCxFQUFpQixJQUFqQixDQUFzQixVQUFVLENBQVYsRUFBYSxPQUFiLEVBQXNCO0FBQzFDLGtDQUE0QixJQUE1QixDQUFpQyxVQUFVLE9BQVYsRUFBbUI7QUFDbEQsWUFBSSxlQUFlLE9BQU8sUUFBUCxFQUFuQjs7QUFFQSxZQUFJLE9BQU8sRUFBWDtBQUNBLGFBQUssS0FBSyxFQUFWLElBQWdCLEtBQUssQ0FBTCxDQUFPLE9BQVAsRUFBZ0IsSUFBaEIsRUFBaEI7QUFDQSxhQUFLLGlCQUFMLEdBQXlCLEtBQUssRUFBOUI7QUFDQSxhQUFLLEtBQUssRUFBTCxHQUFVLE9BQWYsSUFBMEIsUUFBUSxJQUFsQztBQUNBLGFBQUssT0FBTCxHQUFlLFFBQVEsSUFBdkI7QUFDQSxxQkFBYSxPQUFiLENBQXFCLElBQXJCOztBQUVBLGVBQU8sWUFBUDtBQUNELE9BWGdDLENBVy9CLElBWCtCLENBVzFCLElBWDBCLEVBV3BCLE9BWG9CLENBQWpDO0FBWUQsS0FicUIsQ0FhcEIsSUFib0IsQ0FhZixJQWJlLENBQXRCOztBQWVBLHlCQUFxQiwyQkFBckIsRUFBa0QsSUFBbEQsQ0FBdUQsVUFBVSxTQUFWLEVBQXFCO0FBQzFFLFVBQUksU0FBUyxFQUFiO0FBQ0EsZ0JBQVUsT0FBVixDQUFrQixVQUFVLFVBQVYsRUFBc0I7QUFDdEMsZUFBTyxJQUFQLENBQVksVUFBWjtBQUNELE9BRkQ7QUFHQSxVQUFJLE9BQUosQ0FBWSxNQUFaO0FBQ0QsS0FORDs7QUFRQSxXQUFPLElBQUksT0FBSixFQUFQO0FBQ0QsR0EzRGdCOztBQTZEakIsa0JBQWdCLFlBQVk7QUFDMUIsV0FBTyxDQUFDLEtBQUssRUFBTixFQUFVLEtBQUssRUFBTCxHQUFVLE9BQXBCLENBQVA7QUFDRCxHQS9EZ0I7O0FBaUVqQixlQUFhLFlBQVk7QUFDdkIsV0FBTyxDQUFDLFVBQUQsRUFBYSxPQUFiLENBQVA7QUFDRCxHQW5FZ0I7O0FBcUVqQixzQkFBb0IsWUFBWTtBQUM5QixXQUFPLEdBQVA7QUFDRDtBQXZFZ0IsQ0FBbkI7O0FBMEVBLE9BQU8sT0FBUCxHQUFpQixZQUFqQjs7O0FDN0VBLElBQUksdUJBQXVCLFFBQVEsMENBQVIsQ0FBM0I7QUFDQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiO0FBQ0EsSUFBSSxjQUFjLFFBQVEsY0FBUixFQUF3QixXQUExQztBQUNBLElBQUksb0JBQW9CO0FBQ3RCLDRCQUEwQixZQUFZO0FBQ3BDLFdBQU8sSUFBUDtBQUNELEdBSHFCOztBQUt0Qix5QkFBdUIsWUFBWTtBQUNqQyxXQUFPLElBQVA7QUFDRCxHQVBxQjs7QUFTdEIsOEJBQTRCLFlBQVk7QUFDdEMsV0FBTyxLQUFQO0FBQ0QsR0FYcUI7O0FBYXRCLG9CQUFrQixZQUFZO0FBQzVCLFdBQU8sSUFBUDtBQUNELEdBZnFCO0FBZ0J0QixzQkFBb0IsWUFBWTtBQUM5QixXQUFPLEtBQVA7QUFDRCxHQWxCcUI7QUFtQnRCLFlBQVUsVUFBVSxhQUFWLEVBQXlCO0FBQ2pDLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDSixRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0ksUUFBSSxXQUFXLEtBQUssZUFBTCxDQUFxQixhQUFyQixDQUFmOztBQUVBLFFBQUksTUFBTSxPQUFPLFFBQVAsRUFBVjs7QUFFRjtBQUNFLFFBQUksS0FBSyxRQUFMLEtBQWtCLEtBQWxCLElBQTJCLFNBQVMsTUFBVCxLQUFvQixDQUFuRCxFQUFzRDtBQUNwRCxVQUFJLE9BQU8sRUFBWDtBQUNBLFdBQUssS0FBSyxFQUFWLElBQWdCLElBQWhCO0FBQ0EsVUFBSSxPQUFKLENBQVksQ0FBQyxJQUFELENBQVo7QUFDQSxhQUFPLEdBQVA7QUFDRDs7QUFFSDtBQUNFLFFBQUksOEJBQThCLEVBQWxDO0FBQ0EsTUFBRSxRQUFGLEVBQVksSUFBWixDQUFpQixVQUFVLENBQVYsRUFBYSxPQUFiLEVBQXNCO0FBQ3JDLGtDQUE0QixJQUE1QixDQUFpQyxVQUFVLE9BQVYsRUFBbUI7QUFDbEQsWUFBSSxlQUFlLE9BQU8sUUFBUCxFQUFuQjs7QUFFQSxZQUFJLE9BQU8sRUFBWDtBQUNBLGFBQUssS0FBSyxFQUFWLElBQWdCLEVBQUUsT0FBRixFQUFXLElBQVgsRUFBaEI7QUFDQSxhQUFLLGlCQUFMLEdBQXlCLEtBQUssRUFBOUI7O0FBRUEsWUFBSSxtQkFBbUIsS0FBSyxXQUFMLENBQWlCLE9BQWpCLENBQXZCO0FBQ0EseUJBQWlCLElBQWpCLENBQXNCLFVBQVUsR0FBVixFQUFlO0FBQ25DLGVBQUssS0FBSyxFQUFMLEdBQVUsT0FBZixJQUEwQixHQUExQjtBQUNBLGVBQUssT0FBTCxHQUFlLEdBQWY7QUFDQSx1QkFBYSxPQUFiLENBQXFCLElBQXJCO0FBQ0QsU0FKcUIsQ0FJcEIsSUFKb0IsQ0FJZixJQUplLENBQXRCOztBQU1BLGVBQU8sWUFBUDtBQUNELE9BZmdDLENBZS9CLElBZitCLENBZTFCLElBZjBCLEVBZXBCLE9BZm9CLENBQWpDO0FBZ0JELEtBakJnQixDQWlCZixJQWpCZSxDQWlCVixJQWpCVSxDQUFqQjs7QUFtQkEseUJBQXFCLDJCQUFyQixFQUFrRCxJQUFsRCxDQUF1RCxVQUFVLFNBQVYsRUFBcUI7QUFDMUUsVUFBSSxTQUFTLEVBQWI7QUFDQSxnQkFBVSxPQUFWLENBQWtCLFVBQVUsVUFBVixFQUFzQjtBQUN0QyxlQUFPLElBQVAsQ0FBWSxVQUFaO0FBQ0QsT0FGRDtBQUdBLFVBQUksT0FBSixDQUFZLE1BQVo7QUFDRCxLQU5EOztBQVFBLFdBQU8sSUFBSSxPQUFKLEVBQVA7QUFDRCxHQWpFcUI7O0FBbUV2Qjs7Ozs7QUFLQyxlQUFhLFVBQVUsT0FBVixFQUFtQjtBQUM5QixRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsUUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxRQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNBO0FBQ0Y7QUFDRSxRQUFJLEtBQUssSUFBSSxXQUFKLENBQWdCO0FBQ3ZCLGdDQUEwQixLQURIO0FBRXZCLGNBQVEsU0FBUyxJQUZNO0FBR3ZCLDZCQUF1QjtBQUhBLEtBQWhCLENBQVQ7QUFLQSxRQUFJLGNBQWMsR0FBRyxjQUFILENBQWtCLENBQUMsT0FBRCxDQUFsQixDQUFsQjtBQUNBLFlBQVEsR0FBUixzRUFBWSxXQUFaO0FBQ0EsWUFBUSxHQUFSLHNHQUFZLFNBQVMsSUFBVCxDQUFjLGdCQUFkLENBQStCLFdBQS9CLENBQVo7QUFDRjtBQUNFLFFBQUksU0FBUyxTQUFTLGFBQVQsQ0FBdUIsUUFBdkIsQ0FBYjtBQUNBLFdBQU8sSUFBUCxHQUFjLGlCQUFkO0FBQ0EsWUFBUSxHQUFSLHNFQUFZLFdBQVo7QUFDQSxZQUFRLEdBQVIsaUdBQVksU0FBUyxnQkFBVCxDQUEwQixXQUExQixDQUFaO0FBQ0EsUUFBSSxLQUFLLFNBQVMsZ0JBQVQsQ0FBMEIsV0FBMUIsRUFBdUMsQ0FBdkMsQ0FBVDs7QUFFQSxVQUFNLE9BQU8sT0FBTyxJQUFwQjtBQUNBLFdBQU8sSUFBUCxHQUFjLFlBQVk7QUFDeEIsVUFBSSxNQUFNLFVBQVUsQ0FBVixDQUFWO0FBQ0EsU0FBRyxPQUFILENBQVcsb0JBQVgsR0FBa0MsR0FBbEM7QUFDQSxhQUFPLElBQVAsR0FBYyxJQUFkO0FBQ0QsS0FKRDtBQUtBLE9BQUcsS0FBSDs7QUFFRjtBQUNFLFFBQUksY0FBYyxPQUFPLFFBQVAsRUFBbEI7QUFDQSxRQUFJLFVBQVUsS0FBSyxHQUFMLENBQVMsT0FBTyxFQUFoQixDQUFkLENBL0I4QixDQStCSTtBQUNsQyxRQUFJLFdBQVcsWUFBWSxZQUFZO0FBQ3JDLFVBQUksTUFBTSxFQUFFLE9BQUYsRUFBVyxJQUFYLENBQWdCLHlCQUFoQixDQUFWO0FBQ0EsVUFBSSxHQUFKLEVBQVM7QUFDUCxvQkFBWSxPQUFaLENBQW9CLEdBQXBCO0FBQ0Esc0JBQWMsUUFBZDtBQUNBLGVBQU8sTUFBUDtBQUNEO0FBQ0o7QUFDRyxVQUFJLGFBQWEsQ0FBakIsRUFBb0I7QUFDbEIsc0JBQWMsUUFBZDtBQUNBLGVBQU8sTUFBUDtBQUNEO0FBQ0YsS0FaYyxFQVlaLEVBWlksQ0FBZjs7QUFjQSxXQUFPLFlBQVksT0FBWixFQUFQO0FBQ0QsR0F2SHFCOztBQXlIdEIsa0JBQWdCLFlBQVk7QUFDMUIsV0FBTyxDQUFDLEtBQUssRUFBTixFQUFVLEtBQUssRUFBTCxHQUFVLE9BQXBCLENBQVA7QUFDRCxHQTNIcUI7O0FBNkh0QixlQUFhLFlBQVk7QUFDdkIsV0FBTyxDQUFDLFVBQUQsRUFBYSxPQUFiLENBQVA7QUFDRCxHQS9IcUI7O0FBaUl0QixzQkFBb0IsWUFBWTtBQUM5QixXQUFPLEdBQVA7QUFDRDtBQW5JcUIsQ0FBeEI7O0FBc0lBLE9BQU8sT0FBUCxHQUFpQixpQkFBakI7OztBQ3pJQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiOztBQUVBLElBQUksZ0JBQWdCOztBQUVsQiw0QkFBMEIsWUFBWTtBQUNwQyxXQUFPLElBQVA7QUFDRCxHQUppQjs7QUFNbEIseUJBQXVCLFlBQVk7QUFDakMsV0FBTyxLQUFQO0FBQ0QsR0FSaUI7O0FBVWxCLDhCQUE0QixZQUFZO0FBQ3RDLFdBQU8sS0FBUDtBQUNELEdBWmlCOztBQWNsQixvQkFBa0IsWUFBWTtBQUM1QixXQUFPLEtBQVA7QUFDRCxHQWhCaUI7QUFpQmxCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sS0FBUDtBQUNELEdBbkJpQjtBQW9CbEIseUJBQXVCLFVBQVUsTUFBVixFQUFrQjtBQUN2QyxRQUFJLFVBQVUsRUFBZDtBQUNBLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDSixRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0ksUUFBSSxvQkFBb0IsS0FBSyx5QkFBTCxFQUF4QjtBQUNBLFFBQUksYUFBYSxFQUFFLE1BQUYsRUFBVSxJQUFWLENBQWUsaUJBQWYsQ0FBakI7QUFDQSxRQUFJLFdBQVcsTUFBWCxHQUFvQixDQUF4QixFQUEyQjtBQUN6QixpQkFBVyxJQUFYLENBQWdCLE9BQWhCLEVBQXlCLElBQXpCLENBQThCLFVBQVUsQ0FBVixFQUFhO0FBQ3pDLFlBQUksU0FBUyxFQUFFLElBQUYsRUFBUSxJQUFSLEdBQWUsSUFBZixFQUFiO0FBQ0EsZ0JBQVEsTUFBUixJQUFrQjtBQUNoQixpQkFBTyxJQUFJO0FBREssU0FBbEI7QUFHRCxPQUxEO0FBTUQ7QUFDRCxXQUFPLE9BQVA7QUFDRCxHQXBDaUI7QUFxQ2xCLFlBQVUsVUFBVSxhQUFWLEVBQXlCO0FBQ2pDLFFBQUksTUFBTSxPQUFPLFFBQVAsRUFBVjtBQUNBLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDSixRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCOztBQUVJLFFBQUksU0FBUyxLQUFLLGVBQUwsQ0FBcUIsYUFBckIsQ0FBYjs7QUFFQSxRQUFJLFNBQVMsRUFBYjtBQUNBLE1BQUUsTUFBRixFQUFVLElBQVYsQ0FBZSxVQUFVLENBQVYsRUFBYSxLQUFiLEVBQW9CO0FBQ2pDLFVBQUksVUFBVSxLQUFLLHFCQUFMLENBQTJCLEVBQUUsS0FBRixDQUEzQixDQUFkOztBQUVBLFVBQUksa0JBQWtCLEtBQUssdUJBQUwsRUFBdEI7QUFDQSxRQUFFLEtBQUYsRUFBUyxJQUFULENBQWMsZUFBZCxFQUErQixJQUEvQixDQUFvQyxVQUFVLENBQVYsRUFBYSxHQUFiLEVBQWtCO0FBQ3BELFlBQUksT0FBTyxFQUFYO0FBQ0EsYUFBSyxPQUFMLENBQWEsT0FBYixDQUFxQixVQUFVLE1BQVYsRUFBa0I7QUFDckMsY0FBSSxPQUFPLE9BQVAsS0FBbUIsSUFBdkIsRUFBNkI7QUFDM0IsZ0JBQUksUUFBUSxPQUFPLE1BQWYsTUFBMkIsU0FBL0IsRUFBMEM7QUFDeEMsbUJBQUssT0FBTyxJQUFaLElBQW9CLElBQXBCO0FBQ0QsYUFGRCxNQUVPO0FBQ0wsa0JBQUksVUFBVSxFQUFFLEdBQUYsRUFBTyxJQUFQLENBQVksaUJBQWlCLFFBQVEsT0FBTyxNQUFmLEVBQXVCLEtBQXhDLEdBQWdELEdBQTVELEVBQWlFLElBQWpFLEdBQXdFLElBQXhFLEVBQWQ7QUFDQSxtQkFBSyxPQUFPLElBQVosSUFBb0IsT0FBcEI7QUFDRDtBQUNGO0FBQ0YsU0FURDtBQVVBLGVBQU8sSUFBUCxDQUFZLElBQVo7QUFDRCxPQWJtQyxDQWFsQyxJQWJrQyxDQWE3QixJQWI2QixDQUFwQztBQWNELEtBbEJjLENBa0JiLElBbEJhLENBa0JSLElBbEJRLENBQWY7O0FBb0JBLFFBQUksT0FBSixDQUFZLE1BQVo7QUFDQSxXQUFPLElBQUksT0FBSixFQUFQO0FBQ0QsR0FwRWlCOztBQXNFbEIsa0JBQWdCLFlBQVk7QUFDMUIsUUFBSSxjQUFjLEVBQWxCO0FBQ0EsU0FBSyxPQUFMLENBQWEsT0FBYixDQUFxQixVQUFVLE1BQVYsRUFBa0I7QUFDckMsVUFBSSxPQUFPLE9BQVAsS0FBbUIsSUFBdkIsRUFBNkI7QUFDM0Isb0JBQVksSUFBWixDQUFpQixPQUFPLElBQXhCO0FBQ0Q7QUFDRixLQUpEO0FBS0EsV0FBTyxXQUFQO0FBQ0QsR0E5RWlCOztBQWdGbEIsZUFBYSxZQUFZO0FBQ3ZCLFdBQU8sQ0FBQyxVQUFELEVBQWEsU0FBYixFQUF3QixPQUF4QixFQUFpQyxzQkFBakMsRUFBeUQsd0JBQXpELENBQVA7QUFDRCxHQWxGaUI7O0FBb0ZsQixzQkFBb0IsWUFBWTtBQUM5QixXQUFPLE9BQVA7QUFDRCxHQXRGaUI7O0FBd0ZsQiwwQ0FBd0MsVUFBVSxJQUFWLEVBQWdCLFVBQVUsRUFBMUIsRUFBOEI7QUFDcEUsUUFBSSxJQUFJLFFBQVEsQ0FBUixJQUFhLEtBQUssQ0FBMUI7QUFDQSxRQUFJLFNBQVMsRUFBRSxJQUFGLENBQWI7QUFDQSxRQUFJLE9BQU8sSUFBUCxDQUFZLDREQUFaLEVBQTBFLE1BQTlFLEVBQXNGO0FBQ3BGLFVBQUksT0FBTyxJQUFQLENBQVksVUFBWixFQUF3QixNQUF4QixLQUFtQyxDQUF2QyxFQUEwQztBQUN4QyxlQUFPLFVBQVA7QUFDRCxPQUZELE1BRVM7QUFDUCxZQUFJLFFBQVEsT0FBTyxJQUFQLENBQVksVUFBWixDQUFaO0FBQ0o7QUFDSSxZQUFJLFdBQVcsTUFBTSxLQUFOLENBQVksTUFBTSxNQUFOLENBQWEsMkNBQWIsRUFBMEQsQ0FBMUQsQ0FBWixDQUFmO0FBQ0EsZUFBTywyQkFBMkIsV0FBVyxDQUF0QyxJQUEyQyxHQUFsRDtBQUNEO0FBQ0YsS0FURCxNQVNRLElBQUksT0FBTyxJQUFQLENBQVksc0NBQVosRUFBb0QsTUFBeEQsRUFBZ0U7QUFDdEUsVUFBSSxRQUFRLE9BQU8sSUFBUCxDQUFZLElBQVosQ0FBWjtBQUNIO0FBQ0csVUFBSSxXQUFXLE1BQU0sS0FBTixDQUFZLE1BQU0sTUFBTixDQUFhLDJDQUFiLEVBQTBELENBQTFELENBQVosQ0FBZjtBQUNBLGFBQU8scUJBQXFCLFdBQVcsQ0FBaEMsSUFBcUMsR0FBNUM7QUFDRCxLQUxPLE1BS0E7QUFDTixhQUFPLEVBQVA7QUFDRDtBQUNGLEdBNUdpQjs7QUE4R2xCLHdDQUFzQyxVQUFVLElBQVYsRUFBZ0IsVUFBVSxFQUExQixFQUE4QjtBQUNsRSxRQUFJLElBQUksUUFBUSxDQUFSLElBQWEsS0FBSyxDQUExQjtBQUNBLFFBQUksU0FBUyxFQUFFLElBQUYsQ0FBYjtBQUNBLFFBQUksT0FBTyxJQUFQLENBQVksNERBQVosRUFBMEUsTUFBOUUsRUFBc0Y7QUFDcEYsYUFBTyxVQUFQO0FBQ0QsS0FGRCxNQUVRLElBQUksT0FBTyxJQUFQLENBQVksc0NBQVosRUFBb0QsTUFBeEQsRUFBZ0U7QUFDdEUsVUFBSSxRQUFRLE9BQU8sSUFBUCxDQUFZLElBQVosQ0FBWjtBQUNIO0FBQ0csVUFBSSxXQUFXLE1BQU0sS0FBTixDQUFZLE1BQU0sTUFBTixDQUFhLDJDQUFiLEVBQTBELENBQTFELENBQVosQ0FBZjtBQUNBLGFBQU8sdUJBQXVCLFdBQVcsQ0FBbEMsSUFBdUMsR0FBOUM7QUFDRCxLQUxPLE1BS0E7QUFDTixhQUFPLEVBQVA7QUFDRDtBQUNGLEdBM0hpQjs7QUE2SGxCLDZCQUEyQixZQUFZO0FBQ3ZDO0FBQ0UsUUFBSSxLQUFLLHNCQUFMLEtBQWdDLFNBQXBDLEVBQStDO0FBQzdDLGFBQU8sVUFBUDtBQUNELEtBRkQsTUFFUTtBQUNOLGFBQU8sS0FBSyxzQkFBWjtBQUNEO0FBQ0YsR0FwSWlCOztBQXNJbEIsMkJBQXlCLFlBQVk7QUFDckM7QUFDRSxRQUFJLEtBQUssb0JBQUwsS0FBOEIsU0FBbEMsRUFBNkM7QUFDM0MsYUFBTyxVQUFQO0FBQ0QsS0FGRCxNQUVRO0FBQ04sYUFBTyxLQUFLLG9CQUFaO0FBQ0Q7QUFDRixHQTdJaUI7O0FBK0luQjs7OztBQUlDLGlDQUErQixVQUFVLGlCQUFWLEVBQTZCLElBQTdCLEVBQW1DLFVBQVUsRUFBN0MsRUFBaUQ7QUFDOUUsUUFBSSxJQUFJLFFBQVEsQ0FBUixJQUFhLEtBQUssQ0FBMUI7QUFDQSxRQUFJLFNBQVMsRUFBRSxJQUFGLENBQWI7QUFDQSxRQUFJLG9CQUFvQixPQUFPLElBQVAsQ0FBWSxpQkFBWixFQUErQixJQUEvQixDQUFvQyxPQUFwQyxDQUF4Qjs7QUFFQSxRQUFJLFVBQVUsRUFBZDs7QUFFQSxzQkFBa0IsSUFBbEIsQ0FBdUIsVUFBVSxDQUFWLEVBQWEsUUFBYixFQUF1QjtBQUM1QyxVQUFJLFNBQVMsRUFBRSxRQUFGLEVBQVksSUFBWixHQUFtQixJQUFuQixFQUFiO0FBQ0EsVUFBSSxPQUFPLE1BQVg7QUFDQSxVQUFJLE9BQU8sTUFBUCxLQUFrQixDQUF0QixFQUF5QjtBQUN2QixnQkFBUSxJQUFSLENBQWE7QUFDWCxrQkFBUSxNQURHO0FBRVgsZ0JBQU0sSUFGSztBQUdYLG1CQUFTO0FBSEUsU0FBYjtBQUtEO0FBQ0YsS0FWRDtBQVdBLFdBQU8sT0FBUDtBQUNEO0FBdEtpQixDQUFwQjs7QUF5S0EsT0FBTyxPQUFQLEdBQWlCLGFBQWpCOzs7QUMzS0EsSUFBSSxTQUFTLFFBQVEsaUJBQVIsQ0FBYjtBQUNBLElBQUksZUFBZTs7QUFFakIsNEJBQTBCLFlBQVk7QUFDcEMsV0FBTyxJQUFQO0FBQ0QsR0FKZ0I7O0FBTWpCLHlCQUF1QixZQUFZO0FBQ2pDLFdBQU8sS0FBUDtBQUNELEdBUmdCOztBQVVqQiw4QkFBNEIsWUFBWTtBQUN0QyxXQUFPLEtBQVA7QUFDRCxHQVpnQjs7QUFjakIsb0JBQWtCLFlBQVk7QUFDNUIsV0FBTyxLQUFQO0FBQ0QsR0FoQmdCO0FBaUJqQixzQkFBb0IsWUFBWTtBQUM5QixXQUFPLEtBQVA7QUFDRCxHQW5CZ0I7QUFvQmpCLFlBQVUsVUFBVSxhQUFWLEVBQXlCO0FBQ2pDLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDSixRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0ksUUFBSSxNQUFNLE9BQU8sUUFBUCxFQUFWOztBQUVBLFFBQUksV0FBVyxLQUFLLGVBQUwsQ0FBcUIsYUFBckIsQ0FBZjs7QUFFQSxRQUFJLFNBQVMsRUFBYjtBQUNBLE1BQUUsUUFBRixFQUFZLElBQVosQ0FBaUIsVUFBVSxDQUFWLEVBQWEsT0FBYixFQUFzQjtBQUNyQyxVQUFJLE9BQU8sRUFBWDs7QUFFSDtBQUNHLFVBQUksaUJBQWlCLEVBQUUsT0FBRixFQUFXLEtBQVgsRUFBckI7QUFDQSxxQkFBZSxJQUFmLENBQW9CLGVBQXBCLEVBQXFDLE1BQXJDO0FBQ0g7QUFDRyxxQkFBZSxJQUFmLENBQW9CLElBQXBCLEVBQTBCLEtBQTFCLENBQWdDLElBQWhDOztBQUVBLFVBQUksT0FBTyxlQUFlLElBQWYsRUFBWDtBQUNBLFVBQUksS0FBSyxLQUFMLEtBQWUsU0FBZixJQUE0QixLQUFLLEtBQUwsQ0FBVyxNQUEzQyxFQUFtRDtBQUNqRCxZQUFJLFVBQVUsS0FBSyxLQUFMLENBQVcsSUFBSSxNQUFKLENBQVcsS0FBSyxLQUFoQixDQUFYLENBQWQ7QUFDQSxZQUFJLFlBQVksSUFBaEIsRUFBc0I7QUFDcEIsaUJBQU8sUUFBUSxDQUFSLENBQVA7QUFDRCxTQUZELE1BRU87QUFDTCxpQkFBTyxJQUFQO0FBQ0Q7QUFDRjtBQUNELFdBQUssS0FBSyxFQUFWLElBQWdCLElBQWhCOztBQUVBLGFBQU8sSUFBUCxDQUFZLElBQVo7QUFDRCxLQXJCZ0IsQ0FxQmYsSUFyQmUsQ0FxQlYsSUFyQlUsQ0FBakI7O0FBdUJBLFFBQUksS0FBSyxRQUFMLEtBQWtCLEtBQWxCLElBQTJCLFNBQVMsTUFBVCxLQUFvQixDQUFuRCxFQUFzRDtBQUNwRCxVQUFJLE9BQU8sRUFBWDtBQUNBLFdBQUssS0FBSyxFQUFWLElBQWdCLElBQWhCO0FBQ0EsYUFBTyxJQUFQLENBQVksSUFBWjtBQUNEOztBQUVELFFBQUksT0FBSixDQUFZLE1BQVo7QUFDQSxXQUFPLElBQUksT0FBSixFQUFQO0FBQ0QsR0E1RGdCOztBQThEakIsa0JBQWdCLFlBQVk7QUFDMUIsV0FBTyxDQUFDLEtBQUssRUFBTixDQUFQO0FBQ0QsR0FoRWdCOztBQWtFakIsZUFBYSxZQUFZO0FBQ3ZCLFdBQU8sQ0FBQyxVQUFELEVBQWEsT0FBYixFQUFzQixPQUF0QixDQUFQO0FBQ0Q7QUFwRWdCLENBQW5COztBQXVFQSxPQUFPLE9BQVAsR0FBaUIsWUFBakI7OztBQ3hFQSxJQUFJLFdBQVcsUUFBUSxZQUFSLENBQWY7O0FBRUEsSUFBSSxlQUFlLFVBQVUsU0FBVixFQUFxQixPQUFyQixFQUE4QjtBQUMvQyxNQUFJLElBQUksUUFBUSxDQUFoQjtBQUNBLE1BQUksV0FBVyxRQUFRLFFBQXZCO0FBQ0EsTUFBSSxTQUFTLFFBQVEsTUFBckI7QUFDQTtBQUNBLFNBQU8sY0FBUCxDQUFzQixJQUF0QixFQUE0QixHQUE1QixFQUFpQztBQUMvQixXQUFPLENBRHdCO0FBRS9CLGdCQUFZO0FBRm1CLEdBQWpDO0FBSUEsU0FBTyxjQUFQLENBQXNCLElBQXRCLEVBQTRCLFFBQTVCLEVBQXNDO0FBQ3BDLFdBQU8sTUFENkI7QUFFcEMsZ0JBQVk7QUFGd0IsR0FBdEM7QUFJQSxTQUFPLGNBQVAsQ0FBc0IsSUFBdEIsRUFBNEIsVUFBNUIsRUFBd0M7QUFDdEMsV0FBTyxRQUQrQjtBQUV0QyxnQkFBWTtBQUYwQixHQUF4QztBQUlBLE1BQUksQ0FBQyxLQUFLLENBQVYsRUFBYSxNQUFNLElBQUksS0FBSixDQUFVLGdCQUFWLENBQU47QUFDZixNQUFJLENBQUMsS0FBSyxRQUFWLEVBQW9CLE1BQU0sSUFBSSxLQUFKLENBQVUsa0JBQVYsQ0FBTjtBQUNwQixNQUFHLENBQUMsS0FBSyxNQUFULEVBQWdCLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0JBQVYsQ0FBTjs7QUFFZCxNQUFJLGNBQWMsSUFBZCxJQUFzQixjQUFjLFNBQXhDLEVBQW1EO0FBQ2pEO0FBQ0Q7O0FBRUQsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLFVBQVUsTUFBOUIsRUFBc0MsR0FBdEMsRUFBMkM7QUFDekMsU0FBSyxJQUFMLENBQVUsVUFBVSxDQUFWLENBQVY7QUFDRDtBQUNGLENBNUJEOztBQThCQSxhQUFhLFNBQWIsR0FBeUIsRUFBekI7O0FBRUEsYUFBYSxTQUFiLENBQXVCLElBQXZCLEdBQThCLFVBQVUsUUFBVixFQUFvQjtBQUNoRCxNQUFJLENBQUMsS0FBSyxXQUFMLENBQWlCLFNBQVMsRUFBMUIsQ0FBTCxFQUFvQztBQUNsQyxRQUFJLEVBQUUsb0JBQW9CLFFBQXRCLENBQUosRUFBcUM7QUFDekMsVUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLFVBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsVUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDTSxpQkFBVyxJQUFJLFFBQUosQ0FBYSxRQUFiLEVBQXVCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQXZCLENBQVg7QUFDRDtBQUNELFVBQU0sU0FBTixDQUFnQixJQUFoQixDQUFxQixJQUFyQixDQUEwQixJQUExQixFQUFnQyxRQUFoQztBQUNEO0FBQ0YsQ0FWRDs7QUFZQSxhQUFhLFNBQWIsQ0FBdUIsV0FBdkIsR0FBcUMsVUFBVSxVQUFWLEVBQXNCO0FBQ3pELE1BQUksc0JBQXNCLE1BQTFCLEVBQWtDO0FBQ2hDLGlCQUFhLFdBQVcsRUFBeEI7QUFDRDs7QUFFRCxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUNwQyxRQUFJLEtBQUssQ0FBTCxFQUFRLEVBQVIsS0FBZSxVQUFuQixFQUErQjtBQUM3QixhQUFPLElBQVA7QUFDRDtBQUNGO0FBQ0QsU0FBTyxLQUFQO0FBQ0QsQ0FYRDs7QUFhQTs7Ozs7QUFLQSxhQUFhLFNBQWIsQ0FBdUIsZUFBdkIsR0FBeUMsVUFBVSxnQkFBVixFQUE0QjtBQUNuRSxNQUFJLHFCQUFxQixTQUF6QixFQUFvQztBQUNsQyxXQUFPLElBQVA7QUFDRDs7QUFFRCxNQUFJLHVCQUF1QixVQUFVLGdCQUFWLEVBQTRCLGVBQTVCLEVBQTZDO0FBQ3RFLFNBQUssT0FBTCxDQUFhLFVBQVUsUUFBVixFQUFvQjtBQUMvQixVQUFJLFNBQVMsaUJBQVQsQ0FBMkIsZ0JBQTNCLENBQUosRUFBa0Q7QUFDaEQsWUFBSSxnQkFBZ0IsT0FBaEIsQ0FBd0IsUUFBeEIsTUFBc0MsQ0FBQyxDQUEzQyxFQUE4QztBQUM1QywwQkFBZ0IsSUFBaEIsQ0FBcUIsUUFBckI7QUFDQSwrQkFBcUIsU0FBUyxFQUE5QixFQUFrQyxlQUFsQztBQUNEO0FBQ0Y7QUFDRixLQVBEO0FBUUQsR0FUMEIsQ0FTekIsSUFUeUIsQ0FTcEIsSUFUb0IsQ0FBM0I7O0FBV0EsTUFBSSxrQkFBa0IsRUFBdEI7QUFDQSx1QkFBcUIsZ0JBQXJCLEVBQXVDLGVBQXZDO0FBQ0EsU0FBTyxlQUFQO0FBQ0QsQ0FuQkQ7O0FBcUJBOzs7OztBQUtBLGFBQWEsU0FBYixDQUF1Qix1QkFBdkIsR0FBaUQsVUFBVSxnQkFBVixFQUE0QjtBQUM3RSxNQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsTUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxNQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNFLE1BQUksa0JBQWtCLElBQUksWUFBSixDQUFpQixJQUFqQixFQUF1QixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUF2QixDQUF0QjtBQUNBLE9BQUssT0FBTCxDQUFhLFVBQVUsUUFBVixFQUFvQjtBQUMvQixRQUFJLFNBQVMsaUJBQVQsQ0FBMkIsZ0JBQTNCLENBQUosRUFBa0Q7QUFDaEQsc0JBQWdCLElBQWhCLENBQXFCLFFBQXJCO0FBQ0Q7QUFDRixHQUpEO0FBS0EsU0FBTyxlQUFQO0FBQ0QsQ0FYRDs7QUFhQSxhQUFhLFNBQWIsQ0FBdUIsS0FBdkIsR0FBK0IsWUFBWTtBQUMzQyxNQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsTUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxNQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNFLE1BQUksYUFBYSxJQUFJLFlBQUosQ0FBaUIsSUFBakIsRUFBdUIsRUFBQyxDQUFELEVBQUksTUFBSixFQUFZLFFBQVosRUFBdkIsQ0FBakI7QUFDQSxPQUFLLE9BQUwsQ0FBYSxVQUFVLFFBQVYsRUFBb0I7QUFDL0IsZUFBVyxJQUFYLENBQWdCLFFBQWhCO0FBQ0QsR0FGRDtBQUdBLFNBQU8sVUFBUDtBQUNELENBVEQ7O0FBV0EsYUFBYSxTQUFiLENBQXVCLFNBQXZCLEdBQW1DLFlBQVk7QUFDL0MsTUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLE1BQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsTUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDRSxNQUFJLGFBQWEsSUFBSSxZQUFKLENBQWlCLElBQWpCLEVBQXVCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQXZCLENBQWpCO0FBQ0EsT0FBSyxPQUFMLENBQWEsVUFBVSxRQUFWLEVBQW9CO0FBQy9CLGVBQVcsSUFBWCxDQUFnQixLQUFLLEtBQUwsQ0FBVyxLQUFLLFNBQUwsQ0FBZSxRQUFmLENBQVgsQ0FBaEI7QUFDRCxHQUZEO0FBR0EsU0FBTyxVQUFQO0FBQ0QsQ0FURDs7QUFXQSxhQUFhLFNBQWIsQ0FBdUIsTUFBdkIsR0FBZ0MsWUFBWTtBQUMxQyxNQUFJLGFBQWEsS0FBSyxLQUFMLEVBQWpCO0FBQ0EsT0FBSyxJQUFJLENBQVQsSUFBYyxTQUFkLEVBQXlCO0FBQ3ZCLGNBQVUsQ0FBVixFQUFhLE9BQWIsQ0FBcUIsVUFBVSxRQUFWLEVBQW9CO0FBQ3ZDLGlCQUFXLElBQVgsQ0FBZ0IsUUFBaEI7QUFDRCxLQUZEO0FBR0Q7QUFDRCxTQUFPLFVBQVA7QUFDRCxDQVJEOztBQVVBLGFBQWEsU0FBYixDQUF1QixXQUF2QixHQUFxQyxVQUFVLFVBQVYsRUFBc0I7QUFDekQsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDcEMsUUFBSSxXQUFXLEtBQUssQ0FBTCxDQUFmO0FBQ0EsUUFBSSxTQUFTLEVBQVQsS0FBZ0IsVUFBcEIsRUFBZ0M7QUFDOUIsYUFBTyxRQUFQO0FBQ0Q7QUFDRjtBQUNGLENBUEQ7O0FBU0E7Ozs7OztBQU1BLGFBQWEsU0FBYixDQUF1QixtQkFBdkIsR0FBNkMsVUFBVSxVQUFWLEVBQXNCO0FBQ25FLE1BQUksSUFBSSxLQUFLLENBQWI7QUFDQSxNQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLE1BQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0UsTUFBSSxhQUFhLElBQUksWUFBSixDQUFpQixJQUFqQixFQUF1QixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUF2QixDQUFqQjtBQUNBLE1BQUksV0FBVyxLQUFLLFdBQUwsQ0FBaUIsVUFBakIsQ0FBZjtBQUNBLGFBQVcsSUFBWCxDQUFnQixLQUFLLFdBQUwsQ0FBaUIsVUFBakIsQ0FBaEI7O0FBRUQ7QUFDQyxNQUFJLHNCQUFzQixVQUFVLFFBQVYsRUFBb0I7QUFDNUMsYUFBUyxlQUFULENBQXlCLE9BQXpCLENBQWlDLFVBQVUsZ0JBQVYsRUFBNEI7QUFDM0QsVUFBSSxxQkFBcUIsT0FBekIsRUFBa0M7QUFDbEMsVUFBSSxpQkFBaUIsS0FBSyxXQUFMLENBQWlCLGdCQUFqQixDQUFyQjtBQUNBLFVBQUksV0FBVyxPQUFYLENBQW1CLGNBQW5CLE1BQXVDLENBQUMsQ0FBNUMsRUFBK0M7QUFDL0MsVUFBSSxlQUFlLGtCQUFmLEVBQUosRUFBeUM7QUFDdkMsbUJBQVcsSUFBWCxDQUFnQixjQUFoQjtBQUNBLDRCQUFvQixjQUFwQjtBQUNEO0FBQ0YsS0FSZ0MsQ0FRL0IsSUFSK0IsQ0FRMUIsSUFSMEIsQ0FBakM7QUFTRCxHQVZ5QixDQVV4QixJQVZ3QixDQVVuQixJQVZtQixDQUExQjs7QUFZQSxzQkFBb0IsUUFBcEI7O0FBRUQ7QUFDQyxlQUFhLFdBQVcsTUFBWCxDQUFrQixLQUFLLDhCQUFMLENBQW9DLFNBQVMsRUFBN0MsQ0FBbEIsQ0FBYjtBQUNBLFNBQU8sVUFBUDtBQUNELENBMUJEOztBQTRCQTs7OztBQUlBLGFBQWEsU0FBYixDQUF1Qiw4QkFBdkIsR0FBd0QsVUFBVSxnQkFBVixFQUE0QjtBQUNwRixNQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsTUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxNQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNFLE1BQUksYUFBYSxJQUFJLFlBQUosQ0FBaUIsSUFBakIsRUFBdUIsRUFBQyxDQUFELEVBQUksTUFBSixFQUFZLFFBQVosRUFBdkIsQ0FBakI7QUFDQSxNQUFJLG9CQUFvQixVQUFVLGNBQVYsRUFBMEI7QUFDaEQsUUFBSSxlQUFlLGtCQUFmLEVBQUosRUFBeUM7QUFDdkMsVUFBSSxpQkFBaUIsS0FBSyx1QkFBTCxDQUE2QixlQUFlLEVBQTVDLENBQXJCO0FBQ0EscUJBQWUsT0FBZixDQUF1QixVQUFVLGFBQVYsRUFBeUI7QUFDOUMsWUFBSSxXQUFXLE9BQVgsQ0FBbUIsYUFBbkIsTUFBc0MsQ0FBQyxDQUEzQyxFQUE4QztBQUM1QyxxQkFBVyxJQUFYLENBQWdCLGFBQWhCO0FBQ0EsNEJBQWtCLGFBQWxCO0FBQ0Q7QUFDRixPQUxEO0FBTUQ7QUFDRixHQVZ1QixDQVV0QixJQVZzQixDQVVqQixJQVZpQixDQUF4Qjs7QUFZQSxNQUFJLGlCQUFpQixLQUFLLFdBQUwsQ0FBaUIsZ0JBQWpCLENBQXJCO0FBQ0Esb0JBQWtCLGNBQWxCO0FBQ0EsU0FBTyxVQUFQO0FBQ0QsQ0FwQkQ7O0FBc0JBLGFBQWEsU0FBYixDQUF1Qix5QkFBdkIsR0FBbUQsVUFBVSxVQUFWLEVBQXNCO0FBQ3hFO0FBQ0MsTUFBSSxXQUFXLEtBQUssV0FBTCxDQUFpQixVQUFqQixDQUFmO0FBQ0EsTUFBSSxTQUFTLHlCQUFULE9BQXlDLElBQTdDLEVBQW1EO0FBQ2pELFdBQU8sSUFBUDtBQUNEOztBQUVGO0FBQ0MsTUFBSSxpQkFBaUIsS0FBSyxlQUFMLENBQXFCLFVBQXJCLENBQXJCO0FBQ0EsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLGVBQWUsTUFBbkMsRUFBMkMsR0FBM0MsRUFBZ0Q7QUFDOUMsUUFBSSxXQUFXLGVBQWUsQ0FBZixDQUFmO0FBQ0EsUUFBSSxTQUFTLHlCQUFULE9BQXlDLElBQTdDLEVBQW1EO0FBQ2pELGFBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBRUQsU0FBTyxLQUFQO0FBQ0QsQ0FqQkQ7O0FBbUJBOzs7O0FBSUEsYUFBYSxTQUFiLENBQXVCLE1BQXZCLEdBQWdDLFlBQVk7QUFDMUMsTUFBSSxTQUFTLEVBQWI7QUFDQSxPQUFLLE9BQUwsQ0FBYSxVQUFVLFFBQVYsRUFBb0I7QUFDL0IsV0FBTyxJQUFQLENBQVksUUFBWjtBQUNELEdBRkQ7QUFHQSxTQUFPLE1BQVA7QUFDRCxDQU5EOztBQVFBLGFBQWEsU0FBYixDQUF1QixlQUF2QixHQUF5QyxVQUFVLFVBQVYsRUFBc0I7QUFDN0QsT0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEtBQUssTUFBekIsRUFBaUMsR0FBakMsRUFBc0M7QUFDcEMsUUFBSSxXQUFXLEtBQUssQ0FBTCxDQUFmO0FBQ0EsUUFBSSxTQUFTLEVBQVQsS0FBZ0IsVUFBcEIsRUFBZ0M7QUFDOUIsYUFBTyxRQUFQO0FBQ0Q7QUFDRjtBQUNGLENBUEQ7O0FBU0E7Ozs7OztBQU1BLGFBQWEsU0FBYixDQUF1QiwyQkFBdkIsR0FBcUQsVUFBVSxVQUFWLEVBQXNCLGlCQUF0QixFQUF5QztBQUM1RixNQUFJLGNBQWMsS0FBSyxXQUFMLENBQWlCLFVBQWpCLEVBQTZCLFFBQS9DO0FBQ0EsTUFBSSxvQkFBb0IsS0FBSyxpQ0FBTCxDQUF1QyxpQkFBdkMsQ0FBeEI7QUFDQSxnQkFBYyxvQkFBb0IsV0FBbEM7O0FBRUEsU0FBTyxXQUFQO0FBQ0QsQ0FORDs7QUFRQTs7Ozs7QUFLQSxhQUFhLFNBQWIsQ0FBdUIsaUNBQXZCLEdBQTJELFVBQVUsaUJBQVYsRUFBNkI7QUFDdEYsTUFBSSxjQUFjLEVBQWxCOztBQUVBLE9BQUssSUFBSSxJQUFJLGtCQUFrQixNQUFsQixHQUEyQixDQUF4QyxFQUEyQyxJQUFJLENBQS9DLEVBQWtELEdBQWxELEVBQXVEO0FBQ3JELFFBQUksbUJBQW1CLGtCQUFrQixDQUFsQixDQUF2QjtBQUNBLFFBQUksaUJBQWlCLEtBQUssV0FBTCxDQUFpQixnQkFBakIsQ0FBckI7QUFDQSxRQUFJLGVBQWUsa0JBQWYsRUFBSixFQUF5QztBQUN2QyxvQkFBYyxlQUFlLFFBQWYsR0FBMEIsR0FBMUIsR0FBZ0MsV0FBOUM7QUFDRCxLQUZELE1BRU87QUFDTDtBQUNEO0FBQ0Y7O0FBRUQsU0FBTyxXQUFQO0FBQ0QsQ0FkRDs7QUFnQkEsYUFBYSxTQUFiLENBQXVCLDRCQUF2QixHQUFzRCxZQUFZO0FBQ2hFLE1BQUksaUJBQWlCLEtBQXJCOztBQUVBLE9BQUssT0FBTCxDQUFhLFVBQVUsV0FBVixFQUF1QjtBQUNsQyxRQUFJLG1CQUFtQixFQUF2Qjs7QUFFQSxRQUFJLGlCQUFpQixVQUFVLGNBQVYsRUFBMEI7QUFDaEQ7QUFDRyxVQUFJLGlCQUFpQixPQUFqQixDQUF5QixjQUF6QixNQUE2QyxDQUFDLENBQWxELEVBQXFEO0FBQ25ELHlCQUFpQixJQUFqQjtBQUNBO0FBQ0Q7O0FBRUQsVUFBSSxlQUFlLGtCQUFmLEVBQUosRUFBeUM7QUFDdkMseUJBQWlCLElBQWpCLENBQXNCLGNBQXRCO0FBQ0EsWUFBSSxpQkFBaUIsS0FBSyx1QkFBTCxDQUE2QixlQUFlLEVBQTVDLENBQXJCO0FBQ0EsdUJBQWUsT0FBZixDQUF1QixjQUF2QjtBQUNBLHlCQUFpQixHQUFqQjtBQUNEO0FBQ0YsS0Fib0IsQ0FhbkIsSUFibUIsQ0FhZCxJQWJjLENBQXJCOztBQWVBLG1CQUFlLFdBQWY7QUFDRCxHQW5CWSxDQW1CWCxJQW5CVyxDQW1CTixJQW5CTSxDQUFiOztBQXFCQSxTQUFPLGNBQVA7QUFDRCxDQXpCRDs7QUEyQkEsT0FBTyxPQUFQLEdBQWlCLFlBQWpCOzs7QUNsVEEsSUFBSSxrQkFBa0IsUUFBUSw0QkFBUixDQUF0QjtBQUNBLElBQUksMkJBQTJCLFFBQVEscUNBQVIsQ0FBL0I7QUFDQSxJQUFJLHVCQUF1QixRQUFRLGlDQUFSLENBQTNCO0FBQ0EsSUFBSSx3QkFBd0IsUUFBUSxrQ0FBUixDQUE1QjtBQUNBLElBQUksZ0JBQWdCLFFBQVEsMEJBQVIsQ0FBcEI7QUFDQSxJQUFJLGVBQWUsUUFBUSx5QkFBUixDQUFuQjtBQUNBLElBQUksZ0JBQWdCLFFBQVEsMEJBQVIsQ0FBcEI7QUFDQSxJQUFJLGVBQWUsUUFBUSx5QkFBUixDQUFuQjtBQUNBLElBQUksb0JBQW9CLFFBQVEsOEJBQVIsQ0FBeEI7QUFDQSxJQUFJLGdCQUFnQixRQUFRLDBCQUFSLENBQXBCO0FBQ0EsSUFBSSxlQUFlLFFBQVEseUJBQVIsQ0FBbkI7O0FBRUEsT0FBTyxPQUFQLEdBQWlCO0FBQ2YsaUJBRGU7QUFFZiwwQkFGZTtBQUdmLHNCQUhlO0FBSWYsdUJBSmU7QUFLZixlQUxlO0FBTWYsY0FOZTtBQU9mLGVBUGU7QUFRZixjQVJlO0FBU2YsbUJBVGU7QUFVZixlQVZlO0FBV2Y7QUFYZSxDQUFqQjs7O0FDWkEsSUFBSSxXQUFXLFFBQVEsWUFBUixDQUFmO0FBQ0EsSUFBSSxlQUFlLFFBQVEsZ0JBQVIsQ0FBbkI7QUFDQSxJQUFJLFVBQVUsVUFBVSxVQUFWLEVBQXNCLE9BQXRCLEVBQStCO0FBQzNDLE1BQUksSUFBSSxRQUFRLENBQWhCO0FBQ0EsTUFBSSxXQUFXLFFBQVEsUUFBdkI7QUFDQSxNQUFJLFNBQVMsUUFBUSxNQUFyQjtBQUNBO0FBQ0EsU0FBTyxjQUFQLENBQXNCLElBQXRCLEVBQTRCLEdBQTVCLEVBQWlDO0FBQy9CLFdBQU8sQ0FEd0I7QUFFL0IsZ0JBQVk7QUFGbUIsR0FBakM7QUFJQSxTQUFPLGNBQVAsQ0FBc0IsSUFBdEIsRUFBNEIsUUFBNUIsRUFBc0M7QUFDcEMsV0FBTyxNQUQ2QjtBQUVwQyxnQkFBWTtBQUZ3QixHQUF0QztBQUlBLFNBQU8sY0FBUCxDQUFzQixJQUF0QixFQUE0QixVQUE1QixFQUF3QztBQUN0QyxXQUFPLFFBRCtCO0FBRXRDLGdCQUFZO0FBRjBCLEdBQXhDO0FBSUEsTUFBSSxDQUFDLEtBQUssQ0FBVixFQUFhLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0JBQVYsQ0FBTjtBQUNmLE1BQUksQ0FBQyxLQUFLLFFBQVYsRUFBb0I7QUFDbEIsWUFBUSxLQUFSLDJEQUFlLElBQUksS0FBSixFQUFELENBQWMsS0FBNUI7O0FBRUEsVUFBTSxJQUFJLEtBQUosQ0FBVSxrQkFBVixDQUFOO0FBQ0Q7QUFDRCxNQUFHLENBQUMsS0FBSyxNQUFULEVBQWdCLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0JBQVYsQ0FBTjtBQUNkLE9BQUssUUFBTCxDQUFjLFVBQWQ7QUFDRCxDQXpCRDs7QUEyQkEsUUFBUSxTQUFSLEdBQW9COztBQUVsQixZQUFVLFVBQVUsVUFBVixFQUFzQjtBQUM5QixZQUFRLEdBQVIsNENBQVksSUFBWjtBQUNBLFNBQUssSUFBSSxHQUFULElBQWdCLFVBQWhCLEVBQTRCO0FBQzFCLGNBQVEsR0FBUiwyQ0FBWSxHQUFaO0FBQ0EsV0FBSyxHQUFMLElBQVksV0FBVyxHQUFYLENBQVo7QUFDRDtBQUNELFlBQVEsR0FBUiw0Q0FBWSxJQUFaO0FBQ0EsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0EsUUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxRQUFJLFlBQVksS0FBSyxTQUFyQjtBQUNBLFNBQUssU0FBTCxHQUFpQixJQUFJLFlBQUosQ0FBaUIsS0FBSyxTQUF0QixFQUFpQyxFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUFqQyxDQUFqQjtBQUNELEdBZGlCOztBQWdCbkI7Ozs7O0FBS0MsbUJBQWlCLFVBQVUsZ0JBQVYsRUFBNEI7QUFDM0MsV0FBTyxLQUFLLFNBQUwsQ0FBZSxlQUFmLENBQStCLGdCQUEvQixDQUFQO0FBQ0QsR0F2QmlCOztBQXlCbkI7Ozs7O0FBS0MsMkJBQXlCLFVBQVUsZ0JBQVYsRUFBNEI7QUFDbkQsV0FBTyxLQUFLLFNBQUwsQ0FBZSx1QkFBZixDQUF1QyxnQkFBdkMsQ0FBUDtBQUNELEdBaENpQjs7QUFrQ25COzs7O0FBSUMsa0JBQWdCLFlBQVk7QUFDMUIsUUFBSSxNQUFNLENBQUMsT0FBRCxDQUFWO0FBQ0EsU0FBSyxTQUFMLENBQWUsT0FBZixDQUF1QixVQUFVLFFBQVYsRUFBb0I7QUFDekMsVUFBSSxJQUFKLENBQVMsU0FBUyxFQUFsQjtBQUNELEtBRkQ7QUFHQSxXQUFPLEdBQVA7QUFDRCxHQTVDaUI7O0FBOENuQjs7OztBQUlDLGdDQUE4QixZQUFZO0FBQ3hDLFFBQUksTUFBTSxDQUFDLE9BQUQsQ0FBVjtBQUNBLFNBQUssU0FBTCxDQUFlLE9BQWYsQ0FBdUIsVUFBVSxRQUFWLEVBQW9CO0FBQ3pDLFVBQUksU0FBUyxxQkFBVCxFQUFKLEVBQXNDO0FBQ3BDLFlBQUksSUFBSixDQUFTLFNBQVMsRUFBbEI7QUFDRDtBQUNGLEtBSkQ7QUFLQSxXQUFPLEdBQVA7QUFDRCxHQTFEaUI7O0FBNERsQixnQkFBYyxZQUFZO0FBQ3hCLFFBQUksWUFBWSxLQUFLLFFBQXJCO0FBQ0Y7QUFDRSxRQUFJLEtBQUssUUFBTCxDQUFjLElBQWQsS0FBdUIsU0FBM0IsRUFBc0M7QUFDcEMsa0JBQVksQ0FBQyxTQUFELENBQVo7QUFDRDs7QUFFRCxRQUFJLE9BQU8sRUFBWDtBQUNBLGNBQVUsT0FBVixDQUFrQixVQUFVLFFBQVYsRUFBb0I7QUFDdkM7QUFDRyxVQUFJLE9BQU8sVUFBVSxHQUFWLEVBQWUsTUFBZixFQUF1QjtBQUNoQyxlQUFPLElBQUksTUFBSixHQUFhLE1BQXBCLEVBQTRCO0FBQUUsZ0JBQU0sTUFBTSxHQUFaO0FBQWlCO0FBQy9DLGVBQU8sR0FBUDtBQUNELE9BSEQ7O0FBS0EsVUFBSSxLQUFLLHNDQUFUO0FBQ0EsVUFBSSxVQUFVLFNBQVMsS0FBVCxDQUFlLEVBQWYsQ0FBZDtBQUNBLFVBQUksT0FBSixFQUFhO0FBQ1gsWUFBSSxXQUFXLFFBQVEsQ0FBUixDQUFmO0FBQ0EsWUFBSSxTQUFTLFFBQVEsQ0FBUixDQUFiO0FBQ0EsWUFBSSxRQUFRLFNBQVMsUUFBVCxDQUFaO0FBQ0EsWUFBSSxNQUFNLFNBQVMsTUFBVCxDQUFWO0FBQ0EsWUFBSSxjQUFjLENBQWxCO0FBQ0EsZ0JBQVEsR0FBUixtREFBWSxRQUFRLENBQVIsQ0FBWjtBQUNBLFlBQUksUUFBUSxDQUFSLE1BQWUsU0FBbkIsRUFBOEI7QUFDNUIsd0JBQWMsU0FBUyxRQUFRLENBQVIsQ0FBVCxDQUFkO0FBQ0Q7QUFDRCxhQUFLLElBQUksSUFBSSxLQUFiLEVBQW9CLEtBQUssR0FBekIsRUFBOEIsS0FBSyxXQUFuQyxFQUFnRDtBQUNuRDtBQUNLLGNBQUksU0FBUyxNQUFULEtBQW9CLE9BQU8sTUFBL0IsRUFBdUM7QUFDckMsaUJBQUssSUFBTCxDQUFVLFFBQVEsQ0FBUixJQUFhLEtBQUssRUFBRSxRQUFGLEVBQUwsRUFBbUIsU0FBUyxNQUE1QixDQUFiLEdBQW1ELFFBQVEsQ0FBUixDQUE3RDtBQUNELFdBRkQsTUFFTztBQUNMLGlCQUFLLElBQUwsQ0FBVSxRQUFRLENBQVIsSUFBYSxDQUFiLEdBQWlCLFFBQVEsQ0FBUixDQUEzQjtBQUNEO0FBQ0Y7QUFDRCxlQUFPLElBQVA7QUFDRCxPQW5CRCxNQW1CTztBQUNMLGFBQUssSUFBTCxDQUFVLFFBQVY7QUFDRDtBQUNGLEtBL0JEOztBQWlDQSxXQUFPLElBQVA7QUFDRCxHQXRHaUI7O0FBd0dsQixrQkFBZ0IsVUFBVSxRQUFWLEVBQW9CLFlBQXBCLEVBQWtDO0FBQ2xEO0FBQ0UsUUFBSSxhQUFhLFNBQWpCLEVBQTRCO0FBQ2hDLFVBQUksSUFBSSxLQUFLLENBQWI7QUFDQSxVQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFVBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ00saUJBQVcsSUFBSSxRQUFKLENBQWEsWUFBYixFQUEyQixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUEzQixDQUFYO0FBQ0Q7O0FBRUg7QUFDRSxRQUFJLFNBQVMsRUFBVCxLQUFnQixTQUFoQixJQUE2QixTQUFTLEVBQVQsS0FBZ0IsYUFBYSxFQUE5RCxFQUFrRTtBQUNoRSxXQUFLLFNBQUwsQ0FBZSxPQUFmLENBQXVCLFVBQVUsZUFBVixFQUEyQjtBQUNoRCx3QkFBZ0Isb0JBQWhCLENBQXFDLFNBQVMsRUFBOUMsRUFBa0QsYUFBYSxFQUEvRDtBQUNELE9BRkQ7O0FBSUg7QUFDRyxVQUFJLE1BQU0sYUFBYSxlQUFiLENBQTZCLE9BQTdCLENBQXFDLFNBQVMsRUFBOUMsQ0FBVjtBQUNBLFVBQUksUUFBUSxDQUFDLENBQWIsRUFBZ0I7QUFDZCxxQkFBYSxlQUFiLENBQTZCLE1BQTdCLENBQW9DLEdBQXBDLEVBQXlDLENBQXpDLEVBQTRDLGFBQWEsRUFBekQ7QUFDRDtBQUNGOztBQUVELGFBQVMsVUFBVCxDQUFvQixZQUFwQjs7QUFFQSxRQUFJLEtBQUssY0FBTCxHQUFzQixPQUF0QixDQUE4QixTQUFTLEVBQXZDLE1BQStDLENBQUMsQ0FBcEQsRUFBdUQ7QUFDckQsV0FBSyxTQUFMLENBQWUsSUFBZixDQUFvQixRQUFwQjtBQUNEO0FBQ0YsR0FuSWlCO0FBb0lsQixrQkFBZ0IsVUFBVSxnQkFBVixFQUE0QjtBQUMxQyxTQUFLLFNBQUwsQ0FBZSxPQUFmLENBQXVCLFVBQVUsUUFBVixFQUFvQjtBQUN6QyxVQUFJLFNBQVMsaUJBQVQsQ0FBMkIsaUJBQWlCLEVBQTVDLENBQUosRUFBcUQ7QUFDbkQsaUJBQVMsb0JBQVQsQ0FBOEIsaUJBQWlCLEVBQS9DO0FBQ0EsWUFBSSxTQUFTLGVBQVQsQ0FBeUIsTUFBekIsS0FBb0MsQ0FBeEMsRUFBMkM7QUFDekMsZUFBSyxjQUFMLENBQW9CLFFBQXBCO0FBQ0Q7QUFDRjtBQUNGLEtBUHNCLENBT3JCLElBUHFCLENBT2hCLElBUGdCLENBQXZCOztBQVNBLFNBQUssSUFBSSxDQUFULElBQWMsS0FBSyxTQUFuQixFQUE4QjtBQUM1QixVQUFJLEtBQUssU0FBTCxDQUFlLENBQWYsRUFBa0IsRUFBbEIsS0FBeUIsaUJBQWlCLEVBQTlDLEVBQWtEO0FBQ2hELGFBQUssU0FBTCxDQUFlLE1BQWYsQ0FBc0IsQ0FBdEIsRUFBeUIsQ0FBekI7QUFDQTtBQUNEO0FBQ0Y7QUFDRixHQXBKaUI7QUFxSmxCLGtCQUFnQixZQUFZO0FBQzFCLFdBQU8sS0FBSyxHQUFMLENBQVMsT0FBVCxDQUFpQixLQUFqQixFQUF3QixHQUF4QixDQUFQO0FBQ0QsR0F2SmlCO0FBd0psQixpQkFBZSxZQUFZO0FBQ3pCLFFBQUksYUFBYSxLQUFLLEtBQUwsQ0FBVyxLQUFLLFNBQUwsQ0FBZSxJQUFmLENBQVgsQ0FBakI7QUFDQSxXQUFPLFdBQVcsSUFBbEI7QUFDQSxXQUFPLEtBQUssU0FBTCxDQUFlLFVBQWYsQ0FBUDtBQUNELEdBNUppQjtBQTZKbEIsaUJBQWUsVUFBVSxXQUFWLEVBQXVCO0FBQ3BDLFFBQUksYUFBYSxLQUFLLEtBQUwsQ0FBVyxXQUFYLENBQWpCO0FBQ0EsU0FBSyxRQUFMLENBQWMsVUFBZDtBQUNELEdBaEtpQjtBQWlLbkI7QUFDQyxrQkFBZ0IsWUFBWTtBQUMxQixRQUFJLFVBQVUsRUFBZDtBQUNBLFNBQUssU0FBTCxDQUFlLE9BQWYsQ0FBdUIsVUFBVSxRQUFWLEVBQW9CO0FBQ3pDLGdCQUFVLFFBQVEsTUFBUixDQUFlLFNBQVMsY0FBVCxFQUFmLENBQVY7QUFDRCxLQUZEOztBQUlBLFdBQU8sT0FBUDtBQUNELEdBektpQjtBQTBLbEIsd0JBQXNCLFVBQVUsSUFBVixFQUFnQjtBQUNwQyxRQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNBLFFBQUksVUFBVSxLQUFLLGNBQUwsRUFBZDtBQUFBLFFBQ0UsWUFBWSxHQURkO0FBQUEsUUFFRSxVQUFVLElBRlo7QUFBQSxRQUdFLFVBQVUsQ0FBQyxRQUFELENBSFosQ0FGb0MsQ0FLYjs7QUFFekI7QUFDRSxZQUFRLElBQVIsQ0FBYSxRQUFRLElBQVIsQ0FBYSxTQUFiLElBQTBCLE9BQXZDOztBQUVGO0FBQ0UsU0FBSyxPQUFMLENBQWEsVUFBVSxHQUFWLEVBQWU7QUFDMUIsVUFBSSxVQUFVLEVBQWQ7QUFDQSxjQUFRLE9BQVIsQ0FBZ0IsVUFBVSxNQUFWLEVBQWtCO0FBQ2hDLFlBQUksV0FBVyxJQUFJLE1BQUosQ0FBZjtBQUNBLFlBQUksYUFBYSxTQUFqQixFQUE0QjtBQUMxQixxQkFBVyxFQUFYO0FBQ0QsU0FGRCxNQUVVLElBQUksT0FBTyxRQUFQLEtBQW9CLFFBQXhCLEVBQWtDO0FBQzFDLHFCQUFXLEtBQUssU0FBTCxDQUFlLFFBQWYsQ0FBWDtBQUNEOztBQUVELGdCQUFRLElBQVIsQ0FBYSxNQUFNLFNBQVMsT0FBVCxDQUFpQixJQUFqQixFQUF1QixJQUF2QixFQUE2QixJQUE3QixFQUFOLEdBQTRDLEdBQXpEO0FBQ0QsT0FURDtBQVVBLGNBQVEsSUFBUixDQUFhLFFBQVEsSUFBUixDQUFhLFNBQWIsSUFBMEIsT0FBdkM7QUFDRCxLQWJEOztBQWVBLFdBQU8sSUFBSSxPQUFPLElBQVgsQ0FBZ0IsT0FBaEIsRUFBeUIsRUFBQyxNQUFNLFVBQVAsRUFBekIsQ0FBUDtBQUNELEdBck1pQjtBQXNNbEIsbUJBQWlCLFVBQVUsVUFBVixFQUFzQjtBQUNyQyxXQUFPLEtBQUssU0FBTCxDQUFlLGVBQWYsQ0FBK0IsVUFBL0IsQ0FBUDtBQUNELEdBeE1pQjtBQXlNbkI7Ozs7QUFJQyxTQUFPLFlBQVk7QUFDakIsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDQSxRQUFJLGFBQWEsS0FBSyxLQUFMLENBQVcsS0FBSyxTQUFMLENBQWUsSUFBZixDQUFYLENBQWpCO0FBQ0EsUUFBSSxVQUFVLElBQUksT0FBSixDQUFZLFVBQVosRUFBd0IsRUFBQyxDQUFELEVBQUksUUFBSixFQUFjLE1BQWQsRUFBeEIsQ0FBZDtBQUNBLFdBQU8sT0FBUDtBQUNEO0FBcE5pQixDQUFwQjs7QUF1TkEsT0FBTyxPQUFQLEdBQWlCLE9BQWpCOzs7QUNwUEEsSUFBSSxVQUFVLFFBQVEsV0FBUixDQUFkOztBQUVBLElBQUksUUFBUSxVQUFVLE1BQVYsRUFBa0IsT0FBbEIsRUFBMkI7QUFDckMsT0FBSyxNQUFMLEdBQWMsTUFBZDtBQUNBLE9BQUssQ0FBTCxHQUFTLFFBQVEsQ0FBakI7QUFDRixPQUFLLFFBQUwsR0FBZ0IsUUFBUSxRQUF4QjtBQUNBLE9BQUssTUFBTCxHQUFjLFFBQVEsTUFBdEI7QUFDRSxNQUFJLENBQUMsS0FBSyxDQUFWLEVBQWEsTUFBTSxJQUFJLEtBQUosQ0FBVSxpQkFBVixDQUFOO0FBQ2YsTUFBSSxDQUFDLEtBQUssUUFBVixFQUFvQixNQUFNLElBQUksS0FBSixDQUFVLGtCQUFWLENBQU47QUFDcEIsTUFBRyxDQUFDLEtBQUssTUFBVCxFQUFnQixNQUFNLElBQUksS0FBSixDQUFVLGdCQUFWLENBQU47QUFDWjtBQUNGLE9BQUssU0FBTCxHQUFpQixJQUFJLE9BQUosQ0FBWSxLQUFLLE1BQUwsQ0FBWSxTQUF4QixDQUFqQjtBQUNELENBVkQ7QUFXQSxJQUFJLDBCQUEwQixVQUFVLEVBQVYsRUFBYztBQUMxQyxPQUFLLEVBQUwsR0FBVSxFQUFWO0FBQ0QsQ0FGRDs7QUFJQSx3QkFBd0IsU0FBeEIsR0FBb0M7QUFDbEMsYUFBVyxVQUFVLElBQVYsRUFBZ0IsUUFBaEIsRUFBMEI7QUFDbkMsUUFBSSxLQUFLLE1BQUwsS0FBZ0IsQ0FBcEIsRUFBdUI7QUFDckI7QUFDRCxLQUZELE1BRU87QUFDTCxXQUFLLEVBQUwsQ0FBUSxRQUFSLENBQWlCLEVBQUMsTUFBTSxJQUFQLEVBQWpCLEVBQStCLFVBQVUsR0FBVixFQUFlLFFBQWYsRUFBeUI7QUFDdEQsWUFBSSxRQUFRLElBQVosRUFBa0I7QUFDaEIsa0JBQVEsR0FBUix1RkFBWSwyQ0FBWixFQUF5RCxHQUF6RDtBQUNEO0FBQ0Q7QUFDRCxPQUxEO0FBTUQ7QUFDRjtBQVppQyxDQUFwQzs7QUFlQSxNQUFNLFNBQU4sR0FBa0I7O0FBRWhCLDZCQUEyQixVQUFVLE1BQVYsRUFBa0I7QUFDM0MsV0FBTyxrQkFBa0IsT0FBTyxPQUFQLENBQWUseUJBQWYsRUFBMEMsR0FBMUMsQ0FBekI7QUFDRCxHQUplO0FBS2hCLDRCQUEwQixVQUFVLFNBQVYsRUFBcUI7QUFDN0MsUUFBSSxTQUFTLEtBQUsseUJBQUwsQ0FBK0IsU0FBL0IsQ0FBYjtBQUNBLFdBQU8sS0FBSyxNQUFMLENBQVksTUFBWixHQUFxQixNQUE1QjtBQUNELEdBUmU7QUFTaEIsb0JBQWtCLFVBQVUsU0FBVixFQUFxQjtBQUNyQyxRQUFJLGFBQWEsS0FBSyx3QkFBTCxDQUE4QixTQUE5QixDQUFqQjtBQUNBLFdBQU8sSUFBSSxPQUFKLENBQVksVUFBWixDQUFQO0FBQ0QsR0FaZTs7QUFjakI7Ozs7O0FBS0MscUJBQW1CLFVBQVUsU0FBVixFQUFxQixRQUFyQixFQUErQjtBQUNoRCxRQUFJLGFBQWEsS0FBSyx3QkFBTCxDQUE4QixTQUE5QixDQUFqQjtBQUNBLFFBQUksUUFBUSxJQUFaOztBQUVBLFlBQVEsT0FBUixDQUFnQixVQUFoQixFQUE0QixZQUFZO0FBQ3RDLFVBQUksS0FBSyxNQUFNLGdCQUFOLENBQXVCLFNBQXZCLENBQVQ7QUFDQSxVQUFJLFdBQVcsSUFBSSx1QkFBSixDQUE0QixFQUE1QixDQUFmO0FBQ0EsZUFBUyxRQUFUO0FBQ0QsS0FKRDtBQUtELEdBNUJlOztBQThCaEIsaUJBQWUsVUFBVSxPQUFWLEVBQW1CLFFBQW5CLEVBQTZCO0FBQzFDLFFBQUksY0FBYyxLQUFLLEtBQUwsQ0FBVyxLQUFLLFNBQUwsQ0FBZSxPQUFmLENBQVgsQ0FBbEI7O0FBRUEsUUFBSSxDQUFDLFFBQVEsR0FBYixFQUFrQjtBQUNoQixjQUFRLEdBQVIsbUZBQVksbUNBQVosRUFBaUQsT0FBakQ7QUFDRDs7QUFFRCxTQUFLLFNBQUwsQ0FBZSxHQUFmLENBQW1CLFdBQW5CLEVBQWdDLFVBQVUsT0FBVixFQUFtQixHQUFuQixFQUF3QixRQUF4QixFQUFrQztBQUMxRDtBQUNOLGNBQVEsSUFBUixHQUFlLFNBQVMsR0FBeEI7QUFDQSxlQUFTLE9BQVQ7QUFDRCxLQUorQixDQUk5QixJQUo4QixDQUl6QixJQUp5QixFQUluQixPQUptQixDQUFoQztBQUtELEdBMUNlO0FBMkNoQixlQUFhLFVBQVUsT0FBVixFQUFtQixRQUFuQixFQUE2QjtBQUNwQztBQUNKLFNBQUssYUFBTCxDQUFtQixPQUFuQixFQUE0QixRQUE1QjtBQUNELEdBOUNlO0FBK0NoQixpQkFBZSxVQUFVLE9BQVYsRUFBbUIsUUFBbkIsRUFBNkI7QUFDMUMsY0FBVSxLQUFLLEtBQUwsQ0FBVyxLQUFLLFNBQUwsQ0FBZSxPQUFmLENBQVgsQ0FBVjs7QUFFQSxTQUFLLFNBQUwsQ0FBZSxNQUFmLENBQXNCLE9BQXRCLEVBQStCLFVBQVUsR0FBVixFQUFlLFFBQWYsRUFBeUI7QUFDaEQ7O0FBRVQ7QUFDRyxVQUFJLGFBQWEsS0FBSyx3QkFBTCxDQUE4QixRQUFRLEdBQXRDLENBQWpCO0FBQ0EsY0FBUSxPQUFSLENBQWdCLFVBQWhCLEVBQTRCLFlBQVk7QUFDdEM7QUFDRCxPQUZEO0FBR0QsS0FSOEIsQ0FRN0IsSUFSNkIsQ0FReEIsSUFSd0IsQ0FBL0I7QUFTRCxHQTNEZTtBQTREaEIsa0JBQWdCLFVBQVUsUUFBVixFQUFvQjtBQUNsQyxRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0osUUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxRQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNJLFNBQUssU0FBTCxDQUFlLE9BQWYsQ0FBdUIsRUFBQyxjQUFjLElBQWYsRUFBdkIsRUFBNkMsVUFBVSxHQUFWLEVBQWUsUUFBZixFQUF5QjtBQUNwRSxVQUFJLFdBQVcsRUFBZjtBQUNBLFdBQUssSUFBSSxDQUFULElBQWMsU0FBUyxJQUF2QixFQUE2QjtBQUMzQixZQUFJLFVBQVUsU0FBUyxJQUFULENBQWMsQ0FBZCxFQUFpQixHQUEvQjtBQUNBLFlBQUksQ0FBQyxPQUFPLFNBQVosRUFBdUI7QUFDckIsb0JBQVUsSUFBSSxPQUFKLENBQVksT0FBWixFQUFxQixFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUFyQixDQUFWO0FBQ0Q7O0FBRUQsaUJBQVMsSUFBVCxDQUFjLE9BQWQ7QUFDRDtBQUNELGVBQVMsUUFBVDtBQUNELEtBWEQ7QUFZRCxHQTVFZTs7QUE4RWhCLGtCQUFnQixVQUFVLE9BQVYsRUFBbUIsUUFBbkIsRUFBNkI7QUFDM0MsUUFBSSxLQUFLLEtBQUssZ0JBQUwsQ0FBc0IsUUFBUSxHQUE5QixDQUFUO0FBQ0EsT0FBRyxPQUFILENBQVcsRUFBQyxjQUFjLElBQWYsRUFBWCxFQUFpQyxVQUFVLEdBQVYsRUFBZSxRQUFmLEVBQXlCO0FBQ3hELFVBQUksZUFBZSxFQUFuQjtBQUNBLFdBQUssSUFBSSxDQUFULElBQWMsU0FBUyxJQUF2QixFQUE2QjtBQUMzQixZQUFJLE1BQU0sU0FBUyxJQUFULENBQWMsQ0FBZCxFQUFpQixHQUEzQjtBQUNBLHFCQUFhLElBQWIsQ0FBa0IsR0FBbEI7QUFDRDtBQUNELGVBQVMsWUFBVDtBQUNELEtBUEQ7QUFRRCxHQXhGZTtBQXlGakI7QUFDQyxpQkFBZSxVQUFVLFNBQVYsRUFBcUIsUUFBckIsRUFBK0I7QUFDNUMsU0FBSyxjQUFMLENBQW9CLFVBQVUsUUFBVixFQUFvQjtBQUN0QyxVQUFJLGVBQWUsS0FBbkI7QUFDQSxXQUFLLElBQUksQ0FBVCxJQUFjLFFBQWQsRUFBd0I7QUFDdEIsWUFBSSxTQUFTLENBQVQsRUFBWSxHQUFaLEtBQW9CLFNBQXhCLEVBQW1DO0FBQ2pDLHlCQUFlLElBQWY7QUFDRDtBQUNGO0FBQ0QsZUFBUyxZQUFUO0FBQ0QsS0FSRDtBQVNEO0FBcEdlLENBQWxCOztBQXVHQSxPQUFPLE9BQVAsR0FBaUIsS0FBakI7OztBQ3ZJQSxJQUFJLGNBQWMsUUFBUSxjQUFSLEVBQXdCLFdBQTFDO0FBQ0E7O0FBRUE7Ozs7QUFJQSxTQUFTLGlCQUFULENBQTRCLDBCQUE1QixFQUF3RCxPQUF4RCxFQUFpRTtBQUMvRCxNQUFJLElBQUksUUFBUSxDQUFoQjtBQUNBLE1BQUksU0FBUyxRQUFRLE1BQXJCO0FBQ0EsTUFBSSxXQUFXLFFBQVEsUUFBdkI7O0FBRUEsU0FBTyxjQUFQLENBQXNCLElBQXRCLEVBQTRCLEdBQTVCLEVBQWlDO0FBQy9CLFdBQU8sQ0FEd0I7QUFFL0IsZ0JBQVk7QUFGbUIsR0FBakM7QUFJQSxTQUFPLGNBQVAsQ0FBc0IsSUFBdEIsRUFBNEIsUUFBNUIsRUFBc0M7QUFDcEMsV0FBTyxNQUQ2QjtBQUVwQyxnQkFBWTtBQUZ3QixHQUF0QztBQUlBLFNBQU8sY0FBUCxDQUFzQixJQUF0QixFQUE0QixVQUE1QixFQUF3QztBQUN0QyxXQUFPLFFBRCtCO0FBRXRDLGdCQUFZO0FBRjBCLEdBQXhDO0FBSUEsTUFBSSxDQUFDLEtBQUssQ0FBVixFQUFhLE1BQU0sSUFBSSxLQUFKLENBQVUsaUJBQVYsQ0FBTjtBQUNiLE1BQUksQ0FBQyxLQUFLLFFBQVYsRUFBb0I7QUFDbEIsVUFBTSxJQUFJLEtBQUosQ0FBVSxrQkFBVixDQUFOO0FBQ0Q7QUFDRCxNQUFHLENBQUMsS0FBSyxNQUFULEVBQWlCLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0JBQVYsQ0FBTjtBQUNmLE9BQUssMEJBQUwsR0FBa0MsMEJBQWxDO0FBQ0EsT0FBSyxhQUFMLEdBQXFCLEVBQXJCO0FBQ0Q7O0FBRUgsa0JBQWtCLFNBQWxCLEdBQThCLEVBQTlCOztBQUVBLGtCQUFrQixTQUFsQixDQUE0QixJQUE1QixHQUFtQyxVQUFVLE9BQVYsRUFBbUI7QUFDcEQsTUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNGLE1BQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsTUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDRSxNQUFJLEtBQUssT0FBTCxDQUFhLE9BQWIsQ0FBSixFQUEyQjtBQUN6QixXQUFPLEtBQVA7QUFDRCxHQUZELE1BRU87QUFDTCxRQUFJLGtCQUFrQixLQUFLLGtCQUFMLENBQXdCLE9BQXhCLENBQXRCO0FBQ0EsU0FBSyxhQUFMLENBQW1CLGVBQW5CLElBQXNDLElBQXRDO0FBQ0EsVUFBTSxTQUFOLENBQWdCLElBQWhCLENBQXFCLElBQXJCLENBQTBCLElBQTFCLEVBQWdDLEVBQUUsT0FBRixFQUFXLEtBQVgsQ0FBaUIsSUFBakIsRUFBdUIsQ0FBdkIsQ0FBaEM7QUFDQSxXQUFPLElBQVA7QUFDRDtBQUNGLENBWkQ7O0FBY0Esa0JBQWtCLFNBQWxCLENBQTRCLGtCQUE1QixHQUFpRCxVQUFVLE9BQVYsRUFBbUI7QUFDbEUsTUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNGLE1BQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsTUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDRSxNQUFJLEtBQUssMEJBQUwsS0FBb0MsWUFBeEMsRUFBc0Q7QUFDcEQsUUFBSSxjQUFjLEVBQUUsT0FBRixFQUFXLElBQVgsR0FBa0IsSUFBbEIsRUFBbEI7QUFDQSxXQUFPLFdBQVA7QUFDRCxHQUhELE1BR08sSUFBSSxLQUFLLDBCQUFMLEtBQW9DLGdCQUF4QyxFQUEwRDtBQUMvRCxRQUFJLGNBQWMsRUFBRSxrREFBRixFQUFzRCxNQUF0RCxDQUE2RCxFQUFFLE9BQUYsRUFBVyxFQUFYLENBQWMsQ0FBZCxFQUFpQixLQUFqQixFQUE3RCxFQUF1RixJQUF2RixFQUFsQjtBQUNBLFdBQU8sV0FBUDtBQUNELEdBSE0sTUFHQSxJQUFJLEtBQUssMEJBQUwsS0FBb0MsWUFBeEMsRUFBc0Q7QUFDN0Q7QUFDRSxRQUFJLFdBQVcsRUFBRSxPQUFGLEVBQVcsRUFBWCxDQUFjLENBQWQsRUFBaUIsS0FBakIsRUFBZjs7QUFFQSxRQUFJLGFBQWEsVUFBVSxRQUFWLEVBQW9CO0FBQ25DLGVBQVMsUUFBVCxHQUNELE1BREMsQ0FDTSxZQUFZO0FBQ3RCLFlBQUksS0FBSyxRQUFMLEtBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCLHFCQUFXLEVBQUUsSUFBRixDQUFYO0FBQ0Q7QUFDRCxlQUFPLEtBQUssUUFBTCxJQUFpQixDQUF4QixDQUpzQixDQUlJO0FBQzNCLE9BTkssRUFNSCxNQU5HO0FBT0QsS0FSRDtBQVNBLGVBQVcsUUFBWDs7QUFFQSxRQUFJLGNBQWMsRUFBRSxrREFBRixFQUFzRCxNQUF0RCxDQUE2RCxRQUE3RCxFQUF1RSxJQUF2RSxFQUFsQjtBQUNBLFdBQU8sV0FBUDtBQUNELEdBakJNLE1BaUJBLElBQUksS0FBSywwQkFBTCxLQUFvQyxtQkFBeEMsRUFBNkQ7QUFDbEUsUUFBSSxLQUFLLElBQUksV0FBSixDQUFnQjtBQUN2QixnQ0FBMEIsS0FESDtBQUV2QixjQUFRLEVBQUUsTUFBRixFQUFVLENBQVYsQ0FGZTtBQUd2Qiw2QkFBdUI7QUFIQSxLQUFoQixDQUFUO0FBS0EsUUFBSSxjQUFjLEdBQUcsY0FBSCxDQUFrQixDQUFDLE9BQUQsQ0FBbEIsQ0FBbEI7QUFDQSxXQUFPLFdBQVA7QUFDRCxHQVJNLE1BUUE7QUFDTCxVQUFNLHdDQUF3QyxLQUFLLDBCQUFuRDtBQUNEO0FBQ0YsQ0F0Q0Q7O0FBd0NBLE9BQU8sT0FBUCxHQUFpQixpQkFBakI7O0FBRUEsa0JBQWtCLFNBQWxCLENBQTRCLE9BQTVCLEdBQXNDLFVBQVUsT0FBVixFQUFtQjtBQUN2RCxNQUFJLGtCQUFrQixLQUFLLGtCQUFMLENBQXdCLE9BQXhCLENBQXRCO0FBQ0EsTUFBSSxVQUFVLG1CQUFtQixLQUFLLGFBQXRDO0FBQ0EsU0FBTyxPQUFQO0FBQ0QsQ0FKRDs7O0FDM0ZBO0FBQ0EsTUFBTSxPQUFPLFFBQVEsWUFBUixDQUFiO0FBQ0EsTUFBTSxxQkFBcUIsUUFBUSxzQkFBUixDQUEzQjtBQUNBLElBQUksaUJBQWlCLFFBQVEsaUJBQVIsQ0FBckI7QUFDQSxJQUFJLHVCQUF1QixRQUFRLHVDQUFSLENBQTNCOztBQUVBLE1BQU0sa0JBQWtCLFVBQVUsT0FBVixFQUFtQixXQUFuQixFQUFnQztBQUN0RCxPQUFLLGFBQUwsR0FBcUIsUUFBUSxhQUE3QjtBQUNBLFFBQU0sV0FBVyxFQUFqQjtBQUNBLE9BQUssUUFBTCxHQUFnQixRQUFoQjs7QUFFQSxPQUFLLE1BQUwsR0FBYyxLQUFLLGtCQUFMLENBQWQ7O0FBRUEsT0FBSyxNQUFMLENBQVksZ0JBQVosQ0FBNkIsU0FBN0IsRUFBd0MsVUFBVSxFQUFWLEVBQWM7QUFDcEQsVUFBTSxPQUFPLEdBQUcsSUFBaEI7QUFDQSxRQUFJLENBQUMsS0FBSyxJQUFWLEVBQWdCO0FBQ2QsYUFBTyxRQUFRLEtBQVIsd0RBQWMsS0FBSyxHQUFuQixDQUFQO0FBQ0Q7QUFDRCxRQUFJLEtBQUssSUFBTCxJQUFhLENBQUMsU0FBUyxLQUFLLElBQWQsQ0FBbEIsRUFBdUM7QUFDckMsYUFBTyxRQUFRLEtBQVIsMEVBQWMsY0FBZCxFQUE4QixLQUFLLElBQW5DLENBQVA7QUFDRDtBQUNELFFBQUksS0FBSyxHQUFULEVBQWM7QUFDWixjQUFRLEtBQVIsd0RBQWMsS0FBSyxHQUFuQjtBQUNBLGVBQVMsS0FBSyxJQUFkLEVBQW9CLE1BQXBCLENBQTJCLElBQUksS0FBSixDQUFVLEtBQUssR0FBZixDQUEzQjtBQUNBLGFBQU8sU0FBUyxLQUFLLElBQWQsQ0FBUDtBQUNBO0FBQ0Q7QUFDRCxhQUFTLEtBQUssSUFBZCxFQUFvQixPQUFwQixDQUE0QixLQUFLLElBQWpDO0FBQ0EsV0FBTyxTQUFTLEtBQUssSUFBZCxDQUFQO0FBQ0QsR0FoQkQ7QUFpQkEsT0FBSyxNQUFMLENBQVksV0FBWixDQUF3QjtBQUN0QixXQUFPLE1BRGU7QUFFdEIsVUFBTSxNQUZnQjtBQUd0QjtBQUhzQixHQUF4QjtBQUtBLFdBQVMsSUFBVCxHQUFnQjtBQUNkLGFBQVMsWUFBWTtBQUNuQixjQUFRLEdBQVIsd0VBQVksc0JBQVo7QUFDRCxLQUhhO0FBSWQsWUFBUSxVQUFVLEdBQVYsRUFBZTtBQUNyQixjQUFRLEtBQVIsbURBQWMsR0FBZDtBQUNEO0FBTmEsR0FBaEI7QUFRRCxDQXJDRDs7QUF1Q0EsZ0JBQWdCLFNBQWhCLEdBQTRCO0FBQzFCLFdBQVMsVUFBVSxHQUFWLEVBQWUsUUFBZixFQUF5QjtBQUNoQyxVQUFNLE9BQU8sU0FBUyxLQUFLLE1BQUwsS0FBZ0IsT0FBekIsRUFBa0MsUUFBbEMsRUFBYjtBQUNBLFFBQUksR0FBSixFQUFTLEdBQVQ7QUFDQSxVQUFNLFVBQVUsSUFBSSxPQUFKLENBQVksVUFBVSxPQUFWLEVBQW1CLE1BQW5CLEVBQTJCO0FBQ3JELFlBQU0sT0FBTjtBQUNBLFlBQU0sTUFBTjtBQUNELEtBSGUsQ0FBaEI7QUFJQSxTQUFLLFFBQUwsQ0FBYyxJQUFkLElBQXNCLEVBQUMsU0FBUyxHQUFWLEVBQWUsUUFBUSxHQUF2QixFQUF0QjtBQUNBLFNBQUssTUFBTCxDQUFZLFdBQVosQ0FBd0I7QUFDdEIsYUFBTyxTQURlO0FBRXRCLFNBRnNCO0FBR3RCO0FBSHNCLEtBQXhCO0FBS0EsWUFBUSxJQUFSLENBQWEsVUFBVSxJQUFWLEVBQWdCO0FBQzNCO0FBQ0QsS0FGRCxFQUVHLFVBQVUsR0FBVixFQUFlO0FBQUMsZUFBUyxHQUFUO0FBQWMsS0FGakM7QUFHRCxHQWpCeUI7QUFrQjFCLGNBQVksVUFBVSxNQUFWLEVBQWtCLGNBQWxCLEVBQWtDO0FBQzVDLFFBQUksbUJBQW1CLGVBQWUsUUFBZixFQUF2QjtBQUNBLFFBQUksMEJBQTBCLEVBQTlCO0FBQ0EsUUFBSSxlQUFlLGdCQUFnQixNQUFuQztBQUNBLFNBQUssSUFBSSxJQUFULElBQWlCLE1BQWpCLEVBQXlCO0FBQ3ZCLFVBQUksS0FBSyxNQUFMLENBQVksQ0FBWixFQUFlLFlBQWYsTUFBaUMsZUFBckMsRUFBc0Q7QUFDcEQsY0FBTSxJQUFJLEtBQUosQ0FBVSx5Q0FBVixDQUFOO0FBQ0Q7QUFDRjtBQUNELHlCQUFxQix1QkFBckIsRUFBOEMsSUFBOUMsQ0FBbUQsWUFBWTtBQUM3RCx1QkFBaUIsT0FBakI7QUFDRCxLQUZEOztBQUlBLFdBQU8saUJBQWlCLE9BQWpCLEVBQVA7QUFDRCxHQWhDeUI7QUFpQzFCLGFBQVcsVUFBVSxHQUFWLEVBQWUsT0FBZixFQUF3QixnQkFBeEIsRUFBMEMsUUFBMUMsRUFBb0QsS0FBcEQsRUFBMkQ7QUFDcEUsVUFBTSxPQUFPLFNBQVMsS0FBSyxNQUFMLEtBQWdCLE9BQXpCLEVBQWtDLFFBQWxDLEVBQWI7QUFDQSxRQUFJLEdBQUosRUFBUyxHQUFUO0FBQ0EsVUFBTSxVQUFVLElBQUksT0FBSixDQUFZLFVBQVUsT0FBVixFQUFtQixNQUFuQixFQUEyQjtBQUNyRCxZQUFNLE9BQU47QUFDQSxZQUFNLE1BQU47QUFDRCxLQUhlLENBQWhCO0FBSUEsU0FBSyxRQUFMLENBQWMsSUFBZCxJQUFzQixFQUFDLFNBQVMsR0FBVixFQUFlLFFBQVEsR0FBdkIsRUFBdEI7QUFDQSxTQUFLLE1BQUwsQ0FBWSxXQUFaLENBQXdCO0FBQ3RCLGFBQU8sV0FEZTtBQUV0QixTQUZzQjtBQUd0QixVQUhzQjtBQUl0QixlQUFTLEtBQUssS0FBTCxDQUFXLEtBQUssU0FBTCxDQUFlLE9BQWYsQ0FBWCxDQUphO0FBS3RCO0FBTHNCLEtBQXhCO0FBT0EsWUFBUSxJQUFSLENBQWEsVUFBVSxJQUFWLEVBQWdCO0FBQzNCLGVBQVMsSUFBVCxDQUFjLEtBQWQsRUFBcUIsSUFBckIsRUFBMkIsS0FBSyxPQUFoQztBQUNELEtBRkQsRUFFRyxVQUFVLEdBQVYsRUFBZTtBQUNoQixlQUFTLEdBQVQ7QUFDRCxLQUpEO0FBS0QsR0FyRHlCO0FBc0QxQixTQUFPLFlBQVk7QUFDakIsWUFBUSxHQUFSLDZFQUFZLDBCQUFaO0FBQ0EsUUFBSSxLQUFLLE1BQVQsRUFBaUIsS0FBSyxNQUFMLENBQVksU0FBWjtBQUNqQixTQUFLLE1BQUwsR0FBYyxJQUFkO0FBQ0Q7QUExRHlCLENBQTVCOztBQTZEQSxPQUFPLE9BQVAsR0FBaUIsZUFBakI7OztBQzFHQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiO0FBQ0EsSUFBSSxtQkFBbUIsUUFBUSxvQkFBUixDQUF2QjtBQUNBOzs7O0FBSUEsSUFBSSxzQkFBc0IsVUFBVSxRQUFWLEVBQW9CO0FBQzVDO0FBQ0EsTUFBSSxhQUFhLGtCQUFqQixFQUFxQztBQUNuQyxXQUFPLGdCQUFQO0FBQ0QsR0FGRCxNQUVPLElBQUksYUFBYSxVQUFiLElBQTJCLGFBQWEsZUFBNUMsRUFBNkQ7QUFDbEU7QUFDQSxRQUFJLG1CQUFtQixFQUF2Qjs7QUFFQSxXQUFPLElBQVAsQ0FBWSxnQkFBWixFQUE4QixPQUE5QixDQUFzQyxVQUFVLElBQVYsRUFBZ0I7QUFDcEQsVUFBSSxPQUFPLGlCQUFpQixJQUFqQixDQUFQLEtBQWtDLFVBQXRDLEVBQWtEO0FBQ2hELHlCQUFpQixJQUFqQixJQUF5QixVQUFVLE9BQVYsRUFBbUI7QUFDMUMsY0FBSSx3QkFBd0I7QUFDMUIsa0NBQXNCLElBREk7QUFFMUIsZ0JBQUksSUFGc0I7QUFHMUIscUJBQVM7QUFIaUIsV0FBNUI7O0FBTUEsY0FBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCOztBQUVBLGlCQUFPLE9BQVAsQ0FBZSxXQUFmLENBQTJCLHFCQUEzQixFQUFrRCxVQUFVLFFBQVYsRUFBb0I7QUFDcEUsNkJBQWlCLE9BQWpCLENBQXlCLFFBQXpCO0FBQ0QsV0FGRDs7QUFJQSxpQkFBTyxnQkFBUDtBQUNELFNBZEQ7QUFlRCxPQWhCRCxNQWdCTztBQUNMLHlCQUFpQixJQUFqQixJQUF5QixpQkFBaUIsSUFBakIsQ0FBekI7QUFDRDtBQUNGLEtBcEJEOztBQXNCQSxXQUFPLGdCQUFQO0FBQ0QsR0EzQk0sTUEyQkE7QUFDTCxVQUFNLElBQUksS0FBSixDQUFVLCtDQUErQyxRQUF6RCxDQUFOO0FBQ0Q7QUFDRixDQWxDRDs7QUFvQ0EsT0FBTyxPQUFQLEdBQWlCLG1CQUFqQjs7O0FDMUNBLElBQUksc0JBQXNCLFFBQVEsdUJBQVIsQ0FBMUI7QUFDQSxJQUFJLGdCQUFnQixRQUFRLGlCQUFSLENBQXBCO0FBQ0E7Ozs7OztBQU1BLElBQUksbUJBQW1CLFVBQVUsUUFBVixFQUFvQjtBQUN6QyxNQUFJLGFBQUo7O0FBRUE7QUFDQSxNQUFJLGFBQWEsZUFBakIsRUFBa0M7QUFDaEMsb0JBQWdCLGFBQWhCO0FBQ0Esa0JBQWMsZ0JBQWQsR0FBaUMsb0JBQW9CLGVBQXBCLENBQWpDO0FBQ0EsV0FBTyxhQUFQO0FBQ0QsR0FKRCxNQUlPLElBQUksYUFBYSxrQkFBYixJQUFtQyxhQUFhLFVBQXBELEVBQWdFO0FBQ3JFLFFBQUksbUJBQW1CLG9CQUFvQixRQUFwQixDQUF2Qjs7QUFFQTtBQUNBLG9CQUFnQixFQUFoQjtBQUNBLFdBQU8sSUFBUCxDQUFZLGFBQVosRUFBMkIsT0FBM0IsQ0FBbUMsVUFBVSxJQUFWLEVBQWdCO0FBQ2pELFVBQUksT0FBTyxjQUFjLElBQWQsQ0FBUCxLQUErQixVQUFuQyxFQUErQztBQUM3QyxzQkFBYyxJQUFkLElBQXNCLFVBQVUsT0FBVixFQUFtQjtBQUN2QyxjQUFJLHFCQUFxQjtBQUN2QiwrQkFBbUIsSUFESTtBQUV2QixnQkFBSSxJQUZtQjtBQUd2QixxQkFBUztBQUhjLFdBQXpCOztBQU1BLGlCQUFPLGlCQUFpQixvQkFBakIsQ0FBc0Msa0JBQXRDLENBQVA7QUFDRCxTQVJEO0FBU0QsT0FWRCxNQVVPO0FBQ0wsc0JBQWMsSUFBZCxJQUFzQixjQUFjLElBQWQsQ0FBdEI7QUFDRDtBQUNGLEtBZEQ7QUFlQSxrQkFBYyxnQkFBZCxHQUFpQyxnQkFBakM7QUFDQSxXQUFPLGFBQVA7QUFDRCxHQXRCTSxNQXNCQTtBQUNMLFVBQU0sSUFBSSxLQUFKLENBQVUsNENBQTRDLFFBQXRELENBQU47QUFDRDtBQUNGLENBakNEOztBQW1DQSxPQUFPLE9BQVAsR0FBaUIsZ0JBQWpCOzs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4MkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0WUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3YkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMW5CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcFVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDclFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDOU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMxZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDNVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1aUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbjJHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBOzs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2pHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNsR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDeENBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDakpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzVPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FDbG1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxcURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzVMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5cEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsdUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2hRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2piQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxNkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN01BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzV3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDL2lGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2haQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5WkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzcwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDOVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFJQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3bkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMvWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMzTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbGNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDektBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RMQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM5S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2pTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN0TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2plQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3akJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RNQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2dVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM3MENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3RWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDemlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ptQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDblJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbDFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3pHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6dkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzltQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3dkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbk9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL01BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDelFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4WkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDektBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbjBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5WUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaGVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDNVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3ZrQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2pPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNycE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbDhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsZ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzd3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzd0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3RHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcmhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL01BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcENBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3Q2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDckxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDL2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFJBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBOztBQ0RBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDN2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25TQTtBQUNBOzs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM3aURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3BEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNuUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6WEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzFaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNoVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6ZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2xKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNyUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDdHRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDclJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDL1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDelRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDcEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2hTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDOUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3h6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BOzs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcFBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3AxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNXRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN0eENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2ZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsInZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxuLyoqXG4gKiBAdXJsIGh0dHA6Ly9qc3BlcmYuY29tL2Jsb2ItYmFzZTY0LWNvbnZlcnNpb25cbiAqIEB0eXBlIHt7YmxvYlRvQmFzZTY0OiBibG9iVG9CYXNlNjQsIGJhc2U2NFRvQmxvYjogYmFzZTY0VG9CbG9ifX1cbiAqL1xudmFyIEJhc2U2NCA9IHtcblxuICBibG9iVG9CYXNlNjQ6IGZ1bmN0aW9uIChibG9iKSB7XG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBkYXRhVXJsID0gcmVhZGVyLnJlc3VsdFxuICAgICAgdmFyIGJhc2U2NCA9IGRhdGFVcmwuc3BsaXQoJywnKVsxXVxuICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKGJhc2U2NClcbiAgICB9XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYilcblxuICAgIHJldHVybiBkZWZlcnJlZFJlc3BvbnNlLnByb21pc2UoKVxuICB9LFxuXG4gIGJhc2U2NFRvQmxvYjogZnVuY3Rpb24gKGJhc2U2NCwgbWltZVR5cGUpIHtcbiAgICB2YXIgZGVmZXJyZWRSZXNwb25zZSA9IGpxdWVyeS5EZWZlcnJlZCgpXG4gICAgdmFyIGJpbmFyeSA9IGF0b2IoYmFzZTY0KVxuICAgIHZhciBsZW4gPSBiaW5hcnkubGVuZ3RoXG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihsZW4pXG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmlld1tpXSA9IGJpbmFyeS5jaGFyQ29kZUF0KGkpXG4gICAgfVxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW3ZpZXddLCB7dHlwZTogbWltZVR5cGV9KVxuICAgIGRlZmVycmVkUmVzcG9uc2UucmVzb2x2ZShibG9iKVxuXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2UucHJvbWlzZSgpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYXNlNjRcbiIsInZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxuLyoqXG4gKiBAYXV0aG9yIE1hcnRpbnMgQmFsb2Rpc1xuICpcbiAqIEFuIGFsdGVybmF0aXZlIHZlcnNpb24gb2YgJC53aGVuIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGV4ZWN1dGUgYXN5bmNocm9ub3VzXG4gKiBjYWxscyBzZXF1ZW50aWFsbHkgb25lIGFmdGVyIGFub3RoZXIuXG4gKlxuICogQHJldHVybnMganF1ZXJ5RGVmZXJyZWQoKS5wcm9taXNlKClcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB3aGVuQ2FsbFNlcXVlbnRpYWxseSAoZnVuY3Rpb25DYWxscykge1xuICB2YXIgZGVmZXJyZWRSZXNvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgdmFyIHJlc3VsdERhdGEgPSBbXVxuXG5cdC8vIG5vdGhpbmcgdG8gZG9cbiAgaWYgKGZ1bmN0aW9uQ2FsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGRlZmVycmVkUmVzb25zZS5yZXNvbHZlKHJlc3VsdERhdGEpLnByb21pc2UoKVxuICB9XG5cbiAgdmFyIGN1cnJlbnREZWZlcnJlZCA9IGZ1bmN0aW9uQ2FsbHMuc2hpZnQoKSgpXG5cdC8vIGV4ZWN1dGUgc3luY2hyb25vdXMgY2FsbHMgc3luY2hyb25vdXNseVxuICB3aGlsZSAoY3VycmVudERlZmVycmVkLnN0YXRlKCkgPT09ICdyZXNvbHZlZCcpIHtcbiAgICBjdXJyZW50RGVmZXJyZWQuZG9uZShmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmVzdWx0RGF0YS5wdXNoKGRhdGEpXG4gICAgfSlcbiAgICBpZiAoZnVuY3Rpb25DYWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBkZWZlcnJlZFJlc29uc2UucmVzb2x2ZShyZXN1bHREYXRhKS5wcm9taXNlKClcbiAgICB9XG4gICAgY3VycmVudERlZmVycmVkID0gZnVuY3Rpb25DYWxscy5zaGlmdCgpKClcbiAgfVxuXG5cdC8vIGhhbmRsZSBhc3luYyBjYWxsc1xuICB2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG5cdFx0Ly8gaGFuZGxlIG1peGVkIHN5bmMgY2FsbHNcbiAgICB3aGlsZSAoY3VycmVudERlZmVycmVkLnN0YXRlKCkgPT09ICdyZXNvbHZlZCcpIHtcbiAgICAgIGN1cnJlbnREZWZlcnJlZC5kb25lKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHJlc3VsdERhdGEucHVzaChkYXRhKVxuICAgICAgfSlcbiAgICAgIGlmIChmdW5jdGlvbkNhbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuICAgICAgICBkZWZlcnJlZFJlc29uc2UucmVzb2x2ZShyZXN1bHREYXRhKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY3VycmVudERlZmVycmVkID0gZnVuY3Rpb25DYWxscy5zaGlmdCgpKClcbiAgICB9XG4gIH0sIDEwKVxuXG4gIHJldHVybiBkZWZlcnJlZFJlc29uc2UucHJvbWlzZSgpXG59XG4iLCJ2YXIgQ29uZmlnID0gcmVxdWlyZSgnLi4vc2NyaXB0cy9Db25maWcnKVxudmFyIFN0b3JlID0gcmVxdWlyZSgnLi4vc2NyaXB0cy9TdG9yZScpXG52YXIgU2l0ZW1hcCA9IHJlcXVpcmUoJy4uL3NjcmlwdHMvU2l0ZW1hcCcpXG52YXIgUXVldWUgPSByZXF1aXJlKCcuLi9zY3JpcHRzL1F1ZXVlJylcbnZhciBTY3JhcGVyID0gcmVxdWlyZSgnLi4vc2NyaXB0cy9TY3JhcGVyJylcbnZhciBDaHJvbWVQb3B1cEJyb3dzZXIgPSByZXF1aXJlKCcuLi9zY3JpcHRzL0Nocm9tZVBvcHVwQnJvd3NlcicpXG5jb25zdCBXZWJKU0RPTUJyb3dzZXIgPSByZXF1aXJlKCcuLi9zY3JpcHRzL1dlYkpTRE9NQnJvd3NlcicpXG52YXIgZ2V0QmFja2dyb3VuZFNjcmlwdCA9IHJlcXVpcmUoJy4uL3NjcmlwdHMvZ2V0QmFja2dyb3VuZFNjcmlwdCcpXG52YXIgJCA9IHJlcXVpcmUoJ2pxdWVyeScpXG52YXIgY29uZmlnID0gbmV3IENvbmZpZygpXG52YXIgc3RvcmVcbmNvbmZpZy5sb2FkQ29uZmlndXJhdGlvbihmdW5jdGlvbiAoKSB7XG4gIGNvbnNvbGUubG9nKCdpbml0aWFsIGNvbmZpZ3VyYXRpb24nLCBjb25maWcpXG4gIHN0b3JlID0gbmV3IFN0b3JlKGNvbmZpZywgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxufSlcblxuY2hyb21lLnN0b3JhZ2Uub25DaGFuZ2VkLmFkZExpc3RlbmVyKGZ1bmN0aW9uICgpIHtcbiAgY29uZmlnLmxvYWRDb25maWd1cmF0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICBjb25zb2xlLmxvZygnY29uZmlndXJhdGlvbiBjaGFuZ2VkJywgY29uZmlnKVxuICAgIHN0b3JlID0gbmV3IFN0b3JlKGNvbmZpZywgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxuICB9KVxufSlcblxudmFyIHNlbmRUb0FjdGl2ZVRhYiA9IGZ1bmN0aW9uIChyZXF1ZXN0LCBjYWxsYmFjaykge1xuICBjaHJvbWUudGFicy5xdWVyeSh7XG4gICAgYWN0aXZlOiB0cnVlLFxuICAgIGN1cnJlbnRXaW5kb3c6IHRydWVcbiAgfSwgZnVuY3Rpb24gKHRhYnMpIHtcbiAgICBpZiAodGFicy5sZW5ndGggPCAxKSB7XG4gICAgICB0aGlzLmNvbnNvbGUubG9nKFwiY291bGRuJ3QgZmluZCBhY3RpdmUgdGFiXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YWIgPSB0YWJzWzBdXG4gICAgICBjaHJvbWUudGFicy5zZW5kTWVzc2FnZSh0YWIuaWQsIHJlcXVlc3QsIGNhbGxiYWNrKVxuICAgIH1cbiAgfSlcbn1cblxuY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKFxuXHRmdW5jdGlvbiAocmVxdWVzdCwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpIHtcbiAgY29uc29sZS5sb2coJ2Nocm9tZS5ydW50aW1lLm9uTWVzc2FnZScsIHJlcXVlc3QpXG5cbiAgaWYgKHJlcXVlc3QuY3JlYXRlU2l0ZW1hcCkge1xuICAgIHN0b3JlLmNyZWF0ZVNpdGVtYXAocmVxdWVzdC5zaXRlbWFwLCBzZW5kUmVzcG9uc2UpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LnNhdmVTaXRlbWFwKSB7XG4gICAgc3RvcmUuc2F2ZVNpdGVtYXAocmVxdWVzdC5zaXRlbWFwLCBzZW5kUmVzcG9uc2UpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LmRlbGV0ZVNpdGVtYXApIHtcbiAgICBzdG9yZS5kZWxldGVTaXRlbWFwKHJlcXVlc3Quc2l0ZW1hcCwgc2VuZFJlc3BvbnNlKVxuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5nZXRBbGxTaXRlbWFwcykge1xuICAgIHN0b3JlLmdldEFsbFNpdGVtYXBzKHNlbmRSZXNwb25zZSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHJlcXVlc3Quc2l0ZW1hcEV4aXN0cykge1xuICAgIHN0b3JlLnNpdGVtYXBFeGlzdHMocmVxdWVzdC5zaXRlbWFwSWQsIHNlbmRSZXNwb25zZSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuZ2V0U2l0ZW1hcERhdGEpIHtcbiAgICBzdG9yZS5nZXRTaXRlbWFwRGF0YShuZXcgU2l0ZW1hcChyZXF1ZXN0LnNpdGVtYXAsIHskLCB3aW5kb3csIGRvY3VtZW50fSksIHNlbmRSZXNwb25zZSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHJlcXVlc3Quc2NyYXBlU2l0ZW1hcCkge1xuICAgIHZhciBzaXRlbWFwID0gbmV3IFNpdGVtYXAocmVxdWVzdC5zaXRlbWFwLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gICAgdmFyIHF1ZXVlID0gbmV3IFF1ZXVlKClcbiAgICB2YXIgYnJvd3NlciA9IG5ldyBDaHJvbWVQb3B1cEJyb3dzZXIoe1xuICAgICAgcGFnZUxvYWREZWxheTogcmVxdWVzdC5wYWdlTG9hZERlbGF5XG4gICAgfSwgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxuXG4gICAgdmFyIHNjcmFwZXIgPSBuZXcgU2NyYXBlcih7XG4gICAgICBxdWV1ZTogcXVldWUsXG4gICAgICBzaXRlbWFwOiBzaXRlbWFwLFxuICAgICAgYnJvd3NlcjogYnJvd3NlcixcbiAgICAgIHN0b3JlOiBzdG9yZSxcbiAgICAgIHJlcXVlc3RJbnRlcnZhbDogcmVxdWVzdC5yZXF1ZXN0SW50ZXJ2YWxcbiAgICB9LCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG5cbiAgICB0cnkge1xuICAgICAgc2NyYXBlci5ydW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBicm93c2VyLmNsb3NlKClcbiAgICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IGNocm9tZS5ub3RpZmljYXRpb25zLmNyZWF0ZSgnc2NyYXBpbmctZmluaXNoZWQnLCB7XG4gICAgICAgICAgdHlwZTogJ2Jhc2ljJyxcbiAgICAgICAgICBpY29uVXJsOiAnYXNzZXRzL2ltYWdlcy9pY29uMTI4LnBuZycsXG4gICAgICAgICAgdGl0bGU6ICdTY3JhcGluZyBmaW5pc2hlZCEnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdGaW5pc2hlZCBzY3JhcGluZyAnICsgc2l0ZW1hcC5faWRcbiAgICAgICAgfSwgZnVuY3Rpb24gKGlkKSB7XG5cdFx0XHRcdFx0XHQvLyBub3RpZmljYXRpb24gc2hvd2VkXG4gICAgICAgIH0pXG4gICAgICAgIHNlbmRSZXNwb25zZSgpXG4gICAgICB9KVxuICAgIH1cdFx0XHRjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coJ1NjcmFwZXIgZXhlY3V0aW9uIGNhbmNlbGxlZCcuZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuaGVhZGxlc3NTY3JhcGVTaXRlbWFwKSB7XG4gICAgY29uc3Qgc2l0ZW1hcCA9IG5ldyBTaXRlbWFwKHJlcXVlc3Quc2l0ZW1hcCwgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxuICAgIGNvbnN0IHF1ZXVlID0gbmV3IFF1ZXVlKClcbiAgICBjb25zdCBicm93c2VyID0gbmV3IFdlYkpTRE9NQnJvd3Nlcih7XG4gICAgICBwYWdlTG9hZERlbGF5OiByZXF1ZXN0LnBhZ2VMb2FkRGVsYXlcbiAgICB9LCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG5cbiAgICBjb25zdCBzY3JhcGVyID0gbmV3IFNjcmFwZXIoe1xuICAgICAgcXVldWU6IHF1ZXVlLFxuICAgICAgc2l0ZW1hcDogc2l0ZW1hcCxcbiAgICAgIGJyb3dzZXI6IGJyb3dzZXIsXG4gICAgICBzdG9yZTogc3RvcmUsXG4gICAgICByZXF1ZXN0SW50ZXJ2YWw6IHJlcXVlc3QucmVxdWVzdEludGVydmFsXG4gICAgfSwgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxuXG4gICAgdHJ5IHtcbiAgICAgIHNjcmFwZXIucnVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYnJvd3Nlci5jbG9zZSgpXG4gICAgICAgIHZhciBub3RpZmljYXRpb24gPSBjaHJvbWUubm90aWZpY2F0aW9ucy5jcmVhdGUoJ3NjcmFwaW5nLWZpbmlzaGVkJywge1xuICAgICAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICAgICAgaWNvblVybDogJ2Fzc2V0cy9pbWFnZXMvaWNvbjEyOC5wbmcnLFxuICAgICAgICAgIHRpdGxlOiAnU2NyYXBpbmcgZmluaXNoZWQhJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRmluaXNoZWQgc2NyYXBpbmcgJyArIHNpdGVtYXAuX2lkXG4gICAgICAgIH0sIGZ1bmN0aW9uIChpZCkge1xuICAgICAgICAgIC8vIG5vdGlmaWNhdGlvbiBzaG93ZWRcbiAgICAgICAgfSlcbiAgICAgICAgc2VuZFJlc3BvbnNlKClcbiAgICAgIH0pXG4gICAgfVx0XHRcdGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZygnU2NyYXBlciBleGVjdXRpb24gY2FuY2VsbGVkJy5lKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucHJldmlld1NlbGVjdG9yRGF0YSkge1xuICAgIGNocm9tZS50YWJzLnF1ZXJ5KHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIGN1cnJlbnRXaW5kb3c6IHRydWVcbiAgICB9LCBmdW5jdGlvbiAodGFicykge1xuICAgICAgaWYgKHRhYnMubGVuZ3RoIDwgMSkge1xuICAgICAgICB0aGlzLmNvbnNvbGUubG9nKFwiY291bGRuJ3QgZmluZCBhY3RpdmUgdGFiXCIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGFiID0gdGFic1swXVxuICAgICAgICBjaHJvbWUudGFicy5zZW5kTWVzc2FnZSh0YWIuaWQsIHJlcXVlc3QsIHNlbmRSZXNwb25zZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5iYWNrZ3JvdW5kU2NyaXB0Q2FsbCkge1xuICAgIHZhciBiYWNrZ3JvdW5kU2NyaXB0ID0gZ2V0QmFja2dyb3VuZFNjcmlwdCgnQmFja2dyb3VuZFNjcmlwdCcpXG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBiYWNrZ3JvdW5kU2NyaXB0W3JlcXVlc3QuZm5dKHJlcXVlc3QucmVxdWVzdClcbiAgICBkZWZlcnJlZFJlc3BvbnNlLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBzZW5kUmVzcG9uc2UocmVzcG9uc2UpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cbilcbiIsInZhciBEYXRhRXh0cmFjdG9yID0gcmVxdWlyZSgnLi8uLi9zY3JpcHRzL0RhdGFFeHRyYWN0b3InKVxudmFyIGdldENvbnRlbnRTY3JpcHQgPSByZXF1aXJlKCcuLy4uL3NjcmlwdHMvZ2V0Q29udGVudFNjcmlwdCcpXG5cbmZ1bmN0aW9uIGV4dGVuc2lvbkxpc3RlbmVyIChyZXF1ZXN0LCBzZW5kZXIsIHNlbmRSZXNwb25zZSwgb3B0aW9ucykge1xuICB2YXIgJCA9IG9wdGlvbnMuJFxuICB2YXIgZG9jdW1lbnQgPSBvcHRpb25zLmRvY3VtZW50XG4gIHZhciB3aW5kb3cgPSBvcHRpb25zLndpbmRvd1xuICBjb25zb2xlLmxvZygnY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlJywgcmVxdWVzdClcblxuICBpZiAocmVxdWVzdC5leHRyYWN0RGF0YSkge1xuICAgIGNvbnNvbGUubG9nKCdyZWNlaXZlZCBkYXRhIGV4dHJhY3Rpb24gcmVxdWVzdCcsIHJlcXVlc3QpXG4gICAgdmFyIGV4dHJhY3RvciA9IG5ldyBEYXRhRXh0cmFjdG9yKHJlcXVlc3QsIHskLCB3aW5kb3csIGRvY3VtZW50fSlcbiAgICB2YXIgZGVmZXJyZWREYXRhID0gZXh0cmFjdG9yLmdldERhdGEoKVxuICAgIGRlZmVycmVkRGF0YS5kb25lKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBjb25zb2xlLmxvZygnZGF0YWV4dHJhY3RvciBkYXRhJywgZGF0YSlcbiAgICAgIHNlbmRSZXNwb25zZShkYXRhKVxuICAgIH0pXG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LnByZXZpZXdTZWxlY3RvckRhdGEpIHtcbiAgICBjb25zb2xlLmxvZygncmVjZWl2ZWQgZGF0YS1wcmV2aWV3IGV4dHJhY3Rpb24gcmVxdWVzdCcsIHJlcXVlc3QpXG4gICAgdmFyIGV4dHJhY3RvciA9IG5ldyBEYXRhRXh0cmFjdG9yKHJlcXVlc3QsIHskLCBkb2N1bWVudCwgd2luZG93fSlcbiAgICB2YXIgZGVmZXJyZWREYXRhID0gZXh0cmFjdG9yLmdldFNpbmdsZVNlbGVjdG9yRGF0YShyZXF1ZXN0LnBhcmVudFNlbGVjdG9ySWRzLCByZXF1ZXN0LnNlbGVjdG9ySWQpXG4gICAgZGVmZXJyZWREYXRhLmRvbmUoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdkYXRhZXh0cmFjdG9yIGRhdGEnLCBkYXRhKVxuICAgICAgc2VuZFJlc3BvbnNlKGRhdGEpXG4gICAgfSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIC8vIFVuaXZlcnNhbCBDb250ZW50U2NyaXB0IGNvbW11bmljYXRpb24gaGFuZGxlclxuICBlbHNlIGlmIChyZXF1ZXN0LmNvbnRlbnRTY3JpcHRDYWxsKSB7XG4gICAgdmFyIGNvbnRlbnRTY3JpcHQgPSBnZXRDb250ZW50U2NyaXB0KCdDb250ZW50U2NyaXB0JylcblxuICAgIGNvbnNvbGUubG9nKCdyZWNlaXZlZCBDb250ZW50U2NyaXB0IHJlcXVlc3QnLCByZXF1ZXN0KVxuXG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBjb250ZW50U2NyaXB0W3JlcXVlc3QuZm5dKHJlcXVlc3QucmVxdWVzdCwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICAgIGRlZmVycmVkUmVzcG9uc2UuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIHNlbmRSZXNwb25zZShyZXNwb25zZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dGVuc2lvbkxpc3RlbmVyXG4iLCJ2YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbi8qKlxuICogQ29udGVudFNjcmlwdCB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSB3aXRoaW4gdGhlIGV4dGVuc2lvblxuICovXG52YXIgQmFja2dyb3VuZFNjcmlwdCA9IHtcblxuICBkdW1teTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBqcXVlcnkuRGVmZXJyZWQoKS5yZXNvbHZlKCdkdW1teScpLnByb21pc2UoKVxuICB9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgdGFiIHRoYXQgaXMgdmlzaWJsZSB0byB1c2VyXG5cdCAqIEByZXR1cm5zIGpxdWVyeS5EZWZlcnJlZCgpIGludGVnZXJcblx0ICovXG4gIGdldEFjdGl2ZVRhYklkOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBqcXVlcnkuRGVmZXJyZWQoKVxuXG4gICAgY2hyb21lLnRhYnMucXVlcnkoe1xuICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgY3VycmVudFdpbmRvdzogdHJ1ZVxuICAgIH0sIGZ1bmN0aW9uICh0YWJzKSB7XG4gICAgICBpZiAodGFicy5sZW5ndGggPCAxKSB7XG5cdFx0XHRcdC8vIEBUT0RPIG11c3QgYmUgcnVubmluZyB3aXRoaW4gcG9wdXAuIG1heWJlIGZpbmQgYW5vdGhlciBhY3RpdmUgd2luZG93P1xuICAgICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlamVjdChcImNvdWxkbid0IGZpbmQgdGhlIGFjdGl2ZSB0YWJcIilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB0YWJJZCA9IHRhYnNbMF0uaWRcbiAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKHRhYklkKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2UucHJvbWlzZSgpXG4gIH0sXG5cblx0LyoqXG5cdCAqIEV4ZWN1dGUgYSBmdW5jdGlvbiB3aXRoaW4gdGhlIGFjdGl2ZSB0YWIgd2l0aGluIGNvbnRlbnQgc2NyaXB0XG5cdCAqIEBwYXJhbSByZXF1ZXN0LmZuXHRmdW5jdGlvbiB0byBjYWxsXG5cdCAqIEBwYXJhbSByZXF1ZXN0LnJlcXVlc3RcdHJlcXVlc3QgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cblx0ICovXG4gIGV4ZWN1dGVDb250ZW50U2NyaXB0OiBmdW5jdGlvbiAocmVxdWVzdCkge1xuICAgIHZhciByZXFUb0NvbnRlbnRTY3JpcHQgPSB7XG4gICAgICBjb250ZW50U2NyaXB0Q2FsbDogdHJ1ZSxcbiAgICAgIGZuOiByZXF1ZXN0LmZuLFxuICAgICAgcmVxdWVzdDogcmVxdWVzdC5yZXF1ZXN0XG4gICAgfVxuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgZGVmZXJyZWRBY3RpdmVUYWJJZCA9IHRoaXMuZ2V0QWN0aXZlVGFiSWQoKVxuICAgIGRlZmVycmVkQWN0aXZlVGFiSWQuZG9uZShmdW5jdGlvbiAodGFiSWQpIHtcbiAgICAgIGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRhYklkLCByZXFUb0NvbnRlbnRTY3JpcHQsIGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmFja2dyb3VuZFNjcmlwdFxuIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG52YXIgd2hlbkNhbGxTZXF1ZW50aWFsbHkgPSByZXF1aXJlKCcuLi9hc3NldHMvanF1ZXJ5LndoZW5jYWxsc2VxdWVudGlhbGx5JylcblxudmFyIENocm9tZVBvcHVwQnJvd3NlciA9IGZ1bmN0aW9uIChvcHRpb25zLCBtb3JlT3B0aW9ucykge1xuICB0aGlzLnBhZ2VMb2FkRGVsYXkgPSBvcHRpb25zLnBhZ2VMb2FkRGVsYXlcblxuICAvLyBOb3Qgc2V0dGluZyB3aW5kb3cgaGVyZSBhcyBpdCBjb25mbGljdHMgd2l0aCB0aGlzLndpbmRvdy4gSW4gYW55IGNhc2Ugd2luZG93IG11c3QgYmUgZGVmaW5lZCBpbiB0aGlzIGNhc2Vcblx0Ly8gQFRPRE8gc29tZWhvdyBoYW5kbGUgdGhlIGNsb3NlZCB3aW5kb3dcbn1cblxuQ2hyb21lUG9wdXBCcm93c2VyLnByb3RvdHlwZSA9IHtcblxuICBfaW5pdFBvcHVwV2luZG93OiBmdW5jdGlvbiAoY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgdmFyIGJyb3dzZXIgPSB0aGlzXG4gICAgaWYgKHRoaXMud2luZG93ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIGNoZWNrIGlmIHRhYiBleGlzdHNcbiAgICAgIGNocm9tZS50YWJzLmdldCh0aGlzLnRhYi5pZCwgZnVuY3Rpb24gKHRhYikge1xuICAgICAgICBpZiAoIXRhYikge1xuICAgICAgICAgIHRocm93ICdTY3JhcGluZyB3aW5kb3cgY2xvc2VkJ1xuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBjYWxsYmFjay5jYWxsKHNjb3BlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2hyb21lLndpbmRvd3MuY3JlYXRlKHsndHlwZSc6ICdwb3B1cCcsIHdpZHRoOiAxMDQyLCBoZWlnaHQ6IDc2OCwgZm9jdXNlZDogdHJ1ZSwgdXJsOiAnY2hyb21lOi8vbmV3dGFiJ30sIGZ1bmN0aW9uICh3aW5kb3cpIHtcbiAgICAgIGJyb3dzZXIud2luZG93ID0gd2luZG93XG4gICAgICBicm93c2VyLnRhYiA9IHdpbmRvdy50YWJzWzBdXG5cbiAgICAgIGNhbGxiYWNrLmNhbGwoc2NvcGUpXG4gICAgfSlcbiAgfSxcblxuICBsb2FkVXJsOiBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuICAgIHZhciB0YWIgPSB0aGlzLnRhYlxuXG4gICAgdmFyIHRhYkxvYWRMaXN0ZW5lciA9IGZ1bmN0aW9uICh0YWJJZCwgY2hhbmdlSW5mbywgdGFiKSB7XG4gICAgICBpZiAodGFiSWQgPT09IHRoaXMudGFiLmlkKSB7XG4gICAgICAgIGlmIChjaGFuZ2VJbmZvLnN0YXR1cyA9PT0gJ2NvbXBsZXRlJykge1xuXHRcdFx0XHRcdC8vIEBUT0RPIGNoZWNrIHVybCA/IG1heWJlIGl0IHdvdWxkIGJlIGJhZCBiZWNhdXNlIHNvbWUgc2l0ZXMgbWlnaHQgdXNlIHJlZGlyZWN0c1xuXG5cdFx0XHRcdFx0Ly8gcmVtb3ZlIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgICAgY2hyb21lLnRhYnMub25VcGRhdGVkLnJlbW92ZUxpc3RlbmVyKHRhYkxvYWRMaXN0ZW5lcilcblxuXHRcdFx0XHRcdC8vIGNhbGxiYWNrIHRhYiBpcyBsb2FkZWQgYWZ0ZXIgcGFnZSBsb2FkIGRlbGF5XG4gICAgICAgICAgc2V0VGltZW91dChjYWxsYmFjaywgdGhpcy5wYWdlTG9hZERlbGF5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpXG4gICAgY2hyb21lLnRhYnMub25VcGRhdGVkLmFkZExpc3RlbmVyKHRhYkxvYWRMaXN0ZW5lcilcblxuICAgIGNocm9tZS50YWJzLnVwZGF0ZSh0YWIuaWQsIHt1cmw6IHVybH0pXG4gIH0sXG5cbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICBjaHJvbWUud2luZG93cy5yZW1vdmUodGhpcy53aW5kb3cuaWQpXG4gIH0sXG4gIC8qKlxuICAgKiBTYXZlIGltYWdlcyBmb3IgdXNlciBpZiB0aGUgcmVjb3JkcyBjb250YWlucyB0aGVtXG4gICAqIEBwYXJhbSBuYW1pbmdGdW5jdGlvbiB7ZnVuY3Rpb259IGdldHMgc3RyaW5nIG91dHB1dHMgbmFtZVxuICAgKiBAcGFyYW0gcmVjb3JkXG4gICAqL1xuICBzYXZlSW1hZ2VzOiBmdW5jdGlvbiAocmVjb3JkLCBuYW1pbmdGdW5jdGlvbikge1xuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgZGVmZXJyZWRJbWFnZVN0b3JlQ2FsbHMgPSBbXVxuICAgIHZhciBwcmVmaXhMZW5ndGggPSAnX2ltYWdlQmFzZTY0LScubGVuZ3RoXG5cbiAgICBmb3IgKHZhciBhdHRyIGluIHJlY29yZCkge1xuICAgICAgaWYgKGF0dHIuc3Vic3RyKDAsIHByZWZpeExlbmd0aCkgPT09ICdfaW1hZ2VCYXNlNjQtJykge1xuICAgICAgICB2YXIgc2VsZWN0b3JJZCA9IGF0dHIuc3Vic3RyaW5nKHByZWZpeExlbmd0aCwgYXR0ci5sZW5ndGgpXG4gICAgICAgIGRlZmVycmVkSW1hZ2VTdG9yZUNhbGxzLnB1c2goZnVuY3Rpb24gKHNlbGVjdG9ySWQpIHtcbiAgICAgICAgICB2YXIgaW1hZ2VCYXNlNjQgPSByZWNvcmRbJ19pbWFnZUJhc2U2NC0nICsgc2VsZWN0b3JJZF1cbiAgICAgICAgICB2YXIgZGVmZXJyZWREb3dubG9hZERvbmUgPSBqcXVlcnkuRGVmZXJyZWQoKVxuXG4gICAgICAgICAgLy8gVE9ETyBjaGVjayB0aGF0IGF0b2IgYWN0dWFsbHkgd29ya3NcbiAgICAgICAgICB2YXIgYmxvYiA9IGI2NHRvQmxvYihpbWFnZUJhc2U2NCwgcmVjb3JkWydfaW1hZ2VNaW1lVHlwZS0nICsgc2VsZWN0b3JJZF0pXG5cbiAgICAgICAgICBkZWxldGUgcmVjb3JkWydfaW1hZ2VNaW1lVHlwZS0nICsgc2VsZWN0b3JJZF1cbiAgICAgICAgICBkZWxldGUgcmVjb3JkWydfaW1hZ2VCYXNlNjQtJyArIHNlbGVjdG9ySWRdXG5cbiAgICAgICAgICB2YXIgZG93bmxvYWRVcmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuICAgICAgICAgIHZhciBmaWxlU2F2ZVBhdGggPSBuYW1pbmdGdW5jdGlvbihzZWxlY3RvcklkKVxuXG4gICAgICAgICAgLy8gZG93bmxvYWQgaW1hZ2UgdXNpbmcgY2hyb21lIGFwaVxuICAgICAgICAgIHZhciBkb3dubG9hZFJlcXVlc3QgPSB7XG4gICAgICAgICAgICB1cmw6IGRvd25sb2FkVXJsLFxuICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGVTYXZlUGF0aFxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSBkb3dubG9hZCB0byBmaW5pc2hcbiAgICAgICAgICBjaHJvbWUuZG93bmxvYWRzLmRvd25sb2FkKGRvd25sb2FkUmVxdWVzdCwgZnVuY3Rpb24gKGRvd25sb2FkSWQpIHtcbiAgICAgICAgICAgIHZhciBjYkRvd25sb2FkZWQgPSBmdW5jdGlvbiAoZG93bmxvYWRJdGVtKSB7XG4gICAgICAgICAgICAgIGlmIChkb3dubG9hZEl0ZW0uaWQgPT09IGRvd25sb2FkSWQgJiYgZG93bmxvYWRJdGVtLnN0YXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRvd25sb2FkSXRlbS5zdGF0ZS5jdXJyZW50ID09PSAnY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgICAgICBkZWZlcnJlZERvd25sb2FkRG9uZS5yZXNvbHZlKClcbiAgICAgICAgICAgICAgICAgIGNocm9tZS5kb3dubG9hZHMub25DaGFuZ2VkLnJlbW92ZUxpc3RlbmVyKGNiRG93bmxvYWRlZClcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRvd25sb2FkSXRlbS5zdGF0ZS5jdXJyZW50ID09PSAnaW50ZXJydXB0ZWQnKSB7XG4gICAgICAgICAgICAgICAgICBkZWZlcnJlZERvd25sb2FkRG9uZS5yZWplY3QoJ2Rvd25sb2FkIGZhaWxlZCcpXG4gICAgICAgICAgICAgICAgICBjaHJvbWUuZG93bmxvYWRzLm9uQ2hhbmdlZC5yZW1vdmVMaXN0ZW5lcihjYkRvd25sb2FkZWQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNocm9tZS5kb3dubG9hZHMub25DaGFuZ2VkLmFkZExpc3RlbmVyKGNiRG93bmxvYWRlZClcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIGRlZmVycmVkRG93bmxvYWREb25lLnByb21pc2UoKVxuICAgICAgICB9LmJpbmQodGhpcywgc2VsZWN0b3JJZCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgd2hlbkNhbGxTZXF1ZW50aWFsbHkoZGVmZXJyZWRJbWFnZVN0b3JlQ2FsbHMpLmRvbmUoZnVuY3Rpb24gKCkge1xuICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKClcbiAgICB9KVxuXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2UucHJvbWlzZSgpXG4gIH0sXG4gIGZldGNoRGF0YTogZnVuY3Rpb24gKHVybCwgc2l0ZW1hcCwgcGFyZW50U2VsZWN0b3JJZCwgY2FsbGJhY2ssIHNjb3BlKSB7XG4gICAgdmFyIGJyb3dzZXIgPSB0aGlzXG5cbiAgICB0aGlzLl9pbml0UG9wdXBXaW5kb3coZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRhYiA9IGJyb3dzZXIudGFiXG4gICAgICBjb25zb2xlLmxvZygnSW5pdCBicm93c2VyIGFwcCcpXG4gICAgICBicm93c2VyLmxvYWRVcmwodXJsLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0ge1xuICAgICAgICAgIGV4dHJhY3REYXRhOiB0cnVlLFxuICAgICAgICAgIHNpdGVtYXA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2l0ZW1hcCkpLFxuICAgICAgICAgIHBhcmVudFNlbGVjdG9ySWQ6IHBhcmVudFNlbGVjdG9ySWRcbiAgICAgICAgfVxuXG4gICAgICAgIGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRhYi5pZCwgbWVzc2FnZSwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXh0cmFjdGVkIGRhdGEgZnJvbSB3ZWIgcGFnZScsIGRhdGEpXG4gICAgICAgICAgY2FsbGJhY2suY2FsbChzY29wZSwgbnVsbCwgZGF0YSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENocm9tZVBvcHVwQnJvd3NlclxuXG5mdW5jdGlvbiBiNjR0b0Jsb2IgKGI2NERhdGEsIGNvbnRlbnRUeXBlID0gJycsIHNsaWNlU2l6ZSA9IDUxMikge1xuICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IHdpbmRvdy5hdG9iKGI2NERhdGEpXG4gIGNvbnN0IGJ5dGVBcnJheXMgPSBbXVxuXG4gIGZvciAobGV0IG9mZnNldCA9IDA7IG9mZnNldCA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgb2Zmc2V0ICs9IHNsaWNlU2l6ZSkge1xuICAgIGNvbnN0IHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpXG5cbiAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGljZS5sZW5ndGg7IGkrKykge1xuICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpXG4gICAgfVxuXG4gICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpXG5cbiAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KVxuICB9XG5cbiAgY29uc3QgYmxvYiA9IG5ldyB3aW5kb3cuQmxvYihieXRlQXJyYXlzLCB7dHlwZTogY29udGVudFR5cGV9KVxuICByZXR1cm4gYmxvYlxufVxuIiwidmFyIENvbmZpZyA9IGZ1bmN0aW9uICgpIHtcblxufVxuXG5Db25maWcucHJvdG90eXBlID0ge1xuXG4gIHNpdGVtYXBEYjogJzx1c2UgbG9hZENvbmZpZ3VyYXRpb24oKT4nLFxuICBkYXRhRGI6ICc8dXNlIGxvYWRDb25maWd1cmF0aW9uKCk+JyxcblxuICBkZWZhdWx0czoge1xuICAgIHN0b3JhZ2VUeXBlOiAnbG9jYWwnLFxuXHRcdC8vIHRoaXMgaXMgd2hlcmUgc2l0ZW1hcCBkb2N1bWVudHMgYXJlIHN0b3JlZFxuICAgIHNpdGVtYXBEYjogJ3NjcmFwZXItc2l0ZW1hcHMnLFxuXHRcdC8vIHRoaXMgaXMgd2hlcmUgc2NyYXBlZCBkYXRhIGlzIHN0b3JlZC5cblx0XHQvLyBlbXB0eSBmb3IgbG9jYWwgc3RvcmFnZVxuICAgIGRhdGFEYjogJydcbiAgfSxcblxuXHQvKipcblx0ICogTG9hZHMgY29uZmlndXJhdGlvbiBmcm9tIGNocm9tZSBleHRlbnNpb24gc3luYyBzdG9yYWdlXG5cdCAqL1xuICBsb2FkQ29uZmlndXJhdGlvbjogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2hyb21lLnN0b3JhZ2Uuc3luYy5nZXQoWydzaXRlbWFwRGInLCAnZGF0YURiJywgJ3N0b3JhZ2VUeXBlJ10sIGZ1bmN0aW9uIChpdGVtcykge1xuICAgICAgdGhpcy5zdG9yYWdlVHlwZSA9IGl0ZW1zLnN0b3JhZ2VUeXBlIHx8IHRoaXMuZGVmYXVsdHMuc3RvcmFnZVR5cGVcbiAgICAgIGlmICh0aGlzLnN0b3JhZ2VUeXBlID09PSAnbG9jYWwnKSB7XG4gICAgICAgIHRoaXMuc2l0ZW1hcERiID0gdGhpcy5kZWZhdWx0cy5zaXRlbWFwRGJcbiAgICAgICAgdGhpcy5kYXRhRGIgPSB0aGlzLmRlZmF1bHRzLmRhdGFEYlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaXRlbWFwRGIgPSBpdGVtcy5zaXRlbWFwRGIgfHwgdGhpcy5kZWZhdWx0cy5zaXRlbWFwRGJcbiAgICAgICAgdGhpcy5kYXRhRGIgPSBpdGVtcy5kYXRhRGIgfHwgdGhpcy5kZWZhdWx0cy5kYXRhRGJcbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soKVxuICAgIH0uYmluZCh0aGlzKSlcbiAgfSxcblxuXHQvKipcblx0ICogU2F2ZXMgY29uZmlndXJhdGlvbiB0byBjaHJvbWUgZXh0ZW5zaW9uIHN5bmMgc3RvcmFnZVxuXHQgKiBAcGFyYW0ge3R5cGV9IGl0ZW1zXG5cdCAqIEBwYXJhbSB7dHlwZX0gY2FsbGJhY2tcblx0ICogQHJldHVybnMge3VuZGVmaW5lZH1cblx0ICovXG4gIHVwZGF0ZUNvbmZpZ3VyYXRpb246IGZ1bmN0aW9uIChpdGVtcywgY2FsbGJhY2spIHtcbiAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLnNldChpdGVtcywgY2FsbGJhY2spXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25maWdcbiIsInZhciBDb250ZW50U2VsZWN0b3IgPSByZXF1aXJlKCcuL0NvbnRlbnRTZWxlY3RvcicpXG52YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbi8qKlxuICogQ29udGVudFNjcmlwdCB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSB3aXRoaW4gdGhlIGV4dGVuc2lvblxuICovXG52YXIgQ29udGVudFNjcmlwdCA9IHtcblxuXHQvKipcblx0ICogRmV0Y2hcblx0ICogQHBhcmFtIHJlcXVlc3QuQ1NTU2VsZWN0b3JcdGNzcyBzZWxlY3RvciBhcyBzdHJpbmdcblx0ICogQHJldHVybnMganF1ZXJ5LkRlZmVycmVkKClcblx0ICovXG4gIGdldEhUTUw6IGZ1bmN0aW9uIChyZXF1ZXN0LCBvcHRpb25zKSB7XG4gICAgdmFyICQgPSBvcHRpb25zLiRcbiAgICB2YXIgZGVmZXJyZWRIVE1MID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgaHRtbCA9ICQocmVxdWVzdC5DU1NTZWxlY3RvcikuY2xvbmUoKS53cmFwKCc8cD4nKS5wYXJlbnQoKS5odG1sKClcbiAgICBkZWZlcnJlZEhUTUwucmVzb2x2ZShodG1sKVxuICAgIHJldHVybiBkZWZlcnJlZEhUTUwucHJvbWlzZSgpXG4gIH0sXG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgY3VycmVudCBjb250ZW50IHNlbGVjdG9yIGlmIGlzIGluIHVzZSB3aXRoaW4gdGhlIHBhZ2Vcblx0ICogQHJldHVybnMganF1ZXJ5LkRlZmVycmVkKClcblx0ICovXG4gIHJlbW92ZUN1cnJlbnRDb250ZW50U2VsZWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZGVmZXJyZWRSZXNwb25zZSA9IGpxdWVyeS5EZWZlcnJlZCgpXG4gICAgdmFyIGNvbnRlbnRTZWxlY3RvciA9IHdpbmRvdy5jc1xuICAgIGlmIChjb250ZW50U2VsZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKClcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudFNlbGVjdG9yLnJlbW92ZUdVSSgpXG4gICAgICB3aW5kb3cuY3MgPSB1bmRlZmluZWRcbiAgICAgIGRlZmVycmVkUmVzcG9uc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2UucHJvbWlzZSgpXG4gIH0sXG5cblx0LyoqXG5cdCAqIFNlbGVjdCBlbGVtZW50cyB3aXRoaW4gdGhlIHBhZ2Vcblx0ICogQHBhcmFtIHJlcXVlc3QucGFyZW50Q1NTU2VsZWN0b3Jcblx0ICogQHBhcmFtIHJlcXVlc3QuYWxsb3dlZEVsZW1lbnRzXG5cdCAqL1xuICBzZWxlY3RTZWxlY3RvcjogZnVuY3Rpb24gKHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgJCA9IG9wdGlvbnMuJFxuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcblxuICAgIHRoaXMucmVtb3ZlQ3VycmVudENvbnRlbnRTZWxlY3RvcigpLmRvbmUoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNvbnRlbnRTZWxlY3RvciA9IG5ldyBDb250ZW50U2VsZWN0b3Ioe1xuICAgICAgICBwYXJlbnRDU1NTZWxlY3RvcjogcmVxdWVzdC5wYXJlbnRDU1NTZWxlY3RvcixcbiAgICAgICAgYWxsb3dlZEVsZW1lbnRzOiByZXF1ZXN0LmFsbG93ZWRFbGVtZW50c1xuICAgICAgfSwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICAgICAgd2luZG93LmNzID0gY29udGVudFNlbGVjdG9yXG5cbiAgICAgIHZhciBkZWZlcnJlZENTU1NlbGVjdG9yID0gY29udGVudFNlbGVjdG9yLmdldENTU1NlbGVjdG9yKClcbiAgICAgIGRlZmVycmVkQ1NTU2VsZWN0b3IuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVDdXJyZW50Q29udGVudFNlbGVjdG9yKCkuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgICAgICAgIHdpbmRvdy5jcyA9IHVuZGVmaW5lZFxuICAgICAgICB9KVxuICAgICAgfS5iaW5kKHRoaXMpKS5mYWlsKGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICAgIGRlZmVycmVkUmVzcG9uc2UucmVqZWN0KG1lc3NhZ2UpXG4gICAgICAgIHdpbmRvdy5jcyA9IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZS5wcm9taXNlKClcbiAgfSxcblxuXHQvKipcblx0ICogUHJldmlldyBlbGVtZW50c1xuXHQgKiBAcGFyYW0gcmVxdWVzdC5wYXJlbnRDU1NTZWxlY3RvclxuXHQgKiBAcGFyYW0gcmVxdWVzdC5lbGVtZW50Q1NTU2VsZWN0b3Jcblx0ICovXG4gIHByZXZpZXdTZWxlY3RvcjogZnVuY3Rpb24gKHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgJCA9IG9wdGlvbnMuJFxuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB0aGlzLnJlbW92ZUN1cnJlbnRDb250ZW50U2VsZWN0b3IoKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjb250ZW50U2VsZWN0b3IgPSBuZXcgQ29udGVudFNlbGVjdG9yKHtcbiAgICAgICAgcGFyZW50Q1NTU2VsZWN0b3I6IHJlcXVlc3QucGFyZW50Q1NTU2VsZWN0b3JcbiAgICAgIH0sIHskLCBkb2N1bWVudCwgd2luZG93fSlcbiAgICAgIHdpbmRvdy5jcyA9IGNvbnRlbnRTZWxlY3RvclxuXG4gICAgICB2YXIgZGVmZXJyZWRTZWxlY3RvclByZXZpZXcgPSBjb250ZW50U2VsZWN0b3IucHJldmlld1NlbGVjdG9yKHJlcXVlc3QuZWxlbWVudENTU1NlbGVjdG9yKVxuICAgICAgZGVmZXJyZWRTZWxlY3RvclByZXZpZXcuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlZmVycmVkUmVzcG9uc2UucmVzb2x2ZSgpXG4gICAgICB9KS5mYWlsKGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICAgIGRlZmVycmVkUmVzcG9uc2UucmVqZWN0KG1lc3NhZ2UpXG4gICAgICAgIHdpbmRvdy5jcyA9IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICB9KVxuICAgIHJldHVybiBkZWZlcnJlZFJlc3BvbnNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb250ZW50U2NyaXB0XG4iLCJ2YXIgRWxlbWVudFF1ZXJ5ID0gcmVxdWlyZSgnLi9FbGVtZW50UXVlcnknKVxudmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG52YXIgQ3NzU2VsZWN0b3IgPSByZXF1aXJlKCdjc3Mtc2VsZWN0b3InKS5Dc3NTZWxlY3RvclxuLyoqXG4gKiBAcGFyYW0gb3B0aW9ucy5wYXJlbnRDU1NTZWxlY3Rvclx0RWxlbWVudHMgY2FuIGJlIG9ubHkgc2VsZWN0ZWQgd2l0aGluIHRoaXMgZWxlbWVudFxuICogQHBhcmFtIG9wdGlvbnMuYWxsb3dlZEVsZW1lbnRzXHRFbGVtZW50cyB0aGF0IGNhbiBvbmx5IGJlIHNlbGVjdGVkXG4gKiBAY29uc3RydWN0b3JcbiAqL1xudmFyIENvbnRlbnRTZWxlY3RvciA9IGZ1bmN0aW9uIChvcHRpb25zLCBtb3JlT3B0aW9ucykge1xuXHQvLyBkZWZlcnJlZCByZXNwb25zZVxuICB0aGlzLmRlZmVycmVkQ1NTU2VsZWN0b3JSZXNwb25zZSA9IGpxdWVyeS5EZWZlcnJlZCgpXG5cbiAgdGhpcy5hbGxvd2VkRWxlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRFbGVtZW50c1xuICB0aGlzLnBhcmVudENTU1NlbGVjdG9yID0gb3B0aW9ucy5wYXJlbnRDU1NTZWxlY3Rvci50cmltKClcbiAgdGhpcy5hbGVydCA9IG9wdGlvbnMuYWxlcnQgfHwgZnVuY3Rpb24gKHR4dCkgeyBhbGVydCh0eHQpIH1cblxuICB0aGlzLiQgPSBtb3JlT3B0aW9ucy4kXG4gIHRoaXMuZG9jdW1lbnQgPSBtb3JlT3B0aW9ucy5kb2N1bWVudFxuICB0aGlzLndpbmRvdyA9IG1vcmVPcHRpb25zLndpbmRvd1xuICBpZiAoIXRoaXMuJCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGpxdWVyeSBpbiBjb250ZW50IHNlbGVjdG9yJylcbiAgaWYgKCF0aGlzLmRvY3VtZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGRvY3VtZW50XCIpXG4gIGlmKCF0aGlzLndpbmRvdykgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB3aW5kb3dcIilcbiAgaWYgKHRoaXMucGFyZW50Q1NTU2VsZWN0b3IpIHtcbiAgICB0aGlzLnBhcmVudCA9IHRoaXMuJCh0aGlzLnBhcmVudENTU1NlbGVjdG9yKVswXVxuXG5cdFx0Ly8gIGhhbmRsZSBzaXR1YXRpb24gd2hlbiBwYXJlbnQgc2VsZWN0b3Igbm90IGZvdW5kXG4gICAgaWYgKHRoaXMucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGVmZXJyZWRDU1NTZWxlY3RvclJlc3BvbnNlLnJlamVjdCgncGFyZW50IHNlbGVjdG9yIG5vdCBmb3VuZCcpXG4gICAgICB0aGlzLmFsZXJ0KCdQYXJlbnQgZWxlbWVudCBub3QgZm91bmQhJylcbiAgICB9XG4gIH1cdGVsc2Uge1xuICAgIHRoaXMucGFyZW50ID0gdGhpcy4kKCdib2R5JylbMF1cbiAgfVxufVxuXG5Db250ZW50U2VsZWN0b3IucHJvdG90eXBlID0ge1xuXG5cdC8qKlxuXHQgKiBnZXQgY3NzIHNlbGVjdG9yIHNlbGVjdGVkIGJ5IHRoZSB1c2VyXG5cdCAqL1xuICBnZXRDU1NTZWxlY3RvcjogZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICBpZiAodGhpcy5kZWZlcnJlZENTU1NlbGVjdG9yUmVzcG9uc2Uuc3RhdGUoKSAhPT0gJ3JlamVjdGVkJykge1xuXHRcdFx0Ly8gZWxlbWVudHMgdGhhdCBhcmUgc2VsZWN0ZWQgYnkgdGhlIHVzZXJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IFtdXG5cdFx0XHQvLyBlbGVtZW50IHNlbGVjdGVkIGZyb20gdG9wXG4gICAgICB0aGlzLnRvcCA9IDBcblxuXHRcdFx0Ly8gaW5pdGlhbGl6ZSBjc3Mgc2VsZWN0b3JcbiAgICAgIHRoaXMuaW5pdENzc1NlbGVjdG9yKGZhbHNlKVxuXG4gICAgICB0aGlzLmluaXRHVUkoKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmVycmVkQ1NTU2VsZWN0b3JSZXNwb25zZS5wcm9taXNlKClcbiAgfSxcblxuICBnZXRDdXJyZW50Q1NTU2VsZWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzICYmIHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgY3NzU2VsZWN0b3JcblxuXHRcdFx0Ly8gaGFuZGxlIHNwZWNpYWwgY2FzZSB3aGVuIHBhcmVudCBpcyBzZWxlY3RlZFxuICAgICAgaWYgKHRoaXMuaXNQYXJlbnRTZWxlY3RlZCgpKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY3NzU2VsZWN0b3IgPSAnX3BhcmVudF8nXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4kKCcjLXNlbGVjdG9yLXRvb2xiYXIgW25hbWU9ZGlmZXJlbnRFbGVtZW50U2VsZWN0aW9uXScpLnByb3AoJ2NoZWNrZWQnKSkge1xuICAgICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5zZWxlY3RlZEVsZW1lbnRzLmNsb25lKClcbiAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLnNwbGljZShzZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YodGhpcy5wYXJlbnQpLCAxKVxuICAgICAgICAgIGNzc1NlbGVjdG9yID0gJ19wYXJlbnRfLCAnICsgdGhpcy5jc3NTZWxlY3Rvci5nZXRDc3NTZWxlY3RvcihzZWxlY3RlZEVsZW1lbnRzLCB0aGlzLnRvcClcbiAgICAgICAgfSBlbHNlIHtcblx0XHRcdFx0XHQvLyB3aWxsIHRyaWdnZXIgZXJyb3Igd2hlcmUgbXVsdGlwbGUgc2VsZWN0aW9ucyBhcmUgbm90IGFsbG93ZWRcbiAgICAgICAgICBjc3NTZWxlY3RvciA9IHRoaXMuY3NzU2VsZWN0b3IuZ2V0Q3NzU2VsZWN0b3IodGhpcy5zZWxlY3RlZEVsZW1lbnRzLCB0aGlzLnRvcClcbiAgICAgICAgfVxuICAgICAgfVx0XHRcdGVsc2Uge1xuICAgICAgICBjc3NTZWxlY3RvciA9IHRoaXMuY3NzU2VsZWN0b3IuZ2V0Q3NzU2VsZWN0b3IodGhpcy5zZWxlY3RlZEVsZW1lbnRzLCB0aGlzLnRvcClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzc1NlbGVjdG9yXG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9LFxuXG4gIGlzUGFyZW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YodGhpcy5wYXJlbnQpICE9PSAtMVxuICB9LFxuXG5cdC8qKlxuXHQgKiBpbml0aWFsaXplIG9yIHJlY29uZmlndXJlIGNzcyBzZWxlY3RvciBjbGFzc1xuXHQgKiBAcGFyYW0gYWxsb3dNdWx0aXBsZVNlbGVjdG9yc1xuXHQgKi9cbiAgaW5pdENzc1NlbGVjdG9yOiBmdW5jdGlvbiAoYWxsb3dNdWx0aXBsZVNlbGVjdG9ycykge1xuICAgIHRoaXMuY3NzU2VsZWN0b3IgPSBuZXcgQ3NzU2VsZWN0b3Ioe1xuICAgICAgZW5hYmxlU21hcnRUYWJsZVNlbGVjdG9yOiB0cnVlLFxuICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCxcbiAgICAgIGFsbG93TXVsdGlwbGVTZWxlY3RvcnM6IGFsbG93TXVsdGlwbGVTZWxlY3RvcnMsXG4gICAgICBpZ25vcmVkQ2xhc3NlczogW1xuICAgICAgICAnLXNpdGVtYXAtc2VsZWN0LWl0ZW0tc2VsZWN0ZWQnLFxuICAgICAgICAnLXNpdGVtYXAtc2VsZWN0LWl0ZW0taG92ZXInLFxuICAgICAgICAnLXNpdGVtYXAtcGFyZW50JyxcbiAgICAgICAgJy13ZWItc2NyYXBlci1pbWctb24tdG9wJyxcbiAgICAgICAgJy13ZWItc2NyYXBlci1zZWxlY3Rpb24tYWN0aXZlJ1xuICAgICAgXSxcbiAgICAgIHF1ZXJ5OiB0aGlzLiRcbiAgICB9KVxuICB9LFxuXG4gIHByZXZpZXdTZWxlY3RvcjogZnVuY3Rpb24gKGVsZW1lbnRDU1NTZWxlY3Rvcikge1xuICAgIHZhciAkID0gdGhpcy4kXG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgIHZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICAgIGlmICh0aGlzLmRlZmVycmVkQ1NTU2VsZWN0b3JSZXNwb25zZS5zdGF0ZSgpICE9PSAncmVqZWN0ZWQnKSB7XG4gICAgICB0aGlzLmhpZ2hsaWdodFBhcmVudCgpXG4gICAgICAkKEVsZW1lbnRRdWVyeShlbGVtZW50Q1NTU2VsZWN0b3IsIHRoaXMucGFyZW50LCB7JCwgZG9jdW1lbnQsIHdpbmRvd30pKS5hZGRDbGFzcygnLXNpdGVtYXAtc2VsZWN0LWl0ZW0tc2VsZWN0ZWQnKVxuICAgICAgdGhpcy5kZWZlcnJlZENTU1NlbGVjdG9yUmVzcG9uc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmZXJyZWRDU1NTZWxlY3RvclJlc3BvbnNlLnByb21pc2UoKVxuICB9LFxuXG4gIGluaXRHVUk6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgdGhpcy5oaWdobGlnaHRQYXJlbnQoKVxuXG5cdFx0Ly8gYWxsIGVsZW1lbnRzIGV4Y2VwdCB0b29sYmFyXG4gICAgdGhpcy4kYWxsRWxlbWVudHMgPSB0aGlzLiQodGhpcy5hbGxvd2VkRWxlbWVudHMgKyAnOm5vdCgjLXNlbGVjdG9yLXRvb2xiYXIpOm5vdCgjLXNlbGVjdG9yLXRvb2xiYXIgKiknLCB0aGlzLnBhcmVudClcblx0XHQvLyBhbGxvdyBzZWxlY3RpbmcgcGFyZW50IGFsc29cbiAgICBpZiAodGhpcy5wYXJlbnQgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIHRoaXMuJGFsbEVsZW1lbnRzLnB1c2godGhpcy5wYXJlbnQpXG4gICAgfVxuXG4gICAgdGhpcy5iaW5kRWxlbWVudEhpZ2hsaWdodCgpXG4gICAgdGhpcy5iaW5kRWxlbWVudFNlbGVjdGlvbigpXG4gICAgdGhpcy5iaW5kS2V5Ym9hcmRTZWxlY3Rpb25NYW5pcHVsYXRpb25zKClcbiAgICB0aGlzLmF0dGFjaFRvb2xiYXIoKVxuICAgIHRoaXMuYmluZE11bHRpcGxlR3JvdXBDaGVja2JveCgpXG4gICAgdGhpcy5iaW5kTXVsdGlwbGVHcm91cFBvcHVwSGlkZSgpXG4gICAgdGhpcy5iaW5kTW92ZUltYWdlc1RvVG9wKClcbiAgfSxcblxuICBiaW5kRWxlbWVudFNlbGVjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJGFsbEVsZW1lbnRzLmJpbmQoJ2NsaWNrLmVsZW1lbnRTZWxlY3RvcicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGUuY3VycmVudFRhcmdldFxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpID09PSAtMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChlbGVtZW50KVxuICAgICAgfVxuICAgICAgdGhpcy5oaWdobGlnaHRTZWxlY3RlZEVsZW1lbnRzKClcblxuXHRcdFx0Ly8gQ2FuY2VsIGFsbCBvdGhlciBldmVudHNcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0uYmluZCh0aGlzKSlcbiAgfSxcblxuXHQvKipcblx0ICogQWRkIHRvIHNlbGVjdCBlbGVtZW50cyB0aGUgZWxlbWVudCB0aGF0IGlzIHVuZGVyIHRoZSBtb3VzZVxuXHQgKi9cbiAgc2VsZWN0TW91c2VPdmVyRWxlbWVudDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbGVtZW50ID0gdGhpcy5tb3VzZU92ZXJFbGVtZW50XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5wdXNoKGVsZW1lbnQpXG4gICAgICB0aGlzLmhpZ2hsaWdodFNlbGVjdGVkRWxlbWVudHMoKVxuICAgIH1cbiAgfSxcblxuICBiaW5kRWxlbWVudEhpZ2hsaWdodDogZnVuY3Rpb24gKCkge1xuICAgIHZhciAkID0gdGhpcy4kXG4gICAgJCh0aGlzLiRhbGxFbGVtZW50cykuYmluZCgnbW91c2VvdmVyLmVsZW1lbnRTZWxlY3RvcicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGUuY3VycmVudFRhcmdldFxuICAgICAgdGhpcy5tb3VzZU92ZXJFbGVtZW50ID0gZWxlbWVudFxuICAgICAgJChlbGVtZW50KS5hZGRDbGFzcygnLXNpdGVtYXAtc2VsZWN0LWl0ZW0taG92ZXInKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfS5iaW5kKHRoaXMpKS5iaW5kKCdtb3VzZW91dC5lbGVtZW50U2VsZWN0b3InLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBlLmN1cnJlbnRUYXJnZXRcbiAgICAgIHRoaXMubW91c2VPdmVyRWxlbWVudCA9IG51bGxcbiAgICAgICQoZWxlbWVudCkucmVtb3ZlQ2xhc3MoJy1zaXRlbWFwLXNlbGVjdC1pdGVtLWhvdmVyJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0uYmluZCh0aGlzKSlcbiAgfSxcblxuICBiaW5kTW92ZUltYWdlc1RvVG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICAkKCdib2R5JykuYWRkQ2xhc3MoJy13ZWItc2NyYXBlci1zZWxlY3Rpb24tYWN0aXZlJylcblxuXHRcdC8vIGRvIHRoaXMgb25seSB3aGVuIHNlbGVjdGluZyBpbWFnZXNcbiAgICBpZiAodGhpcy5hbGxvd2VkRWxlbWVudHMgPT09ICdpbWcnKSB7XG4gICAgICAkKCdpbWcnKS5maWx0ZXIoZnVuY3Rpb24gKGksIGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuICQoZWxlbWVudCkuY3NzKCdwb3NpdGlvbicpID09PSAnc3RhdGljJ1xuICAgICAgfSkuYWRkQ2xhc3MoJy13ZWItc2NyYXBlci1pbWctb24tdG9wJylcbiAgICB9XG4gIH0sXG5cbiAgdW5iaW5kTW92ZUltYWdlc1RvVG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kKCdib2R5Li13ZWItc2NyYXBlci1zZWxlY3Rpb24tYWN0aXZlJykucmVtb3ZlQ2xhc3MoJy13ZWItc2NyYXBlci1zZWxlY3Rpb24tYWN0aXZlJylcbiAgICB0aGlzLiQoJ2ltZy4td2ViLXNjcmFwZXItaW1nLW9uLXRvcCcpLnJlbW92ZUNsYXNzKCctd2ViLXNjcmFwZXItaW1nLW9uLXRvcCcpXG4gIH0sXG5cbiAgc2VsZWN0Q2hpbGQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRvcC0tXG4gICAgaWYgKHRoaXMudG9wIDwgMCkge1xuICAgICAgdGhpcy50b3AgPSAwXG4gICAgfVxuICB9LFxuICBzZWxlY3RQYXJlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRvcCsrXG4gIH0sXG5cblx0Ly8gVXNlciB3aXRoIGtleWJvYXJkIGFycm93cyBjYW4gc2VsZWN0IGNoaWxkIG9yIHBhcmV0IGVsZW1lbnRzIG9mIHNlbGVjdGVkIGVsZW1lbnRzLlxuICBiaW5kS2V5Ym9hcmRTZWxlY3Rpb25NYW5pcHVsYXRpb25zOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG5cdFx0Ly8gY2hlY2sgZm9yIGZvY3VzXG4gICAgdmFyIGxhc3RGb2N1c1N0YXR1c1xuICAgIHRoaXMua2V5UHJlc3NGb2N1c0ludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGZvY3VzID0gZG9jdW1lbnQuaGFzRm9jdXMoKVxuICAgICAgaWYgKGZvY3VzID09PSBsYXN0Rm9jdXNTdGF0dXMpIHJldHVyblxuICAgICAgbGFzdEZvY3VzU3RhdHVzID0gZm9jdXNcblxuICAgICAgJCgnIy1zZWxlY3Rvci10b29sYmFyIC5rZXktYnV0dG9uJykudG9nZ2xlQ2xhc3MoJ2hpZGUnLCAhZm9jdXMpXG4gICAgICAkKCcjLXNlbGVjdG9yLXRvb2xiYXIgLmtleS1ldmVudHMnKS50b2dnbGVDbGFzcygnaGlkZScsIGZvY3VzKVxuICAgIH0sIDIwMClcblxuXHRcdC8vIFVzaW5nIHVwL2Rvd24gYXJyb3dzIHVzZXIgY2FuIHNlbGVjdCBlbGVtZW50cyBmcm9tIHRvcCBvZiB0aGVcblx0XHQvLyBzZWxlY3RlZCBlbGVtZW50XG4gICAgJChkb2N1bWVudCkuYmluZCgna2V5ZG93bi5zZWxlY3Rpb25NYW5pcHVsYXRpb24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdC8vIHNlbGVjdCBjaGlsZCBDXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gNjcpIHtcbiAgICAgICAgdGhpcy5hbmltYXRlQ2xpY2tlZEtleSgkKCcjLXNlbGVjdG9yLXRvb2xiYXIgLmtleS1idXR0b24tY2hpbGQnKSlcbiAgICAgICAgdGhpcy5zZWxlY3RDaGlsZCgpXG4gICAgICB9XG5cdFx0XHQvLyBzZWxlY3QgcGFyZW50IFBcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDgwKSB7XG4gICAgICAgIHRoaXMuYW5pbWF0ZUNsaWNrZWRLZXkoJCgnIy1zZWxlY3Rvci10b29sYmFyIC5rZXktYnV0dG9uLXBhcmVudCcpKVxuICAgICAgICB0aGlzLnNlbGVjdFBhcmVudCgpXG4gICAgICB9XG5cdFx0XHQvLyBzZWxlY3QgZWxlbWVudFxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gODMpIHtcbiAgICAgICAgdGhpcy5hbmltYXRlQ2xpY2tlZEtleSgkKCcjLXNlbGVjdG9yLXRvb2xiYXIgLmtleS1idXR0b24tc2VsZWN0JykpXG4gICAgICAgIHRoaXMuc2VsZWN0TW91c2VPdmVyRWxlbWVudCgpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlnaGxpZ2h0U2VsZWN0ZWRFbGVtZW50cygpXG4gICAgfS5iaW5kKHRoaXMpKVxuICB9LFxuXG4gIGFuaW1hdGVDbGlja2VkS2V5OiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciAkID0gdGhpcy4kXG4gICAgJChlbGVtZW50KS5yZW1vdmVDbGFzcygnY2xpY2tlZCcpLnJlbW92ZUNsYXNzKCdjbGlja2VkLWFuaW1hdGlvbicpXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAkKGVsZW1lbnQpLmFkZENsYXNzKCdjbGlja2VkJylcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAkKGVsZW1lbnQpLmFkZENsYXNzKCdjbGlja2VkLWFuaW1hdGlvbicpXG4gICAgICB9LCAxMDApXG4gICAgfSwgMSlcbiAgfSxcblxuICBoaWdobGlnaHRTZWxlY3RlZEVsZW1lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgdmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXN1bHRDc3NTZWxlY3RvciA9IHRoaXMuZ2V0Q3VycmVudENTU1NlbGVjdG9yKClcblxuICAgICAgJCgnYm9keSAjLXNlbGVjdG9yLXRvb2xiYXIgLnNlbGVjdG9yJykudGV4dChyZXN1bHRDc3NTZWxlY3Rvcilcblx0XHRcdC8vIGhpZ2hsaWdodCBzZWxlY3RlZCBlbGVtZW50c1xuICAgICAgJCgnLi1zaXRlbWFwLXNlbGVjdC1pdGVtLXNlbGVjdGVkJykucmVtb3ZlQ2xhc3MoJy1zaXRlbWFwLXNlbGVjdC1pdGVtLXNlbGVjdGVkJylcbiAgICAgICQoRWxlbWVudFF1ZXJ5KHJlc3VsdENzc1NlbGVjdG9yLCB0aGlzLnBhcmVudCwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KSkuYWRkQ2xhc3MoJy1zaXRlbWFwLXNlbGVjdC1pdGVtLXNlbGVjdGVkJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgPT09ICdmb3VuZCBtdWx0aXBsZSBlbGVtZW50IGdyb3VwcywgYnV0IGFsbG93TXVsdGlwbGVTZWxlY3RvcnMgZGlzYWJsZWQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdtdWx0aXBsZSBkaWZmZXJlbnQgZWxlbWVudCBzZWxlY3Rpb24gZGlzYWJsZWQnKVxuXG4gICAgICAgIHRoaXMuc2hvd011bHRpcGxlR3JvdXBQb3B1cCgpXG5cdFx0XHRcdC8vIHJlbW92ZSBsYXN0IGFkZGVkIGVsZW1lbnRcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzLnBvcCgpXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0U2VsZWN0ZWRFbGVtZW50cygpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHNob3dNdWx0aXBsZUdyb3VwUG9wdXA6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiQoJyMtc2VsZWN0b3ItdG9vbGJhciAucG9wb3ZlcicpLmF0dHIoJ3N0eWxlJywgJ2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudDsnKVxuICB9LFxuXG4gIGhpZGVNdWx0aXBsZUdyb3VwUG9wdXA6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiQoJyMtc2VsZWN0b3ItdG9vbGJhciAucG9wb3ZlcicpLmF0dHIoJ3N0eWxlJywgJycpXG4gIH0sXG5cbiAgYmluZE11bHRpcGxlR3JvdXBQb3B1cEhpZGU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiQoJyMtc2VsZWN0b3ItdG9vbGJhciAucG9wb3ZlciAuY2xvc2UnKS5jbGljayh0aGlzLmhpZGVNdWx0aXBsZUdyb3VwUG9wdXAuYmluZCh0aGlzKSlcbiAgfSxcblxuICB1bmJpbmRNdWx0aXBsZUdyb3VwUG9wdXBIaWRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kKCcjLXNlbGVjdG9yLXRvb2xiYXIgLnBvcG92ZXIgLmNsb3NlJykudW5iaW5kKCdjbGljaycpXG4gIH0sXG5cbiAgYmluZE11bHRpcGxlR3JvdXBDaGVja2JveDogZnVuY3Rpb24gKCkge1xuICAgIHZhciAkID0gdGhpcy4kXG4gICAgJCgnIy1zZWxlY3Rvci10b29sYmFyIFtuYW1lPWRpZmVyZW50RWxlbWVudFNlbGVjdGlvbl0nKS5jaGFuZ2UoZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICgkKGUuY3VycmVudFRhcmdldCkuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgdGhpcy5pbml0Q3NzU2VsZWN0b3IodHJ1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5pdENzc1NlbGVjdG9yKGZhbHNlKVxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSlcbiAgfSxcbiAgdW5iaW5kTXVsdGlwbGVHcm91cENoZWNrYm94OiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kKCcjLXNlbGVjdG9yLXRvb2xiYXIgLmRpZmVyZW50RWxlbWVudFNlbGVjdGlvbicpLnVuYmluZCgnY2hhbmdlJylcbiAgfSxcblxuICBhdHRhY2hUb29sYmFyOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICB2YXIgJHRvb2xiYXIgPSAnPGRpdiBpZD1cIi1zZWxlY3Rvci10b29sYmFyXCI+JyArXG5cdFx0XHQnPGRpdiBjbGFzcz1cImxpc3QtaXRlbVwiPjxkaXYgY2xhc3M9XCJzZWxlY3Rvci1jb250YWluZXJcIj48ZGl2IGNsYXNzPVwic2VsZWN0b3JcIj48L2Rpdj48L2Rpdj48L2Rpdj4nICtcblx0XHRcdCc8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb24gbGlzdC1pdGVtXCI+JyArXG5cdFx0XHRcdCc8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgdGl0bGU9XCJFbmFibGUgZGlmZmVyZW50IHR5cGUgZWxlbWVudCBzZWxlY3Rpb25cIiBuYW1lPVwiZGlmZXJlbnRFbGVtZW50U2VsZWN0aW9uXCI+JyArXG5cdFx0XHRcdCc8ZGl2IGNsYXNzPVwicG9wb3ZlciB0b3BcIj4nICtcblx0XHRcdFx0JzxkaXYgY2xhc3M9XCJjbG9zZVwiPsOXPC9kaXY+JyArXG5cdFx0XHRcdCc8ZGl2IGNsYXNzPVwiYXJyb3dcIj48L2Rpdj4nICtcblx0XHRcdFx0JzxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnRcIj4nICtcblx0XHRcdFx0JzxkaXYgY2xhc3M9XCJ0eHRcIj4nICtcblx0XHRcdFx0J0RpZmZlcmVudCB0eXBlIGVsZW1lbnQgc2VsZWN0aW9uIGlzIGRpc2FibGVkLiBJZiB0aGUgZWxlbWVudCAnICtcblx0XHRcdFx0J3lvdSBjbGlja2VkIHNob3VsZCBhbHNvIGJlIGluY2x1ZGVkIHRoZW4gZW5hYmxlIHRoaXMgYW5kICcgK1xuXHRcdFx0XHQnY2xpY2sgb24gdGhlIGVsZW1lbnQgYWdhaW4uIFVzdWFsbHkgdGhpcyBpcyBub3QgbmVlZGVkLicgK1xuXHRcdFx0XHQnPC9kaXY+JyArXG5cdFx0XHRcdCc8L2Rpdj4nICtcblx0XHRcdFx0JzwvZGl2PicgK1xuXHRcdFx0JzwvZGl2PicgK1xuXHRcdFx0JzxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0ga2V5LWV2ZW50c1wiPjxkaXYgdGl0bGU9XCJDbGljayBoZXJlIHRvIGVuYWJsZSBrZXkgcHJlc3MgZXZlbnRzIGZvciBzZWxlY3Rpb25cIj5FbmFibGUga2V5IGV2ZW50czwvZGl2PjwvZGl2PicgK1xuXHRcdFx0JzxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0ga2V5LWJ1dHRvbiBrZXktYnV0dG9uLXNlbGVjdCBoaWRlXCIgdGl0bGU9XCJVc2UgUyBrZXkgdG8gc2VsZWN0IGVsZW1lbnRcIj5TPC9kaXY+JyArXG5cdFx0XHQnPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBrZXktYnV0dG9uIGtleS1idXR0b24tcGFyZW50IGhpZGVcIiB0aXRsZT1cIlVzZSBQIGtleSB0byBzZWxlY3QgcGFyZW50XCI+UDwvZGl2PicgK1xuXHRcdFx0JzxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0ga2V5LWJ1dHRvbiBrZXktYnV0dG9uLWNoaWxkIGhpZGVcIiB0aXRsZT1cIlVzZSBDIGtleSB0byBzZWxlY3QgY2hpbGRcIj5DPC9kaXY+JyArXG5cdFx0XHQnPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBkb25lLXNlbGVjdGluZy1idXR0b25cIj5Eb25lIHNlbGVjdGluZyE8L2Rpdj4nICtcblx0XHRcdCc8L2Rpdj4nXG4gICAgJCgnYm9keScpLmFwcGVuZCgkdG9vbGJhcilcblxuICAgICQoJ2JvZHkgIy1zZWxlY3Rvci10b29sYmFyIC5kb25lLXNlbGVjdGluZy1idXR0b24nKS5jbGljayhmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkZpbmlzaGVkKClcbiAgICB9LmJpbmQodGhpcykpXG4gIH0sXG4gIGhpZ2hsaWdodFBhcmVudDogZnVuY3Rpb24gKCkge1xuICAgIHZhciAkID0gdGhpcy4kXG5cdFx0Ly8gZG8gbm90IGhpZ2hsaWdodCBwYXJlbnQgaWYgaXRzIHRoZSBib2R5XG4gICAgaWYgKCEkKHRoaXMucGFyZW50KS5pcygnYm9keScpICYmICEkKHRoaXMucGFyZW50KS5pcygnI3dlYnBhZ2UnKSkge1xuICAgICAgJCh0aGlzLnBhcmVudCkuYWRkQ2xhc3MoJy1zaXRlbWFwLXBhcmVudCcpXG4gICAgfVxuICB9LFxuXG4gIHVuYmluZEVsZW1lbnRTZWxlY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgICQodGhpcy4kYWxsRWxlbWVudHMpLnVuYmluZCgnY2xpY2suZWxlbWVudFNlbGVjdG9yJylcblx0XHQvLyByZW1vdmUgaGlnaGxpZ2h0ZWQgZWxlbWVudCBjbGFzc2VzXG4gICAgdGhpcy51bmJpbmRFbGVtZW50U2VsZWN0aW9uSGlnaGxpZ2h0KClcbiAgfSxcbiAgdW5iaW5kRWxlbWVudFNlbGVjdGlvbkhpZ2hsaWdodDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJCgnLi1zaXRlbWFwLXNlbGVjdC1pdGVtLXNlbGVjdGVkJykucmVtb3ZlQ2xhc3MoJy1zaXRlbWFwLXNlbGVjdC1pdGVtLXNlbGVjdGVkJylcbiAgICB0aGlzLiQoJy4tc2l0ZW1hcC1wYXJlbnQnKS5yZW1vdmVDbGFzcygnLXNpdGVtYXAtcGFyZW50JylcbiAgfSxcbiAgdW5iaW5kRWxlbWVudEhpZ2hsaWdodDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJCh0aGlzLiRhbGxFbGVtZW50cykudW5iaW5kKCdtb3VzZW92ZXIuZWxlbWVudFNlbGVjdG9yJylcblx0XHRcdC51bmJpbmQoJ21vdXNlb3V0LmVsZW1lbnRTZWxlY3RvcicpXG4gIH0sXG4gIHVuYmluZEtleWJvYXJkU2VsZWN0aW9uTWFpcHVsYXRpb3M6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiQoZG9jdW1lbnQpLnVuYmluZCgna2V5ZG93bi5zZWxlY3Rpb25NYW5pcHVsYXRpb24nKVxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5rZXlQcmVzc0ZvY3VzSW50ZXJ2YWwpXG4gIH0sXG4gIHJlbW92ZVRvb2xiYXI6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiQoJ2JvZHkgIy1zZWxlY3Rvci10b29sYmFyIGEnKS51bmJpbmQoJ2NsaWNrJylcbiAgICB0aGlzLiQoJyMtc2VsZWN0b3ItdG9vbGJhcicpLnJlbW92ZSgpXG4gIH0sXG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0b29sYmFyIGFuZCB1bmJpbmQgZXZlbnRzXG5cdCAqL1xuICByZW1vdmVHVUk6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnVuYmluZEVsZW1lbnRTZWxlY3Rpb24oKVxuICAgIHRoaXMudW5iaW5kRWxlbWVudEhpZ2hsaWdodCgpXG4gICAgdGhpcy51bmJpbmRLZXlib2FyZFNlbGVjdGlvbk1haXB1bGF0aW9zKClcbiAgICB0aGlzLnVuYmluZE11bHRpcGxlR3JvdXBQb3B1cEhpZGUoKVxuICAgIHRoaXMudW5iaW5kTXVsdGlwbGVHcm91cENoZWNrYm94KClcbiAgICB0aGlzLnVuYmluZE1vdmVJbWFnZXNUb1RvcCgpXG4gICAgdGhpcy5yZW1vdmVUb29sYmFyKClcbiAgfSxcblxuICBzZWxlY3Rpb25GaW5pc2hlZDogZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHRDc3NTZWxlY3RvciA9IHRoaXMuZ2V0Q3VycmVudENTU1NlbGVjdG9yKClcblxuICAgIHRoaXMuZGVmZXJyZWRDU1NTZWxlY3RvclJlc3BvbnNlLnJlc29sdmUoe1xuICAgICAgQ1NTU2VsZWN0b3I6IHJlc3VsdENzc1NlbGVjdG9yXG4gICAgfSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRlbnRTZWxlY3RvclxuIiwidmFyIFNlbGVjdG9yTGlzdCA9IHJlcXVpcmUoJy4vU2VsZWN0b3JMaXN0JylcbnZhciBTaXRlbWFwID0gcmVxdWlyZSgnLi9TaXRlbWFwJylcbnZhciB3aGVuQ2FsbFNlcXVlbnRpYWxseSA9IHJlcXVpcmUoJy4uL2Fzc2V0cy9qcXVlcnkud2hlbmNhbGxzZXF1ZW50aWFsbHknKVxudmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG5cbnZhciBEYXRhRXh0cmFjdG9yID0gZnVuY3Rpb24gKG9wdGlvbnMsIG1vcmVPcHRpb25zKSB7XG4gIHRoaXMuJCA9IG1vcmVPcHRpb25zLiRcbnRoaXMuZG9jdW1lbnQgPSBtb3JlT3B0aW9ucy5kb2N1bWVudFxudGhpcy53aW5kb3cgPSBtb3JlT3B0aW9ucy53aW5kb3dcbiAgaWYgKCFtb3JlT3B0aW9ucy4kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGpxdWVyeSBpbiBEYXRhIEV4dHJhY3RvcicpXG4gIH1cbiAgaWYgKCFtb3JlT3B0aW9ucy5kb2N1bWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBkb2N1bWVudCBpbiBEYXRhIEV4dHJhY3RvcicpXG4gIH1cbiAgaWYgKCFtb3JlT3B0aW9ucy53aW5kb3cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgd2luZG93IGluIERhdGEgRXh0cmFjdG9yJylcbiAgfVxuICB2YXIgJCA9IHRoaXMuJFxuICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gIHZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICBpZiAob3B0aW9ucy5zaXRlbWFwIGluc3RhbmNlb2YgU2l0ZW1hcCkge1xuICAgIHRoaXMuc2l0ZW1hcCA9IG9wdGlvbnMuc2l0ZW1hcFxuICB9IGVsc2Uge1xuICAgIHRoaXMuc2l0ZW1hcCA9IG5ldyBTaXRlbWFwKG9wdGlvbnMuc2l0ZW1hcCwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICB9XG5cbiAgdGhpcy5wYXJlbnRTZWxlY3RvcklkID0gb3B0aW9ucy5wYXJlbnRTZWxlY3RvcklkXG4gIHRoaXMucGFyZW50RWxlbWVudCA9IG9wdGlvbnMucGFyZW50RWxlbWVudCB8fCAkKCdodG1sJylbMF1cbn1cblxuRGF0YUV4dHJhY3Rvci5wcm90b3R5cGUgPSB7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBsaXN0IG9mIGluZGVwZW5kZW50IHNlbGVjdG9yIGxpc3RzLiBmb2xsb3c9dHJ1ZSBzcGxpdHMgc2VsZWN0b3JzIGluIHRyZWVzLlxuXHQgKiBUd28gc2lkZSBieSBzaWRlIHR5cGU9bXVsdGlwbGUgc2VsZWN0b3JzIHNwbGl0IHRyZWVzLlxuXHQgKi9cbiAgZmluZFNlbGVjdG9yVHJlZXM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICB2YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICByZXR1cm4gdGhpcy5fZmluZFNlbGVjdG9yVHJlZXModGhpcy5wYXJlbnRTZWxlY3RvcklkLCBuZXcgU2VsZWN0b3JMaXN0KG51bGwsIHskLCB3aW5kb3csIGRvY3VtZW50fSkpXG4gIH0sXG5cblx0LyoqXG5cdCAqIHRoZSBzZWxlY3RvciBjYW5ub3QgcmV0dXJuIG11bHRpcGxlIHJlY29yZHMgYW5kIGl0IGFsc28gY2Fubm90IGNyZWF0ZSBuZXcgam9icy4gQWxzbyBhbGwgb2YgaXRzIGNoaWxkIHNlbGVjdG9yc1xuXHQgKiBtdXN0IGhhdmUgdGhlIHNhbWUgZmVhdHVyZXNcblx0ICogQHBhcmFtIHNlbGVjdG9yXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cbiAgc2VsZWN0b3JJc0NvbW1vblRvQWxsVHJlZXM6IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuXHRcdC8vIHNlbGVjdG9ycyB3aGljaCByZXR1cm4gbXV0aXBsZSBpdGVtcyBjYW5ub3QgYmUgY29tbW9uIHRvIGFsbFxuXHRcdC8vIHNlbGVjdG9yc1xuICAgIGlmIChzZWxlY3Rvci53aWxsUmV0dXJuTXVsdGlwbGVSZWNvcmRzKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuXHRcdC8vIExpbmsgc2VsZWN0b3JzIHdoaWNoIHdpbGwgZm9sbG93IHRvIGEgbmV3IHBhZ2UgYWxzbyBjYW5ub3QgYmUgY29tbW9uXG5cdFx0Ly8gdG8gYWxsIHNlbGVjdG9yc1xuICAgIGlmIChzZWxlY3Rvci5jYW5DcmVhdGVOZXdKb2JzKCkgJiZcblx0XHRcdHRoaXMuc2l0ZW1hcC5nZXREaXJlY3RDaGlsZFNlbGVjdG9ycyhzZWxlY3Rvci5pZCkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG5cdFx0Ly8gYWxzbyBhbGwgY2hpbGQgc2VsZWN0b3JzIG11c3QgaGF2ZSB0aGUgc2FtZSBmZWF0dXJlc1xuICAgIHZhciBjaGlsZFNlbGVjdG9ycyA9IHRoaXMuc2l0ZW1hcC5nZXRBbGxTZWxlY3RvcnMoc2VsZWN0b3IuaWQpXG4gICAgZm9yICh2YXIgaSBpbiBjaGlsZFNlbGVjdG9ycykge1xuICAgICAgdmFyIGNoaWxkU2VsZWN0b3IgPSBjaGlsZFNlbGVjdG9yc1tpXVxuICAgICAgaWYgKCF0aGlzLnNlbGVjdG9ySXNDb21tb25Ub0FsbFRyZWVzKGNoaWxkU2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGdldFNlbGVjdG9yc0NvbW1vblRvQWxsVHJlZXM6IGZ1bmN0aW9uIChwYXJlbnRTZWxlY3RvcklkKSB7XG4gICAgdmFyIGNvbW1vblNlbGVjdG9ycyA9IFtdXG4gICAgdmFyIGNoaWxkU2VsZWN0b3JzID0gdGhpcy5zaXRlbWFwLmdldERpcmVjdENoaWxkU2VsZWN0b3JzKHBhcmVudFNlbGVjdG9ySWQpXG5cbiAgICBjaGlsZFNlbGVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZFNlbGVjdG9yKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RvcklzQ29tbW9uVG9BbGxUcmVlcyhjaGlsZFNlbGVjdG9yKSkge1xuICAgICAgICBjb21tb25TZWxlY3RvcnMucHVzaChjaGlsZFNlbGVjdG9yKVxuXHRcdFx0XHQvLyBhbHNvIGFkZCBhbGwgY2hpbGQgc2VsZWN0b3JzIHdoaWNoLiBDaGlsZCBzZWxlY3RvcnMgd2VyZSBhbHNvIGNoZWNrZWRcblxuICAgICAgICB2YXIgc2VsZWN0b3JDaGlsZFNlbGVjdG9ycyA9IHRoaXMuc2l0ZW1hcC5nZXRBbGxTZWxlY3RvcnMoY2hpbGRTZWxlY3Rvci5pZClcbiAgICAgICAgc2VsZWN0b3JDaGlsZFNlbGVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICAgIGlmIChjb21tb25TZWxlY3RvcnMuaW5kZXhPZihzZWxlY3RvcikgPT09IC0xKSB7XG4gICAgICAgICAgICBjb21tb25TZWxlY3RvcnMucHVzaChzZWxlY3RvcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgcmV0dXJuIGNvbW1vblNlbGVjdG9yc1xuICB9LFxuXG4gIF9maW5kU2VsZWN0b3JUcmVlczogZnVuY3Rpb24gKHBhcmVudFNlbGVjdG9ySWQsIGNvbW1vblNlbGVjdG9yc0Zyb21QYXJlbnQpIHtcbiAgICB2YXIgY29tbW9uU2VsZWN0b3JzID0gY29tbW9uU2VsZWN0b3JzRnJvbVBhcmVudC5jb25jYXQodGhpcy5nZXRTZWxlY3RvcnNDb21tb25Ub0FsbFRyZWVzKHBhcmVudFNlbGVjdG9ySWQpKVxuXG5cdFx0Ly8gZmluZCBzZWxlY3RvcnMgdGhhdCB3aWxsIGJlIG1ha2luZyBhIHNlbGVjdG9yIHRyZWVcbiAgICB2YXIgc2VsZWN0b3JUcmVlcyA9IFtdXG4gICAgdmFyIGNoaWxkU2VsZWN0b3JzID0gdGhpcy5zaXRlbWFwLmdldERpcmVjdENoaWxkU2VsZWN0b3JzKHBhcmVudFNlbGVjdG9ySWQpXG4gICAgY2hpbGRTZWxlY3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3RvcklzQ29tbW9uVG9BbGxUcmVlcyhzZWxlY3RvcikpIHtcblx0XHRcdFx0Ly8gdGhpcyBzZWxlY3RvciB3aWxsIGJlIG1ha2luZyBhIG5ldyBzZWxlY3RvciB0cmVlLiBCdXQgdGhpcyBzZWxlY3RvciBtaWdodCBjb250YWluIHNvbWUgY2hpbGRcblx0XHRcdFx0Ly8gc2VsZWN0b3JzIHRoYXQgYXJlIG1ha2luZyBtb3JlIHRyZWVzIHNvIGhlcmUgc2hvdWxkIGJlIGEgc29tZSBraW5kIG9mIHNlcGVyYXRpb24gZm9yIHRoYXRcbiAgICAgICAgaWYgKCFzZWxlY3Rvci5jYW5IYXZlTG9jYWxDaGlsZFNlbGVjdG9ycygpKSB7XG4gICAgICAgICAgdmFyIHNlbGVjdG9yVHJlZSA9IGNvbW1vblNlbGVjdG9ycy5jb25jYXQoW3NlbGVjdG9yXSlcbiAgICAgICAgICBzZWxlY3RvclRyZWVzLnB1c2goc2VsZWN0b3JUcmVlKVxuICAgICAgICB9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGZpbmQgc2VsZWN0b3IgdHJlZSB3aXRoaW4gdGhpcyBzZWxlY3RvclxuICAgICAgICAgIHZhciBjb21tb25TZWxlY3RvcnNGcm9tUGFyZW50ID0gY29tbW9uU2VsZWN0b3JzLmNvbmNhdChbc2VsZWN0b3JdKVxuICAgICAgICAgIHZhciBjaGlsZFNlbGVjdG9yVHJlZXMgPSB0aGlzLl9maW5kU2VsZWN0b3JUcmVlcyhzZWxlY3Rvci5pZCwgY29tbW9uU2VsZWN0b3JzRnJvbVBhcmVudClcbiAgICAgICAgICBzZWxlY3RvclRyZWVzID0gc2VsZWN0b3JUcmVlcy5jb25jYXQoY2hpbGRTZWxlY3RvclRyZWVzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKVxuXG5cdFx0Ly8gaXQgdGhlcmUgd2VyZSBub3QgYW55IHNlbGVjdG9ycyB0aGF0IG1ha2UgYSBzZXBhcmF0ZSB0cmVlIHRoZW4gYWxsIGNvbW1vbiBzZWxlY3RvcnMgbWFrZSB1cCBhIHNpbmdsZSBzZWxlY3RvciB0cmVlXG4gICAgaWYgKHNlbGVjdG9yVHJlZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW2NvbW1vblNlbGVjdG9yc11cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNlbGVjdG9yVHJlZXNcbiAgICB9XG4gIH0sXG5cbiAgZ2V0U2VsZWN0b3JUcmVlQ29tbW9uRGF0YTogZnVuY3Rpb24gKHNlbGVjdG9ycywgcGFyZW50U2VsZWN0b3JJZCwgcGFyZW50RWxlbWVudCkge1xuICAgIHZhciBjaGlsZFNlbGVjdG9ycyA9IHNlbGVjdG9ycy5nZXREaXJlY3RDaGlsZFNlbGVjdG9ycyhwYXJlbnRTZWxlY3RvcklkKVxuICAgIHZhciBkZWZlcnJlZERhdGFDYWxscyA9IFtdXG4gICAgY2hpbGRTZWxlY3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmICghc2VsZWN0b3JzLndpbGxSZXR1cm5NdWx0aXBsZVJlY29yZHMoc2VsZWN0b3IuaWQpKSB7XG4gICAgICAgIGRlZmVycmVkRGF0YUNhbGxzLnB1c2godGhpcy5nZXRTZWxlY3RvckNvbW1vbkRhdGEuYmluZCh0aGlzLCBzZWxlY3RvcnMsIHNlbGVjdG9yLCBwYXJlbnRFbGVtZW50KSlcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICB2YXIgZGVmZXJyZWRSZXNwb25zZSA9IGpxdWVyeS5EZWZlcnJlZCgpXG4gICAgd2hlbkNhbGxTZXF1ZW50aWFsbHkoZGVmZXJyZWREYXRhQ2FsbHMpLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlcykge1xuICAgICAgdmFyIGNvbW1vbkRhdGEgPSB7fVxuICAgICAgcmVzcG9uc2VzLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgY29tbW9uRGF0YSA9IE9iamVjdC5hc3NpZ24oY29tbW9uRGF0YSwgZGF0YSlcbiAgICAgIH0pXG4gICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoY29tbW9uRGF0YSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2VcbiAgfSxcblxuICBnZXRTZWxlY3RvckNvbW1vbkRhdGE6IGZ1bmN0aW9uIChzZWxlY3RvcnMsIHNlbGVjdG9yLCBwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyIGQgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICAgIHZhciBkZWZlcnJlZERhdGEgPSBzZWxlY3Rvci5nZXREYXRhKHBhcmVudEVsZW1lbnQpXG4gICAgZGVmZXJyZWREYXRhLmRvbmUoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChzZWxlY3Rvci53aWxsUmV0dXJuRWxlbWVudHMoKSkge1xuICAgICAgICB2YXIgbmV3UGFyZW50RWxlbWVudCA9IGRhdGFbMF1cbiAgICAgICAgdmFyIGRlZmVycmVkQ2hpbGRDb21tb25EYXRhID0gdGhpcy5nZXRTZWxlY3RvclRyZWVDb21tb25EYXRhKHNlbGVjdG9ycywgc2VsZWN0b3IuaWQsIG5ld1BhcmVudEVsZW1lbnQpXG4gICAgICAgIGRlZmVycmVkQ2hpbGRDb21tb25EYXRhLmRvbmUoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBkLnJlc29sdmUoZGF0YSlcbiAgICAgICAgfSlcbiAgICAgIH1cdFx0XHRlbHNlIHtcbiAgICAgICAgZC5yZXNvbHZlKGRhdGFbMF0pXG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgcmV0dXJuIGRcbiAgfSxcblxuXHQvKipcblx0ICogUmV0dXJucyBhbGwgZGF0YSByZWNvcmRzIGZvciBhIHNlbGVjdG9yIHRoYXQgY2FuIHJldHVybiBtdWx0aXBsZSByZWNvcmRzXG5cdCAqL1xuICBnZXRNdWx0aVNlbGVjdG9yRGF0YTogZnVuY3Rpb24gKHNlbGVjdG9ycywgc2VsZWN0b3IsIHBhcmVudEVsZW1lbnQsIGNvbW1vbkRhdGEpIHtcbiAgICB2YXIgZGVmZXJyZWRSZXNwb25zZSA9IGpxdWVyeS5EZWZlcnJlZCgpXG4gICAgdmFyIGRlZmVycmVkRGF0YVxuXHRcdC8vIGlmIHRoZSBzZWxlY3RvciBpcyBub3QgYW4gRWxlbWVudCBzZWxlY3RvciB0aGVuIGl0cyBmZXRjaGVkIGRhdGEgaXMgdGhlIHJlc3VsdC5cbiAgICBpZiAoIXNlbGVjdG9yLndpbGxSZXR1cm5FbGVtZW50cygpKSB7XG4gICAgICBkZWZlcnJlZERhdGEgPSBzZWxlY3Rvci5nZXREYXRhKHBhcmVudEVsZW1lbnQpXG4gICAgICBkZWZlcnJlZERhdGEuZG9uZShmdW5jdGlvbiAoc2VsZWN0b3JEYXRhKSB7XG4gICAgICAgIHZhciBuZXdDb21tb25EYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb21tb25EYXRhKSlcbiAgICAgICAgdmFyIHJlc3VsdERhdGEgPSBbXVxuXG4gICAgICAgIHNlbGVjdG9yRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbmV3Q29tbW9uRGF0YSlcbiAgICAgICAgICByZXN1bHREYXRhLnB1c2gocmVjb3JkKVxuICAgICAgICB9KVxuXG4gICAgICAgIGRlZmVycmVkUmVzcG9uc2UucmVzb2x2ZShyZXN1bHREYXRhKVxuICAgICAgfSlcbiAgICB9XG5cblx0XHQvLyBoYW5kbGUgc2l0dWF0aW9uIHdoZW4gdGhpcyBzZWxlY3RvciBpcyBhbiBlbGVtZW50U2VsZWN0b3JcbiAgICBkZWZlcnJlZERhdGEgPSBzZWxlY3Rvci5nZXREYXRhKHBhcmVudEVsZW1lbnQpXG4gICAgZGVmZXJyZWREYXRhLmRvbmUoZnVuY3Rpb24gKHNlbGVjdG9yRGF0YSkge1xuICAgICAgdmFyIGRlZmVycmVkRGF0YUNhbGxzID0gW11cblxuICAgICAgc2VsZWN0b3JEYXRhLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIG5ld0NvbW1vbkRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbW1vbkRhdGEpKVxuICAgICAgICB2YXIgY2hpbGRSZWNvcmREZWZlcnJlZENhbGwgPSB0aGlzLmdldFNlbGVjdG9yVHJlZURhdGEuYmluZCh0aGlzLCBzZWxlY3RvcnMsIHNlbGVjdG9yLmlkLCBlbGVtZW50LCBuZXdDb21tb25EYXRhKVxuICAgICAgICBkZWZlcnJlZERhdGFDYWxscy5wdXNoKGNoaWxkUmVjb3JkRGVmZXJyZWRDYWxsKVxuICAgICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkZWZlcnJlZERhdGFDYWxscykuZG9uZShmdW5jdGlvbiAocmVzcG9uc2VzKSB7XG4gICAgICAgIHZhciByZXN1bHREYXRhID0gW11cbiAgICAgICAgcmVzcG9uc2VzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkUmVjb3JkTGlzdCkge1xuICAgICAgICAgIGNoaWxkUmVjb3JkTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZFJlY29yZCkge1xuICAgICAgICAgICAgdmFyIHJlYyA9IHt9XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlYywgY2hpbGRSZWNvcmQpXG4gICAgICAgICAgICByZXN1bHREYXRhLnB1c2gocmVjKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICAgIGRlZmVycmVkUmVzcG9uc2UucmVzb2x2ZShyZXN1bHREYXRhKVxuICAgICAgfSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZVxuICB9LFxuXG4gIGdldFNlbGVjdG9yVHJlZURhdGE6IGZ1bmN0aW9uIChzZWxlY3RvcnMsIHBhcmVudFNlbGVjdG9ySWQsIHBhcmVudEVsZW1lbnQsIGNvbW1vbkRhdGEpIHtcbiAgICB2YXIgY2hpbGRTZWxlY3RvcnMgPSBzZWxlY3RvcnMuZ2V0RGlyZWN0Q2hpbGRTZWxlY3RvcnMocGFyZW50U2VsZWN0b3JJZClcbiAgICB2YXIgY2hpbGRDb21tb25EYXRhRGVmZXJyZWQgPSB0aGlzLmdldFNlbGVjdG9yVHJlZUNvbW1vbkRhdGEoc2VsZWN0b3JzLCBwYXJlbnRTZWxlY3RvcklkLCBwYXJlbnRFbGVtZW50KVxuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcblxuICAgIGNoaWxkQ29tbW9uRGF0YURlZmVycmVkLmRvbmUoZnVuY3Rpb24gKGNoaWxkQ29tbW9uRGF0YSkge1xuICAgICAgY29tbW9uRGF0YSA9IE9iamVjdC5hc3NpZ24oY29tbW9uRGF0YSwgY2hpbGRDb21tb25EYXRhKVxuXG4gICAgICB2YXIgZGF0YURlZmVycmVkQ2FsbHMgPSBbXVxuXG4gICAgICBjaGlsZFNlbGVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoc2VsZWN0b3JzLndpbGxSZXR1cm5NdWx0aXBsZVJlY29yZHMoc2VsZWN0b3IuaWQpKSB7XG4gICAgICAgICAgdmFyIG5ld0NvbW1vbkRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbW1vbkRhdGEpKVxuICAgICAgICAgIHZhciBkYXRhRGVmZXJyZWRDYWxsID0gdGhpcy5nZXRNdWx0aVNlbGVjdG9yRGF0YS5iaW5kKHRoaXMsIHNlbGVjdG9ycywgc2VsZWN0b3IsIHBhcmVudEVsZW1lbnQsIG5ld0NvbW1vbkRhdGEpXG4gICAgICAgICAgZGF0YURlZmVycmVkQ2FsbHMucHVzaChkYXRhRGVmZXJyZWRDYWxsKVxuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpXG5cblx0XHRcdC8vIG1lcmdlIGFsbCBkYXRhIHJlY29yZHMgdG9nZXRoZXJcbiAgICAgIHdoZW5DYWxsU2VxdWVudGlhbGx5KGRhdGFEZWZlcnJlZENhbGxzKS5kb25lKGZ1bmN0aW9uIChyZXNwb25zZXMpIHtcbiAgICAgICAgdmFyIHJlc3VsdERhdGEgPSBbXVxuICAgICAgICByZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGRSZWNvcmRzKSB7XG4gICAgICAgICAgY2hpbGRSZWNvcmRzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkUmVjb3JkKSB7XG4gICAgICAgICAgICB2YXIgcmVjID0ge31cbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVjLCBjaGlsZFJlY29yZClcbiAgICAgICAgICAgIHJlc3VsdERhdGEucHVzaChyZWMpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAocmVzdWx0RGF0YS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHQvLyBJZiB0aGVyZSBhcmUgbm8gbXVsdGkgcmVjb3JkIGdyb3VwcyB0aGVuIHJldHVybiBjb21tb24gZGF0YS5cblx0XHRcdFx0XHQvLyBJbiBhIGNhc2Ugd2hlcmUgY29tbW9uIGRhdGEgaXMgZW1wdHkgcmV0dXJuIG5vdGhpbmcuXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNvbW1vbkRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKFtdKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoW2NvbW1vbkRhdGFdKVxuICAgICAgICAgIH1cbiAgICAgICAgfVx0XHRcdFx0ZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKHJlc3VsdERhdGEpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2VcbiAgfSxcblxuICBnZXREYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGVjdG9yVHJlZXMgPSB0aGlzLmZpbmRTZWxlY3RvclRyZWVzKClcbiAgICB2YXIgZGF0YURlZmVycmVkQ2FsbHMgPSBbXVxuXG4gICAgc2VsZWN0b3JUcmVlcy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3RvclRyZWUpIHtcbiAgICAgIHZhciBkZWZlcnJlZFRyZWVEYXRhQ2FsbCA9IHRoaXMuZ2V0U2VsZWN0b3JUcmVlRGF0YS5iaW5kKHRoaXMsIHNlbGVjdG9yVHJlZSwgdGhpcy5wYXJlbnRTZWxlY3RvcklkLCB0aGlzLnBhcmVudEVsZW1lbnQsIHt9KVxuICAgICAgZGF0YURlZmVycmVkQ2FsbHMucHVzaChkZWZlcnJlZFRyZWVEYXRhQ2FsbClcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICB2YXIgcmVzcG9uc2VEZWZlcnJlZCA9IGpxdWVyeS5EZWZlcnJlZCgpXG4gICAgd2hlbkNhbGxTZXF1ZW50aWFsbHkoZGF0YURlZmVycmVkQ2FsbHMpLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlcykge1xuICAgICAgdmFyIHJlc3VsdHMgPSBbXVxuICAgICAgcmVzcG9uc2VzLmZvckVhY2goZnVuY3Rpb24gKGRhdGFSZXN1bHRzKSB7XG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChkYXRhUmVzdWx0cylcbiAgICAgIH0pXG4gICAgICByZXNwb25zZURlZmVycmVkLnJlc29sdmUocmVzdWx0cylcbiAgICB9KVxuICAgIHJldHVybiByZXNwb25zZURlZmVycmVkXG4gIH0sXG5cbiAgZ2V0U2luZ2xlU2VsZWN0b3JEYXRhOiBmdW5jdGlvbiAocGFyZW50U2VsZWN0b3JJZHMsIHNlbGVjdG9ySWQsIG9wdGlvbnMpIHtcbiAgICB2YXIgJCA9IHRoaXMuJCB8fCBvcHRpb25zLiRcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50IHx8IG9wdGlvbnMuZG9jdW1lbnRcbiAgICB2YXIgd2luZG93ID0gdGhpcy53aW5kb3cgfHwgb3B0aW9ucy53aW5kb3dcblxuXHRcdC8vIHRvIGZldGNoIG9ubHkgc2luZ2xlIHNlbGVjdG9ycyBkYXRhIHdlIHdpbGwgY3JlYXRlIGEgc2l0ZW1hcCB0aGF0IG9ubHkgY29udGFpbnMgdGhpcyBzZWxlY3RvciwgaGlzXG5cdFx0Ly8gcGFyZW50cyBhbmQgYWxsIGNoaWxkIHNlbGVjdG9yc1xuICAgIHZhciBzaXRlbWFwID0gdGhpcy5zaXRlbWFwXG4gICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zaXRlbWFwLnNlbGVjdG9ycy5nZXRTZWxlY3RvcihzZWxlY3RvcklkKVxuICAgIHZhciBjaGlsZFNlbGVjdG9ycyA9IHNpdGVtYXAuc2VsZWN0b3JzLmdldEFsbFNlbGVjdG9ycyhzZWxlY3RvcklkKVxuICAgIHZhciBwYXJlbnRTZWxlY3RvcnMgPSBbXVxuICAgIHZhciBpXG4gICAgdmFyIGlkXG4gICAgdmFyIHBhcmVudFNlbGVjdG9yXG4gICAgZm9yIChpID0gcGFyZW50U2VsZWN0b3JJZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlkID0gcGFyZW50U2VsZWN0b3JJZHNbaV1cbiAgICAgIGlmIChpZCA9PT0gJ19yb290JykgYnJlYWtcbiAgICAgIHBhcmVudFNlbGVjdG9yID0gdGhpcy5zaXRlbWFwLnNlbGVjdG9ycy5nZXRTZWxlY3RvcihpZClcbiAgICAgIHBhcmVudFNlbGVjdG9ycy5wdXNoKHBhcmVudFNlbGVjdG9yKVxuICAgIH1cblxuXHRcdC8vIG1lcmdlIGFsbCBuZWVkZWQgc2VsZWN0b3JzIHRvZ2V0aGVyXG4gICAgdmFyIHNlbGVjdG9ycyA9IHBhcmVudFNlbGVjdG9ycy5jb25jYXQoY2hpbGRTZWxlY3RvcnMpXG4gICAgc2VsZWN0b3JzLnB1c2goc2VsZWN0b3IpXG4gICAgc2l0ZW1hcC5zZWxlY3RvcnMgPSBuZXcgU2VsZWN0b3JMaXN0KHNlbGVjdG9ycywgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxuXG4gICAgdmFyIHBhcmVudFNlbGVjdG9ySWRcblx0XHQvLyBmaW5kIHRoZSBwYXJlbnQgdGhhdCBsZWFkZWQgdG8gdGhlIHBhZ2Ugd2hlcmUgcmVxdWlyZWQgc2VsZWN0b3IgaXMgYmVpbmcgdXNlZFxuICAgIGZvciAoaSA9IHBhcmVudFNlbGVjdG9ySWRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZCA9IHBhcmVudFNlbGVjdG9ySWRzW2ldXG4gICAgICBpZiAoaWQgPT09ICdfcm9vdCcpIHtcbiAgICAgICAgcGFyZW50U2VsZWN0b3JJZCA9IGlkXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBwYXJlbnRTZWxlY3RvciA9IHRoaXMuc2l0ZW1hcC5zZWxlY3RvcnMuZ2V0U2VsZWN0b3IocGFyZW50U2VsZWN0b3JJZHNbaV0pXG4gICAgICBpZiAoIXBhcmVudFNlbGVjdG9yLndpbGxSZXR1cm5FbGVtZW50cygpKSB7XG4gICAgICAgIHBhcmVudFNlbGVjdG9ySWQgPSBpZFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhcmVudFNlbGVjdG9ySWQgPSBwYXJlbnRTZWxlY3RvcklkXG5cbiAgICByZXR1cm4gdGhpcy5nZXREYXRhKClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFFeHRyYWN0b3JcbiIsIi8qKlxuICogRWxlbWVudCBzZWxlY3Rvci4gVXNlcyBqUXVlcnkgYXMgYmFzZSBhbmQgYWRkcyBzb21lIG1vcmUgZmVhdHVyZXNcbiAqIEBwYXJhbSBDU1NTZWxlY3RvclxuICogQHBhcmFtIHBhcmVudEVsZW1lbnRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbnZhciBFbGVtZW50UXVlcnkgPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3IsIHBhcmVudEVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgQ1NTU2VsZWN0b3IgPSBDU1NTZWxlY3RvciB8fCAnJ1xuICB0aGlzLiQgPSBvcHRpb25zLiRcbnRoaXMuZG9jdW1lbnQgPSBvcHRpb25zLmRvY3VtZW50XG50aGlzLndpbmRvdyA9IG9wdGlvbnMud2luZG93XG4gIGlmICghdGhpcy4kKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcganF1ZXJ5IGZvciBFbGVtZW50UXVlcnknKVxuaWYgKCF0aGlzLmRvY3VtZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGRvY3VtZW50XCIpXG5pZighdGhpcy53aW5kb3cpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB3aW5kb3dcIilcbiAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSBbXVxuXG4gIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpID09PSAtMSkge1xuICAgICAgc2VsZWN0ZWRFbGVtZW50cy5wdXNoKGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgdmFyIHNlbGVjdG9yUGFydHMgPSBFbGVtZW50UXVlcnkuZ2V0U2VsZWN0b3JQYXJ0cyhDU1NTZWxlY3RvcilcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHNlbGVjdG9yUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcblx0XHQvLyBoYW5kbGUgc3BlY2lhbCBjYXNlIHdoZW4gcGFyZW50IGlzIHNlbGVjdGVkXG4gICAgaWYgKHNlbGVjdG9yID09PSAnX3BhcmVudF8nKSB7XG4gICAgICBzZWxmLiQocGFyZW50RWxlbWVudCkuZWFjaChmdW5jdGlvbiAoaSwgZWxlbWVudCkge1xuICAgICAgICBhZGRFbGVtZW50KGVsZW1lbnQpXG4gICAgICB9KVxuICAgIH1cdFx0ZWxzZSB7XG4gICAgICB2YXIgZWxlbWVudHMgPSBzZWxmLiQoc2VsZWN0b3IsIHNlbGYuJChwYXJlbnRFbGVtZW50KSlcbiAgICAgIGVsZW1lbnRzLmVhY2goZnVuY3Rpb24gKGksIGVsZW1lbnQpIHtcbiAgICAgICAgYWRkRWxlbWVudChlbGVtZW50KVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudHNcbn1cblxuRWxlbWVudFF1ZXJ5LmdldFNlbGVjdG9yUGFydHMgPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3IpIHtcbiAgdmFyIHNlbGVjdG9ycyA9IENTU1NlbGVjdG9yLnNwbGl0KC8oLHxcIi4qP1wifCcuKj8nfFxcKC4qP1xcKSkvKVxuXG4gIHZhciByZXN1bHRTZWxlY3RvcnMgPSBbXVxuICB2YXIgY3VycmVudFNlbGVjdG9yID0gJydcbiAgc2VsZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgaWYgKHNlbGVjdG9yID09PSAnLCcpIHtcbiAgICAgIGlmIChjdXJyZW50U2VsZWN0b3IudHJpbSgpLmxlbmd0aCkge1xuICAgICAgICByZXN1bHRTZWxlY3RvcnMucHVzaChjdXJyZW50U2VsZWN0b3IudHJpbSgpKVxuICAgICAgfVxuICAgICAgY3VycmVudFNlbGVjdG9yID0gJydcbiAgICB9XHRcdGVsc2Uge1xuICAgICAgY3VycmVudFNlbGVjdG9yICs9IHNlbGVjdG9yXG4gICAgfVxuICB9KVxuICBpZiAoY3VycmVudFNlbGVjdG9yLnRyaW0oKS5sZW5ndGgpIHtcbiAgICByZXN1bHRTZWxlY3RvcnMucHVzaChjdXJyZW50U2VsZWN0b3IudHJpbSgpKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVsZW1lbnRRdWVyeVxuIiwiY29uc3QganNkb20gPSByZXF1aXJlKCdqc2RvbScpXG5jb25zdCBqUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKVxudmFyIGpxdWVyeURlZmVycmVkID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcblxuY29uc3QgY29udGVudFNjcmFwZXIgPSByZXF1aXJlKCcuLi9jb250ZW50X3NjcmlwdC9jb250ZW50X3NjcmFwZXInKVxudmFyIHdoZW5DYWxsU2VxdWVudGlhbGx5ID0gcmVxdWlyZSgnLi4vYXNzZXRzL2pxdWVyeS53aGVuY2FsbHNlcXVlbnRpYWxseScpXG5cbnZhciBKU0RPTUJyb3dzZXIgPSBmdW5jdGlvbiAob3B0aW9ucywgbW9yZU9wdGlvbnMpIHtcbiAgdGhpcy5wYWdlTG9hZERlbGF5ID0gb3B0aW9ucy5wYWdlTG9hZERlbGF5XG59XG5cbkpTRE9NQnJvd3Nlci5wcm90b3R5cGUgPSB7XG4gIGxvYWRVcmw6IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7XG4gICAgY29uc3Qge0pTRE9NfSA9IGpzZG9tXG4gICAgY29uc3QgYnJvd3NlciA9IHRoaXNcbiAgICBKU0RPTS5mcm9tVVJMKHVybClcbiAgICAgIC50aGVuKGZ1bmN0aW9uIChkb20pIHtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gZG9tLndpbmRvd1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudFxuICAgICAgICBjb25zdCAkID0galF1ZXJ5KGRvbS53aW5kb3cpXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHskLCBkb2N1bWVudCwgd2luZG93fSlcbiAgICAgICAgfSwgYnJvd3Nlci5wYWdlTG9hZERlbGF5KVxuICAgICAgfSkuY2F0Y2goZSA9PiBjYWxsYmFjayhlKSlcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcblxuICB9LFxuICBzYXZlSW1hZ2VzOiBmdW5jdGlvbiAocmVjb3JkLCBuYW1pbmdGdW5jdGlvbikge1xuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5RGVmZXJyZWQuRGVmZXJyZWQoKVxuICAgIHZhciBkZWZlcnJlZEltYWdlU3RvcmVDYWxscyA9IFtdXG4gICAgdmFyIHByZWZpeExlbmd0aCA9ICdfaW1hZ2VCYXNlNjQtJy5sZW5ndGhcbiAgICBmb3IgKHZhciBhdHRyIGluIHJlY29yZCkge1xuICAgICAgaWYgKGF0dHIuc3Vic3RyKDAsIHByZWZpeExlbmd0aCkgPT09ICdfaW1hZ2VCYXNlNjQtJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rvd25sb2FkaW5nIGltYWdlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpXG4gICAgICB9XG4gICAgfVxuICAgIHdoZW5DYWxsU2VxdWVudGlhbGx5KGRlZmVycmVkSW1hZ2VTdG9yZUNhbGxzKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmVycmVkUmVzcG9uc2UucmVzb2x2ZSgpXG4gICAgfSlcblxuICAgIHJldHVybiBkZWZlcnJlZFJlc3BvbnNlLnByb21pc2UoKVxuICB9LFxuICBmZXRjaERhdGE6IGZ1bmN0aW9uICh1cmwsIHNpdGVtYXAsIHBhcmVudFNlbGVjdG9ySWQsIGNhbGxiYWNrLCBzY29wZSkge1xuICAgIGNvbnN0IGJyb3dzZXIgPSB0aGlzXG4gICAgY29uc29sZS5sb2coJ0luaXQganNkb20gYnJvd3NlciBhcHAnKVxuICAgIGJyb3dzZXIubG9hZFVybCh1cmwsIGZ1bmN0aW9uIChlcnIsIHskLCBkb2N1bWVudCwgd2luZG93fSkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKVxuICAgICAgfVxuXG4gICAgICB2YXIgbWVzc2FnZSA9IHtcbiAgICAgICAgZXh0cmFjdERhdGE6IHRydWUsXG4gICAgICAgIHNpdGVtYXA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2l0ZW1hcCkpLFxuICAgICAgICBwYXJlbnRTZWxlY3RvcklkOiBwYXJlbnRTZWxlY3RvcklkXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzZW5kUmVzcG9uc2UgKGRhdGEpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbChzY29wZSwgbnVsbCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIGNvbnRlbnRTY3JhcGVyKG1lc3NhZ2UsIG51bGwsIHNlbmRSZXNwb25zZSwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICAgIH0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBKU0RPTUJyb3dzZXJcbiIsImNvbnN0IEpTRE9NQnJvd3NlciA9IHJlcXVpcmUoJy4vSlNET01Ccm93c2VyJylcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNlbGYpIHtcbiAgdmFyIGJyb3dzZXIgPVxuXG4gIHNlbGYub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGVycjogbmV3IEVycm9yKGVycilcbiAgICB9KVxuICAgIHNlbGYuY2xvc2UoKVxuICB9XG4gIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChldikge1xuICAgIGNvbnN0IGRhdGEgPSBldi5kYXRhXG4gICAgY29uc3QgVVVJRCA9IGRhdGEuVVVJRFxuICAgIGlmIChkYXRhLnRvcGljID09PSAnaW5pdCcpIHtcbiAgICAgIGJyb3dzZXIgPSBuZXcgSlNET01Ccm93c2VyKGRhdGEub3B0aW9ucywge30pXG4gICAgICByZXR1cm4gc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgIFVVSURcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChkYXRhLnRvcGljID09PSAnbG9hZFVybCcpIHtcbiAgICAgIGJyb3dzZXIubG9hZFVybChkYXRhLnVybCwgZnVuY3Rpb24gKGVyciwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBVVUlELFxuICAgICAgICAgICAgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBVVUlEXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoZGF0YS50b3BpYyA9PT0gJ2ZldGNoRGF0YScpIHtcbiAgICAgIGJyb3dzZXIuZmV0Y2hEYXRhKGRhdGEudXJsLCBkYXRhLnNpdGVtYXAsIGRhdGEucGFyZW50U2VsZWN0b3JJZCwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgVVVJRCxcbiAgICAgICAgICAgIGVyclxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgVVVJRCxcbiAgICAgICAgICBpbmZvOiB7XG4gICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSwgbnVsbClcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgIGVycjogbmV3IEVycm9yKCdVbmtub3duICB0b3BpYyAnICsgZGF0YS50b3BpYylcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufSIsIlxudmFyIEpvYiA9IGZ1bmN0aW9uICh1cmwsIHBhcmVudFNlbGVjdG9yLCBzY3JhcGVyLCBwYXJlbnRKb2IsIGJhc2VEYXRhKSB7XG4gIGlmIChwYXJlbnRKb2IgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudXJsID0gdGhpcy5jb21iaW5lVXJscyhwYXJlbnRKb2IudXJsLCB1cmwpXG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSB1cmxcbiAgfVxuICB0aGlzLnBhcmVudFNlbGVjdG9yID0gcGFyZW50U2VsZWN0b3JcbiAgdGhpcy5zY3JhcGVyID0gc2NyYXBlclxuICB0aGlzLmRhdGFJdGVtcyA9IFtdXG4gIHRoaXMuYmFzZURhdGEgPSBiYXNlRGF0YSB8fCB7fVxufVxuXG5Kb2IucHJvdG90eXBlID0ge1xuXG4gIGNvbWJpbmVVcmxzOiBmdW5jdGlvbiAocGFyZW50VXJsLCBjaGlsZFVybCkge1xuICAgIHZhciB1cmxNYXRjaGVyID0gbmV3IFJlZ0V4cCgnKGh0dHBzPzovLyk/KFthLXowLTlcXFxcLVxcXFwuXStcXFxcLlthLXowLTlcXFxcLV0rKDpcXFxcZCspP3xcXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9KDpcXFxcZCspPyk/KFxcXFwvW15cXFxcP10qXFxcXC98XFxcXC8pPyhbXlxcXFw/XSopPyhcXFxcPy4qKT8nLCAnaScpXG5cbiAgICB2YXIgcGFyZW50TWF0Y2hlcyA9IHBhcmVudFVybC5tYXRjaCh1cmxNYXRjaGVyKVxuICAgIHZhciBjaGlsZE1hdGNoZXMgPSBjaGlsZFVybC5tYXRjaCh1cmxNYXRjaGVyKVxuXG5cdFx0Ly8gc3BlY2lhbCBjYXNlIGZvciB1cmxzIGxpa2UgdGhpczogP2E9MSAgb3IgbGlrZS10aGlzL1xuICAgIGlmIChjaGlsZE1hdGNoZXNbMV0gPT09IHVuZGVmaW5lZCAmJiBjaGlsZE1hdGNoZXNbMl0gPT09IHVuZGVmaW5lZCAmJiBjaGlsZE1hdGNoZXNbNV0gPT09IHVuZGVmaW5lZCAmJiBjaGlsZE1hdGNoZXNbNl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHVybCA9IHBhcmVudE1hdGNoZXNbMV0gKyBwYXJlbnRNYXRjaGVzWzJdICsgcGFyZW50TWF0Y2hlc1s1XSArIHBhcmVudE1hdGNoZXNbNl0gKyBjaGlsZE1hdGNoZXNbN11cbiAgICAgIHJldHVybiB1cmxcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRNYXRjaGVzWzFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkTWF0Y2hlc1sxXSA9IHBhcmVudE1hdGNoZXNbMV1cbiAgICB9XG4gICAgaWYgKGNoaWxkTWF0Y2hlc1syXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE1hdGNoZXNbMl0gPSBwYXJlbnRNYXRjaGVzWzJdXG4gICAgfVxuICAgIGlmIChjaGlsZE1hdGNoZXNbNV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHBhcmVudE1hdGNoZXNbNV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjaGlsZE1hdGNoZXNbNV0gPSAnLydcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkTWF0Y2hlc1s1XSA9IHBhcmVudE1hdGNoZXNbNV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hpbGRNYXRjaGVzWzZdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkTWF0Y2hlc1s2XSA9ICcnXG4gICAgfVxuICAgIGlmIChjaGlsZE1hdGNoZXNbN10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGRNYXRjaGVzWzddID0gJydcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRNYXRjaGVzWzFdICsgY2hpbGRNYXRjaGVzWzJdICsgY2hpbGRNYXRjaGVzWzVdICsgY2hpbGRNYXRjaGVzWzZdICsgY2hpbGRNYXRjaGVzWzddXG4gIH0sXG5cbiAgZXhlY3V0ZTogZnVuY3Rpb24gKGJyb3dzZXIsIGNhbGxiYWNrLCBzY29wZSkge1xuICAgIHZhciBzaXRlbWFwID0gdGhpcy5zY3JhcGVyLnNpdGVtYXBcbiAgICB2YXIgam9iID0gdGhpc1xuICAgIGNvbnNvbGUubG9nKCdzdGFydGluZyBmZXRjaGluZycpXG4gICAgYnJvd3Nlci5mZXRjaERhdGEodGhpcy51cmwsIHNpdGVtYXAsIHRoaXMucGFyZW50U2VsZWN0b3IsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBmZXRjaGluZycpXG5cdFx0XHQvLyBtZXJnZSBkYXRhIHdpdGggZGF0YSBmcm9tIGluaXRpYWxpemF0aW9uXG4gICAgICBmb3IgKHZhciBpIGluIHJlc3VsdHMpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHNbaV1cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuYmFzZURhdGEpIHtcbiAgICAgICAgICBpZiAoIShrZXkgaW4gcmVzdWx0KSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmJhc2VEYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhSXRlbXMucHVzaChyZXN1bHQpXG4gICAgICB9XG4gICAgICBjYWxsYmFjayhudWxsLCBqb2IpXG4gICAgfS5iaW5kKHRoaXMpLCB0aGlzKVxuICB9LFxuICBnZXRSZXN1bHRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUl0ZW1zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBKb2JcbiIsIlxudmFyIFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmpvYnMgPSBbXVxuICB0aGlzLnNjcmFwZWRVcmxzID0ge31cbn1cblxuUXVldWUucHJvdG90eXBlID0ge1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGZhbHNlIGlmIHBhZ2UgaXMgYWxyZWFkeSBzY3JhcGVkXG5cdCAqIEBwYXJhbSBqb2Jcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuICBhZGQ6IGZ1bmN0aW9uIChqb2IpIHtcbiAgICBpZiAodGhpcy5jYW5CZUFkZGVkKGpvYikpIHtcbiAgICAgIHRoaXMuam9icy5wdXNoKGpvYilcbiAgICAgIHRoaXMuX3NldFVybFNjcmFwZWQoam9iLnVybClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkJlQWRkZWQ6IGZ1bmN0aW9uIChqb2IpIHtcbiAgICBpZiAodGhpcy5pc1NjcmFwZWQoam9iLnVybCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuXHRcdC8vIHJlamVjdCBkb2N1bWVudHNcbiAgICBpZiAoam9iLnVybC5tYXRjaCgvXFwuKGRvY3xkb2N4fHBkZnxwcHR8cHB0eHxvZHQpJC9pKSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgZ2V0UXVldWVTaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuam9icy5sZW5ndGhcbiAgfSxcblxuICBpc1NjcmFwZWQ6IGZ1bmN0aW9uICh1cmwpIHtcbiAgICByZXR1cm4gKHRoaXMuc2NyYXBlZFVybHNbdXJsXSAhPT0gdW5kZWZpbmVkKVxuICB9LFxuXG4gIF9zZXRVcmxTY3JhcGVkOiBmdW5jdGlvbiAodXJsKSB7XG4gICAgdGhpcy5zY3JhcGVkVXJsc1t1cmxdID0gdHJ1ZVxuICB9LFxuXG4gIGdldE5leHRKb2I6IGZ1bmN0aW9uICgpIHtcblx0XHQvLyBAVE9ETyB0ZXN0IHRoaXNcbiAgICBpZiAodGhpcy5nZXRRdWV1ZVNpemUoKSA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmpvYnMucG9wKClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWVcbiIsInZhciB3aGVuQ2FsbFNlcXVlbnRpYWxseSA9IHJlcXVpcmUoJy4uL2Fzc2V0cy9qcXVlcnkud2hlbmNhbGxzZXF1ZW50aWFsbHknKVxudmFyIEpvYiA9IHJlcXVpcmUoJy4vSm9iJylcblxudmFyIFNjcmFwZXIgPSBmdW5jdGlvbiAob3B0aW9ucywgbW9yZU9wdGlvbnMpIHtcbiAgdGhpcy5xdWV1ZSA9IG9wdGlvbnMucXVldWVcbiAgdGhpcy5zaXRlbWFwID0gb3B0aW9ucy5zaXRlbWFwXG4gIHRoaXMuc3RvcmUgPSBvcHRpb25zLnN0b3JlXG4gIHRoaXMuYnJvd3NlciA9IG9wdGlvbnMuYnJvd3NlclxuICB0aGlzLnJlc3VsdFdyaXRlciA9IG51bGwgLy8gZGIgaW5zdGFuY2UgZm9yIHNjcmFwZWQgZGF0YSB3cml0aW5nXG4gIHRoaXMucmVxdWVzdEludGVydmFsID0gcGFyc2VJbnQob3B0aW9ucy5yZXF1ZXN0SW50ZXJ2YWwpXG4gIHRoaXMucGFnZUxvYWREZWxheSA9IHBhcnNlSW50KG9wdGlvbnMucGFnZUxvYWREZWxheSlcblxuICAvLyBJdCBpc24ndCBhY3R1YWxseSBtdWNoIG5lZWRlZCwgb25seSB0byBnZXQgdGVoXG4gIHRoaXMuJCA9IG1vcmVPcHRpb25zLiRcbiAgdGhpcy5kb2N1bWVudCA9IG1vcmVPcHRpb25zLmRvY3VtZW50XG4gIHRoaXMud2luZG93ID0gbW9yZU9wdGlvbnMud2luZG93XG4gIGlmICghbW9yZU9wdGlvbnMuJCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGpxdWVyeScpXG4gIGlmICghbW9yZU9wdGlvbnMud2luZG93KSB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgd2luZG93JylcbiAgaWYgKCFtb3JlT3B0aW9ucy5kb2N1bWVudCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGRvY3VtZW50Jylcbn1cblxuU2NyYXBlci5wcm90b3R5cGUgPSB7XG5cblx0LyoqXG5cdCAqIFNjcmFwaW5nIGRlbGF5IGJldHdlZW4gdHdvIHBhZ2Ugb3BlbmluZyByZXF1ZXN0c1xuXHQgKi9cbiAgcmVxdWVzdEludGVydmFsOiAyMDAwLFxuICBfdGltZU5leHRTY3JhcGVBdmFpbGFibGU6IDAsXG5cbiAgaW5pdEZpcnN0Sm9iczogZnVuY3Rpb24gKCkge1xuICAgIHZhciB1cmxzID0gdGhpcy5zaXRlbWFwLmdldFN0YXJ0VXJscygpXG5cbiAgICB1cmxzLmZvckVhY2goZnVuY3Rpb24gKHVybCkge1xuICAgICAgdmFyIGZpcnN0Sm9iID0gbmV3IEpvYih1cmwsICdfcm9vdCcsIHRoaXMpXG4gICAgICB0aGlzLnF1ZXVlLmFkZChmaXJzdEpvYilcbiAgICB9LmJpbmQodGhpcykpXG4gIH0sXG5cbiAgcnVuOiBmdW5jdGlvbiAoZXhlY3V0aW9uQ2FsbGJhY2spIHtcbiAgICB2YXIgc2NyYXBlciA9IHRoaXNcblxuXHRcdC8vIGNhbGxiYWNrIHdoZW4gc2NyYXBpbmcgaXMgZmluaXNoZWRcbiAgICB0aGlzLmV4ZWN1dGlvbkNhbGxiYWNrID0gZXhlY3V0aW9uQ2FsbGJhY2tcblxuICAgIHRoaXMuaW5pdEZpcnN0Sm9icygpXG5cbiAgICB0aGlzLnN0b3JlLmluaXRTaXRlbWFwRGF0YURiKHRoaXMuc2l0ZW1hcC5faWQsIGZ1bmN0aW9uIChyZXN1bHRXcml0ZXIpIHtcbiAgICAgIHNjcmFwZXIucmVzdWx0V3JpdGVyID0gcmVzdWx0V3JpdGVyXG4gICAgICBzY3JhcGVyLl9ydW4oKVxuICAgIH0pXG4gIH0sXG5cbiAgcmVjb3JkQ2FuSGF2ZUNoaWxkSm9iczogZnVuY3Rpb24gKHJlY29yZCkge1xuICAgIGlmIChyZWNvcmQuX2ZvbGxvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICB2YXIgc2VsZWN0b3JJZCA9IHJlY29yZC5fZm9sbG93U2VsZWN0b3JJZFxuICAgIHZhciBjaGlsZFNlbGVjdG9ycyA9IHRoaXMuc2l0ZW1hcC5nZXREaXJlY3RDaGlsZFNlbGVjdG9ycyhzZWxlY3RvcklkKVxuICAgIGlmIChjaGlsZFNlbGVjdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBnZXRGaWxlRmlsZW5hbWU6IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFydHMgPSB1cmwuc3BsaXQoJy8nKVxuICAgIHZhciBmaWxlbmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG4gICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKC9cXD8vZywgJycpXG4gICAgaWYgKGZpbGVuYW1lLmxlbmd0aCA+IDEzMCkge1xuICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHIoMCwgMTMwKVxuICAgIH1cbiAgICByZXR1cm4gZmlsZW5hbWVcbiAgfSxcblxuXHQvKipcblx0ICogU2F2ZSBpbWFnZXMgZm9yIHVzZXIgaWYgdGhlIHJlY29yZHMgY29udGFpbnMgdGhlbVxuXHQgKiBAcGFyYW0gcmVjb3JkXG5cdCAqL1xuICBzYXZlSW1hZ2VzOiBmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgdmFyIGJyb3dzZXIgPSB0aGlzLmJyb3dzZXJcbiAgICByZXR1cm4gYnJvd3Nlci5zYXZlSW1hZ2VzKHJlY29yZCwgbmFtaW5nRnVuY3Rpb24uYmluZCh0aGlzKSlcblxuICAgIGZ1bmN0aW9uIG5hbWluZ0Z1bmN0aW9uIChzZWxlY3RvcklkKSB7IHJldHVybiB0aGlzLnNpdGVtYXAuX2lkICsgJy8nICsgc2VsZWN0b3JJZCArICcvJyArIHRoaXMuZ2V0RmlsZUZpbGVuYW1lKHJlY29yZFtzZWxlY3RvcklkICsgJy1zcmMnXSkgfVxuICB9LFxuXG5cdC8vIEBUT0RPIHJlbW92ZSByZWN1cnNpb24gYW5kIGFkZCBhbiBpdGVyYXRpdmUgd2F5IHRvIHJ1biB0aGVzZSBqb2JzLlxuICBfcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGpvYiA9IHRoaXMucXVldWUuZ2V0TmV4dEpvYigpXG4gICAgaWYgKGpvYiA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdTY3JhcGVyIGV4ZWN1dGlvbiBpcyBmaW5pc2hlZCcpXG4gICAgICB0aGlzLmJyb3dzZXIuY2xvc2UoKVxuICAgICAgdGhpcy5leGVjdXRpb25DYWxsYmFjaygpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3N0YXJ0aW5nIGV4ZWN1dGUnKVxuICAgIGpvYi5leGVjdXRlKHRoaXMuYnJvd3NlciwgZnVuY3Rpb24gKGVyciwgam9iKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIC8vIGpvYnMgZG9uJ3Qgc2VlbSB0byByZXR1cm4gYW55dGhpbmdcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGpvYicsIGVycilcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBleGVjdXRpbmcnKVxuICAgICAgdmFyIHNjcmFwZWRSZWNvcmRzID0gW11cbiAgICAgIHZhciBkZWZlcnJlZERhdGFtYW5pcHVsYXRpb25zID0gW11cblxuICAgICAgdmFyIHJlY29yZHMgPSBqb2IuZ2V0UmVzdWx0cygpXG4gICAgICByZWNvcmRzLmZvckVhY2goZnVuY3Rpb24gKHJlY29yZCkge1xuXHRcdFx0XHQvLyB2YXIgcmVjb3JkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZWMpKTtcblxuICAgICAgICBkZWZlcnJlZERhdGFtYW5pcHVsYXRpb25zLnB1c2godGhpcy5zYXZlSW1hZ2VzLmJpbmQodGhpcywgcmVjb3JkKSlcblxuXHRcdFx0XHQvLyBAVE9ETyByZWZhY3RvciBqb2IgZXhzdHJhY3Rpb24gdG8gYSBzZXBlcmF0ZSBtZXRob2RcbiAgICAgICAgaWYgKHRoaXMucmVjb3JkQ2FuSGF2ZUNoaWxkSm9icyhyZWNvcmQpKSB7XG4gICAgICAgICAgdmFyIGZvbGxvd1NlbGVjdG9ySWQgPSByZWNvcmQuX2ZvbGxvd1NlbGVjdG9ySWRcbiAgICAgICAgICB2YXIgZm9sbG93VVJMID0gcmVjb3JkWydfZm9sbG93J11cbiAgICAgICAgICBkZWxldGUgcmVjb3JkWydfZm9sbG93J11cbiAgICAgICAgICBkZWxldGUgcmVjb3JkWydfZm9sbG93U2VsZWN0b3JJZCddXG4gICAgICAgICAgdmFyIG5ld0pvYiA9IG5ldyBKb2IoZm9sbG93VVJMLCBmb2xsb3dTZWxlY3RvcklkLCB0aGlzLCBqb2IsIHJlY29yZClcbiAgICAgICAgICBpZiAodGhpcy5xdWV1ZS5jYW5CZUFkZGVkKG5ld0pvYikpIHtcbiAgICAgICAgICAgIHRoaXMucXVldWUuYWRkKG5ld0pvYilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3RvcmUgYWxyZWFkeSBzY3JhcGVkIGxpbmtzXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnSWdub3JpbmcgbmV4dCcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZWNvcmQpXG4vL1x0XHRcdFx0XHRcdHNjcmFwZWRSZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHJlY29yZC5fZm9sbG93ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSByZWNvcmRbJ19mb2xsb3cnXVxuICAgICAgICAgICAgZGVsZXRlIHJlY29yZFsnX2ZvbGxvd1NlbGVjdG9ySWQnXVxuICAgICAgICAgIH1cbiAgICAgICAgICBzY3JhcGVkUmVjb3Jkcy5wdXNoKHJlY29yZClcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkZWZlcnJlZERhdGFtYW5pcHVsYXRpb25zKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZXN1bHRXcml0ZXIud3JpdGVEb2NzKHNjcmFwZWRSZWNvcmRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKClcblx0XHRcdFx0XHQvLyBkZWxheSBuZXh0IGpvYiBpZiBuZWVkZWRcbiAgICAgICAgICB0aGlzLl90aW1lTmV4dFNjcmFwZUF2YWlsYWJsZSA9IG5vdyArIHRoaXMucmVxdWVzdEludGVydmFsXG4gICAgICAgICAgaWYgKG5vdyA+PSB0aGlzLl90aW1lTmV4dFNjcmFwZUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fcnVuKClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGRlbGF5ID0gdGhpcy5fdGltZU5leHRTY3JhcGVBdmFpbGFibGUgLSBub3dcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB0aGlzLl9ydW4oKVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCBkZWxheSlcbiAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgIH0uYmluZCh0aGlzKSlcbiAgICB9LmJpbmQodGhpcykpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTY3JhcGVyXG4iLCJ2YXIgc2VsZWN0b3JzID0gcmVxdWlyZSgnLi9TZWxlY3RvcnMnKVxudmFyIEVsZW1lbnRRdWVyeSA9IHJlcXVpcmUoJy4vRWxlbWVudFF1ZXJ5JylcbnZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxuXG52YXIgU2VsZWN0b3IgPSBmdW5jdGlvbiAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgdmFyICQgPSBvcHRpb25zLiRcbiAgdmFyIGRvY3VtZW50ID0gb3B0aW9ucy5kb2N1bWVudFxuICB2YXIgd2luZG93ID0gb3B0aW9ucy53aW5kb3dcbiAgLy8gV2UgZG9uJ3Qgd2FudCBlbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckJywge1xuICAgIHZhbHVlOiAkLFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnd2luZG93Jywge1xuICAgIHZhbHVlOiB3aW5kb3csXG4gICAgZW51bWVyYWJsZTogZmFsc2VcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdkb2N1bWVudCcsIHtcbiAgICB2YWx1ZTogZG9jdW1lbnQsXG4gICAgZW51bWVyYWJsZTogZmFsc2VcbiAgfSlcbiAgaWYgKCF0aGlzLiQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBqcXVlcnknKVxuICBpZiAoIXRoaXMuZG9jdW1lbnQpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgZG9jdW1lbnRcIilcbiAgaWYoIXRoaXMud2luZG93KXRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgd2luZG93XCIpXG5cbiAgdGhpcy51cGRhdGVEYXRhKHNlbGVjdG9yKVxuICB0aGlzLmluaXRUeXBlKClcbn1cblxuU2VsZWN0b3IucHJvdG90eXBlID0ge1xuXG5cdC8qKlxuXHQgKiBJcyB0aGlzIHNlbGVjdG9yIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIG11bHRpcGxlIGl0ZW1zP1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG4gIHdpbGxSZXR1cm5NdWx0aXBsZVJlY29yZHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5jYW5SZXR1cm5NdWx0aXBsZVJlY29yZHMoKSAmJiB0aGlzLm11bHRpcGxlXG4gIH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSBjdXJyZW50IHNlbGVjdG9yIGNvbmZpZ3VyYXRpb25cblx0ICogQHBhcmFtIGRhdGFcblx0ICovXG4gIHVwZGF0ZURhdGE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIGFsbG93ZWRLZXlzID0gWyd3aW5kb3cnLCAnZG9jdW1lbnQnLCAnaWQnLCAndHlwZScsICdzZWxlY3RvcicsICdwYXJlbnRTZWxlY3RvcnMnXVxuICAgIGNvbnNvbGUubG9nKCdkYXRhIHR5cGUnLCBkYXRhLnR5cGUpXG4gICAgYWxsb3dlZEtleXMgPSBhbGxvd2VkS2V5cy5jb25jYXQoc2VsZWN0b3JzW2RhdGEudHlwZV0uZ2V0RmVhdHVyZXMoKSlcbiAgICB2YXIga2V5XG5cdFx0Ly8gdXBkYXRlIGRhdGFcbiAgICBmb3IgKGtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAoYWxsb3dlZEtleXMuaW5kZXhPZihrZXkpICE9PSAtMSB8fCB0eXBlb2YgZGF0YVtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNba2V5XSA9IGRhdGFba2V5XVxuICAgICAgfVxuICAgIH1cblxuXHRcdC8vIHJlbW92ZSB2YWx1ZXMgdGhhdCBhcmUgbm90IG5lZWRlZCBmb3IgdGhpcyB0eXBlIG9mIHNlbGVjdG9yXG4gICAgZm9yIChrZXkgaW4gdGhpcykge1xuICAgICAgaWYgKGFsbG93ZWRLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYgdHlwZW9mIHRoaXNba2V5XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG5cdC8qKlxuXHQgKiBDU1Mgc2VsZWN0b3Igd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBlbGVtZW50IHNlbGVjdGlvblxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cbiAgZ2V0SXRlbUNTU1NlbGVjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICcqJ1xuICB9LFxuXG5cdC8qKlxuXHQgKiBvdmVycmlkZSBvYmplY3RzIG1ldGhvZHMgYmFzZWQgb24gc2VsZXRvciB0eXBlXG5cdCAqL1xuICBpbml0VHlwZTogZnVuY3Rpb24gKCkge1xuICAgIGlmIChzZWxlY3RvcnNbdGhpcy50eXBlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdG9yIHR5cGUgbm90IGRlZmluZWQgJyArIHRoaXMudHlwZSlcbiAgICB9XG5cblx0XHQvLyBvdmVycmlkZXMgb2JqZWN0cyBtZXRob2RzXG4gICAgZm9yICh2YXIgaSBpbiBzZWxlY3RvcnNbdGhpcy50eXBlXSkge1xuICAgICAgdGhpc1tpXSA9IHNlbGVjdG9yc1t0aGlzLnR5cGVdW2ldXG4gICAgfVxuICB9LFxuXG5cdC8qKlxuXHQgKiBDaGVjayB3aGV0aGVyIGEgc2VsZWN0b3IgaXMgYSBwYXJlbiBzZWxlY3RvciBvZiB0aGlzIHNlbGVjdG9yXG5cdCAqIEBwYXJhbSBzZWxlY3RvcklkXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cbiAgaGFzUGFyZW50U2VsZWN0b3I6IGZ1bmN0aW9uIChzZWxlY3RvcklkKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhcmVudFNlbGVjdG9ycy5pbmRleE9mKHNlbGVjdG9ySWQpICE9PSAtMSlcbiAgfSxcblxuICByZW1vdmVQYXJlbnRTZWxlY3RvcjogZnVuY3Rpb24gKHNlbGVjdG9ySWQpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnBhcmVudFNlbGVjdG9ycy5pbmRleE9mKHNlbGVjdG9ySWQpXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5wYXJlbnRTZWxlY3RvcnMuc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfSxcblxuICByZW5hbWVQYXJlbnRTZWxlY3RvcjogZnVuY3Rpb24gKG9yaWdpbmFsSWQsIHJlcGxhY2VtZW50SWQpIHtcbiAgICBpZiAodGhpcy5oYXNQYXJlbnRTZWxlY3RvcihvcmlnaW5hbElkKSkge1xuICAgICAgdmFyIHBvcyA9IHRoaXMucGFyZW50U2VsZWN0b3JzLmluZGV4T2Yob3JpZ2luYWxJZClcbiAgICAgIHRoaXMucGFyZW50U2VsZWN0b3JzLnNwbGljZShwb3MsIDEsIHJlcGxhY2VtZW50SWQpXG4gICAgfVxuICB9LFxuXG4gIGdldERhdGFFbGVtZW50czogZnVuY3Rpb24gKHBhcmVudEVsZW1lbnQpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICB2YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICB2YXIgZWxlbWVudHMgPSBFbGVtZW50UXVlcnkodGhpcy5zZWxlY3RvciwgcGFyZW50RWxlbWVudCwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudHNcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBbZWxlbWVudHNbMF1dXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfSxcblxuICBnZXREYXRhOiBmdW5jdGlvbiAocGFyZW50RWxlbWVudCkge1xuICAgIHZhciBkID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgdGltZW91dCA9IHRoaXMuZGVsYXkgfHwgMFxuXG5cdFx0Ly8gdGhpcyB3b3JrcyBtdWNoIGZhc3RlciBiZWNhdXNlIHdoZW5DYWxsU2VxdWVudGFsbHkgaXNuJ3QgcnVubmluZyBuZXh0IGRhdGEgZXh0cmFjdGlvbiBpbW1lZGlhdGVseVxuICAgIGlmICh0aW1lb3V0ID09PSAwKSB7XG4gICAgICB2YXIgZGVmZXJyZWREYXRhID0gdGhpcy5fZ2V0RGF0YShwYXJlbnRFbGVtZW50KVxuICAgICAgZGVmZXJyZWREYXRhLmRvbmUoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgZC5yZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH1cdGVsc2Uge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZWZlcnJlZERhdGEgPSB0aGlzLl9nZXREYXRhKHBhcmVudEVsZW1lbnQpXG4gICAgICAgIGRlZmVycmVkRGF0YS5kb25lKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgZC5yZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9LmJpbmQodGhpcyksIHRpbWVvdXQpXG4gICAgfVxuXG4gICAgcmV0dXJuIGQucHJvbWlzZSgpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RvclxuIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG5cbnZhciBTZWxlY3RvckVsZW1lbnQgPSB7XG5cbiAgY2FuUmV0dXJuTXVsdGlwbGVSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkhhdmVMb2NhbENoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5DcmVhdGVOZXdKb2JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIHdpbGxSZXR1cm5FbGVtZW50czogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG4gIF9nZXREYXRhOiBmdW5jdGlvbiAocGFyZW50RWxlbWVudCkge1xuICAgIHZhciBkZmQgPSBqcXVlcnkuRGVmZXJyZWQoKVxuXG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcbiAgICBkZmQucmVzb2x2ZSh0aGlzLiQubWFrZUFycmF5KGVsZW1lbnRzKSlcblxuICAgIHJldHVybiBkZmQucHJvbWlzZSgpXG4gIH0sXG5cbiAgZ2V0RGF0YUNvbHVtbnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gW11cbiAgfSxcblxuICBnZXRGZWF0dXJlczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbJ211bHRpcGxlJywgJ2RlbGF5J11cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdG9yRWxlbWVudFxuIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG52YXIgU2VsZWN0b3JFbGVtZW50QXR0cmlidXRlID0ge1xuICBjYW5SZXR1cm5NdWx0aXBsZVJlY29yZHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkhhdmVDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkhhdmVMb2NhbENoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG5cbiAgY2FuQ3JlYXRlTmV3Sm9iczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICB3aWxsUmV0dXJuRWxlbWVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyIGRmZCA9IGpxdWVyeS5EZWZlcnJlZCgpXG4gICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcblxuICAgIHZhciByZXN1bHQgPSBbXVxuICAgIHNlbGYuJChlbGVtZW50cykuZWFjaChmdW5jdGlvbiAoaywgZWxlbWVudCkge1xuICAgICAgdmFyIGRhdGEgPSB7fVxuXG4gICAgICBkYXRhW3RoaXMuaWRdID0gc2VsZi4kKGVsZW1lbnQpLmF0dHIodGhpcy5leHRyYWN0QXR0cmlidXRlKVxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gZmFsc2UgJiYgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICBkYXRhW3RoaXMuaWQgKyAnLXNyYyddID0gbnVsbFxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9XG4gICAgZGZkLnJlc29sdmUocmVzdWx0KVxuXG4gICAgcmV0dXJuIGRmZC5wcm9taXNlKClcbiAgfSxcblxuICBnZXREYXRhQ29sdW1uczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbdGhpcy5pZF1cbiAgfSxcblxuICBnZXRGZWF0dXJlczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbJ211bHRpcGxlJywgJ2V4dHJhY3RBdHRyaWJ1dGUnLCAnZGVsYXknXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0b3JFbGVtZW50QXR0cmlidXRlXG4iLCJ2YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciBVbmlxdWVFbGVtZW50TGlzdCA9IHJlcXVpcmUoJy4vLi4vVW5pcXVlRWxlbWVudExpc3QnKVxudmFyIEVsZW1lbnRRdWVyeSA9IHJlcXVpcmUoJy4vLi4vRWxlbWVudFF1ZXJ5JylcbnZhciBDc3NTZWxlY3RvciA9IHJlcXVpcmUoJ2Nzcy1zZWxlY3RvcicpLkNzc1NlbGVjdG9yXG52YXIgU2VsZWN0b3JFbGVtZW50Q2xpY2sgPSB7XG5cbiAgY2FuUmV0dXJuTXVsdGlwbGVSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkhhdmVMb2NhbENoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5DcmVhdGVOZXdKb2JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIHdpbGxSZXR1cm5FbGVtZW50czogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgZ2V0Q2xpY2tFbGVtZW50czogZnVuY3Rpb24gKHBhcmVudEVsZW1lbnQpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICB2YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICB2YXIgY2xpY2tFbGVtZW50cyA9IEVsZW1lbnRRdWVyeSh0aGlzLmNsaWNrRWxlbWVudFNlbGVjdG9yLCBwYXJlbnRFbGVtZW50LCB7JCwgZG9jdW1lbnQsIHdpbmRvd30pXG4gICAgcmV0dXJuIGNsaWNrRWxlbWVudHNcbiAgfSxcblxuXHQvKipcblx0ICogQ2hlY2sgd2hldGhlciBlbGVtZW50IGlzIHN0aWxsIHJlYWNoYWJsZSBmcm9tIGh0bWwuIFVzZWZ1bCB0byBjaGVjayB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSBET00uXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqL1xuICBpc0VsZW1lbnRJbkhUTUw6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuJChlbGVtZW50KS5jbG9zZXN0KCdodG1sJykubGVuZ3RoICE9PSAwXG4gIH0sXG5cbiAgdHJpZ2dlckJ1dHRvbkNsaWNrOiBmdW5jdGlvbiAoY2xpY2tFbGVtZW50KSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgIHZhciBjcyA9IG5ldyBDc3NTZWxlY3Rvcih7XG4gICAgICBlbmFibGVTbWFydFRhYmxlU2VsZWN0b3I6IGZhbHNlLFxuICAgICAgcGFyZW50OiB0aGlzLiQoJ2JvZHknKVswXSxcbiAgICAgIGVuYWJsZVJlc3VsdFN0cmlwcGluZzogZmFsc2VcbiAgICB9KVxuICAgIHZhciBjc3NTZWxlY3RvciA9IGNzLmdldENzc1NlbGVjdG9yKFtjbGlja0VsZW1lbnRdKVxuXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3RvcilbMF0uY2xpY2soKVxuLyogICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIGNhdGNoIHdpbmRvdy5vcGVuIGNhbGwgYW5kIHBsYWNlIHRoZSByZXF1ZXN0ZWQgdXJsIGFzIHRoZSBlbGVtZW50cyBkYXRhIGF0dHJpYnV0ZVxuICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKVxuICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCdcbiAgICBzY3JpcHQudGV4dCA9ICcnICtcblx0XHRcdCcoZnVuY3Rpb24oKXsgJyArXG5cdFx0XHRcInZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1wiICsgY3NzU2VsZWN0b3IgKyBcIicpWzBdOyBcIiArXG5cdFx0XHQnZWwuY2xpY2soKTsgJyArXG5cdFx0XHQnfSkoKTsnXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpKi9cbiAgfSxcblxuICBnZXRDbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZTogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmNsaWNrRWxlbWVudFVuaXF1ZW5lc3NUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAndW5pcXVlVGV4dCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpY2tFbGVtZW50VW5pcXVlbmVzc1R5cGVcbiAgICB9XG4gIH0sXG5cbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgdmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgdmFyIGRlbGF5ID0gcGFyc2VJbnQodGhpcy5kZWxheSkgfHwgMFxuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgZm91bmRFbGVtZW50cyA9IG5ldyBVbmlxdWVFbGVtZW50TGlzdCgndW5pcXVlVGV4dCcsIHskLCBkb2N1bWVudCwgd2luZG93fSlcbiAgICB2YXIgY2xpY2tFbGVtZW50cyA9IHRoaXMuZ2V0Q2xpY2tFbGVtZW50cyhwYXJlbnRFbGVtZW50KVxuICAgIHZhciBkb25lQ2xpY2tpbmdFbGVtZW50cyA9IG5ldyBVbmlxdWVFbGVtZW50TGlzdCh0aGlzLmdldENsaWNrRWxlbWVudFVuaXF1ZW5lc3NUeXBlKCksIHskLCBkb2N1bWVudCwgd2luZG93fSlcblxuXHRcdC8vIGFkZCBlbGVtZW50cyB0aGF0IGFyZSBhdmFpbGFibGUgYmVmb3JlIGNsaWNraW5nXG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcbiAgICBlbGVtZW50cy5mb3JFYWNoKGZvdW5kRWxlbWVudHMucHVzaC5iaW5kKGZvdW5kRWxlbWVudHMpKVxuXG5cdFx0Ly8gZGlzY2FyZCBpbml0aWFsIGVsZW1lbnRzXG4gICAgaWYgKHRoaXMuZGlzY2FyZEluaXRpYWxFbGVtZW50cykge1xuICAgICAgZm91bmRFbGVtZW50cyA9IG5ldyBVbmlxdWVFbGVtZW50TGlzdCgndW5pcXVlVGV4dCcsIHskLCBkb2N1bWVudCwgd2luZG93fSlcbiAgICB9XG5cblx0XHQvLyBubyBlbGVtZW50cyB0byBjbGljayBhdCB0aGUgYmVnaW5uaW5nXG4gICAgaWYgKGNsaWNrRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoZm91bmRFbGVtZW50cylcbiAgICAgIHJldHVybiBkZWZlcnJlZFJlc3BvbnNlLnByb21pc2UoKVxuICAgIH1cblxuXHRcdC8vIGluaXRpYWwgY2xpY2sgYW5kIHdhaXRcbiAgICB2YXIgY3VycmVudENsaWNrRWxlbWVudCA9IGNsaWNrRWxlbWVudHNbMF1cbiAgICB0aGlzLnRyaWdnZXJCdXR0b25DbGljayhjdXJyZW50Q2xpY2tFbGVtZW50KVxuICAgIHZhciBuZXh0RWxlbWVudFNlbGVjdGlvbiA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgKyBkZWxheVxuXG5cdFx0Ly8gaW5maW5pdGVseSBzY3JvbGwgZG93biBhbmQgZmluZCBhbGwgaXRlbXNcbiAgICB2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBmaW5kIHRob3NlIGNsaWNrIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBpbiB0aGUgYmxhY2sgbGlzdFxuICAgICAgdmFyIGFsbENsaWNrRWxlbWVudHMgPSB0aGlzLmdldENsaWNrRWxlbWVudHMocGFyZW50RWxlbWVudClcbiAgICAgIGNsaWNrRWxlbWVudHMgPSBbXVxuICAgICAgYWxsQ2xpY2tFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGlmICghZG9uZUNsaWNraW5nRWxlbWVudHMuaXNBZGRlZChlbGVtZW50KSkge1xuICAgICAgICAgIGNsaWNrRWxlbWVudHMucHVzaChlbGVtZW50KVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKVxuXHRcdFx0Ly8gc2xlZXAuIHdhaXQgd2hlbiB0byBleHRyYWN0IG5leHQgZWxlbWVudHNcbiAgICAgIGlmIChub3cgPCBuZXh0RWxlbWVudFNlbGVjdGlvbikge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIndhaXRcIik7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG5cdFx0XHQvLyBhZGQgbmV3bHkgZm91bmQgZWxlbWVudHMgdG8gZWxlbWVudCBmb3VuZEVsZW1lbnRzIGFycmF5LlxuICAgICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcbiAgICAgIHZhciBhZGRlZEFuRWxlbWVudCA9IGZhbHNlXG4gICAgICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHZhciBhZGRlZCA9IGZvdW5kRWxlbWVudHMucHVzaChlbGVtZW50KVxuICAgICAgICBpZiAoYWRkZWQpIHtcbiAgICAgICAgICBhZGRlZEFuRWxlbWVudCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYWRkZWRcIiwgYWRkZWRBbkVsZW1lbnQpO1xuXG5cdFx0XHQvLyBubyBuZXcgZWxlbWVudHMgZm91bmQuIFN0b3AgY2xpY2tpbmcgdGhpcyBidXR0b25cbiAgICAgIGlmICghYWRkZWRBbkVsZW1lbnQpIHtcbiAgICAgICAgZG9uZUNsaWNraW5nRWxlbWVudHMucHVzaChjdXJyZW50Q2xpY2tFbGVtZW50KVxuICAgICAgfVxuXG5cdFx0XHQvLyBjb250aW51ZSBjbGlja2luZyBhbmQgYWRkIGRlbGF5LCBidXQgaWYgdGhlcmUgaXMgbm90aGluZ1xuXHRcdFx0Ly8gbW9yZSB0byBjbGljayB0aGUgZmluaXNoXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcInRvdGFsIGJ1dHRvbnNcIiwgY2xpY2tFbGVtZW50cy5sZW5ndGgpXG4gICAgICBpZiAoY2xpY2tFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbClcbiAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKGZvdW5kRWxlbWVudHMpXG4gICAgICB9IGVsc2Uge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImNsaWNrXCIpO1xuICAgICAgICBjdXJyZW50Q2xpY2tFbGVtZW50ID0gY2xpY2tFbGVtZW50c1swXVxuXHRcdFx0XHQvLyBjbGljayBvbiBlbGVtZW50cyBvbmx5IG9uY2UgaWYgdGhlIHR5cGUgaXMgY2xpY2tvbmNlXG4gICAgICAgIGlmICh0aGlzLmNsaWNrVHlwZSA9PT0gJ2NsaWNrT25jZScpIHtcbiAgICAgICAgICBkb25lQ2xpY2tpbmdFbGVtZW50cy5wdXNoKGN1cnJlbnRDbGlja0VsZW1lbnQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmlnZ2VyQnV0dG9uQ2xpY2soY3VycmVudENsaWNrRWxlbWVudClcbiAgICAgICAgbmV4dEVsZW1lbnRTZWxlY3Rpb24gPSBub3cgKyBkZWxheVxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSwgNTApXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZS5wcm9taXNlKClcbiAgfSxcblxuICBnZXREYXRhQ29sdW1uczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbXVxuICB9LFxuXG4gIGdldEZlYXR1cmVzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFsnbXVsdGlwbGUnLCAnZGVsYXknLCAnY2xpY2tFbGVtZW50U2VsZWN0b3InLCAnY2xpY2tUeXBlJywgJ2Rpc2NhcmRJbml0aWFsRWxlbWVudHMnLCAnY2xpY2tFbGVtZW50VW5pcXVlbmVzc1R5cGUnXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0b3JFbGVtZW50Q2xpY2tcbiIsInZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxudmFyIFNlbGVjdG9yRWxlbWVudFNjcm9sbCA9IHtcblxuICBjYW5SZXR1cm5NdWx0aXBsZVJlY29yZHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkhhdmVDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgY2FuSGF2ZUxvY2FsQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkNyZWF0ZU5ld0pvYnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgd2lsbFJldHVybkVsZW1lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcbiAgc2Nyb2xsVG9Cb3R0b206IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KVxuICB9LFxuICBfZ2V0RGF0YTogZnVuY3Rpb24gKHBhcmVudEVsZW1lbnQpIHtcbiAgICB2YXIgZGVsYXkgPSBwYXJzZUludCh0aGlzLmRlbGF5KSB8fCAwXG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICAgIHZhciBmb3VuZEVsZW1lbnRzID0gW11cblxuXHRcdC8vIGluaXRpYWxseSBzY3JvbGwgZG93biBhbmQgd2FpdFxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKVxuICAgIHZhciBuZXh0RWxlbWVudFNlbGVjdGlvbiA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgKyBkZWxheVxuXG5cdFx0Ly8gaW5maW5pdGVseSBzY3JvbGwgZG93biBhbmQgZmluZCBhbGwgaXRlbXNcbiAgICB2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKVxuXHRcdFx0Ly8gc2xlZXAuIHdhaXQgd2hlbiB0byBleHRyYWN0IG5leHQgZWxlbWVudHNcbiAgICAgIGlmIChub3cgPCBuZXh0RWxlbWVudFNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcblx0XHRcdC8vIG5vIG5ldyBlbGVtZW50cyBmb3VuZFxuICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gZm91bmRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbClcbiAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKHRoaXMuJC5tYWtlQXJyYXkoZWxlbWVudHMpKVxuICAgICAgfSBlbHNlIHtcblx0XHRcdFx0Ly8gY29udGludWUgc2Nyb2xsaW5nIGFuZCBhZGQgZGVsYXlcbiAgICAgICAgZm91bmRFbGVtZW50cyA9IGVsZW1lbnRzXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICBuZXh0RWxlbWVudFNlbGVjdGlvbiA9IG5vdyArIGRlbGF5XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpLCA1MClcblxuICAgIHJldHVybiBkZWZlcnJlZFJlc3BvbnNlLnByb21pc2UoKVxuICB9LFxuXG4gIGdldERhdGFDb2x1bW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFtdXG4gIH0sXG5cbiAgZ2V0RmVhdHVyZXM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gWydtdWx0aXBsZScsICdkZWxheSddXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RvckVsZW1lbnRTY3JvbGxcbiIsInZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxudmFyIFNlbGVjdG9yR3JvdXAgPSB7XG5cbiAgY2FuUmV0dXJuTXVsdGlwbGVSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG5cbiAgY2FuSGF2ZUNoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG5cbiAgY2FuSGF2ZUxvY2FsQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcblxuICBjYW5DcmVhdGVOZXdKb2JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIHdpbGxSZXR1cm5FbGVtZW50czogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICBfZ2V0RGF0YTogZnVuY3Rpb24gKHBhcmVudEVsZW1lbnQpIHtcbiAgICB2YXIgZGZkID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgc2VsZiA9IHRoaXNcblx0XHQvLyBjYW5ub3QgcmV1c2UgdGhpcy5nZXREYXRhRWxlbWVudHMgYmVjYXVzZSBpdCBkZXBlbmRzIG9uICptdWx0aXBsZSogcHJvcGVydHlcbiAgICB2YXIgZWxlbWVudHMgPSBzZWxmLiQodGhpcy5zZWxlY3RvciwgcGFyZW50RWxlbWVudClcblxuICAgIHZhciByZWNvcmRzID0gW11cbiAgICBzZWxmLiQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGssIGVsZW1lbnQpIHtcbiAgICAgIHZhciBkYXRhID0ge31cblxuICAgICAgZGF0YVt0aGlzLmlkXSA9IHNlbGYuJChlbGVtZW50KS50ZXh0KClcblxuICAgICAgaWYgKHRoaXMuZXh0cmFjdEF0dHJpYnV0ZSkge1xuICAgICAgICBkYXRhW3RoaXMuaWQgKyAnLScgKyB0aGlzLmV4dHJhY3RBdHRyaWJ1dGVdID0gc2VsZi4kKGVsZW1lbnQpLmF0dHIodGhpcy5leHRyYWN0QXR0cmlidXRlKVxuICAgICAgfVxuXG4gICAgICByZWNvcmRzLnB1c2goZGF0YSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICB2YXIgcmVzdWx0ID0ge31cbiAgICByZXN1bHRbdGhpcy5pZF0gPSByZWNvcmRzXG5cbiAgICBkZmQucmVzb2x2ZShbcmVzdWx0XSlcbiAgICByZXR1cm4gZGZkLnByb21pc2UoKVxuICB9LFxuXG4gIGdldERhdGFDb2x1bW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFt0aGlzLmlkXVxuICB9LFxuXG4gIGdldEZlYXR1cmVzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFsnZGVsYXknLCAnZXh0cmFjdEF0dHJpYnV0ZSddXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3Rvckdyb3VwXG4iLCJ2YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciBTZWxlY3RvckhUTUwgPSB7XG5cbiAgY2FuUmV0dXJuTXVsdGlwbGVSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcblxuICBjYW5IYXZlTG9jYWxDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkNyZWF0ZU5ld0pvYnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgd2lsbFJldHVybkVsZW1lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIF9nZXREYXRhOiBmdW5jdGlvbiAocGFyZW50RWxlbWVudCkge1xuICAgIHZhciBkZmQgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICAgIHZhciBzZWxmID0gdGhpc1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRzKHBhcmVudEVsZW1lbnQpXG5cbiAgICB2YXIgcmVzdWx0ID0gW11cbiAgICBzZWxmLiQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGssIGVsZW1lbnQpIHtcbiAgICAgIHZhciBkYXRhID0ge31cbiAgICAgIHZhciBodG1sID0gc2VsZi4kKGVsZW1lbnQpLmh0bWwoKVxuXG4gICAgICBpZiAodGhpcy5yZWdleCAhPT0gdW5kZWZpbmVkICYmIHRoaXMucmVnZXgubGVuZ3RoKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gaHRtbC5tYXRjaChuZXcgUmVnRXhwKHRoaXMucmVnZXgpKVxuICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgIGh0bWwgPSBtYXRjaGVzWzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaHRtbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGF0YVt0aGlzLmlkXSA9IGh0bWxcblxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gZmFsc2UgJiYgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICBkYXRhW3RoaXMuaWRdID0gbnVsbFxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9XG5cbiAgICBkZmQucmVzb2x2ZShyZXN1bHQpXG4gICAgcmV0dXJuIGRmZC5wcm9taXNlKClcbiAgfSxcblxuICBnZXREYXRhQ29sdW1uczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbdGhpcy5pZF1cbiAgfSxcblxuICBnZXRGZWF0dXJlczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbJ211bHRpcGxlJywgJ3JlZ2V4JywgJ2RlbGF5J11cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdG9ySFRNTFxuIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG52YXIgd2hlbkNhbGxTZXF1ZW50aWFsbHkgPSByZXF1aXJlKCcuLi8uLi9hc3NldHMvanF1ZXJ5LndoZW5jYWxsc2VxdWVudGlhbGx5JylcbnZhciBCYXNlNjQgPSByZXF1aXJlKCcuLi8uLi9hc3NldHMvYmFzZTY0JylcbnZhciBTZWxlY3RvckltYWdlID0ge1xuICBjYW5SZXR1cm5NdWx0aXBsZVJlY29yZHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkhhdmVDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkhhdmVMb2NhbENoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG5cbiAgY2FuQ3JlYXRlTmV3Sm9iczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICB3aWxsUmV0dXJuRWxlbWVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyIGRmZCA9IGpxdWVyeS5EZWZlcnJlZCgpXG5cbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmdldERhdGFFbGVtZW50cyhwYXJlbnRFbGVtZW50KVxuXG4gICAgdmFyIGRlZmVycmVkRGF0YUNhbGxzID0gW11cbiAgICB0aGlzLiQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGksIGVsZW1lbnQpIHtcbiAgICAgIGRlZmVycmVkRGF0YUNhbGxzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGVmZXJyZWREYXRhID0ganF1ZXJ5LkRlZmVycmVkKClcblxuICAgICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICAgIGRhdGFbdGhpcy5pZCArICctc3JjJ10gPSBlbGVtZW50LnNyY1xuXG5cdFx0XHRcdC8vIGRvd25sb2FkIGltYWdlIGlmIHJlcXVpcmVkXG4gICAgICAgIGlmICghdGhpcy5kb3dubG9hZEltYWdlKSB7XG4gICAgICAgICAgZGVmZXJyZWREYXRhLnJlc29sdmUoZGF0YSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZGVmZXJyZWRJbWFnZUJhc2U2NCA9IHRoaXMuZG93bmxvYWRJbWFnZUJhc2U2NChlbGVtZW50LnNyYylcblxuICAgICAgICAgIGRlZmVycmVkSW1hZ2VCYXNlNjQuZG9uZShmdW5jdGlvbiAoaW1hZ2VSZXNwb25zZSkge1xuICAgICAgICAgICAgZGF0YVsnX2ltYWdlQmFzZTY0LScgKyB0aGlzLmlkXSA9IGltYWdlUmVzcG9uc2UuaW1hZ2VCYXNlNjRcbiAgICAgICAgICAgIGRhdGFbJ19pbWFnZU1pbWVUeXBlLScgKyB0aGlzLmlkXSA9IGltYWdlUmVzcG9uc2UubWltZVR5cGVcblxuICAgICAgICAgICAgZGVmZXJyZWREYXRhLnJlc29sdmUoZGF0YSlcbiAgICAgICAgICB9LmJpbmQodGhpcykpLmZhaWwoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Ly8gZmFpbGVkIHRvIGRvd25sb2FkIGltYWdlIGNvbnRpbnVlLlxuXHRcdFx0XHRcdFx0Ly8gQFRPRE8gaGFuZGxlIGVycnJvclxuICAgICAgICAgICAgZGVmZXJyZWREYXRhLnJlc29sdmUoZGF0YSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmVycmVkRGF0YS5wcm9taXNlKClcbiAgICAgIH0uYmluZCh0aGlzKSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkZWZlcnJlZERhdGFDYWxscykuZG9uZShmdW5jdGlvbiAoZGF0YVJlc3VsdHMpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlID09PSBmYWxzZSAmJiBlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGRhdGEgPSB7fVxuICAgICAgICBkYXRhW3RoaXMuaWQgKyAnLXNyYyddID0gbnVsbFxuICAgICAgICBkYXRhUmVzdWx0cy5wdXNoKGRhdGEpXG4gICAgICB9XG5cbiAgICAgIGRmZC5yZXNvbHZlKGRhdGFSZXN1bHRzKVxuICAgIH0pXG5cbiAgICByZXR1cm4gZGZkLnByb21pc2UoKVxuICB9LFxuXG4gIGRvd25sb2FkRmlsZUFzQmxvYjogZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgeGhyID0gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpXG4gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgICAgdmFyIGJsb2IgPSB0aGlzLnJlc3BvbnNlXG4gICAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKGJsb2IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZWplY3QoeGhyLnN0YXR1c1RleHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgeGhyLm9wZW4oJ0dFVCcsIHVybClcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgeGhyLnNlbmQoKVxuXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2UucHJvbWlzZSgpXG4gIH0sXG5cbiAgZG93bmxvYWRJbWFnZUJhc2U2NDogZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgZGVmZXJyZWREb3dubG9hZCA9IHRoaXMuZG93bmxvYWRGaWxlQXNCbG9iKHVybClcbiAgICBkZWZlcnJlZERvd25sb2FkLmRvbmUoZnVuY3Rpb24gKGJsb2IpIHtcbiAgICAgIHZhciBtaW1lVHlwZSA9IGJsb2IudHlwZVxuICAgICAgdmFyIGRlZmVycmVkQmxvYiA9IEJhc2U2NC5ibG9iVG9CYXNlNjQoYmxvYilcbiAgICAgIGRlZmVycmVkQmxvYi5kb25lKGZ1bmN0aW9uIChpbWFnZUJhc2U2NCkge1xuICAgICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoe1xuICAgICAgICAgIG1pbWVUeXBlOiBtaW1lVHlwZSxcbiAgICAgICAgICBpbWFnZUJhc2U2NDogaW1hZ2VCYXNlNjRcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSkuZmFpbChkZWZlcnJlZFJlc3BvbnNlLmZhaWwpXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2UucHJvbWlzZSgpXG4gIH0sXG5cbiAgZ2V0RGF0YUNvbHVtbnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gW3RoaXMuaWQgKyAnLXNyYyddXG4gIH0sXG5cbiAgZ2V0RmVhdHVyZXM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gWydtdWx0aXBsZScsICdkZWxheScsICdkb3dubG9hZEltYWdlJ11cbiAgfSxcblxuICBnZXRJdGVtQ1NTU2VsZWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ2ltZydcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdG9ySW1hZ2VcbiIsInZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxudmFyIHdoZW5DYWxsU2VxdWVudGlhbGx5ID0gcmVxdWlyZSgnLi4vLi4vYXNzZXRzL2pxdWVyeS53aGVuY2FsbHNlcXVlbnRpYWxseScpXG5cbnZhciBTZWxlY3RvckxpbmsgPSB7XG4gIGNhblJldHVybk11bHRpcGxlUmVjb3JkczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgY2FuSGF2ZUNoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlTG9jYWxDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkNyZWF0ZU5ld0pvYnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICB3aWxsUmV0dXJuRWxlbWVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcbiAgICB2YXIgc2VsZiA9IHRoaXNcblxuICAgIHZhciBkZmQgPSBqcXVlcnkuRGVmZXJyZWQoKVxuXG5cdFx0Ly8gcmV0dXJuIGVtcHR5IHJlY29yZCBpZiBub3QgbXVsdGlwbGUgdHlwZSBhbmQgbm8gZWxlbWVudHMgZm91bmRcbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gZmFsc2UgJiYgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICBkYXRhW3RoaXMuaWRdID0gbnVsbFxuICAgICAgZGZkLnJlc29sdmUoW2RhdGFdKVxuICAgICAgcmV0dXJuIGRmZFxuICAgIH1cblxuXHRcdC8vIGV4dHJhY3QgbGlua3Mgb25lIGJ5IG9uZVxuICAgIHZhciBkZWZlcnJlZERhdGFFeHRyYWN0aW9uQ2FsbHMgPSBbXVxuICAgIHNlbGYuJChlbGVtZW50cykuZWFjaChmdW5jdGlvbiAoaywgZWxlbWVudCkge1xuICAgICAgZGVmZXJyZWREYXRhRXh0cmFjdGlvbkNhbGxzLnB1c2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIGRlZmVycmVkRGF0YSA9IGpxdWVyeS5EZWZlcnJlZCgpXG5cbiAgICAgICAgdmFyIGRhdGEgPSB7fVxuICAgICAgICBkYXRhW3RoaXMuaWRdID0gc2VsZi4kKGVsZW1lbnQpLnRleHQoKVxuICAgICAgICBkYXRhLl9mb2xsb3dTZWxlY3RvcklkID0gdGhpcy5pZFxuICAgICAgICBkYXRhW3RoaXMuaWQgKyAnLWhyZWYnXSA9IGVsZW1lbnQuaHJlZlxuICAgICAgICBkYXRhLl9mb2xsb3cgPSBlbGVtZW50LmhyZWZcbiAgICAgICAgZGVmZXJyZWREYXRhLnJlc29sdmUoZGF0YSlcblxuICAgICAgICByZXR1cm4gZGVmZXJyZWREYXRhXG4gICAgICB9LmJpbmQodGhpcywgZWxlbWVudCkpXG4gICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgd2hlbkNhbGxTZXF1ZW50aWFsbHkoZGVmZXJyZWREYXRhRXh0cmFjdGlvbkNhbGxzKS5kb25lKGZ1bmN0aW9uIChyZXNwb25zZXMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXVxuICAgICAgcmVzcG9uc2VzLmZvckVhY2goZnVuY3Rpb24gKGRhdGFSZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZGF0YVJlc3VsdClcbiAgICAgIH0pXG4gICAgICBkZmQucmVzb2x2ZShyZXN1bHQpXG4gICAgfSlcblxuICAgIHJldHVybiBkZmQucHJvbWlzZSgpXG4gIH0sXG5cbiAgZ2V0RGF0YUNvbHVtbnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gW3RoaXMuaWQsIHRoaXMuaWQgKyAnLWhyZWYnXVxuICB9LFxuXG4gIGdldEZlYXR1cmVzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFsnbXVsdGlwbGUnLCAnZGVsYXknXVxuICB9LFxuXG4gIGdldEl0ZW1DU1NTZWxlY3RvcjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnYSdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdG9yTGlua1xuIiwidmFyIHdoZW5DYWxsU2VxdWVudGlhbGx5ID0gcmVxdWlyZSgnLi4vLi4vYXNzZXRzL2pxdWVyeS53aGVuY2FsbHNlcXVlbnRpYWxseScpXG52YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciBDc3NTZWxlY3RvciA9IHJlcXVpcmUoJ2Nzcy1zZWxlY3RvcicpLkNzc1NlbGVjdG9yXG52YXIgU2VsZWN0b3JQb3B1cExpbmsgPSB7XG4gIGNhblJldHVybk11bHRpcGxlUmVjb3JkczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgY2FuSGF2ZUNoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlTG9jYWxDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkNyZWF0ZU5ld0pvYnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICB3aWxsUmV0dXJuRWxlbWVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRzKHBhcmVudEVsZW1lbnQpXG5cbiAgICB2YXIgZGZkID0ganF1ZXJ5LkRlZmVycmVkKClcblxuXHRcdC8vIHJldHVybiBlbXB0eSByZWNvcmQgaWYgbm90IG11bHRpcGxlIHR5cGUgYW5kIG5vIGVsZW1lbnRzIGZvdW5kXG4gICAgaWYgKHRoaXMubXVsdGlwbGUgPT09IGZhbHNlICYmIGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdmFyIGRhdGEgPSB7fVxuICAgICAgZGF0YVt0aGlzLmlkXSA9IG51bGxcbiAgICAgIGRmZC5yZXNvbHZlKFtkYXRhXSlcbiAgICAgIHJldHVybiBkZmRcbiAgICB9XG5cblx0XHQvLyBleHRyYWN0IGxpbmtzIG9uZSBieSBvbmVcbiAgICB2YXIgZGVmZXJyZWREYXRhRXh0cmFjdGlvbkNhbGxzID0gW11cbiAgICAkKGVsZW1lbnRzKS5lYWNoKGZ1bmN0aW9uIChrLCBlbGVtZW50KSB7XG4gICAgICBkZWZlcnJlZERhdGFFeHRyYWN0aW9uQ2FsbHMucHVzaChmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB2YXIgZGVmZXJyZWREYXRhID0ganF1ZXJ5LkRlZmVycmVkKClcblxuICAgICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICAgIGRhdGFbdGhpcy5pZF0gPSAkKGVsZW1lbnQpLnRleHQoKVxuICAgICAgICBkYXRhLl9mb2xsb3dTZWxlY3RvcklkID0gdGhpcy5pZFxuXG4gICAgICAgIHZhciBkZWZlcnJlZFBvcHVwVVJMID0gdGhpcy5nZXRQb3B1cFVSTChlbGVtZW50KVxuICAgICAgICBkZWZlcnJlZFBvcHVwVVJMLmRvbmUoZnVuY3Rpb24gKHVybCkge1xuICAgICAgICAgIGRhdGFbdGhpcy5pZCArICctaHJlZiddID0gdXJsXG4gICAgICAgICAgZGF0YS5fZm9sbG93ID0gdXJsXG4gICAgICAgICAgZGVmZXJyZWREYXRhLnJlc29sdmUoZGF0YSlcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgICAgIHJldHVybiBkZWZlcnJlZERhdGFcbiAgICAgIH0uYmluZCh0aGlzLCBlbGVtZW50KSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkZWZlcnJlZERhdGFFeHRyYWN0aW9uQ2FsbHMpLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlcykge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdXG4gICAgICByZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YVJlc3VsdCkge1xuICAgICAgICByZXN1bHQucHVzaChkYXRhUmVzdWx0KVxuICAgICAgfSlcbiAgICAgIGRmZC5yZXNvbHZlKHJlc3VsdClcbiAgICB9KVxuXG4gICAgcmV0dXJuIGRmZC5wcm9taXNlKClcbiAgfSxcblxuXHQvKipcblx0ICogR2V0cyBhbiB1cmwgZnJvbSBhIHdpbmRvdy5vcGVuIGNhbGwgYnkgbW9ja2luZyB0aGUgd2luZG93Lm9wZW4gZnVuY3Rpb25cblx0ICogQHBhcmFtIGVsZW1lbnRcblx0ICogQHJldHVybnMgJC5EZWZlcnJlZCgpXG5cdCAqL1xuICBnZXRQb3B1cFVSTDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICB2YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICAvLyBvdmVycmlkZSB3aW5kb3cub3BlbiBmdW5jdGlvbi4gd2UgbmVlZCB0byBleGVjdXRlIHRoaXMgaW4gcGFnZSBzY29wZS5cblx0XHQvLyB3ZSBuZWVkIHRvIGtub3cgaG93IHRvIGZpbmQgdGhpcyBlbGVtZW50IGZyb20gcGFnZSBzY29wZS5cbiAgICB2YXIgY3MgPSBuZXcgQ3NzU2VsZWN0b3Ioe1xuICAgICAgZW5hYmxlU21hcnRUYWJsZVNlbGVjdG9yOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZG9jdW1lbnQuYm9keSxcbiAgICAgIGVuYWJsZVJlc3VsdFN0cmlwcGluZzogZmFsc2VcbiAgICB9KVxuICAgIHZhciBjc3NTZWxlY3RvciA9IGNzLmdldENzc1NlbGVjdG9yKFtlbGVtZW50XSlcbiAgICBjb25zb2xlLmxvZyhjc3NTZWxlY3RvcilcbiAgICBjb25zb2xlLmxvZyhkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzU2VsZWN0b3IpKVxuXHRcdC8vIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXRjaCB3aW5kb3cub3BlbiBjYWxsIGFuZCBwbGFjZSB0aGUgcmVxdWVzdGVkIHVybCBhcyB0aGUgZWxlbWVudHMgZGF0YSBhdHRyaWJ1dGVcbiAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JylcbiAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnXG4gICAgY29uc29sZS5sb2coY3NzU2VsZWN0b3IpXG4gICAgY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3RvcikpXG4gICAgdmFyIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3RvcilbMF1cblxuICAgIGNvbnN0IG9wZW4gPSB3aW5kb3cub3BlblxuICAgIHdpbmRvdy5vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHVybCA9IGFyZ3VtZW50c1swXVxuICAgICAgZWwuZGF0YXNldC53ZWJTY3JhcGVyRXh0cmFjdFVybCA9IHVybFxuICAgICAgd2luZG93Lm9wZW4gPSBvcGVuXG4gICAgfVxuICAgIGVsLmNsaWNrKClcblxuXHRcdC8vIHdhaXQgZm9yIHVybCB0byBiZSBhdmFpbGFibGVcbiAgICB2YXIgZGVmZXJyZWRVUkwgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICAgIHZhciB0aW1lb3V0ID0gTWF0aC5hYnMoNTAwMCAvIDMwKSAvLyA1cyB0aW1lb3V0IHRvIGdlbmVyYXRlIGFuIHVybCBmb3IgcG9wdXBcbiAgICB2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdXJsID0gJChlbGVtZW50KS5kYXRhKCd3ZWItc2NyYXBlci1leHRyYWN0LXVybCcpXG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIGRlZmVycmVkVVJMLnJlc29sdmUodXJsKVxuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuICAgICAgICBzY3JpcHQucmVtb3ZlKClcbiAgICAgIH1cblx0XHRcdC8vIHRpbWVvdXQgcG9wdXAgb3BlbmluZ1xuICAgICAgaWYgKHRpbWVvdXQtLSA8PSAwKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXG4gICAgICAgIHNjcmlwdC5yZW1vdmUoKVxuICAgICAgfVxuICAgIH0sIDMwKVxuXG4gICAgcmV0dXJuIGRlZmVycmVkVVJMLnByb21pc2UoKVxuICB9LFxuXG4gIGdldERhdGFDb2x1bW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFt0aGlzLmlkLCB0aGlzLmlkICsgJy1ocmVmJ11cbiAgfSxcblxuICBnZXRGZWF0dXJlczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbJ211bHRpcGxlJywgJ2RlbGF5J11cbiAgfSxcblxuICBnZXRJdGVtQ1NTU2VsZWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJyonXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RvclBvcHVwTGlua1xuIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG5cbnZhciBTZWxlY3RvclRhYmxlID0ge1xuXG4gIGNhblJldHVybk11bHRpcGxlUmVjb3JkczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgY2FuSGF2ZUNoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG5cbiAgY2FuSGF2ZUxvY2FsQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcblxuICBjYW5DcmVhdGVOZXdKb2JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIHdpbGxSZXR1cm5FbGVtZW50czogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICBnZXRUYWJsZUhlYWRlckNvbHVtbnM6IGZ1bmN0aW9uICgkdGFibGUpIHtcbiAgICB2YXIgY29sdW1ucyA9IHt9XG4gICAgdmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICAgIHZhciBoZWFkZXJSb3dTZWxlY3RvciA9IHRoaXMuZ2V0VGFibGVIZWFkZXJSb3dTZWxlY3RvcigpXG4gICAgdmFyICRoZWFkZXJSb3cgPSAkKCR0YWJsZSkuZmluZChoZWFkZXJSb3dTZWxlY3RvcilcbiAgICBpZiAoJGhlYWRlclJvdy5sZW5ndGggPiAwKSB7XG4gICAgICAkaGVhZGVyUm93LmZpbmQoJ3RkLHRoJykuZWFjaChmdW5jdGlvbiAoaSkge1xuICAgICAgICB2YXIgaGVhZGVyID0gJCh0aGlzKS50ZXh0KCkudHJpbSgpXG4gICAgICAgIGNvbHVtbnNbaGVhZGVyXSA9IHtcbiAgICAgICAgICBpbmRleDogaSArIDFcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbnNcbiAgfSxcbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyIGRmZCA9IGpxdWVyeS5EZWZlcnJlZCgpXG4gICAgdmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuXG4gICAgdmFyIHRhYmxlcyA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRzKHBhcmVudEVsZW1lbnQpXG5cbiAgICB2YXIgcmVzdWx0ID0gW11cbiAgICAkKHRhYmxlcykuZWFjaChmdW5jdGlvbiAoaywgdGFibGUpIHtcbiAgICAgIHZhciBjb2x1bW5zID0gdGhpcy5nZXRUYWJsZUhlYWRlckNvbHVtbnMoJCh0YWJsZSkpXG5cbiAgICAgIHZhciBkYXRhUm93U2VsZWN0b3IgPSB0aGlzLmdldFRhYmxlRGF0YVJvd1NlbGVjdG9yKClcbiAgICAgICQodGFibGUpLmZpbmQoZGF0YVJvd1NlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uIChpLCByb3cpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB7fVxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5leHRyYWN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uc1tjb2x1bW4uaGVhZGVyXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGRhdGFbY29sdW1uLm5hbWVdID0gbnVsbFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIHJvd1RleHQgPSAkKHJvdykuZmluZCgnPjpudGgtY2hpbGQoJyArIGNvbHVtbnNbY29sdW1uLmhlYWRlcl0uaW5kZXggKyAnKScpLnRleHQoKS50cmltKClcbiAgICAgICAgICAgICAgZGF0YVtjb2x1bW4ubmFtZV0gPSByb3dUZXh0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICByZXN1bHQucHVzaChkYXRhKVxuICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0uYmluZCh0aGlzKSlcblxuICAgIGRmZC5yZXNvbHZlKHJlc3VsdClcbiAgICByZXR1cm4gZGZkLnByb21pc2UoKVxuICB9LFxuXG4gIGdldERhdGFDb2x1bW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRhdGFDb2x1bW5zID0gW11cbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICBpZiAoY29sdW1uLmV4dHJhY3QgPT09IHRydWUpIHtcbiAgICAgICAgZGF0YUNvbHVtbnMucHVzaChjb2x1bW4ubmFtZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBkYXRhQ29sdW1uc1xuICB9LFxuXG4gIGdldEZlYXR1cmVzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFsnbXVsdGlwbGUnLCAnY29sdW1ucycsICdkZWxheScsICd0YWJsZURhdGFSb3dTZWxlY3RvcicsICd0YWJsZUhlYWRlclJvd1NlbGVjdG9yJ11cbiAgfSxcblxuICBnZXRJdGVtQ1NTU2VsZWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ3RhYmxlJ1xuICB9LFxuXG4gIGdldFRhYmxlSGVhZGVyUm93U2VsZWN0b3JGcm9tVGFibGVIVE1MOiBmdW5jdGlvbiAoaHRtbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyICQgPSBvcHRpb25zLiQgfHwgdGhpcy4kXG4gICAgdmFyICR0YWJsZSA9ICQoaHRtbClcbiAgICBpZiAoJHRhYmxlLmZpbmQoJ3RoZWFkIHRyOmhhcyh0ZDpub3QoOmVtcHR5KSksIHRoZWFkIHRyOmhhcyh0aDpub3QoOmVtcHR5KSknKS5sZW5ndGgpIHtcbiAgICAgIGlmICgkdGFibGUuZmluZCgndGhlYWQgdHInKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuICd0aGVhZCB0cidcbiAgICAgIH1cdFx0XHRlbHNlIHtcbiAgICAgICAgdmFyICRyb3dzID0gJHRhYmxlLmZpbmQoJ3RoZWFkIHRyJylcblx0XHRcdFx0Ly8gZmlyc3Qgcm93IHdpdGggZGF0YVxuICAgICAgICB2YXIgcm93SW5kZXggPSAkcm93cy5pbmRleCgkcm93cy5maWx0ZXIoJzpoYXModGQ6bm90KDplbXB0eSkpLDpoYXModGg6bm90KDplbXB0eSkpJylbMF0pXG4gICAgICAgIHJldHVybiAndGhlYWQgdHI6bnRoLW9mLXR5cGUoJyArIChyb3dJbmRleCArIDEpICsgJyknXG4gICAgICB9XG4gICAgfVx0XHRlbHNlIGlmICgkdGFibGUuZmluZCgndHIgdGQ6bm90KDplbXB0eSksIHRyIHRoOm5vdCg6ZW1wdHkpJykubGVuZ3RoKSB7XG4gICAgICB2YXIgJHJvd3MgPSAkdGFibGUuZmluZCgndHInKVxuXHRcdFx0Ly8gZmlyc3Qgcm93IHdpdGggZGF0YVxuICAgICAgdmFyIHJvd0luZGV4ID0gJHJvd3MuaW5kZXgoJHJvd3MuZmlsdGVyKCc6aGFzKHRkOm5vdCg6ZW1wdHkpKSw6aGFzKHRoOm5vdCg6ZW1wdHkpKScpWzBdKVxuICAgICAgcmV0dXJuICd0cjpudGgtb2YtdHlwZSgnICsgKHJvd0luZGV4ICsgMSkgKyAnKSdcbiAgICB9XHRcdGVsc2Uge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICB9LFxuXG4gIGdldFRhYmxlRGF0YVJvd1NlbGVjdG9yRnJvbVRhYmxlSFRNTDogZnVuY3Rpb24gKGh0bWwsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciAkID0gb3B0aW9ucy4kIHx8IHRoaXMuJFxuICAgIHZhciAkdGFibGUgPSAkKGh0bWwpXG4gICAgaWYgKCR0YWJsZS5maW5kKCd0aGVhZCB0cjpoYXModGQ6bm90KDplbXB0eSkpLCB0aGVhZCB0cjpoYXModGg6bm90KDplbXB0eSkpJykubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJ3Rib2R5IHRyJ1xuICAgIH1cdFx0ZWxzZSBpZiAoJHRhYmxlLmZpbmQoJ3RyIHRkOm5vdCg6ZW1wdHkpLCB0ciB0aDpub3QoOmVtcHR5KScpLmxlbmd0aCkge1xuICAgICAgdmFyICRyb3dzID0gJHRhYmxlLmZpbmQoJ3RyJylcblx0XHRcdC8vIGZpcnN0IHJvdyB3aXRoIGRhdGFcbiAgICAgIHZhciByb3dJbmRleCA9ICRyb3dzLmluZGV4KCRyb3dzLmZpbHRlcignOmhhcyh0ZDpub3QoOmVtcHR5KSksOmhhcyh0aDpub3QoOmVtcHR5KSknKVswXSlcbiAgICAgIHJldHVybiAndHI6bnRoLW9mLXR5cGUobisnICsgKHJvd0luZGV4ICsgMikgKyAnKSdcbiAgICB9XHRcdGVsc2Uge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICB9LFxuXG4gIGdldFRhYmxlSGVhZGVyUm93U2VsZWN0b3I6IGZ1bmN0aW9uICgpIHtcblx0XHQvLyBoYW5kbGUgbGVnYWN5IHNlbGVjdG9yc1xuICAgIGlmICh0aGlzLnRhYmxlSGVhZGVyUm93U2VsZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuICd0aGVhZCB0cidcbiAgICB9XHRcdGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudGFibGVIZWFkZXJSb3dTZWxlY3RvclxuICAgIH1cbiAgfSxcblxuICBnZXRUYWJsZURhdGFSb3dTZWxlY3RvcjogZnVuY3Rpb24gKCkge1xuXHRcdC8vIGhhbmRsZSBsZWdhY3kgc2VsZWN0b3JzXG4gICAgaWYgKHRoaXMudGFibGVEYXRhUm93U2VsZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuICd0Ym9keSB0cidcbiAgICB9XHRcdGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhUm93U2VsZWN0b3JcbiAgICB9XG4gIH0sXG5cblx0LyoqXG5cdCAqIEV4dHJhY3QgdGFibGUgaGVhZGVyIGNvbHVtbiBpbmZvIGZyb20gaHRtbFxuXHQgKiBAcGFyYW0gaHRtbFxuXHQgKi9cbiAgZ2V0VGFibGVIZWFkZXJDb2x1bW5zRnJvbUhUTUw6IGZ1bmN0aW9uIChoZWFkZXJSb3dTZWxlY3RvciwgaHRtbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyICQgPSBvcHRpb25zLiQgfHwgdGhpcy4kXG4gICAgdmFyICR0YWJsZSA9ICQoaHRtbClcbiAgICB2YXIgJGhlYWRlclJvd0NvbHVtbnMgPSAkdGFibGUuZmluZChoZWFkZXJSb3dTZWxlY3RvcikuZmluZCgndGQsdGgnKVxuXG4gICAgdmFyIGNvbHVtbnMgPSBbXVxuXG4gICAgJGhlYWRlclJvd0NvbHVtbnMuZWFjaChmdW5jdGlvbiAoaSwgY29sdW1uRWwpIHtcbiAgICAgIHZhciBoZWFkZXIgPSAkKGNvbHVtbkVsKS50ZXh0KCkudHJpbSgpXG4gICAgICB2YXIgbmFtZSA9IGhlYWRlclxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDApIHtcbiAgICAgICAgY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICBoZWFkZXI6IGhlYWRlcixcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIGV4dHJhY3Q6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBjb2x1bW5zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RvclRhYmxlXG4iLCJ2YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciBTZWxlY3RvclRleHQgPSB7XG5cbiAgY2FuUmV0dXJuTXVsdGlwbGVSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcblxuICBjYW5IYXZlTG9jYWxDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkNyZWF0ZU5ld0pvYnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgd2lsbFJldHVybkVsZW1lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIF9nZXREYXRhOiBmdW5jdGlvbiAocGFyZW50RWxlbWVudCkge1xuICAgIHZhciAkID0gdGhpcy4kXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG52YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICB2YXIgZGZkID0ganF1ZXJ5LkRlZmVycmVkKClcblxuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRzKHBhcmVudEVsZW1lbnQpXG5cbiAgICB2YXIgcmVzdWx0ID0gW11cbiAgICAkKGVsZW1lbnRzKS5lYWNoKGZ1bmN0aW9uIChrLCBlbGVtZW50KSB7XG4gICAgICB2YXIgZGF0YSA9IHt9XG5cblx0XHRcdC8vIHJlbW92ZSBzY3JpcHQsIHN0eWxlIHRhZyBjb250ZW50cyBmcm9tIHRleHQgcmVzdWx0c1xuICAgICAgdmFyICRlbGVtZW50X2Nsb25lID0gJChlbGVtZW50KS5jbG9uZSgpXG4gICAgICAkZWxlbWVudF9jbG9uZS5maW5kKCdzY3JpcHQsIHN0eWxlJykucmVtb3ZlKClcblx0XHRcdC8vIDxicj4gcmVwbGFjZSBiciB0YWdzIHdpdGggbmV3bGluZXNcbiAgICAgICRlbGVtZW50X2Nsb25lLmZpbmQoJ2JyJykuYWZ0ZXIoJ1xcbicpXG5cbiAgICAgIHZhciB0ZXh0ID0gJGVsZW1lbnRfY2xvbmUudGV4dCgpXG4gICAgICBpZiAodGhpcy5yZWdleCAhPT0gdW5kZWZpbmVkICYmIHRoaXMucmVnZXgubGVuZ3RoKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gdGV4dC5tYXRjaChuZXcgUmVnRXhwKHRoaXMucmVnZXgpKVxuICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgIHRleHQgPSBtYXRjaGVzWzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGF0YVt0aGlzLmlkXSA9IHRleHRcblxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gZmFsc2UgJiYgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICBkYXRhW3RoaXMuaWRdID0gbnVsbFxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9XG5cbiAgICBkZmQucmVzb2x2ZShyZXN1bHQpXG4gICAgcmV0dXJuIGRmZC5wcm9taXNlKClcbiAgfSxcblxuICBnZXREYXRhQ29sdW1uczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbdGhpcy5pZF1cbiAgfSxcblxuICBnZXRGZWF0dXJlczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbJ211bHRpcGxlJywgJ3JlZ2V4JywgJ2RlbGF5J11cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdG9yVGV4dFxuIiwidmFyIFNlbGVjdG9yID0gcmVxdWlyZSgnLi9TZWxlY3RvcicpXG5cbnZhciBTZWxlY3Rvckxpc3QgPSBmdW5jdGlvbiAoc2VsZWN0b3JzLCBvcHRpb25zKSB7XG4gIHZhciAkID0gb3B0aW9ucy4kXG4gIHZhciBkb2N1bWVudCA9IG9wdGlvbnMuZG9jdW1lbnRcbiAgdmFyIHdpbmRvdyA9IG9wdGlvbnMud2luZG93XG4gIC8vIFdlIGRvbid0IHdhbnQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnJCcsIHtcbiAgICB2YWx1ZTogJCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3dpbmRvdycsIHtcbiAgICB2YWx1ZTogd2luZG93LFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZG9jdW1lbnQnLCB7XG4gICAgdmFsdWU6IGRvY3VtZW50LFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pXG4gIGlmICghdGhpcy4kKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcganF1ZXJ5JylcbmlmICghdGhpcy5kb2N1bWVudCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBkb2N1bWVudFwiKVxuaWYoIXRoaXMud2luZG93KXRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgd2luZG93XCIpXG5cbiAgaWYgKHNlbGVjdG9ycyA9PT0gbnVsbCB8fCBzZWxlY3RvcnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLnB1c2goc2VsZWN0b3JzW2ldKVxuICB9XG59XG5cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUgPSBbXVxuXG5TZWxlY3Rvckxpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgaWYgKCF0aGlzLmhhc1NlbGVjdG9yKHNlbGVjdG9yLmlkKSkge1xuICAgIGlmICghKHNlbGVjdG9yIGluc3RhbmNlb2YgU2VsZWN0b3IpKSB7XG52YXIgJCA9IHRoaXMuJFxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxudmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgICBzZWxlY3RvciA9IG5ldyBTZWxlY3RvcihzZWxlY3RvciwgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxuICAgIH1cbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIHNlbGVjdG9yKVxuICB9XG59XG5cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuaGFzU2VsZWN0b3IgPSBmdW5jdGlvbiAoc2VsZWN0b3JJZCkge1xuICBpZiAoc2VsZWN0b3JJZCBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIHNlbGVjdG9ySWQgPSBzZWxlY3RvcklkLmlkXG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodGhpc1tpXS5pZCA9PT0gc2VsZWN0b3JJZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogUmV0dXJucyBhbGwgc2VsZWN0b3JzIG9yIHJlY3Vyc2l2ZWx5IGZpbmQgYW5kIHJldHVybiBhbGwgY2hpbGQgc2VsZWN0b3JzIG9mIGEgcGFyZW50IHNlbGVjdG9yLlxuICogQHBhcmFtIHBhcmVudFNlbGVjdG9ySWRcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS5nZXRBbGxTZWxlY3RvcnMgPSBmdW5jdGlvbiAocGFyZW50U2VsZWN0b3JJZCkge1xuICBpZiAocGFyZW50U2VsZWN0b3JJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHZhciBnZXRBbGxDaGlsZFNlbGVjdG9ycyA9IGZ1bmN0aW9uIChwYXJlbnRTZWxlY3RvcklkLCByZXN1bHRTZWxlY3RvcnMpIHtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICBpZiAoc2VsZWN0b3IuaGFzUGFyZW50U2VsZWN0b3IocGFyZW50U2VsZWN0b3JJZCkpIHtcbiAgICAgICAgaWYgKHJlc3VsdFNlbGVjdG9ycy5pbmRleE9mKHNlbGVjdG9yKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXN1bHRTZWxlY3RvcnMucHVzaChzZWxlY3RvcilcbiAgICAgICAgICBnZXRBbGxDaGlsZFNlbGVjdG9ycyhzZWxlY3Rvci5pZCwgcmVzdWx0U2VsZWN0b3JzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfS5iaW5kKHRoaXMpXG5cbiAgdmFyIHJlc3VsdFNlbGVjdG9ycyA9IFtdXG4gIGdldEFsbENoaWxkU2VsZWN0b3JzKHBhcmVudFNlbGVjdG9ySWQsIHJlc3VsdFNlbGVjdG9ycylcbiAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yc1xufVxuXG4vKipcbiAqIFJldHVybnMgb25seSBzZWxlY3RvcnMgdGhhdCBhcmUgZGlyZWN0bHkgdW5kZXIgYSBwYXJlbnRcbiAqIEBwYXJhbSBwYXJlbnRTZWxlY3RvcklkXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuZ2V0RGlyZWN0Q2hpbGRTZWxlY3RvcnMgPSBmdW5jdGlvbiAocGFyZW50U2VsZWN0b3JJZCkge1xudmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICB2YXIgcmVzdWx0U2VsZWN0b3JzID0gbmV3IFNlbGVjdG9yTGlzdChudWxsLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICBpZiAoc2VsZWN0b3IuaGFzUGFyZW50U2VsZWN0b3IocGFyZW50U2VsZWN0b3JJZCkpIHtcbiAgICAgIHJlc3VsdFNlbGVjdG9ycy5wdXNoKHNlbGVjdG9yKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yc1xufVxuXG5TZWxlY3Rvckxpc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xudmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICB2YXIgcmVzdWx0TGlzdCA9IG5ldyBTZWxlY3Rvckxpc3QobnVsbCwgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgcmVzdWx0TGlzdC5wdXNoKHNlbGVjdG9yKVxuICB9KVxuICByZXR1cm4gcmVzdWx0TGlzdFxufVxuXG5TZWxlY3Rvckxpc3QucHJvdG90eXBlLmZ1bGxDbG9uZSA9IGZ1bmN0aW9uICgpIHtcbnZhciAkID0gdGhpcy4kXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG52YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgdmFyIHJlc3VsdExpc3QgPSBuZXcgU2VsZWN0b3JMaXN0KG51bGwsIHskLCB3aW5kb3csIGRvY3VtZW50fSlcbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgIHJlc3VsdExpc3QucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGVjdG9yKSkpXG4gIH0pXG4gIHJldHVybiByZXN1bHRMaXN0XG59XG5cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmVzdWx0TGlzdCA9IHRoaXMuY2xvbmUoKVxuICBmb3IgKHZhciBpIGluIGFyZ3VtZW50cykge1xuICAgIGFyZ3VtZW50c1tpXS5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgcmVzdWx0TGlzdC5wdXNoKHNlbGVjdG9yKVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHJlc3VsdExpc3Rcbn1cblxuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS5nZXRTZWxlY3RvciA9IGZ1bmN0aW9uIChzZWxlY3RvcklkKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzZWxlY3RvciA9IHRoaXNbaV1cbiAgICBpZiAoc2VsZWN0b3IuaWQgPT09IHNlbGVjdG9ySWQpIHtcbiAgICAgIHJldHVybiBzZWxlY3RvclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIHNlbGVjdG9ycyBpZiB0aGlzIHNlbGVjdG9ycyBpbmNsdWRpbmcgYWxsIHBhcmVudCBzZWxlY3RvcnMgd2l0aGluIHRoaXMgcGFnZVxuICogQFRPRE8gbm90IHVzZWQgYW55IG1vcmUuXG4gKiBAcGFyYW0gc2VsZWN0b3JJZFxuICogQHJldHVybnMgeyp9XG4gKi9cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuZ2V0T25lUGFnZVNlbGVjdG9ycyA9IGZ1bmN0aW9uIChzZWxlY3RvcklkKSB7XG52YXIgJCA9IHRoaXMuJFxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxudmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gIHZhciByZXN1bHRMaXN0ID0gbmV3IFNlbGVjdG9yTGlzdChudWxsLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gIHZhciBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3Ioc2VsZWN0b3JJZClcbiAgcmVzdWx0TGlzdC5wdXNoKHRoaXMuZ2V0U2VsZWN0b3Ioc2VsZWN0b3JJZCkpXG5cblx0Ly8gcmVjdXJzaXZlbHkgZmluZCBhbGwgcGFyZW50IHNlbGVjdG9ycyB0aGF0IGNvdWxkIGxlYWQgdG8gdGhlIHBhZ2Ugd2hlcmUgc2VsZWN0b3JJZCBpcyB1c2VkLlxuICB2YXIgZmluZFBhcmVudFNlbGVjdG9ycyA9IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgIHNlbGVjdG9yLnBhcmVudFNlbGVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJlbnRTZWxlY3RvcklkKSB7XG4gICAgICBpZiAocGFyZW50U2VsZWN0b3JJZCA9PT0gJ19yb290JykgcmV0dXJuXG4gICAgICB2YXIgcGFyZW50U2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKHBhcmVudFNlbGVjdG9ySWQpXG4gICAgICBpZiAocmVzdWx0TGlzdC5pbmRleE9mKHBhcmVudFNlbGVjdG9yKSAhPT0gLTEpIHJldHVyblxuICAgICAgaWYgKHBhcmVudFNlbGVjdG9yLndpbGxSZXR1cm5FbGVtZW50cygpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChwYXJlbnRTZWxlY3RvcilcbiAgICAgICAgZmluZFBhcmVudFNlbGVjdG9ycyhwYXJlbnRTZWxlY3RvcilcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpXG4gIH0uYmluZCh0aGlzKVxuXG4gIGZpbmRQYXJlbnRTZWxlY3RvcnMoc2VsZWN0b3IpXG5cblx0Ly8gYWRkIGFsbCBjaGlsZCBzZWxlY3RvcnNcbiAgcmVzdWx0TGlzdCA9IHJlc3VsdExpc3QuY29uY2F0KHRoaXMuZ2V0U2luZ2xlUGFnZUFsbENoaWxkU2VsZWN0b3JzKHNlbGVjdG9yLmlkKSlcbiAgcmV0dXJuIHJlc3VsdExpc3Rcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBjaGlsZCBzZWxlY3RvcnMgb2YgYSBzZWxlY3RvciB3aGljaCBjYW4gYmUgdXNlZCB3aXRoaW4gb25lIHBhZ2UuXG4gKiBAcGFyYW0gcGFyZW50U2VsZWN0b3JJZFxuICovXG5TZWxlY3Rvckxpc3QucHJvdG90eXBlLmdldFNpbmdsZVBhZ2VBbGxDaGlsZFNlbGVjdG9ycyA9IGZ1bmN0aW9uIChwYXJlbnRTZWxlY3RvcklkKSB7XG52YXIgJCA9IHRoaXMuJFxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxudmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gIHZhciByZXN1bHRMaXN0ID0gbmV3IFNlbGVjdG9yTGlzdChudWxsLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gIHZhciBhZGRDaGlsZFNlbGVjdG9ycyA9IGZ1bmN0aW9uIChwYXJlbnRTZWxlY3Rvcikge1xuICAgIGlmIChwYXJlbnRTZWxlY3Rvci53aWxsUmV0dXJuRWxlbWVudHMoKSkge1xuICAgICAgdmFyIGNoaWxkU2VsZWN0b3JzID0gdGhpcy5nZXREaXJlY3RDaGlsZFNlbGVjdG9ycyhwYXJlbnRTZWxlY3Rvci5pZClcbiAgICAgIGNoaWxkU2VsZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkU2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKHJlc3VsdExpc3QuaW5kZXhPZihjaGlsZFNlbGVjdG9yKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXN1bHRMaXN0LnB1c2goY2hpbGRTZWxlY3RvcilcbiAgICAgICAgICBhZGRDaGlsZFNlbGVjdG9ycyhjaGlsZFNlbGVjdG9yKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfS5iaW5kKHRoaXMpXG5cbiAgdmFyIHBhcmVudFNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihwYXJlbnRTZWxlY3RvcklkKVxuICBhZGRDaGlsZFNlbGVjdG9ycyhwYXJlbnRTZWxlY3RvcilcbiAgcmV0dXJuIHJlc3VsdExpc3Rcbn1cblxuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS53aWxsUmV0dXJuTXVsdGlwbGVSZWNvcmRzID0gZnVuY3Rpb24gKHNlbGVjdG9ySWQpIHtcblx0Ly8gaGFuZGxlIHJldXFlc3RlZCBzZWxlY3RvclxuICB2YXIgc2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKHNlbGVjdG9ySWQpXG4gIGlmIChzZWxlY3Rvci53aWxsUmV0dXJuTXVsdGlwbGVSZWNvcmRzKCkgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cblx0Ly8gaGFuZGxlIGFsbCBpdHMgY2hpbGQgc2VsZWN0b3JzXG4gIHZhciBjaGlsZFNlbGVjdG9ycyA9IHRoaXMuZ2V0QWxsU2VsZWN0b3JzKHNlbGVjdG9ySWQpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRTZWxlY3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2VsZWN0b3IgPSBjaGlsZFNlbGVjdG9yc1tpXVxuICAgIGlmIChzZWxlY3Rvci53aWxsUmV0dXJuTXVsdGlwbGVSZWNvcmRzKCkgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogV2hlbiBzZXJpYWxpemluZyB0byBKU09OIGNvbnZlcnQgdG8gYW4gYXJyYXlcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZXN1bHQgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgcmVzdWx0LnB1c2goc2VsZWN0b3IpXG4gIH0pXG4gIHJldHVybiByZXN1bHRcbn1cblxuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS5nZXRTZWxlY3RvckJ5SWQgPSBmdW5jdGlvbiAoc2VsZWN0b3JJZCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2VsZWN0b3IgPSB0aGlzW2ldXG4gICAgaWYgKHNlbGVjdG9yLmlkID09PSBzZWxlY3RvcklkKSB7XG4gICAgICByZXR1cm4gc2VsZWN0b3JcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiByZXR1cm5zIGNzcyBzZWxlY3RvciBmb3IgYSBnaXZlbiBlbGVtZW50LiBjc3Mgc2VsZWN0b3IgaW5jbHVkZXMgYWxsIHBhcmVudCBlbGVtZW50IHNlbGVjdG9yc1xuICogQHBhcmFtIHNlbGVjdG9ySWRcbiAqIEBwYXJhbSBwYXJlbnRTZWxlY3RvcklkcyBhcnJheSBvZiBwYXJlbnQgc2VsZWN0b3IgaWRzIGZyb20gZGV2dG9vbHMgQnJlYWRjdW1iXG4gKiBAcmV0dXJucyBzdHJpbmdcbiAqL1xuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS5nZXRDU1NTZWxlY3RvcldpdGhpbk9uZVBhZ2UgPSBmdW5jdGlvbiAoc2VsZWN0b3JJZCwgcGFyZW50U2VsZWN0b3JJZHMpIHtcbiAgdmFyIENTU1NlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihzZWxlY3RvcklkKS5zZWxlY3RvclxuICB2YXIgcGFyZW50Q1NTU2VsZWN0b3IgPSB0aGlzLmdldFBhcmVudENTU1NlbGVjdG9yV2l0aGluT25lUGFnZShwYXJlbnRTZWxlY3RvcklkcylcbiAgQ1NTU2VsZWN0b3IgPSBwYXJlbnRDU1NTZWxlY3RvciArIENTU1NlbGVjdG9yXG5cbiAgcmV0dXJuIENTU1NlbGVjdG9yXG59XG5cbi8qKlxuICogcmV0dXJucyBjc3Mgc2VsZWN0b3IgZm9yIHBhcmVudCBzZWxlY3RvcnMgdGhhdCBhcmUgd2l0aGluIG9uZSBwYWdlXG4gKiBAcGFyYW0gcGFyZW50U2VsZWN0b3JJZHMgYXJyYXkgb2YgcGFyZW50IHNlbGVjdG9yIGlkcyBmcm9tIGRldnRvb2xzIEJyZWFkY3VtYlxuICogQHJldHVybnMgc3RyaW5nXG4gKi9cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuZ2V0UGFyZW50Q1NTU2VsZWN0b3JXaXRoaW5PbmVQYWdlID0gZnVuY3Rpb24gKHBhcmVudFNlbGVjdG9ySWRzKSB7XG4gIHZhciBDU1NTZWxlY3RvciA9ICcnXG5cbiAgZm9yICh2YXIgaSA9IHBhcmVudFNlbGVjdG9ySWRzLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICB2YXIgcGFyZW50U2VsZWN0b3JJZCA9IHBhcmVudFNlbGVjdG9ySWRzW2ldXG4gICAgdmFyIHBhcmVudFNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihwYXJlbnRTZWxlY3RvcklkKVxuICAgIGlmIChwYXJlbnRTZWxlY3Rvci53aWxsUmV0dXJuRWxlbWVudHMoKSkge1xuICAgICAgQ1NTU2VsZWN0b3IgPSBwYXJlbnRTZWxlY3Rvci5zZWxlY3RvciArICcgJyArIENTU1NlbGVjdG9yXG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIENTU1NlbGVjdG9yXG59XG5cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuaGFzUmVjdXJzaXZlRWxlbWVudFNlbGVjdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFJlY3Vyc2lvbkZvdW5kID0gZmFsc2VcblxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHRvcFNlbGVjdG9yKSB7XG4gICAgdmFyIHZpc2l0ZWRTZWxlY3RvcnMgPSBbXVxuXG4gICAgdmFyIGNoZWNrUmVjdXJzaW9uID0gZnVuY3Rpb24gKHBhcmVudFNlbGVjdG9yKSB7XG5cdFx0XHQvLyBhbHJlYWR5IHZpc2l0ZWRcbiAgICAgIGlmICh2aXNpdGVkU2VsZWN0b3JzLmluZGV4T2YocGFyZW50U2VsZWN0b3IpICE9PSAtMSkge1xuICAgICAgICBSZWN1cnNpb25Gb3VuZCA9IHRydWVcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnRTZWxlY3Rvci53aWxsUmV0dXJuRWxlbWVudHMoKSkge1xuICAgICAgICB2aXNpdGVkU2VsZWN0b3JzLnB1c2gocGFyZW50U2VsZWN0b3IpXG4gICAgICAgIHZhciBjaGlsZFNlbGVjdG9ycyA9IHRoaXMuZ2V0RGlyZWN0Q2hpbGRTZWxlY3RvcnMocGFyZW50U2VsZWN0b3IuaWQpXG4gICAgICAgIGNoaWxkU2VsZWN0b3JzLmZvckVhY2goY2hlY2tSZWN1cnNpb24pXG4gICAgICAgIHZpc2l0ZWRTZWxlY3RvcnMucG9wKClcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcylcblxuICAgIGNoZWNrUmVjdXJzaW9uKHRvcFNlbGVjdG9yKVxuICB9LmJpbmQodGhpcykpXG5cbiAgcmV0dXJuIFJlY3Vyc2lvbkZvdW5kXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0b3JMaXN0XG4iLCJ2YXIgU2VsZWN0b3JFbGVtZW50ID0gcmVxdWlyZSgnLi9TZWxlY3Rvci9TZWxlY3RvckVsZW1lbnQnKVxudmFyIFNlbGVjdG9yRWxlbWVudEF0dHJpYnV0ZSA9IHJlcXVpcmUoJy4vU2VsZWN0b3IvU2VsZWN0b3JFbGVtZW50QXR0cmlidXRlJylcbnZhciBTZWxlY3RvckVsZW1lbnRDbGljayA9IHJlcXVpcmUoJy4vU2VsZWN0b3IvU2VsZWN0b3JFbGVtZW50Q2xpY2snKVxudmFyIFNlbGVjdG9yRWxlbWVudFNjcm9sbCA9IHJlcXVpcmUoJy4vU2VsZWN0b3IvU2VsZWN0b3JFbGVtZW50U2Nyb2xsJylcbnZhciBTZWxlY3Rvckdyb3VwID0gcmVxdWlyZSgnLi9TZWxlY3Rvci9TZWxlY3Rvckdyb3VwJylcbnZhciBTZWxlY3RvckhUTUwgPSByZXF1aXJlKCcuL1NlbGVjdG9yL1NlbGVjdG9ySFRNTCcpXG52YXIgU2VsZWN0b3JJbWFnZSA9IHJlcXVpcmUoJy4vU2VsZWN0b3IvU2VsZWN0b3JJbWFnZScpXG52YXIgU2VsZWN0b3JMaW5rID0gcmVxdWlyZSgnLi9TZWxlY3Rvci9TZWxlY3RvckxpbmsnKVxudmFyIFNlbGVjdG9yUG9wdXBMaW5rID0gcmVxdWlyZSgnLi9TZWxlY3Rvci9TZWxlY3RvclBvcHVwTGluaycpXG52YXIgU2VsZWN0b3JUYWJsZSA9IHJlcXVpcmUoJy4vU2VsZWN0b3IvU2VsZWN0b3JUYWJsZScpXG52YXIgU2VsZWN0b3JUZXh0ID0gcmVxdWlyZSgnLi9TZWxlY3Rvci9TZWxlY3RvclRleHQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU2VsZWN0b3JFbGVtZW50LFxuICBTZWxlY3RvckVsZW1lbnRBdHRyaWJ1dGUsXG4gIFNlbGVjdG9yRWxlbWVudENsaWNrLFxuICBTZWxlY3RvckVsZW1lbnRTY3JvbGwsXG4gIFNlbGVjdG9yR3JvdXAsXG4gIFNlbGVjdG9ySFRNTCxcbiAgU2VsZWN0b3JJbWFnZSxcbiAgU2VsZWN0b3JMaW5rLFxuICBTZWxlY3RvclBvcHVwTGluayxcbiAgU2VsZWN0b3JUYWJsZSxcbiAgU2VsZWN0b3JUZXh0XG59XG4iLCJ2YXIgU2VsZWN0b3IgPSByZXF1aXJlKCcuL1NlbGVjdG9yJylcbnZhciBTZWxlY3Rvckxpc3QgPSByZXF1aXJlKCcuL1NlbGVjdG9yTGlzdCcpXG52YXIgU2l0ZW1hcCA9IGZ1bmN0aW9uIChzaXRlbWFwT2JqLCBvcHRpb25zKSB7XG4gIHZhciAkID0gb3B0aW9ucy4kXG4gIHZhciBkb2N1bWVudCA9IG9wdGlvbnMuZG9jdW1lbnRcbiAgdmFyIHdpbmRvdyA9IG9wdGlvbnMud2luZG93XG4gIC8vIFdlIGRvbid0IHdhbnQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnJCcsIHtcbiAgICB2YWx1ZTogJCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3dpbmRvdycsIHtcbiAgICB2YWx1ZTogd2luZG93LFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZG9jdW1lbnQnLCB7XG4gICAgdmFsdWU6IGRvY3VtZW50LFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pXG4gIGlmICghdGhpcy4kKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcganF1ZXJ5JylcbmlmICghdGhpcy5kb2N1bWVudCkge1xuICBjb25zb2xlLmVycm9yKChuZXcgRXJyb3IoKSkuc3RhY2spXG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBkb2N1bWVudFwiKVxufVxuaWYoIXRoaXMud2luZG93KXRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgd2luZG93XCIpXG4gIHRoaXMuaW5pdERhdGEoc2l0ZW1hcE9iailcbn1cblxuU2l0ZW1hcC5wcm90b3R5cGUgPSB7XG5cbiAgaW5pdERhdGE6IGZ1bmN0aW9uIChzaXRlbWFwT2JqKSB7XG4gICAgY29uc29sZS5sb2codGhpcylcbiAgICBmb3IgKHZhciBrZXkgaW4gc2l0ZW1hcE9iaikge1xuICAgICAgY29uc29sZS5sb2coa2V5KVxuICAgICAgdGhpc1trZXldID0gc2l0ZW1hcE9ialtrZXldXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKHRoaXMpXG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICB2YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgdmFyIHNlbGVjdG9ycyA9IHRoaXMuc2VsZWN0b3JzXG4gICAgdGhpcy5zZWxlY3RvcnMgPSBuZXcgU2VsZWN0b3JMaXN0KHRoaXMuc2VsZWN0b3JzLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gIH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgYWxsIHNlbGVjdG9ycyBvciByZWN1cnNpdmVseSBmaW5kIGFuZCByZXR1cm4gYWxsIGNoaWxkIHNlbGVjdG9ycyBvZiBhIHBhcmVudCBzZWxlY3Rvci5cblx0ICogQHBhcmFtIHBhcmVudFNlbGVjdG9ySWRcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cbiAgZ2V0QWxsU2VsZWN0b3JzOiBmdW5jdGlvbiAocGFyZW50U2VsZWN0b3JJZCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycy5nZXRBbGxTZWxlY3RvcnMocGFyZW50U2VsZWN0b3JJZClcbiAgfSxcblxuXHQvKipcblx0ICogUmV0dXJucyBvbmx5IHNlbGVjdG9ycyB0aGF0IGFyZSBkaXJlY3RseSB1bmRlciBhIHBhcmVudFxuXHQgKiBAcGFyYW0gcGFyZW50U2VsZWN0b3JJZFxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuICBnZXREaXJlY3RDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKHBhcmVudFNlbGVjdG9ySWQpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RvcnMuZ2V0RGlyZWN0Q2hpbGRTZWxlY3RvcnMocGFyZW50U2VsZWN0b3JJZClcbiAgfSxcblxuXHQvKipcblx0ICogUmV0dXJucyBhbGwgc2VsZWN0b3IgaWQgcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuICBnZXRTZWxlY3RvcklkczogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpZHMgPSBbJ19yb290J11cbiAgICB0aGlzLnNlbGVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgaWRzLnB1c2goc2VsZWN0b3IuaWQpXG4gICAgfSlcbiAgICByZXR1cm4gaWRzXG4gIH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgb25seSBzZWxlY3RvciBpZHMgd2hpY2ggY2FuIGhhdmUgY2hpbGQgc2VsZWN0b3JzXG5cdCAqIEByZXR1cm5zIHtBcnJheX1cblx0ICovXG4gIGdldFBvc3NpYmxlUGFyZW50U2VsZWN0b3JJZHM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaWRzID0gWydfcm9vdCddXG4gICAgdGhpcy5zZWxlY3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmIChzZWxlY3Rvci5jYW5IYXZlQ2hpbGRTZWxlY3RvcnMoKSkge1xuICAgICAgICBpZHMucHVzaChzZWxlY3Rvci5pZClcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBpZHNcbiAgfSxcblxuICBnZXRTdGFydFVybHM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhcnRVcmxzID0gdGhpcy5zdGFydFVybFxuXHRcdC8vIHNpbmdsZSBzdGFydCB1cmxcbiAgICBpZiAodGhpcy5zdGFydFVybC5wdXNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0YXJ0VXJscyA9IFtzdGFydFVybHNdXG4gICAgfVxuXG4gICAgdmFyIHVybHMgPSBbXVxuICAgIHN0YXJ0VXJscy5mb3JFYWNoKGZ1bmN0aW9uIChzdGFydFVybCkge1xuXHRcdFx0Ly8gemVybyBwYWRkaW5nIGhlbHBlclxuICAgICAgdmFyIGxwYWQgPSBmdW5jdGlvbiAoc3RyLCBsZW5ndGgpIHtcbiAgICAgICAgd2hpbGUgKHN0ci5sZW5ndGggPCBsZW5ndGgpIHsgc3RyID0gJzAnICsgc3RyIH1cbiAgICAgICAgcmV0dXJuIHN0clxuICAgICAgfVxuXG4gICAgICB2YXIgcmUgPSAvXiguKj8pXFxbKFxcZCspXFwtKFxcZCspKDooXFxkKykpP1xcXSguKikkL1xuICAgICAgdmFyIG1hdGNoZXMgPSBzdGFydFVybC5tYXRjaChyZSlcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHZhciBzdGFydFN0ciA9IG1hdGNoZXNbMl1cbiAgICAgICAgdmFyIGVuZFN0ciA9IG1hdGNoZXNbM11cbiAgICAgICAgdmFyIHN0YXJ0ID0gcGFyc2VJbnQoc3RhcnRTdHIpXG4gICAgICAgIHZhciBlbmQgPSBwYXJzZUludChlbmRTdHIpXG4gICAgICAgIHZhciBpbmNyZW1lbnRhbCA9IDFcbiAgICAgICAgY29uc29sZS5sb2cobWF0Y2hlc1s1XSlcbiAgICAgICAgaWYgKG1hdGNoZXNbNV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluY3JlbWVudGFsID0gcGFyc2VJbnQobWF0Y2hlc1s1XSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpICs9IGluY3JlbWVudGFsKSB7XG5cdFx0XHRcdFx0Ly8gd2l0aCB6ZXJvIHBhZGRpbmdcbiAgICAgICAgICBpZiAoc3RhcnRTdHIubGVuZ3RoID09PSBlbmRTdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICB1cmxzLnB1c2gobWF0Y2hlc1sxXSArIGxwYWQoaS50b1N0cmluZygpLCBzdGFydFN0ci5sZW5ndGgpICsgbWF0Y2hlc1s2XSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJscy5wdXNoKG1hdGNoZXNbMV0gKyBpICsgbWF0Y2hlc1s2XSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybHNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybHMucHVzaChzdGFydFVybClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHVybHNcbiAgfSxcblxuICB1cGRhdGVTZWxlY3RvcjogZnVuY3Rpb24gKHNlbGVjdG9yLCBzZWxlY3RvckRhdGEpIHtcblx0XHQvLyBzZWxlY3RvciBpcyB1bmRlZmluZWQgd2hlbiBjcmVhdGluZyBhIG5ldyBvbmVcbiAgICBpZiAoc2VsZWN0b3IgPT09IHVuZGVmaW5lZCkge1xudmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICAgICAgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3Ioc2VsZWN0b3JEYXRhLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gICAgfVxuXG5cdFx0Ly8gdXBkYXRlIGNoaWxkIHNlbGVjdG9yc1xuICAgIGlmIChzZWxlY3Rvci5pZCAhPT0gdW5kZWZpbmVkICYmIHNlbGVjdG9yLmlkICE9PSBzZWxlY3RvckRhdGEuaWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRTZWxlY3Rvcikge1xuICAgICAgICBjdXJyZW50U2VsZWN0b3IucmVuYW1lUGFyZW50U2VsZWN0b3Ioc2VsZWN0b3IuaWQsIHNlbGVjdG9yRGF0YS5pZClcbiAgICAgIH0pXG5cblx0XHRcdC8vIHVwZGF0ZSBjeWNsaWMgc2VsZWN0b3JcbiAgICAgIHZhciBwb3MgPSBzZWxlY3RvckRhdGEucGFyZW50U2VsZWN0b3JzLmluZGV4T2Yoc2VsZWN0b3IuaWQpXG4gICAgICBpZiAocG9zICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RvckRhdGEucGFyZW50U2VsZWN0b3JzLnNwbGljZShwb3MsIDEsIHNlbGVjdG9yRGF0YS5pZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3Rvci51cGRhdGVEYXRhKHNlbGVjdG9yRGF0YSlcblxuICAgIGlmICh0aGlzLmdldFNlbGVjdG9ySWRzKCkuaW5kZXhPZihzZWxlY3Rvci5pZCkgPT09IC0xKSB7XG4gICAgICB0aGlzLnNlbGVjdG9ycy5wdXNoKHNlbGVjdG9yKVxuICAgIH1cbiAgfSxcbiAgZGVsZXRlU2VsZWN0b3I6IGZ1bmN0aW9uIChzZWxlY3RvclRvRGVsZXRlKSB7XG4gICAgdGhpcy5zZWxlY3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmIChzZWxlY3Rvci5oYXNQYXJlbnRTZWxlY3RvcihzZWxlY3RvclRvRGVsZXRlLmlkKSkge1xuICAgICAgICBzZWxlY3Rvci5yZW1vdmVQYXJlbnRTZWxlY3RvcihzZWxlY3RvclRvRGVsZXRlLmlkKVxuICAgICAgICBpZiAoc2VsZWN0b3IucGFyZW50U2VsZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlU2VsZWN0b3Ioc2VsZWN0b3IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICBmb3IgKHZhciBpIGluIHRoaXMuc2VsZWN0b3JzKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RvcnNbaV0uaWQgPT09IHNlbGVjdG9yVG9EZWxldGUuaWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RvcnMuc3BsaWNlKGksIDEpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9LFxuICBnZXREYXRhVGFibGVJZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9pZC5yZXBsYWNlKC9cXC4vZywgJ18nKVxuICB9LFxuICBleHBvcnRTaXRlbWFwOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNpdGVtYXBPYmogPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMpKVxuICAgIGRlbGV0ZSBzaXRlbWFwT2JqLl9yZXZcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2l0ZW1hcE9iailcbiAgfSxcbiAgaW1wb3J0U2l0ZW1hcDogZnVuY3Rpb24gKHNpdGVtYXBKU09OKSB7XG4gICAgdmFyIHNpdGVtYXBPYmogPSBKU09OLnBhcnNlKHNpdGVtYXBKU09OKVxuICAgIHRoaXMuaW5pdERhdGEoc2l0ZW1hcE9iailcbiAgfSxcblx0Ly8gcmV0dXJuIGEgbGlzdCBvZiBjb2x1bW5zIHRoYW4gY2FuIGJlIGV4cG9ydGVkXG4gIGdldERhdGFDb2x1bW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvbHVtbnMgPSBbXVxuICAgIHRoaXMuc2VsZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICBjb2x1bW5zID0gY29sdW1ucy5jb25jYXQoc2VsZWN0b3IuZ2V0RGF0YUNvbHVtbnMoKSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIGNvbHVtbnNcbiAgfSxcbiAgZ2V0RGF0YUV4cG9ydENzdkJsb2I6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLmdldERhdGFDb2x1bW5zKCksXG4gICAgICBkZWxpbWl0ZXIgPSAnOycsXG4gICAgICBuZXdsaW5lID0gJ1xcbicsXG4gICAgICBjc3ZEYXRhID0gWydcXHVmZWZmJ10gLy8gdXRmLTggYm9tIGNoYXJcblxuXHRcdC8vIGhlYWRlclxuICAgIGNzdkRhdGEucHVzaChjb2x1bW5zLmpvaW4oZGVsaW1pdGVyKSArIG5ld2xpbmUpXG5cblx0XHQvLyBkYXRhXG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgIHZhciByb3dEYXRhID0gW11cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHZhciBjZWxsRGF0YSA9IHJvd1tjb2x1bW5dXG4gICAgICAgIGlmIChjZWxsRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2VsbERhdGEgPSAnJ1xuICAgICAgICB9XHRcdFx0XHRlbHNlIGlmICh0eXBlb2YgY2VsbERhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY2VsbERhdGEgPSBKU09OLnN0cmluZ2lmeShjZWxsRGF0YSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJvd0RhdGEucHVzaCgnXCInICsgY2VsbERhdGEucmVwbGFjZSgvXCIvZywgJ1wiXCInKS50cmltKCkgKyAnXCInKVxuICAgICAgfSlcbiAgICAgIGNzdkRhdGEucHVzaChyb3dEYXRhLmpvaW4oZGVsaW1pdGVyKSArIG5ld2xpbmUpXG4gICAgfSlcblxuICAgIHJldHVybiBuZXcgd2luZG93LkJsb2IoY3N2RGF0YSwge3R5cGU6ICd0ZXh0L2Nzdid9KVxuICB9LFxuICBnZXRTZWxlY3RvckJ5SWQ6IGZ1bmN0aW9uIChzZWxlY3RvcklkKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JzLmdldFNlbGVjdG9yQnlJZChzZWxlY3RvcklkKVxuICB9LFxuXHQvKipcblx0ICogQ3JlYXRlIGZ1bGwgY2xvbmUgb2Ygc2l0ZW1hcFxuXHQgKiBAcmV0dXJucyB7U2l0ZW1hcH1cblx0ICovXG4gIGNsb25lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgdmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgdmFyIGNsb25lZEpTT04gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMpKVxuICAgIHZhciBzaXRlbWFwID0gbmV3IFNpdGVtYXAoY2xvbmVkSlNPTiwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICAgIHJldHVybiBzaXRlbWFwXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaXRlbWFwXG4iLCJ2YXIgU2l0ZW1hcCA9IHJlcXVpcmUoJy4vU2l0ZW1hcCcpXG5cbnZhciBTdG9yZSA9IGZ1bmN0aW9uIChjb25maWcsIG9wdGlvbnMpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgdGhpcy4kID0gb3B0aW9ucy4kXG50aGlzLmRvY3VtZW50ID0gb3B0aW9ucy5kb2N1bWVudFxudGhpcy53aW5kb3cgPSBvcHRpb25zLndpbmRvd1xuICBpZiAoIXRoaXMuJCkgdGhyb3cgbmV3IEVycm9yKCdqcXVlcnkgcmVxdWlyZWQnKVxuaWYgKCF0aGlzLmRvY3VtZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGRvY3VtZW50XCIpXG5pZighdGhpcy53aW5kb3cpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB3aW5kb3dcIilcbiAgICAvLyBjb25maWd1cmUgY291Y2hkYlxuICB0aGlzLnNpdGVtYXBEYiA9IG5ldyBQb3VjaERCKHRoaXMuY29uZmlnLnNpdGVtYXBEYilcbn1cbnZhciBTdG9yZVNjcmFwZVJlc3VsdFdyaXRlciA9IGZ1bmN0aW9uIChkYikge1xuICB0aGlzLmRiID0gZGJcbn1cblxuU3RvcmVTY3JhcGVSZXN1bHRXcml0ZXIucHJvdG90eXBlID0ge1xuICB3cml0ZURvY3M6IGZ1bmN0aW9uIChkb2NzLCBjYWxsYmFjaykge1xuICAgIGlmIChkb2NzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY2FsbGJhY2soKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRiLmJ1bGtEb2NzKHtkb2NzOiBkb2NzfSwgZnVuY3Rpb24gKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKGVyciAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB3aGlsZSBwZXJzaXN0aW5nIHNjcmFwZWQgZGF0YSB0byBkYicsIGVycilcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjaygpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5TdG9yZS5wcm90b3R5cGUgPSB7XG5cbiAgc2FuaXRpemVTaXRlbWFwRGF0YURiTmFtZTogZnVuY3Rpb24gKGRiTmFtZSkge1xuICAgIHJldHVybiAnc2l0ZW1hcC1kYXRhLScgKyBkYk5hbWUucmVwbGFjZSgvW15hLXowLTlfXFwkXFwoXFwpXFwrXFwtL10vZ2ksICdfJylcbiAgfSxcbiAgZ2V0U2l0ZW1hcERhdGFEYkxvY2F0aW9uOiBmdW5jdGlvbiAoc2l0ZW1hcElkKSB7XG4gICAgdmFyIGRiTmFtZSA9IHRoaXMuc2FuaXRpemVTaXRlbWFwRGF0YURiTmFtZShzaXRlbWFwSWQpXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFEYiArIGRiTmFtZVxuICB9LFxuICBnZXRTaXRlbWFwRGF0YURiOiBmdW5jdGlvbiAoc2l0ZW1hcElkKSB7XG4gICAgdmFyIGRiTG9jYXRpb24gPSB0aGlzLmdldFNpdGVtYXBEYXRhRGJMb2NhdGlvbihzaXRlbWFwSWQpXG4gICAgcmV0dXJuIG5ldyBQb3VjaERCKGRiTG9jYXRpb24pXG4gIH0sXG5cblx0LyoqXG5cdCAqIGNyZWF0ZXMgb3IgY2xlYXJzIGEgc2l0ZW1hcCBkYlxuXHQgKiBAcGFyYW0ge3R5cGV9IHNpdGVtYXBJZFxuXHQgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuXHQgKi9cbiAgaW5pdFNpdGVtYXBEYXRhRGI6IGZ1bmN0aW9uIChzaXRlbWFwSWQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGRiTG9jYXRpb24gPSB0aGlzLmdldFNpdGVtYXBEYXRhRGJMb2NhdGlvbihzaXRlbWFwSWQpXG4gICAgdmFyIHN0b3JlID0gdGhpc1xuXG4gICAgUG91Y2hEQi5kZXN0cm95KGRiTG9jYXRpb24sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBkYiA9IHN0b3JlLmdldFNpdGVtYXBEYXRhRGIoc2l0ZW1hcElkKVxuICAgICAgdmFyIGRiV3JpdGVyID0gbmV3IFN0b3JlU2NyYXBlUmVzdWx0V3JpdGVyKGRiKVxuICAgICAgY2FsbGJhY2soZGJXcml0ZXIpXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVTaXRlbWFwOiBmdW5jdGlvbiAoc2l0ZW1hcCwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2l0ZW1hcEpzb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNpdGVtYXApKVxuXG4gICAgaWYgKCFzaXRlbWFwLl9pZCkge1xuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBzYXZlIHNpdGVtYXAgd2l0aG91dCBhbiBpZCcsIHNpdGVtYXApXG4gICAgfVxuXG4gICAgdGhpcy5zaXRlbWFwRGIucHV0KHNpdGVtYXBKc29uLCBmdW5jdGlvbiAoc2l0ZW1hcCwgZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gQFRPRE8gaGFuZGxlIGVyclxuICAgICAgc2l0ZW1hcC5fcmV2ID0gcmVzcG9uc2UucmV2XG4gICAgICBjYWxsYmFjayhzaXRlbWFwKVxuICAgIH0uYmluZCh0aGlzLCBzaXRlbWFwKSlcbiAgfSwgXG4gIHNhdmVTaXRlbWFwOiBmdW5jdGlvbiAoc2l0ZW1hcCwgY2FsbGJhY2spIHtcbiAgICAgICAgLy8gQFRPRE8gcmVtb3ZlXG4gICAgdGhpcy5jcmVhdGVTaXRlbWFwKHNpdGVtYXAsIGNhbGxiYWNrKVxuICB9LFxuICBkZWxldGVTaXRlbWFwOiBmdW5jdGlvbiAoc2l0ZW1hcCwgY2FsbGJhY2spIHtcbiAgICBzaXRlbWFwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzaXRlbWFwKSlcblxuICAgIHRoaXMuc2l0ZW1hcERiLnJlbW92ZShzaXRlbWFwLCBmdW5jdGlvbiAoZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gQFRPRE8gaGFuZGxlIGVyclxuXG5cdFx0XHQvLyBkZWxldGUgc2l0ZW1hcCBkYXRhIGRiXG4gICAgICB2YXIgZGJMb2NhdGlvbiA9IHRoaXMuZ2V0U2l0ZW1hcERhdGFEYkxvY2F0aW9uKHNpdGVtYXAuX2lkKVxuICAgICAgUG91Y2hEQi5kZXN0cm95KGRiTG9jYXRpb24sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfSlcbiAgICB9LmJpbmQodGhpcykpXG4gIH0sXG4gIGdldEFsbFNpdGVtYXBzOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxudmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgdGhpcy5zaXRlbWFwRGIuYWxsRG9jcyh7aW5jbHVkZV9kb2NzOiB0cnVlfSwgZnVuY3Rpb24gKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgIHZhciBzaXRlbWFwcyA9IFtdXG4gICAgICBmb3IgKHZhciBpIGluIHJlc3BvbnNlLnJvd3MpIHtcbiAgICAgICAgdmFyIHNpdGVtYXAgPSByZXNwb25zZS5yb3dzW2ldLmRvY1xuICAgICAgICBpZiAoIWNocm9tZS5leHRlbnNpb24pIHtcbiAgICAgICAgICBzaXRlbWFwID0gbmV3IFNpdGVtYXAoc2l0ZW1hcCwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICAgICAgICB9XG5cbiAgICAgICAgc2l0ZW1hcHMucHVzaChzaXRlbWFwKVxuICAgICAgfVxuICAgICAgY2FsbGJhY2soc2l0ZW1hcHMpXG4gICAgfSlcbiAgfSxcblxuICBnZXRTaXRlbWFwRGF0YTogZnVuY3Rpb24gKHNpdGVtYXAsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGRiID0gdGhpcy5nZXRTaXRlbWFwRGF0YURiKHNpdGVtYXAuX2lkKVxuICAgIGRiLmFsbERvY3Moe2luY2x1ZGVfZG9jczogdHJ1ZX0sIGZ1bmN0aW9uIChlcnIsIHJlc3BvbnNlKSB7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gW11cbiAgICAgIGZvciAodmFyIGkgaW4gcmVzcG9uc2Uucm93cykge1xuICAgICAgICB2YXIgZG9jID0gcmVzcG9uc2Uucm93c1tpXS5kb2NcbiAgICAgICAgcmVzcG9uc2VEYXRhLnB1c2goZG9jKVxuICAgICAgfVxuICAgICAgY2FsbGJhY2socmVzcG9uc2VEYXRhKVxuICAgIH0pXG4gIH0sXG5cdC8vIEBUT0RPIG1ha2UgdGhpcyBjYWxsIGxpZ2h0ZXJcbiAgc2l0ZW1hcEV4aXN0czogZnVuY3Rpb24gKHNpdGVtYXBJZCwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmdldEFsbFNpdGVtYXBzKGZ1bmN0aW9uIChzaXRlbWFwcykge1xuICAgICAgdmFyIHNpdGVtYXBGb3VuZCA9IGZhbHNlXG4gICAgICBmb3IgKHZhciBpIGluIHNpdGVtYXBzKSB7XG4gICAgICAgIGlmIChzaXRlbWFwc1tpXS5faWQgPT09IHNpdGVtYXBJZCkge1xuICAgICAgICAgIHNpdGVtYXBGb3VuZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FsbGJhY2soc2l0ZW1hcEZvdW5kKVxuICAgIH0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTdG9yZVxuIiwidmFyIENzc1NlbGVjdG9yID0gcmVxdWlyZSgnY3NzLXNlbGVjdG9yJykuQ3NzU2VsZWN0b3Jcbi8vIFRPRE8gZ2V0IHJpZCBvZiBqcXVlcnlcblxuLyoqXG4gKiBPbmx5IEVsZW1lbnRzIHVuaXF1ZSB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgYXJyYXlcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBVbmlxdWVFbGVtZW50TGlzdCAoY2xpY2tFbGVtZW50VW5pcXVlbmVzc1R5cGUsIG9wdGlvbnMpIHtcbiAgdmFyICQgPSBvcHRpb25zLiRcbiAgdmFyIHdpbmRvdyA9IG9wdGlvbnMud2luZG93XG4gIHZhciBkb2N1bWVudCA9IG9wdGlvbnMuZG9jdW1lbnRcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJyQnLCB7XG4gICAgdmFsdWU6ICQsXG4gICAgZW51bWVyYWJsZTogZmFsc2VcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd3aW5kb3cnLCB7XG4gICAgdmFsdWU6IHdpbmRvdyxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2RvY3VtZW50Jywge1xuICAgIHZhbHVlOiBkb2N1bWVudCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9KVxuICBpZiAoIXRoaXMuJCkgdGhyb3cgbmV3IEVycm9yKCdqcXVlcnkgcmVxdWlyZWQnKVxuICBpZiAoIXRoaXMuZG9jdW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGRvY3VtZW50XCIpXG4gIH1cbiAgaWYoIXRoaXMud2luZG93KSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHdpbmRvd1wiKVxuICAgIHRoaXMuY2xpY2tFbGVtZW50VW5pcXVlbmVzc1R5cGUgPSBjbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZVxuICAgIHRoaXMuYWRkZWRFbGVtZW50cyA9IHt9XG4gIH1cblxuVW5pcXVlRWxlbWVudExpc3QucHJvdG90eXBlID0gW11cblxuVW5pcXVlRWxlbWVudExpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICB2YXIgJCA9IHRoaXMuJFxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxudmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gIGlmICh0aGlzLmlzQWRkZWQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICB2YXIgZWxlbWVudFVuaXF1ZUlkID0gdGhpcy5nZXRFbGVtZW50VW5pcXVlSWQoZWxlbWVudClcbiAgICB0aGlzLmFkZGVkRWxlbWVudHNbZWxlbWVudFVuaXF1ZUlkXSA9IHRydWVcbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsICQoZWxlbWVudCkuY2xvbmUodHJ1ZSlbMF0pXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5VbmlxdWVFbGVtZW50TGlzdC5wcm90b3R5cGUuZ2V0RWxlbWVudFVuaXF1ZUlkID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgdmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICBpZiAodGhpcy5jbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZSA9PT0gJ3VuaXF1ZVRleHQnKSB7XG4gICAgdmFyIGVsZW1lbnRUZXh0ID0gJChlbGVtZW50KS50ZXh0KCkudHJpbSgpXG4gICAgcmV0dXJuIGVsZW1lbnRUZXh0XG4gIH0gZWxzZSBpZiAodGhpcy5jbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZSA9PT0gJ3VuaXF1ZUhUTUxUZXh0Jykge1xuICAgIHZhciBlbGVtZW50SFRNTCA9ICQoXCI8ZGl2IGNsYXNzPSctd2ViLXNjcmFwZXItc2hvdWxkLW5vdC1iZS12aXNpYmxlJz5cIikuYXBwZW5kKCQoZWxlbWVudCkuZXEoMCkuY2xvbmUoKSkuaHRtbCgpXG4gICAgcmV0dXJuIGVsZW1lbnRIVE1MXG4gIH0gZWxzZSBpZiAodGhpcy5jbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZSA9PT0gJ3VuaXF1ZUhUTUwnKSB7XG5cdFx0Ly8gZ2V0IGVsZW1lbnQgd2l0aG91dCB0ZXh0XG4gICAgdmFyICRlbGVtZW50ID0gJChlbGVtZW50KS5lcSgwKS5jbG9uZSgpXG5cbiAgICB2YXIgcmVtb3ZlVGV4dCA9IGZ1bmN0aW9uICgkZWxlbWVudCkge1xuICAgICAgJGVsZW1lbnQuY29udGVudHMoKVxuXHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubm9kZVR5cGUgIT09IDMpIHtcbiAgICByZW1vdmVUZXh0KCQodGhpcykpXG4gIH1cbiAgcmV0dXJuIHRoaXMubm9kZVR5cGUgPT0gMyAvLyBOb2RlLlRFWFRfTk9ERVxufSkucmVtb3ZlKClcbiAgICB9XG4gICAgcmVtb3ZlVGV4dCgkZWxlbWVudClcblxuICAgIHZhciBlbGVtZW50SFRNTCA9ICQoXCI8ZGl2IGNsYXNzPSctd2ViLXNjcmFwZXItc2hvdWxkLW5vdC1iZS12aXNpYmxlJz5cIikuYXBwZW5kKCRlbGVtZW50KS5odG1sKClcbiAgICByZXR1cm4gZWxlbWVudEhUTUxcbiAgfSBlbHNlIGlmICh0aGlzLmNsaWNrRWxlbWVudFVuaXF1ZW5lc3NUeXBlID09PSAndW5pcXVlQ1NTU2VsZWN0b3InKSB7XG4gICAgdmFyIGNzID0gbmV3IENzc1NlbGVjdG9yKHtcbiAgICAgIGVuYWJsZVNtYXJ0VGFibGVTZWxlY3RvcjogZmFsc2UsXG4gICAgICBwYXJlbnQ6ICQoJ2JvZHknKVswXSxcbiAgICAgIGVuYWJsZVJlc3VsdFN0cmlwcGluZzogZmFsc2VcbiAgICB9KVxuICAgIHZhciBDU1NTZWxlY3RvciA9IGNzLmdldENzc1NlbGVjdG9yKFtlbGVtZW50XSlcbiAgICByZXR1cm4gQ1NTU2VsZWN0b3JcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyAnSW52YWxpZCBjbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZSAnICsgdGhpcy5jbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVW5pcXVlRWxlbWVudExpc3RcblxuVW5pcXVlRWxlbWVudExpc3QucHJvdG90eXBlLmlzQWRkZWQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICB2YXIgZWxlbWVudFVuaXF1ZUlkID0gdGhpcy5nZXRFbGVtZW50VW5pcXVlSWQoZWxlbWVudClcbiAgdmFyIGlzQWRkZWQgPSBlbGVtZW50VW5pcXVlSWQgaW4gdGhpcy5hZGRlZEVsZW1lbnRzXG4gIHJldHVybiBpc0FkZGVkXG59XG4iLCIvLyBCYXNpY2FsbHkgcnVucyBKU0RPTSBpbiBhIHdlYndvcmtlclxuY29uc3Qgd29yayA9IHJlcXVpcmUoJ3dlYndvcmtpZnknKVxuY29uc3QganNkb21Ccm93c2VyTG9hZGVyID0gcmVxdWlyZSgnLi9KU0RPTUJyb3dzZXJMb2FkZXInKVxudmFyIGpxdWVyeURlZmVycmVkID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciB3aGVuQ2FsbFNlcXVlbnRpYWxseSA9IHJlcXVpcmUoJy4uL2Fzc2V0cy9qcXVlcnkud2hlbmNhbGxzZXF1ZW50aWFsbHknKVxuXG5jb25zdCBXZWJKU0RPTUJyb3dzZXIgPSBmdW5jdGlvbiAob3B0aW9ucywgbW9yZU9wdGlvbnMpIHtcbiAgdGhpcy5wYWdlTG9hZERlbGF5ID0gb3B0aW9ucy5wYWdlTG9hZERlbGF5XG4gIGNvbnN0IHByb21pc2VzID0ge31cbiAgdGhpcy5wcm9taXNlcyA9IHByb21pc2VzXG5cbiAgdGhpcy53b3JrZXIgPSB3b3JrKGpzZG9tQnJvd3NlckxvYWRlcilcblxuICB0aGlzLndvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgY29uc3QgZGF0YSA9IGV2LmRhdGFcbiAgICBpZiAoIWRhdGEuVVVJRCkge1xuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZGF0YS5lcnIpXG4gICAgfVxuICAgIGlmIChkYXRhLlVVSUQgJiYgIXByb21pc2VzW2RhdGEuVVVJRF0pIHtcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKCdNaXNzaW5nIFVVSUQnLCBkYXRhLlVVSUQpXG4gICAgfVxuICAgIGlmIChkYXRhLmVycikge1xuICAgICAgY29uc29sZS5lcnJvcihkYXRhLmVycilcbiAgICAgIHByb21pc2VzW2RhdGEuVVVJRF0ucmVqZWN0KG5ldyBFcnJvcihkYXRhLmVycikpXG4gICAgICBkZWxldGUgcHJvbWlzZXNbZGF0YS5VVUlEXVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHByb21pc2VzW2RhdGEuVVVJRF0ucmVzb2x2ZShkYXRhLmluZm8pXG4gICAgZGVsZXRlIHByb21pc2VzW2RhdGEuVVVJRF1cbiAgfSlcbiAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgIHRvcGljOiAnaW5pdCcsXG4gICAgVVVJRDogJ2luaXQnLFxuICAgIG9wdGlvbnNcbiAgfSlcbiAgcHJvbWlzZXMuaW5pdCA9IHtcbiAgICByZXNvbHZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zb2xlLmxvZygnc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQnKVxuICAgIH0sXG4gICAgcmVqZWN0OiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICB9XG4gIH1cbn1cblxuV2ViSlNET01Ccm93c2VyLnByb3RvdHlwZSA9IHtcbiAgbG9hZFVybDogZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBVVUlEID0gcGFyc2VJbnQoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApLnRvU3RyaW5nKClcbiAgICBsZXQgcmVzLCByZWpcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcmVzID0gcmVzb2x2ZVxuICAgICAgcmVqID0gcmVqZWN0XG4gICAgfSlcbiAgICB0aGlzLnByb21pc2VzW1VVSURdID0ge3Jlc29sdmU6IHJlcywgcmVqZWN0OiByZWp9XG4gICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgdG9waWM6ICdsb2FkVXJsJyxcbiAgICAgIHVybCxcbiAgICAgIFVVSURcbiAgICB9KVxuICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoaW5mbykge1xuICAgICAgY2FsbGJhY2soKVxuICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtjYWxsYmFjayhlcnIpfSlcbiAgfSxcbiAgc2F2ZUltYWdlczogZnVuY3Rpb24gKHJlY29yZCwgbmFtaW5nRnVuY3Rpb24pIHtcbiAgICB2YXIgZGVmZXJyZWRSZXNwb25zZSA9IGpxdWVyeURlZmVycmVkLkRlZmVycmVkKClcbiAgICB2YXIgZGVmZXJyZWRJbWFnZVN0b3JlQ2FsbHMgPSBbXVxuICAgIHZhciBwcmVmaXhMZW5ndGggPSAnX2ltYWdlQmFzZTY0LScubGVuZ3RoXG4gICAgZm9yICh2YXIgYXR0ciBpbiByZWNvcmQpIHtcbiAgICAgIGlmIChhdHRyLnN1YnN0cigwLCBwcmVmaXhMZW5ndGgpID09PSAnX2ltYWdlQmFzZTY0LScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb3dubG9hZGluZyBpbWFnZXMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKVxuICAgICAgfVxuICAgIH1cbiAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkZWZlcnJlZEltYWdlU3RvcmVDYWxscykuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZS5wcm9taXNlKClcbiAgfSxcbiAgZmV0Y2hEYXRhOiBmdW5jdGlvbiAodXJsLCBzaXRlbWFwLCBwYXJlbnRTZWxlY3RvcklkLCBjYWxsYmFjaywgc2NvcGUpIHtcbiAgICBjb25zdCBVVUlEID0gcGFyc2VJbnQoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApLnRvU3RyaW5nKClcbiAgICBsZXQgcmVzLCByZWpcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcmVzID0gcmVzb2x2ZVxuICAgICAgcmVqID0gcmVqZWN0XG4gICAgfSlcbiAgICB0aGlzLnByb21pc2VzW1VVSURdID0ge3Jlc29sdmU6IHJlcywgcmVqZWN0OiByZWp9XG4gICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgdG9waWM6ICdmZXRjaERhdGEnLFxuICAgICAgdXJsLFxuICAgICAgVVVJRCxcbiAgICAgIHNpdGVtYXA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2l0ZW1hcCkpLFxuICAgICAgcGFyZW50U2VsZWN0b3JJZFxuICAgIH0pXG4gICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHNjb3BlLCBudWxsLCBpbmZvLnJlc3VsdHMpXG4gICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKVxuICAgIH0pXG4gIH0sXG4gIGNsb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgY29uc29sZS5sb2coJ2Nsb3Npbmcgd2VianNkb20gYnJvd3NlcicpXG4gICAgaWYgKHRoaXMud29ya2VyKSB0aGlzLndvcmtlci50ZXJtaW5hdGUoKVxuICAgIHRoaXMud29ya2VyID0gbnVsbFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gV2ViSlNET01Ccm93c2VyXG4iLCJ2YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciBCYWNrZ3JvdW5kU2NyaXB0ID0gcmVxdWlyZSgnLi9CYWNrZ3JvdW5kU2NyaXB0Jylcbi8qKlxuICogQHBhcmFtIGxvY2F0aW9uXHRjb25maWd1cmUgZnJvbSB3aGVyZSB0aGUgY29udGVudCBzY3JpcHQgaXMgYmVpbmcgYWNjZXNzZWQgKENvbnRlbnRTY3JpcHQsIEJhY2tncm91bmRQYWdlLCBEZXZUb29scylcbiAqIEByZXR1cm5zIEJhY2tncm91bmRTY3JpcHRcbiAqL1xudmFyIGdldEJhY2tncm91bmRTY3JpcHQgPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgLy8gSGFuZGxlIGNhbGxzIGZyb20gZGlmZmVyZW50IHBsYWNlc1xuICBpZiAobG9jYXRpb24gPT09ICdCYWNrZ3JvdW5kU2NyaXB0Jykge1xuICAgIHJldHVybiBCYWNrZ3JvdW5kU2NyaXB0XG4gIH0gZWxzZSBpZiAobG9jYXRpb24gPT09ICdEZXZUb29scycgfHwgbG9jYXRpb24gPT09ICdDb250ZW50U2NyaXB0Jykge1xuICAgIC8vIGlmIGNhbGxlZCB3aXRoaW4gYmFja2dyb3VuZCBzY3JpcHQgcHJveHkgY2FsbHMgdG8gY29udGVudCBzY3JpcHRcbiAgICB2YXIgYmFja2dyb3VuZFNjcmlwdCA9IHt9XG5cbiAgICBPYmplY3Qua2V5cyhCYWNrZ3JvdW5kU2NyaXB0KS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICBpZiAodHlwZW9mIEJhY2tncm91bmRTY3JpcHRbYXR0cl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYmFja2dyb3VuZFNjcmlwdFthdHRyXSA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgICAgICAgdmFyIHJlcVRvQmFja2dyb3VuZFNjcmlwdCA9IHtcbiAgICAgICAgICAgIGJhY2tncm91bmRTY3JpcHRDYWxsOiB0cnVlLFxuICAgICAgICAgICAgZm46IGF0dHIsXG4gICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBqcXVlcnkuRGVmZXJyZWQoKVxuXG4gICAgICAgICAgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UocmVxVG9CYWNrZ3JvdW5kU2NyaXB0LCBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGRlZmVycmVkUmVzcG9uc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFja2dyb3VuZFNjcmlwdFthdHRyXSA9IEJhY2tncm91bmRTY3JpcHRbYXR0cl1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGJhY2tncm91bmRTY3JpcHRcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgQmFja2dyb3VuZFNjcmlwdCBpbml0aWFsaXphdGlvbiAtICcgKyBsb2NhdGlvbilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJhY2tncm91bmRTY3JpcHRcbiIsInZhciBnZXRCYWNrZ3JvdW5kU2NyaXB0ID0gcmVxdWlyZSgnLi9nZXRCYWNrZ3JvdW5kU2NyaXB0JylcbnZhciBDb250ZW50U2NyaXB0ID0gcmVxdWlyZSgnLi9Db250ZW50U2NyaXB0Jylcbi8qKlxuICpcbiAqIEBwYXJhbSBsb2NhdGlvblx0Y29uZmlndXJlIGZyb20gd2hlcmUgdGhlIGNvbnRlbnQgc2NyaXB0IGlzIGJlaW5nIGFjY2Vzc2VkIChDb250ZW50U2NyaXB0LCBCYWNrZ3JvdW5kUGFnZSwgRGV2VG9vbHMpXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMgQ29udGVudFNjcmlwdFxuICovXG52YXIgZ2V0Q29udGVudFNjcmlwdCA9IGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICB2YXIgY29udGVudFNjcmlwdFxuXG4gIC8vIEhhbmRsZSBjYWxscyBmcm9tIGRpZmZlcmVudCBwbGFjZXNcbiAgaWYgKGxvY2F0aW9uID09PSAnQ29udGVudFNjcmlwdCcpIHtcbiAgICBjb250ZW50U2NyaXB0ID0gQ29udGVudFNjcmlwdFxuICAgIGNvbnRlbnRTY3JpcHQuYmFja2dyb3VuZFNjcmlwdCA9IGdldEJhY2tncm91bmRTY3JpcHQoJ0NvbnRlbnRTY3JpcHQnKVxuICAgIHJldHVybiBjb250ZW50U2NyaXB0XG4gIH0gZWxzZSBpZiAobG9jYXRpb24gPT09ICdCYWNrZ3JvdW5kU2NyaXB0JyB8fCBsb2NhdGlvbiA9PT0gJ0RldlRvb2xzJykge1xuICAgIHZhciBiYWNrZ3JvdW5kU2NyaXB0ID0gZ2V0QmFja2dyb3VuZFNjcmlwdChsb2NhdGlvbilcblxuICAgIC8vIGlmIGNhbGxlZCB3aXRoaW4gYmFja2dyb3VuZCBzY3JpcHQgcHJveHkgY2FsbHMgdG8gY29udGVudCBzY3JpcHRcbiAgICBjb250ZW50U2NyaXB0ID0ge31cbiAgICBPYmplY3Qua2V5cyhDb250ZW50U2NyaXB0KS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICBpZiAodHlwZW9mIENvbnRlbnRTY3JpcHRbYXR0cl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29udGVudFNjcmlwdFthdHRyXSA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgICAgICAgdmFyIHJlcVRvQ29udGVudFNjcmlwdCA9IHtcbiAgICAgICAgICAgIGNvbnRlbnRTY3JpcHRDYWxsOiB0cnVlLFxuICAgICAgICAgICAgZm46IGF0dHIsXG4gICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGJhY2tncm91bmRTY3JpcHQuZXhlY3V0ZUNvbnRlbnRTY3JpcHQocmVxVG9Db250ZW50U2NyaXB0KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZW50U2NyaXB0W2F0dHJdID0gQ29udGVudFNjcmlwdFthdHRyXVxuICAgICAgfVxuICAgIH0pXG4gICAgY29udGVudFNjcmlwdC5iYWNrZ3JvdW5kU2NyaXB0ID0gYmFja2dyb3VuZFNjcmlwdFxuICAgIHJldHVybiBjb250ZW50U2NyaXB0XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIENvbnRlbnRTY3JpcHQgaW5pdGlhbGl6YXRpb24gLSAnICsgbG9jYXRpb24pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRDb250ZW50U2NyaXB0XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhdG9iID0gcmVxdWlyZSgnLi9saWIvYXRvYicpO1xudmFyIGJ0b2EgPSByZXF1aXJlKCcuL2xpYi9idG9hJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhdG9iOiBhdG9iLFxuICBidG9hOiBidG9hXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIGF0b2IoKSBhY2NvcmRpbmcgdG8gdGhlIEhUTUwgc3BlYywgZXhjZXB0IHRoYXQgaW5zdGVhZCBvZlxuICogdGhyb3dpbmcgSU5WQUxJRF9DSEFSQUNURVJfRVJSIHdlIHJldHVybiBudWxsLlxuICovXG5mdW5jdGlvbiBhdG9iKGlucHV0KSB7XG4gIC8vIFdlYklETCByZXF1aXJlcyBET01TdHJpbmdzIHRvIGp1c3QgYmUgY29udmVydGVkIHVzaW5nIEVDTUFTY3JpcHRcbiAgLy8gVG9TdHJpbmcsIHdoaWNoIGluIG91ciBjYXNlIGFtb3VudHMgdG8gY2FsbGluZyBTdHJpbmcoKS5cbiAgaW5wdXQgPSBTdHJpbmcoaW5wdXQpO1xuICAvLyBcIlJlbW92ZSBhbGwgc3BhY2UgY2hhcmFjdGVycyBmcm9tIGlucHV0LlwiXG4gIGlucHV0ID0gaW5wdXQucmVwbGFjZSgvWyBcXHRcXG5cXGZcXHJdL2csICcnKTtcbiAgLy8gXCJJZiB0aGUgbGVuZ3RoIG9mIGlucHV0IGRpdmlkZXMgYnkgNCBsZWF2aW5nIG5vIHJlbWFpbmRlciwgdGhlbjogaWZcbiAgLy8gaW5wdXQgZW5kcyB3aXRoIG9uZSBvciB0d28gVSswMDNEIEVRVUFMUyBTSUdOICg9KSBjaGFyYWN0ZXJzLCByZW1vdmVcbiAgLy8gdGhlbSBmcm9tIGlucHV0LlwiXG4gIGlmIChpbnB1dC5sZW5ndGggJSA0ID09IDAgJiYgLz09PyQvLnRlc3QoaW5wdXQpKSB7XG4gICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC89PT8kLywgJycpO1xuICB9XG4gIC8vIFwiSWYgdGhlIGxlbmd0aCBvZiBpbnB1dCBkaXZpZGVzIGJ5IDQgbGVhdmluZyBhIHJlbWFpbmRlciBvZiAxLCB0aHJvdyBhblxuICAvLyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy5cIlxuICAvL1xuICAvLyBcIklmIGlucHV0IGNvbnRhaW5zIGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGluIHRoZSBmb2xsb3dpbmcgbGlzdCBvZlxuICAvLyBjaGFyYWN0ZXJzIGFuZCBjaGFyYWN0ZXIgcmFuZ2VzLCB0aHJvdyBhbiBJTlZBTElEX0NIQVJBQ1RFUl9FUlJcbiAgLy8gZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwczpcbiAgLy9cbiAgLy8gVSswMDJCIFBMVVMgU0lHTiAoKylcbiAgLy8gVSswMDJGIFNPTElEVVMgKC8pXG4gIC8vIFUrMDAzMCBESUdJVCBaRVJPICgwKSB0byBVKzAwMzkgRElHSVQgTklORSAoOSlcbiAgLy8gVSswMDQxIExBVElOIENBUElUQUwgTEVUVEVSIEEgdG8gVSswMDVBIExBVElOIENBUElUQUwgTEVUVEVSIFpcbiAgLy8gVSswMDYxIExBVElOIFNNQUxMIExFVFRFUiBBIHRvIFUrMDA3QSBMQVRJTiBTTUFMTCBMRVRURVIgWlwiXG4gIGlmIChpbnB1dC5sZW5ndGggJSA0ID09IDEgfHwgIS9eWysvMC05QS1aYS16XSokLy50ZXN0KGlucHV0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIFwiTGV0IG91dHB1dCBiZSBhIHN0cmluZywgaW5pdGlhbGx5IGVtcHR5LlwiXG4gIHZhciBvdXRwdXQgPSAnJztcbiAgLy8gXCJMZXQgYnVmZmVyIGJlIGEgYnVmZmVyIHRoYXQgY2FuIGhhdmUgYml0cyBhcHBlbmRlZCB0byBpdCwgaW5pdGlhbGx5XG4gIC8vIGVtcHR5LlwiXG4gIC8vXG4gIC8vIFdlIGFwcGVuZCBiaXRzIHZpYSBsZWZ0LXNoaWZ0IGFuZCBvci4gIGFjY3VtdWxhdGVkQml0cyBpcyB1c2VkIHRvIHRyYWNrXG4gIC8vIHdoZW4gd2UndmUgZ290dGVuIHRvIDI0IGJpdHMuXG4gIHZhciBidWZmZXIgPSAwO1xuICB2YXIgYWNjdW11bGF0ZWRCaXRzID0gMDtcbiAgLy8gXCJXaGlsZSBwb3NpdGlvbiBkb2VzIG5vdCBwb2ludCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHJ1biB0aGVzZVxuICAvLyBzdWJzdGVwczpcIlxuICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gXCJGaW5kIHRoZSBjaGFyYWN0ZXIgcG9pbnRlZCB0byBieSBwb3NpdGlvbiBpbiB0aGUgZmlyc3QgY29sdW1uIG9mXG4gICAgLy8gdGhlIGZvbGxvd2luZyB0YWJsZS4gTGV0IG4gYmUgdGhlIG51bWJlciBnaXZlbiBpbiB0aGUgc2Vjb25kIGNlbGwgb2ZcbiAgICAvLyB0aGUgc2FtZSByb3cuXCJcbiAgICAvL1xuICAgIC8vIFwiQXBwZW5kIHRvIGJ1ZmZlciB0aGUgc2l4IGJpdHMgY29ycmVzcG9uZGluZyB0byBudW1iZXIsIG1vc3RcbiAgICAvLyBzaWduaWZpY2FudCBiaXQgZmlyc3QuXCJcbiAgICAvL1xuICAgIC8vIGF0b2JMb29rdXAoKSBpbXBsZW1lbnRzIHRoZSB0YWJsZSBmcm9tIHRoZSBzcGVjLlxuICAgIGJ1ZmZlciA8PD0gNjtcbiAgICBidWZmZXIgfD0gYXRvYkxvb2t1cChpbnB1dFtpXSk7XG4gICAgLy8gXCJJZiBidWZmZXIgaGFzIGFjY3VtdWxhdGVkIDI0IGJpdHMsIGludGVycHJldCB0aGVtIGFzIHRocmVlIDgtYml0XG4gICAgLy8gYmlnLWVuZGlhbiBudW1iZXJzLiBBcHBlbmQgdGhlIHRocmVlIGNoYXJhY3RlcnMgd2l0aCBjb2RlIHBvaW50c1xuICAgIC8vIGVxdWFsIHRvIHRob3NlIG51bWJlcnMgdG8gb3V0cHV0LCBpbiB0aGUgc2FtZSBvcmRlciwgYW5kIHRoZW4gZW1wdHlcbiAgICAvLyBidWZmZXIuXCJcbiAgICBhY2N1bXVsYXRlZEJpdHMgKz0gNjtcbiAgICBpZiAoYWNjdW11bGF0ZWRCaXRzID09IDI0KSB7XG4gICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYnVmZmVyICYgMHhmZjAwMDApID4+IDE2KTtcbiAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChidWZmZXIgJiAweGZmMDApID4+IDgpO1xuICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmZmVyICYgMHhmZik7XG4gICAgICBidWZmZXIgPSBhY2N1bXVsYXRlZEJpdHMgPSAwO1xuICAgIH1cbiAgICAvLyBcIkFkdmFuY2UgcG9zaXRpb24gYnkgb25lIGNoYXJhY3Rlci5cIlxuICB9XG4gIC8vIFwiSWYgYnVmZmVyIGlzIG5vdCBlbXB0eSwgaXQgY29udGFpbnMgZWl0aGVyIDEyIG9yIDE4IGJpdHMuIElmIGl0XG4gIC8vIGNvbnRhaW5zIDEyIGJpdHMsIGRpc2NhcmQgdGhlIGxhc3QgZm91ciBhbmQgaW50ZXJwcmV0IHRoZSByZW1haW5pbmdcbiAgLy8gZWlnaHQgYXMgYW4gOC1iaXQgYmlnLWVuZGlhbiBudW1iZXIuIElmIGl0IGNvbnRhaW5zIDE4IGJpdHMsIGRpc2NhcmQgdGhlXG4gIC8vIGxhc3QgdHdvIGFuZCBpbnRlcnByZXQgdGhlIHJlbWFpbmluZyAxNiBhcyB0d28gOC1iaXQgYmlnLWVuZGlhbiBudW1iZXJzLlxuICAvLyBBcHBlbmQgdGhlIG9uZSBvciB0d28gY2hhcmFjdGVycyB3aXRoIGNvZGUgcG9pbnRzIGVxdWFsIHRvIHRob3NlIG9uZSBvclxuICAvLyB0d28gbnVtYmVycyB0byBvdXRwdXQsIGluIHRoZSBzYW1lIG9yZGVyLlwiXG4gIGlmIChhY2N1bXVsYXRlZEJpdHMgPT0gMTIpIHtcbiAgICBidWZmZXIgPj49IDQ7XG4gICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmZmVyKTtcbiAgfSBlbHNlIGlmIChhY2N1bXVsYXRlZEJpdHMgPT0gMTgpIHtcbiAgICBidWZmZXIgPj49IDI7XG4gICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGJ1ZmZlciAmIDB4ZmYwMCkgPj4gOCk7XG4gICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmZmVyICYgMHhmZik7XG4gIH1cbiAgLy8gXCJSZXR1cm4gb3V0cHV0LlwiXG4gIHJldHVybiBvdXRwdXQ7XG59XG4vKipcbiAqIEEgbG9va3VwIHRhYmxlIGZvciBhdG9iKCksIHdoaWNoIGNvbnZlcnRzIGFuIEFTQ0lJIGNoYXJhY3RlciB0byB0aGVcbiAqIGNvcnJlc3BvbmRpbmcgc2l4LWJpdCBudW1iZXIuXG4gKi9cbmZ1bmN0aW9uIGF0b2JMb29rdXAoY2hyKSB7XG4gIGlmICgvW0EtWl0vLnRlc3QoY2hyKSkge1xuICAgIHJldHVybiBjaHIuY2hhckNvZGVBdCgwKSAtICdBJy5jaGFyQ29kZUF0KDApO1xuICB9XG4gIGlmICgvW2Etel0vLnRlc3QoY2hyKSkge1xuICAgIHJldHVybiBjaHIuY2hhckNvZGVBdCgwKSAtICdhJy5jaGFyQ29kZUF0KDApICsgMjY7XG4gIH1cbiAgaWYgKC9bMC05XS8udGVzdChjaHIpKSB7XG4gICAgcmV0dXJuIGNoci5jaGFyQ29kZUF0KDApIC0gJzAnLmNoYXJDb2RlQXQoMCkgKyA1MjtcbiAgfVxuICBpZiAoY2hyID09ICcrJykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuICBpZiAoY2hyID09ICcvJykge1xuICAgIHJldHVybiA2MztcbiAgfVxuICAvLyBUaHJvdyBleGNlcHRpb247IHNob3VsZCBub3QgYmUgaGl0IGluIHRlc3RzXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXRvYjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBidG9hKCkgYXMgZGVmaW5lZCBieSB0aGUgSFRNTDUgc3BlYywgd2hpY2ggbW9zdGx5IGp1c3QgcmVmZXJlbmNlcyBSRkM0NjQ4LlxuICovXG5mdW5jdGlvbiBidG9hKHMpIHtcbiAgdmFyIGk7XG4gIC8vIFN0cmluZyBjb252ZXJzaW9uIGFzIHJlcXVpcmVkIGJ5IFdlYklETC5cbiAgcyA9IFN0cmluZyhzKTtcbiAgLy8gXCJUaGUgYnRvYSgpIG1ldGhvZCBtdXN0IHRocm93IGFuIElOVkFMSURfQ0hBUkFDVEVSX0VSUiBleGNlcHRpb24gaWYgdGhlXG4gIC8vIG1ldGhvZCdzIGZpcnN0IGFyZ3VtZW50IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXIgd2hvc2UgY29kZSBwb2ludCBpc1xuICAvLyBncmVhdGVyIHRoYW4gVSswMEZGLlwiXG4gIGZvciAoaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSA+IDI1NSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIHZhciBvdXQgPSAnJztcbiAgZm9yIChpID0gMDsgaSA8IHMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICB2YXIgZ3JvdXBzT2ZTaXggPSBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICBncm91cHNPZlNpeFswXSA9IHMuY2hhckNvZGVBdChpKSA+PiAyO1xuICAgIGdyb3Vwc09mU2l4WzFdID0gKHMuY2hhckNvZGVBdChpKSAmIDB4MDMpIDw8IDQ7XG4gICAgaWYgKHMubGVuZ3RoID4gaSArIDEpIHtcbiAgICAgIGdyb3Vwc09mU2l4WzFdIHw9IHMuY2hhckNvZGVBdChpICsgMSkgPj4gNDtcbiAgICAgIGdyb3Vwc09mU2l4WzJdID0gKHMuY2hhckNvZGVBdChpICsgMSkgJiAweDBmKSA8PCAyO1xuICAgIH1cbiAgICBpZiAocy5sZW5ndGggPiBpICsgMikge1xuICAgICAgZ3JvdXBzT2ZTaXhbMl0gfD0gcy5jaGFyQ29kZUF0KGkgKyAyKSA+PiA2O1xuICAgICAgZ3JvdXBzT2ZTaXhbM10gPSBzLmNoYXJDb2RlQXQoaSArIDIpICYgMHgzZjtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cHNPZlNpeC5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKHR5cGVvZiBncm91cHNPZlNpeFtqXSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBvdXQgKz0gJz0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9IGJ0b2FMb29rdXAoZ3JvdXBzT2ZTaXhbal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIExvb2t1cCB0YWJsZSBmb3IgYnRvYSgpLCB3aGljaCBjb252ZXJ0cyBhIHNpeC1iaXQgbnVtYmVyIGludG8gdGhlXG4gKiBjb3JyZXNwb25kaW5nIEFTQ0lJIGNoYXJhY3Rlci5cbiAqL1xuZnVuY3Rpb24gYnRvYUxvb2t1cChpZHgpIHtcbiAgaWYgKGlkeCA8IDI2KSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoaWR4ICsgJ0EnLmNoYXJDb2RlQXQoMCkpO1xuICB9XG4gIGlmIChpZHggPCA1Mikge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGlkeCAtIDI2ICsgJ2EnLmNoYXJDb2RlQXQoMCkpO1xuICB9XG4gIGlmIChpZHggPCA2Mikge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGlkeCAtIDUyICsgJzAnLmNoYXJDb2RlQXQoMCkpO1xuICB9XG4gIGlmIChpZHggPT0gNjIpIHtcbiAgICByZXR1cm4gJysnO1xuICB9XG4gIGlmIChpZHggPT0gNjMpIHtcbiAgICByZXR1cm4gJy8nO1xuICB9XG4gIC8vIFRocm93IElOVkFMSURfQ0hBUkFDVEVSX0VSUiBleGNlcHRpb24gaGVyZSAtLSB3b24ndCBiZSBoaXQgaW4gdGhlIHRlc3RzLlxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ0b2E7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhY29ybiA9IHJlcXVpcmUoJ2Fjb3JuJyk7XG52YXIgd2FsayA9IHJlcXVpcmUoJ2Fjb3JuL2Rpc3Qvd2FsaycpO1xuXG5mdW5jdGlvbiBpc1Njb3BlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRXhwcmVzc2lvbicgfHwgbm9kZS50eXBlID09PSAnRnVuY3Rpb25EZWNsYXJhdGlvbicgfHwgbm9kZS50eXBlID09PSAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nIHx8IG5vZGUudHlwZSA9PT0gJ1Byb2dyYW0nO1xufVxuZnVuY3Rpb24gaXNCbG9ja1Njb3BlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50JyB8fCBpc1Njb3BlKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBkZWNsYXJlc0FyZ3VtZW50cyhub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdGdW5jdGlvbkV4cHJlc3Npb24nIHx8IG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nO1xufVxuXG5mdW5jdGlvbiBkZWNsYXJlc1RoaXMobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnRnVuY3Rpb25FeHByZXNzaW9uJyB8fCBub2RlLnR5cGUgPT09ICdGdW5jdGlvbkRlY2xhcmF0aW9uJztcbn1cblxuZnVuY3Rpb24gcmVhbGx5UGFyc2Uoc291cmNlKSB7XG4gIHJldHVybiBhY29ybi5wYXJzZShzb3VyY2UsIHtcbiAgICBhbGxvd1JldHVybk91dHNpZGVGdW5jdGlvbjogdHJ1ZSxcbiAgICBhbGxvd0ltcG9ydEV4cG9ydEV2ZXJ5d2hlcmU6IHRydWUsXG4gICAgYWxsb3dIYXNoQmFuZzogdHJ1ZVxuICB9KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZmluZEdsb2JhbHM7XG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHJlYWxseVBhcnNlO1xuZnVuY3Rpb24gZmluZEdsb2JhbHMoc291cmNlKSB7XG4gIHZhciBnbG9iYWxzID0gW107XG4gIHZhciBhc3Q7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlXG4gIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykge1xuICAgIGFzdCA9IHJlYWxseVBhcnNlKHNvdXJjZSk7XG4gIH0gZWxzZSB7XG4gICAgYXN0ID0gc291cmNlO1xuICB9XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoIShhc3QgJiYgdHlwZW9mIGFzdCA9PT0gJ29iamVjdCcgJiYgYXN0LnR5cGUgPT09ICdQcm9ncmFtJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTb3VyY2UgbXVzdCBiZSBlaXRoZXIgYSBzdHJpbmcgb2YgSmF2YVNjcmlwdCBvciBhbiBhY29ybiBBU1QnKTtcbiAgfVxuICB2YXIgZGVjbGFyZUZ1bmN0aW9uID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgZm4gPSBub2RlO1xuICAgIGZuLmxvY2FscyA9IGZuLmxvY2FscyB8fCB7fTtcbiAgICBub2RlLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBkZWNsYXJlUGF0dGVybihub2RlLCBmbik7XG4gICAgfSk7XG4gICAgaWYgKG5vZGUuaWQpIHtcbiAgICAgIGZuLmxvY2Fsc1tub2RlLmlkLm5hbWVdID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgdmFyIGRlY2xhcmVQYXR0ZXJuID0gZnVuY3Rpb24gKG5vZGUsIHBhcmVudCkge1xuICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICBjYXNlICdJZGVudGlmaWVyJzpcbiAgICAgICAgcGFyZW50LmxvY2Fsc1tub2RlLm5hbWVdID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdPYmplY3RQYXR0ZXJuJzpcbiAgICAgICAgbm9kZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICBkZWNsYXJlUGF0dGVybihub2RlLnZhbHVlLCBwYXJlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJheVBhdHRlcm4nOlxuICAgICAgICBub2RlLmVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICBpZiAobm9kZSkgZGVjbGFyZVBhdHRlcm4obm9kZSwgcGFyZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUmVzdEVsZW1lbnQnOlxuICAgICAgICBkZWNsYXJlUGF0dGVybihub2RlLmFyZ3VtZW50LCBwYXJlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fzc2lnbm1lbnRQYXR0ZXJuJzpcbiAgICAgICAgZGVjbGFyZVBhdHRlcm4obm9kZS5sZWZ0LCBwYXJlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBwYXR0ZXJuIHR5cGU6ICcgKyBub2RlLnR5cGUpO1xuICAgIH1cbiAgfVxuICB2YXIgZGVjbGFyZU1vZHVsZVNwZWNpZmllciA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnRzKSB7XG4gICAgYXN0LmxvY2FscyA9IGFzdC5sb2NhbHMgfHwge307XG4gICAgYXN0LmxvY2Fsc1tub2RlLmxvY2FsLm5hbWVdID0gdHJ1ZTtcbiAgfVxuICB3YWxrLmFuY2VzdG9yKGFzdCwge1xuICAgICdWYXJpYWJsZURlY2xhcmF0aW9uJzogZnVuY3Rpb24gKG5vZGUsIHBhcmVudHMpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBudWxsO1xuICAgICAgZm9yICh2YXIgaSA9IHBhcmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwICYmIHBhcmVudCA9PT0gbnVsbDsgaS0tKSB7XG4gICAgICAgIGlmIChub2RlLmtpbmQgPT09ICd2YXInID8gaXNTY29wZShwYXJlbnRzW2ldKSA6IGlzQmxvY2tTY29wZShwYXJlbnRzW2ldKSkge1xuICAgICAgICAgIHBhcmVudCA9IHBhcmVudHNbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhcmVudC5sb2NhbHMgPSBwYXJlbnQubG9jYWxzIHx8IHt9O1xuICAgICAgbm9kZS5kZWNsYXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZGVjbGFyYXRpb24pIHtcbiAgICAgICAgZGVjbGFyZVBhdHRlcm4oZGVjbGFyYXRpb24uaWQsIHBhcmVudCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgICdGdW5jdGlvbkRlY2xhcmF0aW9uJzogZnVuY3Rpb24gKG5vZGUsIHBhcmVudHMpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBudWxsO1xuICAgICAgZm9yICh2YXIgaSA9IHBhcmVudHMubGVuZ3RoIC0gMjsgaSA+PSAwICYmIHBhcmVudCA9PT0gbnVsbDsgaS0tKSB7XG4gICAgICAgIGlmIChpc1Njb3BlKHBhcmVudHNbaV0pKSB7XG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50c1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFyZW50LmxvY2FscyA9IHBhcmVudC5sb2NhbHMgfHwge307XG4gICAgICBwYXJlbnQubG9jYWxzW25vZGUuaWQubmFtZV0gPSB0cnVlO1xuICAgICAgZGVjbGFyZUZ1bmN0aW9uKG5vZGUpO1xuICAgIH0sXG4gICAgJ0Z1bmN0aW9uJzogZGVjbGFyZUZ1bmN0aW9uLFxuICAgICdDbGFzc0RlY2xhcmF0aW9uJzogZnVuY3Rpb24gKG5vZGUsIHBhcmVudHMpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBudWxsO1xuICAgICAgZm9yICh2YXIgaSA9IHBhcmVudHMubGVuZ3RoIC0gMjsgaSA+PSAwICYmIHBhcmVudCA9PT0gbnVsbDsgaS0tKSB7XG4gICAgICAgIGlmIChpc1Njb3BlKHBhcmVudHNbaV0pKSB7XG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50c1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFyZW50LmxvY2FscyA9IHBhcmVudC5sb2NhbHMgfHwge307XG4gICAgICBwYXJlbnQubG9jYWxzW25vZGUuaWQubmFtZV0gPSB0cnVlO1xuICAgIH0sXG4gICAgJ1RyeVN0YXRlbWVudCc6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBpZiAobm9kZS5oYW5kbGVyID09PSBudWxsKSByZXR1cm47XG4gICAgICBub2RlLmhhbmRsZXIubG9jYWxzID0gbm9kZS5oYW5kbGVyLmxvY2FscyB8fCB7fTtcbiAgICAgIG5vZGUuaGFuZGxlci5sb2NhbHNbbm9kZS5oYW5kbGVyLnBhcmFtLm5hbWVdID0gdHJ1ZTtcbiAgICB9LFxuICAgICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJzogZGVjbGFyZU1vZHVsZVNwZWNpZmllcixcbiAgICAnSW1wb3J0U3BlY2lmaWVyJzogZGVjbGFyZU1vZHVsZVNwZWNpZmllcixcbiAgICAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJzogZGVjbGFyZU1vZHVsZVNwZWNpZmllclxuICB9KTtcbiAgZnVuY3Rpb24gaWRlbnRpZmllcihub2RlLCBwYXJlbnRzKSB7XG4gICAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG4gICAgaWYgKG5hbWUgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmFtZSA9PT0gJ2FyZ3VtZW50cycgJiYgZGVjbGFyZXNBcmd1bWVudHMocGFyZW50c1tpXSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudHNbaV0ubG9jYWxzICYmIG5hbWUgaW4gcGFyZW50c1tpXS5sb2NhbHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBub2RlLnBhcmVudHMgPSBwYXJlbnRzO1xuICAgIGdsb2JhbHMucHVzaChub2RlKTtcbiAgfVxuICB3YWxrLmFuY2VzdG9yKGFzdCwge1xuICAgICdWYXJpYWJsZVBhdHRlcm4nOiBpZGVudGlmaWVyLFxuICAgICdJZGVudGlmaWVyJzogaWRlbnRpZmllcixcbiAgICAnVGhpc0V4cHJlc3Npb24nOiBmdW5jdGlvbiAobm9kZSwgcGFyZW50cykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChkZWNsYXJlc1RoaXMocGFyZW50c1tpXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5vZGUucGFyZW50cyA9IHBhcmVudHM7XG4gICAgICBnbG9iYWxzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgdmFyIGdyb3VwZWRHbG9iYWxzID0ge307XG4gIGdsb2JhbHMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBuYW1lID0gbm9kZS50eXBlID09PSAnVGhpc0V4cHJlc3Npb24nID8gJ3RoaXMnIDogbm9kZS5uYW1lO1xuICAgIGdyb3VwZWRHbG9iYWxzW25hbWVdID0gKGdyb3VwZWRHbG9iYWxzW25hbWVdIHx8IFtdKTtcbiAgICBncm91cGVkR2xvYmFsc1tuYW1lXS5wdXNoKG5vZGUpO1xuICB9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGdyb3VwZWRHbG9iYWxzKS5zb3J0KCkubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHtuYW1lOiBuYW1lLCBub2RlczogZ3JvdXBlZEdsb2JhbHNbbmFtZV19O1xuICB9KTtcbn1cbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGZhY3RvcnkoKGdsb2JhbC5hY29ybiA9IGdsb2JhbC5hY29ybiB8fCB7fSkpKTtcbn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuLy8gUmVzZXJ2ZWQgd29yZCBsaXN0cyBmb3IgdmFyaW91cyBkaWFsZWN0cyBvZiB0aGUgbGFuZ3VhZ2VcblxudmFyIHJlc2VydmVkV29yZHMgPSB7XG4gIDM6IFwiYWJzdHJhY3QgYm9vbGVhbiBieXRlIGNoYXIgY2xhc3MgZG91YmxlIGVudW0gZXhwb3J0IGV4dGVuZHMgZmluYWwgZmxvYXQgZ290byBpbXBsZW1lbnRzIGltcG9ydCBpbnQgaW50ZXJmYWNlIGxvbmcgbmF0aXZlIHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHNob3J0IHN0YXRpYyBzdXBlciBzeW5jaHJvbml6ZWQgdGhyb3dzIHRyYW5zaWVudCB2b2xhdGlsZVwiLFxuICA1OiBcImNsYXNzIGVudW0gZXh0ZW5kcyBzdXBlciBjb25zdCBleHBvcnQgaW1wb3J0XCIsXG4gIDY6IFwiZW51bVwiLFxuICBzdHJpY3Q6IFwiaW1wbGVtZW50cyBpbnRlcmZhY2UgbGV0IHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHN0YXRpYyB5aWVsZFwiLFxuICBzdHJpY3RCaW5kOiBcImV2YWwgYXJndW1lbnRzXCJcbn1cblxuLy8gQW5kIHRoZSBrZXl3b3Jkc1xuXG52YXIgZWNtYTVBbmRMZXNzS2V5d29yZHMgPSBcImJyZWFrIGNhc2UgY2F0Y2ggY29udGludWUgZGVidWdnZXIgZGVmYXVsdCBkbyBlbHNlIGZpbmFsbHkgZm9yIGZ1bmN0aW9uIGlmIHJldHVybiBzd2l0Y2ggdGhyb3cgdHJ5IHZhciB3aGlsZSB3aXRoIG51bGwgdHJ1ZSBmYWxzZSBpbnN0YW5jZW9mIHR5cGVvZiB2b2lkIGRlbGV0ZSBuZXcgaW4gdGhpc1wiXG5cbnZhciBrZXl3b3JkcyA9IHtcbiAgNTogZWNtYTVBbmRMZXNzS2V5d29yZHMsXG4gIDY6IGVjbWE1QW5kTGVzc0tleXdvcmRzICsgXCIgY29uc3QgY2xhc3MgZXh0ZW5kcyBleHBvcnQgaW1wb3J0IHN1cGVyXCJcbn1cblxuLy8gIyMgQ2hhcmFjdGVyIGNhdGVnb3JpZXNcblxuLy8gQmlnIHVnbHkgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IG1hdGNoIGNoYXJhY3RlcnMgaW4gdGhlXG4vLyB3aGl0ZXNwYWNlLCBpZGVudGlmaWVyLCBhbmQgaWRlbnRpZmllci1zdGFydCBjYXRlZ29yaWVzLiBUaGVzZVxuLy8gYXJlIG9ubHkgYXBwbGllZCB3aGVuIGEgY2hhcmFjdGVyIGlzIGZvdW5kIHRvIGFjdHVhbGx5IGhhdmUgYVxuLy8gY29kZSBwb2ludCBhYm92ZSAxMjguXG4vLyBHZW5lcmF0ZWQgYnkgYGJpbi9nZW5lcmF0ZS1pZGVudGlmaWVyLXJlZ2V4LmpzYC5cblxudmFyIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgPSBcIlxceGFhXFx4YjVcXHhiYVxceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHUwMmMxXFx1MDJjNi1cXHUwMmQxXFx1MDJlMC1cXHUwMmU0XFx1MDJlY1xcdTAyZWVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN2EtXFx1MDM3ZFxcdTAzN2ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhhXFx1MDM4Y1xcdTAzOGUtXFx1MDNhMVxcdTAzYTMtXFx1MDNmNVxcdTAzZjctXFx1MDQ4MVxcdTA0OGEtXFx1MDUyZlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNWQwLVxcdTA1ZWFcXHUwNWYwLVxcdTA1ZjJcXHUwNjIwLVxcdTA2NGFcXHUwNjZlXFx1MDY2ZlxcdTA2NzEtXFx1MDZkM1xcdTA2ZDVcXHUwNmU1XFx1MDZlNlxcdTA2ZWVcXHUwNmVmXFx1MDZmYS1cXHUwNmZjXFx1MDZmZlxcdTA3MTBcXHUwNzEyLVxcdTA3MmZcXHUwNzRkLVxcdTA3YTVcXHUwN2IxXFx1MDdjYS1cXHUwN2VhXFx1MDdmNFxcdTA3ZjVcXHUwN2ZhXFx1MDgwMC1cXHUwODE1XFx1MDgxYVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDhhMC1cXHUwOGI0XFx1MDhiNi1cXHUwOGJkXFx1MDkwNC1cXHUwOTM5XFx1MDkzZFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OGNcXHUwOThmXFx1MDk5MFxcdTA5OTMtXFx1MDlhOFxcdTA5YWEtXFx1MDliMFxcdTA5YjJcXHUwOWI2LVxcdTA5YjlcXHUwOWJkXFx1MDljZVxcdTA5ZGNcXHUwOWRkXFx1MDlkZi1cXHUwOWUxXFx1MDlmMFxcdTA5ZjFcXHUwYTA1LVxcdTBhMGFcXHUwYTBmXFx1MGExMFxcdTBhMTMtXFx1MGEyOFxcdTBhMmEtXFx1MGEzMFxcdTBhMzJcXHUwYTMzXFx1MGEzNVxcdTBhMzZcXHUwYTM4XFx1MGEzOVxcdTBhNTktXFx1MGE1Y1xcdTBhNWVcXHUwYTcyLVxcdTBhNzRcXHUwYTg1LVxcdTBhOGRcXHUwYThmLVxcdTBhOTFcXHUwYTkzLVxcdTBhYThcXHUwYWFhLVxcdTBhYjBcXHUwYWIyXFx1MGFiM1xcdTBhYjUtXFx1MGFiOVxcdTBhYmRcXHUwYWQwXFx1MGFlMFxcdTBhZTFcXHUwYWY5XFx1MGIwNS1cXHUwYjBjXFx1MGIwZlxcdTBiMTBcXHUwYjEzLVxcdTBiMjhcXHUwYjJhLVxcdTBiMzBcXHUwYjMyXFx1MGIzM1xcdTBiMzUtXFx1MGIzOVxcdTBiM2RcXHUwYjVjXFx1MGI1ZFxcdTBiNWYtXFx1MGI2MVxcdTBiNzFcXHUwYjgzXFx1MGI4NS1cXHUwYjhhXFx1MGI4ZS1cXHUwYjkwXFx1MGI5Mi1cXHUwYjk1XFx1MGI5OVxcdTBiOWFcXHUwYjljXFx1MGI5ZVxcdTBiOWZcXHUwYmEzXFx1MGJhNFxcdTBiYTgtXFx1MGJhYVxcdTBiYWUtXFx1MGJiOVxcdTBiZDBcXHUwYzA1LVxcdTBjMGNcXHUwYzBlLVxcdTBjMTBcXHUwYzEyLVxcdTBjMjhcXHUwYzJhLVxcdTBjMzlcXHUwYzNkXFx1MGM1OC1cXHUwYzVhXFx1MGM2MFxcdTBjNjFcXHUwYzgwXFx1MGM4NS1cXHUwYzhjXFx1MGM4ZS1cXHUwYzkwXFx1MGM5Mi1cXHUwY2E4XFx1MGNhYS1cXHUwY2IzXFx1MGNiNS1cXHUwY2I5XFx1MGNiZFxcdTBjZGVcXHUwY2UwXFx1MGNlMVxcdTBjZjFcXHUwY2YyXFx1MGQwNS1cXHUwZDBjXFx1MGQwZS1cXHUwZDEwXFx1MGQxMi1cXHUwZDNhXFx1MGQzZFxcdTBkNGVcXHUwZDU0LVxcdTBkNTZcXHUwZDVmLVxcdTBkNjFcXHUwZDdhLVxcdTBkN2ZcXHUwZDg1LVxcdTBkOTZcXHUwZDlhLVxcdTBkYjFcXHUwZGIzLVxcdTBkYmJcXHUwZGJkXFx1MGRjMC1cXHUwZGM2XFx1MGUwMS1cXHUwZTMwXFx1MGUzMlxcdTBlMzNcXHUwZTQwLVxcdTBlNDZcXHUwZTgxXFx1MGU4MlxcdTBlODRcXHUwZTg3XFx1MGU4OFxcdTBlOGFcXHUwZThkXFx1MGU5NC1cXHUwZTk3XFx1MGU5OS1cXHUwZTlmXFx1MGVhMS1cXHUwZWEzXFx1MGVhNVxcdTBlYTdcXHUwZWFhXFx1MGVhYlxcdTBlYWQtXFx1MGViMFxcdTBlYjJcXHUwZWIzXFx1MGViZFxcdTBlYzAtXFx1MGVjNFxcdTBlYzZcXHUwZWRjLVxcdTBlZGZcXHUwZjAwXFx1MGY0MC1cXHUwZjQ3XFx1MGY0OS1cXHUwZjZjXFx1MGY4OC1cXHUwZjhjXFx1MTAwMC1cXHUxMDJhXFx1MTAzZlxcdTEwNTAtXFx1MTA1NVxcdTEwNWEtXFx1MTA1ZFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNmUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOGVcXHUxMGEwLVxcdTEwYzVcXHUxMGM3XFx1MTBjZFxcdTEwZDAtXFx1MTBmYVxcdTEwZmMtXFx1MTI0OFxcdTEyNGEtXFx1MTI0ZFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVhLVxcdTEyNWRcXHUxMjYwLVxcdTEyODhcXHUxMjhhLVxcdTEyOGRcXHUxMjkwLVxcdTEyYjBcXHUxMmIyLVxcdTEyYjVcXHUxMmI4LVxcdTEyYmVcXHUxMmMwXFx1MTJjMi1cXHUxMmM1XFx1MTJjOC1cXHUxMmQ2XFx1MTJkOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVhXFx1MTM4MC1cXHUxMzhmXFx1MTNhMC1cXHUxM2Y1XFx1MTNmOC1cXHUxM2ZkXFx1MTQwMS1cXHUxNjZjXFx1MTY2Zi1cXHUxNjdmXFx1MTY4MS1cXHUxNjlhXFx1MTZhMC1cXHUxNmVhXFx1MTZlZS1cXHUxNmY4XFx1MTcwMC1cXHUxNzBjXFx1MTcwZS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZjXFx1MTc2ZS1cXHUxNzcwXFx1MTc4MC1cXHUxN2IzXFx1MTdkN1xcdTE3ZGNcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4YThcXHUxOGFhXFx1MThiMC1cXHUxOGY1XFx1MTkwMC1cXHUxOTFlXFx1MTk1MC1cXHUxOTZkXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOWFiXFx1MTliMC1cXHUxOWM5XFx1MWEwMC1cXHUxYTE2XFx1MWEyMC1cXHUxYTU0XFx1MWFhN1xcdTFiMDUtXFx1MWIzM1xcdTFiNDUtXFx1MWI0YlxcdTFiODMtXFx1MWJhMFxcdTFiYWVcXHUxYmFmXFx1MWJiYS1cXHUxYmU1XFx1MWMwMC1cXHUxYzIzXFx1MWM0ZC1cXHUxYzRmXFx1MWM1YS1cXHUxYzdkXFx1MWM4MC1cXHUxYzg4XFx1MWNlOS1cXHUxY2VjXFx1MWNlZS1cXHUxY2YxXFx1MWNmNVxcdTFjZjZcXHUxZDAwLVxcdTFkYmZcXHUxZTAwLVxcdTFmMTVcXHUxZjE4LVxcdTFmMWRcXHUxZjIwLVxcdTFmNDVcXHUxZjQ4LVxcdTFmNGRcXHUxZjUwLVxcdTFmNTdcXHUxZjU5XFx1MWY1YlxcdTFmNWRcXHUxZjVmLVxcdTFmN2RcXHUxZjgwLVxcdTFmYjRcXHUxZmI2LVxcdTFmYmNcXHUxZmJlXFx1MWZjMi1cXHUxZmM0XFx1MWZjNi1cXHUxZmNjXFx1MWZkMC1cXHUxZmQzXFx1MWZkNi1cXHUxZmRiXFx1MWZlMC1cXHUxZmVjXFx1MWZmMi1cXHUxZmY0XFx1MWZmNi1cXHUxZmZjXFx1MjA3MVxcdTIwN2ZcXHUyMDkwLVxcdTIwOWNcXHUyMTAyXFx1MjEwN1xcdTIxMGEtXFx1MjExM1xcdTIxMTVcXHUyMTE4LVxcdTIxMWRcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJhLVxcdTIxMzlcXHUyMTNjLVxcdTIxM2ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRlXFx1MjE2MC1cXHUyMTg4XFx1MmMwMC1cXHUyYzJlXFx1MmMzMC1cXHUyYzVlXFx1MmM2MC1cXHUyY2U0XFx1MmNlYi1cXHUyY2VlXFx1MmNmMlxcdTJjZjNcXHUyZDAwLVxcdTJkMjVcXHUyZDI3XFx1MmQyZFxcdTJkMzAtXFx1MmQ2N1xcdTJkNmZcXHUyZDgwLVxcdTJkOTZcXHUyZGEwLVxcdTJkYTZcXHUyZGE4LVxcdTJkYWVcXHUyZGIwLVxcdTJkYjZcXHUyZGI4LVxcdTJkYmVcXHUyZGMwLVxcdTJkYzZcXHUyZGM4LVxcdTJkY2VcXHUyZGQwLVxcdTJkZDZcXHUyZGQ4LVxcdTJkZGVcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM2NcXHUzMDQxLVxcdTMwOTZcXHUzMDliLVxcdTMwOWZcXHUzMGExLVxcdTMwZmFcXHUzMGZjLVxcdTMwZmZcXHUzMTA1LVxcdTMxMmRcXHUzMTMxLVxcdTMxOGVcXHUzMWEwLVxcdTMxYmFcXHUzMWYwLVxcdTMxZmZcXHUzNDAwLVxcdTRkYjVcXHU0ZTAwLVxcdTlmZDVcXHVhMDAwLVxcdWE0OGNcXHVhNGQwLVxcdWE0ZmRcXHVhNTAwLVxcdWE2MGNcXHVhNjEwLVxcdWE2MWZcXHVhNjJhXFx1YTYyYlxcdWE2NDAtXFx1YTY2ZVxcdWE2N2YtXFx1YTY5ZFxcdWE2YTAtXFx1YTZlZlxcdWE3MTctXFx1YTcxZlxcdWE3MjItXFx1YTc4OFxcdWE3OGItXFx1YTdhZVxcdWE3YjAtXFx1YTdiN1xcdWE3ZjctXFx1YTgwMVxcdWE4MDMtXFx1YTgwNVxcdWE4MDctXFx1YTgwYVxcdWE4MGMtXFx1YTgyMlxcdWE4NDAtXFx1YTg3M1xcdWE4ODItXFx1YThiM1xcdWE4ZjItXFx1YThmN1xcdWE4ZmJcXHVhOGZkXFx1YTkwYS1cXHVhOTI1XFx1YTkzMC1cXHVhOTQ2XFx1YTk2MC1cXHVhOTdjXFx1YTk4NC1cXHVhOWIyXFx1YTljZlxcdWE5ZTAtXFx1YTllNFxcdWE5ZTYtXFx1YTllZlxcdWE5ZmEtXFx1YTlmZVxcdWFhMDAtXFx1YWEyOFxcdWFhNDAtXFx1YWE0MlxcdWFhNDQtXFx1YWE0YlxcdWFhNjAtXFx1YWE3NlxcdWFhN2FcXHVhYTdlLVxcdWFhYWZcXHVhYWIxXFx1YWFiNVxcdWFhYjZcXHVhYWI5LVxcdWFhYmRcXHVhYWMwXFx1YWFjMlxcdWFhZGItXFx1YWFkZFxcdWFhZTAtXFx1YWFlYVxcdWFhZjItXFx1YWFmNFxcdWFiMDEtXFx1YWIwNlxcdWFiMDktXFx1YWIwZVxcdWFiMTEtXFx1YWIxNlxcdWFiMjAtXFx1YWIyNlxcdWFiMjgtXFx1YWIyZVxcdWFiMzAtXFx1YWI1YVxcdWFiNWMtXFx1YWI2NVxcdWFiNzAtXFx1YWJlMlxcdWFjMDAtXFx1ZDdhM1xcdWQ3YjAtXFx1ZDdjNlxcdWQ3Y2ItXFx1ZDdmYlxcdWY5MDAtXFx1ZmE2ZFxcdWZhNzAtXFx1ZmFkOVxcdWZiMDAtXFx1ZmIwNlxcdWZiMTMtXFx1ZmIxN1xcdWZiMWRcXHVmYjFmLVxcdWZiMjhcXHVmYjJhLVxcdWZiMzZcXHVmYjM4LVxcdWZiM2NcXHVmYjNlXFx1ZmI0MFxcdWZiNDFcXHVmYjQzXFx1ZmI0NFxcdWZiNDYtXFx1ZmJiMVxcdWZiZDMtXFx1ZmQzZFxcdWZkNTAtXFx1ZmQ4ZlxcdWZkOTItXFx1ZmRjN1xcdWZkZjAtXFx1ZmRmYlxcdWZlNzAtXFx1ZmU3NFxcdWZlNzYtXFx1ZmVmY1xcdWZmMjEtXFx1ZmYzYVxcdWZmNDEtXFx1ZmY1YVxcdWZmNjYtXFx1ZmZiZVxcdWZmYzItXFx1ZmZjN1xcdWZmY2EtXFx1ZmZjZlxcdWZmZDItXFx1ZmZkN1xcdWZmZGEtXFx1ZmZkY1wiXG52YXIgbm9uQVNDSUlpZGVudGlmaWVyQ2hhcnMgPSBcIlxcdTIwMGNcXHUyMDBkXFx4YjdcXHUwMzAwLVxcdTAzNmZcXHUwMzg3XFx1MDQ4My1cXHUwNDg3XFx1MDU5MS1cXHUwNWJkXFx1MDViZlxcdTA1YzFcXHUwNWMyXFx1MDVjNFxcdTA1YzVcXHUwNWM3XFx1MDYxMC1cXHUwNjFhXFx1MDY0Yi1cXHUwNjY5XFx1MDY3MFxcdTA2ZDYtXFx1MDZkY1xcdTA2ZGYtXFx1MDZlNFxcdTA2ZTdcXHUwNmU4XFx1MDZlYS1cXHUwNmVkXFx1MDZmMC1cXHUwNmY5XFx1MDcxMVxcdTA3MzAtXFx1MDc0YVxcdTA3YTYtXFx1MDdiMFxcdTA3YzAtXFx1MDdjOVxcdTA3ZWItXFx1MDdmM1xcdTA4MTYtXFx1MDgxOVxcdTA4MWItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyZFxcdTA4NTktXFx1MDg1YlxcdTA4ZDQtXFx1MDhlMVxcdTA4ZTMtXFx1MDkwM1xcdTA5M2EtXFx1MDkzY1xcdTA5M2UtXFx1MDk0ZlxcdTA5NTEtXFx1MDk1N1xcdTA5NjJcXHUwOTYzXFx1MDk2Ni1cXHUwOTZmXFx1MDk4MS1cXHUwOTgzXFx1MDliY1xcdTA5YmUtXFx1MDljNFxcdTA5YzdcXHUwOWM4XFx1MDljYi1cXHUwOWNkXFx1MDlkN1xcdTA5ZTJcXHUwOWUzXFx1MDllNi1cXHUwOWVmXFx1MGEwMS1cXHUwYTAzXFx1MGEzY1xcdTBhM2UtXFx1MGE0MlxcdTBhNDdcXHUwYTQ4XFx1MGE0Yi1cXHUwYTRkXFx1MGE1MVxcdTBhNjYtXFx1MGE3MVxcdTBhNzVcXHUwYTgxLVxcdTBhODNcXHUwYWJjXFx1MGFiZS1cXHUwYWM1XFx1MGFjNy1cXHUwYWM5XFx1MGFjYi1cXHUwYWNkXFx1MGFlMlxcdTBhZTNcXHUwYWU2LVxcdTBhZWZcXHUwYjAxLVxcdTBiMDNcXHUwYjNjXFx1MGIzZS1cXHUwYjQ0XFx1MGI0N1xcdTBiNDhcXHUwYjRiLVxcdTBiNGRcXHUwYjU2XFx1MGI1N1xcdTBiNjJcXHUwYjYzXFx1MGI2Ni1cXHUwYjZmXFx1MGI4MlxcdTBiYmUtXFx1MGJjMlxcdTBiYzYtXFx1MGJjOFxcdTBiY2EtXFx1MGJjZFxcdTBiZDdcXHUwYmU2LVxcdTBiZWZcXHUwYzAwLVxcdTBjMDNcXHUwYzNlLVxcdTBjNDRcXHUwYzQ2LVxcdTBjNDhcXHUwYzRhLVxcdTBjNGRcXHUwYzU1XFx1MGM1NlxcdTBjNjJcXHUwYzYzXFx1MGM2Ni1cXHUwYzZmXFx1MGM4MS1cXHUwYzgzXFx1MGNiY1xcdTBjYmUtXFx1MGNjNFxcdTBjYzYtXFx1MGNjOFxcdTBjY2EtXFx1MGNjZFxcdTBjZDVcXHUwY2Q2XFx1MGNlMlxcdTBjZTNcXHUwY2U2LVxcdTBjZWZcXHUwZDAxLVxcdTBkMDNcXHUwZDNlLVxcdTBkNDRcXHUwZDQ2LVxcdTBkNDhcXHUwZDRhLVxcdTBkNGRcXHUwZDU3XFx1MGQ2MlxcdTBkNjNcXHUwZDY2LVxcdTBkNmZcXHUwZDgyXFx1MGQ4M1xcdTBkY2FcXHUwZGNmLVxcdTBkZDRcXHUwZGQ2XFx1MGRkOC1cXHUwZGRmXFx1MGRlNi1cXHUwZGVmXFx1MGRmMlxcdTBkZjNcXHUwZTMxXFx1MGUzNC1cXHUwZTNhXFx1MGU0Ny1cXHUwZTRlXFx1MGU1MC1cXHUwZTU5XFx1MGViMVxcdTBlYjQtXFx1MGViOVxcdTBlYmJcXHUwZWJjXFx1MGVjOC1cXHUwZWNkXFx1MGVkMC1cXHUwZWQ5XFx1MGYxOFxcdTBmMTlcXHUwZjIwLVxcdTBmMjlcXHUwZjM1XFx1MGYzN1xcdTBmMzlcXHUwZjNlXFx1MGYzZlxcdTBmNzEtXFx1MGY4NFxcdTBmODZcXHUwZjg3XFx1MGY4ZC1cXHUwZjk3XFx1MGY5OS1cXHUwZmJjXFx1MGZjNlxcdTEwMmItXFx1MTAzZVxcdTEwNDAtXFx1MTA0OVxcdTEwNTYtXFx1MTA1OVxcdTEwNWUtXFx1MTA2MFxcdTEwNjItXFx1MTA2NFxcdTEwNjctXFx1MTA2ZFxcdTEwNzEtXFx1MTA3NFxcdTEwODItXFx1MTA4ZFxcdTEwOGYtXFx1MTA5ZFxcdTEzNWQtXFx1MTM1ZlxcdTEzNjktXFx1MTM3MVxcdTE3MTItXFx1MTcxNFxcdTE3MzItXFx1MTczNFxcdTE3NTJcXHUxNzUzXFx1MTc3MlxcdTE3NzNcXHUxN2I0LVxcdTE3ZDNcXHUxN2RkXFx1MTdlMC1cXHUxN2U5XFx1MTgwYi1cXHUxODBkXFx1MTgxMC1cXHUxODE5XFx1MThhOVxcdTE5MjAtXFx1MTkyYlxcdTE5MzAtXFx1MTkzYlxcdTE5NDYtXFx1MTk0ZlxcdTE5ZDAtXFx1MTlkYVxcdTFhMTctXFx1MWExYlxcdTFhNTUtXFx1MWE1ZVxcdTFhNjAtXFx1MWE3Y1xcdTFhN2YtXFx1MWE4OVxcdTFhOTAtXFx1MWE5OVxcdTFhYjAtXFx1MWFiZFxcdTFiMDAtXFx1MWIwNFxcdTFiMzQtXFx1MWI0NFxcdTFiNTAtXFx1MWI1OVxcdTFiNmItXFx1MWI3M1xcdTFiODAtXFx1MWI4MlxcdTFiYTEtXFx1MWJhZFxcdTFiYjAtXFx1MWJiOVxcdTFiZTYtXFx1MWJmM1xcdTFjMjQtXFx1MWMzN1xcdTFjNDAtXFx1MWM0OVxcdTFjNTAtXFx1MWM1OVxcdTFjZDAtXFx1MWNkMlxcdTFjZDQtXFx1MWNlOFxcdTFjZWRcXHUxY2YyLVxcdTFjZjRcXHUxY2Y4XFx1MWNmOVxcdTFkYzAtXFx1MWRmNVxcdTFkZmItXFx1MWRmZlxcdTIwM2ZcXHUyMDQwXFx1MjA1NFxcdTIwZDAtXFx1MjBkY1xcdTIwZTFcXHUyMGU1LVxcdTIwZjBcXHUyY2VmLVxcdTJjZjFcXHUyZDdmXFx1MmRlMC1cXHUyZGZmXFx1MzAyYS1cXHUzMDJmXFx1MzA5OVxcdTMwOWFcXHVhNjIwLVxcdWE2MjlcXHVhNjZmXFx1YTY3NC1cXHVhNjdkXFx1YTY5ZVxcdWE2OWZcXHVhNmYwXFx1YTZmMVxcdWE4MDJcXHVhODA2XFx1YTgwYlxcdWE4MjMtXFx1YTgyN1xcdWE4ODBcXHVhODgxXFx1YThiNC1cXHVhOGM1XFx1YThkMC1cXHVhOGQ5XFx1YThlMC1cXHVhOGYxXFx1YTkwMC1cXHVhOTA5XFx1YTkyNi1cXHVhOTJkXFx1YTk0Ny1cXHVhOTUzXFx1YTk4MC1cXHVhOTgzXFx1YTliMy1cXHVhOWMwXFx1YTlkMC1cXHVhOWQ5XFx1YTllNVxcdWE5ZjAtXFx1YTlmOVxcdWFhMjktXFx1YWEzNlxcdWFhNDNcXHVhYTRjXFx1YWE0ZFxcdWFhNTAtXFx1YWE1OVxcdWFhN2ItXFx1YWE3ZFxcdWFhYjBcXHVhYWIyLVxcdWFhYjRcXHVhYWI3XFx1YWFiOFxcdWFhYmVcXHVhYWJmXFx1YWFjMVxcdWFhZWItXFx1YWFlZlxcdWFhZjVcXHVhYWY2XFx1YWJlMy1cXHVhYmVhXFx1YWJlY1xcdWFiZWRcXHVhYmYwLVxcdWFiZjlcXHVmYjFlXFx1ZmUwMC1cXHVmZTBmXFx1ZmUyMC1cXHVmZTJmXFx1ZmUzM1xcdWZlMzRcXHVmZTRkLVxcdWZlNGZcXHVmZjEwLVxcdWZmMTlcXHVmZjNmXCJcblxudmFyIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0ID0gbmV3IFJlZ0V4cChcIltcIiArIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgKyBcIl1cIilcbnZhciBub25BU0NJSWlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKFwiW1wiICsgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyArIG5vbkFTQ0lJaWRlbnRpZmllckNoYXJzICsgXCJdXCIpXG5cbm5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgPSBub25BU0NJSWlkZW50aWZpZXJDaGFycyA9IG51bGxcblxuLy8gVGhlc2UgYXJlIGEgcnVuLWxlbmd0aCBhbmQgb2Zmc2V0IGVuY29kZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlXG4vLyA+MHhmZmZmIGNvZGUgcG9pbnRzIHRoYXQgYXJlIGEgdmFsaWQgcGFydCBvZiBpZGVudGlmaWVycy4gVGhlXG4vLyBvZmZzZXQgc3RhcnRzIGF0IDB4MTAwMDAsIGFuZCBlYWNoIHBhaXIgb2YgbnVtYmVycyByZXByZXNlbnRzIGFuXG4vLyBvZmZzZXQgdG8gdGhlIG5leHQgcmFuZ2UsIGFuZCB0aGVuIGEgc2l6ZSBvZiB0aGUgcmFuZ2UuIFRoZXkgd2VyZVxuLy8gZ2VuZXJhdGVkIGJ5IGJpbi9nZW5lcmF0ZS1pZGVudGlmaWVyLXJlZ2V4LmpzXG52YXIgYXN0cmFsSWRlbnRpZmllclN0YXJ0Q29kZXMgPSBbMCwxMSwyLDI1LDIsMTgsMiwxLDIsMTQsMywxMywzNSwxMjIsNzAsNTIsMjY4LDI4LDQsNDgsNDgsMzEsMTcsMjYsNiwzNywxMSwyOSwzLDM1LDUsNywyLDQsNDMsMTU3LDE5LDM1LDUsMzUsNSwzOSw5LDUxLDE1NywzMTAsMTAsMjEsMTEsNywxNTMsNSwzLDAsMiw0MywyLDEsNCwwLDMsMjIsMTEsMjIsMTAsMzAsNjYsMTgsMiwxLDExLDIxLDExLDI1LDcxLDU1LDcsMSw2NSwwLDE2LDMsMiwyLDIsMjYsNDUsMjgsNCwyOCwzNiw3LDIsMjcsMjgsNTMsMTEsMjEsMTEsMTgsMTQsMTcsMTExLDcyLDU2LDUwLDE0LDUwLDc4NSw1Miw3Niw0NCwzMywyNCwyNywzNSw0MiwzNCw0LDAsMTMsNDcsMTUsMywyMiwwLDIsMCwzNiwxNywyLDI0LDg1LDYsMiwwLDIsMywyLDE0LDIsOSw4LDQ2LDM5LDcsMywxLDMsMjEsMiw2LDIsMSwyLDQsNCwwLDE5LDAsMTMsNCwxNTksNTIsMTksMyw1NCw0NywyMSwxLDIsMCwxODUsNDYsNDIsMywzNyw0NywyMSwwLDYwLDQyLDg2LDI1LDM5MSw2MywzMiwwLDQ0OSw1NiwyNjQsOCwyLDM2LDE4LDAsNTAsMjksODgxLDkyMSwxMDMsMTEwLDE4LDE5NSwyNzQ5LDEwNzAsNDA1MCw1ODIsODYzNCw1NjgsOCwzMCwxMTQsMjksMTksNDcsMTcsMywzMiwyMCw2LDE4LDg4MSw2OCwxMiwwLDY3LDEyLDY1LDAsMzIsNjEyNCwyMCw3NTQsOTQ4NiwxLDMwNzEsMTA2LDYsMTIsNCw4LDgsOSw1OTkxLDg0LDIsNzAsMiwxLDMsMCwzLDEsMywzLDIsMTEsMiwwLDIsNiwyLDY0LDIsMywzLDcsMiw2LDIsMjcsMiwzLDIsNCwyLDAsNCw2LDIsMzM5LDMsMjQsMiwyNCwyLDMwLDIsMjQsMiwzMCwyLDI0LDIsMzAsMiwyNCwyLDMwLDIsMjQsMiw3LDQxNDksMTk2LDYwLDY3LDEyMTMsMywyLDI2LDIsMSwyLDAsMywwLDIsOSwyLDMsMiwwLDIsMCw3LDAsNSwwLDIsMCwyLDAsMiwyLDIsMSwyLDAsMywwLDIsMCwyLDAsMiwwLDIsMCwyLDEsMiwwLDMsMywyLDYsMiwzLDIsMywyLDAsMiw5LDIsMTYsNiwyLDIsNCwyLDE2LDQ0MjEsNDI3MTAsNDIsNDE0OCwxMiwyMjEsMyw1NzYxLDEwNTkxLDU0MV1cbnZhciBhc3RyYWxJZGVudGlmaWVyQ29kZXMgPSBbNTA5LDAsMjI3LDAsMTUwLDQsMjk0LDksMTM2OCwyLDIsMSw2LDMsNDEsMiw1LDAsMTY2LDEsMTMwNiwyLDU0LDE0LDMyLDksMTYsMyw0NiwxMCw1NCw5LDcsMiwzNywxMywyLDksNTIsMCwxMywyLDQ5LDEzLDEwLDIsNCw5LDgzLDExLDcsMCwxNjEsMTEsNiw5LDcsMyw1NywwLDIsNiwzLDEsMywyLDEwLDAsMTEsMSwzLDYsNCw0LDE5MywxNywxMCw5LDg3LDE5LDEzLDksMjE0LDYsMyw4LDI4LDEsODMsMTYsMTYsOSw4MiwxMiw5LDksODQsMTQsNSw5LDQyMyw5LDgzOCw3LDIsNywxNyw5LDU3LDIxLDIsMTMsMTk4ODIsOSwxMzUsNCw2MCw2LDI2LDksMTAxNiw0NSwxNywzLDE5NzIzLDEsNTMxOSw0LDQsNSw5LDcsMyw2LDMxLDMsMTQ5LDIsMTQxOCw0OSw1MTMsNTQsNSw0OSw5LDAsMTUsMCwyMyw0LDIsMTQsMTM2MSw2LDIsMTYsMyw2LDIsMSwyLDQsMjIxNCw2LDExMCw2LDYsOSw3OTI0ODcsMjM5XVxuXG4vLyBUaGlzIGhhcyBhIGNvbXBsZXhpdHkgbGluZWFyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgY29kZS4gVGhlXG4vLyBhc3N1bXB0aW9uIGlzIHRoYXQgbG9va2luZyB1cCBhc3RyYWwgaWRlbnRpZmllciBjaGFyYWN0ZXJzIGlzXG4vLyByYXJlLlxuZnVuY3Rpb24gaXNJbkFzdHJhbFNldChjb2RlLCBzZXQpIHtcbiAgdmFyIHBvcyA9IDB4MTAwMDBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBwb3MgKz0gc2V0W2ldXG4gICAgaWYgKHBvcyA+IGNvZGUpIHJldHVybiBmYWxzZVxuICAgIHBvcyArPSBzZXRbaSArIDFdXG4gICAgaWYgKHBvcyA+PSBjb2RlKSByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbi8vIFRlc3Qgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBjb2RlIHN0YXJ0cyBhbiBpZGVudGlmaWVyLlxuXG5mdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjb2RlLCBhc3RyYWwpIHtcbiAgaWYgKGNvZGUgPCA2NSkgcmV0dXJuIGNvZGUgPT09IDM2XG4gIGlmIChjb2RlIDwgOTEpIHJldHVybiB0cnVlXG4gIGlmIChjb2RlIDwgOTcpIHJldHVybiBjb2RlID09PSA5NVxuICBpZiAoY29kZSA8IDEyMykgcmV0dXJuIHRydWVcbiAgaWYgKGNvZGUgPD0gMHhmZmZmKSByZXR1cm4gY29kZSA+PSAweGFhICYmIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSlcbiAgaWYgKGFzdHJhbCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZVxuICByZXR1cm4gaXNJbkFzdHJhbFNldChjb2RlLCBhc3RyYWxJZGVudGlmaWVyU3RhcnRDb2Rlcylcbn1cblxuLy8gVGVzdCB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIHBhcnQgb2YgYW4gaWRlbnRpZmllci5cblxuZnVuY3Rpb24gaXNJZGVudGlmaWVyQ2hhcihjb2RlLCBhc3RyYWwpIHtcbiAgaWYgKGNvZGUgPCA0OCkgcmV0dXJuIGNvZGUgPT09IDM2XG4gIGlmIChjb2RlIDwgNTgpIHJldHVybiB0cnVlXG4gIGlmIChjb2RlIDwgNjUpIHJldHVybiBmYWxzZVxuICBpZiAoY29kZSA8IDkxKSByZXR1cm4gdHJ1ZVxuICBpZiAoY29kZSA8IDk3KSByZXR1cm4gY29kZSA9PT0gOTVcbiAgaWYgKGNvZGUgPCAxMjMpIHJldHVybiB0cnVlXG4gIGlmIChjb2RlIDw9IDB4ZmZmZikgcmV0dXJuIGNvZGUgPj0gMHhhYSAmJiBub25BU0NJSWlkZW50aWZpZXIudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpKVxuICBpZiAoYXN0cmFsID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBpc0luQXN0cmFsU2V0KGNvZGUsIGFzdHJhbElkZW50aWZpZXJTdGFydENvZGVzKSB8fCBpc0luQXN0cmFsU2V0KGNvZGUsIGFzdHJhbElkZW50aWZpZXJDb2Rlcylcbn1cblxuLy8gIyMgVG9rZW4gdHlwZXNcblxuLy8gVGhlIGFzc2lnbm1lbnQgb2YgZmluZS1ncmFpbmVkLCBpbmZvcm1hdGlvbi1jYXJyeWluZyB0eXBlIG9iamVjdHNcbi8vIGFsbG93cyB0aGUgdG9rZW5pemVyIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBpdCBoYXMgYWJvdXQgYVxuLy8gdG9rZW4gaW4gYSB3YXkgdGhhdCBpcyB2ZXJ5IGNoZWFwIGZvciB0aGUgcGFyc2VyIHRvIGxvb2sgdXAuXG5cbi8vIEFsbCB0b2tlbiB0eXBlIHZhcmlhYmxlcyBzdGFydCB3aXRoIGFuIHVuZGVyc2NvcmUsIHRvIG1ha2UgdGhlbVxuLy8gZWFzeSB0byByZWNvZ25pemUuXG5cbi8vIFRoZSBgYmVmb3JlRXhwcmAgcHJvcGVydHkgaXMgdXNlZCB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiByZWd1bGFyXG4vLyBleHByZXNzaW9ucyBhbmQgZGl2aXNpb25zLiBJdCBpcyBzZXQgb24gYWxsIHRva2VuIHR5cGVzIHRoYXQgY2FuXG4vLyBiZSBmb2xsb3dlZCBieSBhbiBleHByZXNzaW9uICh0aHVzLCBhIHNsYXNoIGFmdGVyIHRoZW0gd291bGQgYmUgYVxuLy8gcmVndWxhciBleHByZXNzaW9uKS5cbi8vXG4vLyBUaGUgYHN0YXJ0c0V4cHJgIHByb3BlcnR5IGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIHRva2VuIGVuZHMgYVxuLy8gYHlpZWxkYCBleHByZXNzaW9uLiBJdCBpcyBzZXQgb24gYWxsIHRva2VuIHR5cGVzIHRoYXQgZWl0aGVyIGNhblxuLy8gZGlyZWN0bHkgc3RhcnQgYW4gZXhwcmVzc2lvbiAobGlrZSBhIHF1b3RhdGlvbiBtYXJrKSBvciBjYW5cbi8vIGNvbnRpbnVlIGFuIGV4cHJlc3Npb24gKGxpa2UgdGhlIGJvZHkgb2YgYSBzdHJpbmcpLlxuLy9cbi8vIGBpc0xvb3BgIG1hcmtzIGEga2V5d29yZCBhcyBzdGFydGluZyBhIGxvb3AsIHdoaWNoIGlzIGltcG9ydGFudFxuLy8gdG8ga25vdyB3aGVuIHBhcnNpbmcgYSBsYWJlbCwgaW4gb3JkZXIgdG8gYWxsb3cgb3IgZGlzYWxsb3dcbi8vIGNvbnRpbnVlIGp1bXBzIHRvIHRoYXQgbGFiZWwuXG5cbnZhciBUb2tlblR5cGUgPSBmdW5jdGlvbiBUb2tlblR5cGUobGFiZWwsIGNvbmYpIHtcbiAgaWYgKCBjb25mID09PSB2b2lkIDAgKSBjb25mID0ge307XG5cbiAgdGhpcy5sYWJlbCA9IGxhYmVsXG4gIHRoaXMua2V5d29yZCA9IGNvbmYua2V5d29yZFxuICB0aGlzLmJlZm9yZUV4cHIgPSAhIWNvbmYuYmVmb3JlRXhwclxuICB0aGlzLnN0YXJ0c0V4cHIgPSAhIWNvbmYuc3RhcnRzRXhwclxuICB0aGlzLmlzTG9vcCA9ICEhY29uZi5pc0xvb3BcbiAgdGhpcy5pc0Fzc2lnbiA9ICEhY29uZi5pc0Fzc2lnblxuICB0aGlzLnByZWZpeCA9ICEhY29uZi5wcmVmaXhcbiAgdGhpcy5wb3N0Zml4ID0gISFjb25mLnBvc3RmaXhcbiAgdGhpcy5iaW5vcCA9IGNvbmYuYmlub3AgfHwgbnVsbFxuICB0aGlzLnVwZGF0ZUNvbnRleHQgPSBudWxsXG59O1xuXG5mdW5jdGlvbiBiaW5vcChuYW1lLCBwcmVjKSB7XG4gIHJldHVybiBuZXcgVG9rZW5UeXBlKG5hbWUsIHtiZWZvcmVFeHByOiB0cnVlLCBiaW5vcDogcHJlY30pXG59XG52YXIgYmVmb3JlRXhwciA9IHtiZWZvcmVFeHByOiB0cnVlfTtcbnZhciBzdGFydHNFeHByID0ge3N0YXJ0c0V4cHI6IHRydWV9O1xuLy8gTWFwIGtleXdvcmQgbmFtZXMgdG8gdG9rZW4gdHlwZXMuXG5cbnZhciBrZXl3b3JkVHlwZXMgPSB7fVxuXG4vLyBTdWNjaW5jdCBkZWZpbml0aW9ucyBvZiBrZXl3b3JkIHRva2VuIHR5cGVzXG5mdW5jdGlvbiBrdyhuYW1lLCBvcHRpb25zKSB7XG4gIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIG9wdGlvbnMua2V5d29yZCA9IG5hbWVcbiAgcmV0dXJuIGtleXdvcmRUeXBlc1tuYW1lXSA9IG5ldyBUb2tlblR5cGUobmFtZSwgb3B0aW9ucylcbn1cblxudmFyIHR0ID0ge1xuICBudW06IG5ldyBUb2tlblR5cGUoXCJudW1cIiwgc3RhcnRzRXhwciksXG4gIHJlZ2V4cDogbmV3IFRva2VuVHlwZShcInJlZ2V4cFwiLCBzdGFydHNFeHByKSxcbiAgc3RyaW5nOiBuZXcgVG9rZW5UeXBlKFwic3RyaW5nXCIsIHN0YXJ0c0V4cHIpLFxuICBuYW1lOiBuZXcgVG9rZW5UeXBlKFwibmFtZVwiLCBzdGFydHNFeHByKSxcbiAgZW9mOiBuZXcgVG9rZW5UeXBlKFwiZW9mXCIpLFxuXG4gIC8vIFB1bmN0dWF0aW9uIHRva2VuIHR5cGVzLlxuICBicmFja2V0TDogbmV3IFRva2VuVHlwZShcIltcIiwge2JlZm9yZUV4cHI6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgYnJhY2tldFI6IG5ldyBUb2tlblR5cGUoXCJdXCIpLFxuICBicmFjZUw6IG5ldyBUb2tlblR5cGUoXCJ7XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gIGJyYWNlUjogbmV3IFRva2VuVHlwZShcIn1cIiksXG4gIHBhcmVuTDogbmV3IFRva2VuVHlwZShcIihcIiwge2JlZm9yZUV4cHI6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgcGFyZW5SOiBuZXcgVG9rZW5UeXBlKFwiKVwiKSxcbiAgY29tbWE6IG5ldyBUb2tlblR5cGUoXCIsXCIsIGJlZm9yZUV4cHIpLFxuICBzZW1pOiBuZXcgVG9rZW5UeXBlKFwiO1wiLCBiZWZvcmVFeHByKSxcbiAgY29sb246IG5ldyBUb2tlblR5cGUoXCI6XCIsIGJlZm9yZUV4cHIpLFxuICBkb3Q6IG5ldyBUb2tlblR5cGUoXCIuXCIpLFxuICBxdWVzdGlvbjogbmV3IFRva2VuVHlwZShcIj9cIiwgYmVmb3JlRXhwciksXG4gIGFycm93OiBuZXcgVG9rZW5UeXBlKFwiPT5cIiwgYmVmb3JlRXhwciksXG4gIHRlbXBsYXRlOiBuZXcgVG9rZW5UeXBlKFwidGVtcGxhdGVcIiksXG4gIGVsbGlwc2lzOiBuZXcgVG9rZW5UeXBlKFwiLi4uXCIsIGJlZm9yZUV4cHIpLFxuICBiYWNrUXVvdGU6IG5ldyBUb2tlblR5cGUoXCJgXCIsIHN0YXJ0c0V4cHIpLFxuICBkb2xsYXJCcmFjZUw6IG5ldyBUb2tlblR5cGUoXCIke1wiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuXG4gIC8vIE9wZXJhdG9ycy4gVGhlc2UgY2Fycnkgc2V2ZXJhbCBraW5kcyBvZiBwcm9wZXJ0aWVzIHRvIGhlbHAgdGhlXG4gIC8vIHBhcnNlciB1c2UgdGhlbSBwcm9wZXJseSAodGhlIHByZXNlbmNlIG9mIHRoZXNlIHByb3BlcnRpZXMgaXNcbiAgLy8gd2hhdCBjYXRlZ29yaXplcyB0aGVtIGFzIG9wZXJhdG9ycykuXG4gIC8vXG4gIC8vIGBiaW5vcGAsIHdoZW4gcHJlc2VudCwgc3BlY2lmaWVzIHRoYXQgdGhpcyBvcGVyYXRvciBpcyBhIGJpbmFyeVxuICAvLyBvcGVyYXRvciwgYW5kIHdpbGwgcmVmZXIgdG8gaXRzIHByZWNlZGVuY2UuXG4gIC8vXG4gIC8vIGBwcmVmaXhgIGFuZCBgcG9zdGZpeGAgbWFyayB0aGUgb3BlcmF0b3IgYXMgYSBwcmVmaXggb3IgcG9zdGZpeFxuICAvLyB1bmFyeSBvcGVyYXRvci5cbiAgLy9cbiAgLy8gYGlzQXNzaWduYCBtYXJrcyBhbGwgb2YgYD1gLCBgKz1gLCBgLT1gIGV0Y2V0ZXJhLCB3aGljaCBhY3QgYXNcbiAgLy8gYmluYXJ5IG9wZXJhdG9ycyB3aXRoIGEgdmVyeSBsb3cgcHJlY2VkZW5jZSwgdGhhdCBzaG91bGQgcmVzdWx0XG4gIC8vIGluIEFzc2lnbm1lbnRFeHByZXNzaW9uIG5vZGVzLlxuXG4gIGVxOiBuZXcgVG9rZW5UeXBlKFwiPVwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgaXNBc3NpZ246IHRydWV9KSxcbiAgYXNzaWduOiBuZXcgVG9rZW5UeXBlKFwiXz1cIiwge2JlZm9yZUV4cHI6IHRydWUsIGlzQXNzaWduOiB0cnVlfSksXG4gIGluY0RlYzogbmV3IFRva2VuVHlwZShcIisrLy0tXCIsIHtwcmVmaXg6IHRydWUsIHBvc3RmaXg6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgcHJlZml4OiBuZXcgVG9rZW5UeXBlKFwicHJlZml4XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBwcmVmaXg6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgbG9naWNhbE9SOiBiaW5vcChcInx8XCIsIDEpLFxuICBsb2dpY2FsQU5EOiBiaW5vcChcIiYmXCIsIDIpLFxuICBiaXR3aXNlT1I6IGJpbm9wKFwifFwiLCAzKSxcbiAgYml0d2lzZVhPUjogYmlub3AoXCJeXCIsIDQpLFxuICBiaXR3aXNlQU5EOiBiaW5vcChcIiZcIiwgNSksXG4gIGVxdWFsaXR5OiBiaW5vcChcIj09LyE9XCIsIDYpLFxuICByZWxhdGlvbmFsOiBiaW5vcChcIjwvPlwiLCA3KSxcbiAgYml0U2hpZnQ6IGJpbm9wKFwiPDwvPj5cIiwgOCksXG4gIHBsdXNNaW46IG5ldyBUb2tlblR5cGUoXCIrLy1cIiwge2JlZm9yZUV4cHI6IHRydWUsIGJpbm9wOiA5LCBwcmVmaXg6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgbW9kdWxvOiBiaW5vcChcIiVcIiwgMTApLFxuICBzdGFyOiBiaW5vcChcIipcIiwgMTApLFxuICBzbGFzaDogYmlub3AoXCIvXCIsIDEwKSxcbiAgc3RhcnN0YXI6IG5ldyBUb2tlblR5cGUoXCIqKlwiLCB7YmVmb3JlRXhwcjogdHJ1ZX0pLFxuXG4gIC8vIEtleXdvcmQgdG9rZW4gdHlwZXMuXG4gIF9icmVhazoga3coXCJicmVha1wiKSxcbiAgX2Nhc2U6IGt3KFwiY2FzZVwiLCBiZWZvcmVFeHByKSxcbiAgX2NhdGNoOiBrdyhcImNhdGNoXCIpLFxuICBfY29udGludWU6IGt3KFwiY29udGludWVcIiksXG4gIF9kZWJ1Z2dlcjoga3coXCJkZWJ1Z2dlclwiKSxcbiAgX2RlZmF1bHQ6IGt3KFwiZGVmYXVsdFwiLCBiZWZvcmVFeHByKSxcbiAgX2RvOiBrdyhcImRvXCIsIHtpc0xvb3A6IHRydWUsIGJlZm9yZUV4cHI6IHRydWV9KSxcbiAgX2Vsc2U6IGt3KFwiZWxzZVwiLCBiZWZvcmVFeHByKSxcbiAgX2ZpbmFsbHk6IGt3KFwiZmluYWxseVwiKSxcbiAgX2Zvcjoga3coXCJmb3JcIiwge2lzTG9vcDogdHJ1ZX0pLFxuICBfZnVuY3Rpb246IGt3KFwiZnVuY3Rpb25cIiwgc3RhcnRzRXhwciksXG4gIF9pZjoga3coXCJpZlwiKSxcbiAgX3JldHVybjoga3coXCJyZXR1cm5cIiwgYmVmb3JlRXhwciksXG4gIF9zd2l0Y2g6IGt3KFwic3dpdGNoXCIpLFxuICBfdGhyb3c6IGt3KFwidGhyb3dcIiwgYmVmb3JlRXhwciksXG4gIF90cnk6IGt3KFwidHJ5XCIpLFxuICBfdmFyOiBrdyhcInZhclwiKSxcbiAgX2NvbnN0OiBrdyhcImNvbnN0XCIpLFxuICBfd2hpbGU6IGt3KFwid2hpbGVcIiwge2lzTG9vcDogdHJ1ZX0pLFxuICBfd2l0aDoga3coXCJ3aXRoXCIpLFxuICBfbmV3OiBrdyhcIm5ld1wiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBfdGhpczoga3coXCJ0aGlzXCIsIHN0YXJ0c0V4cHIpLFxuICBfc3VwZXI6IGt3KFwic3VwZXJcIiwgc3RhcnRzRXhwciksXG4gIF9jbGFzczoga3coXCJjbGFzc1wiKSxcbiAgX2V4dGVuZHM6IGt3KFwiZXh0ZW5kc1wiLCBiZWZvcmVFeHByKSxcbiAgX2V4cG9ydDoga3coXCJleHBvcnRcIiksXG4gIF9pbXBvcnQ6IGt3KFwiaW1wb3J0XCIpLFxuICBfbnVsbDoga3coXCJudWxsXCIsIHN0YXJ0c0V4cHIpLFxuICBfdHJ1ZToga3coXCJ0cnVlXCIsIHN0YXJ0c0V4cHIpLFxuICBfZmFsc2U6IGt3KFwiZmFsc2VcIiwgc3RhcnRzRXhwciksXG4gIF9pbjoga3coXCJpblwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgYmlub3A6IDd9KSxcbiAgX2luc3RhbmNlb2Y6IGt3KFwiaW5zdGFuY2VvZlwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgYmlub3A6IDd9KSxcbiAgX3R5cGVvZjoga3coXCJ0eXBlb2ZcIiwge2JlZm9yZUV4cHI6IHRydWUsIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBfdm9pZDoga3coXCJ2b2lkXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBwcmVmaXg6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgX2RlbGV0ZToga3coXCJkZWxldGVcIiwge2JlZm9yZUV4cHI6IHRydWUsIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pXG59XG5cbi8vIE1hdGNoZXMgYSB3aG9sZSBsaW5lIGJyZWFrICh3aGVyZSBDUkxGIGlzIGNvbnNpZGVyZWQgYSBzaW5nbGVcbi8vIGxpbmUgYnJlYWspLiBVc2VkIHRvIGNvdW50IGxpbmVzLlxuXG52YXIgbGluZUJyZWFrID0gL1xcclxcbj98XFxufFxcdTIwMjh8XFx1MjAyOS9cbnZhciBsaW5lQnJlYWtHID0gbmV3IFJlZ0V4cChsaW5lQnJlYWsuc291cmNlLCBcImdcIilcblxuZnVuY3Rpb24gaXNOZXdMaW5lKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDEwIHx8IGNvZGUgPT09IDEzIHx8IGNvZGUgPT09IDB4MjAyOCB8fCBjb2RlID09PSAweDIwMjlcbn1cblxudmFyIG5vbkFTQ0lJd2hpdGVzcGFjZSA9IC9bXFx1MTY4MFxcdTE4MGVcXHUyMDAwLVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHVmZWZmXS9cblxudmFyIHNraXBXaGl0ZVNwYWNlID0gLyg/Olxcc3xcXC9cXC8uKnxcXC9cXCpbXl0qP1xcKlxcLykqL2dcblxuZnVuY3Rpb24gaXNBcnJheShvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgQXJyYXldXCJcbn1cblxuLy8gQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS5cblxuZnVuY3Rpb24gaGFzKG9iaiwgcHJvcE5hbWUpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3BOYW1lKVxufVxuXG4vLyBUaGVzZSBhcmUgdXNlZCB3aGVuIGBvcHRpb25zLmxvY2F0aW9uc2AgaXMgb24sIGZvciB0aGVcbi8vIGBzdGFydExvY2AgYW5kIGBlbmRMb2NgIHByb3BlcnRpZXMuXG5cbnZhciBQb3NpdGlvbiA9IGZ1bmN0aW9uIFBvc2l0aW9uKGxpbmUsIGNvbCkge1xuICB0aGlzLmxpbmUgPSBsaW5lXG4gIHRoaXMuY29sdW1uID0gY29sXG59O1xuXG5Qb3NpdGlvbi5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0IChuKSB7XG4gIHJldHVybiBuZXcgUG9zaXRpb24odGhpcy5saW5lLCB0aGlzLmNvbHVtbiArIG4pXG59O1xuXG52YXIgU291cmNlTG9jYXRpb24gPSBmdW5jdGlvbiBTb3VyY2VMb2NhdGlvbihwLCBzdGFydCwgZW5kKSB7XG4gIHRoaXMuc3RhcnQgPSBzdGFydFxuICB0aGlzLmVuZCA9IGVuZFxuICBpZiAocC5zb3VyY2VGaWxlICE9PSBudWxsKSB0aGlzLnNvdXJjZSA9IHAuc291cmNlRmlsZVxufTtcblxuLy8gVGhlIGBnZXRMaW5lSW5mb2AgZnVuY3Rpb24gaXMgbW9zdGx5IHVzZWZ1bCB3aGVuIHRoZVxuLy8gYGxvY2F0aW9uc2Agb3B0aW9uIGlzIG9mZiAoZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMpIGFuZCB5b3Vcbi8vIHdhbnQgdG8gZmluZCB0aGUgbGluZS9jb2x1bW4gcG9zaXRpb24gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyXG4vLyBvZmZzZXQuIGBpbnB1dGAgc2hvdWxkIGJlIHRoZSBjb2RlIHN0cmluZyB0aGF0IHRoZSBvZmZzZXQgcmVmZXJzXG4vLyBpbnRvLlxuXG5mdW5jdGlvbiBnZXRMaW5lSW5mbyhpbnB1dCwgb2Zmc2V0KSB7XG4gIGZvciAodmFyIGxpbmUgPSAxLCBjdXIgPSAwOzspIHtcbiAgICBsaW5lQnJlYWtHLmxhc3RJbmRleCA9IGN1clxuICAgIHZhciBtYXRjaCA9IGxpbmVCcmVha0cuZXhlYyhpbnB1dClcbiAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaW5kZXggPCBvZmZzZXQpIHtcbiAgICAgICsrbGluZVxuICAgICAgY3VyID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQb3NpdGlvbihsaW5lLCBvZmZzZXQgLSBjdXIpXG4gICAgfVxuICB9XG59XG5cbi8vIEEgc2Vjb25kIG9wdGlvbmFsIGFyZ3VtZW50IGNhbiBiZSBnaXZlbiB0byBmdXJ0aGVyIGNvbmZpZ3VyZVxuLy8gdGhlIHBhcnNlciBwcm9jZXNzLiBUaGVzZSBvcHRpb25zIGFyZSByZWNvZ25pemVkOlxuXG52YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIC8vIGBlY21hVmVyc2lvbmAgaW5kaWNhdGVzIHRoZSBFQ01BU2NyaXB0IHZlcnNpb24gdG8gcGFyc2UuIE11c3RcbiAgLy8gYmUgZWl0aGVyIDMsIDUsIDYgKDIwMTUpLCA3ICgyMDE2KSwgb3IgOCAoMjAxNykuIFRoaXMgaW5mbHVlbmNlcyBzdXBwb3J0XG4gIC8vIGZvciBzdHJpY3QgbW9kZSwgdGhlIHNldCBvZiByZXNlcnZlZCB3b3JkcywgYW5kIHN1cHBvcnQgZm9yXG4gIC8vIG5ldyBzeW50YXggZmVhdHVyZXMuIFRoZSBkZWZhdWx0IGlzIDcuXG4gIGVjbWFWZXJzaW9uOiA3LFxuICAvLyBgc291cmNlVHlwZWAgaW5kaWNhdGVzIHRoZSBtb2RlIHRoZSBjb2RlIHNob3VsZCBiZSBwYXJzZWQgaW4uXG4gIC8vIENhbiBiZSBlaXRoZXIgYFwic2NyaXB0XCJgIG9yIGBcIm1vZHVsZVwiYC4gVGhpcyBpbmZsdWVuY2VzIGdsb2JhbFxuICAvLyBzdHJpY3QgbW9kZSBhbmQgcGFyc2luZyBvZiBgaW1wb3J0YCBhbmQgYGV4cG9ydGAgZGVjbGFyYXRpb25zLlxuICBzb3VyY2VUeXBlOiBcInNjcmlwdFwiLFxuICAvLyBgb25JbnNlcnRlZFNlbWljb2xvbmAgY2FuIGJlIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZFxuICAvLyB3aGVuIGEgc2VtaWNvbG9uIGlzIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQuIEl0IHdpbGwgYmUgcGFzc2VkXG4gIC8vIHRoIHBvc2l0aW9uIG9mIHRoZSBjb21tYSBhcyBhbiBvZmZzZXQsIGFuZCBpZiBgbG9jYXRpb25zYCBpc1xuICAvLyBlbmFibGVkLCBpdCBpcyBnaXZlbiB0aGUgbG9jYXRpb24gYXMgYSBge2xpbmUsIGNvbHVtbn1gIG9iamVjdFxuICAvLyBhcyBzZWNvbmQgYXJndW1lbnQuXG4gIG9uSW5zZXJ0ZWRTZW1pY29sb246IG51bGwsXG4gIC8vIGBvblRyYWlsaW5nQ29tbWFgIGlzIHNpbWlsYXIgdG8gYG9uSW5zZXJ0ZWRTZW1pY29sb25gLCBidXQgZm9yXG4gIC8vIHRyYWlsaW5nIGNvbW1hcy5cbiAgb25UcmFpbGluZ0NvbW1hOiBudWxsLFxuICAvLyBCeSBkZWZhdWx0LCByZXNlcnZlZCB3b3JkcyBhcmUgb25seSBlbmZvcmNlZCBpZiBlY21hVmVyc2lvbiA+PSA1LlxuICAvLyBTZXQgYGFsbG93UmVzZXJ2ZWRgIHRvIGEgYm9vbGVhbiB2YWx1ZSB0byBleHBsaWNpdGx5IHR1cm4gdGhpcyBvblxuICAvLyBhbiBvZmYuIFdoZW4gdGhpcyBvcHRpb24gaGFzIHRoZSB2YWx1ZSBcIm5ldmVyXCIsIHJlc2VydmVkIHdvcmRzXG4gIC8vIGFuZCBrZXl3b3JkcyBjYW4gYWxzbyBub3QgYmUgdXNlZCBhcyBwcm9wZXJ0eSBuYW1lcy5cbiAgYWxsb3dSZXNlcnZlZDogbnVsbCxcbiAgLy8gV2hlbiBlbmFibGVkLCBhIHJldHVybiBhdCB0aGUgdG9wIGxldmVsIGlzIG5vdCBjb25zaWRlcmVkIGFuXG4gIC8vIGVycm9yLlxuICBhbGxvd1JldHVybk91dHNpZGVGdW5jdGlvbjogZmFsc2UsXG4gIC8vIFdoZW4gZW5hYmxlZCwgaW1wb3J0L2V4cG9ydCBzdGF0ZW1lbnRzIGFyZSBub3QgY29uc3RyYWluZWQgdG9cbiAgLy8gYXBwZWFyaW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0uXG4gIGFsbG93SW1wb3J0RXhwb3J0RXZlcnl3aGVyZTogZmFsc2UsXG4gIC8vIFdoZW4gZW5hYmxlZCwgaGFzaGJhbmcgZGlyZWN0aXZlIGluIHRoZSBiZWdpbm5pbmcgb2YgZmlsZVxuICAvLyBpcyBhbGxvd2VkIGFuZCB0cmVhdGVkIGFzIGEgbGluZSBjb21tZW50LlxuICBhbGxvd0hhc2hCYW5nOiBmYWxzZSxcbiAgLy8gV2hlbiBgbG9jYXRpb25zYCBpcyBvbiwgYGxvY2AgcHJvcGVydGllcyBob2xkaW5nIG9iamVjdHMgd2l0aFxuICAvLyBgc3RhcnRgIGFuZCBgZW5kYCBwcm9wZXJ0aWVzIGluIGB7bGluZSwgY29sdW1ufWAgZm9ybSAod2l0aFxuICAvLyBsaW5lIGJlaW5nIDEtYmFzZWQgYW5kIGNvbHVtbiAwLWJhc2VkKSB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZVxuICAvLyBub2Rlcy5cbiAgbG9jYXRpb25zOiBmYWxzZSxcbiAgLy8gQSBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIGFzIGBvblRva2VuYCBvcHRpb24sIHdoaWNoIHdpbGxcbiAgLy8gY2F1c2UgQWNvcm4gdG8gY2FsbCB0aGF0IGZ1bmN0aW9uIHdpdGggb2JqZWN0IGluIHRoZSBzYW1lXG4gIC8vIGZvcm1hdCBhcyB0b2tlbnMgcmV0dXJuZWQgZnJvbSBgdG9rZW5pemVyKCkuZ2V0VG9rZW4oKWAuIE5vdGVcbiAgLy8gdGhhdCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNhbGwgdGhlIHBhcnNlciBmcm9tIHRoZVxuICAvLyBjYWxsYmFja+KAlHRoYXQgd2lsbCBjb3JydXB0IGl0cyBpbnRlcm5hbCBzdGF0ZS5cbiAgb25Ub2tlbjogbnVsbCxcbiAgLy8gQSBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIGFzIGBvbkNvbW1lbnRgIG9wdGlvbiwgd2hpY2ggd2lsbFxuICAvLyBjYXVzZSBBY29ybiB0byBjYWxsIHRoYXQgZnVuY3Rpb24gd2l0aCBgKGJsb2NrLCB0ZXh0LCBzdGFydCxcbiAgLy8gZW5kKWAgcGFyYW1ldGVycyB3aGVuZXZlciBhIGNvbW1lbnQgaXMgc2tpcHBlZC4gYGJsb2NrYCBpcyBhXG4gIC8vIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgaXMgYSBibG9jayAoYC8qICovYCkgY29tbWVudCxcbiAgLy8gYHRleHRgIGlzIHRoZSBjb250ZW50IG9mIHRoZSBjb21tZW50LCBhbmQgYHN0YXJ0YCBhbmQgYGVuZGAgYXJlXG4gIC8vIGNoYXJhY3RlciBvZmZzZXRzIHRoYXQgZGVub3RlIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBjb21tZW50LlxuICAvLyBXaGVuIHRoZSBgbG9jYXRpb25zYCBvcHRpb24gaXMgb24sIHR3byBtb3JlIHBhcmFtZXRlcnMgYXJlXG4gIC8vIHBhc3NlZCwgdGhlIGZ1bGwgYHtsaW5lLCBjb2x1bW59YCBsb2NhdGlvbnMgb2YgdGhlIHN0YXJ0IGFuZFxuICAvLyBlbmQgb2YgdGhlIGNvbW1lbnRzLiBOb3RlIHRoYXQgeW91IGFyZSBub3QgYWxsb3dlZCB0byBjYWxsIHRoZVxuICAvLyBwYXJzZXIgZnJvbSB0aGUgY2FsbGJhY2vigJR0aGF0IHdpbGwgY29ycnVwdCBpdHMgaW50ZXJuYWwgc3RhdGUuXG4gIG9uQ29tbWVudDogbnVsbCxcbiAgLy8gTm9kZXMgaGF2ZSB0aGVpciBzdGFydCBhbmQgZW5kIGNoYXJhY3RlcnMgb2Zmc2V0cyByZWNvcmRlZCBpblxuICAvLyBgc3RhcnRgIGFuZCBgZW5kYCBwcm9wZXJ0aWVzIChkaXJlY3RseSBvbiB0aGUgbm9kZSwgcmF0aGVyIHRoYW5cbiAgLy8gdGhlIGBsb2NgIG9iamVjdCwgd2hpY2ggaG9sZHMgbGluZS9jb2x1bW4gZGF0YS4gVG8gYWxzbyBhZGQgYVxuICAvLyBbc2VtaS1zdGFuZGFyZGl6ZWRdW3JhbmdlXSBgcmFuZ2VgIHByb3BlcnR5IGhvbGRpbmcgYSBgW3N0YXJ0LFxuICAvLyBlbmRdYCBhcnJheSB3aXRoIHRoZSBzYW1lIG51bWJlcnMsIHNldCB0aGUgYHJhbmdlc2Agb3B0aW9uIHRvXG4gIC8vIGB0cnVlYC5cbiAgLy9cbiAgLy8gW3JhbmdlXTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1Njc4XG4gIHJhbmdlczogZmFsc2UsXG4gIC8vIEl0IGlzIHBvc3NpYmxlIHRvIHBhcnNlIG11bHRpcGxlIGZpbGVzIGludG8gYSBzaW5nbGUgQVNUIGJ5XG4gIC8vIHBhc3NpbmcgdGhlIHRyZWUgcHJvZHVjZWQgYnkgcGFyc2luZyB0aGUgZmlyc3QgZmlsZSBhc1xuICAvLyBgcHJvZ3JhbWAgb3B0aW9uIGluIHN1YnNlcXVlbnQgcGFyc2VzLiBUaGlzIHdpbGwgYWRkIHRoZVxuICAvLyB0b3BsZXZlbCBmb3JtcyBvZiB0aGUgcGFyc2VkIGZpbGUgdG8gdGhlIGBQcm9ncmFtYCAodG9wKSBub2RlXG4gIC8vIG9mIGFuIGV4aXN0aW5nIHBhcnNlIHRyZWUuXG4gIHByb2dyYW06IG51bGwsXG4gIC8vIFdoZW4gYGxvY2F0aW9uc2AgaXMgb24sIHlvdSBjYW4gcGFzcyB0aGlzIHRvIHJlY29yZCB0aGUgc291cmNlXG4gIC8vIGZpbGUgaW4gZXZlcnkgbm9kZSdzIGBsb2NgIG9iamVjdC5cbiAgc291cmNlRmlsZTogbnVsbCxcbiAgLy8gVGhpcyB2YWx1ZSwgaWYgZ2l2ZW4sIGlzIHN0b3JlZCBpbiBldmVyeSBub2RlLCB3aGV0aGVyXG4gIC8vIGBsb2NhdGlvbnNgIGlzIG9uIG9yIG9mZi5cbiAgZGlyZWN0U291cmNlRmlsZTogbnVsbCxcbiAgLy8gV2hlbiBlbmFibGVkLCBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb25zIGFyZSByZXByZXNlbnRlZCBieVxuICAvLyAobm9uLXN0YW5kYXJkKSBQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiBub2Rlc1xuICBwcmVzZXJ2ZVBhcmVuczogZmFsc2UsXG4gIHBsdWdpbnM6IHt9XG59XG5cbi8vIEludGVycHJldCBhbmQgZGVmYXVsdCBhbiBvcHRpb25zIG9iamVjdFxuXG5mdW5jdGlvbiBnZXRPcHRpb25zKG9wdHMpIHtcbiAgdmFyIG9wdGlvbnMgPSB7fVxuXG4gIGZvciAodmFyIG9wdCBpbiBkZWZhdWx0T3B0aW9ucylcbiAgICBvcHRpb25zW29wdF0gPSBvcHRzICYmIGhhcyhvcHRzLCBvcHQpID8gb3B0c1tvcHRdIDogZGVmYXVsdE9wdGlvbnNbb3B0XVxuXG4gIGlmIChvcHRpb25zLmVjbWFWZXJzaW9uID49IDIwMTUpXG4gICAgb3B0aW9ucy5lY21hVmVyc2lvbiAtPSAyMDA5XG5cbiAgaWYgKG9wdGlvbnMuYWxsb3dSZXNlcnZlZCA9PSBudWxsKVxuICAgIG9wdGlvbnMuYWxsb3dSZXNlcnZlZCA9IG9wdGlvbnMuZWNtYVZlcnNpb24gPCA1XG5cbiAgaWYgKGlzQXJyYXkob3B0aW9ucy5vblRva2VuKSkge1xuICAgIHZhciB0b2tlbnMgPSBvcHRpb25zLm9uVG9rZW5cbiAgICBvcHRpb25zLm9uVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHsgcmV0dXJuIHRva2Vucy5wdXNoKHRva2VuKTsgfVxuICB9XG4gIGlmIChpc0FycmF5KG9wdGlvbnMub25Db21tZW50KSlcbiAgICBvcHRpb25zLm9uQ29tbWVudCA9IHB1c2hDb21tZW50KG9wdGlvbnMsIG9wdGlvbnMub25Db21tZW50KVxuXG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHB1c2hDb21tZW50KG9wdGlvbnMsIGFycmF5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoYmxvY2ssIHRleHQsIHN0YXJ0LCBlbmQsIHN0YXJ0TG9jLCBlbmRMb2MpIHtcbiAgICB2YXIgY29tbWVudCA9IHtcbiAgICAgIHR5cGU6IGJsb2NrID8gJ0Jsb2NrJyA6ICdMaW5lJyxcbiAgICAgIHZhbHVlOiB0ZXh0LFxuICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgZW5kOiBlbmRcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubG9jYXRpb25zKVxuICAgICAgY29tbWVudC5sb2MgPSBuZXcgU291cmNlTG9jYXRpb24odGhpcywgc3RhcnRMb2MsIGVuZExvYylcbiAgICBpZiAob3B0aW9ucy5yYW5nZXMpXG4gICAgICBjb21tZW50LnJhbmdlID0gW3N0YXJ0LCBlbmRdXG4gICAgYXJyYXkucHVzaChjb21tZW50KVxuICB9XG59XG5cbi8vIFJlZ2lzdGVyZWQgcGx1Z2luc1xudmFyIHBsdWdpbnMgPSB7fVxuXG5mdW5jdGlvbiBrZXl3b3JkUmVnZXhwKHdvcmRzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKFwiXihcIiArIHdvcmRzLnJlcGxhY2UoLyAvZywgXCJ8XCIpICsgXCIpJFwiKVxufVxuXG52YXIgUGFyc2VyID0gZnVuY3Rpb24gUGFyc2VyKG9wdGlvbnMsIGlucHV0LCBzdGFydFBvcykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25zKVxuICB0aGlzLnNvdXJjZUZpbGUgPSBvcHRpb25zLnNvdXJjZUZpbGVcbiAgdGhpcy5rZXl3b3JkcyA9IGtleXdvcmRSZWdleHAoa2V5d29yZHNbb3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ID8gNiA6IDVdKVxuICB2YXIgcmVzZXJ2ZWQgPSBcIlwiXG4gIGlmICghb3B0aW9ucy5hbGxvd1Jlc2VydmVkKSB7XG4gICAgZm9yICh2YXIgdiA9IG9wdGlvbnMuZWNtYVZlcnNpb247OyB2LS0pXG4gICAgICBpZiAocmVzZXJ2ZWQgPSByZXNlcnZlZFdvcmRzW3ZdKSBicmVha1xuICAgIGlmIChvcHRpb25zLnNvdXJjZVR5cGUgPT0gXCJtb2R1bGVcIikgcmVzZXJ2ZWQgKz0gXCIgYXdhaXRcIlxuICB9XG4gIHRoaXMucmVzZXJ2ZWRXb3JkcyA9IGtleXdvcmRSZWdleHAocmVzZXJ2ZWQpXG4gIHZhciByZXNlcnZlZFN0cmljdCA9IChyZXNlcnZlZCA/IHJlc2VydmVkICsgXCIgXCIgOiBcIlwiKSArIHJlc2VydmVkV29yZHMuc3RyaWN0XG4gIHRoaXMucmVzZXJ2ZWRXb3Jkc1N0cmljdCA9IGtleXdvcmRSZWdleHAocmVzZXJ2ZWRTdHJpY3QpXG4gIHRoaXMucmVzZXJ2ZWRXb3Jkc1N0cmljdEJpbmQgPSBrZXl3b3JkUmVnZXhwKHJlc2VydmVkU3RyaWN0ICsgXCIgXCIgKyByZXNlcnZlZFdvcmRzLnN0cmljdEJpbmQpXG4gIHRoaXMuaW5wdXQgPSBTdHJpbmcoaW5wdXQpXG5cbiAgLy8gVXNlZCB0byBzaWduYWwgdG8gY2FsbGVycyBvZiBgcmVhZFdvcmQxYCB3aGV0aGVyIHRoZSB3b3JkXG4gIC8vIGNvbnRhaW5lZCBhbnkgZXNjYXBlIHNlcXVlbmNlcy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3b3JkcyB3aXRoXG4gIC8vIGVzY2FwZSBzZXF1ZW5jZXMgbXVzdCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMga2V5d29yZHMuXG4gIHRoaXMuY29udGFpbnNFc2MgPSBmYWxzZVxuXG4gIC8vIExvYWQgcGx1Z2luc1xuICB0aGlzLmxvYWRQbHVnaW5zKG9wdGlvbnMucGx1Z2lucylcblxuICAvLyBTZXQgdXAgdG9rZW4gc3RhdGVcblxuICAvLyBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgdG9rZW5pemVyIGluIHRoZSBpbnB1dC5cbiAgaWYgKHN0YXJ0UG9zKSB7XG4gICAgdGhpcy5wb3MgPSBzdGFydFBvc1xuICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbnB1dC5sYXN0SW5kZXhPZihcIlxcblwiLCBzdGFydFBvcyAtIDEpICsgMVxuICAgIHRoaXMuY3VyTGluZSA9IHRoaXMuaW5wdXQuc2xpY2UoMCwgdGhpcy5saW5lU3RhcnQpLnNwbGl0KGxpbmVCcmVhaykubGVuZ3RoXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5wb3MgPSB0aGlzLmxpbmVTdGFydCA9IDBcbiAgICB0aGlzLmN1ckxpbmUgPSAxXG4gIH1cblxuICAvLyBQcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IHRva2VuOlxuICAvLyBJdHMgdHlwZVxuICB0aGlzLnR5cGUgPSB0dC5lb2ZcbiAgLy8gRm9yIHRva2VucyB0aGF0IGluY2x1ZGUgbW9yZSBpbmZvcm1hdGlvbiB0aGFuIHRoZWlyIHR5cGUsIHRoZSB2YWx1ZVxuICB0aGlzLnZhbHVlID0gbnVsbFxuICAvLyBJdHMgc3RhcnQgYW5kIGVuZCBvZmZzZXRcbiAgdGhpcy5zdGFydCA9IHRoaXMuZW5kID0gdGhpcy5wb3NcbiAgLy8gQW5kLCBpZiBsb2NhdGlvbnMgYXJlIHVzZWQsIHRoZSB7bGluZSwgY29sdW1ufSBvYmplY3RcbiAgLy8gY29ycmVzcG9uZGluZyB0byB0aG9zZSBvZmZzZXRzXG4gIHRoaXMuc3RhcnRMb2MgPSB0aGlzLmVuZExvYyA9IHRoaXMuY3VyUG9zaXRpb24oKVxuXG4gIC8vIFBvc2l0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgcHJldmlvdXMgdG9rZW5cbiAgdGhpcy5sYXN0VG9rRW5kTG9jID0gdGhpcy5sYXN0VG9rU3RhcnRMb2MgPSBudWxsXG4gIHRoaXMubGFzdFRva1N0YXJ0ID0gdGhpcy5sYXN0VG9rRW5kID0gdGhpcy5wb3NcblxuICAvLyBUaGUgY29udGV4dCBzdGFjayBpcyB1c2VkIHRvIHN1cGVyZmljaWFsbHkgdHJhY2sgc3ludGFjdGljXG4gIC8vIGNvbnRleHQgdG8gcHJlZGljdCB3aGV0aGVyIGEgcmVndWxhciBleHByZXNzaW9uIGlzIGFsbG93ZWQgaW4gYVxuICAvLyBnaXZlbiBwb3NpdGlvbi5cbiAgdGhpcy5jb250ZXh0ID0gdGhpcy5pbml0aWFsQ29udGV4dCgpXG4gIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlXG5cbiAgLy8gRmlndXJlIG91dCBpZiBpdCdzIGEgbW9kdWxlIGNvZGUuXG4gIHRoaXMuaW5Nb2R1bGUgPSBvcHRpb25zLnNvdXJjZVR5cGUgPT09IFwibW9kdWxlXCJcbiAgdGhpcy5zdHJpY3QgPSB0aGlzLmluTW9kdWxlIHx8IHRoaXMuc3RyaWN0RGlyZWN0aXZlKHRoaXMucG9zKVxuXG4gIC8vIFVzZWQgdG8gc2lnbmlmeSB0aGUgc3RhcnQgb2YgYSBwb3RlbnRpYWwgYXJyb3cgZnVuY3Rpb25cbiAgdGhpcy5wb3RlbnRpYWxBcnJvd0F0ID0gLTFcblxuICAvLyBGbGFncyB0byB0cmFjayB3aGV0aGVyIHdlIGFyZSBpbiBhIGZ1bmN0aW9uLCBhIGdlbmVyYXRvciwgYW4gYXN5bmMgZnVuY3Rpb24uXG4gIHRoaXMuaW5GdW5jdGlvbiA9IHRoaXMuaW5HZW5lcmF0b3IgPSB0aGlzLmluQXN5bmMgPSBmYWxzZVxuICAvLyBQb3NpdGlvbnMgdG8gZGVsYXllZC1jaGVjayB0aGF0IHlpZWxkL2F3YWl0IGRvZXMgbm90IGV4aXN0IGluIGRlZmF1bHQgcGFyYW1ldGVycy5cbiAgdGhpcy55aWVsZFBvcyA9IHRoaXMuYXdhaXRQb3MgPSAwXG4gIC8vIExhYmVscyBpbiBzY29wZS5cbiAgdGhpcy5sYWJlbHMgPSBbXVxuXG4gIC8vIElmIGVuYWJsZWQsIHNraXAgbGVhZGluZyBoYXNoYmFuZyBsaW5lLlxuICBpZiAodGhpcy5wb3MgPT09IDAgJiYgb3B0aW9ucy5hbGxvd0hhc2hCYW5nICYmIHRoaXMuaW5wdXQuc2xpY2UoMCwgMikgPT09ICcjIScpXG4gICAgdGhpcy5za2lwTGluZUNvbW1lbnQoMilcbn07XG5cbi8vIERFUFJFQ0FURUQgS2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdW50aWwgMy4wIGluIGNhc2UgYSBwbHVnaW4gdXNlcyB0aGVtXG5QYXJzZXIucHJvdG90eXBlLmlzS2V5d29yZCA9IGZ1bmN0aW9uIGlzS2V5d29yZCAod29yZCkgeyByZXR1cm4gdGhpcy5rZXl3b3Jkcy50ZXN0KHdvcmQpIH07XG5QYXJzZXIucHJvdG90eXBlLmlzUmVzZXJ2ZWRXb3JkID0gZnVuY3Rpb24gaXNSZXNlcnZlZFdvcmQgKHdvcmQpIHsgcmV0dXJuIHRoaXMucmVzZXJ2ZWRXb3Jkcy50ZXN0KHdvcmQpIH07XG5cblBhcnNlci5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kIChuYW1lLCBmKSB7XG4gIHRoaXNbbmFtZV0gPSBmKHRoaXNbbmFtZV0pXG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmxvYWRQbHVnaW5zID0gZnVuY3Rpb24gbG9hZFBsdWdpbnMgKHBsdWdpbkNvbmZpZ3MpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBmb3IgKHZhciBuYW1lIGluIHBsdWdpbkNvbmZpZ3MpIHtcbiAgICB2YXIgcGx1Z2luID0gcGx1Z2luc1tuYW1lXVxuICAgIGlmICghcGx1Z2luKSB0aHJvdyBuZXcgRXJyb3IoXCJQbHVnaW4gJ1wiICsgbmFtZSArIFwiJyBub3QgZm91bmRcIilcbiAgICBwbHVnaW4odGhpcyQxLCBwbHVnaW5Db25maWdzW25hbWVdKVxuICB9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UgKCkge1xuICB2YXIgbm9kZSA9IHRoaXMub3B0aW9ucy5wcm9ncmFtIHx8IHRoaXMuc3RhcnROb2RlKClcbiAgdGhpcy5uZXh0VG9rZW4oKVxuICByZXR1cm4gdGhpcy5wYXJzZVRvcExldmVsKG5vZGUpXG59O1xuXG52YXIgcHAgPSBQYXJzZXIucHJvdG90eXBlXG5cbi8vICMjIFBhcnNlciB1dGlsaXRpZXNcblxudmFyIGxpdGVyYWwgPSAvXig/OicoKD86W15cXCddfFxcLikqKSd8XCIoKD86W15cXFwiXXxcXC4pKilcInw7KS9cbnBwLnN0cmljdERpcmVjdGl2ZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGZvciAoOzspIHtcbiAgICBza2lwV2hpdGVTcGFjZS5sYXN0SW5kZXggPSBzdGFydFxuICAgIHN0YXJ0ICs9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcyQxLmlucHV0KVswXS5sZW5ndGhcbiAgICB2YXIgbWF0Y2ggPSBsaXRlcmFsLmV4ZWModGhpcyQxLmlucHV0LnNsaWNlKHN0YXJ0KSlcbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoKG1hdGNoWzFdIHx8IG1hdGNoWzJdKSA9PSBcInVzZSBzdHJpY3RcIikgcmV0dXJuIHRydWVcbiAgICBzdGFydCArPSBtYXRjaFswXS5sZW5ndGhcbiAgfVxufVxuXG4vLyBQcmVkaWNhdGUgdGhhdCB0ZXN0cyB3aGV0aGVyIHRoZSBuZXh0IHRva2VuIGlzIG9mIHRoZSBnaXZlblxuLy8gdHlwZSwgYW5kIGlmIHllcywgY29uc3VtZXMgaXQgYXMgYSBzaWRlIGVmZmVjdC5cblxucHAuZWF0ID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAodGhpcy50eXBlID09PSB0eXBlKSB7XG4gICAgdGhpcy5uZXh0KClcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8vIFRlc3RzIHdoZXRoZXIgcGFyc2VkIHRva2VuIGlzIGEgY29udGV4dHVhbCBrZXl3b3JkLlxuXG5wcC5pc0NvbnRleHR1YWwgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLnR5cGUgPT09IHR0Lm5hbWUgJiYgdGhpcy52YWx1ZSA9PT0gbmFtZVxufVxuXG4vLyBDb25zdW1lcyBjb250ZXh0dWFsIGtleXdvcmQgaWYgcG9zc2libGUuXG5cbnBwLmVhdENvbnRleHR1YWwgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLnZhbHVlID09PSBuYW1lICYmIHRoaXMuZWF0KHR0Lm5hbWUpXG59XG5cbi8vIEFzc2VydHMgdGhhdCBmb2xsb3dpbmcgdG9rZW4gaXMgZ2l2ZW4gY29udGV4dHVhbCBrZXl3b3JkLlxuXG5wcC5leHBlY3RDb250ZXh0dWFsID0gZnVuY3Rpb24obmFtZSkge1xuICBpZiAoIXRoaXMuZWF0Q29udGV4dHVhbChuYW1lKSkgdGhpcy51bmV4cGVjdGVkKClcbn1cblxuLy8gVGVzdCB3aGV0aGVyIGEgc2VtaWNvbG9uIGNhbiBiZSBpbnNlcnRlZCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi5cblxucHAuY2FuSW5zZXJ0U2VtaWNvbG9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnR5cGUgPT09IHR0LmVvZiB8fFxuICAgIHRoaXMudHlwZSA9PT0gdHQuYnJhY2VSIHx8XG4gICAgbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tFbmQsIHRoaXMuc3RhcnQpKVxufVxuXG5wcC5pbnNlcnRTZW1pY29sb24gPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm9uSW5zZXJ0ZWRTZW1pY29sb24pXG4gICAgICB0aGlzLm9wdGlvbnMub25JbnNlcnRlZFNlbWljb2xvbih0aGlzLmxhc3RUb2tFbmQsIHRoaXMubGFzdFRva0VuZExvYylcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbi8vIENvbnN1bWUgYSBzZW1pY29sb24sIG9yLCBmYWlsaW5nIHRoYXQsIHNlZSBpZiB3ZSBhcmUgYWxsb3dlZCB0b1xuLy8gcHJldGVuZCB0aGF0IHRoZXJlIGlzIGEgc2VtaWNvbG9uIGF0IHRoaXMgcG9zaXRpb24uXG5cbnBwLnNlbWljb2xvbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuZWF0KHR0LnNlbWkpICYmICF0aGlzLmluc2VydFNlbWljb2xvbigpKSB0aGlzLnVuZXhwZWN0ZWQoKVxufVxuXG5wcC5hZnRlclRyYWlsaW5nQ29tbWEgPSBmdW5jdGlvbih0b2tUeXBlLCBub3ROZXh0KSB7XG4gIGlmICh0aGlzLnR5cGUgPT0gdG9rVHlwZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMub25UcmFpbGluZ0NvbW1hKVxuICAgICAgdGhpcy5vcHRpb25zLm9uVHJhaWxpbmdDb21tYSh0aGlzLmxhc3RUb2tTdGFydCwgdGhpcy5sYXN0VG9rU3RhcnRMb2MpXG4gICAgaWYgKCFub3ROZXh0KVxuICAgICAgdGhpcy5uZXh0KClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbi8vIEV4cGVjdCBhIHRva2VuIG9mIGEgZ2l2ZW4gdHlwZS4gSWYgZm91bmQsIGNvbnN1bWUgaXQsIG90aGVyd2lzZSxcbi8vIHJhaXNlIGFuIHVuZXhwZWN0ZWQgdG9rZW4gZXJyb3IuXG5cbnBwLmV4cGVjdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdGhpcy5lYXQodHlwZSkgfHwgdGhpcy51bmV4cGVjdGVkKClcbn1cblxuLy8gUmFpc2UgYW4gdW5leHBlY3RlZCB0b2tlbiBlcnJvci5cblxucHAudW5leHBlY3RlZCA9IGZ1bmN0aW9uKHBvcykge1xuICB0aGlzLnJhaXNlKHBvcyAhPSBudWxsID8gcG9zIDogdGhpcy5zdGFydCwgXCJVbmV4cGVjdGVkIHRva2VuXCIpXG59XG5cbnZhciBEZXN0cnVjdHVyaW5nRXJyb3JzID0gZnVuY3Rpb24gRGVzdHJ1Y3R1cmluZ0Vycm9ycygpIHtcbiAgdGhpcy5zaG9ydGhhbmRBc3NpZ24gPSB0aGlzLnRyYWlsaW5nQ29tbWEgPSB0aGlzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPSB0aGlzLnBhcmVudGhlc2l6ZWRCaW5kID0gLTFcbn07XG5cbnBwLmNoZWNrUGF0dGVybkVycm9ycyA9IGZ1bmN0aW9uKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGlzQXNzaWduKSB7XG4gIGlmICghcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykgcmV0dXJuXG4gIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPiAtMSlcbiAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hLCBcIkNvbW1hIGlzIG5vdCBwZXJtaXR0ZWQgYWZ0ZXIgdGhlIHJlc3QgZWxlbWVudFwiKVxuICB2YXIgcGFyZW5zID0gaXNBc3NpZ24gPyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gOiByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kXG4gIGlmIChwYXJlbnMgPiAtMSkgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHBhcmVucywgXCJQYXJlbnRoZXNpemVkIHBhdHRlcm5cIilcbn1cblxucHAuY2hlY2tFeHByZXNzaW9uRXJyb3JzID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgYW5kVGhyb3cpIHtcbiAgdmFyIHBvcyA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgPyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbiA6IC0xXG4gIGlmICghYW5kVGhyb3cpIHJldHVybiBwb3MgPj0gMFxuICBpZiAocG9zID4gLTEpIHRoaXMucmFpc2UocG9zLCBcIlNob3J0aGFuZCBwcm9wZXJ0eSBhc3NpZ25tZW50cyBhcmUgdmFsaWQgb25seSBpbiBkZXN0cnVjdHVyaW5nIHBhdHRlcm5zXCIpXG59XG5cbnBwLmNoZWNrWWllbGRBd2FpdEluRGVmYXVsdFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy55aWVsZFBvcyAmJiAoIXRoaXMuYXdhaXRQb3MgfHwgdGhpcy55aWVsZFBvcyA8IHRoaXMuYXdhaXRQb3MpKVxuICAgIHRoaXMucmFpc2UodGhpcy55aWVsZFBvcywgXCJZaWVsZCBleHByZXNzaW9uIGNhbm5vdCBiZSBhIGRlZmF1bHQgdmFsdWVcIilcbiAgaWYgKHRoaXMuYXdhaXRQb3MpXG4gICAgdGhpcy5yYWlzZSh0aGlzLmF3YWl0UG9zLCBcIkF3YWl0IGV4cHJlc3Npb24gY2Fubm90IGJlIGEgZGVmYXVsdCB2YWx1ZVwiKVxufVxuXG5wcC5pc1NpbXBsZUFzc2lnblRhcmdldCA9IGZ1bmN0aW9uKGV4cHIpIHtcbiAgaWYgKGV4cHIudHlwZSA9PT0gXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiKVxuICAgIHJldHVybiB0aGlzLmlzU2ltcGxlQXNzaWduVGFyZ2V0KGV4cHIuZXhwcmVzc2lvbilcbiAgcmV0dXJuIGV4cHIudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgfHwgZXhwci50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIlxufVxuXG52YXIgcHAkMSA9IFBhcnNlci5wcm90b3R5cGVcblxuLy8gIyMjIFN0YXRlbWVudCBwYXJzaW5nXG5cbi8vIFBhcnNlIGEgcHJvZ3JhbS4gSW5pdGlhbGl6ZXMgdGhlIHBhcnNlciwgcmVhZHMgYW55IG51bWJlciBvZlxuLy8gc3RhdGVtZW50cywgYW5kIHdyYXBzIHRoZW0gaW4gYSBQcm9ncmFtIG5vZGUuICBPcHRpb25hbGx5IHRha2VzIGFcbi8vIGBwcm9ncmFtYCBhcmd1bWVudC4gIElmIHByZXNlbnQsIHRoZSBzdGF0ZW1lbnRzIHdpbGwgYmUgYXBwZW5kZWRcbi8vIHRvIGl0cyBib2R5IGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgbm9kZS5cblxucHAkMS5wYXJzZVRvcExldmVsID0gZnVuY3Rpb24obm9kZSkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgZXhwb3J0cyA9IHt9XG4gIGlmICghbm9kZS5ib2R5KSBub2RlLmJvZHkgPSBbXVxuICB3aGlsZSAodGhpcy50eXBlICE9PSB0dC5lb2YpIHtcbiAgICB2YXIgc3RtdCA9IHRoaXMkMS5wYXJzZVN0YXRlbWVudCh0cnVlLCB0cnVlLCBleHBvcnRzKVxuICAgIG5vZGUuYm9keS5wdXNoKHN0bXQpXG4gIH1cbiAgdGhpcy5uZXh0KClcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgbm9kZS5zb3VyY2VUeXBlID0gdGhpcy5vcHRpb25zLnNvdXJjZVR5cGVcbiAgfVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiUHJvZ3JhbVwiKVxufVxuXG52YXIgbG9vcExhYmVsID0ge2tpbmQ6IFwibG9vcFwifTtcbnZhciBzd2l0Y2hMYWJlbCA9IHtraW5kOiBcInN3aXRjaFwifTtcbnBwJDEuaXNMZXQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMudHlwZSAhPT0gdHQubmFtZSB8fCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA2IHx8IHRoaXMudmFsdWUgIT0gXCJsZXRcIikgcmV0dXJuIGZhbHNlXG4gIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHRoaXMucG9zXG4gIHZhciBza2lwID0gc2tpcFdoaXRlU3BhY2UuZXhlYyh0aGlzLmlucHV0KVxuICB2YXIgbmV4dCA9IHRoaXMucG9zICsgc2tpcFswXS5sZW5ndGgsIG5leHRDaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdChuZXh0KVxuICBpZiAobmV4dENoID09PSA5MSB8fCBuZXh0Q2ggPT0gMTIzKSByZXR1cm4gdHJ1ZSAvLyAneycgYW5kICdbJ1xuICBpZiAoaXNJZGVudGlmaWVyU3RhcnQobmV4dENoLCB0cnVlKSkge1xuICAgIGZvciAodmFyIHBvcyA9IG5leHQgKyAxOyBpc0lkZW50aWZpZXJDaGFyKHRoaXMuaW5wdXQuY2hhckNvZGVBdChwb3MpLCB0cnVlKTsgKytwb3MpIHt9XG4gICAgdmFyIGlkZW50ID0gdGhpcy5pbnB1dC5zbGljZShuZXh0LCBwb3MpXG4gICAgaWYgKCF0aGlzLmlzS2V5d29yZChpZGVudCkpIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGNoZWNrICdhc3luYyBbbm8gTGluZVRlcm1pbmF0b3IgaGVyZV0gZnVuY3Rpb24nXG4vLyAtICdhc3luYyAvKmZvbyovIGZ1bmN0aW9uJyBpcyBPSy5cbi8vIC0gJ2FzeW5jIC8qXFxuKi8gZnVuY3Rpb24nIGlzIGludmFsaWQuXG5wcCQxLmlzQXN5bmNGdW5jdGlvbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy50eXBlICE9PSB0dC5uYW1lIHx8IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA8IDggfHwgdGhpcy52YWx1ZSAhPSBcImFzeW5jXCIpXG4gICAgcmV0dXJuIGZhbHNlXG5cbiAgc2tpcFdoaXRlU3BhY2UubGFzdEluZGV4ID0gdGhpcy5wb3NcbiAgdmFyIHNraXAgPSBza2lwV2hpdGVTcGFjZS5leGVjKHRoaXMuaW5wdXQpXG4gIHZhciBuZXh0ID0gdGhpcy5wb3MgKyBza2lwWzBdLmxlbmd0aFxuICByZXR1cm4gIWxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5wb3MsIG5leHQpKSAmJlxuICAgIHRoaXMuaW5wdXQuc2xpY2UobmV4dCwgbmV4dCArIDgpID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAobmV4dCArIDggPT0gdGhpcy5pbnB1dC5sZW5ndGggfHwgIWlzSWRlbnRpZmllckNoYXIodGhpcy5pbnB1dC5jaGFyQXQobmV4dCArIDgpKSlcbn1cblxuLy8gUGFyc2UgYSBzaW5nbGUgc3RhdGVtZW50LlxuLy9cbi8vIElmIGV4cGVjdGluZyBhIHN0YXRlbWVudCBhbmQgZmluZGluZyBhIHNsYXNoIG9wZXJhdG9yLCBwYXJzZSBhXG4vLyByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbC4gVGhpcyBpcyB0byBoYW5kbGUgY2FzZXMgbGlrZVxuLy8gYGlmIChmb28pIC9ibGFoLy5leGVjKGZvbylgLCB3aGVyZSBsb29raW5nIGF0IHRoZSBwcmV2aW91cyB0b2tlblxuLy8gZG9lcyBub3QgaGVscC5cblxucHAkMS5wYXJzZVN0YXRlbWVudCA9IGZ1bmN0aW9uKGRlY2xhcmF0aW9uLCB0b3BMZXZlbCwgZXhwb3J0cykge1xuICB2YXIgc3RhcnR0eXBlID0gdGhpcy50eXBlLCBub2RlID0gdGhpcy5zdGFydE5vZGUoKSwga2luZFxuXG4gIGlmICh0aGlzLmlzTGV0KCkpIHtcbiAgICBzdGFydHR5cGUgPSB0dC5fdmFyXG4gICAga2luZCA9IFwibGV0XCJcbiAgfVxuXG4gIC8vIE1vc3QgdHlwZXMgb2Ygc3RhdGVtZW50cyBhcmUgcmVjb2duaXplZCBieSB0aGUga2V5d29yZCB0aGV5XG4gIC8vIHN0YXJ0IHdpdGguIE1hbnkgYXJlIHRyaXZpYWwgdG8gcGFyc2UsIHNvbWUgcmVxdWlyZSBhIGJpdCBvZlxuICAvLyBjb21wbGV4aXR5LlxuXG4gIHN3aXRjaCAoc3RhcnR0eXBlKSB7XG4gIGNhc2UgdHQuX2JyZWFrOiBjYXNlIHR0Ll9jb250aW51ZTogcmV0dXJuIHRoaXMucGFyc2VCcmVha0NvbnRpbnVlU3RhdGVtZW50KG5vZGUsIHN0YXJ0dHlwZS5rZXl3b3JkKVxuICBjYXNlIHR0Ll9kZWJ1Z2dlcjogcmV0dXJuIHRoaXMucGFyc2VEZWJ1Z2dlclN0YXRlbWVudChub2RlKVxuICBjYXNlIHR0Ll9kbzogcmV0dXJuIHRoaXMucGFyc2VEb1N0YXRlbWVudChub2RlKVxuICBjYXNlIHR0Ll9mb3I6IHJldHVybiB0aGlzLnBhcnNlRm9yU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHQuX2Z1bmN0aW9uOlxuICAgIGlmICghZGVjbGFyYXRpb24gJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHRoaXMudW5leHBlY3RlZCgpXG4gICAgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvblN0YXRlbWVudChub2RlLCBmYWxzZSlcbiAgY2FzZSB0dC5fY2xhc3M6XG4gICAgaWYgKCFkZWNsYXJhdGlvbikgdGhpcy51bmV4cGVjdGVkKClcbiAgICByZXR1cm4gdGhpcy5wYXJzZUNsYXNzKG5vZGUsIHRydWUpXG4gIGNhc2UgdHQuX2lmOiByZXR1cm4gdGhpcy5wYXJzZUlmU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHQuX3JldHVybjogcmV0dXJuIHRoaXMucGFyc2VSZXR1cm5TdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0dC5fc3dpdGNoOiByZXR1cm4gdGhpcy5wYXJzZVN3aXRjaFN0YXRlbWVudChub2RlKVxuICBjYXNlIHR0Ll90aHJvdzogcmV0dXJuIHRoaXMucGFyc2VUaHJvd1N0YXRlbWVudChub2RlKVxuICBjYXNlIHR0Ll90cnk6IHJldHVybiB0aGlzLnBhcnNlVHJ5U3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHQuX2NvbnN0OiBjYXNlIHR0Ll92YXI6XG4gICAga2luZCA9IGtpbmQgfHwgdGhpcy52YWx1ZVxuICAgIGlmICghZGVjbGFyYXRpb24gJiYga2luZCAhPSBcInZhclwiKSB0aGlzLnVuZXhwZWN0ZWQoKVxuICAgIHJldHVybiB0aGlzLnBhcnNlVmFyU3RhdGVtZW50KG5vZGUsIGtpbmQpXG4gIGNhc2UgdHQuX3doaWxlOiByZXR1cm4gdGhpcy5wYXJzZVdoaWxlU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHQuX3dpdGg6IHJldHVybiB0aGlzLnBhcnNlV2l0aFN0YXRlbWVudChub2RlKVxuICBjYXNlIHR0LmJyYWNlTDogcmV0dXJuIHRoaXMucGFyc2VCbG9jaygpXG4gIGNhc2UgdHQuc2VtaTogcmV0dXJuIHRoaXMucGFyc2VFbXB0eVN0YXRlbWVudChub2RlKVxuICBjYXNlIHR0Ll9leHBvcnQ6XG4gIGNhc2UgdHQuX2ltcG9ydDpcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd0ltcG9ydEV4cG9ydEV2ZXJ5d2hlcmUpIHtcbiAgICAgIGlmICghdG9wTGV2ZWwpXG4gICAgICAgIHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCInaW1wb3J0JyBhbmQgJ2V4cG9ydCcgbWF5IG9ubHkgYXBwZWFyIGF0IHRoZSB0b3AgbGV2ZWxcIilcbiAgICAgIGlmICghdGhpcy5pbk1vZHVsZSlcbiAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIidpbXBvcnQnIGFuZCAnZXhwb3J0JyBtYXkgYXBwZWFyIG9ubHkgd2l0aCAnc291cmNlVHlwZTogbW9kdWxlJ1wiKVxuICAgIH1cbiAgICByZXR1cm4gc3RhcnR0eXBlID09PSB0dC5faW1wb3J0ID8gdGhpcy5wYXJzZUltcG9ydChub2RlKSA6IHRoaXMucGFyc2VFeHBvcnQobm9kZSwgZXhwb3J0cylcblxuICAgIC8vIElmIHRoZSBzdGF0ZW1lbnQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHN0YXRlbWVudCBrZXl3b3JkIG9yIGFcbiAgICAvLyBicmFjZSwgaXQncyBhbiBFeHByZXNzaW9uU3RhdGVtZW50IG9yIExhYmVsZWRTdGF0ZW1lbnQuIFdlXG4gICAgLy8gc2ltcGx5IHN0YXJ0IHBhcnNpbmcgYW4gZXhwcmVzc2lvbiwgYW5kIGFmdGVyd2FyZHMsIGlmIHRoZVxuICAgIC8vIG5leHQgdG9rZW4gaXMgYSBjb2xvbiBhbmQgdGhlIGV4cHJlc3Npb24gd2FzIGEgc2ltcGxlXG4gICAgLy8gSWRlbnRpZmllciBub2RlLCB3ZSBzd2l0Y2ggdG8gaW50ZXJwcmV0aW5nIGl0IGFzIGEgbGFiZWwuXG4gIGRlZmF1bHQ6XG4gICAgaWYgKHRoaXMuaXNBc3luY0Z1bmN0aW9uKCkgJiYgZGVjbGFyYXRpb24pIHtcbiAgICAgIHRoaXMubmV4dCgpXG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uU3RhdGVtZW50KG5vZGUsIHRydWUpXG4gICAgfVxuXG4gICAgdmFyIG1heWJlTmFtZSA9IHRoaXMudmFsdWUsIGV4cHIgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpXG4gICAgaWYgKHN0YXJ0dHlwZSA9PT0gdHQubmFtZSAmJiBleHByLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmIHRoaXMuZWF0KHR0LmNvbG9uKSlcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlTGFiZWxlZFN0YXRlbWVudChub2RlLCBtYXliZU5hbWUsIGV4cHIpXG4gICAgZWxzZSByZXR1cm4gdGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSwgZXhwcilcbiAgfVxufVxuXG5wcCQxLnBhcnNlQnJlYWtDb250aW51ZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIGtleXdvcmQpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIGlzQnJlYWsgPSBrZXl3b3JkID09IFwiYnJlYWtcIlxuICB0aGlzLm5leHQoKVxuICBpZiAodGhpcy5lYXQodHQuc2VtaSkgfHwgdGhpcy5pbnNlcnRTZW1pY29sb24oKSkgbm9kZS5sYWJlbCA9IG51bGxcbiAgZWxzZSBpZiAodGhpcy50eXBlICE9PSB0dC5uYW1lKSB0aGlzLnVuZXhwZWN0ZWQoKVxuICBlbHNlIHtcbiAgICBub2RlLmxhYmVsID0gdGhpcy5wYXJzZUlkZW50KClcbiAgICB0aGlzLnNlbWljb2xvbigpXG4gIH1cblxuICAvLyBWZXJpZnkgdGhhdCB0aGVyZSBpcyBhbiBhY3R1YWwgZGVzdGluYXRpb24gdG8gYnJlYWsgb3JcbiAgLy8gY29udGludWUgdG8uXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYWJlbHMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgbGFiID0gdGhpcyQxLmxhYmVsc1tpXVxuICAgIGlmIChub2RlLmxhYmVsID09IG51bGwgfHwgbGFiLm5hbWUgPT09IG5vZGUubGFiZWwubmFtZSkge1xuICAgICAgaWYgKGxhYi5raW5kICE9IG51bGwgJiYgKGlzQnJlYWsgfHwgbGFiLmtpbmQgPT09IFwibG9vcFwiKSkgYnJlYWtcbiAgICAgIGlmIChub2RlLmxhYmVsICYmIGlzQnJlYWspIGJyZWFrXG4gICAgfVxuICB9XG4gIGlmIChpID09PSB0aGlzLmxhYmVscy5sZW5ndGgpIHRoaXMucmFpc2Uobm9kZS5zdGFydCwgXCJVbnN5bnRhY3RpYyBcIiArIGtleXdvcmQpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgaXNCcmVhayA/IFwiQnJlYWtTdGF0ZW1lbnRcIiA6IFwiQ29udGludWVTdGF0ZW1lbnRcIilcbn1cblxucHAkMS5wYXJzZURlYnVnZ2VyU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKVxuICB0aGlzLnNlbWljb2xvbigpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJEZWJ1Z2dlclN0YXRlbWVudFwiKVxufVxuXG5wcCQxLnBhcnNlRG9TdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpXG4gIHRoaXMubGFiZWxzLnB1c2gobG9vcExhYmVsKVxuICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KGZhbHNlKVxuICB0aGlzLmxhYmVscy5wb3AoKVxuICB0aGlzLmV4cGVjdCh0dC5fd2hpbGUpXG4gIG5vZGUudGVzdCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpXG4gICAgdGhpcy5lYXQodHQuc2VtaSlcbiAgZWxzZVxuICAgIHRoaXMuc2VtaWNvbG9uKClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkRvV2hpbGVTdGF0ZW1lbnRcIilcbn1cblxuLy8gRGlzYW1iaWd1YXRpbmcgYmV0d2VlbiBhIGBmb3JgIGFuZCBhIGBmb3JgL2BpbmAgb3IgYGZvcmAvYG9mYFxuLy8gbG9vcCBpcyBub24tdHJpdmlhbC4gQmFzaWNhbGx5LCB3ZSBoYXZlIHRvIHBhcnNlIHRoZSBpbml0IGB2YXJgXG4vLyBzdGF0ZW1lbnQgb3IgZXhwcmVzc2lvbiwgZGlzYWxsb3dpbmcgdGhlIGBpbmAgb3BlcmF0b3IgKHNlZVxuLy8gdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gYHBhcnNlRXhwcmVzc2lvbmApLCBhbmQgdGhlbiBjaGVja1xuLy8gd2hldGhlciB0aGUgbmV4dCB0b2tlbiBpcyBgaW5gIG9yIGBvZmAuIFdoZW4gdGhlcmUgaXMgbm8gaW5pdFxuLy8gcGFydCAoc2VtaWNvbG9uIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzKSwgaXRcbi8vIGlzIGEgcmVndWxhciBgZm9yYCBsb29wLlxuXG5wcCQxLnBhcnNlRm9yU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKVxuICB0aGlzLmxhYmVscy5wdXNoKGxvb3BMYWJlbClcbiAgdGhpcy5leHBlY3QodHQucGFyZW5MKVxuICBpZiAodGhpcy50eXBlID09PSB0dC5zZW1pKSByZXR1cm4gdGhpcy5wYXJzZUZvcihub2RlLCBudWxsKVxuICB2YXIgaXNMZXQgPSB0aGlzLmlzTGV0KClcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHQuX3ZhciB8fCB0aGlzLnR5cGUgPT09IHR0Ll9jb25zdCB8fCBpc0xldCkge1xuICAgIHZhciBpbml0JDEgPSB0aGlzLnN0YXJ0Tm9kZSgpLCBraW5kID0gaXNMZXQgPyBcImxldFwiIDogdGhpcy52YWx1ZVxuICAgIHRoaXMubmV4dCgpXG4gICAgdGhpcy5wYXJzZVZhcihpbml0JDEsIHRydWUsIGtpbmQpXG4gICAgdGhpcy5maW5pc2hOb2RlKGluaXQkMSwgXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIpXG4gICAgaWYgKCh0aGlzLnR5cGUgPT09IHR0Ll9pbiB8fCAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgdGhpcy5pc0NvbnRleHR1YWwoXCJvZlwiKSkpICYmIGluaXQkMS5kZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICEoa2luZCAhPT0gXCJ2YXJcIiAmJiBpbml0JDEuZGVjbGFyYXRpb25zWzBdLmluaXQpKVxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VGb3JJbihub2RlLCBpbml0JDEpXG4gICAgcmV0dXJuIHRoaXMucGFyc2VGb3Iobm9kZSwgaW5pdCQxKVxuICB9XG4gIHZhciByZWZEZXN0cnVjdHVyaW5nRXJyb3JzID0gbmV3IERlc3RydWN0dXJpbmdFcnJvcnNcbiAgdmFyIGluaXQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbih0cnVlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuICBpZiAodGhpcy50eXBlID09PSB0dC5faW4gfHwgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHRoaXMuaXNDb250ZXh0dWFsKFwib2ZcIikpKSB7XG4gICAgdGhpcy50b0Fzc2lnbmFibGUoaW5pdClcbiAgICB0aGlzLmNoZWNrTFZhbChpbml0KVxuICAgIHRoaXMuY2hlY2tQYXR0ZXJuRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpXG4gICAgcmV0dXJuIHRoaXMucGFyc2VGb3JJbihub2RlLCBpbml0KVxuICB9IGVsc2Uge1xuICAgIHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpXG4gIH1cbiAgcmV0dXJuIHRoaXMucGFyc2VGb3Iobm9kZSwgaW5pdClcbn1cblxucHAkMS5wYXJzZUZ1bmN0aW9uU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwgaXNBc3luYykge1xuICB0aGlzLm5leHQoKVxuICByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKG5vZGUsIHRydWUsIGZhbHNlLCBpc0FzeW5jKVxufVxuXG5wcCQxLmlzRnVuY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudHlwZSA9PT0gdHQuX2Z1bmN0aW9uIHx8IHRoaXMuaXNBc3luY0Z1bmN0aW9uKClcbn1cblxucHAkMS5wYXJzZUlmU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKVxuICBub2RlLnRlc3QgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKClcbiAgLy8gYWxsb3cgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluIGJyYW5jaGVzLCBidXQgb25seSBpbiBub24tc3RyaWN0IG1vZGVcbiAgbm9kZS5jb25zZXF1ZW50ID0gdGhpcy5wYXJzZVN0YXRlbWVudCghdGhpcy5zdHJpY3QgJiYgdGhpcy5pc0Z1bmN0aW9uKCkpXG4gIG5vZGUuYWx0ZXJuYXRlID0gdGhpcy5lYXQodHQuX2Vsc2UpID8gdGhpcy5wYXJzZVN0YXRlbWVudCghdGhpcy5zdHJpY3QgJiYgdGhpcy5pc0Z1bmN0aW9uKCkpIDogbnVsbFxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiSWZTdGF0ZW1lbnRcIilcbn1cblxucHAkMS5wYXJzZVJldHVyblN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgaWYgKCF0aGlzLmluRnVuY3Rpb24gJiYgIXRoaXMub3B0aW9ucy5hbGxvd1JldHVybk91dHNpZGVGdW5jdGlvbilcbiAgICB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ3JldHVybicgb3V0c2lkZSBvZiBmdW5jdGlvblwiKVxuICB0aGlzLm5leHQoKVxuXG4gIC8vIEluIGByZXR1cm5gIChhbmQgYGJyZWFrYC9gY29udGludWVgKSwgdGhlIGtleXdvcmRzIHdpdGhcbiAgLy8gb3B0aW9uYWwgYXJndW1lbnRzLCB3ZSBlYWdlcmx5IGxvb2sgZm9yIGEgc2VtaWNvbG9uIG9yIHRoZVxuICAvLyBwb3NzaWJpbGl0eSB0byBpbnNlcnQgb25lLlxuXG4gIGlmICh0aGlzLmVhdCh0dC5zZW1pKSB8fCB0aGlzLmluc2VydFNlbWljb2xvbigpKSBub2RlLmFyZ3VtZW50ID0gbnVsbFxuICBlbHNlIHsgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7IHRoaXMuc2VtaWNvbG9uKCkgfVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiUmV0dXJuU3RhdGVtZW50XCIpXG59XG5cbnBwJDEucGFyc2VTd2l0Y2hTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHRoaXMubmV4dCgpXG4gIG5vZGUuZGlzY3JpbWluYW50ID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpXG4gIG5vZGUuY2FzZXMgPSBbXVxuICB0aGlzLmV4cGVjdCh0dC5icmFjZUwpXG4gIHRoaXMubGFiZWxzLnB1c2goc3dpdGNoTGFiZWwpXG5cbiAgLy8gU3RhdGVtZW50cyB1bmRlciBtdXN0IGJlIGdyb3VwZWQgKGJ5IGxhYmVsKSBpbiBTd2l0Y2hDYXNlXG4gIC8vIG5vZGVzLiBgY3VyYCBpcyB1c2VkIHRvIGtlZXAgdGhlIG5vZGUgdGhhdCB3ZSBhcmUgY3VycmVudGx5XG4gIC8vIGFkZGluZyBzdGF0ZW1lbnRzIHRvLlxuXG4gIGZvciAodmFyIGN1ciwgc2F3RGVmYXVsdCA9IGZhbHNlOyB0aGlzLnR5cGUgIT0gdHQuYnJhY2VSOykge1xuICAgIGlmICh0aGlzJDEudHlwZSA9PT0gdHQuX2Nhc2UgfHwgdGhpcyQxLnR5cGUgPT09IHR0Ll9kZWZhdWx0KSB7XG4gICAgICB2YXIgaXNDYXNlID0gdGhpcyQxLnR5cGUgPT09IHR0Ll9jYXNlXG4gICAgICBpZiAoY3VyKSB0aGlzJDEuZmluaXNoTm9kZShjdXIsIFwiU3dpdGNoQ2FzZVwiKVxuICAgICAgbm9kZS5jYXNlcy5wdXNoKGN1ciA9IHRoaXMkMS5zdGFydE5vZGUoKSlcbiAgICAgIGN1ci5jb25zZXF1ZW50ID0gW11cbiAgICAgIHRoaXMkMS5uZXh0KClcbiAgICAgIGlmIChpc0Nhc2UpIHtcbiAgICAgICAgY3VyLnRlc3QgPSB0aGlzJDEucGFyc2VFeHByZXNzaW9uKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzYXdEZWZhdWx0KSB0aGlzJDEucmFpc2VSZWNvdmVyYWJsZSh0aGlzJDEubGFzdFRva1N0YXJ0LCBcIk11bHRpcGxlIGRlZmF1bHQgY2xhdXNlc1wiKVxuICAgICAgICBzYXdEZWZhdWx0ID0gdHJ1ZVxuICAgICAgICBjdXIudGVzdCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMkMS5leHBlY3QodHQuY29sb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY3VyKSB0aGlzJDEudW5leHBlY3RlZCgpXG4gICAgICBjdXIuY29uc2VxdWVudC5wdXNoKHRoaXMkMS5wYXJzZVN0YXRlbWVudCh0cnVlKSlcbiAgICB9XG4gIH1cbiAgaWYgKGN1cikgdGhpcy5maW5pc2hOb2RlKGN1ciwgXCJTd2l0Y2hDYXNlXCIpXG4gIHRoaXMubmV4dCgpIC8vIENsb3NpbmcgYnJhY2VcbiAgdGhpcy5sYWJlbHMucG9wKClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlN3aXRjaFN0YXRlbWVudFwiKVxufVxuXG5wcCQxLnBhcnNlVGhyb3dTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpXG4gIGlmIChsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva0VuZCwgdGhpcy5zdGFydCkpKVxuICAgIHRoaXMucmFpc2UodGhpcy5sYXN0VG9rRW5kLCBcIklsbGVnYWwgbmV3bGluZSBhZnRlciB0aHJvd1wiKVxuICBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKVxuICB0aGlzLnNlbWljb2xvbigpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJUaHJvd1N0YXRlbWVudFwiKVxufVxuXG4vLyBSZXVzZWQgZW1wdHkgYXJyYXkgYWRkZWQgZm9yIG5vZGUgZmllbGRzIHRoYXQgYXJlIGFsd2F5cyBlbXB0eS5cblxudmFyIGVtcHR5ID0gW11cblxucHAkMS5wYXJzZVRyeVN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KClcbiAgbm9kZS5ibG9jayA9IHRoaXMucGFyc2VCbG9jaygpXG4gIG5vZGUuaGFuZGxlciA9IG51bGxcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHQuX2NhdGNoKSB7XG4gICAgdmFyIGNsYXVzZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgICB0aGlzLm5leHQoKVxuICAgIHRoaXMuZXhwZWN0KHR0LnBhcmVuTClcbiAgICBjbGF1c2UucGFyYW0gPSB0aGlzLnBhcnNlQmluZGluZ0F0b20oKVxuICAgIHRoaXMuY2hlY2tMVmFsKGNsYXVzZS5wYXJhbSwgdHJ1ZSlcbiAgICB0aGlzLmV4cGVjdCh0dC5wYXJlblIpXG4gICAgY2xhdXNlLmJvZHkgPSB0aGlzLnBhcnNlQmxvY2soKVxuICAgIG5vZGUuaGFuZGxlciA9IHRoaXMuZmluaXNoTm9kZShjbGF1c2UsIFwiQ2F0Y2hDbGF1c2VcIilcbiAgfVxuICBub2RlLmZpbmFsaXplciA9IHRoaXMuZWF0KHR0Ll9maW5hbGx5KSA/IHRoaXMucGFyc2VCbG9jaygpIDogbnVsbFxuICBpZiAoIW5vZGUuaGFuZGxlciAmJiAhbm9kZS5maW5hbGl6ZXIpXG4gICAgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBcIk1pc3NpbmcgY2F0Y2ggb3IgZmluYWxseSBjbGF1c2VcIilcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlRyeVN0YXRlbWVudFwiKVxufVxuXG5wcCQxLnBhcnNlVmFyU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwga2luZCkge1xuICB0aGlzLm5leHQoKVxuICB0aGlzLnBhcnNlVmFyKG5vZGUsIGZhbHNlLCBraW5kKVxuICB0aGlzLnNlbWljb2xvbigpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIpXG59XG5cbnBwJDEucGFyc2VXaGlsZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KClcbiAgbm9kZS50ZXN0ID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpXG4gIHRoaXMubGFiZWxzLnB1c2gobG9vcExhYmVsKVxuICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KGZhbHNlKVxuICB0aGlzLmxhYmVscy5wb3AoKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiV2hpbGVTdGF0ZW1lbnRcIilcbn1cblxucHAkMS5wYXJzZVdpdGhTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIGlmICh0aGlzLnN0cmljdCkgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIid3aXRoJyBpbiBzdHJpY3QgbW9kZVwiKVxuICB0aGlzLm5leHQoKVxuICBub2RlLm9iamVjdCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKVxuICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KGZhbHNlKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiV2l0aFN0YXRlbWVudFwiKVxufVxuXG5wcCQxLnBhcnNlRW1wdHlTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJFbXB0eVN0YXRlbWVudFwiKVxufVxuXG5wcCQxLnBhcnNlTGFiZWxlZFN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIG1heWJlTmFtZSwgZXhwcikge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGFiZWxzLmxlbmd0aDsgKytpKVxuICAgIGlmICh0aGlzJDEubGFiZWxzW2ldLm5hbWUgPT09IG1heWJlTmFtZSkgdGhpcyQxLnJhaXNlKGV4cHIuc3RhcnQsIFwiTGFiZWwgJ1wiICsgbWF5YmVOYW1lICsgXCInIGlzIGFscmVhZHkgZGVjbGFyZWRcIilcbiAgdmFyIGtpbmQgPSB0aGlzLnR5cGUuaXNMb29wID8gXCJsb29wXCIgOiB0aGlzLnR5cGUgPT09IHR0Ll9zd2l0Y2ggPyBcInN3aXRjaFwiIDogbnVsbFxuICBmb3IgKHZhciBpJDEgPSB0aGlzLmxhYmVscy5sZW5ndGggLSAxOyBpJDEgPj0gMDsgaSQxLS0pIHtcbiAgICB2YXIgbGFiZWwgPSB0aGlzJDEubGFiZWxzW2kkMV1cbiAgICBpZiAobGFiZWwuc3RhdGVtZW50U3RhcnQgPT0gbm9kZS5zdGFydCkge1xuICAgICAgbGFiZWwuc3RhdGVtZW50U3RhcnQgPSB0aGlzJDEuc3RhcnRcbiAgICAgIGxhYmVsLmtpbmQgPSBraW5kXG4gICAgfSBlbHNlIGJyZWFrXG4gIH1cbiAgdGhpcy5sYWJlbHMucHVzaCh7bmFtZTogbWF5YmVOYW1lLCBraW5kOiBraW5kLCBzdGF0ZW1lbnRTdGFydDogdGhpcy5zdGFydH0pXG4gIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQodHJ1ZSlcbiAgaWYgKG5vZGUuYm9keS50eXBlID09IFwiQ2xhc3NEZWNsYXJhdGlvblwiIHx8XG4gICAgICBub2RlLmJvZHkudHlwZSA9PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiAmJiAodGhpcy5zdHJpY3QgfHwgbm9kZS5ib2R5LmtpbmQgIT0gXCJ2YXJcIikgfHxcbiAgICAgIG5vZGUuYm9keS50eXBlID09IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiICYmICh0aGlzLnN0cmljdCB8fCBub2RlLmJvZHkuZ2VuZXJhdG9yKSlcbiAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5ib2R5LnN0YXJ0LCBcIkludmFsaWQgbGFiZWxlZCBkZWNsYXJhdGlvblwiKVxuICB0aGlzLmxhYmVscy5wb3AoKVxuICBub2RlLmxhYmVsID0gZXhwclxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTGFiZWxlZFN0YXRlbWVudFwiKVxufVxuXG5wcCQxLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIGV4cHIpIHtcbiAgbm9kZS5leHByZXNzaW9uID0gZXhwclxuICB0aGlzLnNlbWljb2xvbigpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpXG59XG5cbi8vIFBhcnNlIGEgc2VtaWNvbG9uLWVuY2xvc2VkIGJsb2NrIG9mIHN0YXRlbWVudHMsIGhhbmRsaW5nIGBcInVzZVxuLy8gc3RyaWN0XCJgIGRlY2xhcmF0aW9ucyB3aGVuIGBhbGxvd1N0cmljdGAgaXMgdHJ1ZSAodXNlZCBmb3Jcbi8vIGZ1bmN0aW9uIGJvZGllcykuXG5cbnBwJDEucGFyc2VCbG9jayA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgbm9kZS5ib2R5ID0gW11cbiAgdGhpcy5leHBlY3QodHQuYnJhY2VMKVxuICB3aGlsZSAoIXRoaXMuZWF0KHR0LmJyYWNlUikpIHtcbiAgICB2YXIgc3RtdCA9IHRoaXMkMS5wYXJzZVN0YXRlbWVudCh0cnVlKVxuICAgIG5vZGUuYm9keS5wdXNoKHN0bXQpXG4gIH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkJsb2NrU3RhdGVtZW50XCIpXG59XG5cbi8vIFBhcnNlIGEgcmVndWxhciBgZm9yYCBsb29wLiBUaGUgZGlzYW1iaWd1YXRpb24gY29kZSBpblxuLy8gYHBhcnNlU3RhdGVtZW50YCB3aWxsIGFscmVhZHkgaGF2ZSBwYXJzZWQgdGhlIGluaXQgc3RhdGVtZW50IG9yXG4vLyBleHByZXNzaW9uLlxuXG5wcCQxLnBhcnNlRm9yID0gZnVuY3Rpb24obm9kZSwgaW5pdCkge1xuICBub2RlLmluaXQgPSBpbml0XG4gIHRoaXMuZXhwZWN0KHR0LnNlbWkpXG4gIG5vZGUudGVzdCA9IHRoaXMudHlwZSA9PT0gdHQuc2VtaSA/IG51bGwgOiB0aGlzLnBhcnNlRXhwcmVzc2lvbigpXG4gIHRoaXMuZXhwZWN0KHR0LnNlbWkpXG4gIG5vZGUudXBkYXRlID0gdGhpcy50eXBlID09PSB0dC5wYXJlblIgPyBudWxsIDogdGhpcy5wYXJzZUV4cHJlc3Npb24oKVxuICB0aGlzLmV4cGVjdCh0dC5wYXJlblIpXG4gIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoZmFsc2UpXG4gIHRoaXMubGFiZWxzLnBvcCgpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJGb3JTdGF0ZW1lbnRcIilcbn1cblxuLy8gUGFyc2UgYSBgZm9yYC9gaW5gIGFuZCBgZm9yYC9gb2ZgIGxvb3AsIHdoaWNoIGFyZSBhbG1vc3Rcbi8vIHNhbWUgZnJvbSBwYXJzZXIncyBwZXJzcGVjdGl2ZS5cblxucHAkMS5wYXJzZUZvckluID0gZnVuY3Rpb24obm9kZSwgaW5pdCkge1xuICB2YXIgdHlwZSA9IHRoaXMudHlwZSA9PT0gdHQuX2luID8gXCJGb3JJblN0YXRlbWVudFwiIDogXCJGb3JPZlN0YXRlbWVudFwiXG4gIHRoaXMubmV4dCgpXG4gIG5vZGUubGVmdCA9IGluaXRcbiAgbm9kZS5yaWdodCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKClcbiAgdGhpcy5leHBlY3QodHQucGFyZW5SKVxuICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KGZhbHNlKVxuICB0aGlzLmxhYmVscy5wb3AoKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIHR5cGUpXG59XG5cbi8vIFBhcnNlIGEgbGlzdCBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG5cbnBwJDEucGFyc2VWYXIgPSBmdW5jdGlvbihub2RlLCBpc0Zvciwga2luZCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBub2RlLmRlY2xhcmF0aW9ucyA9IFtdXG4gIG5vZGUua2luZCA9IGtpbmRcbiAgZm9yICg7Oykge1xuICAgIHZhciBkZWNsID0gdGhpcyQxLnN0YXJ0Tm9kZSgpXG4gICAgdGhpcyQxLnBhcnNlVmFySWQoZGVjbClcbiAgICBpZiAodGhpcyQxLmVhdCh0dC5lcSkpIHtcbiAgICAgIGRlY2wuaW5pdCA9IHRoaXMkMS5wYXJzZU1heWJlQXNzaWduKGlzRm9yKVxuICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gXCJjb25zdFwiICYmICEodGhpcyQxLnR5cGUgPT09IHR0Ll9pbiB8fCAodGhpcyQxLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzJDEuaXNDb250ZXh0dWFsKFwib2ZcIikpKSkge1xuICAgICAgdGhpcyQxLnVuZXhwZWN0ZWQoKVxuICAgIH0gZWxzZSBpZiAoZGVjbC5pZC50eXBlICE9IFwiSWRlbnRpZmllclwiICYmICEoaXNGb3IgJiYgKHRoaXMkMS50eXBlID09PSB0dC5faW4gfHwgdGhpcyQxLmlzQ29udGV4dHVhbChcIm9mXCIpKSkpIHtcbiAgICAgIHRoaXMkMS5yYWlzZSh0aGlzJDEubGFzdFRva0VuZCwgXCJDb21wbGV4IGJpbmRpbmcgcGF0dGVybnMgcmVxdWlyZSBhbiBpbml0aWFsaXphdGlvbiB2YWx1ZVwiKVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWNsLmluaXQgPSBudWxsXG4gICAgfVxuICAgIG5vZGUuZGVjbGFyYXRpb25zLnB1c2godGhpcyQxLmZpbmlzaE5vZGUoZGVjbCwgXCJWYXJpYWJsZURlY2xhcmF0b3JcIikpXG4gICAgaWYgKCF0aGlzJDEuZWF0KHR0LmNvbW1hKSkgYnJlYWtcbiAgfVxuICByZXR1cm4gbm9kZVxufVxuXG5wcCQxLnBhcnNlVmFySWQgPSBmdW5jdGlvbihkZWNsKSB7XG4gIGRlY2wuaWQgPSB0aGlzLnBhcnNlQmluZGluZ0F0b20oKVxuICB0aGlzLmNoZWNrTFZhbChkZWNsLmlkLCB0cnVlKVxufVxuXG4vLyBQYXJzZSBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG9yIGxpdGVyYWwgKGRlcGVuZGluZyBvbiB0aGVcbi8vIGBpc1N0YXRlbWVudGAgcGFyYW1ldGVyKS5cblxucHAkMS5wYXJzZUZ1bmN0aW9uID0gZnVuY3Rpb24obm9kZSwgaXNTdGF0ZW1lbnQsIGFsbG93RXhwcmVzc2lvbkJvZHksIGlzQXN5bmMpIHtcbiAgdGhpcy5pbml0RnVuY3Rpb24obm9kZSlcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmICFpc0FzeW5jKVxuICAgIG5vZGUuZ2VuZXJhdG9yID0gdGhpcy5lYXQodHQuc3RhcilcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KVxuICAgIG5vZGUuYXN5bmMgPSAhIWlzQXN5bmNcblxuICBpZiAoaXNTdGF0ZW1lbnQgPT0gbnVsbClcbiAgICBpc1N0YXRlbWVudCA9IHRoaXMudHlwZSA9PSB0dC5uYW1lXG4gIGlmIChpc1N0YXRlbWVudClcbiAgICBub2RlLmlkID0gdGhpcy5wYXJzZUlkZW50KClcblxuICB2YXIgb2xkSW5HZW4gPSB0aGlzLmluR2VuZXJhdG9yLCBvbGRJbkFzeW5jID0gdGhpcy5pbkFzeW5jLFxuICAgICAgb2xkWWllbGRQb3MgPSB0aGlzLnlpZWxkUG9zLCBvbGRBd2FpdFBvcyA9IHRoaXMuYXdhaXRQb3MsIG9sZEluRnVuYyA9IHRoaXMuaW5GdW5jdGlvblxuICB0aGlzLmluR2VuZXJhdG9yID0gbm9kZS5nZW5lcmF0b3JcbiAgdGhpcy5pbkFzeW5jID0gbm9kZS5hc3luY1xuICB0aGlzLnlpZWxkUG9zID0gMFxuICB0aGlzLmF3YWl0UG9zID0gMFxuICB0aGlzLmluRnVuY3Rpb24gPSB0cnVlXG5cbiAgaWYgKCFpc1N0YXRlbWVudCAmJiB0aGlzLnR5cGUgPT09IHR0Lm5hbWUpXG4gICAgbm9kZS5pZCA9IHRoaXMucGFyc2VJZGVudCgpXG4gIHRoaXMucGFyc2VGdW5jdGlvblBhcmFtcyhub2RlKVxuICB0aGlzLnBhcnNlRnVuY3Rpb25Cb2R5KG5vZGUsIGFsbG93RXhwcmVzc2lvbkJvZHkpXG5cbiAgdGhpcy5pbkdlbmVyYXRvciA9IG9sZEluR2VuXG4gIHRoaXMuaW5Bc3luYyA9IG9sZEluQXN5bmNcbiAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zXG4gIHRoaXMuYXdhaXRQb3MgPSBvbGRBd2FpdFBvc1xuICB0aGlzLmluRnVuY3Rpb24gPSBvbGRJbkZ1bmNcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBpc1N0YXRlbWVudCA/IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiIDogXCJGdW5jdGlvbkV4cHJlc3Npb25cIilcbn1cblxucHAkMS5wYXJzZUZ1bmN0aW9uUGFyYW1zID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLmV4cGVjdCh0dC5wYXJlbkwpXG4gIG5vZGUucGFyYW1zID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KHR0LnBhcmVuUiwgZmFsc2UsIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4LCB0cnVlKVxuICB0aGlzLmNoZWNrWWllbGRBd2FpdEluRGVmYXVsdFBhcmFtcygpXG59XG5cbi8vIFBhcnNlIGEgY2xhc3MgZGVjbGFyYXRpb24gb3IgbGl0ZXJhbCAoZGVwZW5kaW5nIG9uIHRoZVxuLy8gYGlzU3RhdGVtZW50YCBwYXJhbWV0ZXIpLlxuXG5wcCQxLnBhcnNlQ2xhc3MgPSBmdW5jdGlvbihub2RlLCBpc1N0YXRlbWVudCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB0aGlzLm5leHQoKVxuICBpZiAoaXNTdGF0ZW1lbnQgPT0gbnVsbCkgaXNTdGF0ZW1lbnQgPSB0aGlzLnR5cGUgPT09IHR0Lm5hbWVcbiAgdGhpcy5wYXJzZUNsYXNzSWQobm9kZSwgaXNTdGF0ZW1lbnQpXG4gIHRoaXMucGFyc2VDbGFzc1N1cGVyKG5vZGUpXG4gIHZhciBjbGFzc0JvZHkgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gIHZhciBoYWRDb25zdHJ1Y3RvciA9IGZhbHNlXG4gIGNsYXNzQm9keS5ib2R5ID0gW11cbiAgdGhpcy5leHBlY3QodHQuYnJhY2VMKVxuICB3aGlsZSAoIXRoaXMuZWF0KHR0LmJyYWNlUikpIHtcbiAgICBpZiAodGhpcyQxLmVhdCh0dC5zZW1pKSkgY29udGludWVcbiAgICB2YXIgbWV0aG9kID0gdGhpcyQxLnN0YXJ0Tm9kZSgpXG4gICAgdmFyIGlzR2VuZXJhdG9yID0gdGhpcyQxLmVhdCh0dC5zdGFyKVxuICAgIHZhciBpc0FzeW5jID0gZmFsc2VcbiAgICB2YXIgaXNNYXliZVN0YXRpYyA9IHRoaXMkMS50eXBlID09PSB0dC5uYW1lICYmIHRoaXMkMS52YWx1ZSA9PT0gXCJzdGF0aWNcIlxuICAgIHRoaXMkMS5wYXJzZVByb3BlcnR5TmFtZShtZXRob2QpXG4gICAgbWV0aG9kLnN0YXRpYyA9IGlzTWF5YmVTdGF0aWMgJiYgdGhpcyQxLnR5cGUgIT09IHR0LnBhcmVuTFxuICAgIGlmIChtZXRob2Quc3RhdGljKSB7XG4gICAgICBpZiAoaXNHZW5lcmF0b3IpIHRoaXMkMS51bmV4cGVjdGVkKClcbiAgICAgIGlzR2VuZXJhdG9yID0gdGhpcyQxLmVhdCh0dC5zdGFyKVxuICAgICAgdGhpcyQxLnBhcnNlUHJvcGVydHlOYW1lKG1ldGhvZClcbiAgICB9XG4gICAgaWYgKHRoaXMkMS5vcHRpb25zLmVjbWFWZXJzaW9uID49IDggJiYgIWlzR2VuZXJhdG9yICYmICFtZXRob2QuY29tcHV0ZWQgJiZcbiAgICAgICAgbWV0aG9kLmtleS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJiBtZXRob2Qua2V5Lm5hbWUgPT09IFwiYXN5bmNcIiAmJiB0aGlzJDEudHlwZSAhPT0gdHQucGFyZW5MICYmXG4gICAgICAgICF0aGlzJDEuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICAgIGlzQXN5bmMgPSB0cnVlXG4gICAgICB0aGlzJDEucGFyc2VQcm9wZXJ0eU5hbWUobWV0aG9kKVxuICAgIH1cbiAgICBtZXRob2Qua2luZCA9IFwibWV0aG9kXCJcbiAgICB2YXIgaXNHZXRTZXQgPSBmYWxzZVxuICAgIGlmICghbWV0aG9kLmNvbXB1dGVkKSB7XG4gICAgICB2YXIga2V5ID0gbWV0aG9kLmtleTtcbiAgICAgIGlmICghaXNHZW5lcmF0b3IgJiYgIWlzQXN5bmMgJiYga2V5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmIHRoaXMkMS50eXBlICE9PSB0dC5wYXJlbkwgJiYgKGtleS5uYW1lID09PSBcImdldFwiIHx8IGtleS5uYW1lID09PSBcInNldFwiKSkge1xuICAgICAgICBpc0dldFNldCA9IHRydWVcbiAgICAgICAgbWV0aG9kLmtpbmQgPSBrZXkubmFtZVxuICAgICAgICBrZXkgPSB0aGlzJDEucGFyc2VQcm9wZXJ0eU5hbWUobWV0aG9kKVxuICAgICAgfVxuICAgICAgaWYgKCFtZXRob2Quc3RhdGljICYmIChrZXkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYga2V5Lm5hbWUgPT09IFwiY29uc3RydWN0b3JcIiB8fFxuICAgICAgICAgIGtleS50eXBlID09PSBcIkxpdGVyYWxcIiAmJiBrZXkudmFsdWUgPT09IFwiY29uc3RydWN0b3JcIikpIHtcbiAgICAgICAgaWYgKGhhZENvbnN0cnVjdG9yKSB0aGlzJDEucmFpc2Uoa2V5LnN0YXJ0LCBcIkR1cGxpY2F0ZSBjb25zdHJ1Y3RvciBpbiB0aGUgc2FtZSBjbGFzc1wiKVxuICAgICAgICBpZiAoaXNHZXRTZXQpIHRoaXMkMS5yYWlzZShrZXkuc3RhcnQsIFwiQ29uc3RydWN0b3IgY2FuJ3QgaGF2ZSBnZXQvc2V0IG1vZGlmaWVyXCIpXG4gICAgICAgIGlmIChpc0dlbmVyYXRvcikgdGhpcyQxLnJhaXNlKGtleS5zdGFydCwgXCJDb25zdHJ1Y3RvciBjYW4ndCBiZSBhIGdlbmVyYXRvclwiKVxuICAgICAgICBpZiAoaXNBc3luYykgdGhpcyQxLnJhaXNlKGtleS5zdGFydCwgXCJDb25zdHJ1Y3RvciBjYW4ndCBiZSBhbiBhc3luYyBtZXRob2RcIilcbiAgICAgICAgbWV0aG9kLmtpbmQgPSBcImNvbnN0cnVjdG9yXCJcbiAgICAgICAgaGFkQ29uc3RydWN0b3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMkMS5wYXJzZUNsYXNzTWV0aG9kKGNsYXNzQm9keSwgbWV0aG9kLCBpc0dlbmVyYXRvciwgaXNBc3luYylcbiAgICBpZiAoaXNHZXRTZXQpIHtcbiAgICAgIHZhciBwYXJhbUNvdW50ID0gbWV0aG9kLmtpbmQgPT09IFwiZ2V0XCIgPyAwIDogMVxuICAgICAgaWYgKG1ldGhvZC52YWx1ZS5wYXJhbXMubGVuZ3RoICE9PSBwYXJhbUNvdW50KSB7XG4gICAgICAgIHZhciBzdGFydCA9IG1ldGhvZC52YWx1ZS5zdGFydFxuICAgICAgICBpZiAobWV0aG9kLmtpbmQgPT09IFwiZ2V0XCIpXG4gICAgICAgICAgdGhpcyQxLnJhaXNlUmVjb3ZlcmFibGUoc3RhcnQsIFwiZ2V0dGVyIHNob3VsZCBoYXZlIG5vIHBhcmFtc1wiKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpcyQxLnJhaXNlUmVjb3ZlcmFibGUoc3RhcnQsIFwic2V0dGVyIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtXCIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWV0aG9kLmtpbmQgPT09IFwic2V0XCIgJiYgbWV0aG9kLnZhbHVlLnBhcmFtc1swXS50eXBlID09PSBcIlJlc3RFbGVtZW50XCIpXG4gICAgICAgICAgdGhpcyQxLnJhaXNlUmVjb3ZlcmFibGUobWV0aG9kLnZhbHVlLnBhcmFtc1swXS5zdGFydCwgXCJTZXR0ZXIgY2Fubm90IHVzZSByZXN0IHBhcmFtc1wiKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBub2RlLmJvZHkgPSB0aGlzLmZpbmlzaE5vZGUoY2xhc3NCb2R5LCBcIkNsYXNzQm9keVwiKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIGlzU3RhdGVtZW50ID8gXCJDbGFzc0RlY2xhcmF0aW9uXCIgOiBcIkNsYXNzRXhwcmVzc2lvblwiKVxufVxuXG5wcCQxLnBhcnNlQ2xhc3NNZXRob2QgPSBmdW5jdGlvbihjbGFzc0JvZHksIG1ldGhvZCwgaXNHZW5lcmF0b3IsIGlzQXN5bmMpIHtcbiAgbWV0aG9kLnZhbHVlID0gdGhpcy5wYXJzZU1ldGhvZChpc0dlbmVyYXRvciwgaXNBc3luYylcbiAgY2xhc3NCb2R5LmJvZHkucHVzaCh0aGlzLmZpbmlzaE5vZGUobWV0aG9kLCBcIk1ldGhvZERlZmluaXRpb25cIikpXG59XG5cbnBwJDEucGFyc2VDbGFzc0lkID0gZnVuY3Rpb24obm9kZSwgaXNTdGF0ZW1lbnQpIHtcbiAgbm9kZS5pZCA9IHRoaXMudHlwZSA9PT0gdHQubmFtZSA/IHRoaXMucGFyc2VJZGVudCgpIDogaXNTdGF0ZW1lbnQgPyB0aGlzLnVuZXhwZWN0ZWQoKSA6IG51bGxcbn1cblxucHAkMS5wYXJzZUNsYXNzU3VwZXIgPSBmdW5jdGlvbihub2RlKSB7XG4gIG5vZGUuc3VwZXJDbGFzcyA9IHRoaXMuZWF0KHR0Ll9leHRlbmRzKSA/IHRoaXMucGFyc2VFeHByU3Vic2NyaXB0cygpIDogbnVsbFxufVxuXG4vLyBQYXJzZXMgbW9kdWxlIGV4cG9ydCBkZWNsYXJhdGlvbi5cblxucHAkMS5wYXJzZUV4cG9ydCA9IGZ1bmN0aW9uKG5vZGUsIGV4cG9ydHMpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdGhpcy5uZXh0KClcbiAgLy8gZXhwb3J0ICogZnJvbSAnLi4uJ1xuICBpZiAodGhpcy5lYXQodHQuc3RhcikpIHtcbiAgICB0aGlzLmV4cGVjdENvbnRleHR1YWwoXCJmcm9tXCIpXG4gICAgbm9kZS5zb3VyY2UgPSB0aGlzLnR5cGUgPT09IHR0LnN0cmluZyA/IHRoaXMucGFyc2VFeHByQXRvbSgpIDogdGhpcy51bmV4cGVjdGVkKClcbiAgICB0aGlzLnNlbWljb2xvbigpXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIpXG4gIH1cbiAgaWYgKHRoaXMuZWF0KHR0Ll9kZWZhdWx0KSkgeyAvLyBleHBvcnQgZGVmYXVsdCAuLi5cbiAgICB0aGlzLmNoZWNrRXhwb3J0KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB0aGlzLmxhc3RUb2tTdGFydClcbiAgICB2YXIgaXNBc3luY1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR0Ll9mdW5jdGlvbiB8fCAoaXNBc3luYyA9IHRoaXMuaXNBc3luY0Z1bmN0aW9uKCkpKSB7XG4gICAgICB2YXIgZk5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gICAgICB0aGlzLm5leHQoKVxuICAgICAgaWYgKGlzQXN5bmMpIHRoaXMubmV4dCgpXG4gICAgICBub2RlLmRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUZ1bmN0aW9uKGZOb2RlLCBudWxsLCBmYWxzZSwgaXNBc3luYylcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdHQuX2NsYXNzKSB7XG4gICAgICB2YXIgY05vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gICAgICBub2RlLmRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUNsYXNzKGNOb2RlLCBudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLmRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKClcbiAgICAgIHRoaXMuc2VtaWNvbG9uKClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvblwiKVxuICB9XG4gIC8vIGV4cG9ydCB2YXJ8Y29uc3R8bGV0fGZ1bmN0aW9ufGNsYXNzIC4uLlxuICBpZiAodGhpcy5zaG91bGRQYXJzZUV4cG9ydFN0YXRlbWVudCgpKSB7XG4gICAgbm9kZS5kZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VTdGF0ZW1lbnQodHJ1ZSlcbiAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIilcbiAgICAgIHRoaXMuY2hlY2tWYXJpYWJsZUV4cG9ydChleHBvcnRzLCBub2RlLmRlY2xhcmF0aW9uLmRlY2xhcmF0aW9ucylcbiAgICBlbHNlXG4gICAgICB0aGlzLmNoZWNrRXhwb3J0KGV4cG9ydHMsIG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZSwgbm9kZS5kZWNsYXJhdGlvbi5pZC5zdGFydClcbiAgICBub2RlLnNwZWNpZmllcnMgPSBbXVxuICAgIG5vZGUuc291cmNlID0gbnVsbFxuICB9IGVsc2UgeyAvLyBleHBvcnQgeyB4LCB5IGFzIHogfSBbZnJvbSAnLi4uJ11cbiAgICBub2RlLmRlY2xhcmF0aW9uID0gbnVsbFxuICAgIG5vZGUuc3BlY2lmaWVycyA9IHRoaXMucGFyc2VFeHBvcnRTcGVjaWZpZXJzKGV4cG9ydHMpXG4gICAgaWYgKHRoaXMuZWF0Q29udGV4dHVhbChcImZyb21cIikpIHtcbiAgICAgIG5vZGUuc291cmNlID0gdGhpcy50eXBlID09PSB0dC5zdHJpbmcgPyB0aGlzLnBhcnNlRXhwckF0b20oKSA6IHRoaXMudW5leHBlY3RlZCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNoZWNrIGZvciBrZXl3b3JkcyB1c2VkIGFzIGxvY2FsIG5hbWVzXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuc3BlY2lmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcyQxLmtleXdvcmRzLnRlc3Qobm9kZS5zcGVjaWZpZXJzW2ldLmxvY2FsLm5hbWUpIHx8IHRoaXMkMS5yZXNlcnZlZFdvcmRzLnRlc3Qobm9kZS5zcGVjaWZpZXJzW2ldLmxvY2FsLm5hbWUpKSB7XG4gICAgICAgICAgdGhpcyQxLnVuZXhwZWN0ZWQobm9kZS5zcGVjaWZpZXJzW2ldLmxvY2FsLnN0YXJ0KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc291cmNlID0gbnVsbFxuICAgIH1cbiAgICB0aGlzLnNlbWljb2xvbigpXG4gIH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIilcbn1cblxucHAkMS5jaGVja0V4cG9ydCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIHBvcykge1xuICBpZiAoIWV4cG9ydHMpIHJldHVyblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIG5hbWUpKVxuICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShwb3MsIFwiRHVwbGljYXRlIGV4cG9ydCAnXCIgKyBuYW1lICsgXCInXCIpXG4gIGV4cG9ydHNbbmFtZV0gPSB0cnVlXG59XG5cbnBwJDEuY2hlY2tQYXR0ZXJuRXhwb3J0ID0gZnVuY3Rpb24oZXhwb3J0cywgcGF0KSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciB0eXBlID0gcGF0LnR5cGVcbiAgaWYgKHR5cGUgPT0gXCJJZGVudGlmaWVyXCIpXG4gICAgdGhpcy5jaGVja0V4cG9ydChleHBvcnRzLCBwYXQubmFtZSwgcGF0LnN0YXJ0KVxuICBlbHNlIGlmICh0eXBlID09IFwiT2JqZWN0UGF0dGVyblwiKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0LnByb3BlcnRpZXMubGVuZ3RoOyArK2kpXG4gICAgICB0aGlzJDEuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIHBhdC5wcm9wZXJ0aWVzW2ldLnZhbHVlKVxuICBlbHNlIGlmICh0eXBlID09IFwiQXJyYXlQYXR0ZXJuXCIpXG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgcGF0LmVsZW1lbnRzLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIHZhciBlbHQgPSBwYXQuZWxlbWVudHNbaSQxXVxuICAgICAgaWYgKGVsdCkgdGhpcyQxLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBlbHQpXG4gICAgfVxuICBlbHNlIGlmICh0eXBlID09IFwiQXNzaWdubWVudFBhdHRlcm5cIilcbiAgICB0aGlzLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBwYXQubGVmdClcbiAgZWxzZSBpZiAodHlwZSA9PSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpXG4gICAgdGhpcy5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgcGF0LmV4cHJlc3Npb24pXG59XG5cbnBwJDEuY2hlY2tWYXJpYWJsZUV4cG9ydCA9IGZ1bmN0aW9uKGV4cG9ydHMsIGRlY2xzKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGlmICghZXhwb3J0cykgcmV0dXJuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVjbHMubGVuZ3RoOyBpKyspXG4gICAgdGhpcyQxLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBkZWNsc1tpXS5pZClcbn1cblxucHAkMS5zaG91bGRQYXJzZUV4cG9ydFN0YXRlbWVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50eXBlLmtleXdvcmQgPT09IFwidmFyXCJcbiAgICB8fCB0aGlzLnR5cGUua2V5d29yZCA9PT0gXCJjb25zdFwiXG4gICAgfHwgdGhpcy50eXBlLmtleXdvcmQgPT09IFwiY2xhc3NcIlxuICAgIHx8IHRoaXMudHlwZS5rZXl3b3JkID09PSBcImZ1bmN0aW9uXCJcbiAgICB8fCB0aGlzLmlzTGV0KClcbiAgICB8fCB0aGlzLmlzQXN5bmNGdW5jdGlvbigpXG59XG5cbi8vIFBhcnNlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1vZHVsZSBleHBvcnRzLlxuXG5wcCQxLnBhcnNlRXhwb3J0U3BlY2lmaWVycyA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG5vZGVzID0gW10sIGZpcnN0ID0gdHJ1ZVxuICAvLyBleHBvcnQgeyB4LCB5IGFzIHogfSBbZnJvbSAnLi4uJ11cbiAgdGhpcy5leHBlY3QodHQuYnJhY2VMKVxuICB3aGlsZSAoIXRoaXMuZWF0KHR0LmJyYWNlUikpIHtcbiAgICBpZiAoIWZpcnN0KSB7XG4gICAgICB0aGlzJDEuZXhwZWN0KHR0LmNvbW1hKVxuICAgICAgaWYgKHRoaXMkMS5hZnRlclRyYWlsaW5nQ29tbWEodHQuYnJhY2VSKSkgYnJlYWtcbiAgICB9IGVsc2UgZmlyc3QgPSBmYWxzZVxuXG4gICAgdmFyIG5vZGUgPSB0aGlzJDEuc3RhcnROb2RlKClcbiAgICBub2RlLmxvY2FsID0gdGhpcyQxLnBhcnNlSWRlbnQodHJ1ZSlcbiAgICBub2RlLmV4cG9ydGVkID0gdGhpcyQxLmVhdENvbnRleHR1YWwoXCJhc1wiKSA/IHRoaXMkMS5wYXJzZUlkZW50KHRydWUpIDogbm9kZS5sb2NhbFxuICAgIHRoaXMkMS5jaGVja0V4cG9ydChleHBvcnRzLCBub2RlLmV4cG9ydGVkLm5hbWUsIG5vZGUuZXhwb3J0ZWQuc3RhcnQpXG4gICAgbm9kZXMucHVzaCh0aGlzJDEuZmluaXNoTm9kZShub2RlLCBcIkV4cG9ydFNwZWNpZmllclwiKSlcbiAgfVxuICByZXR1cm4gbm9kZXNcbn1cblxuLy8gUGFyc2VzIGltcG9ydCBkZWNsYXJhdGlvbi5cblxucHAkMS5wYXJzZUltcG9ydCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KClcbiAgLy8gaW1wb3J0ICcuLi4nXG4gIGlmICh0aGlzLnR5cGUgPT09IHR0LnN0cmluZykge1xuICAgIG5vZGUuc3BlY2lmaWVycyA9IGVtcHR5XG4gICAgbm9kZS5zb3VyY2UgPSB0aGlzLnBhcnNlRXhwckF0b20oKVxuICB9IGVsc2Uge1xuICAgIG5vZGUuc3BlY2lmaWVycyA9IHRoaXMucGFyc2VJbXBvcnRTcGVjaWZpZXJzKClcbiAgICB0aGlzLmV4cGVjdENvbnRleHR1YWwoXCJmcm9tXCIpXG4gICAgbm9kZS5zb3VyY2UgPSB0aGlzLnR5cGUgPT09IHR0LnN0cmluZyA/IHRoaXMucGFyc2VFeHByQXRvbSgpIDogdGhpcy51bmV4cGVjdGVkKClcbiAgfVxuICB0aGlzLnNlbWljb2xvbigpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJJbXBvcnREZWNsYXJhdGlvblwiKVxufVxuXG4vLyBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGUgaW1wb3J0cy5cblxucHAkMS5wYXJzZUltcG9ydFNwZWNpZmllcnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG5vZGVzID0gW10sIGZpcnN0ID0gdHJ1ZVxuICBpZiAodGhpcy50eXBlID09PSB0dC5uYW1lKSB7XG4gICAgLy8gaW1wb3J0IGRlZmF1bHRPYmosIHsgeCwgeSBhcyB6IH0gZnJvbSAnLi4uJ1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKVxuICAgIG5vZGUubG9jYWwgPSB0aGlzLnBhcnNlSWRlbnQoKVxuICAgIHRoaXMuY2hlY2tMVmFsKG5vZGUubG9jYWwsIHRydWUpXG4gICAgbm9kZXMucHVzaCh0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyXCIpKVxuICAgIGlmICghdGhpcy5lYXQodHQuY29tbWEpKSByZXR1cm4gbm9kZXNcbiAgfVxuICBpZiAodGhpcy50eXBlID09PSB0dC5zdGFyKSB7XG4gICAgdmFyIG5vZGUkMSA9IHRoaXMuc3RhcnROb2RlKClcbiAgICB0aGlzLm5leHQoKVxuICAgIHRoaXMuZXhwZWN0Q29udGV4dHVhbChcImFzXCIpXG4gICAgbm9kZSQxLmxvY2FsID0gdGhpcy5wYXJzZUlkZW50KClcbiAgICB0aGlzLmNoZWNrTFZhbChub2RlJDEubG9jYWwsIHRydWUpXG4gICAgbm9kZXMucHVzaCh0aGlzLmZpbmlzaE5vZGUobm9kZSQxLCBcIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllclwiKSlcbiAgICByZXR1cm4gbm9kZXNcbiAgfVxuICB0aGlzLmV4cGVjdCh0dC5icmFjZUwpXG4gIHdoaWxlICghdGhpcy5lYXQodHQuYnJhY2VSKSkge1xuICAgIGlmICghZmlyc3QpIHtcbiAgICAgIHRoaXMkMS5leHBlY3QodHQuY29tbWEpXG4gICAgICBpZiAodGhpcyQxLmFmdGVyVHJhaWxpbmdDb21tYSh0dC5icmFjZVIpKSBicmVha1xuICAgIH0gZWxzZSBmaXJzdCA9IGZhbHNlXG5cbiAgICB2YXIgbm9kZSQyID0gdGhpcyQxLnN0YXJ0Tm9kZSgpXG4gICAgbm9kZSQyLmltcG9ydGVkID0gdGhpcyQxLnBhcnNlSWRlbnQodHJ1ZSlcbiAgICBpZiAodGhpcyQxLmVhdENvbnRleHR1YWwoXCJhc1wiKSkge1xuICAgICAgbm9kZSQyLmxvY2FsID0gdGhpcyQxLnBhcnNlSWRlbnQoKVxuICAgIH0gZWxzZSB7XG4gICAgICBub2RlJDIubG9jYWwgPSBub2RlJDIuaW1wb3J0ZWRcbiAgICAgIGlmICh0aGlzJDEuaXNLZXl3b3JkKG5vZGUkMi5sb2NhbC5uYW1lKSkgdGhpcyQxLnVuZXhwZWN0ZWQobm9kZSQyLmxvY2FsLnN0YXJ0KVxuICAgICAgaWYgKHRoaXMkMS5yZXNlcnZlZFdvcmRzU3RyaWN0LnRlc3Qobm9kZSQyLmxvY2FsLm5hbWUpKSB0aGlzJDEucmFpc2VSZWNvdmVyYWJsZShub2RlJDIubG9jYWwuc3RhcnQsIFwiVGhlIGtleXdvcmQgJ1wiICsgbm9kZSQyLmxvY2FsLm5hbWUgKyBcIicgaXMgcmVzZXJ2ZWRcIilcbiAgICB9XG4gICAgdGhpcyQxLmNoZWNrTFZhbChub2RlJDIubG9jYWwsIHRydWUpXG4gICAgbm9kZXMucHVzaCh0aGlzJDEuZmluaXNoTm9kZShub2RlJDIsIFwiSW1wb3J0U3BlY2lmaWVyXCIpKVxuICB9XG4gIHJldHVybiBub2Rlc1xufVxuXG52YXIgcHAkMiA9IFBhcnNlci5wcm90b3R5cGVcblxuLy8gQ29udmVydCBleGlzdGluZyBleHByZXNzaW9uIGF0b20gdG8gYXNzaWduYWJsZSBwYXR0ZXJuXG4vLyBpZiBwb3NzaWJsZS5cblxucHAkMi50b0Fzc2lnbmFibGUgPSBmdW5jdGlvbihub2RlLCBpc0JpbmRpbmcpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIG5vZGUpIHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSBcIklkZW50aWZpZXJcIjpcbiAgICAgIGlmICh0aGlzLmluQXN5bmMgJiYgbm9kZS5uYW1lID09PSBcImF3YWl0XCIpXG4gICAgICAgIHRoaXMucmFpc2Uobm9kZS5zdGFydCwgXCJDYW4gbm90IHVzZSAnYXdhaXQnIGFzIGlkZW50aWZpZXIgaW5zaWRlIGFuIGFzeW5jIGZ1bmN0aW9uXCIpXG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIk9iamVjdFBhdHRlcm5cIjpcbiAgICBjYXNlIFwiQXJyYXlQYXR0ZXJuXCI6XG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIk9iamVjdEV4cHJlc3Npb25cIjpcbiAgICAgIG5vZGUudHlwZSA9IFwiT2JqZWN0UGF0dGVyblwiXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcCA9IG5vZGUucHJvcGVydGllc1tpXVxuICAgICAgICBpZiAocHJvcC5raW5kICE9PSBcImluaXRcIikgdGhpcyQxLnJhaXNlKHByb3Aua2V5LnN0YXJ0LCBcIk9iamVjdCBwYXR0ZXJuIGNhbid0IGNvbnRhaW4gZ2V0dGVyIG9yIHNldHRlclwiKVxuICAgICAgICB0aGlzJDEudG9Bc3NpZ25hYmxlKHByb3AudmFsdWUsIGlzQmluZGluZylcbiAgICAgIH1cbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiQXJyYXlFeHByZXNzaW9uXCI6XG4gICAgICBub2RlLnR5cGUgPSBcIkFycmF5UGF0dGVyblwiXG4gICAgICB0aGlzLnRvQXNzaWduYWJsZUxpc3Qobm9kZS5lbGVtZW50cywgaXNCaW5kaW5nKVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiOlxuICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09IFwiPVwiKSB7XG4gICAgICAgIG5vZGUudHlwZSA9IFwiQXNzaWdubWVudFBhdHRlcm5cIlxuICAgICAgICBkZWxldGUgbm9kZS5vcGVyYXRvclxuICAgICAgICB0aGlzLnRvQXNzaWduYWJsZShub2RlLmxlZnQsIGlzQmluZGluZylcbiAgICAgICAgLy8gZmFsbHMgdGhyb3VnaCB0byBBc3NpZ25tZW50UGF0dGVyblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yYWlzZShub2RlLmxlZnQuZW5kLCBcIk9ubHkgJz0nIG9wZXJhdG9yIGNhbiBiZSB1c2VkIGZvciBzcGVjaWZ5aW5nIGRlZmF1bHQgdmFsdWUuXCIpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICBjYXNlIFwiQXNzaWdubWVudFBhdHRlcm5cIjpcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIjpcbiAgICAgIG5vZGUuZXhwcmVzc2lvbiA9IHRoaXMudG9Bc3NpZ25hYmxlKG5vZGUuZXhwcmVzc2lvbiwgaXNCaW5kaW5nKVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJNZW1iZXJFeHByZXNzaW9uXCI6XG4gICAgICBpZiAoIWlzQmluZGluZykgYnJlYWtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLnJhaXNlKG5vZGUuc3RhcnQsIFwiQXNzaWduaW5nIHRvIHJ2YWx1ZVwiKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbm9kZVxufVxuXG4vLyBDb252ZXJ0IGxpc3Qgb2YgZXhwcmVzc2lvbiBhdG9tcyB0byBiaW5kaW5nIGxpc3QuXG5cbnBwJDIudG9Bc3NpZ25hYmxlTGlzdCA9IGZ1bmN0aW9uKGV4cHJMaXN0LCBpc0JpbmRpbmcpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIGVuZCA9IGV4cHJMaXN0Lmxlbmd0aFxuICBpZiAoZW5kKSB7XG4gICAgdmFyIGxhc3QgPSBleHByTGlzdFtlbmQgLSAxXVxuICAgIGlmIChsYXN0ICYmIGxhc3QudHlwZSA9PSBcIlJlc3RFbGVtZW50XCIpIHtcbiAgICAgIC0tZW5kXG4gICAgfSBlbHNlIGlmIChsYXN0ICYmIGxhc3QudHlwZSA9PSBcIlNwcmVhZEVsZW1lbnRcIikge1xuICAgICAgbGFzdC50eXBlID0gXCJSZXN0RWxlbWVudFwiXG4gICAgICB2YXIgYXJnID0gbGFzdC5hcmd1bWVudFxuICAgICAgdGhpcy50b0Fzc2lnbmFibGUoYXJnLCBpc0JpbmRpbmcpXG4gICAgICBpZiAoYXJnLnR5cGUgIT09IFwiSWRlbnRpZmllclwiICYmIGFyZy50eXBlICE9PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJiBhcmcudHlwZSAhPT0gXCJBcnJheVBhdHRlcm5cIilcbiAgICAgICAgdGhpcy51bmV4cGVjdGVkKGFyZy5zdGFydClcbiAgICAgIC0tZW5kXG4gICAgfVxuXG4gICAgaWYgKGlzQmluZGluZyAmJiBsYXN0ICYmIGxhc3QudHlwZSA9PT0gXCJSZXN0RWxlbWVudFwiICYmIGxhc3QuYXJndW1lbnQudHlwZSAhPT0gXCJJZGVudGlmaWVyXCIpXG4gICAgICB0aGlzLnVuZXhwZWN0ZWQobGFzdC5hcmd1bWVudC5zdGFydClcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgdmFyIGVsdCA9IGV4cHJMaXN0W2ldXG4gICAgaWYgKGVsdCkgdGhpcyQxLnRvQXNzaWduYWJsZShlbHQsIGlzQmluZGluZylcbiAgfVxuICByZXR1cm4gZXhwckxpc3Rcbn1cblxuLy8gUGFyc2VzIHNwcmVhZCBlbGVtZW50LlxuXG5wcCQyLnBhcnNlU3ByZWFkID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgdGhpcy5uZXh0KClcbiAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlNwcmVhZEVsZW1lbnRcIilcbn1cblxucHAkMi5wYXJzZVJlc3QgPSBmdW5jdGlvbihhbGxvd05vbklkZW50KSB7XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKVxuICB0aGlzLm5leHQoKVxuXG4gIC8vIFJlc3RFbGVtZW50IGluc2lkZSBvZiBhIGZ1bmN0aW9uIHBhcmFtZXRlciBtdXN0IGJlIGFuIGlkZW50aWZpZXJcbiAgaWYgKGFsbG93Tm9uSWRlbnQpIG5vZGUuYXJndW1lbnQgPSB0aGlzLnR5cGUgPT09IHR0Lm5hbWUgPyB0aGlzLnBhcnNlSWRlbnQoKSA6IHRoaXMudW5leHBlY3RlZCgpXG4gIGVsc2Ugbm9kZS5hcmd1bWVudCA9IHRoaXMudHlwZSA9PT0gdHQubmFtZSB8fCB0aGlzLnR5cGUgPT09IHR0LmJyYWNrZXRMID8gdGhpcy5wYXJzZUJpbmRpbmdBdG9tKCkgOiB0aGlzLnVuZXhwZWN0ZWQoKVxuXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJSZXN0RWxlbWVudFwiKVxufVxuXG4vLyBQYXJzZXMgbHZhbHVlIChhc3NpZ25hYmxlKSBhdG9tLlxuXG5wcCQyLnBhcnNlQmluZGluZ0F0b20gPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA8IDYpIHJldHVybiB0aGlzLnBhcnNlSWRlbnQoKVxuICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICBjYXNlIHR0Lm5hbWU6XG4gICAgcmV0dXJuIHRoaXMucGFyc2VJZGVudCgpXG5cbiAgY2FzZSB0dC5icmFja2V0TDpcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgICB0aGlzLm5leHQoKVxuICAgIG5vZGUuZWxlbWVudHMgPSB0aGlzLnBhcnNlQmluZGluZ0xpc3QodHQuYnJhY2tldFIsIHRydWUsIHRydWUpXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkFycmF5UGF0dGVyblwiKVxuXG4gIGNhc2UgdHQuYnJhY2VMOlxuICAgIHJldHVybiB0aGlzLnBhcnNlT2JqKHRydWUpXG5cbiAgZGVmYXVsdDpcbiAgICB0aGlzLnVuZXhwZWN0ZWQoKVxuICB9XG59XG5cbnBwJDIucGFyc2VCaW5kaW5nTGlzdCA9IGZ1bmN0aW9uKGNsb3NlLCBhbGxvd0VtcHR5LCBhbGxvd1RyYWlsaW5nQ29tbWEsIGFsbG93Tm9uSWRlbnQpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIGVsdHMgPSBbXSwgZmlyc3QgPSB0cnVlXG4gIHdoaWxlICghdGhpcy5lYXQoY2xvc2UpKSB7XG4gICAgaWYgKGZpcnN0KSBmaXJzdCA9IGZhbHNlXG4gICAgZWxzZSB0aGlzJDEuZXhwZWN0KHR0LmNvbW1hKVxuICAgIGlmIChhbGxvd0VtcHR5ICYmIHRoaXMkMS50eXBlID09PSB0dC5jb21tYSkge1xuICAgICAgZWx0cy5wdXNoKG51bGwpXG4gICAgfSBlbHNlIGlmIChhbGxvd1RyYWlsaW5nQ29tbWEgJiYgdGhpcyQxLmFmdGVyVHJhaWxpbmdDb21tYShjbG9zZSkpIHtcbiAgICAgIGJyZWFrXG4gICAgfSBlbHNlIGlmICh0aGlzJDEudHlwZSA9PT0gdHQuZWxsaXBzaXMpIHtcbiAgICAgIHZhciByZXN0ID0gdGhpcyQxLnBhcnNlUmVzdChhbGxvd05vbklkZW50KVxuICAgICAgdGhpcyQxLnBhcnNlQmluZGluZ0xpc3RJdGVtKHJlc3QpXG4gICAgICBlbHRzLnB1c2gocmVzdClcbiAgICAgIGlmICh0aGlzJDEudHlwZSA9PT0gdHQuY29tbWEpIHRoaXMkMS5yYWlzZSh0aGlzJDEuc3RhcnQsIFwiQ29tbWEgaXMgbm90IHBlcm1pdHRlZCBhZnRlciB0aGUgcmVzdCBlbGVtZW50XCIpXG4gICAgICB0aGlzJDEuZXhwZWN0KGNsb3NlKVxuICAgICAgYnJlYWtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVsZW0gPSB0aGlzJDEucGFyc2VNYXliZURlZmF1bHQodGhpcyQxLnN0YXJ0LCB0aGlzJDEuc3RhcnRMb2MpXG4gICAgICB0aGlzJDEucGFyc2VCaW5kaW5nTGlzdEl0ZW0oZWxlbSlcbiAgICAgIGVsdHMucHVzaChlbGVtKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZWx0c1xufVxuXG5wcCQyLnBhcnNlQmluZGluZ0xpc3RJdGVtID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgcmV0dXJuIHBhcmFtXG59XG5cbi8vIFBhcnNlcyBhc3NpZ25tZW50IHBhdHRlcm4gYXJvdW5kIGdpdmVuIGF0b20gaWYgcG9zc2libGUuXG5cbnBwJDIucGFyc2VNYXliZURlZmF1bHQgPSBmdW5jdGlvbihzdGFydFBvcywgc3RhcnRMb2MsIGxlZnQpIHtcbiAgbGVmdCA9IGxlZnQgfHwgdGhpcy5wYXJzZUJpbmRpbmdBdG9tKClcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA8IDYgfHwgIXRoaXMuZWF0KHR0LmVxKSkgcmV0dXJuIGxlZnRcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYylcbiAgbm9kZS5sZWZ0ID0gbGVmdFxuICBub2RlLnJpZ2h0ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIpXG59XG5cbi8vIFZlcmlmeSB0aGF0IGEgbm9kZSBpcyBhbiBsdmFsIOKAlCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgYXNzaWduZWRcbi8vIHRvLlxuXG5wcCQyLmNoZWNrTFZhbCA9IGZ1bmN0aW9uKGV4cHIsIGlzQmluZGluZywgY2hlY2tDbGFzaGVzKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gIGNhc2UgXCJJZGVudGlmaWVyXCI6XG4gICAgaWYgKHRoaXMuc3RyaWN0ICYmIHRoaXMucmVzZXJ2ZWRXb3Jkc1N0cmljdEJpbmQudGVzdChleHByLm5hbWUpKVxuICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGV4cHIuc3RhcnQsIChpc0JpbmRpbmcgPyBcIkJpbmRpbmcgXCIgOiBcIkFzc2lnbmluZyB0byBcIikgKyBleHByLm5hbWUgKyBcIiBpbiBzdHJpY3QgbW9kZVwiKVxuICAgIGlmIChjaGVja0NsYXNoZXMpIHtcbiAgICAgIGlmIChoYXMoY2hlY2tDbGFzaGVzLCBleHByLm5hbWUpKVxuICAgICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXhwci5zdGFydCwgXCJBcmd1bWVudCBuYW1lIGNsYXNoXCIpXG4gICAgICBjaGVja0NsYXNoZXNbZXhwci5uYW1lXSA9IHRydWVcbiAgICB9XG4gICAgYnJlYWtcblxuICBjYXNlIFwiTWVtYmVyRXhwcmVzc2lvblwiOlxuICAgIGlmIChpc0JpbmRpbmcpIHRoaXMucmFpc2VSZWNvdmVyYWJsZShleHByLnN0YXJ0LCAoaXNCaW5kaW5nID8gXCJCaW5kaW5nXCIgOiBcIkFzc2lnbmluZyB0b1wiKSArIFwiIG1lbWJlciBleHByZXNzaW9uXCIpXG4gICAgYnJlYWtcblxuICBjYXNlIFwiT2JqZWN0UGF0dGVyblwiOlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKVxuICAgICAgdGhpcyQxLmNoZWNrTFZhbChleHByLnByb3BlcnRpZXNbaV0udmFsdWUsIGlzQmluZGluZywgY2hlY2tDbGFzaGVzKVxuICAgIGJyZWFrXG5cbiAgY2FzZSBcIkFycmF5UGF0dGVyblwiOlxuICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGV4cHIuZWxlbWVudHMubGVuZ3RoOyBpJDErKykge1xuICAgICAgdmFyIGVsZW0gPSBleHByLmVsZW1lbnRzW2kkMV1cbiAgICAgIGlmIChlbGVtKSB0aGlzJDEuY2hlY2tMVmFsKGVsZW0sIGlzQmluZGluZywgY2hlY2tDbGFzaGVzKVxuICAgIH1cbiAgICBicmVha1xuXG4gIGNhc2UgXCJBc3NpZ25tZW50UGF0dGVyblwiOlxuICAgIHRoaXMuY2hlY2tMVmFsKGV4cHIubGVmdCwgaXNCaW5kaW5nLCBjaGVja0NsYXNoZXMpXG4gICAgYnJlYWtcblxuICBjYXNlIFwiUmVzdEVsZW1lbnRcIjpcbiAgICB0aGlzLmNoZWNrTFZhbChleHByLmFyZ3VtZW50LCBpc0JpbmRpbmcsIGNoZWNrQ2xhc2hlcylcbiAgICBicmVha1xuXG4gIGNhc2UgXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiOlxuICAgIHRoaXMuY2hlY2tMVmFsKGV4cHIuZXhwcmVzc2lvbiwgaXNCaW5kaW5nLCBjaGVja0NsYXNoZXMpXG4gICAgYnJlYWtcblxuICBkZWZhdWx0OlxuICAgIHRoaXMucmFpc2UoZXhwci5zdGFydCwgKGlzQmluZGluZyA/IFwiQmluZGluZ1wiIDogXCJBc3NpZ25pbmcgdG9cIikgKyBcIiBydmFsdWVcIilcbiAgfVxufVxuXG4vLyBBIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlciBvcGVyYXRlcyBieSBkZWZpbmluZyBmdW5jdGlvbnMgZm9yIGFsbFxuLy8gc3ludGFjdGljIGVsZW1lbnRzLCBhbmQgcmVjdXJzaXZlbHkgY2FsbGluZyB0aG9zZSwgZWFjaCBmdW5jdGlvblxuLy8gYWR2YW5jaW5nIHRoZSBpbnB1dCBzdHJlYW0gYW5kIHJldHVybmluZyBhbiBBU1Qgbm9kZS4gUHJlY2VkZW5jZVxuLy8gb2YgY29uc3RydWN0cyAoZm9yIGV4YW1wbGUsIHRoZSBmYWN0IHRoYXQgYCF4WzFdYCBtZWFucyBgISh4WzFdKWBcbi8vIGluc3RlYWQgb2YgYCgheClbMV1gIGlzIGhhbmRsZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUgcGFyc2VyXG4vLyBmdW5jdGlvbiB0aGF0IHBhcnNlcyB1bmFyeSBwcmVmaXggb3BlcmF0b3JzIGlzIGNhbGxlZCBmaXJzdCwgYW5kXG4vLyBpbiB0dXJuIGNhbGxzIHRoZSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBgW11gIHN1YnNjcmlwdHMg4oCUIHRoYXRcbi8vIHdheSwgaXQnbGwgcmVjZWl2ZSB0aGUgbm9kZSBmb3IgYHhbMV1gIGFscmVhZHkgcGFyc2VkLCBhbmQgd3JhcHNcbi8vICp0aGF0KiBpbiB0aGUgdW5hcnkgb3BlcmF0b3Igbm9kZS5cbi8vXG4vLyBBY29ybiB1c2VzIGFuIFtvcGVyYXRvciBwcmVjZWRlbmNlIHBhcnNlcl1bb3BwXSB0byBoYW5kbGUgYmluYXJ5XG4vLyBvcGVyYXRvciBwcmVjZWRlbmNlLCBiZWNhdXNlIGl0IGlzIG11Y2ggbW9yZSBjb21wYWN0IHRoYW4gdXNpbmdcbi8vIHRoZSB0ZWNobmlxdWUgb3V0bGluZWQgYWJvdmUsIHdoaWNoIHVzZXMgZGlmZmVyZW50LCBuZXN0aW5nXG4vLyBmdW5jdGlvbnMgdG8gc3BlY2lmeSBwcmVjZWRlbmNlLCBmb3IgYWxsIG9mIHRoZSB0ZW4gYmluYXJ5XG4vLyBwcmVjZWRlbmNlIGxldmVscyB0aGF0IEphdmFTY3JpcHQgZGVmaW5lcy5cbi8vXG4vLyBbb3BwXTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PcGVyYXRvci1wcmVjZWRlbmNlX3BhcnNlclxuXG52YXIgcHAkMyA9IFBhcnNlci5wcm90b3R5cGVcblxuLy8gQ2hlY2sgaWYgcHJvcGVydHkgbmFtZSBjbGFzaGVzIHdpdGggYWxyZWFkeSBhZGRlZC5cbi8vIE9iamVjdC9jbGFzcyBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGFyZSBub3QgYWxsb3dlZCB0byBjbGFzaCDigJRcbi8vIGVpdGhlciB3aXRoIGVhY2ggb3RoZXIgb3Igd2l0aCBhbiBpbml0IHByb3BlcnR5IOKAlCBhbmQgaW5cbi8vIHN0cmljdCBtb2RlLCBpbml0IHByb3BlcnRpZXMgYXJlIGFsc28gbm90IGFsbG93ZWQgdG8gYmUgcmVwZWF0ZWQuXG5cbnBwJDMuY2hlY2tQcm9wQ2xhc2ggPSBmdW5jdGlvbihwcm9wLCBwcm9wSGFzaCkge1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgKHByb3AuY29tcHV0ZWQgfHwgcHJvcC5tZXRob2QgfHwgcHJvcC5zaG9ydGhhbmQpKVxuICAgIHJldHVyblxuICB2YXIga2V5ID0gcHJvcC5rZXk7XG4gIHZhciBuYW1lXG4gIHN3aXRjaCAoa2V5LnR5cGUpIHtcbiAgY2FzZSBcIklkZW50aWZpZXJcIjogbmFtZSA9IGtleS5uYW1lOyBicmVha1xuICBjYXNlIFwiTGl0ZXJhbFwiOiBuYW1lID0gU3RyaW5nKGtleS52YWx1ZSk7IGJyZWFrXG4gIGRlZmF1bHQ6IHJldHVyblxuICB9XG4gIHZhciBraW5kID0gcHJvcC5raW5kO1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHtcbiAgICBpZiAobmFtZSA9PT0gXCJfX3Byb3RvX19cIiAmJiBraW5kID09PSBcImluaXRcIikge1xuICAgICAgaWYgKHByb3BIYXNoLnByb3RvKSB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoa2V5LnN0YXJ0LCBcIlJlZGVmaW5pdGlvbiBvZiBfX3Byb3RvX18gcHJvcGVydHlcIilcbiAgICAgIHByb3BIYXNoLnByb3RvID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBuYW1lID0gXCIkXCIgKyBuYW1lXG4gIHZhciBvdGhlciA9IHByb3BIYXNoW25hbWVdXG4gIGlmIChvdGhlcikge1xuICAgIHZhciBpc0dldFNldCA9IGtpbmQgIT09IFwiaW5pdFwiXG4gICAgaWYgKCh0aGlzLnN0cmljdCB8fCBpc0dldFNldCkgJiYgb3RoZXJba2luZF0gfHwgIShpc0dldFNldCBeIG90aGVyLmluaXQpKVxuICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGtleS5zdGFydCwgXCJSZWRlZmluaXRpb24gb2YgcHJvcGVydHlcIilcbiAgfSBlbHNlIHtcbiAgICBvdGhlciA9IHByb3BIYXNoW25hbWVdID0ge1xuICAgICAgaW5pdDogZmFsc2UsXG4gICAgICBnZXQ6IGZhbHNlLFxuICAgICAgc2V0OiBmYWxzZVxuICAgIH1cbiAgfVxuICBvdGhlcltraW5kXSA9IHRydWVcbn1cblxuLy8gIyMjIEV4cHJlc3Npb24gcGFyc2luZ1xuXG4vLyBUaGVzZSBuZXN0LCBmcm9tIHRoZSBtb3N0IGdlbmVyYWwgZXhwcmVzc2lvbiB0eXBlIGF0IHRoZSB0b3AgdG9cbi8vICdhdG9taWMnLCBub25kaXZpc2libGUgZXhwcmVzc2lvbiB0eXBlcyBhdCB0aGUgYm90dG9tLiBNb3N0IG9mXG4vLyB0aGUgZnVuY3Rpb25zIHdpbGwgc2ltcGx5IGxldCB0aGUgZnVuY3Rpb24ocykgYmVsb3cgdGhlbSBwYXJzZSxcbi8vIGFuZCwgKmlmKiB0aGUgc3ludGFjdGljIGNvbnN0cnVjdCB0aGV5IGhhbmRsZSBpcyBwcmVzZW50LCB3cmFwXG4vLyB0aGUgQVNUIG5vZGUgdGhhdCB0aGUgaW5uZXIgcGFyc2VyIGdhdmUgdGhlbSBpbiBhbm90aGVyIG5vZGUuXG5cbi8vIFBhcnNlIGEgZnVsbCBleHByZXNzaW9uLiBUaGUgb3B0aW9uYWwgYXJndW1lbnRzIGFyZSB1c2VkIHRvXG4vLyBmb3JiaWQgdGhlIGBpbmAgb3BlcmF0b3IgKGluIGZvciBsb29wcyBpbml0YWxpemF0aW9uIGV4cHJlc3Npb25zKVxuLy8gYW5kIHByb3ZpZGUgcmVmZXJlbmNlIGZvciBzdG9yaW5nICc9JyBvcGVyYXRvciBpbnNpZGUgc2hvcnRoYW5kXG4vLyBwcm9wZXJ0eSBhc3NpZ25tZW50IGluIGNvbnRleHRzIHdoZXJlIGJvdGggb2JqZWN0IGV4cHJlc3Npb25cbi8vIGFuZCBvYmplY3QgcGF0dGVybiBtaWdodCBhcHBlYXIgKHNvIGl0J3MgcG9zc2libGUgdG8gcmFpc2Vcbi8vIGRlbGF5ZWQgc3ludGF4IGVycm9yIGF0IGNvcnJlY3QgcG9zaXRpb24pLlxuXG5wcCQzLnBhcnNlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jXG4gIHZhciBleHByID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG4gIGlmICh0aGlzLnR5cGUgPT09IHR0LmNvbW1hKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYylcbiAgICBub2RlLmV4cHJlc3Npb25zID0gW2V4cHJdXG4gICAgd2hpbGUgKHRoaXMuZWF0KHR0LmNvbW1hKSkgbm9kZS5leHByZXNzaW9ucy5wdXNoKHRoaXMkMS5wYXJzZU1heWJlQXNzaWduKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpKVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJTZXF1ZW5jZUV4cHJlc3Npb25cIilcbiAgfVxuICByZXR1cm4gZXhwclxufVxuXG4vLyBQYXJzZSBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24uIFRoaXMgaW5jbHVkZXMgYXBwbGljYXRpb25zIG9mXG4vLyBvcGVyYXRvcnMgbGlrZSBgKz1gLlxuXG5wcCQzLnBhcnNlTWF5YmVBc3NpZ24gPSBmdW5jdGlvbihub0luLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBhZnRlckxlZnRQYXJzZSkge1xuICBpZiAodGhpcy5pbkdlbmVyYXRvciAmJiB0aGlzLmlzQ29udGV4dHVhbChcInlpZWxkXCIpKSByZXR1cm4gdGhpcy5wYXJzZVlpZWxkKClcblxuICB2YXIgb3duRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IGZhbHNlLCBvbGRQYXJlbkFzc2lnbiA9IC0xXG4gIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgb2xkUGFyZW5Bc3NpZ24gPSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ25cbiAgICByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPSAtMVxuICB9IGVsc2Uge1xuICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgPSBuZXcgRGVzdHJ1Y3R1cmluZ0Vycm9yc1xuICAgIG93bkRlc3RydWN0dXJpbmdFcnJvcnMgPSB0cnVlXG4gIH1cblxuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2NcbiAgaWYgKHRoaXMudHlwZSA9PSB0dC5wYXJlbkwgfHwgdGhpcy50eXBlID09IHR0Lm5hbWUpXG4gICAgdGhpcy5wb3RlbnRpYWxBcnJvd0F0ID0gdGhpcy5zdGFydFxuICB2YXIgbGVmdCA9IHRoaXMucGFyc2VNYXliZUNvbmRpdGlvbmFsKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG4gIGlmIChhZnRlckxlZnRQYXJzZSkgbGVmdCA9IGFmdGVyTGVmdFBhcnNlLmNhbGwodGhpcywgbGVmdCwgc3RhcnRQb3MsIHN0YXJ0TG9jKVxuICBpZiAodGhpcy50eXBlLmlzQXNzaWduKSB7XG4gICAgdGhpcy5jaGVja1BhdHRlcm5FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSlcbiAgICBpZiAoIW93bkRlc3RydWN0dXJpbmdFcnJvcnMpIERlc3RydWN0dXJpbmdFcnJvcnMuY2FsbChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpXG4gICAgbm9kZS5vcGVyYXRvciA9IHRoaXMudmFsdWVcbiAgICBub2RlLmxlZnQgPSB0aGlzLnR5cGUgPT09IHR0LmVxID8gdGhpcy50b0Fzc2lnbmFibGUobGVmdCkgOiBsZWZ0XG4gICAgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5zaG9ydGhhbmRBc3NpZ24gPSAtMSAvLyByZXNldCBiZWNhdXNlIHNob3J0aGFuZCBkZWZhdWx0IHdhcyB1c2VkIGNvcnJlY3RseVxuICAgIHRoaXMuY2hlY2tMVmFsKGxlZnQpXG4gICAgdGhpcy5uZXh0KClcbiAgICBub2RlLnJpZ2h0ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKG5vSW4pXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIpXG4gIH0gZWxzZSB7XG4gICAgaWYgKG93bkRlc3RydWN0dXJpbmdFcnJvcnMpIHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpXG4gIH1cbiAgaWYgKG9sZFBhcmVuQXNzaWduID4gLTEpIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA9IG9sZFBhcmVuQXNzaWduXG4gIHJldHVybiBsZWZ0XG59XG5cbi8vIFBhcnNlIGEgdGVybmFyeSBjb25kaXRpb25hbCAoYD86YCkgb3BlcmF0b3IuXG5cbnBwJDMucGFyc2VNYXliZUNvbmRpdGlvbmFsID0gZnVuY3Rpb24obm9JbiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2NcbiAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlRXhwck9wcyhub0luLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuICBpZiAodGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykpIHJldHVybiBleHByXG4gIGlmICh0aGlzLmVhdCh0dC5xdWVzdGlvbikpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKVxuICAgIG5vZGUudGVzdCA9IGV4cHJcbiAgICBub2RlLmNvbnNlcXVlbnQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKVxuICAgIHRoaXMuZXhwZWN0KHR0LmNvbG9uKVxuICAgIG5vZGUuYWx0ZXJuYXRlID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKG5vSW4pXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKVxuICB9XG4gIHJldHVybiBleHByXG59XG5cbi8vIFN0YXJ0IHRoZSBwcmVjZWRlbmNlIHBhcnNlci5cblxucHAkMy5wYXJzZUV4cHJPcHMgPSBmdW5jdGlvbihub0luLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvY1xuICB2YXIgZXhwciA9IHRoaXMucGFyc2VNYXliZVVuYXJ5KHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGZhbHNlKVxuICBpZiAodGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykpIHJldHVybiBleHByXG4gIHJldHVybiB0aGlzLnBhcnNlRXhwck9wKGV4cHIsIHN0YXJ0UG9zLCBzdGFydExvYywgLTEsIG5vSW4pXG59XG5cbi8vIFBhcnNlIGJpbmFyeSBvcGVyYXRvcnMgd2l0aCB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZSBwYXJzaW5nXG4vLyBhbGdvcml0aG0uIGBsZWZ0YCBpcyB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlIG9wZXJhdG9yLlxuLy8gYG1pblByZWNgIHByb3ZpZGVzIGNvbnRleHQgdGhhdCBhbGxvd3MgdGhlIGZ1bmN0aW9uIHRvIHN0b3AgYW5kXG4vLyBkZWZlciBmdXJ0aGVyIHBhcnNlciB0byBvbmUgb2YgaXRzIGNhbGxlcnMgd2hlbiBpdCBlbmNvdW50ZXJzIGFuXG4vLyBvcGVyYXRvciB0aGF0IGhhcyBhIGxvd2VyIHByZWNlZGVuY2UgdGhhbiB0aGUgc2V0IGl0IGlzIHBhcnNpbmcuXG5cbnBwJDMucGFyc2VFeHByT3AgPSBmdW5jdGlvbihsZWZ0LCBsZWZ0U3RhcnRQb3MsIGxlZnRTdGFydExvYywgbWluUHJlYywgbm9Jbikge1xuICB2YXIgcHJlYyA9IHRoaXMudHlwZS5iaW5vcFxuICBpZiAocHJlYyAhPSBudWxsICYmICghbm9JbiB8fCB0aGlzLnR5cGUgIT09IHR0Ll9pbikpIHtcbiAgICBpZiAocHJlYyA+IG1pblByZWMpIHtcbiAgICAgIHZhciBsb2dpY2FsID0gdGhpcy50eXBlID09PSB0dC5sb2dpY2FsT1IgfHwgdGhpcy50eXBlID09PSB0dC5sb2dpY2FsQU5EXG4gICAgICB2YXIgb3AgPSB0aGlzLnZhbHVlXG4gICAgICB0aGlzLm5leHQoKVxuICAgICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jXG4gICAgICB2YXIgcmlnaHQgPSB0aGlzLnBhcnNlRXhwck9wKHRoaXMucGFyc2VNYXliZVVuYXJ5KG51bGwsIGZhbHNlKSwgc3RhcnRQb3MsIHN0YXJ0TG9jLCBwcmVjLCBub0luKVxuICAgICAgdmFyIG5vZGUgPSB0aGlzLmJ1aWxkQmluYXJ5KGxlZnRTdGFydFBvcywgbGVmdFN0YXJ0TG9jLCBsZWZ0LCByaWdodCwgb3AsIGxvZ2ljYWwpXG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUV4cHJPcChub2RlLCBsZWZ0U3RhcnRQb3MsIGxlZnRTdGFydExvYywgbWluUHJlYywgbm9JbilcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxlZnRcbn1cblxucHAkMy5idWlsZEJpbmFyeSA9IGZ1bmN0aW9uKHN0YXJ0UG9zLCBzdGFydExvYywgbGVmdCwgcmlnaHQsIG9wLCBsb2dpY2FsKSB7XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpXG4gIG5vZGUubGVmdCA9IGxlZnRcbiAgbm9kZS5vcGVyYXRvciA9IG9wXG4gIG5vZGUucmlnaHQgPSByaWdodFxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIGxvZ2ljYWwgPyBcIkxvZ2ljYWxFeHByZXNzaW9uXCIgOiBcIkJpbmFyeUV4cHJlc3Npb25cIilcbn1cblxuLy8gUGFyc2UgdW5hcnkgb3BlcmF0b3JzLCBib3RoIHByZWZpeCBhbmQgcG9zdGZpeC5cblxucHAkMy5wYXJzZU1heWJlVW5hcnkgPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBzYXdVbmFyeSkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2MsIGV4cHJcbiAgaWYgKHRoaXMuaW5Bc3luYyAmJiB0aGlzLmlzQ29udGV4dHVhbChcImF3YWl0XCIpKSB7XG4gICAgZXhwciA9IHRoaXMucGFyc2VBd2FpdChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuICAgIHNhd1VuYXJ5ID0gdHJ1ZVxuICB9IGVsc2UgaWYgKHRoaXMudHlwZS5wcmVmaXgpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCksIHVwZGF0ZSA9IHRoaXMudHlwZSA9PT0gdHQuaW5jRGVjXG4gICAgbm9kZS5vcGVyYXRvciA9IHRoaXMudmFsdWVcbiAgICBub2RlLnByZWZpeCA9IHRydWVcbiAgICB0aGlzLm5leHQoKVxuICAgIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVVbmFyeShudWxsLCB0cnVlKVxuICAgIHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpXG4gICAgaWYgKHVwZGF0ZSkgdGhpcy5jaGVja0xWYWwobm9kZS5hcmd1bWVudClcbiAgICBlbHNlIGlmICh0aGlzLnN0cmljdCAmJiBub2RlLm9wZXJhdG9yID09PSBcImRlbGV0ZVwiICYmXG4gICAgICAgICAgICAgbm9kZS5hcmd1bWVudC50eXBlID09PSBcIklkZW50aWZpZXJcIilcbiAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIkRlbGV0aW5nIGxvY2FsIHZhcmlhYmxlIGluIHN0cmljdCBtb2RlXCIpXG4gICAgZWxzZSBzYXdVbmFyeSA9IHRydWVcbiAgICBleHByID0gdGhpcy5maW5pc2hOb2RlKG5vZGUsIHVwZGF0ZSA/IFwiVXBkYXRlRXhwcmVzc2lvblwiIDogXCJVbmFyeUV4cHJlc3Npb25cIilcbiAgfSBlbHNlIHtcbiAgICBleHByID0gdGhpcy5wYXJzZUV4cHJTdWJzY3JpcHRzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG4gICAgaWYgKHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpKSByZXR1cm4gZXhwclxuICAgIHdoaWxlICh0aGlzLnR5cGUucG9zdGZpeCAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSkge1xuICAgICAgdmFyIG5vZGUkMSA9IHRoaXMkMS5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpXG4gICAgICBub2RlJDEub3BlcmF0b3IgPSB0aGlzJDEudmFsdWVcbiAgICAgIG5vZGUkMS5wcmVmaXggPSBmYWxzZVxuICAgICAgbm9kZSQxLmFyZ3VtZW50ID0gZXhwclxuICAgICAgdGhpcyQxLmNoZWNrTFZhbChleHByKVxuICAgICAgdGhpcyQxLm5leHQoKVxuICAgICAgZXhwciA9IHRoaXMkMS5maW5pc2hOb2RlKG5vZGUkMSwgXCJVcGRhdGVFeHByZXNzaW9uXCIpXG4gICAgfVxuICB9XG5cbiAgaWYgKCFzYXdVbmFyeSAmJiB0aGlzLmVhdCh0dC5zdGFyc3RhcikpXG4gICAgcmV0dXJuIHRoaXMuYnVpbGRCaW5hcnkoc3RhcnRQb3MsIHN0YXJ0TG9jLCBleHByLCB0aGlzLnBhcnNlTWF5YmVVbmFyeShudWxsLCBmYWxzZSksIFwiKipcIiwgZmFsc2UpXG4gIGVsc2VcbiAgICByZXR1cm4gZXhwclxufVxuXG4vLyBQYXJzZSBjYWxsLCBkb3QsIGFuZCBgW11gLXN1YnNjcmlwdCBleHByZXNzaW9ucy5cblxucHAkMy5wYXJzZUV4cHJTdWJzY3JpcHRzID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2NcbiAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlRXhwckF0b20ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcbiAgdmFyIHNraXBBcnJvd1N1YnNjcmlwdHMgPSBleHByLnR5cGUgPT09IFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIiAmJiB0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva1N0YXJ0LCB0aGlzLmxhc3RUb2tFbmQpICE9PSBcIilcIlxuICBpZiAodGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykgfHwgc2tpcEFycm93U3Vic2NyaXB0cykgcmV0dXJuIGV4cHJcbiAgdmFyIHJlc3VsdCA9IHRoaXMucGFyc2VTdWJzY3JpcHRzKGV4cHIsIHN0YXJ0UG9zLCBzdGFydExvYylcbiAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgJiYgcmVzdWx0LnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA+PSByZXN1bHQuc3RhcnQpIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA9IC0xXG4gICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEJpbmQgPj0gcmVzdWx0LnN0YXJ0KSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kID0gLTFcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbnBwJDMucGFyc2VTdWJzY3JpcHRzID0gZnVuY3Rpb24oYmFzZSwgc3RhcnRQb3MsIHN0YXJ0TG9jLCBub0NhbGxzKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBtYXliZUFzeW5jQXJyb3cgPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCAmJiBiYXNlLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmIGJhc2UubmFtZSA9PT0gXCJhc3luY1wiICYmXG4gICAgICB0aGlzLmxhc3RUb2tFbmQgPT0gYmFzZS5lbmQgJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKClcbiAgZm9yICh2YXIgY29tcHV0ZWQ7Oykge1xuICAgIGlmICgoY29tcHV0ZWQgPSB0aGlzJDEuZWF0KHR0LmJyYWNrZXRMKSkgfHwgdGhpcyQxLmVhdCh0dC5kb3QpKSB7XG4gICAgICB2YXIgbm9kZSA9IHRoaXMkMS5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpXG4gICAgICBub2RlLm9iamVjdCA9IGJhc2VcbiAgICAgIG5vZGUucHJvcGVydHkgPSBjb21wdXRlZCA/IHRoaXMkMS5wYXJzZUV4cHJlc3Npb24oKSA6IHRoaXMkMS5wYXJzZUlkZW50KHRydWUpXG4gICAgICBub2RlLmNvbXB1dGVkID0gISFjb21wdXRlZFxuICAgICAgaWYgKGNvbXB1dGVkKSB0aGlzJDEuZXhwZWN0KHR0LmJyYWNrZXRSKVxuICAgICAgYmFzZSA9IHRoaXMkMS5maW5pc2hOb2RlKG5vZGUsIFwiTWVtYmVyRXhwcmVzc2lvblwiKVxuICAgIH0gZWxzZSBpZiAoIW5vQ2FsbHMgJiYgdGhpcyQxLmVhdCh0dC5wYXJlbkwpKSB7XG4gICAgICB2YXIgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IG5ldyBEZXN0cnVjdHVyaW5nRXJyb3JzLCBvbGRZaWVsZFBvcyA9IHRoaXMkMS55aWVsZFBvcywgb2xkQXdhaXRQb3MgPSB0aGlzJDEuYXdhaXRQb3NcbiAgICAgIHRoaXMkMS55aWVsZFBvcyA9IDBcbiAgICAgIHRoaXMkMS5hd2FpdFBvcyA9IDBcbiAgICAgIHZhciBleHByTGlzdCA9IHRoaXMkMS5wYXJzZUV4cHJMaXN0KHR0LnBhcmVuUiwgdGhpcyQxLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCwgZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG4gICAgICBpZiAobWF5YmVBc3luY0Fycm93ICYmICF0aGlzJDEuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgJiYgdGhpcyQxLmVhdCh0dC5hcnJvdykpIHtcbiAgICAgICAgdGhpcyQxLmNoZWNrUGF0dGVybkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBmYWxzZSlcbiAgICAgICAgdGhpcyQxLmNoZWNrWWllbGRBd2FpdEluRGVmYXVsdFBhcmFtcygpXG4gICAgICAgIHRoaXMkMS55aWVsZFBvcyA9IG9sZFlpZWxkUG9zXG4gICAgICAgIHRoaXMkMS5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zXG4gICAgICAgIHJldHVybiB0aGlzJDEucGFyc2VBcnJvd0V4cHJlc3Npb24odGhpcyQxLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyksIGV4cHJMaXN0LCB0cnVlKVxuICAgICAgfVxuICAgICAgdGhpcyQxLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKVxuICAgICAgdGhpcyQxLnlpZWxkUG9zID0gb2xkWWllbGRQb3MgfHwgdGhpcyQxLnlpZWxkUG9zXG4gICAgICB0aGlzJDEuYXdhaXRQb3MgPSBvbGRBd2FpdFBvcyB8fCB0aGlzJDEuYXdhaXRQb3NcbiAgICAgIHZhciBub2RlJDEgPSB0aGlzJDEuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKVxuICAgICAgbm9kZSQxLmNhbGxlZSA9IGJhc2VcbiAgICAgIG5vZGUkMS5hcmd1bWVudHMgPSBleHByTGlzdFxuICAgICAgYmFzZSA9IHRoaXMkMS5maW5pc2hOb2RlKG5vZGUkMSwgXCJDYWxsRXhwcmVzc2lvblwiKVxuICAgIH0gZWxzZSBpZiAodGhpcyQxLnR5cGUgPT09IHR0LmJhY2tRdW90ZSkge1xuICAgICAgdmFyIG5vZGUkMiA9IHRoaXMkMS5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpXG4gICAgICBub2RlJDIudGFnID0gYmFzZVxuICAgICAgbm9kZSQyLnF1YXNpID0gdGhpcyQxLnBhcnNlVGVtcGxhdGUoKVxuICAgICAgYmFzZSA9IHRoaXMkMS5maW5pc2hOb2RlKG5vZGUkMiwgXCJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb25cIilcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJhc2VcbiAgICB9XG4gIH1cbn1cblxuLy8gUGFyc2UgYW4gYXRvbWljIGV4cHJlc3Npb24g4oCUIGVpdGhlciBhIHNpbmdsZSB0b2tlbiB0aGF0IGlzIGFuXG4vLyBleHByZXNzaW9uLCBhbiBleHByZXNzaW9uIHN0YXJ0ZWQgYnkgYSBrZXl3b3JkIGxpa2UgYGZ1bmN0aW9uYCBvclxuLy8gYG5ld2AsIG9yIGFuIGV4cHJlc3Npb24gd3JhcHBlZCBpbiBwdW5jdHVhdGlvbiBsaWtlIGAoKWAsIGBbXWAsXG4vLyBvciBge31gLlxuXG5wcCQzLnBhcnNlRXhwckF0b20gPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciBub2RlLCBjYW5CZUFycm93ID0gdGhpcy5wb3RlbnRpYWxBcnJvd0F0ID09IHRoaXMuc3RhcnRcbiAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgY2FzZSB0dC5fc3VwZXI6XG4gICAgaWYgKCF0aGlzLmluRnVuY3Rpb24pXG4gICAgICB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ3N1cGVyJyBvdXRzaWRlIG9mIGZ1bmN0aW9uIG9yIGNsYXNzXCIpXG5cbiAgY2FzZSB0dC5fdGhpczpcbiAgICB2YXIgdHlwZSA9IHRoaXMudHlwZSA9PT0gdHQuX3RoaXMgPyBcIlRoaXNFeHByZXNzaW9uXCIgOiBcIlN1cGVyXCJcbiAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKVxuICAgIHRoaXMubmV4dCgpXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCB0eXBlKVxuXG4gIGNhc2UgdHQubmFtZTpcbiAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2NcbiAgICB2YXIgaWQgPSB0aGlzLnBhcnNlSWRlbnQodGhpcy50eXBlICE9PSB0dC5uYW1lKVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCAmJiBpZC5uYW1lID09PSBcImFzeW5jXCIgJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgJiYgdGhpcy5lYXQodHQuX2Z1bmN0aW9uKSlcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCBmYWxzZSwgZmFsc2UsIHRydWUpXG4gICAgaWYgKGNhbkJlQXJyb3cgJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICAgIGlmICh0aGlzLmVhdCh0dC5hcnJvdykpXG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQXJyb3dFeHByZXNzaW9uKHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKSwgW2lkXSwgZmFsc2UpXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDggJiYgaWQubmFtZSA9PT0gXCJhc3luY1wiICYmIHRoaXMudHlwZSA9PT0gdHQubmFtZSkge1xuICAgICAgICBpZCA9IHRoaXMucGFyc2VJZGVudCgpXG4gICAgICAgIGlmICh0aGlzLmNhbkluc2VydFNlbWljb2xvbigpIHx8ICF0aGlzLmVhdCh0dC5hcnJvdykpXG4gICAgICAgICAgdGhpcy51bmV4cGVjdGVkKClcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCBbaWRdLCB0cnVlKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaWRcblxuICBjYXNlIHR0LnJlZ2V4cDpcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlXG4gICAgbm9kZSA9IHRoaXMucGFyc2VMaXRlcmFsKHZhbHVlLnZhbHVlKVxuICAgIG5vZGUucmVnZXggPSB7cGF0dGVybjogdmFsdWUucGF0dGVybiwgZmxhZ3M6IHZhbHVlLmZsYWdzfVxuICAgIHJldHVybiBub2RlXG5cbiAgY2FzZSB0dC5udW06IGNhc2UgdHQuc3RyaW5nOlxuICAgIHJldHVybiB0aGlzLnBhcnNlTGl0ZXJhbCh0aGlzLnZhbHVlKVxuXG4gIGNhc2UgdHQuX251bGw6IGNhc2UgdHQuX3RydWU6IGNhc2UgdHQuX2ZhbHNlOlxuICAgIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gICAgbm9kZS52YWx1ZSA9IHRoaXMudHlwZSA9PT0gdHQuX251bGwgPyBudWxsIDogdGhpcy50eXBlID09PSB0dC5fdHJ1ZVxuICAgIG5vZGUucmF3ID0gdGhpcy50eXBlLmtleXdvcmRcbiAgICB0aGlzLm5leHQoKVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJMaXRlcmFsXCIpXG5cbiAgY2FzZSB0dC5wYXJlbkw6XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydCwgZXhwciA9IHRoaXMucGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbihjYW5CZUFycm93KVxuICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduIDwgMCAmJiAhdGhpcy5pc1NpbXBsZUFzc2lnblRhcmdldChleHByKSlcbiAgICAgICAgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID0gc3RhcnRcbiAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kIDwgMClcbiAgICAgICAgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZCA9IHN0YXJ0XG4gICAgfVxuICAgIHJldHVybiBleHByXG5cbiAgY2FzZSB0dC5icmFja2V0TDpcbiAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKVxuICAgIHRoaXMubmV4dCgpXG4gICAgbm9kZS5lbGVtZW50cyA9IHRoaXMucGFyc2VFeHByTGlzdCh0dC5icmFja2V0UiwgdHJ1ZSwgdHJ1ZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXJyYXlFeHByZXNzaW9uXCIpXG5cbiAgY2FzZSB0dC5icmFjZUw6XG4gICAgcmV0dXJuIHRoaXMucGFyc2VPYmooZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG5cbiAgY2FzZSB0dC5fZnVuY3Rpb246XG4gICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgICB0aGlzLm5leHQoKVxuICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24obm9kZSwgZmFsc2UpXG5cbiAgY2FzZSB0dC5fY2xhc3M6XG4gICAgcmV0dXJuIHRoaXMucGFyc2VDbGFzcyh0aGlzLnN0YXJ0Tm9kZSgpLCBmYWxzZSlcblxuICBjYXNlIHR0Ll9uZXc6XG4gICAgcmV0dXJuIHRoaXMucGFyc2VOZXcoKVxuXG4gIGNhc2UgdHQuYmFja1F1b3RlOlxuICAgIHJldHVybiB0aGlzLnBhcnNlVGVtcGxhdGUoKVxuXG4gIGRlZmF1bHQ6XG4gICAgdGhpcy51bmV4cGVjdGVkKClcbiAgfVxufVxuXG5wcCQzLnBhcnNlTGl0ZXJhbCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKVxuICBub2RlLnZhbHVlID0gdmFsdWVcbiAgbm9kZS5yYXcgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMuZW5kKVxuICB0aGlzLm5leHQoKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTGl0ZXJhbFwiKVxufVxuXG5wcCQzLnBhcnNlUGFyZW5FeHByZXNzaW9uID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZXhwZWN0KHR0LnBhcmVuTClcbiAgdmFyIHZhbCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKClcbiAgdGhpcy5leHBlY3QodHQucGFyZW5SKVxuICByZXR1cm4gdmFsXG59XG5cbnBwJDMucGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKGNhbkJlQXJyb3cpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jLCB2YWwsIGFsbG93VHJhaWxpbmdDb21tYSA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgIHRoaXMubmV4dCgpXG5cbiAgICB2YXIgaW5uZXJTdGFydFBvcyA9IHRoaXMuc3RhcnQsIGlubmVyU3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jXG4gICAgdmFyIGV4cHJMaXN0ID0gW10sIGZpcnN0ID0gdHJ1ZSwgbGFzdElzQ29tbWEgPSBmYWxzZVxuICAgIHZhciByZWZEZXN0cnVjdHVyaW5nRXJyb3JzID0gbmV3IERlc3RydWN0dXJpbmdFcnJvcnMsIG9sZFlpZWxkUG9zID0gdGhpcy55aWVsZFBvcywgb2xkQXdhaXRQb3MgPSB0aGlzLmF3YWl0UG9zLCBzcHJlYWRTdGFydCwgaW5uZXJQYXJlblN0YXJ0XG4gICAgdGhpcy55aWVsZFBvcyA9IDBcbiAgICB0aGlzLmF3YWl0UG9zID0gMFxuICAgIHdoaWxlICh0aGlzLnR5cGUgIT09IHR0LnBhcmVuUikge1xuICAgICAgZmlyc3QgPyBmaXJzdCA9IGZhbHNlIDogdGhpcyQxLmV4cGVjdCh0dC5jb21tYSlcbiAgICAgIGlmIChhbGxvd1RyYWlsaW5nQ29tbWEgJiYgdGhpcyQxLmFmdGVyVHJhaWxpbmdDb21tYSh0dC5wYXJlblIsIHRydWUpKSB7XG4gICAgICAgIGxhc3RJc0NvbW1hID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmICh0aGlzJDEudHlwZSA9PT0gdHQuZWxsaXBzaXMpIHtcbiAgICAgICAgc3ByZWFkU3RhcnQgPSB0aGlzJDEuc3RhcnRcbiAgICAgICAgZXhwckxpc3QucHVzaCh0aGlzJDEucGFyc2VQYXJlbkl0ZW0odGhpcyQxLnBhcnNlUmVzdCgpKSlcbiAgICAgICAgaWYgKHRoaXMkMS50eXBlID09PSB0dC5jb21tYSkgdGhpcyQxLnJhaXNlKHRoaXMkMS5zdGFydCwgXCJDb21tYSBpcyBub3QgcGVybWl0dGVkIGFmdGVyIHRoZSByZXN0IGVsZW1lbnRcIilcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzJDEudHlwZSA9PT0gdHQucGFyZW5MICYmICFpbm5lclBhcmVuU3RhcnQpIHtcbiAgICAgICAgICBpbm5lclBhcmVuU3RhcnQgPSB0aGlzJDEuc3RhcnRcbiAgICAgICAgfVxuICAgICAgICBleHByTGlzdC5wdXNoKHRoaXMkMS5wYXJzZU1heWJlQXNzaWduKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0aGlzJDEucGFyc2VQYXJlbkl0ZW0pKVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgaW5uZXJFbmRQb3MgPSB0aGlzLnN0YXJ0LCBpbm5lckVuZExvYyA9IHRoaXMuc3RhcnRMb2NcbiAgICB0aGlzLmV4cGVjdCh0dC5wYXJlblIpXG5cbiAgICBpZiAoY2FuQmVBcnJvdyAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSAmJiB0aGlzLmVhdCh0dC5hcnJvdykpIHtcbiAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGZhbHNlKVxuICAgICAgdGhpcy5jaGVja1lpZWxkQXdhaXRJbkRlZmF1bHRQYXJhbXMoKVxuICAgICAgaWYgKGlubmVyUGFyZW5TdGFydCkgdGhpcy51bmV4cGVjdGVkKGlubmVyUGFyZW5TdGFydClcbiAgICAgIHRoaXMueWllbGRQb3MgPSBvbGRZaWVsZFBvc1xuICAgICAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zXG4gICAgICByZXR1cm4gdGhpcy5wYXJzZVBhcmVuQXJyb3dMaXN0KHN0YXJ0UG9zLCBzdGFydExvYywgZXhwckxpc3QpXG4gICAgfVxuXG4gICAgaWYgKCFleHByTGlzdC5sZW5ndGggfHwgbGFzdElzQ29tbWEpIHRoaXMudW5leHBlY3RlZCh0aGlzLmxhc3RUb2tTdGFydClcbiAgICBpZiAoc3ByZWFkU3RhcnQpIHRoaXMudW5leHBlY3RlZChzcHJlYWRTdGFydClcbiAgICB0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKVxuICAgIHRoaXMueWllbGRQb3MgPSBvbGRZaWVsZFBvcyB8fCB0aGlzLnlpZWxkUG9zXG4gICAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zIHx8IHRoaXMuYXdhaXRQb3NcblxuICAgIGlmIChleHByTGlzdC5sZW5ndGggPiAxKSB7XG4gICAgICB2YWwgPSB0aGlzLnN0YXJ0Tm9kZUF0KGlubmVyU3RhcnRQb3MsIGlubmVyU3RhcnRMb2MpXG4gICAgICB2YWwuZXhwcmVzc2lvbnMgPSBleHByTGlzdFxuICAgICAgdGhpcy5maW5pc2hOb2RlQXQodmFsLCBcIlNlcXVlbmNlRXhwcmVzc2lvblwiLCBpbm5lckVuZFBvcywgaW5uZXJFbmRMb2MpXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbCA9IGV4cHJMaXN0WzBdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhbCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKVxuICB9XG5cbiAgaWYgKHRoaXMub3B0aW9ucy5wcmVzZXJ2ZVBhcmVucykge1xuICAgIHZhciBwYXIgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYylcbiAgICBwYXIuZXhwcmVzc2lvbiA9IHZhbFxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUocGFyLCBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbFxuICB9XG59XG5cbnBwJDMucGFyc2VQYXJlbkl0ZW0gPSBmdW5jdGlvbihpdGVtKSB7XG4gIHJldHVybiBpdGVtXG59XG5cbnBwJDMucGFyc2VQYXJlbkFycm93TGlzdCA9IGZ1bmN0aW9uKHN0YXJ0UG9zLCBzdGFydExvYywgZXhwckxpc3QpIHtcbiAgcmV0dXJuIHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCBleHByTGlzdClcbn1cblxuLy8gTmV3J3MgcHJlY2VkZW5jZSBpcyBzbGlnaHRseSB0cmlja3kuIEl0IG11c3QgYWxsb3cgaXRzIGFyZ3VtZW50IHRvXG4vLyBiZSBhIGBbXWAgb3IgZG90IHN1YnNjcmlwdCBleHByZXNzaW9uLCBidXQgbm90IGEgY2FsbCDigJQgYXQgbGVhc3QsXG4vLyBub3Qgd2l0aG91dCB3cmFwcGluZyBpdCBpbiBwYXJlbnRoZXNlcy4gVGh1cywgaXQgdXNlcyB0aGUgbm9DYWxsc1xuLy8gYXJndW1lbnQgdG8gcGFyc2VTdWJzY3JpcHRzIHRvIHByZXZlbnQgaXQgZnJvbSBjb25zdW1pbmcgdGhlXG4vLyBhcmd1bWVudCBsaXN0LlxuXG52YXIgZW1wdHkkMSA9IFtdXG5cbnBwJDMucGFyc2VOZXcgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gIHZhciBtZXRhID0gdGhpcy5wYXJzZUlkZW50KHRydWUpXG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzLmVhdCh0dC5kb3QpKSB7XG4gICAgbm9kZS5tZXRhID0gbWV0YVxuICAgIG5vZGUucHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnQodHJ1ZSlcbiAgICBpZiAobm9kZS5wcm9wZXJ0eS5uYW1lICE9PSBcInRhcmdldFwiKVxuICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUucHJvcGVydHkuc3RhcnQsIFwiVGhlIG9ubHkgdmFsaWQgbWV0YSBwcm9wZXJ0eSBmb3IgbmV3IGlzIG5ldy50YXJnZXRcIilcbiAgICBpZiAoIXRoaXMuaW5GdW5jdGlvbilcbiAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIm5ldy50YXJnZXQgY2FuIG9ubHkgYmUgdXNlZCBpbiBmdW5jdGlvbnNcIilcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTWV0YVByb3BlcnR5XCIpXG4gIH1cbiAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jXG4gIG5vZGUuY2FsbGVlID0gdGhpcy5wYXJzZVN1YnNjcmlwdHModGhpcy5wYXJzZUV4cHJBdG9tKCksIHN0YXJ0UG9zLCBzdGFydExvYywgdHJ1ZSlcbiAgaWYgKHRoaXMuZWF0KHR0LnBhcmVuTCkpIG5vZGUuYXJndW1lbnRzID0gdGhpcy5wYXJzZUV4cHJMaXN0KHR0LnBhcmVuUiwgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgsIGZhbHNlKVxuICBlbHNlIG5vZGUuYXJndW1lbnRzID0gZW1wdHkkMVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTmV3RXhwcmVzc2lvblwiKVxufVxuXG4vLyBQYXJzZSB0ZW1wbGF0ZSBleHByZXNzaW9uLlxuXG5wcCQzLnBhcnNlVGVtcGxhdGVFbGVtZW50ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBlbGVtID0gdGhpcy5zdGFydE5vZGUoKVxuICBlbGVtLnZhbHVlID0ge1xuICAgIHJhdzogdGhpcy5pbnB1dC5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLmVuZCkucmVwbGFjZSgvXFxyXFxuPy9nLCAnXFxuJyksXG4gICAgY29va2VkOiB0aGlzLnZhbHVlXG4gIH1cbiAgdGhpcy5uZXh0KClcbiAgZWxlbS50YWlsID0gdGhpcy50eXBlID09PSB0dC5iYWNrUXVvdGVcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShlbGVtLCBcIlRlbXBsYXRlRWxlbWVudFwiKVxufVxuXG5wcCQzLnBhcnNlVGVtcGxhdGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gIHRoaXMubmV4dCgpXG4gIG5vZGUuZXhwcmVzc2lvbnMgPSBbXVxuICB2YXIgY3VyRWx0ID0gdGhpcy5wYXJzZVRlbXBsYXRlRWxlbWVudCgpXG4gIG5vZGUucXVhc2lzID0gW2N1ckVsdF1cbiAgd2hpbGUgKCFjdXJFbHQudGFpbCkge1xuICAgIHRoaXMkMS5leHBlY3QodHQuZG9sbGFyQnJhY2VMKVxuICAgIG5vZGUuZXhwcmVzc2lvbnMucHVzaCh0aGlzJDEucGFyc2VFeHByZXNzaW9uKCkpXG4gICAgdGhpcyQxLmV4cGVjdCh0dC5icmFjZVIpXG4gICAgbm9kZS5xdWFzaXMucHVzaChjdXJFbHQgPSB0aGlzJDEucGFyc2VUZW1wbGF0ZUVsZW1lbnQoKSlcbiAgfVxuICB0aGlzLm5leHQoKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiVGVtcGxhdGVMaXRlcmFsXCIpXG59XG5cbi8vIFBhcnNlIGFuIG9iamVjdCBsaXRlcmFsIG9yIGJpbmRpbmcgcGF0dGVybi5cblxucHAkMy5wYXJzZU9iaiA9IGZ1bmN0aW9uKGlzUGF0dGVybiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCksIGZpcnN0ID0gdHJ1ZSwgcHJvcEhhc2ggPSB7fVxuICBub2RlLnByb3BlcnRpZXMgPSBbXVxuICB0aGlzLm5leHQoKVxuICB3aGlsZSAoIXRoaXMuZWF0KHR0LmJyYWNlUikpIHtcbiAgICBpZiAoIWZpcnN0KSB7XG4gICAgICB0aGlzJDEuZXhwZWN0KHR0LmNvbW1hKVxuICAgICAgaWYgKHRoaXMkMS5hZnRlclRyYWlsaW5nQ29tbWEodHQuYnJhY2VSKSkgYnJlYWtcbiAgICB9IGVsc2UgZmlyc3QgPSBmYWxzZVxuXG4gICAgdmFyIHByb3AgPSB0aGlzJDEuc3RhcnROb2RlKCksIGlzR2VuZXJhdG9yLCBpc0FzeW5jLCBzdGFydFBvcywgc3RhcnRMb2NcbiAgICBpZiAodGhpcyQxLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgICAgcHJvcC5tZXRob2QgPSBmYWxzZVxuICAgICAgcHJvcC5zaG9ydGhhbmQgPSBmYWxzZVxuICAgICAgaWYgKGlzUGF0dGVybiB8fCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgICAgIHN0YXJ0UG9zID0gdGhpcyQxLnN0YXJ0XG4gICAgICAgIHN0YXJ0TG9jID0gdGhpcyQxLnN0YXJ0TG9jXG4gICAgICB9XG4gICAgICBpZiAoIWlzUGF0dGVybilcbiAgICAgICAgaXNHZW5lcmF0b3IgPSB0aGlzJDEuZWF0KHR0LnN0YXIpXG4gICAgfVxuICAgIHRoaXMkMS5wYXJzZVByb3BlcnR5TmFtZShwcm9wKVxuICAgIGlmICghaXNQYXR0ZXJuICYmIHRoaXMkMS5vcHRpb25zLmVjbWFWZXJzaW9uID49IDggJiYgIWlzR2VuZXJhdG9yICYmICFwcm9wLmNvbXB1dGVkICYmXG4gICAgICAgIHByb3Aua2V5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmIHByb3Aua2V5Lm5hbWUgPT09IFwiYXN5bmNcIiAmJiB0aGlzJDEudHlwZSAhPT0gdHQucGFyZW5MICYmXG4gICAgICAgIHRoaXMkMS50eXBlICE9PSB0dC5jb2xvbiAmJiAhdGhpcyQxLmNhbkluc2VydFNlbWljb2xvbigpKSB7XG4gICAgICBpc0FzeW5jID0gdHJ1ZVxuICAgICAgdGhpcyQxLnBhcnNlUHJvcGVydHlOYW1lKHByb3AsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlzQXN5bmMgPSBmYWxzZVxuICAgIH1cbiAgICB0aGlzJDEucGFyc2VQcm9wZXJ0eVZhbHVlKHByb3AsIGlzUGF0dGVybiwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIHN0YXJ0UG9zLCBzdGFydExvYywgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcbiAgICB0aGlzJDEuY2hlY2tQcm9wQ2xhc2gocHJvcCwgcHJvcEhhc2gpXG4gICAgbm9kZS5wcm9wZXJ0aWVzLnB1c2godGhpcyQxLmZpbmlzaE5vZGUocHJvcCwgXCJQcm9wZXJ0eVwiKSlcbiAgfVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIGlzUGF0dGVybiA/IFwiT2JqZWN0UGF0dGVyblwiIDogXCJPYmplY3RFeHByZXNzaW9uXCIpXG59XG5cbnBwJDMucGFyc2VQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ocHJvcCwgaXNQYXR0ZXJuLCBpc0dlbmVyYXRvciwgaXNBc3luYywgc3RhcnRQb3MsIHN0YXJ0TG9jLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIGlmICgoaXNHZW5lcmF0b3IgfHwgaXNBc3luYykgJiYgdGhpcy50eXBlID09PSB0dC5jb2xvbilcbiAgICB0aGlzLnVuZXhwZWN0ZWQoKVxuXG4gIGlmICh0aGlzLmVhdCh0dC5jb2xvbikpIHtcbiAgICBwcm9wLnZhbHVlID0gaXNQYXR0ZXJuID8gdGhpcy5wYXJzZU1heWJlRGVmYXVsdCh0aGlzLnN0YXJ0LCB0aGlzLnN0YXJ0TG9jKSA6IHRoaXMucGFyc2VNYXliZUFzc2lnbihmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcbiAgICBwcm9wLmtpbmQgPSBcImluaXRcIlxuICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHRoaXMudHlwZSA9PT0gdHQucGFyZW5MKSB7XG4gICAgaWYgKGlzUGF0dGVybikgdGhpcy51bmV4cGVjdGVkKClcbiAgICBwcm9wLmtpbmQgPSBcImluaXRcIlxuICAgIHByb3AubWV0aG9kID0gdHJ1ZVxuICAgIHByb3AudmFsdWUgPSB0aGlzLnBhcnNlTWV0aG9kKGlzR2VuZXJhdG9yLCBpc0FzeW5jKVxuICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA1ICYmICFwcm9wLmNvbXB1dGVkICYmIHByb3Aua2V5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICAgICAgICAgKHByb3Aua2V5Lm5hbWUgPT09IFwiZ2V0XCIgfHwgcHJvcC5rZXkubmFtZSA9PT0gXCJzZXRcIikgJiZcbiAgICAgICAgICAgICAodGhpcy50eXBlICE9IHR0LmNvbW1hICYmIHRoaXMudHlwZSAhPSB0dC5icmFjZVIpKSB7XG4gICAgaWYgKGlzR2VuZXJhdG9yIHx8IGlzQXN5bmMgfHwgaXNQYXR0ZXJuKSB0aGlzLnVuZXhwZWN0ZWQoKVxuICAgIHByb3Aua2luZCA9IHByb3Aua2V5Lm5hbWVcbiAgICB0aGlzLnBhcnNlUHJvcGVydHlOYW1lKHByb3ApXG4gICAgcHJvcC52YWx1ZSA9IHRoaXMucGFyc2VNZXRob2QoZmFsc2UpXG4gICAgdmFyIHBhcmFtQ291bnQgPSBwcm9wLmtpbmQgPT09IFwiZ2V0XCIgPyAwIDogMVxuICAgIGlmIChwcm9wLnZhbHVlLnBhcmFtcy5sZW5ndGggIT09IHBhcmFtQ291bnQpIHtcbiAgICAgIHZhciBzdGFydCA9IHByb3AudmFsdWUuc3RhcnRcbiAgICAgIGlmIChwcm9wLmtpbmQgPT09IFwiZ2V0XCIpXG4gICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShzdGFydCwgXCJnZXR0ZXIgc2hvdWxkIGhhdmUgbm8gcGFyYW1zXCIpXG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShzdGFydCwgXCJzZXR0ZXIgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgcGFyYW1cIilcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3Aua2luZCA9PT0gXCJzZXRcIiAmJiBwcm9wLnZhbHVlLnBhcmFtc1swXS50eXBlID09PSBcIlJlc3RFbGVtZW50XCIpXG4gICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShwcm9wLnZhbHVlLnBhcmFtc1swXS5zdGFydCwgXCJTZXR0ZXIgY2Fubm90IHVzZSByZXN0IHBhcmFtc1wiKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiAhcHJvcC5jb21wdXRlZCAmJiBwcm9wLmtleS50eXBlID09PSBcIklkZW50aWZpZXJcIikge1xuICAgIGlmICh0aGlzLmtleXdvcmRzLnRlc3QocHJvcC5rZXkubmFtZSkgfHxcbiAgICAgICAgKHRoaXMuc3RyaWN0ID8gdGhpcy5yZXNlcnZlZFdvcmRzU3RyaWN0IDogdGhpcy5yZXNlcnZlZFdvcmRzKS50ZXN0KHByb3Aua2V5Lm5hbWUpIHx8XG4gICAgICAgICh0aGlzLmluR2VuZXJhdG9yICYmIHByb3Aua2V5Lm5hbWUgPT0gXCJ5aWVsZFwiKSB8fFxuICAgICAgICAodGhpcy5pbkFzeW5jICYmIHByb3Aua2V5Lm5hbWUgPT0gXCJhd2FpdFwiKSlcbiAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShwcm9wLmtleS5zdGFydCwgXCInXCIgKyBwcm9wLmtleS5uYW1lICsgXCInIGNhbiBub3QgYmUgdXNlZCBhcyBzaG9ydGhhbmQgcHJvcGVydHlcIilcbiAgICBwcm9wLmtpbmQgPSBcImluaXRcIlxuICAgIGlmIChpc1BhdHRlcm4pIHtcbiAgICAgIHByb3AudmFsdWUgPSB0aGlzLnBhcnNlTWF5YmVEZWZhdWx0KHN0YXJ0UG9zLCBzdGFydExvYywgcHJvcC5rZXkpXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR0LmVxICYmIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbiA8IDApXG4gICAgICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuc2hvcnRoYW5kQXNzaWduID0gdGhpcy5zdGFydFxuICAgICAgcHJvcC52YWx1ZSA9IHRoaXMucGFyc2VNYXliZURlZmF1bHQoc3RhcnRQb3MsIHN0YXJ0TG9jLCBwcm9wLmtleSlcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcC52YWx1ZSA9IHByb3Aua2V5XG4gICAgfVxuICAgIHByb3Auc2hvcnRoYW5kID0gdHJ1ZVxuICB9IGVsc2UgdGhpcy51bmV4cGVjdGVkKClcbn1cblxucHAkMy5wYXJzZVByb3BlcnR5TmFtZSA9IGZ1bmN0aW9uKHByb3ApIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgaWYgKHRoaXMuZWF0KHR0LmJyYWNrZXRMKSkge1xuICAgICAgcHJvcC5jb21wdXRlZCA9IHRydWVcbiAgICAgIHByb3Aua2V5ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKClcbiAgICAgIHRoaXMuZXhwZWN0KHR0LmJyYWNrZXRSKVxuICAgICAgcmV0dXJuIHByb3Aua2V5XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3AuY29tcHV0ZWQgPSBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gcHJvcC5rZXkgPSB0aGlzLnR5cGUgPT09IHR0Lm51bSB8fCB0aGlzLnR5cGUgPT09IHR0LnN0cmluZyA/IHRoaXMucGFyc2VFeHByQXRvbSgpIDogdGhpcy5wYXJzZUlkZW50KHRydWUpXG59XG5cbi8vIEluaXRpYWxpemUgZW1wdHkgZnVuY3Rpb24gbm9kZS5cblxucHAkMy5pbml0RnVuY3Rpb24gPSBmdW5jdGlvbihub2RlKSB7XG4gIG5vZGUuaWQgPSBudWxsXG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgIG5vZGUuZ2VuZXJhdG9yID0gZmFsc2VcbiAgICBub2RlLmV4cHJlc3Npb24gPSBmYWxzZVxuICB9XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOClcbiAgICBub2RlLmFzeW5jID0gZmFsc2Vcbn1cblxuLy8gUGFyc2Ugb2JqZWN0IG9yIGNsYXNzIG1ldGhvZC5cblxucHAkMy5wYXJzZU1ldGhvZCA9IGZ1bmN0aW9uKGlzR2VuZXJhdG9yLCBpc0FzeW5jKSB7XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKSwgb2xkSW5HZW4gPSB0aGlzLmluR2VuZXJhdG9yLCBvbGRJbkFzeW5jID0gdGhpcy5pbkFzeW5jLFxuICAgICAgb2xkWWllbGRQb3MgPSB0aGlzLnlpZWxkUG9zLCBvbGRBd2FpdFBvcyA9IHRoaXMuYXdhaXRQb3MsIG9sZEluRnVuYyA9IHRoaXMuaW5GdW5jdGlvblxuXG4gIHRoaXMuaW5pdEZ1bmN0aW9uKG5vZGUpXG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNilcbiAgICBub2RlLmdlbmVyYXRvciA9IGlzR2VuZXJhdG9yXG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOClcbiAgICBub2RlLmFzeW5jID0gISFpc0FzeW5jXG5cbiAgdGhpcy5pbkdlbmVyYXRvciA9IG5vZGUuZ2VuZXJhdG9yXG4gIHRoaXMuaW5Bc3luYyA9IG5vZGUuYXN5bmNcbiAgdGhpcy55aWVsZFBvcyA9IDBcbiAgdGhpcy5hd2FpdFBvcyA9IDBcbiAgdGhpcy5pbkZ1bmN0aW9uID0gdHJ1ZVxuXG4gIHRoaXMuZXhwZWN0KHR0LnBhcmVuTClcbiAgbm9kZS5wYXJhbXMgPSB0aGlzLnBhcnNlQmluZGluZ0xpc3QodHQucGFyZW5SLCBmYWxzZSwgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpXG4gIHRoaXMuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zKClcbiAgdGhpcy5wYXJzZUZ1bmN0aW9uQm9keShub2RlLCBmYWxzZSlcblxuICB0aGlzLmluR2VuZXJhdG9yID0gb2xkSW5HZW5cbiAgdGhpcy5pbkFzeW5jID0gb2xkSW5Bc3luY1xuICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3NcbiAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zXG4gIHRoaXMuaW5GdW5jdGlvbiA9IG9sZEluRnVuY1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRnVuY3Rpb25FeHByZXNzaW9uXCIpXG59XG5cbi8vIFBhcnNlIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb24gd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLlxuXG5wcCQzLnBhcnNlQXJyb3dFeHByZXNzaW9uID0gZnVuY3Rpb24obm9kZSwgcGFyYW1zLCBpc0FzeW5jKSB7XG4gIHZhciBvbGRJbkdlbiA9IHRoaXMuaW5HZW5lcmF0b3IsIG9sZEluQXN5bmMgPSB0aGlzLmluQXN5bmMsXG4gICAgICBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgb2xkSW5GdW5jID0gdGhpcy5pbkZ1bmN0aW9uXG5cbiAgdGhpcy5pbml0RnVuY3Rpb24obm9kZSlcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KVxuICAgIG5vZGUuYXN5bmMgPSAhIWlzQXN5bmNcblxuICB0aGlzLmluR2VuZXJhdG9yID0gZmFsc2VcbiAgdGhpcy5pbkFzeW5jID0gbm9kZS5hc3luY1xuICB0aGlzLnlpZWxkUG9zID0gMFxuICB0aGlzLmF3YWl0UG9zID0gMFxuICB0aGlzLmluRnVuY3Rpb24gPSB0cnVlXG5cbiAgbm9kZS5wYXJhbXMgPSB0aGlzLnRvQXNzaWduYWJsZUxpc3QocGFyYW1zLCB0cnVlKVxuICB0aGlzLnBhcnNlRnVuY3Rpb25Cb2R5KG5vZGUsIHRydWUpXG5cbiAgdGhpcy5pbkdlbmVyYXRvciA9IG9sZEluR2VuXG4gIHRoaXMuaW5Bc3luYyA9IG9sZEluQXN5bmNcbiAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zXG4gIHRoaXMuYXdhaXRQb3MgPSBvbGRBd2FpdFBvc1xuICB0aGlzLmluRnVuY3Rpb24gPSBvbGRJbkZ1bmNcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCIpXG59XG5cbi8vIFBhcnNlIGZ1bmN0aW9uIGJvZHkgYW5kIGNoZWNrIHBhcmFtZXRlcnMuXG5cbnBwJDMucGFyc2VGdW5jdGlvbkJvZHkgPSBmdW5jdGlvbihub2RlLCBpc0Fycm93RnVuY3Rpb24pIHtcbiAgdmFyIGlzRXhwcmVzc2lvbiA9IGlzQXJyb3dGdW5jdGlvbiAmJiB0aGlzLnR5cGUgIT09IHR0LmJyYWNlTFxuICB2YXIgb2xkU3RyaWN0ID0gdGhpcy5zdHJpY3QsIHVzZVN0cmljdCA9IGZhbHNlXG5cbiAgaWYgKGlzRXhwcmVzc2lvbikge1xuICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VNYXliZUFzc2lnbigpXG4gICAgbm9kZS5leHByZXNzaW9uID0gdHJ1ZVxuICB9IGVsc2Uge1xuICAgIHZhciBub25TaW1wbGUgPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNyAmJiAhdGhpcy5pc1NpbXBsZVBhcmFtTGlzdChub2RlLnBhcmFtcylcbiAgICBpZiAoIW9sZFN0cmljdCB8fCBub25TaW1wbGUpIHtcbiAgICAgIHVzZVN0cmljdCA9IHRoaXMuc3RyaWN0RGlyZWN0aXZlKHRoaXMuZW5kKVxuICAgICAgLy8gSWYgdGhpcyBpcyBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uLCB2ZXJpZnkgdGhhdCBhcmd1bWVudCBuYW1lc1xuICAgICAgLy8gYXJlIG5vdCByZXBlYXRlZCwgYW5kIGl0IGRvZXMgbm90IHRyeSB0byBiaW5kIHRoZSB3b3JkcyBgZXZhbGBcbiAgICAgIC8vIG9yIGBhcmd1bWVudHNgLlxuICAgICAgaWYgKHVzZVN0cmljdCAmJiBub25TaW1wbGUpXG4gICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIklsbGVnYWwgJ3VzZSBzdHJpY3QnIGRpcmVjdGl2ZSBpbiBmdW5jdGlvbiB3aXRoIG5vbi1zaW1wbGUgcGFyYW1ldGVyIGxpc3RcIilcbiAgICB9XG4gICAgLy8gU3RhcnQgYSBuZXcgc2NvcGUgd2l0aCByZWdhcmQgdG8gbGFiZWxzIGFuZCB0aGUgYGluRnVuY3Rpb25gXG4gICAgLy8gZmxhZyAocmVzdG9yZSB0aGVtIHRvIHRoZWlyIG9sZCB2YWx1ZSBhZnRlcndhcmRzKS5cbiAgICB2YXIgb2xkTGFiZWxzID0gdGhpcy5sYWJlbHNcbiAgICB0aGlzLmxhYmVscyA9IFtdXG4gICAgaWYgKHVzZVN0cmljdCkgdGhpcy5zdHJpY3QgPSB0cnVlXG4gICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZUJsb2NrKHRydWUpXG4gICAgbm9kZS5leHByZXNzaW9uID0gZmFsc2VcbiAgICB0aGlzLmxhYmVscyA9IG9sZExhYmVsc1xuICB9XG5cbiAgaWYgKG9sZFN0cmljdCB8fCB1c2VTdHJpY3QpIHtcbiAgICB0aGlzLnN0cmljdCA9IHRydWVcbiAgICBpZiAobm9kZS5pZClcbiAgICAgIHRoaXMuY2hlY2tMVmFsKG5vZGUuaWQsIHRydWUpXG4gICAgdGhpcy5jaGVja1BhcmFtcyhub2RlKVxuICAgIHRoaXMuc3RyaWN0ID0gb2xkU3RyaWN0XG4gIH0gZWxzZSBpZiAoaXNBcnJvd0Z1bmN0aW9uIHx8ICF0aGlzLmlzU2ltcGxlUGFyYW1MaXN0KG5vZGUucGFyYW1zKSkge1xuICAgIHRoaXMuY2hlY2tQYXJhbXMobm9kZSlcbiAgfVxufVxuXG5wcCQzLmlzU2ltcGxlUGFyYW1MaXN0ID0gZnVuY3Rpb24ocGFyYW1zKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmIChwYXJhbXNbaV0udHlwZSAhPT0gXCJJZGVudGlmaWVyXCIpIHJldHVybiBmYWxzZVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBDaGVja3MgZnVuY3Rpb24gcGFyYW1zIGZvciB2YXJpb3VzIGRpc2FsbG93ZWQgcGF0dGVybnMgc3VjaCBhcyB1c2luZyBcImV2YWxcIlxuLy8gb3IgXCJhcmd1bWVudHNcIiBhbmQgZHVwbGljYXRlIHBhcmFtZXRlcnMuXG5cbnBwJDMuY2hlY2tQYXJhbXMgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBuYW1lSGFzaCA9IHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5wYXJhbXMubGVuZ3RoOyBpKyspIHRoaXMkMS5jaGVja0xWYWwobm9kZS5wYXJhbXNbaV0sIHRydWUsIG5hbWVIYXNoKVxufVxuXG4vLyBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBleHByZXNzaW9ucywgYW5kIHJldHVybnMgdGhlbSBhc1xuLy8gYW4gYXJyYXkuIGBjbG9zZWAgaXMgdGhlIHRva2VuIHR5cGUgdGhhdCBlbmRzIHRoZSBsaXN0LCBhbmRcbi8vIGBhbGxvd0VtcHR5YCBjYW4gYmUgdHVybmVkIG9uIHRvIGFsbG93IHN1YnNlcXVlbnQgY29tbWFzIHdpdGhcbi8vIG5vdGhpbmcgaW4gYmV0d2VlbiB0aGVtIHRvIGJlIHBhcnNlZCBhcyBgbnVsbGAgKHdoaWNoIGlzIG5lZWRlZFxuLy8gZm9yIGFycmF5IGxpdGVyYWxzKS5cblxucHAkMy5wYXJzZUV4cHJMaXN0ID0gZnVuY3Rpb24oY2xvc2UsIGFsbG93VHJhaWxpbmdDb21tYSwgYWxsb3dFbXB0eSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgZWx0cyA9IFtdLCBmaXJzdCA9IHRydWVcbiAgd2hpbGUgKCF0aGlzLmVhdChjbG9zZSkpIHtcbiAgICBpZiAoIWZpcnN0KSB7XG4gICAgICB0aGlzJDEuZXhwZWN0KHR0LmNvbW1hKVxuICAgICAgaWYgKGFsbG93VHJhaWxpbmdDb21tYSAmJiB0aGlzJDEuYWZ0ZXJUcmFpbGluZ0NvbW1hKGNsb3NlKSkgYnJlYWtcbiAgICB9IGVsc2UgZmlyc3QgPSBmYWxzZVxuXG4gICAgdmFyIGVsdFxuICAgIGlmIChhbGxvd0VtcHR5ICYmIHRoaXMkMS50eXBlID09PSB0dC5jb21tYSlcbiAgICAgIGVsdCA9IG51bGxcbiAgICBlbHNlIGlmICh0aGlzJDEudHlwZSA9PT0gdHQuZWxsaXBzaXMpIHtcbiAgICAgIGVsdCA9IHRoaXMkMS5wYXJzZVNwcmVhZChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgJiYgdGhpcyQxLnR5cGUgPT09IHR0LmNvbW1hICYmIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA8IDApXG4gICAgICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA9IHRoaXMkMS5zdGFydFxuICAgIH0gZWxzZSB7XG4gICAgICBlbHQgPSB0aGlzJDEucGFyc2VNYXliZUFzc2lnbihmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcbiAgICB9XG4gICAgZWx0cy5wdXNoKGVsdClcbiAgfVxuICByZXR1cm4gZWx0c1xufVxuXG4vLyBQYXJzZSB0aGUgbmV4dCB0b2tlbiBhcyBhbiBpZGVudGlmaWVyLiBJZiBgbGliZXJhbGAgaXMgdHJ1ZSAodXNlZFxuLy8gd2hlbiBwYXJzaW5nIHByb3BlcnRpZXMpLCBpdCB3aWxsIGFsc28gY29udmVydCBrZXl3b3JkcyBpbnRvXG4vLyBpZGVudGlmaWVycy5cblxucHAkMy5wYXJzZUlkZW50ID0gZnVuY3Rpb24obGliZXJhbCkge1xuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgaWYgKGxpYmVyYWwgJiYgdGhpcy5vcHRpb25zLmFsbG93UmVzZXJ2ZWQgPT0gXCJuZXZlclwiKSBsaWJlcmFsID0gZmFsc2VcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHQubmFtZSkge1xuICAgIGlmICghbGliZXJhbCAmJiAodGhpcy5zdHJpY3QgPyB0aGlzLnJlc2VydmVkV29yZHNTdHJpY3QgOiB0aGlzLnJlc2VydmVkV29yZHMpLnRlc3QodGhpcy52YWx1ZSkgJiZcbiAgICAgICAgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2IHx8XG4gICAgICAgICB0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMuZW5kKS5pbmRleE9mKFwiXFxcXFwiKSA9PSAtMSkpXG4gICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5zdGFydCwgXCJUaGUga2V5d29yZCAnXCIgKyB0aGlzLnZhbHVlICsgXCInIGlzIHJlc2VydmVkXCIpXG4gICAgaWYgKHRoaXMuaW5HZW5lcmF0b3IgJiYgdGhpcy52YWx1ZSA9PT0gXCJ5aWVsZFwiKVxuICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIFwiQ2FuIG5vdCB1c2UgJ3lpZWxkJyBhcyBpZGVudGlmaWVyIGluc2lkZSBhIGdlbmVyYXRvclwiKVxuICAgIGlmICh0aGlzLmluQXN5bmMgJiYgdGhpcy52YWx1ZSA9PT0gXCJhd2FpdFwiKVxuICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIFwiQ2FuIG5vdCB1c2UgJ2F3YWl0JyBhcyBpZGVudGlmaWVyIGluc2lkZSBhbiBhc3luYyBmdW5jdGlvblwiKVxuICAgIG5vZGUubmFtZSA9IHRoaXMudmFsdWVcbiAgfSBlbHNlIGlmIChsaWJlcmFsICYmIHRoaXMudHlwZS5rZXl3b3JkKSB7XG4gICAgbm9kZS5uYW1lID0gdGhpcy50eXBlLmtleXdvcmRcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVuZXhwZWN0ZWQoKVxuICB9XG4gIHRoaXMubmV4dCgpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJJZGVudGlmaWVyXCIpXG59XG5cbi8vIFBhcnNlcyB5aWVsZCBleHByZXNzaW9uIGluc2lkZSBnZW5lcmF0b3IuXG5cbnBwJDMucGFyc2VZaWVsZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMueWllbGRQb3MpIHRoaXMueWllbGRQb3MgPSB0aGlzLnN0YXJ0XG5cbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gIHRoaXMubmV4dCgpXG4gIGlmICh0aGlzLnR5cGUgPT0gdHQuc2VtaSB8fCB0aGlzLmNhbkluc2VydFNlbWljb2xvbigpIHx8ICh0aGlzLnR5cGUgIT0gdHQuc3RhciAmJiAhdGhpcy50eXBlLnN0YXJ0c0V4cHIpKSB7XG4gICAgbm9kZS5kZWxlZ2F0ZSA9IGZhbHNlXG4gICAgbm9kZS5hcmd1bWVudCA9IG51bGxcbiAgfSBlbHNlIHtcbiAgICBub2RlLmRlbGVnYXRlID0gdGhpcy5lYXQodHQuc3RhcilcbiAgICBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKClcbiAgfVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiWWllbGRFeHByZXNzaW9uXCIpXG59XG5cbnBwJDMucGFyc2VBd2FpdCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuYXdhaXRQb3MpIHRoaXMuYXdhaXRQb3MgPSB0aGlzLnN0YXJ0XG5cbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gIHRoaXMubmV4dCgpXG4gIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVVbmFyeShudWxsLCB0cnVlKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXdhaXRFeHByZXNzaW9uXCIpXG59XG5cbnZhciBwcCQ0ID0gUGFyc2VyLnByb3RvdHlwZVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmFpc2UgZXhjZXB0aW9ucyBvbiBwYXJzZSBlcnJvcnMuIEl0XG4vLyB0YWtlcyBhbiBvZmZzZXQgaW50ZWdlciAoaW50byB0aGUgY3VycmVudCBgaW5wdXRgKSB0byBpbmRpY2F0ZVxuLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvciwgYXR0YWNoZXMgdGhlIHBvc2l0aW9uIHRvIHRoZSBlbmRcbi8vIG9mIHRoZSBlcnJvciBtZXNzYWdlLCBhbmQgdGhlbiByYWlzZXMgYSBgU3ludGF4RXJyb3JgIHdpdGggdGhhdFxuLy8gbWVzc2FnZS5cblxucHAkNC5yYWlzZSA9IGZ1bmN0aW9uKHBvcywgbWVzc2FnZSkge1xuICB2YXIgbG9jID0gZ2V0TGluZUluZm8odGhpcy5pbnB1dCwgcG9zKVxuICBtZXNzYWdlICs9IFwiIChcIiArIGxvYy5saW5lICsgXCI6XCIgKyBsb2MuY29sdW1uICsgXCIpXCJcbiAgdmFyIGVyciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlKVxuICBlcnIucG9zID0gcG9zOyBlcnIubG9jID0gbG9jOyBlcnIucmFpc2VkQXQgPSB0aGlzLnBvc1xuICB0aHJvdyBlcnJcbn1cblxucHAkNC5yYWlzZVJlY292ZXJhYmxlID0gcHAkNC5yYWlzZVxuXG5wcCQ0LmN1clBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBQb3NpdGlvbih0aGlzLmN1ckxpbmUsIHRoaXMucG9zIC0gdGhpcy5saW5lU3RhcnQpXG4gIH1cbn1cblxudmFyIE5vZGUgPSBmdW5jdGlvbiBOb2RlKHBhcnNlciwgcG9zLCBsb2MpIHtcbiAgdGhpcy50eXBlID0gXCJcIlxuICB0aGlzLnN0YXJ0ID0gcG9zXG4gIHRoaXMuZW5kID0gMFxuICBpZiAocGFyc2VyLm9wdGlvbnMubG9jYXRpb25zKVxuICAgIHRoaXMubG9jID0gbmV3IFNvdXJjZUxvY2F0aW9uKHBhcnNlciwgbG9jKVxuICBpZiAocGFyc2VyLm9wdGlvbnMuZGlyZWN0U291cmNlRmlsZSlcbiAgICB0aGlzLnNvdXJjZUZpbGUgPSBwYXJzZXIub3B0aW9ucy5kaXJlY3RTb3VyY2VGaWxlXG4gIGlmIChwYXJzZXIub3B0aW9ucy5yYW5nZXMpXG4gICAgdGhpcy5yYW5nZSA9IFtwb3MsIDBdXG59O1xuXG4vLyBTdGFydCBhbiBBU1Qgbm9kZSwgYXR0YWNoaW5nIGEgc3RhcnQgb2Zmc2V0LlxuXG52YXIgcHAkNSA9IFBhcnNlci5wcm90b3R5cGVcblxucHAkNS5zdGFydE5vZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBOb2RlKHRoaXMsIHRoaXMuc3RhcnQsIHRoaXMuc3RhcnRMb2MpXG59XG5cbnBwJDUuc3RhcnROb2RlQXQgPSBmdW5jdGlvbihwb3MsIGxvYykge1xuICByZXR1cm4gbmV3IE5vZGUodGhpcywgcG9zLCBsb2MpXG59XG5cbi8vIEZpbmlzaCBhbiBBU1Qgbm9kZSwgYWRkaW5nIGB0eXBlYCBhbmQgYGVuZGAgcHJvcGVydGllcy5cblxuZnVuY3Rpb24gZmluaXNoTm9kZUF0KG5vZGUsIHR5cGUsIHBvcywgbG9jKSB7XG4gIG5vZGUudHlwZSA9IHR5cGVcbiAgbm9kZS5lbmQgPSBwb3NcbiAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpXG4gICAgbm9kZS5sb2MuZW5kID0gbG9jXG4gIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKVxuICAgIG5vZGUucmFuZ2VbMV0gPSBwb3NcbiAgcmV0dXJuIG5vZGVcbn1cblxucHAkNS5maW5pc2hOb2RlID0gZnVuY3Rpb24obm9kZSwgdHlwZSkge1xuICByZXR1cm4gZmluaXNoTm9kZUF0LmNhbGwodGhpcywgbm9kZSwgdHlwZSwgdGhpcy5sYXN0VG9rRW5kLCB0aGlzLmxhc3RUb2tFbmRMb2MpXG59XG5cbi8vIEZpbmlzaCBub2RlIGF0IGdpdmVuIHBvc2l0aW9uXG5cbnBwJDUuZmluaXNoTm9kZUF0ID0gZnVuY3Rpb24obm9kZSwgdHlwZSwgcG9zLCBsb2MpIHtcbiAgcmV0dXJuIGZpbmlzaE5vZGVBdC5jYWxsKHRoaXMsIG5vZGUsIHR5cGUsIHBvcywgbG9jKVxufVxuXG4vLyBUaGUgYWxnb3JpdGhtIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSByZWdleHAgY2FuIGFwcGVhciBhdCBhXG4vLyBnaXZlbiBwb2ludCBpbiB0aGUgcHJvZ3JhbSBpcyBsb29zZWx5IGJhc2VkIG9uIHN3ZWV0LmpzJyBhcHByb2FjaC5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2lnblxuXG52YXIgVG9rQ29udGV4dCA9IGZ1bmN0aW9uIFRva0NvbnRleHQodG9rZW4sIGlzRXhwciwgcHJlc2VydmVTcGFjZSwgb3ZlcnJpZGUpIHtcbiAgdGhpcy50b2tlbiA9IHRva2VuXG4gIHRoaXMuaXNFeHByID0gISFpc0V4cHJcbiAgdGhpcy5wcmVzZXJ2ZVNwYWNlID0gISFwcmVzZXJ2ZVNwYWNlXG4gIHRoaXMub3ZlcnJpZGUgPSBvdmVycmlkZVxufTtcblxudmFyIHR5cGVzID0ge1xuICBiX3N0YXQ6IG5ldyBUb2tDb250ZXh0KFwie1wiLCBmYWxzZSksXG4gIGJfZXhwcjogbmV3IFRva0NvbnRleHQoXCJ7XCIsIHRydWUpLFxuICBiX3RtcGw6IG5ldyBUb2tDb250ZXh0KFwiJHtcIiwgdHJ1ZSksXG4gIHBfc3RhdDogbmV3IFRva0NvbnRleHQoXCIoXCIsIGZhbHNlKSxcbiAgcF9leHByOiBuZXcgVG9rQ29udGV4dChcIihcIiwgdHJ1ZSksXG4gIHFfdG1wbDogbmV3IFRva0NvbnRleHQoXCJgXCIsIHRydWUsIHRydWUsIGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLnJlYWRUbXBsVG9rZW4oKTsgfSksXG4gIGZfZXhwcjogbmV3IFRva0NvbnRleHQoXCJmdW5jdGlvblwiLCB0cnVlKVxufVxuXG52YXIgcHAkNiA9IFBhcnNlci5wcm90b3R5cGVcblxucHAkNi5pbml0aWFsQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gW3R5cGVzLmJfc3RhdF1cbn1cblxucHAkNi5icmFjZUlzQmxvY2sgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICBpZiAocHJldlR5cGUgPT09IHR0LmNvbG9uKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuY3VyQ29udGV4dCgpXG4gICAgaWYgKHBhcmVudCA9PT0gdHlwZXMuYl9zdGF0IHx8IHBhcmVudCA9PT0gdHlwZXMuYl9leHByKVxuICAgICAgcmV0dXJuICFwYXJlbnQuaXNFeHByXG4gIH1cbiAgaWYgKHByZXZUeXBlID09PSB0dC5fcmV0dXJuKVxuICAgIHJldHVybiBsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva0VuZCwgdGhpcy5zdGFydCkpXG4gIGlmIChwcmV2VHlwZSA9PT0gdHQuX2Vsc2UgfHwgcHJldlR5cGUgPT09IHR0LnNlbWkgfHwgcHJldlR5cGUgPT09IHR0LmVvZiB8fCBwcmV2VHlwZSA9PT0gdHQucGFyZW5SKVxuICAgIHJldHVybiB0cnVlXG4gIGlmIChwcmV2VHlwZSA9PSB0dC5icmFjZUwpXG4gICAgcmV0dXJuIHRoaXMuY3VyQ29udGV4dCgpID09PSB0eXBlcy5iX3N0YXRcbiAgcmV0dXJuICF0aGlzLmV4cHJBbGxvd2VkXG59XG5cbnBwJDYudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gIHZhciB1cGRhdGUsIHR5cGUgPSB0aGlzLnR5cGVcbiAgaWYgKHR5cGUua2V5d29yZCAmJiBwcmV2VHlwZSA9PSB0dC5kb3QpXG4gICAgdGhpcy5leHByQWxsb3dlZCA9IGZhbHNlXG4gIGVsc2UgaWYgKHVwZGF0ZSA9IHR5cGUudXBkYXRlQ29udGV4dClcbiAgICB1cGRhdGUuY2FsbCh0aGlzLCBwcmV2VHlwZSlcbiAgZWxzZVxuICAgIHRoaXMuZXhwckFsbG93ZWQgPSB0eXBlLmJlZm9yZUV4cHJcbn1cblxuLy8gVG9rZW4tc3BlY2lmaWMgY29udGV4dCB1cGRhdGUgY29kZVxuXG50dC5wYXJlblIudXBkYXRlQ29udGV4dCA9IHR0LmJyYWNlUi51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmNvbnRleHQubGVuZ3RoID09IDEpIHtcbiAgICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZVxuICAgIHJldHVyblxuICB9XG4gIHZhciBvdXQgPSB0aGlzLmNvbnRleHQucG9wKClcbiAgaWYgKG91dCA9PT0gdHlwZXMuYl9zdGF0ICYmIHRoaXMuY3VyQ29udGV4dCgpID09PSB0eXBlcy5mX2V4cHIpIHtcbiAgICB0aGlzLmNvbnRleHQucG9wKClcbiAgICB0aGlzLmV4cHJBbGxvd2VkID0gZmFsc2VcbiAgfSBlbHNlIGlmIChvdXQgPT09IHR5cGVzLmJfdG1wbCkge1xuICAgIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5leHByQWxsb3dlZCA9ICFvdXQuaXNFeHByXG4gIH1cbn1cblxudHQuYnJhY2VMLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICB0aGlzLmNvbnRleHQucHVzaCh0aGlzLmJyYWNlSXNCbG9jayhwcmV2VHlwZSkgPyB0eXBlcy5iX3N0YXQgOiB0eXBlcy5iX2V4cHIpXG4gIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlXG59XG5cbnR0LmRvbGxhckJyYWNlTC51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY29udGV4dC5wdXNoKHR5cGVzLmJfdG1wbClcbiAgdGhpcy5leHByQWxsb3dlZCA9IHRydWVcbn1cblxudHQucGFyZW5MLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICB2YXIgc3RhdGVtZW50UGFyZW5zID0gcHJldlR5cGUgPT09IHR0Ll9pZiB8fCBwcmV2VHlwZSA9PT0gdHQuX2ZvciB8fCBwcmV2VHlwZSA9PT0gdHQuX3dpdGggfHwgcHJldlR5cGUgPT09IHR0Ll93aGlsZVxuICB0aGlzLmNvbnRleHQucHVzaChzdGF0ZW1lbnRQYXJlbnMgPyB0eXBlcy5wX3N0YXQgOiB0eXBlcy5wX2V4cHIpXG4gIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlXG59XG5cbnR0LmluY0RlYy51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIC8vIHRva0V4cHJBbGxvd2VkIHN0YXlzIHVuY2hhbmdlZFxufVxuXG50dC5fZnVuY3Rpb24udXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gIGlmIChwcmV2VHlwZS5iZWZvcmVFeHByICYmIHByZXZUeXBlICE9PSB0dC5zZW1pICYmIHByZXZUeXBlICE9PSB0dC5fZWxzZSAmJlxuICAgICAgISgocHJldlR5cGUgPT09IHR0LmNvbG9uIHx8IHByZXZUeXBlID09PSB0dC5icmFjZUwpICYmIHRoaXMuY3VyQ29udGV4dCgpID09PSB0eXBlcy5iX3N0YXQpKVxuICAgIHRoaXMuY29udGV4dC5wdXNoKHR5cGVzLmZfZXhwcilcbiAgdGhpcy5leHByQWxsb3dlZCA9IGZhbHNlXG59XG5cbnR0LmJhY2tRdW90ZS51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmN1ckNvbnRleHQoKSA9PT0gdHlwZXMucV90bXBsKVxuICAgIHRoaXMuY29udGV4dC5wb3AoKVxuICBlbHNlXG4gICAgdGhpcy5jb250ZXh0LnB1c2godHlwZXMucV90bXBsKVxuICB0aGlzLmV4cHJBbGxvd2VkID0gZmFsc2Vcbn1cblxuLy8gT2JqZWN0IHR5cGUgdXNlZCB0byByZXByZXNlbnQgdG9rZW5zLiBOb3RlIHRoYXQgbm9ybWFsbHksIHRva2Vuc1xuLy8gc2ltcGx5IGV4aXN0IGFzIHByb3BlcnRpZXMgb24gdGhlIHBhcnNlciBvYmplY3QuIFRoaXMgaXMgb25seVxuLy8gdXNlZCBmb3IgdGhlIG9uVG9rZW4gY2FsbGJhY2sgYW5kIHRoZSBleHRlcm5hbCB0b2tlbml6ZXIuXG5cbnZhciBUb2tlbiA9IGZ1bmN0aW9uIFRva2VuKHApIHtcbiAgdGhpcy50eXBlID0gcC50eXBlXG4gIHRoaXMudmFsdWUgPSBwLnZhbHVlXG4gIHRoaXMuc3RhcnQgPSBwLnN0YXJ0XG4gIHRoaXMuZW5kID0gcC5lbmRcbiAgaWYgKHAub3B0aW9ucy5sb2NhdGlvbnMpXG4gICAgdGhpcy5sb2MgPSBuZXcgU291cmNlTG9jYXRpb24ocCwgcC5zdGFydExvYywgcC5lbmRMb2MpXG4gIGlmIChwLm9wdGlvbnMucmFuZ2VzKVxuICAgIHRoaXMucmFuZ2UgPSBbcC5zdGFydCwgcC5lbmRdXG59O1xuXG4vLyAjIyBUb2tlbml6ZXJcblxudmFyIHBwJDcgPSBQYXJzZXIucHJvdG90eXBlXG5cbi8vIEFyZSB3ZSBydW5uaW5nIHVuZGVyIFJoaW5vP1xudmFyIGlzUmhpbm8gPSB0eXBlb2YgUGFja2FnZXMgPT0gXCJvYmplY3RcIiAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUGFja2FnZXMpID09IFwiW29iamVjdCBKYXZhUGFja2FnZV1cIlxuXG4vLyBNb3ZlIHRvIHRoZSBuZXh0IHRva2VuXG5cbnBwJDcubmV4dCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5vcHRpb25zLm9uVG9rZW4pXG4gICAgdGhpcy5vcHRpb25zLm9uVG9rZW4obmV3IFRva2VuKHRoaXMpKVxuXG4gIHRoaXMubGFzdFRva0VuZCA9IHRoaXMuZW5kXG4gIHRoaXMubGFzdFRva1N0YXJ0ID0gdGhpcy5zdGFydFxuICB0aGlzLmxhc3RUb2tFbmRMb2MgPSB0aGlzLmVuZExvY1xuICB0aGlzLmxhc3RUb2tTdGFydExvYyA9IHRoaXMuc3RhcnRMb2NcbiAgdGhpcy5uZXh0VG9rZW4oKVxufVxuXG5wcCQ3LmdldFRva2VuID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmV4dCgpXG4gIHJldHVybiBuZXcgVG9rZW4odGhpcylcbn1cblxuLy8gSWYgd2UncmUgaW4gYW4gRVM2IGVudmlyb25tZW50LCBtYWtlIHBhcnNlcnMgaXRlcmFibGVcbmlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiKVxuICBwcCQ3W1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgcmV0dXJuIHtuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdG9rZW4gPSBzZWxmLmdldFRva2VuKClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRvbmU6IHRva2VuLnR5cGUgPT09IHR0LmVvZixcbiAgICAgICAgdmFsdWU6IHRva2VuXG4gICAgICB9XG4gICAgfX1cbiAgfVxuXG4vLyBUb2dnbGUgc3RyaWN0IG1vZGUuIFJlLXJlYWRzIHRoZSBuZXh0IG51bWJlciBvciBzdHJpbmcgdG8gcGxlYXNlXG4vLyBwZWRhbnRpYyB0ZXN0cyAoYFwidXNlIHN0cmljdFwiOyAwMTA7YCBzaG91bGQgZmFpbCkuXG5cbnBwJDcuY3VyQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jb250ZXh0W3RoaXMuY29udGV4dC5sZW5ndGggLSAxXVxufVxuXG4vLyBSZWFkIGEgc2luZ2xlIHRva2VuLCB1cGRhdGluZyB0aGUgcGFyc2VyIG9iamVjdCdzIHRva2VuLXJlbGF0ZWRcbi8vIHByb3BlcnRpZXMuXG5cbnBwJDcubmV4dFRva2VuID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjdXJDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0KClcbiAgaWYgKCFjdXJDb250ZXh0IHx8ICFjdXJDb250ZXh0LnByZXNlcnZlU3BhY2UpIHRoaXMuc2tpcFNwYWNlKClcblxuICB0aGlzLnN0YXJ0ID0gdGhpcy5wb3NcbiAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHRoaXMuc3RhcnRMb2MgPSB0aGlzLmN1clBvc2l0aW9uKClcbiAgaWYgKHRoaXMucG9zID49IHRoaXMuaW5wdXQubGVuZ3RoKSByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5lb2YpXG5cbiAgaWYgKGN1ckNvbnRleHQub3ZlcnJpZGUpIHJldHVybiBjdXJDb250ZXh0Lm92ZXJyaWRlKHRoaXMpXG4gIGVsc2UgdGhpcy5yZWFkVG9rZW4odGhpcy5mdWxsQ2hhckNvZGVBdFBvcygpKVxufVxuXG5wcCQ3LnJlYWRUb2tlbiA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgLy8gSWRlbnRpZmllciBvciBrZXl3b3JkLiAnXFx1WFhYWCcgc2VxdWVuY2VzIGFyZSBhbGxvd2VkIGluXG4gIC8vIGlkZW50aWZpZXJzLCBzbyAnXFwnIGFsc28gZGlzcGF0Y2hlcyB0byB0aGF0LlxuICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY29kZSwgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHx8IGNvZGUgPT09IDkyIC8qICdcXCcgKi8pXG4gICAgcmV0dXJuIHRoaXMucmVhZFdvcmQoKVxuXG4gIHJldHVybiB0aGlzLmdldFRva2VuRnJvbUNvZGUoY29kZSlcbn1cblxucHAkNy5mdWxsQ2hhckNvZGVBdFBvcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29kZSA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcylcbiAgaWYgKGNvZGUgPD0gMHhkN2ZmIHx8IGNvZGUgPj0gMHhlMDAwKSByZXR1cm4gY29kZVxuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpXG4gIHJldHVybiAoY29kZSA8PCAxMCkgKyBuZXh0IC0gMHgzNWZkYzAwXG59XG5cbnBwJDcuc2tpcEJsb2NrQ29tbWVudCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgc3RhcnRMb2MgPSB0aGlzLm9wdGlvbnMub25Db21tZW50ICYmIHRoaXMuY3VyUG9zaXRpb24oKVxuICB2YXIgc3RhcnQgPSB0aGlzLnBvcywgZW5kID0gdGhpcy5pbnB1dC5pbmRleE9mKFwiKi9cIiwgdGhpcy5wb3MgKz0gMilcbiAgaWYgKGVuZCA9PT0gLTEpIHRoaXMucmFpc2UodGhpcy5wb3MgLSAyLCBcIlVudGVybWluYXRlZCBjb21tZW50XCIpXG4gIHRoaXMucG9zID0gZW5kICsgMlxuICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykge1xuICAgIGxpbmVCcmVha0cubGFzdEluZGV4ID0gc3RhcnRcbiAgICB2YXIgbWF0Y2hcbiAgICB3aGlsZSAoKG1hdGNoID0gbGluZUJyZWFrRy5leGVjKHRoaXMuaW5wdXQpKSAmJiBtYXRjaC5pbmRleCA8IHRoaXMucG9zKSB7XG4gICAgICArK3RoaXMkMS5jdXJMaW5lXG4gICAgICB0aGlzJDEubGluZVN0YXJ0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgICB9XG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5vbkNvbW1lbnQpXG4gICAgdGhpcy5vcHRpb25zLm9uQ29tbWVudCh0cnVlLCB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0ICsgMiwgZW5kKSwgc3RhcnQsIHRoaXMucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMb2MsIHRoaXMuY3VyUG9zaXRpb24oKSlcbn1cblxucHAkNy5za2lwTGluZUNvbW1lbnQgPSBmdW5jdGlvbihzdGFydFNraXApIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIHN0YXJ0ID0gdGhpcy5wb3NcbiAgdmFyIHN0YXJ0TG9jID0gdGhpcy5vcHRpb25zLm9uQ29tbWVudCAmJiB0aGlzLmN1clBvc2l0aW9uKClcbiAgdmFyIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKz1zdGFydFNraXApXG4gIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoICYmIGNoICE9PSAxMCAmJiBjaCAhPT0gMTMgJiYgY2ggIT09IDgyMzIgJiYgY2ggIT09IDgyMzMpIHtcbiAgICArK3RoaXMkMS5wb3NcbiAgICBjaCA9IHRoaXMkMS5pbnB1dC5jaGFyQ29kZUF0KHRoaXMkMS5wb3MpXG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5vbkNvbW1lbnQpXG4gICAgdGhpcy5vcHRpb25zLm9uQ29tbWVudChmYWxzZSwgdGhpcy5pbnB1dC5zbGljZShzdGFydCArIHN0YXJ0U2tpcCwgdGhpcy5wb3MpLCBzdGFydCwgdGhpcy5wb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydExvYywgdGhpcy5jdXJQb3NpdGlvbigpKVxufVxuXG4vLyBDYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJzZSBhbmQgYWZ0ZXIgZXZlcnkgdG9rZW4uIFNraXBzXG4vLyB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cywgYW5kLlxuXG5wcCQ3LnNraXBTcGFjZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBsb29wOiB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgIHZhciBjaCA9IHRoaXMkMS5pbnB1dC5jaGFyQ29kZUF0KHRoaXMkMS5wb3MpXG4gICAgc3dpdGNoIChjaCkge1xuICAgICAgY2FzZSAzMjogY2FzZSAxNjA6IC8vICcgJ1xuICAgICAgICArK3RoaXMkMS5wb3NcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGlmICh0aGlzJDEuaW5wdXQuY2hhckNvZGVBdCh0aGlzJDEucG9zICsgMSkgPT09IDEwKSB7XG4gICAgICAgICAgKyt0aGlzJDEucG9zXG4gICAgICAgIH1cbiAgICAgIGNhc2UgMTA6IGNhc2UgODIzMjogY2FzZSA4MjMzOlxuICAgICAgICArK3RoaXMkMS5wb3NcbiAgICAgICAgaWYgKHRoaXMkMS5vcHRpb25zLmxvY2F0aW9ucykge1xuICAgICAgICAgICsrdGhpcyQxLmN1ckxpbmVcbiAgICAgICAgICB0aGlzJDEubGluZVN0YXJ0ID0gdGhpcyQxLnBvc1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDQ3OiAvLyAnLydcbiAgICAgICAgc3dpdGNoICh0aGlzJDEuaW5wdXQuY2hhckNvZGVBdCh0aGlzJDEucG9zICsgMSkpIHtcbiAgICAgICAgICBjYXNlIDQyOiAvLyAnKidcbiAgICAgICAgICAgIHRoaXMkMS5za2lwQmxvY2tDb21tZW50KClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgIHRoaXMkMS5za2lwTGluZUNvbW1lbnQoMilcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrIGxvb3BcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGNoID4gOCAmJiBjaCA8IDE0IHx8IGNoID49IDU3NjAgJiYgbm9uQVNDSUl3aGl0ZXNwYWNlLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKSB7XG4gICAgICAgICAgKyt0aGlzJDEucG9zXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWsgbG9vcFxuICAgICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHRva2VuLiBTZXRzIGBlbmRgLCBgdmFsYCwgYW5kXG4vLyBtYWludGFpbnMgYGNvbnRleHRgIGFuZCBgZXhwckFsbG93ZWRgLCBhbmQgc2tpcHMgdGhlIHNwYWNlIGFmdGVyXG4vLyB0aGUgdG9rZW4sIHNvIHRoYXQgdGhlIG5leHQgb25lJ3MgYHN0YXJ0YCB3aWxsIHBvaW50IGF0IHRoZVxuLy8gcmlnaHQgcG9zaXRpb24uXG5cbnBwJDcuZmluaXNoVG9rZW4gPSBmdW5jdGlvbih0eXBlLCB2YWwpIHtcbiAgdGhpcy5lbmQgPSB0aGlzLnBvc1xuICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykgdGhpcy5lbmRMb2MgPSB0aGlzLmN1clBvc2l0aW9uKClcbiAgdmFyIHByZXZUeXBlID0gdGhpcy50eXBlXG4gIHRoaXMudHlwZSA9IHR5cGVcbiAgdGhpcy52YWx1ZSA9IHZhbFxuXG4gIHRoaXMudXBkYXRlQ29udGV4dChwcmV2VHlwZSlcbn1cblxuLy8gIyMjIFRva2VuIHJlYWRpbmdcblxuLy8gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgdG8gZmV0Y2ggdGhlIG5leHQgdG9rZW4uIEl0XG4vLyBpcyBzb21ld2hhdCBvYnNjdXJlLCBiZWNhdXNlIGl0IHdvcmtzIGluIGNoYXJhY3RlciBjb2RlcyByYXRoZXJcbi8vIHRoYW4gY2hhcmFjdGVycywgYW5kIGJlY2F1c2Ugb3BlcmF0b3IgcGFyc2luZyBoYXMgYmVlbiBpbmxpbmVkXG4vLyBpbnRvIGl0LlxuLy9cbi8vIEFsbCBpbiB0aGUgbmFtZSBvZiBzcGVlZC5cbi8vXG5wcCQ3LnJlYWRUb2tlbl9kb3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKVxuICBpZiAobmV4dCA+PSA0OCAmJiBuZXh0IDw9IDU3KSByZXR1cm4gdGhpcy5yZWFkTnVtYmVyKHRydWUpXG4gIHZhciBuZXh0MiA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpXG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiBuZXh0ID09PSA0NiAmJiBuZXh0MiA9PT0gNDYpIHsgLy8gNDYgPSBkb3QgJy4nXG4gICAgdGhpcy5wb3MgKz0gM1xuICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LmVsbGlwc2lzKVxuICB9IGVsc2Uge1xuICAgICsrdGhpcy5wb3NcbiAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5kb3QpXG4gIH1cbn1cblxucHAkNy5yZWFkVG9rZW5fc2xhc2ggPSBmdW5jdGlvbigpIHsgLy8gJy8nXG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSlcbiAgaWYgKHRoaXMuZXhwckFsbG93ZWQpIHsrK3RoaXMucG9zOyByZXR1cm4gdGhpcy5yZWFkUmVnZXhwKCl9XG4gIGlmIChuZXh0ID09PSA2MSkgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQuYXNzaWduLCAyKVxuICByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5zbGFzaCwgMSlcbn1cblxucHAkNy5yZWFkVG9rZW5fbXVsdF9tb2R1bG9fZXhwID0gZnVuY3Rpb24oY29kZSkgeyAvLyAnJSonXG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSlcbiAgdmFyIHNpemUgPSAxXG4gIHZhciB0b2tlbnR5cGUgPSBjb2RlID09PSA0MiA/IHR0LnN0YXIgOiB0dC5tb2R1bG9cblxuICAvLyBleHBvbmVudGlhdGlvbiBvcGVyYXRvciAqKiBhbmQgKio9XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNyAmJiBuZXh0ID09PSA0Mikge1xuICAgICsrc2l6ZVxuICAgIHRva2VudHlwZSA9IHR0LnN0YXJzdGFyXG4gICAgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpXG4gIH1cblxuICBpZiAobmV4dCA9PT0gNjEpIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LmFzc2lnbiwgc2l6ZSArIDEpXG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKHRva2VudHlwZSwgc2l6ZSlcbn1cblxucHAkNy5yZWFkVG9rZW5fcGlwZV9hbXAgPSBmdW5jdGlvbihjb2RlKSB7IC8vICd8JidcbiAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKVxuICBpZiAobmV4dCA9PT0gY29kZSkgcmV0dXJuIHRoaXMuZmluaXNoT3AoY29kZSA9PT0gMTI0ID8gdHQubG9naWNhbE9SIDogdHQubG9naWNhbEFORCwgMilcbiAgaWYgKG5leHQgPT09IDYxKSByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5hc3NpZ24sIDIpXG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKGNvZGUgPT09IDEyNCA/IHR0LmJpdHdpc2VPUiA6IHR0LmJpdHdpc2VBTkQsIDEpXG59XG5cbnBwJDcucmVhZFRva2VuX2NhcmV0ID0gZnVuY3Rpb24oKSB7IC8vICdeJ1xuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpXG4gIGlmIChuZXh0ID09PSA2MSkgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQuYXNzaWduLCAyKVxuICByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5iaXR3aXNlWE9SLCAxKVxufVxuXG5wcCQ3LnJlYWRUb2tlbl9wbHVzX21pbiA9IGZ1bmN0aW9uKGNvZGUpIHsgLy8gJystJ1xuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpXG4gIGlmIChuZXh0ID09PSBjb2RlKSB7XG4gICAgaWYgKG5leHQgPT0gNDUgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMikgPT0gNjIgJiZcbiAgICAgICAgbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tFbmQsIHRoaXMucG9zKSkpIHtcbiAgICAgIC8vIEEgYC0tPmAgbGluZSBjb21tZW50XG4gICAgICB0aGlzLnNraXBMaW5lQ29tbWVudCgzKVxuICAgICAgdGhpcy5za2lwU3BhY2UoKVxuICAgICAgcmV0dXJuIHRoaXMubmV4dFRva2VuKClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQuaW5jRGVjLCAyKVxuICB9XG4gIGlmIChuZXh0ID09PSA2MSkgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQuYXNzaWduLCAyKVxuICByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5wbHVzTWluLCAxKVxufVxuXG5wcCQ3LnJlYWRUb2tlbl9sdF9ndCA9IGZ1bmN0aW9uKGNvZGUpIHsgLy8gJzw+J1xuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpXG4gIHZhciBzaXplID0gMVxuICBpZiAobmV4dCA9PT0gY29kZSkge1xuICAgIHNpemUgPSBjb2RlID09PSA2MiAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKSA9PT0gNjIgPyAzIDogMlxuICAgIGlmICh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyBzaXplKSA9PT0gNjEpIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LmFzc2lnbiwgc2l6ZSArIDEpXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQuYml0U2hpZnQsIHNpemUpXG4gIH1cbiAgaWYgKG5leHQgPT0gMzMgJiYgY29kZSA9PSA2MCAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKSA9PSA0NSAmJlxuICAgICAgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMykgPT0gNDUpIHtcbiAgICBpZiAodGhpcy5pbk1vZHVsZSkgdGhpcy51bmV4cGVjdGVkKClcbiAgICAvLyBgPCEtLWAsIGFuIFhNTC1zdHlsZSBjb21tZW50IHRoYXQgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGEgbGluZSBjb21tZW50XG4gICAgdGhpcy5za2lwTGluZUNvbW1lbnQoNClcbiAgICB0aGlzLnNraXBTcGFjZSgpXG4gICAgcmV0dXJuIHRoaXMubmV4dFRva2VuKClcbiAgfVxuICBpZiAobmV4dCA9PT0gNjEpIHNpemUgPSAyXG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LnJlbGF0aW9uYWwsIHNpemUpXG59XG5cbnBwJDcucmVhZFRva2VuX2VxX2V4Y2wgPSBmdW5jdGlvbihjb2RlKSB7IC8vICc9ISdcbiAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKVxuICBpZiAobmV4dCA9PT0gNjEpIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LmVxdWFsaXR5LCB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKSA9PT0gNjEgPyAzIDogMilcbiAgaWYgKGNvZGUgPT09IDYxICYmIG5leHQgPT09IDYyICYmIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7IC8vICc9PidcbiAgICB0aGlzLnBvcyArPSAyXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQuYXJyb3cpXG4gIH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoT3AoY29kZSA9PT0gNjEgPyB0dC5lcSA6IHR0LnByZWZpeCwgMSlcbn1cblxucHAkNy5nZXRUb2tlbkZyb21Db2RlID0gZnVuY3Rpb24oY29kZSkge1xuICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAvLyBUaGUgaW50ZXJwcmV0YXRpb24gb2YgYSBkb3QgZGVwZW5kcyBvbiB3aGV0aGVyIGl0IGlzIGZvbGxvd2VkXG4gICAgLy8gYnkgYSBkaWdpdCBvciBhbm90aGVyIHR3byBkb3RzLlxuICBjYXNlIDQ2OiAvLyAnLidcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fZG90KClcblxuICAgIC8vIFB1bmN0dWF0aW9uIHRva2Vucy5cbiAgY2FzZSA0MDogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQucGFyZW5MKVxuICBjYXNlIDQxOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5wYXJlblIpXG4gIGNhc2UgNTk6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LnNlbWkpXG4gIGNhc2UgNDQ6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LmNvbW1hKVxuICBjYXNlIDkxOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5icmFja2V0TClcbiAgY2FzZSA5MzogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQuYnJhY2tldFIpXG4gIGNhc2UgMTIzOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5icmFjZUwpXG4gIGNhc2UgMTI1OiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5icmFjZVIpXG4gIGNhc2UgNTg6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LmNvbG9uKVxuICBjYXNlIDYzOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5xdWVzdGlvbilcblxuICBjYXNlIDk2OiAvLyAnYCdcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNikgYnJlYWtcbiAgICArK3RoaXMucG9zXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQuYmFja1F1b3RlKVxuXG4gIGNhc2UgNDg6IC8vICcwJ1xuICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSlcbiAgICBpZiAobmV4dCA9PT0gMTIwIHx8IG5leHQgPT09IDg4KSByZXR1cm4gdGhpcy5yZWFkUmFkaXhOdW1iZXIoMTYpIC8vICcweCcsICcwWCcgLSBoZXggbnVtYmVyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgICBpZiAobmV4dCA9PT0gMTExIHx8IG5leHQgPT09IDc5KSByZXR1cm4gdGhpcy5yZWFkUmFkaXhOdW1iZXIoOCkgLy8gJzBvJywgJzBPJyAtIG9jdGFsIG51bWJlclxuICAgICAgaWYgKG5leHQgPT09IDk4IHx8IG5leHQgPT09IDY2KSByZXR1cm4gdGhpcy5yZWFkUmFkaXhOdW1iZXIoMikgLy8gJzBiJywgJzBCJyAtIGJpbmFyeSBudW1iZXJcbiAgICB9XG4gICAgLy8gQW55dGhpbmcgZWxzZSBiZWdpbm5pbmcgd2l0aCBhIGRpZ2l0IGlzIGFuIGludGVnZXIsIG9jdGFsXG4gICAgLy8gbnVtYmVyLCBvciBmbG9hdC5cbiAgY2FzZSA0OTogY2FzZSA1MDogY2FzZSA1MTogY2FzZSA1MjogY2FzZSA1MzogY2FzZSA1NDogY2FzZSA1NTogY2FzZSA1NjogY2FzZSA1NzogLy8gMS05XG4gICAgcmV0dXJuIHRoaXMucmVhZE51bWJlcihmYWxzZSlcblxuICAgIC8vIFF1b3RlcyBwcm9kdWNlIHN0cmluZ3MuXG4gIGNhc2UgMzQ6IGNhc2UgMzk6IC8vICdcIicsIFwiJ1wiXG4gICAgcmV0dXJuIHRoaXMucmVhZFN0cmluZyhjb2RlKVxuXG4gICAgLy8gT3BlcmF0b3JzIGFyZSBwYXJzZWQgaW5saW5lIGluIHRpbnkgc3RhdGUgbWFjaGluZXMuICc9JyAoNjEpIGlzXG4gICAgLy8gb2Z0ZW4gcmVmZXJyZWQgdG8uIGBmaW5pc2hPcGAgc2ltcGx5IHNraXBzIHRoZSBhbW91bnQgb2ZcbiAgICAvLyBjaGFyYWN0ZXJzIGl0IGlzIGdpdmVuIGFzIHNlY29uZCBhcmd1bWVudCwgYW5kIHJldHVybnMgYSB0b2tlblxuICAgIC8vIG9mIHRoZSB0eXBlIGdpdmVuIGJ5IGl0cyBmaXJzdCBhcmd1bWVudC5cblxuICBjYXNlIDQ3OiAvLyAnLydcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fc2xhc2goKVxuXG4gIGNhc2UgMzc6IGNhc2UgNDI6IC8vICclKidcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fbXVsdF9tb2R1bG9fZXhwKGNvZGUpXG5cbiAgY2FzZSAxMjQ6IGNhc2UgMzg6IC8vICd8JidcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fcGlwZV9hbXAoY29kZSlcblxuICBjYXNlIDk0OiAvLyAnXidcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fY2FyZXQoKVxuXG4gIGNhc2UgNDM6IGNhc2UgNDU6IC8vICcrLSdcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fcGx1c19taW4oY29kZSlcblxuICBjYXNlIDYwOiBjYXNlIDYyOiAvLyAnPD4nXG4gICAgcmV0dXJuIHRoaXMucmVhZFRva2VuX2x0X2d0KGNvZGUpXG5cbiAgY2FzZSA2MTogY2FzZSAzMzogLy8gJz0hJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9lcV9leGNsKGNvZGUpXG5cbiAgY2FzZSAxMjY6IC8vICd+J1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LnByZWZpeCwgMSlcbiAgfVxuXG4gIHRoaXMucmFpc2UodGhpcy5wb3MsIFwiVW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiICsgY29kZVBvaW50VG9TdHJpbmcoY29kZSkgKyBcIidcIilcbn1cblxucHAkNy5maW5pc2hPcCA9IGZ1bmN0aW9uKHR5cGUsIHNpemUpIHtcbiAgdmFyIHN0ciA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5wb3MsIHRoaXMucG9zICsgc2l6ZSlcbiAgdGhpcy5wb3MgKz0gc2l6ZVxuICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlLCBzdHIpXG59XG5cbi8vIFBhcnNlIGEgcmVndWxhciBleHByZXNzaW9uLiBTb21lIGNvbnRleHQtYXdhcmVuZXNzIGlzIG5lY2Vzc2FyeSxcbi8vIHNpbmNlIGEgJy8nIGluc2lkZSBhICdbXScgc2V0IGRvZXMgbm90IGVuZCB0aGUgZXhwcmVzc2lvbi5cblxuZnVuY3Rpb24gdHJ5Q3JlYXRlUmVnZXhwKHNyYywgZmxhZ3MsIHRocm93RXJyb3JBdCwgcGFyc2VyKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoc3JjLCBmbGFncylcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICh0aHJvd0Vycm9yQXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikgcGFyc2VyLnJhaXNlKHRocm93RXJyb3JBdCwgXCJFcnJvciBwYXJzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbjogXCIgKyBlLm1lc3NhZ2UpXG4gICAgICB0aHJvdyBlXG4gICAgfVxuICB9XG59XG5cbnZhciByZWdleHBVbmljb2RlU3VwcG9ydCA9ICEhdHJ5Q3JlYXRlUmVnZXhwKFwiXFx1ZmZmZlwiLCBcInVcIilcblxucHAkNy5yZWFkUmVnZXhwID0gZnVuY3Rpb24oKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBlc2NhcGVkLCBpbkNsYXNzLCBzdGFydCA9IHRoaXMucG9zXG4gIGZvciAoOzspIHtcbiAgICBpZiAodGhpcyQxLnBvcyA+PSB0aGlzJDEuaW5wdXQubGVuZ3RoKSB0aGlzJDEucmFpc2Uoc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHJlZ3VsYXIgZXhwcmVzc2lvblwiKVxuICAgIHZhciBjaCA9IHRoaXMkMS5pbnB1dC5jaGFyQXQodGhpcyQxLnBvcylcbiAgICBpZiAobGluZUJyZWFrLnRlc3QoY2gpKSB0aGlzJDEucmFpc2Uoc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHJlZ3VsYXIgZXhwcmVzc2lvblwiKVxuICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgaWYgKGNoID09PSBcIltcIikgaW5DbGFzcyA9IHRydWVcbiAgICAgIGVsc2UgaWYgKGNoID09PSBcIl1cIiAmJiBpbkNsYXNzKSBpbkNsYXNzID0gZmFsc2VcbiAgICAgIGVsc2UgaWYgKGNoID09PSBcIi9cIiAmJiAhaW5DbGFzcykgYnJlYWtcbiAgICAgIGVzY2FwZWQgPSBjaCA9PT0gXCJcXFxcXCJcbiAgICB9IGVsc2UgZXNjYXBlZCA9IGZhbHNlXG4gICAgKyt0aGlzJDEucG9zXG4gIH1cbiAgdmFyIGNvbnRlbnQgPSB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0LCB0aGlzLnBvcylcbiAgKyt0aGlzLnBvc1xuICAvLyBOZWVkIHRvIHVzZSBgcmVhZFdvcmQxYCBiZWNhdXNlICdcXHVYWFhYJyBzZXF1ZW5jZXMgYXJlIGFsbG93ZWRcbiAgLy8gaGVyZSAoZG9uJ3QgYXNrKS5cbiAgdmFyIG1vZHMgPSB0aGlzLnJlYWRXb3JkMSgpXG4gIHZhciB0bXAgPSBjb250ZW50LCB0bXBGbGFncyA9IFwiXCJcbiAgaWYgKG1vZHMpIHtcbiAgICB2YXIgdmFsaWRGbGFncyA9IC9eW2dpbV0qJC9cbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHZhbGlkRmxhZ3MgPSAvXltnaW11eV0qJC9cbiAgICBpZiAoIXZhbGlkRmxhZ3MudGVzdChtb2RzKSkgdGhpcy5yYWlzZShzdGFydCwgXCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnXCIpXG4gICAgaWYgKG1vZHMuaW5kZXhPZihcInVcIikgPj0gMCkge1xuICAgICAgaWYgKHJlZ2V4cFVuaWNvZGVTdXBwb3J0KSB7XG4gICAgICAgIHRtcEZsYWdzID0gXCJ1XCJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlcGxhY2UgZWFjaCBhc3RyYWwgc3ltYm9sIGFuZCBldmVyeSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZSB0aGF0XG4gICAgICAgIC8vIHBvc3NpYmx5IHJlcHJlc2VudHMgYW4gYXN0cmFsIHN5bWJvbCBvciBhIHBhaXJlZCBzdXJyb2dhdGUgd2l0aCBhXG4gICAgICAgIC8vIHNpbmdsZSBBU0NJSSBzeW1ib2wgdG8gYXZvaWQgdGhyb3dpbmcgb24gcmVndWxhciBleHByZXNzaW9ucyB0aGF0XG4gICAgICAgIC8vIGFyZSBvbmx5IHZhbGlkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGAvdWAgZmxhZy5cbiAgICAgICAgLy8gTm90ZTogcmVwbGFjaW5nIHdpdGggdGhlIEFTQ0lJIHN5bWJvbCBgeGAgbWlnaHQgY2F1c2UgZmFsc2VcbiAgICAgICAgLy8gbmVnYXRpdmVzIGluIHVubGlrZWx5IHNjZW5hcmlvcy4gRm9yIGV4YW1wbGUsIGBbXFx1ezYxfS1iXWAgaXMgYVxuICAgICAgICAvLyBwZXJmZWN0bHkgdmFsaWQgcGF0dGVybiB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gYFthLWJdYCwgYnV0IGl0IHdvdWxkXG4gICAgICAgIC8vIGJlIHJlcGxhY2VkIGJ5IGBbeC1iXWAgd2hpY2ggdGhyb3dzIGFuIGVycm9yLlxuICAgICAgICB0bXAgPSB0bXAucmVwbGFjZSgvXFxcXHVcXHsoWzAtOWEtZkEtRl0rKVxcfS9nLCBmdW5jdGlvbiAoX21hdGNoLCBjb2RlLCBvZmZzZXQpIHtcbiAgICAgICAgICBjb2RlID0gTnVtYmVyKFwiMHhcIiArIGNvZGUpXG4gICAgICAgICAgaWYgKGNvZGUgPiAweDEwRkZGRikgdGhpcyQxLnJhaXNlKHN0YXJ0ICsgb2Zmc2V0ICsgMywgXCJDb2RlIHBvaW50IG91dCBvZiBib3VuZHNcIilcbiAgICAgICAgICByZXR1cm4gXCJ4XCJcbiAgICAgICAgfSlcbiAgICAgICAgdG1wID0gdG1wLnJlcGxhY2UoL1xcXFx1KFthLWZBLUYwLTldezR9KXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2csIFwieFwiKVxuICAgICAgICB0bXBGbGFncyA9IHRtcEZsYWdzLnJlcGxhY2UoXCJ1XCIsIFwiXCIpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIERldGVjdCBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gIHZhciB2YWx1ZSA9IG51bGxcbiAgLy8gUmhpbm8ncyByZWd1bGFyIGV4cHJlc3Npb24gcGFyc2VyIGlzIGZsYWt5IGFuZCB0aHJvd3MgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyxcbiAgLy8gc28gZG9uJ3QgZG8gZGV0ZWN0aW9uIGlmIHdlIGFyZSBydW5uaW5nIHVuZGVyIFJoaW5vXG4gIGlmICghaXNSaGlubykge1xuICAgIHRyeUNyZWF0ZVJlZ2V4cCh0bXAsIHRtcEZsYWdzLCBzdGFydCwgdGhpcylcbiAgICAvLyBHZXQgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IGZvciB0aGlzIHBhdHRlcm4tZmxhZyBwYWlyLCBvciBgbnVsbGAgaW5cbiAgICAvLyBjYXNlIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmxhZ3MgaXQgdXNlcy5cbiAgICB2YWx1ZSA9IHRyeUNyZWF0ZVJlZ2V4cChjb250ZW50LCBtb2RzKVxuICB9XG4gIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LnJlZ2V4cCwge3BhdHRlcm46IGNvbnRlbnQsIGZsYWdzOiBtb2RzLCB2YWx1ZTogdmFsdWV9KVxufVxuXG4vLyBSZWFkIGFuIGludGVnZXIgaW4gdGhlIGdpdmVuIHJhZGl4LiBSZXR1cm4gbnVsbCBpZiB6ZXJvIGRpZ2l0c1xuLy8gd2VyZSByZWFkLCB0aGUgaW50ZWdlciB2YWx1ZSBvdGhlcndpc2UuIFdoZW4gYGxlbmAgaXMgZ2l2ZW4sIHRoaXNcbi8vIHdpbGwgcmV0dXJuIGBudWxsYCB1bmxlc3MgdGhlIGludGVnZXIgaGFzIGV4YWN0bHkgYGxlbmAgZGlnaXRzLlxuXG5wcCQ3LnJlYWRJbnQgPSBmdW5jdGlvbihyYWRpeCwgbGVuKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBzdGFydCA9IHRoaXMucG9zLCB0b3RhbCA9IDBcbiAgZm9yICh2YXIgaSA9IDAsIGUgPSBsZW4gPT0gbnVsbCA/IEluZmluaXR5IDogbGVuOyBpIDwgZTsgKytpKSB7XG4gICAgdmFyIGNvZGUgPSB0aGlzJDEuaW5wdXQuY2hhckNvZGVBdCh0aGlzJDEucG9zKSwgdmFsXG4gICAgaWYgKGNvZGUgPj0gOTcpIHZhbCA9IGNvZGUgLSA5NyArIDEwIC8vIGFcbiAgICBlbHNlIGlmIChjb2RlID49IDY1KSB2YWwgPSBjb2RlIC0gNjUgKyAxMCAvLyBBXG4gICAgZWxzZSBpZiAoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3KSB2YWwgPSBjb2RlIC0gNDggLy8gMC05XG4gICAgZWxzZSB2YWwgPSBJbmZpbml0eVxuICAgIGlmICh2YWwgPj0gcmFkaXgpIGJyZWFrXG4gICAgKyt0aGlzJDEucG9zXG4gICAgdG90YWwgPSB0b3RhbCAqIHJhZGl4ICsgdmFsXG4gIH1cbiAgaWYgKHRoaXMucG9zID09PSBzdGFydCB8fCBsZW4gIT0gbnVsbCAmJiB0aGlzLnBvcyAtIHN0YXJ0ICE9PSBsZW4pIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIHRvdGFsXG59XG5cbnBwJDcucmVhZFJhZGl4TnVtYmVyID0gZnVuY3Rpb24ocmFkaXgpIHtcbiAgdGhpcy5wb3MgKz0gMiAvLyAweFxuICB2YXIgdmFsID0gdGhpcy5yZWFkSW50KHJhZGl4KVxuICBpZiAodmFsID09IG51bGwpIHRoaXMucmFpc2UodGhpcy5zdGFydCArIDIsIFwiRXhwZWN0ZWQgbnVtYmVyIGluIHJhZGl4IFwiICsgcmFkaXgpXG4gIGlmIChpc0lkZW50aWZpZXJTdGFydCh0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCkpKSB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIklkZW50aWZpZXIgZGlyZWN0bHkgYWZ0ZXIgbnVtYmVyXCIpXG4gIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0Lm51bSwgdmFsKVxufVxuXG4vLyBSZWFkIGFuIGludGVnZXIsIG9jdGFsIGludGVnZXIsIG9yIGZsb2F0aW5nLXBvaW50IG51bWJlci5cblxucHAkNy5yZWFkTnVtYmVyID0gZnVuY3Rpb24oc3RhcnRzV2l0aERvdCkge1xuICB2YXIgc3RhcnQgPSB0aGlzLnBvcywgaXNGbG9hdCA9IGZhbHNlLCBvY3RhbCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcykgPT09IDQ4XG4gIGlmICghc3RhcnRzV2l0aERvdCAmJiB0aGlzLnJlYWRJbnQoMTApID09PSBudWxsKSB0aGlzLnJhaXNlKHN0YXJ0LCBcIkludmFsaWQgbnVtYmVyXCIpXG4gIGlmIChvY3RhbCAmJiB0aGlzLnBvcyA9PSBzdGFydCArIDEpIG9jdGFsID0gZmFsc2VcbiAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpXG4gIGlmIChuZXh0ID09PSA0NiAmJiAhb2N0YWwpIHsgLy8gJy4nXG4gICAgKyt0aGlzLnBvc1xuICAgIHRoaXMucmVhZEludCgxMClcbiAgICBpc0Zsb2F0ID0gdHJ1ZVxuICAgIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpXG4gIH1cbiAgaWYgKChuZXh0ID09PSA2OSB8fCBuZXh0ID09PSAxMDEpICYmICFvY3RhbCkgeyAvLyAnZUUnXG4gICAgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCgrK3RoaXMucG9zKVxuICAgIGlmIChuZXh0ID09PSA0MyB8fCBuZXh0ID09PSA0NSkgKyt0aGlzLnBvcyAvLyAnKy0nXG4gICAgaWYgKHRoaXMucmVhZEludCgxMCkgPT09IG51bGwpIHRoaXMucmFpc2Uoc3RhcnQsIFwiSW52YWxpZCBudW1iZXJcIilcbiAgICBpc0Zsb2F0ID0gdHJ1ZVxuICB9XG4gIGlmIChpc0lkZW50aWZpZXJTdGFydCh0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCkpKSB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIklkZW50aWZpZXIgZGlyZWN0bHkgYWZ0ZXIgbnVtYmVyXCIpXG5cbiAgdmFyIHN0ciA9IHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIHRoaXMucG9zKSwgdmFsXG4gIGlmIChpc0Zsb2F0KSB2YWwgPSBwYXJzZUZsb2F0KHN0cilcbiAgZWxzZSBpZiAoIW9jdGFsIHx8IHN0ci5sZW5ndGggPT09IDEpIHZhbCA9IHBhcnNlSW50KHN0ciwgMTApXG4gIGVsc2UgaWYgKC9bODldLy50ZXN0KHN0cikgfHwgdGhpcy5zdHJpY3QpIHRoaXMucmFpc2Uoc3RhcnQsIFwiSW52YWxpZCBudW1iZXJcIilcbiAgZWxzZSB2YWwgPSBwYXJzZUludChzdHIsIDgpXG4gIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0Lm51bSwgdmFsKVxufVxuXG4vLyBSZWFkIGEgc3RyaW5nIHZhbHVlLCBpbnRlcnByZXRpbmcgYmFja3NsYXNoLWVzY2FwZXMuXG5cbnBwJDcucmVhZENvZGVQb2ludCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpLCBjb2RlXG5cbiAgaWYgKGNoID09PSAxMjMpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNikgdGhpcy51bmV4cGVjdGVkKClcbiAgICB2YXIgY29kZVBvcyA9ICsrdGhpcy5wb3NcbiAgICBjb2RlID0gdGhpcy5yZWFkSGV4Q2hhcih0aGlzLmlucHV0LmluZGV4T2YoJ30nLCB0aGlzLnBvcykgLSB0aGlzLnBvcylcbiAgICArK3RoaXMucG9zXG4gICAgaWYgKGNvZGUgPiAweDEwRkZGRikgdGhpcy5yYWlzZShjb2RlUG9zLCBcIkNvZGUgcG9pbnQgb3V0IG9mIGJvdW5kc1wiKVxuICB9IGVsc2Uge1xuICAgIGNvZGUgPSB0aGlzLnJlYWRIZXhDaGFyKDQpXG4gIH1cbiAgcmV0dXJuIGNvZGVcbn1cblxuZnVuY3Rpb24gY29kZVBvaW50VG9TdHJpbmcoY29kZSkge1xuICAvLyBVVEYtMTYgRGVjb2RpbmdcbiAgaWYgKGNvZGUgPD0gMHhGRkZGKSByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKVxuICBjb2RlIC09IDB4MTAwMDBcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKGNvZGUgPj4gMTApICsgMHhEODAwLCAoY29kZSAmIDEwMjMpICsgMHhEQzAwKVxufVxuXG5wcCQ3LnJlYWRTdHJpbmcgPSBmdW5jdGlvbihxdW90ZSkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgb3V0ID0gXCJcIiwgY2h1bmtTdGFydCA9ICsrdGhpcy5wb3NcbiAgZm9yICg7Oykge1xuICAgIGlmICh0aGlzJDEucG9zID49IHRoaXMkMS5pbnB1dC5sZW5ndGgpIHRoaXMkMS5yYWlzZSh0aGlzJDEuc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHN0cmluZyBjb25zdGFudFwiKVxuICAgIHZhciBjaCA9IHRoaXMkMS5pbnB1dC5jaGFyQ29kZUF0KHRoaXMkMS5wb3MpXG4gICAgaWYgKGNoID09PSBxdW90ZSkgYnJlYWtcbiAgICBpZiAoY2ggPT09IDkyKSB7IC8vICdcXCdcbiAgICAgIG91dCArPSB0aGlzJDEuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcyQxLnBvcylcbiAgICAgIG91dCArPSB0aGlzJDEucmVhZEVzY2FwZWRDaGFyKGZhbHNlKVxuICAgICAgY2h1bmtTdGFydCA9IHRoaXMkMS5wb3NcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzTmV3TGluZShjaCkpIHRoaXMkMS5yYWlzZSh0aGlzJDEuc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHN0cmluZyBjb25zdGFudFwiKVxuICAgICAgKyt0aGlzJDEucG9zXG4gICAgfVxuICB9XG4gIG91dCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKyspXG4gIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LnN0cmluZywgb3V0KVxufVxuXG4vLyBSZWFkcyB0ZW1wbGF0ZSBzdHJpbmcgdG9rZW5zLlxuXG5wcCQ3LnJlYWRUbXBsVG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG91dCA9IFwiXCIsIGNodW5rU3RhcnQgPSB0aGlzLnBvc1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHRoaXMkMS5wb3MgPj0gdGhpcyQxLmlucHV0Lmxlbmd0aCkgdGhpcyQxLnJhaXNlKHRoaXMkMS5zdGFydCwgXCJVbnRlcm1pbmF0ZWQgdGVtcGxhdGVcIilcbiAgICB2YXIgY2ggPSB0aGlzJDEuaW5wdXQuY2hhckNvZGVBdCh0aGlzJDEucG9zKVxuICAgIGlmIChjaCA9PT0gOTYgfHwgY2ggPT09IDM2ICYmIHRoaXMkMS5pbnB1dC5jaGFyQ29kZUF0KHRoaXMkMS5wb3MgKyAxKSA9PT0gMTIzKSB7IC8vICdgJywgJyR7J1xuICAgICAgaWYgKHRoaXMkMS5wb3MgPT09IHRoaXMkMS5zdGFydCAmJiB0aGlzJDEudHlwZSA9PT0gdHQudGVtcGxhdGUpIHtcbiAgICAgICAgaWYgKGNoID09PSAzNikge1xuICAgICAgICAgIHRoaXMkMS5wb3MgKz0gMlxuICAgICAgICAgIHJldHVybiB0aGlzJDEuZmluaXNoVG9rZW4odHQuZG9sbGFyQnJhY2VMKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICsrdGhpcyQxLnBvc1xuICAgICAgICAgIHJldHVybiB0aGlzJDEuZmluaXNoVG9rZW4odHQuYmFja1F1b3RlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgKz0gdGhpcyQxLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMkMS5wb3MpXG4gICAgICByZXR1cm4gdGhpcyQxLmZpbmlzaFRva2VuKHR0LnRlbXBsYXRlLCBvdXQpXG4gICAgfVxuICAgIGlmIChjaCA9PT0gOTIpIHsgLy8gJ1xcJ1xuICAgICAgb3V0ICs9IHRoaXMkMS5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzJDEucG9zKVxuICAgICAgb3V0ICs9IHRoaXMkMS5yZWFkRXNjYXBlZENoYXIodHJ1ZSlcbiAgICAgIGNodW5rU3RhcnQgPSB0aGlzJDEucG9zXG4gICAgfSBlbHNlIGlmIChpc05ld0xpbmUoY2gpKSB7XG4gICAgICBvdXQgKz0gdGhpcyQxLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMkMS5wb3MpXG4gICAgICArK3RoaXMkMS5wb3NcbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBpZiAodGhpcyQxLmlucHV0LmNoYXJDb2RlQXQodGhpcyQxLnBvcykgPT09IDEwKSArK3RoaXMkMS5wb3NcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBvdXQgKz0gXCJcXG5cIlxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzJDEub3B0aW9ucy5sb2NhdGlvbnMpIHtcbiAgICAgICAgKyt0aGlzJDEuY3VyTGluZVxuICAgICAgICB0aGlzJDEubGluZVN0YXJ0ID0gdGhpcyQxLnBvc1xuICAgICAgfVxuICAgICAgY2h1bmtTdGFydCA9IHRoaXMkMS5wb3NcbiAgICB9IGVsc2Uge1xuICAgICAgKyt0aGlzJDEucG9zXG4gICAgfVxuICB9XG59XG5cbi8vIFVzZWQgdG8gcmVhZCBlc2NhcGVkIGNoYXJhY3RlcnNcblxucHAkNy5yZWFkRXNjYXBlZENoYXIgPSBmdW5jdGlvbihpblRlbXBsYXRlKSB7XG4gIHZhciBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCgrK3RoaXMucG9zKVxuICArK3RoaXMucG9zXG4gIHN3aXRjaCAoY2gpIHtcbiAgY2FzZSAxMTA6IHJldHVybiBcIlxcblwiIC8vICduJyAtPiAnXFxuJ1xuICBjYXNlIDExNDogcmV0dXJuIFwiXFxyXCIgLy8gJ3InIC0+ICdcXHInXG4gIGNhc2UgMTIwOiByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnJlYWRIZXhDaGFyKDIpKSAvLyAneCdcbiAgY2FzZSAxMTc6IHJldHVybiBjb2RlUG9pbnRUb1N0cmluZyh0aGlzLnJlYWRDb2RlUG9pbnQoKSkgLy8gJ3UnXG4gIGNhc2UgMTE2OiByZXR1cm4gXCJcXHRcIiAvLyAndCcgLT4gJ1xcdCdcbiAgY2FzZSA5ODogcmV0dXJuIFwiXFxiXCIgLy8gJ2InIC0+ICdcXGInXG4gIGNhc2UgMTE4OiByZXR1cm4gXCJcXHUwMDBiXCIgLy8gJ3YnIC0+ICdcXHUwMDBiJ1xuICBjYXNlIDEwMjogcmV0dXJuIFwiXFxmXCIgLy8gJ2YnIC0+ICdcXGYnXG4gIGNhc2UgMTM6IGlmICh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpID09PSAxMCkgKyt0aGlzLnBvcyAvLyAnXFxyXFxuJ1xuICBjYXNlIDEwOiAvLyAnIFxcbidcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykgeyB0aGlzLmxpbmVTdGFydCA9IHRoaXMucG9zOyArK3RoaXMuY3VyTGluZSB9XG4gICAgcmV0dXJuIFwiXCJcbiAgZGVmYXVsdDpcbiAgICBpZiAoY2ggPj0gNDggJiYgY2ggPD0gNTUpIHtcbiAgICAgIHZhciBvY3RhbFN0ciA9IHRoaXMuaW5wdXQuc3Vic3RyKHRoaXMucG9zIC0gMSwgMykubWF0Y2goL15bMC03XSsvKVswXVxuICAgICAgdmFyIG9jdGFsID0gcGFyc2VJbnQob2N0YWxTdHIsIDgpXG4gICAgICBpZiAob2N0YWwgPiAyNTUpIHtcbiAgICAgICAgb2N0YWxTdHIgPSBvY3RhbFN0ci5zbGljZSgwLCAtMSlcbiAgICAgICAgb2N0YWwgPSBwYXJzZUludChvY3RhbFN0ciwgOClcbiAgICAgIH1cbiAgICAgIGlmIChvY3RhbFN0ciAhPT0gXCIwXCIgJiYgKHRoaXMuc3RyaWN0IHx8IGluVGVtcGxhdGUpKSB7XG4gICAgICAgIHRoaXMucmFpc2UodGhpcy5wb3MgLSAyLCBcIk9jdGFsIGxpdGVyYWwgaW4gc3RyaWN0IG1vZGVcIilcbiAgICAgIH1cbiAgICAgIHRoaXMucG9zICs9IG9jdGFsU3RyLmxlbmd0aCAtIDFcbiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG9jdGFsKVxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaClcbiAgfVxufVxuXG4vLyBVc2VkIHRvIHJlYWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZXMgKCdcXHgnLCAnXFx1JywgJ1xcVScpLlxuXG5wcCQ3LnJlYWRIZXhDaGFyID0gZnVuY3Rpb24obGVuKSB7XG4gIHZhciBjb2RlUG9zID0gdGhpcy5wb3NcbiAgdmFyIG4gPSB0aGlzLnJlYWRJbnQoMTYsIGxlbilcbiAgaWYgKG4gPT09IG51bGwpIHRoaXMucmFpc2UoY29kZVBvcywgXCJCYWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZVwiKVxuICByZXR1cm4gblxufVxuXG4vLyBSZWFkIGFuIGlkZW50aWZpZXIsIGFuZCByZXR1cm4gaXQgYXMgYSBzdHJpbmcuIFNldHMgYHRoaXMuY29udGFpbnNFc2NgXG4vLyB0byB3aGV0aGVyIHRoZSB3b3JkIGNvbnRhaW5lZCBhICdcXHUnIGVzY2FwZS5cbi8vXG4vLyBJbmNyZW1lbnRhbGx5IGFkZHMgb25seSBlc2NhcGVkIGNoYXJzLCBhZGRpbmcgb3RoZXIgY2h1bmtzIGFzLWlzXG4vLyBhcyBhIG1pY3JvLW9wdGltaXphdGlvbi5cblxucHAkNy5yZWFkV29yZDEgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdGhpcy5jb250YWluc0VzYyA9IGZhbHNlXG4gIHZhciB3b3JkID0gXCJcIiwgZmlyc3QgPSB0cnVlLCBjaHVua1N0YXJ0ID0gdGhpcy5wb3NcbiAgdmFyIGFzdHJhbCA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2XG4gIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoKSB7XG4gICAgdmFyIGNoID0gdGhpcyQxLmZ1bGxDaGFyQ29kZUF0UG9zKClcbiAgICBpZiAoaXNJZGVudGlmaWVyQ2hhcihjaCwgYXN0cmFsKSkge1xuICAgICAgdGhpcyQxLnBvcyArPSBjaCA8PSAweGZmZmYgPyAxIDogMlxuICAgIH0gZWxzZSBpZiAoY2ggPT09IDkyKSB7IC8vIFwiXFxcIlxuICAgICAgdGhpcyQxLmNvbnRhaW5zRXNjID0gdHJ1ZVxuICAgICAgd29yZCArPSB0aGlzJDEuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcyQxLnBvcylcbiAgICAgIHZhciBlc2NTdGFydCA9IHRoaXMkMS5wb3NcbiAgICAgIGlmICh0aGlzJDEuaW5wdXQuY2hhckNvZGVBdCgrK3RoaXMkMS5wb3MpICE9IDExNykgLy8gXCJ1XCJcbiAgICAgICAgdGhpcyQxLnJhaXNlKHRoaXMkMS5wb3MsIFwiRXhwZWN0aW5nIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlIFxcXFx1WFhYWFwiKVxuICAgICAgKyt0aGlzJDEucG9zXG4gICAgICB2YXIgZXNjID0gdGhpcyQxLnJlYWRDb2RlUG9pbnQoKVxuICAgICAgaWYgKCEoZmlyc3QgPyBpc0lkZW50aWZpZXJTdGFydCA6IGlzSWRlbnRpZmllckNoYXIpKGVzYywgYXN0cmFsKSlcbiAgICAgICAgdGhpcyQxLnJhaXNlKGVzY1N0YXJ0LCBcIkludmFsaWQgVW5pY29kZSBlc2NhcGVcIilcbiAgICAgIHdvcmQgKz0gY29kZVBvaW50VG9TdHJpbmcoZXNjKVxuICAgICAgY2h1bmtTdGFydCA9IHRoaXMkMS5wb3NcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWtcbiAgICB9XG4gICAgZmlyc3QgPSBmYWxzZVxuICB9XG4gIHJldHVybiB3b3JkICsgdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcylcbn1cblxuLy8gUmVhZCBhbiBpZGVudGlmaWVyIG9yIGtleXdvcmQgdG9rZW4uIFdpbGwgY2hlY2sgZm9yIHJlc2VydmVkXG4vLyB3b3JkcyB3aGVuIG5lY2Vzc2FyeS5cblxucHAkNy5yZWFkV29yZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd29yZCA9IHRoaXMucmVhZFdvcmQxKClcbiAgdmFyIHR5cGUgPSB0dC5uYW1lXG4gIGlmICh0aGlzLmtleXdvcmRzLnRlc3Qod29yZCkpIHtcbiAgICBpZiAodGhpcy5jb250YWluc0VzYykgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIFwiRXNjYXBlIHNlcXVlbmNlIGluIGtleXdvcmQgXCIgKyB3b3JkKVxuICAgIHR5cGUgPSBrZXl3b3JkVHlwZXNbd29yZF1cbiAgfVxuICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlLCB3b3JkKVxufVxuXG4vLyBBY29ybiBpcyBhIHRpbnksIGZhc3QgSmF2YVNjcmlwdCBwYXJzZXIgd3JpdHRlbiBpbiBKYXZhU2NyaXB0LlxuLy9cbi8vIEFjb3JuIHdhcyB3cml0dGVuIGJ5IE1hcmlqbiBIYXZlcmJla2UsIEluZ3ZhciBTdGVwYW55YW4sIGFuZFxuLy8gdmFyaW91cyBjb250cmlidXRvcnMgYW5kIHJlbGVhc2VkIHVuZGVyIGFuIE1JVCBsaWNlbnNlLlxuLy9cbi8vIEdpdCByZXBvc2l0b3JpZXMgZm9yIEFjb3JuIGFyZSBhdmFpbGFibGUgYXRcbi8vXG4vLyAgICAgaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvYWNvcm5cbi8vICAgICBodHRwczovL2dpdGh1Yi5jb20vdGVybmpzL2Fjb3JuLmdpdFxuLy9cbi8vIFBsZWFzZSB1c2UgdGhlIFtnaXRodWIgYnVnIHRyYWNrZXJdW2doYnRdIHRvIHJlcG9ydCBpc3N1ZXMuXG4vL1xuLy8gW2doYnRdOiBodHRwczovL2dpdGh1Yi5jb20vdGVybmpzL2Fjb3JuL2lzc3Vlc1xuLy9cbi8vIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBtYWluIHBhcnNlciBpbnRlcmZhY2UuIFRoZSBsaWJyYXJ5IGFsc28gY29tZXNcbi8vIHdpdGggYSBbZXJyb3ItdG9sZXJhbnQgcGFyc2VyXVtkYW1taXRdIGFuZCBhblxuLy8gW2Fic3RyYWN0IHN5bnRheCB0cmVlIHdhbGtlcl1bd2Fsa10sIGRlZmluZWQgaW4gb3RoZXIgZmlsZXMuXG4vL1xuLy8gW2RhbW1pdF06IGFjb3JuX2xvb3NlLmpzXG4vLyBbd2Fsa106IHV0aWwvd2Fsay5qc1xuXG52YXIgdmVyc2lvbiA9IFwiNC4wLjExXCJcblxuLy8gVGhlIG1haW4gZXhwb3J0ZWQgaW50ZXJmYWNlICh1bmRlciBgc2VsZi5hY29ybmAgd2hlbiBpbiB0aGVcbi8vIGJyb3dzZXIpIGlzIGEgYHBhcnNlYCBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY29kZSBzdHJpbmcgYW5kXG4vLyByZXR1cm5zIGFuIGFic3RyYWN0IHN5bnRheCB0cmVlIGFzIHNwZWNpZmllZCBieSBbTW96aWxsYSBwYXJzZXJcbi8vIEFQSV1bYXBpXS5cbi8vXG4vLyBbYXBpXTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9TcGlkZXJNb25rZXkvUGFyc2VyX0FQSVxuXG5mdW5jdGlvbiBwYXJzZShpbnB1dCwgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IFBhcnNlcihvcHRpb25zLCBpbnB1dCkucGFyc2UoKVxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHBhcnNlIGEgc2luZ2xlIGV4cHJlc3Npb24gYXQgYSBnaXZlblxuLy8gb2Zmc2V0IGluIGEgc3RyaW5nLiBVc2VmdWwgZm9yIHBhcnNpbmcgbWl4ZWQtbGFuZ3VhZ2UgZm9ybWF0c1xuLy8gdGhhdCBlbWJlZCBKYXZhU2NyaXB0IGV4cHJlc3Npb25zLlxuXG5mdW5jdGlvbiBwYXJzZUV4cHJlc3Npb25BdChpbnB1dCwgcG9zLCBvcHRpb25zKSB7XG4gIHZhciBwID0gbmV3IFBhcnNlcihvcHRpb25zLCBpbnB1dCwgcG9zKVxuICBwLm5leHRUb2tlbigpXG4gIHJldHVybiBwLnBhcnNlRXhwcmVzc2lvbigpXG59XG5cbi8vIEFjb3JuIGlzIG9yZ2FuaXplZCBhcyBhIHRva2VuaXplciBhbmQgYSByZWN1cnNpdmUtZGVzY2VudCBwYXJzZXIuXG4vLyBUaGUgYHRva2VuaXplcmAgZXhwb3J0IHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgdG9rZW5pemVyLlxuXG5mdW5jdGlvbiB0b2tlbml6ZXIoaW5wdXQsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQYXJzZXIob3B0aW9ucywgaW5wdXQpXG59XG5cbi8vIFRoaXMgaXMgYSB0ZXJyaWJsZSBrbHVkZ2UgdG8gc3VwcG9ydCB0aGUgZXhpc3RpbmcsIHByZS1FUzZcbi8vIGludGVyZmFjZSB3aGVyZSB0aGUgbG9vc2UgcGFyc2VyIG1vZHVsZSByZXRyb2FjdGl2ZWx5IGFkZHMgZXhwb3J0c1xuLy8gdG8gdGhpcyBtb2R1bGUuXG5mdW5jdGlvbiBhZGRMb29zZUV4cG9ydHMocGFyc2UsIFBhcnNlciwgcGx1Z2lucykge1xuICBleHBvcnRzLnBhcnNlX2RhbW1pdCA9IHBhcnNlXG4gIGV4cG9ydHMuTG9vc2VQYXJzZXIgPSBQYXJzZXJcbiAgZXhwb3J0cy5wbHVnaW5zTG9vc2UgPSBwbHVnaW5zXG59XG5cbmV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5leHBvcnRzLnBhcnNlRXhwcmVzc2lvbkF0ID0gcGFyc2VFeHByZXNzaW9uQXQ7XG5leHBvcnRzLnRva2VuaXplciA9IHRva2VuaXplcjtcbmV4cG9ydHMuYWRkTG9vc2VFeHBvcnRzID0gYWRkTG9vc2VFeHBvcnRzO1xuZXhwb3J0cy5QYXJzZXIgPSBQYXJzZXI7XG5leHBvcnRzLnBsdWdpbnMgPSBwbHVnaW5zO1xuZXhwb3J0cy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuZXhwb3J0cy5Qb3NpdGlvbiA9IFBvc2l0aW9uO1xuZXhwb3J0cy5Tb3VyY2VMb2NhdGlvbiA9IFNvdXJjZUxvY2F0aW9uO1xuZXhwb3J0cy5nZXRMaW5lSW5mbyA9IGdldExpbmVJbmZvO1xuZXhwb3J0cy5Ob2RlID0gTm9kZTtcbmV4cG9ydHMuVG9rZW5UeXBlID0gVG9rZW5UeXBlO1xuZXhwb3J0cy50b2tUeXBlcyA9IHR0O1xuZXhwb3J0cy5rZXl3b3JkVHlwZXMgPSBrZXl3b3JkVHlwZXM7XG5leHBvcnRzLlRva0NvbnRleHQgPSBUb2tDb250ZXh0O1xuZXhwb3J0cy50b2tDb250ZXh0cyA9IHR5cGVzO1xuZXhwb3J0cy5pc0lkZW50aWZpZXJDaGFyID0gaXNJZGVudGlmaWVyQ2hhcjtcbmV4cG9ydHMuaXNJZGVudGlmaWVyU3RhcnQgPSBpc0lkZW50aWZpZXJTdGFydDtcbmV4cG9ydHMuVG9rZW4gPSBUb2tlbjtcbmV4cG9ydHMuaXNOZXdMaW5lID0gaXNOZXdMaW5lO1xuZXhwb3J0cy5saW5lQnJlYWsgPSBsaW5lQnJlYWs7XG5leHBvcnRzLmxpbmVCcmVha0cgPSBsaW5lQnJlYWtHO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSkpOyIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGZhY3RvcnkoKGdsb2JhbC5hY29ybiA9IGdsb2JhbC5hY29ybiB8fCB7fSwgZ2xvYmFsLmFjb3JuLndhbGsgPSBnbG9iYWwuYWNvcm4ud2FsayB8fCB7fSkpKTtcbn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuLy8gQVNUIHdhbGtlciBtb2R1bGUgZm9yIE1vemlsbGEgUGFyc2VyIEFQSSBjb21wYXRpYmxlIHRyZWVzXG5cbi8vIEEgc2ltcGxlIHdhbGsgaXMgb25lIHdoZXJlIHlvdSBzaW1wbHkgc3BlY2lmeSBjYWxsYmFja3MgdG8gYmVcbi8vIGNhbGxlZCBvbiBzcGVjaWZpYyBub2Rlcy4gVGhlIGxhc3QgdHdvIGFyZ3VtZW50cyBhcmUgb3B0aW9uYWwuIEFcbi8vIHNpbXBsZSB1c2Ugd291bGQgYmVcbi8vXG4vLyAgICAgd2Fsay5zaW1wbGUobXlUcmVlLCB7XG4vLyAgICAgICAgIEV4cHJlc3Npb246IGZ1bmN0aW9uKG5vZGUpIHsgLi4uIH1cbi8vICAgICB9KTtcbi8vXG4vLyB0byBkbyBzb21ldGhpbmcgd2l0aCBhbGwgZXhwcmVzc2lvbnMuIEFsbCBQYXJzZXIgQVBJIG5vZGUgdHlwZXNcbi8vIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IG5vZGUgdHlwZXMsIGFzIHdlbGwgYXMgRXhwcmVzc2lvbixcbi8vIFN0YXRlbWVudCwgYW5kIFNjb3BlQm9keSwgd2hpY2ggZGVub3RlIGNhdGVnb3JpZXMgb2Ygbm9kZXMuXG4vL1xuLy8gVGhlIGJhc2UgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIGN1c3RvbSAocmVjdXJzaXZlKVxuLy8gd2Fsa2VyLCBhbmQgc3RhdGUgY2FuIGJlIHVzZWQgdG8gZ2l2ZSB0aGlzIHdhbGtlZCBhbiBpbml0aWFsXG4vLyBzdGF0ZS5cblxuZnVuY3Rpb24gc2ltcGxlKG5vZGUsIHZpc2l0b3JzLCBiYXNlLCBzdGF0ZSwgb3ZlcnJpZGUpIHtcbiAgaWYgKCFiYXNlKSBiYXNlID0gZXhwb3J0cy5iYXNlXG4gIDsoZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZSwgZm91bmQgPSB2aXNpdG9yc1t0eXBlXVxuICAgIGJhc2VbdHlwZV0obm9kZSwgc3QsIGMpXG4gICAgaWYgKGZvdW5kKSBmb3VuZChub2RlLCBzdClcbiAgfSkobm9kZSwgc3RhdGUsIG92ZXJyaWRlKVxufVxuXG4vLyBBbiBhbmNlc3RvciB3YWxrIGtlZXBzIGFuIGFycmF5IG9mIGFuY2VzdG9yIG5vZGVzIChpbmNsdWRpbmcgdGhlXG4vLyBjdXJyZW50IG5vZGUpIGFuZCBwYXNzZXMgdGhlbSB0byB0aGUgY2FsbGJhY2sgYXMgdGhpcmQgcGFyYW1ldGVyXG4vLyAoYW5kIGFsc28gYXMgc3RhdGUgcGFyYW1ldGVyIHdoZW4gbm8gb3RoZXIgc3RhdGUgaXMgcHJlc2VudCkuXG5mdW5jdGlvbiBhbmNlc3Rvcihub2RlLCB2aXNpdG9ycywgYmFzZSwgc3RhdGUpIHtcbiAgaWYgKCFiYXNlKSBiYXNlID0gZXhwb3J0cy5iYXNlXG4gIHZhciBhbmNlc3RvcnMgPSBbXVxuICA7KGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgdmFyIHR5cGUgPSBvdmVycmlkZSB8fCBub2RlLnR5cGUsIGZvdW5kID0gdmlzaXRvcnNbdHlwZV1cbiAgICB2YXIgaXNOZXcgPSBub2RlICE9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV1cbiAgICBpZiAoaXNOZXcpIGFuY2VzdG9ycy5wdXNoKG5vZGUpXG4gICAgYmFzZVt0eXBlXShub2RlLCBzdCwgYylcbiAgICBpZiAoZm91bmQpIGZvdW5kKG5vZGUsIHN0IHx8IGFuY2VzdG9ycywgYW5jZXN0b3JzKVxuICAgIGlmIChpc05ldykgYW5jZXN0b3JzLnBvcCgpXG4gIH0pKG5vZGUsIHN0YXRlKVxufVxuXG4vLyBBIHJlY3Vyc2l2ZSB3YWxrIGlzIG9uZSB3aGVyZSB5b3VyIGZ1bmN0aW9ucyBvdmVycmlkZSB0aGUgZGVmYXVsdFxuLy8gd2Fsa2Vycy4gVGhleSBjYW4gbW9kaWZ5IGFuZCByZXBsYWNlIHRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCdzXG4vLyB0aHJlYWRlZCB0aHJvdWdoIHRoZSB3YWxrLCBhbmQgY2FuIG9wdCBob3cgYW5kIHdoZXRoZXIgdG8gd2Fsa1xuLy8gdGhlaXIgY2hpbGQgbm9kZXMgKGJ5IGNhbGxpbmcgdGhlaXIgdGhpcmQgYXJndW1lbnQgb24gdGhlc2Vcbi8vIG5vZGVzKS5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZShub2RlLCBzdGF0ZSwgZnVuY3MsIGJhc2UsIG92ZXJyaWRlKSB7XG4gIHZhciB2aXNpdG9yID0gZnVuY3MgPyBleHBvcnRzLm1ha2UoZnVuY3MsIGJhc2UpIDogYmFzZVxuICA7KGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgdmlzaXRvcltvdmVycmlkZSB8fCBub2RlLnR5cGVdKG5vZGUsIHN0LCBjKVxuICB9KShub2RlLCBzdGF0ZSwgb3ZlcnJpZGUpXG59XG5cbmZ1bmN0aW9uIG1ha2VUZXN0KHRlc3QpIHtcbiAgaWYgKHR5cGVvZiB0ZXN0ID09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0eXBlKSB7IHJldHVybiB0eXBlID09IHRlc3Q7IH1cbiAgZWxzZSBpZiAoIXRlc3QpXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH1cbiAgZWxzZVxuICAgIHJldHVybiB0ZXN0XG59XG5cbnZhciBGb3VuZCA9IGZ1bmN0aW9uIEZvdW5kKG5vZGUsIHN0YXRlKSB7IHRoaXMubm9kZSA9IG5vZGU7IHRoaXMuc3RhdGUgPSBzdGF0ZSB9O1xuXG4vLyBGaW5kIGEgbm9kZSB3aXRoIGEgZ2l2ZW4gc3RhcnQsIGVuZCwgYW5kIHR5cGUgKGFsbCBhcmUgb3B0aW9uYWwsXG4vLyBudWxsIGNhbiBiZSB1c2VkIGFzIHdpbGRjYXJkKS4gUmV0dXJucyBhIHtub2RlLCBzdGF0ZX0gb2JqZWN0LCBvclxuLy8gdW5kZWZpbmVkIHdoZW4gaXQgZG9lc24ndCBmaW5kIGEgbWF0Y2hpbmcgbm9kZS5cbmZ1bmN0aW9uIGZpbmROb2RlQXQobm9kZSwgc3RhcnQsIGVuZCwgdGVzdCwgYmFzZSwgc3RhdGUpIHtcbiAgdGVzdCA9IG1ha2VUZXN0KHRlc3QpXG4gIGlmICghYmFzZSkgYmFzZSA9IGV4cG9ydHMuYmFzZVxuICB0cnkge1xuICAgIDsoZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICAgIHZhciB0eXBlID0gb3ZlcnJpZGUgfHwgbm9kZS50eXBlXG4gICAgICBpZiAoKHN0YXJ0ID09IG51bGwgfHwgbm9kZS5zdGFydCA8PSBzdGFydCkgJiZcbiAgICAgICAgICAoZW5kID09IG51bGwgfHwgbm9kZS5lbmQgPj0gZW5kKSlcbiAgICAgICAgYmFzZVt0eXBlXShub2RlLCBzdCwgYylcbiAgICAgIGlmICgoc3RhcnQgPT0gbnVsbCB8fCBub2RlLnN0YXJ0ID09IHN0YXJ0KSAmJlxuICAgICAgICAgIChlbmQgPT0gbnVsbCB8fCBub2RlLmVuZCA9PSBlbmQpICYmXG4gICAgICAgICAgdGVzdCh0eXBlLCBub2RlKSlcbiAgICAgICAgdGhyb3cgbmV3IEZvdW5kKG5vZGUsIHN0KVxuICAgIH0pKG5vZGUsIHN0YXRlKVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBGb3VuZCkgcmV0dXJuIGVcbiAgICB0aHJvdyBlXG4gIH1cbn1cblxuLy8gRmluZCB0aGUgaW5uZXJtb3N0IG5vZGUgb2YgYSBnaXZlbiB0eXBlIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuXG4vLyBwb3NpdGlvbi4gSW50ZXJmYWNlIHNpbWlsYXIgdG8gZmluZE5vZGVBdC5cbmZ1bmN0aW9uIGZpbmROb2RlQXJvdW5kKG5vZGUsIHBvcywgdGVzdCwgYmFzZSwgc3RhdGUpIHtcbiAgdGVzdCA9IG1ha2VUZXN0KHRlc3QpXG4gIGlmICghYmFzZSkgYmFzZSA9IGV4cG9ydHMuYmFzZVxuICB0cnkge1xuICAgIDsoZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICAgIHZhciB0eXBlID0gb3ZlcnJpZGUgfHwgbm9kZS50eXBlXG4gICAgICBpZiAobm9kZS5zdGFydCA+IHBvcyB8fCBub2RlLmVuZCA8IHBvcykgcmV0dXJuXG4gICAgICBiYXNlW3R5cGVdKG5vZGUsIHN0LCBjKVxuICAgICAgaWYgKHRlc3QodHlwZSwgbm9kZSkpIHRocm93IG5ldyBGb3VuZChub2RlLCBzdClcbiAgICB9KShub2RlLCBzdGF0ZSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgRm91bmQpIHJldHVybiBlXG4gICAgdGhyb3cgZVxuICB9XG59XG5cbi8vIEZpbmQgdGhlIG91dGVybW9zdCBtYXRjaGluZyBub2RlIGFmdGVyIGEgZ2l2ZW4gcG9zaXRpb24uXG5mdW5jdGlvbiBmaW5kTm9kZUFmdGVyKG5vZGUsIHBvcywgdGVzdCwgYmFzZSwgc3RhdGUpIHtcbiAgdGVzdCA9IG1ha2VUZXN0KHRlc3QpXG4gIGlmICghYmFzZSkgYmFzZSA9IGV4cG9ydHMuYmFzZVxuICB0cnkge1xuICAgIDsoZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICAgIGlmIChub2RlLmVuZCA8IHBvcykgcmV0dXJuXG4gICAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZVxuICAgICAgaWYgKG5vZGUuc3RhcnQgPj0gcG9zICYmIHRlc3QodHlwZSwgbm9kZSkpIHRocm93IG5ldyBGb3VuZChub2RlLCBzdClcbiAgICAgIGJhc2VbdHlwZV0obm9kZSwgc3QsIGMpXG4gICAgfSkobm9kZSwgc3RhdGUpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEZvdW5kKSByZXR1cm4gZVxuICAgIHRocm93IGVcbiAgfVxufVxuXG4vLyBGaW5kIHRoZSBvdXRlcm1vc3QgbWF0Y2hpbmcgbm9kZSBiZWZvcmUgYSBnaXZlbiBwb3NpdGlvbi5cbmZ1bmN0aW9uIGZpbmROb2RlQmVmb3JlKG5vZGUsIHBvcywgdGVzdCwgYmFzZSwgc3RhdGUpIHtcbiAgdGVzdCA9IG1ha2VUZXN0KHRlc3QpXG4gIGlmICghYmFzZSkgYmFzZSA9IGV4cG9ydHMuYmFzZVxuICB2YXIgbWF4XG4gIDsoZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICBpZiAobm9kZS5zdGFydCA+IHBvcykgcmV0dXJuXG4gICAgdmFyIHR5cGUgPSBvdmVycmlkZSB8fCBub2RlLnR5cGVcbiAgICBpZiAobm9kZS5lbmQgPD0gcG9zICYmICghbWF4IHx8IG1heC5ub2RlLmVuZCA8IG5vZGUuZW5kKSAmJiB0ZXN0KHR5cGUsIG5vZGUpKVxuICAgICAgbWF4ID0gbmV3IEZvdW5kKG5vZGUsIHN0KVxuICAgIGJhc2VbdHlwZV0obm9kZSwgc3QsIGMpXG4gIH0pKG5vZGUsIHN0YXRlKVxuICByZXR1cm4gbWF4XG59XG5cbi8vIEZhbGxiYWNrIHRvIGFuIE9iamVjdC5jcmVhdGUgcG9seWZpbGwgZm9yIG9sZGVyIGVudmlyb25tZW50cy5cbnZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uKHByb3RvKSB7XG4gIGZ1bmN0aW9uIEN0b3IoKSB7fVxuICBDdG9yLnByb3RvdHlwZSA9IHByb3RvXG4gIHJldHVybiBuZXcgQ3RvclxufVxuXG4vLyBVc2VkIHRvIGNyZWF0ZSBhIGN1c3RvbSB3YWxrZXIuIFdpbGwgZmlsbCBpbiBhbGwgbWlzc2luZyBub2RlXG4vLyB0eXBlIHByb3BlcnRpZXMgd2l0aCB0aGUgZGVmYXVsdHMuXG5mdW5jdGlvbiBtYWtlKGZ1bmNzLCBiYXNlKSB7XG4gIGlmICghYmFzZSkgYmFzZSA9IGV4cG9ydHMuYmFzZVxuICB2YXIgdmlzaXRvciA9IGNyZWF0ZShiYXNlKVxuICBmb3IgKHZhciB0eXBlIGluIGZ1bmNzKSB2aXNpdG9yW3R5cGVdID0gZnVuY3NbdHlwZV1cbiAgcmV0dXJuIHZpc2l0b3Jcbn1cblxuZnVuY3Rpb24gc2tpcFRocm91Z2gobm9kZSwgc3QsIGMpIHsgYyhub2RlLCBzdCkgfVxuZnVuY3Rpb24gaWdub3JlKF9ub2RlLCBfc3QsIF9jKSB7fVxuXG4vLyBOb2RlIHdhbGtlcnMuXG5cbnZhciBiYXNlID0ge31cblxuYmFzZS5Qcm9ncmFtID0gYmFzZS5CbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuYm9keS5sZW5ndGg7ICsraSlcbiAgICBjKG5vZGUuYm9keVtpXSwgc3QsIFwiU3RhdGVtZW50XCIpXG59XG5iYXNlLlN0YXRlbWVudCA9IHNraXBUaHJvdWdoXG5iYXNlLkVtcHR5U3RhdGVtZW50ID0gaWdub3JlXG5iYXNlLkV4cHJlc3Npb25TdGF0ZW1lbnQgPSBiYXNlLlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uID1cbiAgZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7IHJldHVybiBjKG5vZGUuZXhwcmVzc2lvbiwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuYmFzZS5JZlN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUudGVzdCwgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBjKG5vZGUuY29uc2VxdWVudCwgc3QsIFwiU3RhdGVtZW50XCIpXG4gIGlmIChub2RlLmFsdGVybmF0ZSkgYyhub2RlLmFsdGVybmF0ZSwgc3QsIFwiU3RhdGVtZW50XCIpXG59XG5iYXNlLkxhYmVsZWRTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZS5ib2R5LCBzdCwgXCJTdGF0ZW1lbnRcIik7IH1cbmJhc2UuQnJlYWtTdGF0ZW1lbnQgPSBiYXNlLkNvbnRpbnVlU3RhdGVtZW50ID0gaWdub3JlXG5iYXNlLldpdGhTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLm9iamVjdCwgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBjKG5vZGUuYm9keSwgc3QsIFwiU3RhdGVtZW50XCIpXG59XG5iYXNlLlN3aXRjaFN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUuZGlzY3JpbWluYW50LCBzdCwgXCJFeHByZXNzaW9uXCIpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jYXNlcy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBjcyA9IG5vZGUuY2FzZXNbaV1cbiAgICBpZiAoY3MudGVzdCkgYyhjcy50ZXN0LCBzdCwgXCJFeHByZXNzaW9uXCIpXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjcy5jb25zZXF1ZW50Lmxlbmd0aDsgKytqKVxuICAgICAgYyhjcy5jb25zZXF1ZW50W2pdLCBzdCwgXCJTdGF0ZW1lbnRcIilcbiAgfVxufVxuYmFzZS5SZXR1cm5TdGF0ZW1lbnQgPSBiYXNlLllpZWxkRXhwcmVzc2lvbiA9IGJhc2UuQXdhaXRFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLmFyZ3VtZW50KSBjKG5vZGUuYXJndW1lbnQsIHN0LCBcIkV4cHJlc3Npb25cIilcbn1cbmJhc2UuVGhyb3dTdGF0ZW1lbnQgPSBiYXNlLlNwcmVhZEVsZW1lbnQgPVxuICBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZS5hcmd1bWVudCwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuYmFzZS5UcnlTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmJsb2NrLCBzdCwgXCJTdGF0ZW1lbnRcIilcbiAgaWYgKG5vZGUuaGFuZGxlcikgYyhub2RlLmhhbmRsZXIsIHN0KVxuICBpZiAobm9kZS5maW5hbGl6ZXIpIGMobm9kZS5maW5hbGl6ZXIsIHN0LCBcIlN0YXRlbWVudFwiKVxufVxuYmFzZS5DYXRjaENsYXVzZSA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUucGFyYW0sIHN0LCBcIlBhdHRlcm5cIilcbiAgYyhub2RlLmJvZHksIHN0LCBcIlNjb3BlQm9keVwiKVxufVxuYmFzZS5XaGlsZVN0YXRlbWVudCA9IGJhc2UuRG9XaGlsZVN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUudGVzdCwgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBjKG5vZGUuYm9keSwgc3QsIFwiU3RhdGVtZW50XCIpXG59XG5iYXNlLkZvclN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBpZiAobm9kZS5pbml0KSBjKG5vZGUuaW5pdCwgc3QsIFwiRm9ySW5pdFwiKVxuICBpZiAobm9kZS50ZXN0KSBjKG5vZGUudGVzdCwgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBpZiAobm9kZS51cGRhdGUpIGMobm9kZS51cGRhdGUsIHN0LCBcIkV4cHJlc3Npb25cIilcbiAgYyhub2RlLmJvZHksIHN0LCBcIlN0YXRlbWVudFwiKVxufVxuYmFzZS5Gb3JJblN0YXRlbWVudCA9IGJhc2UuRm9yT2ZTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmxlZnQsIHN0LCBcIkZvckluaXRcIilcbiAgYyhub2RlLnJpZ2h0LCBzdCwgXCJFeHByZXNzaW9uXCIpXG4gIGMobm9kZS5ib2R5LCBzdCwgXCJTdGF0ZW1lbnRcIilcbn1cbmJhc2UuRm9ySW5pdCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBpZiAobm9kZS50eXBlID09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSBjKG5vZGUsIHN0KVxuICBlbHNlIGMobm9kZSwgc3QsIFwiRXhwcmVzc2lvblwiKVxufVxuYmFzZS5EZWJ1Z2dlclN0YXRlbWVudCA9IGlnbm9yZVxuXG5iYXNlLkZ1bmN0aW9uRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZSwgc3QsIFwiRnVuY3Rpb25cIik7IH1cbmJhc2UuVmFyaWFibGVEZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuZGVjbGFyYXRpb25zLmxlbmd0aDsgKytpKVxuICAgIGMobm9kZS5kZWNsYXJhdGlvbnNbaV0sIHN0KVxufVxuYmFzZS5WYXJpYWJsZURlY2xhcmF0b3IgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmlkLCBzdCwgXCJQYXR0ZXJuXCIpXG4gIGlmIChub2RlLmluaXQpIGMobm9kZS5pbml0LCBzdCwgXCJFeHByZXNzaW9uXCIpXG59XG5cbmJhc2UuRnVuY3Rpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuaWQpIGMobm9kZS5pZCwgc3QsIFwiUGF0dGVyblwiKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucGFyYW1zLmxlbmd0aDsgaSsrKVxuICAgIGMobm9kZS5wYXJhbXNbaV0sIHN0LCBcIlBhdHRlcm5cIilcbiAgYyhub2RlLmJvZHksIHN0LCBub2RlLmV4cHJlc3Npb24gPyBcIlNjb3BlRXhwcmVzc2lvblwiIDogXCJTY29wZUJvZHlcIilcbn1cbi8vIEZJWE1FIGRyb3AgdGhlc2Ugbm9kZSB0eXBlcyBpbiBuZXh0IG1ham9yIHZlcnNpb25cbi8vIChUaGV5IGFyZSBhd2t3YXJkLCBhbmQgaW4gRVM2IGV2ZXJ5IGJsb2NrIGNhbiBiZSBhIHNjb3BlLilcbmJhc2UuU2NvcGVCb2R5ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7IHJldHVybiBjKG5vZGUsIHN0LCBcIlN0YXRlbWVudFwiKTsgfVxuYmFzZS5TY29wZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZSwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuXG5iYXNlLlBhdHRlcm4gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUudHlwZSA9PSBcIklkZW50aWZpZXJcIilcbiAgICBjKG5vZGUsIHN0LCBcIlZhcmlhYmxlUGF0dGVyblwiKVxuICBlbHNlIGlmIChub2RlLnR5cGUgPT0gXCJNZW1iZXJFeHByZXNzaW9uXCIpXG4gICAgYyhub2RlLCBzdCwgXCJNZW1iZXJQYXR0ZXJuXCIpXG4gIGVsc2VcbiAgICBjKG5vZGUsIHN0KVxufVxuYmFzZS5WYXJpYWJsZVBhdHRlcm4gPSBpZ25vcmVcbmJhc2UuTWVtYmVyUGF0dGVybiA9IHNraXBUaHJvdWdoXG5iYXNlLlJlc3RFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7IHJldHVybiBjKG5vZGUuYXJndW1lbnQsIHN0LCBcIlBhdHRlcm5cIik7IH1cbmJhc2UuQXJyYXlQYXR0ZXJuID0gIGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuZWxlbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgZWx0ID0gbm9kZS5lbGVtZW50c1tpXVxuICAgIGlmIChlbHQpIGMoZWx0LCBzdCwgXCJQYXR0ZXJuXCIpXG4gIH1cbn1cbmJhc2UuT2JqZWN0UGF0dGVybiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucHJvcGVydGllcy5sZW5ndGg7ICsraSlcbiAgICBjKG5vZGUucHJvcGVydGllc1tpXS52YWx1ZSwgc3QsIFwiUGF0dGVyblwiKVxufVxuXG5iYXNlLkV4cHJlc3Npb24gPSBza2lwVGhyb3VnaFxuYmFzZS5UaGlzRXhwcmVzc2lvbiA9IGJhc2UuU3VwZXIgPSBiYXNlLk1ldGFQcm9wZXJ0eSA9IGlnbm9yZVxuYmFzZS5BcnJheUV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmVsZW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGVsdCA9IG5vZGUuZWxlbWVudHNbaV1cbiAgICBpZiAoZWx0KSBjKGVsdCwgc3QsIFwiRXhwcmVzc2lvblwiKVxuICB9XG59XG5iYXNlLk9iamVjdEV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLnByb3BlcnRpZXMubGVuZ3RoOyArK2kpXG4gICAgYyhub2RlLnByb3BlcnRpZXNbaV0sIHN0KVxufVxuYmFzZS5GdW5jdGlvbkV4cHJlc3Npb24gPSBiYXNlLkFycm93RnVuY3Rpb25FeHByZXNzaW9uID0gYmFzZS5GdW5jdGlvbkRlY2xhcmF0aW9uXG5iYXNlLlNlcXVlbmNlRXhwcmVzc2lvbiA9IGJhc2UuVGVtcGxhdGVMaXRlcmFsID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7ICsraSlcbiAgICBjKG5vZGUuZXhwcmVzc2lvbnNbaV0sIHN0LCBcIkV4cHJlc3Npb25cIilcbn1cbmJhc2UuVW5hcnlFeHByZXNzaW9uID0gYmFzZS5VcGRhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5hcmd1bWVudCwgc3QsIFwiRXhwcmVzc2lvblwiKVxufVxuYmFzZS5CaW5hcnlFeHByZXNzaW9uID0gYmFzZS5Mb2dpY2FsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUubGVmdCwgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBjKG5vZGUucmlnaHQsIHN0LCBcIkV4cHJlc3Npb25cIilcbn1cbmJhc2UuQXNzaWdubWVudEV4cHJlc3Npb24gPSBiYXNlLkFzc2lnbm1lbnRQYXR0ZXJuID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5sZWZ0LCBzdCwgXCJQYXR0ZXJuXCIpXG4gIGMobm9kZS5yaWdodCwgc3QsIFwiRXhwcmVzc2lvblwiKVxufVxuYmFzZS5Db25kaXRpb25hbEV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLnRlc3QsIHN0LCBcIkV4cHJlc3Npb25cIilcbiAgYyhub2RlLmNvbnNlcXVlbnQsIHN0LCBcIkV4cHJlc3Npb25cIilcbiAgYyhub2RlLmFsdGVybmF0ZSwgc3QsIFwiRXhwcmVzc2lvblwiKVxufVxuYmFzZS5OZXdFeHByZXNzaW9uID0gYmFzZS5DYWxsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUuY2FsbGVlLCBzdCwgXCJFeHByZXNzaW9uXCIpXG4gIGlmIChub2RlLmFyZ3VtZW50cykgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3VtZW50cy5sZW5ndGg7ICsraSlcbiAgICBjKG5vZGUuYXJndW1lbnRzW2ldLCBzdCwgXCJFeHByZXNzaW9uXCIpXG59XG5iYXNlLk1lbWJlckV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLm9iamVjdCwgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBpZiAobm9kZS5jb21wdXRlZCkgYyhub2RlLnByb3BlcnR5LCBzdCwgXCJFeHByZXNzaW9uXCIpXG59XG5iYXNlLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24gPSBiYXNlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBpZiAobm9kZS5kZWNsYXJhdGlvbilcbiAgICBjKG5vZGUuZGVjbGFyYXRpb24sIHN0LCBub2RlLnR5cGUgPT0gXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIgfHwgbm9kZS5kZWNsYXJhdGlvbi5pZCA/IFwiU3RhdGVtZW50XCIgOiBcIkV4cHJlc3Npb25cIilcbiAgaWYgKG5vZGUuc291cmNlKSBjKG5vZGUuc291cmNlLCBzdCwgXCJFeHByZXNzaW9uXCIpXG59XG5iYXNlLkV4cG9ydEFsbERlY2xhcmF0aW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5zb3VyY2UsIHN0LCBcIkV4cHJlc3Npb25cIilcbn1cbmJhc2UuSW1wb3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLnNwZWNpZmllcnMubGVuZ3RoOyBpKyspXG4gICAgYyhub2RlLnNwZWNpZmllcnNbaV0sIHN0KVxuICBjKG5vZGUuc291cmNlLCBzdCwgXCJFeHByZXNzaW9uXCIpXG59XG5iYXNlLkltcG9ydFNwZWNpZmllciA9IGJhc2UuSW1wb3J0RGVmYXVsdFNwZWNpZmllciA9IGJhc2UuSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyID0gYmFzZS5JZGVudGlmaWVyID0gYmFzZS5MaXRlcmFsID0gaWdub3JlXG5cbmJhc2UuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS50YWcsIHN0LCBcIkV4cHJlc3Npb25cIilcbiAgYyhub2RlLnF1YXNpLCBzdClcbn1cbmJhc2UuQ2xhc3NEZWNsYXJhdGlvbiA9IGJhc2UuQ2xhc3NFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7IHJldHVybiBjKG5vZGUsIHN0LCBcIkNsYXNzXCIpOyB9XG5iYXNlLkNsYXNzID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLmlkKSBjKG5vZGUuaWQsIHN0LCBcIlBhdHRlcm5cIilcbiAgaWYgKG5vZGUuc3VwZXJDbGFzcykgYyhub2RlLnN1cGVyQ2xhc3MsIHN0LCBcIkV4cHJlc3Npb25cIilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmJvZHkuYm9keS5sZW5ndGg7IGkrKylcbiAgICBjKG5vZGUuYm9keS5ib2R5W2ldLCBzdClcbn1cbmJhc2UuTWV0aG9kRGVmaW5pdGlvbiA9IGJhc2UuUHJvcGVydHkgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuY29tcHV0ZWQpIGMobm9kZS5rZXksIHN0LCBcIkV4cHJlc3Npb25cIilcbiAgYyhub2RlLnZhbHVlLCBzdCwgXCJFeHByZXNzaW9uXCIpXG59XG5cbmV4cG9ydHMuc2ltcGxlID0gc2ltcGxlO1xuZXhwb3J0cy5hbmNlc3RvciA9IGFuY2VzdG9yO1xuZXhwb3J0cy5yZWN1cnNpdmUgPSByZWN1cnNpdmU7XG5leHBvcnRzLmZpbmROb2RlQXQgPSBmaW5kTm9kZUF0O1xuZXhwb3J0cy5maW5kTm9kZUFyb3VuZCA9IGZpbmROb2RlQXJvdW5kO1xuZXhwb3J0cy5maW5kTm9kZUFmdGVyID0gZmluZE5vZGVBZnRlcjtcbmV4cG9ydHMuZmluZE5vZGVCZWZvcmUgPSBmaW5kTm9kZUJlZm9yZTtcbmV4cG9ydHMubWFrZSA9IG1ha2U7XG5leHBvcnRzLmJhc2UgPSBiYXNlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSkpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNvbXBpbGVTY2hlbWEgPSByZXF1aXJlKCcuL2NvbXBpbGUnKVxuICAsIHJlc29sdmUgPSByZXF1aXJlKCcuL2NvbXBpbGUvcmVzb2x2ZScpXG4gICwgQ2FjaGUgPSByZXF1aXJlKCcuL2NhY2hlJylcbiAgLCBTY2hlbWFPYmplY3QgPSByZXF1aXJlKCcuL2NvbXBpbGUvc2NoZW1hX29iaicpXG4gICwgc3RhYmxlU3RyaW5naWZ5ID0gcmVxdWlyZSgnanNvbi1zdGFibGUtc3RyaW5naWZ5JylcbiAgLCBmb3JtYXRzID0gcmVxdWlyZSgnLi9jb21waWxlL2Zvcm1hdHMnKVxuICAsIHJ1bGVzID0gcmVxdWlyZSgnLi9jb21waWxlL3J1bGVzJylcbiAgLCB2NSA9IHJlcXVpcmUoJy4vdjUnKVxuICAsIHV0aWwgPSByZXF1aXJlKCcuL2NvbXBpbGUvdXRpbCcpXG4gICwgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jJylcbiAgLCBjbyA9IHJlcXVpcmUoJ2NvJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQWp2O1xuXG5BanYucHJvdG90eXBlLmNvbXBpbGVBc3luYyA9IGFzeW5jLmNvbXBpbGU7XG5cbnZhciBjdXN0b21LZXl3b3JkID0gcmVxdWlyZSgnLi9rZXl3b3JkJyk7XG5BanYucHJvdG90eXBlLmFkZEtleXdvcmQgPSBjdXN0b21LZXl3b3JkLmFkZDtcbkFqdi5wcm90b3R5cGUuZ2V0S2V5d29yZCA9IGN1c3RvbUtleXdvcmQuZ2V0O1xuQWp2LnByb3RvdHlwZS5yZW1vdmVLZXl3b3JkID0gY3VzdG9tS2V5d29yZC5yZW1vdmU7XG5BanYuVmFsaWRhdGlvbkVycm9yID0gcmVxdWlyZSgnLi9jb21waWxlL3ZhbGlkYXRpb25fZXJyb3InKTtcblxudmFyIE1FVEFfU0NIRU1BX0lEID0gJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hJztcbnZhciBTQ0hFTUFfVVJJX0ZPUk1BVCA9IC9eKD86KD86W2Etel1bYS16MC05Ky0uXSo6KT9cXC9cXC8pP1teXFxzXSokL2k7XG5mdW5jdGlvbiBTQ0hFTUFfVVJJX0ZPUk1BVF9GVU5DKHN0cikge1xuICByZXR1cm4gU0NIRU1BX1VSSV9GT1JNQVQudGVzdChzdHIpO1xufVxuXG52YXIgTUVUQV9JR05PUkVfT1BUSU9OUyA9IFsgJ3JlbW92ZUFkZGl0aW9uYWwnLCAndXNlRGVmYXVsdHMnLCAnY29lcmNlVHlwZXMnIF07XG5cbi8qKlxuICogQ3JlYXRlcyB2YWxpZGF0b3IgaW5zdGFuY2UuXG4gKiBVc2FnZTogYEFqdihvcHRzKWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIG9wdGlvbmFsIG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gYWp2IGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEFqdihvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBBanYpKSByZXR1cm4gbmV3IEFqdihvcHRzKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIG9wdHMgPSB0aGlzLl9vcHRzID0gdXRpbC5jb3B5KG9wdHMpIHx8IHt9O1xuICB0aGlzLl9zY2hlbWFzID0ge307XG4gIHRoaXMuX3JlZnMgPSB7fTtcbiAgdGhpcy5fZnJhZ21lbnRzID0ge307XG4gIHRoaXMuX2Zvcm1hdHMgPSBmb3JtYXRzKG9wdHMuZm9ybWF0KTtcbiAgdGhpcy5fY2FjaGUgPSBvcHRzLmNhY2hlIHx8IG5ldyBDYWNoZTtcbiAgdGhpcy5fbG9hZGluZ1NjaGVtYXMgPSB7fTtcbiAgdGhpcy5fY29tcGlsYXRpb25zID0gW107XG4gIHRoaXMuUlVMRVMgPSBydWxlcygpO1xuXG4gIC8vIHRoaXMgaXMgZG9uZSBvbiBwdXJwb3NlLCBzbyB0aGF0IG1ldGhvZHMgYXJlIGJvdW5kIHRvIHRoZSBpbnN0YW5jZVxuICAvLyAod2l0aG91dCB1c2luZyBiaW5kKSBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgd2l0aG91dCB0aGUgaW5zdGFuY2VcbiAgdGhpcy52YWxpZGF0ZSA9IHZhbGlkYXRlO1xuICB0aGlzLmNvbXBpbGUgPSBjb21waWxlO1xuICB0aGlzLmFkZFNjaGVtYSA9IGFkZFNjaGVtYTtcbiAgdGhpcy5hZGRNZXRhU2NoZW1hID0gYWRkTWV0YVNjaGVtYTtcbiAgdGhpcy52YWxpZGF0ZVNjaGVtYSA9IHZhbGlkYXRlU2NoZW1hO1xuICB0aGlzLmdldFNjaGVtYSA9IGdldFNjaGVtYTtcbiAgdGhpcy5yZW1vdmVTY2hlbWEgPSByZW1vdmVTY2hlbWE7XG4gIHRoaXMuYWRkRm9ybWF0ID0gYWRkRm9ybWF0O1xuICB0aGlzLmVycm9yc1RleHQgPSBlcnJvcnNUZXh0O1xuXG4gIHRoaXMuX2FkZFNjaGVtYSA9IF9hZGRTY2hlbWE7XG4gIHRoaXMuX2NvbXBpbGUgPSBfY29tcGlsZTtcblxuICBvcHRzLmxvb3BSZXF1aXJlZCA9IG9wdHMubG9vcFJlcXVpcmVkIHx8IEluZmluaXR5O1xuICBpZiAob3B0cy5hc3luYyB8fCBvcHRzLnRyYW5zcGlsZSkgYXN5bmMuc2V0dXAob3B0cyk7XG4gIGlmIChvcHRzLmJlYXV0aWZ5ID09PSB0cnVlKSBvcHRzLmJlYXV0aWZ5ID0geyBpbmRlbnRfc2l6ZTogMiB9O1xuICBpZiAob3B0cy5lcnJvckRhdGFQYXRoID09ICdwcm9wZXJ0eScpIG9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA9IHRydWU7XG4gIHRoaXMuX21ldGFPcHRzID0gZ2V0TWV0YVNjaGVtYU9wdGlvbnMoKTtcblxuICBpZiAob3B0cy5mb3JtYXRzKSBhZGRJbml0aWFsRm9ybWF0cygpO1xuICBhZGREcmFmdDRNZXRhU2NoZW1hKCk7XG4gIGlmIChvcHRzLnY1KSB2NS5lbmFibGUodGhpcyk7XG4gIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09ICdvYmplY3QnKSBhZGRNZXRhU2NoZW1hKG9wdHMubWV0YSk7XG4gIGFkZEluaXRpYWxTY2hlbWFzKCk7XG5cblxuICAvKipcbiAgICogVmFsaWRhdGUgZGF0YSB1c2luZyBzY2hlbWFcbiAgICogU2NoZW1hIHdpbGwgYmUgY29tcGlsZWQgYW5kIGNhY2hlZCAodXNpbmcgc2VyaWFsaXplZCBKU09OIGFzIGtleS4gW2pzb24tc3RhYmxlLXN0cmluZ2lmeV0oaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL2pzb24tc3RhYmxlLXN0cmluZ2lmeSkgaXMgdXNlZCB0byBzZXJpYWxpemUuXG4gICAqIEBwYXJhbSAge1N0cmluZ3xPYmplY3R9IHNjaGVtYUtleVJlZiBrZXksIHJlZiBvciBzY2hlbWEgb2JqZWN0XG4gICAqIEBwYXJhbSAge0FueX0gZGF0YSB0byBiZSB2YWxpZGF0ZWRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdmFsaWRhdGlvbiByZXN1bHQuIEVycm9ycyBmcm9tIHRoZSBsYXN0IHZhbGlkYXRpb24gd2lsbCBiZSBhdmFpbGFibGUgaW4gYGFqdi5lcnJvcnNgIChhbmQgYWxzbyBpbiBjb21waWxlZCBzY2hlbWE6IGBzY2hlbWEuZXJyb3JzYCkuXG4gICAqL1xuICBmdW5jdGlvbiB2YWxpZGF0ZShzY2hlbWFLZXlSZWYsIGRhdGEpIHtcbiAgICB2YXIgdjtcbiAgICBpZiAodHlwZW9mIHNjaGVtYUtleVJlZiA9PSAnc3RyaW5nJykge1xuICAgICAgdiA9IGdldFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgICAgaWYgKCF2KSB0aHJvdyBuZXcgRXJyb3IoJ25vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgXCInICsgc2NoZW1hS2V5UmVmICsgJ1wiJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzY2hlbWFPYmogPSBfYWRkU2NoZW1hKHNjaGVtYUtleVJlZik7XG4gICAgICB2ID0gc2NoZW1hT2JqLnZhbGlkYXRlIHx8IF9jb21waWxlKHNjaGVtYU9iaik7XG4gICAgfVxuXG4gICAgdmFyIHZhbGlkID0gdihkYXRhKTtcbiAgICBpZiAodi4kYXN5bmMgPT09IHRydWUpXG4gICAgICByZXR1cm4gc2VsZi5fb3B0cy5hc3luYyA9PSAnKicgPyBjbyh2YWxpZCkgOiB2YWxpZDtcbiAgICBzZWxmLmVycm9ycyA9IHYuZXJyb3JzO1xuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENyZWF0ZSB2YWxpZGF0aW5nIGZ1bmN0aW9uIGZvciBwYXNzZWQgc2NoZW1hLlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gICAqIEBwYXJhbSAge0Jvb2xlYW59IF9tZXRhIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSB0byBjb21waWxlIG1ldGEgc2NoZW1hcyBvZiBjdXN0b20ga2V5d29yZHMuXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufSB2YWxpZGF0aW5nIGZ1bmN0aW9uXG4gICAqL1xuICBmdW5jdGlvbiBjb21waWxlKHNjaGVtYSwgX21ldGEpIHtcbiAgICB2YXIgc2NoZW1hT2JqID0gX2FkZFNjaGVtYShzY2hlbWEsIHVuZGVmaW5lZCwgX21ldGEpO1xuICAgIHJldHVybiBzY2hlbWFPYmoudmFsaWRhdGUgfHwgX2NvbXBpbGUoc2NoZW1hT2JqKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEFkZHMgc2NoZW1hIHRvIHRoZSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHNjaGVtYSBzY2hlbWEgb3IgYXJyYXkgb2Ygc2NoZW1hcy4gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCBhbmQgb3RoZXIgcGFyYW1ldGVycyB3aWxsIGJlIGlnbm9yZWQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgT3B0aW9uYWwgc2NoZW1hIGtleS4gQ2FuIGJlIHBhc3NlZCB0byBgdmFsaWRhdGVgIG1ldGhvZCBpbnN0ZWFkIG9mIHNjaGVtYSBvYmplY3Qgb3IgaWQvcmVmLiBPbmUgc2NoZW1hIHBlciBpbnN0YW5jZSBjYW4gaGF2ZSBlbXB0eSBgaWRgIGFuZCBga2V5YC5cbiAgICogQHBhcmFtIHtCb29sZWFufSBfc2tpcFZhbGlkYXRpb24gdHJ1ZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLiBVc2VkIGludGVybmFsbHksIG9wdGlvbiB2YWxpZGF0ZVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IF9tZXRhIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkU2NoZW1hKHNjaGVtYSwga2V5LCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSl7XG4gICAgICBmb3IgKHZhciBpPTA7IGk8c2NoZW1hLmxlbmd0aDsgaSsrKSBhZGRTY2hlbWEoc2NoZW1hW2ldLCB1bmRlZmluZWQsIF9za2lwVmFsaWRhdGlvbiwgX21ldGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjYW4ga2V5L2lkIGhhdmUgIyBpbnNpZGU/XG4gICAga2V5ID0gcmVzb2x2ZS5ub3JtYWxpemVJZChrZXkgfHwgc2NoZW1hLmlkKTtcbiAgICBjaGVja1VuaXF1ZShrZXkpO1xuICAgIHNlbGYuX3NjaGVtYXNba2V5XSA9IF9hZGRTY2hlbWEoc2NoZW1hLCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhLCB0cnVlKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEFkZCBzY2hlbWEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUgb3RoZXIgc2NoZW1hc1xuICAgKiBvcHRpb25zIGluIE1FVEFfSUdOT1JFX09QVElPTlMgYXJlIGFsd2F5IHNldCB0byBmYWxzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gc2NoZW1hIHNjaGVtYSBvYmplY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IGtleSBvcHRpb25hbCBzY2hlbWEga2V5XG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gc2tpcFZhbGlkYXRpb24gdHJ1ZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gICAqL1xuICBmdW5jdGlvbiBhZGRNZXRhU2NoZW1hKHNjaGVtYSwga2V5LCBza2lwVmFsaWRhdGlvbikge1xuICAgIGFkZFNjaGVtYShzY2hlbWEsIGtleSwgc2tpcFZhbGlkYXRpb24sIHRydWUpO1xuICB9XG5cblxuICAvKipcbiAgICogVmFsaWRhdGUgc2NoZW1hXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gdGhyb3dPckxvZ0Vycm9yIHBhc3MgdHJ1ZSB0byB0aHJvdyAob3IgbG9nKSBhbiBlcnJvciBpZiBpbnZhbGlkXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgc2NoZW1hIGlzIHZhbGlkXG4gICAqL1xuICBmdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRocm93T3JMb2dFcnJvcikge1xuICAgIHZhciAkc2NoZW1hID0gc2NoZW1hLiRzY2hlbWEgfHwgc2VsZi5fb3B0cy5kZWZhdWx0TWV0YSB8fCBkZWZhdWx0TWV0YSgpO1xuICAgIHZhciBjdXJyZW50VXJpRm9ybWF0ID0gc2VsZi5fZm9ybWF0cy51cmk7XG4gICAgc2VsZi5fZm9ybWF0cy51cmkgPSB0eXBlb2YgY3VycmVudFVyaUZvcm1hdCA9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFNDSEVNQV9VUklfRk9STUFUX0ZVTkNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogU0NIRU1BX1VSSV9GT1JNQVQ7XG4gICAgdmFyIHZhbGlkO1xuICAgIHRyeSB7IHZhbGlkID0gdmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTsgfVxuICAgIGZpbmFsbHkgeyBzZWxmLl9mb3JtYXRzLnVyaSA9IGN1cnJlbnRVcmlGb3JtYXQ7IH1cbiAgICBpZiAoIXZhbGlkICYmIHRocm93T3JMb2dFcnJvcikge1xuICAgICAgdmFyIG1lc3NhZ2UgPSAnc2NoZW1hIGlzIGludmFsaWQ6ICcgKyBlcnJvcnNUZXh0KCk7XG4gICAgICBpZiAoc2VsZi5fb3B0cy52YWxpZGF0ZVNjaGVtYSA9PSAnbG9nJykgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRNZXRhKCkge1xuICAgIHZhciBtZXRhID0gc2VsZi5fb3B0cy5tZXRhO1xuICAgIHNlbGYuX29wdHMuZGVmYXVsdE1ldGEgPSB0eXBlb2YgbWV0YSA9PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtZXRhLmlkIHx8IG1ldGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5fb3B0cy52NVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHY1Lk1FVEFfU0NIRU1BX0lEXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTUVUQV9TQ0hFTUFfSUQ7XG4gICAgcmV0dXJuIHNlbGYuX29wdHMuZGVmYXVsdE1ldGE7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXQgY29tcGlsZWQgc2NoZW1hIGZyb20gdGhlIGluc3RhbmNlIGJ5IGBrZXlgIG9yIGByZWZgLlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGtleVJlZiBga2V5YCB0aGF0IHdhcyBwYXNzZWQgdG8gYGFkZFNjaGVtYWAgb3IgZnVsbCBzY2hlbWEgcmVmZXJlbmNlIChgc2NoZW1hLmlkYCBvciByZXNvbHZlZCBpZCkuXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBzY2hlbWEgdmFsaWRhdGluZyBmdW5jdGlvbiAod2l0aCBwcm9wZXJ0eSBgc2NoZW1hYCkuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRTY2hlbWEoa2V5UmVmKSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IF9nZXRTY2hlbWFPYmooa2V5UmVmKTtcbiAgICBzd2l0Y2ggKHR5cGVvZiBzY2hlbWFPYmopIHtcbiAgICAgIGNhc2UgJ29iamVjdCc6IHJldHVybiBzY2hlbWFPYmoudmFsaWRhdGUgfHwgX2NvbXBpbGUoc2NoZW1hT2JqKTtcbiAgICAgIGNhc2UgJ3N0cmluZyc6IHJldHVybiBnZXRTY2hlbWEoc2NoZW1hT2JqKTtcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiBfZ2V0U2NoZW1hRnJhZ21lbnQoa2V5UmVmKTtcbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIF9nZXRTY2hlbWFGcmFnbWVudChyZWYpIHtcbiAgICB2YXIgcmVzID0gcmVzb2x2ZS5zY2hlbWEuY2FsbChzZWxmLCB7IHNjaGVtYToge30gfSwgcmVmKTtcbiAgICBpZiAocmVzKSB7XG4gICAgICB2YXIgc2NoZW1hID0gcmVzLnNjaGVtYVxuICAgICAgICAsIHJvb3QgPSByZXMucm9vdFxuICAgICAgICAsIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgICB2YXIgdiA9IGNvbXBpbGVTY2hlbWEuY2FsbChzZWxmLCBzY2hlbWEsIHJvb3QsIHVuZGVmaW5lZCwgYmFzZUlkKTtcbiAgICAgIHNlbGYuX2ZyYWdtZW50c1tyZWZdID0gbmV3IFNjaGVtYU9iamVjdCh7XG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICBmcmFnbWVudDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIHJvb3Q6IHJvb3QsXG4gICAgICAgIGJhc2VJZDogYmFzZUlkLFxuICAgICAgICB2YWxpZGF0ZTogdlxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdjtcbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIF9nZXRTY2hlbWFPYmooa2V5UmVmKSB7XG4gICAga2V5UmVmID0gcmVzb2x2ZS5ub3JtYWxpemVJZChrZXlSZWYpO1xuICAgIHJldHVybiBzZWxmLl9zY2hlbWFzW2tleVJlZl0gfHwgc2VsZi5fcmVmc1trZXlSZWZdIHx8IHNlbGYuX2ZyYWdtZW50c1trZXlSZWZdO1xuICB9XG5cblxuICAvKipcbiAgICogUmVtb3ZlIGNhY2hlZCBzY2hlbWEocykuXG4gICAqIElmIG5vIHBhcmFtZXRlciBpcyBwYXNzZWQgYWxsIHNjaGVtYXMgYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICogSWYgUmVnRXhwIGlzIHBhc3NlZCBhbGwgc2NoZW1hcyB3aXRoIGtleS9pZCBtYXRjaGluZyBwYXR0ZXJuIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gICAqIEV2ZW4gaWYgc2NoZW1hIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgc2NoZW1hcyBpdCBzdGlsbCBjYW4gYmUgcmVtb3ZlZCBhcyBvdGhlciBzY2hlbWFzIGhhdmUgbG9jYWwgcmVmZXJlbmNlcy5cbiAgICogQHBhcmFtICB7U3RyaW5nfE9iamVjdHxSZWdFeHB9IHNjaGVtYUtleVJlZiBrZXksIHJlZiwgcGF0dGVybiB0byBtYXRjaCBrZXkvcmVmIG9yIHNjaGVtYSBvYmplY3RcbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZVNjaGVtYShzY2hlbWFLZXlSZWYpIHtcbiAgICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBfcmVtb3ZlQWxsU2NoZW1hcyhzZWxmLl9zY2hlbWFzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgX3JlbW92ZUFsbFNjaGVtYXMoc2VsZi5fcmVmcywgc2NoZW1hS2V5UmVmKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlb2Ygc2NoZW1hS2V5UmVmKSB7XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICBfcmVtb3ZlQWxsU2NoZW1hcyhzZWxmLl9zY2hlbWFzKTtcbiAgICAgICAgX3JlbW92ZUFsbFNjaGVtYXMoc2VsZi5fcmVmcyk7XG4gICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHZhciBzY2hlbWFPYmogPSBfZ2V0U2NoZW1hT2JqKHNjaGVtYUtleVJlZik7XG4gICAgICAgIGlmIChzY2hlbWFPYmopIHNlbGYuX2NhY2hlLmRlbChzY2hlbWFPYmouanNvblN0cik7XG4gICAgICAgIGRlbGV0ZSBzZWxmLl9zY2hlbWFzW3NjaGVtYUtleVJlZl07XG4gICAgICAgIGRlbGV0ZSBzZWxmLl9yZWZzW3NjaGVtYUtleVJlZl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHZhciBqc29uU3RyID0gc3RhYmxlU3RyaW5naWZ5KHNjaGVtYUtleVJlZik7XG4gICAgICAgIHNlbGYuX2NhY2hlLmRlbChqc29uU3RyKTtcbiAgICAgICAgdmFyIGlkID0gc2NoZW1hS2V5UmVmLmlkO1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICBpZCA9IHJlc29sdmUubm9ybWFsaXplSWQoaWQpO1xuICAgICAgICAgIGRlbGV0ZSBzZWxmLl9zY2hlbWFzW2lkXTtcbiAgICAgICAgICBkZWxldGUgc2VsZi5fcmVmc1tpZF07XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIF9yZW1vdmVBbGxTY2hlbWFzKHNjaGVtYXMsIHJlZ2V4KSB7XG4gICAgZm9yICh2YXIga2V5UmVmIGluIHNjaGVtYXMpIHtcbiAgICAgIHZhciBzY2hlbWFPYmogPSBzY2hlbWFzW2tleVJlZl07XG4gICAgICBpZiAoIXNjaGVtYU9iai5tZXRhICYmICghcmVnZXggfHwgcmVnZXgudGVzdChrZXlSZWYpKSkge1xuICAgICAgICBzZWxmLl9jYWNoZS5kZWwoc2NoZW1hT2JqLmpzb25TdHIpO1xuICAgICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gX2FkZFNjaGVtYShzY2hlbWEsIHNraXBWYWxpZGF0aW9uLCBtZXRhLCBzaG91bGRBZGRTY2hlbWEpIHtcbiAgICBpZiAodHlwZW9mIHNjaGVtYSAhPSAnb2JqZWN0JykgdGhyb3cgbmV3IEVycm9yKCdzY2hlbWEgc2hvdWxkIGJlIG9iamVjdCcpO1xuICAgIHZhciBqc29uU3RyID0gc3RhYmxlU3RyaW5naWZ5KHNjaGVtYSk7XG4gICAgdmFyIGNhY2hlZCA9IHNlbGYuX2NhY2hlLmdldChqc29uU3RyKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgc2hvdWxkQWRkU2NoZW1hID0gc2hvdWxkQWRkU2NoZW1hIHx8IHNlbGYuX29wdHMuYWRkVXNlZFNjaGVtYSAhPT0gZmFsc2U7XG5cbiAgICB2YXIgaWQgPSByZXNvbHZlLm5vcm1hbGl6ZUlkKHNjaGVtYS5pZCk7XG4gICAgaWYgKGlkICYmIHNob3VsZEFkZFNjaGVtYSkgY2hlY2tVbmlxdWUoaWQpO1xuXG4gICAgdmFyIHdpbGxWYWxpZGF0ZSA9IHNlbGYuX29wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlICYmICFza2lwVmFsaWRhdGlvbjtcbiAgICB2YXIgcmVjdXJzaXZlTWV0YTtcbiAgICBpZiAod2lsbFZhbGlkYXRlICYmICEocmVjdXJzaXZlTWV0YSA9IHNjaGVtYS5pZCAmJiBzY2hlbWEuaWQgPT0gc2NoZW1hLiRzY2hlbWEpKVxuICAgICAgdmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcblxuICAgIHZhciBsb2NhbFJlZnMgPSByZXNvbHZlLmlkcy5jYWxsKHNlbGYsIHNjaGVtYSk7XG5cbiAgICB2YXIgc2NoZW1hT2JqID0gbmV3IFNjaGVtYU9iamVjdCh7XG4gICAgICBpZDogaWQsXG4gICAgICBzY2hlbWE6IHNjaGVtYSxcbiAgICAgIGxvY2FsUmVmczogbG9jYWxSZWZzLFxuICAgICAganNvblN0cjoganNvblN0cixcbiAgICAgIG1ldGE6IG1ldGFcbiAgICB9KTtcblxuICAgIGlmIChpZFswXSAhPSAnIycgJiYgc2hvdWxkQWRkU2NoZW1hKSBzZWxmLl9yZWZzW2lkXSA9IHNjaGVtYU9iajtcbiAgICBzZWxmLl9jYWNoZS5wdXQoanNvblN0ciwgc2NoZW1hT2JqKTtcblxuICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgcmVjdXJzaXZlTWV0YSkgdmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcblxuICAgIHJldHVybiBzY2hlbWFPYmo7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIF9jb21waWxlKHNjaGVtYU9iaiwgcm9vdCkge1xuICAgIGlmIChzY2hlbWFPYmouY29tcGlsaW5nKSB7XG4gICAgICBzY2hlbWFPYmoudmFsaWRhdGUgPSBjYWxsVmFsaWRhdGU7XG4gICAgICBjYWxsVmFsaWRhdGUuc2NoZW1hID0gc2NoZW1hT2JqLnNjaGVtYTtcbiAgICAgIGNhbGxWYWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgICAgY2FsbFZhbGlkYXRlLnJvb3QgPSByb290ID8gcm9vdCA6IGNhbGxWYWxpZGF0ZTtcbiAgICAgIGlmIChzY2hlbWFPYmouc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSlcbiAgICAgICAgY2FsbFZhbGlkYXRlLiRhc3luYyA9IHRydWU7XG4gICAgICByZXR1cm4gY2FsbFZhbGlkYXRlO1xuICAgIH1cbiAgICBzY2hlbWFPYmouY29tcGlsaW5nID0gdHJ1ZTtcblxuICAgIHZhciBjdXJyZW50T3B0cztcbiAgICBpZiAoc2NoZW1hT2JqLm1ldGEpIHtcbiAgICAgIGN1cnJlbnRPcHRzID0gc2VsZi5fb3B0cztcbiAgICAgIHNlbGYuX29wdHMgPSBzZWxmLl9tZXRhT3B0cztcbiAgICB9XG5cbiAgICB2YXIgdjtcbiAgICB0cnkgeyB2ID0gY29tcGlsZVNjaGVtYS5jYWxsKHNlbGYsIHNjaGVtYU9iai5zY2hlbWEsIHJvb3QsIHNjaGVtYU9iai5sb2NhbFJlZnMpOyB9XG4gICAgZmluYWxseSB7XG4gICAgICBzY2hlbWFPYmouY29tcGlsaW5nID0gZmFsc2U7XG4gICAgICBpZiAoc2NoZW1hT2JqLm1ldGEpIHNlbGYuX29wdHMgPSBjdXJyZW50T3B0cztcbiAgICB9XG5cbiAgICBzY2hlbWFPYmoudmFsaWRhdGUgPSB2O1xuICAgIHNjaGVtYU9iai5yZWZzID0gdi5yZWZzO1xuICAgIHNjaGVtYU9iai5yZWZWYWwgPSB2LnJlZlZhbDtcbiAgICBzY2hlbWFPYmoucm9vdCA9IHYucm9vdDtcbiAgICByZXR1cm4gdjtcblxuXG4gICAgZnVuY3Rpb24gY2FsbFZhbGlkYXRlKCkge1xuICAgICAgdmFyIF92YWxpZGF0ZSA9IHNjaGVtYU9iai52YWxpZGF0ZTtcbiAgICAgIHZhciByZXN1bHQgPSBfdmFsaWRhdGUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIGNhbGxWYWxpZGF0ZS5lcnJvcnMgPSBfdmFsaWRhdGUuZXJyb3JzO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFycmF5IG9mIGVycm9yIG1lc3NhZ2Ugb2JqZWN0cyB0byBzdHJpbmdcbiAgICogQHBhcmFtICB7QXJyYXk8T2JqZWN0Pn0gZXJyb3JzIG9wdGlvbmFsIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzLCBpZiBub3QgcGFzc2VkIGVycm9ycyBmcm9tIHRoZSBpbnN0YW5jZSBhcmUgdXNlZC5cbiAgICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbmFsIG9wdGlvbnMgd2l0aCBwcm9wZXJ0aWVzIGBzZXBhcmF0b3JgIGFuZCBgZGF0YVZhcmAuXG4gICAqIEByZXR1cm4ge1N0cmluZ30gaHVtYW4gcmVhZGFibGUgc3RyaW5nIHdpdGggYWxsIGVycm9ycyBkZXNjcmlwdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIGVycm9yc1RleHQoZXJyb3JzLCBvcHRpb25zKSB7XG4gICAgZXJyb3JzID0gZXJyb3JzIHx8IHNlbGYuZXJyb3JzO1xuICAgIGlmICghZXJyb3JzKSByZXR1cm4gJ05vIGVycm9ycyc7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdmFyIHNlcGFyYXRvciA9IG9wdGlvbnMuc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCAnIDogb3B0aW9ucy5zZXBhcmF0b3I7XG4gICAgdmFyIGRhdGFWYXIgPSBvcHRpb25zLmRhdGFWYXIgPT09IHVuZGVmaW5lZCA/ICdkYXRhJyA6IG9wdGlvbnMuZGF0YVZhcjtcblxuICAgIHZhciB0ZXh0ID0gJyc7XG4gICAgZm9yICh2YXIgaT0wOyBpPGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGUgPSBlcnJvcnNbaV07XG4gICAgICBpZiAoZSkgdGV4dCArPSBkYXRhVmFyICsgZS5kYXRhUGF0aCArICcgJyArIGUubWVzc2FnZSArIHNlcGFyYXRvcjtcbiAgICB9XG4gICAgcmV0dXJuIHRleHQuc2xpY2UoMCwgLXNlcGFyYXRvci5sZW5ndGgpO1xuICB9XG5cblxuICAvKipcbiAgICogQWRkIGN1c3RvbSBmb3JtYXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgZm9ybWF0IG5hbWVcbiAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfEZ1bmN0aW9ufSBmb3JtYXQgc3RyaW5nIGlzIGNvbnZlcnRlZCB0byBSZWdFeHA7IGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYm9vbGVhbiAodHJ1ZSB3aGVuIHZhbGlkKVxuICAgKi9cbiAgZnVuY3Rpb24gYWRkRm9ybWF0KG5hbWUsIGZvcm1hdCkge1xuICAgIGlmICh0eXBlb2YgZm9ybWF0ID09ICdzdHJpbmcnKSBmb3JtYXQgPSBuZXcgUmVnRXhwKGZvcm1hdCk7XG4gICAgc2VsZi5fZm9ybWF0c1tuYW1lXSA9IGZvcm1hdDtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gYWRkRHJhZnQ0TWV0YVNjaGVtYSgpIHtcbiAgICBpZiAoc2VsZi5fb3B0cy5tZXRhICE9PSBmYWxzZSkge1xuICAgICAgdmFyIG1ldGFTY2hlbWEgPSByZXF1aXJlKCcuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDQuanNvbicpO1xuICAgICAgYWRkTWV0YVNjaGVtYShtZXRhU2NoZW1hLCBNRVRBX1NDSEVNQV9JRCwgdHJ1ZSk7XG4gICAgICBzZWxmLl9yZWZzWydodHRwOi8vanNvbi1zY2hlbWEub3JnL3NjaGVtYSddID0gTUVUQV9TQ0hFTUFfSUQ7XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBhZGRJbml0aWFsU2NoZW1hcygpIHtcbiAgICB2YXIgb3B0c1NjaGVtYXMgPSBzZWxmLl9vcHRzLnNjaGVtYXM7XG4gICAgaWYgKCFvcHRzU2NoZW1hcykgcmV0dXJuO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHNTY2hlbWFzKSkgYWRkU2NoZW1hKG9wdHNTY2hlbWFzKTtcbiAgICBlbHNlIGZvciAodmFyIGtleSBpbiBvcHRzU2NoZW1hcykgYWRkU2NoZW1hKG9wdHNTY2hlbWFzW2tleV0sIGtleSk7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGFkZEluaXRpYWxGb3JtYXRzKCkge1xuICAgIGZvciAodmFyIG5hbWUgaW4gc2VsZi5fb3B0cy5mb3JtYXRzKSB7XG4gICAgICB2YXIgZm9ybWF0ID0gc2VsZi5fb3B0cy5mb3JtYXRzW25hbWVdO1xuICAgICAgYWRkRm9ybWF0KG5hbWUsIGZvcm1hdCk7XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBjaGVja1VuaXF1ZShpZCkge1xuICAgIGlmIChzZWxmLl9zY2hlbWFzW2lkXSB8fCBzZWxmLl9yZWZzW2lkXSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2NoZW1hIHdpdGgga2V5IG9yIGlkIFwiJyArIGlkICsgJ1wiIGFscmVhZHkgZXhpc3RzJyk7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGdldE1ldGFTY2hlbWFPcHRpb25zKCkge1xuICAgIHZhciBtZXRhT3B0cyA9IHV0aWwuY29weShzZWxmLl9vcHRzKTtcbiAgICBmb3IgKHZhciBpPTA7IGk8TUVUQV9JR05PUkVfT1BUSU9OUy5sZW5ndGg7IGkrKylcbiAgICAgIGRlbGV0ZSBtZXRhT3B0c1tNRVRBX0lHTk9SRV9PUFRJT05TW2ldXTtcbiAgICByZXR1cm4gbWV0YU9wdHM7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldHVwOiBzZXR1cEFzeW5jLFxuICBjb21waWxlOiBjb21waWxlQXN5bmNcbn07XG5cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL2NvbXBpbGUvdXRpbCcpO1xuXG52YXIgQVNZTkMgPSB7XG4gICcqJzogY2hlY2tHZW5lcmF0b3JzLFxuICAnY28qJzogY2hlY2tHZW5lcmF0b3JzLFxuICAnZXM3JzogY2hlY2tBc3luY0Z1bmN0aW9uXG59O1xuXG52YXIgVFJBTlNQSUxFID0ge1xuICAnbm9kZW50JzogZ2V0Tm9kZW50LFxuICAncmVnZW5lcmF0b3InOiBnZXRSZWdlbmVyYXRvclxufTtcblxudmFyIE1PREVTID0gW1xuICB7IGFzeW5jOiAnY28qJyB9LFxuICB7IGFzeW5jOiAnZXM3JywgdHJhbnNwaWxlOiAnbm9kZW50JyB9LFxuICB7IGFzeW5jOiAnY28qJywgdHJhbnNwaWxlOiAncmVnZW5lcmF0b3InIH1cbl07XG5cblxudmFyIHJlZ2VuZXJhdG9yLCBub2RlbnQ7XG5cblxuZnVuY3Rpb24gc2V0dXBBc3luYyhvcHRzLCByZXF1aXJlZCkge1xuICBpZiAocmVxdWlyZWQgIT09IGZhbHNlKSByZXF1aXJlZCA9IHRydWU7XG4gIHZhciBhc3luYyA9IG9wdHMuYXN5bmNcbiAgICAsIHRyYW5zcGlsZSA9IG9wdHMudHJhbnNwaWxlXG4gICAgLCBjaGVjaztcblxuICBzd2l0Y2ggKHR5cGVvZiB0cmFuc3BpbGUpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgdmFyIGdldCA9IFRSQU5TUElMRVt0cmFuc3BpbGVdO1xuICAgICAgaWYgKCFnZXQpIHRocm93IG5ldyBFcnJvcignYmFkIHRyYW5zcGlsZXI6ICcgKyB0cmFuc3BpbGUpO1xuICAgICAgcmV0dXJuIChvcHRzLl90cmFuc3BpbGVGdW5jID0gZ2V0KG9wdHMsIHJlcXVpcmVkKSk7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGlmICh0eXBlb2YgYXN5bmMgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2hlY2sgPSBBU1lOQ1thc3luY107XG4gICAgICAgIGlmICghY2hlY2spIHRocm93IG5ldyBFcnJvcignYmFkIGFzeW5jIG1vZGU6ICcgKyBhc3luYyk7XG4gICAgICAgIHJldHVybiAob3B0cy50cmFuc3BpbGUgPSBjaGVjayhvcHRzLCByZXF1aXJlZCkpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpPTA7IGk8TU9ERVMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIF9vcHRzID0gTU9ERVNbaV07XG4gICAgICAgIGlmIChzZXR1cEFzeW5jKF9vcHRzLCBmYWxzZSkpIHtcbiAgICAgICAgICB1dGlsLmNvcHkoX29wdHMsIG9wdHMpO1xuICAgICAgICAgIHJldHVybiBvcHRzLnRyYW5zcGlsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHRocm93IG5ldyBFcnJvcignZ2VuZXJhdG9ycywgbm9kZW50IGFuZCByZWdlbmVyYXRvciBhcmUgbm90IGF2YWlsYWJsZScpO1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHJldHVybiAob3B0cy5fdHJhbnNwaWxlRnVuYyA9IG9wdHMudHJhbnNwaWxlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdHJhbnNwaWxlcjogJyArIHRyYW5zcGlsZSk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBjaGVja0dlbmVyYXRvcnMob3B0cywgcmVxdWlyZWQpIHtcbiAgLyoganNoaW50IGV2aWw6IHRydWUgKi9cbiAgdHJ5IHtcbiAgICAobmV3IEZ1bmN0aW9uKCcoZnVuY3Rpb24qKCl7fSkoKScpKSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChyZXF1aXJlZCkgdGhyb3cgbmV3IEVycm9yKCdnZW5lcmF0b3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNoZWNrQXN5bmNGdW5jdGlvbihvcHRzLCByZXF1aXJlZCkge1xuICAvKiBqc2hpbnQgZXZpbDogdHJ1ZSAqL1xuICB0cnkge1xuICAgIChuZXcgRnVuY3Rpb24oJyhhc3luYyBmdW5jdGlvbigpe30pKCknKSkoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGUpIHtcbiAgICBpZiAocmVxdWlyZWQpIHRocm93IG5ldyBFcnJvcignZXM3IGFzeW5jIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBnZXRSZWdlbmVyYXRvcihvcHRzLCByZXF1aXJlZCkge1xuICB0cnkge1xuICAgIGlmICghcmVnZW5lcmF0b3IpIHtcbiAgICAgIHZhciBuYW1lID0gJ3JlZ2VuZXJhdG9yJztcbiAgICAgIHJlZ2VuZXJhdG9yID0gcmVxdWlyZShuYW1lKTtcbiAgICAgIHJlZ2VuZXJhdG9yLnJ1bnRpbWUoKTtcbiAgICB9XG4gICAgaWYgKCFvcHRzLmFzeW5jIHx8IG9wdHMuYXN5bmMgPT09IHRydWUpXG4gICAgICBvcHRzLmFzeW5jID0gJ2VzNyc7XG4gICAgcmV0dXJuIHJlZ2VuZXJhdG9yVHJhbnNwaWxlO1xuICB9IGNhdGNoKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChyZXF1aXJlZCkgdGhyb3cgbmV3IEVycm9yKCdyZWdlbmVyYXRvciBub3QgYXZhaWxhYmxlJyk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiByZWdlbmVyYXRvclRyYW5zcGlsZShjb2RlKSB7XG4gIHJldHVybiByZWdlbmVyYXRvci5jb21waWxlKGNvZGUpLmNvZGU7XG59XG5cblxuZnVuY3Rpb24gZ2V0Tm9kZW50KG9wdHMsIHJlcXVpcmVkKSB7XG4gIC8qIGpzaGludCBldmlsOiB0cnVlICovXG4gIHRyeSB7XG4gICAgaWYgKCFub2RlbnQpIHtcbiAgICAgIHZhciBuYW1lID0gJ25vZGVudCc7XG4gICAgICBub2RlbnQgPSByZXF1aXJlKG5hbWUpKHsgbG9nOiBmYWxzZSwgZG9udEluc3RhbGxSZXF1aXJlSG9vazogdHJ1ZSB9KTtcbiAgICB9XG4gICAgaWYgKG9wdHMuYXN5bmMgIT0gJ2VzNycpIHtcbiAgICAgIGlmIChvcHRzLmFzeW5jICYmIG9wdHMuYXN5bmMgIT09IHRydWUpIGNvbnNvbGUud2Fybignbm9kZW50IHRyYW5zcGlsZXMgb25seSBlczcgYXN5bmMgZnVuY3Rpb25zJyk7XG4gICAgICBvcHRzLmFzeW5jID0gJ2VzNyc7XG4gICAgfVxuICAgIHJldHVybiBub2RlbnRUcmFuc3BpbGU7XG4gIH0gY2F0Y2goZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHJlcXVpcmVkKSB0aHJvdyBuZXcgRXJyb3IoJ25vZGVudCBub3QgYXZhaWxhYmxlJyk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBub2RlbnRUcmFuc3BpbGUoY29kZSkge1xuICByZXR1cm4gbm9kZW50LmNvbXBpbGUoY29kZSwgJycsIHsgcHJvbWlzZXM6IHRydWUsIHNvdXJjZW1hcDogZmFsc2UgfSkuY29kZTtcbn1cblxuXG4vKipcbiAqIENyZWF0ZXMgdmFsaWRhdGluZyBmdW5jdGlvbiBmb3IgcGFzc2VkIHNjaGVtYSB3aXRoIGFzeW5jaHJvbm91cyBsb2FkaW5nIG9mIG1pc3Npbmcgc2NoZW1hcy5cbiAqIGBsb2FkU2NoZW1hYCBvcHRpb24gc2hvdWxkIGJlIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHNjaGVtYSB1cmkgYW5kIG5vZGUtc3R5bGUgY2FsbGJhY2suXG4gKiBAdGhpcyAgQWp2XG4gKiBAcGFyYW0ge09iamVjdH0gICBzY2hlbWEgc2NoZW1hIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgbm9kZS1zdHlsZSBjYWxsYmFjaywgaXQgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIDIgcGFyYW1ldGVyczogZXJyb3IgKG9yIG51bGwpIGFuZCB2YWxpZGF0aW5nIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjb21waWxlQXN5bmMoc2NoZW1hLCBjYWxsYmFjaykge1xuICAvKiBlc2xpbnQgbm8tc2hhZG93OiAwICovXG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIHNjaGVtYU9iajtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0cnkge1xuICAgIHNjaGVtYU9iaiA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWEpO1xuICB9IGNhdGNoKGUpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhlKTsgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChzY2hlbWFPYmoudmFsaWRhdGUpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhudWxsLCBzY2hlbWFPYmoudmFsaWRhdGUpOyB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX29wdHMubG9hZFNjaGVtYSAhPSAnZnVuY3Rpb24nKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmxvYWRTY2hlbWEgc2hvdWxkIGJlIGEgZnVuY3Rpb24nKTtcbiAgICBfY29tcGlsZUFzeW5jKHNjaGVtYSwgY2FsbGJhY2ssIHRydWUpO1xuICB9XG5cblxuICBmdW5jdGlvbiBfY29tcGlsZUFzeW5jKHNjaGVtYSwgY2FsbGJhY2ssIGZpcnN0Q2FsbCkge1xuICAgIHZhciB2YWxpZGF0ZTtcbiAgICB0cnkgeyB2YWxpZGF0ZSA9IHNlbGYuY29tcGlsZShzY2hlbWEpOyB9XG4gICAgY2F0Y2goZSkge1xuICAgICAgaWYgKGUubWlzc2luZ1NjaGVtYSkgbG9hZE1pc3NpbmdTY2hlbWEoZSk7XG4gICAgICBlbHNlIGRlZmVyQ2FsbGJhY2soZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlZmVyQ2FsbGJhY2sobnVsbCwgdmFsaWRhdGUpO1xuXG4gICAgZnVuY3Rpb24gbG9hZE1pc3NpbmdTY2hlbWEoZSkge1xuICAgICAgdmFyIHJlZiA9IGUubWlzc2luZ1NjaGVtYTtcbiAgICAgIGlmIChzZWxmLl9yZWZzW3JlZl0gfHwgc2VsZi5fc2NoZW1hc1tyZWZdKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdTY2hlbWEgJyArIHJlZiArICcgaXMgbG9hZGVkIGJ1dCAnICsgZS5taXNzaW5nUmVmICsgJyBjYW5ub3QgYmUgcmVzb2x2ZWQnKSk7XG4gICAgICB2YXIgX2NhbGxiYWNrcyA9IHNlbGYuX2xvYWRpbmdTY2hlbWFzW3JlZl07XG4gICAgICBpZiAoX2NhbGxiYWNrcykge1xuICAgICAgICBpZiAodHlwZW9mIF9jYWxsYmFja3MgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdID0gW19jYWxsYmFja3MsIHNjaGVtYUxvYWRlZF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBfY2FsbGJhY2tzW19jYWxsYmFja3MubGVuZ3RoXSA9IHNjaGVtYUxvYWRlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuX2xvYWRpbmdTY2hlbWFzW3JlZl0gPSBzY2hlbWFMb2FkZWQ7XG4gICAgICAgIHNlbGYuX29wdHMubG9hZFNjaGVtYShyZWYsIGZ1bmN0aW9uIChlcnIsIHNjaCkge1xuICAgICAgICAgIHZhciBfY2FsbGJhY2tzID0gc2VsZi5fbG9hZGluZ1NjaGVtYXNbcmVmXTtcbiAgICAgICAgICBkZWxldGUgc2VsZi5fbG9hZGluZ1NjaGVtYXNbcmVmXTtcbiAgICAgICAgICBpZiAodHlwZW9mIF9jYWxsYmFja3MgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgX2NhbGxiYWNrcyhlcnIsIHNjaCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxfY2FsbGJhY2tzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICBfY2FsbGJhY2tzW2ldKGVyciwgc2NoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBzY2hlbWFMb2FkZWQoZXJyLCBzY2gpIHtcbiAgICAgICAgaWYgKGVycikgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIGlmICghKHNlbGYuX3JlZnNbcmVmXSB8fCBzZWxmLl9zY2hlbWFzW3JlZl0pKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNlbGYuYWRkU2NoZW1hKHNjaCwgcmVmKTtcbiAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfY29tcGlsZUFzeW5jKHNjaGVtYSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmVyQ2FsbGJhY2soZXJyLCB2YWxpZGF0ZSkge1xuICAgICAgaWYgKGZpcnN0Q2FsbCkgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2soZXJyLCB2YWxpZGF0ZSk7IH0pO1xuICAgICAgZWxzZSByZXR1cm4gY2FsbGJhY2soZXJyLCB2YWxpZGF0ZSk7XG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cblxudmFyIENhY2hlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWNoZSgpIHtcbiAgdGhpcy5fY2FjaGUgPSB7fTtcbn07XG5cblxuQ2FjaGUucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIENhY2hlX3B1dChrZXksIHZhbHVlKSB7XG4gIHRoaXMuX2NhY2hlW2tleV0gPSB2YWx1ZTtcbn07XG5cblxuQ2FjaGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIENhY2hlX2dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX2NhY2hlW2tleV07XG59O1xuXG5cbkNhY2hlLnByb3RvdHlwZS5kZWwgPSBmdW5jdGlvbiBDYWNoZV9kZWwoa2V5KSB7XG4gIGRlbGV0ZSB0aGlzLl9jYWNoZVtrZXldO1xufTtcblxuXG5DYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBDYWNoZV9jbGVhcigpIHtcbiAgdGhpcy5fY2FjaGUgPSB7fTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vYWxsIHJlcXVpcmVzIG11c3QgYmUgZXhwbGljaXQgYmVjYXVzZSBicm93c2VyaWZ5IHdvbid0IHdvcmsgd2l0aCBkeW5hbWljIHJlcXVpcmVzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJyRyZWYnOiByZXF1aXJlKCcuLi9kb3Rqcy9yZWYnKSxcbiAgYWxsT2Y6IHJlcXVpcmUoJy4uL2RvdGpzL2FsbE9mJyksXG4gIGFueU9mOiByZXF1aXJlKCcuLi9kb3Rqcy9hbnlPZicpLFxuICBkZXBlbmRlbmNpZXM6IHJlcXVpcmUoJy4uL2RvdGpzL2RlcGVuZGVuY2llcycpLFxuICAnZW51bSc6IHJlcXVpcmUoJy4uL2RvdGpzL2VudW0nKSxcbiAgZm9ybWF0OiByZXF1aXJlKCcuLi9kb3Rqcy9mb3JtYXQnKSxcbiAgaXRlbXM6IHJlcXVpcmUoJy4uL2RvdGpzL2l0ZW1zJyksXG4gIG1heGltdW06IHJlcXVpcmUoJy4uL2RvdGpzL19saW1pdCcpLFxuICBtaW5pbXVtOiByZXF1aXJlKCcuLi9kb3Rqcy9fbGltaXQnKSxcbiAgbWF4SXRlbXM6IHJlcXVpcmUoJy4uL2RvdGpzL19saW1pdEl0ZW1zJyksXG4gIG1pbkl0ZW1zOiByZXF1aXJlKCcuLi9kb3Rqcy9fbGltaXRJdGVtcycpLFxuICBtYXhMZW5ndGg6IHJlcXVpcmUoJy4uL2RvdGpzL19saW1pdExlbmd0aCcpLFxuICBtaW5MZW5ndGg6IHJlcXVpcmUoJy4uL2RvdGpzL19saW1pdExlbmd0aCcpLFxuICBtYXhQcm9wZXJ0aWVzOiByZXF1aXJlKCcuLi9kb3Rqcy9fbGltaXRQcm9wZXJ0aWVzJyksXG4gIG1pblByb3BlcnRpZXM6IHJlcXVpcmUoJy4uL2RvdGpzL19saW1pdFByb3BlcnRpZXMnKSxcbiAgbXVsdGlwbGVPZjogcmVxdWlyZSgnLi4vZG90anMvbXVsdGlwbGVPZicpLFxuICBub3Q6IHJlcXVpcmUoJy4uL2RvdGpzL25vdCcpLFxuICBvbmVPZjogcmVxdWlyZSgnLi4vZG90anMvb25lT2YnKSxcbiAgcGF0dGVybjogcmVxdWlyZSgnLi4vZG90anMvcGF0dGVybicpLFxuICBwcm9wZXJ0aWVzOiByZXF1aXJlKCcuLi9kb3Rqcy9wcm9wZXJ0aWVzJyksXG4gIHJlcXVpcmVkOiByZXF1aXJlKCcuLi9kb3Rqcy9yZXF1aXJlZCcpLFxuICB1bmlxdWVJdGVtczogcmVxdWlyZSgnLi4vZG90anMvdW5pcXVlSXRlbXMnKSxcbiAgdmFsaWRhdGU6IHJlcXVpcmUoJy4uL2RvdGpzL3ZhbGlkYXRlJylcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qZXNsaW50IGNvbXBsZXhpdHk6IDAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIHZhciBhcnJBID0gQXJyYXkuaXNBcnJheShhKVxuICAgICwgYXJyQiA9IEFycmF5LmlzQXJyYXkoYilcbiAgICAsIGk7XG5cbiAgaWYgKGFyckEgJiYgYXJyQikge1xuICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKCFlcXVhbChhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGFyckEgIT0gYXJyQikgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgaWYgKGtleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIHZhciBkYXRlQSA9IGEgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAsIGRhdGVCID0gYiBpbnN0YW5jZW9mIERhdGU7XG4gICAgaWYgKGRhdGVBICYmIGRhdGVCKSByZXR1cm4gYS5nZXRUaW1lKCkgPT0gYi5nZXRUaW1lKCk7XG4gICAgaWYgKGRhdGVBICE9IGRhdGVCKSByZXR1cm4gZmFsc2U7XG5cbiAgICB2YXIgcmVnZXhwQSA9IGEgaW5zdGFuY2VvZiBSZWdFeHBcbiAgICAgICwgcmVnZXhwQiA9IGIgaW5zdGFuY2VvZiBSZWdFeHA7XG4gICAgaWYgKHJlZ2V4cEEgJiYgcmVnZXhwQikgcmV0dXJuIGEudG9TdHJpbmcoKSA9PSBiLnRvU3RyaW5nKCk7XG4gICAgaWYgKHJlZ2V4cEEgIT0gcmVnZXhwQikgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspXG4gICAgICBpZighZXF1YWwoYVtrZXlzW2ldXSwgYltrZXlzW2ldXSkpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxudmFyIERBVEUgPSAvXlxcZFxcZFxcZFxcZC0oXFxkXFxkKS0oXFxkXFxkKSQvO1xudmFyIERBWVMgPSBbMCwzMSwyOSwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07XG52YXIgVElNRSA9IC9eKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkoXFwuXFxkKyk/KHp8WystXVxcZFxcZDpcXGRcXGQpPyQvaTtcbnZhciBIT1NUTkFNRSA9IC9eW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XFwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSokL2k7XG52YXIgVVJJID0gL14oPzpbYS16XVthLXowLTkrXFwtLl0qOik/KD86XFwvP1xcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdfCVbMC05YS1mXXsyfSkqQCk/KD86XFxbKD86KD86KD86KD86WzAtOWEtZl17MSw0fTopezZ9fDo6KD86WzAtOWEtZl17MSw0fTopezV9fCg/OlswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDF9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7M318KD86KD86WzAtOWEtZl17MSw0fTopezAsMn1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXsyfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwzfVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fTp8KD86KD86WzAtOWEtZl17MSw0fTopezAsNH1bMC05YS1mXXsxLDR9KT86OikoPzpbMC05YS1mXXsxLDR9OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw1fVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw2fVswLTlhLWZdezEsNH0pPzo6KXxbVnZdWzAtOWEtZl0rXFwuW2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol0rKVxcXXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPyl8KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSp8XFwvKD86KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSsoPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSopKikoPzpcXD8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QFxcLz9dfCVbMC05YS1mXXsyfSkqKT8oPzpcXCMoPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QFxcLz9dfCVbMC05YS1mXXsyfSkqKT8kL2k7XG52YXIgVVVJRCA9IC9eKD86dXJuXFw6dXVpZFxcOik/WzAtOWEtZl17OH0tKD86WzAtOWEtZl17NH0tKXszfVswLTlhLWZdezEyfSQvaTtcbnZhciBKU09OX1BPSU5URVIgPSAvXig/OlxcLyg/OlteflxcL118fjB8fjEpKikqJHxeXFwjKD86XFwvKD86W2EtejAtOV9cXC1cXC4hJCYnKCkqKyw7Oj1AXXwlWzAtOWEtZl17Mn18fjB8fjEpKikqJC9pO1xudmFyIFJFTEFUSVZFX0pTT05fUE9JTlRFUiA9IC9eKD86MHxbMS05XVswLTldKikoPzpcXCN8KD86XFwvKD86W15+XFwvXXx+MHx+MSkqKSopJC87XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JtYXRzO1xuXG5mdW5jdGlvbiBmb3JtYXRzKG1vZGUpIHtcbiAgbW9kZSA9IG1vZGUgPT0gJ2Z1bGwnID8gJ2Z1bGwnIDogJ2Zhc3QnO1xuICB2YXIgZm9ybWF0RGVmcyA9IHV0aWwuY29weShmb3JtYXRzW21vZGVdKTtcbiAgZm9yICh2YXIgZk5hbWUgaW4gZm9ybWF0cy5jb21wYXJlKSB7XG4gICAgZm9ybWF0RGVmc1tmTmFtZV0gPSB7XG4gICAgICB2YWxpZGF0ZTogZm9ybWF0RGVmc1tmTmFtZV0sXG4gICAgICBjb21wYXJlOiBmb3JtYXRzLmNvbXBhcmVbZk5hbWVdXG4gICAgfTtcbiAgfVxuICByZXR1cm4gZm9ybWF0RGVmcztcbn1cblxuXG5mb3JtYXRzLmZhc3QgPSB7XG4gIC8vIGRhdGU6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgZGF0ZTogL15cXGRcXGRcXGRcXGQtWzAtMV1cXGQtWzAtM11cXGQkLyxcbiAgLy8gZGF0ZS10aW1lOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I3NlY3Rpb24tNS42XG4gIHRpbWU6IC9eWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGQoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQ6XFxkXFxkKT8kL2ksXG4gICdkYXRlLXRpbWUnOiAvXlxcZFxcZFxcZFxcZC1bMC0xXVxcZC1bMC0zXVxcZFt0XFxzXVswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkKD86XFwuXFxkKyk/KD86enxbKy1dXFxkXFxkOlxcZFxcZCkkL2ksXG4gIC8vIHVyaTogaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9pcy1teS1qc29uLXZhbGlkL2Jsb2IvbWFzdGVyL2Zvcm1hdHMuanNcbiAgdXJpOiAvXig/OlthLXpdW2EtejAtOSstLl0qKT8oPzpcXDp8XFwvKVxcLz9bXlxcc10qJC9pLFxuICAvLyBlbWFpbCAoc291cmNlcyBmcm9tIGpzZW4gdmFsaWRhdG9yKTpcbiAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDEzMjMvdXNpbmctYS1yZWd1bGFyLWV4cHJlc3Npb24tdG8tdmFsaWRhdGUtYW4tZW1haWwtYWRkcmVzcyNhbnN3ZXItODgyOTM2M1xuICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9mb3Jtcy5odG1sI3ZhbGlkLWUtbWFpbC1hZGRyZXNzIChzZWFyY2ggZm9yICd3aWxsZnVsIHZpb2xhdGlvbicpXG4gIGVtYWlsOiAvXlthLXowLTkuISMkJSYnKitcXC89P15fYHt8fX4tXStAW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XFwuW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KSokL2ksXG4gIGhvc3RuYW1lOiBIT1NUTkFNRSxcbiAgLy8gb3B0aW1pemVkIGh0dHBzOi8vd3d3LnNhZmFyaWJvb2tzb25saW5lLmNvbS9saWJyYXJ5L3ZpZXcvcmVndWxhci1leHByZXNzaW9ucy1jb29rYm9vay85NzgwNTk2ODAyODM3L2NoMDdzMTYuaHRtbFxuICBpcHY0OiAvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSQvLFxuICAvLyBvcHRpbWl6ZWQgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MzQ5Ny9yZWd1bGFyLWV4cHJlc3Npb24tdGhhdC1tYXRjaGVzLXZhbGlkLWlwdjYtYWRkcmVzc2VzXG4gIGlwdjY6IC9eXFxzKig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs3fSg/OlswLTlhLWZdezEsNH18OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXs2fSg/OjpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7NX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSwyfSl8Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7NH0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSwzfSl8KD86KD86OlswLTlhLWZdezEsNH0pPzooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXszfSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDR9KXwoPzooPzo6WzAtOWEtZl17MSw0fSl7MCwyfTooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXsyfSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDV9KXwoPzooPzo6WzAtOWEtZl17MSw0fSl7MCwzfTooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXsxfSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDZ9KXwoPzooPzo6WzAtOWEtZl17MSw0fSl7MCw0fTooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/OjooPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw3fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNX06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKSkoPzolLispP1xccyokL2ksXG4gIHJlZ2V4OiByZWdleCxcbiAgLy8gdXVpZDogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMlxuICB1dWlkOiBVVUlELFxuICAvLyBKU09OLXBvaW50ZXI6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxXG4gIC8vIHVyaSBmcmFnbWVudDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQVxuICAnanNvbi1wb2ludGVyJzogSlNPTl9QT0lOVEVSLFxuICAvLyByZWxhdGl2ZSBKU09OLXBvaW50ZXI6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWx1ZmYtcmVsYXRpdmUtanNvbi1wb2ludGVyLTAwXG4gICdyZWxhdGl2ZS1qc29uLXBvaW50ZXInOiBSRUxBVElWRV9KU09OX1BPSU5URVJcbn07XG5cblxuZm9ybWF0cy5mdWxsID0ge1xuICBkYXRlOiBkYXRlLFxuICB0aW1lOiB0aW1lLFxuICAnZGF0ZS10aW1lJzogZGF0ZV90aW1lLFxuICB1cmk6IHVyaSxcbiAgZW1haWw6IC9eW2EtejAtOSEjJCUmJyorXFwvPT9eX2B7fH1+LV0rKD86XFwuW2EtejAtOSEjJCUmJycqK1xcLz0/Xl9ge3x9fi1dKykqQCg/OlthLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT9cXC4pK1thLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT8kL2ksXG4gIGhvc3RuYW1lOiBob3N0bmFtZSxcbiAgaXB2NDogL14oPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykkLyxcbiAgaXB2NjogL15cXHMqKD86KD86KD86WzAtOWEtZl17MSw0fTopezd9KD86WzAtOWEtZl17MSw0fXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezZ9KD86OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXs1fSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDJ9KXw6KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXs0fSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDN9KXwoPzooPzo6WzAtOWEtZl17MSw0fSk/Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezN9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsNH0pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDJ9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezJ9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsNX0pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDN9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezF9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsNn0pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDR9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KD86Oig/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDd9KXwoPzooPzo6WzAtOWEtZl17MSw0fSl7MCw1fTooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpKSg/OiUuKyk/XFxzKiQvaSxcbiAgcmVnZXg6IHJlZ2V4LFxuICB1dWlkOiBVVUlELFxuICAnanNvbi1wb2ludGVyJzogSlNPTl9QT0lOVEVSLFxuICAncmVsYXRpdmUtanNvbi1wb2ludGVyJzogUkVMQVRJVkVfSlNPTl9QT0lOVEVSXG59O1xuXG5cbmZvcm1hdHMuY29tcGFyZSA9IHtcbiAgZGF0ZTogY29tcGFyZURhdGUsXG4gIHRpbWU6IGNvbXBhcmVUaW1lLFxuICAnZGF0ZS10aW1lJzogY29tcGFyZURhdGVUaW1lXG59O1xuXG5cbmZ1bmN0aW9uIGRhdGUoc3RyKSB7XG4gIC8vIGZ1bGwtZGF0ZSBmcm9tIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgdmFyIG1hdGNoZXMgPSBzdHIubWF0Y2goREFURSk7XG4gIGlmICghbWF0Y2hlcykgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBtb250aCA9ICttYXRjaGVzWzFdO1xuICB2YXIgZGF5ID0gK21hdGNoZXNbMl07XG4gIHJldHVybiBtb250aCA+PSAxICYmIG1vbnRoIDw9IDEyICYmIGRheSA+PSAxICYmIGRheSA8PSBEQVlTW21vbnRoXTtcbn1cblxuXG5mdW5jdGlvbiB0aW1lKHN0ciwgZnVsbCkge1xuICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChUSU1FKTtcbiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGhvdXIgPSBtYXRjaGVzWzFdO1xuICB2YXIgbWludXRlID0gbWF0Y2hlc1syXTtcbiAgdmFyIHNlY29uZCA9IG1hdGNoZXNbM107XG4gIHZhciB0aW1lWm9uZSA9IG1hdGNoZXNbNV07XG4gIHJldHVybiBob3VyIDw9IDIzICYmIG1pbnV0ZSA8PSA1OSAmJiBzZWNvbmQgPD0gNTkgJiYgKCFmdWxsIHx8IHRpbWVab25lKTtcbn1cblxuXG52YXIgREFURV9USU1FX1NFUEFSQVRPUiA9IC90fFxccy9pO1xuZnVuY3Rpb24gZGF0ZV90aW1lKHN0cikge1xuICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I3NlY3Rpb24tNS42XG4gIHZhciBkYXRlVGltZSA9IHN0ci5zcGxpdChEQVRFX1RJTUVfU0VQQVJBVE9SKTtcbiAgcmV0dXJuIGRhdGVUaW1lLmxlbmd0aCA9PSAyICYmIGRhdGUoZGF0ZVRpbWVbMF0pICYmIHRpbWUoZGF0ZVRpbWVbMV0sIHRydWUpO1xufVxuXG5cbmZ1bmN0aW9uIGhvc3RuYW1lKHN0cikge1xuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTAzNCNzZWN0aW9uLTMuNVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTEyMyNzZWN0aW9uLTJcbiAgcmV0dXJuIHN0ci5sZW5ndGggPD0gMjU1ICYmIEhPU1ROQU1FLnRlc3Qoc3RyKTtcbn1cblxuXG52YXIgTk9UX1VSSV9GUkFHTUVOVCA9IC9cXC98XFw6LztcbmZ1bmN0aW9uIHVyaShzdHIpIHtcbiAgLy8gaHR0cDovL2ptcndhcmUuY29tL2FydGljbGVzLzIwMDkvdXJpX3JlZ2V4cC9VUklfcmVnZXguaHRtbCArIG9wdGlvbmFsIHByb3RvY29sICsgcmVxdWlyZWQgXCIuXCJcbiAgcmV0dXJuIE5PVF9VUklfRlJBR01FTlQudGVzdChzdHIpICYmIFVSSS50ZXN0KHN0cik7XG59XG5cblxuZnVuY3Rpb24gcmVnZXgoc3RyKSB7XG4gIHRyeSB7XG4gICAgbmV3IFJlZ0V4cChzdHIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBjb21wYXJlRGF0ZShkMSwgZDIpIHtcbiAgaWYgKCEoZDEgJiYgZDIpKSByZXR1cm47XG4gIGlmIChkMSA+IGQyKSByZXR1cm4gMTtcbiAgaWYgKGQxIDwgZDIpIHJldHVybiAtMTtcbiAgaWYgKGQxID09PSBkMikgcmV0dXJuIDA7XG59XG5cblxuZnVuY3Rpb24gY29tcGFyZVRpbWUodDEsIHQyKSB7XG4gIGlmICghKHQxICYmIHQyKSkgcmV0dXJuO1xuICB0MSA9IHQxLm1hdGNoKFRJTUUpO1xuICB0MiA9IHQyLm1hdGNoKFRJTUUpO1xuICBpZiAoISh0MSAmJiB0MikpIHJldHVybjtcbiAgdDEgPSB0MVsxXSArIHQxWzJdICsgdDFbM10gKyAodDFbNF18fCcnKTtcbiAgdDIgPSB0MlsxXSArIHQyWzJdICsgdDJbM10gKyAodDJbNF18fCcnKTtcbiAgaWYgKHQxID4gdDIpIHJldHVybiAxO1xuICBpZiAodDEgPCB0MikgcmV0dXJuIC0xO1xuICBpZiAodDEgPT09IHQyKSByZXR1cm4gMDtcbn1cblxuXG5mdW5jdGlvbiBjb21wYXJlRGF0ZVRpbWUoZHQxLCBkdDIpIHtcbiAgaWYgKCEoZHQxICYmIGR0MikpIHJldHVybjtcbiAgZHQxID0gZHQxLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICBkdDIgPSBkdDIuc3BsaXQoREFURV9USU1FX1NFUEFSQVRPUik7XG4gIHZhciByZXMgPSBjb21wYXJlRGF0ZShkdDFbMF0sIGR0MlswXSk7XG4gIGlmIChyZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICByZXR1cm4gcmVzIHx8IGNvbXBhcmVUaW1lKGR0MVsxXSwgZHQyWzFdKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlc29sdmUgPSByZXF1aXJlKCcuL3Jlc29sdmUnKVxuICAsIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuICAsIHN0YWJsZVN0cmluZ2lmeSA9IHJlcXVpcmUoJ2pzb24tc3RhYmxlLXN0cmluZ2lmeScpXG4gICwgYXN5bmMgPSByZXF1aXJlKCcuLi9hc3luYycpO1xuXG52YXIgYmVhdXRpZnk7XG5cbmZ1bmN0aW9uIGxvYWRCZWF1dGlmeSgpe1xuICBpZiAoYmVhdXRpZnkgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBuYW1lID0gJ2pzLWJlYXV0aWZ5JztcbiAgICB0cnkgeyBiZWF1dGlmeSA9IHJlcXVpcmUobmFtZSkuanNfYmVhdXRpZnk7IH1cbiAgICBjYXRjaChlKSB7IGJlYXV0aWZ5ID0gZmFsc2U7IH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdGVHZW5lcmF0b3IgPSByZXF1aXJlKCcuLi9kb3Rqcy92YWxpZGF0ZScpO1xuXG4vKipcbiAqIEZ1bmN0aW9ucyBiZWxvdyBhcmUgdXNlZCBpbnNpZGUgY29tcGlsZWQgdmFsaWRhdGlvbnMgZnVuY3Rpb25cbiAqL1xuXG52YXIgY28gPSByZXF1aXJlKCdjbycpO1xudmFyIHVjczJsZW5ndGggPSB1dGlsLnVjczJsZW5ndGg7XG52YXIgZXF1YWwgPSByZXF1aXJlKCcuL2VxdWFsJyk7XG5cbi8vIHRoaXMgZXJyb3IgaXMgdGhyb3duIGJ5IGFzeW5jIHNjaGVtYXMgdG8gcmV0dXJuIHZhbGlkYXRpb24gZXJyb3JzIHZpYSBleGNlcHRpb25cbnZhciBWYWxpZGF0aW9uRXJyb3IgPSByZXF1aXJlKCcuL3ZhbGlkYXRpb25fZXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb21waWxlO1xuXG5cbi8qKlxuICogQ29tcGlsZXMgc2NoZW1hIHRvIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgb2JqZWN0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGlzIHNjaGVtYVxuICogQHBhcmFtICB7T2JqZWN0fSBsb2NhbFJlZnMgdGhlIGhhc2ggb2YgbG9jYWwgcmVmZXJlbmNlcyBpbnNpZGUgdGhlIHNjaGVtYSAoY3JlYXRlZCBieSByZXNvbHZlLmlkKSwgdXNlZCBmb3IgaW5saW5lIHJlc29sdXRpb25cbiAqIEBwYXJhbSAge1N0cmluZ30gYmFzZUlkIGJhc2UgSUQgZm9yIElEcyBpbiB0aGUgc2NoZW1hXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gdmFsaWRhdGlvbiBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBjb21waWxlKHNjaGVtYSwgcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSwgZXZpbDogdHJ1ZSAqL1xuICAvKiBlc2xpbnQgbm8tc2hhZG93OiAwICovXG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwgb3B0cyA9IHRoaXMuX29wdHNcbiAgICAsIHJlZlZhbCA9IFsgdW5kZWZpbmVkIF1cbiAgICAsIHJlZnMgPSB7fVxuICAgICwgcGF0dGVybnMgPSBbXVxuICAgICwgcGF0dGVybnNIYXNoID0ge31cbiAgICAsIGRlZmF1bHRzID0gW11cbiAgICAsIGRlZmF1bHRzSGFzaCA9IHt9XG4gICAgLCBjdXN0b21SdWxlcyA9IFtdXG4gICAgLCBrZWVwU291cmNlQ29kZSA9IG9wdHMuc291cmNlQ29kZSAhPT0gZmFsc2U7XG5cbiAgcm9vdCA9IHJvb3QgfHwgeyBzY2hlbWE6IHNjaGVtYSwgcmVmVmFsOiByZWZWYWwsIHJlZnM6IHJlZnMgfTtcblxuICB2YXIgYyA9IGNoZWNrQ29tcGlsaW5nLmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICB2YXIgY29tcGlsYXRpb24gPSB0aGlzLl9jb21waWxhdGlvbnNbYy5pbmRleF07XG4gIGlmIChjLmNvbXBpbGluZykgcmV0dXJuIChjb21waWxhdGlvbi5jYWxsVmFsaWRhdGUgPSBjYWxsVmFsaWRhdGUpO1xuXG4gIHZhciBmb3JtYXRzID0gdGhpcy5fZm9ybWF0cztcbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcblxuICB0cnkge1xuICAgIHZhciB2ID0gbG9jYWxDb21waWxlKHNjaGVtYSwgcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpO1xuICAgIGNvbXBpbGF0aW9uLnZhbGlkYXRlID0gdjtcbiAgICB2YXIgY3YgPSBjb21waWxhdGlvbi5jYWxsVmFsaWRhdGU7XG4gICAgaWYgKGN2KSB7XG4gICAgICBjdi5zY2hlbWEgPSB2LnNjaGVtYTtcbiAgICAgIGN2LmVycm9ycyA9IG51bGw7XG4gICAgICBjdi5yZWZzID0gdi5yZWZzO1xuICAgICAgY3YucmVmVmFsID0gdi5yZWZWYWw7XG4gICAgICBjdi5yb290ID0gdi5yb290O1xuICAgICAgY3YuJGFzeW5jID0gdi4kYXN5bmM7XG4gICAgICBpZiAoa2VlcFNvdXJjZUNvZGUpIGN2LnNvdXJjZUNvZGUgPSB2LnNvdXJjZUNvZGU7XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9IGZpbmFsbHkge1xuICAgIGVuZENvbXBpbGluZy5jYWxsKHRoaXMsIHNjaGVtYSwgcm9vdCwgYmFzZUlkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGxWYWxpZGF0ZSgpIHtcbiAgICB2YXIgdmFsaWRhdGUgPSBjb21waWxhdGlvbi52YWxpZGF0ZTtcbiAgICB2YXIgcmVzdWx0ID0gdmFsaWRhdGUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBjYWxsVmFsaWRhdGUuZXJyb3JzID0gdmFsaWRhdGUuZXJyb3JzO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBsb2NhbENvbXBpbGUoX3NjaGVtYSwgX3Jvb3QsIGxvY2FsUmVmcywgYmFzZUlkKSB7XG4gICAgdmFyIGlzUm9vdCA9ICFfcm9vdCB8fCAoX3Jvb3QgJiYgX3Jvb3Quc2NoZW1hID09IF9zY2hlbWEpO1xuICAgIGlmIChfcm9vdC5zY2hlbWEgIT0gcm9vdC5zY2hlbWEpXG4gICAgICByZXR1cm4gY29tcGlsZS5jYWxsKHNlbGYsIF9zY2hlbWEsIF9yb290LCBsb2NhbFJlZnMsIGJhc2VJZCk7XG5cbiAgICB2YXIgJGFzeW5jID0gX3NjaGVtYS4kYXN5bmMgPT09IHRydWU7XG4gICAgaWYgKCRhc3luYyAmJiAhb3B0cy50cmFuc3BpbGUpIGFzeW5jLnNldHVwKG9wdHMpO1xuXG4gICAgdmFyIHNvdXJjZUNvZGUgPSB2YWxpZGF0ZUdlbmVyYXRvcih7XG4gICAgICBpc1RvcDogdHJ1ZSxcbiAgICAgIHNjaGVtYTogX3NjaGVtYSxcbiAgICAgIGlzUm9vdDogaXNSb290LFxuICAgICAgYmFzZUlkOiBiYXNlSWQsXG4gICAgICByb290OiBfcm9vdCxcbiAgICAgIHNjaGVtYVBhdGg6ICcnLFxuICAgICAgZXJyU2NoZW1hUGF0aDogJyMnLFxuICAgICAgZXJyb3JQYXRoOiAnXCJcIicsXG4gICAgICBSVUxFUzogUlVMRVMsXG4gICAgICB2YWxpZGF0ZTogdmFsaWRhdGVHZW5lcmF0b3IsXG4gICAgICB1dGlsOiB1dGlsLFxuICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgIHJlc29sdmVSZWY6IHJlc29sdmVSZWYsXG4gICAgICB1c2VQYXR0ZXJuOiB1c2VQYXR0ZXJuLFxuICAgICAgdXNlRGVmYXVsdDogdXNlRGVmYXVsdCxcbiAgICAgIHVzZUN1c3RvbVJ1bGU6IHVzZUN1c3RvbVJ1bGUsXG4gICAgICBvcHRzOiBvcHRzLFxuICAgICAgZm9ybWF0czogZm9ybWF0cyxcbiAgICAgIHNlbGY6IHNlbGZcbiAgICB9KTtcblxuICAgIHNvdXJjZUNvZGUgPSB2YXJzKHJlZlZhbCwgcmVmVmFsQ29kZSkgKyB2YXJzKHBhdHRlcm5zLCBwYXR0ZXJuQ29kZSlcbiAgICAgICAgICAgICAgICAgICArIHZhcnMoZGVmYXVsdHMsIGRlZmF1bHRDb2RlKSArIHZhcnMoY3VzdG9tUnVsZXMsIGN1c3RvbVJ1bGVDb2RlKVxuICAgICAgICAgICAgICAgICAgICsgc291cmNlQ29kZTtcblxuICAgIGlmIChvcHRzLmJlYXV0aWZ5KSB7XG4gICAgICBsb2FkQmVhdXRpZnkoKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoYmVhdXRpZnkpIHNvdXJjZUNvZGUgPSBiZWF1dGlmeShzb3VyY2VDb2RlLCBvcHRzLmJlYXV0aWZ5KTtcbiAgICAgIGVsc2UgY29uc29sZS5lcnJvcignXCJucG0gaW5zdGFsbCBqcy1iZWF1dGlmeVwiIHRvIHVzZSBiZWF1dGlmeSBvcHRpb24nKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ1xcblxcblxcbiAqKiogXFxuJywgc291cmNlQ29kZSk7XG4gICAgdmFyIHZhbGlkYXRlLCB2YWxpZGF0ZUNvZGVcbiAgICAgICwgdHJhbnNwaWxlID0gb3B0cy5fdHJhbnNwaWxlRnVuYztcbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGVDb2RlID0gJGFzeW5jICYmIHRyYW5zcGlsZVxuICAgICAgICAgICAgICAgICAgICAgID8gdHJhbnNwaWxlKHNvdXJjZUNvZGUpXG4gICAgICAgICAgICAgICAgICAgICAgOiBzb3VyY2VDb2RlO1xuXG4gICAgICB2YXIgbWFrZVZhbGlkYXRlID0gbmV3IEZ1bmN0aW9uKFxuICAgICAgICAnc2VsZicsXG4gICAgICAgICdSVUxFUycsXG4gICAgICAgICdmb3JtYXRzJyxcbiAgICAgICAgJ3Jvb3QnLFxuICAgICAgICAncmVmVmFsJyxcbiAgICAgICAgJ2RlZmF1bHRzJyxcbiAgICAgICAgJ2N1c3RvbVJ1bGVzJyxcbiAgICAgICAgJ2NvJyxcbiAgICAgICAgJ2VxdWFsJyxcbiAgICAgICAgJ3VjczJsZW5ndGgnLFxuICAgICAgICAnVmFsaWRhdGlvbkVycm9yJyxcbiAgICAgICAgdmFsaWRhdGVDb2RlXG4gICAgICApO1xuXG4gICAgICB2YWxpZGF0ZSA9IG1ha2VWYWxpZGF0ZShcbiAgICAgICAgc2VsZixcbiAgICAgICAgUlVMRVMsXG4gICAgICAgIGZvcm1hdHMsXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHJlZlZhbCxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIGN1c3RvbVJ1bGVzLFxuICAgICAgICBjbyxcbiAgICAgICAgZXF1YWwsXG4gICAgICAgIHVjczJsZW5ndGgsXG4gICAgICAgIFZhbGlkYXRpb25FcnJvclxuICAgICAgKTtcblxuICAgICAgcmVmVmFsWzBdID0gdmFsaWRhdGU7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjb21waWxpbmcgc2NoZW1hLCBmdW5jdGlvbiBjb2RlOicsIHZhbGlkYXRlQ29kZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhbGlkYXRlLnNjaGVtYSA9IF9zY2hlbWE7XG4gICAgdmFsaWRhdGUuZXJyb3JzID0gbnVsbDtcbiAgICB2YWxpZGF0ZS5yZWZzID0gcmVmcztcbiAgICB2YWxpZGF0ZS5yZWZWYWwgPSByZWZWYWw7XG4gICAgdmFsaWRhdGUucm9vdCA9IGlzUm9vdCA/IHZhbGlkYXRlIDogX3Jvb3Q7XG4gICAgaWYgKCRhc3luYykgdmFsaWRhdGUuJGFzeW5jID0gdHJ1ZTtcbiAgICBpZiAoa2VlcFNvdXJjZUNvZGUpIHZhbGlkYXRlLnNvdXJjZUNvZGUgPSBzb3VyY2VDb2RlO1xuICAgIGlmIChvcHRzLnNvdXJjZUNvZGUgPT09IHRydWUpIHtcbiAgICAgIHZhbGlkYXRlLnNvdXJjZSA9IHtcbiAgICAgICAgcGF0dGVybnM6IHBhdHRlcm5zLFxuICAgICAgICBkZWZhdWx0czogZGVmYXVsdHNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZVJlZihiYXNlSWQsIHJlZiwgaXNSb290KSB7XG4gICAgcmVmID0gcmVzb2x2ZS51cmwoYmFzZUlkLCByZWYpO1xuICAgIHZhciByZWZJbmRleCA9IHJlZnNbcmVmXTtcbiAgICB2YXIgX3JlZlZhbCwgcmVmQ29kZTtcbiAgICBpZiAocmVmSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgX3JlZlZhbCA9IHJlZlZhbFtyZWZJbmRleF07XG4gICAgICByZWZDb2RlID0gJ3JlZlZhbFsnICsgcmVmSW5kZXggKyAnXSc7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRSZWYoX3JlZlZhbCwgcmVmQ29kZSk7XG4gICAgfVxuICAgIGlmICghaXNSb290ICYmIHJvb3QucmVmcykge1xuICAgICAgdmFyIHJvb3RSZWZJZCA9IHJvb3QucmVmc1tyZWZdO1xuICAgICAgaWYgKHJvb3RSZWZJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIF9yZWZWYWwgPSByb290LnJlZlZhbFtyb290UmVmSWRdO1xuICAgICAgICByZWZDb2RlID0gYWRkTG9jYWxSZWYocmVmLCBfcmVmVmFsKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkUmVmKF9yZWZWYWwsIHJlZkNvZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlZkNvZGUgPSBhZGRMb2NhbFJlZihyZWYpO1xuICAgIHZhciB2ID0gcmVzb2x2ZS5jYWxsKHNlbGYsIGxvY2FsQ29tcGlsZSwgcm9vdCwgcmVmKTtcbiAgICBpZiAoIXYpIHtcbiAgICAgIHZhciBsb2NhbFNjaGVtYSA9IGxvY2FsUmVmcyAmJiBsb2NhbFJlZnNbcmVmXTtcbiAgICAgIGlmIChsb2NhbFNjaGVtYSkge1xuICAgICAgICB2ID0gcmVzb2x2ZS5pbmxpbmVSZWYobG9jYWxTY2hlbWEsIG9wdHMuaW5saW5lUmVmcylcbiAgICAgICAgICAgID8gbG9jYWxTY2hlbWFcbiAgICAgICAgICAgIDogY29tcGlsZS5jYWxsKHNlbGYsIGxvY2FsU2NoZW1hLCByb290LCBsb2NhbFJlZnMsIGJhc2VJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHYpIHtcbiAgICAgIHJlcGxhY2VMb2NhbFJlZihyZWYsIHYpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkUmVmKHYsIHJlZkNvZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExvY2FsUmVmKHJlZiwgdikge1xuICAgIHZhciByZWZJZCA9IHJlZlZhbC5sZW5ndGg7XG4gICAgcmVmVmFsW3JlZklkXSA9IHY7XG4gICAgcmVmc1tyZWZdID0gcmVmSWQ7XG4gICAgcmV0dXJuICdyZWZWYWwnICsgcmVmSWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlTG9jYWxSZWYocmVmLCB2KSB7XG4gICAgdmFyIHJlZklkID0gcmVmc1tyZWZdO1xuICAgIHJlZlZhbFtyZWZJZF0gPSB2O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZWRSZWYocmVmVmFsLCBjb2RlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiByZWZWYWwgPT0gJ29iamVjdCdcbiAgICAgICAgICAgID8geyBjb2RlOiBjb2RlLCBzY2hlbWE6IHJlZlZhbCwgaW5saW5lOiB0cnVlIH1cbiAgICAgICAgICAgIDogeyBjb2RlOiBjb2RlLCAkYXN5bmM6IHJlZlZhbCAmJiByZWZWYWwuJGFzeW5jIH07XG4gIH1cblxuICBmdW5jdGlvbiB1c2VQYXR0ZXJuKHJlZ2V4U3RyKSB7XG4gICAgdmFyIGluZGV4ID0gcGF0dGVybnNIYXNoW3JlZ2V4U3RyXTtcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZXggPSBwYXR0ZXJuc0hhc2hbcmVnZXhTdHJdID0gcGF0dGVybnMubGVuZ3RoO1xuICAgICAgcGF0dGVybnNbaW5kZXhdID0gcmVnZXhTdHI7XG4gICAgfVxuICAgIHJldHVybiAncGF0dGVybicgKyBpbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZURlZmF1bHQodmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gJycgKyB2YWx1ZTtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB1dGlsLnRvUXVvdGVkU3RyaW5nKHZhbHVlKTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgICAgICAgdmFyIHZhbHVlU3RyID0gc3RhYmxlU3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgdmFyIGluZGV4ID0gZGVmYXVsdHNIYXNoW3ZhbHVlU3RyXTtcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbmRleCA9IGRlZmF1bHRzSGFzaFt2YWx1ZVN0cl0gPSBkZWZhdWx0cy5sZW5ndGg7XG4gICAgICAgICAgZGVmYXVsdHNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdkZWZhdWx0JyArIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZUN1c3RvbVJ1bGUocnVsZSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KSB7XG4gICAgdmFyIHZhbGlkYXRlU2NoZW1hID0gcnVsZS5kZWZpbml0aW9uLnZhbGlkYXRlU2NoZW1hO1xuICAgIGlmICh2YWxpZGF0ZVNjaGVtYSAmJiBzZWxmLl9vcHRzLnZhbGlkYXRlU2NoZW1hICE9PSBmYWxzZSkge1xuICAgICAgdmFyIHZhbGlkID0gdmFsaWRhdGVTY2hlbWEoc2NoZW1hKTtcbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSAna2V5d29yZCBzY2hlbWEgaXMgaW52YWxpZDogJyArIHNlbGYuZXJyb3JzVGV4dCh2YWxpZGF0ZVNjaGVtYS5lcnJvcnMpO1xuICAgICAgICBpZiAoc2VsZi5fb3B0cy52YWxpZGF0ZVNjaGVtYSA9PSAnbG9nJykgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNvbXBpbGUgPSBydWxlLmRlZmluaXRpb24uY29tcGlsZVxuICAgICAgLCBpbmxpbmUgPSBydWxlLmRlZmluaXRpb24uaW5saW5lXG4gICAgICAsIG1hY3JvID0gcnVsZS5kZWZpbml0aW9uLm1hY3JvO1xuXG4gICAgdmFyIHZhbGlkYXRlO1xuICAgIGlmIChjb21waWxlKSB7XG4gICAgICB2YWxpZGF0ZSA9IGNvbXBpbGUuY2FsbChzZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgIH0gZWxzZSBpZiAobWFjcm8pIHtcbiAgICAgIHZhbGlkYXRlID0gbWFjcm8uY2FsbChzZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgICAgaWYgKG9wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKSBzZWxmLnZhbGlkYXRlU2NoZW1hKHZhbGlkYXRlLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGlubGluZSkge1xuICAgICAgdmFsaWRhdGUgPSBpbmxpbmUuY2FsbChzZWxmLCBpdCwgcnVsZS5rZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlID0gcnVsZS5kZWZpbml0aW9uLnZhbGlkYXRlO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IGN1c3RvbVJ1bGVzLmxlbmd0aDtcbiAgICBjdXN0b21SdWxlc1tpbmRleF0gPSB2YWxpZGF0ZTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb2RlOiAnY3VzdG9tUnVsZScgKyBpbmRleCxcbiAgICAgIHZhbGlkYXRlOiB2YWxpZGF0ZVxuICAgIH07XG4gIH1cbn1cblxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgc2NoZW1hIGlzIGN1cnJlbnRseSBjb21waWxlZFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSB0byBjb21waWxlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3RcbiAqIEBwYXJhbSAge1N0cmluZ30gYmFzZUlkIGJhc2Ugc2NoZW1hIElEXG4gKiBAcmV0dXJuIHtPYmplY3R9IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgXCJpbmRleFwiIChjb21waWxhdGlvbiBpbmRleCkgYW5kIFwiY29tcGlsaW5nXCIgKGJvb2xlYW4pXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ29tcGlsaW5nKHNjaGVtYSwgcm9vdCwgYmFzZUlkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIGluZGV4ID0gY29tcEluZGV4LmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICBpZiAoaW5kZXggPj0gMCkgcmV0dXJuIHsgaW5kZXg6IGluZGV4LCBjb21waWxpbmc6IHRydWUgfTtcbiAgaW5kZXggPSB0aGlzLl9jb21waWxhdGlvbnMubGVuZ3RoO1xuICB0aGlzLl9jb21waWxhdGlvbnNbaW5kZXhdID0ge1xuICAgIHNjaGVtYTogc2NoZW1hLFxuICAgIHJvb3Q6IHJvb3QsXG4gICAgYmFzZUlkOiBiYXNlSWRcbiAgfTtcbiAgcmV0dXJuIHsgaW5kZXg6IGluZGV4LCBjb21waWxpbmc6IGZhbHNlIH07XG59XG5cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBzY2hlbWEgZnJvbSB0aGUgY3VycmVudGx5IGNvbXBpbGVkIGxpc3RcbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgdG8gY29tcGlsZVxuICogQHBhcmFtICB7T2JqZWN0fSByb290IHJvb3Qgb2JqZWN0XG4gKiBAcGFyYW0gIHtTdHJpbmd9IGJhc2VJZCBiYXNlIHNjaGVtYSBJRFxuICovXG5mdW5jdGlvbiBlbmRDb21waWxpbmcoc2NoZW1hLCByb290LCBiYXNlSWQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgaSA9IGNvbXBJbmRleC5jYWxsKHRoaXMsIHNjaGVtYSwgcm9vdCwgYmFzZUlkKTtcbiAgaWYgKGkgPj0gMCkgdGhpcy5fY29tcGlsYXRpb25zLnNwbGljZShpLCAxKTtcbn1cblxuXG4vKipcbiAqIEluZGV4IG9mIHNjaGVtYSBjb21waWxhdGlvbiBpbiB0aGUgY3VycmVudGx5IGNvbXBpbGVkIGxpc3RcbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgdG8gY29tcGlsZVxuICogQHBhcmFtICB7T2JqZWN0fSByb290IHJvb3Qgb2JqZWN0XG4gKiBAcGFyYW0gIHtTdHJpbmd9IGJhc2VJZCBiYXNlIHNjaGVtYSBJRFxuICogQHJldHVybiB7SW50ZWdlcn0gY29tcGlsYXRpb24gaW5kZXhcbiAqL1xuZnVuY3Rpb24gY29tcEluZGV4KHNjaGVtYSwgcm9vdCwgYmFzZUlkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgZm9yICh2YXIgaT0wOyBpPHRoaXMuX2NvbXBpbGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjID0gdGhpcy5fY29tcGlsYXRpb25zW2ldO1xuICAgIGlmIChjLnNjaGVtYSA9PSBzY2hlbWEgJiYgYy5yb290ID09IHJvb3QgJiYgYy5iYXNlSWQgPT0gYmFzZUlkKSByZXR1cm4gaTtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cblxuZnVuY3Rpb24gcGF0dGVybkNvZGUoaSwgcGF0dGVybnMpIHtcbiAgcmV0dXJuICd2YXIgcGF0dGVybicgKyBpICsgJyA9IG5ldyBSZWdFeHAoJyArIHV0aWwudG9RdW90ZWRTdHJpbmcocGF0dGVybnNbaV0pICsgJyk7Jztcbn1cblxuXG5mdW5jdGlvbiBkZWZhdWx0Q29kZShpKSB7XG4gIHJldHVybiAndmFyIGRlZmF1bHQnICsgaSArICcgPSBkZWZhdWx0c1snICsgaSArICddOyc7XG59XG5cblxuZnVuY3Rpb24gcmVmVmFsQ29kZShpLCByZWZWYWwpIHtcbiAgcmV0dXJuIHJlZlZhbFtpXSA/ICd2YXIgcmVmVmFsJyArIGkgKyAnID0gcmVmVmFsWycgKyBpICsgJ107JyA6ICcnO1xufVxuXG5cbmZ1bmN0aW9uIGN1c3RvbVJ1bGVDb2RlKGkpIHtcbiAgcmV0dXJuICd2YXIgY3VzdG9tUnVsZScgKyBpICsgJyA9IGN1c3RvbVJ1bGVzWycgKyBpICsgJ107Jztcbn1cblxuXG5mdW5jdGlvbiB2YXJzKGFyciwgc3RhdGVtZW50KSB7XG4gIGlmICghYXJyLmxlbmd0aCkgcmV0dXJuICcnO1xuICB2YXIgY29kZSA9ICcnO1xuICBmb3IgKHZhciBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKVxuICAgIGNvZGUgKz0gc3RhdGVtZW50KGksIGFycik7XG4gIHJldHVybiBjb2RlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXJsID0gcmVxdWlyZSgndXJsJylcbiAgLCBlcXVhbCA9IHJlcXVpcmUoJy4vZXF1YWwnKVxuICAsIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuICAsIFNjaGVtYU9iamVjdCA9IHJlcXVpcmUoJy4vc2NoZW1hX29iaicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlc29sdmU7XG5cbnJlc29sdmUubm9ybWFsaXplSWQgPSBub3JtYWxpemVJZDtcbnJlc29sdmUuZnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbnJlc29sdmUudXJsID0gcmVzb2x2ZVVybDtcbnJlc29sdmUuaWRzID0gcmVzb2x2ZUlkcztcbnJlc29sdmUuaW5saW5lUmVmID0gaW5saW5lUmVmO1xucmVzb2x2ZS5zY2hlbWEgPSByZXNvbHZlU2NoZW1hO1xuXG4vKipcbiAqIFtyZXNvbHZlIGFuZCBjb21waWxlIHRoZSByZWZlcmVuY2VzICgkcmVmKV1cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY29tcGlsZSByZWZlcmVuY2UgdG8gc2NoZW1hIGNvbXBpbGF0aW9uIGZ1bmNpdG9uIChsb2NhbENvbXBpbGUpXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgb2JqZWN0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbiAqIEBwYXJhbSAge1N0cmluZ30gcmVmIHJlZmVyZW5jZSB0byByZXNvbHZlXG4gKiBAcmV0dXJuIHtPYmplY3R8RnVuY3Rpb259IHNjaGVtYSBvYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZShjb21waWxlLCByb290LCByZWYpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcmVmVmFsID0gdGhpcy5fcmVmc1tyZWZdO1xuICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykge1xuICAgIGlmICh0aGlzLl9yZWZzW3JlZlZhbF0pIHJlZlZhbCA9IHRoaXMuX3JlZnNbcmVmVmFsXTtcbiAgICBlbHNlIHJldHVybiByZXNvbHZlLmNhbGwodGhpcywgY29tcGlsZSwgcm9vdCwgcmVmVmFsKTtcbiAgfVxuXG4gIHJlZlZhbCA9IHJlZlZhbCB8fCB0aGlzLl9zY2hlbWFzW3JlZl07XG4gIGlmIChyZWZWYWwgaW5zdGFuY2VvZiBTY2hlbWFPYmplY3QpIHtcbiAgICByZXR1cm4gaW5saW5lUmVmKHJlZlZhbC5zY2hlbWEsIHRoaXMuX29wdHMuaW5saW5lUmVmcylcbiAgICAgICAgICAgID8gcmVmVmFsLnNjaGVtYVxuICAgICAgICAgICAgOiByZWZWYWwudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZShyZWZWYWwpO1xuICB9XG5cbiAgdmFyIHJlcyA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCByZWYpO1xuICB2YXIgc2NoZW1hLCB2LCBiYXNlSWQ7XG4gIGlmIChyZXMpIHtcbiAgICBzY2hlbWEgPSByZXMuc2NoZW1hO1xuICAgIHJvb3QgPSByZXMucm9vdDtcbiAgICBiYXNlSWQgPSByZXMuYmFzZUlkO1xuICB9XG5cbiAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFNjaGVtYU9iamVjdCkge1xuICAgIHYgPSBzY2hlbWEudmFsaWRhdGUgfHwgY29tcGlsZS5jYWxsKHRoaXMsIHNjaGVtYS5zY2hlbWEsIHJvb3QsIHVuZGVmaW5lZCwgYmFzZUlkKTtcbiAgfSBlbHNlIGlmIChzY2hlbWEpIHtcbiAgICB2ID0gaW5saW5lUmVmKHNjaGVtYSwgdGhpcy5fb3B0cy5pbmxpbmVSZWZzKVxuICAgICAgICA/IHNjaGVtYVxuICAgICAgICA6IGNvbXBpbGUuY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIHVuZGVmaW5lZCwgYmFzZUlkKTtcbiAgfVxuXG4gIHJldHVybiB2O1xufVxuXG5cbi8qKlxuICogUmVzb2x2ZSBzY2hlbWEsIGl0cyByb290IGFuZCBiYXNlSWRcbiAqIEB0aGlzIEFqdlxuICogQHBhcmFtICB7T2JqZWN0fSByb290IHJvb3Qgb2JqZWN0IHdpdGggcHJvcGVydGllcyBzY2hlbWEsIHJlZlZhbCwgcmVmc1xuICogQHBhcmFtICB7U3RyaW5nfSByZWYgIHJlZmVyZW5jZSB0byByZXNvbHZlXG4gKiBAcmV0dXJuIHtPYmplY3R9IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgc2NoZW1hLCByb290LCBiYXNlSWRcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShyb290LCByZWYpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcCA9IHVybC5wYXJzZShyZWYsIGZhbHNlLCB0cnVlKVxuICAgICwgcmVmUGF0aCA9IF9nZXRGdWxsUGF0aChwKVxuICAgICwgYmFzZUlkID0gZ2V0RnVsbFBhdGgocm9vdC5zY2hlbWEuaWQpO1xuICBpZiAocmVmUGF0aCAhPT0gYmFzZUlkKSB7XG4gICAgdmFyIGlkID0gbm9ybWFsaXplSWQocmVmUGF0aCk7XG4gICAgdmFyIHJlZlZhbCA9IHRoaXMuX3JlZnNbaWRdO1xuICAgIGlmICh0eXBlb2YgcmVmVmFsID09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZVJlY3Vyc2l2ZS5jYWxsKHRoaXMsIHJvb3QsIHJlZlZhbCwgcCk7XG4gICAgfSBlbHNlIGlmIChyZWZWYWwgaW5zdGFuY2VvZiBTY2hlbWFPYmplY3QpIHtcbiAgICAgIGlmICghcmVmVmFsLnZhbGlkYXRlKSB0aGlzLl9jb21waWxlKHJlZlZhbCk7XG4gICAgICByb290ID0gcmVmVmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWZWYWwgPSB0aGlzLl9zY2hlbWFzW2lkXTtcbiAgICAgIGlmIChyZWZWYWwgaW5zdGFuY2VvZiBTY2hlbWFPYmplY3QpIHtcbiAgICAgICAgaWYgKCFyZWZWYWwudmFsaWRhdGUpIHRoaXMuX2NvbXBpbGUocmVmVmFsKTtcbiAgICAgICAgaWYgKGlkID09IG5vcm1hbGl6ZUlkKHJlZikpXG4gICAgICAgICAgcmV0dXJuIHsgc2NoZW1hOiByZWZWYWwsIHJvb3Q6IHJvb3QsIGJhc2VJZDogYmFzZUlkIH07XG4gICAgICAgIHJvb3QgPSByZWZWYWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghcm9vdC5zY2hlbWEpIHJldHVybjtcbiAgICBiYXNlSWQgPSBnZXRGdWxsUGF0aChyb290LnNjaGVtYS5pZCk7XG4gIH1cbiAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcCwgYmFzZUlkLCByb290LnNjaGVtYSwgcm9vdCk7XG59XG5cblxuLyogQHRoaXMgQWp2ICovXG5mdW5jdGlvbiByZXNvbHZlUmVjdXJzaXZlKHJvb3QsIHJlZiwgcGFyc2VkUmVmKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIHJlcyA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCByZWYpO1xuICBpZiAocmVzKSB7XG4gICAgdmFyIHNjaGVtYSA9IHJlcy5zY2hlbWE7XG4gICAgdmFyIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgcm9vdCA9IHJlcy5yb290O1xuICAgIGlmIChzY2hlbWEuaWQpIGJhc2VJZCA9IHJlc29sdmVVcmwoYmFzZUlkLCBzY2hlbWEuaWQpO1xuICAgIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHBhcnNlZFJlZiwgYmFzZUlkLCBzY2hlbWEsIHJvb3QpO1xuICB9XG59XG5cblxudmFyIFBSRVZFTlRfU0NPUEVfQ0hBTkdFID0gdXRpbC50b0hhc2goWydwcm9wZXJ0aWVzJywgJ3BhdHRlcm5Qcm9wZXJ0aWVzJywgJ2VudW0nLCAnZGVwZW5kZW5jaWVzJywgJ2RlZmluaXRpb25zJ10pO1xuLyogQHRoaXMgQWp2ICovXG5mdW5jdGlvbiBnZXRKc29uUG9pbnRlcihwYXJzZWRSZWYsIGJhc2VJZCwgc2NoZW1hLCByb290KSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgcGFyc2VkUmVmLmhhc2ggPSBwYXJzZWRSZWYuaGFzaCB8fCAnJztcbiAgaWYgKHBhcnNlZFJlZi5oYXNoLnNsaWNlKDAsMikgIT0gJyMvJykgcmV0dXJuO1xuICB2YXIgcGFydHMgPSBwYXJzZWRSZWYuaGFzaC5zcGxpdCgnLycpO1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGFydCA9IHBhcnRzW2ldO1xuICAgIGlmIChwYXJ0KSB7XG4gICAgICBwYXJ0ID0gdXRpbC51bmVzY2FwZUZyYWdtZW50KHBhcnQpO1xuICAgICAgc2NoZW1hID0gc2NoZW1hW3BhcnRdO1xuICAgICAgaWYgKCFzY2hlbWEpIGJyZWFrO1xuICAgICAgaWYgKHNjaGVtYS5pZCAmJiAhUFJFVkVOVF9TQ09QRV9DSEFOR0VbcGFydF0pIGJhc2VJZCA9IHJlc29sdmVVcmwoYmFzZUlkLCBzY2hlbWEuaWQpO1xuICAgICAgaWYgKHNjaGVtYS4kcmVmKSB7XG4gICAgICAgIHZhciAkcmVmID0gcmVzb2x2ZVVybChiYXNlSWQsIHNjaGVtYS4kcmVmKTtcbiAgICAgICAgdmFyIHJlcyA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCAkcmVmKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHNjaGVtYSA9IHJlcy5zY2hlbWE7XG4gICAgICAgICAgcm9vdCA9IHJlcy5yb290O1xuICAgICAgICAgIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHNjaGVtYSAmJiBzY2hlbWEgIT0gcm9vdC5zY2hlbWEpXG4gICAgcmV0dXJuIHsgc2NoZW1hOiBzY2hlbWEsIHJvb3Q6IHJvb3QsIGJhc2VJZDogYmFzZUlkIH07XG59XG5cblxudmFyIFNJTVBMRV9JTkxJTkVEID0gdXRpbC50b0hhc2goW1xuICAndHlwZScsICdmb3JtYXQnLCAncGF0dGVybicsXG4gICdtYXhMZW5ndGgnLCAnbWluTGVuZ3RoJyxcbiAgJ21heFByb3BlcnRpZXMnLCAnbWluUHJvcGVydGllcycsXG4gICdtYXhJdGVtcycsICdtaW5JdGVtcycsXG4gICdtYXhpbXVtJywgJ21pbmltdW0nLFxuICAndW5pcXVlSXRlbXMnLCAnbXVsdGlwbGVPZicsXG4gICdyZXF1aXJlZCcsICdlbnVtJ1xuXSk7XG5mdW5jdGlvbiBpbmxpbmVSZWYoc2NoZW1hLCBsaW1pdCkge1xuICBpZiAobGltaXQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gIGlmIChsaW1pdCA9PT0gdW5kZWZpbmVkIHx8IGxpbWl0ID09PSB0cnVlKSByZXR1cm4gY2hlY2tOb1JlZihzY2hlbWEpO1xuICBlbHNlIGlmIChsaW1pdCkgcmV0dXJuIGNvdW50S2V5cyhzY2hlbWEpIDw9IGxpbWl0O1xufVxuXG5cbmZ1bmN0aW9uIGNoZWNrTm9SZWYoc2NoZW1hKSB7XG4gIHZhciBpdGVtO1xuICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgZm9yICh2YXIgaT0wOyBpPHNjaGVtYS5sZW5ndGg7IGkrKykge1xuICAgICAgaXRlbSA9IHNjaGVtYVtpXTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0JyAmJiAhY2hlY2tOb1JlZihpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICBpZiAoa2V5ID09ICckcmVmJykgcmV0dXJuIGZhbHNlO1xuICAgICAgaXRlbSA9IHNjaGVtYVtrZXldO1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09ICdvYmplY3QnICYmICFjaGVja05vUmVmKGl0ZW0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5cbmZ1bmN0aW9uIGNvdW50S2V5cyhzY2hlbWEpIHtcbiAgdmFyIGNvdW50ID0gMCwgaXRlbTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW0gPSBzY2hlbWFbaV07XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ29iamVjdCcpIGNvdW50ICs9IGNvdW50S2V5cyhpdGVtKTtcbiAgICAgIGlmIChjb3VudCA9PSBJbmZpbml0eSkgcmV0dXJuIEluZmluaXR5O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICBpZiAoa2V5ID09ICckcmVmJykgcmV0dXJuIEluZmluaXR5O1xuICAgICAgaWYgKFNJTVBMRV9JTkxJTkVEW2tleV0pIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0gPSBzY2hlbWFba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09ICdvYmplY3QnKSBjb3VudCArPSBjb3VudEtleXMoaXRlbSkgKyAxO1xuICAgICAgICBpZiAoY291bnQgPT0gSW5maW5pdHkpIHJldHVybiBJbmZpbml0eTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvdW50O1xufVxuXG5cbmZ1bmN0aW9uIGdldEZ1bGxQYXRoKGlkLCBub3JtYWxpemUpIHtcbiAgaWYgKG5vcm1hbGl6ZSAhPT0gZmFsc2UpIGlkID0gbm9ybWFsaXplSWQoaWQpO1xuICB2YXIgcCA9IHVybC5wYXJzZShpZCwgZmFsc2UsIHRydWUpO1xuICByZXR1cm4gX2dldEZ1bGxQYXRoKHApO1xufVxuXG5cbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChwKSB7XG4gIHZhciBwcm90b2NvbFNlcGFyYXRvciA9IHAucHJvdG9jb2wgfHwgcC5ocmVmLnNsaWNlKDAsMikgPT0gJy8vJyA/ICcvLycgOiAnJztcbiAgcmV0dXJuIChwLnByb3RvY29sfHwnJykgKyBwcm90b2NvbFNlcGFyYXRvciArIChwLmhvc3R8fCcnKSArIChwLnBhdGh8fCcnKSAgKyAnIyc7XG59XG5cblxudmFyIFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gIHJldHVybiBpZCA/IGlkLnJlcGxhY2UoVFJBSUxJTkdfU0xBU0hfSEFTSCwgJycpIDogJyc7XG59XG5cblxuZnVuY3Rpb24gcmVzb2x2ZVVybChiYXNlSWQsIGlkKSB7XG4gIGlkID0gbm9ybWFsaXplSWQoaWQpO1xuICByZXR1cm4gdXJsLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5cblxuLyogQHRoaXMgQWp2ICovXG5mdW5jdGlvbiByZXNvbHZlSWRzKHNjaGVtYSkge1xuICAvKiBlc2xpbnQgbm8tc2hhZG93OiAwICovXG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIGlkID0gbm9ybWFsaXplSWQoc2NoZW1hLmlkKTtcbiAgdmFyIGxvY2FsUmVmcyA9IHt9O1xuICBfcmVzb2x2ZUlkcy5jYWxsKHRoaXMsIHNjaGVtYSwgZ2V0RnVsbFBhdGgoaWQsIGZhbHNlKSwgaWQpO1xuICByZXR1cm4gbG9jYWxSZWZzO1xuXG4gIC8qIEB0aGlzIEFqdiAqL1xuICBmdW5jdGlvbiBfcmVzb2x2ZUlkcyhzY2hlbWEsIGZ1bGxQYXRoLCBiYXNlSWQpIHtcbiAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgICAgZm9yICh2YXIgaT0wOyBpPHNjaGVtYS5sZW5ndGg7IGkrKylcbiAgICAgICAgX3Jlc29sdmVJZHMuY2FsbCh0aGlzLCBzY2hlbWFbaV0sIGZ1bGxQYXRoKycvJytpLCBiYXNlSWQpO1xuICAgIH0gZWxzZSBpZiAoc2NoZW1hICYmIHR5cGVvZiBzY2hlbWEgPT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmlkID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciBpZCA9IGJhc2VJZCA9IGJhc2VJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHVybC5yZXNvbHZlKGJhc2VJZCwgc2NoZW1hLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNjaGVtYS5pZDtcbiAgICAgICAgaWQgPSBub3JtYWxpemVJZChpZCk7XG5cbiAgICAgICAgdmFyIHJlZlZhbCA9IHRoaXMuX3JlZnNbaWRdO1xuICAgICAgICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykgcmVmVmFsID0gdGhpcy5fcmVmc1tyZWZWYWxdO1xuICAgICAgICBpZiAocmVmVmFsICYmIHJlZlZhbC5zY2hlbWEpIHtcbiAgICAgICAgICBpZiAoIWVxdWFsKHNjaGVtYSwgcmVmVmFsLnNjaGVtYSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIFwiJyArIGlkICsgJ1wiIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaWQgIT0gbm9ybWFsaXplSWQoZnVsbFBhdGgpKSB7XG4gICAgICAgICAgaWYgKGlkWzBdID09ICcjJykge1xuICAgICAgICAgICAgaWYgKGxvY2FsUmVmc1tpZF0gJiYgIWVxdWFsKHNjaGVtYSwgbG9jYWxSZWZzW2lkXSkpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaWQgXCInICsgaWQgKyAnXCIgcmVzb2x2ZXMgdG8gbW9yZSB0aGFuIG9uZSBzY2hlbWEnKTtcbiAgICAgICAgICAgIGxvY2FsUmVmc1tpZF0gPSBzY2hlbWE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnNbaWRdID0gZnVsbFBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKVxuICAgICAgICBfcmVzb2x2ZUlkcy5jYWxsKHRoaXMsIHNjaGVtYVtrZXldLCBmdWxsUGF0aCsnLycrdXRpbC5lc2NhcGVGcmFnbWVudChrZXkpLCBiYXNlSWQpO1xuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcnVsZU1vZHVsZXMgPSByZXF1aXJlKCcuL19ydWxlcycpXG4gICwgdG9IYXNoID0gcmVxdWlyZSgnLi91dGlsJykudG9IYXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJ1bGVzKCkge1xuICB2YXIgUlVMRVMgPSBbXG4gICAgeyB0eXBlOiAnbnVtYmVyJyxcbiAgICAgIHJ1bGVzOiBbICdtYXhpbXVtJywgJ21pbmltdW0nLCAnbXVsdGlwbGVPZiddIH0sXG4gICAgeyB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIHJ1bGVzOiBbICdtYXhMZW5ndGgnLCAnbWluTGVuZ3RoJywgJ3BhdHRlcm4nLCAnZm9ybWF0JyBdIH0sXG4gICAgeyB0eXBlOiAnYXJyYXknLFxuICAgICAgcnVsZXM6IFsgJ21heEl0ZW1zJywgJ21pbkl0ZW1zJywgJ3VuaXF1ZUl0ZW1zJywgJ2l0ZW1zJyBdIH0sXG4gICAgeyB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHJ1bGVzOiBbICdtYXhQcm9wZXJ0aWVzJywgJ21pblByb3BlcnRpZXMnLCAncmVxdWlyZWQnLCAnZGVwZW5kZW5jaWVzJywgJ3Byb3BlcnRpZXMnIF0gfSxcbiAgICB7IHJ1bGVzOiBbICckcmVmJywgJ2VudW0nLCAnbm90JywgJ2FueU9mJywgJ29uZU9mJywgJ2FsbE9mJyBdIH1cbiAgXTtcblxuICB2YXIgQUxMID0gWyAndHlwZScsICdhZGRpdGlvbmFsUHJvcGVydGllcycsICdwYXR0ZXJuUHJvcGVydGllcycgXTtcbiAgdmFyIEtFWVdPUkRTID0gWyAnYWRkaXRpb25hbEl0ZW1zJywgJyRzY2hlbWEnLCAnaWQnLCAndGl0bGUnLCAnZGVzY3JpcHRpb24nLCAnZGVmYXVsdCcgXTtcbiAgdmFyIFRZUEVTID0gWyAnbnVtYmVyJywgJ2ludGVnZXInLCAnc3RyaW5nJywgJ2FycmF5JywgJ29iamVjdCcsICdib29sZWFuJywgJ251bGwnIF07XG4gIFJVTEVTLmFsbCA9IHRvSGFzaChBTEwpO1xuXG4gIFJVTEVTLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgZ3JvdXAucnVsZXMgPSBncm91cC5ydWxlcy5tYXAoZnVuY3Rpb24gKGtleXdvcmQpIHtcbiAgICAgIEFMTC5wdXNoKGtleXdvcmQpO1xuICAgICAgdmFyIHJ1bGUgPSBSVUxFUy5hbGxba2V5d29yZF0gPSB7XG4gICAgICAgIGtleXdvcmQ6IGtleXdvcmQsXG4gICAgICAgIGNvZGU6IHJ1bGVNb2R1bGVzW2tleXdvcmRdXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgfSk7XG4gIH0pO1xuXG4gIFJVTEVTLmtleXdvcmRzID0gdG9IYXNoKEFMTC5jb25jYXQoS0VZV09SRFMpKTtcbiAgUlVMRVMudHlwZXMgPSB0b0hhc2goVFlQRVMpO1xuICBSVUxFUy5jdXN0b20gPSB7fTtcblxuICByZXR1cm4gUlVMRVM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNjaGVtYU9iamVjdDtcblxuZnVuY3Rpb24gU2NoZW1hT2JqZWN0KG9iaikge1xuICB1dGlsLmNvcHkob2JqLCB0aGlzKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcyAtIHB1bnljb2RlLnVjczIuZGVjb2RlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVjczJsZW5ndGgoc3RyKSB7XG4gIHZhciBsZW5ndGggPSAwXG4gICAgLCBsZW4gPSBzdHIubGVuZ3RoXG4gICAgLCBwb3MgPSAwXG4gICAgLCB2YWx1ZTtcbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGxlbmd0aCsrO1xuICAgIHZhbHVlID0gc3RyLmNoYXJDb2RlQXQocG9zKyspO1xuICAgIGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIHBvcyA8IGxlbikge1xuICAgICAgLy8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG4gICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICBpZiAoKHZhbHVlICYgMHhGQzAwKSA9PSAweERDMDApIHBvcysrOyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgfVxuICB9XG4gIHJldHVybiBsZW5ndGg7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb3B5OiBjb3B5LFxuICBjaGVja0RhdGFUeXBlOiBjaGVja0RhdGFUeXBlLFxuICBjaGVja0RhdGFUeXBlczogY2hlY2tEYXRhVHlwZXMsXG4gIGNvZXJjZVRvVHlwZXM6IGNvZXJjZVRvVHlwZXMsXG4gIHRvSGFzaDogdG9IYXNoLFxuICBnZXRQcm9wZXJ0eTogZ2V0UHJvcGVydHksXG4gIGVzY2FwZVF1b3RlczogZXNjYXBlUXVvdGVzLFxuICB1Y3MybGVuZ3RoOiByZXF1aXJlKCcuL3VjczJsZW5ndGgnKSxcbiAgdmFyT2NjdXJlbmNlczogdmFyT2NjdXJlbmNlcyxcbiAgdmFyUmVwbGFjZTogdmFyUmVwbGFjZSxcbiAgY2xlYW5VcENvZGU6IGNsZWFuVXBDb2RlLFxuICBjbGVhblVwVmFyRXJyb3JzOiBjbGVhblVwVmFyRXJyb3JzLFxuICBzY2hlbWFIYXNSdWxlczogc2NoZW1hSGFzUnVsZXMsXG4gIHNjaGVtYUhhc1J1bGVzRXhjZXB0OiBzY2hlbWFIYXNSdWxlc0V4Y2VwdCxcbiAgc3RhYmxlU3RyaW5naWZ5OiByZXF1aXJlKCdqc29uLXN0YWJsZS1zdHJpbmdpZnknKSxcbiAgdG9RdW90ZWRTdHJpbmc6IHRvUXVvdGVkU3RyaW5nLFxuICBnZXRQYXRoRXhwcjogZ2V0UGF0aEV4cHIsXG4gIGdldFBhdGg6IGdldFBhdGgsXG4gIGdldERhdGE6IGdldERhdGEsXG4gIHVuZXNjYXBlRnJhZ21lbnQ6IHVuZXNjYXBlRnJhZ21lbnQsXG4gIGVzY2FwZUZyYWdtZW50OiBlc2NhcGVGcmFnbWVudCxcbiAgZXNjYXBlSnNvblBvaW50ZXI6IGVzY2FwZUpzb25Qb2ludGVyXG59O1xuXG5cbmZ1bmN0aW9uIGNvcHkobywgdG8pIHtcbiAgdG8gPSB0byB8fCB7fTtcbiAgZm9yICh2YXIga2V5IGluIG8pIHRvW2tleV0gPSBvW2tleV07XG4gIHJldHVybiB0bztcbn1cblxuXG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlLCBkYXRhLCBuZWdhdGUpIHtcbiAgdmFyIEVRVUFMID0gbmVnYXRlID8gJyAhPT0gJyA6ICcgPT09ICdcbiAgICAsIEFORCA9IG5lZ2F0ZSA/ICcgfHwgJyA6ICcgJiYgJ1xuICAgICwgT0sgPSBuZWdhdGUgPyAnIScgOiAnJ1xuICAgICwgTk9UID0gbmVnYXRlID8gJycgOiAnISc7XG4gIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICBjYXNlICdudWxsJzogcmV0dXJuIGRhdGEgKyBFUVVBTCArICdudWxsJztcbiAgICBjYXNlICdhcnJheSc6IHJldHVybiBPSyArICdBcnJheS5pc0FycmF5KCcgKyBkYXRhICsgJyknO1xuICAgIGNhc2UgJ29iamVjdCc6IHJldHVybiAnKCcgKyBPSyArIGRhdGEgKyBBTkQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCJvYmplY3RcIicgKyBBTkQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBOT1QgKyAnQXJyYXkuaXNBcnJheSgnICsgZGF0YSArICcpKSc7XG4gICAgY2FzZSAnaW50ZWdlcic6IHJldHVybiAnKHR5cGVvZiAnICsgZGF0YSArIEVRVUFMICsgJ1wibnVtYmVyXCInICsgQU5EICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVCArICcoJyArIGRhdGEgKyAnICUgMSknICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCArIGRhdGEgKyBFUVVBTCArIGRhdGEgKyAnKSc7XG4gICAgZGVmYXVsdDogcmV0dXJuICd0eXBlb2YgJyArIGRhdGEgKyBFUVVBTCArICdcIicgKyBkYXRhVHlwZSArICdcIic7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBjaGVja0RhdGFUeXBlcyhkYXRhVHlwZXMsIGRhdGEpIHtcbiAgc3dpdGNoIChkYXRhVHlwZXMubGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gY2hlY2tEYXRhVHlwZShkYXRhVHlwZXNbMF0sIGRhdGEsIHRydWUpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgdmFyIHR5cGVzID0gdG9IYXNoKGRhdGFUeXBlcyk7XG4gICAgICBpZiAodHlwZXMuYXJyYXkgJiYgdHlwZXMub2JqZWN0KSB7XG4gICAgICAgIGNvZGUgPSB0eXBlcy5udWxsID8gJygnOiAnKCEnICsgZGF0YSArICcgfHwgJztcbiAgICAgICAgY29kZSArPSAndHlwZW9mICcgKyBkYXRhICsgJyAhPT0gXCJvYmplY3RcIiknO1xuICAgICAgICBkZWxldGUgdHlwZXMubnVsbDtcbiAgICAgICAgZGVsZXRlIHR5cGVzLmFycmF5O1xuICAgICAgICBkZWxldGUgdHlwZXMub2JqZWN0O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVzLm51bWJlcikgZGVsZXRlIHR5cGVzLmludGVnZXI7XG4gICAgICBmb3IgKHZhciB0IGluIHR5cGVzKVxuICAgICAgICBjb2RlICs9IChjb2RlID8gJyAmJiAnIDogJycgKSArIGNoZWNrRGF0YVR5cGUodCwgZGF0YSwgdHJ1ZSk7XG5cbiAgICAgIHJldHVybiBjb2RlO1xuICB9XG59XG5cblxudmFyIENPRVJDRV9UT19UWVBFUyA9IHRvSGFzaChbICdzdHJpbmcnLCAnbnVtYmVyJywgJ2ludGVnZXInLCAnYm9vbGVhbicsICdudWxsJyBdKTtcbmZ1bmN0aW9uIGNvZXJjZVRvVHlwZXMob3B0aW9uQ29lcmNlVHlwZXMsIGRhdGFUeXBlcykge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhVHlwZXMpKSB7XG4gICAgdmFyIHR5cGVzID0gW107XG4gICAgZm9yICh2YXIgaT0wOyBpPGRhdGFUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHQgPSBkYXRhVHlwZXNbaV07XG4gICAgICBpZiAoQ09FUkNFX1RPX1RZUEVTW3RdKSB0eXBlc1t0eXBlcy5sZW5ndGhdID0gdDtcbiAgICAgIGVsc2UgaWYgKG9wdGlvbkNvZXJjZVR5cGVzID09PSAnYXJyYXknICYmIHQgPT09ICdhcnJheScpIHR5cGVzW3R5cGVzLmxlbmd0aF0gPSB0O1xuICAgIH1cbiAgICBpZiAodHlwZXMubGVuZ3RoKSByZXR1cm4gdHlwZXM7XG4gIH0gZWxzZSBpZiAoQ09FUkNFX1RPX1RZUEVTW2RhdGFUeXBlc10pIHtcbiAgICByZXR1cm4gW2RhdGFUeXBlc107XG4gIH0gZWxzZSBpZiAob3B0aW9uQ29lcmNlVHlwZXMgPT09ICdhcnJheScgJiYgZGF0YVR5cGVzID09PSAnYXJyYXknKSB7XG4gICAgcmV0dXJuIFsnYXJyYXknXTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHRvSGFzaChhcnIpIHtcbiAgdmFyIGhhc2ggPSB7fTtcbiAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKykgaGFzaFthcnJbaV1dID0gdHJ1ZTtcbiAgcmV0dXJuIGhhc2g7XG59XG5cblxudmFyIElERU5USUZJRVIgPSAvXlthLXokX11bYS16JF8wLTldKiQvaTtcbnZhciBTSU5HTEVfUVVPVEUgPSAvJ3xcXFxcL2c7XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIHR5cGVvZiBrZXkgPT0gJ251bWJlcidcbiAgICAgICAgICA/ICdbJyArIGtleSArICddJ1xuICAgICAgICAgIDogSURFTlRJRklFUi50ZXN0KGtleSlcbiAgICAgICAgICAgID8gJy4nICsga2V5XG4gICAgICAgICAgICA6IFwiWydcIiArIGVzY2FwZVF1b3RlcyhrZXkpICsgXCInXVwiO1xufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZVF1b3RlcyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKFNJTkdMRV9RVU9URSwgJ1xcXFwkJicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxmL2csICdcXFxcZicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFx0L2csICdcXFxcdCcpO1xufVxuXG5cbmZ1bmN0aW9uIHZhck9jY3VyZW5jZXMoc3RyLCBkYXRhVmFyKSB7XG4gIGRhdGFWYXIgKz0gJ1teMC05XSc7XG4gIHZhciBtYXRjaGVzID0gc3RyLm1hdGNoKG5ldyBSZWdFeHAoZGF0YVZhciwgJ2cnKSk7XG4gIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlcy5sZW5ndGggOiAwO1xufVxuXG5cbmZ1bmN0aW9uIHZhclJlcGxhY2Uoc3RyLCBkYXRhVmFyLCBleHByKSB7XG4gIGRhdGFWYXIgKz0gJyhbXjAtOV0pJztcbiAgZXhwciA9IGV4cHIucmVwbGFjZSgvXFwkL2csICckJCQkJyk7XG4gIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKGRhdGFWYXIsICdnJyksIGV4cHIgKyAnJDEnKTtcbn1cblxuXG52YXIgRU1QVFlfRUxTRSA9IC9lbHNlXFxzKntcXHMqfS9nXG4gICwgRU1QVFlfSUZfTk9fRUxTRSA9IC9pZlxccypcXChbXildK1xcKVxccypcXHtcXHMqXFx9KD8hXFxzKmVsc2UpL2dcbiAgLCBFTVBUWV9JRl9XSVRIX0VMU0UgPSAvaWZcXHMqXFwoKFteKV0rKVxcKVxccypcXHtcXHMqXFx9XFxzKmVsc2UoPyFcXHMqaWYpL2c7XG5mdW5jdGlvbiBjbGVhblVwQ29kZShvdXQpIHtcbiAgcmV0dXJuIG91dC5yZXBsYWNlKEVNUFRZX0VMU0UsICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoRU1QVFlfSUZfTk9fRUxTRSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZShFTVBUWV9JRl9XSVRIX0VMU0UsICdpZiAoISgkMSkpJyk7XG59XG5cblxudmFyIEVSUk9SU19SRUdFWFAgPSAvW152XFwuXWVycm9ycy9nXG4gICwgUkVNT1ZFX0VSUk9SUyA9IC92YXIgZXJyb3JzID0gMDt8dmFyIHZFcnJvcnMgPSBudWxsO3x2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOy9nXG4gICwgUkVNT1ZFX0VSUk9SU19BU1lOQyA9IC92YXIgZXJyb3JzID0gMDt8dmFyIHZFcnJvcnMgPSBudWxsOy9nXG4gICwgUkVUVVJOX1ZBTElEID0gJ3JldHVybiBlcnJvcnMgPT09IDA7J1xuICAsIFJFVFVSTl9UUlVFID0gJ3ZhbGlkYXRlLmVycm9ycyA9IG51bGw7IHJldHVybiB0cnVlOydcbiAgLCBSRVRVUk5fQVNZTkMgPSAvaWYgXFwoZXJyb3JzID09PSAwXFwpIHJldHVybiB0cnVlO1xccyplbHNlIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3JcXCh2RXJyb3JzXFwpOy9cbiAgLCBSRVRVUk5fVFJVRV9BU1lOQyA9ICdyZXR1cm4gdHJ1ZTsnO1xuXG5mdW5jdGlvbiBjbGVhblVwVmFyRXJyb3JzKG91dCwgYXN5bmMpIHtcbiAgdmFyIG1hdGNoZXMgPSBvdXQubWF0Y2goRVJST1JTX1JFR0VYUCk7XG4gIGlmICghbWF0Y2hlcyB8fCBtYXRjaGVzLmxlbmd0aCAhPT0gMikgcmV0dXJuIG91dDtcbiAgcmV0dXJuIGFzeW5jXG4gICAgICAgICAgPyBvdXQucmVwbGFjZShSRU1PVkVfRVJST1JTX0FTWU5DLCAnJylcbiAgICAgICAgICAgICAgIC5yZXBsYWNlKFJFVFVSTl9BU1lOQywgUkVUVVJOX1RSVUVfQVNZTkMpXG4gICAgICAgICAgOiBvdXQucmVwbGFjZShSRU1PVkVfRVJST1JTLCAnJylcbiAgICAgICAgICAgICAgIC5yZXBsYWNlKFJFVFVSTl9WQUxJRCwgUkVUVVJOX1RSVUUpO1xufVxuXG5cbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzKHNjaGVtYSwgcnVsZXMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkgaWYgKHJ1bGVzW2tleV0pIHJldHVybiB0cnVlO1xufVxuXG5cbmZ1bmN0aW9uIHNjaGVtYUhhc1J1bGVzRXhjZXB0KHNjaGVtYSwgcnVsZXMsIGV4Y2VwdEtleXdvcmQpIHtcbiAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkgaWYgKGtleSAhPSBleGNlcHRLZXl3b3JkICYmIHJ1bGVzW2tleV0pIHJldHVybiB0cnVlO1xufVxuXG5cbmZ1bmN0aW9uIHRvUXVvdGVkU3RyaW5nKHN0cikge1xuICByZXR1cm4gJ1xcJycgKyBlc2NhcGVRdW90ZXMoc3RyKSArICdcXCcnO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGhFeHByKGN1cnJlbnRQYXRoLCBleHByLCBqc29uUG9pbnRlcnMsIGlzTnVtYmVyKSB7XG4gIHZhciBwYXRoID0ganNvblBvaW50ZXJzIC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgPyAnXFwnL1xcJyArICcgKyBleHByICsgKGlzTnVtYmVyID8gJycgOiAnLnJlcGxhY2UoL34vZywgXFwnfjBcXCcpLnJlcGxhY2UoL1xcXFwvL2csIFxcJ34xXFwnKScpXG4gICAgICAgICAgICAgIDogKGlzTnVtYmVyID8gJ1xcJ1tcXCcgKyAnICsgZXhwciArICcgKyBcXCddXFwnJyA6ICdcXCdbXFxcXFxcJ1xcJyArICcgKyBleHByICsgJyArIFxcJ1xcXFxcXCddXFwnJyk7XG4gIHJldHVybiBqb2luUGF0aHMoY3VycmVudFBhdGgsIHBhdGgpO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGgoY3VycmVudFBhdGgsIHByb3AsIGpzb25Qb2ludGVycykge1xuICB2YXIgcGF0aCA9IGpzb25Qb2ludGVycyAvLyBmYWxzZSBieSBkZWZhdWx0XG4gICAgICAgICAgICAgID8gdG9RdW90ZWRTdHJpbmcoJy8nICsgZXNjYXBlSnNvblBvaW50ZXIocHJvcCkpXG4gICAgICAgICAgICAgIDogdG9RdW90ZWRTdHJpbmcoZ2V0UHJvcGVydHkocHJvcCkpO1xuICByZXR1cm4gam9pblBhdGhzKGN1cnJlbnRQYXRoLCBwYXRoKTtcbn1cblxuXG52YXIgSlNPTl9QT0lOVEVSID0gL15cXC8oPzpbXn5dfH4wfH4xKSokLztcbnZhciBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIGx2bCwgcGF0aHMpIHtcbiAgdmFyIHVwLCBqc29uUG9pbnRlciwgZGF0YSwgbWF0Y2hlcztcbiAgaWYgKCRkYXRhID09PSAnJykgcmV0dXJuICdyb290RGF0YSc7XG4gIGlmICgkZGF0YVswXSA9PSAnLycpIHtcbiAgICBpZiAoIUpTT05fUE9JTlRFUi50ZXN0KCRkYXRhKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgIGRhdGEgPSAncm9vdERhdGEnO1xuICB9IGVsc2Uge1xuICAgIG1hdGNoZXMgPSAkZGF0YS5tYXRjaChSRUxBVElWRV9KU09OX1BPSU5URVIpO1xuICAgIGlmICghbWF0Y2hlcykgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICB1cCA9ICttYXRjaGVzWzFdO1xuICAgIGpzb25Qb2ludGVyID0gbWF0Y2hlc1syXTtcbiAgICBpZiAoanNvblBvaW50ZXIgPT0gJyMnKSB7XG4gICAgICBpZiAodXAgPj0gbHZsKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgcHJvcGVydHkvaW5kZXggJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgICByZXR1cm4gcGF0aHNbbHZsIC0gdXBdO1xuICAgIH1cblxuICAgIGlmICh1cCA+IGx2bCkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWNjZXNzIGRhdGEgJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgZGF0YSA9ICdkYXRhJyArICgobHZsIC0gdXApIHx8ICcnKTtcbiAgICBpZiAoIWpzb25Qb2ludGVyKSByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBleHByID0gZGF0YTtcbiAgdmFyIHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaT0wOyBpPHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgZGF0YSArPSBnZXRQcm9wZXJ0eSh1bmVzY2FwZUpzb25Qb2ludGVyKHNlZ21lbnQpKTtcbiAgICAgIGV4cHIgKz0gJyAmJiAnICsgZGF0YTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4cHI7XG59XG5cblxuZnVuY3Rpb24gam9pblBhdGhzIChhLCBiKSB7XG4gIGlmIChhID09ICdcIlwiJykgcmV0dXJuIGI7XG4gIHJldHVybiAoYSArICcgKyAnICsgYikucmVwbGFjZSgvJyBcXCsgJy9nLCAnJyk7XG59XG5cblxuZnVuY3Rpb24gdW5lc2NhcGVGcmFnbWVudChzdHIpIHtcbiAgcmV0dXJuIHVuZXNjYXBlSnNvblBvaW50ZXIoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpO1xufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZUZyYWdtZW50KHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGVzY2FwZUpzb25Qb2ludGVyKHN0cikpO1xufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL34vZywgJ34wJykucmVwbGFjZSgvXFwvL2csICd+MScpO1xufVxuXG5cbmZ1bmN0aW9uIHVuZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfjEvZywgJy8nKS5yZXBsYWNlKC9+MC9nLCAnficpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZhbGlkYXRpb25FcnJvcjtcblxuXG5mdW5jdGlvbiBWYWxpZGF0aW9uRXJyb3IoZXJyb3JzKSB7XG4gIHRoaXMubWVzc2FnZSA9ICd2YWxpZGF0aW9uIGZhaWxlZCc7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICB0aGlzLmFqdiA9IHRoaXMudmFsaWRhdGlvbiA9IHRydWU7XG59XG5cblxuVmFsaWRhdGlvbkVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblZhbGlkYXRpb25FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWYWxpZGF0aW9uRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX19mb3JtYXRMaW1pdChpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgb3V0ICs9ICd2YXIgJyArICgkdmFsaWQpICsgJyA9IHVuZGVmaW5lZDsnO1xuICBpZiAoaXQub3B0cy5mb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICB2YXIgJHNjaGVtYUZvcm1hdCA9IGl0LnNjaGVtYS5mb3JtYXQsXG4gICAgJGlzRGF0YUZvcm1hdCA9IGl0Lm9wdHMudjUgJiYgJHNjaGVtYUZvcm1hdC4kZGF0YSxcbiAgICAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICBpZiAoJGlzRGF0YUZvcm1hdCkge1xuICAgIHZhciAkc2NoZW1hVmFsdWVGb3JtYXQgPSBpdC51dGlsLmdldERhdGEoJHNjaGVtYUZvcm1hdC4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSxcbiAgICAgICRmb3JtYXQgPSAnZm9ybWF0JyArICRsdmwsXG4gICAgICAkY29tcGFyZSA9ICdjb21wYXJlJyArICRsdmw7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGZvcm1hdCkgKyAnID0gZm9ybWF0c1snICsgKCRzY2hlbWFWYWx1ZUZvcm1hdCkgKyAnXSAsICcgKyAoJGNvbXBhcmUpICsgJyA9ICcgKyAoJGZvcm1hdCkgKyAnICYmICcgKyAoJGZvcm1hdCkgKyAnLmNvbXBhcmU7JztcbiAgfSBlbHNlIHtcbiAgICB2YXIgJGZvcm1hdCA9IGl0LmZvcm1hdHNbJHNjaGVtYUZvcm1hdF07XG4gICAgaWYgKCEoJGZvcm1hdCAmJiAkZm9ybWF0LmNvbXBhcmUpKSB7XG4gICAgICBvdXQgKz0gJyAgJyArICgkdmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICB2YXIgJGNvbXBhcmUgPSAnZm9ybWF0cycgKyBpdC51dGlsLmdldFByb3BlcnR5KCRzY2hlbWFGb3JtYXQpICsgJy5jb21wYXJlJztcbiAgfVxuICB2YXIgJGlzTWF4ID0gJGtleXdvcmQgPT0gJ2Zvcm1hdE1heGltdW0nLFxuICAgICRleGNsdXNpdmVLZXl3b3JkID0gJ2Zvcm1hdEV4Y2x1c2l2ZScgKyAoJGlzTWF4ID8gJ01heGltdW0nIDogJ01pbmltdW0nKSxcbiAgICAkc2NoZW1hRXhjbCA9IGl0LnNjaGVtYVskZXhjbHVzaXZlS2V5d29yZF0sXG4gICAgJGlzRGF0YUV4Y2wgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWFFeGNsICYmICRzY2hlbWFFeGNsLiRkYXRhLFxuICAgICRvcCA9ICRpc01heCA/ICc8JyA6ICc+JyxcbiAgICAkcmVzdWx0ID0gJ3Jlc3VsdCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMudjUgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCRpc0RhdGFFeGNsKSB7XG4gICAgdmFyICRzY2hlbWFWYWx1ZUV4Y2wgPSBpdC51dGlsLmdldERhdGEoJHNjaGVtYUV4Y2wuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFyciksXG4gICAgICAkZXhjbHVzaXZlID0gJ2V4Y2x1c2l2ZScgKyAkbHZsLFxuICAgICAgJG9wRXhwciA9ICdvcCcgKyAkbHZsLFxuICAgICAgJG9wU3RyID0gJ1xcJyArICcgKyAkb3BFeHByICsgJyArIFxcJyc7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYUV4Y2wnICsgKCRsdmwpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZUV4Y2wgPSAnc2NoZW1hRXhjbCcgKyAkbHZsO1xuICAgIG91dCArPSAnIGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgIT0gXFwnYm9vbGVhblxcJyAmJiAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyAhPT0gdW5kZWZpbmVkKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJztcbiAgICB2YXIgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19mb3JtYXRFeGNsdXNpdmVMaW1pdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnICsgKCRleGNsdXNpdmVLZXl3b3JkKSArICcgc2hvdWxkIGJlIGJvb2xlYW5cXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgIH1cbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGVsc2UgaWYgKHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ3N0cmluZ1xcJykgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBlbHNlIHsgJztcbiAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICB9XG4gICAgaWYgKCRpc0RhdGFGb3JtYXQpIHtcbiAgICAgIG91dCArPSAnIGlmICghJyArICgkY29tcGFyZSkgKyAnKSAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgZWxzZSB7ICc7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgfVxuICAgIG91dCArPSAnIHZhciAnICsgKCRyZXN1bHQpICsgJyA9ICcgKyAoJGNvbXBhcmUpICsgJygnICsgKCRkYXRhKSArICcsICAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgIH1cbiAgICBvdXQgKz0gJyApOyBpZiAoJyArICgkcmVzdWx0KSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyB2YXIgJyArICgkZXhjbHVzaXZlKSArICcgPSAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyA9PT0gdHJ1ZTsgaWYgKCcgKyAoJHZhbGlkKSArICcgPT09IHVuZGVmaW5lZCkgeyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkZXhjbHVzaXZlKSArICcgPyAnICsgKCRyZXN1bHQpICsgJyAnICsgKCRvcCkgKyAnIDAgOiAnICsgKCRyZXN1bHQpICsgJyAnICsgKCRvcCkgKyAnPSAwOyB9IGlmICghJyArICgkdmFsaWQpICsgJykgdmFyIG9wJyArICgkbHZsKSArICcgPSAnICsgKCRleGNsdXNpdmUpICsgJyA/IFxcJycgKyAoJG9wKSArICdcXCcgOiBcXCcnICsgKCRvcCkgKyAnPVxcJzsnO1xuICB9IGVsc2Uge1xuICAgIHZhciAkZXhjbHVzaXZlID0gJHNjaGVtYUV4Y2wgPT09IHRydWUsXG4gICAgICAkb3BTdHIgPSAkb3A7XG4gICAgaWYgKCEkZXhjbHVzaXZlKSAkb3BTdHIgKz0gJz0nO1xuICAgIHZhciAkb3BFeHByID0gJ1xcJycgKyAkb3BTdHIgKyAnXFwnJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGVsc2UgaWYgKHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ3N0cmluZ1xcJykgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBlbHNlIHsgJztcbiAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICB9XG4gICAgaWYgKCRpc0RhdGFGb3JtYXQpIHtcbiAgICAgIG91dCArPSAnIGlmICghJyArICgkY29tcGFyZSkgKyAnKSAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgZWxzZSB7ICc7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgfVxuICAgIG91dCArPSAnIHZhciAnICsgKCRyZXN1bHQpICsgJyA9ICcgKyAoJGNvbXBhcmUpICsgJygnICsgKCRkYXRhKSArICcsICAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgIH1cbiAgICBvdXQgKz0gJyApOyBpZiAoJyArICgkcmVzdWx0KSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBpZiAoJyArICgkdmFsaWQpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkcmVzdWx0KSArICcgJyArICgkb3ApO1xuICAgIGlmICghJGV4Y2x1c2l2ZSkge1xuICAgICAgb3V0ICs9ICc9JztcbiAgICB9XG4gICAgb3V0ICs9ICcgMDsnO1xuICB9XG4gIG91dCArPSAnJyArICgkY2xvc2luZ0JyYWNlcykgKyAnaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICc7XG4gIHZhciAkZXJyb3JLZXl3b3JkID0gJGtleXdvcmQ7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdfZm9ybWF0TGltaXQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGNvbXBhcmlzb246ICcgKyAoJG9wRXhwcikgKyAnLCBsaW1pdDogICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgfVxuICAgIG91dCArPSAnICwgZXhjbHVzaXZlOiAnICsgKCRleGNsdXNpdmUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSAnICsgKCRvcFN0cikgKyAnIFwiJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICdcIlxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9JztcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0KGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkaXNNYXggPSAka2V5d29yZCA9PSAnbWF4aW11bScsXG4gICAgJGV4Y2x1c2l2ZUtleXdvcmQgPSAkaXNNYXggPyAnZXhjbHVzaXZlTWF4aW11bScgOiAnZXhjbHVzaXZlTWluaW11bScsXG4gICAgJHNjaGVtYUV4Y2wgPSBpdC5zY2hlbWFbJGV4Y2x1c2l2ZUtleXdvcmRdLFxuICAgICRpc0RhdGFFeGNsID0gaXQub3B0cy52NSAmJiAkc2NoZW1hRXhjbCAmJiAkc2NoZW1hRXhjbC4kZGF0YSxcbiAgICAkb3AgPSAkaXNNYXggPyAnPCcgOiAnPicsXG4gICAgJG5vdE9wID0gJGlzTWF4ID8gJz4nIDogJzwnO1xuICBpZiAoJGlzRGF0YUV4Y2wpIHtcbiAgICB2YXIgJHNjaGVtYVZhbHVlRXhjbCA9IGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hRXhjbC4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSxcbiAgICAgICRleGNsdXNpdmUgPSAnZXhjbHVzaXZlJyArICRsdmwsXG4gICAgICAkb3BFeHByID0gJ29wJyArICRsdmwsXG4gICAgICAkb3BTdHIgPSAnXFwnICsgJyArICRvcEV4cHIgKyAnICsgXFwnJztcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hRXhjbCcgKyAoJGx2bCkgKyAnID0gJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlRXhjbCA9ICdzY2hlbWFFeGNsJyArICRsdmw7XG4gICAgb3V0ICs9ICcgdmFyIGV4Y2x1c2l2ZScgKyAoJGx2bCkgKyAnOyBpZiAodHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnICE9IFxcJ2Jvb2xlYW5cXCcgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnICE9IFxcJ3VuZGVmaW5lZFxcJykgeyAnO1xuICAgIHZhciAkZXJyb3JLZXl3b3JkID0gJGV4Y2x1c2l2ZUtleXdvcmQ7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2V4Y2x1c2l2ZUxpbWl0JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJycgKyAoJGV4Y2x1c2l2ZUtleXdvcmQpICsgJyBzaG91bGQgYmUgYm9vbGVhblxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSBlbHNlIGlmKCAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgKChleGNsdXNpdmUnICsgKCRsdmwpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnID09PSB0cnVlKSA/ICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnPSAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIDogJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJykgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsgdmFyIG9wJyArICgkbHZsKSArICcgPSBleGNsdXNpdmUnICsgKCRsdmwpICsgJyA/IFxcJycgKyAoJG9wKSArICdcXCcgOiBcXCcnICsgKCRvcCkgKyAnPVxcJzsnO1xuICB9IGVsc2Uge1xuICAgIHZhciAkZXhjbHVzaXZlID0gJHNjaGVtYUV4Y2wgPT09IHRydWUsXG4gICAgICAkb3BTdHIgPSAkb3A7XG4gICAgaWYgKCEkZXhjbHVzaXZlKSAkb3BTdHIgKz0gJz0nO1xuICAgIHZhciAkb3BFeHByID0gJ1xcJycgKyAkb3BTdHIgKyAnXFwnJztcbiAgICBvdXQgKz0gJyBpZiAoICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnKSB8fCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApO1xuICAgIGlmICgkZXhjbHVzaXZlKSB7XG4gICAgICBvdXQgKz0gJz0nO1xuICAgIH1cbiAgICBvdXQgKz0gJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIHx8ICcgKyAoJGRhdGEpICsgJyAhPT0gJyArICgkZGF0YSkgKyAnKSB7JztcbiAgfVxuICB2YXIgJGVycm9yS2V5d29yZCA9ICRrZXl3b3JkO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2xpbWl0JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBjb21wYXJpc29uOiAnICsgKCRvcEV4cHIpICsgJywgbGltaXQ6ICcgKyAoJHNjaGVtYVZhbHVlKSArICcsIGV4Y2x1c2l2ZTogJyArICgkZXhjbHVzaXZlKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJyArICgkb3BTdHIpICsgJyAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSkgKyAnXFwnJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9fbGltaXRJdGVtcyhpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy52NSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJG9wID0gJGtleXdvcmQgPT0gJ21heEl0ZW1zJyA/ICc+JyA6ICc8JztcbiAgb3V0ICs9ICdpZiAoICc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdudW1iZXJcXCcpIHx8ICc7XG4gIH1cbiAgb3V0ICs9ICcgJyArICgkZGF0YSkgKyAnLmxlbmd0aCAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdEl0ZW1zJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBsaW1pdDogJyArICgkc2NoZW1hVmFsdWUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgaGF2ZSAnO1xuICAgICAgaWYgKCRrZXl3b3JkID09ICdtYXhJdGVtcycpIHtcbiAgICAgICAgb3V0ICs9ICdtb3JlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnbGVzcyc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB0aGFuICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgaXRlbXNcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX19saW1pdExlbmd0aChpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy52NSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJG9wID0gJGtleXdvcmQgPT0gJ21heExlbmd0aCcgPyAnPicgOiAnPCc7XG4gIG91dCArPSAnaWYgKCAnO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnKSB8fCAnO1xuICB9XG4gIGlmIChpdC5vcHRzLnVuaWNvZGUgPT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgJyArICgkZGF0YSkgKyAnLmxlbmd0aCAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHVjczJsZW5ndGgoJyArICgkZGF0YSkgKyAnKSAnO1xuICB9XG4gIG91dCArPSAnICcgKyAoJG9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJykgeyAnO1xuICB2YXIgJGVycm9yS2V5d29yZCA9ICRrZXl3b3JkO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2xpbWl0TGVuZ3RoJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBsaW1pdDogJyArICgkc2NoZW1hVmFsdWUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgYmUgJztcbiAgICAgIGlmICgka2V5d29yZCA9PSAnbWF4TGVuZ3RoJykge1xuICAgICAgICBvdXQgKz0gJ2xvbmdlcic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJ3Nob3J0ZXInO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgdGhhbiAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICsgXFwnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIGNoYXJhY3RlcnNcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX19saW1pdFByb3BlcnRpZXMoaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMudjUgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRvcCA9ICRrZXl3b3JkID09ICdtYXhQcm9wZXJ0aWVzJyA/ICc+JyA6ICc8JztcbiAgb3V0ICs9ICdpZiAoICc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdudW1iZXJcXCcpIHx8ICc7XG4gIH1cbiAgb3V0ICs9ICcgT2JqZWN0LmtleXMoJyArICgkZGF0YSkgKyAnKS5sZW5ndGggJyArICgkb3ApICsgJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSB7ICc7XG4gIHZhciAkZXJyb3JLZXl3b3JkID0gJGtleXdvcmQ7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdfbGltaXRQcm9wZXJ0aWVzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBsaW1pdDogJyArICgkc2NoZW1hVmFsdWUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgaGF2ZSAnO1xuICAgICAgaWYgKCRrZXl3b3JkID09ICdtYXhQcm9wZXJ0aWVzJykge1xuICAgICAgICBvdXQgKz0gJ21vcmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICdsZXNzJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRoYW4gJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBwcm9wZXJ0aWVzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJ30gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9hbGxPZihpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZCxcbiAgICAkYWxsU2NoZW1hc0VtcHR5ID0gdHJ1ZTtcbiAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICBpZiAoYXJyMSkge1xuICAgIHZhciAkc2NoLCAkaSA9IC0xLFxuICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCRpIDwgbDEpIHtcbiAgICAgICRzY2ggPSBhcnIxWyRpICs9IDFdO1xuICAgICAgaWYgKGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkge1xuICAgICAgICAkYWxsU2NoZW1hc0VtcHR5ID0gZmFsc2U7XG4gICAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBpZiAoJGFsbFNjaGVtYXNFbXB0eSkge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcy5zbGljZSgwLCAtMSkpICsgJyAnO1xuICAgIH1cbiAgfVxuICBvdXQgPSBpdC51dGlsLmNsZWFuVXBDb2RlKG91dCk7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2FueU9mKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJG5vRW1wdHlTY2hlbWEgPSAkc2NoZW1hLmV2ZXJ5KGZ1bmN0aW9uKCRzY2gpIHtcbiAgICByZXR1cm4gaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpO1xuICB9KTtcbiAgaWYgKCRub0VtcHR5U2NoZW1hKSB7XG4gICAgdmFyICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZDtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzOyB2YXIgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyAgJztcbiAgICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gICAgaWYgKGFycjEpIHtcbiAgICAgIHZhciAkc2NoLCAkaSA9IC0xLFxuICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAgICRzY2ggPSBhcnIxWyRpICs9IDFdO1xuICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRpICsgJ10nO1xuICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoICsgJy8nICsgJGk7XG4gICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCR2YWxpZCkgKyAnIHx8ICcgKyAoJG5leHRWYWxpZCkgKyAnOyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgJztcbiAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgfVxuICAgIH1cbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMpICsgJyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnYW55T2YnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7fSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIG1hdGNoIHNvbWUgc2NoZW1hIGluIGFueU9mXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gZWxzZSB7ICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICAgIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfY29uc3RhbnQoaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIGlmICghJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsnO1xuICB9XG4gIG91dCArPSAndmFyICcgKyAoJHZhbGlkKSArICcgPSBlcXVhbCgnICsgKCRkYXRhKSArICcsIHNjaGVtYScgKyAoJGx2bCkgKyAnKTsgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdjb25zdGFudCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSBlcXVhbCB0byBjb25zdGFudFxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJyB9JztcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfY3VzdG9tKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy52NSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJHJ1bGUgPSB0aGlzLFxuICAgICRkZWZpbml0aW9uID0gJ2RlZmluaXRpb24nICsgJGx2bCxcbiAgICAkckRlZiA9ICRydWxlLmRlZmluaXRpb247XG4gIHZhciAkY29tcGlsZSwgJGlubGluZSwgJG1hY3JvLCAkcnVsZVZhbGlkYXRlLCAkdmFsaWRhdGVDb2RlO1xuICBpZiAoJGlzRGF0YSAmJiAkckRlZi4kZGF0YSkge1xuICAgICR2YWxpZGF0ZUNvZGUgPSAna2V5d29yZFZhbGlkYXRlJyArICRsdmw7XG4gICAgdmFyICR2YWxpZGF0ZVNjaGVtYSA9ICRyRGVmLnZhbGlkYXRlU2NoZW1hO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRkZWZpbml0aW9uKSArICcgPSBSVUxFUy5jdXN0b21bXFwnJyArICgka2V5d29yZCkgKyAnXFwnXS5kZWZpbml0aW9uOyB2YXIgJyArICgkdmFsaWRhdGVDb2RlKSArICcgPSAnICsgKCRkZWZpbml0aW9uKSArICcudmFsaWRhdGU7JztcbiAgfSBlbHNlIHtcbiAgICAkcnVsZVZhbGlkYXRlID0gaXQudXNlQ3VzdG9tUnVsZSgkcnVsZSwgJHNjaGVtYSwgaXQuc2NoZW1hLCBpdCk7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAkc2NoZW1hUGF0aDtcbiAgICAkdmFsaWRhdGVDb2RlID0gJHJ1bGVWYWxpZGF0ZS5jb2RlO1xuICAgICRjb21waWxlID0gJHJEZWYuY29tcGlsZTtcbiAgICAkaW5saW5lID0gJHJEZWYuaW5saW5lO1xuICAgICRtYWNybyA9ICRyRGVmLm1hY3JvO1xuICB9XG4gIHZhciAkcnVsZUVycnMgPSAkdmFsaWRhdGVDb2RlICsgJy5lcnJvcnMnLFxuICAgICRpID0gJ2knICsgJGx2bCxcbiAgICAkcnVsZUVyciA9ICdydWxlRXJyJyArICRsdmwsXG4gICAgJGFzeW5jS2V5d29yZCA9ICRyRGVmLmFzeW5jO1xuICBpZiAoJGFzeW5jS2V5d29yZCAmJiAhaXQuYXN5bmMpIHRocm93IG5ldyBFcnJvcignYXN5bmMga2V5d29yZCBpbiBzeW5jIHNjaGVtYScpO1xuICBpZiAoISgkaW5saW5lIHx8ICRtYWNybykpIHtcbiAgICBvdXQgKz0gJycgKyAoJHJ1bGVFcnJzKSArICcgPSBudWxsOyc7XG4gIH1cbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzO3ZhciAnICsgKCR2YWxpZCkgKyAnOyc7XG4gIGlmICgkdmFsaWRhdGVTY2hlbWEpIHtcbiAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkZGVmaW5pdGlvbikgKyAnLnZhbGlkYXRlU2NoZW1hKCcgKyAoJHNjaGVtYVZhbHVlKSArICcpOyBpZiAoJyArICgkdmFsaWQpICsgJykgeyc7XG4gIH1cbiAgaWYgKCRpbmxpbmUpIHtcbiAgICBpZiAoJHJEZWYuc3RhdGVtZW50cykge1xuICAgICAgb3V0ICs9ICcgJyArICgkcnVsZVZhbGlkYXRlLnZhbGlkYXRlKSArICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJHJ1bGVWYWxpZGF0ZS52YWxpZGF0ZSkgKyAnOyAnO1xuICAgIH1cbiAgfSBlbHNlIGlmICgkbWFjcm8pIHtcbiAgICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgICAkaXQubGV2ZWwrKztcbiAgICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gICAgJGl0LnNjaGVtYSA9ICRydWxlVmFsaWRhdGUudmFsaWRhdGU7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAnJztcbiAgICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpLnJlcGxhY2UoL3ZhbGlkYXRlXFwuc2NoZW1hL2csICR2YWxpZGF0ZUNvZGUpO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gICAgb3V0ICs9ICcgJyArICgkY29kZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnO1xuICAgIG91dCArPSAnICAnICsgKCR2YWxpZGF0ZUNvZGUpICsgJy5jYWxsKCAnO1xuICAgIGlmIChpdC5vcHRzLnBhc3NDb250ZXh0KSB7XG4gICAgICBvdXQgKz0gJ3RoaXMnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJ3NlbGYnO1xuICAgIH1cbiAgICBpZiAoJGNvbXBpbGUgfHwgJHJEZWYuc2NoZW1hID09PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCAnICsgKCRkYXRhKSArICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgLCAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICwgJyArICgkZGF0YSkgKyAnICwgdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgLCAoZGF0YVBhdGggfHwgXFwnXFwnKSc7XG4gICAgaWYgKGl0LmVycm9yUGF0aCAhPSAnXCJcIicpIHtcbiAgICAgIG91dCArPSAnICsgJyArIChpdC5lcnJvclBhdGgpO1xuICAgIH1cbiAgICB2YXIgJHBhcmVudERhdGEgPSAkZGF0YUx2bCA/ICdkYXRhJyArICgoJGRhdGFMdmwgLSAxKSB8fCAnJykgOiAncGFyZW50RGF0YScsXG4gICAgICAkcGFyZW50RGF0YVByb3BlcnR5ID0gJGRhdGFMdmwgPyBpdC5kYXRhUGF0aEFyclskZGF0YUx2bF0gOiAncGFyZW50RGF0YVByb3BlcnR5JztcbiAgICBvdXQgKz0gJyAsICcgKyAoJHBhcmVudERhdGEpICsgJyAsICcgKyAoJHBhcmVudERhdGFQcm9wZXJ0eSkgKyAnICwgcm9vdERhdGEgKSAgJztcbiAgICB2YXIgZGVmX2NhbGxSdWxlVmFsaWRhdGUgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoJHJEZWYuZXJyb3JzID09PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9ICc7XG4gICAgICBpZiAoJGFzeW5jS2V5d29yZCkge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQueWllbGRBd2FpdCk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJycgKyAoZGVmX2NhbGxSdWxlVmFsaWRhdGUpICsgJzsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCRhc3luY0tleXdvcmQpIHtcbiAgICAgICAgJHJ1bGVFcnJzID0gJ2N1c3RvbUVycm9ycycgKyAkbHZsO1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkcnVsZUVycnMpICsgJyA9IG51bGw7IHRyeSB7ICcgKyAoJHZhbGlkKSArICcgPSAnICsgKGl0LnlpZWxkQXdhaXQpICsgKGRlZl9jYWxsUnVsZVZhbGlkYXRlKSArICc7IH0gY2F0Y2ggKGUpIHsgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBpZiAoZSBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikgJyArICgkcnVsZUVycnMpICsgJyA9IGUuZXJyb3JzOyBlbHNlIHRocm93IGU7IH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJHJ1bGVFcnJzKSArICcgPSBudWxsOyAnICsgKCR2YWxpZCkgKyAnID0gJyArIChkZWZfY2FsbFJ1bGVWYWxpZGF0ZSkgKyAnOyAnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoJHJEZWYubW9kaWZ5aW5nKSB7XG4gICAgb3V0ICs9ICcgJyArICgkZGF0YSkgKyAnID0gJyArICgkcGFyZW50RGF0YSkgKyAnWycgKyAoJHBhcmVudERhdGFQcm9wZXJ0eSkgKyAnXTsnO1xuICB9XG4gIGlmICgkdmFsaWRhdGVTY2hlbWEpIHtcbiAgICBvdXQgKz0gJyB9JztcbiAgfVxuICBpZiAoJHJEZWYudmFsaWQpIHtcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgaWYgKCAnO1xuICAgIGlmICgkckRlZi52YWxpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXQgKz0gJyAhJztcbiAgICAgIGlmICgkbWFjcm8pIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRuZXh0VmFsaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCR2YWxpZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoISRyRGVmLnZhbGlkKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcpIHsgJztcbiAgICAkZXJyb3JLZXl3b3JkID0gJHJ1bGUua2V5d29yZDtcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnY3VzdG9tJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBrZXl3b3JkOiBcXCcnICsgKCRydWxlLmtleXdvcmQpICsgJ1xcJyB9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcIicgKyAoJHJ1bGUua2V5d29yZCkgKyAnXCIga2V5d29yZCB2YWxpZGF0aW9uXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIHZhciBfX2VyciA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICB2YXIgZGVmX2N1c3RvbUVycm9yID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCRpbmxpbmUpIHtcbiAgICAgIGlmICgkckRlZi5lcnJvcnMpIHtcbiAgICAgICAgaWYgKCRyRGVmLmVycm9ycyAhPSAnZnVsbCcpIHtcbiAgICAgICAgICBvdXQgKz0gJyAgZm9yICh2YXIgJyArICgkaSkgKyAnPScgKyAoJGVycnMpICsgJzsgJyArICgkaSkgKyAnPGVycm9yczsgJyArICgkaSkgKyAnKyspIHsgdmFyICcgKyAoJHJ1bGVFcnIpICsgJyA9IHZFcnJvcnNbJyArICgkaSkgKyAnXTsgaWYgKCcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9PT0gdW5kZWZpbmVkKSAnICsgKCRydWxlRXJyKSArICcuZGF0YVBhdGggPSAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICc7IGlmICgnICsgKCRydWxlRXJyKSArICcuc2NoZW1hUGF0aCA9PT0gdW5kZWZpbmVkKSB7ICcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID0gXCInICsgKCRlcnJTY2hlbWFQYXRoKSArICdcIjsgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWEgPSAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnOyAnICsgKCRydWxlRXJyKSArICcuZGF0YSA9ICcgKyAoJGRhdGEpICsgJzsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoJHJEZWYuZXJyb3JzID09PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnICcgKyAoZGVmX2N1c3RvbUVycm9yKSArICcgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZXJycykgKyAnID09IGVycm9ycykgeyAnICsgKGRlZl9jdXN0b21FcnJvcikgKyAnIH0gZWxzZSB7ICBmb3IgKHZhciAnICsgKCRpKSArICc9JyArICgkZXJycykgKyAnOyAnICsgKCRpKSArICc8ZXJyb3JzOyAnICsgKCRpKSArICcrKykgeyB2YXIgJyArICgkcnVsZUVycikgKyAnID0gdkVycm9yc1snICsgKCRpKSArICddOyBpZiAoJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID09PSB1bmRlZmluZWQpICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJzsgaWYgKCcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID09PSB1bmRlZmluZWQpIHsgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPSBcIicgKyAoJGVyclNjaGVtYVBhdGgpICsgJ1wiOyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYSA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICc7ICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhID0gJyArICgkZGF0YSkgKyAnOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9IH0gJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoJG1hY3JvKSB7XG4gICAgICBvdXQgKz0gJyAgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnY3VzdG9tJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBrZXl3b3JkOiBcXCcnICsgKCRydWxlLmtleXdvcmQpICsgJ1xcJyB9ICc7XG4gICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIHBhc3MgXCInICsgKCRydWxlLmtleXdvcmQpICsgJ1wiIGtleXdvcmQgdmFsaWRhdGlvblxcJyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodkVycm9ycyk7ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gdkVycm9yczsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgkckRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoZGVmX2N1c3RvbUVycm9yKSArICcgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIGlmIChBcnJheS5pc0FycmF5KCcgKyAoJHJ1bGVFcnJzKSArICcpKSB7IGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gJyArICgkcnVsZUVycnMpICsgJzsgZWxzZSB2RXJyb3JzID0gdkVycm9ycy5jb25jYXQoJyArICgkcnVsZUVycnMpICsgJyk7IGVycm9ycyA9IHZFcnJvcnMubGVuZ3RoOyAgZm9yICh2YXIgJyArICgkaSkgKyAnPScgKyAoJGVycnMpICsgJzsgJyArICgkaSkgKyAnPGVycm9yczsgJyArICgkaSkgKyAnKyspIHsgdmFyICcgKyAoJHJ1bGVFcnIpICsgJyA9IHZFcnJvcnNbJyArICgkaSkgKyAnXTsgaWYgKCcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9PT0gdW5kZWZpbmVkKSAnICsgKCRydWxlRXJyKSArICcuZGF0YVBhdGggPSAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICc7ICAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hUGF0aCA9IFwiJyArICgkZXJyU2NoZW1hUGF0aCkgKyAnXCI7ICAnO1xuICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYSA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICc7ICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhID0gJyArICgkZGF0YSkgKyAnOyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gfSBlbHNlIHsgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyB9ICc7XG4gICAgICB9XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2RlcGVuZGVuY2llcyhpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkc2NoZW1hRGVwcyA9IHt9LFxuICAgICRwcm9wZXJ0eURlcHMgPSB7fTtcbiAgZm9yICgkcHJvcGVydHkgaW4gJHNjaGVtYSkge1xuICAgIHZhciAkc2NoID0gJHNjaGVtYVskcHJvcGVydHldO1xuICAgIHZhciAkZGVwcyA9IEFycmF5LmlzQXJyYXkoJHNjaCkgPyAkcHJvcGVydHlEZXBzIDogJHNjaGVtYURlcHM7XG4gICAgJGRlcHNbJHByb3BlcnR5XSA9ICRzY2g7XG4gIH1cbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzOyc7XG4gIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aDtcbiAgb3V0ICs9ICd2YXIgbWlzc2luZycgKyAoJGx2bCkgKyAnOyc7XG4gIGZvciAodmFyICRwcm9wZXJ0eSBpbiAkcHJvcGVydHlEZXBzKSB7XG4gICAgJGRlcHMgPSAkcHJvcGVydHlEZXBzWyRwcm9wZXJ0eV07XG4gICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGEpICsgKGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5KSkgKyAnICE9PSB1bmRlZmluZWQgJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgJiYgKCAnO1xuICAgICAgdmFyIGFycjEgPSAkZGVwcztcbiAgICAgIGlmIChhcnIxKSB7XG4gICAgICAgIHZhciBfJHByb3BlcnR5LCAkaSA9IC0xLFxuICAgICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAgIF8kcHJvcGVydHkgPSBhcnIxWyRpICs9IDFdO1xuICAgICAgICAgIGlmICgkaSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgfHwgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eShfJHByb3BlcnR5KTtcbiAgICAgICAgICBvdXQgKz0gJyAoICcgKyAoJGRhdGEpICsgKCRwcm9wKSArICcgPT09IHVuZGVmaW5lZCAmJiAobWlzc2luZycgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKGl0Lm9wdHMuanNvblBvaW50ZXJzID8gXyRwcm9wZXJ0eSA6ICRwcm9wKSkgKyAnKSApICc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG91dCArPSAnKSkgeyAgJztcbiAgICAgIHZhciAkcHJvcGVydHlQYXRoID0gJ21pc3NpbmcnICsgJGx2bCxcbiAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9ICdcXCcgKyAnICsgJHByb3BlcnR5UGF0aCArICcgKyBcXCcnO1xuICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICBpdC5lcnJvclBhdGggPSBpdC5vcHRzLmpzb25Qb2ludGVycyA/IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIHRydWUpIDogJGN1cnJlbnRFcnJvclBhdGggKyAnICsgJyArICRwcm9wZXJ0eVBhdGg7XG4gICAgICB9XG4gICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdkZXBlbmRlbmNpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHByb3BlcnR5OiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eSkpICsgJ1xcJywgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJywgZGVwc0NvdW50OiAnICsgKCRkZXBzLmxlbmd0aCkgKyAnLCBkZXBzOiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzLmxlbmd0aCA9PSAxID8gJGRlcHNbMF0gOiAkZGVwcy5qb2luKFwiLCBcIikpKSArICdcXCcgfSAnO1xuICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBoYXZlICc7XG4gICAgICAgICAgaWYgKCRkZXBzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICBvdXQgKz0gJ3Byb3BlcnR5ICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHNbMF0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0aWVzICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHMuam9pbihcIiwgXCIpKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIHdoZW4gcHJvcGVydHkgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICcgaXMgcHJlc2VudFxcJyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICB9XG4gICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgKSB7ICc7XG4gICAgICB2YXIgYXJyMiA9ICRkZXBzO1xuICAgICAgaWYgKGFycjIpIHtcbiAgICAgICAgdmFyICRyZXFQcm9wZXJ0eSwgaTIgPSAtMSxcbiAgICAgICAgICBsMiA9IGFycjIubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKGkyIDwgbDIpIHtcbiAgICAgICAgICAkcmVxUHJvcGVydHkgPSBhcnIyW2kyICs9IDFdO1xuICAgICAgICAgIHZhciAkcHJvcCA9IGl0LnV0aWwuZ2V0UHJvcGVydHkoJHJlcVByb3BlcnR5KSxcbiAgICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSBpdC51dGlsLmVzY2FwZVF1b3RlcygkcmVxUHJvcGVydHkpO1xuICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aCgkY3VycmVudEVycm9yUGF0aCwgJHJlcVByb3BlcnR5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhKSArICgkcHJvcCkgKyAnID09PSB1bmRlZmluZWQpIHsgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnZGVwZW5kZW5jaWVzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwcm9wZXJ0eTogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICdcXCcsIG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcsIGRlcHNDb3VudDogJyArICgkZGVwcy5sZW5ndGgpICsgJywgZGVwczogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwcy5sZW5ndGggPT0gMSA/ICRkZXBzWzBdIDogJGRlcHMuam9pbihcIiwgXCIpKSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBoYXZlICc7XG4gICAgICAgICAgICAgIGlmICgkZGVwcy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAncHJvcGVydHkgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwc1swXSkpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAncHJvcGVydGllcyAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzLmpvaW4oXCIsIFwiKSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnIHdoZW4gcHJvcGVydHkgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICcgaXMgcHJlc2VudFxcJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9ICc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSAgICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgIH1cbiAgfVxuICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgdmFyICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZDtcbiAgZm9yICh2YXIgJHByb3BlcnR5IGluICRzY2hlbWFEZXBzKSB7XG4gICAgdmFyICRzY2ggPSAkc2NoZW1hRGVwc1skcHJvcGVydHldO1xuICAgIGlmIChpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCcgKyAoJGRhdGEpICsgKGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5KSkgKyAnICE9PSB1bmRlZmluZWQpIHsgJztcbiAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5KTtcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyBpdC51dGlsLmVzY2FwZUZyYWdtZW50KCRwcm9wZXJ0eSk7XG4gICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIG91dCArPSAnIH0gICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnICAgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7JztcbiAgfVxuICBvdXQgPSBpdC51dGlsLmNsZWFuVXBDb2RlKG91dCk7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2VudW0oaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkaSA9ICdpJyArICRsdmwsXG4gICAgJHZTY2hlbWEgPSAnc2NoZW1hJyArICRsdmw7XG4gIGlmICghJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciAnICsgKCR2U2NoZW1hKSArICcgPSB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICc7JztcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCR2YWxpZCkgKyAnOyc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgaWYgKHNjaGVtYScgKyAoJGx2bCkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEnICsgKCRsdmwpICsgJykpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgZWxzZSB7JztcbiAgfVxuICBvdXQgKz0gJycgKyAoJHZhbGlkKSArICcgPSBmYWxzZTtmb3IgKHZhciAnICsgKCRpKSArICc9MDsgJyArICgkaSkgKyAnPCcgKyAoJHZTY2hlbWEpICsgJy5sZW5ndGg7ICcgKyAoJGkpICsgJysrKSBpZiAoZXF1YWwoJyArICgkZGF0YSkgKyAnLCAnICsgKCR2U2NoZW1hKSArICdbJyArICgkaSkgKyAnXSkpIHsgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGJyZWFrOyB9JztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAgfSAgJztcbiAgfVxuICBvdXQgKz0gJyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2VudW0nKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGFsbG93ZWRWYWx1ZXM6IHNjaGVtYScgKyAoJGx2bCkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXNcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfZm9ybWF0KGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICBpZiAoaXQub3B0cy5mb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkdW5rbm93bkZvcm1hdHMgPSBpdC5vcHRzLnVua25vd25Gb3JtYXRzLFxuICAgICRhbGxvd1Vua25vd24gPSBBcnJheS5pc0FycmF5KCR1bmtub3duRm9ybWF0cyk7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgdmFyICRmb3JtYXQgPSAnZm9ybWF0JyArICRsdmw7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGZvcm1hdCkgKyAnID0gZm9ybWF0c1snICsgKCRzY2hlbWFWYWx1ZSkgKyAnXTsgdmFyIGlzT2JqZWN0JyArICgkbHZsKSArICcgPSB0eXBlb2YgJyArICgkZm9ybWF0KSArICcgPT0gXFwnb2JqZWN0XFwnICYmICEoJyArICgkZm9ybWF0KSArICcgaW5zdGFuY2VvZiBSZWdFeHApICYmICcgKyAoJGZvcm1hdCkgKyAnLnZhbGlkYXRlOyBpZiAoaXNPYmplY3QnICsgKCRsdmwpICsgJykgeyAnO1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdmFyIGFzeW5jJyArICgkbHZsKSArICcgPSAnICsgKCRmb3JtYXQpICsgJy5hc3luYzsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArICgkZm9ybWF0KSArICcgPSAnICsgKCRmb3JtYXQpICsgJy52YWxpZGF0ZTsgfSBpZiAoICAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ3N0cmluZ1xcJykgfHwgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgKCc7XG4gICAgaWYgKCR1bmtub3duRm9ybWF0cyA9PT0gdHJ1ZSB8fCAkYWxsb3dVbmtub3duKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAmJiAhJyArICgkZm9ybWF0KSArICcgJztcbiAgICAgIGlmICgkYWxsb3dVbmtub3duKSB7XG4gICAgICAgIG91dCArPSAnICYmIHNlbGYuX29wdHMudW5rbm93bkZvcm1hdHMuaW5kZXhPZignICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSA9PSAtMSAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcpIHx8ICc7XG4gICAgfVxuICAgIG91dCArPSAnICgnICsgKCRmb3JtYXQpICsgJyAmJiAhKHR5cGVvZiAnICsgKCRmb3JtYXQpICsgJyA9PSBcXCdmdW5jdGlvblxcJyA/ICc7XG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyAoYXN5bmMnICsgKCRsdmwpICsgJyA/ICcgKyAoaXQueWllbGRBd2FpdCkgKyAnICcgKyAoJGZvcm1hdCkgKyAnKCcgKyAoJGRhdGEpICsgJykgOiAnICsgKCRmb3JtYXQpICsgJygnICsgKCRkYXRhKSArICcpKSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRmb3JtYXQpICsgJygnICsgKCRkYXRhKSArICcpICc7XG4gICAgfVxuICAgIG91dCArPSAnIDogJyArICgkZm9ybWF0KSArICcudGVzdCgnICsgKCRkYXRhKSArICcpKSkpKSB7JztcbiAgfSBlbHNlIHtcbiAgICB2YXIgJGZvcm1hdCA9IGl0LmZvcm1hdHNbJHNjaGVtYV07XG4gICAgaWYgKCEkZm9ybWF0KSB7XG4gICAgICBpZiAoJHVua25vd25Gb3JtYXRzID09PSB0cnVlIHx8ICgkYWxsb3dVbmtub3duICYmICR1bmtub3duRm9ybWF0cy5pbmRleE9mKCRzY2hlbWEpID09IC0xKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gZm9ybWF0IFwiJyArICRzY2hlbWEgKyAnXCIgaXMgdXNlZCBpbiBzY2hlbWEgYXQgcGF0aCBcIicgKyBpdC5lcnJTY2hlbWFQYXRoICsgJ1wiJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRhbGxvd1Vua25vd24pIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ3Vua25vd24gZm9ybWF0IFwiJyArICRzY2hlbWEgKyAnXCIgaWdub3JlZCBpbiBzY2hlbWEgYXQgcGF0aCBcIicgKyBpdC5lcnJTY2hlbWFQYXRoICsgJ1wiJyk7XG4gICAgICAgICAgaWYgKCR1bmtub3duRm9ybWF0cyAhPT0gJ2lnbm9yZScpIGNvbnNvbGUud2FybignSW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBpdCB3aWxsIHRocm93IGV4Y2VwdGlvbi4gU2VlIG9wdGlvbiB1bmtub3duRm9ybWF0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgJGlzT2JqZWN0ID0gdHlwZW9mICRmb3JtYXQgPT0gJ29iamVjdCcgJiYgISgkZm9ybWF0IGluc3RhbmNlb2YgUmVnRXhwKSAmJiAkZm9ybWF0LnZhbGlkYXRlO1xuICAgIGlmICgkaXNPYmplY3QpIHtcbiAgICAgIHZhciAkYXN5bmMgPSAkZm9ybWF0LmFzeW5jID09PSB0cnVlO1xuICAgICAgJGZvcm1hdCA9ICRmb3JtYXQudmFsaWRhdGU7XG4gICAgfVxuICAgIGlmICgkYXN5bmMpIHtcbiAgICAgIGlmICghaXQuYXN5bmMpIHRocm93IG5ldyBFcnJvcignYXN5bmMgZm9ybWF0IGluIHN5bmMgc2NoZW1hJyk7XG4gICAgICB2YXIgJGZvcm1hdFJlZiA9ICdmb3JtYXRzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHNjaGVtYSkgKyAnLnZhbGlkYXRlJztcbiAgICAgIG91dCArPSAnIGlmICghKCcgKyAoaXQueWllbGRBd2FpdCkgKyAnICcgKyAoJGZvcm1hdFJlZikgKyAnKCcgKyAoJGRhdGEpICsgJykpKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGlmICghICc7XG4gICAgICB2YXIgJGZvcm1hdFJlZiA9ICdmb3JtYXRzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHNjaGVtYSk7XG4gICAgICBpZiAoJGlzT2JqZWN0KSAkZm9ybWF0UmVmICs9ICcudmFsaWRhdGUnO1xuICAgICAgaWYgKHR5cGVvZiAkZm9ybWF0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkZm9ybWF0UmVmKSArICcoJyArICgkZGF0YSkgKyAnKSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkZm9ybWF0UmVmKSArICcudGVzdCgnICsgKCRkYXRhKSArICcpICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJykgeyAnO1xuICAgIH1cbiAgfVxuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2Zvcm1hdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgZm9ybWF0OiAgJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIG1hdGNoIGZvcm1hdCBcIic7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnXCJcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9pdGVtcyhpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRpZHggPSAnaScgKyAkbHZsLFxuICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQsXG4gICAgJGN1cnJlbnRCYXNlSWQgPSBpdC5iYXNlSWQ7XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczt2YXIgJyArICgkdmFsaWQpICsgJzsnO1xuICBpZiAoQXJyYXkuaXNBcnJheSgkc2NoZW1hKSkge1xuICAgIHZhciAkYWRkaXRpb25hbEl0ZW1zID0gaXQuc2NoZW1hLmFkZGl0aW9uYWxJdGVtcztcbiAgICBpZiAoJGFkZGl0aW9uYWxJdGVtcyA9PT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRkYXRhKSArICcubGVuZ3RoIDw9ICcgKyAoJHNjaGVtYS5sZW5ndGgpICsgJzsgJztcbiAgICAgIHZhciAkY3VyckVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgIG91dCArPSAnICBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnYWRkaXRpb25hbEl0ZW1zJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBsaW1pdDogJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnIH0gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGhhdmUgbW9yZSB0aGFuICcgKyAoJHNjaGVtYS5sZW5ndGgpICsgJyBpdGVtc1xcJyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogZmFsc2UgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgJGVyclNjaGVtYVBhdGggPSAkY3VyckVyclNjaGVtYVBhdGg7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gICAgaWYgKGFycjEpIHtcbiAgICAgIHZhciAkc2NoLCAkaSA9IC0xLFxuICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAgICRzY2ggPSBhcnIxWyRpICs9IDFdO1xuICAgICAgICBpZiAoaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpKSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArICgkbmV4dFZhbGlkKSArICcgPSB0cnVlOyBpZiAoJyArICgkZGF0YSkgKyAnLmxlbmd0aCA+ICcgKyAoJGkpICsgJykgeyAnO1xuICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRpICsgJ10nO1xuICAgICAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkaSArICddJztcbiAgICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoICsgJy8nICsgJGk7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAkaSwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgICAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gICc7XG4gICAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mICRhZGRpdGlvbmFsSXRlbXMgPT0gJ29iamVjdCcgJiYgaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkYWRkaXRpb25hbEl0ZW1zLCBpdC5SVUxFUy5hbGwpKSB7XG4gICAgICAkaXQuc2NoZW1hID0gJGFkZGl0aW9uYWxJdGVtcztcbiAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCcgKyAoJGRhdGEpICsgJy5sZW5ndGggPiAnICsgKCRzY2hlbWEubGVuZ3RoKSArICcpIHsgIGZvciAodmFyICcgKyAoJGlkeCkgKyAnID0gJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnOyAnICsgKCRpZHgpICsgJyA8ICcgKyAoJGRhdGEpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgJztcbiAgICAgICRpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGlkeCwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGlkeCArICddJztcbiAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaWR4O1xuICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgIH1cbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSB9ICAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoZW1hLCBpdC5SVUxFUy5hbGwpKSB7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnICBmb3IgKHZhciAnICsgKCRpZHgpICsgJyA9ICcgKyAoMCkgKyAnOyAnICsgKCRpZHgpICsgJyA8ICcgKyAoJGRhdGEpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgJztcbiAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRpZHgsIGl0Lm9wdHMuanNvblBvaW50ZXJzLCB0cnVlKTtcbiAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAkaWR4ICsgJ10nO1xuICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaWR4O1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICB9XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICB9XG4gIH1cbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfbXVsdGlwbGVPZihpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIG91dCArPSAndmFyIGRpdmlzaW9uJyArICgkbHZsKSArICc7aWYgKCc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmICggdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnIHx8ICc7XG4gIH1cbiAgb3V0ICs9ICcgKGRpdmlzaW9uJyArICgkbHZsKSArICcgPSAnICsgKCRkYXRhKSArICcgLyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnLCAnO1xuICBpZiAoaXQub3B0cy5tdWx0aXBsZU9mUHJlY2lzaW9uKSB7XG4gICAgb3V0ICs9ICcgTWF0aC5hYnMoTWF0aC5yb3VuZChkaXZpc2lvbicgKyAoJGx2bCkgKyAnKSAtIGRpdmlzaW9uJyArICgkbHZsKSArICcpID4gMWUtJyArIChpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb24pICsgJyAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIGRpdmlzaW9uJyArICgkbHZsKSArICcgIT09IHBhcnNlSW50KGRpdmlzaW9uJyArICgkbHZsKSArICcpICc7XG4gIH1cbiAgb3V0ICs9ICcgKSAnO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnICApICAnO1xuICB9XG4gIG91dCArPSAnICkgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnbXVsdGlwbGVPZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbXVsdGlwbGVPZjogJyArICgkc2NoZW1hVmFsdWUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSBtdWx0aXBsZSBvZiAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSkgKyAnXFwnJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX25vdChpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgaWYgKGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaGVtYSwgaXQuUlVMRVMuYWxsKSkge1xuICAgICRpdC5zY2hlbWEgPSAkc2NoZW1hO1xuICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGg7XG4gICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzOyAgJztcbiAgICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICAkaXQuY3JlYXRlRXJyb3JzID0gZmFsc2U7XG4gICAgdmFyICRhbGxFcnJvcnNPcHRpb247XG4gICAgaWYgKCRpdC5vcHRzLmFsbEVycm9ycykge1xuICAgICAgJGFsbEVycm9yc09wdGlvbiA9ICRpdC5vcHRzLmFsbEVycm9ycztcbiAgICAgICRpdC5vcHRzLmFsbEVycm9ycyA9IGZhbHNlO1xuICAgIH1cbiAgICBvdXQgKz0gJyAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICRpdC5jcmVhdGVFcnJvcnMgPSB0cnVlO1xuICAgIGlmICgkYWxsRXJyb3JzT3B0aW9uKSAkaXQub3B0cy5hbGxFcnJvcnMgPSAkYWxsRXJyb3JzT3B0aW9uO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICAgJztcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnbm90JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgYmUgdmFsaWRcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gZWxzZSB7ICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ25vdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGJlIHZhbGlkXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmIChmYWxzZSkgeyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9vbmVPZihpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzO3ZhciBwcmV2VmFsaWQnICsgKCRsdmwpICsgJyA9IGZhbHNlO3ZhciAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7JztcbiAgdmFyICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZDtcbiAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gIGlmIChhcnIxKSB7XG4gICAgdmFyICRzY2gsICRpID0gLTEsXG4gICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgJHNjaCA9IGFycjFbJGkgKz0gMV07XG4gICAgICBpZiAoaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpKSB7XG4gICAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICB9XG4gICAgICBpZiAoJGkpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnICYmIHByZXZWYWxpZCcgKyAoJGx2bCkgKyAnKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2UgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpICcgKyAoJHZhbGlkKSArICcgPSBwcmV2VmFsaWQnICsgKCRsdmwpICsgJyA9IHRydWU7JztcbiAgICB9XG4gIH1cbiAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgb3V0ICs9ICcnICsgKCRjbG9zaW5nQnJhY2VzKSArICdpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ29uZU9mJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZlxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJ30gZWxzZSB7ICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9JztcbiAgaWYgKGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3BhdHRlcm4oaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy52NSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJHJlZ2V4cCA9ICRpc0RhdGEgPyAnKG5ldyBSZWdFeHAoJyArICRzY2hlbWFWYWx1ZSArICcpKScgOiBpdC51c2VQYXR0ZXJuKCRzY2hlbWEpO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ3N0cmluZ1xcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAhJyArICgkcmVnZXhwKSArICcudGVzdCgnICsgKCRkYXRhKSArICcpICkgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncGF0dGVybicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcGF0dGVybjogICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgfVxuICAgIG91dCArPSAnICB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICdcIlxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9ICc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcGF0dGVyblJlcXVpcmVkKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAka2V5ID0gJ2tleScgKyAkbHZsLFxuICAgICRtYXRjaGVkID0gJ3BhdHRlcm5NYXRjaGVkJyArICRsdmwsXG4gICAgJGNsb3NpbmdCcmFjZXMgPSAnJyxcbiAgICAkb3duUHJvcGVydGllcyA9IGl0Lm9wdHMub3duUHJvcGVydGllcztcbiAgb3V0ICs9ICd2YXIgJyArICgkdmFsaWQpICsgJyA9IHRydWU7JztcbiAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICBpZiAoYXJyMSkge1xuICAgIHZhciAkcFByb3BlcnR5LCBpMSA9IC0xLFxuICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKGkxIDwgbDEpIHtcbiAgICAgICRwUHJvcGVydHkgPSBhcnIxW2kxICs9IDFdO1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG1hdGNoZWQpICsgJyA9IGZhbHNlOyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgICc7XG4gICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCAnICsgKCRrZXkpICsgJykpIGNvbnRpbnVlOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgJyArICgkbWF0Y2hlZCkgKyAnID0gJyArIChpdC51c2VQYXR0ZXJuKCRwUHJvcGVydHkpKSArICcudGVzdCgnICsgKCRrZXkpICsgJyk7IGlmICgnICsgKCRtYXRjaGVkKSArICcpIGJyZWFrOyB9ICc7XG4gICAgICB2YXIgJG1pc3NpbmdQYXR0ZXJuID0gaXQudXRpbC5lc2NhcGVRdW90ZXMoJHBQcm9wZXJ0eSk7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG1hdGNoZWQpICsgJykgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7ICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdwYXR0ZXJuUmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQYXR0ZXJuOiBcXCcnICsgKCRtaXNzaW5nUGF0dGVybikgKyAnXFwnIH0gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgaGF2ZSBwcm9wZXJ0eSBtYXRjaGluZyBwYXR0ZXJuIFxcXFxcXCcnICsgKCRtaXNzaW5nUGF0dGVybikgKyAnXFxcXFxcJ1xcJyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9ICAgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG91dCArPSAnJyArICgkY2xvc2luZ0JyYWNlcyk7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3Byb3BlcnRpZXMoaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAka2V5ID0gJ2tleScgKyAkbHZsLFxuICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQ7XG4gIHZhciAkc2NoZW1hS2V5cyA9IE9iamVjdC5rZXlzKCRzY2hlbWEgfHwge30pLFxuICAgICRwUHJvcGVydGllcyA9IGl0LnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyB8fCB7fSxcbiAgICAkcFByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKCRwUHJvcGVydGllcyksXG4gICAgJGFQcm9wZXJ0aWVzID0gaXQuc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLFxuICAgICRzb21lUHJvcGVydGllcyA9ICRzY2hlbWFLZXlzLmxlbmd0aCB8fCAkcFByb3BlcnR5S2V5cy5sZW5ndGgsXG4gICAgJG5vQWRkaXRpb25hbCA9ICRhUHJvcGVydGllcyA9PT0gZmFsc2UsXG4gICAgJGFkZGl0aW9uYWxJc1NjaGVtYSA9IHR5cGVvZiAkYVByb3BlcnRpZXMgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJGFQcm9wZXJ0aWVzKS5sZW5ndGgsXG4gICAgJHJlbW92ZUFkZGl0aW9uYWwgPSBpdC5vcHRzLnJlbW92ZUFkZGl0aW9uYWwsXG4gICAgJGNoZWNrQWRkaXRpb25hbCA9ICRub0FkZGl0aW9uYWwgfHwgJGFkZGl0aW9uYWxJc1NjaGVtYSB8fCAkcmVtb3ZlQWRkaXRpb25hbCxcbiAgICAkb3duUHJvcGVydGllcyA9IGl0Lm9wdHMub3duUHJvcGVydGllcyxcbiAgICAkY3VycmVudEJhc2VJZCA9IGl0LmJhc2VJZDtcbiAgdmFyICRyZXF1aXJlZCA9IGl0LnNjaGVtYS5yZXF1aXJlZDtcbiAgaWYgKCRyZXF1aXJlZCAmJiAhKGl0Lm9wdHMudjUgJiYgJHJlcXVpcmVkLiRkYXRhKSAmJiAkcmVxdWlyZWQubGVuZ3RoIDwgaXQub3B0cy5sb29wUmVxdWlyZWQpIHZhciAkcmVxdWlyZWRIYXNoID0gaXQudXRpbC50b0hhc2goJHJlcXVpcmVkKTtcbiAgaWYgKGl0Lm9wdHMudjUpIHtcbiAgICB2YXIgJHBnUHJvcGVydGllcyA9IGl0LnNjaGVtYS5wYXR0ZXJuR3JvdXBzIHx8IHt9LFxuICAgICAgJHBnUHJvcGVydHlLZXlzID0gT2JqZWN0LmtleXMoJHBnUHJvcGVydGllcyk7XG4gIH1cbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzO3ZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7JztcbiAgaWYgKCRjaGVja0FkZGl0aW9uYWwpIHtcbiAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgICc7XG4gICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsICcgKyAoJGtleSkgKyAnKSkgY29udGludWU7ICc7XG4gICAgfVxuICAgIGlmICgkc29tZVByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnIHZhciBpc0FkZGl0aW9uYWwnICsgKCRsdmwpICsgJyA9ICEoZmFsc2UgJztcbiAgICAgIGlmICgkc2NoZW1hS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCRzY2hlbWFLZXlzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgICBvdXQgKz0gJyB8fCB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICdbJyArICgka2V5KSArICddICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFycjEgPSAkc2NoZW1hS2V5cztcbiAgICAgICAgICBpZiAoYXJyMSkge1xuICAgICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTEgPSAtMSxcbiAgICAgICAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoaTEgPCBsMSkge1xuICAgICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIxW2kxICs9IDFdO1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAnICsgKCRrZXkpICsgJyA9PSAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHByb3BlcnR5S2V5KSkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoJHBQcm9wZXJ0eUtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBhcnIyID0gJHBQcm9wZXJ0eUtleXM7XG4gICAgICAgIGlmIChhcnIyKSB7XG4gICAgICAgICAgdmFyICRwUHJvcGVydHksICRpID0gLTEsXG4gICAgICAgICAgICBsMiA9IGFycjIubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoJGkgPCBsMikge1xuICAgICAgICAgICAgJHBQcm9wZXJ0eSA9IGFycjJbJGkgKz0gMV07XG4gICAgICAgICAgICBvdXQgKz0gJyB8fCAnICsgKGl0LnVzZVBhdHRlcm4oJHBQcm9wZXJ0eSkpICsgJy50ZXN0KCcgKyAoJGtleSkgKyAnKSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudjUgJiYgJHBnUHJvcGVydHlLZXlzICYmICRwZ1Byb3BlcnR5S2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGFycjMgPSAkcGdQcm9wZXJ0eUtleXM7XG4gICAgICAgIGlmIChhcnIzKSB7XG4gICAgICAgICAgdmFyICRwZ1Byb3BlcnR5LCAkaSA9IC0xLFxuICAgICAgICAgICAgbDMgPSBhcnIzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKCRpIDwgbDMpIHtcbiAgICAgICAgICAgICRwZ1Byb3BlcnR5ID0gYXJyM1skaSArPSAxXTtcbiAgICAgICAgICAgIG91dCArPSAnIHx8ICcgKyAoaXQudXNlUGF0dGVybigkcGdQcm9wZXJ0eSkpICsgJy50ZXN0KCcgKyAoJGtleSkgKyAnKSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ICs9ICcgKTsgaWYgKGlzQWRkaXRpb25hbCcgKyAoJGx2bCkgKyAnKSB7ICc7XG4gICAgfVxuICAgIGlmICgkcmVtb3ZlQWRkaXRpb25hbCA9PSAnYWxsJykge1xuICAgICAgb3V0ICs9ICcgZGVsZXRlICcgKyAoJGRhdGEpICsgJ1snICsgKCRrZXkpICsgJ107ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aDtcbiAgICAgIHZhciAkYWRkaXRpb25hbFByb3BlcnR5ID0gJ1xcJyArICcgKyAka2V5ICsgJyArIFxcJyc7XG4gICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICB9XG4gICAgICBpZiAoJG5vQWRkaXRpb25hbCkge1xuICAgICAgICBpZiAoJHJlbW92ZUFkZGl0aW9uYWwpIHtcbiAgICAgICAgICBvdXQgKz0gJyBkZWxldGUgJyArICgkZGF0YSkgKyAnWycgKyAoJGtleSkgKyAnXTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IGZhbHNlOyAnO1xuICAgICAgICAgIHZhciAkY3VyckVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL2FkZGl0aW9uYWxQcm9wZXJ0aWVzJztcbiAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnYWRkaXRpb25hbFByb3BlcnRpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGFkZGl0aW9uYWxQcm9wZXJ0eTogXFwnJyArICgkYWRkaXRpb25hbFByb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlIGFkZGl0aW9uYWwgcHJvcGVydGllc1xcJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogZmFsc2UgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9ICRjdXJyRXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgYnJlYWs7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCRhZGRpdGlvbmFsSXNTY2hlbWEpIHtcbiAgICAgICAgaWYgKCRyZW1vdmVBZGRpdGlvbmFsID09ICdmYWlsaW5nJykge1xuICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7ICAnO1xuICAgICAgICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICAgICAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgICAgICAgICRpdC5zY2hlbWEgPSAkYVByb3BlcnRpZXM7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA/IGl0LmVycm9yUGF0aCA6IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIHsgZXJyb3JzID0gJyArICgkZXJycykgKyAnOyBpZiAodmFsaWRhdGUuZXJyb3JzICE9PSBudWxsKSB7IGlmIChlcnJvcnMpIHZhbGlkYXRlLmVycm9ycy5sZW5ndGggPSBlcnJvcnM7IGVsc2UgdmFsaWRhdGUuZXJyb3JzID0gbnVsbDsgfSBkZWxldGUgJyArICgkZGF0YSkgKyAnWycgKyAoJGtleSkgKyAnXTsgfSAgJztcbiAgICAgICAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRpdC5zY2hlbWEgPSAkYVByb3BlcnRpZXM7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA/IGl0LmVycm9yUGF0aCA6IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGl0LmVycm9yUGF0aCA9ICRjdXJyZW50RXJyb3JQYXRoO1xuICAgIH1cbiAgICBpZiAoJHNvbWVQcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgIH1cbiAgfVxuICB2YXIgJHVzZURlZmF1bHRzID0gaXQub3B0cy51c2VEZWZhdWx0cyAmJiAhaXQuY29tcG9zaXRlUnVsZTtcbiAgaWYgKCRzY2hlbWFLZXlzLmxlbmd0aCkge1xuICAgIHZhciBhcnI0ID0gJHNjaGVtYUtleXM7XG4gICAgaWYgKGFycjQpIHtcbiAgICAgIHZhciAkcHJvcGVydHlLZXksIGk0ID0gLTEsXG4gICAgICAgIGw0ID0gYXJyNC5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGk0IDwgbDQpIHtcbiAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyNFtpNCArPSAxXTtcbiAgICAgICAgdmFyICRzY2ggPSAkc2NoZW1hWyRwcm9wZXJ0eUtleV07XG4gICAgICAgIGlmIChpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpIHtcbiAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAkcGFzc0RhdGEgPSAkZGF0YSArICRwcm9wLFxuICAgICAgICAgICAgJGhhc0RlZmF1bHQgPSAkdXNlRGVmYXVsdHMgJiYgJHNjaC5kZWZhdWx0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICRwcm9wO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyBpdC51dGlsLmVzY2FwZUZyYWdtZW50KCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aChpdC5lcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSBpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgICAgICAgICRjb2RlID0gaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSk7XG4gICAgICAgICAgICB2YXIgJHVzZURhdGEgPSAkcGFzc0RhdGE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciAkdXNlRGF0YSA9ICRuZXh0RGF0YTtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRoYXNEZWZhdWx0KSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCRyZXF1aXJlZEhhc2ggJiYgJHJlcXVpcmVkSGFzaFskcHJvcGVydHlLZXldKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCkgeyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IGZhbHNlOyAnO1xuICAgICAgICAgICAgICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGgsXG4gICAgICAgICAgICAgICAgJGN1cnJFcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGgsXG4gICAgICAgICAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9IGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGgoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvcmVxdWlyZWQnO1xuICAgICAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9ICRjdXJyRXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICAgICAgaXQuZXJyb3JQYXRoID0gJGN1cnJlbnRFcnJvclBhdGg7XG4gICAgICAgICAgICAgIG91dCArPSAnIH0gZWxzZSB7ICc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCkgeyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7IH0gZWxzZSB7ICc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHVzZURhdGEpICsgJyAhPT0gdW5kZWZpbmVkKSB7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGNvZGUpICsgJyB9ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciBhcnI1ID0gJHBQcm9wZXJ0eUtleXM7XG4gIGlmIChhcnI1KSB7XG4gICAgdmFyICRwUHJvcGVydHksIGk1ID0gLTEsXG4gICAgICBsNSA9IGFycjUubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoaTUgPCBsNSkge1xuICAgICAgJHBQcm9wZXJ0eSA9IGFycjVbaTUgKz0gMV07XG4gICAgICB2YXIgJHNjaCA9ICRwUHJvcGVydGllc1skcFByb3BlcnR5XTtcbiAgICAgIGlmIChpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpIHtcbiAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcucGF0dGVyblByb3BlcnRpZXMnICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkcFByb3BlcnR5KTtcbiAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9wYXR0ZXJuUHJvcGVydGllcy8nICsgaXQudXRpbC5lc2NhcGVGcmFnbWVudCgkcFByb3BlcnR5KTtcbiAgICAgICAgb3V0ICs9ICcgZm9yICh2YXIgJyArICgka2V5KSArICcgaW4gJyArICgkZGF0YSkgKyAnKSB7ICAnO1xuICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsICcgKyAoJGtleSkgKyAnKSkgY29udGludWU7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXNlUGF0dGVybigkcFByb3BlcnR5KSkgKyAnLnRlc3QoJyArICgka2V5KSArICcpKSB7ICc7XG4gICAgICAgICRpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAka2V5ICsgJ10nO1xuICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgZWxzZSAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGl0Lm9wdHMudjUpIHtcbiAgICB2YXIgYXJyNiA9ICRwZ1Byb3BlcnR5S2V5cztcbiAgICBpZiAoYXJyNikge1xuICAgICAgdmFyICRwZ1Byb3BlcnR5LCBpNiA9IC0xLFxuICAgICAgICBsNiA9IGFycjYubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlIChpNiA8IGw2KSB7XG4gICAgICAgICRwZ1Byb3BlcnR5ID0gYXJyNltpNiArPSAxXTtcbiAgICAgICAgdmFyICRwZ1NjaGVtYSA9ICRwZ1Byb3BlcnRpZXNbJHBnUHJvcGVydHldLFxuICAgICAgICAgICRzY2ggPSAkcGdTY2hlbWEuc2NoZW1hO1xuICAgICAgICBpZiAoaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpKSB7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5wYXR0ZXJuR3JvdXBzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHBnUHJvcGVydHkpICsgJy5zY2hlbWEnO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvcGF0dGVybkdyb3Vwcy8nICsgaXQudXRpbC5lc2NhcGVGcmFnbWVudCgkcGdQcm9wZXJ0eSkgKyAnL3NjaGVtYSc7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIHBnUHJvcENvdW50JyArICgkbHZsKSArICcgPSAwOyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgICc7XG4gICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsICcgKyAoJGtleSkgKyAnKSkgY29udGludWU7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKGl0LnVzZVBhdHRlcm4oJHBnUHJvcGVydHkpKSArICcudGVzdCgnICsgKCRrZXkpICsgJykpIHsgcGdQcm9wQ291bnQnICsgKCRsdmwpICsgJysrOyAnO1xuICAgICAgICAgICRpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRrZXkgKyAnXSc7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRrZXk7XG4gICAgICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dERhdGEpICsgJyA9ICcgKyAoJHBhc3NEYXRhKSArICc7ICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKCRuZXh0VmFsaWQpICsgJykgYnJlYWs7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgZWxzZSAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gICc7XG4gICAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgJHBnTWluID0gJHBnU2NoZW1hLm1pbmltdW0sXG4gICAgICAgICAgICAkcGdNYXggPSAkcGdTY2hlbWEubWF4aW11bTtcbiAgICAgICAgICBpZiAoJHBnTWluICE9PSB1bmRlZmluZWQgfHwgJHBnTWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgICAgIHZhciAkY3VyckVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICAgIGlmICgkcGdNaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB2YXIgJGxpbWl0ID0gJHBnTWluLFxuICAgICAgICAgICAgICAgICRyZWFzb24gPSAnbWluaW11bScsXG4gICAgICAgICAgICAgICAgJG1vcmVPckxlc3MgPSAnbGVzcyc7XG4gICAgICAgICAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSBwZ1Byb3BDb3VudCcgKyAoJGx2bCkgKyAnID49ICcgKyAoJHBnTWluKSArICc7ICc7XG4gICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvcGF0dGVybkdyb3Vwcy9taW5pbXVtJztcbiAgICAgICAgICAgICAgb3V0ICs9ICcgIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gICAgICAgICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncGF0dGVybkdyb3VwcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcmVhc29uOiBcXCcnICsgKCRyZWFzb24pICsgJ1xcJywgbGltaXQ6ICcgKyAoJGxpbWl0KSArICcsIHBhdHRlcm46IFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHBnUHJvcGVydHkpKSArICdcXCcgfSAnO1xuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGhhdmUgJyArICgkbW9yZU9yTGVzcykgKyAnIHRoYW4gJyArICgkbGltaXQpICsgJyBwcm9wZXJ0aWVzIG1hdGNoaW5nIHBhdHRlcm4gXCInICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwZ1Byb3BlcnR5KSkgKyAnXCJcXCcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgICBpZiAoJHBnTWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyBlbHNlICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgkcGdNYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB2YXIgJGxpbWl0ID0gJHBnTWF4LFxuICAgICAgICAgICAgICAgICRyZWFzb24gPSAnbWF4aW11bScsXG4gICAgICAgICAgICAgICAgJG1vcmVPckxlc3MgPSAnbW9yZSc7XG4gICAgICAgICAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSBwZ1Byb3BDb3VudCcgKyAoJGx2bCkgKyAnIDw9ICcgKyAoJHBnTWF4KSArICc7ICc7XG4gICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvcGF0dGVybkdyb3Vwcy9tYXhpbXVtJztcbiAgICAgICAgICAgICAgb3V0ICs9ICcgIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gICAgICAgICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncGF0dGVybkdyb3VwcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcmVhc29uOiBcXCcnICsgKCRyZWFzb24pICsgJ1xcJywgbGltaXQ6ICcgKyAoJGxpbWl0KSArICcsIHBhdHRlcm46IFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHBnUHJvcGVydHkpKSArICdcXCcgfSAnO1xuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGhhdmUgJyArICgkbW9yZU9yTGVzcykgKyAnIHRoYW4gJyArICgkbGltaXQpICsgJyBwcm9wZXJ0aWVzIG1hdGNoaW5nIHBhdHRlcm4gXCInICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwZ1Byb3BlcnR5KSkgKyAnXCJcXCcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGVyclNjaGVtYVBhdGggPSAkY3VyckVyclNjaGVtYVBhdGg7XG4gICAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkdmFsaWQpICsgJykgeyAnO1xuICAgICAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7JztcbiAgfVxuICBvdXQgPSBpdC51dGlsLmNsZWFuVXBDb2RlKG91dCk7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3JlZihpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRhc3luYywgJHJlZkNvZGU7XG4gIGlmICgkc2NoZW1hID09ICcjJyB8fCAkc2NoZW1hID09ICcjLycpIHtcbiAgICBpZiAoaXQuaXNSb290KSB7XG4gICAgICAkYXN5bmMgPSBpdC5hc3luYztcbiAgICAgICRyZWZDb2RlID0gJ3ZhbGlkYXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgJGFzeW5jID0gaXQucm9vdC5zY2hlbWEuJGFzeW5jID09PSB0cnVlO1xuICAgICAgJHJlZkNvZGUgPSAncm9vdC5yZWZWYWxbMF0nO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgJHJlZlZhbCA9IGl0LnJlc29sdmVSZWYoaXQuYmFzZUlkLCAkc2NoZW1hLCBpdC5pc1Jvb3QpO1xuICAgIGlmICgkcmVmVmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciAkbWVzc2FnZSA9ICdjYW5cXCd0IHJlc29sdmUgcmVmZXJlbmNlICcgKyAkc2NoZW1hICsgJyBmcm9tIGlkICcgKyBpdC5iYXNlSWQ7XG4gICAgICBpZiAoaXQub3B0cy5taXNzaW5nUmVmcyA9PSAnZmFpbCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJG1lc3NhZ2UpO1xuICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJyRyZWYnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHJlZjogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3Rlcygkc2NoZW1hKSkgKyAnXFwnIH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnY2FuXFxcXFxcJ3QgcmVzb2x2ZSByZWZlcmVuY2UgJyArIChpdC51dGlsLmVzY2FwZVF1b3Rlcygkc2NoZW1hKSkgKyAnXFwnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoZmFsc2UpIHsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpdC5vcHRzLm1pc3NpbmdSZWZzID09ICdpZ25vcmUnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCRtZXNzYWdlKTtcbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgJGVycm9yID0gbmV3IEVycm9yKCRtZXNzYWdlKTtcbiAgICAgICAgJGVycm9yLm1pc3NpbmdSZWYgPSBpdC5yZXNvbHZlLnVybChpdC5iYXNlSWQsICRzY2hlbWEpO1xuICAgICAgICAkZXJyb3IubWlzc2luZ1NjaGVtYSA9IGl0LnJlc29sdmUubm9ybWFsaXplSWQoaXQucmVzb2x2ZS5mdWxsUGF0aCgkZXJyb3IubWlzc2luZ1JlZikpO1xuICAgICAgICB0aHJvdyAkZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgkcmVmVmFsLmlubGluZSkge1xuICAgICAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gICAgICAkaXQubGV2ZWwrKztcbiAgICAgIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgICAgICRpdC5zY2hlbWEgPSAkcmVmVmFsLnNjaGVtYTtcbiAgICAgICRpdC5zY2hlbWFQYXRoID0gJyc7XG4gICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRzY2hlbWE7XG4gICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpLnJlcGxhY2UoL3ZhbGlkYXRlXFwuc2NoZW1hL2csICRyZWZWYWwuY29kZSk7XG4gICAgICBvdXQgKz0gJyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAkYXN5bmMgPSAkcmVmVmFsLiRhc3luYyA9PT0gdHJ1ZTtcbiAgICAgICRyZWZDb2RlID0gJHJlZlZhbC5jb2RlO1xuICAgIH1cbiAgfVxuICBpZiAoJHJlZkNvZGUpIHtcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7XG4gICAgaWYgKGl0Lm9wdHMucGFzc0NvbnRleHQpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHJlZkNvZGUpICsgJy5jYWxsKHRoaXMsICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHJlZkNvZGUpICsgJyggJztcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArICgkZGF0YSkgKyAnLCAoZGF0YVBhdGggfHwgXFwnXFwnKSc7XG4gICAgaWYgKGl0LmVycm9yUGF0aCAhPSAnXCJcIicpIHtcbiAgICAgIG91dCArPSAnICsgJyArIChpdC5lcnJvclBhdGgpO1xuICAgIH1cbiAgICB2YXIgJHBhcmVudERhdGEgPSAkZGF0YUx2bCA/ICdkYXRhJyArICgoJGRhdGFMdmwgLSAxKSB8fCAnJykgOiAncGFyZW50RGF0YScsXG4gICAgICAkcGFyZW50RGF0YVByb3BlcnR5ID0gJGRhdGFMdmwgPyBpdC5kYXRhUGF0aEFyclskZGF0YUx2bF0gOiAncGFyZW50RGF0YVByb3BlcnR5JztcbiAgICBvdXQgKz0gJyAsICcgKyAoJHBhcmVudERhdGEpICsgJyAsICcgKyAoJHBhcmVudERhdGFQcm9wZXJ0eSkgKyAnLCByb290RGF0YSkgICc7XG4gICAgdmFyIF9fY2FsbFZhbGlkYXRlID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCRhc3luYykge1xuICAgICAgaWYgKCFpdC5hc3luYykgdGhyb3cgbmV3IEVycm9yKCdhc3luYyBzY2hlbWEgcmVmZXJlbmNlZCBieSBzeW5jIHNjaGVtYScpO1xuICAgICAgb3V0ICs9ICcgdHJ5IHsgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAndmFyICcgKyAoJHZhbGlkKSArICcgPSc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAnICsgKGl0LnlpZWxkQXdhaXQpICsgJyAnICsgKF9fY2FsbFZhbGlkYXRlKSArICc7IH0gY2F0Y2ggKGUpIHsgaWYgKCEoZSBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikpIHRocm93IGU7IGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gZS5lcnJvcnM7IGVsc2UgdkVycm9ycyA9IHZFcnJvcnMuY29uY2F0KGUuZXJyb3JzKTsgZXJyb3JzID0gdkVycm9ycy5sZW5ndGg7IH0gJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCR2YWxpZCkgKyAnKSB7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGlmICghJyArIChfX2NhbGxWYWxpZGF0ZSkgKyAnKSB7IGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gJyArICgkcmVmQ29kZSkgKyAnLmVycm9yczsgZWxzZSB2RXJyb3JzID0gdkVycm9ycy5jb25jYXQoJyArICgkcmVmQ29kZSkgKyAnLmVycm9ycyk7IGVycm9ycyA9IHZFcnJvcnMubGVuZ3RoOyB9ICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcmVxdWlyZWQoaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkdlNjaGVtYSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgaWYgKCEkaXNEYXRhKSB7XG4gICAgaWYgKCRzY2hlbWEubGVuZ3RoIDwgaXQub3B0cy5sb29wUmVxdWlyZWQgJiYgaXQuc2NoZW1hLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMoaXQuc2NoZW1hLnByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgICAgdmFyICRyZXF1aXJlZCA9IFtdO1xuICAgICAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICAgICAgaWYgKGFycjEpIHtcbiAgICAgICAgdmFyICRwcm9wZXJ0eSwgaTEgPSAtMSxcbiAgICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKGkxIDwgbDEpIHtcbiAgICAgICAgICAkcHJvcGVydHkgPSBhcnIxW2kxICs9IDFdO1xuICAgICAgICAgIHZhciAkcHJvcGVydHlTY2ggPSBpdC5zY2hlbWEucHJvcGVydGllc1skcHJvcGVydHldO1xuICAgICAgICAgIGlmICghKCRwcm9wZXJ0eVNjaCAmJiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRwcm9wZXJ0eVNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICAgICRyZXF1aXJlZFskcmVxdWlyZWQubGVuZ3RoXSA9ICRwcm9wZXJ0eTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyICRyZXF1aXJlZCA9ICRzY2hlbWE7XG4gICAgfVxuICB9XG4gIGlmICgkaXNEYXRhIHx8ICRyZXF1aXJlZC5sZW5ndGgpIHtcbiAgICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGgsXG4gICAgICAkbG9vcFJlcXVpcmVkID0gJGlzRGF0YSB8fCAkcmVxdWlyZWQubGVuZ3RoID49IGl0Lm9wdHMubG9vcFJlcXVpcmVkO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyB2YXIgbWlzc2luZycgKyAoJGx2bCkgKyAnOyAnO1xuICAgICAgaWYgKCRsb29wUmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKCEkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZTY2hlbWEpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsgJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgJGkgPSAnaScgKyAkbHZsLFxuICAgICAgICAgICRwcm9wZXJ0eVBhdGggPSAnc2NoZW1hJyArICRsdmwgKyAnWycgKyAkaSArICddJyxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKCRjdXJyZW50RXJyb3JQYXRoLCAkcHJvcGVydHlQYXRoLCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyAnO1xuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnIGlmIChzY2hlbWEnICsgKCRsdmwpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hJyArICgkbHZsKSArICcpKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2Ugeyc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgZm9yICh2YXIgJyArICgkaSkgKyAnID0gMDsgJyArICgkaSkgKyAnIDwgJyArICgkdlNjaGVtYSkgKyAnLmxlbmd0aDsgJyArICgkaSkgKyAnKyspIHsgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJGRhdGEpICsgJ1snICsgKCR2U2NoZW1hKSArICdbJyArICgkaSkgKyAnXV0gIT09IHVuZGVmaW5lZDsgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSBicmVhazsgfSAnO1xuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnICB9ICAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnICBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9IGVsc2UgeyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCAnO1xuICAgICAgICB2YXIgYXJyMiA9ICRyZXF1aXJlZDtcbiAgICAgICAgaWYgKGFycjIpIHtcbiAgICAgICAgICB2YXIgXyRwcm9wZXJ0eSwgJGkgPSAtMSxcbiAgICAgICAgICAgIGwyID0gYXJyMi5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlICgkaSA8IGwyKSB7XG4gICAgICAgICAgICBfJHByb3BlcnR5ID0gYXJyMlskaSArPSAxXTtcbiAgICAgICAgICAgIGlmICgkaSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eShfJHByb3BlcnR5KTtcbiAgICAgICAgICAgIG91dCArPSAnICggJyArICgkZGF0YSkgKyAoJHByb3ApICsgJyA9PT0gdW5kZWZpbmVkICYmIChtaXNzaW5nJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoaXQub3B0cy5qc29uUG9pbnRlcnMgPyBfJHByb3BlcnR5IDogJHByb3ApKSArICcpICkgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcpIHsgICc7XG4gICAgICAgIHZhciAkcHJvcGVydHlQYXRoID0gJ21pc3NpbmcnICsgJGx2bCxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC5vcHRzLmpzb25Qb2ludGVycyA/IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIHRydWUpIDogJGN1cnJlbnRFcnJvclBhdGggKyAnICsgJyArICRwcm9wZXJ0eVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSBlbHNlIHsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCRsb29wUmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKCEkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZTY2hlbWEpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsgJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgJGkgPSAnaScgKyAkbHZsLFxuICAgICAgICAgICRwcm9wZXJ0eVBhdGggPSAnc2NoZW1hJyArICRsdmwgKyAnWycgKyAkaSArICddJyxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKCRjdXJyZW50RXJyb3JQYXRoLCAkcHJvcGVydHlQYXRoLCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkdlNjaGVtYSkgKyAnICYmICFBcnJheS5pc0FycmF5KCcgKyAoJHZTY2hlbWEpICsgJykpIHsgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9IGVsc2UgaWYgKCcgKyAoJHZTY2hlbWEpICsgJyAhPT0gdW5kZWZpbmVkKSB7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgZm9yICh2YXIgJyArICgkaSkgKyAnID0gMDsgJyArICgkaSkgKyAnIDwgJyArICgkdlNjaGVtYSkgKyAnLmxlbmd0aDsgJyArICgkaSkgKyAnKyspIHsgaWYgKCcgKyAoJGRhdGEpICsgJ1snICsgKCR2U2NoZW1hKSArICdbJyArICgkaSkgKyAnXV0gPT09IHVuZGVmaW5lZCkgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9IH0gJztcbiAgICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyAgfSAgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGFycjMgPSAkcmVxdWlyZWQ7XG4gICAgICAgIGlmIChhcnIzKSB7XG4gICAgICAgICAgdmFyICRyZXFQcm9wZXJ0eSwgaTMgPSAtMSxcbiAgICAgICAgICAgIGwzID0gYXJyMy5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChpMyA8IGwzKSB7XG4gICAgICAgICAgICAkcmVxUHJvcGVydHkgPSBhcnIzW2kzICs9IDFdO1xuICAgICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eSgkcmVxUHJvcGVydHkpLFxuICAgICAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gaXQudXRpbC5lc2NhcGVRdW90ZXMoJHJlcVByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoKCRjdXJyZW50RXJyb3JQYXRoLCAkcmVxUHJvcGVydHksIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhKSArICgkcHJvcCkgKyAnID09PSB1bmRlZmluZWQpIHsgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaXQuZXJyb3JQYXRoID0gJGN1cnJlbnRFcnJvclBhdGg7XG4gIH0gZWxzZSBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGlmICh0cnVlKSB7JztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9zd2l0Y2goaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkaWZQYXNzZWQgPSAnaWZQYXNzZWQnICsgaXQubGV2ZWwsXG4gICAgJGN1cnJlbnRCYXNlSWQgPSAkaXQuYmFzZUlkLFxuICAgICRzaG91bGRDb250aW51ZTtcbiAgb3V0ICs9ICd2YXIgJyArICgkaWZQYXNzZWQpICsgJzsnO1xuICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gIGlmIChhcnIxKSB7XG4gICAgdmFyICRzY2gsICRjYXNlSW5kZXggPSAtMSxcbiAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgIHdoaWxlICgkY2FzZUluZGV4IDwgbDEpIHtcbiAgICAgICRzY2ggPSBhcnIxWyRjYXNlSW5kZXggKz0gMV07XG4gICAgICBpZiAoJGNhc2VJbmRleCAmJiAhJHNob3VsZENvbnRpbnVlKSB7XG4gICAgICAgIG91dCArPSAnIGlmICghJyArICgkaWZQYXNzZWQpICsgJykgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgICBpZiAoJHNjaC5pZiAmJiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2guaWYsIGl0LlJVTEVTLmFsbCkpIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsgICAnO1xuICAgICAgICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gICAgICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgICAgICRpdC5jcmVhdGVFcnJvcnMgPSBmYWxzZTtcbiAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2guaWY7XG4gICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkY2FzZUluZGV4ICsgJ10uaWYnO1xuICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoICsgJy8nICsgJGNhc2VJbmRleCArICcvaWYnO1xuICAgICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICAkaXQuY3JlYXRlRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkaWZQYXNzZWQpICsgJyA9ICcgKyAoJG5leHRWYWxpZCkgKyAnOyBpZiAoJyArICgkaWZQYXNzZWQpICsgJykgeyAgJztcbiAgICAgICAgaWYgKHR5cGVvZiAkc2NoLnRoZW4gPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgaWYgKCRzY2gudGhlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3N3aXRjaCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgY2FzZUluZGV4OiAnICsgKCRjYXNlSW5kZXgpICsgJyB9ICc7XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIHBhc3MgXCJzd2l0Y2hcIiBrZXl3b3JkIHZhbGlkYXRpb25cXCcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9ICcgKyAoJHNjaC50aGVuKSArICc7ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2gudGhlbjtcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJ1snICsgJGNhc2VJbmRleCArICddLnRoZW4nO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkY2FzZUluZGV4ICsgJy90aGVuJztcbiAgICAgICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgIH0gZWxzZSB7ICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9IH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJGlmUGFzc2VkKSArICcgPSB0cnVlOyAgJztcbiAgICAgICAgaWYgKHR5cGVvZiAkc2NoLnRoZW4gPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgaWYgKCRzY2gudGhlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3N3aXRjaCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgY2FzZUluZGV4OiAnICsgKCRjYXNlSW5kZXgpICsgJyB9ICc7XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIHBhc3MgXCJzd2l0Y2hcIiBrZXl3b3JkIHZhbGlkYXRpb25cXCcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9ICcgKyAoJHNjaC50aGVuKSArICc7ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2gudGhlbjtcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJ1snICsgJGNhc2VJbmRleCArICddLnRoZW4nO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkY2FzZUluZGV4ICsgJy90aGVuJztcbiAgICAgICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICRzaG91bGRDb250aW51ZSA9ICRzY2guY29udGludWVcbiAgICB9XG4gIH1cbiAgb3V0ICs9ICcnICsgKCRjbG9zaW5nQnJhY2VzKSArICd2YXIgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJG5leHRWYWxpZCkgKyAnOyAnO1xuICBvdXQgPSBpdC51dGlsLmNsZWFuVXBDb2RlKG91dCk7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3VuaXF1ZUl0ZW1zKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy52NSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICBpZiAoKCRzY2hlbWEgfHwgJGlzRGF0YSkgJiYgaXQub3B0cy51bmlxdWVJdGVtcyAhPT0gZmFsc2UpIHtcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICc7IGlmICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSBmYWxzZSB8fCAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdib29sZWFuXFwnKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2UgeyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB2YXIgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGlmICgnICsgKCRkYXRhKSArICcubGVuZ3RoID4gMSkgeyB2YXIgaSA9ICcgKyAoJGRhdGEpICsgJy5sZW5ndGgsIGo7IG91dGVyOiBmb3IgKDtpLS07KSB7IGZvciAoaiA9IGk7IGotLTspIHsgaWYgKGVxdWFsKCcgKyAoJGRhdGEpICsgJ1tpXSwgJyArICgkZGF0YSkgKyAnW2pdKSkgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGJyZWFrIG91dGVyOyB9IH0gfSB9ICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnICB9ICAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCd1bmlxdWVJdGVtcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgaTogaSwgajogaiB9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGhhdmUgZHVwbGljYXRlIGl0ZW1zIChpdGVtcyAjIyBcXCcgKyBqICsgXFwnIGFuZCBcXCcgKyBpICsgXFwnIGFyZSBpZGVudGljYWwpXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3ZhbGlkYXRlKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyc7XG4gIHZhciAkYXN5bmMgPSBpdC5zY2hlbWEuJGFzeW5jID09PSB0cnVlO1xuICBpZiAoaXQuaXNUb3ApIHtcbiAgICB2YXIgJHRvcCA9IGl0LmlzVG9wLFxuICAgICAgJGx2bCA9IGl0LmxldmVsID0gMCxcbiAgICAgICRkYXRhTHZsID0gaXQuZGF0YUxldmVsID0gMCxcbiAgICAgICRkYXRhID0gJ2RhdGEnO1xuICAgIGl0LnJvb3RJZCA9IGl0LnJlc29sdmUuZnVsbFBhdGgoaXQucm9vdC5zY2hlbWEuaWQpO1xuICAgIGl0LmJhc2VJZCA9IGl0LmJhc2VJZCB8fCBpdC5yb290SWQ7XG4gICAgaWYgKCRhc3luYykge1xuICAgICAgaXQuYXN5bmMgPSB0cnVlO1xuICAgICAgdmFyICRlczcgPSBpdC5vcHRzLmFzeW5jID09ICdlczcnO1xuICAgICAgaXQueWllbGRBd2FpdCA9ICRlczcgPyAnYXdhaXQnIDogJ3lpZWxkJztcbiAgICB9XG4gICAgZGVsZXRlIGl0LmlzVG9wO1xuICAgIGl0LmRhdGFQYXRoQXJyID0gW3VuZGVmaW5lZF07XG4gICAgb3V0ICs9ICcgdmFyIHZhbGlkYXRlID0gJztcbiAgICBpZiAoJGFzeW5jKSB7XG4gICAgICBpZiAoJGVzNykge1xuICAgICAgICBvdXQgKz0gJyAoYXN5bmMgZnVuY3Rpb24gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpdC5vcHRzLmFzeW5jID09ICdjbyonKSB7XG4gICAgICAgICAgb3V0ICs9ICdjby53cmFwJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyhmdW5jdGlvbiogJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgKGZ1bmN0aW9uICc7XG4gICAgfVxuICAgIG91dCArPSAnIChkYXRhLCBkYXRhUGF0aCwgcGFyZW50RGF0YSwgcGFyZW50RGF0YVByb3BlcnR5LCByb290RGF0YSkgeyBcXCd1c2Ugc3RyaWN0XFwnOyB2YXIgdkVycm9ycyA9IG51bGw7ICc7XG4gICAgb3V0ICs9ICcgdmFyIGVycm9ycyA9IDA7ICAgICAnO1xuICAgIG91dCArPSAnIGlmIChyb290RGF0YSA9PT0gdW5kZWZpbmVkKSByb290RGF0YSA9IGRhdGE7JztcbiAgfSBlbHNlIHtcbiAgICB2YXIgJGx2bCA9IGl0LmxldmVsLFxuICAgICAgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWwsXG4gICAgICAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gICAgaWYgKGl0LnNjaGVtYS5pZCkgaXQuYmFzZUlkID0gaXQucmVzb2x2ZS51cmwoaXQuYmFzZUlkLCBpdC5zY2hlbWEuaWQpO1xuICAgIGlmICgkYXN5bmMgJiYgIWl0LmFzeW5jKSB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jIHNjaGVtYSBpbiBzeW5jIHNjaGVtYScpO1xuICAgIG91dCArPSAnIHZhciBlcnJzXycgKyAoJGx2bCkgKyAnID0gZXJyb3JzOyc7XG4gIH1cbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsLFxuICAgICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnMsXG4gICAgJGNsb3NpbmdCcmFjZXMxID0gJycsXG4gICAgJGNsb3NpbmdCcmFjZXMyID0gJyc7XG4gIHZhciAkdHlwZVNjaGVtYSA9IGl0LnNjaGVtYS50eXBlLFxuICAgICR0eXBlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoJHR5cGVTY2hlbWEpO1xuICBpZiAoJHR5cGVTY2hlbWEgJiYgaXQub3B0cy5jb2VyY2VUeXBlcykge1xuICAgIHZhciAkY29lcmNlVG9UeXBlcyA9IGl0LnV0aWwuY29lcmNlVG9UeXBlcyhpdC5vcHRzLmNvZXJjZVR5cGVzLCAkdHlwZVNjaGVtYSk7XG4gICAgaWYgKCRjb2VyY2VUb1R5cGVzKSB7XG4gICAgICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50eXBlJyxcbiAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy90eXBlJyxcbiAgICAgICAgJG1ldGhvZCA9ICR0eXBlSXNBcnJheSA/ICdjaGVja0RhdGFUeXBlcycgOiAnY2hlY2tEYXRhVHlwZSc7XG4gICAgICBvdXQgKz0gJyBpZiAoJyArIChpdC51dGlsWyRtZXRob2RdKCR0eXBlU2NoZW1hLCAkZGF0YSwgdHJ1ZSkpICsgJykgeyAgJztcbiAgICAgIHZhciAkZGF0YVR5cGUgPSAnZGF0YVR5cGUnICsgJGx2bCxcbiAgICAgICAgJGNvZXJjZWQgPSAnY29lcmNlZCcgKyAkbHZsO1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJGRhdGFUeXBlKSArICcgPSB0eXBlb2YgJyArICgkZGF0YSkgKyAnOyAnO1xuICAgICAgaWYgKGl0Lm9wdHMuY29lcmNlVHlwZXMgPT0gJ2FycmF5Jykge1xuICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdvYmplY3RcXCcgJiYgQXJyYXkuaXNBcnJheSgnICsgKCRkYXRhKSArICcpKSAnICsgKCRkYXRhVHlwZSkgKyAnID0gXFwnYXJyYXlcXCc7ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB2YXIgJyArICgkY29lcmNlZCkgKyAnID0gdW5kZWZpbmVkOyAnO1xuICAgICAgdmFyICRicmFjZXNDb2VyY2lvbiA9ICcnO1xuICAgICAgdmFyIGFycjEgPSAkY29lcmNlVG9UeXBlcztcbiAgICAgIGlmIChhcnIxKSB7XG4gICAgICAgIHZhciAkdHlwZSwgJGkgPSAtMSxcbiAgICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKCRpIDwgbDEpIHtcbiAgICAgICAgICAkdHlwZSA9IGFycjFbJGkgKz0gMV07XG4gICAgICAgICAgaWYgKCRpKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkY29lcmNlZCkgKyAnID09PSB1bmRlZmluZWQpIHsgJztcbiAgICAgICAgICAgICRicmFjZXNDb2VyY2lvbiArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLmNvZXJjZVR5cGVzID09ICdhcnJheScgJiYgJHR5cGUgIT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnYXJyYXlcXCcgJiYgJyArICgkZGF0YSkgKyAnLmxlbmd0aCA9PSAxKSB7ICcgKyAoJGNvZXJjZWQpICsgJyA9ICcgKyAoJGRhdGEpICsgJyA9ICcgKyAoJGRhdGEpICsgJ1swXTsgJyArICgkZGF0YVR5cGUpICsgJyA9IHR5cGVvZiAnICsgKCRkYXRhKSArICc7ICB9ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkdHlwZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnbnVtYmVyXFwnIHx8ICcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnYm9vbGVhblxcJykgJyArICgkY29lcmNlZCkgKyAnID0gXFwnXFwnICsgJyArICgkZGF0YSkgKyAnOyBlbHNlIGlmICgnICsgKCRkYXRhKSArICcgPT09IG51bGwpICcgKyAoJGNvZXJjZWQpICsgJyA9IFxcJ1xcJzsgJztcbiAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdudW1iZXInIHx8ICR0eXBlID09ICdpbnRlZ2VyJykge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnYm9vbGVhblxcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IG51bGwgfHwgKCcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnc3RyaW5nXFwnICYmICcgKyAoJGRhdGEpICsgJyAmJiAnICsgKCRkYXRhKSArICcgPT0gKycgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgaWYgKCR0eXBlID09ICdpbnRlZ2VyJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAmJiAhKCcgKyAoJGRhdGEpICsgJyAlIDEpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnKSkgJyArICgkY29lcmNlZCkgKyAnID0gKycgKyAoJGRhdGEpICsgJzsgJztcbiAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdib29sZWFuJykge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGEpICsgJyA9PT0gXFwnZmFsc2VcXCcgfHwgJyArICgkZGF0YSkgKyAnID09PSAwIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gbnVsbCkgJyArICgkY29lcmNlZCkgKyAnID0gZmFsc2U7IGVsc2UgaWYgKCcgKyAoJGRhdGEpICsgJyA9PT0gXFwndHJ1ZVxcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IDEpICcgKyAoJGNvZXJjZWQpICsgJyA9IHRydWU7ICc7XG4gICAgICAgICAgfSBlbHNlIGlmICgkdHlwZSA9PSAnbnVsbCcpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhKSArICcgPT09IFxcJ1xcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IDAgfHwgJyArICgkZGF0YSkgKyAnID09PSBmYWxzZSkgJyArICgkY29lcmNlZCkgKyAnID0gbnVsbDsgJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0Lm9wdHMuY29lcmNlVHlwZXMgPT0gJ2FycmF5JyAmJiAkdHlwZSA9PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdzdHJpbmdcXCcgfHwgJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdudW1iZXJcXCcgfHwgJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdib29sZWFuXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PSBudWxsKSAnICsgKCRjb2VyY2VkKSArICcgPSBbJyArICgkZGF0YSkgKyAnXTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG91dCArPSAnICcgKyAoJGJyYWNlc0NvZXJjaW9uKSArICcgaWYgKCcgKyAoJGNvZXJjZWQpICsgJyA9PT0gdW5kZWZpbmVkKSB7ICAgJztcbiAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3R5cGUnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHR5cGU6IFxcJyc7XG4gICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEuam9pbihcIixcIikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICdcXCcgfSAnO1xuICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSAnO1xuICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSBlbHNlIHsgICc7XG4gICAgICB2YXIgJHBhcmVudERhdGEgPSAkZGF0YUx2bCA/ICdkYXRhJyArICgoJGRhdGFMdmwgLSAxKSB8fCAnJykgOiAncGFyZW50RGF0YScsXG4gICAgICAgICRwYXJlbnREYXRhUHJvcGVydHkgPSAkZGF0YUx2bCA/IGl0LmRhdGFQYXRoQXJyWyRkYXRhTHZsXSA6ICdwYXJlbnREYXRhUHJvcGVydHknO1xuICAgICAgb3V0ICs9ICcgJyArICgkZGF0YSkgKyAnID0gJyArICgkY29lcmNlZCkgKyAnOyAnO1xuICAgICAgaWYgKCEkZGF0YUx2bCkge1xuICAgICAgICBvdXQgKz0gJ2lmICgnICsgKCRwYXJlbnREYXRhKSArICcgIT09IHVuZGVmaW5lZCknO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgJyArICgkcGFyZW50RGF0YSkgKyAnWycgKyAoJHBhcmVudERhdGFQcm9wZXJ0eSkgKyAnXSA9ICcgKyAoJGNvZXJjZWQpICsgJzsgfSB9ICc7XG4gICAgfVxuICB9XG4gIHZhciAkcmVmS2V5d29yZHM7XG4gIGlmIChpdC5zY2hlbWEuJHJlZiAmJiAoJHJlZktleXdvcmRzID0gaXQudXRpbC5zY2hlbWFIYXNSdWxlc0V4Y2VwdChpdC5zY2hlbWEsIGl0LlJVTEVTLmFsbCwgJyRyZWYnKSkpIHtcbiAgICBpZiAoaXQub3B0cy5leHRlbmRSZWZzID09ICdmYWlsJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCckcmVmOiB2YWxpZGF0aW9uIGtleXdvcmRzIHVzZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIicpO1xuICAgIH0gZWxzZSBpZiAoaXQub3B0cy5leHRlbmRSZWZzID09ICdpZ25vcmUnKSB7XG4gICAgICAkcmVmS2V5d29yZHMgPSBmYWxzZTtcbiAgICAgIGNvbnNvbGUubG9nKCckcmVmOiBrZXl3b3JkcyBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJyArIGl0LmVyclNjaGVtYVBhdGggKyAnXCInKTtcbiAgICB9IGVsc2UgaWYgKGl0Lm9wdHMuZXh0ZW5kUmVmcyAhPT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coJyRyZWY6IGFsbCBrZXl3b3JkcyB1c2VkIGluIHNjaGVtYSBhdCBwYXRoIFwiJyArIGl0LmVyclNjaGVtYVBhdGggKyAnXCIuIEl0IHdpbGwgY2hhbmdlIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24sIHNlZSBpc3N1ZSAjMjYwLiBVc2Ugb3B0aW9uIHsgZXh0ZW5kUmVmczogdHJ1ZSB9IHRvIGtlZXAgY3VycmVudCBiZWhhdmlvdXInKTtcbiAgICB9XG4gIH1cbiAgaWYgKGl0LnNjaGVtYS4kcmVmICYmICEkcmVmS2V5d29yZHMpIHtcbiAgICBvdXQgKz0gJyAnICsgKGl0LlJVTEVTLmFsbC4kcmVmLmNvZGUoaXQsICckcmVmJykpICsgJyAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyB9IGlmIChlcnJvcnMgPT09ICc7XG4gICAgICBpZiAoJHRvcCkge1xuICAgICAgICBvdXQgKz0gJzAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICdlcnJzXycgKyAoJGx2bCk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJykgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMyICs9ICd9JztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGFycjIgPSBpdC5SVUxFUztcbiAgICBpZiAoYXJyMikge1xuICAgICAgdmFyICRydWxlc0dyb3VwLCBpMiA9IC0xLFxuICAgICAgICBsMiA9IGFycjIubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlIChpMiA8IGwyKSB7XG4gICAgICAgICRydWxlc0dyb3VwID0gYXJyMltpMiArPSAxXTtcbiAgICAgICAgaWYgKCRzaG91bGRVc2VHcm91cCgkcnVsZXNHcm91cCkpIHtcbiAgICAgICAgICBpZiAoJHJ1bGVzR3JvdXAudHlwZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXRpbC5jaGVja0RhdGFUeXBlKCRydWxlc0dyb3VwLnR5cGUsICRkYXRhKSkgKyAnKSB7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnVzZURlZmF1bHRzICYmICFpdC5jb21wb3NpdGVSdWxlKSB7XG4gICAgICAgICAgICBpZiAoJHJ1bGVzR3JvdXAudHlwZSA9PSAnb2JqZWN0JyAmJiBpdC5zY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICAgICAgICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICRzY2hlbWFLZXlzID0gT2JqZWN0LmtleXMoJHNjaGVtYSk7XG4gICAgICAgICAgICAgIHZhciBhcnIzID0gJHNjaGVtYUtleXM7XG4gICAgICAgICAgICAgIGlmIChhcnIzKSB7XG4gICAgICAgICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTMgPSAtMSxcbiAgICAgICAgICAgICAgICAgIGwzID0gYXJyMy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpMyA8IGwzKSB7XG4gICAgICAgICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIzW2kzICs9IDFdO1xuICAgICAgICAgICAgICAgICAgdmFyICRzY2ggPSAkc2NoZW1hWyRwcm9wZXJ0eUtleV07XG4gICAgICAgICAgICAgICAgICBpZiAoJHNjaC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyAgaWYgKCcgKyAoJHBhc3NEYXRhKSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkcGFzc0RhdGEpICsgJyA9ICc7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVzZURlZmF1bHRzID09ICdzaGFyZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51c2VEZWZhdWx0KCRzY2guZGVmYXVsdCkpICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICcgKyAoSlNPTi5zdHJpbmdpZnkoJHNjaC5kZWZhdWx0KSkgKyAnICc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICc7ICc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCRydWxlc0dyb3VwLnR5cGUgPT0gJ2FycmF5JyAmJiBBcnJheS5pc0FycmF5KGl0LnNjaGVtYS5pdGVtcykpIHtcbiAgICAgICAgICAgICAgdmFyIGFycjQgPSBpdC5zY2hlbWEuaXRlbXM7XG4gICAgICAgICAgICAgIGlmIChhcnI0KSB7XG4gICAgICAgICAgICAgICAgdmFyICRzY2gsICRpID0gLTEsXG4gICAgICAgICAgICAgICAgICBsNCA9IGFycjQubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoJGkgPCBsNCkge1xuICAgICAgICAgICAgICAgICAgJHNjaCA9IGFycjRbJGkgKz0gMV07XG4gICAgICAgICAgICAgICAgICBpZiAoJHNjaC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSAnICBpZiAoJyArICgkcGFzc0RhdGEpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCRwYXNzRGF0YSkgKyAnID0gJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ3NoYXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyAnICsgKGl0LnVzZURlZmF1bHQoJHNjaC5kZWZhdWx0KSkgKyAnICc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChKU09OLnN0cmluZ2lmeSgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJzsgJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGFycjUgPSAkcnVsZXNHcm91cC5ydWxlcztcbiAgICAgICAgICBpZiAoYXJyNSkge1xuICAgICAgICAgICAgdmFyICRydWxlLCBpNSA9IC0xLFxuICAgICAgICAgICAgICBsNSA9IGFycjUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChpNSA8IGw1KSB7XG4gICAgICAgICAgICAgICRydWxlID0gYXJyNVtpNSArPSAxXTtcbiAgICAgICAgICAgICAgaWYgKCRzaG91bGRVc2VSdWxlKCRydWxlKSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnICcgKyAoJHJ1bGUuY29kZShpdCwgJHJ1bGUua2V5d29yZCkpICsgJyAnO1xuICAgICAgICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAkY2xvc2luZ0JyYWNlczEgKz0gJ30nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlczEpICsgJyAnO1xuICAgICAgICAgICAgJGNsb3NpbmdCcmFjZXMxID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkcnVsZXNHcm91cC50eXBlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICBpZiAoJHR5cGVTY2hlbWEgJiYgJHR5cGVTY2hlbWEgPT09ICRydWxlc0dyb3VwLnR5cGUgJiYgISRjb2VyY2VUb1R5cGVzKSB7XG4gICAgICAgICAgICAgIHZhciAkdHlwZUNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICAgICAgICAgICAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcudHlwZScsXG4gICAgICAgICAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy90eXBlJztcbiAgICAgICAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCd0eXBlJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyB0eXBlOiBcXCcnO1xuICAgICAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnXFwnIH0gJztcbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlICc7XG4gICAgICAgICAgICAgICAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKGVycm9ycyA9PT0gJztcbiAgICAgICAgICAgIGlmICgkdG9wKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnMCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2VycnNfJyArICgkbHZsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlczIgKz0gJ30nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoJHR5cGVTY2hlbWEgJiYgISR0eXBlQ2hlY2tlZCAmJiAhJGNvZXJjZVRvVHlwZXMpIHtcbiAgICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50eXBlJyxcbiAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvdHlwZScsXG4gICAgICAkbWV0aG9kID0gJHR5cGVJc0FycmF5ID8gJ2NoZWNrRGF0YVR5cGVzJyA6ICdjaGVja0RhdGFUeXBlJztcbiAgICBvdXQgKz0gJyBpZiAoJyArIChpdC51dGlsWyRtZXRob2RdKCR0eXBlU2NoZW1hLCAkZGF0YSwgdHJ1ZSkpICsgJykgeyAgICc7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3R5cGUnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHR5cGU6IFxcJyc7XG4gICAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICdcXCcgfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlICc7XG4gICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEuam9pbihcIixcIikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0nO1xuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlczIpICsgJyAnO1xuICB9XG4gIGlmICgkdG9wKSB7XG4gICAgaWYgKCRhc3luYykge1xuICAgICAgb3V0ICs9ICcgaWYgKGVycm9ycyA9PT0gMCkgcmV0dXJuIHRydWU7ICAgICAgICAgICAnO1xuICAgICAgb3V0ICs9ICcgZWxzZSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHZFcnJvcnMpOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyAnO1xuICAgICAgb3V0ICs9ICcgcmV0dXJuIGVycm9ycyA9PT0gMDsgICAgICAgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSk7IHJldHVybiB2YWxpZGF0ZTsnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnID0gZXJyb3JzID09PSBlcnJzXycgKyAoJGx2bCkgKyAnOyc7XG4gIH1cbiAgb3V0ID0gaXQudXRpbC5jbGVhblVwQ29kZShvdXQpO1xuICBpZiAoJHRvcCAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ID0gaXQudXRpbC5jbGVhblVwVmFyRXJyb3JzKG91dCwgJGFzeW5jKTtcbiAgfVxuXG4gIGZ1bmN0aW9uICRzaG91bGRVc2VHcm91cCgkcnVsZXNHcm91cCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgJHJ1bGVzR3JvdXAucnVsZXMubGVuZ3RoOyBpKyspXG4gICAgICBpZiAoJHNob3VsZFVzZVJ1bGUoJHJ1bGVzR3JvdXAucnVsZXNbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uICRzaG91bGRVc2VSdWxlKCRydWxlKSB7XG4gICAgcmV0dXJuIGl0LnNjaGVtYVskcnVsZS5rZXl3b3JkXSAhPT0gdW5kZWZpbmVkIHx8ICgkcnVsZS5rZXl3b3JkID09ICdwcm9wZXJ0aWVzJyAmJiAoaXQuc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09PSBmYWxzZSB8fCB0eXBlb2YgaXQuc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09ICdvYmplY3QnIHx8IChpdC5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMoaXQuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKS5sZW5ndGgpIHx8IChpdC5vcHRzLnY1ICYmIGl0LnNjaGVtYS5wYXR0ZXJuR3JvdXBzICYmIE9iamVjdC5rZXlzKGl0LnNjaGVtYS5wYXR0ZXJuR3JvdXBzKS5sZW5ndGgpKSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIElERU5USUZJRVIgPSAvXlthLXpfJF1bYS16MC05XyRcXC1dKiQvaTtcbnZhciBjdXN0b21SdWxlQ29kZSA9IHJlcXVpcmUoJy4vZG90anMvY3VzdG9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhZGQ6IGFkZEtleXdvcmQsXG4gIGdldDogZ2V0S2V5d29yZCxcbiAgcmVtb3ZlOiByZW1vdmVLZXl3b3JkXG59O1xuXG4vKipcbiAqIERlZmluZSBjdXN0b20ga2V5d29yZFxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtTdHJpbmd9IGtleXdvcmQgY3VzdG9tIGtleXdvcmQsIHNob3VsZCBiZSB1bmlxdWUgKGluY2x1ZGluZyBkaWZmZXJlbnQgZnJvbSBhbGwgc3RhbmRhcmQsIGN1c3RvbSBhbmQgbWFjcm8ga2V5d29yZHMpLlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmluaXRpb24ga2V5d29yZCBkZWZpbml0aW9uIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgYHR5cGVgICh0eXBlKHMpIHdoaWNoIHRoZSBrZXl3b3JkIGFwcGxpZXMgdG8pLCBgdmFsaWRhdGVgIG9yIGBjb21waWxlYC5cbiAqL1xuZnVuY3Rpb24gYWRkS2V5d29yZChrZXl3b3JkLCBkZWZpbml0aW9uKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgLyogZXNsaW50IG5vLXNoYWRvdzogMCAqL1xuICB2YXIgUlVMRVMgPSB0aGlzLlJVTEVTO1xuXG4gIGlmIChSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleXdvcmQgJyArIGtleXdvcmQgKyAnIGlzIGFscmVhZHkgZGVmaW5lZCcpO1xuXG4gIGlmICghSURFTlRJRklFUi50ZXN0KGtleXdvcmQpKVxuICAgIHRocm93IG5ldyBFcnJvcignS2V5d29yZCAnICsga2V5d29yZCArICcgaXMgbm90IGEgdmFsaWQgaWRlbnRpZmllcicpO1xuXG4gIGlmIChkZWZpbml0aW9uKSB7XG4gICAgaWYgKGRlZmluaXRpb24ubWFjcm8gJiYgZGVmaW5pdGlvbi52YWxpZCAhPT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInZhbGlkXCIgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggbWFjcm8ga2V5d29yZHMnKTtcblxuICAgIHZhciBkYXRhVHlwZSA9IGRlZmluaXRpb24udHlwZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhVHlwZSkpIHtcbiAgICAgIHZhciBpLCBsZW4gPSBkYXRhVHlwZS5sZW5ndGg7XG4gICAgICBmb3IgKGk9MDsgaTxsZW47IGkrKykgY2hlY2tEYXRhVHlwZShkYXRhVHlwZVtpXSk7XG4gICAgICBmb3IgKGk9MDsgaTxsZW47IGkrKykgX2FkZFJ1bGUoa2V5d29yZCwgZGF0YVR5cGVbaV0sIGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGF0YVR5cGUpIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGUpO1xuICAgICAgX2FkZFJ1bGUoa2V5d29yZCwgZGF0YVR5cGUsIGRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHZhciAkZGF0YSA9IGRlZmluaXRpb24uJGRhdGEgPT09IHRydWUgJiYgdGhpcy5fb3B0cy52NTtcbiAgICBpZiAoJGRhdGEgJiYgIWRlZmluaXRpb24udmFsaWRhdGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJyRkYXRhIHN1cHBvcnQ6IFwidmFsaWRhdGVcIiBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZCcpO1xuXG4gICAgdmFyIG1ldGFTY2hlbWEgPSBkZWZpbml0aW9uLm1ldGFTY2hlbWE7XG4gICAgaWYgKG1ldGFTY2hlbWEpIHtcbiAgICAgIGlmICgkZGF0YSkge1xuICAgICAgICBtZXRhU2NoZW1hID0ge1xuICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICBtZXRhU2NoZW1hLFxuICAgICAgICAgICAgeyAnJHJlZic6ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXBvYmVyZXpraW4vYWp2L21hc3Rlci9saWIvcmVmcy9qc29uLXNjaGVtYS12NS5qc29uIy9kZWZpbml0aW9ucy8kZGF0YScgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGRlZmluaXRpb24udmFsaWRhdGVTY2hlbWEgPSB0aGlzLmNvbXBpbGUobWV0YVNjaGVtYSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgUlVMRVMua2V5d29yZHNba2V5d29yZF0gPSBSVUxFUy5hbGxba2V5d29yZF0gPSB0cnVlO1xuXG5cbiAgZnVuY3Rpb24gX2FkZFJ1bGUoa2V5d29yZCwgZGF0YVR5cGUsIGRlZmluaXRpb24pIHtcbiAgICB2YXIgcnVsZUdyb3VwO1xuICAgIGZvciAodmFyIGk9MDsgaTxSVUxFUy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJnID0gUlVMRVNbaV07XG4gICAgICBpZiAocmcudHlwZSA9PSBkYXRhVHlwZSkge1xuICAgICAgICBydWxlR3JvdXAgPSByZztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFydWxlR3JvdXApIHtcbiAgICAgIHJ1bGVHcm91cCA9IHsgdHlwZTogZGF0YVR5cGUsIHJ1bGVzOiBbXSB9O1xuICAgICAgUlVMRVMucHVzaChydWxlR3JvdXApO1xuICAgIH1cblxuICAgIHZhciBydWxlID0ge1xuICAgICAga2V5d29yZDoga2V5d29yZCxcbiAgICAgIGRlZmluaXRpb246IGRlZmluaXRpb24sXG4gICAgICBjdXN0b206IHRydWUsXG4gICAgICBjb2RlOiBjdXN0b21SdWxlQ29kZVxuICAgIH07XG4gICAgcnVsZUdyb3VwLnJ1bGVzLnB1c2gocnVsZSk7XG4gICAgUlVMRVMuY3VzdG9tW2tleXdvcmRdID0gcnVsZTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gY2hlY2tEYXRhVHlwZShkYXRhVHlwZSkge1xuICAgIGlmICghUlVMRVMudHlwZXNbZGF0YVR5cGVdKSB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdHlwZSAnICsgZGF0YVR5cGUpO1xuICB9XG59XG5cblxuLyoqXG4gKiBHZXQga2V5d29yZFxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtTdHJpbmd9IGtleXdvcmQgcHJlLWRlZmluZWQgb3IgY3VzdG9tIGtleXdvcmQuXG4gKiBAcmV0dXJuIHtPYmplY3R8Qm9vbGVhbn0gY3VzdG9tIGtleXdvcmQgZGVmaW5pdGlvbiwgYHRydWVgIGlmIGl0IGlzIGEgcHJlZGVmaW5lZCBrZXl3b3JkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gZ2V0S2V5d29yZChrZXl3b3JkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIHJ1bGUgPSB0aGlzLlJVTEVTLmN1c3RvbVtrZXl3b3JkXTtcbiAgcmV0dXJuIHJ1bGUgPyBydWxlLmRlZmluaXRpb24gOiB0aGlzLlJVTEVTLmtleXdvcmRzW2tleXdvcmRdIHx8IGZhbHNlO1xufVxuXG5cbi8qKlxuICogUmVtb3ZlIGtleXdvcmRcbiAqIEB0aGlzICBBanZcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXl3b3JkIHByZS1kZWZpbmVkIG9yIGN1c3RvbSBrZXl3b3JkLlxuICovXG5mdW5jdGlvbiByZW1vdmVLZXl3b3JkKGtleXdvcmQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgUlVMRVMgPSB0aGlzLlJVTEVTO1xuICBkZWxldGUgUlVMRVMua2V5d29yZHNba2V5d29yZF07XG4gIGRlbGV0ZSBSVUxFUy5hbGxba2V5d29yZF07XG4gIGRlbGV0ZSBSVUxFUy5jdXN0b21ba2V5d29yZF07XG4gIGZvciAodmFyIGk9MDsgaTxSVUxFUy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBydWxlcyA9IFJVTEVTW2ldLnJ1bGVzO1xuICAgIGZvciAodmFyIGo9MDsgajxydWxlcy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKHJ1bGVzW2pdLmtleXdvcmQgPT0ga2V5d29yZCkge1xuICAgICAgICBydWxlcy5zcGxpY2UoaiwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICAgIFwiaWRcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIixcbiAgICBcIiRzY2hlbWFcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIixcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29yZSBzY2hlbWEgbWV0YS1zY2hlbWFcIixcbiAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgICAgXCJzY2hlbWFBcnJheVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicG9zaXRpdmVJbnRlZ2VyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwibWluaW11bVwiOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFwicG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIjoge1xuICAgICAgICAgICAgXCJhbGxPZlwiOiBbIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIiB9LCB7IFwiZGVmYXVsdFwiOiAwIH0gXVxuICAgICAgICB9LFxuICAgICAgICBcInNpbXBsZVR5cGVzXCI6IHtcbiAgICAgICAgICAgIFwiZW51bVwiOiBbIFwiYXJyYXlcIiwgXCJib29sZWFuXCIsIFwiaW50ZWdlclwiLCBcIm51bGxcIiwgXCJudW1iZXJcIiwgXCJvYmplY3RcIiwgXCJzdHJpbmdcIiBdXG4gICAgICAgIH0sXG4gICAgICAgIFwic3RyaW5nQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcInR5cGVcIjogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiaWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiJHNjaGVtYVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0aXRsZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmYXVsdFwiOiB7fSxcbiAgICAgICAgXCJtdWx0aXBsZU9mXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgXCJtaW5pbXVtXCI6IDAsXG4gICAgICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBcIm1heExlbmd0aFwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCIgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJyZWdleFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbEl0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJ0eXBlXCI6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIiB9LFxuICAgICAgICBcIm1pbkl0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4UHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgXCJtaW5Qcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiIH0sXG4gICAgICAgIFwicmVxdWlyZWRcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5XCIgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXlcIiB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzXCIgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWxsT2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJhbnlPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcIm9uZU9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwibm90XCI6IHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICB9LFxuICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IFsgXCJtYXhpbXVtXCIgXSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IFsgXCJtaW5pbXVtXCIgXVxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IHt9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gICAgXCJpZFwiOiBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcG9iZXJlemtpbi9hanYvbWFzdGVyL2xpYi9yZWZzL2pzb24tc2NoZW1hLXY1Lmpzb24jXCIsXG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCIsXG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvcmUgc2NoZW1hIG1ldGEtc2NoZW1hICh2NSBwcm9wb3NhbHMpXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgIFwic2NoZW1hQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlclwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICBcIm1pbmltdW1cIjogMFxuICAgICAgICB9LFxuICAgICAgICBcInBvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCI6IHtcbiAgICAgICAgICAgIFwiYWxsT2ZcIjogWyB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSwgeyBcImRlZmF1bHRcIjogMCB9IF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzaW1wbGVUeXBlc1wiOiB7XG4gICAgICAgICAgICBcImVudW1cIjogWyBcImFycmF5XCIsIFwiYm9vbGVhblwiLCBcImludGVnZXJcIiwgXCJudWxsXCIsIFwibnVtYmVyXCIsIFwib2JqZWN0XCIsIFwic3RyaW5nXCIgXVxuICAgICAgICB9LFxuICAgICAgICBcInN0cmluZ0FycmF5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCJ0eXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIiRkYXRhXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiBbIFwiJGRhdGFcIiBdLFxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcIiRkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImZvcm1hdFwiOiBcInJlbGF0aXZlLWpzb24tcG9pbnRlclwiIH0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImZvcm1hdFwiOiBcImpzb24tcG9pbnRlclwiIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiaWRcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiJHNjaGVtYVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0aXRsZVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVmYXVsdFwiOiB7fSxcbiAgICAgICAgXCJtdWx0aXBsZU9mXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibWluaW11bVwiOiAwLFxuICAgICAgICAgICAgICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJudW1iZXJcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5pbXVtXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJ0eXBlXCI6IFwibnVtYmVyXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5MZW5ndGhcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcInJlZ2V4XCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsSXRlbXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwidW5pcXVlSXRlbXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcIm1heFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcIm1pblByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZWRcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5XCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXlcIiB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImVudW1cIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzXCIgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYWxsT2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJhbnlPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcIm9uZU9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwibm90XCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgIFwiZm9ybWF0XCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJ0eXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0TWF4aW11bVwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdE1pbmltdW1cIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRFeGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRFeGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJjb25zdGFudFwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29udGFpbnNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgXCJwYXR0ZXJuR3JvdXBzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiBbIFwic2NoZW1hXCIgXSxcbiAgICAgICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwic2NoZW1hXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJzd2l0Y2hcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICAgIFwicmVxdWlyZWRcIjogWyBcInRoZW5cIiBdLFxuICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiaWZcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJ0aGVuXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJ0eXBlXCI6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImNvbnRpbnVlXCI6IHsgXCJ0eXBlXCI6IFwiYm9vbGVhblwiIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgICAgICAgICAgICBcImNvbnRpbnVlXCI6IFsgXCJpZlwiIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IFsgXCJtYXhpbXVtXCIgXSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IFsgXCJtaW5pbXVtXCIgXSxcbiAgICAgICAgXCJmb3JtYXRNYXhpbXVtXCI6IFsgXCJmb3JtYXRcIiBdLFxuICAgICAgICBcImZvcm1hdE1pbmltdW1cIjogWyBcImZvcm1hdFwiIF0sXG4gICAgICAgIFwiZm9ybWF0RXhjbHVzaXZlTWF4aW11bVwiOiBbIFwiZm9ybWF0TWF4aW11bVwiIF0sXG4gICAgICAgIFwiZm9ybWF0RXhjbHVzaXZlTWluaW11bVwiOiBbIFwiZm9ybWF0TWluaW11bVwiIF1cbiAgICB9LFxuICAgIFwiZGVmYXVsdFwiOiB7fVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgTUVUQV9TQ0hFTUFfSUQgPSAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vwb2JlcmV6a2luL2Fqdi9tYXN0ZXIvbGliL3JlZnMvanNvbi1zY2hlbWEtdjUuanNvbic7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZVY1LFxuICBNRVRBX1NDSEVNQV9JRDogTUVUQV9TQ0hFTUFfSURcbn07XG5cblxuZnVuY3Rpb24gZW5hYmxlVjUoYWp2KSB7XG4gIHZhciBpbmxpbmVGdW5jdGlvbnMgPSB7XG4gICAgJ3N3aXRjaCc6IHJlcXVpcmUoJy4vZG90anMvc3dpdGNoJyksXG4gICAgJ2NvbnN0YW50JzogcmVxdWlyZSgnLi9kb3Rqcy9jb25zdGFudCcpLFxuICAgICdfZm9ybWF0TGltaXQnOiByZXF1aXJlKCcuL2RvdGpzL19mb3JtYXRMaW1pdCcpLFxuICAgICdwYXR0ZXJuUmVxdWlyZWQnOiByZXF1aXJlKCcuL2RvdGpzL3BhdHRlcm5SZXF1aXJlZCcpXG4gIH07XG5cbiAgaWYgKGFqdi5fb3B0cy5tZXRhICE9PSBmYWxzZSkge1xuICAgIHZhciBtZXRhU2NoZW1hID0gcmVxdWlyZSgnLi9yZWZzL2pzb24tc2NoZW1hLXY1Lmpzb24nKTtcbiAgICBhanYuYWRkTWV0YVNjaGVtYShtZXRhU2NoZW1hLCBNRVRBX1NDSEVNQV9JRCk7XG4gIH1cbiAgX2FkZEtleXdvcmQoJ2NvbnN0YW50Jyk7XG4gIGFqdi5hZGRLZXl3b3JkKCdjb250YWlucycsIHsgdHlwZTogJ2FycmF5JywgbWFjcm86IGNvbnRhaW5zTWFjcm8gfSk7XG5cbiAgX2FkZEtleXdvcmQoJ2Zvcm1hdE1heGltdW0nLCAnc3RyaW5nJywgaW5saW5lRnVuY3Rpb25zLl9mb3JtYXRMaW1pdCk7XG4gIF9hZGRLZXl3b3JkKCdmb3JtYXRNaW5pbXVtJywgJ3N0cmluZycsIGlubGluZUZ1bmN0aW9ucy5fZm9ybWF0TGltaXQpO1xuICBhanYuYWRkS2V5d29yZCgnZm9ybWF0RXhjbHVzaXZlTWF4aW11bScpO1xuICBhanYuYWRkS2V5d29yZCgnZm9ybWF0RXhjbHVzaXZlTWluaW11bScpO1xuXG4gIGFqdi5hZGRLZXl3b3JkKCdwYXR0ZXJuR3JvdXBzJyk7IC8vIGltcGxlbWVudGVkIGluIHByb3BlcnRpZXMuanN0XG4gIF9hZGRLZXl3b3JkKCdwYXR0ZXJuUmVxdWlyZWQnLCAnb2JqZWN0Jyk7XG4gIF9hZGRLZXl3b3JkKCdzd2l0Y2gnKTtcblxuXG4gIGZ1bmN0aW9uIF9hZGRLZXl3b3JkKGtleXdvcmQsIHR5cGVzLCBpbmxpbmVGdW5jKSB7XG4gICAgdmFyIGRlZmluaXRpb24gPSB7XG4gICAgICBpbmxpbmU6IGlubGluZUZ1bmMgfHwgaW5saW5lRnVuY3Rpb25zW2tleXdvcmRdLFxuICAgICAgc3RhdGVtZW50czogdHJ1ZSxcbiAgICAgIGVycm9yczogJ2Z1bGwnXG4gICAgfTtcbiAgICBpZiAodHlwZXMpIGRlZmluaXRpb24udHlwZSA9IHR5cGVzO1xuICAgIGFqdi5hZGRLZXl3b3JkKGtleXdvcmQsIGRlZmluaXRpb24pO1xuICB9XG59XG5cblxuZnVuY3Rpb24gY29udGFpbnNNYWNybyhzY2hlbWEpIHtcbiAgcmV0dXJuIHtcbiAgICBub3Q6IHsgaXRlbXM6IHsgbm90OiBzY2hlbWEgfSB9XG4gIH07XG59XG4iLCJ2YXIganNvbiA9IHR5cGVvZiBKU09OICE9PSAndW5kZWZpbmVkJyA/IEpTT04gOiByZXF1aXJlKCdqc29uaWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaiwgb3B0cykge1xuICAgIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykgb3B0cyA9IHsgY21wOiBvcHRzIH07XG4gICAgdmFyIHNwYWNlID0gb3B0cy5zcGFjZSB8fCAnJztcbiAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykgc3BhY2UgPSBBcnJheShzcGFjZSsxKS5qb2luKCcgJyk7XG4gICAgdmFyIGN5Y2xlcyA9ICh0eXBlb2Ygb3B0cy5jeWNsZXMgPT09ICdib29sZWFuJykgPyBvcHRzLmN5Y2xlcyA6IGZhbHNlO1xuICAgIHZhciByZXBsYWNlciA9IG9wdHMucmVwbGFjZXIgfHwgZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiAgICB2YXIgY21wID0gb3B0cy5jbXAgJiYgKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFvYmogPSB7IGtleTogYSwgdmFsdWU6IG5vZGVbYV0gfTtcbiAgICAgICAgICAgICAgICB2YXIgYm9iaiA9IHsga2V5OiBiLCB2YWx1ZTogbm9kZVtiXSB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBmKGFvYmosIGJvYmopO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9KShvcHRzLmNtcCk7XG5cbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIHJldHVybiAoZnVuY3Rpb24gc3RyaW5naWZ5IChwYXJlbnQsIGtleSwgbm9kZSwgbGV2ZWwpIHtcbiAgICAgICAgdmFyIGluZGVudCA9IHNwYWNlID8gKCdcXG4nICsgbmV3IEFycmF5KGxldmVsICsgMSkuam9pbihzcGFjZSkpIDogJyc7XG4gICAgICAgIHZhciBjb2xvblNlcGFyYXRvciA9IHNwYWNlID8gJzogJyA6ICc6JztcblxuICAgICAgICBpZiAobm9kZSAmJiBub2RlLnRvSlNPTiAmJiB0eXBlb2Ygbm9kZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnRvSlNPTigpO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IHJlcGxhY2VyLmNhbGwocGFyZW50LCBrZXksIG5vZGUpO1xuXG4gICAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8IG5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBqc29uLnN0cmluZ2lmeShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBzdHJpbmdpZnkobm9kZSwgaSwgbm9kZVtpXSwgbGV2ZWwrMSkgfHwganNvbi5zdHJpbmdpZnkobnVsbCk7XG4gICAgICAgICAgICAgICAgb3V0LnB1c2goaW5kZW50ICsgc3BhY2UgKyBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnWycgKyBvdXQuam9pbignLCcpICsgaW5kZW50ICsgJ10nO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNlZW4uaW5kZXhPZihub2RlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3ljbGVzKSByZXR1cm4ganNvbi5zdHJpbmdpZnkoJ19fY3ljbGVfXycpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT04nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Ugc2Vlbi5wdXNoKG5vZGUpO1xuXG4gICAgICAgICAgICB2YXIga2V5cyA9IG9iamVjdEtleXMobm9kZSkuc29ydChjbXAgJiYgY21wKG5vZGUpKTtcbiAgICAgICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0cmluZ2lmeShub2RlLCBrZXksIG5vZGVba2V5XSwgbGV2ZWwrMSk7XG5cbiAgICAgICAgICAgICAgICBpZighdmFsdWUpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgdmFyIGtleVZhbHVlID0ganNvbi5zdHJpbmdpZnkoa2V5KVxuICAgICAgICAgICAgICAgICAgICArIGNvbG9uU2VwYXJhdG9yXG4gICAgICAgICAgICAgICAgICAgICsgdmFsdWU7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIG91dC5wdXNoKGluZGVudCArIHNwYWNlICsga2V5VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2Vlbi5zcGxpY2Uoc2Vlbi5pbmRleE9mKG5vZGUpLCAxKTtcbiAgICAgICAgICAgIHJldHVybiAneycgKyBvdXQuam9pbignLCcpICsgaW5kZW50ICsgJ30nO1xuICAgICAgICB9XG4gICAgfSkoeyAnJzogb2JqIH0sICcnLCBvYmosIDApO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlIH07XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5cztcbn07XG4iLCIvKiogdmltOiBldDp0cz00OnN3PTQ6c3RzPTRcbiAqIEBsaWNlbnNlIGFtZGVmaW5lIDEuMC4xIENvcHlyaWdodCAoYykgMjAxMS0yMDE2LCBUaGUgRG9qbyBGb3VuZGF0aW9uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBBdmFpbGFibGUgdmlhIHRoZSBNSVQgb3IgbmV3IEJTRCBsaWNlbnNlLlxuICogc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL2FtZGVmaW5lIGZvciBkZXRhaWxzXG4gKi9cblxuLypqc2xpbnQgbm9kZTogdHJ1ZSAqL1xuLypnbG9iYWwgbW9kdWxlLCBwcm9jZXNzICovXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlZmluZSBmb3Igbm9kZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBtb2R1bGUgdGhlIFwibW9kdWxlXCIgb2JqZWN0IHRoYXQgaXMgZGVmaW5lZCBieSBOb2RlIGZvciB0aGVcbiAqIGN1cnJlbnQgbW9kdWxlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3JlcXVpcmVGbl0uIE5vZGUncyByZXF1aXJlIGZ1bmN0aW9uIGZvciB0aGUgY3VycmVudCBtb2R1bGUuXG4gKiBJdCBvbmx5IG5lZWRzIHRvIGJlIHBhc3NlZCBpbiBOb2RlIHZlcnNpb25zIGJlZm9yZSAwLjUsIHdoZW4gbW9kdWxlLnJlcXVpcmVcbiAqIGRpZCBub3QgZXhpc3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IGEgZGVmaW5lIGZ1bmN0aW9uIHRoYXQgaXMgdXNhYmxlIGZvciB0aGUgY3VycmVudCBub2RlXG4gKiBtb2R1bGUuXG4gKi9cbmZ1bmN0aW9uIGFtZGVmaW5lKG1vZHVsZSwgcmVxdWlyZUZuKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIHZhciBkZWZpbmVDYWNoZSA9IHt9LFxuICAgICAgICBsb2FkZXJDYWNoZSA9IHt9LFxuICAgICAgICBhbHJlYWR5Q2FsbGVkID0gZmFsc2UsXG4gICAgICAgIHBhdGggPSByZXF1aXJlKCdwYXRoJyksXG4gICAgICAgIG1ha2VSZXF1aXJlLCBzdHJpbmdSZXF1aXJlO1xuXG4gICAgLyoqXG4gICAgICogVHJpbXMgdGhlIC4gYW5kIC4uIGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy5cbiAgICAgKiBJdCB3aWxsIGtlZXAgYSBsZWFkaW5nIHBhdGggc2VnbWVudCBpZiBhIC4uIHdpbGwgYmVjb21lXG4gICAgICogdGhlIGZpcnN0IHBhdGggc2VnbWVudCwgdG8gaGVscCB3aXRoIG1vZHVsZSBuYW1lIGxvb2t1cHMsXG4gICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQuIEJ1dCB0aGUgZW5kIHJlc3VsdCxcbiAgICAgKiBhbGwgcGF0aHMgdGhhdCB1c2UgdGhpcyBmdW5jdGlvbiBzaG91bGQgbG9vayBub3JtYWxpemVkLlxuICAgICAqIE5PVEU6IHRoaXMgbWV0aG9kIE1PRElGSUVTIHRoZSBpbnB1dCBhcnJheS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbURvdHMoYXJ5KSB7XG4gICAgICAgIHZhciBpLCBwYXJ0O1xuICAgICAgICBmb3IgKGkgPSAwOyBhcnlbaV07IGkrPSAxKSB7XG4gICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldO1xuICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgKGFyeVsyXSA9PT0gJy4uJyB8fCBhcnlbMF0gPT09ICcuLicpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vRW5kIG9mIHRoZSBsaW5lLiBLZWVwIGF0IGxlYXN0IG9uZSBub24tZG90XG4gICAgICAgICAgICAgICAgICAgIC8vcGF0aCBzZWdtZW50IGF0IHRoZSBmcm9udCBzbyBpdCBjYW4gYmUgbWFwcGVkXG4gICAgICAgICAgICAgICAgICAgIC8vY29ycmVjdGx5IHRvIGRpc2suIE90aGVyd2lzZSwgdGhlcmUgaXMgbGlrZWx5XG4gICAgICAgICAgICAgICAgICAgIC8vbm8gcGF0aCBtYXBwaW5nIGZvciBhIHBhdGggc3RhcnRpbmcgd2l0aCAnLi4nLlxuICAgICAgICAgICAgICAgICAgICAvL1RoaXMgY2FuIHN0aWxsIGZhaWwsIGJ1dCBjYXRjaGVzIHRoZSBtb3N0IHJlYXNvbmFibGVcbiAgICAgICAgICAgICAgICAgICAgLy91c2VzIG9mIC4uXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpIC0gMSwgMik7XG4gICAgICAgICAgICAgICAgICAgIGkgLT0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUpIHtcbiAgICAgICAgdmFyIGJhc2VQYXJ0cztcblxuICAgICAgICAvL0FkanVzdCBhbnkgcmVsYXRpdmUgcGF0aHMuXG4gICAgICAgIGlmIChuYW1lICYmIG5hbWUuY2hhckF0KDApID09PSAnLicpIHtcbiAgICAgICAgICAgIC8vSWYgaGF2ZSBhIGJhc2UgbmFtZSwgdHJ5IHRvIG5vcm1hbGl6ZSBhZ2FpbnN0IGl0LFxuICAgICAgICAgICAgLy9vdGhlcndpc2UsIGFzc3VtZSBpdCBpcyBhIHRvcC1sZXZlbCByZXF1aXJlIHRoYXQgd2lsbFxuICAgICAgICAgICAgLy9iZSByZWxhdGl2ZSB0byBiYXNlVXJsIGluIHRoZSBlbmQuXG4gICAgICAgICAgICBpZiAoYmFzZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBiYXNlUGFydHMgPSBiYXNlTmFtZS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgYmFzZVBhcnRzID0gYmFzZVBhcnRzLmNvbmNhdChuYW1lLnNwbGl0KCcvJykpO1xuICAgICAgICAgICAgICAgIHRyaW1Eb3RzKGJhc2VQYXJ0cyk7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGJhc2VQYXJ0cy5qb2luKCcvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgdGhlIG5vcm1hbGl6ZSgpIGZ1bmN0aW9uIHBhc3NlZCB0byBhIGxvYWRlciBwbHVnaW4nc1xuICAgICAqIG5vcm1hbGl6ZSBtZXRob2QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFrZU5vcm1hbGl6ZShyZWxOYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCByZWxOYW1lKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlTG9hZChpZCkge1xuICAgICAgICBmdW5jdGlvbiBsb2FkKHZhbHVlKSB7XG4gICAgICAgICAgICBsb2FkZXJDYWNoZVtpZF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvYWQuZnJvbVRleHQgPSBmdW5jdGlvbiAoaWQsIHRleHQpIHtcbiAgICAgICAgICAgIC8vVGhpcyBvbmUgaXMgZGlmZmljdWx0IGJlY2F1c2UgdGhlIHRleHQgY2FuL3Byb2JhYmx5IHVzZXNcbiAgICAgICAgICAgIC8vZGVmaW5lLCBhbmQgYW55IHJlbGF0aXZlIHBhdGhzIGFuZCByZXF1aXJlcyBzaG91bGQgYmUgcmVsYXRpdmVcbiAgICAgICAgICAgIC8vdG8gdGhhdCBpZCB3YXMgaXQgd291bGQgYmUgZm91bmQgb24gZGlzay4gQnV0IHRoaXMgd291bGQgcmVxdWlyZVxuICAgICAgICAgICAgLy9ib290c3RyYXBwaW5nIGEgbW9kdWxlL3JlcXVpcmUgZmFpcmx5IGRlZXBseSBmcm9tIG5vZGUgY29yZS5cbiAgICAgICAgICAgIC8vTm90IHN1cmUgaG93IGJlc3QgdG8gZ28gYWJvdXQgdGhhdCB5ZXQuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FtZGVmaW5lIGRvZXMgbm90IGltcGxlbWVudCBsb2FkLmZyb21UZXh0Jyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGxvYWQ7XG4gICAgfVxuXG4gICAgbWFrZVJlcXVpcmUgPSBmdW5jdGlvbiAoc3lzdGVtUmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlLCByZWxJZCkge1xuICAgICAgICBmdW5jdGlvbiBhbWRSZXF1aXJlKGRlcHMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRlcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy9TeW5jaHJvbm91cywgc2luZ2xlIG1vZHVsZSByZXF1aXJlKCcnKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdSZXF1aXJlKHN5c3RlbVJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSwgZGVwcywgcmVsSWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL0FycmF5IG9mIGRlcGVuZGVuY2llcyB3aXRoIGEgY2FsbGJhY2suXG5cbiAgICAgICAgICAgICAgICAvL0NvbnZlcnQgdGhlIGRlcGVuZGVuY2llcyB0byBtb2R1bGVzLlxuICAgICAgICAgICAgICAgIGRlcHMgPSBkZXBzLm1hcChmdW5jdGlvbiAoZGVwTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nUmVxdWlyZShzeXN0ZW1SZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUsIGRlcE5hbWUsIHJlbElkKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vV2FpdCBmb3IgbmV4dCB0aWNrIHRvIGNhbGwgYmFjayB0aGUgcmVxdWlyZSBjYWxsLlxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGRlcHMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhbWRSZXF1aXJlLnRvVXJsID0gZnVuY3Rpb24gKGZpbGVQYXRoKSB7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGguaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShmaWxlUGF0aCwgcGF0aC5kaXJuYW1lKG1vZHVsZS5maWxlbmFtZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGFtZFJlcXVpcmU7XG4gICAgfTtcblxuICAgIC8vRmF2b3IgZXhwbGljaXQgdmFsdWUsIHBhc3NlZCBpbiBpZiB0aGUgbW9kdWxlIHdhbnRzIHRvIHN1cHBvcnQgTm9kZSAwLjQuXG4gICAgcmVxdWlyZUZuID0gcmVxdWlyZUZuIHx8IGZ1bmN0aW9uIHJlcSgpIHtcbiAgICAgICAgcmV0dXJuIG1vZHVsZS5yZXF1aXJlLmFwcGx5KG1vZHVsZSwgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcnVuRmFjdG9yeShpZCwgZGVwcywgZmFjdG9yeSkge1xuICAgICAgICB2YXIgciwgZSwgbSwgcmVzdWx0O1xuXG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgZSA9IGxvYWRlckNhY2hlW2lkXSA9IHt9O1xuICAgICAgICAgICAgbSA9IHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgdXJpOiBfX2ZpbGVuYW1lLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByID0gbWFrZVJlcXVpcmUocmVxdWlyZUZuLCBlLCBtLCBpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL09ubHkgc3VwcG9ydCBvbmUgZGVmaW5lIGNhbGwgcGVyIGZpbGVcbiAgICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhbWRlZmluZSB3aXRoIG5vIG1vZHVsZSBJRCBjYW5ub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHBlciBmaWxlLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vVXNlIHRoZSByZWFsIHZhcmlhYmxlcyBmcm9tIG5vZGVcbiAgICAgICAgICAgIC8vVXNlIG1vZHVsZS5leHBvcnRzIGZvciBleHBvcnRzLCBzaW5jZVxuICAgICAgICAgICAgLy90aGUgZXhwb3J0cyBpbiBoZXJlIGlzIGFtZGVmaW5lIGV4cG9ydHMuXG4gICAgICAgICAgICBlID0gbW9kdWxlLmV4cG9ydHM7XG4gICAgICAgICAgICBtID0gbW9kdWxlO1xuICAgICAgICAgICAgciA9IG1ha2VSZXF1aXJlKHJlcXVpcmVGbiwgZSwgbSwgbW9kdWxlLmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vSWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcywgdGhleSBhcmUgc3RyaW5ncywgc28gbmVlZFxuICAgICAgICAvL3RvIGNvbnZlcnQgdGhlbSB0byBkZXBlbmRlbmN5IHZhbHVlcy5cbiAgICAgICAgaWYgKGRlcHMpIHtcbiAgICAgICAgICAgIGRlcHMgPSBkZXBzLm1hcChmdW5jdGlvbiAoZGVwTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByKGRlcE5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvL0NhbGwgdGhlIGZhY3Rvcnkgd2l0aCB0aGUgcmlnaHQgZGVwZW5kZW5jaWVzLlxuICAgICAgICBpZiAodHlwZW9mIGZhY3RvcnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhY3RvcnkuYXBwbHkobS5leHBvcnRzLCBkZXBzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhY3Rvcnk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG0uZXhwb3J0cyA9IHJlc3VsdDtcbiAgICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgICAgIGxvYWRlckNhY2hlW2lkXSA9IG0uZXhwb3J0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0cmluZ1JlcXVpcmUgPSBmdW5jdGlvbiAoc3lzdGVtUmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlLCBpZCwgcmVsSWQpIHtcbiAgICAgICAgLy9TcGxpdCB0aGUgSUQgYnkgYSAhIHNvIHRoYXRcbiAgICAgICAgdmFyIGluZGV4ID0gaWQuaW5kZXhPZignIScpLFxuICAgICAgICAgICAgb3JpZ2luYWxJZCA9IGlkLFxuICAgICAgICAgICAgcHJlZml4LCBwbHVnaW47XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgaWQgPSBub3JtYWxpemUoaWQsIHJlbElkKTtcblxuICAgICAgICAgICAgLy9TdHJhaWdodCBtb2R1bGUgbG9va3VwLiBJZiBpdCBpcyBvbmUgb2YgdGhlIHNwZWNpYWwgZGVwZW5kZW5jaWVzLFxuICAgICAgICAgICAgLy9kZWFsIHdpdGggaXQsIG90aGVyd2lzZSwgZGVsZWdhdGUgdG8gbm9kZS5cbiAgICAgICAgICAgIGlmIChpZCA9PT0gJ3JlcXVpcmUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VSZXF1aXJlKHN5c3RlbVJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSwgcmVsSWQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpZCA9PT0gJ2V4cG9ydHMnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlkID09PSAnbW9kdWxlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvYWRlckNhY2hlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXJDYWNoZVtpZF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlZmluZUNhY2hlW2lkXSkge1xuICAgICAgICAgICAgICAgIHJ1bkZhY3RvcnkuYXBwbHkobnVsbCwgZGVmaW5lQ2FjaGVbaWRdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyQ2FjaGVbaWRdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZihzeXN0ZW1SZXF1aXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzeXN0ZW1SZXF1aXJlKG9yaWdpbmFsSWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gbW9kdWxlIHdpdGggSUQ6ICcgKyBpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy9UaGVyZSBpcyBhIHBsdWdpbiBpbiBwbGF5LlxuICAgICAgICAgICAgcHJlZml4ID0gaWQuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyaW5nKGluZGV4ICsgMSwgaWQubGVuZ3RoKTtcblxuICAgICAgICAgICAgcGx1Z2luID0gc3RyaW5nUmVxdWlyZShzeXN0ZW1SZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUsIHByZWZpeCwgcmVsSWQpO1xuXG4gICAgICAgICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkge1xuICAgICAgICAgICAgICAgIGlkID0gcGx1Z2luLm5vcm1hbGl6ZShpZCwgbWFrZU5vcm1hbGl6ZShyZWxJZCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgSUQgbm9ybWFsbHkuXG4gICAgICAgICAgICAgICAgaWQgPSBub3JtYWxpemUoaWQsIHJlbElkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxvYWRlckNhY2hlW2lkXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXJDYWNoZVtpZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBsdWdpbi5sb2FkKGlkLCBtYWtlUmVxdWlyZShzeXN0ZW1SZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUsIHJlbElkKSwgbWFrZUxvYWQoaWQpLCB7fSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyQ2FjaGVbaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vQ3JlYXRlIGEgZGVmaW5lIGZ1bmN0aW9uIHNwZWNpZmljIHRvIHRoZSBtb2R1bGUgYXNraW5nIGZvciBhbWRlZmluZS5cbiAgICBmdW5jdGlvbiBkZWZpbmUoaWQsIGRlcHMsIGZhY3RvcnkpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaWQpKSB7XG4gICAgICAgICAgICBmYWN0b3J5ID0gZGVwcztcbiAgICAgICAgICAgIGRlcHMgPSBpZDtcbiAgICAgICAgICAgIGlkID0gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZhY3RvcnkgPSBpZDtcbiAgICAgICAgICAgIGlkID0gZGVwcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXBzICYmICFBcnJheS5pc0FycmF5KGRlcHMpKSB7XG4gICAgICAgICAgICBmYWN0b3J5ID0gZGVwcztcbiAgICAgICAgICAgIGRlcHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRlcHMpIHtcbiAgICAgICAgICAgIGRlcHMgPSBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vU2V0IHVwIHByb3BlcnRpZXMgZm9yIHRoaXMgbW9kdWxlLiBJZiBhbiBJRCwgdGhlbiB1c2VcbiAgICAgICAgLy9pbnRlcm5hbCBjYWNoZS4gSWYgbm8gSUQsIHRoZW4gdXNlIHRoZSBleHRlcm5hbCB2YXJpYWJsZXNcbiAgICAgICAgLy9mb3IgdGhpcyBub2RlIG1vZHVsZS5cbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAvL1B1dCB0aGUgbW9kdWxlIGluIGRlZXAgZnJlZXplIHVudGlsIHRoZXJlIGlzIGFcbiAgICAgICAgICAgIC8vcmVxdWlyZSBjYWxsIGZvciBpdC5cbiAgICAgICAgICAgIGRlZmluZUNhY2hlW2lkXSA9IFtpZCwgZGVwcywgZmFjdG9yeV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBydW5GYWN0b3J5KGlkLCBkZXBzLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vZGVmaW5lLnJlcXVpcmUsIHdoaWNoIGhhcyBhY2Nlc3MgdG8gYWxsIHRoZSB2YWx1ZXMgaW4gdGhlXG4gICAgLy9jYWNoZS4gVXNlZnVsIGZvciBBTUQgbW9kdWxlcyB0aGF0IGFsbCBoYXZlIElEcyBpbiB0aGUgZmlsZSxcbiAgICAvL2J1dCBuZWVkIHRvIGZpbmFsbHkgZXhwb3J0IGEgdmFsdWUgdG8gbm9kZSBiYXNlZCBvbiBvbmUgb2YgdGhvc2VcbiAgICAvL0lEcy5cbiAgICBkZWZpbmUucmVxdWlyZSA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICBpZiAobG9hZGVyQ2FjaGVbaWRdKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9hZGVyQ2FjaGVbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZmluZUNhY2hlW2lkXSkge1xuICAgICAgICAgICAgcnVuRmFjdG9yeS5hcHBseShudWxsLCBkZWZpbmVDYWNoZVtpZF0pO1xuICAgICAgICAgICAgcmV0dXJuIGxvYWRlckNhY2hlW2lkXTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmUuYW1kID0ge307XG5cbiAgICByZXR1cm4gZGVmaW5lO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFtZGVmaW5lO1xuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVxdWFsKGFycjEsIGFycjIpIHtcbiAgdmFyIGxlbmd0aCA9IGFycjEubGVuZ3RoXG4gIGlmIChsZW5ndGggIT09IGFycjIubGVuZ3RoKSByZXR1cm4gZmFsc2VcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSlcbiAgICAgIHJldHVybiBmYWxzZVxuICByZXR1cm4gdHJ1ZVxufVxuIiwidmFyIGFzbjEgPSBleHBvcnRzO1xuXG5hc24xLmJpZ251bSA9IHJlcXVpcmUoJ2JuLmpzJyk7XG5cbmFzbjEuZGVmaW5lID0gcmVxdWlyZSgnLi9hc24xL2FwaScpLmRlZmluZTtcbmFzbjEuYmFzZSA9IHJlcXVpcmUoJy4vYXNuMS9iYXNlJyk7XG5hc24xLmNvbnN0YW50cyA9IHJlcXVpcmUoJy4vYXNuMS9jb25zdGFudHMnKTtcbmFzbjEuZGVjb2RlcnMgPSByZXF1aXJlKCcuL2FzbjEvZGVjb2RlcnMnKTtcbmFzbjEuZW5jb2RlcnMgPSByZXF1aXJlKCcuL2FzbjEvZW5jb2RlcnMnKTtcbiIsInZhciBhc24xID0gcmVxdWlyZSgnLi4vYXNuMScpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIGFwaSA9IGV4cG9ydHM7XG5cbmFwaS5kZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUobmFtZSwgYm9keSkge1xuICByZXR1cm4gbmV3IEVudGl0eShuYW1lLCBib2R5KTtcbn07XG5cbmZ1bmN0aW9uIEVudGl0eShuYW1lLCBib2R5KSB7XG4gIHRoaXMubmFtZSA9IG5hbWU7XG4gIHRoaXMuYm9keSA9IGJvZHk7XG5cbiAgdGhpcy5kZWNvZGVycyA9IHt9O1xuICB0aGlzLmVuY29kZXJzID0ge307XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLl9jcmVhdGVOYW1lZCA9IGZ1bmN0aW9uIGNyZWF0ZU5hbWVkKGJhc2UpIHtcbiAgdmFyIG5hbWVkO1xuICB0cnkge1xuICAgIG5hbWVkID0gcmVxdWlyZSgndm0nKS5ydW5JblRoaXNDb250ZXh0KFxuICAgICAgJyhmdW5jdGlvbiAnICsgdGhpcy5uYW1lICsgJyhlbnRpdHkpIHtcXG4nICtcbiAgICAgICcgIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xcbicgK1xuICAgICAgJ30pJ1xuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBuYW1lZCA9IGZ1bmN0aW9uIChlbnRpdHkpIHtcbiAgICAgIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xuICAgIH07XG4gIH1cbiAgaW5oZXJpdHMobmFtZWQsIGJhc2UpO1xuICBuYW1lZC5wcm90b3R5cGUuX2luaXROYW1lZCA9IGZ1bmN0aW9uIGluaXRuYW1lZChlbnRpdHkpIHtcbiAgICBiYXNlLmNhbGwodGhpcywgZW50aXR5KTtcbiAgfTtcblxuICByZXR1cm4gbmV3IG5hbWVkKHRoaXMpO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5fZ2V0RGVjb2RlciA9IGZ1bmN0aW9uIF9nZXREZWNvZGVyKGVuYykge1xuICBlbmMgPSBlbmMgfHwgJ2Rlcic7XG4gIC8vIExhemlseSBjcmVhdGUgZGVjb2RlclxuICBpZiAoIXRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoZW5jKSlcbiAgICB0aGlzLmRlY29kZXJzW2VuY10gPSB0aGlzLl9jcmVhdGVOYW1lZChhc24xLmRlY29kZXJzW2VuY10pO1xuICByZXR1cm4gdGhpcy5kZWNvZGVyc1tlbmNdO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoZGF0YSwgZW5jLCBvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLl9nZXREZWNvZGVyKGVuYykuZGVjb2RlKGRhdGEsIG9wdGlvbnMpO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5fZ2V0RW5jb2RlciA9IGZ1bmN0aW9uIF9nZXRFbmNvZGVyKGVuYykge1xuICBlbmMgPSBlbmMgfHwgJ2Rlcic7XG4gIC8vIExhemlseSBjcmVhdGUgZW5jb2RlclxuICBpZiAoIXRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoZW5jKSlcbiAgICB0aGlzLmVuY29kZXJzW2VuY10gPSB0aGlzLl9jcmVhdGVOYW1lZChhc24xLmVuY29kZXJzW2VuY10pO1xuICByZXR1cm4gdGhpcy5lbmNvZGVyc1tlbmNdO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoZGF0YSwgZW5jLCAvKiBpbnRlcm5hbCAqLyByZXBvcnRlcikge1xuICByZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihlbmMpLmVuY29kZShkYXRhLCByZXBvcnRlcik7XG59O1xuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBSZXBvcnRlciA9IHJlcXVpcmUoJy4uL2Jhc2UnKS5SZXBvcnRlcjtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbmZ1bmN0aW9uIERlY29kZXJCdWZmZXIoYmFzZSwgb3B0aW9ucykge1xuICBSZXBvcnRlci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiYXNlKSkge1xuICAgIHRoaXMuZXJyb3IoJ0lucHV0IG5vdCBCdWZmZXInKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLmJhc2UgPSBiYXNlO1xuICB0aGlzLm9mZnNldCA9IDA7XG4gIHRoaXMubGVuZ3RoID0gYmFzZS5sZW5ndGg7XG59XG5pbmhlcml0cyhEZWNvZGVyQnVmZmVyLCBSZXBvcnRlcik7XG5leHBvcnRzLkRlY29kZXJCdWZmZXIgPSBEZWNvZGVyQnVmZmVyO1xuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24gc2F2ZSgpIHtcbiAgcmV0dXJuIHsgb2Zmc2V0OiB0aGlzLm9mZnNldCwgcmVwb3J0ZXI6IFJlcG9ydGVyLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcykgfTtcbn07XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLnJlc3RvcmUgPSBmdW5jdGlvbiByZXN0b3JlKHNhdmUpIHtcbiAgLy8gUmV0dXJuIHNraXBwZWQgZGF0YVxuICB2YXIgcmVzID0gbmV3IERlY29kZXJCdWZmZXIodGhpcy5iYXNlKTtcbiAgcmVzLm9mZnNldCA9IHNhdmUub2Zmc2V0O1xuICByZXMubGVuZ3RoID0gdGhpcy5vZmZzZXQ7XG5cbiAgdGhpcy5vZmZzZXQgPSBzYXZlLm9mZnNldDtcbiAgUmVwb3J0ZXIucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLCBzYXZlLnJlcG9ydGVyKTtcblxuICByZXR1cm4gcmVzO1xufTtcblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gIHJldHVybiB0aGlzLm9mZnNldCA9PT0gdGhpcy5sZW5ndGg7XG59O1xuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDgoZmFpbCkge1xuICBpZiAodGhpcy5vZmZzZXQgKyAxIDw9IHRoaXMubGVuZ3RoKVxuICAgIHJldHVybiB0aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssIHRydWUpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuZXJyb3IoZmFpbCB8fCAnRGVjb2RlckJ1ZmZlciBvdmVycnVuJyk7XG59XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbiBza2lwKGJ5dGVzLCBmYWlsKSB7XG4gIGlmICghKHRoaXMub2Zmc2V0ICsgYnl0ZXMgPD0gdGhpcy5sZW5ndGgpKVxuICAgIHJldHVybiB0aGlzLmVycm9yKGZhaWwgfHwgJ0RlY29kZXJCdWZmZXIgb3ZlcnJ1bicpO1xuXG4gIHZhciByZXMgPSBuZXcgRGVjb2RlckJ1ZmZlcih0aGlzLmJhc2UpO1xuXG4gIC8vIFNoYXJlIHJlcG9ydGVyIHN0YXRlXG4gIHJlcy5fcmVwb3J0ZXJTdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgcmVzLm9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICByZXMubGVuZ3RoID0gdGhpcy5vZmZzZXQgKyBieXRlcztcbiAgdGhpcy5vZmZzZXQgKz0gYnl0ZXM7XG4gIHJldHVybiByZXM7XG59XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLnJhdyA9IGZ1bmN0aW9uIHJhdyhzYXZlKSB7XG4gIHJldHVybiB0aGlzLmJhc2Uuc2xpY2Uoc2F2ZSA/IHNhdmUub2Zmc2V0IDogdGhpcy5vZmZzZXQsIHRoaXMubGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gRW5jb2RlckJ1ZmZlcih2YWx1ZSwgcmVwb3J0ZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgaWYgKCEoaXRlbSBpbnN0YW5jZW9mIEVuY29kZXJCdWZmZXIpKVxuICAgICAgICBpdGVtID0gbmV3IEVuY29kZXJCdWZmZXIoaXRlbSwgcmVwb3J0ZXIpO1xuICAgICAgdGhpcy5sZW5ndGggKz0gaXRlbS5sZW5ndGg7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9LCB0aGlzKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKCEoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAweGZmKSlcbiAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignbm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZScpO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMubGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXBvcnRlci5lcnJvcignVW5zdXBwb3J0ZWQgdHlwZTogJyArIHR5cGVvZiB2YWx1ZSk7XG4gIH1cbn1cbmV4cG9ydHMuRW5jb2RlckJ1ZmZlciA9IEVuY29kZXJCdWZmZXI7XG5cbkVuY29kZXJCdWZmZXIucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBqb2luKG91dCwgb2Zmc2V0KSB7XG4gIGlmICghb3V0KVxuICAgIG91dCA9IG5ldyBCdWZmZXIodGhpcy5sZW5ndGgpO1xuICBpZiAoIW9mZnNldClcbiAgICBvZmZzZXQgPSAwO1xuXG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gb3V0O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgdGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIGl0ZW0uam9pbihvdXQsIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gaXRlbS5sZW5ndGg7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlID09PSAnbnVtYmVyJylcbiAgICAgIG91dFtvZmZzZXRdID0gdGhpcy52YWx1ZTtcbiAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICBvdXQud3JpdGUodGhpcy52YWx1ZSwgb2Zmc2V0KTtcbiAgICBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIodGhpcy52YWx1ZSkpXG4gICAgICB0aGlzLnZhbHVlLmNvcHkob3V0LCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSB0aGlzLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59O1xuIiwidmFyIGJhc2UgPSBleHBvcnRzO1xuXG5iYXNlLlJlcG9ydGVyID0gcmVxdWlyZSgnLi9yZXBvcnRlcicpLlJlcG9ydGVyO1xuYmFzZS5EZWNvZGVyQnVmZmVyID0gcmVxdWlyZSgnLi9idWZmZXInKS5EZWNvZGVyQnVmZmVyO1xuYmFzZS5FbmNvZGVyQnVmZmVyID0gcmVxdWlyZSgnLi9idWZmZXInKS5FbmNvZGVyQnVmZmVyO1xuYmFzZS5Ob2RlID0gcmVxdWlyZSgnLi9ub2RlJyk7XG4iLCJ2YXIgUmVwb3J0ZXIgPSByZXF1aXJlKCcuLi9iYXNlJykuUmVwb3J0ZXI7XG52YXIgRW5jb2RlckJ1ZmZlciA9IHJlcXVpcmUoJy4uL2Jhc2UnKS5FbmNvZGVyQnVmZmVyO1xudmFyIERlY29kZXJCdWZmZXIgPSByZXF1aXJlKCcuLi9iYXNlJykuRGVjb2RlckJ1ZmZlcjtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbi8vIFN1cHBvcnRlZCB0YWdzXG52YXIgdGFncyA9IFtcbiAgJ3NlcScsICdzZXFvZicsICdzZXQnLCAnc2V0b2YnLCAnb2JqaWQnLCAnYm9vbCcsXG4gICdnZW50aW1lJywgJ3V0Y3RpbWUnLCAnbnVsbF8nLCAnZW51bScsICdpbnQnLCAnb2JqRGVzYycsXG4gICdiaXRzdHInLCAnYm1wc3RyJywgJ2NoYXJzdHInLCAnZ2Vuc3RyJywgJ2dyYXBoc3RyJywgJ2lhNXN0cicsICdpc282NDZzdHInLFxuICAnbnVtc3RyJywgJ29jdHN0cicsICdwcmludHN0cicsICd0NjFzdHInLCAndW5pc3RyJywgJ3V0ZjhzdHInLCAndmlkZW9zdHInXG5dO1xuXG4vLyBQdWJsaWMgbWV0aG9kcyBsaXN0XG52YXIgbWV0aG9kcyA9IFtcbiAgJ2tleScsICdvYmonLCAndXNlJywgJ29wdGlvbmFsJywgJ2V4cGxpY2l0JywgJ2ltcGxpY2l0JywgJ2RlZicsICdjaG9pY2UnLFxuICAnYW55JywgJ2NvbnRhaW5zJ1xuXS5jb25jYXQodGFncyk7XG5cbi8vIE92ZXJyaWRlZCBtZXRob2RzIGxpc3RcbnZhciBvdmVycmlkZWQgPSBbXG4gICdfcGVla1RhZycsICdfZGVjb2RlVGFnJywgJ191c2UnLFxuICAnX2RlY29kZVN0cicsICdfZGVjb2RlT2JqaWQnLCAnX2RlY29kZVRpbWUnLFxuICAnX2RlY29kZU51bGwnLCAnX2RlY29kZUludCcsICdfZGVjb2RlQm9vbCcsICdfZGVjb2RlTGlzdCcsXG5cbiAgJ19lbmNvZGVDb21wb3NpdGUnLCAnX2VuY29kZVN0cicsICdfZW5jb2RlT2JqaWQnLCAnX2VuY29kZVRpbWUnLFxuICAnX2VuY29kZU51bGwnLCAnX2VuY29kZUludCcsICdfZW5jb2RlQm9vbCdcbl07XG5cbmZ1bmN0aW9uIE5vZGUoZW5jLCBwYXJlbnQpIHtcbiAgdmFyIHN0YXRlID0ge307XG4gIHRoaXMuX2Jhc2VTdGF0ZSA9IHN0YXRlO1xuXG4gIHN0YXRlLmVuYyA9IGVuYztcblxuICBzdGF0ZS5wYXJlbnQgPSBwYXJlbnQgfHwgbnVsbDtcbiAgc3RhdGUuY2hpbGRyZW4gPSBudWxsO1xuXG4gIC8vIFN0YXRlXG4gIHN0YXRlLnRhZyA9IG51bGw7XG4gIHN0YXRlLmFyZ3MgPSBudWxsO1xuICBzdGF0ZS5yZXZlcnNlQXJncyA9IG51bGw7XG4gIHN0YXRlLmNob2ljZSA9IG51bGw7XG4gIHN0YXRlLm9wdGlvbmFsID0gZmFsc2U7XG4gIHN0YXRlLmFueSA9IGZhbHNlO1xuICBzdGF0ZS5vYmogPSBmYWxzZTtcbiAgc3RhdGUudXNlID0gbnVsbDtcbiAgc3RhdGUudXNlRGVjb2RlciA9IG51bGw7XG4gIHN0YXRlLmtleSA9IG51bGw7XG4gIHN0YXRlWydkZWZhdWx0J10gPSBudWxsO1xuICBzdGF0ZS5leHBsaWNpdCA9IG51bGw7XG4gIHN0YXRlLmltcGxpY2l0ID0gbnVsbDtcbiAgc3RhdGUuY29udGFpbnMgPSBudWxsO1xuXG4gIC8vIFNob3VsZCBjcmVhdGUgbmV3IGluc3RhbmNlIG9uIGVhY2ggbWV0aG9kXG4gIGlmICghc3RhdGUucGFyZW50KSB7XG4gICAgc3RhdGUuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLl93cmFwKCk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gTm9kZTtcblxudmFyIHN0YXRlUHJvcHMgPSBbXG4gICdlbmMnLCAncGFyZW50JywgJ2NoaWxkcmVuJywgJ3RhZycsICdhcmdzJywgJ3JldmVyc2VBcmdzJywgJ2Nob2ljZScsXG4gICdvcHRpb25hbCcsICdhbnknLCAnb2JqJywgJ3VzZScsICdhbHRlcmVkVXNlJywgJ2tleScsICdkZWZhdWx0JywgJ2V4cGxpY2l0JyxcbiAgJ2ltcGxpY2l0JywgJ2NvbnRhaW5zJ1xuXTtcblxuTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICB2YXIgY3N0YXRlID0ge307XG4gIHN0YXRlUHJvcHMuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgY3N0YXRlW3Byb3BdID0gc3RhdGVbcHJvcF07XG4gIH0pO1xuICB2YXIgcmVzID0gbmV3IHRoaXMuY29uc3RydWN0b3IoY3N0YXRlLnBhcmVudCk7XG4gIHJlcy5fYmFzZVN0YXRlID0gY3N0YXRlO1xuICByZXR1cm4gcmVzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX3dyYXAgPSBmdW5jdGlvbiB3cmFwKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIG1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICB0aGlzW21ldGhvZF0gPSBmdW5jdGlvbiBfd3JhcHBlZE1ldGhvZCgpIHtcbiAgICAgIHZhciBjbG9uZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xuICAgICAgc3RhdGUuY2hpbGRyZW4ucHVzaChjbG9uZSk7XG4gICAgICByZXR1cm4gY2xvbmVbbWV0aG9kXS5hcHBseShjbG9uZSwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9LCB0aGlzKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChib2R5KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUucGFyZW50ID09PSBudWxsKTtcbiAgYm9keS5jYWxsKHRoaXMpO1xuXG4gIC8vIEZpbHRlciBjaGlsZHJlblxuICBzdGF0ZS5jaGlsZHJlbiA9IHN0YXRlLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZC5fYmFzZVN0YXRlLnBhcmVudCA9PT0gdGhpcztcbiAgfSwgdGhpcyk7XG4gIGFzc2VydC5lcXVhbChzdGF0ZS5jaGlsZHJlbi5sZW5ndGgsIDEsICdSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQnKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLl91c2VBcmdzID0gZnVuY3Rpb24gdXNlQXJncyhhcmdzKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICAvLyBGaWx0ZXIgY2hpbGRyZW4gYW5kIGFyZ3NcbiAgdmFyIGNoaWxkcmVuID0gYXJncy5maWx0ZXIoZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I7XG4gIH0sIHRoaXMpO1xuICBhcmdzID0gYXJncy5maWx0ZXIoZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuICEoYXJnIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0sIHRoaXMpO1xuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggIT09IDApIHtcbiAgICBhc3NlcnQoc3RhdGUuY2hpbGRyZW4gPT09IG51bGwpO1xuICAgIHN0YXRlLmNoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICAvLyBSZXBsYWNlIHBhcmVudCB0byBtYWludGFpbiBiYWNrd2FyZCBsaW5rXG4gICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgY2hpbGQuX2Jhc2VTdGF0ZS5wYXJlbnQgPSB0aGlzO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIGlmIChhcmdzLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzc2VydChzdGF0ZS5hcmdzID09PSBudWxsKTtcbiAgICBzdGF0ZS5hcmdzID0gYXJncztcbiAgICBzdGF0ZS5yZXZlcnNlQXJncyA9IGFyZ3MubWFwKGZ1bmN0aW9uKGFyZykge1xuICAgICAgaWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnIHx8IGFyZy5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KVxuICAgICAgICByZXR1cm4gYXJnO1xuXG4gICAgICB2YXIgcmVzID0ge307XG4gICAgICBPYmplY3Qua2V5cyhhcmcpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT0gKGtleSB8IDApKVxuICAgICAgICAgIGtleSB8PSAwO1xuICAgICAgICB2YXIgdmFsdWUgPSBhcmdba2V5XTtcbiAgICAgICAgcmVzW3ZhbHVlXSA9IGtleTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxufTtcblxuLy9cbi8vIE92ZXJyaWRlZCBtZXRob2RzXG4vL1xuXG5vdmVycmlkZWQuZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgTm9kZS5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uIF9vdmVycmlkZWQoKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICAgIHRocm93IG5ldyBFcnJvcihtZXRob2QgKyAnIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICcgKyBzdGF0ZS5lbmMpO1xuICB9O1xufSk7XG5cbi8vXG4vLyBQdWJsaWMgbWV0aG9kc1xuLy9cblxudGFncy5mb3JFYWNoKGZ1bmN0aW9uKHRhZykge1xuICBOb2RlLnByb3RvdHlwZVt0YWddID0gZnVuY3Rpb24gX3RhZ01ldGhvZCgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgYXNzZXJ0KHN0YXRlLnRhZyA9PT0gbnVsbCk7XG4gICAgc3RhdGUudGFnID0gdGFnO1xuXG4gICAgdGhpcy5fdXNlQXJncyhhcmdzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xufSk7XG5cbk5vZGUucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShpdGVtKSB7XG4gIGFzc2VydChpdGVtKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS51c2UgPT09IG51bGwpO1xuICBzdGF0ZS51c2UgPSBpdGVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUub3B0aW9uYWwgPSBmdW5jdGlvbiBvcHRpb25hbCgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHN0YXRlLm9wdGlvbmFsID0gdHJ1ZTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbk5vZGUucHJvdG90eXBlLmRlZiA9IGZ1bmN0aW9uIGRlZih2YWwpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZVsnZGVmYXVsdCddID09PSBudWxsKTtcbiAgc3RhdGVbJ2RlZmF1bHQnXSA9IHZhbDtcbiAgc3RhdGUub3B0aW9uYWwgPSB0cnVlO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuZXhwbGljaXQgPSBmdW5jdGlvbiBleHBsaWNpdChudW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5leHBsaWNpdCA9PT0gbnVsbCAmJiBzdGF0ZS5pbXBsaWNpdCA9PT0gbnVsbCk7XG4gIHN0YXRlLmV4cGxpY2l0ID0gbnVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuaW1wbGljaXQgPSBmdW5jdGlvbiBpbXBsaWNpdChudW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5leHBsaWNpdCA9PT0gbnVsbCAmJiBzdGF0ZS5pbXBsaWNpdCA9PT0gbnVsbCk7XG4gIHN0YXRlLmltcGxpY2l0ID0gbnVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUub2JqID0gZnVuY3Rpb24gb2JqKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICBzdGF0ZS5vYmogPSB0cnVlO1xuXG4gIGlmIChhcmdzLmxlbmd0aCAhPT0gMClcbiAgICB0aGlzLl91c2VBcmdzKGFyZ3MpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUua2V5ID0gZnVuY3Rpb24ga2V5KG5ld0tleSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlLmtleSA9PT0gbnVsbCk7XG4gIHN0YXRlLmtleSA9IG5ld0tleTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbk5vZGUucHJvdG90eXBlLmFueSA9IGZ1bmN0aW9uIGFueSgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHN0YXRlLmFueSA9IHRydWU7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5jaG9pY2UgPSBmdW5jdGlvbiBjaG9pY2Uob2JqKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUuY2hvaWNlID09PSBudWxsKTtcbiAgc3RhdGUuY2hvaWNlID0gb2JqO1xuICB0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmpba2V5XTtcbiAgfSkpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiBjb250YWlucyhpdGVtKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUudXNlID09PSBudWxsKTtcbiAgc3RhdGUuY29udGFpbnMgPSBpdGVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIERlY29kaW5nXG4vL1xuXG5Ob2RlLnByb3RvdHlwZS5fZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICAvLyBEZWNvZGUgcm9vdCBub2RlXG4gIGlmIChzdGF0ZS5wYXJlbnQgPT09IG51bGwpXG4gICAgcmV0dXJuIGlucHV0LndyYXBSZXN1bHQoc3RhdGUuY2hpbGRyZW5bMF0uX2RlY29kZShpbnB1dCwgb3B0aW9ucykpO1xuXG4gIHZhciByZXN1bHQgPSBzdGF0ZVsnZGVmYXVsdCddO1xuICB2YXIgcHJlc2VudCA9IHRydWU7XG5cbiAgdmFyIHByZXZLZXkgPSBudWxsO1xuICBpZiAoc3RhdGUua2V5ICE9PSBudWxsKVxuICAgIHByZXZLZXkgPSBpbnB1dC5lbnRlcktleShzdGF0ZS5rZXkpO1xuXG4gIC8vIENoZWNrIGlmIHRhZyBpcyB0aGVyZVxuICBpZiAoc3RhdGUub3B0aW9uYWwpIHtcbiAgICB2YXIgdGFnID0gbnVsbDtcbiAgICBpZiAoc3RhdGUuZXhwbGljaXQgIT09IG51bGwpXG4gICAgICB0YWcgPSBzdGF0ZS5leHBsaWNpdDtcbiAgICBlbHNlIGlmIChzdGF0ZS5pbXBsaWNpdCAhPT0gbnVsbClcbiAgICAgIHRhZyA9IHN0YXRlLmltcGxpY2l0O1xuICAgIGVsc2UgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbClcbiAgICAgIHRhZyA9IHN0YXRlLnRhZztcblxuICAgIGlmICh0YWcgPT09IG51bGwgJiYgIXN0YXRlLmFueSkge1xuICAgICAgLy8gVHJpYWwgYW5kIEVycm9yXG4gICAgICB2YXIgc2F2ZSA9IGlucHV0LnNhdmUoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzdGF0ZS5jaG9pY2UgPT09IG51bGwpXG4gICAgICAgICAgdGhpcy5fZGVjb2RlR2VuZXJpYyhzdGF0ZS50YWcsIGlucHV0LCBvcHRpb25zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMuX2RlY29kZUNob2ljZShpbnB1dCwgb3B0aW9ucyk7XG4gICAgICAgIHByZXNlbnQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBwcmVzZW50ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpbnB1dC5yZXN0b3JlKHNhdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVzZW50ID0gdGhpcy5fcGVla1RhZyhpbnB1dCwgdGFnLCBzdGF0ZS5hbnkpO1xuXG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcihwcmVzZW50KSlcbiAgICAgICAgcmV0dXJuIHByZXNlbnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gUHVzaCBvYmplY3Qgb24gc3RhY2tcbiAgdmFyIHByZXZPYmo7XG4gIGlmIChzdGF0ZS5vYmogJiYgcHJlc2VudClcbiAgICBwcmV2T2JqID0gaW5wdXQuZW50ZXJPYmplY3QoKTtcblxuICBpZiAocHJlc2VudCkge1xuICAgIC8vIFVud3JhcCBleHBsaWNpdCB2YWx1ZXNcbiAgICBpZiAoc3RhdGUuZXhwbGljaXQgIT09IG51bGwpIHtcbiAgICAgIHZhciBleHBsaWNpdCA9IHRoaXMuX2RlY29kZVRhZyhpbnB1dCwgc3RhdGUuZXhwbGljaXQpO1xuICAgICAgaWYgKGlucHV0LmlzRXJyb3IoZXhwbGljaXQpKVxuICAgICAgICByZXR1cm4gZXhwbGljaXQ7XG4gICAgICBpbnB1dCA9IGV4cGxpY2l0O1xuICAgIH1cblxuICAgIHZhciBzdGFydCA9IGlucHV0Lm9mZnNldDtcblxuICAgIC8vIFVud3JhcCBpbXBsaWNpdCBhbmQgbm9ybWFsIHZhbHVlc1xuICAgIGlmIChzdGF0ZS51c2UgPT09IG51bGwgJiYgc3RhdGUuY2hvaWNlID09PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdGUuYW55KVxuICAgICAgICB2YXIgc2F2ZSA9IGlucHV0LnNhdmUoKTtcbiAgICAgIHZhciBib2R5ID0gdGhpcy5fZGVjb2RlVGFnKFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgc3RhdGUuaW1wbGljaXQgIT09IG51bGwgPyBzdGF0ZS5pbXBsaWNpdCA6IHN0YXRlLnRhZyxcbiAgICAgICAgc3RhdGUuYW55XG4gICAgICApO1xuICAgICAgaWYgKGlucHV0LmlzRXJyb3IoYm9keSkpXG4gICAgICAgIHJldHVybiBib2R5O1xuXG4gICAgICBpZiAoc3RhdGUuYW55KVxuICAgICAgICByZXN1bHQgPSBpbnB1dC5yYXcoc2F2ZSk7XG4gICAgICBlbHNlXG4gICAgICAgIGlucHV0ID0gYm9keTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyYWNrICYmIHN0YXRlLnRhZyAhPT0gbnVsbClcbiAgICAgIG9wdGlvbnMudHJhY2soaW5wdXQucGF0aCgpLCBzdGFydCwgaW5wdXQubGVuZ3RoLCAndGFnZ2VkJyk7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyYWNrICYmIHN0YXRlLnRhZyAhPT0gbnVsbClcbiAgICAgIG9wdGlvbnMudHJhY2soaW5wdXQucGF0aCgpLCBpbnB1dC5vZmZzZXQsIGlucHV0Lmxlbmd0aCwgJ2NvbnRlbnQnKTtcblxuICAgIC8vIFNlbGVjdCBwcm9wZXIgbWV0aG9kIGZvciB0YWdcbiAgICBpZiAoc3RhdGUuYW55KVxuICAgICAgcmVzdWx0ID0gcmVzdWx0O1xuICAgIGVsc2UgaWYgKHN0YXRlLmNob2ljZSA9PT0gbnVsbClcbiAgICAgIHJlc3VsdCA9IHRoaXMuX2RlY29kZUdlbmVyaWMoc3RhdGUudGFnLCBpbnB1dCwgb3B0aW9ucyk7XG4gICAgZWxzZVxuICAgICAgcmVzdWx0ID0gdGhpcy5fZGVjb2RlQ2hvaWNlKGlucHV0LCBvcHRpb25zKTtcblxuICAgIGlmIChpbnB1dC5pc0Vycm9yKHJlc3VsdCkpXG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgLy8gRGVjb2RlIGNoaWxkcmVuXG4gICAgaWYgKCFzdGF0ZS5hbnkgJiYgc3RhdGUuY2hvaWNlID09PSBudWxsICYmIHN0YXRlLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIGRlY29kZUNoaWxkcmVuKGNoaWxkKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFyZSBpZ25vcmluZyBlcnJvcnMgaGVyZSwgdG8gbGV0IHBhcnNlciBjb250aW51ZSB3aXRoIG90aGVyXG4gICAgICAgIC8vIHBhcnRzIG9mIGVuY29kZWQgZGF0YVxuICAgICAgICBjaGlsZC5fZGVjb2RlKGlucHV0LCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBjb250YWluZWQvZW5jb2RlZCBieSBzY2hlbWEsIG9ubHkgaW4gYml0IG9yIG9jdGV0IHN0cmluZ3NcbiAgICBpZiAoc3RhdGUuY29udGFpbnMgJiYgKHN0YXRlLnRhZyA9PT0gJ29jdHN0cicgfHwgc3RhdGUudGFnID09PSAnYml0c3RyJykpIHtcbiAgICAgIHZhciBkYXRhID0gbmV3IERlY29kZXJCdWZmZXIocmVzdWx0KTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuX2dldFVzZShzdGF0ZS5jb250YWlucywgaW5wdXQuX3JlcG9ydGVyU3RhdGUub2JqKVxuICAgICAgICAgIC5fZGVjb2RlKGRhdGEsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBvcCBvYmplY3RcbiAgaWYgKHN0YXRlLm9iaiAmJiBwcmVzZW50KVxuICAgIHJlc3VsdCA9IGlucHV0LmxlYXZlT2JqZWN0KHByZXZPYmopO1xuXG4gIC8vIFNldCBrZXlcbiAgaWYgKHN0YXRlLmtleSAhPT0gbnVsbCAmJiAocmVzdWx0ICE9PSBudWxsIHx8IHByZXNlbnQgPT09IHRydWUpKVxuICAgIGlucHV0LmxlYXZlS2V5KHByZXZLZXksIHN0YXRlLmtleSwgcmVzdWx0KTtcbiAgZWxzZSBpZiAocHJldktleSAhPT0gbnVsbClcbiAgICBpbnB1dC5leGl0S2V5KHByZXZLZXkpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYyA9IGZ1bmN0aW9uIGRlY29kZUdlbmVyaWModGFnLCBpbnB1dCwgb3B0aW9ucykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgaWYgKHRhZyA9PT0gJ3NlcScgfHwgdGFnID09PSAnc2V0JylcbiAgICByZXR1cm4gbnVsbDtcbiAgaWYgKHRhZyA9PT0gJ3NlcW9mJyB8fCB0YWcgPT09ICdzZXRvZicpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZUxpc3QoaW5wdXQsIHRhZywgc3RhdGUuYXJnc1swXSwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKC9zdHIkLy50ZXN0KHRhZykpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZVN0cihpbnB1dCwgdGFnLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnICYmIHN0YXRlLmFyZ3MpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZU9iamlkKGlucHV0LCBzdGF0ZS5hcmdzWzBdLCBzdGF0ZS5hcmdzWzFdLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVPYmppZChpbnB1dCwgbnVsbCwgbnVsbCwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2dlbnRpbWUnIHx8IHRhZyA9PT0gJ3V0Y3RpbWUnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVUaW1lKGlucHV0LCB0YWcsIG9wdGlvbnMpO1xuICBlbHNlIGlmICh0YWcgPT09ICdudWxsXycpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZU51bGwoaW5wdXQsIG9wdGlvbnMpO1xuICBlbHNlIGlmICh0YWcgPT09ICdib29sJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlQm9vbChpbnB1dCwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ29iakRlc2MnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVTdHIoaW5wdXQsIHRhZywgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2ludCcgfHwgdGFnID09PSAnZW51bScpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZUludChpbnB1dCwgc3RhdGUuYXJncyAmJiBzdGF0ZS5hcmdzWzBdLCBvcHRpb25zKTtcblxuICBpZiAoc3RhdGUudXNlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFVzZShzdGF0ZS51c2UsIGlucHV0Ll9yZXBvcnRlclN0YXRlLm9iailcbiAgICAgICAgLl9kZWNvZGUoaW5wdXQsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBpbnB1dC5lcnJvcigndW5rbm93biB0YWc6ICcgKyB0YWcpO1xuICB9XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZ2V0VXNlID0gZnVuY3Rpb24gX2dldFVzZShlbnRpdHksIG9iaikge1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgLy8gQ3JlYXRlIGFsdGVyZWQgdXNlIGRlY29kZXIgaWYgaW1wbGljaXQgaXMgc2V0XG4gIHN0YXRlLnVzZURlY29kZXIgPSB0aGlzLl91c2UoZW50aXR5LCBvYmopO1xuICBhc3NlcnQoc3RhdGUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCA9PT0gbnVsbCk7XG4gIHN0YXRlLnVzZURlY29kZXIgPSBzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF07XG4gIGlmIChzdGF0ZS5pbXBsaWNpdCAhPT0gc3RhdGUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0KSB7XG4gICAgc3RhdGUudXNlRGVjb2RlciA9IHN0YXRlLnVzZURlY29kZXIuY2xvbmUoKTtcbiAgICBzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQgPSBzdGF0ZS5pbXBsaWNpdDtcbiAgfVxuICByZXR1cm4gc3RhdGUudXNlRGVjb2Rlcjtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9kZWNvZGVDaG9pY2UgPSBmdW5jdGlvbiBkZWNvZGVDaG9pY2UoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgdmFyIG1hdGNoID0gZmFsc2U7XG5cbiAgT2JqZWN0LmtleXMoc3RhdGUuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBzYXZlID0gaW5wdXQuc2F2ZSgpO1xuICAgIHZhciBub2RlID0gc3RhdGUuY2hvaWNlW2tleV07XG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWx1ZSA9IG5vZGUuX2RlY29kZShpbnB1dCwgb3B0aW9ucyk7XG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcih2YWx1ZSkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgcmVzdWx0ID0geyB0eXBlOiBrZXksIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlucHV0LnJlc3RvcmUoc2F2ZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LCB0aGlzKTtcblxuICBpZiAoIW1hdGNoKVxuICAgIHJldHVybiBpbnB1dC5lcnJvcignQ2hvaWNlIG5vdCBtYXRjaGVkJyk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vXG4vLyBFbmNvZGluZ1xuLy9cblxuTm9kZS5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXIgPSBmdW5jdGlvbiBjcmVhdGVFbmNvZGVyQnVmZmVyKGRhdGEpIHtcbiAgcmV0dXJuIG5ldyBFbmNvZGVyQnVmZmVyKGRhdGEsIHRoaXMucmVwb3J0ZXIpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShkYXRhLCByZXBvcnRlciwgcGFyZW50KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgaWYgKHN0YXRlWydkZWZhdWx0J10gIT09IG51bGwgJiYgc3RhdGVbJ2RlZmF1bHQnXSA9PT0gZGF0YSlcbiAgICByZXR1cm47XG5cbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2VuY29kZVZhbHVlKGRhdGEsIHJlcG9ydGVyLCBwYXJlbnQpO1xuICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuO1xuXG4gIGlmICh0aGlzLl9za2lwRGVmYXVsdChyZXN1bHQsIHJlcG9ydGVyLCBwYXJlbnQpKVxuICAgIHJldHVybjtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZVZhbHVlID0gZnVuY3Rpb24gZW5jb2RlKGRhdGEsIHJlcG9ydGVyLCBwYXJlbnQpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIC8vIERlY29kZSByb290IG5vZGVcbiAgaWYgKHN0YXRlLnBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gc3RhdGUuY2hpbGRyZW5bMF0uX2VuY29kZShkYXRhLCByZXBvcnRlciB8fCBuZXcgUmVwb3J0ZXIoKSk7XG5cbiAgdmFyIHJlc3VsdCA9IG51bGw7XG5cbiAgLy8gU2V0IHJlcG9ydGVyIHRvIHNoYXJlIGl0IHdpdGggYSBjaGlsZCBjbGFzc1xuICB0aGlzLnJlcG9ydGVyID0gcmVwb3J0ZXI7XG5cbiAgLy8gQ2hlY2sgaWYgZGF0YSBpcyB0aGVyZVxuICBpZiAoc3RhdGUub3B0aW9uYWwgJiYgZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHN0YXRlWydkZWZhdWx0J10gIT09IG51bGwpXG4gICAgICBkYXRhID0gc3RhdGVbJ2RlZmF1bHQnXVxuICAgIGVsc2VcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEVuY29kZSBjaGlsZHJlbiBmaXJzdFxuICB2YXIgY29udGVudCA9IG51bGw7XG4gIHZhciBwcmltaXRpdmUgPSBmYWxzZTtcbiAgaWYgKHN0YXRlLmFueSkge1xuICAgIC8vIEFueXRoaW5nIHRoYXQgd2FzIGdpdmVuIGlzIHRyYW5zbGF0ZWQgdG8gYnVmZmVyXG4gICAgcmVzdWx0ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihkYXRhKTtcbiAgfSBlbHNlIGlmIChzdGF0ZS5jaG9pY2UpIHtcbiAgICByZXN1bHQgPSB0aGlzLl9lbmNvZGVDaG9pY2UoZGF0YSwgcmVwb3J0ZXIpO1xuICB9IGVsc2UgaWYgKHN0YXRlLmNvbnRhaW5zKSB7XG4gICAgY29udGVudCA9IHRoaXMuX2dldFVzZShzdGF0ZS5jb250YWlucywgcGFyZW50KS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyKTtcbiAgICBwcmltaXRpdmUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHN0YXRlLmNoaWxkcmVuKSB7XG4gICAgY29udGVudCA9IHN0YXRlLmNoaWxkcmVuLm1hcChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkLl9iYXNlU3RhdGUudGFnID09PSAnbnVsbF8nKVxuICAgICAgICByZXR1cm4gY2hpbGQuX2VuY29kZShudWxsLCByZXBvcnRlciwgZGF0YSk7XG5cbiAgICAgIGlmIChjaGlsZC5fYmFzZVN0YXRlLmtleSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdDaGlsZCBzaG91bGQgaGF2ZSBhIGtleScpO1xuICAgICAgdmFyIHByZXZLZXkgPSByZXBvcnRlci5lbnRlcktleShjaGlsZC5fYmFzZVN0YXRlLmtleSk7XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpXG4gICAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Jyk7XG5cbiAgICAgIHZhciByZXMgPSBjaGlsZC5fZW5jb2RlKGRhdGFbY2hpbGQuX2Jhc2VTdGF0ZS5rZXldLCByZXBvcnRlciwgZGF0YSk7XG4gICAgICByZXBvcnRlci5sZWF2ZUtleShwcmV2S2V5KTtcblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LCB0aGlzKS5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9KTtcbiAgICBjb250ZW50ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihjb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoc3RhdGUudGFnID09PSAnc2Vxb2YnIHx8IHN0YXRlLnRhZyA9PT0gJ3NldG9mJykge1xuICAgICAgLy8gVE9ETyhpbmR1dG55KTogdGhpcyBzaG91bGQgYmUgdGhyb3duIG9uIERTTCBsZXZlbFxuICAgICAgaWYgKCEoc3RhdGUuYXJncyAmJiBzdGF0ZS5hcmdzLmxlbmd0aCA9PT0gMSkpXG4gICAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignVG9vIG1hbnkgYXJncyBmb3IgOiAnICsgc3RhdGUudGFnKTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKVxuICAgICAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ3NlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXknKTtcblxuICAgICAgdmFyIGNoaWxkID0gdGhpcy5jbG9uZSgpO1xuICAgICAgY2hpbGQuX2Jhc2VTdGF0ZS5pbXBsaWNpdCA9IG51bGw7XG4gICAgICBjb250ZW50ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihkYXRhLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VXNlKHN0YXRlLmFyZ3NbMF0sIGRhdGEpLl9lbmNvZGUoaXRlbSwgcmVwb3J0ZXIpO1xuICAgICAgfSwgY2hpbGQpKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLnVzZSAhPT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5fZ2V0VXNlKHN0YXRlLnVzZSwgcGFyZW50KS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCA9IHRoaXMuX2VuY29kZVByaW1pdGl2ZShzdGF0ZS50YWcsIGRhdGEpO1xuICAgICAgcHJpbWl0aXZlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBFbmNvZGUgZGF0YSBpdHNlbGZcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCFzdGF0ZS5hbnkgJiYgc3RhdGUuY2hvaWNlID09PSBudWxsKSB7XG4gICAgdmFyIHRhZyA9IHN0YXRlLmltcGxpY2l0ICE9PSBudWxsID8gc3RhdGUuaW1wbGljaXQgOiBzdGF0ZS50YWc7XG4gICAgdmFyIGNscyA9IHN0YXRlLmltcGxpY2l0ID09PSBudWxsID8gJ3VuaXZlcnNhbCcgOiAnY29udGV4dCc7XG5cbiAgICBpZiAodGFnID09PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdGUudXNlID09PSBudWxsKVxuICAgICAgICByZXBvcnRlci5lcnJvcignVGFnIGNvdWxkIGJlIG9tbWl0ZWQgb25seSBmb3IgLnVzZSgpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0ZS51c2UgPT09IG51bGwpXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZUNvbXBvc2l0ZSh0YWcsIHByaW1pdGl2ZSwgY2xzLCBjb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBXcmFwIGluIGV4cGxpY2l0XG4gIGlmIChzdGF0ZS5leHBsaWNpdCAhPT0gbnVsbClcbiAgICByZXN1bHQgPSB0aGlzLl9lbmNvZGVDb21wb3NpdGUoc3RhdGUuZXhwbGljaXQsIGZhbHNlLCAnY29udGV4dCcsIHJlc3VsdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9lbmNvZGVDaG9pY2UgPSBmdW5jdGlvbiBlbmNvZGVDaG9pY2UoZGF0YSwgcmVwb3J0ZXIpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHZhciBub2RlID0gc3RhdGUuY2hvaWNlW2RhdGEudHlwZV07XG4gIGlmICghbm9kZSkge1xuICAgIGFzc2VydChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGRhdGEudHlwZSArICcgbm90IGZvdW5kIGluICcgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc3RhdGUuY2hvaWNlKSkpO1xuICB9XG4gIHJldHVybiBub2RlLl9lbmNvZGUoZGF0YS52YWx1ZSwgcmVwb3J0ZXIpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZSA9IGZ1bmN0aW9uIGVuY29kZVByaW1pdGl2ZSh0YWcsIGRhdGEpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGlmICgvc3RyJC8udGVzdCh0YWcpKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVTdHIoZGF0YSwgdGFnKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnICYmIHN0YXRlLmFyZ3MpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGRhdGEsIHN0YXRlLnJldmVyc2VBcmdzWzBdLCBzdGF0ZS5hcmdzWzFdKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVPYmppZChkYXRhLCBudWxsLCBudWxsKTtcbiAgZWxzZSBpZiAodGFnID09PSAnZ2VudGltZScgfHwgdGFnID09PSAndXRjdGltZScpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoZGF0YSwgdGFnKTtcbiAgZWxzZSBpZiAodGFnID09PSAnbnVsbF8nKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2ludCcgfHwgdGFnID09PSAnZW51bScpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZUludChkYXRhLCBzdGF0ZS5hcmdzICYmIHN0YXRlLnJldmVyc2VBcmdzWzBdKTtcbiAgZWxzZSBpZiAodGFnID09PSAnYm9vbCcpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woZGF0YSk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ29iakRlc2MnKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVTdHIoZGF0YSwgdGFnKTtcbiAgZWxzZVxuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdGFnOiAnICsgdGFnKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9pc051bXN0ciA9IGZ1bmN0aW9uIGlzTnVtc3RyKHN0cikge1xuICByZXR1cm4gL15bMC05IF0qJC8udGVzdChzdHIpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2lzUHJpbnRzdHIgPSBmdW5jdGlvbiBpc1ByaW50c3RyKHN0cikge1xuICByZXR1cm4gL15bQS1aYS16MC05ICdcXChcXClcXCssXFwtXFwuXFwvOj1cXD9dKiQvLnRlc3Qoc3RyKTtcbn07XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5mdW5jdGlvbiBSZXBvcnRlcihvcHRpb25zKSB7XG4gIHRoaXMuX3JlcG9ydGVyU3RhdGUgPSB7XG4gICAgb2JqOiBudWxsLFxuICAgIHBhdGg6IFtdLFxuICAgIG9wdGlvbnM6IG9wdGlvbnMgfHwge30sXG4gICAgZXJyb3JzOiBbXVxuICB9O1xufVxuZXhwb3J0cy5SZXBvcnRlciA9IFJlcG9ydGVyO1xuXG5SZXBvcnRlci5wcm90b3R5cGUuaXNFcnJvciA9IGZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBSZXBvcnRlckVycm9yO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbiBzYXZlKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHJldHVybiB7IG9iajogc3RhdGUub2JqLCBwYXRoTGVuOiBzdGF0ZS5wYXRoLmxlbmd0aCB9O1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLnJlc3RvcmUgPSBmdW5jdGlvbiByZXN0b3JlKGRhdGEpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICBzdGF0ZS5vYmogPSBkYXRhLm9iajtcbiAgc3RhdGUucGF0aCA9IHN0YXRlLnBhdGguc2xpY2UoMCwgZGF0YS5wYXRoTGVuKTtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5lbnRlcktleSA9IGZ1bmN0aW9uIGVudGVyS2V5KGtleSkge1xuICByZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2goa2V5KTtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5leGl0S2V5ID0gZnVuY3Rpb24gZXhpdEtleShpbmRleCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHN0YXRlLnBhdGggPSBzdGF0ZS5wYXRoLnNsaWNlKDAsIGluZGV4IC0gMSk7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUubGVhdmVLZXkgPSBmdW5jdGlvbiBsZWF2ZUtleShpbmRleCwga2V5LCB2YWx1ZSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHRoaXMuZXhpdEtleShpbmRleCk7XG4gIGlmIChzdGF0ZS5vYmogIT09IG51bGwpXG4gICAgc3RhdGUub2JqW2tleV0gPSB2YWx1ZTtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCcvJyk7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUuZW50ZXJPYmplY3QgPSBmdW5jdGlvbiBlbnRlck9iamVjdCgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICB2YXIgcHJldiA9IHN0YXRlLm9iajtcbiAgc3RhdGUub2JqID0ge307XG4gIHJldHVybiBwcmV2O1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmxlYXZlT2JqZWN0ID0gZnVuY3Rpb24gbGVhdmVPYmplY3QocHJldikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHZhciBub3cgPSBzdGF0ZS5vYmo7XG4gIHN0YXRlLm9iaiA9IHByZXY7XG4gIHJldHVybiBub3c7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihtc2cpIHtcbiAgdmFyIGVycjtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICB2YXIgaW5oZXJpdGVkID0gbXNnIGluc3RhbmNlb2YgUmVwb3J0ZXJFcnJvcjtcbiAgaWYgKGluaGVyaXRlZCkge1xuICAgIGVyciA9IG1zZztcbiAgfSBlbHNlIHtcbiAgICBlcnIgPSBuZXcgUmVwb3J0ZXJFcnJvcihzdGF0ZS5wYXRoLm1hcChmdW5jdGlvbihlbGVtKSB7XG4gICAgICByZXR1cm4gJ1snICsgSlNPTi5zdHJpbmdpZnkoZWxlbSkgKyAnXSc7XG4gICAgfSkuam9pbignJyksIG1zZy5tZXNzYWdlIHx8IG1zZywgbXNnLnN0YWNrKTtcbiAgfVxuXG4gIGlmICghc3RhdGUub3B0aW9ucy5wYXJ0aWFsKVxuICAgIHRocm93IGVycjtcblxuICBpZiAoIWluaGVyaXRlZClcbiAgICBzdGF0ZS5lcnJvcnMucHVzaChlcnIpO1xuXG4gIHJldHVybiBlcnI7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUud3JhcFJlc3VsdCA9IGZ1bmN0aW9uIHdyYXBSZXN1bHQocmVzdWx0KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG4gIGlmICghc3RhdGUub3B0aW9ucy5wYXJ0aWFsKVxuICAgIHJldHVybiByZXN1bHQ7XG5cbiAgcmV0dXJuIHtcbiAgICByZXN1bHQ6IHRoaXMuaXNFcnJvcihyZXN1bHQpID8gbnVsbCA6IHJlc3VsdCxcbiAgICBlcnJvcnM6IHN0YXRlLmVycm9yc1xuICB9O1xufTtcblxuZnVuY3Rpb24gUmVwb3J0ZXJFcnJvcihwYXRoLCBtc2cpIHtcbiAgdGhpcy5wYXRoID0gcGF0aDtcbiAgdGhpcy5yZXRocm93KG1zZyk7XG59O1xuaW5oZXJpdHMoUmVwb3J0ZXJFcnJvciwgRXJyb3IpO1xuXG5SZXBvcnRlckVycm9yLnByb3RvdHlwZS5yZXRocm93ID0gZnVuY3Rpb24gcmV0aHJvdyhtc2cpIHtcbiAgdGhpcy5tZXNzYWdlID0gbXNnICsgJyBhdDogJyArICh0aGlzLnBhdGggfHwgJyhzaGFsbG93KScpO1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVwb3J0ZXJFcnJvcik7XG5cbiAgaWYgKCF0aGlzLnN0YWNrKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIElFIG9ubHkgYWRkcyBzdGFjayB3aGVuIHRocm93blxuICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5zdGFjayA9IGUuc3RhY2s7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufTtcbiIsInZhciBjb25zdGFudHMgPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcblxuZXhwb3J0cy50YWdDbGFzcyA9IHtcbiAgMDogJ3VuaXZlcnNhbCcsXG4gIDE6ICdhcHBsaWNhdGlvbicsXG4gIDI6ICdjb250ZXh0JyxcbiAgMzogJ3ByaXZhdGUnXG59O1xuZXhwb3J0cy50YWdDbGFzc0J5TmFtZSA9IGNvbnN0YW50cy5fcmV2ZXJzZShleHBvcnRzLnRhZ0NsYXNzKTtcblxuZXhwb3J0cy50YWcgPSB7XG4gIDB4MDA6ICdlbmQnLFxuICAweDAxOiAnYm9vbCcsXG4gIDB4MDI6ICdpbnQnLFxuICAweDAzOiAnYml0c3RyJyxcbiAgMHgwNDogJ29jdHN0cicsXG4gIDB4MDU6ICdudWxsXycsXG4gIDB4MDY6ICdvYmppZCcsXG4gIDB4MDc6ICdvYmpEZXNjJyxcbiAgMHgwODogJ2V4dGVybmFsJyxcbiAgMHgwOTogJ3JlYWwnLFxuICAweDBhOiAnZW51bScsXG4gIDB4MGI6ICdlbWJlZCcsXG4gIDB4MGM6ICd1dGY4c3RyJyxcbiAgMHgwZDogJ3JlbGF0aXZlT2lkJyxcbiAgMHgxMDogJ3NlcScsXG4gIDB4MTE6ICdzZXQnLFxuICAweDEyOiAnbnVtc3RyJyxcbiAgMHgxMzogJ3ByaW50c3RyJyxcbiAgMHgxNDogJ3Q2MXN0cicsXG4gIDB4MTU6ICd2aWRlb3N0cicsXG4gIDB4MTY6ICdpYTVzdHInLFxuICAweDE3OiAndXRjdGltZScsXG4gIDB4MTg6ICdnZW50aW1lJyxcbiAgMHgxOTogJ2dyYXBoc3RyJyxcbiAgMHgxYTogJ2lzbzY0NnN0cicsXG4gIDB4MWI6ICdnZW5zdHInLFxuICAweDFjOiAndW5pc3RyJyxcbiAgMHgxZDogJ2NoYXJzdHInLFxuICAweDFlOiAnYm1wc3RyJ1xufTtcbmV4cG9ydHMudGFnQnlOYW1lID0gY29uc3RhbnRzLl9yZXZlcnNlKGV4cG9ydHMudGFnKTtcbiIsInZhciBjb25zdGFudHMgPSBleHBvcnRzO1xuXG4vLyBIZWxwZXJcbmNvbnN0YW50cy5fcmV2ZXJzZSA9IGZ1bmN0aW9uIHJldmVyc2UobWFwKSB7XG4gIHZhciByZXMgPSB7fTtcblxuICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgLy8gQ29udmVydCBrZXkgdG8gaW50ZWdlciBpZiBpdCBpcyBzdHJpbmdpZmllZFxuICAgIGlmICgoa2V5IHwgMCkgPT0ga2V5KVxuICAgICAga2V5ID0ga2V5IHwgMDtcblxuICAgIHZhciB2YWx1ZSA9IG1hcFtrZXldO1xuICAgIHJlc1t2YWx1ZV0gPSBrZXk7XG4gIH0pO1xuXG4gIHJldHVybiByZXM7XG59O1xuXG5jb25zdGFudHMuZGVyID0gcmVxdWlyZSgnLi9kZXInKTtcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBhc24xID0gcmVxdWlyZSgnLi4vLi4vYXNuMScpO1xudmFyIGJhc2UgPSBhc24xLmJhc2U7XG52YXIgYmlnbnVtID0gYXNuMS5iaWdudW07XG5cbi8vIEltcG9ydCBERVIgY29uc3RhbnRzXG52YXIgZGVyID0gYXNuMS5jb25zdGFudHMuZGVyO1xuXG5mdW5jdGlvbiBERVJEZWNvZGVyKGVudGl0eSkge1xuICB0aGlzLmVuYyA9ICdkZXInO1xuICB0aGlzLm5hbWUgPSBlbnRpdHkubmFtZTtcbiAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XG5cbiAgLy8gQ29uc3RydWN0IGJhc2UgdHJlZVxuICB0aGlzLnRyZWUgPSBuZXcgREVSTm9kZSgpO1xuICB0aGlzLnRyZWUuX2luaXQoZW50aXR5LmJvZHkpO1xufTtcbm1vZHVsZS5leHBvcnRzID0gREVSRGVjb2RlcjtcblxuREVSRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGRhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIGJhc2UuRGVjb2RlckJ1ZmZlcikpXG4gICAgZGF0YSA9IG5ldyBiYXNlLkRlY29kZXJCdWZmZXIoZGF0YSwgb3B0aW9ucyk7XG5cbiAgcmV0dXJuIHRoaXMudHJlZS5fZGVjb2RlKGRhdGEsIG9wdGlvbnMpO1xufTtcblxuLy8gVHJlZSBtZXRob2RzXG5cbmZ1bmN0aW9uIERFUk5vZGUocGFyZW50KSB7XG4gIGJhc2UuTm9kZS5jYWxsKHRoaXMsICdkZXInLCBwYXJlbnQpO1xufVxuaW5oZXJpdHMoREVSTm9kZSwgYmFzZS5Ob2RlKTtcblxuREVSTm9kZS5wcm90b3R5cGUuX3BlZWtUYWcgPSBmdW5jdGlvbiBwZWVrVGFnKGJ1ZmZlciwgdGFnLCBhbnkpIHtcbiAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBzdGF0ZSA9IGJ1ZmZlci5zYXZlKCk7XG4gIHZhciBkZWNvZGVkVGFnID0gZGVyRGVjb2RlVGFnKGJ1ZmZlciwgJ0ZhaWxlZCB0byBwZWVrIHRhZzogXCInICsgdGFnICsgJ1wiJyk7XG4gIGlmIChidWZmZXIuaXNFcnJvcihkZWNvZGVkVGFnKSlcbiAgICByZXR1cm4gZGVjb2RlZFRhZztcblxuICBidWZmZXIucmVzdG9yZShzdGF0ZSk7XG5cbiAgcmV0dXJuIGRlY29kZWRUYWcudGFnID09PSB0YWcgfHwgZGVjb2RlZFRhZy50YWdTdHIgPT09IHRhZyB8fFxuICAgIChkZWNvZGVkVGFnLnRhZ1N0ciArICdvZicpID09PSB0YWcgfHwgYW55O1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVRhZyA9IGZ1bmN0aW9uIGRlY29kZVRhZyhidWZmZXIsIHRhZywgYW55KSB7XG4gIHZhciBkZWNvZGVkVGFnID0gZGVyRGVjb2RlVGFnKGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mIFwiJyArIHRhZyArICdcIicpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IoZGVjb2RlZFRhZykpXG4gICAgcmV0dXJuIGRlY29kZWRUYWc7XG5cbiAgdmFyIGxlbiA9IGRlckRlY29kZUxlbihidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFRhZy5wcmltaXRpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mIFwiJyArIHRhZyArICdcIicpO1xuXG4gIC8vIEZhaWx1cmVcbiAgaWYgKGJ1ZmZlci5pc0Vycm9yKGxlbikpXG4gICAgcmV0dXJuIGxlbjtcblxuICBpZiAoIWFueSAmJlxuICAgICAgZGVjb2RlZFRhZy50YWcgIT09IHRhZyAmJlxuICAgICAgZGVjb2RlZFRhZy50YWdTdHIgIT09IHRhZyAmJlxuICAgICAgZGVjb2RlZFRhZy50YWdTdHIgKyAnb2YnICE9PSB0YWcpIHtcbiAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiBcIicgKyB0YWcgKyAnXCInKTtcbiAgfVxuXG4gIGlmIChkZWNvZGVkVGFnLnByaW1pdGl2ZSB8fCBsZW4gIT09IG51bGwpXG4gICAgcmV0dXJuIGJ1ZmZlci5za2lwKGxlbiwgJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicgKyB0YWcgKyAnXCInKTtcblxuICAvLyBJbmRlZmluaXRlIGxlbmd0aC4uLiBmaW5kIEVORCB0YWdcbiAgdmFyIHN0YXRlID0gYnVmZmVyLnNhdmUoKTtcbiAgdmFyIHJlcyA9IHRoaXMuX3NraXBVbnRpbEVuZChcbiAgICAgIGJ1ZmZlcixcbiAgICAgICdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiBcIicgKyB0aGlzLnRhZyArICdcIicpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IocmVzKSlcbiAgICByZXR1cm4gcmVzO1xuXG4gIGxlbiA9IGJ1ZmZlci5vZmZzZXQgLSBzdGF0ZS5vZmZzZXQ7XG4gIGJ1ZmZlci5yZXN0b3JlKHN0YXRlKTtcbiAgcmV0dXJuIGJ1ZmZlci5za2lwKGxlbiwgJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicgKyB0YWcgKyAnXCInKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9za2lwVW50aWxFbmQgPSBmdW5jdGlvbiBza2lwVW50aWxFbmQoYnVmZmVyLCBmYWlsKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHRhZyA9IGRlckRlY29kZVRhZyhidWZmZXIsIGZhaWwpO1xuICAgIGlmIChidWZmZXIuaXNFcnJvcih0YWcpKVxuICAgICAgcmV0dXJuIHRhZztcbiAgICB2YXIgbGVuID0gZGVyRGVjb2RlTGVuKGJ1ZmZlciwgdGFnLnByaW1pdGl2ZSwgZmFpbCk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKGxlbikpXG4gICAgICByZXR1cm4gbGVuO1xuXG4gICAgdmFyIHJlcztcbiAgICBpZiAodGFnLnByaW1pdGl2ZSB8fCBsZW4gIT09IG51bGwpXG4gICAgICByZXMgPSBidWZmZXIuc2tpcChsZW4pXG4gICAgZWxzZVxuICAgICAgcmVzID0gdGhpcy5fc2tpcFVudGlsRW5kKGJ1ZmZlciwgZmFpbCk7XG5cbiAgICAvLyBGYWlsdXJlXG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHJlcykpXG4gICAgICByZXR1cm4gcmVzO1xuXG4gICAgaWYgKHRhZy50YWdTdHIgPT09ICdlbmQnKVxuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVMaXN0ID0gZnVuY3Rpb24gZGVjb2RlTGlzdChidWZmZXIsIHRhZywgZGVjb2RlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKCFidWZmZXIuaXNFbXB0eSgpKSB7XG4gICAgdmFyIHBvc3NpYmxlRW5kID0gdGhpcy5fcGVla1RhZyhidWZmZXIsICdlbmQnKTtcbiAgICBpZiAoYnVmZmVyLmlzRXJyb3IocG9zc2libGVFbmQpKVxuICAgICAgcmV0dXJuIHBvc3NpYmxlRW5kO1xuXG4gICAgdmFyIHJlcyA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlciwgJ2RlcicsIG9wdGlvbnMpO1xuICAgIGlmIChidWZmZXIuaXNFcnJvcihyZXMpICYmIHBvc3NpYmxlRW5kKVxuICAgICAgYnJlYWs7XG4gICAgcmVzdWx0LnB1c2gocmVzKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVN0ciA9IGZ1bmN0aW9uIGRlY29kZVN0cihidWZmZXIsIHRhZykge1xuICBpZiAodGFnID09PSAnYml0c3RyJykge1xuICAgIHZhciB1bnVzZWQgPSBidWZmZXIucmVhZFVJbnQ4KCk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHVudXNlZCkpXG4gICAgICByZXR1cm4gdW51c2VkO1xuICAgIHJldHVybiB7IHVudXNlZDogdW51c2VkLCBkYXRhOiBidWZmZXIucmF3KCkgfTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdibXBzdHInKSB7XG4gICAgdmFyIHJhdyA9IGJ1ZmZlci5yYXcoKTtcbiAgICBpZiAocmF3Lmxlbmd0aCAlIDIgPT09IDEpXG4gICAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCcpO1xuXG4gICAgdmFyIHN0ciA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3Lmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocmF3LnJlYWRVSW50MTZCRShpICogMikpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ251bXN0cicpIHtcbiAgICB2YXIgbnVtc3RyID0gYnVmZmVyLnJhdygpLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmICghdGhpcy5faXNOdW1zdHIobnVtc3RyKSkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5lcnJvcignRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bXN0cjtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdvY3RzdHInKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5yYXcoKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdvYmpEZXNjJykge1xuICAgIHJldHVybiBidWZmZXIucmF3KCk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAncHJpbnRzdHInKSB7XG4gICAgdmFyIHByaW50c3RyID0gYnVmZmVyLnJhdygpLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmICghdGhpcy5faXNQcmludHN0cihwcmludHN0cikpIHtcbiAgICAgIHJldHVybiBidWZmZXIuZXJyb3IoJ0RlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHByaW50c3RyO1xuICB9IGVsc2UgaWYgKC9zdHIkLy50ZXN0KHRhZykpIHtcbiAgICByZXR1cm4gYnVmZmVyLnJhdygpLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5lcnJvcignRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICcgKyB0YWcgKyAnIHVuc3VwcG9ydGVkJyk7XG4gIH1cbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVPYmppZCA9IGZ1bmN0aW9uIGRlY29kZU9iamlkKGJ1ZmZlciwgdmFsdWVzLCByZWxhdGl2ZSkge1xuICB2YXIgcmVzdWx0O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcbiAgdmFyIGlkZW50ID0gMDtcbiAgd2hpbGUgKCFidWZmZXIuaXNFbXB0eSgpKSB7XG4gICAgdmFyIHN1YmlkZW50ID0gYnVmZmVyLnJlYWRVSW50OCgpO1xuICAgIGlkZW50IDw8PSA3O1xuICAgIGlkZW50IHw9IHN1YmlkZW50ICYgMHg3ZjtcbiAgICBpZiAoKHN1YmlkZW50ICYgMHg4MCkgPT09IDApIHtcbiAgICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnQpO1xuICAgICAgaWRlbnQgPSAwO1xuICAgIH1cbiAgfVxuICBpZiAoc3ViaWRlbnQgJiAweDgwKVxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnQpO1xuXG4gIHZhciBmaXJzdCA9IChpZGVudGlmaWVyc1swXSAvIDQwKSB8IDA7XG4gIHZhciBzZWNvbmQgPSBpZGVudGlmaWVyc1swXSAlIDQwO1xuXG4gIGlmIChyZWxhdGl2ZSlcbiAgICByZXN1bHQgPSBpZGVudGlmaWVycztcbiAgZWxzZVxuICAgIHJlc3VsdCA9IFtmaXJzdCwgc2Vjb25kXS5jb25jYXQoaWRlbnRpZmllcnMuc2xpY2UoMSkpO1xuXG4gIGlmICh2YWx1ZXMpIHtcbiAgICB2YXIgdG1wID0gdmFsdWVzW3Jlc3VsdC5qb2luKCcgJyldO1xuICAgIGlmICh0bXAgPT09IHVuZGVmaW5lZClcbiAgICAgIHRtcCA9IHZhbHVlc1tyZXN1bHQuam9pbignLicpXTtcbiAgICBpZiAodG1wICE9PSB1bmRlZmluZWQpXG4gICAgICByZXN1bHQgPSB0bXA7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVRpbWUgPSBmdW5jdGlvbiBkZWNvZGVUaW1lKGJ1ZmZlciwgdGFnKSB7XG4gIHZhciBzdHIgPSBidWZmZXIucmF3KCkudG9TdHJpbmcoKTtcbiAgaWYgKHRhZyA9PT0gJ2dlbnRpbWUnKSB7XG4gICAgdmFyIHllYXIgPSBzdHIuc2xpY2UoMCwgNCkgfCAwO1xuICAgIHZhciBtb24gPSBzdHIuc2xpY2UoNCwgNikgfCAwO1xuICAgIHZhciBkYXkgPSBzdHIuc2xpY2UoNiwgOCkgfCAwO1xuICAgIHZhciBob3VyID0gc3RyLnNsaWNlKDgsIDEwKSB8IDA7XG4gICAgdmFyIG1pbiA9IHN0ci5zbGljZSgxMCwgMTIpIHwgMDtcbiAgICB2YXIgc2VjID0gc3RyLnNsaWNlKDEyLCAxNCkgfCAwO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ3V0Y3RpbWUnKSB7XG4gICAgdmFyIHllYXIgPSBzdHIuc2xpY2UoMCwgMikgfCAwO1xuICAgIHZhciBtb24gPSBzdHIuc2xpY2UoMiwgNCkgfCAwO1xuICAgIHZhciBkYXkgPSBzdHIuc2xpY2UoNCwgNikgfCAwO1xuICAgIHZhciBob3VyID0gc3RyLnNsaWNlKDYsIDgpIHwgMDtcbiAgICB2YXIgbWluID0gc3RyLnNsaWNlKDgsIDEwKSB8IDA7XG4gICAgdmFyIHNlYyA9IHN0ci5zbGljZSgxMCwgMTIpIHwgMDtcbiAgICBpZiAoeWVhciA8IDcwKVxuICAgICAgeWVhciA9IDIwMDAgKyB5ZWFyO1xuICAgIGVsc2VcbiAgICAgIHllYXIgPSAxOTAwICsgeWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyAnICsgdGFnICsgJyB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gIH1cblxuICByZXR1cm4gRGF0ZS5VVEMoeWVhciwgbW9uIC0gMSwgZGF5LCBob3VyLCBtaW4sIHNlYywgMCk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlTnVsbCA9IGZ1bmN0aW9uIGRlY29kZU51bGwoYnVmZmVyKSB7XG4gIHJldHVybiBudWxsO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZUJvb2wgPSBmdW5jdGlvbiBkZWNvZGVCb29sKGJ1ZmZlcikge1xuICB2YXIgcmVzID0gYnVmZmVyLnJlYWRVSW50OCgpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IocmVzKSlcbiAgICByZXR1cm4gcmVzO1xuICBlbHNlXG4gICAgcmV0dXJuIHJlcyAhPT0gMDtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVJbnQgPSBmdW5jdGlvbiBkZWNvZGVJbnQoYnVmZmVyLCB2YWx1ZXMpIHtcbiAgLy8gQmlnaW50LCByZXR1cm4gYXMgaXQgaXMgKGFzc3VtZSBiaWcgZW5kaWFuKVxuICB2YXIgcmF3ID0gYnVmZmVyLnJhdygpO1xuICB2YXIgcmVzID0gbmV3IGJpZ251bShyYXcpO1xuXG4gIGlmICh2YWx1ZXMpXG4gICAgcmVzID0gdmFsdWVzW3Jlcy50b1N0cmluZygxMCldIHx8IHJlcztcblxuICByZXR1cm4gcmVzO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX3VzZSA9IGZ1bmN0aW9uIHVzZShlbnRpdHksIG9iaikge1xuICBpZiAodHlwZW9mIGVudGl0eSA9PT0gJ2Z1bmN0aW9uJylcbiAgICBlbnRpdHkgPSBlbnRpdHkob2JqKTtcbiAgcmV0dXJuIGVudGl0eS5fZ2V0RGVjb2RlcignZGVyJykudHJlZTtcbn07XG5cbi8vIFV0aWxpdHkgbWV0aG9kc1xuXG5mdW5jdGlvbiBkZXJEZWNvZGVUYWcoYnVmLCBmYWlsKSB7XG4gIHZhciB0YWcgPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICBpZiAoYnVmLmlzRXJyb3IodGFnKSlcbiAgICByZXR1cm4gdGFnO1xuXG4gIHZhciBjbHMgPSBkZXIudGFnQ2xhc3NbdGFnID4+IDZdO1xuICB2YXIgcHJpbWl0aXZlID0gKHRhZyAmIDB4MjApID09PSAwO1xuXG4gIC8vIE11bHRpLW9jdGV0IHRhZyAtIGxvYWRcbiAgaWYgKCh0YWcgJiAweDFmKSA9PT0gMHgxZikge1xuICAgIHZhciBvY3QgPSB0YWc7XG4gICAgdGFnID0gMDtcbiAgICB3aGlsZSAoKG9jdCAmIDB4ODApID09PSAweDgwKSB7XG4gICAgICBvY3QgPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICAgICAgaWYgKGJ1Zi5pc0Vycm9yKG9jdCkpXG4gICAgICAgIHJldHVybiBvY3Q7XG5cbiAgICAgIHRhZyA8PD0gNztcbiAgICAgIHRhZyB8PSBvY3QgJiAweDdmO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0YWcgJj0gMHgxZjtcbiAgfVxuICB2YXIgdGFnU3RyID0gZGVyLnRhZ1t0YWddO1xuXG4gIHJldHVybiB7XG4gICAgY2xzOiBjbHMsXG4gICAgcHJpbWl0aXZlOiBwcmltaXRpdmUsXG4gICAgdGFnOiB0YWcsXG4gICAgdGFnU3RyOiB0YWdTdHJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVyRGVjb2RlTGVuKGJ1ZiwgcHJpbWl0aXZlLCBmYWlsKSB7XG4gIHZhciBsZW4gPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICBpZiAoYnVmLmlzRXJyb3IobGVuKSlcbiAgICByZXR1cm4gbGVuO1xuXG4gIC8vIEluZGVmaW5pdGUgZm9ybVxuICBpZiAoIXByaW1pdGl2ZSAmJiBsZW4gPT09IDB4ODApXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgLy8gRGVmaW5pdGUgZm9ybVxuICBpZiAoKGxlbiAmIDB4ODApID09PSAwKSB7XG4gICAgLy8gU2hvcnQgZm9ybVxuICAgIHJldHVybiBsZW47XG4gIH1cblxuICAvLyBMb25nIGZvcm1cbiAgdmFyIG51bSA9IGxlbiAmIDB4N2Y7XG4gIGlmIChudW0gPiA0KVxuICAgIHJldHVybiBidWYuZXJyb3IoJ2xlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmcnKTtcblxuICBsZW4gPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG4gICAgbGVuIDw8PSA4O1xuICAgIHZhciBqID0gYnVmLnJlYWRVSW50OChmYWlsKTtcbiAgICBpZiAoYnVmLmlzRXJyb3IoaikpXG4gICAgICByZXR1cm4gajtcbiAgICBsZW4gfD0gajtcbiAgfVxuXG4gIHJldHVybiBsZW47XG59XG4iLCJ2YXIgZGVjb2RlcnMgPSBleHBvcnRzO1xuXG5kZWNvZGVycy5kZXIgPSByZXF1aXJlKCcuL2RlcicpO1xuZGVjb2RlcnMucGVtID0gcmVxdWlyZSgnLi9wZW0nKTtcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuXG52YXIgREVSRGVjb2RlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5cbmZ1bmN0aW9uIFBFTURlY29kZXIoZW50aXR5KSB7XG4gIERFUkRlY29kZXIuY2FsbCh0aGlzLCBlbnRpdHkpO1xuICB0aGlzLmVuYyA9ICdwZW0nO1xufTtcbmluaGVyaXRzKFBFTURlY29kZXIsIERFUkRlY29kZXIpO1xubW9kdWxlLmV4cG9ydHMgPSBQRU1EZWNvZGVyO1xuXG5QRU1EZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoZGF0YSwgb3B0aW9ucykge1xuICB2YXIgbGluZXMgPSBkYXRhLnRvU3RyaW5nKCkuc3BsaXQoL1tcXHJcXG5dKy9nKTtcblxuICB2YXIgbGFiZWwgPSBvcHRpb25zLmxhYmVsLnRvVXBwZXJDYXNlKCk7XG5cbiAgdmFyIHJlID0gL14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvO1xuICB2YXIgc3RhcnQgPSAtMTtcbiAgdmFyIGVuZCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1hdGNoID0gbGluZXNbaV0ubWF0Y2gocmUpO1xuICAgIGlmIChtYXRjaCA9PT0gbnVsbClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgaWYgKG1hdGNoWzJdICE9PSBsYWJlbClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgaWYgKHN0YXJ0ID09PSAtMSkge1xuICAgICAgaWYgKG1hdGNoWzFdICE9PSAnQkVHSU4nKVxuICAgICAgICBicmVhaztcbiAgICAgIHN0YXJ0ID0gaTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1hdGNoWzFdICE9PSAnRU5EJylcbiAgICAgICAgYnJlYWs7XG4gICAgICBlbmQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICcgKyBsYWJlbCk7XG5cbiAgdmFyIGJhc2U2NCA9IGxpbmVzLnNsaWNlKHN0YXJ0ICsgMSwgZW5kKS5qb2luKCcnKTtcbiAgLy8gUmVtb3ZlIGV4Y2Vzc2l2ZSBzeW1ib2xzXG4gIGJhc2U2NC5yZXBsYWNlKC9bXmEtejAtOVxcK1xcLz1dKy9naSwgJycpO1xuXG4gIHZhciBpbnB1dCA9IG5ldyBCdWZmZXIoYmFzZTY0LCAnYmFzZTY0Jyk7XG4gIHJldHVybiBERVJEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLCBpbnB1dCwgb3B0aW9ucyk7XG59O1xuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbnZhciBhc24xID0gcmVxdWlyZSgnLi4vLi4vYXNuMScpO1xudmFyIGJhc2UgPSBhc24xLmJhc2U7XG5cbi8vIEltcG9ydCBERVIgY29uc3RhbnRzXG52YXIgZGVyID0gYXNuMS5jb25zdGFudHMuZGVyO1xuXG5mdW5jdGlvbiBERVJFbmNvZGVyKGVudGl0eSkge1xuICB0aGlzLmVuYyA9ICdkZXInO1xuICB0aGlzLm5hbWUgPSBlbnRpdHkubmFtZTtcbiAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XG5cbiAgLy8gQ29uc3RydWN0IGJhc2UgdHJlZVxuICB0aGlzLnRyZWUgPSBuZXcgREVSTm9kZSgpO1xuICB0aGlzLnRyZWUuX2luaXQoZW50aXR5LmJvZHkpO1xufTtcbm1vZHVsZS5leHBvcnRzID0gREVSRW5jb2RlcjtcblxuREVSRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGRhdGEsIHJlcG9ydGVyKSB7XG4gIHJldHVybiB0aGlzLnRyZWUuX2VuY29kZShkYXRhLCByZXBvcnRlcikuam9pbigpO1xufTtcblxuLy8gVHJlZSBtZXRob2RzXG5cbmZ1bmN0aW9uIERFUk5vZGUocGFyZW50KSB7XG4gIGJhc2UuTm9kZS5jYWxsKHRoaXMsICdkZXInLCBwYXJlbnQpO1xufVxuaW5oZXJpdHMoREVSTm9kZSwgYmFzZS5Ob2RlKTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZSA9IGZ1bmN0aW9uIGVuY29kZUNvbXBvc2l0ZSh0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50KSB7XG4gIHZhciBlbmNvZGVkVGFnID0gZW5jb2RlVGFnKHRhZywgcHJpbWl0aXZlLCBjbHMsIHRoaXMucmVwb3J0ZXIpO1xuXG4gIC8vIFNob3J0IGZvcm1cbiAgaWYgKGNvbnRlbnQubGVuZ3RoIDwgMHg4MCkge1xuICAgIHZhciBoZWFkZXIgPSBuZXcgQnVmZmVyKDIpO1xuICAgIGhlYWRlclswXSA9IGVuY29kZWRUYWc7XG4gICAgaGVhZGVyWzFdID0gY29udGVudC5sZW5ndGg7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWyBoZWFkZXIsIGNvbnRlbnQgXSk7XG4gIH1cblxuICAvLyBMb25nIGZvcm1cbiAgLy8gQ291bnQgb2N0ZXRzIHJlcXVpcmVkIHRvIHN0b3JlIGxlbmd0aFxuICB2YXIgbGVuT2N0ZXRzID0gMTtcbiAgZm9yICh2YXIgaSA9IGNvbnRlbnQubGVuZ3RoOyBpID49IDB4MTAwOyBpID4+PSA4KVxuICAgIGxlbk9jdGV0cysrO1xuXG4gIHZhciBoZWFkZXIgPSBuZXcgQnVmZmVyKDEgKyAxICsgbGVuT2N0ZXRzKTtcbiAgaGVhZGVyWzBdID0gZW5jb2RlZFRhZztcbiAgaGVhZGVyWzFdID0gMHg4MCB8IGxlbk9jdGV0cztcblxuICBmb3IgKHZhciBpID0gMSArIGxlbk9jdGV0cywgaiA9IGNvbnRlbnQubGVuZ3RoOyBqID4gMDsgaS0tLCBqID4+PSA4KVxuICAgIGhlYWRlcltpXSA9IGogJiAweGZmO1xuXG4gIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFsgaGVhZGVyLCBjb250ZW50IF0pO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZVN0ciA9IGZ1bmN0aW9uIGVuY29kZVN0cihzdHIsIHRhZykge1xuICBpZiAodGFnID09PSAnYml0c3RyJykge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFsgc3RyLnVudXNlZCB8IDAsIHN0ci5kYXRhIF0pO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2JtcHN0cicpIHtcbiAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzdHIubGVuZ3RoICogMik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1Zi53cml0ZVVJbnQxNkJFKHN0ci5jaGFyQ29kZUF0KGkpLCBpICogMik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGJ1Zik7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnbnVtc3RyJykge1xuICAgIGlmICghdGhpcy5faXNOdW1zdHIoc3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ0VuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBkaWdpdHMgYW5kIHNwYWNlJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHN0cik7XG4gIH0gZWxzZSBpZiAodGFnID09PSAncHJpbnRzdHInKSB7XG4gICAgaWYgKCF0aGlzLl9pc1ByaW50c3RyKHN0cikpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb24gbWFyaycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihzdHIpO1xuICB9IGVsc2UgaWYgKC9zdHIkLy50ZXN0KHRhZykpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihzdHIpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ29iakRlc2MnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoc3RyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICcgKyB0YWcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdW5zdXBwb3J0ZWQnKTtcbiAgfVxufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZU9iamlkID0gZnVuY3Rpb24gZW5jb2RlT2JqaWQoaWQsIHZhbHVlcywgcmVsYXRpdmUpIHtcbiAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIXZhbHVlcylcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kJyk7XG4gICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkoaWQpKVxuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ29iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwJyk7XG4gICAgaWQgPSB2YWx1ZXNbaWRdLnNwbGl0KC9bXFxzXFwuXSsvZyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZC5sZW5ndGg7IGkrKylcbiAgICAgIGlkW2ldIHw9IDA7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpZCkpIHtcbiAgICBpZCA9IGlkLnNsaWNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZC5sZW5ndGg7IGkrKylcbiAgICAgIGlkW2ldIHw9IDA7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoaWQpKSB7XG4gICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ29iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnb3Q6ICcgKyBKU09OLnN0cmluZ2lmeShpZCkpO1xuICB9XG5cbiAgaWYgKCFyZWxhdGl2ZSkge1xuICAgIGlmIChpZFsxXSA+PSA0MClcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0InKTtcbiAgICBpZC5zcGxpY2UoMCwgMiwgaWRbMF0gKiA0MCArIGlkWzFdKTtcbiAgfVxuXG4gIC8vIENvdW50IG51bWJlciBvZiBvY3RldHNcbiAgdmFyIHNpemUgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGlkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGlkZW50ID0gaWRbaV07XG4gICAgZm9yIChzaXplKys7IGlkZW50ID49IDB4ODA7IGlkZW50ID4+PSA3KVxuICAgICAgc2l6ZSsrO1xuICB9XG5cbiAgdmFyIG9iamlkID0gbmV3IEJ1ZmZlcihzaXplKTtcbiAgdmFyIG9mZnNldCA9IG9iamlkLmxlbmd0aCAtIDE7XG4gIGZvciAodmFyIGkgPSBpZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBpZGVudCA9IGlkW2ldO1xuICAgIG9iamlkW29mZnNldC0tXSA9IGlkZW50ICYgMHg3ZjtcbiAgICB3aGlsZSAoKGlkZW50ID4+PSA3KSA+IDApXG4gICAgICBvYmppZFtvZmZzZXQtLV0gPSAweDgwIHwgKGlkZW50ICYgMHg3Zik7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihvYmppZCk7XG59O1xuXG5mdW5jdGlvbiB0d28obnVtKSB7XG4gIGlmIChudW0gPCAxMClcbiAgICByZXR1cm4gJzAnICsgbnVtO1xuICBlbHNlXG4gICAgcmV0dXJuIG51bTtcbn1cblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZVRpbWUgPSBmdW5jdGlvbiBlbmNvZGVUaW1lKHRpbWUsIHRhZykge1xuICB2YXIgc3RyO1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuXG4gIGlmICh0YWcgPT09ICdnZW50aW1lJykge1xuICAgIHN0ciA9IFtcbiAgICAgIHR3byhkYXRlLmdldEZ1bGxZZWFyKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDRGF0ZSgpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ0hvdXJzKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDTWludXRlcygpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ1NlY29uZHMoKSksXG4gICAgICAnWidcbiAgICBdLmpvaW4oJycpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ3V0Y3RpbWUnKSB7XG4gICAgc3RyID0gW1xuICAgICAgdHdvKGRhdGUuZ2V0RnVsbFllYXIoKSAlIDEwMCksXG4gICAgICB0d28oZGF0ZS5nZXRVVENNb250aCgpICsgMSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENEYXRlKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDSG91cnMoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENNaW51dGVzKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDU2Vjb25kcygpKSxcbiAgICAgICdaJ1xuICAgIF0uam9pbignJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZXBvcnRlci5lcnJvcignRW5jb2RpbmcgJyArIHRhZyArICcgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCcpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2VuY29kZVN0cihzdHIsICdvY3RzdHInKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVOdWxsID0gZnVuY3Rpb24gZW5jb2RlTnVsbCgpIHtcbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoJycpO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZUludCA9IGZ1bmN0aW9uIGVuY29kZUludChudW0sIHZhbHVlcykge1xuICBpZiAodHlwZW9mIG51bSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIXZhbHVlcylcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwJyk7XG4gICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkobnVtKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ1ZhbHVlcyBtYXAgZG9lc25cXCd0IGNvbnRhaW46ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobnVtKSk7XG4gICAgfVxuICAgIG51bSA9IHZhbHVlc1tudW1dO1xuICB9XG5cbiAgLy8gQmlnbnVtLCBhc3N1bWUgYmlnIGVuZGlhblxuICBpZiAodHlwZW9mIG51bSAhPT0gJ251bWJlcicgJiYgIUJ1ZmZlci5pc0J1ZmZlcihudW0pKSB7XG4gICAgdmFyIG51bUFycmF5ID0gbnVtLnRvQXJyYXkoKTtcbiAgICBpZiAoIW51bS5zaWduICYmIG51bUFycmF5WzBdICYgMHg4MCkge1xuICAgICAgbnVtQXJyYXkudW5zaGlmdCgwKTtcbiAgICB9XG4gICAgbnVtID0gbmV3IEJ1ZmZlcihudW1BcnJheSk7XG4gIH1cblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG51bSkpIHtcbiAgICB2YXIgc2l6ZSA9IG51bS5sZW5ndGg7XG4gICAgaWYgKG51bS5sZW5ndGggPT09IDApXG4gICAgICBzaXplKys7XG5cbiAgICB2YXIgb3V0ID0gbmV3IEJ1ZmZlcihzaXplKTtcbiAgICBudW0uY29weShvdXQpO1xuICAgIGlmIChudW0ubGVuZ3RoID09PSAwKVxuICAgICAgb3V0WzBdID0gMFxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG91dCk7XG4gIH1cblxuICBpZiAobnVtIDwgMHg4MClcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihudW0pO1xuXG4gIGlmIChudW0gPCAweDEwMClcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCwgbnVtXSk7XG5cbiAgdmFyIHNpemUgPSAxO1xuICBmb3IgKHZhciBpID0gbnVtOyBpID49IDB4MTAwOyBpID4+PSA4KVxuICAgIHNpemUrKztcblxuICB2YXIgb3V0ID0gbmV3IEFycmF5KHNpemUpO1xuICBmb3IgKHZhciBpID0gb3V0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgb3V0W2ldID0gbnVtICYgMHhmZjtcbiAgICBudW0gPj49IDg7XG4gIH1cbiAgaWYob3V0WzBdICYgMHg4MCkge1xuICAgIG91dC51bnNoaWZ0KDApO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobmV3IEJ1ZmZlcihvdXQpKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVCb29sID0gZnVuY3Rpb24gZW5jb2RlQm9vbCh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih2YWx1ZSA/IDB4ZmYgOiAwKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl91c2UgPSBmdW5jdGlvbiB1c2UoZW50aXR5LCBvYmopIHtcbiAgaWYgKHR5cGVvZiBlbnRpdHkgPT09ICdmdW5jdGlvbicpXG4gICAgZW50aXR5ID0gZW50aXR5KG9iaik7XG4gIHJldHVybiBlbnRpdHkuX2dldEVuY29kZXIoJ2RlcicpLnRyZWU7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fc2tpcERlZmF1bHQgPSBmdW5jdGlvbiBza2lwRGVmYXVsdChkYXRhQnVmZmVyLCByZXBvcnRlciwgcGFyZW50KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgdmFyIGk7XG4gIGlmIChzdGF0ZVsnZGVmYXVsdCddID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcblxuICB2YXIgZGF0YSA9IGRhdGFCdWZmZXIuam9pbigpO1xuICBpZiAoc3RhdGUuZGVmYXVsdEJ1ZmZlciA9PT0gdW5kZWZpbmVkKVxuICAgIHN0YXRlLmRlZmF1bHRCdWZmZXIgPSB0aGlzLl9lbmNvZGVWYWx1ZShzdGF0ZVsnZGVmYXVsdCddLCByZXBvcnRlciwgcGFyZW50KS5qb2luKCk7XG5cbiAgaWYgKGRhdGEubGVuZ3RoICE9PSBzdGF0ZS5kZWZhdWx0QnVmZmVyLmxlbmd0aClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChpPTA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkYXRhW2ldICE9PSBzdGF0ZS5kZWZhdWx0QnVmZmVyW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gVXRpbGl0eSBtZXRob2RzXG5cbmZ1bmN0aW9uIGVuY29kZVRhZyh0YWcsIHByaW1pdGl2ZSwgY2xzLCByZXBvcnRlcikge1xuICB2YXIgcmVzO1xuXG4gIGlmICh0YWcgPT09ICdzZXFvZicpXG4gICAgdGFnID0gJ3NlcSc7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ3NldG9mJylcbiAgICB0YWcgPSAnc2V0JztcblxuICBpZiAoZGVyLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eSh0YWcpKVxuICAgIHJlcyA9IGRlci50YWdCeU5hbWVbdGFnXTtcbiAgZWxzZSBpZiAodHlwZW9mIHRhZyA9PT0gJ251bWJlcicgJiYgKHRhZyB8IDApID09PSB0YWcpXG4gICAgcmVzID0gdGFnO1xuICBlbHNlXG4gICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdVbmtub3duIHRhZzogJyArIHRhZyk7XG5cbiAgaWYgKHJlcyA+PSAweDFmKVxuICAgIHJldHVybiByZXBvcnRlci5lcnJvcignTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkJyk7XG5cbiAgaWYgKCFwcmltaXRpdmUpXG4gICAgcmVzIHw9IDB4MjA7XG5cbiAgcmVzIHw9IChkZXIudGFnQ2xhc3NCeU5hbWVbY2xzIHx8ICd1bml2ZXJzYWwnXSA8PCA2KTtcblxuICByZXR1cm4gcmVzO1xufVxuIiwidmFyIGVuY29kZXJzID0gZXhwb3J0cztcblxuZW5jb2RlcnMuZGVyID0gcmVxdWlyZSgnLi9kZXInKTtcbmVuY29kZXJzLnBlbSA9IHJlcXVpcmUoJy4vcGVtJyk7XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG52YXIgREVSRW5jb2RlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5cbmZ1bmN0aW9uIFBFTUVuY29kZXIoZW50aXR5KSB7XG4gIERFUkVuY29kZXIuY2FsbCh0aGlzLCBlbnRpdHkpO1xuICB0aGlzLmVuYyA9ICdwZW0nO1xufTtcbmluaGVyaXRzKFBFTUVuY29kZXIsIERFUkVuY29kZXIpO1xubW9kdWxlLmV4cG9ydHMgPSBQRU1FbmNvZGVyO1xuXG5QRU1FbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoZGF0YSwgb3B0aW9ucykge1xuICB2YXIgYnVmID0gREVSRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcywgZGF0YSk7XG5cbiAgdmFyIHAgPSBidWYudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB2YXIgb3V0ID0gWyAnLS0tLS1CRUdJTiAnICsgb3B0aW9ucy5sYWJlbCArICctLS0tLScgXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwLmxlbmd0aDsgaSArPSA2NClcbiAgICBvdXQucHVzaChwLnNsaWNlKGksIGkgKyA2NCkpO1xuICBvdXQucHVzaCgnLS0tLS1FTkQgJyArIG9wdGlvbnMubGFiZWwgKyAnLS0tLS0nKTtcbiAgcmV0dXJuIG91dC5qb2luKCdcXG4nKTtcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxMSBNYXJrIENhdmFnZSA8bWNhdmFnZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgbmV3SW52YWxpZEFzbjFFcnJvcjogZnVuY3Rpb24obXNnKSB7XG4gICAgdmFyIGUgPSBuZXcgRXJyb3IoKTtcbiAgICBlLm5hbWUgPSAnSW52YWxpZEFzbjFFcnJvcic7XG4gICAgZS5tZXNzYWdlID0gbXNnIHx8ICcnO1xuICAgIHJldHVybiBlO1xuICB9XG5cbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxMSBNYXJrIENhdmFnZSA8bWNhdmFnZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbnZhciBlcnJvcnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xudmFyIHR5cGVzID0gcmVxdWlyZSgnLi90eXBlcycpO1xuXG52YXIgUmVhZGVyID0gcmVxdWlyZSgnLi9yZWFkZXInKTtcbnZhciBXcml0ZXIgPSByZXF1aXJlKCcuL3dyaXRlcicpO1xuXG5cbi8vLy0tLSBFeHBvcnRzXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIFJlYWRlcjogUmVhZGVyLFxuXG4gIFdyaXRlcjogV3JpdGVyXG5cbn07XG5cbmZvciAodmFyIHQgaW4gdHlwZXMpIHtcbiAgaWYgKHR5cGVzLmhhc093blByb3BlcnR5KHQpKVxuICAgIG1vZHVsZS5leHBvcnRzW3RdID0gdHlwZXNbdF07XG59XG5mb3IgKHZhciBlIGluIGVycm9ycykge1xuICBpZiAoZXJyb3JzLmhhc093blByb3BlcnR5KGUpKVxuICAgIG1vZHVsZS5leHBvcnRzW2VdID0gZXJyb3JzW2VdO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTEgTWFyayBDYXZhZ2UgPG1jYXZhZ2VAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG5cbnZhciBBU04xID0gcmVxdWlyZSgnLi90eXBlcycpO1xudmFyIGVycm9ycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG5cblxuLy8vLS0tIEdsb2JhbHNcblxudmFyIG5ld0ludmFsaWRBc24xRXJyb3IgPSBlcnJvcnMubmV3SW52YWxpZEFzbjFFcnJvcjtcblxuXG5cbi8vLy0tLSBBUElcblxuZnVuY3Rpb24gUmVhZGVyKGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICFCdWZmZXIuaXNCdWZmZXIoZGF0YSkpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGEgbm9kZSBCdWZmZXInKTtcblxuICB0aGlzLl9idWYgPSBkYXRhO1xuICB0aGlzLl9zaXplID0gZGF0YS5sZW5ndGg7XG5cbiAgLy8gVGhlc2UgaG9sZCB0aGUgXCJjdXJyZW50XCIgc3RhdGVcbiAgdGhpcy5fbGVuID0gMDtcbiAgdGhpcy5fb2Zmc2V0ID0gMDtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRlci5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuX2xlbik7IH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5fb2Zmc2V0KTsgfVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkZXIucHJvdG90eXBlLCAncmVtYWluJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLl9zaXplIC0gdGhpcy5fb2Zmc2V0KTsgfVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkZXIucHJvdG90eXBlLCAnYnVmZmVyJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLl9idWYuc2xpY2UodGhpcy5fb2Zmc2V0KSk7IH1cbn0pO1xuXG5cbi8qKlxuICogUmVhZHMgYSBzaW5nbGUgYnl0ZSBhbmQgYWR2YW5jZXMgb2Zmc2V0OyB5b3UgY2FuIHBhc3MgaW4gYHRydWVgIHRvIG1ha2UgdGhpc1xuICogYSBcInBlZWtcIiBvcGVyYXRpb24gKGkuZS4sIGdldCB0aGUgYnl0ZSwgYnV0IGRvbid0IGFkdmFuY2UgdGhlIG9mZnNldCkuXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBwZWVrIHRydWUgbWVhbnMgZG9uJ3QgbW92ZSBvZmZzZXQuXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBuZXh0IGJ5dGUsIG51bGwgaWYgbm90IGVub3VnaCBkYXRhLlxuICovXG5SZWFkZXIucHJvdG90eXBlLnJlYWRCeXRlID0gZnVuY3Rpb24ocGVlaykge1xuICBpZiAodGhpcy5fc2l6ZSAtIHRoaXMuX29mZnNldCA8IDEpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgdmFyIGIgPSB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0XSAmIDB4ZmY7XG5cbiAgaWYgKCFwZWVrKVxuICAgIHRoaXMuX29mZnNldCArPSAxO1xuXG4gIHJldHVybiBiO1xufTtcblxuXG5SZWFkZXIucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMucmVhZEJ5dGUodHJ1ZSk7XG59O1xuXG5cbi8qKlxuICogUmVhZHMgYSAocG90ZW50aWFsbHkpIHZhcmlhYmxlIGxlbmd0aCBvZmYgdGhlIEJFUiBidWZmZXIuICBUaGlzIGNhbGwgaXNcbiAqIG5vdCByZWFsbHkgbWVhbnQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LCBhcyBjYWxsZXJzIGhhdmUgdG8gbWFuaXB1bGF0ZVxuICogdGhlIGludGVybmFsIGJ1ZmZlciBhZnRlcndhcmRzLlxuICpcbiAqIEFzIGEgcmVzdWx0IG9mIHRoaXMgY2FsbCwgeW91IGNhbiBjYWxsIGBSZWFkZXIubGVuZ3RoYCwgdW50aWwgdGhlXG4gKiBuZXh0IHRoaW5nIGNhbGxlZCB0aGF0IGRvZXMgYSByZWFkTGVuZ3RoLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gdGhlIGFtb3VudCBvZiBvZmZzZXQgdG8gYWR2YW5jZSB0aGUgYnVmZmVyLlxuICogQHRocm93cyB7SW52YWxpZEFzbjFFcnJvcn0gb24gYmFkIEFTTi4xXG4gKi9cblJlYWRlci5wcm90b3R5cGUucmVhZExlbmd0aCA9IGZ1bmN0aW9uKG9mZnNldCkge1xuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpXG4gICAgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0O1xuXG4gIGlmIChvZmZzZXQgPj0gdGhpcy5fc2l6ZSlcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgbGVuQiA9IHRoaXMuX2J1ZltvZmZzZXQrK10gJiAweGZmO1xuICBpZiAobGVuQiA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICBpZiAoKGxlbkIgJiAweDgwKSA9PSAweDgwKSB7XG4gICAgbGVuQiAmPSAweDdmO1xuXG4gICAgaWYgKGxlbkIgPT0gMClcbiAgICAgIHRocm93IG5ld0ludmFsaWRBc24xRXJyb3IoJ0luZGVmaW5pdGUgbGVuZ3RoIG5vdCBzdXBwb3J0ZWQnKTtcblxuICAgIGlmIChsZW5CID4gNClcbiAgICAgIHRocm93IG5ld0ludmFsaWRBc24xRXJyb3IoJ2VuY29kaW5nIHRvbyBsb25nJyk7XG5cbiAgICBpZiAodGhpcy5fc2l6ZSAtIG9mZnNldCA8IGxlbkIpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIHRoaXMuX2xlbiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5COyBpKyspXG4gICAgICB0aGlzLl9sZW4gPSAodGhpcy5fbGVuIDw8IDgpICsgKHRoaXMuX2J1ZltvZmZzZXQrK10gJiAweGZmKTtcblxuICB9IGVsc2Uge1xuICAgIC8vIFdhc24ndCBhIHZhcmlhYmxlIGxlbmd0aFxuICAgIHRoaXMuX2xlbiA9IGxlbkI7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0O1xufTtcblxuXG4vKipcbiAqIFBhcnNlcyB0aGUgbmV4dCBzZXF1ZW5jZSBpbiB0aGlzIEJFUiBidWZmZXIuXG4gKlxuICogVG8gZ2V0IHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBjYWxsIGBSZWFkZXIubGVuZ3RoYC5cbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHRoZSBzZXF1ZW5jZSdzIHRhZy5cbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5yZWFkU2VxdWVuY2UgPSBmdW5jdGlvbih0YWcpIHtcbiAgdmFyIHNlcSA9IHRoaXMucGVlaygpO1xuICBpZiAoc2VxID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuICBpZiAodGFnICE9PSB1bmRlZmluZWQgJiYgdGFnICE9PSBzZXEpXG4gICAgdGhyb3cgbmV3SW52YWxpZEFzbjFFcnJvcignRXhwZWN0ZWQgMHgnICsgdGFnLnRvU3RyaW5nKDE2KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBnb3QgMHgnICsgc2VxLnRvU3RyaW5nKDE2KSk7XG5cbiAgdmFyIG8gPSB0aGlzLnJlYWRMZW5ndGgodGhpcy5fb2Zmc2V0ICsgMSk7IC8vIHN0b3JlZCBpbiBgbGVuZ3RoYFxuICBpZiAobyA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB0aGlzLl9vZmZzZXQgPSBvO1xuICByZXR1cm4gc2VxO1xufTtcblxuXG5SZWFkZXIucHJvdG90eXBlLnJlYWRJbnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3JlYWRUYWcoQVNOMS5JbnRlZ2VyKTtcbn07XG5cblxuUmVhZGVyLnByb3RvdHlwZS5yZWFkQm9vbGVhbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gKHRoaXMuX3JlYWRUYWcoQVNOMS5Cb29sZWFuKSA9PT0gMCA/IGZhbHNlIDogdHJ1ZSk7XG59O1xuXG5cblJlYWRlci5wcm90b3R5cGUucmVhZEVudW1lcmF0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkVGFnKEFTTjEuRW51bWVyYXRpb24pO1xufTtcblxuXG5SZWFkZXIucHJvdG90eXBlLnJlYWRTdHJpbmcgPSBmdW5jdGlvbih0YWcsIHJldGJ1Zikge1xuICBpZiAoIXRhZylcbiAgICB0YWcgPSBBU04xLk9jdGV0U3RyaW5nO1xuXG4gIHZhciBiID0gdGhpcy5wZWVrKCk7XG4gIGlmIChiID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIGlmIChiICE9PSB0YWcpXG4gICAgdGhyb3cgbmV3SW52YWxpZEFzbjFFcnJvcignRXhwZWN0ZWQgMHgnICsgdGFnLnRvU3RyaW5nKDE2KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBnb3QgMHgnICsgYi50b1N0cmluZygxNikpO1xuXG4gIHZhciBvID0gdGhpcy5yZWFkTGVuZ3RoKHRoaXMuX29mZnNldCArIDEpOyAvLyBzdG9yZWQgaW4gYGxlbmd0aGBcblxuICBpZiAobyA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICBpZiAodGhpcy5sZW5ndGggPiB0aGlzLl9zaXplIC0gbylcbiAgICByZXR1cm4gbnVsbDtcblxuICB0aGlzLl9vZmZzZXQgPSBvO1xuXG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gcmV0YnVmID8gbmV3IEJ1ZmZlcigwKSA6ICcnO1xuXG4gIHZhciBzdHIgPSB0aGlzLl9idWYuc2xpY2UodGhpcy5fb2Zmc2V0LCB0aGlzLl9vZmZzZXQgKyB0aGlzLmxlbmd0aCk7XG4gIHRoaXMuX29mZnNldCArPSB0aGlzLmxlbmd0aDtcblxuICByZXR1cm4gcmV0YnVmID8gc3RyIDogc3RyLnRvU3RyaW5nKCd1dGY4Jyk7XG59O1xuXG5SZWFkZXIucHJvdG90eXBlLnJlYWRPSUQgPSBmdW5jdGlvbih0YWcpIHtcbiAgaWYgKCF0YWcpXG4gICAgdGFnID0gQVNOMS5PSUQ7XG5cbiAgdmFyIGIgPSB0aGlzLnJlYWRTdHJpbmcodGFnLCB0cnVlKTtcbiAgaWYgKGIgPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgdmFsdWUgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgIHZhciBieXRlID0gYltpXSAmIDB4ZmY7XG5cbiAgICB2YWx1ZSA8PD0gNztcbiAgICB2YWx1ZSArPSBieXRlICYgMHg3ZjtcbiAgICBpZiAoKGJ5dGUgJiAweDgwKSA9PSAwKSB7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IDA7XG4gICAgfVxuICB9XG5cbiAgdmFsdWUgPSB2YWx1ZXMuc2hpZnQoKTtcbiAgdmFsdWVzLnVuc2hpZnQodmFsdWUgJSA0MCk7XG4gIHZhbHVlcy51bnNoaWZ0KCh2YWx1ZSAvIDQwKSA+PiAwKTtcblxuICByZXR1cm4gdmFsdWVzLmpvaW4oJy4nKTtcbn07XG5cblxuUmVhZGVyLnByb3RvdHlwZS5fcmVhZFRhZyA9IGZ1bmN0aW9uKHRhZykge1xuICBhc3NlcnQub2sodGFnICE9PSB1bmRlZmluZWQpO1xuXG4gIHZhciBiID0gdGhpcy5wZWVrKCk7XG5cbiAgaWYgKGIgPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgaWYgKGIgIT09IHRhZylcbiAgICB0aHJvdyBuZXdJbnZhbGlkQXNuMUVycm9yKCdFeHBlY3RlZCAweCcgKyB0YWcudG9TdHJpbmcoMTYpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IGdvdCAweCcgKyBiLnRvU3RyaW5nKDE2KSk7XG5cbiAgdmFyIG8gPSB0aGlzLnJlYWRMZW5ndGgodGhpcy5fb2Zmc2V0ICsgMSk7IC8vIHN0b3JlZCBpbiBgbGVuZ3RoYFxuICBpZiAobyA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICBpZiAodGhpcy5sZW5ndGggPiA0KVxuICAgIHRocm93IG5ld0ludmFsaWRBc24xRXJyb3IoJ0ludGVnZXIgdG9vIGxvbmc6ICcgKyB0aGlzLmxlbmd0aCk7XG5cbiAgaWYgKHRoaXMubGVuZ3RoID4gdGhpcy5fc2l6ZSAtIG8pXG4gICAgcmV0dXJuIG51bGw7XG4gIHRoaXMuX29mZnNldCA9IG87XG5cbiAgdmFyIGZiID0gdGhpcy5fYnVmW3RoaXMuX29mZnNldF07XG4gIHZhciB2YWx1ZSA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWUgPDw9IDg7XG4gICAgdmFsdWUgfD0gKHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gJiAweGZmKTtcbiAgfVxuXG4gIGlmICgoZmIgJiAweDgwKSA9PSAweDgwICYmIGkgIT09IDQpXG4gICAgdmFsdWUgLT0gKDEgPDwgKGkgKiA4KSk7XG5cbiAgcmV0dXJuIHZhbHVlID4+IDA7XG59O1xuXG5cblxuLy8vLS0tIEV4cG9ydGVkIEFQSVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRlcjtcbiIsIi8vIENvcHlyaWdodCAyMDExIE1hcmsgQ2F2YWdlIDxtY2F2YWdlQGdtYWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRU9DOiAwLFxuICBCb29sZWFuOiAxLFxuICBJbnRlZ2VyOiAyLFxuICBCaXRTdHJpbmc6IDMsXG4gIE9jdGV0U3RyaW5nOiA0LFxuICBOdWxsOiA1LFxuICBPSUQ6IDYsXG4gIE9iamVjdERlc2NyaXB0b3I6IDcsXG4gIEV4dGVybmFsOiA4LFxuICBSZWFsOiA5LCAvLyBmbG9hdFxuICBFbnVtZXJhdGlvbjogMTAsXG4gIFBEVjogMTEsXG4gIFV0ZjhTdHJpbmc6IDEyLFxuICBSZWxhdGl2ZU9JRDogMTMsXG4gIFNlcXVlbmNlOiAxNixcbiAgU2V0OiAxNyxcbiAgTnVtZXJpY1N0cmluZzogMTgsXG4gIFByaW50YWJsZVN0cmluZzogMTksXG4gIFQ2MVN0cmluZzogMjAsXG4gIFZpZGVvdGV4U3RyaW5nOiAyMSxcbiAgSUE1U3RyaW5nOiAyMixcbiAgVVRDVGltZTogMjMsXG4gIEdlbmVyYWxpemVkVGltZTogMjQsXG4gIEdyYXBoaWNTdHJpbmc6IDI1LFxuICBWaXNpYmxlU3RyaW5nOiAyNixcbiAgR2VuZXJhbFN0cmluZzogMjgsXG4gIFVuaXZlcnNhbFN0cmluZzogMjksXG4gIENoYXJhY3RlclN0cmluZzogMzAsXG4gIEJNUFN0cmluZzogMzEsXG4gIENvbnN0cnVjdG9yOiAzMixcbiAgQ29udGV4dDogMTI4XG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTEgTWFyayBDYXZhZ2UgPG1jYXZhZ2VAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG52YXIgQVNOMSA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcbnZhciBlcnJvcnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xuXG5cbi8vLy0tLSBHbG9iYWxzXG5cbnZhciBuZXdJbnZhbGlkQXNuMUVycm9yID0gZXJyb3JzLm5ld0ludmFsaWRBc24xRXJyb3I7XG5cbnZhciBERUZBVUxUX09QVFMgPSB7XG4gIHNpemU6IDEwMjQsXG4gIGdyb3d0aEZhY3RvcjogOFxufTtcblxuXG4vLy8tLS0gSGVscGVyc1xuXG5mdW5jdGlvbiBtZXJnZShmcm9tLCB0bykge1xuICBhc3NlcnQub2soZnJvbSk7XG4gIGFzc2VydC5lcXVhbCh0eXBlb2YoZnJvbSksICdvYmplY3QnKTtcbiAgYXNzZXJ0Lm9rKHRvKTtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZih0byksICdvYmplY3QnKTtcblxuICB2YXIga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGZyb20pO1xuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKHRvW2tleV0pXG4gICAgICByZXR1cm47XG5cbiAgICB2YXIgdmFsdWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZyb20sIGtleSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRvLCBrZXksIHZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRvO1xufVxuXG5cblxuLy8vLS0tIEFQSVxuXG5mdW5jdGlvbiBXcml0ZXIob3B0aW9ucykge1xuICBvcHRpb25zID0gbWVyZ2UoREVGQVVMVF9PUFRTLCBvcHRpb25zIHx8IHt9KTtcblxuICB0aGlzLl9idWYgPSBuZXcgQnVmZmVyKG9wdGlvbnMuc2l6ZSB8fCAxMDI0KTtcbiAgdGhpcy5fc2l6ZSA9IHRoaXMuX2J1Zi5sZW5ndGg7XG4gIHRoaXMuX29mZnNldCA9IDA7XG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gIC8vIEEgbGlzdCBvZiBvZmZzZXRzIGluIHRoZSBidWZmZXIgd2hlcmUgd2UgbmVlZCB0byBpbnNlcnRcbiAgLy8gc2VxdWVuY2UgdGFnL2xlbiBwYWlycy5cbiAgdGhpcy5fc2VxID0gW107XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0ZXIucHJvdG90eXBlLCAnYnVmZmVyJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fc2VxLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXNuMUVycm9yKHRoaXMuX3NlcS5sZW5ndGggKyAnIHVuZW5kZWQgc2VxdWVuY2UocyknKTtcblxuICAgIHJldHVybiAodGhpcy5fYnVmLnNsaWNlKDAsIHRoaXMuX29mZnNldCkpO1xuICB9XG59KTtcblxuV3JpdGVyLnByb3RvdHlwZS53cml0ZUJ5dGUgPSBmdW5jdGlvbihiKSB7XG4gIGlmICh0eXBlb2YoYikgIT09ICdudW1iZXInKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG11c3QgYmUgYSBOdW1iZXInKTtcblxuICB0aGlzLl9lbnN1cmUoMSk7XG4gIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBiO1xufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlSW50ID0gZnVuY3Rpb24oaSwgdGFnKSB7XG4gIGlmICh0eXBlb2YoaSkgIT09ICdudW1iZXInKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgaWYgKHR5cGVvZih0YWcpICE9PSAnbnVtYmVyJylcbiAgICB0YWcgPSBBU04xLkludGVnZXI7XG5cbiAgdmFyIHN6ID0gNDtcblxuICB3aGlsZSAoKCgoaSAmIDB4ZmY4MDAwMDApID09PSAwKSB8fCAoKGkgJiAweGZmODAwMDAwKSA9PT0gMHhmZjgwMDAwMCA+PiAwKSkgJiZcbiAgICAgICAgIChzeiA+IDEpKSB7XG4gICAgc3otLTtcbiAgICBpIDw8PSA4O1xuICB9XG5cbiAgaWYgKHN6ID4gNClcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFzbjFFcnJvcignQkVSIGludHMgY2Fubm90IGJlID4gMHhmZmZmZmZmZicpO1xuXG4gIHRoaXMuX2Vuc3VyZSgyICsgc3opO1xuICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gdGFnO1xuICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gc3o7XG5cbiAgd2hpbGUgKHN6LS0gPiAwKSB7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9ICgoaSAmIDB4ZmYwMDAwMDApID4+PiAyNCk7XG4gICAgaSA8PD0gODtcbiAgfVxuXG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVOdWxsID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMud3JpdGVCeXRlKEFTTjEuTnVsbCk7XG4gIHRoaXMud3JpdGVCeXRlKDB4MDApO1xufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlRW51bWVyYXRpb24gPSBmdW5jdGlvbihpLCB0YWcpIHtcbiAgaWYgKHR5cGVvZihpKSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICBpZiAodHlwZW9mKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuRW51bWVyYXRpb247XG5cbiAgcmV0dXJuIHRoaXMud3JpdGVJbnQoaSwgdGFnKTtcbn07XG5cblxuV3JpdGVyLnByb3RvdHlwZS53cml0ZUJvb2xlYW4gPSBmdW5jdGlvbihiLCB0YWcpIHtcbiAgaWYgKHR5cGVvZihiKSAhPT0gJ2Jvb2xlYW4nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG11c3QgYmUgYSBCb29sZWFuJyk7XG4gIGlmICh0eXBlb2YodGFnKSAhPT0gJ251bWJlcicpXG4gICAgdGFnID0gQVNOMS5Cb29sZWFuO1xuXG4gIHRoaXMuX2Vuc3VyZSgzKTtcbiAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IHRhZztcbiAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IDB4MDE7XG4gIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBiID8gMHhmZiA6IDB4MDA7XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVTdHJpbmcgPSBmdW5jdGlvbihzLCB0YWcpIHtcbiAgaWYgKHR5cGVvZihzKSAhPT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyAod2FzOiAnICsgdHlwZW9mKHMpICsgJyknKTtcbiAgaWYgKHR5cGVvZih0YWcpICE9PSAnbnVtYmVyJylcbiAgICB0YWcgPSBBU04xLk9jdGV0U3RyaW5nO1xuXG4gIHZhciBsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChzKTtcbiAgdGhpcy53cml0ZUJ5dGUodGFnKTtcbiAgdGhpcy53cml0ZUxlbmd0aChsZW4pO1xuICBpZiAobGVuKSB7XG4gICAgdGhpcy5fZW5zdXJlKGxlbik7XG4gICAgdGhpcy5fYnVmLndyaXRlKHMsIHRoaXMuX29mZnNldCk7XG4gICAgdGhpcy5fb2Zmc2V0ICs9IGxlbjtcbiAgfVxufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlQnVmZmVyID0gZnVuY3Rpb24oYnVmLCB0YWcpIHtcbiAgaWYgKHR5cGVvZih0YWcpICE9PSAnbnVtYmVyJylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YWcgbXVzdCBiZSBhIG51bWJlcicpO1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG11c3QgYmUgYSBidWZmZXInKTtcblxuICB0aGlzLndyaXRlQnl0ZSh0YWcpO1xuICB0aGlzLndyaXRlTGVuZ3RoKGJ1Zi5sZW5ndGgpO1xuICB0aGlzLl9lbnN1cmUoYnVmLmxlbmd0aCk7XG4gIGJ1Zi5jb3B5KHRoaXMuX2J1ZiwgdGhpcy5fb2Zmc2V0LCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5fb2Zmc2V0ICs9IGJ1Zi5sZW5ndGg7XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVTdHJpbmdBcnJheSA9IGZ1bmN0aW9uKHN0cmluZ3MpIHtcbiAgaWYgKCghc3RyaW5ncyBpbnN0YW5jZW9mIEFycmF5KSlcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5W1N0cmluZ10nKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmluZ3MuZm9yRWFjaChmdW5jdGlvbihzKSB7XG4gICAgc2VsZi53cml0ZVN0cmluZyhzKTtcbiAgfSk7XG59O1xuXG4vLyBUaGlzIGlzIHJlYWxseSB0byBzb2x2ZSBERVIgY2FzZXMsIGJ1dCB3aGF0ZXZlciBmb3Igbm93XG5Xcml0ZXIucHJvdG90eXBlLndyaXRlT0lEID0gZnVuY3Rpb24ocywgdGFnKSB7XG4gIGlmICh0eXBlb2YocykgIT09ICdzdHJpbmcnKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgaWYgKHR5cGVvZih0YWcpICE9PSAnbnVtYmVyJylcbiAgICB0YWcgPSBBU04xLk9JRDtcblxuICBpZiAoIS9eKFswLTldK1xcLil7Myx9WzAtOV0rJC8udGVzdChzKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIE9JRCBzdHJpbmcnKTtcblxuICBmdW5jdGlvbiBlbmNvZGVPY3RldChieXRlcywgb2N0ZXQpIHtcbiAgICBpZiAob2N0ZXQgPCAxMjgpIHtcbiAgICAgICAgYnl0ZXMucHVzaChvY3RldCk7XG4gICAgfSBlbHNlIGlmIChvY3RldCA8IDE2Mzg0KSB7XG4gICAgICAgIGJ5dGVzLnB1c2goKG9jdGV0ID4+PiA3KSB8IDB4ODApO1xuICAgICAgICBieXRlcy5wdXNoKG9jdGV0ICYgMHg3Rik7XG4gICAgfSBlbHNlIGlmIChvY3RldCA8IDIwOTcxNTIpIHtcbiAgICAgIGJ5dGVzLnB1c2goKG9jdGV0ID4+PiAxNCkgfCAweDgwKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gNykgfCAweDgwKSAmIDB4RkYpO1xuICAgICAgYnl0ZXMucHVzaChvY3RldCAmIDB4N0YpO1xuICAgIH0gZWxzZSBpZiAob2N0ZXQgPCAyNjg0MzU0NTYpIHtcbiAgICAgIGJ5dGVzLnB1c2goKG9jdGV0ID4+PiAyMSkgfCAweDgwKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gMTQpIHwgMHg4MCkgJiAweEZGKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gNykgfCAweDgwKSAmIDB4RkYpO1xuICAgICAgYnl0ZXMucHVzaChvY3RldCAmIDB4N0YpO1xuICAgIH0gZWxzZSB7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDI4KSB8IDB4ODApICYgMHhGRik7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDIxKSB8IDB4ODApICYgMHhGRik7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDE0KSB8IDB4ODApICYgMHhGRik7XG4gICAgICBieXRlcy5wdXNoKCgob2N0ZXQgPj4+IDcpIHwgMHg4MCkgJiAweEZGKTtcbiAgICAgIGJ5dGVzLnB1c2gob2N0ZXQgJiAweDdGKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdG1wID0gcy5zcGxpdCgnLicpO1xuICB2YXIgYnl0ZXMgPSBbXTtcbiAgYnl0ZXMucHVzaChwYXJzZUludCh0bXBbMF0sIDEwKSAqIDQwICsgcGFyc2VJbnQodG1wWzFdLCAxMCkpO1xuICB0bXAuc2xpY2UoMikuZm9yRWFjaChmdW5jdGlvbihiKSB7XG4gICAgZW5jb2RlT2N0ZXQoYnl0ZXMsIHBhcnNlSW50KGIsIDEwKSk7XG4gIH0pO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fZW5zdXJlKDIgKyBieXRlcy5sZW5ndGgpO1xuICB0aGlzLndyaXRlQnl0ZSh0YWcpO1xuICB0aGlzLndyaXRlTGVuZ3RoKGJ5dGVzLmxlbmd0aCk7XG4gIGJ5dGVzLmZvckVhY2goZnVuY3Rpb24oYikge1xuICAgIHNlbGYud3JpdGVCeXRlKGIpO1xuICB9KTtcbn07XG5cblxuV3JpdGVyLnByb3RvdHlwZS53cml0ZUxlbmd0aCA9IGZ1bmN0aW9uKGxlbikge1xuICBpZiAodHlwZW9mKGxlbikgIT09ICdudW1iZXInKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG11c3QgYmUgYSBOdW1iZXInKTtcblxuICB0aGlzLl9lbnN1cmUoNCk7XG5cbiAgaWYgKGxlbiA8PSAweDdmKSB7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGxlbjtcbiAgfSBlbHNlIGlmIChsZW4gPD0gMHhmZikge1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSAweDgxO1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBsZW47XG4gIH0gZWxzZSBpZiAobGVuIDw9IDB4ZmZmZikge1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSAweDgyO1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBsZW4gPj4gODtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gbGVuO1xuICB9IGVsc2UgaWYgKGxlbiA8PSAweGZmZmZmZikge1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSAweDgzO1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBsZW4gPj4gMTY7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGxlbiA+PiA4O1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBsZW47XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBc24xRVJyb3IoJ0xlbmd0aCB0b28gbG9uZyAoPiA0IGJ5dGVzKScpO1xuICB9XG59O1xuXG5Xcml0ZXIucHJvdG90eXBlLnN0YXJ0U2VxdWVuY2UgPSBmdW5jdGlvbih0YWcpIHtcbiAgaWYgKHR5cGVvZih0YWcpICE9PSAnbnVtYmVyJylcbiAgICB0YWcgPSBBU04xLlNlcXVlbmNlIHwgQVNOMS5Db25zdHJ1Y3RvcjtcblxuICB0aGlzLndyaXRlQnl0ZSh0YWcpO1xuICB0aGlzLl9zZXEucHVzaCh0aGlzLl9vZmZzZXQpO1xuICB0aGlzLl9lbnN1cmUoMyk7XG4gIHRoaXMuX29mZnNldCArPSAzO1xufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLmVuZFNlcXVlbmNlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzZXEgPSB0aGlzLl9zZXEucG9wKCk7XG4gIHZhciBzdGFydCA9IHNlcSArIDM7XG4gIHZhciBsZW4gPSB0aGlzLl9vZmZzZXQgLSBzdGFydDtcblxuICBpZiAobGVuIDw9IDB4N2YpIHtcbiAgICB0aGlzLl9zaGlmdChzdGFydCwgbGVuLCAtMik7XG4gICAgdGhpcy5fYnVmW3NlcV0gPSBsZW47XG4gIH0gZWxzZSBpZiAobGVuIDw9IDB4ZmYpIHtcbiAgICB0aGlzLl9zaGlmdChzdGFydCwgbGVuLCAtMSk7XG4gICAgdGhpcy5fYnVmW3NlcV0gPSAweDgxO1xuICAgIHRoaXMuX2J1ZltzZXEgKyAxXSA9IGxlbjtcbiAgfSBlbHNlIGlmIChsZW4gPD0gMHhmZmZmKSB7XG4gICAgdGhpcy5fYnVmW3NlcV0gPSAweDgyO1xuICAgIHRoaXMuX2J1ZltzZXEgKyAxXSA9IGxlbiA+PiA4O1xuICAgIHRoaXMuX2J1ZltzZXEgKyAyXSA9IGxlbjtcbiAgfSBlbHNlIGlmIChsZW4gPD0gMHhmZmZmZmYpIHtcbiAgICB0aGlzLl9zaGlmdChzdGFydCwgbGVuLCAxKTtcbiAgICB0aGlzLl9idWZbc2VxXSA9IDB4ODM7XG4gICAgdGhpcy5fYnVmW3NlcSArIDFdID0gbGVuID4+IDE2O1xuICAgIHRoaXMuX2J1ZltzZXEgKyAyXSA9IGxlbiA+PiA4O1xuICAgIHRoaXMuX2J1ZltzZXEgKyAzXSA9IGxlbjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFzbjFFcnJvcignU2VxdWVuY2UgdG9vIGxvbmcnKTtcbiAgfVxufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLl9zaGlmdCA9IGZ1bmN0aW9uKHN0YXJ0LCBsZW4sIHNoaWZ0KSB7XG4gIGFzc2VydC5vayhzdGFydCAhPT0gdW5kZWZpbmVkKTtcbiAgYXNzZXJ0Lm9rKGxlbiAhPT0gdW5kZWZpbmVkKTtcbiAgYXNzZXJ0Lm9rKHNoaWZ0KTtcblxuICB0aGlzLl9idWYuY29weSh0aGlzLl9idWYsIHN0YXJ0ICsgc2hpZnQsIHN0YXJ0LCBzdGFydCArIGxlbik7XG4gIHRoaXMuX29mZnNldCArPSBzaGlmdDtcbn07XG5cbldyaXRlci5wcm90b3R5cGUuX2Vuc3VyZSA9IGZ1bmN0aW9uKGxlbikge1xuICBhc3NlcnQub2sobGVuKTtcblxuICBpZiAodGhpcy5fc2l6ZSAtIHRoaXMuX29mZnNldCA8IGxlbikge1xuICAgIHZhciBzeiA9IHRoaXMuX3NpemUgKiB0aGlzLl9vcHRpb25zLmdyb3d0aEZhY3RvcjtcbiAgICBpZiAoc3ogLSB0aGlzLl9vZmZzZXQgPCBsZW4pXG4gICAgICBzeiArPSBsZW47XG5cbiAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzeik7XG5cbiAgICB0aGlzLl9idWYuY29weShidWYsIDAsIDAsIHRoaXMuX29mZnNldCk7XG4gICAgdGhpcy5fYnVmID0gYnVmO1xuICAgIHRoaXMuX3NpemUgPSBzejtcbiAgfVxufTtcblxuXG5cbi8vLy0tLSBFeHBvcnRlZCBBUElcblxubW9kdWxlLmV4cG9ydHMgPSBXcml0ZXI7XG4iLCIvLyBDb3B5cmlnaHQgMjAxMSBNYXJrIENhdmFnZSA8bWNhdmFnZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbi8vIElmIHlvdSBoYXZlIG5vIGlkZWEgd2hhdCBBU04uMSBvciBCRVIgaXMsIHNlZSB0aGlzOlxuLy8gZnRwOi8vZnRwLnJzYS5jb20vcHViL3BrY3MvYXNjaWkvbGF5bWFuLmFzY1xuXG52YXIgQmVyID0gcmVxdWlyZSgnLi9iZXIvaW5kZXgnKTtcblxuXG5cbi8vLy0tLSBFeHBvcnRlZCBBUElcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgQmVyOiBCZXIsXG5cbiAgQmVyUmVhZGVyOiBCZXIuUmVhZGVyLFxuXG4gIEJlcldyaXRlcjogQmVyLldyaXRlclxuXG59O1xuIiwiLy8gQ29weXJpZ2h0IChjKSAyMDEyLCBNYXJrIENhdmFnZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cblxuLy8vLS0tIEdsb2JhbHNcblxuLyogSlNTVFlMRUQgKi9cbnZhciBVVUlEX1JFR0VYUCA9IC9eW2EtZkEtRjAtOV17OH0tW2EtZkEtRjAtOV17NH0tW2EtZkEtRjAtOV17NH0tW2EtZkEtRjAtOV17NH0tW2EtZkEtRjAtOV17MTJ9JC87XG5cblxuLy8vLS0tIEludGVybmFsXG5cbmZ1bmN0aW9uIF9jYXBpdGFsaXplKHN0cikge1xuICAgIHJldHVybiAoc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpKTtcbn1cblxuZnVuY3Rpb24gX3Rvc3MobmFtZSwgZXhwZWN0ZWQsIG9wZXIsIGFyZywgYWN0dWFsKSB7XG4gICAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6IHV0aWwuZm9ybWF0KCclcyAoJXMpIGlzIHJlcXVpcmVkJywgbmFtZSwgZXhwZWN0ZWQpLFxuICAgICAgICBhY3R1YWw6IChhY3R1YWwgPT09IHVuZGVmaW5lZCkgPyB0eXBlb2YgKGFyZykgOiBhY3R1YWwoYXJnKSxcbiAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgICAgICBvcGVyYXRvcjogb3BlciB8fCAnPT09JyxcbiAgICAgICAgc3RhY2tTdGFydEZ1bmN0aW9uOiBfdG9zcy5jYWxsZXJcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2dldENsYXNzKGFyZykge1xuICAgIHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykuc2xpY2UoOCwgLTEpKTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHtcbiAgICAvLyBXaHkgZXZlbiBib3RoZXIgd2l0aCBhc3NlcnRzP1xufVxuXG5cbi8vLy0tLSBFeHBvcnRzXG5cbnZhciB0eXBlcyA9IHtcbiAgICBib29sOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdib29sZWFuJzsgfVxuICAgIH0sXG4gICAgZnVuYzoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnZnVuY3Rpb24nOyB9XG4gICAgfSxcbiAgICBzdHJpbmc6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ3N0cmluZyc7IH1cbiAgICB9LFxuICAgIG9iamVjdDoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBudW1iZXI6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdudW1iZXInICYmICFpc05hTihhcmcpICYmIGlzRmluaXRlKGFyZyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGJ1ZmZlcjoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGFyZyk7IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnQnVmZmVyLmlzQnVmZmVyJ1xuICAgIH0sXG4gICAgYXJyYXk6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKTsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdBcnJheS5pc0FycmF5J1xuICAgIH0sXG4gICAgc3RyZWFtOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBhcmcgaW5zdGFuY2VvZiBTdHJlYW07IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaW5zdGFuY2VvZicsXG4gICAgICAgIGFjdHVhbDogX2dldENsYXNzXG4gICAgfSxcbiAgICBkYXRlOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBhcmcgaW5zdGFuY2VvZiBEYXRlOyB9LFxuICAgICAgICBvcGVyYXRvcjogJ2luc3RhbmNlb2YnLFxuICAgICAgICBhY3R1YWw6IF9nZXRDbGFzc1xuICAgIH0sXG4gICAgcmVnZXhwOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBhcmcgaW5zdGFuY2VvZiBSZWdFeHA7IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaW5zdGFuY2VvZicsXG4gICAgICAgIGFjdHVhbDogX2dldENsYXNzXG4gICAgfSxcbiAgICB1dWlkOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnc3RyaW5nJyAmJiBVVUlEX1JFR0VYUC50ZXN0KGFyZyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaXNVVUlEJ1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIF9zZXRFeHBvcnRzKG5kZWJ1Zykge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModHlwZXMpO1xuICAgIHZhciBvdXQ7XG5cbiAgICAvKiByZS1leHBvcnQgc3RhbmRhcmQgYXNzZXJ0ICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfTkRFQlVHKSB7XG4gICAgICAgIG91dCA9IG5vb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgJ3RydWUnLCBhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qIHN0YW5kYXJkIGNoZWNrcyAqL1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICBpZiAobmRlYnVnKSB7XG4gICAgICAgICAgICBvdXRba10gPSBub29wO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0eXBlID0gdHlwZXNba107XG4gICAgICAgIG91dFtrXSA9IGZ1bmN0aW9uIChhcmcsIG1zZykge1xuICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZykpIHtcbiAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGssIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogb3B0aW9uYWwgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBuYW1lID0gJ29wdGlvbmFsJyArIF9jYXBpdGFsaXplKGspO1xuICAgICAgICBpZiAobmRlYnVnKSB7XG4gICAgICAgICAgICBvdXRbbmFtZV0gPSBub29wO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0eXBlID0gdHlwZXNba107XG4gICAgICAgIG91dFtuYW1lXSA9IGZ1bmN0aW9uIChhcmcsIG1zZykge1xuICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdHlwZS5jaGVjayhhcmcpKSB7XG4gICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBrLCB0eXBlLm9wZXJhdG9yLCBhcmcsIHR5cGUuYWN0dWFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qIGFycmF5T2YgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBuYW1lID0gJ2FycmF5T2YnICsgX2NhcGl0YWxpemUoayk7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtuYW1lXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgdmFyIGV4cGVjdGVkID0gJ1snICsgayArICddJztcbiAgICAgICAgb3V0W25hbWVdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgZXhwZWN0ZWQsIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZ1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBleHBlY3RlZCwgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogb3B0aW9uYWxBcnJheU9mIGNoZWNrcyAqL1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICB2YXIgbmFtZSA9ICdvcHRpb25hbEFycmF5T2YnICsgX2NhcGl0YWxpemUoayk7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtuYW1lXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgdmFyIGV4cGVjdGVkID0gJ1snICsgayArICddJztcbiAgICAgICAgb3V0W25hbWVdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGV4cGVjdGVkLCB0eXBlLm9wZXJhdG9yLCBhcmcsIHR5cGUuYWN0dWFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdHlwZS5jaGVjayhhcmdbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIF90b3NzKG1zZywgZXhwZWN0ZWQsIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qIHJlLWV4cG9ydCBidWlsdC1pbiBhc3NlcnRpb25zICovXG4gICAgT2JqZWN0LmtleXMoYXNzZXJ0KS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChrID09PSAnQXNzZXJ0aW9uRXJyb3InKSB7XG4gICAgICAgICAgICBvdXRba10gPSBhc3NlcnRba107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5kZWJ1Zykge1xuICAgICAgICAgICAgb3V0W2tdID0gbm9vcDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBvdXRba10gPSBhc3NlcnRba107XG4gICAgfSk7XG5cbiAgICAvKiBleHBvcnQgb3Vyc2VsdmVzIChmb3IgdW5pdCB0ZXN0cyBfb25seV8pICovXG4gICAgb3V0Ll9zZXRFeHBvcnRzID0gX3NldEV4cG9ydHM7XG5cbiAgICByZXR1cm4gb3V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRFeHBvcnRzKHByb2Nlc3MuZW52Lk5PREVfTkRFQlVHKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gY29tcGFyZSBhbmQgaXNCdWZmZXIgdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9ibG9iLzY4MGU5ZTVlNDg4ZjIyYWFjMjc1OTlhNTdkYzg0NGE2MzE1OTI4ZGQvaW5kZXguanNcbi8vIG9yaWdpbmFsIG5vdGljZTpcblxuLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICB2YXIgeCA9IGEubGVuZ3RoO1xuICB2YXIgeSA9IGIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldO1xuICAgICAgeSA9IGJbaV07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKHkgPCB4KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5mdW5jdGlvbiBpc0J1ZmZlcihiKSB7XG4gIGlmIChnbG9iYWwuQnVmZmVyICYmIHR5cGVvZiBnbG9iYWwuQnVmZmVyLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIoYik7XG4gIH1cbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcik7XG59XG5cbi8vIGJhc2VkIG9uIG5vZGUgYXNzZXJ0LCBvcmlnaW5hbCBub3RpY2U6XG5cbi8vIGh0dHA6Ly93aWtpLmNvbW1vbmpzLm9yZy93aWtpL1VuaXRfVGVzdGluZy8xLjBcbi8vXG4vLyBUSElTIElTIE5PVCBURVNURUQgTk9SIExJS0VMWSBUTyBXT1JLIE9VVFNJREUgVjghXG4vL1xuLy8gT3JpZ2luYWxseSBmcm9tIG5hcndoYWwuanMgKGh0dHA6Ly9uYXJ3aGFsanMub3JnKVxuLy8gQ29weXJpZ2h0IChjKSAyMDA5IFRob21hcyBSb2JpbnNvbiA8Mjgwbm9ydGguY29tPlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICdTb2Z0d2FyZScpLCB0b1xuLy8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU5cbi8vIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT05cbi8vIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwvJyk7XG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgZnVuY3Rpb25zSGF2ZU5hbWVzID0gKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbygpIHt9Lm5hbWUgPT09ICdmb28nO1xufSgpKTtcbmZ1bmN0aW9uIHBUb1N0cmluZyAob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTtcbn1cbmZ1bmN0aW9uIGlzVmlldyhhcnJidWYpIHtcbiAgaWYgKGlzQnVmZmVyKGFycmJ1ZikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBnbG9iYWwuQXJyYXlCdWZmZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGFycmJ1Zik7XG4gIH1cbiAgaWYgKCFhcnJidWYpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGFycmJ1ZiBpbnN0YW5jZW9mIERhdGFWaWV3KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGFycmJ1Zi5idWZmZXIgJiYgYXJyYnVmLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuLy8gMS4gVGhlIGFzc2VydCBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIHRoYXQgdGhyb3dcbi8vIEFzc2VydGlvbkVycm9yJ3Mgd2hlbiBwYXJ0aWN1bGFyIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuIFRoZVxuLy8gYXNzZXJ0IG1vZHVsZSBtdXN0IGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBpbnRlcmZhY2UuXG5cbnZhciBhc3NlcnQgPSBtb2R1bGUuZXhwb3J0cyA9IG9rO1xuXG4vLyAyLiBUaGUgQXNzZXJ0aW9uRXJyb3IgaXMgZGVmaW5lZCBpbiBhc3NlcnQuXG4vLyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHsgbWVzc2FnZTogbWVzc2FnZSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQgfSlcblxudmFyIHJlZ2V4ID0gL1xccypmdW5jdGlvblxccysoW15cXChcXHNdKilcXHMqLztcbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvYmxvYi9hZGVlZWVjOGJmY2M2MDY4YjE4N2Q3ZDlmYjNkNWJiMWQzYTMwODk5L2ltcGxlbWVudGF0aW9uLmpzXG5mdW5jdGlvbiBnZXROYW1lKGZ1bmMpIHtcbiAgaWYgKCF1dGlsLmlzRnVuY3Rpb24oZnVuYykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGZ1bmN0aW9uc0hhdmVOYW1lcykge1xuICAgIHJldHVybiBmdW5jLm5hbWU7XG4gIH1cbiAgdmFyIHN0ciA9IGZ1bmMudG9TdHJpbmcoKTtcbiAgdmFyIG1hdGNoID0gc3RyLm1hdGNoKHJlZ2V4KTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdO1xufVxuYXNzZXJ0LkFzc2VydGlvbkVycm9yID0gZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3Iob3B0aW9ucykge1xuICB0aGlzLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InO1xuICB0aGlzLmFjdHVhbCA9IG9wdGlvbnMuYWN0dWFsO1xuICB0aGlzLmV4cGVjdGVkID0gb3B0aW9ucy5leHBlY3RlZDtcbiAgdGhpcy5vcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3I7XG4gIGlmIChvcHRpb25zLm1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2U7XG4gICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5tZXNzYWdlID0gZ2V0TWVzc2FnZSh0aGlzKTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSB0cnVlO1xuICB9XG4gIHZhciBzdGFja1N0YXJ0RnVuY3Rpb24gPSBvcHRpb25zLnN0YWNrU3RhcnRGdW5jdGlvbiB8fCBmYWlsO1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICB9IGVsc2Uge1xuICAgIC8vIG5vbiB2OCBicm93c2VycyBzbyB3ZSBjYW4gaGF2ZSBhIHN0YWNrdHJhY2VcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCk7XG4gICAgaWYgKGVyci5zdGFjaykge1xuICAgICAgdmFyIG91dCA9IGVyci5zdGFjaztcblxuICAgICAgLy8gdHJ5IHRvIHN0cmlwIHVzZWxlc3MgZnJhbWVzXG4gICAgICB2YXIgZm5fbmFtZSA9IGdldE5hbWUoc3RhY2tTdGFydEZ1bmN0aW9uKTtcbiAgICAgIHZhciBpZHggPSBvdXQuaW5kZXhPZignXFxuJyArIGZuX25hbWUpO1xuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIC8vIG9uY2Ugd2UgaGF2ZSBsb2NhdGVkIHRoZSBmdW5jdGlvbiBmcmFtZVxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHN0cmlwIG91dCBldmVyeXRoaW5nIGJlZm9yZSBpdCAoYW5kIGl0cyBsaW5lKVxuICAgICAgICB2YXIgbmV4dF9saW5lID0gb3V0LmluZGV4T2YoJ1xcbicsIGlkeCArIDEpO1xuICAgICAgICBvdXQgPSBvdXQuc3Vic3RyaW5nKG5leHRfbGluZSArIDEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YWNrID0gb3V0O1xuICAgIH1cbiAgfVxufTtcblxuLy8gYXNzZXJ0LkFzc2VydGlvbkVycm9yIGluc3RhbmNlb2YgRXJyb3JcbnV0aWwuaW5oZXJpdHMoYXNzZXJ0LkFzc2VydGlvbkVycm9yLCBFcnJvcik7XG5cbmZ1bmN0aW9uIHRydW5jYXRlKHMsIG4pIHtcbiAgaWYgKHR5cGVvZiBzID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzLmxlbmd0aCA8IG4gPyBzIDogcy5zbGljZSgwLCBuKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcztcbiAgfVxufVxuZnVuY3Rpb24gaW5zcGVjdChzb21ldGhpbmcpIHtcbiAgaWYgKGZ1bmN0aW9uc0hhdmVOYW1lcyB8fCAhdXRpbC5pc0Z1bmN0aW9uKHNvbWV0aGluZykpIHtcbiAgICByZXR1cm4gdXRpbC5pbnNwZWN0KHNvbWV0aGluZyk7XG4gIH1cbiAgdmFyIHJhd25hbWUgPSBnZXROYW1lKHNvbWV0aGluZyk7XG4gIHZhciBuYW1lID0gcmF3bmFtZSA/ICc6ICcgKyByYXduYW1lIDogJyc7XG4gIHJldHVybiAnW0Z1bmN0aW9uJyArICBuYW1lICsgJ10nO1xufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZShzZWxmKSB7XG4gIHJldHVybiB0cnVuY2F0ZShpbnNwZWN0KHNlbGYuYWN0dWFsKSwgMTI4KSArICcgJyArXG4gICAgICAgICBzZWxmLm9wZXJhdG9yICsgJyAnICtcbiAgICAgICAgIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5leHBlY3RlZCksIDEyOCk7XG59XG5cbi8vIEF0IHByZXNlbnQgb25seSB0aGUgdGhyZWUga2V5cyBtZW50aW9uZWQgYWJvdmUgYXJlIHVzZWQgYW5kXG4vLyB1bmRlcnN0b29kIGJ5IHRoZSBzcGVjLiBJbXBsZW1lbnRhdGlvbnMgb3Igc3ViIG1vZHVsZXMgY2FuIHBhc3Ncbi8vIG90aGVyIGtleXMgdG8gdGhlIEFzc2VydGlvbkVycm9yJ3MgY29uc3RydWN0b3IgLSB0aGV5IHdpbGwgYmVcbi8vIGlnbm9yZWQuXG5cbi8vIDMuIEFsbCBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBtdXN0IHRocm93IGFuIEFzc2VydGlvbkVycm9yXG4vLyB3aGVuIGEgY29ycmVzcG9uZGluZyBjb25kaXRpb24gaXMgbm90IG1ldCwgd2l0aCBhIG1lc3NhZ2UgdGhhdFxuLy8gbWF5IGJlIHVuZGVmaW5lZCBpZiBub3QgcHJvdmlkZWQuICBBbGwgYXNzZXJ0aW9uIG1ldGhvZHMgcHJvdmlkZVxuLy8gYm90aCB0aGUgYWN0dWFsIGFuZCBleHBlY3RlZCB2YWx1ZXMgdG8gdGhlIGFzc2VydGlvbiBlcnJvciBmb3Jcbi8vIGRpc3BsYXkgcHVycG9zZXMuXG5cbmZ1bmN0aW9uIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IsIHN0YWNrU3RhcnRGdW5jdGlvbikge1xuICB0aHJvdyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHtcbiAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgIGFjdHVhbDogYWN0dWFsLFxuICAgIGV4cGVjdGVkOiBleHBlY3RlZCxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgc3RhY2tTdGFydEZ1bmN0aW9uOiBzdGFja1N0YXJ0RnVuY3Rpb25cbiAgfSk7XG59XG5cbi8vIEVYVEVOU0lPTiEgYWxsb3dzIGZvciB3ZWxsIGJlaGF2ZWQgZXJyb3JzIGRlZmluZWQgZWxzZXdoZXJlLlxuYXNzZXJ0LmZhaWwgPSBmYWlsO1xuXG4vLyA0LiBQdXJlIGFzc2VydGlvbiB0ZXN0cyB3aGV0aGVyIGEgdmFsdWUgaXMgdHJ1dGh5LCBhcyBkZXRlcm1pbmVkXG4vLyBieSAhIWd1YXJkLlxuLy8gYXNzZXJ0Lm9rKGd1YXJkLCBtZXNzYWdlX29wdCk7XG4vLyBUaGlzIHN0YXRlbWVudCBpcyBlcXVpdmFsZW50IHRvIGFzc2VydC5lcXVhbCh0cnVlLCAhIWd1YXJkLFxuLy8gbWVzc2FnZV9vcHQpOy4gVG8gdGVzdCBzdHJpY3RseSBmb3IgdGhlIHZhbHVlIHRydWUsIHVzZVxuLy8gYXNzZXJ0LnN0cmljdEVxdWFsKHRydWUsIGd1YXJkLCBtZXNzYWdlX29wdCk7LlxuXG5mdW5jdGlvbiBvayh2YWx1ZSwgbWVzc2FnZSkge1xuICBpZiAoIXZhbHVlKSBmYWlsKHZhbHVlLCB0cnVlLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQub2spO1xufVxuYXNzZXJ0Lm9rID0gb2s7XG5cbi8vIDUuIFRoZSBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc2hhbGxvdywgY29lcmNpdmUgZXF1YWxpdHkgd2l0aFxuLy8gPT0uXG4vLyBhc3NlcnQuZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBlcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgIT0gZXhwZWN0ZWQpIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJz09JywgYXNzZXJ0LmVxdWFsKTtcbn07XG5cbi8vIDYuIFRoZSBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciB3aGV0aGVyIHR3byBvYmplY3RzIGFyZSBub3QgZXF1YWxcbi8vIHdpdGggIT0gYXNzZXJ0Lm5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdEVxdWFsID0gZnVuY3Rpb24gbm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnIT0nLCBhc3NlcnQubm90RXF1YWwpO1xuICB9XG59O1xuXG4vLyA3LiBUaGUgZXF1aXZhbGVuY2UgYXNzZXJ0aW9uIHRlc3RzIGEgZGVlcCBlcXVhbGl0eSByZWxhdGlvbi5cbi8vIGFzc2VydC5kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQuZGVlcEVxdWFsID0gZnVuY3Rpb24gZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKCFfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBFcXVhbCcsIGFzc2VydC5kZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQuZGVlcFN0cmljdEVxdWFsID0gZnVuY3Rpb24gZGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKCFfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHRydWUpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcFN0cmljdEVxdWFsJywgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcykge1xuICAvLyA3LjEuIEFsbCBpZGVudGljYWwgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihhY3R1YWwpICYmIGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBjb21wYXJlKGFjdHVhbCwgZXhwZWN0ZWQpID09PSAwO1xuXG4gIC8vIDcuMi4gSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgRGF0ZSBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgRGF0ZSBvYmplY3QgdGhhdCByZWZlcnMgdG8gdGhlIHNhbWUgdGltZS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzRGF0ZShhY3R1YWwpICYmIHV0aWwuaXNEYXRlKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zIElmIHRoZSBleHBlY3RlZCB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgUmVnRXhwIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNvdXJjZSBhbmRcbiAgLy8gcHJvcGVydGllcyAoYGdsb2JhbGAsIGBtdWx0aWxpbmVgLCBgbGFzdEluZGV4YCwgYGlnbm9yZUNhc2VgKS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzUmVnRXhwKGFjdHVhbCkgJiYgdXRpbC5pc1JlZ0V4cChleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gYWN0dWFsLnNvdXJjZSA9PT0gZXhwZWN0ZWQuc291cmNlICYmXG4gICAgICAgICAgIGFjdHVhbC5nbG9iYWwgPT09IGV4cGVjdGVkLmdsb2JhbCAmJlxuICAgICAgICAgICBhY3R1YWwubXVsdGlsaW5lID09PSBleHBlY3RlZC5tdWx0aWxpbmUgJiZcbiAgICAgICAgICAgYWN0dWFsLmxhc3RJbmRleCA9PT0gZXhwZWN0ZWQubGFzdEluZGV4ICYmXG4gICAgICAgICAgIGFjdHVhbC5pZ25vcmVDYXNlID09PSBleHBlY3RlZC5pZ25vcmVDYXNlO1xuXG4gIC8vIDcuNC4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgfSBlbHNlIGlmICgoYWN0dWFsID09PSBudWxsIHx8IHR5cGVvZiBhY3R1YWwgIT09ICdvYmplY3QnKSAmJlxuICAgICAgICAgICAgIChleHBlY3RlZCA9PT0gbnVsbCB8fCB0eXBlb2YgZXhwZWN0ZWQgIT09ICdvYmplY3QnKSkge1xuICAgIHJldHVybiBzdHJpY3QgPyBhY3R1YWwgPT09IGV4cGVjdGVkIDogYWN0dWFsID09IGV4cGVjdGVkO1xuXG4gIC8vIElmIGJvdGggdmFsdWVzIGFyZSBpbnN0YW5jZXMgb2YgdHlwZWQgYXJyYXlzLCB3cmFwIHRoZWlyIHVuZGVybHlpbmdcbiAgLy8gQXJyYXlCdWZmZXJzIGluIGEgQnVmZmVyIGVhY2ggdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2VcbiAgLy8gVGhpcyBvcHRpbWl6YXRpb24gcmVxdWlyZXMgdGhlIGFycmF5cyB0byBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgY2hlY2tlZCBieVxuICAvLyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIChha2EgcFRvU3RyaW5nKS4gTmV2ZXIgcGVyZm9ybSBiaW5hcnlcbiAgLy8gY29tcGFyaXNvbnMgZm9yIEZsb2F0KkFycmF5cywgdGhvdWdoLCBzaW5jZSBlLmcuICswID09PSAtMCBidXQgdGhlaXJcbiAgLy8gYml0IHBhdHRlcm5zIGFyZSBub3QgaWRlbnRpY2FsLlxuICB9IGVsc2UgaWYgKGlzVmlldyhhY3R1YWwpICYmIGlzVmlldyhleHBlY3RlZCkgJiZcbiAgICAgICAgICAgICBwVG9TdHJpbmcoYWN0dWFsKSA9PT0gcFRvU3RyaW5nKGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgICEoYWN0dWFsIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5IHx8XG4gICAgICAgICAgICAgICBhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUobmV3IFVpbnQ4QXJyYXkoYWN0dWFsLmJ1ZmZlciksXG4gICAgICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoZXhwZWN0ZWQuYnVmZmVyKSkgPT09IDA7XG5cbiAgLy8gNy41IEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihhY3R1YWwpICE9PSBpc0J1ZmZlcihleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgbWVtb3MgPSBtZW1vcyB8fCB7YWN0dWFsOiBbXSwgZXhwZWN0ZWQ6IFtdfTtcblxuICAgIHZhciBhY3R1YWxJbmRleCA9IG1lbW9zLmFjdHVhbC5pbmRleE9mKGFjdHVhbCk7XG4gICAgaWYgKGFjdHVhbEluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKGFjdHVhbEluZGV4ID09PSBtZW1vcy5leHBlY3RlZC5pbmRleE9mKGV4cGVjdGVkKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vcy5hY3R1YWwucHVzaChhY3R1YWwpO1xuICAgIG1lbW9zLmV4cGVjdGVkLnB1c2goZXhwZWN0ZWQpO1xuXG4gICAgcmV0dXJuIG9iakVxdWl2KGFjdHVhbCwgZXhwZWN0ZWQsIHN0cmljdCwgbWVtb3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQXJndW1lbnRzKG9iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG59XG5cbmZ1bmN0aW9uIG9iakVxdWl2KGEsIGIsIHN0cmljdCwgYWN0dWFsVmlzaXRlZE9iamVjdHMpIHtcbiAgaWYgKGEgPT09IG51bGwgfHwgYSA9PT0gdW5kZWZpbmVkIHx8IGIgPT09IG51bGwgfHwgYiA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy8gaWYgb25lIGlzIGEgcHJpbWl0aXZlLCB0aGUgb3RoZXIgbXVzdCBiZSBzYW1lXG4gIGlmICh1dGlsLmlzUHJpbWl0aXZlKGEpIHx8IHV0aWwuaXNQcmltaXRpdmUoYikpXG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIGlmIChzdHJpY3QgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGEpICE9PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYikpXG4gICAgcmV0dXJuIGZhbHNlO1xuICB2YXIgYUlzQXJncyA9IGlzQXJndW1lbnRzKGEpO1xuICB2YXIgYklzQXJncyA9IGlzQXJndW1lbnRzKGIpO1xuICBpZiAoKGFJc0FyZ3MgJiYgIWJJc0FyZ3MpIHx8ICghYUlzQXJncyAmJiBiSXNBcmdzKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChhSXNBcmdzKSB7XG4gICAgYSA9IHBTbGljZS5jYWxsKGEpO1xuICAgIGIgPSBwU2xpY2UuY2FsbChiKTtcbiAgICByZXR1cm4gX2RlZXBFcXVhbChhLCBiLCBzdHJpY3QpO1xuICB9XG4gIHZhciBrYSA9IG9iamVjdEtleXMoYSk7XG4gIHZhciBrYiA9IG9iamVjdEtleXMoYik7XG4gIHZhciBrZXksIGk7XG4gIC8vIGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoa2V5cyBpbmNvcnBvcmF0ZXNcbiAgLy8gaGFzT3duUHJvcGVydHkpXG4gIGlmIChrYS5sZW5ndGggIT09IGtiLmxlbmd0aClcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vdGhlIHNhbWUgc2V0IG9mIGtleXMgKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksXG4gIGthLnNvcnQoKTtcbiAga2Iuc29ydCgpO1xuICAvL35+fmNoZWFwIGtleSB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGthW2ldICE9PSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghX2RlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIDguIFRoZSBub24tZXF1aXZhbGVuY2UgYXNzZXJ0aW9uIHRlc3RzIGZvciBhbnkgZGVlcCBpbmVxdWFsaXR5LlxuLy8gYXNzZXJ0Lm5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3REZWVwRXF1YWwgPSBmdW5jdGlvbiBub3REZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBmYWxzZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwRXF1YWwnLCBhc3NlcnQubm90RGVlcEVxdWFsKTtcbiAgfVxufTtcblxuYXNzZXJ0Lm5vdERlZXBTdHJpY3RFcXVhbCA9IG5vdERlZXBTdHJpY3RFcXVhbDtcbmZ1bmN0aW9uIG5vdERlZXBTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHRydWUpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnbm90RGVlcFN0cmljdEVxdWFsJywgbm90RGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufVxuXG5cbi8vIDkuIFRoZSBzdHJpY3QgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHN0cmljdCBlcXVhbGl0eSwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBzdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT09JywgYXNzZXJ0LnN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gMTAuIFRoZSBzdHJpY3Qgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igc3RyaWN0IGluZXF1YWxpdHksIGFzXG4vLyBkZXRlcm1pbmVkIGJ5ICE9PS4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIG5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPT0nLCBhc3NlcnQubm90U3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSB7XG4gIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXhwZWN0ZWQpID09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgcmV0dXJuIGV4cGVjdGVkLnRlc3QoYWN0dWFsKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGFjdHVhbCBpbnN0YW5jZW9mIGV4cGVjdGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBJZ25vcmUuICBUaGUgaW5zdGFuY2VvZiBjaGVjayBkb2Vzbid0IHdvcmsgZm9yIGFycm93IGZ1bmN0aW9ucy5cbiAgfVxuXG4gIGlmIChFcnJvci5pc1Byb3RvdHlwZU9mKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBleHBlY3RlZC5jYWxsKHt9LCBhY3R1YWwpID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBfdHJ5QmxvY2soYmxvY2spIHtcbiAgdmFyIGVycm9yO1xuICB0cnkge1xuICAgIGJsb2NrKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvciA9IGU7XG4gIH1cbiAgcmV0dXJuIGVycm9yO1xufVxuXG5mdW5jdGlvbiBfdGhyb3dzKHNob3VsZFRocm93LCBibG9jaywgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGFjdHVhbDtcblxuICBpZiAodHlwZW9mIGJsb2NrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJibG9ja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBleHBlY3RlZCA9PT0gJ3N0cmluZycpIHtcbiAgICBtZXNzYWdlID0gZXhwZWN0ZWQ7XG4gICAgZXhwZWN0ZWQgPSBudWxsO1xuICB9XG5cbiAgYWN0dWFsID0gX3RyeUJsb2NrKGJsb2NrKTtcblxuICBtZXNzYWdlID0gKGV4cGVjdGVkICYmIGV4cGVjdGVkLm5hbWUgPyAnICgnICsgZXhwZWN0ZWQubmFtZSArICcpLicgOiAnLicpICtcbiAgICAgICAgICAgIChtZXNzYWdlID8gJyAnICsgbWVzc2FnZSA6ICcuJyk7XG5cbiAgaWYgKHNob3VsZFRocm93ICYmICFhY3R1YWwpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIHZhciB1c2VyUHJvdmlkZWRNZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnO1xuICB2YXIgaXNVbndhbnRlZEV4Y2VwdGlvbiA9ICFzaG91bGRUaHJvdyAmJiB1dGlsLmlzRXJyb3IoYWN0dWFsKTtcbiAgdmFyIGlzVW5leHBlY3RlZEV4Y2VwdGlvbiA9ICFzaG91bGRUaHJvdyAmJiBhY3R1YWwgJiYgIWV4cGVjdGVkO1xuXG4gIGlmICgoaXNVbndhbnRlZEV4Y2VwdGlvbiAmJlxuICAgICAgdXNlclByb3ZpZGVkTWVzc2FnZSAmJlxuICAgICAgZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHx8XG4gICAgICBpc1VuZXhwZWN0ZWRFeGNlcHRpb24pIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdHb3QgdW53YW50ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKChzaG91bGRUaHJvdyAmJiBhY3R1YWwgJiYgZXhwZWN0ZWQgJiZcbiAgICAgICFleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHwgKCFzaG91bGRUaHJvdyAmJiBhY3R1YWwpKSB7XG4gICAgdGhyb3cgYWN0dWFsO1xuICB9XG59XG5cbi8vIDExLiBFeHBlY3RlZCB0byB0aHJvdyBhbiBlcnJvcjpcbi8vIGFzc2VydC50aHJvd3MoYmxvY2ssIEVycm9yX29wdCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQudGhyb3dzID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3ModHJ1ZSwgYmxvY2ssIGVycm9yLCBtZXNzYWdlKTtcbn07XG5cbi8vIEVYVEVOU0lPTiEgVGhpcyBpcyBhbm5veWluZyB0byB3cml0ZSBvdXRzaWRlIHRoaXMgbW9kdWxlLlxuYXNzZXJ0LmRvZXNOb3RUaHJvdyA9IGZ1bmN0aW9uKGJsb2NrLCAvKm9wdGlvbmFsKi9lcnJvciwgLypvcHRpb25hbCovbWVzc2FnZSkge1xuICBfdGhyb3dzKGZhbHNlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuYXNzZXJ0LmlmRXJyb3IgPSBmdW5jdGlvbihlcnIpIHsgaWYgKGVycikgdGhyb3cgZXJyOyB9O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTtcbiIsIlxuLyohXG4gKiAgQ29weXJpZ2h0IDIwMTAgTGVhcm5Cb29zdCA8ZGV2QGxlYXJuYm9vc3QuY29tPlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxudmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gICwgcGFyc2UgPSByZXF1aXJlKCd1cmwnKS5wYXJzZVxuICA7XG5cbi8qKlxuICogVmFsaWQga2V5cy5cbiAqL1xuXG52YXIga2V5cyA9IFxuICBbICdhY2wnXG4gICwgJ2xvY2F0aW9uJ1xuICAsICdsb2dnaW5nJ1xuICAsICdub3RpZmljYXRpb24nXG4gICwgJ3BhcnROdW1iZXInXG4gICwgJ3BvbGljeSdcbiAgLCAncmVxdWVzdFBheW1lbnQnXG4gICwgJ3RvcnJlbnQnXG4gICwgJ3VwbG9hZElkJ1xuICAsICd1cGxvYWRzJ1xuICAsICd2ZXJzaW9uSWQnXG4gICwgJ3ZlcnNpb25pbmcnXG4gICwgJ3ZlcnNpb25zJ1xuICAsICd3ZWJzaXRlJ1xuICBdXG5cbi8qKlxuICogUmV0dXJuIGFuIFwiQXV0aG9yaXphdGlvblwiIGhlYWRlciB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBgb3B0aW9uc2BcbiAqIGluIHRoZSBmb3JtIG9mIFwiQVdTIDxrZXk+OjxzaWduYXR1cmU+XCJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gYXV0aG9yaXphdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gJ0FXUyAnICsgb3B0aW9ucy5rZXkgKyAnOicgKyBzaWduKG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXV0aG9yaXphdGlvblxubW9kdWxlLmV4cG9ydHMuYXV0aG9yaXphdGlvbiA9IGF1dGhvcml6YXRpb25cblxuLyoqXG4gKiBTaW1wbGUgSE1BQy1TSEExIFdyYXBwZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi8gXG5cbmZ1bmN0aW9uIGhtYWNTaGExIChvcHRpb25zKSB7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG9wdGlvbnMuc2VjcmV0KS51cGRhdGUob3B0aW9ucy5tZXNzYWdlKS5kaWdlc3QoJ2Jhc2U2NCcpXG59XG5cbm1vZHVsZS5leHBvcnRzLmhtYWNTaGExID0gaG1hY1NoYTFcblxuLyoqXG4gKiBDcmVhdGUgYSBiYXNlNjQgc2hhMSBITUFDIGZvciBgb3B0aW9uc2AuIFxuICogXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2lnbiAob3B0aW9ucykge1xuICBvcHRpb25zLm1lc3NhZ2UgPSBzdHJpbmdUb1NpZ24ob3B0aW9ucylcbiAgcmV0dXJuIGhtYWNTaGExKG9wdGlvbnMpXG59XG5tb2R1bGUuZXhwb3J0cy5zaWduID0gc2lnblxuXG4vKipcbiAqIENyZWF0ZSBhIGJhc2U2NCBzaGExIEhNQUMgZm9yIGBvcHRpb25zYC4gXG4gKlxuICogU3BlY2lmaWNhbGx5IHRvIGJlIHVzZWQgd2l0aCBTMyBwcmVzaWduZWQgVVJMc1xuICogXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc2lnblF1ZXJ5IChvcHRpb25zKSB7XG4gIG9wdGlvbnMubWVzc2FnZSA9IHF1ZXJ5U3RyaW5nVG9TaWduKG9wdGlvbnMpXG4gIHJldHVybiBobWFjU2hhMShvcHRpb25zKVxufVxubW9kdWxlLmV4cG9ydHMuc2lnblF1ZXJ5PSBzaWduUXVlcnlcblxuLyoqXG4gKiBSZXR1cm4gYSBzdHJpbmcgZm9yIHNpZ24oKSB3aXRoIHRoZSBnaXZlbiBgb3B0aW9uc2AuXG4gKlxuICogU3BlYzpcbiAqIFxuICogICAgPHZlcmI+XFxuXG4gKiAgICA8bWQ1PlxcblxuICogICAgPGNvbnRlbnQtdHlwZT5cXG5cbiAqICAgIDxkYXRlPlxcblxuICogICAgW2hlYWRlcnNcXG5dXG4gKiAgICA8cmVzb3VyY2U+XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0cmluZ1RvU2lnbiAob3B0aW9ucykge1xuICB2YXIgaGVhZGVycyA9IG9wdGlvbnMuYW1hem9uSGVhZGVycyB8fCAnJ1xuICBpZiAoaGVhZGVycykgaGVhZGVycyArPSAnXFxuJ1xuICB2YXIgciA9IFxuICAgIFsgb3B0aW9ucy52ZXJiXG4gICAgLCBvcHRpb25zLm1kNVxuICAgICwgb3B0aW9ucy5jb250ZW50VHlwZVxuICAgICwgb3B0aW9ucy5kYXRlID8gb3B0aW9ucy5kYXRlLnRvVVRDU3RyaW5nKCkgOiAnJ1xuICAgICwgaGVhZGVycyArIG9wdGlvbnMucmVzb3VyY2VcbiAgICBdXG4gIHJldHVybiByLmpvaW4oJ1xcbicpXG59XG5tb2R1bGUuZXhwb3J0cy5xdWVyeVN0cmluZ1RvU2lnbiA9IHN0cmluZ1RvU2lnblxuXG4vKipcbiAqIFJldHVybiBhIHN0cmluZyBmb3Igc2lnbigpIHdpdGggdGhlIGdpdmVuIGBvcHRpb25zYCwgYnV0IGlzIG1lYW50IGV4Y2x1c2l2ZWx5XG4gKiBmb3IgUzMgcHJlc2lnbmVkIFVSTHNcbiAqXG4gKiBTcGVjOlxuICogXG4gKiAgICA8ZGF0ZT5cXG5cbiAqICAgIDxyZXNvdXJjZT5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcXVlcnlTdHJpbmdUb1NpZ24gKG9wdGlvbnMpe1xuICByZXR1cm4gJ0dFVFxcblxcblxcbicgKyBvcHRpb25zLmRhdGUgKyAnXFxuJyArIG9wdGlvbnMucmVzb3VyY2Vcbn1cbm1vZHVsZS5leHBvcnRzLnF1ZXJ5U3RyaW5nVG9TaWduID0gcXVlcnlTdHJpbmdUb1NpZ25cblxuLyoqXG4gKiBQZXJmb3JtIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogIC0gaWdub3JlIG5vbi1hbWF6b24gaGVhZGVyc1xuICogIC0gbG93ZXJjYXNlIGZpZWxkc1xuICogIC0gc29ydCBsZXhpY29ncmFwaGljYWxseVxuICogIC0gdHJpbSB3aGl0ZXNwYWNlIGJldHdlZW4gXCI6XCJcbiAqICAtIGpvaW4gd2l0aCBuZXdsaW5lXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGhlYWRlcnNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZUhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgdmFyIGJ1ZiA9IFtdXG4gICAgLCBmaWVsZHMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgIDtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGZpZWxkcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBmaWVsZCA9IGZpZWxkc1tpXVxuICAgICAgLCB2YWwgPSBoZWFkZXJzW2ZpZWxkXVxuICAgICAgLCBmaWVsZCA9IGZpZWxkLnRvTG93ZXJDYXNlKClcbiAgICAgIDtcbiAgICBpZiAoMCAhPT0gZmllbGQuaW5kZXhPZigneC1hbXonKSkgY29udGludWVcbiAgICBidWYucHVzaChmaWVsZCArICc6JyArIHZhbClcbiAgfVxuICByZXR1cm4gYnVmLnNvcnQoKS5qb2luKCdcXG4nKVxufVxubW9kdWxlLmV4cG9ydHMuY2Fub25pY2FsaXplSGVhZGVycyA9IGNhbm9uaWNhbGl6ZUhlYWRlcnNcblxuLyoqXG4gKiBQZXJmb3JtIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogIC0gaWdub3JlIG5vbiBzdWItcmVzb3VyY2VzXG4gKiAgLSBzb3J0IGxleGljb2dyYXBoaWNhbGx5XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJlc291cmNlXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjYW5vbmljYWxpemVSZXNvdXJjZSAocmVzb3VyY2UpIHtcbiAgdmFyIHVybCA9IHBhcnNlKHJlc291cmNlLCB0cnVlKVxuICAgICwgcGF0aCA9IHVybC5wYXRobmFtZVxuICAgICwgYnVmID0gW11cbiAgICA7XG5cbiAgT2JqZWN0LmtleXModXJsLnF1ZXJ5KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7XG4gICAgaWYgKCF+a2V5cy5pbmRleE9mKGtleSkpIHJldHVyblxuICAgIHZhciB2YWwgPSAnJyA9PSB1cmwucXVlcnlba2V5XSA/ICcnIDogJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybC5xdWVyeVtrZXldKVxuICAgIGJ1Zi5wdXNoKGtleSArIHZhbClcbiAgfSlcblxuICByZXR1cm4gcGF0aCArIChidWYubGVuZ3RoID8gJz8nICsgYnVmLnNvcnQoKS5qb2luKCcmJykgOiAnJylcbn1cbm1vZHVsZS5leHBvcnRzLmNhbm9uaWNhbGl6ZVJlc291cmNlID0gY2Fub25pY2FsaXplUmVzb3VyY2VcbiIsInZhciBhd3M0ID0gZXhwb3J0cyxcbiAgICB1cmwgPSByZXF1aXJlKCd1cmwnKSxcbiAgICBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyksXG4gICAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyksXG4gICAgbHJ1ID0gcmVxdWlyZSgnLi9scnUnKSxcbiAgICBjcmVkZW50aWFsc0NhY2hlID0gbHJ1KDEwMDApXG5cbi8vIGh0dHA6Ly9kb2NzLmFtYXpvbndlYnNlcnZpY2VzLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9zaWduYXR1cmUtdmVyc2lvbi00Lmh0bWxcblxuZnVuY3Rpb24gaG1hYyhrZXksIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIbWFjKCdzaGEyNTYnLCBrZXkpLnVwZGF0ZShzdHJpbmcsICd1dGY4JykuZGlnZXN0KGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBoYXNoKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoc3RyaW5nLCAndXRmOCcpLmRpZ2VzdChlbmNvZGluZylcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoZSBzdHJpbmcgaGFzIGFscmVhZHkgYmVlbiBwZXJjZW50IGVuY29kZWRcbmZ1bmN0aW9uIGVuY29kZVJmYzM5ODYodXJsRW5jb2RlZFN0cmluZykge1xuICByZXR1cm4gdXJsRW5jb2RlZFN0cmluZy5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gIH0pXG59XG5cbi8vIHJlcXVlc3Q6IHsgcGF0aCB8IGJvZHksIFtob3N0XSwgW21ldGhvZF0sIFtoZWFkZXJzXSwgW3NlcnZpY2VdLCBbcmVnaW9uXSB9XG4vLyBjcmVkZW50aWFsczogeyBhY2Nlc3NLZXlJZCwgc2VjcmV0QWNjZXNzS2V5LCBbc2Vzc2lvblRva2VuXSB9XG5mdW5jdGlvbiBSZXF1ZXN0U2lnbmVyKHJlcXVlc3QsIGNyZWRlbnRpYWxzKSB7XG5cbiAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykgcmVxdWVzdCA9IHVybC5wYXJzZShyZXF1ZXN0KVxuXG4gIHZhciBoZWFkZXJzID0gcmVxdWVzdC5oZWFkZXJzID0gKHJlcXVlc3QuaGVhZGVycyB8fCB7fSksXG4gICAgICBob3N0UGFydHMgPSB0aGlzLm1hdGNoSG9zdChyZXF1ZXN0Lmhvc3RuYW1lIHx8IHJlcXVlc3QuaG9zdCB8fCBoZWFkZXJzLkhvc3QgfHwgaGVhZGVycy5ob3N0KVxuXG4gIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RcbiAgdGhpcy5jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzIHx8IHRoaXMuZGVmYXVsdENyZWRlbnRpYWxzKClcblxuICB0aGlzLnNlcnZpY2UgPSByZXF1ZXN0LnNlcnZpY2UgfHwgaG9zdFBhcnRzWzBdIHx8ICcnXG4gIHRoaXMucmVnaW9uID0gcmVxdWVzdC5yZWdpb24gfHwgaG9zdFBhcnRzWzFdIHx8ICd1cy1lYXN0LTEnXG5cbiAgLy8gU0VTIHVzZXMgYSBkaWZmZXJlbnQgZG9tYWluIGZyb20gdGhlIHNlcnZpY2UgbmFtZVxuICBpZiAodGhpcy5zZXJ2aWNlID09PSAnZW1haWwnKSB0aGlzLnNlcnZpY2UgPSAnc2VzJ1xuXG4gIGlmICghcmVxdWVzdC5tZXRob2QgJiYgcmVxdWVzdC5ib2R5KVxuICAgIHJlcXVlc3QubWV0aG9kID0gJ1BPU1QnXG5cbiAgaWYgKCFoZWFkZXJzLkhvc3QgJiYgIWhlYWRlcnMuaG9zdCkge1xuICAgIGhlYWRlcnMuSG9zdCA9IHJlcXVlc3QuaG9zdG5hbWUgfHwgcmVxdWVzdC5ob3N0IHx8IHRoaXMuY3JlYXRlSG9zdCgpXG5cbiAgICAvLyBJZiBhIHBvcnQgaXMgc3BlY2lmaWVkIGV4cGxpY2l0bHksIHVzZSBpdCBhcyBpc1xuICAgIGlmIChyZXF1ZXN0LnBvcnQpXG4gICAgICBoZWFkZXJzLkhvc3QgKz0gJzonICsgcmVxdWVzdC5wb3J0XG4gIH1cbiAgaWYgKCFyZXF1ZXN0Lmhvc3RuYW1lICYmICFyZXF1ZXN0Lmhvc3QpXG4gICAgcmVxdWVzdC5ob3N0bmFtZSA9IGhlYWRlcnMuSG9zdCB8fCBoZWFkZXJzLmhvc3RcblxuICB0aGlzLmlzQ29kZUNvbW1pdEdpdCA9IHRoaXMuc2VydmljZSA9PT0gJ2NvZGVjb21taXQnICYmIHJlcXVlc3QubWV0aG9kID09PSAnR0lUJ1xufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5tYXRjaEhvc3QgPSBmdW5jdGlvbihob3N0KSB7XG4gIHZhciBtYXRjaCA9IChob3N0IHx8ICcnKS5tYXRjaCgvKFteXFwuXSspXFwuKD86KFteXFwuXSopXFwuKT9hbWF6b25hd3NcXC5jb20kLylcbiAgdmFyIGhvc3RQYXJ0cyA9IChtYXRjaCB8fCBbXSkuc2xpY2UoMSwgMylcblxuICAvLyBFUydzIGhvc3RQYXJ0cyBhcmUgc29tZXRpbWVzIHRoZSBvdGhlciB3YXkgcm91bmQsIGlmIHRoZSB2YWx1ZSB0aGF0IGlzIGV4cGVjdGVkXG4gIC8vIHRvIGJlIHJlZ2lvbiBlcXVhbHMg4oCYZXPigJkgc3dpdGNoIHRoZW0gYmFja1xuICAvLyBlLmcuIHNlYXJjaC1jbHVzdGVyLW5hbWUtYWFhYTAwYWFhYTBhYWEwYWFhYWFhYTBhYWEudXMtZWFzdC0xLmVzLmFtYXpvbmF3cy5jb21cbiAgaWYgKGhvc3RQYXJ0c1sxXSA9PT0gJ2VzJylcbiAgICBob3N0UGFydHMgPSBob3N0UGFydHMucmV2ZXJzZSgpXG5cbiAgcmV0dXJuIGhvc3RQYXJ0c1xufVxuXG4vLyBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9yYW5kZS5odG1sXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5pc1NpbmdsZVJlZ2lvbiA9IGZ1bmN0aW9uKCkge1xuICAvLyBTcGVjaWFsIGNhc2UgZm9yIFMzIGFuZCBTaW1wbGVEQiBpbiB1cy1lYXN0LTFcbiAgaWYgKFsnczMnLCAnc2RiJ10uaW5kZXhPZih0aGlzLnNlcnZpY2UpID49IDAgJiYgdGhpcy5yZWdpb24gPT09ICd1cy1lYXN0LTEnKSByZXR1cm4gdHJ1ZVxuXG4gIHJldHVybiBbJ2Nsb3VkZnJvbnQnLCAnbHMnLCAncm91dGU1MycsICdpYW0nLCAnaW1wb3J0ZXhwb3J0JywgJ3N0cyddXG4gICAgLmluZGV4T2YodGhpcy5zZXJ2aWNlKSA+PSAwXG59XG5cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLmNyZWF0ZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlZ2lvbiA9IHRoaXMuaXNTaW5nbGVSZWdpb24oKSA/ICcnIDpcbiAgICAgICAgKHRoaXMuc2VydmljZSA9PT0gJ3MzJyAmJiB0aGlzLnJlZ2lvbiAhPT0gJ3VzLWVhc3QtMScgPyAnLScgOiAnLicpICsgdGhpcy5yZWdpb24sXG4gICAgICBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlID09PSAnc2VzJyA/ICdlbWFpbCcgOiB0aGlzLnNlcnZpY2VcbiAgcmV0dXJuIHNlcnZpY2UgKyByZWdpb24gKyAnLmFtYXpvbmF3cy5jb20nXG59XG5cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLnByZXBhcmVSZXF1ZXN0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMucGFyc2VQYXRoKClcblxuICB2YXIgcmVxdWVzdCA9IHRoaXMucmVxdWVzdCwgaGVhZGVycyA9IHJlcXVlc3QuaGVhZGVycywgcXVlcnlcblxuICBpZiAocmVxdWVzdC5zaWduUXVlcnkpIHtcblxuICAgIHRoaXMucGFyc2VkUGF0aC5xdWVyeSA9IHF1ZXJ5ID0gdGhpcy5wYXJzZWRQYXRoLnF1ZXJ5IHx8IHt9XG5cbiAgICBpZiAodGhpcy5jcmVkZW50aWFscy5zZXNzaW9uVG9rZW4pXG4gICAgICBxdWVyeVsnWC1BbXotU2VjdXJpdHktVG9rZW4nXSA9IHRoaXMuY3JlZGVudGlhbHMuc2Vzc2lvblRva2VuXG5cbiAgICBpZiAodGhpcy5zZXJ2aWNlID09PSAnczMnICYmICFxdWVyeVsnWC1BbXotRXhwaXJlcyddKVxuICAgICAgcXVlcnlbJ1gtQW16LUV4cGlyZXMnXSA9IDg2NDAwXG5cbiAgICBpZiAocXVlcnlbJ1gtQW16LURhdGUnXSlcbiAgICAgIHRoaXMuZGF0ZXRpbWUgPSBxdWVyeVsnWC1BbXotRGF0ZSddXG4gICAgZWxzZVxuICAgICAgcXVlcnlbJ1gtQW16LURhdGUnXSA9IHRoaXMuZ2V0RGF0ZVRpbWUoKVxuXG4gICAgcXVlcnlbJ1gtQW16LUFsZ29yaXRobSddID0gJ0FXUzQtSE1BQy1TSEEyNTYnXG4gICAgcXVlcnlbJ1gtQW16LUNyZWRlbnRpYWwnXSA9IHRoaXMuY3JlZGVudGlhbHMuYWNjZXNzS2V5SWQgKyAnLycgKyB0aGlzLmNyZWRlbnRpYWxTdHJpbmcoKVxuICAgIHF1ZXJ5WydYLUFtei1TaWduZWRIZWFkZXJzJ10gPSB0aGlzLnNpZ25lZEhlYWRlcnMoKVxuXG4gIH0gZWxzZSB7XG5cbiAgICBpZiAoIXJlcXVlc3QuZG9Ob3RNb2RpZnlIZWFkZXJzICYmICF0aGlzLmlzQ29kZUNvbW1pdEdpdCkge1xuICAgICAgaWYgKHJlcXVlc3QuYm9keSAmJiAhaGVhZGVyc1snQ29udGVudC1UeXBlJ10gJiYgIWhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKVxuICAgICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9dXRmLTgnXG5cbiAgICAgIGlmIChyZXF1ZXN0LmJvZHkgJiYgIWhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gJiYgIWhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10pXG4gICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBCdWZmZXIuYnl0ZUxlbmd0aChyZXF1ZXN0LmJvZHkpXG5cbiAgICAgIGlmICh0aGlzLmNyZWRlbnRpYWxzLnNlc3Npb25Ub2tlbiAmJiAhaGVhZGVyc1snWC1BbXotU2VjdXJpdHktVG9rZW4nXSAmJiAhaGVhZGVyc1sneC1hbXotc2VjdXJpdHktdG9rZW4nXSlcbiAgICAgICAgaGVhZGVyc1snWC1BbXotU2VjdXJpdHktVG9rZW4nXSA9IHRoaXMuY3JlZGVudGlhbHMuc2Vzc2lvblRva2VuXG5cbiAgICAgIGlmICh0aGlzLnNlcnZpY2UgPT09ICdzMycgJiYgIWhlYWRlcnNbJ1gtQW16LUNvbnRlbnQtU2hhMjU2J10gJiYgIWhlYWRlcnNbJ3gtYW16LWNvbnRlbnQtc2hhMjU2J10pXG4gICAgICAgIGhlYWRlcnNbJ1gtQW16LUNvbnRlbnQtU2hhMjU2J10gPSBoYXNoKHRoaXMucmVxdWVzdC5ib2R5IHx8ICcnLCAnaGV4JylcblxuICAgICAgaWYgKGhlYWRlcnNbJ1gtQW16LURhdGUnXSB8fCBoZWFkZXJzWyd4LWFtei1kYXRlJ10pXG4gICAgICAgIHRoaXMuZGF0ZXRpbWUgPSBoZWFkZXJzWydYLUFtei1EYXRlJ10gfHwgaGVhZGVyc1sneC1hbXotZGF0ZSddXG4gICAgICBlbHNlXG4gICAgICAgIGhlYWRlcnNbJ1gtQW16LURhdGUnXSA9IHRoaXMuZ2V0RGF0ZVRpbWUoKVxuICAgIH1cblxuICAgIGRlbGV0ZSBoZWFkZXJzLkF1dGhvcml6YXRpb25cbiAgICBkZWxldGUgaGVhZGVycy5hdXRob3JpemF0aW9uXG4gIH1cbn1cblxuUmVxdWVzdFNpZ25lci5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMucGFyc2VkUGF0aCkgdGhpcy5wcmVwYXJlUmVxdWVzdCgpXG5cbiAgaWYgKHRoaXMucmVxdWVzdC5zaWduUXVlcnkpIHtcbiAgICB0aGlzLnBhcnNlZFBhdGgucXVlcnlbJ1gtQW16LVNpZ25hdHVyZSddID0gdGhpcy5zaWduYXR1cmUoKVxuICB9IGVsc2Uge1xuICAgIHRoaXMucmVxdWVzdC5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSB0aGlzLmF1dGhIZWFkZXIoKVxuICB9XG5cbiAgdGhpcy5yZXF1ZXN0LnBhdGggPSB0aGlzLmZvcm1hdFBhdGgoKVxuXG4gIHJldHVybiB0aGlzLnJlcXVlc3Rcbn1cblxuUmVxdWVzdFNpZ25lci5wcm90b3R5cGUuZ2V0RGF0ZVRpbWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLmRhdGV0aW1lKSB7XG4gICAgdmFyIGhlYWRlcnMgPSB0aGlzLnJlcXVlc3QuaGVhZGVycyxcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShoZWFkZXJzLkRhdGUgfHwgaGVhZGVycy5kYXRlIHx8IG5ldyBEYXRlKVxuXG4gICAgdGhpcy5kYXRldGltZSA9IGRhdGUudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOlxcLV18XFwuXFxkezN9L2csICcnKVxuXG4gICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyAnWicgb24gdGhlIHRpbWVzdGFtcCBzdHJpbmcgZm9yIENvZGVDb21taXQgZ2l0IGFjY2Vzc1xuICAgIGlmICh0aGlzLmlzQ29kZUNvbW1pdEdpdCkgdGhpcy5kYXRldGltZSA9IHRoaXMuZGF0ZXRpbWUuc2xpY2UoMCwgLTEpXG4gIH1cbiAgcmV0dXJuIHRoaXMuZGF0ZXRpbWVcbn1cblxuUmVxdWVzdFNpZ25lci5wcm90b3R5cGUuZ2V0RGF0ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5nZXREYXRlVGltZSgpLnN1YnN0cigwLCA4KVxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5hdXRoSGVhZGVyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBbXG4gICAgJ0FXUzQtSE1BQy1TSEEyNTYgQ3JlZGVudGlhbD0nICsgdGhpcy5jcmVkZW50aWFscy5hY2Nlc3NLZXlJZCArICcvJyArIHRoaXMuY3JlZGVudGlhbFN0cmluZygpLFxuICAgICdTaWduZWRIZWFkZXJzPScgKyB0aGlzLnNpZ25lZEhlYWRlcnMoKSxcbiAgICAnU2lnbmF0dXJlPScgKyB0aGlzLnNpZ25hdHVyZSgpLFxuICBdLmpvaW4oJywgJylcbn1cblxuUmVxdWVzdFNpZ25lci5wcm90b3R5cGUuc2lnbmF0dXJlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBkYXRlID0gdGhpcy5nZXREYXRlKCksXG4gICAgICBjYWNoZUtleSA9IFt0aGlzLmNyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleSwgZGF0ZSwgdGhpcy5yZWdpb24sIHRoaXMuc2VydmljZV0uam9pbigpLFxuICAgICAga0RhdGUsIGtSZWdpb24sIGtTZXJ2aWNlLCBrQ3JlZGVudGlhbHMgPSBjcmVkZW50aWFsc0NhY2hlLmdldChjYWNoZUtleSlcbiAgaWYgKCFrQ3JlZGVudGlhbHMpIHtcbiAgICBrRGF0ZSA9IGhtYWMoJ0FXUzQnICsgdGhpcy5jcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXksIGRhdGUpXG4gICAga1JlZ2lvbiA9IGhtYWMoa0RhdGUsIHRoaXMucmVnaW9uKVxuICAgIGtTZXJ2aWNlID0gaG1hYyhrUmVnaW9uLCB0aGlzLnNlcnZpY2UpXG4gICAga0NyZWRlbnRpYWxzID0gaG1hYyhrU2VydmljZSwgJ2F3czRfcmVxdWVzdCcpXG4gICAgY3JlZGVudGlhbHNDYWNoZS5zZXQoY2FjaGVLZXksIGtDcmVkZW50aWFscylcbiAgfVxuICByZXR1cm4gaG1hYyhrQ3JlZGVudGlhbHMsIHRoaXMuc3RyaW5nVG9TaWduKCksICdoZXgnKVxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5zdHJpbmdUb1NpZ24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFtcbiAgICAnQVdTNC1ITUFDLVNIQTI1NicsXG4gICAgdGhpcy5nZXREYXRlVGltZSgpLFxuICAgIHRoaXMuY3JlZGVudGlhbFN0cmluZygpLFxuICAgIGhhc2godGhpcy5jYW5vbmljYWxTdHJpbmcoKSwgJ2hleCcpLFxuICBdLmpvaW4oJ1xcbicpXG59XG5cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLmNhbm9uaWNhbFN0cmluZyA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMucGFyc2VkUGF0aCkgdGhpcy5wcmVwYXJlUmVxdWVzdCgpXG5cbiAgdmFyIHBhdGhTdHIgPSB0aGlzLnBhcnNlZFBhdGgucGF0aCxcbiAgICAgIHF1ZXJ5ID0gdGhpcy5wYXJzZWRQYXRoLnF1ZXJ5LFxuICAgICAgaGVhZGVycyA9IHRoaXMucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgcXVlcnlTdHIgPSAnJyxcbiAgICAgIG5vcm1hbGl6ZVBhdGggPSB0aGlzLnNlcnZpY2UgIT09ICdzMycsXG4gICAgICBkZWNvZGVQYXRoID0gdGhpcy5zZXJ2aWNlID09PSAnczMnIHx8IHRoaXMucmVxdWVzdC5kb05vdEVuY29kZVBhdGgsXG4gICAgICBkZWNvZGVTbGFzaGVzSW5QYXRoID0gdGhpcy5zZXJ2aWNlID09PSAnczMnLFxuICAgICAgZmlyc3RWYWxPbmx5ID0gdGhpcy5zZXJ2aWNlID09PSAnczMnLFxuICAgICAgYm9keUhhc2hcblxuICBpZiAodGhpcy5zZXJ2aWNlID09PSAnczMnICYmIHRoaXMucmVxdWVzdC5zaWduUXVlcnkpIHtcbiAgICBib2R5SGFzaCA9ICdVTlNJR05FRC1QQVlMT0FEJ1xuICB9IGVsc2UgaWYgKHRoaXMuaXNDb2RlQ29tbWl0R2l0KSB7XG4gICAgYm9keUhhc2ggPSAnJ1xuICB9IGVsc2Uge1xuICAgIGJvZHlIYXNoID0gaGVhZGVyc1snWC1BbXotQ29udGVudC1TaGEyNTYnXSB8fCBoZWFkZXJzWyd4LWFtei1jb250ZW50LXNoYTI1NiddIHx8XG4gICAgICBoYXNoKHRoaXMucmVxdWVzdC5ib2R5IHx8ICcnLCAnaGV4JylcbiAgfVxuXG4gIGlmIChxdWVyeSkge1xuICAgIHF1ZXJ5U3RyID0gZW5jb2RlUmZjMzk4NihxdWVyeXN0cmluZy5zdHJpbmdpZnkoT2JqZWN0LmtleXMocXVlcnkpLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24ob2JqLCBrZXkpIHtcbiAgICAgIGlmICgha2V5KSByZXR1cm4gb2JqXG4gICAgICBvYmpba2V5XSA9ICFBcnJheS5pc0FycmF5KHF1ZXJ5W2tleV0pID8gcXVlcnlba2V5XSA6XG4gICAgICAgIChmaXJzdFZhbE9ubHkgPyBxdWVyeVtrZXldWzBdIDogcXVlcnlba2V5XS5zbGljZSgpLnNvcnQoKSlcbiAgICAgIHJldHVybiBvYmpcbiAgICB9LCB7fSkpKVxuICB9XG4gIGlmIChwYXRoU3RyICE9PSAnLycpIHtcbiAgICBpZiAobm9ybWFsaXplUGF0aCkgcGF0aFN0ciA9IHBhdGhTdHIucmVwbGFjZSgvXFwvezIsfS9nLCAnLycpXG4gICAgcGF0aFN0ciA9IHBhdGhTdHIuc3BsaXQoJy8nKS5yZWR1Y2UoZnVuY3Rpb24ocGF0aCwgcGllY2UpIHtcbiAgICAgIGlmIChub3JtYWxpemVQYXRoICYmIHBpZWNlID09PSAnLi4nKSB7XG4gICAgICAgIHBhdGgucG9wKClcbiAgICAgIH0gZWxzZSBpZiAoIW5vcm1hbGl6ZVBhdGggfHwgcGllY2UgIT09ICcuJykge1xuICAgICAgICBpZiAoZGVjb2RlUGF0aCkgcGllY2UgPSBxdWVyeXN0cmluZy51bmVzY2FwZShwaWVjZSlcbiAgICAgICAgcGF0aC5wdXNoKGVuY29kZVJmYzM5ODYocXVlcnlzdHJpbmcuZXNjYXBlKHBpZWNlKSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH0sIFtdKS5qb2luKCcvJylcbiAgICBpZiAocGF0aFN0clswXSAhPT0gJy8nKSBwYXRoU3RyID0gJy8nICsgcGF0aFN0clxuICAgIGlmIChkZWNvZGVTbGFzaGVzSW5QYXRoKSBwYXRoU3RyID0gcGF0aFN0ci5yZXBsYWNlKC8lMkYvZywgJy8nKVxuICB9XG5cbiAgcmV0dXJuIFtcbiAgICB0aGlzLnJlcXVlc3QubWV0aG9kIHx8ICdHRVQnLFxuICAgIHBhdGhTdHIsXG4gICAgcXVlcnlTdHIsXG4gICAgdGhpcy5jYW5vbmljYWxIZWFkZXJzKCkgKyAnXFxuJyxcbiAgICB0aGlzLnNpZ25lZEhlYWRlcnMoKSxcbiAgICBib2R5SGFzaCxcbiAgXS5qb2luKCdcXG4nKVxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5jYW5vbmljYWxIZWFkZXJzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBoZWFkZXJzID0gdGhpcy5yZXF1ZXN0LmhlYWRlcnNcbiAgZnVuY3Rpb24gdHJpbUFsbChoZWFkZXIpIHtcbiAgICByZXR1cm4gaGVhZGVyLnRvU3RyaW5nKCkudHJpbSgpLnJlcGxhY2UoL1xccysvZywgJyAnKVxuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgIC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEudG9Mb3dlckNhc2UoKSA8IGIudG9Mb3dlckNhc2UoKSA/IC0xIDogMSB9KVxuICAgIC5tYXAoZnVuY3Rpb24oa2V5KSB7IHJldHVybiBrZXkudG9Mb3dlckNhc2UoKSArICc6JyArIHRyaW1BbGwoaGVhZGVyc1trZXldKSB9KVxuICAgIC5qb2luKCdcXG4nKVxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5zaWduZWRIZWFkZXJzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnJlcXVlc3QuaGVhZGVycylcbiAgICAubWFwKGZ1bmN0aW9uKGtleSkgeyByZXR1cm4ga2V5LnRvTG93ZXJDYXNlKCkgfSlcbiAgICAuc29ydCgpXG4gICAgLmpvaW4oJzsnKVxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5jcmVkZW50aWFsU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBbXG4gICAgdGhpcy5nZXREYXRlKCksXG4gICAgdGhpcy5yZWdpb24sXG4gICAgdGhpcy5zZXJ2aWNlLFxuICAgICdhd3M0X3JlcXVlc3QnLFxuICBdLmpvaW4oJy8nKVxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5kZWZhdWx0Q3JlZGVudGlhbHMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGVudiA9IHByb2Nlc3MuZW52XG4gIHJldHVybiB7XG4gICAgYWNjZXNzS2V5SWQ6IGVudi5BV1NfQUNDRVNTX0tFWV9JRCB8fCBlbnYuQVdTX0FDQ0VTU19LRVksXG4gICAgc2VjcmV0QWNjZXNzS2V5OiBlbnYuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIHx8IGVudi5BV1NfU0VDUkVUX0tFWSxcbiAgICBzZXNzaW9uVG9rZW46IGVudi5BV1NfU0VTU0lPTl9UT0tFTixcbiAgfVxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5wYXJzZVBhdGggPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGggPSB0aGlzLnJlcXVlc3QucGF0aCB8fCAnLycsXG4gICAgICBxdWVyeUl4ID0gcGF0aC5pbmRleE9mKCc/JyksXG4gICAgICBxdWVyeSA9IG51bGxcblxuICBpZiAocXVlcnlJeCA+PSAwKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZShwYXRoLnNsaWNlKHF1ZXJ5SXggKyAxKSlcbiAgICBwYXRoID0gcGF0aC5zbGljZSgwLCBxdWVyeUl4KVxuICB9XG5cbiAgLy8gUzMgZG9lc24ndCBhbHdheXMgZW5jb2RlIGNoYXJhY3RlcnMgPiAxMjcgY29ycmVjdGx5IGFuZFxuICAvLyBhbGwgc2VydmljZXMgZG9uJ3QgZW5jb2RlIGNoYXJhY3RlcnMgPiAyNTUgY29ycmVjdGx5XG4gIC8vIFNvIGlmIHRoZXJlIGFyZSBub24tcmVzZXJ2ZWQgY2hhcnMgKGFuZCBpdCdzIG5vdCBhbHJlYWR5IGFsbCAlIGVuY29kZWQpLCBqdXN0IGVuY29kZSB0aGVtIGFsbFxuICBpZiAoL1teMC05QS1aYS16IScoKSpcXC0uX34lL10vLnRlc3QocGF0aCkpIHtcbiAgICBwYXRoID0gcGF0aC5zcGxpdCgnLycpLm1hcChmdW5jdGlvbihwaWVjZSkge1xuICAgICAgcmV0dXJuIHF1ZXJ5c3RyaW5nLmVzY2FwZShxdWVyeXN0cmluZy51bmVzY2FwZShwaWVjZSkpXG4gICAgfSkuam9pbignLycpXG4gIH1cblxuICB0aGlzLnBhcnNlZFBhdGggPSB7XG4gICAgcGF0aDogcGF0aCxcbiAgICBxdWVyeTogcXVlcnksXG4gIH1cbn1cblxuUmVxdWVzdFNpZ25lci5wcm90b3R5cGUuZm9ybWF0UGF0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcGF0aCA9IHRoaXMucGFyc2VkUGF0aC5wYXRoLFxuICAgICAgcXVlcnkgPSB0aGlzLnBhcnNlZFBhdGgucXVlcnlcblxuICBpZiAoIXF1ZXJ5KSByZXR1cm4gcGF0aFxuXG4gIC8vIFNlcnZpY2VzIGRvbid0IHN1cHBvcnQgZW1wdHkgcXVlcnkgc3RyaW5nIGtleXNcbiAgaWYgKHF1ZXJ5WycnXSAhPSBudWxsKSBkZWxldGUgcXVlcnlbJyddXG5cbiAgcmV0dXJuIHBhdGggKyAnPycgKyBlbmNvZGVSZmMzOTg2KHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeShxdWVyeSkpXG59XG5cbmF3czQuUmVxdWVzdFNpZ25lciA9IFJlcXVlc3RTaWduZXJcblxuYXdzNC5zaWduID0gZnVuY3Rpb24ocmVxdWVzdCwgY3JlZGVudGlhbHMpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0U2lnbmVyKHJlcXVlc3QsIGNyZWRlbnRpYWxzKS5zaWduKClcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oc2l6ZSkge1xuICByZXR1cm4gbmV3IExydUNhY2hlKHNpemUpXG59XG5cbmZ1bmN0aW9uIExydUNhY2hlKHNpemUpIHtcbiAgdGhpcy5jYXBhY2l0eSA9IHNpemUgfCAwXG4gIHRoaXMubWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuICB0aGlzLmxpc3QgPSBuZXcgRG91Ymx5TGlua2VkTGlzdCgpXG59XG5cbkxydUNhY2hlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihrZXkpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLm1hcFtrZXldXG4gIGlmIChub2RlID09IG51bGwpIHJldHVybiB1bmRlZmluZWRcbiAgdGhpcy51c2VkKG5vZGUpXG4gIHJldHVybiBub2RlLnZhbFxufVxuXG5McnVDYWNoZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oa2V5LCB2YWwpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLm1hcFtrZXldXG4gIGlmIChub2RlICE9IG51bGwpIHtcbiAgICBub2RlLnZhbCA9IHZhbFxuICB9IGVsc2Uge1xuICAgIGlmICghdGhpcy5jYXBhY2l0eSkgdGhpcy5wcnVuZSgpXG4gICAgaWYgKCF0aGlzLmNhcGFjaXR5KSByZXR1cm4gZmFsc2VcbiAgICBub2RlID0gbmV3IERvdWJseUxpbmtlZE5vZGUoa2V5LCB2YWwpXG4gICAgdGhpcy5tYXBba2V5XSA9IG5vZGVcbiAgICB0aGlzLmNhcGFjaXR5LS1cbiAgfVxuICB0aGlzLnVzZWQobm9kZSlcbiAgcmV0dXJuIHRydWVcbn1cblxuTHJ1Q2FjaGUucHJvdG90eXBlLnVzZWQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubGlzdC5tb3ZlVG9Gcm9udChub2RlKVxufVxuXG5McnVDYWNoZS5wcm90b3R5cGUucHJ1bmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLmxpc3QucG9wKClcbiAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgIGRlbGV0ZSB0aGlzLm1hcFtub2RlLmtleV1cbiAgICB0aGlzLmNhcGFjaXR5KytcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIERvdWJseUxpbmtlZExpc3QoKSB7XG4gIHRoaXMuZmlyc3ROb2RlID0gbnVsbFxuICB0aGlzLmxhc3ROb2RlID0gbnVsbFxufVxuXG5Eb3VibHlMaW5rZWRMaXN0LnByb3RvdHlwZS5tb3ZlVG9Gcm9udCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgaWYgKHRoaXMuZmlyc3ROb2RlID09IG5vZGUpIHJldHVyblxuXG4gIHRoaXMucmVtb3ZlKG5vZGUpXG5cbiAgaWYgKHRoaXMuZmlyc3ROb2RlID09IG51bGwpIHtcbiAgICB0aGlzLmZpcnN0Tm9kZSA9IG5vZGVcbiAgICB0aGlzLmxhc3ROb2RlID0gbm9kZVxuICAgIG5vZGUucHJldiA9IG51bGxcbiAgICBub2RlLm5leHQgPSBudWxsXG4gIH0gZWxzZSB7XG4gICAgbm9kZS5wcmV2ID0gbnVsbFxuICAgIG5vZGUubmV4dCA9IHRoaXMuZmlyc3ROb2RlXG4gICAgbm9kZS5uZXh0LnByZXYgPSBub2RlXG4gICAgdGhpcy5maXJzdE5vZGUgPSBub2RlXG4gIH1cbn1cblxuRG91Ymx5TGlua2VkTGlzdC5wcm90b3R5cGUucG9wID0gZnVuY3Rpb24oKSB7XG4gIHZhciBsYXN0Tm9kZSA9IHRoaXMubGFzdE5vZGVcbiAgaWYgKGxhc3ROb2RlICE9IG51bGwpIHtcbiAgICB0aGlzLnJlbW92ZShsYXN0Tm9kZSlcbiAgfVxuICByZXR1cm4gbGFzdE5vZGVcbn1cblxuRG91Ymx5TGlua2VkTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24obm9kZSkge1xuICBpZiAodGhpcy5maXJzdE5vZGUgPT0gbm9kZSkge1xuICAgIHRoaXMuZmlyc3ROb2RlID0gbm9kZS5uZXh0XG4gIH0gZWxzZSBpZiAobm9kZS5wcmV2ICE9IG51bGwpIHtcbiAgICBub2RlLnByZXYubmV4dCA9IG5vZGUubmV4dFxuICB9XG4gIGlmICh0aGlzLmxhc3ROb2RlID09IG5vZGUpIHtcbiAgICB0aGlzLmxhc3ROb2RlID0gbm9kZS5wcmV2XG4gIH0gZWxzZSBpZiAobm9kZS5uZXh0ICE9IG51bGwpIHtcbiAgICBub2RlLm5leHQucHJldiA9IG5vZGUucHJldlxuICB9XG59XG5cblxuZnVuY3Rpb24gRG91Ymx5TGlua2VkTm9kZShrZXksIHZhbCkge1xuICB0aGlzLmtleSA9IGtleVxuICB0aGlzLnZhbCA9IHZhbFxuICB0aGlzLnByZXYgPSBudWxsXG4gIHRoaXMubmV4dCA9IG51bGxcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIHBsYWNlSG9sZGVyc0NvdW50IChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIHRoZSBudW1iZXIgb2YgZXF1YWwgc2lnbnMgKHBsYWNlIGhvbGRlcnMpXG4gIC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcbiAgLy8gcmVwcmVzZW50IG9uZSBieXRlXG4gIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHRoZSB0aHJlZSBjaGFyYWN0ZXJzIGJlZm9yZSBpdCByZXByZXNlbnQgMiBieXRlc1xuICAvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG4gIHJldHVybiBiNjRbbGVuIC0gMl0gPT09ICc9JyA/IDIgOiBiNjRbbGVuIC0gMV0gPT09ICc9JyA/IDEgOiAwXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICAvLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbiAgcmV0dXJuIGI2NC5sZW5ndGggKiAzIC8gNCAtIHBsYWNlSG9sZGVyc0NvdW50KGI2NClcbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgaSwgaiwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBwbGFjZUhvbGRlcnMgPSBwbGFjZUhvbGRlcnNDb3VudChiNjQpXG5cbiAgYXJyID0gbmV3IEFycihsZW4gKiAzIC8gNCAtIHBsYWNlSG9sZGVycylcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gbGVuIC0gNCA6IGxlblxuXG4gIHZhciBMID0gMFxuXG4gIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbTCsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnMgPT09IDIpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9IGVsc2UgaWYgKHBsYWNlSG9sZGVycyA9PT0gMSkge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICsgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9ICh1aW50OFtpXSA8PCAxNikgKyAodWludDhbaSArIDFdIDw8IDgpICsgKHVpbnQ4W2kgKyAyXSlcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIG91dHB1dCA9ICcnXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBvdXRwdXQgKz0gbG9va3VwW3RtcCA+PiAyXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9ICc9PSdcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgKHVpbnQ4W2xlbiAtIDFdKVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDEwXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz0nXG4gIH1cblxuICBwYXJ0cy5wdXNoKG91dHB1dClcblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNyeXB0b19oYXNoX3NoYTUxMiA9IHJlcXVpcmUoJ3R3ZWV0bmFjbCcpLmxvd2xldmVsLmNyeXB0b19oYXNoO1xuXG4vKlxuICogVGhpcyBmaWxlIGlzIGEgMToxIHBvcnQgZnJvbSB0aGUgT3BlbkJTRCBibG93ZmlzaC5jIGFuZCBiY3J5cHRfcGJrZGYuYy4gQXMgYVxuICogcmVzdWx0LCBpdCByZXRhaW5zIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UuIFRoZSB0d28gZmlsZXMgYXJlXG4gKiB1bmRlciBzbGlnaHRseSBkaWZmZXJlbnQgKGJ1dCBjb21wYXRpYmxlKSBsaWNlbnNlcywgYW5kIGFyZSBoZXJlIGNvbWJpbmVkIGluXG4gKiBvbmUgZmlsZS5cbiAqXG4gKiBDcmVkaXQgZm9yIHRoZSBhY3R1YWwgcG9ydGluZyB3b3JrIGdvZXMgdG86XG4gKiAgRGV2aSBNYW5kaXJpIDxtZUBkZXZpLndlYi5pZD5cbiAqL1xuXG4vKlxuICogVGhlIEJsb3dmaXNoIHBvcnRpb25zIGFyZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6XG4gKlxuICogQmxvd2Zpc2ggYmxvY2sgY2lwaGVyIGZvciBPcGVuQlNEXG4gKiBDb3B5cmlnaHQgMTk5NyBOaWVscyBQcm92b3MgPHByb3Zvc0BwaHlzbmV0LnVuaS1oYW1idXJnLmRlPlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBJbXBsZW1lbnRhdGlvbiBhZHZpY2UgYnkgRGF2aWQgTWF6aWVyZXMgPGRtQGxjcy5taXQuZWR1Pi5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uc1xuICogYXJlIG1ldDpcbiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0c1xuICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1JcbiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVNcbiAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuXG4gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsXG4gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVRcbiAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbi8qXG4gKiBUaGUgYmNyeXB0X3Bia2RmIHBvcnRpb25zIGFyZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzIFRlZCBVbmFuZ3N0IDx0ZWR1QG9wZW5ic2Qub3JnPlxuICpcbiAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxuICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZVxuICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFU1xuICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRlxuICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1JcbiAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVNcbiAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTlxuICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0ZcbiAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4gKi9cblxuLypcbiAqIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyAoSmF2YXNjcmlwdC1zcGVjaWZpYyk6XG4gKlxuICogQ29weXJpZ2h0IDIwMTYsIEpveWVudCBJbmNcbiAqIEF1dGhvcjogQWxleCBXaWxzb24gPGFsZXgud2lsc29uQGpveWVudC5jb20+XG4gKlxuICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG4gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlXG4gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXG4gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxuICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xuICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXG4gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRlxuICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbiAqL1xuXG4vLyBQb3J0ZWQgZnJvbSBPcGVuQlNEIGJjcnlwdF9wYmtkZi5jIHYxLjlcblxudmFyIEJMRl9KID0gMDtcblxudmFyIEJsb3dmaXNoID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuUyA9IFtcbiAgICBuZXcgVWludDMyQXJyYXkoW1xuICAgICAgMHhkMTMxMGJhNiwgMHg5OGRmYjVhYywgMHgyZmZkNzJkYiwgMHhkMDFhZGZiNyxcbiAgICAgIDB4YjhlMWFmZWQsIDB4NmEyNjdlOTYsIDB4YmE3YzkwNDUsIDB4ZjEyYzdmOTksXG4gICAgICAweDI0YTE5OTQ3LCAweGIzOTE2Y2Y3LCAweDA4MDFmMmUyLCAweDg1OGVmYzE2LFxuICAgICAgMHg2MzY5MjBkOCwgMHg3MTU3NGU2OSwgMHhhNDU4ZmVhMywgMHhmNDkzM2Q3ZSxcbiAgICAgIDB4MGQ5NTc0OGYsIDB4NzI4ZWI2NTgsIDB4NzE4YmNkNTgsIDB4ODIxNTRhZWUsXG4gICAgICAweDdiNTRhNDFkLCAweGMyNWE1OWI1LCAweDljMzBkNTM5LCAweDJhZjI2MDEzLFxuICAgICAgMHhjNWQxYjAyMywgMHgyODYwODVmMCwgMHhjYTQxNzkxOCwgMHhiOGRiMzhlZixcbiAgICAgIDB4OGU3OWRjYjAsIDB4NjAzYTE4MGUsIDB4NmM5ZTBlOGIsIDB4YjAxZThhM2UsXG4gICAgICAweGQ3MTU3N2MxLCAweGJkMzE0YjI3LCAweDc4YWYyZmRhLCAweDU1NjA1YzYwLFxuICAgICAgMHhlNjU1MjVmMywgMHhhYTU1YWI5NCwgMHg1NzQ4OTg2MiwgMHg2M2U4MTQ0MCxcbiAgICAgIDB4NTVjYTM5NmEsIDB4MmFhYjEwYjYsIDB4YjRjYzVjMzQsIDB4MTE0MWU4Y2UsXG4gICAgICAweGExNTQ4NmFmLCAweDdjNzJlOTkzLCAweGIzZWUxNDExLCAweDYzNmZiYzJhLFxuICAgICAgMHgyYmE5YzU1ZCwgMHg3NDE4MzFmNiwgMHhjZTVjM2UxNiwgMHg5Yjg3OTMxZSxcbiAgICAgIDB4YWZkNmJhMzMsIDB4NmMyNGNmNWMsIDB4N2EzMjUzODEsIDB4Mjg5NTg2NzcsXG4gICAgICAweDNiOGY0ODk4LCAweDZiNGJiOWFmLCAweGM0YmZlODFiLCAweDY2MjgyMTkzLFxuICAgICAgMHg2MWQ4MDljYywgMHhmYjIxYTk5MSwgMHg0ODdjYWM2MCwgMHg1ZGVjODAzMixcbiAgICAgIDB4ZWY4NDVkNWQsIDB4ZTk4NTc1YjEsIDB4ZGMyNjIzMDIsIDB4ZWI2NTFiODgsXG4gICAgICAweDIzODkzZTgxLCAweGQzOTZhY2M1LCAweDBmNmQ2ZmYzLCAweDgzZjQ0MjM5LFxuICAgICAgMHgyZTBiNDQ4MiwgMHhhNDg0MjAwNCwgMHg2OWM4ZjA0YSwgMHg5ZTFmOWI1ZSxcbiAgICAgIDB4MjFjNjY4NDIsIDB4ZjZlOTZjOWEsIDB4NjcwYzljNjEsIDB4YWJkMzg4ZjAsXG4gICAgICAweDZhNTFhMGQyLCAweGQ4NTQyZjY4LCAweDk2MGZhNzI4LCAweGFiNTEzM2EzLFxuICAgICAgMHg2ZWVmMGI2YywgMHgxMzdhM2JlNCwgMHhiYTNiZjA1MCwgMHg3ZWZiMmE5OCxcbiAgICAgIDB4YTFmMTY1MWQsIDB4MzlhZjAxNzYsIDB4NjZjYTU5M2UsIDB4ODI0MzBlODgsXG4gICAgICAweDhjZWU4NjE5LCAweDQ1NmY5ZmI0LCAweDdkODRhNWMzLCAweDNiOGI1ZWJlLFxuICAgICAgMHhlMDZmNzVkOCwgMHg4NWMxMjA3MywgMHg0MDFhNDQ5ZiwgMHg1NmMxNmFhNixcbiAgICAgIDB4NGVkM2FhNjIsIDB4MzYzZjc3MDYsIDB4MWJmZWRmNzIsIDB4NDI5YjAyM2QsXG4gICAgICAweDM3ZDBkNzI0LCAweGQwMGExMjQ4LCAweGRiMGZlYWQzLCAweDQ5ZjFjMDliLFxuICAgICAgMHgwNzUzNzJjOSwgMHg4MDk5MWI3YiwgMHgyNWQ0NzlkOCwgMHhmNmU4ZGVmNyxcbiAgICAgIDB4ZTNmZTUwMWEsIDB4YjY3OTRjM2IsIDB4OTc2Y2UwYmQsIDB4MDRjMDA2YmEsXG4gICAgICAweGMxYTk0ZmI2LCAweDQwOWY2MGM0LCAweDVlNWM5ZWMyLCAweDE5NmEyNDYzLFxuICAgICAgMHg2OGZiNmZhZiwgMHgzZTZjNTNiNSwgMHgxMzM5YjJlYiwgMHgzYjUyZWM2ZixcbiAgICAgIDB4NmRmYzUxMWYsIDB4OWIzMDk1MmMsIDB4Y2M4MTQ1NDQsIDB4YWY1ZWJkMDksXG4gICAgICAweGJlZTNkMDA0LCAweGRlMzM0YWZkLCAweDY2MGYyODA3LCAweDE5MmU0YmIzLFxuICAgICAgMHhjMGNiYTg1NywgMHg0NWM4NzQwZiwgMHhkMjBiNWYzOSwgMHhiOWQzZmJkYixcbiAgICAgIDB4NTU3OWMwYmQsIDB4MWE2MDMyMGEsIDB4ZDZhMTAwYzYsIDB4NDAyYzcyNzksXG4gICAgICAweDY3OWYyNWZlLCAweGZiMWZhM2NjLCAweDhlYTVlOWY4LCAweGRiMzIyMmY4LFxuICAgICAgMHgzYzc1MTZkZiwgMHhmZDYxNmIxNSwgMHgyZjUwMWVjOCwgMHhhZDA1NTJhYixcbiAgICAgIDB4MzIzZGI1ZmEsIDB4ZmQyMzg3NjAsIDB4NTMzMTdiNDgsIDB4M2UwMGRmODIsXG4gICAgICAweDllNWM1N2JiLCAweGNhNmY4Y2EwLCAweDFhODc1NjJlLCAweGRmMTc2OWRiLFxuICAgICAgMHhkNTQyYThmNiwgMHgyODdlZmZjMywgMHhhYzY3MzJjNiwgMHg4YzRmNTU3MyxcbiAgICAgIDB4Njk1YjI3YjAsIDB4YmJjYTU4YzgsIDB4ZTFmZmEzNWQsIDB4YjhmMDExYTAsXG4gICAgICAweDEwZmEzZDk4LCAweGZkMjE4M2I4LCAweDRhZmNiNTZjLCAweDJkZDFkMzViLFxuICAgICAgMHg5YTUzZTQ3OSwgMHhiNmY4NDU2NSwgMHhkMjhlNDliYywgMHg0YmZiOTc5MCxcbiAgICAgIDB4ZTFkZGYyZGEsIDB4YTRjYjdlMzMsIDB4NjJmYjEzNDEsIDB4Y2VlNGM2ZTgsXG4gICAgICAweGVmMjBjYWRhLCAweDM2Nzc0YzAxLCAweGQwN2U5ZWZlLCAweDJiZjExZmI0LFxuICAgICAgMHg5NWRiZGE0ZCwgMHhhZTkwOTE5OCwgMHhlYWFkOGU3MSwgMHg2YjkzZDVhMCxcbiAgICAgIDB4ZDA4ZWQxZDAsIDB4YWZjNzI1ZTAsIDB4OGUzYzViMmYsIDB4OGU3NTk0YjcsXG4gICAgICAweDhmZjZlMmZiLCAweGYyMTIyYjY0LCAweDg4ODhiODEyLCAweDkwMGRmMDFjLFxuICAgICAgMHg0ZmFkNWVhMCwgMHg2ODhmYzMxYywgMHhkMWNmZjE5MSwgMHhiM2E4YzFhZCxcbiAgICAgIDB4MmYyZjIyMTgsIDB4YmUwZTE3NzcsIDB4ZWE3NTJkZmUsIDB4OGIwMjFmYTEsXG4gICAgICAweGU1YTBjYzBmLCAweGI1NmY3NGU4LCAweDE4YWNmM2Q2LCAweGNlODllMjk5LFxuICAgICAgMHhiNGE4NGZlMCwgMHhmZDEzZTBiNywgMHg3Y2M0M2I4MSwgMHhkMmFkYThkOSxcbiAgICAgIDB4MTY1ZmEyNjYsIDB4ODA5NTc3MDUsIDB4OTNjYzczMTQsIDB4MjExYTE0NzcsXG4gICAgICAweGU2YWQyMDY1LCAweDc3YjVmYTg2LCAweGM3NTQ0MmY1LCAweGZiOWQzNWNmLFxuICAgICAgMHhlYmNkYWYwYywgMHg3YjNlODlhMCwgMHhkNjQxMWJkMywgMHhhZTFlN2U0OSxcbiAgICAgIDB4MDAyNTBlMmQsIDB4MjA3MWIzNWUsIDB4MjI2ODAwYmIsIDB4NTdiOGUwYWYsXG4gICAgICAweDI0NjQzNjliLCAweGYwMDliOTFlLCAweDU1NjM5MTFkLCAweDU5ZGZhNmFhLFxuICAgICAgMHg3OGMxNDM4OSwgMHhkOTVhNTM3ZiwgMHgyMDdkNWJhMiwgMHgwMmU1YjljNSxcbiAgICAgIDB4ODMyNjAzNzYsIDB4NjI5NWNmYTksIDB4MTFjODE5NjgsIDB4NGU3MzRhNDEsXG4gICAgICAweGIzNDcyZGNhLCAweDdiMTRhOTRhLCAweDFiNTEwMDUyLCAweDlhNTMyOTE1LFxuICAgICAgMHhkNjBmNTczZiwgMHhiYzliYzZlNCwgMHgyYjYwYTQ3NiwgMHg4MWU2NzQwMCxcbiAgICAgIDB4MDhiYTZmYjUsIDB4NTcxYmU5MWYsIDB4ZjI5NmVjNmIsIDB4MmEwZGQ5MTUsXG4gICAgICAweGI2NjM2NTIxLCAweGU3YjlmOWI2LCAweGZmMzQwNTJlLCAweGM1ODU1NjY0LFxuICAgICAgMHg1M2IwMmQ1ZCwgMHhhOTlmOGZhMSwgMHgwOGJhNDc5OSwgMHg2ZTg1MDc2YV0pLFxuICAgIG5ldyBVaW50MzJBcnJheShbXG4gICAgICAweDRiN2E3MGU5LCAweGI1YjMyOTQ0LCAweGRiNzUwOTJlLCAweGM0MTkyNjIzLFxuICAgICAgMHhhZDZlYTZiMCwgMHg0OWE3ZGY3ZCwgMHg5Y2VlNjBiOCwgMHg4ZmVkYjI2NixcbiAgICAgIDB4ZWNhYThjNzEsIDB4Njk5YTE3ZmYsIDB4NTY2NDUyNmMsIDB4YzJiMTllZTEsXG4gICAgICAweDE5MzYwMmE1LCAweDc1MDk0YzI5LCAweGEwNTkxMzQwLCAweGU0MTgzYTNlLFxuICAgICAgMHgzZjU0OTg5YSwgMHg1YjQyOWQ2NSwgMHg2YjhmZTRkNiwgMHg5OWY3M2ZkNixcbiAgICAgIDB4YTFkMjljMDcsIDB4ZWZlODMwZjUsIDB4NGQyZDM4ZTYsIDB4ZjAyNTVkYzEsXG4gICAgICAweDRjZGQyMDg2LCAweDg0NzBlYjI2LCAweDYzODJlOWM2LCAweDAyMWVjYzVlLFxuICAgICAgMHgwOTY4NmIzZiwgMHgzZWJhZWZjOSwgMHgzYzk3MTgxNCwgMHg2YjZhNzBhMSxcbiAgICAgIDB4Njg3ZjM1ODQsIDB4NTJhMGUyODYsIDB4Yjc5YzUzMDUsIDB4YWE1MDA3MzcsXG4gICAgICAweDNlMDc4NDFjLCAweDdmZGVhZTVjLCAweDhlN2Q0NGVjLCAweDU3MTZmMmI4LFxuICAgICAgMHhiMDNhZGEzNywgMHhmMDUwMGMwZCwgMHhmMDFjMWYwNCwgMHgwMjAwYjNmZixcbiAgICAgIDB4YWUwY2Y1MWEsIDB4M2NiNTc0YjIsIDB4MjU4MzdhNTgsIDB4ZGMwOTIxYmQsXG4gICAgICAweGQxOTExM2Y5LCAweDdjYTkyZmY2LCAweDk0MzI0NzczLCAweDIyZjU0NzAxLFxuICAgICAgMHgzYWU1ZTU4MSwgMHgzN2MyZGFkYywgMHhjOGI1NzYzNCwgMHg5YWYzZGRhNyxcbiAgICAgIDB4YTk0NDYxNDYsIDB4MGZkMDAzMGUsIDB4ZWNjOGM3M2UsIDB4YTQ3NTFlNDEsXG4gICAgICAweGUyMzhjZDk5LCAweDNiZWEwZTJmLCAweDMyODBiYmExLCAweDE4M2ViMzMxLFxuICAgICAgMHg0ZTU0OGIzOCwgMHg0ZjZkYjkwOCwgMHg2ZjQyMGQwMywgMHhmNjBhMDRiZixcbiAgICAgIDB4MmNiODEyOTAsIDB4MjQ5NzdjNzksIDB4NTY3OWIwNzIsIDB4YmNhZjg5YWYsXG4gICAgICAweGRlOWE3NzFmLCAweGQ5OTMwODEwLCAweGIzOGJhZTEyLCAweGRjY2YzZjJlLFxuICAgICAgMHg1NTEyNzIxZiwgMHgyZTZiNzEyNCwgMHg1MDFhZGRlNiwgMHg5Zjg0Y2Q4NyxcbiAgICAgIDB4N2E1ODQ3MTgsIDB4NzQwOGRhMTcsIDB4YmM5ZjlhYmMsIDB4ZTk0YjdkOGMsXG4gICAgICAweGVjN2FlYzNhLCAweGRiODUxZGZhLCAweDYzMDk0MzY2LCAweGM0NjRjM2QyLFxuICAgICAgMHhlZjFjMTg0NywgMHgzMjE1ZDkwOCwgMHhkZDQzM2IzNywgMHgyNGMyYmExNixcbiAgICAgIDB4MTJhMTRkNDMsIDB4MmE2NWM0NTEsIDB4NTA5NDAwMDIsIDB4MTMzYWU0ZGQsXG4gICAgICAweDcxZGZmODllLCAweDEwMzE0ZTU1LCAweDgxYWM3N2Q2LCAweDVmMTExOTliLFxuICAgICAgMHgwNDM1NTZmMSwgMHhkN2EzYzc2YiwgMHgzYzExMTgzYiwgMHg1OTI0YTUwOSxcbiAgICAgIDB4ZjI4ZmU2ZWQsIDB4OTdmMWZiZmEsIDB4OWViYWJmMmMsIDB4MWUxNTNjNmUsXG4gICAgICAweDg2ZTM0NTcwLCAweGVhZTk2ZmIxLCAweDg2MGU1ZTBhLCAweDVhM2UyYWIzLFxuICAgICAgMHg3NzFmZTcxYywgMHg0ZTNkMDZmYSwgMHgyOTY1ZGNiOSwgMHg5OWU3MWQwZixcbiAgICAgIDB4ODAzZTg5ZDYsIDB4NTI2NmM4MjUsIDB4MmU0Y2M5NzgsIDB4OWMxMGIzNmEsXG4gICAgICAweGM2MTUwZWJhLCAweDk0ZTJlYTc4LCAweGE1ZmMzYzUzLCAweDFlMGEyZGY0LFxuICAgICAgMHhmMmY3NGVhNywgMHgzNjFkMmIzZCwgMHgxOTM5MjYwZiwgMHgxOWMyNzk2MCxcbiAgICAgIDB4NTIyM2E3MDgsIDB4ZjcxMzEyYjYsIDB4ZWJhZGZlNmUsIDB4ZWFjMzFmNjYsXG4gICAgICAweGUzYmM0NTk1LCAweGE2N2JjODgzLCAweGIxN2YzN2QxLCAweDAxOGNmZjI4LFxuICAgICAgMHhjMzMyZGRlZiwgMHhiZTZjNWFhNSwgMHg2NTU4MjE4NSwgMHg2OGFiOTgwMixcbiAgICAgIDB4ZWVjZWE1MGYsIDB4ZGIyZjk1M2IsIDB4MmFlZjdkYWQsIDB4NWI2ZTJmODQsXG4gICAgICAweDE1MjFiNjI4LCAweDI5MDc2MTcwLCAweGVjZGQ0Nzc1LCAweDYxOWYxNTEwLFxuICAgICAgMHgxM2NjYTgzMCwgMHhlYjYxYmQ5NiwgMHgwMzM0ZmUxZSwgMHhhYTAzNjNjZixcbiAgICAgIDB4YjU3MzVjOTAsIDB4NGM3MGEyMzksIDB4ZDU5ZTllMGIsIDB4Y2JhYWRlMTQsXG4gICAgICAweGVlY2M4NmJjLCAweDYwNjIyY2E3LCAweDljYWI1Y2FiLCAweGIyZjM4NDZlLFxuICAgICAgMHg2NDhiMWVhZiwgMHgxOWJkZjBjYSwgMHhhMDIzNjliOSwgMHg2NTVhYmI1MCxcbiAgICAgIDB4NDA2ODVhMzIsIDB4M2MyYWI0YjMsIDB4MzE5ZWU5ZDUsIDB4YzAyMWI4ZjcsXG4gICAgICAweDliNTQwYjE5LCAweDg3NWZhMDk5LCAweDk1Zjc5OTdlLCAweDYyM2Q3ZGE4LFxuICAgICAgMHhmODM3ODg5YSwgMHg5N2UzMmQ3NywgMHgxMWVkOTM1ZiwgMHgxNjY4MTI4MSxcbiAgICAgIDB4MGUzNTg4MjksIDB4YzdlNjFmZDYsIDB4OTZkZWRmYTEsIDB4Nzg1OGJhOTksXG4gICAgICAweDU3ZjU4NGE1LCAweDFiMjI3MjYzLCAweDliODNjM2ZmLCAweDFhYzI0Njk2LFxuICAgICAgMHhjZGIzMGFlYiwgMHg1MzJlMzA1NCwgMHg4ZmQ5NDhlNCwgMHg2ZGJjMzEyOCxcbiAgICAgIDB4NThlYmYyZWYsIDB4MzRjNmZmZWEsIDB4ZmUyOGVkNjEsIDB4ZWU3YzNjNzMsXG4gICAgICAweDVkNGExNGQ5LCAweGU4NjRiN2UzLCAweDQyMTA1ZDE0LCAweDIwM2UxM2UwLFxuICAgICAgMHg0NWVlZTJiNiwgMHhhM2FhYWJlYSwgMHhkYjZjNGYxNSwgMHhmYWNiNGZkMCxcbiAgICAgIDB4Yzc0MmY0NDIsIDB4ZWY2YWJiYjUsIDB4NjU0ZjNiMWQsIDB4NDFjZDIxMDUsXG4gICAgICAweGQ4MWU3OTllLCAweDg2ODU0ZGM3LCAweGU0NGI0NzZhLCAweDNkODE2MjUwLFxuICAgICAgMHhjZjYyYTFmMiwgMHg1YjhkMjY0NiwgMHhmYzg4ODNhMCwgMHhjMWM3YjZhMyxcbiAgICAgIDB4N2YxNTI0YzMsIDB4NjljYjc0OTIsIDB4NDc4NDhhMGIsIDB4NTY5MmIyODUsXG4gICAgICAweDA5NWJiZjAwLCAweGFkMTk0ODlkLCAweDE0NjJiMTc0LCAweDIzODIwZTAwLFxuICAgICAgMHg1ODQyOGQyYSwgMHgwYzU1ZjVlYSwgMHgxZGFkZjQzZSwgMHgyMzNmNzA2MSxcbiAgICAgIDB4MzM3MmYwOTIsIDB4OGQ5MzdlNDEsIDB4ZDY1ZmVjZjEsIDB4NmMyMjNiZGIsXG4gICAgICAweDdjZGUzNzU5LCAweGNiZWU3NDYwLCAweDQwODVmMmE3LCAweGNlNzczMjZlLFxuICAgICAgMHhhNjA3ODA4NCwgMHgxOWY4NTA5ZSwgMHhlOGVmZDg1NSwgMHg2MWQ5OTczNSxcbiAgICAgIDB4YTk2OWE3YWEsIDB4YzUwYzA2YzIsIDB4NWEwNGFiZmMsIDB4ODAwYmNhZGMsXG4gICAgICAweDllNDQ3YTJlLCAweGMzNDUzNDg0LCAweGZkZDU2NzA1LCAweDBlMWU5ZWM5LFxuICAgICAgMHhkYjczZGJkMywgMHgxMDU1ODhjZCwgMHg2NzVmZGE3OSwgMHhlMzY3NDM0MCxcbiAgICAgIDB4YzVjNDM0NjUsIDB4NzEzZTM4ZDgsIDB4M2QyOGY4OWUsIDB4ZjE2ZGZmMjAsXG4gICAgICAweDE1M2UyMWU3LCAweDhmYjAzZDRhLCAweGU2ZTM5ZjJiLCAweGRiODNhZGY3XSksXG4gICAgbmV3IFVpbnQzMkFycmF5KFtcbiAgICAgIDB4ZTkzZDVhNjgsIDB4OTQ4MTQwZjcsIDB4ZjY0YzI2MWMsIDB4OTQ2OTI5MzQsXG4gICAgICAweDQxMTUyMGY3LCAweDc2MDJkNGY3LCAweGJjZjQ2YjJlLCAweGQ0YTIwMDY4LFxuICAgICAgMHhkNDA4MjQ3MSwgMHgzMzIwZjQ2YSwgMHg0M2I3ZDRiNywgMHg1MDAwNjFhZixcbiAgICAgIDB4MWUzOWY2MmUsIDB4OTcyNDQ1NDYsIDB4MTQyMTRmNzQsIDB4YmY4Yjg4NDAsXG4gICAgICAweDRkOTVmYzFkLCAweDk2YjU5MWFmLCAweDcwZjRkZGQzLCAweDY2YTAyZjQ1LFxuICAgICAgMHhiZmJjMDllYywgMHgwM2JkOTc4NSwgMHg3ZmFjNmRkMCwgMHgzMWNiODUwNCxcbiAgICAgIDB4OTZlYjI3YjMsIDB4NTVmZDM5NDEsIDB4ZGEyNTQ3ZTYsIDB4YWJjYTBhOWEsXG4gICAgICAweDI4NTA3ODI1LCAweDUzMDQyOWY0LCAweDBhMmM4NmRhLCAweGU5YjY2ZGZiLFxuICAgICAgMHg2OGRjMTQ2MiwgMHhkNzQ4NjkwMCwgMHg2ODBlYzBhNCwgMHgyN2ExOGRlZSxcbiAgICAgIDB4NGYzZmZlYTIsIDB4ZTg4N2FkOGMsIDB4YjU4Y2UwMDYsIDB4N2FmNGQ2YjYsXG4gICAgICAweGFhY2UxZTdjLCAweGQzMzc1ZmVjLCAweGNlNzhhMzk5LCAweDQwNmIyYTQyLFxuICAgICAgMHgyMGZlOWUzNSwgMHhkOWYzODViOSwgMHhlZTM5ZDdhYiwgMHgzYjEyNGU4YixcbiAgICAgIDB4MWRjOWZhZjcsIDB4NGI2ZDE4NTYsIDB4MjZhMzY2MzEsIDB4ZWFlMzk3YjIsXG4gICAgICAweDNhNmVmYTc0LCAweGRkNWI0MzMyLCAweDY4NDFlN2Y3LCAweGNhNzgyMGZiLFxuICAgICAgMHhmYjBhZjU0ZSwgMHhkOGZlYjM5NywgMHg0NTQwNTZhYywgMHhiYTQ4OTUyNyxcbiAgICAgIDB4NTU1MzNhM2EsIDB4MjA4MzhkODcsIDB4ZmU2YmE5YjcsIDB4ZDA5Njk1NGIsXG4gICAgICAweDU1YTg2N2JjLCAweGExMTU5YTU4LCAweGNjYTkyOTYzLCAweDk5ZTFkYjMzLFxuICAgICAgMHhhNjJhNGE1NiwgMHgzZjMxMjVmOSwgMHg1ZWY0N2UxYywgMHg5MDI5MzE3YyxcbiAgICAgIDB4ZmRmOGU4MDIsIDB4MDQyNzJmNzAsIDB4ODBiYjE1NWMsIDB4MDUyODJjZTMsXG4gICAgICAweDk1YzExNTQ4LCAweGU0YzY2ZDIyLCAweDQ4YzExMzNmLCAweGM3MGY4NmRjLFxuICAgICAgMHgwN2Y5YzllZSwgMHg0MTA0MWYwZiwgMHg0MDQ3NzlhNCwgMHg1ZDg4NmUxNyxcbiAgICAgIDB4MzI1ZjUxZWIsIDB4ZDU5YmMwZDEsIDB4ZjJiY2MxOGYsIDB4NDExMTM1NjQsXG4gICAgICAweDI1N2I3ODM0LCAweDYwMmE5YzYwLCAweGRmZjhlOGEzLCAweDFmNjM2YzFiLFxuICAgICAgMHgwZTEyYjRjMiwgMHgwMmUxMzI5ZSwgMHhhZjY2NGZkMSwgMHhjYWQxODExNSxcbiAgICAgIDB4NmIyMzk1ZTAsIDB4MzMzZTkyZTEsIDB4M2IyNDBiNjIsIDB4ZWViZWI5MjIsXG4gICAgICAweDg1YjJhMjBlLCAweGU2YmEwZDk5LCAweGRlNzIwYzhjLCAweDJkYTJmNzI4LFxuICAgICAgMHhkMDEyNzg0NSwgMHg5NWI3OTRmZCwgMHg2NDdkMDg2MiwgMHhlN2NjZjVmMCxcbiAgICAgIDB4NTQ0OWEzNmYsIDB4ODc3ZDQ4ZmEsIDB4YzM5ZGZkMjcsIDB4ZjMzZThkMWUsXG4gICAgICAweDBhNDc2MzQxLCAweDk5MmVmZjc0LCAweDNhNmY2ZWFiLCAweGY0ZjhmZDM3LFxuICAgICAgMHhhODEyZGM2MCwgMHhhMWViZGRmOCwgMHg5OTFiZTE0YywgMHhkYjZlNmIwZCxcbiAgICAgIDB4YzY3YjU1MTAsIDB4NmQ2NzJjMzcsIDB4Mjc2NWQ0M2IsIDB4ZGNkMGU4MDQsXG4gICAgICAweGYxMjkwZGM3LCAweGNjMDBmZmEzLCAweGI1MzkwZjkyLCAweDY5MGZlZDBiLFxuICAgICAgMHg2NjdiOWZmYiwgMHhjZWRiN2Q5YywgMHhhMDkxY2YwYiwgMHhkOTE1NWVhMyxcbiAgICAgIDB4YmIxMzJmODgsIDB4NTE1YmFkMjQsIDB4N2I5NDc5YmYsIDB4NzYzYmQ2ZWIsXG4gICAgICAweDM3MzkyZWIzLCAweGNjMTE1OTc5LCAweDgwMjZlMjk3LCAweGY0MmUzMTJkLFxuICAgICAgMHg2ODQyYWRhNywgMHhjNjZhMmIzYiwgMHgxMjc1NGNjYywgMHg3ODJlZjExYyxcbiAgICAgIDB4NmExMjQyMzcsIDB4Yjc5MjUxZTcsIDB4MDZhMWJiZTYsIDB4NGJmYjYzNTAsXG4gICAgICAweDFhNmIxMDE4LCAweDExY2FlZGZhLCAweDNkMjViZGQ4LCAweGUyZTFjM2M5LFxuICAgICAgMHg0NDQyMTY1OSwgMHgwYTEyMTM4NiwgMHhkOTBjZWM2ZSwgMHhkNWFiZWEyYSxcbiAgICAgIDB4NjRhZjY3NGUsIDB4ZGE4NmE4NWYsIDB4YmViZmU5ODgsIDB4NjRlNGMzZmUsXG4gICAgICAweDlkYmM4MDU3LCAweGYwZjdjMDg2LCAweDYwNzg3YmY4LCAweDYwMDM2MDRkLFxuICAgICAgMHhkMWZkODM0NiwgMHhmNjM4MWZiMCwgMHg3NzQ1YWUwNCwgMHhkNzM2ZmNjYyxcbiAgICAgIDB4ODM0MjZiMzMsIDB4ZjAxZWFiNzEsIDB4YjA4MDQxODcsIDB4M2MwMDVlNWYsXG4gICAgICAweDc3YTA1N2JlLCAweGJkZThhZTI0LCAweDU1NDY0Mjk5LCAweGJmNTgyZTYxLFxuICAgICAgMHg0ZTU4ZjQ4ZiwgMHhmMmRkZmRhMiwgMHhmNDc0ZWYzOCwgMHg4Nzg5YmRjMixcbiAgICAgIDB4NTM2NmY5YzMsIDB4YzhiMzhlNzQsIDB4YjQ3NWYyNTUsIDB4NDZmY2Q5YjksXG4gICAgICAweDdhZWIyNjYxLCAweDhiMWRkZjg0LCAweDg0NmEwZTc5LCAweDkxNWY5NWUyLFxuICAgICAgMHg0NjZlNTk4ZSwgMHgyMGI0NTc3MCwgMHg4Y2Q1NTU5MSwgMHhjOTAyZGU0YyxcbiAgICAgIDB4YjkwYmFjZTEsIDB4YmI4MjA1ZDAsIDB4MTFhODYyNDgsIDB4NzU3NGE5OWUsXG4gICAgICAweGI3N2YxOWI2LCAweGUwYTlkYzA5LCAweDY2MmQwOWExLCAweGM0MzI0NjMzLFxuICAgICAgMHhlODVhMWYwMiwgMHgwOWYwYmU4YywgMHg0YTk5YTAyNSwgMHgxZDZlZmUxMCxcbiAgICAgIDB4MWFiOTNkMWQsIDB4MGJhNWE0ZGYsIDB4YTE4NmYyMGYsIDB4Mjg2OGYxNjksXG4gICAgICAweGRjYjdkYTgzLCAweDU3MzkwNmZlLCAweGExZTJjZTliLCAweDRmY2Q3ZjUyLFxuICAgICAgMHg1MDExNWUwMSwgMHhhNzA2ODNmYSwgMHhhMDAyYjVjNCwgMHgwZGU2ZDAyNyxcbiAgICAgIDB4OWFmODhjMjcsIDB4NzczZjg2NDEsIDB4YzM2MDRjMDYsIDB4NjFhODA2YjUsXG4gICAgICAweGYwMTc3YTI4LCAweGMwZjU4NmUwLCAweDAwNjA1OGFhLCAweDMwZGM3ZDYyLFxuICAgICAgMHgxMWU2OWVkNywgMHgyMzM4ZWE2MywgMHg1M2MyZGQ5NCwgMHhjMmMyMTYzNCxcbiAgICAgIDB4YmJjYmVlNTYsIDB4OTBiY2I2ZGUsIDB4ZWJmYzdkYTEsIDB4Y2U1OTFkNzYsXG4gICAgICAweDZmMDVlNDA5LCAweDRiN2MwMTg4LCAweDM5NzIwYTNkLCAweDdjOTI3YzI0LFxuICAgICAgMHg4NmUzNzI1ZiwgMHg3MjRkOWRiOSwgMHgxYWMxNWJiNCwgMHhkMzllYjhmYyxcbiAgICAgIDB4ZWQ1NDU1NzgsIDB4MDhmY2E1YjUsIDB4ZDgzZDdjZDMsIDB4NGRhZDBmYzQsXG4gICAgICAweDFlNTBlZjVlLCAweGIxNjFlNmY4LCAweGEyODUxNGQ5LCAweDZjNTExMzNjLFxuICAgICAgMHg2ZmQ1YzdlNywgMHg1NmUxNGVjNCwgMHgzNjJhYmZjZSwgMHhkZGM2YzgzNyxcbiAgICAgIDB4ZDc5YTMyMzQsIDB4OTI2MzgyMTIsIDB4NjcwZWZhOGUsIDB4NDA2MDAwZTBdKSxcbiAgICBuZXcgVWludDMyQXJyYXkoW1xuICAgICAgMHgzYTM5Y2UzNywgMHhkM2ZhZjVjZiwgMHhhYmMyNzczNywgMHg1YWM1MmQxYixcbiAgICAgIDB4NWNiMDY3OWUsIDB4NGZhMzM3NDIsIDB4ZDM4MjI3NDAsIDB4OTliYzliYmUsXG4gICAgICAweGQ1MTE4ZTlkLCAweGJmMGY3MzE1LCAweGQ2MmQxYzdlLCAweGM3MDBjNDdiLFxuICAgICAgMHhiNzhjMWI2YiwgMHgyMWExOTA0NSwgMHhiMjZlYjFiZSwgMHg2YTM2NmViNCxcbiAgICAgIDB4NTc0OGFiMmYsIDB4YmM5NDZlNzksIDB4YzZhMzc2ZDIsIDB4NjU0OWMyYzgsXG4gICAgICAweDUzMGZmOGVlLCAweDQ2OGRkZTdkLCAweGQ1NzMwYTFkLCAweDRjZDA0ZGM2LFxuICAgICAgMHgyOTM5YmJkYiwgMHhhOWJhNDY1MCwgMHhhYzk1MjZlOCwgMHhiZTVlZTMwNCxcbiAgICAgIDB4YTFmYWQ1ZjAsIDB4NmEyZDUxOWEsIDB4NjNlZjhjZTIsIDB4OWE4NmVlMjIsXG4gICAgICAweGMwODljMmI4LCAweDQzMjQyZWY2LCAweGE1MWUwM2FhLCAweDljZjJkMGE0LFxuICAgICAgMHg4M2MwNjFiYSwgMHg5YmU5NmE0ZCwgMHg4ZmU1MTU1MCwgMHhiYTY0NWJkNixcbiAgICAgIDB4MjgyNmEyZjksIDB4YTczYTNhZTEsIDB4NGJhOTk1ODYsIDB4ZWY1NTYyZTksXG4gICAgICAweGM3MmZlZmQzLCAweGY3NTJmN2RhLCAweDNmMDQ2ZjY5LCAweDc3ZmEwYTU5LFxuICAgICAgMHg4MGU0YTkxNSwgMHg4N2IwODYwMSwgMHg5YjA5ZTZhZCwgMHgzYjNlZTU5MyxcbiAgICAgIDB4ZTk5MGZkNWEsIDB4OWUzNGQ3OTcsIDB4MmNmMGI3ZDksIDB4MDIyYjhiNTEsXG4gICAgICAweDk2ZDVhYzNhLCAweDAxN2RhNjdkLCAweGQxY2YzZWQ2LCAweDdjN2QyZDI4LFxuICAgICAgMHgxZjlmMjVjZiwgMHhhZGYyYjg5YiwgMHg1YWQ2YjQ3MiwgMHg1YTg4ZjU0YyxcbiAgICAgIDB4ZTAyOWFjNzEsIDB4ZTAxOWE1ZTYsIDB4NDdiMGFjZmQsIDB4ZWQ5M2ZhOWIsXG4gICAgICAweGU4ZDNjNDhkLCAweDI4M2I1N2NjLCAweGY4ZDU2NjI5LCAweDc5MTMyZTI4LFxuICAgICAgMHg3ODVmMDE5MSwgMHhlZDc1NjA1NSwgMHhmNzk2MGU0NCwgMHhlM2QzNWU4YyxcbiAgICAgIDB4MTUwNTZkZDQsIDB4ODhmNDZkYmEsIDB4MDNhMTYxMjUsIDB4MDU2NGYwYmQsXG4gICAgICAweGMzZWI5ZTE1LCAweDNjOTA1N2EyLCAweDk3MjcxYWVjLCAweGE5M2EwNzJhLFxuICAgICAgMHgxYjNmNmQ5YiwgMHgxZTYzMjFmNSwgMHhmNTljNjZmYiwgMHgyNmRjZjMxOSxcbiAgICAgIDB4NzUzM2Q5MjgsIDB4YjE1NWZkZjUsIDB4MDM1NjM0ODIsIDB4OGFiYTNjYmIsXG4gICAgICAweDI4NTE3NzExLCAweGMyMGFkOWY4LCAweGFiY2M1MTY3LCAweGNjYWQ5MjVmLFxuICAgICAgMHg0ZGU4MTc1MSwgMHgzODMwZGM4ZSwgMHgzNzlkNTg2MiwgMHg5MzIwZjk5MSxcbiAgICAgIDB4ZWE3YTkwYzIsIDB4ZmIzZTdiY2UsIDB4NTEyMWNlNjQsIDB4Nzc0ZmJlMzIsXG4gICAgICAweGE4YjZlMzdlLCAweGMzMjkzZDQ2LCAweDQ4ZGU1MzY5LCAweDY0MTNlNjgwLFxuICAgICAgMHhhMmFlMDgxMCwgMHhkZDZkYjIyNCwgMHg2OTg1MmRmZCwgMHgwOTA3MjE2NixcbiAgICAgIDB4YjM5YTQ2MGEsIDB4NjQ0NWMwZGQsIDB4NTg2Y2RlY2YsIDB4MWMyMGM4YWUsXG4gICAgICAweDViYmVmN2RkLCAweDFiNTg4ZDQwLCAweGNjZDIwMTdmLCAweDZiYjRlM2JiLFxuICAgICAgMHhkZGEyNmE3ZSwgMHgzYTU5ZmY0NSwgMHgzZTM1MGE0NCwgMHhiY2I0Y2RkNSxcbiAgICAgIDB4NzJlYWNlYTgsIDB4ZmE2NDg0YmIsIDB4OGQ2NjEyYWUsIDB4YmYzYzZmNDcsXG4gICAgICAweGQyOWJlNDYzLCAweDU0MmY1ZDllLCAweGFlYzI3NzFiLCAweGY2NGU2MzcwLFxuICAgICAgMHg3NDBlMGQ4ZCwgMHhlNzViMTM1NywgMHhmODcyMTY3MSwgMHhhZjUzN2Q1ZCxcbiAgICAgIDB4NDA0MGNiMDgsIDB4NGViNGUyY2MsIDB4MzRkMjQ2NmEsIDB4MDExNWFmODQsXG4gICAgICAweGUxYjAwNDI4LCAweDk1OTgzYTFkLCAweDA2Yjg5ZmI0LCAweGNlNmVhMDQ4LFxuICAgICAgMHg2ZjNmM2I4MiwgMHgzNTIwYWI4MiwgMHgwMTFhMWQ0YiwgMHgyNzcyMjdmOCxcbiAgICAgIDB4NjExNTYwYjEsIDB4ZTc5MzNmZGMsIDB4YmIzYTc5MmIsIDB4MzQ0NTI1YmQsXG4gICAgICAweGEwODgzOWUxLCAweDUxY2U3OTRiLCAweDJmMzJjOWI3LCAweGEwMWZiYWM5LFxuICAgICAgMHhlMDFjYzg3ZSwgMHhiY2M3ZDFmNiwgMHhjZjAxMTFjMywgMHhhMWU4YWFjNyxcbiAgICAgIDB4MWE5MDg3NDksIDB4ZDQ0ZmJkOWEsIDB4ZDBkYWRlY2IsIDB4ZDUwYWRhMzgsXG4gICAgICAweDAzMzljMzJhLCAweGM2OTEzNjY3LCAweDhkZjkzMTdjLCAweGUwYjEyYjRmLFxuICAgICAgMHhmNzllNTliNywgMHg0M2Y1YmIzYSwgMHhmMmQ1MTlmZiwgMHgyN2Q5NDU5YyxcbiAgICAgIDB4YmY5NzIyMmMsIDB4MTVlNmZjMmEsIDB4MGY5MWZjNzEsIDB4OWI5NDE1MjUsXG4gICAgICAweGZhZTU5MzYxLCAweGNlYjY5Y2ViLCAweGMyYTg2NDU5LCAweDEyYmFhOGQxLFxuICAgICAgMHhiNmMxMDc1ZSwgMHhlMzA1NmEwYywgMHgxMGQyNTA2NSwgMHhjYjAzYTQ0MixcbiAgICAgIDB4ZTBlYzZlMGUsIDB4MTY5OGRiM2IsIDB4NGM5OGEwYmUsIDB4MzI3OGU5NjQsXG4gICAgICAweDlmMWY5NTMyLCAweGUwZDM5MmRmLCAweGQzYTAzNDJiLCAweDg5NzFmMjFlLFxuICAgICAgMHgxYjBhNzQ0MSwgMHg0YmEzMzQ4YywgMHhjNWJlNzEyMCwgMHhjMzc2MzJkOCxcbiAgICAgIDB4ZGYzNTlmOGQsIDB4OWI5OTJmMmUsIDB4ZTYwYjZmNDcsIDB4MGZlM2YxMWQsXG4gICAgICAweGU1NGNkYTU0LCAweDFlZGFkODkxLCAweGNlNjI3OWNmLCAweGNkM2U3ZTZmLFxuICAgICAgMHgxNjE4YjE2NiwgMHhmZDJjMWQwNSwgMHg4NDhmZDJjNSwgMHhmNmZiMjI5OSxcbiAgICAgIDB4ZjUyM2YzNTcsIDB4YTYzMjc2MjMsIDB4OTNhODM1MzEsIDB4NTZjY2NkMDIsXG4gICAgICAweGFjZjA4MTYyLCAweDVhNzVlYmI1LCAweDZlMTYzNjk3LCAweDg4ZDI3M2NjLFxuICAgICAgMHhkZTk2NjI5MiwgMHg4MWI5NDlkMCwgMHg0YzUwOTAxYiwgMHg3MWM2NTYxNCxcbiAgICAgIDB4ZTZjNmM3YmQsIDB4MzI3YTE0MGEsIDB4NDVlMWQwMDYsIDB4YzNmMjdiOWEsXG4gICAgICAweGM5YWE1M2ZkLCAweDYyYTgwZjAwLCAweGJiMjViZmUyLCAweDM1YmRkMmY2LFxuICAgICAgMHg3MTEyNjkwNSwgMHhiMjA0MDIyMiwgMHhiNmNiY2Y3YywgMHhjZDc2OWMyYixcbiAgICAgIDB4NTMxMTNlYzAsIDB4MTY0MGUzZDMsIDB4MzhhYmJkNjAsIDB4MjU0N2FkZjAsXG4gICAgICAweGJhMzgyMDljLCAweGY3NDZjZTc2LCAweDc3YWZhMWM1LCAweDIwNzU2MDYwLFxuICAgICAgMHg4NWNiZmU0ZSwgMHg4YWU4OGRkOCwgMHg3YWFhZjliMCwgMHg0Y2Y5YWE3ZSxcbiAgICAgIDB4MTk0OGMyNWMsIDB4MDJmYjhhOGMsIDB4MDFjMzZhZTQsIDB4ZDZlYmUxZjksXG4gICAgICAweDkwZDRmODY5LCAweGE2NWNkZWEwLCAweDNmMDkyNTJkLCAweGMyMDhlNjlmLFxuICAgICAgMHhiNzRlNjEzMiwgMHhjZTc3ZTI1YiwgMHg1NzhmZGZlMywgMHgzYWMzNzJlNl0pXG4gICAgXTtcbiAgdGhpcy5QID0gbmV3IFVpbnQzMkFycmF5KFtcbiAgICAweDI0M2Y2YTg4LCAweDg1YTMwOGQzLCAweDEzMTk4YTJlLCAweDAzNzA3MzQ0LFxuICAgIDB4YTQwOTM4MjIsIDB4Mjk5ZjMxZDAsIDB4MDgyZWZhOTgsIDB4ZWM0ZTZjODksXG4gICAgMHg0NTI4MjFlNiwgMHgzOGQwMTM3NywgMHhiZTU0NjZjZiwgMHgzNGU5MGM2YyxcbiAgICAweGMwYWMyOWI3LCAweGM5N2M1MGRkLCAweDNmODRkNWI1LCAweGI1NDcwOTE3LFxuICAgIDB4OTIxNmQ1ZDksIDB4ODk3OWZiMWJdKTtcbn07XG5cbmZ1bmN0aW9uIEYoUywgeDgsIGkpIHtcbiAgcmV0dXJuICgoKFNbMF1beDhbaSszXV0gK1xuICAgICAgICAgICAgU1sxXVt4OFtpKzJdXSkgXlxuICAgICAgICAgICAgU1syXVt4OFtpKzFdXSkgK1xuICAgICAgICAgICAgU1szXVt4OFtpXV0pO1xufTtcblxuQmxvd2Zpc2gucHJvdG90eXBlLmVuY2lwaGVyID0gZnVuY3Rpb24oeCwgeDgpIHtcbiAgaWYgKHg4ID09PSB1bmRlZmluZWQpIHtcbiAgICB4OCA9IG5ldyBVaW50OEFycmF5KHguYnVmZmVyKTtcbiAgICBpZiAoeC5ieXRlT2Zmc2V0ICE9PSAwKVxuICAgICAgeDggPSB4OC5zdWJhcnJheSh4LmJ5dGVPZmZzZXQpO1xuICB9XG4gIHhbMF0gXj0gdGhpcy5QWzBdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IDE2OyBpICs9IDIpIHtcbiAgICB4WzFdIF49IEYodGhpcy5TLCB4OCwgMCkgXiB0aGlzLlBbaV07XG4gICAgeFswXSBePSBGKHRoaXMuUywgeDgsIDQpIF4gdGhpcy5QW2krMV07XG4gIH1cbiAgdmFyIHQgPSB4WzBdO1xuICB4WzBdID0geFsxXSBeIHRoaXMuUFsxN107XG4gIHhbMV0gPSB0O1xufTtcblxuQmxvd2Zpc2gucHJvdG90eXBlLmRlY2lwaGVyID0gZnVuY3Rpb24oeCkge1xuICB2YXIgeDggPSBuZXcgVWludDhBcnJheSh4LmJ1ZmZlcik7XG4gIGlmICh4LmJ5dGVPZmZzZXQgIT09IDApXG4gICAgeDggPSB4OC5zdWJhcnJheSh4LmJ5dGVPZmZzZXQpO1xuICB4WzBdIF49IHRoaXMuUFsxN107XG4gIGZvciAodmFyIGkgPSAxNjsgaSA+IDA7IGkgLT0gMikge1xuICAgIHhbMV0gXj0gRih0aGlzLlMsIHg4LCAwKSBeIHRoaXMuUFtpXTtcbiAgICB4WzBdIF49IEYodGhpcy5TLCB4OCwgNCkgXiB0aGlzLlBbaS0xXTtcbiAgfVxuICB2YXIgdCA9IHhbMF07XG4gIHhbMF0gPSB4WzFdIF4gdGhpcy5QWzBdO1xuICB4WzFdID0gdDtcbn07XG5cbmZ1bmN0aW9uIHN0cmVhbTJ3b3JkKGRhdGEsIGRhdGFieXRlcyl7XG4gIHZhciBpLCB0ZW1wID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKywgQkxGX0orKykge1xuICAgIGlmIChCTEZfSiA+PSBkYXRhYnl0ZXMpIEJMRl9KID0gMDtcbiAgICB0ZW1wID0gKHRlbXAgPDwgOCkgfCBkYXRhW0JMRl9KXTtcbiAgfVxuICByZXR1cm4gdGVtcDtcbn07XG5cbkJsb3dmaXNoLnByb3RvdHlwZS5leHBhbmQwc3RhdGUgPSBmdW5jdGlvbihrZXksIGtleWJ5dGVzKSB7XG4gIHZhciBkID0gbmV3IFVpbnQzMkFycmF5KDIpLCBpLCBrO1xuICB2YXIgZDggPSBuZXcgVWludDhBcnJheShkLmJ1ZmZlcik7XG5cbiAgZm9yIChpID0gMCwgQkxGX0ogPSAwOyBpIDwgMTg7IGkrKykge1xuICAgIHRoaXMuUFtpXSBePSBzdHJlYW0yd29yZChrZXksIGtleWJ5dGVzKTtcbiAgfVxuICBCTEZfSiA9IDA7XG5cbiAgZm9yIChpID0gMDsgaSA8IDE4OyBpICs9IDIpIHtcbiAgICB0aGlzLmVuY2lwaGVyKGQsIGQ4KTtcbiAgICB0aGlzLlBbaV0gICA9IGRbMF07XG4gICAgdGhpcy5QW2krMV0gPSBkWzFdO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIGZvciAoayA9IDA7IGsgPCAyNTY7IGsgKz0gMikge1xuICAgICAgdGhpcy5lbmNpcGhlcihkLCBkOCk7XG4gICAgICB0aGlzLlNbaV1ba10gICA9IGRbMF07XG4gICAgICB0aGlzLlNbaV1baysxXSA9IGRbMV07XG4gICAgfVxuICB9XG59O1xuXG5CbG93ZmlzaC5wcm90b3R5cGUuZXhwYW5kc3RhdGUgPSBmdW5jdGlvbihkYXRhLCBkYXRhYnl0ZXMsIGtleSwga2V5Ynl0ZXMpIHtcbiAgdmFyIGQgPSBuZXcgVWludDMyQXJyYXkoMiksIGksIGs7XG5cbiAgZm9yIChpID0gMCwgQkxGX0ogPSAwOyBpIDwgMTg7IGkrKykge1xuICAgIHRoaXMuUFtpXSBePSBzdHJlYW0yd29yZChrZXksIGtleWJ5dGVzKTtcbiAgfVxuXG4gIGZvciAoaSA9IDAsIEJMRl9KID0gMDsgaSA8IDE4OyBpICs9IDIpIHtcbiAgICBkWzBdIF49IHN0cmVhbTJ3b3JkKGRhdGEsIGRhdGFieXRlcyk7XG4gICAgZFsxXSBePSBzdHJlYW0yd29yZChkYXRhLCBkYXRhYnl0ZXMpO1xuICAgIHRoaXMuZW5jaXBoZXIoZCk7XG4gICAgdGhpcy5QW2ldICAgPSBkWzBdO1xuICAgIHRoaXMuUFtpKzFdID0gZFsxXTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBmb3IgKGsgPSAwOyBrIDwgMjU2OyBrICs9IDIpIHtcbiAgICAgIGRbMF0gXj0gc3RyZWFtMndvcmQoZGF0YSwgZGF0YWJ5dGVzKTtcbiAgICAgIGRbMV0gXj0gc3RyZWFtMndvcmQoZGF0YSwgZGF0YWJ5dGVzKTtcbiAgICAgIHRoaXMuZW5jaXBoZXIoZCk7XG4gICAgICB0aGlzLlNbaV1ba10gICA9IGRbMF07XG4gICAgICB0aGlzLlNbaV1baysxXSA9IGRbMV07XG4gICAgfVxuICB9XG4gIEJMRl9KID0gMDtcbn07XG5cbkJsb3dmaXNoLnByb3RvdHlwZS5lbmMgPSBmdW5jdGlvbihkYXRhLCBibG9ja3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja3M7IGkrKykge1xuICAgIHRoaXMuZW5jaXBoZXIoZGF0YS5zdWJhcnJheShpKjIpKTtcbiAgfVxufTtcblxuQmxvd2Zpc2gucHJvdG90eXBlLmRlYyA9IGZ1bmN0aW9uKGRhdGEsIGJsb2Nrcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrczsgaSsrKSB7XG4gICAgdGhpcy5kZWNpcGhlcihkYXRhLnN1YmFycmF5KGkqMikpO1xuICB9XG59O1xuXG52YXIgQkNSWVBUX0JMT0NLUyA9IDgsXG4gICAgQkNSWVBUX0hBU0hTSVpFID0gMzI7XG5cbmZ1bmN0aW9uIGJjcnlwdF9oYXNoKHNoYTJwYXNzLCBzaGEyc2FsdCwgb3V0KSB7XG4gIHZhciBzdGF0ZSA9IG5ldyBCbG93ZmlzaCgpLFxuICAgICAgY2RhdGEgPSBuZXcgVWludDMyQXJyYXkoQkNSWVBUX0JMT0NLUyksIGksXG4gICAgICBjaXBoZXJ0ZXh0ID0gbmV3IFVpbnQ4QXJyYXkoWzc5LDEyMCwxMjEsOTksMTA0LDExNCwxMTEsMTA5LDk3LDExNiwxMDUsXG4gICAgICAgICAgICA5OSw2NiwxMDgsMTExLDExOSwxMDIsMTA1LDExNSwxMDQsODMsMTE5LDk3LDExNiw2OCwxMjEsMTEwLDk3LDEwOSxcbiAgICAgICAgICAgIDEwNSwxMTYsMTAxXSk7IC8vXCJPeHljaHJvbWF0aWNCbG93ZmlzaFN3YXREeW5hbWl0ZVwiXG5cbiAgc3RhdGUuZXhwYW5kc3RhdGUoc2hhMnNhbHQsIDY0LCBzaGEycGFzcywgNjQpO1xuICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykge1xuICAgIHN0YXRlLmV4cGFuZDBzdGF0ZShzaGEyc2FsdCwgNjQpO1xuICAgIHN0YXRlLmV4cGFuZDBzdGF0ZShzaGEycGFzcywgNjQpO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IEJDUllQVF9CTE9DS1M7IGkrKylcbiAgICBjZGF0YVtpXSA9IHN0cmVhbTJ3b3JkKGNpcGhlcnRleHQsIGNpcGhlcnRleHQuYnl0ZUxlbmd0aCk7XG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKVxuICAgIHN0YXRlLmVuYyhjZGF0YSwgY2RhdGEuYnl0ZUxlbmd0aCAvIDgpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBCQ1JZUFRfQkxPQ0tTOyBpKyspIHtcbiAgICBvdXRbNCppKzNdID0gY2RhdGFbaV0gPj4+IDI0O1xuICAgIG91dFs0KmkrMl0gPSBjZGF0YVtpXSA+Pj4gMTY7XG4gICAgb3V0WzQqaSsxXSA9IGNkYXRhW2ldID4+PiA4O1xuICAgIG91dFs0KmkrMF0gPSBjZGF0YVtpXTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYmNyeXB0X3Bia2RmKHBhc3MsIHBhc3NsZW4sIHNhbHQsIHNhbHRsZW4sIGtleSwga2V5bGVuLCByb3VuZHMpIHtcbiAgdmFyIHNoYTJwYXNzID0gbmV3IFVpbnQ4QXJyYXkoNjQpLFxuICAgICAgc2hhMnNhbHQgPSBuZXcgVWludDhBcnJheSg2NCksXG4gICAgICBvdXQgPSBuZXcgVWludDhBcnJheShCQ1JZUFRfSEFTSFNJWkUpLFxuICAgICAgdG1wb3V0ID0gbmV3IFVpbnQ4QXJyYXkoQkNSWVBUX0hBU0hTSVpFKSxcbiAgICAgIGNvdW50c2FsdCA9IG5ldyBVaW50OEFycmF5KHNhbHRsZW4rNCksXG4gICAgICBpLCBqLCBhbXQsIHN0cmlkZSwgZGVzdCwgY291bnQsXG4gICAgICBvcmlna2V5bGVuID0ga2V5bGVuO1xuXG4gIGlmIChyb3VuZHMgPCAxKVxuICAgIHJldHVybiAtMTtcbiAgaWYgKHBhc3NsZW4gPT09IDAgfHwgc2FsdGxlbiA9PT0gMCB8fCBrZXlsZW4gPT09IDAgfHxcbiAgICAgIGtleWxlbiA+IChvdXQuYnl0ZUxlbmd0aCAqIG91dC5ieXRlTGVuZ3RoKSB8fCBzYWx0bGVuID4gKDE8PDIwKSlcbiAgICByZXR1cm4gLTE7XG5cbiAgc3RyaWRlID0gTWF0aC5mbG9vcigoa2V5bGVuICsgb3V0LmJ5dGVMZW5ndGggLSAxKSAvIG91dC5ieXRlTGVuZ3RoKTtcbiAgYW10ID0gTWF0aC5mbG9vcigoa2V5bGVuICsgc3RyaWRlIC0gMSkgLyBzdHJpZGUpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzYWx0bGVuOyBpKyspXG4gICAgY291bnRzYWx0W2ldID0gc2FsdFtpXTtcblxuICBjcnlwdG9faGFzaF9zaGE1MTIoc2hhMnBhc3MsIHBhc3MsIHBhc3NsZW4pO1xuXG4gIGZvciAoY291bnQgPSAxOyBrZXlsZW4gPiAwOyBjb3VudCsrKSB7XG4gICAgY291bnRzYWx0W3NhbHRsZW4rMF0gPSBjb3VudCA+Pj4gMjQ7XG4gICAgY291bnRzYWx0W3NhbHRsZW4rMV0gPSBjb3VudCA+Pj4gMTY7XG4gICAgY291bnRzYWx0W3NhbHRsZW4rMl0gPSBjb3VudCA+Pj4gIDg7XG4gICAgY291bnRzYWx0W3NhbHRsZW4rM10gPSBjb3VudDtcblxuICAgIGNyeXB0b19oYXNoX3NoYTUxMihzaGEyc2FsdCwgY291bnRzYWx0LCBzYWx0bGVuICsgNCk7XG4gICAgYmNyeXB0X2hhc2goc2hhMnBhc3MsIHNoYTJzYWx0LCB0bXBvdXQpO1xuICAgIGZvciAoaSA9IG91dC5ieXRlTGVuZ3RoOyBpLS07KVxuICAgICAgb3V0W2ldID0gdG1wb3V0W2ldO1xuXG4gICAgZm9yIChpID0gMTsgaSA8IHJvdW5kczsgaSsrKSB7XG4gICAgICBjcnlwdG9faGFzaF9zaGE1MTIoc2hhMnNhbHQsIHRtcG91dCwgdG1wb3V0LmJ5dGVMZW5ndGgpO1xuICAgICAgYmNyeXB0X2hhc2goc2hhMnBhc3MsIHNoYTJzYWx0LCB0bXBvdXQpO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG91dC5ieXRlTGVuZ3RoOyBqKyspXG4gICAgICAgIG91dFtqXSBePSB0bXBvdXRbal07XG4gICAgfVxuXG4gICAgYW10ID0gTWF0aC5taW4oYW10LCBrZXlsZW4pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhbXQ7IGkrKykge1xuICAgICAgZGVzdCA9IGkgKiBzdHJpZGUgKyAoY291bnQgLSAxKTtcbiAgICAgIGlmIChkZXN0ID49IG9yaWdrZXlsZW4pXG4gICAgICAgIGJyZWFrO1xuICAgICAga2V5W2Rlc3RdID0gb3V0W2ldO1xuICAgIH1cbiAgICBrZXlsZW4gLT0gaTtcbiAgfVxuXG4gIHJldHVybiAwO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICBCTE9DS1M6IEJDUllQVF9CTE9DS1MsXG4gICAgICBIQVNIU0laRTogQkNSWVBUX0hBU0hTSVpFLFxuICAgICAgaGFzaDogYmNyeXB0X2hhc2gsXG4gICAgICBwYmtkZjogYmNyeXB0X3Bia2RmXG59O1xuIiwiKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIFV0aWxzXG4gIGZ1bmN0aW9uIGFzc2VydCAodmFsLCBtc2cpIHtcbiAgICBpZiAoIXZhbCkgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xuICB9XG5cbiAgLy8gQ291bGQgdXNlIGBpbmhlcml0c2AgbW9kdWxlLCBidXQgZG9uJ3Qgd2FudCB0byBtb3ZlIGZyb20gc2luZ2xlIGZpbGVcbiAgLy8gYXJjaGl0ZWN0dXJlIHlldC5cbiAgZnVuY3Rpb24gaW5oZXJpdHMgKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yO1xuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9O1xuICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGU7XG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKTtcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3I7XG4gIH1cblxuICAvLyBCTlxuXG4gIGZ1bmN0aW9uIEJOIChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIGlmIChCTi5pc0JOKG51bWJlcikpIHtcbiAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfVxuXG4gICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgdGhpcy53b3JkcyA9IG51bGw7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgLy8gUmVkdWN0aW9uIGNvbnRleHRcbiAgICB0aGlzLnJlZCA9IG51bGw7XG5cbiAgICBpZiAobnVtYmVyICE9PSBudWxsKSB7XG4gICAgICBpZiAoYmFzZSA9PT0gJ2xlJyB8fCBiYXNlID09PSAnYmUnKSB7XG4gICAgICAgIGVuZGlhbiA9IGJhc2U7XG4gICAgICAgIGJhc2UgPSAxMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW5pdChudW1iZXIgfHwgMCwgYmFzZSB8fCAxMCwgZW5kaWFuIHx8ICdiZScpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEJOO1xuICB9IGVsc2Uge1xuICAgIGV4cG9ydHMuQk4gPSBCTjtcbiAgfVxuXG4gIEJOLkJOID0gQk47XG4gIEJOLndvcmRTaXplID0gMjY7XG5cbiAgdmFyIEJ1ZmZlcjtcbiAgdHJ5IHtcbiAgICBCdWZmZXIgPSByZXF1aXJlKCdidWYnICsgJ2ZlcicpLkJ1ZmZlcjtcbiAgfSBjYXRjaCAoZSkge1xuICB9XG5cbiAgQk4uaXNCTiA9IGZ1bmN0aW9uIGlzQk4gKG51bSkge1xuICAgIGlmIChudW0gaW5zdGFuY2VvZiBCTikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bSAhPT0gbnVsbCAmJiB0eXBlb2YgbnVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgbnVtLmNvbnN0cnVjdG9yLndvcmRTaXplID09PSBCTi53b3JkU2l6ZSAmJiBBcnJheS5pc0FycmF5KG51bS53b3Jkcyk7XG4gIH07XG5cbiAgQk4ubWF4ID0gZnVuY3Rpb24gbWF4IChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPiAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ubWluID0gZnVuY3Rpb24gbWluIChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPCAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdCAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0TnVtYmVyKG51bWJlciwgYmFzZSwgZW5kaWFuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0QXJyYXkobnVtYmVyLCBiYXNlLCBlbmRpYW4pO1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAnaGV4Jykge1xuICAgICAgYmFzZSA9IDE2O1xuICAgIH1cbiAgICBhc3NlcnQoYmFzZSA9PT0gKGJhc2UgfCAwKSAmJiBiYXNlID49IDIgJiYgYmFzZSA8PSAzNik7XG5cbiAgICBudW1iZXIgPSBudW1iZXIudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGlmIChudW1iZXJbMF0gPT09ICctJykge1xuICAgICAgc3RhcnQrKztcbiAgICB9XG5cbiAgICBpZiAoYmFzZSA9PT0gMTYpIHtcbiAgICAgIHRoaXMuX3BhcnNlSGV4KG51bWJlciwgc3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wYXJzZUJhc2UobnVtYmVyLCBiYXNlLCBzdGFydCk7XG4gICAgfVxuXG4gICAgaWYgKG51bWJlclswXSA9PT0gJy0nKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLnN0cmlwKCk7XG5cbiAgICBpZiAoZW5kaWFuICE9PSAnbGUnKSByZXR1cm47XG5cbiAgICB0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksIGJhc2UsIGVuZGlhbik7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0TnVtYmVyID0gZnVuY3Rpb24gX2luaXROdW1iZXIgKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgbnVtYmVyID0gLW51bWJlcjtcbiAgICB9XG4gICAgaWYgKG51bWJlciA8IDB4NDAwMDAwMCkge1xuICAgICAgdGhpcy53b3JkcyA9IFsgbnVtYmVyICYgMHgzZmZmZmZmIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgfSBlbHNlIGlmIChudW1iZXIgPCAweDEwMDAwMDAwMDAwMDAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gW1xuICAgICAgICBudW1iZXIgJiAweDNmZmZmZmYsXG4gICAgICAgIChudW1iZXIgLyAweDQwMDAwMDApICYgMHgzZmZmZmZmXG4gICAgICBdO1xuICAgICAgdGhpcy5sZW5ndGggPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQobnVtYmVyIDwgMHgyMDAwMDAwMDAwMDAwMCk7IC8vIDIgXiA1MyAodW5zYWZlKVxuICAgICAgdGhpcy53b3JkcyA9IFtcbiAgICAgICAgbnVtYmVyICYgMHgzZmZmZmZmLFxuICAgICAgICAobnVtYmVyIC8gMHg0MDAwMDAwKSAmIDB4M2ZmZmZmZixcbiAgICAgICAgMVxuICAgICAgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMztcbiAgICB9XG5cbiAgICBpZiAoZW5kaWFuICE9PSAnbGUnKSByZXR1cm47XG5cbiAgICAvLyBSZXZlcnNlIHRoZSBieXRlc1xuICAgIHRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSwgYmFzZSwgZW5kaWFuKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXRBcnJheSA9IGZ1bmN0aW9uIF9pbml0QXJyYXkgKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgLy8gUGVyaGFwcyBhIFVpbnQ4QXJyYXlcbiAgICBhc3NlcnQodHlwZW9mIG51bWJlci5sZW5ndGggPT09ICdudW1iZXInKTtcbiAgICBpZiAobnVtYmVyLmxlbmd0aCA8PSAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gWyAwIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbChudW1iZXIubGVuZ3RoIC8gMyk7XG4gICAgdGhpcy53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICB9XG5cbiAgICB2YXIgaiwgdztcbiAgICB2YXIgb2ZmID0gMDtcbiAgICBpZiAoZW5kaWFuID09PSAnYmUnKSB7XG4gICAgICBmb3IgKGkgPSBudW1iZXIubGVuZ3RoIC0gMSwgaiA9IDA7IGkgPj0gMDsgaSAtPSAzKSB7XG4gICAgICAgIHcgPSBudW1iZXJbaV0gfCAobnVtYmVyW2kgLSAxXSA8PCA4KSB8IChudW1iZXJbaSAtIDJdIDw8IDE2KTtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgICB0aGlzLndvcmRzW2ogKyAxXSA9ICh3ID4+PiAoMjYgLSBvZmYpKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgb2ZmICs9IDI0O1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW5kaWFuID09PSAnbGUnKSB7XG4gICAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG51bWJlci5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB3ID0gbnVtYmVyW2ldIHwgKG51bWJlcltpICsgMV0gPDwgOCkgfCAobnVtYmVyW2kgKyAyXSA8PCAxNik7XG4gICAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgdGhpcy53b3Jkc1tqICsgMV0gPSAodyA+Pj4gKDI2IC0gb2ZmKSkgJiAweDNmZmZmZmY7XG4gICAgICAgIG9mZiArPSAyNDtcbiAgICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBmdW5jdGlvbiBwYXJzZUhleCAoc3RyLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSAwO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihzdHIubGVuZ3RoLCBlbmQpO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpIC0gNDg7XG5cbiAgICAgIHIgPDw9IDQ7XG5cbiAgICAgIC8vICdhJyAtICdmJ1xuICAgICAgaWYgKGMgPj0gNDkgJiYgYyA8PSA1NCkge1xuICAgICAgICByIHw9IGMgLSA0OSArIDB4YTtcblxuICAgICAgLy8gJ0EnIC0gJ0YnXG4gICAgICB9IGVsc2UgaWYgKGMgPj0gMTcgJiYgYyA8PSAyMikge1xuICAgICAgICByIHw9IGMgLSAxNyArIDB4YTtcblxuICAgICAgLy8gJzAnIC0gJzknXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByIHw9IGMgJiAweGY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl9wYXJzZUhleCA9IGZ1bmN0aW9uIF9wYXJzZUhleCAobnVtYmVyLCBzdGFydCkge1xuICAgIC8vIENyZWF0ZSBwb3NzaWJseSBiaWdnZXIgYXJyYXkgdG8gZW5zdXJlIHRoYXQgaXQgZml0cyB0aGUgbnVtYmVyXG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLmNlaWwoKG51bWJlci5sZW5ndGggLSBzdGFydCkgLyA2KTtcbiAgICB0aGlzLndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgIH1cblxuICAgIHZhciBqLCB3O1xuICAgIC8vIFNjYW4gMjQtYml0IGNodW5rcyBhbmQgYWRkIHRoZW0gdG8gdGhlIG51bWJlclxuICAgIHZhciBvZmYgPSAwO1xuICAgIGZvciAoaSA9IG51bWJlci5sZW5ndGggLSA2LCBqID0gMDsgaSA+PSBzdGFydDsgaSAtPSA2KSB7XG4gICAgICB3ID0gcGFyc2VIZXgobnVtYmVyLCBpLCBpICsgNik7XG4gICAgICB0aGlzLndvcmRzW2pdIHw9ICh3IDw8IG9mZikgJiAweDNmZmZmZmY7XG4gICAgICAvLyBOT1RFOiBgMHgzZmZmZmZgIGlzIGludGVudGlvbmFsIGhlcmUsIDI2Yml0cyBtYXggc2hpZnQgKyAyNGJpdCBoZXggbGltYlxuICAgICAgdGhpcy53b3Jkc1tqICsgMV0gfD0gdyA+Pj4gKDI2IC0gb2ZmKSAmIDB4M2ZmZmZmO1xuICAgICAgb2ZmICs9IDI0O1xuICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgIGorKztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgKyA2ICE9PSBzdGFydCkge1xuICAgICAgdyA9IHBhcnNlSGV4KG51bWJlciwgc3RhcnQsIGkgKyA2KTtcbiAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgIHRoaXMud29yZHNbaiArIDFdIHw9IHcgPj4+ICgyNiAtIG9mZikgJiAweDNmZmZmZjtcbiAgICB9XG4gICAgdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHBhcnNlQmFzZSAoc3RyLCBzdGFydCwgZW5kLCBtdWwpIHtcbiAgICB2YXIgciA9IDA7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKHN0ci5sZW5ndGgsIGVuZCk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSkgLSA0ODtcblxuICAgICAgciAqPSBtdWw7XG5cbiAgICAgIC8vICdhJ1xuICAgICAgaWYgKGMgPj0gNDkpIHtcbiAgICAgICAgciArPSBjIC0gNDkgKyAweGE7XG5cbiAgICAgIC8vICdBJ1xuICAgICAgfSBlbHNlIGlmIChjID49IDE3KSB7XG4gICAgICAgIHIgKz0gYyAtIDE3ICsgMHhhO1xuXG4gICAgICAvLyAnMCcgLSAnOSdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIgKz0gYztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3BhcnNlQmFzZSA9IGZ1bmN0aW9uIF9wYXJzZUJhc2UgKG51bWJlciwgYmFzZSwgc3RhcnQpIHtcbiAgICAvLyBJbml0aWFsaXplIGFzIHplcm9cbiAgICB0aGlzLndvcmRzID0gWyAwIF07XG4gICAgdGhpcy5sZW5ndGggPSAxO1xuXG4gICAgLy8gRmluZCBsZW5ndGggb2YgbGltYiBpbiBiYXNlXG4gICAgZm9yICh2YXIgbGltYkxlbiA9IDAsIGxpbWJQb3cgPSAxOyBsaW1iUG93IDw9IDB4M2ZmZmZmZjsgbGltYlBvdyAqPSBiYXNlKSB7XG4gICAgICBsaW1iTGVuKys7XG4gICAgfVxuICAgIGxpbWJMZW4tLTtcbiAgICBsaW1iUG93ID0gKGxpbWJQb3cgLyBiYXNlKSB8IDA7XG5cbiAgICB2YXIgdG90YWwgPSBudW1iZXIubGVuZ3RoIC0gc3RhcnQ7XG4gICAgdmFyIG1vZCA9IHRvdGFsICUgbGltYkxlbjtcbiAgICB2YXIgZW5kID0gTWF0aC5taW4odG90YWwsIHRvdGFsIC0gbW9kKSArIHN0YXJ0O1xuXG4gICAgdmFyIHdvcmQgPSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBsaW1iTGVuKSB7XG4gICAgICB3b3JkID0gcGFyc2VCYXNlKG51bWJlciwgaSwgaSArIGxpbWJMZW4sIGJhc2UpO1xuXG4gICAgICB0aGlzLmltdWxuKGxpbWJQb3cpO1xuICAgICAgaWYgKHRoaXMud29yZHNbMF0gKyB3b3JkIDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gKz0gd29yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2lhZGRuKHdvcmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2QgIT09IDApIHtcbiAgICAgIHZhciBwb3cgPSAxO1xuICAgICAgd29yZCA9IHBhcnNlQmFzZShudW1iZXIsIGksIG51bWJlci5sZW5ndGgsIGJhc2UpO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbW9kOyBpKyspIHtcbiAgICAgICAgcG93ICo9IGJhc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW11bG4ocG93KTtcbiAgICAgIGlmICh0aGlzLndvcmRzWzBdICsgd29yZCA8IDB4NDAwMDAwMCkge1xuICAgICAgICB0aGlzLndvcmRzWzBdICs9IHdvcmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pYWRkbih3b3JkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5IChkZXN0KSB7XG4gICAgZGVzdC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZXN0LndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXTtcbiAgICB9XG4gICAgZGVzdC5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICBkZXN0Lm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZTtcbiAgICBkZXN0LnJlZCA9IHRoaXMucmVkO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lICgpIHtcbiAgICB2YXIgciA9IG5ldyBCTihudWxsKTtcbiAgICB0aGlzLmNvcHkocik7XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9leHBhbmQgPSBmdW5jdGlvbiBfZXhwYW5kIChzaXplKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXSA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIFJlbW92ZSBsZWFkaW5nIGAwYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc3RyaXAgPSBmdW5jdGlvbiBzdHJpcCAoKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoID4gMSAmJiB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgIHRoaXMubGVuZ3RoLS07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9ub3JtU2lnbigpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fbm9ybVNpZ24gPSBmdW5jdGlvbiBfbm9ybVNpZ24gKCkge1xuICAgIC8vIC0wID0gMFxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgICByZXR1cm4gKHRoaXMucmVkID8gJzxCTi1SOiAnIDogJzxCTjogJykgKyB0aGlzLnRvU3RyaW5nKDE2KSArICc+JztcbiAgfTtcblxuICAvKlxuXG4gIHZhciB6ZXJvcyA9IFtdO1xuICB2YXIgZ3JvdXBTaXplcyA9IFtdO1xuICB2YXIgZ3JvdXBCYXNlcyA9IFtdO1xuXG4gIHZhciBzID0gJyc7XG4gIHZhciBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBCTi53b3JkU2l6ZSkge1xuICAgIHplcm9zW2ldID0gcztcbiAgICBzICs9ICcwJztcbiAgfVxuICBncm91cFNpemVzWzBdID0gMDtcbiAgZ3JvdXBTaXplc1sxXSA9IDA7XG4gIGdyb3VwQmFzZXNbMF0gPSAwO1xuICBncm91cEJhc2VzWzFdID0gMDtcbiAgdmFyIGJhc2UgPSAyIC0gMTtcbiAgd2hpbGUgKCsrYmFzZSA8IDM2ICsgMSkge1xuICAgIHZhciBncm91cFNpemUgPSAwO1xuICAgIHZhciBncm91cEJhc2UgPSAxO1xuICAgIHdoaWxlIChncm91cEJhc2UgPCAoMSA8PCBCTi53b3JkU2l6ZSkgLyBiYXNlKSB7XG4gICAgICBncm91cEJhc2UgKj0gYmFzZTtcbiAgICAgIGdyb3VwU2l6ZSArPSAxO1xuICAgIH1cbiAgICBncm91cFNpemVzW2Jhc2VdID0gZ3JvdXBTaXplO1xuICAgIGdyb3VwQmFzZXNbYmFzZV0gPSBncm91cEJhc2U7XG4gIH1cblxuICAqL1xuXG4gIHZhciB6ZXJvcyA9IFtcbiAgICAnJyxcbiAgICAnMCcsXG4gICAgJzAwJyxcbiAgICAnMDAwJyxcbiAgICAnMDAwMCcsXG4gICAgJzAwMDAwJyxcbiAgICAnMDAwMDAwJyxcbiAgICAnMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCdcbiAgXTtcblxuICB2YXIgZ3JvdXBTaXplcyA9IFtcbiAgICAwLCAwLFxuICAgIDI1LCAxNiwgMTIsIDExLCAxMCwgOSwgOCxcbiAgICA4LCA3LCA3LCA3LCA3LCA2LCA2LFxuICAgIDYsIDYsIDYsIDYsIDYsIDUsIDUsXG4gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1XG4gIF07XG5cbiAgdmFyIGdyb3VwQmFzZXMgPSBbXG4gICAgMCwgMCxcbiAgICAzMzU1NDQzMiwgNDMwNDY3MjEsIDE2Nzc3MjE2LCA0ODgyODEyNSwgNjA0NjYxNzYsIDQwMzUzNjA3LCAxNjc3NzIxNixcbiAgICA0MzA0NjcyMSwgMTAwMDAwMDAsIDE5NDg3MTcxLCAzNTgzMTgwOCwgNjI3NDg1MTcsIDc1Mjk1MzYsIDExMzkwNjI1LFxuICAgIDE2Nzc3MjE2LCAyNDEzNzU2OSwgMzQwMTIyMjQsIDQ3MDQ1ODgxLCA2NDAwMDAwMCwgNDA4NDEwMSwgNTE1MzYzMixcbiAgICA2NDM2MzQzLCA3OTYyNjI0LCA5NzY1NjI1LCAxMTg4MTM3NiwgMTQzNDg5MDcsIDE3MjEwMzY4LCAyMDUxMTE0OSxcbiAgICAyNDMwMDAwMCwgMjg2MjkxNTEsIDMzNTU0NDMyLCAzOTEzNTM5MywgNDU0MzU0MjQsIDUyNTIxODc1LCA2MDQ2NjE3NlxuICBdO1xuXG4gIEJOLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nIChiYXNlLCBwYWRkaW5nKSB7XG4gICAgYmFzZSA9IGJhc2UgfHwgMTA7XG4gICAgcGFkZGluZyA9IHBhZGRpbmcgfCAwIHx8IDE7XG5cbiAgICB2YXIgb3V0O1xuICAgIGlmIChiYXNlID09PSAxNiB8fCBiYXNlID09PSAnaGV4Jykge1xuICAgICAgb3V0ID0gJyc7XG4gICAgICB2YXIgb2ZmID0gMDtcbiAgICAgIHZhciBjYXJyeSA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHcgPSB0aGlzLndvcmRzW2ldO1xuICAgICAgICB2YXIgd29yZCA9ICgoKHcgPDwgb2ZmKSB8IGNhcnJ5KSAmIDB4ZmZmZmZmKS50b1N0cmluZygxNik7XG4gICAgICAgIGNhcnJ5ID0gKHcgPj4+ICgyNCAtIG9mZikpICYgMHhmZmZmZmY7XG4gICAgICAgIGlmIChjYXJyeSAhPT0gMCB8fCBpICE9PSB0aGlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBvdXQgPSB6ZXJvc1s2IC0gd29yZC5sZW5ndGhdICsgd29yZCArIG91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgPSB3b3JkICsgb3V0O1xuICAgICAgICB9XG4gICAgICAgIG9mZiArPSAyO1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICAgIG91dCA9IGNhcnJ5LnRvU3RyaW5nKDE2KSArIG91dDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChvdXQubGVuZ3RoICUgcGFkZGluZyAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnLScgKyBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAoYmFzZSB8IDApICYmIGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KSB7XG4gICAgICAvLyB2YXIgZ3JvdXBTaXplID0gTWF0aC5mbG9vcihCTi53b3JkU2l6ZSAqIE1hdGguTE4yIC8gTWF0aC5sb2coYmFzZSkpO1xuICAgICAgdmFyIGdyb3VwU2l6ZSA9IGdyb3VwU2l6ZXNbYmFzZV07XG4gICAgICAvLyB2YXIgZ3JvdXBCYXNlID0gTWF0aC5wb3coYmFzZSwgZ3JvdXBTaXplKTtcbiAgICAgIHZhciBncm91cEJhc2UgPSBncm91cEJhc2VzW2Jhc2VdO1xuICAgICAgb3V0ID0gJyc7XG4gICAgICB2YXIgYyA9IHRoaXMuY2xvbmUoKTtcbiAgICAgIGMubmVnYXRpdmUgPSAwO1xuICAgICAgd2hpbGUgKCFjLmlzWmVybygpKSB7XG4gICAgICAgIHZhciByID0gYy5tb2RuKGdyb3VwQmFzZSkudG9TdHJpbmcoYmFzZSk7XG4gICAgICAgIGMgPSBjLmlkaXZuKGdyb3VwQmFzZSk7XG5cbiAgICAgICAgaWYgKCFjLmlzWmVybygpKSB7XG4gICAgICAgICAgb3V0ID0gemVyb3NbZ3JvdXBTaXplIC0gci5sZW5ndGhdICsgciArIG91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgPSByICsgb3V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc1plcm8oKSkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAob3V0Lmxlbmd0aCAlIHBhZGRpbmcgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJzAnICsgb3V0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJy0nICsgb3V0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBhc3NlcnQoZmFsc2UsICdCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Jyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24gdG9OdW1iZXIgKCkge1xuICAgIHZhciByZXQgPSB0aGlzLndvcmRzWzBdO1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0ICs9IHRoaXMud29yZHNbMV0gKiAweDQwMDAwMDA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxlbmd0aCA9PT0gMyAmJiB0aGlzLndvcmRzWzJdID09PSAweDAxKSB7XG4gICAgICAvLyBOT1RFOiBhdCB0aGlzIHN0YWdlIGl0IGlzIGtub3duIHRoYXQgdGhlIHRvcCBiaXQgaXMgc2V0XG4gICAgICByZXQgKz0gMHgxMDAwMDAwMDAwMDAwMCArICh0aGlzLndvcmRzWzFdICogMHg0MDAwMDAwKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID4gMikge1xuICAgICAgYXNzZXJ0KGZhbHNlLCAnTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzJyk7XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgPyAtcmV0IDogcmV0O1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKDE2KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9CdWZmZXIgPSBmdW5jdGlvbiB0b0J1ZmZlciAoZW5kaWFuLCBsZW5ndGgpIHtcbiAgICBhc3NlcnQodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpO1xuICAgIHJldHVybiB0aGlzLnRvQXJyYXlMaWtlKEJ1ZmZlciwgZW5kaWFuLCBsZW5ndGgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSAoZW5kaWFuLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSwgZW5kaWFuLCBsZW5ndGgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0FycmF5TGlrZSA9IGZ1bmN0aW9uIHRvQXJyYXlMaWtlIChBcnJheVR5cGUsIGVuZGlhbiwgbGVuZ3RoKSB7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0aGlzLmJ5dGVMZW5ndGgoKTtcbiAgICB2YXIgcmVxTGVuZ3RoID0gbGVuZ3RoIHx8IE1hdGgubWF4KDEsIGJ5dGVMZW5ndGgpO1xuICAgIGFzc2VydChieXRlTGVuZ3RoIDw9IHJlcUxlbmd0aCwgJ2J5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgnKTtcbiAgICBhc3NlcnQocmVxTGVuZ3RoID4gMCwgJ1JlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCcpO1xuXG4gICAgdGhpcy5zdHJpcCgpO1xuICAgIHZhciBsaXR0bGVFbmRpYW4gPSBlbmRpYW4gPT09ICdsZSc7XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheVR5cGUocmVxTGVuZ3RoKTtcblxuICAgIHZhciBiLCBpO1xuICAgIHZhciBxID0gdGhpcy5jbG9uZSgpO1xuICAgIGlmICghbGl0dGxlRW5kaWFuKSB7XG4gICAgICAvLyBBc3N1bWUgYmlnLWVuZGlhblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJlcUxlbmd0aCAtIGJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICByZXNbaV0gPSAwO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyAhcS5pc1plcm8oKTsgaSsrKSB7XG4gICAgICAgIGIgPSBxLmFuZGxuKDB4ZmYpO1xuICAgICAgICBxLml1c2hybig4KTtcblxuICAgICAgICByZXNbcmVxTGVuZ3RoIC0gaSAtIDFdID0gYjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMDsgIXEuaXNaZXJvKCk7IGkrKykge1xuICAgICAgICBiID0gcS5hbmRsbigweGZmKTtcbiAgICAgICAgcS5pdXNocm4oOCk7XG5cbiAgICAgICAgcmVzW2ldID0gYjtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IGkgPCByZXFMZW5ndGg7IGkrKykge1xuICAgICAgICByZXNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgaWYgKE1hdGguY2x6MzIpIHtcbiAgICBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyA9IGZ1bmN0aW9uIF9jb3VudEJpdHMgKHcpIHtcbiAgICAgIHJldHVybiAzMiAtIE1hdGguY2x6MzIodyk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyA9IGZ1bmN0aW9uIF9jb3VudEJpdHMgKHcpIHtcbiAgICAgIHZhciB0ID0gdztcbiAgICAgIHZhciByID0gMDtcbiAgICAgIGlmICh0ID49IDB4MTAwMCkge1xuICAgICAgICByICs9IDEzO1xuICAgICAgICB0ID4+Pj0gMTM7XG4gICAgICB9XG4gICAgICBpZiAodCA+PSAweDQwKSB7XG4gICAgICAgIHIgKz0gNztcbiAgICAgICAgdCA+Pj49IDc7XG4gICAgICB9XG4gICAgICBpZiAodCA+PSAweDgpIHtcbiAgICAgICAgciArPSA0O1xuICAgICAgICB0ID4+Pj0gNDtcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4MDIpIHtcbiAgICAgICAgciArPSAyO1xuICAgICAgICB0ID4+Pj0gMjtcbiAgICAgIH1cbiAgICAgIHJldHVybiByICsgdDtcbiAgICB9O1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl96ZXJvQml0cyA9IGZ1bmN0aW9uIF96ZXJvQml0cyAodykge1xuICAgIC8vIFNob3J0LWN1dFxuICAgIGlmICh3ID09PSAwKSByZXR1cm4gMjY7XG5cbiAgICB2YXIgdCA9IHc7XG4gICAgdmFyIHIgPSAwO1xuICAgIGlmICgodCAmIDB4MWZmZikgPT09IDApIHtcbiAgICAgIHIgKz0gMTM7XG4gICAgICB0ID4+Pj0gMTM7XG4gICAgfVxuICAgIGlmICgodCAmIDB4N2YpID09PSAwKSB7XG4gICAgICByICs9IDc7XG4gICAgICB0ID4+Pj0gNztcbiAgICB9XG4gICAgaWYgKCh0ICYgMHhmKSA9PT0gMCkge1xuICAgICAgciArPSA0O1xuICAgICAgdCA+Pj49IDQ7XG4gICAgfVxuICAgIGlmICgodCAmIDB4MykgPT09IDApIHtcbiAgICAgIHIgKz0gMjtcbiAgICAgIHQgPj4+PSAyO1xuICAgIH1cbiAgICBpZiAoKHQgJiAweDEpID09PSAwKSB7XG4gICAgICByKys7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIC8vIFJldHVybiBudW1iZXIgb2YgdXNlZCBiaXRzIGluIGEgQk5cbiAgQk4ucHJvdG90eXBlLmJpdExlbmd0aCA9IGZ1bmN0aW9uIGJpdExlbmd0aCAoKSB7XG4gICAgdmFyIHcgPSB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV07XG4gICAgdmFyIGhpID0gdGhpcy5fY291bnRCaXRzKHcpO1xuICAgIHJldHVybiAodGhpcy5sZW5ndGggLSAxKSAqIDI2ICsgaGk7XG4gIH07XG5cbiAgZnVuY3Rpb24gdG9CaXRBcnJheSAobnVtKSB7XG4gICAgdmFyIHcgPSBuZXcgQXJyYXkobnVtLmJpdExlbmd0aCgpKTtcblxuICAgIGZvciAodmFyIGJpdCA9IDA7IGJpdCA8IHcubGVuZ3RoOyBiaXQrKykge1xuICAgICAgdmFyIG9mZiA9IChiaXQgLyAyNikgfCAwO1xuICAgICAgdmFyIHdiaXQgPSBiaXQgJSAyNjtcblxuICAgICAgd1tiaXRdID0gKG51bS53b3Jkc1tvZmZdICYgKDEgPDwgd2JpdCkpID4+PiB3Yml0O1xuICAgIH1cblxuICAgIHJldHVybiB3O1xuICB9XG5cbiAgLy8gTnVtYmVyIG9mIHRyYWlsaW5nIHplcm8gYml0c1xuICBCTi5wcm90b3R5cGUuemVyb0JpdHMgPSBmdW5jdGlvbiB6ZXJvQml0cyAoKSB7XG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpIHJldHVybiAwO1xuXG4gICAgdmFyIHIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGIgPSB0aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2ldKTtcbiAgICAgIHIgKz0gYjtcbiAgICAgIGlmIChiICE9PSAyNikgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ieXRlTGVuZ3RoID0gZnVuY3Rpb24gYnl0ZUxlbmd0aCAoKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpIC8gOCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvVHdvcyA9IGZ1bmN0aW9uIHRvVHdvcyAod2lkdGgpIHtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWJzKCkuaW5vdG4od2lkdGgpLmlhZGRuKDEpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mcm9tVHdvcyA9IGZ1bmN0aW9uIGZyb21Ud29zICh3aWR0aCkge1xuICAgIGlmICh0aGlzLnRlc3RuKHdpZHRoIC0gMSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vdG4od2lkdGgpLmlhZGRuKDEpLmluZWcoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXNOZWcgPSBmdW5jdGlvbiBpc05lZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRpdmUgIT09IDA7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG5lZ2F0aXZlIGNsb25lIG9mIGB0aGlzYFxuICBCTi5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnICgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW5lZyA9IGZ1bmN0aW9uIGluZWcgKCkge1xuICAgIGlmICghdGhpcy5pc1plcm8oKSkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSBePSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIE9yIGBudW1gIHdpdGggYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdW9yID0gZnVuY3Rpb24gaXVvciAobnVtKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgbnVtLmxlbmd0aCkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXSA9IDA7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldIHwgbnVtLndvcmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlvciA9IGZ1bmN0aW9uIGlvciAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVvcihudW0pO1xuICB9O1xuXG4gIC8vIE9yIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5vciA9IGZ1bmN0aW9uIG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLmlvcihudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pb3IodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVvciA9IGZ1bmN0aW9uIHVvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdW9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1b3IodGhpcyk7XG4gIH07XG5cbiAgLy8gQW5kIGBudW1gIHdpdGggYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdWFuZCA9IGZ1bmN0aW9uIGl1YW5kIChudW0pIHtcbiAgICAvLyBiID0gbWluLWxlbmd0aChudW0sIHRoaXMpXG4gICAgdmFyIGI7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkge1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXSAmIG51bS53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IGIubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFuZCA9IGZ1bmN0aW9uIGlhbmQgKG51bSkge1xuICAgIGFzc2VydCgodGhpcy5uZWdhdGl2ZSB8IG51bS5uZWdhdGl2ZSkgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1YW5kKG51bSk7XG4gIH07XG5cbiAgLy8gQW5kIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pYW5kKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51YW5kID0gZnVuY3Rpb24gdWFuZCAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pdWFuZCh0aGlzKTtcbiAgfTtcblxuICAvLyBYb3IgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1eG9yID0gZnVuY3Rpb24gaXV4b3IgKG51bSkge1xuICAgIC8vIGEubGVuZ3RoID4gYi5sZW5ndGhcbiAgICB2YXIgYTtcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBhID0gdGhpcztcbiAgICAgIGIgPSBudW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBudW07XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldIF4gYi53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcyAhPT0gYSkge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYS5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5peG9yID0gZnVuY3Rpb24gaXhvciAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXV4b3IobnVtKTtcbiAgfTtcblxuICAvLyBYb3IgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5peG9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml4b3IodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnV4b3IgPSBmdW5jdGlvbiB1eG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1eG9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1eG9yKHRoaXMpO1xuICB9O1xuXG4gIC8vIE5vdCBgYHRoaXNgYCB3aXRoIGBgd2lkdGhgYCBiaXR3aWR0aFxuICBCTi5wcm90b3R5cGUuaW5vdG4gPSBmdW5jdGlvbiBpbm90biAod2lkdGgpIHtcbiAgICBhc3NlcnQodHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJyAmJiB3aWR0aCA+PSAwKTtcblxuICAgIHZhciBieXRlc05lZWRlZCA9IE1hdGguY2VpbCh3aWR0aCAvIDI2KSB8IDA7XG4gICAgdmFyIGJpdHNMZWZ0ID0gd2lkdGggJSAyNjtcblxuICAgIC8vIEV4dGVuZCB0aGUgYnVmZmVyIHdpdGggbGVhZGluZyB6ZXJvZXNcbiAgICB0aGlzLl9leHBhbmQoYnl0ZXNOZWVkZWQpO1xuXG4gICAgaWYgKGJpdHNMZWZ0ID4gMCkge1xuICAgICAgYnl0ZXNOZWVkZWQtLTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgY29tcGxldGUgd29yZHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzTmVlZGVkOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB+dGhpcy53b3Jkc1tpXSAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHJlc2lkdWVcbiAgICBpZiAoYml0c0xlZnQgPiAwKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gfnRoaXMud29yZHNbaV0gJiAoMHgzZmZmZmZmID4+ICgyNiAtIGJpdHNMZWZ0KSk7XG4gICAgfVxuXG4gICAgLy8gQW5kIHJlbW92ZSBsZWFkaW5nIHplcm9lc1xuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm5vdG4gPSBmdW5jdGlvbiBub3RuICh3aWR0aCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW5vdG4od2lkdGgpO1xuICB9O1xuXG4gIC8vIFNldCBgYml0YCBvZiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnNldG4gPSBmdW5jdGlvbiBzZXRuIChiaXQsIHZhbCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0ID09PSAnbnVtYmVyJyAmJiBiaXQgPj0gMCk7XG5cbiAgICB2YXIgb2ZmID0gKGJpdCAvIDI2KSB8IDA7XG4gICAgdmFyIHdiaXQgPSBiaXQgJSAyNjtcblxuICAgIHRoaXMuX2V4cGFuZChvZmYgKyAxKTtcblxuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMud29yZHNbb2ZmXSA9IHRoaXMud29yZHNbb2ZmXSB8ICgxIDw8IHdiaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndvcmRzW29mZl0gPSB0aGlzLndvcmRzW29mZl0gJiB+KDEgPDwgd2JpdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICAvLyBBZGQgYG51bWAgdG8gYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pYWRkID0gZnVuY3Rpb24gaWFkZCAobnVtKSB7XG4gICAgdmFyIHI7XG5cbiAgICAvLyBuZWdhdGl2ZSArIHBvc2l0aXZlXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHIgPSB0aGlzLmlzdWIobnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgXj0gMTtcbiAgICAgIHJldHVybiB0aGlzLl9ub3JtU2lnbigpO1xuXG4gICAgLy8gcG9zaXRpdmUgKyBuZWdhdGl2ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICByID0gdGhpcy5pc3ViKG51bSk7XG4gICAgICBudW0ubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHIuX25vcm1TaWduKCk7XG4gICAgfVxuXG4gICAgLy8gYS5sZW5ndGggPiBiLmxlbmd0aFxuICAgIHZhciBhLCBiO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSArIChiLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSByID4+PiAyNjtcbiAgICB9XG4gICAgZm9yICg7IGNhcnJ5ICE9PSAwICYmIGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgICBjYXJyeSA9IHIgPj4+IDI2O1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAvLyBDb3B5IHRoZSByZXN0IG9mIHRoZSB3b3Jkc1xuICAgIH0gZWxzZSBpZiAoYSAhPT0gdGhpcykge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIEFkZCBgbnVtYCB0byBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAobnVtKSB7XG4gICAgdmFyIHJlcztcbiAgICBpZiAobnVtLm5lZ2F0aXZlICE9PSAwICYmIHRoaXMubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXMgPSB0aGlzLnN1YihudW0pO1xuICAgICAgbnVtLm5lZ2F0aXZlIF49IDE7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSBpZiAobnVtLm5lZ2F0aXZlID09PSAwICYmIHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgcmVzID0gbnVtLnN1Yih0aGlzKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGQobnVtKTtcblxuICAgIHJldHVybiBudW0uY2xvbmUoKS5pYWRkKHRoaXMpO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IGBudW1gIGZyb20gYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pc3ViID0gZnVuY3Rpb24gaXN1YiAobnVtKSB7XG4gICAgLy8gdGhpcyAtICgtbnVtKSA9IHRoaXMgKyBudW1cbiAgICBpZiAobnVtLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICBudW0ubmVnYXRpdmUgPSAwO1xuICAgICAgdmFyIHIgPSB0aGlzLmlhZGQobnVtKTtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gci5fbm9ybVNpZ24oKTtcblxuICAgIC8vIC10aGlzIC0gbnVtID0gLSh0aGlzICsgbnVtKVxuICAgIH0gZWxzZSBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlhZGQobnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCBib3RoIG51bWJlcnMgYXJlIHBvc2l0aXZlXG4gICAgdmFyIGNtcCA9IHRoaXMuY21wKG51bSk7XG5cbiAgICAvLyBPcHRpbWl6YXRpb24gLSB6ZXJvaWZ5XG4gICAgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGEgPiBiXG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGNtcCA+IDApIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSAtIChiLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gciA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICBmb3IgKDsgY2FycnkgIT09IDAgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICBjYXJyeSA9IHIgPj4gMjY7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICAvLyBDb3B5IHJlc3Qgb2YgdGhlIHdvcmRzXG4gICAgaWYgKGNhcnJ5ID09PSAwICYmIGkgPCBhLmxlbmd0aCAmJiBhICE9PSB0aGlzKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLmxlbmd0aCwgaSk7XG5cbiAgICBpZiAoYSAhPT0gdGhpcykge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICAvLyBTdWJ0cmFjdCBgbnVtYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIobnVtKTtcbiAgfTtcblxuICBmdW5jdGlvbiBzbWFsbE11bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIG91dC5uZWdhdGl2ZSA9IG51bS5uZWdhdGl2ZSBeIHNlbGYubmVnYXRpdmU7XG4gICAgdmFyIGxlbiA9IChzZWxmLmxlbmd0aCArIG51bS5sZW5ndGgpIHwgMDtcbiAgICBvdXQubGVuZ3RoID0gbGVuO1xuICAgIGxlbiA9IChsZW4gLSAxKSB8IDA7XG5cbiAgICAvLyBQZWVsIG9uZSBpdGVyYXRpb24gKGNvbXBpbGVyIGNhbid0IGRvIGl0LCBiZWNhdXNlIG9mIGNvZGUgY29tcGxleGl0eSlcbiAgICB2YXIgYSA9IHNlbGYud29yZHNbMF0gfCAwO1xuICAgIHZhciBiID0gbnVtLndvcmRzWzBdIHwgMDtcbiAgICB2YXIgciA9IGEgKiBiO1xuXG4gICAgdmFyIGxvID0gciAmIDB4M2ZmZmZmZjtcbiAgICB2YXIgY2FycnkgPSAociAvIDB4NDAwMDAwMCkgfCAwO1xuICAgIG91dC53b3Jkc1swXSA9IGxvO1xuXG4gICAgZm9yICh2YXIgayA9IDE7IGsgPCBsZW47IGsrKykge1xuICAgICAgLy8gU3VtIGFsbCB3b3JkcyB3aXRoIHRoZSBzYW1lIGBpICsgaiA9IGtgIGFuZCBhY2N1bXVsYXRlIGBuY2FycnlgLFxuICAgICAgLy8gbm90ZSB0aGF0IG5jYXJyeSBjb3VsZCBiZSA+PSAweDNmZmZmZmZcbiAgICAgIHZhciBuY2FycnkgPSBjYXJyeSA+Pj4gMjY7XG4gICAgICB2YXIgcndvcmQgPSBjYXJyeSAmIDB4M2ZmZmZmZjtcbiAgICAgIHZhciBtYXhKID0gTWF0aC5taW4oaywgbnVtLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KDAsIGsgLSBzZWxmLmxlbmd0aCArIDEpOyBqIDw9IG1heEo7IGorKykge1xuICAgICAgICB2YXIgaSA9IChrIC0gaikgfCAwO1xuICAgICAgICBhID0gc2VsZi53b3Jkc1tpXSB8IDA7XG4gICAgICAgIGIgPSBudW0ud29yZHNbal0gfCAwO1xuICAgICAgICByID0gYSAqIGIgKyByd29yZDtcbiAgICAgICAgbmNhcnJ5ICs9IChyIC8gMHg0MDAwMDAwKSB8IDA7XG4gICAgICAgIHJ3b3JkID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIG91dC53b3Jkc1trXSA9IHJ3b3JkIHwgMDtcbiAgICAgIGNhcnJ5ID0gbmNhcnJ5IHwgMDtcbiAgICB9XG4gICAgaWYgKGNhcnJ5ICE9PSAwKSB7XG4gICAgICBvdXQud29yZHNba10gPSBjYXJyeSB8IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5sZW5ndGgtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH1cblxuICAvLyBUT0RPKGluZHV0bnkpOiBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBvbWl0IGl0IGZvciB1c2VycyB3aG8gZG9uJ3QgbmVlZFxuICAvLyB0byB3b3JrIHdpdGggMjU2LWJpdCBudW1iZXJzLCBvdGhlcndpc2UgaXQgZ2l2ZXMgMjAlIGltcHJvdmVtZW50IGZvciAyNTYtYml0XG4gIC8vIG11bHRpcGxpY2F0aW9uIChsaWtlIGVsbGlwdGljIHNlY3AyNTZrMSkuXG4gIHZhciBjb21iMTBNdWxUbyA9IGZ1bmN0aW9uIGNvbWIxME11bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIHZhciBhID0gc2VsZi53b3JkcztcbiAgICB2YXIgYiA9IG51bS53b3JkcztcbiAgICB2YXIgbyA9IG91dC53b3JkcztcbiAgICB2YXIgYyA9IDA7XG4gICAgdmFyIGxvO1xuICAgIHZhciBtaWQ7XG4gICAgdmFyIGhpO1xuICAgIHZhciBhMCA9IGFbMF0gfCAwO1xuICAgIHZhciBhbDAgPSBhMCAmIDB4MWZmZjtcbiAgICB2YXIgYWgwID0gYTAgPj4+IDEzO1xuICAgIHZhciBhMSA9IGFbMV0gfCAwO1xuICAgIHZhciBhbDEgPSBhMSAmIDB4MWZmZjtcbiAgICB2YXIgYWgxID0gYTEgPj4+IDEzO1xuICAgIHZhciBhMiA9IGFbMl0gfCAwO1xuICAgIHZhciBhbDIgPSBhMiAmIDB4MWZmZjtcbiAgICB2YXIgYWgyID0gYTIgPj4+IDEzO1xuICAgIHZhciBhMyA9IGFbM10gfCAwO1xuICAgIHZhciBhbDMgPSBhMyAmIDB4MWZmZjtcbiAgICB2YXIgYWgzID0gYTMgPj4+IDEzO1xuICAgIHZhciBhNCA9IGFbNF0gfCAwO1xuICAgIHZhciBhbDQgPSBhNCAmIDB4MWZmZjtcbiAgICB2YXIgYWg0ID0gYTQgPj4+IDEzO1xuICAgIHZhciBhNSA9IGFbNV0gfCAwO1xuICAgIHZhciBhbDUgPSBhNSAmIDB4MWZmZjtcbiAgICB2YXIgYWg1ID0gYTUgPj4+IDEzO1xuICAgIHZhciBhNiA9IGFbNl0gfCAwO1xuICAgIHZhciBhbDYgPSBhNiAmIDB4MWZmZjtcbiAgICB2YXIgYWg2ID0gYTYgPj4+IDEzO1xuICAgIHZhciBhNyA9IGFbN10gfCAwO1xuICAgIHZhciBhbDcgPSBhNyAmIDB4MWZmZjtcbiAgICB2YXIgYWg3ID0gYTcgPj4+IDEzO1xuICAgIHZhciBhOCA9IGFbOF0gfCAwO1xuICAgIHZhciBhbDggPSBhOCAmIDB4MWZmZjtcbiAgICB2YXIgYWg4ID0gYTggPj4+IDEzO1xuICAgIHZhciBhOSA9IGFbOV0gfCAwO1xuICAgIHZhciBhbDkgPSBhOSAmIDB4MWZmZjtcbiAgICB2YXIgYWg5ID0gYTkgPj4+IDEzO1xuICAgIHZhciBiMCA9IGJbMF0gfCAwO1xuICAgIHZhciBibDAgPSBiMCAmIDB4MWZmZjtcbiAgICB2YXIgYmgwID0gYjAgPj4+IDEzO1xuICAgIHZhciBiMSA9IGJbMV0gfCAwO1xuICAgIHZhciBibDEgPSBiMSAmIDB4MWZmZjtcbiAgICB2YXIgYmgxID0gYjEgPj4+IDEzO1xuICAgIHZhciBiMiA9IGJbMl0gfCAwO1xuICAgIHZhciBibDIgPSBiMiAmIDB4MWZmZjtcbiAgICB2YXIgYmgyID0gYjIgPj4+IDEzO1xuICAgIHZhciBiMyA9IGJbM10gfCAwO1xuICAgIHZhciBibDMgPSBiMyAmIDB4MWZmZjtcbiAgICB2YXIgYmgzID0gYjMgPj4+IDEzO1xuICAgIHZhciBiNCA9IGJbNF0gfCAwO1xuICAgIHZhciBibDQgPSBiNCAmIDB4MWZmZjtcbiAgICB2YXIgYmg0ID0gYjQgPj4+IDEzO1xuICAgIHZhciBiNSA9IGJbNV0gfCAwO1xuICAgIHZhciBibDUgPSBiNSAmIDB4MWZmZjtcbiAgICB2YXIgYmg1ID0gYjUgPj4+IDEzO1xuICAgIHZhciBiNiA9IGJbNl0gfCAwO1xuICAgIHZhciBibDYgPSBiNiAmIDB4MWZmZjtcbiAgICB2YXIgYmg2ID0gYjYgPj4+IDEzO1xuICAgIHZhciBiNyA9IGJbN10gfCAwO1xuICAgIHZhciBibDcgPSBiNyAmIDB4MWZmZjtcbiAgICB2YXIgYmg3ID0gYjcgPj4+IDEzO1xuICAgIHZhciBiOCA9IGJbOF0gfCAwO1xuICAgIHZhciBibDggPSBiOCAmIDB4MWZmZjtcbiAgICB2YXIgYmg4ID0gYjggPj4+IDEzO1xuICAgIHZhciBiOSA9IGJbOV0gfCAwO1xuICAgIHZhciBibDkgPSBiOSAmIDB4MWZmZjtcbiAgICB2YXIgYmg5ID0gYjkgPj4+IDEzO1xuXG4gICAgb3V0Lm5lZ2F0aXZlID0gc2VsZi5uZWdhdGl2ZSBeIG51bS5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0gMTk7XG4gICAgLyogayA9IDAgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDAsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMCwgYmgwKTtcbiAgICB2YXIgdzAgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcwID4+PiAyNikpIHwgMDtcbiAgICB3MCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDEsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDEpKSB8IDA7XG4gICAgdmFyIHcxID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MSA+Pj4gMjYpKSB8IDA7XG4gICAgdzEgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAyICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWwyLCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDIsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDIsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMikpIHwgMDtcbiAgICB2YXIgdzIgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcyID4+PiAyNikpIHwgMDtcbiAgICB3MiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDMgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDMsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMywgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMywgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMykpIHwgMDtcbiAgICB2YXIgdzMgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHczID4+PiAyNikpIHwgMDtcbiAgICB3MyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDQgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDQsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNCwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDQpKSB8IDA7XG4gICAgdmFyIHc0ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3NCA+Pj4gMjYpKSB8IDA7XG4gICAgdzQgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA1ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw1LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDUsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDUsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNSkpIHwgMDtcbiAgICB2YXIgdzUgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc1ID4+PiAyNikpIHwgMDtcbiAgICB3NSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDYgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDYsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNiwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNiwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNikpIHwgMDtcbiAgICB2YXIgdzYgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc2ID4+PiAyNikpIHwgMDtcbiAgICB3NiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDcgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDcsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNywgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNywgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDcpKSB8IDA7XG4gICAgdmFyIHc3ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3NyA+Pj4gMjYpKSB8IDA7XG4gICAgdzcgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA4ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw4LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDgsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDgsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoOCkpIHwgMDtcbiAgICB2YXIgdzggPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc4ID4+PiAyNikpIHwgMDtcbiAgICB3OCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDkgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzkgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc5ID4+PiAyNikpIHwgMDtcbiAgICB3OSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEwICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDEpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMSk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsMSkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMSk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEwID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTAgPj4+IDI2KSkgfCAwO1xuICAgIHcxMCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDExICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDIpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMik7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsMikpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMik7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTEgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMSA+Pj4gMjYpKSB8IDA7XG4gICAgdzExICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTIgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMyk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgzKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwzKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgzKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEyID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTIgPj4+IDI2KSkgfCAwO1xuICAgIHcxMiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEzICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDQpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEzID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTMgPj4+IDI2KSkgfCAwO1xuICAgIHcxMyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE0ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDUpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNSk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNSkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNSk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTQgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNCA+Pj4gMjYpKSB8IDA7XG4gICAgdzE0ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTUgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNik7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg2KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw2KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg2KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzE1ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTUgPj4+IDI2KSkgfCAwO1xuICAgIHcxNSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE2ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDcpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNyk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNykpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNyk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzE2ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTYgPj4+IDI2KSkgfCAwO1xuICAgIHcxNiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE3ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDgpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoOCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsOCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoOCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTcgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNyA+Pj4gMjYpKSB8IDA7XG4gICAgdzE3ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTggKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsOSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg5KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw5KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg5KTtcbiAgICB2YXIgdzE4ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTggPj4+IDI2KSkgfCAwO1xuICAgIHcxOCAmPSAweDNmZmZmZmY7XG4gICAgb1swXSA9IHcwO1xuICAgIG9bMV0gPSB3MTtcbiAgICBvWzJdID0gdzI7XG4gICAgb1szXSA9IHczO1xuICAgIG9bNF0gPSB3NDtcbiAgICBvWzVdID0gdzU7XG4gICAgb1s2XSA9IHc2O1xuICAgIG9bN10gPSB3NztcbiAgICBvWzhdID0gdzg7XG4gICAgb1s5XSA9IHc5O1xuICAgIG9bMTBdID0gdzEwO1xuICAgIG9bMTFdID0gdzExO1xuICAgIG9bMTJdID0gdzEyO1xuICAgIG9bMTNdID0gdzEzO1xuICAgIG9bMTRdID0gdzE0O1xuICAgIG9bMTVdID0gdzE1O1xuICAgIG9bMTZdID0gdzE2O1xuICAgIG9bMTddID0gdzE3O1xuICAgIG9bMThdID0gdzE4O1xuICAgIGlmIChjICE9PSAwKSB7XG4gICAgICBvWzE5XSA9IGM7XG4gICAgICBvdXQubGVuZ3RoKys7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH07XG5cbiAgLy8gUG9seWZpbGwgY29tYlxuICBpZiAoIU1hdGguaW11bCkge1xuICAgIGNvbWIxME11bFRvID0gc21hbGxNdWxUbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpZ011bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIG91dC5uZWdhdGl2ZSA9IG51bS5uZWdhdGl2ZSBeIHNlbGYubmVnYXRpdmU7XG4gICAgb3V0Lmxlbmd0aCA9IHNlbGYubGVuZ3RoICsgbnVtLmxlbmd0aDtcblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgdmFyIGhuY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgb3V0Lmxlbmd0aCAtIDE7IGsrKykge1xuICAgICAgLy8gU3VtIGFsbCB3b3JkcyB3aXRoIHRoZSBzYW1lIGBpICsgaiA9IGtgIGFuZCBhY2N1bXVsYXRlIGBuY2FycnlgLFxuICAgICAgLy8gbm90ZSB0aGF0IG5jYXJyeSBjb3VsZCBiZSA+PSAweDNmZmZmZmZcbiAgICAgIHZhciBuY2FycnkgPSBobmNhcnJ5O1xuICAgICAgaG5jYXJyeSA9IDA7XG4gICAgICB2YXIgcndvcmQgPSBjYXJyeSAmIDB4M2ZmZmZmZjtcbiAgICAgIHZhciBtYXhKID0gTWF0aC5taW4oaywgbnVtLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KDAsIGsgLSBzZWxmLmxlbmd0aCArIDEpOyBqIDw9IG1heEo7IGorKykge1xuICAgICAgICB2YXIgaSA9IGsgLSBqO1xuICAgICAgICB2YXIgYSA9IHNlbGYud29yZHNbaV0gfCAwO1xuICAgICAgICB2YXIgYiA9IG51bS53b3Jkc1tqXSB8IDA7XG4gICAgICAgIHZhciByID0gYSAqIGI7XG5cbiAgICAgICAgdmFyIGxvID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgICAgbmNhcnJ5ID0gKG5jYXJyeSArICgociAvIDB4NDAwMDAwMCkgfCAwKSkgfCAwO1xuICAgICAgICBsbyA9IChsbyArIHJ3b3JkKSB8IDA7XG4gICAgICAgIHJ3b3JkID0gbG8gJiAweDNmZmZmZmY7XG4gICAgICAgIG5jYXJyeSA9IChuY2FycnkgKyAobG8gPj4+IDI2KSkgfCAwO1xuXG4gICAgICAgIGhuY2FycnkgKz0gbmNhcnJ5ID4+PiAyNjtcbiAgICAgICAgbmNhcnJ5ICY9IDB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIG91dC53b3Jkc1trXSA9IHJ3b3JkO1xuICAgICAgY2FycnkgPSBuY2Fycnk7XG4gICAgICBuY2FycnkgPSBobmNhcnJ5O1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG91dC53b3Jkc1trXSA9IGNhcnJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQubGVuZ3RoLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dC5zdHJpcCgpO1xuICB9XG5cbiAgZnVuY3Rpb24ganVtYm9NdWxUbyAoc2VsZiwgbnVtLCBvdXQpIHtcbiAgICB2YXIgZmZ0bSA9IG5ldyBGRlRNKCk7XG4gICAgcmV0dXJuIGZmdG0ubXVscChzZWxmLCBudW0sIG91dCk7XG4gIH1cblxuICBCTi5wcm90b3R5cGUubXVsVG8gPSBmdW5jdGlvbiBtdWxUbyAobnVtLCBvdXQpIHtcbiAgICB2YXIgcmVzO1xuICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aCArIG51bS5sZW5ndGg7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxMCAmJiBudW0ubGVuZ3RoID09PSAxMCkge1xuICAgICAgcmVzID0gY29tYjEwTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAobGVuIDwgNjMpIHtcbiAgICAgIHJlcyA9IHNtYWxsTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAobGVuIDwgMTAyNCkge1xuICAgICAgcmVzID0gYmlnTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBqdW1ib011bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIENvb2xleS1UdWtleSBhbGdvcml0aG0gZm9yIEZGVFxuICAvLyBzbGlnaHRseSByZXZpc2l0ZWQgdG8gcmVseSBvbiBsb29waW5nIGluc3RlYWQgb2YgcmVjdXJzaW9uXG5cbiAgZnVuY3Rpb24gRkZUTSAoeCwgeSkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfVxuXG4gIEZGVE0ucHJvdG90eXBlLm1ha2VSQlQgPSBmdW5jdGlvbiBtYWtlUkJUIChOKSB7XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIGwgPSBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyhOKSAtIDE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIHRbaV0gPSB0aGlzLnJldkJpbihpLCBsLCBOKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGJpbmFyeS1yZXZlcnNlZCByZXByZXNlbnRhdGlvbiBvZiBgeGBcbiAgRkZUTS5wcm90b3R5cGUucmV2QmluID0gZnVuY3Rpb24gcmV2QmluICh4LCBsLCBOKSB7XG4gICAgaWYgKHggPT09IDAgfHwgeCA9PT0gTiAtIDEpIHJldHVybiB4O1xuXG4gICAgdmFyIHJiID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgcmIgfD0gKHggJiAxKSA8PCAobCAtIGkgLSAxKTtcbiAgICAgIHggPj49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJiO1xuICB9O1xuXG4gIC8vIFBlcmZvcm1zIFwidHdlZWRsaW5nXCIgcGhhc2UsIHRoZXJlZm9yZSAnZW11bGF0aW5nJ1xuICAvLyBiZWhhdmlvdXIgb2YgdGhlIHJlY3Vyc2l2ZSBhbGdvcml0aG1cbiAgRkZUTS5wcm90b3R5cGUucGVybXV0ZSA9IGZ1bmN0aW9uIHBlcm11dGUgKHJidCwgcndzLCBpd3MsIHJ0d3MsIGl0d3MsIE4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgcnR3c1tpXSA9IHJ3c1tyYnRbaV1dO1xuICAgICAgaXR3c1tpXSA9IGl3c1tyYnRbaV1dO1xuICAgIH1cbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiB0cmFuc2Zvcm0gKHJ3cywgaXdzLCBydHdzLCBpdHdzLCBOLCByYnQpIHtcbiAgICB0aGlzLnBlcm11dGUocmJ0LCByd3MsIGl3cywgcnR3cywgaXR3cywgTik7XG5cbiAgICBmb3IgKHZhciBzID0gMTsgcyA8IE47IHMgPDw9IDEpIHtcbiAgICAgIHZhciBsID0gcyA8PCAxO1xuXG4gICAgICB2YXIgcnR3ZGYgPSBNYXRoLmNvcygyICogTWF0aC5QSSAvIGwpO1xuICAgICAgdmFyIGl0d2RmID0gTWF0aC5zaW4oMiAqIE1hdGguUEkgLyBsKTtcblxuICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBOOyBwICs9IGwpIHtcbiAgICAgICAgdmFyIHJ0d2RmXyA9IHJ0d2RmO1xuICAgICAgICB2YXIgaXR3ZGZfID0gaXR3ZGY7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzOyBqKyspIHtcbiAgICAgICAgICB2YXIgcmUgPSBydHdzW3AgKyBqXTtcbiAgICAgICAgICB2YXIgaWUgPSBpdHdzW3AgKyBqXTtcblxuICAgICAgICAgIHZhciBybyA9IHJ0d3NbcCArIGogKyBzXTtcbiAgICAgICAgICB2YXIgaW8gPSBpdHdzW3AgKyBqICsgc107XG5cbiAgICAgICAgICB2YXIgcnggPSBydHdkZl8gKiBybyAtIGl0d2RmXyAqIGlvO1xuXG4gICAgICAgICAgaW8gPSBydHdkZl8gKiBpbyArIGl0d2RmXyAqIHJvO1xuICAgICAgICAgIHJvID0gcng7XG5cbiAgICAgICAgICBydHdzW3AgKyBqXSA9IHJlICsgcm87XG4gICAgICAgICAgaXR3c1twICsgal0gPSBpZSArIGlvO1xuXG4gICAgICAgICAgcnR3c1twICsgaiArIHNdID0gcmUgLSBybztcbiAgICAgICAgICBpdHdzW3AgKyBqICsgc10gPSBpZSAtIGlvO1xuXG4gICAgICAgICAgLyoganNoaW50IG1heGRlcHRoIDogZmFsc2UgKi9cbiAgICAgICAgICBpZiAoaiAhPT0gbCkge1xuICAgICAgICAgICAgcnggPSBydHdkZiAqIHJ0d2RmXyAtIGl0d2RmICogaXR3ZGZfO1xuXG4gICAgICAgICAgICBpdHdkZl8gPSBydHdkZiAqIGl0d2RmXyArIGl0d2RmICogcnR3ZGZfO1xuICAgICAgICAgICAgcnR3ZGZfID0gcng7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmd1ZXNzTGVuMTNiID0gZnVuY3Rpb24gZ3Vlc3NMZW4xM2IgKG4sIG0pIHtcbiAgICB2YXIgTiA9IE1hdGgubWF4KG0sIG4pIHwgMTtcbiAgICB2YXIgb2RkID0gTiAmIDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoTiA9IE4gLyAyIHwgMDsgTjsgTiA9IE4gPj4+IDEpIHtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gMSA8PCBpICsgMSArIG9kZDtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5jb25qdWdhdGUgPSBmdW5jdGlvbiBjb25qdWdhdGUgKHJ3cywgaXdzLCBOKSB7XG4gICAgaWYgKE4gPD0gMSkgcmV0dXJuO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOIC8gMjsgaSsrKSB7XG4gICAgICB2YXIgdCA9IHJ3c1tpXTtcblxuICAgICAgcndzW2ldID0gcndzW04gLSBpIC0gMV07XG4gICAgICByd3NbTiAtIGkgLSAxXSA9IHQ7XG5cbiAgICAgIHQgPSBpd3NbaV07XG5cbiAgICAgIGl3c1tpXSA9IC1pd3NbTiAtIGkgLSAxXTtcbiAgICAgIGl3c1tOIC0gaSAtIDFdID0gLXQ7XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLm5vcm1hbGl6ZTEzYiA9IGZ1bmN0aW9uIG5vcm1hbGl6ZTEzYiAod3MsIE4pIHtcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTiAvIDI7IGkrKykge1xuICAgICAgdmFyIHcgPSBNYXRoLnJvdW5kKHdzWzIgKiBpICsgMV0gLyBOKSAqIDB4MjAwMCArXG4gICAgICAgIE1hdGgucm91bmQod3NbMiAqIGldIC8gTikgK1xuICAgICAgICBjYXJyeTtcblxuICAgICAgd3NbaV0gPSB3ICYgMHgzZmZmZmZmO1xuXG4gICAgICBpZiAodyA8IDB4NDAwMDAwMCkge1xuICAgICAgICBjYXJyeSA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXJyeSA9IHcgLyAweDQwMDAwMDAgfCAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3cztcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5jb252ZXJ0MTNiID0gZnVuY3Rpb24gY29udmVydDEzYiAod3MsIGxlbiwgcndzLCBOKSB7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjYXJyeSA9IGNhcnJ5ICsgKHdzW2ldIHwgMCk7XG5cbiAgICAgIHJ3c1syICogaV0gPSBjYXJyeSAmIDB4MWZmZjsgY2FycnkgPSBjYXJyeSA+Pj4gMTM7XG4gICAgICByd3NbMiAqIGkgKyAxXSA9IGNhcnJ5ICYgMHgxZmZmOyBjYXJyeSA9IGNhcnJ5ID4+PiAxMztcbiAgICB9XG5cbiAgICAvLyBQYWQgd2l0aCB6ZXJvZXNcbiAgICBmb3IgKGkgPSAyICogbGVuOyBpIDwgTjsgKytpKSB7XG4gICAgICByd3NbaV0gPSAwO1xuICAgIH1cblxuICAgIGFzc2VydChjYXJyeSA9PT0gMCk7XG4gICAgYXNzZXJ0KChjYXJyeSAmIH4weDFmZmYpID09PSAwKTtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5zdHViID0gZnVuY3Rpb24gc3R1YiAoTikge1xuICAgIHZhciBwaCA9IG5ldyBBcnJheShOKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgcGhbaV0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBwaDtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5tdWxwID0gZnVuY3Rpb24gbXVscCAoeCwgeSwgb3V0KSB7XG4gICAgdmFyIE4gPSAyICogdGhpcy5ndWVzc0xlbjEzYih4Lmxlbmd0aCwgeS5sZW5ndGgpO1xuXG4gICAgdmFyIHJidCA9IHRoaXMubWFrZVJCVChOKTtcblxuICAgIHZhciBfID0gdGhpcy5zdHViKE4pO1xuXG4gICAgdmFyIHJ3cyA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgcndzdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgaXdzdCA9IG5ldyBBcnJheShOKTtcblxuICAgIHZhciBucndzID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBucndzdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgbml3c3QgPSBuZXcgQXJyYXkoTik7XG5cbiAgICB2YXIgcm13cyA9IG91dC53b3JkcztcbiAgICBybXdzLmxlbmd0aCA9IE47XG5cbiAgICB0aGlzLmNvbnZlcnQxM2IoeC53b3JkcywgeC5sZW5ndGgsIHJ3cywgTik7XG4gICAgdGhpcy5jb252ZXJ0MTNiKHkud29yZHMsIHkubGVuZ3RoLCBucndzLCBOKTtcblxuICAgIHRoaXMudHJhbnNmb3JtKHJ3cywgXywgcndzdCwgaXdzdCwgTiwgcmJ0KTtcbiAgICB0aGlzLnRyYW5zZm9ybShucndzLCBfLCBucndzdCwgbml3c3QsIE4sIHJidCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdmFyIHJ4ID0gcndzdFtpXSAqIG5yd3N0W2ldIC0gaXdzdFtpXSAqIG5pd3N0W2ldO1xuICAgICAgaXdzdFtpXSA9IHJ3c3RbaV0gKiBuaXdzdFtpXSArIGl3c3RbaV0gKiBucndzdFtpXTtcbiAgICAgIHJ3c3RbaV0gPSByeDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmp1Z2F0ZShyd3N0LCBpd3N0LCBOKTtcbiAgICB0aGlzLnRyYW5zZm9ybShyd3N0LCBpd3N0LCBybXdzLCBfLCBOLCByYnQpO1xuICAgIHRoaXMuY29uanVnYXRlKHJtd3MsIF8sIE4pO1xuICAgIHRoaXMubm9ybWFsaXplMTNiKHJtd3MsIE4pO1xuXG4gICAgb3V0Lm5lZ2F0aXZlID0geC5uZWdhdGl2ZSBeIHkubmVnYXRpdmU7XG4gICAgb3V0Lmxlbmd0aCA9IHgubGVuZ3RoICsgeS5sZW5ndGg7XG4gICAgcmV0dXJuIG91dC5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIE11bHRpcGx5IGB0aGlzYCBieSBgbnVtYFxuICBCTi5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChudW0pIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJOKG51bGwpO1xuICAgIG91dC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCArIG51bS5sZW5ndGgpO1xuICAgIHJldHVybiB0aGlzLm11bFRvKG51bSwgb3V0KTtcbiAgfTtcblxuICAvLyBNdWx0aXBseSBlbXBsb3lpbmcgRkZUXG4gIEJOLnByb3RvdHlwZS5tdWxmID0gZnVuY3Rpb24gbXVsZiAobnVtKSB7XG4gICAgdmFyIG91dCA9IG5ldyBCTihudWxsKTtcbiAgICBvdXQud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGggKyBudW0ubGVuZ3RoKTtcbiAgICByZXR1cm4ganVtYm9NdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gIH07XG5cbiAgLy8gSW4tcGxhY2UgTXVsdGlwbGljYXRpb25cbiAgQk4ucHJvdG90eXBlLmltdWwgPSBmdW5jdGlvbiBpbXVsIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKG51bSwgdGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmltdWxuID0gZnVuY3Rpb24gaW11bG4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG5cbiAgICAvLyBDYXJyeVxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9ICh0aGlzLndvcmRzW2ldIHwgMCkgKiBudW07XG4gICAgICB2YXIgbG8gPSAodyAmIDB4M2ZmZmZmZikgKyAoY2FycnkgJiAweDNmZmZmZmYpO1xuICAgICAgY2FycnkgPj49IDI2O1xuICAgICAgY2FycnkgKz0gKHcgLyAweDQwMDAwMDApIHwgMDtcbiAgICAgIC8vIE5PVEU6IGxvIGlzIDI3Yml0IG1heGltdW1cbiAgICAgIGNhcnJ5ICs9IGxvID4+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBjYXJyeTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm11bG4gPSBmdW5jdGlvbiBtdWxuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKG51bSk7XG4gIH07XG5cbiAgLy8gYHRoaXNgICogYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zcXIgPSBmdW5jdGlvbiBzcXIgKCkge1xuICAgIHJldHVybiB0aGlzLm11bCh0aGlzKTtcbiAgfTtcblxuICAvLyBgdGhpc2AgKiBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlzcXIgPSBmdW5jdGlvbiBpc3FyICgpIHtcbiAgICByZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSk7XG4gIH07XG5cbiAgLy8gTWF0aC5wb3coYHRoaXNgLCBgbnVtYClcbiAgQk4ucHJvdG90eXBlLnBvdyA9IGZ1bmN0aW9uIHBvdyAobnVtKSB7XG4gICAgdmFyIHcgPSB0b0JpdEFycmF5KG51bSk7XG4gICAgaWYgKHcubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IEJOKDEpO1xuXG4gICAgLy8gU2tpcCBsZWFkaW5nIHplcm9lc1xuICAgIHZhciByZXMgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdy5sZW5ndGg7IGkrKywgcmVzID0gcmVzLnNxcigpKSB7XG4gICAgICBpZiAod1tpXSAhPT0gMCkgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKCsraSA8IHcubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBxID0gcmVzLnNxcigpOyBpIDwgdy5sZW5ndGg7IGkrKywgcSA9IHEuc3FyKCkpIHtcbiAgICAgICAgaWYgKHdbaV0gPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlcyA9IHJlcy5tdWwocSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBTaGlmdC1sZWZ0IGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pdXNobG4gPSBmdW5jdGlvbiBpdXNobG4gKGJpdHMpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdHMgPT09ICdudW1iZXInICYmIGJpdHMgPj0gMCk7XG4gICAgdmFyIHIgPSBiaXRzICUgMjY7XG4gICAgdmFyIHMgPSAoYml0cyAtIHIpIC8gMjY7XG4gICAgdmFyIGNhcnJ5TWFzayA9ICgweDNmZmZmZmYgPj4+ICgyNiAtIHIpKSA8PCAoMjYgLSByKTtcbiAgICB2YXIgaTtcblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICB2YXIgY2FycnkgPSAwO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbmV3Q2FycnkgPSB0aGlzLndvcmRzW2ldICYgY2FycnlNYXNrO1xuICAgICAgICB2YXIgYyA9ICgodGhpcy53b3Jkc1tpXSB8IDApIC0gbmV3Q2FycnkpIDw8IHI7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBjIHwgY2Fycnk7XG4gICAgICAgIGNhcnJ5ID0gbmV3Q2FycnkgPj4+ICgyNiAtIHIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FycnkpIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgICB0aGlzLmxlbmd0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzICE9PSAwKSB7XG4gICAgICBmb3IgKGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHRoaXMud29yZHNbaSArIHNdID0gdGhpcy53b3Jkc1tpXTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sZW5ndGggKz0gcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc2hsbiA9IGZ1bmN0aW9uIGlzaGxuIChiaXRzKSB7XG4gICAgLy8gVE9ETyhpbmR1dG55KTogaW1wbGVtZW50IG1lXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1c2hsbihiaXRzKTtcbiAgfTtcblxuICAvLyBTaGlmdC1yaWdodCBpbi1wbGFjZVxuICAvLyBOT1RFOiBgaGludGAgaXMgYSBsb3dlc3QgYml0IGJlZm9yZSB0cmFpbGluZyB6ZXJvZXNcbiAgLy8gTk9URTogaWYgYGV4dGVuZGVkYCBpcyBwcmVzZW50IC0gaXQgd2lsbCBiZSBmaWxsZWQgd2l0aCBkZXN0cm95ZWQgYml0c1xuICBCTi5wcm90b3R5cGUuaXVzaHJuID0gZnVuY3Rpb24gaXVzaHJuIChiaXRzLCBoaW50LCBleHRlbmRlZCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgaDtcbiAgICBpZiAoaGludCkge1xuICAgICAgaCA9IChoaW50IC0gKGhpbnQgJSAyNikpIC8gMjY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGggPSAwO1xuICAgIH1cblxuICAgIHZhciByID0gYml0cyAlIDI2O1xuICAgIHZhciBzID0gTWF0aC5taW4oKGJpdHMgLSByKSAvIDI2LCB0aGlzLmxlbmd0aCk7XG4gICAgdmFyIG1hc2sgPSAweDNmZmZmZmYgXiAoKDB4M2ZmZmZmZiA+Pj4gcikgPDwgcik7XG4gICAgdmFyIG1hc2tlZFdvcmRzID0gZXh0ZW5kZWQ7XG5cbiAgICBoIC09IHM7XG4gICAgaCA9IE1hdGgubWF4KDAsIGgpO1xuXG4gICAgLy8gRXh0ZW5kZWQgbW9kZSwgY29weSBtYXNrZWQgcGFydFxuICAgIGlmIChtYXNrZWRXb3Jkcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICAgICAgbWFza2VkV29yZHMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldO1xuICAgICAgfVxuICAgICAgbWFza2VkV29yZHMubGVuZ3RoID0gcztcbiAgICB9XG5cbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgLy8gTm8tb3AsIHdlIHNob3VsZCBub3QgbW92ZSBhbnl0aGluZyBhdCBhbGxcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID4gcykge1xuICAgICAgdGhpcy5sZW5ndGggLT0gcztcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2kgKyBzXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53b3Jkc1swXSA9IDA7XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMCAmJiAoY2FycnkgIT09IDAgfHwgaSA+PSBoKTsgaS0tKSB7XG4gICAgICB2YXIgd29yZCA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IChjYXJyeSA8PCAoMjYgLSByKSkgfCAod29yZCA+Pj4gcik7XG4gICAgICBjYXJyeSA9IHdvcmQgJiBtYXNrO1xuICAgIH1cblxuICAgIC8vIFB1c2ggY2FycmllZCBiaXRzIGFzIGEgbWFza1xuICAgIGlmIChtYXNrZWRXb3JkcyAmJiBjYXJyeSAhPT0gMCkge1xuICAgICAgbWFza2VkV29yZHMud29yZHNbbWFza2VkV29yZHMubGVuZ3RoKytdID0gY2Fycnk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc2hybiA9IGZ1bmN0aW9uIGlzaHJuIChiaXRzLCBoaW50LCBleHRlbmRlZCkge1xuICAgIC8vIFRPRE8oaW5kdXRueSk6IGltcGxlbWVudCBtZVxuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdXNocm4oYml0cywgaGludCwgZXh0ZW5kZWQpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LWxlZnRcbiAgQk4ucHJvdG90eXBlLnNobG4gPSBmdW5jdGlvbiBzaGxuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiaXRzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXNobG4gPSBmdW5jdGlvbiB1c2hsbiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LXJpZ2h0XG4gIEJOLnByb3RvdHlwZS5zaHJuID0gZnVuY3Rpb24gc2hybiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYml0cyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVzaHJuID0gZnVuY3Rpb24gdXNocm4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiaXRzKTtcbiAgfTtcblxuICAvLyBUZXN0IGlmIG4gYml0IGlzIHNldFxuICBCTi5wcm90b3R5cGUudGVzdG4gPSBmdW5jdGlvbiB0ZXN0biAoYml0KSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXQgPT09ICdudW1iZXInICYmIGJpdCA+PSAwKTtcbiAgICB2YXIgciA9IGJpdCAlIDI2O1xuICAgIHZhciBzID0gKGJpdCAtIHIpIC8gMjY7XG4gICAgdmFyIHEgPSAxIDw8IHI7XG5cbiAgICAvLyBGYXN0IGNhc2U6IGJpdCBpcyBtdWNoIGhpZ2hlciB0aGFuIGFsbCBleGlzdGluZyB3b3Jkc1xuICAgIGlmICh0aGlzLmxlbmd0aCA8PSBzKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBiaXQgYW5kIHJldHVyblxuICAgIHZhciB3ID0gdGhpcy53b3Jkc1tzXTtcblxuICAgIHJldHVybiAhISh3ICYgcSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG9ubHkgbG93ZXJzIGJpdHMgb2YgbnVtYmVyIChpbi1wbGFjZSlcbiAgQk4ucHJvdG90eXBlLmltYXNrbiA9IGZ1bmN0aW9uIGltYXNrbiAoYml0cykge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgciA9IGJpdHMgJSAyNjtcbiAgICB2YXIgcyA9IChiaXRzIC0gcikgLyAyNjtcblxuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwLCAnaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzJyk7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPD0gcykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHIgIT09IDApIHtcbiAgICAgIHMrKztcbiAgICB9XG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1pbihzLCB0aGlzLmxlbmd0aCk7XG5cbiAgICBpZiAociAhPT0gMCkge1xuICAgICAgdmFyIG1hc2sgPSAweDNmZmZmZmYgXiAoKDB4M2ZmZmZmZiA+Pj4gcikgPDwgcik7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV0gJj0gbWFzaztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIFJldHVybiBvbmx5IGxvd2VycyBiaXRzIG9mIG51bWJlclxuICBCTi5wcm90b3R5cGUubWFza24gPSBmdW5jdGlvbiBtYXNrbiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGJpdHMpO1xuICB9O1xuXG4gIC8vIEFkZCBwbGFpbiBudW1iZXIgYG51bWAgdG8gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5pYWRkbiA9IGZ1bmN0aW9uIGlhZGRuIChudW0pIHtcbiAgICBhc3NlcnQodHlwZW9mIG51bSA9PT0gJ251bWJlcicpO1xuICAgIGFzc2VydChudW0gPCAweDQwMDAwMDApO1xuICAgIGlmIChudW0gPCAwKSByZXR1cm4gdGhpcy5pc3VibigtbnVtKTtcblxuICAgIC8vIFBvc3NpYmxlIHNpZ24gY2hhbmdlXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiAodGhpcy53b3Jkc1swXSB8IDApIDwgbnVtKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gPSBudW0gLSAodGhpcy53b3Jkc1swXSB8IDApO1xuICAgICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgdGhpcy5pc3VibihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aG91dCBjaGVja3NcbiAgICByZXR1cm4gdGhpcy5faWFkZG4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2lhZGRuID0gZnVuY3Rpb24gX2lhZGRuIChudW0pIHtcbiAgICB0aGlzLndvcmRzWzBdICs9IG51bTtcblxuICAgIC8vIENhcnJ5XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCAmJiB0aGlzLndvcmRzW2ldID49IDB4NDAwMDAwMDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldIC09IDB4NDAwMDAwMDtcbiAgICAgIGlmIChpID09PSB0aGlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgMV0gPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgMV0rKztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1heCh0aGlzLmxlbmd0aCwgaSArIDEpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gU3VidHJhY3QgcGxhaW4gbnVtYmVyIGBudW1gIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5pc3VibiA9IGZ1bmN0aW9uIGlzdWJuIChudW0pIHtcbiAgICBhc3NlcnQodHlwZW9mIG51bSA9PT0gJ251bWJlcicpO1xuICAgIGFzc2VydChudW0gPCAweDQwMDAwMDApO1xuICAgIGlmIChudW0gPCAwKSByZXR1cm4gdGhpcy5pYWRkbigtbnVtKTtcblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMuaWFkZG4obnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy53b3Jkc1swXSAtPSBudW07XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEgJiYgdGhpcy53b3Jkc1swXSA8IDApIHtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAtdGhpcy53b3Jkc1swXTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYXJyeVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aCAmJiB0aGlzLndvcmRzW2ldIDwgMDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gKz0gMHg0MDAwMDAwO1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSAtPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmFkZG4gPSBmdW5jdGlvbiBhZGRuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnN1Ym4gPSBmdW5jdGlvbiBzdWJuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlhYnMgPSBmdW5jdGlvbiBpYWJzICgpIHtcbiAgICB0aGlzLm5lZ2F0aXZlID0gMDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5hYnMgPSBmdW5jdGlvbiBhYnMgKCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaWFicygpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faXNobG5zdWJtdWwgPSBmdW5jdGlvbiBfaXNobG5zdWJtdWwgKG51bSwgbXVsLCBzaGlmdCkge1xuICAgIHZhciBsZW4gPSBudW0ubGVuZ3RoICsgc2hpZnQ7XG4gICAgdmFyIGk7XG5cbiAgICB0aGlzLl9leHBhbmQobGVuKTtcblxuICAgIHZhciB3O1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdyA9ICh0aGlzLndvcmRzW2kgKyBzaGlmdF0gfCAwKSArIGNhcnJ5O1xuICAgICAgdmFyIHJpZ2h0ID0gKG51bS53b3Jkc1tpXSB8IDApICogbXVsO1xuICAgICAgdyAtPSByaWdodCAmIDB4M2ZmZmZmZjtcbiAgICAgIGNhcnJ5ID0gKHcgPj4gMjYpIC0gKChyaWdodCAvIDB4NDAwMDAwMCkgfCAwKTtcbiAgICAgIHRoaXMud29yZHNbaSArIHNoaWZ0XSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIGZvciAoOyBpIDwgdGhpcy5sZW5ndGggLSBzaGlmdDsgaSsrKSB7XG4gICAgICB3ID0gKHRoaXMud29yZHNbaSArIHNoaWZ0XSB8IDApICsgY2Fycnk7XG4gICAgICBjYXJyeSA9IHcgPj4gMjY7XG4gICAgICB0aGlzLndvcmRzW2kgKyBzaGlmdF0gPSB3ICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIGlmIChjYXJyeSA9PT0gMCkgcmV0dXJuIHRoaXMuc3RyaXAoKTtcblxuICAgIC8vIFN1YnRyYWN0aW9uIG92ZXJmbG93XG4gICAgYXNzZXJ0KGNhcnJ5ID09PSAtMSk7XG4gICAgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gLSh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB3ICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICB0aGlzLm5lZ2F0aXZlID0gMTtcblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl93b3JkRGl2ID0gZnVuY3Rpb24gX3dvcmREaXYgKG51bSwgbW9kZSkge1xuICAgIHZhciBzaGlmdCA9IHRoaXMubGVuZ3RoIC0gbnVtLmxlbmd0aDtcblxuICAgIHZhciBhID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBiID0gbnVtO1xuXG4gICAgLy8gTm9ybWFsaXplXG4gICAgdmFyIGJoaSA9IGIud29yZHNbYi5sZW5ndGggLSAxXSB8IDA7XG4gICAgdmFyIGJoaUJpdHMgPSB0aGlzLl9jb3VudEJpdHMoYmhpKTtcbiAgICBzaGlmdCA9IDI2IC0gYmhpQml0cztcbiAgICBpZiAoc2hpZnQgIT09IDApIHtcbiAgICAgIGIgPSBiLnVzaGxuKHNoaWZ0KTtcbiAgICAgIGEuaXVzaGxuKHNoaWZ0KTtcbiAgICAgIGJoaSA9IGIud29yZHNbYi5sZW5ndGggLSAxXSB8IDA7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBxdW90aWVudFxuICAgIHZhciBtID0gYS5sZW5ndGggLSBiLmxlbmd0aDtcbiAgICB2YXIgcTtcblxuICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgcSA9IG5ldyBCTihudWxsKTtcbiAgICAgIHEubGVuZ3RoID0gbSArIDE7XG4gICAgICBxLndvcmRzID0gbmV3IEFycmF5KHEubGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcS5sZW5ndGg7IGkrKykge1xuICAgICAgICBxLndvcmRzW2ldID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGlmZiA9IGEuY2xvbmUoKS5faXNobG5zdWJtdWwoYiwgMSwgbSk7XG4gICAgaWYgKGRpZmYubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIGEgPSBkaWZmO1xuICAgICAgaWYgKHEpIHtcbiAgICAgICAgcS53b3Jkc1ttXSA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IG0gLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgdmFyIHFqID0gKGEud29yZHNbYi5sZW5ndGggKyBqXSB8IDApICogMHg0MDAwMDAwICtcbiAgICAgICAgKGEud29yZHNbYi5sZW5ndGggKyBqIC0gMV0gfCAwKTtcblxuICAgICAgLy8gTk9URTogKHFqIC8gYmhpKSBpcyAoMHgzZmZmZmZmICogMHg0MDAwMDAwICsgMHgzZmZmZmZmKSAvIDB4MjAwMDAwMCBtYXhcbiAgICAgIC8vICgweDdmZmZmZmYpXG4gICAgICBxaiA9IE1hdGgubWluKChxaiAvIGJoaSkgfCAwLCAweDNmZmZmZmYpO1xuXG4gICAgICBhLl9pc2hsbnN1Ym11bChiLCBxaiwgaik7XG4gICAgICB3aGlsZSAoYS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBxai0tO1xuICAgICAgICBhLm5lZ2F0aXZlID0gMDtcbiAgICAgICAgYS5faXNobG5zdWJtdWwoYiwgMSwgaik7XG4gICAgICAgIGlmICghYS5pc1plcm8oKSkge1xuICAgICAgICAgIGEubmVnYXRpdmUgXj0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHEpIHtcbiAgICAgICAgcS53b3Jkc1tqXSA9IHFqO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocSkge1xuICAgICAgcS5zdHJpcCgpO1xuICAgIH1cbiAgICBhLnN0cmlwKCk7XG5cbiAgICAvLyBEZW5vcm1hbGl6ZVxuICAgIGlmIChtb2RlICE9PSAnZGl2JyAmJiBzaGlmdCAhPT0gMCkge1xuICAgICAgYS5pdXNocm4oc2hpZnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaXY6IHEgfHwgbnVsbCxcbiAgICAgIG1vZDogYVxuICAgIH07XG4gIH07XG5cbiAgLy8gTk9URTogMSkgYG1vZGVgIGNhbiBiZSBzZXQgdG8gYG1vZGAgdG8gcmVxdWVzdCBtb2Qgb25seSxcbiAgLy8gICAgICAgdG8gYGRpdmAgdG8gcmVxdWVzdCBkaXYgb25seSwgb3IgYmUgYWJzZW50IHRvXG4gIC8vICAgICAgIHJlcXVlc3QgYm90aCBkaXYgJiBtb2RcbiAgLy8gICAgICAgMikgYHBvc2l0aXZlYCBpcyB0cnVlIGlmIHVuc2lnbmVkIG1vZCBpcyByZXF1ZXN0ZWRcbiAgQk4ucHJvdG90eXBlLmRpdm1vZCA9IGZ1bmN0aW9uIGRpdm1vZCAobnVtLCBtb2RlLCBwb3NpdGl2ZSkge1xuICAgIGFzc2VydCghbnVtLmlzWmVybygpKTtcblxuICAgIGlmICh0aGlzLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IG5ldyBCTigwKSxcbiAgICAgICAgbW9kOiBuZXcgQk4oMClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRpdiwgbW9kLCByZXM7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICByZXMgPSB0aGlzLm5lZygpLmRpdm1vZChudW0sIG1vZGUpO1xuXG4gICAgICBpZiAobW9kZSAhPT0gJ21vZCcpIHtcbiAgICAgICAgZGl2ID0gcmVzLmRpdi5uZWcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaWFkZChudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogZGl2LFxuICAgICAgICBtb2Q6IG1vZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMuZGl2bW9kKG51bS5uZWcoKSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgICBkaXYgPSByZXMuZGl2Lm5lZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IGRpdixcbiAgICAgICAgbW9kOiByZXMubW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgodGhpcy5uZWdhdGl2ZSAmIG51bS5uZWdhdGl2ZSkgIT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMubmVnKCkuZGl2bW9kKG51bS5uZWcoKSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnZGl2Jykge1xuICAgICAgICBtb2QgPSByZXMubW9kLm5lZygpO1xuICAgICAgICBpZiAocG9zaXRpdmUgJiYgbW9kLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgICAgbW9kLmlzdWIobnVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IHJlcy5kaXYsXG4gICAgICAgIG1vZDogbW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEJvdGggbnVtYmVycyBhcmUgcG9zaXRpdmUgYXQgdGhpcyBwb2ludFxuXG4gICAgLy8gU3RyaXAgYm90aCBudW1iZXJzIHRvIGFwcHJveGltYXRlIHNoaWZ0IHZhbHVlXG4gICAgaWYgKG51bS5sZW5ndGggPiB0aGlzLmxlbmd0aCB8fCB0aGlzLmNtcChudW0pIDwgMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiBuZXcgQk4oMCksXG4gICAgICAgIG1vZDogdGhpc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBWZXJ5IHNob3J0IHJlZHVjdGlvblxuICAgIGlmIChudW0ubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAobW9kZSA9PT0gJ2RpdicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXY6IHRoaXMuZGl2bihudW0ud29yZHNbMF0pLFxuICAgICAgICAgIG1vZDogbnVsbFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSA9PT0gJ21vZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXY6IG51bGwsXG4gICAgICAgICAgbW9kOiBuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogdGhpcy5kaXZuKG51bS53b3Jkc1swXSksXG4gICAgICAgIG1vZDogbmV3IEJOKHRoaXMubW9kbihudW0ud29yZHNbMF0pKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fd29yZERpdihudW0sIG1vZGUpO1xuICB9O1xuXG4gIC8vIEZpbmQgYHRoaXNgIC8gYG51bWBcbiAgQk4ucHJvdG90eXBlLmRpdiA9IGZ1bmN0aW9uIGRpdiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGl2bW9kKG51bSwgJ2RpdicsIGZhbHNlKS5kaXY7XG4gIH07XG5cbiAgLy8gRmluZCBgdGhpc2AgJSBgbnVtYFxuICBCTi5wcm90b3R5cGUubW9kID0gZnVuY3Rpb24gbW9kIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXZtb2QobnVtLCAnbW9kJywgZmFsc2UpLm1vZDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudW1vZCA9IGZ1bmN0aW9uIHVtb2QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmRpdm1vZChudW0sICdtb2QnLCB0cnVlKS5tb2Q7XG4gIH07XG5cbiAgLy8gRmluZCBSb3VuZChgdGhpc2AgLyBgbnVtYClcbiAgQk4ucHJvdG90eXBlLmRpdlJvdW5kID0gZnVuY3Rpb24gZGl2Um91bmQgKG51bSkge1xuICAgIHZhciBkbSA9IHRoaXMuZGl2bW9kKG51bSk7XG5cbiAgICAvLyBGYXN0IGNhc2UgLSBleGFjdCBkaXZpc2lvblxuICAgIGlmIChkbS5tb2QuaXNaZXJvKCkpIHJldHVybiBkbS5kaXY7XG5cbiAgICB2YXIgbW9kID0gZG0uZGl2Lm5lZ2F0aXZlICE9PSAwID8gZG0ubW9kLmlzdWIobnVtKSA6IGRtLm1vZDtcblxuICAgIHZhciBoYWxmID0gbnVtLnVzaHJuKDEpO1xuICAgIHZhciByMiA9IG51bS5hbmRsbigxKTtcbiAgICB2YXIgY21wID0gbW9kLmNtcChoYWxmKTtcblxuICAgIC8vIFJvdW5kIGRvd25cbiAgICBpZiAoY21wIDwgMCB8fCByMiA9PT0gMSAmJiBjbXAgPT09IDApIHJldHVybiBkbS5kaXY7XG5cbiAgICAvLyBSb3VuZCB1cFxuICAgIHJldHVybiBkbS5kaXYubmVnYXRpdmUgIT09IDAgPyBkbS5kaXYuaXN1Ym4oMSkgOiBkbS5kaXYuaWFkZG4oMSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm1vZG4gPSBmdW5jdGlvbiBtb2RuIChudW0pIHtcbiAgICBhc3NlcnQobnVtIDw9IDB4M2ZmZmZmZik7XG4gICAgdmFyIHAgPSAoMSA8PCAyNikgJSBudW07XG5cbiAgICB2YXIgYWNjID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgYWNjID0gKHAgKiBhY2MgKyAodGhpcy53b3Jkc1tpXSB8IDApKSAlIG51bTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9O1xuXG4gIC8vIEluLXBsYWNlIGRpdmlzaW9uIGJ5IG51bWJlclxuICBCTi5wcm90b3R5cGUuaWRpdm4gPSBmdW5jdGlvbiBpZGl2biAobnVtKSB7XG4gICAgYXNzZXJ0KG51bSA8PSAweDNmZmZmZmYpO1xuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIHcgPSAodGhpcy53b3Jkc1tpXSB8IDApICsgY2FycnkgKiAweDQwMDAwMDA7XG4gICAgICB0aGlzLndvcmRzW2ldID0gKHcgLyBudW0pIHwgMDtcbiAgICAgIGNhcnJ5ID0gdyAlIG51bTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5kaXZuID0gZnVuY3Rpb24gZGl2biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5lZ2NkID0gZnVuY3Rpb24gZWdjZCAocCkge1xuICAgIGFzc2VydChwLm5lZ2F0aXZlID09PSAwKTtcbiAgICBhc3NlcnQoIXAuaXNaZXJvKCkpO1xuXG4gICAgdmFyIHggPSB0aGlzO1xuICAgIHZhciB5ID0gcC5jbG9uZSgpO1xuXG4gICAgaWYgKHgubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHggPSB4LnVtb2QocCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSB4LmNsb25lKCk7XG4gICAgfVxuXG4gICAgLy8gQSAqIHggKyBCICogeSA9IHhcbiAgICB2YXIgQSA9IG5ldyBCTigxKTtcbiAgICB2YXIgQiA9IG5ldyBCTigwKTtcblxuICAgIC8vIEMgKiB4ICsgRCAqIHkgPSB5XG4gICAgdmFyIEMgPSBuZXcgQk4oMCk7XG4gICAgdmFyIEQgPSBuZXcgQk4oMSk7XG5cbiAgICB2YXIgZyA9IDA7XG5cbiAgICB3aGlsZSAoeC5pc0V2ZW4oKSAmJiB5LmlzRXZlbigpKSB7XG4gICAgICB4Lml1c2hybigxKTtcbiAgICAgIHkuaXVzaHJuKDEpO1xuICAgICAgKytnO1xuICAgIH1cblxuICAgIHZhciB5cCA9IHkuY2xvbmUoKTtcbiAgICB2YXIgeHAgPSB4LmNsb25lKCk7XG5cbiAgICB3aGlsZSAoIXguaXNaZXJvKCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpbSA9IDE7ICh4LndvcmRzWzBdICYgaW0pID09PSAwICYmIGkgPCAyNjsgKytpLCBpbSA8PD0gMSk7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgeC5pdXNocm4oaSk7XG4gICAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKEEuaXNPZGQoKSB8fCBCLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIEEuaWFkZCh5cCk7XG4gICAgICAgICAgICBCLmlzdWIoeHApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEEuaXVzaHJuKDEpO1xuICAgICAgICAgIEIuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqbSA9IDE7ICh5LndvcmRzWzBdICYgam0pID09PSAwICYmIGogPCAyNjsgKytqLCBqbSA8PD0gMSk7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgeS5pdXNocm4oaik7XG4gICAgICAgIHdoaWxlIChqLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKEMuaXNPZGQoKSB8fCBELmlzT2RkKCkpIHtcbiAgICAgICAgICAgIEMuaWFkZCh5cCk7XG4gICAgICAgICAgICBELmlzdWIoeHApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEMuaXVzaHJuKDEpO1xuICAgICAgICAgIEQuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh4LmNtcCh5KSA+PSAwKSB7XG4gICAgICAgIHguaXN1Yih5KTtcbiAgICAgICAgQS5pc3ViKEMpO1xuICAgICAgICBCLmlzdWIoRCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB5LmlzdWIoeCk7XG4gICAgICAgIEMuaXN1YihBKTtcbiAgICAgICAgRC5pc3ViKEIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhOiBDLFxuICAgICAgYjogRCxcbiAgICAgIGdjZDogeS5pdXNobG4oZylcbiAgICB9O1xuICB9O1xuXG4gIC8vIFRoaXMgaXMgcmVkdWNlZCBpbmNhcm5hdGlvbiBvZiB0aGUgYmluYXJ5IEVFQVxuICAvLyBhYm92ZSwgZGVzaWduYXRlZCB0byBpbnZlcnQgbWVtYmVycyBvZiB0aGVcbiAgLy8gX3ByaW1lXyBmaWVsZHMgRihwKSBhdCBhIG1heGltYWwgc3BlZWRcbiAgQk4ucHJvdG90eXBlLl9pbnZtcCA9IGZ1bmN0aW9uIF9pbnZtcCAocCkge1xuICAgIGFzc2VydChwLm5lZ2F0aXZlID09PSAwKTtcbiAgICBhc3NlcnQoIXAuaXNaZXJvKCkpO1xuXG4gICAgdmFyIGEgPSB0aGlzO1xuICAgIHZhciBiID0gcC5jbG9uZSgpO1xuXG4gICAgaWYgKGEubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGEgPSBhLnVtb2QocCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBhLmNsb25lKCk7XG4gICAgfVxuXG4gICAgdmFyIHgxID0gbmV3IEJOKDEpO1xuICAgIHZhciB4MiA9IG5ldyBCTigwKTtcblxuICAgIHZhciBkZWx0YSA9IGIuY2xvbmUoKTtcblxuICAgIHdoaWxlIChhLmNtcG4oMSkgPiAwICYmIGIuY21wbigxKSA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpbSA9IDE7IChhLndvcmRzWzBdICYgaW0pID09PSAwICYmIGkgPCAyNjsgKytpLCBpbSA8PD0gMSk7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgYS5pdXNocm4oaSk7XG4gICAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKHgxLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIHgxLmlhZGQoZGVsdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHgxLml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMCwgam0gPSAxOyAoYi53b3Jkc1swXSAmIGptKSA9PT0gMCAmJiBqIDwgMjY7ICsraiwgam0gPDw9IDEpO1xuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIGIuaXVzaHJuKGopO1xuICAgICAgICB3aGlsZSAoai0tID4gMCkge1xuICAgICAgICAgIGlmICh4Mi5pc09kZCgpKSB7XG4gICAgICAgICAgICB4Mi5pYWRkKGRlbHRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB4Mi5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGEuY21wKGIpID49IDApIHtcbiAgICAgICAgYS5pc3ViKGIpO1xuICAgICAgICB4MS5pc3ViKHgyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGIuaXN1YihhKTtcbiAgICAgICAgeDIuaXN1Yih4MSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlcztcbiAgICBpZiAoYS5jbXBuKDEpID09PSAwKSB7XG4gICAgICByZXMgPSB4MTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0geDI7XG4gICAgfVxuXG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQocCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ2NkID0gZnVuY3Rpb24gZ2NkIChudW0pIHtcbiAgICBpZiAodGhpcy5pc1plcm8oKSkgcmV0dXJuIG51bS5hYnMoKTtcbiAgICBpZiAobnVtLmlzWmVybygpKSByZXR1cm4gdGhpcy5hYnMoKTtcblxuICAgIHZhciBhID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBiID0gbnVtLmNsb25lKCk7XG4gICAgYS5uZWdhdGl2ZSA9IDA7XG4gICAgYi5uZWdhdGl2ZSA9IDA7XG5cbiAgICAvLyBSZW1vdmUgY29tbW9uIGZhY3RvciBvZiB0d29cbiAgICBmb3IgKHZhciBzaGlmdCA9IDA7IGEuaXNFdmVuKCkgJiYgYi5pc0V2ZW4oKTsgc2hpZnQrKykge1xuICAgICAgYS5pdXNocm4oMSk7XG4gICAgICBiLml1c2hybigxKTtcbiAgICB9XG5cbiAgICBkbyB7XG4gICAgICB3aGlsZSAoYS5pc0V2ZW4oKSkge1xuICAgICAgICBhLml1c2hybigxKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChiLmlzRXZlbigpKSB7XG4gICAgICAgIGIuaXVzaHJuKDEpO1xuICAgICAgfVxuXG4gICAgICB2YXIgciA9IGEuY21wKGIpO1xuICAgICAgaWYgKHIgPCAwKSB7XG4gICAgICAgIC8vIFN3YXAgYGFgIGFuZCBgYmAgdG8gbWFrZSBgYWAgYWx3YXlzIGJpZ2dlciB0aGFuIGBiYFxuICAgICAgICB2YXIgdCA9IGE7XG4gICAgICAgIGEgPSBiO1xuICAgICAgICBiID0gdDtcbiAgICAgIH0gZWxzZSBpZiAociA9PT0gMCB8fCBiLmNtcG4oMSkgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGEuaXN1YihiKTtcbiAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgIHJldHVybiBiLml1c2hsbihzaGlmdCk7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IG51bWJlciBpbiB0aGUgZmllbGQgRihudW0pXG4gIEJOLnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZWdjZChudW0pLmEudW1vZChudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc0V2ZW4gPSBmdW5jdGlvbiBpc0V2ZW4gKCkge1xuICAgIHJldHVybiAodGhpcy53b3Jkc1swXSAmIDEpID09PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc09kZCA9IGZ1bmN0aW9uIGlzT2RkICgpIHtcbiAgICByZXR1cm4gKHRoaXMud29yZHNbMF0gJiAxKSA9PT0gMTtcbiAgfTtcblxuICAvLyBBbmQgZmlyc3Qgd29yZCBhbmQgbnVtXG4gIEJOLnByb3RvdHlwZS5hbmRsbiA9IGZ1bmN0aW9uIGFuZGxuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy53b3Jkc1swXSAmIG51bTtcbiAgfTtcblxuICAvLyBJbmNyZW1lbnQgYXQgdGhlIGJpdCBwb3NpdGlvbiBpbi1saW5lXG4gIEJOLnByb3RvdHlwZS5iaW5jbiA9IGZ1bmN0aW9uIGJpbmNuIChiaXQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdCA9PT0gJ251bWJlcicpO1xuICAgIHZhciByID0gYml0ICUgMjY7XG4gICAgdmFyIHMgPSAoYml0IC0gcikgLyAyNjtcbiAgICB2YXIgcSA9IDEgPDwgcjtcblxuICAgIC8vIEZhc3QgY2FzZTogYml0IGlzIG11Y2ggaGlnaGVyIHRoYW4gYWxsIGV4aXN0aW5nIHdvcmRzXG4gICAgaWYgKHRoaXMubGVuZ3RoIDw9IHMpIHtcbiAgICAgIHRoaXMuX2V4cGFuZChzICsgMSk7XG4gICAgICB0aGlzLndvcmRzW3NdIHw9IHE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgYml0IGFuZCBwcm9wYWdhdGUsIGlmIG5lZWRlZFxuICAgIHZhciBjYXJyeSA9IHE7XG4gICAgZm9yICh2YXIgaSA9IHM7IGNhcnJ5ICE9PSAwICYmIGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdyArPSBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+Pj4gMjY7XG4gICAgICB3ICY9IDB4M2ZmZmZmZjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB3O1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBjYXJyeTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiBpc1plcm8gKCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdID09PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5jbXBuID0gZnVuY3Rpb24gY21wbiAobnVtKSB7XG4gICAgdmFyIG5lZ2F0aXZlID0gbnVtIDwgMDtcblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwICYmICFuZWdhdGl2ZSkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG5lZ2F0aXZlKSByZXR1cm4gMTtcblxuICAgIHRoaXMuc3RyaXAoKTtcblxuICAgIHZhciByZXM7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMSkge1xuICAgICAgcmVzID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5lZ2F0aXZlKSB7XG4gICAgICAgIG51bSA9IC1udW07XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmLCAnTnVtYmVyIGlzIHRvbyBiaWcnKTtcblxuICAgICAgdmFyIHcgPSB0aGlzLndvcmRzWzBdIHwgMDtcbiAgICAgIHJlcyA9IHcgPT09IG51bSA/IDAgOiB3IDwgbnVtID8gLTEgOiAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIC1yZXMgfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gQ29tcGFyZSB0d28gbnVtYmVycyBhbmQgcmV0dXJuOlxuICAvLyAxIC0gaWYgYHRoaXNgID4gYG51bWBcbiAgLy8gMCAtIGlmIGB0aGlzYCA9PSBgbnVtYFxuICAvLyAtMSAtIGlmIGB0aGlzYCA8IGBudW1gXG4gIEJOLnByb3RvdHlwZS5jbXAgPSBmdW5jdGlvbiBjbXAgKG51bSkge1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwICYmIG51bS5uZWdhdGl2ZSA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIDE7XG5cbiAgICB2YXIgcmVzID0gdGhpcy51Y21wKG51bSk7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHJldHVybiAtcmVzIHwgMDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIFVuc2lnbmVkIGNvbXBhcmlzb25cbiAgQk4ucHJvdG90eXBlLnVjbXAgPSBmdW5jdGlvbiB1Y21wIChudW0pIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50IGJvdGggbnVtYmVycyBoYXZlIHRoZSBzYW1lIHNpZ25cbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gMTtcbiAgICBpZiAodGhpcy5sZW5ndGggPCBudW0ubGVuZ3RoKSByZXR1cm4gLTE7XG5cbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGEgPSB0aGlzLndvcmRzW2ldIHwgMDtcbiAgICAgIHZhciBiID0gbnVtLndvcmRzW2ldIHwgMDtcblxuICAgICAgaWYgKGEgPT09IGIpIGNvbnRpbnVlO1xuICAgICAgaWYgKGEgPCBiKSB7XG4gICAgICAgIHJlcyA9IC0xO1xuICAgICAgfSBlbHNlIGlmIChhID4gYikge1xuICAgICAgICByZXMgPSAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0biA9IGZ1bmN0aW9uIGd0biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID09PSAxO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndCA9IGZ1bmN0aW9uIGd0IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA9PT0gMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3RlbiA9IGZ1bmN0aW9uIGd0ZW4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA+PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndGUgPSBmdW5jdGlvbiBndGUgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID49IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0biA9IGZ1bmN0aW9uIGx0biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID09PSAtMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHQgPSBmdW5jdGlvbiBsdCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPT09IC0xO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdGVuID0gZnVuY3Rpb24gbHRlbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pIDw9IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0ZSA9IGZ1bmN0aW9uIGx0ZSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPD0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZXFuID0gZnVuY3Rpb24gZXFuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID09PSAwO1xuICB9O1xuXG4gIC8vXG4gIC8vIEEgcmVkdWNlIGNvbnRleHQsIGNvdWxkIGJlIHVzaW5nIG1vbnRnb21lcnkgb3Igc29tZXRoaW5nIGJldHRlciwgZGVwZW5kaW5nXG4gIC8vIG9uIHRoZSBgbWAgaXRzZWxmLlxuICAvL1xuICBCTi5yZWQgPSBmdW5jdGlvbiByZWQgKG51bSkge1xuICAgIHJldHVybiBuZXcgUmVkKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvUmVkID0gZnVuY3Rpb24gdG9SZWQgKGN0eCkge1xuICAgIGFzc2VydCghdGhpcy5yZWQsICdBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0Jyk7XG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIHJldHVybiBjdHguY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChjdHgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mcm9tUmVkID0gZnVuY3Rpb24gZnJvbVJlZCAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAnZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCcpO1xuICAgIHJldHVybiB0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2ZvcmNlUmVkID0gZnVuY3Rpb24gX2ZvcmNlUmVkIChjdHgpIHtcbiAgICB0aGlzLnJlZCA9IGN0eDtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZm9yY2VSZWQgPSBmdW5jdGlvbiBmb3JjZVJlZCAoY3R4KSB7XG4gICAgYXNzZXJ0KCF0aGlzLnJlZCwgJ0FscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQnKTtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VSZWQoY3R4KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkQWRkID0gZnVuY3Rpb24gcmVkQWRkIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmFkZCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJQWRkID0gZnVuY3Rpb24gcmVkSUFkZCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaWFkZCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRTdWIgPSBmdW5jdGlvbiByZWRTdWIgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc3ViKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElTdWIgPSBmdW5jdGlvbiByZWRJU3ViIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pc3ViKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFNobCA9IGZ1bmN0aW9uIHJlZFNobCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zaGwodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkTXVsID0gZnVuY3Rpb24gcmVkTXVsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTIodGhpcywgbnVtKTtcbiAgICByZXR1cm4gdGhpcy5yZWQubXVsKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElNdWwgPSBmdW5jdGlvbiByZWRJTXVsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTIodGhpcywgbnVtKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaW11bCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRTcXIgPSBmdW5jdGlvbiByZWRTcXIgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc3FyKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJU3FyID0gZnVuY3Rpb24gcmVkSVNxciAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaXNxcih0aGlzKTtcbiAgfTtcblxuICAvLyBTcXVhcmUgcm9vdCBvdmVyIHBcbiAgQk4ucHJvdG90eXBlLnJlZFNxcnQgPSBmdW5jdGlvbiByZWRTcXJ0ICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zcXJ0KHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJbnZtID0gZnVuY3Rpb24gcmVkSW52bSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaW52bSh0aGlzKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gbmVnYXRpdmUgY2xvbmUgb2YgYHRoaXNgICUgYHJlZCBtb2R1bG9gXG4gIEJOLnByb3RvdHlwZS5yZWROZWcgPSBmdW5jdGlvbiByZWROZWcgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQubmVnKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRQb3cgPSBmdW5jdGlvbiByZWRQb3cgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCAmJiAhbnVtLnJlZCwgJ3JlZFBvdyhub3JtYWxOdW0pJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnBvdyh0aGlzLCBudW0pO1xuICB9O1xuXG4gIC8vIFByaW1lIG51bWJlcnMgd2l0aCBlZmZpY2llbnQgcmVkdWN0aW9uXG4gIHZhciBwcmltZXMgPSB7XG4gICAgazI1NjogbnVsbCxcbiAgICBwMjI0OiBudWxsLFxuICAgIHAxOTI6IG51bGwsXG4gICAgcDI1NTE5OiBudWxsXG4gIH07XG5cbiAgLy8gUHNldWRvLU1lcnNlbm5lIHByaW1lXG4gIGZ1bmN0aW9uIE1QcmltZSAobmFtZSwgcCkge1xuICAgIC8vIFAgPSAyIF4gTiAtIEtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMucCA9IG5ldyBCTihwLCAxNik7XG4gICAgdGhpcy5uID0gdGhpcy5wLmJpdExlbmd0aCgpO1xuICAgIHRoaXMuayA9IG5ldyBCTigxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCk7XG5cbiAgICB0aGlzLnRtcCA9IHRoaXMuX3RtcCgpO1xuICB9XG5cbiAgTVByaW1lLnByb3RvdHlwZS5fdG1wID0gZnVuY3Rpb24gX3RtcCAoKSB7XG4gICAgdmFyIHRtcCA9IG5ldyBCTihudWxsKTtcbiAgICB0bXAud29yZHMgPSBuZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubiAvIDEzKSk7XG4gICAgcmV0dXJuIHRtcDtcbiAgfTtcblxuICBNUHJpbWUucHJvdG90eXBlLmlyZWR1Y2UgPSBmdW5jdGlvbiBpcmVkdWNlIChudW0pIHtcbiAgICAvLyBBc3N1bWVzIHRoYXQgYG51bWAgaXMgbGVzcyB0aGFuIGBQXjJgXG4gICAgLy8gbnVtID0gSEkgKiAoMiBeIE4gLSBLKSArIEhJICogSyArIExPID0gSEkgKiBLICsgTE8gKG1vZCBQKVxuICAgIHZhciByID0gbnVtO1xuICAgIHZhciBybGVuO1xuXG4gICAgZG8ge1xuICAgICAgdGhpcy5zcGxpdChyLCB0aGlzLnRtcCk7XG4gICAgICByID0gdGhpcy5pbXVsSyhyKTtcbiAgICAgIHIgPSByLmlhZGQodGhpcy50bXApO1xuICAgICAgcmxlbiA9IHIuYml0TGVuZ3RoKCk7XG4gICAgfSB3aGlsZSAocmxlbiA+IHRoaXMubik7XG5cbiAgICB2YXIgY21wID0gcmxlbiA8IHRoaXMubiA/IC0xIDogci51Y21wKHRoaXMucCk7XG4gICAgaWYgKGNtcCA9PT0gMCkge1xuICAgICAgci53b3Jkc1swXSA9IDA7XG4gICAgICByLmxlbmd0aCA9IDE7XG4gICAgfSBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgICByLmlzdWIodGhpcy5wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgci5zdHJpcCgpO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIE1QcmltZS5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCAoaW5wdXQsIG91dCkge1xuICAgIGlucHV0Lml1c2hybih0aGlzLm4sIDAsIG91dCk7XG4gIH07XG5cbiAgTVByaW1lLnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICByZXR1cm4gbnVtLmltdWwodGhpcy5rKTtcbiAgfTtcblxuICBmdW5jdGlvbiBLMjU2ICgpIHtcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAnazI1NicsXG4gICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYnKTtcbiAgfVxuICBpbmhlcml0cyhLMjU2LCBNUHJpbWUpO1xuXG4gIEsyNTYucHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24gc3BsaXQgKGlucHV0LCBvdXRwdXQpIHtcbiAgICAvLyAyNTYgPSA5ICogMjYgKyAyMlxuICAgIHZhciBtYXNrID0gMHgzZmZmZmY7XG5cbiAgICB2YXIgb3V0TGVuID0gTWF0aC5taW4oaW5wdXQubGVuZ3RoLCA5KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG91dExlbjsgaSsrKSB7XG4gICAgICBvdXRwdXQud29yZHNbaV0gPSBpbnB1dC53b3Jkc1tpXTtcbiAgICB9XG4gICAgb3V0cHV0Lmxlbmd0aCA9IG91dExlbjtcblxuICAgIGlmIChpbnB1dC5sZW5ndGggPD0gOSkge1xuICAgICAgaW5wdXQud29yZHNbMF0gPSAwO1xuICAgICAgaW5wdXQubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTaGlmdCBieSA5IGxpbWJzXG4gICAgdmFyIHByZXYgPSBpbnB1dC53b3Jkc1s5XTtcbiAgICBvdXRwdXQud29yZHNbb3V0cHV0Lmxlbmd0aCsrXSA9IHByZXYgJiBtYXNrO1xuXG4gICAgZm9yIChpID0gMTA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5leHQgPSBpbnB1dC53b3Jkc1tpXSB8IDA7XG4gICAgICBpbnB1dC53b3Jkc1tpIC0gMTBdID0gKChuZXh0ICYgbWFzaykgPDwgNCkgfCAocHJldiA+Pj4gMjIpO1xuICAgICAgcHJldiA9IG5leHQ7XG4gICAgfVxuICAgIHByZXYgPj4+PSAyMjtcbiAgICBpbnB1dC53b3Jkc1tpIC0gMTBdID0gcHJldjtcbiAgICBpZiAocHJldiA9PT0gMCAmJiBpbnB1dC5sZW5ndGggPiAxMCkge1xuICAgICAgaW5wdXQubGVuZ3RoIC09IDEwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC5sZW5ndGggLT0gOTtcbiAgICB9XG4gIH07XG5cbiAgSzI1Ni5wcm90b3R5cGUuaW11bEsgPSBmdW5jdGlvbiBpbXVsSyAobnVtKSB7XG4gICAgLy8gSyA9IDB4MTAwMDAwM2QxID0gWyAweDQwLCAweDNkMSBdXG4gICAgbnVtLndvcmRzW251bS5sZW5ndGhdID0gMDtcbiAgICBudW0ud29yZHNbbnVtLmxlbmd0aCArIDFdID0gMDtcbiAgICBudW0ubGVuZ3RoICs9IDI7XG5cbiAgICAvLyBib3VuZGVkIGF0OiAweDQwICogMHgzZmZmZmZmICsgMHgzZDAgPSAweDEwMDAwMDM5MFxuICAgIHZhciBsbyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gbnVtLndvcmRzW2ldIHwgMDtcbiAgICAgIGxvICs9IHcgKiAweDNkMTtcbiAgICAgIG51bS53b3Jkc1tpXSA9IGxvICYgMHgzZmZmZmZmO1xuICAgICAgbG8gPSB3ICogMHg0MCArICgobG8gLyAweDQwMDAwMDApIHwgMCk7XG4gICAgfVxuXG4gICAgLy8gRmFzdCBsZW5ndGggcmVkdWN0aW9uXG4gICAgaWYgKG51bS53b3Jkc1tudW0ubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgIG51bS5sZW5ndGgtLTtcbiAgICAgIGlmIChudW0ud29yZHNbbnVtLmxlbmd0aCAtIDFdID09PSAwKSB7XG4gICAgICAgIG51bS5sZW5ndGgtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbiAgfTtcblxuICBmdW5jdGlvbiBQMjI0ICgpIHtcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAncDIyNCcsXG4gICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEnKTtcbiAgfVxuICBpbmhlcml0cyhQMjI0LCBNUHJpbWUpO1xuXG4gIGZ1bmN0aW9uIFAxOTIgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdwMTkyJyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZicpO1xuICB9XG4gIGluaGVyaXRzKFAxOTIsIE1QcmltZSk7XG5cbiAgZnVuY3Rpb24gUDI1NTE5ICgpIHtcbiAgICAvLyAyIF4gMjU1IC0gMTlcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAnMjU1MTknLFxuICAgICAgJzdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQnKTtcbiAgfVxuICBpbmhlcml0cyhQMjU1MTksIE1QcmltZSk7XG5cbiAgUDI1NTE5LnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICAvLyBLID0gMHgxM1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoaSA9IChudW0ud29yZHNbaV0gfCAwKSAqIDB4MTMgKyBjYXJyeTtcbiAgICAgIHZhciBsbyA9IGhpICYgMHgzZmZmZmZmO1xuICAgICAgaGkgPj4+PSAyNjtcblxuICAgICAgbnVtLndvcmRzW2ldID0gbG87XG4gICAgICBjYXJyeSA9IGhpO1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG51bS53b3Jkc1tudW0ubGVuZ3RoKytdID0gY2Fycnk7XG4gICAgfVxuICAgIHJldHVybiBudW07XG4gIH07XG5cbiAgLy8gRXhwb3J0ZWQgbW9zdGx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB1c2UgcGxhaW4gbmFtZSBpbnN0ZWFkXG4gIEJOLl9wcmltZSA9IGZ1bmN0aW9uIHByaW1lIChuYW1lKSB7XG4gICAgLy8gQ2FjaGVkIHZlcnNpb24gb2YgcHJpbWVcbiAgICBpZiAocHJpbWVzW25hbWVdKSByZXR1cm4gcHJpbWVzW25hbWVdO1xuXG4gICAgdmFyIHByaW1lO1xuICAgIGlmIChuYW1lID09PSAnazI1NicpIHtcbiAgICAgIHByaW1lID0gbmV3IEsyNTYoKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdwMjI0Jykge1xuICAgICAgcHJpbWUgPSBuZXcgUDIyNCgpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3AxOTInKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMTkyKCk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAncDI1NTE5Jykge1xuICAgICAgcHJpbWUgPSBuZXcgUDI1NTE5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwcmltZSAnICsgbmFtZSk7XG4gICAgfVxuICAgIHByaW1lc1tuYW1lXSA9IHByaW1lO1xuXG4gICAgcmV0dXJuIHByaW1lO1xuICB9O1xuXG4gIC8vXG4gIC8vIEJhc2UgcmVkdWN0aW9uIGVuZ2luZVxuICAvL1xuICBmdW5jdGlvbiBSZWQgKG0pIHtcbiAgICBpZiAodHlwZW9mIG0gPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgcHJpbWUgPSBCTi5fcHJpbWUobSk7XG4gICAgICB0aGlzLm0gPSBwcmltZS5wO1xuICAgICAgdGhpcy5wcmltZSA9IHByaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQobS5ndG4oMSksICdtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEnKTtcbiAgICAgIHRoaXMubSA9IG07XG4gICAgICB0aGlzLnByaW1lID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBSZWQucHJvdG90eXBlLl92ZXJpZnkxID0gZnVuY3Rpb24gX3ZlcmlmeTEgKGEpIHtcbiAgICBhc3NlcnQoYS5uZWdhdGl2ZSA9PT0gMCwgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzJyk7XG4gICAgYXNzZXJ0KGEucmVkLCAncmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuX3ZlcmlmeTIgPSBmdW5jdGlvbiBfdmVyaWZ5MiAoYSwgYikge1xuICAgIGFzc2VydCgoYS5uZWdhdGl2ZSB8IGIubmVnYXRpdmUpID09PSAwLCAncmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMnKTtcbiAgICBhc3NlcnQoYS5yZWQgJiYgYS5yZWQgPT09IGIucmVkLFxuICAgICAgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmltb2QgPSBmdW5jdGlvbiBpbW9kIChhKSB7XG4gICAgaWYgKHRoaXMucHJpbWUpIHJldHVybiB0aGlzLnByaW1lLmlyZWR1Y2UoYSkuX2ZvcmNlUmVkKHRoaXMpO1xuICAgIHJldHVybiBhLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcgKGEpIHtcbiAgICBpZiAoYS5pc1plcm8oKSkge1xuICAgICAgcmV0dXJuIGEuY2xvbmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tLnN1YihhKS5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuXG4gICAgdmFyIHJlcyA9IGEuYWRkKGIpO1xuICAgIGlmIChyZXMuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzLmlzdWIodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pYWRkID0gZnVuY3Rpb24gaWFkZCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5pYWRkKGIpO1xuICAgIGlmIChyZXMuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzLmlzdWIodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uIHN1YiAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5zdWIoYik7XG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcy5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pc3ViID0gZnVuY3Rpb24gaXN1YiAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5pc3ViKGIpO1xuICAgIGlmIChyZXMuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcy5pYWRkKHRoaXMubSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5zaGwgPSBmdW5jdGlvbiBzaGwgKGEsIG51bSkge1xuICAgIHRoaXMuX3ZlcmlmeTEoYSk7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLnVzaGxuKG51bSkpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuICAgIHJldHVybiB0aGlzLmltb2QoYS5pbXVsKGIpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLm11bChiKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pc3FyID0gZnVuY3Rpb24gaXNxciAoYSkge1xuICAgIHJldHVybiB0aGlzLmltdWwoYSwgYS5jbG9uZSgpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNxciA9IGZ1bmN0aW9uIHNxciAoYSkge1xuICAgIHJldHVybiB0aGlzLm11bChhLCBhKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNxcnQgPSBmdW5jdGlvbiBzcXJ0IChhKSB7XG4gICAgaWYgKGEuaXNaZXJvKCkpIHJldHVybiBhLmNsb25lKCk7XG5cbiAgICB2YXIgbW9kMyA9IHRoaXMubS5hbmRsbigzKTtcbiAgICBhc3NlcnQobW9kMyAlIDIgPT09IDEpO1xuXG4gICAgLy8gRmFzdCBjYXNlXG4gICAgaWYgKG1vZDMgPT09IDMpIHtcbiAgICAgIHZhciBwb3cgPSB0aGlzLm0uYWRkKG5ldyBCTigxKSkuaXVzaHJuKDIpO1xuICAgICAgcmV0dXJuIHRoaXMucG93KGEsIHBvdyk7XG4gICAgfVxuXG4gICAgLy8gVG9uZWxsaS1TaGFua3MgYWxnb3JpdGhtIChUb3RhbGx5IHVub3B0aW1pemVkIGFuZCBzbG93KVxuICAgIC8vXG4gICAgLy8gRmluZCBRIGFuZCBTLCB0aGF0IFEgKiAyIF4gUyA9IChQIC0gMSlcbiAgICB2YXIgcSA9IHRoaXMubS5zdWJuKDEpO1xuICAgIHZhciBzID0gMDtcbiAgICB3aGlsZSAoIXEuaXNaZXJvKCkgJiYgcS5hbmRsbigxKSA9PT0gMCkge1xuICAgICAgcysrO1xuICAgICAgcS5pdXNocm4oMSk7XG4gICAgfVxuICAgIGFzc2VydCghcS5pc1plcm8oKSk7XG5cbiAgICB2YXIgb25lID0gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO1xuICAgIHZhciBuT25lID0gb25lLnJlZE5lZygpO1xuXG4gICAgLy8gRmluZCBxdWFkcmF0aWMgbm9uLXJlc2lkdWVcbiAgICAvLyBOT1RFOiBNYXggaXMgc3VjaCBiZWNhdXNlIG9mIGdlbmVyYWxpemVkIFJpZW1hbm4gaHlwb3RoZXNpcy5cbiAgICB2YXIgbHBvdyA9IHRoaXMubS5zdWJuKDEpLml1c2hybigxKTtcbiAgICB2YXIgeiA9IHRoaXMubS5iaXRMZW5ndGgoKTtcbiAgICB6ID0gbmV3IEJOKDIgKiB6ICogeikudG9SZWQodGhpcyk7XG5cbiAgICB3aGlsZSAodGhpcy5wb3coeiwgbHBvdykuY21wKG5PbmUpICE9PSAwKSB7XG4gICAgICB6LnJlZElBZGQobk9uZSk7XG4gICAgfVxuXG4gICAgdmFyIGMgPSB0aGlzLnBvdyh6LCBxKTtcbiAgICB2YXIgciA9IHRoaXMucG93KGEsIHEuYWRkbigxKS5pdXNocm4oMSkpO1xuICAgIHZhciB0ID0gdGhpcy5wb3coYSwgcSk7XG4gICAgdmFyIG0gPSBzO1xuICAgIHdoaWxlICh0LmNtcChvbmUpICE9PSAwKSB7XG4gICAgICB2YXIgdG1wID0gdDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyB0bXAuY21wKG9uZSkgIT09IDA7IGkrKykge1xuICAgICAgICB0bXAgPSB0bXAucmVkU3FyKCk7XG4gICAgICB9XG4gICAgICBhc3NlcnQoaSA8IG0pO1xuICAgICAgdmFyIGIgPSB0aGlzLnBvdyhjLCBuZXcgQk4oMSkuaXVzaGxuKG0gLSBpIC0gMSkpO1xuXG4gICAgICByID0gci5yZWRNdWwoYik7XG4gICAgICBjID0gYi5yZWRTcXIoKTtcbiAgICAgIHQgPSB0LnJlZE11bChjKTtcbiAgICAgIG0gPSBpO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW52bSA9IGZ1bmN0aW9uIGludm0gKGEpIHtcbiAgICB2YXIgaW52ID0gYS5faW52bXAodGhpcy5tKTtcbiAgICBpZiAoaW52Lm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICBpbnYubmVnYXRpdmUgPSAwO1xuICAgICAgcmV0dXJuIHRoaXMuaW1vZChpbnYpLnJlZE5lZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5pbW9kKGludik7XG4gICAgfVxuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUucG93ID0gZnVuY3Rpb24gcG93IChhLCBudW0pIHtcbiAgICBpZiAobnVtLmlzWmVybygpKSByZXR1cm4gbmV3IEJOKDEpO1xuICAgIGlmIChudW0uY21wbigxKSA9PT0gMCkgcmV0dXJuIGEuY2xvbmUoKTtcblxuICAgIHZhciB3aW5kb3dTaXplID0gNDtcbiAgICB2YXIgd25kID0gbmV3IEFycmF5KDEgPDwgd2luZG93U2l6ZSk7XG4gICAgd25kWzBdID0gbmV3IEJOKDEpLnRvUmVkKHRoaXMpO1xuICAgIHduZFsxXSA9IGE7XG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPCB3bmQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHduZFtpXSA9IHRoaXMubXVsKHduZFtpIC0gMV0sIGEpO1xuICAgIH1cblxuICAgIHZhciByZXMgPSB3bmRbMF07XG4gICAgdmFyIGN1cnJlbnQgPSAwO1xuICAgIHZhciBjdXJyZW50TGVuID0gMDtcbiAgICB2YXIgc3RhcnQgPSBudW0uYml0TGVuZ3RoKCkgJSAyNjtcbiAgICBpZiAoc3RhcnQgPT09IDApIHtcbiAgICAgIHN0YXJ0ID0gMjY7XG4gICAgfVxuXG4gICAgZm9yIChpID0gbnVtLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgd29yZCA9IG51bS53b3Jkc1tpXTtcbiAgICAgIGZvciAodmFyIGogPSBzdGFydCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgIHZhciBiaXQgPSAod29yZCA+PiBqKSAmIDE7XG4gICAgICAgIGlmIChyZXMgIT09IHduZFswXSkge1xuICAgICAgICAgIHJlcyA9IHRoaXMuc3FyKHJlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYml0ID09PSAwICYmIGN1cnJlbnQgPT09IDApIHtcbiAgICAgICAgICBjdXJyZW50TGVuID0gMDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnQgPDw9IDE7XG4gICAgICAgIGN1cnJlbnQgfD0gYml0O1xuICAgICAgICBjdXJyZW50TGVuKys7XG4gICAgICAgIGlmIChjdXJyZW50TGVuICE9PSB3aW5kb3dTaXplICYmIChpICE9PSAwIHx8IGogIT09IDApKSBjb250aW51ZTtcblxuICAgICAgICByZXMgPSB0aGlzLm11bChyZXMsIHduZFtjdXJyZW50XSk7XG4gICAgICAgIGN1cnJlbnRMZW4gPSAwO1xuICAgICAgICBjdXJyZW50ID0gMDtcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gMjY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmNvbnZlcnRUbyA9IGZ1bmN0aW9uIGNvbnZlcnRUbyAobnVtKSB7XG4gICAgdmFyIHIgPSBudW0udW1vZCh0aGlzLm0pO1xuXG4gICAgcmV0dXJuIHIgPT09IG51bSA/IHIuY2xvbmUoKSA6IHI7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5jb252ZXJ0RnJvbSA9IGZ1bmN0aW9uIGNvbnZlcnRGcm9tIChudW0pIHtcbiAgICB2YXIgcmVzID0gbnVtLmNsb25lKCk7XG4gICAgcmVzLnJlZCA9IG51bGw7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvL1xuICAvLyBNb250Z29tZXJ5IG1ldGhvZCBlbmdpbmVcbiAgLy9cblxuICBCTi5tb250ID0gZnVuY3Rpb24gbW9udCAobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBNb250KG51bSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gTW9udCAobSkge1xuICAgIFJlZC5jYWxsKHRoaXMsIG0pO1xuXG4gICAgdGhpcy5zaGlmdCA9IHRoaXMubS5iaXRMZW5ndGgoKTtcbiAgICBpZiAodGhpcy5zaGlmdCAlIDI2ICE9PSAwKSB7XG4gICAgICB0aGlzLnNoaWZ0ICs9IDI2IC0gKHRoaXMuc2hpZnQgJSAyNik7XG4gICAgfVxuXG4gICAgdGhpcy5yID0gbmV3IEJOKDEpLml1c2hsbih0aGlzLnNoaWZ0KTtcbiAgICB0aGlzLnIyID0gdGhpcy5pbW9kKHRoaXMuci5zcXIoKSk7XG4gICAgdGhpcy5yaW52ID0gdGhpcy5yLl9pbnZtcCh0aGlzLm0pO1xuXG4gICAgdGhpcy5taW52ID0gdGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pO1xuICAgIHRoaXMubWludiA9IHRoaXMubWludi51bW9kKHRoaXMucik7XG4gICAgdGhpcy5taW52ID0gdGhpcy5yLnN1Yih0aGlzLm1pbnYpO1xuICB9XG4gIGluaGVyaXRzKE1vbnQsIFJlZCk7XG5cbiAgTW9udC5wcm90b3R5cGUuY29udmVydFRvID0gZnVuY3Rpb24gY29udmVydFRvIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5pbW9kKG51bS51c2hsbih0aGlzLnNoaWZ0KSk7XG4gIH07XG5cbiAgTW9udC5wcm90b3R5cGUuY29udmVydEZyb20gPSBmdW5jdGlvbiBjb252ZXJ0RnJvbSAobnVtKSB7XG4gICAgdmFyIHIgPSB0aGlzLmltb2QobnVtLm11bCh0aGlzLnJpbnYpKTtcbiAgICByLnJlZCA9IG51bGw7XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgTW9udC5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKGEsIGIpIHtcbiAgICBpZiAoYS5pc1plcm8oKSB8fCBiLmlzWmVybygpKSB7XG4gICAgICBhLndvcmRzWzBdID0gMDtcbiAgICAgIGEubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIHZhciB0ID0gYS5pbXVsKGIpO1xuICAgIHZhciBjID0gdC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSk7XG4gICAgdmFyIHUgPSB0LmlzdWIoYykuaXVzaHJuKHRoaXMuc2hpZnQpO1xuICAgIHZhciByZXMgPSB1O1xuXG4gICAgaWYgKHUuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzID0gdS5pc3ViKHRoaXMubSk7XG4gICAgfSBlbHNlIGlmICh1LmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMgPSB1LmlhZGQodGhpcy5tKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwgKGEsIGIpIHtcbiAgICBpZiAoYS5pc1plcm8oKSB8fCBiLmlzWmVybygpKSByZXR1cm4gbmV3IEJOKDApLl9mb3JjZVJlZCh0aGlzKTtcblxuICAgIHZhciB0ID0gYS5tdWwoYik7XG4gICAgdmFyIGMgPSB0Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKTtcbiAgICB2YXIgdSA9IHQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCk7XG4gICAgdmFyIHJlcyA9IHU7XG4gICAgaWYgKHUuY21wKHRoaXMubSkgPj0gMCkge1xuICAgICAgcmVzID0gdS5pc3ViKHRoaXMubSk7XG4gICAgfSBlbHNlIGlmICh1LmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMgPSB1LmlhZGQodGhpcy5tKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAoYSkge1xuICAgIC8vIChBUileLTEgKiBSXjIgPSAoQV4tMSAqIFJeLTEpICogUl4yID0gQV4tMSAqIFJcbiAgICB2YXIgcmVzID0gdGhpcy5pbW9kKGEuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKTtcbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcbn0pKHR5cGVvZiBtb2R1bGUgPT09ICd1bmRlZmluZWQnIHx8IG1vZHVsZSwgdGhpcyk7XG4iLCJ2YXIgcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByYW5kKGxlbikge1xuICBpZiAoIXIpXG4gICAgciA9IG5ldyBSYW5kKG51bGwpO1xuXG4gIHJldHVybiByLmdlbmVyYXRlKGxlbik7XG59O1xuXG5mdW5jdGlvbiBSYW5kKHJhbmQpIHtcbiAgdGhpcy5yYW5kID0gcmFuZDtcbn1cbm1vZHVsZS5leHBvcnRzLlJhbmQgPSBSYW5kO1xuXG5SYW5kLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uIGdlbmVyYXRlKGxlbikge1xuICByZXR1cm4gdGhpcy5fcmFuZChsZW4pO1xufTtcblxuLy8gRW11bGF0ZSBjcnlwdG8gQVBJIHVzaW5nIHJhbmR5XG5SYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgaWYgKHRoaXMucmFuZC5nZXRCeXRlcylcbiAgICByZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKG4pO1xuXG4gIHZhciByZXMgPSBuZXcgVWludDhBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpKyspXG4gICAgcmVzW2ldID0gdGhpcy5yYW5kLmdldEJ5dGUoKTtcbiAgcmV0dXJuIHJlcztcbn07XG5cbmlmICh0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcpIHtcbiAgaWYgKHNlbGYuY3J5cHRvICYmIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIE1vZGVybiBicm93c2Vyc1xuICAgIFJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICAgICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgICAgc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoc2VsZi5tc0NyeXB0byAmJiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIElFXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gICAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgICBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnIpO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuXG4gIC8vIFNhZmFyaSdzIFdlYldvcmtlcnMgZG8gbm90IGhhdmUgYGNyeXB0b2BcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0Jykge1xuICAgIC8vIE9sZCBqdW5rXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH07XG4gIH1cbn0gZWxzZSB7XG4gIC8vIE5vZGUuanMgb3IgV2ViIHdvcmtlciB3aXRoIG5vIGNyeXB0byBzdXBwb3J0XG4gIHRyeSB7XG4gICAgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuICAgIGlmICh0eXBlb2YgY3J5cHRvLnJhbmRvbUJ5dGVzICE9PSAnZnVuY3Rpb24nKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3Qgc3VwcG9ydGVkJyk7XG5cbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMobik7XG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICB9XG59XG4iLCIiLCIvLyBiYXNlZCBvbiB0aGUgYWVzIGltcGxpbWVudGF0aW9uIGluIHRyaXBsZSBzZWNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rZXliYXNlL3RyaXBsZXNlY1xuXG4vLyB3aGljaCBpcyBpbiB0dXJuIGJhc2VkIG9uIHRoZSBvbmUgZnJvbSBjcnlwdG8tanNcbi8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL1xuXG52YXIgdWludF9tYXggPSBNYXRoLnBvdygyLCAzMilcbmZ1bmN0aW9uIGZpeHVwX3VpbnQzMiAoeCkge1xuICB2YXIgcmV0LCB4X3Bvc1xuICByZXQgPSB4ID4gdWludF9tYXggfHwgeCA8IDAgPyAoeF9wb3MgPSBNYXRoLmFicyh4KSAlIHVpbnRfbWF4LCB4IDwgMCA/IHVpbnRfbWF4IC0geF9wb3MgOiB4X3BvcykgOiB4XG4gIHJldHVybiByZXRcbn1cbmZ1bmN0aW9uIHNjcnViX3ZlYyAodikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHYubGVuZ3RoOyB2KyspIHtcbiAgICB2W2ldID0gMFxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBHbG9iYWwgKCkge1xuICB0aGlzLlNCT1ggPSBbXVxuICB0aGlzLklOVl9TQk9YID0gW11cbiAgdGhpcy5TVUJfTUlYID0gW1tdLCBbXSwgW10sIFtdXVxuICB0aGlzLklOVl9TVUJfTUlYID0gW1tdLCBbXSwgW10sIFtdXVxuICB0aGlzLmluaXQoKVxuICB0aGlzLlJDT04gPSBbMHgwMCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNl1cbn1cblxuR2xvYmFsLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZCwgaSwgc3gsIHQsIHgsIHgyLCB4NCwgeDgsIHhpLCBfaVxuICBkID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2ksIF9yZXN1bHRzXG4gICAgX3Jlc3VsdHMgPSBbXVxuICAgIGZvciAoaSA9IF9pID0gMDsgX2kgPCAyNTY7IGkgPSArK19pKSB7XG4gICAgICBpZiAoaSA8IDEyOCkge1xuICAgICAgICBfcmVzdWx0cy5wdXNoKGkgPDwgMSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2goKGkgPDwgMSkgXiAweDExYilcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9yZXN1bHRzXG4gIH0pKClcbiAgeCA9IDBcbiAgeGkgPSAwXG4gIGZvciAoaSA9IF9pID0gMDsgX2kgPCAyNTY7IGkgPSArK19pKSB7XG4gICAgc3ggPSB4aSBeICh4aSA8PCAxKSBeICh4aSA8PCAyKSBeICh4aSA8PCAzKSBeICh4aSA8PCA0KVxuICAgIHN4ID0gKHN4ID4+PiA4KSBeIChzeCAmIDB4ZmYpIF4gMHg2M1xuICAgIHRoaXMuU0JPWFt4XSA9IHN4XG4gICAgdGhpcy5JTlZfU0JPWFtzeF0gPSB4XG4gICAgeDIgPSBkW3hdXG4gICAgeDQgPSBkW3gyXVxuICAgIHg4ID0gZFt4NF1cbiAgICB0ID0gKGRbc3hdICogMHgxMDEpIF4gKHN4ICogMHgxMDEwMTAwKVxuICAgIHRoaXMuU1VCX01JWFswXVt4XSA9ICh0IDw8IDI0KSB8ICh0ID4+PiA4KVxuICAgIHRoaXMuU1VCX01JWFsxXVt4XSA9ICh0IDw8IDE2KSB8ICh0ID4+PiAxNilcbiAgICB0aGlzLlNVQl9NSVhbMl1beF0gPSAodCA8PCA4KSB8ICh0ID4+PiAyNClcbiAgICB0aGlzLlNVQl9NSVhbM11beF0gPSB0XG4gICAgdCA9ICh4OCAqIDB4MTAxMDEwMSkgXiAoeDQgKiAweDEwMDAxKSBeICh4MiAqIDB4MTAxKSBeICh4ICogMHgxMDEwMTAwKVxuICAgIHRoaXMuSU5WX1NVQl9NSVhbMF1bc3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpXG4gICAgdGhpcy5JTlZfU1VCX01JWFsxXVtzeF0gPSAodCA8PCAxNikgfCAodCA+Pj4gMTYpXG4gICAgdGhpcy5JTlZfU1VCX01JWFsyXVtzeF0gPSAodCA8PCA4KSB8ICh0ID4+PiAyNClcbiAgICB0aGlzLklOVl9TVUJfTUlYWzNdW3N4XSA9IHRcbiAgICBpZiAoeCA9PT0gMCkge1xuICAgICAgeCA9IHhpID0gMVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0geDIgXiBkW2RbZFt4OCBeIHgyXV1dXG4gICAgICB4aSBePSBkW2RbeGldXVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG52YXIgRyA9IG5ldyBHbG9iYWwoKVxuXG5BRVMuYmxvY2tTaXplID0gNCAqIDRcblxuQUVTLnByb3RvdHlwZS5ibG9ja1NpemUgPSBBRVMuYmxvY2tTaXplXG5cbkFFUy5rZXlTaXplID0gMjU2IC8gOFxuXG5BRVMucHJvdG90eXBlLmtleVNpemUgPSBBRVMua2V5U2l6ZVxuXG5mdW5jdGlvbiBidWZmZXJUb0FycmF5IChidWYpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGggLyA0XG4gIHZhciBvdXQgPSBuZXcgQXJyYXkobGVuKVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBvdXRbaV0gPSBidWYucmVhZFVJbnQzMkJFKGkgKiA0KVxuICB9XG4gIHJldHVybiBvdXRcbn1cbmZ1bmN0aW9uIEFFUyAoa2V5KSB7XG4gIHRoaXMuX2tleSA9IGJ1ZmZlclRvQXJyYXkoa2V5KVxuICB0aGlzLl9kb1Jlc2V0KClcbn1cblxuQUVTLnByb3RvdHlwZS5fZG9SZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGludktzUm93LCBrZXlTaXplLCBrZXlXb3Jkcywga3NSb3csIGtzUm93cywgdFxuICBrZXlXb3JkcyA9IHRoaXMuX2tleVxuICBrZXlTaXplID0ga2V5V29yZHMubGVuZ3RoXG4gIHRoaXMuX25Sb3VuZHMgPSBrZXlTaXplICsgNlxuICBrc1Jvd3MgPSAodGhpcy5fblJvdW5kcyArIDEpICogNFxuICB0aGlzLl9rZXlTY2hlZHVsZSA9IFtdXG4gIGZvciAoa3NSb3cgPSAwOyBrc1JvdyA8IGtzUm93czsga3NSb3crKykge1xuICAgIHRoaXMuX2tleVNjaGVkdWxlW2tzUm93XSA9IGtzUm93IDwga2V5U2l6ZSA/IGtleVdvcmRzW2tzUm93XSA6ICh0ID0gdGhpcy5fa2V5U2NoZWR1bGVba3NSb3cgLSAxXSwgKGtzUm93ICUga2V5U2l6ZSkgPT09IDAgPyAodCA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KSwgdCA9IChHLlNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChHLlNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChHLlNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBHLlNCT1hbdCAmIDB4ZmZdLCB0IF49IEcuUkNPTlsoa3NSb3cgLyBrZXlTaXplKSB8IDBdIDw8IDI0KSA6IGtleVNpemUgPiA2ICYmIGtzUm93ICUga2V5U2l6ZSA9PT0gNCA/IHQgPSAoRy5TQk9YW3QgPj4+IDI0XSA8PCAyNCkgfCAoRy5TQk9YWyh0ID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoRy5TQk9YWyh0ID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgRy5TQk9YW3QgJiAweGZmXSA6IHZvaWQgMCwgdGhpcy5fa2V5U2NoZWR1bGVba3NSb3cgLSBrZXlTaXplXSBeIHQpXG4gIH1cbiAgdGhpcy5faW52S2V5U2NoZWR1bGUgPSBbXVxuICBmb3IgKGludktzUm93ID0gMDsgaW52S3NSb3cgPCBrc1Jvd3M7IGludktzUm93KyspIHtcbiAgICBrc1JvdyA9IGtzUm93cyAtIGludktzUm93XG4gICAgdCA9IHRoaXMuX2tleVNjaGVkdWxlW2tzUm93IC0gKGludktzUm93ICUgNCA/IDAgOiA0KV1cbiAgICB0aGlzLl9pbnZLZXlTY2hlZHVsZVtpbnZLc1Jvd10gPSBpbnZLc1JvdyA8IDQgfHwga3NSb3cgPD0gNCA/IHQgOiBHLklOVl9TVUJfTUlYWzBdW0cuU0JPWFt0ID4+PiAyNF1dIF4gRy5JTlZfU1VCX01JWFsxXVtHLlNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdXSBeIEcuSU5WX1NVQl9NSVhbMl1bRy5TQk9YWyh0ID4+PiA4KSAmIDB4ZmZdXSBeIEcuSU5WX1NVQl9NSVhbM11bRy5TQk9YW3QgJiAweGZmXV1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5BRVMucHJvdG90eXBlLmVuY3J5cHRCbG9jayA9IGZ1bmN0aW9uIChNKSB7XG4gIE0gPSBidWZmZXJUb0FycmF5KG5ldyBCdWZmZXIoTSkpXG4gIHZhciBvdXQgPSB0aGlzLl9kb0NyeXB0QmxvY2soTSwgdGhpcy5fa2V5U2NoZWR1bGUsIEcuU1VCX01JWCwgRy5TQk9YKVxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcigxNilcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzBdLCAwKVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMV0sIDQpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsyXSwgOClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzNdLCAxMilcbiAgcmV0dXJuIGJ1ZlxufVxuXG5BRVMucHJvdG90eXBlLmRlY3J5cHRCbG9jayA9IGZ1bmN0aW9uIChNKSB7XG4gIE0gPSBidWZmZXJUb0FycmF5KG5ldyBCdWZmZXIoTSkpXG4gIHZhciB0ZW1wID0gW01bM10sIE1bMV1dXG4gIE1bMV0gPSB0ZW1wWzBdXG4gIE1bM10gPSB0ZW1wWzFdXG4gIHZhciBvdXQgPSB0aGlzLl9kb0NyeXB0QmxvY2soTSwgdGhpcy5faW52S2V5U2NoZWR1bGUsIEcuSU5WX1NVQl9NSVgsIEcuSU5WX1NCT1gpXG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKDE2KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMF0sIDApXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFszXSwgNClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzJdLCA4KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMV0sIDEyKVxuICByZXR1cm4gYnVmXG59XG5cbkFFUy5wcm90b3R5cGUuc2NydWIgPSBmdW5jdGlvbiAoKSB7XG4gIHNjcnViX3ZlYyh0aGlzLl9rZXlTY2hlZHVsZSlcbiAgc2NydWJfdmVjKHRoaXMuX2ludktleVNjaGVkdWxlKVxuICBzY3J1Yl92ZWModGhpcy5fa2V5KVxufVxuXG5BRVMucHJvdG90eXBlLl9kb0NyeXB0QmxvY2sgPSBmdW5jdGlvbiAoTSwga2V5U2NoZWR1bGUsIFNVQl9NSVgsIFNCT1gpIHtcbiAgdmFyIGtzUm93LCBzMCwgczEsIHMyLCBzMywgdDAsIHQxLCB0MiwgdDNcblxuICBzMCA9IE1bMF0gXiBrZXlTY2hlZHVsZVswXVxuICBzMSA9IE1bMV0gXiBrZXlTY2hlZHVsZVsxXVxuICBzMiA9IE1bMl0gXiBrZXlTY2hlZHVsZVsyXVxuICBzMyA9IE1bM10gXiBrZXlTY2hlZHVsZVszXVxuICBrc1JvdyA9IDRcbiAgZm9yICh2YXIgcm91bmQgPSAxOyByb3VuZCA8IHRoaXMuX25Sb3VuZHM7IHJvdW5kKyspIHtcbiAgICB0MCA9IFNVQl9NSVhbMF1bczAgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMxID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMyID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMyAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICB0MSA9IFNVQl9NSVhbMF1bczEgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMyID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMzID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMCAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICB0MiA9IFNVQl9NSVhbMF1bczIgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMzID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMwID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMSAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICB0MyA9IFNVQl9NSVhbMF1bczMgPj4+IDI0XSBeIFNVQl9NSVhbMV1bKHMwID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVhbMl1bKHMxID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWFszXVtzMiAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICBzMCA9IHQwXG4gICAgczEgPSB0MVxuICAgIHMyID0gdDJcbiAgICBzMyA9IHQzXG4gIH1cbiAgdDAgPSAoKFNCT1hbczAgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczEgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMiA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczMgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICB0MSA9ICgoU0JPWFtzMSA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMiA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMzID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMCAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdXG4gIHQyID0gKChTQk9YW3MyID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMzID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczAgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MxICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgdDMgPSAoKFNCT1hbczMgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczAgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMSA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczIgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICByZXR1cm4gW1xuICAgIGZpeHVwX3VpbnQzMih0MCksXG4gICAgZml4dXBfdWludDMyKHQxKSxcbiAgICBmaXh1cF91aW50MzIodDIpLFxuICAgIGZpeHVwX3VpbnQzMih0MylcbiAgXVxufVxuXG5leHBvcnRzLkFFUyA9IEFFU1xuIiwidmFyIGFlcyA9IHJlcXVpcmUoJy4vYWVzJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgR0hBU0ggPSByZXF1aXJlKCcuL2doYXNoJylcbnZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcbmluaGVyaXRzKFN0cmVhbUNpcGhlciwgVHJhbnNmb3JtKVxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW1DaXBoZXJcblxuZnVuY3Rpb24gU3RyZWFtQ2lwaGVyIChtb2RlLCBrZXksIGl2LCBkZWNyeXB0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdHJlYW1DaXBoZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1DaXBoZXIobW9kZSwga2V5LCBpdilcbiAgfVxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuICB0aGlzLl9maW5JRCA9IEJ1ZmZlci5jb25jYXQoW2l2LCBuZXcgQnVmZmVyKFswLCAwLCAwLCAxXSldKVxuICBpdiA9IEJ1ZmZlci5jb25jYXQoW2l2LCBuZXcgQnVmZmVyKFswLCAwLCAwLCAyXSldKVxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHRoaXMuX3ByZXYgPSBuZXcgQnVmZmVyKGl2Lmxlbmd0aClcbiAgdGhpcy5fY2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxuICB0aGlzLl9zZWNDYWNoZSA9IG5ldyBCdWZmZXIoJycpXG4gIHRoaXMuX2RlY3J5cHQgPSBkZWNyeXB0XG4gIHRoaXMuX2FsZW4gPSAwXG4gIHRoaXMuX2xlbiA9IDBcbiAgaXYuY29weSh0aGlzLl9wcmV2KVxuICB0aGlzLl9tb2RlID0gbW9kZVxuICB2YXIgaCA9IG5ldyBCdWZmZXIoNClcbiAgaC5maWxsKDApXG4gIHRoaXMuX2doYXNoID0gbmV3IEdIQVNIKHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soaCkpXG4gIHRoaXMuX2F1dGhUYWcgPSBudWxsXG4gIHRoaXMuX2NhbGxlZCA9IGZhbHNlXG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgaWYgKCF0aGlzLl9jYWxsZWQgJiYgdGhpcy5fYWxlbikge1xuICAgIHZhciBydW1wID0gMTYgLSAodGhpcy5fYWxlbiAlIDE2KVxuICAgIGlmIChydW1wIDwgMTYpIHtcbiAgICAgIHJ1bXAgPSBuZXcgQnVmZmVyKHJ1bXApXG4gICAgICBydW1wLmZpbGwoMClcbiAgICAgIHRoaXMuX2doYXNoLnVwZGF0ZShydW1wKVxuICAgIH1cbiAgfVxuICB0aGlzLl9jYWxsZWQgPSB0cnVlXG4gIHZhciBvdXQgPSB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmspXG4gIGlmICh0aGlzLl9kZWNyeXB0KSB7XG4gICAgdGhpcy5fZ2hhc2gudXBkYXRlKGNodW5rKVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX2doYXNoLnVwZGF0ZShvdXQpXG4gIH1cbiAgdGhpcy5fbGVuICs9IGNodW5rLmxlbmd0aFxuICByZXR1cm4gb3V0XG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX2RlY3J5cHQgJiYgIXRoaXMuX2F1dGhUYWcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YScpXG4gIH1cbiAgdmFyIHRhZyA9IHhvcih0aGlzLl9naGFzaC5maW5hbCh0aGlzLl9hbGVuICogOCwgdGhpcy5fbGVuICogOCksIHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKVxuICBpZiAodGhpcy5fZGVjcnlwdCkge1xuICAgIGlmICh4b3JUZXN0KHRhZywgdGhpcy5fYXV0aFRhZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYXV0aFRhZyA9IHRhZ1xuICB9XG4gIHRoaXMuX2NpcGhlci5zY3J1YigpXG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLmdldEF1dGhUYWcgPSBmdW5jdGlvbiBnZXRBdXRoVGFnICgpIHtcbiAgaWYgKCF0aGlzLl9kZWNyeXB0ICYmIEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSkge1xuICAgIHJldHVybiB0aGlzLl9hdXRoVGFnXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZScpXG4gIH1cbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuc2V0QXV0aFRhZyA9IGZ1bmN0aW9uIHNldEF1dGhUYWcgKHRhZykge1xuICBpZiAodGhpcy5fZGVjcnlwdCkge1xuICAgIHRoaXMuX2F1dGhUYWcgPSB0YWdcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcbiAgfVxufVxuU3RyZWFtQ2lwaGVyLnByb3RvdHlwZS5zZXRBQUQgPSBmdW5jdGlvbiBzZXRBQUQgKGJ1Zikge1xuICBpZiAoIXRoaXMuX2NhbGxlZCkge1xuICAgIHRoaXMuX2doYXNoLnVwZGF0ZShidWYpXG4gICAgdGhpcy5fYWxlbiArPSBidWYubGVuZ3RoXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxuICB9XG59XG5mdW5jdGlvbiB4b3JUZXN0IChhLCBiKSB7XG4gIHZhciBvdXQgPSAwXG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICBvdXQrK1xuICB9XG4gIHZhciBsZW4gPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIG91dCArPSAoYVtpXSBeIGJbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuIiwidmFyIGNpcGhlcnMgPSByZXF1aXJlKCcuL2VuY3J5cHRlcicpXG5leHBvcnRzLmNyZWF0ZUNpcGhlciA9IGV4cG9ydHMuQ2lwaGVyID0gY2lwaGVycy5jcmVhdGVDaXBoZXJcbmV4cG9ydHMuY3JlYXRlQ2lwaGVyaXYgPSBleHBvcnRzLkNpcGhlcml2ID0gY2lwaGVycy5jcmVhdGVDaXBoZXJpdlxudmFyIGRlY2lwaGVycyA9IHJlcXVpcmUoJy4vZGVjcnlwdGVyJylcbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXIgPSBleHBvcnRzLkRlY2lwaGVyID0gZGVjaXBoZXJzLmNyZWF0ZURlY2lwaGVyXG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyaXYgPSBleHBvcnRzLkRlY2lwaGVyaXYgPSBkZWNpcGhlcnMuY3JlYXRlRGVjaXBoZXJpdlxudmFyIG1vZGVzID0gcmVxdWlyZSgnLi9tb2RlcycpXG5mdW5jdGlvbiBnZXRDaXBoZXJzICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1vZGVzKVxufVxuZXhwb3J0cy5saXN0Q2lwaGVycyA9IGV4cG9ydHMuZ2V0Q2lwaGVycyA9IGdldENpcGhlcnNcbiIsInZhciBhZXMgPSByZXF1aXJlKCcuL2FlcycpXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnY2lwaGVyLWJhc2UnKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIG1vZGVzID0gcmVxdWlyZSgnLi9tb2RlcycpXG52YXIgU3RyZWFtQ2lwaGVyID0gcmVxdWlyZSgnLi9zdHJlYW1DaXBoZXInKVxudmFyIEF1dGhDaXBoZXIgPSByZXF1aXJlKCcuL2F1dGhDaXBoZXInKVxudmFyIGVidGsgPSByZXF1aXJlKCdldnBfYnl0ZXN0b2tleScpXG5cbmluaGVyaXRzKERlY2lwaGVyLCBUcmFuc2Zvcm0pXG5mdW5jdGlvbiBEZWNpcGhlciAobW9kZSwga2V5LCBpdikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGVjaXBoZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBEZWNpcGhlcihtb2RlLCBrZXksIGl2KVxuICB9XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG4gIHRoaXMuX2NhY2hlID0gbmV3IFNwbGl0dGVyKClcbiAgdGhpcy5fbGFzdCA9IHZvaWQgMFxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHRoaXMuX3ByZXYgPSBuZXcgQnVmZmVyKGl2Lmxlbmd0aClcbiAgaXYuY29weSh0aGlzLl9wcmV2KVxuICB0aGlzLl9tb2RlID0gbW9kZVxuICB0aGlzLl9hdXRvcGFkZGluZyA9IHRydWVcbn1cbkRlY2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5fY2FjaGUuYWRkKGRhdGEpXG4gIHZhciBjaHVua1xuICB2YXIgdGhpbmdcbiAgdmFyIG91dCA9IFtdXG4gIHdoaWxlICgoY2h1bmsgPSB0aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpKSkge1xuICAgIHRoaW5nID0gdGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsIGNodW5rKVxuICAgIG91dC5wdXNoKHRoaW5nKVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KG91dClcbn1cbkRlY2lwaGVyLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjaHVuayA9IHRoaXMuX2NhY2hlLmZsdXNoKClcbiAgaWYgKHRoaXMuX2F1dG9wYWRkaW5nKSB7XG4gICAgcmV0dXJuIHVucGFkKHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLCBjaHVuaykpXG4gIH0gZWxzZSBpZiAoY2h1bmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCcpXG4gIH1cbn1cbkRlY2lwaGVyLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZyA9IGZ1bmN0aW9uIChzZXRUbykge1xuICB0aGlzLl9hdXRvcGFkZGluZyA9ICEhc2V0VG9cbiAgcmV0dXJuIHRoaXNcbn1cbmZ1bmN0aW9uIFNwbGl0dGVyICgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNwbGl0dGVyKSkge1xuICAgIHJldHVybiBuZXcgU3BsaXR0ZXIoKVxuICB9XG4gIHRoaXMuY2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxufVxuU3BsaXR0ZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuY2FjaGUgPSBCdWZmZXIuY29uY2F0KFt0aGlzLmNhY2hlLCBkYXRhXSlcbn1cblxuU3BsaXR0ZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChhdXRvUGFkZGluZykge1xuICB2YXIgb3V0XG4gIGlmIChhdXRvUGFkZGluZykge1xuICAgIGlmICh0aGlzLmNhY2hlLmxlbmd0aCA+IDE2KSB7XG4gICAgICBvdXQgPSB0aGlzLmNhY2hlLnNsaWNlKDAsIDE2KVxuICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuc2xpY2UoMTYpXG4gICAgICByZXR1cm4gb3V0XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLmNhY2hlLmxlbmd0aCA+PSAxNikge1xuICAgICAgb3V0ID0gdGhpcy5jYWNoZS5zbGljZSgwLCAxNilcbiAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlLnNsaWNlKDE2KVxuICAgICAgcmV0dXJuIG91dFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuU3BsaXR0ZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jYWNoZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVxuICB9XG59XG5mdW5jdGlvbiB1bnBhZCAobGFzdCkge1xuICB2YXIgcGFkZGVkID0gbGFzdFsxNV1cbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgcGFkZGVkKSB7XG4gICAgaWYgKGxhc3RbKGkgKyAoMTYgLSBwYWRkZWQpKV0gIT09IHBhZGRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gZGVjcnlwdCBkYXRhJylcbiAgICB9XG4gIH1cbiAgaWYgKHBhZGRlZCA9PT0gMTYpIHtcbiAgICByZXR1cm5cbiAgfVxuICByZXR1cm4gbGFzdC5zbGljZSgwLCAxNiAtIHBhZGRlZClcbn1cblxudmFyIG1vZGVsaXN0ID0ge1xuICBFQ0I6IHJlcXVpcmUoJy4vbW9kZXMvZWNiJyksXG4gIENCQzogcmVxdWlyZSgnLi9tb2Rlcy9jYmMnKSxcbiAgQ0ZCOiByZXF1aXJlKCcuL21vZGVzL2NmYicpLFxuICBDRkI4OiByZXF1aXJlKCcuL21vZGVzL2NmYjgnKSxcbiAgQ0ZCMTogcmVxdWlyZSgnLi9tb2Rlcy9jZmIxJyksXG4gIE9GQjogcmVxdWlyZSgnLi9tb2Rlcy9vZmInKSxcbiAgQ1RSOiByZXF1aXJlKCcuL21vZGVzL2N0cicpLFxuICBHQ006IHJlcXVpcmUoJy4vbW9kZXMvY3RyJylcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVjaXBoZXJpdiAoc3VpdGUsIHBhc3N3b3JkLCBpdikge1xuICB2YXIgY29uZmlnID0gbW9kZXNbc3VpdGUudG9Mb3dlckNhc2UoKV1cbiAgaWYgKCFjb25maWcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG4gIGlmICh0eXBlb2YgaXYgPT09ICdzdHJpbmcnKSB7XG4gICAgaXYgPSBuZXcgQnVmZmVyKGl2KVxuICB9XG4gIGlmICh0eXBlb2YgcGFzc3dvcmQgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFzc3dvcmQgPSBuZXcgQnVmZmVyKHBhc3N3b3JkKVxuICB9XG4gIGlmIChwYXNzd29yZC5sZW5ndGggIT09IGNvbmZpZy5rZXkgLyA4KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBrZXkgbGVuZ3RoICcgKyBwYXNzd29yZC5sZW5ndGgpXG4gIH1cbiAgaWYgKGl2Lmxlbmd0aCAhPT0gY29uZmlnLml2KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBpdiBsZW5ndGggJyArIGl2Lmxlbmd0aClcbiAgfVxuICBpZiAoY29uZmlnLnR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1DaXBoZXIobW9kZWxpc3RbY29uZmlnLm1vZGVdLCBwYXNzd29yZCwgaXYsIHRydWUpXG4gIH0gZWxzZSBpZiAoY29uZmlnLnR5cGUgPT09ICdhdXRoJykge1xuICAgIHJldHVybiBuZXcgQXV0aENpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdiwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gbmV3IERlY2lwaGVyKG1vZGVsaXN0W2NvbmZpZy5tb2RlXSwgcGFzc3dvcmQsIGl2KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlciAoc3VpdGUsIHBhc3N3b3JkKSB7XG4gIHZhciBjb25maWcgPSBtb2Rlc1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgdmFyIGtleXMgPSBlYnRrKHBhc3N3b3JkLCBmYWxzZSwgY29uZmlnLmtleSwgY29uZmlnLml2KVxuICByZXR1cm4gY3JlYXRlRGVjaXBoZXJpdihzdWl0ZSwga2V5cy5rZXksIGtleXMuaXYpXG59XG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJcbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXJpdiA9IGNyZWF0ZURlY2lwaGVyaXZcbiIsInZhciBhZXMgPSByZXF1aXJlKCcuL2FlcycpXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnY2lwaGVyLWJhc2UnKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIG1vZGVzID0gcmVxdWlyZSgnLi9tb2RlcycpXG52YXIgZWJ0ayA9IHJlcXVpcmUoJ2V2cF9ieXRlc3Rva2V5JylcbnZhciBTdHJlYW1DaXBoZXIgPSByZXF1aXJlKCcuL3N0cmVhbUNpcGhlcicpXG52YXIgQXV0aENpcGhlciA9IHJlcXVpcmUoJy4vYXV0aENpcGhlcicpXG5pbmhlcml0cyhDaXBoZXIsIFRyYW5zZm9ybSlcbmZ1bmN0aW9uIENpcGhlciAobW9kZSwga2V5LCBpdikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2lwaGVyKSkge1xuICAgIHJldHVybiBuZXcgQ2lwaGVyKG1vZGUsIGtleSwgaXYpXG4gIH1cbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcbiAgdGhpcy5fY2FjaGUgPSBuZXcgU3BsaXR0ZXIoKVxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHRoaXMuX3ByZXYgPSBuZXcgQnVmZmVyKGl2Lmxlbmd0aClcbiAgaXYuY29weSh0aGlzLl9wcmV2KVxuICB0aGlzLl9tb2RlID0gbW9kZVxuICB0aGlzLl9hdXRvcGFkZGluZyA9IHRydWVcbn1cbkNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuX2NhY2hlLmFkZChkYXRhKVxuICB2YXIgY2h1bmtcbiAgdmFyIHRoaW5nXG4gIHZhciBvdXQgPSBbXVxuICB3aGlsZSAoKGNodW5rID0gdGhpcy5fY2FjaGUuZ2V0KCkpKSB7XG4gICAgdGhpbmcgPSB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmspXG4gICAgb3V0LnB1c2godGhpbmcpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQob3V0KVxufVxuQ2lwaGVyLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjaHVuayA9IHRoaXMuX2NhY2hlLmZsdXNoKClcbiAgaWYgKHRoaXMuX2F1dG9wYWRkaW5nKSB7XG4gICAgY2h1bmsgPSB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmspXG4gICAgdGhpcy5fY2lwaGVyLnNjcnViKClcbiAgICByZXR1cm4gY2h1bmtcbiAgfSBlbHNlIGlmIChjaHVuay50b1N0cmluZygnaGV4JykgIT09ICcxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCcpIHtcbiAgICB0aGlzLl9jaXBoZXIuc2NydWIoKVxuICAgIHRocm93IG5ldyBFcnJvcignZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoJylcbiAgfVxufVxuQ2lwaGVyLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZyA9IGZ1bmN0aW9uIChzZXRUbykge1xuICB0aGlzLl9hdXRvcGFkZGluZyA9ICEhc2V0VG9cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gU3BsaXR0ZXIgKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3BsaXR0ZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBTcGxpdHRlcigpXG4gIH1cbiAgdGhpcy5jYWNoZSA9IG5ldyBCdWZmZXIoJycpXG59XG5TcGxpdHRlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIGRhdGFdKVxufVxuXG5TcGxpdHRlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5jYWNoZS5sZW5ndGggPiAxNSkge1xuICAgIHZhciBvdXQgPSB0aGlzLmNhY2hlLnNsaWNlKDAsIDE2KVxuICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlLnNsaWNlKDE2KVxuICAgIHJldHVybiBvdXRcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuU3BsaXR0ZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbGVuID0gMTYgLSB0aGlzLmNhY2hlLmxlbmd0aFxuICB2YXIgcGFkQnVmZiA9IG5ldyBCdWZmZXIobGVuKVxuXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHBhZEJ1ZmYud3JpdGVVSW50OChsZW4sIGkpXG4gIH1cbiAgdmFyIG91dCA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIHBhZEJ1ZmZdKVxuICByZXR1cm4gb3V0XG59XG52YXIgbW9kZWxpc3QgPSB7XG4gIEVDQjogcmVxdWlyZSgnLi9tb2Rlcy9lY2InKSxcbiAgQ0JDOiByZXF1aXJlKCcuL21vZGVzL2NiYycpLFxuICBDRkI6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiJyksXG4gIENGQjg6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiOCcpLFxuICBDRkIxOiByZXF1aXJlKCcuL21vZGVzL2NmYjEnKSxcbiAgT0ZCOiByZXF1aXJlKCcuL21vZGVzL29mYicpLFxuICBDVFI6IHJlcXVpcmUoJy4vbW9kZXMvY3RyJyksXG4gIEdDTTogcmVxdWlyZSgnLi9tb2Rlcy9jdHInKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDaXBoZXJpdiAoc3VpdGUsIHBhc3N3b3JkLCBpdikge1xuICB2YXIgY29uZmlnID0gbW9kZXNbc3VpdGUudG9Mb3dlckNhc2UoKV1cbiAgaWYgKCFjb25maWcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG4gIGlmICh0eXBlb2YgaXYgPT09ICdzdHJpbmcnKSB7XG4gICAgaXYgPSBuZXcgQnVmZmVyKGl2KVxuICB9XG4gIGlmICh0eXBlb2YgcGFzc3dvcmQgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFzc3dvcmQgPSBuZXcgQnVmZmVyKHBhc3N3b3JkKVxuICB9XG4gIGlmIChwYXNzd29yZC5sZW5ndGggIT09IGNvbmZpZy5rZXkgLyA4KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBrZXkgbGVuZ3RoICcgKyBwYXNzd29yZC5sZW5ndGgpXG4gIH1cbiAgaWYgKGl2Lmxlbmd0aCAhPT0gY29uZmlnLml2KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBpdiBsZW5ndGggJyArIGl2Lmxlbmd0aClcbiAgfVxuICBpZiAoY29uZmlnLnR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1DaXBoZXIobW9kZWxpc3RbY29uZmlnLm1vZGVdLCBwYXNzd29yZCwgaXYpXG4gIH0gZWxzZSBpZiAoY29uZmlnLnR5cGUgPT09ICdhdXRoJykge1xuICAgIHJldHVybiBuZXcgQXV0aENpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdilcbiAgfVxuICByZXR1cm4gbmV3IENpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdilcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNpcGhlciAoc3VpdGUsIHBhc3N3b3JkKSB7XG4gIHZhciBjb25maWcgPSBtb2Rlc1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgdmFyIGtleXMgPSBlYnRrKHBhc3N3b3JkLCBmYWxzZSwgY29uZmlnLmtleSwgY29uZmlnLml2KVxuICByZXR1cm4gY3JlYXRlQ2lwaGVyaXYoc3VpdGUsIGtleXMua2V5LCBrZXlzLml2KVxufVxuXG5leHBvcnRzLmNyZWF0ZUNpcGhlcml2ID0gY3JlYXRlQ2lwaGVyaXZcbmV4cG9ydHMuY3JlYXRlQ2lwaGVyID0gY3JlYXRlQ2lwaGVyXG4iLCJ2YXIgemVyb3MgPSBuZXcgQnVmZmVyKDE2KVxuemVyb3MuZmlsbCgwKVxubW9kdWxlLmV4cG9ydHMgPSBHSEFTSFxuZnVuY3Rpb24gR0hBU0ggKGtleSkge1xuICB0aGlzLmggPSBrZXlcbiAgdGhpcy5zdGF0ZSA9IG5ldyBCdWZmZXIoMTYpXG4gIHRoaXMuc3RhdGUuZmlsbCgwKVxuICB0aGlzLmNhY2hlID0gbmV3IEJ1ZmZlcignJylcbn1cbi8vIGZyb20gaHR0cDovL2JpdHdpc2VzaGlmdGxlZnQuZ2l0aHViLmlvL3NqY2wvZG9jL3N5bWJvbHMvc3JjL2NvcmVfZ2NtLmpzLmh0bWxcbi8vIGJ5IEp1aG8gVsOkaMOkLUhlcnR0dWFcbkdIQVNILnByb3RvdHlwZS5naGFzaCA9IGZ1bmN0aW9uIChibG9jaykge1xuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBibG9jay5sZW5ndGgpIHtcbiAgICB0aGlzLnN0YXRlW2ldIF49IGJsb2NrW2ldXG4gIH1cbiAgdGhpcy5fbXVsdGlwbHkoKVxufVxuXG5HSEFTSC5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgVmkgPSB0b0FycmF5KHRoaXMuaClcbiAgdmFyIFppID0gWzAsIDAsIDAsIDBdXG4gIHZhciBqLCB4aSwgbHNiX1ZpXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IDEyOCkge1xuICAgIHhpID0gKHRoaXMuc3RhdGVbfn4oaSAvIDgpXSAmICgxIDw8ICg3IC0gaSAlIDgpKSkgIT09IDBcbiAgICBpZiAoeGkpIHtcbiAgICAgIC8vIFpfaSsxID0gWl9pIF4gVl9pXG4gICAgICBaaSA9IHhvcihaaSwgVmkpXG4gICAgfVxuXG4gICAgLy8gU3RvcmUgdGhlIHZhbHVlIG9mIExTQihWX2kpXG4gICAgbHNiX1ZpID0gKFZpWzNdICYgMSkgIT09IDBcblxuICAgIC8vIFZfaSsxID0gVl9pID4+IDFcbiAgICBmb3IgKGogPSAzOyBqID4gMDsgai0tKSB7XG4gICAgICBWaVtqXSA9IChWaVtqXSA+Pj4gMSkgfCAoKFZpW2ogLSAxXSAmIDEpIDw8IDMxKVxuICAgIH1cbiAgICBWaVswXSA9IFZpWzBdID4+PiAxXG5cbiAgICAvLyBJZiBMU0IoVl9pKSBpcyAxLCBWX2krMSA9IChWX2kgPj4gMSkgXiBSXG4gICAgaWYgKGxzYl9WaSkge1xuICAgICAgVmlbMF0gPSBWaVswXSBeICgweGUxIDw8IDI0KVxuICAgIH1cbiAgfVxuICB0aGlzLnN0YXRlID0gZnJvbUFycmF5KFppKVxufVxuR0hBU0gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgdGhpcy5jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIGJ1Zl0pXG4gIHZhciBjaHVua1xuICB3aGlsZSAodGhpcy5jYWNoZS5sZW5ndGggPj0gMTYpIHtcbiAgICBjaHVuayA9IHRoaXMuY2FjaGUuc2xpY2UoMCwgMTYpXG4gICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuc2xpY2UoMTYpXG4gICAgdGhpcy5naGFzaChjaHVuaylcbiAgfVxufVxuR0hBU0gucHJvdG90eXBlLmZpbmFsID0gZnVuY3Rpb24gKGFibCwgYmwpIHtcbiAgaWYgKHRoaXMuY2FjaGUubGVuZ3RoKSB7XG4gICAgdGhpcy5naGFzaChCdWZmZXIuY29uY2F0KFt0aGlzLmNhY2hlLCB6ZXJvc10sIDE2KSlcbiAgfVxuICB0aGlzLmdoYXNoKGZyb21BcnJheShbXG4gICAgMCwgYWJsLFxuICAgIDAsIGJsXG4gIF0pKVxuICByZXR1cm4gdGhpcy5zdGF0ZVxufVxuXG5mdW5jdGlvbiB0b0FycmF5IChidWYpIHtcbiAgcmV0dXJuIFtcbiAgICBidWYucmVhZFVJbnQzMkJFKDApLFxuICAgIGJ1Zi5yZWFkVUludDMyQkUoNCksXG4gICAgYnVmLnJlYWRVSW50MzJCRSg4KSxcbiAgICBidWYucmVhZFVJbnQzMkJFKDEyKVxuICBdXG59XG5mdW5jdGlvbiBmcm9tQXJyYXkgKG91dCkge1xuICBvdXQgPSBvdXQubWFwKGZpeHVwX3VpbnQzMilcbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoMTYpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFswXSwgMClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzFdLCA0KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMl0sIDgpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFszXSwgMTIpXG4gIHJldHVybiBidWZcbn1cbnZhciB1aW50X21heCA9IE1hdGgucG93KDIsIDMyKVxuZnVuY3Rpb24gZml4dXBfdWludDMyICh4KSB7XG4gIHZhciByZXQsIHhfcG9zXG4gIHJldCA9IHggPiB1aW50X21heCB8fCB4IDwgMCA/ICh4X3BvcyA9IE1hdGguYWJzKHgpICUgdWludF9tYXgsIHggPCAwID8gdWludF9tYXggLSB4X3BvcyA6IHhfcG9zKSA6IHhcbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24geG9yIChhLCBiKSB7XG4gIHJldHVybiBbXG4gICAgYVswXSBeIGJbMF0sXG4gICAgYVsxXSBeIGJbMV0sXG4gICAgYVsyXSBeIGJbMl0sXG4gICAgYVszXSBeIGJbM11cbiAgXVxufVxuIiwiZXhwb3J0c1snYWVzLTEyOC1lY2InXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAwLFxuICBtb2RlOiAnRUNCJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1lY2InXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxOTIsXG4gIGl2OiAwLFxuICBtb2RlOiAnRUNCJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1lY2InXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAwLFxuICBtb2RlOiAnRUNCJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jYmMnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NCQycsXG4gIHR5cGU6ICdibG9jaydcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY2JjJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdDQkMnLFxuICB0eXBlOiAnYmxvY2snXG59XG5leHBvcnRzWydhZXMtMjU2LWNiYyddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDI1NixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0JDJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzMTI4J10gPSBleHBvcnRzWydhZXMtMTI4LWNiYyddXG5leHBvcnRzWydhZXMxOTInXSA9IGV4cG9ydHNbJ2Flcy0xOTItY2JjJ11cbmV4cG9ydHNbJ2FlczI1NiddID0gZXhwb3J0c1snYWVzLTI1Ni1jYmMnXVxuZXhwb3J0c1snYWVzLTEyOC1jZmInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTkyLWNmYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY2ZiJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMjU2LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jZmI4J10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTI4LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkI4JyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY2ZiOCddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCOCcsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMjU2LWNmYjgnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQjgnLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jZmIxJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTI4LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkIxJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY2ZiMSddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCMScsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMjU2LWNmYjEnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQjEnLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1vZmInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ09GQicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTkyLW9mYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnT0ZCJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtb2ZiJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMjU2LFxuICBpdjogMTYsXG4gIG1vZGU6ICdPRkInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1jdHInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NUUicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTkyLWN0ciddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ1RSJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY3RyJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMjU2LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDVFInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTEyOC1nY20nXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxMixcbiAgbW9kZTogJ0dDTScsXG4gIHR5cGU6ICdhdXRoJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1nY20nXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxOTIsXG4gIGl2OiAxMixcbiAgbW9kZTogJ0dDTScsXG4gIHR5cGU6ICdhdXRoJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1nY20nXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxMixcbiAgbW9kZTogJ0dDTScsXG4gIHR5cGU6ICdhdXRoJ1xufVxuIiwidmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxuXG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgYmxvY2spIHtcbiAgdmFyIGRhdGEgPSB4b3IoYmxvY2ssIHNlbGYuX3ByZXYpXG5cbiAgc2VsZi5fcHJldiA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soZGF0YSlcbiAgcmV0dXJuIHNlbGYuX3ByZXZcbn1cblxuZXhwb3J0cy5kZWNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGJsb2NrKSB7XG4gIHZhciBwYWQgPSBzZWxmLl9wcmV2XG5cbiAgc2VsZi5fcHJldiA9IGJsb2NrXG4gIHZhciBvdXQgPSBzZWxmLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGJsb2NrKVxuXG4gIHJldHVybiB4b3Iob3V0LCBwYWQpXG59XG4iLCJ2YXIgeG9yID0gcmVxdWlyZSgnYnVmZmVyLXhvcicpXG5cbmV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBkYXRhLCBkZWNyeXB0KSB7XG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKCcnKVxuICB2YXIgbGVuXG5cbiAgd2hpbGUgKGRhdGEubGVuZ3RoKSB7XG4gICAgaWYgKHNlbGYuX2NhY2hlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc2VsZi5fY2FjaGUgPSBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHNlbGYuX3ByZXYpXG4gICAgICBzZWxmLl9wcmV2ID0gbmV3IEJ1ZmZlcignJylcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5fY2FjaGUubGVuZ3RoIDw9IGRhdGEubGVuZ3RoKSB7XG4gICAgICBsZW4gPSBzZWxmLl9jYWNoZS5sZW5ndGhcbiAgICAgIG91dCA9IEJ1ZmZlci5jb25jYXQoW291dCwgZW5jcnlwdFN0YXJ0KHNlbGYsIGRhdGEuc2xpY2UoMCwgbGVuKSwgZGVjcnlwdCldKVxuICAgICAgZGF0YSA9IGRhdGEuc2xpY2UobGVuKVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgPSBCdWZmZXIuY29uY2F0KFtvdXQsIGVuY3J5cHRTdGFydChzZWxmLCBkYXRhLCBkZWNyeXB0KV0pXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cbmZ1bmN0aW9uIGVuY3J5cHRTdGFydCAoc2VsZiwgZGF0YSwgZGVjcnlwdCkge1xuICB2YXIgbGVuID0gZGF0YS5sZW5ndGhcbiAgdmFyIG91dCA9IHhvcihkYXRhLCBzZWxmLl9jYWNoZSlcbiAgc2VsZi5fY2FjaGUgPSBzZWxmLl9jYWNoZS5zbGljZShsZW4pXG4gIHNlbGYuX3ByZXYgPSBCdWZmZXIuY29uY2F0KFtzZWxmLl9wcmV2LCBkZWNyeXB0ID8gZGF0YSA6IG91dF0pXG4gIHJldHVybiBvdXRcbn1cbiIsImZ1bmN0aW9uIGVuY3J5cHRCeXRlIChzZWxmLCBieXRlUGFyYW0sIGRlY3J5cHQpIHtcbiAgdmFyIHBhZFxuICB2YXIgaSA9IC0xXG4gIHZhciBsZW4gPSA4XG4gIHZhciBvdXQgPSAwXG4gIHZhciBiaXQsIHZhbHVlXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBwYWQgPSBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHNlbGYuX3ByZXYpXG4gICAgYml0ID0gKGJ5dGVQYXJhbSAmICgxIDw8ICg3IC0gaSkpKSA/IDB4ODAgOiAwXG4gICAgdmFsdWUgPSBwYWRbMF0gXiBiaXRcbiAgICBvdXQgKz0gKCh2YWx1ZSAmIDB4ODApID4+IChpICUgOCkpXG4gICAgc2VsZi5fcHJldiA9IHNoaWZ0SW4oc2VsZi5fcHJldiwgZGVjcnlwdCA/IGJpdCA6IHZhbHVlKVxuICB9XG4gIHJldHVybiBvdXRcbn1cbmV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBjaHVuaywgZGVjcnlwdCkge1xuICB2YXIgbGVuID0gY2h1bmsubGVuZ3RoXG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGxlbilcbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgb3V0W2ldID0gZW5jcnlwdEJ5dGUoc2VsZiwgY2h1bmtbaV0sIGRlY3J5cHQpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuZnVuY3Rpb24gc2hpZnRJbiAoYnVmZmVyLCB2YWx1ZSkge1xuICB2YXIgbGVuID0gYnVmZmVyLmxlbmd0aFxuICB2YXIgaSA9IC0xXG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGJ1ZmZlci5sZW5ndGgpXG4gIGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW2J1ZmZlciwgbmV3IEJ1ZmZlcihbdmFsdWVdKV0pXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBvdXRbaV0gPSBidWZmZXJbaV0gPDwgMSB8IGJ1ZmZlcltpICsgMV0gPj4gKDcpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuIiwiZnVuY3Rpb24gZW5jcnlwdEJ5dGUgKHNlbGYsIGJ5dGVQYXJhbSwgZGVjcnlwdCkge1xuICB2YXIgcGFkID0gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhzZWxmLl9wcmV2KVxuICB2YXIgb3V0ID0gcGFkWzBdIF4gYnl0ZVBhcmFtXG4gIHNlbGYuX3ByZXYgPSBCdWZmZXIuY29uY2F0KFtzZWxmLl9wcmV2LnNsaWNlKDEpLCBuZXcgQnVmZmVyKFtkZWNyeXB0ID8gYnl0ZVBhcmFtIDogb3V0XSldKVxuICByZXR1cm4gb3V0XG59XG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgY2h1bmssIGRlY3J5cHQpIHtcbiAgdmFyIGxlbiA9IGNodW5rLmxlbmd0aFxuICB2YXIgb3V0ID0gbmV3IEJ1ZmZlcihsZW4pXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIG91dFtpXSA9IGVuY3J5cHRCeXRlKHNlbGYsIGNodW5rW2ldLCBkZWNyeXB0KVxuICB9XG4gIHJldHVybiBvdXRcbn1cbiIsInZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcblxuZnVuY3Rpb24gaW5jcjMyIChpdikge1xuICB2YXIgbGVuID0gaXYubGVuZ3RoXG4gIHZhciBpdGVtXG4gIHdoaWxlIChsZW4tLSkge1xuICAgIGl0ZW0gPSBpdi5yZWFkVUludDgobGVuKVxuICAgIGlmIChpdGVtID09PSAyNTUpIHtcbiAgICAgIGl2LndyaXRlVUludDgoMCwgbGVuKVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtKytcbiAgICAgIGl2LndyaXRlVUludDgoaXRlbSwgbGVuKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmxvY2sgKHNlbGYpIHtcbiAgdmFyIG91dCA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldilcbiAgaW5jcjMyKHNlbGYuX3ByZXYpXG4gIHJldHVybiBvdXRcbn1cblxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGNodW5rKSB7XG4gIHdoaWxlIChzZWxmLl9jYWNoZS5sZW5ndGggPCBjaHVuay5sZW5ndGgpIHtcbiAgICBzZWxmLl9jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuX2NhY2hlLCBnZXRCbG9jayhzZWxmKV0pXG4gIH1cbiAgdmFyIHBhZCA9IHNlbGYuX2NhY2hlLnNsaWNlKDAsIGNodW5rLmxlbmd0aClcbiAgc2VsZi5fY2FjaGUgPSBzZWxmLl9jYWNoZS5zbGljZShjaHVuay5sZW5ndGgpXG4gIHJldHVybiB4b3IoY2h1bmssIHBhZClcbn1cbiIsImV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBibG9jaykge1xuICByZXR1cm4gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhibG9jaylcbn1cbmV4cG9ydHMuZGVjcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBibG9jaykge1xuICByZXR1cm4gc2VsZi5fY2lwaGVyLmRlY3J5cHRCbG9jayhibG9jaylcbn1cbiIsInZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcblxuZnVuY3Rpb24gZ2V0QmxvY2sgKHNlbGYpIHtcbiAgc2VsZi5fcHJldiA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldilcbiAgcmV0dXJuIHNlbGYuX3ByZXZcbn1cblxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGNodW5rKSB7XG4gIHdoaWxlIChzZWxmLl9jYWNoZS5sZW5ndGggPCBjaHVuay5sZW5ndGgpIHtcbiAgICBzZWxmLl9jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuX2NhY2hlLCBnZXRCbG9jayhzZWxmKV0pXG4gIH1cblxuICB2YXIgcGFkID0gc2VsZi5fY2FjaGUuc2xpY2UoMCwgY2h1bmsubGVuZ3RoKVxuICBzZWxmLl9jYWNoZSA9IHNlbGYuX2NhY2hlLnNsaWNlKGNodW5rLmxlbmd0aClcbiAgcmV0dXJuIHhvcihjaHVuaywgcGFkKVxufVxuIiwidmFyIGFlcyA9IHJlcXVpcmUoJy4vYWVzJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbmluaGVyaXRzKFN0cmVhbUNpcGhlciwgVHJhbnNmb3JtKVxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW1DaXBoZXJcbmZ1bmN0aW9uIFN0cmVhbUNpcGhlciAobW9kZSwga2V5LCBpdiwgZGVjcnlwdCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RyZWFtQ2lwaGVyKSkge1xuICAgIHJldHVybiBuZXcgU3RyZWFtQ2lwaGVyKG1vZGUsIGtleSwgaXYpXG4gIH1cbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcbiAgdGhpcy5fY2lwaGVyID0gbmV3IGFlcy5BRVMoa2V5KVxuICB0aGlzLl9wcmV2ID0gbmV3IEJ1ZmZlcihpdi5sZW5ndGgpXG4gIHRoaXMuX2NhY2hlID0gbmV3IEJ1ZmZlcignJylcbiAgdGhpcy5fc2VjQ2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxuICB0aGlzLl9kZWNyeXB0ID0gZGVjcnlwdFxuICBpdi5jb3B5KHRoaXMuX3ByZXYpXG4gIHRoaXMuX21vZGUgPSBtb2RlXG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgcmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLCBjaHVuaywgdGhpcy5fZGVjcnlwdClcbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9jaXBoZXIuc2NydWIoKVxufVxuIiwidmFyIGVidGsgPSByZXF1aXJlKCdldnBfYnl0ZXN0b2tleScpXG52YXIgYWVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1hZXMvYnJvd3NlcicpXG52YXIgREVTID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1kZXMnKVxudmFyIGRlc01vZGVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1kZXMvbW9kZXMnKVxudmFyIGFlc01vZGVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1hZXMvbW9kZXMnKVxuZnVuY3Rpb24gY3JlYXRlQ2lwaGVyIChzdWl0ZSwgcGFzc3dvcmQpIHtcbiAgdmFyIGtleUxlbiwgaXZMZW5cbiAgc3VpdGUgPSBzdWl0ZS50b0xvd2VyQ2FzZSgpXG4gIGlmIChhZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICBrZXlMZW4gPSBhZXNNb2Rlc1tzdWl0ZV0ua2V5XG4gICAgaXZMZW4gPSBhZXNNb2Rlc1tzdWl0ZV0uaXZcbiAgfSBlbHNlIGlmIChkZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICBrZXlMZW4gPSBkZXNNb2Rlc1tzdWl0ZV0ua2V5ICogOFxuICAgIGl2TGVuID0gZGVzTW9kZXNbc3VpdGVdLml2XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbiAgfVxuICB2YXIga2V5cyA9IGVidGsocGFzc3dvcmQsIGZhbHNlLCBrZXlMZW4sIGl2TGVuKVxuICByZXR1cm4gY3JlYXRlQ2lwaGVyaXYoc3VpdGUsIGtleXMua2V5LCBrZXlzLml2KVxufVxuZnVuY3Rpb24gY3JlYXRlRGVjaXBoZXIgKHN1aXRlLCBwYXNzd29yZCkge1xuICB2YXIga2V5TGVuLCBpdkxlblxuICBzdWl0ZSA9IHN1aXRlLnRvTG93ZXJDYXNlKClcbiAgaWYgKGFlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGFlc01vZGVzW3N1aXRlXS5rZXlcbiAgICBpdkxlbiA9IGFlc01vZGVzW3N1aXRlXS5pdlxuICB9IGVsc2UgaWYgKGRlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGRlc01vZGVzW3N1aXRlXS5rZXkgKiA4XG4gICAgaXZMZW4gPSBkZXNNb2Rlc1tzdWl0ZV0uaXZcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG4gIHZhciBrZXlzID0gZWJ0ayhwYXNzd29yZCwgZmFsc2UsIGtleUxlbiwgaXZMZW4pXG4gIHJldHVybiBjcmVhdGVEZWNpcGhlcml2KHN1aXRlLCBrZXlzLmtleSwga2V5cy5pdilcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2lwaGVyaXYgKHN1aXRlLCBrZXksIGl2KSB7XG4gIHN1aXRlID0gc3VpdGUudG9Mb3dlckNhc2UoKVxuICBpZiAoYWVzTW9kZXNbc3VpdGVdKSB7XG4gICAgcmV0dXJuIGFlcy5jcmVhdGVDaXBoZXJpdihzdWl0ZSwga2V5LCBpdilcbiAgfSBlbHNlIGlmIChkZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICByZXR1cm4gbmV3IERFUyh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGl2OiBpdixcbiAgICAgIG1vZGU6IHN1aXRlXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlcml2IChzdWl0ZSwga2V5LCBpdikge1xuICBzdWl0ZSA9IHN1aXRlLnRvTG93ZXJDYXNlKClcbiAgaWYgKGFlc01vZGVzW3N1aXRlXSkge1xuICAgIHJldHVybiBhZXMuY3JlYXRlRGVjaXBoZXJpdihzdWl0ZSwga2V5LCBpdilcbiAgfSBlbHNlIGlmIChkZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICByZXR1cm4gbmV3IERFUyh7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIGl2OiBpdixcbiAgICAgIG1vZGU6IHN1aXRlLFxuICAgICAgZGVjcnlwdDogdHJ1ZVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbiAgfVxufVxuZXhwb3J0cy5jcmVhdGVDaXBoZXIgPSBleHBvcnRzLkNpcGhlciA9IGNyZWF0ZUNpcGhlclxuZXhwb3J0cy5jcmVhdGVDaXBoZXJpdiA9IGV4cG9ydHMuQ2lwaGVyaXYgPSBjcmVhdGVDaXBoZXJpdlxuZXhwb3J0cy5jcmVhdGVEZWNpcGhlciA9IGV4cG9ydHMuRGVjaXBoZXIgPSBjcmVhdGVEZWNpcGhlclxuZXhwb3J0cy5jcmVhdGVEZWNpcGhlcml2ID0gZXhwb3J0cy5EZWNpcGhlcml2ID0gY3JlYXRlRGVjaXBoZXJpdlxuZnVuY3Rpb24gZ2V0Q2lwaGVycyAoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhkZXNNb2RlcykuY29uY2F0KGFlcy5nZXRDaXBoZXJzKCkpXG59XG5leHBvcnRzLmxpc3RDaXBoZXJzID0gZXhwb3J0cy5nZXRDaXBoZXJzID0gZ2V0Q2lwaGVyc1xuIiwidmFyIENpcGhlckJhc2UgPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgZGVzID0gcmVxdWlyZSgnZGVzLmpzJylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxudmFyIG1vZGVzID0ge1xuICAnZGVzLWVkZTMtY2JjJzogZGVzLkNCQy5pbnN0YW50aWF0ZShkZXMuRURFKSxcbiAgJ2Rlcy1lZGUzJzogZGVzLkVERSxcbiAgJ2Rlcy1lZGUtY2JjJzogZGVzLkNCQy5pbnN0YW50aWF0ZShkZXMuRURFKSxcbiAgJ2Rlcy1lZGUnOiBkZXMuRURFLFxuICAnZGVzLWNiYyc6IGRlcy5DQkMuaW5zdGFudGlhdGUoZGVzLkRFUyksXG4gICdkZXMtZWNiJzogZGVzLkRFU1xufVxubW9kZXMuZGVzID0gbW9kZXNbJ2Rlcy1jYmMnXVxubW9kZXMuZGVzMyA9IG1vZGVzWydkZXMtZWRlMy1jYmMnXVxubW9kdWxlLmV4cG9ydHMgPSBERVNcbmluaGVyaXRzKERFUywgQ2lwaGVyQmFzZSlcbmZ1bmN0aW9uIERFUyAob3B0cykge1xuICBDaXBoZXJCYXNlLmNhbGwodGhpcylcbiAgdmFyIG1vZGVOYW1lID0gb3B0cy5tb2RlLnRvTG93ZXJDYXNlKClcbiAgdmFyIG1vZGUgPSBtb2Rlc1ttb2RlTmFtZV1cbiAgdmFyIHR5cGVcbiAgaWYgKG9wdHMuZGVjcnlwdCkge1xuICAgIHR5cGUgPSAnZGVjcnlwdCdcbiAgfSBlbHNlIHtcbiAgICB0eXBlID0gJ2VuY3J5cHQnXG4gIH1cbiAgdmFyIGtleSA9IG9wdHMua2V5XG4gIGlmIChtb2RlTmFtZSA9PT0gJ2Rlcy1lZGUnIHx8IG1vZGVOYW1lID09PSAnZGVzLWVkZS1jYmMnKSB7XG4gICAga2V5ID0gQnVmZmVyLmNvbmNhdChba2V5LCBrZXkuc2xpY2UoMCwgOCldKVxuICB9XG4gIHZhciBpdiA9IG9wdHMuaXZcbiAgdGhpcy5fZGVzID0gbW9kZS5jcmVhdGUoe1xuICAgIGtleToga2V5LFxuICAgIGl2OiBpdixcbiAgICB0eXBlOiB0eXBlXG4gIH0pXG59XG5ERVMucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICByZXR1cm4gbmV3IEJ1ZmZlcih0aGlzLl9kZXMudXBkYXRlKGRhdGEpKVxufVxuREVTLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgQnVmZmVyKHRoaXMuX2Rlcy5maW5hbCgpKVxufVxuIiwiZXhwb3J0c1snZGVzLWVjYiddID0ge1xuICBrZXk6IDgsXG4gIGl2OiAwXG59XG5leHBvcnRzWydkZXMtY2JjJ10gPSBleHBvcnRzLmRlcyA9IHtcbiAga2V5OiA4LFxuICBpdjogOFxufVxuZXhwb3J0c1snZGVzLWVkZTMtY2JjJ10gPSBleHBvcnRzLmRlczMgPSB7XG4gIGtleTogMjQsXG4gIGl2OiA4XG59XG5leHBvcnRzWydkZXMtZWRlMyddID0ge1xuICBrZXk6IDI0LFxuICBpdjogMFxufVxuZXhwb3J0c1snZGVzLWVkZS1jYmMnXSA9IHtcbiAga2V5OiAxNixcbiAgaXY6IDhcbn1cbmV4cG9ydHNbJ2Rlcy1lZGUnXSA9IHtcbiAga2V5OiAxNixcbiAgaXY6IDBcbn1cbiIsInZhciBibiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgcmFuZG9tQnl0ZXMgPSByZXF1aXJlKCdyYW5kb21ieXRlcycpO1xubW9kdWxlLmV4cG9ydHMgPSBjcnQ7XG5mdW5jdGlvbiBibGluZChwcml2KSB7XG4gIHZhciByID0gZ2V0cihwcml2KTtcbiAgdmFyIGJsaW5kZXIgPSByLnRvUmVkKGJuLm1vbnQocHJpdi5tb2R1bHVzKSlcbiAgLnJlZFBvdyhuZXcgYm4ocHJpdi5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKTtcbiAgcmV0dXJuIHtcbiAgICBibGluZGVyOiBibGluZGVyLFxuICAgIHVuYmxpbmRlcjpyLmludm0ocHJpdi5tb2R1bHVzKVxuICB9O1xufVxuZnVuY3Rpb24gY3J0KG1zZywgcHJpdikge1xuICB2YXIgYmxpbmRzID0gYmxpbmQocHJpdik7XG4gIHZhciBsZW4gPSBwcml2Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICB2YXIgbW9kID0gYm4ubW9udChwcml2Lm1vZHVsdXMpO1xuICB2YXIgYmxpbmRlZCA9IG5ldyBibihtc2cpLm11bChibGluZHMuYmxpbmRlcikudW1vZChwcml2Lm1vZHVsdXMpO1xuICB2YXIgYzEgPSBibGluZGVkLnRvUmVkKGJuLm1vbnQocHJpdi5wcmltZTEpKTtcbiAgdmFyIGMyID0gYmxpbmRlZC50b1JlZChibi5tb250KHByaXYucHJpbWUyKSk7XG4gIHZhciBxaW52ID0gcHJpdi5jb2VmZmljaWVudDtcbiAgdmFyIHAgPSBwcml2LnByaW1lMTtcbiAgdmFyIHEgPSBwcml2LnByaW1lMjtcbiAgdmFyIG0xID0gYzEucmVkUG93KHByaXYuZXhwb25lbnQxKTtcbiAgdmFyIG0yID0gYzIucmVkUG93KHByaXYuZXhwb25lbnQyKTtcbiAgbTEgPSBtMS5mcm9tUmVkKCk7XG4gIG0yID0gbTIuZnJvbVJlZCgpO1xuICB2YXIgaCA9IG0xLmlzdWIobTIpLmltdWwocWludikudW1vZChwKTtcbiAgaC5pbXVsKHEpO1xuICBtMi5pYWRkKGgpO1xuICByZXR1cm4gbmV3IEJ1ZmZlcihtMi5pbXVsKGJsaW5kcy51bmJsaW5kZXIpLnVtb2QocHJpdi5tb2R1bHVzKS50b0FycmF5KGZhbHNlLCBsZW4pKTtcbn1cbmNydC5nZXRyID0gZ2V0cjtcbmZ1bmN0aW9uIGdldHIocHJpdikge1xuICB2YXIgbGVuID0gcHJpdi5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIHIgPSBuZXcgYm4ocmFuZG9tQnl0ZXMobGVuKSk7XG4gIHdoaWxlIChyLmNtcChwcml2Lm1vZHVsdXMpID49ICAwIHx8ICFyLnVtb2QocHJpdi5wcmltZTEpIHx8ICFyLnVtb2QocHJpdi5wcmltZTIpKSB7XG4gICAgciA9IG5ldyBibihyYW5kb21CeXRlcyhsZW4pKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9icm93c2VyL2FsZ29yaXRobXMuanNvbicpXG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwic2hhMjI0V2l0aFJTQUVuY3J5cHRpb25cIjoge1xuICAgIFwic2lnblwiOiBcInJzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTIyNFwiLFxuICAgIFwiaWRcIjogXCIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxY1wiXG4gIH0sXG4gIFwiUlNBLVNIQTIyNFwiOiB7XG4gICAgXCJzaWduXCI6IFwiZWNkc2EvcnNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMjI0XCIsXG4gICAgXCJpZFwiOiBcIjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjXCJcbiAgfSxcbiAgXCJzaGEyNTZXaXRoUlNBRW5jcnlwdGlvblwiOiB7XG4gICAgXCJzaWduXCI6IFwicnNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMjU2XCIsXG4gICAgXCJpZFwiOiBcIjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwXCJcbiAgfSxcbiAgXCJSU0EtU0hBMjU2XCI6IHtcbiAgICBcInNpZ25cIjogXCJlY2RzYS9yc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGEyNTZcIixcbiAgICBcImlkXCI6IFwiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjBcIlxuICB9LFxuICBcInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uXCI6IHtcbiAgICBcInNpZ25cIjogXCJyc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGEzODRcIixcbiAgICBcImlkXCI6IFwiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzBcIlxuICB9LFxuICBcIlJTQS1TSEEzODRcIjoge1xuICAgIFwic2lnblwiOiBcImVjZHNhL3JzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTM4NFwiLFxuICAgIFwiaWRcIjogXCIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMFwiXG4gIH0sXG4gIFwic2hhNTEyV2l0aFJTQUVuY3J5cHRpb25cIjoge1xuICAgIFwic2lnblwiOiBcInJzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTUxMlwiLFxuICAgIFwiaWRcIjogXCIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MFwiXG4gIH0sXG4gIFwiUlNBLVNIQTUxMlwiOiB7XG4gICAgXCJzaWduXCI6IFwiZWNkc2EvcnNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhNTEyXCIsXG4gICAgXCJpZFwiOiBcIjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwXCJcbiAgfSxcbiAgXCJSU0EtU0hBMVwiOiB7XG4gICAgXCJzaWduXCI6IFwicnNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMVwiLFxuICAgIFwiaWRcIjogXCIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTRcIlxuICB9LFxuICBcImVjZHNhLXdpdGgtU0hBMVwiOiB7XG4gICAgXCJzaWduXCI6IFwiZWNkc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGExXCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwic2hhMjU2XCI6IHtcbiAgICBcInNpZ25cIjogXCJlY2RzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTI1NlwiLFxuICAgIFwiaWRcIjogXCJcIlxuICB9LFxuICBcInNoYTIyNFwiOiB7XG4gICAgXCJzaWduXCI6IFwiZWNkc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGEyMjRcIixcbiAgICBcImlkXCI6IFwiXCJcbiAgfSxcbiAgXCJzaGEzODRcIjoge1xuICAgIFwic2lnblwiOiBcImVjZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMzg0XCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwic2hhNTEyXCI6IHtcbiAgICBcInNpZ25cIjogXCJlY2RzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTUxMlwiLFxuICAgIFwiaWRcIjogXCJcIlxuICB9LFxuICBcIkRTQS1TSEFcIjoge1xuICAgIFwic2lnblwiOiBcImRzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTFcIixcbiAgICBcImlkXCI6IFwiXCJcbiAgfSxcbiAgXCJEU0EtU0hBMVwiOiB7XG4gICAgXCJzaWduXCI6IFwiZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMVwiLFxuICAgIFwiaWRcIjogXCJcIlxuICB9LFxuICBcIkRTQVwiOiB7XG4gICAgXCJzaWduXCI6IFwiZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMVwiLFxuICAgIFwiaWRcIjogXCJcIlxuICB9LFxuICBcIkRTQS1XSVRILVNIQTIyNFwiOiB7XG4gICAgXCJzaWduXCI6IFwiZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMjI0XCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwiRFNBLVNIQTIyNFwiOiB7XG4gICAgXCJzaWduXCI6IFwiZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMjI0XCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwiRFNBLVdJVEgtU0hBMjU2XCI6IHtcbiAgICBcInNpZ25cIjogXCJkc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGEyNTZcIixcbiAgICBcImlkXCI6IFwiXCJcbiAgfSxcbiAgXCJEU0EtU0hBMjU2XCI6IHtcbiAgICBcInNpZ25cIjogXCJkc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGEyNTZcIixcbiAgICBcImlkXCI6IFwiXCJcbiAgfSxcbiAgXCJEU0EtV0lUSC1TSEEzODRcIjoge1xuICAgIFwic2lnblwiOiBcImRzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTM4NFwiLFxuICAgIFwiaWRcIjogXCJcIlxuICB9LFxuICBcIkRTQS1TSEEzODRcIjoge1xuICAgIFwic2lnblwiOiBcImRzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTM4NFwiLFxuICAgIFwiaWRcIjogXCJcIlxuICB9LFxuICBcIkRTQS1XSVRILVNIQTUxMlwiOiB7XG4gICAgXCJzaWduXCI6IFwiZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhNTEyXCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwiRFNBLVNIQTUxMlwiOiB7XG4gICAgXCJzaWduXCI6IFwiZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhNTEyXCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwiRFNBLVJJUEVNRDE2MFwiOiB7XG4gICAgXCJzaWduXCI6IFwiZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwicm1kMTYwXCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwicmlwZW1kMTYwV2l0aFJTQVwiOiB7XG4gICAgXCJzaWduXCI6IFwicnNhXCIsXG4gICAgXCJoYXNoXCI6IFwicm1kMTYwXCIsXG4gICAgXCJpZFwiOiBcIjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNFwiXG4gIH0sXG4gIFwiUlNBLVJJUEVNRDE2MFwiOiB7XG4gICAgXCJzaWduXCI6IFwicnNhXCIsXG4gICAgXCJoYXNoXCI6IFwicm1kMTYwXCIsXG4gICAgXCJpZFwiOiBcIjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNFwiXG4gIH0sXG4gIFwibWQ1V2l0aFJTQUVuY3J5cHRpb25cIjoge1xuICAgIFwic2lnblwiOiBcInJzYVwiLFxuICAgIFwiaGFzaFwiOiBcIm1kNVwiLFxuICAgIFwiaWRcIjogXCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTBcIlxuICB9LFxuICBcIlJTQS1NRDVcIjoge1xuICAgIFwic2lnblwiOiBcInJzYVwiLFxuICAgIFwiaGFzaFwiOiBcIm1kNVwiLFxuICAgIFwiaWRcIjogXCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTBcIlxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiMS4zLjEzMi4wLjEwXCI6IFwic2VjcDI1NmsxXCIsXG4gIFwiMS4zLjEzMi4wLjMzXCI6IFwicDIyNFwiLFxuICBcIjEuMi44NDAuMTAwNDUuMy4xLjFcIjogXCJwMTkyXCIsXG4gIFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiOiBcInAyNTZcIixcbiAgXCIxLjMuMTMyLjAuMzRcIjogXCJwMzg0XCIsXG4gIFwiMS4zLjEzMi4wLjM1XCI6IFwicDUyMVwiXG59XG4iLCJ2YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJylcbnZhciBzdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIHNpZ24gPSByZXF1aXJlKCcuL3NpZ24nKVxudmFyIHZlcmlmeSA9IHJlcXVpcmUoJy4vdmVyaWZ5JylcblxudmFyIGFsZ29yaXRobXMgPSByZXF1aXJlKCcuL2FsZ29yaXRobXMuanNvbicpXG5PYmplY3Qua2V5cyhhbGdvcml0aG1zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgYWxnb3JpdGhtc1trZXldLmlkID0gbmV3IEJ1ZmZlcihhbGdvcml0aG1zW2tleV0uaWQsICdoZXgnKVxuICBhbGdvcml0aG1zW2tleS50b0xvd2VyQ2FzZSgpXSA9IGFsZ29yaXRobXNba2V5XVxufSlcblxuZnVuY3Rpb24gU2lnbiAoYWxnb3JpdGhtKSB7XG4gIHN0cmVhbS5Xcml0YWJsZS5jYWxsKHRoaXMpXG5cbiAgdmFyIGRhdGEgPSBhbGdvcml0aG1zW2FsZ29yaXRobV1cbiAgaWYgKCFkYXRhKSB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbWVzc2FnZSBkaWdlc3QnKVxuXG4gIHRoaXMuX2hhc2hUeXBlID0gZGF0YS5oYXNoXG4gIHRoaXMuX2hhc2ggPSBjcmVhdGVIYXNoKGRhdGEuaGFzaClcbiAgdGhpcy5fdGFnID0gZGF0YS5pZFxuICB0aGlzLl9zaWduVHlwZSA9IGRhdGEuc2lnblxufVxuaW5oZXJpdHMoU2lnbiwgc3RyZWFtLldyaXRhYmxlKVxuXG5TaWduLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiBfd3JpdGUgKGRhdGEsIF8sIGRvbmUpIHtcbiAgdGhpcy5faGFzaC51cGRhdGUoZGF0YSlcbiAgZG9uZSgpXG59XG5cblNpZ24ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAoZGF0YSwgZW5jKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIGRhdGEgPSBuZXcgQnVmZmVyKGRhdGEsIGVuYylcblxuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxuICByZXR1cm4gdGhpc1xufVxuXG5TaWduLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gc2lnbk1ldGhvZCAoa2V5LCBlbmMpIHtcbiAgdGhpcy5lbmQoKVxuICB2YXIgaGFzaCA9IHRoaXMuX2hhc2guZGlnZXN0KClcbiAgdmFyIHNpZyA9IHNpZ24oaGFzaCwga2V5LCB0aGlzLl9oYXNoVHlwZSwgdGhpcy5fc2lnblR5cGUsIHRoaXMuX3RhZylcblxuICByZXR1cm4gZW5jID8gc2lnLnRvU3RyaW5nKGVuYykgOiBzaWdcbn1cblxuZnVuY3Rpb24gVmVyaWZ5IChhbGdvcml0aG0pIHtcbiAgc3RyZWFtLldyaXRhYmxlLmNhbGwodGhpcylcblxuICB2YXIgZGF0YSA9IGFsZ29yaXRobXNbYWxnb3JpdGhtXVxuICBpZiAoIWRhdGEpIHRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXNzYWdlIGRpZ2VzdCcpXG5cbiAgdGhpcy5faGFzaCA9IGNyZWF0ZUhhc2goZGF0YS5oYXNoKVxuICB0aGlzLl90YWcgPSBkYXRhLmlkXG4gIHRoaXMuX3NpZ25UeXBlID0gZGF0YS5zaWduXG59XG5pbmhlcml0cyhWZXJpZnksIHN0cmVhbS5Xcml0YWJsZSlcblxuVmVyaWZ5LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiBfd3JpdGUgKGRhdGEsIF8sIGRvbmUpIHtcbiAgdGhpcy5faGFzaC51cGRhdGUoZGF0YSlcbiAgZG9uZSgpXG59XG5cblZlcmlmeS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlIChkYXRhLCBlbmMpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgZW5jKVxuXG4gIHRoaXMuX2hhc2gudXBkYXRlKGRhdGEpXG4gIHJldHVybiB0aGlzXG59XG5cblZlcmlmeS5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5TWV0aG9kIChrZXksIHNpZywgZW5jKSB7XG4gIGlmICh0eXBlb2Ygc2lnID09PSAnc3RyaW5nJykgc2lnID0gbmV3IEJ1ZmZlcihzaWcsIGVuYylcblxuICB0aGlzLmVuZCgpXG4gIHZhciBoYXNoID0gdGhpcy5faGFzaC5kaWdlc3QoKVxuICByZXR1cm4gdmVyaWZ5KHNpZywgaGFzaCwga2V5LCB0aGlzLl9zaWduVHlwZSwgdGhpcy5fdGFnKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTaWduIChhbGdvcml0aG0pIHtcbiAgcmV0dXJuIG5ldyBTaWduKGFsZ29yaXRobSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlVmVyaWZ5IChhbGdvcml0aG0pIHtcbiAgcmV0dXJuIG5ldyBWZXJpZnkoYWxnb3JpdGhtKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU2lnbjogY3JlYXRlU2lnbixcbiAgVmVyaWZ5OiBjcmVhdGVWZXJpZnksXG4gIGNyZWF0ZVNpZ246IGNyZWF0ZVNpZ24sXG4gIGNyZWF0ZVZlcmlmeTogY3JlYXRlVmVyaWZ5XG59XG4iLCIvLyBtdWNoIG9mIHRoaXMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvc2VsZi1zaWduZWQvYmxvYi9naC1wYWdlcy9saWIvcnNhLmpzXG52YXIgY3JlYXRlSG1hYyA9IHJlcXVpcmUoJ2NyZWF0ZS1obWFjJylcbnZhciBjcnQgPSByZXF1aXJlKCdicm93c2VyaWZ5LXJzYScpXG52YXIgRUMgPSByZXF1aXJlKCdlbGxpcHRpYycpLmVjXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpXG52YXIgcGFyc2VLZXlzID0gcmVxdWlyZSgncGFyc2UtYXNuMScpXG52YXIgY3VydmVzID0gcmVxdWlyZSgnLi9jdXJ2ZXMuanNvbicpXG5cbmZ1bmN0aW9uIHNpZ24gKGhhc2gsIGtleSwgaGFzaFR5cGUsIHNpZ25UeXBlLCB0YWcpIHtcbiAgdmFyIHByaXYgPSBwYXJzZUtleXMoa2V5KVxuICBpZiAocHJpdi5jdXJ2ZSkge1xuICAgIC8vIHJzYSBrZXlzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBlY2RzYSBvbmVzIGluIG9wZW5zc2xcbiAgICBpZiAoc2lnblR5cGUgIT09ICdlY2RzYScgJiYgc2lnblR5cGUgIT09ICdlY2RzYS9yc2EnKSB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHByaXZhdGUga2V5IHR5cGUnKVxuICAgIHJldHVybiBlY1NpZ24oaGFzaCwgcHJpdilcbiAgfSBlbHNlIGlmIChwcml2LnR5cGUgPT09ICdkc2EnKSB7XG4gICAgaWYgKHNpZ25UeXBlICE9PSAnZHNhJykgdGhyb3cgbmV3IEVycm9yKCd3cm9uZyBwcml2YXRlIGtleSB0eXBlJylcbiAgICByZXR1cm4gZHNhU2lnbihoYXNoLCBwcml2LCBoYXNoVHlwZSlcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdyc2EnICYmIHNpZ25UeXBlICE9PSAnZWNkc2EvcnNhJykgdGhyb3cgbmV3IEVycm9yKCd3cm9uZyBwcml2YXRlIGtleSB0eXBlJylcbiAgfVxuICBoYXNoID0gQnVmZmVyLmNvbmNhdChbdGFnLCBoYXNoXSlcbiAgdmFyIGxlbiA9IHByaXYubW9kdWx1cy5ieXRlTGVuZ3RoKClcbiAgdmFyIHBhZCA9IFsgMCwgMSBdXG4gIHdoaWxlIChoYXNoLmxlbmd0aCArIHBhZC5sZW5ndGggKyAxIDwgbGVuKSBwYWQucHVzaCgweGZmKVxuICBwYWQucHVzaCgweDAwKVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBoYXNoLmxlbmd0aCkgcGFkLnB1c2goaGFzaFtpXSlcblxuICB2YXIgb3V0ID0gY3J0KHBhZCwgcHJpdilcbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiBlY1NpZ24gKGhhc2gsIHByaXYpIHtcbiAgdmFyIGN1cnZlSWQgPSBjdXJ2ZXNbcHJpdi5jdXJ2ZS5qb2luKCcuJyldXG4gIGlmICghY3VydmVJZCkgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGN1cnZlICcgKyBwcml2LmN1cnZlLmpvaW4oJy4nKSlcblxuICB2YXIgY3VydmUgPSBuZXcgRUMoY3VydmVJZClcbiAgdmFyIGtleSA9IGN1cnZlLmtleUZyb21Qcml2YXRlKHByaXYucHJpdmF0ZUtleSlcbiAgdmFyIG91dCA9IGtleS5zaWduKGhhc2gpXG5cbiAgcmV0dXJuIG5ldyBCdWZmZXIob3V0LnRvREVSKCkpXG59XG5cbmZ1bmN0aW9uIGRzYVNpZ24gKGhhc2gsIHByaXYsIGFsZ28pIHtcbiAgdmFyIHggPSBwcml2LnBhcmFtcy5wcml2X2tleVxuICB2YXIgcCA9IHByaXYucGFyYW1zLnBcbiAgdmFyIHEgPSBwcml2LnBhcmFtcy5xXG4gIHZhciBnID0gcHJpdi5wYXJhbXMuZ1xuICB2YXIgciA9IG5ldyBCTigwKVxuICB2YXIga1xuICB2YXIgSCA9IGJpdHMyaW50KGhhc2gsIHEpLm1vZChxKVxuICB2YXIgcyA9IGZhbHNlXG4gIHZhciBrdiA9IGdldEtleSh4LCBxLCBoYXNoLCBhbGdvKVxuICB3aGlsZSAocyA9PT0gZmFsc2UpIHtcbiAgICBrID0gbWFrZUtleShxLCBrdiwgYWxnbylcbiAgICByID0gbWFrZVIoZywgaywgcCwgcSlcbiAgICBzID0gay5pbnZtKHEpLmltdWwoSC5hZGQoeC5tdWwocikpKS5tb2QocSlcbiAgICBpZiAocy5jbXBuKDApID09PSAwKSB7XG4gICAgICBzID0gZmFsc2VcbiAgICAgIHIgPSBuZXcgQk4oMClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvREVSKHIsIHMpXG59XG5cbmZ1bmN0aW9uIHRvREVSIChyLCBzKSB7XG4gIHIgPSByLnRvQXJyYXkoKVxuICBzID0gcy50b0FycmF5KClcblxuICAvLyBQYWQgdmFsdWVzXG4gIGlmIChyWzBdICYgMHg4MCkgciA9IFsgMCBdLmNvbmNhdChyKVxuICBpZiAoc1swXSAmIDB4ODApIHMgPSBbIDAgXS5jb25jYXQocylcblxuICB2YXIgdG90YWwgPSByLmxlbmd0aCArIHMubGVuZ3RoICsgNFxuICB2YXIgcmVzID0gWyAweDMwLCB0b3RhbCwgMHgwMiwgci5sZW5ndGggXVxuICByZXMgPSByZXMuY29uY2F0KHIsIFsgMHgwMiwgcy5sZW5ndGggXSwgcylcbiAgcmV0dXJuIG5ldyBCdWZmZXIocmVzKVxufVxuXG5mdW5jdGlvbiBnZXRLZXkgKHgsIHEsIGhhc2gsIGFsZ28pIHtcbiAgeCA9IG5ldyBCdWZmZXIoeC50b0FycmF5KCkpXG4gIGlmICh4Lmxlbmd0aCA8IHEuYnl0ZUxlbmd0aCgpKSB7XG4gICAgdmFyIHplcm9zID0gbmV3IEJ1ZmZlcihxLmJ5dGVMZW5ndGgoKSAtIHgubGVuZ3RoKVxuICAgIHplcm9zLmZpbGwoMClcbiAgICB4ID0gQnVmZmVyLmNvbmNhdChbIHplcm9zLCB4IF0pXG4gIH1cbiAgdmFyIGhsZW4gPSBoYXNoLmxlbmd0aFxuICB2YXIgaGJpdHMgPSBiaXRzMm9jdGV0cyhoYXNoLCBxKVxuICB2YXIgdiA9IG5ldyBCdWZmZXIoaGxlbilcbiAgdi5maWxsKDEpXG4gIHZhciBrID0gbmV3IEJ1ZmZlcihobGVuKVxuICBrLmZpbGwoMClcbiAgayA9IGNyZWF0ZUhtYWMoYWxnbywgaykudXBkYXRlKHYpLnVwZGF0ZShuZXcgQnVmZmVyKFsgMCBdKSkudXBkYXRlKHgpLnVwZGF0ZShoYml0cykuZGlnZXN0KClcbiAgdiA9IGNyZWF0ZUhtYWMoYWxnbywgaykudXBkYXRlKHYpLmRpZ2VzdCgpXG4gIGsgPSBjcmVhdGVIbWFjKGFsZ28sIGspLnVwZGF0ZSh2KS51cGRhdGUobmV3IEJ1ZmZlcihbIDEgXSkpLnVwZGF0ZSh4KS51cGRhdGUoaGJpdHMpLmRpZ2VzdCgpXG4gIHYgPSBjcmVhdGVIbWFjKGFsZ28sIGspLnVwZGF0ZSh2KS5kaWdlc3QoKVxuICByZXR1cm4geyBrOiBrLCB2OiB2IH1cbn1cblxuZnVuY3Rpb24gYml0czJpbnQgKG9iaXRzLCBxKSB7XG4gIHZhciBiaXRzID0gbmV3IEJOKG9iaXRzKVxuICB2YXIgc2hpZnQgPSAob2JpdHMubGVuZ3RoIDw8IDMpIC0gcS5iaXRMZW5ndGgoKVxuICBpZiAoc2hpZnQgPiAwKSBiaXRzLmlzaHJuKHNoaWZ0KVxuICByZXR1cm4gYml0c1xufVxuXG5mdW5jdGlvbiBiaXRzMm9jdGV0cyAoYml0cywgcSkge1xuICBiaXRzID0gYml0czJpbnQoYml0cywgcSlcbiAgYml0cyA9IGJpdHMubW9kKHEpXG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGJpdHMudG9BcnJheSgpKVxuICBpZiAob3V0Lmxlbmd0aCA8IHEuYnl0ZUxlbmd0aCgpKSB7XG4gICAgdmFyIHplcm9zID0gbmV3IEJ1ZmZlcihxLmJ5dGVMZW5ndGgoKSAtIG91dC5sZW5ndGgpXG4gICAgemVyb3MuZmlsbCgwKVxuICAgIG91dCA9IEJ1ZmZlci5jb25jYXQoWyB6ZXJvcywgb3V0IF0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiBtYWtlS2V5IChxLCBrdiwgYWxnbykge1xuICB2YXIgdFxuICB2YXIga1xuXG4gIGRvIHtcbiAgICB0ID0gbmV3IEJ1ZmZlcigwKVxuXG4gICAgd2hpbGUgKHQubGVuZ3RoICogOCA8IHEuYml0TGVuZ3RoKCkpIHtcbiAgICAgIGt2LnYgPSBjcmVhdGVIbWFjKGFsZ28sIGt2LmspLnVwZGF0ZShrdi52KS5kaWdlc3QoKVxuICAgICAgdCA9IEJ1ZmZlci5jb25jYXQoWyB0LCBrdi52IF0pXG4gICAgfVxuXG4gICAgayA9IGJpdHMyaW50KHQsIHEpXG4gICAga3YuayA9IGNyZWF0ZUhtYWMoYWxnbywga3YuaykudXBkYXRlKGt2LnYpLnVwZGF0ZShuZXcgQnVmZmVyKFsgMCBdKSkuZGlnZXN0KClcbiAgICBrdi52ID0gY3JlYXRlSG1hYyhhbGdvLCBrdi5rKS51cGRhdGUoa3YudikuZGlnZXN0KClcbiAgfSB3aGlsZSAoay5jbXAocSkgIT09IC0xKVxuXG4gIHJldHVybiBrXG59XG5cbmZ1bmN0aW9uIG1ha2VSIChnLCBrLCBwLCBxKSB7XG4gIHJldHVybiBnLnRvUmVkKEJOLm1vbnQocCkpLnJlZFBvdyhrKS5mcm9tUmVkKCkubW9kKHEpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2lnblxubW9kdWxlLmV4cG9ydHMuZ2V0S2V5ID0gZ2V0S2V5XG5tb2R1bGUuZXhwb3J0cy5tYWtlS2V5ID0gbWFrZUtleVxuIiwiLy8gbXVjaCBvZiB0aGlzIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L3NlbGYtc2lnbmVkL2Jsb2IvZ2gtcGFnZXMvbGliL3JzYS5qc1xudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKVxudmFyIEVDID0gcmVxdWlyZSgnZWxsaXB0aWMnKS5lY1xudmFyIHBhcnNlS2V5cyA9IHJlcXVpcmUoJ3BhcnNlLWFzbjEnKVxudmFyIGN1cnZlcyA9IHJlcXVpcmUoJy4vY3VydmVzLmpzb24nKVxuXG5mdW5jdGlvbiB2ZXJpZnkgKHNpZywgaGFzaCwga2V5LCBzaWduVHlwZSwgdGFnKSB7XG4gIHZhciBwdWIgPSBwYXJzZUtleXMoa2V5KVxuICBpZiAocHViLnR5cGUgPT09ICdlYycpIHtcbiAgICAvLyByc2Ega2V5cyBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgZWNkc2Egb25lcyBpbiBvcGVuc3NsXG4gICAgaWYgKHNpZ25UeXBlICE9PSAnZWNkc2EnICYmIHNpZ25UeXBlICE9PSAnZWNkc2EvcnNhJykgdGhyb3cgbmV3IEVycm9yKCd3cm9uZyBwdWJsaWMga2V5IHR5cGUnKVxuICAgIHJldHVybiBlY1ZlcmlmeShzaWcsIGhhc2gsIHB1YilcbiAgfSBlbHNlIGlmIChwdWIudHlwZSA9PT0gJ2RzYScpIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdkc2EnKSB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHB1YmxpYyBrZXkgdHlwZScpXG4gICAgcmV0dXJuIGRzYVZlcmlmeShzaWcsIGhhc2gsIHB1YilcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdyc2EnICYmIHNpZ25UeXBlICE9PSAnZWNkc2EvcnNhJykgdGhyb3cgbmV3IEVycm9yKCd3cm9uZyBwdWJsaWMga2V5IHR5cGUnKVxuICB9XG4gIGhhc2ggPSBCdWZmZXIuY29uY2F0KFt0YWcsIGhhc2hdKVxuICB2YXIgbGVuID0gcHViLm1vZHVsdXMuYnl0ZUxlbmd0aCgpXG4gIHZhciBwYWQgPSBbIDEgXVxuICB2YXIgcGFkTnVtID0gMFxuICB3aGlsZSAoaGFzaC5sZW5ndGggKyBwYWQubGVuZ3RoICsgMiA8IGxlbikge1xuICAgIHBhZC5wdXNoKDB4ZmYpXG4gICAgcGFkTnVtKytcbiAgfVxuICBwYWQucHVzaCgweDAwKVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBoYXNoLmxlbmd0aCkge1xuICAgIHBhZC5wdXNoKGhhc2hbaV0pXG4gIH1cbiAgcGFkID0gbmV3IEJ1ZmZlcihwYWQpXG4gIHZhciByZWQgPSBCTi5tb250KHB1Yi5tb2R1bHVzKVxuICBzaWcgPSBuZXcgQk4oc2lnKS50b1JlZChyZWQpXG5cbiAgc2lnID0gc2lnLnJlZFBvdyhuZXcgQk4ocHViLnB1YmxpY0V4cG9uZW50KSlcbiAgc2lnID0gbmV3IEJ1ZmZlcihzaWcuZnJvbVJlZCgpLnRvQXJyYXkoKSlcbiAgdmFyIG91dCA9IHBhZE51bSA8IDggPyAxIDogMFxuICBsZW4gPSBNYXRoLm1pbihzaWcubGVuZ3RoLCBwYWQubGVuZ3RoKVxuICBpZiAoc2lnLmxlbmd0aCAhPT0gcGFkLmxlbmd0aCkgb3V0ID0gMVxuXG4gIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgbGVuKSBvdXQgfD0gc2lnW2ldIF4gcGFkW2ldXG4gIHJldHVybiBvdXQgPT09IDBcbn1cblxuZnVuY3Rpb24gZWNWZXJpZnkgKHNpZywgaGFzaCwgcHViKSB7XG4gIHZhciBjdXJ2ZUlkID0gY3VydmVzW3B1Yi5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCcuJyldXG4gIGlmICghY3VydmVJZCkgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGN1cnZlICcgKyBwdWIuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbignLicpKVxuXG4gIHZhciBjdXJ2ZSA9IG5ldyBFQyhjdXJ2ZUlkKVxuICB2YXIgcHVia2V5ID0gcHViLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YVxuXG4gIHJldHVybiBjdXJ2ZS52ZXJpZnkoaGFzaCwgc2lnLCBwdWJrZXkpXG59XG5cbmZ1bmN0aW9uIGRzYVZlcmlmeSAoc2lnLCBoYXNoLCBwdWIpIHtcbiAgdmFyIHAgPSBwdWIuZGF0YS5wXG4gIHZhciBxID0gcHViLmRhdGEucVxuICB2YXIgZyA9IHB1Yi5kYXRhLmdcbiAgdmFyIHkgPSBwdWIuZGF0YS5wdWJfa2V5XG4gIHZhciB1bnBhY2tlZCA9IHBhcnNlS2V5cy5zaWduYXR1cmUuZGVjb2RlKHNpZywgJ2RlcicpXG4gIHZhciBzID0gdW5wYWNrZWQuc1xuICB2YXIgciA9IHVucGFja2VkLnJcbiAgY2hlY2tWYWx1ZShzLCBxKVxuICBjaGVja1ZhbHVlKHIsIHEpXG4gIHZhciBtb250cCA9IEJOLm1vbnQocClcbiAgdmFyIHcgPSBzLmludm0ocSlcbiAgdmFyIHYgPSBnLnRvUmVkKG1vbnRwKVxuICAgIC5yZWRQb3cobmV3IEJOKGhhc2gpLm11bCh3KS5tb2QocSkpXG4gICAgLmZyb21SZWQoKVxuICAgIC5tdWwoeS50b1JlZChtb250cCkucmVkUG93KHIubXVsKHcpLm1vZChxKSkuZnJvbVJlZCgpKVxuICAgIC5tb2QocClcbiAgICAubW9kKHEpXG4gIHJldHVybiB2LmNtcChyKSA9PT0gMFxufVxuXG5mdW5jdGlvbiBjaGVja1ZhbHVlIChiLCBxKSB7XG4gIGlmIChiLmNtcG4oMCkgPD0gMCkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNpZycpXG4gIGlmIChiLmNtcChxKSA+PSBxKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2lnJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJpZnlcbiIsInZhciBtc2cgPSByZXF1aXJlKCdwYWtvL2xpYi96bGliL21lc3NhZ2VzJyk7XG52YXIgenN0cmVhbSA9IHJlcXVpcmUoJ3Bha28vbGliL3psaWIvenN0cmVhbScpO1xudmFyIHpsaWJfZGVmbGF0ZSA9IHJlcXVpcmUoJ3Bha28vbGliL3psaWIvZGVmbGF0ZS5qcycpO1xudmFyIHpsaWJfaW5mbGF0ZSA9IHJlcXVpcmUoJ3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcycpO1xudmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJ3Bha28vbGliL3psaWIvY29uc3RhbnRzJyk7XG5cbmZvciAodmFyIGtleSBpbiBjb25zdGFudHMpIHtcbiAgZXhwb3J0c1trZXldID0gY29uc3RhbnRzW2tleV07XG59XG5cbi8vIHpsaWIgbW9kZXNcbmV4cG9ydHMuTk9ORSA9IDA7XG5leHBvcnRzLkRFRkxBVEUgPSAxO1xuZXhwb3J0cy5JTkZMQVRFID0gMjtcbmV4cG9ydHMuR1pJUCA9IDM7XG5leHBvcnRzLkdVTlpJUCA9IDQ7XG5leHBvcnRzLkRFRkxBVEVSQVcgPSA1O1xuZXhwb3J0cy5JTkZMQVRFUkFXID0gNjtcbmV4cG9ydHMuVU5aSVAgPSA3O1xuXG4vKipcbiAqIEVtdWxhdGUgTm9kZSdzIHpsaWIgQysrIGxheWVyIGZvciB1c2UgYnkgdGhlIEpTIGxheWVyIGluIGluZGV4LmpzXG4gKi9cbmZ1bmN0aW9uIFpsaWIobW9kZSkge1xuICBpZiAobW9kZSA8IGV4cG9ydHMuREVGTEFURSB8fCBtb2RlID4gZXhwb3J0cy5VTlpJUClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQmFkIGFyZ3VtZW50XCIpO1xuICAgIFxuICB0aGlzLm1vZGUgPSBtb2RlO1xuICB0aGlzLmluaXRfZG9uZSA9IGZhbHNlO1xuICB0aGlzLndyaXRlX2luX3Byb2dyZXNzID0gZmFsc2U7XG4gIHRoaXMucGVuZGluZ19jbG9zZSA9IGZhbHNlO1xuICB0aGlzLndpbmRvd0JpdHMgPSAwO1xuICB0aGlzLmxldmVsID0gMDtcbiAgdGhpcy5tZW1MZXZlbCA9IDA7XG4gIHRoaXMuc3RyYXRlZ3kgPSAwO1xuICB0aGlzLmRpY3Rpb25hcnkgPSBudWxsO1xufVxuXG5abGliLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24od2luZG93Qml0cywgbGV2ZWwsIG1lbUxldmVsLCBzdHJhdGVneSwgZGljdGlvbmFyeSkge1xuICB0aGlzLndpbmRvd0JpdHMgPSB3aW5kb3dCaXRzO1xuICB0aGlzLmxldmVsID0gbGV2ZWw7XG4gIHRoaXMubWVtTGV2ZWwgPSBtZW1MZXZlbDtcbiAgdGhpcy5zdHJhdGVneSA9IHN0cmF0ZWd5O1xuICAvLyBkaWN0aW9uYXJ5IG5vdCBzdXBwb3J0ZWQuXG4gIFxuICBpZiAodGhpcy5tb2RlID09PSBleHBvcnRzLkdaSVAgfHwgdGhpcy5tb2RlID09PSBleHBvcnRzLkdVTlpJUClcbiAgICB0aGlzLndpbmRvd0JpdHMgKz0gMTY7XG4gICAgXG4gIGlmICh0aGlzLm1vZGUgPT09IGV4cG9ydHMuVU5aSVApXG4gICAgdGhpcy53aW5kb3dCaXRzICs9IDMyO1xuICAgIFxuICBpZiAodGhpcy5tb2RlID09PSBleHBvcnRzLkRFRkxBVEVSQVcgfHwgdGhpcy5tb2RlID09PSBleHBvcnRzLklORkxBVEVSQVcpXG4gICAgdGhpcy53aW5kb3dCaXRzID0gLXRoaXMud2luZG93Qml0cztcbiAgICBcbiAgdGhpcy5zdHJtID0gbmV3IHpzdHJlYW0oKTtcbiAgXG4gIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgY2FzZSBleHBvcnRzLkRFRkxBVEU6XG4gICAgY2FzZSBleHBvcnRzLkdaSVA6XG4gICAgY2FzZSBleHBvcnRzLkRFRkxBVEVSQVc6XG4gICAgICB2YXIgc3RhdHVzID0gemxpYl9kZWZsYXRlLmRlZmxhdGVJbml0MihcbiAgICAgICAgdGhpcy5zdHJtLFxuICAgICAgICB0aGlzLmxldmVsLFxuICAgICAgICBleHBvcnRzLlpfREVGTEFURUQsXG4gICAgICAgIHRoaXMud2luZG93Qml0cyxcbiAgICAgICAgdGhpcy5tZW1MZXZlbCxcbiAgICAgICAgdGhpcy5zdHJhdGVneVxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZXhwb3J0cy5JTkZMQVRFOlxuICAgIGNhc2UgZXhwb3J0cy5HVU5aSVA6XG4gICAgY2FzZSBleHBvcnRzLklORkxBVEVSQVc6XG4gICAgY2FzZSBleHBvcnRzLlVOWklQOlxuICAgICAgdmFyIHN0YXR1cyAgPSB6bGliX2luZmxhdGUuaW5mbGF0ZUluaXQyKFxuICAgICAgICB0aGlzLnN0cm0sXG4gICAgICAgIHRoaXMud2luZG93Qml0c1xuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG1vZGUgXCIgKyB0aGlzLm1vZGUpO1xuICB9XG4gIFxuICBpZiAoc3RhdHVzICE9PSBleHBvcnRzLlpfT0spIHtcbiAgICB0aGlzLl9lcnJvcihzdGF0dXMpO1xuICAgIHJldHVybjtcbiAgfVxuICBcbiAgdGhpcy53cml0ZV9pbl9wcm9ncmVzcyA9IGZhbHNlO1xuICB0aGlzLmluaXRfZG9uZSA9IHRydWU7XG59O1xuXG5abGliLnByb3RvdHlwZS5wYXJhbXMgPSBmdW5jdGlvbigpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiZGVmbGF0ZVBhcmFtcyBOb3Qgc3VwcG9ydGVkXCIpO1xufTtcblxuWmxpYi5wcm90b3R5cGUuX3dyaXRlQ2hlY2sgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLmluaXRfZG9uZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ3cml0ZSBiZWZvcmUgaW5pdFwiKTtcbiAgICBcbiAgaWYgKHRoaXMubW9kZSA9PT0gZXhwb3J0cy5OT05FKVxuICAgIHRocm93IG5ldyBFcnJvcihcImFscmVhZHkgZmluYWxpemVkXCIpO1xuICAgIFxuICBpZiAodGhpcy53cml0ZV9pbl9wcm9ncmVzcylcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ3cml0ZSBhbHJlYWR5IGluIHByb2dyZXNzXCIpO1xuICAgIFxuICBpZiAodGhpcy5wZW5kaW5nX2Nsb3NlKVxuICAgIHRocm93IG5ldyBFcnJvcihcImNsb3NlIGlzIHBlbmRpbmdcIik7XG59O1xuXG5abGliLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGZsdXNoLCBpbnB1dCwgaW5fb2ZmLCBpbl9sZW4sIG91dCwgb3V0X29mZiwgb3V0X2xlbikgeyAgICBcbiAgdGhpcy5fd3JpdGVDaGVjaygpO1xuICB0aGlzLndyaXRlX2luX3Byb2dyZXNzID0gdHJ1ZTtcbiAgXG4gIHZhciBzZWxmID0gdGhpcztcbiAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICBzZWxmLndyaXRlX2luX3Byb2dyZXNzID0gZmFsc2U7XG4gICAgdmFyIHJlcyA9IHNlbGYuX3dyaXRlKGZsdXNoLCBpbnB1dCwgaW5fb2ZmLCBpbl9sZW4sIG91dCwgb3V0X29mZiwgb3V0X2xlbik7XG4gICAgc2VsZi5jYWxsYmFjayhyZXNbMF0sIHJlc1sxXSk7XG4gICAgXG4gICAgaWYgKHNlbGYucGVuZGluZ19jbG9zZSlcbiAgICAgIHNlbGYuY2xvc2UoKTtcbiAgfSk7XG4gIFxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIHNldCBtZXRob2QgZm9yIE5vZGUgYnVmZmVycywgdXNlZCBieSBwYWtvXG5mdW5jdGlvbiBidWZmZXJTZXQoZGF0YSwgb2Zmc2V0KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSBkYXRhW2ldO1xuICB9XG59XG5cblpsaWIucHJvdG90eXBlLndyaXRlU3luYyA9IGZ1bmN0aW9uKGZsdXNoLCBpbnB1dCwgaW5fb2ZmLCBpbl9sZW4sIG91dCwgb3V0X29mZiwgb3V0X2xlbikge1xuICB0aGlzLl93cml0ZUNoZWNrKCk7XG4gIHJldHVybiB0aGlzLl93cml0ZShmbHVzaCwgaW5wdXQsIGluX29mZiwgaW5fbGVuLCBvdXQsIG91dF9vZmYsIG91dF9sZW4pO1xufTtcblxuWmxpYi5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24oZmx1c2gsIGlucHV0LCBpbl9vZmYsIGluX2xlbiwgb3V0LCBvdXRfb2ZmLCBvdXRfbGVuKSB7XG4gIHRoaXMud3JpdGVfaW5fcHJvZ3Jlc3MgPSB0cnVlO1xuICBcbiAgaWYgKGZsdXNoICE9PSBleHBvcnRzLlpfTk9fRkxVU0ggJiZcbiAgICAgIGZsdXNoICE9PSBleHBvcnRzLlpfUEFSVElBTF9GTFVTSCAmJlxuICAgICAgZmx1c2ggIT09IGV4cG9ydHMuWl9TWU5DX0ZMVVNIICYmXG4gICAgICBmbHVzaCAhPT0gZXhwb3J0cy5aX0ZVTExfRkxVU0ggJiZcbiAgICAgIGZsdXNoICE9PSBleHBvcnRzLlpfRklOSVNIICYmXG4gICAgICBmbHVzaCAhPT0gZXhwb3J0cy5aX0JMT0NLKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBmbHVzaCB2YWx1ZVwiKTtcbiAgfVxuICBcbiAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICBpbnB1dCA9IG5ldyBCdWZmZXIoMCk7XG4gICAgaW5fbGVuID0gMDtcbiAgICBpbl9vZmYgPSAwO1xuICB9XG4gIFxuICBpZiAob3V0Ll9zZXQpXG4gICAgb3V0LnNldCA9IG91dC5fc2V0O1xuICBlbHNlXG4gICAgb3V0LnNldCA9IGJ1ZmZlclNldDtcbiAgXG4gIHZhciBzdHJtID0gdGhpcy5zdHJtO1xuICBzdHJtLmF2YWlsX2luID0gaW5fbGVuO1xuICBzdHJtLmlucHV0ID0gaW5wdXQ7XG4gIHN0cm0ubmV4dF9pbiA9IGluX29mZjtcbiAgc3RybS5hdmFpbF9vdXQgPSBvdXRfbGVuO1xuICBzdHJtLm91dHB1dCA9IG91dDtcbiAgc3RybS5uZXh0X291dCA9IG91dF9vZmY7XG4gIFxuICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgIGNhc2UgZXhwb3J0cy5ERUZMQVRFOlxuICAgIGNhc2UgZXhwb3J0cy5HWklQOlxuICAgIGNhc2UgZXhwb3J0cy5ERUZMQVRFUkFXOlxuICAgICAgdmFyIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlKHN0cm0sIGZsdXNoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZXhwb3J0cy5VTlpJUDpcbiAgICBjYXNlIGV4cG9ydHMuSU5GTEFURTpcbiAgICBjYXNlIGV4cG9ydHMuR1VOWklQOlxuICAgIGNhc2UgZXhwb3J0cy5JTkZMQVRFUkFXOlxuICAgICAgdmFyIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlKHN0cm0sIGZsdXNoKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG1vZGUgXCIgKyB0aGlzLm1vZGUpO1xuICB9XG4gIFxuICBpZiAoc3RhdHVzICE9PSBleHBvcnRzLlpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IGV4cG9ydHMuWl9PSykge1xuICAgIHRoaXMuX2Vycm9yKHN0YXR1cyk7XG4gIH1cbiAgXG4gIHRoaXMud3JpdGVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcbiAgcmV0dXJuIFtzdHJtLmF2YWlsX2luLCBzdHJtLmF2YWlsX291dF07XG59O1xuXG5abGliLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy53cml0ZV9pbl9wcm9ncmVzcykge1xuICAgIHRoaXMucGVuZGluZ19jbG9zZSA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICB0aGlzLnBlbmRpbmdfY2xvc2UgPSBmYWxzZTtcbiAgXG4gIGlmICh0aGlzLm1vZGUgPT09IGV4cG9ydHMuREVGTEFURSB8fCB0aGlzLm1vZGUgPT09IGV4cG9ydHMuR1pJUCB8fCB0aGlzLm1vZGUgPT09IGV4cG9ydHMuREVGTEFURVJBVykge1xuICAgIHpsaWJfZGVmbGF0ZS5kZWZsYXRlRW5kKHRoaXMuc3RybSk7XG4gIH0gZWxzZSB7XG4gICAgemxpYl9pbmZsYXRlLmluZmxhdGVFbmQodGhpcy5zdHJtKTtcbiAgfVxuICBcbiAgdGhpcy5tb2RlID0gZXhwb3J0cy5OT05FO1xufTtcblxuWmxpYi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuREVGTEFURTpcbiAgICBjYXNlIGV4cG9ydHMuREVGTEFURVJBVzpcbiAgICAgIHZhciBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZVJlc2V0KHRoaXMuc3RybSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIGV4cG9ydHMuSU5GTEFURTpcbiAgICBjYXNlIGV4cG9ydHMuSU5GTEFURVJBVzpcbiAgICAgIHZhciBzdGF0dXMgPSB6bGliX2luZmxhdGUuaW5mbGF0ZVJlc2V0KHRoaXMuc3RybSk7XG4gICAgICBicmVhaztcbiAgfVxuICBcbiAgaWYgKHN0YXR1cyAhPT0gZXhwb3J0cy5aX09LKSB7XG4gICAgdGhpcy5fZXJyb3Ioc3RhdHVzKTtcbiAgfVxufTtcblxuWmxpYi5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oc3RhdHVzKSB7XG4gIHRoaXMub25lcnJvcihtc2dbc3RhdHVzXSArICc6ICcgKyB0aGlzLnN0cm0ubXNnLCBzdGF0dXMpO1xuICBcbiAgdGhpcy53cml0ZV9pbl9wcm9ncmVzcyA9IGZhbHNlO1xuICBpZiAodGhpcy5wZW5kaW5nX2Nsb3NlKVxuICAgIHRoaXMuY2xvc2UoKTtcbn07XG5cbmV4cG9ydHMuWmxpYiA9IFpsaWI7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ19zdHJlYW1fdHJhbnNmb3JtJyk7XG5cbnZhciBiaW5kaW5nID0gcmVxdWlyZSgnLi9iaW5kaW5nJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKS5vaztcblxuLy8gemxpYiBkb2Vzbid0IHByb3ZpZGUgdGhlc2UsIHNvIGtsdWRnZSB0aGVtIGluIGZvbGxvd2luZyB0aGUgc2FtZVxuLy8gY29uc3QgbmFtaW5nIHNjaGVtZSB6bGliIHVzZXMuXG5iaW5kaW5nLlpfTUlOX1dJTkRPV0JJVFMgPSA4O1xuYmluZGluZy5aX01BWF9XSU5ET1dCSVRTID0gMTU7XG5iaW5kaW5nLlpfREVGQVVMVF9XSU5ET1dCSVRTID0gMTU7XG5cbi8vIGZld2VyIHRoYW4gNjQgYnl0ZXMgcGVyIGNodW5rIGlzIHN0dXBpZC5cbi8vIHRlY2huaWNhbGx5IGl0IGNvdWxkIHdvcmsgd2l0aCBhcyBmZXcgYXMgOCwgYnV0IGV2ZW4gNjQgYnl0ZXNcbi8vIGlzIGFic3VyZGx5IGxvdy4gIFVzdWFsbHkgYSBNQiBvciBtb3JlIGlzIGJlc3QuXG5iaW5kaW5nLlpfTUlOX0NIVU5LID0gNjQ7XG5iaW5kaW5nLlpfTUFYX0NIVU5LID0gSW5maW5pdHk7XG5iaW5kaW5nLlpfREVGQVVMVF9DSFVOSyA9ICgxNiAqIDEwMjQpO1xuXG5iaW5kaW5nLlpfTUlOX01FTUxFVkVMID0gMTtcbmJpbmRpbmcuWl9NQVhfTUVNTEVWRUwgPSA5O1xuYmluZGluZy5aX0RFRkFVTFRfTUVNTEVWRUwgPSA4O1xuXG5iaW5kaW5nLlpfTUlOX0xFVkVMID0gLTE7XG5iaW5kaW5nLlpfTUFYX0xFVkVMID0gOTtcbmJpbmRpbmcuWl9ERUZBVUxUX0xFVkVMID0gYmluZGluZy5aX0RFRkFVTFRfQ09NUFJFU1NJT047XG5cbi8vIGV4cG9zZSBhbGwgdGhlIHpsaWIgY29uc3RhbnRzXG5PYmplY3Qua2V5cyhiaW5kaW5nKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgaWYgKGsubWF0Y2goL15aLykpIGV4cG9ydHNba10gPSBiaW5kaW5nW2tdO1xufSk7XG5cbi8vIHRyYW5zbGF0aW9uIHRhYmxlIGZvciByZXR1cm4gY29kZXMuXG5leHBvcnRzLmNvZGVzID0ge1xuICBaX09LOiBiaW5kaW5nLlpfT0ssXG4gIFpfU1RSRUFNX0VORDogYmluZGluZy5aX1NUUkVBTV9FTkQsXG4gIFpfTkVFRF9ESUNUOiBiaW5kaW5nLlpfTkVFRF9ESUNULFxuICBaX0VSUk5POiBiaW5kaW5nLlpfRVJSTk8sXG4gIFpfU1RSRUFNX0VSUk9SOiBiaW5kaW5nLlpfU1RSRUFNX0VSUk9SLFxuICBaX0RBVEFfRVJST1I6IGJpbmRpbmcuWl9EQVRBX0VSUk9SLFxuICBaX01FTV9FUlJPUjogYmluZGluZy5aX01FTV9FUlJPUixcbiAgWl9CVUZfRVJST1I6IGJpbmRpbmcuWl9CVUZfRVJST1IsXG4gIFpfVkVSU0lPTl9FUlJPUjogYmluZGluZy5aX1ZFUlNJT05fRVJST1Jcbn07XG5cbk9iamVjdC5rZXlzKGV4cG9ydHMuY29kZXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICBleHBvcnRzLmNvZGVzW2V4cG9ydHMuY29kZXNba11dID0gaztcbn0pO1xuXG5leHBvcnRzLkRlZmxhdGUgPSBEZWZsYXRlO1xuZXhwb3J0cy5JbmZsYXRlID0gSW5mbGF0ZTtcbmV4cG9ydHMuR3ppcCA9IEd6aXA7XG5leHBvcnRzLkd1bnppcCA9IEd1bnppcDtcbmV4cG9ydHMuRGVmbGF0ZVJhdyA9IERlZmxhdGVSYXc7XG5leHBvcnRzLkluZmxhdGVSYXcgPSBJbmZsYXRlUmF3O1xuZXhwb3J0cy5VbnppcCA9IFVuemlwO1xuXG5leHBvcnRzLmNyZWF0ZURlZmxhdGUgPSBmdW5jdGlvbihvKSB7XG4gIHJldHVybiBuZXcgRGVmbGF0ZShvKTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlSW5mbGF0ZSA9IGZ1bmN0aW9uKG8pIHtcbiAgcmV0dXJuIG5ldyBJbmZsYXRlKG8pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVEZWZsYXRlUmF3ID0gZnVuY3Rpb24obykge1xuICByZXR1cm4gbmV3IERlZmxhdGVSYXcobyk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZUluZmxhdGVSYXcgPSBmdW5jdGlvbihvKSB7XG4gIHJldHVybiBuZXcgSW5mbGF0ZVJhdyhvKTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlR3ppcCA9IGZ1bmN0aW9uKG8pIHtcbiAgcmV0dXJuIG5ldyBHemlwKG8pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVHdW56aXAgPSBmdW5jdGlvbihvKSB7XG4gIHJldHVybiBuZXcgR3VuemlwKG8pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVVbnppcCA9IGZ1bmN0aW9uKG8pIHtcbiAgcmV0dXJuIG5ldyBVbnppcChvKTtcbn07XG5cblxuLy8gQ29udmVuaWVuY2UgbWV0aG9kcy5cbi8vIGNvbXByZXNzL2RlY29tcHJlc3MgYSBzdHJpbmcgb3IgYnVmZmVyIGluIG9uZSBzdGVwLlxuZXhwb3J0cy5kZWZsYXRlID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRzLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIHJldHVybiB6bGliQnVmZmVyKG5ldyBEZWZsYXRlKG9wdHMpLCBidWZmZXIsIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydHMuZGVmbGF0ZVN5bmMgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMpIHtcbiAgcmV0dXJuIHpsaWJCdWZmZXJTeW5jKG5ldyBEZWZsYXRlKG9wdHMpLCBidWZmZXIpO1xufTtcblxuZXhwb3J0cy5nemlwID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRzLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIHJldHVybiB6bGliQnVmZmVyKG5ldyBHemlwKG9wdHMpLCBidWZmZXIsIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydHMuZ3ppcFN5bmMgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMpIHtcbiAgcmV0dXJuIHpsaWJCdWZmZXJTeW5jKG5ldyBHemlwKG9wdHMpLCBidWZmZXIpO1xufTtcblxuZXhwb3J0cy5kZWZsYXRlUmF3ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRzLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIHJldHVybiB6bGliQnVmZmVyKG5ldyBEZWZsYXRlUmF3KG9wdHMpLCBidWZmZXIsIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydHMuZGVmbGF0ZVJhd1N5bmMgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMpIHtcbiAgcmV0dXJuIHpsaWJCdWZmZXJTeW5jKG5ldyBEZWZsYXRlUmF3KG9wdHMpLCBidWZmZXIpO1xufTtcblxuZXhwb3J0cy51bnppcCA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRzO1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuICByZXR1cm4gemxpYkJ1ZmZlcihuZXcgVW56aXAob3B0cyksIGJ1ZmZlciwgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0cy51bnppcFN5bmMgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMpIHtcbiAgcmV0dXJuIHpsaWJCdWZmZXJTeW5jKG5ldyBVbnppcChvcHRzKSwgYnVmZmVyKTtcbn07XG5cbmV4cG9ydHMuaW5mbGF0ZSA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRzO1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuICByZXR1cm4gemxpYkJ1ZmZlcihuZXcgSW5mbGF0ZShvcHRzKSwgYnVmZmVyLCBjYWxsYmFjayk7XG59O1xuXG5leHBvcnRzLmluZmxhdGVTeW5jID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRzKSB7XG4gIHJldHVybiB6bGliQnVmZmVyU3luYyhuZXcgSW5mbGF0ZShvcHRzKSwgYnVmZmVyKTtcbn07XG5cbmV4cG9ydHMuZ3VuemlwID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRzLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIHJldHVybiB6bGliQnVmZmVyKG5ldyBHdW56aXAob3B0cyksIGJ1ZmZlciwgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0cy5ndW56aXBTeW5jID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRzKSB7XG4gIHJldHVybiB6bGliQnVmZmVyU3luYyhuZXcgR3VuemlwKG9wdHMpLCBidWZmZXIpO1xufTtcblxuZXhwb3J0cy5pbmZsYXRlUmF3ID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRzLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIHJldHVybiB6bGliQnVmZmVyKG5ldyBJbmZsYXRlUmF3KG9wdHMpLCBidWZmZXIsIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydHMuaW5mbGF0ZVJhd1N5bmMgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMpIHtcbiAgcmV0dXJuIHpsaWJCdWZmZXJTeW5jKG5ldyBJbmZsYXRlUmF3KG9wdHMpLCBidWZmZXIpO1xufTtcblxuZnVuY3Rpb24gemxpYkJ1ZmZlcihlbmdpbmUsIGJ1ZmZlciwgY2FsbGJhY2spIHtcbiAgdmFyIGJ1ZmZlcnMgPSBbXTtcbiAgdmFyIG5yZWFkID0gMDtcblxuICBlbmdpbmUub24oJ2Vycm9yJywgb25FcnJvcik7XG4gIGVuZ2luZS5vbignZW5kJywgb25FbmQpO1xuXG4gIGVuZ2luZS5lbmQoYnVmZmVyKTtcbiAgZmxvdygpO1xuXG4gIGZ1bmN0aW9uIGZsb3coKSB7XG4gICAgdmFyIGNodW5rO1xuICAgIHdoaWxlIChudWxsICE9PSAoY2h1bmsgPSBlbmdpbmUucmVhZCgpKSkge1xuICAgICAgYnVmZmVycy5wdXNoKGNodW5rKTtcbiAgICAgIG5yZWFkICs9IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gICAgZW5naW5lLm9uY2UoJ3JlYWRhYmxlJywgZmxvdyk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkVycm9yKGVycikge1xuICAgIGVuZ2luZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25FbmQpO1xuICAgIGVuZ2luZS5yZW1vdmVMaXN0ZW5lcigncmVhZGFibGUnLCBmbG93KTtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25FbmQoKSB7XG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgbnJlYWQpO1xuICAgIGJ1ZmZlcnMgPSBbXTtcbiAgICBjYWxsYmFjayhudWxsLCBidWYpO1xuICAgIGVuZ2luZS5jbG9zZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHpsaWJCdWZmZXJTeW5jKGVuZ2luZSwgYnVmZmVyKSB7XG4gIGlmICh0eXBlb2YgYnVmZmVyID09PSAnc3RyaW5nJylcbiAgICBidWZmZXIgPSBuZXcgQnVmZmVyKGJ1ZmZlcik7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm90IGEgc3RyaW5nIG9yIGJ1ZmZlcicpO1xuXG4gIHZhciBmbHVzaEZsYWcgPSBiaW5kaW5nLlpfRklOSVNIO1xuXG4gIHJldHVybiBlbmdpbmUuX3Byb2Nlc3NDaHVuayhidWZmZXIsIGZsdXNoRmxhZyk7XG59XG5cbi8vIGdlbmVyaWMgemxpYlxuLy8gbWluaW1hbCAyLWJ5dGUgaGVhZGVyXG5mdW5jdGlvbiBEZWZsYXRlKG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERlZmxhdGUpKSByZXR1cm4gbmV3IERlZmxhdGUob3B0cyk7XG4gIFpsaWIuY2FsbCh0aGlzLCBvcHRzLCBiaW5kaW5nLkRFRkxBVEUpO1xufVxuXG5mdW5jdGlvbiBJbmZsYXRlKG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEluZmxhdGUpKSByZXR1cm4gbmV3IEluZmxhdGUob3B0cyk7XG4gIFpsaWIuY2FsbCh0aGlzLCBvcHRzLCBiaW5kaW5nLklORkxBVEUpO1xufVxuXG5cblxuLy8gZ3ppcCAtIGJpZ2dlciBoZWFkZXIsIHNhbWUgZGVmbGF0ZSBjb21wcmVzc2lvblxuZnVuY3Rpb24gR3ppcChvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBHemlwKSkgcmV0dXJuIG5ldyBHemlwKG9wdHMpO1xuICBabGliLmNhbGwodGhpcywgb3B0cywgYmluZGluZy5HWklQKTtcbn1cblxuZnVuY3Rpb24gR3VuemlwKG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEd1bnppcCkpIHJldHVybiBuZXcgR3VuemlwKG9wdHMpO1xuICBabGliLmNhbGwodGhpcywgb3B0cywgYmluZGluZy5HVU5aSVApO1xufVxuXG5cblxuLy8gcmF3IC0gbm8gaGVhZGVyXG5mdW5jdGlvbiBEZWZsYXRlUmF3KG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERlZmxhdGVSYXcpKSByZXR1cm4gbmV3IERlZmxhdGVSYXcob3B0cyk7XG4gIFpsaWIuY2FsbCh0aGlzLCBvcHRzLCBiaW5kaW5nLkRFRkxBVEVSQVcpO1xufVxuXG5mdW5jdGlvbiBJbmZsYXRlUmF3KG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEluZmxhdGVSYXcpKSByZXR1cm4gbmV3IEluZmxhdGVSYXcob3B0cyk7XG4gIFpsaWIuY2FsbCh0aGlzLCBvcHRzLCBiaW5kaW5nLklORkxBVEVSQVcpO1xufVxuXG5cbi8vIGF1dG8tZGV0ZWN0IGhlYWRlci5cbmZ1bmN0aW9uIFVuemlwKG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVuemlwKSkgcmV0dXJuIG5ldyBVbnppcChvcHRzKTtcbiAgWmxpYi5jYWxsKHRoaXMsIG9wdHMsIGJpbmRpbmcuVU5aSVApO1xufVxuXG5cbi8vIHRoZSBabGliIGNsYXNzIHRoZXkgYWxsIGluaGVyaXQgZnJvbVxuLy8gVGhpcyB0aGluZyBtYW5hZ2VzIHRoZSBxdWV1ZSBvZiByZXF1ZXN0cywgYW5kIHJldHVybnNcbi8vIHRydWUgb3IgZmFsc2UgaWYgdGhlcmUgaXMgYW55dGhpbmcgaW4gdGhlIHF1ZXVlIHdoZW5cbi8vIHlvdSBjYWxsIHRoZSAud3JpdGUoKSBtZXRob2QuXG5cbmZ1bmN0aW9uIFpsaWIob3B0cywgbW9kZSkge1xuICB0aGlzLl9vcHRzID0gb3B0cyA9IG9wdHMgfHwge307XG4gIHRoaXMuX2NodW5rU2l6ZSA9IG9wdHMuY2h1bmtTaXplIHx8IGV4cG9ydHMuWl9ERUZBVUxUX0NIVU5LO1xuXG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdHMpO1xuXG4gIGlmIChvcHRzLmZsdXNoKSB7XG4gICAgaWYgKG9wdHMuZmx1c2ggIT09IGJpbmRpbmcuWl9OT19GTFVTSCAmJlxuICAgICAgICBvcHRzLmZsdXNoICE9PSBiaW5kaW5nLlpfUEFSVElBTF9GTFVTSCAmJlxuICAgICAgICBvcHRzLmZsdXNoICE9PSBiaW5kaW5nLlpfU1lOQ19GTFVTSCAmJlxuICAgICAgICBvcHRzLmZsdXNoICE9PSBiaW5kaW5nLlpfRlVMTF9GTFVTSCAmJlxuICAgICAgICBvcHRzLmZsdXNoICE9PSBiaW5kaW5nLlpfRklOSVNIICYmXG4gICAgICAgIG9wdHMuZmx1c2ggIT09IGJpbmRpbmcuWl9CTE9DSykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZsdXNoIGZsYWc6ICcgKyBvcHRzLmZsdXNoKTtcbiAgICB9XG4gIH1cbiAgdGhpcy5fZmx1c2hGbGFnID0gb3B0cy5mbHVzaCB8fCBiaW5kaW5nLlpfTk9fRkxVU0g7XG5cbiAgaWYgKG9wdHMuY2h1bmtTaXplKSB7XG4gICAgaWYgKG9wdHMuY2h1bmtTaXplIDwgZXhwb3J0cy5aX01JTl9DSFVOSyB8fFxuICAgICAgICBvcHRzLmNodW5rU2l6ZSA+IGV4cG9ydHMuWl9NQVhfQ0hVTkspIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaHVuayBzaXplOiAnICsgb3B0cy5jaHVua1NpemUpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRzLndpbmRvd0JpdHMpIHtcbiAgICBpZiAob3B0cy53aW5kb3dCaXRzIDwgZXhwb3J0cy5aX01JTl9XSU5ET1dCSVRTIHx8XG4gICAgICAgIG9wdHMud2luZG93Qml0cyA+IGV4cG9ydHMuWl9NQVhfV0lORE9XQklUUykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHdpbmRvd0JpdHM6ICcgKyBvcHRzLndpbmRvd0JpdHMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRzLmxldmVsKSB7XG4gICAgaWYgKG9wdHMubGV2ZWwgPCBleHBvcnRzLlpfTUlOX0xFVkVMIHx8XG4gICAgICAgIG9wdHMubGV2ZWwgPiBleHBvcnRzLlpfTUFYX0xFVkVMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWw6ICcgKyBvcHRzLmxldmVsKTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy5tZW1MZXZlbCkge1xuICAgIGlmIChvcHRzLm1lbUxldmVsIDwgZXhwb3J0cy5aX01JTl9NRU1MRVZFTCB8fFxuICAgICAgICBvcHRzLm1lbUxldmVsID4gZXhwb3J0cy5aX01BWF9NRU1MRVZFTCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1lbUxldmVsOiAnICsgb3B0cy5tZW1MZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMuc3RyYXRlZ3kpIHtcbiAgICBpZiAob3B0cy5zdHJhdGVneSAhPSBleHBvcnRzLlpfRklMVEVSRUQgJiZcbiAgICAgICAgb3B0cy5zdHJhdGVneSAhPSBleHBvcnRzLlpfSFVGRk1BTl9PTkxZICYmXG4gICAgICAgIG9wdHMuc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX1JMRSAmJlxuICAgICAgICBvcHRzLnN0cmF0ZWd5ICE9IGV4cG9ydHMuWl9GSVhFRCAmJlxuICAgICAgICBvcHRzLnN0cmF0ZWd5ICE9IGV4cG9ydHMuWl9ERUZBVUxUX1NUUkFURUdZKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyYXRlZ3k6ICcgKyBvcHRzLnN0cmF0ZWd5KTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy5kaWN0aW9uYXJ5KSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIob3B0cy5kaWN0aW9uYXJ5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRpY3Rpb25hcnk6IGl0IHNob3VsZCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX2JpbmRpbmcgPSBuZXcgYmluZGluZy5abGliKG1vZGUpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5faGFkRXJyb3IgPSBmYWxzZTtcbiAgdGhpcy5fYmluZGluZy5vbmVycm9yID0gZnVuY3Rpb24obWVzc2FnZSwgZXJybm8pIHtcbiAgICAvLyB0aGVyZSBpcyBubyB3YXkgdG8gY2xlYW5seSByZWNvdmVyLlxuICAgIC8vIGNvbnRpbnVpbmcgb25seSBvYnNjdXJlcyBwcm9ibGVtcy5cbiAgICBzZWxmLl9iaW5kaW5nID0gbnVsbDtcbiAgICBzZWxmLl9oYWRFcnJvciA9IHRydWU7XG5cbiAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgZXJyb3IuZXJybm8gPSBlcnJubztcbiAgICBlcnJvci5jb2RlID0gZXhwb3J0cy5jb2Rlc1tlcnJub107XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgfTtcblxuICB2YXIgbGV2ZWwgPSBleHBvcnRzLlpfREVGQVVMVF9DT01QUkVTU0lPTjtcbiAgaWYgKHR5cGVvZiBvcHRzLmxldmVsID09PSAnbnVtYmVyJykgbGV2ZWwgPSBvcHRzLmxldmVsO1xuXG4gIHZhciBzdHJhdGVneSA9IGV4cG9ydHMuWl9ERUZBVUxUX1NUUkFURUdZO1xuICBpZiAodHlwZW9mIG9wdHMuc3RyYXRlZ3kgPT09ICdudW1iZXInKSBzdHJhdGVneSA9IG9wdHMuc3RyYXRlZ3k7XG5cbiAgdGhpcy5fYmluZGluZy5pbml0KG9wdHMud2luZG93Qml0cyB8fCBleHBvcnRzLlpfREVGQVVMVF9XSU5ET1dCSVRTLFxuICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgICBvcHRzLm1lbUxldmVsIHx8IGV4cG9ydHMuWl9ERUZBVUxUX01FTUxFVkVMLFxuICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgICBvcHRzLmRpY3Rpb25hcnkpO1xuXG4gIHRoaXMuX2J1ZmZlciA9IG5ldyBCdWZmZXIodGhpcy5fY2h1bmtTaXplKTtcbiAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgdGhpcy5fY2xvc2VkID0gZmFsc2U7XG4gIHRoaXMuX2xldmVsID0gbGV2ZWw7XG4gIHRoaXMuX3N0cmF0ZWd5ID0gc3RyYXRlZ3k7XG5cbiAgdGhpcy5vbmNlKCdlbmQnLCB0aGlzLmNsb3NlKTtcbn1cblxudXRpbC5pbmhlcml0cyhabGliLCBUcmFuc2Zvcm0pO1xuXG5abGliLnByb3RvdHlwZS5wYXJhbXMgPSBmdW5jdGlvbihsZXZlbCwgc3RyYXRlZ3ksIGNhbGxiYWNrKSB7XG4gIGlmIChsZXZlbCA8IGV4cG9ydHMuWl9NSU5fTEVWRUwgfHxcbiAgICAgIGxldmVsID4gZXhwb3J0cy5aX01BWF9MRVZFTCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIGNvbXByZXNzaW9uIGxldmVsOiAnICsgbGV2ZWwpO1xuICB9XG4gIGlmIChzdHJhdGVneSAhPSBleHBvcnRzLlpfRklMVEVSRUQgJiZcbiAgICAgIHN0cmF0ZWd5ICE9IGV4cG9ydHMuWl9IVUZGTUFOX09OTFkgJiZcbiAgICAgIHN0cmF0ZWd5ICE9IGV4cG9ydHMuWl9STEUgJiZcbiAgICAgIHN0cmF0ZWd5ICE9IGV4cG9ydHMuWl9GSVhFRCAmJlxuICAgICAgc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX0RFRkFVTFRfU1RSQVRFR1kpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHN0cmF0ZWd5OiAnICsgc3RyYXRlZ3kpO1xuICB9XG5cbiAgaWYgKHRoaXMuX2xldmVsICE9PSBsZXZlbCB8fCB0aGlzLl9zdHJhdGVneSAhPT0gc3RyYXRlZ3kpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5mbHVzaChiaW5kaW5nLlpfU1lOQ19GTFVTSCwgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLl9iaW5kaW5nLnBhcmFtcyhsZXZlbCwgc3RyYXRlZ3kpO1xuICAgICAgaWYgKCFzZWxmLl9oYWRFcnJvcikge1xuICAgICAgICBzZWxmLl9sZXZlbCA9IGxldmVsO1xuICAgICAgICBzZWxmLl9zdHJhdGVneSA9IHN0cmF0ZWd5O1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG4gIH1cbn07XG5cblpsaWIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLl9iaW5kaW5nLnJlc2V0KCk7XG59O1xuXG4vLyBUaGlzIGlzIHRoZSBfZmx1c2ggZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSB0cmFuc2Zvcm0gY2xhc3MsXG4vLyBpbnRlcm5hbGx5LCB3aGVuIHRoZSBsYXN0IGNodW5rIGhhcyBiZWVuIHdyaXR0ZW4uXG5abGliLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICB0aGlzLl90cmFuc2Zvcm0obmV3IEJ1ZmZlcigwKSwgJycsIGNhbGxiYWNrKTtcbn07XG5cblpsaWIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oa2luZCwgY2FsbGJhY2spIHtcbiAgdmFyIHdzID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGtpbmQgPT09ICdmdW5jdGlvbicgfHwgKGtpbmQgPT09IHZvaWQgMCAmJiAhY2FsbGJhY2spKSB7XG4gICAgY2FsbGJhY2sgPSBraW5kO1xuICAgIGtpbmQgPSBiaW5kaW5nLlpfRlVMTF9GTFVTSDtcbiAgfVxuXG4gIGlmICh3cy5lbmRlZCkge1xuICAgIGlmIChjYWxsYmFjaylcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spO1xuICB9IGVsc2UgaWYgKHdzLmVuZGluZykge1xuICAgIGlmIChjYWxsYmFjaylcbiAgICAgIHRoaXMub25jZSgnZW5kJywgY2FsbGJhY2spO1xuICB9IGVsc2UgaWYgKHdzLm5lZWREcmFpbikge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLm9uY2UoJ2RyYWluJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmZsdXNoKGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9mbHVzaEZsYWcgPSBraW5kO1xuICAgIHRoaXMud3JpdGUobmV3IEJ1ZmZlcigwKSwgJycsIGNhbGxiYWNrKTtcbiAgfVxufTtcblxuWmxpYi5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2spXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG5cbiAgaWYgKHRoaXMuX2Nsb3NlZClcbiAgICByZXR1cm47XG5cbiAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9iaW5kaW5nLmNsb3NlKCk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnY2xvc2UnKTtcbiAgfSk7XG59O1xuXG5abGliLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgZmx1c2hGbGFnO1xuICB2YXIgd3MgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuICB2YXIgZW5kaW5nID0gd3MuZW5kaW5nIHx8IHdzLmVuZGVkO1xuICB2YXIgbGFzdCA9IGVuZGluZyAmJiAoIWNodW5rIHx8IHdzLmxlbmd0aCA9PT0gY2h1bmsubGVuZ3RoKTtcblxuICBpZiAoIWNodW5rID09PSBudWxsICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKVxuICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ2ludmFsaWQgaW5wdXQnKSk7XG5cbiAgLy8gSWYgaXQncyB0aGUgbGFzdCBjaHVuaywgb3IgYSBmaW5hbCBmbHVzaCwgd2UgdXNlIHRoZSBaX0ZJTklTSCBmbHVzaCBmbGFnLlxuICAvLyBJZiBpdCdzIGV4cGxpY2l0bHkgZmx1c2hpbmcgYXQgc29tZSBvdGhlciB0aW1lLCB0aGVuIHdlIHVzZVxuICAvLyBaX0ZVTExfRkxVU0guIE90aGVyd2lzZSwgdXNlIFpfTk9fRkxVU0ggZm9yIG1heGltdW0gY29tcHJlc3Npb25cbiAgLy8gZ29vZG5lc3MuXG4gIGlmIChsYXN0KVxuICAgIGZsdXNoRmxhZyA9IGJpbmRpbmcuWl9GSU5JU0g7XG4gIGVsc2Uge1xuICAgIGZsdXNoRmxhZyA9IHRoaXMuX2ZsdXNoRmxhZztcbiAgICAvLyBvbmNlIHdlJ3ZlIGZsdXNoZWQgdGhlIGxhc3Qgb2YgdGhlIHF1ZXVlLCBzdG9wIGZsdXNoaW5nIGFuZFxuICAgIC8vIGdvIGJhY2sgdG8gdGhlIG5vcm1hbCBiZWhhdmlvci5cbiAgICBpZiAoY2h1bmsubGVuZ3RoID49IHdzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fZmx1c2hGbGFnID0gdGhpcy5fb3B0cy5mbHVzaCB8fCBiaW5kaW5nLlpfTk9fRkxVU0g7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9wcm9jZXNzQ2h1bmsoY2h1bmssIGZsdXNoRmxhZywgY2IpO1xufTtcblxuWmxpYi5wcm90b3R5cGUuX3Byb2Nlc3NDaHVuayA9IGZ1bmN0aW9uKGNodW5rLCBmbHVzaEZsYWcsIGNiKSB7XG4gIHZhciBhdmFpbEluQmVmb3JlID0gY2h1bmsgJiYgY2h1bmsubGVuZ3RoO1xuICB2YXIgYXZhaWxPdXRCZWZvcmUgPSB0aGlzLl9jaHVua1NpemUgLSB0aGlzLl9vZmZzZXQ7XG4gIHZhciBpbk9mZiA9IDA7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHZhciBhc3luYyA9IHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJztcblxuICBpZiAoIWFzeW5jKSB7XG4gICAgdmFyIGJ1ZmZlcnMgPSBbXTtcbiAgICB2YXIgbnJlYWQgPSAwO1xuXG4gICAgdmFyIGVycm9yO1xuICAgIHRoaXMub24oJ2Vycm9yJywgZnVuY3Rpb24oZXIpIHtcbiAgICAgIGVycm9yID0gZXI7XG4gICAgfSk7XG5cbiAgICBkbyB7XG4gICAgICB2YXIgcmVzID0gdGhpcy5fYmluZGluZy53cml0ZVN5bmMoZmx1c2hGbGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rLCAvLyBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluT2ZmLCAvLyBpbl9vZmZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbEluQmVmb3JlLCAvLyBpbl9sZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXIsIC8vIG91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldCwgLy9vdXRfb2ZmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxPdXRCZWZvcmUpOyAvLyBvdXRfbGVuXG4gICAgfSB3aGlsZSAoIXRoaXMuX2hhZEVycm9yICYmIGNhbGxiYWNrKHJlc1swXSwgcmVzWzFdKSk7XG5cbiAgICBpZiAodGhpcy5faGFkRXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHZhciBidWYgPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIG5yZWFkKTtcbiAgICB0aGlzLmNsb3NlKCk7XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgdmFyIHJlcSA9IHRoaXMuX2JpbmRpbmcud3JpdGUoZmx1c2hGbGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuaywgLy8gaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5PZmYsIC8vIGluX29mZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbEluQmVmb3JlLCAvLyBpbl9sZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnVmZmVyLCAvLyBvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0LCAvL291dF9vZmZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxPdXRCZWZvcmUpOyAvLyBvdXRfbGVuXG5cbiAgcmVxLmJ1ZmZlciA9IGNodW5rO1xuICByZXEuY2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICBmdW5jdGlvbiBjYWxsYmFjayhhdmFpbEluQWZ0ZXIsIGF2YWlsT3V0QWZ0ZXIpIHtcbiAgICBpZiAoc2VsZi5faGFkRXJyb3IpXG4gICAgICByZXR1cm47XG5cbiAgICB2YXIgaGF2ZSA9IGF2YWlsT3V0QmVmb3JlIC0gYXZhaWxPdXRBZnRlcjtcbiAgICBhc3NlcnQoaGF2ZSA+PSAwLCAnaGF2ZSBzaG91bGQgbm90IGdvIGRvd24nKTtcblxuICAgIGlmIChoYXZlID4gMCkge1xuICAgICAgdmFyIG91dCA9IHNlbGYuX2J1ZmZlci5zbGljZShzZWxmLl9vZmZzZXQsIHNlbGYuX29mZnNldCArIGhhdmUpO1xuICAgICAgc2VsZi5fb2Zmc2V0ICs9IGhhdmU7XG4gICAgICAvLyBzZXJ2ZSBzb21lIG91dHB1dCB0byB0aGUgY29uc3VtZXIuXG4gICAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgc2VsZi5wdXNoKG91dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXJzLnB1c2gob3V0KTtcbiAgICAgICAgbnJlYWQgKz0gb3V0Lmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBleGhhdXN0ZWQgdGhlIG91dHB1dCBidWZmZXIsIG9yIHVzZWQgYWxsIHRoZSBpbnB1dCBjcmVhdGUgYSBuZXcgb25lLlxuICAgIGlmIChhdmFpbE91dEFmdGVyID09PSAwIHx8IHNlbGYuX29mZnNldCA+PSBzZWxmLl9jaHVua1NpemUpIHtcbiAgICAgIGF2YWlsT3V0QmVmb3JlID0gc2VsZi5fY2h1bmtTaXplO1xuICAgICAgc2VsZi5fb2Zmc2V0ID0gMDtcbiAgICAgIHNlbGYuX2J1ZmZlciA9IG5ldyBCdWZmZXIoc2VsZi5fY2h1bmtTaXplKTtcbiAgICB9XG5cbiAgICBpZiAoYXZhaWxPdXRBZnRlciA9PT0gMCkge1xuICAgICAgLy8gTm90IGFjdHVhbGx5IGRvbmUuICBOZWVkIHRvIHJlcHJvY2Vzcy5cbiAgICAgIC8vIEFsc28sIHVwZGF0ZSB0aGUgYXZhaWxJbkJlZm9yZSB0byB0aGUgYXZhaWxJbkFmdGVyIHZhbHVlLFxuICAgICAgLy8gc28gdGhhdCBpZiB3ZSBoYXZlIHRvIGhpdCBpdCBhIHRoaXJkIChmb3VydGgsIGV0Yy4pIHRpbWUsXG4gICAgICAvLyBpdCdsbCBoYXZlIHRoZSBjb3JyZWN0IGJ5dGUgY291bnRzLlxuICAgICAgaW5PZmYgKz0gKGF2YWlsSW5CZWZvcmUgLSBhdmFpbEluQWZ0ZXIpO1xuICAgICAgYXZhaWxJbkJlZm9yZSA9IGF2YWlsSW5BZnRlcjtcblxuICAgICAgaWYgKCFhc3luYylcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIHZhciBuZXdSZXEgPSBzZWxmLl9iaW5kaW5nLndyaXRlKGZsdXNoRmxhZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5PZmYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbEluQmVmb3JlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2h1bmtTaXplKTtcbiAgICAgIG5ld1JlcS5jYWxsYmFjayA9IGNhbGxiYWNrOyAvLyB0aGlzIHNhbWUgZnVuY3Rpb25cbiAgICAgIG5ld1JlcS5idWZmZXIgPSBjaHVuaztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWFzeW5jKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gZmluaXNoZWQgd2l0aCB0aGUgY2h1bmsuXG4gICAgY2IoKTtcbiAgfVxufTtcblxudXRpbC5pbmhlcml0cyhEZWZsYXRlLCBabGliKTtcbnV0aWwuaW5oZXJpdHMoSW5mbGF0ZSwgWmxpYik7XG51dGlsLmluaGVyaXRzKEd6aXAsIFpsaWIpO1xudXRpbC5pbmhlcml0cyhHdW56aXAsIFpsaWIpO1xudXRpbC5pbmhlcml0cyhEZWZsYXRlUmF3LCBabGliKTtcbnV0aWwuaW5oZXJpdHMoSW5mbGF0ZVJhdywgWmxpYik7XG51dGlsLmluaGVyaXRzKFVuemlwLCBabGliKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpO1xudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXI7XG52YXIgU2xvd0J1ZmZlciA9IGJ1ZmZlci5TbG93QnVmZmVyO1xudmFyIE1BWF9MRU4gPSBidWZmZXIua01heExlbmd0aCB8fCAyMTQ3NDgzNjQ3O1xuZXhwb3J0cy5hbGxvYyA9IGZ1bmN0aW9uIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgQnVmZmVyLmFsbG9jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IG5vdCBiZSBudW1iZXInKTtcbiAgfVxuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZSBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKHNpemUgPiBNQVhfTEVOKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NpemUgaXMgdG9vIGxhcmdlJyk7XG4gIH1cbiAgdmFyIGVuYyA9IGVuY29kaW5nO1xuICB2YXIgX2ZpbGwgPSBmaWxsO1xuICBpZiAoX2ZpbGwgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuYyA9IHVuZGVmaW5lZDtcbiAgICBfZmlsbCA9IDA7XG4gIH1cbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoc2l6ZSk7XG4gIGlmICh0eXBlb2YgX2ZpbGwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIGZpbGxCdWYgPSBuZXcgQnVmZmVyKF9maWxsLCBlbmMpO1xuICAgIHZhciBmbGVuID0gZmlsbEJ1Zi5sZW5ndGg7XG4gICAgdmFyIGkgPSAtMTtcbiAgICB3aGlsZSAoKytpIDwgc2l6ZSkge1xuICAgICAgYnVmW2ldID0gZmlsbEJ1ZltpICUgZmxlbl07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKF9maWxsKTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuZXhwb3J0cy5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIGFsbG9jVW5zYWZlKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIuYWxsb2NVbnNhZmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlKHNpemUpO1xuICB9XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplIG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuICBpZiAoc2l6ZSA+IE1BWF9MRU4pIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc2l6ZSBpcyB0b28gbGFyZ2UnKTtcbiAgfVxuICByZXR1cm4gbmV3IEJ1ZmZlcihzaXplKTtcbn1cbmV4cG9ydHMuZnJvbSA9IGZ1bmN0aW9uIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIEJ1ZmZlci5mcm9tID09PSAnZnVuY3Rpb24nICYmICghZ2xvYmFsLlVpbnQ4QXJyYXkgfHwgVWludDhBcnJheS5mcm9tICE9PSBCdWZmZXIuZnJvbSkpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgdmFyIG9mZnNldCA9IGVuY29kaW5nT3JPZmZzZXQ7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cbiAgICB2YXIgbGVuID0gbGVuZ3RoO1xuICAgIGlmICh0eXBlb2YgbGVuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aCAtIG9mZnNldDtcbiAgICB9XG4gICAgaWYgKG9mZnNldCA+PSB2YWx1ZS5ieXRlTGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG4gICAgaWYgKGxlbiA+IHZhbHVlLmJ5dGVMZW5ndGggLSBvZmZzZXQpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEJ1ZmZlcih2YWx1ZS5zbGljZShvZmZzZXQsIG9mZnNldCArIGxlbikpO1xuICB9XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgdmFyIG91dCA9IG5ldyBCdWZmZXIodmFsdWUubGVuZ3RoKTtcbiAgICB2YWx1ZS5jb3B5KG91dCwgMCwgMCwgdmFsdWUubGVuZ3RoKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gdmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnR5cGUgPT09ICdCdWZmZXInICYmIEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YSkpIHtcbiAgICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlLmRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgJyArICdBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpO1xufVxuZXhwb3J0cy5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiBhbGxvY1Vuc2FmZVNsb3coc2l6ZSkge1xuICBpZiAodHlwZW9mIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyhzaXplKTtcbiAgfVxuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZSBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKHNpemUgPj0gTUFYX0xFTikge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzaXplIGlzIHRvbyBsYXJnZScpO1xuICB9XG4gIHJldHVybiBuZXcgU2xvd0J1ZmZlcihzaXplKTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geG9yIChhLCBiKSB7XG4gIHZhciBsZW5ndGggPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpXG4gIHZhciBidWZmZXIgPSBuZXcgQnVmZmVyKGxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgYnVmZmVyW2ldID0gYVtpXSBeIGJbaV1cbiAgfVxuXG4gIHJldHVybiBidWZmZXJcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxudmFyIEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmZcbmV4cG9ydHMua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0XG4gKiAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGVcbiAqIHVzaW5nIF9fcHJvdG9fXy4gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWBcbiAqIChTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOCkuIElFIDEwIGxhY2tzIHN1cHBvcnRcbiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBjb25zb2xlLmVycm9yKFxuICAgICdUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgJyArXG4gICAgJ2BidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuJ1xuICApXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgLy8gQ2FuIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkP1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAobGVuZ3RoID4gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYnVmXG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG5pZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgJiZcbiAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIE5vdGU6IENoYW5nZSBwcm90b3R5cGUgKmFmdGVyKiBCdWZmZXIuZnJvbSBpcyBkZWZpbmVkIHRvIHdvcmthcm91bmQgQ2hyb21lIGJ1Zzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4XG5CdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG5CdWZmZXIuX19wcm90b19fID0gVWludDhBcnJheVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0dGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IGJ1Zi53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgYnVmID0gYnVmLnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGJ1ZltpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgdmFyIGJ1ZlxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgYnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0IChvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW4pXG5cbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJ1ZlxuICAgIH1cblxuICAgIG9iai5jb3B5KGJ1ZiwgMCwgMCwgbGVuKVxuICAgIHJldHVybiBidWZcbiAgfVxuXG4gIGlmIChvYmopIHtcbiAgICBpZiAoaXNBcnJheUJ1ZmZlclZpZXcob2JqKSB8fCAnbGVuZ3RoJyBpbiBvYmopIHtcbiAgICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICAgIH1cblxuICAgIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgQXJyYXkuaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4nKVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwgS19NQVhfTEVOR1RIYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiBiICE9IG51bGwgJiYgYi5faXNCdWZmZXIgPT09IHRydWVcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKGlzQXJyYXlCdWZmZXJWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgKGFuZCB0aGUgYGlzLWJ1ZmZlcmAgbnBtIHBhY2thZ2UpXG4vLyB0byBkZXRlY3QgYSBCdWZmZXIgaW5zdGFuY2UuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgaW5zdGFuY2VvZiBCdWZmZXJgXG4vLyByZWxpYWJseSBpbiBhIGJyb3dzZXJpZnkgY29udGV4dCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGRpZmZlcmVudFxuLy8gY29waWVzIG9mIHRoZSAnYnVmZmVyJyBwYWNrYWdlIGluIHVzZS4gVGhpcyBtZXRob2Qgd29ya3MgZXZlbiBmb3IgQnVmZmVyXG4vLyBpbnN0YW5jZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSBhbm90aGVyIGNvcHkgb2YgdGhlIGBidWZmZXJgIHBhY2thZ2UuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNTRcbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDApIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gTm9kZSAwLjEwIHN1cHBvcnRzIGBBcnJheUJ1ZmZlcmAgYnV0IGxhY2tzIGBBcnJheUJ1ZmZlci5pc1ZpZXdgXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyAob2JqKSB7XG4gIHJldHVybiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KG9iailcbn1cblxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBcIjEwMFwiOiBcIkNvbnRpbnVlXCIsXG4gIFwiMTAxXCI6IFwiU3dpdGNoaW5nIFByb3RvY29sc1wiLFxuICBcIjEwMlwiOiBcIlByb2Nlc3NpbmdcIixcbiAgXCIyMDBcIjogXCJPS1wiLFxuICBcIjIwMVwiOiBcIkNyZWF0ZWRcIixcbiAgXCIyMDJcIjogXCJBY2NlcHRlZFwiLFxuICBcIjIwM1wiOiBcIk5vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uXCIsXG4gIFwiMjA0XCI6IFwiTm8gQ29udGVudFwiLFxuICBcIjIwNVwiOiBcIlJlc2V0IENvbnRlbnRcIixcbiAgXCIyMDZcIjogXCJQYXJ0aWFsIENvbnRlbnRcIixcbiAgXCIyMDdcIjogXCJNdWx0aS1TdGF0dXNcIixcbiAgXCIyMDhcIjogXCJBbHJlYWR5IFJlcG9ydGVkXCIsXG4gIFwiMjI2XCI6IFwiSU0gVXNlZFwiLFxuICBcIjMwMFwiOiBcIk11bHRpcGxlIENob2ljZXNcIixcbiAgXCIzMDFcIjogXCJNb3ZlZCBQZXJtYW5lbnRseVwiLFxuICBcIjMwMlwiOiBcIkZvdW5kXCIsXG4gIFwiMzAzXCI6IFwiU2VlIE90aGVyXCIsXG4gIFwiMzA0XCI6IFwiTm90IE1vZGlmaWVkXCIsXG4gIFwiMzA1XCI6IFwiVXNlIFByb3h5XCIsXG4gIFwiMzA3XCI6IFwiVGVtcG9yYXJ5IFJlZGlyZWN0XCIsXG4gIFwiMzA4XCI6IFwiUGVybWFuZW50IFJlZGlyZWN0XCIsXG4gIFwiNDAwXCI6IFwiQmFkIFJlcXVlc3RcIixcbiAgXCI0MDFcIjogXCJVbmF1dGhvcml6ZWRcIixcbiAgXCI0MDJcIjogXCJQYXltZW50IFJlcXVpcmVkXCIsXG4gIFwiNDAzXCI6IFwiRm9yYmlkZGVuXCIsXG4gIFwiNDA0XCI6IFwiTm90IEZvdW5kXCIsXG4gIFwiNDA1XCI6IFwiTWV0aG9kIE5vdCBBbGxvd2VkXCIsXG4gIFwiNDA2XCI6IFwiTm90IEFjY2VwdGFibGVcIixcbiAgXCI0MDdcIjogXCJQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFwiLFxuICBcIjQwOFwiOiBcIlJlcXVlc3QgVGltZW91dFwiLFxuICBcIjQwOVwiOiBcIkNvbmZsaWN0XCIsXG4gIFwiNDEwXCI6IFwiR29uZVwiLFxuICBcIjQxMVwiOiBcIkxlbmd0aCBSZXF1aXJlZFwiLFxuICBcIjQxMlwiOiBcIlByZWNvbmRpdGlvbiBGYWlsZWRcIixcbiAgXCI0MTNcIjogXCJQYXlsb2FkIFRvbyBMYXJnZVwiLFxuICBcIjQxNFwiOiBcIlVSSSBUb28gTG9uZ1wiLFxuICBcIjQxNVwiOiBcIlVuc3VwcG9ydGVkIE1lZGlhIFR5cGVcIixcbiAgXCI0MTZcIjogXCJSYW5nZSBOb3QgU2F0aXNmaWFibGVcIixcbiAgXCI0MTdcIjogXCJFeHBlY3RhdGlvbiBGYWlsZWRcIixcbiAgXCI0MThcIjogXCJJJ20gYSB0ZWFwb3RcIixcbiAgXCI0MjFcIjogXCJNaXNkaXJlY3RlZCBSZXF1ZXN0XCIsXG4gIFwiNDIyXCI6IFwiVW5wcm9jZXNzYWJsZSBFbnRpdHlcIixcbiAgXCI0MjNcIjogXCJMb2NrZWRcIixcbiAgXCI0MjRcIjogXCJGYWlsZWQgRGVwZW5kZW5jeVwiLFxuICBcIjQyNVwiOiBcIlVub3JkZXJlZCBDb2xsZWN0aW9uXCIsXG4gIFwiNDI2XCI6IFwiVXBncmFkZSBSZXF1aXJlZFwiLFxuICBcIjQyOFwiOiBcIlByZWNvbmRpdGlvbiBSZXF1aXJlZFwiLFxuICBcIjQyOVwiOiBcIlRvbyBNYW55IFJlcXVlc3RzXCIsXG4gIFwiNDMxXCI6IFwiUmVxdWVzdCBIZWFkZXIgRmllbGRzIFRvbyBMYXJnZVwiLFxuICBcIjQ1MVwiOiBcIlVuYXZhaWxhYmxlIEZvciBMZWdhbCBSZWFzb25zXCIsXG4gIFwiNTAwXCI6IFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIsXG4gIFwiNTAxXCI6IFwiTm90IEltcGxlbWVudGVkXCIsXG4gIFwiNTAyXCI6IFwiQmFkIEdhdGV3YXlcIixcbiAgXCI1MDNcIjogXCJTZXJ2aWNlIFVuYXZhaWxhYmxlXCIsXG4gIFwiNTA0XCI6IFwiR2F0ZXdheSBUaW1lb3V0XCIsXG4gIFwiNTA1XCI6IFwiSFRUUCBWZXJzaW9uIE5vdCBTdXBwb3J0ZWRcIixcbiAgXCI1MDZcIjogXCJWYXJpYW50IEFsc28gTmVnb3RpYXRlc1wiLFxuICBcIjUwN1wiOiBcIkluc3VmZmljaWVudCBTdG9yYWdlXCIsXG4gIFwiNTA4XCI6IFwiTG9vcCBEZXRlY3RlZFwiLFxuICBcIjUwOVwiOiBcIkJhbmR3aWR0aCBMaW1pdCBFeGNlZWRlZFwiLFxuICBcIjUxMFwiOiBcIk5vdCBFeHRlbmRlZFwiLFxuICBcIjUxMVwiOiBcIk5ldHdvcmsgQXV0aGVudGljYXRpb24gUmVxdWlyZWRcIlxufVxuIiwiZnVuY3Rpb24gQ2FzZWxlc3MgKGRpY3QpIHtcbiAgdGhpcy5kaWN0ID0gZGljdCB8fCB7fVxufVxuQ2FzZWxlc3MucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgY2xvYmJlcikge1xuICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yICh2YXIgaSBpbiBuYW1lKSB7XG4gICAgICB0aGlzLnNldChpLCBuYW1lW2ldLCB2YWx1ZSlcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBjbG9iYmVyID09PSAndW5kZWZpbmVkJykgY2xvYmJlciA9IHRydWVcbiAgICB2YXIgaGFzID0gdGhpcy5oYXMobmFtZSlcblxuICAgIGlmICghY2xvYmJlciAmJiBoYXMpIHRoaXMuZGljdFtoYXNdID0gdGhpcy5kaWN0W2hhc10gKyAnLCcgKyB2YWx1ZVxuICAgIGVsc2UgdGhpcy5kaWN0W2hhcyB8fCBuYW1lXSA9IHZhbHVlXG4gICAgcmV0dXJuIGhhc1xuICB9XG59XG5DYXNlbGVzcy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmRpY3QpXG4gICAgLCBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgO1xuICBmb3IgKHZhciBpPTA7aTxrZXlzLmxlbmd0aDtpKyspIHtcbiAgICBpZiAoa2V5c1tpXS50b0xvd2VyQ2FzZSgpID09PSBuYW1lKSByZXR1cm4ga2V5c1tpXVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuQ2FzZWxlc3MucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgdmFyIHJlc3VsdCwgX2tleVxuICB2YXIgaGVhZGVycyA9IHRoaXMuZGljdFxuICBPYmplY3Qua2V5cyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBfa2V5ID0ga2V5LnRvTG93ZXJDYXNlKClcbiAgICBpZiAobmFtZSA9PT0gX2tleSkgcmVzdWx0ID0gaGVhZGVyc1trZXldXG4gIH0pXG4gIHJldHVybiByZXN1bHRcbn1cbkNhc2VsZXNzLnByb3RvdHlwZS5zd2FwID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIGhhcyA9IHRoaXMuaGFzKG5hbWUpXG4gIGlmIChoYXMgPT09IG5hbWUpIHJldHVyblxuICBpZiAoIWhhcykgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBubyBoZWFkZXIgdGhhbiBtYXRjaGVzIFwiJytuYW1lKydcIicpXG4gIHRoaXMuZGljdFtuYW1lXSA9IHRoaXMuZGljdFtoYXNdXG4gIGRlbGV0ZSB0aGlzLmRpY3RbaGFzXVxufVxuQ2FzZWxlc3MucHJvdG90eXBlLmRlbCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBoYXMgPSB0aGlzLmhhcyhuYW1lKVxuICByZXR1cm4gZGVsZXRlIHRoaXMuZGljdFtoYXMgfHwgbmFtZV1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGljdCkge3JldHVybiBuZXcgQ2FzZWxlc3MoZGljdCl9XG5tb2R1bGUuZXhwb3J0cy5odHRwaWZ5ID0gZnVuY3Rpb24gKHJlc3AsIGhlYWRlcnMpIHtcbiAgdmFyIGMgPSBuZXcgQ2FzZWxlc3MoaGVhZGVycylcbiAgcmVzcC5zZXRIZWFkZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgY2xvYmJlcikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSByZXR1cm5cbiAgICByZXR1cm4gYy5zZXQoa2V5LCB2YWx1ZSwgY2xvYmJlcilcbiAgfVxuICByZXNwLmhhc0hlYWRlciA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gYy5oYXMoa2V5KVxuICB9XG4gIHJlc3AuZ2V0SGVhZGVyID0gZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBjLmdldChrZXkpXG4gIH1cbiAgcmVzcC5yZW1vdmVIZWFkZXIgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGMuZGVsKGtleSlcbiAgfVxuICByZXNwLmhlYWRlcnMgPSBjLmRpY3RcbiAgcmV0dXJuIGNcbn1cbiIsInZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdzdHJlYW0nKS5UcmFuc2Zvcm1cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKS5TdHJpbmdEZWNvZGVyXG5tb2R1bGUuZXhwb3J0cyA9IENpcGhlckJhc2VcbmluaGVyaXRzKENpcGhlckJhc2UsIFRyYW5zZm9ybSlcbmZ1bmN0aW9uIENpcGhlckJhc2UgKGhhc2hNb2RlKSB7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG4gIHRoaXMuaGFzaE1vZGUgPSB0eXBlb2YgaGFzaE1vZGUgPT09ICdzdHJpbmcnXG4gIGlmICh0aGlzLmhhc2hNb2RlKSB7XG4gICAgdGhpc1toYXNoTW9kZV0gPSB0aGlzLl9maW5hbE9yRGlnZXN0XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5maW5hbCA9IHRoaXMuX2ZpbmFsT3JEaWdlc3RcbiAgfVxuICB0aGlzLl9kZWNvZGVyID0gbnVsbFxuICB0aGlzLl9lbmNvZGluZyA9IG51bGxcbn1cbkNpcGhlckJhc2UucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBpbnB1dEVuYywgb3V0cHV0RW5jKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICBkYXRhID0gbmV3IEJ1ZmZlcihkYXRhLCBpbnB1dEVuYylcbiAgfVxuICB2YXIgb3V0RGF0YSA9IHRoaXMuX3VwZGF0ZShkYXRhKVxuICBpZiAodGhpcy5oYXNoTW9kZSkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cbiAgaWYgKG91dHB1dEVuYykge1xuICAgIG91dERhdGEgPSB0aGlzLl90b1N0cmluZyhvdXREYXRhLCBvdXRwdXRFbmMpXG4gIH1cbiAgcmV0dXJuIG91dERhdGFcbn1cblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmcgPSBmdW5jdGlvbiAoKSB7fVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5nZXRBdXRoVGFnID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3RyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5zZXRBdXRoVGFnID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3RyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5zZXRBQUQgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcigndHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGRhdGEsIF8sIG5leHQpIHtcbiAgdmFyIGVyclxuICB0cnkge1xuICAgIGlmICh0aGlzLmhhc2hNb2RlKSB7XG4gICAgICB0aGlzLl91cGRhdGUoZGF0YSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKHRoaXMuX3VwZGF0ZShkYXRhKSlcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnIgPSBlXG4gIH0gZmluYWxseSB7XG4gICAgbmV4dChlcnIpXG4gIH1cbn1cbkNpcGhlckJhc2UucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChkb25lKSB7XG4gIHZhciBlcnJcbiAgdHJ5IHtcbiAgICB0aGlzLnB1c2godGhpcy5fZmluYWwoKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVyciA9IGVcbiAgfSBmaW5hbGx5IHtcbiAgICBkb25lKGVycilcbiAgfVxufVxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3QgPSBmdW5jdGlvbiAob3V0cHV0RW5jKSB7XG4gIHZhciBvdXREYXRhID0gdGhpcy5fZmluYWwoKSB8fCBuZXcgQnVmZmVyKCcnKVxuICBpZiAob3V0cHV0RW5jKSB7XG4gICAgb3V0RGF0YSA9IHRoaXMuX3RvU3RyaW5nKG91dERhdGEsIG91dHB1dEVuYywgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb3V0RGF0YVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAodmFsdWUsIGVuYywgZmluKSB7XG4gIGlmICghdGhpcy5fZGVjb2Rlcikge1xuICAgIHRoaXMuX2RlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpXG4gICAgdGhpcy5fZW5jb2RpbmcgPSBlbmNcbiAgfVxuICBpZiAodGhpcy5fZW5jb2RpbmcgIT09IGVuYykge1xuICAgIHRocm93IG5ldyBFcnJvcignY2FuXFwndCBzd2l0Y2ggZW5jb2RpbmdzJylcbiAgfVxuICB2YXIgb3V0ID0gdGhpcy5fZGVjb2Rlci53cml0ZSh2YWx1ZSlcbiAgaWYgKGZpbikge1xuICAgIG91dCArPSB0aGlzLl9kZWNvZGVyLmVuZCgpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuIiwiXG4vKipcbiAqIHNsaWNlKCkgcmVmZXJlbmNlLlxuICovXG5cbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuLyoqXG4gKiBFeHBvc2UgYGNvYC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvWydkZWZhdWx0J10gPSBjby5jbyA9IGNvO1xuXG4vKipcbiAqIFdyYXAgdGhlIGdpdmVuIGdlbmVyYXRvciBgZm5gIGludG8gYVxuICogZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgcHJvbWlzZS5cbiAqIFRoaXMgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB0aGF0XG4gKiBldmVyeSBgY28oKWAgY2FsbCBkb2Vzbid0IGNyZWF0ZSBhIG5ldyxcbiAqIHVubmVjZXNzYXJ5IGNsb3N1cmUuXG4gKlxuICogQHBhcmFtIHtHZW5lcmF0b3JGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5jby53cmFwID0gZnVuY3Rpb24gKGZuKSB7XG4gIGNyZWF0ZVByb21pc2UuX19nZW5lcmF0b3JGdW5jdGlvbl9fID0gZm47XG4gIHJldHVybiBjcmVhdGVQcm9taXNlO1xuICBmdW5jdGlvbiBjcmVhdGVQcm9taXNlKCkge1xuICAgIHJldHVybiBjby5jYWxsKHRoaXMsIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG59O1xuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBvciBhIGdlbmVyYXRvclxuICogYW5kIHJldHVybiBhIHByb21pc2UuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGNvKGdlbikge1xuICB2YXIgY3R4ID0gdGhpcztcbiAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSlcblxuICAvLyB3ZSB3cmFwIGV2ZXJ5dGhpbmcgaW4gYSBwcm9taXNlIHRvIGF2b2lkIHByb21pc2UgY2hhaW5pbmcsXG4gIC8vIHdoaWNoIGxlYWRzIHRvIG1lbW9yeSBsZWFrIGVycm9ycy5cbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90ai9jby9pc3N1ZXMvMTgwXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICBpZiAodHlwZW9mIGdlbiA9PT0gJ2Z1bmN0aW9uJykgZ2VuID0gZ2VuLmFwcGx5KGN0eCwgYXJncyk7XG4gICAgaWYgKCFnZW4gfHwgdHlwZW9mIGdlbi5uZXh0ICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gcmVzb2x2ZShnZW4pO1xuXG4gICAgb25GdWxmaWxsZWQoKTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7TWl4ZWR9IHJlc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICogQGFwaSBwcml2YXRlXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBvbkZ1bGZpbGxlZChyZXMpIHtcbiAgICAgIHZhciByZXQ7XG4gICAgICB0cnkge1xuICAgICAgICByZXQgPSBnZW4ubmV4dChyZXMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgfVxuICAgICAgbmV4dChyZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICogQGFwaSBwcml2YXRlXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBvblJlamVjdGVkKGVycikge1xuICAgICAgdmFyIHJldDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldCA9IGdlbi50aHJvdyhlcnIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgfVxuICAgICAgbmV4dChyZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbmV4dCB2YWx1ZSBpbiB0aGUgZ2VuZXJhdG9yLFxuICAgICAqIHJldHVybiBhIHByb21pc2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcmV0XG4gICAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICAgKiBAYXBpIHByaXZhdGVcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIG5leHQocmV0KSB7XG4gICAgICBpZiAocmV0LmRvbmUpIHJldHVybiByZXNvbHZlKHJldC52YWx1ZSk7XG4gICAgICB2YXIgdmFsdWUgPSB0b1Byb21pc2UuY2FsbChjdHgsIHJldC52YWx1ZSk7XG4gICAgICBpZiAodmFsdWUgJiYgaXNQcm9taXNlKHZhbHVlKSkgcmV0dXJuIHZhbHVlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgcmV0dXJuIG9uUmVqZWN0ZWQobmV3IFR5cGVFcnJvcignWW91IG1heSBvbmx5IHlpZWxkIGEgZnVuY3Rpb24sIHByb21pc2UsIGdlbmVyYXRvciwgYXJyYXksIG9yIG9iamVjdCwgJ1xuICAgICAgICArICdidXQgdGhlIGZvbGxvd2luZyBvYmplY3Qgd2FzIHBhc3NlZDogXCInICsgU3RyaW5nKHJldC52YWx1ZSkgKyAnXCInKSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgYHlpZWxkYGVkIHZhbHVlIGludG8gYSBwcm9taXNlLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IG9ialxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHRvUHJvbWlzZShvYmopIHtcbiAgaWYgKCFvYmopIHJldHVybiBvYmo7XG4gIGlmIChpc1Byb21pc2Uob2JqKSkgcmV0dXJuIG9iajtcbiAgaWYgKGlzR2VuZXJhdG9yRnVuY3Rpb24ob2JqKSB8fCBpc0dlbmVyYXRvcihvYmopKSByZXR1cm4gY28uY2FsbCh0aGlzLCBvYmopO1xuICBpZiAoJ2Z1bmN0aW9uJyA9PSB0eXBlb2Ygb2JqKSByZXR1cm4gdGh1bmtUb1Byb21pc2UuY2FsbCh0aGlzLCBvYmopO1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gYXJyYXlUb1Byb21pc2UuY2FsbCh0aGlzLCBvYmopO1xuICBpZiAoaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iamVjdFRvUHJvbWlzZS5jYWxsKHRoaXMsIG9iaik7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHRodW5rIHRvIGEgcHJvbWlzZS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufVxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHRodW5rVG9Qcm9taXNlKGZuKSB7XG4gIHZhciBjdHggPSB0aGlzO1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZuLmNhbGwoY3R4LCBmdW5jdGlvbiAoZXJyLCByZXMpIHtcbiAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikgcmVzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgcmVzb2x2ZShyZXMpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IG9mIFwieWllbGRhYmxlc1wiIHRvIGEgcHJvbWlzZS5cbiAqIFVzZXMgYFByb21pc2UuYWxsKClgIGludGVybmFsbHkuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gb2JqXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gYXJyYXlUb1Byb21pc2Uob2JqKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChvYmoubWFwKHRvUHJvbWlzZSwgdGhpcykpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gb2JqZWN0IG9mIFwieWllbGRhYmxlc1wiIHRvIGEgcHJvbWlzZS5cbiAqIFVzZXMgYFByb21pc2UuYWxsKClgIGludGVybmFsbHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG9iamVjdFRvUHJvbWlzZShvYmope1xuICB2YXIgcmVzdWx0cyA9IG5ldyBvYmouY29uc3RydWN0b3IoKTtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICB2YXIgcHJvbWlzZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgdmFyIHByb21pc2UgPSB0b1Byb21pc2UuY2FsbCh0aGlzLCBvYmpba2V5XSk7XG4gICAgaWYgKHByb21pc2UgJiYgaXNQcm9taXNlKHByb21pc2UpKSBkZWZlcihwcm9taXNlLCBrZXkpO1xuICAgIGVsc2UgcmVzdWx0c1trZXldID0gb2JqW2tleV07XG4gIH1cbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfSk7XG5cbiAgZnVuY3Rpb24gZGVmZXIocHJvbWlzZSwga2V5KSB7XG4gICAgLy8gcHJlZGVmaW5lIHRoZSBrZXkgaW4gdGhlIHJlc3VsdFxuICAgIHJlc3VsdHNba2V5XSA9IHVuZGVmaW5lZDtcbiAgICBwcm9taXNlcy5wdXNoKHByb21pc2UudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICByZXN1bHRzW2tleV0gPSByZXM7XG4gICAgfSkpO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYG9iamAgaXMgYSBwcm9taXNlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc1Byb21pc2Uob2JqKSB7XG4gIHJldHVybiAnZnVuY3Rpb24nID09IHR5cGVvZiBvYmoudGhlbjtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhIGdlbmVyYXRvci5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBvYmpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc0dlbmVyYXRvcihvYmopIHtcbiAgcmV0dXJuICdmdW5jdGlvbicgPT0gdHlwZW9mIG9iai5uZXh0ICYmICdmdW5jdGlvbicgPT0gdHlwZW9mIG9iai50aHJvdztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhIGdlbmVyYXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSBvYmpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNHZW5lcmF0b3JGdW5jdGlvbihvYmopIHtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICBpZiAoIWNvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7XG4gIGlmICgnR2VuZXJhdG9yRnVuY3Rpb24nID09PSBjb25zdHJ1Y3Rvci5uYW1lIHx8ICdHZW5lcmF0b3JGdW5jdGlvbicgPT09IGNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGlzR2VuZXJhdG9yKGNvbnN0cnVjdG9yLnByb3RvdHlwZSk7XG59XG5cbi8qKlxuICogQ2hlY2sgZm9yIHBsYWluIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge01peGVkfSB2YWxcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIE9iamVjdCA9PSB2YWwuY29uc3RydWN0b3I7XG59XG4iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgRGVsYXllZFN0cmVhbSA9IHJlcXVpcmUoJ2RlbGF5ZWQtc3RyZWFtJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29tYmluZWRTdHJlYW07XG5mdW5jdGlvbiBDb21iaW5lZFN0cmVhbSgpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAyICogMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW1zID0gdHJ1ZTtcblxuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xufVxudXRpbC5pbmhlcml0cyhDb21iaW5lZFN0cmVhbSwgU3RyZWFtKTtcblxuQ29tYmluZWRTdHJlYW0uY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgY29tYmluZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGNvbWJpbmVkU3RyZWFtW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRTdHJlYW07XG59O1xuXG5Db21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2UgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnc3RyaW5nJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Jvb2xlYW4nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnbnVtYmVyJylcbiAgICAmJiAoIUJ1ZmZlci5pc0J1ZmZlcihzdHJlYW0pKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuXG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBpZiAoIShzdHJlYW0gaW5zdGFuY2VvZiBEZWxheWVkU3RyZWFtKSkge1xuICAgICAgdmFyIG5ld1N0cmVhbSA9IERlbGF5ZWRTdHJlYW0uY3JlYXRlKHN0cmVhbSwge1xuICAgICAgICBtYXhEYXRhU2l6ZTogSW5maW5pdHksXG4gICAgICAgIHBhdXNlU3RyZWFtOiB0aGlzLnBhdXNlU3RyZWFtcyxcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHN0cmVhbSA9IG5ld1N0cmVhbTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcblxuICAgIGlmICh0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHN0cmVhbSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIFN0cmVhbS5wcm90b3R5cGUucGlwZS5jYWxsKHRoaXMsIGRlc3QsIG9wdGlvbnMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gZGVzdDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZ2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbiAgdmFyIHN0cmVhbSA9IHRoaXMuX3N0cmVhbXMuc2hpZnQoKTtcblxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtID09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy5lbmQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldFN0cmVhbSA9IHN0cmVhbTtcbiAgZ2V0U3RyZWFtKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcGlwZU5leHQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IHN0cmVhbTtcblxuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBzdHJlYW0ub24oJ2VuZCcsIHRoaXMuX2dldE5leHQuYmluZCh0aGlzKSk7XG4gICAgc3RyZWFtLnBpcGUodGhpcywge2VuZDogZmFsc2V9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBzdHJlYW07XG4gIHRoaXMud3JpdGUodmFsdWUpO1xuICB0aGlzLl9nZXROZXh0KCk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVycm9ycyA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBzZWxmLl9lbWl0RXJyb3IoZXJyKTtcbiAgfSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHRoaXMuZW1pdCgnZGF0YScsIGRhdGEpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKCk7XG4gIHRoaXMuZW1pdCgncGF1c2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLl9nZXROZXh0KCk7XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUoKTtcbiAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlbmQnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnY2xvc2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0RhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3VwZGF0ZURhdGFTaXplKCk7XG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWVzc2FnZSA9XG4gICAgJ0RlbGF5ZWRTdHJlYW0jbWF4RGF0YVNpemUgb2YgJyArIHRoaXMubWF4RGF0YVNpemUgKyAnIGJ5dGVzIGV4Y2VlZGVkLic7XG4gIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl91cGRhdGVEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRhdGFTaXplID0gMDtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3N0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcbiAgICBpZiAoIXN0cmVhbS5kYXRhU2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZGF0YVNpemUgKz0gc3RyZWFtLmRhdGFTaXplO1xuICB9KTtcblxuICBpZiAodGhpcy5fY3VycmVudFN0cmVhbSAmJiB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgdG9rZW5SZWdleHAgPSAvXlshIyQlJicqK1xcLS5eX2B8fjAtOUEtWmEtel0rJC87XG5jb25zdCBjb250ZW50VHlwZVJlZ2V4cCA9IC9eKC4qPylcXC8oLio/KShbXFx0IF0qOy4qKT8kLztcbmNvbnN0IHBhcmFtZXRlclZhbHVlUmVnZXhwID0gL14oLio/KT0oLiopJC87XG5jb25zdCBxdW90ZWRTdHJpbmdSZWdleHAgPSAvXCIoPzpbXFx0IFxceDIxXFx4MjMtXFx4NUJcXHg1RC1cXHg3RVxceDgwLVxceEZGXXwoPzpcXFxcW1xcdCBcXHgyMS1cXHg3RVxceDgwLVxceEZGXSkpKlwiLztcbmNvbnN0IHFlc2NSZWdFeHAgPSAvXFxcXChbXFx0IFxceDIxLVxceDdFXFx4ODAtXFx4RkZdKS9nO1xuY29uc3QgcXVvdGVSZWdFeHAgPSAvKFtcXFxcXCJdKS9nO1xuXG5mdW5jdGlvbiBxc3RyaW5nKHZhbCkge1xuICBpZiAodG9rZW5SZWdleHAudGVzdCh2YWwpKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICByZXR1cm4gXCJcXFwiXCIgKyB2YWwucmVwbGFjZShxdW90ZVJlZ0V4cCwgXCJcXFxcJDFcIikgKyBcIlxcXCJcIjtcbn1cblxuY2xhc3MgQ29udGVudFR5cGUge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBzdWJ0eXBlLCBwYXJhbWV0ZXJMaXN0KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnN1YnR5cGUgPSBzdWJ0eXBlO1xuICAgIHRoaXMucGFyYW1ldGVyTGlzdCA9IHBhcmFtZXRlckxpc3Q7XG4gIH1cbiAgZ2V0KGtleSkge1xuICAgIGtleSA9IFN0cmluZyhrZXkpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBjb25zdCBwYXJhbSA9IHRoaXMucGFyYW1ldGVyTGlzdC5yZXZlcnNlKCkuZmluZCh2ID0+IHYua2V5ID09PSBrZXkpO1xuICAgIHJldHVybiBwYXJhbSA/IHBhcmFtLnZhbHVlIDogdW5kZWZpbmVkO1xuICB9XG4gIHNldChrZXksIHZhbHVlKSB7XG4gICAga2V5ID0gU3RyaW5nKGtleSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cbiAgICB0aGlzLnBhcmFtZXRlckxpc3QgPSB0aGlzLnBhcmFtZXRlckxpc3QuZmlsdGVyKHYgPT4gdi5rZXkgIT09IGtleSk7XG4gICAgdGhpcy5wYXJhbWV0ZXJMaXN0LnB1c2goe1xuICAgICAgc2VwYXJhdG9yOiBcIjtcIixcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlXG4gICAgfSk7XG4gIH1cbiAgaXNYTUwoKSB7XG4gICAgcmV0dXJuICh0aGlzLnN1YnR5cGUgPT09IFwieG1sXCIgJiYgKHRoaXMudHlwZSA9PT0gXCJ0ZXh0XCIgfHwgdGhpcy50eXBlID09PSBcImFwcGxpY2F0aW9uXCIpKSB8fFxuICAgICAgICAgICB0aGlzLnN1YnR5cGUuZW5kc1dpdGgoXCIreG1sXCIpO1xuICB9XG4gIGlzSFRNTCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdWJ0eXBlID09PSBcImh0bWxcIiAmJiB0aGlzLnR5cGUgPT09IFwidGV4dFwiO1xuICB9XG4gIGlzVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSBcInRleHRcIjtcbiAgfVxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICsgXCIvXCIgKyB0aGlzLnN1YnR5cGUgK1xuICAgICAgdGhpcy5wYXJhbWV0ZXJMaXN0Lm1hcCh2ID0+IHYuc2VwYXJhdG9yICsgKHYua2V5ID8gdi5rZXkgKyBcIj1cIiArIHFzdHJpbmcodi52YWx1ZSkgOiB2LnZhbHVlKSlcbiAgICAgIC5qb2luKFwiXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VDb250ZW50VHlwZShjb250ZW50VHlwZSkge1xuICBpZiAoIWNvbnRlbnRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY29udGVudFR5cGVNYXRjaCA9IGNvbnRlbnRUeXBlUmVnZXhwLmV4ZWMoY29udGVudFR5cGUpO1xuICBpZiAoY29udGVudFR5cGVNYXRjaCkge1xuICAgIGNvbnN0IHR5cGUgPSBjb250ZW50VHlwZU1hdGNoWzFdO1xuICAgIGNvbnN0IHN1YnR5cGUgPSBjb250ZW50VHlwZU1hdGNoWzJdO1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBjb250ZW50VHlwZU1hdGNoWzNdO1xuICAgIGlmICh0b2tlblJlZ2V4cC50ZXN0KHR5cGUpICYmIHRva2VuUmVnZXhwLnRlc3Qoc3VidHlwZSkpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlclBhdHRlcm4gPSAvKFtcXHQgXSo7W1xcdCBdKikoW15cXHQgO10qKS9nO1xuICAgICAgY29uc3QgcGFyYW1ldGVyTGlzdCA9IFtdO1xuICAgICAgbGV0IG1hdGNoO1xuICAgICAgd2hpbGUgKChtYXRjaCA9IHBhcmFtZXRlclBhdHRlcm4uZXhlYyhwYXJhbWV0ZXJzKSkpIHtcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gbWF0Y2hbMV07XG4gICAgICAgIGNvbnN0IGtleVZhbHVlID0gcGFyYW1ldGVyVmFsdWVSZWdleHAuZXhlYyhtYXRjaFsyXSk7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgaWYgKGtleVZhbHVlICYmIHRva2VuUmVnZXhwLnRlc3Qoa2V5VmFsdWVbMV0pKSB7XG4gICAgICAgICAga2V5ID0ga2V5VmFsdWVbMV07XG4gICAgICAgICAgaWYgKHF1b3RlZFN0cmluZ1JlZ2V4cC50ZXN0KGtleVZhbHVlWzJdKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBrZXlWYWx1ZVsyXVxuICAgICAgICAgICAgICAuc3Vic3RyKDEsIGtleVZhbHVlWzJdLmxlbmd0aCAtIDIpXG4gICAgICAgICAgICAgIC5yZXBsYWNlKHFlc2NSZWdFeHAsIFwiJDFcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0ga2V5VmFsdWVbMl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBwYXJhbWV0ZXJMaXN0LnB1c2goe1xuICAgICAgICAgICAgc2VwYXJhdG9yLFxuICAgICAgICAgICAga2V5OiBrZXkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyYW1ldGVyTGlzdC5wdXNoKHtcbiAgICAgICAgICAgIHNlcGFyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBtYXRjaFsyXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IENvbnRlbnRUeXBlKHR5cGUudG9Mb3dlckNhc2UoKSwgc3VidHlwZS50b0xvd2VyQ2FzZSgpLCBwYXJhbWV0ZXJMaXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5cbmZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKTtcbiAgfVxuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IEJ1ZmZlci5pc0J1ZmZlcjtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuIiwidmFyIGVsbGlwdGljID0gcmVxdWlyZSgnZWxsaXB0aWMnKTtcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRUNESChjdXJ2ZSkge1xuXHRyZXR1cm4gbmV3IEVDREgoY3VydmUpO1xufTtcblxudmFyIGFsaWFzZXMgPSB7XG5cdHNlY3AyNTZrMToge1xuXHRcdG5hbWU6ICdzZWNwMjU2azEnLFxuXHRcdGJ5dGVMZW5ndGg6IDMyXG5cdH0sXG5cdHNlY3AyMjRyMToge1xuXHRcdG5hbWU6ICdwMjI0Jyxcblx0XHRieXRlTGVuZ3RoOiAyOFxuXHR9LFxuXHRwcmltZTI1NnYxOiB7XG5cdFx0bmFtZTogJ3AyNTYnLFxuXHRcdGJ5dGVMZW5ndGg6IDMyXG5cdH0sXG5cdHByaW1lMTkydjE6IHtcblx0XHRuYW1lOiAncDE5MicsXG5cdFx0Ynl0ZUxlbmd0aDogMjRcblx0fSxcblx0ZWQyNTUxOToge1xuXHRcdG5hbWU6ICdlZDI1NTE5Jyxcblx0XHRieXRlTGVuZ3RoOiAzMlxuXHR9LFxuXHRzZWNwMzg0cjE6IHtcblx0XHRuYW1lOiAncDM4NCcsXG5cdFx0Ynl0ZUxlbmd0aDogNDhcblx0fSxcblx0c2VjcDUyMXIxOiB7XG5cdFx0bmFtZTogJ3A1MjEnLFxuXHRcdGJ5dGVMZW5ndGg6IDY2XG5cdH1cbn07XG5cbmFsaWFzZXMucDIyNCA9IGFsaWFzZXMuc2VjcDIyNHIxO1xuYWxpYXNlcy5wMjU2ID0gYWxpYXNlcy5zZWNwMjU2cjEgPSBhbGlhc2VzLnByaW1lMjU2djE7XG5hbGlhc2VzLnAxOTIgPSBhbGlhc2VzLnNlY3AxOTJyMSA9IGFsaWFzZXMucHJpbWUxOTJ2MTtcbmFsaWFzZXMucDM4NCA9IGFsaWFzZXMuc2VjcDM4NHIxO1xuYWxpYXNlcy5wNTIxID0gYWxpYXNlcy5zZWNwNTIxcjE7XG5cbmZ1bmN0aW9uIEVDREgoY3VydmUpIHtcblx0dGhpcy5jdXJ2ZVR5cGUgPSBhbGlhc2VzW2N1cnZlXTtcblx0aWYgKCF0aGlzLmN1cnZlVHlwZSApIHtcblx0XHR0aGlzLmN1cnZlVHlwZSA9IHtcblx0XHRcdG5hbWU6IGN1cnZlXG5cdFx0fTtcblx0fVxuXHR0aGlzLmN1cnZlID0gbmV3IGVsbGlwdGljLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpO1xuXHR0aGlzLmtleXMgPSB2b2lkIDA7XG59XG5cbkVDREgucHJvdG90eXBlLmdlbmVyYXRlS2V5cyA9IGZ1bmN0aW9uIChlbmMsIGZvcm1hdCkge1xuXHR0aGlzLmtleXMgPSB0aGlzLmN1cnZlLmdlbktleVBhaXIoKTtcblx0cmV0dXJuIHRoaXMuZ2V0UHVibGljS2V5KGVuYywgZm9ybWF0KTtcbn07XG5cbkVDREgucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQgPSBmdW5jdGlvbiAob3RoZXIsIGluZW5jLCBlbmMpIHtcblx0aW5lbmMgPSBpbmVuYyB8fCAndXRmOCc7XG5cdGlmICghQnVmZmVyLmlzQnVmZmVyKG90aGVyKSkge1xuXHRcdG90aGVyID0gbmV3IEJ1ZmZlcihvdGhlciwgaW5lbmMpO1xuXHR9XG5cdHZhciBvdGhlclB1YiA9IHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhvdGhlcikuZ2V0UHVibGljKCk7XG5cdHZhciBvdXQgPSBvdGhlclB1Yi5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpO1xuXHRyZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUob3V0LCBlbmMsIHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpO1xufTtcblxuRUNESC5wcm90b3R5cGUuZ2V0UHVibGljS2V5ID0gZnVuY3Rpb24gKGVuYywgZm9ybWF0KSB7XG5cdHZhciBrZXkgPSB0aGlzLmtleXMuZ2V0UHVibGljKGZvcm1hdCA9PT0gJ2NvbXByZXNzZWQnLCB0cnVlKTtcblx0aWYgKGZvcm1hdCA9PT0gJ2h5YnJpZCcpIHtcblx0XHRpZiAoa2V5W2tleS5sZW5ndGggLSAxXSAlIDIpIHtcblx0XHRcdGtleVswXSA9IDc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGtleSBbMF0gPSA2O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUoa2V5LCBlbmMpO1xufTtcblxuRUNESC5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleSA9IGZ1bmN0aW9uIChlbmMpIHtcblx0cmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKHRoaXMua2V5cy5nZXRQcml2YXRlKCksIGVuYyk7XG59O1xuXG5FQ0RILnByb3RvdHlwZS5zZXRQdWJsaWNLZXkgPSBmdW5jdGlvbiAocHViLCBlbmMpIHtcblx0ZW5jID0gZW5jIHx8ICd1dGY4Jztcblx0aWYgKCFCdWZmZXIuaXNCdWZmZXIocHViKSkge1xuXHRcdHB1YiA9IG5ldyBCdWZmZXIocHViLCBlbmMpO1xuXHR9XG5cdHRoaXMua2V5cy5faW1wb3J0UHVibGljKHB1Yik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRUNESC5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleSA9IGZ1bmN0aW9uIChwcml2LCBlbmMpIHtcblx0ZW5jID0gZW5jIHx8ICd1dGY4Jztcblx0aWYgKCFCdWZmZXIuaXNCdWZmZXIocHJpdikpIHtcblx0XHRwcml2ID0gbmV3IEJ1ZmZlcihwcml2LCBlbmMpO1xuXHR9XG5cdHZhciBfcHJpdiA9IG5ldyBCTihwcml2KTtcblx0X3ByaXYgPSBfcHJpdi50b1N0cmluZygxNik7XG5cdHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShfcHJpdik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZm9ybWF0UmV0dXJuVmFsdWUoYm4sIGVuYywgbGVuKSB7XG5cdGlmICghQXJyYXkuaXNBcnJheShibikpIHtcblx0XHRibiA9IGJuLnRvQXJyYXkoKTtcblx0fVxuXHR2YXIgYnVmID0gbmV3IEJ1ZmZlcihibik7XG5cdGlmIChsZW4gJiYgYnVmLmxlbmd0aCA8IGxlbikge1xuXHRcdHZhciB6ZXJvcyA9IG5ldyBCdWZmZXIobGVuIC0gYnVmLmxlbmd0aCk7XG5cdFx0emVyb3MuZmlsbCgwKTtcblx0XHRidWYgPSBCdWZmZXIuY29uY2F0KFt6ZXJvcywgYnVmXSk7XG5cdH1cblx0aWYgKCFlbmMpIHtcblx0XHRyZXR1cm4gYnVmO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBidWYudG9TdHJpbmcoZW5jKTtcblx0fVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgbWQ1ID0gcmVxdWlyZSgnLi9tZDUnKVxudmFyIFJJUEVNRDE2MCA9IHJlcXVpcmUoJ3JpcGVtZDE2MCcpXG52YXIgc2hhID0gcmVxdWlyZSgnc2hhLmpzJylcblxudmFyIEJhc2UgPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG5cbmZ1bmN0aW9uIEhhc2hOb0NvbnN0cnVjdG9yIChoYXNoKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnZGlnZXN0JylcblxuICB0aGlzLl9oYXNoID0gaGFzaFxuICB0aGlzLmJ1ZmZlcnMgPSBbXVxufVxuXG5pbmhlcml0cyhIYXNoTm9Db25zdHJ1Y3RvciwgQmFzZSlcblxuSGFzaE5vQ29uc3RydWN0b3IucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLmJ1ZmZlcnMucHVzaChkYXRhKVxufVxuXG5IYXNoTm9Db25zdHJ1Y3Rvci5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYnVmID0gQnVmZmVyLmNvbmNhdCh0aGlzLmJ1ZmZlcnMpXG4gIHZhciByID0gdGhpcy5faGFzaChidWYpXG4gIHRoaXMuYnVmZmVycyA9IG51bGxcblxuICByZXR1cm4gclxufVxuXG5mdW5jdGlvbiBIYXNoIChoYXNoKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnZGlnZXN0JylcblxuICB0aGlzLl9oYXNoID0gaGFzaFxufVxuXG5pbmhlcml0cyhIYXNoLCBCYXNlKVxuXG5IYXNoLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5faGFzaC51cGRhdGUoZGF0YSlcbn1cblxuSGFzaC5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5faGFzaC5kaWdlc3QoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUhhc2ggKGFsZykge1xuICBhbGcgPSBhbGcudG9Mb3dlckNhc2UoKVxuICBpZiAoYWxnID09PSAnbWQ1JykgcmV0dXJuIG5ldyBIYXNoTm9Db25zdHJ1Y3RvcihtZDUpXG4gIGlmIChhbGcgPT09ICdybWQxNjAnIHx8IGFsZyA9PT0gJ3JpcGVtZDE2MCcpIHJldHVybiBuZXcgSGFzaChuZXcgUklQRU1EMTYwKCkpXG5cbiAgcmV0dXJuIG5ldyBIYXNoKHNoYShhbGcpKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgaW50U2l6ZSA9IDRcbnZhciB6ZXJvQnVmZmVyID0gbmV3IEJ1ZmZlcihpbnRTaXplKVxuemVyb0J1ZmZlci5maWxsKDApXG5cbnZhciBjaGFyU2l6ZSA9IDhcbnZhciBoYXNoU2l6ZSA9IDE2XG5cbmZ1bmN0aW9uIHRvQXJyYXkgKGJ1Zikge1xuICBpZiAoKGJ1Zi5sZW5ndGggJSBpbnRTaXplKSAhPT0gMCkge1xuICAgIHZhciBsZW4gPSBidWYubGVuZ3RoICsgKGludFNpemUgLSAoYnVmLmxlbmd0aCAlIGludFNpemUpKVxuICAgIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoW2J1ZiwgemVyb0J1ZmZlcl0sIGxlbilcbiAgfVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyYXkoYnVmLmxlbmd0aCA+Pj4gMilcbiAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSArPSBpbnRTaXplLCBqKyspIHtcbiAgICBhcnJbal0gPSBidWYucmVhZEludDMyTEUoaSlcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNoIChidWYsIGZuKSB7XG4gIHZhciBhcnIgPSBmbih0b0FycmF5KGJ1ZiksIGJ1Zi5sZW5ndGggKiBjaGFyU2l6ZSlcbiAgYnVmID0gbmV3IEJ1ZmZlcihoYXNoU2l6ZSlcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBidWYud3JpdGVJbnQzMkxFKGFycltpXSwgaSA8PCAyLCB0cnVlKVxuICB9XG4gIHJldHVybiBidWZcbn1cbiIsIid1c2Ugc3RyaWN0J1xuLypcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gTUQ1IE1lc3NhZ2VcbiAqIERpZ2VzdCBBbGdvcml0aG0sIGFzIGRlZmluZWQgaW4gUkZDIDEzMjEuXG4gKiBWZXJzaW9uIDIuMSBDb3B5cmlnaHQgKEMpIFBhdWwgSm9obnN0b24gMTk5OSAtIDIwMDIuXG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2VcbiAqIFNlZSBodHRwOi8vcGFqaG9tZS5vcmcudWsvY3J5cHQvbWQ1IGZvciBtb3JlIGluZm8uXG4gKi9cblxudmFyIG1ha2VIYXNoID0gcmVxdWlyZSgnLi9tYWtlLWhhc2gnKVxuXG4vKlxuICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcywgYW5kIGEgYml0IGxlbmd0aFxuICovXG5mdW5jdGlvbiBjb3JlX21kNSAoeCwgbGVuKSB7XG4gIC8qIGFwcGVuZCBwYWRkaW5nICovXG4gIHhbbGVuID4+IDVdIHw9IDB4ODAgPDwgKChsZW4pICUgMzIpXG4gIHhbKCgobGVuICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IGxlblxuXG4gIHZhciBhID0gMTczMjU4NDE5M1xuICB2YXIgYiA9IC0yNzE3MzM4NzlcbiAgdmFyIGMgPSAtMTczMjU4NDE5NFxuICB2YXIgZCA9IDI3MTczMzg3OFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICB2YXIgb2xkYSA9IGFcbiAgICB2YXIgb2xkYiA9IGJcbiAgICB2YXIgb2xkYyA9IGNcbiAgICB2YXIgb2xkZCA9IGRcblxuICAgIGEgPSBtZDVfZmYoYSwgYiwgYywgZCwgeFtpICsgMF0sIDcsIC02ODA4NzY5MzYpXG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyAxXSwgMTIsIC0zODk1NjQ1ODYpXG4gICAgYyA9IG1kNV9mZihjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTcsIDYwNjEwNTgxOSlcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArIDNdLCAyMiwgLTEwNDQ1MjUzMzApXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyA0XSwgNywgLTE3NjQxODg5NylcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSArIDVdLCAxMiwgMTIwMDA4MDQyNilcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSArIDZdLCAxNywgLTE0NzMyMzEzNDEpXG4gICAgYiA9IG1kNV9mZihiLCBjLCBkLCBhLCB4W2kgKyA3XSwgMjIsIC00NTcwNTk4MylcbiAgICBhID0gbWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaSArIDhdLCA3LCAxNzcwMDM1NDE2KVxuICAgIGQgPSBtZDVfZmYoZCwgYSwgYiwgYywgeFtpICsgOV0sIDEyLCAtMTk1ODQxNDQxNylcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSArIDEwXSwgMTcsIC00MjA2MylcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArIDExXSwgMjIsIC0xOTkwNDA0MTYyKVxuICAgIGEgPSBtZDVfZmYoYSwgYiwgYywgZCwgeFtpICsgMTJdLCA3LCAxODA0NjAzNjgyKVxuICAgIGQgPSBtZDVfZmYoZCwgYSwgYiwgYywgeFtpICsgMTNdLCAxMiwgLTQwMzQxMTAxKVxuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNywgLTE1MDIwMDIyOTApXG4gICAgYiA9IG1kNV9mZihiLCBjLCBkLCBhLCB4W2kgKyAxNV0sIDIyLCAxMjM2NTM1MzI5KVxuXG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNSwgLTE2NTc5NjUxMClcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSArIDZdLCA5LCAtMTA2OTUwMTYzMilcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTQsIDY0MzcxNzcxMylcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSArIDBdLCAyMCwgLTM3Mzg5NzMwMilcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA1LCAtNzAxNTU4NjkxKVxuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgMTBdLCA5LCAzODAxNjA4MylcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTQsIC02NjA0NzgzMzUpXG4gICAgYiA9IG1kNV9nZyhiLCBjLCBkLCBhLCB4W2kgKyA0XSwgMjAsIC00MDU1Mzc4NDgpXG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNSwgNTY4NDQ2NDM4KVxuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgMTRdLCA5LCAtMTAxOTgwMzY5MClcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNCwgLTE4NzM2Mzk2MSlcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSArIDhdLCAyMCwgMTE2MzUzMTUwMSlcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNSwgLTE0NDQ2ODE0NjcpXG4gICAgZCA9IG1kNV9nZyhkLCBhLCBiLCBjLCB4W2kgKyAyXSwgOSwgLTUxNDAzNzg0KVxuICAgIGMgPSBtZDVfZ2coYywgZCwgYSwgYiwgeFtpICsgN10sIDE0LCAxNzM1MzI4NDczKVxuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpICsgMTJdLCAyMCwgLTE5MjY2MDc3MzQpXG5cbiAgICBhID0gbWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA0LCAtMzc4NTU4KVxuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpICsgOF0sIDExLCAtMjAyMjU3NDQ2MylcbiAgICBjID0gbWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTYsIDE4MzkwMzA1NjIpXG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpXG4gICAgYSA9IG1kNV9oaChhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNCwgLTE1MzA5OTIwNjApXG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2kgKyA0XSwgMTEsIDEyNzI4OTMzNTMpXG4gICAgYyA9IG1kNV9oaChjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTYsIC0xNTU0OTc2MzIpXG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2kgKyAxMF0sIDIzLCAtMTA5NDczMDY0MClcbiAgICBhID0gbWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNCwgNjgxMjc5MTc0KVxuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpICsgMF0sIDExLCAtMzU4NTM3MjIyKVxuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpICsgM10sIDE2LCAtNzIyNTIxOTc5KVxuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgNl0sIDIzLCA3NjAyOTE4OSlcbiAgICBhID0gbWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSArIDldLCA0LCAtNjQwMzY0NDg3KVxuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpICsgMTJdLCAxMSwgLTQyMTgxNTgzNSlcbiAgICBjID0gbWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTYsIDUzMDc0MjUyMClcbiAgICBiID0gbWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSArIDJdLCAyMywgLTk5NTMzODY1MSlcblxuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpICsgMF0sIDYsIC0xOTg2MzA4NDQpXG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyA3XSwgMTAsIDExMjY4OTE0MTUpXG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE1LCAtMTQxNjM1NDkwNSlcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSArIDVdLCAyMSwgLTU3NDM0MDU1KVxuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpICsgMTJdLCA2LCAxNzAwNDg1NTcxKVxuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpICsgM10sIDEwLCAtMTg5NDk4NjYwNilcbiAgICBjID0gbWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSArIDEwXSwgMTUsIC0xMDUxNTIzKVxuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgMV0sIDIxLCAtMjA1NDkyMjc5OSlcbiAgICBhID0gbWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSArIDhdLCA2LCAxODczMzEzMzU5KVxuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpICsgMTVdLCAxMCwgLTMwNjExNzQ0KVxuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE1LCAtMTU2MDE5ODM4MClcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSArIDEzXSwgMjEsIDEzMDkxNTE2NDkpXG4gICAgYSA9IG1kNV9paShhLCBiLCBjLCBkLCB4W2kgKyA0XSwgNiwgLTE0NTUyMzA3MClcbiAgICBkID0gbWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSArIDExXSwgMTAsIC0xMTIwMjEwMzc5KVxuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE1LCA3MTg3ODcyNTkpXG4gICAgYiA9IG1kNV9paShiLCBjLCBkLCBhLCB4W2kgKyA5XSwgMjEsIC0zNDM0ODU1NTEpXG5cbiAgICBhID0gc2FmZV9hZGQoYSwgb2xkYSlcbiAgICBiID0gc2FmZV9hZGQoYiwgb2xkYilcbiAgICBjID0gc2FmZV9hZGQoYywgb2xkYylcbiAgICBkID0gc2FmZV9hZGQoZCwgb2xkZClcbiAgfVxuXG4gIHJldHVybiBbYSwgYiwgYywgZF1cbn1cblxuLypcbiAqIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGZvdXIgYmFzaWMgb3BlcmF0aW9ucyB0aGUgYWxnb3JpdGhtIHVzZXMuXG4gKi9cbmZ1bmN0aW9uIG1kNV9jbW4gKHEsIGEsIGIsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIHNhZmVfYWRkKGJpdF9yb2woc2FmZV9hZGQoc2FmZV9hZGQoYSwgcSksIHNhZmVfYWRkKHgsIHQpKSwgcyksIGIpXG59XG5cbmZ1bmN0aW9uIG1kNV9mZiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1X2NtbigoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdClcbn1cblxuZnVuY3Rpb24gbWQ1X2dnIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVfY21uKChiICYgZCkgfCAoYyAmICh+ZCkpLCBhLCBiLCB4LCBzLCB0KVxufVxuXG5mdW5jdGlvbiBtZDVfaGggKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNV9jbW4oYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KVxufVxuXG5mdW5jdGlvbiBtZDVfaWkgKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNV9jbW4oYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQpXG59XG5cbi8qXG4gKiBBZGQgaW50ZWdlcnMsIHdyYXBwaW5nIGF0IDJeMzIuIFRoaXMgdXNlcyAxNi1iaXQgb3BlcmF0aW9ucyBpbnRlcm5hbGx5XG4gKiB0byB3b3JrIGFyb3VuZCBidWdzIGluIHNvbWUgSlMgaW50ZXJwcmV0ZXJzLlxuICovXG5mdW5jdGlvbiBzYWZlX2FkZCAoeCwgeSkge1xuICB2YXIgbHN3ID0gKHggJiAweEZGRkYpICsgKHkgJiAweEZGRkYpXG4gIHZhciBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KVxuICByZXR1cm4gKG1zdyA8PCAxNikgfCAobHN3ICYgMHhGRkZGKVxufVxuXG4vKlxuICogQml0d2lzZSByb3RhdGUgYSAzMi1iaXQgbnVtYmVyIHRvIHRoZSBsZWZ0LlxuICovXG5mdW5jdGlvbiBiaXRfcm9sIChudW0sIGNudCkge1xuICByZXR1cm4gKG51bSA8PCBjbnQpIHwgKG51bSA+Pj4gKDMyIC0gY250KSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZDUgKGJ1Zikge1xuICByZXR1cm4gbWFrZUhhc2goYnVmLCBjb3JlX21kNSlcbn1cbiIsIid1c2Ugc3RyaWN0J1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIExlZ2FjeSA9IHJlcXVpcmUoJy4vbGVnYWN5JylcbnZhciBCYXNlID0gcmVxdWlyZSgnY2lwaGVyLWJhc2UnKVxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG52YXIgbWQ1ID0gcmVxdWlyZSgnY3JlYXRlLWhhc2gvbWQ1JylcbnZhciBSSVBFTUQxNjAgPSByZXF1aXJlKCdyaXBlbWQxNjAnKVxuXG52YXIgc2hhID0gcmVxdWlyZSgnc2hhLmpzJylcblxudmFyIFpFUk9TID0gQnVmZmVyLmFsbG9jKDEyOClcblxuZnVuY3Rpb24gSG1hYyAoYWxnLCBrZXkpIHtcbiAgQmFzZS5jYWxsKHRoaXMsICdkaWdlc3QnKVxuICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICBrZXkgPSBCdWZmZXIuZnJvbShrZXkpXG4gIH1cblxuICB2YXIgYmxvY2tzaXplID0gKGFsZyA9PT0gJ3NoYTUxMicgfHwgYWxnID09PSAnc2hhMzg0JykgPyAxMjggOiA2NFxuXG4gIHRoaXMuX2FsZyA9IGFsZ1xuICB0aGlzLl9rZXkgPSBrZXlcbiAgaWYgKGtleS5sZW5ndGggPiBibG9ja3NpemUpIHtcbiAgICB2YXIgaGFzaCA9IGFsZyA9PT0gJ3JtZDE2MCcgPyBuZXcgUklQRU1EMTYwKCkgOiBzaGEoYWxnKVxuICAgIGtleSA9IGhhc2gudXBkYXRlKGtleSkuZGlnZXN0KClcbiAgfSBlbHNlIGlmIChrZXkubGVuZ3RoIDwgYmxvY2tzaXplKSB7XG4gICAga2V5ID0gQnVmZmVyLmNvbmNhdChba2V5LCBaRVJPU10sIGJsb2Nrc2l6ZSlcbiAgfVxuXG4gIHZhciBpcGFkID0gdGhpcy5faXBhZCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShibG9ja3NpemUpXG4gIHZhciBvcGFkID0gdGhpcy5fb3BhZCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShibG9ja3NpemUpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBibG9ja3NpemU7IGkrKykge1xuICAgIGlwYWRbaV0gPSBrZXlbaV0gXiAweDM2XG4gICAgb3BhZFtpXSA9IGtleVtpXSBeIDB4NUNcbiAgfVxuICB0aGlzLl9oYXNoID0gYWxnID09PSAncm1kMTYwJyA/IG5ldyBSSVBFTUQxNjAoKSA6IHNoYShhbGcpXG4gIHRoaXMuX2hhc2gudXBkYXRlKGlwYWQpXG59XG5cbmluaGVyaXRzKEhtYWMsIEJhc2UpXG5cbkhtYWMucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxufVxuXG5IbWFjLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoID0gdGhpcy5faGFzaC5kaWdlc3QoKVxuICB2YXIgaGFzaCA9IHRoaXMuX2FsZyA9PT0gJ3JtZDE2MCcgPyBuZXcgUklQRU1EMTYwKCkgOiBzaGEodGhpcy5fYWxnKVxuICByZXR1cm4gaGFzaC51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKGgpLmRpZ2VzdCgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlSG1hYyAoYWxnLCBrZXkpIHtcbiAgYWxnID0gYWxnLnRvTG93ZXJDYXNlKClcbiAgaWYgKGFsZyA9PT0gJ3JtZDE2MCcgfHwgYWxnID09PSAncmlwZW1kMTYwJykge1xuICAgIHJldHVybiBuZXcgSG1hYygncm1kMTYwJywga2V5KVxuICB9XG4gIGlmIChhbGcgPT09ICdtZDUnKSB7XG4gICAgcmV0dXJuIG5ldyBMZWdhY3kobWQ1LCBrZXkpXG4gIH1cbiAgcmV0dXJuIG5ldyBIbWFjKGFsZywga2V5KVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcblxudmFyIEJhc2UgPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG5cbnZhciBaRVJPUyA9IEJ1ZmZlci5hbGxvYygxMjgpXG52YXIgYmxvY2tzaXplID0gNjRcblxuZnVuY3Rpb24gSG1hYyAoYWxnLCBrZXkpIHtcbiAgQmFzZS5jYWxsKHRoaXMsICdkaWdlc3QnKVxuICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICBrZXkgPSBCdWZmZXIuZnJvbShrZXkpXG4gIH1cblxuICB0aGlzLl9hbGcgPSBhbGdcbiAgdGhpcy5fa2V5ID0ga2V5XG5cbiAgaWYgKGtleS5sZW5ndGggPiBibG9ja3NpemUpIHtcbiAgICBrZXkgPSBhbGcoa2V5KVxuICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPCBibG9ja3NpemUpIHtcbiAgICBrZXkgPSBCdWZmZXIuY29uY2F0KFtrZXksIFpFUk9TXSwgYmxvY2tzaXplKVxuICB9XG5cbiAgdmFyIGlwYWQgPSB0aGlzLl9pcGFkID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJsb2Nrc2l6ZSlcbiAgdmFyIG9wYWQgPSB0aGlzLl9vcGFkID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJsb2Nrc2l6ZSlcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2Nrc2l6ZTsgaSsrKSB7XG4gICAgaXBhZFtpXSA9IGtleVtpXSBeIDB4MzZcbiAgICBvcGFkW2ldID0ga2V5W2ldIF4gMHg1Q1xuICB9XG5cbiAgdGhpcy5faGFzaCA9IFtpcGFkXVxufVxuXG5pbmhlcml0cyhIbWFjLCBCYXNlKVxuXG5IbWFjLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5faGFzaC5wdXNoKGRhdGEpXG59XG5cbkhtYWMucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGggPSB0aGlzLl9hbGcoQnVmZmVyLmNvbmNhdCh0aGlzLl9oYXNoKSlcbiAgcmV0dXJuIHRoaXMuX2FsZyhCdWZmZXIuY29uY2F0KFt0aGlzLl9vcGFkLCBoXSkpXG59XG5tb2R1bGUuZXhwb3J0cyA9IEhtYWNcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLnJhbmRvbUJ5dGVzID0gZXhwb3J0cy5ybmcgPSBleHBvcnRzLnBzZXVkb1JhbmRvbUJ5dGVzID0gZXhwb3J0cy5wcm5nID0gcmVxdWlyZSgncmFuZG9tYnl0ZXMnKVxuZXhwb3J0cy5jcmVhdGVIYXNoID0gZXhwb3J0cy5IYXNoID0gcmVxdWlyZSgnY3JlYXRlLWhhc2gnKVxuZXhwb3J0cy5jcmVhdGVIbWFjID0gZXhwb3J0cy5IbWFjID0gcmVxdWlyZSgnY3JlYXRlLWhtYWMnKVxuXG52YXIgaGFzaGVzID0gWydzaGExJywgJ3NoYTIyNCcsICdzaGEyNTYnLCAnc2hhMzg0JywgJ3NoYTUxMicsICdtZDUnLCAncm1kMTYwJ10uY29uY2F0KE9iamVjdC5rZXlzKHJlcXVpcmUoJ2Jyb3dzZXJpZnktc2lnbi9hbGdvcycpKSlcbmV4cG9ydHMuZ2V0SGFzaGVzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaGFzaGVzXG59XG5cbnZhciBwID0gcmVxdWlyZSgncGJrZGYyJylcbmV4cG9ydHMucGJrZGYyID0gcC5wYmtkZjJcbmV4cG9ydHMucGJrZGYyU3luYyA9IHAucGJrZGYyU3luY1xuXG52YXIgYWVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1jaXBoZXInKVxuO1tcbiAgJ0NpcGhlcicsXG4gICdjcmVhdGVDaXBoZXInLFxuICAnQ2lwaGVyaXYnLFxuICAnY3JlYXRlQ2lwaGVyaXYnLFxuICAnRGVjaXBoZXInLFxuICAnY3JlYXRlRGVjaXBoZXInLFxuICAnRGVjaXBoZXJpdicsXG4gICdjcmVhdGVEZWNpcGhlcml2JyxcbiAgJ2dldENpcGhlcnMnLFxuICAnbGlzdENpcGhlcnMnXG5dLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBleHBvcnRzW2tleV0gPSBhZXNba2V5XVxufSlcblxudmFyIGRoID0gcmVxdWlyZSgnZGlmZmllLWhlbGxtYW4nKVxuO1tcbiAgJ0RpZmZpZUhlbGxtYW5Hcm91cCcsXG4gICdjcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAnLFxuICAnZ2V0RGlmZmllSGVsbG1hbicsXG4gICdjcmVhdGVEaWZmaWVIZWxsbWFuJyxcbiAgJ0RpZmZpZUhlbGxtYW4nXG5dLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBleHBvcnRzW2tleV0gPSBkaFtrZXldXG59KVxuXG52YXIgc2lnbiA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktc2lnbicpXG47W1xuICAnY3JlYXRlU2lnbicsXG4gICdTaWduJyxcbiAgJ2NyZWF0ZVZlcmlmeScsXG4gICdWZXJpZnknXG5dLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBleHBvcnRzW2tleV0gPSBzaWduW2tleV1cbn0pXG5cbmV4cG9ydHMuY3JlYXRlRUNESCA9IHJlcXVpcmUoJ2NyZWF0ZS1lY2RoJylcblxudmFyIHB1YmxpY0VuY3J5cHQgPSByZXF1aXJlKCdwdWJsaWMtZW5jcnlwdCcpXG5cbjtbXG4gICdwdWJsaWNFbmNyeXB0JyxcbiAgJ3ByaXZhdGVFbmNyeXB0JyxcbiAgJ3B1YmxpY0RlY3J5cHQnLFxuICAncHJpdmF0ZURlY3J5cHQnXG5dLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBleHBvcnRzW2tleV0gPSBwdWJsaWNFbmNyeXB0W2tleV1cbn0pXG5cbi8vIHRoZSBsZWFzdCBJIGNhbiBkbyBpcyBtYWtlIGVycm9yIG1lc3NhZ2VzIGZvciB0aGUgcmVzdCBvZiB0aGUgbm9kZS5qcy9jcnlwdG8gYXBpLlxuO1tcbiAgJ2NyZWF0ZUNyZWRlbnRpYWxzJ1xuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIGV4cG9ydHNbbmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFtcbiAgICAgICdzb3JyeSwgJyArIG5hbWUgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQnLFxuICAgICAgJ3dlIGFjY2VwdCBwdWxsIHJlcXVlc3RzJyxcbiAgICAgICdodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvLWJyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnknXG4gICAgXS5qb2luKCdcXG4nKSlcbiAgfVxufSlcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuXHRDc3NTZWxlY3Rvcixcblx0RWxlbWVudFNlbGVjdG9yLFxuXHRFbGVtZW50U2VsZWN0b3JMaXN0XG59XG5cblxuZnVuY3Rpb24gQ3NzU2VsZWN0b3IgKG9wdGlvbnMpIHtcblxuXHR2YXIgbWUgPSB0aGlzO1xuXG5cdC8vIGRlZmF1bHRzXG5cdHRoaXMuaWdub3JlZFRhZ3MgPSBbJ2ZvbnQnLCAnYicsICdpJywgJ3MnXTtcblx0dGhpcy5wYXJlbnQgPSBvcHRpb25zLmRvY3VtZW50IHx8IG9wdGlvbnMucGFyZW50XG5cdHRoaXMuZG9jdW1lbnQgPSBvcHRpb25zLmRvY3VtZW50IHx8IG9wdGlvbnMucGFyZW50IFxuXHR0aGlzLmlnbm9yZWRDbGFzc0Jhc2UgPSBmYWxzZTtcblx0dGhpcy5lbmFibGVSZXN1bHRTdHJpcHBpbmcgPSB0cnVlO1xuXHR0aGlzLmVuYWJsZVNtYXJ0VGFibGVTZWxlY3RvciA9IGZhbHNlO1xuXHR0aGlzLmlnbm9yZWRDbGFzc2VzID0gW107XG4gICAgdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0b3JzID0gZmFsc2U7XG5cdHRoaXMucXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcblx0XHRyZXR1cm4gbWUucGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuXHR9O1xuXG5cdC8vIG92ZXJyaWRlcyBkZWZhdWx0cyB3aXRoIG9wdGlvbnNcblx0Zm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG5cdFx0dGhpc1tpXSA9IG9wdGlvbnNbaV07XG5cdH1cbn07XG5cbi8vIFRPRE8gcmVmYWN0b3IgZWxlbWVudCBzZWxlY3RvciBsaXN0IGludG8gYSB+IGNsYXNzXG5mdW5jdGlvbiBFbGVtZW50U2VsZWN0b3IgKGVsZW1lbnQsIGlnbm9yZWRDbGFzc2VzKSB7XG5cblx0dGhpcy5lbGVtZW50ID0gZWxlbWVudDtcblx0dGhpcy5pc0RpcmVjdENoaWxkID0gdHJ1ZTtcblx0dGhpcy50YWcgPSBlbGVtZW50LmxvY2FsTmFtZTtcblx0dGhpcy50YWcgPSB0aGlzLnRhZy5yZXBsYWNlKC86L2csICdcXFxcOicpO1xuXG5cdC8vIG50aC1vZi1jaGlsZChuKzEpXG5cdHRoaXMuaW5kZXhuID0gbnVsbDtcblx0dGhpcy5pbmRleCA9IDE7XG5cdHRoaXMuaWQgPSBudWxsO1xuXHR0aGlzLmNsYXNzZXMgPSBuZXcgQXJyYXkoKTtcblxuXHQvLyBkbyBub3QgYWRkIGFkZGl0aW5hbCBpbmZvIHRvIGh0bWwsIGJvZHkgdGFncy5cblx0Ly8gaHRtbDpudGgtb2YtdHlwZSgxKSBjYW5ub3QgYmUgc2VsZWN0ZWRcblx0aWYodGhpcy50YWcgPT09ICdodG1sJyB8fCB0aGlzLnRhZyA9PT0gJ0hUTUwnXG5cdFx0fHwgdGhpcy50YWcgPT09ICdib2R5JyB8fCB0aGlzLnRhZyA9PT0gJ0JPRFknKSB7XG5cdFx0dGhpcy5pbmRleCA9IG51bGw7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGVsZW1lbnQucGFyZW50Tm9kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gbnRoLWNoaWxkXG5cdFx0Ly90aGlzLmluZGV4ID0gW10uaW5kZXhPZi5jYWxsKGVsZW1lbnQucGFyZW50Tm9kZS5jaGlsZHJlbiwgZWxlbWVudCkrMTtcblxuXHRcdC8vIG50aC1vZi10eXBlXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50LnBhcmVudE5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjaGlsZCA9IGVsZW1lbnQucGFyZW50Tm9kZS5jaGlsZHJlbltpXTtcblx0XHRcdGlmIChjaGlsZCA9PT0gZWxlbWVudCkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmIChjaGlsZC50YWdOYW1lID09PSBlbGVtZW50LnRhZ05hbWUpIHtcblx0XHRcdFx0dGhpcy5pbmRleCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChlbGVtZW50LmlkICE9PSAnJykge1xuXHRcdGlmICh0eXBlb2YgZWxlbWVudC5pZCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHRoaXMuaWQgPSBlbGVtZW50LmlkO1xuXHRcdFx0dGhpcy5pZCA9IHRoaXMuaWQucmVwbGFjZSgvOi9nLCAnXFxcXDonKTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGNjbGFzcyA9IGVsZW1lbnQuY2xhc3NMaXN0W2ldO1xuXHRcdGlmIChpZ25vcmVkQ2xhc3Nlcy5pbmRleE9mKGNjbGFzcykgPT09IC0xKSB7XG5cdFx0XHRjY2xhc3MgPSBjY2xhc3MucmVwbGFjZSgvOi9nLCAnXFxcXDonKTtcblx0XHRcdHRoaXMuY2xhc3Nlcy5wdXNoKGNjbGFzcyk7XG5cdFx0fVxuXHR9XG59O1xuXG5mdW5jdGlvbiBFbGVtZW50U2VsZWN0b3JMaXN0IChDc3NTZWxlY3Rvcikge1xuXHR0aGlzLkNzc1NlbGVjdG9yID0gQ3NzU2VsZWN0b3I7XG59O1xuXG5FbGVtZW50U2VsZWN0b3JMaXN0LnByb3RvdHlwZSA9IG5ldyBBcnJheSgpO1xuXG5FbGVtZW50U2VsZWN0b3JMaXN0LnByb3RvdHlwZS5nZXRDc3NTZWxlY3RvciA9IGZ1bmN0aW9uICgpIHtcblxuXHR2YXIgcmVzdWx0U2VsZWN0b3JzID0gW107XG5cblx0Ly8gVEREXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBzZWxlY3RvciA9IHRoaXNbaV07XG5cblx0XHR2YXIgaXNGaXJzdFNlbGVjdG9yID0gaSA9PT0gdGhpcy5sZW5ndGgtMTtcblx0XHR2YXIgcmVzdWx0U2VsZWN0b3IgPSBzZWxlY3Rvci5nZXRDc3NTZWxlY3Rvcihpc0ZpcnN0U2VsZWN0b3IpO1xuXG5cdFx0aWYgKHRoaXMuQ3NzU2VsZWN0b3IuZW5hYmxlU21hcnRUYWJsZVNlbGVjdG9yKSB7XG5cdFx0XHRpZiAoc2VsZWN0b3IudGFnID09PSAndHInKSB7XG5cdFx0XHRcdGlmIChzZWxlY3Rvci5lbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0XHRcdGlmIChzZWxlY3Rvci5lbGVtZW50LmNoaWxkcmVuWzBdLnRhZ05hbWUgPT09ICdURCdcblx0XHRcdFx0XHRcdHx8IHNlbGVjdG9yLmVsZW1lbnQuY2hpbGRyZW5bMF0udGFnTmFtZSA9PT0gJ1RIJ1xuXHRcdFx0XHRcdFx0fHwgc2VsZWN0b3IuZWxlbWVudC5jaGlsZHJlblswXS50YWdOYW1lID09PSAnVFInKSB7XG5cblx0XHRcdFx0XHRcdHZhciB0ZXh0ID0gc2VsZWN0b3IuZWxlbWVudC5jaGlsZHJlblswXS50ZXh0Q29udGVudDtcblx0XHRcdFx0XHRcdHRleHQgPSB0ZXh0LnRyaW0oKTtcblxuXHRcdFx0XHRcdFx0Ly8gZXNjYXBlIHF1b3Rlc1xuXHRcdFx0XHRcdFx0dGV4dC5yZXBsYWNlKC8oXFxcXCopKCcpL2csIGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBsID0geC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAobCAlIDIpID8geCA6IHguc3Vic3RyaW5nKDAsIGwgLSAxKSArIFwiXFxcXCdcIjtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmVzdWx0U2VsZWN0b3IgKz0gXCI6Y29udGFpbnMoJ1wiICsgdGV4dCArIFwiJylcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXN1bHRTZWxlY3RvcnMucHVzaChyZXN1bHRTZWxlY3Rvcik7XG5cdH1cblxuXHR2YXIgcmVzdWx0Q1NTU2VsZWN0b3IgPSByZXN1bHRTZWxlY3RvcnMucmV2ZXJzZSgpLmpvaW4oJyAnKTtcblx0cmV0dXJuIHJlc3VsdENTU1NlbGVjdG9yO1xufTtcblxuRWxlbWVudFNlbGVjdG9yLnByb3RvdHlwZSA9IHtcblxuXHRnZXRDc3NTZWxlY3RvcjogZnVuY3Rpb24gKGlzRmlyc3RTZWxlY3Rvcikge1xuXG5cdFx0aWYoaXNGaXJzdFNlbGVjdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlzRmlyc3RTZWxlY3RvciA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHZhciBzZWxlY3RvciA9IHRoaXMudGFnO1xuXHRcdGlmICh0aGlzLmlkICE9PSBudWxsKSB7XG5cdFx0XHRzZWxlY3RvciArPSAnIycgKyB0aGlzLmlkO1xuXHRcdH1cblx0XHRpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNsYXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0c2VsZWN0b3IgKz0gXCIuXCIgKyB0aGlzLmNsYXNzZXNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh0aGlzLmluZGV4ICE9PSBudWxsKSB7XG5cdFx0XHRzZWxlY3RvciArPSAnOm50aC1vZi10eXBlKCcgKyB0aGlzLmluZGV4ICsgJyknO1xuXHRcdH1cblx0XHRpZiAodGhpcy5pbmRleG4gIT09IG51bGwgJiYgdGhpcy5pbmRleG4gIT09IC0xKSB7XG5cdFx0XHRzZWxlY3RvciArPSAnOm50aC1vZi10eXBlKG4rJyArIHRoaXMuaW5kZXhuICsgJyknO1xuXHRcdH1cblx0XHRpZih0aGlzLmlzRGlyZWN0Q2hpbGQgJiYgaXNGaXJzdFNlbGVjdG9yID09PSBmYWxzZSkge1xuXHRcdFx0c2VsZWN0b3IgPSBcIj4gXCIrc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNlbGVjdG9yO1xuXHR9LFxuXHQvLyBtZXJnZXMgdGhpcyBzZWxlY3RvciB3aXRoIGFub3RoZXIgb25lLlxuXHRtZXJnZTogZnVuY3Rpb24gKG1lcmdlU2VsZWN0b3IpIHtcblxuXHRcdGlmICh0aGlzLnRhZyAhPT0gbWVyZ2VTZWxlY3Rvci50YWcpIHtcblx0XHRcdHRocm93IFwiZGlmZmVyZW50IGVsZW1lbnQgc2VsZWN0ZWQgKHRhZylcIjtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pbmRleCAhPT0gbnVsbCkge1xuXHRcdFx0aWYgKHRoaXMuaW5kZXggIT09IG1lcmdlU2VsZWN0b3IuaW5kZXgpIHtcblxuXHRcdFx0XHQvLyB1c2UgaW5kZXhuIG9ubHkgZm9yIHR3byBlbGVtZW50c1xuXHRcdFx0XHRpZiAodGhpcy5pbmRleG4gPT09IG51bGwpIHtcblx0XHRcdFx0XHR2YXIgaW5kZXhuID0gTWF0aC5taW4obWVyZ2VTZWxlY3Rvci5pbmRleCwgdGhpcy5pbmRleCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4biA+IDEpIHtcblx0XHRcdFx0XHRcdHRoaXMuaW5kZXhuID0gTWF0aC5taW4obWVyZ2VTZWxlY3Rvci5pbmRleCwgdGhpcy5pbmRleCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuaW5kZXhuID0gLTE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmluZGV4ID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZih0aGlzLmlzRGlyZWN0Q2hpbGQgPT09IHRydWUpIHtcblx0XHRcdHRoaXMuaXNEaXJlY3RDaGlsZCA9IG1lcmdlU2VsZWN0b3IuaXNEaXJlY3RDaGlsZDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pZCAhPT0gbnVsbCkge1xuXHRcdFx0aWYgKHRoaXMuaWQgIT09IG1lcmdlU2VsZWN0b3IuaWQpIHtcblx0XHRcdFx0dGhpcy5pZCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuY2xhc3Nlcy5sZW5ndGggIT09IDApIHtcblx0XHRcdHZhciBjbGFzc2VzID0gbmV3IEFycmF5KCk7XG5cblx0XHRcdGZvciAodmFyIGkgaW4gdGhpcy5jbGFzc2VzKSB7XG5cdFx0XHRcdHZhciBjY2xhc3MgPSB0aGlzLmNsYXNzZXNbaV07XG5cdFx0XHRcdGlmIChtZXJnZVNlbGVjdG9yLmNsYXNzZXMuaW5kZXhPZihjY2xhc3MpICE9PSAtMSkge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChjY2xhc3MpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuY2xhc3NlcyA9IGNsYXNzZXM7XG5cdFx0fVxuXHR9XG59O1xuXG5Dc3NTZWxlY3Rvci5wcm90b3R5cGUgPSB7XG5cdG1lcmdlRWxlbWVudFNlbGVjdG9yczogZnVuY3Rpb24gKG5ld1NlbGVjb3JzKSB7XG5cblx0XHRpZiAobmV3U2VsZWNvcnMubGVuZ3RoIDwgMSkge1xuXHRcdFx0dGhyb3cgXCJObyBzZWxlY3RvcnMgc3BlY2lmaWVkXCI7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKG5ld1NlbGVjb3JzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIG5ld1NlbGVjb3JzWzBdO1xuXHRcdH1cblxuXHRcdC8vIGNoZWNrIHNlbGVjdG9yIHRvdGFsIGNvdW50XG5cdFx0dmFyIGVsZW1lbnRDb3VudEluU2VsZWN0b3IgPSBuZXdTZWxlY29yc1swXS5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBuZXdTZWxlY29ycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHNlbGVjdG9yID0gbmV3U2VsZWNvcnNbaV07XG5cdFx0XHRpZiAoc2VsZWN0b3IubGVuZ3RoICE9PSBlbGVtZW50Q291bnRJblNlbGVjdG9yKSB7XG5cdFx0XHRcdHRocm93IFwiSW52YWxpZCBlbGVtZW50IGNvdW50IGluIHNlbGVjdG9yXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gbWVyZ2Ugc2VsZWN0b3JzXG5cdFx0dmFyIHJlc3VsdGluZ0VsZW1lbnRzID0gbmV3U2VsZWNvcnNbMF07XG5cdFx0Zm9yICh2YXIgaSA9IDE7IGkgPCBuZXdTZWxlY29ycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIG1lcmdlRWxlbWVudHMgPSBuZXdTZWxlY29yc1tpXTtcblxuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBlbGVtZW50Q291bnRJblNlbGVjdG9yOyBqKyspIHtcblx0XHRcdFx0cmVzdWx0aW5nRWxlbWVudHNbal0ubWVyZ2UobWVyZ2VFbGVtZW50c1tqXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRpbmdFbGVtZW50cztcblx0fSxcblx0c3RyaXBTZWxlY3RvcjogZnVuY3Rpb24gKHNlbGVjdG9ycykge1xuXG5cdFx0dmFyIGNzc1NlbGV0b3IgPSBzZWxlY3RvcnMuZ2V0Q3NzU2VsZWN0b3IoKTtcblx0XHR2YXIgYmFzZVNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLnF1ZXJ5KGNzc1NlbGV0b3IpO1xuXG5cdFx0dmFyIGNvbXBhcmVFbGVtZW50cyA9IGZ1bmN0aW9uIChlbGVtZW50cykge1xuXHRcdFx0aWYgKGJhc2VTZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCAhPT0gZWxlbWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBiYXNlU2VsZWN0ZWRFbGVtZW50cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRpZiAoW10uaW5kZXhPZi5jYWxsKGVsZW1lbnRzLCBiYXNlU2VsZWN0ZWRFbGVtZW50c1tqXSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXHRcdC8vIHN0cmlwIGluZGV4ZXNcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldO1xuXHRcdFx0aWYgKHNlbGVjdG9yLmluZGV4ICE9PSBudWxsKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IHNlbGVjdG9yLmluZGV4O1xuXHRcdFx0XHRzZWxlY3Rvci5pbmRleCA9IG51bGw7XG5cdFx0XHRcdHZhciBjc3NTZWxldG9yID0gc2VsZWN0b3JzLmdldENzc1NlbGVjdG9yKCk7XG5cdFx0XHRcdHZhciBuZXdTZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5xdWVyeShjc3NTZWxldG9yKTtcblx0XHRcdFx0Ly8gaWYgcmVzdWx0cyBkb2Vzbid0IG1hdGNoIHRoZW4gdW5kbyBjaGFuZ2VzXG5cdFx0XHRcdGlmICghY29tcGFyZUVsZW1lbnRzKG5ld1NlbGVjdGVkRWxlbWVudHMpKSB7XG5cdFx0XHRcdFx0c2VsZWN0b3IuaW5kZXggPSBpbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHN0cmlwIGlzRGlyZWN0Q2hpbGRcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldO1xuXHRcdFx0aWYgKHNlbGVjdG9yLmlzRGlyZWN0Q2hpbGQgPT09IHRydWUpIHtcblx0XHRcdFx0c2VsZWN0b3IuaXNEaXJlY3RDaGlsZCA9IGZhbHNlO1xuXHRcdFx0XHR2YXIgY3NzU2VsZXRvciA9IHNlbGVjdG9ycy5nZXRDc3NTZWxlY3RvcigpO1xuXHRcdFx0XHR2YXIgbmV3U2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMucXVlcnkoY3NzU2VsZXRvcik7XG5cdFx0XHRcdC8vIGlmIHJlc3VsdHMgZG9lc24ndCBtYXRjaCB0aGVuIHVuZG8gY2hhbmdlc1xuXHRcdFx0XHRpZiAoIWNvbXBhcmVFbGVtZW50cyhuZXdTZWxlY3RlZEVsZW1lbnRzKSkge1xuXHRcdFx0XHRcdHNlbGVjdG9yLmlzRGlyZWN0Q2hpbGQgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gc3RyaXAgaWRzXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RvcnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTtcblx0XHRcdGlmIChzZWxlY3Rvci5pZCAhPT0gbnVsbCkge1xuXHRcdFx0XHR2YXIgaWQgPSBzZWxlY3Rvci5pZDtcblx0XHRcdFx0c2VsZWN0b3IuaWQgPSBudWxsO1xuXHRcdFx0XHR2YXIgY3NzU2VsZXRvciA9IHNlbGVjdG9ycy5nZXRDc3NTZWxlY3RvcigpO1xuXHRcdFx0XHR2YXIgbmV3U2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMucXVlcnkoY3NzU2VsZXRvcik7XG5cdFx0XHRcdC8vIGlmIHJlc3VsdHMgZG9lc24ndCBtYXRjaCB0aGVuIHVuZG8gY2hhbmdlc1xuXHRcdFx0XHRpZiAoIWNvbXBhcmVFbGVtZW50cyhuZXdTZWxlY3RlZEVsZW1lbnRzKSkge1xuXHRcdFx0XHRcdHNlbGVjdG9yLmlkID0gaWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBzdHJpcCBjbGFzc2VzXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RvcnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTtcblx0XHRcdGlmIChzZWxlY3Rvci5jbGFzc2VzLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gc2VsZWN0b3IuY2xhc3Nlcy5sZW5ndGggLSAxOyBqID4gMDsgai0tKSB7XG5cdFx0XHRcdFx0dmFyIGNjbGFzcyA9IHNlbGVjdG9yLmNsYXNzZXNbal07XG5cdFx0XHRcdFx0c2VsZWN0b3IuY2xhc3Nlcy5zcGxpY2UoaiwgMSk7XG5cdFx0XHRcdFx0dmFyIGNzc1NlbGV0b3IgPSBzZWxlY3RvcnMuZ2V0Q3NzU2VsZWN0b3IoKTtcblx0XHRcdFx0XHR2YXIgbmV3U2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMucXVlcnkoY3NzU2VsZXRvcik7XG5cdFx0XHRcdFx0Ly8gaWYgcmVzdWx0cyBkb2Vzbid0IG1hdGNoIHRoZW4gdW5kbyBjaGFuZ2VzXG5cdFx0XHRcdFx0aWYgKCFjb21wYXJlRWxlbWVudHMobmV3U2VsZWN0ZWRFbGVtZW50cykpIHtcblx0XHRcdFx0XHRcdHNlbGVjdG9yLmNsYXNzZXMuc3BsaWNlKGosIDAsIGNjbGFzcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gc3RyaXAgdGFnc1xuXHRcdGZvciAodmFyIGkgPSBzZWxlY3RvcnMubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuXHRcdFx0dmFyIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldO1xuXHRcdFx0c2VsZWN0b3JzLnNwbGljZShpLCAxKTtcblx0XHRcdHZhciBjc3NTZWxldG9yID0gc2VsZWN0b3JzLmdldENzc1NlbGVjdG9yKCk7XG5cdFx0XHR2YXIgbmV3U2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMucXVlcnkoY3NzU2VsZXRvcik7XG5cdFx0XHQvLyBpZiByZXN1bHRzIGRvZXNuJ3QgbWF0Y2ggdGhlbiB1bmRvIGNoYW5nZXNcblx0XHRcdGlmICghY29tcGFyZUVsZW1lbnRzKG5ld1NlbGVjdGVkRWxlbWVudHMpKSB7XG5cdFx0XHRcdHNlbGVjdG9ycy5zcGxpY2UoaSwgMCwgc2VsZWN0b3IpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzZWxlY3RvcnM7XG5cdH0sXG5cdGdldEVsZW1lbnRTZWxlY3RvcnM6IGZ1bmN0aW9uIChlbGVtZW50cywgdG9wKSB7XG5cdFx0dmFyIGVsZW1lbnRTZWxlY3RvcnMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBlbGVtZW50ID0gZWxlbWVudHNbaV07XG5cdFx0XHR2YXIgZWxlbWVudFNlbGVjdG9yID0gdGhpcy5nZXRFbGVtZW50U2VsZWN0b3IoZWxlbWVudCwgdG9wKTtcblx0XHRcdGVsZW1lbnRTZWxlY3RvcnMucHVzaChlbGVtZW50U2VsZWN0b3IpO1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtZW50U2VsZWN0b3JzO1xuXHR9LFxuXHRnZXRFbGVtZW50U2VsZWN0b3I6IGZ1bmN0aW9uIChlbGVtZW50LCB0b3ApIHtcblxuXHRcdHZhciBlbGVtZW50U2VsZWN0b3JMaXN0ID0gbmV3IEVsZW1lbnRTZWxlY3Rvckxpc3QodGhpcyk7XG5cdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzLnBhcmVudCkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGVsZW1lbnQgPT09IHVuZGVmaW5lZCB8fCBlbGVtZW50ID09PSB0aGlzLmRvY3VtZW50KSB7XG5cdFx0XHRcdHRocm93ICdlbGVtZW50IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBnaXZlbiBwYXJlbnQnO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuaXNJZ25vcmVkVGFnKGVsZW1lbnQudGFnTmFtZSkpIHtcblxuXHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0b3AgPiAwKSB7XG5cdFx0XHRcdHRvcC0tO1xuXHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHNlbGVjdG9yID0gbmV3IEVsZW1lbnRTZWxlY3RvcihlbGVtZW50LCB0aGlzLmlnbm9yZWRDbGFzc2VzKTtcblx0XHRcdC8vIGRvY3VtZW50IGRvZXMgbm90IGhhdmUgYSB0YWdOYW1lXG5cdFx0XHRpZihlbGVtZW50LnBhcmVudE5vZGUgPT09IHRoaXMuZG9jdW1lbnQgfHwgdGhpcy5pc0lnbm9yZWRUYWcoZWxlbWVudC5wYXJlbnROb2RlLnRhZ05hbWUpKSB7XG5cdFx0XHRcdHNlbGVjdG9yLmlzRGlyZWN0Q2hpbGQgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbWVudFNlbGVjdG9yTGlzdC5wdXNoKHNlbGVjdG9yKTtcblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1lbnRTZWxlY3Rvckxpc3Q7XG5cdH0sXG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB3aGV0aGVyIHR3byBlbGVtZW50cyBhcmUgc2ltaWxhci4gU2ltaWxhciBlbGVtZW50cyBzaG91bGRcbiAgICAgKiBoYXZlIGEgY29tbW9uIHBhcnJlbnQgYW5kIGFsbCBwYXJlbnQgZWxlbWVudHMgc2hvdWxkIGJlIHRoZSBzYW1lIHR5cGUuXG4gICAgICogQHBhcmFtIGVsZW1lbnQxXG4gICAgICogQHBhcmFtIGVsZW1lbnQyXG4gICAgICovXG4gICAgY2hlY2tTaW1pbGFyRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQxLCBlbGVtZW50Mikge1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG5cbiAgICAgICAgICAgIGlmKGVsZW1lbnQxLnRhZ05hbWUgIT09IGVsZW1lbnQyLnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihlbGVtZW50MSA9PT0gZWxlbWVudDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc3RvcCBhdCBib2R5IHRhZ1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQxID09PSB1bmRlZmluZWQgfHwgZWxlbWVudDEudGFnTmFtZSA9PT0gJ2JvZHknXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudDEudGFnTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQyID09PSB1bmRlZmluZWQgfHwgZWxlbWVudDIudGFnTmFtZSA9PT0gJ2JvZHknXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudDIudGFnTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbGVtZW50MSA9IGVsZW1lbnQxLnBhcmVudE5vZGU7XG4gICAgICAgICAgICBlbGVtZW50MiA9IGVsZW1lbnQyLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR3JvdXBzIGVsZW1lbnRzIGludG8gZ3JvdXBzIGlmIHRoZSBlbWVsZW50cyBhcmUgbm90IHNpbWlsYXJcbiAgICAgKiBAcGFyYW0gZWxlbWVudHNcbiAgICAgKi9cbiAgICBnZXRFbGVtZW50R3JvdXBzOiBmdW5jdGlvbihlbGVtZW50cykge1xuXG4gICAgICAgIC8vIGZpcnN0IGVsbWVudCBpcyBpbiB0aGUgZmlyc3QgZ3JvdXBcbiAgICAgICAgLy8gQFRPRE8gbWF5YmUgaSBkb250IG5lZWQgdGhpcz9cbiAgICAgICAgdmFyIGdyb3VwcyA9IFtbZWxlbWVudHNbMF1dXTtcblxuICAgICAgICBmb3IodmFyIGkgPSAxOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbGVtZW50TmV3ID0gZWxlbWVudHNbaV07XG4gICAgICAgICAgICB2YXIgYWRkZWRUb0dyb3VwID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IodmFyIGogPSAwOyBqIDwgZ3JvdXBzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gZ3JvdXBzW2pdO1xuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50R3JvdXAgPSBncm91cFswXTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNoZWNrU2ltaWxhckVsZW1lbnRzKGVsZW1lbnROZXcsIGVsZW1lbnRHcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAucHVzaChlbGVtZW50TmV3KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkZWRUb0dyb3VwID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZGQgbmV3IGdyb3VwXG4gICAgICAgICAgICBpZighYWRkZWRUb0dyb3VwKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzLnB1c2goW2VsZW1lbnROZXddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBncm91cHM7XG4gICAgfSxcblx0Z2V0Q3NzU2VsZWN0b3I6IGZ1bmN0aW9uIChlbGVtZW50cywgdG9wKSB7XG5cblx0XHR0b3AgPSB0b3AgfHwgMDtcblxuXHRcdHZhciBlbmFibGVTbWFydFRhYmxlU2VsZWN0b3IgPSB0aGlzLmVuYWJsZVNtYXJ0VGFibGVTZWxlY3Rvcjtcblx0XHRpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0dGhpcy5lbmFibGVTbWFydFRhYmxlU2VsZWN0b3IgPSBmYWxzZTtcblx0XHR9XG5cbiAgICAgICAgLy8gZ3JvdXAgZWxlbWVudHMgaW50byBzaW1pbGFyaXR5IGdyb3Vwc1xuICAgICAgICB2YXIgZWxlbWVudEdyb3VwcyA9IHRoaXMuZ2V0RWxlbWVudEdyb3VwcyhlbGVtZW50cyk7XG5cbiAgICAgICAgdmFyIHJlc3VsdENTU1NlbGVjdG9yO1xuXG4gICAgICAgIGlmKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdG9ycykge1xuXG4gICAgICAgICAgICB2YXIgZ3JvdXBTZWxlY3RvcnMgPSBbXTtcblxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGVsZW1lbnRHcm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZ3JvdXBFbGVtZW50cyA9IGVsZW1lbnRHcm91cHNbaV07XG5cbiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudFNlbGVjdG9ycyA9IHRoaXMuZ2V0RWxlbWVudFNlbGVjdG9ycyhncm91cEVsZW1lbnRzLCB0b3ApO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHRTZWxlY3RvciA9IHRoaXMubWVyZ2VFbGVtZW50U2VsZWN0b3JzKGVsZW1lbnRTZWxlY3RvcnMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVJlc3VsdFN0cmlwcGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRTZWxlY3RvciA9IHRoaXMuc3RyaXBTZWxlY3RvcihyZXN1bHRTZWxlY3Rvcik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ3JvdXBTZWxlY3RvcnMucHVzaChyZXN1bHRTZWxlY3Rvci5nZXRDc3NTZWxlY3RvcigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0Q1NTU2VsZWN0b3IgPSBncm91cFNlbGVjdG9ycy5qb2luKCcsICcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYoZWxlbWVudEdyb3Vwcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBcImZvdW5kIG11bHRpcGxlIGVsZW1lbnQgZ3JvdXBzLCBidXQgYWxsb3dNdWx0aXBsZVNlbGVjdG9ycyBkaXNhYmxlZFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZWxlbWVudFNlbGVjdG9ycyA9IHRoaXMuZ2V0RWxlbWVudFNlbGVjdG9ycyhlbGVtZW50cywgdG9wKTtcbiAgICAgICAgICAgIHZhciByZXN1bHRTZWxlY3RvciA9IHRoaXMubWVyZ2VFbGVtZW50U2VsZWN0b3JzKGVsZW1lbnRTZWxlY3RvcnMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUmVzdWx0U3RyaXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0U2VsZWN0b3IgPSB0aGlzLnN0cmlwU2VsZWN0b3IocmVzdWx0U2VsZWN0b3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHRDU1NTZWxlY3RvciA9IHJlc3VsdFNlbGVjdG9yLmdldENzc1NlbGVjdG9yKCk7XG4gICAgICAgIH1cblxuXHRcdHRoaXMuZW5hYmxlU21hcnRUYWJsZVNlbGVjdG9yID0gZW5hYmxlU21hcnRUYWJsZVNlbGVjdG9yO1xuXG5cdFx0Ly8gc3RyaXAgZG93biBzZWxlY3RvclxuXHRcdHJldHVybiByZXN1bHRDU1NTZWxlY3Rvcjtcblx0fSxcblx0aXNJZ25vcmVkVGFnOiBmdW5jdGlvbiAodGFnKSB7XG5cdFx0cmV0dXJuIHRoaXMuaWdub3JlZFRhZ3MuaW5kZXhPZih0YWcudG9Mb3dlckNhc2UoKSkgIT09IC0xO1xuXHR9XG59O1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHtcbiAgICBDU1NSdWxlOiByZXF1aXJlKFwiLi9DU1NSdWxlXCIpLkNTU1J1bGUsXG4gICAgTWF0Y2hlckxpc3Q6IHJlcXVpcmUoXCIuL01hdGNoZXJMaXN0XCIpLk1hdGNoZXJMaXN0XG59O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9DU1MvQC1tb3otZG9jdW1lbnRcbiAqL1xuQ1NTT00uQ1NTRG9jdW1lbnRSdWxlID0gZnVuY3Rpb24gQ1NTRG9jdW1lbnRSdWxlKCkge1xuICAgIENTU09NLkNTU1J1bGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLm1hdGNoZXIgPSBuZXcgQ1NTT00uTWF0Y2hlckxpc3QoKTtcbiAgICB0aGlzLmNzc1J1bGVzID0gW107XG59O1xuXG5DU1NPTS5DU1NEb2N1bWVudFJ1bGUucHJvdG90eXBlID0gbmV3IENTU09NLkNTU1J1bGUoKTtcbkNTU09NLkNTU0RvY3VtZW50UnVsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDU1NPTS5DU1NEb2N1bWVudFJ1bGU7XG5DU1NPTS5DU1NEb2N1bWVudFJ1bGUucHJvdG90eXBlLnR5cGUgPSAxMDtcbi8vRklYTUVcbi8vQ1NTT00uQ1NTRG9jdW1lbnRSdWxlLnByb3RvdHlwZS5pbnNlcnRSdWxlID0gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuaW5zZXJ0UnVsZTtcbi8vQ1NTT00uQ1NTRG9jdW1lbnRSdWxlLnByb3RvdHlwZS5kZWxldGVSdWxlID0gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZGVsZXRlUnVsZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENTU09NLkNTU0RvY3VtZW50UnVsZS5wcm90b3R5cGUsIFwiY3NzVGV4dFwiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNzc1RleHRzID0gW107XG4gICAgZm9yICh2YXIgaT0wLCBsZW5ndGg9dGhpcy5jc3NSdWxlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBjc3NUZXh0cy5wdXNoKHRoaXMuY3NzUnVsZXNbaV0uY3NzVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBcIkAtbW96LWRvY3VtZW50IFwiICsgdGhpcy5tYXRjaGVyLm1hdGNoZXJUZXh0ICsgXCIge1wiICsgY3NzVGV4dHMuam9pbihcIlwiKSArIFwifVwiO1xuICB9XG59KTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5DU1NEb2N1bWVudFJ1bGUgPSBDU1NPTS5DU1NEb2N1bWVudFJ1bGU7XG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHtcblx0Q1NTU3R5bGVEZWNsYXJhdGlvbjogcmVxdWlyZShcIi4vQ1NTU3R5bGVEZWNsYXJhdGlvblwiKS5DU1NTdHlsZURlY2xhcmF0aW9uLFxuXHRDU1NSdWxlOiByZXF1aXJlKFwiLi9DU1NSdWxlXCIpLkNTU1J1bGVcbn07XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAc2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNjc3MtZm9udC1mYWNlLXJ1bGVcbiAqL1xuQ1NTT00uQ1NTRm9udEZhY2VSdWxlID0gZnVuY3Rpb24gQ1NTRm9udEZhY2VSdWxlKCkge1xuXHRDU1NPTS5DU1NSdWxlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3R5bGUgPSBuZXcgQ1NTT00uQ1NTU3R5bGVEZWNsYXJhdGlvbigpO1xuXHR0aGlzLnN0eWxlLnBhcmVudFJ1bGUgPSB0aGlzO1xufTtcblxuQ1NTT00uQ1NTRm9udEZhY2VSdWxlLnByb3RvdHlwZSA9IG5ldyBDU1NPTS5DU1NSdWxlKCk7XG5DU1NPTS5DU1NGb250RmFjZVJ1bGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ1NTT00uQ1NTRm9udEZhY2VSdWxlO1xuQ1NTT00uQ1NTRm9udEZhY2VSdWxlLnByb3RvdHlwZS50eXBlID0gNTtcbi8vRklYTUVcbi8vQ1NTT00uQ1NTRm9udEZhY2VSdWxlLnByb3RvdHlwZS5pbnNlcnRSdWxlID0gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuaW5zZXJ0UnVsZTtcbi8vQ1NTT00uQ1NTRm9udEZhY2VSdWxlLnByb3RvdHlwZS5kZWxldGVSdWxlID0gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZGVsZXRlUnVsZTtcblxuLy8gaHR0cDovL3d3dy5vcGVuc291cmNlLmFwcGxlLmNvbS9zb3VyY2UvV2ViQ29yZS9XZWJDb3JlLTk1NS42Ni4xL2Nzcy9XZWJLaXRDU1NGb250RmFjZVJ1bGUuY3BwXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ1NTT00uQ1NTRm9udEZhY2VSdWxlLnByb3RvdHlwZSwgXCJjc3NUZXh0XCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJAZm9udC1mYWNlIHtcIiArIHRoaXMuc3R5bGUuY3NzVGV4dCArIFwifVwiO1xuICB9XG59KTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5DU1NGb250RmFjZVJ1bGUgPSBDU1NPTS5DU1NGb250RmFjZVJ1bGU7XG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHtcblx0Q1NTUnVsZTogcmVxdWlyZShcIi4vQ1NTUnVsZVwiKS5DU1NSdWxlXG59O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9zaGFkb3ctZG9tLyNob3N0LWF0LXJ1bGVcbiAqL1xuQ1NTT00uQ1NTSG9zdFJ1bGUgPSBmdW5jdGlvbiBDU1NIb3N0UnVsZSgpIHtcblx0Q1NTT00uQ1NTUnVsZS5jYWxsKHRoaXMpO1xuXHR0aGlzLmNzc1J1bGVzID0gW107XG59O1xuXG5DU1NPTS5DU1NIb3N0UnVsZS5wcm90b3R5cGUgPSBuZXcgQ1NTT00uQ1NTUnVsZSgpO1xuQ1NTT00uQ1NTSG9zdFJ1bGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ1NTT00uQ1NTSG9zdFJ1bGU7XG5DU1NPTS5DU1NIb3N0UnVsZS5wcm90b3R5cGUudHlwZSA9IDEwMDE7XG4vL0ZJWE1FXG4vL0NTU09NLkNTU0hvc3RSdWxlLnByb3RvdHlwZS5pbnNlcnRSdWxlID0gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuaW5zZXJ0UnVsZTtcbi8vQ1NTT00uQ1NTSG9zdFJ1bGUucHJvdG90eXBlLmRlbGV0ZVJ1bGUgPSBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5kZWxldGVSdWxlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ1NTT00uQ1NTSG9zdFJ1bGUucHJvdG90eXBlLCBcImNzc1RleHRcIiwge1xuXHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjc3NUZXh0cyA9IFtdO1xuXHRcdGZvciAodmFyIGk9MCwgbGVuZ3RoPXRoaXMuY3NzUnVsZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdGNzc1RleHRzLnB1c2godGhpcy5jc3NSdWxlc1tpXS5jc3NUZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIFwiQGhvc3Qge1wiICsgY3NzVGV4dHMuam9pbihcIlwiKSArIFwifVwiO1xuXHR9XG59KTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5DU1NIb3N0UnVsZSA9IENTU09NLkNTU0hvc3RSdWxlO1xuLy8vQ29tbW9uSlNcbiIsIi8vLkNvbW1vbkpTXG52YXIgQ1NTT00gPSB7XG5cdENTU1J1bGU6IHJlcXVpcmUoXCIuL0NTU1J1bGVcIikuQ1NTUnVsZSxcblx0Q1NTU3R5bGVTaGVldDogcmVxdWlyZShcIi4vQ1NTU3R5bGVTaGVldFwiKS5DU1NTdHlsZVNoZWV0LFxuXHRNZWRpYUxpc3Q6IHJlcXVpcmUoXCIuL01lZGlhTGlzdFwiKS5NZWRpYUxpc3Rcbn07XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAc2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNjc3NpbXBvcnRydWxlXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxlL2Nzcy5odG1sI0NTUy1DU1NJbXBvcnRSdWxlXG4gKi9cbkNTU09NLkNTU0ltcG9ydFJ1bGUgPSBmdW5jdGlvbiBDU1NJbXBvcnRSdWxlKCkge1xuXHRDU1NPTS5DU1NSdWxlLmNhbGwodGhpcyk7XG5cdHRoaXMuaHJlZiA9IFwiXCI7XG5cdHRoaXMubWVkaWEgPSBuZXcgQ1NTT00uTWVkaWFMaXN0KCk7XG5cdHRoaXMuc3R5bGVTaGVldCA9IG5ldyBDU1NPTS5DU1NTdHlsZVNoZWV0KCk7XG59O1xuXG5DU1NPTS5DU1NJbXBvcnRSdWxlLnByb3RvdHlwZSA9IG5ldyBDU1NPTS5DU1NSdWxlKCk7XG5DU1NPTS5DU1NJbXBvcnRSdWxlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENTU09NLkNTU0ltcG9ydFJ1bGU7XG5DU1NPTS5DU1NJbXBvcnRSdWxlLnByb3RvdHlwZS50eXBlID0gMztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENTU09NLkNTU0ltcG9ydFJ1bGUucHJvdG90eXBlLCBcImNzc1RleHRcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBtZWRpYVRleHQgPSB0aGlzLm1lZGlhLm1lZGlhVGV4dDtcbiAgICByZXR1cm4gXCJAaW1wb3J0IHVybChcIiArIHRoaXMuaHJlZiArIFwiKVwiICsgKG1lZGlhVGV4dCA/IFwiIFwiICsgbWVkaWFUZXh0IDogXCJcIikgKyBcIjtcIjtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihjc3NUZXh0KSB7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgLyoqXG4gICAgICogQGltcG9ydCB1cmwocGFydGlhbC5jc3MpIHNjcmVlbiwgaGFuZGhlbGQ7XG4gICAgICogICAgICAgIHx8ICAgICAgICAgICAgICAgfFxuICAgICAqICAgICAgICBhZnRlci1pbXBvcnQgICAgIG1lZGlhXG4gICAgICogICAgICAgICB8XG4gICAgICogICAgICAgICB1cmxcbiAgICAgKi9cbiAgICB2YXIgc3RhdGUgPSAnJztcblxuICAgIHZhciBidWZmZXIgPSAnJztcbiAgICB2YXIgaW5kZXg7XG4gICAgZm9yICh2YXIgY2hhcmFjdGVyOyAoY2hhcmFjdGVyID0gY3NzVGV4dC5jaGFyQXQoaSkpOyBpKyspIHtcblxuICAgICAgc3dpdGNoIChjaGFyYWN0ZXIpIHtcbiAgICAgICAgY2FzZSAnICc6XG4gICAgICAgIGNhc2UgJ1xcdCc6XG4gICAgICAgIGNhc2UgJ1xccic6XG4gICAgICAgIGNhc2UgJ1xcbic6XG4gICAgICAgIGNhc2UgJ1xcZic6XG4gICAgICAgICAgaWYgKHN0YXRlID09PSAnYWZ0ZXItaW1wb3J0Jykge1xuICAgICAgICAgICAgc3RhdGUgPSAndXJsJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyICs9IGNoYXJhY3RlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnQCc6XG4gICAgICAgICAgaWYgKCFzdGF0ZSAmJiBjc3NUZXh0LmluZGV4T2YoJ0BpbXBvcnQnLCBpKSA9PT0gaSkge1xuICAgICAgICAgICAgc3RhdGUgPSAnYWZ0ZXItaW1wb3J0JztcbiAgICAgICAgICAgIGkgKz0gJ2ltcG9ydCcubGVuZ3RoO1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ3VybCcgJiYgY3NzVGV4dC5pbmRleE9mKCd1cmwoJywgaSkgPT09IGkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gY3NzVGV4dC5pbmRleE9mKCcpJywgaSArIDEpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICB0aHJvdyBpICsgJzogXCIpXCIgbm90IGZvdW5kJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gJ3VybCgnLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciB1cmwgPSBjc3NUZXh0LnNsaWNlKGksIGluZGV4KTtcbiAgICAgICAgICAgIGlmICh1cmxbMF0gPT09IHVybFt1cmwubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgICAgaWYgKHVybFswXSA9PT0gJ1wiJyB8fCB1cmxbMF0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gdXJsLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ocmVmID0gdXJsO1xuICAgICAgICAgICAgaSA9IGluZGV4O1xuICAgICAgICAgICAgc3RhdGUgPSAnbWVkaWEnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdcIic6XG4gICAgICAgICAgaWYgKHN0YXRlID09PSAndXJsJykge1xuICAgICAgICAgICAgaW5kZXggPSBjc3NUZXh0LmluZGV4T2YoJ1wiJywgaSArIDEpO1xuICAgICAgICAgICAgaWYgKCFpbmRleCkge1xuICAgICAgICAgICAgICB0aHJvdyBpICsgXCI6ICdcXFwiJyBub3QgZm91bmRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaHJlZiA9IGNzc1RleHQuc2xpY2UoaSArIDEsIGluZGV4KTtcbiAgICAgICAgICAgIGkgPSBpbmRleDtcbiAgICAgICAgICAgIHN0YXRlID0gJ21lZGlhJztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIidcIjpcbiAgICAgICAgICBpZiAoc3RhdGUgPT09ICd1cmwnKSB7XG4gICAgICAgICAgICBpbmRleCA9IGNzc1RleHQuaW5kZXhPZihcIidcIiwgaSArIDEpO1xuICAgICAgICAgICAgaWYgKCFpbmRleCkge1xuICAgICAgICAgICAgICB0aHJvdyBpICsgJzogXCJcXCdcIiBub3QgZm91bmQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ocmVmID0gY3NzVGV4dC5zbGljZShpICsgMSwgaW5kZXgpO1xuICAgICAgICAgICAgaSA9IGluZGV4O1xuICAgICAgICAgICAgc3RhdGUgPSAnbWVkaWEnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICc7JzpcbiAgICAgICAgICBpZiAoc3RhdGUgPT09ICdtZWRpYScpIHtcbiAgICAgICAgICAgIGlmIChidWZmZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5tZWRpYS5tZWRpYVRleHQgPSBidWZmZXIudHJpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ21lZGlhJykge1xuICAgICAgICAgICAgYnVmZmVyICs9IGNoYXJhY3RlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5DU1NJbXBvcnRSdWxlID0gQ1NTT00uQ1NTSW1wb3J0UnVsZTtcbi8vL0NvbW1vbkpTXG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge1xuXHRDU1NSdWxlOiByZXF1aXJlKFwiLi9DU1NSdWxlXCIpLkNTU1J1bGUsXG5cdENTU1N0eWxlRGVjbGFyYXRpb246IHJlcXVpcmUoJy4vQ1NTU3R5bGVEZWNsYXJhdGlvbicpLkNTU1N0eWxlRGVjbGFyYXRpb25cbn07XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtYW5pbWF0aW9ucy8jRE9NLUNTU0tleWZyYW1lUnVsZVxuICovXG5DU1NPTS5DU1NLZXlmcmFtZVJ1bGUgPSBmdW5jdGlvbiBDU1NLZXlmcmFtZVJ1bGUoKSB7XG5cdENTU09NLkNTU1J1bGUuY2FsbCh0aGlzKTtcblx0dGhpcy5rZXlUZXh0ID0gJyc7XG5cdHRoaXMuc3R5bGUgPSBuZXcgQ1NTT00uQ1NTU3R5bGVEZWNsYXJhdGlvbigpO1xuXHR0aGlzLnN0eWxlLnBhcmVudFJ1bGUgPSB0aGlzO1xufTtcblxuQ1NTT00uQ1NTS2V5ZnJhbWVSdWxlLnByb3RvdHlwZSA9IG5ldyBDU1NPTS5DU1NSdWxlKCk7XG5DU1NPTS5DU1NLZXlmcmFtZVJ1bGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ1NTT00uQ1NTS2V5ZnJhbWVSdWxlO1xuQ1NTT00uQ1NTS2V5ZnJhbWVSdWxlLnByb3RvdHlwZS50eXBlID0gOTtcbi8vRklYTUVcbi8vQ1NTT00uQ1NTS2V5ZnJhbWVSdWxlLnByb3RvdHlwZS5pbnNlcnRSdWxlID0gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuaW5zZXJ0UnVsZTtcbi8vQ1NTT00uQ1NTS2V5ZnJhbWVSdWxlLnByb3RvdHlwZS5kZWxldGVSdWxlID0gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZGVsZXRlUnVsZTtcblxuLy8gaHR0cDovL3d3dy5vcGVuc291cmNlLmFwcGxlLmNvbS9zb3VyY2UvV2ViQ29yZS9XZWJDb3JlLTk1NS42Ni4xL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ1NTT00uQ1NTS2V5ZnJhbWVSdWxlLnByb3RvdHlwZSwgXCJjc3NUZXh0XCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5rZXlUZXh0ICsgXCIge1wiICsgdGhpcy5zdHlsZS5jc3NUZXh0ICsgXCJ9IFwiO1xuICB9XG59KTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5DU1NLZXlmcmFtZVJ1bGUgPSBDU1NPTS5DU1NLZXlmcmFtZVJ1bGU7XG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHtcblx0Q1NTUnVsZTogcmVxdWlyZShcIi4vQ1NTUnVsZVwiKS5DU1NSdWxlXG59O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI0RPTS1DU1NLZXlmcmFtZXNSdWxlXG4gKi9cbkNTU09NLkNTU0tleWZyYW1lc1J1bGUgPSBmdW5jdGlvbiBDU1NLZXlmcmFtZXNSdWxlKCkge1xuXHRDU1NPTS5DU1NSdWxlLmNhbGwodGhpcyk7XG5cdHRoaXMubmFtZSA9ICcnO1xuXHR0aGlzLmNzc1J1bGVzID0gW107XG59O1xuXG5DU1NPTS5DU1NLZXlmcmFtZXNSdWxlLnByb3RvdHlwZSA9IG5ldyBDU1NPTS5DU1NSdWxlKCk7XG5DU1NPTS5DU1NLZXlmcmFtZXNSdWxlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENTU09NLkNTU0tleWZyYW1lc1J1bGU7XG5DU1NPTS5DU1NLZXlmcmFtZXNSdWxlLnByb3RvdHlwZS50eXBlID0gODtcbi8vRklYTUVcbi8vQ1NTT00uQ1NTS2V5ZnJhbWVzUnVsZS5wcm90b3R5cGUuaW5zZXJ0UnVsZSA9IENTU1N0eWxlU2hlZXQucHJvdG90eXBlLmluc2VydFJ1bGU7XG4vL0NTU09NLkNTU0tleWZyYW1lc1J1bGUucHJvdG90eXBlLmRlbGV0ZVJ1bGUgPSBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5kZWxldGVSdWxlO1xuXG4vLyBodHRwOi8vd3d3Lm9wZW5zb3VyY2UuYXBwbGUuY29tL3NvdXJjZS9XZWJDb3JlL1dlYkNvcmUtOTU1LjY2LjEvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ1NTT00uQ1NTS2V5ZnJhbWVzUnVsZS5wcm90b3R5cGUsIFwiY3NzVGV4dFwiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNzc1RleHRzID0gW107XG4gICAgZm9yICh2YXIgaT0wLCBsZW5ndGg9dGhpcy5jc3NSdWxlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY3NzVGV4dHMucHVzaChcIiAgXCIgKyB0aGlzLmNzc1J1bGVzW2ldLmNzc1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gXCJAXCIgKyAodGhpcy5fdmVuZG9yUHJlZml4IHx8ICcnKSArIFwia2V5ZnJhbWVzIFwiICsgdGhpcy5uYW1lICsgXCIgeyBcXG5cIiArIGNzc1RleHRzLmpvaW4oXCJcXG5cIikgKyBcIlxcbn1cIjtcbiAgfVxufSk7XG5cblxuLy8uQ29tbW9uSlNcbmV4cG9ydHMuQ1NTS2V5ZnJhbWVzUnVsZSA9IENTU09NLkNTU0tleWZyYW1lc1J1bGU7XG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHtcblx0Q1NTUnVsZTogcmVxdWlyZShcIi4vQ1NTUnVsZVwiKS5DU1NSdWxlLFxuXHRNZWRpYUxpc3Q6IHJlcXVpcmUoXCIuL01lZGlhTGlzdFwiKS5NZWRpYUxpc3Rcbn07XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAc2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNjc3NtZWRpYXJ1bGVcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU01lZGlhUnVsZVxuICovXG5DU1NPTS5DU1NNZWRpYVJ1bGUgPSBmdW5jdGlvbiBDU1NNZWRpYVJ1bGUoKSB7XG5cdENTU09NLkNTU1J1bGUuY2FsbCh0aGlzKTtcblx0dGhpcy5tZWRpYSA9IG5ldyBDU1NPTS5NZWRpYUxpc3QoKTtcblx0dGhpcy5jc3NSdWxlcyA9IFtdO1xufTtcblxuQ1NTT00uQ1NTTWVkaWFSdWxlLnByb3RvdHlwZSA9IG5ldyBDU1NPTS5DU1NSdWxlKCk7XG5DU1NPTS5DU1NNZWRpYVJ1bGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ1NTT00uQ1NTTWVkaWFSdWxlO1xuQ1NTT00uQ1NTTWVkaWFSdWxlLnByb3RvdHlwZS50eXBlID0gNDtcbi8vRklYTUVcbi8vQ1NTT00uQ1NTTWVkaWFSdWxlLnByb3RvdHlwZS5pbnNlcnRSdWxlID0gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuaW5zZXJ0UnVsZTtcbi8vQ1NTT00uQ1NTTWVkaWFSdWxlLnByb3RvdHlwZS5kZWxldGVSdWxlID0gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZGVsZXRlUnVsZTtcblxuLy8gaHR0cDovL29wZW5zb3VyY2UuYXBwbGUuY29tL3NvdXJjZS9XZWJDb3JlL1dlYkNvcmUtNjU4LjI4L2Nzcy9DU1NNZWRpYVJ1bGUuY3BwXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ1NTT00uQ1NTTWVkaWFSdWxlLnByb3RvdHlwZSwgXCJjc3NUZXh0XCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY3NzVGV4dHMgPSBbXTtcbiAgICBmb3IgKHZhciBpPTAsIGxlbmd0aD10aGlzLmNzc1J1bGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBjc3NUZXh0cy5wdXNoKHRoaXMuY3NzUnVsZXNbaV0uY3NzVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBcIkBtZWRpYSBcIiArIHRoaXMubWVkaWEubWVkaWFUZXh0ICsgXCIge1wiICsgY3NzVGV4dHMuam9pbihcIlwiKSArIFwifVwiO1xuICB9XG59KTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5DU1NNZWRpYVJ1bGUgPSBDU1NPTS5DU1NNZWRpYVJ1bGU7XG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHt9O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jdGhlLWNzc3J1bGUtaW50ZXJmYWNlXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxlL2Nzcy5odG1sI0NTUy1DU1NSdWxlXG4gKi9cbkNTU09NLkNTU1J1bGUgPSBmdW5jdGlvbiBDU1NSdWxlKCkge1xuXHR0aGlzLnBhcmVudFJ1bGUgPSBudWxsO1xuXHR0aGlzLnBhcmVudFN0eWxlU2hlZXQgPSBudWxsO1xufTtcblxuQ1NTT00uQ1NTUnVsZS5VTktOT1dOX1JVTEUgPSAwOyAgICAgICAgICAgICAgICAgLy8gb2Jzb2xldGVcbkNTU09NLkNTU1J1bGUuU1RZTEVfUlVMRSA9IDE7XG5DU1NPTS5DU1NSdWxlLkNIQVJTRVRfUlVMRSA9IDI7ICAgICAgICAgICAgICAgICAvLyBvYnNvbGV0ZVxuQ1NTT00uQ1NTUnVsZS5JTVBPUlRfUlVMRSA9IDM7XG5DU1NPTS5DU1NSdWxlLk1FRElBX1JVTEUgPSA0O1xuQ1NTT00uQ1NTUnVsZS5GT05UX0ZBQ0VfUlVMRSA9IDU7XG5DU1NPTS5DU1NSdWxlLlBBR0VfUlVMRSA9IDY7XG5DU1NPTS5DU1NSdWxlLktFWUZSQU1FU19SVUxFID0gNztcbkNTU09NLkNTU1J1bGUuS0VZRlJBTUVfUlVMRSA9IDg7XG5DU1NPTS5DU1NSdWxlLk1BUkdJTl9SVUxFID0gOTtcbkNTU09NLkNTU1J1bGUuTkFNRVNQQUNFX1JVTEUgPSAxMDtcbkNTU09NLkNTU1J1bGUuQ09VTlRFUl9TVFlMRV9SVUxFID0gMTE7XG5DU1NPTS5DU1NSdWxlLlNVUFBPUlRTX1JVTEUgPSAxMjtcbkNTU09NLkNTU1J1bGUuRE9DVU1FTlRfUlVMRSA9IDEzO1xuQ1NTT00uQ1NTUnVsZS5GT05UX0ZFQVRVUkVfVkFMVUVTX1JVTEUgPSAxNDtcbkNTU09NLkNTU1J1bGUuVklFV1BPUlRfUlVMRSA9IDE1O1xuQ1NTT00uQ1NTUnVsZS5SRUdJT05fU1RZTEVfUlVMRSA9IDE2O1xuXG5cbkNTU09NLkNTU1J1bGUucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogQ1NTT00uQ1NTUnVsZVxuXHQvL0ZJWE1FXG59O1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLkNTU1J1bGUgPSBDU1NPTS5DU1NSdWxlO1xuLy8vQ29tbW9uSlNcbiIsIi8vLkNvbW1vbkpTXG52YXIgQ1NTT00gPSB7fTtcbi8vL0NvbW1vbkpTXG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1N0eWxlRGVjbGFyYXRpb25cbiAqL1xuQ1NTT00uQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIENTU1N0eWxlRGVjbGFyYXRpb24oKXtcblx0dGhpcy5sZW5ndGggPSAwO1xuXHR0aGlzLnBhcmVudFJ1bGUgPSBudWxsO1xuXG5cdC8vIE5PTi1TVEFOREFSRFxuXHR0aGlzLl9pbXBvcnRhbnRzID0ge307XG59O1xuXG5cbkNTU09NLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlID0ge1xuXG5cdGNvbnN0cnVjdG9yOiBDU1NPTS5DU1NTdHlsZURlY2xhcmF0aW9uLFxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxlL2Nzcy5odG1sI0NTUy1DU1NTdHlsZURlY2xhcmF0aW9uLWdldFByb3BlcnR5VmFsdWVcblx0ICogQHJldHVybiB7c3RyaW5nfSB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGlmIGl0IGhhcyBiZWVuIGV4cGxpY2l0bHkgc2V0IGZvciB0aGlzIGRlY2xhcmF0aW9uIGJsb2NrLlxuXHQgKiBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlIHByb3BlcnR5IGhhcyBub3QgYmVlbiBzZXQuXG5cdCAqL1xuXHRnZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbihuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXNbbmFtZV0gfHwgXCJcIjtcblx0fSxcblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcHJpb3JpdHk9bnVsbF0gXCJpbXBvcnRhbnRcIiBvciBudWxsXG5cdCAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1N0eWxlRGVjbGFyYXRpb24tc2V0UHJvcGVydHlcblx0ICovXG5cdHNldFByb3BlcnR5OiBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcblx0XHRpZiAodGhpc1tuYW1lXSkge1xuXHRcdFx0Ly8gUHJvcGVydHkgYWxyZWFkeSBleGlzdC4gT3ZlcndyaXRlIGl0LlxuXHRcdFx0dmFyIGluZGV4ID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLCBuYW1lKTtcblx0XHRcdGlmIChpbmRleCA8IDApIHtcblx0XHRcdFx0dGhpc1t0aGlzLmxlbmd0aF0gPSBuYW1lO1xuXHRcdFx0XHR0aGlzLmxlbmd0aCsrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBOZXcgcHJvcGVydHkuXG5cdFx0XHR0aGlzW3RoaXMubGVuZ3RoXSA9IG5hbWU7XG5cdFx0XHR0aGlzLmxlbmd0aCsrO1xuXHRcdH1cblx0XHR0aGlzW25hbWVdID0gdmFsdWUgKyBcIlwiO1xuXHRcdHRoaXMuX2ltcG9ydGFudHNbbmFtZV0gPSBwcmlvcml0eTtcblx0fSxcblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTU3R5bGVEZWNsYXJhdGlvbi1yZW1vdmVQcm9wZXJ0eVxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaWYgaXQgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQgZm9yIHRoaXMgZGVjbGFyYXRpb24gYmxvY2suXG5cdCAqIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGUgcHJvcGVydHkgaGFzIG5vdCBiZWVuIHNldCBvciB0aGUgcHJvcGVydHkgbmFtZSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEga25vd24gQ1NTIHByb3BlcnR5LlxuXHQgKi9cblx0cmVtb3ZlUHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRpZiAoIShuYW1lIGluIHRoaXMpKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdFx0dmFyIGluZGV4ID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLCBuYW1lKTtcblx0XHRpZiAoaW5kZXggPCAwKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdFx0dmFyIHByZXZWYWx1ZSA9IHRoaXNbbmFtZV07XG5cdFx0dGhpc1tuYW1lXSA9IFwiXCI7XG5cblx0XHQvLyBUaGF0J3Mgd2hhdCBXZWJLaXQgYW5kIE9wZXJhIGRvXG5cdFx0QXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRoaXMsIGluZGV4LCAxKTtcblxuXHRcdC8vIFRoYXQncyB3aGF0IEZpcmVmb3ggZG9lc1xuXHRcdC8vdGhpc1tpbmRleF0gPSBcIlwiXG5cblx0XHRyZXR1cm4gcHJldlZhbHVlO1xuXHR9LFxuXG5cdGdldFByb3BlcnR5Q1NTVmFsdWU6IGZ1bmN0aW9uKCkge1xuXHRcdC8vRklYTUVcblx0fSxcblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcblx0ICovXG5cdGdldFByb3BlcnR5UHJpb3JpdHk6IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpcy5faW1wb3J0YW50c1tuYW1lXSB8fCBcIlwiO1xuXHR9LFxuXG5cblx0LyoqXG5cdCAqICAgZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IFwiYXV0b1wiXG5cdCAqICAgZWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChcIm92ZXJmbG93LXhcIilcblx0ICogICAtPiBcIm92ZXJmbG93XCJcblx0ICovXG5cdGdldFByb3BlcnR5U2hvcnRoYW5kOiBmdW5jdGlvbigpIHtcblx0XHQvL0ZJWE1FXG5cdH0sXG5cblx0aXNQcm9wZXJ0eUltcGxpY2l0OiBmdW5jdGlvbigpIHtcblx0XHQvL0ZJWE1FXG5cdH0sXG5cblx0Ly8gRG9lc24ndCB3b3JrIGluIElFIDwgOVxuXHRnZXQgY3NzVGV4dCgpe1xuXHRcdHZhciBwcm9wZXJ0aWVzID0gW107XG5cdFx0Zm9yICh2YXIgaT0wLCBsZW5ndGg9dGhpcy5sZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdFx0dmFyIG5hbWUgPSB0aGlzW2ldO1xuXHRcdFx0dmFyIHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xuXHRcdFx0dmFyIHByaW9yaXR5ID0gdGhpcy5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpO1xuXHRcdFx0aWYgKHByaW9yaXR5KSB7XG5cdFx0XHRcdHByaW9yaXR5ID0gXCIgIVwiICsgcHJpb3JpdHk7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0aWVzW2ldID0gbmFtZSArIFwiOiBcIiArIHZhbHVlICsgcHJpb3JpdHkgKyBcIjtcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BlcnRpZXMuam9pbihcIiBcIik7XG5cdH0sXG5cblx0c2V0IGNzc1RleHQodGV4dCl7XG5cdFx0dmFyIGksIG5hbWU7XG5cdFx0Zm9yIChpID0gdGhpcy5sZW5ndGg7IGktLTspIHtcblx0XHRcdG5hbWUgPSB0aGlzW2ldO1xuXHRcdFx0dGhpc1tuYW1lXSA9IFwiXCI7XG5cdFx0fVxuXHRcdEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbCh0aGlzLCAwLCB0aGlzLmxlbmd0aCk7XG5cdFx0dGhpcy5faW1wb3J0YW50cyA9IHt9O1xuXG5cdFx0dmFyIGR1bW15UnVsZSA9IENTU09NLnBhcnNlKCcjYm9ndXN7JyArIHRleHQgKyAnfScpLmNzc1J1bGVzWzBdLnN0eWxlO1xuXHRcdHZhciBsZW5ndGggPSBkdW1teVJ1bGUubGVuZ3RoO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdFx0bmFtZSA9IGR1bW15UnVsZVtpXTtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoZHVtbXlSdWxlW2ldLCBkdW1teVJ1bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKSwgZHVtbXlSdWxlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkpO1xuXHRcdH1cblx0fVxufTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5DU1NTdHlsZURlY2xhcmF0aW9uID0gQ1NTT00uQ1NTU3R5bGVEZWNsYXJhdGlvbjtcbkNTU09NLnBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpLnBhcnNlOyAvLyBDYW5ub3QgYmUgaW5jbHVkZWQgc29vbmVyIGR1ZSB0byB0aGUgbXV0dWFsIGRlcGVuZGVuY3kgYmV0d2VlbiBwYXJzZS5qcyBhbmQgQ1NTU3R5bGVEZWNsYXJhdGlvbi5qc1xuLy8vQ29tbW9uSlNcbiIsIi8vLkNvbW1vbkpTXG52YXIgQ1NTT00gPSB7XG5cdENTU1N0eWxlRGVjbGFyYXRpb246IHJlcXVpcmUoXCIuL0NTU1N0eWxlRGVjbGFyYXRpb25cIikuQ1NTU3R5bGVEZWNsYXJhdGlvbixcblx0Q1NTUnVsZTogcmVxdWlyZShcIi4vQ1NTUnVsZVwiKS5DU1NSdWxlXG59O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jY3Nzc3R5bGVydWxlXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxlL2Nzcy5odG1sI0NTUy1DU1NTdHlsZVJ1bGVcbiAqL1xuQ1NTT00uQ1NTU3R5bGVSdWxlID0gZnVuY3Rpb24gQ1NTU3R5bGVSdWxlKCkge1xuXHRDU1NPTS5DU1NSdWxlLmNhbGwodGhpcyk7XG5cdHRoaXMuc2VsZWN0b3JUZXh0ID0gXCJcIjtcblx0dGhpcy5zdHlsZSA9IG5ldyBDU1NPTS5DU1NTdHlsZURlY2xhcmF0aW9uKCk7XG5cdHRoaXMuc3R5bGUucGFyZW50UnVsZSA9IHRoaXM7XG59O1xuXG5DU1NPTS5DU1NTdHlsZVJ1bGUucHJvdG90eXBlID0gbmV3IENTU09NLkNTU1J1bGUoKTtcbkNTU09NLkNTU1N0eWxlUnVsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDU1NPTS5DU1NTdHlsZVJ1bGU7XG5DU1NPTS5DU1NTdHlsZVJ1bGUucHJvdG90eXBlLnR5cGUgPSAxO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ1NTT00uQ1NTU3R5bGVSdWxlLnByb3RvdHlwZSwgXCJjc3NUZXh0XCIsIHtcblx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdGV4dDtcblx0XHRpZiAodGhpcy5zZWxlY3RvclRleHQpIHtcblx0XHRcdHRleHQgPSB0aGlzLnNlbGVjdG9yVGV4dCArIFwiIHtcIiArIHRoaXMuc3R5bGUuY3NzVGV4dCArIFwifVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0ZXh0ID0gXCJcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRleHQ7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24oY3NzVGV4dCkge1xuXHRcdHZhciBydWxlID0gQ1NTT00uQ1NTU3R5bGVSdWxlLnBhcnNlKGNzc1RleHQpO1xuXHRcdHRoaXMuc3R5bGUgPSBydWxlLnN0eWxlO1xuXHRcdHRoaXMuc2VsZWN0b3JUZXh0ID0gcnVsZS5zZWxlY3RvclRleHQ7XG5cdH1cbn0pO1xuXG5cbi8qKlxuICogTk9OLVNUQU5EQVJEXG4gKiBsaWdodHdlaWdodCB2ZXJzaW9uIG9mIHBhcnNlLmpzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJ1bGVUZXh0XG4gKiBAcmV0dXJuIENTU1N0eWxlUnVsZVxuICovXG5DU1NPTS5DU1NTdHlsZVJ1bGUucGFyc2UgPSBmdW5jdGlvbihydWxlVGV4dCkge1xuXHR2YXIgaSA9IDA7XG5cdHZhciBzdGF0ZSA9IFwic2VsZWN0b3JcIjtcblx0dmFyIGluZGV4O1xuXHR2YXIgaiA9IGk7XG5cdHZhciBidWZmZXIgPSBcIlwiO1xuXG5cdHZhciBTSUdOSUZJQ0FOVF9XSElURVNQQUNFID0ge1xuXHRcdFwic2VsZWN0b3JcIjogdHJ1ZSxcblx0XHRcInZhbHVlXCI6IHRydWVcblx0fTtcblxuXHR2YXIgc3R5bGVSdWxlID0gbmV3IENTU09NLkNTU1N0eWxlUnVsZSgpO1xuXHR2YXIgbmFtZSwgcHJpb3JpdHk9XCJcIjtcblxuXHRmb3IgKHZhciBjaGFyYWN0ZXI7IChjaGFyYWN0ZXIgPSBydWxlVGV4dC5jaGFyQXQoaSkpOyBpKyspIHtcblxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cblx0XHRjYXNlIFwiIFwiOlxuXHRcdGNhc2UgXCJcXHRcIjpcblx0XHRjYXNlIFwiXFxyXCI6XG5cdFx0Y2FzZSBcIlxcblwiOlxuXHRcdGNhc2UgXCJcXGZcIjpcblx0XHRcdGlmIChTSUdOSUZJQ0FOVF9XSElURVNQQUNFW3N0YXRlXSkge1xuXHRcdFx0XHQvLyBTcXVhc2ggMiBvciBtb3JlIHdoaXRlLXNwYWNlcyBpbiB0aGUgcm93IGludG8gMVxuXHRcdFx0XHRzd2l0Y2ggKHJ1bGVUZXh0LmNoYXJBdChpIC0gMSkpIHtcblx0XHRcdFx0XHRjYXNlIFwiIFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJcXHRcIjpcblx0XHRcdFx0XHRjYXNlIFwiXFxyXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlxcblwiOlxuXHRcdFx0XHRcdGNhc2UgXCJcXGZcIjpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRidWZmZXIgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cblx0XHQvLyBTdHJpbmdcblx0XHRjYXNlICdcIic6XG5cdFx0XHRqID0gaSArIDE7XG5cdFx0XHRpbmRleCA9IHJ1bGVUZXh0LmluZGV4T2YoJ1wiJywgaikgKyAxO1xuXHRcdFx0aWYgKCFpbmRleCkge1xuXHRcdFx0XHR0aHJvdyAnXCIgaXMgbWlzc2luZyc7XG5cdFx0XHR9XG5cdFx0XHRidWZmZXIgKz0gcnVsZVRleHQuc2xpY2UoaSwgaW5kZXgpO1xuXHRcdFx0aSA9IGluZGV4IC0gMTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIidcIjpcblx0XHRcdGogPSBpICsgMTtcblx0XHRcdGluZGV4ID0gcnVsZVRleHQuaW5kZXhPZihcIidcIiwgaikgKyAxO1xuXHRcdFx0aWYgKCFpbmRleCkge1xuXHRcdFx0XHR0aHJvdyBcIicgaXMgbWlzc2luZ1wiO1xuXHRcdFx0fVxuXHRcdFx0YnVmZmVyICs9IHJ1bGVUZXh0LnNsaWNlKGksIGluZGV4KTtcblx0XHRcdGkgPSBpbmRleCAtIDE7XG5cdFx0XHRicmVhaztcblxuXHRcdC8vIENvbW1lbnRcblx0XHRjYXNlIFwiL1wiOlxuXHRcdFx0aWYgKHJ1bGVUZXh0LmNoYXJBdChpICsgMSkgPT09IFwiKlwiKSB7XG5cdFx0XHRcdGkgKz0gMjtcblx0XHRcdFx0aW5kZXggPSBydWxlVGV4dC5pbmRleE9mKFwiKi9cIiwgaSk7XG5cdFx0XHRcdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJNaXNzaW5nICovXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBpbmRleCArIDE7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJ7XCI6XG5cdFx0XHRpZiAoc3RhdGUgPT09IFwic2VsZWN0b3JcIikge1xuXHRcdFx0XHRzdHlsZVJ1bGUuc2VsZWN0b3JUZXh0ID0gYnVmZmVyLnRyaW0oKTtcblx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0c3RhdGUgPSBcIm5hbWVcIjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIjpcIjpcblx0XHRcdGlmIChzdGF0ZSA9PT0gXCJuYW1lXCIpIHtcblx0XHRcdFx0bmFtZSA9IGJ1ZmZlci50cmltKCk7XG5cdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdHN0YXRlID0gXCJ2YWx1ZVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVmZmVyICs9IGNoYXJhY3Rlcjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIiFcIjpcblx0XHRcdGlmIChzdGF0ZSA9PT0gXCJ2YWx1ZVwiICYmIHJ1bGVUZXh0LmluZGV4T2YoXCIhaW1wb3J0YW50XCIsIGkpID09PSBpKSB7XG5cdFx0XHRcdHByaW9yaXR5ID0gXCJpbXBvcnRhbnRcIjtcblx0XHRcdFx0aSArPSBcImltcG9ydGFudFwiLmxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCI7XCI6XG5cdFx0XHRpZiAoc3RhdGUgPT09IFwidmFsdWVcIikge1xuXHRcdFx0XHRzdHlsZVJ1bGUuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgYnVmZmVyLnRyaW0oKSwgcHJpb3JpdHkpO1xuXHRcdFx0XHRwcmlvcml0eSA9IFwiXCI7XG5cdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdHN0YXRlID0gXCJuYW1lXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwifVwiOlxuXHRcdFx0aWYgKHN0YXRlID09PSBcInZhbHVlXCIpIHtcblx0XHRcdFx0c3R5bGVSdWxlLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGJ1ZmZlci50cmltKCksIHByaW9yaXR5KTtcblx0XHRcdFx0cHJpb3JpdHkgPSBcIlwiO1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gXCJuYW1lXCIpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0fVxuXHRcdFx0c3RhdGUgPSBcInNlbGVjdG9yXCI7XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0YnJlYWs7XG5cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc3R5bGVSdWxlO1xuXG59O1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLkNTU1N0eWxlUnVsZSA9IENTU09NLkNTU1N0eWxlUnVsZTtcbi8vL0NvbW1vbkpTXG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge1xuXHRTdHlsZVNoZWV0OiByZXF1aXJlKFwiLi9TdHlsZVNoZWV0XCIpLlN0eWxlU2hlZXQsXG5cdENTU1N0eWxlUnVsZTogcmVxdWlyZShcIi4vQ1NTU3R5bGVSdWxlXCIpLkNTU1N0eWxlUnVsZVxufTtcbi8vL0NvbW1vbkpTXG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1N0eWxlU2hlZXRcbiAqL1xuQ1NTT00uQ1NTU3R5bGVTaGVldCA9IGZ1bmN0aW9uIENTU1N0eWxlU2hlZXQoKSB7XG5cdENTU09NLlN0eWxlU2hlZXQuY2FsbCh0aGlzKTtcblx0dGhpcy5jc3NSdWxlcyA9IFtdO1xufTtcblxuXG5DU1NPTS5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZSA9IG5ldyBDU1NPTS5TdHlsZVNoZWV0KCk7XG5DU1NPTS5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENTU09NLkNTU1N0eWxlU2hlZXQ7XG5cblxuLyoqXG4gKiBVc2VkIHRvIGluc2VydCBhIG5ldyBydWxlIGludG8gdGhlIHN0eWxlIHNoZWV0LiBUaGUgbmV3IHJ1bGUgbm93IGJlY29tZXMgcGFydCBvZiB0aGUgY2FzY2FkZS5cbiAqXG4gKiAgIHNoZWV0ID0gbmV3IFNoZWV0KFwiYm9keSB7bWFyZ2luOiAwfVwiKVxuICogICBzaGVldC50b1N0cmluZygpXG4gKiAgIC0+IFwiYm9keXttYXJnaW46MDt9XCJcbiAqICAgc2hlZXQuaW5zZXJ0UnVsZShcImltZyB7Ym9yZGVyOiBub25lfVwiLCAwKVxuICogICAtPiAwXG4gKiAgIHNoZWV0LnRvU3RyaW5nKClcbiAqICAgLT4gXCJpbWd7Ym9yZGVyOm5vbmU7fWJvZHl7bWFyZ2luOjA7fVwiXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJ1bGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTU3R5bGVTaGVldC1pbnNlcnRSdWxlXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBpbmRleCB3aXRoaW4gdGhlIHN0eWxlIHNoZWV0J3MgcnVsZSBjb2xsZWN0aW9uIG9mIHRoZSBuZXdseSBpbnNlcnRlZCBydWxlLlxuICovXG5DU1NPTS5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5pbnNlcnRSdWxlID0gZnVuY3Rpb24ocnVsZSwgaW5kZXgpIHtcblx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IHRoaXMuY3NzUnVsZXMubGVuZ3RoKSB7XG5cdFx0dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJTkRFWF9TSVpFX0VSUlwiKTtcblx0fVxuXHR2YXIgY3NzUnVsZSA9IENTU09NLnBhcnNlKHJ1bGUpLmNzc1J1bGVzWzBdO1xuXHRjc3NSdWxlLnBhcmVudFN0eWxlU2hlZXQgPSB0aGlzO1xuXHR0aGlzLmNzc1J1bGVzLnNwbGljZShpbmRleCwgMCwgY3NzUnVsZSk7XG5cdHJldHVybiBpbmRleDtcbn07XG5cblxuLyoqXG4gKiBVc2VkIHRvIGRlbGV0ZSBhIHJ1bGUgZnJvbSB0aGUgc3R5bGUgc2hlZXQuXG4gKlxuICogICBzaGVldCA9IG5ldyBTaGVldChcImltZ3tib3JkZXI6bm9uZX0gYm9keXttYXJnaW46MH1cIilcbiAqICAgc2hlZXQudG9TdHJpbmcoKVxuICogICAtPiBcImltZ3tib3JkZXI6bm9uZTt9Ym9keXttYXJnaW46MDt9XCJcbiAqICAgc2hlZXQuZGVsZXRlUnVsZSgwKVxuICogICBzaGVldC50b1N0cmluZygpXG4gKiAgIC0+IFwiYm9keXttYXJnaW46MDt9XCJcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggd2l0aGluIHRoZSBzdHlsZSBzaGVldCdzIHJ1bGUgbGlzdCBvZiB0aGUgcnVsZSB0byByZW1vdmUuXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxlL2Nzcy5odG1sI0NTUy1DU1NTdHlsZVNoZWV0LWRlbGV0ZVJ1bGVcbiAqL1xuQ1NTT00uQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZGVsZXRlUnVsZSA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5jc3NSdWxlcy5sZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIklOREVYX1NJWkVfRVJSXCIpO1xuXHR9XG5cdHRoaXMuY3NzUnVsZXMuc3BsaWNlKGluZGV4LCAxKTtcbn07XG5cblxuLyoqXG4gKiBOT04tU1RBTkRBUkRcbiAqIEByZXR1cm4ge3N0cmluZ30gc2VyaWFsaXplIHN0eWxlc2hlZXRcbiAqL1xuQ1NTT00uQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHJlc3VsdCA9IFwiXCI7XG5cdHZhciBydWxlcyA9IHRoaXMuY3NzUnVsZXM7XG5cdGZvciAodmFyIGk9MDsgaTxydWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHJlc3VsdCArPSBydWxlc1tpXS5jc3NUZXh0ICsgXCJcXG5cIjtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5DU1NTdHlsZVNoZWV0ID0gQ1NTT00uQ1NTU3R5bGVTaGVldDtcbkNTU09NLnBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpLnBhcnNlOyAvLyBDYW5ub3QgYmUgaW5jbHVkZWQgc29vbmVyIGR1ZSB0byB0aGUgbXV0dWFsIGRlcGVuZGVuY3kgYmV0d2VlbiBwYXJzZS5qcyBhbmQgQ1NTU3R5bGVTaGVldC5qc1xuLy8vQ29tbW9uSlNcbiIsIi8vLkNvbW1vbkpTXG52YXIgQ1NTT00gPSB7fTtcbi8vL0NvbW1vbkpTXG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1ZhbHVlXG4gKlxuICogVE9ETzogYWRkIGlmIG5lZWRlZFxuICovXG5DU1NPTS5DU1NWYWx1ZSA9IGZ1bmN0aW9uIENTU1ZhbHVlKCkge1xufTtcblxuQ1NTT00uQ1NTVmFsdWUucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogQ1NTT00uQ1NTVmFsdWUsXG5cblx0Ly8gQHNlZTogaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1ZhbHVlXG5cdHNldCBjc3NUZXh0KHRleHQpIHtcblx0XHR2YXIgbmFtZSA9IHRoaXMuX2dldENvbnN0cnVjdG9yTmFtZSgpO1xuXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdET01FeGNlcHRpb246IHByb3BlcnR5IFwiY3NzVGV4dFwiIG9mIFwiJyArIG5hbWUgKyAnXCIgaXMgcmVhZG9ubHkgYW5kIGNhbiBub3QgYmUgcmVwbGFjZWQgd2l0aCBcIicgKyB0ZXh0ICsgJ1wiIScpO1xuXHR9LFxuXG5cdGdldCBjc3NUZXh0KCkge1xuXHRcdHZhciBuYW1lID0gdGhpcy5fZ2V0Q29uc3RydWN0b3JOYW1lKCk7XG5cblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2dldHRlciBcImNzc1RleHRcIiBvZiBcIicgKyBuYW1lICsgJ1wiIGlzIG5vdCBpbXBsZW1lbnRlZCEnKTtcblx0fSxcblxuXHRfZ2V0Q29uc3RydWN0b3JOYW1lOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgcyA9IHRoaXMuY29uc3RydWN0b3IudG9TdHJpbmcoKSxcblx0XHRcdFx0YyA9IHMubWF0Y2goL2Z1bmN0aW9uXFxzKFteXFwoXSspLyksXG5cdFx0XHRcdG5hbWUgPSBjWzFdO1xuXG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5cblxuLy8uQ29tbW9uSlNcbmV4cG9ydHMuQ1NTVmFsdWUgPSBDU1NPTS5DU1NWYWx1ZTtcbi8vL0NvbW1vbkpTXG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge1xuXHRDU1NWYWx1ZTogcmVxdWlyZSgnLi9DU1NWYWx1ZScpLkNTU1ZhbHVlXG59O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1Mzc2MzQodj12cy44NSkuYXNweFxuICpcbiAqL1xuQ1NTT00uQ1NTVmFsdWVFeHByZXNzaW9uID0gZnVuY3Rpb24gQ1NTVmFsdWVFeHByZXNzaW9uKHRva2VuLCBpZHgpIHtcblx0dGhpcy5fdG9rZW4gPSB0b2tlbjtcblx0dGhpcy5faWR4ID0gaWR4O1xufTtcblxuQ1NTT00uQ1NTVmFsdWVFeHByZXNzaW9uLnByb3RvdHlwZSA9IG5ldyBDU1NPTS5DU1NWYWx1ZSgpO1xuQ1NTT00uQ1NTVmFsdWVFeHByZXNzaW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENTU09NLkNTU1ZhbHVlRXhwcmVzc2lvbjtcblxuLyoqXG4gKiBwYXJzZSBjc3MgZXhwcmVzc2lvbigpIHZhbHVlXG4gKlxuICogQHJldHVybiB7T2JqZWN0fVxuICogICAgICAgICAtIGVycm9yOlxuICogICAgICAgICBvclxuICogICAgICAgICAtIGlkeDpcbiAqICAgICAgICAgLSBleHByZXNzaW9uOlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogLnNlbGVjdG9yIHtcbiAqXHRcdHpvb206IGV4cHJlc3Npb24oZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoID4gMTAwMCA/ICcxMDAwcHgnIDogJ2F1dG8nKTtcbiAqIH1cbiAqL1xuQ1NTT00uQ1NTVmFsdWVFeHByZXNzaW9uLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdG9rZW4gPSB0aGlzLl90b2tlbixcblx0XHRcdGlkeCA9IHRoaXMuX2lkeDtcblxuXHR2YXIgY2hhcmFjdGVyID0gJycsXG5cdFx0XHRleHByZXNzaW9uID0gJycsXG5cdFx0XHRlcnJvciA9ICcnLFxuXHRcdFx0aW5mbyxcblx0XHRcdHBhcmVuID0gW107XG5cblxuXHRmb3IgKDsgOyArK2lkeCkge1xuXHRcdGNoYXJhY3RlciA9IHRva2VuLmNoYXJBdChpZHgpO1xuXG5cdFx0Ly8gZW5kIG9mIHRva2VuXG5cdFx0aWYgKGNoYXJhY3RlciA9PT0gJycpIHtcblx0XHRcdGVycm9yID0gJ2NzcyBleHByZXNzaW9uIGVycm9yOiB1bmZpbmlzaGVkIGV4cHJlc3Npb24hJztcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdHN3aXRjaChjaGFyYWN0ZXIpIHtcblx0XHRcdGNhc2UgJygnOlxuXHRcdFx0XHRwYXJlbi5wdXNoKGNoYXJhY3Rlcik7XG5cdFx0XHRcdGV4cHJlc3Npb24gKz0gY2hhcmFjdGVyO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnKSc6XG5cdFx0XHRcdHBhcmVuLnBvcChjaGFyYWN0ZXIpO1xuXHRcdFx0XHRleHByZXNzaW9uICs9IGNoYXJhY3Rlcjtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgJy8nOlxuXHRcdFx0XHRpZiAoKGluZm8gPSB0aGlzLl9wYXJzZUpTQ29tbWVudCh0b2tlbiwgaWR4KSkpIHsgLy8gY29tbWVudD9cblx0XHRcdFx0XHRpZiAoaW5mby5lcnJvcikge1xuXHRcdFx0XHRcdFx0ZXJyb3IgPSAnY3NzIGV4cHJlc3Npb24gZXJyb3I6IHVuZmluaXNoZWQgY29tbWVudCBpbiBleHByZXNzaW9uISc7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlkeCA9IGluZm8uaWR4O1xuXHRcdFx0XHRcdFx0Ly8gaWdub3JlIHRoZSBjb21tZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKChpbmZvID0gdGhpcy5fcGFyc2VKU1JleEV4cCh0b2tlbiwgaWR4KSkpIHsgLy8gcmVnZXhwXG5cdFx0XHRcdFx0aWR4ID0gaW5mby5pZHg7XG5cdFx0XHRcdFx0ZXhwcmVzc2lvbiArPSBpbmZvLnRleHQ7XG5cdFx0XHRcdH0gZWxzZSB7IC8vIG90aGVyXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbiArPSBjaGFyYWN0ZXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCInXCI6XG5cdFx0XHRjYXNlICdcIic6XG5cdFx0XHRcdGluZm8gPSB0aGlzLl9wYXJzZUpTU3RyaW5nKHRva2VuLCBpZHgsIGNoYXJhY3Rlcik7XG5cdFx0XHRcdGlmIChpbmZvKSB7IC8vIHN0cmluZ1xuXHRcdFx0XHRcdGlkeCA9IGluZm8uaWR4O1xuXHRcdFx0XHRcdGV4cHJlc3Npb24gKz0gaW5mby50ZXh0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGV4cHJlc3Npb24gKz0gY2hhcmFjdGVyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRleHByZXNzaW9uICs9IGNoYXJhY3Rlcjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0aWYgKGVycm9yKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHQvLyBlbmQgb2YgZXhwcmVzc2lvblxuXHRcdGlmIChwYXJlbi5sZW5ndGggPT09IDApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHZhciByZXQ7XG5cdGlmIChlcnJvcikge1xuXHRcdHJldCA9IHtcblx0XHRcdGVycm9yOiBlcnJvclxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0cmV0ID0ge1xuXHRcdFx0aWR4OiBpZHgsXG5cdFx0XHRleHByZXNzaW9uOiBleHByZXNzaW9uXG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cbi8qKlxuICpcbiAqIEByZXR1cm4ge09iamVjdHxmYWxzZX1cbiAqICAgICAgICAgIC0gaWR4OlxuICogICAgICAgICAgLSB0ZXh0OlxuICogICAgICAgICAgb3JcbiAqICAgICAgICAgIC0gZXJyb3I6XG4gKiAgICAgICAgICBvclxuICogICAgICAgICAgZmFsc2VcbiAqXG4gKi9cbkNTU09NLkNTU1ZhbHVlRXhwcmVzc2lvbi5wcm90b3R5cGUuX3BhcnNlSlNDb21tZW50ID0gZnVuY3Rpb24odG9rZW4sIGlkeCkge1xuXHR2YXIgbmV4dENoYXIgPSB0b2tlbi5jaGFyQXQoaWR4ICsgMSksXG5cdFx0XHR0ZXh0O1xuXG5cdGlmIChuZXh0Q2hhciA9PT0gJy8nIHx8IG5leHRDaGFyID09PSAnKicpIHtcblx0XHR2YXIgc3RhcnRJZHggPSBpZHgsXG5cdFx0XHRcdGVuZElkeCxcblx0XHRcdFx0Y29tbWVudEVuZENoYXI7XG5cblx0XHRpZiAobmV4dENoYXIgPT09ICcvJykgeyAvLyBsaW5lIGNvbW1lbnRcblx0XHRcdGNvbW1lbnRFbmRDaGFyID0gJ1xcbic7XG5cdFx0fSBlbHNlIGlmIChuZXh0Q2hhciA9PT0gJyonKSB7IC8vIGJsb2NrIGNvbW1lbnRcblx0XHRcdGNvbW1lbnRFbmRDaGFyID0gJyovJztcblx0XHR9XG5cblx0XHRlbmRJZHggPSB0b2tlbi5pbmRleE9mKGNvbW1lbnRFbmRDaGFyLCBzdGFydElkeCArIDEgKyAxKTtcblx0XHRpZiAoZW5kSWR4ICE9PSAtMSkge1xuXHRcdFx0ZW5kSWR4ID0gZW5kSWR4ICsgY29tbWVudEVuZENoYXIubGVuZ3RoIC0gMTtcblx0XHRcdHRleHQgPSB0b2tlbi5zdWJzdHJpbmcoaWR4LCBlbmRJZHggKyAxKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlkeDogZW5kSWR4LFxuXHRcdFx0XHR0ZXh0OiB0ZXh0XG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgZXJyb3IgPSAnY3NzIGV4cHJlc3Npb24gZXJyb3I6IHVuZmluaXNoZWQgY29tbWVudCBpbiBleHByZXNzaW9uISc7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlcnJvcjogZXJyb3Jcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuXG4vKipcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R8ZmFsc2V9XG4gKlx0XHRcdFx0XHQtIGlkeDpcbiAqXHRcdFx0XHRcdC0gdGV4dDpcbiAqXHRcdFx0XHRcdG9yIFxuICpcdFx0XHRcdFx0ZmFsc2VcbiAqXG4gKi9cbkNTU09NLkNTU1ZhbHVlRXhwcmVzc2lvbi5wcm90b3R5cGUuX3BhcnNlSlNTdHJpbmcgPSBmdW5jdGlvbih0b2tlbiwgaWR4LCBzZXApIHtcblx0dmFyIGVuZElkeCA9IHRoaXMuX2ZpbmRNYXRjaGVkSWR4KHRva2VuLCBpZHgsIHNlcCksXG5cdFx0XHR0ZXh0O1xuXG5cdGlmIChlbmRJZHggPT09IC0xKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdHRleHQgPSB0b2tlbi5zdWJzdHJpbmcoaWR4LCBlbmRJZHggKyBzZXAubGVuZ3RoKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRpZHg6IGVuZElkeCxcblx0XHRcdHRleHQ6IHRleHRcblx0XHR9O1xuXHR9XG59O1xuXG5cbi8qKlxuICogcGFyc2UgcmVnZXhwIGluIGNzcyBleHByZXNzaW9uXG4gKlxuICogQHJldHVybiB7T2JqZWN0fGZhbHNlfVxuICpcdFx0XHRcdC0gaWR4OlxuICpcdFx0XHRcdC0gcmVnRXhwOlxuICpcdFx0XHRcdG9yIFxuICpcdFx0XHRcdGZhbHNlXG4gKi9cblxuLypcblxuYWxsIGxlZ2FsIFJlZ0V4cFxuIFxuL2EvXG4oL2EvKVxuWy9hL11cblsxMiwgL2EvXVxuXG4hL2EvXG5cbisvYS9cbi0vYS9cbiogL2EvXG4vIC9hL1xuJS9hL1xuXG49PT0vYS9cbiE9PS9hL1xuPT0vYS9cbiE9L2EvXG4+L2EvXG4+PS9hL1xuPC9hL1xuPD0vYS9cblxuJi9hL1xufC9hL1xuXi9hL1xufi9hL1xuPDwvYS9cbj4+L2EvXG4+Pj4vYS9cblxuJiYvYS9cbnx8L2EvXG4/L2EvXG49L2EvXG4sL2EvXG5cblx0XHRkZWxldGUgL2EvXG5cdFx0XHRcdGluIC9hL1xuaW5zdGFuY2VvZiAvYS9cblx0XHRcdFx0bmV3IC9hL1xuXHRcdHR5cGVvZiAvYS9cblx0XHRcdHZvaWQgL2EvXG5cbiovXG5DU1NPTS5DU1NWYWx1ZUV4cHJlc3Npb24ucHJvdG90eXBlLl9wYXJzZUpTUmV4RXhwID0gZnVuY3Rpb24odG9rZW4sIGlkeCkge1xuXHR2YXIgYmVmb3JlID0gdG9rZW4uc3Vic3RyaW5nKDAsIGlkeCkucmVwbGFjZSgvXFxzKyQvLCBcIlwiKSxcblx0XHRcdGxlZ2FsUmVneCA9IFtcblx0XHRcdFx0L14kLyxcblx0XHRcdFx0L1xcKCQvLFxuXHRcdFx0XHQvXFxbJC8sXG5cdFx0XHRcdC9cXCEkLyxcblx0XHRcdFx0L1xcKyQvLFxuXHRcdFx0XHQvXFwtJC8sXG5cdFx0XHRcdC9cXCokLyxcblx0XHRcdFx0L1xcL1xccysvLFxuXHRcdFx0XHQvXFwlJC8sXG5cdFx0XHRcdC9cXD0kLyxcblx0XHRcdFx0L1xcPiQvLFxuXHRcdFx0XHQvPCQvLFxuXHRcdFx0XHQvXFwmJC8sXG5cdFx0XHRcdC9cXHwkLyxcblx0XHRcdFx0L1xcXiQvLFxuXHRcdFx0XHQvXFx+JC8sXG5cdFx0XHRcdC9cXD8kLyxcblx0XHRcdFx0L1xcLCQvLFxuXHRcdFx0XHQvZGVsZXRlJC8sXG5cdFx0XHRcdC9pbiQvLFxuXHRcdFx0XHQvaW5zdGFuY2VvZiQvLFxuXHRcdFx0XHQvbmV3JC8sXG5cdFx0XHRcdC90eXBlb2YkLyxcblx0XHRcdFx0L3ZvaWQkL1xuXHRcdFx0XTtcblxuXHR2YXIgaXNMZWdhbCA9IGxlZ2FsUmVneC5zb21lKGZ1bmN0aW9uKHJlZykge1xuXHRcdHJldHVybiByZWcudGVzdChiZWZvcmUpO1xuXHR9KTtcblxuXHRpZiAoIWlzTGVnYWwpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHNlcCA9ICcvJztcblxuXHRcdC8vIHNhbWUgbG9naWMgYXMgc3RyaW5nXG5cdFx0cmV0dXJuIHRoaXMuX3BhcnNlSlNTdHJpbmcodG9rZW4sIGlkeCwgc2VwKTtcblx0fVxufTtcblxuXG4vKipcbiAqXG4gKiBmaW5kIG5leHQgc2VwKHNhbWUgbGluZSkgaW5kZXggaW4gYHRva2VuYFxuICpcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqXG4gKi9cbkNTU09NLkNTU1ZhbHVlRXhwcmVzc2lvbi5wcm90b3R5cGUuX2ZpbmRNYXRjaGVkSWR4ID0gZnVuY3Rpb24odG9rZW4sIGlkeCwgc2VwKSB7XG5cdHZhciBzdGFydElkeCA9IGlkeCxcblx0XHRcdGVuZElkeDtcblxuXHR2YXIgTk9UX0ZPVU5EID0gLTE7XG5cblx0d2hpbGUodHJ1ZSkge1xuXHRcdGVuZElkeCA9IHRva2VuLmluZGV4T2Yoc2VwLCBzdGFydElkeCArIDEpO1xuXG5cdFx0aWYgKGVuZElkeCA9PT0gLTEpIHsgLy8gbm90IGZvdW5kXG5cdFx0XHRlbmRJZHggPSBOT1RfRk9VTkQ7XG5cdFx0XHRicmVhaztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHRleHQgPSB0b2tlbi5zdWJzdHJpbmcoaWR4ICsgMSwgZW5kSWR4KSxcblx0XHRcdFx0XHRtYXRjaGVkID0gdGV4dC5tYXRjaCgvXFxcXCskLyk7XG5cdFx0XHRpZiAoIW1hdGNoZWQgfHwgbWF0Y2hlZFswXSAlIDIgPT09IDApIHsgLy8gbm90IGVzY2FwZWRcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGFydElkeCA9IGVuZElkeDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBib3VuZGFyeSBtdXN0IGJlIGluIHRoZSBzYW1lIGxpbmUoanMgc3Rpbmcgb3IgcmVnZXhwKVxuXHR2YXIgbmV4dE5ld0xpbmVJZHggPSB0b2tlbi5pbmRleE9mKCdcXG4nLCBpZHggKyAxKTtcblx0aWYgKG5leHROZXdMaW5lSWR4IDwgZW5kSWR4KSB7XG5cdFx0ZW5kSWR4ID0gTk9UX0ZPVU5EO1xuXHR9XG5cblxuXHRyZXR1cm4gZW5kSWR4O1xufTtcblxuXG5cblxuLy8uQ29tbW9uSlNcbmV4cG9ydHMuQ1NTVmFsdWVFeHByZXNzaW9uID0gQ1NTT00uQ1NTVmFsdWVFeHByZXNzaW9uO1xuLy8vQ29tbW9uSlNcbiIsIi8vLkNvbW1vbkpTXG52YXIgQ1NTT00gPSB7fTtcbi8vL0NvbW1vbkpTXG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vQ1NTL0AtbW96LWRvY3VtZW50XG4gKi9cbkNTU09NLk1hdGNoZXJMaXN0ID0gZnVuY3Rpb24gTWF0Y2hlckxpc3QoKXtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG59O1xuXG5DU1NPTS5NYXRjaGVyTGlzdC5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvcjogQ1NTT00uTWF0Y2hlckxpc3QsXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0IG1hdGNoZXJUZXh0KCkge1xuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLCBcIiwgXCIpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICAgKi9cbiAgICBzZXQgbWF0Y2hlclRleHQodmFsdWUpIHtcbiAgICAgICAgLy8ganVzdCBhIHRlbXBvcmFyeSBzb2x1dGlvbiwgYWN0dWFsbHkgaXQgbWF5IGJlIHdyb25nIGJ5IGp1c3Qgc3BsaXQgdGhlIHZhbHVlIHdpdGggJywnLCBiZWNhdXNlIGEgdXJsIGNhbiBpbmNsdWRlICcsJy5cbiAgICAgICAgdmFyIHZhbHVlcyA9IHZhbHVlLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzW2ldID0gdmFsdWVzW2ldLnRyaW0oKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWF0Y2hlclxuICAgICAqL1xuICAgIGFwcGVuZE1hdGNoZXI6IGZ1bmN0aW9uKG1hdGNoZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcywgbWF0Y2hlcikgPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzW3RoaXMubGVuZ3RoXSA9IG1hdGNoZXI7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCsrO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtYXRjaGVyXG4gICAgICovXG4gICAgZGVsZXRlTWF0Y2hlcjogZnVuY3Rpb24obWF0Y2hlcikge1xuICAgICAgICB2YXIgaW5kZXggPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsIG1hdGNoZXIpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGhpcywgaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG59O1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLk1hdGNoZXJMaXN0ID0gQ1NTT00uTWF0Y2hlckxpc3Q7XG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHt9O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jdGhlLW1lZGlhbGlzdC1pbnRlcmZhY2VcbiAqL1xuQ1NTT00uTWVkaWFMaXN0ID0gZnVuY3Rpb24gTWVkaWFMaXN0KCl7XG5cdHRoaXMubGVuZ3RoID0gMDtcbn07XG5cbkNTU09NLk1lZGlhTGlzdC5wcm90b3R5cGUgPSB7XG5cblx0Y29uc3RydWN0b3I6IENTU09NLk1lZGlhTGlzdCxcblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IG1lZGlhVGV4dCgpIHtcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLCBcIiwgXCIpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcblx0ICovXG5cdHNldCBtZWRpYVRleHQodmFsdWUpIHtcblx0XHR2YXIgdmFsdWVzID0gdmFsdWUuc3BsaXQoXCIsXCIpO1xuXHRcdHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cdFx0Zm9yICh2YXIgaT0wOyBpPGxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzW2ldID0gdmFsdWVzW2ldLnRyaW0oKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZWRpdW1cblx0ICovXG5cdGFwcGVuZE1lZGl1bTogZnVuY3Rpb24obWVkaXVtKSB7XG5cdFx0aWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcywgbWVkaXVtKSA9PT0gLTEpIHtcblx0XHRcdHRoaXNbdGhpcy5sZW5ndGhdID0gbWVkaXVtO1xuXHRcdFx0dGhpcy5sZW5ndGgrKztcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZWRpdW1cblx0ICovXG5cdGRlbGV0ZU1lZGl1bTogZnVuY3Rpb24obWVkaXVtKSB7XG5cdFx0dmFyIGluZGV4ID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLCBtZWRpdW0pO1xuXHRcdGlmIChpbmRleCAhPT0gLTEpIHtcblx0XHRcdEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbCh0aGlzLCBpbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cbn07XG5cblxuLy8uQ29tbW9uSlNcbmV4cG9ydHMuTWVkaWFMaXN0ID0gQ1NTT00uTWVkaWFMaXN0O1xuLy8vQ29tbW9uSlNcbiIsIi8vLkNvbW1vbkpTXG52YXIgQ1NTT00gPSB7fTtcbi8vL0NvbW1vbkpTXG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBzZWUgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3RoZS1zdHlsZXNoZWV0LWludGVyZmFjZVxuICovXG5DU1NPTS5TdHlsZVNoZWV0ID0gZnVuY3Rpb24gU3R5bGVTaGVldCgpIHtcblx0dGhpcy5wYXJlbnRTdHlsZVNoZWV0ID0gbnVsbDtcbn07XG5cblxuLy8uQ29tbW9uSlNcbmV4cG9ydHMuU3R5bGVTaGVldCA9IENTU09NLlN0eWxlU2hlZXQ7XG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHtcblx0Q1NTU3R5bGVTaGVldDogcmVxdWlyZShcIi4vQ1NTU3R5bGVTaGVldFwiKS5DU1NTdHlsZVNoZWV0LFxuXHRDU1NTdHlsZVJ1bGU6IHJlcXVpcmUoXCIuL0NTU1N0eWxlUnVsZVwiKS5DU1NTdHlsZVJ1bGUsXG5cdENTU01lZGlhUnVsZTogcmVxdWlyZShcIi4vQ1NTTWVkaWFSdWxlXCIpLkNTU01lZGlhUnVsZSxcblx0Q1NTU3R5bGVEZWNsYXJhdGlvbjogcmVxdWlyZShcIi4vQ1NTU3R5bGVEZWNsYXJhdGlvblwiKS5DU1NTdHlsZURlY2xhcmF0aW9uLFxuXHRDU1NLZXlmcmFtZVJ1bGU6IHJlcXVpcmUoJy4vQ1NTS2V5ZnJhbWVSdWxlJykuQ1NTS2V5ZnJhbWVSdWxlLFxuXHRDU1NLZXlmcmFtZXNSdWxlOiByZXF1aXJlKCcuL0NTU0tleWZyYW1lc1J1bGUnKS5DU1NLZXlmcmFtZXNSdWxlXG59O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIFByb2R1Y2VzIGEgZGVlcCBjb3B5IG9mIHN0eWxlc2hlZXQg4oCUIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMgb2Ygc3R5bGVzaGVldCBhcmUgY29waWVkIHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIHtDU1NTdHlsZVNoZWV0fENTU09NLkNTU1N0eWxlU2hlZXR9IHN0eWxlc2hlZXRcbiAqIEBub3NpZGVlZmZlY3RzXG4gKiBAcmV0dXJuIHtDU1NPTS5DU1NTdHlsZVNoZWV0fVxuICovXG5DU1NPTS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lKHN0eWxlc2hlZXQpIHtcblxuXHR2YXIgY2xvbmVkID0gbmV3IENTU09NLkNTU1N0eWxlU2hlZXQoKTtcblxuXHR2YXIgcnVsZXMgPSBzdHlsZXNoZWV0LmNzc1J1bGVzO1xuXHRpZiAoIXJ1bGVzKSB7XG5cdFx0cmV0dXJuIGNsb25lZDtcblx0fVxuXG5cdHZhciBSVUxFX1RZUEVTID0ge1xuXHRcdDE6IENTU09NLkNTU1N0eWxlUnVsZSxcblx0XHQ0OiBDU1NPTS5DU1NNZWRpYVJ1bGUsXG5cdFx0Ly8zOiBDU1NPTS5DU1NJbXBvcnRSdWxlLFxuXHRcdC8vNTogQ1NTT00uQ1NTRm9udEZhY2VSdWxlLFxuXHRcdC8vNjogQ1NTT00uQ1NTUGFnZVJ1bGUsXG5cdFx0ODogQ1NTT00uQ1NTS2V5ZnJhbWVzUnVsZSxcblx0XHQ5OiBDU1NPTS5DU1NLZXlmcmFtZVJ1bGVcblx0fTtcblxuXHRmb3IgKHZhciBpPTAsIHJ1bGVzTGVuZ3RoPXJ1bGVzLmxlbmd0aDsgaSA8IHJ1bGVzTGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgcnVsZSA9IHJ1bGVzW2ldO1xuXHRcdHZhciBydWxlQ2xvbmUgPSBjbG9uZWQuY3NzUnVsZXNbaV0gPSBuZXcgUlVMRV9UWVBFU1tydWxlLnR5cGVdKCk7XG5cblx0XHR2YXIgc3R5bGUgPSBydWxlLnN0eWxlO1xuXHRcdGlmIChzdHlsZSkge1xuXHRcdFx0dmFyIHN0eWxlQ2xvbmUgPSBydWxlQ2xvbmUuc3R5bGUgPSBuZXcgQ1NTT00uQ1NTU3R5bGVEZWNsYXJhdGlvbigpO1xuXHRcdFx0Zm9yICh2YXIgaj0wLCBzdHlsZUxlbmd0aD1zdHlsZS5sZW5ndGg7IGogPCBzdHlsZUxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHZhciBuYW1lID0gc3R5bGVDbG9uZVtqXSA9IHN0eWxlW2pdO1xuXHRcdFx0XHRzdHlsZUNsb25lW25hbWVdID0gc3R5bGVbbmFtZV07XG5cdFx0XHRcdHN0eWxlQ2xvbmUuX2ltcG9ydGFudHNbbmFtZV0gPSBzdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpO1xuXHRcdFx0fVxuXHRcdFx0c3R5bGVDbG9uZS5sZW5ndGggPSBzdHlsZS5sZW5ndGg7XG5cdFx0fVxuXG5cdFx0aWYgKHJ1bGUuaGFzT3duUHJvcGVydHkoJ2tleVRleHQnKSkge1xuXHRcdFx0cnVsZUNsb25lLmtleVRleHQgPSBydWxlLmtleVRleHQ7XG5cdFx0fVxuXG5cdFx0aWYgKHJ1bGUuaGFzT3duUHJvcGVydHkoJ3NlbGVjdG9yVGV4dCcpKSB7XG5cdFx0XHRydWxlQ2xvbmUuc2VsZWN0b3JUZXh0ID0gcnVsZS5zZWxlY3RvclRleHQ7XG5cdFx0fVxuXG5cdFx0aWYgKHJ1bGUuaGFzT3duUHJvcGVydHkoJ21lZGlhVGV4dCcpKSB7XG5cdFx0XHRydWxlQ2xvbmUubWVkaWFUZXh0ID0gcnVsZS5tZWRpYVRleHQ7XG5cdFx0fVxuXG5cdFx0aWYgKHJ1bGUuaGFzT3duUHJvcGVydHkoJ2Nzc1J1bGVzJykpIHtcblx0XHRcdHJ1bGVDbG9uZS5jc3NSdWxlcyA9IGNsb25lKHJ1bGUpLmNzc1J1bGVzO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjbG9uZWQ7XG5cbn07XG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLmNsb25lID0gQ1NTT00uY2xvbmU7XG4vLy9Db21tb25KU1xuIiwiZXhwb3J0cy5DU1NTdHlsZURlY2xhcmF0aW9uID0gcmVxdWlyZShcIi4vQ1NTU3R5bGVEZWNsYXJhdGlvblwiKS5DU1NTdHlsZURlY2xhcmF0aW9uO1xuZXhwb3J0cy5DU1NSdWxlID0gcmVxdWlyZShcIi4vQ1NTUnVsZVwiKS5DU1NSdWxlO1xuZXhwb3J0cy5DU1NTdHlsZVJ1bGUgPSByZXF1aXJlKFwiLi9DU1NTdHlsZVJ1bGVcIikuQ1NTU3R5bGVSdWxlO1xuZXhwb3J0cy5DU1NJbXBvcnRSdWxlID0gcmVxdWlyZShcIi4vQ1NTSW1wb3J0UnVsZVwiKS5DU1NJbXBvcnRSdWxlO1xuZXhwb3J0cy5NZWRpYUxpc3QgPSByZXF1aXJlKFwiLi9NZWRpYUxpc3RcIikuTWVkaWFMaXN0O1xuZXhwb3J0cy5DU1NNZWRpYVJ1bGUgPSByZXF1aXJlKFwiLi9DU1NNZWRpYVJ1bGVcIikuQ1NTTWVkaWFSdWxlO1xuZXhwb3J0cy5TdHlsZVNoZWV0ID0gcmVxdWlyZShcIi4vU3R5bGVTaGVldFwiKS5TdHlsZVNoZWV0O1xuZXhwb3J0cy5DU1NTdHlsZVNoZWV0ID0gcmVxdWlyZShcIi4vQ1NTU3R5bGVTaGVldFwiKS5DU1NTdHlsZVNoZWV0O1xuZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoXCIuL3BhcnNlXCIpLnBhcnNlO1xuZXhwb3J0cy5jbG9uZSA9IHJlcXVpcmUoXCIuL2Nsb25lXCIpLmNsb25lO1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHt9O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICovXG5DU1NPTS5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHRva2VuKSB7XG5cblx0dmFyIGkgPSAwO1xuXG5cdC8qKlxuXHRcdFwiYmVmb3JlLXNlbGVjdG9yXCIgb3Jcblx0XHRcInNlbGVjdG9yXCIgb3Jcblx0XHRcImF0UnVsZVwiIG9yXG5cdFx0XCJhdEJsb2NrXCIgb3Jcblx0XHRcImJlZm9yZS1uYW1lXCIgb3Jcblx0XHRcIm5hbWVcIiBvclxuXHRcdFwiYmVmb3JlLXZhbHVlXCIgb3Jcblx0XHRcInZhbHVlXCJcblx0Ki9cblx0dmFyIHN0YXRlID0gXCJiZWZvcmUtc2VsZWN0b3JcIjtcblxuXHR2YXIgaW5kZXg7XG5cdHZhciBidWZmZXIgPSBcIlwiO1xuXHR2YXIgdmFsdWVQYXJlbnRoZXNpc0RlcHRoID0gMDtcblxuXHR2YXIgU0lHTklGSUNBTlRfV0hJVEVTUEFDRSA9IHtcblx0XHRcInNlbGVjdG9yXCI6IHRydWUsXG5cdFx0XCJ2YWx1ZVwiOiB0cnVlLFxuXHRcdFwidmFsdWUtcGFyZW50aGVzaXNcIjogdHJ1ZSxcblx0XHRcImF0UnVsZVwiOiB0cnVlLFxuXHRcdFwiaW1wb3J0UnVsZS1iZWdpblwiOiB0cnVlLFxuXHRcdFwiaW1wb3J0UnVsZVwiOiB0cnVlLFxuXHRcdFwiYXRCbG9ja1wiOiB0cnVlLFxuXHRcdCdkb2N1bWVudFJ1bGUtYmVnaW4nOiB0cnVlXG5cdH07XG5cblx0dmFyIHN0eWxlU2hlZXQgPSBuZXcgQ1NTT00uQ1NTU3R5bGVTaGVldCgpO1xuXG5cdC8vIEB0eXBlIENTU1N0eWxlU2hlZXR8Q1NTTWVkaWFSdWxlfENTU0ZvbnRGYWNlUnVsZXxDU1NLZXlmcmFtZXNSdWxlfENTU0RvY3VtZW50UnVsZVxuXHR2YXIgY3VycmVudFNjb3BlID0gc3R5bGVTaGVldDtcblxuXHQvLyBAdHlwZSBDU1NNZWRpYVJ1bGV8Q1NTS2V5ZnJhbWVzUnVsZXxDU1NEb2N1bWVudFJ1bGVcblx0dmFyIHBhcmVudFJ1bGU7XG5cblx0dmFyIG5hbWUsIHByaW9yaXR5PVwiXCIsIHN0eWxlUnVsZSwgbWVkaWFSdWxlLCBpbXBvcnRSdWxlLCBmb250RmFjZVJ1bGUsIGtleWZyYW1lc1J1bGUsIGRvY3VtZW50UnVsZSwgaG9zdFJ1bGU7XG5cblx0dmFyIGF0S2V5ZnJhbWVzUmVnRXhwID0gL0AoLSg/OlxcdystKSspP2tleWZyYW1lcy9nO1xuXG5cdHZhciBwYXJzZUVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdHZhciBsaW5lcyA9IHRva2VuLnN1YnN0cmluZygwLCBpKS5zcGxpdCgnXFxuJyk7XG5cdFx0dmFyIGxpbmVDb3VudCA9IGxpbmVzLmxlbmd0aDtcblx0XHR2YXIgY2hhckNvdW50ID0gbGluZXMucG9wKCkubGVuZ3RoICsgMTtcblx0XHR2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSArICcgKGxpbmUgJyArIGxpbmVDb3VudCArICcsIGNoYXIgJyArIGNoYXJDb3VudCArICcpJyk7XG5cdFx0ZXJyb3IubGluZSA9IGxpbmVDb3VudDtcblx0XHQvKiBqc2hpbnQgc3ViIDogdHJ1ZSAqL1xuXHRcdGVycm9yWydjaGFyJ10gPSBjaGFyQ291bnQ7XG5cdFx0ZXJyb3Iuc3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH07XG5cblx0Zm9yICh2YXIgY2hhcmFjdGVyOyAoY2hhcmFjdGVyID0gdG9rZW4uY2hhckF0KGkpKTsgaSsrKSB7XG5cblx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXG5cdFx0Y2FzZSBcIiBcIjpcblx0XHRjYXNlIFwiXFx0XCI6XG5cdFx0Y2FzZSBcIlxcclwiOlxuXHRcdGNhc2UgXCJcXG5cIjpcblx0XHRjYXNlIFwiXFxmXCI6XG5cdFx0XHRpZiAoU0lHTklGSUNBTlRfV0hJVEVTUEFDRVtzdGF0ZV0pIHtcblx0XHRcdFx0YnVmZmVyICs9IGNoYXJhY3Rlcjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Ly8gU3RyaW5nXG5cdFx0Y2FzZSAnXCInOlxuXHRcdFx0aW5kZXggPSBpICsgMTtcblx0XHRcdGRvIHtcblx0XHRcdFx0aW5kZXggPSB0b2tlbi5pbmRleE9mKCdcIicsIGluZGV4KSArIDE7XG5cdFx0XHRcdGlmICghaW5kZXgpIHtcblx0XHRcdFx0XHRwYXJzZUVycm9yKCdVbm1hdGNoZWQgXCInKTtcblx0XHRcdFx0fVxuXHRcdFx0fSB3aGlsZSAodG9rZW5baW5kZXggLSAyXSA9PT0gJ1xcXFwnKTtcblx0XHRcdGJ1ZmZlciArPSB0b2tlbi5zbGljZShpLCBpbmRleCk7XG5cdFx0XHRpID0gaW5kZXggLSAxO1xuXHRcdFx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdiZWZvcmUtdmFsdWUnOlxuXHRcdFx0XHRcdHN0YXRlID0gJ3ZhbHVlJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnaW1wb3J0UnVsZS1iZWdpbic6XG5cdFx0XHRcdFx0c3RhdGUgPSAnaW1wb3J0UnVsZSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCInXCI6XG5cdFx0XHRpbmRleCA9IGkgKyAxO1xuXHRcdFx0ZG8ge1xuXHRcdFx0XHRpbmRleCA9IHRva2VuLmluZGV4T2YoXCInXCIsIGluZGV4KSArIDE7XG5cdFx0XHRcdGlmICghaW5kZXgpIHtcblx0XHRcdFx0XHRwYXJzZUVycm9yKFwiVW5tYXRjaGVkICdcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0gd2hpbGUgKHRva2VuW2luZGV4IC0gMl0gPT09ICdcXFxcJyk7XG5cdFx0XHRidWZmZXIgKz0gdG9rZW4uc2xpY2UoaSwgaW5kZXgpO1xuXHRcdFx0aSA9IGluZGV4IC0gMTtcblx0XHRcdHN3aXRjaCAoc3RhdGUpIHtcblx0XHRcdFx0Y2FzZSAnYmVmb3JlLXZhbHVlJzpcblx0XHRcdFx0XHRzdGF0ZSA9ICd2YWx1ZSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2ltcG9ydFJ1bGUtYmVnaW4nOlxuXHRcdFx0XHRcdHN0YXRlID0gJ2ltcG9ydFJ1bGUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cblx0XHQvLyBDb21tZW50XG5cdFx0Y2FzZSBcIi9cIjpcblx0XHRcdGlmICh0b2tlbi5jaGFyQXQoaSArIDEpID09PSBcIipcIikge1xuXHRcdFx0XHRpICs9IDI7XG5cdFx0XHRcdGluZGV4ID0gdG9rZW4uaW5kZXhPZihcIiovXCIsIGkpO1xuXHRcdFx0XHRpZiAoaW5kZXggPT09IC0xKSB7XG5cdFx0XHRcdFx0cGFyc2VFcnJvcihcIk1pc3NpbmcgKi9cIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IGluZGV4ICsgMTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVmZmVyICs9IGNoYXJhY3Rlcjtcblx0XHRcdH1cblx0XHRcdGlmIChzdGF0ZSA9PT0gXCJpbXBvcnRSdWxlLWJlZ2luXCIpIHtcblx0XHRcdFx0YnVmZmVyICs9IFwiIFwiO1xuXHRcdFx0XHRzdGF0ZSA9IFwiaW1wb3J0UnVsZVwiO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cblx0XHQvLyBBdC1ydWxlXG5cdFx0Y2FzZSBcIkBcIjpcblx0XHRcdGlmICh0b2tlbi5pbmRleE9mKFwiQC1tb3otZG9jdW1lbnRcIiwgaSkgPT09IGkpIHtcblx0XHRcdFx0c3RhdGUgPSBcImRvY3VtZW50UnVsZS1iZWdpblwiO1xuXHRcdFx0XHRkb2N1bWVudFJ1bGUgPSBuZXcgQ1NTT00uQ1NTRG9jdW1lbnRSdWxlKCk7XG5cdFx0XHRcdGRvY3VtZW50UnVsZS5fX3N0YXJ0cyA9IGk7XG5cdFx0XHRcdGkgKz0gXCItbW96LWRvY3VtZW50XCIubGVuZ3RoO1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH0gZWxzZSBpZiAodG9rZW4uaW5kZXhPZihcIkBtZWRpYVwiLCBpKSA9PT0gaSkge1xuXHRcdFx0XHRzdGF0ZSA9IFwiYXRCbG9ja1wiO1xuXHRcdFx0XHRtZWRpYVJ1bGUgPSBuZXcgQ1NTT00uQ1NTTWVkaWFSdWxlKCk7XG5cdFx0XHRcdG1lZGlhUnVsZS5fX3N0YXJ0cyA9IGk7XG5cdFx0XHRcdGkgKz0gXCJtZWRpYVwiLmxlbmd0aDtcblx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2UgaWYgKHRva2VuLmluZGV4T2YoXCJAaG9zdFwiLCBpKSA9PT0gaSkge1xuXHRcdFx0XHRzdGF0ZSA9IFwiaG9zdFJ1bGUtYmVnaW5cIjtcblx0XHRcdFx0aSArPSBcImhvc3RcIi5sZW5ndGg7XG5cdFx0XHRcdGhvc3RSdWxlID0gbmV3IENTU09NLkNTU0hvc3RSdWxlKCk7XG5cdFx0XHRcdGhvc3RSdWxlLl9fc3RhcnRzID0gaTtcblx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2UgaWYgKHRva2VuLmluZGV4T2YoXCJAaW1wb3J0XCIsIGkpID09PSBpKSB7XG5cdFx0XHRcdHN0YXRlID0gXCJpbXBvcnRSdWxlLWJlZ2luXCI7XG5cdFx0XHRcdGkgKz0gXCJpbXBvcnRcIi5sZW5ndGg7XG5cdFx0XHRcdGJ1ZmZlciArPSBcIkBpbXBvcnRcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2UgaWYgKHRva2VuLmluZGV4T2YoXCJAZm9udC1mYWNlXCIsIGkpID09PSBpKSB7XG5cdFx0XHRcdHN0YXRlID0gXCJmb250RmFjZVJ1bGUtYmVnaW5cIjtcblx0XHRcdFx0aSArPSBcImZvbnQtZmFjZVwiLmxlbmd0aDtcblx0XHRcdFx0Zm9udEZhY2VSdWxlID0gbmV3IENTU09NLkNTU0ZvbnRGYWNlUnVsZSgpO1xuXHRcdFx0XHRmb250RmFjZVJ1bGUuX19zdGFydHMgPSBpO1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGF0S2V5ZnJhbWVzUmVnRXhwLmxhc3RJbmRleCA9IGk7XG5cdFx0XHRcdHZhciBtYXRjaEtleWZyYW1lcyA9IGF0S2V5ZnJhbWVzUmVnRXhwLmV4ZWModG9rZW4pO1xuXHRcdFx0XHRpZiAobWF0Y2hLZXlmcmFtZXMgJiYgbWF0Y2hLZXlmcmFtZXMuaW5kZXggPT09IGkpIHtcblx0XHRcdFx0XHRzdGF0ZSA9IFwia2V5ZnJhbWVzUnVsZS1iZWdpblwiO1xuXHRcdFx0XHRcdGtleWZyYW1lc1J1bGUgPSBuZXcgQ1NTT00uQ1NTS2V5ZnJhbWVzUnVsZSgpO1xuXHRcdFx0XHRcdGtleWZyYW1lc1J1bGUuX19zdGFydHMgPSBpO1xuXHRcdFx0XHRcdGtleWZyYW1lc1J1bGUuX3ZlbmRvclByZWZpeCA9IG1hdGNoS2V5ZnJhbWVzWzFdOyAvLyBXaWxsIGNvbWUgb3V0IGFzIHVuZGVmaW5lZCBpZiBubyBwcmVmaXggd2FzIGZvdW5kXG5cdFx0XHRcdFx0aSArPSBtYXRjaEtleWZyYW1lc1swXS5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09IFwic2VsZWN0b3JcIikge1xuXHRcdFx0XHRcdHN0YXRlID0gXCJhdFJ1bGVcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnVmZmVyICs9IGNoYXJhY3Rlcjtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIntcIjpcblx0XHRcdGlmIChzdGF0ZSA9PT0gXCJzZWxlY3RvclwiIHx8IHN0YXRlID09PSBcImF0UnVsZVwiKSB7XG5cdFx0XHRcdHN0eWxlUnVsZS5zZWxlY3RvclRleHQgPSBidWZmZXIudHJpbSgpO1xuXHRcdFx0XHRzdHlsZVJ1bGUuc3R5bGUuX19zdGFydHMgPSBpO1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRzdGF0ZSA9IFwiYmVmb3JlLW5hbWVcIjtcblx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09IFwiYXRCbG9ja1wiKSB7XG5cdFx0XHRcdG1lZGlhUnVsZS5tZWRpYS5tZWRpYVRleHQgPSBidWZmZXIudHJpbSgpO1xuXHRcdFx0XHRjdXJyZW50U2NvcGUgPSBwYXJlbnRSdWxlID0gbWVkaWFSdWxlO1xuXHRcdFx0XHRtZWRpYVJ1bGUucGFyZW50U3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7XG5cdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdHN0YXRlID0gXCJiZWZvcmUtc2VsZWN0b3JcIjtcblx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09IFwiaG9zdFJ1bGUtYmVnaW5cIikge1xuXHRcdFx0XHRjdXJyZW50U2NvcGUgPSBwYXJlbnRSdWxlID0gaG9zdFJ1bGU7XG5cdFx0XHRcdGhvc3RSdWxlLnBhcmVudFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0O1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRzdGF0ZSA9IFwiYmVmb3JlLXNlbGVjdG9yXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHN0YXRlID09PSBcImZvbnRGYWNlUnVsZS1iZWdpblwiKSB7XG5cdFx0XHRcdGlmIChwYXJlbnRSdWxlKSB7XG5cdFx0XHRcdFx0Zm9udEZhY2VSdWxlLnBhcmVudFJ1bGUgPSBwYXJlbnRSdWxlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvbnRGYWNlUnVsZS5wYXJlbnRTdHlsZVNoZWV0ID0gc3R5bGVTaGVldDtcblx0XHRcdFx0c3R5bGVSdWxlID0gZm9udEZhY2VSdWxlO1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRzdGF0ZSA9IFwiYmVmb3JlLW5hbWVcIjtcblx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09IFwia2V5ZnJhbWVzUnVsZS1iZWdpblwiKSB7XG5cdFx0XHRcdGtleWZyYW1lc1J1bGUubmFtZSA9IGJ1ZmZlci50cmltKCk7XG5cdFx0XHRcdGlmIChwYXJlbnRSdWxlKSB7XG5cdFx0XHRcdFx0a2V5ZnJhbWVzUnVsZS5wYXJlbnRSdWxlID0gcGFyZW50UnVsZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRrZXlmcmFtZXNSdWxlLnBhcmVudFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0O1xuXHRcdFx0XHRjdXJyZW50U2NvcGUgPSBwYXJlbnRSdWxlID0ga2V5ZnJhbWVzUnVsZTtcblx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0c3RhdGUgPSBcImtleWZyYW1lUnVsZS1iZWdpblwiO1xuXHRcdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gXCJrZXlmcmFtZVJ1bGUtYmVnaW5cIikge1xuXHRcdFx0XHRzdHlsZVJ1bGUgPSBuZXcgQ1NTT00uQ1NTS2V5ZnJhbWVSdWxlKCk7XG5cdFx0XHRcdHN0eWxlUnVsZS5rZXlUZXh0ID0gYnVmZmVyLnRyaW0oKTtcblx0XHRcdFx0c3R5bGVSdWxlLl9fc3RhcnRzID0gaTtcblx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0c3RhdGUgPSBcImJlZm9yZS1uYW1lXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHN0YXRlID09PSBcImRvY3VtZW50UnVsZS1iZWdpblwiKSB7XG5cdFx0XHRcdC8vIEZJWE1FOiB3aGF0IGlmIHRoaXMgJ3snIGlzIGluIHRoZSB1cmwgdGV4dCBvZiB0aGUgbWF0Y2ggZnVuY3Rpb24/XG5cdFx0XHRcdGRvY3VtZW50UnVsZS5tYXRjaGVyLm1hdGNoZXJUZXh0ID0gYnVmZmVyLnRyaW0oKTtcblx0XHRcdFx0aWYgKHBhcmVudFJ1bGUpIHtcblx0XHRcdFx0XHRkb2N1bWVudFJ1bGUucGFyZW50UnVsZSA9IHBhcmVudFJ1bGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y3VycmVudFNjb3BlID0gcGFyZW50UnVsZSA9IGRvY3VtZW50UnVsZTtcblx0XHRcdFx0ZG9jdW1lbnRSdWxlLnBhcmVudFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0O1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRzdGF0ZSA9IFwiYmVmb3JlLXNlbGVjdG9yXCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCI6XCI6XG5cdFx0XHRpZiAoc3RhdGUgPT09IFwibmFtZVwiKSB7XG5cdFx0XHRcdG5hbWUgPSBidWZmZXIudHJpbSgpO1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRzdGF0ZSA9IFwiYmVmb3JlLXZhbHVlXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiKFwiOlxuXHRcdFx0aWYgKHN0YXRlID09PSAndmFsdWUnKSB7XG5cdFx0XHRcdC8vIGllIGNzcyBleHByZXNzaW9uIG1vZGVcblx0XHRcdFx0aWYgKGJ1ZmZlci50cmltKCkgPT09ICdleHByZXNzaW9uJykge1xuXHRcdFx0XHRcdHZhciBpbmZvID0gKG5ldyBDU1NPTS5DU1NWYWx1ZUV4cHJlc3Npb24odG9rZW4sIGkpKS5wYXJzZSgpO1xuXG5cdFx0XHRcdFx0aWYgKGluZm8uZXJyb3IpIHtcblx0XHRcdFx0XHRcdHBhcnNlRXJyb3IoaW5mby5lcnJvcik7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGJ1ZmZlciArPSBpbmZvLmV4cHJlc3Npb247XG5cdFx0XHRcdFx0XHRpID0gaW5mby5pZHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXRlID0gJ3ZhbHVlLXBhcmVudGhlc2lzJztcblx0XHRcdFx0XHQvL2Fsd2F5cyBlbnN1cmUgdGhpcyBpcyByZXNldCB0byAxIG9uIHRyYW5zaXRpb25cblx0XHRcdFx0XHQvL2Zyb20gdmFsdWUgdG8gdmFsdWUtcGFyZW50aGVzaXNcblx0XHRcdFx0XHR2YWx1ZVBhcmVudGhlc2lzRGVwdGggPSAxO1xuXHRcdFx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09ICd2YWx1ZS1wYXJlbnRoZXNpcycpIHtcblx0XHRcdFx0dmFsdWVQYXJlbnRoZXNpc0RlcHRoKys7XG5cdFx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiKVwiOlxuXHRcdFx0aWYgKHN0YXRlID09PSAndmFsdWUtcGFyZW50aGVzaXMnKSB7XG5cdFx0XHRcdHZhbHVlUGFyZW50aGVzaXNEZXB0aC0tO1xuXHRcdFx0XHRpZiAodmFsdWVQYXJlbnRoZXNpc0RlcHRoID09PSAwKSBzdGF0ZSA9ICd2YWx1ZSc7XG5cdFx0XHR9XG5cdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiIVwiOlxuXHRcdFx0aWYgKHN0YXRlID09PSBcInZhbHVlXCIgJiYgdG9rZW4uaW5kZXhPZihcIiFpbXBvcnRhbnRcIiwgaSkgPT09IGkpIHtcblx0XHRcdFx0cHJpb3JpdHkgPSBcImltcG9ydGFudFwiO1xuXHRcdFx0XHRpICs9IFwiaW1wb3J0YW50XCIubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVmZmVyICs9IGNoYXJhY3Rlcjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIjtcIjpcblx0XHRcdHN3aXRjaCAoc3RhdGUpIHtcblx0XHRcdFx0Y2FzZSBcInZhbHVlXCI6XG5cdFx0XHRcdFx0c3R5bGVSdWxlLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGJ1ZmZlci50cmltKCksIHByaW9yaXR5KTtcblx0XHRcdFx0XHRwcmlvcml0eSA9IFwiXCI7XG5cdFx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0XHRzdGF0ZSA9IFwiYmVmb3JlLW5hbWVcIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImF0UnVsZVwiOlxuXHRcdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdFx0c3RhdGUgPSBcImJlZm9yZS1zZWxlY3RvclwiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiaW1wb3J0UnVsZVwiOlxuXHRcdFx0XHRcdGltcG9ydFJ1bGUgPSBuZXcgQ1NTT00uQ1NTSW1wb3J0UnVsZSgpO1xuXHRcdFx0XHRcdGltcG9ydFJ1bGUucGFyZW50U3R5bGVTaGVldCA9IGltcG9ydFJ1bGUuc3R5bGVTaGVldC5wYXJlbnRTdHlsZVNoZWV0ID0gc3R5bGVTaGVldDtcblx0XHRcdFx0XHRpbXBvcnRSdWxlLmNzc1RleHQgPSBidWZmZXIgKyBjaGFyYWN0ZXI7XG5cdFx0XHRcdFx0c3R5bGVTaGVldC5jc3NSdWxlcy5wdXNoKGltcG9ydFJ1bGUpO1xuXHRcdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdFx0c3RhdGUgPSBcImJlZm9yZS1zZWxlY3RvclwiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJ9XCI6XG5cdFx0XHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0XHRcdGNhc2UgXCJ2YWx1ZVwiOlxuXHRcdFx0XHRcdHN0eWxlUnVsZS5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCBidWZmZXIudHJpbSgpLCBwcmlvcml0eSk7XG5cdFx0XHRcdFx0cHJpb3JpdHkgPSBcIlwiO1xuXHRcdFx0XHRcdC8qIGZhbGxzIHRocm91Z2ggKi9cblx0XHRcdFx0Y2FzZSBcImJlZm9yZS1uYW1lXCI6XG5cdFx0XHRcdGNhc2UgXCJuYW1lXCI6XG5cdFx0XHRcdFx0c3R5bGVSdWxlLl9fZW5kcyA9IGkgKyAxO1xuXHRcdFx0XHRcdGlmIChwYXJlbnRSdWxlKSB7XG5cdFx0XHRcdFx0XHRzdHlsZVJ1bGUucGFyZW50UnVsZSA9IHBhcmVudFJ1bGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN0eWxlUnVsZS5wYXJlbnRTdHlsZVNoZWV0ID0gc3R5bGVTaGVldDtcblx0XHRcdFx0XHRjdXJyZW50U2NvcGUuY3NzUnVsZXMucHVzaChzdHlsZVJ1bGUpO1xuXHRcdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTY29wZS5jb25zdHJ1Y3RvciA9PT0gQ1NTT00uQ1NTS2V5ZnJhbWVzUnVsZSkge1xuXHRcdFx0XHRcdFx0c3RhdGUgPSBcImtleWZyYW1lUnVsZS1iZWdpblwiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdGF0ZSA9IFwiYmVmb3JlLXNlbGVjdG9yXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwia2V5ZnJhbWVSdWxlLWJlZ2luXCI6XG5cdFx0XHRcdGNhc2UgXCJiZWZvcmUtc2VsZWN0b3JcIjpcblx0XHRcdFx0Y2FzZSBcInNlbGVjdG9yXCI6XG5cdFx0XHRcdFx0Ly8gRW5kIG9mIG1lZGlhL2RvY3VtZW50IHJ1bGUuXG5cdFx0XHRcdFx0aWYgKCFwYXJlbnRSdWxlKSB7XG5cdFx0XHRcdFx0XHRwYXJzZUVycm9yKFwiVW5leHBlY3RlZCB9XCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjdXJyZW50U2NvcGUuX19lbmRzID0gaSArIDE7XG5cdFx0XHRcdFx0Ly8gTmVzdGluZyBydWxlcyBhcmVuJ3Qgc3VwcG9ydGVkIHlldFxuXHRcdFx0XHRcdHN0eWxlU2hlZXQuY3NzUnVsZXMucHVzaChjdXJyZW50U2NvcGUpO1xuXHRcdFx0XHRcdGN1cnJlbnRTY29wZSA9IHN0eWxlU2hlZXQ7XG5cdFx0XHRcdFx0cGFyZW50UnVsZSA9IG51bGw7XG5cdFx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0XHRzdGF0ZSA9IFwiYmVmb3JlLXNlbGVjdG9yXCI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0XHRcdGNhc2UgXCJiZWZvcmUtc2VsZWN0b3JcIjpcblx0XHRcdFx0XHRzdGF0ZSA9IFwic2VsZWN0b3JcIjtcblx0XHRcdFx0XHRzdHlsZVJ1bGUgPSBuZXcgQ1NTT00uQ1NTU3R5bGVSdWxlKCk7XG5cdFx0XHRcdFx0c3R5bGVSdWxlLl9fc3RhcnRzID0gaTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImJlZm9yZS1uYW1lXCI6XG5cdFx0XHRcdFx0c3RhdGUgPSBcIm5hbWVcIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImJlZm9yZS12YWx1ZVwiOlxuXHRcdFx0XHRcdHN0YXRlID0gXCJ2YWx1ZVwiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiaW1wb3J0UnVsZS1iZWdpblwiOlxuXHRcdFx0XHRcdHN0YXRlID0gXCJpbXBvcnRSdWxlXCI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHN0eWxlU2hlZXQ7XG59O1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLnBhcnNlID0gQ1NTT00ucGFyc2U7XG4vLyBUaGUgZm9sbG93aW5nIG1vZHVsZXMgY2Fubm90IGJlIGluY2x1ZGVkIHNvb25lciBkdWUgdG8gdGhlIG11dHVhbCBkZXBlbmRlbmN5IHdpdGggcGFyc2UuanNcbkNTU09NLkNTU1N0eWxlU2hlZXQgPSByZXF1aXJlKFwiLi9DU1NTdHlsZVNoZWV0XCIpLkNTU1N0eWxlU2hlZXQ7XG5DU1NPTS5DU1NTdHlsZVJ1bGUgPSByZXF1aXJlKFwiLi9DU1NTdHlsZVJ1bGVcIikuQ1NTU3R5bGVSdWxlO1xuQ1NTT00uQ1NTSW1wb3J0UnVsZSA9IHJlcXVpcmUoXCIuL0NTU0ltcG9ydFJ1bGVcIikuQ1NTSW1wb3J0UnVsZTtcbkNTU09NLkNTU01lZGlhUnVsZSA9IHJlcXVpcmUoXCIuL0NTU01lZGlhUnVsZVwiKS5DU1NNZWRpYVJ1bGU7XG5DU1NPTS5DU1NGb250RmFjZVJ1bGUgPSByZXF1aXJlKFwiLi9DU1NGb250RmFjZVJ1bGVcIikuQ1NTRm9udEZhY2VSdWxlO1xuQ1NTT00uQ1NTSG9zdFJ1bGUgPSByZXF1aXJlKFwiLi9DU1NIb3N0UnVsZVwiKS5DU1NIb3N0UnVsZTtcbkNTU09NLkNTU1N0eWxlRGVjbGFyYXRpb24gPSByZXF1aXJlKCcuL0NTU1N0eWxlRGVjbGFyYXRpb24nKS5DU1NTdHlsZURlY2xhcmF0aW9uO1xuQ1NTT00uQ1NTS2V5ZnJhbWVSdWxlID0gcmVxdWlyZSgnLi9DU1NLZXlmcmFtZVJ1bGUnKS5DU1NLZXlmcmFtZVJ1bGU7XG5DU1NPTS5DU1NLZXlmcmFtZXNSdWxlID0gcmVxdWlyZSgnLi9DU1NLZXlmcmFtZXNSdWxlJykuQ1NTS2V5ZnJhbWVzUnVsZTtcbkNTU09NLkNTU1ZhbHVlRXhwcmVzc2lvbiA9IHJlcXVpcmUoJy4vQ1NTVmFsdWVFeHByZXNzaW9uJykuQ1NTVmFsdWVFeHByZXNzaW9uO1xuQ1NTT00uQ1NTRG9jdW1lbnRSdWxlID0gcmVxdWlyZSgnLi9DU1NEb2N1bWVudFJ1bGUnKS5DU1NEb2N1bWVudFJ1bGU7XG4vLy9Db21tb25KU1xuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogVGhpcyBpcyBhIGZvcmsgZnJvbSB0aGUgQ1NTIFN0eWxlIERlY2xhcmF0aW9uIHBhcnQgb2ZcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9OVi9DU1NPTVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQ1NTT00gPSByZXF1aXJlKCdjc3NvbScpO1xudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG52YXIgY2FtZWxUb0Rhc2hlZCA9IHJlcXVpcmUoJy4vcGFyc2VycycpLmNhbWVsVG9EYXNoZWQ7XG52YXIgZGFzaGVkVG9DYW1lbENhc2UgPSByZXF1aXJlKCcuL3BhcnNlcnMnKS5kYXNoZWRUb0NhbWVsQ2FzZTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1N0eWxlRGVjbGFyYXRpb25cbiAqL1xudmFyIENTU1N0eWxlRGVjbGFyYXRpb24gPSBmdW5jdGlvbiBDU1NTdHlsZURlY2xhcmF0aW9uKG9uQ2hhbmdlQ2FsbGJhY2spIHtcbiAgICB0aGlzLl92YWx1ZXMgPSB7fTtcbiAgICB0aGlzLl9pbXBvcnRhbnRzID0ge307XG4gICAgdGhpcy5fbGVuZ3RoID0gMDtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IG9uQ2hhbmdlQ2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm47IH07XG59O1xuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENTU1N0eWxlRGVjbGFyYXRpb24sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAgICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTU3R5bGVEZWNsYXJhdGlvbi1nZXRQcm9wZXJ0eVZhbHVlXG4gICAgICogQHJldHVybiB7c3RyaW5nfSB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGlmIGl0IGhhcyBiZWVuIGV4cGxpY2l0bHkgc2V0IGZvciB0aGlzIGRlY2xhcmF0aW9uIGJsb2NrLlxuICAgICAqIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGUgcHJvcGVydHkgaGFzIG5vdCBiZWVuIHNldC5cbiAgICAgKi9cbiAgICBnZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoIXRoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlc1tuYW1lXS50b1N0cmluZygpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwcmlvcml0eT1udWxsXSBcImltcG9ydGFudFwiIG9yIG51bGxcbiAgICAgKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxlL2Nzcy5odG1sI0NTUy1DU1NTdHlsZURlY2xhcmF0aW9uLXNldFByb3BlcnR5XG4gICAgICovXG4gICAgc2V0UHJvcGVydHk6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYW1lbF9jYXNlID0gZGFzaGVkVG9DYW1lbENhc2UobmFtZSk7XG4gICAgICAgIHRoaXNbY2FtZWxfY2FzZV0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5faW1wb3J0YW50c1tuYW1lXSA9IHByaW9yaXR5O1xuICAgIH0sXG4gICAgX3NldFByb3BlcnR5OiBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fdmFsdWVzW25hbWVdKSB7XG4gICAgICAgICAgICAvLyBQcm9wZXJ0eSBhbHJlYWR5IGV4aXN0LiBPdmVyd3JpdGUgaXQuXG4gICAgICAgICAgICB2YXIgaW5kZXggPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsIG5hbWUpO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXNbdGhpcy5fbGVuZ3RoXSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVuZ3RoKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOZXcgcHJvcGVydHkuXG4gICAgICAgICAgICB0aGlzW3RoaXMuX2xlbmd0aF0gPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmFsdWVzW25hbWVdID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2ltcG9ydGFudHNbbmFtZV0gPSBwcmlvcml0eTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5jc3NUZXh0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1N0eWxlRGVjbGFyYXRpb24tcmVtb3ZlUHJvcGVydHlcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaWYgaXQgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQgZm9yIHRoaXMgZGVjbGFyYXRpb24gYmxvY2suXG4gICAgICogUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZSBwcm9wZXJ0eSBoYXMgbm90IGJlZW4gc2V0IG9yIHRoZSBwcm9wZXJ0eSBuYW1lIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBrbm93biBDU1MgcHJvcGVydHkuXG4gICAgICovXG4gICAgcmVtb3ZlUHJvcGVydHk6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwcmV2VmFsdWUgPSB0aGlzLl92YWx1ZXNbbmFtZV07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl92YWx1ZXNbbmFtZV07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9pbXBvcnRhbnRzW25hbWVdO1xuXG4gICAgICAgIHZhciBpbmRleCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcywgbmFtZSk7XG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGF0J3Mgd2hhdCBXZWJLaXQgYW5kIE9wZXJhIGRvXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbCh0aGlzLCBpbmRleCwgMSk7XG5cbiAgICAgICAgLy8gVGhhdCdzIHdoYXQgRmlyZWZveCBkb2VzXG4gICAgICAgIC8vdGhpc1tpbmRleF0gPSBcIlwiXG5cbiAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5jc3NUZXh0KTtcbiAgICAgICAgcmV0dXJuIHByZXZWYWx1ZTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAgICovXG4gICAgZ2V0UHJvcGVydHlQcmlvcml0eTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltcG9ydGFudHNbbmFtZV0gfHwgXCJcIjtcbiAgICB9LFxuXG5cbiAgICBnZXRQcm9wZXJ0eUNTU1ZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vRklYTUVcbiAgICAgICAgcmV0dXJuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiAgIGVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBcImF1dG9cIlxuICAgICAqICAgZWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChcIm92ZXJmbG93LXhcIilcbiAgICAgKiAgIC0+IFwib3ZlcmZsb3dcIlxuICAgICAqL1xuICAgIGdldFByb3BlcnR5U2hvcnRoYW5kOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vRklYTUVcbiAgICAgICAgcmV0dXJuO1xuICAgIH0sXG5cbiAgICBpc1Byb3BlcnR5SW1wbGljaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9GSVhNRVxuICAgICAgICByZXR1cm47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqICAgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1N0eWxlRGVjbGFyYXRpb24taXRlbVxuICAgICAqL1xuICAgIGl0ZW06IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBpbmRleCA9IHBhcnNlSW50KGluZGV4LCAxMCk7XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5fbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXNbaW5kZXhdO1xuICAgIH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLCB7XG4gICAgY3NzVGV4dDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW107XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIHZhciBuYW1lO1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgdmFyIHByaW9yaXR5O1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuX2xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IHRoaXNbaV07XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG4gICAgICAgICAgICAgICAgcHJpb3JpdHkgPSB0aGlzLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHByaW9yaXR5ICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSA9IFwiICFcIiArIHByaW9yaXR5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2goW25hbWUsICc6ICcsIHZhbHVlLCBwcmlvcml0eSwgJzsnXS5qb2luKCcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydGllcy5qb2luKCcgJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRoaXMsIDAsIHRoaXMuX2xlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLl9pbXBvcnRhbnRzID0ge307XG4gICAgICAgICAgICB2YXIgZHVtbXlSdWxlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBkdW1teVJ1bGUgPSBDU1NPTS5wYXJzZSgnI2JvZ3VzeycgKyB2YWx1ZSArICd9JykuY3NzUnVsZXNbMF0uc3R5bGU7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgY3NzLCBqdXN0IHJldHVyblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBydWxlX2xlbmd0aCA9IGR1bW15UnVsZS5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgbmFtZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBydWxlX2xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGR1bW15UnVsZVtpXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5KGR1bW15UnVsZVtpXSwgZHVtbXlSdWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSksIGR1bW15UnVsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuY3NzVGV4dCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0sXG4gICAgcGFyZW50UnVsZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0sXG4gICAgbGVuZ3RoOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fbGVuZ3RoOyB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBkZWxldGVzIGluZGljZXMgaWYgdGhlIG5ldyBsZW5ndGggaXMgbGVzcyB0aGVuIHRoZSBjdXJyZW50XG4gICAgICAgICAqIGxlbmd0aC4gSWYgdGhlIG5ldyBsZW5ndGggaXMgbW9yZSwgaXQgZG9lcyBub3RoaW5nLCB0aGUgbmV3IGluZGljZXNcbiAgICAgICAgICogd2lsbCBiZSB1bmRlZmluZWQgdW50aWwgc2V0LlxuICAgICAgICAgKiovXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IHZhbHVlOyBpIDwgdGhpcy5fbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2xlbmd0aCA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9LFxuICAgICdmbG9hdCc6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmNzc0Zsb2F0OyB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jc3NGbG9hdCA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG59KTtcblxucmVxdWlyZSgnLi9wcm9wZXJ0aWVzJykoQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUpO1xuXG5leHBvcnRzLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBDU1NTdHlsZURlY2xhcmF0aW9uO1xuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogVGhlc2UgYXJlIGNvbW1vbmx5IHVzZWQgcGFyc2VycyBmb3IgQ1NTIFZhbHVlcyB0aGV5IHRha2UgYSBzdHJpbmcgKlxuICogdG8gcGFyc2UgYW5kIHJldHVybiBhIHN0cmluZyBhZnRlciBpdCdzIGJlZW4gY29udmVydGVkLCBpZiBuZWVkZWQgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLlRZUEVTID0ge1xuICAgIElOVEVHRVI6IDEsXG4gICAgTlVNQkVSOiAyLFxuICAgIExFTkdUSDogMyxcbiAgICBQRVJDRU5UOiA0LFxuICAgIFVSTDogNSxcbiAgICBDT0xPUjogNixcbiAgICBTVFJJTkc6IDcsXG4gICAgQU5HTEU6IDgsXG4gICAgS0VZV09SRDogOSxcbiAgICBOVUxMX09SX0VNUFRZX1NUUjogMTBcbn07XG5cbi8qanNsaW50IHJlZ2V4cDogdHJ1ZSovXG4vLyByb3VnaCByZWd1bGFyIGV4cHJlc3Npb25zXG52YXIgaW50ZWdlclJlZ0V4ID0gL15bXFwtK10/WzAtOV0rJC87XG52YXIgbnVtYmVyUmVnRXggPSAvXltcXC0rXT9bMC05XSpcXC5bMC05XSskLztcbnZhciBsZW5ndGhSZWdFeCA9IC9eKDB8W1xcLStdP1swLTldKlxcLj9bMC05XSsoaW58Y218ZW18bW18cHR8cGN8cHgpKSQvO1xudmFyIHBlcmNlbnRSZWdFeCA9IC9eW1xcLStdP1swLTldKlxcLj9bMC05XSslJC87XG52YXIgdXJsUmVnRXggPSAvXnVybFxcKFxccyooW15cXCldKilcXHMqXFwpJC87XG52YXIgc3RyaW5nUmVnRXggPSAvXihcXFwiW15cXFwiXSpcXFwifFxcJ1teXFwnXSpcXCcpJC87XG52YXIgY29sb3JSZWdFeDEgPSAvXiNbMC05YS1mQS1GXVswLTlhLWZBLUZdWzAtOWEtZkEtRl0oWzAtOWEtZkEtRl1bMC05YS1mQS1GXVswLTlhLWZBLUZdKT8kLztcbnZhciBjb2xvclJlZ0V4MiA9IC9ecmdiXFwoKFteXFwpXSopXFwpJC87XG52YXIgY29sb3JSZWdFeDMgPSAvXnJnYmFcXCgoW15cXCldKilcXCkkLztcbnZhciBhbmdsZVJlZ0V4ID0gL14oW1xcLStdP1swLTldKlxcLj9bMC05XSspKGRlZ3xncmFkfHJhZCkkLztcbi8qanNsaW50IHJlZ2V4cDogZmFsc2UqL1xuXG4vLyBUaGlzIHdpbGwgcmV0dXJuIG9uZSBvZiB0aGUgYWJvdmUgdHlwZXMgYmFzZWQgb24gdGhlIHBhc3NlZCBpbiBzdHJpbmdcbmV4cG9ydHMudmFsdWVUeXBlID0gZnVuY3Rpb24gdmFsdWVUeXBlKHZhbCkge1xuICAgIGlmICh2YWwgPT09ICcnIHx8IHZhbCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5UWVBFUy5OVUxMX09SX0VNUFRZX1NUUjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHZhbCA9IHZhbC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChpbnRlZ2VyUmVnRXgudGVzdCh2YWwpKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLlRZUEVTLklOVEVHRVI7XG4gICAgfVxuICAgIGlmIChudW1iZXJSZWdFeC50ZXN0KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVFlQRVMuTlVNQkVSO1xuICAgIH1cbiAgICBpZiAobGVuZ3RoUmVnRXgudGVzdCh2YWwpKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLlRZUEVTLkxFTkdUSDtcbiAgICB9XG4gICAgaWYgKHBlcmNlbnRSZWdFeC50ZXN0KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVFlQRVMuUEVSQ0VOVDtcbiAgICB9XG4gICAgaWYgKHVybFJlZ0V4LnRlc3QodmFsKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5UWVBFUy5VUkw7XG4gICAgfVxuICAgIGlmIChzdHJpbmdSZWdFeC50ZXN0KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVFlQRVMuU1RSSU5HO1xuICAgIH1cbiAgICBpZiAoYW5nbGVSZWdFeC50ZXN0KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVFlQRVMuQU5HTEU7XG4gICAgfVxuICAgIGlmIChjb2xvclJlZ0V4MS50ZXN0KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVFlQRVMuQ09MT1I7XG4gICAgfVxuICAgIHZhciByZXMgPSBjb2xvclJlZ0V4Mi5leGVjKHZhbCk7XG4gICAgdmFyIHBhcnRzO1xuICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgICAgcGFydHMgPSByZXNbMV0uc3BsaXQoL1xccyosXFxzKi8pO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5ldmVyeShwZXJjZW50UmVnRXgudGVzdC5iaW5kKHBlcmNlbnRSZWdFeCkpIHx8IHBhcnRzLmV2ZXJ5KGludGVnZXJSZWdFeC50ZXN0LmJpbmQoaW50ZWdlclJlZ0V4KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLlRZUEVTLkNPTE9SO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJlcyA9IGNvbG9yUmVnRXgzLmV4ZWModmFsKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICAgIHBhcnRzID0gcmVzWzFdLnNwbGl0KC9cXHMqLFxccyovKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gNCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydHMuc2xpY2UoMCwgMykuZXZlcnkocGVyY2VudFJlZ0V4LnRlc3QuYmluZChwZXJjZW50UmVnRXgpKSB8fCBwYXJ0cy5ldmVyeShpbnRlZ2VyUmVnRXgudGVzdC5iaW5kKGludGVnZXJSZWdFeCkpKSB7XG4gICAgICAgICAgICBpZiAobnVtYmVyUmVnRXgudGVzdChwYXJ0c1szXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5UWVBFUy5DT0xPUjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGNvdWxkIHN0aWxsIGJlIGEgY29sb3IsIG9uZSBvZiB0aGUgc3RhbmRhcmQga2V5d29yZCBjb2xvcnNcbiAgICB2YWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICBzd2l0Y2ggKHZhbCkge1xuICAgIGNhc2UgJ21hcm9vbic6XG4gICAgY2FzZSAncmVkJzpcbiAgICBjYXNlICdvcmFuZ2UnOlxuICAgIGNhc2UgJ3llbGxvdyc6XG4gICAgY2FzZSAnb2xpdmUnOlxuICAgIGNhc2UgJ3B1cnBsZSc6XG4gICAgY2FzZSAnZnVjaHNpYSc6XG4gICAgY2FzZSAnd2hpdGUnOlxuICAgIGNhc2UgJ2xpbWUnOlxuICAgIGNhc2UgJ2dyZWVuJzpcbiAgICBjYXNlICduYXZ5JzpcbiAgICBjYXNlICdibHVlJzpcbiAgICBjYXNlICdhcXVhJzpcbiAgICBjYXNlICd0ZWFsJzpcbiAgICBjYXNlICdibGFjayc6XG4gICAgY2FzZSAnc2lsdmVyJzpcbiAgICBjYXNlICdncmF5JzpcbiAgICAgICAgLy8gdGhlIGZvbGxvd2luZyBhcmUgZGVwcmVjYXRlZCBpbiBDU1MzXG4gICAgY2FzZSAnYWN0aXZlYm9yZGVyJzpcbiAgICBjYXNlICdhY3RpdmVjYXB0aW9uJzpcbiAgICBjYXNlICdhcHB3b3Jrc3BhY2UnOlxuICAgIGNhc2UgJ2JhY2tncm91bmQnOlxuICAgIGNhc2UgJ2J1dHRvbmZhY2UnOlxuICAgIGNhc2UgJ2J1dHRvbmhpZ2hsaWdodCc6XG4gICAgY2FzZSAnYnV0dG9uc2hhZG93JzpcbiAgICBjYXNlICdidXR0b250ZXh0JzpcbiAgICBjYXNlICdjYXB0aW9udGV4dCc6XG4gICAgY2FzZSAnZ3JheXRleHQnOlxuICAgIGNhc2UgJ2hpZ2hsaWdodCc6XG4gICAgY2FzZSAnaGlnaGxpZ2h0dGV4dCc6XG4gICAgY2FzZSAnaW5hY3RpdmVib3JkZXInOlxuICAgIGNhc2UgJ2luYWN0aXZlY2FwdGlvbic6XG4gICAgY2FzZSAnaW5hY3RpdmVjYXB0aW9udGV4dCc6XG4gICAgY2FzZSAnaW5mb2JhY2tncm91bmQnOlxuICAgIGNhc2UgJ2luZm90ZXh0JzpcbiAgICBjYXNlICdtZW51JzpcbiAgICBjYXNlICdtZW51dGV4dCc6XG4gICAgY2FzZSAnc2Nyb2xsYmFyJzpcbiAgICBjYXNlICd0aHJlZWRkYXJrc2hhZG93JzpcbiAgICBjYXNlICd0aHJlZWRmYWNlJzpcbiAgICBjYXNlICd0aHJlZWRoaWdobGlnaHQnOlxuICAgIGNhc2UgJ3RocmVlZGxpZ2h0c2hhZG93JzpcbiAgICBjYXNlICd0aHJlZWRzaGFkb3cnOlxuICAgIGNhc2UgJ3dpbmRvdyc6XG4gICAgY2FzZSAnd2luZG93ZnJhbWUnOlxuICAgIGNhc2UgJ3dpbmRvd3RleHQnOlxuICAgICAgICByZXR1cm4gZXhwb3J0cy5UWVBFUy5DT0xPUjtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZXhwb3J0cy5UWVBFUy5LRVlXT1JEO1xuICAgIH1cbn07XG5cbmV4cG9ydHMucGFyc2VJbnRlZ2VyID0gZnVuY3Rpb24gcGFyc2VJbnRlZ2VyKHZhbCkge1xuICAgIHZhciB0eXBlID0gZXhwb3J0cy52YWx1ZVR5cGUodmFsKTtcbiAgICBpZiAodHlwZSA9PT0gZXhwb3J0cy5UWVBFUy5OVUxMX09SX0VNUFRZX1NUUikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBpZiAodHlwZSAhPT0gZXhwb3J0cy5UWVBFUy5JTlRFR0VSKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcocGFyc2VJbnQodmFsLCAxMCkpO1xufTtcblxuZXhwb3J0cy5wYXJzZU51bWJlciA9IGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHZhbCkge1xuICAgIHZhciB0eXBlID0gZXhwb3J0cy52YWx1ZVR5cGUodmFsKTtcbiAgICBpZiAodHlwZSA9PT0gZXhwb3J0cy5UWVBFUy5OVUxMX09SX0VNUFRZX1NUUikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBpZiAodHlwZSAhPT0gZXhwb3J0cy5UWVBFUy5OVU1CRVIgJiYgdHlwZSAhPT0gZXhwb3J0cy5UWVBFUy5JTlRFR0VSKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcocGFyc2VGbG9hdCh2YWwpKTtcbn07XG5cbmV4cG9ydHMucGFyc2VMZW5ndGggPSBmdW5jdGlvbiBwYXJzZUxlbmd0aCh2YWwpIHtcbiAgICBpZiAodmFsID09PSAwIHx8IHZhbCA9PT0gJzAnKSB7XG4gICAgICAgIHJldHVybiAnMHB4JztcbiAgICB9XG4gICAgdmFyIHR5cGUgPSBleHBvcnRzLnZhbHVlVHlwZSh2YWwpO1xuICAgIGlmICh0eXBlID09PSBleHBvcnRzLlRZUEVTLk5VTExfT1JfRU1QVFlfU1RSKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmICh0eXBlICE9PSBleHBvcnRzLlRZUEVTLkxFTkdUSCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufTtcblxuZXhwb3J0cy5wYXJzZVBlcmNlbnQgPSBmdW5jdGlvbiBwYXJzZVBlcmNlbnQodmFsKSB7XG4gICAgaWYgKHZhbCA9PT0gMCB8fCB2YWwgPT09ICcwJykge1xuICAgICAgICByZXR1cm4gJzAlJztcbiAgICB9XG4gICAgdmFyIHR5cGUgPSBleHBvcnRzLnZhbHVlVHlwZSh2YWwpO1xuICAgIGlmICh0eXBlID09PSBleHBvcnRzLlRZUEVTLk5VTExfT1JfRU1QVFlfU1RSKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmICh0eXBlICE9PSBleHBvcnRzLlRZUEVTLlBFUkNFTlQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIGVpdGhlciBhIGxlbmd0aCBvciBhIHBlcmNlbnRcbmV4cG9ydHMucGFyc2VNZWFzdXJlbWVudCA9IGZ1bmN0aW9uIHBhcnNlTWVhc3VyZW1lbnQodmFsKSB7XG4gICAgdmFyIGxlbmd0aCA9IGV4cG9ydHMucGFyc2VMZW5ndGgodmFsKTtcbiAgICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIGV4cG9ydHMucGFyc2VQZXJjZW50KHZhbCk7XG59O1xuXG5leHBvcnRzLnBhcnNlVXJsID0gZnVuY3Rpb24gcGFyc2VVcmwodmFsKSB7XG4gICAgdmFyIHR5cGUgPSBleHBvcnRzLnZhbHVlVHlwZSh2YWwpO1xuICAgIGlmICh0eXBlID09PSBleHBvcnRzLlRZUEVTLk5VTExfT1JfRU1QVFlfU1RSKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHZhciByZXMgPSB1cmxSZWdFeC5leGVjKHZhbCk7XG4gICAgLy8gZG9lcyBpdCBtYXRjaCB0aGUgcmVnZXg/XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIHN0ciA9IHJlc1sxXTtcbiAgICAvLyBpZiBpdCBzdGFydHMgd2l0aCBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcywgZG9lcyBpdCBlbmQgd2l0aCB0aGUgc2FtZT9cbiAgICBpZiAoKHN0clswXSA9PT0gJ1wiJyB8fCBzdHJbMF0gPT09IFwiJ1wiKSAmJiBzdHJbMF0gIT09IHN0cltzdHIubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHN0clswXSA9PT0gJ1wiJyB8fCBzdHJbMF0gPT09IFwiJ1wiKSB7XG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3dpdGNoIChzdHJbaV0pIHtcbiAgICAgICAgY2FzZSAnKCc6XG4gICAgICAgIGNhc2UgJyknOlxuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgY2FzZSBcIidcIjpcbiAgICAgICAgY2FzZSAnXCInOlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAndXJsKCcgKyBzdHIgKyAnKSc7XG59O1xuXG5leHBvcnRzLnBhcnNlU3RyaW5nID0gZnVuY3Rpb24gcGFyc2VTdHJpbmcodmFsKSB7XG4gICAgdmFyIHR5cGUgPSBleHBvcnRzLnZhbHVlVHlwZSh2YWwpO1xuICAgIGlmICh0eXBlID09PSBleHBvcnRzLlRZUEVTLk5VTExfT1JfRU1QVFlfU1RSKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmICh0eXBlICE9PSBleHBvcnRzLlRZUEVTLlNUUklORykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgaTtcbiAgICBmb3IgKGkgPSAxOyBpIDwgdmFsLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBzd2l0Y2ggKHZhbFtpXSkge1xuICAgICAgICBjYXNlIHZhbFswXTpcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNhc2UgJ1xcXFwnOlxuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgd2hpbGUgKGkgPCB2YWwubGVuZ3RoIC0gMSAmJiAvWzAtOUEtRmEtZl0vLnRlc3QodmFsW2ldKSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpID49IHZhbC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbmV4cG9ydHMucGFyc2VDb2xvciA9IGZ1bmN0aW9uIHBhcnNlQ29sb3IodmFsKSB7XG4gICAgdmFyIHR5cGUgPSBleHBvcnRzLnZhbHVlVHlwZSh2YWwpO1xuICAgIGlmICh0eXBlID09PSBleHBvcnRzLlRZUEVTLk5VTExfT1JfRU1QVFlfU1RSKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHZhciByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSA9IDE7XG4gICAgdmFyIHBhcnRzO1xuICAgIHZhciByZXMgPSBjb2xvclJlZ0V4MS5leGVjKHZhbCk7XG4gICAgLy8gaXMgaXQgI2FhYSBvciAjYWJhYmFiXG4gICAgaWYgKHJlcykge1xuICAgICAgICB2YXIgaGV4ID0gdmFsLnN1YnN0cigxKTtcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIGhleCA9IGhleFswXSArIGhleFswXSArIGhleFsxXSArIGhleFsxXSArIGhleFsyXSArIGhleFsyXTtcbiAgICAgICAgfVxuICAgICAgICByZWQgPSBwYXJzZUludChoZXguc3Vic3RyKDAsIDIpLCAxNik7XG4gICAgICAgIGdyZWVuID0gcGFyc2VJbnQoaGV4LnN1YnN0cigyLCAyKSwgMTYpO1xuICAgICAgICBibHVlID0gcGFyc2VJbnQoaGV4LnN1YnN0cig0LCAyKSwgMTYpO1xuICAgICAgICByZXR1cm4gJ3JnYignICsgcmVkICsgJywgJyArIGdyZWVuICsgJywgJyArIGJsdWUgKyAnKSc7XG4gICAgfVxuXG4gICAgcmVzID0gY29sb3JSZWdFeDIuZXhlYyh2YWwpO1xuICAgIGlmIChyZXMpIHtcbiAgICAgICAgcGFydHMgPSByZXNbMV0uc3BsaXQoL1xccyosXFxzKi8pO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5ldmVyeShwZXJjZW50UmVnRXgudGVzdC5iaW5kKHBlcmNlbnRSZWdFeCkpKSB7XG4gICAgICAgICAgICByZWQgPSBNYXRoLmZsb29yKHBhcnNlRmxvYXQocGFydHNbMF0uc2xpY2UoMCwgLTEpKSAqIDI1NSAvIDEwMCk7XG4gICAgICAgICAgICBncmVlbiA9IE1hdGguZmxvb3IocGFyc2VGbG9hdChwYXJ0c1sxXS5zbGljZSgwLCAtMSkpICogMjU1IC8gMTAwKTtcbiAgICAgICAgICAgIGJsdWUgPSBNYXRoLmZsb29yKHBhcnNlRmxvYXQocGFydHNbMl0uc2xpY2UoMCwgLTEpKSAqIDI1NSAvIDEwMCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFydHMuZXZlcnkoaW50ZWdlclJlZ0V4LnRlc3QuYmluZChpbnRlZ2VyUmVnRXgpKSkge1xuICAgICAgICAgICAgcmVkID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTtcbiAgICAgICAgICAgIGdyZWVuID0gcGFyc2VJbnQocGFydHNbMV0sIDEwKTtcbiAgICAgICAgICAgIGJsdWUgPSBwYXJzZUludChwYXJ0c1syXSwgMTApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZWQgPSBNYXRoLm1pbigyNTUsIE1hdGgubWF4KDAsIHJlZCkpO1xuICAgICAgICBncmVlbiA9IE1hdGgubWluKDI1NSwgTWF0aC5tYXgoMCwgZ3JlZW4pKTtcbiAgICAgICAgYmx1ZSA9IE1hdGgubWluKDI1NSwgTWF0aC5tYXgoMCwgYmx1ZSkpO1xuICAgICAgICByZXR1cm4gJ3JnYignICsgcmVkICsgJywgJyArIGdyZWVuICsgJywgJyArIGJsdWUgKyAnKSc7XG4gICAgfVxuXG4gICAgcmVzID0gY29sb3JSZWdFeDMuZXhlYyh2YWwpO1xuICAgIGlmIChyZXMpIHtcbiAgICAgICAgcGFydHMgPSByZXNbMV0uc3BsaXQoL1xccyosXFxzKi8pO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5zbGljZSgwLCAzKS5ldmVyeShwZXJjZW50UmVnRXgudGVzdC5iaW5kKHBlcmNlbnRSZWdFeCkpKSB7XG4gICAgICAgICAgICByZWQgPSBNYXRoLmZsb29yKHBhcnNlRmxvYXQocGFydHNbMF0uc2xpY2UoMCwgLTEpKSAqIDI1NSAvIDEwMCk7XG4gICAgICAgICAgICBncmVlbiA9IE1hdGguZmxvb3IocGFyc2VGbG9hdChwYXJ0c1sxXS5zbGljZSgwLCAtMSkpICogMjU1IC8gMTAwKTtcbiAgICAgICAgICAgIGJsdWUgPSBNYXRoLmZsb29yKHBhcnNlRmxvYXQocGFydHNbMl0uc2xpY2UoMCwgLTEpKSAqIDI1NSAvIDEwMCk7XG4gICAgICAgICAgICBhbHBoYSA9IHBhcnNlRmxvYXQocGFydHNbM10pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcnRzLnNsaWNlKDAsIDMpLmV2ZXJ5KGludGVnZXJSZWdFeC50ZXN0LmJpbmQoaW50ZWdlclJlZ0V4KSkpIHtcbiAgICAgICAgICAgIHJlZCA9IHBhcnNlSW50KHBhcnRzWzBdLCAxMCk7XG4gICAgICAgICAgICBncmVlbiA9IHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7XG4gICAgICAgICAgICBibHVlID0gcGFyc2VJbnQocGFydHNbMl0sIDEwKTtcbiAgICAgICAgICAgIGFscGhhID0gcGFyc2VGbG9hdChwYXJ0c1szXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTihhbHBoYSkpIHtcbiAgICAgICAgICAgIGFscGhhID0gMTtcbiAgICAgICAgfVxuICAgICAgICByZWQgPSBNYXRoLm1pbigyNTUsIE1hdGgubWF4KDAsIHJlZCkpO1xuICAgICAgICBncmVlbiA9IE1hdGgubWluKDI1NSwgTWF0aC5tYXgoMCwgZ3JlZW4pKTtcbiAgICAgICAgYmx1ZSA9IE1hdGgubWluKDI1NSwgTWF0aC5tYXgoMCwgYmx1ZSkpO1xuICAgICAgICBhbHBoYSA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIGFscGhhKSk7XG4gICAgICAgIGlmIChhbHBoYSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuICdyZ2IoJyArIHJlZCArICcsICcgKyBncmVlbiArICcsICcgKyBibHVlICsgJyknO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAncmdiYSgnICsgcmVkICsgJywgJyArIGdyZWVuICsgJywgJyArIGJsdWUgKyAnLCAnICsgYWxwaGEgKyAnKSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IGV4cG9ydHMuVFlQRVMuQ09MT1IpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydHMucGFyc2VBbmdsZSA9IGZ1bmN0aW9uIHBhcnNlQW5nbGUodmFsKSB7XG4gICAgdmFyIHR5cGUgPSBleHBvcnRzLnZhbHVlVHlwZSh2YWwpO1xuICAgIGlmICh0eXBlID09PSBleHBvcnRzLlRZUEVTLk5VTExfT1JfRU1QVFlfU1RSKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmICh0eXBlICE9PSBleHBvcnRzLlRZUEVTLkFOR0xFKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciByZXMgPSBhbmdsZVJlZ0V4LmV4ZWModmFsKTtcbiAgICB2YXIgZmx0ID0gcGFyc2VGbG9hdChyZXNbMV0pO1xuICAgIGlmIChyZXNbMl0gPT09ICdyYWQnKSB7XG4gICAgICAgIGZsdCAqPSAxODAgLyBNYXRoLlBJO1xuICAgIH0gZWxzZSBpZiAocmVzWzJdID09PSAnZ3JhZCcpIHtcbiAgICAgICAgZmx0ICo9IDM2MCAvIDQwMDtcbiAgICB9XG5cbiAgICB3aGlsZSAoZmx0IDwgMCkge1xuICAgICAgICBmbHQgKz0gMzYwO1xuICAgIH1cbiAgICB3aGlsZSAoZmx0ID4gMzYwKSB7XG4gICAgICAgIGZsdCAtPSAzNjA7XG4gICAgfVxuICAgIHJldHVybiBmbHQgKyAnZGVnJztcbn07XG5cbmV4cG9ydHMucGFyc2VLZXl3b3JkID0gZnVuY3Rpb24gcGFyc2VLZXl3b3JkKHZhbCwgdmFsaWRfa2V5d29yZHMpIHtcbiAgICB2YXIgdHlwZSA9IGV4cG9ydHMudmFsdWVUeXBlKHZhbCk7XG4gICAgaWYgKHR5cGUgPT09IGV4cG9ydHMuVFlQRVMuTlVMTF9PUl9FTVBUWV9TVFIpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgaWYgKHR5cGUgIT09IGV4cG9ydHMuVFlQRVMuS0VZV09SRCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YWwgPSB2YWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCB2YWxpZF9rZXl3b3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodmFsaWRfa2V5d29yZHNbaV0udG9Mb3dlckNhc2UoKSA9PT0gdmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRfa2V5d29yZHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8vIHV0aWxpdHkgdG8gdHJhbnNsYXRlIGZyb20gYm9yZGVyLXdpZHRoIHRvIGJvcmRlcldpZHRoXG52YXIgZGFzaGVkVG9DYW1lbENhc2UgPSBmdW5jdGlvbiAoZGFzaGVkKSB7XG4gICAgdmFyIGk7XG4gICAgdmFyIGNhbWVsID0gJyc7XG4gICAgdmFyIG5leHRDYXAgPSBmYWxzZTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgZGFzaGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChkYXNoZWRbaV0gIT09ICctJykge1xuICAgICAgICAgICAgY2FtZWwgKz0gbmV4dENhcCA/IGRhc2hlZFtpXS50b1VwcGVyQ2FzZSgpIDogZGFzaGVkW2ldO1xuICAgICAgICAgICAgbmV4dENhcCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV4dENhcCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNhbWVsO1xufTtcbmV4cG9ydHMuZGFzaGVkVG9DYW1lbENhc2UgPSBkYXNoZWRUb0NhbWVsQ2FzZTtcblxudmFyIGlzX3NwYWNlID0gL1xccy87XG52YXIgb3BlbmluZ19kZWxpbWluYXRvcnMgPSBbJ1wiJywgJ1xcJycsICcoJ107XG52YXIgY2xvc2luZ19kZWxpbWluYXRvcnMgPSBbJ1wiJywgJ1xcJycsICcpJ107XG4vLyB0aGlzIHNwbGl0cyBvbiB3aGl0ZXNwYWNlLCBidXQga2VlcHMgcXVvdGVkIGFuZCBwYXJlbmVkIHBhcnRzIHRvZ2V0aGVyXG52YXIgZ2V0UGFydHMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgdmFyIGRlbGltaW5hdG9yX3N0YWNrID0gW107XG4gICAgdmFyIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgdmFyIGk7XG4gICAgdmFyIHBhcnRzID0gW107XG4gICAgdmFyIGN1cnJlbnRfcGFydCA9ICcnO1xuICAgIHZhciBvcGVuaW5nX2luZGV4O1xuICAgIHZhciBjbG9zaW5nX2luZGV4O1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBvcGVuaW5nX2luZGV4ID0gb3BlbmluZ19kZWxpbWluYXRvcnMuaW5kZXhPZihzdHJbaV0pO1xuICAgICAgICBjbG9zaW5nX2luZGV4ID0gY2xvc2luZ19kZWxpbWluYXRvcnMuaW5kZXhPZihzdHJbaV0pO1xuICAgICAgICBpZiAoaXNfc3BhY2UudGVzdChzdHJbaV0pKSB7XG4gICAgICAgICAgICBpZiAoZGVsaW1pbmF0b3Jfc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfcGFydCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaChjdXJyZW50X3BhcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50X3BhcnQgPSAnJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudF9wYXJ0ICs9IHN0cltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdHJbaV0gPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBjdXJyZW50X3BhcnQgKz0gc3RyW2ldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50X3BhcnQgKz0gc3RyW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjbG9zaW5nX2luZGV4ICE9PSAtMSAmJiBjbG9zaW5nX2luZGV4ID09PSBkZWxpbWluYXRvcl9zdGFja1tkZWxpbWluYXRvcl9zdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxpbWluYXRvcl9zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wZW5pbmdfaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGltaW5hdG9yX3N0YWNrLnB1c2gob3BlbmluZ19pbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjdXJyZW50X3BhcnQgIT09ICcnKSB7XG4gICAgICAgIHBhcnRzLnB1c2goY3VycmVudF9wYXJ0KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzO1xufTtcblxuLypcbiAqIHRoaXMgZWl0aGVyIHJldHVybnMgdW5kZWZpbmVkIG1lYW5pbmcgdGhhdCBpdCBpc24ndCB2YWxpZFxuICogb3IgcmV0dXJucyBhbiBvYmplY3Qgd2hlcmUgdGhlIGtleXMgYXJlIGRhc2hlZCBzaG9ydFxuICogaGFuZCBwcm9wZXJ0aWVzIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgdmFsdWVzIHRvIHNldFxuICogb24gdGhlbVxuICovXG5leHBvcnRzLnNob3J0aGFuZFBhcnNlciA9IGZ1bmN0aW9uIHBhcnNlKHYsIHNob3J0aGFuZF9mb3IpIHtcbiAgICB2YXIgb2JqID0ge307XG4gICAgdmFyIHR5cGUgPSBleHBvcnRzLnZhbHVlVHlwZSh2KTtcbiAgICBpZiAodHlwZSA9PT0gZXhwb3J0cy5UWVBFUy5OVUxMX09SX0VNUFRZX1NUUikge1xuICAgICAgICBPYmplY3Qua2V5cyhzaG9ydGhhbmRfZm9yKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgb2JqW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHYgPSB2LnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh2LnRvTG93ZXJDYXNlKCkgPT09ICdpbmhlcml0Jykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBwYXJ0cyA9IGdldFBhcnRzKHYpO1xuICAgIHZhciB2YWxpZCA9IHRydWU7XG4gICAgcGFydHMuZm9yRWFjaChmdW5jdGlvbiAocGFydCkge1xuICAgICAgICB2YXIgcGFydF92YWxpZCA9IGZhbHNlO1xuICAgICAgICBPYmplY3Qua2V5cyhzaG9ydGhhbmRfZm9yKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgaWYgKHNob3J0aGFuZF9mb3JbcHJvcGVydHldLmlzVmFsaWQocGFydCkpIHtcbiAgICAgICAgICAgICAgICBwYXJ0X3ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBvYmpbcHJvcGVydHldID0gcGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhbGlkID0gdmFsaWQgJiYgcGFydF92YWxpZDtcbiAgICB9KTtcbiAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnRzLnNob3J0aGFuZFNldHRlciA9IGZ1bmN0aW9uIChwcm9wZXJ0eSwgc2hvcnRoYW5kX2Zvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgICB2YXIgb2JqID0gZXhwb3J0cy5zaG9ydGhhbmRQYXJzZXIodiwgc2hvcnRoYW5kX2Zvcik7XG4gICAgICAgIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS5sb2coJ3Nob3J0aGFuZFNldHRlciBmb3I6JywgcHJvcGVydHksICdvYmo6Jywgb2JqKTtcbiAgICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChzdWJwcm9wKSB7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHN1YnByb3AgaXMgYW4gaW1wbGljaXQgcHJvcGVydHksIHRoaXMgd2lsbCBjbGVhclxuICAgICAgICAgICAgLy8gKml0cyogc3VicHJvcGVydGllc1hcbiAgICAgICAgICAgIHZhciBjYW1lbCA9IGRhc2hlZFRvQ2FtZWxDYXNlKHN1YnByb3ApO1xuICAgICAgICAgICAgdGhpc1tjYW1lbF0gPSBvYmpbc3VicHJvcF07XG4gICAgICAgICAgICAvLyBpbiBjYXNlIGl0IGdldHMgdHJhbnNsYXRlZCBpbnRvIHNvbWV0aGluZyBlbHNlICgwIC0+IDBweClcbiAgICAgICAgICAgIG9ialtzdWJwcm9wXSA9IHRoaXNbY2FtZWxdO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eShzdWJwcm9wKTtcbiAgICAgICAgICAgIC8vIGRvbid0IGFkZCBpbiBlbXB0eSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBpZiAob2JqW3N1YnByb3BdICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tzdWJwcm9wXSA9IG9ialtzdWJwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIE9iamVjdC5rZXlzKHNob3J0aGFuZF9mb3IpLmZvckVhY2goZnVuY3Rpb24gKHN1YnByb3ApIHtcbiAgICAgICAgICAgIGlmICghb2JqLmhhc093blByb3BlcnR5KHN1YnByb3ApKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eShzdWJwcm9wKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdmFsdWVzW3N1YnByb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgdmFsdWUgaXMgc29tZXRoaW5nIGxpa2UgJ25vbmUnIHRoYXQgcmVtb3ZlcyBhbGwgdmFsdWVzLFxuICAgICAgICAvLyBjaGVjayB0aGF0IHRoZSBnZW5lcmF0ZWQgb25lIGlzIG5vdCBlbXB0eSwgZmlyc3QgcmVtb3ZlIHRoZSBwcm9wZXJ0eVxuICAgICAgICAvLyBpZiBpdCBhbHJlYWR5IGV4aXN0cywgdGhlbiBjYWxsIHRoZSBzaG9ydGhhbmRHZXR0ZXIsIGlmIGl0J3MgYW4gZW1wdHlcbiAgICAgICAgLy8gc3RyaW5nLCBkb24ndCBzZXQgdGhlIHByb3BlcnR5XG4gICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgICB2YXIgY2FsY3VsYXRlZCA9IGV4cG9ydHMuc2hvcnRoYW5kR2V0dGVyKHByb3BlcnR5LCBzaG9ydGhhbmRfZm9yKS5jYWxsKHRoaXMpO1xuICAgICAgICBpZiAoY2FsY3VsYXRlZCAhPT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5LCBjYWxjdWxhdGVkKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG5leHBvcnRzLnNob3J0aGFuZEdldHRlciA9IGZ1bmN0aW9uIChwcm9wZXJ0eSwgc2hvcnRoYW5kX2Zvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl92YWx1ZXNbcHJvcGVydHldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzaG9ydGhhbmRfZm9yKS5tYXAoZnVuY3Rpb24gKHN1YnByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoc3VicHJvcCk7XG4gICAgICAgIH0sIHRoaXMpLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gJyc7XG4gICAgICAgIH0pLmpvaW4oJyAnKTtcbiAgICB9O1xufTtcblxuLy8gaXNWYWxpZCgpezEsNH0gfCBpbmhlcml0XG4vLyBpZiBvbmUsIGl0IGFwcGxpZXMgdG8gYWxsXG4vLyBpZiB0d28sIHRoZSBmaXJzdCBhcHBsaWVzIHRvIHRoZSB0b3AgYW5kIGJvdHRvbSwgYW5kIHRoZSBzZWNvbmQgdG8gbGVmdCBhbmQgcmlnaHRcbi8vIGlmIHRocmVlLCB0aGUgZmlyc3QgYXBwbGllcyB0byB0aGUgdG9wLCB0aGUgc2Vjb25kIHRvIGxlZnQgYW5kIHJpZ2h0LCB0aGUgdGhpcmQgYm90dG9tXG4vLyBpZiBmb3VyLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRcbmV4cG9ydHMuaW1wbGljaXRTZXR0ZXIgPSBmdW5jdGlvbiAocHJvcGVydHlfYmVmb3JlLCBwcm9wZXJ0eV9hZnRlciwgaXNWYWxpZCwgcGFyc2VyKSB7XG4gICAgcHJvcGVydHlfYWZ0ZXIgPSBwcm9wZXJ0eV9hZnRlciB8fCAnJztcbiAgICBpZiAocHJvcGVydHlfYWZ0ZXIgIT09ICcnKSB7XG4gICAgICAgIHByb3BlcnR5X2FmdGVyID0gJy0nICsgcHJvcGVydHlfYWZ0ZXI7XG4gICAgfVxuICAgIHZhciBwYXJ0X25hbWVzID0gW1widG9wXCIsXCJyaWdodFwiLFwiYm90dG9tXCIsXCJsZWZ0XCJdO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHYgPSB2LnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFydHM7XG4gICAgICAgIGlmICh2LnRvTG93ZXJDYXNlKCkgPT09ICdpbmhlcml0JyB8fCB2ID09PSAnJykge1xuICAgICAgICAgICAgcGFydHMgPSBbdl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0cyA9IGdldFBhcnRzKHYpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPCAxIHx8IHBhcnRzLmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhcnRzLmV2ZXJ5KGlzVmFsaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFydHMgPSBwYXJ0cy5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIocGFydCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eV9iZWZvcmUgKyBwcm9wZXJ0eV9hZnRlciwgcGFydHMuam9pbignICcpKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcGFydHNbMV0gPSBwYXJ0c1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBwYXJ0c1syXSA9IHBhcnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHBhcnRzWzNdID0gcGFydHNbMV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydHlfYmVmb3JlICsgXCItXCIgKyBwYXJ0X25hbWVzW2ldICsgcHJvcGVydHlfYWZ0ZXI7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChwYXJ0c1tpXSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXNbcHJvcGVydHldID0gcGFydHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfTtcbn07XG5cbi8vXG4vLyAgQ29tcGFuaW9uIHRvIGltcGxpY2l0U2V0dGVyLCBidXQgZm9yIHRoZSBpbmRpdmlkdWFsIHBhcnRzLlxuLy8gIFRoaXMgc2V0cyB0aGUgaW5kaXZpZHVhbCB2YWx1ZSwgYW5kIGNoZWNrcyB0byBzZWUgaWYgYWxsIGZvdXJcbi8vICBzdWItcGFydHMgYXJlIHNldC4gIElmIHNvLCBpdCBzZXRzIHRoZSBzaG9ydGhhbmQgdmVyc2lvbiBhbmQgcmVtb3Zlc1xuLy8gIHRoZSBpbmRpdmlkdWFsIHBhcnRzIGZyb20gdGhlIGNzc1RleHQuXG4vL1xuZXhwb3J0cy5zdWJJbXBsaWNpdFNldHRlciA9IGZ1bmN0aW9uIChwcmVmaXgsIHBhcnQsIGlzVmFsaWQsIHBhcnNlcikge1xuICAgIHZhciBwcm9wZXJ0eSA9IHByZWZpeCArICctJyArIHBhcnQ7XG4gICAgdmFyIHN1YnBhcnRzID0gW3ByZWZpeCtcIi10b3BcIiwgcHJlZml4K1wiLXJpZ2h0XCIsIHByZWZpeCtcIi1ib3R0b21cIiwgcHJlZml4K1wiLWxlZnRcIl07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdiA9IHYudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHYgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNWYWxpZCh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB2ID0gcGFyc2VyKHYpO1xuICAgICAgICB0aGlzLl9zZXRQcm9wZXJ0eShwcm9wZXJ0eSx2KTtcbiAgICAgICAgdmFyIHBhcnRzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWVzW3N1YnBhcnRzW2ldXSA9PSBudWxsIHx8IHRoaXMuX3ZhbHVlc1tzdWJwYXJ0c1tpXV0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKHRoaXMuX3ZhbHVlc1tzdWJwYXJ0c1tpXV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5KHN1YnBhcnRzW2ldKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZXNbc3VicGFydHNbaV1dID0gcGFydHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zZXRQcm9wZXJ0eShwcmVmaXgscGFydHMuam9pbihcIiBcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2O1xuICAgIH07XG59O1xuXG5cbnZhciBjYW1lbF90b19kYXNoZWQgPSAvW0EtWl0vZztcbi8qanNsaW50IHJlZ2V4cDogdHJ1ZSovXG52YXIgZmlyc3Rfc2VnbWVudCA9IC9eXFwoW15cXC1dXFwpLS87XG4vKmpzbGludCByZWdleHA6IGZhbHNlKi9cbnZhciB2ZW5kb3JfcHJlZml4ZXMgPSBbJ28nLCAnbW96JywgJ21zJywgJ3dlYmtpdCddO1xuZXhwb3J0cy5jYW1lbFRvRGFzaGVkID0gZnVuY3Rpb24gKGNhbWVsX2Nhc2UpIHtcbiAgICB2YXIgbWF0Y2g7XG4gICAgdmFyIGRhc2hlZCA9IGNhbWVsX2Nhc2UucmVwbGFjZShjYW1lbF90b19kYXNoZWQsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xuICAgIG1hdGNoID0gZGFzaGVkLm1hdGNoKGZpcnN0X3NlZ21lbnQpO1xuICAgIGlmIChtYXRjaCAmJiB2ZW5kb3JfcHJlZml4ZXMuaW5kZXhPZihtYXRjaFsxXSkgIT09IC0xKSB7XG4gICAgICAgIGRhc2hlZCA9ICctJyArIGRhc2hlZDtcbiAgICB9XG4gICAgcmV0dXJuIGRhc2hlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIGF1dG9nZW5lcmF0ZWRcblxuLypcbiAqXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTMlByb3BlcnRpZXNcbiAqL1xuXG52YXIgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAgPSByZXF1aXJlKFwiLi9wYXJzZXJzLmpzXCIpO1xuXG52YXIgYWxpZ25tZW50QmFzZWxpbmVfZXhwb3J0X2RlZmluaXRpb247XG5hbGlnbm1lbnRCYXNlbGluZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdhbGlnbm1lbnQtYmFzZWxpbmUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYWxpZ25tZW50LWJhc2VsaW5lJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBhemltdXRoX2V4cG9ydF9kZWZpbml0aW9uO1xuYXppbXV0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHZhciB2YWx1ZVR5cGUgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUodik7XG5cbiAgICBpZiAodmFsdWVUeXBlID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5BTkdMRSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFByb3BlcnR5KCdhemltdXRoJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VBbmdsZSh2KSk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlVHlwZSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCkge1xuICAgICAgdmFyIGtleXdvcmRzID0gdi50b0xvd2VyQ2FzZSgpLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgICAgdmFyIGhhc0JlaGluZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoa2V5d29yZHMubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBiZWhpbmRJbmRleCA9IGtleXdvcmRzLmluZGV4T2YoJ2JlaGluZCcpO1xuICAgICAgaGFzQmVoaW5kID0gYmVoaW5kSW5kZXggIT09IC0xO1xuXG4gICAgICBpZiAoa2V5d29yZHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmICghaGFzQmVoaW5kKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5d29yZHMuc3BsaWNlKGJlaGluZEluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleXdvcmRzWzBdID09PSAnbGVmdHdhcmRzJyB8fCBrZXl3b3Jkc1swXSA9PT0gJ3JpZ2h0d2FyZHMnKSB7XG4gICAgICAgIGlmIChoYXNCZWhpbmQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCBrZXl3b3Jkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXl3b3Jkc1swXSA9PT0gJ2JlaGluZCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldFByb3BlcnR5KCdhemltdXRoJywgJzE4MGRlZycpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGVnO1xuXG4gICAgICBzd2l0Y2ggKGtleXdvcmRzWzBdKSB7XG4gICAgICAgIGNhc2UgJ2xlZnQtc2lkZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3NldFByb3BlcnR5KCdhemltdXRoJywgJzI3MGRlZycpO1xuXG4gICAgICAgIGNhc2UgJ2Zhci1sZWZ0JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCAoaGFzQmVoaW5kID8gMjQwIDogMzAwKSArICdkZWcnKTtcblxuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCAoaGFzQmVoaW5kID8gMjIwIDogMzIwKSArICdkZWcnKTtcblxuICAgICAgICBjYXNlICdjZW50ZXItbGVmdCc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3NldFByb3BlcnR5KCdhemltdXRoJywgKGhhc0JlaGluZCA/IDIwMCA6IDM0MCkgKyAnZGVnJyk7XG5cbiAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCAoaGFzQmVoaW5kID8gMTgwIDogMCkgKyAnZGVnJyk7XG5cbiAgICAgICAgY2FzZSAnY2VudGVyLXJpZ2h0JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCAoaGFzQmVoaW5kID8gMTYwIDogMjApICsgJ2RlZycpO1xuXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCAoaGFzQmVoaW5kID8gMTQwIDogNDApICsgJ2RlZycpO1xuXG4gICAgICAgIGNhc2UgJ2Zhci1yaWdodCc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3NldFByb3BlcnR5KCdhemltdXRoJywgKGhhc0JlaGluZCA/IDEyMCA6IDYwKSArICdkZWcnKTtcblxuICAgICAgICBjYXNlICdyaWdodC1zaWRlJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCAnOTBkZWcnKTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2F6aW11dGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJhY2tncm91bmRDb2xvcl9leHBvcnRfaXNWYWxpZCwgYmFja2dyb3VuZENvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xuXG52YXIgYmFja2dyb3VuZENvbG9yX2xvY2FsX3Zhcl9wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgdmFyIHBhcnNlZCA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3Iodik7XG5cbiAgaWYgKHBhcnNlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGlmIChleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUodikgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLktFWVdPUkQgJiYgKHYudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zcGFyZW50JyB8fCB2LnRvTG93ZXJDYXNlKCkgPT09ICdpbmhlcml0JykpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5iYWNrZ3JvdW5kQ29sb3JfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGJhY2tncm91bmRDb2xvcl9sb2NhbF92YXJfcGFyc2UodikgIT09IHVuZGVmaW5lZDtcbn07XG5cbmJhY2tncm91bmRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHZhciBwYXJzZWQgPSBiYWNrZ3JvdW5kQ29sb3JfbG9jYWxfdmFyX3BhcnNlKHYpO1xuXG4gICAgaWYgKHBhcnNlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtY29sb3InLCBwYXJzZWQpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBiYWNrZ3JvdW5kSW1hZ2VfZXhwb3J0X2lzVmFsaWQsIGJhY2tncm91bmRJbWFnZV9leHBvcnRfZGVmaW5pdGlvbjtcblxudmFyIGJhY2tncm91bmRJbWFnZV9sb2NhbF92YXJfcGFyc2UgPSBmdW5jdGlvbiBwYXJzZSh2KSB7XG4gIHZhciBwYXJzZWQgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZVVybCh2KTtcblxuICBpZiAocGFyc2VkICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgaWYgKGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnZhbHVlVHlwZSh2KSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCAmJiAodi50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScgfHwgdi50b0xvd2VyQ2FzZSgpID09PSAnaW5oZXJpdCcpKSB7XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuYmFja2dyb3VuZEltYWdlX2V4cG9ydF9pc1ZhbGlkID0gZnVuY3Rpb24gaXNWYWxpZCh2KSB7XG4gIHJldHVybiBiYWNrZ3JvdW5kSW1hZ2VfbG9jYWxfdmFyX3BhcnNlKHYpICE9PSB1bmRlZmluZWQ7XG59O1xuXG5iYWNrZ3JvdW5kSW1hZ2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1pbWFnZScsIGJhY2tncm91bmRJbWFnZV9sb2NhbF92YXJfcGFyc2UodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLWltYWdlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBiYWNrZ3JvdW5kUmVwZWF0X2V4cG9ydF9pc1ZhbGlkLCBiYWNrZ3JvdW5kUmVwZWF0X2V4cG9ydF9kZWZpbml0aW9uO1xuXG52YXIgYmFja2dyb3VuZFJlcGVhdF9sb2NhbF92YXJfcGFyc2UgPSBmdW5jdGlvbiBwYXJzZSh2KSB7XG4gIGlmIChleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUodikgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLktFWVdPUkQgJiYgKHYudG9Mb3dlckNhc2UoKSA9PT0gJ3JlcGVhdCcgfHwgdi50b0xvd2VyQ2FzZSgpID09PSAncmVwZWF0LXgnIHx8IHYudG9Mb3dlckNhc2UoKSA9PT0gJ3JlcGVhdC15JyB8fCB2LnRvTG93ZXJDYXNlKCkgPT09ICduby1yZXBlYXQnIHx8IHYudG9Mb3dlckNhc2UoKSA9PT0gJ2luaGVyaXQnKSkge1xuICAgIHJldHVybiB2O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmJhY2tncm91bmRSZXBlYXRfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGJhY2tncm91bmRSZXBlYXRfbG9jYWxfdmFyX3BhcnNlKHYpICE9PSB1bmRlZmluZWQ7XG59O1xuXG5iYWNrZ3JvdW5kUmVwZWF0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtcmVwZWF0JywgYmFja2dyb3VuZFJlcGVhdF9sb2NhbF92YXJfcGFyc2UodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLXJlcGVhdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYmFja2dyb3VuZEF0dGFjaG1lbnRfZXhwb3J0X2lzVmFsaWQsIGJhY2tncm91bmRBdHRhY2htZW50X2V4cG9ydF9kZWZpbml0aW9uO1xuXG52YXIgYmFja2dyb3VuZEF0dGFjaG1lbnRfbG9jYWxfdmFyX2lzVmFsaWQgPSBiYWNrZ3JvdW5kQXR0YWNobWVudF9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQodikge1xuICByZXR1cm4gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAudmFsdWVUeXBlKHYpID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5LRVlXT1JEICYmICh2LnRvTG93ZXJDYXNlKCkgPT09ICdzY3JvbGwnIHx8IHYudG9Mb3dlckNhc2UoKSA9PT0gJ2ZpeGVkJyB8fCB2LnRvTG93ZXJDYXNlKCkgPT09ICdpbmhlcml0Jyk7XG59O1xuXG5iYWNrZ3JvdW5kQXR0YWNobWVudF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIGlmICghYmFja2dyb3VuZEF0dGFjaG1lbnRfbG9jYWxfdmFyX2lzVmFsaWQodikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1hdHRhY2htZW50Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtYXR0YWNobWVudCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYmFja2dyb3VuZFBvc2l0aW9uX2V4cG9ydF9pc1ZhbGlkLCBiYWNrZ3JvdW5kUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb247XG52YXIgYmFja2dyb3VuZFBvc2l0aW9uX2xvY2FsX3Zhcl92YWxpZF9rZXl3b3JkcyA9IFsndG9wJywgJ2NlbnRlcicsICdib3R0b20nLCAnbGVmdCcsICdyaWdodCddO1xuXG52YXIgYmFja2dyb3VuZFBvc2l0aW9uX2xvY2FsX3Zhcl9wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgaWYgKHYgPT09ICcnIHx8IHYgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIHBhcnRzID0gdi5zcGxpdCgvXFxzKy8pO1xuXG4gIGlmIChwYXJ0cy5sZW5ndGggPiAyIHx8IHBhcnRzLmxlbmd0aCA8IDEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIHR5cGVzID0gW107XG4gIHBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnQsIGluZGV4KSB7XG4gICAgdHlwZXNbaW5kZXhdID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAudmFsdWVUeXBlKHBhcnQpO1xuICB9KTtcblxuICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHR5cGVzWzBdID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5MRU5HVEggfHwgdHlwZXNbMF0gPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLlBFUkNFTlQpIHtcbiAgICAgIHJldHVybiB2O1xuICAgIH1cblxuICAgIGlmICh0eXBlc1swXSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCkge1xuICAgICAgaWYgKGJhY2tncm91bmRQb3NpdGlvbl9sb2NhbF92YXJfdmFsaWRfa2V5d29yZHMuaW5kZXhPZih2LnRvTG93ZXJDYXNlKCkpICE9PSAtMSB8fCB2LnRvTG93ZXJDYXNlKCkgPT09ICdpbmhlcml0Jykge1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCh0eXBlc1swXSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuTEVOR1RIIHx8IHR5cGVzWzBdID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5QRVJDRU5UKSAmJiAodHlwZXNbMV0gPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLkxFTkdUSCB8fCB0eXBlc1sxXSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuUEVSQ0VOVCkpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIGlmICh0eXBlc1swXSAhPT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCB8fCB0eXBlc1sxXSAhPT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoYmFja2dyb3VuZFBvc2l0aW9uX2xvY2FsX3Zhcl92YWxpZF9rZXl3b3Jkcy5pbmRleE9mKHBhcnRzWzBdKSAhPT0gLTEgJiYgYmFja2dyb3VuZFBvc2l0aW9uX2xvY2FsX3Zhcl92YWxpZF9rZXl3b3Jkcy5pbmRleE9mKHBhcnRzWzFdKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5iYWNrZ3JvdW5kUG9zaXRpb25fZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGJhY2tncm91bmRQb3NpdGlvbl9sb2NhbF92YXJfcGFyc2UodikgIT09IHVuZGVmaW5lZDtcbn07XG5cbmJhY2tncm91bmRQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXBvc2l0aW9uJywgYmFja2dyb3VuZFBvc2l0aW9uX2xvY2FsX3Zhcl9wYXJzZSh2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtcG9zaXRpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJhY2tncm91bmRfZXhwb3J0X2lzVmFsaWQsIGJhY2tncm91bmRfZXhwb3J0X2RlZmluaXRpb247XG52YXIgYmFja2dyb3VuZF9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvciA9IHtcbiAgJ2JhY2tncm91bmQtY29sb3InOiB7XG4gICAgaXNWYWxpZDogYmFja2dyb3VuZENvbG9yX2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGJhY2tncm91bmRDb2xvcl9leHBvcnRfZGVmaW5pdGlvblxuICB9LFxuICAnYmFja2dyb3VuZC1pbWFnZSc6IHtcbiAgICBpc1ZhbGlkOiBiYWNrZ3JvdW5kSW1hZ2VfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYmFja2dyb3VuZEltYWdlX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdiYWNrZ3JvdW5kLXJlcGVhdCc6IHtcbiAgICBpc1ZhbGlkOiBiYWNrZ3JvdW5kUmVwZWF0X2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGJhY2tncm91bmRSZXBlYXRfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2JhY2tncm91bmQtYXR0YWNobWVudCc6IHtcbiAgICBpc1ZhbGlkOiBiYWNrZ3JvdW5kQXR0YWNobWVudF9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBiYWNrZ3JvdW5kQXR0YWNobWVudF9leHBvcnRfZGVmaW5pdGlvblxuICB9LFxuICAnYmFja2dyb3VuZC1wb3NpdGlvbic6IHtcbiAgICBpc1ZhbGlkOiBiYWNrZ3JvdW5kUG9zaXRpb25fZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYmFja2dyb3VuZFBvc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uXG4gIH1cbn07XG5cbmJhY2tncm91bmRfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFBhcnNlcih2LCBiYWNrZ3JvdW5kX2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSAhPT0gdW5kZWZpbmVkO1xufTtcblxuYmFja2dyb3VuZF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRTZXR0ZXIoJ2JhY2tncm91bmQnLCBiYWNrZ3JvdW5kX2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSxcbiAgZ2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRHZXR0ZXIoJ2JhY2tncm91bmQnLCBiYWNrZ3JvdW5kX2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJhY2tncm91bmRDbGlwX2V4cG9ydF9kZWZpbml0aW9uO1xuYmFja2dyb3VuZENsaXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1jbGlwJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY2xpcCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYmFja2dyb3VuZE9yaWdpbl9leHBvcnRfZGVmaW5pdGlvbjtcbmJhY2tncm91bmRPcmlnaW5fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1vcmlnaW4nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1vcmlnaW4nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJhY2tncm91bmRQb3NpdGlvblhfZXhwb3J0X2RlZmluaXRpb247XG5iYWNrZ3JvdW5kUG9zaXRpb25YX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtcG9zaXRpb24teCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJhY2tncm91bmRQb3NpdGlvbllfZXhwb3J0X2RlZmluaXRpb247XG5iYWNrZ3JvdW5kUG9zaXRpb25ZX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtcG9zaXRpb24teScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJhY2tncm91bmRSZXBlYXRYX2V4cG9ydF9kZWZpbml0aW9uO1xuYmFja2dyb3VuZFJlcGVhdFhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1yZXBlYXQteCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLXJlcGVhdC14Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBiYWNrZ3JvdW5kUmVwZWF0WV9leHBvcnRfZGVmaW5pdGlvbjtcbmJhY2tncm91bmRSZXBlYXRZX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtcmVwZWF0LXknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1yZXBlYXQteScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYmFja2dyb3VuZFNpemVfZXhwb3J0X2RlZmluaXRpb247XG5iYWNrZ3JvdW5kU2l6ZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXNpemUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1zaXplJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBiYXNlbGluZVNoaWZ0X2V4cG9ydF9kZWZpbml0aW9uO1xuYmFzZWxpbmVTaGlmdF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdiYXNlbGluZS1zaGlmdCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdiYXNlbGluZS1zaGlmdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyV2lkdGhfZXhwb3J0X2lzVmFsaWQsIGJvcmRlcldpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xuLy8gdGhlIHZhbGlkIGJvcmRlci13aWR0aHM6XG52YXIgYm9yZGVyV2lkdGhfbG9jYWxfdmFyX3dpZHRocyA9IFsndGhpbicsICdtZWRpdW0nLCAndGhpY2snXTtcblxuYm9yZGVyV2lkdGhfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBwYXJzZSh2KSB7XG4gIHZhciBsZW5ndGggPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZUxlbmd0aCh2KTtcblxuICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodiA9PT0gJycpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHYgPSB2LnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKGJvcmRlcldpZHRoX2xvY2FsX3Zhcl93aWR0aHMuaW5kZXhPZih2KSA9PT0gLTEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBib3JkZXJXaWR0aF9sb2NhbF92YXJfaXNWYWxpZCA9IGJvcmRlcldpZHRoX2V4cG9ydF9pc1ZhbGlkO1xuXG52YXIgYm9yZGVyV2lkdGhfbG9jYWxfdmFyX3BhcnNlciA9IGZ1bmN0aW9uICh2KSB7XG4gIHZhciBsZW5ndGggPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZUxlbmd0aCh2KTtcblxuICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgaWYgKGJvcmRlcldpZHRoX2xvY2FsX3Zhcl9pc1ZhbGlkKHYpKSB7XG4gICAgcmV0dXJuIHYudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5ib3JkZXJXaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5pbXBsaWNpdFNldHRlcignYm9yZGVyJywgJ3dpZHRoJywgYm9yZGVyV2lkdGhfbG9jYWxfdmFyX2lzVmFsaWQsIGJvcmRlcldpZHRoX2xvY2FsX3Zhcl9wYXJzZXIpLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlclN0eWxlX2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbi8vIHRoZSB2YWxpZCBib3JkZXItc3R5bGVzOlxudmFyIGJvcmRlclN0eWxlX2xvY2FsX3Zhcl9zdHlsZXMgPSBbJ25vbmUnLCAnaGlkZGVuJywgJ2RvdHRlZCcsICdkYXNoZWQnLCAnc29saWQnLCAnZG91YmxlJywgJ2dyb292ZScsICdyaWRnZScsICdpbnNldCcsICdvdXRzZXQnXTtcblxuYm9yZGVyU3R5bGVfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBwYXJzZSh2KSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgKHYgPT09ICcnIHx8IGJvcmRlclN0eWxlX2xvY2FsX3Zhcl9zdHlsZXMuaW5kZXhPZih2KSAhPT0gLTEpO1xufTtcblxudmFyIGJvcmRlclN0eWxlX2xvY2FsX3Zhcl9pc1ZhbGlkID0gYm9yZGVyU3R5bGVfZXhwb3J0X2lzVmFsaWQ7XG5cbnZhciBib3JkZXJTdHlsZV9sb2NhbF92YXJfcGFyc2VyID0gZnVuY3Rpb24gKHYpIHtcbiAgaWYgKGJvcmRlclN0eWxlX2xvY2FsX3Zhcl9pc1ZhbGlkKHYpKSB7XG4gICAgcmV0dXJuIHYudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5ib3JkZXJTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5pbXBsaWNpdFNldHRlcignYm9yZGVyJywgJ3N0eWxlJywgYm9yZGVyU3R5bGVfbG9jYWxfdmFyX2lzVmFsaWQsIGJvcmRlclN0eWxlX2xvY2FsX3Zhcl9wYXJzZXIpLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlckNvbG9yX2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJDb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcblxuYm9yZGVyQ29sb3JfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBwYXJzZSh2KSB7XG4gIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdiA9PT0gJycgfHwgdi50b0xvd2VyQ2FzZSgpID09PSAndHJhbnNwYXJlbnQnIHx8IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnZhbHVlVHlwZSh2KSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuQ09MT1I7XG59O1xuXG52YXIgYm9yZGVyQ29sb3JfbG9jYWxfdmFyX2lzVmFsaWQgPSBib3JkZXJDb2xvcl9leHBvcnRfaXNWYWxpZDtcblxudmFyIGJvcmRlckNvbG9yX2xvY2FsX3Zhcl9wYXJzZXIgPSBmdW5jdGlvbiAodikge1xuICBpZiAoYm9yZGVyQ29sb3JfbG9jYWxfdmFyX2lzVmFsaWQodikpIHtcbiAgICByZXR1cm4gdi50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmJvcmRlckNvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLmltcGxpY2l0U2V0dGVyKCdib3JkZXInLCAnY29sb3InLCBib3JkZXJDb2xvcl9sb2NhbF92YXJfaXNWYWxpZCwgYm9yZGVyQ29sb3JfbG9jYWxfdmFyX3BhcnNlciksXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyX2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJfZXhwb3J0X2RlZmluaXRpb247XG52YXIgYm9yZGVyX2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yID0ge1xuICAnYm9yZGVyLXdpZHRoJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlcldpZHRoX2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGJvcmRlcldpZHRoX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdib3JkZXItc3R5bGUnOiB7XG4gICAgaXNWYWxpZDogYm9yZGVyU3R5bGVfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyU3R5bGVfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2JvcmRlci1jb2xvcic6IHtcbiAgICBpc1ZhbGlkOiBib3JkZXJDb2xvcl9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBib3JkZXJDb2xvcl9leHBvcnRfZGVmaW5pdGlvblxuICB9XG59O1xuXG52YXIgYm9yZGVyX2xvY2FsX3Zhcl9pc1ZhbGlkID0gZnVuY3Rpb24gaXNWYWxpZCh2KSB7XG4gIHJldHVybiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRQYXJzZXIodiwgYm9yZGVyX2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSAhPT0gdW5kZWZpbmVkO1xufTtcblxuYm9yZGVyX2V4cG9ydF9pc1ZhbGlkID0gYm9yZGVyX2xvY2FsX3Zhcl9pc1ZhbGlkO1xuXG52YXIgYm9yZGVyX2xvY2FsX3Zhcl9wYXJzZXIgPSBmdW5jdGlvbiAodikge1xuICBpZiAodi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgIHYgPSAnJztcbiAgfVxuXG4gIGlmIChib3JkZXJfbG9jYWxfdmFyX2lzVmFsaWQodikpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG52YXIgYm9yZGVyX2xvY2FsX3Zhcl9teVNob3J0aGFuZFNldHRlciA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFNldHRlcignYm9yZGVyJywgYm9yZGVyX2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKTtcbnZhciBib3JkZXJfbG9jYWxfdmFyX215U2hvcnRoYW5kR2V0dGVyID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc2hvcnRoYW5kR2V0dGVyKCdib3JkZXInLCBib3JkZXJfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpO1xuYm9yZGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKHYudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScpIHtcbiAgICAgIHYgPSAnJztcbiAgICB9XG5cbiAgICBib3JkZXJfbG9jYWxfdmFyX215U2hvcnRoYW5kU2V0dGVyLmNhbGwodGhpcywgdik7XG4gICAgdGhpcy5yZW1vdmVQcm9wZXJ0eSgnYm9yZGVyLXRvcCcpO1xuICAgIHRoaXMucmVtb3ZlUHJvcGVydHkoJ2JvcmRlci1sZWZ0Jyk7XG4gICAgdGhpcy5yZW1vdmVQcm9wZXJ0eSgnYm9yZGVyLXJpZ2h0Jyk7XG4gICAgdGhpcy5yZW1vdmVQcm9wZXJ0eSgnYm9yZGVyLWJvdHRvbScpO1xuICAgIHRoaXMuX3ZhbHVlc1snYm9yZGVyLXRvcCddID0gdGhpcy5fdmFsdWVzLmJvcmRlcjtcbiAgICB0aGlzLl92YWx1ZXNbJ2JvcmRlci1sZWZ0J10gPSB0aGlzLl92YWx1ZXMuYm9yZGVyO1xuICAgIHRoaXMuX3ZhbHVlc1snYm9yZGVyLXJpZ2h0J10gPSB0aGlzLl92YWx1ZXMuYm9yZGVyO1xuICAgIHRoaXMuX3ZhbHVlc1snYm9yZGVyLWJvdHRvbSddID0gdGhpcy5fdmFsdWVzLmJvcmRlcjtcbiAgfSxcbiAgZ2V0OiBib3JkZXJfbG9jYWxfdmFyX215U2hvcnRoYW5kR2V0dGVyLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyQm90dG9tV2lkdGhfZXhwb3J0X2lzVmFsaWQsIGJvcmRlckJvdHRvbVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xudmFyIGJvcmRlckJvdHRvbVdpZHRoX2xvY2FsX3Zhcl9pc1ZhbGlkID0gYm9yZGVyQm90dG9tV2lkdGhfZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJXaWR0aF9leHBvcnRfaXNWYWxpZDtcbmJvcmRlckJvdHRvbVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKGJvcmRlckJvdHRvbVdpZHRoX2xvY2FsX3Zhcl9pc1ZhbGlkKHYpKSB7XG4gICAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWJvdHRvbS13aWR0aCcsIHYpO1xuICAgIH1cbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWJvdHRvbS13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyQm90dG9tU3R5bGVfZXhwb3J0X2lzVmFsaWQsIGJvcmRlckJvdHRvbVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xuYm9yZGVyQm90dG9tU3R5bGVfZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJTdHlsZV9leHBvcnRfaXNWYWxpZDtcbmJvcmRlckJvdHRvbVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKGJvcmRlclN0eWxlX2V4cG9ydF9pc1ZhbGlkKHYpKSB7XG4gICAgICBpZiAodi50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScpIHtcbiAgICAgICAgdiA9ICcnO1xuICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5KCdib3JkZXItYm90dG9tLXdpZHRoJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItYm90dG9tLXN0eWxlJywgdik7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItYm90dG9tLXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJCb3R0b21Db2xvcl9leHBvcnRfaXNWYWxpZCwgYm9yZGVyQm90dG9tQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG52YXIgYm9yZGVyQm90dG9tQ29sb3JfbG9jYWxfdmFyX2lzVmFsaWQgPSBib3JkZXJCb3R0b21Db2xvcl9leHBvcnRfaXNWYWxpZCA9IGJvcmRlckNvbG9yX2V4cG9ydF9pc1ZhbGlkO1xuYm9yZGVyQm90dG9tQ29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoYm9yZGVyQm90dG9tQ29sb3JfbG9jYWxfdmFyX2lzVmFsaWQodikpIHtcbiAgICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItYm90dG9tLWNvbG9yJywgdik7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItYm90dG9tLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJCb3R0b21fZXhwb3J0X2lzVmFsaWQsIGJvcmRlckJvdHRvbV9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBib3JkZXJCb3R0b21fbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IgPSB7XG4gICdib3JkZXItYm90dG9tLXdpZHRoJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlckJvdHRvbVdpZHRoX2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGJvcmRlckJvdHRvbVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdib3JkZXItYm90dG9tLXN0eWxlJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlckJvdHRvbVN0eWxlX2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGJvcmRlckJvdHRvbVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdib3JkZXItYm90dG9tLWNvbG9yJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlckJvdHRvbUNvbG9yX2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGJvcmRlckJvdHRvbUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uXG4gIH1cbn07XG5cbnZhciBib3JkZXJCb3R0b21fbG9jYWxfdmFyX2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFBhcnNlcih2LCBib3JkZXJCb3R0b21fbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpICE9PSB1bmRlZmluZWQ7XG59O1xuXG5ib3JkZXJCb3R0b21fZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJCb3R0b21fbG9jYWxfdmFyX2lzVmFsaWQ7XG5ib3JkZXJCb3R0b21fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc2hvcnRoYW5kU2V0dGVyKCdib3JkZXItYm90dG9tJywgYm9yZGVyQm90dG9tX2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSxcbiAgZ2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRHZXR0ZXIoJ2JvcmRlci1ib3R0b20nLCBib3JkZXJCb3R0b21fbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyQm90dG9tTGVmdFJhZGl1c19leHBvcnRfZGVmaW5pdGlvbjtcbmJvcmRlckJvdHRvbUxlZnRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJCb3R0b21SaWdodFJhZGl1c19leHBvcnRfZGVmaW5pdGlvbjtcbmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJDb2xsYXBzZV9leHBvcnRfaXNWYWxpZCwgYm9yZGVyQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb247XG5cbnZhciBib3JkZXJDb2xsYXBzZV9sb2NhbF92YXJfcGFyc2UgPSBmdW5jdGlvbiBwYXJzZSh2KSB7XG4gIGlmIChleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUodikgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLktFWVdPUkQgJiYgKHYudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbGxhcHNlJyB8fCB2LnRvTG93ZXJDYXNlKCkgPT09ICdzZXBhcmF0ZScgfHwgdi50b0xvd2VyQ2FzZSgpID09PSAnaW5oZXJpdCcpKSB7XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuYm9yZGVyQ29sbGFwc2VfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGJvcmRlckNvbGxhcHNlX2xvY2FsX3Zhcl9wYXJzZSh2KSAhPT0gdW5kZWZpbmVkO1xufTtcblxuYm9yZGVyQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWNvbGxhcHNlJywgYm9yZGVyQ29sbGFwc2VfbG9jYWxfdmFyX3BhcnNlKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWNvbGxhcHNlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJJbWFnZV9leHBvcnRfZGVmaW5pdGlvbjtcbmJvcmRlckltYWdlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1pbWFnZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItaW1hZ2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlckltYWdlT3V0c2V0X2V4cG9ydF9kZWZpbml0aW9uO1xuYm9yZGVySW1hZ2VPdXRzZXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWltYWdlLW91dHNldCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItaW1hZ2Utb3V0c2V0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJJbWFnZVJlcGVhdF9leHBvcnRfZGVmaW5pdGlvbjtcbmJvcmRlckltYWdlUmVwZWF0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1pbWFnZS1yZXBlYXQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWltYWdlLXJlcGVhdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVySW1hZ2VTbGljZV9leHBvcnRfZGVmaW5pdGlvbjtcbmJvcmRlckltYWdlU2xpY2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWltYWdlLXNsaWNlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1pbWFnZS1zbGljZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVySW1hZ2VTb3VyY2VfZXhwb3J0X2RlZmluaXRpb247XG5ib3JkZXJJbWFnZVNvdXJjZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItaW1hZ2Utc291cmNlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1pbWFnZS1zb3VyY2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlckltYWdlV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG5ib3JkZXJJbWFnZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1pbWFnZS13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItaW1hZ2Utd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlckxlZnRXaWR0aF9leHBvcnRfaXNWYWxpZCwgYm9yZGVyTGVmdFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xudmFyIGJvcmRlckxlZnRXaWR0aF9sb2NhbF92YXJfaXNWYWxpZCA9IGJvcmRlckxlZnRXaWR0aF9leHBvcnRfaXNWYWxpZCA9IGJvcmRlcldpZHRoX2V4cG9ydF9pc1ZhbGlkO1xuYm9yZGVyTGVmdFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKGJvcmRlckxlZnRXaWR0aF9sb2NhbF92YXJfaXNWYWxpZCh2KSkge1xuICAgICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1sZWZ0LXdpZHRoJywgdik7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItbGVmdC13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyTGVmdFN0eWxlX2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJMZWZ0U3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG5ib3JkZXJMZWZ0U3R5bGVfZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJTdHlsZV9leHBvcnRfaXNWYWxpZDtcbmJvcmRlckxlZnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIGlmIChib3JkZXJTdHlsZV9leHBvcnRfaXNWYWxpZCh2KSkge1xuICAgICAgaWYgKHYudG9Mb3dlckNhc2UoKSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHYgPSAnJztcbiAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eSgnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1sZWZ0LXN0eWxlJywgdik7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItbGVmdC1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyTGVmdENvbG9yX2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJMZWZ0Q29sb3JfZXhwb3J0X2RlZmluaXRpb247XG52YXIgYm9yZGVyTGVmdENvbG9yX2xvY2FsX3Zhcl9pc1ZhbGlkID0gYm9yZGVyTGVmdENvbG9yX2V4cG9ydF9pc1ZhbGlkID0gYm9yZGVyQ29sb3JfZXhwb3J0X2lzVmFsaWQ7XG5ib3JkZXJMZWZ0Q29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoYm9yZGVyTGVmdENvbG9yX2xvY2FsX3Zhcl9pc1ZhbGlkKHYpKSB7XG4gICAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWxlZnQtY29sb3InLCB2KTtcbiAgICB9XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1sZWZ0LWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJMZWZ0X2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJMZWZ0X2V4cG9ydF9kZWZpbml0aW9uO1xudmFyIGJvcmRlckxlZnRfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IgPSB7XG4gICdib3JkZXItbGVmdC13aWR0aCc6IHtcbiAgICBpc1ZhbGlkOiBib3JkZXJMZWZ0V2lkdGhfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyTGVmdFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdib3JkZXItbGVmdC1zdHlsZSc6IHtcbiAgICBpc1ZhbGlkOiBib3JkZXJMZWZ0U3R5bGVfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyTGVmdFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdib3JkZXItbGVmdC1jb2xvcic6IHtcbiAgICBpc1ZhbGlkOiBib3JkZXJMZWZ0Q29sb3JfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyTGVmdENvbG9yX2V4cG9ydF9kZWZpbml0aW9uXG4gIH1cbn07XG5cbnZhciBib3JkZXJMZWZ0X2xvY2FsX3Zhcl9pc1ZhbGlkID0gZnVuY3Rpb24gaXNWYWxpZCh2KSB7XG4gIHJldHVybiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRQYXJzZXIodiwgYm9yZGVyTGVmdF9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvcikgIT09IHVuZGVmaW5lZDtcbn07XG5cbmJvcmRlckxlZnRfZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJMZWZ0X2xvY2FsX3Zhcl9pc1ZhbGlkO1xuYm9yZGVyTGVmdF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRTZXR0ZXIoJ2JvcmRlci1sZWZ0JywgYm9yZGVyTGVmdF9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvciksXG4gIGdldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc2hvcnRoYW5kR2V0dGVyKCdib3JkZXItbGVmdCcsIGJvcmRlckxlZnRfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyUmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uO1xuYm9yZGVyUmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1yYWRpdXMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLXJhZGl1cycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyUmlnaHRXaWR0aF9leHBvcnRfaXNWYWxpZCwgYm9yZGVyUmlnaHRXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBib3JkZXJSaWdodFdpZHRoX2xvY2FsX3Zhcl9pc1ZhbGlkID0gYm9yZGVyUmlnaHRXaWR0aF9leHBvcnRfaXNWYWxpZCA9IGJvcmRlcldpZHRoX2V4cG9ydF9pc1ZhbGlkO1xuYm9yZGVyUmlnaHRXaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIGlmIChib3JkZXJSaWdodFdpZHRoX2xvY2FsX3Zhcl9pc1ZhbGlkKHYpKSB7XG4gICAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLXJpZ2h0LXdpZHRoJywgdik7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItcmlnaHQtd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlclJpZ2h0U3R5bGVfZXhwb3J0X2lzVmFsaWQsIGJvcmRlclJpZ2h0U3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG5ib3JkZXJSaWdodFN0eWxlX2V4cG9ydF9pc1ZhbGlkID0gYm9yZGVyU3R5bGVfZXhwb3J0X2lzVmFsaWQ7XG5ib3JkZXJSaWdodFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKGJvcmRlclN0eWxlX2V4cG9ydF9pc1ZhbGlkKHYpKSB7XG4gICAgICBpZiAodi50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScpIHtcbiAgICAgICAgdiA9ICcnO1xuICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5KCdib3JkZXItcmlnaHQtd2lkdGgnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1yaWdodC1zdHlsZScsIHYpO1xuICAgIH1cbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLXJpZ2h0LXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJSaWdodENvbG9yX2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJSaWdodENvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xudmFyIGJvcmRlclJpZ2h0Q29sb3JfbG9jYWxfdmFyX2lzVmFsaWQgPSBib3JkZXJSaWdodENvbG9yX2V4cG9ydF9pc1ZhbGlkID0gYm9yZGVyQ29sb3JfZXhwb3J0X2lzVmFsaWQ7XG5ib3JkZXJSaWdodENvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKGJvcmRlclJpZ2h0Q29sb3JfbG9jYWxfdmFyX2lzVmFsaWQodikpIHtcbiAgICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItcmlnaHQtY29sb3InLCB2KTtcbiAgICB9XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1yaWdodC1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyUmlnaHRfZXhwb3J0X2lzVmFsaWQsIGJvcmRlclJpZ2h0X2V4cG9ydF9kZWZpbml0aW9uO1xudmFyIGJvcmRlclJpZ2h0X2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yID0ge1xuICAnYm9yZGVyLXJpZ2h0LXdpZHRoJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlclJpZ2h0V2lkdGhfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyUmlnaHRXaWR0aF9leHBvcnRfZGVmaW5pdGlvblxuICB9LFxuICAnYm9yZGVyLXJpZ2h0LXN0eWxlJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlclJpZ2h0U3R5bGVfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyUmlnaHRTdHlsZV9leHBvcnRfZGVmaW5pdGlvblxuICB9LFxuICAnYm9yZGVyLXJpZ2h0LWNvbG9yJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlclJpZ2h0Q29sb3JfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyUmlnaHRDb2xvcl9leHBvcnRfZGVmaW5pdGlvblxuICB9XG59O1xuXG52YXIgYm9yZGVyUmlnaHRfbG9jYWxfdmFyX2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFBhcnNlcih2LCBib3JkZXJSaWdodF9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvcikgIT09IHVuZGVmaW5lZDtcbn07XG5cbmJvcmRlclJpZ2h0X2V4cG9ydF9pc1ZhbGlkID0gYm9yZGVyUmlnaHRfbG9jYWxfdmFyX2lzVmFsaWQ7XG5ib3JkZXJSaWdodF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRTZXR0ZXIoJ2JvcmRlci1yaWdodCcsIGJvcmRlclJpZ2h0X2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSxcbiAgZ2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRHZXR0ZXIoJ2JvcmRlci1yaWdodCcsIGJvcmRlclJpZ2h0X2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlclNwYWNpbmdfZXhwb3J0X2lzVmFsaWQsIGJvcmRlclNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb247XG5cbi8vIDxsZW5ndGg+IDxsZW5ndGg+PyB8IGluaGVyaXRcbi8vIGlmIG9uZSwgaXQgYXBwbGllcyB0byBib3RoIGhvcml6b250YWwgYW5kIHZlcmljYWwgc3BhY2luZ1xuLy8gaWYgdHdvLCB0aGUgZmlyc3QgYXBwbGllcyB0byB0aGUgaG9yaXpvbnRhbCBhbmQgdGhlIHNlY29uZCBhcHBsaWVzIHRvIHZlcnRpY2FsIHNwYWNpbmdcbnZhciBib3JkZXJTcGFjaW5nX2xvY2FsX3Zhcl9wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgaWYgKHYgPT09ICcnIHx8IHYgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHYudG9Mb3dlckNhc2UoKSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICB2YXIgcGFydHMgPSB2LnNwbGl0KC9cXHMrLyk7XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMSAmJiBwYXJ0cy5sZW5ndGggIT09IDIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcGFydHMuZm9yRWFjaChmdW5jdGlvbiAocGFydCkge1xuICAgIGlmIChleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUocGFydCkgIT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLkxFTkdUSCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdjtcbn07XG5cbmJvcmRlclNwYWNpbmdfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGJvcmRlclNwYWNpbmdfbG9jYWxfdmFyX3BhcnNlKHYpICE9PSB1bmRlZmluZWQ7XG59O1xuXG5ib3JkZXJTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1zcGFjaW5nJywgYm9yZGVyU3BhY2luZ19sb2NhbF92YXJfcGFyc2UodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItc3BhY2luZycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyVG9wV2lkdGhfZXhwb3J0X2lzVmFsaWQsIGJvcmRlclRvcFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xuYm9yZGVyVG9wV2lkdGhfZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJXaWR0aF9leHBvcnRfaXNWYWxpZDtcbmJvcmRlclRvcFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKGJvcmRlcldpZHRoX2V4cG9ydF9pc1ZhbGlkKHYpKSB7XG4gICAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLXRvcC13aWR0aCcsIHYpO1xuICAgIH1cbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLXRvcC13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyVG9wU3R5bGVfZXhwb3J0X2lzVmFsaWQsIGJvcmRlclRvcFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xuYm9yZGVyVG9wU3R5bGVfZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJTdHlsZV9leHBvcnRfaXNWYWxpZDtcbmJvcmRlclRvcFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKGJvcmRlclN0eWxlX2V4cG9ydF9pc1ZhbGlkKHYpKSB7XG4gICAgICBpZiAodi50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScpIHtcbiAgICAgICAgdiA9ICcnO1xuICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5KCdib3JkZXItdG9wLXdpZHRoJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItdG9wLXN0eWxlJywgdik7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItdG9wLXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJUb3BDb2xvcl9leHBvcnRfaXNWYWxpZCwgYm9yZGVyVG9wQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG52YXIgYm9yZGVyVG9wQ29sb3JfbG9jYWxfdmFyX2lzVmFsaWQgPSBib3JkZXJUb3BDb2xvcl9leHBvcnRfaXNWYWxpZCA9IGJvcmRlckNvbG9yX2V4cG9ydF9pc1ZhbGlkO1xuYm9yZGVyVG9wQ29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoYm9yZGVyVG9wQ29sb3JfbG9jYWxfdmFyX2lzVmFsaWQodikpIHtcbiAgICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItdG9wLWNvbG9yJywgdik7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItdG9wLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJUb3BfZXhwb3J0X2lzVmFsaWQsIGJvcmRlclRvcF9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBib3JkZXJUb3BfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IgPSB7XG4gICdib3JkZXItdG9wLXdpZHRoJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlclRvcFdpZHRoX2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGJvcmRlclRvcFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdib3JkZXItdG9wLXN0eWxlJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlclRvcFN0eWxlX2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGJvcmRlclRvcFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdib3JkZXItdG9wLWNvbG9yJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlclRvcENvbG9yX2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGJvcmRlclRvcENvbG9yX2V4cG9ydF9kZWZpbml0aW9uXG4gIH1cbn07XG5cbmJvcmRlclRvcF9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uICh2KSB7XG4gIHJldHVybiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRQYXJzZXIodiwgYm9yZGVyVG9wX2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSAhPT0gdW5kZWZpbmVkO1xufTtcblxuYm9yZGVyVG9wX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFNldHRlcignYm9yZGVyLXRvcCcsIGJvcmRlclRvcF9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvciksXG4gIGdldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc2hvcnRoYW5kR2V0dGVyKCdib3JkZXItdG9wJywgYm9yZGVyVG9wX2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlclRvcExlZnRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb247XG5ib3JkZXJUb3BMZWZ0UmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyVG9wUmlnaHRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb247XG5ib3JkZXJUb3BSaWdodFJhZGl1c19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm90dG9tX2V4cG9ydF9kZWZpbml0aW9uO1xuYm90dG9tX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvdHRvbScsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlTWVhc3VyZW1lbnQodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3R0b20nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJveFNoYWRvd19leHBvcnRfZGVmaW5pdGlvbjtcbmJveFNoYWRvd19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3gtc2hhZG93Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaGFkb3cnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJveFNpemluZ19leHBvcnRfZGVmaW5pdGlvbjtcbmJveFNpemluZ19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3gtc2l6aW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGNhcHRpb25TaWRlX2V4cG9ydF9kZWZpbml0aW9uO1xuY2FwdGlvblNpZGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnY2FwdGlvbi1zaWRlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2NhcHRpb24tc2lkZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgY2xlYXJfZXhwb3J0X2RlZmluaXRpb247XG52YXIgY2xlYXJfbG9jYWxfdmFyX2NsZWFyX2tleXdvcmRzID0gWydub25lJywgJ2xlZnQnLCAncmlnaHQnLCAnYm90aCcsICdpbmhlcml0J107XG5jbGVhcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjbGVhcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlS2V5d29yZCh2LCBjbGVhcl9sb2NhbF92YXJfY2xlYXJfa2V5d29yZHMpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY2xlYXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGNsaXBfZXhwb3J0X2RlZmluaXRpb247XG4vKmpzbGludCByZWdleHA6IHRydWUqL3ZhciBjbGlwX2xvY2FsX3Zhcl9zaGFwZV9yZWdleCA9IC9ecmVjdFxcKCguKilcXCkkL2k7IC8qanNsaW50IHJlZ2V4cDogZmFsc2UqL1xuXG52YXIgY2xpcF9sb2NhbF92YXJfcGFyc2UgPSBmdW5jdGlvbiAodmFsKSB7XG4gIGlmICh2YWwgPT09ICcnIHx8IHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFsID0gdmFsLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHZhbCA9PT0gJ2F1dG8nIHx8IHZhbCA9PT0gJ2luaGVyaXQnKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIHZhciBtYXRjaGVzID0gdmFsLm1hdGNoKGNsaXBfbG9jYWxfdmFyX3NoYXBlX3JlZ2V4KTtcblxuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIHBhcnRzID0gbWF0Y2hlc1sxXS5zcGxpdCgvXFxzKixcXHMqLyk7XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gNCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgdmFsaWQgPSBwYXJ0cy5ldmVyeShmdW5jdGlvbiAocGFydCwgaW5kZXgpIHtcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZU1lYXN1cmVtZW50KHBhcnQpO1xuICAgIHBhcnRzW2luZGV4XSA9IG1lYXN1cmVtZW50O1xuICAgIHJldHVybiBtZWFzdXJlbWVudCAhPT0gdW5kZWZpbmVkO1xuICB9KTtcblxuICBpZiAoIXZhbGlkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHBhcnRzID0gcGFydHMuam9pbignLCAnKTtcbiAgcmV0dXJuIHZhbC5yZXBsYWNlKG1hdGNoZXNbMV0sIHBhcnRzKTtcbn07XG5cbmNsaXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnY2xpcCcsIGNsaXBfbG9jYWxfdmFyX3BhcnNlKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY2xpcCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgY29sb3JfZXhwb3J0X2RlZmluaXRpb247XG5jb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgY29sb3JJbnRlcnBvbGF0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xuY29sb3JJbnRlcnBvbGF0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2NvbG9yLWludGVycG9sYXRpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3ItaW50ZXJwb2xhdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc19leHBvcnRfZGVmaW5pdGlvbjtcbmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgY29sb3JQcm9maWxlX2V4cG9ydF9kZWZpbml0aW9uO1xuY29sb3JQcm9maWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2NvbG9yLXByb2ZpbGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3ItcHJvZmlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgY29sb3JSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb247XG5jb2xvclJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjb2xvci1yZW5kZXJpbmcnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3ItcmVuZGVyaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjb250ZW50X2V4cG9ydF9kZWZpbml0aW9uO1xuY29udGVudF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjb250ZW50Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGNvdW50ZXJJbmNyZW1lbnRfZXhwb3J0X2RlZmluaXRpb247XG5jb3VudGVySW5jcmVtZW50X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2NvdW50ZXItaW5jcmVtZW50Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2NvdW50ZXItaW5jcmVtZW50Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjb3VudGVyUmVzZXRfZXhwb3J0X2RlZmluaXRpb247XG5jb3VudGVyUmVzZXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnY291bnRlci1yZXNldCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb3VudGVyLXJlc2V0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjc3NGbG9hdF9leHBvcnRfZGVmaW5pdGlvbjtcbmNzc0Zsb2F0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2Zsb2F0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2Zsb2F0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjdWVfZXhwb3J0X2RlZmluaXRpb247XG5jdWVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnY3VlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2N1ZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgY3VlQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb247XG5jdWVBZnRlcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjdWUtYWZ0ZXInLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY3VlLWFmdGVyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjdWVCZWZvcmVfZXhwb3J0X2RlZmluaXRpb247XG5jdWVCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnY3VlLWJlZm9yZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdjdWUtYmVmb3JlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjdXJzb3JfZXhwb3J0X2RlZmluaXRpb247XG5jdXJzb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnY3Vyc29yJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2N1cnNvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xuZGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2RpcmVjdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdkaXJlY3Rpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGRpc3BsYXlfZXhwb3J0X2RlZmluaXRpb247XG5kaXNwbGF5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZGlzcGxheScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZG9taW5hbnRCYXNlbGluZV9leHBvcnRfZGVmaW5pdGlvbjtcbmRvbWluYW50QmFzZWxpbmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZG9taW5hbnQtYmFzZWxpbmUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZG9taW5hbnQtYmFzZWxpbmUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGVsZXZhdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbmVsZXZhdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdlbGV2YXRpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZWxldmF0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBlbXB0eUNlbGxzX2V4cG9ydF9kZWZpbml0aW9uO1xuZW1wdHlDZWxsc19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdlbXB0eS1jZWxscycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdlbXB0eS1jZWxscycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZW5hYmxlQmFja2dyb3VuZF9leHBvcnRfZGVmaW5pdGlvbjtcbmVuYWJsZUJhY2tncm91bmRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZW5hYmxlLWJhY2tncm91bmQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZW5hYmxlLWJhY2tncm91bmQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGZpbGxfZXhwb3J0X2RlZmluaXRpb247XG5maWxsX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2ZpbGwnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZmlsbCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZmlsbE9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb247XG5maWxsT3BhY2l0eV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdmaWxsLW9wYWNpdHknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZmlsbC1vcGFjaXR5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBmaWxsUnVsZV9leHBvcnRfZGVmaW5pdGlvbjtcbmZpbGxSdWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2ZpbGwtcnVsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdmaWxsLXJ1bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGZpbHRlcl9leHBvcnRfZGVmaW5pdGlvbjtcbmZpbHRlcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdmaWx0ZXInLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZmlsdGVyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBmbG9vZENvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xuZmxvb2RDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdmbG9vZC1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdmbG9vZC1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZmxvb2RPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uO1xuZmxvb2RPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2Zsb29kLW9wYWNpdHknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZmxvb2Qtb3BhY2l0eScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZm9udEZhbWlseV9leHBvcnRfaXNWYWxpZCwgZm9udEZhbWlseV9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBmb250RmFtaWx5X2xvY2FsX3Zhcl9wYXJ0c1JlZ0V4ID0gL1xccyosXFxzKi87XG5cbmZvbnRGYW1pbHlfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgaWYgKHYgPT09ICcnIHx8IHYgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBwYXJ0cyA9IHYuc3BsaXQoZm9udEZhbWlseV9sb2NhbF92YXJfcGFydHNSZWdFeCk7XG4gIHZhciBsZW4gPSBwYXJ0cy5sZW5ndGg7XG4gIHZhciBpO1xuICB2YXIgdHlwZTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB0eXBlID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAudmFsdWVUeXBlKHBhcnRzW2ldKTtcblxuICAgIGlmICh0eXBlID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5TVFJJTkcgfHwgdHlwZSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZm9udEZhbWlseV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdmb250LWZhbWlseScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdmb250LWZhbWlseScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZm9udFNpemVfZXhwb3J0X2lzVmFsaWQsIGZvbnRTaXplX2V4cG9ydF9kZWZpbml0aW9uO1xudmFyIGZvbnRTaXplX2xvY2FsX3Zhcl9hYnNvbHV0ZVNpemVzID0gWyd4eC1zbWFsbCcsICd4LXNtYWxsJywgJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZScsICd4LWxhcmdlJywgJ3h4LWxhcmdlJ107XG52YXIgZm9udFNpemVfbG9jYWxfdmFyX3JlbGF0aXZlU2l6ZXMgPSBbJ2xhcmdlcicsICdzbWFsbGVyJ107XG5cbmZvbnRTaXplX2V4cG9ydF9pc1ZhbGlkID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIHR5cGUgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUodi50b0xvd2VyQ2FzZSgpKTtcbiAgcmV0dXJuIHR5cGUgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLkxFTkdUSCB8fCB0eXBlID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5QRVJDRU5UIHx8IHR5cGUgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLktFWVdPUkQgJiYgZm9udFNpemVfbG9jYWxfdmFyX2Fic29sdXRlU2l6ZXMuaW5kZXhPZih2LnRvTG93ZXJDYXNlKCkpICE9PSAtMSB8fCB0eXBlID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5LRVlXT1JEICYmIGZvbnRTaXplX2xvY2FsX3Zhcl9yZWxhdGl2ZVNpemVzLmluZGV4T2Yodi50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XG59O1xuXG5mb250U2l6ZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdmb250LXNpemUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXplJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBmb250U3R5bGVfZXhwb3J0X2lzVmFsaWQsIGZvbnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBmb250U3R5bGVfbG9jYWxfdmFyX3ZhbGlkX3N0eWxlcyA9IFsnbm9ybWFsJywgJ2l0YWxpYycsICdvYmxpcXVlJywgJ2luaGVyaXQnXTtcblxuZm9udFN0eWxlX2V4cG9ydF9pc1ZhbGlkID0gZnVuY3Rpb24gKHYpIHtcbiAgcmV0dXJuIGZvbnRTdHlsZV9sb2NhbF92YXJfdmFsaWRfc3R5bGVzLmluZGV4T2Yodi50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XG59O1xuXG5mb250U3R5bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZm9udC1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdmb250LXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBmb250VmFyaWFudF9leHBvcnRfaXNWYWxpZCwgZm9udFZhcmlhbnRfZXhwb3J0X2RlZmluaXRpb247XG52YXIgZm9udFZhcmlhbnRfbG9jYWxfdmFyX3ZhbGlkX3ZhcmlhbnRzID0gWydub3JtYWwnLCAnc21hbGwtY2FwcycsICdpbmhlcml0J107XG5cbmZvbnRWYXJpYW50X2V4cG9ydF9pc1ZhbGlkID0gZnVuY3Rpb24gaXNWYWxpZCh2KSB7XG4gIHJldHVybiBmb250VmFyaWFudF9sb2NhbF92YXJfdmFsaWRfdmFyaWFudHMuaW5kZXhPZih2LnRvTG93ZXJDYXNlKCkpICE9PSAtMTtcbn07XG5cbmZvbnRWYXJpYW50X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2ZvbnQtdmFyaWFudCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdmb250LXZhcmlhbnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGZvbnRXZWlnaHRfZXhwb3J0X2lzVmFsaWQsIGZvbnRXZWlnaHRfZXhwb3J0X2RlZmluaXRpb247XG52YXIgZm9udFdlaWdodF9sb2NhbF92YXJfdmFsaWRfd2VpZ2h0cyA9IFsnbm9ybWFsJywgJ2JvbGQnLCAnYm9sZGVyJywgJ2xpZ2h0ZXInLCAnMTAwJywgJzIwMCcsICczMDAnLCAnNDAwJywgJzUwMCcsICc2MDAnLCAnNzAwJywgJzgwMCcsICc5MDAnLCAnaW5oZXJpdCddO1xuXG5mb250V2VpZ2h0X2V4cG9ydF9pc1ZhbGlkID0gZnVuY3Rpb24gaXNWYWxpZCh2KSB7XG4gIHJldHVybiBmb250V2VpZ2h0X2xvY2FsX3Zhcl92YWxpZF93ZWlnaHRzLmluZGV4T2Yodi50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XG59O1xuXG5mb250V2VpZ2h0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtd2VpZ2h0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBsaW5lSGVpZ2h0X2V4cG9ydF9pc1ZhbGlkLCBsaW5lSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uO1xuXG5saW5lSGVpZ2h0X2V4cG9ydF9pc1ZhbGlkID0gZnVuY3Rpb24gaXNWYWxpZCh2KSB7XG4gIHZhciB0eXBlID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAudmFsdWVUeXBlKHYpO1xuICByZXR1cm4gdHlwZSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCAmJiB2LnRvTG93ZXJDYXNlKCkgPT09ICdub3JtYWwnIHx8IHYudG9Mb3dlckNhc2UoKSA9PT0gJ2luaGVyaXQnIHx8IHR5cGUgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLk5VTUJFUiB8fCB0eXBlID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5MRU5HVEggfHwgdHlwZSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuUEVSQ0VOVDtcbn07XG5cbmxpbmVIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbGluZS1oZWlnaHQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbGluZS1oZWlnaHQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGZvbnRfZXhwb3J0X2lzVmFsaWQsIGZvbnRfZXhwb3J0X2RlZmluaXRpb247XG52YXIgZm9udF9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvciA9IHtcbiAgJ2ZvbnQtZmFtaWx5Jzoge1xuICAgIGlzVmFsaWQ6IGZvbnRGYW1pbHlfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogZm9udEZhbWlseV9leHBvcnRfZGVmaW5pdGlvblxuICB9LFxuICAnZm9udC1zaXplJzoge1xuICAgIGlzVmFsaWQ6IGZvbnRTaXplX2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGZvbnRTaXplX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdmb250LXN0eWxlJzoge1xuICAgIGlzVmFsaWQ6IGZvbnRTdHlsZV9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBmb250U3R5bGVfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2ZvbnQtdmFyaWFudCc6IHtcbiAgICBpc1ZhbGlkOiBmb250VmFyaWFudF9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBmb250VmFyaWFudF9leHBvcnRfZGVmaW5pdGlvblxuICB9LFxuICAnZm9udC13ZWlnaHQnOiB7XG4gICAgaXNWYWxpZDogZm9udFdlaWdodF9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBmb250V2VpZ2h0X2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdsaW5lLWhlaWdodCc6IHtcbiAgICBpc1ZhbGlkOiBsaW5lSGVpZ2h0X2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGxpbmVIZWlnaHRfZXhwb3J0X2RlZmluaXRpb25cbiAgfVxufTtcbnZhciBmb250X2xvY2FsX3Zhcl9zdGF0aWNfZm9udHMgPSBbJ2NhcHRpb24nLCAnaWNvbicsICdtZW51JywgJ21lc3NhZ2UtYm94JywgJ3NtYWxsLWNhcHRpb24nLCAnc3RhdHVzLWJhcicsICdpbmhlcml0J107XG5cbmZvbnRfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFBhcnNlcih2LCBmb250X2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSAhPT0gdW5kZWZpbmVkIHx8IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnZhbHVlVHlwZSh2KSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCAmJiBmb250X2xvY2FsX3Zhcl9zdGF0aWNfZm9udHMuaW5kZXhPZih2LnRvTG93ZXJDYXNlKCkpICE9PSAtMTtcbn07XG5cbnZhciBmb250X2xvY2FsX3Zhcl9zZXR0ZXIgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRTZXR0ZXIoJ2ZvbnQnLCBmb250X2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKTtcbmZvbnRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB2YXIgc2hvcnQgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRQYXJzZXIodiwgZm9udF9sb2NhbF92YXJfc2hvcnRoYW5kX2Zvcik7XG5cbiAgICBpZiAoc2hvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZvbnRfbG9jYWxfdmFyX3NldHRlci5jYWxsKHRoaXMsIHYpO1xuICAgIH1cblxuICAgIGlmIChleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUodikgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLktFWVdPUkQgJiYgZm9udF9sb2NhbF92YXJfc3RhdGljX2ZvbnRzLmluZGV4T2Yodi50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX3NldFByb3BlcnR5KCdmb250Jywgdik7XG4gICAgfVxuICB9LFxuICBnZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZEdldHRlcignZm9udCcsIGZvbnRfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZm9udFNpemVBZGp1c3RfZXhwb3J0X2RlZmluaXRpb247XG5mb250U2l6ZUFkanVzdF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdmb250LXNpemUtYWRqdXN0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtc2l6ZS1hZGp1c3QnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGZvbnRTdHJldGNoX2V4cG9ydF9kZWZpbml0aW9uO1xuZm9udFN0cmV0Y2hfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZm9udC1zdHJldGNoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtc3RyZXRjaCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWxfZXhwb3J0X2RlZmluaXRpb247XG5nbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbF9leHBvcnRfZGVmaW5pdGlvbjtcbmdseXBoT3JpZW50YXRpb25WZXJ0aWNhbF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgaGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uO1xuXG5mdW5jdGlvbiBwYXJzZSh2KSB7XG4gIGlmIChTdHJpbmcodikudG9Mb3dlckNhc2UoKSA9PT0gJ2F1dG8nKSB7XG4gICAgcmV0dXJuICdhdXRvJztcbiAgfVxuXG4gIGlmIChTdHJpbmcodikudG9Mb3dlckNhc2UoKSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgcmV0dXJuICdpbmhlcml0JztcbiAgfVxuXG4gIHJldHVybiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZU1lYXN1cmVtZW50KHYpO1xufVxuXG5oZWlnaHRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgcGFyc2UodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGltYWdlUmVuZGVyaW5nX2V4cG9ydF9kZWZpbml0aW9uO1xuaW1hZ2VSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnaW1hZ2UtcmVuZGVyaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2ltYWdlLXJlbmRlcmluZycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIga2VybmluZ19leHBvcnRfZGVmaW5pdGlvbjtcbmtlcm5pbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgna2VybmluZycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdrZXJuaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBsZWZ0X2V4cG9ydF9kZWZpbml0aW9uO1xubGVmdF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdsZWZ0JywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VNZWFzdXJlbWVudCh2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2xlZnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGxldHRlclNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb247XG5sZXR0ZXJTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2xldHRlci1zcGFjaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2xldHRlci1zcGFjaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBsaWdodGluZ0NvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xubGlnaHRpbmdDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdsaWdodGluZy1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdsaWdodGluZy1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgbGlzdFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xubGlzdFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2xpc3Qtc3R5bGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbGlzdC1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgbGlzdFN0eWxlSW1hZ2VfZXhwb3J0X2RlZmluaXRpb247XG5saXN0U3R5bGVJbWFnZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdsaXN0LXN0eWxlLWltYWdlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2xpc3Qtc3R5bGUtaW1hZ2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGxpc3RTdHlsZVBvc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xubGlzdFN0eWxlUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbGlzdC1zdHlsZS1wb3NpdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdsaXN0LXN0eWxlLXBvc2l0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBsaXN0U3R5bGVUeXBlX2V4cG9ydF9kZWZpbml0aW9uO1xubGlzdFN0eWxlVHlwZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdsaXN0LXN0eWxlLXR5cGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbGlzdC1zdHlsZS10eXBlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBtYXJnaW5fZXhwb3J0X2RlZmluaXRpb24sIG1hcmdpbl9leHBvcnRfaXNWYWxpZCwgbWFyZ2luX2V4cG9ydF9wYXJzZXI7XG52YXIgbWFyZ2luX2xvY2FsX3Zhcl9UWVBFUyA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTO1xuXG52YXIgbWFyZ2luX2xvY2FsX3Zhcl9pc1ZhbGlkID0gZnVuY3Rpb24gKHYpIHtcbiAgaWYgKHYudG9Mb3dlckNhc2UoKSA9PT0gXCJhdXRvXCIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciB0eXBlID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAudmFsdWVUeXBlKHYpO1xuICByZXR1cm4gdHlwZSA9PT0gbWFyZ2luX2xvY2FsX3Zhcl9UWVBFUy5MRU5HVEggfHwgdHlwZSA9PT0gbWFyZ2luX2xvY2FsX3Zhcl9UWVBFUy5QRVJDRU5UIHx8IHR5cGUgPT09IG1hcmdpbl9sb2NhbF92YXJfVFlQRVMuSU5URUdFUiAmJiAodiA9PT0gJzAnIHx8IHYgPT09IDApO1xufTtcblxudmFyIG1hcmdpbl9sb2NhbF92YXJfcGFyc2VyID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIFYgPSB2LnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKFYgPT09IFwiYXV0b1wiKSB7XG4gICAgcmV0dXJuIFY7XG4gIH1cblxuICByZXR1cm4gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VNZWFzdXJlbWVudCh2KTtcbn07XG5cbnZhciBtYXJnaW5fbG9jYWxfdmFyX215U2V0dGVyID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuaW1wbGljaXRTZXR0ZXIoJ21hcmdpbicsICcnLCBtYXJnaW5fbG9jYWxfdmFyX2lzVmFsaWQsIG1hcmdpbl9sb2NhbF92YXJfcGFyc2VyKTtcbnZhciBtYXJnaW5fbG9jYWxfdmFyX215R2xvYmFsID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuaW1wbGljaXRTZXR0ZXIoJ21hcmdpbicsICcnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufSwgZnVuY3Rpb24gKHYpIHtcbiAgcmV0dXJuIHY7XG59KTtcbm1hcmdpbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdiA9IFN0cmluZyh2KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHYgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgViA9IHYudG9Mb3dlckNhc2UoKTtcblxuICAgIHN3aXRjaCAoVikge1xuICAgICAgY2FzZSAnaW5oZXJpdCc6XG4gICAgICBjYXNlICdpbml0aWFsJzpcbiAgICAgIGNhc2UgJ3Vuc2V0JzpcbiAgICAgIGNhc2UgJyc6XG4gICAgICAgIG1hcmdpbl9sb2NhbF92YXJfbXlHbG9iYWwuY2FsbCh0aGlzLCBWKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG1hcmdpbl9sb2NhbF92YXJfbXlTZXR0ZXIuY2FsbCh0aGlzLCB2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xubWFyZ2luX2V4cG9ydF9pc1ZhbGlkID0gbWFyZ2luX2xvY2FsX3Zhcl9pc1ZhbGlkO1xubWFyZ2luX2V4cG9ydF9wYXJzZXIgPSBtYXJnaW5fbG9jYWxfdmFyX3BhcnNlcjtcbnZhciBtYXJnaW5Cb3R0b21fZXhwb3J0X2RlZmluaXRpb247XG5tYXJnaW5Cb3R0b21fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc3ViSW1wbGljaXRTZXR0ZXIoJ21hcmdpbicsICdib3R0b20nLCB7XG4gICAgZGVmaW5pdGlvbjogbWFyZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGlzVmFsaWQ6IG1hcmdpbl9leHBvcnRfaXNWYWxpZCxcbiAgICBwYXJzZXI6IG1hcmdpbl9leHBvcnRfcGFyc2VyXG4gIH0uaXNWYWxpZCwge1xuICAgIGRlZmluaXRpb246IG1hcmdpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpc1ZhbGlkOiBtYXJnaW5fZXhwb3J0X2lzVmFsaWQsXG4gICAgcGFyc2VyOiBtYXJnaW5fZXhwb3J0X3BhcnNlclxuICB9LnBhcnNlciksXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1ib3R0b20nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1hcmdpbkxlZnRfZXhwb3J0X2RlZmluaXRpb247XG5tYXJnaW5MZWZ0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnN1YkltcGxpY2l0U2V0dGVyKCdtYXJnaW4nLCAnbGVmdCcsIHtcbiAgICBkZWZpbml0aW9uOiBtYXJnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaXNWYWxpZDogbWFyZ2luX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogbWFyZ2luX2V4cG9ydF9wYXJzZXJcbiAgfS5pc1ZhbGlkLCB7XG4gICAgZGVmaW5pdGlvbjogbWFyZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGlzVmFsaWQ6IG1hcmdpbl9leHBvcnRfaXNWYWxpZCxcbiAgICBwYXJzZXI6IG1hcmdpbl9leHBvcnRfcGFyc2VyXG4gIH0ucGFyc2VyKSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWxlZnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1hcmdpblJpZ2h0X2V4cG9ydF9kZWZpbml0aW9uO1xubWFyZ2luUmlnaHRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc3ViSW1wbGljaXRTZXR0ZXIoJ21hcmdpbicsICdyaWdodCcsIHtcbiAgICBkZWZpbml0aW9uOiBtYXJnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaXNWYWxpZDogbWFyZ2luX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogbWFyZ2luX2V4cG9ydF9wYXJzZXJcbiAgfS5pc1ZhbGlkLCB7XG4gICAgZGVmaW5pdGlvbjogbWFyZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGlzVmFsaWQ6IG1hcmdpbl9leHBvcnRfaXNWYWxpZCxcbiAgICBwYXJzZXI6IG1hcmdpbl9leHBvcnRfcGFyc2VyXG4gIH0ucGFyc2VyKSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXJpZ2h0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBtYXJnaW5Ub3BfZXhwb3J0X2RlZmluaXRpb247XG5tYXJnaW5Ub3BfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc3ViSW1wbGljaXRTZXR0ZXIoJ21hcmdpbicsICd0b3AnLCB7XG4gICAgZGVmaW5pdGlvbjogbWFyZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGlzVmFsaWQ6IG1hcmdpbl9leHBvcnRfaXNWYWxpZCxcbiAgICBwYXJzZXI6IG1hcmdpbl9leHBvcnRfcGFyc2VyXG4gIH0uaXNWYWxpZCwge1xuICAgIGRlZmluaXRpb246IG1hcmdpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpc1ZhbGlkOiBtYXJnaW5fZXhwb3J0X2lzVmFsaWQsXG4gICAgcGFyc2VyOiBtYXJnaW5fZXhwb3J0X3BhcnNlclxuICB9LnBhcnNlciksXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi10b3AnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1hcmtlcl9leHBvcnRfZGVmaW5pdGlvbjtcbm1hcmtlcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdtYXJrZXInLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFya2VyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBtYXJrZXJFbmRfZXhwb3J0X2RlZmluaXRpb247XG5tYXJrZXJFbmRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbWFya2VyLWVuZCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJrZXItZW5kJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBtYXJrZXJNaWRfZXhwb3J0X2RlZmluaXRpb247XG5tYXJrZXJNaWRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbWFya2VyLW1pZCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJrZXItbWlkJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBtYXJrZXJPZmZzZXRfZXhwb3J0X2RlZmluaXRpb247XG5tYXJrZXJPZmZzZXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbWFya2VyLW9mZnNldCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJrZXItb2Zmc2V0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBtYXJrZXJTdGFydF9leHBvcnRfZGVmaW5pdGlvbjtcbm1hcmtlclN0YXJ0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ21hcmtlci1zdGFydCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJrZXItc3RhcnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1hcmtzX2V4cG9ydF9kZWZpbml0aW9uO1xubWFya3NfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbWFya3MnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFya3MnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1hc2tfZXhwb3J0X2RlZmluaXRpb247XG5tYXNrX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ21hc2snLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFzaycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgbWF4SGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uO1xubWF4SGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ21heC1oZWlnaHQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWF4LWhlaWdodCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgbWF4V2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG5tYXhXaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdtYXgtd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWF4LXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBtaW5IZWlnaHRfZXhwb3J0X2RlZmluaXRpb247XG5taW5IZWlnaHRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbWluLWhlaWdodCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtaW4taGVpZ2h0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBtaW5XaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbm1pbldpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ21pbi13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtaW4td2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb247XG5vcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ29wYWNpdHknLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZU51bWJlcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ29wYWNpdHknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG9ycGhhbnNfZXhwb3J0X2RlZmluaXRpb247XG5vcnBoYW5zX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ29ycGhhbnMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnb3JwaGFucycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgb3V0bGluZV9leHBvcnRfZGVmaW5pdGlvbjtcbm91dGxpbmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnb3V0bGluZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdvdXRsaW5lJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBvdXRsaW5lQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG5vdXRsaW5lQ29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnb3V0bGluZS1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdvdXRsaW5lLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBvdXRsaW5lT2Zmc2V0X2V4cG9ydF9kZWZpbml0aW9uO1xub3V0bGluZU9mZnNldF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdvdXRsaW5lLW9mZnNldCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdvdXRsaW5lLW9mZnNldCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgb3V0bGluZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xub3V0bGluZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ291dGxpbmUtc3R5bGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnb3V0bGluZS1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgb3V0bGluZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xub3V0bGluZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ291dGxpbmUtd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnb3V0bGluZS13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgb3ZlcmZsb3dfZXhwb3J0X2RlZmluaXRpb247XG5vdmVyZmxvd19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdvdmVyZmxvdycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdvdmVyZmxvdycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgb3ZlcmZsb3dYX2V4cG9ydF9kZWZpbml0aW9uO1xub3ZlcmZsb3dYX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ292ZXJmbG93LXgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnb3ZlcmZsb3cteCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgb3ZlcmZsb3dZX2V4cG9ydF9kZWZpbml0aW9uO1xub3ZlcmZsb3dZX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ292ZXJmbG93LXknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnb3ZlcmZsb3cteScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcGFkZGluZ19leHBvcnRfZGVmaW5pdGlvbiwgcGFkZGluZ19leHBvcnRfaXNWYWxpZCwgcGFkZGluZ19leHBvcnRfcGFyc2VyO1xudmFyIHBhZGRpbmdfbG9jYWxfdmFyX1RZUEVTID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVM7XG5cbnZhciBwYWRkaW5nX2xvY2FsX3Zhcl9pc1ZhbGlkID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIHR5cGUgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUodik7XG4gIHJldHVybiB0eXBlID09PSBwYWRkaW5nX2xvY2FsX3Zhcl9UWVBFUy5MRU5HVEggfHwgdHlwZSA9PT0gcGFkZGluZ19sb2NhbF92YXJfVFlQRVMuUEVSQ0VOVCB8fCB0eXBlID09PSBwYWRkaW5nX2xvY2FsX3Zhcl9UWVBFUy5JTlRFR0VSICYmICh2ID09PSAnMCcgfHwgdiA9PT0gMCk7XG59O1xuXG52YXIgcGFkZGluZ19sb2NhbF92YXJfcGFyc2VyID0gZnVuY3Rpb24gKHYpIHtcbiAgcmV0dXJuIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlTWVhc3VyZW1lbnQodik7XG59O1xuXG52YXIgcGFkZGluZ19sb2NhbF92YXJfbXlTZXR0ZXIgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5pbXBsaWNpdFNldHRlcigncGFkZGluZycsICcnLCBwYWRkaW5nX2xvY2FsX3Zhcl9pc1ZhbGlkLCBwYWRkaW5nX2xvY2FsX3Zhcl9wYXJzZXIpO1xudmFyIHBhZGRpbmdfbG9jYWxfdmFyX215R2xvYmFsID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuaW1wbGljaXRTZXR0ZXIoJ3BhZGRpbmcnLCAnJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn0sIGZ1bmN0aW9uICh2KSB7XG4gIHJldHVybiB2O1xufSk7XG5wYWRkaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSB7XG4gICAgICB2ID0gU3RyaW5nKHYpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBWID0gdi50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChWKSB7XG4gICAgICBjYXNlICdpbmhlcml0JzpcbiAgICAgIGNhc2UgJ2luaXRpYWwnOlxuICAgICAgY2FzZSAndW5zZXQnOlxuICAgICAgY2FzZSAnJzpcbiAgICAgICAgcGFkZGluZ19sb2NhbF92YXJfbXlHbG9iYWwuY2FsbCh0aGlzLCBWKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhZGRpbmdfbG9jYWxfdmFyX215U2V0dGVyLmNhbGwodGhpcywgdik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG5wYWRkaW5nX2V4cG9ydF9pc1ZhbGlkID0gcGFkZGluZ19sb2NhbF92YXJfaXNWYWxpZDtcbnBhZGRpbmdfZXhwb3J0X3BhcnNlciA9IHBhZGRpbmdfbG9jYWxfdmFyX3BhcnNlcjtcbnZhciBwYWRkaW5nQm90dG9tX2V4cG9ydF9kZWZpbml0aW9uO1xucGFkZGluZ0JvdHRvbV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zdWJJbXBsaWNpdFNldHRlcigncGFkZGluZycsICdib3R0b20nLCB7XG4gICAgZGVmaW5pdGlvbjogcGFkZGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpc1ZhbGlkOiBwYWRkaW5nX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogcGFkZGluZ19leHBvcnRfcGFyc2VyXG4gIH0uaXNWYWxpZCwge1xuICAgIGRlZmluaXRpb246IHBhZGRpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaXNWYWxpZDogcGFkZGluZ19leHBvcnRfaXNWYWxpZCxcbiAgICBwYXJzZXI6IHBhZGRpbmdfZXhwb3J0X3BhcnNlclxuICB9LnBhcnNlciksXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctYm90dG9tJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwYWRkaW5nTGVmdF9leHBvcnRfZGVmaW5pdGlvbjtcbnBhZGRpbmdMZWZ0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnN1YkltcGxpY2l0U2V0dGVyKCdwYWRkaW5nJywgJ2xlZnQnLCB7XG4gICAgZGVmaW5pdGlvbjogcGFkZGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpc1ZhbGlkOiBwYWRkaW5nX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogcGFkZGluZ19leHBvcnRfcGFyc2VyXG4gIH0uaXNWYWxpZCwge1xuICAgIGRlZmluaXRpb246IHBhZGRpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaXNWYWxpZDogcGFkZGluZ19leHBvcnRfaXNWYWxpZCxcbiAgICBwYXJzZXI6IHBhZGRpbmdfZXhwb3J0X3BhcnNlclxuICB9LnBhcnNlciksXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctbGVmdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcGFkZGluZ1JpZ2h0X2V4cG9ydF9kZWZpbml0aW9uO1xucGFkZGluZ1JpZ2h0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnN1YkltcGxpY2l0U2V0dGVyKCdwYWRkaW5nJywgJ3JpZ2h0Jywge1xuICAgIGRlZmluaXRpb246IHBhZGRpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaXNWYWxpZDogcGFkZGluZ19leHBvcnRfaXNWYWxpZCxcbiAgICBwYXJzZXI6IHBhZGRpbmdfZXhwb3J0X3BhcnNlclxuICB9LmlzVmFsaWQsIHtcbiAgICBkZWZpbml0aW9uOiBwYWRkaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGlzVmFsaWQ6IHBhZGRpbmdfZXhwb3J0X2lzVmFsaWQsXG4gICAgcGFyc2VyOiBwYWRkaW5nX2V4cG9ydF9wYXJzZXJcbiAgfS5wYXJzZXIpLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLXJpZ2h0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwYWRkaW5nVG9wX2V4cG9ydF9kZWZpbml0aW9uO1xucGFkZGluZ1RvcF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zdWJJbXBsaWNpdFNldHRlcigncGFkZGluZycsICd0b3AnLCB7XG4gICAgZGVmaW5pdGlvbjogcGFkZGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpc1ZhbGlkOiBwYWRkaW5nX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogcGFkZGluZ19leHBvcnRfcGFyc2VyXG4gIH0uaXNWYWxpZCwge1xuICAgIGRlZmluaXRpb246IHBhZGRpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaXNWYWxpZDogcGFkZGluZ19leHBvcnRfaXNWYWxpZCxcbiAgICBwYXJzZXI6IHBhZGRpbmdfZXhwb3J0X3BhcnNlclxuICB9LnBhcnNlciksXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctdG9wJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwYWdlX2V4cG9ydF9kZWZpbml0aW9uO1xucGFnZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdwYWdlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BhZ2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHBhZ2VCcmVha0FmdGVyX2V4cG9ydF9kZWZpbml0aW9uO1xucGFnZUJyZWFrQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgncGFnZS1icmVhay1hZnRlcicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdwYWdlLWJyZWFrLWFmdGVyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwYWdlQnJlYWtCZWZvcmVfZXhwb3J0X2RlZmluaXRpb247XG5wYWdlQnJlYWtCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgncGFnZS1icmVhay1iZWZvcmUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFnZS1icmVhay1iZWZvcmUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHBhZ2VCcmVha0luc2lkZV9leHBvcnRfZGVmaW5pdGlvbjtcbnBhZ2VCcmVha0luc2lkZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdwYWdlLWJyZWFrLWluc2lkZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdwYWdlLWJyZWFrLWluc2lkZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcGF1c2VfZXhwb3J0X2RlZmluaXRpb247XG5wYXVzZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdwYXVzZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdwYXVzZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcGF1c2VBZnRlcl9leHBvcnRfZGVmaW5pdGlvbjtcbnBhdXNlQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgncGF1c2UtYWZ0ZXInLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncGF1c2UtYWZ0ZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHBhdXNlQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uO1xucGF1c2VCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgncGF1c2UtYmVmb3JlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BhdXNlLWJlZm9yZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcGl0Y2hfZXhwb3J0X2RlZmluaXRpb247XG5waXRjaF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdwaXRjaCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdwaXRjaCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcGl0Y2hSYW5nZV9leHBvcnRfZGVmaW5pdGlvbjtcbnBpdGNoUmFuZ2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgncGl0Y2gtcmFuZ2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncGl0Y2gtcmFuZ2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHBsYXlEdXJpbmdfZXhwb3J0X2RlZmluaXRpb247XG5wbGF5RHVyaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3BsYXktZHVyaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BsYXktZHVyaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwb2ludGVyRXZlbnRzX2V4cG9ydF9kZWZpbml0aW9uO1xucG9pbnRlckV2ZW50c19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdwb2ludGVyLWV2ZW50cycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdwb2ludGVyLWV2ZW50cycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb247XG5wb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdwb3NpdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdwb3NpdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcXVvdGVzX2V4cG9ydF9kZWZpbml0aW9uO1xucXVvdGVzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3F1b3RlcycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdxdW90ZXMnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHJlc2l6ZV9leHBvcnRfZGVmaW5pdGlvbjtcbnJlc2l6ZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdyZXNpemUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncmVzaXplJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciByaWNobmVzc19leHBvcnRfZGVmaW5pdGlvbjtcbnJpY2huZXNzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3JpY2huZXNzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3JpY2huZXNzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciByaWdodF9leHBvcnRfZGVmaW5pdGlvbjtcbnJpZ2h0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3JpZ2h0JywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VNZWFzdXJlbWVudCh2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3JpZ2h0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzaGFwZVJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbjtcbnNoYXBlUmVuZGVyaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3NoYXBlLXJlbmRlcmluZycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzaGFwZS1yZW5kZXJpbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHNpemVfZXhwb3J0X2RlZmluaXRpb247XG5zaXplX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3NpemUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnc2l6ZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgc3BlYWtfZXhwb3J0X2RlZmluaXRpb247XG5zcGVha19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzcGVhaycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzcGVhaycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgc3BlYWtIZWFkZXJfZXhwb3J0X2RlZmluaXRpb247XG5zcGVha0hlYWRlcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzcGVhay1oZWFkZXInLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnc3BlYWstaGVhZGVyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzcGVha051bWVyYWxfZXhwb3J0X2RlZmluaXRpb247XG5zcGVha051bWVyYWxfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc3BlYWstbnVtZXJhbCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzcGVhay1udW1lcmFsJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzcGVha1B1bmN0dWF0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xuc3BlYWtQdW5jdHVhdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzcGVhay1wdW5jdHVhdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzcGVhay1wdW5jdHVhdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgc3BlZWNoUmF0ZV9leHBvcnRfZGVmaW5pdGlvbjtcbnNwZWVjaFJhdGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc3BlZWNoLXJhdGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnc3BlZWNoLXJhdGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHNyY19leHBvcnRfZGVmaW5pdGlvbjtcbnNyY19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzcmMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnc3JjJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzdG9wQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG5zdG9wQ29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc3RvcC1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzdG9wLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzdG9wT3BhY2l0eV9leHBvcnRfZGVmaW5pdGlvbjtcbnN0b3BPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3N0b3Atb3BhY2l0eScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzdG9wLW9wYWNpdHknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHN0cmVzc19leHBvcnRfZGVmaW5pdGlvbjtcbnN0cmVzc19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzdHJlc3MnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnc3RyZXNzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzdHJva2VfZXhwb3J0X2RlZmluaXRpb247XG5zdHJva2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc3Ryb2tlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3N0cm9rZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgc3Ryb2tlRGFzaGFycmF5X2V4cG9ydF9kZWZpbml0aW9uO1xuc3Ryb2tlRGFzaGFycmF5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3N0cm9rZS1kYXNoYXJyYXknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnc3Ryb2tlLWRhc2hhcnJheScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgc3Ryb2tlRGFzaG9mZnNldF9leHBvcnRfZGVmaW5pdGlvbjtcbnN0cm9rZURhc2hvZmZzZXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc3Ryb2tlLWRhc2hvZmZzZXQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnc3Ryb2tlLWRhc2hvZmZzZXQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHN0cm9rZUxpbmVjYXBfZXhwb3J0X2RlZmluaXRpb247XG5zdHJva2VMaW5lY2FwX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3N0cm9rZS1saW5lY2FwJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3N0cm9rZS1saW5lY2FwJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzdHJva2VMaW5lam9pbl9leHBvcnRfZGVmaW5pdGlvbjtcbnN0cm9rZUxpbmVqb2luX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3N0cm9rZS1saW5lam9pbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzdHJva2UtbGluZWpvaW4nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHN0cm9rZU1pdGVybGltaXRfZXhwb3J0X2RlZmluaXRpb247XG5zdHJva2VNaXRlcmxpbWl0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3N0cm9rZS1taXRlcmxpbWl0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3N0cm9rZS1taXRlcmxpbWl0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzdHJva2VPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uO1xuc3Ryb2tlT3BhY2l0eV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzdHJva2Utb3BhY2l0eScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzdHJva2Utb3BhY2l0eScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgc3Ryb2tlV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG5zdHJva2VXaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzdHJva2Utd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnc3Ryb2tlLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0YWJsZUxheW91dF9leHBvcnRfZGVmaW5pdGlvbjtcbnRhYmxlTGF5b3V0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RhYmxlLWxheW91dCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0YWJsZS1sYXlvdXQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRBbGlnbl9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRBbGlnbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LWFsaWduJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtYWxpZ24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRBbmNob3JfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0QW5jaG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtYW5jaG9yJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtYW5jaG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0RGVjb3JhdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHREZWNvcmF0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtZGVjb3JhdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LWRlY29yYXRpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRJbmRlbnRfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0SW5kZW50X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtaW5kZW50Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtaW5kZW50Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0TGluZVRocm91Z2hfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0TGluZVRocm91Z2hfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1saW5lLXRocm91Z2gnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1saW5lLXRocm91Z2gnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRMaW5lVGhyb3VnaENvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dExpbmVUaHJvdWdoQ29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1saW5lLXRocm91Z2gtY29sb3InLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZUNvbG9yKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1saW5lLXRocm91Z2gtY29sb3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRMaW5lVGhyb3VnaE1vZGVfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0TGluZVRocm91Z2hNb2RlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtbGluZS10aHJvdWdoLW1vZGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1saW5lLXRocm91Z2gtbW9kZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dExpbmVUaHJvdWdoU3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0TGluZVRocm91Z2hTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dExpbmVUaHJvdWdoV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0TGluZVRocm91Z2hXaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LWxpbmUtdGhyb3VnaC13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LWxpbmUtdGhyb3VnaC13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dE92ZXJmbG93X2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dE92ZXJmbG93X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtb3ZlcmZsb3cnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1vdmVyZmxvdycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dE92ZXJsaW5lX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dE92ZXJsaW5lX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtb3ZlcmxpbmUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1vdmVybGluZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dE92ZXJsaW5lQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0T3ZlcmxpbmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LW92ZXJsaW5lLWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtb3ZlcmxpbmUtY29sb3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRPdmVybGluZU1vZGVfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0T3ZlcmxpbmVNb2RlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtb3ZlcmxpbmUtbW9kZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LW92ZXJsaW5lLW1vZGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRPdmVybGluZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dE92ZXJsaW5lU3R5bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1vdmVybGluZS1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LW92ZXJsaW5lLXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0T3ZlcmxpbmVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRPdmVybGluZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtb3ZlcmxpbmUtd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1vdmVybGluZS13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dFJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1yZW5kZXJpbmcnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1yZW5kZXJpbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRTaGFkb3dfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0U2hhZG93X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtc2hhZG93Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtc2hhZG93Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0VHJhbnNmb3JtX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dFRyYW5zZm9ybV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LXRyYW5zZm9ybScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LXRyYW5zZm9ybScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dFVuZGVybGluZV9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRVbmRlcmxpbmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC11bmRlcmxpbmUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC11bmRlcmxpbmUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRVbmRlcmxpbmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRVbmRlcmxpbmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LXVuZGVybGluZS1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LXVuZGVybGluZS1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dFVuZGVybGluZU1vZGVfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0VW5kZXJsaW5lTW9kZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LXVuZGVybGluZS1tb2RlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtdW5kZXJsaW5lLW1vZGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRVbmRlcmxpbmVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRVbmRlcmxpbmVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LXVuZGVybGluZS1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LXVuZGVybGluZS1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dFVuZGVybGluZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dFVuZGVybGluZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtdW5kZXJsaW5lLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtdW5kZXJsaW5lLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0b3BfZXhwb3J0X2RlZmluaXRpb247XG50b3BfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndG9wJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VNZWFzdXJlbWVudCh2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RvcCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdW5pY29kZUJpZGlfZXhwb3J0X2RlZmluaXRpb247XG51bmljb2RlQmlkaV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd1bmljb2RlLWJpZGknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndW5pY29kZS1iaWRpJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB1bmljb2RlUmFuZ2VfZXhwb3J0X2RlZmluaXRpb247XG51bmljb2RlUmFuZ2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndW5pY29kZS1yYW5nZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd1bmljb2RlLXJhbmdlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB2ZWN0b3JFZmZlY3RfZXhwb3J0X2RlZmluaXRpb247XG52ZWN0b3JFZmZlY3RfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndmVjdG9yLWVmZmVjdCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd2ZWN0b3ItZWZmZWN0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB2ZXJ0aWNhbEFsaWduX2V4cG9ydF9kZWZpbml0aW9uO1xudmVydGljYWxBbGlnbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd2ZXJ0aWNhbC1hbGlnbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd2ZXJ0aWNhbC1hbGlnbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdmlzaWJpbGl0eV9leHBvcnRfZGVmaW5pdGlvbjtcbnZpc2liaWxpdHlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndmlzaWJpbGl0eScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB2b2ljZUZhbWlseV9leHBvcnRfZGVmaW5pdGlvbjtcbnZvaWNlRmFtaWx5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3ZvaWMtZmFtaWx5Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3ZvaWNlLWZhbWlseScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdm9sdW1lX2V4cG9ydF9kZWZpbml0aW9uO1xudm9sdW1lX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3ZvbHVtZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd2b2x1bWUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEFuaW1hdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEFuaW1hdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWFuaW1hdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWFuaW1hdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QW5pbWF0aW9uRGVsYXlfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRBbmltYXRpb25EZWxheV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWFuaW1hdGlvbi1kZWxheScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWFuaW1hdGlvbi1kZWxheScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QW5pbWF0aW9uRHVyYXRpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QW5pbWF0aW9uRmlsbE1vZGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRBbmltYXRpb25OYW1lX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QW5pbWF0aW9uTmFtZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWFuaW1hdGlvbi1uYW1lJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYW5pbWF0aW9uLW5hbWUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYW5pbWF0aW9uLXBsYXktc3RhdGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QXBwZWFyYW5jZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEFwcGVhcmFuY2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1hcHBlYXJhbmNlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYXBwZWFyYW5jZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QXNwZWN0UmF0aW9fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRBc3BlY3RSYXRpb19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWFzcGVjdC1yYXRpbycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWFzcGVjdC1yYXRpbycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJhY2tncm91bmRDbGlwX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QmFja2dyb3VuZENsaXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXAnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXAnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJhY2tncm91bmRDb21wb3NpdGVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYmFja2dyb3VuZC1jb21wb3NpdGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1iYWNrZ3JvdW5kLWNvbXBvc2l0ZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QmFja2dyb3VuZE9yaWdpbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJhY2tncm91bmRPcmlnaW5fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1iYWNrZ3JvdW5kLW9yaWdpbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJhY2tncm91bmQtb3JpZ2luJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCYWNrZ3JvdW5kU2l6ZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJhY2tncm91bmRTaXplX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYmFja2dyb3VuZC1zaXplJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYmFja2dyb3VuZC1zaXplJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJBZnRlcl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlckFmdGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLWFmdGVyJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLWFmdGVyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJBZnRlckNvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyQWZ0ZXJDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1hZnRlci1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1hZnRlci1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlckFmdGVyU3R5bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItYWZ0ZXItc3R5bGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItYWZ0ZXItc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlckFmdGVyV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJBZnRlcldpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLWFmdGVyLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLWFmdGVyLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJCZWZvcmVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItYmVmb3JlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLWJlZm9yZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVyQmVmb3JlQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJCZWZvcmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1iZWZvcmUtY29sb3InLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZUNvbG9yKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItYmVmb3JlLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJCZWZvcmVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlckJlZm9yZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLWJlZm9yZS1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1iZWZvcmUtc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlckJlZm9yZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyQmVmb3JlV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItYmVmb3JlLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLWJlZm9yZS13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVyRW5kX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyRW5kX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLWVuZCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1lbmQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlckVuZENvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyRW5kQ29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItZW5kLWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLWVuZC1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVyRW5kU3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJFbmRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1lbmQtc3R5bGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItZW5kLXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJFbmRXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlckVuZFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLWVuZC13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1lbmQtd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlckZpdF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlckZpdF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1maXQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItZml0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLWhvcml6b250YWwtc3BhY2luZycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1ob3Jpem9udGFsLXNwYWNpbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlckltYWdlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVySW1hZ2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItaW1hZ2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItaW1hZ2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlclJhZGl1c19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlclJhZGl1c19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1yYWRpdXMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItcmFkaXVzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJTdGFydF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlclN0YXJ0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLXN0YXJ0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLXN0YXJ0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJTdGFydENvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyU3RhcnRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1zdGFydC1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1zdGFydC1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVyU3RhcnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlclN0YXJ0U3R5bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItc3RhcnQtc3R5bGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItc3RhcnQtc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlclN0YXJ0V2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJTdGFydFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLXN0YXJ0LXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLXN0YXJ0LXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItdmVydGljYWwtc3BhY2luZycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci12ZXJ0aWNhbC1zcGFjaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3hBbGlnbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJveEFsaWduX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm94LWFsaWduJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm94LWFsaWduJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3hEaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3hEaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3gtZGlyZWN0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm94LWRpcmVjdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm94RmxleF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJveEZsZXhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3gtZmxleCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJveC1mbGV4Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3hGbGV4R3JvdXBfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3hGbGV4R3JvdXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3gtZmxleC1ncm91cCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJveC1mbGV4LWdyb3VwJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3hMaW5lc19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJveExpbmVzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm94LWxpbmVzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm94LWxpbmVzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3hPcmRpbmFsR3JvdXBfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3hPcmRpbmFsR3JvdXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91cCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3hPcmllbnRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3hPcmllbnRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3gtb3JpZW50Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm94LW9yaWVudCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm94UGFja19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJveFBhY2tfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3gtcGFjaycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJveC1wYWNrJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3hSZWZsZWN0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm94UmVmbGVjdF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJveC1yZWZsZWN0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm94LXJlZmxlY3QnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJveFNoYWRvd19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJveFNoYWRvd19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJveC1zaGFkb3cnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3gtc2hhZG93Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRDb2xvckNvcnJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRDb2xvckNvcnJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtY29sb3ItY29ycmVjdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Q29sdW1uQXhpc19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdENvbHVtbkF4aXNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1jb2x1bW4tYXhpcycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWNvbHVtbi1heGlzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRDb2x1bW5CcmVha0FmdGVyX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Q29sdW1uQnJlYWtBZnRlcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbHVtbi1icmVhay1hZnRlcicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWNvbHVtbi1icmVhay1hZnRlcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Q29sdW1uQnJlYWtCZWZvcmVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRDb2x1bW5CcmVha0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbHVtbi1icmVhay1iZWZvcmUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1jb2x1bW4tYnJlYWstYmVmb3JlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRDb2x1bW5CcmVha0luc2lkZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdENvbHVtbkJyZWFrSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtY29sdW1uLWJyZWFrLWluc2lkZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWNvbHVtbi1icmVhay1pbnNpZGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdENvbHVtbkNvdW50X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Q29sdW1uQ291bnRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1jb2x1bW4tY291bnQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1jb2x1bW4tY291bnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdENvbHVtbkdhcF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdENvbHVtbkdhcF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbHVtbi1nYXAnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1jb2x1bW4tZ2FwJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRDb2x1bW5SdWxlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Q29sdW1uUnVsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbHVtbi1ydWxlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtY29sdW1uLXJ1bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdENvbHVtblJ1bGVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdENvbHVtblJ1bGVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbHVtbi1ydWxlLWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtY29sdW1uLXJ1bGUtY29sb3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdENvbHVtblJ1bGVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdENvbHVtblJ1bGVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbHVtbi1ydWxlLXN0eWxlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtY29sdW1uLXJ1bGUtc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdENvbHVtblJ1bGVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdENvbHVtblJ1bGVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbHVtbi1ydWxlLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtY29sdW1uLXJ1bGUtd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdENvbHVtblNwYW5fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRDb2x1bW5TcGFuX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtY29sdW1uLXNwYW4nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1jb2x1bW4tc3BhbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Q29sdW1uV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRDb2x1bW5XaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbHVtbi13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWNvbHVtbi13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Q29sdW1uc19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdENvbHVtbnNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1jb2x1bW5zJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtY29sdW1ucycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0RmlsdGVyX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0RmlsdGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtZmlsdGVyJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZmlsdGVyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRGbGV4QWxpZ25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRGbGV4QWxpZ25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mbGV4LWFsaWduJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZmxleC1hbGlnbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0RmxleERpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEZsZXhEaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mbGV4LWRpcmVjdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWZsZXgtZGlyZWN0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRGbGV4Rmxvd19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEZsZXhGbG93X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtZmxleC1mbG93Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZmxleC1mbG93Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRGbGV4SXRlbUFsaWduX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0RmxleEl0ZW1BbGlnbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWZsZXgtaXRlbS1hbGlnbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWZsZXgtaXRlbS1hbGlnbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0RmxleExpbmVQYWNrX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0RmxleExpbmVQYWNrX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtZmxleC1saW5lLXBhY2snLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1mbGV4LWxpbmUtcGFjaycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0RmxleE9yZGVyX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0RmxleE9yZGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtZmxleC1vcmRlcicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWZsZXgtb3JkZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEZsZXhQYWNrX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0RmxleFBhY2tfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mbGV4LXBhY2snLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1mbGV4LXBhY2snKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEZsZXhXcmFwX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0RmxleFdyYXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mbGV4LXdyYXAnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1mbGV4LXdyYXAnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEZsb3dGcm9tX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Rmxvd0Zyb21fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mbG93LWZyb20nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1mbG93LWZyb20nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEZsb3dJbnRvX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Rmxvd0ludG9fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mbG93LWludG8nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1mbG93LWludG8nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3NfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRGb250RmVhdHVyZVNldHRpbmdzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRGb250S2VybmluZ19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEZvbnRLZXJuaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtZm9udC1rZXJuaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZm9udC1rZXJuaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRGb250U2l6ZURlbHRhX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Rm9udFNpemVEZWx0YV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWZvbnQtc2l6ZS1kZWx0YScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWZvbnQtc2l6ZS1kZWx0YScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Rm9udFNtb290aGluZ19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEZvbnRTbW9vdGhpbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mb250LXNtb290aGluZycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWZvbnQtc21vb3RoaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRGb250VmFyaWFudExpZ2F0dXJlc19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtZm9udC12YXJpYW50LWxpZ2F0dXJlcycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWZvbnQtdmFyaWFudC1saWdhdHVyZXMnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEhpZ2hsaWdodF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEhpZ2hsaWdodF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWhpZ2hsaWdodCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWhpZ2hsaWdodCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0SHlwaGVuYXRlQ2hhcmFjdGVyX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0SHlwaGVuYXRlQ2hhcmFjdGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtaHlwaGVuYXRlLWNoYXJhY3RlcicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWh5cGhlbmF0ZS1jaGFyYWN0ZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEh5cGhlbmF0ZUxpbWl0QWZ0ZXJfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtaHlwaGVuYXRlLWxpbWl0LWFmdGVyJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtaHlwaGVuYXRlLWxpbWl0LWFmdGVyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRIeXBoZW5hdGVMaW1pdEJlZm9yZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEh5cGhlbmF0ZUxpbWl0QmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtaHlwaGVuYXRlLWxpbWl0LWJlZm9yZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWh5cGhlbmF0ZS1saW1pdC1iZWZvcmUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXNfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtaHlwaGVuYXRlLWxpbWl0LWxpbmVzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtaHlwaGVuYXRlLWxpbWl0LWxpbmVzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRIeXBoZW5zX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0SHlwaGVuc19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWh5cGhlbnMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1oeXBoZW5zJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRMaW5lQWxpZ25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRMaW5lQWxpZ25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1saW5lLWFsaWduJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbGluZS1hbGlnbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TGluZUJveENvbnRhaW5fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRMaW5lQm94Q29udGFpbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWxpbmUtYm94LWNvbnRhaW4nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1saW5lLWJveC1jb250YWluJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRMaW5lQnJlYWtfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRMaW5lQnJlYWtfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1saW5lLWJyZWFrJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbGluZS1icmVhaycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TGluZUNsYW1wX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TGluZUNsYW1wX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbGluZS1jbGFtcCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWxpbmUtY2xhbXAnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdExpbmVHcmlkX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TGluZUdyaWRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1saW5lLWdyaWQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1saW5lLWdyaWQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdExpbmVTbmFwX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TGluZVNuYXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1saW5lLXNuYXAnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1saW5lLXNuYXAnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdExvY2FsZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdExvY2FsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWxvY2FsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWxvY2FsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TG9naWNhbEhlaWdodF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdExvZ2ljYWxIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1sb2dpY2FsLWhlaWdodCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWxvZ2ljYWwtaGVpZ2h0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRMb2dpY2FsV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRMb2dpY2FsV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1sb2dpY2FsLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbG9naWNhbC13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFyZ2luQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXJnaW5BZnRlcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcmdpbi1hZnRlcicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hcmdpbi1hZnRlcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFyZ2luQWZ0ZXJDb2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXJnaW4tYWZ0ZXItY29sbGFwc2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXJnaW4tYWZ0ZXItY29sbGFwc2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hcmdpbkJlZm9yZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hcmdpbkJlZm9yZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcmdpbi1iZWZvcmUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXJnaW4tYmVmb3JlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXJnaW5CZWZvcmVDb2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFyZ2luLWJlZm9yZS1jb2xsYXBzZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hcmdpbi1iZWZvcmUtY29sbGFwc2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hcmdpbkJvdHRvbUNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXJnaW4tYm90dG9tLWNvbGxhcHNlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFyZ2luLWJvdHRvbS1jb2xsYXBzZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFyZ2luQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXJnaW5Db2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcmdpbi1jb2xsYXBzZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hcmdpbi1jb2xsYXBzZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFyZ2luRW5kX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFyZ2luRW5kX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFyZ2luLWVuZCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hcmdpbi1lbmQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hcmdpblN0YXJ0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFyZ2luU3RhcnRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXJnaW4tc3RhcnQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXJnaW4tc3RhcnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hcmdpblRvcENvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFyZ2luVG9wQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXJnaW4tdG9wLWNvbGxhcHNlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFyZ2luLXRvcC1jb2xsYXBzZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFycXVlZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hcnF1ZWVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXJxdWVlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFycXVlZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFycXVlZURpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hcnF1ZWVEaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXJxdWVlLWRpcmVjdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hcnF1ZWUtZGlyZWN0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXJxdWVlSW5jcmVtZW50X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFycXVlZUluY3JlbWVudF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcnF1ZWUtaW5jcmVtZW50Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFycXVlZS1pbmNyZW1lbnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFycXVlZVJlcGV0aXRpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXJxdWVlLXJlcGV0aXRpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXJxdWVlLXJlcGV0aXRpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hcnF1ZWVTcGVlZF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hcnF1ZWVTcGVlZF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcnF1ZWUtc3BlZWQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXJxdWVlLXNwZWVkJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXJxdWVlU3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXJxdWVlU3R5bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXJxdWVlLXN0eWxlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFycXVlZS1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hc2tfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFzaycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza0F0dGFjaG1lbnRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrQXR0YWNobWVudF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stYXR0YWNobWVudCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stYXR0YWNobWVudCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza0JveEltYWdlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza0JveEltYWdlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1ib3gtaW1hZ2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLWJveC1pbWFnZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza0JveEltYWdlT3V0c2V0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza0JveEltYWdlT3V0c2V0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1ib3gtaW1hZ2Utb3V0c2V0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFzay1ib3gtaW1hZ2Utb3V0c2V0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrQm94SW1hZ2VSZXBlYXRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrQm94SW1hZ2VSZXBlYXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrLWJveC1pbWFnZS1yZXBlYXQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLWJveC1pbWFnZS1yZXBlYXQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tCb3hJbWFnZVNsaWNlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza0JveEltYWdlU2xpY2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrLWJveC1pbWFnZS1zbGljZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stYm94LWltYWdlLXNsaWNlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrQm94SW1hZ2VTb3VyY2VfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrQm94SW1hZ2VTb3VyY2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrLWJveC1pbWFnZS1zb3VyY2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLWJveC1pbWFnZS1zb3VyY2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tCb3hJbWFnZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza0JveEltYWdlV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrLWJveC1pbWFnZS13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stYm94LWltYWdlLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrQ2xpcF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hc2tDbGlwX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1jbGlwJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFzay1jbGlwJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrQ29tcG9zaXRlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza0NvbXBvc2l0ZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stY29tcG9zaXRlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFzay1jb21wb3NpdGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tJbWFnZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hc2tJbWFnZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2staW1hZ2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLWltYWdlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza09yaWdpbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stb3JpZ2luJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFzay1vcmlnaW4nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hc2tQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stcG9zaXRpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLXBvc2l0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrUG9zaXRpb25YX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza1Bvc2l0aW9uWF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stcG9zaXRpb24teCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stcG9zaXRpb24teCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza1Bvc2l0aW9uWV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hc2tQb3NpdGlvbllfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrLXBvc2l0aW9uLXknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLXBvc2l0aW9uLXknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tSZXBlYXRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrUmVwZWF0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1yZXBlYXQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLXJlcGVhdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza1JlcGVhdFhfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrUmVwZWF0WF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stcmVwZWF0LXgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLXJlcGVhdC14Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrUmVwZWF0WV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hc2tSZXBlYXRZX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1yZXBlYXQteScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stcmVwZWF0LXknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tTaXplX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza1NpemVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrLXNpemUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLXNpemUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hdGNoTmVhcmVzdE1haWxCbG9ja3F1b3RlQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXRjaE5lYXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWF0Y2gtbmVhcmVzdC1tYWlsLWJsb2NrcXVvdGUtY29sb3InLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZUNvbG9yKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXRjaC1uZWFyZXN0LW1haWwtYmxvY2txdW90ZS1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWF4TG9naWNhbEhlaWdodF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1heExvZ2ljYWxIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXgtbG9naWNhbC1oZWlnaHQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXgtbG9naWNhbC1oZWlnaHQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1heExvZ2ljYWxXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1heExvZ2ljYWxXaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1heC1sb2dpY2FsLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWF4LWxvZ2ljYWwtd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1pbkxvZ2ljYWxIZWlnaHRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNaW5Mb2dpY2FsSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWluLWxvZ2ljYWwtaGVpZ2h0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWluLWxvZ2ljYWwtaGVpZ2h0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNaW5Mb2dpY2FsV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNaW5Mb2dpY2FsV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1taW4tbG9naWNhbC13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1pbi1sb2dpY2FsLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXROYnNwTW9kZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE5ic3BNb2RlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbmJzcC1tb2RlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbmJzcC1tb2RlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRPdmVyZmxvd1Njcm9sbGluZ19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRQYWRkaW5nQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRQYWRkaW5nQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1wYWRkaW5nLWFmdGVyJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtcGFkZGluZy1hZnRlcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0UGFkZGluZ0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFBhZGRpbmdCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1wYWRkaW5nLWJlZm9yZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXBhZGRpbmctYmVmb3JlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRQYWRkaW5nRW5kX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0UGFkZGluZ0VuZF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXBhZGRpbmctZW5kJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtcGFkZGluZy1lbmQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFBhZGRpbmdTdGFydF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFBhZGRpbmdTdGFydF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXBhZGRpbmctc3RhcnQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1wYWRkaW5nLXN0YXJ0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRQZXJzcGVjdGl2ZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFBlcnNwZWN0aXZlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtcGVyc3BlY3RpdmUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1wZXJzcGVjdGl2ZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0UGVyc3BlY3RpdmVPcmlnaW5fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRQZXJzcGVjdGl2ZU9yaWdpbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0UGVyc3BlY3RpdmVPcmlnaW5YX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0UGVyc3BlY3RpdmVPcmlnaW5YX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luLXgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1wZXJzcGVjdGl2ZS1vcmlnaW4teCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0UGVyc3BlY3RpdmVPcmlnaW5ZX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0UGVyc3BlY3RpdmVPcmlnaW5ZX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luLXknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1wZXJzcGVjdGl2ZS1vcmlnaW4teScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0UHJpbnRDb2xvckFkanVzdF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFByaW50Q29sb3JBZGp1c3RfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3QnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3QnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRSZWdpb25CcmVha0FmdGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtcmVnaW9uLWJyZWFrLWFmdGVyJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtcmVnaW9uLWJyZWFrLWFmdGVyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRSZWdpb25CcmVha0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFJlZ2lvbkJyZWFrQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtcmVnaW9uLWJyZWFrLWJlZm9yZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXJlZ2lvbi1icmVhay1iZWZvcmUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0UmVnaW9uQnJlYWtJbnNpZGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1yZWdpb24tYnJlYWstaW5zaWRlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtcmVnaW9uLWJyZWFrLWluc2lkZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0UmVnaW9uT3ZlcmZsb3dfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRSZWdpb25PdmVyZmxvd19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXJlZ2lvbi1vdmVyZmxvdycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXJlZ2lvbi1vdmVyZmxvdycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0UnRsT3JkZXJpbmdfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRSdGxPcmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXJ0bC1vcmRlcmluZycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXJ0bC1vcmRlcmluZycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0U3ZnU2hhZG93X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0U3ZnU2hhZG93X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtc3ZnLXNoYWRvdycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXN2Zy1zaGFkb3cnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRhcEhpZ2hsaWdodENvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VGV4dENvbWJpbmVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUZXh0Q29tYmluZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRleHQtY29tYmluZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRleHQtY29tYmluZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3RfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRleHRFbXBoYXNpc19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRleHRFbXBoYXNpc19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRleHQtZW1waGFzaXMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10ZXh0LWVtcGhhc2lzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUZXh0RW1waGFzaXNDb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRleHRFbXBoYXNpc0NvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1lbXBoYXNpcy1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRleHQtZW1waGFzaXMtY29sb3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRleHRFbXBoYXNpc1Bvc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10ZXh0LWVtcGhhc2lzLXBvc2l0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdGV4dC1lbXBoYXNpcy1wb3NpdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VGV4dEVtcGhhc2lzU3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUZXh0RW1waGFzaXNTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRleHQtZW1waGFzaXMtc3R5bGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10ZXh0LWVtcGhhc2lzLXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUZXh0RmlsbENvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VGV4dEZpbGxDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRleHQtZmlsbC1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRleHQtZmlsbC1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VGV4dE9yaWVudGF0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VGV4dE9yaWVudGF0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1vcmllbnRhdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRleHQtb3JpZW50YXRpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRleHRTZWN1cml0eV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRleHRTZWN1cml0eV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRleHQtc2VjdXJpdHknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10ZXh0LXNlY3VyaXR5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUZXh0U2l6ZUFkanVzdF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRleHRTaXplQWRqdXN0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1zaXplLWFkanVzdCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRleHQtc2l6ZS1hZGp1c3QnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRleHRTdHJva2VfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUZXh0U3Ryb2tlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1zdHJva2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10ZXh0LXN0cm9rZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VGV4dFN0cm9rZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VGV4dFN0cm9rZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1zdHJva2UtY29sb3InLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZUNvbG9yKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10ZXh0LXN0cm9rZS1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VGV4dFN0cm9rZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VGV4dFN0cm9rZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1zdHJva2Utd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VHJhbnNmb3JtX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VHJhbnNmb3JtX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdHJhbnNmb3JtJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdHJhbnNmb3JtJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUcmFuc2Zvcm1PcmlnaW5fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUcmFuc2Zvcm1PcmlnaW5fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VHJhbnNmb3JtT3JpZ2luWF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRyYW5zZm9ybU9yaWdpblhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRyYW5zZm9ybU9yaWdpbllfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUcmFuc2Zvcm1PcmlnaW5ZX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi15Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi15Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUcmFuc2Zvcm1PcmlnaW5aX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VHJhbnNmb3JtT3JpZ2luWl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4teicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4teicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VHJhbnNmb3JtU3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUcmFuc2Zvcm1TdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRyYW5zZm9ybS1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRyYW5zZm9ybS1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VHJhbnNpdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRyYW5zaXRpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10cmFuc2l0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdHJhbnNpdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VHJhbnNpdGlvbkRlbGF5X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VHJhbnNpdGlvbkRlbGF5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdHJhbnNpdGlvbi1kZWxheScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRyYW5zaXRpb24tZGVsYXknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRyYW5zaXRpb25EdXJhdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUcmFuc2l0aW9uUHJvcGVydHlfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUcmFuc2l0aW9uUHJvcGVydHlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VXNlckRyYWdfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRVc2VyRHJhZ19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXVzZXItZHJhZycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXVzZXItZHJhZycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VXNlck1vZGlmeV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFVzZXJNb2RpZnlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC11c2VyLW1vZGlmeScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXVzZXItbW9kaWZ5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRVc2VyU2VsZWN0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VXNlclNlbGVjdF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXVzZXItc2VsZWN0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdXNlci1zZWxlY3QnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFdyYXBfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRXcmFwX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtd3JhcCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXdyYXAnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFdyYXBGbG93X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0V3JhcEZsb3dfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC13cmFwLWZsb3cnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC13cmFwLWZsb3cnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFdyYXBNYXJnaW5fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRXcmFwTWFyZ2luX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtd3JhcC1tYXJnaW4nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC13cmFwLW1hcmdpbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0V3JhcFBhZGRpbmdfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRXcmFwUGFkZGluZ19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXdyYXAtcGFkZGluZycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXdyYXAtcGFkZGluZycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0V3JhcFNoYXBlSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0V3JhcFNoYXBlSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtd3JhcC1zaGFwZS1pbnNpZGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC13cmFwLXNoYXBlLWluc2lkZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0V3JhcFNoYXBlT3V0c2lkZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFdyYXBTaGFwZU91dHNpZGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC13cmFwLXNoYXBlLW91dHNpZGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC13cmFwLXNoYXBlLW91dHNpZGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFdyYXBUaHJvdWdoX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0V3JhcFRocm91Z2hfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC13cmFwLXRocm91Z2gnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC13cmFwLXRocm91Z2gnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFdyaXRpbmdNb2RlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0V3JpdGluZ01vZGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC13cml0aW5nLW1vZGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC13cml0aW5nLW1vZGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdoaXRlU3BhY2VfZXhwb3J0X2RlZmluaXRpb247XG53aGl0ZVNwYWNlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3doaXRlLXNwYWNlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3doaXRlLXNwYWNlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3aWRvd3NfZXhwb3J0X2RlZmluaXRpb247XG53aWRvd3NfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnd2lkb3dzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3dpZG93cycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG5cbmZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgaWYgKFN0cmluZyh2KS50b0xvd2VyQ2FzZSgpID09PSAnYXV0bycpIHtcbiAgICByZXR1cm4gJ2F1dG8nO1xuICB9XG5cbiAgaWYgKFN0cmluZyh2KS50b0xvd2VyQ2FzZSgpID09PSAnaW5oZXJpdCcpIHtcbiAgICByZXR1cm4gJ2luaGVyaXQnO1xuICB9XG5cbiAgcmV0dXJuIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlTWVhc3VyZW1lbnQodik7XG59XG5cbndpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3dpZHRoJywgcGFyc2UodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd3aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd29yZEJyZWFrX2V4cG9ydF9kZWZpbml0aW9uO1xud29yZEJyZWFrX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3dvcmQtYnJlYWsnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnd29yZC1icmVhaycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd29yZFNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb247XG53b3JkU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd3b3JkLXNwYWNpbmcnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnd29yZC1zcGFjaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3b3JkV3JhcF9leHBvcnRfZGVmaW5pdGlvbjtcbndvcmRXcmFwX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3dvcmQtd3JhcCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd3b3JkLXdyYXAnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdyaXRpbmdNb2RlX2V4cG9ydF9kZWZpbml0aW9uO1xud3JpdGluZ01vZGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnd3JpdGluZy1tb2RlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3dyaXRpbmctbW9kZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgekluZGV4X2V4cG9ydF9kZWZpbml0aW9uO1xuekluZGV4X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3otaW5kZXgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnei1pbmRleCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgem9vbV9leHBvcnRfZGVmaW5pdGlvbjtcbnpvb21fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnem9vbScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd6b29tJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocHJvdG90eXBlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHByb3RvdHlwZSwge1xuICAgIGFsaWdubWVudEJhc2VsaW5lOiBhbGlnbm1lbnRCYXNlbGluZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImFsaWdubWVudC1iYXNlbGluZVwiOiBhbGlnbm1lbnRCYXNlbGluZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBhemltdXRoOiBhemltdXRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBiYWNrZ3JvdW5kQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYmFja2dyb3VuZEltYWdlOiBiYWNrZ3JvdW5kSW1hZ2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJiYWNrZ3JvdW5kLWltYWdlXCI6IGJhY2tncm91bmRJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBiYWNrZ3JvdW5kUmVwZWF0OiBiYWNrZ3JvdW5kUmVwZWF0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYmFja2dyb3VuZC1yZXBlYXRcIjogYmFja2dyb3VuZFJlcGVhdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBiYWNrZ3JvdW5kQXR0YWNobWVudDogYmFja2dyb3VuZEF0dGFjaG1lbnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJiYWNrZ3JvdW5kLWF0dGFjaG1lbnRcIjogYmFja2dyb3VuZEF0dGFjaG1lbnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYmFja2dyb3VuZFBvc2l0aW9uOiBiYWNrZ3JvdW5kUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJiYWNrZ3JvdW5kLXBvc2l0aW9uXCI6IGJhY2tncm91bmRQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBiYWNrZ3JvdW5kOiBiYWNrZ3JvdW5kX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJhY2tncm91bmRDbGlwOiBiYWNrZ3JvdW5kQ2xpcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJhY2tncm91bmQtY2xpcFwiOiBiYWNrZ3JvdW5kQ2xpcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBiYWNrZ3JvdW5kT3JpZ2luOiBiYWNrZ3JvdW5kT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYmFja2dyb3VuZC1vcmlnaW5cIjogYmFja2dyb3VuZE9yaWdpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb25YOiBiYWNrZ3JvdW5kUG9zaXRpb25YX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYmFja2dyb3VuZC1wb3NpdGlvbi14XCI6IGJhY2tncm91bmRQb3NpdGlvblhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYmFja2dyb3VuZFBvc2l0aW9uWTogYmFja2dyb3VuZFBvc2l0aW9uWV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJhY2tncm91bmQtcG9zaXRpb24teVwiOiBiYWNrZ3JvdW5kUG9zaXRpb25ZX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJhY2tncm91bmRSZXBlYXRYOiBiYWNrZ3JvdW5kUmVwZWF0WF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJhY2tncm91bmQtcmVwZWF0LXhcIjogYmFja2dyb3VuZFJlcGVhdFhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYmFja2dyb3VuZFJlcGVhdFk6IGJhY2tncm91bmRSZXBlYXRZX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYmFja2dyb3VuZC1yZXBlYXQteVwiOiBiYWNrZ3JvdW5kUmVwZWF0WV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBiYWNrZ3JvdW5kU2l6ZTogYmFja2dyb3VuZFNpemVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJiYWNrZ3JvdW5kLXNpemVcIjogYmFja2dyb3VuZFNpemVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYmFzZWxpbmVTaGlmdDogYmFzZWxpbmVTaGlmdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJhc2VsaW5lLXNoaWZ0XCI6IGJhc2VsaW5lU2hpZnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyV2lkdGg6IGJvcmRlcldpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLXdpZHRoXCI6IGJvcmRlcldpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlclN0eWxlOiBib3JkZXJTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1zdHlsZVwiOiBib3JkZXJTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJDb2xvcjogYm9yZGVyQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItY29sb3JcIjogYm9yZGVyQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyOiBib3JkZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IGJvcmRlckJvdHRvbVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLWJvdHRvbS13aWR0aFwiOiBib3JkZXJCb3R0b21XaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJCb3R0b21TdHlsZTogYm9yZGVyQm90dG9tU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItYm90dG9tLXN0eWxlXCI6IGJvcmRlckJvdHRvbVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckJvdHRvbUNvbG9yOiBib3JkZXJCb3R0b21Db2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1ib3R0b20tY29sb3JcIjogYm9yZGVyQm90dG9tQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyQm90dG9tOiBib3JkZXJCb3R0b21fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItYm90dG9tXCI6IGJvcmRlckJvdHRvbV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJCb3R0b21MZWZ0UmFkaXVzOiBib3JkZXJCb3R0b21MZWZ0UmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c1wiOiBib3JkZXJCb3R0b21MZWZ0UmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiBib3JkZXJCb3R0b21SaWdodFJhZGl1c19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzXCI6IGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckNvbGxhcHNlOiBib3JkZXJDb2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1jb2xsYXBzZVwiOiBib3JkZXJDb2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJJbWFnZTogYm9yZGVySW1hZ2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItaW1hZ2VcIjogYm9yZGVySW1hZ2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVySW1hZ2VPdXRzZXQ6IGJvcmRlckltYWdlT3V0c2V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLWltYWdlLW91dHNldFwiOiBib3JkZXJJbWFnZU91dHNldF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJJbWFnZVJlcGVhdDogYm9yZGVySW1hZ2VSZXBlYXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItaW1hZ2UtcmVwZWF0XCI6IGJvcmRlckltYWdlUmVwZWF0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckltYWdlU2xpY2U6IGJvcmRlckltYWdlU2xpY2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItaW1hZ2Utc2xpY2VcIjogYm9yZGVySW1hZ2VTbGljZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJJbWFnZVNvdXJjZTogYm9yZGVySW1hZ2VTb3VyY2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItaW1hZ2Utc291cmNlXCI6IGJvcmRlckltYWdlU291cmNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckltYWdlV2lkdGg6IGJvcmRlckltYWdlV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItaW1hZ2Utd2lkdGhcIjogYm9yZGVySW1hZ2VXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJMZWZ0V2lkdGg6IGJvcmRlckxlZnRXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1sZWZ0LXdpZHRoXCI6IGJvcmRlckxlZnRXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJMZWZ0U3R5bGU6IGJvcmRlckxlZnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1sZWZ0LXN0eWxlXCI6IGJvcmRlckxlZnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJMZWZ0Q29sb3I6IGJvcmRlckxlZnRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1sZWZ0LWNvbG9yXCI6IGJvcmRlckxlZnRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJMZWZ0OiBib3JkZXJMZWZ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLWxlZnRcIjogYm9yZGVyTGVmdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJSYWRpdXM6IGJvcmRlclJhZGl1c19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1yYWRpdXNcIjogYm9yZGVyUmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlclJpZ2h0V2lkdGg6IGJvcmRlclJpZ2h0V2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItcmlnaHQtd2lkdGhcIjogYm9yZGVyUmlnaHRXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJSaWdodFN0eWxlOiBib3JkZXJSaWdodFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLXJpZ2h0LXN0eWxlXCI6IGJvcmRlclJpZ2h0U3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyUmlnaHRDb2xvcjogYm9yZGVyUmlnaHRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1yaWdodC1jb2xvclwiOiBib3JkZXJSaWdodENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlclJpZ2h0OiBib3JkZXJSaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1yaWdodFwiOiBib3JkZXJSaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJTcGFjaW5nOiBib3JkZXJTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLXNwYWNpbmdcIjogYm9yZGVyU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJUb3BXaWR0aDogYm9yZGVyVG9wV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItdG9wLXdpZHRoXCI6IGJvcmRlclRvcFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlclRvcFN0eWxlOiBib3JkZXJUb3BTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci10b3Atc3R5bGVcIjogYm9yZGVyVG9wU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyVG9wQ29sb3I6IGJvcmRlclRvcENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLXRvcC1jb2xvclwiOiBib3JkZXJUb3BDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJUb3A6IGJvcmRlclRvcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci10b3BcIjogYm9yZGVyVG9wX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6IGJvcmRlclRvcExlZnRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItdG9wLWxlZnQtcmFkaXVzXCI6IGJvcmRlclRvcExlZnRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IGJvcmRlclRvcFJpZ2h0UmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXNcIjogYm9yZGVyVG9wUmlnaHRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm90dG9tOiBib3R0b21fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm94U2hhZG93OiBib3hTaGFkb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3gtc2hhZG93XCI6IGJveFNoYWRvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3hTaXppbmc6IGJveFNpemluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJveC1zaXppbmdcIjogYm94U2l6aW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGNhcHRpb25TaWRlOiBjYXB0aW9uU2lkZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImNhcHRpb24tc2lkZVwiOiBjYXB0aW9uU2lkZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjbGVhcjogY2xlYXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgY2xpcDogY2xpcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjb2xvcjogY29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgY29sb3JJbnRlcnBvbGF0aW9uOiBjb2xvckludGVycG9sYXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCI6IGNvbG9ySW50ZXJwb2xhdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCI6IGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgY29sb3JQcm9maWxlOiBjb2xvclByb2ZpbGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJjb2xvci1wcm9maWxlXCI6IGNvbG9yUHJvZmlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjb2xvclJlbmRlcmluZzogY29sb3JSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJjb2xvci1yZW5kZXJpbmdcIjogY29sb3JSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgY29udGVudDogY29udGVudF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjb3VudGVySW5jcmVtZW50OiBjb3VudGVySW5jcmVtZW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiY291bnRlci1pbmNyZW1lbnRcIjogY291bnRlckluY3JlbWVudF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjb3VudGVyUmVzZXQ6IGNvdW50ZXJSZXNldF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImNvdW50ZXItcmVzZXRcIjogY291bnRlclJlc2V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGNzc0Zsb2F0OiBjc3NGbG9hdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImNzcy1mbG9hdFwiOiBjc3NGbG9hdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjdWU6IGN1ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjdWVBZnRlcjogY3VlQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJjdWUtYWZ0ZXJcIjogY3VlQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgY3VlQmVmb3JlOiBjdWVCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJjdWUtYmVmb3JlXCI6IGN1ZUJlZm9yZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjdXJzb3I6IGN1cnNvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBkaXJlY3Rpb246IGRpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBkaXNwbGF5OiBkaXNwbGF5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGRvbWluYW50QmFzZWxpbmU6IGRvbWluYW50QmFzZWxpbmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJkb21pbmFudC1iYXNlbGluZVwiOiBkb21pbmFudEJhc2VsaW5lX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGVsZXZhdGlvbjogZWxldmF0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGVtcHR5Q2VsbHM6IGVtcHR5Q2VsbHNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJlbXB0eS1jZWxsc1wiOiBlbXB0eUNlbGxzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGVuYWJsZUJhY2tncm91bmQ6IGVuYWJsZUJhY2tncm91bmRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJlbmFibGUtYmFja2dyb3VuZFwiOiBlbmFibGVCYWNrZ3JvdW5kX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZpbGw6IGZpbGxfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZmlsbE9wYWNpdHk6IGZpbGxPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiZmlsbC1vcGFjaXR5XCI6IGZpbGxPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZpbGxSdWxlOiBmaWxsUnVsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImZpbGwtcnVsZVwiOiBmaWxsUnVsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBmaWx0ZXI6IGZpbHRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBmbG9vZENvbG9yOiBmbG9vZENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiZmxvb2QtY29sb3JcIjogZmxvb2RDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBmbG9vZE9wYWNpdHk6IGZsb29kT3BhY2l0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImZsb29kLW9wYWNpdHlcIjogZmxvb2RPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZvbnRGYW1pbHk6IGZvbnRGYW1pbHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJmb250LWZhbWlseVwiOiBmb250RmFtaWx5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZvbnRTaXplOiBmb250U2l6ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImZvbnQtc2l6ZVwiOiBmb250U2l6ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBmb250U3R5bGU6IGZvbnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImZvbnQtc3R5bGVcIjogZm9udFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZvbnRWYXJpYW50OiBmb250VmFyaWFudF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImZvbnQtdmFyaWFudFwiOiBmb250VmFyaWFudF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBmb250V2VpZ2h0OiBmb250V2VpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiZm9udC13ZWlnaHRcIjogZm9udFdlaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBsaW5lSGVpZ2h0OiBsaW5lSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwibGluZS1oZWlnaHRcIjogbGluZUhlaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBmb250OiBmb250X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZvbnRTaXplQWRqdXN0OiBmb250U2l6ZUFkanVzdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImZvbnQtc2l6ZS1hZGp1c3RcIjogZm9udFNpemVBZGp1c3RfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZm9udFN0cmV0Y2g6IGZvbnRTdHJldGNoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiZm9udC1zdHJldGNoXCI6IGZvbnRTdHJldGNoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsOiBnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWxcIjogZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWxfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiBnbHlwaE9yaWVudGF0aW9uVmVydGljYWxfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbFwiOiBnbHlwaE9yaWVudGF0aW9uVmVydGljYWxfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaGVpZ2h0OiBoZWlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaW1hZ2VSZW5kZXJpbmc6IGltYWdlUmVuZGVyaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiaW1hZ2UtcmVuZGVyaW5nXCI6IGltYWdlUmVuZGVyaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGtlcm5pbmc6IGtlcm5pbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbGVmdDogbGVmdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBsZXR0ZXJTcGFjaW5nOiBsZXR0ZXJTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwibGV0dGVyLXNwYWNpbmdcIjogbGV0dGVyU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBsaWdodGluZ0NvbG9yOiBsaWdodGluZ0NvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwibGlnaHRpbmctY29sb3JcIjogbGlnaHRpbmdDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBsaXN0U3R5bGU6IGxpc3RTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImxpc3Qtc3R5bGVcIjogbGlzdFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGxpc3RTdHlsZUltYWdlOiBsaXN0U3R5bGVJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImxpc3Qtc3R5bGUtaW1hZ2VcIjogbGlzdFN0eWxlSW1hZ2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbGlzdFN0eWxlUG9zaXRpb246IGxpc3RTdHlsZVBvc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwibGlzdC1zdHlsZS1wb3NpdGlvblwiOiBsaXN0U3R5bGVQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBsaXN0U3R5bGVUeXBlOiBsaXN0U3R5bGVUeXBlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwibGlzdC1zdHlsZS10eXBlXCI6IGxpc3RTdHlsZVR5cGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbWFyZ2luOiBtYXJnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbWFyZ2luQm90dG9tOiBtYXJnaW5Cb3R0b21fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJtYXJnaW4tYm90dG9tXCI6IG1hcmdpbkJvdHRvbV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXJnaW5MZWZ0OiBtYXJnaW5MZWZ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwibWFyZ2luLWxlZnRcIjogbWFyZ2luTGVmdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXJnaW5SaWdodDogbWFyZ2luUmlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJtYXJnaW4tcmlnaHRcIjogbWFyZ2luUmlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbWFyZ2luVG9wOiBtYXJnaW5Ub3BfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJtYXJnaW4tdG9wXCI6IG1hcmdpblRvcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXJrZXI6IG1hcmtlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXJrZXJFbmQ6IG1hcmtlckVuZF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm1hcmtlci1lbmRcIjogbWFya2VyRW5kX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG1hcmtlck1pZDogbWFya2VyTWlkX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwibWFya2VyLW1pZFwiOiBtYXJrZXJNaWRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbWFya2VyT2Zmc2V0OiBtYXJrZXJPZmZzZXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJtYXJrZXItb2Zmc2V0XCI6IG1hcmtlck9mZnNldF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXJrZXJTdGFydDogbWFya2VyU3RhcnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJtYXJrZXItc3RhcnRcIjogbWFya2VyU3RhcnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbWFya3M6IG1hcmtzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG1hc2s6IG1hc2tfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbWF4SGVpZ2h0OiBtYXhIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJtYXgtaGVpZ2h0XCI6IG1heEhlaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXhXaWR0aDogbWF4V2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJtYXgtd2lkdGhcIjogbWF4V2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbWluSGVpZ2h0OiBtaW5IZWlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJtaW4taGVpZ2h0XCI6IG1pbkhlaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtaW5XaWR0aDogbWluV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJtaW4td2lkdGhcIjogbWluV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgb3BhY2l0eTogb3BhY2l0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBvcnBoYW5zOiBvcnBoYW5zX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG91dGxpbmU6IG91dGxpbmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgb3V0bGluZUNvbG9yOiBvdXRsaW5lQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJvdXRsaW5lLWNvbG9yXCI6IG91dGxpbmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBvdXRsaW5lT2Zmc2V0OiBvdXRsaW5lT2Zmc2V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwib3V0bGluZS1vZmZzZXRcIjogb3V0bGluZU9mZnNldF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBvdXRsaW5lU3R5bGU6IG91dGxpbmVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm91dGxpbmUtc3R5bGVcIjogb3V0bGluZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG91dGxpbmVXaWR0aDogb3V0bGluZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwib3V0bGluZS13aWR0aFwiOiBvdXRsaW5lV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgb3ZlcmZsb3c6IG92ZXJmbG93X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG92ZXJmbG93WDogb3ZlcmZsb3dYX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwib3ZlcmZsb3cteFwiOiBvdmVyZmxvd1hfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgb3ZlcmZsb3dZOiBvdmVyZmxvd1lfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJvdmVyZmxvdy15XCI6IG92ZXJmbG93WV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwYWRkaW5nOiBwYWRkaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBhZGRpbmdCb3R0b206IHBhZGRpbmdCb3R0b21fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJwYWRkaW5nLWJvdHRvbVwiOiBwYWRkaW5nQm90dG9tX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBhZGRpbmdMZWZ0OiBwYWRkaW5nTGVmdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInBhZGRpbmctbGVmdFwiOiBwYWRkaW5nTGVmdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwYWRkaW5nUmlnaHQ6IHBhZGRpbmdSaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInBhZGRpbmctcmlnaHRcIjogcGFkZGluZ1JpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBhZGRpbmdUb3A6IHBhZGRpbmdUb3BfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJwYWRkaW5nLXRvcFwiOiBwYWRkaW5nVG9wX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBhZ2U6IHBhZ2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcGFnZUJyZWFrQWZ0ZXI6IHBhZ2VCcmVha0FmdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwicGFnZS1icmVhay1hZnRlclwiOiBwYWdlQnJlYWtBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwYWdlQnJlYWtCZWZvcmU6IHBhZ2VCcmVha0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInBhZ2UtYnJlYWstYmVmb3JlXCI6IHBhZ2VCcmVha0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwYWdlQnJlYWtJbnNpZGU6IHBhZ2VCcmVha0luc2lkZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInBhZ2UtYnJlYWstaW5zaWRlXCI6IHBhZ2VCcmVha0luc2lkZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwYXVzZTogcGF1c2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcGF1c2VBZnRlcjogcGF1c2VBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInBhdXNlLWFmdGVyXCI6IHBhdXNlQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcGF1c2VCZWZvcmU6IHBhdXNlQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwicGF1c2UtYmVmb3JlXCI6IHBhdXNlQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBpdGNoOiBwaXRjaF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwaXRjaFJhbmdlOiBwaXRjaFJhbmdlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwicGl0Y2gtcmFuZ2VcIjogcGl0Y2hSYW5nZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwbGF5RHVyaW5nOiBwbGF5RHVyaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwicGxheS1kdXJpbmdcIjogcGxheUR1cmluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwb2ludGVyRXZlbnRzOiBwb2ludGVyRXZlbnRzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwicG9pbnRlci1ldmVudHNcIjogcG9pbnRlckV2ZW50c19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwb3NpdGlvbjogcG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcXVvdGVzOiBxdW90ZXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcmVzaXplOiByZXNpemVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcmljaG5lc3M6IHJpY2huZXNzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHJpZ2h0OiByaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzaGFwZVJlbmRlcmluZzogc2hhcGVSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJzaGFwZS1yZW5kZXJpbmdcIjogc2hhcGVSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc2l6ZTogc2l6ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzcGVhazogc3BlYWtfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3BlYWtIZWFkZXI6IHNwZWFrSGVhZGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwic3BlYWstaGVhZGVyXCI6IHNwZWFrSGVhZGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHNwZWFrTnVtZXJhbDogc3BlYWtOdW1lcmFsX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwic3BlYWstbnVtZXJhbFwiOiBzcGVha051bWVyYWxfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3BlYWtQdW5jdHVhdGlvbjogc3BlYWtQdW5jdHVhdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInNwZWFrLXB1bmN0dWF0aW9uXCI6IHNwZWFrUHVuY3R1YXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3BlZWNoUmF0ZTogc3BlZWNoUmF0ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInNwZWVjaC1yYXRlXCI6IHNwZWVjaFJhdGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3JjOiBzcmNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3RvcENvbG9yOiBzdG9wQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJzdG9wLWNvbG9yXCI6IHN0b3BDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzdG9wT3BhY2l0eTogc3RvcE9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJzdG9wLW9wYWNpdHlcIjogc3RvcE9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3RyZXNzOiBzdHJlc3NfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3Ryb2tlOiBzdHJva2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3Ryb2tlRGFzaGFycmF5OiBzdHJva2VEYXNoYXJyYXlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJzdHJva2UtZGFzaGFycmF5XCI6IHN0cm9rZURhc2hhcnJheV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzdHJva2VEYXNob2Zmc2V0OiBzdHJva2VEYXNob2Zmc2V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwic3Ryb2tlLWRhc2hvZmZzZXRcIjogc3Ryb2tlRGFzaG9mZnNldF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzdHJva2VMaW5lY2FwOiBzdHJva2VMaW5lY2FwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwic3Ryb2tlLWxpbmVjYXBcIjogc3Ryb2tlTGluZWNhcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzdHJva2VMaW5lam9pbjogc3Ryb2tlTGluZWpvaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJzdHJva2UtbGluZWpvaW5cIjogc3Ryb2tlTGluZWpvaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogc3Ryb2tlTWl0ZXJsaW1pdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInN0cm9rZS1taXRlcmxpbWl0XCI6IHN0cm9rZU1pdGVybGltaXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3Ryb2tlT3BhY2l0eTogc3Ryb2tlT3BhY2l0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInN0cm9rZS1vcGFjaXR5XCI6IHN0cm9rZU9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3Ryb2tlV2lkdGg6IHN0cm9rZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwic3Ryb2tlLXdpZHRoXCI6IHN0cm9rZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRhYmxlTGF5b3V0OiB0YWJsZUxheW91dF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRhYmxlLWxheW91dFwiOiB0YWJsZUxheW91dF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0QWxpZ246IHRleHRBbGlnbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtYWxpZ25cIjogdGV4dEFsaWduX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRBbmNob3I6IHRleHRBbmNob3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ0ZXh0LWFuY2hvclwiOiB0ZXh0QW5jaG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHREZWNvcmF0aW9uOiB0ZXh0RGVjb3JhdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtZGVjb3JhdGlvblwiOiB0ZXh0RGVjb3JhdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0SW5kZW50OiB0ZXh0SW5kZW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC1pbmRlbnRcIjogdGV4dEluZGVudF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0TGluZVRocm91Z2g6IHRleHRMaW5lVGhyb3VnaF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtbGluZS10aHJvdWdoXCI6IHRleHRMaW5lVGhyb3VnaF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0TGluZVRocm91Z2hDb2xvcjogdGV4dExpbmVUaHJvdWdoQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ0ZXh0LWxpbmUtdGhyb3VnaC1jb2xvclwiOiB0ZXh0TGluZVRocm91Z2hDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0TGluZVRocm91Z2hNb2RlOiB0ZXh0TGluZVRocm91Z2hNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC1saW5lLXRocm91Z2gtbW9kZVwiOiB0ZXh0TGluZVRocm91Z2hNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRMaW5lVGhyb3VnaFN0eWxlOiB0ZXh0TGluZVRocm91Z2hTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtbGluZS10aHJvdWdoLXN0eWxlXCI6IHRleHRMaW5lVGhyb3VnaFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRMaW5lVGhyb3VnaFdpZHRoOiB0ZXh0TGluZVRocm91Z2hXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtbGluZS10aHJvdWdoLXdpZHRoXCI6IHRleHRMaW5lVGhyb3VnaFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRPdmVyZmxvdzogdGV4dE92ZXJmbG93X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC1vdmVyZmxvd1wiOiB0ZXh0T3ZlcmZsb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dE92ZXJsaW5lOiB0ZXh0T3ZlcmxpbmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ0ZXh0LW92ZXJsaW5lXCI6IHRleHRPdmVybGluZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0T3ZlcmxpbmVDb2xvcjogdGV4dE92ZXJsaW5lQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ0ZXh0LW92ZXJsaW5lLWNvbG9yXCI6IHRleHRPdmVybGluZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRPdmVybGluZU1vZGU6IHRleHRPdmVybGluZU1vZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ0ZXh0LW92ZXJsaW5lLW1vZGVcIjogdGV4dE92ZXJsaW5lTW9kZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0T3ZlcmxpbmVTdHlsZTogdGV4dE92ZXJsaW5lU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ0ZXh0LW92ZXJsaW5lLXN0eWxlXCI6IHRleHRPdmVybGluZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRPdmVybGluZVdpZHRoOiB0ZXh0T3ZlcmxpbmVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtb3ZlcmxpbmUtd2lkdGhcIjogdGV4dE92ZXJsaW5lV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dFJlbmRlcmluZzogdGV4dFJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtcmVuZGVyaW5nXCI6IHRleHRSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dFNoYWRvdzogdGV4dFNoYWRvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtc2hhZG93XCI6IHRleHRTaGFkb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dFRyYW5zZm9ybTogdGV4dFRyYW5zZm9ybV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtdHJhbnNmb3JtXCI6IHRleHRUcmFuc2Zvcm1fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dFVuZGVybGluZTogdGV4dFVuZGVybGluZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtdW5kZXJsaW5lXCI6IHRleHRVbmRlcmxpbmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dFVuZGVybGluZUNvbG9yOiB0ZXh0VW5kZXJsaW5lQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ0ZXh0LXVuZGVybGluZS1jb2xvclwiOiB0ZXh0VW5kZXJsaW5lQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dFVuZGVybGluZU1vZGU6IHRleHRVbmRlcmxpbmVNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC11bmRlcmxpbmUtbW9kZVwiOiB0ZXh0VW5kZXJsaW5lTW9kZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0VW5kZXJsaW5lU3R5bGU6IHRleHRVbmRlcmxpbmVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtdW5kZXJsaW5lLXN0eWxlXCI6IHRleHRVbmRlcmxpbmVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0VW5kZXJsaW5lV2lkdGg6IHRleHRVbmRlcmxpbmVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtdW5kZXJsaW5lLXdpZHRoXCI6IHRleHRVbmRlcmxpbmVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0b3A6IHRvcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB1bmljb2RlQmlkaTogdW5pY29kZUJpZGlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ1bmljb2RlLWJpZGlcIjogdW5pY29kZUJpZGlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdW5pY29kZVJhbmdlOiB1bmljb2RlUmFuZ2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ1bmljb2RlLXJhbmdlXCI6IHVuaWNvZGVSYW5nZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB2ZWN0b3JFZmZlY3Q6IHZlY3RvckVmZmVjdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInZlY3Rvci1lZmZlY3RcIjogdmVjdG9yRWZmZWN0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHZlcnRpY2FsQWxpZ246IHZlcnRpY2FsQWxpZ25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ2ZXJ0aWNhbC1hbGlnblwiOiB2ZXJ0aWNhbEFsaWduX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHZpc2liaWxpdHk6IHZpc2liaWxpdHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdm9pY2VGYW1pbHk6IHZvaWNlRmFtaWx5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidm9pY2UtZmFtaWx5XCI6IHZvaWNlRmFtaWx5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHZvbHVtZTogdm9sdW1lX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEFuaW1hdGlvbjogd2Via2l0QW5pbWF0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWFuaW1hdGlvblwiOiB3ZWJraXRBbmltYXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0QW5pbWF0aW9uRGVsYXk6IHdlYmtpdEFuaW1hdGlvbkRlbGF5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWFuaW1hdGlvbi1kZWxheVwiOiB3ZWJraXRBbmltYXRpb25EZWxheV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRBbmltYXRpb25EaXJlY3Rpb246IHdlYmtpdEFuaW1hdGlvbkRpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uXCI6IHdlYmtpdEFuaW1hdGlvbkRpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRBbmltYXRpb25EdXJhdGlvbjogd2Via2l0QW5pbWF0aW9uRHVyYXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uXCI6IHdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlOiB3ZWJraXRBbmltYXRpb25GaWxsTW9kZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlXCI6IHdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiB3ZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50XCI6IHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEFuaW1hdGlvbk5hbWU6IHdlYmtpdEFuaW1hdGlvbk5hbWVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYW5pbWF0aW9uLW5hbWVcIjogd2Via2l0QW5pbWF0aW9uTmFtZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRBbmltYXRpb25QbGF5U3RhdGU6IHdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1hbmltYXRpb24tcGxheS1zdGF0ZVwiOiB3ZWJraXRBbmltYXRpb25QbGF5U3RhdGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246IHdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIjogd2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0QXBwZWFyYW5jZTogd2Via2l0QXBwZWFyYW5jZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1hcHBlYXJhbmNlXCI6IHdlYmtpdEFwcGVhcmFuY2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0QXNwZWN0UmF0aW86IHdlYmtpdEFzcGVjdFJhdGlvX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWFzcGVjdC1yYXRpb1wiOiB3ZWJraXRBc3BlY3RSYXRpb19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6IHdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5XCI6IHdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCYWNrZ3JvdW5kQ2xpcDogd2Via2l0QmFja2dyb3VuZENsaXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYmFja2dyb3VuZC1jbGlwXCI6IHdlYmtpdEJhY2tncm91bmRDbGlwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJhY2tncm91bmRDb21wb3NpdGU6IHdlYmtpdEJhY2tncm91bmRDb21wb3NpdGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYmFja2dyb3VuZC1jb21wb3NpdGVcIjogd2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCYWNrZ3JvdW5kT3JpZ2luOiB3ZWJraXRCYWNrZ3JvdW5kT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJhY2tncm91bmQtb3JpZ2luXCI6IHdlYmtpdEJhY2tncm91bmRPcmlnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0QmFja2dyb3VuZFNpemU6IHdlYmtpdEJhY2tncm91bmRTaXplX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJhY2tncm91bmQtc2l6ZVwiOiB3ZWJraXRCYWNrZ3JvdW5kU2l6ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3JkZXJBZnRlcjogd2Via2l0Qm9yZGVyQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm9yZGVyLWFmdGVyXCI6IHdlYmtpdEJvcmRlckFmdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckFmdGVyQ29sb3I6IHdlYmtpdEJvcmRlckFmdGVyQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm9yZGVyLWFmdGVyLWNvbG9yXCI6IHdlYmtpdEJvcmRlckFmdGVyQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZTogd2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItYWZ0ZXItc3R5bGVcIjogd2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3JkZXJBZnRlcldpZHRoOiB3ZWJraXRCb3JkZXJBZnRlcldpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1hZnRlci13aWR0aFwiOiB3ZWJraXRCb3JkZXJBZnRlcldpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckJlZm9yZTogd2Via2l0Qm9yZGVyQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1iZWZvcmVcIjogd2Via2l0Qm9yZGVyQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckJlZm9yZUNvbG9yOiB3ZWJraXRCb3JkZXJCZWZvcmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItYmVmb3JlLWNvbG9yXCI6IHdlYmtpdEJvcmRlckJlZm9yZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckJlZm9yZVN0eWxlOiB3ZWJraXRCb3JkZXJCZWZvcmVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItYmVmb3JlLXN0eWxlXCI6IHdlYmtpdEJvcmRlckJlZm9yZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckJlZm9yZVdpZHRoOiB3ZWJraXRCb3JkZXJCZWZvcmVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItYmVmb3JlLXdpZHRoXCI6IHdlYmtpdEJvcmRlckJlZm9yZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckVuZDogd2Via2l0Qm9yZGVyRW5kX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1lbmRcIjogd2Via2l0Qm9yZGVyRW5kX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckVuZENvbG9yOiB3ZWJraXRCb3JkZXJFbmRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItZW5kLWNvbG9yXCI6IHdlYmtpdEJvcmRlckVuZENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckVuZFN0eWxlOiB3ZWJraXRCb3JkZXJFbmRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItZW5kLXN0eWxlXCI6IHdlYmtpdEJvcmRlckVuZFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckVuZFdpZHRoOiB3ZWJraXRCb3JkZXJFbmRXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItZW5kLXdpZHRoXCI6IHdlYmtpdEJvcmRlckVuZFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckZpdDogd2Via2l0Qm9yZGVyRml0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1maXRcIjogd2Via2l0Qm9yZGVyRml0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nOiB3ZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItaG9yaXpvbnRhbC1zcGFjaW5nXCI6IHdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckltYWdlOiB3ZWJraXRCb3JkZXJJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItaW1hZ2VcIjogd2Via2l0Qm9yZGVySW1hZ2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyUmFkaXVzOiB3ZWJraXRCb3JkZXJSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm9yZGVyLXJhZGl1c1wiOiB3ZWJraXRCb3JkZXJSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyU3RhcnQ6IHdlYmtpdEJvcmRlclN0YXJ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1zdGFydFwiOiB3ZWJraXRCb3JkZXJTdGFydF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3JkZXJTdGFydENvbG9yOiB3ZWJraXRCb3JkZXJTdGFydENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1zdGFydC1jb2xvclwiOiB3ZWJraXRCb3JkZXJTdGFydENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlclN0YXJ0U3R5bGU6IHdlYmtpdEJvcmRlclN0YXJ0U3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm9yZGVyLXN0YXJ0LXN0eWxlXCI6IHdlYmtpdEJvcmRlclN0YXJ0U3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyU3RhcnRXaWR0aDogd2Via2l0Qm9yZGVyU3RhcnRXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItc3RhcnQtd2lkdGhcIjogd2Via2l0Qm9yZGVyU3RhcnRXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmc6IHdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItdmVydGljYWwtc3BhY2luZ1wiOiB3ZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm94QWxpZ246IHdlYmtpdEJveEFsaWduX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJveC1hbGlnblwiOiB3ZWJraXRCb3hBbGlnbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3hEaXJlY3Rpb246IHdlYmtpdEJveERpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3gtZGlyZWN0aW9uXCI6IHdlYmtpdEJveERpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3hGbGV4OiB3ZWJraXRCb3hGbGV4X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJveC1mbGV4XCI6IHdlYmtpdEJveEZsZXhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm94RmxleEdyb3VwOiB3ZWJraXRCb3hGbGV4R3JvdXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm94LWZsZXgtZ3JvdXBcIjogd2Via2l0Qm94RmxleEdyb3VwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJveExpbmVzOiB3ZWJraXRCb3hMaW5lc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3gtbGluZXNcIjogd2Via2l0Qm94TGluZXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm94T3JkaW5hbEdyb3VwOiB3ZWJraXRCb3hPcmRpbmFsR3JvdXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm94LW9yZGluYWwtZ3JvdXBcIjogd2Via2l0Qm94T3JkaW5hbEdyb3VwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJveE9yaWVudDogd2Via2l0Qm94T3JpZW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJveC1vcmllbnRcIjogd2Via2l0Qm94T3JpZW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJveFBhY2s6IHdlYmtpdEJveFBhY2tfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm94LXBhY2tcIjogd2Via2l0Qm94UGFja19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3hSZWZsZWN0OiB3ZWJraXRCb3hSZWZsZWN0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJveC1yZWZsZWN0XCI6IHdlYmtpdEJveFJlZmxlY3RfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm94U2hhZG93OiB3ZWJraXRCb3hTaGFkb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm94LXNoYWRvd1wiOiB3ZWJraXRCb3hTaGFkb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Q29sb3JDb3JyZWN0aW9uOiB3ZWJraXRDb2xvckNvcnJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtY29sb3ItY29ycmVjdGlvblwiOiB3ZWJraXRDb2xvckNvcnJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Q29sdW1uQXhpczogd2Via2l0Q29sdW1uQXhpc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1jb2x1bW4tYXhpc1wiOiB3ZWJraXRDb2x1bW5BeGlzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdENvbHVtbkJyZWFrQWZ0ZXI6IHdlYmtpdENvbHVtbkJyZWFrQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtY29sdW1uLWJyZWFrLWFmdGVyXCI6IHdlYmtpdENvbHVtbkJyZWFrQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Q29sdW1uQnJlYWtCZWZvcmU6IHdlYmtpdENvbHVtbkJyZWFrQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWNvbHVtbi1icmVhay1iZWZvcmVcIjogd2Via2l0Q29sdW1uQnJlYWtCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Q29sdW1uQnJlYWtJbnNpZGU6IHdlYmtpdENvbHVtbkJyZWFrSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWNvbHVtbi1icmVhay1pbnNpZGVcIjogd2Via2l0Q29sdW1uQnJlYWtJbnNpZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Q29sdW1uQ291bnQ6IHdlYmtpdENvbHVtbkNvdW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWNvbHVtbi1jb3VudFwiOiB3ZWJraXRDb2x1bW5Db3VudF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRDb2x1bW5HYXA6IHdlYmtpdENvbHVtbkdhcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1jb2x1bW4tZ2FwXCI6IHdlYmtpdENvbHVtbkdhcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRDb2x1bW5SdWxlOiB3ZWJraXRDb2x1bW5SdWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWNvbHVtbi1ydWxlXCI6IHdlYmtpdENvbHVtblJ1bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Q29sdW1uUnVsZUNvbG9yOiB3ZWJraXRDb2x1bW5SdWxlQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtY29sdW1uLXJ1bGUtY29sb3JcIjogd2Via2l0Q29sdW1uUnVsZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdENvbHVtblJ1bGVTdHlsZTogd2Via2l0Q29sdW1uUnVsZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWNvbHVtbi1ydWxlLXN0eWxlXCI6IHdlYmtpdENvbHVtblJ1bGVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRDb2x1bW5SdWxlV2lkdGg6IHdlYmtpdENvbHVtblJ1bGVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1jb2x1bW4tcnVsZS13aWR0aFwiOiB3ZWJraXRDb2x1bW5SdWxlV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Q29sdW1uU3Bhbjogd2Via2l0Q29sdW1uU3Bhbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1jb2x1bW4tc3BhblwiOiB3ZWJraXRDb2x1bW5TcGFuX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdENvbHVtbldpZHRoOiB3ZWJraXRDb2x1bW5XaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1jb2x1bW4td2lkdGhcIjogd2Via2l0Q29sdW1uV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Q29sdW1uczogd2Via2l0Q29sdW1uc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1jb2x1bW5zXCI6IHdlYmtpdENvbHVtbnNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0RmlsdGVyOiB3ZWJraXRGaWx0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZmlsdGVyXCI6IHdlYmtpdEZpbHRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGbGV4QWxpZ246IHdlYmtpdEZsZXhBbGlnbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1mbGV4LWFsaWduXCI6IHdlYmtpdEZsZXhBbGlnbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGbGV4RGlyZWN0aW9uOiB3ZWJraXRGbGV4RGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWZsZXgtZGlyZWN0aW9uXCI6IHdlYmtpdEZsZXhEaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0RmxleEZsb3c6IHdlYmtpdEZsZXhGbG93X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWZsZXgtZmxvd1wiOiB3ZWJraXRGbGV4Rmxvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGbGV4SXRlbUFsaWduOiB3ZWJraXRGbGV4SXRlbUFsaWduX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWZsZXgtaXRlbS1hbGlnblwiOiB3ZWJraXRGbGV4SXRlbUFsaWduX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZsZXhMaW5lUGFjazogd2Via2l0RmxleExpbmVQYWNrX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWZsZXgtbGluZS1wYWNrXCI6IHdlYmtpdEZsZXhMaW5lUGFja19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGbGV4T3JkZXI6IHdlYmtpdEZsZXhPcmRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1mbGV4LW9yZGVyXCI6IHdlYmtpdEZsZXhPcmRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGbGV4UGFjazogd2Via2l0RmxleFBhY2tfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZmxleC1wYWNrXCI6IHdlYmtpdEZsZXhQYWNrX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZsZXhXcmFwOiB3ZWJraXRGbGV4V3JhcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1mbGV4LXdyYXBcIjogd2Via2l0RmxleFdyYXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Rmxvd0Zyb206IHdlYmtpdEZsb3dGcm9tX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWZsb3ctZnJvbVwiOiB3ZWJraXRGbG93RnJvbV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGbG93SW50bzogd2Via2l0Rmxvd0ludG9fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZmxvdy1pbnRvXCI6IHdlYmtpdEZsb3dJbnRvX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3NfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzXCI6IHdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3NfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Rm9udEtlcm5pbmc6IHdlYmtpdEZvbnRLZXJuaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWZvbnQta2VybmluZ1wiOiB3ZWJraXRGb250S2VybmluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGb250U2l6ZURlbHRhOiB3ZWJraXRGb250U2l6ZURlbHRhX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWZvbnQtc2l6ZS1kZWx0YVwiOiB3ZWJraXRGb250U2l6ZURlbHRhX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZvbnRTbW9vdGhpbmc6IHdlYmtpdEZvbnRTbW9vdGhpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZm9udC1zbW9vdGhpbmdcIjogd2Via2l0Rm9udFNtb290aGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGb250VmFyaWFudExpZ2F0dXJlczogd2Via2l0Rm9udFZhcmlhbnRMaWdhdHVyZXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZm9udC12YXJpYW50LWxpZ2F0dXJlc1wiOiB3ZWJraXRGb250VmFyaWFudExpZ2F0dXJlc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRIaWdobGlnaHQ6IHdlYmtpdEhpZ2hsaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1oaWdobGlnaHRcIjogd2Via2l0SGlnaGxpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEh5cGhlbmF0ZUNoYXJhY3Rlcjogd2Via2l0SHlwaGVuYXRlQ2hhcmFjdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWh5cGhlbmF0ZS1jaGFyYWN0ZXJcIjogd2Via2l0SHlwaGVuYXRlQ2hhcmFjdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEh5cGhlbmF0ZUxpbWl0QWZ0ZXI6IHdlYmtpdEh5cGhlbmF0ZUxpbWl0QWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtaHlwaGVuYXRlLWxpbWl0LWFmdGVyXCI6IHdlYmtpdEh5cGhlbmF0ZUxpbWl0QWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0SHlwaGVuYXRlTGltaXRCZWZvcmU6IHdlYmtpdEh5cGhlbmF0ZUxpbWl0QmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWh5cGhlbmF0ZS1saW1pdC1iZWZvcmVcIjogd2Via2l0SHlwaGVuYXRlTGltaXRCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0SHlwaGVuYXRlTGltaXRMaW5lczogd2Via2l0SHlwaGVuYXRlTGltaXRMaW5lc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1oeXBoZW5hdGUtbGltaXQtbGluZXNcIjogd2Via2l0SHlwaGVuYXRlTGltaXRMaW5lc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRIeXBoZW5zOiB3ZWJraXRIeXBoZW5zX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWh5cGhlbnNcIjogd2Via2l0SHlwaGVuc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRMaW5lQWxpZ246IHdlYmtpdExpbmVBbGlnbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1saW5lLWFsaWduXCI6IHdlYmtpdExpbmVBbGlnbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRMaW5lQm94Q29udGFpbjogd2Via2l0TGluZUJveENvbnRhaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbGluZS1ib3gtY29udGFpblwiOiB3ZWJraXRMaW5lQm94Q29udGFpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRMaW5lQnJlYWs6IHdlYmtpdExpbmVCcmVha19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1saW5lLWJyZWFrXCI6IHdlYmtpdExpbmVCcmVha19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRMaW5lQ2xhbXA6IHdlYmtpdExpbmVDbGFtcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1saW5lLWNsYW1wXCI6IHdlYmtpdExpbmVDbGFtcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRMaW5lR3JpZDogd2Via2l0TGluZUdyaWRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbGluZS1ncmlkXCI6IHdlYmtpdExpbmVHcmlkX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdExpbmVTbmFwOiB3ZWJraXRMaW5lU25hcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1saW5lLXNuYXBcIjogd2Via2l0TGluZVNuYXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TG9jYWxlOiB3ZWJraXRMb2NhbGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbG9jYWxlXCI6IHdlYmtpdExvY2FsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRMb2dpY2FsSGVpZ2h0OiB3ZWJraXRMb2dpY2FsSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWxvZ2ljYWwtaGVpZ2h0XCI6IHdlYmtpdExvZ2ljYWxIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TG9naWNhbFdpZHRoOiB3ZWJraXRMb2dpY2FsV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbG9naWNhbC13aWR0aFwiOiB3ZWJraXRMb2dpY2FsV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFyZ2luQWZ0ZXI6IHdlYmtpdE1hcmdpbkFmdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hcmdpbi1hZnRlclwiOiB3ZWJraXRNYXJnaW5BZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlOiB3ZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hcmdpbi1hZnRlci1jb2xsYXBzZVwiOiB3ZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hcmdpbkJlZm9yZTogd2Via2l0TWFyZ2luQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hcmdpbi1iZWZvcmVcIjogd2Via2l0TWFyZ2luQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlOiB3ZWJraXRNYXJnaW5CZWZvcmVDb2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXJnaW4tYmVmb3JlLWNvbGxhcHNlXCI6IHdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hcmdpbkJvdHRvbUNvbGxhcHNlOiB3ZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXJnaW4tYm90dG9tLWNvbGxhcHNlXCI6IHdlYmtpdE1hcmdpbkJvdHRvbUNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hcmdpbkNvbGxhcHNlOiB3ZWJraXRNYXJnaW5Db2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXJnaW4tY29sbGFwc2VcIjogd2Via2l0TWFyZ2luQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFyZ2luRW5kOiB3ZWJraXRNYXJnaW5FbmRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFyZ2luLWVuZFwiOiB3ZWJraXRNYXJnaW5FbmRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFyZ2luU3RhcnQ6IHdlYmtpdE1hcmdpblN0YXJ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hcmdpbi1zdGFydFwiOiB3ZWJraXRNYXJnaW5TdGFydF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXJnaW5Ub3BDb2xsYXBzZTogd2Via2l0TWFyZ2luVG9wQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFyZ2luLXRvcC1jb2xsYXBzZVwiOiB3ZWJraXRNYXJnaW5Ub3BDb2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXJxdWVlOiB3ZWJraXRNYXJxdWVlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hcnF1ZWVcIjogd2Via2l0TWFycXVlZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXJxdWVlRGlyZWN0aW9uOiB3ZWJraXRNYXJxdWVlRGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hcnF1ZWUtZGlyZWN0aW9uXCI6IHdlYmtpdE1hcnF1ZWVEaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFycXVlZUluY3JlbWVudDogd2Via2l0TWFycXVlZUluY3JlbWVudF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXJxdWVlLWluY3JlbWVudFwiOiB3ZWJraXRNYXJxdWVlSW5jcmVtZW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uOiB3ZWJraXRNYXJxdWVlUmVwZXRpdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXJxdWVlLXJlcGV0aXRpb25cIjogd2Via2l0TWFycXVlZVJlcGV0aXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFycXVlZVNwZWVkOiB3ZWJraXRNYXJxdWVlU3BlZWRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFycXVlZS1zcGVlZFwiOiB3ZWJraXRNYXJxdWVlU3BlZWRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFycXVlZVN0eWxlOiB3ZWJraXRNYXJxdWVlU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFycXVlZS1zdHlsZVwiOiB3ZWJraXRNYXJxdWVlU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFzazogd2Via2l0TWFza19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrXCI6IHdlYmtpdE1hc2tfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFza0F0dGFjaG1lbnQ6IHdlYmtpdE1hc2tBdHRhY2htZW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hc2stYXR0YWNobWVudFwiOiB3ZWJraXRNYXNrQXR0YWNobWVudF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrQm94SW1hZ2U6IHdlYmtpdE1hc2tCb3hJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLWJveC1pbWFnZVwiOiB3ZWJraXRNYXNrQm94SW1hZ2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFza0JveEltYWdlT3V0c2V0OiB3ZWJraXRNYXNrQm94SW1hZ2VPdXRzZXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFzay1ib3gtaW1hZ2Utb3V0c2V0XCI6IHdlYmtpdE1hc2tCb3hJbWFnZU91dHNldF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrQm94SW1hZ2VSZXBlYXQ6IHdlYmtpdE1hc2tCb3hJbWFnZVJlcGVhdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLWJveC1pbWFnZS1yZXBlYXRcIjogd2Via2l0TWFza0JveEltYWdlUmVwZWF0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tCb3hJbWFnZVNsaWNlOiB3ZWJraXRNYXNrQm94SW1hZ2VTbGljZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLWJveC1pbWFnZS1zbGljZVwiOiB3ZWJraXRNYXNrQm94SW1hZ2VTbGljZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6IHdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLWJveC1pbWFnZS1zb3VyY2VcIjogd2Via2l0TWFza0JveEltYWdlU291cmNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tCb3hJbWFnZVdpZHRoOiB3ZWJraXRNYXNrQm94SW1hZ2VXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLWJveC1pbWFnZS13aWR0aFwiOiB3ZWJraXRNYXNrQm94SW1hZ2VXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrQ2xpcDogd2Via2l0TWFza0NsaXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFzay1jbGlwXCI6IHdlYmtpdE1hc2tDbGlwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tDb21wb3NpdGU6IHdlYmtpdE1hc2tDb21wb3NpdGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFzay1jb21wb3NpdGVcIjogd2Via2l0TWFza0NvbXBvc2l0ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrSW1hZ2U6IHdlYmtpdE1hc2tJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLWltYWdlXCI6IHdlYmtpdE1hc2tJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrT3JpZ2luOiB3ZWJraXRNYXNrT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hc2stb3JpZ2luXCI6IHdlYmtpdE1hc2tPcmlnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFza1Bvc2l0aW9uOiB3ZWJraXRNYXNrUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFzay1wb3NpdGlvblwiOiB3ZWJraXRNYXNrUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFza1Bvc2l0aW9uWDogd2Via2l0TWFza1Bvc2l0aW9uWF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLXBvc2l0aW9uLXhcIjogd2Via2l0TWFza1Bvc2l0aW9uWF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrUG9zaXRpb25ZOiB3ZWJraXRNYXNrUG9zaXRpb25ZX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hc2stcG9zaXRpb24teVwiOiB3ZWJraXRNYXNrUG9zaXRpb25ZX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tSZXBlYXQ6IHdlYmtpdE1hc2tSZXBlYXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFzay1yZXBlYXRcIjogd2Via2l0TWFza1JlcGVhdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrUmVwZWF0WDogd2Via2l0TWFza1JlcGVhdFhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFzay1yZXBlYXQteFwiOiB3ZWJraXRNYXNrUmVwZWF0WF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrUmVwZWF0WTogd2Via2l0TWFza1JlcGVhdFlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFzay1yZXBlYXQteVwiOiB3ZWJraXRNYXNrUmVwZWF0WV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrU2l6ZTogd2Via2l0TWFza1NpemVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFzay1zaXplXCI6IHdlYmtpdE1hc2tTaXplX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hdGNoTmVhcmVzdE1haWxCbG9ja3F1b3RlQ29sb3I6IHdlYmtpdE1hdGNoTmVhcmVzdE1haWxCbG9ja3F1b3RlQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWF0Y2gtbmVhcmVzdC1tYWlsLWJsb2NrcXVvdGUtY29sb3JcIjogd2Via2l0TWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXhMb2dpY2FsSGVpZ2h0OiB3ZWJraXRNYXhMb2dpY2FsSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1heC1sb2dpY2FsLWhlaWdodFwiOiB3ZWJraXRNYXhMb2dpY2FsSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1heExvZ2ljYWxXaWR0aDogd2Via2l0TWF4TG9naWNhbFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1heC1sb2dpY2FsLXdpZHRoXCI6IHdlYmtpdE1heExvZ2ljYWxXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNaW5Mb2dpY2FsSGVpZ2h0OiB3ZWJraXRNaW5Mb2dpY2FsSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1pbi1sb2dpY2FsLWhlaWdodFwiOiB3ZWJraXRNaW5Mb2dpY2FsSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1pbkxvZ2ljYWxXaWR0aDogd2Via2l0TWluTG9naWNhbFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1pbi1sb2dpY2FsLXdpZHRoXCI6IHdlYmtpdE1pbkxvZ2ljYWxXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXROYnNwTW9kZTogd2Via2l0TmJzcE1vZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbmJzcC1tb2RlXCI6IHdlYmtpdE5ic3BNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiB3ZWJraXRPdmVyZmxvd1Njcm9sbGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmdcIjogd2Via2l0T3ZlcmZsb3dTY3JvbGxpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0UGFkZGluZ0FmdGVyOiB3ZWJraXRQYWRkaW5nQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtcGFkZGluZy1hZnRlclwiOiB3ZWJraXRQYWRkaW5nQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0UGFkZGluZ0JlZm9yZTogd2Via2l0UGFkZGluZ0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1wYWRkaW5nLWJlZm9yZVwiOiB3ZWJraXRQYWRkaW5nQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFBhZGRpbmdFbmQ6IHdlYmtpdFBhZGRpbmdFbmRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtcGFkZGluZy1lbmRcIjogd2Via2l0UGFkZGluZ0VuZF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRQYWRkaW5nU3RhcnQ6IHdlYmtpdFBhZGRpbmdTdGFydF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1wYWRkaW5nLXN0YXJ0XCI6IHdlYmtpdFBhZGRpbmdTdGFydF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRQZXJzcGVjdGl2ZTogd2Via2l0UGVyc3BlY3RpdmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtcGVyc3BlY3RpdmVcIjogd2Via2l0UGVyc3BlY3RpdmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0UGVyc3BlY3RpdmVPcmlnaW46IHdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpblwiOiB3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpblg6IHdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1wZXJzcGVjdGl2ZS1vcmlnaW4teFwiOiB3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpblhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0UGVyc3BlY3RpdmVPcmlnaW5ZOiB3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpbllfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luLXlcIjogd2Via2l0UGVyc3BlY3RpdmVPcmlnaW5ZX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFByaW50Q29sb3JBZGp1c3Q6IHdlYmtpdFByaW50Q29sb3JBZGp1c3RfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0XCI6IHdlYmtpdFByaW50Q29sb3JBZGp1c3RfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0UmVnaW9uQnJlYWtBZnRlcjogd2Via2l0UmVnaW9uQnJlYWtBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1yZWdpb24tYnJlYWstYWZ0ZXJcIjogd2Via2l0UmVnaW9uQnJlYWtBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRSZWdpb25CcmVha0JlZm9yZTogd2Via2l0UmVnaW9uQnJlYWtCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtcmVnaW9uLWJyZWFrLWJlZm9yZVwiOiB3ZWJraXRSZWdpb25CcmVha0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRSZWdpb25CcmVha0luc2lkZTogd2Via2l0UmVnaW9uQnJlYWtJbnNpZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtcmVnaW9uLWJyZWFrLWluc2lkZVwiOiB3ZWJraXRSZWdpb25CcmVha0luc2lkZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRSZWdpb25PdmVyZmxvdzogd2Via2l0UmVnaW9uT3ZlcmZsb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtcmVnaW9uLW92ZXJmbG93XCI6IHdlYmtpdFJlZ2lvbk92ZXJmbG93X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFJ0bE9yZGVyaW5nOiB3ZWJraXRSdGxPcmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ydGwtb3JkZXJpbmdcIjogd2Via2l0UnRsT3JkZXJpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0U3ZnU2hhZG93OiB3ZWJraXRTdmdTaGFkb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtc3ZnLXNoYWRvd1wiOiB3ZWJraXRTdmdTaGFkb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6IHdlYmtpdFRhcEhpZ2hsaWdodENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3JcIjogd2Via2l0VGFwSGlnaGxpZ2h0Q29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VGV4dENvbWJpbmU6IHdlYmtpdFRleHRDb21iaW5lX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRleHQtY29tYmluZVwiOiB3ZWJraXRUZXh0Q29tYmluZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdDogd2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3RfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3RcIjogd2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3RfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VGV4dEVtcGhhc2lzOiB3ZWJraXRUZXh0RW1waGFzaXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdGV4dC1lbXBoYXNpc1wiOiB3ZWJraXRUZXh0RW1waGFzaXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6IHdlYmtpdFRleHRFbXBoYXNpc0NvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRleHQtZW1waGFzaXMtY29sb3JcIjogd2Via2l0VGV4dEVtcGhhc2lzQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb246IHdlYmtpdFRleHRFbXBoYXNpc1Bvc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRleHQtZW1waGFzaXMtcG9zaXRpb25cIjogd2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VGV4dEVtcGhhc2lzU3R5bGU6IHdlYmtpdFRleHRFbXBoYXNpc1N0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRleHQtZW1waGFzaXMtc3R5bGVcIjogd2Via2l0VGV4dEVtcGhhc2lzU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VGV4dEZpbGxDb2xvcjogd2Via2l0VGV4dEZpbGxDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10ZXh0LWZpbGwtY29sb3JcIjogd2Via2l0VGV4dEZpbGxDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0T3JpZW50YXRpb246IHdlYmtpdFRleHRPcmllbnRhdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10ZXh0LW9yaWVudGF0aW9uXCI6IHdlYmtpdFRleHRPcmllbnRhdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0U2VjdXJpdHk6IHdlYmtpdFRleHRTZWN1cml0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10ZXh0LXNlY3VyaXR5XCI6IHdlYmtpdFRleHRTZWN1cml0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0U2l6ZUFkanVzdDogd2Via2l0VGV4dFNpemVBZGp1c3RfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdGV4dC1zaXplLWFkanVzdFwiOiB3ZWJraXRUZXh0U2l6ZUFkanVzdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0U3Ryb2tlOiB3ZWJraXRUZXh0U3Ryb2tlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRleHQtc3Ryb2tlXCI6IHdlYmtpdFRleHRTdHJva2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VGV4dFN0cm9rZUNvbG9yOiB3ZWJraXRUZXh0U3Ryb2tlQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdGV4dC1zdHJva2UtY29sb3JcIjogd2Via2l0VGV4dFN0cm9rZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFRleHRTdHJva2VXaWR0aDogd2Via2l0VGV4dFN0cm9rZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoXCI6IHdlYmtpdFRleHRTdHJva2VXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUcmFuc2Zvcm06IHdlYmtpdFRyYW5zZm9ybV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10cmFuc2Zvcm1cIjogd2Via2l0VHJhbnNmb3JtX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFRyYW5zZm9ybU9yaWdpbjogd2Via2l0VHJhbnNmb3JtT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRyYW5zZm9ybS1vcmlnaW5cIjogd2Via2l0VHJhbnNmb3JtT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFRyYW5zZm9ybU9yaWdpblg6IHdlYmtpdFRyYW5zZm9ybU9yaWdpblhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi14XCI6IHdlYmtpdFRyYW5zZm9ybU9yaWdpblhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VHJhbnNmb3JtT3JpZ2luWTogd2Via2l0VHJhbnNmb3JtT3JpZ2luWV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXlcIjogd2Via2l0VHJhbnNmb3JtT3JpZ2luWV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUcmFuc2Zvcm1PcmlnaW5aOiB3ZWJraXRUcmFuc2Zvcm1PcmlnaW5aX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRyYW5zZm9ybS1vcmlnaW4telwiOiB3ZWJraXRUcmFuc2Zvcm1PcmlnaW5aX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFRyYW5zZm9ybVN0eWxlOiB3ZWJraXRUcmFuc2Zvcm1TdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10cmFuc2Zvcm0tc3R5bGVcIjogd2Via2l0VHJhbnNmb3JtU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VHJhbnNpdGlvbjogd2Via2l0VHJhbnNpdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10cmFuc2l0aW9uXCI6IHdlYmtpdFRyYW5zaXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VHJhbnNpdGlvbkRlbGF5OiB3ZWJraXRUcmFuc2l0aW9uRGVsYXlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdHJhbnNpdGlvbi1kZWxheVwiOiB3ZWJraXRUcmFuc2l0aW9uRGVsYXlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOiB3ZWJraXRUcmFuc2l0aW9uRHVyYXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvblwiOiB3ZWJraXRUcmFuc2l0aW9uRHVyYXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VHJhbnNpdGlvblByb3BlcnR5OiB3ZWJraXRUcmFuc2l0aW9uUHJvcGVydHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eVwiOiB3ZWJraXRUcmFuc2l0aW9uUHJvcGVydHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOiB3ZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25cIjogd2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFVzZXJEcmFnOiB3ZWJraXRVc2VyRHJhZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC11c2VyLWRyYWdcIjogd2Via2l0VXNlckRyYWdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VXNlck1vZGlmeTogd2Via2l0VXNlck1vZGlmeV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC11c2VyLW1vZGlmeVwiOiB3ZWJraXRVc2VyTW9kaWZ5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFVzZXJTZWxlY3Q6IHdlYmtpdFVzZXJTZWxlY3RfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdXNlci1zZWxlY3RcIjogd2Via2l0VXNlclNlbGVjdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRXcmFwOiB3ZWJraXRXcmFwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXdyYXBcIjogd2Via2l0V3JhcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRXcmFwRmxvdzogd2Via2l0V3JhcEZsb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtd3JhcC1mbG93XCI6IHdlYmtpdFdyYXBGbG93X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFdyYXBNYXJnaW46IHdlYmtpdFdyYXBNYXJnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtd3JhcC1tYXJnaW5cIjogd2Via2l0V3JhcE1hcmdpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRXcmFwUGFkZGluZzogd2Via2l0V3JhcFBhZGRpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtd3JhcC1wYWRkaW5nXCI6IHdlYmtpdFdyYXBQYWRkaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFdyYXBTaGFwZUluc2lkZTogd2Via2l0V3JhcFNoYXBlSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXdyYXAtc2hhcGUtaW5zaWRlXCI6IHdlYmtpdFdyYXBTaGFwZUluc2lkZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRXcmFwU2hhcGVPdXRzaWRlOiB3ZWJraXRXcmFwU2hhcGVPdXRzaWRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXdyYXAtc2hhcGUtb3V0c2lkZVwiOiB3ZWJraXRXcmFwU2hhcGVPdXRzaWRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFdyYXBUaHJvdWdoOiB3ZWJraXRXcmFwVGhyb3VnaF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC13cmFwLXRocm91Z2hcIjogd2Via2l0V3JhcFRocm91Z2hfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0V3JpdGluZ01vZGU6IHdlYmtpdFdyaXRpbmdNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXdyaXRpbmctbW9kZVwiOiB3ZWJraXRXcml0aW5nTW9kZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3aGl0ZVNwYWNlOiB3aGl0ZVNwYWNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2hpdGUtc3BhY2VcIjogd2hpdGVTcGFjZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3aWRvd3M6IHdpZG93c19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3aWR0aDogd2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd29yZEJyZWFrOiB3b3JkQnJlYWtfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3b3JkLWJyZWFrXCI6IHdvcmRCcmVha19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3b3JkU3BhY2luZzogd29yZFNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3b3JkLXNwYWNpbmdcIjogd29yZFNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd29yZFdyYXA6IHdvcmRXcmFwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid29yZC13cmFwXCI6IHdvcmRXcmFwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdyaXRpbmdNb2RlOiB3cml0aW5nTW9kZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndyaXRpbmctbW9kZVwiOiB3cml0aW5nTW9kZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB6SW5kZXg6IHpJbmRleF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInotaW5kZXhcIjogekluZGV4X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHpvb206IHpvb21fZXhwb3J0X2RlZmluaXRpb25cbiAgfSk7XG59O1xuIiwidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERlbGF5ZWRTdHJlYW07XG5mdW5jdGlvbiBEZWxheWVkU3RyZWFtKCkge1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW0gPSB0cnVlO1xuXG4gIHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQgPSBmYWxzZTtcbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMgPSBbXTtcbn1cbnV0aWwuaW5oZXJpdHMoRGVsYXllZFN0cmVhbSwgU3RyZWFtKTtcblxuRGVsYXllZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGRlbGF5ZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGRlbGF5ZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIGRlbGF5ZWRTdHJlYW0uc291cmNlID0gc291cmNlO1xuXG4gIHZhciByZWFsRW1pdCA9IHNvdXJjZS5lbWl0O1xuICBzb3VyY2UuZW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlbGF5ZWRTdHJlYW0uX2hhbmRsZUVtaXQoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcmVhbEVtaXQuYXBwbHkoc291cmNlLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHNvdXJjZS5vbignZXJyb3InLCBmdW5jdGlvbigpIHt9KTtcbiAgaWYgKGRlbGF5ZWRTdHJlYW0ucGF1c2VTdHJlYW0pIHtcbiAgICBzb3VyY2UucGF1c2UoKTtcbiAgfVxuXG4gIHJldHVybiBkZWxheWVkU3RyZWFtO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLCAncmVhZGFibGUnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2UucmVhZGFibGU7XG4gIH1cbn0pO1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2Uuc2V0RW5jb2RpbmcuYXBwbHkodGhpcy5zb3VyY2UsIGFyZ3VtZW50cyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMucmVsZWFzZSgpO1xuICB9XG5cbiAgdGhpcy5zb3VyY2UucmVzdW1lKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihhcmdzKSB7XG4gICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9LmJpbmQodGhpcykpO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgciA9IFN0cmVhbS5wcm90b3R5cGUucGlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gcjtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFbWl0ID0gZnVuY3Rpb24oYXJncykge1xuICBpZiAodGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFyZ3NbMF0gPT09ICdkYXRhJykge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gYXJnc1sxXS5sZW5ndGg7XG4gICAgdGhpcy5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQoKTtcbiAgfVxuXG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzLnB1c2goYXJncyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IHRydWU7XG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJ1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMudXRpbHMgPSByZXF1aXJlKCcuL2Rlcy91dGlscycpO1xuZXhwb3J0cy5DaXBoZXIgPSByZXF1aXJlKCcuL2Rlcy9jaXBoZXInKTtcbmV4cG9ydHMuREVTID0gcmVxdWlyZSgnLi9kZXMvZGVzJyk7XG5leHBvcnRzLkNCQyA9IHJlcXVpcmUoJy4vZGVzL2NiYycpO1xuZXhwb3J0cy5FREUgPSByZXF1aXJlKCcuL2Rlcy9lZGUnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBwcm90byA9IHt9O1xuXG5mdW5jdGlvbiBDQkNTdGF0ZShpdikge1xuICBhc3NlcnQuZXF1YWwoaXYubGVuZ3RoLCA4LCAnSW52YWxpZCBJViBsZW5ndGgnKTtcblxuICB0aGlzLml2ID0gbmV3IEFycmF5KDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXYubGVuZ3RoOyBpKyspXG4gICAgdGhpcy5pdltpXSA9IGl2W2ldO1xufVxuXG5mdW5jdGlvbiBpbnN0YW50aWF0ZShCYXNlKSB7XG4gIGZ1bmN0aW9uIENCQyhvcHRpb25zKSB7XG4gICAgQmFzZS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuX2NiY0luaXQoKTtcbiAgfVxuICBpbmhlcml0cyhDQkMsIEJhc2UpO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMocHJvdG8pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBDQkMucHJvdG90eXBlW2tleV0gPSBwcm90b1trZXldO1xuICB9XG5cbiAgQ0JDLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBDQkMob3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIENCQztcbn1cblxuZXhwb3J0cy5pbnN0YW50aWF0ZSA9IGluc3RhbnRpYXRlO1xuXG5wcm90by5fY2JjSW5pdCA9IGZ1bmN0aW9uIF9jYmNJbml0KCkge1xuICB2YXIgc3RhdGUgPSBuZXcgQ0JDU3RhdGUodGhpcy5vcHRpb25zLml2KTtcbiAgdGhpcy5fY2JjU3RhdGUgPSBzdGF0ZTtcbn07XG5cbnByb3RvLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKGlucCwgaW5PZmYsIG91dCwgb3V0T2ZmKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2NiY1N0YXRlO1xuICB2YXIgc3VwZXJQcm90byA9IHRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZTtcblxuICB2YXIgaXYgPSBzdGF0ZS5pdjtcbiAgaWYgKHRoaXMudHlwZSA9PT0gJ2VuY3J5cHQnKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgaXZbaV0gXj0gaW5wW2luT2ZmICsgaV07XG5cbiAgICBzdXBlclByb3RvLl91cGRhdGUuY2FsbCh0aGlzLCBpdiwgMCwgb3V0LCBvdXRPZmYpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgaXZbaV0gPSBvdXRbb3V0T2ZmICsgaV07XG4gIH0gZWxzZSB7XG4gICAgc3VwZXJQcm90by5fdXBkYXRlLmNhbGwodGhpcywgaW5wLCBpbk9mZiwgb3V0LCBvdXRPZmYpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgb3V0W291dE9mZiArIGldIF49IGl2W2ldO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2NrU2l6ZTsgaSsrKVxuICAgICAgaXZbaV0gPSBpbnBbaW5PZmYgKyBpXTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gQ2lwaGVyKG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICB0aGlzLnR5cGUgPSB0aGlzLm9wdGlvbnMudHlwZTtcbiAgdGhpcy5ibG9ja1NpemUgPSA4O1xuICB0aGlzLl9pbml0KCk7XG5cbiAgdGhpcy5idWZmZXIgPSBuZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO1xuICB0aGlzLmJ1ZmZlck9mZiA9IDA7XG59XG5tb2R1bGUuZXhwb3J0cyA9IENpcGhlcjtcblxuQ2lwaGVyLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIF9pbml0KCkge1xuICAvLyBNaWdodCBiZSBvdmVycmlkZWRcbn07XG5cbkNpcGhlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKGRhdGEpIHtcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodGhpcy50eXBlID09PSAnZGVjcnlwdCcpXG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZURlY3J5cHQoZGF0YSk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlRW5jcnlwdChkYXRhKTtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX2J1ZmZlciA9IGZ1bmN0aW9uIF9idWZmZXIoZGF0YSwgb2ZmKSB7XG4gIC8vIEFwcGVuZCBkYXRhIHRvIGJ1ZmZlclxuICB2YXIgbWluID0gTWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoIC0gdGhpcy5idWZmZXJPZmYsIGRhdGEubGVuZ3RoIC0gb2ZmKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW47IGkrKylcbiAgICB0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZiArIGldID0gZGF0YVtvZmYgKyBpXTtcbiAgdGhpcy5idWZmZXJPZmYgKz0gbWluO1xuXG4gIC8vIFNoaWZ0IG5leHRcbiAgcmV0dXJuIG1pbjtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyID0gZnVuY3Rpb24gX2ZsdXNoQnVmZmVyKG91dCwgb2ZmKSB7XG4gIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwgMCwgb3V0LCBvZmYpO1xuICB0aGlzLmJ1ZmZlck9mZiA9IDA7XG4gIHJldHVybiB0aGlzLmJsb2NrU2l6ZTtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQgPSBmdW5jdGlvbiBfdXBkYXRlRW5jcnlwdChkYXRhKSB7XG4gIHZhciBpbnB1dE9mZiA9IDA7XG4gIHZhciBvdXRwdXRPZmYgPSAwO1xuXG4gIHZhciBjb3VudCA9ICgodGhpcy5idWZmZXJPZmYgKyBkYXRhLmxlbmd0aCkgLyB0aGlzLmJsb2NrU2l6ZSkgfCAwO1xuICB2YXIgb3V0ID0gbmV3IEFycmF5KGNvdW50ICogdGhpcy5ibG9ja1NpemUpO1xuXG4gIGlmICh0aGlzLmJ1ZmZlck9mZiAhPT0gMCkge1xuICAgIGlucHV0T2ZmICs9IHRoaXMuX2J1ZmZlcihkYXRhLCBpbnB1dE9mZik7XG5cbiAgICBpZiAodGhpcy5idWZmZXJPZmYgPT09IHRoaXMuYnVmZmVyLmxlbmd0aClcbiAgICAgIG91dHB1dE9mZiArPSB0aGlzLl9mbHVzaEJ1ZmZlcihvdXQsIG91dHB1dE9mZik7XG4gIH1cblxuICAvLyBXcml0ZSBibG9ja3NcbiAgdmFyIG1heCA9IGRhdGEubGVuZ3RoIC0gKChkYXRhLmxlbmd0aCAtIGlucHV0T2ZmKSAlIHRoaXMuYmxvY2tTaXplKTtcbiAgZm9yICg7IGlucHV0T2ZmIDwgbWF4OyBpbnB1dE9mZiArPSB0aGlzLmJsb2NrU2l6ZSkge1xuICAgIHRoaXMuX3VwZGF0ZShkYXRhLCBpbnB1dE9mZiwgb3V0LCBvdXRwdXRPZmYpO1xuICAgIG91dHB1dE9mZiArPSB0aGlzLmJsb2NrU2l6ZTtcbiAgfVxuXG4gIC8vIFF1ZXVlIHJlc3RcbiAgZm9yICg7IGlucHV0T2ZmIDwgZGF0YS5sZW5ndGg7IGlucHV0T2ZmKyssIHRoaXMuYnVmZmVyT2ZmKyspXG4gICAgdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdID0gZGF0YVtpbnB1dE9mZl07XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQgPSBmdW5jdGlvbiBfdXBkYXRlRGVjcnlwdChkYXRhKSB7XG4gIHZhciBpbnB1dE9mZiA9IDA7XG4gIHZhciBvdXRwdXRPZmYgPSAwO1xuXG4gIHZhciBjb3VudCA9IE1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYgKyBkYXRhLmxlbmd0aCkgLyB0aGlzLmJsb2NrU2l6ZSkgLSAxO1xuICB2YXIgb3V0ID0gbmV3IEFycmF5KGNvdW50ICogdGhpcy5ibG9ja1NpemUpO1xuXG4gIC8vIFRPRE8oaW5kdXRueSk6IG9wdGltaXplIGl0LCB0aGlzIGlzIGZhciBmcm9tIG9wdGltYWxcbiAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkge1xuICAgIGlucHV0T2ZmICs9IHRoaXMuX2J1ZmZlcihkYXRhLCBpbnB1dE9mZik7XG4gICAgb3V0cHV0T2ZmICs9IHRoaXMuX2ZsdXNoQnVmZmVyKG91dCwgb3V0cHV0T2ZmKTtcbiAgfVxuXG4gIC8vIEJ1ZmZlciByZXN0IG9mIHRoZSBpbnB1dFxuICBpbnB1dE9mZiArPSB0aGlzLl9idWZmZXIoZGF0YSwgaW5wdXRPZmYpO1xuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5DaXBoZXIucHJvdG90eXBlLmZpbmFsID0gZnVuY3Rpb24gZmluYWwoYnVmZmVyKSB7XG4gIHZhciBmaXJzdDtcbiAgaWYgKGJ1ZmZlcilcbiAgICBmaXJzdCA9IHRoaXMudXBkYXRlKGJ1ZmZlcik7XG5cbiAgdmFyIGxhc3Q7XG4gIGlmICh0aGlzLnR5cGUgPT09ICdlbmNyeXB0JylcbiAgICBsYXN0ID0gdGhpcy5fZmluYWxFbmNyeXB0KCk7XG4gIGVsc2VcbiAgICBsYXN0ID0gdGhpcy5fZmluYWxEZWNyeXB0KCk7XG5cbiAgaWYgKGZpcnN0KVxuICAgIHJldHVybiBmaXJzdC5jb25jYXQobGFzdCk7XG4gIGVsc2VcbiAgICByZXR1cm4gbGFzdDtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX3BhZCA9IGZ1bmN0aW9uIF9wYWQoYnVmZmVyLCBvZmYpIHtcbiAgaWYgKG9mZiA9PT0gMClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgd2hpbGUgKG9mZiA8IGJ1ZmZlci5sZW5ndGgpXG4gICAgYnVmZmVyW29mZisrXSA9IDA7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5DaXBoZXIucHJvdG90eXBlLl9maW5hbEVuY3J5cHQgPSBmdW5jdGlvbiBfZmluYWxFbmNyeXB0KCkge1xuICBpZiAoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlciwgdGhpcy5idWZmZXJPZmYpKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgb3V0ID0gbmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtcbiAgdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLCAwLCBvdXQsIDApO1xuICByZXR1cm4gb3V0O1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fdW5wYWQgPSBmdW5jdGlvbiBfdW5wYWQoYnVmZmVyKSB7XG4gIHJldHVybiBidWZmZXI7XG59O1xuXG5DaXBoZXIucHJvdG90eXBlLl9maW5hbERlY3J5cHQgPSBmdW5jdGlvbiBfZmluYWxEZWNyeXB0KCkge1xuICBhc3NlcnQuZXF1YWwodGhpcy5idWZmZXJPZmYsIHRoaXMuYmxvY2tTaXplLCAnTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQnKTtcbiAgdmFyIG91dCA9IG5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7XG4gIHRoaXMuX2ZsdXNoQnVmZmVyKG91dCwgMCk7XG5cbiAgcmV0dXJuIHRoaXMuX3VucGFkKG91dCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIGRlcyA9IHJlcXVpcmUoJy4uL2RlcycpO1xudmFyIHV0aWxzID0gZGVzLnV0aWxzO1xudmFyIENpcGhlciA9IGRlcy5DaXBoZXI7XG5cbmZ1bmN0aW9uIERFU1N0YXRlKCkge1xuICB0aGlzLnRtcCA9IG5ldyBBcnJheSgyKTtcbiAgdGhpcy5rZXlzID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gREVTKG9wdGlvbnMpIHtcbiAgQ2lwaGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdmFyIHN0YXRlID0gbmV3IERFU1N0YXRlKCk7XG4gIHRoaXMuX2Rlc1N0YXRlID0gc3RhdGU7XG5cbiAgdGhpcy5kZXJpdmVLZXlzKHN0YXRlLCBvcHRpb25zLmtleSk7XG59XG5pbmhlcml0cyhERVMsIENpcGhlcik7XG5tb2R1bGUuZXhwb3J0cyA9IERFUztcblxuREVTLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgREVTKG9wdGlvbnMpO1xufTtcblxudmFyIHNoaWZ0VGFibGUgPSBbXG4gIDEsIDEsIDIsIDIsIDIsIDIsIDIsIDIsXG4gIDEsIDIsIDIsIDIsIDIsIDIsIDIsIDFcbl07XG5cbkRFUy5wcm90b3R5cGUuZGVyaXZlS2V5cyA9IGZ1bmN0aW9uIGRlcml2ZUtleXMoc3RhdGUsIGtleSkge1xuICBzdGF0ZS5rZXlzID0gbmV3IEFycmF5KDE2ICogMik7XG5cbiAgYXNzZXJ0LmVxdWFsKGtleS5sZW5ndGgsIHRoaXMuYmxvY2tTaXplLCAnSW52YWxpZCBrZXkgbGVuZ3RoJyk7XG5cbiAgdmFyIGtMID0gdXRpbHMucmVhZFVJbnQzMkJFKGtleSwgMCk7XG4gIHZhciBrUiA9IHV0aWxzLnJlYWRVSW50MzJCRShrZXksIDQpO1xuXG4gIHV0aWxzLnBjMShrTCwga1IsIHN0YXRlLnRtcCwgMCk7XG4gIGtMID0gc3RhdGUudG1wWzBdO1xuICBrUiA9IHN0YXRlLnRtcFsxXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5rZXlzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHNoaWZ0ID0gc2hpZnRUYWJsZVtpID4+PiAxXTtcbiAgICBrTCA9IHV0aWxzLnIyOHNobChrTCwgc2hpZnQpO1xuICAgIGtSID0gdXRpbHMucjI4c2hsKGtSLCBzaGlmdCk7XG4gICAgdXRpbHMucGMyKGtMLCBrUiwgc3RhdGUua2V5cywgaSk7XG4gIH1cbn07XG5cbkRFUy5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUoaW5wLCBpbk9mZiwgb3V0LCBvdXRPZmYpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fZGVzU3RhdGU7XG5cbiAgdmFyIGwgPSB1dGlscy5yZWFkVUludDMyQkUoaW5wLCBpbk9mZik7XG4gIHZhciByID0gdXRpbHMucmVhZFVJbnQzMkJFKGlucCwgaW5PZmYgKyA0KTtcblxuICAvLyBJbml0aWFsIFBlcm11dGF0aW9uXG4gIHV0aWxzLmlwKGwsIHIsIHN0YXRlLnRtcCwgMCk7XG4gIGwgPSBzdGF0ZS50bXBbMF07XG4gIHIgPSBzdGF0ZS50bXBbMV07XG5cbiAgaWYgKHRoaXMudHlwZSA9PT0gJ2VuY3J5cHQnKVxuICAgIHRoaXMuX2VuY3J5cHQoc3RhdGUsIGwsIHIsIHN0YXRlLnRtcCwgMCk7XG4gIGVsc2VcbiAgICB0aGlzLl9kZWNyeXB0KHN0YXRlLCBsLCByLCBzdGF0ZS50bXAsIDApO1xuXG4gIGwgPSBzdGF0ZS50bXBbMF07XG4gIHIgPSBzdGF0ZS50bXBbMV07XG5cbiAgdXRpbHMud3JpdGVVSW50MzJCRShvdXQsIGwsIG91dE9mZik7XG4gIHV0aWxzLndyaXRlVUludDMyQkUob3V0LCByLCBvdXRPZmYgKyA0KTtcbn07XG5cbkRFUy5wcm90b3R5cGUuX3BhZCA9IGZ1bmN0aW9uIF9wYWQoYnVmZmVyLCBvZmYpIHtcbiAgdmFyIHZhbHVlID0gYnVmZmVyLmxlbmd0aCAtIG9mZjtcbiAgZm9yICh2YXIgaSA9IG9mZjsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKylcbiAgICBidWZmZXJbaV0gPSB2YWx1ZTtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkRFUy5wcm90b3R5cGUuX3VucGFkID0gZnVuY3Rpb24gX3VucGFkKGJ1ZmZlcikge1xuICB2YXIgcGFkID0gYnVmZmVyW2J1ZmZlci5sZW5ndGggLSAxXTtcbiAgZm9yICh2YXIgaSA9IGJ1ZmZlci5sZW5ndGggLSBwYWQ7IGkgPCBidWZmZXIubGVuZ3RoOyBpKyspXG4gICAgYXNzZXJ0LmVxdWFsKGJ1ZmZlcltpXSwgcGFkKTtcblxuICByZXR1cm4gYnVmZmVyLnNsaWNlKDAsIGJ1ZmZlci5sZW5ndGggLSBwYWQpO1xufTtcblxuREVTLnByb3RvdHlwZS5fZW5jcnlwdCA9IGZ1bmN0aW9uIF9lbmNyeXB0KHN0YXRlLCBsU3RhcnQsIHJTdGFydCwgb3V0LCBvZmYpIHtcbiAgdmFyIGwgPSBsU3RhcnQ7XG4gIHZhciByID0gclN0YXJ0O1xuXG4gIC8vIEFwcGx5IGYoKSB4MTYgdGltZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5rZXlzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGtleUwgPSBzdGF0ZS5rZXlzW2ldO1xuICAgIHZhciBrZXlSID0gc3RhdGUua2V5c1tpICsgMV07XG5cbiAgICAvLyBmKHIsIGspXG4gICAgdXRpbHMuZXhwYW5kKHIsIHN0YXRlLnRtcCwgMCk7XG5cbiAgICBrZXlMIF49IHN0YXRlLnRtcFswXTtcbiAgICBrZXlSIF49IHN0YXRlLnRtcFsxXTtcbiAgICB2YXIgcyA9IHV0aWxzLnN1YnN0aXR1dGUoa2V5TCwga2V5Uik7XG4gICAgdmFyIGYgPSB1dGlscy5wZXJtdXRlKHMpO1xuXG4gICAgdmFyIHQgPSByO1xuICAgIHIgPSAobCBeIGYpID4+PiAwO1xuICAgIGwgPSB0O1xuICB9XG5cbiAgLy8gUmV2ZXJzZSBJbml0aWFsIFBlcm11dGF0aW9uXG4gIHV0aWxzLnJpcChyLCBsLCBvdXQsIG9mZik7XG59O1xuXG5ERVMucHJvdG90eXBlLl9kZWNyeXB0ID0gZnVuY3Rpb24gX2RlY3J5cHQoc3RhdGUsIGxTdGFydCwgclN0YXJ0LCBvdXQsIG9mZikge1xuICB2YXIgbCA9IHJTdGFydDtcbiAgdmFyIHIgPSBsU3RhcnQ7XG5cbiAgLy8gQXBwbHkgZigpIHgxNiB0aW1lc1xuICBmb3IgKHZhciBpID0gc3RhdGUua2V5cy5sZW5ndGggLSAyOyBpID49IDA7IGkgLT0gMikge1xuICAgIHZhciBrZXlMID0gc3RhdGUua2V5c1tpXTtcbiAgICB2YXIga2V5UiA9IHN0YXRlLmtleXNbaSArIDFdO1xuXG4gICAgLy8gZihyLCBrKVxuICAgIHV0aWxzLmV4cGFuZChsLCBzdGF0ZS50bXAsIDApO1xuXG4gICAga2V5TCBePSBzdGF0ZS50bXBbMF07XG4gICAga2V5UiBePSBzdGF0ZS50bXBbMV07XG4gICAgdmFyIHMgPSB1dGlscy5zdWJzdGl0dXRlKGtleUwsIGtleVIpO1xuICAgIHZhciBmID0gdXRpbHMucGVybXV0ZShzKTtcblxuICAgIHZhciB0ID0gbDtcbiAgICBsID0gKHIgXiBmKSA+Pj4gMDtcbiAgICByID0gdDtcbiAgfVxuXG4gIC8vIFJldmVyc2UgSW5pdGlhbCBQZXJtdXRhdGlvblxuICB1dGlscy5yaXAobCwgciwgb3V0LCBvZmYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBkZXMgPSByZXF1aXJlKCcuLi9kZXMnKTtcbnZhciBDaXBoZXIgPSBkZXMuQ2lwaGVyO1xudmFyIERFUyA9IGRlcy5ERVM7XG5cbmZ1bmN0aW9uIEVERVN0YXRlKHR5cGUsIGtleSkge1xuICBhc3NlcnQuZXF1YWwoa2V5Lmxlbmd0aCwgMjQsICdJbnZhbGlkIGtleSBsZW5ndGgnKTtcblxuICB2YXIgazEgPSBrZXkuc2xpY2UoMCwgOCk7XG4gIHZhciBrMiA9IGtleS5zbGljZSg4LCAxNik7XG4gIHZhciBrMyA9IGtleS5zbGljZSgxNiwgMjQpO1xuXG4gIGlmICh0eXBlID09PSAnZW5jcnlwdCcpIHtcbiAgICB0aGlzLmNpcGhlcnMgPSBbXG4gICAgICBERVMuY3JlYXRlKHsgdHlwZTogJ2VuY3J5cHQnLCBrZXk6IGsxIH0pLFxuICAgICAgREVTLmNyZWF0ZSh7IHR5cGU6ICdkZWNyeXB0Jywga2V5OiBrMiB9KSxcbiAgICAgIERFUy5jcmVhdGUoeyB0eXBlOiAnZW5jcnlwdCcsIGtleTogazMgfSlcbiAgICBdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuY2lwaGVycyA9IFtcbiAgICAgIERFUy5jcmVhdGUoeyB0eXBlOiAnZGVjcnlwdCcsIGtleTogazMgfSksXG4gICAgICBERVMuY3JlYXRlKHsgdHlwZTogJ2VuY3J5cHQnLCBrZXk6IGsyIH0pLFxuICAgICAgREVTLmNyZWF0ZSh7IHR5cGU6ICdkZWNyeXB0Jywga2V5OiBrMSB9KVxuICAgIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gRURFKG9wdGlvbnMpIHtcbiAgQ2lwaGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdmFyIHN0YXRlID0gbmV3IEVERVN0YXRlKHRoaXMudHlwZSwgdGhpcy5vcHRpb25zLmtleSk7XG4gIHRoaXMuX2VkZVN0YXRlID0gc3RhdGU7XG59XG5pbmhlcml0cyhFREUsIENpcGhlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gRURFO1xuXG5FREUuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBFREUob3B0aW9ucyk7XG59O1xuXG5FREUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKGlucCwgaW5PZmYsIG91dCwgb3V0T2ZmKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2VkZVN0YXRlO1xuXG4gIHN0YXRlLmNpcGhlcnNbMF0uX3VwZGF0ZShpbnAsIGluT2ZmLCBvdXQsIG91dE9mZik7XG4gIHN0YXRlLmNpcGhlcnNbMV0uX3VwZGF0ZShvdXQsIG91dE9mZiwgb3V0LCBvdXRPZmYpO1xuICBzdGF0ZS5jaXBoZXJzWzJdLl91cGRhdGUob3V0LCBvdXRPZmYsIG91dCwgb3V0T2ZmKTtcbn07XG5cbkVERS5wcm90b3R5cGUuX3BhZCA9IERFUy5wcm90b3R5cGUuX3BhZDtcbkVERS5wcm90b3R5cGUuX3VucGFkID0gREVTLnByb3RvdHlwZS5fdW5wYWQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFKGJ5dGVzLCBvZmYpIHtcbiAgdmFyIHJlcyA9ICAoYnl0ZXNbMCArIG9mZl0gPDwgMjQpIHxcbiAgICAgICAgICAgICAoYnl0ZXNbMSArIG9mZl0gPDwgMTYpIHxcbiAgICAgICAgICAgICAoYnl0ZXNbMiArIG9mZl0gPDwgOCkgfFxuICAgICAgICAgICAgIGJ5dGVzWzMgKyBvZmZdO1xuICByZXR1cm4gcmVzID4+PiAwO1xufTtcblxuZXhwb3J0cy53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRShieXRlcywgdmFsdWUsIG9mZikge1xuICBieXRlc1swICsgb2ZmXSA9IHZhbHVlID4+PiAyNDtcbiAgYnl0ZXNbMSArIG9mZl0gPSAodmFsdWUgPj4+IDE2KSAmIDB4ZmY7XG4gIGJ5dGVzWzIgKyBvZmZdID0gKHZhbHVlID4+PiA4KSAmIDB4ZmY7XG4gIGJ5dGVzWzMgKyBvZmZdID0gdmFsdWUgJiAweGZmO1xufTtcblxuZXhwb3J0cy5pcCA9IGZ1bmN0aW9uIGlwKGluTCwgaW5SLCBvdXQsIG9mZikge1xuICB2YXIgb3V0TCA9IDA7XG4gIHZhciBvdXRSID0gMDtcblxuICBmb3IgKHZhciBpID0gNjsgaSA+PSAwOyBpIC09IDIpIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgICBvdXRMIDw8PSAxO1xuICAgICAgb3V0TCB8PSAoaW5SID4+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICAgIG91dEwgPDw9IDE7XG4gICAgICBvdXRMIHw9IChpbkwgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gNjsgaSA+PSAwOyBpIC09IDIpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSAyNTsgaiArPSA4KSB7XG4gICAgICBvdXRSIDw8PSAxO1xuICAgICAgb3V0UiB8PSAoaW5SID4+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IDI1OyBqICs9IDgpIHtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpbkwgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gIH1cblxuICBvdXRbb2ZmICsgMF0gPSBvdXRMID4+PiAwO1xuICBvdXRbb2ZmICsgMV0gPSBvdXRSID4+PiAwO1xufTtcblxuZXhwb3J0cy5yaXAgPSBmdW5jdGlvbiByaXAoaW5MLCBpblIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDI0OyBqID49IDA7IGogLT0gOCkge1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluUiA+Pj4gKGogKyBpKSkgJiAxO1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluTCA+Pj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBpID0gNDsgaSA8IDg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAyNDsgaiA+PSAwOyBqIC09IDgpIHtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpblIgPj4+IChqICsgaSkpICYgMTtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpbkwgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gIH1cblxuICBvdXRbb2ZmICsgMF0gPSBvdXRMID4+PiAwO1xuICBvdXRbb2ZmICsgMV0gPSBvdXRSID4+PiAwO1xufTtcblxuZXhwb3J0cy5wYzEgPSBmdW5jdGlvbiBwYzEoaW5MLCBpblIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIC8vIDcsIDE1LCAyMywgMzEsIDM5LCA0NywgNTUsIDYzXG4gIC8vIDYsIDE0LCAyMiwgMzAsIDM5LCA0NywgNTUsIDYzXG4gIC8vIDUsIDEzLCAyMSwgMjksIDM5LCA0NywgNTUsIDYzXG4gIC8vIDQsIDEyLCAyMCwgMjhcbiAgZm9yICh2YXIgaSA9IDc7IGkgPj0gNTsgaS0tKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluUiA+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICAgIG91dEwgPDw9IDE7XG4gICAgICBvdXRMIHw9IChpbkwgPj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgb3V0TCA8PD0gMTtcbiAgICBvdXRMIHw9IChpblIgPj4gKGogKyBpKSkgJiAxO1xuICB9XG5cbiAgLy8gMSwgOSwgMTcsIDI1LCAzMywgNDEsIDQ5LCA1N1xuICAvLyAyLCAxMCwgMTgsIDI2LCAzNCwgNDIsIDUwLCA1OFxuICAvLyAzLCAxMSwgMTksIDI3LCAzNSwgNDMsIDUxLCA1OVxuICAvLyAzNiwgNDQsIDUyLCA2MFxuICBmb3IgKHZhciBpID0gMTsgaSA8PSAzOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgICBvdXRSIDw8PSAxO1xuICAgICAgb3V0UiB8PSAoaW5SID4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgICAgb3V0UiA8PD0gMTtcbiAgICAgIG91dFIgfD0gKGluTCA+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICBvdXRSIDw8PSAxO1xuICAgIG91dFIgfD0gKGluTCA+PiAoaiArIGkpKSAmIDE7XG4gIH1cblxuICBvdXRbb2ZmICsgMF0gPSBvdXRMID4+PiAwO1xuICBvdXRbb2ZmICsgMV0gPSBvdXRSID4+PiAwO1xufTtcblxuZXhwb3J0cy5yMjhzaGwgPSBmdW5jdGlvbiByMjhzaGwobnVtLCBzaGlmdCkge1xuICByZXR1cm4gKChudW0gPDwgc2hpZnQpICYgMHhmZmZmZmZmKSB8IChudW0gPj4+ICgyOCAtIHNoaWZ0KSk7XG59O1xuXG52YXIgcGMydGFibGUgPSBbXG4gIC8vIGluTCA9PiBvdXRMXG4gIDE0LCAxMSwgMTcsIDQsIDI3LCAyMywgMjUsIDAsXG4gIDEzLCAyMiwgNywgMTgsIDUsIDksIDE2LCAyNCxcbiAgMiwgMjAsIDEyLCAyMSwgMSwgOCwgMTUsIDI2LFxuXG4gIC8vIGluUiA9PiBvdXRSXG4gIDE1LCA0LCAyNSwgMTksIDksIDEsIDI2LCAxNixcbiAgNSwgMTEsIDIzLCA4LCAxMiwgNywgMTcsIDAsXG4gIDIyLCAzLCAxMCwgMTQsIDYsIDIwLCAyNywgMjRcbl07XG5cbmV4cG9ydHMucGMyID0gZnVuY3Rpb24gcGMyKGluTCwgaW5SLCBvdXQsIG9mZikge1xuICB2YXIgb3V0TCA9IDA7XG4gIHZhciBvdXRSID0gMDtcblxuICB2YXIgbGVuID0gcGMydGFibGUubGVuZ3RoID4+PiAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgb3V0TCA8PD0gMTtcbiAgICBvdXRMIHw9IChpbkwgPj4+IHBjMnRhYmxlW2ldKSAmIDB4MTtcbiAgfVxuICBmb3IgKHZhciBpID0gbGVuOyBpIDwgcGMydGFibGUubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRSIDw8PSAxO1xuICAgIG91dFIgfD0gKGluUiA+Pj4gcGMydGFibGVbaV0pICYgMHgxO1xuICB9XG5cbiAgb3V0W29mZiArIDBdID0gb3V0TCA+Pj4gMDtcbiAgb3V0W29mZiArIDFdID0gb3V0UiA+Pj4gMDtcbn07XG5cbmV4cG9ydHMuZXhwYW5kID0gZnVuY3Rpb24gZXhwYW5kKHIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIG91dEwgPSAoKHIgJiAxKSA8PCA1KSB8IChyID4+PiAyNyk7XG4gIGZvciAodmFyIGkgPSAyMzsgaSA+PSAxNTsgaSAtPSA0KSB7XG4gICAgb3V0TCA8PD0gNjtcbiAgICBvdXRMIHw9IChyID4+PiBpKSAmIDB4M2Y7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDExOyBpID49IDM7IGkgLT0gNCkge1xuICAgIG91dFIgfD0gKHIgPj4+IGkpICYgMHgzZjtcbiAgICBvdXRSIDw8PSA2O1xuICB9XG4gIG91dFIgfD0gKChyICYgMHgxZikgPDwgMSkgfCAociA+Pj4gMzEpO1xuXG4gIG91dFtvZmYgKyAwXSA9IG91dEwgPj4+IDA7XG4gIG91dFtvZmYgKyAxXSA9IG91dFIgPj4+IDA7XG59O1xuXG52YXIgc1RhYmxlID0gW1xuICAxNCwgMCwgNCwgMTUsIDEzLCA3LCAxLCA0LCAyLCAxNCwgMTUsIDIsIDExLCAxMywgOCwgMSxcbiAgMywgMTAsIDEwLCA2LCA2LCAxMiwgMTIsIDExLCA1LCA5LCA5LCA1LCAwLCAzLCA3LCA4LFxuICA0LCAxNSwgMSwgMTIsIDE0LCA4LCA4LCAyLCAxMywgNCwgNiwgOSwgMiwgMSwgMTEsIDcsXG4gIDE1LCA1LCAxMiwgMTEsIDksIDMsIDcsIDE0LCAzLCAxMCwgMTAsIDAsIDUsIDYsIDAsIDEzLFxuXG4gIDE1LCAzLCAxLCAxMywgOCwgNCwgMTQsIDcsIDYsIDE1LCAxMSwgMiwgMywgOCwgNCwgMTQsXG4gIDksIDEyLCA3LCAwLCAyLCAxLCAxMywgMTAsIDEyLCA2LCAwLCA5LCA1LCAxMSwgMTAsIDUsXG4gIDAsIDEzLCAxNCwgOCwgNywgMTAsIDExLCAxLCAxMCwgMywgNCwgMTUsIDEzLCA0LCAxLCAyLFxuICA1LCAxMSwgOCwgNiwgMTIsIDcsIDYsIDEyLCA5LCAwLCAzLCA1LCAyLCAxNCwgMTUsIDksXG5cbiAgMTAsIDEzLCAwLCA3LCA5LCAwLCAxNCwgOSwgNiwgMywgMywgNCwgMTUsIDYsIDUsIDEwLFxuICAxLCAyLCAxMywgOCwgMTIsIDUsIDcsIDE0LCAxMSwgMTIsIDQsIDExLCAyLCAxNSwgOCwgMSxcbiAgMTMsIDEsIDYsIDEwLCA0LCAxMywgOSwgMCwgOCwgNiwgMTUsIDksIDMsIDgsIDAsIDcsXG4gIDExLCA0LCAxLCAxNSwgMiwgMTQsIDEyLCAzLCA1LCAxMSwgMTAsIDUsIDE0LCAyLCA3LCAxMixcblxuICA3LCAxMywgMTMsIDgsIDE0LCAxMSwgMywgNSwgMCwgNiwgNiwgMTUsIDksIDAsIDEwLCAzLFxuICAxLCA0LCAyLCA3LCA4LCAyLCA1LCAxMiwgMTEsIDEsIDEyLCAxMCwgNCwgMTQsIDE1LCA5LFxuICAxMCwgMywgNiwgMTUsIDksIDAsIDAsIDYsIDEyLCAxMCwgMTEsIDEsIDcsIDEzLCAxMywgOCxcbiAgMTUsIDksIDEsIDQsIDMsIDUsIDE0LCAxMSwgNSwgMTIsIDIsIDcsIDgsIDIsIDQsIDE0LFxuXG4gIDIsIDE0LCAxMiwgMTEsIDQsIDIsIDEsIDEyLCA3LCA0LCAxMCwgNywgMTEsIDEzLCA2LCAxLFxuICA4LCA1LCA1LCAwLCAzLCAxNSwgMTUsIDEwLCAxMywgMywgMCwgOSwgMTQsIDgsIDksIDYsXG4gIDQsIDExLCAyLCA4LCAxLCAxMiwgMTEsIDcsIDEwLCAxLCAxMywgMTQsIDcsIDIsIDgsIDEzLFxuICAxNSwgNiwgOSwgMTUsIDEyLCAwLCA1LCA5LCA2LCAxMCwgMywgNCwgMCwgNSwgMTQsIDMsXG5cbiAgMTIsIDEwLCAxLCAxNSwgMTAsIDQsIDE1LCAyLCA5LCA3LCAyLCAxMiwgNiwgOSwgOCwgNSxcbiAgMCwgNiwgMTMsIDEsIDMsIDEzLCA0LCAxNCwgMTQsIDAsIDcsIDExLCA1LCAzLCAxMSwgOCxcbiAgOSwgNCwgMTQsIDMsIDE1LCAyLCA1LCAxMiwgMiwgOSwgOCwgNSwgMTIsIDE1LCAzLCAxMCxcbiAgNywgMTEsIDAsIDE0LCA0LCAxLCAxMCwgNywgMSwgNiwgMTMsIDAsIDExLCA4LCA2LCAxMyxcblxuICA0LCAxMywgMTEsIDAsIDIsIDExLCAxNCwgNywgMTUsIDQsIDAsIDksIDgsIDEsIDEzLCAxMCxcbiAgMywgMTQsIDEyLCAzLCA5LCA1LCA3LCAxMiwgNSwgMiwgMTAsIDE1LCA2LCA4LCAxLCA2LFxuICAxLCA2LCA0LCAxMSwgMTEsIDEzLCAxMywgOCwgMTIsIDEsIDMsIDQsIDcsIDEwLCAxNCwgNyxcbiAgMTAsIDksIDE1LCA1LCA2LCAwLCA4LCAxNSwgMCwgMTQsIDUsIDIsIDksIDMsIDIsIDEyLFxuXG4gIDEzLCAxLCAyLCAxNSwgOCwgMTMsIDQsIDgsIDYsIDEwLCAxNSwgMywgMTEsIDcsIDEsIDQsXG4gIDEwLCAxMiwgOSwgNSwgMywgNiwgMTQsIDExLCA1LCAwLCAwLCAxNCwgMTIsIDksIDcsIDIsXG4gIDcsIDIsIDExLCAxLCA0LCAxNCwgMSwgNywgOSwgNCwgMTIsIDEwLCAxNCwgOCwgMiwgMTMsXG4gIDAsIDE1LCA2LCAxMiwgMTAsIDksIDEzLCAwLCAxNSwgMywgMywgNSwgNSwgNiwgOCwgMTFcbl07XG5cbmV4cG9ydHMuc3Vic3RpdHV0ZSA9IGZ1bmN0aW9uIHN1YnN0aXR1dGUoaW5MLCBpblIpIHtcbiAgdmFyIG91dCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgdmFyIGIgPSAoaW5MID4+PiAoMTggLSBpICogNikpICYgMHgzZjtcbiAgICB2YXIgc2IgPSBzVGFibGVbaSAqIDB4NDAgKyBiXTtcblxuICAgIG91dCA8PD0gNDtcbiAgICBvdXQgfD0gc2I7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICB2YXIgYiA9IChpblIgPj4+ICgxOCAtIGkgKiA2KSkgJiAweDNmO1xuICAgIHZhciBzYiA9IHNUYWJsZVs0ICogMHg0MCArIGkgKiAweDQwICsgYl07XG5cbiAgICBvdXQgPDw9IDQ7XG4gICAgb3V0IHw9IHNiO1xuICB9XG4gIHJldHVybiBvdXQgPj4+IDA7XG59O1xuXG52YXIgcGVybXV0ZVRhYmxlID0gW1xuICAxNiwgMjUsIDEyLCAxMSwgMywgMjAsIDQsIDE1LCAzMSwgMTcsIDksIDYsIDI3LCAxNCwgMSwgMjIsXG4gIDMwLCAyNCwgOCwgMTgsIDAsIDUsIDI5LCAyMywgMTMsIDE5LCAyLCAyNiwgMTAsIDIxLCAyOCwgN1xuXTtcblxuZXhwb3J0cy5wZXJtdXRlID0gZnVuY3Rpb24gcGVybXV0ZShudW0pIHtcbiAgdmFyIG91dCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGVybXV0ZVRhYmxlLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0IDw8PSAxO1xuICAgIG91dCB8PSAobnVtID4+PiBwZXJtdXRlVGFibGVbaV0pICYgMHgxO1xuICB9XG4gIHJldHVybiBvdXQgPj4+IDA7XG59O1xuXG5leHBvcnRzLnBhZFNwbGl0ID0gZnVuY3Rpb24gcGFkU3BsaXQobnVtLCBzaXplLCBncm91cCkge1xuICB2YXIgc3RyID0gbnVtLnRvU3RyaW5nKDIpO1xuICB3aGlsZSAoc3RyLmxlbmd0aCA8IHNpemUpXG4gICAgc3RyID0gJzAnICsgc3RyO1xuXG4gIHZhciBvdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpICs9IGdyb3VwKVxuICAgIG91dC5wdXNoKHN0ci5zbGljZShpLCBpICsgZ3JvdXApKTtcbiAgcmV0dXJuIG91dC5qb2luKCcgJyk7XG59O1xuIiwidmFyIGdlbmVyYXRlUHJpbWUgPSByZXF1aXJlKCcuL2xpYi9nZW5lcmF0ZVByaW1lJylcbnZhciBwcmltZXMgPSByZXF1aXJlKCcuL2xpYi9wcmltZXMuanNvbicpXG5cbnZhciBESCA9IHJlcXVpcmUoJy4vbGliL2RoJylcblxuZnVuY3Rpb24gZ2V0RGlmZmllSGVsbG1hbiAobW9kKSB7XG4gIHZhciBwcmltZSA9IG5ldyBCdWZmZXIocHJpbWVzW21vZF0ucHJpbWUsICdoZXgnKVxuICB2YXIgZ2VuID0gbmV3IEJ1ZmZlcihwcmltZXNbbW9kXS5nZW4sICdoZXgnKVxuXG4gIHJldHVybiBuZXcgREgocHJpbWUsIGdlbilcbn1cblxudmFyIEVOQ09ESU5HUyA9IHtcbiAgJ2JpbmFyeSc6IHRydWUsICdoZXgnOiB0cnVlLCAnYmFzZTY0JzogdHJ1ZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEaWZmaWVIZWxsbWFuIChwcmltZSwgZW5jLCBnZW5lcmF0b3IsIGdlbmMpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihlbmMpIHx8IEVOQ09ESU5HU1tlbmNdID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY3JlYXRlRGlmZmllSGVsbG1hbihwcmltZSwgJ2JpbmFyeScsIGVuYywgZ2VuZXJhdG9yKVxuICB9XG5cbiAgZW5jID0gZW5jIHx8ICdiaW5hcnknXG4gIGdlbmMgPSBnZW5jIHx8ICdiaW5hcnknXG4gIGdlbmVyYXRvciA9IGdlbmVyYXRvciB8fCBuZXcgQnVmZmVyKFsyXSlcblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihnZW5lcmF0b3IpKSB7XG4gICAgZ2VuZXJhdG9yID0gbmV3IEJ1ZmZlcihnZW5lcmF0b3IsIGdlbmMpXG4gIH1cblxuICBpZiAodHlwZW9mIHByaW1lID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBuZXcgREgoZ2VuZXJhdGVQcmltZShwcmltZSwgZ2VuZXJhdG9yKSwgZ2VuZXJhdG9yLCB0cnVlKVxuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocHJpbWUpKSB7XG4gICAgcHJpbWUgPSBuZXcgQnVmZmVyKHByaW1lLCBlbmMpXG4gIH1cblxuICByZXR1cm4gbmV3IERIKHByaW1lLCBnZW5lcmF0b3IsIHRydWUpXG59XG5cbmV4cG9ydHMuRGlmZmllSGVsbG1hbkdyb3VwID0gZXhwb3J0cy5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAgPSBleHBvcnRzLmdldERpZmZpZUhlbGxtYW4gPSBnZXREaWZmaWVIZWxsbWFuXG5leHBvcnRzLmNyZWF0ZURpZmZpZUhlbGxtYW4gPSBleHBvcnRzLkRpZmZpZUhlbGxtYW4gPSBjcmVhdGVEaWZmaWVIZWxsbWFuXG4iLCJ2YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIE1pbGxlclJhYmluID0gcmVxdWlyZSgnbWlsbGVyLXJhYmluJyk7XG52YXIgbWlsbGVyUmFiaW4gPSBuZXcgTWlsbGVyUmFiaW4oKTtcbnZhciBUV0VOVFlGT1VSID0gbmV3IEJOKDI0KTtcbnZhciBFTEVWRU4gPSBuZXcgQk4oMTEpO1xudmFyIFRFTiA9IG5ldyBCTigxMCk7XG52YXIgVEhSRUUgPSBuZXcgQk4oMyk7XG52YXIgU0VWRU4gPSBuZXcgQk4oNyk7XG52YXIgcHJpbWVzID0gcmVxdWlyZSgnLi9nZW5lcmF0ZVByaW1lJyk7XG52YXIgcmFuZG9tQnl0ZXMgPSByZXF1aXJlKCdyYW5kb21ieXRlcycpO1xubW9kdWxlLmV4cG9ydHMgPSBESDtcblxuZnVuY3Rpb24gc2V0UHVibGljS2V5KHB1YiwgZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAndXRmOCc7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHB1YikpIHtcbiAgICBwdWIgPSBuZXcgQnVmZmVyKHB1YiwgZW5jKTtcbiAgfVxuICB0aGlzLl9wdWIgPSBuZXcgQk4ocHViKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHNldFByaXZhdGVLZXkocHJpdiwgZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAndXRmOCc7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHByaXYpKSB7XG4gICAgcHJpdiA9IG5ldyBCdWZmZXIocHJpdiwgZW5jKTtcbiAgfVxuICB0aGlzLl9wcml2ID0gbmV3IEJOKHByaXYpO1xuICByZXR1cm4gdGhpcztcbn1cblxudmFyIHByaW1lQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGNoZWNrUHJpbWUocHJpbWUsIGdlbmVyYXRvcikge1xuICB2YXIgZ2VuID0gZ2VuZXJhdG9yLnRvU3RyaW5nKCdoZXgnKTtcbiAgdmFyIGhleCA9IFtnZW4sIHByaW1lLnRvU3RyaW5nKDE2KV0uam9pbignXycpO1xuICBpZiAoaGV4IGluIHByaW1lQ2FjaGUpIHtcbiAgICByZXR1cm4gcHJpbWVDYWNoZVtoZXhdO1xuICB9XG4gIHZhciBlcnJvciA9IDA7XG5cbiAgaWYgKHByaW1lLmlzRXZlbigpIHx8XG4gICAgIXByaW1lcy5zaW1wbGVTaWV2ZSB8fFxuICAgICFwcmltZXMuZmVybWF0VGVzdChwcmltZSkgfHxcbiAgICAhbWlsbGVyUmFiaW4udGVzdChwcmltZSkpIHtcbiAgICAvL25vdCBhIHByaW1lIHNvICsxXG4gICAgZXJyb3IgKz0gMTtcblxuICAgIGlmIChnZW4gPT09ICcwMicgfHwgZ2VuID09PSAnMDUnKSB7XG4gICAgICAvLyB3ZSdkIGJlIGFibGUgdG8gY2hlY2sgdGhlIGdlbmVyYXRvclxuICAgICAgLy8gaXQgd291bGQgZmFpbCBzbyArOFxuICAgICAgZXJyb3IgKz0gODtcbiAgICB9IGVsc2Uge1xuICAgICAgLy93ZSB3b3VsZG4ndCBiZSBhYmxlIHRvIHRlc3QgdGhlIGdlbmVyYXRvclxuICAgICAgLy8gc28gKzRcbiAgICAgIGVycm9yICs9IDQ7XG4gICAgfVxuICAgIHByaW1lQ2FjaGVbaGV4XSA9IGVycm9yO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfVxuICBpZiAoIW1pbGxlclJhYmluLnRlc3QocHJpbWUuc2hybigxKSkpIHtcbiAgICAvL25vdCBhIHNhZmUgcHJpbWVcbiAgICBlcnJvciArPSAyO1xuICB9XG4gIHZhciByZW07XG4gIHN3aXRjaCAoZ2VuKSB7XG4gICAgY2FzZSAnMDInOlxuICAgICAgaWYgKHByaW1lLm1vZChUV0VOVFlGT1VSKS5jbXAoRUxFVkVOKSkge1xuICAgICAgICAvLyB1bnN1aWRhYmxlIGdlbmVyYXRvclxuICAgICAgICBlcnJvciArPSA4O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnMDUnOlxuICAgICAgcmVtID0gcHJpbWUubW9kKFRFTik7XG4gICAgICBpZiAocmVtLmNtcChUSFJFRSkgJiYgcmVtLmNtcChTRVZFTikpIHtcbiAgICAgICAgLy8gcHJpbWUgbW9kIDEwIG5lZWRzIHRvIGVxdWFsIDMgb3IgN1xuICAgICAgICBlcnJvciArPSA4O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGVycm9yICs9IDQ7XG4gIH1cbiAgcHJpbWVDYWNoZVtoZXhdID0gZXJyb3I7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gREgocHJpbWUsIGdlbmVyYXRvciwgbWFsbGVhYmxlKSB7XG4gIHRoaXMuc2V0R2VuZXJhdG9yKGdlbmVyYXRvcik7XG4gIHRoaXMuX19wcmltZSA9IG5ldyBCTihwcmltZSk7XG4gIHRoaXMuX3ByaW1lID0gQk4ubW9udCh0aGlzLl9fcHJpbWUpO1xuICB0aGlzLl9wcmltZUxlbiA9IHByaW1lLmxlbmd0aDtcbiAgdGhpcy5fcHViID0gdW5kZWZpbmVkO1xuICB0aGlzLl9wcml2ID0gdW5kZWZpbmVkO1xuICB0aGlzLl9wcmltZUNvZGUgPSB1bmRlZmluZWQ7XG4gIGlmIChtYWxsZWFibGUpIHtcbiAgICB0aGlzLnNldFB1YmxpY0tleSA9IHNldFB1YmxpY0tleTtcbiAgICB0aGlzLnNldFByaXZhdGVLZXkgPSBzZXRQcml2YXRlS2V5O1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX3ByaW1lQ29kZSA9IDg7XG4gIH1cbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShESC5wcm90b3R5cGUsICd2ZXJpZnlFcnJvcicsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9wcmltZUNvZGUgIT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLl9wcmltZUNvZGUgPSBjaGVja1ByaW1lKHRoaXMuX19wcmltZSwgdGhpcy5fX2dlbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9wcmltZUNvZGU7XG4gIH1cbn0pO1xuREgucHJvdG90eXBlLmdlbmVyYXRlS2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wcml2KSB7XG4gICAgdGhpcy5fcHJpdiA9IG5ldyBCTihyYW5kb21CeXRlcyh0aGlzLl9wcmltZUxlbikpO1xuICB9XG4gIHRoaXMuX3B1YiA9IHRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKTtcbiAgcmV0dXJuIHRoaXMuZ2V0UHVibGljS2V5KCk7XG59O1xuXG5ESC5wcm90b3R5cGUuY29tcHV0ZVNlY3JldCA9IGZ1bmN0aW9uIChvdGhlcikge1xuICBvdGhlciA9IG5ldyBCTihvdGhlcik7XG4gIG90aGVyID0gb3RoZXIudG9SZWQodGhpcy5fcHJpbWUpO1xuICB2YXIgc2VjcmV0ID0gb3RoZXIucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKTtcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoc2VjcmV0LnRvQXJyYXkoKSk7XG4gIHZhciBwcmltZSA9IHRoaXMuZ2V0UHJpbWUoKTtcbiAgaWYgKG91dC5sZW5ndGggPCBwcmltZS5sZW5ndGgpIHtcbiAgICB2YXIgZnJvbnQgPSBuZXcgQnVmZmVyKHByaW1lLmxlbmd0aCAtIG91dC5sZW5ndGgpO1xuICAgIGZyb250LmZpbGwoMCk7XG4gICAgb3V0ID0gQnVmZmVyLmNvbmNhdChbZnJvbnQsIG91dF0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59O1xuXG5ESC5wcm90b3R5cGUuZ2V0UHVibGljS2V5ID0gZnVuY3Rpb24gZ2V0UHVibGljS2V5KGVuYykge1xuICByZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUodGhpcy5fcHViLCBlbmMpO1xufTtcblxuREgucHJvdG90eXBlLmdldFByaXZhdGVLZXkgPSBmdW5jdGlvbiBnZXRQcml2YXRlS2V5KGVuYykge1xuICByZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUodGhpcy5fcHJpdiwgZW5jKTtcbn07XG5cbkRILnByb3RvdHlwZS5nZXRQcmltZSA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgcmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKHRoaXMuX19wcmltZSwgZW5jKTtcbn07XG5cbkRILnByb3RvdHlwZS5nZXRHZW5lcmF0b3IgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIHJldHVybiBmb3JtYXRSZXR1cm5WYWx1ZSh0aGlzLl9nZW4sIGVuYyk7XG59O1xuXG5ESC5wcm90b3R5cGUuc2V0R2VuZXJhdG9yID0gZnVuY3Rpb24gKGdlbiwgZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAndXRmOCc7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGdlbikpIHtcbiAgICBnZW4gPSBuZXcgQnVmZmVyKGdlbiwgZW5jKTtcbiAgfVxuICB0aGlzLl9fZ2VuID0gZ2VuO1xuICB0aGlzLl9nZW4gPSBuZXcgQk4oZ2VuKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmb3JtYXRSZXR1cm5WYWx1ZShibiwgZW5jKSB7XG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKGJuLnRvQXJyYXkoKSk7XG4gIGlmICghZW5jKSB7XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYnVmLnRvU3RyaW5nKGVuYyk7XG4gIH1cbn1cbiIsInZhciByYW5kb21CeXRlcyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZpbmRQcmltZTtcbmZpbmRQcmltZS5zaW1wbGVTaWV2ZSA9IHNpbXBsZVNpZXZlO1xuZmluZFByaW1lLmZlcm1hdFRlc3QgPSBmZXJtYXRUZXN0O1xudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBUV0VOVFlGT1VSID0gbmV3IEJOKDI0KTtcbnZhciBNaWxsZXJSYWJpbiA9IHJlcXVpcmUoJ21pbGxlci1yYWJpbicpO1xudmFyIG1pbGxlclJhYmluID0gbmV3IE1pbGxlclJhYmluKCk7XG52YXIgT05FID0gbmV3IEJOKDEpO1xudmFyIFRXTyA9IG5ldyBCTigyKTtcbnZhciBGSVZFID0gbmV3IEJOKDUpO1xudmFyIFNJWFRFRU4gPSBuZXcgQk4oMTYpO1xudmFyIEVJR0hUID0gbmV3IEJOKDgpO1xudmFyIFRFTiA9IG5ldyBCTigxMCk7XG52YXIgVEhSRUUgPSBuZXcgQk4oMyk7XG52YXIgU0VWRU4gPSBuZXcgQk4oNyk7XG52YXIgRUxFVkVOID0gbmV3IEJOKDExKTtcbnZhciBGT1VSID0gbmV3IEJOKDQpO1xudmFyIFRXRUxWRSA9IG5ldyBCTigxMik7XG52YXIgcHJpbWVzID0gbnVsbDtcblxuZnVuY3Rpb24gX2dldFByaW1lcygpIHtcbiAgaWYgKHByaW1lcyAhPT0gbnVsbClcbiAgICByZXR1cm4gcHJpbWVzO1xuXG4gIHZhciBsaW1pdCA9IDB4MTAwMDAwO1xuICB2YXIgcmVzID0gW107XG4gIHJlc1swXSA9IDI7XG4gIGZvciAodmFyIGkgPSAxLCBrID0gMzsgayA8IGxpbWl0OyBrICs9IDIpIHtcbiAgICB2YXIgc3FydCA9IE1hdGguY2VpbChNYXRoLnNxcnQoaykpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgaSAmJiByZXNbal0gPD0gc3FydDsgaisrKVxuICAgICAgaWYgKGsgJSByZXNbal0gPT09IDApXG4gICAgICAgIGJyZWFrO1xuXG4gICAgaWYgKGkgIT09IGogJiYgcmVzW2pdIDw9IHNxcnQpXG4gICAgICBjb250aW51ZTtcblxuICAgIHJlc1tpKytdID0gaztcbiAgfVxuICBwcmltZXMgPSByZXM7XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZVNpZXZlKHApIHtcbiAgdmFyIHByaW1lcyA9IF9nZXRQcmltZXMoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByaW1lcy5sZW5ndGg7IGkrKylcbiAgICBpZiAocC5tb2RuKHByaW1lc1tpXSkgPT09IDApIHtcbiAgICAgIGlmIChwLmNtcG4ocHJpbWVzW2ldKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZlcm1hdFRlc3QocCkge1xuICB2YXIgcmVkID0gQk4ubW9udChwKTtcbiAgcmV0dXJuIFRXTy50b1JlZChyZWQpLnJlZFBvdyhwLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpID09PSAwO1xufVxuXG5mdW5jdGlvbiBmaW5kUHJpbWUoYml0cywgZ2VuKSB7XG4gIGlmIChiaXRzIDwgMTYpIHtcbiAgICAvLyB0aGlzIGlzIHdoYXQgb3BlbnNzbCBkb2VzXG4gICAgaWYgKGdlbiA9PT0gMiB8fCBnZW4gPT09IDUpIHtcbiAgICAgIHJldHVybiBuZXcgQk4oWzB4OGMsIDB4N2JdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBCTihbMHg4YywgMHgyN10pO1xuICAgIH1cbiAgfVxuICBnZW4gPSBuZXcgQk4oZ2VuKTtcblxuICB2YXIgbnVtLCBuMjtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIG51bSA9IG5ldyBCTihyYW5kb21CeXRlcyhNYXRoLmNlaWwoYml0cyAvIDgpKSk7XG4gICAgd2hpbGUgKG51bS5iaXRMZW5ndGgoKSA+IGJpdHMpIHtcbiAgICAgIG51bS5pc2hybigxKTtcbiAgICB9XG4gICAgaWYgKG51bS5pc0V2ZW4oKSkge1xuICAgICAgbnVtLmlhZGQoT05FKTtcbiAgICB9XG4gICAgaWYgKCFudW0udGVzdG4oMSkpIHtcbiAgICAgIG51bS5pYWRkKFRXTyk7XG4gICAgfVxuICAgIGlmICghZ2VuLmNtcChUV08pKSB7XG4gICAgICB3aGlsZSAobnVtLm1vZChUV0VOVFlGT1VSKS5jbXAoRUxFVkVOKSkge1xuICAgICAgICBudW0uaWFkZChGT1VSKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFnZW4uY21wKEZJVkUpKSB7XG4gICAgICB3aGlsZSAobnVtLm1vZChURU4pLmNtcChUSFJFRSkpIHtcbiAgICAgICAgbnVtLmlhZGQoRk9VUik7XG4gICAgICB9XG4gICAgfVxuICAgIG4yID0gbnVtLnNocm4oMSk7XG4gICAgaWYgKHNpbXBsZVNpZXZlKG4yKSAmJiBzaW1wbGVTaWV2ZShudW0pICYmXG4gICAgICBmZXJtYXRUZXN0KG4yKSAmJiBmZXJtYXRUZXN0KG51bSkgJiZcbiAgICAgIG1pbGxlclJhYmluLnRlc3QobjIpICYmIG1pbGxlclJhYmluLnRlc3QobnVtKSkge1xuICAgICAgcmV0dXJuIG51bTtcbiAgICB9XG4gIH1cblxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICAgIFwibW9kcDFcIjoge1xuICAgICAgICBcImdlblwiOiBcIjAyXCIsXG4gICAgICAgIFwicHJpbWVcIjogXCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH0sXG4gICAgXCJtb2RwMlwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH0sXG4gICAgXCJtb2RwNVwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHAxNFwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE1XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE2XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHAxN1wiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHAxOFwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9XG59IiwidmFyIGNyeXB0byA9IHJlcXVpcmUoXCJjcnlwdG9cIik7XG52YXIgQmlnSW50ZWdlciA9IHJlcXVpcmUoXCJqc2JuXCIpLkJpZ0ludGVnZXI7XG52YXIgRUNQb2ludEZwID0gcmVxdWlyZShcIi4vbGliL2VjLmpzXCIpLkVDUG9pbnRGcDtcbmV4cG9ydHMuRUNDdXJ2ZXMgPSByZXF1aXJlKFwiLi9saWIvc2VjLmpzXCIpO1xuXG4vLyB6ZXJvIHByZXBhZFxuZnVuY3Rpb24gdW5zdHVwaWQoaGV4LGxlbilcbntcblx0cmV0dXJuIChoZXgubGVuZ3RoID49IGxlbikgPyBoZXggOiB1bnN0dXBpZChcIjBcIitoZXgsbGVuKTtcbn1cblxuZXhwb3J0cy5FQ0tleSA9IGZ1bmN0aW9uKGN1cnZlLCBrZXksIGlzUHVibGljKVxue1xuICB2YXIgcHJpdjtcblx0dmFyIGMgPSBjdXJ2ZSgpO1xuXHR2YXIgbiA9IGMuZ2V0TigpO1xuICB2YXIgYnl0ZXMgPSBNYXRoLmZsb29yKG4uYml0TGVuZ3RoKCkvOCk7XG5cbiAgaWYoa2V5KVxuICB7XG4gICAgaWYoaXNQdWJsaWMpXG4gICAge1xuICAgICAgdmFyIGN1cnZlID0gYy5nZXRDdXJ2ZSgpO1xuLy8gICAgICB2YXIgeCA9IGtleS5zbGljZSgxLGJ5dGVzKzEpOyAvLyBza2lwIHRoZSAwNCBmb3IgdW5jb21wcmVzc2VkIGZvcm1hdFxuLy8gICAgICB2YXIgeSA9IGtleS5zbGljZShieXRlcysxKTtcbi8vICAgICAgdGhpcy5QID0gbmV3IEVDUG9pbnRGcChjdXJ2ZSxcbi8vICAgICAgICBjdXJ2ZS5mcm9tQmlnSW50ZWdlcihuZXcgQmlnSW50ZWdlcih4LnRvU3RyaW5nKFwiaGV4XCIpLCAxNikpLFxuLy8gICAgICAgIGN1cnZlLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHkudG9TdHJpbmcoXCJoZXhcIiksIDE2KSkpOyAgICAgIFxuICAgICAgdGhpcy5QID0gY3VydmUuZGVjb2RlUG9pbnRIZXgoa2V5LnRvU3RyaW5nKFwiaGV4XCIpKTtcbiAgICB9ZWxzZXtcbiAgICAgIGlmKGtleS5sZW5ndGggIT0gYnl0ZXMpIHJldHVybiBmYWxzZTtcbiAgICAgIHByaXYgPSBuZXcgQmlnSW50ZWdlcihrZXkudG9TdHJpbmcoXCJoZXhcIiksIDE2KTsgICAgICBcbiAgICB9XG4gIH1lbHNle1xuICAgIHZhciBuMSA9IG4uc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpO1xuICAgIHZhciByID0gbmV3IEJpZ0ludGVnZXIoY3J5cHRvLnJhbmRvbUJ5dGVzKG4uYml0TGVuZ3RoKCkpKTtcbiAgICBwcml2ID0gci5tb2QobjEpLmFkZChCaWdJbnRlZ2VyLk9ORSk7XG4gICAgdGhpcy5QID0gYy5nZXRHKCkubXVsdGlwbHkocHJpdik7XG4gIH1cbiAgaWYodGhpcy5QKVxuICB7XG4vLyAgdmFyIHB1YmhleCA9IHVuc3R1cGlkKHRoaXMuUC5nZXRYKCkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoMTYpLGJ5dGVzKjIpK3Vuc3R1cGlkKHRoaXMuUC5nZXRZKCkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoMTYpLGJ5dGVzKjIpO1xuLy8gIHRoaXMuUHVibGljS2V5ID0gbmV3IEJ1ZmZlcihcIjA0XCIrcHViaGV4LFwiaGV4XCIpO1xuICAgIHRoaXMuUHVibGljS2V5ID0gbmV3IEJ1ZmZlcihjLmdldEN1cnZlKCkuZW5jb2RlQ29tcHJlc3NlZFBvaW50SGV4KHRoaXMuUCksXCJoZXhcIik7XG4gIH1cbiAgaWYocHJpdilcbiAge1xuICAgIHRoaXMuUHJpdmF0ZUtleSA9IG5ldyBCdWZmZXIodW5zdHVwaWQocHJpdi50b1N0cmluZygxNiksYnl0ZXMqMiksXCJoZXhcIik7XG4gICAgdGhpcy5kZXJpdmVTaGFyZWRTZWNyZXQgPSBmdW5jdGlvbihrZXkpXG4gICAge1xuICAgICAgaWYoIWtleSB8fCAha2V5LlApIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciBTID0ga2V5LlAubXVsdGlwbHkocHJpdik7XG4gICAgICByZXR1cm4gbmV3IEJ1ZmZlcih1bnN0dXBpZChTLmdldFgoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygxNiksYnl0ZXMqMiksXCJoZXhcIik7XG4gICB9ICAgICBcbiAgfVxufVxuXG4iLCIvLyBCYXNpYyBKYXZhc2NyaXB0IEVsbGlwdGljIEN1cnZlIGltcGxlbWVudGF0aW9uXG4vLyBQb3J0ZWQgbG9vc2VseSBmcm9tIEJvdW5jeUNhc3RsZSdzIEphdmEgRUMgY29kZVxuLy8gT25seSBGcCBjdXJ2ZXMgaW1wbGVtZW50ZWQgZm9yIG5vd1xuXG4vLyBSZXF1aXJlcyBqc2JuLmpzIGFuZCBqc2JuMi5qc1xudmFyIEJpZ0ludGVnZXIgPSByZXF1aXJlKCdqc2JuJykuQmlnSW50ZWdlclxudmFyIEJhcnJldHQgPSBCaWdJbnRlZ2VyLnByb3RvdHlwZS5CYXJyZXR0XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vIEVDRmllbGRFbGVtZW50RnBcblxuLy8gY29uc3RydWN0b3JcbmZ1bmN0aW9uIEVDRmllbGRFbGVtZW50RnAocSx4KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICAvLyBUT0RPIGlmKHguY29tcGFyZVRvKHEpID49IDApIGVycm9yXG4gICAgdGhpcy5xID0gcTtcbn1cblxuZnVuY3Rpb24gZmVGcEVxdWFscyhvdGhlcikge1xuICAgIGlmKG90aGVyID09IHRoaXMpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAodGhpcy5xLmVxdWFscyhvdGhlci5xKSAmJiB0aGlzLnguZXF1YWxzKG90aGVyLngpKTtcbn1cblxuZnVuY3Rpb24gZmVGcFRvQmlnSW50ZWdlcigpIHtcbiAgICByZXR1cm4gdGhpcy54O1xufVxuXG5mdW5jdGlvbiBmZUZwTmVnYXRlKCkge1xuICAgIHJldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsIHRoaXMueC5uZWdhdGUoKS5tb2QodGhpcy5xKSk7XG59XG5cbmZ1bmN0aW9uIGZlRnBBZGQoYikge1xuICAgIHJldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsIHRoaXMueC5hZGQoYi50b0JpZ0ludGVnZXIoKSkubW9kKHRoaXMucSkpO1xufVxuXG5mdW5jdGlvbiBmZUZwU3VidHJhY3QoYikge1xuICAgIHJldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsIHRoaXMueC5zdWJ0cmFjdChiLnRvQmlnSW50ZWdlcigpKS5tb2QodGhpcy5xKSk7XG59XG5cbmZ1bmN0aW9uIGZlRnBNdWx0aXBseShiKSB7XG4gICAgcmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSwgdGhpcy54Lm11bHRpcGx5KGIudG9CaWdJbnRlZ2VyKCkpLm1vZCh0aGlzLnEpKTtcbn1cblxuZnVuY3Rpb24gZmVGcFNxdWFyZSgpIHtcbiAgICByZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLCB0aGlzLnguc3F1YXJlKCkubW9kKHRoaXMucSkpO1xufVxuXG5mdW5jdGlvbiBmZUZwRGl2aWRlKGIpIHtcbiAgICByZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLCB0aGlzLngubXVsdGlwbHkoYi50b0JpZ0ludGVnZXIoKS5tb2RJbnZlcnNlKHRoaXMucSkpLm1vZCh0aGlzLnEpKTtcbn1cblxuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZXF1YWxzID0gZmVGcEVxdWFscztcbkVDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnRvQmlnSW50ZWdlciA9IGZlRnBUb0JpZ0ludGVnZXI7XG5FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5uZWdhdGUgPSBmZUZwTmVnYXRlO1xuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuYWRkID0gZmVGcEFkZDtcbkVDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnN1YnRyYWN0ID0gZmVGcFN1YnRyYWN0O1xuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUubXVsdGlwbHkgPSBmZUZwTXVsdGlwbHk7XG5FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5zcXVhcmUgPSBmZUZwU3F1YXJlO1xuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZGl2aWRlID0gZmVGcERpdmlkZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gRUNQb2ludEZwXG5cbi8vIGNvbnN0cnVjdG9yXG5mdW5jdGlvbiBFQ1BvaW50RnAoY3VydmUseCx5LHopIHtcbiAgICB0aGlzLmN1cnZlID0gY3VydmU7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICAgIC8vIFByb2plY3RpdmUgY29vcmRpbmF0ZXM6IGVpdGhlciB6aW52ID09IG51bGwgb3IgeiAqIHppbnYgPT0gMVxuICAgIC8vIHogYW5kIHppbnYgYXJlIGp1c3QgQmlnSW50ZWdlcnMsIG5vdCBmaWVsZEVsZW1lbnRzXG4gICAgaWYoeiA9PSBudWxsKSB7XG4gICAgICB0aGlzLnogPSBCaWdJbnRlZ2VyLk9ORTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnogPSB6O1xuICAgIH1cbiAgICB0aGlzLnppbnYgPSBudWxsO1xuICAgIC8vVE9ETzogY29tcHJlc3Npb24gZmxhZ1xufVxuXG5mdW5jdGlvbiBwb2ludEZwR2V0WCgpIHtcbiAgICBpZih0aGlzLnppbnYgPT0gbnVsbCkge1xuICAgICAgdGhpcy56aW52ID0gdGhpcy56Lm1vZEludmVyc2UodGhpcy5jdXJ2ZS5xKTtcbiAgICB9XG4gICAgdmFyIHIgPSB0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56aW52KTtcbiAgICB0aGlzLmN1cnZlLnJlZHVjZShyKTtcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihyKTtcbn1cblxuZnVuY3Rpb24gcG9pbnRGcEdldFkoKSB7XG4gICAgaWYodGhpcy56aW52ID09IG51bGwpIHtcbiAgICAgIHRoaXMuemludiA9IHRoaXMuei5tb2RJbnZlcnNlKHRoaXMuY3VydmUucSk7XG4gICAgfVxuICAgIHZhciByID0gdGhpcy55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMuemludik7XG4gICAgdGhpcy5jdXJ2ZS5yZWR1Y2Uocik7XG4gICAgcmV0dXJuIHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIocik7XG59XG5cbmZ1bmN0aW9uIHBvaW50RnBFcXVhbHMob3RoZXIpIHtcbiAgICBpZihvdGhlciA9PSB0aGlzKSByZXR1cm4gdHJ1ZTtcbiAgICBpZih0aGlzLmlzSW5maW5pdHkoKSkgcmV0dXJuIG90aGVyLmlzSW5maW5pdHkoKTtcbiAgICBpZihvdGhlci5pc0luZmluaXR5KCkpIHJldHVybiB0aGlzLmlzSW5maW5pdHkoKTtcbiAgICB2YXIgdSwgdjtcbiAgICAvLyB1ID0gWTIgKiBaMSAtIFkxICogWjJcbiAgICB1ID0gb3RoZXIueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShvdGhlci56KSkubW9kKHRoaXMuY3VydmUucSk7XG4gICAgaWYoIXUuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykpIHJldHVybiBmYWxzZTtcbiAgICAvLyB2ID0gWDIgKiBaMSAtIFgxICogWjJcbiAgICB2ID0gb3RoZXIueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShvdGhlci56KSkubW9kKHRoaXMuY3VydmUucSk7XG4gICAgcmV0dXJuIHYuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTyk7XG59XG5cbmZ1bmN0aW9uIHBvaW50RnBJc0luZmluaXR5KCkge1xuICAgIGlmKCh0aGlzLnggPT0gbnVsbCkgJiYgKHRoaXMueSA9PSBudWxsKSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMuei5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSAmJiAhdGhpcy55LnRvQmlnSW50ZWdlcigpLmVxdWFscyhCaWdJbnRlZ2VyLlpFUk8pO1xufVxuXG5mdW5jdGlvbiBwb2ludEZwTmVnYXRlKCkge1xuICAgIHJldHVybiBuZXcgRUNQb2ludEZwKHRoaXMuY3VydmUsIHRoaXMueCwgdGhpcy55Lm5lZ2F0ZSgpLCB0aGlzLnopO1xufVxuXG5mdW5jdGlvbiBwb2ludEZwQWRkKGIpIHtcbiAgICBpZih0aGlzLmlzSW5maW5pdHkoKSkgcmV0dXJuIGI7XG4gICAgaWYoYi5pc0luZmluaXR5KCkpIHJldHVybiB0aGlzO1xuXG4gICAgLy8gdSA9IFkyICogWjEgLSBZMSAqIFoyXG4gICAgdmFyIHUgPSBiLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkoYi56KSkubW9kKHRoaXMuY3VydmUucSk7XG4gICAgLy8gdiA9IFgyICogWjEgLSBYMSAqIFoyXG4gICAgdmFyIHYgPSBiLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkoYi56KSkubW9kKHRoaXMuY3VydmUucSk7XG5cbiAgICBpZihCaWdJbnRlZ2VyLlpFUk8uZXF1YWxzKHYpKSB7XG4gICAgICAgIGlmKEJpZ0ludGVnZXIuWkVSTy5lcXVhbHModSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnR3aWNlKCk7IC8vIHRoaXMgPT0gYiwgc28gZG91YmxlXG4gICAgICAgIH1cblx0cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKTsgLy8gdGhpcyA9IC1iLCBzbyBpbmZpbml0eVxuICAgIH1cblxuICAgIHZhciBUSFJFRSA9IG5ldyBCaWdJbnRlZ2VyKFwiM1wiKTtcbiAgICB2YXIgeDEgPSB0aGlzLngudG9CaWdJbnRlZ2VyKCk7XG4gICAgdmFyIHkxID0gdGhpcy55LnRvQmlnSW50ZWdlcigpO1xuICAgIHZhciB4MiA9IGIueC50b0JpZ0ludGVnZXIoKTtcbiAgICB2YXIgeTIgPSBiLnkudG9CaWdJbnRlZ2VyKCk7XG5cbiAgICB2YXIgdjIgPSB2LnNxdWFyZSgpO1xuICAgIHZhciB2MyA9IHYyLm11bHRpcGx5KHYpO1xuICAgIHZhciB4MXYyID0geDEubXVsdGlwbHkodjIpO1xuICAgIHZhciB6dTIgPSB1LnNxdWFyZSgpLm11bHRpcGx5KHRoaXMueik7XG5cbiAgICAvLyB4MyA9IHYgKiAoejIgKiAoejEgKiB1XjIgLSAyICogeDEgKiB2XjIpIC0gdl4zKVxuICAgIHZhciB4MyA9IHp1Mi5zdWJ0cmFjdCh4MXYyLnNoaWZ0TGVmdCgxKSkubXVsdGlwbHkoYi56KS5zdWJ0cmFjdCh2MykubXVsdGlwbHkodikubW9kKHRoaXMuY3VydmUucSk7XG4gICAgLy8geTMgPSB6MiAqICgzICogeDEgKiB1ICogdl4yIC0geTEgKiB2XjMgLSB6MSAqIHVeMykgKyB1ICogdl4zXG4gICAgdmFyIHkzID0geDF2Mi5tdWx0aXBseShUSFJFRSkubXVsdGlwbHkodSkuc3VidHJhY3QoeTEubXVsdGlwbHkodjMpKS5zdWJ0cmFjdCh6dTIubXVsdGlwbHkodSkpLm11bHRpcGx5KGIueikuYWRkKHUubXVsdGlwbHkodjMpKS5tb2QodGhpcy5jdXJ2ZS5xKTtcbiAgICAvLyB6MyA9IHZeMyAqIHoxICogejJcbiAgICB2YXIgejMgPSB2My5tdWx0aXBseSh0aGlzLnopLm11bHRpcGx5KGIueikubW9kKHRoaXMuY3VydmUucSk7XG5cbiAgICByZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLCB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHgzKSwgdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcih5MyksIHozKTtcbn1cblxuZnVuY3Rpb24gcG9pbnRGcFR3aWNlKCkge1xuICAgIGlmKHRoaXMuaXNJbmZpbml0eSgpKSByZXR1cm4gdGhpcztcbiAgICBpZih0aGlzLnkudG9CaWdJbnRlZ2VyKCkuc2lnbnVtKCkgPT0gMCkgcmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKTtcblxuICAgIC8vIFRPRE86IG9wdGltaXplZCBoYW5kbGluZyBvZiBjb25zdGFudHNcbiAgICB2YXIgVEhSRUUgPSBuZXcgQmlnSW50ZWdlcihcIjNcIik7XG4gICAgdmFyIHgxID0gdGhpcy54LnRvQmlnSW50ZWdlcigpO1xuICAgIHZhciB5MSA9IHRoaXMueS50b0JpZ0ludGVnZXIoKTtcblxuICAgIHZhciB5MXoxID0geTEubXVsdGlwbHkodGhpcy56KTtcbiAgICB2YXIgeTFzcXoxID0geTF6MS5tdWx0aXBseSh5MSkubW9kKHRoaXMuY3VydmUucSk7XG4gICAgdmFyIGEgPSB0aGlzLmN1cnZlLmEudG9CaWdJbnRlZ2VyKCk7XG5cbiAgICAvLyB3ID0gMyAqIHgxXjIgKyBhICogejFeMlxuICAgIHZhciB3ID0geDEuc3F1YXJlKCkubXVsdGlwbHkoVEhSRUUpO1xuICAgIGlmKCFCaWdJbnRlZ2VyLlpFUk8uZXF1YWxzKGEpKSB7XG4gICAgICB3ID0gdy5hZGQodGhpcy56LnNxdWFyZSgpLm11bHRpcGx5KGEpKTtcbiAgICB9XG4gICAgdyA9IHcubW9kKHRoaXMuY3VydmUucSk7XG4gICAgLy90aGlzLmN1cnZlLnJlZHVjZSh3KTtcbiAgICAvLyB4MyA9IDIgKiB5MSAqIHoxICogKHdeMiAtIDggKiB4MSAqIHkxXjIgKiB6MSlcbiAgICB2YXIgeDMgPSB3LnNxdWFyZSgpLnN1YnRyYWN0KHgxLnNoaWZ0TGVmdCgzKS5tdWx0aXBseSh5MXNxejEpKS5zaGlmdExlZnQoMSkubXVsdGlwbHkoeTF6MSkubW9kKHRoaXMuY3VydmUucSk7XG4gICAgLy8geTMgPSA0ICogeTFeMiAqIHoxICogKDMgKiB3ICogeDEgLSAyICogeTFeMiAqIHoxKSAtIHdeM1xuICAgIHZhciB5MyA9IHcubXVsdGlwbHkoVEhSRUUpLm11bHRpcGx5KHgxKS5zdWJ0cmFjdCh5MXNxejEuc2hpZnRMZWZ0KDEpKS5zaGlmdExlZnQoMikubXVsdGlwbHkoeTFzcXoxKS5zdWJ0cmFjdCh3LnNxdWFyZSgpLm11bHRpcGx5KHcpKS5tb2QodGhpcy5jdXJ2ZS5xKTtcbiAgICAvLyB6MyA9IDggKiAoeTEgKiB6MSleM1xuICAgIHZhciB6MyA9IHkxejEuc3F1YXJlKCkubXVsdGlwbHkoeTF6MSkuc2hpZnRMZWZ0KDMpLm1vZCh0aGlzLmN1cnZlLnEpO1xuXG4gICAgcmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSwgdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcih4MyksIHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoeTMpLCB6Myk7XG59XG5cbi8vIFNpbXBsZSBOQUYgKE5vbi1BZGphY2VudCBGb3JtKSBtdWx0aXBsaWNhdGlvbiBhbGdvcml0aG1cbi8vIFRPRE86IG1vZHVsYXJpemUgdGhlIG11bHRpcGxpY2F0aW9uIGFsZ29yaXRobVxuZnVuY3Rpb24gcG9pbnRGcE11bHRpcGx5KGspIHtcbiAgICBpZih0aGlzLmlzSW5maW5pdHkoKSkgcmV0dXJuIHRoaXM7XG4gICAgaWYoay5zaWdudW0oKSA9PSAwKSByZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpO1xuXG4gICAgdmFyIGUgPSBrO1xuICAgIHZhciBoID0gZS5tdWx0aXBseShuZXcgQmlnSW50ZWdlcihcIjNcIikpO1xuXG4gICAgdmFyIG5lZyA9IHRoaXMubmVnYXRlKCk7XG4gICAgdmFyIFIgPSB0aGlzO1xuXG4gICAgdmFyIGk7XG4gICAgZm9yKGkgPSBoLmJpdExlbmd0aCgpIC0gMjsgaSA+IDA7IC0taSkge1xuXHRSID0gUi50d2ljZSgpO1xuXG5cdHZhciBoQml0ID0gaC50ZXN0Qml0KGkpO1xuXHR2YXIgZUJpdCA9IGUudGVzdEJpdChpKTtcblxuXHRpZiAoaEJpdCAhPSBlQml0KSB7XG5cdCAgICBSID0gUi5hZGQoaEJpdCA/IHRoaXMgOiBuZWcpO1xuXHR9XG4gICAgfVxuXG4gICAgcmV0dXJuIFI7XG59XG5cbi8vIENvbXB1dGUgdGhpcypqICsgeCprIChzaW11bHRhbmVvdXMgbXVsdGlwbGljYXRpb24pXG5mdW5jdGlvbiBwb2ludEZwTXVsdGlwbHlUd28oaix4LGspIHtcbiAgdmFyIGk7XG4gIGlmKGouYml0TGVuZ3RoKCkgPiBrLmJpdExlbmd0aCgpKVxuICAgIGkgPSBqLmJpdExlbmd0aCgpIC0gMTtcbiAgZWxzZVxuICAgIGkgPSBrLmJpdExlbmd0aCgpIC0gMTtcblxuICB2YXIgUiA9IHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKTtcbiAgdmFyIGJvdGggPSB0aGlzLmFkZCh4KTtcbiAgd2hpbGUoaSA+PSAwKSB7XG4gICAgUiA9IFIudHdpY2UoKTtcbiAgICBpZihqLnRlc3RCaXQoaSkpIHtcbiAgICAgIGlmKGsudGVzdEJpdChpKSkge1xuICAgICAgICBSID0gUi5hZGQoYm90aCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgUiA9IFIuYWRkKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKGsudGVzdEJpdChpKSkge1xuICAgICAgICBSID0gUi5hZGQoeCk7XG4gICAgICB9XG4gICAgfVxuICAgIC0taTtcbiAgfVxuXG4gIHJldHVybiBSO1xufVxuXG5FQ1BvaW50RnAucHJvdG90eXBlLmdldFggPSBwb2ludEZwR2V0WDtcbkVDUG9pbnRGcC5wcm90b3R5cGUuZ2V0WSA9IHBvaW50RnBHZXRZO1xuRUNQb2ludEZwLnByb3RvdHlwZS5lcXVhbHMgPSBwb2ludEZwRXF1YWxzO1xuRUNQb2ludEZwLnByb3RvdHlwZS5pc0luZmluaXR5ID0gcG9pbnRGcElzSW5maW5pdHk7XG5FQ1BvaW50RnAucHJvdG90eXBlLm5lZ2F0ZSA9IHBvaW50RnBOZWdhdGU7XG5FQ1BvaW50RnAucHJvdG90eXBlLmFkZCA9IHBvaW50RnBBZGQ7XG5FQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlID0gcG9pbnRGcFR3aWNlO1xuRUNQb2ludEZwLnByb3RvdHlwZS5tdWx0aXBseSA9IHBvaW50RnBNdWx0aXBseTtcbkVDUG9pbnRGcC5wcm90b3R5cGUubXVsdGlwbHlUd28gPSBwb2ludEZwTXVsdGlwbHlUd287XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vIEVDQ3VydmVGcFxuXG4vLyBjb25zdHJ1Y3RvclxuZnVuY3Rpb24gRUNDdXJ2ZUZwKHEsYSxiKSB7XG4gICAgdGhpcy5xID0gcTtcbiAgICB0aGlzLmEgPSB0aGlzLmZyb21CaWdJbnRlZ2VyKGEpO1xuICAgIHRoaXMuYiA9IHRoaXMuZnJvbUJpZ0ludGVnZXIoYik7XG4gICAgdGhpcy5pbmZpbml0eSA9IG5ldyBFQ1BvaW50RnAodGhpcywgbnVsbCwgbnVsbCk7XG4gICAgdGhpcy5yZWR1Y2VyID0gbmV3IEJhcnJldHQodGhpcy5xKTtcbn1cblxuZnVuY3Rpb24gY3VydmVGcEdldFEoKSB7XG4gICAgcmV0dXJuIHRoaXMucTtcbn1cblxuZnVuY3Rpb24gY3VydmVGcEdldEEoKSB7XG4gICAgcmV0dXJuIHRoaXMuYTtcbn1cblxuZnVuY3Rpb24gY3VydmVGcEdldEIoKSB7XG4gICAgcmV0dXJuIHRoaXMuYjtcbn1cblxuZnVuY3Rpb24gY3VydmVGcEVxdWFscyhvdGhlcikge1xuICAgIGlmKG90aGVyID09IHRoaXMpIHJldHVybiB0cnVlO1xuICAgIHJldHVybih0aGlzLnEuZXF1YWxzKG90aGVyLnEpICYmIHRoaXMuYS5lcXVhbHMob3RoZXIuYSkgJiYgdGhpcy5iLmVxdWFscyhvdGhlci5iKSk7XG59XG5cbmZ1bmN0aW9uIGN1cnZlRnBHZXRJbmZpbml0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0eTtcbn1cblxuZnVuY3Rpb24gY3VydmVGcEZyb21CaWdJbnRlZ2VyKHgpIHtcbiAgICByZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLCB4KTtcbn1cblxuZnVuY3Rpb24gY3VydmVSZWR1Y2UoeCkge1xuICAgIHRoaXMucmVkdWNlci5yZWR1Y2UoeCk7XG59XG5cbi8vIGZvciBub3csIHdvcmsgd2l0aCBoZXggc3RyaW5ncyBiZWNhdXNlIHRoZXkncmUgZWFzaWVyIGluIEpTXG5mdW5jdGlvbiBjdXJ2ZUZwRGVjb2RlUG9pbnRIZXgocykge1xuICAgIHN3aXRjaChwYXJzZUludChzLnN1YnN0cigwLDIpLCAxNikpIHsgLy8gZmlyc3QgYnl0ZVxuICAgIGNhc2UgMDpcblx0cmV0dXJuIHRoaXMuaW5maW5pdHk7XG4gICAgY2FzZSAyOlxuICAgIGNhc2UgMzpcblx0Ly8gcG9pbnQgY29tcHJlc3Npb24gbm90IHN1cHBvcnRlZCB5ZXRcblx0cmV0dXJuIG51bGw7XG4gICAgY2FzZSA0OlxuICAgIGNhc2UgNjpcbiAgICBjYXNlIDc6XG5cdHZhciBsZW4gPSAocy5sZW5ndGggLSAyKSAvIDI7XG5cdHZhciB4SGV4ID0gcy5zdWJzdHIoMiwgbGVuKTtcblx0dmFyIHlIZXggPSBzLnN1YnN0cihsZW4rMiwgbGVuKTtcblxuXHRyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLFxuXHRcdFx0ICAgICB0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHhIZXgsIDE2KSksXG5cdFx0XHQgICAgIHRoaXMuZnJvbUJpZ0ludGVnZXIobmV3IEJpZ0ludGVnZXIoeUhleCwgMTYpKSk7XG5cbiAgICBkZWZhdWx0OiAvLyB1bnN1cHBvcnRlZFxuXHRyZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGN1cnZlRnBFbmNvZGVQb2ludEhleChwKSB7XG5cdGlmIChwLmlzSW5maW5pdHkoKSkgcmV0dXJuIFwiMDBcIjtcblx0dmFyIHhIZXggPSBwLmdldFgoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygxNik7XG5cdHZhciB5SGV4ID0gcC5nZXRZKCkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoMTYpO1xuXHR2YXIgb0xlbiA9IHRoaXMuZ2V0USgpLnRvU3RyaW5nKDE2KS5sZW5ndGg7XG5cdGlmICgob0xlbiAlIDIpICE9IDApIG9MZW4rKztcblx0d2hpbGUgKHhIZXgubGVuZ3RoIDwgb0xlbikge1xuXHRcdHhIZXggPSBcIjBcIiArIHhIZXg7XG5cdH1cblx0d2hpbGUgKHlIZXgubGVuZ3RoIDwgb0xlbikge1xuXHRcdHlIZXggPSBcIjBcIiArIHlIZXg7XG5cdH1cblx0cmV0dXJuIFwiMDRcIiArIHhIZXggKyB5SGV4O1xufVxuXG5FQ0N1cnZlRnAucHJvdG90eXBlLmdldFEgPSBjdXJ2ZUZwR2V0UTtcbkVDQ3VydmVGcC5wcm90b3R5cGUuZ2V0QSA9IGN1cnZlRnBHZXRBO1xuRUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRCID0gY3VydmVGcEdldEI7XG5FQ0N1cnZlRnAucHJvdG90eXBlLmVxdWFscyA9IGN1cnZlRnBFcXVhbHM7XG5FQ0N1cnZlRnAucHJvdG90eXBlLmdldEluZmluaXR5ID0gY3VydmVGcEdldEluZmluaXR5O1xuRUNDdXJ2ZUZwLnByb3RvdHlwZS5mcm9tQmlnSW50ZWdlciA9IGN1cnZlRnBGcm9tQmlnSW50ZWdlcjtcbkVDQ3VydmVGcC5wcm90b3R5cGUucmVkdWNlID0gY3VydmVSZWR1Y2U7XG4vL0VDQ3VydmVGcC5wcm90b3R5cGUuZGVjb2RlUG9pbnRIZXggPSBjdXJ2ZUZwRGVjb2RlUG9pbnRIZXg7XG5FQ0N1cnZlRnAucHJvdG90eXBlLmVuY29kZVBvaW50SGV4ID0gY3VydmVGcEVuY29kZVBvaW50SGV4O1xuXG4vLyBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20va2FpZWx2aW4vanNibi1lYy1wb2ludC1jb21wcmVzc2lvblxuRUNDdXJ2ZUZwLnByb3RvdHlwZS5kZWNvZGVQb2ludEhleCA9IGZ1bmN0aW9uKHMpXG57XG5cdHZhciB5SXNFdmVuO1xuICAgIHN3aXRjaChwYXJzZUludChzLnN1YnN0cigwLDIpLCAxNikpIHsgLy8gZmlyc3QgYnl0ZVxuICAgIGNhc2UgMDpcblx0cmV0dXJuIHRoaXMuaW5maW5pdHk7XG4gICAgY2FzZSAyOlxuXHR5SXNFdmVuID0gZmFsc2U7XG4gICAgY2FzZSAzOlxuXHRpZih5SXNFdmVuID09IHVuZGVmaW5lZCkgeUlzRXZlbiA9IHRydWU7XG5cdHZhciBsZW4gPSBzLmxlbmd0aCAtIDI7XG5cdHZhciB4SGV4ID0gcy5zdWJzdHIoMiwgbGVuKTtcblx0dmFyIHggPSB0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHhIZXgsMTYpKTtcblx0dmFyIGFscGhhID0geC5tdWx0aXBseSh4LnNxdWFyZSgpLmFkZCh0aGlzLmdldEEoKSkpLmFkZCh0aGlzLmdldEIoKSk7XG5cdHZhciBiZXRhID0gYWxwaGEuc3FydCgpO1xuXG4gICAgaWYgKGJldGEgPT0gbnVsbCkgdGhyb3cgXCJJbnZhbGlkIHBvaW50IGNvbXByZXNzaW9uXCI7XG5cbiAgICB2YXIgYmV0YVZhbHVlID0gYmV0YS50b0JpZ0ludGVnZXIoKTtcbiAgICBpZiAoYmV0YVZhbHVlLnRlc3RCaXQoMCkgIT0geUlzRXZlbilcbiAgICB7XG4gICAgICAgIC8vIFVzZSB0aGUgb3RoZXIgcm9vdFxuICAgICAgICBiZXRhID0gdGhpcy5mcm9tQmlnSW50ZWdlcih0aGlzLmdldFEoKS5zdWJ0cmFjdChiZXRhVmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcyx4LGJldGEpO1xuICAgIGNhc2UgNDpcbiAgICBjYXNlIDY6XG4gICAgY2FzZSA3OlxuXHR2YXIgbGVuID0gKHMubGVuZ3RoIC0gMikgLyAyO1xuXHR2YXIgeEhleCA9IHMuc3Vic3RyKDIsIGxlbik7XG5cdHZhciB5SGV4ID0gcy5zdWJzdHIobGVuKzIsIGxlbik7XG5cblx0cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcyxcblx0XHRcdCAgICAgdGhpcy5mcm9tQmlnSW50ZWdlcihuZXcgQmlnSW50ZWdlcih4SGV4LCAxNikpLFxuXHRcdFx0ICAgICB0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHlIZXgsIDE2KSkpO1xuXG4gICAgZGVmYXVsdDogLy8gdW5zdXBwb3J0ZWRcblx0cmV0dXJuIG51bGw7XG4gICAgfVxufVxuRUNDdXJ2ZUZwLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkUG9pbnRIZXggPSBmdW5jdGlvbihwKVxue1xuXHRpZiAocC5pc0luZmluaXR5KCkpIHJldHVybiBcIjAwXCI7XG5cdHZhciB4SGV4ID0gcC5nZXRYKCkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoMTYpO1xuXHR2YXIgb0xlbiA9IHRoaXMuZ2V0USgpLnRvU3RyaW5nKDE2KS5sZW5ndGg7XG5cdGlmICgob0xlbiAlIDIpICE9IDApIG9MZW4rKztcblx0d2hpbGUgKHhIZXgubGVuZ3RoIDwgb0xlbilcblx0XHR4SGV4ID0gXCIwXCIgKyB4SGV4O1xuXHR2YXIgeVByZWZpeDtcblx0aWYocC5nZXRZKCkudG9CaWdJbnRlZ2VyKCkuaXNFdmVuKCkpIHlQcmVmaXggPSBcIjAyXCI7XG5cdGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5UHJlZml4ID0gXCIwM1wiO1xuXG5cdHJldHVybiB5UHJlZml4ICsgeEhleDtcbn1cblxuXG5FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5nZXRSID0gZnVuY3Rpb24oKVxue1xuXHRpZih0aGlzLnIgIT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5yO1xuXG4gICAgdGhpcy5yID0gbnVsbDtcbiAgICB2YXIgYml0TGVuZ3RoID0gdGhpcy5xLmJpdExlbmd0aCgpO1xuICAgIGlmIChiaXRMZW5ndGggPiAxMjgpXG4gICAge1xuICAgICAgICB2YXIgZmlyc3RXb3JkID0gdGhpcy5xLnNoaWZ0UmlnaHQoYml0TGVuZ3RoIC0gNjQpO1xuICAgICAgICBpZiAoZmlyc3RXb3JkLmludFZhbHVlKCkgPT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuciA9IEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChiaXRMZW5ndGgpLnN1YnRyYWN0KHRoaXMucSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucjtcbn1cbkVDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLm1vZE11bHQgPSBmdW5jdGlvbih4MSx4MilcbntcbiAgICByZXR1cm4gdGhpcy5tb2RSZWR1Y2UoeDEubXVsdGlwbHkoeDIpKTtcbn1cbkVDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLm1vZFJlZHVjZSA9IGZ1bmN0aW9uKHgpXG57XG4gICAgaWYgKHRoaXMuZ2V0UigpICE9IG51bGwpXG4gICAge1xuICAgICAgICB2YXIgcUxlbiA9IHEuYml0TGVuZ3RoKCk7XG4gICAgICAgIHdoaWxlICh4LmJpdExlbmd0aCgpID4gKHFMZW4gKyAxKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHUgPSB4LnNoaWZ0UmlnaHQocUxlbik7XG4gICAgICAgICAgICB2YXIgdiA9IHguc3VidHJhY3QodS5zaGlmdExlZnQocUxlbikpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmdldFIoKS5lcXVhbHMoQmlnSW50ZWdlci5PTkUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHUgPSB1Lm11bHRpcGx5KHRoaXMuZ2V0UigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHggPSB1LmFkZCh2KTsgXG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHguY29tcGFyZVRvKHEpID49IDApXG4gICAgICAgIHtcbiAgICAgICAgICAgIHggPSB4LnN1YnRyYWN0KHEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHggPSB4Lm1vZChxKTtcbiAgICB9XG4gICAgcmV0dXJuIHg7XG59XG5FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5zcXJ0ID0gZnVuY3Rpb24oKVxue1xuICAgIGlmICghdGhpcy5xLnRlc3RCaXQoMCkpIHRocm93IFwidW5zdXBwb3J0ZWRcIjtcblxuICAgIC8vIHAgbW9kIDQgPT0gM1xuICAgIGlmICh0aGlzLnEudGVzdEJpdCgxKSlcbiAgICB7XG4gICAgXHR2YXIgeiA9IG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLngubW9kUG93KHRoaXMucS5zaGlmdFJpZ2h0KDIpLmFkZChCaWdJbnRlZ2VyLk9ORSksdGhpcy5xKSk7XG4gICAgXHRyZXR1cm4gei5zcXVhcmUoKS5lcXVhbHModGhpcykgPyB6IDogbnVsbDtcbiAgICB9XG5cbiAgICAvLyBwIG1vZCA0ID09IDFcbiAgICB2YXIgcU1pbnVzT25lID0gdGhpcy5xLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTtcblxuICAgIHZhciBsZWdlbmRyZUV4cG9uZW50ID0gcU1pbnVzT25lLnNoaWZ0UmlnaHQoMSk7XG4gICAgaWYgKCEodGhpcy54Lm1vZFBvdyhsZWdlbmRyZUV4cG9uZW50LCB0aGlzLnEpLmVxdWFscyhCaWdJbnRlZ2VyLk9ORSkpKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHUgPSBxTWludXNPbmUuc2hpZnRSaWdodCgyKTtcbiAgICB2YXIgayA9IHUuc2hpZnRMZWZ0KDEpLmFkZChCaWdJbnRlZ2VyLk9ORSk7XG5cbiAgICB2YXIgUSA9IHRoaXMueDtcbiAgICB2YXIgZm91clEgPSBtb2REb3VibGUobW9kRG91YmxlKFEpKTtcblxuICAgIHZhciBVLCBWO1xuICAgIGRvXG4gICAge1xuICAgICAgICB2YXIgUDtcbiAgICAgICAgZG9cbiAgICAgICAge1xuICAgICAgICAgICAgUCA9IG5ldyBCaWdJbnRlZ2VyKHRoaXMucS5iaXRMZW5ndGgoKSwgbmV3IFNlY3VyZVJhbmRvbSgpKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoUC5jb21wYXJlVG8odGhpcy5xKSA+PSAwXG4gICAgICAgICAgICB8fCAhKFAubXVsdGlwbHkoUCkuc3VidHJhY3QoZm91clEpLm1vZFBvdyhsZWdlbmRyZUV4cG9uZW50LCB0aGlzLnEpLmVxdWFscyhxTWludXNPbmUpKSk7XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMubHVjYXNTZXF1ZW5jZShQLCBRLCBrKTtcbiAgICAgICAgVSA9IHJlc3VsdFswXTtcbiAgICAgICAgViA9IHJlc3VsdFsxXTtcblxuICAgICAgICBpZiAodGhpcy5tb2RNdWx0KFYsIFYpLmVxdWFscyhmb3VyUSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIEludGVnZXIgZGl2aXNpb24gYnkgMiwgbW9kIHFcbiAgICAgICAgICAgIGlmIChWLnRlc3RCaXQoMCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgViA9IFYuYWRkKHEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBWID0gVi5zaGlmdFJpZ2h0KDEpO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAocSxWKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3aGlsZSAoVS5lcXVhbHMoQmlnSW50ZWdlci5PTkUpIHx8IFUuZXF1YWxzKHFNaW51c09uZSkpO1xuXG4gICAgcmV0dXJuIG51bGw7XG59XG5FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5sdWNhc1NlcXVlbmNlID0gZnVuY3Rpb24oUCxRLGspXG57XG4gICAgdmFyIG4gPSBrLmJpdExlbmd0aCgpO1xuICAgIHZhciBzID0gay5nZXRMb3dlc3RTZXRCaXQoKTtcblxuICAgIHZhciBVaCA9IEJpZ0ludGVnZXIuT05FO1xuICAgIHZhciBWbCA9IEJpZ0ludGVnZXIuVFdPO1xuICAgIHZhciBWaCA9IFA7XG4gICAgdmFyIFFsID0gQmlnSW50ZWdlci5PTkU7XG4gICAgdmFyIFFoID0gQmlnSW50ZWdlci5PTkU7XG5cbiAgICBmb3IgKHZhciBqID0gbiAtIDE7IGogPj0gcyArIDE7IC0tailcbiAgICB7XG4gICAgICAgIFFsID0gdGhpcy5tb2RNdWx0KFFsLCBRaCk7XG5cbiAgICAgICAgaWYgKGsudGVzdEJpdChqKSlcbiAgICAgICAge1xuICAgICAgICAgICAgUWggPSB0aGlzLm1vZE11bHQoUWwsIFEpO1xuICAgICAgICAgICAgVWggPSB0aGlzLm1vZE11bHQoVWgsIFZoKTtcbiAgICAgICAgICAgIFZsID0gdGhpcy5tb2RSZWR1Y2UoVmgubXVsdGlwbHkoVmwpLnN1YnRyYWN0KFAubXVsdGlwbHkoUWwpKSk7XG4gICAgICAgICAgICBWaCA9IHRoaXMubW9kUmVkdWNlKFZoLm11bHRpcGx5KFZoKS5zdWJ0cmFjdChRaC5zaGlmdExlZnQoMSkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIFFoID0gUWw7XG4gICAgICAgICAgICBVaCA9IHRoaXMubW9kUmVkdWNlKFVoLm11bHRpcGx5KFZsKS5zdWJ0cmFjdChRbCkpO1xuICAgICAgICAgICAgVmggPSB0aGlzLm1vZFJlZHVjZShWaC5tdWx0aXBseShWbCkuc3VidHJhY3QoUC5tdWx0aXBseShRbCkpKTtcbiAgICAgICAgICAgIFZsID0gdGhpcy5tb2RSZWR1Y2UoVmwubXVsdGlwbHkoVmwpLnN1YnRyYWN0KFFsLnNoaWZ0TGVmdCgxKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgUWwgPSB0aGlzLm1vZE11bHQoUWwsIFFoKTtcbiAgICBRaCA9IHRoaXMubW9kTXVsdChRbCwgUSk7XG4gICAgVWggPSB0aGlzLm1vZFJlZHVjZShVaC5tdWx0aXBseShWbCkuc3VidHJhY3QoUWwpKTtcbiAgICBWbCA9IHRoaXMubW9kUmVkdWNlKFZoLm11bHRpcGx5KFZsKS5zdWJ0cmFjdChQLm11bHRpcGx5KFFsKSkpO1xuICAgIFFsID0gdGhpcy5tb2RNdWx0KFFsLCBRaCk7XG5cbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBzOyArK2opXG4gICAge1xuICAgICAgICBVaCA9IHRoaXMubW9kTXVsdChVaCwgVmwpO1xuICAgICAgICBWbCA9IHRoaXMubW9kUmVkdWNlKFZsLm11bHRpcGx5KFZsKS5zdWJ0cmFjdChRbC5zaGlmdExlZnQoMSkpKTtcbiAgICAgICAgUWwgPSB0aGlzLm1vZE11bHQoUWwsIFFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gWyBVaCwgVmwgXTtcbn1cblxudmFyIGV4cG9ydHMgPSB7XG4gIEVDQ3VydmVGcDogRUNDdXJ2ZUZwLFxuICBFQ1BvaW50RnA6IEVDUG9pbnRGcCxcbiAgRUNGaWVsZEVsZW1lbnRGcDogRUNGaWVsZEVsZW1lbnRGcFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNcbiIsIi8vIE5hbWVkIEVDIGN1cnZlc1xuXG4vLyBSZXF1aXJlcyBlYy5qcywganNibi5qcywgYW5kIGpzYm4yLmpzXG52YXIgQmlnSW50ZWdlciA9IHJlcXVpcmUoJ2pzYm4nKS5CaWdJbnRlZ2VyXG52YXIgRUNDdXJ2ZUZwID0gcmVxdWlyZSgnLi9lYy5qcycpLkVDQ3VydmVGcFxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vIFg5RUNQYXJhbWV0ZXJzXG5cbi8vIGNvbnN0cnVjdG9yXG5mdW5jdGlvbiBYOUVDUGFyYW1ldGVycyhjdXJ2ZSxnLG4saCkge1xuICAgIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgICB0aGlzLmcgPSBnO1xuICAgIHRoaXMubiA9IG47XG4gICAgdGhpcy5oID0gaDtcbn1cblxuZnVuY3Rpb24geDlnZXRDdXJ2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZTtcbn1cblxuZnVuY3Rpb24geDlnZXRHKCkge1xuICAgIHJldHVybiB0aGlzLmc7XG59XG5cbmZ1bmN0aW9uIHg5Z2V0TigpIHtcbiAgICByZXR1cm4gdGhpcy5uO1xufVxuXG5mdW5jdGlvbiB4OWdldEgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaDtcbn1cblxuWDlFQ1BhcmFtZXRlcnMucHJvdG90eXBlLmdldEN1cnZlID0geDlnZXRDdXJ2ZTtcblg5RUNQYXJhbWV0ZXJzLnByb3RvdHlwZS5nZXRHID0geDlnZXRHO1xuWDlFQ1BhcmFtZXRlcnMucHJvdG90eXBlLmdldE4gPSB4OWdldE47XG5YOUVDUGFyYW1ldGVycy5wcm90b3R5cGUuZ2V0SCA9IHg5Z2V0SDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gU0VDTmFtZWRDdXJ2ZXNcblxuZnVuY3Rpb24gZnJvbUhleChzKSB7IHJldHVybiBuZXcgQmlnSW50ZWdlcihzLCAxNik7IH1cblxuZnVuY3Rpb24gc2VjcDEyOHIxKCkge1xuICAgIC8vIHAgPSAyXjEyOCAtIDJeOTcgLSAxXG4gICAgdmFyIHAgPSBmcm9tSGV4KFwiRkZGRkZGRkRGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZcIik7XG4gICAgdmFyIGEgPSBmcm9tSGV4KFwiRkZGRkZGRkRGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNcIik7XG4gICAgdmFyIGIgPSBmcm9tSGV4KFwiRTg3NTc5QzExMDc5RjQzREQ4MjQ5OTNDMkNFRTVFRDNcIik7XG4gICAgLy9ieXRlW10gUyA9IEhleC5kZWNvZGUoXCIwMDBFMEQ0RDY5NkU2NzY4NzU2MTUxNzUwQ0MwM0E0NDczRDAzNjc5XCIpO1xuICAgIHZhciBuID0gZnJvbUhleChcIkZGRkZGRkZFMDAwMDAwMDA3NUEzMEQxQjkwMzhBMTE1XCIpO1xuICAgIHZhciBoID0gQmlnSW50ZWdlci5PTkU7XG4gICAgdmFyIGN1cnZlID0gbmV3IEVDQ3VydmVGcChwLCBhLCBiKTtcbiAgICB2YXIgRyA9IGN1cnZlLmRlY29kZVBvaW50SGV4KFwiMDRcIlxuICAgICAgICAgICAgICAgICsgXCIxNjFGRjc1MjhCODk5QjJEMEMyODYwN0NBNTJDNUI4NlwiXG5cdFx0KyBcIkNGNUFDODM5NUJBRkVCMTNDMDJEQTI5MkRERUQ3QTgzXCIpO1xuICAgIHJldHVybiBuZXcgWDlFQ1BhcmFtZXRlcnMoY3VydmUsIEcsIG4sIGgpO1xufVxuXG5mdW5jdGlvbiBzZWNwMTYwazEoKSB7XG4gICAgLy8gcCA9IDJeMTYwIC0gMl4zMiAtIDJeMTQgLSAyXjEyIC0gMl45IC0gMl44IC0gMl43IC0gMl4zIC0gMl4yIC0gMVxuICAgIHZhciBwID0gZnJvbUhleChcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkFDNzNcIik7XG4gICAgdmFyIGEgPSBCaWdJbnRlZ2VyLlpFUk87XG4gICAgdmFyIGIgPSBmcm9tSGV4KFwiN1wiKTtcbiAgICAvL2J5dGVbXSBTID0gbnVsbDtcbiAgICB2YXIgbiA9IGZyb21IZXgoXCIwMTAwMDAwMDAwMDAwMDAwMDAwMDAxQjhGQTE2REZBQjlBQ0ExNkI2QjNcIik7XG4gICAgdmFyIGggPSBCaWdJbnRlZ2VyLk9ORTtcbiAgICB2YXIgY3VydmUgPSBuZXcgRUNDdXJ2ZUZwKHAsIGEsIGIpO1xuICAgIHZhciBHID0gY3VydmUuZGVjb2RlUG9pbnRIZXgoXCIwNFwiXG4gICAgICAgICAgICAgICAgKyBcIjNCNEMzODJDRTM3QUExOTJBNDAxOUU3NjMwMzZGNEY1REQ0RDdFQkJcIlxuICAgICAgICAgICAgICAgICsgXCI5MzhDRjkzNTMxOEZEQ0VENkJDMjgyODY1MzE3MzNDM0YwM0M0RkVFXCIpO1xuICAgIHJldHVybiBuZXcgWDlFQ1BhcmFtZXRlcnMoY3VydmUsIEcsIG4sIGgpO1xufVxuXG5mdW5jdGlvbiBzZWNwMTYwcjEoKSB7XG4gICAgLy8gcCA9IDJeMTYwIC0gMl4zMSAtIDFcbiAgICB2YXIgcCA9IGZyb21IZXgoXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdGRkZGRkZGXCIpO1xuICAgIHZhciBhID0gZnJvbUhleChcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0ZGRkZGRkNcIik7XG4gICAgdmFyIGIgPSBmcm9tSGV4KFwiMUM5N0JFRkM1NEJEN0E4QjY1QUNGODlGODFENEQ0QURDNTY1RkE0NVwiKTtcbiAgICAvL2J5dGVbXSBTID0gSGV4LmRlY29kZShcIjEwNTNDREU0MkMxNEQ2OTZFNjc2ODc1NjE1MTc1MzNCRjNGODMzNDVcIik7XG4gICAgdmFyIG4gPSBmcm9tSGV4KFwiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMUY0QzhGOTI3QUVEM0NBNzUyMjU3XCIpO1xuICAgIHZhciBoID0gQmlnSW50ZWdlci5PTkU7XG4gICAgdmFyIGN1cnZlID0gbmV3IEVDQ3VydmVGcChwLCBhLCBiKTtcbiAgICB2YXIgRyA9IGN1cnZlLmRlY29kZVBvaW50SGV4KFwiMDRcIlxuXHRcdCsgXCI0QTk2QjU2ODhFRjU3MzI4NDY2NDY5ODk2OEMzOEJCOTEzQ0JGQzgyXCJcblx0XHQrIFwiMjNBNjI4NTUzMTY4OTQ3RDU5RENDOTEyMDQyMzUxMzc3QUM1RkIzMlwiKTtcbiAgICByZXR1cm4gbmV3IFg5RUNQYXJhbWV0ZXJzKGN1cnZlLCBHLCBuLCBoKTtcbn1cblxuZnVuY3Rpb24gc2VjcDE5MmsxKCkge1xuICAgIC8vIHAgPSAyXjE5MiAtIDJeMzIgLSAyXjEyIC0gMl44IC0gMl43IC0gMl42IC0gMl4zIC0gMVxuICAgIHZhciBwID0gZnJvbUhleChcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRUUzN1wiKTtcbiAgICB2YXIgYSA9IEJpZ0ludGVnZXIuWkVSTztcbiAgICB2YXIgYiA9IGZyb21IZXgoXCIzXCIpO1xuICAgIC8vYnl0ZVtdIFMgPSBudWxsO1xuICAgIHZhciBuID0gZnJvbUhleChcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTI2RjJGQzE3MEY2OTQ2NkE3NERFRkQ4RFwiKTtcbiAgICB2YXIgaCA9IEJpZ0ludGVnZXIuT05FO1xuICAgIHZhciBjdXJ2ZSA9IG5ldyBFQ0N1cnZlRnAocCwgYSwgYik7XG4gICAgdmFyIEcgPSBjdXJ2ZS5kZWNvZGVQb2ludEhleChcIjA0XCJcbiAgICAgICAgICAgICAgICArIFwiREI0RkYxMEVDMDU3RTlBRTI2QjA3RDAyODBCN0Y0MzQxREE1RDFCMUVBRTA2QzdEXCJcbiAgICAgICAgICAgICAgICArIFwiOUIyRjJGNkQ5QzU2MjhBNzg0NDE2M0QwMTVCRTg2MzQ0MDgyQUE4OEQ5NUUyRjlEXCIpO1xuICAgIHJldHVybiBuZXcgWDlFQ1BhcmFtZXRlcnMoY3VydmUsIEcsIG4sIGgpO1xufVxuXG5mdW5jdGlvbiBzZWNwMTkycjEoKSB7XG4gICAgLy8gcCA9IDJeMTkyIC0gMl42NCAtIDFcbiAgICB2YXIgcCA9IGZyb21IZXgoXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZcIik7XG4gICAgdmFyIGEgPSBmcm9tSGV4KFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZDXCIpO1xuICAgIHZhciBiID0gZnJvbUhleChcIjY0MjEwNTE5RTU5QzgwRTcwRkE3RTlBQjcyMjQzMDQ5RkVCOERFRUNDMTQ2QjlCMVwiKTtcbiAgICAvL2J5dGVbXSBTID0gSGV4LmRlY29kZShcIjMwNDVBRTZGQzg0MjJGNjRFRDU3OTUyOEQzODEyMEVBRTEyMTk2RDVcIik7XG4gICAgdmFyIG4gPSBmcm9tSGV4KFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGOTlERUY4MzYxNDZCQzlCMUI0RDIyODMxXCIpO1xuICAgIHZhciBoID0gQmlnSW50ZWdlci5PTkU7XG4gICAgdmFyIGN1cnZlID0gbmV3IEVDQ3VydmVGcChwLCBhLCBiKTtcbiAgICB2YXIgRyA9IGN1cnZlLmRlY29kZVBvaW50SGV4KFwiMDRcIlxuICAgICAgICAgICAgICAgICsgXCIxODhEQTgwRUIwMzA5MEY2N0NCRjIwRUI0M0ExODgwMEY0RkYwQUZEODJGRjEwMTJcIlxuICAgICAgICAgICAgICAgICsgXCIwNzE5MkI5NUZGQzhEQTc4NjMxMDExRUQ2QjI0Q0RENTczRjk3N0ExMUU3OTQ4MTFcIik7XG4gICAgcmV0dXJuIG5ldyBYOUVDUGFyYW1ldGVycyhjdXJ2ZSwgRywgbiwgaCk7XG59XG5cbmZ1bmN0aW9uIHNlY3AyMjRyMSgpIHtcbiAgICAvLyBwID0gMl4yMjQgLSAyXjk2ICsgMVxuICAgIHZhciBwID0gZnJvbUhleChcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxXCIpO1xuICAgIHZhciBhID0gZnJvbUhleChcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFXCIpO1xuICAgIHZhciBiID0gZnJvbUhleChcIkI0MDUwQTg1MEMwNEIzQUJGNTQxMzI1NjUwNDRCMEI3RDdCRkQ4QkEyNzBCMzk0MzIzNTVGRkI0XCIpO1xuICAgIC8vYnl0ZVtdIFMgPSBIZXguZGVjb2RlKFwiQkQ3MTM0NDc5OUQ1QzdGQ0RDNDVCNTlGQTNCOUFCOEY2QTk0OEJDNVwiKTtcbiAgICB2YXIgbiA9IGZyb21IZXgoXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTZBMkUwQjhGMDNFMTNERDI5NDU1QzVDMkEzRFwiKTtcbiAgICB2YXIgaCA9IEJpZ0ludGVnZXIuT05FO1xuICAgIHZhciBjdXJ2ZSA9IG5ldyBFQ0N1cnZlRnAocCwgYSwgYik7XG4gICAgdmFyIEcgPSBjdXJ2ZS5kZWNvZGVQb2ludEhleChcIjA0XCJcbiAgICAgICAgICAgICAgICArIFwiQjcwRTBDQkQ2QkI0QkY3RjMyMTM5MEI5NEEwM0MxRDM1NkMyMTEyMjM0MzI4MEQ2MTE1QzFEMjFcIlxuICAgICAgICAgICAgICAgICsgXCJCRDM3NjM4OEI1RjcyM0ZCNEMyMkRGRTZDRDQzNzVBMDVBMDc0NzY0NDRENTgxOTk4NTAwN0UzNFwiKTtcbiAgICByZXR1cm4gbmV3IFg5RUNQYXJhbWV0ZXJzKGN1cnZlLCBHLCBuLCBoKTtcbn1cblxuZnVuY3Rpb24gc2VjcDI1NnIxKCkge1xuICAgIC8vIHAgPSAyXjIyNCAoMl4zMiAtIDEpICsgMl4xOTIgKyAyXjk2IC0gMVxuICAgIHZhciBwID0gZnJvbUhleChcIkZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZcIik7XG4gICAgdmFyIGEgPSBmcm9tSGV4KFwiRkZGRkZGRkYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiKTtcbiAgICB2YXIgYiA9IGZyb21IZXgoXCI1QUM2MzVEOEFBM0E5M0U3QjNFQkJENTU3Njk4ODZCQzY1MUQwNkIwQ0M1M0IwRjYzQkNFM0MzRTI3RDI2MDRCXCIpO1xuICAgIC8vYnl0ZVtdIFMgPSBIZXguZGVjb2RlKFwiQzQ5RDM2MDg4NkU3MDQ5MzZBNjY3OEUxMTM5RDI2Qjc4MTlGN0U5MFwiKTtcbiAgICB2YXIgbiA9IGZyb21IZXgoXCJGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkJDRTZGQUFEQTcxNzlFODRGM0I5Q0FDMkZDNjMyNTUxXCIpO1xuICAgIHZhciBoID0gQmlnSW50ZWdlci5PTkU7XG4gICAgdmFyIGN1cnZlID0gbmV3IEVDQ3VydmVGcChwLCBhLCBiKTtcbiAgICB2YXIgRyA9IGN1cnZlLmRlY29kZVBvaW50SGV4KFwiMDRcIlxuICAgICAgICAgICAgICAgICsgXCI2QjE3RDFGMkUxMkM0MjQ3RjhCQ0U2RTU2M0E0NDBGMjc3MDM3RDgxMkRFQjMzQTBGNEExMzk0NUQ4OThDMjk2XCJcblx0XHQrIFwiNEZFMzQyRTJGRTFBN0Y5QjhFRTdFQjRBN0MwRjlFMTYyQkNFMzM1NzZCMzE1RUNFQ0JCNjQwNjgzN0JGNTFGNVwiKTtcbiAgICByZXR1cm4gbmV3IFg5RUNQYXJhbWV0ZXJzKGN1cnZlLCBHLCBuLCBoKTtcbn1cblxuLy8gVE9ETzogbWFrZSB0aGlzIGludG8gYSBwcm9wZXIgaGFzaHRhYmxlXG5mdW5jdGlvbiBnZXRTRUNDdXJ2ZUJ5TmFtZShuYW1lKSB7XG4gICAgaWYobmFtZSA9PSBcInNlY3AxMjhyMVwiKSByZXR1cm4gc2VjcDEyOHIxKCk7XG4gICAgaWYobmFtZSA9PSBcInNlY3AxNjBrMVwiKSByZXR1cm4gc2VjcDE2MGsxKCk7XG4gICAgaWYobmFtZSA9PSBcInNlY3AxNjByMVwiKSByZXR1cm4gc2VjcDE2MHIxKCk7XG4gICAgaWYobmFtZSA9PSBcInNlY3AxOTJrMVwiKSByZXR1cm4gc2VjcDE5MmsxKCk7XG4gICAgaWYobmFtZSA9PSBcInNlY3AxOTJyMVwiKSByZXR1cm4gc2VjcDE5MnIxKCk7XG4gICAgaWYobmFtZSA9PSBcInNlY3AyMjRyMVwiKSByZXR1cm4gc2VjcDIyNHIxKCk7XG4gICAgaWYobmFtZSA9PSBcInNlY3AyNTZyMVwiKSByZXR1cm4gc2VjcDI1NnIxKCk7XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBcInNlY3AxMjhyMVwiOnNlY3AxMjhyMSxcbiAgXCJzZWNwMTYwazFcIjpzZWNwMTYwazEsXG4gIFwic2VjcDE2MHIxXCI6c2VjcDE2MHIxLFxuICBcInNlY3AxOTJrMVwiOnNlY3AxOTJrMSxcbiAgXCJzZWNwMTkycjFcIjpzZWNwMTkycjEsXG4gIFwic2VjcDIyNHIxXCI6c2VjcDIyNHIxLFxuICBcInNlY3AyNTZyMVwiOnNlY3AyNTZyMVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZWxsaXB0aWMgPSBleHBvcnRzO1xuXG5lbGxpcHRpYy52ZXJzaW9uID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbmVsbGlwdGljLnV0aWxzID0gcmVxdWlyZSgnLi9lbGxpcHRpYy91dGlscycpO1xuZWxsaXB0aWMucmFuZCA9IHJlcXVpcmUoJ2Jyb3JhbmQnKTtcbmVsbGlwdGljLmN1cnZlID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9jdXJ2ZScpO1xuZWxsaXB0aWMuY3VydmVzID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9jdXJ2ZXMnKTtcblxuLy8gUHJvdG9jb2xzXG5lbGxpcHRpYy5lYyA9IHJlcXVpcmUoJy4vZWxsaXB0aWMvZWMnKTtcbmVsbGlwdGljLmVkZHNhID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9lZGRzYScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGdldE5BRiA9IHV0aWxzLmdldE5BRjtcbnZhciBnZXRKU0YgPSB1dGlscy5nZXRKU0Y7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBCYXNlQ3VydmUodHlwZSwgY29uZikge1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnAgPSBuZXcgQk4oY29uZi5wLCAxNik7XG5cbiAgLy8gVXNlIE1vbnRnb21lcnksIHdoZW4gdGhlcmUgaXMgbm8gZmFzdCByZWR1Y3Rpb24gZm9yIHRoZSBwcmltZVxuICB0aGlzLnJlZCA9IGNvbmYucHJpbWUgPyBCTi5yZWQoY29uZi5wcmltZSkgOiBCTi5tb250KHRoaXMucCk7XG5cbiAgLy8gVXNlZnVsIGZvciBtYW55IGN1cnZlc1xuICB0aGlzLnplcm8gPSBuZXcgQk4oMCkudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLm9uZSA9IG5ldyBCTigxKS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMudHdvID0gbmV3IEJOKDIpLnRvUmVkKHRoaXMucmVkKTtcblxuICAvLyBDdXJ2ZSBjb25maWd1cmF0aW9uLCBvcHRpb25hbFxuICB0aGlzLm4gPSBjb25mLm4gJiYgbmV3IEJOKGNvbmYubiwgMTYpO1xuICB0aGlzLmcgPSBjb25mLmcgJiYgdGhpcy5wb2ludEZyb21KU09OKGNvbmYuZywgY29uZi5nUmVkKTtcblxuICAvLyBUZW1wb3JhcnkgYXJyYXlzXG4gIHRoaXMuX3duYWZUMSA9IG5ldyBBcnJheSg0KTtcbiAgdGhpcy5fd25hZlQyID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl93bmFmVDMgPSBuZXcgQXJyYXkoNCk7XG4gIHRoaXMuX3duYWZUNCA9IG5ldyBBcnJheSg0KTtcblxuICAvLyBHZW5lcmFsaXplZCBHcmVnIE1heHdlbGwncyB0cmlja1xuICB2YXIgYWRqdXN0Q291bnQgPSB0aGlzLm4gJiYgdGhpcy5wLmRpdih0aGlzLm4pO1xuICBpZiAoIWFkanVzdENvdW50IHx8IGFkanVzdENvdW50LmNtcG4oMTAwKSA+IDApIHtcbiAgICB0aGlzLnJlZE4gPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX21heHdlbGxUcmljayA9IHRydWU7XG4gICAgdGhpcy5yZWROID0gdGhpcy5uLnRvUmVkKHRoaXMucmVkKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBCYXNlQ3VydmU7XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsID0gZnVuY3Rpb24gX2ZpeGVkTmFmTXVsKHAsIGspIHtcbiAgYXNzZXJ0KHAucHJlY29tcHV0ZWQpO1xuICB2YXIgZG91YmxlcyA9IHAuX2dldERvdWJsZXMoKTtcblxuICB2YXIgbmFmID0gZ2V0TkFGKGssIDEpO1xuICB2YXIgSSA9ICgxIDw8IChkb3VibGVzLnN0ZXAgKyAxKSkgLSAoZG91Ymxlcy5zdGVwICUgMiA9PT0gMCA/IDIgOiAxKTtcbiAgSSAvPSAzO1xuXG4gIC8vIFRyYW5zbGF0ZSBpbnRvIG1vcmUgd2luZG93ZWQgZm9ybVxuICB2YXIgcmVwciA9IFtdO1xuICBmb3IgKHZhciBqID0gMDsgaiA8IG5hZi5sZW5ndGg7IGogKz0gZG91Ymxlcy5zdGVwKSB7XG4gICAgdmFyIG5hZlcgPSAwO1xuICAgIGZvciAodmFyIGsgPSBqICsgZG91Ymxlcy5zdGVwIC0gMTsgayA+PSBqOyBrLS0pXG4gICAgICBuYWZXID0gKG5hZlcgPDwgMSkgKyBuYWZba107XG4gICAgcmVwci5wdXNoKG5hZlcpO1xuICB9XG5cbiAgdmFyIGEgPSB0aGlzLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgdmFyIGIgPSB0aGlzLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgZm9yICh2YXIgaSA9IEk7IGkgPiAwOyBpLS0pIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJlcHIubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBuYWZXID0gcmVwcltqXTtcbiAgICAgIGlmIChuYWZXID09PSBpKVxuICAgICAgICBiID0gYi5taXhlZEFkZChkb3VibGVzLnBvaW50c1tqXSk7XG4gICAgICBlbHNlIGlmIChuYWZXID09PSAtaSlcbiAgICAgICAgYiA9IGIubWl4ZWRBZGQoZG91Ymxlcy5wb2ludHNbal0ubmVnKCkpO1xuICAgIH1cbiAgICBhID0gYS5hZGQoYik7XG4gIH1cbiAgcmV0dXJuIGEudG9QKCk7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLl93bmFmTXVsID0gZnVuY3Rpb24gX3duYWZNdWwocCwgaykge1xuICB2YXIgdyA9IDQ7XG5cbiAgLy8gUHJlY29tcHV0ZSB3aW5kb3dcbiAgdmFyIG5hZlBvaW50cyA9IHAuX2dldE5BRlBvaW50cyh3KTtcbiAgdyA9IG5hZlBvaW50cy53bmQ7XG4gIHZhciB3bmQgPSBuYWZQb2ludHMucG9pbnRzO1xuXG4gIC8vIEdldCBOQUYgZm9ybVxuICB2YXIgbmFmID0gZ2V0TkFGKGssIHcpO1xuXG4gIC8vIEFkZCBgdGhpc2AqKE4rMSkgZm9yIGV2ZXJ5IHctTkFGIGluZGV4XG4gIHZhciBhY2MgPSB0aGlzLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcbiAgZm9yICh2YXIgaSA9IG5hZi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIC8vIENvdW50IHplcm9lc1xuICAgIGZvciAodmFyIGsgPSAwOyBpID49IDAgJiYgbmFmW2ldID09PSAwOyBpLS0pXG4gICAgICBrKys7XG4gICAgaWYgKGkgPj0gMClcbiAgICAgIGsrKztcbiAgICBhY2MgPSBhY2MuZGJscChrKTtcblxuICAgIGlmIChpIDwgMClcbiAgICAgIGJyZWFrO1xuICAgIHZhciB6ID0gbmFmW2ldO1xuICAgIGFzc2VydCh6ICE9PSAwKTtcbiAgICBpZiAocC50eXBlID09PSAnYWZmaW5lJykge1xuICAgICAgLy8gSiArLSBQXG4gICAgICBpZiAoeiA+IDApXG4gICAgICAgIGFjYyA9IGFjYy5taXhlZEFkZCh3bmRbKHogLSAxKSA+PiAxXSk7XG4gICAgICBlbHNlXG4gICAgICAgIGFjYyA9IGFjYy5taXhlZEFkZCh3bmRbKC16IC0gMSkgPj4gMV0ubmVnKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBKICstIEpcbiAgICAgIGlmICh6ID4gMClcbiAgICAgICAgYWNjID0gYWNjLmFkZCh3bmRbKHogLSAxKSA+PiAxXSk7XG4gICAgICBlbHNlXG4gICAgICAgIGFjYyA9IGFjYy5hZGQod25kWygteiAtIDEpID4+IDFdLm5lZygpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHAudHlwZSA9PT0gJ2FmZmluZScgPyBhY2MudG9QKCkgOiBhY2M7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLl93bmFmTXVsQWRkID0gZnVuY3Rpb24gX3duYWZNdWxBZGQoZGVmVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYWNvYmlhblJlc3VsdCkge1xuICB2YXIgd25kV2lkdGggPSB0aGlzLl93bmFmVDE7XG4gIHZhciB3bmQgPSB0aGlzLl93bmFmVDI7XG4gIHZhciBuYWYgPSB0aGlzLl93bmFmVDM7XG5cbiAgLy8gRmlsbCBhbGwgYXJyYXlzXG4gIHZhciBtYXggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIHAgPSBwb2ludHNbaV07XG4gICAgdmFyIG5hZlBvaW50cyA9IHAuX2dldE5BRlBvaW50cyhkZWZXKTtcbiAgICB3bmRXaWR0aFtpXSA9IG5hZlBvaW50cy53bmQ7XG4gICAgd25kW2ldID0gbmFmUG9pbnRzLnBvaW50cztcbiAgfVxuXG4gIC8vIENvbWIgc21hbGwgd2luZG93IE5BRnNcbiAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMTsgaSAtPSAyKSB7XG4gICAgdmFyIGEgPSBpIC0gMTtcbiAgICB2YXIgYiA9IGk7XG4gICAgaWYgKHduZFdpZHRoW2FdICE9PSAxIHx8IHduZFdpZHRoW2JdICE9PSAxKSB7XG4gICAgICBuYWZbYV0gPSBnZXROQUYoY29lZmZzW2FdLCB3bmRXaWR0aFthXSk7XG4gICAgICBuYWZbYl0gPSBnZXROQUYoY29lZmZzW2JdLCB3bmRXaWR0aFtiXSk7XG4gICAgICBtYXggPSBNYXRoLm1heChuYWZbYV0ubGVuZ3RoLCBtYXgpO1xuICAgICAgbWF4ID0gTWF0aC5tYXgobmFmW2JdLmxlbmd0aCwgbWF4KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBjb21iID0gW1xuICAgICAgcG9pbnRzW2FdLCAvKiAxICovXG4gICAgICBudWxsLCAvKiAzICovXG4gICAgICBudWxsLCAvKiA1ICovXG4gICAgICBwb2ludHNbYl0gLyogNyAqL1xuICAgIF07XG5cbiAgICAvLyBUcnkgdG8gYXZvaWQgUHJvamVjdGl2ZSBwb2ludHMsIGlmIHBvc3NpYmxlXG4gICAgaWYgKHBvaW50c1thXS55LmNtcChwb2ludHNbYl0ueSkgPT09IDApIHtcbiAgICAgIGNvbWJbMV0gPSBwb2ludHNbYV0uYWRkKHBvaW50c1tiXSk7XG4gICAgICBjb21iWzJdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXS5uZWcoKSk7XG4gICAgfSBlbHNlIGlmIChwb2ludHNbYV0ueS5jbXAocG9pbnRzW2JdLnkucmVkTmVnKCkpID09PSAwKSB7XG4gICAgICBjb21iWzFdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXSk7XG4gICAgICBjb21iWzJdID0gcG9pbnRzW2FdLmFkZChwb2ludHNbYl0ubmVnKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21iWzFdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXSk7XG4gICAgICBjb21iWzJdID0gcG9pbnRzW2FdLnRvSigpLm1peGVkQWRkKHBvaW50c1tiXS5uZWcoKSk7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gW1xuICAgICAgLTMsIC8qIC0xIC0xICovXG4gICAgICAtMSwgLyogLTEgMCAqL1xuICAgICAgLTUsIC8qIC0xIDEgKi9cbiAgICAgIC03LCAvKiAwIC0xICovXG4gICAgICAwLCAvKiAwIDAgKi9cbiAgICAgIDcsIC8qIDAgMSAqL1xuICAgICAgNSwgLyogMSAtMSAqL1xuICAgICAgMSwgLyogMSAwICovXG4gICAgICAzICAvKiAxIDEgKi9cbiAgICBdO1xuXG4gICAgdmFyIGpzZiA9IGdldEpTRihjb2VmZnNbYV0sIGNvZWZmc1tiXSk7XG4gICAgbWF4ID0gTWF0aC5tYXgoanNmWzBdLmxlbmd0aCwgbWF4KTtcbiAgICBuYWZbYV0gPSBuZXcgQXJyYXkobWF4KTtcbiAgICBuYWZbYl0gPSBuZXcgQXJyYXkobWF4KTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1heDsgaisrKSB7XG4gICAgICB2YXIgamEgPSBqc2ZbMF1bal0gfCAwO1xuICAgICAgdmFyIGpiID0ganNmWzFdW2pdIHwgMDtcblxuICAgICAgbmFmW2FdW2pdID0gaW5kZXhbKGphICsgMSkgKiAzICsgKGpiICsgMSldO1xuICAgICAgbmFmW2JdW2pdID0gMDtcbiAgICAgIHduZFthXSA9IGNvbWI7XG4gICAgfVxuICB9XG5cbiAgdmFyIGFjYyA9IHRoaXMuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICB2YXIgdG1wID0gdGhpcy5fd25hZlQ0O1xuICBmb3IgKHZhciBpID0gbWF4OyBpID49IDA7IGktLSkge1xuICAgIHZhciBrID0gMDtcblxuICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgIHZhciB6ZXJvID0gdHJ1ZTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgdG1wW2pdID0gbmFmW2pdW2ldIHwgMDtcbiAgICAgICAgaWYgKHRtcFtqXSAhPT0gMClcbiAgICAgICAgICB6ZXJvID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXplcm8pXG4gICAgICAgIGJyZWFrO1xuICAgICAgaysrO1xuICAgICAgaS0tO1xuICAgIH1cbiAgICBpZiAoaSA+PSAwKVxuICAgICAgaysrO1xuICAgIGFjYyA9IGFjYy5kYmxwKGspO1xuICAgIGlmIChpIDwgMClcbiAgICAgIGJyZWFrO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgdmFyIHogPSB0bXBbal07XG4gICAgICB2YXIgcDtcbiAgICAgIGlmICh6ID09PSAwKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGVsc2UgaWYgKHogPiAwKVxuICAgICAgICBwID0gd25kW2pdWyh6IC0gMSkgPj4gMV07XG4gICAgICBlbHNlIGlmICh6IDwgMClcbiAgICAgICAgcCA9IHduZFtqXVsoLXogLSAxKSA+PiAxXS5uZWcoKTtcblxuICAgICAgaWYgKHAudHlwZSA9PT0gJ2FmZmluZScpXG4gICAgICAgIGFjYyA9IGFjYy5taXhlZEFkZChwKTtcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjID0gYWNjLmFkZChwKTtcbiAgICB9XG4gIH1cbiAgLy8gWmVyb2lmeSByZWZlcmVuY2VzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgd25kW2ldID0gbnVsbDtcblxuICBpZiAoamFjb2JpYW5SZXN1bHQpXG4gICAgcmV0dXJuIGFjYztcbiAgZWxzZVxuICAgIHJldHVybiBhY2MudG9QKCk7XG59O1xuXG5mdW5jdGlvbiBCYXNlUG9pbnQoY3VydmUsIHR5cGUpIHtcbiAgdGhpcy5jdXJ2ZSA9IGN1cnZlO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnByZWNvbXB1dGVkID0gbnVsbDtcbn1cbkJhc2VDdXJ2ZS5CYXNlUG9pbnQgPSBCYXNlUG9pbnQ7XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcSgvKm90aGVyKi8pIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyk7XG59O1xuXG5CYXNlQ3VydmUucHJvdG90eXBlLmRlY29kZVBvaW50ID0gZnVuY3Rpb24gZGVjb2RlUG9pbnQoYnl0ZXMsIGVuYykge1xuICBieXRlcyA9IHV0aWxzLnRvQXJyYXkoYnl0ZXMsIGVuYyk7XG5cbiAgdmFyIGxlbiA9IHRoaXMucC5ieXRlTGVuZ3RoKCk7XG5cbiAgLy8gdW5jb21wcmVzc2VkLCBoeWJyaWQtb2RkLCBoeWJyaWQtZXZlblxuICBpZiAoKGJ5dGVzWzBdID09PSAweDA0IHx8IGJ5dGVzWzBdID09PSAweDA2IHx8IGJ5dGVzWzBdID09PSAweDA3KSAmJlxuICAgICAgYnl0ZXMubGVuZ3RoIC0gMSA9PT0gMiAqIGxlbikge1xuICAgIGlmIChieXRlc1swXSA9PT0gMHgwNilcbiAgICAgIGFzc2VydChieXRlc1tieXRlcy5sZW5ndGggLSAxXSAlIDIgPT09IDApO1xuICAgIGVsc2UgaWYgKGJ5dGVzWzBdID09PSAweDA3KVxuICAgICAgYXNzZXJ0KGJ5dGVzW2J5dGVzLmxlbmd0aCAtIDFdICUgMiA9PT0gMSk7XG5cbiAgICB2YXIgcmVzID0gIHRoaXMucG9pbnQoYnl0ZXMuc2xpY2UoMSwgMSArIGxlbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzLnNsaWNlKDEgKyBsZW4sIDEgKyAyICogbGVuKSk7XG5cbiAgICByZXR1cm4gcmVzO1xuICB9IGVsc2UgaWYgKChieXRlc1swXSA9PT0gMHgwMiB8fCBieXRlc1swXSA9PT0gMHgwMykgJiZcbiAgICAgICAgICAgICAgYnl0ZXMubGVuZ3RoIC0gMSA9PT0gbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucG9pbnRGcm9tWChieXRlcy5zbGljZSgxLCAxICsgbGVuKSwgYnl0ZXNbMF0gPT09IDB4MDMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwb2ludCBmb3JtYXQnKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZCA9IGZ1bmN0aW9uIGVuY29kZUNvbXByZXNzZWQoZW5jKSB7XG4gIHJldHVybiB0aGlzLmVuY29kZShlbmMsIHRydWUpO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5fZW5jb2RlID0gZnVuY3Rpb24gX2VuY29kZShjb21wYWN0KSB7XG4gIHZhciBsZW4gPSB0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpO1xuICB2YXIgeCA9IHRoaXMuZ2V0WCgpLnRvQXJyYXkoJ2JlJywgbGVuKTtcblxuICBpZiAoY29tcGFjdClcbiAgICByZXR1cm4gWyB0aGlzLmdldFkoKS5pc0V2ZW4oKSA/IDB4MDIgOiAweDAzIF0uY29uY2F0KHgpO1xuXG4gIHJldHVybiBbIDB4MDQgXS5jb25jYXQoeCwgdGhpcy5nZXRZKCkudG9BcnJheSgnYmUnLCBsZW4pKSA7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShlbmMsIGNvbXBhY3QpIHtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLl9lbmNvZGUoY29tcGFjdCksIGVuYyk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLnByZWNvbXB1dGUgPSBmdW5jdGlvbiBwcmVjb21wdXRlKHBvd2VyKSB7XG4gIGlmICh0aGlzLnByZWNvbXB1dGVkKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIHZhciBwcmVjb21wdXRlZCA9IHtcbiAgICBkb3VibGVzOiBudWxsLFxuICAgIG5hZjogbnVsbCxcbiAgICBiZXRhOiBudWxsXG4gIH07XG4gIHByZWNvbXB1dGVkLm5hZiA9IHRoaXMuX2dldE5BRlBvaW50cyg4KTtcbiAgcHJlY29tcHV0ZWQuZG91YmxlcyA9IHRoaXMuX2dldERvdWJsZXMoNCwgcG93ZXIpO1xuICBwcmVjb21wdXRlZC5iZXRhID0gdGhpcy5fZ2V0QmV0YSgpO1xuICB0aGlzLnByZWNvbXB1dGVkID0gcHJlY29tcHV0ZWQ7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9oYXNEb3VibGVzID0gZnVuY3Rpb24gX2hhc0RvdWJsZXMoaykge1xuICBpZiAoIXRoaXMucHJlY29tcHV0ZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBkb3VibGVzID0gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO1xuICBpZiAoIWRvdWJsZXMpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiBkb3VibGVzLnBvaW50cy5sZW5ndGggPj0gTWF0aC5jZWlsKChrLmJpdExlbmd0aCgpICsgMSkgLyBkb3VibGVzLnN0ZXApO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5fZ2V0RG91YmxlcyA9IGZ1bmN0aW9uIF9nZXREb3VibGVzKHN0ZXAsIHBvd2VyKSB7XG4gIGlmICh0aGlzLnByZWNvbXB1dGVkICYmIHRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylcbiAgICByZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO1xuXG4gIHZhciBkb3VibGVzID0gWyB0aGlzIF07XG4gIHZhciBhY2MgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvd2VyOyBpICs9IHN0ZXApIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0ZXA7IGorKylcbiAgICAgIGFjYyA9IGFjYy5kYmwoKTtcbiAgICBkb3VibGVzLnB1c2goYWNjKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0ZXA6IHN0ZXAsXG4gICAgcG9pbnRzOiBkb3VibGVzXG4gIH07XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9nZXROQUZQb2ludHMgPSBmdW5jdGlvbiBfZ2V0TkFGUG9pbnRzKHduZCkge1xuICBpZiAodGhpcy5wcmVjb21wdXRlZCAmJiB0aGlzLnByZWNvbXB1dGVkLm5hZilcbiAgICByZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7XG5cbiAgdmFyIHJlcyA9IFsgdGhpcyBdO1xuICB2YXIgbWF4ID0gKDEgPDwgd25kKSAtIDE7XG4gIHZhciBkYmwgPSBtYXggPT09IDEgPyBudWxsIDogdGhpcy5kYmwoKTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXg7IGkrKylcbiAgICByZXNbaV0gPSByZXNbaSAtIDFdLmFkZChkYmwpO1xuICByZXR1cm4ge1xuICAgIHduZDogd25kLFxuICAgIHBvaW50czogcmVzXG4gIH07XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9nZXRCZXRhID0gZnVuY3Rpb24gX2dldEJldGEoKSB7XG4gIHJldHVybiBudWxsO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5kYmxwID0gZnVuY3Rpb24gZGJscChrKSB7XG4gIHZhciByID0gdGhpcztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrOyBpKyspXG4gICAgciA9IHIuZGJsKCk7XG4gIHJldHVybiByO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gcmVxdWlyZSgnLi4vY3VydmUnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCYXNlID0gY3VydmUuYmFzZTtcblxudmFyIGFzc2VydCA9IGVsbGlwdGljLnV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gRWR3YXJkc0N1cnZlKGNvbmYpIHtcbiAgLy8gTk9URTogSW1wb3J0YW50IGFzIHdlIGFyZSBjcmVhdGluZyBwb2ludCBpbiBCYXNlLmNhbGwoKVxuICB0aGlzLnR3aXN0ZWQgPSAoY29uZi5hIHwgMCkgIT09IDE7XG4gIHRoaXMubU9uZUEgPSB0aGlzLnR3aXN0ZWQgJiYgKGNvbmYuYSB8IDApID09PSAtMTtcbiAgdGhpcy5leHRlbmRlZCA9IHRoaXMubU9uZUE7XG5cbiAgQmFzZS5jYWxsKHRoaXMsICdlZHdhcmRzJywgY29uZik7XG5cbiAgdGhpcy5hID0gbmV3IEJOKGNvbmYuYSwgMTYpLnVtb2QodGhpcy5yZWQubSk7XG4gIHRoaXMuYSA9IHRoaXMuYS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYyA9IG5ldyBCTihjb25mLmMsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYzIgPSB0aGlzLmMucmVkU3FyKCk7XG4gIHRoaXMuZCA9IG5ldyBCTihjb25mLmQsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuZGQgPSB0aGlzLmQucmVkQWRkKHRoaXMuZCk7XG5cbiAgYXNzZXJ0KCF0aGlzLnR3aXN0ZWQgfHwgdGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpID09PSAwKTtcbiAgdGhpcy5vbmVDID0gKGNvbmYuYyB8IDApID09PSAxO1xufVxuaW5oZXJpdHMoRWR3YXJkc0N1cnZlLCBCYXNlKTtcbm1vZHVsZS5leHBvcnRzID0gRWR3YXJkc0N1cnZlO1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLl9tdWxBID0gZnVuY3Rpb24gX211bEEobnVtKSB7XG4gIGlmICh0aGlzLm1PbmVBKVxuICAgIHJldHVybiBudW0ucmVkTmVnKCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5hLnJlZE11bChudW0pO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5fbXVsQyA9IGZ1bmN0aW9uIF9tdWxDKG51bSkge1xuICBpZiAodGhpcy5vbmVDKVxuICAgIHJldHVybiBudW07XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jLnJlZE11bChudW0pO1xufTtcblxuLy8gSnVzdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFNob3J0IGN1cnZlXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLmpwb2ludCA9IGZ1bmN0aW9uIGpwb2ludCh4LCB5LCB6LCB0KSB7XG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHksIHosIHQpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21YID0gZnVuY3Rpb24gcG9pbnRGcm9tWCh4LCBvZGQpIHtcbiAgeCA9IG5ldyBCTih4LCAxNik7XG4gIGlmICgheC5yZWQpXG4gICAgeCA9IHgudG9SZWQodGhpcy5yZWQpO1xuXG4gIHZhciB4MiA9IHgucmVkU3FyKCk7XG4gIHZhciByaHMgPSB0aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKHgyKSk7XG4gIHZhciBsaHMgPSB0aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoeDIpKTtcblxuICB2YXIgeTIgPSByaHMucmVkTXVsKGxocy5yZWRJbnZtKCkpO1xuICB2YXIgeSA9IHkyLnJlZFNxcnQoKTtcbiAgaWYgKHkucmVkU3FyKCkucmVkU3ViKHkyKS5jbXAodGhpcy56ZXJvKSAhPT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcblxuICB2YXIgaXNPZGQgPSB5LmZyb21SZWQoKS5pc09kZCgpO1xuICBpZiAob2RkICYmICFpc09kZCB8fCAhb2RkICYmIGlzT2RkKVxuICAgIHkgPSB5LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21ZID0gZnVuY3Rpb24gcG9pbnRGcm9tWSh5LCBvZGQpIHtcbiAgeSA9IG5ldyBCTih5LCAxNik7XG4gIGlmICgheS5yZWQpXG4gICAgeSA9IHkudG9SZWQodGhpcy5yZWQpO1xuXG4gIC8vIHheMiA9ICh5XjIgLSAxKSAvIChkIHleMiArIDEpXG4gIHZhciB5MiA9IHkucmVkU3FyKCk7XG4gIHZhciBsaHMgPSB5Mi5yZWRTdWIodGhpcy5vbmUpO1xuICB2YXIgcmhzID0geTIucmVkTXVsKHRoaXMuZCkucmVkQWRkKHRoaXMub25lKTtcbiAgdmFyIHgyID0gbGhzLnJlZE11bChyaHMucmVkSW52bSgpKTtcblxuICBpZiAoeDIuY21wKHRoaXMuemVybykgPT09IDApIHtcbiAgICBpZiAob2RkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBvaW50Jyk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLCB5KTtcbiAgfVxuXG4gIHZhciB4ID0geDIucmVkU3FydCgpO1xuICBpZiAoeC5yZWRTcXIoKS5yZWRTdWIoeDIpLmNtcCh0aGlzLnplcm8pICE9PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwb2ludCcpO1xuXG4gIGlmICh4LmlzT2RkKCkgIT09IG9kZClcbiAgICB4ID0geC5yZWROZWcoKTtcblxuICByZXR1cm4gdGhpcy5wb2ludCh4LCB5KTtcbn07XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZShwb2ludCkge1xuICBpZiAocG9pbnQuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIC8vIEN1cnZlOiBBICogWF4yICsgWV4yID0gQ14yICogKDEgKyBEICogWF4yICogWV4yKVxuICBwb2ludC5ub3JtYWxpemUoKTtcblxuICB2YXIgeDIgPSBwb2ludC54LnJlZFNxcigpO1xuICB2YXIgeTIgPSBwb2ludC55LnJlZFNxcigpO1xuICB2YXIgbGhzID0geDIucmVkTXVsKHRoaXMuYSkucmVkQWRkKHkyKTtcbiAgdmFyIHJocyA9IHRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKHgyKS5yZWRNdWwoeTIpKSk7XG5cbiAgcmV0dXJuIGxocy5jbXAocmhzKSA9PT0gMDtcbn07XG5cbmZ1bmN0aW9uIFBvaW50KGN1cnZlLCB4LCB5LCB6LCB0KSB7XG4gIEJhc2UuQmFzZVBvaW50LmNhbGwodGhpcywgY3VydmUsICdwcm9qZWN0aXZlJyk7XG4gIGlmICh4ID09PSBudWxsICYmIHkgPT09IG51bGwgJiYgeiA9PT0gbnVsbCkge1xuICAgIHRoaXMueCA9IHRoaXMuY3VydmUuemVybztcbiAgICB0aGlzLnkgPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnogPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnQgPSB0aGlzLmN1cnZlLnplcm87XG4gICAgdGhpcy56T25lID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueSA9IG5ldyBCTih5LCAxNik7XG4gICAgdGhpcy56ID0geiA/IG5ldyBCTih6LCAxNikgOiB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnQgPSB0ICYmIG5ldyBCTih0LCAxNik7XG4gICAgaWYgKCF0aGlzLngucmVkKVxuICAgICAgdGhpcy54ID0gdGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAoIXRoaXMueS5yZWQpXG4gICAgICB0aGlzLnkgPSB0aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICghdGhpcy56LnJlZClcbiAgICAgIHRoaXMueiA9IHRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKHRoaXMudCAmJiAhdGhpcy50LnJlZClcbiAgICAgIHRoaXMudCA9IHRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgdGhpcy56T25lID0gdGhpcy56ID09PSB0aGlzLmN1cnZlLm9uZTtcblxuICAgIC8vIFVzZSBleHRlbmRlZCBjb29yZGluYXRlc1xuICAgIGlmICh0aGlzLmN1cnZlLmV4dGVuZGVkICYmICF0aGlzLnQpIHtcbiAgICAgIHRoaXMudCA9IHRoaXMueC5yZWRNdWwodGhpcy55KTtcbiAgICAgIGlmICghdGhpcy56T25lKVxuICAgICAgICB0aGlzLnQgPSB0aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpO1xuICAgIH1cbiAgfVxufVxuaW5oZXJpdHMoUG9pbnQsIEJhc2UuQmFzZVBvaW50KTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS5wb2ludEZyb21KU09OID0gZnVuY3Rpb24gcG9pbnRGcm9tSlNPTihvYmopIHtcbiAgcmV0dXJuIFBvaW50LmZyb21KU09OKHRoaXMsIG9iaik7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50ID0gZnVuY3Rpb24gcG9pbnQoeCwgeSwgeiwgdCkge1xuICByZXR1cm4gbmV3IFBvaW50KHRoaXMsIHgsIHksIHosIHQpO1xufTtcblxuUG9pbnQuZnJvbUpTT04gPSBmdW5jdGlvbiBmcm9tSlNPTihjdXJ2ZSwgb2JqKSB7XG4gIHJldHVybiBuZXcgUG9pbnQoY3VydmUsIG9ialswXSwgb2JqWzFdLCBvYmpbMl0pO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuICc8RUMgUG9pbnQgSW5maW5pdHk+JztcbiAgcmV0dXJuICc8RUMgUG9pbnQgeDogJyArIHRoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgeTogJyArIHRoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgejogJyArIHRoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsIDIpICsgJz4nO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmlzSW5maW5pdHkgPSBmdW5jdGlvbiBpc0luZmluaXR5KCkge1xuICAvLyBYWFggVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB6ZXJvIGlzIGFsd2F5cyB6ZXJvIGluIHJlZFxuICByZXR1cm4gdGhpcy54LmNtcG4oMCkgPT09IDAgJiZcbiAgICAgICAgIHRoaXMueS5jbXAodGhpcy56KSA9PT0gMDtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZXh0RGJsID0gZnVuY3Rpb24gX2V4dERibCgpIHtcbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXR3aXN0ZWQtZXh0ZW5kZWQtMS5odG1sXG4gIC8vICAgICAjZG91YmxpbmctZGJsLTIwMDgtaHdjZFxuICAvLyA0TSArIDRTXG5cbiAgLy8gQSA9IFgxXjJcbiAgdmFyIGEgPSB0aGlzLngucmVkU3FyKCk7XG4gIC8vIEIgPSBZMV4yXG4gIHZhciBiID0gdGhpcy55LnJlZFNxcigpO1xuICAvLyBDID0gMiAqIFoxXjJcbiAgdmFyIGMgPSB0aGlzLnoucmVkU3FyKCk7XG4gIGMgPSBjLnJlZElBZGQoYyk7XG4gIC8vIEQgPSBhICogQVxuICB2YXIgZCA9IHRoaXMuY3VydmUuX211bEEoYSk7XG4gIC8vIEUgPSAoWDEgKyBZMSleMiAtIEEgLSBCXG4gIHZhciBlID0gdGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIoYSkucmVkSVN1YihiKTtcbiAgLy8gRyA9IEQgKyBCXG4gIHZhciBnID0gZC5yZWRBZGQoYik7XG4gIC8vIEYgPSBHIC0gQ1xuICB2YXIgZiA9IGcucmVkU3ViKGMpO1xuICAvLyBIID0gRCAtIEJcbiAgdmFyIGggPSBkLnJlZFN1YihiKTtcbiAgLy8gWDMgPSBFICogRlxuICB2YXIgbnggPSBlLnJlZE11bChmKTtcbiAgLy8gWTMgPSBHICogSFxuICB2YXIgbnkgPSBnLnJlZE11bChoKTtcbiAgLy8gVDMgPSBFICogSFxuICB2YXIgbnQgPSBlLnJlZE11bChoKTtcbiAgLy8gWjMgPSBGICogR1xuICB2YXIgbnogPSBmLnJlZE11bChnKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55LCBueiwgbnQpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLl9wcm9qRGJsID0gZnVuY3Rpb24gX3Byb2pEYmwoKSB7XG4gIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by10d2lzdGVkLXByb2plY3RpdmUuaHRtbFxuICAvLyAgICAgI2RvdWJsaW5nLWRibC0yMDA4LWJiamxwXG4gIC8vICAgICAjZG91YmxpbmctZGJsLTIwMDctYmxcbiAgLy8gYW5kIG90aGVyc1xuICAvLyBHZW5lcmFsbHkgM00gKyA0UyBvciAyTSArIDRTXG5cbiAgLy8gQiA9IChYMSArIFkxKV4yXG4gIHZhciBiID0gdGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpO1xuICAvLyBDID0gWDFeMlxuICB2YXIgYyA9IHRoaXMueC5yZWRTcXIoKTtcbiAgLy8gRCA9IFkxXjJcbiAgdmFyIGQgPSB0aGlzLnkucmVkU3FyKCk7XG5cbiAgdmFyIG54O1xuICB2YXIgbnk7XG4gIHZhciBuejtcbiAgaWYgKHRoaXMuY3VydmUudHdpc3RlZCkge1xuICAgIC8vIEUgPSBhICogQ1xuICAgIHZhciBlID0gdGhpcy5jdXJ2ZS5fbXVsQShjKTtcbiAgICAvLyBGID0gRSArIERcbiAgICB2YXIgZiA9IGUucmVkQWRkKGQpO1xuICAgIGlmICh0aGlzLnpPbmUpIHtcbiAgICAgIC8vIFgzID0gKEIgLSBDIC0gRCkgKiAoRiAtIDIpXG4gICAgICBueCA9IGIucmVkU3ViKGMpLnJlZFN1YihkKS5yZWRNdWwoZi5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKTtcbiAgICAgIC8vIFkzID0gRiAqIChFIC0gRClcbiAgICAgIG55ID0gZi5yZWRNdWwoZS5yZWRTdWIoZCkpO1xuICAgICAgLy8gWjMgPSBGXjIgLSAyICogRlxuICAgICAgbnogPSBmLnJlZFNxcigpLnJlZFN1YihmKS5yZWRTdWIoZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEggPSBaMV4yXG4gICAgICB2YXIgaCA9IHRoaXMuei5yZWRTcXIoKTtcbiAgICAgIC8vIEogPSBGIC0gMiAqIEhcbiAgICAgIHZhciBqID0gZi5yZWRTdWIoaCkucmVkSVN1YihoKTtcbiAgICAgIC8vIFgzID0gKEItQy1EKSpKXG4gICAgICBueCA9IGIucmVkU3ViKGMpLnJlZElTdWIoZCkucmVkTXVsKGopO1xuICAgICAgLy8gWTMgPSBGICogKEUgLSBEKVxuICAgICAgbnkgPSBmLnJlZE11bChlLnJlZFN1YihkKSk7XG4gICAgICAvLyBaMyA9IEYgKiBKXG4gICAgICBueiA9IGYucmVkTXVsKGopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBFID0gQyArIERcbiAgICB2YXIgZSA9IGMucmVkQWRkKGQpO1xuICAgIC8vIEggPSAoYyAqIFoxKV4yXG4gICAgdmFyIGggPSB0aGlzLmN1cnZlLl9tdWxDKHRoaXMuYy5yZWRNdWwodGhpcy56KSkucmVkU3FyKCk7XG4gICAgLy8gSiA9IEUgLSAyICogSFxuICAgIHZhciBqID0gZS5yZWRTdWIoaCkucmVkU3ViKGgpO1xuICAgIC8vIFgzID0gYyAqIChCIC0gRSkgKiBKXG4gICAgbnggPSB0aGlzLmN1cnZlLl9tdWxDKGIucmVkSVN1YihlKSkucmVkTXVsKGopO1xuICAgIC8vIFkzID0gYyAqIEUgKiAoQyAtIEQpXG4gICAgbnkgPSB0aGlzLmN1cnZlLl9tdWxDKGUpLnJlZE11bChjLnJlZElTdWIoZCkpO1xuICAgIC8vIFozID0gRSAqIEpcbiAgICBueiA9IGUucmVkTXVsKGopO1xuICB9XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmRibCA9IGZ1bmN0aW9uIGRibCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIERvdWJsZSBpbiBleHRlbmRlZCBjb29yZGluYXRlc1xuICBpZiAodGhpcy5jdXJ2ZS5leHRlbmRlZClcbiAgICByZXR1cm4gdGhpcy5fZXh0RGJsKCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fcHJvakRibCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLl9leHRBZGQgPSBmdW5jdGlvbiBfZXh0QWRkKHApIHtcbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXR3aXN0ZWQtZXh0ZW5kZWQtMS5odG1sXG4gIC8vICAgICAjYWRkaXRpb24tYWRkLTIwMDgtaHdjZC0zXG4gIC8vIDhNXG5cbiAgLy8gQSA9IChZMSAtIFgxKSAqIChZMiAtIFgyKVxuICB2YXIgYSA9IHRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwocC55LnJlZFN1YihwLngpKTtcbiAgLy8gQiA9IChZMSArIFgxKSAqIChZMiArIFgyKVxuICB2YXIgYiA9IHRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwocC55LnJlZEFkZChwLngpKTtcbiAgLy8gQyA9IFQxICogayAqIFQyXG4gIHZhciBjID0gdGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwocC50KTtcbiAgLy8gRCA9IFoxICogMiAqIFoyXG4gIHZhciBkID0gdGhpcy56LnJlZE11bChwLnoucmVkQWRkKHAueikpO1xuICAvLyBFID0gQiAtIEFcbiAgdmFyIGUgPSBiLnJlZFN1YihhKTtcbiAgLy8gRiA9IEQgLSBDXG4gIHZhciBmID0gZC5yZWRTdWIoYyk7XG4gIC8vIEcgPSBEICsgQ1xuICB2YXIgZyA9IGQucmVkQWRkKGMpO1xuICAvLyBIID0gQiArIEFcbiAgdmFyIGggPSBiLnJlZEFkZChhKTtcbiAgLy8gWDMgPSBFICogRlxuICB2YXIgbnggPSBlLnJlZE11bChmKTtcbiAgLy8gWTMgPSBHICogSFxuICB2YXIgbnkgPSBnLnJlZE11bChoKTtcbiAgLy8gVDMgPSBFICogSFxuICB2YXIgbnQgPSBlLnJlZE11bChoKTtcbiAgLy8gWjMgPSBGICogR1xuICB2YXIgbnogPSBmLnJlZE11bChnKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55LCBueiwgbnQpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLl9wcm9qQWRkID0gZnVuY3Rpb24gX3Byb2pBZGQocCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1wcm9qZWN0aXZlLmh0bWxcbiAgLy8gICAgICNhZGRpdGlvbi1hZGQtMjAwOC1iYmpscFxuICAvLyAgICAgI2FkZGl0aW9uLWFkZC0yMDA3LWJsXG4gIC8vIDEwTSArIDFTXG5cbiAgLy8gQSA9IFoxICogWjJcbiAgdmFyIGEgPSB0aGlzLnoucmVkTXVsKHAueik7XG4gIC8vIEIgPSBBXjJcbiAgdmFyIGIgPSBhLnJlZFNxcigpO1xuICAvLyBDID0gWDEgKiBYMlxuICB2YXIgYyA9IHRoaXMueC5yZWRNdWwocC54KTtcbiAgLy8gRCA9IFkxICogWTJcbiAgdmFyIGQgPSB0aGlzLnkucmVkTXVsKHAueSk7XG4gIC8vIEUgPSBkICogQyAqIERcbiAgdmFyIGUgPSB0aGlzLmN1cnZlLmQucmVkTXVsKGMpLnJlZE11bChkKTtcbiAgLy8gRiA9IEIgLSBFXG4gIHZhciBmID0gYi5yZWRTdWIoZSk7XG4gIC8vIEcgPSBCICsgRVxuICB2YXIgZyA9IGIucmVkQWRkKGUpO1xuICAvLyBYMyA9IEEgKiBGICogKChYMSArIFkxKSAqIChYMiArIFkyKSAtIEMgLSBEKVxuICB2YXIgdG1wID0gdGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bChwLngucmVkQWRkKHAueSkpLnJlZElTdWIoYykucmVkSVN1YihkKTtcbiAgdmFyIG54ID0gYS5yZWRNdWwoZikucmVkTXVsKHRtcCk7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICBpZiAodGhpcy5jdXJ2ZS50d2lzdGVkKSB7XG4gICAgLy8gWTMgPSBBICogRyAqIChEIC0gYSAqIEMpXG4gICAgbnkgPSBhLnJlZE11bChnKS5yZWRNdWwoZC5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShjKSkpO1xuICAgIC8vIFozID0gRiAqIEdcbiAgICBueiA9IGYucmVkTXVsKGcpO1xuICB9IGVsc2Uge1xuICAgIC8vIFkzID0gQSAqIEcgKiAoRCAtIEMpXG4gICAgbnkgPSBhLnJlZE11bChnKS5yZWRNdWwoZC5yZWRTdWIoYykpO1xuICAgIC8vIFozID0gYyAqIEYgKiBHXG4gICAgbnogPSB0aGlzLmN1cnZlLl9tdWxDKGYpLnJlZE11bChnKTtcbiAgfVxuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQocCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHA7XG4gIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcztcblxuICBpZiAodGhpcy5jdXJ2ZS5leHRlbmRlZClcbiAgICByZXR1cm4gdGhpcy5fZXh0QWRkKHApO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuX3Byb2pBZGQocCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKGspIHtcbiAgaWYgKHRoaXMuX2hhc0RvdWJsZXMoaykpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsIGspO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWwodGhpcywgayk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsQWRkID0gZnVuY3Rpb24gbXVsQWRkKGsxLCBwLCBrMikge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLCBbIHRoaXMsIHAgXSwgWyBrMSwgazIgXSwgMiwgZmFsc2UpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmptdWxBZGQgPSBmdW5jdGlvbiBqbXVsQWRkKGsxLCBwLCBrMikge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLCBbIHRoaXMsIHAgXSwgWyBrMSwgazIgXSwgMiwgdHJ1ZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rpb24gbm9ybWFsaXplKCkge1xuICBpZiAodGhpcy56T25lKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIE5vcm1hbGl6ZSBjb29yZGluYXRlc1xuICB2YXIgemkgPSB0aGlzLnoucmVkSW52bSgpO1xuICB0aGlzLnggPSB0aGlzLngucmVkTXVsKHppKTtcbiAgdGhpcy55ID0gdGhpcy55LnJlZE11bCh6aSk7XG4gIGlmICh0aGlzLnQpXG4gICAgdGhpcy50ID0gdGhpcy50LnJlZE11bCh6aSk7XG4gIHRoaXMueiA9IHRoaXMuY3VydmUub25lO1xuICB0aGlzLnpPbmUgPSB0cnVlO1xuICByZXR1cm4gdGhpcztcbn07XG5cblBvaW50LnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcoKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnosXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCAmJiB0aGlzLnQucmVkTmVnKCkpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFggPSBmdW5jdGlvbiBnZXRYKCkge1xuICB0aGlzLm5vcm1hbGl6ZSgpO1xuICByZXR1cm4gdGhpcy54LmZyb21SZWQoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRZID0gZnVuY3Rpb24gZ2V0WSgpIHtcbiAgdGhpcy5ub3JtYWxpemUoKTtcbiAgcmV0dXJuIHRoaXMueS5mcm9tUmVkKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShvdGhlcikge1xuICByZXR1cm4gdGhpcyA9PT0gb3RoZXIgfHxcbiAgICAgICAgIHRoaXMuZ2V0WCgpLmNtcChvdGhlci5nZXRYKCkpID09PSAwICYmXG4gICAgICAgICB0aGlzLmdldFkoKS5jbXAob3RoZXIuZ2V0WSgpKSA9PT0gMDtcbn07XG5cblBvaW50LnByb3RvdHlwZS5lcVhUb1AgPSBmdW5jdGlvbiBlcVhUb1AoeCkge1xuICB2YXIgcnggPSB4LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtcbiAgaWYgKHRoaXMueC5jbXAocngpID09PSAwKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIHZhciB4YyA9IHguY2xvbmUoKTtcbiAgdmFyIHQgPSB0aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7XG4gIGZvciAoOzspIHtcbiAgICB4Yy5pYWRkKHRoaXMuY3VydmUubik7XG4gICAgaWYgKHhjLmNtcCh0aGlzLmN1cnZlLnApID49IDApXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByeC5yZWRJQWRkKHQpO1xuICAgIGlmICh0aGlzLnguY21wKHJ4KSA9PT0gMClcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIENvbXBhdGliaWxpdHkgd2l0aCBCYXNlQ3VydmVcblBvaW50LnByb3RvdHlwZS50b1AgPSBQb2ludC5wcm90b3R5cGUubm9ybWFsaXplO1xuUG9pbnQucHJvdG90eXBlLm1peGVkQWRkID0gUG9pbnQucHJvdG90eXBlLmFkZDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gZXhwb3J0cztcblxuY3VydmUuYmFzZSA9IHJlcXVpcmUoJy4vYmFzZScpO1xuY3VydmUuc2hvcnQgPSByZXF1aXJlKCcuL3Nob3J0Jyk7XG5jdXJ2ZS5tb250ID0gcmVxdWlyZSgnLi9tb250Jyk7XG5jdXJ2ZS5lZHdhcmRzID0gcmVxdWlyZSgnLi9lZHdhcmRzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXJ2ZSA9IHJlcXVpcmUoJy4uL2N1cnZlJyk7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCYXNlID0gY3VydmUuYmFzZTtcblxudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xuXG5mdW5jdGlvbiBNb250Q3VydmUoY29uZikge1xuICBCYXNlLmNhbGwodGhpcywgJ21vbnQnLCBjb25mKTtcblxuICB0aGlzLmEgPSBuZXcgQk4oY29uZi5hLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmIgPSBuZXcgQk4oY29uZi5iLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmk0ID0gbmV3IEJOKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCk7XG4gIHRoaXMudHdvID0gbmV3IEJOKDIpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5hMjQgPSB0aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSk7XG59XG5pbmhlcml0cyhNb250Q3VydmUsIEJhc2UpO1xubW9kdWxlLmV4cG9ydHMgPSBNb250Q3VydmU7XG5cbk1vbnRDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZShwb2ludCkge1xuICB2YXIgeCA9IHBvaW50Lm5vcm1hbGl6ZSgpLng7XG4gIHZhciB4MiA9IHgucmVkU3FyKCk7XG4gIHZhciByaHMgPSB4Mi5yZWRNdWwoeCkucmVkQWRkKHgyLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoeCk7XG4gIHZhciB5ID0gcmhzLnJlZFNxcnQoKTtcblxuICByZXR1cm4geS5yZWRTcXIoKS5jbXAocmhzKSA9PT0gMDtcbn07XG5cbmZ1bmN0aW9uIFBvaW50KGN1cnZlLCB4LCB6KSB7XG4gIEJhc2UuQmFzZVBvaW50LmNhbGwodGhpcywgY3VydmUsICdwcm9qZWN0aXZlJyk7XG4gIGlmICh4ID09PSBudWxsICYmIHogPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnogPSB0aGlzLmN1cnZlLnplcm87XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54ID0gbmV3IEJOKHgsIDE2KTtcbiAgICB0aGlzLnogPSBuZXcgQk4oeiwgMTYpO1xuICAgIGlmICghdGhpcy54LnJlZClcbiAgICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnoucmVkKVxuICAgICAgdGhpcy56ID0gdGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgfVxufVxuaW5oZXJpdHMoUG9pbnQsIEJhc2UuQmFzZVBvaW50KTtcblxuTW9udEN1cnZlLnByb3RvdHlwZS5kZWNvZGVQb2ludCA9IGZ1bmN0aW9uIGRlY29kZVBvaW50KGJ5dGVzLCBlbmMpIHtcbiAgcmV0dXJuIHRoaXMucG9pbnQodXRpbHMudG9BcnJheShieXRlcywgZW5jKSwgMSk7XG59O1xuXG5Nb250Q3VydmUucHJvdG90eXBlLnBvaW50ID0gZnVuY3Rpb24gcG9pbnQoeCwgeikge1xuICByZXR1cm4gbmV3IFBvaW50KHRoaXMsIHgsIHopO1xufTtcblxuTW9udEN1cnZlLnByb3RvdHlwZS5wb2ludEZyb21KU09OID0gZnVuY3Rpb24gcG9pbnRGcm9tSlNPTihvYmopIHtcbiAgcmV0dXJuIFBvaW50LmZyb21KU09OKHRoaXMsIG9iaik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUucHJlY29tcHV0ZSA9IGZ1bmN0aW9uIHByZWNvbXB1dGUoKSB7XG4gIC8vIE5vLW9wXG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2VuY29kZSA9IGZ1bmN0aW9uIF9lbmNvZGUoKSB7XG4gIHJldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCdiZScsIHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpO1xufTtcblxuUG9pbnQuZnJvbUpTT04gPSBmdW5jdGlvbiBmcm9tSlNPTihjdXJ2ZSwgb2JqKSB7XG4gIHJldHVybiBuZXcgUG9pbnQoY3VydmUsIG9ialswXSwgb2JqWzFdIHx8IGN1cnZlLm9uZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBQb2ludCBJbmZpbml0eT4nO1xuICByZXR1cm4gJzxFQyBQb2ludCB4OiAnICsgdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB6OiAnICsgdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIC8vIFhYWCBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHplcm8gaXMgYWx3YXlzIHplcm8gaW4gcmVkXG4gIHJldHVybiB0aGlzLnouY21wbigwKSA9PT0gMDtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kYmwgPSBmdW5jdGlvbiBkYmwoKSB7XG4gIC8vIGh0dHA6Ly9oeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tbW9udGdvbS14ei5odG1sI2RvdWJsaW5nLWRibC0xOTg3LW0tM1xuICAvLyAyTSArIDJTICsgNEFcblxuICAvLyBBID0gWDEgKyBaMVxuICB2YXIgYSA9IHRoaXMueC5yZWRBZGQodGhpcy56KTtcbiAgLy8gQUEgPSBBXjJcbiAgdmFyIGFhID0gYS5yZWRTcXIoKTtcbiAgLy8gQiA9IFgxIC0gWjFcbiAgdmFyIGIgPSB0aGlzLngucmVkU3ViKHRoaXMueik7XG4gIC8vIEJCID0gQl4yXG4gIHZhciBiYiA9IGIucmVkU3FyKCk7XG4gIC8vIEMgPSBBQSAtIEJCXG4gIHZhciBjID0gYWEucmVkU3ViKGJiKTtcbiAgLy8gWDMgPSBBQSAqIEJCXG4gIHZhciBueCA9IGFhLnJlZE11bChiYik7XG4gIC8vIFozID0gQyAqIChCQiArIEEyNCAqIEMpXG4gIHZhciBueiA9IGMucmVkTXVsKGJiLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoYykpKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG56KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGlmZkFkZCA9IGZ1bmN0aW9uIGRpZmZBZGQocCwgZGlmZikge1xuICAvLyBodHRwOi8vaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLW1vbnRnb20teHouaHRtbCNkaWZmYWRkLWRhZGQtMTk4Ny1tLTNcbiAgLy8gNE0gKyAyUyArIDZBXG5cbiAgLy8gQSA9IFgyICsgWjJcbiAgdmFyIGEgPSB0aGlzLngucmVkQWRkKHRoaXMueik7XG4gIC8vIEIgPSBYMiAtIFoyXG4gIHZhciBiID0gdGhpcy54LnJlZFN1Yih0aGlzLnopO1xuICAvLyBDID0gWDMgKyBaM1xuICB2YXIgYyA9IHAueC5yZWRBZGQocC56KTtcbiAgLy8gRCA9IFgzIC0gWjNcbiAgdmFyIGQgPSBwLngucmVkU3ViKHAueik7XG4gIC8vIERBID0gRCAqIEFcbiAgdmFyIGRhID0gZC5yZWRNdWwoYSk7XG4gIC8vIENCID0gQyAqIEJcbiAgdmFyIGNiID0gYy5yZWRNdWwoYik7XG4gIC8vIFg1ID0gWjEgKiAoREEgKyBDQileMlxuICB2YXIgbnggPSBkaWZmLnoucmVkTXVsKGRhLnJlZEFkZChjYikucmVkU3FyKCkpO1xuICAvLyBaNSA9IFgxICogKERBIC0gQ0IpXjJcbiAgdmFyIG56ID0gZGlmZi54LnJlZE11bChkYS5yZWRJU3ViKGNiKS5yZWRTcXIoKSk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKGspIHtcbiAgdmFyIHQgPSBrLmNsb25lKCk7XG4gIHZhciBhID0gdGhpczsgLy8gKE4gLyAyKSAqIFEgKyBRXG4gIHZhciBiID0gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTsgLy8gKE4gLyAyKSAqIFFcbiAgdmFyIGMgPSB0aGlzOyAvLyBRXG5cbiAgZm9yICh2YXIgYml0cyA9IFtdOyB0LmNtcG4oMCkgIT09IDA7IHQuaXVzaHJuKDEpKVxuICAgIGJpdHMucHVzaCh0LmFuZGxuKDEpKTtcblxuICBmb3IgKHZhciBpID0gYml0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChiaXRzW2ldID09PSAwKSB7XG4gICAgICAvLyBOICogUSArIFEgPSAoKE4gLyAyKSAqIFEgKyBRKSkgKyAoTiAvIDIpICogUVxuICAgICAgYSA9IGEuZGlmZkFkZChiLCBjKTtcbiAgICAgIC8vIE4gKiBRID0gMiAqICgoTiAvIDIpICogUSArIFEpKVxuICAgICAgYiA9IGIuZGJsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE4gKiBRID0gKChOIC8gMikgKiBRICsgUSkgKyAoKE4gLyAyKSAqIFEpXG4gICAgICBiID0gYS5kaWZmQWRkKGIsIGMpO1xuICAgICAgLy8gTiAqIFEgKyBRID0gMiAqICgoTiAvIDIpICogUSArIFEpXG4gICAgICBhID0gYS5kYmwoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGI7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsQWRkID0gZnVuY3Rpb24gbXVsQWRkKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZScpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmp1bWxBZGQgPSBmdW5jdGlvbiBqdW1sQWRkKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZScpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEob3RoZXIpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WCgpLmNtcChvdGhlci5nZXRYKCkpID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZSgpIHtcbiAgdGhpcy54ID0gdGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKTtcbiAgdGhpcy56ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFggPSBmdW5jdGlvbiBnZXRYKCkge1xuICAvLyBOb3JtYWxpemUgY29vcmRpbmF0ZXNcbiAgdGhpcy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gdGhpcy54LmZyb21SZWQoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXJ2ZSA9IHJlcXVpcmUoJy4uL2N1cnZlJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG52YXIgQmFzZSA9IGN1cnZlLmJhc2U7XG5cbnZhciBhc3NlcnQgPSBlbGxpcHRpYy51dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIFNob3J0Q3VydmUoY29uZikge1xuICBCYXNlLmNhbGwodGhpcywgJ3Nob3J0JywgY29uZik7XG5cbiAgdGhpcy5hID0gbmV3IEJOKGNvbmYuYSwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5iID0gbmV3IEJOKGNvbmYuYiwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy50aW52ID0gdGhpcy50d28ucmVkSW52bSgpO1xuXG4gIHRoaXMuemVyb0EgPSB0aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCkgPT09IDA7XG4gIHRoaXMudGhyZWVBID0gdGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSA9PT0gMDtcblxuICAvLyBJZiB0aGUgY3VydmUgaXMgZW5kb21vcnBoaWMsIHByZWNhbGN1bGF0ZSBiZXRhIGFuZCBsYW1iZGFcbiAgdGhpcy5lbmRvID0gdGhpcy5fZ2V0RW5kb21vcnBoaXNtKGNvbmYpO1xuICB0aGlzLl9lbmRvV25hZlQxID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl9lbmRvV25hZlQyID0gbmV3IEFycmF5KDQpO1xufVxuaW5oZXJpdHMoU2hvcnRDdXJ2ZSwgQmFzZSk7XG5tb2R1bGUuZXhwb3J0cyA9IFNob3J0Q3VydmU7XG5cblNob3J0Q3VydmUucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc20gPSBmdW5jdGlvbiBfZ2V0RW5kb21vcnBoaXNtKGNvbmYpIHtcbiAgLy8gTm8gZWZmaWNpZW50IGVuZG9tb3JwaGlzbVxuICBpZiAoIXRoaXMuemVyb0EgfHwgIXRoaXMuZyB8fCAhdGhpcy5uIHx8IHRoaXMucC5tb2RuKDMpICE9PSAxKVxuICAgIHJldHVybjtcblxuICAvLyBDb21wdXRlIGJldGEgYW5kIGxhbWJkYSwgdGhhdCBsYW1iZGEgKiBQID0gKGJldGEgKiBQeDsgUHkpXG4gIHZhciBiZXRhO1xuICB2YXIgbGFtYmRhO1xuICBpZiAoY29uZi5iZXRhKSB7XG4gICAgYmV0YSA9IG5ldyBCTihjb25mLmJldGEsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJldGFzID0gdGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7XG4gICAgLy8gQ2hvb3NlIHRoZSBzbWFsbGVzdCBiZXRhXG4gICAgYmV0YSA9IGJldGFzWzBdLmNtcChiZXRhc1sxXSkgPCAwID8gYmV0YXNbMF0gOiBiZXRhc1sxXTtcbiAgICBiZXRhID0gYmV0YS50b1JlZCh0aGlzLnJlZCk7XG4gIH1cbiAgaWYgKGNvbmYubGFtYmRhKSB7XG4gICAgbGFtYmRhID0gbmV3IEJOKGNvbmYubGFtYmRhLCAxNik7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2hvb3NlIHRoZSBsYW1iZGEgdGhhdCBpcyBtYXRjaGluZyBzZWxlY3RlZCBiZXRhXG4gICAgdmFyIGxhbWJkYXMgPSB0aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTtcbiAgICBpZiAodGhpcy5nLm11bChsYW1iZGFzWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoYmV0YSkpID09PSAwKSB7XG4gICAgICBsYW1iZGEgPSBsYW1iZGFzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYW1iZGEgPSBsYW1iZGFzWzFdO1xuICAgICAgYXNzZXJ0KHRoaXMuZy5tdWwobGFtYmRhKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoYmV0YSkpID09PSAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgYmFzaXMgdmVjdG9ycywgdXNlZCBmb3IgYmFsYW5jZWQgbGVuZ3RoLXR3byByZXByZXNlbnRhdGlvblxuICB2YXIgYmFzaXM7XG4gIGlmIChjb25mLmJhc2lzKSB7XG4gICAgYmFzaXMgPSBjb25mLmJhc2lzLm1hcChmdW5jdGlvbih2ZWMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGE6IG5ldyBCTih2ZWMuYSwgMTYpLFxuICAgICAgICBiOiBuZXcgQk4odmVjLmIsIDE2KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBiYXNpcyA9IHRoaXMuX2dldEVuZG9CYXNpcyhsYW1iZGEpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiZXRhOiBiZXRhLFxuICAgIGxhbWJkYTogbGFtYmRhLFxuICAgIGJhc2lzOiBiYXNpc1xuICB9O1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2dldEVuZG9Sb290cyA9IGZ1bmN0aW9uIF9nZXRFbmRvUm9vdHMobnVtKSB7XG4gIC8vIEZpbmQgcm9vdHMgb2YgZm9yIHheMiArIHggKyAxIGluIEZcbiAgLy8gUm9vdCA9ICgtMSArLSBTcXJ0KC0zKSkgLyAyXG4gIC8vXG4gIHZhciByZWQgPSBudW0gPT09IHRoaXMucCA/IHRoaXMucmVkIDogQk4ubW9udChudW0pO1xuICB2YXIgdGludiA9IG5ldyBCTigyKS50b1JlZChyZWQpLnJlZEludm0oKTtcbiAgdmFyIG50aW52ID0gdGludi5yZWROZWcoKTtcblxuICB2YXIgcyA9IG5ldyBCTigzKS50b1JlZChyZWQpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwodGludik7XG5cbiAgdmFyIGwxID0gbnRpbnYucmVkQWRkKHMpLmZyb21SZWQoKTtcbiAgdmFyIGwyID0gbnRpbnYucmVkU3ViKHMpLmZyb21SZWQoKTtcbiAgcmV0dXJuIFsgbDEsIGwyIF07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzID0gZnVuY3Rpb24gX2dldEVuZG9CYXNpcyhsYW1iZGEpIHtcbiAgLy8gYXByeFNxcnQgPj0gc3FydCh0aGlzLm4pXG4gIHZhciBhcHJ4U3FydCA9IHRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKSAvIDIpKTtcblxuICAvLyAzLjc0XG4gIC8vIFJ1biBFR0NELCB1bnRpbCByKEwgKyAxKSA8IGFwcnhTcXJ0XG4gIHZhciB1ID0gbGFtYmRhO1xuICB2YXIgdiA9IHRoaXMubi5jbG9uZSgpO1xuICB2YXIgeDEgPSBuZXcgQk4oMSk7XG4gIHZhciB5MSA9IG5ldyBCTigwKTtcbiAgdmFyIHgyID0gbmV3IEJOKDApO1xuICB2YXIgeTIgPSBuZXcgQk4oMSk7XG5cbiAgLy8gTk9URTogYWxsIHZlY3RvcnMgYXJlIHJvb3RzIG9mOiBhICsgYiAqIGxhbWJkYSA9IDAgKG1vZCBuKVxuICB2YXIgYTA7XG4gIHZhciBiMDtcbiAgLy8gRmlyc3QgdmVjdG9yXG4gIHZhciBhMTtcbiAgdmFyIGIxO1xuICAvLyBTZWNvbmQgdmVjdG9yXG4gIHZhciBhMjtcbiAgdmFyIGIyO1xuXG4gIHZhciBwcmV2UjtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcjtcbiAgdmFyIHg7XG4gIHdoaWxlICh1LmNtcG4oMCkgIT09IDApIHtcbiAgICB2YXIgcSA9IHYuZGl2KHUpO1xuICAgIHIgPSB2LnN1YihxLm11bCh1KSk7XG4gICAgeCA9IHgyLnN1YihxLm11bCh4MSkpO1xuICAgIHZhciB5ID0geTIuc3ViKHEubXVsKHkxKSk7XG5cbiAgICBpZiAoIWExICYmIHIuY21wKGFwcnhTcXJ0KSA8IDApIHtcbiAgICAgIGEwID0gcHJldlIubmVnKCk7XG4gICAgICBiMCA9IHgxO1xuICAgICAgYTEgPSByLm5lZygpO1xuICAgICAgYjEgPSB4O1xuICAgIH0gZWxzZSBpZiAoYTEgJiYgKytpID09PSAyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcHJldlIgPSByO1xuXG4gICAgdiA9IHU7XG4gICAgdSA9IHI7XG4gICAgeDIgPSB4MTtcbiAgICB4MSA9IHg7XG4gICAgeTIgPSB5MTtcbiAgICB5MSA9IHk7XG4gIH1cbiAgYTIgPSByLm5lZygpO1xuICBiMiA9IHg7XG5cbiAgdmFyIGxlbjEgPSBhMS5zcXIoKS5hZGQoYjEuc3FyKCkpO1xuICB2YXIgbGVuMiA9IGEyLnNxcigpLmFkZChiMi5zcXIoKSk7XG4gIGlmIChsZW4yLmNtcChsZW4xKSA+PSAwKSB7XG4gICAgYTIgPSBhMDtcbiAgICBiMiA9IGIwO1xuICB9XG5cbiAgLy8gTm9ybWFsaXplIHNpZ25zXG4gIGlmIChhMS5uZWdhdGl2ZSkge1xuICAgIGExID0gYTEubmVnKCk7XG4gICAgYjEgPSBiMS5uZWcoKTtcbiAgfVxuICBpZiAoYTIubmVnYXRpdmUpIHtcbiAgICBhMiA9IGEyLm5lZygpO1xuICAgIGIyID0gYjIubmVnKCk7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIHsgYTogYTEsIGI6IGIxIH0sXG4gICAgeyBhOiBhMiwgYjogYjIgfVxuICBdO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2VuZG9TcGxpdCA9IGZ1bmN0aW9uIF9lbmRvU3BsaXQoaykge1xuICB2YXIgYmFzaXMgPSB0aGlzLmVuZG8uYmFzaXM7XG4gIHZhciB2MSA9IGJhc2lzWzBdO1xuICB2YXIgdjIgPSBiYXNpc1sxXTtcblxuICB2YXIgYzEgPSB2Mi5iLm11bChrKS5kaXZSb3VuZCh0aGlzLm4pO1xuICB2YXIgYzIgPSB2MS5iLm5lZygpLm11bChrKS5kaXZSb3VuZCh0aGlzLm4pO1xuXG4gIHZhciBwMSA9IGMxLm11bCh2MS5hKTtcbiAgdmFyIHAyID0gYzIubXVsKHYyLmEpO1xuICB2YXIgcTEgPSBjMS5tdWwodjEuYik7XG4gIHZhciBxMiA9IGMyLm11bCh2Mi5iKTtcblxuICAvLyBDYWxjdWxhdGUgYW5zd2VyXG4gIHZhciBrMSA9IGsuc3ViKHAxKS5zdWIocDIpO1xuICB2YXIgazIgPSBxMS5hZGQocTIpLm5lZygpO1xuICByZXR1cm4geyBrMTogazEsIGsyOiBrMiB9O1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tWCA9IGZ1bmN0aW9uIHBvaW50RnJvbVgoeCwgb2RkKSB7XG4gIHggPSBuZXcgQk4oeCwgMTYpO1xuICBpZiAoIXgucmVkKVxuICAgIHggPSB4LnRvUmVkKHRoaXMucmVkKTtcblxuICB2YXIgeTIgPSB4LnJlZFNxcigpLnJlZE11bCh4KS5yZWRJQWRkKHgucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKTtcbiAgdmFyIHkgPSB5Mi5yZWRTcXJ0KCk7XG4gIGlmICh5LnJlZFNxcigpLnJlZFN1Yih5MikuY21wKHRoaXMuemVybykgIT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBvaW50Jyk7XG5cbiAgLy8gWFhYIElzIHRoZXJlIGFueSB3YXkgdG8gdGVsbCBpZiB0aGUgbnVtYmVyIGlzIG9kZCB3aXRob3V0IGNvbnZlcnRpbmcgaXRcbiAgLy8gdG8gbm9uLXJlZCBmb3JtP1xuICB2YXIgaXNPZGQgPSB5LmZyb21SZWQoKS5pc09kZCgpO1xuICBpZiAob2RkICYmICFpc09kZCB8fCAhb2RkICYmIGlzT2RkKVxuICAgIHkgPSB5LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZShwb2ludCkge1xuICBpZiAocG9pbnQuaW5mKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIHZhciB4ID0gcG9pbnQueDtcbiAgdmFyIHkgPSBwb2ludC55O1xuXG4gIHZhciBheCA9IHRoaXMuYS5yZWRNdWwoeCk7XG4gIHZhciByaHMgPSB4LnJlZFNxcigpLnJlZE11bCh4KS5yZWRJQWRkKGF4KS5yZWRJQWRkKHRoaXMuYik7XG4gIHJldHVybiB5LnJlZFNxcigpLnJlZElTdWIocmhzKS5jbXBuKDApID09PSAwO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkID1cbiAgICBmdW5jdGlvbiBfZW5kb1duYWZNdWxBZGQocG9pbnRzLCBjb2VmZnMsIGphY29iaWFuUmVzdWx0KSB7XG4gIHZhciBucG9pbnRzID0gdGhpcy5fZW5kb1duYWZUMTtcbiAgdmFyIG5jb2VmZnMgPSB0aGlzLl9lbmRvV25hZlQyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzcGxpdCA9IHRoaXMuX2VuZG9TcGxpdChjb2VmZnNbaV0pO1xuICAgIHZhciBwID0gcG9pbnRzW2ldO1xuICAgIHZhciBiZXRhID0gcC5fZ2V0QmV0YSgpO1xuXG4gICAgaWYgKHNwbGl0LmsxLm5lZ2F0aXZlKSB7XG4gICAgICBzcGxpdC5rMS5pbmVnKCk7XG4gICAgICBwID0gcC5uZWcodHJ1ZSk7XG4gICAgfVxuICAgIGlmIChzcGxpdC5rMi5uZWdhdGl2ZSkge1xuICAgICAgc3BsaXQuazIuaW5lZygpO1xuICAgICAgYmV0YSA9IGJldGEubmVnKHRydWUpO1xuICAgIH1cblxuICAgIG5wb2ludHNbaSAqIDJdID0gcDtcbiAgICBucG9pbnRzW2kgKiAyICsgMV0gPSBiZXRhO1xuICAgIG5jb2VmZnNbaSAqIDJdID0gc3BsaXQuazE7XG4gICAgbmNvZWZmc1tpICogMiArIDFdID0gc3BsaXQuazI7XG4gIH1cbiAgdmFyIHJlcyA9IHRoaXMuX3duYWZNdWxBZGQoMSwgbnBvaW50cywgbmNvZWZmcywgaSAqIDIsIGphY29iaWFuUmVzdWx0KTtcblxuICAvLyBDbGVhbi11cCByZWZlcmVuY2VzIHRvIHBvaW50cyBhbmQgY29lZmZpY2llbnRzXG4gIGZvciAodmFyIGogPSAwOyBqIDwgaSAqIDI7IGorKykge1xuICAgIG5wb2ludHNbal0gPSBudWxsO1xuICAgIG5jb2VmZnNbal0gPSBudWxsO1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiBQb2ludChjdXJ2ZSwgeCwgeSwgaXNSZWQpIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ2FmZmluZScpO1xuICBpZiAoeCA9PT0gbnVsbCAmJiB5ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gbnVsbDtcbiAgICB0aGlzLnkgPSBudWxsO1xuICAgIHRoaXMuaW5mID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueSA9IG5ldyBCTih5LCAxNik7XG4gICAgLy8gRm9yY2UgcmVkZ29tZXJ5IHJlcHJlc2VudGF0aW9uIHdoZW4gbG9hZGluZyBmcm9tIEpTT05cbiAgICBpZiAoaXNSZWQpIHtcbiAgICAgIHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgICB0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMueC5yZWQpXG4gICAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICghdGhpcy55LnJlZClcbiAgICAgIHRoaXMueSA9IHRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgdGhpcy5pbmYgPSBmYWxzZTtcbiAgfVxufVxuaW5oZXJpdHMoUG9pbnQsIEJhc2UuQmFzZVBvaW50KTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB5LCBpc1JlZCkge1xuICByZXR1cm4gbmV3IFBvaW50KHRoaXMsIHgsIHksIGlzUmVkKTtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaiwgcmVkKSB7XG4gIHJldHVybiBQb2ludC5mcm9tSlNPTih0aGlzLCBvYmosIHJlZCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2dldEJldGEgPSBmdW5jdGlvbiBfZ2V0QmV0YSgpIHtcbiAgaWYgKCF0aGlzLmN1cnZlLmVuZG8pXG4gICAgcmV0dXJuO1xuXG4gIHZhciBwcmUgPSB0aGlzLnByZWNvbXB1dGVkO1xuICBpZiAocHJlICYmIHByZS5iZXRhKVxuICAgIHJldHVybiBwcmUuYmV0YTtcblxuICB2YXIgYmV0YSA9IHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksIHRoaXMueSk7XG4gIGlmIChwcmUpIHtcbiAgICB2YXIgY3VydmUgPSB0aGlzLmN1cnZlO1xuICAgIHZhciBlbmRvTXVsID0gZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIGN1cnZlLnBvaW50KHAueC5yZWRNdWwoY3VydmUuZW5kby5iZXRhKSwgcC55KTtcbiAgICB9O1xuICAgIHByZS5iZXRhID0gYmV0YTtcbiAgICBiZXRhLnByZWNvbXB1dGVkID0ge1xuICAgICAgYmV0YTogbnVsbCxcbiAgICAgIG5hZjogcHJlLm5hZiAmJiB7XG4gICAgICAgIHduZDogcHJlLm5hZi53bmQsXG4gICAgICAgIHBvaW50czogcHJlLm5hZi5wb2ludHMubWFwKGVuZG9NdWwpXG4gICAgICB9LFxuICAgICAgZG91YmxlczogcHJlLmRvdWJsZXMgJiYge1xuICAgICAgICBzdGVwOiBwcmUuZG91Ymxlcy5zdGVwLFxuICAgICAgICBwb2ludHM6IHByZS5kb3VibGVzLnBvaW50cy5tYXAoZW5kb011bClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBiZXRhO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgaWYgKCF0aGlzLnByZWNvbXB1dGVkKVxuICAgIHJldHVybiBbIHRoaXMueCwgdGhpcy55IF07XG5cbiAgcmV0dXJuIFsgdGhpcy54LCB0aGlzLnksIHRoaXMucHJlY29tcHV0ZWQgJiYge1xuICAgIGRvdWJsZXM6IHRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyAmJiB7XG4gICAgICBzdGVwOiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxcbiAgICAgIHBvaW50czogdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKVxuICAgIH0sXG4gICAgbmFmOiB0aGlzLnByZWNvbXB1dGVkLm5hZiAmJiB7XG4gICAgICB3bmQ6IHRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxcbiAgICAgIHBvaW50czogdGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpXG4gICAgfVxuICB9IF07XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmosIHJlZCkge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpXG4gICAgb2JqID0gSlNPTi5wYXJzZShvYmopO1xuICB2YXIgcmVzID0gY3VydmUucG9pbnQob2JqWzBdLCBvYmpbMV0sIHJlZCk7XG4gIGlmICghb2JqWzJdKVxuICAgIHJldHVybiByZXM7XG5cbiAgZnVuY3Rpb24gb2JqMnBvaW50KG9iaikge1xuICAgIHJldHVybiBjdXJ2ZS5wb2ludChvYmpbMF0sIG9ialsxXSwgcmVkKTtcbiAgfVxuXG4gIHZhciBwcmUgPSBvYmpbMl07XG4gIHJlcy5wcmVjb21wdXRlZCA9IHtcbiAgICBiZXRhOiBudWxsLFxuICAgIGRvdWJsZXM6IHByZS5kb3VibGVzICYmIHtcbiAgICAgIHN0ZXA6IHByZS5kb3VibGVzLnN0ZXAsXG4gICAgICBwb2ludHM6IFsgcmVzIF0uY29uY2F0KHByZS5kb3VibGVzLnBvaW50cy5tYXAob2JqMnBvaW50KSlcbiAgICB9LFxuICAgIG5hZjogcHJlLm5hZiAmJiB7XG4gICAgICB3bmQ6IHByZS5uYWYud25kLFxuICAgICAgcG9pbnRzOiBbIHJlcyBdLmNvbmNhdChwcmUubmFmLnBvaW50cy5tYXAob2JqMnBvaW50KSlcbiAgICB9XG4gIH07XG4gIHJldHVybiByZXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBQb2ludCBJbmZpbml0eT4nO1xuICByZXR1cm4gJzxFQyBQb2ludCB4OiAnICsgdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB5OiAnICsgdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIHJldHVybiB0aGlzLmluZjtcbn07XG5cblBvaW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQocCkge1xuICAvLyBPICsgUCA9IFBcbiAgaWYgKHRoaXMuaW5mKVxuICAgIHJldHVybiBwO1xuXG4gIC8vIFAgKyBPID0gUFxuICBpZiAocC5pbmYpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gUCArIFAgPSAyUFxuICBpZiAodGhpcy5lcShwKSlcbiAgICByZXR1cm4gdGhpcy5kYmwoKTtcblxuICAvLyBQICsgKC1QKSA9IE9cbiAgaWYgKHRoaXMubmVnKCkuZXEocCkpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7XG5cbiAgLy8gUCArIFEgPSBPXG4gIGlmICh0aGlzLnguY21wKHAueCkgPT09IDApXG4gICAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7XG5cbiAgdmFyIGMgPSB0aGlzLnkucmVkU3ViKHAueSk7XG4gIGlmIChjLmNtcG4oMCkgIT09IDApXG4gICAgYyA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIocC54KS5yZWRJbnZtKCkpO1xuICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKHAueCk7XG4gIHZhciBueSA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIobngpKS5yZWRJU3ViKHRoaXMueSk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gMlAgPSBPXG4gIHZhciB5czEgPSB0aGlzLnkucmVkQWRkKHRoaXMueSk7XG4gIGlmICh5czEuY21wbigwKSA9PT0gMClcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgYSA9IHRoaXMuY3VydmUuYTtcblxuICB2YXIgeDIgPSB0aGlzLngucmVkU3FyKCk7XG4gIHZhciBkeWludiA9IHlzMS5yZWRJbnZtKCk7XG4gIHZhciBjID0geDIucmVkQWRkKHgyKS5yZWRJQWRkKHgyKS5yZWRJQWRkKGEpLnJlZE11bChkeWludik7XG5cbiAgdmFyIG54ID0gYy5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSk7XG4gIHZhciBueSA9IGMucmVkTXVsKHRoaXMueC5yZWRTdWIobngpKS5yZWRJU3ViKHRoaXMueSk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiBnZXRZKCkge1xuICByZXR1cm4gdGhpcy55LmZyb21SZWQoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICBrID0gbmV3IEJOKGssIDE2KTtcblxuICBpZiAodGhpcy5faGFzRG91YmxlcyhrKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcywgayk7XG4gIGVsc2UgaWYgKHRoaXMuY3VydmUuZW5kbylcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoWyB0aGlzIF0sIFsgayBdKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsIGspO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bEFkZCA9IGZ1bmN0aW9uIG11bEFkZChrMSwgcDIsIGsyKSB7XG4gIHZhciBwb2ludHMgPSBbIHRoaXMsIHAyIF07XG4gIHZhciBjb2VmZnMgPSBbIGsxLCBrMiBdO1xuICBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChwb2ludHMsIGNvZWZmcyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLCBwb2ludHMsIGNvZWZmcywgMik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuam11bEFkZCA9IGZ1bmN0aW9uIGptdWxBZGQoazEsIHAyLCBrMikge1xuICB2YXIgcG9pbnRzID0gWyB0aGlzLCBwMiBdO1xuICB2YXIgY29lZmZzID0gWyBrMSwgazIgXTtcbiAgaWYgKHRoaXMuY3VydmUuZW5kbylcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQocG9pbnRzLCBjb2VmZnMsIHRydWUpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSwgcG9pbnRzLCBjb2VmZnMsIDIsIHRydWUpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxID0gZnVuY3Rpb24gZXEocCkge1xuICByZXR1cm4gdGhpcyA9PT0gcCB8fFxuICAgICAgICAgdGhpcy5pbmYgPT09IHAuaW5mICYmXG4gICAgICAgICAgICAgKHRoaXMuaW5mIHx8IHRoaXMueC5jbXAocC54KSA9PT0gMCAmJiB0aGlzLnkuY21wKHAueSkgPT09IDApO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZyhfcHJlY29tcHV0ZSkge1xuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIHJlcyA9IHRoaXMuY3VydmUucG9pbnQodGhpcy54LCB0aGlzLnkucmVkTmVnKCkpO1xuICBpZiAoX3ByZWNvbXB1dGUgJiYgdGhpcy5wcmVjb21wdXRlZCkge1xuICAgIHZhciBwcmUgPSB0aGlzLnByZWNvbXB1dGVkO1xuICAgIHZhciBuZWdhdGUgPSBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gcC5uZWcoKTtcbiAgICB9O1xuICAgIHJlcy5wcmVjb21wdXRlZCA9IHtcbiAgICAgIG5hZjogcHJlLm5hZiAmJiB7XG4gICAgICAgIHduZDogcHJlLm5hZi53bmQsXG4gICAgICAgIHBvaW50czogcHJlLm5hZi5wb2ludHMubWFwKG5lZ2F0ZSlcbiAgICAgIH0sXG4gICAgICBkb3VibGVzOiBwcmUuZG91YmxlcyAmJiB7XG4gICAgICAgIHN0ZXA6IHByZS5kb3VibGVzLnN0ZXAsXG4gICAgICAgIHBvaW50czogcHJlLmRvdWJsZXMucG9pbnRzLm1hcChuZWdhdGUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcblxuUG9pbnQucHJvdG90eXBlLnRvSiA9IGZ1bmN0aW9uIHRvSigpIHtcbiAgaWYgKHRoaXMuaW5mKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChudWxsLCBudWxsLCBudWxsKTtcblxuICB2YXIgcmVzID0gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LCB0aGlzLnksIHRoaXMuY3VydmUub25lKTtcbiAgcmV0dXJuIHJlcztcbn07XG5cbmZ1bmN0aW9uIEpQb2ludChjdXJ2ZSwgeCwgeSwgeikge1xuICBCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsIGN1cnZlLCAnamFjb2JpYW4nKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeSA9PT0gbnVsbCAmJiB6ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy55ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gICAgdGhpcy56ID0gbmV3IEJOKDApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy55ID0gbmV3IEJOKHksIDE2KTtcbiAgICB0aGlzLnogPSBuZXcgQk4oeiwgMTYpO1xuICB9XG4gIGlmICghdGhpcy54LnJlZClcbiAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICBpZiAoIXRoaXMueS5yZWQpXG4gICAgdGhpcy55ID0gdGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgaWYgKCF0aGlzLnoucmVkKVxuICAgIHRoaXMueiA9IHRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG5cbiAgdGhpcy56T25lID0gdGhpcy56ID09PSB0aGlzLmN1cnZlLm9uZTtcbn1cbmluaGVyaXRzKEpQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5qcG9pbnQgPSBmdW5jdGlvbiBqcG9pbnQoeCwgeSwgeikge1xuICByZXR1cm4gbmV3IEpQb2ludCh0aGlzLCB4LCB5LCB6KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUudG9QID0gZnVuY3Rpb24gdG9QKCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCwgbnVsbCk7XG5cbiAgdmFyIHppbnYgPSB0aGlzLnoucmVkSW52bSgpO1xuICB2YXIgemludjIgPSB6aW52LnJlZFNxcigpO1xuICB2YXIgYXggPSB0aGlzLngucmVkTXVsKHppbnYyKTtcbiAgdmFyIGF5ID0gdGhpcy55LnJlZE11bCh6aW52MikucmVkTXVsKHppbnYpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KGF4LCBheSk7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZygpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCwgdGhpcy55LnJlZE5lZygpLCB0aGlzLnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQocCkge1xuICAvLyBPICsgUCA9IFBcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBwO1xuXG4gIC8vIFAgKyBPID0gUFxuICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gMTJNICsgNFMgKyA3QVxuICB2YXIgcHoyID0gcC56LnJlZFNxcigpO1xuICB2YXIgejIgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciB1MSA9IHRoaXMueC5yZWRNdWwocHoyKTtcbiAgdmFyIHUyID0gcC54LnJlZE11bCh6Mik7XG4gIHZhciBzMSA9IHRoaXMueS5yZWRNdWwocHoyLnJlZE11bChwLnopKTtcbiAgdmFyIHMyID0gcC55LnJlZE11bCh6Mi5yZWRNdWwodGhpcy56KSk7XG5cbiAgdmFyIGggPSB1MS5yZWRTdWIodTIpO1xuICB2YXIgciA9IHMxLnJlZFN1YihzMik7XG4gIGlmIChoLmNtcG4oMCkgPT09IDApIHtcbiAgICBpZiAoci5jbXBuKDApICE9PSAwKVxuICAgICAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLmRibCgpO1xuICB9XG5cbiAgdmFyIGgyID0gaC5yZWRTcXIoKTtcbiAgdmFyIGgzID0gaDIucmVkTXVsKGgpO1xuICB2YXIgdiA9IHUxLnJlZE11bChoMik7XG5cbiAgdmFyIG54ID0gci5yZWRTcXIoKS5yZWRJQWRkKGgzKS5yZWRJU3ViKHYpLnJlZElTdWIodik7XG4gIHZhciBueSA9IHIucmVkTXVsKHYucmVkSVN1YihueCkpLnJlZElTdWIoczEucmVkTXVsKGgzKSk7XG4gIHZhciBueiA9IHRoaXMuei5yZWRNdWwocC56KS5yZWRNdWwoaCk7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5taXhlZEFkZCA9IGZ1bmN0aW9uIG1peGVkQWRkKHApIHtcbiAgLy8gTyArIFAgPSBQXG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gcC50b0ooKTtcblxuICAvLyBQICsgTyA9IFBcbiAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIDhNICsgM1MgKyA3QVxuICB2YXIgejIgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciB1MSA9IHRoaXMueDtcbiAgdmFyIHUyID0gcC54LnJlZE11bCh6Mik7XG4gIHZhciBzMSA9IHRoaXMueTtcbiAgdmFyIHMyID0gcC55LnJlZE11bCh6MikucmVkTXVsKHRoaXMueik7XG5cbiAgdmFyIGggPSB1MS5yZWRTdWIodTIpO1xuICB2YXIgciA9IHMxLnJlZFN1YihzMik7XG4gIGlmIChoLmNtcG4oMCkgPT09IDApIHtcbiAgICBpZiAoci5jbXBuKDApICE9PSAwKVxuICAgICAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB0aGlzLmRibCgpO1xuICB9XG5cbiAgdmFyIGgyID0gaC5yZWRTcXIoKTtcbiAgdmFyIGgzID0gaDIucmVkTXVsKGgpO1xuICB2YXIgdiA9IHUxLnJlZE11bChoMik7XG5cbiAgdmFyIG54ID0gci5yZWRTcXIoKS5yZWRJQWRkKGgzKS5yZWRJU3ViKHYpLnJlZElTdWIodik7XG4gIHZhciBueSA9IHIucmVkTXVsKHYucmVkSVN1YihueCkpLnJlZElTdWIoczEucmVkTXVsKGgzKSk7XG4gIHZhciBueiA9IHRoaXMuei5yZWRNdWwoaCk7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5kYmxwID0gZnVuY3Rpb24gZGJscChwb3cpIHtcbiAgaWYgKHBvdyA9PT0gMClcbiAgICByZXR1cm4gdGhpcztcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuICBpZiAoIXBvdylcbiAgICByZXR1cm4gdGhpcy5kYmwoKTtcblxuICBpZiAodGhpcy5jdXJ2ZS56ZXJvQSB8fCB0aGlzLmN1cnZlLnRocmVlQSkge1xuICAgIHZhciByID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvdzsgaSsrKVxuICAgICAgciA9IHIuZGJsKCk7XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICAvLyAxTSArIDJTICsgMUEgKyBOICogKDRTICsgNU0gKyA4QSlcbiAgLy8gTiA9IDEgPT4gNk0gKyA2UyArIDlBXG4gIHZhciBhID0gdGhpcy5jdXJ2ZS5hO1xuICB2YXIgdGludiA9IHRoaXMuY3VydmUudGludjtcblxuICB2YXIganggPSB0aGlzLng7XG4gIHZhciBqeSA9IHRoaXMueTtcbiAgdmFyIGp6ID0gdGhpcy56O1xuICB2YXIgano0ID0ganoucmVkU3FyKCkucmVkU3FyKCk7XG5cbiAgLy8gUmV1c2UgcmVzdWx0c1xuICB2YXIganlkID0gankucmVkQWRkKGp5KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3c7IGkrKykge1xuICAgIHZhciBqeDIgPSBqeC5yZWRTcXIoKTtcbiAgICB2YXIganlkMiA9IGp5ZC5yZWRTcXIoKTtcbiAgICB2YXIganlkNCA9IGp5ZDIucmVkU3FyKCk7XG4gICAgdmFyIGMgPSBqeDIucmVkQWRkKGp4MikucmVkSUFkZChqeDIpLnJlZElBZGQoYS5yZWRNdWwoano0KSk7XG5cbiAgICB2YXIgdDEgPSBqeC5yZWRNdWwoanlkMik7XG4gICAgdmFyIG54ID0gYy5yZWRTcXIoKS5yZWRJU3ViKHQxLnJlZEFkZCh0MSkpO1xuICAgIHZhciB0MiA9IHQxLnJlZElTdWIobngpO1xuICAgIHZhciBkbnkgPSBjLnJlZE11bCh0Mik7XG4gICAgZG55ID0gZG55LnJlZElBZGQoZG55KS5yZWRJU3ViKGp5ZDQpO1xuICAgIHZhciBueiA9IGp5ZC5yZWRNdWwoanopO1xuICAgIGlmIChpICsgMSA8IHBvdylcbiAgICAgIGp6NCA9IGp6NC5yZWRNdWwoanlkNCk7XG5cbiAgICBqeCA9IG54O1xuICAgIGp6ID0gbno7XG4gICAganlkID0gZG55O1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGp4LCBqeWQucmVkTXVsKHRpbnYpLCBqeik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmRibCA9IGZ1bmN0aW9uIGRibCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGlmICh0aGlzLmN1cnZlLnplcm9BKVxuICAgIHJldHVybiB0aGlzLl96ZXJvRGJsKCk7XG4gIGVsc2UgaWYgKHRoaXMuY3VydmUudGhyZWVBKVxuICAgIHJldHVybiB0aGlzLl90aHJlZURibCgpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuX2RibCgpO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5femVyb0RibCA9IGZ1bmN0aW9uIF96ZXJvRGJsKCkge1xuICB2YXIgbng7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICAvLyBaID0gMVxuICBpZiAodGhpcy56T25lKSB7XG4gICAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0wLmh0bWxcbiAgICAvLyAgICAgI2RvdWJsaW5nLW1kYmwtMjAwNy1ibFxuICAgIC8vIDFNICsgNVMgKyAxNEFcblxuICAgIC8vIFhYID0gWDFeMlxuICAgIHZhciB4eCA9IHRoaXMueC5yZWRTcXIoKTtcbiAgICAvLyBZWSA9IFkxXjJcbiAgICB2YXIgeXkgPSB0aGlzLnkucmVkU3FyKCk7XG4gICAgLy8gWVlZWSA9IFlZXjJcbiAgICB2YXIgeXl5eSA9IHl5LnJlZFNxcigpO1xuICAgIC8vIFMgPSAyICogKChYMSArIFlZKV4yIC0gWFggLSBZWVlZKVxuICAgIHZhciBzID0gdGhpcy54LnJlZEFkZCh5eSkucmVkU3FyKCkucmVkSVN1Yih4eCkucmVkSVN1Yih5eXl5KTtcbiAgICBzID0gcy5yZWRJQWRkKHMpO1xuICAgIC8vIE0gPSAzICogWFggKyBhOyBhID0gMFxuICAgIHZhciBtID0geHgucmVkQWRkKHh4KS5yZWRJQWRkKHh4KTtcbiAgICAvLyBUID0gTSBeIDIgLSAyKlNcbiAgICB2YXIgdCA9IG0ucmVkU3FyKCkucmVkSVN1YihzKS5yZWRJU3ViKHMpO1xuXG4gICAgLy8gOCAqIFlZWVlcbiAgICB2YXIgeXl5eTggPSB5eXl5LnJlZElBZGQoeXl5eSk7XG4gICAgeXl5eTggPSB5eXl5OC5yZWRJQWRkKHl5eXk4KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuXG4gICAgLy8gWDMgPSBUXG4gICAgbnggPSB0O1xuICAgIC8vIFkzID0gTSAqIChTIC0gVCkgLSA4ICogWVlZWVxuICAgIG55ID0gbS5yZWRNdWwocy5yZWRJU3ViKHQpKS5yZWRJU3ViKHl5eXk4KTtcbiAgICAvLyBaMyA9IDIqWTFcbiAgICBueiA9IHRoaXMueS5yZWRBZGQodGhpcy55KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTAuaHRtbFxuICAgIC8vICAgICAjZG91YmxpbmctZGJsLTIwMDktbFxuICAgIC8vIDJNICsgNVMgKyAxM0FcblxuICAgIC8vIEEgPSBYMV4yXG4gICAgdmFyIGEgPSB0aGlzLngucmVkU3FyKCk7XG4gICAgLy8gQiA9IFkxXjJcbiAgICB2YXIgYiA9IHRoaXMueS5yZWRTcXIoKTtcbiAgICAvLyBDID0gQl4yXG4gICAgdmFyIGMgPSBiLnJlZFNxcigpO1xuICAgIC8vIEQgPSAyICogKChYMSArIEIpXjIgLSBBIC0gQylcbiAgICB2YXIgZCA9IHRoaXMueC5yZWRBZGQoYikucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGMpO1xuICAgIGQgPSBkLnJlZElBZGQoZCk7XG4gICAgLy8gRSA9IDMgKiBBXG4gICAgdmFyIGUgPSBhLnJlZEFkZChhKS5yZWRJQWRkKGEpO1xuICAgIC8vIEYgPSBFXjJcbiAgICB2YXIgZiA9IGUucmVkU3FyKCk7XG5cbiAgICAvLyA4ICogQ1xuICAgIHZhciBjOCA9IGMucmVkSUFkZChjKTtcbiAgICBjOCA9IGM4LnJlZElBZGQoYzgpO1xuICAgIGM4ID0gYzgucmVkSUFkZChjOCk7XG5cbiAgICAvLyBYMyA9IEYgLSAyICogRFxuICAgIG54ID0gZi5yZWRJU3ViKGQpLnJlZElTdWIoZCk7XG4gICAgLy8gWTMgPSBFICogKEQgLSBYMykgLSA4ICogQ1xuICAgIG55ID0gZS5yZWRNdWwoZC5yZWRJU3ViKG54KSkucmVkSVN1YihjOCk7XG4gICAgLy8gWjMgPSAyICogWTEgKiBaMVxuICAgIG56ID0gdGhpcy55LnJlZE11bCh0aGlzLnopO1xuICAgIG56ID0gbnoucmVkSUFkZChueik7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLl90aHJlZURibCA9IGZ1bmN0aW9uIF90aHJlZURibCgpIHtcbiAgdmFyIG54O1xuICB2YXIgbnk7XG4gIHZhciBuejtcbiAgLy8gWiA9IDFcbiAgaWYgKHRoaXMuek9uZSkge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMy5odG1sXG4gICAgLy8gICAgICNkb3VibGluZy1tZGJsLTIwMDctYmxcbiAgICAvLyAxTSArIDVTICsgMTVBXG5cbiAgICAvLyBYWCA9IFgxXjJcbiAgICB2YXIgeHggPSB0aGlzLngucmVkU3FyKCk7XG4gICAgLy8gWVkgPSBZMV4yXG4gICAgdmFyIHl5ID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIFlZWVkgPSBZWV4yXG4gICAgdmFyIHl5eXkgPSB5eS5yZWRTcXIoKTtcbiAgICAvLyBTID0gMiAqICgoWDEgKyBZWSleMiAtIFhYIC0gWVlZWSlcbiAgICB2YXIgcyA9IHRoaXMueC5yZWRBZGQoeXkpLnJlZFNxcigpLnJlZElTdWIoeHgpLnJlZElTdWIoeXl5eSk7XG4gICAgcyA9IHMucmVkSUFkZChzKTtcbiAgICAvLyBNID0gMyAqIFhYICsgYVxuICAgIHZhciBtID0geHgucmVkQWRkKHh4KS5yZWRJQWRkKHh4KS5yZWRJQWRkKHRoaXMuY3VydmUuYSk7XG4gICAgLy8gVCA9IE1eMiAtIDIgKiBTXG4gICAgdmFyIHQgPSBtLnJlZFNxcigpLnJlZElTdWIocykucmVkSVN1YihzKTtcbiAgICAvLyBYMyA9IFRcbiAgICBueCA9IHQ7XG4gICAgLy8gWTMgPSBNICogKFMgLSBUKSAtIDggKiBZWVlZXG4gICAgdmFyIHl5eXk4ID0geXl5eS5yZWRJQWRkKHl5eXkpO1xuICAgIHl5eXk4ID0geXl5eTgucmVkSUFkZCh5eXl5OCk7XG4gICAgeXl5eTggPSB5eXl5OC5yZWRJQWRkKHl5eXk4KTtcbiAgICBueSA9IG0ucmVkTXVsKHMucmVkSVN1Yih0KSkucmVkSVN1Yih5eXl5OCk7XG4gICAgLy8gWjMgPSAyICogWTFcbiAgICBueiA9IHRoaXMueS5yZWRBZGQodGhpcy55KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTMuaHRtbCNkb3VibGluZy1kYmwtMjAwMS1iXG4gICAgLy8gM00gKyA1U1xuXG4gICAgLy8gZGVsdGEgPSBaMV4yXG4gICAgdmFyIGRlbHRhID0gdGhpcy56LnJlZFNxcigpO1xuICAgIC8vIGdhbW1hID0gWTFeMlxuICAgIHZhciBnYW1tYSA9IHRoaXMueS5yZWRTcXIoKTtcbiAgICAvLyBiZXRhID0gWDEgKiBnYW1tYVxuICAgIHZhciBiZXRhID0gdGhpcy54LnJlZE11bChnYW1tYSk7XG4gICAgLy8gYWxwaGEgPSAzICogKFgxIC0gZGVsdGEpICogKFgxICsgZGVsdGEpXG4gICAgdmFyIGFscGhhID0gdGhpcy54LnJlZFN1YihkZWx0YSkucmVkTXVsKHRoaXMueC5yZWRBZGQoZGVsdGEpKTtcbiAgICBhbHBoYSA9IGFscGhhLnJlZEFkZChhbHBoYSkucmVkSUFkZChhbHBoYSk7XG4gICAgLy8gWDMgPSBhbHBoYV4yIC0gOCAqIGJldGFcbiAgICB2YXIgYmV0YTQgPSBiZXRhLnJlZElBZGQoYmV0YSk7XG4gICAgYmV0YTQgPSBiZXRhNC5yZWRJQWRkKGJldGE0KTtcbiAgICB2YXIgYmV0YTggPSBiZXRhNC5yZWRBZGQoYmV0YTQpO1xuICAgIG54ID0gYWxwaGEucmVkU3FyKCkucmVkSVN1YihiZXRhOCk7XG4gICAgLy8gWjMgPSAoWTEgKyBaMSleMiAtIGdhbW1hIC0gZGVsdGFcbiAgICBueiA9IHRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGdhbW1hKS5yZWRJU3ViKGRlbHRhKTtcbiAgICAvLyBZMyA9IGFscGhhICogKDQgKiBiZXRhIC0gWDMpIC0gOCAqIGdhbW1hXjJcbiAgICB2YXIgZ2dhbW1hOCA9IGdhbW1hLnJlZFNxcigpO1xuICAgIGdnYW1tYTggPSBnZ2FtbWE4LnJlZElBZGQoZ2dhbW1hOCk7XG4gICAgZ2dhbW1hOCA9IGdnYW1tYTgucmVkSUFkZChnZ2FtbWE4KTtcbiAgICBnZ2FtbWE4ID0gZ2dhbW1hOC5yZWRJQWRkKGdnYW1tYTgpO1xuICAgIG55ID0gYWxwaGEucmVkTXVsKGJldGE0LnJlZElTdWIobngpKS5yZWRJU3ViKGdnYW1tYTgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5fZGJsID0gZnVuY3Rpb24gX2RibCgpIHtcbiAgdmFyIGEgPSB0aGlzLmN1cnZlLmE7XG5cbiAgLy8gNE0gKyA2UyArIDEwQVxuICB2YXIganggPSB0aGlzLng7XG4gIHZhciBqeSA9IHRoaXMueTtcbiAgdmFyIGp6ID0gdGhpcy56O1xuICB2YXIgano0ID0ganoucmVkU3FyKCkucmVkU3FyKCk7XG5cbiAgdmFyIGp4MiA9IGp4LnJlZFNxcigpO1xuICB2YXIgankyID0gankucmVkU3FyKCk7XG5cbiAgdmFyIGMgPSBqeDIucmVkQWRkKGp4MikucmVkSUFkZChqeDIpLnJlZElBZGQoYS5yZWRNdWwoano0KSk7XG5cbiAgdmFyIGp4ZDQgPSBqeC5yZWRBZGQoangpO1xuICBqeGQ0ID0ganhkNC5yZWRJQWRkKGp4ZDQpO1xuICB2YXIgdDEgPSBqeGQ0LnJlZE11bChqeTIpO1xuICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodDEucmVkQWRkKHQxKSk7XG4gIHZhciB0MiA9IHQxLnJlZElTdWIobngpO1xuXG4gIHZhciBqeWQ4ID0gankyLnJlZFNxcigpO1xuICBqeWQ4ID0ganlkOC5yZWRJQWRkKGp5ZDgpO1xuICBqeWQ4ID0ganlkOC5yZWRJQWRkKGp5ZDgpO1xuICBqeWQ4ID0ganlkOC5yZWRJQWRkKGp5ZDgpO1xuICB2YXIgbnkgPSBjLnJlZE11bCh0MikucmVkSVN1YihqeWQ4KTtcbiAgdmFyIG56ID0gankucmVkQWRkKGp5KS5yZWRNdWwoanopO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUudHJwbCA9IGZ1bmN0aW9uIHRycGwoKSB7XG4gIGlmICghdGhpcy5jdXJ2ZS56ZXJvQSlcbiAgICByZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7XG5cbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0wLmh0bWwjdHJpcGxpbmctdHBsLTIwMDctYmxcbiAgLy8gNU0gKyAxMFMgKyAuLi5cblxuICAvLyBYWCA9IFgxXjJcbiAgdmFyIHh4ID0gdGhpcy54LnJlZFNxcigpO1xuICAvLyBZWSA9IFkxXjJcbiAgdmFyIHl5ID0gdGhpcy55LnJlZFNxcigpO1xuICAvLyBaWiA9IFoxXjJcbiAgdmFyIHp6ID0gdGhpcy56LnJlZFNxcigpO1xuICAvLyBZWVlZID0gWVleMlxuICB2YXIgeXl5eSA9IHl5LnJlZFNxcigpO1xuICAvLyBNID0gMyAqIFhYICsgYSAqIFpaMjsgYSA9IDBcbiAgdmFyIG0gPSB4eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpO1xuICAvLyBNTSA9IE1eMlxuICB2YXIgbW0gPSBtLnJlZFNxcigpO1xuICAvLyBFID0gNiAqICgoWDEgKyBZWSleMiAtIFhYIC0gWVlZWSkgLSBNTVxuICB2YXIgZSA9IHRoaXMueC5yZWRBZGQoeXkpLnJlZFNxcigpLnJlZElTdWIoeHgpLnJlZElTdWIoeXl5eSk7XG4gIGUgPSBlLnJlZElBZGQoZSk7XG4gIGUgPSBlLnJlZEFkZChlKS5yZWRJQWRkKGUpO1xuICBlID0gZS5yZWRJU3ViKG1tKTtcbiAgLy8gRUUgPSBFXjJcbiAgdmFyIGVlID0gZS5yZWRTcXIoKTtcbiAgLy8gVCA9IDE2KllZWVlcbiAgdmFyIHQgPSB5eXl5LnJlZElBZGQoeXl5eSk7XG4gIHQgPSB0LnJlZElBZGQodCk7XG4gIHQgPSB0LnJlZElBZGQodCk7XG4gIHQgPSB0LnJlZElBZGQodCk7XG4gIC8vIFUgPSAoTSArIEUpXjIgLSBNTSAtIEVFIC0gVFxuICB2YXIgdSA9IG0ucmVkSUFkZChlKS5yZWRTcXIoKS5yZWRJU3ViKG1tKS5yZWRJU3ViKGVlKS5yZWRJU3ViKHQpO1xuICAvLyBYMyA9IDQgKiAoWDEgKiBFRSAtIDQgKiBZWSAqIFUpXG4gIHZhciB5eXU0ID0geXkucmVkTXVsKHUpO1xuICB5eXU0ID0geXl1NC5yZWRJQWRkKHl5dTQpO1xuICB5eXU0ID0geXl1NC5yZWRJQWRkKHl5dTQpO1xuICB2YXIgbnggPSB0aGlzLngucmVkTXVsKGVlKS5yZWRJU3ViKHl5dTQpO1xuICBueCA9IG54LnJlZElBZGQobngpO1xuICBueCA9IG54LnJlZElBZGQobngpO1xuICAvLyBZMyA9IDggKiBZMSAqIChVICogKFQgLSBVKSAtIEUgKiBFRSlcbiAgdmFyIG55ID0gdGhpcy55LnJlZE11bCh1LnJlZE11bCh0LnJlZElTdWIodSkpLnJlZElTdWIoZS5yZWRNdWwoZWUpKSk7XG4gIG55ID0gbnkucmVkSUFkZChueSk7XG4gIG55ID0gbnkucmVkSUFkZChueSk7XG4gIG55ID0gbnkucmVkSUFkZChueSk7XG4gIC8vIFozID0gKFoxICsgRSleMiAtIFpaIC0gRUVcbiAgdmFyIG56ID0gdGhpcy56LnJlZEFkZChlKS5yZWRTcXIoKS5yZWRJU3ViKHp6KS5yZWRJU3ViKGVlKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bChrLCBrYmFzZSkge1xuICBrID0gbmV3IEJOKGssIGtiYXNlKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLCBrKTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShwKSB7XG4gIGlmIChwLnR5cGUgPT09ICdhZmZpbmUnKVxuICAgIHJldHVybiB0aGlzLmVxKHAudG9KKCkpO1xuXG4gIGlmICh0aGlzID09PSBwKVxuICAgIHJldHVybiB0cnVlO1xuXG4gIC8vIHgxICogejJeMiA9PSB4MiAqIHoxXjJcbiAgdmFyIHoyID0gdGhpcy56LnJlZFNxcigpO1xuICB2YXIgcHoyID0gcC56LnJlZFNxcigpO1xuICBpZiAodGhpcy54LnJlZE11bChwejIpLnJlZElTdWIocC54LnJlZE11bCh6MikpLmNtcG4oMCkgIT09IDApXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIHkxICogejJeMyA9PSB5MiAqIHoxXjNcbiAgdmFyIHozID0gejIucmVkTXVsKHRoaXMueik7XG4gIHZhciBwejMgPSBwejIucmVkTXVsKHAueik7XG4gIHJldHVybiB0aGlzLnkucmVkTXVsKHB6MykucmVkSVN1YihwLnkucmVkTXVsKHozKSkuY21wbigwKSA9PT0gMDtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuZXFYVG9QID0gZnVuY3Rpb24gZXFYVG9QKHgpIHtcbiAgdmFyIHpzID0gdGhpcy56LnJlZFNxcigpO1xuICB2YXIgcnggPSB4LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoenMpO1xuICBpZiAodGhpcy54LmNtcChyeCkgPT09IDApXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHhjID0geC5jbG9uZSgpO1xuICB2YXIgdCA9IHRoaXMuY3VydmUucmVkTi5yZWRNdWwoenMpO1xuICBmb3IgKDs7KSB7XG4gICAgeGMuaWFkZCh0aGlzLmN1cnZlLm4pO1xuICAgIGlmICh4Yy5jbXAodGhpcy5jdXJ2ZS5wKSA+PSAwKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcngucmVkSUFkZCh0KTtcbiAgICBpZiAodGhpcy54LmNtcChyeCkgPT09IDApXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuICc8RUMgSlBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIEpQb2ludCB4OiAnICsgdGhpcy54LnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHk6ICcgKyB0aGlzLnkudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgejogJyArIHRoaXMuei50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmlzSW5maW5pdHkgPSBmdW5jdGlvbiBpc0luZmluaXR5KCkge1xuICAvLyBYWFggVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCB6ZXJvIGlzIGFsd2F5cyB6ZXJvIGluIHJlZFxuICByZXR1cm4gdGhpcy56LmNtcG4oMCkgPT09IDA7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmVzID0gZXhwb3J0cztcblxudmFyIGhhc2ggPSByZXF1aXJlKCdoYXNoLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi9lbGxpcHRpYycpO1xuXG52YXIgYXNzZXJ0ID0gZWxsaXB0aWMudXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBQcmVzZXRDdXJ2ZShvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnR5cGUgPT09ICdzaG9ydCcpXG4gICAgdGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5jdXJ2ZS5zaG9ydChvcHRpb25zKTtcbiAgZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnZWR3YXJkcycpXG4gICAgdGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5jdXJ2ZS5lZHdhcmRzKG9wdGlvbnMpO1xuICBlbHNlXG4gICAgdGhpcy5jdXJ2ZSA9IG5ldyBlbGxpcHRpYy5jdXJ2ZS5tb250KG9wdGlvbnMpO1xuICB0aGlzLmcgPSB0aGlzLmN1cnZlLmc7XG4gIHRoaXMubiA9IHRoaXMuY3VydmUubjtcbiAgdGhpcy5oYXNoID0gb3B0aW9ucy5oYXNoO1xuXG4gIGFzc2VydCh0aGlzLmcudmFsaWRhdGUoKSwgJ0ludmFsaWQgY3VydmUnKTtcbiAgYXNzZXJ0KHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksICdJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTycpO1xufVxuY3VydmVzLlByZXNldEN1cnZlID0gUHJlc2V0Q3VydmU7XG5cbmZ1bmN0aW9uIGRlZmluZUN1cnZlKG5hbWUsIG9wdGlvbnMpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN1cnZlcywgbmFtZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY3VydmUgPSBuZXcgUHJlc2V0Q3VydmUob3B0aW9ucyk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3VydmVzLCBuYW1lLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGN1cnZlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjdXJ2ZTtcbiAgICB9XG4gIH0pO1xufVxuXG5kZWZpbmVDdXJ2ZSgncDE5MicsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6ICdwMTkyJyxcbiAgcDogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmJyxcbiAgYTogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjJyxcbiAgYjogJzY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxJyxcbiAgbjogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyJyxcbiAgICAnMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDIyNCcsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6ICdwMjI0JyxcbiAgcDogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxJyxcbiAgYTogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlJyxcbiAgYjogJ2I0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0JyxcbiAgbjogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJ2I3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxJyxcbiAgICAnYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDI1NicsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6IG51bGwsXG4gIHA6ICdmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicsXG4gIGE6ICdmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYycsXG4gIGI6ICc1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YicsXG4gIG46ICdmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MScsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICc2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NicsXG4gICAgJzRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1J1xuICBdXG59KTtcblxuZGVmaW5lQ3VydmUoJ3AzODQnLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiBudWxsLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZicsXG4gIGE6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjJyxcbiAgYjogJ2IzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmICcgK1xuICAgICAnNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgJyArXG4gICAgICdmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MycsXG4gIGhhc2g6IGhhc2guc2hhMzg0LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICdhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCAnICtcbiAgICAnNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjcnLFxuICAgICczNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAnICtcbiAgICAnMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDUyMScsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6IG51bGwsXG4gIHA6ICcwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYnLFxuICBhOiAnMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjJyxcbiAgYjogJzAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViICcgK1xuICAgICAnOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgJyArXG4gICAgICczYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCcsXG4gIG46ICcwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4ICcgK1xuICAgICAnZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDknLFxuICBoYXNoOiBoYXNoLnNoYTUxMixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgJyArXG4gICAgJzA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3ICcgK1xuICAgICdhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NicsXG4gICAgJzAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5ICcgK1xuICAgICc1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAnICtcbiAgICAnM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgnY3VydmUyNTUxOScsIHtcbiAgdHlwZTogJ21vbnQnLFxuICBwcmltZTogJ3AyNTUxOScsXG4gIHA6ICc3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkJyxcbiAgYTogJzc2ZDA2JyxcbiAgYjogJzEnLFxuICBuOiAnMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCcsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICc5J1xuICBdXG59KTtcblxuZGVmaW5lQ3VydmUoJ2VkMjU1MTknLCB7XG4gIHR5cGU6ICdlZHdhcmRzJyxcbiAgcHJpbWU6ICdwMjU1MTknLFxuICBwOiAnN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCcsXG4gIGE6ICctMScsXG4gIGM6ICcxJyxcbiAgLy8gLTEyMTY2NSAqICgxMjE2NjZeKC0xKSkgKG1vZCBQKVxuICBkOiAnNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMycsXG4gIG46ICcxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEnLFxuXG4gICAgLy8gNC81XG4gICAgJzY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgnXG4gIF1cbn0pO1xuXG52YXIgcHJlO1xudHJ5IHtcbiAgcHJlID0gcmVxdWlyZSgnLi9wcmVjb21wdXRlZC9zZWNwMjU2azEnKTtcbn0gY2F0Y2ggKGUpIHtcbiAgcHJlID0gdW5kZWZpbmVkO1xufVxuXG5kZWZpbmVDdXJ2ZSgnc2VjcDI1NmsxJywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogJ2syNTYnLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYnLFxuICBhOiAnMCcsXG4gIGI6ICc3JyxcbiAgbjogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxJyxcbiAgaDogJzEnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcblxuICAvLyBQcmVjb21wdXRlZCBlbmRvbW9ycGhpc21cbiAgYmV0YTogJzdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUnLFxuICBsYW1iZGE6ICc1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyJyxcbiAgYmFzaXM6IFtcbiAgICB7XG4gICAgICBhOiAnMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUnLFxuICAgICAgYjogJy1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMydcbiAgICB9LFxuICAgIHtcbiAgICAgIGE6ICcxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgnLFxuICAgICAgYjogJzMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1J1xuICAgIH1cbiAgXSxcblxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICc3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4JyxcbiAgICAnNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCcsXG4gICAgcHJlXG4gIF1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIEhtYWNEUkJHID0gcmVxdWlyZSgnaG1hYy1kcmJnJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG52YXIgS2V5UGFpciA9IHJlcXVpcmUoJy4va2V5Jyk7XG52YXIgU2lnbmF0dXJlID0gcmVxdWlyZSgnLi9zaWduYXR1cmUnKTtcblxuZnVuY3Rpb24gRUMob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRUMpKVxuICAgIHJldHVybiBuZXcgRUMob3B0aW9ucyk7XG5cbiAgLy8gU2hvcnRjdXQgYGVsbGlwdGljLmVjKGN1cnZlLW5hbWUpYFxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgYXNzZXJ0KGVsbGlwdGljLmN1cnZlcy5oYXNPd25Qcm9wZXJ0eShvcHRpb25zKSwgJ1Vua25vd24gY3VydmUgJyArIG9wdGlvbnMpO1xuXG4gICAgb3B0aW9ucyA9IGVsbGlwdGljLmN1cnZlc1tvcHRpb25zXTtcbiAgfVxuXG4gIC8vIFNob3J0Y3V0IGZvciBgZWxsaXB0aWMuZWMoZWxsaXB0aWMuY3VydmVzLmN1cnZlTmFtZSlgXG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgZWxsaXB0aWMuY3VydmVzLlByZXNldEN1cnZlKVxuICAgIG9wdGlvbnMgPSB7IGN1cnZlOiBvcHRpb25zIH07XG5cbiAgdGhpcy5jdXJ2ZSA9IG9wdGlvbnMuY3VydmUuY3VydmU7XG4gIHRoaXMubiA9IHRoaXMuY3VydmUubjtcbiAgdGhpcy5uaCA9IHRoaXMubi51c2hybigxKTtcbiAgdGhpcy5nID0gdGhpcy5jdXJ2ZS5nO1xuXG4gIC8vIFBvaW50IG9uIGN1cnZlXG4gIHRoaXMuZyA9IG9wdGlvbnMuY3VydmUuZztcbiAgdGhpcy5nLnByZWNvbXB1dGUob3B0aW9ucy5jdXJ2ZS5uLmJpdExlbmd0aCgpICsgMSk7XG5cbiAgLy8gSGFzaCBmb3IgZnVuY3Rpb24gZm9yIERSQkdcbiAgdGhpcy5oYXNoID0gb3B0aW9ucy5oYXNoIHx8IG9wdGlvbnMuY3VydmUuaGFzaDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRUM7XG5cbkVDLnByb3RvdHlwZS5rZXlQYWlyID0gZnVuY3Rpb24ga2V5UGFpcihvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgS2V5UGFpcih0aGlzLCBvcHRpb25zKTtcbn07XG5cbkVDLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZSA9IGZ1bmN0aW9uIGtleUZyb21Qcml2YXRlKHByaXYsIGVuYykge1xuICByZXR1cm4gS2V5UGFpci5mcm9tUHJpdmF0ZSh0aGlzLCBwcml2LCBlbmMpO1xufTtcblxuRUMucHJvdG90eXBlLmtleUZyb21QdWJsaWMgPSBmdW5jdGlvbiBrZXlGcm9tUHVibGljKHB1YiwgZW5jKSB7XG4gIHJldHVybiBLZXlQYWlyLmZyb21QdWJsaWModGhpcywgcHViLCBlbmMpO1xufTtcblxuRUMucHJvdG90eXBlLmdlbktleVBhaXIgPSBmdW5jdGlvbiBnZW5LZXlQYWlyKG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKVxuICAgIG9wdGlvbnMgPSB7fTtcblxuICAvLyBJbnN0YW50aWF0ZSBIbWFjX0RSQkdcbiAgdmFyIGRyYmcgPSBuZXcgSG1hY0RSQkcoe1xuICAgIGhhc2g6IHRoaXMuaGFzaCxcbiAgICBwZXJzOiBvcHRpb25zLnBlcnMsXG4gICAgcGVyc0VuYzogb3B0aW9ucy5wZXJzRW5jIHx8ICd1dGY4JyxcbiAgICBlbnRyb3B5OiBvcHRpb25zLmVudHJvcHkgfHwgZWxsaXB0aWMucmFuZCh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxcbiAgICBlbnRyb3B5RW5jOiBvcHRpb25zLmVudHJvcHkgJiYgb3B0aW9ucy5lbnRyb3B5RW5jIHx8ICd1dGY4JyxcbiAgICBub25jZTogdGhpcy5uLnRvQXJyYXkoKVxuICB9KTtcblxuICB2YXIgYnl0ZXMgPSB0aGlzLm4uYnl0ZUxlbmd0aCgpO1xuICB2YXIgbnMyID0gdGhpcy5uLnN1YihuZXcgQk4oMikpO1xuICBkbyB7XG4gICAgdmFyIHByaXYgPSBuZXcgQk4oZHJiZy5nZW5lcmF0ZShieXRlcykpO1xuICAgIGlmIChwcml2LmNtcChuczIpID4gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgcHJpdi5pYWRkbigxKTtcbiAgICByZXR1cm4gdGhpcy5rZXlGcm9tUHJpdmF0ZShwcml2KTtcbiAgfSB3aGlsZSAodHJ1ZSk7XG59O1xuXG5FQy5wcm90b3R5cGUuX3RydW5jYXRlVG9OID0gZnVuY3Rpb24gdHJ1bmNhdGVUb04obXNnLCB0cnVuY09ubHkpIHtcbiAgdmFyIGRlbHRhID0gbXNnLmJ5dGVMZW5ndGgoKSAqIDggLSB0aGlzLm4uYml0TGVuZ3RoKCk7XG4gIGlmIChkZWx0YSA+IDApXG4gICAgbXNnID0gbXNnLnVzaHJuKGRlbHRhKTtcbiAgaWYgKCF0cnVuY09ubHkgJiYgbXNnLmNtcCh0aGlzLm4pID49IDApXG4gICAgcmV0dXJuIG1zZy5zdWIodGhpcy5uKTtcbiAgZWxzZVxuICAgIHJldHVybiBtc2c7XG59O1xuXG5FQy5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24obXNnLCBrZXksIGVuYywgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIGVuYyA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0gZW5jO1xuICAgIGVuYyA9IG51bGw7XG4gIH1cbiAgaWYgKCFvcHRpb25zKVxuICAgIG9wdGlvbnMgPSB7fTtcblxuICBrZXkgPSB0aGlzLmtleUZyb21Qcml2YXRlKGtleSwgZW5jKTtcbiAgbXNnID0gdGhpcy5fdHJ1bmNhdGVUb04obmV3IEJOKG1zZywgMTYpKTtcblxuICAvLyBaZXJvLWV4dGVuZCBrZXkgdG8gcHJvdmlkZSBlbm91Z2ggZW50cm9weVxuICB2YXIgYnl0ZXMgPSB0aGlzLm4uYnl0ZUxlbmd0aCgpO1xuICB2YXIgYmtleSA9IGtleS5nZXRQcml2YXRlKCkudG9BcnJheSgnYmUnLCBieXRlcyk7XG5cbiAgLy8gWmVyby1leHRlbmQgbm9uY2UgdG8gaGF2ZSB0aGUgc2FtZSBieXRlIHNpemUgYXMgTlxuICB2YXIgbm9uY2UgPSBtc2cudG9BcnJheSgnYmUnLCBieXRlcyk7XG5cbiAgLy8gSW5zdGFudGlhdGUgSG1hY19EUkJHXG4gIHZhciBkcmJnID0gbmV3IEhtYWNEUkJHKHtcbiAgICBoYXNoOiB0aGlzLmhhc2gsXG4gICAgZW50cm9weTogYmtleSxcbiAgICBub25jZTogbm9uY2UsXG4gICAgcGVyczogb3B0aW9ucy5wZXJzLFxuICAgIHBlcnNFbmM6IG9wdGlvbnMucGVyc0VuYyB8fCAndXRmOCdcbiAgfSk7XG5cbiAgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGdlbmVyYXRlXG4gIHZhciBuczEgPSB0aGlzLm4uc3ViKG5ldyBCTigxKSk7XG5cbiAgZm9yICh2YXIgaXRlciA9IDA7IHRydWU7IGl0ZXIrKykge1xuICAgIHZhciBrID0gb3B0aW9ucy5rID9cbiAgICAgICAgb3B0aW9ucy5rKGl0ZXIpIDpcbiAgICAgICAgbmV3IEJOKGRyYmcuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO1xuICAgIGsgPSB0aGlzLl90cnVuY2F0ZVRvTihrLCB0cnVlKTtcbiAgICBpZiAoay5jbXBuKDEpIDw9IDAgfHwgay5jbXAobnMxKSA+PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICB2YXIga3AgPSB0aGlzLmcubXVsKGspO1xuICAgIGlmIChrcC5pc0luZmluaXR5KCkpXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciBrcFggPSBrcC5nZXRYKCk7XG4gICAgdmFyIHIgPSBrcFgudW1vZCh0aGlzLm4pO1xuICAgIGlmIChyLmNtcG4oMCkgPT09IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciBzID0gay5pbnZtKHRoaXMubikubXVsKHIubXVsKGtleS5nZXRQcml2YXRlKCkpLmlhZGQobXNnKSk7XG4gICAgcyA9IHMudW1vZCh0aGlzLm4pO1xuICAgIGlmIChzLmNtcG4oMCkgPT09IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciByZWNvdmVyeVBhcmFtID0gKGtwLmdldFkoKS5pc09kZCgpID8gMSA6IDApIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChrcFguY21wKHIpICE9PSAwID8gMiA6IDApO1xuXG4gICAgLy8gVXNlIGNvbXBsZW1lbnQgb2YgYHNgLCBpZiBpdCBpcyA+IGBuIC8gMmBcbiAgICBpZiAob3B0aW9ucy5jYW5vbmljYWwgJiYgcy5jbXAodGhpcy5uaCkgPiAwKSB7XG4gICAgICBzID0gdGhpcy5uLnN1YihzKTtcbiAgICAgIHJlY292ZXJ5UGFyYW0gXj0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNpZ25hdHVyZSh7IHI6IHIsIHM6IHMsIHJlY292ZXJ5UGFyYW06IHJlY292ZXJ5UGFyYW0gfSk7XG4gIH1cbn07XG5cbkVDLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobXNnLCBzaWduYXR1cmUsIGtleSwgZW5jKSB7XG4gIG1zZyA9IHRoaXMuX3RydW5jYXRlVG9OKG5ldyBCTihtc2csIDE2KSk7XG4gIGtleSA9IHRoaXMua2V5RnJvbVB1YmxpYyhrZXksIGVuYyk7XG4gIHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoc2lnbmF0dXJlLCAnaGV4Jyk7XG5cbiAgLy8gUGVyZm9ybSBwcmltaXRpdmUgdmFsdWVzIHZhbGlkYXRpb25cbiAgdmFyIHIgPSBzaWduYXR1cmUucjtcbiAgdmFyIHMgPSBzaWduYXR1cmUucztcbiAgaWYgKHIuY21wbigxKSA8IDAgfHwgci5jbXAodGhpcy5uKSA+PSAwKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKHMuY21wbigxKSA8IDAgfHwgcy5jbXAodGhpcy5uKSA+PSAwKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBWYWxpZGF0ZSBzaWduYXR1cmVcbiAgdmFyIHNpbnYgPSBzLmludm0odGhpcy5uKTtcbiAgdmFyIHUxID0gc2ludi5tdWwobXNnKS51bW9kKHRoaXMubik7XG4gIHZhciB1MiA9IHNpbnYubXVsKHIpLnVtb2QodGhpcy5uKTtcblxuICBpZiAoIXRoaXMuY3VydmUuX21heHdlbGxUcmljaykge1xuICAgIHZhciBwID0gdGhpcy5nLm11bEFkZCh1MSwga2V5LmdldFB1YmxpYygpLCB1Mik7XG4gICAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHAuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAocikgPT09IDA7XG4gIH1cblxuICAvLyBOT1RFOiBHcmVnIE1heHdlbGwncyB0cmljaywgaW5zcGlyZWQgYnk6XG4gIC8vIGh0dHBzOi8vZ2l0LmlvL3ZhZDNLXG5cbiAgdmFyIHAgPSB0aGlzLmcuam11bEFkZCh1MSwga2V5LmdldFB1YmxpYygpLCB1Mik7XG4gIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gQ29tcGFyZSBgcC54YCBvZiBKYWNvYmlhbiBwb2ludCB3aXRoIGByYCxcbiAgLy8gdGhpcyB3aWxsIGRvIGBwLnggPT0gciAqIHAuel4yYCBpbnN0ZWFkIG9mIG11bHRpcGx5aW5nIGBwLnhgIGJ5IHRoZVxuICAvLyBpbnZlcnNlIG9mIGBwLnpeMmBcbiAgcmV0dXJuIHAuZXFYVG9QKHIpO1xufTtcblxuRUMucHJvdG90eXBlLnJlY292ZXJQdWJLZXkgPSBmdW5jdGlvbihtc2csIHNpZ25hdHVyZSwgaiwgZW5jKSB7XG4gIGFzc2VydCgoMyAmIGopID09PSBqLCAnVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cycpO1xuICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKHNpZ25hdHVyZSwgZW5jKTtcblxuICB2YXIgbiA9IHRoaXMubjtcbiAgdmFyIGUgPSBuZXcgQk4obXNnKTtcbiAgdmFyIHIgPSBzaWduYXR1cmUucjtcbiAgdmFyIHMgPSBzaWduYXR1cmUucztcblxuICAvLyBBIHNldCBMU0Igc2lnbmlmaWVzIHRoYXQgdGhlIHktY29vcmRpbmF0ZSBpcyBvZGRcbiAgdmFyIGlzWU9kZCA9IGogJiAxO1xuICB2YXIgaXNTZWNvbmRLZXkgPSBqID4+IDE7XG4gIGlmIChyLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKSA+PSAwICYmIGlzU2Vjb25kS2V5KVxuICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlJyk7XG5cbiAgLy8gMS4xLiBMZXQgeCA9IHIgKyBqbi5cbiAgaWYgKGlzU2Vjb25kS2V5KVxuICAgIHIgPSB0aGlzLmN1cnZlLnBvaW50RnJvbVgoci5hZGQodGhpcy5jdXJ2ZS5uKSwgaXNZT2RkKTtcbiAgZWxzZVxuICAgIHIgPSB0aGlzLmN1cnZlLnBvaW50RnJvbVgociwgaXNZT2RkKTtcblxuICB2YXIgckludiA9IHNpZ25hdHVyZS5yLmludm0obik7XG4gIHZhciBzMSA9IG4uc3ViKGUpLm11bChySW52KS51bW9kKG4pO1xuICB2YXIgczIgPSBzLm11bChySW52KS51bW9kKG4pO1xuXG4gIC8vIDEuNi4xIENvbXB1dGUgUSA9IHJeLTEgKHNSIC0gIGVHKVxuICAvLyAgICAgICAgICAgICAgIFEgPSByXi0xIChzUiArIC1lRylcbiAgcmV0dXJuIHRoaXMuZy5tdWxBZGQoczEsIHIsIHMyKTtcbn07XG5cbkVDLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtID0gZnVuY3Rpb24oZSwgc2lnbmF0dXJlLCBRLCBlbmMpIHtcbiAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShzaWduYXR1cmUsIGVuYyk7XG4gIGlmIChzaWduYXR1cmUucmVjb3ZlcnlQYXJhbSAhPT0gbnVsbClcbiAgICByZXR1cm4gc2lnbmF0dXJlLnJlY292ZXJ5UGFyYW07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICB2YXIgUXByaW1lO1xuICAgIHRyeSB7XG4gICAgICBRcHJpbWUgPSB0aGlzLnJlY292ZXJQdWJLZXkoZSwgc2lnbmF0dXJlLCBpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoUXByaW1lLmVxKFEpKVxuICAgICAgcmV0dXJuIGk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBLZXlQYWlyKGVjLCBvcHRpb25zKSB7XG4gIHRoaXMuZWMgPSBlYztcbiAgdGhpcy5wcml2ID0gbnVsbDtcbiAgdGhpcy5wdWIgPSBudWxsO1xuXG4gIC8vIEtleVBhaXIoZWMsIHsgcHJpdjogLi4uLCBwdWI6IC4uLiB9KVxuICBpZiAob3B0aW9ucy5wcml2KVxuICAgIHRoaXMuX2ltcG9ydFByaXZhdGUob3B0aW9ucy5wcml2LCBvcHRpb25zLnByaXZFbmMpO1xuICBpZiAob3B0aW9ucy5wdWIpXG4gICAgdGhpcy5faW1wb3J0UHVibGljKG9wdGlvbnMucHViLCBvcHRpb25zLnB1YkVuYyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEtleVBhaXI7XG5cbktleVBhaXIuZnJvbVB1YmxpYyA9IGZ1bmN0aW9uIGZyb21QdWJsaWMoZWMsIHB1YiwgZW5jKSB7XG4gIGlmIChwdWIgaW5zdGFuY2VvZiBLZXlQYWlyKVxuICAgIHJldHVybiBwdWI7XG5cbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVjLCB7XG4gICAgcHViOiBwdWIsXG4gICAgcHViRW5jOiBlbmNcbiAgfSk7XG59O1xuXG5LZXlQYWlyLmZyb21Qcml2YXRlID0gZnVuY3Rpb24gZnJvbVByaXZhdGUoZWMsIHByaXYsIGVuYykge1xuICBpZiAocHJpdiBpbnN0YW5jZW9mIEtleVBhaXIpXG4gICAgcmV0dXJuIHByaXY7XG5cbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVjLCB7XG4gICAgcHJpdjogcHJpdixcbiAgICBwcml2RW5jOiBlbmNcbiAgfSk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xuICB2YXIgcHViID0gdGhpcy5nZXRQdWJsaWMoKTtcblxuICBpZiAocHViLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4geyByZXN1bHQ6IGZhbHNlLCByZWFzb246ICdJbnZhbGlkIHB1YmxpYyBrZXknIH07XG4gIGlmICghcHViLnZhbGlkYXRlKCkpXG4gICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uOiAnUHVibGljIGtleSBpcyBub3QgYSBwb2ludCcgfTtcbiAgaWYgKCFwdWIubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbjogJ1B1YmxpYyBrZXkgKiBOICE9IE8nIH07XG5cbiAgcmV0dXJuIHsgcmVzdWx0OiB0cnVlLCByZWFzb246IG51bGwgfTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFB1YmxpYyA9IGZ1bmN0aW9uIGdldFB1YmxpYyhjb21wYWN0LCBlbmMpIHtcbiAgLy8gY29tcGFjdCBpcyBvcHRpb25hbCBhcmd1bWVudFxuICBpZiAodHlwZW9mIGNvbXBhY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jID0gY29tcGFjdDtcbiAgICBjb21wYWN0ID0gbnVsbDtcbiAgfVxuXG4gIGlmICghdGhpcy5wdWIpXG4gICAgdGhpcy5wdWIgPSB0aGlzLmVjLmcubXVsKHRoaXMucHJpdik7XG5cbiAgaWYgKCFlbmMpXG4gICAgcmV0dXJuIHRoaXMucHViO1xuXG4gIHJldHVybiB0aGlzLnB1Yi5lbmNvZGUoZW5jLCBjb21wYWN0KTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFByaXZhdGUgPSBmdW5jdGlvbiBnZXRQcml2YXRlKGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdGhpcy5wcml2LnRvU3RyaW5nKDE2LCAyKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLnByaXY7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZSA9IGZ1bmN0aW9uIF9pbXBvcnRQcml2YXRlKGtleSwgZW5jKSB7XG4gIHRoaXMucHJpdiA9IG5ldyBCTihrZXksIGVuYyB8fCAxNik7XG5cbiAgLy8gRW5zdXJlIHRoYXQgdGhlIHByaXYgd29uJ3QgYmUgYmlnZ2VyIHRoYW4gbiwgb3RoZXJ3aXNlIHdlIG1heSBmYWlsXG4gIC8vIGluIGZpeGVkIG11bHRpcGxpY2F0aW9uIG1ldGhvZFxuICB0aGlzLnByaXYgPSB0aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYyA9IGZ1bmN0aW9uIF9pbXBvcnRQdWJsaWMoa2V5LCBlbmMpIHtcbiAgaWYgKGtleS54IHx8IGtleS55KSB7XG4gICAgLy8gTW9udGdvbWVyeSBwb2ludHMgb25seSBoYXZlIGFuIGB4YCBjb29yZGluYXRlLlxuICAgIC8vIFdlaWVyc3RyYXNzL0Vkd2FyZHMgcG9pbnRzIG9uIHRoZSBvdGhlciBoYW5kIGhhdmUgYm90aCBgeGAgYW5kXG4gICAgLy8gYHlgIGNvb3JkaW5hdGVzLlxuICAgIGlmICh0aGlzLmVjLmN1cnZlLnR5cGUgPT09ICdtb250Jykge1xuICAgICAgYXNzZXJ0KGtleS54LCAnTmVlZCB4IGNvb3JkaW5hdGUnKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWMuY3VydmUudHlwZSA9PT0gJ3Nob3J0JyB8fFxuICAgICAgICAgICAgICAgdGhpcy5lYy5jdXJ2ZS50eXBlID09PSAnZWR3YXJkcycpIHtcbiAgICAgIGFzc2VydChrZXkueCAmJiBrZXkueSwgJ05lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUnKTtcbiAgICB9XG4gICAgdGhpcy5wdWIgPSB0aGlzLmVjLmN1cnZlLnBvaW50KGtleS54LCBrZXkueSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMucHViID0gdGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChrZXksIGVuYyk7XG59O1xuXG4vLyBFQ0RIXG5LZXlQYWlyLnByb3RvdHlwZS5kZXJpdmUgPSBmdW5jdGlvbiBkZXJpdmUocHViKSB7XG4gIHJldHVybiBwdWIubXVsKHRoaXMucHJpdikuZ2V0WCgpO1xufTtcblxuLy8gRUNEU0FcbktleVBhaXIucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1zZywgZW5jLCBvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLmVjLnNpZ24obXNnLCB0aGlzLCBlbmMsIG9wdGlvbnMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1zZywgc2lnbmF0dXJlKSB7XG4gIHJldHVybiB0aGlzLmVjLnZlcmlmeShtc2csIHNpZ25hdHVyZSwgdGhpcyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgcmV0dXJuICc8S2V5IHByaXY6ICcgKyAodGhpcy5wcml2ICYmIHRoaXMucHJpdi50b1N0cmluZygxNiwgMikpICtcbiAgICAgICAgICcgcHViOiAnICsgKHRoaXMucHViICYmIHRoaXMucHViLmluc3BlY3QoKSkgKyAnID4nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcblxudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gU2lnbmF0dXJlKG9wdGlvbnMsIGVuYykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIFNpZ25hdHVyZSlcbiAgICByZXR1cm4gb3B0aW9ucztcblxuICBpZiAodGhpcy5faW1wb3J0REVSKG9wdGlvbnMsIGVuYykpXG4gICAgcmV0dXJuO1xuXG4gIGFzc2VydChvcHRpb25zLnIgJiYgb3B0aW9ucy5zLCAnU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzJyk7XG4gIHRoaXMuciA9IG5ldyBCTihvcHRpb25zLnIsIDE2KTtcbiAgdGhpcy5zID0gbmV3IEJOKG9wdGlvbnMucywgMTYpO1xuICBpZiAob3B0aW9ucy5yZWNvdmVyeVBhcmFtID09PSB1bmRlZmluZWQpXG4gICAgdGhpcy5yZWNvdmVyeVBhcmFtID0gbnVsbDtcbiAgZWxzZVxuICAgIHRoaXMucmVjb3ZlcnlQYXJhbSA9IG9wdGlvbnMucmVjb3ZlcnlQYXJhbTtcbn1cbm1vZHVsZS5leHBvcnRzID0gU2lnbmF0dXJlO1xuXG5mdW5jdGlvbiBQb3NpdGlvbigpIHtcbiAgdGhpcy5wbGFjZSA9IDA7XG59XG5cbmZ1bmN0aW9uIGdldExlbmd0aChidWYsIHApIHtcbiAgdmFyIGluaXRpYWwgPSBidWZbcC5wbGFjZSsrXTtcbiAgaWYgKCEoaW5pdGlhbCAmIDB4ODApKSB7XG4gICAgcmV0dXJuIGluaXRpYWw7XG4gIH1cbiAgdmFyIG9jdGV0TGVuID0gaW5pdGlhbCAmIDB4ZjtcbiAgdmFyIHZhbCA9IDA7XG4gIGZvciAodmFyIGkgPSAwLCBvZmYgPSBwLnBsYWNlOyBpIDwgb2N0ZXRMZW47IGkrKywgb2ZmKyspIHtcbiAgICB2YWwgPDw9IDg7XG4gICAgdmFsIHw9IGJ1ZltvZmZdO1xuICB9XG4gIHAucGxhY2UgPSBvZmY7XG4gIHJldHVybiB2YWw7XG59XG5cbmZ1bmN0aW9uIHJtUGFkZGluZyhidWYpIHtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aCAtIDE7XG4gIHdoaWxlICghYnVmW2ldICYmICEoYnVmW2kgKyAxXSAmIDB4ODApICYmIGkgPCBsZW4pIHtcbiAgICBpKys7XG4gIH1cbiAgaWYgKGkgPT09IDApIHtcbiAgICByZXR1cm4gYnVmO1xuICB9XG4gIHJldHVybiBidWYuc2xpY2UoaSk7XG59XG5cblNpZ25hdHVyZS5wcm90b3R5cGUuX2ltcG9ydERFUiA9IGZ1bmN0aW9uIF9pbXBvcnRERVIoZGF0YSwgZW5jKSB7XG4gIGRhdGEgPSB1dGlscy50b0FycmF5KGRhdGEsIGVuYyk7XG4gIHZhciBwID0gbmV3IFBvc2l0aW9uKCk7XG4gIGlmIChkYXRhW3AucGxhY2UrK10gIT09IDB4MzApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxlbiA9IGdldExlbmd0aChkYXRhLCBwKTtcbiAgaWYgKChsZW4gKyBwLnBsYWNlKSAhPT0gZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGRhdGFbcC5wbGFjZSsrXSAhPT0gMHgwMikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcmxlbiA9IGdldExlbmd0aChkYXRhLCBwKTtcbiAgdmFyIHIgPSBkYXRhLnNsaWNlKHAucGxhY2UsIHJsZW4gKyBwLnBsYWNlKTtcbiAgcC5wbGFjZSArPSBybGVuO1xuICBpZiAoZGF0YVtwLnBsYWNlKytdICE9PSAweDAyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBzbGVuID0gZ2V0TGVuZ3RoKGRhdGEsIHApO1xuICBpZiAoZGF0YS5sZW5ndGggIT09IHNsZW4gKyBwLnBsYWNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBzID0gZGF0YS5zbGljZShwLnBsYWNlLCBzbGVuICsgcC5wbGFjZSk7XG4gIGlmIChyWzBdID09PSAwICYmIChyWzFdICYgMHg4MCkpIHtcbiAgICByID0gci5zbGljZSgxKTtcbiAgfVxuICBpZiAoc1swXSA9PT0gMCAmJiAoc1sxXSAmIDB4ODApKSB7XG4gICAgcyA9IHMuc2xpY2UoMSk7XG4gIH1cblxuICB0aGlzLnIgPSBuZXcgQk4ocik7XG4gIHRoaXMucyA9IG5ldyBCTihzKTtcbiAgdGhpcy5yZWNvdmVyeVBhcmFtID0gbnVsbDtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdExlbmd0aChhcnIsIGxlbikge1xuICBpZiAobGVuIDwgMHg4MCkge1xuICAgIGFyci5wdXNoKGxlbik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBvY3RldHMgPSAxICsgKE1hdGgubG9nKGxlbikgLyBNYXRoLkxOMiA+Pj4gMyk7XG4gIGFyci5wdXNoKG9jdGV0cyB8IDB4ODApO1xuICB3aGlsZSAoLS1vY3RldHMpIHtcbiAgICBhcnIucHVzaCgobGVuID4+PiAob2N0ZXRzIDw8IDMpKSAmIDB4ZmYpO1xuICB9XG4gIGFyci5wdXNoKGxlbik7XG59XG5cblNpZ25hdHVyZS5wcm90b3R5cGUudG9ERVIgPSBmdW5jdGlvbiB0b0RFUihlbmMpIHtcbiAgdmFyIHIgPSB0aGlzLnIudG9BcnJheSgpO1xuICB2YXIgcyA9IHRoaXMucy50b0FycmF5KCk7XG5cbiAgLy8gUGFkIHZhbHVlc1xuICBpZiAoclswXSAmIDB4ODApXG4gICAgciA9IFsgMCBdLmNvbmNhdChyKTtcbiAgLy8gUGFkIHZhbHVlc1xuICBpZiAoc1swXSAmIDB4ODApXG4gICAgcyA9IFsgMCBdLmNvbmNhdChzKTtcblxuICByID0gcm1QYWRkaW5nKHIpO1xuICBzID0gcm1QYWRkaW5nKHMpO1xuXG4gIHdoaWxlICghc1swXSAmJiAhKHNbMV0gJiAweDgwKSkge1xuICAgIHMgPSBzLnNsaWNlKDEpO1xuICB9XG4gIHZhciBhcnIgPSBbIDB4MDIgXTtcbiAgY29uc3RydWN0TGVuZ3RoKGFyciwgci5sZW5ndGgpO1xuICBhcnIgPSBhcnIuY29uY2F0KHIpO1xuICBhcnIucHVzaCgweDAyKTtcbiAgY29uc3RydWN0TGVuZ3RoKGFyciwgcy5sZW5ndGgpO1xuICB2YXIgYmFja0hhbGYgPSBhcnIuY29uY2F0KHMpO1xuICB2YXIgcmVzID0gWyAweDMwIF07XG4gIGNvbnN0cnVjdExlbmd0aChyZXMsIGJhY2tIYWxmLmxlbmd0aCk7XG4gIHJlcyA9IHJlcy5jb25jYXQoYmFja0hhbGYpO1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHJlcywgZW5jKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNoID0gcmVxdWlyZSgnaGFzaC5qcycpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcbnZhciBLZXlQYWlyID0gcmVxdWlyZSgnLi9rZXknKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuL3NpZ25hdHVyZScpO1xuXG5mdW5jdGlvbiBFRERTQShjdXJ2ZSkge1xuICBhc3NlcnQoY3VydmUgPT09ICdlZDI1NTE5JywgJ29ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXInKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRUREU0EpKVxuICAgIHJldHVybiBuZXcgRUREU0EoY3VydmUpO1xuXG4gIHZhciBjdXJ2ZSA9IGVsbGlwdGljLmN1cnZlc1tjdXJ2ZV0uY3VydmU7XG4gIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgdGhpcy5nID0gY3VydmUuZztcbiAgdGhpcy5nLnByZWNvbXB1dGUoY3VydmUubi5iaXRMZW5ndGgoKSArIDEpO1xuXG4gIHRoaXMucG9pbnRDbGFzcyA9IGN1cnZlLnBvaW50KCkuY29uc3RydWN0b3I7XG4gIHRoaXMuZW5jb2RpbmdMZW5ndGggPSBNYXRoLmNlaWwoY3VydmUubi5iaXRMZW5ndGgoKSAvIDgpO1xuICB0aGlzLmhhc2ggPSBoYXNoLnNoYTUxMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBFRERTQTtcblxuLyoqXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfSBtZXNzYWdlIC0gbWVzc2FnZSBieXRlc1xuKiBAcGFyYW0ge0FycmF5fFN0cmluZ3xLZXlQYWlyfSBzZWNyZXQgLSBzZWNyZXQgYnl0ZXMgb3IgYSBrZXlwYWlyXG4qIEByZXR1cm5zIHtTaWduYXR1cmV9IC0gc2lnbmF0dXJlXG4qL1xuRUREU0EucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduKG1lc3NhZ2UsIHNlY3JldCkge1xuICBtZXNzYWdlID0gcGFyc2VCeXRlcyhtZXNzYWdlKTtcbiAgdmFyIGtleSA9IHRoaXMua2V5RnJvbVNlY3JldChzZWNyZXQpO1xuICB2YXIgciA9IHRoaXMuaGFzaEludChrZXkubWVzc2FnZVByZWZpeCgpLCBtZXNzYWdlKTtcbiAgdmFyIFIgPSB0aGlzLmcubXVsKHIpO1xuICB2YXIgUmVuY29kZWQgPSB0aGlzLmVuY29kZVBvaW50KFIpO1xuICB2YXIgc18gPSB0aGlzLmhhc2hJbnQoUmVuY29kZWQsIGtleS5wdWJCeXRlcygpLCBtZXNzYWdlKVxuICAgICAgICAgICAgICAgLm11bChrZXkucHJpdigpKTtcbiAgdmFyIFMgPSByLmFkZChzXykudW1vZCh0aGlzLmN1cnZlLm4pO1xuICByZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHsgUjogUiwgUzogUywgUmVuY29kZWQ6IFJlbmNvZGVkIH0pO1xufTtcblxuLyoqXG4qIEBwYXJhbSB7QXJyYXl9IG1lc3NhZ2UgLSBtZXNzYWdlIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfFNpZ25hdHVyZX0gc2lnIC0gc2lnIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfFBvaW50fEtleVBhaXJ9IHB1YiAtIHB1YmxpYyBrZXlcbiogQHJldHVybnMge0Jvb2xlYW59IC0gdHJ1ZSBpZiBwdWJsaWMga2V5IG1hdGNoZXMgc2lnIG9mIG1lc3NhZ2VcbiovXG5FRERTQS5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UsIHNpZywgcHViKSB7XG4gIG1lc3NhZ2UgPSBwYXJzZUJ5dGVzKG1lc3NhZ2UpO1xuICBzaWcgPSB0aGlzLm1ha2VTaWduYXR1cmUoc2lnKTtcbiAgdmFyIGtleSA9IHRoaXMua2V5RnJvbVB1YmxpYyhwdWIpO1xuICB2YXIgaCA9IHRoaXMuaGFzaEludChzaWcuUmVuY29kZWQoKSwga2V5LnB1YkJ5dGVzKCksIG1lc3NhZ2UpO1xuICB2YXIgU0cgPSB0aGlzLmcubXVsKHNpZy5TKCkpO1xuICB2YXIgUnBsdXNBaCA9IHNpZy5SKCkuYWRkKGtleS5wdWIoKS5tdWwoaCkpO1xuICByZXR1cm4gUnBsdXNBaC5lcShTRyk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuaGFzaEludCA9IGZ1bmN0aW9uIGhhc2hJbnQoKSB7XG4gIHZhciBoYXNoID0gdGhpcy5oYXNoKCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgIGhhc2gudXBkYXRlKGFyZ3VtZW50c1tpXSk7XG4gIHJldHVybiB1dGlscy5pbnRGcm9tTEUoaGFzaC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pO1xufTtcblxuRUREU0EucHJvdG90eXBlLmtleUZyb21QdWJsaWMgPSBmdW5jdGlvbiBrZXlGcm9tUHVibGljKHB1Yikge1xuICByZXR1cm4gS2V5UGFpci5mcm9tUHVibGljKHRoaXMsIHB1Yik7XG59O1xuXG5FRERTQS5wcm90b3R5cGUua2V5RnJvbVNlY3JldCA9IGZ1bmN0aW9uIGtleUZyb21TZWNyZXQoc2VjcmV0KSB7XG4gIHJldHVybiBLZXlQYWlyLmZyb21TZWNyZXQodGhpcywgc2VjcmV0KTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlID0gZnVuY3Rpb24gbWFrZVNpZ25hdHVyZShzaWcpIHtcbiAgaWYgKHNpZyBpbnN0YW5jZW9mIFNpZ25hdHVyZSlcbiAgICByZXR1cm4gc2lnO1xuICByZXR1cm4gbmV3IFNpZ25hdHVyZSh0aGlzLCBzaWcpO1xufTtcblxuLyoqXG4qICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWpvc2Vmc3Nvbi1lZGRzYS1lZDI1NTE5LTAzI3NlY3Rpb24tNS4yXG4qXG4qIEVERFNBIGRlZmluZXMgbWV0aG9kcyBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHBvaW50cyBhbmQgaW50ZWdlcnMuIFRoZXNlIGFyZVxuKiBoZWxwZXIgY29udmVuaWVuY2UgbWV0aG9kcywgdGhhdCBwYXNzIGFsb25nIHRvIHV0aWxpdHkgZnVuY3Rpb25zIGltcGxpZWRcbiogcGFyYW1ldGVycy5cbipcbiovXG5FRERTQS5wcm90b3R5cGUuZW5jb2RlUG9pbnQgPSBmdW5jdGlvbiBlbmNvZGVQb2ludChwb2ludCkge1xuICB2YXIgZW5jID0gcG9pbnQuZ2V0WSgpLnRvQXJyYXkoJ2xlJywgdGhpcy5lbmNvZGluZ0xlbmd0aCk7XG4gIGVuY1t0aGlzLmVuY29kaW5nTGVuZ3RoIC0gMV0gfD0gcG9pbnQuZ2V0WCgpLmlzT2RkKCkgPyAweDgwIDogMDtcbiAgcmV0dXJuIGVuYztcbn07XG5cbkVERFNBLnByb3RvdHlwZS5kZWNvZGVQb2ludCA9IGZ1bmN0aW9uIGRlY29kZVBvaW50KGJ5dGVzKSB7XG4gIGJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcyhieXRlcyk7XG5cbiAgdmFyIGxhc3RJeCA9IGJ5dGVzLmxlbmd0aCAtIDE7XG4gIHZhciBub3JtZWQgPSBieXRlcy5zbGljZSgwLCBsYXN0SXgpLmNvbmNhdChieXRlc1tsYXN0SXhdICYgfjB4ODApO1xuICB2YXIgeElzT2RkID0gKGJ5dGVzW2xhc3RJeF0gJiAweDgwKSAhPT0gMDtcblxuICB2YXIgeSA9IHV0aWxzLmludEZyb21MRShub3JtZWQpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKHksIHhJc09kZCk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuZW5jb2RlSW50ID0gZnVuY3Rpb24gZW5jb2RlSW50KG51bSkge1xuICByZXR1cm4gbnVtLnRvQXJyYXkoJ2xlJywgdGhpcy5lbmNvZGluZ0xlbmd0aCk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuZGVjb2RlSW50ID0gZnVuY3Rpb24gZGVjb2RlSW50KGJ5dGVzKSB7XG4gIHJldHVybiB1dGlscy5pbnRGcm9tTEUoYnl0ZXMpO1xufTtcblxuRUREU0EucHJvdG90eXBlLmlzUG9pbnQgPSBmdW5jdGlvbiBpc1BvaW50KHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciB1dGlscyA9IGVsbGlwdGljLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcbnZhciBjYWNoZWRQcm9wZXJ0eSA9IHV0aWxzLmNhY2hlZFByb3BlcnR5O1xuXG4vKipcbiogQHBhcmFtIHtFRERTQX0gZWRkc2EgLSBpbnN0YW5jZVxuKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gcHVibGljL3ByaXZhdGUga2V5IHBhcmFtZXRlcnNcbipcbiogQHBhcmFtIHtBcnJheTxCeXRlPn0gW3BhcmFtcy5zZWNyZXRdIC0gc2VjcmV0IHNlZWQgYnl0ZXNcbiogQHBhcmFtIHtQb2ludH0gW3BhcmFtcy5wdWJdIC0gcHVibGljIGtleSBwb2ludCAoYWthIGBBYCBpbiBlZGRzYSB0ZXJtcylcbiogQHBhcmFtIHtBcnJheTxCeXRlPn0gW3BhcmFtcy5wdWJdIC0gcHVibGljIGtleSBwb2ludCBlbmNvZGVkIGFzIGJ5dGVzXG4qXG4qL1xuZnVuY3Rpb24gS2V5UGFpcihlZGRzYSwgcGFyYW1zKSB7XG4gIHRoaXMuZWRkc2EgPSBlZGRzYTtcbiAgdGhpcy5fc2VjcmV0ID0gcGFyc2VCeXRlcyhwYXJhbXMuc2VjcmV0KTtcbiAgaWYgKGVkZHNhLmlzUG9pbnQocGFyYW1zLnB1YikpXG4gICAgdGhpcy5fcHViID0gcGFyYW1zLnB1YjtcbiAgZWxzZVxuICAgIHRoaXMuX3B1YkJ5dGVzID0gcGFyc2VCeXRlcyhwYXJhbXMucHViKTtcbn1cblxuS2V5UGFpci5mcm9tUHVibGljID0gZnVuY3Rpb24gZnJvbVB1YmxpYyhlZGRzYSwgcHViKSB7XG4gIGlmIChwdWIgaW5zdGFuY2VvZiBLZXlQYWlyKVxuICAgIHJldHVybiBwdWI7XG4gIHJldHVybiBuZXcgS2V5UGFpcihlZGRzYSwgeyBwdWI6IHB1YiB9KTtcbn07XG5cbktleVBhaXIuZnJvbVNlY3JldCA9IGZ1bmN0aW9uIGZyb21TZWNyZXQoZWRkc2EsIHNlY3JldCkge1xuICBpZiAoc2VjcmV0IGluc3RhbmNlb2YgS2V5UGFpcilcbiAgICByZXR1cm4gc2VjcmV0O1xuICByZXR1cm4gbmV3IEtleVBhaXIoZWRkc2EsIHsgc2VjcmV0OiBzZWNyZXQgfSk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5zZWNyZXQgPSBmdW5jdGlvbiBzZWNyZXQoKSB7XG4gIHJldHVybiB0aGlzLl9zZWNyZXQ7XG59O1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAncHViQnl0ZXMnLCBmdW5jdGlvbiBwdWJCeXRlcygpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ3B1YicsIGZ1bmN0aW9uIHB1YigpIHtcbiAgaWYgKHRoaXMuX3B1YkJ5dGVzKVxuICAgIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdwcml2Qnl0ZXMnLCBmdW5jdGlvbiBwcml2Qnl0ZXMoKSB7XG4gIHZhciBlZGRzYSA9IHRoaXMuZWRkc2E7XG4gIHZhciBoYXNoID0gdGhpcy5oYXNoKCk7XG4gIHZhciBsYXN0SXggPSBlZGRzYS5lbmNvZGluZ0xlbmd0aCAtIDE7XG5cbiAgdmFyIGEgPSBoYXNoLnNsaWNlKDAsIGVkZHNhLmVuY29kaW5nTGVuZ3RoKTtcbiAgYVswXSAmPSAyNDg7XG4gIGFbbGFzdEl4XSAmPSAxMjc7XG4gIGFbbGFzdEl4XSB8PSA2NDtcblxuICByZXR1cm4gYTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAncHJpdicsIGZ1bmN0aW9uIHByaXYoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAnaGFzaCcsIGZ1bmN0aW9uIGhhc2goKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ21lc3NhZ2VQcmVmaXgnLCBmdW5jdGlvbiBtZXNzYWdlUHJlZml4KCkge1xuICByZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCk7XG59KTtcblxuS2V5UGFpci5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24obWVzc2FnZSkge1xuICBhc3NlcnQodGhpcy5fc2VjcmV0LCAnS2V5UGFpciBjYW4gb25seSB2ZXJpZnknKTtcbiAgcmV0dXJuIHRoaXMuZWRkc2Euc2lnbihtZXNzYWdlLCB0aGlzKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtZXNzYWdlLCBzaWcpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KG1lc3NhZ2UsIHNpZywgdGhpcyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5nZXRTZWNyZXQgPSBmdW5jdGlvbiBnZXRTZWNyZXQoZW5jKSB7XG4gIGFzc2VydCh0aGlzLl9zZWNyZXQsICdLZXlQYWlyIGlzIHB1YmxpYyBvbmx5Jyk7XG4gIHJldHVybiB1dGlscy5lbmNvZGUodGhpcy5zZWNyZXQoKSwgZW5jKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFB1YmxpYyA9IGZ1bmN0aW9uIGdldFB1YmxpYyhlbmMpIHtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksIGVuYyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEtleVBhaXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xudmFyIGNhY2hlZFByb3BlcnR5ID0gdXRpbHMuY2FjaGVkUHJvcGVydHk7XG52YXIgcGFyc2VCeXRlcyA9IHV0aWxzLnBhcnNlQnl0ZXM7XG5cbi8qKlxuKiBAcGFyYW0ge0VERFNBfSBlZGRzYSAtIGVkZHNhIGluc3RhbmNlXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZXM+fE9iamVjdH0gc2lnIC1cbiogQHBhcmFtIHtBcnJheTxCeXRlcz58UG9pbnR9IFtzaWcuUl0gLSBSIHBvaW50IGFzIFBvaW50IG9yIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZXM+fGJufSBbc2lnLlNdIC0gUyBzY2FsYXIgYXMgYm4gb3IgYnl0ZXNcbiogQHBhcmFtIHtBcnJheTxCeXRlcz59IFtzaWcuUmVuY29kZWRdIC0gUiBwb2ludCBlbmNvZGVkXG4qIEBwYXJhbSB7QXJyYXk8Qnl0ZXM+fSBbc2lnLlNlbmNvZGVkXSAtIFMgc2NhbGFyIGVuY29kZWRcbiovXG5mdW5jdGlvbiBTaWduYXR1cmUoZWRkc2EsIHNpZykge1xuICB0aGlzLmVkZHNhID0gZWRkc2E7XG5cbiAgaWYgKHR5cGVvZiBzaWcgIT09ICdvYmplY3QnKVxuICAgIHNpZyA9IHBhcnNlQnl0ZXMoc2lnKTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzaWcpKSB7XG4gICAgc2lnID0ge1xuICAgICAgUjogc2lnLnNsaWNlKDAsIGVkZHNhLmVuY29kaW5nTGVuZ3RoKSxcbiAgICAgIFM6IHNpZy5zbGljZShlZGRzYS5lbmNvZGluZ0xlbmd0aClcbiAgICB9O1xuICB9XG5cbiAgYXNzZXJ0KHNpZy5SICYmIHNpZy5TLCAnU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTJyk7XG5cbiAgaWYgKGVkZHNhLmlzUG9pbnQoc2lnLlIpKVxuICAgIHRoaXMuX1IgPSBzaWcuUjtcbiAgaWYgKHNpZy5TIGluc3RhbmNlb2YgQk4pXG4gICAgdGhpcy5fUyA9IHNpZy5TO1xuXG4gIHRoaXMuX1JlbmNvZGVkID0gQXJyYXkuaXNBcnJheShzaWcuUikgPyBzaWcuUiA6IHNpZy5SZW5jb2RlZDtcbiAgdGhpcy5fU2VuY29kZWQgPSBBcnJheS5pc0FycmF5KHNpZy5TKSA/IHNpZy5TIDogc2lnLlNlbmNvZGVkO1xufVxuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsICdTJywgZnVuY3Rpb24gUygpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoU2lnbmF0dXJlLCAnUicsIGZ1bmN0aW9uIFIoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoU2lnbmF0dXJlLCAnUmVuY29kZWQnLCBmdW5jdGlvbiBSZW5jb2RlZCgpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KFNpZ25hdHVyZSwgJ1NlbmNvZGVkJywgZnVuY3Rpb24gU2VuY29kZWQoKSB7XG4gIHJldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSk7XG59KTtcblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b0J5dGVzID0gZnVuY3Rpb24gdG9CeXRlcygpIHtcbiAgcmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKTtcbn07XG5cblNpZ25hdHVyZS5wcm90b3R5cGUudG9IZXggPSBmdW5jdGlvbiB0b0hleCgpIHtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwgJ2hleCcpLnRvVXBwZXJDYXNlKCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25hdHVyZTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBkb3VibGVzOiB7XG4gICAgc3RlcDogNCxcbiAgICBwb2ludHM6IFtcbiAgICAgIFtcbiAgICAgICAgJ2U2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEnLFxuICAgICAgICAnZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4JyxcbiAgICAgICAgJzExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOScsXG4gICAgICAgICdkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAnLFxuICAgICAgICAnNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMnLFxuICAgICAgICAnNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhJyxcbiAgICAgICAgJzk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYScsXG4gICAgICAgICc1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAnLFxuICAgICAgICAnY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkJyxcbiAgICAgICAgJzlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCcsXG4gICAgICAgICdlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEnLFxuICAgICAgICAnOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwJyxcbiAgICAgICAgJzViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NycsXG4gICAgICAgICcxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjInLFxuICAgICAgICAnMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTcnLFxuICAgICAgICAnN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkJyxcbiAgICAgICAgJzU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MycsXG4gICAgICAgICc3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYScsXG4gICAgICAgICc1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgnLFxuICAgICAgICAnYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkJyxcbiAgICAgICAgJzQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNScsXG4gICAgICAgICc3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQnLFxuICAgICAgICAnNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjJyxcbiAgICAgICAgJzE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNicsXG4gICAgICAgICc2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzknLFxuICAgICAgICAnYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxJyxcbiAgICAgICAgJzg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YicsXG4gICAgICAgICdmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2I4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMnLFxuICAgICAgICAnMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkJyxcbiAgICAgICAgJ2VlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCcsXG4gICAgICAgICc3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQnLFxuICAgICAgICAnZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEnLFxuICAgICAgICAnNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExJyxcbiAgICAgICAgJzFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZScsXG4gICAgICAgICdlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEnLFxuICAgICAgICAnMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmJyxcbiAgICAgICAgJzY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4JyxcbiAgICAgICAgJ2RiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCcsXG4gICAgICAgICc2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYnLFxuICAgICAgICAnMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCcsXG4gICAgICAgICdkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUnLFxuICAgICAgICAnOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2JyxcbiAgICAgICAgJzQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MScsXG4gICAgICAgICczNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYycsXG4gICAgICAgICdjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEnLFxuICAgICAgICAnMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlJyxcbiAgICAgICAgJzQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MScsXG4gICAgICAgICdjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMnLFxuICAgICAgICAnYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmJyxcbiAgICAgICAgJzRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOScsXG4gICAgICAgICdhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUnLFxuICAgICAgICAnYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5JyxcbiAgICAgICAgJzZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMicsXG4gICAgICAgICc4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2E4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMnLFxuICAgICAgICAnN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjJyxcbiAgICAgICAgJ2NjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYScsXG4gICAgICAgICcyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEnLFxuICAgICAgICAnZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczJyxcbiAgICAgICAgJ2Q5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCcsXG4gICAgICAgICczOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmInLFxuICAgICAgICAnNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2JyxcbiAgICAgICAgJ2QzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhJyxcbiAgICAgICAgJzQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwJyxcbiAgICAgICAgJzYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NycsXG4gICAgICAgICc3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Y3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUnLFxuICAgICAgICAnZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MidcbiAgICAgIF1cbiAgICBdXG4gIH0sXG4gIG5hZjoge1xuICAgIHduZDogNyxcbiAgICBwb2ludHM6IFtcbiAgICAgIFtcbiAgICAgICAgJ2Y5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjknLFxuICAgICAgICAnMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0JyxcbiAgICAgICAgJ2Q4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYycsXG4gICAgICAgICc2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2FjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUnLFxuICAgICAgICAnY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiJyxcbiAgICAgICAgJ2Q5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCcsXG4gICAgICAgICdhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZScsXG4gICAgICAgICc1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQnLFxuICAgICAgICAnNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjJyxcbiAgICAgICAgJzg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNScsXG4gICAgICAgICczMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YnLFxuICAgICAgICAnMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQnLFxuICAgICAgICAnNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5JyxcbiAgICAgICAgJ2E2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYicsXG4gICAgICAgICcyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQnLFxuICAgICAgICAnZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1JyxcbiAgICAgICAgJ2I5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OScsXG4gICAgICAgICcyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCcsXG4gICAgICAgICc4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYnLFxuICAgICAgICAnMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiJyxcbiAgICAgICAgJ2QwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5JyxcbiAgICAgICAgJ2VlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzJyxcbiAgICAgICAgJzc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCcsXG4gICAgICAgICc5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAnLFxuICAgICAgICAnZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViJyxcbiAgICAgICAgJzVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NycsXG4gICAgICAgICdjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2NhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEnLFxuICAgICAgICAnY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwJyxcbiAgICAgICAgJzQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNScsXG4gICAgICAgICc5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCcsXG4gICAgICAgICc2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCcsXG4gICAgICAgICc1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWInLFxuICAgICAgICAnM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmJyxcbiAgICAgICAgJzU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MycsXG4gICAgICAgICdlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEnLFxuICAgICAgICAnZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1JyxcbiAgICAgICAgJ2Y5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YScsXG4gICAgICAgICc3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UnLFxuICAgICAgICAnYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4JyxcbiAgICAgICAgJ2UxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYycsXG4gICAgICAgICczMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTknLFxuICAgICAgICAnZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiJyxcbiAgICAgICAgJzEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYScsXG4gICAgICAgICdlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYnLFxuICAgICAgICAnOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwJyxcbiAgICAgICAgJzY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCcsXG4gICAgICAgICdmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMnLFxuICAgICAgICAnZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwJyxcbiAgICAgICAgJ2VkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCcsXG4gICAgICAgICdhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMycsXG4gICAgICAgICc2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYnLFxuICAgICAgICAnOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMnLFxuICAgICAgICAnNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4JyxcbiAgICAgICAgJ2ZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2InXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZicsXG4gICAgICAgICc1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUnLFxuICAgICAgICAnOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2JyxcbiAgICAgICAgJzhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNScsXG4gICAgICAgICc1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTknLFxuICAgICAgICAnZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEnLFxuICAgICAgICAnZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1JyxcbiAgICAgICAgJzQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNScsXG4gICAgICAgICcyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2M0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTcnLFxuICAgICAgICAnNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEnLFxuICAgICAgICAnNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUnLFxuICAgICAgICAnMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2JyxcbiAgICAgICAgJ2QyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2JyxcbiAgICAgICAgJ2VhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZScsXG4gICAgICAgICc2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQnLFxuICAgICAgICAnNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEnLFxuICAgICAgICAnM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxJyxcbiAgICAgICAgJ2I0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyJyxcbiAgICAgICAgJ2FlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1JyxcbiAgICAgICAgJ2NmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYicsXG4gICAgICAgICc2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQnLFxuICAgICAgICAnMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmJyxcbiAgICAgICAgJzY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODknLFxuICAgICAgICAnMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2JyxcbiAgICAgICAgJ2IwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCcsXG4gICAgICAgICc5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EnLFxuICAgICAgICAnYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwJyxcbiAgICAgICAgJ2JkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NycsXG4gICAgICAgICc2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2MxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MycsXG4gICAgICAgICdjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2E2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYnLFxuICAgICAgICAnMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgnLFxuICAgICAgICAnNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhJyxcbiAgICAgICAgJzQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMScsXG4gICAgICAgICc1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDInLFxuICAgICAgICAnNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhJyxcbiAgICAgICAgJ2JlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNicsXG4gICAgICAgICc4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2I0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYnLFxuICAgICAgICAnMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlJyxcbiAgICAgICAgJzYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCcsXG4gICAgICAgICcyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEnLFxuICAgICAgICAnZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5JyxcbiAgICAgICAgJ2NkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZicsXG4gICAgICAgICdmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMnLFxuICAgICAgICAnNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyJyxcbiAgICAgICAgJ2ZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YScsXG4gICAgICAgICcxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2IyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAnLFxuICAgICAgICAnNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkJyxcbiAgICAgICAgJzQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMScsXG4gICAgICAgICdjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMnLFxuICAgICAgICAnYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTInLFxuICAgICAgICAnNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzJyxcbiAgICAgICAgJ2NhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCcsXG4gICAgICAgICc5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCcsXG4gICAgICAgICdlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2UyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjcnLFxuICAgICAgICAnZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4JyxcbiAgICAgICAgJ2M0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZScsXG4gICAgICAgICc2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QnLFxuICAgICAgICAnY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmInLFxuICAgICAgICAnMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmJyxcbiAgICAgICAgJ2Y5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNicsXG4gICAgICAgICc0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2JlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTcnLFxuICAgICAgICAnNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhJyxcbiAgICAgICAgJzdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYycsXG4gICAgICAgICdhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTInLFxuICAgICAgICAnNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiJyxcbiAgICAgICAgJ2JkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NScsXG4gICAgICAgICdiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTcnLFxuICAgICAgICAnNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5JyxcbiAgICAgICAgJ2NjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMycsXG4gICAgICAgICc1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTcnLFxuICAgICAgICAnNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYnLFxuICAgICAgICAnZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4JyxcbiAgICAgICAgJzk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMScsXG4gICAgICAgICc5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAnLFxuICAgICAgICAnNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSdcbiAgICAgIF1cbiAgICBdXG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IGV4cG9ydHM7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIG1pbkFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBtaW5VdGlscyA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMnKTtcblxudXRpbHMuYXNzZXJ0ID0gbWluQXNzZXJ0O1xudXRpbHMudG9BcnJheSA9IG1pblV0aWxzLnRvQXJyYXk7XG51dGlscy56ZXJvMiA9IG1pblV0aWxzLnplcm8yO1xudXRpbHMudG9IZXggPSBtaW5VdGlscy50b0hleDtcbnV0aWxzLmVuY29kZSA9IG1pblV0aWxzLmVuY29kZTtcblxuLy8gUmVwcmVzZW50IG51bSBpbiBhIHctTkFGIGZvcm1cbmZ1bmN0aW9uIGdldE5BRihudW0sIHcpIHtcbiAgdmFyIG5hZiA9IFtdO1xuICB2YXIgd3MgPSAxIDw8ICh3ICsgMSk7XG4gIHZhciBrID0gbnVtLmNsb25lKCk7XG4gIHdoaWxlIChrLmNtcG4oMSkgPj0gMCkge1xuICAgIHZhciB6O1xuICAgIGlmIChrLmlzT2RkKCkpIHtcbiAgICAgIHZhciBtb2QgPSBrLmFuZGxuKHdzIC0gMSk7XG4gICAgICBpZiAobW9kID4gKHdzID4+IDEpIC0gMSlcbiAgICAgICAgeiA9ICh3cyA+PiAxKSAtIG1vZDtcbiAgICAgIGVsc2VcbiAgICAgICAgeiA9IG1vZDtcbiAgICAgIGsuaXN1Ym4oeik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHogPSAwO1xuICAgIH1cbiAgICBuYWYucHVzaCh6KTtcblxuICAgIC8vIE9wdGltaXphdGlvbiwgc2hpZnQgYnkgd29yZCBpZiBwb3NzaWJsZVxuICAgIHZhciBzaGlmdCA9IChrLmNtcG4oMCkgIT09IDAgJiYgay5hbmRsbih3cyAtIDEpID09PSAwKSA/ICh3ICsgMSkgOiAxO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgc2hpZnQ7IGkrKylcbiAgICAgIG5hZi5wdXNoKDApO1xuICAgIGsuaXVzaHJuKHNoaWZ0KTtcbiAgfVxuXG4gIHJldHVybiBuYWY7XG59XG51dGlscy5nZXROQUYgPSBnZXROQUY7XG5cbi8vIFJlcHJlc2VudCBrMSwgazIgaW4gYSBKb2ludCBTcGFyc2UgRm9ybVxuZnVuY3Rpb24gZ2V0SlNGKGsxLCBrMikge1xuICB2YXIganNmID0gW1xuICAgIFtdLFxuICAgIFtdXG4gIF07XG5cbiAgazEgPSBrMS5jbG9uZSgpO1xuICBrMiA9IGsyLmNsb25lKCk7XG4gIHZhciBkMSA9IDA7XG4gIHZhciBkMiA9IDA7XG4gIHdoaWxlIChrMS5jbXBuKC1kMSkgPiAwIHx8IGsyLmNtcG4oLWQyKSA+IDApIHtcblxuICAgIC8vIEZpcnN0IHBoYXNlXG4gICAgdmFyIG0xNCA9IChrMS5hbmRsbigzKSArIGQxKSAmIDM7XG4gICAgdmFyIG0yNCA9IChrMi5hbmRsbigzKSArIGQyKSAmIDM7XG4gICAgaWYgKG0xNCA9PT0gMylcbiAgICAgIG0xNCA9IC0xO1xuICAgIGlmIChtMjQgPT09IDMpXG4gICAgICBtMjQgPSAtMTtcbiAgICB2YXIgdTE7XG4gICAgaWYgKChtMTQgJiAxKSA9PT0gMCkge1xuICAgICAgdTEgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbTggPSAoazEuYW5kbG4oNykgKyBkMSkgJiA3O1xuICAgICAgaWYgKChtOCA9PT0gMyB8fCBtOCA9PT0gNSkgJiYgbTI0ID09PSAyKVxuICAgICAgICB1MSA9IC1tMTQ7XG4gICAgICBlbHNlXG4gICAgICAgIHUxID0gbTE0O1xuICAgIH1cbiAgICBqc2ZbMF0ucHVzaCh1MSk7XG5cbiAgICB2YXIgdTI7XG4gICAgaWYgKChtMjQgJiAxKSA9PT0gMCkge1xuICAgICAgdTIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbTggPSAoazIuYW5kbG4oNykgKyBkMikgJiA3O1xuICAgICAgaWYgKChtOCA9PT0gMyB8fCBtOCA9PT0gNSkgJiYgbTE0ID09PSAyKVxuICAgICAgICB1MiA9IC1tMjQ7XG4gICAgICBlbHNlXG4gICAgICAgIHUyID0gbTI0O1xuICAgIH1cbiAgICBqc2ZbMV0ucHVzaCh1Mik7XG5cbiAgICAvLyBTZWNvbmQgcGhhc2VcbiAgICBpZiAoMiAqIGQxID09PSB1MSArIDEpXG4gICAgICBkMSA9IDEgLSBkMTtcbiAgICBpZiAoMiAqIGQyID09PSB1MiArIDEpXG4gICAgICBkMiA9IDEgLSBkMjtcbiAgICBrMS5pdXNocm4oMSk7XG4gICAgazIuaXVzaHJuKDEpO1xuICB9XG5cbiAgcmV0dXJuIGpzZjtcbn1cbnV0aWxzLmdldEpTRiA9IGdldEpTRjtcblxuZnVuY3Rpb24gY2FjaGVkUHJvcGVydHkob2JqLCBuYW1lLCBjb21wdXRlcikge1xuICB2YXIga2V5ID0gJ18nICsgbmFtZTtcbiAgb2JqLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uIGNhY2hlZFByb3BlcnR5KCkge1xuICAgIHJldHVybiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCA/IHRoaXNba2V5XSA6XG4gICAgICAgICAgIHRoaXNba2V5XSA9IGNvbXB1dGVyLmNhbGwodGhpcyk7XG4gIH07XG59XG51dGlscy5jYWNoZWRQcm9wZXJ0eSA9IGNhY2hlZFByb3BlcnR5O1xuXG5mdW5jdGlvbiBwYXJzZUJ5dGVzKGJ5dGVzKSB7XG4gIHJldHVybiB0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnID8gdXRpbHMudG9BcnJheShieXRlcywgJ2hleCcpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcztcbn1cbnV0aWxzLnBhcnNlQnl0ZXMgPSBwYXJzZUJ5dGVzO1xuXG5mdW5jdGlvbiBpbnRGcm9tTEUoYnl0ZXMpIHtcbiAgcmV0dXJuIG5ldyBCTihieXRlcywgJ2hleCcsICdsZScpO1xufVxudXRpbHMuaW50RnJvbUxFID0gaW50RnJvbUxFO1xuXG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiX2FyZ3NcIjogW1xuICAgIFtcbiAgICAgIHtcbiAgICAgICAgXCJyYXdcIjogXCJlbGxpcHRpY0BeNi4wLjBcIixcbiAgICAgICAgXCJzY29wZVwiOiBudWxsLFxuICAgICAgICBcImVzY2FwZWROYW1lXCI6IFwiZWxsaXB0aWNcIixcbiAgICAgICAgXCJuYW1lXCI6IFwiZWxsaXB0aWNcIixcbiAgICAgICAgXCJyYXdTcGVjXCI6IFwiXjYuMC4wXCIsXG4gICAgICAgIFwic3BlY1wiOiBcIj49Ni4wLjAgPDcuMC4wXCIsXG4gICAgICAgIFwidHlwZVwiOiBcInJhbmdlXCJcbiAgICAgIH0sXG4gICAgICBcIi9ob21lL2dhYnJpZWwvRG9jdW1lbnRzL3dlYi1zY3JhcGVyLWNocm9tZS1leHRlbnNpb24vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnblwiXG4gICAgXVxuICBdLFxuICBcIl9mcm9tXCI6IFwiZWxsaXB0aWNAPj02LjAuMCA8Ny4wLjBcIixcbiAgXCJfaWRcIjogXCJlbGxpcHRpY0A2LjQuMFwiLFxuICBcIl9pbkNhY2hlXCI6IHRydWUsXG4gIFwiX2xvY2F0aW9uXCI6IFwiL2VsbGlwdGljXCIsXG4gIFwiX25vZGVWZXJzaW9uXCI6IFwiNy4wLjBcIixcbiAgXCJfbnBtT3BlcmF0aW9uYWxJbnRlcm5hbFwiOiB7XG4gICAgXCJob3N0XCI6IFwicGFja2FnZXMtMTgtZWFzdC5pbnRlcm5hbC5ucG1qcy5jb21cIixcbiAgICBcInRtcFwiOiBcInRtcC9lbGxpcHRpYy02LjQuMC50Z3pfMTQ4Nzc5ODg2NjQyOF8wLjMwNTEwNjIwMTkwNzYxOTgzXCJcbiAgfSxcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiaW5kdXRueVwiLFxuICAgIFwiZW1haWxcIjogXCJmZWRvckBpbmR1dG55LmNvbVwiXG4gIH0sXG4gIFwiX25wbVZlcnNpb25cIjogXCIzLjEwLjhcIixcbiAgXCJfcGhhbnRvbUNoaWxkcmVuXCI6IHt9LFxuICBcIl9yZXF1ZXN0ZWRcIjoge1xuICAgIFwicmF3XCI6IFwiZWxsaXB0aWNAXjYuMC4wXCIsXG4gICAgXCJzY29wZVwiOiBudWxsLFxuICAgIFwiZXNjYXBlZE5hbWVcIjogXCJlbGxpcHRpY1wiLFxuICAgIFwibmFtZVwiOiBcImVsbGlwdGljXCIsXG4gICAgXCJyYXdTcGVjXCI6IFwiXjYuMC4wXCIsXG4gICAgXCJzcGVjXCI6IFwiPj02LjAuMCA8Ny4wLjBcIixcbiAgICBcInR5cGVcIjogXCJyYW5nZVwiXG4gIH0sXG4gIFwiX3JlcXVpcmVkQnlcIjogW1xuICAgIFwiL2Jyb3dzZXJpZnktc2lnblwiLFxuICAgIFwiL2NyZWF0ZS1lY2RoXCJcbiAgXSxcbiAgXCJfcmVzb2x2ZWRcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuNC4wLnRnelwiLFxuICBcIl9zaGFzdW1cIjogXCJjYWM5YWY4NzYyYzg1ODM2MTg3MDAzYzhkZmUxOTNlNWUyZWFlNWRmXCIsXG4gIFwiX3Nocmlua3dyYXBcIjogbnVsbCxcbiAgXCJfc3BlY1wiOiBcImVsbGlwdGljQF42LjAuMFwiLFxuICBcIl93aGVyZVwiOiBcIi9ob21lL2dhYnJpZWwvRG9jdW1lbnRzL3dlYi1zY3JhcGVyLWNocm9tZS1leHRlbnNpb24vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnblwiLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiRmVkb3IgSW5kdXRueVwiLFxuICAgIFwiZW1haWxcIjogXCJmZWRvckBpbmR1dG55LmNvbVwiXG4gIH0sXG4gIFwiYnVnc1wiOiB7XG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy9pc3N1ZXNcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJibi5qc1wiOiBcIl40LjQuMFwiLFxuICAgIFwiYnJvcmFuZFwiOiBcIl4xLjAuMVwiLFxuICAgIFwiaGFzaC5qc1wiOiBcIl4xLjAuMFwiLFxuICAgIFwiaG1hYy1kcmJnXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJpbmhlcml0c1wiOiBcIl4yLjAuMVwiLFxuICAgIFwibWluaW1hbGlzdGljLWFzc2VydFwiOiBcIl4xLjAuMFwiLFxuICAgIFwibWluaW1hbGlzdGljLWNyeXB0by11dGlsc1wiOiBcIl4xLjAuMFwiXG4gIH0sXG4gIFwiZGVzY3JpcHRpb25cIjogXCJFQyBjcnlwdG9ncmFwaHlcIixcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJmc1wiOiBcIl4xLjQuM1wiLFxuICAgIFwiY292ZXJhbGxzXCI6IFwiXjIuMTEuM1wiLFxuICAgIFwiZ3J1bnRcIjogXCJeMC40LjVcIixcbiAgICBcImdydW50LWJyb3dzZXJpZnlcIjogXCJeNS4wLjBcIixcbiAgICBcImdydW50LWNsaVwiOiBcIl4xLjIuMFwiLFxuICAgIFwiZ3J1bnQtY29udHJpYi1jb25uZWN0XCI6IFwiXjEuMC4wXCIsXG4gICAgXCJncnVudC1jb250cmliLWNvcHlcIjogXCJeMS4wLjBcIixcbiAgICBcImdydW50LWNvbnRyaWItdWdsaWZ5XCI6IFwiXjEuMC4xXCIsXG4gICAgXCJncnVudC1tb2NoYS1pc3RhbmJ1bFwiOiBcIl4zLjAuMVwiLFxuICAgIFwiZ3J1bnQtc2F1Y2VsYWJzXCI6IFwiXjguNi4yXCIsXG4gICAgXCJpc3RhbmJ1bFwiOiBcIl4wLjQuMlwiLFxuICAgIFwianNjc1wiOiBcIl4yLjkuMFwiLFxuICAgIFwianNoaW50XCI6IFwiXjIuNi4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjEuMFwiXG4gIH0sXG4gIFwiZGlyZWN0b3JpZXNcIjoge30sXG4gIFwiZGlzdFwiOiB7XG4gICAgXCJzaGFzdW1cIjogXCJjYWM5YWY4NzYyYzg1ODM2MTg3MDAzYzhkZmUxOTNlNWUyZWFlNWRmXCIsXG4gICAgXCJ0YXJiYWxsXCI6IFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjQuMC50Z3pcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImxpYlwiXG4gIF0sXG4gIFwiZ2l0SGVhZFwiOiBcIjZiMGQyYjc2Y2FhZTkxNDcxNjQ5YzhlMjFmMGIxZDNiYTBmOTYwOTBcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljXCIsXG4gIFwia2V5d29yZHNcIjogW1xuICAgIFwiRUNcIixcbiAgICBcIkVsbGlwdGljXCIsXG4gICAgXCJjdXJ2ZVwiLFxuICAgIFwiQ3J5cHRvZ3JhcGh5XCJcbiAgXSxcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwibWFpblwiOiBcImxpYi9lbGxpcHRpYy5qc1wiLFxuICBcIm1haW50YWluZXJzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJpbmR1dG55XCIsXG4gICAgICBcImVtYWlsXCI6IFwiZmVkb3JAaW5kdXRueS5jb21cIlxuICAgIH1cbiAgXSxcbiAgXCJuYW1lXCI6IFwiZWxsaXB0aWNcIixcbiAgXCJvcHRpb25hbERlcGVuZGVuY2llc1wiOiB7fSxcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy5naXRcIlxuICB9LFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwianNjc1wiOiBcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixcbiAgICBcImpzaGludFwiOiBcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixcbiAgICBcImxpbnRcIjogXCJucG0gcnVuIGpzY3MgJiYgbnBtIHJ1biBqc2hpbnRcIixcbiAgICBcInRlc3RcIjogXCJucG0gcnVuIGxpbnQgJiYgbnBtIHJ1biB1bml0XCIsXG4gICAgXCJ1bml0XCI6IFwiaXN0YW5idWwgdGVzdCBfbW9jaGEgLS1yZXBvcnRlcj1zcGVjIHRlc3QvaW5kZXguanNcIixcbiAgICBcInZlcnNpb25cIjogXCJncnVudCBkaXN0ICYmIGdpdCBhZGQgZGlzdC9cIlxuICB9LFxuICBcInZlcnNpb25cIjogXCI2LjQuMFwiXG59XG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxNSBJbmd2YXIgU3RlcGFueWFuIDxtZUBycmV2ZXJzZXIuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTQgSXZhbiBOaWt1bGluIDxpZmFhYW5AZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBNaWNoYWVsIEZpY2FycmEgPGVzY29kZWdlbi5jb3B5cmlnaHRAbWljaGFlbC5maWNhcnJhLm1lPlxuICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0BxaXdpLmJlPlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgSXJha2xpIEdvemFsaXNodmlsaSA8cmZvYmljQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIFJvYmVydCBHdXN0LUJhcmRvbiA8ZG9uYXRlQHJvYmVydC5ndXN0LWJhcmRvbi5vcmc+XG4gIENvcHlyaWdodCAoQykgMjAxMiBKb2huIEZyZWVtYW4gPGpmcmVlbWFuMDhAZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIEpvb3N0LVdpbSBCb2VrZXN0ZWlqbiA8am9vc3Qtd2ltQGJvZWtlc3RlaWpuLm5sPlxuICBDb3B5cmlnaHQgKEMpIDIwMTIgS3JpcyBLb3dhbCA8a3Jpcy5rb3dhbEBjaXhhci5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxMiBBcnBhZCBCb3Jzb3MgPGFycGFkLmJvcnNvc0Bnb29nbGVtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4vKmdsb2JhbCBleHBvcnRzOnRydWUsIHJlcXVpcmU6dHJ1ZSwgZ2xvYmFsOnRydWUqL1xuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgU3ludGF4LFxuICAgICAgICBQcmVjZWRlbmNlLFxuICAgICAgICBCaW5hcnlQcmVjZWRlbmNlLFxuICAgICAgICBTb3VyY2VOb2RlLFxuICAgICAgICBlc3RyYXZlcnNlLFxuICAgICAgICBlc3V0aWxzLFxuICAgICAgICBpc0FycmF5LFxuICAgICAgICBiYXNlLFxuICAgICAgICBpbmRlbnQsXG4gICAgICAgIGpzb24sXG4gICAgICAgIHJlbnVtYmVyLFxuICAgICAgICBoZXhhZGVjaW1hbCxcbiAgICAgICAgcXVvdGVzLFxuICAgICAgICBlc2NhcGVsZXNzLFxuICAgICAgICBuZXdsaW5lLFxuICAgICAgICBzcGFjZSxcbiAgICAgICAgcGFyZW50aGVzZXMsXG4gICAgICAgIHNlbWljb2xvbnMsXG4gICAgICAgIHNhZmVDb25jYXRlbmF0aW9uLFxuICAgICAgICBkaXJlY3RpdmUsXG4gICAgICAgIGV4dHJhLFxuICAgICAgICBwYXJzZSxcbiAgICAgICAgc291cmNlTWFwLFxuICAgICAgICBzb3VyY2VDb2RlLFxuICAgICAgICBwcmVzZXJ2ZUJsYW5rTGluZXMsXG4gICAgICAgIEZPUk1BVF9NSU5JRlksXG4gICAgICAgIEZPUk1BVF9ERUZBVUxUUztcblxuICAgIGVzdHJhdmVyc2UgPSByZXF1aXJlKCdlc3RyYXZlcnNlJyk7XG4gICAgZXN1dGlscyA9IHJlcXVpcmUoJ2VzdXRpbHMnKTtcblxuICAgIFN5bnRheCA9IGVzdHJhdmVyc2UuU3ludGF4O1xuXG4gICAgLy8gR2VuZXJhdGlvbiBpcyBkb25lIGJ5IGdlbmVyYXRlRXhwcmVzc2lvbi5cbiAgICBmdW5jdGlvbiBpc0V4cHJlc3Npb24obm9kZSkge1xuICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvci5FeHByZXNzaW9uLmhhc093blByb3BlcnR5KG5vZGUudHlwZSk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGlvbiBpcyBkb25lIGJ5IGdlbmVyYXRlU3RhdGVtZW50LlxuICAgIGZ1bmN0aW9uIGlzU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IuU3RhdGVtZW50Lmhhc093blByb3BlcnR5KG5vZGUudHlwZSk7XG4gICAgfVxuXG4gICAgUHJlY2VkZW5jZSA9IHtcbiAgICAgICAgU2VxdWVuY2U6IDAsXG4gICAgICAgIFlpZWxkOiAxLFxuICAgICAgICBBd2FpdDogMSxcbiAgICAgICAgQXNzaWdubWVudDogMSxcbiAgICAgICAgQ29uZGl0aW9uYWw6IDIsXG4gICAgICAgIEFycm93RnVuY3Rpb246IDIsXG4gICAgICAgIExvZ2ljYWxPUjogMyxcbiAgICAgICAgTG9naWNhbEFORDogNCxcbiAgICAgICAgQml0d2lzZU9SOiA1LFxuICAgICAgICBCaXR3aXNlWE9SOiA2LFxuICAgICAgICBCaXR3aXNlQU5EOiA3LFxuICAgICAgICBFcXVhbGl0eTogOCxcbiAgICAgICAgUmVsYXRpb25hbDogOSxcbiAgICAgICAgQml0d2lzZVNISUZUOiAxMCxcbiAgICAgICAgQWRkaXRpdmU6IDExLFxuICAgICAgICBNdWx0aXBsaWNhdGl2ZTogMTIsXG4gICAgICAgIFVuYXJ5OiAxMyxcbiAgICAgICAgUG9zdGZpeDogMTQsXG4gICAgICAgIENhbGw6IDE1LFxuICAgICAgICBOZXc6IDE2LFxuICAgICAgICBUYWdnZWRUZW1wbGF0ZTogMTcsXG4gICAgICAgIE1lbWJlcjogMTgsXG4gICAgICAgIFByaW1hcnk6IDE5XG4gICAgfTtcblxuICAgIEJpbmFyeVByZWNlZGVuY2UgPSB7XG4gICAgICAgICd8fCc6IFByZWNlZGVuY2UuTG9naWNhbE9SLFxuICAgICAgICAnJiYnOiBQcmVjZWRlbmNlLkxvZ2ljYWxBTkQsXG4gICAgICAgICd8JzogUHJlY2VkZW5jZS5CaXR3aXNlT1IsXG4gICAgICAgICdeJzogUHJlY2VkZW5jZS5CaXR3aXNlWE9SLFxuICAgICAgICAnJic6IFByZWNlZGVuY2UuQml0d2lzZUFORCxcbiAgICAgICAgJz09JzogUHJlY2VkZW5jZS5FcXVhbGl0eSxcbiAgICAgICAgJyE9JzogUHJlY2VkZW5jZS5FcXVhbGl0eSxcbiAgICAgICAgJz09PSc6IFByZWNlZGVuY2UuRXF1YWxpdHksXG4gICAgICAgICchPT0nOiBQcmVjZWRlbmNlLkVxdWFsaXR5LFxuICAgICAgICAnaXMnOiBQcmVjZWRlbmNlLkVxdWFsaXR5LFxuICAgICAgICAnaXNudCc6IFByZWNlZGVuY2UuRXF1YWxpdHksXG4gICAgICAgICc8JzogUHJlY2VkZW5jZS5SZWxhdGlvbmFsLFxuICAgICAgICAnPic6IFByZWNlZGVuY2UuUmVsYXRpb25hbCxcbiAgICAgICAgJzw9JzogUHJlY2VkZW5jZS5SZWxhdGlvbmFsLFxuICAgICAgICAnPj0nOiBQcmVjZWRlbmNlLlJlbGF0aW9uYWwsXG4gICAgICAgICdpbic6IFByZWNlZGVuY2UuUmVsYXRpb25hbCxcbiAgICAgICAgJ2luc3RhbmNlb2YnOiBQcmVjZWRlbmNlLlJlbGF0aW9uYWwsXG4gICAgICAgICc8PCc6IFByZWNlZGVuY2UuQml0d2lzZVNISUZULFxuICAgICAgICAnPj4nOiBQcmVjZWRlbmNlLkJpdHdpc2VTSElGVCxcbiAgICAgICAgJz4+Pic6IFByZWNlZGVuY2UuQml0d2lzZVNISUZULFxuICAgICAgICAnKyc6IFByZWNlZGVuY2UuQWRkaXRpdmUsXG4gICAgICAgICctJzogUHJlY2VkZW5jZS5BZGRpdGl2ZSxcbiAgICAgICAgJyonOiBQcmVjZWRlbmNlLk11bHRpcGxpY2F0aXZlLFxuICAgICAgICAnJSc6IFByZWNlZGVuY2UuTXVsdGlwbGljYXRpdmUsXG4gICAgICAgICcvJzogUHJlY2VkZW5jZS5NdWx0aXBsaWNhdGl2ZVxuICAgIH07XG5cbiAgICAvL0ZsYWdzXG4gICAgdmFyIEZfQUxMT1dfSU4gPSAxLFxuICAgICAgICBGX0FMTE9XX0NBTEwgPSAxIDw8IDEsXG4gICAgICAgIEZfQUxMT1dfVU5QQVJBVEhfTkVXID0gMSA8PCAyLFxuICAgICAgICBGX0ZVTkNfQk9EWSA9IDEgPDwgMyxcbiAgICAgICAgRl9ESVJFQ1RJVkVfQ1RYID0gMSA8PCA0LFxuICAgICAgICBGX1NFTUlDT0xPTl9PUFQgPSAxIDw8IDU7XG5cbiAgICAvL0V4cHJlc3Npb24gZmxhZyBzZXRzXG4gICAgLy9OT1RFOiBGbGFnIG9yZGVyOlxuICAgIC8vIEZfQUxMT1dfSU5cbiAgICAvLyBGX0FMTE9XX0NBTExcbiAgICAvLyBGX0FMTE9XX1VOUEFSQVRIX05FV1xuICAgIHZhciBFX0ZUVCA9IEZfQUxMT1dfQ0FMTCB8IEZfQUxMT1dfVU5QQVJBVEhfTkVXLFxuICAgICAgICBFX1RURiA9IEZfQUxMT1dfSU4gfCBGX0FMTE9XX0NBTEwsXG4gICAgICAgIEVfVFRUID0gRl9BTExPV19JTiB8IEZfQUxMT1dfQ0FMTCB8IEZfQUxMT1dfVU5QQVJBVEhfTkVXLFxuICAgICAgICBFX1RGRiA9IEZfQUxMT1dfSU4sXG4gICAgICAgIEVfRkZUID0gRl9BTExPV19VTlBBUkFUSF9ORVcsXG4gICAgICAgIEVfVEZUID0gRl9BTExPV19JTiB8IEZfQUxMT1dfVU5QQVJBVEhfTkVXO1xuXG4gICAgLy9TdGF0ZW1lbnQgZmxhZyBzZXRzXG4gICAgLy9OT1RFOiBGbGFnIG9yZGVyOlxuICAgIC8vIEZfQUxMT1dfSU5cbiAgICAvLyBGX0ZVTkNfQk9EWVxuICAgIC8vIEZfRElSRUNUSVZFX0NUWFxuICAgIC8vIEZfU0VNSUNPTE9OX09QVFxuICAgIHZhciBTX1RGRkYgPSBGX0FMTE9XX0lOLFxuICAgICAgICBTX1RGRlQgPSBGX0FMTE9XX0lOIHwgRl9TRU1JQ09MT05fT1BULFxuICAgICAgICBTX0ZGRkYgPSAweDAwLFxuICAgICAgICBTX1RGVEYgPSBGX0FMTE9XX0lOIHwgRl9ESVJFQ1RJVkVfQ1RYLFxuICAgICAgICBTX1RURkYgPSBGX0FMTE9XX0lOIHwgRl9GVU5DX0JPRFk7XG5cbiAgICBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICAgICAgLy8gZGVmYXVsdCBvcHRpb25zXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmRlbnQ6IG51bGwsXG4gICAgICAgICAgICBiYXNlOiBudWxsLFxuICAgICAgICAgICAgcGFyc2U6IG51bGwsXG4gICAgICAgICAgICBjb21tZW50OiBmYWxzZSxcbiAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgIGluZGVudDoge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZTogJyAgICAnLFxuICAgICAgICAgICAgICAgICAgICBiYXNlOiAwLFxuICAgICAgICAgICAgICAgICAgICBhZGp1c3RNdWx0aWxpbmVDb21tZW50OiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbmV3bGluZTogJ1xcbicsXG4gICAgICAgICAgICAgICAgc3BhY2U6ICcgJyxcbiAgICAgICAgICAgICAgICBqc29uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZW51bWJlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgaGV4YWRlY2ltYWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHF1b3RlczogJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgZXNjYXBlbGVzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29tcGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcGFyZW50aGVzZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgc2VtaWNvbG9uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzYWZlQ29uY2F0ZW5hdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJlc2VydmVCbGFua0xpbmVzOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vejoge1xuICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25FeHByZXNzaW9uU3RhcnRzV2l0aEFzc2lnbm1lbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHN0YXJsZXNzR2VuZXJhdG9yOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvdXJjZU1hcDogbnVsbCxcbiAgICAgICAgICAgIHNvdXJjZU1hcFJvb3Q6IG51bGwsXG4gICAgICAgICAgICBzb3VyY2VNYXBXaXRoQ29kZTogZmFsc2UsXG4gICAgICAgICAgICBkaXJlY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgcmF3OiB0cnVlLFxuICAgICAgICAgICAgdmVyYmF0aW06IG51bGwsXG4gICAgICAgICAgICBzb3VyY2VDb2RlOiBudWxsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyaW5nUmVwZWF0KHN0ciwgbnVtKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcblxuICAgICAgICBmb3IgKG51bSB8PSAwOyBudW0gPiAwOyBudW0gPj4+PSAxLCBzdHIgKz0gc3RyKSB7XG4gICAgICAgICAgICBpZiAobnVtICYgMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuICAgIGlmICghaXNBcnJheSkge1xuICAgICAgICBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnJheSkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzTGluZVRlcm1pbmF0b3Ioc3RyKSB7XG4gICAgICAgIHJldHVybiAoL1tcXHJcXG5dL2cpLnRlc3Qoc3RyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHN0cikge1xuICAgICAgICB2YXIgbGVuID0gc3RyLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGxlbiAmJiBlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihzdHIuY2hhckNvZGVBdChsZW4gLSAxKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2UodGFyZ2V0LCBvdmVycmlkZSkge1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGtleSBpbiBvdmVycmlkZSkge1xuICAgICAgICAgICAgaWYgKG92ZXJyaWRlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IG92ZXJyaWRlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVEZWVwbHkodGFyZ2V0LCBvdmVycmlkZSkge1xuICAgICAgICB2YXIga2V5LCB2YWw7XG5cbiAgICAgICAgZnVuY3Rpb24gaXNIYXNoT2JqZWN0KHRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnICYmIHRhcmdldCBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHRhcmdldCBpbnN0YW5jZW9mIFJlZ0V4cCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGtleSBpbiBvdmVycmlkZSkge1xuICAgICAgICAgICAgaWYgKG92ZXJyaWRlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBvdmVycmlkZVtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChpc0hhc2hPYmplY3QodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNIYXNoT2JqZWN0KHRhcmdldFtrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRGVlcGx5KHRhcmdldFtrZXldLCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB1cGRhdGVEZWVwbHkoe30sIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZU51bWJlcih2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0LCBwb2ludCwgdGVtcCwgZXhwb25lbnQsIHBvcztcblxuICAgICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ051bWVyaWMgbGl0ZXJhbCB3aG9zZSB2YWx1ZSBpcyBOYU4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOdW1lcmljIGxpdGVyYWwgd2hvc2UgdmFsdWUgaXMgbmVnYXRpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMSAvIDApIHtcbiAgICAgICAgICAgIHJldHVybiBqc29uID8gJ251bGwnIDogcmVudW1iZXIgPyAnMWU0MDAnIDogJzFlKzQwMCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQgPSAnJyArIHZhbHVlO1xuICAgICAgICBpZiAoIXJlbnVtYmVyIHx8IHJlc3VsdC5sZW5ndGggPCAzKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnQgPSByZXN1bHQuaW5kZXhPZignLicpO1xuICAgICAgICBpZiAoIWpzb24gJiYgcmVzdWx0LmNoYXJDb2RlQXQoMCkgPT09IDB4MzAgIC8qIDAgKi8gJiYgcG9pbnQgPT09IDEpIHtcbiAgICAgICAgICAgIHBvaW50ID0gMDtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wID0gcmVzdWx0O1xuICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgnZSsnLCAnZScpO1xuICAgICAgICBleHBvbmVudCA9IDA7XG4gICAgICAgIGlmICgocG9zID0gdGVtcC5pbmRleE9mKCdlJykpID4gMCkge1xuICAgICAgICAgICAgZXhwb25lbnQgPSArdGVtcC5zbGljZShwb3MgKyAxKTtcbiAgICAgICAgICAgIHRlbXAgPSB0ZW1wLnNsaWNlKDAsIHBvcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvaW50ID49IDApIHtcbiAgICAgICAgICAgIGV4cG9uZW50IC09IHRlbXAubGVuZ3RoIC0gcG9pbnQgLSAxO1xuICAgICAgICAgICAgdGVtcCA9ICsodGVtcC5zbGljZSgwLCBwb2ludCkgKyB0ZW1wLnNsaWNlKHBvaW50ICsgMSkpICsgJyc7XG4gICAgICAgIH1cbiAgICAgICAgcG9zID0gMDtcbiAgICAgICAgd2hpbGUgKHRlbXAuY2hhckNvZGVBdCh0ZW1wLmxlbmd0aCArIHBvcyAtIDEpID09PSAweDMwICAvKiAwICovKSB7XG4gICAgICAgICAgICAtLXBvcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zICE9PSAwKSB7XG4gICAgICAgICAgICBleHBvbmVudCAtPSBwb3M7XG4gICAgICAgICAgICB0ZW1wID0gdGVtcC5zbGljZSgwLCBwb3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHBvbmVudCAhPT0gMCkge1xuICAgICAgICAgICAgdGVtcCArPSAnZScgKyBleHBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHRlbXAubGVuZ3RoIDwgcmVzdWx0Lmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgICAgICAoaGV4YWRlY2ltYWwgJiYgdmFsdWUgPiAxZTEyICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZSAmJiAodGVtcCA9ICcweCcgKyB2YWx1ZS50b1N0cmluZygxNikpLmxlbmd0aCA8IHJlc3VsdC5sZW5ndGgpKSAmJlxuICAgICAgICAgICAgICAgICt0ZW1wID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgdmFsaWQgUmVnRXhwIGV4cHJlc3Npb24uXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbi9pdiBFbmdpbmVcblxuICAgIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cENoYXJhY3RlcihjaCwgcHJldmlvdXNJc0JhY2tzbGFzaCkge1xuICAgICAgICAvLyBub3QgaGFuZGxpbmcgJ1xcJyBhbmQgaGFuZGxpbmcgXFx1MjAyOCBvciBcXHUyMDI5IHRvIHVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlXG4gICAgICAgIGlmICgoY2ggJiB+MSkgPT09IDB4MjAyOCkge1xuICAgICAgICAgICAgcmV0dXJuIChwcmV2aW91c0lzQmFja3NsYXNoID8gJ3UnIDogJ1xcXFx1JykgKyAoKGNoID09PSAweDIwMjgpID8gJzIwMjgnIDogJzIwMjknKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMTAgfHwgY2ggPT09IDEzKSB7ICAvLyBcXG4sIFxcclxuICAgICAgICAgICAgcmV0dXJuIChwcmV2aW91c0lzQmFja3NsYXNoID8gJycgOiAnXFxcXCcpICsgKChjaCA9PT0gMTApID8gJ24nIDogJ3InKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVSZWdFeHAocmVnKSB7XG4gICAgICAgIHZhciBtYXRjaCwgcmVzdWx0LCBmbGFncywgaSwgaXosIGNoLCBjaGFyYWN0ZXJJbkJyYWNrLCBwcmV2aW91c0lzQmFja3NsYXNoO1xuXG4gICAgICAgIHJlc3VsdCA9IHJlZy50b1N0cmluZygpO1xuXG4gICAgICAgIGlmIChyZWcuc291cmNlKSB7XG4gICAgICAgICAgICAvLyBleHRyYWN0IGZsYWcgZnJvbSB0b1N0cmluZyByZXN1bHRcbiAgICAgICAgICAgIG1hdGNoID0gcmVzdWx0Lm1hdGNoKC9cXC8oW14vXSopJC8pO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZsYWdzID0gbWF0Y2hbMV07XG4gICAgICAgICAgICByZXN1bHQgPSAnJztcblxuICAgICAgICAgICAgY2hhcmFjdGVySW5CcmFjayA9IGZhbHNlO1xuICAgICAgICAgICAgcHJldmlvdXNJc0JhY2tzbGFzaCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSByZWcuc291cmNlLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICBjaCA9IHJlZy5zb3VyY2UuY2hhckNvZGVBdChpKTtcblxuICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNJc0JhY2tzbGFzaCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVySW5CcmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSA5MykgeyAgLy8gXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckluQnJhY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gNDcpIHsgIC8vIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcXFwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gOTEpIHsgIC8vIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJJbkJyYWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZXNjYXBlUmVnRXhwQ2hhcmFjdGVyKGNoLCBwcmV2aW91c0lzQmFja3NsYXNoKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNJc0JhY2tzbGFzaCA9IGNoID09PSA5MjsgIC8vIFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbmV3IFJlZ0V4cChcIlxcXFxcXG4nKSBpcyBwcm92aWRlZCwgY3JlYXRlIC9cXG4vXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBlc2NhcGVSZWdFeHBDaGFyYWN0ZXIoY2gsIHByZXZpb3VzSXNCYWNrc2xhc2gpO1xuICAgICAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGxpa2UgL1xcXFxbL10vXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzSXNCYWNrc2xhc2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAnLycgKyByZXN1bHQgKyAnLycgKyBmbGFncztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXNjYXBlQWxsb3dlZENoYXJhY3Rlcihjb2RlLCBuZXh0KSB7XG4gICAgICAgIHZhciBoZXg7XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IDB4MDggIC8qIFxcYiAqLykge1xuICAgICAgICAgICAgcmV0dXJuICdcXFxcYic7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kZSA9PT0gMHgwQyAgLyogXFxmICovKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1xcXFxmJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID09PSAweDA5ICAvKiBcXHQgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiAnXFxcXHQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaGV4ID0gY29kZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgICAgICAgaWYgKGpzb24gfHwgY29kZSA+IDB4RkYpIHtcbiAgICAgICAgICAgIHJldHVybiAnXFxcXHUnICsgJzAwMDAnLnNsaWNlKGhleC5sZW5ndGgpICsgaGV4O1xuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDB4MDAwMCAmJiAhZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KG5leHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1xcXFwwJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDAwMEIgIC8qIFxcdiAqLykgeyAvLyAnXFx2J1xuICAgICAgICAgICAgcmV0dXJuICdcXFxceDBCJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnXFxcXHgnICsgJzAwJy5zbGljZShoZXgubGVuZ3RoKSArIGhleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVzY2FwZURpc2FsbG93ZWRDaGFyYWN0ZXIoY29kZSkge1xuICAgICAgICBpZiAoY29kZSA9PT0gMHg1QyAgLyogXFwgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiAnXFxcXFxcXFwnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IDB4MEEgIC8qIFxcbiAqLykge1xuICAgICAgICAgICAgcmV0dXJuICdcXFxcbic7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kZSA9PT0gMHgwRCAgLyogXFxyICovKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1xcXFxyJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID09PSAweDIwMjgpIHtcbiAgICAgICAgICAgIHJldHVybiAnXFxcXHUyMDI4JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID09PSAweDIwMjkpIHtcbiAgICAgICAgICAgIHJldHVybiAnXFxcXHUyMDI5JztcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0bHkgY2xhc3NpZmllZCBjaGFyYWN0ZXInKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlc2NhcGVEaXJlY3RpdmUoc3RyKSB7XG4gICAgICAgIHZhciBpLCBpeiwgY29kZSwgcXVvdGU7XG5cbiAgICAgICAgcXVvdGUgPSBxdW90ZXMgPT09ICdkb3VibGUnID8gJ1wiJyA6ICdcXCcnO1xuICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHN0ci5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gMHgyNyAgLyogJyAqLykge1xuICAgICAgICAgICAgICAgIHF1b3RlID0gJ1wiJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMHgyMiAgLyogXCIgKi8pIHtcbiAgICAgICAgICAgICAgICBxdW90ZSA9ICdcXCcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDVDICAvKiBcXCAqLykge1xuICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBxdW90ZSArIHN0ciArIHF1b3RlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHIpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnLCBpLCBsZW4sIGNvZGUsIHNpbmdsZVF1b3RlcyA9IDAsIGRvdWJsZVF1b3RlcyA9IDAsIHNpbmdsZSwgcXVvdGU7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gc3RyLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gMHgyNyAgLyogJyAqLykge1xuICAgICAgICAgICAgICAgICsrc2luZ2xlUXVvdGVzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDIyICAvKiBcIiAqLykge1xuICAgICAgICAgICAgICAgICsrZG91YmxlUXVvdGVzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDJGICAvKiAvICovICYmIGpzb24pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcXFwnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjb2RlKSB8fCBjb2RlID09PSAweDVDICAvKiBcXCAqLykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBlc2NhcGVEaXNhbGxvd2VkQ2hhcmFjdGVyKGNvZGUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghZXN1dGlscy5jb2RlLmlzSWRlbnRpZmllclBhcnRFUzUoY29kZSkgJiYgKGpzb24gJiYgY29kZSA8IDB4MjAgIC8qIFNQICovIHx8ICFqc29uICYmICFlc2NhcGVsZXNzICYmIChjb2RlIDwgMHgyMCAgLyogU1AgKi8gfHwgY29kZSA+IDB4N0UgIC8qIH4gKi8pKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBlc2NhcGVBbGxvd2VkQ2hhcmFjdGVyKGNvZGUsIHN0ci5jaGFyQ29kZUF0KGkgKyAxKSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNpbmdsZSA9ICEocXVvdGVzID09PSAnZG91YmxlJyB8fCAocXVvdGVzID09PSAnYXV0bycgJiYgZG91YmxlUXVvdGVzIDwgc2luZ2xlUXVvdGVzKSk7XG4gICAgICAgIHF1b3RlID0gc2luZ2xlID8gJ1xcJycgOiAnXCInO1xuXG4gICAgICAgIGlmICghKHNpbmdsZSA/IHNpbmdsZVF1b3RlcyA6IGRvdWJsZVF1b3RlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBxdW90ZSArIHJlc3VsdCArIHF1b3RlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyID0gcmVzdWx0O1xuICAgICAgICByZXN1bHQgPSBxdW90ZTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGlmICgoY29kZSA9PT0gMHgyNyAgLyogJyAqLyAmJiBzaW5nbGUpIHx8IChjb2RlID09PSAweDIyICAvKiBcIiAqLyAmJiAhc2luZ2xlKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxcXCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQgKyBxdW90ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBmbGF0dGVuIGFuIGFycmF5IHRvIGEgc3RyaW5nLCB3aGVyZSB0aGUgYXJyYXkgY2FuIGNvbnRhaW5cbiAgICAgKiBlaXRoZXIgc3RyaW5ncyBvciBuZXN0ZWQgYXJyYXlzXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdHRlblRvU3RyaW5nKGFycikge1xuICAgICAgICB2YXIgaSwgaXosIGVsZW0sIHJlc3VsdCA9ICcnO1xuICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGFyci5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICBlbGVtID0gYXJyW2ldO1xuICAgICAgICAgICAgcmVzdWx0ICs9IGlzQXJyYXkoZWxlbSkgPyBmbGF0dGVuVG9TdHJpbmcoZWxlbSkgOiBlbGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY29udmVydCBnZW5lcmF0ZWQgdG8gYSBTb3VyY2VOb2RlIHdoZW4gc291cmNlIG1hcHMgYXJlIGVuYWJsZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChnZW5lcmF0ZWQsIG5vZGUpIHtcbiAgICAgICAgaWYgKCFzb3VyY2VNYXApIHtcbiAgICAgICAgICAgIC8vIHdpdGggbm8gc291cmNlIG1hcHMsIGdlbmVyYXRlZCBpcyBlaXRoZXIgYW5cbiAgICAgICAgICAgIC8vIGFycmF5IG9yIGEgc3RyaW5nLiAgaWYgYW4gYXJyYXksIGZsYXR0ZW4gaXQuXG4gICAgICAgICAgICAvLyBpZiBhIHN0cmluZywganVzdCByZXR1cm4gaXRcbiAgICAgICAgICAgIGlmIChpc0FycmF5KGdlbmVyYXRlZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmxhdHRlblRvU3RyaW5nKGdlbmVyYXRlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGdlbmVyYXRlZCBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubG9jID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU291cmNlTm9kZShudWxsLCBudWxsLCBzb3VyY2VNYXAsIGdlbmVyYXRlZCwgbm9kZS5uYW1lIHx8IG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgU291cmNlTm9kZShub2RlLmxvYy5zdGFydC5saW5lLCBub2RlLmxvYy5zdGFydC5jb2x1bW4sIChzb3VyY2VNYXAgPT09IHRydWUgPyBub2RlLmxvYy5zb3VyY2UgfHwgbnVsbCA6IHNvdXJjZU1hcCksIGdlbmVyYXRlZCwgbm9kZS5uYW1lIHx8IG51bGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vRW1wdHlTcGFjZSgpIHtcbiAgICAgICAgcmV0dXJuIChzcGFjZSkgPyBzcGFjZSA6ICcgJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBqb2luKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHZhciBsZWZ0U291cmNlLFxuICAgICAgICAgICAgcmlnaHRTb3VyY2UsXG4gICAgICAgICAgICBsZWZ0Q2hhckNvZGUsXG4gICAgICAgICAgICByaWdodENoYXJDb2RlO1xuXG4gICAgICAgIGxlZnRTb3VyY2UgPSB0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKGxlZnQpLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChsZWZ0U291cmNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtyaWdodF07XG4gICAgICAgIH1cblxuICAgICAgICByaWdodFNvdXJjZSA9IHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmlnaHQpLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChyaWdodFNvdXJjZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbbGVmdF07XG4gICAgICAgIH1cblxuICAgICAgICBsZWZ0Q2hhckNvZGUgPSBsZWZ0U291cmNlLmNoYXJDb2RlQXQobGVmdFNvdXJjZS5sZW5ndGggLSAxKTtcbiAgICAgICAgcmlnaHRDaGFyQ29kZSA9IHJpZ2h0U291cmNlLmNoYXJDb2RlQXQoMCk7XG5cbiAgICAgICAgaWYgKChsZWZ0Q2hhckNvZGUgPT09IDB4MkIgIC8qICsgKi8gfHwgbGVmdENoYXJDb2RlID09PSAweDJEICAvKiAtICovKSAmJiBsZWZ0Q2hhckNvZGUgPT09IHJpZ2h0Q2hhckNvZGUgfHxcbiAgICAgICAgICAgIGVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJQYXJ0RVM1KGxlZnRDaGFyQ29kZSkgJiYgZXN1dGlscy5jb2RlLmlzSWRlbnRpZmllclBhcnRFUzUocmlnaHRDaGFyQ29kZSkgfHxcbiAgICAgICAgICAgIGxlZnRDaGFyQ29kZSA9PT0gMHgyRiAgLyogLyAqLyAmJiByaWdodENoYXJDb2RlID09PSAweDY5ICAvKiBpICovKSB7IC8vIGluZml4IHdvcmQgb3BlcmF0b3JzIGFsbCBzdGFydCB3aXRoIGBpYFxuICAgICAgICAgICAgcmV0dXJuIFtsZWZ0LCBub0VtcHR5U3BhY2UoKSwgcmlnaHRdO1xuICAgICAgICB9IGVsc2UgaWYgKGVzdXRpbHMuY29kZS5pc1doaXRlU3BhY2UobGVmdENoYXJDb2RlKSB8fCBlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihsZWZ0Q2hhckNvZGUpIHx8XG4gICAgICAgICAgICAgICAgZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShyaWdodENoYXJDb2RlKSB8fCBlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihyaWdodENoYXJDb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtsZWZ0LCByaWdodF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtsZWZ0LCBzcGFjZSwgcmlnaHRdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZEluZGVudChzdG10KSB7XG4gICAgICAgIHJldHVybiBbYmFzZSwgc3RtdF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2l0aEluZGVudChmbikge1xuICAgICAgICB2YXIgcHJldmlvdXNCYXNlO1xuICAgICAgICBwcmV2aW91c0Jhc2UgPSBiYXNlO1xuICAgICAgICBiYXNlICs9IGluZGVudDtcbiAgICAgICAgZm4oYmFzZSk7XG4gICAgICAgIGJhc2UgPSBwcmV2aW91c0Jhc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlU3BhY2VzKHN0cikge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgZm9yIChpID0gc3RyLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3Ioc3RyLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChzdHIubGVuZ3RoIC0gMSkgLSBpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkanVzdE11bHRpbGluZUNvbW1lbnQodmFsdWUsIHNwZWNpYWxCYXNlKSB7XG4gICAgICAgIHZhciBhcnJheSwgaSwgbGVuLCBsaW5lLCBqLCBzcGFjZXMsIHByZXZpb3VzQmFzZSwgc247XG5cbiAgICAgICAgYXJyYXkgPSB2YWx1ZS5zcGxpdCgvXFxyXFxufFtcXHJcXG5dLyk7XG4gICAgICAgIHNwYWNlcyA9IE51bWJlci5NQVhfVkFMVUU7XG5cbiAgICAgICAgLy8gZmlyc3QgbGluZSBkb2Vzbid0IGhhdmUgaW5kZW50YXRpb25cbiAgICAgICAgZm9yIChpID0gMSwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIGxpbmUgPSBhcnJheVtpXTtcbiAgICAgICAgICAgIGogPSAwO1xuICAgICAgICAgICAgd2hpbGUgKGogPCBsaW5lLmxlbmd0aCAmJiBlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGxpbmUuY2hhckNvZGVBdChqKSkpIHtcbiAgICAgICAgICAgICAgICArK2o7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3BhY2VzID4gaikge1xuICAgICAgICAgICAgICAgIHNwYWNlcyA9IGo7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHNwZWNpYWxCYXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gcGF0dGVybiBsaWtlXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgIHZhciB0ID0gMjA7ICAvKlxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICogdGhpcyBpcyBjb21tZW50XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIHByZXZpb3VzQmFzZSA9IGJhc2U7XG4gICAgICAgICAgICBpZiAoYXJyYXlbMV1bc3BhY2VzXSA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgc3BlY2lhbEJhc2UgKz0gJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmFzZSA9IHNwZWNpYWxCYXNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNwYWNlcyAmIDEpIHtcbiAgICAgICAgICAgICAgICAvLyAvKlxuICAgICAgICAgICAgICAgIC8vICAqXG4gICAgICAgICAgICAgICAgLy8gICovXG4gICAgICAgICAgICAgICAgLy8gSWYgc3BhY2VzIGFyZSBvZGQgbnVtYmVyLCBhYm92ZSBwYXR0ZXJuIGlzIGNvbnNpZGVyZWQuXG4gICAgICAgICAgICAgICAgLy8gV2Ugd2FzdGUgMSBzcGFjZS5cbiAgICAgICAgICAgICAgICAtLXNwYWNlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXZpb3VzQmFzZSA9IGJhc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAxLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgc24gPSB0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKGFkZEluZGVudChhcnJheVtpXS5zbGljZShzcGFjZXMpKSk7XG4gICAgICAgICAgICBhcnJheVtpXSA9IHNvdXJjZU1hcCA/IHNuLmpvaW4oJycpIDogc247XG4gICAgICAgIH1cblxuICAgICAgICBiYXNlID0gcHJldmlvdXNCYXNlO1xuXG4gICAgICAgIHJldHVybiBhcnJheS5qb2luKCdcXG4nKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZUNvbW1lbnQoY29tbWVudCwgc3BlY2lhbEJhc2UpIHtcbiAgICAgICAgaWYgKGNvbW1lbnQudHlwZSA9PT0gJ0xpbmUnKSB7XG4gICAgICAgICAgICBpZiAoZW5kc1dpdGhMaW5lVGVybWluYXRvcihjb21tZW50LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnLy8nICsgY29tbWVudC52YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVzZSBMaW5lVGVybWluYXRvclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAnLy8nICsgY29tbWVudC52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQmxhbmtMaW5lcykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dHJhLmZvcm1hdC5pbmRlbnQuYWRqdXN0TXVsdGlsaW5lQ29tbWVudCAmJiAvW1xcblxccl0vLnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGp1c3RNdWx0aWxpbmVDb21tZW50KCcvKicgKyBjb21tZW50LnZhbHVlICsgJyovJywgc3BlY2lhbEJhc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnLyonICsgY29tbWVudC52YWx1ZSArICcqLyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkQ29tbWVudHMoc3RtdCwgcmVzdWx0KSB7XG4gICAgICAgIHZhciBpLCBsZW4sIGNvbW1lbnQsIHNhdmUsIHRhaWxpbmdUb1N0YXRlbWVudCwgc3BlY2lhbEJhc2UsIGZyYWdtZW50LFxuICAgICAgICAgICAgZXh0UmFuZ2UsIHJhbmdlLCBwcmV2UmFuZ2UsIHByZWZpeCwgaW5maXgsIHN1ZmZpeCwgY291bnQ7XG5cbiAgICAgICAgaWYgKHN0bXQubGVhZGluZ0NvbW1lbnRzICYmIHN0bXQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNhdmUgPSByZXN1bHQ7XG5cbiAgICAgICAgICAgIGlmIChwcmVzZXJ2ZUJsYW5rTGluZXMpIHtcbiAgICAgICAgICAgICAgICBjb21tZW50ID0gc3RtdC5sZWFkaW5nQ29tbWVudHNbMF07XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgICAgICBleHRSYW5nZSA9IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZTtcbiAgICAgICAgICAgICAgICByYW5nZSA9IGNvbW1lbnQucmFuZ2U7XG5cbiAgICAgICAgICAgICAgICBwcmVmaXggPSBzb3VyY2VDb2RlLnN1YnN0cmluZyhleHRSYW5nZVswXSwgcmFuZ2VbMF0pO1xuICAgICAgICAgICAgICAgIGNvdW50ID0gKHByZWZpeC5tYXRjaCgvXFxuL2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzdHJpbmdSZXBlYXQoJ1xcbicsIGNvdW50KSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFkZEluZGVudChnZW5lcmF0ZUNvbW1lbnQoY29tbWVudCkpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwcmVmaXgpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChnZW5lcmF0ZUNvbW1lbnQoY29tbWVudCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHByZXZSYW5nZSA9IHJhbmdlO1xuXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMSwgbGVuID0gc3RtdC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHN0bXQubGVhZGluZ0NvbW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGNvbW1lbnQucmFuZ2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaW5maXggPSBzb3VyY2VDb2RlLnN1YnN0cmluZyhwcmV2UmFuZ2VbMV0sIHJhbmdlWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSAoaW5maXgubWF0Y2goL1xcbi9nKSB8fCBbXSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzdHJpbmdSZXBlYXQoJ1xcbicsIGNvdW50KSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFkZEluZGVudChnZW5lcmF0ZUNvbW1lbnQoY29tbWVudCkpKTtcblxuICAgICAgICAgICAgICAgICAgICBwcmV2UmFuZ2UgPSByYW5nZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdWZmaXggPSBzb3VyY2VDb2RlLnN1YnN0cmluZyhyYW5nZVsxXSwgZXh0UmFuZ2VbMV0pO1xuICAgICAgICAgICAgICAgIGNvdW50ID0gKHN1ZmZpeC5tYXRjaCgvXFxuL2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc3RyaW5nUmVwZWF0KCdcXG4nLCBjb3VudCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb21tZW50ID0gc3RtdC5sZWFkaW5nQ29tbWVudHNbMF07XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHNhZmVDb25jYXRlbmF0aW9uICYmIHN0bXQudHlwZSA9PT0gU3ludGF4LlByb2dyYW0gJiYgc3RtdC5ib2R5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlbmVyYXRlQ29tbWVudChjb21tZW50KSk7XG4gICAgICAgICAgICAgICAgaWYgKCFlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMSwgbGVuID0gc3RtdC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHN0bXQubGVhZGluZ0NvbW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IFtnZW5lcmF0ZUNvbW1lbnQoY29tbWVudCldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZHNXaXRoTGluZVRlcm1pbmF0b3IodG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChmcmFnbWVudCkudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LnB1c2goJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFkZEluZGVudChmcmFnbWVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0LnB1c2goYWRkSW5kZW50KHNhdmUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdG10LnRyYWlsaW5nQ29tbWVudHMpIHtcblxuICAgICAgICAgICAgaWYgKHByZXNlcnZlQmxhbmtMaW5lcykge1xuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzdG10LnRyYWlsaW5nQ29tbWVudHNbMF07XG4gICAgICAgICAgICAgICAgZXh0UmFuZ2UgPSBjb21tZW50LmV4dGVuZGVkUmFuZ2U7XG4gICAgICAgICAgICAgICAgcmFuZ2UgPSBjb21tZW50LnJhbmdlO1xuXG4gICAgICAgICAgICAgICAgcHJlZml4ID0gc291cmNlQ29kZS5zdWJzdHJpbmcoZXh0UmFuZ2VbMF0sIHJhbmdlWzBdKTtcbiAgICAgICAgICAgICAgICBjb3VudCA9IChwcmVmaXgubWF0Y2goL1xcbi9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzdHJpbmdSZXBlYXQoJ1xcbicsIGNvdW50KSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFkZEluZGVudChnZW5lcmF0ZUNvbW1lbnQoY29tbWVudCkpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwcmVmaXgpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChnZW5lcmF0ZUNvbW1lbnQoY29tbWVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFpbGluZ1RvU3RhdGVtZW50ID0gIWVuZHNXaXRoTGluZVRlcm1pbmF0b3IodG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIHNwZWNpYWxCYXNlID0gc3RyaW5nUmVwZWF0KCcgJywgY2FsY3VsYXRlU3BhY2VzKHRvU291cmNlTm9kZVdoZW5OZWVkZWQoW2Jhc2UsIHJlc3VsdCwgaW5kZW50XSkudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHN0bXQudHJhaWxpbmdDb21tZW50cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc3RtdC50cmFpbGluZ0NvbW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFpbGluZ1RvU3RhdGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBhc3N1bWUgdGFyZ2V0IGxpa2UgZm9sbG93aW5nIHNjcmlwdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhciB0ID0gMjA7ICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgKiBUaGlzIGlzIGNvbW1lbnQgb2YgdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdCBjYXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdCwgaW5kZW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdCwgc3BlY2lhbEJhc2VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ2VuZXJhdGVDb21tZW50KGNvbW1lbnQsIHNwZWNpYWxCYXNlKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0LCBhZGRJbmRlbnQoZ2VuZXJhdGVDb21tZW50KGNvbW1lbnQpKV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IGxlbiAtIDEgJiYgIWVuZHNXaXRoTGluZVRlcm1pbmF0b3IodG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQpLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0LCAnXFxuJ107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlQmxhbmtMaW5lcyhzdGFydCwgZW5kLCByZXN1bHQpIHtcbiAgICAgICAgdmFyIGosIG5ld2xpbmVDb3VudCA9IDA7XG5cbiAgICAgICAgZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykge1xuICAgICAgICAgICAgaWYgKHNvdXJjZUNvZGVbal0gPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgbmV3bGluZUNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGogPSAxOyBqIDwgbmV3bGluZUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyZW50aGVzaXplKHRleHQsIGN1cnJlbnQsIHNob3VsZCkge1xuICAgICAgICBpZiAoY3VycmVudCA8IHNob3VsZCkge1xuICAgICAgICAgICAgcmV0dXJuIFsnKCcsIHRleHQsICcpJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVWZXJiYXRpbVN0cmluZyhzdHJpbmcpIHtcbiAgICAgICAgdmFyIGksIGl6LCByZXN1bHQ7XG4gICAgICAgIHJlc3VsdCA9IHN0cmluZy5zcGxpdCgvXFxyXFxufFxcbi8pO1xuICAgICAgICBmb3IgKGkgPSAxLCBpeiA9IHJlc3VsdC5sZW5ndGg7IGkgPCBpejsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHRbaV0gPSBuZXdsaW5lICsgYmFzZSArIHJlc3VsdFtpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlVmVyYmF0aW0oZXhwciwgcHJlY2VkZW5jZSkge1xuICAgICAgICB2YXIgdmVyYmF0aW0sIHJlc3VsdCwgcHJlYztcbiAgICAgICAgdmVyYmF0aW0gPSBleHByW2V4dHJhLnZlcmJhdGltXTtcblxuICAgICAgICBpZiAodHlwZW9mIHZlcmJhdGltID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzdWx0ID0gcGFyZW50aGVzaXplKGdlbmVyYXRlVmVyYmF0aW1TdHJpbmcodmVyYmF0aW0pLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBwcmVjZWRlbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHZlcmJhdGltIGlzIG9iamVjdFxuICAgICAgICAgICAgcmVzdWx0ID0gZ2VuZXJhdGVWZXJiYXRpbVN0cmluZyh2ZXJiYXRpbS5jb250ZW50KTtcbiAgICAgICAgICAgIHByZWMgPSAodmVyYmF0aW0ucHJlY2VkZW5jZSAhPSBudWxsKSA/IHZlcmJhdGltLnByZWNlZGVuY2UgOiBQcmVjZWRlbmNlLlNlcXVlbmNlO1xuICAgICAgICAgICAgcmVzdWx0ID0gcGFyZW50aGVzaXplKHJlc3VsdCwgcHJlYywgcHJlY2VkZW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQsIGV4cHIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIENvZGVHZW5lcmF0b3IoKSB7XG4gICAgfVxuXG4gICAgLy8gSGVscGVycy5cblxuICAgIENvZGVHZW5lcmF0b3IucHJvdG90eXBlLm1heWJlQmxvY2sgPSBmdW5jdGlvbihzdG10LCBmbGFncykge1xuICAgICAgICB2YXIgcmVzdWx0LCBub0xlYWRpbmdDb21tZW50LCB0aGF0ID0gdGhpcztcblxuICAgICAgICBub0xlYWRpbmdDb21tZW50ID0gIWV4dHJhLmNvbW1lbnQgfHwgIXN0bXQubGVhZGluZ0NvbW1lbnRzO1xuXG4gICAgICAgIGlmIChzdG10LnR5cGUgPT09IFN5bnRheC5CbG9ja1N0YXRlbWVudCAmJiBub0xlYWRpbmdDb21tZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW3NwYWNlLCB0aGlzLmdlbmVyYXRlU3RhdGVtZW50KHN0bXQsIGZsYWdzKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RtdC50eXBlID09PSBTeW50YXguRW1wdHlTdGF0ZW1lbnQgJiYgbm9MZWFkaW5nQ29tbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuICc7JztcbiAgICAgICAgfVxuXG4gICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gW1xuICAgICAgICAgICAgICAgIG5ld2xpbmUsXG4gICAgICAgICAgICAgICAgYWRkSW5kZW50KHRoYXQuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdCwgZmxhZ3MpKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgQ29kZUdlbmVyYXRvci5wcm90b3R5cGUubWF5YmVCbG9ja1N1ZmZpeCA9IGZ1bmN0aW9uIChzdG10LCByZXN1bHQpIHtcbiAgICAgICAgdmFyIGVuZHMgPSBlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS50b1N0cmluZygpKTtcbiAgICAgICAgaWYgKHN0bXQudHlwZSA9PT0gU3ludGF4LkJsb2NrU3RhdGVtZW50ICYmICghZXh0cmEuY29tbWVudCB8fCAhc3RtdC5sZWFkaW5nQ29tbWVudHMpICYmICFlbmRzKSB7XG4gICAgICAgICAgICByZXR1cm4gW3Jlc3VsdCwgc3BhY2VdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmRzKSB7XG4gICAgICAgICAgICByZXR1cm4gW3Jlc3VsdCwgYmFzZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtyZXN1bHQsIG5ld2xpbmUsIGJhc2VdO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZUlkZW50aWZpZXIobm9kZSkge1xuICAgICAgICByZXR1cm4gdG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChub2RlLm5hbWUsIG5vZGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlQXN5bmNQcmVmaXgobm9kZSwgc3BhY2VSZXF1aXJlZCkge1xuICAgICAgICByZXR1cm4gbm9kZS5hc3luYyA/ICdhc3luYycgKyAoc3BhY2VSZXF1aXJlZCA/IG5vRW1wdHlTcGFjZSgpIDogc3BhY2UpIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVTdGFyU3VmZml4KG5vZGUpIHtcbiAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0gbm9kZS5nZW5lcmF0b3IgJiYgIWV4dHJhLm1vei5zdGFybGVzc0dlbmVyYXRvcjtcbiAgICAgICAgcmV0dXJuIGlzR2VuZXJhdG9yID8gJyonICsgc3BhY2UgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZU1ldGhvZFByZWZpeChwcm9wKSB7XG4gICAgICAgIHZhciBmdW5jID0gcHJvcC52YWx1ZTtcbiAgICAgICAgaWYgKGZ1bmMuYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUFzeW5jUHJlZml4KGZ1bmMsICFwcm9wLmNvbXB1dGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGF2b2lkIHNwYWNlIGJlZm9yZSBtZXRob2QgbmFtZVxuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlU3RhclN1ZmZpeChmdW5jKSA/ICcqJyA6ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQ29kZUdlbmVyYXRvci5wcm90b3R5cGUuZ2VuZXJhdGVQYXR0ZXJuID0gZnVuY3Rpb24gKG5vZGUsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVJZGVudGlmaWVyKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihub2RlLCBwcmVjZWRlbmNlLCBmbGFncyk7XG4gICAgfTtcblxuICAgIENvZGVHZW5lcmF0b3IucHJvdG90eXBlLmdlbmVyYXRlRnVuY3Rpb25QYXJhbXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgaSwgaXosIHJlc3VsdCwgaGFzRGVmYXVsdDtcblxuICAgICAgICBoYXNEZWZhdWx0ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uICYmXG4gICAgICAgICAgICAgICAgIW5vZGUucmVzdCAmJiAoIW5vZGUuZGVmYXVsdHMgfHwgbm9kZS5kZWZhdWx0cy5sZW5ndGggPT09IDApICYmXG4gICAgICAgICAgICAgICAgbm9kZS5wYXJhbXMubGVuZ3RoID09PSAxICYmIG5vZGUucGFyYW1zWzBdLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAvLyBhcmcgPT4geyB9IGNhc2VcbiAgICAgICAgICAgIHJlc3VsdCA9IFtnZW5lcmF0ZUFzeW5jUHJlZml4KG5vZGUsIHRydWUpLCBnZW5lcmF0ZUlkZW50aWZpZXIobm9kZS5wYXJhbXNbMF0pXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUudHlwZSA9PT0gU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uID8gW2dlbmVyYXRlQXN5bmNQcmVmaXgobm9kZSwgZmFsc2UpXSA6IFtdO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goJygnKTtcbiAgICAgICAgICAgIGlmIChub2RlLmRlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgaGFzRGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUucGFyYW1zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzRGVmYXVsdCAmJiBub2RlLmRlZmF1bHRzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBkZWZhdWx0IHZhbHVlcy5cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5nZW5lcmF0ZUFzc2lnbm1lbnQobm9kZS5wYXJhbXNbaV0sIG5vZGUuZGVmYXVsdHNbaV0sICc9JywgUHJlY2VkZW5jZS5Bc3NpZ25tZW50LCBFX1RUVCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVQYXR0ZXJuKG5vZGUucGFyYW1zW2ldLCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyArIHNwYWNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlLnJlc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5wYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyArIHNwYWNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJy4uLicpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlbmVyYXRlSWRlbnRpZmllcihub2RlLnJlc3QpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0LnB1c2goJyknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIENvZGVHZW5lcmF0b3IucHJvdG90eXBlLmdlbmVyYXRlRnVuY3Rpb25Cb2R5ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCwgZXhwcjtcblxuICAgICAgICByZXN1bHQgPSB0aGlzLmdlbmVyYXRlRnVuY3Rpb25QYXJhbXMobm9kZSk7XG5cbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChzcGFjZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCgnPT4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNwYWNlKTtcbiAgICAgICAgICAgIGV4cHIgPSB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihub2RlLmJvZHksIFByZWNlZGVuY2UuQXNzaWdubWVudCwgRV9UVFQpO1xuICAgICAgICAgICAgaWYgKGV4cHIudG9TdHJpbmcoKS5jaGFyQXQoMCkgPT09ICd7Jykge1xuICAgICAgICAgICAgICAgIGV4cHIgPSBbJygnLCBleHByLCAnKSddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goZXhwcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLm1heWJlQmxvY2sobm9kZS5ib2R5LCBTX1RURkYpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIENvZGVHZW5lcmF0b3IucHJvdG90eXBlLmdlbmVyYXRlSXRlcmF0aW9uRm9yU3RhdGVtZW50ID0gZnVuY3Rpb24gKG9wZXJhdG9yLCBzdG10LCBmbGFncykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gWydmb3InICsgc3BhY2UgKyAnKCddLCB0aGF0ID0gdGhpcztcbiAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoc3RtdC5sZWZ0LnR5cGUgPT09IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHN0bXQubGVmdC5raW5kICsgbm9FbXB0eVNwYWNlKCkpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGF0LmdlbmVyYXRlU3RhdGVtZW50KHN0bXQubGVmdC5kZWNsYXJhdGlvbnNbMF0sIFNfRkZGRikpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LmxlZnQsIFByZWNlZGVuY2UuQ2FsbCwgRV9UVFQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIG9wZXJhdG9yKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IFtqb2luKFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICB0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnJpZ2h0LCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVClcbiAgICAgICAgICAgICksICcpJ107XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQucHVzaCh0aGlzLm1heWJlQmxvY2soc3RtdC5ib2R5LCBmbGFncykpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBDb2RlR2VuZXJhdG9yLnByb3RvdHlwZS5nZW5lcmF0ZVByb3BlcnR5S2V5ID0gZnVuY3Rpb24gKGV4cHIsIGNvbXB1dGVkLCB2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgaWYgKGNvbXB1dGVkKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCgnWycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT09ICdBc3NpZ25tZW50UGF0dGVybicpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuQXNzaWdubWVudFBhdHRlcm4odmFsdWUsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXB1dGVkKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCgnXScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgQ29kZUdlbmVyYXRvci5wcm90b3R5cGUuZ2VuZXJhdGVBc3NpZ25tZW50ID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBvcGVyYXRvciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgaWYgKFByZWNlZGVuY2UuQXNzaWdubWVudCA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIGZsYWdzIHw9IEZfQUxMT1dfSU47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGxlZnQsIFByZWNlZGVuY2UuQ2FsbCwgZmxhZ3MpLFxuICAgICAgICAgICAgICAgIHNwYWNlICsgb3BlcmF0b3IgKyBzcGFjZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihyaWdodCwgUHJlY2VkZW5jZS5Bc3NpZ25tZW50LCBmbGFncylcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsXG4gICAgICAgICAgICBwcmVjZWRlbmNlXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIENvZGVHZW5lcmF0b3IucHJvdG90eXBlLnNlbWljb2xvbiA9IGZ1bmN0aW9uIChmbGFncykge1xuICAgICAgICBpZiAoIXNlbWljb2xvbnMgJiYgZmxhZ3MgJiBGX1NFTUlDT0xPTl9PUFQpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzsnO1xuICAgIH07XG5cbiAgICAvLyBTdGF0ZW1lbnRzLlxuXG4gICAgQ29kZUdlbmVyYXRvci5TdGF0ZW1lbnQgPSB7XG5cbiAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJhbmdlLCBjb250ZW50LCByZXN1bHQgPSBbJ3snLCBuZXdsaW5lXSwgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBmdW5jdGlvbnMgd2l0aG91dCBhbnkgY29kZVxuICAgICAgICAgICAgICAgIGlmIChzdG10LmJvZHkubGVuZ3RoID09PSAwICYmIHByZXNlcnZlQmxhbmtMaW5lcykge1xuICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHN0bXQucmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZVsxXSAtIHJhbmdlWzBdID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHNvdXJjZUNvZGUuc3Vic3RyaW5nKHJhbmdlWzBdICsgMSwgcmFuZ2VbMV0gLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50WzBdID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFsneyddO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgaSwgaXosIGZyYWdtZW50LCBib2R5RmxhZ3M7XG4gICAgICAgICAgICAgICAgYm9keUZsYWdzID0gU19URkZGO1xuICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZfRlVOQ19CT0RZKSB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHlGbGFncyB8PSBGX0RJUkVDVElWRV9DVFg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBzdG10LmJvZHkubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2VydmVCbGFua0xpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgc3BhY2VzIGJlZm9yZSB0aGUgZmlyc3QgbGluZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RtdC5ib2R5WzBdLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHN0bXQuYm9keVswXS5sZWFkaW5nQ29tbWVudHNbMF0uZXh0ZW5kZWRSYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHNvdXJjZUNvZGUuc3Vic3RyaW5nKHJhbmdlWzBdLCByYW5nZVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50WzBdID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gWyd7J107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG10LmJvZHlbMF0ubGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQmxhbmtMaW5lcyhzdG10LnJhbmdlWzBdLCBzdG10LmJvZHlbMF0ucmFuZ2VbMF0sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgc3BhY2VzIGJldHdlZW4gbGluZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RtdC5ib2R5W2kgLSAxXS50cmFpbGluZ0NvbW1lbnRzICAmJiAhc3RtdC5ib2R5W2ldLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUJsYW5rTGluZXMoc3RtdC5ib2R5W2kgLSAxXS5yYW5nZVsxXSwgc3RtdC5ib2R5W2ldLnJhbmdlWzBdLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBpeiAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlGbGFncyB8PSBGX1NFTUlDT0xPTl9PUFQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RtdC5ib2R5W2ldLmxlYWRpbmdDb21tZW50cyAmJiBwcmVzZXJ2ZUJsYW5rTGluZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gdGhhdC5nZW5lcmF0ZVN0YXRlbWVudChzdG10LmJvZHlbaV0sIGJvZHlGbGFncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGFkZEluZGVudCh0aGF0LmdlbmVyYXRlU3RhdGVtZW50KHN0bXQuYm9keVtpXSwgYm9keUZsYWdzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmcmFnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZW5kc1dpdGhMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKGZyYWdtZW50KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNlcnZlQmxhbmtMaW5lcyAmJiBpIDwgaXogLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgYWRkIGEgbmV3IGxpbmUgaWYgdGhlcmUgYXJlIGxlYWRpbmcgY29tZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBuZXh0IHN0YXRlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RtdC5ib2R5W2kgKyAxXS5sZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3bGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmVzZXJ2ZUJsYW5rTGluZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBzcGFjZXMgYWZ0ZXIgdGhlIGxhc3QgbGluZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGl6IC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RtdC5ib2R5W2ldLnRyYWlsaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVCbGFua0xpbmVzKHN0bXQuYm9keVtpXS5yYW5nZVsxXSwgc3RtdC5yYW5nZVsxXSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmVzdWx0LnB1c2goYWRkSW5kZW50KCd9JykpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBCcmVha1N0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICBpZiAoc3RtdC5sYWJlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnYnJlYWsgJyArIHN0bXQubGFiZWwubmFtZSArIHRoaXMuc2VtaWNvbG9uKGZsYWdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnYnJlYWsnICsgdGhpcy5zZW1pY29sb24oZmxhZ3MpO1xuICAgICAgICB9LFxuXG4gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIGlmIChzdG10LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdjb250aW51ZSAnICsgc3RtdC5sYWJlbC5uYW1lICsgdGhpcy5zZW1pY29sb24oZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdjb250aW51ZScgKyB0aGlzLnNlbWljb2xvbihmbGFncyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgQ2xhc3NCb2R5OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbICd7JywgbmV3bGluZV0sIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICB3aXRoSW5kZW50KGZ1bmN0aW9uIChpbmRlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSwgaXo7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHN0bXQuYm9keS5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGluZGVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuYm9keVtpXSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgaXopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghZW5kc1dpdGhMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKHJlc3VsdCkudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGJhc2UpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goJ30nKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBmcmFnbWVudDtcbiAgICAgICAgICAgIHJlc3VsdCAgPSBbJ2NsYXNzJ107XG4gICAgICAgICAgICBpZiAoc3RtdC5pZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LmlkLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0bXQuc3VwZXJDbGFzcykge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gam9pbignZXh0ZW5kcycsIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuc3VwZXJDbGFzcywgUHJlY2VkZW5jZS5Bc3NpZ25tZW50LCBFX1RUVCkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCBmcmFnbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChzcGFjZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmdlbmVyYXRlU3RhdGVtZW50KHN0bXQuYm9keSwgU19URkZUKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIERpcmVjdGl2ZVN0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICBpZiAoZXh0cmEucmF3ICYmIHN0bXQucmF3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0bXQucmF3ICsgdGhpcy5zZW1pY29sb24oZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVzY2FwZURpcmVjdGl2ZShzdG10LmRpcmVjdGl2ZSkgKyB0aGlzLnNlbWljb2xvbihmbGFncyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBkbyA0MiB3aGlsZSAoY29uZClgIGlzIFN5bnRheCBFcnJvci4gV2UgbmVlZCBzZW1pY29sb24uXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gam9pbignZG8nLCB0aGlzLm1heWJlQmxvY2soc3RtdC5ib2R5LCBTX1RGRkYpKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWF5YmVCbG9ja1N1ZmZpeChzdG10LmJvZHksIHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm4gam9pbihyZXN1bHQsIFtcbiAgICAgICAgICAgICAgICAnd2hpbGUnICsgc3BhY2UgKyAnKCcsXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC50ZXN0LCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCksXG4gICAgICAgICAgICAgICAgJyknICsgdGhpcy5zZW1pY29sb24oZmxhZ3MpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfSxcblxuICAgICAgICBDYXRjaENsYXVzZTogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBndWFyZDtcblxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ2NhdGNoJyArIHNwYWNlICsgJygnLFxuICAgICAgICAgICAgICAgICAgICB0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnBhcmFtLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCksXG4gICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RtdC5ndWFyZCkge1xuICAgICAgICAgICAgICAgICAgICBndWFyZCA9IHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuZ3VhcmQsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNwbGljZSgyLCAwLCAnIGlmICcsIGd1YXJkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMubWF5YmVCbG9jayhzdG10LmJvZHksIFNfVEZGRikpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2RlYnVnZ2VyJyArIHRoaXMuc2VtaWNvbG9uKGZsYWdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBFbXB0eVN0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gJzsnO1xuICAgICAgICB9LFxuXG4gICAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gWyAnZXhwb3J0JyBdLCBib2R5RmxhZ3M7XG5cbiAgICAgICAgICAgIGJvZHlGbGFncyA9IChmbGFncyAmIEZfU0VNSUNPTE9OX09QVCkgPyBTX1RGRlQgOiBTX1RGRkY7XG5cbiAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IEhvaXN0YWJsZURlY2xhcmF0aW9uW0RlZmF1bHRdXG4gICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBBc3NpZ25tZW50RXhwcmVzc2lvbltJbl0gO1xuICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsICdkZWZhdWx0Jyk7XG4gICAgICAgICAgICBpZiAoaXNTdGF0ZW1lbnQoc3RtdC5kZWNsYXJhdGlvbikpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgdGhpcy5nZW5lcmF0ZVN0YXRlbWVudChzdG10LmRlY2xhcmF0aW9uLCBib2R5RmxhZ3MpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuZGVjbGFyYXRpb24sIFByZWNlZGVuY2UuQXNzaWdubWVudCwgRV9UVFQpICsgdGhpcy5zZW1pY29sb24oZmxhZ3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gWyAnZXhwb3J0JyBdLCBib2R5RmxhZ3MsIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICBib2R5RmxhZ3MgPSAoZmxhZ3MgJiBGX1NFTUlDT0xPTl9PUFQpID8gU19URkZUIDogU19URkZGO1xuXG4gICAgICAgICAgICAvLyBleHBvcnQgVmFyaWFibGVTdGF0ZW1lbnRcbiAgICAgICAgICAgIC8vIGV4cG9ydCBEZWNsYXJhdGlvbltEZWZhdWx0XVxuICAgICAgICAgICAgaWYgKHN0bXQuZGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gam9pbihyZXN1bHQsIHRoaXMuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdC5kZWNsYXJhdGlvbiwgYm9keUZsYWdzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGV4cG9ydCBFeHBvcnRDbGF1c2VbTm9SZWZlcmVuY2VdIEZyb21DbGF1c2UgO1xuICAgICAgICAgICAgLy8gZXhwb3J0IEV4cG9ydENsYXVzZSA7XG4gICAgICAgICAgICBpZiAoc3RtdC5zcGVjaWZpZXJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0bXQuc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsICd7JyArIHNwYWNlICsgJ30nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0bXQuc3BlY2lmaWVyc1swXS50eXBlID09PSBTeW50YXguRXhwb3J0QmF0Y2hTcGVjaWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuc3BlY2lmaWVyc1swXSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgJ3snKTtcbiAgICAgICAgICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoaW5kZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gc3RtdC5zcGVjaWZpZXJzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpbmRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuc3BlY2lmaWVyc1tpXSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBpeikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLCcgKyBuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZHNXaXRoTGluZVRlcm1pbmF0b3IodG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQpLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiYXNlICsgJ30nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RtdC5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tJyArIHNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW9kdWxlU3BlY2lmaWVyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnNvdXJjZSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW1pY29sb24oZmxhZ3MpXG4gICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuc2VtaWNvbG9uKGZsYWdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICAvLyBleHBvcnQgKiBGcm9tQ2xhdXNlIDtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgJ2V4cG9ydCcgKyBzcGFjZSxcbiAgICAgICAgICAgICAgICAnKicgKyBzcGFjZSxcbiAgICAgICAgICAgICAgICAnZnJvbScgKyBzcGFjZSxcbiAgICAgICAgICAgICAgICAvLyBNb2R1bGVTcGVjaWZpZXJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnNvdXJjZSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VtaWNvbG9uKGZsYWdzKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcblxuICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGZyYWdtZW50O1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBpc0NsYXNzUHJlZml4ZWQoZnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29kZTtcbiAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnQuc2xpY2UoMCwgNSkgIT09ICdjbGFzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2RlID0gZnJhZ21lbnQuY2hhckNvZGVBdCg1KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29kZSA9PT0gMHg3QiAgLyogJ3snICovIHx8IGVzdXRpbHMuY29kZS5pc1doaXRlU3BhY2UoY29kZSkgfHwgZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY29kZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb25QcmVmaXhlZChmcmFnbWVudCkge1xuICAgICAgICAgICAgICAgIHZhciBjb2RlO1xuICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudC5zbGljZSgwLCA4KSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvZGUgPSBmcmFnbWVudC5jaGFyQ29kZUF0KDgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2RlID09PSAweDI4IC8qICcoJyAqLyB8fCBlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNvZGUpIHx8IGNvZGUgPT09IDB4MkEgIC8qICcqJyAqLyB8fCBlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjb2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gaXNBc3luY1ByZWZpeGVkKGZyYWdtZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvZGUsIGksIGl6O1xuICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudC5zbGljZSgwLCA1KSAhPT0gJ2FzeW5jJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShmcmFnbWVudC5jaGFyQ29kZUF0KDUpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDYsIGl6ID0gZnJhZ21lbnQubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc1doaXRlU3BhY2UoZnJhZ21lbnQuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpID09PSBpeikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudC5zbGljZShpLCBpICsgOCkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2RlID0gZnJhZ21lbnQuY2hhckNvZGVBdChpICsgOCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUgPT09IDB4MjggLyogJygnICovIHx8IGVzdXRpbHMuY29kZS5pc1doaXRlU3BhY2UoY29kZSkgfHwgY29kZSA9PT0gMHgyQSAgLyogJyonICovIHx8IGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNvZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQgPSBbdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5leHByZXNzaW9uLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCldO1xuICAgICAgICAgICAgLy8gMTIuNCAneycsICdmdW5jdGlvbicsICdjbGFzcycgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBwb3NpdGlvbi5cbiAgICAgICAgICAgIC8vIHdyYXAgZXhwcmVzc2lvbiB3aXRoIHBhcmVudGhlc2VzXG4gICAgICAgICAgICBmcmFnbWVudCA9IHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKGZyYWdtZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4N0IgIC8qICd7JyAqLyB8fCAgLy8gT2JqZWN0RXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgICBpc0NsYXNzUHJlZml4ZWQoZnJhZ21lbnQpIHx8XG4gICAgICAgICAgICAgICAgICAgIGlzRnVuY3Rpb25QcmVmaXhlZChmcmFnbWVudCkgfHxcbiAgICAgICAgICAgICAgICAgICAgaXNBc3luY1ByZWZpeGVkKGZyYWdtZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAoZGlyZWN0aXZlICYmIChmbGFncyAmIEZfRElSRUNUSVZFX0NUWCkgJiYgc3RtdC5leHByZXNzaW9uLnR5cGUgPT09IFN5bnRheC5MaXRlcmFsICYmIHR5cGVvZiBzdG10LmV4cHJlc3Npb24udmFsdWUgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFsnKCcsIHJlc3VsdCwgJyknICsgdGhpcy5zZW1pY29sb24oZmxhZ3MpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5zZW1pY29sb24oZmxhZ3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgLy8gRVM2OiAxNS4yLjEgdmFsaWQgaW1wb3J0IGRlY2xhcmF0aW9uczpcbiAgICAgICAgICAgIC8vICAgICAtIGltcG9ydCBJbXBvcnRDbGF1c2UgRnJvbUNsYXVzZSA7XG4gICAgICAgICAgICAvLyAgICAgLSBpbXBvcnQgTW9kdWxlU3BlY2lmaWVyIDtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGN1cnNvciwgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIC8vIElmIG5vIEltcG9ydENsYXVzZSBpcyBwcmVzZW50LFxuICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgYGltcG9ydCBNb2R1bGVTcGVjaWZpZXJgIHNvIHNraXAgYGZyb21gXG4gICAgICAgICAgICAvLyBNb2R1bGVTcGVjaWZpZXIgaXMgU3RyaW5nTGl0ZXJhbC5cbiAgICAgICAgICAgIGlmIChzdG10LnNwZWNpZmllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gaW1wb3J0IE1vZHVsZVNwZWNpZmllciA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCcsXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAvLyBNb2R1bGVTcGVjaWZpZXJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5zb3VyY2UsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW1pY29sb24oZmxhZ3MpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW1wb3J0IEltcG9ydENsYXVzZSBGcm9tQ2xhdXNlIDtcbiAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAnaW1wb3J0J1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGN1cnNvciA9IDA7XG5cbiAgICAgICAgICAgIC8vIEltcG9ydGVkQmluZGluZ1xuICAgICAgICAgICAgaWYgKHN0bXQuc3BlY2lmaWVyc1tjdXJzb3JdLnR5cGUgPT09IFN5bnRheC5JbXBvcnREZWZhdWx0U3BlY2lmaWVyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuc3BlY2lmaWVyc1tjdXJzb3JdLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVClcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICArK2N1cnNvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0bXQuc3BlY2lmaWVyc1tjdXJzb3JdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnNvciAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdG10LnNwZWNpZmllcnNbY3Vyc29yXS50eXBlID09PSBTeW50YXguSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5hbWVTcGFjZUltcG9ydFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuc3BlY2lmaWVyc1tjdXJzb3JdLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVClcbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTmFtZWRJbXBvcnRzXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNwYWNlICsgJ3snKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoKHN0bXQuc3BlY2lmaWVycy5sZW5ndGggLSBjdXJzb3IpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBvcnQgeyAuLi4gfSBmcm9tIFwiLi4uXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnNwZWNpZmllcnNbY3Vyc29yXSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNwYWNlICsgJ30nICsgc3BhY2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1wb3J0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIC4uLixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIC4uLixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0gZnJvbSBcIi4uLlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoaW5kZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGl6O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGN1cnNvciwgaXogPSBzdG10LnNwZWNpZmllcnMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpbmRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnNwZWNpZmllcnNbaV0sIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLCcgKyBuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYmFzZSArICd9JyArIHNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIFtcbiAgICAgICAgICAgICAgICAnZnJvbScgKyBzcGFjZSxcbiAgICAgICAgICAgICAgICAvLyBNb2R1bGVTcGVjaWZpZXJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnNvdXJjZSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VtaWNvbG9uKGZsYWdzKVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgaXRlbUZsYWdzID0gKGZsYWdzICYgRl9BTExPV19JTikgPyBFX1RUVCA6IEVfRlRUO1xuICAgICAgICAgICAgaWYgKHN0bXQuaW5pdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuaWQsIFByZWNlZGVuY2UuQXNzaWdubWVudCwgaXRlbUZsYWdzKSxcbiAgICAgICAgICAgICAgICAgICAgc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICc9JyxcbiAgICAgICAgICAgICAgICAgICAgc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuaW5pdCwgUHJlY2VkZW5jZS5Bc3NpZ25tZW50LCBpdGVtRmxhZ3MpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlUGF0dGVybihzdG10LmlkLCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIGl0ZW1GbGFncyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICAvLyBWYXJpYWJsZURlY2xhcmF0b3IgaXMgdHlwZWQgYXMgU3RhdGVtZW50LFxuICAgICAgICAgICAgLy8gYnV0IGpvaW5lZCB3aXRoIGNvbW1hIChub3QgTGluZVRlcm1pbmF0b3IpLlxuICAgICAgICAgICAgLy8gU28gaWYgY29tbWVudCBpcyBhdHRhY2hlZCB0byB0YXJnZXQgbm9kZSwgd2Ugc2hvdWxkIHNwZWNpYWxpemUuXG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBpLCBpeiwgbm9kZSwgYm9keUZsYWdzLCB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgcmVzdWx0ID0gWyBzdG10LmtpbmQgXTtcblxuICAgICAgICAgICAgYm9keUZsYWdzID0gKGZsYWdzICYgRl9BTExPV19JTikgPyBTX1RGRkYgOiBTX0ZGRkY7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGJsb2NrKCkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBzdG10LmRlY2xhcmF0aW9uc1swXTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudCAmJiBub2RlLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFkZEluZGVudCh0aGF0LmdlbmVyYXRlU3RhdGVtZW50KG5vZGUsIGJvZHlGbGFncykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub0VtcHR5U3BhY2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVTdGF0ZW1lbnQobm9kZSwgYm9keUZsYWdzKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMSwgaXogPSBzdG10LmRlY2xhcmF0aW9ucy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzdG10LmRlY2xhcmF0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnQgJiYgbm9kZS5sZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyArIG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYWRkSW5kZW50KHRoYXQuZ2VuZXJhdGVTdGF0ZW1lbnQobm9kZSwgYm9keUZsYWdzKSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJywnICsgc3BhY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhhdC5nZW5lcmF0ZVN0YXRlbWVudChub2RlLCBib2R5RmxhZ3MpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0bXQuZGVjbGFyYXRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB3aXRoSW5kZW50KGJsb2NrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYmxvY2soKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5zZW1pY29sb24oZmxhZ3MpKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gW2pvaW4oXG4gICAgICAgICAgICAgICAgJ3Rocm93JyxcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LmFyZ3VtZW50LCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVClcbiAgICAgICAgICAgICksIHRoaXMuc2VtaWNvbG9uKGZsYWdzKV07XG4gICAgICAgIH0sXG5cbiAgICAgICAgVHJ5U3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGksIGl6LCBndWFyZGVkSGFuZGxlcnM7XG5cbiAgICAgICAgICAgIHJlc3VsdCA9IFsndHJ5JywgdGhpcy5tYXliZUJsb2NrKHN0bXQuYmxvY2ssIFNfVEZGRildO1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5tYXliZUJsb2NrU3VmZml4KHN0bXQuYmxvY2ssIHJlc3VsdCk7XG5cbiAgICAgICAgICAgIGlmIChzdG10LmhhbmRsZXJzKSB7XG4gICAgICAgICAgICAgICAgLy8gb2xkIGludGVyZmFjZVxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gc3RtdC5oYW5kbGVycy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCB0aGlzLmdlbmVyYXRlU3RhdGVtZW50KHN0bXQuaGFuZGxlcnNbaV0sIFNfVEZGRikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RtdC5maW5hbGl6ZXIgfHwgaSArIDEgIT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLm1heWJlQmxvY2tTdWZmaXgoc3RtdC5oYW5kbGVyc1tpXS5ib2R5LCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBndWFyZGVkSGFuZGxlcnMgPSBzdG10Lmd1YXJkZWRIYW5kbGVycyB8fCBbXTtcblxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gZ3VhcmRlZEhhbmRsZXJzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIHRoaXMuZ2VuZXJhdGVTdGF0ZW1lbnQoZ3VhcmRlZEhhbmRsZXJzW2ldLCBTX1RGRkYpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0bXQuZmluYWxpemVyIHx8IGkgKyAxICE9PSBpeikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5tYXliZUJsb2NrU3VmZml4KGd1YXJkZWRIYW5kbGVyc1tpXS5ib2R5LCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gbmV3IGludGVyZmFjZVxuICAgICAgICAgICAgICAgIGlmIChzdG10LmhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkoc3RtdC5oYW5kbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBzdG10LmhhbmRsZXIubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCB0aGlzLmdlbmVyYXRlU3RhdGVtZW50KHN0bXQuaGFuZGxlcltpXSwgU19URkZGKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0bXQuZmluYWxpemVyIHx8IGkgKyAxICE9PSBpeikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLm1heWJlQmxvY2tTdWZmaXgoc3RtdC5oYW5kbGVyW2ldLmJvZHksIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIHRoaXMuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdC5oYW5kbGVyLCBTX1RGRkYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdG10LmZpbmFsaXplcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWF5YmVCbG9ja1N1ZmZpeChzdG10LmhhbmRsZXIuYm9keSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdG10LmZpbmFsaXplcikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCBbJ2ZpbmFsbHknLCB0aGlzLm1heWJlQmxvY2soc3RtdC5maW5hbGl6ZXIsIFNfVEZGRildKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgU3dpdGNoU3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGZyYWdtZW50LCBpLCBpeiwgYm9keUZsYWdzLCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ3N3aXRjaCcgKyBzcGFjZSArICcoJyxcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5kaXNjcmltaW5hbnQsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSxcbiAgICAgICAgICAgICAgICAgICAgJyknICsgc3BhY2UgKyAneycgKyBuZXdsaW5lXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHN0bXQuY2FzZXMpIHtcbiAgICAgICAgICAgICAgICBib2R5RmxhZ3MgPSBTX1RGRkY7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBzdG10LmNhc2VzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGl6IC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keUZsYWdzIHw9IEZfU0VNSUNPTE9OX09QVDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGFkZEluZGVudCh0aGlzLmdlbmVyYXRlU3RhdGVtZW50KHN0bXQuY2FzZXNbaV0sIGJvZHlGbGFncykpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmcmFnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZW5kc1dpdGhMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKGZyYWdtZW50KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3bGluZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChhZGRJbmRlbnQoJ30nKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIFN3aXRjaENhc2U6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgZnJhZ21lbnQsIGksIGl6LCBib2R5RmxhZ3MsIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0bXQudGVzdCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICBqb2luKCdjYXNlJywgdGhhdC5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC50ZXN0LCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJzonXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gWydkZWZhdWx0OiddO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICAgICAgICAgIGl6ID0gc3RtdC5jb25zZXF1ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoaXogJiYgc3RtdC5jb25zZXF1ZW50WzBdLnR5cGUgPT09IFN5bnRheC5CbG9ja1N0YXRlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IHRoYXQubWF5YmVCbG9jayhzdG10LmNvbnNlcXVlbnRbMF0sIFNfVEZGRik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IGl6ICYmICFlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBib2R5RmxhZ3MgPSBTX1RGRkY7XG4gICAgICAgICAgICAgICAgZm9yICg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBpeiAtIDEgJiYgZmxhZ3MgJiBGX1NFTUlDT0xPTl9PUFQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlGbGFncyB8PSBGX1NFTUlDT0xPTl9PUFQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBhZGRJbmRlbnQodGhhdC5nZW5lcmF0ZVN0YXRlbWVudChzdG10LmNvbnNlcXVlbnRbaV0sIGJvZHlGbGFncykpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmcmFnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpICsgMSAhPT0gaXogJiYgIWVuZHNXaXRoTGluZVRlcm1pbmF0b3IodG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChmcmFnbWVudCkudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIElmU3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGJvZHlGbGFncywgc2VtaWNvbG9uT3B0aW9uYWwsIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW1xuICAgICAgICAgICAgICAgICAgICAnaWYnICsgc3BhY2UgKyAnKCcsXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQudGVzdCwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpLFxuICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZW1pY29sb25PcHRpb25hbCA9IGZsYWdzICYgRl9TRU1JQ09MT05fT1BUO1xuICAgICAgICAgICAgYm9keUZsYWdzID0gU19URkZGO1xuICAgICAgICAgICAgaWYgKHNlbWljb2xvbk9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgYm9keUZsYWdzIHw9IEZfU0VNSUNPTE9OX09QVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdG10LmFsdGVybmF0ZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMubWF5YmVCbG9jayhzdG10LmNvbnNlcXVlbnQsIFNfVEZGRikpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWF5YmVCbG9ja1N1ZmZpeChzdG10LmNvbnNlcXVlbnQsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0bXQuYWx0ZXJuYXRlLnR5cGUgPT09IFN5bnRheC5JZlN0YXRlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgWydlbHNlICcsIHRoaXMuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdC5hbHRlcm5hdGUsIGJvZHlGbGFncyldKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgam9pbignZWxzZScsIHRoaXMubWF5YmVCbG9jayhzdG10LmFsdGVybmF0ZSwgYm9keUZsYWdzKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5tYXliZUJsb2NrKHN0bXQuY29uc2VxdWVudCwgYm9keUZsYWdzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIEZvclN0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFsnZm9yJyArIHNwYWNlICsgJygnXTtcbiAgICAgICAgICAgICAgICBpZiAoc3RtdC5pbml0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdG10LmluaXQudHlwZSA9PT0gU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdC5pbml0LCBTX0ZGRkYpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZfQUxMT1dfSU4gYmVjb21lcyBmYWxzZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuaW5pdCwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9GVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCc7Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnOycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdG10LnRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc3BhY2UpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnRlc3QsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCc7Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJzsnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RtdC51cGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc3BhY2UpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnVwZGF0ZSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJyknKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnKScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLm1heWJlQmxvY2soc3RtdC5ib2R5LCBmbGFncyAmIEZfU0VNSUNPTE9OX09QVCA/IFNfVEZGVCA6IFNfVEZGRikpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBGb3JJblN0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUl0ZXJhdGlvbkZvclN0YXRlbWVudCgnaW4nLCBzdG10LCBmbGFncyAmIEZfU0VNSUNPTE9OX09QVCA/IFNfVEZGVCA6IFNfVEZGRik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgRm9yT2ZTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVJdGVyYXRpb25Gb3JTdGF0ZW1lbnQoJ29mJywgc3RtdCwgZmxhZ3MgJiBGX1NFTUlDT0xPTl9PUFQgPyBTX1RGRlQgOiBTX1RGRkYpO1xuICAgICAgICB9LFxuXG4gICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIFtzdG10LmxhYmVsLm5hbWUgKyAnOicsIHRoaXMubWF5YmVCbG9jayhzdG10LmJvZHksIGZsYWdzICYgRl9TRU1JQ09MT05fT1BUID8gU19URkZUIDogU19URkZGKV07XG4gICAgICAgIH0sXG5cbiAgICAgICAgUHJvZ3JhbTogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBmcmFnbWVudCwgaSwgaXosIGJvZHlGbGFncztcbiAgICAgICAgICAgIGl6ID0gc3RtdC5ib2R5Lmxlbmd0aDtcbiAgICAgICAgICAgIHJlc3VsdCA9IFtzYWZlQ29uY2F0ZW5hdGlvbiAmJiBpeiA+IDAgPyAnXFxuJyA6ICcnXTtcbiAgICAgICAgICAgIGJvZHlGbGFncyA9IFNfVEZURjtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzYWZlQ29uY2F0ZW5hdGlvbiAmJiBpID09PSBpeiAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYm9keUZsYWdzIHw9IEZfU0VNSUNPTE9OX09QVDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocHJlc2VydmVCbGFua0xpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBzcGFjZXMgYmVmb3JlIHRoZSBmaXJzdCBsaW5lXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0bXQuYm9keVswXS5sZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUJsYW5rTGluZXMoc3RtdC5yYW5nZVswXSwgc3RtdC5ib2R5W2ldLnJhbmdlWzBdLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHNwYWNlcyBiZXR3ZWVuIGxpbmVzXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG10LmJvZHlbaSAtIDFdLnRyYWlsaW5nQ29tbWVudHMgJiYgIXN0bXQuYm9keVtpXS5sZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUJsYW5rTGluZXMoc3RtdC5ib2R5W2kgLSAxXS5yYW5nZVsxXSwgc3RtdC5ib2R5W2ldLnJhbmdlWzBdLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBhZGRJbmRlbnQodGhpcy5nZW5lcmF0ZVN0YXRlbWVudChzdG10LmJvZHlbaV0sIGJvZHlGbGFncykpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBpeiAmJiAhZW5kc1dpdGhMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKGZyYWdtZW50KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2VydmVCbGFua0xpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0bXQuYm9keVtpICsgMV0ubGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3bGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwcmVzZXJ2ZUJsYW5rTGluZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHNwYWNlcyBhZnRlciB0aGUgbGFzdCBsaW5lXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBpeiAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RtdC5ib2R5W2ldLnRyYWlsaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUJsYW5rTGluZXMoc3RtdC5ib2R5W2ldLnJhbmdlWzFdLCBzdG10LnJhbmdlWzFdLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVBc3luY1ByZWZpeChzdG10LCB0cnVlKSxcbiAgICAgICAgICAgICAgICAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRlU3RhclN1ZmZpeChzdG10KSB8fCBub0VtcHR5U3BhY2UoKSxcbiAgICAgICAgICAgICAgICBzdG10LmlkID8gZ2VuZXJhdGVJZGVudGlmaWVyKHN0bXQuaWQpIDogJycsXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZ1bmN0aW9uQm9keShzdG10KVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcblxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgaWYgKHN0bXQuYXJndW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2pvaW4oXG4gICAgICAgICAgICAgICAgICAgICdyZXR1cm4nLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LmFyZ3VtZW50LCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVClcbiAgICAgICAgICAgICAgICApLCB0aGlzLnNlbWljb2xvbihmbGFncyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFsncmV0dXJuJyArIHRoaXMuc2VtaWNvbG9uKGZsYWdzKV07XG4gICAgICAgIH0sXG5cbiAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB3aXRoSW5kZW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAgICAgICd3aGlsZScgKyBzcGFjZSArICcoJyxcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC50ZXN0LCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCksXG4gICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMubWF5YmVCbG9jayhzdG10LmJvZHksIGZsYWdzICYgRl9TRU1JQ09MT05fT1BUID8gU19URkZUIDogU19URkZGKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIFdpdGhTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB3aXRoSW5kZW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAgICAgICd3aXRoJyArIHNwYWNlICsgJygnLFxuICAgICAgICAgICAgICAgICAgICB0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihzdG10Lm9iamVjdCwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpLFxuICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLm1heWJlQmxvY2soc3RtdC5ib2R5LCBmbGFncyAmIEZfU0VNSUNPTE9OX09QVCA/IFNfVEZGVCA6IFNfVEZGRikpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIG1lcmdlKENvZGVHZW5lcmF0b3IucHJvdG90eXBlLCBDb2RlR2VuZXJhdG9yLlN0YXRlbWVudCk7XG5cbiAgICAvLyBFeHByZXNzaW9ucy5cblxuICAgIENvZGVHZW5lcmF0b3IuRXhwcmVzc2lvbiA9IHtcblxuICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgaSwgaXo7XG4gICAgICAgICAgICBpZiAoUHJlY2VkZW5jZS5TZXF1ZW5jZSA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgICAgICBmbGFncyB8PSBGX0FMTE9XX0lOO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGV4cHIuZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuZXhwcmVzc2lvbnNbaV0sIFByZWNlZGVuY2UuQXNzaWdubWVudCwgZmxhZ3MpKTtcbiAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBpeikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLCcgKyBzcGFjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudGhlc2l6ZShyZXN1bHQsIFByZWNlZGVuY2UuU2VxdWVuY2UsIHByZWNlZGVuY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQXNzaWdubWVudChleHByLmxlZnQsIGV4cHIucmlnaHQsIGV4cHIub3BlcmF0b3IsIHByZWNlZGVuY2UsIGZsYWdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKHRoaXMuZ2VuZXJhdGVGdW5jdGlvbkJvZHkoZXhwciksIFByZWNlZGVuY2UuQXJyb3dGdW5jdGlvbiwgcHJlY2VkZW5jZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIGlmIChQcmVjZWRlbmNlLkNvbmRpdGlvbmFsIDwgcHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZfQUxMT1dfSU47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci50ZXN0LCBQcmVjZWRlbmNlLkxvZ2ljYWxPUiwgZmxhZ3MpLFxuICAgICAgICAgICAgICAgICAgICBzcGFjZSArICc/JyArIHNwYWNlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmNvbnNlcXVlbnQsIFByZWNlZGVuY2UuQXNzaWdubWVudCwgZmxhZ3MpLFxuICAgICAgICAgICAgICAgICAgICBzcGFjZSArICc6JyArIHNwYWNlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmFsdGVybmF0ZSwgUHJlY2VkZW5jZS5Bc3NpZ25tZW50LCBmbGFncylcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFByZWNlZGVuY2UuQ29uZGl0aW9uYWwsXG4gICAgICAgICAgICAgICAgcHJlY2VkZW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5CaW5hcnlFeHByZXNzaW9uKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGN1cnJlbnRQcmVjZWRlbmNlLCBmcmFnbWVudCwgbGVmdFNvdXJjZTtcbiAgICAgICAgICAgIGN1cnJlbnRQcmVjZWRlbmNlID0gQmluYXJ5UHJlY2VkZW5jZVtleHByLm9wZXJhdG9yXTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRQcmVjZWRlbmNlIDwgcHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZfQUxMT1dfSU47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZyYWdtZW50ID0gdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5sZWZ0LCBjdXJyZW50UHJlY2VkZW5jZSwgZmxhZ3MpO1xuXG4gICAgICAgICAgICBsZWZ0U291cmNlID0gZnJhZ21lbnQudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKGxlZnRTb3VyY2UuY2hhckNvZGVBdChsZWZ0U291cmNlLmxlbmd0aCAtIDEpID09PSAweDJGIC8qIC8gKi8gJiYgZXN1dGlscy5jb2RlLmlzSWRlbnRpZmllclBhcnRFUzUoZXhwci5vcGVyYXRvci5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtmcmFnbWVudCwgbm9FbXB0eVNwYWNlKCksIGV4cHIub3BlcmF0b3JdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKGZyYWdtZW50LCBleHByLm9wZXJhdG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnJhZ21lbnQgPSB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLnJpZ2h0LCBjdXJyZW50UHJlY2VkZW5jZSArIDEsIGZsYWdzKTtcblxuICAgICAgICAgICAgaWYgKGV4cHIub3BlcmF0b3IgPT09ICcvJyAmJiBmcmFnbWVudC50b1N0cmluZygpLmNoYXJBdCgwKSA9PT0gJy8nIHx8XG4gICAgICAgICAgICBleHByLm9wZXJhdG9yLnNsaWNlKC0xKSA9PT0gJzwnICYmIGZyYWdtZW50LnRvU3RyaW5nKCkuc2xpY2UoMCwgMykgPT09ICchLS0nKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgJy8nIGNvbmNhdHMgd2l0aCAnLycgb3IgYDxgIGNvbmNhdHMgd2l0aCBgIS0tYCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgY29tbWVudCBzdGFydFxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vRW1wdHlTcGFjZSgpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmcmFnbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCBmcmFnbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleHByLm9wZXJhdG9yID09PSAnaW4nICYmICEoZmxhZ3MgJiBGX0FMTE9XX0lOKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbJygnLCByZXN1bHQsICcpJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKHJlc3VsdCwgY3VycmVudFByZWNlZGVuY2UsIHByZWNlZGVuY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIENhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGksIGl6O1xuICAgICAgICAgICAgLy8gRl9BTExPV19VTlBBUkFUSF9ORVcgYmVjb21lcyBmYWxzZS5cbiAgICAgICAgICAgIHJlc3VsdCA9IFt0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmNhbGxlZSwgUHJlY2VkZW5jZS5DYWxsLCBFX1RURildO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goJygnKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gZXhwclsnYXJndW1lbnRzJ10ubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHJbJ2FyZ3VtZW50cyddW2ldLCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgaXopIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJywnICsgc3BhY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcpJyk7XG5cbiAgICAgICAgICAgIGlmICghKGZsYWdzICYgRl9BTExPV19DQUxMKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbJygnLCByZXN1bHQsICcpJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKHJlc3VsdCwgUHJlY2VkZW5jZS5DYWxsLCBwcmVjZWRlbmNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBOZXdFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGxlbmd0aCwgaSwgaXosIGl0ZW1GbGFncztcbiAgICAgICAgICAgIGxlbmd0aCA9IGV4cHJbJ2FyZ3VtZW50cyddLmxlbmd0aDtcblxuICAgICAgICAgICAgLy8gRl9BTExPV19DQUxMIGJlY29tZXMgZmFsc2UuXG4gICAgICAgICAgICAvLyBGX0FMTE9XX1VOUEFSQVRIX05FVyBtYXkgYmVjb21lIGZhbHNlLlxuICAgICAgICAgICAgaXRlbUZsYWdzID0gKGZsYWdzICYgRl9BTExPV19VTlBBUkFUSF9ORVcgJiYgIXBhcmVudGhlc2VzICYmIGxlbmd0aCA9PT0gMCkgPyBFX1RGVCA6IEVfVEZGO1xuXG4gICAgICAgICAgICByZXN1bHQgPSBqb2luKFxuICAgICAgICAgICAgICAgICduZXcnLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuY2FsbGVlLCBQcmVjZWRlbmNlLk5ldywgaXRlbUZsYWdzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBGX0FMTE9XX1VOUEFSQVRIX05FVykgfHwgcGFyZW50aGVzZXMgfHwgbGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcoJyk7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBsZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHJbJ2FyZ3VtZW50cyddW2ldLCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLCcgKyBzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudGhlc2l6ZShyZXN1bHQsIFByZWNlZGVuY2UuTmV3LCBwcmVjZWRlbmNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGZyYWdtZW50O1xuXG4gICAgICAgICAgICAvLyBGX0FMTE9XX1VOUEFSQVRIX05FVyBiZWNvbWVzIGZhbHNlLlxuICAgICAgICAgICAgcmVzdWx0ID0gW3RoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIub2JqZWN0LCBQcmVjZWRlbmNlLkNhbGwsIChmbGFncyAmIEZfQUxMT1dfQ0FMTCkgPyBFX1RURiA6IEVfVEZGKV07XG5cbiAgICAgICAgICAgIGlmIChleHByLmNvbXB1dGVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJ1snKTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLnByb3BlcnR5LCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBmbGFncyAmIEZfQUxMT1dfQ0FMTCA/IEVfVFRUIDogRV9URlQpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnXScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5vYmplY3QudHlwZSA9PT0gU3ludGF4LkxpdGVyYWwgJiYgdHlwZW9mIGV4cHIub2JqZWN0LnZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWxsIHRydWUsXG4gICAgICAgICAgICAgICAgICAgIC8vICAgMS4gTm8gZmxvYXRpbmcgcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gICAyLiBEb24ndCBoYXZlIGV4cG9uZW50c1xuICAgICAgICAgICAgICAgICAgICAvLyAgIDMuIFRoZSBsYXN0IGNoYXJhY3RlciBpcyBhIGRlY2ltYWwgZGlnaXRcbiAgICAgICAgICAgICAgICAgICAgLy8gICA0LiBOb3QgaGV4YWRlY2ltYWwgT1Igb2N0YWwgbnVtYmVyIGxpdGVyYWxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkIGFkZCBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuaW5kZXhPZignLicpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEvW2VFeFhdLy50ZXN0KGZyYWdtZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdXRpbHMuY29kZS5pc0RlY2ltYWxEaWdpdChmcmFnbWVudC5jaGFyQ29kZUF0KGZyYWdtZW50Lmxlbmd0aCAtIDEpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoZnJhZ21lbnQubGVuZ3RoID49IDIgJiYgZnJhZ21lbnQuY2hhckNvZGVBdCgwKSA9PT0gNDgpICAvLyAnMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJy4nKTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChnZW5lcmF0ZUlkZW50aWZpZXIoZXhwci5wcm9wZXJ0eSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKHJlc3VsdCwgUHJlY2VkZW5jZS5NZW1iZXIsIHByZWNlZGVuY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIE1ldGFQcm9wZXJ0eTogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgICByZXN1bHQucHVzaChleHByLm1ldGEpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goJy4nKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGV4cHIucHJvcGVydHkpO1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudGhlc2l6ZShyZXN1bHQsIFByZWNlZGVuY2UuTWVtYmVyLCBwcmVjZWRlbmNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBVbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgZnJhZ21lbnQsIHJpZ2h0Q2hhckNvZGUsIGxlZnRTb3VyY2UsIGxlZnRDaGFyQ29kZTtcbiAgICAgICAgICAgIGZyYWdtZW50ID0gdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5hcmd1bWVudCwgUHJlY2VkZW5jZS5VbmFyeSwgRV9UVFQpO1xuXG4gICAgICAgICAgICBpZiAoc3BhY2UgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihleHByLm9wZXJhdG9yLCBmcmFnbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtleHByLm9wZXJhdG9yXTtcbiAgICAgICAgICAgICAgICBpZiAoZXhwci5vcGVyYXRvci5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSwgdm9pZCwgdHlwZW9mXG4gICAgICAgICAgICAgICAgICAgIC8vIGdldCBgdHlwZW9mIFtdYCwgbm90IGB0eXBlb2ZbXWBcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IGluc2VydGluZyBzcGFjZXMgYmV0d2VlbiBvcGVyYXRvciBhbmQgYXJndW1lbnQgaWYgaXQgaXMgdW5uZWNlc3NhcnlcbiAgICAgICAgICAgICAgICAgICAgLy8gbGlrZSwgYCFjb25kYFxuICAgICAgICAgICAgICAgICAgICBsZWZ0U291cmNlID0gdG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGxlZnRDaGFyQ29kZSA9IGxlZnRTb3VyY2UuY2hhckNvZGVBdChsZWZ0U291cmNlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICByaWdodENoYXJDb2RlID0gZnJhZ21lbnQudG9TdHJpbmcoKS5jaGFyQ29kZUF0KDApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoKGxlZnRDaGFyQ29kZSA9PT0gMHgyQiAgLyogKyAqLyB8fCBsZWZ0Q2hhckNvZGUgPT09IDB4MkQgIC8qIC0gKi8pICYmIGxlZnRDaGFyQ29kZSA9PT0gcmlnaHRDaGFyQ29kZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXN1dGlscy5jb2RlLmlzSWRlbnRpZmllclBhcnRFUzUobGVmdENoYXJDb2RlKSAmJiBlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyUGFydEVTNShyaWdodENoYXJDb2RlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vRW1wdHlTcGFjZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRoZXNpemUocmVzdWx0LCBQcmVjZWRlbmNlLlVuYXJ5LCBwcmVjZWRlbmNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBZaWVsZEV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIGlmIChleHByLmRlbGVnYXRlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJ3lpZWxkKic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9ICd5aWVsZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXhwci5hcmd1bWVudCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4oXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5hcmd1bWVudCwgUHJlY2VkZW5jZS5ZaWVsZCwgRV9UVFQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRoZXNpemUocmVzdWx0LCBQcmVjZWRlbmNlLllpZWxkLCBwcmVjZWRlbmNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBBd2FpdEV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGpvaW4oXG4gICAgICAgICAgICAgICAgZXhwci5hbGwgPyAnYXdhaXQqJyA6ICdhd2FpdCcsXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5hcmd1bWVudCwgUHJlY2VkZW5jZS5Bd2FpdCwgRV9UVFQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudGhlc2l6ZShyZXN1bHQsIFByZWNlZGVuY2UuQXdhaXQsIHByZWNlZGVuY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIFVwZGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgaWYgKGV4cHIucHJlZml4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudGhlc2l6ZShcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwci5vcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuYXJndW1lbnQsIFByZWNlZGVuY2UuVW5hcnksIEVfVFRUKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBQcmVjZWRlbmNlLlVuYXJ5LFxuICAgICAgICAgICAgICAgICAgICBwcmVjZWRlbmNlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRoZXNpemUoXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmFyZ3VtZW50LCBQcmVjZWRlbmNlLlBvc3RmaXgsIEVfVFRUKSxcbiAgICAgICAgICAgICAgICAgICAgZXhwci5vcGVyYXRvclxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgUHJlY2VkZW5jZS5Qb3N0Zml4LFxuICAgICAgICAgICAgICAgIHByZWNlZGVuY2VcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVBc3luY1ByZWZpeChleHByLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAnZnVuY3Rpb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGV4cHIuaWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChnZW5lcmF0ZVN0YXJTdWZmaXgoZXhwcikgfHwgbm9FbXB0eVNwYWNlKCkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlbmVyYXRlSWRlbnRpZmllcihleHByLmlkKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlbmVyYXRlU3RhclN1ZmZpeChleHByKSB8fCBzcGFjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmdlbmVyYXRlRnVuY3Rpb25Cb2R5KGV4cHIpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgQXJyYXlQYXR0ZXJuOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkFycmF5RXhwcmVzc2lvbihleHByLCBwcmVjZWRlbmNlLCBmbGFncywgdHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgQXJyYXlFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MsIGlzUGF0dGVybikge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgbXVsdGlsaW5lLCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIGlmICghZXhwci5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tdJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG11bHRpbGluZSA9IGlzUGF0dGVybiA/IGZhbHNlIDogZXhwci5lbGVtZW50cy5sZW5ndGggPiAxO1xuICAgICAgICAgICAgcmVzdWx0ID0gWydbJywgbXVsdGlsaW5lID8gbmV3bGluZSA6ICcnXTtcbiAgICAgICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKGluZGVudCkge1xuICAgICAgICAgICAgICAgIHZhciBpLCBpejtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGV4cHIuZWxlbWVudHMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWV4cHIuZWxlbWVudHNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtdWx0aWxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpbmRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxID09PSBpeikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChtdWx0aWxpbmUgPyBpbmRlbnQgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmVsZW1lbnRzW2ldLCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgaXopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyArIChtdWx0aWxpbmUgPyBuZXdsaW5lIDogc3BhY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG11bHRpbGluZSAmJiAhZW5kc1dpdGhMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKHJlc3VsdCkudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG11bHRpbGluZSA/IGJhc2UgOiAnJyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCgnXScpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBSZXN0RWxlbWVudDogZnVuY3Rpb24oZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiAnLi4uJyArIHRoaXMuZ2VuZXJhdGVQYXR0ZXJuKGV4cHIuYXJndW1lbnQpO1xuICAgICAgICB9LFxuXG4gICAgICAgIENsYXNzRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBmcmFnbWVudDtcbiAgICAgICAgICAgIHJlc3VsdCA9IFsnY2xhc3MnXTtcbiAgICAgICAgICAgIGlmIChleHByLmlkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuaWQsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXhwci5zdXBlckNsYXNzKSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBqb2luKCdleHRlbmRzJywgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5zdXBlckNsYXNzLCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIGZyYWdtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNwYWNlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVTdGF0ZW1lbnQoZXhwci5ib2R5LCBTX1RGRlQpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgTWV0aG9kRGVmaW5pdGlvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBmcmFnbWVudDtcbiAgICAgICAgICAgIGlmIChleHByWydzdGF0aWMnXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFsnc3RhdGljJyArIHNwYWNlXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXhwci5raW5kID09PSAnZ2V0JyB8fCBleHByLmtpbmQgPT09ICdzZXQnKSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBbXG4gICAgICAgICAgICAgICAgICAgIGpvaW4oZXhwci5raW5kLCB0aGlzLmdlbmVyYXRlUHJvcGVydHlLZXkoZXhwci5rZXksIGV4cHIuY29tcHV0ZWQsIGV4cHIudmFsdWUpKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZ1bmN0aW9uQm9keShleHByLnZhbHVlKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gW1xuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZU1ldGhvZFByZWZpeChleHByKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVByb3BlcnR5S2V5KGV4cHIua2V5LCBleHByLmNvbXB1dGVkLCBleHByLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZ1bmN0aW9uQm9keShleHByLnZhbHVlKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gam9pbihyZXN1bHQsIGZyYWdtZW50KTtcbiAgICAgICAgfSxcblxuICAgICAgICBQcm9wZXJ0eTogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICBpZiAoZXhwci5raW5kID09PSAnZ2V0JyB8fCBleHByLmtpbmQgPT09ICdzZXQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5raW5kLCBub0VtcHR5U3BhY2UoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVByb3BlcnR5S2V5KGV4cHIua2V5LCBleHByLmNvbXB1dGVkLCBleHByLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZ1bmN0aW9uQm9keShleHByLnZhbHVlKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleHByLnNob3J0aGFuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlUHJvcGVydHlLZXkoZXhwci5rZXksIGV4cHIuY29tcHV0ZWQsIGV4cHIudmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXhwci5tZXRob2QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZU1ldGhvZFByZWZpeChleHByKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVByb3BlcnR5S2V5KGV4cHIua2V5LCBleHByLmNvbXB1dGVkLCBleHByLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUZ1bmN0aW9uQm9keShleHByLnZhbHVlKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVByb3BlcnR5S2V5KGV4cHIua2V5LCBleHByLmNvbXB1dGVkLCBleHByLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAnOicgKyBzcGFjZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLnZhbHVlLCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIEVfVFRUKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcblxuICAgICAgICBPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciBtdWx0aWxpbmUsIHJlc3VsdCwgZnJhZ21lbnQsIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICBpZiAoIWV4cHIucHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3t9JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG11bHRpbGluZSA9IGV4cHIucHJvcGVydGllcy5sZW5ndGggPiAxO1xuXG4gICAgICAgICAgICB3aXRoSW5kZW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBmcmFnbWVudCA9IHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIucHJvcGVydGllc1swXSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghbXVsdGlsaW5lKSB7XG4gICAgICAgICAgICAgICAgLy8gaXNzdWVzIDRcbiAgICAgICAgICAgICAgICAvLyBEbyBub3QgdHJhbnNmb3JtIGZyb21cbiAgICAgICAgICAgICAgICAvLyAgIGRlamF2dS5DbGFzcy5kZWNsYXJlKHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICBtZXRob2QyOiBmdW5jdGlvbiAoKSB7fVxuICAgICAgICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gdG9cbiAgICAgICAgICAgICAgICAvLyAgIGRlamF2dS5DbGFzcy5kZWNsYXJlKHttZXRob2QyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgfX0pO1xuICAgICAgICAgICAgICAgIGlmICghaGFzTGluZVRlcm1pbmF0b3IodG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChmcmFnbWVudCkudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgJ3snLCBzcGFjZSwgZnJhZ21lbnQsIHNwYWNlLCAnfScgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKGluZGVudCkge1xuICAgICAgICAgICAgICAgIHZhciBpLCBpejtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbICd7JywgbmV3bGluZSwgaW5kZW50LCBmcmFnbWVudCBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG11bHRpbGluZSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLCcgKyBuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMSwgaXogPSBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaW5kZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIucHJvcGVydGllc1tpXSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJywnICsgbmV3bGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goYmFzZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCgnfScpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBBc3NpZ25tZW50UGF0dGVybjogZnVuY3Rpb24oZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQXNzaWdubWVudChleHByLmxlZnQsIGV4cHIucmlnaHQsICc9JywgcHJlY2VkZW5jZSwgZmxhZ3MpO1xuICAgICAgICB9LFxuXG4gICAgICAgIE9iamVjdFBhdHRlcm46IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgaSwgaXosIG11bHRpbGluZSwgcHJvcGVydHksIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgaWYgKCFleHByLnByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd7fSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG11bHRpbGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGV4cHIucHJvcGVydGllcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IGV4cHIucHJvcGVydGllc1swXTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkudmFsdWUudHlwZSAhPT0gU3ludGF4LklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlsaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBleHByLnByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHkuc2hvcnRoYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgPSBbJ3snLCBtdWx0aWxpbmUgPyBuZXdsaW5lIDogJycgXTtcblxuICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoaW5kZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGksIGl6O1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobXVsdGlsaW5lID8gaW5kZW50IDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihleHByLnByb3BlcnRpZXNbaV0sIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLCcgKyAobXVsdGlsaW5lID8gbmV3bGluZSA6IHNwYWNlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKG11bHRpbGluZSAmJiAhZW5kc1dpdGhMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKHJlc3VsdCkudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG11bHRpbGluZSA/IGJhc2UgOiAnJyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCgnfScpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBUaGlzRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3RoaXMnO1xuICAgICAgICB9LFxuXG4gICAgICAgIFN1cGVyOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiAnc3VwZXInO1xuICAgICAgICB9LFxuXG4gICAgICAgIElkZW50aWZpZXI6IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlSWRlbnRpZmllcihleHByKTtcbiAgICAgICAgfSxcblxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUlkZW50aWZpZXIoZXhwci5pZCB8fCBleHByLmxvY2FsKTtcbiAgICAgICAgfSxcblxuICAgICAgICBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFsnKiddO1xuICAgICAgICAgICAgdmFyIGlkID0gZXhwci5pZCB8fCBleHByLmxvY2FsO1xuICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc3BhY2UgKyAnYXMnICsgbm9FbXB0eVNwYWNlKCkgKyBnZW5lcmF0ZUlkZW50aWZpZXIoaWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgSW1wb3J0U3BlY2lmaWVyOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciBpbXBvcnRlZCA9IGV4cHIuaW1wb3J0ZWQ7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gWyBpbXBvcnRlZC5uYW1lIF07XG4gICAgICAgICAgICB2YXIgbG9jYWwgPSBleHByLmxvY2FsO1xuICAgICAgICAgICAgaWYgKGxvY2FsICYmIGxvY2FsLm5hbWUgIT09IGltcG9ydGVkLm5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub0VtcHR5U3BhY2UoKSArICdhcycgKyBub0VtcHR5U3BhY2UoKSArIGdlbmVyYXRlSWRlbnRpZmllcihsb2NhbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBFeHBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIGxvY2FsID0gZXhwci5sb2NhbDtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbIGxvY2FsLm5hbWUgXTtcbiAgICAgICAgICAgIHZhciBleHBvcnRlZCA9IGV4cHIuZXhwb3J0ZWQ7XG4gICAgICAgICAgICBpZiAoZXhwb3J0ZWQgJiYgZXhwb3J0ZWQubmFtZSAhPT0gbG9jYWwubmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vRW1wdHlTcGFjZSgpICsgJ2FzJyArIG5vRW1wdHlTcGFjZSgpICsgZ2VuZXJhdGVJZGVudGlmaWVyKGV4cG9ydGVkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIExpdGVyYWw6IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJhdztcbiAgICAgICAgICAgIGlmIChleHByLmhhc093blByb3BlcnR5KCdyYXcnKSAmJiBwYXJzZSAmJiBleHRyYS5yYXcpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByYXcgPSBwYXJzZShleHByLnJhdykuYm9keVswXS5leHByZXNzaW9uO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmF3LnR5cGUgPT09IFN5bnRheC5MaXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmF3LnZhbHVlID09PSBleHByLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cHIucmF3O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBub3QgdXNlIHJhdyBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4cHIudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4cHIudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVzY2FwZVN0cmluZyhleHByLnZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHByLnZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZU51bWJlcihleHByLnZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHByLnZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwci52YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZVJlZ0V4cChleHByLnZhbHVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBHZW5lcmF0b3JFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkNvbXByZWhlbnNpb25FeHByZXNzaW9uKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBDb21wcmVoZW5zaW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICAvLyBHZW5lcmF0b3JFeHByZXNzaW9uIHNob3VsZCBiZSBwYXJlbnRoZXNpemVkIHdpdGggKC4uLiksIENvbXByZWhlbnNpb25FeHByZXNzaW9uIHdpdGggWy4uLl1cbiAgICAgICAgICAgIC8vIER1ZSB0byBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODM0NjggcG9zaXRpb24gb2YgZXhwci5ib2R5IGNhbiBkaWZmZXIgaW4gU3BpZGVybW9ua2V5IGFuZCBFUzZcblxuICAgICAgICAgICAgdmFyIHJlc3VsdCwgaSwgaXosIGZyYWdtZW50LCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJlc3VsdCA9IChleHByLnR5cGUgPT09IFN5bnRheC5HZW5lcmF0b3JFeHByZXNzaW9uKSA/IFsnKCddIDogWydbJ107XG5cbiAgICAgICAgICAgIGlmIChleHRyYS5tb3ouY29tcHJlaGVuc2lvbkV4cHJlc3Npb25TdGFydHNXaXRoQXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5ib2R5LCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIEVfVFRUKTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmcmFnbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleHByLmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGV4cHIuYmxvY2tzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gdGhhdC5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5ibG9ja3NbaV0sIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCB8fCBleHRyYS5tb3ouY29tcHJlaGVuc2lvbkV4cHJlc3Npb25TdGFydHNXaXRoQXNzaWdubWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCBmcmFnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXhwci5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgJ2lmJyArIHNwYWNlKTtcbiAgICAgICAgICAgICAgICBmcmFnbWVudCA9IHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuZmlsdGVyLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIFsgJygnLCBmcmFnbWVudCwgJyknIF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWV4dHJhLm1vei5jb21wcmVoZW5zaW9uRXhwcmVzc2lvblN0YXJ0c1dpdGhBc3NpZ25tZW50KSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmJvZHksIFByZWNlZGVuY2UuQXNzaWdubWVudCwgRV9UVFQpO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIGZyYWdtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0LnB1c2goKGV4cHIudHlwZSA9PT0gU3ludGF4LkdlbmVyYXRvckV4cHJlc3Npb24pID8gJyknIDogJ10nKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgQ29tcHJlaGVuc2lvbkJsb2NrOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciBmcmFnbWVudDtcbiAgICAgICAgICAgIGlmIChleHByLmxlZnQudHlwZSA9PT0gU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBmcmFnbWVudCA9IFtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5sZWZ0LmtpbmQsIG5vRW1wdHlTcGFjZSgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlU3RhdGVtZW50KGV4cHIubGVmdC5kZWNsYXJhdGlvbnNbMF0sIFNfRkZGRilcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmcmFnbWVudCA9IHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIubGVmdCwgUHJlY2VkZW5jZS5DYWxsLCBFX1RUVCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZyYWdtZW50ID0gam9pbihmcmFnbWVudCwgZXhwci5vZiA/ICdvZicgOiAnaW4nKTtcbiAgICAgICAgICAgIGZyYWdtZW50ID0gam9pbihmcmFnbWVudCwgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5yaWdodCwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcblxuICAgICAgICAgICAgcmV0dXJuIFsgJ2ZvcicgKyBzcGFjZSArICcoJywgZnJhZ21lbnQsICcpJyBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIFNwcmVhZEVsZW1lbnQ6IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAnLi4uJyxcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmFyZ3VtZW50LCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIEVfVFRUKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcblxuICAgICAgICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIGl0ZW1GbGFncyA9IEVfVFRGO1xuICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBGX0FMTE9XX0NBTEwpKSB7XG4gICAgICAgICAgICAgICAgaXRlbUZsYWdzID0gRV9URkY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIudGFnLCBQcmVjZWRlbmNlLkNhbGwsIGl0ZW1GbGFncyksXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5xdWFzaSwgUHJlY2VkZW5jZS5QcmltYXJ5LCBFX0ZGVClcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKHJlc3VsdCwgUHJlY2VkZW5jZS5UYWdnZWRUZW1wbGF0ZSwgcHJlY2VkZW5jZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgVGVtcGxhdGVFbGVtZW50OiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIC8vIERvbid0IHVzZSBcImNvb2tlZFwiLiBTaW5jZSB0YWdnZWQgdGVtcGxhdGUgY2FuIHVzZSByYXcgdGVtcGxhdGVcbiAgICAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLiBTbyBpZiB3ZSBkbyBzbywgaXQgYnJlYWtzIHRoZSBzY3JpcHQgc2VtYW50aWNzLlxuICAgICAgICAgICAgcmV0dXJuIGV4cHIudmFsdWUucmF3O1xuICAgICAgICB9LFxuXG4gICAgICAgIFRlbXBsYXRlTGl0ZXJhbDogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBpLCBpejtcbiAgICAgICAgICAgIHJlc3VsdCA9IFsgJ2AnIF07XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGV4cHIucXVhc2lzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLnF1YXNpc1tpXSwgUHJlY2VkZW5jZS5QcmltYXJ5LCBFX1RUVCkpO1xuICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCckeycgKyBzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuZXhwcmVzc2lvbnNbaV0sIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNwYWNlICsgJ30nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCgnYCcpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBNb2R1bGVTcGVjaWZpZXI6IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuTGl0ZXJhbChleHByLCBwcmVjZWRlbmNlLCBmbGFncyk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBtZXJnZShDb2RlR2VuZXJhdG9yLnByb3RvdHlwZSwgQ29kZUdlbmVyYXRvci5FeHByZXNzaW9uKTtcblxuICAgIENvZGVHZW5lcmF0b3IucHJvdG90eXBlLmdlbmVyYXRlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICB2YXIgcmVzdWx0LCB0eXBlO1xuXG4gICAgICAgIHR5cGUgPSBleHByLnR5cGUgfHwgU3ludGF4LlByb3BlcnR5O1xuXG4gICAgICAgIGlmIChleHRyYS52ZXJiYXRpbSAmJiBleHByLmhhc093blByb3BlcnR5KGV4dHJhLnZlcmJhdGltKSkge1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlVmVyYmF0aW0oZXhwciwgcHJlY2VkZW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQgPSB0aGlzW3R5cGVdKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKTtcblxuXG4gICAgICAgIGlmIChleHRyYS5jb21tZW50KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhZGRDb21tZW50cyhleHByLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKHJlc3VsdCwgZXhwcik7XG4gICAgfTtcblxuICAgIENvZGVHZW5lcmF0b3IucHJvdG90eXBlLmdlbmVyYXRlU3RhdGVtZW50ID0gZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgIHZhciByZXN1bHQsXG4gICAgICAgICAgICBmcmFnbWVudDtcblxuICAgICAgICByZXN1bHQgPSB0aGlzW3N0bXQudHlwZV0oc3RtdCwgZmxhZ3MpO1xuXG4gICAgICAgIC8vIEF0dGFjaCBjb21tZW50c1xuXG4gICAgICAgIGlmIChleHRyYS5jb21tZW50KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhZGRDb21tZW50cyhzdG10LCByZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnJhZ21lbnQgPSB0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKHJlc3VsdCkudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHN0bXQudHlwZSA9PT0gU3ludGF4LlByb2dyYW0gJiYgIXNhZmVDb25jYXRlbmF0aW9uICYmIG5ld2xpbmUgPT09ICcnICYmICBmcmFnbWVudC5jaGFyQXQoZnJhZ21lbnQubGVuZ3RoIC0gMSkgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBzb3VyY2VNYXAgPyB0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKHJlc3VsdCkucmVwbGFjZVJpZ2h0KC9cXHMrJC8sICcnKSA6IGZyYWdtZW50LnJlcGxhY2UoL1xccyskLywgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0LCBzdG10KTtcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVJbnRlcm5hbChub2RlKSB7XG4gICAgICAgIHZhciBjb2RlZ2VuO1xuXG4gICAgICAgIGNvZGVnZW4gPSBuZXcgQ29kZUdlbmVyYXRvcigpO1xuICAgICAgICBpZiAoaXNTdGF0ZW1lbnQobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuLmdlbmVyYXRlU3RhdGVtZW50KG5vZGUsIFNfVEZGRik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29kZWdlbi5nZW5lcmF0ZUV4cHJlc3Npb24obm9kZSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG5vZGUgdHlwZTogJyArIG5vZGUudHlwZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGUobm9kZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpLCByZXN1bHQsIHBhaXI7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gT2Jzb2xldGUgb3B0aW9uc1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vICAgYG9wdGlvbnMuaW5kZW50YFxuICAgICAgICAgICAgLy8gICBgb3B0aW9ucy5iYXNlYFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgdGhlbSwgd2UgY2FuIHVzZSBgb3B0aW9uLmZvcm1hdC5pbmRlbnRgLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmluZGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0T3B0aW9ucy5mb3JtYXQuaW5kZW50LnN0eWxlID0gb3B0aW9ucy5pbmRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYmFzZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0T3B0aW9ucy5mb3JtYXQuaW5kZW50LmJhc2UgPSBvcHRpb25zLmJhc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zID0gdXBkYXRlRGVlcGx5KGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGluZGVudCA9IG9wdGlvbnMuZm9ybWF0LmluZGVudC5zdHlsZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5iYXNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGJhc2UgPSBvcHRpb25zLmJhc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJhc2UgPSBzdHJpbmdSZXBlYXQoaW5kZW50LCBvcHRpb25zLmZvcm1hdC5pbmRlbnQuYmFzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgICAgICAgICBpbmRlbnQgPSBvcHRpb25zLmZvcm1hdC5pbmRlbnQuc3R5bGU7XG4gICAgICAgICAgICBiYXNlID0gc3RyaW5nUmVwZWF0KGluZGVudCwgb3B0aW9ucy5mb3JtYXQuaW5kZW50LmJhc2UpO1xuICAgICAgICB9XG4gICAgICAgIGpzb24gPSBvcHRpb25zLmZvcm1hdC5qc29uO1xuICAgICAgICByZW51bWJlciA9IG9wdGlvbnMuZm9ybWF0LnJlbnVtYmVyO1xuICAgICAgICBoZXhhZGVjaW1hbCA9IGpzb24gPyBmYWxzZSA6IG9wdGlvbnMuZm9ybWF0LmhleGFkZWNpbWFsO1xuICAgICAgICBxdW90ZXMgPSBqc29uID8gJ2RvdWJsZScgOiBvcHRpb25zLmZvcm1hdC5xdW90ZXM7XG4gICAgICAgIGVzY2FwZWxlc3MgPSBvcHRpb25zLmZvcm1hdC5lc2NhcGVsZXNzO1xuICAgICAgICBuZXdsaW5lID0gb3B0aW9ucy5mb3JtYXQubmV3bGluZTtcbiAgICAgICAgc3BhY2UgPSBvcHRpb25zLmZvcm1hdC5zcGFjZTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0LmNvbXBhY3QpIHtcbiAgICAgICAgICAgIG5ld2xpbmUgPSBzcGFjZSA9IGluZGVudCA9IGJhc2UgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnRoZXNlcyA9IG9wdGlvbnMuZm9ybWF0LnBhcmVudGhlc2VzO1xuICAgICAgICBzZW1pY29sb25zID0gb3B0aW9ucy5mb3JtYXQuc2VtaWNvbG9ucztcbiAgICAgICAgc2FmZUNvbmNhdGVuYXRpb24gPSBvcHRpb25zLmZvcm1hdC5zYWZlQ29uY2F0ZW5hdGlvbjtcbiAgICAgICAgZGlyZWN0aXZlID0gb3B0aW9ucy5kaXJlY3RpdmU7XG4gICAgICAgIHBhcnNlID0ganNvbiA/IG51bGwgOiBvcHRpb25zLnBhcnNlO1xuICAgICAgICBzb3VyY2VNYXAgPSBvcHRpb25zLnNvdXJjZU1hcDtcbiAgICAgICAgc291cmNlQ29kZSA9IG9wdGlvbnMuc291cmNlQ29kZTtcbiAgICAgICAgcHJlc2VydmVCbGFua0xpbmVzID0gb3B0aW9ucy5mb3JtYXQucHJlc2VydmVCbGFua0xpbmVzICYmIHNvdXJjZUNvZGUgIT09IG51bGw7XG4gICAgICAgIGV4dHJhID0gb3B0aW9ucztcblxuICAgICAgICBpZiAoc291cmNlTWFwKSB7XG4gICAgICAgICAgICBpZiAoIWV4cG9ydHMuYnJvd3Nlcikge1xuICAgICAgICAgICAgICAgIC8vIFdlIGFzc3VtZSBlbnZpcm9ubWVudCBpcyBub2RlLmpzXG4gICAgICAgICAgICAgICAgLy8gQW5kIHByZXZlbnQgZnJvbSBpbmNsdWRpbmcgc291cmNlLW1hcCBieSBicm93c2VyaWZ5XG4gICAgICAgICAgICAgICAgU291cmNlTm9kZSA9IHJlcXVpcmUoJ3NvdXJjZS1tYXAnKS5Tb3VyY2VOb2RlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBTb3VyY2VOb2RlID0gZ2xvYmFsLnNvdXJjZU1hcC5Tb3VyY2VOb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0ID0gZ2VuZXJhdGVJbnRlcm5hbChub2RlKTtcblxuICAgICAgICBpZiAoIXNvdXJjZU1hcCkge1xuICAgICAgICAgICAgcGFpciA9IHtjb2RlOiByZXN1bHQudG9TdHJpbmcoKSwgbWFwOiBudWxsfTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnNvdXJjZU1hcFdpdGhDb2RlID8gcGFpciA6IHBhaXIuY29kZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgcGFpciA9IHJlc3VsdC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoe1xuICAgICAgICAgICAgZmlsZTogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICAgc291cmNlUm9vdDogb3B0aW9ucy5zb3VyY2VNYXBSb290XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNvdXJjZUNvbnRlbnQpIHtcbiAgICAgICAgICAgIHBhaXIubWFwLnNldFNvdXJjZUNvbnRlbnQob3B0aW9ucy5zb3VyY2VNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc291cmNlQ29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zb3VyY2VNYXBXaXRoQ29kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhaXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFpci5tYXAudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBGT1JNQVRfTUlOSUZZID0ge1xuICAgICAgICBpbmRlbnQ6IHtcbiAgICAgICAgICAgIHN0eWxlOiAnJyxcbiAgICAgICAgICAgIGJhc2U6IDBcbiAgICAgICAgfSxcbiAgICAgICAgcmVudW1iZXI6IHRydWUsXG4gICAgICAgIGhleGFkZWNpbWFsOiB0cnVlLFxuICAgICAgICBxdW90ZXM6ICdhdXRvJyxcbiAgICAgICAgZXNjYXBlbGVzczogdHJ1ZSxcbiAgICAgICAgY29tcGFjdDogdHJ1ZSxcbiAgICAgICAgcGFyZW50aGVzZXM6IGZhbHNlLFxuICAgICAgICBzZW1pY29sb25zOiBmYWxzZVxuICAgIH07XG5cbiAgICBGT1JNQVRfREVGQVVMVFMgPSBnZXREZWZhdWx0T3B0aW9ucygpLmZvcm1hdDtcblxuICAgIGV4cG9ydHMudmVyc2lvbiA9IHJlcXVpcmUoJy4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgICBleHBvcnRzLmdlbmVyYXRlID0gZ2VuZXJhdGU7XG4gICAgZXhwb3J0cy5hdHRhY2hDb21tZW50cyA9IGVzdHJhdmVyc2UuYXR0YWNoQ29tbWVudHM7XG4gICAgZXhwb3J0cy5QcmVjZWRlbmNlID0gdXBkYXRlRGVlcGx5KHt9LCBQcmVjZWRlbmNlKTtcbiAgICBleHBvcnRzLmJyb3dzZXIgPSBmYWxzZTtcbiAgICBleHBvcnRzLkZPUk1BVF9NSU5JRlkgPSBGT1JNQVRfTUlOSUZZO1xuICAgIGV4cG9ydHMuRk9STUFUX0RFRkFVTFRTID0gRk9STUFUX0RFRkFVTFRTO1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMDktMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0UudHh0IG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5leHBvcnRzLlNvdXJjZU1hcEdlbmVyYXRvciA9IHJlcXVpcmUoJy4vc291cmNlLW1hcC9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAvc291cmNlLW1hcC1jb25zdW1lcicpLlNvdXJjZU1hcENvbnN1bWVyO1xuZXhwb3J0cy5Tb3VyY2VOb2RlID0gcmVxdWlyZSgnLi9zb3VyY2UtbWFwL3NvdXJjZS1ub2RlJykuU291cmNlTm9kZTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbmlmICh0eXBlb2YgZGVmaW5lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGRlZmluZSA9IHJlcXVpcmUoJ2FtZGVmaW5lJykobW9kdWxlLCByZXF1aXJlKTtcbn1cbmRlZmluZShmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuICAvKipcbiAgICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gICAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICAgKiBlbGVtZW50IGlzIE8oMSkuIFJlbW92aW5nIGVsZW1lbnRzIGZyb20gdGhlIHNldCBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5XG4gICAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAgICovXG4gIGZ1bmN0aW9uIEFycmF5U2V0KCkge1xuICAgIHRoaXMuX2FycmF5ID0gW107XG4gICAgdGhpcy5fc2V0ID0ge307XG4gIH1cblxuICAvKipcbiAgICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gICAqL1xuICBBcnJheVNldC5mcm9tQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF9mcm9tQXJyYXkoYUFycmF5LCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHNldC5hZGQoYUFycmF5W2ldLCBhQWxsb3dEdXBsaWNhdGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNldDtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBzZXQuXG4gICAqXG4gICAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICAgKi9cbiAgQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdmFyIGlzRHVwbGljYXRlID0gdGhpcy5oYXMoYVN0cik7XG4gICAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICAgIHRoaXMuX2FycmF5LnB1c2goYVN0cik7XG4gICAgfVxuICAgIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICAgIHRoaXMuX3NldFt1dGlsLnRvU2V0U3RyaW5nKGFTdHIpXSA9IGlkeDtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gICAqXG4gICAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICAgKi9cbiAgQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9zZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpKTtcbiAgfTtcblxuICAvKipcbiAgICogV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIHN0cmluZyBpbiB0aGUgYXJyYXk/XG4gICAqXG4gICAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICAgKi9cbiAgQXJyYXlTZXQucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBBcnJheVNldF9pbmRleE9mKGFTdHIpIHtcbiAgICBpZiAodGhpcy5oYXMoYVN0cikpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXRbdXRpbC50b1NldFN0cmluZyhhU3RyKV07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVN0ciArICdcIiBpcyBub3QgaW4gdGhlIHNldC4nKTtcbiAgfTtcblxuICAvKipcbiAgICogV2hhdCBpcyB0aGUgZWxlbWVudCBhdCB0aGUgZ2l2ZW4gaW5kZXg/XG4gICAqXG4gICAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICAgKi9cbiAgQXJyYXlTZXQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gQXJyYXlTZXRfYXQoYUlkeCkge1xuICAgIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FycmF5W2FJZHhdO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gICAqIGluZGljYXRlZCBieSBpbmRleE9mKS4gTm90ZSB0aGF0IHRoaXMgaXMgYSBjb3B5IG9mIHRoZSBpbnRlcm5hbCBhcnJheSB1c2VkXG4gICAqIGZvciBzdG9yaW5nIHRoZSBtZW1iZXJzIHNvIHRoYXQgbm8gb25lIGNhbiBtZXNzIHdpdGggaW50ZXJuYWwgc3RhdGUuXG4gICAqL1xuICBBcnJheVNldC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X3RvQXJyYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCk7XG4gIH07XG5cbiAgZXhwb3J0cy5BcnJheVNldCA9IEFycmF5U2V0O1xuXG59KTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cbmlmICh0eXBlb2YgZGVmaW5lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGRlZmluZSA9IHJlcXVpcmUoJ2FtZGVmaW5lJykobW9kdWxlLCByZXF1aXJlKTtcbn1cbmRlZmluZShmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cbiAgdmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbiAgLy8gQSBzaW5nbGUgYmFzZSA2NCBkaWdpdCBjYW4gY29udGFpbiA2IGJpdHMgb2YgZGF0YS4gRm9yIHRoZSBiYXNlIDY0IHZhcmlhYmxlXG4gIC8vIGxlbmd0aCBxdWFudGl0aWVzIHdlIHVzZSBpbiB0aGUgc291cmNlIG1hcCBzcGVjLCB0aGUgZmlyc3QgYml0IGlzIHRoZSBzaWduLFxuICAvLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbiAgLy8gY29udGludWF0aW9uIGJpdC4gVGhlIGNvbnRpbnVhdGlvbiBiaXQgdGVsbHMgdXMgd2hldGhlciB0aGVyZSBhcmUgbW9yZVxuICAvLyBkaWdpdHMgaW4gdGhpcyB2YWx1ZSBmb2xsb3dpbmcgdGhpcyBkaWdpdC5cbiAgLy9cbiAgLy8gICBDb250aW51YXRpb25cbiAgLy8gICB8ICAgIFNpZ25cbiAgLy8gICB8ICAgIHxcbiAgLy8gICBWICAgIFZcbiAgLy8gICAxMDEwMTFcblxuICB2YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4gIC8vIGJpbmFyeTogMTAwMDAwXG4gIHZhciBWTFFfQkFTRSA9IDEgPDwgVkxRX0JBU0VfU0hJRlQ7XG5cbiAgLy8gYmluYXJ5OiAwMTExMTFcbiAgdmFyIFZMUV9CQVNFX01BU0sgPSBWTFFfQkFTRSAtIDE7XG5cbiAgLy8gYmluYXJ5OiAxMDAwMDBcbiAgdmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGZyb20gYSB0d28tY29tcGxlbWVudCB2YWx1ZSB0byBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICAgKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAgICogICAxIGJlY29tZXMgMiAoMTAgYmluYXJ5KSwgLTEgYmVjb21lcyAzICgxMSBiaW5hcnkpXG4gICAqICAgMiBiZWNvbWVzIDQgKDEwMCBiaW5hcnkpLCAtMiBiZWNvbWVzIDUgKDEwMSBiaW5hcnkpXG4gICAqL1xuICBmdW5jdGlvbiB0b1ZMUVNpZ25lZChhVmFsdWUpIHtcbiAgICByZXR1cm4gYVZhbHVlIDwgMFxuICAgICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgICAgOiAoYVZhbHVlIDw8IDEpICsgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0byBhIHR3by1jb21wbGVtZW50IHZhbHVlIGZyb20gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXNcbiAgICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gICAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICAgKiAgIDQgKDEwMCBiaW5hcnkpIGJlY29tZXMgMiwgNSAoMTAxIGJpbmFyeSkgYmVjb21lcyAtMlxuICAgKi9cbiAgZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgICB2YXIgaXNOZWdhdGl2ZSA9IChhVmFsdWUgJiAxKSA9PT0gMTtcbiAgICB2YXIgc2hpZnRlZCA9IGFWYWx1ZSA+PiAxO1xuICAgIHJldHVybiBpc05lZ2F0aXZlXG4gICAgICA/IC1zaGlmdGVkXG4gICAgICA6IHNoaWZ0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYmFzZSA2NCBWTFEgZW5jb2RlZCB2YWx1ZS5cbiAgICovXG4gIGV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2VuY29kZShhVmFsdWUpIHtcbiAgICB2YXIgZW5jb2RlZCA9IFwiXCI7XG4gICAgdmFyIGRpZ2l0O1xuXG4gICAgdmFyIHZscSA9IHRvVkxRU2lnbmVkKGFWYWx1ZSk7XG5cbiAgICBkbyB7XG4gICAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgICB2bHEgPj4+PSBWTFFfQkFTRV9TSElGVDtcbiAgICAgIGlmICh2bHEgPiAwKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgICAgLy8gY29udGludWF0aW9uIGJpdCBpcyBtYXJrZWQuXG4gICAgICAgIGRpZ2l0IHw9IFZMUV9DT05USU5VQVRJT05fQklUO1xuICAgICAgfVxuICAgICAgZW5jb2RlZCArPSBiYXNlNjQuZW5jb2RlKGRpZ2l0KTtcbiAgICB9IHdoaWxlICh2bHEgPiAwKTtcblxuICAgIHJldHVybiBlbmNvZGVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAgICogdmFsdWUgYW5kIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgdmlhIHRoZSBvdXQgcGFyYW1ldGVyLlxuICAgKi9cbiAgZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFPdXRQYXJhbSkge1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgc3RyTGVuID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgdmFyIHNoaWZ0ID0gMDtcbiAgICB2YXIgY29udGludWF0aW9uLCBkaWdpdDtcblxuICAgIGRvIHtcbiAgICAgIGlmIChpID49IHN0ckxlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBtb3JlIGRpZ2l0cyBpbiBiYXNlIDY0IFZMUSB2YWx1ZS5cIik7XG4gICAgICB9XG4gICAgICBkaWdpdCA9IGJhc2U2NC5kZWNvZGUoYVN0ci5jaGFyQXQoaSsrKSk7XG4gICAgICBjb250aW51YXRpb24gPSAhIShkaWdpdCAmIFZMUV9DT05USU5VQVRJT05fQklUKTtcbiAgICAgIGRpZ2l0ICY9IFZMUV9CQVNFX01BU0s7XG4gICAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgICAgc2hpZnQgKz0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgfSB3aGlsZSAoY29udGludWF0aW9uKTtcblxuICAgIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgICBhT3V0UGFyYW0ucmVzdCA9IGFTdHIuc2xpY2UoaSk7XG4gIH07XG5cbn0pO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpO1xufVxuZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuICB2YXIgY2hhclRvSW50TWFwID0ge307XG4gIHZhciBpbnRUb0NoYXJNYXAgPSB7fTtcblxuICAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbiAgICAuc3BsaXQoJycpXG4gICAgLmZvckVhY2goZnVuY3Rpb24gKGNoLCBpbmRleCkge1xuICAgICAgY2hhclRvSW50TWFwW2NoXSA9IGluZGV4O1xuICAgICAgaW50VG9DaGFyTWFwW2luZGV4XSA9IGNoO1xuICAgIH0pO1xuXG4gIC8qKlxuICAgKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICAgKi9cbiAgZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRfZW5jb2RlKGFOdW1iZXIpIHtcbiAgICBpZiAoYU51bWJlciBpbiBpbnRUb0NoYXJNYXApIHtcbiAgICAgIHJldHVybiBpbnRUb0NoYXJNYXBbYU51bWJlcl07XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6IFwiICsgYU51bWJlcik7XG4gIH07XG5cbiAgLyoqXG4gICAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IHRvIGFuIGludGVnZXIuXG4gICAqL1xuICBleHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGJhc2U2NF9kZWNvZGUoYUNoYXIpIHtcbiAgICBpZiAoYUNoYXIgaW4gY2hhclRvSW50TWFwKSB7XG4gICAgICByZXR1cm4gY2hhclRvSW50TWFwW2FDaGFyXTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vdCBhIHZhbGlkIGJhc2UgNjQgZGlnaXQ6IFwiICsgYUNoYXIpO1xuICB9O1xuXG59KTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbmlmICh0eXBlb2YgZGVmaW5lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGRlZmluZSA9IHJlcXVpcmUoJ2FtZGVmaW5lJykobW9kdWxlLCByZXF1aXJlKTtcbn1cbmRlZmluZShmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbiAgdmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xuICB2YXIgQXJyYXlTZXQgPSByZXF1aXJlKCcuL2FycmF5LXNldCcpLkFycmF5U2V0O1xuICB2YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG4gIHZhciBTb3VyY2VNYXBDb25zdW1lciA9IHJlcXVpcmUoJy4vc291cmNlLW1hcC1jb25zdW1lcicpLlNvdXJjZU1hcENvbnN1bWVyO1xuXG4gIC8qKlxuICAgKiBBIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoIHdlIGNhblxuICAgKiBxdWVyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgcG9zaXRpb25zIGJ5IGdpdmluZyBpdCBhIGZpbGVcbiAgICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gICAqXG4gICAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyB0aGUgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvclxuICAgKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gICAqIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICAgKlxuICAgKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAgICogICAtIHNvdXJjZXM6IEFuIGFycmF5IG9mIFVSTHMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAgICogICAtIG5hbWVzOiBBbiBhcnJheSBvZiBpZGVudGlmaWVycyB3aGljaCBjYW4gYmUgcmVmZXJyZW5jZWQgYnkgaW5kaXZpZHVhbCBtYXBwaW5ncy5cbiAgICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gICAqICAgLSBzb3VyY2VzQ29udGVudDogT3B0aW9uYWwuIEFuIGFycmF5IG9mIGNvbnRlbnRzIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gICAqICAgLSBtYXBwaW5nczogQSBzdHJpbmcgb2YgYmFzZTY0IFZMUXMgd2hpY2ggY29udGFpbiB0aGUgYWN0dWFsIG1hcHBpbmdzLlxuICAgKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgKlxuICAgKiBIZXJlIGlzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdOlxuICAgKlxuICAgKiAgICAge1xuICAgKiAgICAgICB2ZXJzaW9uIDogMyxcbiAgICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAgICogICAgICAgc291cmNlUm9vdCA6IFwiXCIsXG4gICAqICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAgICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gICAqICAgICAgIG1hcHBpbmdzOiBcIkFBLEFCOztBQkNERTtcIlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdD9wbGk9MSNcbiAgICovXG4gIGZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICAgIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICAgIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gICAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gICAgLy8gU2FzcyAzLjMgbGVhdmVzIG91dCB0aGUgJ25hbWVzJyBhcnJheSwgc28gd2UgZGV2aWF0ZSBmcm9tIHRoZSBzcGVjICh3aGljaFxuICAgIC8vIHJlcXVpcmVzIHRoZSBhcnJheSkgdG8gcGxheSBuaWNlIGhlcmUuXG4gICAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gICAgdmFyIHNvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VSb290JywgbnVsbCk7XG4gICAgdmFyIHNvdXJjZXNDb250ZW50ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlc0NvbnRlbnQnLCBudWxsKTtcbiAgICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICAgIHZhciBmaWxlID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnZmlsZScsIG51bGwpO1xuXG4gICAgLy8gT25jZSBhZ2FpbiwgU2FzcyBkZXZpYXRlcyBmcm9tIHRoZSBzcGVjIGFuZCBzdXBwbGllcyB0aGUgdmVyc2lvbiBhcyBhXG4gICAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgICB9XG5cbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgc291cmNlcyA9IHNvdXJjZXMubWFwKHV0aWwubm9ybWFsaXplKTtcblxuICAgIC8vIFBhc3MgYHRydWVgIGJlbG93IHRvIGFsbG93IGR1cGxpY2F0ZSBuYW1lcyBhbmQgc291cmNlcy4gV2hpbGUgc291cmNlIG1hcHNcbiAgICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAgIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgICAvLyAjNzIgYW5kIGJ1Z3ppbC5sYS84ODk0OTIuXG4gICAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMsIHRydWUpO1xuICAgIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICAgIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gIH1cblxuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gU291cmNlTWFwR2VuZXJhdG9yIGFTb3VyY2VNYXBcbiAgICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAgICogQHJldHVybnMgQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApIHtcbiAgICAgIHZhciBzbWMgPSBPYmplY3QuY3JlYXRlKEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcblxuICAgICAgc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgICAgc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICAgIHNtYy5zb3VyY2VSb290ID0gYVNvdXJjZU1hcC5fc291cmNlUm9vdDtcbiAgICAgIHNtYy5zb3VyY2VzQ29udGVudCA9IGFTb3VyY2VNYXAuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoc21jLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgICAgc21jLmZpbGUgPSBhU291cmNlTWFwLl9maWxlO1xuXG4gICAgICBzbWMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IGFTb3VyY2VNYXAuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpO1xuICAgICAgc21jLl9fb3JpZ2luYWxNYXBwaW5ncyA9IGFTb3VyY2VNYXAuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpXG4gICAgICAgIC5zb3J0KHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuXG4gICAgICByZXR1cm4gc21jO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAgICovXG4gIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAgICovXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc291cmNlcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCA/IHV0aWwuam9pbih0aGlzLnNvdXJjZVJvb3QsIHMpIDogcztcbiAgICAgIH0sIHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAgICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gICAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7XG4gICAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwO1xuICAgICAgdmFyIHByZXZpb3VzTmFtZSA9IDA7XG4gICAgICB2YXIgc3RyID0gYVN0cjtcbiAgICAgIHZhciB0ZW1wID0ge307XG4gICAgICB2YXIgbWFwcGluZztcblxuICAgICAgd2hpbGUgKHN0ci5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzdHIuY2hhckF0KDApID09PSAnOycpIHtcbiAgICAgICAgICBnZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgc3RyID0gc3RyLnNsaWNlKDEpO1xuICAgICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdHIuY2hhckF0KDApID09PSAnLCcpIHtcbiAgICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbWFwcGluZyA9IHt9O1xuICAgICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IGdlbmVyYXRlZExpbmU7XG5cbiAgICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICAgIGJhc2U2NFZMUS5kZWNvZGUoc3RyLCB0ZW1wKTtcbiAgICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgdGVtcC52YWx1ZTtcbiAgICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuICAgICAgICAgIHN0ciA9IHRlbXAucmVzdDtcblxuICAgICAgICAgIGlmIChzdHIubGVuZ3RoID4gMCAmJiAhdGhpcy5fbmV4dENoYXJJc01hcHBpbmdTZXBhcmF0b3Ioc3RyKSkge1xuICAgICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShzdHIsIHRlbXApO1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHByZXZpb3VzU291cmNlICsgdGVtcC52YWx1ZSk7XG4gICAgICAgICAgICBwcmV2aW91c1NvdXJjZSArPSB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgc3RyID0gdGVtcC5yZXN0O1xuICAgICAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDAgfHwgdGhpcy5fbmV4dENoYXJJc01hcHBpbmdTZXBhcmF0b3Ioc3RyKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE9yaWdpbmFsIGxpbmUuXG4gICAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKHN0ciwgdGVtcCk7XG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IHByZXZpb3VzT3JpZ2luYWxMaW5lICsgdGVtcC52YWx1ZTtcbiAgICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgICAvLyBMaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWRcbiAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lICs9IDE7XG4gICAgICAgICAgICBzdHIgPSB0ZW1wLnJlc3Q7XG4gICAgICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9uZXh0Q2hhcklzTWFwcGluZ1NlcGFyYXRvcihzdHIpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT3JpZ2luYWwgY29sdW1uLlxuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShzdHIsIHRlbXApO1xuICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gKyB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG4gICAgICAgICAgICBzdHIgPSB0ZW1wLnJlc3Q7XG5cbiAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID4gMCAmJiAhdGhpcy5fbmV4dENoYXJJc01hcHBpbmdTZXBhcmF0b3Ioc3RyKSkge1xuICAgICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKHN0ciwgdGVtcCk7XG4gICAgICAgICAgICAgIG1hcHBpbmcubmFtZSA9IHRoaXMuX25hbWVzLmF0KHByZXZpb3VzTmFtZSArIHRlbXAudmFsdWUpO1xuICAgICAgICAgICAgICBwcmV2aW91c05hbWUgKz0gdGVtcC52YWx1ZTtcbiAgICAgICAgICAgICAgc3RyID0gdGVtcC5yZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3Muc29ydCh1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9ucyk7XG4gICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5zb3J0KHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIG1hcHBpbmcgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGh5cG90aGV0aWNhbCBcIm5lZWRsZVwiIG1hcHBpbmcgdGhhdFxuICAgKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29sdW1uTmFtZSwgYUNvbXBhcmF0b3IpIHtcbiAgICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAgIC8vIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgdGhlbiByZXR1cm4gdGhlIG9wcG9zaXRlIHBvc2l0aW9uIGl0XG4gICAgICAvLyBwb2ludHMgdG8uIEJlY2F1c2UgdGhlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHdlIGNhbiB1c2UgYmluYXJ5IHNlYXJjaCB0b1xuICAgICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgICBpZiAoYU5lZWRsZVthTGluZU5hbWVdIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTGluZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICAgIH1cbiAgICAgIGlmIChhTmVlZGxlW2FDb2x1bW5OYW1lXSA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FDb2x1bW5OYW1lXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IpO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGxhc3QgY29sdW1uIGZvciBlYWNoIGdlbmVyYXRlZCBtYXBwaW5nLiBUaGUgbGFzdCBjb2x1bW4gaXNcbiAgICogaW5jbHVzaXZlLlxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29tcHV0ZUNvbHVtblNwYW5zID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jb21wdXRlQ29sdW1uU3BhbnMoKSB7XG4gICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAgIC8vIE1hcHBpbmdzIGRvIG5vdCBjb250YWluIGEgZmllbGQgZm9yIHRoZSBsYXN0IGdlbmVyYXRlZCBjb2x1bW50LiBXZVxuICAgICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgICAgLy8gbWFwcGluZ3MgYXJlIGNvbnRpZ3VvdXMgKGkuZS4gZ2l2ZW4gdHdvIGNvbnNlY3V0aXZlIG1hcHBpbmdzLCB0aGVcbiAgICAgICAgLy8gZmlyc3QgbWFwcGluZyBlbmRzIHdoZXJlIHRoZSBzZWNvbmQgb25lIHN0YXJ0cykuXG4gICAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgbmV4dE1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleCArIDFdO1xuXG4gICAgICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBsYXN0IG1hcHBpbmcgZm9yIGVhY2ggbGluZSBzcGFucyB0aGUgZW50aXJlIGxpbmUuXG4gICAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IEluZmluaXR5O1xuICAgICAgfVxuICAgIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICAgKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAgICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gICAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICAgKlxuICAgKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgICAgfTtcblxuICAgICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlbmVyYXRlZExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZXJhdGVkQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9ucyk7XG5cbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgdGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbih0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBuYW1lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbmFtZScsIG51bGwpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbmFtZTogbnVsbFxuICAgICAgfTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAgICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICAgKiBhdmFpbGlibGUuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIGFTb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgYVNvdXJjZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoYVNvdXJjZSldO1xuICAgICAgfVxuXG4gICAgICB2YXIgdXJsO1xuICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsXG4gICAgICAgICAgJiYgKHVybCA9IHV0aWwudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpIHtcbiAgICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgICAgLy8gbWFueSB1c2Vycy4gV2UgY2FuIGhlbHAgdGhlbSBvdXQgd2hlbiB0aGV5IGV4cGVjdCBmaWxlOi8vIFVSSXMgdG9cbiAgICAgICAgLy8gYmVoYXZlIGxpa2UgaXQgd291bGQgaWYgdGhleSB3ZXJlIHJ1bm5pbmcgYSBsb2NhbCBIVFRQIHNlcnZlci4gU2VlXG4gICAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgICAgdmFyIGZpbGVVcmlBYnNQYXRoID0gYVNvdXJjZS5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCBcIlwiKTtcbiAgICAgICAgaWYgKHVybC5zY2hlbWUgPT0gXCJmaWxlXCJcbiAgICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihmaWxlVXJpQWJzUGF0aCldXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKFwiL1wiICsgYVNvdXJjZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoXCIvXCIgKyBhU291cmNlKV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IGZyb21cbiAgICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgICAgLy8gZG9uJ3Qgd2FudCB0byB0aHJvdyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBzb3VyY2UgLSB3ZSBqdXN0IHdhbnQgdG9cbiAgICAgIC8vIHJldHVybiBudWxsLCBzbyB3ZSBwcm92aWRlIGEgZmxhZyB0byBleGl0IGdyYWNlZnVsbHkuXG4gICAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAgICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gICAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICpcbiAgICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICAgIHNvdXJjZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSxcbiAgICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBuZWVkbGUuc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIG5lZWRsZS5zb3VyY2UpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhuZWVkbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuXG4gICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgfTtcbiAgICB9O1xuXG4gIGV4cG9ydHMuQmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IEJhc2ljU291cmNlTWFwQ29uc3VtZXI7XG5cbn0pO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpO1xufVxuZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuICAvKipcbiAgICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gICAqXG4gICAqIEBwYXJhbSBhTG93IEluZGljZXMgaGVyZSBhbmQgbG93ZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAgICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gICAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAgICogQHBhcmFtIGFIYXlzdGFjayBUaGUgbm9uLWVtcHR5IGFycmF5IGJlaW5nIHNlYXJjaGVkLlxuICAgKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVjdXJzaXZlU2VhcmNoKGFMb3csIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlKSB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgLy9cbiAgICAvLyAgIDIuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYnV0IHdlIGNhbiByZXR1cm4gdGhlIGluZGV4IG9mXG4gICAgLy8gICAgICB0aGUgbmV4dCBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBsZXNzIHRoYW4gdGhhdCBlbGVtZW50LlxuICAgIC8vXG4gICAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgICAvLyAgICAgIGVsZW1lbnQgd2hpY2ggaXMgbGVzcyB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlXG4gICAgLy8gICAgICByZXR1cm4gLTEuXG4gICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gICAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgICAvLyBhSGF5c3RhY2tbbWlkXSBpcyBncmVhdGVyIHRoYW4gb3VyIG5lZWRsZS5cbiAgICAgIGlmIChhSGlnaCAtIG1pZCA+IDEpIHtcbiAgICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBkaWQgbm90IGZpbmQgYW4gZXhhY3QgbWF0Y2gsIHJldHVybiB0aGUgbmV4dCBjbG9zZXN0IG9uZVxuICAgICAgLy8gKHRlcm1pbmF0aW9uIGNhc2UgMikuXG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIGFIYXlzdGFja1ttaWRdIGlzIGxlc3MgdGhhbiBvdXIgbmVlZGxlLlxuICAgICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKGFMb3csIG1pZCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSk7XG4gICAgICB9XG4gICAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgyKSBvciAoMykgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICAgKiB0aGUgaW5kZXggb2YgbmV4dCBsb3dlc3QgdmFsdWUgY2hlY2tlZCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXNcbiAgICogYmVjYXVzZSBtYXBwaW5ncyBiZXR3ZWVuIG9yaWdpbmFsIGFuZCBnZW5lcmF0ZWQgbGluZS9jb2wgcGFpcnMgYXJlIHNpbmdsZVxuICAgKiBwb2ludHMsIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzc1xuICAgKiBqdXN0IG1lYW5zIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAgICpcbiAgICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAgICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAgICogQHBhcmFtIGFDb21wYXJlIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgdGhlIG5lZWRsZSBhbmQgYW4gZWxlbWVudCBpbiB0aGVcbiAgICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICAgKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICAgKi9cbiAgZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSkge1xuICAgIGlmIChhSGF5c3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUpXG4gIH07XG5cbn0pO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpO1xufVxuZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuICB2YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuICB2YXIgYmluYXJ5U2VhcmNoID0gcmVxdWlyZSgnLi9iaW5hcnktc2VhcmNoJyk7XG4gIHZhciBTb3VyY2VNYXBDb25zdW1lciA9IHJlcXVpcmUoJy4vc291cmNlLW1hcC1jb25zdW1lcicpLlNvdXJjZU1hcENvbnN1bWVyO1xuICB2YXIgQmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IHJlcXVpcmUoJy4vYmFzaWMtc291cmNlLW1hcC1jb25zdW1lcicpLkJhc2ljU291cmNlTWFwQ29uc3VtZXI7XG5cbiAgLyoqXG4gICAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAgICogd2UgY2FuIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbi4gSXQgZGlmZmVycyBmcm9tIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5cbiAgICogdGhhdCBpdCB0YWtlcyBcImluZGV4ZWRcIiBzb3VyY2UgbWFwcyAoaS5lLiBvbmVzIHdpdGggYSBcInNlY3Rpb25zXCIgZmllbGQpIGFzXG4gICAqIGlucHV0LlxuICAgKlxuICAgKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgYSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yIGFscmVhZHlcbiAgICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICAgKiBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAgICpcbiAgICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gICAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqICAgLSBzZWN0aW9uczogQSBsaXN0IG9mIHNlY3Rpb24gZGVmaW5pdGlvbnMuXG4gICAqXG4gICAqIEVhY2ggdmFsdWUgdW5kZXIgdGhlIFwic2VjdGlvbnNcIiBmaWVsZCBoYXMgdHdvIGZpZWxkczpcbiAgICogICAtIG9mZnNldDogVGhlIG9mZnNldCBpbnRvIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgYXQgd2hpY2ggdGhpcyBzZWN0aW9uXG4gICAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gICAqICAgICAgIGZpZWxkLlxuICAgKiAgIC0gbWFwOiBBIHNvdXJjZSBtYXAgZGVmaW5pdGlvbi4gVGhpcyBzb3VyY2UgbWFwIGNvdWxkIGFsc28gYmUgaW5kZXhlZCxcbiAgICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAgICpcbiAgICogSW5zdGVhZCBvZiB0aGUgXCJtYXBcIiBmaWVsZCwgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBcInVybFwiIGZpZWxkXG4gICAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gICAqIHVuc3VwcG9ydGVkLlxuICAgKlxuICAgKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICAgKiBtb2RpZmllZCB0byBvbWl0IGEgc2VjdGlvbiB3aGljaCB1c2VzIHRoZSBcInVybFwiIGZpZWxkLlxuICAgKlxuICAgKiAge1xuICAgKiAgICB2ZXJzaW9uIDogMyxcbiAgICogICAgZmlsZTogXCJhcHAuanNcIixcbiAgICogICAgc2VjdGlvbnM6IFt7XG4gICAqICAgICAgb2Zmc2V0OiB7bGluZToxMDAsIGNvbHVtbjoxMH0sXG4gICAqICAgICAgbWFwOiB7XG4gICAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAgICogICAgICAgIGZpbGU6IFwic2VjdGlvbi5qc1wiLFxuICAgKiAgICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICAgKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gICAqICAgICAgICBtYXBwaW5nczogXCJBQUFBLEU7O0FCQ0RFO1wiXG4gICAqICAgICAgfVxuICAgKiAgICB9XSxcbiAgICogIH1cbiAgICpcbiAgICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICAgKi9cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICAgIH1cblxuICAgIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICAgIHZhciBzZWN0aW9ucyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NlY3Rpb25zJyk7XG5cbiAgICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgICB9XG5cbiAgICB2YXIgbGFzdE9mZnNldCA9IHtcbiAgICAgIGxpbmU6IC0xLFxuICAgICAgY29sdW1uOiAwXG4gICAgfTtcbiAgICB0aGlzLl9zZWN0aW9ucyA9IHNlY3Rpb25zLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgaWYgKHMudXJsKSB7XG4gICAgICAgIC8vIFRoZSB1cmwgZmllbGQgd2lsbCByZXF1aXJlIHN1cHBvcnQgZm9yIGFzeW5jaHJvbmljaXR5LlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMTZcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgICAgfVxuICAgICAgdmFyIG9mZnNldCA9IHV0aWwuZ2V0QXJnKHMsICdvZmZzZXQnKTtcbiAgICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgICAgdmFyIG9mZnNldENvbHVtbiA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2NvbHVtbicpO1xuXG4gICAgICBpZiAob2Zmc2V0TGluZSA8IGxhc3RPZmZzZXQubGluZSB8fFxuICAgICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdGlvbiBvZmZzZXRzIG11c3QgYmUgb3JkZXJlZCBhbmQgbm9uLW92ZXJsYXBwaW5nLicpO1xuICAgICAgfVxuICAgICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2VuZXJhdGVkT2Zmc2V0OiB7XG4gICAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgICAvLyBlbmNvZGluZy9kZWNvZGluZyBmcm9tIFZMUS5cbiAgICAgICAgICBnZW5lcmF0ZWRMaW5lOiBvZmZzZXRMaW5lICsgMSxcbiAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgICAgfSxcbiAgICAgICAgY29uc3VtZXI6IG5ldyBTb3VyY2VNYXBDb25zdW1lcih1dGlsLmdldEFyZyhzLCAnbWFwJykpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuICBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAgICovXG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgc291cmNlcy5wdXNoKHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXNbal0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNvdXJjZXM7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gICAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gICAqXG4gICAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqXG4gICAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICAgKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICAgKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gICAqL1xuICBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICAgIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgICB9O1xuXG4gICAgICAvLyBGaW5kIHRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbiB3ZSdyZSB0cnlpbmcgdG8gbWFwXG4gICAgICAvLyB0byBhbiBvcmlnaW5hbCBwb3NpdGlvbi5cbiAgICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICAgIGZ1bmN0aW9uKG5lZWRsZSwgc2VjdGlvbikge1xuICAgICAgICAgIHZhciBjbXAgPSBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU7XG4gICAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgICAgcmV0dXJuIGNtcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgfSk7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICAgIGlmICghc2VjdGlvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgICBuYW1lOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICBsaW5lOiBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtXG4gICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmVcbiAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgIDogMClcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICAgKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gICAqIGF2YWlsYWJsZS5cbiAgICovXG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gICAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICAgIHZhciBjb250ZW50ID0gc2VjdGlvbi5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIHRydWUpO1xuICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAgICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gICAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gICAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICpcbiAgICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gICAqL1xuICBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoaXMgc2VjdGlvbiBpZiB0aGUgcmVxdWVzdGVkIHNvdXJjZSBpcyBpbiB0aGUgbGlzdCBvZlxuICAgICAgICAvLyBzb3VyY2VzIG9mIHRoZSBjb25zdW1lci5cbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb24pIHtcbiAgICAgICAgICB2YXIgcmV0ID0ge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZFBvc2l0aW9uLmNvbHVtbiArXG4gICAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgICAgIDogMClcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAgICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gICAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gICAqL1xuICBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuICAgICAgICB2YXIgc2VjdGlvbk1hcHBpbmdzID0gc2VjdGlvbi5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIG1hcHBpbmcgPSBzZWN0aW9uTWFwcGluZ3NbaV07XG5cbiAgICAgICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICAgICAgdmFyIHNvdXJjZVJvb3QgPSBzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3Q7XG5cbiAgICAgICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUaGUgbWFwcGluZ3MgY29taW5nIGZyb20gdGhlIGNvbnN1bWVyIGZvciB0aGUgc2VjdGlvbiBoYXZlXG4gICAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBvZmZzZXQgdGhlbSB0byBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbmNhdGVuYXRlZFxuICAgICAgICAgIC8vIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSArXG4gICAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuY29sdW1uICtcbiAgICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSlcbiAgICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgIG5hbWU6IG1hcHBpbmcubmFtZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICAgIGlmICh0eXBlb2YgYWRqdXN0ZWRNYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnMpO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnNvcnQodXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbiAgZXhwb3J0cy5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIgPSBJbmRleGVkU291cmNlTWFwQ29uc3VtZXI7XG59KTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxNCBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbmlmICh0eXBlb2YgZGVmaW5lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGRlZmluZSA9IHJlcXVpcmUoJ2FtZGVmaW5lJykobW9kdWxlLCByZXF1aXJlKTtcbn1cbmRlZmluZShmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICAgKiBwb3NpdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gICAgLy8gT3B0aW1pemVkIGZvciBtb3N0IGNvbW1vbiBjYXNlXG4gICAgdmFyIGxpbmVBID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZTtcbiAgICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICAgIHZhciBjb2x1bW5BID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uO1xuICAgIHZhciBjb2x1bW5CID0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICAgIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG4gIH1cblxuICAvKipcbiAgICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICAgKiBwZXJmb3JtYW5jZSBjb25zY2lvdXMgbWFubmVyLiBJdCB0cmFkZXMgYSBuZWdsaWJhYmxlIG92ZXJoZWFkIGluIGdlbmVyYWxcbiAgICogY2FzZSBmb3IgYSBsYXJnZSBzcGVlZHVwIGluIGNhc2Ugb2YgbWFwcGluZ3MgYmVpbmcgYWRkZWQgaW4gb3JkZXIuXG4gICAqL1xuICBmdW5jdGlvbiBNYXBwaW5nTGlzdCgpIHtcbiAgICB0aGlzLl9hcnJheSA9IFtdO1xuICAgIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gICAgLy8gU2VydmVzIGFzIGluZmltdW1cbiAgICB0aGlzLl9sYXN0ID0ge2dlbmVyYXRlZExpbmU6IC0xLCBnZW5lcmF0ZWRDb2x1bW46IDB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgdGhyb3VnaCBpbnRlcm5hbCBpdGVtcy4gVGhpcyBtZXRob2QgdGFrZXMgdGhlIHNhbWUgYXJndW1lbnRzIHRoYXRcbiAgICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAgICpcbiAgICogTk9URTogVGhlIG9yZGVyIG9mIHRoZSBtYXBwaW5ncyBpcyBOT1QgZ3VhcmFudGVlZC5cbiAgICovXG4gIE1hcHBpbmdMaXN0LnByb3RvdHlwZS51bnNvcnRlZEZvckVhY2ggPVxuICAgIGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2ZvckVhY2goYUNhbGxiYWNrLCBhVGhpc0FyZykge1xuICAgICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gT2JqZWN0IGFNYXBwaW5nXG4gICAqL1xuICBNYXBwaW5nTGlzdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gTWFwcGluZ0xpc3RfYWRkKGFNYXBwaW5nKSB7XG4gICAgdmFyIG1hcHBpbmc7XG4gICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIodGhpcy5fbGFzdCwgYU1hcHBpbmcpKSB7XG4gICAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgICB0aGlzLl9hcnJheS5wdXNoKGFNYXBwaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9hcnJheS5wdXNoKGFNYXBwaW5nKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZsYXQsIHNvcnRlZCBhcnJheSBvZiBtYXBwaW5ncy4gVGhlIG1hcHBpbmdzIGFyZSBzb3J0ZWQgYnlcbiAgICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICAgKlxuICAgKiBXQVJOSU5HOiBUaGlzIG1ldGhvZCByZXR1cm5zIGludGVybmFsIGRhdGEgd2l0aG91dCBjb3B5aW5nLCBmb3JcbiAgICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gICAqIGFuIGltbXV0YWJsZSBib3Jyb3cuIElmIHlvdSB3YW50IHRvIHRha2Ugb3duZXJzaGlwLCB5b3UgbXVzdCBtYWtlIHlvdXIgb3duXG4gICAqIGNvcHkuXG4gICAqL1xuICBNYXBwaW5nTGlzdC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X3RvQXJyYXkoKSB7XG4gICAgaWYgKCF0aGlzLl9zb3J0ZWQpIHtcbiAgICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnMpO1xuICAgICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2FycmF5O1xuICB9O1xuXG4gIGV4cG9ydHMuTWFwcGluZ0xpc3QgPSBNYXBwaW5nTGlzdDtcblxufSk7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5pZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBkZWZpbmUgPSByZXF1aXJlKCdhbWRlZmluZScpKG1vZHVsZSwgcmVxdWlyZSk7XG59XG5kZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXG4gIHZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICAgIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICAgIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgfVxuXG4gICAgLy8gV2UgZG8gbGF0ZSByZXF1aXJlcyBiZWNhdXNlIHRoZSBzdWJjbGFzc2VzIHJlcXVpcmUoKSB0aGlzIGZpbGUuXG4gICAgaWYgKHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsKSB7XG4gICAgICB2YXIgaW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi9pbmRleGVkLXNvdXJjZS1tYXAtY29uc3VtZXInKTtcbiAgICAgIHJldHVybiBuZXcgaW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IHJlcXVpcmUoJy4vYmFzaWMtc291cmNlLW1hcC1jb25zdW1lcicpO1xuICAgICAgcmV0dXJuIG5ldyBiYXNpY1NvdXJjZU1hcENvbnN1bWVyLkJhc2ljU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwKTtcbiAgICB9XG4gIH1cblxuICBTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID0gZnVuY3Rpb24oYVNvdXJjZU1hcCkge1xuICAgIHZhciBiYXNpY1NvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi9iYXNpYy1zb3VyY2UtbWFwLWNvbnN1bWVyJyk7XG4gICAgcmV0dXJuIGJhc2ljU291cmNlTWFwQ29uc3VtZXIuQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICAgICAgICAgICAgLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICAgKi9cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuXG4gIC8vIGBfX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmQgYF9fb3JpZ2luYWxNYXBwaW5nc2AgYXJlIGFycmF5cyB0aGF0IGhvbGQgdGhlXG4gIC8vIHBhcnNlZCBtYXBwaW5nIGNvb3JkaW5hdGVzIGZyb20gdGhlIHNvdXJjZSBtYXAncyBcIm1hcHBpbmdzXCIgYXR0cmlidXRlLiBUaGV5XG4gIC8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICAvLyBgX29yaWdpbmFsTWFwcGluZ3NgIGdldHRlcnMgcmVzcGVjdGl2ZWx5LCBhbmQgd2Ugb25seSBwYXJzZSB0aGUgbWFwcGluZ3NcbiAgLy8gYW5kIGNyZWF0ZSB0aGVzZSBhcnJheXMgb25jZSBxdWVyaWVkIGZvciBhIHNvdXJjZSBsb2NhdGlvbi4gV2UganVtcCB0aHJvdWdoXG4gIC8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuICAvLyB0aGVtIGlzIGV4cGVuc2l2ZSwgc28gd2Ugb25seSB3YW50IHRvIGRvIGl0IGlmIHdlIG11c3QuXG4gIC8vXG4gIC8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4gIC8vXG4gIC8vICAgICB7XG4gIC8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gIC8vICAgICAgIGdlbmVyYXRlZENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuICAvLyAgICAgICBzb3VyY2U6IFRoZSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGF0IGdlbmVyYXRlZCB0aGlzXG4gIC8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbiAgLy8gICAgICAgb3JpZ2luYWxMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4gIC8vICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbiAgLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuICAvLyAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbiAgLy8gICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIHN5bWJvbCB3aGljaCBnZW5lcmF0ZWQgdGhpcyBjaHVuayBvZlxuICAvLyAgICAgICAgICAgICBjb2RlLlxuICAvLyAgICAgfVxuICAvL1xuICAvLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4gIC8vIGBudWxsYC5cbiAgLy9cbiAgLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbiAgLy9cbiAgLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG5cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX2dlbmVyYXRlZE1hcHBpbmdzJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgfVxuICB9KTtcblxuICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19vcmlnaW5hbE1hcHBpbmdzID0gbnVsbDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCF0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncykge1xuICAgICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICAgICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzO1xuICAgIH1cbiAgfSk7XG5cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9uZXh0Q2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfbmV4dENoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0cikge1xuICAgICAgdmFyIGMgPSBhU3RyLmNoYXJBdCgwKTtcbiAgICAgIHJldHVybiBjID09PSBcIjtcIiB8fCBjID09PSBcIixcIjtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gICAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICAgKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICAgKi9cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IF9wYXJzZU1hcHBpbmdzXCIpO1xuICAgIH07XG5cbiAgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcbiAgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVIgPSAyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgZWFjaCBtYXBwaW5nIGJldHdlZW4gYW4gb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uIGFuZCBhXG4gICAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gICAqXG4gICAqIEBwYXJhbSBGdW5jdGlvbiBhQ2FsbGJhY2tcbiAgICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAgICogQHBhcmFtIE9iamVjdCBhQ29udGV4dFxuICAgKiAgICAgICAgT3B0aW9uYWwuIElmIHNwZWNpZmllZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSB0aGUgdmFsdWUgb2YgYHRoaXNgIGV2ZXJ5XG4gICAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICAgKiBAcGFyYW0gYU9yZGVyXG4gICAqICAgICAgICBFaXRoZXIgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAgb3JcbiAgICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gICAqICAgICAgICBpdGVyYXRlIG92ZXIgdGhlIG1hcHBpbmdzIHNvcnRlZCBieSB0aGUgZ2VuZXJhdGVkIGZpbGUncyBsaW5lL2NvbHVtblxuICAgKiAgICAgICAgb3JkZXIgb3IgdGhlIG9yaWdpbmFsJ3Mgc291cmNlL2xpbmUvY29sdW1uIG9yZGVyLCByZXNwZWN0aXZlbHkuIERlZmF1bHRzIHRvXG4gICAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAgICovXG4gIFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5lYWNoTWFwcGluZyA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgICB2YXIgY29udGV4dCA9IGFDb250ZXh0IHx8IG51bGw7XG4gICAgICB2YXIgb3JkZXIgPSBhT3JkZXIgfHwgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSO1xuXG4gICAgICB2YXIgbWFwcGluZ3M7XG4gICAgICBzd2l0Y2ggKG9yZGVyKSB7XG4gICAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjpcbiAgICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSOlxuICAgICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuc291cmNlUm9vdDtcbiAgICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgICAgbmFtZTogbWFwcGluZy5uYW1lXG4gICAgICAgIH07XG4gICAgICB9KS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gICAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZVxuICAgKiBhbmQgbGluZSBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZ1xuICAgKiBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKlxuICAgKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gICAqL1xuICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZ1xuICAgICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAgIC8vIHNldHRpbmcgbmVlZGxlLm9yaWdpbmFsQ29sdW1uIHRvIEluZmluaXR5LCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3RcbiAgICAgIC8vIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBsaW5lLCBwcm92aWRlZCBzdWNoIGEgbWFwcGluZyBleGlzdHMuXG4gICAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICAgIG9yaWdpbmFsTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBJbmZpbml0eVxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhuZWVkbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gbmVlZGxlLm9yaWdpbmFsTGluZSkge1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbLS1pbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcHBpbmdzLnJldmVyc2UoKTtcbiAgICB9O1xuXG4gIGV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxufSk7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5pZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBkZWZpbmUgPSByZXF1aXJlKCdhbWRlZmluZScpKG1vZHVsZSwgcmVxdWlyZSk7XG59XG5kZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXG4gIHZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbiAgdmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbiAgdmFyIE1hcHBpbmdMaXN0ID0gcmVxdWlyZSgnLi9tYXBwaW5nLWxpc3QnKS5NYXBwaW5nTGlzdDtcblxuICAvKipcbiAgICogQW4gaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZU1hcEdlbmVyYXRvciByZXByZXNlbnRzIGEgc291cmNlIG1hcCB3aGljaCBpc1xuICAgKiBiZWluZyBidWlsdCBpbmNyZW1lbnRhbGx5LiBZb3UgbWF5IHBhc3MgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZ1xuICAgKiBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gZmlsZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICAgKiAgIC0gc291cmNlUm9vdDogQSByb290IGZvciBhbGwgcmVsYXRpdmUgVVJMcyBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gICAqL1xuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3IoYUFyZ3MpIHtcbiAgICBpZiAoIWFBcmdzKSB7XG4gICAgICBhQXJncyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLl9maWxlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdmaWxlJywgbnVsbCk7XG4gICAgdGhpcy5fc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICAgIHRoaXMuX3NraXBWYWxpZGF0aW9uID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdza2lwVmFsaWRhdGlvbicsIGZhbHNlKTtcbiAgICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgICB0aGlzLl9tYXBwaW5ncyA9IG5ldyBNYXBwaW5nTGlzdCgpO1xuICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG4gIH1cblxuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBTb3VyY2VNYXBHZW5lcmF0b3IgYmFzZWQgb24gYSBTb3VyY2VNYXBDb25zdW1lclxuICAgKlxuICAgKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBTb3VyY2VNYXAuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IuZnJvbVNvdXJjZU1hcCA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyKSB7XG4gICAgICB2YXIgc291cmNlUm9vdCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VSb290O1xuICAgICAgdmFyIGdlbmVyYXRvciA9IG5ldyBTb3VyY2VNYXBHZW5lcmF0b3Ioe1xuICAgICAgICBmaWxlOiBhU291cmNlTWFwQ29uc3VtZXIuZmlsZSxcbiAgICAgICAgc291cmNlUm9vdDogc291cmNlUm9vdFxuICAgICAgfSk7XG4gICAgICBhU291cmNlTWFwQ29uc3VtZXIuZWFjaE1hcHBpbmcoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgICAgdmFyIG5ld01hcHBpbmcgPSB7XG4gICAgICAgICAgZ2VuZXJhdGVkOiB7XG4gICAgICAgICAgICBsaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgICAgICBjb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgbmV3TWFwcGluZy5zb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTtcbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbmV3TWFwcGluZy5zb3VyY2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld01hcHBpbmcub3JpZ2luYWwgPSB7XG4gICAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIG5ld01hcHBpbmcubmFtZSA9IG1hcHBpbmcubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmF0b3IuYWRkTWFwcGluZyhuZXdNYXBwaW5nKTtcbiAgICAgIH0pO1xuICAgICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgZ2VuZXJhdG9yLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgbWFwcGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZSBsaW5lIGFuZCBjb2x1bW4gdG8gdGhlIGdlbmVyYXRlZFxuICAgKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gZm9yIHRoaXMgc291cmNlIG1hcCBiZWluZyBjcmVhdGVkLiBUaGUgbWFwcGluZ1xuICAgKiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gZ2VuZXJhdGVkOiBBbiBvYmplY3Qgd2l0aCB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMuXG4gICAqICAgLSBvcmlnaW5hbDogQW4gb2JqZWN0IHdpdGggdGhlIG9yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMuXG4gICAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZVJvb3QpLlxuICAgKiAgIC0gbmFtZTogQW4gb3B0aW9uYWwgb3JpZ2luYWwgdG9rZW4gbmFtZSBmb3IgdGhpcyBtYXBwaW5nLlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRNYXBwaW5nID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfYWRkTWFwcGluZyhhQXJncykge1xuICAgICAgdmFyIGdlbmVyYXRlZCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnZ2VuZXJhdGVkJyk7XG4gICAgICB2YXIgb3JpZ2luYWwgPSB1dGlsLmdldEFyZyhhQXJncywgJ29yaWdpbmFsJywgbnVsbCk7XG4gICAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICduYW1lJywgbnVsbCk7XG5cbiAgICAgIGlmICghdGhpcy5fc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNYXBwaW5nKGdlbmVyYXRlZCwgb3JpZ2luYWwsIHNvdXJjZSwgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiAhdGhpcy5fc291cmNlcy5oYXMoc291cmNlKSkge1xuICAgICAgICB0aGlzLl9zb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSAhPSBudWxsICYmICF0aGlzLl9uYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9tYXBwaW5ncy5hZGQoe1xuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uLFxuICAgICAgICBvcmlnaW5hbExpbmU6IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwubGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwuY29sdW1uLFxuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgbmFtZTogbmFtZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAvKipcbiAgICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS5cbiAgICovXG4gIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudCA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250ZW50KSB7XG4gICAgICB2YXIgc291cmNlID0gYVNvdXJjZUZpbGU7XG4gICAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5fc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFTb3VyY2VDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgY29udGVudCB0byB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBfc291cmNlc0NvbnRlbnRzIG1hcCBpZiB0aGUgcHJvcGVydHkgaXMgbnVsbC5cbiAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3VyY2UpXSA9IGFTb3VyY2VDb250ZW50O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgICAgLy8gSWYgdGhlIF9zb3VyY2VzQ29udGVudHMgbWFwIGlzIGVtcHR5LCBzZXQgdGhlIHByb3BlcnR5IHRvIG51bGwuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3VyY2UpXTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXNDb250ZW50cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIG1hcHBpbmdzIG9mIGEgc3ViLXNvdXJjZS1tYXAgZm9yIGEgc3BlY2lmaWMgc291cmNlIGZpbGUgdG8gdGhlXG4gICAqIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkLiBFYWNoIG1hcHBpbmcgdG8gdGhlIHN1cHBsaWVkIHNvdXJjZSBmaWxlIGlzXG4gICAqIHJld3JpdHRlbiB1c2luZyB0aGUgc3VwcGxpZWQgc291cmNlIG1hcC4gTm90ZTogVGhlIHJlc29sdXRpb24gZm9yIHRoZVxuICAgKiByZXN1bHRpbmcgbWFwcGluZ3MgaXMgdGhlIG1pbmltaXVtIG9mIHRoaXMgbWFwIGFuZCB0aGUgc3VwcGxpZWQgbWFwLlxuICAgKlxuICAgKiBAcGFyYW0gYVNvdXJjZU1hcENvbnN1bWVyIFRoZSBzb3VyY2UgbWFwIHRvIGJlIGFwcGxpZWQuXG4gICAqIEBwYXJhbSBhU291cmNlRmlsZSBPcHRpb25hbC4gVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS5cbiAgICogICAgICAgIElmIG9taXR0ZWQsIFNvdXJjZU1hcENvbnN1bWVyJ3MgZmlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuXG4gICAqIEBwYXJhbSBhU291cmNlTWFwUGF0aCBPcHRpb25hbC4gVGhlIGRpcm5hbWUgb2YgdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBtYXBcbiAgICogICAgICAgIHRvIGJlIGFwcGxpZWQuIElmIHJlbGF0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwQ29uc3VtZXIuXG4gICAqICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBuZWVkZWQgd2hlbiB0aGUgdHdvIHNvdXJjZSBtYXBzIGFyZW4ndCBpbiB0aGUgc2FtZVxuICAgKiAgICAgICAgZGlyZWN0b3J5LCBhbmQgdGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZCBjb250YWlucyByZWxhdGl2ZSBzb3VyY2VcbiAgICogICAgICAgIHBhdGhzLiBJZiBzbywgdGhvc2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gICAqICAgICAgICByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwR2VuZXJhdG9yLlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2FwcGx5U291cmNlTWFwKGFTb3VyY2VNYXBDb25zdW1lciwgYVNvdXJjZUZpbGUsIGFTb3VyY2VNYXBQYXRoKSB7XG4gICAgICB2YXIgc291cmNlRmlsZSA9IGFTb3VyY2VGaWxlO1xuICAgICAgLy8gSWYgYVNvdXJjZUZpbGUgaXMgb21pdHRlZCwgd2Ugd2lsbCB1c2UgdGhlIGZpbGUgcHJvcGVydHkgb2YgdGhlIFNvdXJjZU1hcFxuICAgICAgaWYgKGFTb3VyY2VGaWxlID09IG51bGwpIHtcbiAgICAgICAgaWYgKGFTb3VyY2VNYXBDb25zdW1lci5maWxlID09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCByZXF1aXJlcyBlaXRoZXIgYW4gZXhwbGljaXQgc291cmNlIGZpbGUsICcgK1xuICAgICAgICAgICAgJ29yIHRoZSBzb3VyY2UgbWFwXFwncyBcImZpbGVcIiBwcm9wZXJ0eS4gQm90aCB3ZXJlIG9taXR0ZWQuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlRmlsZSA9IGFTb3VyY2VNYXBDb25zdW1lci5maWxlO1xuICAgICAgfVxuICAgICAgdmFyIHNvdXJjZVJvb3QgPSB0aGlzLl9zb3VyY2VSb290O1xuICAgICAgLy8gTWFrZSBcInNvdXJjZUZpbGVcIiByZWxhdGl2ZSBpZiBhbiBhYnNvbHV0ZSBVcmwgaXMgcGFzc2VkLlxuICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICAgIH1cbiAgICAgIC8vIEFwcGx5aW5nIHRoZSBTb3VyY2VNYXAgY2FuIGFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHNvdXJjZXMgYW5kXG4gICAgICAvLyB0aGUgbmFtZXMgYXJyYXkuXG4gICAgICB2YXIgbmV3U291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICAgICAgdmFyIG5ld05hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgICAgIC8vIEZpbmQgbWFwcGluZ3MgZm9yIHRoZSBcInNvdXJjZUZpbGVcIlxuICAgICAgdGhpcy5fbWFwcGluZ3MudW5zb3J0ZWRGb3JFYWNoKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gc291cmNlRmlsZSAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgY2FuIGJlIG1hcHBlZCBieSB0aGUgc291cmNlIG1hcCwgdGhlbiB1cGRhdGUgdGhlIG1hcHBpbmcuXG4gICAgICAgICAgdmFyIG9yaWdpbmFsID0gYVNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIENvcHkgbWFwcGluZ1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgbWFwcGluZy5zb3VyY2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gb3JpZ2luYWwuY29sdW1uO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmICFuZXdTb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgICAgbmV3U291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmICFuZXdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICBuZXdOYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgfSwgdGhpcyk7XG4gICAgICB0aGlzLl9zb3VyY2VzID0gbmV3U291cmNlcztcbiAgICAgIHRoaXMuX25hbWVzID0gbmV3TmFtZXM7XG5cbiAgICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnRzIG9mIGFwcGxpZWQgbWFwLlxuICAgICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKGFTb3VyY2VNYXBQYXRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIHNvdXJjZUZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9LCB0aGlzKTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBBIG1hcHBpbmcgY2FuIGhhdmUgb25lIG9mIHRoZSB0aHJlZSBsZXZlbHMgb2YgZGF0YTpcbiAgICpcbiAgICogICAxLiBKdXN0IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uXG4gICAqICAgMi4gVGhlIEdlbmVyYXRlZCBwb3NpdGlvbiwgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCBvcmlnaW5hbCBzb3VyY2UuXG4gICAqICAgMy4gR2VuZXJhdGVkIGFuZCBvcmlnaW5hbCBwb3NpdGlvbiwgb3JpZ2luYWwgc291cmNlLCBhcyB3ZWxsIGFzIGEgbmFtZVxuICAgKiAgICAgIHRva2VuLlxuICAgKlxuICAgKiBUbyBtYWludGFpbiBjb25zaXN0ZW5jeSwgd2UgdmFsaWRhdGUgdGhhdCBhbnkgbmV3IG1hcHBpbmcgYmVpbmcgYWRkZWQgZmFsbHNcbiAgICogaW4gdG8gb25lIG9mIHRoZXNlIGNhdGVnb3JpZXMuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0ZU1hcHBpbmcgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl92YWxpZGF0ZU1hcHBpbmcoYUdlbmVyYXRlZCwgYU9yaWdpbmFsLCBhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5hbWUpIHtcbiAgICAgIGlmIChhR2VuZXJhdGVkICYmICdsaW5lJyBpbiBhR2VuZXJhdGVkICYmICdjb2x1bW4nIGluIGFHZW5lcmF0ZWRcbiAgICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgICAmJiAhYU9yaWdpbmFsICYmICFhU291cmNlICYmICFhTmFtZSkge1xuICAgICAgICAvLyBDYXNlIDEuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAgICAgICAgJiYgYU9yaWdpbmFsICYmICdsaW5lJyBpbiBhT3JpZ2luYWwgJiYgJ2NvbHVtbicgaW4gYU9yaWdpbmFsXG4gICAgICAgICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgICAgICAgICYmIGFPcmlnaW5hbC5saW5lID4gMCAmJiBhT3JpZ2luYWwuY29sdW1uID49IDBcbiAgICAgICAgICAgICAgICYmIGFTb3VyY2UpIHtcbiAgICAgICAgLy8gQ2FzZXMgMiBhbmQgMy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXBwaW5nOiAnICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGdlbmVyYXRlZDogYUdlbmVyYXRlZCxcbiAgICAgICAgICBzb3VyY2U6IGFTb3VyY2UsXG4gICAgICAgICAgb3JpZ2luYWw6IGFPcmlnaW5hbCxcbiAgICAgICAgICBuYW1lOiBhTmFtZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogU2VyaWFsaXplIHRoZSBhY2N1bXVsYXRlZCBtYXBwaW5ncyBpbiB0byB0aGUgc3RyZWFtIG9mIGJhc2UgNjQgVkxRc1xuICAgKiBzcGVjaWZpZWQgYnkgdGhlIHNvdXJjZSBtYXAgZm9ybWF0LlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fc2VyaWFsaXplTWFwcGluZ3MgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXJpYWxpemVNYXBwaW5ncygpIHtcbiAgICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRMaW5lID0gMTtcbiAgICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7XG4gICAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbWFwcGluZztcblxuICAgICAgdmFyIG1hcHBpbmdzID0gdGhpcy5fbWFwcGluZ3MudG9BcnJheSgpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbWFwcGluZyA9IG1hcHBpbmdzW2ldO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgICAgICB3aGlsZSAobWFwcGluZy5nZW5lcmF0ZWRMaW5lICE9PSBwcmV2aW91c0dlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnOyc7XG4gICAgICAgICAgICBwcmV2aW91c0dlbmVyYXRlZExpbmUrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICBpZiAoIXV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zKG1hcHBpbmcsIG1hcHBpbmdzW2kgLSAxXSkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gJywnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCArPSBiYXNlNjRWTFEuZW5jb2RlKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IGJhc2U2NFZMUS5lbmNvZGUodGhpcy5fc291cmNlcy5pbmRleE9mKG1hcHBpbmcuc291cmNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNTb3VyY2UpO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG1hcHBpbmcuc291cmNlKTtcblxuICAgICAgICAgIC8vIGxpbmVzIGFyZSBzdG9yZWQgMC1iYXNlZCBpbiBTb3VyY2VNYXAgc3BlYyB2ZXJzaW9uIDNcbiAgICAgICAgICByZXN1bHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsTGluZSAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHByZXZpb3VzT3JpZ2luYWxMaW5lKTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lIC0gMTtcblxuICAgICAgICAgIHJlc3VsdCArPSBiYXNlNjRWTFEuZW5jb2RlKG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4pO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgICAgaWYgKG1hcHBpbmcubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gYmFzZTY0VkxRLmVuY29kZSh0aGlzLl9uYW1lcy5pbmRleE9mKG1hcHBpbmcubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNOYW1lKTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSA9IHRoaXMuX25hbWVzLmluZGV4T2YobWFwcGluZy5uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KGFTb3VyY2VzLCBhU291cmNlUm9vdCkge1xuICAgICAgcmV0dXJuIGFTb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmICghdGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFTb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKGFTb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXkgPSB1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSk7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc291cmNlc0NvbnRlbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSlcbiAgICAgICAgICA/IHRoaXMuX3NvdXJjZXNDb250ZW50c1trZXldXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfTtcblxuICAvKipcbiAgICogRXh0ZXJuYWxpemUgdGhlIHNvdXJjZSBtYXAuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvSlNPTiA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvSlNPTigpIHtcbiAgICAgIHZhciBtYXAgPSB7XG4gICAgICAgIHZlcnNpb246IHRoaXMuX3ZlcnNpb24sXG4gICAgICAgIHNvdXJjZXM6IHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICBuYW1lczogdGhpcy5fbmFtZXMudG9BcnJheSgpLFxuICAgICAgICBtYXBwaW5nczogdGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKVxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLl9maWxlICE9IG51bGwpIHtcbiAgICAgICAgbWFwLmZpbGUgPSB0aGlzLl9maWxlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX3NvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBtYXAuc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAgIG1hcC5zb3VyY2VzQ29udGVudCA9IHRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQobWFwLnNvdXJjZXMsIG1hcC5zb3VyY2VSb290KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkIHRvIGEgc3RyaW5nLlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS50b1N0cmluZyA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpO1xuICAgIH07XG5cbiAgZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSBTb3VyY2VNYXBHZW5lcmF0b3I7XG5cbn0pO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpO1xufVxuZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuICB2YXIgU291cmNlTWFwR2VuZXJhdG9yID0gcmVxdWlyZSgnLi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuICAvLyBNYXRjaGVzIGEgV2luZG93cy1zdHlsZSBgXFxyXFxuYCBuZXdsaW5lIG9yIGEgYFxcbmAgbmV3bGluZSB1c2VkIGJ5IGFsbCBvdGhlclxuICAvLyBvcGVyYXRpbmcgc3lzdGVtcyB0aGVzZSBkYXlzIChjYXB0dXJpbmcgdGhlIHJlc3VsdCkuXG4gIHZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbiAgLy8gTmV3bGluZSBjaGFyYWN0ZXIgY29kZSBmb3IgY2hhckNvZGVBdCgpIGNvbXBhcmlzb25zXG4gIHZhciBORVdMSU5FX0NPREUgPSAxMDtcblxuICAvLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4gIC8vIHRoZSBzb3VyY2UtbWFwIGxpYnJhcnkgYXJlIGxvYWRlZC4gVGhpcyBNVVNUIE5PVCBDSEFOR0UgYWNyb3NzXG4gIC8vIHZlcnNpb25zIVxuICB2YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuICAvKipcbiAgICogU291cmNlTm9kZXMgcHJvdmlkZSBhIHdheSB0byBhYnN0cmFjdCBvdmVyIGludGVycG9sYXRpbmcvY29uY2F0ZW5hdGluZ1xuICAgKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAgICogY29sdW1uIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgc291cmNlIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gICAqIEBwYXJhbSBhQ29sdW1uIFRoZSBvcmlnaW5hbCBjb2x1bW4gbnVtYmVyLlxuICAgKiBAcGFyYW0gYVNvdXJjZSBUaGUgb3JpZ2luYWwgc291cmNlJ3MgZmlsZW5hbWUuXG4gICAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICAgKiAgICAgICAgZ2VuZXJhdGVkIEpTLCBvciBvdGhlciBTb3VyY2VOb2Rlcy5cbiAgICogQHBhcmFtIGFOYW1lIFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLlxuICAgKi9cbiAgZnVuY3Rpb24gU291cmNlTm9kZShhTGluZSwgYUNvbHVtbiwgYVNvdXJjZSwgYUNodW5rcywgYU5hbWUpIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICAgIHRoaXMubGluZSA9IGFMaW5lID09IG51bGwgPyBudWxsIDogYUxpbmU7XG4gICAgdGhpcy5jb2x1bW4gPSBhQ29sdW1uID09IG51bGwgPyBudWxsIDogYUNvbHVtbjtcbiAgICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICAgIHRoaXMubmFtZSA9IGFOYW1lID09IG51bGwgPyBudWxsIDogYU5hbWU7XG4gICAgdGhpc1tpc1NvdXJjZU5vZGVdID0gdHJ1ZTtcbiAgICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICAgKlxuICAgKiBAcGFyYW0gYUdlbmVyYXRlZENvZGUgVGhlIGdlbmVyYXRlZCBjb2RlXG4gICAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gICAqIEBwYXJhbSBhUmVsYXRpdmVQYXRoIE9wdGlvbmFsLiBUaGUgcGF0aCB0aGF0IHJlbGF0aXZlIHNvdXJjZXMgaW4gdGhlXG4gICAqICAgICAgICBTb3VyY2VNYXBDb25zdW1lciBzaG91bGQgYmUgcmVsYXRpdmUgdG8uXG4gICAqL1xuICBTb3VyY2VOb2RlLmZyb21TdHJpbmdXaXRoU291cmNlTWFwID1cbiAgICBmdW5jdGlvbiBTb3VyY2VOb2RlX2Zyb21TdHJpbmdXaXRoU291cmNlTWFwKGFHZW5lcmF0ZWRDb2RlLCBhU291cmNlTWFwQ29uc3VtZXIsIGFSZWxhdGl2ZVBhdGgpIHtcbiAgICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgICAgLy8gYW5kIHRoZSBTb3VyY2VNYXBcbiAgICAgIHZhciBub2RlID0gbmV3IFNvdXJjZU5vZGUoKTtcblxuICAgICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgICAvLyB3aGlsZSBhbGwgb2RkIGluZGljZXMgYXJlIHRoZSBuZXdsaW5lcyBiZXR3ZWVuIHR3byBhZGphY2VudCBsaW5lc1xuICAgICAgLy8gKHNpbmNlIGBSRUdFWF9ORVdMSU5FYCBjYXB0dXJlcyBpdHMgbWF0Y2gpLlxuICAgICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgcmVtb3ZlZCBmcm9tIHRoaXMgYXJyYXksIGJ5IGNhbGxpbmcgYHNoaWZ0TmV4dExpbmVgLlxuICAgICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgICB2YXIgc2hpZnROZXh0TGluZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbGluZUNvbnRlbnRzID0gcmVtYWluaW5nTGluZXMuc2hpZnQoKTtcbiAgICAgICAgLy8gVGhlIGxhc3QgbGluZSBvZiBhIGZpbGUgbWlnaHQgbm90IGhhdmUgYSBuZXdsaW5lLlxuICAgICAgICB2YXIgbmV3TGluZSA9IHJlbWFpbmluZ0xpbmVzLnNoaWZ0KCkgfHwgXCJcIjtcbiAgICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG4gICAgICB9O1xuXG4gICAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICAgIHZhciBsYXN0R2VuZXJhdGVkTGluZSA9IDEsIGxhc3RHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuXG4gICAgICAvLyBUaGUgZ2VuZXJhdGUgU291cmNlTm9kZXMgd2UgbmVlZCBhIGNvZGUgcmFuZ2UuXG4gICAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgICAgLy8gSGVyZSB3ZSBzdG9yZSB0aGUgbGFzdCBtYXBwaW5nLlxuICAgICAgdmFyIGxhc3RNYXBwaW5nID0gbnVsbDtcblxuICAgICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICAgIGlmIChsYXN0TWFwcGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGFkZCB0aGUgY29kZSBmcm9tIFwibGFzdE1hcHBpbmdcIiB0byBcIm1hcHBpbmdcIjpcbiAgICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgaWYgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgICB2YXIgY29kZSA9IFwiXCI7XG4gICAgICAgICAgICAvLyBBc3NvY2lhdGUgZmlyc3QgbGluZSB3aXRoIFwibGFzdE1hcHBpbmdcIlxuICAgICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgICAgbGFzdEdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBuZXcgbGluZSBpbiBiZXR3ZWVuLlxuICAgICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgICAvLyBcIm1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXCIgd2l0aCBcImxhc3RNYXBwaW5nXCJcbiAgICAgICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzWzBdO1xuICAgICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbik7XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1swXSA9IG5leHRMaW5lLnN1YnN0cihtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcbiAgICAgICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgY29kZSk7XG4gICAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgICAgbGFzdE1hcHBpbmcgPSBtYXBwaW5nO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBhZGQgdGhlIGdlbmVyYXRlZCBjb2RlIHVudGlsIHRoZSBmaXJzdCBtYXBwaW5nXG4gICAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAgIC8vIEVhY2ggbGluZSBpcyBhZGRlZCBhcyBzZXBhcmF0ZSBzdHJpbmcuXG4gICAgICAgIHdoaWxlIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbMF07XG4gICAgICAgICAgbm9kZS5hZGQobmV4dExpbmUuc3Vic3RyKDAsIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSk7XG4gICAgICAgICAgcmVtYWluaW5nTGluZXNbMF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcbiAgICAgICAgfVxuICAgICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgICB9LCB0aGlzKTtcbiAgICAgIC8vIFdlIGhhdmUgcHJvY2Vzc2VkIGFsbCBtYXBwaW5ncy5cbiAgICAgIGlmIChyZW1haW5pbmdMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChsYXN0TWFwcGluZykge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSB0aGUgcmVtYWluaW5nIGNvZGUgaW4gdGhlIGN1cnJlbnQgbGluZSB3aXRoIFwibGFzdE1hcHBpbmdcIlxuICAgICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhbmQgYWRkIHRoZSByZW1haW5pbmcgbGluZXMgd2l0aG91dCBhbnkgbWFwcGluZ1xuICAgICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5qb2luKFwiXCIpKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgICAgdmFyIGNvbnRlbnQgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihzb3VyY2VGaWxlKTtcbiAgICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChhUmVsYXRpdmVQYXRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLmpvaW4oYVJlbGF0aXZlUGF0aCwgc291cmNlRmlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBub2RlO1xuXG4gICAgICBmdW5jdGlvbiBhZGRNYXBwaW5nV2l0aENvZGUobWFwcGluZywgY29kZSkge1xuICAgICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbm9kZS5hZGQoY29kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICAgID8gdXRpbC5qb2luKGFSZWxhdGl2ZVBhdGgsIG1hcHBpbmcuc291cmNlKVxuICAgICAgICAgICAgOiBtYXBwaW5nLnNvdXJjZTtcbiAgICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcubmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSBhQ2h1bmsgQSBzdHJpbmcgc25pcHBldCBvZiBnZW5lcmF0ZWQgSlMgY29kZSwgYW5vdGhlciBpbnN0YW5jZSBvZlxuICAgKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAgICovXG4gIFNvdXJjZU5vZGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfYWRkKGFDaHVuaykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICAgIGFDaHVuay5mb3JFYWNoKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICB0aGlzLmFkZChjaHVuayk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYUNodW5rW2lzU291cmNlTm9kZV0gfHwgdHlwZW9mIGFDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKGFDaHVuaykge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goYUNodW5rKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gICAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUucHJlcGVuZCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcHJlcGVuZChhQ2h1bmspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgICBmb3IgKHZhciBpID0gYUNodW5rLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuICAgICAgICB0aGlzLnByZXBlbmQoYUNodW5rW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYUNodW5rW2lzU291cmNlTm9kZV0gfHwgdHlwZW9mIGFDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJFeHBlY3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMgYW5kIHN0cmluZ3MuIEdvdCBcIiArIGFDaHVua1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFdhbGsgb3ZlciB0aGUgdHJlZSBvZiBKUyBzbmlwcGV0cyBpbiB0aGlzIG5vZGUgYW5kIGl0cyBjaGlsZHJlbi4gVGhlXG4gICAqIHdhbGtpbmcgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggc25pcHBldCBvZiBKUyBhbmQgaXMgcGFzc2VkIHRoYXRcbiAgICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gYUZuIFRoZSB0cmF2ZXJzYWwgZnVuY3Rpb24uXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS53YWxrID0gZnVuY3Rpb24gU291cmNlTm9kZV93YWxrKGFGbikge1xuICAgIHZhciBjaHVuaztcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY2h1bmsgPSB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGNodW5rW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgICBhRm4oY2h1bmssIHsgc291cmNlOiB0aGlzLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIExpa2UgYFN0cmluZy5wcm90b3R5cGUuam9pbmAgZXhjZXB0IGZvciBTb3VyY2VOb2Rlcy4gSW5zZXJ0cyBgYVN0cmAgYmV0d2VlblxuICAgKiBlYWNoIG9mIGB0aGlzLmNoaWxkcmVuYC5cbiAgICpcbiAgICogQHBhcmFtIGFTZXAgVGhlIHNlcGFyYXRvci5cbiAgICovXG4gIFNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICAgIHZhciBuZXdDaGlsZHJlbjtcbiAgICB2YXIgaTtcbiAgICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgaWYgKGxlbiA+IDApIHtcbiAgICAgIG5ld0NoaWxkcmVuID0gW107XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5baV0pO1xuICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKGFTZXApO1xuICAgICAgfVxuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXdDaGlsZHJlbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlIG9uIHRoZSB2ZXJ5IHJpZ2h0LW1vc3Qgc291cmNlIHNuaXBwZXQuIFVzZWZ1bFxuICAgKiBmb3IgdHJpbW1pbmcgd2hpdGVzcGFjZSBmcm9tIHRoZSBlbmQgb2YgYSBzb3VyY2Ugbm9kZSwgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0gYVBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gcmVwbGFjZS5cbiAgICogQHBhcmFtIGFSZXBsYWNlbWVudCBUaGUgdGhpbmcgdG8gcmVwbGFjZSB0aGUgcGF0dGVybiB3aXRoLlxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUucmVwbGFjZVJpZ2h0ID0gZnVuY3Rpb24gU291cmNlTm9kZV9yZXBsYWNlUmlnaHQoYVBhdHRlcm4sIGFSZXBsYWNlbWVudCkge1xuICAgIHZhciBsYXN0Q2hpbGQgPSB0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgICBsYXN0Q2hpbGQucmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdID0gbGFzdENoaWxkLnJlcGxhY2UoYVBhdHRlcm4sIGFSZXBsYWNlbWVudCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKCcnLnJlcGxhY2UoYVBhdHRlcm4sIGFSZXBsYWNlbWVudCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAgICogaW4gdGhlIHNvdXJjZXNDb250ZW50IGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICAgKiBAcGFyYW0gYVNvdXJjZUNvbnRlbnQgVGhlIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSBmaWxlXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgICBmdW5jdGlvbiBTb3VyY2VOb2RlX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250ZW50KSB7XG4gICAgICB0aGlzLnNvdXJjZUNvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoYVNvdXJjZUZpbGUpXSA9IGFTb3VyY2VDb250ZW50O1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFdhbGsgb3ZlciB0aGUgdHJlZSBvZiBTb3VyY2VOb2Rlcy4gVGhlIHdhbGtpbmcgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoXG4gICAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gYUZuIFRoZSB0cmF2ZXJzYWwgZnVuY3Rpb24uXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS53YWxrU291cmNlQ29udGVudHMgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2Fsa1NvdXJjZUNvbnRlbnRzKGFGbikge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5baV1baXNTb3VyY2VOb2RlXSkge1xuICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ud2Fsa1NvdXJjZUNvbnRlbnRzKGFGbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZXMgPSBPYmplY3Qua2V5cyh0aGlzLnNvdXJjZUNvbnRlbnRzKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGFGbih1dGlsLmZyb21TZXRTdHJpbmcoc291cmNlc1tpXSksIHRoaXMuc291cmNlQ29udGVudHNbc291cmNlc1tpXV0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc291cmNlIG5vZGUuIFdhbGtzIG92ZXIgdGhlIHRyZWVcbiAgICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAgICovXG4gIFNvdXJjZU5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZygpIHtcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICB0aGlzLndhbGsoZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICBzdHIgKz0gY2h1bms7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc291cmNlIG5vZGUgYWxvbmcgd2l0aCBhIHNvdXJjZVxuICAgKiBtYXAuXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS50b1N0cmluZ1dpdGhTb3VyY2VNYXAgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nV2l0aFNvdXJjZU1hcChhQXJncykge1xuICAgIHZhciBnZW5lcmF0ZWQgPSB7XG4gICAgICBjb2RlOiBcIlwiLFxuICAgICAgbGluZTogMSxcbiAgICAgIGNvbHVtbjogMFxuICAgIH07XG4gICAgdmFyIG1hcCA9IG5ldyBTb3VyY2VNYXBHZW5lcmF0b3IoYUFyZ3MpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgdmFyIGxhc3RPcmlnaW5hbExpbmUgPSBudWxsO1xuICAgIHZhciBsYXN0T3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICAgIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgICB0aGlzLndhbGsoZnVuY3Rpb24gKGNodW5rLCBvcmlnaW5hbCkge1xuICAgICAgZ2VuZXJhdGVkLmNvZGUgKz0gY2h1bms7XG4gICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICAgJiYgb3JpZ2luYWwubGluZSAhPT0gbnVsbFxuICAgICAgICAgICYmIG9yaWdpbmFsLmNvbHVtbiAhPT0gbnVsbCkge1xuICAgICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgICB8fCBsYXN0T3JpZ2luYWxMaW5lICE9PSBvcmlnaW5hbC5saW5lXG4gICAgICAgICAgIHx8IGxhc3RPcmlnaW5hbENvbHVtbiAhPT0gb3JpZ2luYWwuY29sdW1uXG4gICAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgICAgICBzb3VyY2U6IG9yaWdpbmFsLnNvdXJjZSxcbiAgICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICAgIGxpbmU6IG9yaWdpbmFsLmxpbmUsXG4gICAgICAgICAgICAgIGNvbHVtbjogb3JpZ2luYWwuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2VuZXJhdGVkOiB7XG4gICAgICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lOiBvcmlnaW5hbC5uYW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdE9yaWdpbmFsU291cmNlID0gb3JpZ2luYWwuc291cmNlO1xuICAgICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgICAgbGFzdE9yaWdpbmFsQ29sdW1uID0gb3JpZ2luYWwuY29sdW1uO1xuICAgICAgICBsYXN0T3JpZ2luYWxOYW1lID0gb3JpZ2luYWwubmFtZTtcbiAgICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHNvdXJjZU1hcHBpbmdBY3RpdmUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpZHggPSAwLCBsZW5ndGggPSBjaHVuay5sZW5ndGg7IGlkeCA8IGxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgICAgZ2VuZXJhdGVkLmxpbmUrKztcbiAgICAgICAgICBnZW5lcmF0ZWQuY29sdW1uID0gMDtcbiAgICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgICAgaWYgKGlkeCArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgbGFzdE9yaWdpbmFsU291cmNlID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZU1hcHBpbmdBY3RpdmUpIHtcbiAgICAgICAgICAgIG1hcC5hZGRNYXBwaW5nKHtcbiAgICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICAgICAgbGluZTogb3JpZ2luYWwubGluZSxcbiAgICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdlbmVyYXRlZC5jb2x1bW4rKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMud2Fsa1NvdXJjZUNvbnRlbnRzKGZ1bmN0aW9uIChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KSB7XG4gICAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IGNvZGU6IGdlbmVyYXRlZC5jb2RlLCBtYXA6IG1hcCB9O1xuICB9O1xuXG4gIGV4cG9ydHMuU291cmNlTm9kZSA9IFNvdXJjZU5vZGU7XG5cbn0pO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpO1xufVxuZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuICAvKipcbiAgICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIvb3B0aW9uc1xuICAgKiBvYmplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAgICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBhblxuICAgKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICovXG4gIGZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhTmFtZSArICdcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpO1xuICAgIH1cbiAgfVxuICBleHBvcnRzLmdldEFyZyA9IGdldEFyZztcblxuICB2YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbiAgdmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG4gIGZ1bmN0aW9uIHVybFBhcnNlKGFVcmwpIHtcbiAgICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWU6IG1hdGNoWzFdLFxuICAgICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgICBob3N0OiBtYXRjaFszXSxcbiAgICAgIHBvcnQ6IG1hdGNoWzRdLFxuICAgICAgcGF0aDogbWF0Y2hbNV1cbiAgICB9O1xuICB9XG4gIGV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuICBmdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gICAgdmFyIHVybCA9ICcnO1xuICAgIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICAgIH1cbiAgICB1cmwgKz0gJy8vJztcbiAgICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgICB1cmwgKz0gYVBhcnNlZFVybC5hdXRoICsgJ0AnO1xuICAgIH1cbiAgICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgICB1cmwgKz0gYVBhcnNlZFVybC5ob3N0O1xuICAgIH1cbiAgICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgICB1cmwgKz0gXCI6XCIgKyBhUGFyc2VkVXJsLnBvcnRcbiAgICB9XG4gICAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgICAgdXJsICs9IGFQYXJzZWRVcmwucGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBleHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZXMgYSBwYXRoLCBvciB0aGUgcGF0aCBwb3J0aW9uIG9mIGEgVVJMOlxuICAgKlxuICAgKiAtIFJlcGxhY2VzIGNvbnNlcXV0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gICAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnLicgcGFydHMuXG4gICAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICAgKlxuICAgKiBCYXNlZCBvbiBjb2RlIGluIHRoZSBOb2RlLmpzICdwYXRoJyBjb3JlIG1vZHVsZS5cbiAgICpcbiAgICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gICAqL1xuICBmdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgICB2YXIgcGF0aCA9IGFQYXRoO1xuICAgIHZhciB1cmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gICAgaWYgKHVybCkge1xuICAgICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgICByZXR1cm4gYVBhdGg7XG4gICAgICB9XG4gICAgICBwYXRoID0gdXJsLnBhdGg7XG4gICAgfVxuICAgIHZhciBpc0Fic29sdXRlID0gKHBhdGguY2hhckF0KDApID09PSAnLycpO1xuXG4gICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICAgIGZvciAodmFyIHBhcnQsIHVwID0gMCwgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICB1cCsrO1xuICAgICAgfSBlbHNlIGlmICh1cCA+IDApIHtcbiAgICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAgIC8vIGFib3ZlIHRoZSByb290IGlzIGEgbm8tb3AuIFRoZXJlZm9yZSB3ZSBjYW4gcmVtb3ZlIGFsbCAnLi4nIHBhcnRzXG4gICAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgICAgdXAgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgICB1cC0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICAgIHBhdGggPSBpc0Fic29sdXRlID8gJy8nIDogJy4nO1xuICAgIH1cblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybC5wYXRoID0gcGF0aDtcbiAgICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuICBleHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuICAvKipcbiAgICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gICAqXG4gICAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAgICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAgICpcbiAgICogLSBJZiBhUGF0aCBpcyBhIFVSTCBvciBhIGRhdGEgVVJJLCBhUGF0aCBpcyByZXR1cm5lZCwgdW5sZXNzIGFQYXRoIGlzIGFcbiAgICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gICAqICAgZmlyc3QuXG4gICAqIC0gT3RoZXJ3aXNlIGFQYXRoIGlzIGEgcGF0aC4gSWYgYVJvb3QgaXMgYSBVUkwsIHRoZW4gaXRzIHBhdGggcG9ydGlvblxuICAgKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAgICogICBpcyByZXR1cm5lZC5cbiAgICogICAtIElmIGFQYXRoIGlzIGFic29sdXRlLCB0aGUgcmVzdWx0IGlzIGFQYXRoLlxuICAgKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gICAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICAgIGFSb290ID0gXCIuXCI7XG4gICAgfVxuICAgIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgICAgYVBhdGggPSBcIi5cIjtcbiAgICB9XG4gICAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICAgIHZhciBhUm9vdFVybCA9IHVybFBhcnNlKGFSb290KTtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gICAgfVxuXG4gICAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgICAgaWYgKGFSb290VXJsKSB7XG4gICAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUGF0aFVybCk7XG4gICAgfVxuXG4gICAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gICAgaWYgKGFSb290VXJsICYmICFhUm9vdFVybC5ob3N0ICYmICFhUm9vdFVybC5wYXRoKSB7XG4gICAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICAgIH1cblxuICAgIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgPyBhUGF0aFxuICAgICAgOiBub3JtYWxpemUoYVJvb3QucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyBhUGF0aCk7XG5cbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICAgIH1cbiAgICByZXR1cm4gam9pbmVkO1xuICB9XG4gIGV4cG9ydHMuam9pbiA9IGpvaW47XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAgICpcbiAgICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICAgKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gICAqL1xuICBmdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICAgIGFSb290ID0gXCIuXCI7XG4gICAgfVxuXG4gICAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gICAgLy8gWFhYOiBJdCBpcyBwb3NzaWJsZSB0byByZW1vdmUgdGhpcyBibG9jaywgYW5kIHRoZSB0ZXN0cyBzdGlsbCBwYXNzIVxuICAgIHZhciB1cmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gICAgaWYgKGFQYXRoLmNoYXJBdCgwKSA9PSBcIi9cIiAmJiB1cmwgJiYgdXJsLnBhdGggPT0gXCIvXCIpIHtcbiAgICAgIHJldHVybiBhUGF0aC5zbGljZSgxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgPT09IDBcbiAgICAgID8gYVBhdGguc3Vic3RyKGFSb290Lmxlbmd0aCArIDEpXG4gICAgICA6IGFQYXRoO1xuICB9XG4gIGV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxuICAvKipcbiAgICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICAgKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gICAqXG4gICAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICAgKi9cbiAgZnVuY3Rpb24gdG9TZXRTdHJpbmcoYVN0cikge1xuICAgIHJldHVybiAnJCcgKyBhU3RyO1xuICB9XG4gIGV4cG9ydHMudG9TZXRTdHJpbmcgPSB0b1NldFN0cmluZztcblxuICBmdW5jdGlvbiBmcm9tU2V0U3RyaW5nKGFTdHIpIHtcbiAgICByZXR1cm4gYVN0ci5zdWJzdHIoMSk7XG4gIH1cbiAgZXhwb3J0cy5mcm9tU2V0U3RyaW5nID0gZnJvbVNldFN0cmluZztcblxuICBmdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gICAgdmFyIHMxID0gYVN0cjEgfHwgXCJcIjtcbiAgICB2YXIgczIgPSBhU3RyMiB8fCBcIlwiO1xuICAgIHJldHVybiAoczEgPiBzMikgLSAoczEgPCBzMik7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAgICpcbiAgICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICAgKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAgICogbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGEgbWFwcGluZyB3aXRoIGFcbiAgICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHZhciBjbXA7XG5cbiAgICBjbXAgPSBzdHJjbXAobWFwcGluZ0Euc291cmNlLCBtYXBwaW5nQi5zb3VyY2UpO1xuICAgIGlmIChjbXApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICAgIGlmIChjbXApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgICBpZiAoY21wIHx8IG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xuICAgIGlmIChjbXApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gICAgaWYgKGNtcCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICB9O1xuICBleHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbiAgLyoqXG4gICAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlXG4gICAqIGNvbXBhcmVkLlxuICAgKlxuICAgKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gICAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICAgKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICAgKiBtYXBwaW5nIHdpdGggYSBzdHViYmVkIG91dCBtYXBwaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgICB2YXIgY21wO1xuXG4gICAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gICAgaWYgKGNtcCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gICAgaWYgKGNtcCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBzdHJjbXAobWFwcGluZ0Euc291cmNlLCBtYXBwaW5nQi5zb3VyY2UpO1xuICAgIGlmIChjbXApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICAgIGlmIChjbXApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgICBpZiAoY21wKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJjbXAobWFwcGluZ0EubmFtZSwgbWFwcGluZ0IubmFtZSk7XG4gIH07XG4gIGV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zO1xuXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJfYXJnc1wiOiBbXG4gICAgW1xuICAgICAge1xuICAgICAgICBcInJhd1wiOiBcImVzY29kZWdlbkBeMS42LjFcIixcbiAgICAgICAgXCJzY29wZVwiOiBudWxsLFxuICAgICAgICBcImVzY2FwZWROYW1lXCI6IFwiZXNjb2RlZ2VuXCIsXG4gICAgICAgIFwibmFtZVwiOiBcImVzY29kZWdlblwiLFxuICAgICAgICBcInJhd1NwZWNcIjogXCJeMS42LjFcIixcbiAgICAgICAgXCJzcGVjXCI6IFwiPj0xLjYuMSA8Mi4wLjBcIixcbiAgICAgICAgXCJ0eXBlXCI6IFwicmFuZ2VcIlxuICAgICAgfSxcbiAgICAgIFwiL2hvbWUvZ2FicmllbC9Eb2N1bWVudHMvd2ViLXNjcmFwZXItY2hyb21lLWV4dGVuc2lvbi9ub2RlX21vZHVsZXMvanNkb21cIlxuICAgIF1cbiAgXSxcbiAgXCJfZnJvbVwiOiBcImVzY29kZWdlbkA+PTEuNi4xIDwyLjAuMFwiLFxuICBcIl9pZFwiOiBcImVzY29kZWdlbkAxLjguMVwiLFxuICBcIl9pbkNhY2hlXCI6IHRydWUsXG4gIFwiX2xvY2F0aW9uXCI6IFwiL2VzY29kZWdlblwiLFxuICBcIl9ub2RlVmVyc2lvblwiOiBcIjYuMy4wXCIsXG4gIFwiX25wbU9wZXJhdGlvbmFsSW50ZXJuYWxcIjoge1xuICAgIFwiaG9zdFwiOiBcInBhY2thZ2VzLTEyLXdlc3QuaW50ZXJuYWwubnBtanMuY29tXCIsXG4gICAgXCJ0bXBcIjogXCJ0bXAvZXNjb2RlZ2VuLTEuOC4xLnRnel8xNDcwNTA2NzIzMDA5XzAuMTI4MTg2ODEyODU3MTY1OTNcIlxuICB9LFxuICBcIl9ucG1Vc2VyXCI6IHtcbiAgICBcIm5hbWVcIjogXCJtaWNoYWVsZmljYXJyYVwiLFxuICAgIFwiZW1haWxcIjogXCJucG1AbWljaGFlbC5maWNhcnJhLm1lXCJcbiAgfSxcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjMuMTAuM1wiLFxuICBcIl9waGFudG9tQ2hpbGRyZW5cIjoge1xuICAgIFwiYW1kZWZpbmVcIjogXCIxLjAuMVwiXG4gIH0sXG4gIFwiX3JlcXVlc3RlZFwiOiB7XG4gICAgXCJyYXdcIjogXCJlc2NvZGVnZW5AXjEuNi4xXCIsXG4gICAgXCJzY29wZVwiOiBudWxsLFxuICAgIFwiZXNjYXBlZE5hbWVcIjogXCJlc2NvZGVnZW5cIixcbiAgICBcIm5hbWVcIjogXCJlc2NvZGVnZW5cIixcbiAgICBcInJhd1NwZWNcIjogXCJeMS42LjFcIixcbiAgICBcInNwZWNcIjogXCI+PTEuNi4xIDwyLjAuMFwiLFxuICAgIFwidHlwZVwiOiBcInJhbmdlXCJcbiAgfSxcbiAgXCJfcmVxdWlyZWRCeVwiOiBbXG4gICAgXCIvanNkb21cIlxuICBdLFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY29kZWdlbi8tL2VzY29kZWdlbi0xLjguMS50Z3pcIixcbiAgXCJfc2hhc3VtXCI6IFwiNWE1YjUzYWY0NjkzMTEwYmViYjA4NjdhYTM0MzBkZDNiNzBhMTAxOFwiLFxuICBcIl9zaHJpbmt3cmFwXCI6IG51bGwsXG4gIFwiX3NwZWNcIjogXCJlc2NvZGVnZW5AXjEuNi4xXCIsXG4gIFwiX3doZXJlXCI6IFwiL2hvbWUvZ2FicmllbC9Eb2N1bWVudHMvd2ViLXNjcmFwZXItY2hyb21lLWV4dGVuc2lvbi9ub2RlX21vZHVsZXMvanNkb21cIixcbiAgXCJiaW5cIjoge1xuICAgIFwiZXNnZW5lcmF0ZVwiOiBcIi4vYmluL2VzZ2VuZXJhdGUuanNcIixcbiAgICBcImVzY29kZWdlblwiOiBcIi4vYmluL2VzY29kZWdlbi5qc1wiXG4gIH0sXG4gIFwiYnVnc1wiOiB7XG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vZXN0b29scy9lc2NvZGVnZW4vaXNzdWVzXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiZXNwcmltYVwiOiBcIl4yLjcuMVwiLFxuICAgIFwiZXN0cmF2ZXJzZVwiOiBcIl4xLjkuMVwiLFxuICAgIFwiZXN1dGlsc1wiOiBcIl4yLjAuMlwiLFxuICAgIFwib3B0aW9uYXRvclwiOiBcIl4wLjguMVwiLFxuICAgIFwic291cmNlLW1hcFwiOiBcIn4wLjIuMFwiXG4gIH0sXG4gIFwiZGVzY3JpcHRpb25cIjogXCJFQ01BU2NyaXB0IGNvZGUgZ2VuZXJhdG9yXCIsXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImFjb3JuXCI6IFwiXjIuNy4wXCIsXG4gICAgXCJibHVlYmlyZFwiOiBcIl4yLjMuMTFcIixcbiAgICBcImJvd2VyLXJlZ2lzdHJ5LWNsaWVudFwiOiBcIl4wLjIuMVwiLFxuICAgIFwiY2hhaVwiOiBcIl4xLjEwLjBcIixcbiAgICBcImNvbW1vbmpzLWV2ZXJ5d2hlcmVcIjogXCJeMC45LjdcIixcbiAgICBcImd1bHBcIjogXCJeMy44LjEwXCIsXG4gICAgXCJndWxwLWVzbGludFwiOiBcIl4wLjIuMFwiLFxuICAgIFwiZ3VscC1tb2NoYVwiOiBcIl4yLjAuMFwiLFxuICAgIFwic2VtdmVyXCI6IFwiXjUuMS4wXCJcbiAgfSxcbiAgXCJkaXJlY3Rvcmllc1wiOiB7fSxcbiAgXCJkaXN0XCI6IHtcbiAgICBcInNoYXN1bVwiOiBcIjVhNWI1M2FmNDY5MzExMGJlYmIwODY3YWEzNDMwZGQzYjcwYTEwMThcIixcbiAgICBcInRhcmJhbGxcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NvZGVnZW4vLS9lc2NvZGVnZW4tMS44LjEudGd6XCJcbiAgfSxcbiAgXCJlbmdpbmVzXCI6IHtcbiAgICBcIm5vZGVcIjogXCI+PTAuMTIuMFwiXG4gIH0sXG4gIFwiZmlsZXNcIjogW1xuICAgIFwiTElDRU5TRS5CU0RcIixcbiAgICBcIkxJQ0VOU0Uuc291cmNlLW1hcFwiLFxuICAgIFwiUkVBRE1FLm1kXCIsXG4gICAgXCJiaW5cIixcbiAgICBcImVzY29kZWdlbi5qc1wiLFxuICAgIFwicGFja2FnZS5qc29uXCJcbiAgXSxcbiAgXCJnaXRIZWFkXCI6IFwiYmE0ZmFhYmIyMjRiMmQ1ZTAwODBjOGU0Zjk2NDcwMmI2OTljN2QxZlwiLFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXN0b29scy9lc2NvZGVnZW5cIixcbiAgXCJsaWNlbnNlXCI6IFwiQlNELTItQ2xhdXNlXCIsXG4gIFwibWFpblwiOiBcImVzY29kZWdlbi5qc1wiLFxuICBcIm1haW50YWluZXJzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJjb25zdGVsbGF0aW9uXCIsXG4gICAgICBcImVtYWlsXCI6IFwidXRhdGFuZS50ZWFAZ21haWwuY29tXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIm1pY2hhZWxmaWNhcnJhXCIsXG4gICAgICBcImVtYWlsXCI6IFwibnBtQG1pY2hhZWwuZmljYXJyYS5tZVwiXG4gICAgfVxuICBdLFxuICBcIm5hbWVcIjogXCJlc2NvZGVnZW5cIixcbiAgXCJvcHRpb25hbERlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJzb3VyY2UtbWFwXCI6IFwifjAuMi4wXCJcbiAgfSxcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCIsXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vZXN0b29scy9lc2NvZGVnZW4uZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcImJ1aWxkXCI6IFwiY2pzaWZ5IC1hIHBhdGg6IHRvb2xzL2VudHJ5LXBvaW50LmpzID4gZXNjb2RlZ2VuLmJyb3dzZXIuanNcIixcbiAgICBcImJ1aWxkLW1pblwiOiBcImNqc2lmeSAtbWEgcGF0aDogdG9vbHMvZW50cnktcG9pbnQuanMgPiBlc2NvZGVnZW4uYnJvd3Nlci5taW4uanNcIixcbiAgICBcImxpbnRcIjogXCJndWxwIGxpbnRcIixcbiAgICBcInJlbGVhc2VcIjogXCJub2RlIHRvb2xzL3JlbGVhc2UuanNcIixcbiAgICBcInRlc3RcIjogXCJndWxwIHRyYXZpc1wiLFxuICAgIFwidW5pdC10ZXN0XCI6IFwiZ3VscCB0ZXN0XCJcbiAgfSxcbiAgXCJ2ZXJzaW9uXCI6IFwiMS44LjFcIlxufVxuIiwiLypcbiAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cbi8qanNsaW50IHZhcnM6ZmFsc2UsIGJpdHdpc2U6dHJ1ZSovXG4vKmpzaGludCBpbmRlbnQ6NCovXG4vKmdsb2JhbCBleHBvcnRzOnRydWUsIGRlZmluZTp0cnVlKi9cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcyxcbiAgICAvLyBhbmQgcGxhaW4gYnJvd3NlciBsb2FkaW5nLFxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmYWN0b3J5KGV4cG9ydHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZhY3RvcnkoKHJvb3QuZXN0cmF2ZXJzZSA9IHt9KSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiBjbG9uZShleHBvcnRzKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIFN5bnRheCxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgICAgVmlzaXRvck9wdGlvbixcbiAgICAgICAgVmlzaXRvcktleXMsXG4gICAgICAgIG9iamVjdENyZWF0ZSxcbiAgICAgICAgb2JqZWN0S2V5cyxcbiAgICAgICAgQlJFQUssXG4gICAgICAgIFNLSVAsXG4gICAgICAgIFJFTU9WRTtcblxuICAgIGZ1bmN0aW9uIGlnbm9yZUpTSGludEVycm9yKCkgeyB9XG5cbiAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgICBpZiAoIWlzQXJyYXkpIHtcbiAgICAgICAgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyYXkpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZXBDb3B5KG9iaikge1xuICAgICAgICB2YXIgcmV0ID0ge30sIGtleSwgdmFsO1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHZhbCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W2tleV0gPSBkZWVwQ29weSh2YWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldFtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYWxsb3dDb3B5KG9iaikge1xuICAgICAgICB2YXIgcmV0ID0ge30sIGtleTtcbiAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlnbm9yZUpTSGludEVycm9yKHNoYWxsb3dDb3B5KTtcblxuICAgIC8vIGJhc2VkIG9uIExMVk0gbGliYysrIHVwcGVyX2JvdW5kIC8gbG93ZXJfYm91bmRcbiAgICAvLyBNSVQgTGljZW5zZVxuXG4gICAgZnVuY3Rpb24gdXBwZXJCb3VuZChhcnJheSwgZnVuYykge1xuICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50O1xuXG4gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGxlbikge1xuICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjtcbiAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG93ZXJCb3VuZChhcnJheSwgZnVuYykge1xuICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50O1xuXG4gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGxlbikge1xuICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjtcbiAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIGlnbm9yZUpTSGludEVycm9yKGxvd2VyQm91bmQpO1xuXG4gICAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSB8fCAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBGKCkgeyB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICBGLnByb3RvdHlwZSA9IG87XG4gICAgICAgICAgICByZXR1cm4gbmV3IEYoKTtcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgIHZhciBrZXlzID0gW10sIGtleTtcbiAgICAgICAgZm9yIChrZXkgaW4gbykge1xuICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGV4dGVuZCh0bywgZnJvbSkge1xuICAgICAgICB2YXIga2V5cyA9IG9iamVjdEtleXMoZnJvbSksIGtleSwgaSwgbGVuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgU3ludGF4ID0ge1xuICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJyxcbiAgICAgICAgQXJyYXlFeHByZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJyxcbiAgICAgICAgQXJyYXlQYXR0ZXJuOiAnQXJyYXlQYXR0ZXJuJyxcbiAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicsXG4gICAgICAgIEF3YWl0RXhwcmVzc2lvbjogJ0F3YWl0RXhwcmVzc2lvbicsIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVtZW50JyxcbiAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLFxuICAgICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50JyxcbiAgICAgICAgQ2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbicsXG4gICAgICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1c2UnLFxuICAgICAgICBDbGFzc0JvZHk6ICdDbGFzc0JvZHknLFxuICAgICAgICBDbGFzc0RlY2xhcmF0aW9uOiAnQ2xhc3NEZWNsYXJhdGlvbicsXG4gICAgICAgIENsYXNzRXhwcmVzc2lvbjogJ0NsYXNzRXhwcmVzc2lvbicsXG4gICAgICAgIENvbXByZWhlbnNpb25CbG9jazogJ0NvbXByZWhlbnNpb25CbG9jaycsICAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQ29tcHJlaGVuc2lvbkV4cHJlc3Npb246ICdDb21wcmVoZW5zaW9uRXhwcmVzc2lvbicsICAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJyxcbiAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6ICdDb250aW51ZVN0YXRlbWVudCcsXG4gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQnLFxuICAgICAgICBEaXJlY3RpdmVTdGF0ZW1lbnQ6ICdEaXJlY3RpdmVTdGF0ZW1lbnQnLFxuICAgICAgICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0YXRlbWVudCcsXG4gICAgICAgIEVtcHR5U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQnLFxuICAgICAgICBFeHBvcnRCYXRjaFNwZWNpZmllcjogJ0V4cG9ydEJhdGNoU3BlY2lmaWVyJyxcbiAgICAgICAgRXhwb3J0RGVjbGFyYXRpb246ICdFeHBvcnREZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydFNwZWNpZmllcjogJ0V4cG9ydFNwZWNpZmllcicsXG4gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHByZXNzaW9uU3RhdGVtZW50JyxcbiAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JyxcbiAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsXG4gICAgICAgIEZvck9mU3RhdGVtZW50OiAnRm9yT2ZTdGF0ZW1lbnQnLFxuICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbicsXG4gICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsXG4gICAgICAgIEdlbmVyYXRvckV4cHJlc3Npb246ICdHZW5lcmF0b3JFeHByZXNzaW9uJywgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBJZGVudGlmaWVyOiAnSWRlbnRpZmllcicsXG4gICAgICAgIElmU3RhdGVtZW50OiAnSWZTdGF0ZW1lbnQnLFxuICAgICAgICBJbXBvcnREZWNsYXJhdGlvbjogJ0ltcG9ydERlY2xhcmF0aW9uJyxcbiAgICAgICAgSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInLFxuICAgICAgICBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInLFxuICAgICAgICBJbXBvcnRTcGVjaWZpZXI6ICdJbXBvcnRTcGVjaWZpZXInLFxuICAgICAgICBMaXRlcmFsOiAnTGl0ZXJhbCcsXG4gICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6ICdMYWJlbGVkU3RhdGVtZW50JyxcbiAgICAgICAgTG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lvbicsXG4gICAgICAgIE1lbWJlckV4cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJyxcbiAgICAgICAgTWV0aG9kRGVmaW5pdGlvbjogJ01ldGhvZERlZmluaXRpb24nLFxuICAgICAgICBNb2R1bGVTcGVjaWZpZXI6ICdNb2R1bGVTcGVjaWZpZXInLFxuICAgICAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lvbicsXG4gICAgICAgIE9iamVjdEV4cHJlc3Npb246ICdPYmplY3RFeHByZXNzaW9uJyxcbiAgICAgICAgT2JqZWN0UGF0dGVybjogJ09iamVjdFBhdHRlcm4nLFxuICAgICAgICBQcm9ncmFtOiAnUHJvZ3JhbScsXG4gICAgICAgIFByb3BlcnR5OiAnUHJvcGVydHknLFxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLFxuICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLFxuICAgICAgICBTcHJlYWRFbGVtZW50OiAnU3ByZWFkRWxlbWVudCcsXG4gICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsXG4gICAgICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJyxcbiAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiAnVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uJyxcbiAgICAgICAgVGVtcGxhdGVFbGVtZW50OiAnVGVtcGxhdGVFbGVtZW50JyxcbiAgICAgICAgVGVtcGxhdGVMaXRlcmFsOiAnVGVtcGxhdGVMaXRlcmFsJyxcbiAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsXG4gICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLFxuICAgICAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLFxuICAgICAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4cHJlc3Npb24nLFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVzc2lvbicsXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0aW9uJyxcbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJyxcbiAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsXG4gICAgICAgIFdpdGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JyxcbiAgICAgICAgWWllbGRFeHByZXNzaW9uOiAnWWllbGRFeHByZXNzaW9uJ1xuICAgIH07XG5cbiAgICBWaXNpdG9yS2V5cyA9IHtcbiAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBBcnJheUV4cHJlc3Npb246IFsnZWxlbWVudHMnXSxcbiAgICAgICAgQXJyYXlQYXR0ZXJuOiBbJ2VsZW1lbnRzJ10sXG4gICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBbJ3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0JywgJ2JvZHknXSxcbiAgICAgICAgQXdhaXRFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBCbG9ja1N0YXRlbWVudDogWydib2R5J10sXG4gICAgICAgIEJpbmFyeUV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBCcmVha1N0YXRlbWVudDogWydsYWJlbCddLFxuICAgICAgICBDYWxsRXhwcmVzc2lvbjogWydjYWxsZWUnLCAnYXJndW1lbnRzJ10sXG4gICAgICAgIENhdGNoQ2xhdXNlOiBbJ3BhcmFtJywgJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NCb2R5OiBbJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogWydpZCcsICdib2R5JywgJ3N1cGVyQ2xhc3MnXSxcbiAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiBbJ2lkJywgJ2JvZHknLCAnc3VwZXJDbGFzcyddLFxuICAgICAgICBDb21wcmVoZW5zaW9uQmxvY2s6IFsnbGVmdCcsICdyaWdodCddLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbXByZWhlbnNpb25FeHByZXNzaW9uOiBbJ2Jsb2NrcycsICdmaWx0ZXInLCAnYm9keSddLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnLCAnYWx0ZXJuYXRlJ10sXG4gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiBbJ2xhYmVsJ10sXG4gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiBbXSxcbiAgICAgICAgRGlyZWN0aXZlU3RhdGVtZW50OiBbXSxcbiAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogWydib2R5JywgJ3Rlc3QnXSxcbiAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6IFtdLFxuICAgICAgICBFeHBvcnRCYXRjaFNwZWNpZmllcjogW10sXG4gICAgICAgIEV4cG9ydERlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9uJywgJ3NwZWNpZmllcnMnLCAnc291cmNlJ10sXG4gICAgICAgIEV4cG9ydFNwZWNpZmllcjogWydpZCcsICduYW1lJ10sXG4gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6IFsnZXhwcmVzc2lvbiddLFxuICAgICAgICBGb3JTdGF0ZW1lbnQ6IFsnaW5pdCcsICd0ZXN0JywgJ3VwZGF0ZScsICdib2R5J10sXG4gICAgICAgIEZvckluU3RhdGVtZW50OiBbJ2xlZnQnLCAncmlnaHQnLCAnYm9keSddLFxuICAgICAgICBGb3JPZlN0YXRlbWVudDogWydsZWZ0JywgJ3JpZ2h0JywgJ2JvZHknXSxcbiAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogWydpZCcsICdwYXJhbXMnLCAnZGVmYXVsdHMnLCAncmVzdCcsICdib2R5J10sXG4gICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogWydpZCcsICdwYXJhbXMnLCAnZGVmYXVsdHMnLCAncmVzdCcsICdib2R5J10sXG4gICAgICAgIEdlbmVyYXRvckV4cHJlc3Npb246IFsnYmxvY2tzJywgJ2ZpbHRlcicsICdib2R5J10sICAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgSWRlbnRpZmllcjogW10sXG4gICAgICAgIElmU3RhdGVtZW50OiBbJ3Rlc3QnLCAnY29uc2VxdWVudCcsICdhbHRlcm5hdGUnXSxcbiAgICAgICAgSW1wb3J0RGVjbGFyYXRpb246IFsnc3BlY2lmaWVycycsICdzb3VyY2UnXSxcbiAgICAgICAgSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogWydpZCddLFxuICAgICAgICBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6IFsnaWQnXSxcbiAgICAgICAgSW1wb3J0U3BlY2lmaWVyOiBbJ2lkJywgJ25hbWUnXSxcbiAgICAgICAgTGl0ZXJhbDogW10sXG4gICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6IFsnbGFiZWwnLCAnYm9keSddLFxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIE1lbWJlckV4cHJlc3Npb246IFsnb2JqZWN0JywgJ3Byb3BlcnR5J10sXG4gICAgICAgIE1ldGhvZERlZmluaXRpb246IFsna2V5JywgJ3ZhbHVlJ10sXG4gICAgICAgIE1vZHVsZVNwZWNpZmllcjogW10sXG4gICAgICAgIE5ld0V4cHJlc3Npb246IFsnY2FsbGVlJywgJ2FyZ3VtZW50cyddLFxuICAgICAgICBPYmplY3RFeHByZXNzaW9uOiBbJ3Byb3BlcnRpZXMnXSxcbiAgICAgICAgT2JqZWN0UGF0dGVybjogWydwcm9wZXJ0aWVzJ10sXG4gICAgICAgIFByb2dyYW06IFsnYm9keSddLFxuICAgICAgICBQcm9wZXJ0eTogWydrZXknLCAndmFsdWUnXSxcbiAgICAgICAgUmV0dXJuU3RhdGVtZW50OiBbJ2FyZ3VtZW50J10sXG4gICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogWydleHByZXNzaW9ucyddLFxuICAgICAgICBTcHJlYWRFbGVtZW50OiBbJ2FyZ3VtZW50J10sXG4gICAgICAgIFN3aXRjaFN0YXRlbWVudDogWydkaXNjcmltaW5hbnQnLCAnY2FzZXMnXSxcbiAgICAgICAgU3dpdGNoQ2FzZTogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnXSxcbiAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBbJ3RhZycsICdxdWFzaSddLFxuICAgICAgICBUZW1wbGF0ZUVsZW1lbnQ6IFtdLFxuICAgICAgICBUZW1wbGF0ZUxpdGVyYWw6IFsncXVhc2lzJywgJ2V4cHJlc3Npb25zJ10sXG4gICAgICAgIFRoaXNFeHByZXNzaW9uOiBbXSxcbiAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgVHJ5U3RhdGVtZW50OiBbJ2Jsb2NrJywgJ2hhbmRsZXJzJywgJ2hhbmRsZXInLCAnZ3VhcmRlZEhhbmRsZXJzJywgJ2ZpbmFsaXplciddLFxuICAgICAgICBVbmFyeUV4cHJlc3Npb246IFsnYXJndW1lbnQnXSxcbiAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogWydhcmd1bWVudCddLFxuICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9ucyddLFxuICAgICAgICBWYXJpYWJsZURlY2xhcmF0b3I6IFsnaWQnLCAnaW5pdCddLFxuICAgICAgICBXaGlsZVN0YXRlbWVudDogWyd0ZXN0JywgJ2JvZHknXSxcbiAgICAgICAgV2l0aFN0YXRlbWVudDogWydvYmplY3QnLCAnYm9keSddLFxuICAgICAgICBZaWVsZEV4cHJlc3Npb246IFsnYXJndW1lbnQnXVxuICAgIH07XG5cbiAgICAvLyB1bmlxdWUgaWRcbiAgICBCUkVBSyA9IHt9O1xuICAgIFNLSVAgPSB7fTtcbiAgICBSRU1PVkUgPSB7fTtcblxuICAgIFZpc2l0b3JPcHRpb24gPSB7XG4gICAgICAgIEJyZWFrOiBCUkVBSyxcbiAgICAgICAgU2tpcDogU0tJUCxcbiAgICAgICAgUmVtb3ZlOiBSRU1PVkVcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gUmVmZXJlbmNlKHBhcmVudCwga2V5KSB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICB9XG5cbiAgICBSZWZlcmVuY2UucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5rZXldID0gbm9kZTtcbiAgICB9O1xuXG4gICAgUmVmZXJlbmNlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHRoaXMucGFyZW50KSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3BsaWNlKHRoaXMua2V5LCAxKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIEVsZW1lbnQobm9kZSwgcGF0aCwgd3JhcCwgcmVmKSB7XG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMud3JhcCA9IHdyYXA7XG4gICAgICAgIHRoaXMucmVmID0gcmVmO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIENvbnRyb2xsZXIoKSB7IH1cblxuICAgIC8vIEFQSTpcbiAgICAvLyByZXR1cm4gcHJvcGVydHkgcGF0aCBhcnJheSBmcm9tIHJvb3QgdG8gY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUucGF0aCA9IGZ1bmN0aW9uIHBhdGgoKSB7XG4gICAgICAgIHZhciBpLCBpeiwgaiwganosIHJlc3VsdCwgZWxlbWVudDtcblxuICAgICAgICBmdW5jdGlvbiBhZGRUb1BhdGgocmVzdWx0LCBwYXRoKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheShwYXRoKSkge1xuICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGp6ID0gcGF0aC5sZW5ndGg7IGogPCBqejsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhdGhbal0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByb290IG5vZGVcbiAgICAgICAgaWYgKCF0aGlzLl9fY3VycmVudC5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpcnN0IG5vZGUgaXMgc2VudGluZWwsIHNlY29uZCBub2RlIGlzIHJvb3QgZWxlbWVudFxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMiwgaXogPSB0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLl9fbGVhdmVsaXN0W2ldO1xuICAgICAgICAgICAgYWRkVG9QYXRoKHJlc3VsdCwgZWxlbWVudC5wYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUb1BhdGgocmVzdWx0LCB0aGlzLl9fY3VycmVudC5wYXRoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJldHVybiB0eXBlIG9mIGN1cnJlbnQgbm9kZVxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBub2RlID0gdGhpcy5jdXJyZW50KCk7XG4gICAgICAgIHJldHVybiBub2RlLnR5cGUgfHwgdGhpcy5fX2N1cnJlbnQud3JhcDtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJldHVybiBhcnJheSBvZiBwYXJlbnQgZWxlbWVudHNcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5wYXJlbnRzID0gZnVuY3Rpb24gcGFyZW50cygpIHtcbiAgICAgICAgdmFyIGksIGl6LCByZXN1bHQ7XG5cbiAgICAgICAgLy8gZmlyc3Qgbm9kZSBpcyBzZW50aW5lbFxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMSwgaXogPSB0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuX19sZWF2ZWxpc3RbaV0ubm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIGN1cnJlbnQgbm9kZVxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiBjdXJyZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fX2N1cnJlbnQubm9kZTtcbiAgICB9O1xuXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUuX19leGVjdXRlID0gZnVuY3Rpb24gX19leGVjdXRlKGNhbGxiYWNrLCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBwcmV2aW91cywgcmVzdWx0O1xuXG4gICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBwcmV2aW91cyAgPSB0aGlzLl9fY3VycmVudDtcbiAgICAgICAgdGhpcy5fX2N1cnJlbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBudWxsO1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrLmNhbGwodGhpcywgZWxlbWVudC5ub2RlLCB0aGlzLl9fbGVhdmVsaXN0W3RoaXMuX19sZWF2ZWxpc3QubGVuZ3RoIC0gMV0ubm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fX2N1cnJlbnQgPSBwcmV2aW91cztcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gbm90aWZ5IGNvbnRyb2wgc2tpcCAvIGJyZWFrXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KGZsYWcpIHtcbiAgICAgICAgdGhpcy5fX3N0YXRlID0gZmxhZztcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIHNraXAgY2hpbGQgbm9kZXMgb2YgY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoU0tJUCk7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyBicmVhayB0cmF2ZXJzYWxzXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGVbJ2JyZWFrJ10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KEJSRUFLKTtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJlbW92ZSBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5vdGlmeShSRU1PVkUpO1xuICAgIH07XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5fX2luaXRpYWxpemUgPSBmdW5jdGlvbihyb290LCB2aXNpdG9yKSB7XG4gICAgICAgIHRoaXMudmlzaXRvciA9IHZpc2l0b3I7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgIHRoaXMuX193b3JrbGlzdCA9IFtdO1xuICAgICAgICB0aGlzLl9fbGVhdmVsaXN0ID0gW107XG4gICAgICAgIHRoaXMuX19jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fX3N0YXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fX2ZhbGxiYWNrID0gdmlzaXRvci5mYWxsYmFjayA9PT0gJ2l0ZXJhdGlvbic7XG4gICAgICAgIHRoaXMuX19rZXlzID0gVmlzaXRvcktleXM7XG4gICAgICAgIGlmICh2aXNpdG9yLmtleXMpIHtcbiAgICAgICAgICAgIHRoaXMuX19rZXlzID0gZXh0ZW5kKG9iamVjdENyZWF0ZSh0aGlzLl9fa2V5cyksIHZpc2l0b3Iua2V5cyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaXNOb2RlKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG5vZGUudHlwZSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNQcm9wZXJ0eShub2RlVHlwZSwga2V5KSB7XG4gICAgICAgIHJldHVybiAobm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RFeHByZXNzaW9uIHx8IG5vZGVUeXBlID09PSBTeW50YXguT2JqZWN0UGF0dGVybikgJiYgJ3Byb3BlcnRpZXMnID09PSBrZXk7XG4gICAgfVxuXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUudHJhdmVyc2UgPSBmdW5jdGlvbiB0cmF2ZXJzZShyb290LCB2aXNpdG9yKSB7XG4gICAgICAgIHZhciB3b3JrbGlzdCxcbiAgICAgICAgICAgIGxlYXZlbGlzdCxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbm9kZVR5cGUsXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgY3VycmVudDIsXG4gICAgICAgICAgICBjYW5kaWRhdGVzLFxuICAgICAgICAgICAgY2FuZGlkYXRlLFxuICAgICAgICAgICAgc2VudGluZWw7XG5cbiAgICAgICAgdGhpcy5fX2luaXRpYWxpemUocm9vdCwgdmlzaXRvcik7XG5cbiAgICAgICAgc2VudGluZWwgPSB7fTtcblxuICAgICAgICAvLyByZWZlcmVuY2VcbiAgICAgICAgd29ya2xpc3QgPSB0aGlzLl9fd29ya2xpc3Q7XG4gICAgICAgIGxlYXZlbGlzdCA9IHRoaXMuX19sZWF2ZWxpc3Q7XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZVxuICAgICAgICB3b3JrbGlzdC5wdXNoKG5ldyBFbGVtZW50KHJvb3QsIG51bGwsIG51bGwsIG51bGwpKTtcbiAgICAgICAgbGVhdmVsaXN0LnB1c2gobmV3IEVsZW1lbnQobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCkpO1xuXG4gICAgICAgIHdoaWxlICh3b3JrbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB3b3JrbGlzdC5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHNlbnRpbmVsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IGxlYXZlbGlzdC5wb3AoKTtcblxuICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IubGVhdmUsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgcmV0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5ub2RlKSB7XG5cbiAgICAgICAgICAgICAgICByZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmVudGVyLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHJldCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc2VudGluZWwpO1xuICAgICAgICAgICAgICAgIGxlYXZlbGlzdC5wdXNoKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gU0tJUCB8fCByZXQgPT09IFNLSVApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbm9kZSA9IGVsZW1lbnQubm9kZTtcbiAgICAgICAgICAgICAgICBub2RlVHlwZSA9IGVsZW1lbnQud3JhcCB8fCBub2RlLnR5cGU7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcyA9IHRoaXMuX19rZXlzW25vZGVUeXBlXTtcbiAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19mYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcyA9IG9iamVjdEtleXMobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9kZSB0eXBlICcgKyBub2RlVHlwZSArICcuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gY2FuZGlkYXRlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50IC09IDEpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gY2FuZGlkYXRlc1tjdXJyZW50XTtcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gbm9kZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50MiA9IGNhbmRpZGF0ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQyIC09IDEpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZVtjdXJyZW50Ml0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb3BlcnR5KG5vZGVUeXBlLCBjYW5kaWRhdGVzW2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHknLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZShjYW5kaWRhdGVbY3VycmVudDJdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc05vZGUoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChjYW5kaWRhdGUsIGtleSwgbnVsbCwgbnVsbCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlRWxlbShlbGVtZW50KSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgbmV4dEVsZW0sXG4gICAgICAgICAgICAgICAgcGFyZW50O1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5yZWYucmVtb3ZlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSByZWZlcmVuY2UgaXMgYW4gZWxlbWVudCBvZiBhbiBhcnJheS5cbiAgICAgICAgICAgICAgICBrZXkgPSBlbGVtZW50LnJlZi5rZXk7XG4gICAgICAgICAgICAgICAgcGFyZW50ID0gZWxlbWVudC5yZWYucGFyZW50O1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgcmVtb3ZlZCBmcm9tIGFycmF5LCB0aGVuIGRlY3JlYXNlIGZvbGxvd2luZyBpdGVtcycga2V5cy5cbiAgICAgICAgICAgICAgICBpID0gd29ya2xpc3QubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEVsZW0gPSB3b3JrbGlzdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRFbGVtLnJlZiAmJiBuZXh0RWxlbS5yZWYucGFyZW50ID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICAobmV4dEVsZW0ucmVmLmtleSA8IGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLS1uZXh0RWxlbS5yZWYua2V5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdvcmtsaXN0LFxuICAgICAgICAgICAgbGVhdmVsaXN0LFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG5vZGVUeXBlLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBjdXJyZW50MixcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICAgICAgICBjYW5kaWRhdGUsXG4gICAgICAgICAgICBzZW50aW5lbCxcbiAgICAgICAgICAgIG91dGVyLFxuICAgICAgICAgICAga2V5O1xuXG4gICAgICAgIHRoaXMuX19pbml0aWFsaXplKHJvb3QsIHZpc2l0b3IpO1xuXG4gICAgICAgIHNlbnRpbmVsID0ge307XG5cbiAgICAgICAgLy8gcmVmZXJlbmNlXG4gICAgICAgIHdvcmtsaXN0ID0gdGhpcy5fX3dvcmtsaXN0O1xuICAgICAgICBsZWF2ZWxpc3QgPSB0aGlzLl9fbGVhdmVsaXN0O1xuXG4gICAgICAgIC8vIGluaXRpYWxpemVcbiAgICAgICAgb3V0ZXIgPSB7XG4gICAgICAgICAgICByb290OiByb290XG4gICAgICAgIH07XG4gICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChyb290LCBudWxsLCBudWxsLCBuZXcgUmVmZXJlbmNlKG91dGVyLCAncm9vdCcpKTtcbiAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gc2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gbGVhdmVsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5sZWF2ZSwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAvLyBub2RlIG1heSBiZSByZXBsYWNlZCB3aXRoIG51bGwsXG4gICAgICAgICAgICAgICAgLy8gc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmRlZmluZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZVxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IEJSRUFLICYmIHRhcmdldCAhPT0gU0tJUCAmJiB0YXJnZXQgIT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmLnJlcGxhY2UodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBSRU1PVkUgfHwgdGFyZ2V0ID09PSBSRU1PVkUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRWxlbShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCB0YXJnZXQgPT09IEJSRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5lbnRlciwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCxcbiAgICAgICAgICAgIC8vIHNvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdW5kZWZpbmVkIGFuZCBudWxsIGluIHRoaXMgcGxhY2VcbiAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IEJSRUFLICYmIHRhcmdldCAhPT0gU0tJUCAmJiB0YXJnZXQgIT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VcbiAgICAgICAgICAgICAgICBlbGVtZW50LnJlZi5yZXBsYWNlKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5ub2RlID0gdGFyZ2V0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBSRU1PVkUgfHwgdGFyZ2V0ID09PSBSRU1PVkUpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVFbGVtKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQubm9kZSA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHRhcmdldCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0ZXIucm9vdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbm9kZSBtYXkgYmUgbnVsbFxuICAgICAgICAgICAgbm9kZSA9IGVsZW1lbnQubm9kZTtcbiAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHNlbnRpbmVsKTtcbiAgICAgICAgICAgIGxlYXZlbGlzdC5wdXNoKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBTS0lQIHx8IHRhcmdldCA9PT0gU0tJUCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2RlVHlwZSA9IGVsZW1lbnQud3JhcCB8fCBub2RlLnR5cGU7XG4gICAgICAgICAgICBjYW5kaWRhdGVzID0gdGhpcy5fX2tleXNbbm9kZVR5cGVdO1xuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19mYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gb2JqZWN0S2V5cyhub2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9kZSB0eXBlICcgKyBub2RlVHlwZSArICcuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50ID0gY2FuZGlkYXRlcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIGtleSA9IGNhbmRpZGF0ZXNbY3VycmVudF07XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gbm9kZVtrZXldO1xuICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudDIgPSBjYW5kaWRhdGUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQyIC09IDEpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlW2N1cnJlbnQyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvcGVydHkobm9kZVR5cGUsIGNhbmRpZGF0ZXNbY3VycmVudF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgJ1Byb3BlcnR5JywgbmV3IFJlZmVyZW5jZShjYW5kaWRhdGUsIGN1cnJlbnQyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZShjYW5kaWRhdGVbY3VycmVudDJdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG5ldyBSZWZlcmVuY2UoY2FuZGlkYXRlLCBjdXJyZW50MikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZShjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQoY2FuZGlkYXRlLCBrZXksIG51bGwsIG5ldyBSZWZlcmVuY2Uobm9kZSwga2V5KSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXRlci5yb290O1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShyb290LCB2aXNpdG9yKSB7XG4gICAgICAgIHZhciBjb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIoKTtcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIudHJhdmVyc2Uocm9vdCwgdmlzaXRvcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZShyb290LCB2aXNpdG9yKSB7XG4gICAgICAgIHZhciBjb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIoKTtcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIucmVwbGFjZShyb290LCB2aXNpdG9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmRDb21tZW50UmFuZ2UoY29tbWVudCwgdG9rZW5zKSB7XG4gICAgICAgIHZhciB0YXJnZXQ7XG5cbiAgICAgICAgdGFyZ2V0ID0gdXBwZXJCb3VuZCh0b2tlbnMsIGZ1bmN0aW9uIHNlYXJjaCh0b2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuLnJhbmdlWzBdID4gY29tbWVudC5yYW5nZVswXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlID0gW2NvbW1lbnQucmFuZ2VbMF0sIGNvbW1lbnQucmFuZ2VbMV1dO1xuXG4gICAgICAgIGlmICh0YXJnZXQgIT09IHRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9IHRva2Vuc1t0YXJnZXRdLnJhbmdlWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0IC09IDE7XG4gICAgICAgIGlmICh0YXJnZXQgPj0gMCkge1xuICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzBdID0gdG9rZW5zW3RhcmdldF0ucmFuZ2VbMV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tbWVudDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhdHRhY2hDb21tZW50cyh0cmVlLCBwcm92aWRlZENvbW1lbnRzLCB0b2tlbnMpIHtcbiAgICAgICAgLy8gQXQgZmlyc3QsIHdlIHNob3VsZCBjYWxjdWxhdGUgZXh0ZW5kZWQgY29tbWVudCByYW5nZXMuXG4gICAgICAgIHZhciBjb21tZW50cyA9IFtdLCBjb21tZW50LCBsZW4sIGksIGN1cnNvcjtcblxuICAgICAgICBpZiAoIXRyZWUucmFuZ2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXR0YWNoQ29tbWVudHMgbmVlZHMgcmFuZ2UgaW5mb3JtYXRpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRva2VucyBhcnJheSBpcyBlbXB0eSwgd2UgYXR0YWNoIGNvbW1lbnRzIHRvIHRyZWUgYXMgJ2xlYWRpbmdDb21tZW50cydcbiAgICAgICAgaWYgKCF0b2tlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAocHJvdmlkZWRDb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwcm92aWRlZENvbW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBkZWVwQ29weShwcm92aWRlZENvbW1lbnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlID0gWzAsIHRyZWUucmFuZ2VbMF1dO1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cmVlLmxlYWRpbmdDb21tZW50cyA9IGNvbW1lbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRyZWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwcm92aWRlZENvbW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb21tZW50cy5wdXNoKGV4dGVuZENvbW1lbnRSYW5nZShkZWVwQ29weShwcm92aWRlZENvbW1lbnRzW2ldKSwgdG9rZW5zKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIEpvaG4gRnJlZW1hbidzIGltcGxlbWVudGF0aW9uLlxuICAgICAgICBjdXJzb3IgPSAwO1xuICAgICAgICB0cmF2ZXJzZSh0cmVlLCB7XG4gICAgICAgICAgICBlbnRlcjogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29tbWVudDtcblxuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJzb3IgPCBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzW2N1cnNvcl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50LmV4dGVuZGVkUmFuZ2VbMV0gPiBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50LmV4dGVuZGVkUmFuZ2VbMV0gPT09IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5sZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnNwbGljZShjdXJzb3IsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IG91dCBvZiBvd25lZCBub2RlXG4gICAgICAgICAgICAgICAgaWYgKGN1cnNvciA9PT0gY29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLkJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb21tZW50c1tjdXJzb3JdLmV4dGVuZGVkUmFuZ2VbMF0gPiBub2RlLnJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLlNraXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjdXJzb3IgPSAwO1xuICAgICAgICB0cmF2ZXJzZSh0cmVlLCB7XG4gICAgICAgICAgICBsZWF2ZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29tbWVudDtcblxuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJzb3IgPCBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzW2N1cnNvcl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnJhbmdlWzFdIDwgY29tbWVudC5leHRlbmRlZFJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnJhbmdlWzFdID09PSBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS50cmFpbGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50cmFpbGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnNwbGljZShjdXJzb3IsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IG91dCBvZiBvd25lZCBub2RlXG4gICAgICAgICAgICAgICAgaWYgKGN1cnNvciA9PT0gY29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLkJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb21tZW50c1tjdXJzb3JdLmV4dGVuZGVkUmFuZ2VbMF0gPiBub2RlLnJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLlNraXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdHJlZTtcbiAgICB9XG5cbiAgICBleHBvcnRzLnZlcnNpb24gPSAnMS44LjEtZGV2JztcbiAgICBleHBvcnRzLlN5bnRheCA9IFN5bnRheDtcbiAgICBleHBvcnRzLnRyYXZlcnNlID0gdHJhdmVyc2U7XG4gICAgZXhwb3J0cy5yZXBsYWNlID0gcmVwbGFjZTtcbiAgICBleHBvcnRzLmF0dGFjaENvbW1lbnRzID0gYXR0YWNoQ29tbWVudHM7XG4gICAgZXhwb3J0cy5WaXNpdG9yS2V5cyA9IFZpc2l0b3JLZXlzO1xuICAgIGV4cG9ydHMuVmlzaXRvck9wdGlvbiA9IFZpc2l0b3JPcHRpb247XG4gICAgZXhwb3J0cy5Db250cm9sbGVyID0gQ29udHJvbGxlcjtcbiAgICBleHBvcnRzLmNsb25lRW52aXJvbm1lbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjbG9uZSh7fSk7IH07XG5cbiAgICByZXR1cm4gZXhwb3J0cztcbn0pKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgJ0FTIElTJ1xuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGZ1bmN0aW9uIGlzRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdBcnJheUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnQXNzaWdubWVudEV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnQmluYXJ5RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdDYWxsRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdDb25kaXRpb25hbEV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnRnVuY3Rpb25FeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ0lkZW50aWZpZXInOlxuICAgICAgICAgICAgY2FzZSAnTGl0ZXJhbCc6XG4gICAgICAgICAgICBjYXNlICdMb2dpY2FsRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ05ld0V4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnT2JqZWN0RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdTZXF1ZW5jZUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnVGhpc0V4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1VwZGF0ZUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0l0ZXJhdGlvblN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdEb1doaWxlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0ZvckluU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0ZvclN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdXaGlsZVN0YXRlbWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Jsb2NrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0JyZWFrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0NvbnRpbnVlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0RlYnVnZ2VyU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0RvV2hpbGVTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRW1wdHlTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRXhwcmVzc2lvblN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdGb3JJblN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdGb3JTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnSWZTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnTGFiZWxlZFN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdSZXR1cm5TdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnU3dpdGNoU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1Rocm93U3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1RyeVN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdWYXJpYWJsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1doaWxlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1dpdGhTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NvdXJjZUVsZW1lbnQobm9kZSkge1xuICAgICAgcmV0dXJuIGlzU3RhdGVtZW50KG5vZGUpIHx8IG5vZGUgIT0gbnVsbCAmJiBub2RlLnR5cGUgPT09ICdGdW5jdGlvbkRlY2xhcmF0aW9uJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFpbGluZ1N0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0lmU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY29uc2VxdWVudDtcblxuICAgICAgICBjYXNlICdMYWJlbGVkU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnRm9yU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnRm9ySW5TdGF0ZW1lbnQnOlxuICAgICAgICBjYXNlICdXaGlsZVN0YXRlbWVudCc6XG4gICAgICAgIGNhc2UgJ1dpdGhTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Byb2JsZW1hdGljSWZTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB2YXIgY3VycmVudDtcblxuICAgICAgICBpZiAobm9kZS50eXBlICE9PSAnSWZTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gbm9kZS5jb25zZXF1ZW50O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC50eXBlID09PSAnSWZTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuYWx0ZXJuYXRlID09IG51bGwpICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSB0cmFpbGluZ1N0YXRlbWVudChjdXJyZW50KTtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBpc0V4cHJlc3Npb246IGlzRXhwcmVzc2lvbixcbiAgICAgICAgaXNTdGF0ZW1lbnQ6IGlzU3RhdGVtZW50LFxuICAgICAgICBpc0l0ZXJhdGlvblN0YXRlbWVudDogaXNJdGVyYXRpb25TdGF0ZW1lbnQsXG4gICAgICAgIGlzU291cmNlRWxlbWVudDogaXNTb3VyY2VFbGVtZW50LFxuICAgICAgICBpc1Byb2JsZW1hdGljSWZTdGF0ZW1lbnQ6IGlzUHJvYmxlbWF0aWNJZlN0YXRlbWVudCxcblxuICAgICAgICB0cmFpbGluZ1N0YXRlbWVudDogdHJhaWxpbmdTdGF0ZW1lbnRcbiAgICB9O1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxNCBJdmFuIE5pa3VsaW4gPGlmYWFhbkBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgRVM2UmVnZXgsIEVTNVJlZ2V4LCBOT05fQVNDSUlfV0hJVEVTUEFDRVMsIElERU5USUZJRVJfU1RBUlQsIElERU5USUZJRVJfUEFSVCwgY2g7XG5cbiAgICAvLyBTZWUgYHRvb2xzL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXguanNgLlxuICAgIEVTNVJlZ2V4ID0ge1xuICAgICAgICAvLyBFQ01BU2NyaXB0IDUuMS9Vbmljb2RlIHY3LjAuMCBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDpcbiAgICAgICAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6IC9bXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwLVxcdTA4QjJcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBN0FEXFx1QTdCMFxcdUE3QjFcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI1RlxcdUFCNjRcXHVBQjY1XFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXS8sXG4gICAgICAgIC8vIEVDTUFTY3JpcHQgNS4xL1VuaWNvZGUgdjcuMC4wIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6XG4gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IC9bXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4My1cXHUwNDg3XFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MTAtXFx1MDYxQVxcdTA2MjAtXFx1MDY2OVxcdTA2NkUtXFx1MDZEM1xcdTA2RDUtXFx1MDZEQ1xcdTA2REYtXFx1MDZFOFxcdTA2RUEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwLVxcdTA3NEFcXHUwNzRELVxcdTA3QjFcXHUwN0MwLVxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODJEXFx1MDg0MC1cXHUwODVCXFx1MDhBMC1cXHUwOEIyXFx1MDhFNC1cXHUwOTYzXFx1MDk2Ni1cXHUwOTZGXFx1MDk3MS1cXHUwOTgzXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCQy1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0VcXHUwOUQ3XFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTNcXHUwOUU2LVxcdTA5RjFcXHUwQTAxLVxcdTBBMDNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE2Ni1cXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJDLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQUQwXFx1MEFFMC1cXHUwQUUzXFx1MEFFNi1cXHUwQUVGXFx1MEIwMS1cXHUwQjAzXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0MtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2M1xcdTBCNjYtXFx1MEI2RlxcdTBCNzFcXHUwQjgyXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQwXFx1MEJEN1xcdTBCRTYtXFx1MEJFRlxcdTBDMDAtXFx1MEMwM1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0QtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM1OFxcdTBDNTlcXHUwQzYwLVxcdTBDNjNcXHUwQzY2LVxcdTBDNkZcXHUwQzgxLVxcdTBDODNcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JDLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDREVcXHUwQ0UwLVxcdTBDRTNcXHUwQ0U2LVxcdTBDRUZcXHUwQ0YxXFx1MENGMlxcdTBEMDEtXFx1MEQwM1xcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0QtXFx1MEQ0NFxcdTBENDYtXFx1MEQ0OFxcdTBENEEtXFx1MEQ0RVxcdTBENTdcXHUwRDYwLVxcdTBENjNcXHUwRDY2LVxcdTBENkZcXHUwRDdBLVxcdTBEN0ZcXHUwRDgyXFx1MEQ4M1xcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERTYtXFx1MERFRlxcdTBERjJcXHUwREYzXFx1MEUwMS1cXHUwRTNBXFx1MEU0MC1cXHUwRTRFXFx1MEU1MC1cXHUwRTU5XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjlcXHUwRUJCLVxcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVDOC1cXHUwRUNEXFx1MEVEMC1cXHUwRUQ5XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGMThcXHUwRjE5XFx1MEYyMC1cXHUwRjI5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRS1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY3MS1cXHUwRjg0XFx1MEY4Ni1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMDAtXFx1MTA0OVxcdTEwNTAtXFx1MTA5RFxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzVELVxcdTEzNUZcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTRcXHUxNzIwLVxcdTE3MzRcXHUxNzQwLVxcdTE3NTNcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzcyXFx1MTc3M1xcdTE3ODAtXFx1MTdEM1xcdTE3RDdcXHUxN0RDXFx1MTdERFxcdTE3RTAtXFx1MTdFOVxcdTE4MEItXFx1MTgwRFxcdTE4MTAtXFx1MTgxOVxcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5MjAtXFx1MTkyQlxcdTE5MzAtXFx1MTkzQlxcdTE5NDYtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTE5RDAtXFx1MTlEOVxcdTFBMDAtXFx1MUExQlxcdTFBMjAtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0YtXFx1MUE4OVxcdTFBOTAtXFx1MUE5OVxcdTFBQTdcXHUxQUIwLVxcdTFBQkRcXHUxQjAwLVxcdTFCNEJcXHUxQjUwLVxcdTFCNTlcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCRjNcXHUxQzAwLVxcdTFDMzdcXHUxQzQwLVxcdTFDNDlcXHUxQzRELVxcdTFDN0RcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRjZcXHUxQ0Y4XFx1MUNGOVxcdTFEMDAtXFx1MURGNVxcdTFERkMtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDBDXFx1MjAwRFxcdTIwM0ZcXHUyMDQwXFx1MjA1NFxcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjBEMC1cXHUyMERDXFx1MjBFMVxcdTIwRTUtXFx1MjBGMFxcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTYwLVxcdTIxODhcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDdGLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyREUwLVxcdTJERkZcXHUyRTJGXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDJGXFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5OVxcdTMwOUFcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGQ0NcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MkJcXHVBNjQwLVxcdUE2NkZcXHVBNjc0LVxcdUE2N0RcXHVBNjdGLVxcdUE2OURcXHVBNjlGLVxcdUE2RjFcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3OEVcXHVBNzkwLVxcdUE3QURcXHVBN0IwXFx1QTdCMVxcdUE3RjctXFx1QTgyN1xcdUE4NDAtXFx1QTg3M1xcdUE4ODAtXFx1QThDNFxcdUE4RDAtXFx1QThEOVxcdUE4RTAtXFx1QThGN1xcdUE4RkJcXHVBOTAwLVxcdUE5MkRcXHVBOTMwLVxcdUE5NTNcXHVBOTYwLVxcdUE5N0NcXHVBOTgwLVxcdUE5QzBcXHVBOUNGLVxcdUE5RDlcXHVBOUUwLVxcdUE5RkVcXHVBQTAwLVxcdUFBMzZcXHVBQTQwLVxcdUFBNERcXHVBQTUwLVxcdUFBNTlcXHVBQTYwLVxcdUFBNzZcXHVBQTdBLVxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUZcXHVBQUYyLVxcdUFBRjZcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNUZcXHVBQjY0XFx1QUI2NVxcdUFCQzAtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1QUJGMC1cXHVBQkY5XFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkRcXHVGRTMzXFx1RkUzNFxcdUZFNEQtXFx1RkU0RlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMTAtXFx1RkYxOVxcdUZGMjEtXFx1RkYzQVxcdUZGM0ZcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdL1xuICAgIH07XG5cbiAgICBFUzZSZWdleCA9IHtcbiAgICAgICAgLy8gRUNNQVNjcmlwdCA2L1VuaWNvZGUgdjcuMC4wIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OlxuICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogL1tcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTAtXFx1MDhCMlxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OFxcdTBDNTlcXHUwQzYwXFx1MEM2MVxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ2MFxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQUQtXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN1xcdTE3RENcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlDMS1cXHUxOUM3XFx1MUEwMC1cXHUxQTE2XFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YxXFx1MUNGNVxcdTFDRjZcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE4LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE2MC1cXHUyMTg4XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlCLVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGQ0NcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFRlxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTdBRFxcdUE3QjBcXHVBN0IxXFx1QTdGNy1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBOUUwLVxcdUE5RTRcXHVBOUU2LVxcdUE5RUZcXHVBOUZBLVxcdUE5RkVcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3RS1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQjMwLVxcdUFCNUFcXHVBQjVDLVxcdUFCNUZcXHVBQjY0XFx1QUI2NVxcdUFCQzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ118XFx1RDgwMFtcXHVEQzAwLVxcdURDMEJcXHVEQzBELVxcdURDMjZcXHVEQzI4LVxcdURDM0FcXHVEQzNDXFx1REMzRFxcdURDM0YtXFx1REM0RFxcdURDNTAtXFx1REM1RFxcdURDODAtXFx1RENGQVxcdURENDAtXFx1REQ3NFxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURGMDAtXFx1REYxRlxcdURGMzAtXFx1REY0QVxcdURGNTAtXFx1REY3NVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRlxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdUREMDAtXFx1REQxNVxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkVcXHVEREJGXFx1REUwMFxcdURFMTAtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzM1xcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNFxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhdfFxcdUQ4MDRbXFx1REMwMy1cXHVEQzM3XFx1REM4My1cXHVEQ0FGXFx1RENEMC1cXHVEQ0U4XFx1REQwMy1cXHVERDI2XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMkJcXHVERUIwLVxcdURFREVcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzRFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXXxcXHVEODA2W1xcdURDQTAtXFx1RENERlxcdURDRkZcXHVERUMwLVxcdURFRjhdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk4XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RV18W1xcdUQ4MENcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNdW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MUFbXFx1REMwMC1cXHVERTM4XFx1REU0MC1cXHVERTVFXFx1REVEMC1cXHVERUVEXFx1REYwMC1cXHVERjJGXFx1REY0MC1cXHVERjQzXFx1REY2My1cXHVERjc3XFx1REY3RC1cXHVERjhGXXxcXHVEODFCW1xcdURGMDAtXFx1REY0NFxcdURGNTBcXHVERjkzLVxcdURGOUZdfFxcdUQ4MkNbXFx1REMwMFxcdURDMDFdfFxcdUQ4MkZbXFx1REMwMC1cXHVEQzZBXFx1REM3MC1cXHVEQzdDXFx1REM4MC1cXHVEQzg4XFx1REM5MC1cXHVEQzk5XXxcXHVEODM1W1xcdURDMDAtXFx1REM1NFxcdURDNTYtXFx1REM5Q1xcdURDOUVcXHVEQzlGXFx1RENBMlxcdURDQTVcXHVEQ0E2XFx1RENBOS1cXHVEQ0FDXFx1RENBRS1cXHVEQ0I5XFx1RENCQlxcdURDQkQtXFx1RENDM1xcdURDQzUtXFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMUUtXFx1REQzOVxcdUREM0ItXFx1REQzRVxcdURENDAtXFx1REQ0NFxcdURENDZcXHVERDRBLVxcdURENTBcXHVERDUyLVxcdURFQTVcXHVERUE4LVxcdURFQzBcXHVERUMyLVxcdURFREFcXHVERURDLVxcdURFRkFcXHVERUZDLVxcdURGMTRcXHVERjE2LVxcdURGMzRcXHVERjM2LVxcdURGNEVcXHVERjUwLVxcdURGNkVcXHVERjcwLVxcdURGODhcXHVERjhBLVxcdURGQThcXHVERkFBLVxcdURGQzJcXHVERkM0LVxcdURGQ0JdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XXxcXHVEODNCW1xcdURFMDAtXFx1REUwM1xcdURFMDUtXFx1REUxRlxcdURFMjFcXHVERTIyXFx1REUyNFxcdURFMjdcXHVERTI5LVxcdURFMzJcXHVERTM0LVxcdURFMzdcXHVERTM5XFx1REUzQlxcdURFNDJcXHVERTQ3XFx1REU0OVxcdURFNEJcXHVERTRELVxcdURFNEZcXHVERTUxXFx1REU1MlxcdURFNTRcXHVERTU3XFx1REU1OVxcdURFNUJcXHVERTVEXFx1REU1RlxcdURFNjFcXHVERTYyXFx1REU2NFxcdURFNjctXFx1REU2QVxcdURFNkMtXFx1REU3MlxcdURFNzQtXFx1REU3N1xcdURFNzktXFx1REU3Q1xcdURFN0VcXHVERTgwLVxcdURFODlcXHVERThCLVxcdURFOUJcXHVERUExLVxcdURFQTNcXHVERUE1LVxcdURFQTlcXHVERUFCLVxcdURFQkJdfFxcdUQ4NjlbXFx1REMwMC1cXHVERUQ2XFx1REYwMC1cXHVERkZGXXxcXHVEODZEW1xcdURDMDAtXFx1REYzNFxcdURGNDAtXFx1REZGRl18XFx1RDg2RVtcXHVEQzAwLVxcdURDMURdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXS8sXG4gICAgICAgIC8vIEVDTUFTY3JpcHQgNi9Vbmljb2RlIHY3LjAuMCBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OlxuICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OiAvW1xceEFBXFx4QjVcXHhCN1xceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODYtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDgzLVxcdTA0ODdcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzVcXHUwNUM3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYxMC1cXHUwNjFBXFx1MDYyMC1cXHUwNjY5XFx1MDY2RS1cXHUwNkQzXFx1MDZENS1cXHUwNkRDXFx1MDZERi1cXHUwNkU4XFx1MDZFQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTAtXFx1MDc0QVxcdTA3NEQtXFx1MDdCMVxcdTA3QzAtXFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MkRcXHUwODQwLVxcdTA4NUJcXHUwOEEwLVxcdTA4QjJcXHUwOEU0LVxcdTA5NjNcXHUwOTY2LVxcdTA5NkZcXHUwOTcxLVxcdTA5ODNcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJDLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRVxcdTA5RDdcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFM1xcdTA5RTYtXFx1MDlGMVxcdTBBMDEtXFx1MEEwM1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEEzQ1xcdTBBM0UtXFx1MEE0MlxcdTBBNDdcXHUwQTQ4XFx1MEE0Qi1cXHUwQTREXFx1MEE1MVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTY2LVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkMtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRDBcXHUwQUUwLVxcdTBBRTNcXHUwQUU2LVxcdTBBRUZcXHUwQjAxLVxcdTBCMDNcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzQy1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYzXFx1MEI2Ni1cXHUwQjZGXFx1MEI3MVxcdTBCODJcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCQkUtXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDRFxcdTBCRDBcXHUwQkQ3XFx1MEJFNi1cXHUwQkVGXFx1MEMwMC1cXHUwQzAzXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRC1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzU4XFx1MEM1OVxcdTBDNjAtXFx1MEM2M1xcdTBDNjYtXFx1MEM2RlxcdTBDODEtXFx1MEM4M1xcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkMtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDRTAtXFx1MENFM1xcdTBDRTYtXFx1MENFRlxcdTBDRjFcXHUwQ0YyXFx1MEQwMS1cXHUwRDAzXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRC1cXHUwRDQ0XFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDRFXFx1MEQ1N1xcdTBENjAtXFx1MEQ2M1xcdTBENjYtXFx1MEQ2RlxcdTBEN0EtXFx1MEQ3RlxcdTBEODJcXHUwRDgzXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBEQ0FcXHUwRENGLVxcdTBERDRcXHUwREQ2XFx1MEREOC1cXHUwRERGXFx1MERFNi1cXHUwREVGXFx1MERGMlxcdTBERjNcXHUwRTAxLVxcdTBFM0FcXHUwRTQwLVxcdTBFNEVcXHUwRTUwLVxcdTBFNTlcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQUQtXFx1MEVCOVxcdTBFQkItXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRUM4LVxcdTBFQ0RcXHUwRUQwLVxcdTBFRDlcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEYxOFxcdTBGMTlcXHUwRjIwLVxcdTBGMjlcXHUwRjM1XFx1MEYzN1xcdTBGMzlcXHUwRjNFLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjcxLVxcdTBGODRcXHUwRjg2LVxcdTBGOTdcXHUwRjk5LVxcdTBGQkNcXHUwRkM2XFx1MTAwMC1cXHUxMDQ5XFx1MTA1MC1cXHUxMDlEXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzNUQtXFx1MTM1RlxcdTEzNjktXFx1MTM3MVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxNFxcdTE3MjAtXFx1MTczNFxcdTE3NDAtXFx1MTc1M1xcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3NzJcXHUxNzczXFx1MTc4MC1cXHUxN0QzXFx1MTdEN1xcdTE3RENcXHUxN0REXFx1MTdFMC1cXHUxN0U5XFx1MTgwQi1cXHUxODBEXFx1MTgxMC1cXHUxODE5XFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MTk0Ni1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlCMC1cXHUxOUM5XFx1MTlEMC1cXHUxOURBXFx1MUEwMC1cXHUxQTFCXFx1MUEyMC1cXHUxQTVFXFx1MUE2MC1cXHUxQTdDXFx1MUE3Ri1cXHUxQTg5XFx1MUE5MC1cXHUxQTk5XFx1MUFBN1xcdTFBQjAtXFx1MUFCRFxcdTFCMDAtXFx1MUI0QlxcdTFCNTAtXFx1MUI1OVxcdTFCNkItXFx1MUI3M1xcdTFCODAtXFx1MUJGM1xcdTFDMDAtXFx1MUMzN1xcdTFDNDAtXFx1MUM0OVxcdTFDNEQtXFx1MUM3RFxcdTFDRDAtXFx1MUNEMlxcdTFDRDQtXFx1MUNGNlxcdTFDRjhcXHUxQ0Y5XFx1MUQwMC1cXHUxREY1XFx1MURGQy1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwMENcXHUyMDBEXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMEQwLVxcdTIwRENcXHUyMEUxXFx1MjBFNS1cXHUyMEYwXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOC1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEN0YtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJERTAtXFx1MkRGRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyRlxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOTktXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYyQlxcdUE2NDAtXFx1QTY2RlxcdUE2NzQtXFx1QTY3RFxcdUE2N0YtXFx1QTY5RFxcdUE2OUYtXFx1QTZGMVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTdBRFxcdUE3QjBcXHVBN0IxXFx1QTdGNy1cXHVBODI3XFx1QTg0MC1cXHVBODczXFx1QTg4MC1cXHVBOEM0XFx1QThEMC1cXHVBOEQ5XFx1QThFMC1cXHVBOEY3XFx1QThGQlxcdUE5MDAtXFx1QTkyRFxcdUE5MzAtXFx1QTk1M1xcdUE5NjAtXFx1QTk3Q1xcdUE5ODAtXFx1QTlDMFxcdUE5Q0YtXFx1QTlEOVxcdUE5RTAtXFx1QTlGRVxcdUFBMDAtXFx1QUEzNlxcdUFBNDAtXFx1QUE0RFxcdUFBNTAtXFx1QUE1OVxcdUFBNjAtXFx1QUE3NlxcdUFBN0EtXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFRlxcdUFBRjItXFx1QUFGNlxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI1RlxcdUFCNjRcXHVBQjY1XFx1QUJDMC1cXHVBQkVBXFx1QUJFQ1xcdUFCRURcXHVBQkYwLVxcdUFCRjlcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFELVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyRFxcdUZFMzNcXHVGRTM0XFx1RkU0RC1cXHVGRTRGXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYxMC1cXHVGRjE5XFx1RkYyMS1cXHVGRjNBXFx1RkYzRlxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ118XFx1RDgwMFtcXHVEQzAwLVxcdURDMEJcXHVEQzBELVxcdURDMjZcXHVEQzI4LVxcdURDM0FcXHVEQzNDXFx1REMzRFxcdURDM0YtXFx1REM0RFxcdURDNTAtXFx1REM1RFxcdURDODAtXFx1RENGQVxcdURENDAtXFx1REQ3NFxcdURERkRcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERUUwXFx1REYwMC1cXHVERjFGXFx1REYzMC1cXHVERjRBXFx1REY1MC1cXHVERjdBXFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXFx1REZEMS1cXHVERkQ1XXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQTAtXFx1RENBOVxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwLVxcdURFMDNcXHVERTA1XFx1REUwNlxcdURFMEMtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzM1xcdURFMzgtXFx1REUzQVxcdURFM0ZcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTZcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XXxcXHVEODA0W1xcdURDMDAtXFx1REM0NlxcdURDNjYtXFx1REM2RlxcdURDN0YtXFx1RENCQVxcdURDRDAtXFx1RENFOFxcdURDRjAtXFx1RENGOVxcdUREMDAtXFx1REQzNFxcdUREMzYtXFx1REQzRlxcdURENTAtXFx1REQ3M1xcdURENzZcXHVERDgwLVxcdUREQzRcXHVEREQwLVxcdUREREFcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMzdcXHVERUIwLVxcdURFRUFcXHVERUYwLVxcdURFRjlcXHVERjAxLVxcdURGMDNcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzQy1cXHVERjQ0XFx1REY0N1xcdURGNDhcXHVERjRCLVxcdURGNERcXHVERjU3XFx1REY1RC1cXHVERjYzXFx1REY2Ni1cXHVERjZDXFx1REY3MC1cXHVERjc0XXxcXHVEODA1W1xcdURDODAtXFx1RENDNVxcdURDQzdcXHVEQ0QwLVxcdURDRDlcXHVERDgwLVxcdUREQjVcXHVEREI4LVxcdUREQzBcXHVERTAwLVxcdURFNDBcXHVERTQ0XFx1REU1MC1cXHVERTU5XFx1REU4MC1cXHVERUI3XFx1REVDMC1cXHVERUM5XXxcXHVEODA2W1xcdURDQTAtXFx1RENFOVxcdURDRkZcXHVERUMwLVxcdURFRjhdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk4XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RV18W1xcdUQ4MENcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNdW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MUFbXFx1REMwMC1cXHVERTM4XFx1REU0MC1cXHVERTVFXFx1REU2MC1cXHVERTY5XFx1REVEMC1cXHVERUVEXFx1REVGMC1cXHVERUY0XFx1REYwMC1cXHVERjM2XFx1REY0MC1cXHVERjQzXFx1REY1MC1cXHVERjU5XFx1REY2My1cXHVERjc3XFx1REY3RC1cXHVERjhGXXxcXHVEODFCW1xcdURGMDAtXFx1REY0NFxcdURGNTAtXFx1REY3RVxcdURGOEYtXFx1REY5Rl18XFx1RDgyQ1tcXHVEQzAwXFx1REMwMV18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTlcXHVEQzlEXFx1REM5RV18XFx1RDgzNFtcXHVERDY1LVxcdURENjlcXHVERDZELVxcdURENzJcXHVERDdCLVxcdUREODJcXHVERDg1LVxcdUREOEJcXHVEREFBLVxcdUREQURcXHVERTQyLVxcdURFNDRdfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQlxcdURGQ0UtXFx1REZGRl18XFx1RDgzQVtcXHVEQzAwLVxcdURDQzRcXHVEQ0QwLVxcdURDRDZdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRF18XFx1RDg3RVtcXHVEQzAwLVxcdURFMURdfFxcdURCNDBbXFx1REQwMC1cXHVEREVGXS9cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQoY2gpIHtcbiAgICAgICAgcmV0dXJuIDB4MzAgPD0gY2ggJiYgY2ggPD0gMHgzOTsgIC8vIDAuLjlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7XG4gICAgICAgIHJldHVybiAweDMwIDw9IGNoICYmIGNoIDw9IDB4MzkgfHwgIC8vIDAuLjlcbiAgICAgICAgICAgIDB4NjEgPD0gY2ggJiYgY2ggPD0gMHg2NiB8fCAgICAgLy8gYS4uZlxuICAgICAgICAgICAgMHg0MSA8PSBjaCAmJiBjaCA8PSAweDQ2OyAgICAgICAvLyBBLi5GXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPY3RhbERpZ2l0KGNoKSB7XG4gICAgICAgIHJldHVybiBjaCA+PSAweDMwICYmIGNoIDw9IDB4Mzc7ICAvLyAwLi43XG4gICAgfVxuXG4gICAgLy8gNy4yIFdoaXRlIFNwYWNlXG5cbiAgICBOT05fQVNDSUlfV0hJVEVTUEFDRVMgPSBbXG4gICAgICAgIDB4MTY4MCwgMHgxODBFLFxuICAgICAgICAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSxcbiAgICAgICAgMHgyMDJGLCAweDIwNUYsXG4gICAgICAgIDB4MzAwMCxcbiAgICAgICAgMHhGRUZGXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkge1xuICAgICAgICByZXR1cm4gY2ggPT09IDB4MjAgfHwgY2ggPT09IDB4MDkgfHwgY2ggPT09IDB4MEIgfHwgY2ggPT09IDB4MEMgfHwgY2ggPT09IDB4QTAgfHxcbiAgICAgICAgICAgIGNoID49IDB4MTY4MCAmJiBOT05fQVNDSUlfV0hJVEVTUEFDRVMuaW5kZXhPZihjaCkgPj0gMDtcbiAgICB9XG5cbiAgICAvLyA3LjMgTGluZSBUZXJtaW5hdG9yc1xuXG4gICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihjaCkge1xuICAgICAgICByZXR1cm4gY2ggPT09IDB4MEEgfHwgY2ggPT09IDB4MEQgfHwgY2ggPT09IDB4MjAyOCB8fCBjaCA9PT0gMHgyMDI5O1xuICAgIH1cblxuICAgIC8vIDcuNiBJZGVudGlmaWVyIE5hbWVzIGFuZCBJZGVudGlmaWVyc1xuXG4gICAgZnVuY3Rpb24gZnJvbUNvZGVQb2ludChjcCkge1xuICAgICAgICBpZiAoY3AgPD0gMHhGRkZGKSB7IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKTsgfVxuICAgICAgICB2YXIgY3UxID0gU3RyaW5nLmZyb21DaGFyQ29kZShNYXRoLmZsb29yKChjcCAtIDB4MTAwMDApIC8gMHg0MDApICsgMHhEODAwKTtcbiAgICAgICAgdmFyIGN1MiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjcCAtIDB4MTAwMDApICUgMHg0MDApICsgMHhEQzAwKTtcbiAgICAgICAgcmV0dXJuIGN1MSArIGN1MjtcbiAgICB9XG5cbiAgICBJREVOVElGSUVSX1NUQVJUID0gbmV3IEFycmF5KDB4ODApO1xuICAgIGZvcihjaCA9IDA7IGNoIDwgMHg4MDsgKytjaCkge1xuICAgICAgICBJREVOVElGSUVSX1NUQVJUW2NoXSA9XG4gICAgICAgICAgICBjaCA+PSAweDYxICYmIGNoIDw9IDB4N0EgfHwgIC8vIGEuLnpcbiAgICAgICAgICAgIGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSB8fCAgLy8gQS4uWlxuICAgICAgICAgICAgY2ggPT09IDB4MjQgfHwgY2ggPT09IDB4NUY7ICAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKVxuICAgIH1cblxuICAgIElERU5USUZJRVJfUEFSVCA9IG5ldyBBcnJheSgweDgwKTtcbiAgICBmb3IoY2ggPSAwOyBjaCA8IDB4ODA7ICsrY2gpIHtcbiAgICAgICAgSURFTlRJRklFUl9QQVJUW2NoXSA9XG4gICAgICAgICAgICBjaCA+PSAweDYxICYmIGNoIDw9IDB4N0EgfHwgIC8vIGEuLnpcbiAgICAgICAgICAgIGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSB8fCAgLy8gQS4uWlxuICAgICAgICAgICAgY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5IHx8ICAvLyAwLi45XG4gICAgICAgICAgICBjaCA9PT0gMHgyNCB8fCBjaCA9PT0gMHg1RjsgIC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnRFUzUoY2gpIHtcbiAgICAgICAgcmV0dXJuIGNoIDwgMHg4MCA/IElERU5USUZJRVJfU1RBUlRbY2hdIDogRVM1UmVnZXguTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdChmcm9tQ29kZVBvaW50KGNoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFydEVTNShjaCkge1xuICAgICAgICByZXR1cm4gY2ggPCAweDgwID8gSURFTlRJRklFUl9QQVJUW2NoXSA6IEVTNVJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChmcm9tQ29kZVBvaW50KGNoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnRFUzYoY2gpIHtcbiAgICAgICAgcmV0dXJuIGNoIDwgMHg4MCA/IElERU5USUZJRVJfU1RBUlRbY2hdIDogRVM2UmVnZXguTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdChmcm9tQ29kZVBvaW50KGNoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFydEVTNihjaCkge1xuICAgICAgICByZXR1cm4gY2ggPCAweDgwID8gSURFTlRJRklFUl9QQVJUW2NoXSA6IEVTNlJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChmcm9tQ29kZVBvaW50KGNoKSk7XG4gICAgfVxuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIGlzRGVjaW1hbERpZ2l0OiBpc0RlY2ltYWxEaWdpdCxcbiAgICAgICAgaXNIZXhEaWdpdDogaXNIZXhEaWdpdCxcbiAgICAgICAgaXNPY3RhbERpZ2l0OiBpc09jdGFsRGlnaXQsXG4gICAgICAgIGlzV2hpdGVTcGFjZTogaXNXaGl0ZVNwYWNlLFxuICAgICAgICBpc0xpbmVUZXJtaW5hdG9yOiBpc0xpbmVUZXJtaW5hdG9yLFxuICAgICAgICBpc0lkZW50aWZpZXJTdGFydEVTNTogaXNJZGVudGlmaWVyU3RhcnRFUzUsXG4gICAgICAgIGlzSWRlbnRpZmllclBhcnRFUzU6IGlzSWRlbnRpZmllclBhcnRFUzUsXG4gICAgICAgIGlzSWRlbnRpZmllclN0YXJ0RVM2OiBpc0lkZW50aWZpZXJTdGFydEVTNixcbiAgICAgICAgaXNJZGVudGlmaWVyUGFydEVTNjogaXNJZGVudGlmaWVyUGFydEVTNlxuICAgIH07XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgY29kZSA9IHJlcXVpcmUoJy4vY29kZScpO1xuXG4gICAgZnVuY3Rpb24gaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkRVM2KGlkKSB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgY2FzZSAnaW1wbGVtZW50cyc6XG4gICAgICAgIGNhc2UgJ2ludGVyZmFjZSc6XG4gICAgICAgIGNhc2UgJ3BhY2thZ2UnOlxuICAgICAgICBjYXNlICdwcml2YXRlJzpcbiAgICAgICAgY2FzZSAncHJvdGVjdGVkJzpcbiAgICAgICAgY2FzZSAncHVibGljJzpcbiAgICAgICAgY2FzZSAnc3RhdGljJzpcbiAgICAgICAgY2FzZSAnbGV0JzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNLZXl3b3JkRVM1KGlkLCBzdHJpY3QpIHtcbiAgICAgICAgLy8geWllbGQgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGtleXdvcmQgdW5kZXIgbm9uLXN0cmljdCBtb2RlLlxuICAgICAgICBpZiAoIXN0cmljdCAmJiBpZCA9PT0gJ3lpZWxkJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0tleXdvcmRFUzYoaWQsIHN0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNLZXl3b3JkRVM2KGlkLCBzdHJpY3QpIHtcbiAgICAgICAgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmRFUzYoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoaWQubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpZicpIHx8IChpZCA9PT0gJ2luJykgfHwgKGlkID09PSAnZG8nKTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3ZhcicpIHx8IChpZCA9PT0gJ2ZvcicpIHx8IChpZCA9PT0gJ25ldycpIHx8IChpZCA9PT0gJ3RyeScpO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAndGhpcycpIHx8IChpZCA9PT0gJ2Vsc2UnKSB8fCAoaWQgPT09ICdjYXNlJykgfHxcbiAgICAgICAgICAgICAgICAoaWQgPT09ICd2b2lkJykgfHwgKGlkID09PSAnd2l0aCcpIHx8IChpZCA9PT0gJ2VudW0nKTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3doaWxlJykgfHwgKGlkID09PSAnYnJlYWsnKSB8fCAoaWQgPT09ICdjYXRjaCcpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAndGhyb3cnKSB8fCAoaWQgPT09ICdjb25zdCcpIHx8IChpZCA9PT0gJ3lpZWxkJykgfHxcbiAgICAgICAgICAgICAgICAoaWQgPT09ICdjbGFzcycpIHx8IChpZCA9PT0gJ3N1cGVyJyk7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdyZXR1cm4nKSB8fCAoaWQgPT09ICd0eXBlb2YnKSB8fCAoaWQgPT09ICdkZWxldGUnKSB8fFxuICAgICAgICAgICAgICAgIChpZCA9PT0gJ3N3aXRjaCcpIHx8IChpZCA9PT0gJ2V4cG9ydCcpIHx8IChpZCA9PT0gJ2ltcG9ydCcpO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZGVmYXVsdCcpIHx8IChpZCA9PT0gJ2ZpbmFsbHknKSB8fCAoaWQgPT09ICdleHRlbmRzJyk7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdmdW5jdGlvbicpIHx8IChpZCA9PT0gJ2NvbnRpbnVlJykgfHwgKGlkID09PSAnZGVidWdnZXInKTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpbnN0YW5jZW9mJyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Jlc2VydmVkV29yZEVTNShpZCwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBpZCA9PT0gJ251bGwnIHx8IGlkID09PSAndHJ1ZScgfHwgaWQgPT09ICdmYWxzZScgfHwgaXNLZXl3b3JkRVM1KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVzZXJ2ZWRXb3JkRVM2KGlkLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGlkID09PSAnbnVsbCcgfHwgaWQgPT09ICd0cnVlJyB8fCBpZCA9PT0gJ2ZhbHNlJyB8fCBpc0tleXdvcmRFUzYoaWQsIHN0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSZXN0cmljdGVkV29yZChpZCkge1xuICAgICAgICByZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2FyZ3VtZW50cyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyTmFtZUVTNShpZCkge1xuICAgICAgICB2YXIgaSwgaXosIGNoO1xuXG4gICAgICAgIGlmIChpZC5sZW5ndGggPT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICAgICAgY2ggPSBpZC5jaGFyQ29kZUF0KDApO1xuICAgICAgICBpZiAoIWNvZGUuaXNJZGVudGlmaWVyU3RhcnRFUzUoY2gpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAxLCBpeiA9IGlkLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIGNoID0gaWQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGlmICghY29kZS5pc0lkZW50aWZpZXJQYXJ0RVM1KGNoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWNvZGVVdGYxNihsZWFkLCB0cmFpbCkge1xuICAgICAgICByZXR1cm4gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lRVM2KGlkKSB7XG4gICAgICAgIHZhciBpLCBpeiwgY2gsIGxvd0NoLCBjaGVjaztcblxuICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgICAgIGNoZWNrID0gY29kZS5pc0lkZW50aWZpZXJTdGFydEVTNjtcbiAgICAgICAgZm9yIChpID0gMCwgaXogPSBpZC5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICBjaCA9IGlkLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBpZiAoMHhEODAwIDw9IGNoICYmIGNoIDw9IDB4REJGRikge1xuICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICAgICBpZiAoaSA+PSBpeikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgICAgICAgICBsb3dDaCA9IGlkLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKCEoMHhEQzAwIDw9IGxvd0NoICYmIGxvd0NoIDw9IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaCA9IGRlY29kZVV0ZjE2KGNoLCBsb3dDaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNoZWNrKGNoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoZWNrID0gY29kZS5pc0lkZW50aWZpZXJQYXJ0RVM2O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllckVTNShpZCwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBpc0lkZW50aWZpZXJOYW1lRVM1KGlkKSAmJiAhaXNSZXNlcnZlZFdvcmRFUzUoaWQsIHN0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyRVM2KGlkLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGlzSWRlbnRpZmllck5hbWVFUzYoaWQpICYmICFpc1Jlc2VydmVkV29yZEVTNihpZCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgaXNLZXl3b3JkRVM1OiBpc0tleXdvcmRFUzUsXG4gICAgICAgIGlzS2V5d29yZEVTNjogaXNLZXl3b3JkRVM2LFxuICAgICAgICBpc1Jlc2VydmVkV29yZEVTNTogaXNSZXNlcnZlZFdvcmRFUzUsXG4gICAgICAgIGlzUmVzZXJ2ZWRXb3JkRVM2OiBpc1Jlc2VydmVkV29yZEVTNixcbiAgICAgICAgaXNSZXN0cmljdGVkV29yZDogaXNSZXN0cmljdGVkV29yZCxcbiAgICAgICAgaXNJZGVudGlmaWVyTmFtZUVTNTogaXNJZGVudGlmaWVyTmFtZUVTNSxcbiAgICAgICAgaXNJZGVudGlmaWVyTmFtZUVTNjogaXNJZGVudGlmaWVyTmFtZUVTNixcbiAgICAgICAgaXNJZGVudGlmaWVyRVM1OiBpc0lkZW50aWZpZXJFUzUsXG4gICAgICAgIGlzSWRlbnRpZmllckVTNjogaXNJZGVudGlmaWVyRVM2XG4gICAgfTtcbn0oKSk7XG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIiwiLypcbiAgQ29weXJpZ2h0IChDKSAyMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZXhwb3J0cy5hc3QgPSByZXF1aXJlKCcuL2FzdCcpO1xuICAgIGV4cG9ydHMuY29kZSA9IHJlcXVpcmUoJy4vY29kZScpO1xuICAgIGV4cG9ydHMua2V5d29yZCA9IHJlcXVpcmUoJy4va2V5d29yZCcpO1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbkV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHMuZXJyb3IgfHxcbiAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7XG4gICAgICBlciA9IGFyZ3VtZW50c1sxXTtcbiAgICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LiAoJyArIGVyICsgJyknKTtcbiAgICAgICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgLy8gZmFzdCBjYXNlc1xuICAgICAgY2FzZSAxOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gc2xvd2VyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoaGFuZGxlcikpIHtcbiAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICBsaXN0ZW5lcnMgPSBoYW5kbGVyLnNsaWNlKCk7XG4gICAgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKVxuICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/XG4gICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICBlbHNlIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2VcbiAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07XG5cbiAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3RlbmVycykpIHtcbiAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgICB9XG5cbiAgICBpZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkge1xuICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgdmFyIGZpcmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZygpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHRoaXMub24odHlwZSwgZyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBlbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZFxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICBwb3NpdGlvbiA9IC0xO1xuXG4gIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fFxuICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcblxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykge1xuICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8XG4gICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIga2V5LCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgZWxzZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykge1xuICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICB9IGVsc2UgaWYgKGxpc3RlbmVycykge1xuICAgIC8vIExJRk8gb3JkZXJcbiAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aClcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7XG4gIH1cbiAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IFtdO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07XG4gIGVsc2VcbiAgICByZXQgPSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgaWYgKHRoaXMuX2V2ZW50cykge1xuICAgIHZhciBldmxpc3RlbmVyID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZXZsaXN0ZW5lcikpXG4gICAgICByZXR1cm4gMTtcbiAgICBlbHNlIGlmIChldmxpc3RlbmVyKVxuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG4iLCJ2YXIgbWQ1ID0gcmVxdWlyZSgnY3JlYXRlLWhhc2gvbWQ1Jylcbm1vZHVsZS5leHBvcnRzID0gRVZQX0J5dGVzVG9LZXlcbmZ1bmN0aW9uIEVWUF9CeXRlc1RvS2V5IChwYXNzd29yZCwgc2FsdCwga2V5TGVuLCBpdkxlbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihwYXNzd29yZCkpIHtcbiAgICBwYXNzd29yZCA9IG5ldyBCdWZmZXIocGFzc3dvcmQsICdiaW5hcnknKVxuICB9XG4gIGlmIChzYWx0ICYmICFCdWZmZXIuaXNCdWZmZXIoc2FsdCkpIHtcbiAgICBzYWx0ID0gbmV3IEJ1ZmZlcihzYWx0LCAnYmluYXJ5JylcbiAgfVxuICBrZXlMZW4gPSBrZXlMZW4gLyA4XG4gIGl2TGVuID0gaXZMZW4gfHwgMFxuICB2YXIga2kgPSAwXG4gIHZhciBpaSA9IDBcbiAgdmFyIGtleSA9IG5ldyBCdWZmZXIoa2V5TGVuKVxuICB2YXIgaXYgPSBuZXcgQnVmZmVyKGl2TGVuKVxuICB2YXIgYWRkbWQgPSAwXG4gIHZhciBtZF9idWZcbiAgdmFyIGlcbiAgdmFyIGJ1ZnMgPSBbXVxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChhZGRtZCsrID4gMCkge1xuICAgICAgYnVmcy5wdXNoKG1kX2J1ZilcbiAgICB9XG4gICAgYnVmcy5wdXNoKHBhc3N3b3JkKVxuICAgIGlmIChzYWx0KSB7XG4gICAgICBidWZzLnB1c2goc2FsdClcbiAgICB9XG4gICAgbWRfYnVmID0gbWQ1KEJ1ZmZlci5jb25jYXQoYnVmcykpXG4gICAgYnVmcyA9IFtdXG4gICAgaSA9IDBcbiAgICBpZiAoa2V5TGVuID4gMCkge1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKGtleUxlbiA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IG1kX2J1Zi5sZW5ndGgpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGtleVtraSsrXSA9IG1kX2J1ZltpXVxuICAgICAgICBrZXlMZW4tLVxuICAgICAgICBpKytcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGl2TGVuID4gMCAmJiBpICE9PSBtZF9idWYubGVuZ3RoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoaXZMZW4gPT09IDApIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmIChpID09PSBtZF9idWYubGVuZ3RoKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpdltpaSsrXSA9IG1kX2J1ZltpXVxuICAgICAgICBpdkxlbi0tXG4gICAgICAgIGkrK1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoa2V5TGVuID09PSAwICYmIGl2TGVuID09PSAwKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuICBmb3IgKGkgPSAwOyBpIDwgbWRfYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgbWRfYnVmW2ldID0gMFxuICB9XG4gIHJldHVybiB7XG4gICAga2V5OiBrZXksXG4gICAgaXY6IGl2XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJyKSB7XG5cdGlmICh0eXBlb2YgQXJyYXkuaXNBcnJheSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KGFycik7XG5cdH1cblxuXHRyZXR1cm4gdG9TdHIuY2FsbChhcnIpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxudmFyIGlzUGxhaW5PYmplY3QgPSBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuXHRpZiAoIW9iaiB8fCB0b1N0ci5jYWxsKG9iaikgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0dmFyIGhhc093bkNvbnN0cnVjdG9yID0gaGFzT3duLmNhbGwob2JqLCAnY29uc3RydWN0b3InKTtcblx0dmFyIGhhc0lzUHJvdG90eXBlT2YgPSBvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSAmJiBoYXNPd24uY2FsbChvYmouY29uc3RydWN0b3IucHJvdG90eXBlLCAnaXNQcm90b3R5cGVPZicpO1xuXHQvLyBOb3Qgb3duIGNvbnN0cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0XG5cdGlmIChvYmouY29uc3RydWN0b3IgJiYgIWhhc093bkNvbnN0cnVjdG9yICYmICFoYXNJc1Byb3RvdHlwZU9mKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gT3duIHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwgc28gdG8gc3BlZWQgdXAsXG5cdC8vIGlmIGxhc3Qgb25lIGlzIG93biwgdGhlbiBhbGwgcHJvcGVydGllcyBhcmUgb3duLlxuXHR2YXIga2V5O1xuXHRmb3IgKGtleSBpbiBvYmopIHsgLyoqLyB9XG5cblx0cmV0dXJuIHR5cGVvZiBrZXkgPT09ICd1bmRlZmluZWQnIHx8IGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXh0ZW5kKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmU7XG5cdHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMF07XG5cdHZhciBpID0gMTtcblx0dmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdHZhciBkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307XG5cdFx0Ly8gc2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdGkgPSAyO1xuXHR9XG5cdGlmICh0YXJnZXQgPT0gbnVsbCB8fCAodHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdGZvciAoOyBpIDwgbGVuZ3RoOyArK2kpIHtcblx0XHRvcHRpb25zID0gYXJndW1lbnRzW2ldO1xuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAob3B0aW9ucyAhPSBudWxsKSB7XG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKG5hbWUgaW4gb3B0aW9ucykge1xuXHRcdFx0XHRzcmMgPSB0YXJnZXRbbmFtZV07XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zW25hbWVdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKHRhcmdldCAhPT0gY29weSkge1xuXHRcdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRcdGlmIChkZWVwICYmIGNvcHkgJiYgKGlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0gaXNBcnJheShjb3B5KSkpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29weUlzQXJyYXkpIHtcblx0XHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgaXNBcnJheShzcmMpID8gc3JjIDogW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBpc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0XHR0YXJnZXRbbmFtZV0gPSBleHRlbmQoZGVlcCwgY2xvbmUsIGNvcHkpO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGNvcHkgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdFx0XHR0YXJnZXRbbmFtZV0gPSBjb3B5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuIiwiLypcbiAqIGV4dHNwcmludGYuanM6IGV4dGVuZGVkIFBPU0lYLXN0eWxlIHNwcmludGZcbiAqL1xuXG52YXIgbW9kX2Fzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xudmFyIG1vZF91dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG4vKlxuICogUHVibGljIGludGVyZmFjZVxuICovXG5leHBvcnRzLnNwcmludGYgPSBqc1NwcmludGY7XG5cbi8qXG4gKiBTdHJpcHBlZCBkb3duIHZlcnNpb24gb2Ygc1tuXXByaW50ZigzYykuICBXZSBtYWtlIGEgYmVzdCBlZmZvcnQgdG8gdGhyb3cgYW5cbiAqIGV4Y2VwdGlvbiB3aGVuIGdpdmVuIGEgZm9ybWF0IHN0cmluZyB3ZSBkb24ndCB1bmRlcnN0YW5kLCByYXRoZXIgdGhhblxuICogaWdub3JpbmcgaXQsIHNvIHRoYXQgd2Ugd29uJ3QgYnJlYWsgZXhpc3RpbmcgcHJvZ3JhbXMgaWYvd2hlbiB3ZSBnbyBpbXBsZW1lbnRcbiAqIHRoZSByZXN0IG9mIHRoaXMuXG4gKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBjdXJyZW50bHkgc3VwcG9ydHMgc3BlY2lmeWluZ1xuICpcdC0gZmllbGQgYWxpZ25tZW50ICgnLScgZmxhZyksXG4gKiBcdC0gemVyby1wYWQgKCcwJyBmbGFnKVxuICpcdC0gYWx3YXlzIHNob3cgbnVtZXJpYyBzaWduICgnKycgZmxhZyksXG4gKlx0LSBmaWVsZCB3aWR0aFxuICpcdC0gY29udmVyc2lvbnMgZm9yIHN0cmluZ3MsIGRlY2ltYWwgaW50ZWdlcnMsIGFuZCBmbG9hdHMgKG51bWJlcnMpLlxuICpcdC0gYXJndW1lbnQgc2l6ZSBzcGVjaWZpZXJzLiAgVGhlc2UgYXJlIGFsbCBhY2NlcHRlZCBidXQgaWdub3JlZCwgc2luY2VcbiAqXHQgIEphdmFzY3JpcHQgaGFzIG5vIG5vdGlvbiBvZiB0aGUgcGh5c2ljYWwgc2l6ZSBvZiBhbiBhcmd1bWVudC5cbiAqXG4gKiBFdmVyeXRoaW5nIGVsc2UgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLCBtb3N0IG5vdGFibHkgcHJlY2lzaW9uLCB1bnNpZ25lZFxuICogbnVtYmVycywgbm9uLWRlY2ltYWwgbnVtYmVycywgYW5kIGNoYXJhY3RlcnMuXG4gKi9cbmZ1bmN0aW9uIGpzU3ByaW50ZihmbXQpXG57XG5cdHZhciByZWdleCA9IFtcblx0ICAgICcoW14lXSopJyxcdFx0XHRcdC8qIG5vcm1hbCB0ZXh0ICovXG5cdCAgICAnJScsXHRcdFx0XHQvKiBzdGFydCBvZiBmb3JtYXQgKi9cblx0ICAgICcoW1xcJ1xcXFwtKyAjMF0qPyknLFx0XHRcdC8qIGZsYWdzIChvcHRpb25hbCkgKi9cblx0ICAgICcoWzEtOV1cXFxcZCopPycsXHRcdFx0Lyogd2lkdGggKG9wdGlvbmFsKSAqL1xuXHQgICAgJyhcXFxcLihbMS05XVxcXFxkKikpPycsXHRcdC8qIHByZWNpc2lvbiAob3B0aW9uYWwpICovXG5cdCAgICAnW2xoanp0TF0qPycsXHRcdFx0LyogbGVuZ3RoIG1vZHMgKGlnbm9yZWQpICovXG5cdCAgICAnKFtkaW91eFhmRmVFZ0dhQWNDc1NwJWpyXSknXHQvKiBjb252ZXJzaW9uICovXG5cdF0uam9pbignJyk7XG5cblx0dmFyIHJlID0gbmV3IFJlZ0V4cChyZWdleCk7XG5cdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblx0dmFyIGZsYWdzLCB3aWR0aCwgcHJlY2lzaW9uLCBjb252ZXJzaW9uO1xuXHR2YXIgbGVmdCwgcGFkLCBzaWduLCBhcmcsIG1hdGNoO1xuXHR2YXIgcmV0ID0gJyc7XG5cdHZhciBhcmduID0gMTtcblxuXHRtb2RfYXNzZXJ0LmVxdWFsKCdzdHJpbmcnLCB0eXBlb2YgKGZtdCkpO1xuXG5cdHdoaWxlICgobWF0Y2ggPSByZS5leGVjKGZtdCkpICE9PSBudWxsKSB7XG5cdFx0cmV0ICs9IG1hdGNoWzFdO1xuXHRcdGZtdCA9IGZtdC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcblxuXHRcdGZsYWdzID0gbWF0Y2hbMl0gfHwgJyc7XG5cdFx0d2lkdGggPSBtYXRjaFszXSB8fCAwO1xuXHRcdHByZWNpc2lvbiA9IG1hdGNoWzRdIHx8ICcnO1xuXHRcdGNvbnZlcnNpb24gPSBtYXRjaFs2XTtcblx0XHRsZWZ0ID0gZmFsc2U7XG5cdFx0c2lnbiA9IGZhbHNlO1xuXHRcdHBhZCA9ICcgJztcblxuXHRcdGlmIChjb252ZXJzaW9uID09ICclJykge1xuXHRcdFx0cmV0ICs9ICclJztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMClcblx0XHRcdHRocm93IChuZXcgRXJyb3IoJ3RvbyBmZXcgYXJncyB0byBzcHJpbnRmJykpO1xuXG5cdFx0YXJnID0gYXJncy5zaGlmdCgpO1xuXHRcdGFyZ24rKztcblxuXHRcdGlmIChmbGFncy5tYXRjaCgvW1xcJyAjXS8pKVxuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcihcblx0XHRcdCAgICAndW5zdXBwb3J0ZWQgZmxhZ3M6ICcgKyBmbGFncykpO1xuXG5cdFx0aWYgKHByZWNpc2lvbi5sZW5ndGggPiAwKVxuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcihcblx0XHRcdCAgICAnbm9uLXplcm8gcHJlY2lzaW9uIG5vdCBzdXBwb3J0ZWQnKSk7XG5cblx0XHRpZiAoZmxhZ3MubWF0Y2goLy0vKSlcblx0XHRcdGxlZnQgPSB0cnVlO1xuXG5cdFx0aWYgKGZsYWdzLm1hdGNoKC8wLykpXG5cdFx0XHRwYWQgPSAnMCc7XG5cblx0XHRpZiAoZmxhZ3MubWF0Y2goL1xcKy8pKVxuXHRcdFx0c2lnbiA9IHRydWU7XG5cblx0XHRzd2l0Y2ggKGNvbnZlcnNpb24pIHtcblx0XHRjYXNlICdzJzpcblx0XHRcdGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpXG5cdFx0XHRcdHRocm93IChuZXcgRXJyb3IoJ2FyZ3VtZW50ICcgKyBhcmduICtcblx0XHRcdFx0ICAgICc6IGF0dGVtcHRlZCB0byBwcmludCB1bmRlZmluZWQgb3IgbnVsbCAnICtcblx0XHRcdFx0ICAgICdhcyBhIHN0cmluZycpKTtcblx0XHRcdHJldCArPSBkb1BhZChwYWQsIHdpZHRoLCBsZWZ0LCBhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ2QnOlxuXHRcdFx0YXJnID0gTWF0aC5mbG9vcihhcmcpO1xuXHRcdFx0Lypqc2w6ZmFsbHRocnUqL1xuXHRcdGNhc2UgJ2YnOlxuXHRcdFx0c2lnbiA9IHNpZ24gJiYgYXJnID4gMCA/ICcrJyA6ICcnO1xuXHRcdFx0cmV0ICs9IHNpZ24gKyBkb1BhZChwYWQsIHdpZHRoLCBsZWZ0LFxuXHRcdFx0ICAgIGFyZy50b1N0cmluZygpKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnaic6IC8qIG5vbi1zdGFuZGFyZCAqL1xuXHRcdFx0aWYgKHdpZHRoID09PSAwKVxuXHRcdFx0XHR3aWR0aCA9IDEwO1xuXHRcdFx0cmV0ICs9IG1vZF91dGlsLmluc3BlY3QoYXJnLCBmYWxzZSwgd2lkdGgpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlICdyJzogLyogbm9uLXN0YW5kYXJkICovXG5cdFx0XHRyZXQgKz0gZHVtcEV4Y2VwdGlvbihhcmcpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgY29udmVyc2lvbjogJyArXG5cdFx0XHQgICAgY29udmVyc2lvbikpO1xuXHRcdH1cblx0fVxuXG5cdHJldCArPSBmbXQ7XG5cdHJldHVybiAocmV0KTtcbn1cblxuZnVuY3Rpb24gZG9QYWQoY2hyLCB3aWR0aCwgbGVmdCwgc3RyKVxue1xuXHR2YXIgcmV0ID0gc3RyO1xuXG5cdHdoaWxlIChyZXQubGVuZ3RoIDwgd2lkdGgpIHtcblx0XHRpZiAobGVmdClcblx0XHRcdHJldCArPSBjaHI7XG5cdFx0ZWxzZVxuXHRcdFx0cmV0ID0gY2hyICsgcmV0O1xuXHR9XG5cblx0cmV0dXJuIChyZXQpO1xufVxuXG4vKlxuICogVGhpcyBmdW5jdGlvbiBkdW1wcyBsb25nIHN0YWNrIHRyYWNlcyBmb3IgZXhjZXB0aW9ucyBoYXZpbmcgYSBjYXVzZSgpIG1ldGhvZC5cbiAqIFNlZSBub2RlLXZlcnJvciBmb3IgYW4gZXhhbXBsZS5cbiAqL1xuZnVuY3Rpb24gZHVtcEV4Y2VwdGlvbihleClcbntcblx0dmFyIHJldDtcblxuXHRpZiAoIShleCBpbnN0YW5jZW9mIEVycm9yKSlcblx0XHR0aHJvdyAobmV3IEVycm9yKGpzU3ByaW50ZignaW52YWxpZCB0eXBlIGZvciAlJXI6ICVqJywgZXgpKSk7XG5cblx0LyogTm90ZSB0aGF0IFY4IHByZXBlbmRzIFwiZXguc3RhY2tcIiB3aXRoIGV4LnRvU3RyaW5nKCkuICovXG5cdHJldCA9ICdFWENFUFRJT046ICcgKyBleC5jb25zdHJ1Y3Rvci5uYW1lICsgJzogJyArIGV4LnN0YWNrO1xuXG5cdGlmIChleC5jYXVzZSAmJiB0eXBlb2YgKGV4LmNhdXNlKSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBjZXggPSBleC5jYXVzZSgpO1xuXHRcdGlmIChjZXgpIHtcblx0XHRcdHJldCArPSAnXFxuQ2F1c2VkIGJ5OiAnICsgZHVtcEV4Y2VwdGlvbihjZXgpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiAocmV0KTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gRm9yZXZlckFnZW50XG5Gb3JldmVyQWdlbnQuU1NMID0gRm9yZXZlckFnZW50U1NMXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG4gICwgQWdlbnQgPSByZXF1aXJlKCdodHRwJykuQWdlbnRcbiAgLCBuZXQgPSByZXF1aXJlKCduZXQnKVxuICAsIHRscyA9IHJlcXVpcmUoJ3RscycpXG4gICwgQWdlbnRTU0wgPSByZXF1aXJlKCdodHRwcycpLkFnZW50XG4gIFxuZnVuY3Rpb24gZ2V0Q29ubmVjdGlvbk5hbWUoaG9zdCwgcG9ydCkgeyAgXG4gIHZhciBuYW1lID0gJydcbiAgaWYgKHR5cGVvZiBob3N0ID09PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBob3N0ICsgJzonICsgcG9ydFxuICB9IGVsc2Uge1xuICAgIC8vIEZvciBub2RlLmpzIHYwMTIuMCBhbmQgaW9qcy12MS41LjEsIGhvc3QgaXMgYW4gb2JqZWN0LiBBbmQgYW55IGV4aXN0aW5nIGxvY2FsQWRkcmVzcyBpcyBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIG5hbWUuXG4gICAgbmFtZSA9IGhvc3QuaG9zdCArICc6JyArIGhvc3QucG9ydCArICc6JyArIChob3N0LmxvY2FsQWRkcmVzcyA/IChob3N0LmxvY2FsQWRkcmVzcyArICc6JykgOiAnOicpXG4gIH1cbiAgcmV0dXJuIG5hbWVcbn0gICAgXG5cbmZ1bmN0aW9uIEZvcmV2ZXJBZ2VudChvcHRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHNlbGYucmVxdWVzdHMgPSB7fVxuICBzZWxmLnNvY2tldHMgPSB7fVxuICBzZWxmLmZyZWVTb2NrZXRzID0ge31cbiAgc2VsZi5tYXhTb2NrZXRzID0gc2VsZi5vcHRpb25zLm1heFNvY2tldHMgfHwgQWdlbnQuZGVmYXVsdE1heFNvY2tldHNcbiAgc2VsZi5taW5Tb2NrZXRzID0gc2VsZi5vcHRpb25zLm1pblNvY2tldHMgfHwgRm9yZXZlckFnZW50LmRlZmF1bHRNaW5Tb2NrZXRzXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbihzb2NrZXQsIGhvc3QsIHBvcnQpIHtcbiAgICB2YXIgbmFtZSA9IGdldENvbm5lY3Rpb25OYW1lKGhvc3QsIHBvcnQpXG5cbiAgICBpZiAoc2VsZi5yZXF1ZXN0c1tuYW1lXSAmJiBzZWxmLnJlcXVlc3RzW25hbWVdLmxlbmd0aCkge1xuICAgICAgc2VsZi5yZXF1ZXN0c1tuYW1lXS5zaGlmdCgpLm9uU29ja2V0KHNvY2tldClcbiAgICB9IGVsc2UgaWYgKHNlbGYuc29ja2V0c1tuYW1lXS5sZW5ndGggPCBzZWxmLm1pblNvY2tldHMpIHtcbiAgICAgIGlmICghc2VsZi5mcmVlU29ja2V0c1tuYW1lXSkgc2VsZi5mcmVlU29ja2V0c1tuYW1lXSA9IFtdXG4gICAgICBzZWxmLmZyZWVTb2NrZXRzW25hbWVdLnB1c2goc29ja2V0KVxuICAgICAgXG4gICAgICAvLyBpZiBhbiBlcnJvciBoYXBwZW5zIHdoaWxlIHdlIGRvbid0IHVzZSB0aGUgc29ja2V0IGFueXdheSwgbWVoLCB0aHJvdyB0aGUgc29ja2V0IGF3YXlcbiAgICAgIHZhciBvbklkbGVFcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBzb2NrZXQuZGVzdHJveSgpXG4gICAgICB9XG4gICAgICBzb2NrZXQuX29uSWRsZUVycm9yID0gb25JZGxlRXJyb3JcbiAgICAgIHNvY2tldC5vbignZXJyb3InLCBvbklkbGVFcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgcmVxdWVzdHMganVzdCBkZXN0cm95IHRoZVxuICAgICAgLy8gc29ja2V0IGFuZCBpdCB3aWxsIGdldCByZW1vdmVkIGZyb20gdGhlIHBvb2wuIFRoaXNcbiAgICAgIC8vIGdldHMgdXMgb3V0IG9mIHRpbWVvdXQgaXNzdWVzIGFuZCBhbGxvd3MgdXMgdG9cbiAgICAgIC8vIGRlZmF1bHQgdG8gQ29ubmVjdGlvbjprZWVwLWFsaXZlLlxuICAgICAgc29ja2V0LmRlc3Ryb3koKVxuICAgIH1cbiAgfSlcblxufVxudXRpbC5pbmhlcml0cyhGb3JldmVyQWdlbnQsIEFnZW50KVxuXG5Gb3JldmVyQWdlbnQuZGVmYXVsdE1pblNvY2tldHMgPSA1XG5cblxuRm9yZXZlckFnZW50LnByb3RvdHlwZS5jcmVhdGVDb25uZWN0aW9uID0gbmV0LmNyZWF0ZUNvbm5lY3Rpb25cbkZvcmV2ZXJBZ2VudC5wcm90b3R5cGUuYWRkUmVxdWVzdE5vcmV1c2UgPSBBZ2VudC5wcm90b3R5cGUuYWRkUmVxdWVzdFxuRm9yZXZlckFnZW50LnByb3RvdHlwZS5hZGRSZXF1ZXN0ID0gZnVuY3Rpb24ocmVxLCBob3N0LCBwb3J0KSB7XG4gIHZhciBuYW1lID0gZ2V0Q29ubmVjdGlvbk5hbWUoaG9zdCwgcG9ydClcbiAgXG4gIGlmICh0eXBlb2YgaG9zdCAhPT0gJ3N0cmluZycpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGhvc3RcbiAgICBwb3J0ID0gb3B0aW9ucy5wb3J0XG4gICAgaG9zdCA9IG9wdGlvbnMuaG9zdFxuICB9XG5cbiAgaWYgKHRoaXMuZnJlZVNvY2tldHNbbmFtZV0gJiYgdGhpcy5mcmVlU29ja2V0c1tuYW1lXS5sZW5ndGggPiAwICYmICFyZXEudXNlQ2h1bmtlZEVuY29kaW5nQnlEZWZhdWx0KSB7XG4gICAgdmFyIGlkbGVTb2NrZXQgPSB0aGlzLmZyZWVTb2NrZXRzW25hbWVdLnBvcCgpXG4gICAgaWRsZVNvY2tldC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBpZGxlU29ja2V0Ll9vbklkbGVFcnJvcilcbiAgICBkZWxldGUgaWRsZVNvY2tldC5fb25JZGxlRXJyb3JcbiAgICByZXEuX3JldXNlZFNvY2tldCA9IHRydWVcbiAgICByZXEub25Tb2NrZXQoaWRsZVNvY2tldClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFkZFJlcXVlc3ROb3JldXNlKHJlcSwgaG9zdCwgcG9ydClcbiAgfVxufVxuXG5Gb3JldmVyQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uKHMsIG5hbWUsIGhvc3QsIHBvcnQpIHtcbiAgaWYgKHRoaXMuc29ja2V0c1tuYW1lXSkge1xuICAgIHZhciBpbmRleCA9IHRoaXMuc29ja2V0c1tuYW1lXS5pbmRleE9mKHMpXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5zb2NrZXRzW25hbWVdLnNwbGljZShpbmRleCwgMSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGhpcy5zb2NrZXRzW25hbWVdICYmIHRoaXMuc29ja2V0c1tuYW1lXS5sZW5ndGggPT09IDApIHtcbiAgICAvLyBkb24ndCBsZWFrXG4gICAgZGVsZXRlIHRoaXMuc29ja2V0c1tuYW1lXVxuICAgIGRlbGV0ZSB0aGlzLnJlcXVlc3RzW25hbWVdXG4gIH1cbiAgXG4gIGlmICh0aGlzLmZyZWVTb2NrZXRzW25hbWVdKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5mcmVlU29ja2V0c1tuYW1lXS5pbmRleE9mKHMpXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5mcmVlU29ja2V0c1tuYW1lXS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICBpZiAodGhpcy5mcmVlU29ja2V0c1tuYW1lXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZnJlZVNvY2tldHNbbmFtZV1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5yZXF1ZXN0c1tuYW1lXSAmJiB0aGlzLnJlcXVlc3RzW25hbWVdLmxlbmd0aCkge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQobmFtZSwgaG9zdCwgcG9ydCkuZW1pdCgnZnJlZScpXG4gIH1cbn1cblxuZnVuY3Rpb24gRm9yZXZlckFnZW50U1NMIChvcHRpb25zKSB7XG4gIEZvcmV2ZXJBZ2VudC5jYWxsKHRoaXMsIG9wdGlvbnMpXG59XG51dGlsLmluaGVyaXRzKEZvcmV2ZXJBZ2VudFNTTCwgRm9yZXZlckFnZW50KVxuXG5Gb3JldmVyQWdlbnRTU0wucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb24gPSBjcmVhdGVDb25uZWN0aW9uU1NMXG5Gb3JldmVyQWdlbnRTU0wucHJvdG90eXBlLmFkZFJlcXVlc3ROb3JldXNlID0gQWdlbnRTU0wucHJvdG90eXBlLmFkZFJlcXVlc3RcblxuZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvblNTTCAocG9ydCwgaG9zdCwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHBvcnQgPT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IHBvcnQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGhvc3QgPT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IGhvc3Q7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwb3J0ID09PSAnbnVtYmVyJykge1xuICAgIG9wdGlvbnMucG9ydCA9IHBvcnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucy5ob3N0ID0gaG9zdDtcbiAgfVxuXG4gIHJldHVybiB0bHMuY29ubmVjdChvcHRpb25zKTtcbn1cbiIsIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyA/IHNlbGYuRm9ybURhdGEgOiB3aW5kb3cuRm9ybURhdGE7XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJhZnRlclJlcXVlc3QuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJsYXN0QWNjZXNzXCIsXG4gICAgXCJlVGFnXCIsXG4gICAgXCJoaXRDb3VudFwiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJleHBpcmVzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgXCJwYXR0ZXJuXCI6IFwiXihcXFxcZHs0fSkoLSk/KFxcXFxkXFxcXGQpKC0pPyhcXFxcZFxcXFxkKShUKT8oXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKShcXFxcLlxcXFxkKyk/KFp8KFsrLV0pKFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKSk/XCJcbiAgICB9LFxuICAgIFwibGFzdEFjY2Vzc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgIFwicGF0dGVyblwiOiBcIl4oXFxcXGR7NH0pKC0pPyhcXFxcZFxcXFxkKSgtKT8oXFxcXGRcXFxcZCkoVCk/KFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKSg6KT8oXFxcXGRcXFxcZCkoXFxcXC5cXFxcZCspPyhafChbKy1dKShcXFxcZFxcXFxkKSg6KT8oXFxcXGRcXFxcZCkpP1wiXG4gICAgfSxcbiAgICBcImVUYWdcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwiaGl0Q291bnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiXG4gICAgfSxcbiAgICBcImNvbW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJpZFwiOiBcImJlZm9yZVJlcXVlc3QuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJsYXN0QWNjZXNzXCIsXG4gICAgXCJlVGFnXCIsXG4gICAgXCJoaXRDb3VudFwiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJleHBpcmVzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgXCJwYXR0ZXJuXCI6IFwiXihcXFxcZHs0fSkoLSk/KFxcXFxkXFxcXGQpKC0pPyhcXFxcZFxcXFxkKShUKT8oXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKShcXFxcLlxcXFxkKyk/KFp8KFsrLV0pKFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKSk/XCJcbiAgICB9LFxuICAgIFwibGFzdEFjY2Vzc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgIFwicGF0dGVyblwiOiBcIl4oXFxcXGR7NH0pKC0pPyhcXFxcZFxcXFxkKSgtKT8oXFxcXGRcXFxcZCkoVCk/KFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKSg6KT8oXFxcXGRcXFxcZCkoXFxcXC5cXFxcZCspPyhafChbKy1dKShcXFxcZFxcXFxkKSg6KT8oXFxcXGRcXFxcZCkpP1wiXG4gICAgfSxcbiAgICBcImVUYWdcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwiaGl0Q291bnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiXG4gICAgfSxcbiAgICBcImNvbW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJpZFwiOiBcImJyb3dzZXIuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwicmVxdWlyZWRcIjogW1xuICAgIFwibmFtZVwiLFxuICAgIFwidmVyc2lvblwiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJuYW1lXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcInZlcnNpb25cIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwiY2FjaGUuanNvbiNcIixcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcImJlZm9yZVJlcXVlc3RcIjoge1xuICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgIHsgXCJ0eXBlXCI6IFwibnVsbFwiIH0sXG4gICAgICAgIHsgXCIkcmVmXCI6IFwiYmVmb3JlUmVxdWVzdC5qc29uI1wiIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwiYWZ0ZXJSZXF1ZXN0XCI6IHtcbiAgICAgIFwib25lT2ZcIjogW1xuICAgICAgICB7IFwidHlwZVwiOiBcIm51bGxcIiB9LFxuICAgICAgICB7IFwiJHJlZlwiOiBcImFmdGVyUmVxdWVzdC5qc29uI1wiIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwiY29udGVudC5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJzaXplXCIsXG4gICAgXCJtaW1lVHlwZVwiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJzaXplXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIlxuICAgIH0sXG4gICAgXCJjb21wcmVzc2lvblwiOiB7XG4gICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCJcbiAgICB9LFxuICAgIFwibWltZVR5cGVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwidGV4dFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJlbmNvZGluZ1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJjb21tZW50XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJjb29raWUuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwicmVxdWlyZWRcIjogW1xuICAgIFwibmFtZVwiLFxuICAgIFwidmFsdWVcIlxuICBdLFxuICBcInByb3BlcnRpZXNcIjoge1xuICAgIFwibmFtZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJ2YWx1ZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJwYXRoXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcImRvbWFpblwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJleHBpcmVzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBbXCJzdHJpbmdcIiwgXCJudWxsXCJdLFxuICAgICAgXCJmb3JtYXRcIjogXCJkYXRlLXRpbWVcIlxuICAgIH0sXG4gICAgXCJodHRwT25seVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJib29sZWFuXCJcbiAgICB9LFxuICAgIFwic2VjdXJlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIlxuICAgIH0sXG4gICAgXCJjb21tZW50XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJjcmVhdG9yLmpzb24jXCIsXG4gIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcIm5hbWVcIixcbiAgICBcInZlcnNpb25cIlxuICBdLFxuICBcInByb3BlcnRpZXNcIjoge1xuICAgIFwibmFtZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcImNvbW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJpZFwiOiBcImVudHJ5Lmpzb24jXCIsXG4gIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICBcIm9wdGlvbmFsXCI6IHRydWUsXG4gIFwicmVxdWlyZWRcIjogW1xuICAgIFwic3RhcnRlZERhdGVUaW1lXCIsXG4gICAgXCJ0aW1lXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJyZXNwb25zZVwiLFxuICAgIFwiY2FjaGVcIixcbiAgICBcInRpbWluZ3NcIlxuICBdLFxuICBcInByb3BlcnRpZXNcIjoge1xuICAgIFwicGFnZXJlZlwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJzdGFydGVkRGF0ZVRpbWVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImZvcm1hdFwiOiBcImRhdGUtdGltZVwiLFxuICAgICAgXCJwYXR0ZXJuXCI6IFwiXihcXFxcZHs0fSkoLSk/KFxcXFxkXFxcXGQpKC0pPyhcXFxcZFxcXFxkKShUKT8oXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKShcXFxcLlxcXFxkKyk/KFp8KFsrLV0pKFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKSlcIlxuICAgIH0sXG4gICAgXCJ0aW1lXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiLFxuICAgICAgXCJtaW5cIjogMFxuICAgIH0sXG4gICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcInJlcXVlc3QuanNvbiNcIlxuICAgIH0sXG4gICAgXCJyZXNwb25zZVwiOiB7XG4gICAgICBcIiRyZWZcIjogXCJyZXNwb25zZS5qc29uI1wiXG4gICAgfSxcbiAgICBcImNhY2hlXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImNhY2hlLmpzb24jXCJcbiAgICB9LFxuICAgIFwidGltaW5nc1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCJ0aW1pbmdzLmpzb24jXCJcbiAgICB9LFxuICAgIFwic2VydmVySVBBZGRyZXNzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgIHsgXCJmb3JtYXRcIjogXCJpcHY0XCIgfSxcbiAgICAgICAgeyBcImZvcm1hdFwiOiBcImlwdjZcIiB9XG4gICAgICBdXG4gICAgfSxcbiAgICBcImNvbm5lY3Rpb25cIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwiaGFyLmpzb24jXCIsXG4gIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcImxvZ1wiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJsb2dcIjoge1xuICAgICAgXCIkcmVmXCI6IFwibG9nLmpzb24jXCJcbiAgICB9XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJpZFwiOiBcImhlYWRlci5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJuYW1lXCIsXG4gICAgXCJ2YWx1ZVwiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJuYW1lXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcInZhbHVlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcImNvbW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWZ0ZXJSZXF1ZXN0OiByZXF1aXJlKCcuL2FmdGVyUmVxdWVzdC5qc29uJyksXG4gIGJlZm9yZVJlcXVlc3Q6IHJlcXVpcmUoJy4vYmVmb3JlUmVxdWVzdC5qc29uJyksXG4gIGJyb3dzZXI6IHJlcXVpcmUoJy4vYnJvd3Nlci5qc29uJyksXG4gIGNhY2hlOiByZXF1aXJlKCcuL2NhY2hlLmpzb24nKSxcbiAgY29udGVudDogcmVxdWlyZSgnLi9jb250ZW50Lmpzb24nKSxcbiAgY29va2llOiByZXF1aXJlKCcuL2Nvb2tpZS5qc29uJyksXG4gIGNyZWF0b3I6IHJlcXVpcmUoJy4vY3JlYXRvci5qc29uJyksXG4gIGVudHJ5OiByZXF1aXJlKCcuL2VudHJ5Lmpzb24nKSxcbiAgaGFyOiByZXF1aXJlKCcuL2hhci5qc29uJyksXG4gIGhlYWRlcjogcmVxdWlyZSgnLi9oZWFkZXIuanNvbicpLFxuICBsb2c6IHJlcXVpcmUoJy4vbG9nLmpzb24nKSxcbiAgcGFnZTogcmVxdWlyZSgnLi9wYWdlLmpzb24nKSxcbiAgcGFnZVRpbWluZ3M6IHJlcXVpcmUoJy4vcGFnZVRpbWluZ3MuanNvbicpLFxuICBwb3N0RGF0YTogcmVxdWlyZSgnLi9wb3N0RGF0YS5qc29uJyksXG4gIHF1ZXJ5OiByZXF1aXJlKCcuL3F1ZXJ5Lmpzb24nKSxcbiAgcmVxdWVzdDogcmVxdWlyZSgnLi9yZXF1ZXN0Lmpzb24nKSxcbiAgcmVzcG9uc2U6IHJlcXVpcmUoJy4vcmVzcG9uc2UuanNvbicpLFxuICB0aW1pbmdzOiByZXF1aXJlKCcuL3RpbWluZ3MuanNvbicpXG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJsb2cuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwicmVxdWlyZWRcIjogW1xuICAgIFwidmVyc2lvblwiLFxuICAgIFwiY3JlYXRvclwiLFxuICAgIFwiZW50cmllc1wiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcImNyZWF0b3JcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiY3JlYXRvci5qc29uI1wiXG4gICAgfSxcbiAgICBcImJyb3dzZXJcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiYnJvd3Nlci5qc29uI1wiXG4gICAgfSxcbiAgICBcInBhZ2VzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwicGFnZS5qc29uI1wiXG4gICAgICB9XG4gICAgfSxcbiAgICBcImVudHJpZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCJlbnRyeS5qc29uI1wiXG4gICAgICB9XG4gICAgfSxcbiAgICBcImNvbW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJpZFwiOiBcInBhZ2UuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJzdGFydGVkRGF0ZVRpbWVcIixcbiAgICBcImlkXCIsXG4gICAgXCJ0aXRsZVwiLFxuICAgIFwicGFnZVRpbWluZ3NcIlxuICBdLFxuICBcInByb3BlcnRpZXNcIjoge1xuICAgIFwic3RhcnRlZERhdGVUaW1lXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgXCJmb3JtYXRcIjogXCJkYXRlLXRpbWVcIixcbiAgICAgIFwicGF0dGVyblwiOiBcIl4oXFxcXGR7NH0pKC0pPyhcXFxcZFxcXFxkKSgtKT8oXFxcXGRcXFxcZCkoVCk/KFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKSg6KT8oXFxcXGRcXFxcZCkoXFxcXC5cXFxcZCspPyhafChbKy1dKShcXFxcZFxcXFxkKSg6KT8oXFxcXGRcXFxcZCkpXCJcbiAgICB9LFxuICAgIFwiaWRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcInVuaXF1ZVwiOiB0cnVlXG4gICAgfSxcbiAgICBcInRpdGxlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcInBhZ2VUaW1pbmdzXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcInBhZ2VUaW1pbmdzLmpzb24jXCJcbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwicGFnZVRpbWluZ3MuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJvbkNvbnRlbnRMb2FkXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiLFxuICAgICAgXCJtaW5cIjogLTFcbiAgICB9LFxuICAgIFwib25Mb2FkXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiLFxuICAgICAgXCJtaW5cIjogLTFcbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwicG9zdERhdGEuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJtaW1lVHlwZVwiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJtaW1lVHlwZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJ0ZXh0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcInBhcmFtc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiXG4gICAgICBdLFxuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInZhbHVlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImZpbGVOYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbnRlbnRUeXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbW1lbnRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwicXVlcnkuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwicmVxdWlyZWRcIjogW1xuICAgIFwibmFtZVwiLFxuICAgIFwidmFsdWVcIlxuICBdLFxuICBcInByb3BlcnRpZXNcIjoge1xuICAgIFwibmFtZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJ2YWx1ZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJjb21tZW50XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJyZXF1ZXN0Lmpzb24jXCIsXG4gIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJodHRwVmVyc2lvblwiLFxuICAgIFwiY29va2llc1wiLFxuICAgIFwiaGVhZGVyc1wiLFxuICAgIFwicXVlcnlTdHJpbmdcIixcbiAgICBcImhlYWRlcnNTaXplXCIsXG4gICAgXCJib2R5U2l6ZVwiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJtZXRob2RcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwidXJsXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgIH0sXG4gICAgXCJodHRwVmVyc2lvblwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJjb29raWVzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiY29va2llLmpzb24jXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiaGVhZGVyc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcImhlYWRlci5qc29uI1wiXG4gICAgICB9XG4gICAgfSxcbiAgICBcInF1ZXJ5U3RyaW5nXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwicXVlcnkuanNvbiNcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJwb3N0RGF0YVwiOiB7XG4gICAgICBcIiRyZWZcIjogXCJwb3N0RGF0YS5qc29uI1wiXG4gICAgfSxcbiAgICBcImhlYWRlcnNTaXplXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIlxuICAgIH0sXG4gICAgXCJib2R5U2l6ZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCJcbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwicmVzcG9uc2UuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwicmVxdWlyZWRcIjogW1xuICAgIFwic3RhdHVzXCIsXG4gICAgXCJzdGF0dXNUZXh0XCIsXG4gICAgXCJodHRwVmVyc2lvblwiLFxuICAgIFwiY29va2llc1wiLFxuICAgIFwiaGVhZGVyc1wiLFxuICAgIFwiY29udGVudFwiLFxuICAgIFwicmVkaXJlY3RVUkxcIixcbiAgICBcImhlYWRlcnNTaXplXCIsXG4gICAgXCJib2R5U2l6ZVwiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJzdGF0dXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiXG4gICAgfSxcbiAgICBcInN0YXR1c1RleHRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwiaHR0cFZlcnNpb25cIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwiY29va2llc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcImNvb2tpZS5qc29uI1wiXG4gICAgICB9XG4gICAgfSxcbiAgICBcImhlYWRlcnNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCJoZWFkZXIuanNvbiNcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJjb250ZW50XCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcImNvbnRlbnQuanNvbiNcIlxuICAgIH0sXG4gICAgXCJyZWRpcmVjdFVSTFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJoZWFkZXJzU2l6ZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCJcbiAgICB9LFxuICAgIFwiYm9keVNpemVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiXG4gICAgfSxcbiAgICBcImNvbW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJpZFwiOiBcInRpbWluZ3MuanNvbiNcIixcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJzZW5kXCIsXG4gICAgXCJ3YWl0XCIsXG4gICAgXCJyZWNlaXZlXCJcbiAgXSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcImRuc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgIFwibWluXCI6IC0xXG4gICAgfSxcbiAgICBcImNvbm5lY3RcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICBcIm1pblwiOiAtMVxuICAgIH0sXG4gICAgXCJibG9ja2VkXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiLFxuICAgICAgXCJtaW5cIjogLTFcbiAgICB9LFxuICAgIFwic2VuZFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgIFwibWluXCI6IC0xXG4gICAgfSxcbiAgICBcIndhaXRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICBcIm1pblwiOiAtMVxuICAgIH0sXG4gICAgXCJyZWNlaXZlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiLFxuICAgICAgXCJtaW5cIjogLTFcbiAgICB9LFxuICAgIFwic3NsXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiLFxuICAgICAgXCJtaW5cIjogLTFcbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gSEFSRXJyb3I7XG5mdW5jdGlvbiBIQVJFcnJvcihlcnJvcnMpIHtcbiAgdmFyIG1lc3NhZ2UgPSAndmFsaWRhdGlvbiBmYWlsZWQnO1xuXG4gIHRoaXMubmFtZSA9ICdIQVJFcnJvcic7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuXG4gIGlmICh0eXBlb2YgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKG1lc3NhZ2UpLnN0YWNrO1xuICB9XG59XG5cbkhBUkVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFsaWRhdGUgPSB2YWxpZGF0ZTtcbmV4cG9ydHMuYWZ0ZXJSZXF1ZXN0ID0gYWZ0ZXJSZXF1ZXN0O1xuZXhwb3J0cy5iZWZvcmVSZXF1ZXN0ID0gYmVmb3JlUmVxdWVzdDtcbmV4cG9ydHMuYnJvd3NlciA9IGJyb3dzZXI7XG5leHBvcnRzLmNhY2hlID0gY2FjaGU7XG5leHBvcnRzLmNvbnRlbnQgPSBjb250ZW50O1xuZXhwb3J0cy5jb29raWUgPSBjb29raWU7XG5leHBvcnRzLmNyZWF0b3IgPSBjcmVhdG9yO1xuZXhwb3J0cy5lbnRyeSA9IGVudHJ5O1xuZXhwb3J0cy5oYXIgPSBoYXI7XG5leHBvcnRzLmhlYWRlciA9IGhlYWRlcjtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5wYWdlID0gcGFnZTtcbmV4cG9ydHMucGFnZVRpbWluZ3MgPSBwYWdlVGltaW5ncztcbmV4cG9ydHMucG9zdERhdGEgPSBwb3N0RGF0YTtcbmV4cG9ydHMucXVlcnkgPSBxdWVyeTtcbmV4cG9ydHMucmVxdWVzdCA9IHJlcXVlc3Q7XG5leHBvcnRzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG5leHBvcnRzLnRpbWluZ3MgPSB0aW1pbmdzO1xuXG52YXIgX2hhclNjaGVtYSA9IHJlcXVpcmUoJ2hhci1zY2hlbWEnKTtcblxudmFyIHNjaGVtYXMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfaGFyU2NoZW1hKTtcblxudmFyIF9hanYgPSByZXF1aXJlKCdhanYnKTtcblxudmFyIF9hanYyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYWp2KTtcblxudmFyIF9lcnJvciA9IHJlcXVpcmUoJy4vZXJyb3InKTtcblxudmFyIF9lcnJvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lcnJvcik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSBuZXdPYmouZGVmYXVsdCA9IG9iajsgcmV0dXJuIG5ld09iajsgfSB9XG5cbnZhciBhanYgPSB2b2lkIDA7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKG5hbWUpIHtcbiAgdmFyIGRhdGEgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIC8vIHZhbGlkYXRvciBjb25maWdcbiAgYWp2ID0gYWp2IHx8IG5ldyBfYWp2Mi5kZWZhdWx0KHtcbiAgICBhbGxFcnJvcnM6IHRydWUsXG4gICAgc2NoZW1hczogc2NoZW1hc1xuICB9KTtcblxuICB2YXIgdmFsaWRhdGUgPSBhanYuZ2V0U2NoZW1hKG5hbWUgKyAnLmpzb24nKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciB2YWxpZCA9IHZhbGlkYXRlKGRhdGEpO1xuXG4gICAgIXZhbGlkID8gcmVqZWN0KG5ldyBfZXJyb3IyLmRlZmF1bHQodmFsaWRhdGUuZXJyb3JzKSkgOiByZXNvbHZlKGRhdGEpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWZ0ZXJSZXF1ZXN0KGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdhZnRlclJlcXVlc3QnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gYmVmb3JlUmVxdWVzdChkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgnYmVmb3JlUmVxdWVzdCcsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiBicm93c2VyKGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdicm93c2VyJywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGNhY2hlKGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdjYWNoZScsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiBjb250ZW50KGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdjb250ZW50JywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGNvb2tpZShkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgnY29va2llJywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0b3IoZGF0YSkge1xuICByZXR1cm4gdmFsaWRhdGUoJ2NyZWF0b3InLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gZW50cnkoZGF0YSkge1xuICByZXR1cm4gdmFsaWRhdGUoJ2VudHJ5JywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGhhcihkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgnaGFyJywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGhlYWRlcihkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgnaGVhZGVyJywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGxvZyhkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgnbG9nJywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHBhZ2UoZGF0YSkge1xuICByZXR1cm4gdmFsaWRhdGUoJ3BhZ2UnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gcGFnZVRpbWluZ3MoZGF0YSkge1xuICByZXR1cm4gdmFsaWRhdGUoJ3BhZ2VUaW1pbmdzJywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHBvc3REYXRhKGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdwb3N0RGF0YScsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiBxdWVyeShkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgncXVlcnknLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdChkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgncmVxdWVzdCcsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiByZXNwb25zZShkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgncmVzcG9uc2UnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gdGltaW5ncyhkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgndGltaW5ncycsIGRhdGEpO1xufSIsIid1c2Ugc3RyaWN0J1xudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuXG5mdW5jdGlvbiBIYXNoQmFzZSAoYmxvY2tTaXplKSB7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG5cbiAgdGhpcy5fYmxvY2sgPSBuZXcgQnVmZmVyKGJsb2NrU2l6ZSlcbiAgdGhpcy5fYmxvY2tTaXplID0gYmxvY2tTaXplXG4gIHRoaXMuX2Jsb2NrT2Zmc2V0ID0gMFxuICB0aGlzLl9sZW5ndGggPSBbMCwgMCwgMCwgMF1cblxuICB0aGlzLl9maW5hbGl6ZWQgPSBmYWxzZVxufVxuXG5pbmhlcml0cyhIYXNoQmFzZSwgVHJhbnNmb3JtKVxuXG5IYXNoQmFzZS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIHZhciBlcnJvciA9IG51bGxcbiAgdHJ5IHtcbiAgICBpZiAoZW5jb2RpbmcgIT09ICdidWZmZXInKSBjaHVuayA9IG5ldyBCdWZmZXIoY2h1bmssIGVuY29kaW5nKVxuICAgIHRoaXMudXBkYXRlKGNodW5rKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvciA9IGVyclxuICB9XG5cbiAgY2FsbGJhY2soZXJyb3IpXG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdmFyIGVycm9yID0gbnVsbFxuICB0cnkge1xuICAgIHRoaXMucHVzaCh0aGlzLl9kaWdlc3QoKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3IgPSBlcnJcbiAgfVxuXG4gIGNhbGxiYWNrKGVycm9yKVxufVxuXG5IYXNoQmFzZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGRhdGEpICYmIHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRGF0YSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyJylcbiAgaWYgKHRoaXMuX2ZpbmFsaXplZCkgdGhyb3cgbmV3IEVycm9yKCdEaWdlc3QgYWxyZWFkeSBjYWxsZWQnKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgZW5jb2RpbmcgfHwgJ2JpbmFyeScpXG5cbiAgLy8gY29uc3VtZSBkYXRhXG4gIHZhciBibG9jayA9IHRoaXMuX2Jsb2NrXG4gIHZhciBvZmZzZXQgPSAwXG4gIHdoaWxlICh0aGlzLl9ibG9ja09mZnNldCArIGRhdGEubGVuZ3RoIC0gb2Zmc2V0ID49IHRoaXMuX2Jsb2NrU2l6ZSkge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLl9ibG9ja09mZnNldDsgaSA8IHRoaXMuX2Jsb2NrU2l6ZTspIGJsb2NrW2krK10gPSBkYXRhW29mZnNldCsrXVxuICAgIHRoaXMuX3VwZGF0ZSgpXG4gICAgdGhpcy5fYmxvY2tPZmZzZXQgPSAwXG4gIH1cbiAgd2hpbGUgKG9mZnNldCA8IGRhdGEubGVuZ3RoKSBibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXSA9IGRhdGFbb2Zmc2V0KytdXG5cbiAgLy8gdXBkYXRlIGxlbmd0aFxuICBmb3IgKHZhciBqID0gMCwgY2FycnkgPSBkYXRhLmxlbmd0aCAqIDg7IGNhcnJ5ID4gMDsgKytqKSB7XG4gICAgdGhpcy5fbGVuZ3RoW2pdICs9IGNhcnJ5XG4gICAgY2FycnkgPSAodGhpcy5fbGVuZ3RoW2pdIC8gMHgwMTAwMDAwMDAwKSB8IDBcbiAgICBpZiAoY2FycnkgPiAwKSB0aGlzLl9sZW5ndGhbal0gLT0gMHgwMTAwMDAwMDAwICogY2FycnlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdfdXBkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZCcpXG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgaWYgKHRoaXMuX2ZpbmFsaXplZCkgdGhyb3cgbmV3IEVycm9yKCdEaWdlc3QgYWxyZWFkeSBjYWxsZWQnKVxuICB0aGlzLl9maW5hbGl6ZWQgPSB0cnVlXG5cbiAgdmFyIGRpZ2VzdCA9IHRoaXMuX2RpZ2VzdCgpXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSBkaWdlc3QgPSBkaWdlc3QudG9TdHJpbmcoZW5jb2RpbmcpXG4gIHJldHVybiBkaWdlc3Rcbn1cblxuSGFzaEJhc2UucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcignX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2hCYXNlXG4iLCJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iLCJ2YXIgaGFzaCA9IHJlcXVpcmUoJy4uL2hhc2gnKTtcbnZhciB1dGlscyA9IGhhc2gudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh2YXIgdCA9IDg7IHQgPCB0aGlzLnBhZExlbmd0aDsgdCsrKVxuICAgICAgcmVzW2krK10gPSAwO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG4iLCJ2YXIgaG1hYyA9IGV4cG9ydHM7XG5cbnZhciBoYXNoID0gcmVxdWlyZSgnLi4vaGFzaCcpO1xudmFyIHV0aWxzID0gaGFzaC51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIEhtYWMoaGFzaCwga2V5LCBlbmMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhtYWMpKVxuICAgIHJldHVybiBuZXcgSG1hYyhoYXNoLCBrZXksIGVuYyk7XG4gIHRoaXMuSGFzaCA9IGhhc2g7XG4gIHRoaXMuYmxvY2tTaXplID0gaGFzaC5ibG9ja1NpemUgLyA4O1xuICB0aGlzLm91dFNpemUgPSBoYXNoLm91dFNpemUgLyA4O1xuICB0aGlzLmlubmVyID0gbnVsbDtcbiAgdGhpcy5vdXRlciA9IG51bGw7XG5cbiAgdGhpcy5faW5pdCh1dGlscy50b0FycmF5KGtleSwgZW5jKSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEhtYWM7XG5cbkhtYWMucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChrZXkpIHtcbiAgLy8gU2hvcnRlbiBrZXksIGlmIG5lZWRlZFxuICBpZiAoa2V5Lmxlbmd0aCA+IHRoaXMuYmxvY2tTaXplKVxuICAgIGtleSA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KS5kaWdlc3QoKTtcbiAgYXNzZXJ0KGtleS5sZW5ndGggPD0gdGhpcy5ibG9ja1NpemUpO1xuXG4gIC8vIEFkZCBwYWRkaW5nIHRvIGtleVxuICBmb3IgKHZhciBpID0ga2V5Lmxlbmd0aDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAga2V5LnB1c2goMCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXG4gICAga2V5W2ldIF49IDB4MzY7XG4gIHRoaXMuaW5uZXIgPSBuZXcgdGhpcy5IYXNoKCkudXBkYXRlKGtleSk7XG5cbiAgLy8gMHgzNiBeIDB4NWMgPSAweDZhXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iLCJ2YXIgaGFzaCA9IHJlcXVpcmUoJy4uL2hhc2gnKTtcbnZhciB1dGlscyA9IGhhc2gudXRpbHM7XG5cbnZhciByb3RsMzIgPSB1dGlscy5yb3RsMzI7XG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl8zID0gdXRpbHMuc3VtMzJfMztcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBCbG9ja0hhc2ggPSBoYXNoLmNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiIsInZhciBoYXNoID0gcmVxdWlyZSgnLi4vaGFzaCcpO1xudmFyIHV0aWxzID0gaGFzaC51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbnZhciByb3RyMzIgPSB1dGlscy5yb3RyMzI7XG52YXIgcm90bDMyID0gdXRpbHMucm90bDMyO1xudmFyIHN1bTMyID0gdXRpbHMuc3VtMzI7XG52YXIgc3VtMzJfNCA9IHV0aWxzLnN1bTMyXzQ7XG52YXIgc3VtMzJfNSA9IHV0aWxzLnN1bTMyXzU7XG52YXIgcm90cjY0X2hpID0gdXRpbHMucm90cjY0X2hpO1xudmFyIHJvdHI2NF9sbyA9IHV0aWxzLnJvdHI2NF9sbztcbnZhciBzaHI2NF9oaSA9IHV0aWxzLnNocjY0X2hpO1xudmFyIHNocjY0X2xvID0gdXRpbHMuc2hyNjRfbG87XG52YXIgc3VtNjQgPSB1dGlscy5zdW02NDtcbnZhciBzdW02NF9oaSA9IHV0aWxzLnN1bTY0X2hpO1xudmFyIHN1bTY0X2xvID0gdXRpbHMuc3VtNjRfbG87XG52YXIgc3VtNjRfNF9oaSA9IHV0aWxzLnN1bTY0XzRfaGk7XG52YXIgc3VtNjRfNF9sbyA9IHV0aWxzLnN1bTY0XzRfbG87XG52YXIgc3VtNjRfNV9oaSA9IHV0aWxzLnN1bTY0XzVfaGk7XG52YXIgc3VtNjRfNV9sbyA9IHV0aWxzLnN1bTY0XzVfbG87XG52YXIgQmxvY2tIYXNoID0gaGFzaC5jb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMjU2X0sgPSBbXG4gIDB4NDI4YTJmOTgsIDB4NzEzNzQ0OTEsIDB4YjVjMGZiY2YsIDB4ZTliNWRiYTUsXG4gIDB4Mzk1NmMyNWIsIDB4NTlmMTExZjEsIDB4OTIzZjgyYTQsIDB4YWIxYzVlZDUsXG4gIDB4ZDgwN2FhOTgsIDB4MTI4MzViMDEsIDB4MjQzMTg1YmUsIDB4NTUwYzdkYzMsXG4gIDB4NzJiZTVkNzQsIDB4ODBkZWIxZmUsIDB4OWJkYzA2YTcsIDB4YzE5YmYxNzQsXG4gIDB4ZTQ5YjY5YzEsIDB4ZWZiZTQ3ODYsIDB4MGZjMTlkYzYsIDB4MjQwY2ExY2MsXG4gIDB4MmRlOTJjNmYsIDB4NGE3NDg0YWEsIDB4NWNiMGE5ZGMsIDB4NzZmOTg4ZGEsXG4gIDB4OTgzZTUxNTIsIDB4YTgzMWM2NmQsIDB4YjAwMzI3YzgsIDB4YmY1OTdmYzcsXG4gIDB4YzZlMDBiZjMsIDB4ZDVhNzkxNDcsIDB4MDZjYTYzNTEsIDB4MTQyOTI5NjcsXG4gIDB4MjdiNzBhODUsIDB4MmUxYjIxMzgsIDB4NGQyYzZkZmMsIDB4NTMzODBkMTMsXG4gIDB4NjUwYTczNTQsIDB4NzY2YTBhYmIsIDB4ODFjMmM5MmUsIDB4OTI3MjJjODUsXG4gIDB4YTJiZmU4YTEsIDB4YTgxYTY2NGIsIDB4YzI0YjhiNzAsIDB4Yzc2YzUxYTMsXG4gIDB4ZDE5MmU4MTksIDB4ZDY5OTA2MjQsIDB4ZjQwZTM1ODUsIDB4MTA2YWEwNzAsXG4gIDB4MTlhNGMxMTYsIDB4MWUzNzZjMDgsIDB4Mjc0ODc3NGMsIDB4MzRiMGJjYjUsXG4gIDB4MzkxYzBjYjMsIDB4NGVkOGFhNGEsIDB4NWI5Y2NhNGYsIDB4NjgyZTZmZjMsXG4gIDB4NzQ4ZjgyZWUsIDB4NzhhNTYzNmYsIDB4ODRjODc4MTQsIDB4OGNjNzAyMDgsXG4gIDB4OTBiZWZmZmEsIDB4YTQ1MDZjZWIsIDB4YmVmOWEzZjcsIDB4YzY3MTc4ZjJcbl07XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxudmFyIHNoYTFfSyA9IFtcbiAgMHg1QTgyNzk5OSwgMHg2RUQ5RUJBMSxcbiAgMHg4RjFCQkNEQywgMHhDQTYyQzFENlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbIDB4NmEwOWU2NjcsIDB4YmI2N2FlODUsIDB4M2M2ZWYzNzIsIDB4YTU0ZmY1M2EsXG4gICAgICAgICAgICAgMHg1MTBlNTI3ZiwgMHg5YjA1Njg4YywgMHgxZjgzZDlhYiwgMHg1YmUwY2QxOSBdO1xuICB0aGlzLmsgPSBzaGEyNTZfSztcbiAgdGhpcy5XID0gbmV3IEFycmF5KDY0KTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTI1NiwgQmxvY2tIYXNoKTtcbmV4cG9ydHMuc2hhMjU2ID0gU0hBMjU2O1xuXG5TSEEyNTYuYmxvY2tTaXplID0gNTEyO1xuU0hBMjU2Lm91dFNpemUgPSAyNTY7XG5TSEEyNTYuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjU2LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyNTYucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKVxuICAgIFdbaV0gPSBtc2dbc3RhcnQgKyBpXTtcbiAgZm9yICg7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSBzdW0zMl80KGcxXzI1NihXW2kgLSAyXSksIFdbaSAtIDddLCBnMF8yNTYoV1tpIC0gMTVdKSwgV1tpIC0gMTZdKTtcblxuICB2YXIgYSA9IHRoaXMuaFswXTtcbiAgdmFyIGIgPSB0aGlzLmhbMV07XG4gIHZhciBjID0gdGhpcy5oWzJdO1xuICB2YXIgZCA9IHRoaXMuaFszXTtcbiAgdmFyIGUgPSB0aGlzLmhbNF07XG4gIHZhciBmID0gdGhpcy5oWzVdO1xuICB2YXIgZyA9IHRoaXMuaFs2XTtcbiAgdmFyIGggPSB0aGlzLmhbN107XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIFQxID0gc3VtMzJfNShoLCBzMV8yNTYoZSksIGNoMzIoZSwgZiwgZyksIHRoaXMua1tpXSwgV1tpXSk7XG4gICAgdmFyIFQyID0gc3VtMzIoczBfMjU2KGEpLCBtYWozMihhLCBiLCBjKSk7XG4gICAgaCA9IGc7XG4gICAgZyA9IGY7XG4gICAgZiA9IGU7XG4gICAgZSA9IHN1bTMyKGQsIFQxKTtcbiAgICBkID0gYztcbiAgICBjID0gYjtcbiAgICBiID0gYTtcbiAgICBhID0gc3VtMzIoVDEsIFQyKTtcbiAgfVxuXG4gIHRoaXMuaFswXSA9IHN1bTMyKHRoaXMuaFswXSwgYSk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyKHRoaXMuaFsxXSwgYik7XG4gIHRoaXMuaFsyXSA9IHN1bTMyKHRoaXMuaFsyXSwgYyk7XG4gIHRoaXMuaFszXSA9IHN1bTMyKHRoaXMuaFszXSwgZCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyKHRoaXMuaFs0XSwgZSk7XG4gIHRoaXMuaFs1XSA9IHN1bTMyKHRoaXMuaFs1XSwgZik7XG4gIHRoaXMuaFs2XSA9IHN1bTMyKHRoaXMuaFs2XSwgZyk7XG4gIHRoaXMuaFs3XSA9IHN1bTMyKHRoaXMuaFs3XSwgaCk7XG59O1xuXG5TSEEyNTYucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnYmlnJyk7XG59O1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFsgMHhjMTA1OWVkOCwgMHgzNjdjZDUwNywgMHgzMDcwZGQxNywgMHhmNzBlNTkzOSxcbiAgICAgICAgICAgICAweGZmYzAwYjMxLCAweDY4NTgxNTExLCAweDY0Zjk4ZmE3LCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEyMjQsIFNIQTI1Nik7XG5leHBvcnRzLnNoYTIyNCA9IFNIQTIyNDtcblxuU0hBMjI0LmJsb2NrU2l6ZSA9IDUxMjtcblNIQTIyNC5vdXRTaXplID0gMjI0O1xuU0hBMjI0LmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTIyNC5wYWRMZW5ndGggPSA2NDtcblxuU0hBMjI0LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICAvLyBKdXN0IHRydW5jYXRlIG91dHB1dFxuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmguc2xpY2UoMCwgNyksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbIDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgsXG4gICAgICAgICAgICAgMHhiYjY3YWU4NSwgMHg4NGNhYTczYixcbiAgICAgICAgICAgICAweDNjNmVmMzcyLCAweGZlOTRmODJiLFxuICAgICAgICAgICAgIDB4YTU0ZmY1M2EsIDB4NWYxZDM2ZjEsXG4gICAgICAgICAgICAgMHg1MTBlNTI3ZiwgMHhhZGU2ODJkMSxcbiAgICAgICAgICAgICAweDliMDU2ODhjLCAweDJiM2U2YzFmLFxuICAgICAgICAgICAgIDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIsXG4gICAgICAgICAgICAgMHg1YmUwY2QxOSwgMHgxMzdlMjE3OSBdO1xuICB0aGlzLmsgPSBzaGE1MTJfSztcbiAgdGhpcy5XID0gbmV3IEFycmF5KDE2MCk7XG59XG51dGlscy5pbmhlcml0cyhTSEE1MTIsIEJsb2NrSGFzaCk7XG5leHBvcnRzLnNoYTUxMiA9IFNIQTUxMjtcblxuU0hBNTEyLmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEE1MTIub3V0U2l6ZSA9IDUxMjtcblNIQTUxMi5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEE1MTIucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEE1MTIucHJvdG90eXBlLl9wcmVwYXJlQmxvY2sgPSBmdW5jdGlvbiBfcHJlcGFyZUJsb2NrKG1zZywgc3RhcnQpIHtcbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgLy8gMzIgeCAzMmJpdCB3b3Jkc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDMyOyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgYzBfaGkgPSBnMV81MTJfaGkoV1tpIC0gNF0sIFdbaSAtIDNdKTsgIC8vIGkgLSAyXG4gICAgdmFyIGMwX2xvID0gZzFfNTEyX2xvKFdbaSAtIDRdLCBXW2kgLSAzXSk7XG4gICAgdmFyIGMxX2hpID0gV1tpIC0gMTRdOyAgLy8gaSAtIDdcbiAgICB2YXIgYzFfbG8gPSBXW2kgLSAxM107XG4gICAgdmFyIGMyX2hpID0gZzBfNTEyX2hpKFdbaSAtIDMwXSwgV1tpIC0gMjldKTsgIC8vIGkgLSAxNVxuICAgIHZhciBjMl9sbyA9IGcwXzUxMl9sbyhXW2kgLSAzMF0sIFdbaSAtIDI5XSk7XG4gICAgdmFyIGMzX2hpID0gV1tpIC0gMzJdOyAgLy8gaSAtIDE2XG4gICAgdmFyIGMzX2xvID0gV1tpIC0gMzFdO1xuXG4gICAgV1tpXSA9IHN1bTY0XzRfaGkoYzBfaGksIGMwX2xvLFxuICAgICAgICAgICAgICAgICAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgICAgICAgICAgICAgICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgYzNfaGksIGMzX2xvKTtcbiAgICBXW2kgKyAxXSA9IHN1bTY0XzRfbG8oYzBfaGksIGMwX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKGMwX2hpLCBjMF9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMzX2hpLCBjM19sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGM0X2hpLCBjNF9sbyk7XG4gICAgdmFyIFQxX2xvID0gc3VtNjRfNV9sbyhjMF9oaSwgYzBfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjMV9oaSwgYzFfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjMl9oaSwgYzJfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjM19oaSwgYzNfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjNF9oaSwgYzRfbG8pO1xuXG4gICAgdmFyIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgdmFyIGMwX2xvID0gczBfNTEyX2xvKGFoLCBhbCk7XG4gICAgdmFyIGMxX2hpID0gbWFqNjRfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG4gICAgdmFyIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbIDB4Y2JiYjlkNWQsIDB4YzEwNTllZDgsXG4gICAgICAgICAgICAgMHg2MjlhMjkyYSwgMHgzNjdjZDUwNyxcbiAgICAgICAgICAgICAweDkxNTkwMTVhLCAweDMwNzBkZDE3LFxuICAgICAgICAgICAgIDB4MTUyZmVjZDgsIDB4ZjcwZTU5MzksXG4gICAgICAgICAgICAgMHg2NzMzMjY2NywgMHhmZmMwMGIzMSxcbiAgICAgICAgICAgICAweDhlYjQ0YTg3LCAweDY4NTgxNTExLFxuICAgICAgICAgICAgIDB4ZGIwYzJlMGQsIDB4NjRmOThmYTcsXG4gICAgICAgICAgICAgMHg0N2I1NDgxZCwgMHhiZWZhNGZhNCBdO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMzg0LCBTSEE1MTIpO1xuZXhwb3J0cy5zaGEzODQgPSBTSEEzODQ7XG5cblNIQTM4NC5ibG9ja1NpemUgPSAxMDI0O1xuU0hBMzg0Lm91dFNpemUgPSAzODQ7XG5TSEEzODQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMzg0LnBhZExlbmd0aCA9IDEyODtcblxuU0hBMzg0LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmguc2xpY2UoMCwgMTIpLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwgMTIpLCAnYmlnJyk7XG59O1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFsgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSxcbiAgICAgICAgICAgICAweDEwMzI1NDc2LCAweGMzZDJlMWYwIF07XG4gIHRoaXMuVyA9IG5ldyBBcnJheSg4MCk7XG59XG5cbnV0aWxzLmluaGVyaXRzKFNIQTEsIEJsb2NrSGFzaCk7XG5leHBvcnRzLnNoYTEgPSBTSEExO1xuXG5TSEExLmJsb2NrU2l6ZSA9IDUxMjtcblNIQTEub3V0U2l6ZSA9IDE2MDtcblNIQTEuaG1hY1N0cmVuZ3RoID0gODA7XG5TSEExLnBhZExlbmd0aCA9IDY0O1xuXG5TSEExLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG5cbiAgZm9yKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHJvdGwzMihXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdLCAxKTtcblxuICB2YXIgYSA9IHRoaXMuaFswXTtcbiAgdmFyIGIgPSB0aGlzLmhbMV07XG4gIHZhciBjID0gdGhpcy5oWzJdO1xuICB2YXIgZCA9IHRoaXMuaFszXTtcbiAgdmFyIGUgPSB0aGlzLmhbNF07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG5cbmZ1bmN0aW9uIGNoMzIoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSBeICgofngpICYgeik7XG59XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cblxuZnVuY3Rpb24gczBfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCAyKSBeIHJvdHIzMih4LCAxMykgXiByb3RyMzIoeCwgMjIpO1xufVxuXG5mdW5jdGlvbiBzMV8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDYpIF4gcm90cjMyKHgsIDExKSBeIHJvdHIzMih4LCAyNSk7XG59XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuXG5mdW5jdGlvbiBnMV8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDE3KSBeIHJvdHIzMih4LCAxOSkgXiAoeCA+Pj4gMTApO1xufVxuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuXG5mdW5jdGlvbiBjaDY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCwgemwpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCwgemwpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoeGggJiB6aCkgXiAoeWggJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gbWFqNjRfbG8oeGgsIHhsLCB5aCwgeWwsIHpoLCB6bCkge1xuICB2YXIgciA9ICh4bCAmIHlsKSBeICh4bCAmIHpsKSBeICh5bCAmIHpsKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczBfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAyOCk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDIpOyAgLy8gMzRcbiAgdmFyIGMyX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgNyk7ICAvLyAzOVxuXG4gIHZhciByID0gYzBfbG8gXiBjMV9sbyBeIGMyX2xvO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE0KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTgpO1xuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA5KTsgIC8vIDQxXG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzBfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxKTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgOCk7XG4gIHZhciBjMl9oaSA9IHNocjY0X2hpKHhoLCB4bCwgNyk7XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzBfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxKTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgOCk7XG4gIHZhciBjMl9sbyA9IHNocjY0X2xvKHhoLCB4bCwgNyk7XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxOSk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDI5KTsgIC8vIDYxXG4gIHZhciBjMl9oaSA9IHNocjY0X2hpKHhoLCB4bCwgNik7XG5cbiAgdmFyIHIgPSBjMF9oaSBeIGMxX2hpIF4gYzJfaGk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gZzFfNTEyX2xvKHhoLCB4bCkge1xuICB2YXIgYzBfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOSk7XG4gIHZhciBjMV9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDI5KTsgIC8vIDYxXG4gIHZhciBjMl9sbyA9IHNocjY0X2xvKHhoLCB4bCwgNik7XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cbiIsInZhciB1dGlscyA9IGV4cG9ydHM7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHZhciBoaSA9IGMgPj4gODtcbiAgICAgICAgdmFyIGxvID0gYyAmIDB4ZmY7XG4gICAgICAgIGlmIChoaSlcbiAgICAgICAgICByZXMucHVzaChoaSwgbG8pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVzLnB1c2gobG8pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW5jID09PSAnaGV4Jykge1xuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1teYS16MC05XSsvaWcsICcnKTtcbiAgICAgIGlmIChtc2cubGVuZ3RoICUgMiAhPT0gMClcbiAgICAgICAgbXNnID0gJzAnICsgbXNnO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpICs9IDIpXG4gICAgICAgIHJlcy5wdXNoKHBhcnNlSW50KG1zZ1tpXSArIG1zZ1tpICsgMV0sIDE2KSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxudXRpbHMudG9BcnJheSA9IHRvQXJyYXk7XG5cbmZ1bmN0aW9uIHRvSGV4KG1zZykge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgIHJlcyArPSB6ZXJvMihtc2dbaV0udG9TdHJpbmcoMTYpKTtcbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnRvSGV4ID0gdG9IZXg7XG5cbmZ1bmN0aW9uIGh0b25sKHcpIHtcbiAgdmFyIHJlcyA9ICh3ID4+PiAyNCkgfFxuICAgICAgICAgICAgKCh3ID4+PiA4KSAmIDB4ZmYwMCkgfFxuICAgICAgICAgICAgKCh3IDw8IDgpICYgMHhmZjAwMDApIHxcbiAgICAgICAgICAgICgodyAmIDB4ZmYpIDw8IDI0KTtcbiAgcmV0dXJuIHJlcyA+Pj4gMDtcbn1cbnV0aWxzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnRvSGV4MzIgPSB0b0hleDMyO1xuXG5mdW5jdGlvbiB6ZXJvMih3b3JkKSB7XG4gIGlmICh3b3JkLmxlbmd0aCA9PT0gMSlcbiAgICByZXR1cm4gJzAnICsgd29yZDtcbiAgZWxzZVxuICAgIHJldHVybiB3b3JkO1xufVxudXRpbHMuemVybzIgPSB6ZXJvMjtcblxuZnVuY3Rpb24gemVybzgod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDcpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA2KVxuICAgIHJldHVybiAnMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDUpXG4gICAgcmV0dXJuICcwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDQpXG4gICAgcmV0dXJuICcwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAzKVxuICAgIHJldHVybiAnMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDIpXG4gICAgcmV0dXJuICcwMDAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbnV0aWxzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLmpvaW4zMiA9IGpvaW4zMjtcblxuZnVuY3Rpb24gc3BsaXQzMihtc2csIGVuZGlhbikge1xuICB2YXIgcmVzID0gbmV3IEFycmF5KG1zZy5sZW5ndGggKiA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrLCBrICs9IDQpIHtcbiAgICB2YXIgbSA9IG1zZ1tpXTtcbiAgICBpZiAoZW5kaWFuID09PSAnYmlnJykge1xuICAgICAgcmVzW2tdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trICsgM10gPSBtICYgMHhmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzW2sgKyAzXSA9IG0gPj4+IDI0O1xuICAgICAgcmVzW2sgKyAyXSA9IChtID4+PiAxNikgJiAweGZmO1xuICAgICAgcmVzW2sgKyAxXSA9IChtID4+PiA4KSAmIDB4ZmY7XG4gICAgICByZXNba10gPSBtICYgMHhmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnNwbGl0MzIgPSBzcGxpdDMyO1xuXG5mdW5jdGlvbiByb3RyMzIodywgYikge1xuICByZXR1cm4gKHcgPj4+IGIpIHwgKHcgPDwgKDMyIC0gYikpO1xufVxudXRpbHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxudXRpbHMucm90bDMyID0gcm90bDMyO1xuXG5mdW5jdGlvbiBzdW0zMihhLCBiKSB7XG4gIHJldHVybiAoYSArIGIpID4+PiAwO1xufVxudXRpbHMuc3VtMzIgPSBzdW0zMjtcblxuZnVuY3Rpb24gc3VtMzJfMyhhLCBiLCBjKSB7XG4gIHJldHVybiAoYSArIGIgKyBjKSA+Pj4gMDtcbn1cbnV0aWxzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbnV0aWxzLnN1bTMyXzQgPSBzdW0zMl80O1xuXG5mdW5jdGlvbiBzdW0zMl81KGEsIGIsIGMsIGQsIGUpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkICsgZSkgPj4+IDA7XG59XG51dGlscy5zdW0zMl81ID0gc3VtMzJfNTtcblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIG1zZykge1xuICBpZiAoIWNvbmQpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxudXRpbHMuYXNzZXJ0ID0gYXNzZXJ0O1xuXG51dGlscy5pbmhlcml0cyA9IGluaGVyaXRzO1xuXG5mdW5jdGlvbiBzdW02NChidWYsIHBvcywgYWgsIGFsKSB7XG4gIHZhciBiaCA9IGJ1Zltwb3NdO1xuICB2YXIgYmwgPSBidWZbcG9zICsgMV07XG5cbiAgdmFyIGxvID0gKGFsICsgYmwpID4+PiAwO1xuICB2YXIgaGkgPSAobG8gPCBhbCA/IDEgOiAwKSArIGFoICsgYmg7XG4gIGJ1Zltwb3NdID0gaGkgPj4+IDA7XG4gIGJ1Zltwb3MgKyAxXSA9IGxvO1xufVxuZXhwb3J0cy5zdW02NCA9IHN1bTY0O1xuXG5mdW5jdGlvbiBzdW02NF9oaShhaCwgYWwsIGJoLCBibCkge1xuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgcmV0dXJuIGhpID4+PiAwO1xufTtcbmV4cG9ydHMuc3VtNjRfaGkgPSBzdW02NF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfbG8oYWgsIGFsLCBiaCwgYmwpIHtcbiAgdmFyIGxvID0gYWwgKyBibDtcbiAgcmV0dXJuIGxvID4+PiAwO1xufTtcbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufTtcbmV4cG9ydHMuc3VtNjRfNF9oaSA9IHN1bTY0XzRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0XzRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsO1xuICByZXR1cm4gbG8gPj4+IDA7XG59O1xuZXhwb3J0cy5zdW02NF80X2xvID0gc3VtNjRfNF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNV9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwsIGVoLCBlbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBlbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZWwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGVoICsgY2Fycnk7XG4gIHJldHVybiBoaSA+Pj4gMDtcbn07XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufTtcbmV4cG9ydHMuc3VtNjRfNV9sbyA9IHN1bTY0XzVfbG87XG5cbmZ1bmN0aW9uIHJvdHI2NF9oaShhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhbCA8PCAoMzIgLSBudW0pKSB8IChhaCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59O1xuZXhwb3J0cy5yb3RyNjRfaGkgPSByb3RyNjRfaGk7XG5cbmZ1bmN0aW9uIHJvdHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59O1xuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufTtcbmV4cG9ydHMuc2hyNjRfaGkgPSBzaHI2NF9oaTtcblxuZnVuY3Rpb24gc2hyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufTtcbmV4cG9ydHMuc2hyNjRfbG8gPSBzaHI2NF9sbztcbiIsIi8qXHJcbiAgICBIVFRQIEhhd2sgQXV0aGVudGljYXRpb24gU2NoZW1lXHJcbiAgICBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCwgRXJhbiBIYW1tZXIgPGVyYW5AaGFtbWVyLmlvPlxyXG4gICAgQlNEIExpY2Vuc2VkXHJcbiovXHJcblxyXG5cclxuLy8gRGVjbGFyZSBuYW1lc3BhY2VcclxuXHJcbnZhciBoYXdrID0ge1xyXG4gICAgaW50ZXJuYWxzOiB7fVxyXG59O1xyXG5cclxuXHJcbmhhd2suY2xpZW50ID0ge1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIGFuIEF1dGhvcml6YXRpb24gaGVhZGVyIGZvciBhIGdpdmVuIHJlcXVlc3RcclxuXHJcbiAgICAvKlxyXG4gICAgICAgIHVyaTogJ2h0dHA6Ly9leGFtcGxlLmNvbS9yZXNvdXJjZT9hPWInIG9yIG9iamVjdCBnZW5lcmF0ZWQgYnkgaGF3ay51dGlscy5wYXJzZVVyaSgpXHJcbiAgICAgICAgbWV0aG9kOiBIVFRQIHZlcmIgKGUuZy4gJ0dFVCcsICdQT1NUJylcclxuICAgICAgICBvcHRpb25zOiB7XHJcblxyXG4gICAgICAgICAgICAvLyBSZXF1aXJlZFxyXG5cclxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHtcclxuICAgICAgICAgICAgICAgIGlkOiAnZGgzN2ZnajQ5MmplJyxcclxuICAgICAgICAgICAgICAgIGtleTogJ2FvaWplZG9haWpzZGxha3NqZGwnLFxyXG4gICAgICAgICAgICAgICAgYWxnb3JpdGhtOiAnc2hhMjU2JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICdzaGExJywgJ3NoYTI1NidcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8vIE9wdGlvbmFsXHJcblxyXG4gICAgICAgICAgICBleHQ6ICdhcHBsaWNhdGlvbi1zcGVjaWZpYycsICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbGljYXRpb24gc3BlY2lmaWMgZGF0YSBzZW50IHZpYSB0aGUgZXh0IGF0dHJpYnV0ZVxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCkgLyAxMDAwLCAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBwcmUtY2FsY3VsYXRlZCB0aW1lc3RhbXAgaW4gc2Vjb25kc1xyXG4gICAgICAgICAgICBub25jZTogJzIzMzRmMzRmJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBwcmUtZ2VuZXJhdGVkIG5vbmNlXHJcbiAgICAgICAgICAgIGxvY2FsdGltZU9mZnNldE1zZWM6IDQwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lIG9mZnNldCB0byBzeW5jIHdpdGggc2VydmVyIHRpbWUgKGlnbm9yZWQgaWYgdGltZXN0YW1wIHByb3ZpZGVkKVxyXG4gICAgICAgICAgICBwYXlsb2FkOiAne1wic29tZVwiOlwicGF5bG9hZFwifScsICAgICAgICAgICAgICAgICAgICAgIC8vIFVURi04IGVuY29kZWQgc3RyaW5nIGZvciBib2R5IGhhc2ggZ2VuZXJhdGlvbiAoaWdub3JlZCBpZiBoYXNoIHByb3ZpZGVkKVxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLCAgICAgICAgICAgICAgICAgICAgLy8gUGF5bG9hZCBjb250ZW50LXR5cGUgKGlnbm9yZWQgaWYgaGFzaCBwcm92aWRlZClcclxuICAgICAgICAgICAgaGFzaDogJ1U0TUtLU21pVnhrMzdKQ0NyQVZJalY9JywgICAgICAgICAgICAgICAgICAgIC8vIFByZS1jYWxjdWxhdGVkIHBheWxvYWQgaGFzaFxyXG4gICAgICAgICAgICBhcHA6ICcyNHMyMzQyM2YzNGR4JywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3ogYXBwbGljYXRpb24gaWRcclxuICAgICAgICAgICAgZGxnOiAnMjM0c3ozNHR3dzNzZCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE96IGRlbGVnYXRlZC1ieSBhcHBsaWNhdGlvbiBpZFxyXG4gICAgICAgIH1cclxuICAgICovXHJcblxyXG4gICAgaGVhZGVyOiBmdW5jdGlvbiAodXJpLCBtZXRob2QsIG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgZmllbGQ6ICcnLFxyXG4gICAgICAgICAgICBhcnRpZmFjdHM6IHt9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gVmFsaWRhdGUgaW5wdXRzXHJcblxyXG4gICAgICAgIGlmICghdXJpIHx8ICh0eXBlb2YgdXJpICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdXJpICE9PSAnb2JqZWN0JykgfHxcclxuICAgICAgICAgICAgIW1ldGhvZCB8fCB0eXBlb2YgbWV0aG9kICE9PSAnc3RyaW5nJyB8fFxyXG4gICAgICAgICAgICAhb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcclxuXHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnIgPSAnSW52YWxpZCBhcmd1bWVudCB0eXBlJztcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFwcGxpY2F0aW9uIHRpbWVcclxuXHJcbiAgICAgICAgdmFyIHRpbWVzdGFtcCA9IG9wdGlvbnMudGltZXN0YW1wIHx8IGhhd2sudXRpbHMubm93KG9wdGlvbnMubG9jYWx0aW1lT2Zmc2V0TXNlYyk7XHJcblxyXG4gICAgICAgIC8vIFZhbGlkYXRlIGNyZWRlbnRpYWxzXHJcblxyXG4gICAgICAgIHZhciBjcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHM7XHJcbiAgICAgICAgaWYgKCFjcmVkZW50aWFscyB8fFxyXG4gICAgICAgICAgICAhY3JlZGVudGlhbHMuaWQgfHxcclxuICAgICAgICAgICAgIWNyZWRlbnRpYWxzLmtleSB8fFxyXG4gICAgICAgICAgICAhY3JlZGVudGlhbHMuYWxnb3JpdGhtKSB7XHJcblxyXG4gICAgICAgICAgICByZXN1bHQuZXJyID0gJ0ludmFsaWQgY3JlZGVudGlhbHMgb2JqZWN0JztcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChoYXdrLmNyeXB0by5hbGdvcml0aG1zLmluZGV4T2YoY3JlZGVudGlhbHMuYWxnb3JpdGhtKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmVyciA9ICdVbmtub3duIGFsZ29yaXRobSc7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQYXJzZSBVUklcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB1cmkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHVyaSA9IGhhd2sudXRpbHMucGFyc2VVcmkodXJpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBzaWduYXR1cmVcclxuXHJcbiAgICAgICAgdmFyIGFydGlmYWN0cyA9IHtcclxuICAgICAgICAgICAgdHM6IHRpbWVzdGFtcCxcclxuICAgICAgICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UgfHwgaGF3ay51dGlscy5yYW5kb21TdHJpbmcoNiksXHJcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICAgICAgICByZXNvdXJjZTogdXJpLnJlc291cmNlLFxyXG4gICAgICAgICAgICBob3N0OiB1cmkuaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogdXJpLnBvcnQsXHJcbiAgICAgICAgICAgIGhhc2g6IG9wdGlvbnMuaGFzaCxcclxuICAgICAgICAgICAgZXh0OiBvcHRpb25zLmV4dCxcclxuICAgICAgICAgICAgYXBwOiBvcHRpb25zLmFwcCxcclxuICAgICAgICAgICAgZGxnOiBvcHRpb25zLmRsZ1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJlc3VsdC5hcnRpZmFjdHMgPSBhcnRpZmFjdHM7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBwYXlsb2FkIGhhc2hcclxuXHJcbiAgICAgICAgaWYgKCFhcnRpZmFjdHMuaGFzaCAmJlxyXG4gICAgICAgICAgICAob3B0aW9ucy5wYXlsb2FkIHx8IG9wdGlvbnMucGF5bG9hZCA9PT0gJycpKSB7XHJcblxyXG4gICAgICAgICAgICBhcnRpZmFjdHMuaGFzaCA9IGhhd2suY3J5cHRvLmNhbGN1bGF0ZVBheWxvYWRIYXNoKG9wdGlvbnMucGF5bG9hZCwgY3JlZGVudGlhbHMuYWxnb3JpdGhtLCBvcHRpb25zLmNvbnRlbnRUeXBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtYWMgPSBoYXdrLmNyeXB0by5jYWxjdWxhdGVNYWMoJ2hlYWRlcicsIGNyZWRlbnRpYWxzLCBhcnRpZmFjdHMpO1xyXG5cclxuICAgICAgICAvLyBDb25zdHJ1Y3QgaGVhZGVyXHJcblxyXG4gICAgICAgIHZhciBoYXNFeHQgPSBhcnRpZmFjdHMuZXh0ICE9PSBudWxsICYmIGFydGlmYWN0cy5leHQgIT09IHVuZGVmaW5lZCAmJiBhcnRpZmFjdHMuZXh0ICE9PSAnJzsgICAgICAgLy8gT3RoZXIgZmFsc2V5IHZhbHVlcyBhbGxvd2VkXHJcbiAgICAgICAgdmFyIGhlYWRlciA9ICdIYXdrIGlkPVwiJyArIGNyZWRlbnRpYWxzLmlkICtcclxuICAgICAgICAgICAgICAgICAgICAgJ1wiLCB0cz1cIicgKyBhcnRpZmFjdHMudHMgK1xyXG4gICAgICAgICAgICAgICAgICAgICAnXCIsIG5vbmNlPVwiJyArIGFydGlmYWN0cy5ub25jZSArXHJcbiAgICAgICAgICAgICAgICAgICAgIChhcnRpZmFjdHMuaGFzaCA/ICdcIiwgaGFzaD1cIicgKyBhcnRpZmFjdHMuaGFzaCA6ICcnKSArXHJcbiAgICAgICAgICAgICAgICAgICAgIChoYXNFeHQgPyAnXCIsIGV4dD1cIicgKyBoYXdrLnV0aWxzLmVzY2FwZUhlYWRlckF0dHJpYnV0ZShhcnRpZmFjdHMuZXh0KSA6ICcnKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICdcIiwgbWFjPVwiJyArIG1hYyArICdcIic7XHJcblxyXG4gICAgICAgIGlmIChhcnRpZmFjdHMuYXBwKSB7XHJcbiAgICAgICAgICAgIGhlYWRlciArPSAnLCBhcHA9XCInICsgYXJ0aWZhY3RzLmFwcCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAoYXJ0aWZhY3RzLmRsZyA/ICdcIiwgZGxnPVwiJyArIGFydGlmYWN0cy5kbGcgOiAnJykgKyAnXCInO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzdWx0LmZpZWxkID0gaGVhZGVyO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBHZW5lcmF0ZSBhIGJld2l0IHZhbHVlIGZvciBhIGdpdmVuIFVSSVxyXG5cclxuICAgIC8qXHJcbiAgICAgICAgdXJpOiAnaHR0cDovL2V4YW1wbGUuY29tL3Jlc291cmNlP2E9YidcclxuICAgICAgICBvcHRpb25zOiB7XHJcblxyXG4gICAgICAgICAgICAvLyBSZXF1aXJlZFxyXG5cclxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHtcclxuICAgICAgICAgICAgaWQ6ICdkaDM3ZmdqNDkyamUnLFxyXG4gICAgICAgICAgICBrZXk6ICdhb2lqZWRvYWlqc2RsYWtzamRsJyxcclxuICAgICAgICAgICAgYWxnb3JpdGhtOiAnc2hhMjU2JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NoYTEnLCAnc2hhMjU2J1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0dGxTZWM6IDYwICogNjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVFRMIGluIHNlY29uZHNcclxuXHJcbiAgICAgICAgICAgIC8vIE9wdGlvbmFsXHJcblxyXG4gICAgICAgICAgICBleHQ6ICdhcHBsaWNhdGlvbi1zcGVjaWZpYycsICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbGljYXRpb24gc3BlY2lmaWMgZGF0YSBzZW50IHZpYSB0aGUgZXh0IGF0dHJpYnV0ZVxyXG4gICAgICAgICAgICBsb2NhbHRpbWVPZmZzZXRNc2VjOiA0MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGltZSBvZmZzZXQgdG8gc3luYyB3aXRoIHNlcnZlciB0aW1lXHJcbiAgICAgICAgIH07XHJcbiAgICAqL1xyXG5cclxuICAgIGJld2l0OiBmdW5jdGlvbiAodXJpLCBvcHRpb25zKSB7XHJcblxyXG4gICAgICAgIC8vIFZhbGlkYXRlIGlucHV0c1xyXG5cclxuICAgICAgICBpZiAoIXVyaSB8fFxyXG4gICAgICAgICAgICAodHlwZW9mIHVyaSAhPT0gJ3N0cmluZycpIHx8XHJcbiAgICAgICAgICAgICFvcHRpb25zIHx8XHJcbiAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JyB8fFxyXG4gICAgICAgICAgICAhb3B0aW9ucy50dGxTZWMpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG9wdGlvbnMuZXh0ID0gKG9wdGlvbnMuZXh0ID09PSBudWxsIHx8IG9wdGlvbnMuZXh0ID09PSB1bmRlZmluZWQgPyAnJyA6IG9wdGlvbnMuZXh0KTsgICAgICAgLy8gWmVybyBpcyB2YWxpZCB2YWx1ZVxyXG5cclxuICAgICAgICAvLyBBcHBsaWNhdGlvbiB0aW1lXHJcblxyXG4gICAgICAgIHZhciBub3cgPSBoYXdrLnV0aWxzLm5vdyhvcHRpb25zLmxvY2FsdGltZU9mZnNldE1zZWMpO1xyXG5cclxuICAgICAgICAvLyBWYWxpZGF0ZSBjcmVkZW50aWFsc1xyXG5cclxuICAgICAgICB2YXIgY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzO1xyXG4gICAgICAgIGlmICghY3JlZGVudGlhbHMgfHxcclxuICAgICAgICAgICAgIWNyZWRlbnRpYWxzLmlkIHx8XHJcbiAgICAgICAgICAgICFjcmVkZW50aWFscy5rZXkgfHxcclxuICAgICAgICAgICAgIWNyZWRlbnRpYWxzLmFsZ29yaXRobSkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhhd2suY3J5cHRvLmFsZ29yaXRobXMuaW5kZXhPZihjcmVkZW50aWFscy5hbGdvcml0aG0pID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQYXJzZSBVUklcclxuXHJcbiAgICAgICAgdXJpID0gaGF3ay51dGlscy5wYXJzZVVyaSh1cmkpO1xyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgc2lnbmF0dXJlXHJcblxyXG4gICAgICAgIHZhciBleHAgPSBub3cgKyBvcHRpb25zLnR0bFNlYztcclxuICAgICAgICB2YXIgbWFjID0gaGF3ay5jcnlwdG8uY2FsY3VsYXRlTWFjKCdiZXdpdCcsIGNyZWRlbnRpYWxzLCB7XHJcbiAgICAgICAgICAgIHRzOiBleHAsXHJcbiAgICAgICAgICAgIG5vbmNlOiAnJyxcclxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgcmVzb3VyY2U6IHVyaS5yZXNvdXJjZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gdHJhaWxpbmcgJz8nIGFuZCBxdWVyeSBwYXJhbXNcclxuICAgICAgICAgICAgaG9zdDogdXJpLmhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQ6IHVyaS5wb3J0LFxyXG4gICAgICAgICAgICBleHQ6IG9wdGlvbnMuZXh0XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIENvbnN0cnVjdCBiZXdpdDogaWRcXGV4cFxcbWFjXFxleHRcclxuXHJcbiAgICAgICAgdmFyIGJld2l0ID0gY3JlZGVudGlhbHMuaWQgKyAnXFxcXCcgKyBleHAgKyAnXFxcXCcgKyBtYWMgKyAnXFxcXCcgKyBvcHRpb25zLmV4dDtcclxuICAgICAgICByZXR1cm4gaGF3ay51dGlscy5iYXNlNjR1cmxFbmNvZGUoYmV3aXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSBzZXJ2ZXIgcmVzcG9uc2VcclxuXHJcbiAgICAvKlxyXG4gICAgICAgIHJlcXVlc3Q6ICAgIG9iamVjdCBjcmVhdGVkIHZpYSAnbmV3IFhNTEh0dHBSZXF1ZXN0KCknIGFmdGVyIHJlc3BvbnNlIHJlY2VpdmVkXHJcbiAgICAgICAgYXJ0aWZhY3RzOiAgb2JqZWN0IHJlY2VpdmVkIGZyb20gaGVhZGVyKCkuYXJ0aWZhY3RzXHJcbiAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBwYXlsb2FkOiAgICBvcHRpb25hbCBwYXlsb2FkIHJlY2VpdmVkXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiAgIHNwZWNpZmllcyBpZiBhIFNlcnZlci1BdXRob3JpemF0aW9uIGhlYWRlciBpcyByZXF1aXJlZC4gRGVmYXVsdHMgdG8gJ2ZhbHNlJ1xyXG4gICAgICAgIH1cclxuICAgICovXHJcblxyXG4gICAgYXV0aGVudGljYXRlOiBmdW5jdGlvbiAocmVxdWVzdCwgY3JlZGVudGlhbHMsIGFydGlmYWN0cywgb3B0aW9ucykge1xyXG5cclxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICAgICAgdmFyIGdldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5nZXRSZXNwb25zZUhlYWRlciA/IHJlcXVlc3QuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSkgOiByZXF1ZXN0LmdldEhlYWRlcihuYW1lKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgd3d3QXV0aGVudGljYXRlID0gZ2V0SGVhZGVyKCd3d3ctYXV0aGVudGljYXRlJyk7XHJcbiAgICAgICAgaWYgKHd3d0F1dGhlbnRpY2F0ZSkge1xyXG5cclxuICAgICAgICAgICAgLy8gUGFyc2UgSFRUUCBXV1ctQXV0aGVudGljYXRlIGhlYWRlclxyXG5cclxuICAgICAgICAgICAgdmFyIHd3d0F0dHJpYnV0ZXMgPSBoYXdrLnV0aWxzLnBhcnNlQXV0aG9yaXphdGlvbkhlYWRlcih3d3dBdXRoZW50aWNhdGUsIFsndHMnLCAndHNtJywgJ2Vycm9yJ10pO1xyXG4gICAgICAgICAgICBpZiAoIXd3d0F0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHd3d0F0dHJpYnV0ZXMudHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0c20gPSBoYXdrLmNyeXB0by5jYWxjdWxhdGVUc01hYyh3d3dBdHRyaWJ1dGVzLnRzLCBjcmVkZW50aWFscyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHNtICE9PSB3d3dBdHRyaWJ1dGVzLnRzbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBoYXdrLnV0aWxzLnNldE50cE9mZnNldCh3d3dBdHRyaWJ1dGVzLnRzIC0gTWF0aC5mbG9vcigobmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMCkpOyAgICAgLy8gS2VlcCBvZmZzZXQgYXQgMSBzZWNvbmQgcHJlY2lzaW9uXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBhcnNlIEhUVFAgU2VydmVyLUF1dGhvcml6YXRpb24gaGVhZGVyXHJcblxyXG4gICAgICAgIHZhciBzZXJ2ZXJBdXRob3JpemF0aW9uID0gZ2V0SGVhZGVyKCdzZXJ2ZXItYXV0aG9yaXphdGlvbicpO1xyXG4gICAgICAgIGlmICghc2VydmVyQXV0aG9yaXphdGlvbiAmJlxyXG4gICAgICAgICAgICAhb3B0aW9ucy5yZXF1aXJlZCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGhhd2sudXRpbHMucGFyc2VBdXRob3JpemF0aW9uSGVhZGVyKHNlcnZlckF1dGhvcml6YXRpb24sIFsnbWFjJywgJ2V4dCcsICdoYXNoJ10pO1xyXG4gICAgICAgIGlmICghYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbW9kQXJ0aWZhY3RzID0ge1xyXG4gICAgICAgICAgICB0czogYXJ0aWZhY3RzLnRzLFxyXG4gICAgICAgICAgICBub25jZTogYXJ0aWZhY3RzLm5vbmNlLFxyXG4gICAgICAgICAgICBtZXRob2Q6IGFydGlmYWN0cy5tZXRob2QsXHJcbiAgICAgICAgICAgIHJlc291cmNlOiBhcnRpZmFjdHMucmVzb3VyY2UsXHJcbiAgICAgICAgICAgIGhvc3Q6IGFydGlmYWN0cy5ob3N0LFxyXG4gICAgICAgICAgICBwb3J0OiBhcnRpZmFjdHMucG9ydCxcclxuICAgICAgICAgICAgaGFzaDogYXR0cmlidXRlcy5oYXNoLFxyXG4gICAgICAgICAgICBleHQ6IGF0dHJpYnV0ZXMuZXh0LFxyXG4gICAgICAgICAgICBhcHA6IGFydGlmYWN0cy5hcHAsXHJcbiAgICAgICAgICAgIGRsZzogYXJ0aWZhY3RzLmRsZ1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciBtYWMgPSBoYXdrLmNyeXB0by5jYWxjdWxhdGVNYWMoJ3Jlc3BvbnNlJywgY3JlZGVudGlhbHMsIG1vZEFydGlmYWN0cyk7XHJcbiAgICAgICAgaWYgKG1hYyAhPT0gYXR0cmlidXRlcy5tYWMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFvcHRpb25zLnBheWxvYWQgJiZcclxuICAgICAgICAgICAgb3B0aW9ucy5wYXlsb2FkICE9PSAnJykge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWF0dHJpYnV0ZXMuaGFzaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FsY3VsYXRlZEhhc2ggPSBoYXdrLmNyeXB0by5jYWxjdWxhdGVQYXlsb2FkSGFzaChvcHRpb25zLnBheWxvYWQsIGNyZWRlbnRpYWxzLmFsZ29yaXRobSwgZ2V0SGVhZGVyKCdjb250ZW50LXR5cGUnKSk7XHJcbiAgICAgICAgcmV0dXJuIChjYWxjdWxhdGVkSGFzaCA9PT0gYXR0cmlidXRlcy5oYXNoKTtcclxuICAgIH0sXHJcblxyXG4gICAgbWVzc2FnZTogZnVuY3Rpb24gKGhvc3QsIHBvcnQsIG1lc3NhZ2UsIG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgLy8gVmFsaWRhdGUgaW5wdXRzXHJcblxyXG4gICAgICAgIGlmICghaG9zdCB8fCB0eXBlb2YgaG9zdCAhPT0gJ3N0cmluZycgfHxcclxuICAgICAgICAgICAgIXBvcnQgfHwgdHlwZW9mIHBvcnQgIT09ICdudW1iZXInIHx8XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBtZXNzYWdlICE9PSAnc3RyaW5nJyB8fFxyXG4gICAgICAgICAgICAhb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQXBwbGljYXRpb24gdGltZVxyXG5cclxuICAgICAgICB2YXIgdGltZXN0YW1wID0gb3B0aW9ucy50aW1lc3RhbXAgfHwgaGF3ay51dGlscy5ub3cob3B0aW9ucy5sb2NhbHRpbWVPZmZzZXRNc2VjKTtcclxuXHJcbiAgICAgICAgLy8gVmFsaWRhdGUgY3JlZGVudGlhbHNcclxuXHJcbiAgICAgICAgdmFyIGNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscztcclxuICAgICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8XHJcbiAgICAgICAgICAgICFjcmVkZW50aWFscy5pZCB8fFxyXG4gICAgICAgICAgICAhY3JlZGVudGlhbHMua2V5IHx8XHJcbiAgICAgICAgICAgICFjcmVkZW50aWFscy5hbGdvcml0aG0pIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEludmFsaWQgY3JlZGVudGlhbCBvYmplY3RcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGF3ay5jcnlwdG8uYWxnb3JpdGhtcy5pbmRleE9mKGNyZWRlbnRpYWxzLmFsZ29yaXRobSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHNpZ25hdHVyZVxyXG5cclxuICAgICAgICB2YXIgYXJ0aWZhY3RzID0ge1xyXG4gICAgICAgICAgICB0czogdGltZXN0YW1wLFxyXG4gICAgICAgICAgICBub25jZTogb3B0aW9ucy5ub25jZSB8fCBoYXdrLnV0aWxzLnJhbmRvbVN0cmluZyg2KSxcclxuICAgICAgICAgICAgaG9zdDogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgaGFzaDogaGF3ay5jcnlwdG8uY2FsY3VsYXRlUGF5bG9hZEhhc2gobWVzc2FnZSwgY3JlZGVudGlhbHMuYWxnb3JpdGhtKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIENvbnN0cnVjdCBhdXRob3JpemF0aW9uXHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgIGlkOiBjcmVkZW50aWFscy5pZCxcclxuICAgICAgICAgICAgdHM6IGFydGlmYWN0cy50cyxcclxuICAgICAgICAgICAgbm9uY2U6IGFydGlmYWN0cy5ub25jZSxcclxuICAgICAgICAgICAgaGFzaDogYXJ0aWZhY3RzLmhhc2gsXHJcbiAgICAgICAgICAgIG1hYzogaGF3ay5jcnlwdG8uY2FsY3VsYXRlTWFjKCdtZXNzYWdlJywgY3JlZGVudGlhbHMsIGFydGlmYWN0cylcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICBhdXRoZW50aWNhdGVUaW1lc3RhbXA6IGZ1bmN0aW9uIChtZXNzYWdlLCBjcmVkZW50aWFscywgdXBkYXRlQ2xvY2spIHsgICAgICAgICAgIC8vIHVwZGF0ZUNsb2NrIGRlZmF1bHRzIHRvIHRydWVcclxuXHJcbiAgICAgICAgdmFyIHRzbSA9IGhhd2suY3J5cHRvLmNhbGN1bGF0ZVRzTWFjKG1lc3NhZ2UudHMsIGNyZWRlbnRpYWxzKTtcclxuICAgICAgICBpZiAodHNtICE9PSBtZXNzYWdlLnRzbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodXBkYXRlQ2xvY2sgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGhhd2sudXRpbHMuc2V0TnRwT2Zmc2V0KG1lc3NhZ2UudHMgLSBNYXRoLmZsb29yKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLyAxMDAwKSk7ICAgIC8vIEtlZXAgb2Zmc2V0IGF0IDEgc2Vjb25kIHByZWNpc2lvblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuaGF3ay5jcnlwdG8gPSB7XHJcblxyXG4gICAgaGVhZGVyVmVyc2lvbjogJzEnLFxyXG5cclxuICAgIGFsZ29yaXRobXM6IFsnc2hhMScsICdzaGEyNTYnXSxcclxuXHJcbiAgICBjYWxjdWxhdGVNYWM6IGZ1bmN0aW9uICh0eXBlLCBjcmVkZW50aWFscywgb3B0aW9ucykge1xyXG5cclxuICAgICAgICB2YXIgbm9ybWFsaXplZCA9IGhhd2suY3J5cHRvLmdlbmVyYXRlTm9ybWFsaXplZFN0cmluZyh0eXBlLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgdmFyIGhtYWMgPSBDcnlwdG9KU1snSG1hYycgKyBjcmVkZW50aWFscy5hbGdvcml0aG0udG9VcHBlckNhc2UoKV0obm9ybWFsaXplZCwgY3JlZGVudGlhbHMua2V5KTtcclxuICAgICAgICByZXR1cm4gaG1hYy50b1N0cmluZyhDcnlwdG9KUy5lbmMuQmFzZTY0KTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2VuZXJhdGVOb3JtYWxpemVkU3RyaW5nOiBmdW5jdGlvbiAodHlwZSwgb3B0aW9ucykge1xyXG5cclxuICAgICAgICB2YXIgbm9ybWFsaXplZCA9ICdoYXdrLicgKyBoYXdrLmNyeXB0by5oZWFkZXJWZXJzaW9uICsgJy4nICsgdHlwZSArICdcXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHMgKyAnXFxuJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm5vbmNlICsgJ1xcbicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMubWV0aG9kIHx8ICcnKS50b1VwcGVyQ2FzZSgpICsgJ1xcbicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbnMucmVzb3VyY2UgfHwgJycpICsgJ1xcbicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ob3N0LnRvTG93ZXJDYXNlKCkgKyAnXFxuJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnBvcnQgKyAnXFxuJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9ucy5oYXNoIHx8ICcnKSArICdcXG4nO1xyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy5leHQpIHtcclxuICAgICAgICAgICAgbm9ybWFsaXplZCArPSBvcHRpb25zLmV4dC5yZXBsYWNlKCdcXFxcJywgJ1xcXFxcXFxcJykucmVwbGFjZSgnXFxuJywgJ1xcXFxuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBub3JtYWxpemVkICs9ICdcXG4nO1xyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy5hcHApIHtcclxuICAgICAgICAgICAgbm9ybWFsaXplZCArPSBvcHRpb25zLmFwcCArICdcXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9ucy5kbGcgfHwgJycpICsgJ1xcbic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZDtcclxuICAgIH0sXHJcblxyXG4gICAgY2FsY3VsYXRlUGF5bG9hZEhhc2g6IGZ1bmN0aW9uIChwYXlsb2FkLCBhbGdvcml0aG0sIGNvbnRlbnRUeXBlKSB7XHJcblxyXG4gICAgICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuYWxnb1thbGdvcml0aG0udG9VcHBlckNhc2UoKV0uY3JlYXRlKCk7XHJcbiAgICAgICAgaGFzaC51cGRhdGUoJ2hhd2suJyArIGhhd2suY3J5cHRvLmhlYWRlclZlcnNpb24gKyAnLnBheWxvYWRcXG4nKTtcclxuICAgICAgICBoYXNoLnVwZGF0ZShoYXdrLnV0aWxzLnBhcnNlQ29udGVudFR5cGUoY29udGVudFR5cGUpICsgJ1xcbicpO1xyXG4gICAgICAgIGhhc2gudXBkYXRlKHBheWxvYWQpO1xyXG4gICAgICAgIGhhc2gudXBkYXRlKCdcXG4nKTtcclxuICAgICAgICByZXR1cm4gaGFzaC5maW5hbGl6ZSgpLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5CYXNlNjQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjYWxjdWxhdGVUc01hYzogZnVuY3Rpb24gKHRzLCBjcmVkZW50aWFscykge1xyXG5cclxuICAgICAgICB2YXIgaGFzaCA9IENyeXB0b0pTWydIbWFjJyArIGNyZWRlbnRpYWxzLmFsZ29yaXRobS50b1VwcGVyQ2FzZSgpXSgnaGF3ay4nICsgaGF3ay5jcnlwdG8uaGVhZGVyVmVyc2lvbiArICcudHNcXG4nICsgdHMgKyAnXFxuJywgY3JlZGVudGlhbHMua2V5KTtcclxuICAgICAgICByZXR1cm4gaGFzaC50b1N0cmluZyhDcnlwdG9KUy5lbmMuQmFzZTY0KTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLyBsb2NhbFN0b3JhZ2UgY29tcGF0aWJsZSBpbnRlcmZhY2VcclxuXHJcbmhhd2suaW50ZXJuYWxzLkxvY2FsU3RvcmFnZSA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB0aGlzLl9jYWNoZSA9IHt9O1xyXG4gICAgdGhpcy5sZW5ndGggPSAwO1xyXG5cclxuICAgIHRoaXMuZ2V0SXRlbSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmhhc093blByb3BlcnR5KGtleSkgPyBTdHJpbmcodGhpcy5fY2FjaGVba2V5XSkgOiBudWxsO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNldEl0ZW0gPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xyXG5cclxuICAgICAgICB0aGlzLl9jYWNoZVtrZXldID0gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IE9iamVjdC5rZXlzKHRoaXMuX2NhY2hlKS5sZW5ndGg7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucmVtb3ZlSXRlbSA9IGZ1bmN0aW9uIChrZXkpIHtcclxuXHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX2NhY2hlW2tleV07XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBPYmplY3Qua2V5cyh0aGlzLl9jYWNoZSkubGVuZ3RoO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB0aGlzLl9jYWNoZSA9IHt9O1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5rZXkgPSBmdW5jdGlvbiAoaSkge1xyXG5cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fY2FjaGUpW2kgfHwgMF07XHJcbiAgICB9O1xyXG59O1xyXG5cclxuXHJcbmhhd2sudXRpbHMgPSB7XHJcblxyXG4gICAgc3RvcmFnZTogbmV3IGhhd2suaW50ZXJuYWxzLkxvY2FsU3RvcmFnZSgpLFxyXG5cclxuICAgIHNldFN0b3JhZ2U6IGZ1bmN0aW9uIChzdG9yYWdlKSB7XHJcblxyXG4gICAgICAgIHZhciBudHBPZmZzZXQgPSBoYXdrLnV0aWxzLnN0b3JhZ2UuZ2V0SXRlbSgnaGF3a19udHBfb2Zmc2V0Jyk7XHJcbiAgICAgICAgaGF3ay51dGlscy5zdG9yYWdlID0gc3RvcmFnZTtcclxuICAgICAgICBpZiAobnRwT2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIGhhd2sudXRpbHMuc2V0TnRwT2Zmc2V0KG50cE9mZnNldCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzZXROdHBPZmZzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaGF3ay51dGlscy5zdG9yYWdlLnNldEl0ZW0oJ2hhd2tfbnRwX29mZnNldCcsIG9mZnNldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW2hhd2tdIGNvdWxkIG5vdCB3cml0ZSB0byBzdG9yYWdlLicpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXROdHBPZmZzZXQ6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGhhd2sudXRpbHMuc3RvcmFnZS5nZXRJdGVtKCdoYXdrX250cF9vZmZzZXQnKTtcclxuICAgICAgICBpZiAoIW9mZnNldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZUludChvZmZzZXQsIDEwKTtcclxuICAgIH0sXHJcblxyXG4gICAgbm93OiBmdW5jdGlvbiAobG9jYWx0aW1lT2Zmc2V0TXNlYykge1xyXG5cclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSArIChsb2NhbHRpbWVPZmZzZXRNc2VjIHx8IDApKSAvIDEwMDApICsgaGF3ay51dGlscy5nZXROdHBPZmZzZXQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZXNjYXBlSGVhZGVyQXR0cmlidXRlOiBmdW5jdGlvbiAoYXR0cmlidXRlKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGUucmVwbGFjZSgvXFxcXC9nLCAnXFxcXFxcXFwnKS5yZXBsYWNlKC9cXFwiL2csICdcXFxcXCInKTtcclxuICAgIH0sXHJcblxyXG4gICAgcGFyc2VDb250ZW50VHlwZTogZnVuY3Rpb24gKGhlYWRlcikge1xyXG5cclxuICAgICAgICBpZiAoIWhlYWRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaGVhZGVyLnNwbGl0KCc7JylbMF0ucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhcnNlQXV0aG9yaXphdGlvbkhlYWRlcjogZnVuY3Rpb24gKGhlYWRlciwga2V5cykge1xyXG5cclxuICAgICAgICBpZiAoIWhlYWRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoZWFkZXJQYXJ0cyA9IGhlYWRlci5tYXRjaCgvXihcXHcrKSg/OlxccysoLiopKT8kLyk7ICAgICAgIC8vIEhlYWRlcjogc2NoZW1lWyBzb21ldGhpbmddXHJcbiAgICAgICAgaWYgKCFoZWFkZXJQYXJ0cykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY2hlbWUgPSBoZWFkZXJQYXJ0c1sxXTtcclxuICAgICAgICBpZiAoc2NoZW1lLnRvTG93ZXJDYXNlKCkgIT09ICdoYXdrJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzU3RyaW5nID0gaGVhZGVyUGFydHNbMl07XHJcbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcclxuICAgICAgICB2YXIgdmVyaWZ5ID0gYXR0cmlidXRlc1N0cmluZy5yZXBsYWNlKC8oXFx3Kyk9XCIoW15cIlxcXFxdKilcIlxccyooPzosXFxzKnwkKS9nLCBmdW5jdGlvbiAoJDAsICQxLCAkMikge1xyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgdmFsaWQgYXR0cmlidXRlIG5hbWVzXHJcblxyXG4gICAgICAgICAgICBpZiAoa2V5cy5pbmRleE9mKCQxKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQWxsb3dlZCBhdHRyaWJ1dGUgdmFsdWUgY2hhcmFjdGVyczogISMkJSYnKCkqKywtLi86Ozw9Pj9AW11eX2B7fH1+IGFuZCBzcGFjZSwgYS16LCBBLVosIDAtOVxyXG5cclxuICAgICAgICAgICAgaWYgKCQyLm1hdGNoKC9eWyBcXHdcXCEjXFwkJSYnXFwoXFwpXFwqXFwrLFxcLVxcLlxcL1xcOjs8XFw9PlxcP0BcXFtcXF1cXF5gXFx7XFx8XFx9fl0rJC8pID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGVzXHJcblxyXG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eSgkMSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXR0cmlidXRlc1skMV0gPSAkMjtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodmVyaWZ5ICE9PSAnJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xyXG4gICAgfSxcclxuXHJcbiAgICByYW5kb21TdHJpbmc6IGZ1bmN0aW9uIChzaXplKSB7XHJcblxyXG4gICAgICAgIHZhciByYW5kb21Tb3VyY2UgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODknO1xyXG4gICAgICAgIHZhciBsZW4gPSByYW5kb21Tb3VyY2UubGVuZ3RoO1xyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcclxuICAgICAgICAgICAgcmVzdWx0W2ldID0gcmFuZG9tU291cmNlW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxlbildO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXJpUmVnZXg6IC9eKFteOl0rKVxcOlxcL1xcLyg/OlteQF0qQCk/KFteXFwvOl0rKSg/OlxcOihcXGQrKSk/KFteI10qKSg/OiMuKik/JC8sICAgICAgIC8vIHNjaGVtZTovL2NyZWRlbnRpYWxzQGhvc3Q6cG9ydC9yZXNvdXJjZSNmcmFnbWVudFxyXG4gICAgcGFyc2VVcmk6IGZ1bmN0aW9uIChpbnB1dCkge1xyXG5cclxuICAgICAgICB2YXIgcGFydHMgPSBpbnB1dC5tYXRjaChoYXdrLnV0aWxzLnVyaVJlZ2V4KTtcclxuICAgICAgICBpZiAoIXBhcnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGhvc3Q6ICcnLCBwb3J0OiAnJywgcmVzb3VyY2U6ICcnIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2NoZW1lID0gcGFydHNbMV0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB2YXIgdXJpID0ge1xyXG4gICAgICAgICAgICBob3N0OiBwYXJ0c1syXSxcclxuICAgICAgICAgICAgcG9ydDogcGFydHNbM10gfHwgKHNjaGVtZSA9PT0gJ2h0dHAnID8gJzgwJyA6IChzY2hlbWUgPT09ICdodHRwcycgPyAnNDQzJyA6ICcnKSksXHJcbiAgICAgICAgICAgIHJlc291cmNlOiBwYXJ0c1s0XVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiB1cmk7XHJcbiAgICB9LFxyXG5cclxuICAgIGJhc2U2NHVybEVuY29kZTogZnVuY3Rpb24gKHZhbHVlKSB7XHJcblxyXG4gICAgICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgdmFyIGVuY29kZWQgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xyXG4gICAgICAgIHJldHVybiBlbmNvZGVkLnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpLnJlcGxhY2UoL1xcPS9nLCAnJyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8gJGxhYjpjb3ZlcmFnZTpvZmYkXHJcbi8qIGVzbGludC1kaXNhYmxlICovXHJcblxyXG4vLyBCYXNlZCBvbjogQ3J5cHRvLUpTIHYzLjEuMlxyXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMywgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL1xyXG4vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxyXG5cclxudmFyIENyeXB0b0pTID0gQ3J5cHRvSlMgfHwgZnVuY3Rpb24gKGgsIHIpIHsgdmFyIGsgPSB7fSwgbCA9IGsubGliID0ge30sIG4gPSBmdW5jdGlvbiAoKSB7IH0sIGYgPSBsLkJhc2UgPSB7IGV4dGVuZDogZnVuY3Rpb24gKGEpIHsgbi5wcm90b3R5cGUgPSB0aGlzOyB2YXIgYiA9IG5ldyBuOyBhICYmIGIubWl4SW4oYSk7IGIuaGFzT3duUHJvcGVydHkoXCJpbml0XCIpIHx8IChiLmluaXQgPSBmdW5jdGlvbiAoKSB7IGIuJHN1cGVyLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9KTsgYi5pbml0LnByb3RvdHlwZSA9IGI7IGIuJHN1cGVyID0gdGhpczsgcmV0dXJuIGIgfSwgY3JlYXRlOiBmdW5jdGlvbiAoKSB7IHZhciBhID0gdGhpcy5leHRlbmQoKTsgYS5pbml0LmFwcGx5KGEsIGFyZ3VtZW50cyk7IHJldHVybiBhIH0sIGluaXQ6IGZ1bmN0aW9uICgpIHsgfSwgbWl4SW46IGZ1bmN0aW9uIChhKSB7IGZvciAodmFyIGIgaW4gYSkgYS5oYXNPd25Qcm9wZXJ0eShiKSAmJiAodGhpc1tiXSA9IGFbYl0pOyBhLmhhc093blByb3BlcnR5KFwidG9TdHJpbmdcIikgJiYgKHRoaXMudG9TdHJpbmcgPSBhLnRvU3RyaW5nKSB9LCBjbG9uZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcykgfSB9LCBqID0gbC5Xb3JkQXJyYXkgPSBmLmV4dGVuZCh7IGluaXQ6IGZ1bmN0aW9uIChhLCBiKSB7IGEgPSB0aGlzLndvcmRzID0gYSB8fCBbXTsgdGhpcy5zaWdCeXRlcyA9IGIgIT0gciA/IGIgOiA0ICogYS5sZW5ndGggfSwgdG9TdHJpbmc6IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoYSB8fCBzKS5zdHJpbmdpZnkodGhpcykgfSwgY29uY2F0OiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IHRoaXMud29yZHMsIGQgPSBhLndvcmRzLCBjID0gdGhpcy5zaWdCeXRlczsgYSA9IGEuc2lnQnl0ZXM7IHRoaXMuY2xhbXAoKTsgaWYgKGMgJSA0KSBmb3IgKHZhciBlID0gMDsgZSA8IGE7IGUrKykgYltjICsgZSA+Pj4gMl0gfD0gKGRbZSA+Pj4gMl0gPj4+IDI0IC0gOCAqIChlICUgNCkgJiAyNTUpIDw8IDI0IC0gOCAqICgoYyArIGUpICUgNCk7IGVsc2UgaWYgKDY1NTM1IDwgZC5sZW5ndGgpIGZvciAoZSA9IDA7IGUgPCBhOyBlICs9IDQpIGJbYyArIGUgPj4+IDJdID0gZFtlID4+PiAyXTsgZWxzZSBiLnB1c2guYXBwbHkoYiwgZCk7IHRoaXMuc2lnQnl0ZXMgKz0gYTsgcmV0dXJuIHRoaXMgfSwgY2xhbXA6IGZ1bmN0aW9uICgpIHsgdmFyIGEgPSB0aGlzLndvcmRzLCBiID0gdGhpcy5zaWdCeXRlczsgYVtiID4+PiAyXSAmPSA0Mjk0OTY3Mjk1IDw8IDMyIC0gOCAqIChiICUgNCk7IGEubGVuZ3RoID0gaC5jZWlsKGIgLyA0KSB9LCBjbG9uZTogZnVuY3Rpb24gKCkgeyB2YXIgYSA9IGYuY2xvbmUuY2FsbCh0aGlzKTsgYS53b3JkcyA9IHRoaXMud29yZHMuc2xpY2UoMCk7IHJldHVybiBhIH0sIHJhbmRvbTogZnVuY3Rpb24gKGEpIHsgZm9yICh2YXIgYiA9IFtdLCBkID0gMDsgZCA8IGE7IGQgKz0gNCkgYi5wdXNoKDQyOTQ5NjcyOTYgKiBoLnJhbmRvbSgpIHwgMCk7IHJldHVybiBuZXcgai5pbml0KGIsIGEpIH0gfSksIG0gPSBrLmVuYyA9IHt9LCBzID0gbS5IZXggPSB7IHN0cmluZ2lmeTogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLndvcmRzOyBhID0gYS5zaWdCeXRlczsgZm9yICh2YXIgZCA9IFtdLCBjID0gMDsgYyA8IGE7IGMrKykgeyB2YXIgZSA9IGJbYyA+Pj4gMl0gPj4+IDI0IC0gOCAqIChjICUgNCkgJiAyNTU7IGQucHVzaCgoZSA+Pj4gNCkudG9TdHJpbmcoMTYpKTsgZC5wdXNoKChlICYgMTUpLnRvU3RyaW5nKDE2KSkgfSByZXR1cm4gZC5qb2luKFwiXCIpIH0sIHBhcnNlOiBmdW5jdGlvbiAoYSkgeyBmb3IgKHZhciBiID0gYS5sZW5ndGgsIGQgPSBbXSwgYyA9IDA7IGMgPCBiOyBjICs9IDIpIGRbYyA+Pj4gM10gfD0gcGFyc2VJbnQoYS5zdWJzdHIoYywgMiksIDE2KSA8PCAyNCAtIDQgKiAoYyAlIDgpOyByZXR1cm4gbmV3IGouaW5pdChkLCBiIC8gMikgfSB9LCBwID0gbS5MYXRpbjEgPSB7IHN0cmluZ2lmeTogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLndvcmRzOyBhID0gYS5zaWdCeXRlczsgZm9yICh2YXIgZCA9IFtdLCBjID0gMDsgYyA8IGE7IGMrKykgZC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYltjID4+PiAyXSA+Pj4gMjQgLSA4ICogKGMgJSA0KSAmIDI1NSkpOyByZXR1cm4gZC5qb2luKFwiXCIpIH0sIHBhcnNlOiBmdW5jdGlvbiAoYSkgeyBmb3IgKHZhciBiID0gYS5sZW5ndGgsIGQgPSBbXSwgYyA9IDA7IGMgPCBiOyBjKyspIGRbYyA+Pj4gMl0gfD0gKGEuY2hhckNvZGVBdChjKSAmIDI1NSkgPDwgMjQgLSA4ICogKGMgJSA0KTsgcmV0dXJuIG5ldyBqLmluaXQoZCwgYikgfSB9LCB0ID0gbS5VdGY4ID0geyBzdHJpbmdpZnk6IGZ1bmN0aW9uIChhKSB7IHRyeSB7IHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHAuc3RyaW5naWZ5KGEpKSkgfSBjYXRjaCAoYikgeyB0aHJvdyBFcnJvcihcIk1hbGZvcm1lZCBVVEYtOCBkYXRhXCIpOyB9IH0sIHBhcnNlOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gcC5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYSkpKSB9IH0sIHEgPSBsLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBmLmV4dGVuZCh7IHJlc2V0OiBmdW5jdGlvbiAoKSB7IHRoaXMuX2RhdGEgPSBuZXcgai5pbml0OyB0aGlzLl9uRGF0YUJ5dGVzID0gMCB9LCBfYXBwZW5kOiBmdW5jdGlvbiAoYSkgeyBcInN0cmluZ1wiID09IHR5cGVvZiBhICYmIChhID0gdC5wYXJzZShhKSk7IHRoaXMuX2RhdGEuY29uY2F0KGEpOyB0aGlzLl9uRGF0YUJ5dGVzICs9IGEuc2lnQnl0ZXMgfSwgX3Byb2Nlc3M6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gdGhpcy5fZGF0YSwgZCA9IGIud29yZHMsIGMgPSBiLnNpZ0J5dGVzLCBlID0gdGhpcy5ibG9ja1NpemUsIGYgPSBjIC8gKDQgKiBlKSwgZiA9IGEgPyBoLmNlaWwoZikgOiBoLm1heCgoZiB8IDApIC0gdGhpcy5fbWluQnVmZmVyU2l6ZSwgMCk7IGEgPSBmICogZTsgYyA9IGgubWluKDQgKiBhLCBjKTsgaWYgKGEpIHsgZm9yICh2YXIgZyA9IDA7IGcgPCBhOyBnICs9IGUpIHRoaXMuX2RvUHJvY2Vzc0Jsb2NrKGQsIGcpOyBnID0gZC5zcGxpY2UoMCwgYSk7IGIuc2lnQnl0ZXMgLT0gYyB9IHJldHVybiBuZXcgai5pbml0KGcsIGMpIH0sIGNsb25lOiBmdW5jdGlvbiAoKSB7IHZhciBhID0gZi5jbG9uZS5jYWxsKHRoaXMpOyBhLl9kYXRhID0gdGhpcy5fZGF0YS5jbG9uZSgpOyByZXR1cm4gYSB9LCBfbWluQnVmZmVyU2l6ZTogMCB9KTsgbC5IYXNoZXIgPSBxLmV4dGVuZCh7IGNmZzogZi5leHRlbmQoKSwgaW5pdDogZnVuY3Rpb24gKGEpIHsgdGhpcy5jZmcgPSB0aGlzLmNmZy5leHRlbmQoYSk7IHRoaXMucmVzZXQoKSB9LCByZXNldDogZnVuY3Rpb24gKCkgeyBxLnJlc2V0LmNhbGwodGhpcyk7IHRoaXMuX2RvUmVzZXQoKSB9LCB1cGRhdGU6IGZ1bmN0aW9uIChhKSB7IHRoaXMuX2FwcGVuZChhKTsgdGhpcy5fcHJvY2VzcygpOyByZXR1cm4gdGhpcyB9LCBmaW5hbGl6ZTogZnVuY3Rpb24gKGEpIHsgYSAmJiB0aGlzLl9hcHBlbmQoYSk7IHJldHVybiB0aGlzLl9kb0ZpbmFsaXplKCkgfSwgYmxvY2tTaXplOiAxNiwgX2NyZWF0ZUhlbHBlcjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChiLCBkKSB7IHJldHVybiAobmV3IGEuaW5pdChkKSkuZmluYWxpemUoYikgfSB9LCBfY3JlYXRlSG1hY0hlbHBlcjogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGZ1bmN0aW9uIChiLCBkKSB7IHJldHVybiAobmV3IHUuSE1BQy5pbml0KGEsIGQpKS5maW5hbGl6ZShiKSB9IH0gfSk7IHZhciB1ID0gay5hbGdvID0ge307IHJldHVybiBrIH0oTWF0aCk7XHJcbihmdW5jdGlvbiAoKSB7IHZhciBrID0gQ3J5cHRvSlMsIGIgPSBrLmxpYiwgbSA9IGIuV29yZEFycmF5LCBsID0gYi5IYXNoZXIsIGQgPSBbXSwgYiA9IGsuYWxnby5TSEExID0gbC5leHRlbmQoeyBfZG9SZXNldDogZnVuY3Rpb24gKCkgeyB0aGlzLl9oYXNoID0gbmV3IG0uaW5pdChbMTczMjU4NDE5MywgNDAyMzIzMzQxNywgMjU2MjM4MzEwMiwgMjcxNzMzODc4LCAzMjg1Mzc3NTIwXSkgfSwgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAobiwgcCkgeyBmb3IgKHZhciBhID0gdGhpcy5faGFzaC53b3JkcywgZSA9IGFbMF0sIGYgPSBhWzFdLCBoID0gYVsyXSwgaiA9IGFbM10sIGIgPSBhWzRdLCBjID0gMDsgODAgPiBjOyBjKyspIHsgaWYgKDE2ID4gYykgZFtjXSA9IG5bcCArIGNdIHwgMDsgZWxzZSB7IHZhciBnID0gZFtjIC0gM10gXiBkW2MgLSA4XSBeIGRbYyAtIDE0XSBeIGRbYyAtIDE2XTsgZFtjXSA9IGcgPDwgMSB8IGcgPj4+IDMxIH0gZyA9IChlIDw8IDUgfCBlID4+PiAyNykgKyBiICsgZFtjXTsgZyA9IDIwID4gYyA/IGcgKyAoKGYgJiBoIHwgfmYgJiBqKSArIDE1MTg1MDAyNDkpIDogNDAgPiBjID8gZyArICgoZiBeIGggXiBqKSArIDE4NTk3NzUzOTMpIDogNjAgPiBjID8gZyArICgoZiAmIGggfCBmICYgaiB8IGggJiBqKSAtIDE4OTQwMDc1ODgpIDogZyArICgoZiBeIGggXiBqKSAtIDg5OTQ5NzUxNCk7IGIgPSBqOyBqID0gaDsgaCA9IGYgPDwgMzAgfCBmID4+PiAyOyBmID0gZTsgZSA9IGcgfSBhWzBdID0gYVswXSArIGUgfCAwOyBhWzFdID0gYVsxXSArIGYgfCAwOyBhWzJdID0gYVsyXSArIGggfCAwOyBhWzNdID0gYVszXSArIGogfCAwOyBhWzRdID0gYVs0XSArIGIgfCAwIH0sIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7IHZhciBiID0gdGhpcy5fZGF0YSwgZCA9IGIud29yZHMsIGEgPSA4ICogdGhpcy5fbkRhdGFCeXRlcywgZSA9IDggKiBiLnNpZ0J5dGVzOyBkW2UgPj4+IDVdIHw9IDEyOCA8PCAyNCAtIGUgJSAzMjsgZFsoZSArIDY0ID4+PiA5IDw8IDQpICsgMTRdID0gTWF0aC5mbG9vcihhIC8gNDI5NDk2NzI5Nik7IGRbKGUgKyA2NCA+Pj4gOSA8PCA0KSArIDE1XSA9IGE7IGIuc2lnQnl0ZXMgPSA0ICogZC5sZW5ndGg7IHRoaXMuX3Byb2Nlc3MoKTsgcmV0dXJuIHRoaXMuX2hhc2ggfSwgY2xvbmU6IGZ1bmN0aW9uICgpIHsgdmFyIGIgPSBsLmNsb25lLmNhbGwodGhpcyk7IGIuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7IHJldHVybiBiIH0gfSk7IGsuU0hBMSA9IGwuX2NyZWF0ZUhlbHBlcihiKTsgay5IbWFjU0hBMSA9IGwuX2NyZWF0ZUhtYWNIZWxwZXIoYikgfSkoKTtcclxuKGZ1bmN0aW9uIChrKSB7IGZvciAodmFyIGcgPSBDcnlwdG9KUywgaCA9IGcubGliLCB2ID0gaC5Xb3JkQXJyYXksIGogPSBoLkhhc2hlciwgaCA9IGcuYWxnbywgcyA9IFtdLCB0ID0gW10sIHUgPSBmdW5jdGlvbiAocSkgeyByZXR1cm4gNDI5NDk2NzI5NiAqIChxIC0gKHEgfCAwKSkgfCAwIH0sIGwgPSAyLCBiID0gMDsgNjQgPiBiOykgeyB2YXIgZDsgYTogeyBkID0gbDsgZm9yICh2YXIgdyA9IGsuc3FydChkKSwgciA9IDI7IHIgPD0gdzsgcisrKSBpZiAoIShkICUgcikpIHsgZCA9ICExOyBicmVhayBhIH0gZCA9ICEwIH0gZCAmJiAoOCA+IGIgJiYgKHNbYl0gPSB1KGsucG93KGwsIDAuNSkpKSwgdFtiXSA9IHUoay5wb3cobCwgMSAvIDMpKSwgYisrKTsgbCsrIH0gdmFyIG4gPSBbXSwgaCA9IGguU0hBMjU2ID0gai5leHRlbmQoeyBfZG9SZXNldDogZnVuY3Rpb24gKCkgeyB0aGlzLl9oYXNoID0gbmV3IHYuaW5pdChzLnNsaWNlKDApKSB9LCBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChxLCBoKSB7IGZvciAodmFyIGEgPSB0aGlzLl9oYXNoLndvcmRzLCBjID0gYVswXSwgZCA9IGFbMV0sIGIgPSBhWzJdLCBrID0gYVszXSwgZiA9IGFbNF0sIGcgPSBhWzVdLCBqID0gYVs2XSwgbCA9IGFbN10sIGUgPSAwOyA2NCA+IGU7IGUrKykgeyBpZiAoMTYgPiBlKSBuW2VdID0gcVtoICsgZV0gfCAwOyBlbHNlIHsgdmFyIG0gPSBuW2UgLSAxNV0sIHAgPSBuW2UgLSAyXTsgbltlXSA9ICgobSA8PCAyNSB8IG0gPj4+IDcpIF4gKG0gPDwgMTQgfCBtID4+PiAxOCkgXiBtID4+PiAzKSArIG5bZSAtIDddICsgKChwIDw8IDE1IHwgcCA+Pj4gMTcpIF4gKHAgPDwgMTMgfCBwID4+PiAxOSkgXiBwID4+PiAxMCkgKyBuW2UgLSAxNl0gfSBtID0gbCArICgoZiA8PCAyNiB8IGYgPj4+IDYpIF4gKGYgPDwgMjEgfCBmID4+PiAxMSkgXiAoZiA8PCA3IHwgZiA+Pj4gMjUpKSArIChmICYgZyBeIH5mICYgaikgKyB0W2VdICsgbltlXTsgcCA9ICgoYyA8PCAzMCB8IGMgPj4+IDIpIF4gKGMgPDwgMTkgfCBjID4+PiAxMykgXiAoYyA8PCAxMCB8IGMgPj4+IDIyKSkgKyAoYyAmIGQgXiBjICYgYiBeIGQgJiBiKTsgbCA9IGo7IGogPSBnOyBnID0gZjsgZiA9IGsgKyBtIHwgMDsgayA9IGI7IGIgPSBkOyBkID0gYzsgYyA9IG0gKyBwIHwgMCB9IGFbMF0gPSBhWzBdICsgYyB8IDA7IGFbMV0gPSBhWzFdICsgZCB8IDA7IGFbMl0gPSBhWzJdICsgYiB8IDA7IGFbM10gPSBhWzNdICsgayB8IDA7IGFbNF0gPSBhWzRdICsgZiB8IDA7IGFbNV0gPSBhWzVdICsgZyB8IDA7IGFbNl0gPSBhWzZdICsgaiB8IDA7IGFbN10gPSBhWzddICsgbCB8IDAgfSwgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHsgdmFyIGQgPSB0aGlzLl9kYXRhLCBiID0gZC53b3JkcywgYSA9IDggKiB0aGlzLl9uRGF0YUJ5dGVzLCBjID0gOCAqIGQuc2lnQnl0ZXM7IGJbYyA+Pj4gNV0gfD0gMTI4IDw8IDI0IC0gYyAlIDMyOyBiWyhjICsgNjQgPj4+IDkgPDwgNCkgKyAxNF0gPSBrLmZsb29yKGEgLyA0Mjk0OTY3Mjk2KTsgYlsoYyArIDY0ID4+PiA5IDw8IDQpICsgMTVdID0gYTsgZC5zaWdCeXRlcyA9IDQgKiBiLmxlbmd0aDsgdGhpcy5fcHJvY2VzcygpOyByZXR1cm4gdGhpcy5faGFzaCB9LCBjbG9uZTogZnVuY3Rpb24gKCkgeyB2YXIgYiA9IGouY2xvbmUuY2FsbCh0aGlzKTsgYi5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTsgcmV0dXJuIGIgfSB9KTsgZy5TSEEyNTYgPSBqLl9jcmVhdGVIZWxwZXIoaCk7IGcuSG1hY1NIQTI1NiA9IGouX2NyZWF0ZUhtYWNIZWxwZXIoaCkgfSkoTWF0aCk7XHJcbihmdW5jdGlvbiAoKSB7IHZhciBjID0gQ3J5cHRvSlMsIGsgPSBjLmVuYy5VdGY4OyBjLmFsZ28uSE1BQyA9IGMubGliLkJhc2UuZXh0ZW5kKHsgaW5pdDogZnVuY3Rpb24gKGEsIGIpIHsgYSA9IHRoaXMuX2hhc2hlciA9IG5ldyBhLmluaXQ7IFwic3RyaW5nXCIgPT0gdHlwZW9mIGIgJiYgKGIgPSBrLnBhcnNlKGIpKTsgdmFyIGMgPSBhLmJsb2NrU2l6ZSwgZSA9IDQgKiBjOyBiLnNpZ0J5dGVzID4gZSAmJiAoYiA9IGEuZmluYWxpemUoYikpOyBiLmNsYW1wKCk7IGZvciAodmFyIGYgPSB0aGlzLl9vS2V5ID0gYi5jbG9uZSgpLCBnID0gdGhpcy5faUtleSA9IGIuY2xvbmUoKSwgaCA9IGYud29yZHMsIGogPSBnLndvcmRzLCBkID0gMDsgZCA8IGM7IGQrKykgaFtkXSBePSAxNTQ5NTU2ODI4LCBqW2RdIF49IDkwOTUyMjQ4NjsgZi5zaWdCeXRlcyA9IGcuc2lnQnl0ZXMgPSBlOyB0aGlzLnJlc2V0KCkgfSwgcmVzZXQ6IGZ1bmN0aW9uICgpIHsgdmFyIGEgPSB0aGlzLl9oYXNoZXI7IGEucmVzZXQoKTsgYS51cGRhdGUodGhpcy5faUtleSkgfSwgdXBkYXRlOiBmdW5jdGlvbiAoYSkgeyB0aGlzLl9oYXNoZXIudXBkYXRlKGEpOyByZXR1cm4gdGhpcyB9LCBmaW5hbGl6ZTogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSB0aGlzLl9oYXNoZXI7IGEgPSBiLmZpbmFsaXplKGEpOyBiLnJlc2V0KCk7IHJldHVybiBiLmZpbmFsaXplKHRoaXMuX29LZXkuY2xvbmUoKS5jb25jYXQoYSkpIH0gfSkgfSkoKTtcclxuKGZ1bmN0aW9uICgpIHsgdmFyIGggPSBDcnlwdG9KUywgaiA9IGgubGliLldvcmRBcnJheTsgaC5lbmMuQmFzZTY0ID0geyBzdHJpbmdpZnk6IGZ1bmN0aW9uIChiKSB7IHZhciBlID0gYi53b3JkcywgZiA9IGIuc2lnQnl0ZXMsIGMgPSB0aGlzLl9tYXA7IGIuY2xhbXAoKTsgYiA9IFtdOyBmb3IgKHZhciBhID0gMDsgYSA8IGY7IGEgKz0gMykgZm9yICh2YXIgZCA9IChlW2EgPj4+IDJdID4+PiAyNCAtIDggKiAoYSAlIDQpICYgMjU1KSA8PCAxNiB8IChlW2EgKyAxID4+PiAyXSA+Pj4gMjQgLSA4ICogKChhICsgMSkgJSA0KSAmIDI1NSkgPDwgOCB8IGVbYSArIDIgPj4+IDJdID4+PiAyNCAtIDggKiAoKGEgKyAyKSAlIDQpICYgMjU1LCBnID0gMDsgNCA+IGcgJiYgYSArIDAuNzUgKiBnIDwgZjsgZysrKSBiLnB1c2goYy5jaGFyQXQoZCA+Pj4gNiAqICgzIC0gZykgJiA2MykpOyBpZiAoZSA9IGMuY2hhckF0KDY0KSkgZm9yICg7IGIubGVuZ3RoICUgNDspIGIucHVzaChlKTsgcmV0dXJuIGIuam9pbihcIlwiKSB9LCBwYXJzZTogZnVuY3Rpb24gKGIpIHsgdmFyIGUgPSBiLmxlbmd0aCwgZiA9IHRoaXMuX21hcCwgYyA9IGYuY2hhckF0KDY0KTsgYyAmJiAoYyA9IGIuaW5kZXhPZihjKSwgLTEgIT0gYyAmJiAoZSA9IGMpKTsgZm9yICh2YXIgYyA9IFtdLCBhID0gMCwgZCA9IDA7IGQgPCBlOyBkKyspIGlmIChkICUgNCkgeyB2YXIgZyA9IGYuaW5kZXhPZihiLmNoYXJBdChkIC0gMSkpIDw8IDIgKiAoZCAlIDQpLCBoID0gZi5pbmRleE9mKGIuY2hhckF0KGQpKSA+Pj4gNiAtIDIgKiAoZCAlIDQpOyBjW2EgPj4+IDJdIHw9IChnIHwgaCkgPDwgMjQgLSA4ICogKGEgJSA0KTsgYSsrIH0gcmV0dXJuIGouY3JlYXRlKGMsIGEpIH0sIF9tYXA6IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIiB9IH0pKCk7XHJcblxyXG5oYXdrLmNyeXB0by5pbnRlcm5hbHMgPSBDcnlwdG9KUztcclxuXHJcblxyXG4vLyBFeHBvcnQgaWYgdXNlZCBhcyBhIG1vZHVsZVxyXG5cclxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGhhd2s7XHJcbn1cclxuXHJcbi8qIGVzbGludC1lbmFibGUgKi9cclxuLy8gJGxhYjpjb3ZlcmFnZTpvbiRcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzaCA9IHJlcXVpcmUoJ2hhc2guanMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbmZ1bmN0aW9uIEhtYWNEUkJHKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhtYWNEUkJHKSlcbiAgICByZXR1cm4gbmV3IEhtYWNEUkJHKG9wdGlvbnMpO1xuICB0aGlzLmhhc2ggPSBvcHRpb25zLmhhc2g7XG4gIHRoaXMucHJlZFJlc2lzdCA9ICEhb3B0aW9ucy5wcmVkUmVzaXN0O1xuXG4gIHRoaXMub3V0TGVuID0gdGhpcy5oYXNoLm91dFNpemU7XG4gIHRoaXMubWluRW50cm9weSA9IG9wdGlvbnMubWluRW50cm9weSB8fCB0aGlzLmhhc2guaG1hY1N0cmVuZ3RoO1xuXG4gIHRoaXMuX3Jlc2VlZCA9IG51bGw7XG4gIHRoaXMucmVzZWVkSW50ZXJ2YWwgPSBudWxsO1xuICB0aGlzLksgPSBudWxsO1xuICB0aGlzLlYgPSBudWxsO1xuXG4gIHZhciBlbnRyb3B5ID0gdXRpbHMudG9BcnJheShvcHRpb25zLmVudHJvcHksIG9wdGlvbnMuZW50cm9weUVuYyB8fCAnaGV4Jyk7XG4gIHZhciBub25jZSA9IHV0aWxzLnRvQXJyYXkob3B0aW9ucy5ub25jZSwgb3B0aW9ucy5ub25jZUVuYyB8fCAnaGV4Jyk7XG4gIHZhciBwZXJzID0gdXRpbHMudG9BcnJheShvcHRpb25zLnBlcnMsIG9wdGlvbnMucGVyc0VuYyB8fCAnaGV4Jyk7XG4gIGFzc2VydChlbnRyb3B5Lmxlbmd0aCA+PSAodGhpcy5taW5FbnRyb3B5IC8gOCksXG4gICAgICAgICAnTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAnICsgdGhpcy5taW5FbnRyb3B5ICsgJyBiaXRzJyk7XG4gIHRoaXMuX2luaXQoZW50cm9weSwgbm9uY2UsIHBlcnMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBIbWFjRFJCRztcblxuSG1hY0RSQkcucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChlbnRyb3B5LCBub25jZSwgcGVycykge1xuICB2YXIgc2VlZCA9IGVudHJvcHkuY29uY2F0KG5vbmNlKS5jb25jYXQocGVycyk7XG5cbiAgdGhpcy5LID0gbmV3IEFycmF5KHRoaXMub3V0TGVuIC8gOCk7XG4gIHRoaXMuViA9IG5ldyBBcnJheSh0aGlzLm91dExlbiAvIDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuVi5sZW5ndGg7IGkrKykge1xuICAgIHRoaXMuS1tpXSA9IDB4MDA7XG4gICAgdGhpcy5WW2ldID0gMHgwMTtcbiAgfVxuXG4gIHRoaXMuX3VwZGF0ZShzZWVkKTtcbiAgdGhpcy5fcmVzZWVkID0gMTtcbiAgdGhpcy5yZXNlZWRJbnRlcnZhbCA9IDB4MTAwMDAwMDAwMDAwMDsgIC8vIDJeNDhcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5faG1hYyA9IGZ1bmN0aW9uIGhtYWMoKSB7XG4gIHJldHVybiBuZXcgaGFzaC5obWFjKHRoaXMuaGFzaCwgdGhpcy5LKTtcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKHNlZWQpIHtcbiAgdmFyIGttYWMgPSB0aGlzLl9obWFjKClcbiAgICAgICAgICAgICAgICAgLnVwZGF0ZSh0aGlzLlYpXG4gICAgICAgICAgICAgICAgIC51cGRhdGUoWyAweDAwIF0pO1xuICBpZiAoc2VlZClcbiAgICBrbWFjID0ga21hYy51cGRhdGUoc2VlZCk7XG4gIHRoaXMuSyA9IGttYWMuZGlnZXN0KCk7XG4gIHRoaXMuViA9IHRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKTtcbiAgaWYgKCFzZWVkKVxuICAgIHJldHVybjtcblxuICB0aGlzLksgPSB0aGlzLl9obWFjKClcbiAgICAgICAgICAgICAgIC51cGRhdGUodGhpcy5WKVxuICAgICAgICAgICAgICAgLnVwZGF0ZShbIDB4MDEgXSlcbiAgICAgICAgICAgICAgIC51cGRhdGUoc2VlZClcbiAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xufTtcblxuSG1hY0RSQkcucHJvdG90eXBlLnJlc2VlZCA9IGZ1bmN0aW9uIHJlc2VlZChlbnRyb3B5LCBlbnRyb3B5RW5jLCBhZGQsIGFkZEVuYykge1xuICAvLyBPcHRpb25hbCBlbnRyb3B5IGVuY1xuICBpZiAodHlwZW9mIGVudHJvcHlFbmMgIT09ICdzdHJpbmcnKSB7XG4gICAgYWRkRW5jID0gYWRkO1xuICAgIGFkZCA9IGVudHJvcHlFbmM7XG4gICAgZW50cm9weUVuYyA9IG51bGw7XG4gIH1cblxuICBlbnRyb3B5ID0gdXRpbHMudG9BcnJheShlbnRyb3B5LCBlbnRyb3B5RW5jKTtcbiAgYWRkID0gdXRpbHMudG9BcnJheShhZGQsIGFkZEVuYyk7XG5cbiAgYXNzZXJ0KGVudHJvcHkubGVuZ3RoID49ICh0aGlzLm1pbkVudHJvcHkgLyA4KSxcbiAgICAgICAgICdOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICcgKyB0aGlzLm1pbkVudHJvcHkgKyAnIGJpdHMnKTtcblxuICB0aGlzLl91cGRhdGUoZW50cm9weS5jb25jYXQoYWRkIHx8IFtdKSk7XG4gIHRoaXMuX3Jlc2VlZCA9IDE7XG59O1xuXG5IbWFjRFJCRy5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZShsZW4sIGVuYywgYWRkLCBhZGRFbmMpIHtcbiAgaWYgKHRoaXMuX3Jlc2VlZCA+IHRoaXMucmVzZWVkSW50ZXJ2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZXNlZWQgaXMgcmVxdWlyZWQnKTtcblxuICAvLyBPcHRpb25hbCBlbmNvZGluZ1xuICBpZiAodHlwZW9mIGVuYyAhPT0gJ3N0cmluZycpIHtcbiAgICBhZGRFbmMgPSBhZGQ7XG4gICAgYWRkID0gZW5jO1xuICAgIGVuYyA9IG51bGw7XG4gIH1cblxuICAvLyBPcHRpb25hbCBhZGRpdGlvbmFsIGRhdGFcbiAgaWYgKGFkZCkge1xuICAgIGFkZCA9IHV0aWxzLnRvQXJyYXkoYWRkLCBhZGRFbmMgfHwgJ2hleCcpO1xuICAgIHRoaXMuX3VwZGF0ZShhZGQpO1xuICB9XG5cbiAgdmFyIHRlbXAgPSBbXTtcbiAgd2hpbGUgKHRlbXAubGVuZ3RoIDwgbGVuKSB7XG4gICAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xuICAgIHRlbXAgPSB0ZW1wLmNvbmNhdCh0aGlzLlYpO1xuICB9XG5cbiAgdmFyIHJlcyA9IHRlbXAuc2xpY2UoMCwgbGVuKTtcbiAgdGhpcy5fdXBkYXRlKGFkZCk7XG4gIHRoaXMuX3Jlc2VlZCsrO1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHJlcywgZW5jKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHdoYXR3Z0VuY29kaW5nID0gcmVxdWlyZShcIndoYXR3Zy1lbmNvZGluZ1wiKTtcblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZW5jb2Rpbmctc25pZmZpbmctYWxnb3JpdGhtXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNuaWZmSFRNTEVuY29kaW5nKGJ1ZmZlciwgb3B0aW9ucykge1xuICBsZXQgZW5jb2RpbmcgPSB3aGF0d2dFbmNvZGluZy5nZXRCT01FbmNvZGluZyhidWZmZXIpOyAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8xOTEwXG5cbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmIChlbmNvZGluZyA9PT0gbnVsbCAmJiBvcHRpb25zLnRyYW5zcG9ydExheWVyRW5jb2RpbmdMYWJlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZShvcHRpb25zLnRyYW5zcG9ydExheWVyRW5jb2RpbmdMYWJlbCk7XG4gIH1cblxuICBpZiAoZW5jb2RpbmcgPT09IG51bGwpIHtcbiAgICBlbmNvZGluZyA9IHByZXNjYW5NZXRhQ2hhcnNldChidWZmZXIpO1xuICB9XG5cbiAgaWYgKGVuY29kaW5nID09PSBudWxsICYmIG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nO1xuICB9XG5cbiAgaWYgKGVuY29kaW5nID09PSBudWxsKSB7XG4gICAgZW5jb2RpbmcgPSBcIndpbmRvd3MtMTI1MlwiO1xuICB9XG5cbiAgcmV0dXJuIGVuY29kaW5nO1xufTtcblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcHJlc2Nhbi1hLWJ5dGUtc3RyZWFtLXRvLWRldGVybWluZS1pdHMtZW5jb2RpbmdcbmZ1bmN0aW9uIHByZXNjYW5NZXRhQ2hhcnNldChidWZmZXIpIHtcbiAgY29uc3QgbCA9IE1hdGgubWluKGJ1ZmZlci5sZW5ndGgsIDEwMjQpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgIGxldCBjID0gYnVmZmVyW2ldO1xuICAgIGlmIChjID09PSAweDNDKSB7XG4gICAgICAvLyBcIjxcIlxuICAgICAgbGV0IGMxID0gYnVmZmVyW2kgKyAxXTtcbiAgICAgIGxldCBjMiA9IGJ1ZmZlcltpICsgMl07XG4gICAgICBjb25zdCBjMyA9IGJ1ZmZlcltpICsgM107XG4gICAgICBjb25zdCBjNCA9IGJ1ZmZlcltpICsgNF07XG4gICAgICBjb25zdCBjNSA9IGJ1ZmZlcltpICsgNV07XG4gICAgICAvLyAhLS0gKGNvbW1lbnQgc3RhcnQpXG4gICAgICBpZiAoYzEgPT09IDB4MjEgJiYgYzIgPT09IDB4MkQgJiYgYzMgPT09IDB4MkQpIHtcbiAgICAgICAgaSArPSA0O1xuICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGMgPSBidWZmZXJbaV07XG4gICAgICAgICAgYzEgPSBidWZmZXJbaSArIDFdO1xuICAgICAgICAgIGMyID0gYnVmZmVyW2kgKyAyXTtcbiAgICAgICAgICAvLyAtLT4gKGNvbW1lbnQgZW5kKVxuICAgICAgICAgIGlmIChjID09PSAweDJEICYmIGMxID09PSAweDJEICYmIGMyID09PSAweDNFKSB7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKGMxID09PSAweDREIHx8IGMxID09PSAweDZEKSAmJlxuICAgICAgICAgKGMyID09PSAweDQ1IHx8IGMyID09PSAweDY1KSAmJlxuICAgICAgICAgKGMzID09PSAweDU0IHx8IGMzID09PSAweDc0KSAmJlxuICAgICAgICAgKGM0ID09PSAweDQxIHx8IGM0ID09PSAweDYxKSAmJlxuICAgICAgICAgKGlzU3BhY2VDaGFyYWN0ZXIoYzUpIHx8IGM1ID09PSAweDJGKSkge1xuICAgICAgICAvLyBcIm1ldGFcIiArIHNwYWNlIG9yIC9cbiAgICAgICAgaSArPSA2O1xuICAgICAgICBsZXQgZ290UHJhZ21hID0gZmFsc2U7XG4gICAgICAgIGxldCBuZWVkUHJhZ21hID0gbnVsbDtcbiAgICAgICAgbGV0IGNoYXJzZXQgPSBudWxsO1xuXG4gICAgICAgIGxldCBhdHRyUmVzO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgYXR0clJlcyA9IGdldEF0dHJpYnV0ZShidWZmZXIsIGksIGwpO1xuICAgICAgICAgIGlmIChhdHRyUmVzLmF0dHIpIHtcbiAgICAgICAgICAgIGlmIChhdHRyUmVzLmF0dHIubmFtZSA9PT0gXCJodHRwLWVxdWl2XCIpIHtcbiAgICAgICAgICAgICAgZ290UHJhZ21hID0gYXR0clJlcy5hdHRyLnZhbHVlID09PSBcImNvbnRlbnQtdHlwZVwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyUmVzLmF0dHIubmFtZSA9PT0gXCJjb250ZW50XCIgJiYgIWNoYXJzZXQpIHtcbiAgICAgICAgICAgICAgY2hhcnNldCA9IGV4dHJhY3RDaGFyYWN0ZXJFbmNvZGluZ0Zyb21NZXRhKGF0dHJSZXMuYXR0ci52YWx1ZSk7XG4gICAgICAgICAgICAgIGlmIChjaGFyc2V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmVlZFByYWdtYSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0clJlcy5hdHRyLm5hbWUgPT09IFwiY2hhcnNldFwiKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQgPSB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZShhdHRyUmVzLmF0dHIudmFsdWUpO1xuICAgICAgICAgICAgICBuZWVkUHJhZ21hID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGkgPSBhdHRyUmVzLmk7XG4gICAgICAgIH0gd2hpbGUgKGF0dHJSZXMuYXR0cik7XG5cbiAgICAgICAgaWYgKG5lZWRQcmFnbWEgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmVlZFByYWdtYSA9PT0gdHJ1ZSAmJiBnb3RQcmFnbWEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXJzZXQgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFyc2V0ID09PSBcIlVURi0xNkxFXCIgfHwgY2hhcnNldCA9PT0gXCJVVEYtMTZCRVwiKSB7XG4gICAgICAgICAgY2hhcnNldCA9IFwiVVRGLThcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhcnNldCA9PT0gXCJ4LXVzZXItZGVmaW5lZFwiKSB7XG4gICAgICAgICAgY2hhcnNldCA9IFwid2luZG93cy0xMjUyXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hhcnNldDtcbiAgICAgIH0gZWxzZSBpZiAoKGMxID49IDB4NDEgJiYgYzEgPD0gMHg1QSkgfHwgKGMxID49IDB4NjEgJiYgYzEgPD0gMHg3QSkpIHtcbiAgICAgICAgLy8gYS16IG9yIEEtWlxuICAgICAgICBmb3IgKGkgKz0gMjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGMgPSBidWZmZXJbaV07XG4gICAgICAgICAgLy8gc3BhY2Ugb3IgPlxuICAgICAgICAgIGlmIChpc1NwYWNlQ2hhcmFjdGVyKGMpIHx8IGMgPT09IDB4M0UpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgYXR0clJlcztcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGF0dHJSZXMgPSBnZXRBdHRyaWJ1dGUoYnVmZmVyLCBpLCBsKTtcbiAgICAgICAgICBpID0gYXR0clJlcy5pO1xuICAgICAgICB9IHdoaWxlIChhdHRyUmVzLmF0dHIpO1xuICAgICAgfSBlbHNlIGlmIChjMSA9PT0gMHgyMSB8fCBjMSA9PT0gMHgyRiB8fCBjMSA9PT0gMHgzRikge1xuICAgICAgICAvLyAhIG9yIC8gb3IgP1xuICAgICAgICBmb3IgKGkgKz0gMjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGMgPSBidWZmZXJbaV07XG4gICAgICAgICAgLy8gPlxuICAgICAgICAgIGlmIChjID09PSAweDNFKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2NvbmNlcHQtZ2V0LWF0dHJpYnV0ZXMtd2hlbi1zbmlmZmluZ1xuZnVuY3Rpb24gZ2V0QXR0cmlidXRlKGJ1ZmZlciwgaSwgbCkge1xuICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgIGxldCBjID0gYnVmZmVyW2ldO1xuICAgIC8vIHNwYWNlIG9yIC9cbiAgICBpZiAoaXNTcGFjZUNoYXJhY3RlcihjKSB8fCBjID09PSAweDJGKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gXCI+XCJcbiAgICBpZiAoYyA9PT0gMHgzRSkge1xuICAgICAgaSsrO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGxldCBuYW1lID0gXCJcIjtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgIG5hbWVMb29wOmZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjID0gYnVmZmVyW2ldO1xuICAgICAgLy8gXCI9XCJcbiAgICAgIGlmIChjID09PSAweDNEICYmIG5hbWUgIT09IFwiXCIpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIHNwYWNlXG4gICAgICBpZiAoaXNTcGFjZUNoYXJhY3RlcihjKSkge1xuICAgICAgICBmb3IgKGkrKzsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGMgPSBidWZmZXJbaV07XG4gICAgICAgICAgLy8gc3BhY2VcbiAgICAgICAgICBpZiAoaXNTcGFjZUNoYXJhY3RlcihjKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG5vdCBcIj1cIlxuICAgICAgICAgIGlmIChjICE9PSAweDNEKSB7XG4gICAgICAgICAgICByZXR1cm4geyBhdHRyOiB7IG5hbWUsIHZhbHVlIH0sIGkgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpKys7XG4gICAgICAgICAgYnJlYWsgbmFtZUxvb3A7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyAvIG9yID5cbiAgICAgIGlmIChjID09PSAweDJGIHx8IGMgPT09IDB4M0UpIHtcbiAgICAgICAgcmV0dXJuIHsgYXR0cjogeyBuYW1lLCB2YWx1ZSB9LCBpIH07XG4gICAgICB9XG4gICAgICAvLyBBLVpcbiAgICAgIGlmIChjID49IDB4NDEgJiYgYyA8PSAweDVBKSB7XG4gICAgICAgIG5hbWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjICsgMHgyMCk7IC8vIGxvd2VyY2FzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgfVxuICAgIH1cbiAgICBjID0gYnVmZmVyW2ldO1xuICAgIC8vIHNwYWNlXG4gICAgaWYgKGlzU3BhY2VDaGFyYWN0ZXIoYykpIHtcbiAgICAgIGZvciAoaSsrOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGMgPSBidWZmZXJbaV07XG4gICAgICAgIC8vIHNwYWNlXG4gICAgICAgIGlmIChpc1NwYWNlQ2hhcmFjdGVyKGMpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gXCIgb3IgJ1xuICAgIGlmIChjID09PSAweDIyIHx8IGMgPT09IDB4MjcpIHtcbiAgICAgIGNvbnN0IHF1b3RlID0gYztcbiAgICAgIGZvciAoaSsrOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGMgPSBidWZmZXJbaV07XG5cbiAgICAgICAgaWYgKGMgPT09IHF1b3RlKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIHJldHVybiB7IGF0dHI6IHsgbmFtZSwgdmFsdWUgfSwgaSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQS1aXG4gICAgICAgIGlmIChjID49IDB4NDEgJiYgYyA8PSAweDVBKSB7XG4gICAgICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjICsgMHgyMCk7IC8vIGxvd2VyY2FzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA+XG4gICAgaWYgKGMgPT09IDB4M0UpIHtcbiAgICAgIHJldHVybiB7IGF0dHI6IHsgbmFtZSwgdmFsdWUgfSwgaSB9O1xuICAgIH1cblxuICAgIC8vIEEtWlxuICAgIGlmIChjID49IDB4NDEgJiYgYyA8PSAweDVBKSB7XG4gICAgICB2YWx1ZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMgKyAweDIwKTsgLy8gbG93ZXJjYXNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgfVxuXG4gICAgZm9yIChpKys7IGkgPCBsOyBpKyspIHtcbiAgICAgIGMgPSBidWZmZXJbaV07XG5cbiAgICAgIC8vIHNwYWNlIG9yID5cbiAgICAgIGlmIChpc1NwYWNlQ2hhcmFjdGVyKGMpIHx8IGMgPT09IDB4M0UpIHtcbiAgICAgICAgcmV0dXJuIHsgYXR0cjogeyBuYW1lLCB2YWx1ZSB9LCBpIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEEtWlxuICAgICAgaWYgKGMgPj0gMHg0MSAmJiBjIDw9IDB4NUEpIHtcbiAgICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjICsgMHgyMCk7IC8vIGxvd2VyY2FzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgaSB9O1xufVxuXG5mdW5jdGlvbiBleHRyYWN0Q2hhcmFjdGVyRW5jb2RpbmdGcm9tTWV0YShzdHJpbmcpIHtcbiAgbGV0IHBvc2l0aW9uID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGxldCBzdWJQb3NpdGlvbiA9IHN0cmluZy5zdWJzdHJpbmcocG9zaXRpb24pLnNlYXJjaCgvY2hhcnNldC9pKTtcblxuICAgIGlmIChzdWJQb3NpdGlvbiA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzdWJQb3NpdGlvbiArPSBcImNoYXJzZXRcIi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaXNTcGFjZUNoYXJhY3RlcihzdHJpbmdbc3ViUG9zaXRpb25dLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICArK3N1YlBvc2l0aW9uO1xuICAgIH1cblxuICAgIGlmIChzdHJpbmdbc3ViUG9zaXRpb25dICE9PSBcIj1cIikge1xuICAgICAgcG9zaXRpb24gPSBzdWJQb3NpdGlvbiAtIDE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICArK3N1YlBvc2l0aW9uO1xuXG4gICAgd2hpbGUgKGlzU3BhY2VDaGFyYWN0ZXIoc3RyaW5nW3N1YlBvc2l0aW9uXS5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgKytzdWJQb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwb3NpdGlvbiA9IHN1YlBvc2l0aW9uO1xuICAgIGJyZWFrO1xuICB9XG5cbiAgaWYgKHN0cmluZ1twb3NpdGlvbl0gPT09IFwiXFxcIlwiIHx8IHN0cmluZ1twb3NpdGlvbl0gPT09IFwiJ1wiKSB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gc3RyaW5nLmluZGV4T2Yoc3RyaW5nW3Bvc2l0aW9uXSwgcG9zaXRpb24gKyAxKTtcblxuICAgIGlmIChuZXh0SW5kZXggIT09IC0xKSB7XG4gICAgICByZXR1cm4gd2hhdHdnRW5jb2RpbmcubGFiZWxUb05hbWUoc3RyaW5nLnN1YnN0cmluZyhwb3NpdGlvbiArIDEsIG5leHRJbmRleCkpO1xuICAgIH1cblxuICAgIC8vIEl0IGlzIGFuIHVubWF0Y2hlZCBxdW90YXRpb24gbWFya1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHN0cmluZy5sZW5ndGggPT09IHBvc2l0aW9uICsgMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IGVuZCA9IHN0cmluZy5zdWJzdHJpbmcocG9zaXRpb24gKyAxKS5zZWFyY2goL1xceDA5fFxceDBBfFxceDBDfFxceDBEfFxceDIwfDsvKTtcbiAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICBlbmQgPSBzdHJpbmcubGVuZ3RoO1xuICB9XG4gIHJldHVybiB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZShzdHJpbmcuc3Vic3RyaW5nKHBvc2l0aW9uLCBlbmQpKTtcbn1cblxuZnVuY3Rpb24gaXNTcGFjZUNoYXJhY3RlcihjKSB7XG4gIHJldHVybiBjID09PSAweDA5IHx8IGMgPT09IDB4MEEgfHwgYyA9PT0gMHgwQyB8fCBjID09PSAweDBEIHx8IGMgPT09IDB4MjA7XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAxNSBKb3llbnQsIEluYy5cblxudmFyIHBhcnNlciA9IHJlcXVpcmUoJy4vcGFyc2VyJyk7XG52YXIgc2lnbmVyID0gcmVxdWlyZSgnLi9zaWduZXInKTtcbnZhciB2ZXJpZnkgPSByZXF1aXJlKCcuL3ZlcmlmeScpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG5cblxuLy8vLS0tIEFQSVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICBwYXJzZTogcGFyc2VyLnBhcnNlUmVxdWVzdCxcbiAgcGFyc2VSZXF1ZXN0OiBwYXJzZXIucGFyc2VSZXF1ZXN0LFxuXG4gIHNpZ246IHNpZ25lci5zaWduUmVxdWVzdCxcbiAgc2lnblJlcXVlc3Q6IHNpZ25lci5zaWduUmVxdWVzdCxcbiAgY3JlYXRlU2lnbmVyOiBzaWduZXIuY3JlYXRlU2lnbmVyLFxuICBpc1NpZ25lcjogc2lnbmVyLmlzU2lnbmVyLFxuXG4gIHNzaEtleVRvUEVNOiB1dGlscy5zc2hLZXlUb1BFTSxcbiAgc3NoS2V5RmluZ2VycHJpbnQ6IHV0aWxzLmZpbmdlcnByaW50LFxuICBwZW1Ub1JzYVNTSEtleTogdXRpbHMucGVtVG9Sc2FTU0hLZXksXG5cbiAgdmVyaWZ5OiB2ZXJpZnkudmVyaWZ5U2lnbmF0dXJlLFxuICB2ZXJpZnlTaWduYXR1cmU6IHZlcmlmeS52ZXJpZnlTaWduYXR1cmUsXG4gIHZlcmlmeUhNQUM6IHZlcmlmeS52ZXJpZnlITUFDXG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTIgSm95ZW50LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG5cblxuLy8vLS0tIEdsb2JhbHNcblxudmFyIEhBU0hfQUxHT1MgPSB1dGlscy5IQVNIX0FMR09TO1xudmFyIFBLX0FMR09TID0gdXRpbHMuUEtfQUxHT1M7XG52YXIgSHR0cFNpZ25hdHVyZUVycm9yID0gdXRpbHMuSHR0cFNpZ25hdHVyZUVycm9yO1xudmFyIEludmFsaWRBbGdvcml0aG1FcnJvciA9IHV0aWxzLkludmFsaWRBbGdvcml0aG1FcnJvcjtcbnZhciB2YWxpZGF0ZUFsZ29yaXRobSA9IHV0aWxzLnZhbGlkYXRlQWxnb3JpdGhtO1xuXG52YXIgU3RhdGUgPSB7XG4gIE5ldzogMCxcbiAgUGFyYW1zOiAxXG59O1xuXG52YXIgUGFyYW1zU3RhdGUgPSB7XG4gIE5hbWU6IDAsXG4gIFF1b3RlOiAxLFxuICBWYWx1ZTogMixcbiAgQ29tbWE6IDNcbn07XG5cblxuLy8vLS0tIFNwZWNpZmljIEVycm9yc1xuXG5cbmZ1bmN0aW9uIEV4cGlyZWRSZXF1ZXN0RXJyb3IobWVzc2FnZSkge1xuICBIdHRwU2lnbmF0dXJlRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlLCBFeHBpcmVkUmVxdWVzdEVycm9yKTtcbn1cbnV0aWwuaW5oZXJpdHMoRXhwaXJlZFJlcXVlc3RFcnJvciwgSHR0cFNpZ25hdHVyZUVycm9yKTtcblxuXG5mdW5jdGlvbiBJbnZhbGlkSGVhZGVyRXJyb3IobWVzc2FnZSkge1xuICBIdHRwU2lnbmF0dXJlRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlLCBJbnZhbGlkSGVhZGVyRXJyb3IpO1xufVxudXRpbC5pbmhlcml0cyhJbnZhbGlkSGVhZGVyRXJyb3IsIEh0dHBTaWduYXR1cmVFcnJvcik7XG5cblxuZnVuY3Rpb24gSW52YWxpZFBhcmFtc0Vycm9yKG1lc3NhZ2UpIHtcbiAgSHR0cFNpZ25hdHVyZUVycm9yLmNhbGwodGhpcywgbWVzc2FnZSwgSW52YWxpZFBhcmFtc0Vycm9yKTtcbn1cbnV0aWwuaW5oZXJpdHMoSW52YWxpZFBhcmFtc0Vycm9yLCBIdHRwU2lnbmF0dXJlRXJyb3IpO1xuXG5cbmZ1bmN0aW9uIE1pc3NpbmdIZWFkZXJFcnJvcihtZXNzYWdlKSB7XG4gIEh0dHBTaWduYXR1cmVFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UsIE1pc3NpbmdIZWFkZXJFcnJvcik7XG59XG51dGlsLmluaGVyaXRzKE1pc3NpbmdIZWFkZXJFcnJvciwgSHR0cFNpZ25hdHVyZUVycm9yKTtcblxuZnVuY3Rpb24gU3RyaWN0UGFyc2luZ0Vycm9yKG1lc3NhZ2UpIHtcbiAgSHR0cFNpZ25hdHVyZUVycm9yLmNhbGwodGhpcywgbWVzc2FnZSwgU3RyaWN0UGFyc2luZ0Vycm9yKTtcbn1cbnV0aWwuaW5oZXJpdHMoU3RyaWN0UGFyc2luZ0Vycm9yLCBIdHRwU2lnbmF0dXJlRXJyb3IpO1xuXG4vLy8tLS0gRXhwb3J0ZWQgQVBJXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlICdBdXRob3JpemF0aW9uJyBoZWFkZXIgb3V0IG9mIGFuIGh0dHAuU2VydmVyUmVxdWVzdCBvYmplY3QuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIEFQSSB3aWxsIGZ1bGx5IHZhbGlkYXRlIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciwgYW5kIHRocm93XG4gICAqIG9uIGFueSBlcnJvci4gIEl0IHdpbGwgbm90IGhvd2V2ZXIgY2hlY2sgdGhlIHNpZ25hdHVyZSwgb3IgdGhlIGtleUlkIGZvcm1hdFxuICAgKiBhcyB0aG9zZSBhcmUgc3BlY2lmaWMgdG8geW91ciBlbnZpcm9ubWVudC4gIFlvdSBjYW4gdXNlIHRoZSBvcHRpb25zIG9iamVjdFxuICAgKiB0byBwYXNzIGluIGV4dHJhIGNvbnN0cmFpbnRzLlxuICAgKlxuICAgKiBBcyBhIHJlc3BvbnNlIG9iamVjdCB5b3UgY2FuIGV4cGVjdCB0aGlzOlxuICAgKlxuICAgKiAgICAge1xuICAgKiAgICAgICBcInNjaGVtZVwiOiBcIlNpZ25hdHVyZVwiLFxuICAgKiAgICAgICBcInBhcmFtc1wiOiB7XG4gICAqICAgICAgICAgXCJrZXlJZFwiOiBcImZvb1wiLFxuICAgKiAgICAgICAgIFwiYWxnb3JpdGhtXCI6IFwicnNhLXNoYTI1NlwiLFxuICAgKiAgICAgICAgIFwiaGVhZGVyc1wiOiBbXG4gICAqICAgICAgICAgICBcImRhdGVcIiBvciBcIngtZGF0ZVwiLFxuICAgKiAgICAgICAgICAgXCJkaWdlc3RcIlxuICAgKiAgICAgICAgIF0sXG4gICAqICAgICAgICAgXCJzaWduYXR1cmVcIjogXCJiYXNlNjRcIlxuICAgKiAgICAgICB9LFxuICAgKiAgICAgICBcInNpZ25pbmdTdHJpbmdcIjogXCJyZWFkeSB0byBiZSBwYXNzZWQgdG8gY3J5cHRvLnZlcmlmeSgpXCJcbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgYW4gaHR0cC5TZXJ2ZXJSZXF1ZXN0LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhbiBvcHRpb25hbCBvcHRpb25zIG9iamVjdCB3aXRoOlxuICAgKiAgICAgICAgICAgICAgICAgICAtIGNsb2NrU2tldzogYWxsb3dlZCBjbG9jayBza2V3IGluIHNlY29uZHMgKGRlZmF1bHQgMzAwKS5cbiAgICogICAgICAgICAgICAgICAgICAgLSBoZWFkZXJzOiByZXF1aXJlZCBoZWFkZXIgbmFtZXMgKGRlZjogZGF0ZSBvciB4LWRhdGUpXG4gICAqICAgICAgICAgICAgICAgICAgIC0gYWxnb3JpdGhtczogYWxnb3JpdGhtcyB0byBzdXBwb3J0IChkZWZhdWx0OiBhbGwpLlxuICAgKiAgICAgICAgICAgICAgICAgICAtIHN0cmljdDogc2hvdWxkIGVuZm9yY2UgbGF0ZXN0IHNwZWMgcGFyc2luZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQ6IGZhbHNlKS5cbiAgICogQHJldHVybiB7T2JqZWN0fSBwYXJzZWQgb3V0IG9iamVjdCAoc2VlIGFib3ZlKS5cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSBvbiBpbnZhbGlkIGlucHV0LlxuICAgKiBAdGhyb3dzIHtJbnZhbGlkSGVhZGVyRXJyb3J9IG9uIGFuIGludmFsaWQgQXV0aG9yaXphdGlvbiBoZWFkZXIgZXJyb3IuXG4gICAqIEB0aHJvd3Mge0ludmFsaWRQYXJhbXNFcnJvcn0gaWYgdGhlIHBhcmFtcyBpbiB0aGUgc2NoZW1lIGFyZSBpbnZhbGlkLlxuICAgKiBAdGhyb3dzIHtNaXNzaW5nSGVhZGVyRXJyb3J9IGlmIHRoZSBwYXJhbXMgaW5kaWNhdGUgYSBoZWFkZXIgbm90IHByZXNlbnQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIGluIHRoZSByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGUgcGFyYW1zLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIG5vdCBpbiB0aGUgcGFyYW1zIGZyb20gYSByZXF1aXJlZCBoZWFkZXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBvcHRpb25zLlxuICAgKiBAdGhyb3dzIHtTdHJpY3RQYXJzaW5nRXJyb3J9IGlmIG9sZCBhdHRyaWJ1dGVzIGFyZSB1c2VkIGluIHN0cmljdCBwYXJzaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZS5cbiAgICogQHRocm93cyB7RXhwaXJlZFJlcXVlc3RFcnJvcn0gaWYgdGhlIHZhbHVlIG9mIGRhdGUgb3IgeC1kYXRlIGV4Y2VlZHMgc2tldy5cbiAgICovXG4gIHBhcnNlUmVxdWVzdDogZnVuY3Rpb24gcGFyc2VSZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICBhc3NlcnQub2JqZWN0KHJlcXVlc3QsICdyZXF1ZXN0Jyk7XG4gICAgYXNzZXJ0Lm9iamVjdChyZXF1ZXN0LmhlYWRlcnMsICdyZXF1ZXN0LmhlYWRlcnMnKTtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmhlYWRlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gW3JlcXVlc3QuaGVhZGVyc1sneC1kYXRlJ10gPyAneC1kYXRlJyA6ICdkYXRlJ107XG4gICAgfVxuICAgIGFzc2VydC5vYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKTtcbiAgICBhc3NlcnQuYXJyYXlPZlN0cmluZyhvcHRpb25zLmhlYWRlcnMsICdvcHRpb25zLmhlYWRlcnMnKTtcbiAgICBhc3NlcnQub3B0aW9uYWxOdW1iZXIob3B0aW9ucy5jbG9ja1NrZXcsICdvcHRpb25zLmNsb2NrU2tldycpO1xuXG4gICAgaWYgKCFyZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbilcbiAgICAgIHRocm93IG5ldyBNaXNzaW5nSGVhZGVyRXJyb3IoJ25vIGF1dGhvcml6YXRpb24gaGVhZGVyIHByZXNlbnQgaW4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgcmVxdWVzdCcpO1xuXG4gICAgb3B0aW9ucy5jbG9ja1NrZXcgPSBvcHRpb25zLmNsb2NrU2tldyB8fCAzMDA7XG5cblxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgc3RhdGUgPSBTdGF0ZS5OZXc7XG4gICAgdmFyIHN1YnN0YXRlID0gUGFyYW1zU3RhdGUuTmFtZTtcbiAgICB2YXIgdG1wTmFtZSA9ICcnO1xuICAgIHZhciB0bXBWYWx1ZSA9ICcnO1xuXG4gICAgdmFyIHBhcnNlZCA9IHtcbiAgICAgIHNjaGVtZTogJycsXG4gICAgICBwYXJhbXM6IHt9LFxuICAgICAgc2lnbmluZ1N0cmluZzogJycsXG5cbiAgICAgIGdldCBhbGdvcml0aG0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtcy5hbGdvcml0aG0udG9VcHBlckNhc2UoKTtcbiAgICAgIH0sXG5cbiAgICAgIGdldCBrZXlJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLmtleUlkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYXV0aHogPSByZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXV0aHoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gYXV0aHouY2hhckF0KGkpO1xuXG4gICAgICBzd2l0Y2ggKE51bWJlcihzdGF0ZSkpIHtcblxuICAgICAgY2FzZSBTdGF0ZS5OZXc6XG4gICAgICAgIGlmIChjICE9PSAnICcpIHBhcnNlZC5zY2hlbWUgKz0gYztcbiAgICAgICAgZWxzZSBzdGF0ZSA9IFN0YXRlLlBhcmFtcztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RhdGUuUGFyYW1zOlxuICAgICAgICBzd2l0Y2ggKE51bWJlcihzdWJzdGF0ZSkpIHtcblxuICAgICAgICBjYXNlIFBhcmFtc1N0YXRlLk5hbWU6XG4gICAgICAgICAgdmFyIGNvZGUgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgLy8gcmVzdHJpY3RlZCBuYW1lIG9mIEEtWiAvIGEtelxuICAgICAgICAgIGlmICgoY29kZSA+PSAweDQxICYmIGNvZGUgPD0gMHg1YSkgfHwgLy8gQS1aXG4gICAgICAgICAgICAgIChjb2RlID49IDB4NjEgJiYgY29kZSA8PSAweDdhKSkgeyAvLyBhLXpcbiAgICAgICAgICAgIHRtcE5hbWUgKz0gYztcbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc9Jykge1xuICAgICAgICAgICAgaWYgKHRtcE5hbWUubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEhlYWRlckVycm9yKCdiYWQgcGFyYW0gZm9ybWF0Jyk7XG4gICAgICAgICAgICBzdWJzdGF0ZSA9IFBhcmFtc1N0YXRlLlF1b3RlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEhlYWRlckVycm9yKCdiYWQgcGFyYW0gZm9ybWF0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUGFyYW1zU3RhdGUuUXVvdGU6XG4gICAgICAgICAgaWYgKGMgPT09ICdcIicpIHtcbiAgICAgICAgICAgIHRtcFZhbHVlID0gJyc7XG4gICAgICAgICAgICBzdWJzdGF0ZSA9IFBhcmFtc1N0YXRlLlZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEhlYWRlckVycm9yKCdiYWQgcGFyYW0gZm9ybWF0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUGFyYW1zU3RhdGUuVmFsdWU6XG4gICAgICAgICAgaWYgKGMgPT09ICdcIicpIHtcbiAgICAgICAgICAgIHBhcnNlZC5wYXJhbXNbdG1wTmFtZV0gPSB0bXBWYWx1ZTtcbiAgICAgICAgICAgIHN1YnN0YXRlID0gUGFyYW1zU3RhdGUuQ29tbWE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRtcFZhbHVlICs9IGM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUGFyYW1zU3RhdGUuQ29tbWE6XG4gICAgICAgICAgaWYgKGMgPT09ICcsJykge1xuICAgICAgICAgICAgdG1wTmFtZSA9ICcnO1xuICAgICAgICAgICAgc3Vic3RhdGUgPSBQYXJhbXNTdGF0ZS5OYW1lO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEhlYWRlckVycm9yKCdiYWQgcGFyYW0gZm9ybWF0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN1YnN0YXRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdWJzdGF0ZScpO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQucGFyYW1zLmhlYWRlcnMgfHwgcGFyc2VkLnBhcmFtcy5oZWFkZXJzID09PSAnJykge1xuICAgICAgaWYgKHJlcXVlc3QuaGVhZGVyc1sneC1kYXRlJ10pIHtcbiAgICAgICAgcGFyc2VkLnBhcmFtcy5oZWFkZXJzID0gWyd4LWRhdGUnXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZC5wYXJhbXMuaGVhZGVycyA9IFsnZGF0ZSddO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWQucGFyYW1zLmhlYWRlcnMgPSBwYXJzZWQucGFyYW1zLmhlYWRlcnMuc3BsaXQoJyAnKTtcbiAgICB9XG5cbiAgICAvLyBNaW5pbWFsbHkgdmFsaWRhdGUgdGhlIHBhcnNlZCBvYmplY3RcbiAgICBpZiAoIXBhcnNlZC5zY2hlbWUgfHwgcGFyc2VkLnNjaGVtZSAhPT0gJ1NpZ25hdHVyZScpXG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEhlYWRlckVycm9yKCdzY2hlbWUgd2FzIG5vdCBcIlNpZ25hdHVyZVwiJyk7XG5cbiAgICBpZiAoIXBhcnNlZC5wYXJhbXMua2V5SWQpXG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEhlYWRlckVycm9yKCdrZXlJZCB3YXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgaWYgKCFwYXJzZWQucGFyYW1zLmFsZ29yaXRobSlcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkSGVhZGVyRXJyb3IoJ2FsZ29yaXRobSB3YXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgaWYgKCFwYXJzZWQucGFyYW1zLnNpZ25hdHVyZSlcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkSGVhZGVyRXJyb3IoJ3NpZ25hdHVyZSB3YXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgLy8gQ2hlY2sgdGhlIGFsZ29yaXRobSBhZ2FpbnN0IHRoZSBvZmZpY2lhbCBsaXN0XG4gICAgcGFyc2VkLnBhcmFtcy5hbGdvcml0aG0gPSBwYXJzZWQucGFyYW1zLmFsZ29yaXRobS50b0xvd2VyQ2FzZSgpO1xuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZUFsZ29yaXRobShwYXJzZWQucGFyYW1zLmFsZ29yaXRobSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBJbnZhbGlkQWxnb3JpdGhtRXJyb3IpXG4gICAgICAgIHRocm93IChuZXcgSW52YWxpZFBhcmFtc0Vycm9yKHBhcnNlZC5wYXJhbXMuYWxnb3JpdGhtICsgJyBpcyBub3QgJyArXG4gICAgICAgICAgJ3N1cHBvcnRlZCcpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cgKGUpO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHRoZSBzaWduaW5nU3RyaW5nXG4gICAgZm9yIChpID0gMDsgaSA8IHBhcnNlZC5wYXJhbXMuaGVhZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGggPSBwYXJzZWQucGFyYW1zLmhlYWRlcnNbaV0udG9Mb3dlckNhc2UoKTtcbiAgICAgIHBhcnNlZC5wYXJhbXMuaGVhZGVyc1tpXSA9IGg7XG5cbiAgICAgIGlmIChoID09PSAncmVxdWVzdC1saW5lJykge1xuICAgICAgICBpZiAoIW9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICAgICAgLypcbiAgICAgICAgICAgKiBXZSBhbGxvdyBoZWFkZXJzIGZyb20gdGhlIG9sZGVyIHNwZWMgZHJhZnRzIGlmIHN0cmljdCBwYXJzaW5nIGlzbid0XG4gICAgICAgICAgICogc3BlY2lmaWVkIGluIG9wdGlvbnMuXG4gICAgICAgICAgICovXG4gICAgICAgICAgcGFyc2VkLnNpZ25pbmdTdHJpbmcgKz1cbiAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kICsgJyAnICsgcmVxdWVzdC51cmwgKyAnIEhUVFAvJyArIHJlcXVlc3QuaHR0cFZlcnNpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLyogU3RyaWN0IHBhcnNpbmcgZG9lc24ndCBhbGxvdyBvbGRlciBkcmFmdCBoZWFkZXJzLiAqL1xuICAgICAgICAgIHRocm93IChuZXcgU3RyaWN0UGFyc2luZ0Vycm9yKCdyZXF1ZXN0LWxpbmUgaXMgbm90IGEgdmFsaWQgaGVhZGVyICcgK1xuICAgICAgICAgICAgJ3dpdGggc3RyaWN0IHBhcnNpbmcgZW5hYmxlZC4nKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaCA9PT0gJyhyZXF1ZXN0LXRhcmdldCknKSB7XG4gICAgICAgIHBhcnNlZC5zaWduaW5nU3RyaW5nICs9XG4gICAgICAgICAgJyhyZXF1ZXN0LXRhcmdldCk6ICcgKyByZXF1ZXN0Lm1ldGhvZC50b0xvd2VyQ2FzZSgpICsgJyAnICtcbiAgICAgICAgICByZXF1ZXN0LnVybDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlcXVlc3QuaGVhZGVyc1toXTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IE1pc3NpbmdIZWFkZXJFcnJvcihoICsgJyB3YXMgbm90IGluIHRoZSByZXF1ZXN0Jyk7XG4gICAgICAgIHBhcnNlZC5zaWduaW5nU3RyaW5nICs9IGggKyAnOiAnICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaSArIDEpIDwgcGFyc2VkLnBhcmFtcy5oZWFkZXJzLmxlbmd0aClcbiAgICAgICAgcGFyc2VkLnNpZ25pbmdTdHJpbmcgKz0gJ1xcbic7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgYWdhaW5zdCB0aGUgY29uc3RyYWludHNcbiAgICB2YXIgZGF0ZTtcbiAgICBpZiAocmVxdWVzdC5oZWFkZXJzLmRhdGUgfHwgcmVxdWVzdC5oZWFkZXJzWyd4LWRhdGUnXSkge1xuICAgICAgICBpZiAocmVxdWVzdC5oZWFkZXJzWyd4LWRhdGUnXSkge1xuICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShyZXF1ZXN0LmhlYWRlcnNbJ3gtZGF0ZSddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRlID0gbmV3IERhdGUocmVxdWVzdC5oZWFkZXJzLmRhdGUpO1xuICAgICAgICB9XG4gICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIHZhciBza2V3ID0gTWF0aC5hYnMobm93LmdldFRpbWUoKSAtIGRhdGUuZ2V0VGltZSgpKTtcblxuICAgICAgaWYgKHNrZXcgPiBvcHRpb25zLmNsb2NrU2tldyAqIDEwMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4cGlyZWRSZXF1ZXN0RXJyb3IoJ2Nsb2NrIHNrZXcgb2YgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChza2V3IC8gMTAwMCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncyB3YXMgZ3JlYXRlciB0aGFuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNsb2NrU2tldyArICdzJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb3B0aW9ucy5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24gKGhkcikge1xuICAgICAgLy8gUmVtZW1iZXIgdGhhdCB3ZSBhbHJlYWR5IGNoZWNrZWQgYW55IGhlYWRlcnMgaW4gdGhlIHBhcmFtc1xuICAgICAgLy8gd2VyZSBpbiB0aGUgcmVxdWVzdCwgc28gaWYgdGhpcyBwYXNzZXMgd2UncmUgZ29vZC5cbiAgICAgIGlmIChwYXJzZWQucGFyYW1zLmhlYWRlcnMuaW5kZXhPZihoZHIpIDwgMClcbiAgICAgICAgdGhyb3cgbmV3IE1pc3NpbmdIZWFkZXJFcnJvcihoZHIgKyAnIHdhcyBub3QgYSBzaWduZWQgaGVhZGVyJyk7XG4gICAgfSk7XG5cbiAgICBpZiAob3B0aW9ucy5hbGdvcml0aG1zKSB7XG4gICAgICBpZiAob3B0aW9ucy5hbGdvcml0aG1zLmluZGV4T2YocGFyc2VkLnBhcmFtcy5hbGdvcml0aG0pID09PSAtMSlcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbXNFcnJvcihwYXJzZWQucGFyYW1zLmFsZ29yaXRobSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpcyBub3QgYSBzdXBwb3J0ZWQgYWxnb3JpdGhtJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTIgSm95ZW50LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgc3NocGsgPSByZXF1aXJlKCdzc2hwaycpO1xudmFyIGpzcHJpbSA9IHJlcXVpcmUoJ2pzcHJpbScpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgc3ByaW50ZiA9IHJlcXVpcmUoJ3V0aWwnKS5mb3JtYXQ7XG5cbnZhciBIQVNIX0FMR09TID0gdXRpbHMuSEFTSF9BTEdPUztcbnZhciBQS19BTEdPUyA9IHV0aWxzLlBLX0FMR09TO1xudmFyIEludmFsaWRBbGdvcml0aG1FcnJvciA9IHV0aWxzLkludmFsaWRBbGdvcml0aG1FcnJvcjtcbnZhciBIdHRwU2lnbmF0dXJlRXJyb3IgPSB1dGlscy5IdHRwU2lnbmF0dXJlRXJyb3I7XG52YXIgdmFsaWRhdGVBbGdvcml0aG0gPSB1dGlscy52YWxpZGF0ZUFsZ29yaXRobTtcblxuLy8vLS0tIEdsb2JhbHNcblxudmFyIEFVVEhaX0ZNVCA9XG4gICdTaWduYXR1cmUga2V5SWQ9XCIlc1wiLGFsZ29yaXRobT1cIiVzXCIsaGVhZGVycz1cIiVzXCIsc2lnbmF0dXJlPVwiJXNcIic7XG5cbi8vLy0tLSBTcGVjaWZpYyBFcnJvcnNcblxuZnVuY3Rpb24gTWlzc2luZ0hlYWRlckVycm9yKG1lc3NhZ2UpIHtcbiAgSHR0cFNpZ25hdHVyZUVycm9yLmNhbGwodGhpcywgbWVzc2FnZSwgTWlzc2luZ0hlYWRlckVycm9yKTtcbn1cbnV0aWwuaW5oZXJpdHMoTWlzc2luZ0hlYWRlckVycm9yLCBIdHRwU2lnbmF0dXJlRXJyb3IpO1xuXG5mdW5jdGlvbiBTdHJpY3RQYXJzaW5nRXJyb3IobWVzc2FnZSkge1xuICBIdHRwU2lnbmF0dXJlRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlLCBTdHJpY3RQYXJzaW5nRXJyb3IpO1xufVxudXRpbC5pbmhlcml0cyhTdHJpY3RQYXJzaW5nRXJyb3IsIEh0dHBTaWduYXR1cmVFcnJvcik7XG5cbi8qIFNlZSBjcmVhdGVTaWduZXIoKSAqL1xuZnVuY3Rpb24gUmVxdWVzdFNpZ25lcihvcHRpb25zKSB7XG4gIGFzc2VydC5vYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKTtcblxuICB2YXIgYWxnID0gW107XG4gIGlmIChvcHRpb25zLmFsZ29yaXRobSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXNzZXJ0LnN0cmluZyhvcHRpb25zLmFsZ29yaXRobSwgJ29wdGlvbnMuYWxnb3JpdGhtJyk7XG4gICAgYWxnID0gdmFsaWRhdGVBbGdvcml0aG0ob3B0aW9ucy5hbGdvcml0aG0pO1xuICB9XG4gIHRoaXMucnNfYWxnID0gYWxnO1xuXG4gIC8qXG4gICAqIFJlcXVlc3RTaWduZXJzIGNvbWUgaW4gdHdvIHZhcmlldGllczogb25lcyB3aXRoIGFuIHJzX3NpZ25GdW5jLCBhbmQgb25lc1xuICAgKiB3aXRoIGFuIHJzX3NpZ25lci5cbiAgICpcbiAgICogcnNfc2lnbkZ1bmMtYmFzZWQgUmVxdWVzdFNpZ25lcnMgaGF2ZSB0byBidWlsZCB1cCB0aGVpciBlbnRpcmUgc2lnbmluZ1xuICAgKiBzdHJpbmcgd2l0aGluIHRoZSByc19saW5lcyBhcnJheSBhbmQgZ2l2ZSBpdCB0byByc19zaWduRnVuYyBhcyBhIHNpbmdsZVxuICAgKiBjb25jYXQnZCBibG9iLiByc19zaWduZXItYmFzZWQgUmVxdWVzdFNpZ25lcnMgY2FuIGFkZCBhIGxpbmUgYXQgYSB0aW1lIHRvXG4gICAqIHRoZWlyIHNpZ25pbmcgc3RhdGUgYnkgdXNpbmcgcnNfc2lnbmVyLnVwZGF0ZSgpLCB0aHVzIG9ubHkgbmVlZGluZyB0b1xuICAgKiBidWZmZXIgdGhlIGhhc2ggZnVuY3Rpb24gc3RhdGUgYW5kIG9uZSBsaW5lIGF0IGEgdGltZS5cbiAgICovXG4gIGlmIChvcHRpb25zLnNpZ24gIT09IHVuZGVmaW5lZCkge1xuICAgIGFzc2VydC5mdW5jKG9wdGlvbnMuc2lnbiwgJ29wdGlvbnMuc2lnbicpO1xuICAgIHRoaXMucnNfc2lnbkZ1bmMgPSBvcHRpb25zLnNpZ247XG5cbiAgfSBlbHNlIGlmIChhbGdbMF0gPT09ICdobWFjJyAmJiBvcHRpb25zLmtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXNzZXJ0LnN0cmluZyhvcHRpb25zLmtleUlkLCAnb3B0aW9ucy5rZXlJZCcpO1xuICAgIHRoaXMucnNfa2V5SWQgPSBvcHRpb25zLmtleUlkO1xuXG4gICAgaWYgKHR5cGVvZiAob3B0aW9ucy5rZXkpICE9PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzQnVmZmVyKG9wdGlvbnMua2V5KSlcbiAgICAgIHRocm93IChuZXcgVHlwZUVycm9yKCdvcHRpb25zLmtleSBmb3IgSE1BQyBtdXN0IGJlIGEgc3RyaW5nIG9yIEJ1ZmZlcicpKTtcblxuICAgIC8qXG4gICAgICogTWFrZSBhbiByc19zaWduZXIgZm9yIEhNQUNzLCBub3QgYSByc19zaWduRnVuYyAtLSBITUFDcyBkaWdlc3QgdGhlaXJcbiAgICAgKiBkYXRhIGluIGNodW5rcyByYXRoZXIgdGhhbiByZXF1aXJpbmcgaXQgYWxsIHRvIGJlIGdpdmVuIGluIG9uZSBnb1xuICAgICAqIGF0IHRoZSBlbmQsIHNvIHRoZXkgYXJlIG1vcmUgc2ltaWxhciB0byBzaWduZXJzIHRoYW4gc2lnbkZ1bmNzLlxuICAgICAqL1xuICAgIHRoaXMucnNfc2lnbmVyID0gY3J5cHRvLmNyZWF0ZUhtYWMoYWxnWzFdLnRvVXBwZXJDYXNlKCksIG9wdGlvbnMua2V5KTtcbiAgICB0aGlzLnJzX3NpZ25lci5zaWduID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGRpZ2VzdCA9IHRoaXMuZGlnZXN0KCdiYXNlNjQnKTtcbiAgICAgIHJldHVybiAoe1xuICAgICAgICBoYXNoQWxnb3JpdGhtOiBhbGdbMV0sXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAoZGlnZXN0KTsgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICB9IGVsc2UgaWYgKG9wdGlvbnMua2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgaWYgKHR5cGVvZiAoa2V5KSA9PT0gJ3N0cmluZycgfHwgQnVmZmVyLmlzQnVmZmVyKGtleSkpXG4gICAgICBrZXkgPSBzc2hway5wYXJzZVByaXZhdGVLZXkoa2V5KTtcblxuICAgIGFzc2VydC5vayhzc2hway5Qcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXksIFsxLCAyXSksXG4gICAgICAnb3B0aW9ucy5rZXkgbXVzdCBiZSBhIHNzaHBrLlByaXZhdGVLZXknKTtcbiAgICB0aGlzLnJzX2tleSA9IGtleTtcblxuICAgIGFzc2VydC5zdHJpbmcob3B0aW9ucy5rZXlJZCwgJ29wdGlvbnMua2V5SWQnKTtcbiAgICB0aGlzLnJzX2tleUlkID0gb3B0aW9ucy5rZXlJZDtcblxuICAgIGlmICghUEtfQUxHT1Nba2V5LnR5cGVdKSB7XG4gICAgICB0aHJvdyAobmV3IEludmFsaWRBbGdvcml0aG1FcnJvcihrZXkudHlwZS50b1VwcGVyQ2FzZSgpICsgJyB0eXBlICcgK1xuICAgICAgICAna2V5cyBhcmUgbm90IHN1cHBvcnRlZCcpKTtcbiAgICB9XG5cbiAgICBpZiAoYWxnWzBdICE9PSB1bmRlZmluZWQgJiYga2V5LnR5cGUgIT09IGFsZ1swXSkge1xuICAgICAgdGhyb3cgKG5ldyBJbnZhbGlkQWxnb3JpdGhtRXJyb3IoJ29wdGlvbnMua2V5IG11c3QgYmUgYSAnICtcbiAgICAgICAgYWxnWzBdLnRvVXBwZXJDYXNlKCkgKyAnIGtleSwgd2FzIGdpdmVuIGEgJyArXG4gICAgICAgIGtleS50eXBlLnRvVXBwZXJDYXNlKCkgKyAnIGtleSBpbnN0ZWFkJykpO1xuICAgIH1cblxuICAgIHRoaXMucnNfc2lnbmVyID0ga2V5LmNyZWF0ZVNpZ24oYWxnWzFdKTtcblxuICB9IGVsc2Uge1xuICAgIHRocm93IChuZXcgVHlwZUVycm9yKCdvcHRpb25zLnNpZ24gKGZ1bmMpIG9yIG9wdGlvbnMua2V5IGlzIHJlcXVpcmVkJykpO1xuICB9XG5cbiAgdGhpcy5yc19oZWFkZXJzID0gW107XG4gIHRoaXMucnNfbGluZXMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGRzIGEgaGVhZGVyIHRvIGJlIHNpZ25lZCwgd2l0aCBpdHMgdmFsdWUsIGludG8gdGhpcyBzaWduZXIuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHZhbHVlIHdyaXR0ZW5cbiAqL1xuUmVxdWVzdFNpZ25lci5wcm90b3R5cGUud3JpdGVIZWFkZXIgPSBmdW5jdGlvbiAoaGVhZGVyLCB2YWx1ZSkge1xuICBhc3NlcnQuc3RyaW5nKGhlYWRlciwgJ2hlYWRlcicpO1xuICBoZWFkZXIgPSBoZWFkZXIudG9Mb3dlckNhc2UoKTtcbiAgYXNzZXJ0LnN0cmluZyh2YWx1ZSwgJ3ZhbHVlJyk7XG5cbiAgdGhpcy5yc19oZWFkZXJzLnB1c2goaGVhZGVyKTtcblxuICBpZiAodGhpcy5yc19zaWduRnVuYykge1xuICAgIHRoaXMucnNfbGluZXMucHVzaChoZWFkZXIgKyAnOiAnICsgdmFsdWUpO1xuXG4gIH0gZWxzZSB7XG4gICAgdmFyIGxpbmUgPSBoZWFkZXIgKyAnOiAnICsgdmFsdWU7XG4gICAgaWYgKHRoaXMucnNfaGVhZGVycy5sZW5ndGggPiAwKVxuICAgICAgbGluZSA9ICdcXG4nICsgbGluZTtcbiAgICB0aGlzLnJzX3NpZ25lci51cGRhdGUobGluZSk7XG4gIH1cblxuICByZXR1cm4gKHZhbHVlKTtcbn07XG5cbi8qKlxuICogQWRkcyBhIGRlZmF1bHQgRGF0ZSBoZWFkZXIsIHJldHVybmluZyBpdHMgdmFsdWUuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS53cml0ZURhdGVIZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodGhpcy53cml0ZUhlYWRlcignZGF0ZScsIGpzcHJpbS5yZmMxMTIzKG5ldyBEYXRlKCkpKSk7XG59O1xuXG4vKipcbiAqIEFkZHMgdGhlIHJlcXVlc3QgdGFyZ2V0IGxpbmUgdG8gYmUgc2lnbmVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2QsIEhUVFAgbWV0aG9kIChlLmcuICdnZXQnLCAncG9zdCcsICdwdXQnKVxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqL1xuUmVxdWVzdFNpZ25lci5wcm90b3R5cGUud3JpdGVUYXJnZXQgPSBmdW5jdGlvbiAobWV0aG9kLCBwYXRoKSB7XG4gIGFzc2VydC5zdHJpbmcobWV0aG9kLCAnbWV0aG9kJyk7XG4gIGFzc2VydC5zdHJpbmcocGF0aCwgJ3BhdGgnKTtcbiAgbWV0aG9kID0gbWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIHRoaXMud3JpdGVIZWFkZXIoJyhyZXF1ZXN0LXRhcmdldCknLCBtZXRob2QgKyAnICcgKyBwYXRoKTtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSB2YWx1ZSBmb3IgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIG9uIHRoaXMgcmVxdWVzdFxuICogYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHBhcmFtIHtGdW5jfSBjYWxsYmFjayAoZXJyLCBhdXRoeilcbiAqL1xuUmVxdWVzdFNpZ25lci5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIChjYikge1xuICBhc3NlcnQuZnVuYyhjYiwgJ2NhbGxiYWNrJyk7XG5cbiAgaWYgKHRoaXMucnNfaGVhZGVycy5sZW5ndGggPCAxKVxuICAgIHRocm93IChuZXcgRXJyb3IoJ0F0IGxlYXN0IG9uZSBoZWFkZXIgbXVzdCBiZSBzaWduZWQnKSk7XG5cbiAgdmFyIGFsZywgYXV0aHo7XG4gIGlmICh0aGlzLnJzX3NpZ25GdW5jKSB7XG4gICAgdmFyIGRhdGEgPSB0aGlzLnJzX2xpbmVzLmpvaW4oJ1xcbicpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJzX3NpZ25GdW5jKGRhdGEsIGZ1bmN0aW9uIChlcnIsIHNpZykge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBjYihlcnIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhc3NlcnQub2JqZWN0KHNpZywgJ3NpZ25hdHVyZScpO1xuICAgICAgICBhc3NlcnQuc3RyaW5nKHNpZy5rZXlJZCwgJ3NpZ25hdHVyZS5rZXlJZCcpO1xuICAgICAgICBhc3NlcnQuc3RyaW5nKHNpZy5hbGdvcml0aG0sICdzaWduYXR1cmUuYWxnb3JpdGhtJyk7XG4gICAgICAgIGFzc2VydC5zdHJpbmcoc2lnLnNpZ25hdHVyZSwgJ3NpZ25hdHVyZS5zaWduYXR1cmUnKTtcbiAgICAgICAgYWxnID0gdmFsaWRhdGVBbGdvcml0aG0oc2lnLmFsZ29yaXRobSk7XG5cbiAgICAgICAgYXV0aHogPSBzcHJpbnRmKEFVVEhaX0ZNVCxcbiAgICAgICAgICBzaWcua2V5SWQsXG4gICAgICAgICAgc2lnLmFsZ29yaXRobSxcbiAgICAgICAgICBzZWxmLnJzX2hlYWRlcnMuam9pbignICcpLFxuICAgICAgICAgIHNpZy5zaWduYXR1cmUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYihlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2IobnVsbCwgYXV0aHopO1xuICAgIH0pO1xuXG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBzaWdPYmogPSB0aGlzLnJzX3NpZ25lci5zaWduKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY2IoZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFsZyA9ICh0aGlzLnJzX2FsZ1swXSB8fCB0aGlzLnJzX2tleS50eXBlKSArICctJyArIHNpZ09iai5oYXNoQWxnb3JpdGhtO1xuICAgIHZhciBzaWduYXR1cmUgPSBzaWdPYmoudG9TdHJpbmcoKTtcbiAgICBhdXRoeiA9IHNwcmludGYoQVVUSFpfRk1ULFxuICAgICAgdGhpcy5yc19rZXlJZCxcbiAgICAgIGFsZyxcbiAgICAgIHRoaXMucnNfaGVhZGVycy5qb2luKCcgJyksXG4gICAgICBzaWduYXR1cmUpO1xuICAgIGNiKG51bGwsIGF1dGh6KTtcbiAgfVxufTtcblxuLy8vLS0tIEV4cG9ydGVkIEFQSVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXMgd2hldGhlciBhIGdpdmVuIG9iamVjdCBpcyBhIHJlcXVlc3Qgc2lnbmVyIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCwgdGhlIG9iamVjdCB0byBpZGVudGlmeVxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICovXG4gIGlzU2lnbmVyOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKHR5cGVvZiAob2JqKSA9PT0gJ29iamVjdCcgJiYgb2JqIGluc3RhbmNlb2YgUmVxdWVzdFNpZ25lcilcbiAgICAgIHJldHVybiAodHJ1ZSk7XG4gICAgcmV0dXJuIChmYWxzZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByZXF1ZXN0IHNpZ25lciwgdXNlZCB0byBhc3luY2hyb25vdXNseSBidWlsZCBhIHNpZ25hdHVyZVxuICAgKiBmb3IgYSByZXF1ZXN0IChkb2VzIG5vdCBoYXZlIHRvIGJlIGFuIGh0dHAuQ2xpZW50UmVxdWVzdCkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLCBlaXRoZXI6XG4gICAqICAgICAgICAgICAgICAgICAgIC0ge1N0cmluZ30ga2V5SWRcbiAgICogICAgICAgICAgICAgICAgICAgLSB7U3RyaW5nfEJ1ZmZlcn0ga2V5XG4gICAqICAgICAgICAgICAgICAgICAgIC0ge1N0cmluZ30gYWxnb3JpdGhtIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIEhNQUMpXG4gICAqICAgICAgICAgICAgICAgICBvcjpcbiAgICogICAgICAgICAgICAgICAgICAgLSB7RnVuY30gc2lnbiAoZGF0YSwgY2IpXG4gICAqIEByZXR1cm4ge1JlcXVlc3RTaWduZXJ9XG4gICAqL1xuICBjcmVhdGVTaWduZXI6IGZ1bmN0aW9uIGNyZWF0ZVNpZ25lcihvcHRpb25zKSB7XG4gICAgcmV0dXJuIChuZXcgUmVxdWVzdFNpZ25lcihvcHRpb25zKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gJ0F1dGhvcml6YXRpb24nIGhlYWRlciB0byBhbiBodHRwLkNsaWVudFJlcXVlc3Qgb2JqZWN0LlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBBUEkgd2lsbCBhZGQgYSBEYXRlIGhlYWRlciBpZiBpdCdzIG5vdCBhbHJlYWR5IHNldC4gQW55XG4gICAqIG90aGVyIGhlYWRlcnMgaW4gdGhlIG9wdGlvbnMuaGVhZGVycyBhcnJheSBNVVNUIGJlIHByZXNlbnQsIG9yIHRoaXNcbiAgICogd2lsbCB0aHJvdy5cbiAgICpcbiAgICogWW91IHNob3VsZG4ndCBuZWVkIHRvIGNoZWNrIHRoZSByZXR1cm4gdHlwZTsgaXQncyBqdXN0IHRoZXJlIGlmIHlvdSB3YW50XG4gICAqIHRvIGJlIHBlZGFudGljLlxuICAgKlxuICAgKiBUaGUgb3B0aW9uYWwgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciBwYXJzaW5nIHNob3VsZCB1c2Ugc3RyaWN0IGVuZm9yY2VtZW50XG4gICAqIG9mIHRoZSB2ZXJzaW9uIGRyYWZ0LWNhdmFnZS1odHRwLXNpZ25hdHVyZXMtMDQgb2YgdGhlIHNwZWMgb3IgYmV5b25kLlxuICAgKiBUaGUgZGVmYXVsdCBpcyB0byBiZSBsb29zZSBhbmQgc3VwcG9ydFxuICAgKiBvbGRlciB2ZXJzaW9ucyBmb3IgY29tcGF0aWJpbGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgYW4gaW5zdGFuY2Ugb2YgaHR0cC5DbGllbnRSZXF1ZXN0LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBzaWduaW5nIHBhcmFtZXRlcnMgb2JqZWN0OlxuICAgKiAgICAgICAgICAgICAgICAgICAtIHtTdHJpbmd9IGtleUlkIHJlcXVpcmVkLlxuICAgKiAgICAgICAgICAgICAgICAgICAtIHtTdHJpbmd9IGtleSByZXF1aXJlZCAoZWl0aGVyIGEgUEVNIG9yIEhNQUMga2V5KS5cbiAgICogICAgICAgICAgICAgICAgICAgLSB7QXJyYXl9IGhlYWRlcnMgb3B0aW9uYWw7IGRlZmF1bHRzIHRvIFsnZGF0ZSddLlxuICAgKiAgICAgICAgICAgICAgICAgICAtIHtTdHJpbmd9IGFsZ29yaXRobSBvcHRpb25hbCAodW5sZXNzIGtleSBpcyBITUFDKTtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGlzIHRoZSBzYW1lIGFzIHRoZSBzc2hwayBkZWZhdWx0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmluZyBhbGdvcml0aG0gZm9yIHRoZSB0eXBlIG9mIGtleSBnaXZlblxuICAgKiAgICAgICAgICAgICAgICAgICAtIHtTdHJpbmd9IGh0dHBWZXJzaW9uIG9wdGlvbmFsOyBkZWZhdWx0cyB0byAnMS4xJy5cbiAgICogICAgICAgICAgICAgICAgICAgLSB7Qm9vbGVhbn0gc3RyaWN0IG9wdGlvbmFsOyBkZWZhdWx0cyB0byAnZmFsc2UnLlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIEF1dGhvcml6YXRpb24gKGFuZCBvcHRpb25hbGx5IERhdGUpIHdlcmUgYWRkZWQuXG4gICAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gb24gYmFkIHBhcmFtZXRlciB0eXBlcyAoaW5wdXQpLlxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWxnb3JpdGhtRXJyb3J9IGlmIGFsZ29yaXRobSB3YXMgYmFkIG9yIGluY29tcGF0aWJsZSB3aXRoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGdpdmVuIGtleS5cbiAgICogQHRocm93cyB7c3NocGsuS2V5UGFyc2VFcnJvcn0gaWYga2V5IHdhcyBiYWQuXG4gICAqIEB0aHJvd3Mge01pc3NpbmdIZWFkZXJFcnJvcn0gaWYgYSBoZWFkZXIgdG8gYmUgc2lnbmVkIHdhcyBzcGVjaWZpZWQgYnV0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIG5vdCBwcmVzZW50LlxuICAgKi9cbiAgc2lnblJlcXVlc3Q6IGZ1bmN0aW9uIHNpZ25SZXF1ZXN0KHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICBhc3NlcnQub2JqZWN0KHJlcXVlc3QsICdyZXF1ZXN0Jyk7XG4gICAgYXNzZXJ0Lm9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpO1xuICAgIGFzc2VydC5vcHRpb25hbFN0cmluZyhvcHRpb25zLmFsZ29yaXRobSwgJ29wdGlvbnMuYWxnb3JpdGhtJyk7XG4gICAgYXNzZXJ0LnN0cmluZyhvcHRpb25zLmtleUlkLCAnb3B0aW9ucy5rZXlJZCcpO1xuICAgIGFzc2VydC5vcHRpb25hbEFycmF5T2ZTdHJpbmcob3B0aW9ucy5oZWFkZXJzLCAnb3B0aW9ucy5oZWFkZXJzJyk7XG4gICAgYXNzZXJ0Lm9wdGlvbmFsU3RyaW5nKG9wdGlvbnMuaHR0cFZlcnNpb24sICdvcHRpb25zLmh0dHBWZXJzaW9uJyk7XG5cbiAgICBpZiAoIXJlcXVlc3QuZ2V0SGVhZGVyKCdEYXRlJykpXG4gICAgICByZXF1ZXN0LnNldEhlYWRlcignRGF0ZScsIGpzcHJpbS5yZmMxMTIzKG5ldyBEYXRlKCkpKTtcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycylcbiAgICAgIG9wdGlvbnMuaGVhZGVycyA9IFsnZGF0ZSddO1xuICAgIGlmICghb3B0aW9ucy5odHRwVmVyc2lvbilcbiAgICAgIG9wdGlvbnMuaHR0cFZlcnNpb24gPSAnMS4xJztcblxuICAgIHZhciBhbGcgPSBbXTtcbiAgICBpZiAob3B0aW9ucy5hbGdvcml0aG0pIHtcbiAgICAgIG9wdGlvbnMuYWxnb3JpdGhtID0gb3B0aW9ucy5hbGdvcml0aG0udG9Mb3dlckNhc2UoKTtcbiAgICAgIGFsZyA9IHZhbGlkYXRlQWxnb3JpdGhtKG9wdGlvbnMuYWxnb3JpdGhtKTtcbiAgICB9XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgc3RyaW5nVG9TaWduID0gJyc7XG4gICAgZm9yIChpID0gMDsgaSA8IG9wdGlvbnMuaGVhZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiAob3B0aW9ucy5oZWFkZXJzW2ldKSAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuaGVhZGVycyBtdXN0IGJlIGFuIGFycmF5IG9mIFN0cmluZ3MnKTtcblxuICAgICAgdmFyIGggPSBvcHRpb25zLmhlYWRlcnNbaV0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgaWYgKGggPT09ICdyZXF1ZXN0LWxpbmUnKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBXZSBhbGxvdyBoZWFkZXJzIGZyb20gdGhlIG9sZGVyIHNwZWMgZHJhZnRzIGlmIHN0cmljdCBwYXJzaW5nIGlzbid0XG4gICAgICAgICAgICogc3BlY2lmaWVkIGluIG9wdGlvbnMuXG4gICAgICAgICAgICovXG4gICAgICAgICAgc3RyaW5nVG9TaWduICs9XG4gICAgICAgICAgICByZXF1ZXN0Lm1ldGhvZCArICcgJyArIHJlcXVlc3QucGF0aCArICcgSFRUUC8nICtcbiAgICAgICAgICAgIG9wdGlvbnMuaHR0cFZlcnNpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLyogU3RyaWN0IHBhcnNpbmcgZG9lc24ndCBhbGxvdyBvbGRlciBkcmFmdCBoZWFkZXJzLiAqL1xuICAgICAgICAgIHRocm93IChuZXcgU3RyaWN0UGFyc2luZ0Vycm9yKCdyZXF1ZXN0LWxpbmUgaXMgbm90IGEgdmFsaWQgaGVhZGVyICcgK1xuICAgICAgICAgICAgJ3dpdGggc3RyaWN0IHBhcnNpbmcgZW5hYmxlZC4nKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaCA9PT0gJyhyZXF1ZXN0LXRhcmdldCknKSB7XG4gICAgICAgIHN0cmluZ1RvU2lnbiArPVxuICAgICAgICAgICcocmVxdWVzdC10YXJnZXQpOiAnICsgcmVxdWVzdC5tZXRob2QudG9Mb3dlckNhc2UoKSArICcgJyArXG4gICAgICAgICAgcmVxdWVzdC5wYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcmVxdWVzdC5nZXRIZWFkZXIoaCk7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICAgIHRocm93IG5ldyBNaXNzaW5nSGVhZGVyRXJyb3IoaCArICcgd2FzIG5vdCBpbiB0aGUgcmVxdWVzdCcpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmluZ1RvU2lnbiArPSBoICsgJzogJyArIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGkgKyAxKSA8IG9wdGlvbnMuaGVhZGVycy5sZW5ndGgpXG4gICAgICAgIHN0cmluZ1RvU2lnbiArPSAnXFxuJztcbiAgICB9XG5cbiAgICAvKiBUaGlzIGlzIGp1c3QgZm9yIHVuaXQgdGVzdHMuICovXG4gICAgaWYgKHJlcXVlc3QuaGFzT3duUHJvcGVydHkoJ19zdHJpbmdUb1NpZ24nKSkge1xuICAgICAgcmVxdWVzdC5fc3RyaW5nVG9TaWduID0gc3RyaW5nVG9TaWduO1xuICAgIH1cblxuICAgIHZhciBzaWduYXR1cmU7XG4gICAgaWYgKGFsZ1swXSA9PT0gJ2htYWMnKSB7XG4gICAgICBpZiAodHlwZW9mIChvcHRpb25zLmtleSkgIT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNCdWZmZXIob3B0aW9ucy5rZXkpKVxuICAgICAgICB0aHJvdyAobmV3IFR5cGVFcnJvcignb3B0aW9ucy5rZXkgbXVzdCBiZSBhIHN0cmluZyBvciBCdWZmZXInKSk7XG5cbiAgICAgIHZhciBobWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoYWxnWzFdLnRvVXBwZXJDYXNlKCksIG9wdGlvbnMua2V5KTtcbiAgICAgIGhtYWMudXBkYXRlKHN0cmluZ1RvU2lnbik7XG4gICAgICBzaWduYXR1cmUgPSBobWFjLmRpZ2VzdCgnYmFzZTY0Jyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuICAgICAgaWYgKHR5cGVvZiAoa2V5KSA9PT0gJ3N0cmluZycgfHwgQnVmZmVyLmlzQnVmZmVyKGtleSkpXG4gICAgICAgIGtleSA9IHNzaHBrLnBhcnNlUHJpdmF0ZUtleShvcHRpb25zLmtleSk7XG5cbiAgICAgIGFzc2VydC5vayhzc2hway5Qcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXksIFsxLCAyXSksXG4gICAgICAgICdvcHRpb25zLmtleSBtdXN0IGJlIGEgc3NocGsuUHJpdmF0ZUtleScpO1xuXG4gICAgICBpZiAoIVBLX0FMR09TW2tleS50eXBlXSkge1xuICAgICAgICB0aHJvdyAobmV3IEludmFsaWRBbGdvcml0aG1FcnJvcihrZXkudHlwZS50b1VwcGVyQ2FzZSgpICsgJyB0eXBlICcgK1xuICAgICAgICAgICdrZXlzIGFyZSBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWxnWzBdICE9PSB1bmRlZmluZWQgJiYga2V5LnR5cGUgIT09IGFsZ1swXSkge1xuICAgICAgICB0aHJvdyAobmV3IEludmFsaWRBbGdvcml0aG1FcnJvcignb3B0aW9ucy5rZXkgbXVzdCBiZSBhICcgK1xuICAgICAgICAgIGFsZ1swXS50b1VwcGVyQ2FzZSgpICsgJyBrZXksIHdhcyBnaXZlbiBhICcgK1xuICAgICAgICAgIGtleS50eXBlLnRvVXBwZXJDYXNlKCkgKyAnIGtleSBpbnN0ZWFkJykpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2lnbmVyID0ga2V5LmNyZWF0ZVNpZ24oYWxnWzFdKTtcbiAgICAgIHNpZ25lci51cGRhdGUoc3RyaW5nVG9TaWduKTtcbiAgICAgIHZhciBzaWdPYmogPSBzaWduZXIuc2lnbigpO1xuICAgICAgaWYgKCFIQVNIX0FMR09TW3NpZ09iai5oYXNoQWxnb3JpdGhtXSkge1xuICAgICAgICB0aHJvdyAobmV3IEludmFsaWRBbGdvcml0aG1FcnJvcihzaWdPYmouaGFzaEFsZ29yaXRobS50b1VwcGVyQ2FzZSgpICtcbiAgICAgICAgICAnIGlzIG5vdCBhIHN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobScpKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuYWxnb3JpdGhtID0ga2V5LnR5cGUgKyAnLScgKyBzaWdPYmouaGFzaEFsZ29yaXRobTtcbiAgICAgIHNpZ25hdHVyZSA9IHNpZ09iai50b1N0cmluZygpO1xuICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHNpZ25hdHVyZSwgJycsICdlbXB0eSBzaWduYXR1cmUgcHJvZHVjZWQnKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0LnNldEhlYWRlcignQXV0aG9yaXphdGlvbicsIHNwcmludGYoQVVUSFpfRk1ULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmtleUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFsZ29yaXRobSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLmpvaW4oJyAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlKSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTIgSm95ZW50LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBzc2hwayA9IHJlcXVpcmUoJ3NzaHBrJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxudmFyIEhBU0hfQUxHT1MgPSB7XG4gICdzaGExJzogdHJ1ZSxcbiAgJ3NoYTI1Nic6IHRydWUsXG4gICdzaGE1MTInOiB0cnVlXG59O1xuXG52YXIgUEtfQUxHT1MgPSB7XG4gICdyc2EnOiB0cnVlLFxuICAnZHNhJzogdHJ1ZSxcbiAgJ2VjZHNhJzogdHJ1ZVxufTtcblxuZnVuY3Rpb24gSHR0cFNpZ25hdHVyZUVycm9yKG1lc3NhZ2UsIGNhbGxlcikge1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgY2FsbGVyIHx8IEh0dHBTaWduYXR1cmVFcnJvcik7XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gY2FsbGVyLm5hbWU7XG59XG51dGlsLmluaGVyaXRzKEh0dHBTaWduYXR1cmVFcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiBJbnZhbGlkQWxnb3JpdGhtRXJyb3IobWVzc2FnZSkge1xuICBIdHRwU2lnbmF0dXJlRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlLCBJbnZhbGlkQWxnb3JpdGhtRXJyb3IpO1xufVxudXRpbC5pbmhlcml0cyhJbnZhbGlkQWxnb3JpdGhtRXJyb3IsIEh0dHBTaWduYXR1cmVFcnJvcik7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQWxnb3JpdGhtKGFsZ29yaXRobSkge1xuICB2YXIgYWxnID0gYWxnb3JpdGhtLnRvTG93ZXJDYXNlKCkuc3BsaXQoJy0nKTtcblxuICBpZiAoYWxnLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKGFsZ1swXS50b1VwcGVyQ2FzZSgpICsgJyBpcyBub3QgYSAnICtcbiAgICAgICd2YWxpZCBhbGdvcml0aG0nKSk7XG4gIH1cblxuICBpZiAoYWxnWzBdICE9PSAnaG1hYycgJiYgIVBLX0FMR09TW2FsZ1swXV0pIHtcbiAgICB0aHJvdyAobmV3IEludmFsaWRBbGdvcml0aG1FcnJvcihhbGdbMF0udG9VcHBlckNhc2UoKSArICcgdHlwZSBrZXlzICcgK1xuICAgICAgJ2FyZSBub3Qgc3VwcG9ydGVkJykpO1xuICB9XG5cbiAgaWYgKCFIQVNIX0FMR09TW2FsZ1sxXV0pIHtcbiAgICB0aHJvdyAobmV3IEludmFsaWRBbGdvcml0aG1FcnJvcihhbGdbMV0udG9VcHBlckNhc2UoKSArICcgaXMgbm90IGEgJyArXG4gICAgICAnc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtJykpO1xuICB9XG5cbiAgcmV0dXJuIChhbGcpO1xufVxuXG4vLy8tLS0gQVBJXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIEhBU0hfQUxHT1M6IEhBU0hfQUxHT1MsXG4gIFBLX0FMR09TOiBQS19BTEdPUyxcblxuICBIdHRwU2lnbmF0dXJlRXJyb3I6IEh0dHBTaWduYXR1cmVFcnJvcixcbiAgSW52YWxpZEFsZ29yaXRobUVycm9yOiBJbnZhbGlkQWxnb3JpdGhtRXJyb3IsXG5cbiAgdmFsaWRhdGVBbGdvcml0aG06IHZhbGlkYXRlQWxnb3JpdGhtLFxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBPcGVuU1NIIHB1YmxpYyBrZXkgKHJzYSBvbmx5KSB0byBhIFBLQ1MjOCBQRU0gZmlsZS5cbiAgICpcbiAgICogVGhlIGludGVudCBvZiB0aGlzIG1vZHVsZSBpcyB0byBpbnRlcm9wZXJhdGUgd2l0aCBPcGVuU1NMIG9ubHksXG4gICAqIHNwZWNpZmljYWxseSB0aGUgbm9kZSBjcnlwdG8gbW9kdWxlJ3MgYHZlcmlmeWAgbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5IGFuIE9wZW5TU0ggcHVibGljIGtleS5cbiAgICogQHJldHVybiB7U3RyaW5nfSBQRU0gZW5jb2RlZCBmb3JtIG9mIHRoZSBSU0EgcHVibGljIGtleS5cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSBvbiBiYWQgaW5wdXQuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBvbiBpbnZhbGlkIHNzaCBrZXkgZm9ybWF0dGVkIGRhdGEuXG4gICAqL1xuICBzc2hLZXlUb1BFTTogZnVuY3Rpb24gc3NoS2V5VG9QRU0oa2V5KSB7XG4gICAgYXNzZXJ0LnN0cmluZyhrZXksICdzc2hfa2V5Jyk7XG5cbiAgICB2YXIgayA9IHNzaHBrLnBhcnNlS2V5KGtleSwgJ3NzaCcpO1xuICAgIHJldHVybiAoay50b1N0cmluZygncGVtJykpO1xuICB9LFxuXG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbiBPcGVuU1NIIGZpbmdlcnByaW50IGZyb20gYW4gc3NoIHB1YmxpYyBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgYW4gT3BlblNTSCBwdWJsaWMga2V5LlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGtleSBmaW5nZXJwcmludC5cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSBvbiBiYWQgaW5wdXQuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB3aGF0IHlvdSBwYXNzZWQgZG9lc24ndCBsb29rIGxpa2UgYW4gc3NoIHB1YmxpYyBrZXkuXG4gICAqL1xuICBmaW5nZXJwcmludDogZnVuY3Rpb24gZmluZ2VycHJpbnQoa2V5KSB7XG4gICAgYXNzZXJ0LnN0cmluZyhrZXksICdzc2hfa2V5Jyk7XG5cbiAgICB2YXIgayA9IHNzaHBrLnBhcnNlS2V5KGtleSwgJ3NzaCcpO1xuICAgIHJldHVybiAoay5maW5nZXJwcmludCgnbWQ1JykudG9TdHJpbmcoJ2hleCcpKTtcbiAgfSxcblxuICAvKipcbiAgICogQ29udmVydHMgYSBQS0dDUyM4IFBFTSBmaWxlIHRvIGFuIE9wZW5TU0ggcHVibGljIGtleSAocnNhKVxuICAgKlxuICAgKiBUaGUgcmV2ZXJzZSBvZiB0aGUgYWJvdmUgZnVuY3Rpb24uXG4gICAqL1xuICBwZW1Ub1JzYVNTSEtleTogZnVuY3Rpb24gcGVtVG9Sc2FTU0hLZXkocGVtLCBjb21tZW50KSB7XG4gICAgYXNzZXJ0LmVxdWFsKCdzdHJpbmcnLCB0eXBlb2YgKHBlbSksICd0eXBlb2YgcGVtJyk7XG5cbiAgICB2YXIgayA9IHNzaHBrLnBhcnNlS2V5KHBlbSwgJ3BlbScpO1xuICAgIGsuY29tbWVudCA9IGNvbW1lbnQ7XG4gICAgcmV0dXJuIChrLnRvU3RyaW5nKCdzc2gnKSk7XG4gIH1cbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxNSBKb3llbnQsIEluYy5cblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgc3NocGsgPSByZXF1aXJlKCdzc2hwaycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgSEFTSF9BTEdPUyA9IHV0aWxzLkhBU0hfQUxHT1M7XG52YXIgUEtfQUxHT1MgPSB1dGlscy5QS19BTEdPUztcbnZhciBJbnZhbGlkQWxnb3JpdGhtRXJyb3IgPSB1dGlscy5JbnZhbGlkQWxnb3JpdGhtRXJyb3I7XG52YXIgSHR0cFNpZ25hdHVyZUVycm9yID0gdXRpbHMuSHR0cFNpZ25hdHVyZUVycm9yO1xudmFyIHZhbGlkYXRlQWxnb3JpdGhtID0gdXRpbHMudmFsaWRhdGVBbGdvcml0aG07XG5cbi8vLy0tLSBFeHBvcnRlZCBBUElcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8qKlxuICAgKiBWZXJpZnkgUlNBL0RTQSBzaWduYXR1cmUgYWdhaW5zdCBwdWJsaWMga2V5LiAgWW91IGFyZSBleHBlY3RlZCB0byBwYXNzIGluXG4gICAqIGFuIG9iamVjdCB0aGF0IHdhcyByZXR1cm5lZCBmcm9tIGBwYXJzZSgpYC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcnNlZFNpZ25hdHVyZSB0aGUgb2JqZWN0IHlvdSBnb3QgZnJvbSBgcGFyc2VgLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHVia2V5IFJTQS9EU0EgcHJpdmF0ZSBrZXkgUEVNLlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gaWYgeW91IHBhc3MgaW4gYmFkIGFyZ3VtZW50cy5cbiAgICogQHRocm93cyB7SW52YWxpZEFsZ29yaXRobUVycm9yfVxuICAgKi9cbiAgdmVyaWZ5U2lnbmF0dXJlOiBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmUocGFyc2VkU2lnbmF0dXJlLCBwdWJrZXkpIHtcbiAgICBhc3NlcnQub2JqZWN0KHBhcnNlZFNpZ25hdHVyZSwgJ3BhcnNlZFNpZ25hdHVyZScpO1xuICAgIGlmICh0eXBlb2YgKHB1YmtleSkgPT09ICdzdHJpbmcnIHx8IEJ1ZmZlci5pc0J1ZmZlcihwdWJrZXkpKVxuICAgICAgcHVia2V5ID0gc3NocGsucGFyc2VLZXkocHVia2V5KTtcbiAgICBhc3NlcnQub2soc3NocGsuS2V5LmlzS2V5KHB1YmtleSwgWzEsIDFdKSwgJ3B1YmtleSBtdXN0IGJlIGEgc3NocGsuS2V5Jyk7XG5cbiAgICB2YXIgYWxnID0gdmFsaWRhdGVBbGdvcml0aG0ocGFyc2VkU2lnbmF0dXJlLmFsZ29yaXRobSk7XG4gICAgaWYgKGFsZ1swXSA9PT0gJ2htYWMnIHx8IGFsZ1swXSAhPT0gcHVia2V5LnR5cGUpXG4gICAgICByZXR1cm4gKGZhbHNlKTtcblxuICAgIHZhciB2ID0gcHVia2V5LmNyZWF0ZVZlcmlmeShhbGdbMV0pO1xuICAgIHYudXBkYXRlKHBhcnNlZFNpZ25hdHVyZS5zaWduaW5nU3RyaW5nKTtcbiAgICByZXR1cm4gKHYudmVyaWZ5KHBhcnNlZFNpZ25hdHVyZS5wYXJhbXMuc2lnbmF0dXJlLCAnYmFzZTY0JykpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBWZXJpZnkgSE1BQyBhZ2FpbnN0IHNoYXJlZCBzZWNyZXQuICBZb3UgYXJlIGV4cGVjdGVkIHRvIHBhc3MgaW4gYW4gb2JqZWN0XG4gICAqIHRoYXQgd2FzIHJldHVybmVkIGZyb20gYHBhcnNlKClgLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyc2VkU2lnbmF0dXJlIHRoZSBvYmplY3QgeW91IGdvdCBmcm9tIGBwYXJzZWAuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzZWNyZXQgSE1BQyBzaGFyZWQgc2VjcmV0LlxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gaWYgeW91IHBhc3MgaW4gYmFkIGFyZ3VtZW50cy5cbiAgICogQHRocm93cyB7SW52YWxpZEFsZ29yaXRobUVycm9yfVxuICAgKi9cbiAgdmVyaWZ5SE1BQzogZnVuY3Rpb24gdmVyaWZ5SE1BQyhwYXJzZWRTaWduYXR1cmUsIHNlY3JldCkge1xuICAgIGFzc2VydC5vYmplY3QocGFyc2VkU2lnbmF0dXJlLCAncGFyc2VkSE1BQycpO1xuICAgIGFzc2VydC5zdHJpbmcoc2VjcmV0LCAnc2VjcmV0Jyk7XG5cbiAgICB2YXIgYWxnID0gdmFsaWRhdGVBbGdvcml0aG0ocGFyc2VkU2lnbmF0dXJlLmFsZ29yaXRobSk7XG4gICAgaWYgKGFsZ1swXSAhPT0gJ2htYWMnKVxuICAgICAgcmV0dXJuIChmYWxzZSk7XG5cbiAgICB2YXIgaGFzaEFsZyA9IGFsZ1sxXS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgdmFyIGhtYWMgPSBjcnlwdG8uY3JlYXRlSG1hYyhoYXNoQWxnLCBzZWNyZXQpO1xuICAgIGhtYWMudXBkYXRlKHBhcnNlZFNpZ25hdHVyZS5zaWduaW5nU3RyaW5nKTtcblxuICAgIC8qXG4gICAgICogTm93IGRvdWJsZS1oYXNoIHRvIGF2b2lkIGxlYWtpbmcgdGltaW5nIGluZm9ybWF0aW9uIC0gdGhlcmUnc1xuICAgICAqIG5vIGVhc3kgY29uc3RhbnQtdGltZSBjb21wYXJlIGluIEpTLCBzbyB3ZSB1c2UgdGhpcyBhcHByb2FjaFxuICAgICAqIGluc3RlYWQuIFNlZSBmb3IgbW9yZSBpbmZvOlxuICAgICAqIGh0dHBzOi8vd3d3LmlzZWNwYXJ0bmVycy5jb20vYmxvZy8yMDExL2ZlYnJ1YXJ5L2RvdWJsZS1obWFjLVxuICAgICAqIHZlcmlmaWNhdGlvbi5hc3B4XG4gICAgICovXG4gICAgdmFyIGgxID0gY3J5cHRvLmNyZWF0ZUhtYWMoaGFzaEFsZywgc2VjcmV0KTtcbiAgICBoMS51cGRhdGUoaG1hYy5kaWdlc3QoKSk7XG4gICAgaDEgPSBoMS5kaWdlc3QoKTtcbiAgICB2YXIgaDIgPSBjcnlwdG8uY3JlYXRlSG1hYyhoYXNoQWxnLCBzZWNyZXQpO1xuICAgIGgyLnVwZGF0ZShuZXcgQnVmZmVyKHBhcnNlZFNpZ25hdHVyZS5wYXJhbXMuc2lnbmF0dXJlLCAnYmFzZTY0JykpO1xuICAgIGgyID0gaDIuZGlnZXN0KCk7XG5cbiAgICAvKiBOb2RlIDAuOCByZXR1cm5zIHN0cmluZ3MgZnJvbSAuZGlnZXN0KCkuICovXG4gICAgaWYgKHR5cGVvZiAoaDEpID09PSAnc3RyaW5nJylcbiAgICAgIHJldHVybiAoaDEgPT09IGgyKTtcbiAgICAvKiBBbmQgbm9kZSAwLjEwIGxhY2tzIHRoZSAuZXF1YWxzKCkgbWV0aG9kIG9uIEJ1ZmZlcnMuICovXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihoMSkgJiYgIWgxLmVxdWFscylcbiAgICAgIHJldHVybiAoaDEudG9TdHJpbmcoJ2JpbmFyeScpID09PSBoMi50b1N0cmluZygnYmluYXJ5JykpO1xuXG4gICAgcmV0dXJuIChoMS5lcXVhbHMoaDIpKTtcbiAgfVxufTtcbiIsInZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpXG52YXIgdXJsID0gcmVxdWlyZSgndXJsJylcblxudmFyIGh0dHBzID0gbW9kdWxlLmV4cG9ydHNcblxuZm9yICh2YXIga2V5IGluIGh0dHApIHtcbiAgaWYgKGh0dHAuaGFzT3duUHJvcGVydHkoa2V5KSkgaHR0cHNba2V5XSA9IGh0dHBba2V5XVxufVxuXG5odHRwcy5yZXF1ZXN0ID0gZnVuY3Rpb24gKHBhcmFtcywgY2IpIHtcbiAgcGFyYW1zID0gdmFsaWRhdGVQYXJhbXMocGFyYW1zKVxuICByZXR1cm4gaHR0cC5yZXF1ZXN0LmNhbGwodGhpcywgcGFyYW1zLCBjYilcbn1cblxuaHR0cHMuZ2V0ID0gZnVuY3Rpb24gKHBhcmFtcywgY2IpIHtcbiAgcGFyYW1zID0gdmFsaWRhdGVQYXJhbXMocGFyYW1zKVxuICByZXR1cm4gaHR0cC5nZXQuY2FsbCh0aGlzLCBwYXJhbXMsIGNiKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcmFtcyAocGFyYW1zKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1zID09PSAnc3RyaW5nJykge1xuICAgIHBhcmFtcyA9IHVybC5wYXJzZShwYXJhbXMpXG4gIH1cbiAgaWYgKCFwYXJhbXMucHJvdG9jb2wpIHtcbiAgICBwYXJhbXMucHJvdG9jb2wgPSAnaHR0cHM6J1xuICB9XG4gIGlmIChwYXJhbXMucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcm90b2NvbCBcIicgKyBwYXJhbXMucHJvdG9jb2wgKyAnXCIgbm90IHN1cHBvcnRlZC4gRXhwZWN0ZWQgXCJodHRwczpcIicpXG4gIH1cbiAgcmV0dXJuIHBhcmFtc1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCJcblxuLy8gTXVsdGlieXRlIGNvZGVjLiBJbiB0aGlzIHNjaGVtZSwgYSBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgYnkgMSBvciBtb3JlIGJ5dGVzLlxuLy8gT3VyIGNvZGVjIHN1cHBvcnRzIFVURi0xNiBzdXJyb2dhdGVzLCBleHRlbnNpb25zIGZvciBHQjE4MDMwIGFuZCB1bmljb2RlIHNlcXVlbmNlcy5cbi8vIFRvIHNhdmUgbWVtb3J5IGFuZCBsb2FkaW5nIHRpbWUsIHdlIHJlYWQgdGFibGUgZmlsZXMgb25seSB3aGVuIHJlcXVlc3RlZC5cblxuZXhwb3J0cy5fZGJjcyA9IERCQ1NDb2RlYztcblxudmFyIFVOQVNTSUdORUQgPSAtMSxcbiAgICBHQjE4MDMwX0NPREUgPSAtMixcbiAgICBTRVFfU1RBUlQgID0gLTEwLFxuICAgIE5PREVfU1RBUlQgPSAtMTAwMCxcbiAgICBVTkFTU0lHTkVEX05PREUgPSBuZXcgQXJyYXkoMHgxMDApLFxuICAgIERFRl9DSEFSID0gLTE7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMHgxMDA7IGkrKylcbiAgICBVTkFTU0lHTkVEX05PREVbaV0gPSBVTkFTU0lHTkVEO1xuXG5cbi8vIENsYXNzIERCQ1NDb2RlYyByZWFkcyBhbmQgaW5pdGlhbGl6ZXMgbWFwcGluZyB0YWJsZXMuXG5mdW5jdGlvbiBEQkNTQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuZW5jb2RpbmdOYW1lID0gY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZTtcbiAgICBpZiAoIWNvZGVjT3B0aW9ucylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS5cIilcbiAgICBpZiAoIWNvZGVjT3B0aW9ucy50YWJsZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgJ1wiICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIicgaGFzIG5vIGRhdGEuXCIpO1xuXG4gICAgLy8gTG9hZCB0YWJsZXMuXG4gICAgdmFyIG1hcHBpbmdUYWJsZSA9IGNvZGVjT3B0aW9ucy50YWJsZSgpO1xuXG5cbiAgICAvLyBEZWNvZGUgdGFibGVzOiBNQkNTIC0+IFVuaWNvZGUuXG5cbiAgICAvLyBkZWNvZGVUYWJsZXMgaXMgYSB0cmllLCBlbmNvZGVkIGFzIGFuIGFycmF5IG9mIGFycmF5cyBvZiBpbnRlZ2Vycy4gSW50ZXJuYWwgYXJyYXlzIGFyZSB0cmllIG5vZGVzIGFuZCBhbGwgaGF2ZSBsZW4gPSAyNTYuXG4gICAgLy8gVHJpZSByb290IGlzIGRlY29kZVRhYmxlc1swXS5cbiAgICAvLyBWYWx1ZXM6ID49ICAwIC0+IHVuaWNvZGUgY2hhcmFjdGVyIGNvZGUuIGNhbiBiZSA+IDB4RkZGRlxuICAgIC8vICAgICAgICAgPT0gVU5BU1NJR05FRCAtPiB1bmtub3duL3VuYXNzaWduZWQgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA9PSBHQjE4MDMwX0NPREUgLT4gdGhpcyBpcyB0aGUgZW5kIG9mIGEgR0IxODAzMCA0LWJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA8PSBOT0RFX1NUQVJUIC0+IGluZGV4IG9mIHRoZSBuZXh0IG5vZGUgaW4gb3VyIHRyaWUgdG8gcHJvY2VzcyBuZXh0IGJ5dGUuXG4gICAgLy8gICAgICAgICA8PSBTRVFfU1RBUlQgIC0+IGluZGV4IG9mIHRoZSBzdGFydCBvZiBhIGNoYXJhY3RlciBjb2RlIHNlcXVlbmNlLCBpbiBkZWNvZGVUYWJsZVNlcS5cbiAgICB0aGlzLmRlY29kZVRhYmxlcyA9IFtdO1xuICAgIHRoaXMuZGVjb2RlVGFibGVzWzBdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgcm9vdCBub2RlLlxuXG4gICAgLy8gU29tZXRpbWVzIGEgTUJDUyBjaGFyIGNvcnJlc3BvbmRzIHRvIGEgc2VxdWVuY2Ugb2YgdW5pY29kZSBjaGFycy4gV2Ugc3RvcmUgdGhlbSBhcyBhcnJheXMgb2YgaW50ZWdlcnMgaGVyZS4gXG4gICAgdGhpcy5kZWNvZGVUYWJsZVNlcSA9IFtdO1xuXG4gICAgLy8gQWN0dWFsIG1hcHBpbmcgdGFibGVzIGNvbnNpc3Qgb2YgY2h1bmtzLiBVc2UgdGhlbSB0byBmaWxsIHVwIGRlY29kZSB0YWJsZXMuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBwaW5nVGFibGUubGVuZ3RoOyBpKyspXG4gICAgICAgIHRoaXMuX2FkZERlY29kZUNodW5rKG1hcHBpbmdUYWJsZVtpXSk7XG5cbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGljb252LmRlZmF1bHRDaGFyVW5pY29kZTtcblxuICAgIFxuICAgIC8vIEVuY29kZSB0YWJsZXM6IFVuaWNvZGUgLT4gREJDUy5cblxuICAgIC8vIGBlbmNvZGVUYWJsZWAgaXMgYXJyYXkgbWFwcGluZyBmcm9tIHVuaWNvZGUgY2hhciB0byBlbmNvZGVkIGNoYXIuIEFsbCBpdHMgdmFsdWVzIGFyZSBpbnRlZ2VycyBmb3IgcGVyZm9ybWFuY2UuXG4gICAgLy8gQmVjYXVzZSBpdCBjYW4gYmUgc3BhcnNlLCBpdCBpcyByZXByZXNlbnRlZCBhcyBhcnJheSBvZiBidWNrZXRzIGJ5IDI1NiBjaGFycyBlYWNoLiBCdWNrZXQgY2FuIGJlIG51bGwuXG4gICAgLy8gVmFsdWVzOiA+PSAgMCAtPiBpdCBpcyBhIG5vcm1hbCBjaGFyLiBXcml0ZSB0aGUgdmFsdWUgKGlmIDw9MjU2IHRoZW4gMSBieXRlLCBpZiA8PTY1NTM2IHRoZW4gMiBieXRlcywgZXRjLikuXG4gICAgLy8gICAgICAgICA9PSBVTkFTU0lHTkVEIC0+IG5vIGNvbnZlcnNpb24gZm91bmQuIE91dHB1dCBhIGRlZmF1bHQgY2hhci5cbiAgICAvLyAgICAgICAgIDw9IFNFUV9TVEFSVCAgLT4gaXQncyBhbiBpbmRleCBpbiBlbmNvZGVUYWJsZVNlcSwgc2VlIGJlbG93LiBUaGUgY2hhcmFjdGVyIHN0YXJ0cyBhIHNlcXVlbmNlLlxuICAgIHRoaXMuZW5jb2RlVGFibGUgPSBbXTtcbiAgICBcbiAgICAvLyBgZW5jb2RlVGFibGVTZXFgIGlzIHVzZWQgd2hlbiBhIHNlcXVlbmNlIG9mIHVuaWNvZGUgY2hhcmFjdGVycyBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIGNvZGUuIFdlIHVzZSBhIHRyZWUgb2ZcbiAgICAvLyBvYmplY3RzIHdoZXJlIGtleXMgY29ycmVzcG9uZCB0byBjaGFyYWN0ZXJzIGluIHNlcXVlbmNlIGFuZCBsZWFmcyBhcmUgdGhlIGVuY29kZWQgZGJjcyB2YWx1ZXMuIEEgc3BlY2lhbCBERUZfQ0hBUiBrZXlcbiAgICAvLyBtZWFucyBlbmQgb2Ygc2VxdWVuY2UgKG5lZWRlZCB3aGVuIG9uZSBzZXF1ZW5jZSBpcyBhIHN0cmljdCBzdWJzZXF1ZW5jZSBvZiBhbm90aGVyKS5cbiAgICAvLyBPYmplY3RzIGFyZSBrZXB0IHNlcGFyYXRlbHkgZnJvbSBlbmNvZGVUYWJsZSB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZS5cbiAgICB0aGlzLmVuY29kZVRhYmxlU2VxID0gW107XG5cbiAgICAvLyBTb21lIGNoYXJzIGNhbiBiZSBkZWNvZGVkLCBidXQgbmVlZCBub3QgYmUgZW5jb2RlZC5cbiAgICB2YXIgc2tpcEVuY29kZUNoYXJzID0ge307XG4gICAgaWYgKGNvZGVjT3B0aW9ucy5lbmNvZGVTa2lwVmFscylcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlY09wdGlvbnMuZW5jb2RlU2tpcFZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBjb2RlY09wdGlvbnMuZW5jb2RlU2tpcFZhbHNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICAgICAgc2tpcEVuY29kZUNoYXJzW3ZhbF0gPSB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSB2YWwuZnJvbTsgaiA8PSB2YWwudG87IGorKylcbiAgICAgICAgICAgICAgICAgICAgc2tpcEVuY29kZUNoYXJzW2pdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAvLyBVc2UgZGVjb2RlIHRyaWUgdG8gcmVjdXJzaXZlbHkgZmlsbCBvdXQgZW5jb2RlIHRhYmxlcy5cbiAgICB0aGlzLl9maWxsRW5jb2RlVGFibGUoMCwgMCwgc2tpcEVuY29kZUNoYXJzKTtcblxuICAgIC8vIEFkZCBtb3JlIGVuY29kaW5nIHBhaXJzIHdoZW4gbmVlZGVkLlxuICAgIGlmIChjb2RlY09wdGlvbnMuZW5jb2RlQWRkKSB7XG4gICAgICAgIGZvciAodmFyIHVDaGFyIGluIGNvZGVjT3B0aW9ucy5lbmNvZGVBZGQpXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvZGVjT3B0aW9ucy5lbmNvZGVBZGQsIHVDaGFyKSlcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFbmNvZGVDaGFyKHVDaGFyLmNoYXJDb2RlQXQoMCksIGNvZGVjT3B0aW9ucy5lbmNvZGVBZGRbdUNoYXJdKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlZkNoYXJTQiAgPSB0aGlzLmVuY29kZVRhYmxlWzBdW2ljb252LmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApXTtcbiAgICBpZiAodGhpcy5kZWZDaGFyU0IgPT09IFVOQVNTSUdORUQpIHRoaXMuZGVmQ2hhclNCID0gdGhpcy5lbmNvZGVUYWJsZVswXVsnPyddO1xuICAgIGlmICh0aGlzLmRlZkNoYXJTQiA9PT0gVU5BU1NJR05FRCkgdGhpcy5kZWZDaGFyU0IgPSBcIj9cIi5jaGFyQ29kZUF0KDApO1xuXG5cbiAgICAvLyBMb2FkICYgY3JlYXRlIEdCMTgwMzAgdGFibGVzIHdoZW4gbmVlZGVkLlxuICAgIGlmICh0eXBlb2YgY29kZWNPcHRpb25zLmdiMTgwMzAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5nYjE4MDMwID0gY29kZWNPcHRpb25zLmdiMTgwMzAoKTsgLy8gTG9hZCBHQjE4MDMwIHJhbmdlcy5cblxuICAgICAgICAvLyBBZGQgR0IxODAzMCBkZWNvZGUgdGFibGVzLlxuICAgICAgICB2YXIgdGhpcmRCeXRlTm9kZUlkeCA9IHRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aDtcbiAgICAgICAgdmFyIHRoaXJkQnl0ZU5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1t0aGlyZEJ5dGVOb2RlSWR4XSA9IFVOQVNTSUdORURfTk9ERS5zbGljZSgwKTtcblxuICAgICAgICB2YXIgZm91cnRoQnl0ZU5vZGVJZHggPSB0aGlzLmRlY29kZVRhYmxlcy5sZW5ndGg7XG4gICAgICAgIHZhciBmb3VydGhCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW2ZvdXJ0aEJ5dGVOb2RlSWR4XSA9IFVOQVNTSUdORURfTk9ERS5zbGljZSgwKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMHg4MTsgaSA8PSAweEZFOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzZWNvbmRCeXRlTm9kZUlkeCA9IE5PREVfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlc1swXVtpXTtcbiAgICAgICAgICAgIHZhciBzZWNvbmRCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW3NlY29uZEJ5dGVOb2RlSWR4XTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAweDMwOyBqIDw9IDB4Mzk7IGorKylcbiAgICAgICAgICAgICAgICBzZWNvbmRCeXRlTm9kZVtqXSA9IE5PREVfU1RBUlQgLSB0aGlyZEJ5dGVOb2RlSWR4O1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAweDgxOyBpIDw9IDB4RkU7IGkrKylcbiAgICAgICAgICAgIHRoaXJkQnl0ZU5vZGVbaV0gPSBOT0RFX1NUQVJUIC0gZm91cnRoQnl0ZU5vZGVJZHg7XG4gICAgICAgIGZvciAodmFyIGkgPSAweDMwOyBpIDw9IDB4Mzk7IGkrKylcbiAgICAgICAgICAgIGZvdXJ0aEJ5dGVOb2RlW2ldID0gR0IxODAzMF9DT0RFXG4gICAgfSAgICAgICAgXG59XG5cbkRCQ1NDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IERCQ1NFbmNvZGVyO1xuREJDU0NvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gREJDU0RlY29kZXI7XG5cbi8vIERlY29kZXIgaGVscGVyc1xuREJDU0NvZGVjLnByb3RvdHlwZS5fZ2V0RGVjb2RlVHJpZU5vZGUgPSBmdW5jdGlvbihhZGRyKSB7XG4gICAgdmFyIGJ5dGVzID0gW107XG4gICAgZm9yICg7IGFkZHIgPiAwOyBhZGRyID4+PSA4KVxuICAgICAgICBieXRlcy5wdXNoKGFkZHIgJiAweEZGKTtcbiAgICBpZiAoYnl0ZXMubGVuZ3RoID09IDApXG4gICAgICAgIGJ5dGVzLnB1c2goMCk7XG5cbiAgICB2YXIgbm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzWzBdO1xuICAgIGZvciAodmFyIGkgPSBieXRlcy5sZW5ndGgtMTsgaSA+IDA7IGktLSkgeyAvLyBUcmF2ZXJzZSBub2RlcyBkZWVwZXIgaW50byB0aGUgdHJpZS5cbiAgICAgICAgdmFyIHZhbCA9IG5vZGVbYnl0ZXNbaV1dO1xuXG4gICAgICAgIGlmICh2YWwgPT0gVU5BU1NJR05FRCkgeyAvLyBDcmVhdGUgbmV3IG5vZGUuXG4gICAgICAgICAgICBub2RlW2J5dGVzW2ldXSA9IE5PREVfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmRlY29kZVRhYmxlcy5wdXNoKG5vZGUgPSBVTkFTU0lHTkVEX05PREUuc2xpY2UoMCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCA8PSBOT0RFX1NUQVJUKSB7IC8vIEV4aXN0aW5nIG5vZGUuXG4gICAgICAgICAgICBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbTk9ERV9TVEFSVCAtIHZhbF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcndyaXRlIGJ5dGUgaW4gXCIgKyB0aGlzLmVuY29kaW5nTmFtZSArIFwiLCBhZGRyOiBcIiArIGFkZHIudG9TdHJpbmcoMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59XG5cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fYWRkRGVjb2RlQ2h1bmsgPSBmdW5jdGlvbihjaHVuaykge1xuICAgIC8vIEZpcnN0IGVsZW1lbnQgb2YgY2h1bmsgaXMgdGhlIGhleCBtYmNzIGNvZGUgd2hlcmUgd2Ugc3RhcnQuXG4gICAgdmFyIGN1ckFkZHIgPSBwYXJzZUludChjaHVua1swXSwgMTYpO1xuXG4gICAgLy8gQ2hvb3NlIHRoZSBkZWNvZGluZyBub2RlIHdoZXJlIHdlJ2xsIHdyaXRlIG91ciBjaGFycy5cbiAgICB2YXIgd3JpdGVUYWJsZSA9IHRoaXMuX2dldERlY29kZVRyaWVOb2RlKGN1ckFkZHIpO1xuICAgIGN1ckFkZHIgPSBjdXJBZGRyICYgMHhGRjtcblxuICAgIC8vIFdyaXRlIGFsbCBvdGhlciBlbGVtZW50cyBvZiB0aGUgY2h1bmsgdG8gdGhlIHRhYmxlLlxuICAgIGZvciAodmFyIGsgPSAxOyBrIDwgY2h1bmsubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBjaHVua1trXTtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiKSB7IC8vIFN0cmluZywgd3JpdGUgYXMtaXMuXG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQubGVuZ3RoOykge1xuICAgICAgICAgICAgICAgIHZhciBjb2RlID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgaWYgKDB4RDgwMCA8PSBjb2RlICYmIGNvZGUgPCAweERDMDApIHsgLy8gRGVjb2RlIHN1cnJvZ2F0ZVxuICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVRyYWlsID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgweERDMDAgPD0gY29kZVRyYWlsICYmIGNvZGVUcmFpbCA8IDB4RTAwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IDB4MTAwMDAgKyAoY29kZSAtIDB4RDgwMCkgKiAweDQwMCArIChjb2RlVHJhaWwgLSAweERDMDApO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIgaW4gXCIgICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIiBhdCBjaHVuayBcIiArIGNodW5rWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoMHgwRkYwIDwgY29kZSAmJiBjb2RlIDw9IDB4MEZGRikgeyAvLyBDaGFyYWN0ZXIgc2VxdWVuY2UgKG91ciBvd24gZW5jb2RpbmcgdXNlZClcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IDB4RkZGIC0gY29kZSArIDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZXEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBsZW47IG0rKylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcS5wdXNoKHBhcnQuY2hhckNvZGVBdChsKyspKTsgLy8gU2ltcGxlIHZhcmlhdGlvbjogZG9uJ3Qgc3VwcG9ydCBzdXJyb2dhdGVzIG9yIHN1YnNlcXVlbmNlcyBpbiBzZXEuXG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGVUYWJsZVtjdXJBZGRyKytdID0gU0VRX1NUQVJUIC0gdGhpcy5kZWNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlVGFibGVTZXEucHVzaChzZXEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IGNvZGU7IC8vIEJhc2ljIGNoYXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcnQgPT09IFwibnVtYmVyXCIpIHsgLy8gSW50ZWdlciwgbWVhbmluZyBpbmNyZWFzaW5nIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggcHJldiBjaGFyYWN0ZXIuXG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSB3cml0ZVRhYmxlW2N1ckFkZHIgLSAxXSArIDE7XG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQ7IGwrKylcbiAgICAgICAgICAgICAgICB3cml0ZVRhYmxlW2N1ckFkZHIrK10gPSBjaGFyQ29kZSsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCB0eXBlICdcIiArIHR5cGVvZiBwYXJ0ICsgXCInIGdpdmVuIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgY2h1bmsgXCIgKyBjaHVua1swXSk7XG4gICAgfVxuICAgIGlmIChjdXJBZGRyID4gMHhGRilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IGNodW5rIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgYWRkciBcIiArIGNodW5rWzBdICsgXCI6IHRvbyBsb25nXCIgKyBjdXJBZGRyKTtcbn1cblxuLy8gRW5jb2RlciBoZWxwZXJzXG5EQkNTQ29kZWMucHJvdG90eXBlLl9nZXRFbmNvZGVCdWNrZXQgPSBmdW5jdGlvbih1Q29kZSkge1xuICAgIHZhciBoaWdoID0gdUNvZGUgPj4gODsgLy8gVGhpcyBjb3VsZCBiZSA+IDB4RkYgYmVjYXVzZSBvZiBhc3RyYWwgY2hhcmFjdGVycy5cbiAgICBpZiAodGhpcy5lbmNvZGVUYWJsZVtoaWdoXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aGlzLmVuY29kZVRhYmxlW2hpZ2hdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgYnVja2V0IG9uIGRlbWFuZC5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGVUYWJsZVtoaWdoXTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlQ2hhciA9IGZ1bmN0aW9uKHVDb2RlLCBkYmNzQ29kZSkge1xuICAgIHZhciBidWNrZXQgPSB0aGlzLl9nZXRFbmNvZGVCdWNrZXQodUNvZGUpO1xuICAgIHZhciBsb3cgPSB1Q29kZSAmIDB4RkY7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVClcbiAgICAgICAgdGhpcy5lbmNvZGVUYWJsZVNlcVtTRVFfU1RBUlQtYnVja2V0W2xvd11dW0RFRl9DSEFSXSA9IGRiY3NDb2RlOyAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSwgc2V0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2Ugb2YgaXQuXG4gICAgZWxzZSBpZiAoYnVja2V0W2xvd10gPT0gVU5BU1NJR05FRClcbiAgICAgICAgYnVja2V0W2xvd10gPSBkYmNzQ29kZTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlU2VxdWVuY2UgPSBmdW5jdGlvbihzZXEsIGRiY3NDb2RlKSB7XG4gICAgXG4gICAgLy8gR2V0IHRoZSByb290IG9mIGNoYXJhY3RlciB0cmVlIGFjY29yZGluZyB0byBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlcXVlbmNlLlxuICAgIHZhciB1Q29kZSA9IHNlcVswXTtcbiAgICB2YXIgYnVja2V0ID0gdGhpcy5fZ2V0RW5jb2RlQnVja2V0KHVDb2RlKTtcbiAgICB2YXIgbG93ID0gdUNvZGUgJiAweEZGO1xuXG4gICAgdmFyIG5vZGU7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVCkge1xuICAgICAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSB3aXRoICAtIHVzZSBpdC5cbiAgICAgICAgbm9kZSA9IHRoaXMuZW5jb2RlVGFibGVTZXFbU0VRX1NUQVJULWJ1Y2tldFtsb3ddXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZXJlIHdhcyBubyBzZXF1ZW5jZSBvYmplY3QgLSBhbGxvY2F0ZSBhIG5ldyBvbmUuXG4gICAgICAgIG5vZGUgPSB7fTtcbiAgICAgICAgaWYgKGJ1Y2tldFtsb3ddICE9PSBVTkFTU0lHTkVEKSBub2RlW0RFRl9DSEFSXSA9IGJ1Y2tldFtsb3ddOyAvLyBJZiBhIGNoYXIgd2FzIHNldCBiZWZvcmUgLSBtYWtlIGl0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2UuXG4gICAgICAgIGJ1Y2tldFtsb3ddID0gU0VRX1NUQVJUIC0gdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgIHRoaXMuZW5jb2RlVGFibGVTZXEucHVzaChub2RlKTtcbiAgICB9XG5cbiAgICAvLyBUcmF2ZXJzZSB0aGUgY2hhcmFjdGVyIHRyZWUsIGFsbG9jYXRpbmcgbmV3IG5vZGVzIGFzIG5lZWRlZC5cbiAgICBmb3IgKHZhciBqID0gMTsgaiA8IHNlcS5sZW5ndGgtMTsgaisrKSB7XG4gICAgICAgIHZhciBvbGRWYWwgPSBub2RlW3VDb2RlXTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbGRWYWwgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgbm9kZSA9IG9sZFZhbDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZVt1Q29kZV0gPSB7fVxuICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIG5vZGVbREVGX0NIQVJdID0gb2xkVmFsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxlYWYgdG8gZ2l2ZW4gZGJjc0NvZGUuXG4gICAgdUNvZGUgPSBzZXFbc2VxLmxlbmd0aC0xXTtcbiAgICBub2RlW3VDb2RlXSA9IGRiY3NDb2RlO1xufVxuXG5EQkNTQ29kZWMucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGUgPSBmdW5jdGlvbihub2RlSWR4LCBwcmVmaXgsIHNraXBFbmNvZGVDaGFycykge1xuICAgIHZhciBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbbm9kZUlkeF07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAweDEwMDsgaSsrKSB7XG4gICAgICAgIHZhciB1Q29kZSA9IG5vZGVbaV07XG4gICAgICAgIHZhciBtYkNvZGUgPSBwcmVmaXggKyBpO1xuICAgICAgICBpZiAoc2tpcEVuY29kZUNoYXJzW21iQ29kZV0pXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBpZiAodUNvZGUgPj0gMClcbiAgICAgICAgICAgIHRoaXMuX3NldEVuY29kZUNoYXIodUNvZGUsIG1iQ29kZSk7XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlIDw9IE5PREVfU1RBUlQpXG4gICAgICAgICAgICB0aGlzLl9maWxsRW5jb2RlVGFibGUoTk9ERV9TVEFSVCAtIHVDb2RlLCBtYkNvZGUgPDwgOCwgc2tpcEVuY29kZUNoYXJzKTtcbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPD0gU0VRX1NUQVJUKVxuICAgICAgICAgICAgdGhpcy5fc2V0RW5jb2RlU2VxdWVuY2UodGhpcy5kZWNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSB1Q29kZV0sIG1iQ29kZSk7XG4gICAgfVxufVxuXG5cblxuLy8gPT0gRW5jb2RlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gREJDU0VuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAvLyBFbmNvZGVyIHN0YXRlXG4gICAgdGhpcy5sZWFkU3Vycm9nYXRlID0gLTE7XG4gICAgdGhpcy5zZXFPYmogPSB1bmRlZmluZWQ7XG4gICAgXG4gICAgLy8gU3RhdGljIGRhdGFcbiAgICB0aGlzLmVuY29kZVRhYmxlID0gY29kZWMuZW5jb2RlVGFibGU7XG4gICAgdGhpcy5lbmNvZGVUYWJsZVNlcSA9IGNvZGVjLmVuY29kZVRhYmxlU2VxO1xuICAgIHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlID0gY29kZWMuZGVmQ2hhclNCO1xuICAgIHRoaXMuZ2IxODAzMCA9IGNvZGVjLmdiMTgwMzA7XG59XG5cbkRCQ1NFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBuZXdCdWYgPSBuZXcgQnVmZmVyKHN0ci5sZW5ndGggKiAodGhpcy5nYjE4MDMwID8gNCA6IDMpKSwgXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSB0aGlzLmxlYWRTdXJyb2dhdGUsXG4gICAgICAgIHNlcU9iaiA9IHRoaXMuc2VxT2JqLCBuZXh0Q2hhciA9IC0xLFxuICAgICAgICBpID0gMCwgaiA9IDA7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAvLyAwLiBHZXQgbmV4dCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChuZXh0Q2hhciA9PT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChpID09IHN0ci5sZW5ndGgpIGJyZWFrO1xuICAgICAgICAgICAgdmFyIHVDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB1Q29kZSA9IG5leHRDaGFyO1xuICAgICAgICAgICAgbmV4dENoYXIgPSAtMTsgICAgXG4gICAgICAgIH1cblxuICAgICAgICAvLyAxLiBIYW5kbGUgc3Vycm9nYXRlcy5cbiAgICAgICAgaWYgKDB4RDgwMCA8PSB1Q29kZSAmJiB1Q29kZSA8IDB4RTAwMCkgeyAvLyBDaGFyIGlzIG9uZSBvZiBzdXJyb2dhdGVzLlxuICAgICAgICAgICAgaWYgKHVDb2RlIDwgMHhEQzAwKSB7IC8vIFdlJ3ZlIGdvdCBsZWFkIHN1cnJvZ2F0ZS5cbiAgICAgICAgICAgICAgICBpZiAobGVhZFN1cnJvZ2F0ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IHVDb2RlO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gdUNvZGU7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZSBsZWFkIHN1cnJvZ2F0ZSBmb3VuZC5cbiAgICAgICAgICAgICAgICAgICAgdUNvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIFdlJ3ZlIGdvdCB0cmFpbCBzdXJyb2dhdGUuXG4gICAgICAgICAgICAgICAgaWYgKGxlYWRTdXJyb2dhdGUgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHVDb2RlID0gMHgxMDAwMCArIChsZWFkU3Vycm9nYXRlIC0gMHhEODAwKSAqIDB4NDAwICsgKHVDb2RlIC0gMHhEQzAwKTtcbiAgICAgICAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IC0xO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEluY29tcGxldGUgc3Vycm9nYXRlIHBhaXIgLSBvbmx5IHRyYWlsIHN1cnJvZ2F0ZSBmb3VuZC5cbiAgICAgICAgICAgICAgICAgICAgdUNvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsZWFkU3Vycm9nYXRlICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSBzdXJyb2dhdGUgcGFpciAtIG9ubHkgbGVhZCBzdXJyb2dhdGUgZm91bmQuXG4gICAgICAgICAgICBuZXh0Q2hhciA9IHVDb2RlOyB1Q29kZSA9IFVOQVNTSUdORUQ7IC8vIFdyaXRlIGFuIGVycm9yLCB0aGVuIGN1cnJlbnQgY2hhci5cbiAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIENvbnZlcnQgdUNvZGUgY2hhcmFjdGVyLlxuICAgICAgICB2YXIgZGJjc0NvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICBpZiAoc2VxT2JqICE9PSB1bmRlZmluZWQgJiYgdUNvZGUgIT0gVU5BU1NJR05FRCkgeyAvLyBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2VxdWVuY2VcbiAgICAgICAgICAgIHZhciByZXNDb2RlID0gc2VxT2JqW3VDb2RlXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzQ29kZSA9PT0gJ29iamVjdCcpIHsgLy8gU2VxdWVuY2UgY29udGludWVzLlxuICAgICAgICAgICAgICAgIHNlcU9iaiA9IHJlc0NvZGU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc0NvZGUgPT0gJ251bWJlcicpIHsgLy8gU2VxdWVuY2UgZmluaXNoZWQuIFdyaXRlIGl0LlxuICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gcmVzQ29kZTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNDb2RlID09IHVuZGVmaW5lZCkgeyAvLyBDdXJyZW50IGNoYXJhY3RlciBpcyBub3QgcGFydCBvZiB0aGUgc2VxdWVuY2UuXG5cbiAgICAgICAgICAgICAgICAvLyBUcnkgZGVmYXVsdCBjaGFyYWN0ZXIgZm9yIHRoaXMgc2VxdWVuY2VcbiAgICAgICAgICAgICAgICByZXNDb2RlID0gc2VxT2JqW0RFRl9DSEFSXTtcbiAgICAgICAgICAgICAgICBpZiAocmVzQ29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gcmVzQ29kZTsgLy8gRm91bmQuIFdyaXRlIGl0LlxuICAgICAgICAgICAgICAgICAgICBuZXh0Q2hhciA9IHVDb2RlOyAvLyBDdXJyZW50IGNoYXJhY3RlciB3aWxsIGJlIHdyaXR0ZW4gdG9vIGluIHRoZSBuZXh0IGl0ZXJhdGlvbi5cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoYXQgaWYgd2UgaGF2ZSBubyBkZWZhdWx0PyAocmVzQ29kZSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZW4sIHdlIHNob3VsZCB3cml0ZSBmaXJzdCBjaGFyIG9mIHRoZSBzZXF1ZW5jZSBhcy1pcyBhbmQgdHJ5IHRoZSByZXN0IHJlY3Vyc2l2ZWx5LlxuICAgICAgICAgICAgICAgICAgICAvLyBEaWRuJ3QgZG8gaXQgZm9yIG5vdyBiZWNhdXNlIG5vIGVuY29kaW5nIGhhcyB0aGlzIHNpdHVhdGlvbiB5ZXQuXG4gICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwganVzdCBza2lwIHRoZSBzZXF1ZW5jZSBhbmQgd3JpdGUgY3VycmVudCBjaGFyLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcU9iaiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA+PSAwKSB7ICAvLyBSZWd1bGFyIGNoYXJhY3RlclxuICAgICAgICAgICAgdmFyIHN1YnRhYmxlID0gdGhpcy5lbmNvZGVUYWJsZVt1Q29kZSA+PiA4XTtcbiAgICAgICAgICAgIGlmIChzdWJ0YWJsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gc3VidGFibGVbdUNvZGUgJiAweEZGXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGRiY3NDb2RlIDw9IFNFUV9TVEFSVCkgeyAvLyBTZXF1ZW5jZSBzdGFydFxuICAgICAgICAgICAgICAgIHNlcU9iaiA9IHRoaXMuZW5jb2RlVGFibGVTZXFbU0VRX1NUQVJULWRiY3NDb2RlXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRiY3NDb2RlID09IFVOQVNTSUdORUQgJiYgdGhpcy5nYjE4MDMwKSB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIEdCMTgwMzAgYWxnb3JpdGhtIHRvIGZpbmQgY2hhcmFjdGVyKHMpIHRvIHdyaXRlLlxuICAgICAgICAgICAgICAgIHZhciBpZHggPSBmaW5kSWR4KHRoaXMuZ2IxODAzMC51Q2hhcnMsIHVDb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoaWR4ICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYmNzQ29kZSA9IHRoaXMuZ2IxODAzMC5nYkNoYXJzW2lkeF0gKyAodUNvZGUgLSB0aGlzLmdiMTgwMzAudUNoYXJzW2lkeF0pO1xuICAgICAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IDB4ODEgKyBNYXRoLmZsb29yKGRiY3NDb2RlIC8gMTI2MDApOyBkYmNzQ29kZSA9IGRiY3NDb2RlICUgMTI2MDA7XG4gICAgICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMHgzMCArIE1hdGguZmxvb3IoZGJjc0NvZGUgLyAxMjYwKTsgZGJjc0NvZGUgPSBkYmNzQ29kZSAlIDEyNjA7XG4gICAgICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMHg4MSArIE1hdGguZmxvb3IoZGJjc0NvZGUgLyAxMCk7IGRiY3NDb2RlID0gZGJjc0NvZGUgJSAxMDtcbiAgICAgICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSAweDMwICsgZGJjc0NvZGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFdyaXRlIGRiY3NDb2RlIGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGRiY3NDb2RlID09PSBVTkFTU0lHTkVEKVxuICAgICAgICAgICAgZGJjc0NvZGUgPSB0aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZTtcbiAgICAgICAgXG4gICAgICAgIGlmIChkYmNzQ29kZSA8IDB4MTAwKSB7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRiY3NDb2RlIDwgMHgxMDAwMCkge1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+PiA4OyAgIC8vIGhpZ2ggYnl0ZVxuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSAmIDB4RkY7IC8vIGxvdyBieXRlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlID4+IDE2O1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSAoZGJjc0NvZGUgPj4gOCkgJiAweEZGO1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSAmIDB4RkY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlcU9iaiA9IHNlcU9iajtcbiAgICB0aGlzLmxlYWRTdXJyb2dhdGUgPSBsZWFkU3Vycm9nYXRlO1xuICAgIHJldHVybiBuZXdCdWYuc2xpY2UoMCwgaik7XG59XG5cbkRCQ1NFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5sZWFkU3Vycm9nYXRlID09PSAtMSAmJiB0aGlzLnNlcU9iaiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47IC8vIEFsbCBjbGVhbi4gTW9zdCBvZnRlbiBjYXNlLlxuXG4gICAgdmFyIG5ld0J1ZiA9IG5ldyBCdWZmZXIoMTApLCBqID0gMDtcblxuICAgIGlmICh0aGlzLnNlcU9iaikgeyAvLyBXZSdyZSBpbiB0aGUgc2VxdWVuY2UuXG4gICAgICAgIHZhciBkYmNzQ29kZSA9IHRoaXMuc2VxT2JqW0RFRl9DSEFSXTtcbiAgICAgICAgaWYgKGRiY3NDb2RlICE9PSB1bmRlZmluZWQpIHsgLy8gV3JpdGUgYmVnaW5uaW5nIG9mIHRoZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgIGlmIChkYmNzQ29kZSA8IDB4MTAwKSB7XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4gODsgICAvLyBoaWdoIGJ5dGVcbiAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlICYgMHhGRjsgLy8gbG93IGJ5dGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNlZSB0b2RvIGFib3ZlLlxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VxT2JqID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlYWRTdXJyb2dhdGUgIT09IC0xKSB7XG4gICAgICAgIC8vIEluY29tcGxldGUgc3Vycm9nYXRlIHBhaXIgLSBvbmx5IGxlYWQgc3Vycm9nYXRlIGZvdW5kLlxuICAgICAgICBuZXdCdWZbaisrXSA9IHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlO1xuICAgICAgICB0aGlzLmxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG5ld0J1Zi5zbGljZSgwLCBqKTtcbn1cblxuLy8gRXhwb3J0IGZvciB0ZXN0aW5nXG5EQkNTRW5jb2Rlci5wcm90b3R5cGUuZmluZElkeCA9IGZpbmRJZHg7XG5cblxuLy8gPT0gRGVjb2RlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gREJDU0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAvLyBEZWNvZGVyIHN0YXRlXG4gICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICB0aGlzLnByZXZCdWYgPSBuZXcgQnVmZmVyKDApO1xuXG4gICAgLy8gU3RhdGljIGRhdGFcbiAgICB0aGlzLmRlY29kZVRhYmxlcyA9IGNvZGVjLmRlY29kZVRhYmxlcztcbiAgICB0aGlzLmRlY29kZVRhYmxlU2VxID0gY29kZWMuZGVjb2RlVGFibGVTZXE7XG4gICAgdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUgPSBjb2RlYy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgdGhpcy5nYjE4MDMwID0gY29kZWMuZ2IxODAzMDtcbn1cblxuREJDU0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIG5ld0J1ZiA9IG5ldyBCdWZmZXIoYnVmLmxlbmd0aCoyKSxcbiAgICAgICAgbm9kZUlkeCA9IHRoaXMubm9kZUlkeCwgXG4gICAgICAgIHByZXZCdWYgPSB0aGlzLnByZXZCdWYsIHByZXZCdWZPZmZzZXQgPSB0aGlzLnByZXZCdWYubGVuZ3RoLFxuICAgICAgICBzZXFTdGFydCA9IC10aGlzLnByZXZCdWYubGVuZ3RoLCAvLyBpZHggb2YgdGhlIHN0YXJ0IG9mIGN1cnJlbnQgcGFyc2VkIHNlcXVlbmNlLlxuICAgICAgICB1Q29kZTtcblxuICAgIGlmIChwcmV2QnVmT2Zmc2V0ID4gMCkgLy8gTWFrZSBwcmV2IGJ1ZiBvdmVybGFwIGEgbGl0dGxlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNsaWNlIGxhdGVyLlxuICAgICAgICBwcmV2QnVmID0gQnVmZmVyLmNvbmNhdChbcHJldkJ1ZiwgYnVmLnNsaWNlKDAsIDEwKV0pO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY3VyQnl0ZSA9IChpID49IDApID8gYnVmW2ldIDogcHJldkJ1ZltpICsgcHJldkJ1Zk9mZnNldF07XG5cbiAgICAgICAgLy8gTG9va3VwIGluIGN1cnJlbnQgdHJpZSBub2RlLlxuICAgICAgICB2YXIgdUNvZGUgPSB0aGlzLmRlY29kZVRhYmxlc1tub2RlSWR4XVtjdXJCeXRlXTtcblxuICAgICAgICBpZiAodUNvZGUgPj0gMCkgeyBcbiAgICAgICAgICAgIC8vIE5vcm1hbCBjaGFyYWN0ZXIsIGp1c3QgdXNlIGl0LlxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlID09PSBVTkFTU0lHTkVEKSB7IC8vIFVua25vd24gY2hhci5cbiAgICAgICAgICAgIC8vIFRPRE86IENhbGxiYWNrIHdpdGggc2VxLlxuICAgICAgICAgICAgLy92YXIgY3VyU2VxID0gKHNlcVN0YXJ0ID49IDApID8gYnVmLnNsaWNlKHNlcVN0YXJ0LCBpKzEpIDogcHJldkJ1Zi5zbGljZShzZXFTdGFydCArIHByZXZCdWZPZmZzZXQsIGkrMSArIHByZXZCdWZPZmZzZXQpO1xuICAgICAgICAgICAgaSA9IHNlcVN0YXJ0OyAvLyBUcnkgdG8gcGFyc2UgYWdhaW4sIGFmdGVyIHNraXBwaW5nIGZpcnN0IGJ5dGUgb2YgdGhlIHNlcXVlbmNlICgnaScgd2lsbCBiZSBpbmNyZW1lbnRlZCBieSAnZm9yJyBjeWNsZSkuXG4gICAgICAgICAgICB1Q29kZSA9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPT09IEdCMTgwMzBfQ09ERSkge1xuICAgICAgICAgICAgdmFyIGN1clNlcSA9IChzZXFTdGFydCA+PSAwKSA/IGJ1Zi5zbGljZShzZXFTdGFydCwgaSsxKSA6IHByZXZCdWYuc2xpY2Uoc2VxU3RhcnQgKyBwcmV2QnVmT2Zmc2V0LCBpKzEgKyBwcmV2QnVmT2Zmc2V0KTtcbiAgICAgICAgICAgIHZhciBwdHIgPSAoY3VyU2VxWzBdLTB4ODEpKjEyNjAwICsgKGN1clNlcVsxXS0weDMwKSoxMjYwICsgKGN1clNlcVsyXS0weDgxKSoxMCArIChjdXJTZXFbM10tMHgzMCk7XG4gICAgICAgICAgICB2YXIgaWR4ID0gZmluZElkeCh0aGlzLmdiMTgwMzAuZ2JDaGFycywgcHRyKTtcbiAgICAgICAgICAgIHVDb2RlID0gdGhpcy5nYjE4MDMwLnVDaGFyc1tpZHhdICsgcHRyIC0gdGhpcy5nYjE4MDMwLmdiQ2hhcnNbaWR4XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA8PSBOT0RFX1NUQVJUKSB7IC8vIEdvIHRvIG5leHQgdHJpZSBub2RlLlxuICAgICAgICAgICAgbm9kZUlkeCA9IE5PREVfU1RBUlQgLSB1Q29kZTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlIDw9IFNFUV9TVEFSVCkgeyAvLyBPdXRwdXQgYSBzZXF1ZW5jZSBvZiBjaGFycy5cbiAgICAgICAgICAgIHZhciBzZXEgPSB0aGlzLmRlY29kZVRhYmxlU2VxW1NFUV9TVEFSVCAtIHVDb2RlXTtcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2VxLmxlbmd0aCAtIDE7IGsrKykge1xuICAgICAgICAgICAgICAgIHVDb2RlID0gc2VxW2tdO1xuICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgJiAweEZGO1xuICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgPj4gODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVDb2RlID0gc2VxW3NlcS5sZW5ndGgtMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWNvbnYtbGl0ZSBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCBkZWNvZGluZyB0YWJsZSB2YWx1ZSBcIiArIHVDb2RlICsgXCIgYXQgXCIgKyBub2RlSWR4ICsgXCIvXCIgKyBjdXJCeXRlKTtcblxuICAgICAgICAvLyBXcml0ZSB0aGUgY2hhcmFjdGVyIHRvIGJ1ZmZlciwgaGFuZGxpbmcgaGlnaGVyIHBsYW5lcyB1c2luZyBzdXJyb2dhdGUgcGFpci5cbiAgICAgICAgaWYgKHVDb2RlID4gMHhGRkZGKSB7IFxuICAgICAgICAgICAgdUNvZGUgLT0gMHgxMDAwMDtcbiAgICAgICAgICAgIHZhciB1Q29kZUxlYWQgPSAweEQ4MDAgKyBNYXRoLmZsb29yKHVDb2RlIC8gMHg0MDApO1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZUxlYWQgJiAweEZGO1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZUxlYWQgPj4gODtcblxuICAgICAgICAgICAgdUNvZGUgPSAweERDMDAgKyB1Q29kZSAlIDB4NDAwO1xuICAgICAgICB9XG4gICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgJiAweEZGO1xuICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlID4+IDg7XG5cbiAgICAgICAgLy8gUmVzZXQgdHJpZSBub2RlLlxuICAgICAgICBub2RlSWR4ID0gMDsgc2VxU3RhcnQgPSBpKzE7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlSWR4ID0gbm9kZUlkeDtcbiAgICB0aGlzLnByZXZCdWYgPSAoc2VxU3RhcnQgPj0gMCkgPyBidWYuc2xpY2Uoc2VxU3RhcnQpIDogcHJldkJ1Zi5zbGljZShzZXFTdGFydCArIHByZXZCdWZPZmZzZXQpO1xuICAgIHJldHVybiBuZXdCdWYuc2xpY2UoMCwgaikudG9TdHJpbmcoJ3VjczInKTtcbn1cblxuREJDU0RlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXQgPSAnJztcblxuICAgIC8vIFRyeSB0byBwYXJzZSBhbGwgcmVtYWluaW5nIGNoYXJzLlxuICAgIHdoaWxlICh0aGlzLnByZXZCdWYubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBTa2lwIDEgY2hhcmFjdGVyIGluIHRoZSBidWZmZXIuXG4gICAgICAgIHJldCArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgdmFyIGJ1ZiA9IHRoaXMucHJldkJ1Zi5zbGljZSgxKTtcblxuICAgICAgICAvLyBQYXJzZSByZW1haW5pbmcgYXMgdXN1YWwuXG4gICAgICAgIHRoaXMucHJldkJ1ZiA9IG5ldyBCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMubm9kZUlkeCA9IDA7XG4gICAgICAgIGlmIChidWYubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldCArPSB0aGlzLndyaXRlKGJ1Zik7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICByZXR1cm4gcmV0O1xufVxuXG4vLyBCaW5hcnkgc2VhcmNoIGZvciBHQjE4MDMwLiBSZXR1cm5zIGxhcmdlc3QgaSBzdWNoIHRoYXQgdGFibGVbaV0gPD0gdmFsLlxuZnVuY3Rpb24gZmluZElkeCh0YWJsZSwgdmFsKSB7XG4gICAgaWYgKHRhYmxlWzBdID4gdmFsKVxuICAgICAgICByZXR1cm4gLTE7XG5cbiAgICB2YXIgbCA9IDAsIHIgPSB0YWJsZS5sZW5ndGg7XG4gICAgd2hpbGUgKGwgPCByLTEpIHsgLy8gYWx3YXlzIHRhYmxlW2xdIDw9IHZhbCA8IHRhYmxlW3JdXG4gICAgICAgIHZhciBtaWQgPSBsICsgTWF0aC5mbG9vcigoci1sKzEpLzIpO1xuICAgICAgICBpZiAodGFibGVbbWlkXSA8PSB2YWwpXG4gICAgICAgICAgICBsID0gbWlkO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByID0gbWlkO1xuICAgIH1cbiAgICByZXR1cm4gbDtcbn1cblxuIiwiXCJ1c2Ugc3RyaWN0XCJcblxuLy8gRGVzY3JpcHRpb24gb2Ygc3VwcG9ydGVkIGRvdWJsZSBieXRlIGVuY29kaW5ncyBhbmQgYWxpYXNlcy5cbi8vIFRhYmxlcyBhcmUgbm90IHJlcXVpcmUoKS1kIHVudGlsIHRoZXkgYXJlIG5lZWRlZCB0byBzcGVlZCB1cCBsaWJyYXJ5IGxvYWQuXG4vLyByZXF1aXJlKCktcyBhcmUgZGlyZWN0IHRvIHN1cHBvcnQgQnJvd3NlcmlmeS5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgXG4gICAgLy8gPT0gSmFwYW5lc2UvU2hpZnRKSVMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEFsbCBqYXBhbmVzZSBlbmNvZGluZ3MgYXJlIGJhc2VkIG9uIEpJUyBYIHNldCBvZiBzdGFuZGFyZHM6XG4gICAgLy8gSklTIFggMDIwMSAtIFNpbmdsZS1ieXRlIGVuY29kaW5nIG9mIEFTQ0lJICsgwqUgKyBLYW5hIGNoYXJzIGF0IDB4QTEtMHhERi5cbiAgICAvLyBKSVMgWCAwMjA4IC0gTWFpbiBzZXQgb2YgNjg3OSBjaGFyYWN0ZXJzLCBwbGFjZWQgaW4gOTR4OTQgcGxhbmUsIHRvIGJlIGVuY29kZWQgYnkgMiBieXRlcy4gXG4gICAgLy8gICAgICAgICAgICAgIEhhcyBzZXZlcmFsIHZhcmlhdGlvbnMgaW4gMTk3OCwgMTk4MywgMTk5MCBhbmQgMTk5Ny5cbiAgICAvLyBKSVMgWCAwMjEyIC0gU3VwcGxlbWVudGFyeSBwbGFuZSBvZiA2MDY3IGNoYXJzIGluIDk0eDk0IHBsYW5lLiAxOTkwLiBFZmZlY3RpdmVseSBkZWFkLlxuICAgIC8vIEpJUyBYIDAyMTMgLSBFeHRlbnNpb24gYW5kIG1vZGVybiByZXBsYWNlbWVudCBvZiAwMjA4IGFuZCAwMjEyLiBUb3RhbCBjaGFyczogMTEyMzMuXG4gICAgLy8gICAgICAgICAgICAgIDIgcGxhbmVzLCBmaXJzdCBpcyBzdXBlcnNldCBvZiAwMjA4LCBzZWNvbmQgLSByZXZpc2VkIDAyMTIuXG4gICAgLy8gICAgICAgICAgICAgIEludHJvZHVjZWQgaW4gMjAwMCwgcmV2aXNlZCAyMDA0LiBTb21lIGNoYXJhY3RlcnMgYXJlIGluIFVuaWNvZGUgUGxhbmUgMiAoMHgyeHh4eClcblxuICAgIC8vIEJ5dGUgZW5jb2RpbmdzIGFyZTpcbiAgICAvLyAgKiBTaGlmdF9KSVM6IENvbXBhdGlibGUgd2l0aCAwMjAxLCB1c2VzIG5vdCBkZWZpbmVkIGNoYXJzIGluIHRvcCBoYWxmIGFzIGxlYWQgYnl0ZXMgZm9yIGRvdWJsZS1ieXRlXG4gICAgLy8gICAgICAgICAgICAgICBlbmNvZGluZyBvZiAwMjA4LiBMZWFkIGJ5dGUgcmFuZ2VzOiAweDgxLTB4OUYsIDB4RTAtMHhFRjsgVHJhaWwgYnl0ZSByYW5nZXM6IDB4NDAtMHg3RSwgMHg4MC0weDlFLCAweDlGLTB4RkMuXG4gICAgLy8gICAgICAgICAgICAgICBXaW5kb3dzIENQOTMyIGlzIGEgc3VwZXJzZXQgb2YgU2hpZnRfSklTLiBTb21lIGNvbXBhbmllcyBhZGRlZCBtb3JlIGNoYXJzLCBub3RhYmx5IEtEREkuXG4gICAgLy8gICogRVVDLUpQOiAgICBVcCB0byAzIGJ5dGVzIHBlciBjaGFyYWN0ZXIuIFVzZWQgbW9zdGx5IG9uICpuaXhlcy5cbiAgICAvLyAgICAgICAgICAgICAgIDB4MDAtMHg3RiAgICAgICAtIGxvd2VyIHBhcnQgb2YgMDIwMVxuICAgIC8vICAgICAgICAgICAgICAgMHg4RSwgMHhBMS0weERGIC0gdXBwZXIgcGFydCBvZiAwMjAxXG4gICAgLy8gICAgICAgICAgICAgICAoMHhBMS0weEZFKXgyICAgLSAwMjA4IHBsYW5lICg5NHg5NCkuXG4gICAgLy8gICAgICAgICAgICAgICAweDhGLCAoMHhBMS0weEZFKXgyIC0gMDIxMiBwbGFuZSAoOTR4OTQpLlxuICAgIC8vICAqIEpJUyBYIDIwODogNy1iaXQsIGRpcmVjdCBlbmNvZGluZyBvZiAwMjA4LiBCeXRlIHJhbmdlczogMHgyMS0weDdFICg5NCB2YWx1ZXMpLiBVbmNvbW1vbi5cbiAgICAvLyAgICAgICAgICAgICAgIFVzZWQgYXMtaXMgaW4gSVNPMjAyMiBmYW1pbHkuXG4gICAgLy8gICogSVNPMjAyMi1KUDogU3RhdGVmdWwgZW5jb2RpbmcsIHdpdGggZXNjYXBlIHNlcXVlbmNlcyB0byBzd2l0Y2ggYmV0d2VlbiBBU0NJSSwgXG4gICAgLy8gICAgICAgICAgICAgICAgMDIwMS0xOTc2IFJvbWFuLCAwMjA4LTE5NzgsIDAyMDgtMTk4My5cbiAgICAvLyAgKiBJU08yMDIyLUpQLTE6IEFkZHMgZXNjIHNlcSBmb3IgMDIxMi0xOTkwLlxuICAgIC8vICAqIElTTzIwMjItSlAtMjogQWRkcyBlc2Mgc2VxIGZvciBHQjIzMTMtMTk4MCwgS1NYMTAwMS0xOTkyLCBJU084ODU5LTEsIElTTzg4NTktNy5cbiAgICAvLyAgKiBJU08yMDIyLUpQLTM6IEFkZHMgZXNjIHNlcSBmb3IgMDIwMS0xOTc2IEthbmEgc2V0LCAwMjEzLTIwMDAgUGxhbmVzIDEsIDIuXG4gICAgLy8gICogSVNPMjAyMi1KUC0yMDA0OiBBZGRzIDAyMTMtMjAwNCBQbGFuZSAxLlxuICAgIC8vXG4gICAgLy8gQWZ0ZXIgSklTIFggMDIxMyBhcHBlYXJlZCwgU2hpZnRfSklTLTIwMDQsIEVVQy1KSVNYMDIxMyBhbmQgSVNPMjAyMi1KUC0yMDA0IGZvbGxvd2VkLCB3aXRoIGp1c3QgY2hhbmdpbmcgdGhlIHBsYW5lcy5cbiAgICAvL1xuICAgIC8vIE92ZXJhbGwsIGl0IHNlZW1zIHRoYXQgaXQncyBhIG1lc3MgOiggaHR0cDovL3d3dzgucGxhbGEub3IuanAvdGt1Ym90YTEvdW5pY29kZS1zeW1ib2xzLW1hcDIuaHRtbFxuXG5cbiAgICAnc2hpZnRqaXMnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL3NoaWZ0amlzLmpzb24nKSB9LFxuICAgICAgICBlbmNvZGVBZGQ6IHsnXFx1MDBhNSc6IDB4NUMsICdcXHUyMDNFJzogMHg3RX0sXG4gICAgICAgIGVuY29kZVNraXBWYWxzOiBbe2Zyb206IDB4RUQ0MCwgdG86IDB4Rjk0MH1dLFxuICAgIH0sXG4gICAgJ2Nzc2hpZnRqaXMnOiAnc2hpZnRqaXMnLFxuICAgICdtc2thbmppJzogJ3NoaWZ0amlzJyxcbiAgICAnc2ppcyc6ICdzaGlmdGppcycsXG4gICAgJ3dpbmRvd3MzMWonOiAnc2hpZnRqaXMnLFxuICAgICd4c2ppcyc6ICdzaGlmdGppcycsXG4gICAgJ3dpbmRvd3M5MzInOiAnc2hpZnRqaXMnLFxuICAgICc5MzInOiAnc2hpZnRqaXMnLFxuICAgICdjcDkzMic6ICdzaGlmdGppcycsXG5cbiAgICAnZXVjanAnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2V1Y2pwLmpzb24nKSB9LFxuICAgICAgICBlbmNvZGVBZGQ6IHsnXFx1MDBhNSc6IDB4NUMsICdcXHUyMDNFJzogMHg3RX0sXG4gICAgfSxcblxuICAgIC8vIFRPRE86IEtEREkgZXh0ZW5zaW9uIHRvIFNoaWZ0X0pJU1xuICAgIC8vIFRPRE86IElCTSBDQ1NJRCA5NDIgPSBDUDkzMiwgYnV0IEYwLUY5IGN1c3RvbSBjaGFycyBhbmQgb3RoZXIgY2hhciBjaGFuZ2VzLlxuICAgIC8vIFRPRE86IElCTSBDQ1NJRCA5NDMgPSBTaGlmdF9KSVMgPSBDUDkzMiB3aXRoIG9yaWdpbmFsIFNoaWZ0X0pJUyBsb3dlciAxMjggY2hhcnMuXG5cbiAgICAvLyA9PSBDaGluZXNlL0dCSyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HQktcblxuICAgIC8vIE9sZGVzdCBHQjIzMTIgKDE5ODEsIH43NjAwIGNoYXJzKSBpcyBhIHN1YnNldCBvZiBDUDkzNlxuICAgICdnYjIzMTInOiAnY3A5MzYnLFxuICAgICdnYjIzMTI4MCc6ICdjcDkzNicsXG4gICAgJ2diMjMxMjE5ODAnOiAnY3A5MzYnLFxuICAgICdjc2diMjMxMic6ICdjcDkzNicsXG4gICAgJ2NzaXNvNThnYjIzMTI4MCc6ICdjcDkzNicsXG4gICAgJ2V1Y2NuJzogJ2NwOTM2JyxcbiAgICAnaXNvaXI1OCc6ICdnYmsnLFxuXG4gICAgLy8gTWljcm9zb2Z0J3MgQ1A5MzYgaXMgYSBzdWJzZXQgYW5kIGFwcHJveGltYXRpb24gb2YgR0JLLlxuICAgIC8vIFRPRE86IEV1cm8gPSAweDgwIGluIGNwOTM2LCBidXQgbm90IGluIEdCSyAod2hlcmUgaXQncyB2YWxpZCBidXQgdW5kZWZpbmVkKVxuICAgICd3aW5kb3dzOTM2JzogJ2NwOTM2JyxcbiAgICAnOTM2JzogJ2NwOTM2JyxcbiAgICAnY3A5MzYnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2NwOTM2Lmpzb24nKSB9LFxuICAgIH0sXG5cbiAgICAvLyBHQksgKH4yMjAwMCBjaGFycykgaXMgYW4gZXh0ZW5zaW9uIG9mIENQOTM2IHRoYXQgYWRkZWQgdXNlci1tYXBwZWQgY2hhcnMgYW5kIHNvbWUgb3RoZXIuXG4gICAgJ2diayc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5MzYuanNvbicpLmNvbmNhdChyZXF1aXJlKCcuL3RhYmxlcy9nYmstYWRkZWQuanNvbicpKSB9LFxuICAgIH0sXG4gICAgJ3hnYmsnOiAnZ2JrJyxcblxuICAgIC8vIEdCMTgwMzAgaXMgYW4gYWxnb3JpdGhtaWMgZXh0ZW5zaW9uIG9mIEdCSy5cbiAgICAnZ2IxODAzMCc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5MzYuanNvbicpLmNvbmNhdChyZXF1aXJlKCcuL3RhYmxlcy9nYmstYWRkZWQuanNvbicpKSB9LFxuICAgICAgICBnYjE4MDMwOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2diMTgwMzAtcmFuZ2VzLmpzb24nKSB9LFxuICAgIH0sXG5cbiAgICAnY2hpbmVzZSc6ICdnYjE4MDMwJyxcblxuICAgIC8vIFRPRE86IFN1cHBvcnQgR0IxODAzMCAofjI3MDAwIGNoYXJzICsgd2hvbGUgdW5pY29kZSBtYXBwaW5nLCBjcDU0OTM2KVxuICAgIC8vIGh0dHA6Ly9pY3UtcHJvamVjdC5vcmcvZG9jcy9wYXBlcnMvZ2IxODAzMC5odG1sXG4gICAgLy8gaHR0cDovL3NvdXJjZS5pY3UtcHJvamVjdC5vcmcvcmVwb3MvaWN1L2RhdGEvdHJ1bmsvY2hhcnNldC9kYXRhL3htbC9nYi0xODAzMC0yMDAwLnhtbFxuICAgIC8vIGh0dHA6Ly93d3cua2huZ2FpLmNvbS9jaGluZXNlL2NoYXJtYXAvdGJsZ2JrLnBocD9wYWdlPTBcblxuICAgIC8vID09IEtvcmVhbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBFVUMtS1IsIEtTX0NfNTYwMSBhbmQgS1MgWCAxMDAxIGFyZSBleGFjdGx5IHRoZSBzYW1lLlxuICAgICd3aW5kb3dzOTQ5JzogJ2NwOTQ5JyxcbiAgICAnOTQ5JzogJ2NwOTQ5JyxcbiAgICAnY3A5NDknOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2NwOTQ5Lmpzb24nKSB9LFxuICAgIH0sXG5cbiAgICAnY3NldWNrcic6ICdjcDk0OScsXG4gICAgJ2Nza3NjNTYwMTE5ODcnOiAnY3A5NDknLFxuICAgICdldWNrcic6ICdjcDk0OScsXG4gICAgJ2lzb2lyMTQ5JzogJ2NwOTQ5JyxcbiAgICAna29yZWFuJzogJ2NwOTQ5JyxcbiAgICAna3NjNTYwMTE5ODcnOiAnY3A5NDknLFxuICAgICdrc2M1NjAxMTk4OSc6ICdjcDk0OScsXG4gICAgJ2tzYzU2MDEnOiAnY3A5NDknLFxuXG5cbiAgICAvLyA9PSBCaWc1L1RhaXdhbi9Ib25nIEtvbmcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gVGhlcmUgYXJlIGxvdHMgb2YgdGFibGVzIGZvciBCaWc1IGFuZCBjcDk1MC4gUGxlYXNlIHNlZSB0aGUgZm9sbG93aW5nIGxpbmtzIGZvciBoaXN0b3J5OlxuICAgIC8vIGh0dHA6Ly9tb3p0dy5vcmcvZG9jcy9iaWc1LyAgaHR0cDovL3d3dy5oYWlibGUuZGUvYnJ1bm8vY2hhcnNldHMvY29udmVyc2lvbi10YWJsZXMvQmlnNS5odG1sXG4gICAgLy8gVmFyaWF0aW9ucywgaW4gcm91Z2hseSBudW1iZXIgb2YgZGVmaW5lZCBjaGFyczpcbiAgICAvLyAgKiBXaW5kb3dzIENQIDk1MDogTWljcm9zb2Z0IHZhcmlhbnQgb2YgQmlnNS4gQ2Fub25pY2FsOiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9WRU5ET1JTL01JQ1NGVC9XSU5ET1dTL0NQOTUwLlRYVFxuICAgIC8vICAqIFdpbmRvd3MgQ1AgOTUxOiBNaWNyb3NvZnQgdmFyaWFudCBvZiBCaWc1LUhLU0NTLTIwMDEuIFNlZW1zIHRvIGJlIG5ldmVyIHB1YmxpYy4gaHR0cDovL21lLmFiZWxjaGV1bmcub3JnL2FydGljbGVzL3Jlc2VhcmNoL3doYXQtaXMtY3A5NTEvXG4gICAgLy8gICogQmlnNS0yMDAzIChUYWl3YW4gc3RhbmRhcmQpIGFsbW9zdCBzdXBlcnNldCBvZiBjcDk1MC5cbiAgICAvLyAgKiBVbmljb2RlLWF0LW9uIChVQU8pIC8gTW96aWxsYSAxLjguIEZhbGxpbmcgb3V0IG9mIHVzZSBvbiB0aGUgV2ViLiBOb3Qgc3VwcG9ydGVkIGJ5IG90aGVyIGJyb3dzZXJzLlxuICAgIC8vICAqIEJpZzUtSEtTQ1MgKC0yMDAxLCAtMjAwNCwgLTIwMDgpLiBIb25nIEtvbmcgc3RhbmRhcmQuIFxuICAgIC8vICAgIG1hbnkgdW5pY29kZSBjb2RlIHBvaW50cyBtb3ZlZCBmcm9tIFBVQSB0byBTdXBwbGVtZW50YXJ5IHBsYW5lIChVKzJYWFhYKSBvdmVyIHRoZSB5ZWFycy5cbiAgICAvLyAgICBQbHVzLCBpdCBoYXMgNCBjb21iaW5pbmcgc2VxdWVuY2VzLlxuICAgIC8vICAgIFNlZW1zIHRoYXQgTW96aWxsYSByZWZ1c2VkIHRvIHN1cHBvcnQgaXQgZm9yIDEwIHlycy4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNDMxIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTMxMDI5OVxuICAgIC8vICAgIGJlY2F1c2UgYmlnNS1oa3NjcyBpcyB0aGUgb25seSBlbmNvZGluZyB0byBpbmNsdWRlIGFzdHJhbCBjaGFyYWN0ZXJzIGluIG5vbi1hbGdvcml0aG1pYyB3YXkuXG4gICAgLy8gICAgSW1wbGVtZW50YXRpb25zIGFyZSBub3QgY29uc2lzdGVudCB3aXRoaW4gYnJvd3NlcnM7IHNvbWV0aW1lcyBsYWJlbGVkIGFzIGp1c3QgYmlnNS5cbiAgICAvLyAgICBNUyBJbnRlcm5ldCBFeHBsb3JlciBzd2l0Y2hlcyBmcm9tIGJpZzUgdG8gYmlnNS1oa3NjcyB3aGVuIGEgcGF0Y2ggYXBwbGllZC5cbiAgICAvLyAgICBHcmVhdCBkaXNjdXNzaW9uICYgcmVjYXAgb2Ygd2hhdCdzIGdvaW5nIG9uIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjQ3MCNjMzFcbiAgICAvLyAgICBJbiB0aGUgZW5jb2RlciwgaXQgbWlnaHQgbWFrZSBzZW5zZSB0byBzdXBwb3J0IGVuY29kaW5nIG9sZCBQVUEgbWFwcGluZ3MgdG8gQmlnNSBieXRlcyBzZXEtcy5cbiAgICAvLyAgICBPZmZpY2lhbCBzcGVjOiBodHRwOi8vd3d3Lm9nY2lvLmdvdi5oay9lbi9idXNpbmVzcy90ZWNoX3Byb21vdGlvbi9jY2xpL3Rlcm1zL2RvYy8yMDAzY21wXzIwMDgudHh0XG4gICAgLy8gICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5vZ2Npby5nb3YuaGsvdGMvYnVzaW5lc3MvdGVjaF9wcm9tb3Rpb24vY2NsaS90ZXJtcy9kb2MvaGtzY3MtMjAwOC1iaWc1LWlzby50eHRcbiAgICAvLyBcbiAgICAvLyBDdXJyZW50IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRvIGRlYWwgd2l0aCBCaWc1KC1IS1NDUykgaXMgaW4gdGhlIEVuY29kaW5nIFN0YW5kYXJkLCBodHRwOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNiaWc1LWVuY29kZXJcbiAgICAvLyBVbmljb2RlIG1hcHBpbmcgKGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL09CU09MRVRFL0VBU1RBU0lBL09USEVSL0JJRzUuVFhUKSBpcyBzYWlkIHRvIGJlIHdyb25nLlxuXG4gICAgJ3dpbmRvd3M5NTAnOiAnY3A5NTAnLFxuICAgICc5NTAnOiAnY3A5NTAnLFxuICAgICdjcDk1MCc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5NTAuanNvbicpIH0sXG4gICAgfSxcblxuICAgIC8vIEJpZzUgaGFzIG1hbnkgdmFyaWF0aW9ucyBhbmQgaXMgYW4gZXh0ZW5zaW9uIG9mIGNwOTUwLiBXZSB1c2UgRW5jb2RpbmcgU3RhbmRhcmQncyBhcyBhIGNvbnNlbnN1cy5cbiAgICAnYmlnNSc6ICdiaWc1aGtzY3MnLFxuICAgICdiaWc1aGtzY3MnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2NwOTUwLmpzb24nKS5jb25jYXQocmVxdWlyZSgnLi90YWJsZXMvYmlnNS1hZGRlZC5qc29uJykpIH0sXG4gICAgICAgIGVuY29kZVNraXBWYWxzOiBbMHhhMmNjXSxcbiAgICB9LFxuXG4gICAgJ2NuYmlnNSc6ICdiaWc1aGtzY3MnLFxuICAgICdjc2JpZzUnOiAnYmlnNWhrc2NzJyxcbiAgICAneHhiaWc1JzogJ2JpZzVoa3NjcycsXG5cbn07XG4iLCJcInVzZSBzdHJpY3RcIlxuXG4vLyBVcGRhdGUgdGhpcyBhcnJheSBpZiB5b3UgYWRkL3JlbmFtZS9yZW1vdmUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuXG4vLyBXZSBzdXBwb3J0IEJyb3dzZXJpZnkgYnkgc2tpcHBpbmcgYXV0b21hdGljIG1vZHVsZSBkaXNjb3ZlcnkgYW5kIHJlcXVpcmluZyBtb2R1bGVzIGRpcmVjdGx5LlxudmFyIG1vZHVsZXMgPSBbXG4gICAgcmVxdWlyZShcIi4vaW50ZXJuYWxcIiksXG4gICAgcmVxdWlyZShcIi4vdXRmMTZcIiksXG4gICAgcmVxdWlyZShcIi4vdXRmN1wiKSxcbiAgICByZXF1aXJlKFwiLi9zYmNzLWNvZGVjXCIpLFxuICAgIHJlcXVpcmUoXCIuL3NiY3MtZGF0YVwiKSxcbiAgICByZXF1aXJlKFwiLi9zYmNzLWRhdGEtZ2VuZXJhdGVkXCIpLFxuICAgIHJlcXVpcmUoXCIuL2RiY3MtY29kZWNcIiksXG4gICAgcmVxdWlyZShcIi4vZGJjcy1kYXRhXCIpLFxuXTtcblxuLy8gUHV0IGFsbCBlbmNvZGluZy9hbGlhcy9jb2RlYyBkZWZpbml0aW9ucyB0byBzaW5nbGUgb2JqZWN0IGFuZCBleHBvcnQgaXQuIFxuZm9yICh2YXIgaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1vZHVsZSA9IG1vZHVsZXNbaV07XG4gICAgZm9yICh2YXIgZW5jIGluIG1vZHVsZSlcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2R1bGUsIGVuYykpXG4gICAgICAgICAgICBleHBvcnRzW2VuY10gPSBtb2R1bGVbZW5jXTtcbn1cbiIsIlwidXNlIHN0cmljdFwiXG5cbi8vIEV4cG9ydCBOb2RlLmpzIGludGVybmFsIGVuY29kaW5ncy5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gRW5jb2RpbmdzXG4gICAgdXRmODogICB7IHR5cGU6IFwiX2ludGVybmFsXCIsIGJvbUF3YXJlOiB0cnVlfSxcbiAgICBjZXN1ODogIHsgdHlwZTogXCJfaW50ZXJuYWxcIiwgYm9tQXdhcmU6IHRydWV9LFxuICAgIHVuaWNvZGUxMXV0Zjg6IFwidXRmOFwiLFxuXG4gICAgdWNzMjogICB7IHR5cGU6IFwiX2ludGVybmFsXCIsIGJvbUF3YXJlOiB0cnVlfSxcbiAgICB1dGYxNmxlOiBcInVjczJcIixcblxuICAgIGJpbmFyeTogeyB0eXBlOiBcIl9pbnRlcm5hbFwiIH0sXG4gICAgYmFzZTY0OiB7IHR5cGU6IFwiX2ludGVybmFsXCIgfSxcbiAgICBoZXg6ICAgIHsgdHlwZTogXCJfaW50ZXJuYWxcIiB9LFxuXG4gICAgLy8gQ29kZWMuXG4gICAgX2ludGVybmFsOiBJbnRlcm5hbENvZGVjLFxufTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gSW50ZXJuYWxDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5lbmMgPSBjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lO1xuICAgIHRoaXMuYm9tQXdhcmUgPSBjb2RlY09wdGlvbnMuYm9tQXdhcmU7XG5cbiAgICBpZiAodGhpcy5lbmMgPT09IFwiYmFzZTY0XCIpXG4gICAgICAgIHRoaXMuZW5jb2RlciA9IEludGVybmFsRW5jb2RlckJhc2U2NDtcbiAgICBlbHNlIGlmICh0aGlzLmVuYyA9PT0gXCJjZXN1OFwiKSB7XG4gICAgICAgIHRoaXMuZW5jID0gXCJ1dGY4XCI7IC8vIFVzZSB1dGY4IGZvciBkZWNvZGluZy5cbiAgICAgICAgdGhpcy5lbmNvZGVyID0gSW50ZXJuYWxFbmNvZGVyQ2VzdTg7XG5cbiAgICAgICAgLy8gQWRkIGRlY29kZXIgZm9yIHZlcnNpb25zIG9mIE5vZGUgbm90IHN1cHBvcnRpbmcgQ0VTVS04XG4gICAgICAgIGlmIChuZXcgQnVmZmVyKFwiZWRhMDgwXCIsICdoZXgnKS50b1N0cmluZygpLmxlbmd0aCA9PSAzKSB7XG4gICAgICAgICAgICB0aGlzLmRlY29kZXIgPSBJbnRlcm5hbERlY29kZXJDZXN1ODtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENoYXJVbmljb2RlID0gaWNvbnYuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5JbnRlcm5hbENvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gSW50ZXJuYWxFbmNvZGVyO1xuSW50ZXJuYWxDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IEludGVybmFsRGVjb2RlcjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gV2UgdXNlIG5vZGUuanMgaW50ZXJuYWwgZGVjb2Rlci4gSXRzIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSBhcyBvdXJzLlxudmFyIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpLlN0cmluZ0RlY29kZXI7XG5cbmlmICghU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kKSAvLyBOb2RlIHYwLjggZG9lc24ndCBoYXZlIHRoaXMgbWV0aG9kLlxuICAgIFN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge307XG5cblxuZnVuY3Rpb24gSW50ZXJuYWxEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgU3RyaW5nRGVjb2Rlci5jYWxsKHRoaXMsIGNvZGVjLmVuYyk7XG59XG5cbkludGVybmFsRGVjb2Rlci5wcm90b3R5cGUgPSBTdHJpbmdEZWNvZGVyLnByb3RvdHlwZTtcblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW5jb2RlciBpcyBtb3N0bHkgdHJpdmlhbFxuXG5mdW5jdGlvbiBJbnRlcm5hbEVuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmVuYyA9IGNvZGVjLmVuYztcbn1cblxuSW50ZXJuYWxFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKHN0ciwgdGhpcy5lbmMpO1xufVxuXG5JbnRlcm5hbEVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGNlcHQgYmFzZTY0IGVuY29kZXIsIHdoaWNoIG11c3Qga2VlcCBpdHMgc3RhdGUuXG5cbmZ1bmN0aW9uIEludGVybmFsRW5jb2RlckJhc2U2NChvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMucHJldlN0ciA9ICcnO1xufVxuXG5JbnRlcm5hbEVuY29kZXJCYXNlNjQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgc3RyID0gdGhpcy5wcmV2U3RyICsgc3RyO1xuICAgIHZhciBjb21wbGV0ZVF1YWRzID0gc3RyLmxlbmd0aCAtIChzdHIubGVuZ3RoICUgNCk7XG4gICAgdGhpcy5wcmV2U3RyID0gc3RyLnNsaWNlKGNvbXBsZXRlUXVhZHMpO1xuICAgIHN0ciA9IHN0ci5zbGljZSgwLCBjb21wbGV0ZVF1YWRzKTtcblxuICAgIHJldHVybiBuZXcgQnVmZmVyKHN0ciwgXCJiYXNlNjRcIik7XG59XG5cbkludGVybmFsRW5jb2RlckJhc2U2NC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIodGhpcy5wcmV2U3RyLCBcImJhc2U2NFwiKTtcbn1cblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ0VTVS04IGVuY29kZXIgaXMgYWxzbyBzcGVjaWFsLlxuXG5mdW5jdGlvbiBJbnRlcm5hbEVuY29kZXJDZXN1OChvcHRpb25zLCBjb2RlYykge1xufVxuXG5JbnRlcm5hbEVuY29kZXJDZXN1OC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzdHIubGVuZ3RoICogMyksIGJ1ZklkeCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIE5haXZlIGltcGxlbWVudGF0aW9uLCBidXQgaXQgd29ya3MgYmVjYXVzZSBDRVNVLTggaXMgZXNwZWNpYWxseSBlYXN5XG4gICAgICAgIC8vIHRvIGNvbnZlcnQgZnJvbSBVVEYtMTYgKHdoaWNoIGFsbCBKUyBzdHJpbmdzIGFyZSBlbmNvZGVkIGluKS5cbiAgICAgICAgaWYgKGNoYXJDb2RlIDwgMHg4MClcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBjaGFyQ29kZTtcbiAgICAgICAgZWxzZSBpZiAoY2hhckNvZGUgPCAweDgwMCkge1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4QzAgKyAoY2hhckNvZGUgPj4+IDYpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoY2hhckNvZGUgJiAweDNmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLy8gY2hhckNvZGUgd2lsbCBhbHdheXMgYmUgPCAweDEwMDAwIGluIGphdmFzY3JpcHQuXG4gICAgICAgICAgICBidWZbYnVmSWR4KytdID0gMHhFMCArIChjaGFyQ29kZSA+Pj4gMTIpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoKGNoYXJDb2RlID4+PiA2KSAmIDB4M2YpO1xuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4ODAgKyAoY2hhckNvZGUgJiAweDNmKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnVmLnNsaWNlKDAsIGJ1ZklkeCk7XG59XG5cbkludGVybmFsRW5jb2RlckNlc3U4LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENFU1UtOCBkZWNvZGVyIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBOb2RlIHY0LjArXG5cbmZ1bmN0aW9uIEludGVybmFsRGVjb2RlckNlc3U4KG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5hY2MgPSAwO1xuICAgIHRoaXMuY29udEJ5dGVzID0gMDtcbiAgICB0aGlzLmFjY0J5dGVzID0gMDtcbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGNvZGVjLmRlZmF1bHRDaGFyVW5pY29kZTtcbn1cblxuSW50ZXJuYWxEZWNvZGVyQ2VzdTgucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIGFjYyA9IHRoaXMuYWNjLCBjb250Qnl0ZXMgPSB0aGlzLmNvbnRCeXRlcywgYWNjQnl0ZXMgPSB0aGlzLmFjY0J5dGVzLCBcbiAgICAgICAgcmVzID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGN1ckJ5dGUgPSBidWZbaV07XG4gICAgICAgIGlmICgoY3VyQnl0ZSAmIDB4QzApICE9PSAweDgwKSB7IC8vIExlYWRpbmcgYnl0ZVxuICAgICAgICAgICAgaWYgKGNvbnRCeXRlcyA+IDApIHsgLy8gUHJldmlvdXMgY29kZSBpcyBpbnZhbGlkXG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcyA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJCeXRlIDwgMHg4MCkgeyAvLyBTaW5nbGUtYnl0ZSBjb2RlXG4gICAgICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY3VyQnl0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1ckJ5dGUgPCAweEUwKSB7IC8vIFR3by1ieXRlIGNvZGVcbiAgICAgICAgICAgICAgICBhY2MgPSBjdXJCeXRlICYgMHgxRjtcbiAgICAgICAgICAgICAgICBjb250Qnl0ZXMgPSAxOyBhY2NCeXRlcyA9IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1ckJ5dGUgPCAweEYwKSB7IC8vIFRocmVlLWJ5dGUgY29kZVxuICAgICAgICAgICAgICAgIGFjYyA9IGN1ckJ5dGUgJiAweDBGO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcyA9IDI7IGFjY0J5dGVzID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIEZvdXIgb3IgbW9yZSBhcmUgbm90IHN1cHBvcnRlZCBmb3IgQ0VTVS04LlxuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy8gQ29udGludWF0aW9uIGJ5dGVcbiAgICAgICAgICAgIGlmIChjb250Qnl0ZXMgPiAwKSB7IC8vIFdlJ3JlIHdhaXRpbmcgZm9yIGl0LlxuICAgICAgICAgICAgICAgIGFjYyA9IChhY2MgPDwgNikgfCAoY3VyQnl0ZSAmIDB4M2YpO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcy0tOyBhY2NCeXRlcysrO1xuICAgICAgICAgICAgICAgIGlmIChjb250Qnl0ZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJsb25nIGVuY29kaW5nLCBidXQgc3VwcG9ydCBNb2RpZmllZCBVVEYtOCAoZW5jb2RpbmcgTlVMTCBhcyBDMCA4MClcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY0J5dGVzID09PSAyICYmIGFjYyA8IDB4ODAgJiYgYWNjID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWNjQnl0ZXMgPT09IDMgJiYgYWNjIDwgMHg4MDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdHVhbGx5IGFkZCBjaGFyYWN0ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShhY2MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIFVuZXhwZWN0ZWQgY29udGludWF0aW9uIGJ5dGVcbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hY2MgPSBhY2M7IHRoaXMuY29udEJ5dGVzID0gY29udEJ5dGVzOyB0aGlzLmFjY0J5dGVzID0gYWNjQnl0ZXM7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuSW50ZXJuYWxEZWNvZGVyQ2VzdTgucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZXMgPSAwO1xuICAgIGlmICh0aGlzLmNvbnRCeXRlcyA+IDApXG4gICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICByZXR1cm4gcmVzO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCJcblxuLy8gU2luZ2xlLWJ5dGUgY29kZWMuIE5lZWRzIGEgJ2NoYXJzJyBzdHJpbmcgcGFyYW1ldGVyIHRoYXQgY29udGFpbnMgMjU2IG9yIDEyOCBjaGFycyB0aGF0XG4vLyBjb3JyZXNwb25kIHRvIGVuY29kZWQgYnl0ZXMgKGlmIDEyOCAtIHRoZW4gbG93ZXIgaGFsZiBpcyBBU0NJSSkuIFxuXG5leHBvcnRzLl9zYmNzID0gU0JDU0NvZGVjO1xuZnVuY3Rpb24gU0JDU0NvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICBpZiAoIWNvZGVjT3B0aW9ucylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0JDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS5cIilcbiAgICBcbiAgICAvLyBQcmVwYXJlIGNoYXIgYnVmZmVyIGZvciBkZWNvZGluZy5cbiAgICBpZiAoIWNvZGVjT3B0aW9ucy5jaGFycyB8fCAoY29kZWNPcHRpb25zLmNoYXJzLmxlbmd0aCAhPT0gMTI4ICYmIGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGggIT09IDI1NikpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVuY29kaW5nICdcIitjb2RlY09wdGlvbnMudHlwZStcIicgaGFzIGluY29ycmVjdCAnY2hhcnMnIChtdXN0IGJlIG9mIGxlbiAxMjggb3IgMjU2KVwiKTtcbiAgICBcbiAgICBpZiAoY29kZWNPcHRpb25zLmNoYXJzLmxlbmd0aCA9PT0gMTI4KSB7XG4gICAgICAgIHZhciBhc2NpaVN0cmluZyA9IFwiXCI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI4OyBpKyspXG4gICAgICAgICAgICBhc2NpaVN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO1xuICAgICAgICBjb2RlY09wdGlvbnMuY2hhcnMgPSBhc2NpaVN0cmluZyArIGNvZGVjT3B0aW9ucy5jaGFycztcbiAgICB9XG5cbiAgICB0aGlzLmRlY29kZUJ1ZiA9IG5ldyBCdWZmZXIoY29kZWNPcHRpb25zLmNoYXJzLCAndWNzMicpO1xuICAgIFxuICAgIC8vIEVuY29kaW5nIGJ1ZmZlci5cbiAgICB2YXIgZW5jb2RlQnVmID0gbmV3IEJ1ZmZlcig2NTUzNik7XG4gICAgZW5jb2RlQnVmLmZpbGwoaWNvbnYuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCkpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlY09wdGlvbnMuY2hhcnMubGVuZ3RoOyBpKyspXG4gICAgICAgIGVuY29kZUJ1Zltjb2RlY09wdGlvbnMuY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpO1xuXG4gICAgdGhpcy5lbmNvZGVCdWYgPSBlbmNvZGVCdWY7XG59XG5cblNCQ1NDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFNCQ1NFbmNvZGVyO1xuU0JDU0NvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gU0JDU0RlY29kZXI7XG5cblxuZnVuY3Rpb24gU0JDU0VuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmVuY29kZUJ1ZiA9IGNvZGVjLmVuY29kZUJ1Zjtcbn1cblxuU0JDU0VuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoc3RyLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXG4gICAgICAgIGJ1ZltpXSA9IHRoaXMuZW5jb2RlQnVmW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICBcbiAgICByZXR1cm4gYnVmO1xufVxuXG5TQkNTRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cblxuZnVuY3Rpb24gU0JDU0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmRlY29kZUJ1ZiA9IGNvZGVjLmRlY29kZUJ1Zjtcbn1cblxuU0JDU0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgLy8gU3RyaW5ncyBhcmUgaW1tdXRhYmxlIGluIEpTIC0+IHdlIHVzZSB1Y3MyIGJ1ZmZlciB0byBzcGVlZCB1cCBjb21wdXRhdGlvbnMuXG4gICAgdmFyIGRlY29kZUJ1ZiA9IHRoaXMuZGVjb2RlQnVmO1xuICAgIHZhciBuZXdCdWYgPSBuZXcgQnVmZmVyKGJ1Zi5sZW5ndGgqMik7XG4gICAgdmFyIGlkeDEgPSAwLCBpZHgyID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZHgxID0gYnVmW2ldKjI7IGlkeDIgPSBpKjI7XG4gICAgICAgIG5ld0J1ZltpZHgyXSA9IGRlY29kZUJ1ZltpZHgxXTtcbiAgICAgICAgbmV3QnVmW2lkeDIrMV0gPSBkZWNvZGVCdWZbaWR4MSsxXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0J1Zi50b1N0cmluZygndWNzMicpO1xufVxuXG5TQkNTRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG4iLCJcInVzZSBzdHJpY3RcIlxuXG4vLyBHZW5lcmF0ZWQgZGF0YSBmb3Igc2JjcyBjb2RlYy4gRG9uJ3QgZWRpdCBtYW51YWxseS4gUmVnZW5lcmF0ZSB1c2luZyBnZW5lcmF0aW9uL2dlbi1zYmNzLmpzIHNjcmlwdC5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBcIjQzN1wiOiBcImNwNDM3XCIsXG4gIFwiNzM3XCI6IFwiY3A3MzdcIixcbiAgXCI3NzVcIjogXCJjcDc3NVwiLFxuICBcIjg1MFwiOiBcImNwODUwXCIsXG4gIFwiODUyXCI6IFwiY3A4NTJcIixcbiAgXCI4NTVcIjogXCJjcDg1NVwiLFxuICBcIjg1NlwiOiBcImNwODU2XCIsXG4gIFwiODU3XCI6IFwiY3A4NTdcIixcbiAgXCI4NThcIjogXCJjcDg1OFwiLFxuICBcIjg2MFwiOiBcImNwODYwXCIsXG4gIFwiODYxXCI6IFwiY3A4NjFcIixcbiAgXCI4NjJcIjogXCJjcDg2MlwiLFxuICBcIjg2M1wiOiBcImNwODYzXCIsXG4gIFwiODY0XCI6IFwiY3A4NjRcIixcbiAgXCI4NjVcIjogXCJjcDg2NVwiLFxuICBcIjg2NlwiOiBcImNwODY2XCIsXG4gIFwiODY5XCI6IFwiY3A4NjlcIixcbiAgXCI4NzRcIjogXCJ3aW5kb3dzODc0XCIsXG4gIFwiOTIyXCI6IFwiY3A5MjJcIixcbiAgXCIxMDQ2XCI6IFwiY3AxMDQ2XCIsXG4gIFwiMTEyNFwiOiBcImNwMTEyNFwiLFxuICBcIjExMjVcIjogXCJjcDExMjVcIixcbiAgXCIxMTI5XCI6IFwiY3AxMTI5XCIsXG4gIFwiMTEzM1wiOiBcImNwMTEzM1wiLFxuICBcIjExNjFcIjogXCJjcDExNjFcIixcbiAgXCIxMTYyXCI6IFwiY3AxMTYyXCIsXG4gIFwiMTE2M1wiOiBcImNwMTE2M1wiLFxuICBcIjEyNTBcIjogXCJ3aW5kb3dzMTI1MFwiLFxuICBcIjEyNTFcIjogXCJ3aW5kb3dzMTI1MVwiLFxuICBcIjEyNTJcIjogXCJ3aW5kb3dzMTI1MlwiLFxuICBcIjEyNTNcIjogXCJ3aW5kb3dzMTI1M1wiLFxuICBcIjEyNTRcIjogXCJ3aW5kb3dzMTI1NFwiLFxuICBcIjEyNTVcIjogXCJ3aW5kb3dzMTI1NVwiLFxuICBcIjEyNTZcIjogXCJ3aW5kb3dzMTI1NlwiLFxuICBcIjEyNTdcIjogXCJ3aW5kb3dzMTI1N1wiLFxuICBcIjEyNThcIjogXCJ3aW5kb3dzMTI1OFwiLFxuICBcIjI4NTkxXCI6IFwiaXNvODg1OTFcIixcbiAgXCIyODU5MlwiOiBcImlzbzg4NTkyXCIsXG4gIFwiMjg1OTNcIjogXCJpc284ODU5M1wiLFxuICBcIjI4NTk0XCI6IFwiaXNvODg1OTRcIixcbiAgXCIyODU5NVwiOiBcImlzbzg4NTk1XCIsXG4gIFwiMjg1OTZcIjogXCJpc284ODU5NlwiLFxuICBcIjI4NTk3XCI6IFwiaXNvODg1OTdcIixcbiAgXCIyODU5OFwiOiBcImlzbzg4NTk4XCIsXG4gIFwiMjg1OTlcIjogXCJpc284ODU5OVwiLFxuICBcIjI4NjAwXCI6IFwiaXNvODg1OTEwXCIsXG4gIFwiMjg2MDFcIjogXCJpc284ODU5MTFcIixcbiAgXCIyODYwM1wiOiBcImlzbzg4NTkxM1wiLFxuICBcIjI4NjA0XCI6IFwiaXNvODg1OTE0XCIsXG4gIFwiMjg2MDVcIjogXCJpc284ODU5MTVcIixcbiAgXCIyODYwNlwiOiBcImlzbzg4NTkxNlwiLFxuICBcIndpbmRvd3M4NzRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/ve+/ve+/ve+/veKApu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlO+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vcKg4LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li677+977+977+977+94Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4LmO4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZ4Lma4Lmb77+977+977+977+9XCJcbiAgfSxcbiAgXCJ3aW44NzRcIjogXCJ3aW5kb3dzODc0XCIsXG4gIFwiY3A4NzRcIjogXCJ3aW5kb3dzODc0XCIsXG4gIFwid2luZG93czEyNTBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/veKAmu+/veKAnuKApuKAoOKAoe+/veKAsMWg4oC5xZrFpMW9xbnvv73igJjigJnigJzigJ3igKLigJPigJTvv73ihKLFoeKAusWbxaXFvsW6wqDLh8uYxYHCpMSEwqbCp8KowqnFnsKrwqzCrcKuxbvCsMKxy5vFgsK0wrXCtsK3wrjEhcWfwrvEvcudxL7FvMWUw4HDgsSCw4TEucSGw4fEjMOJxJjDi8Saw43DjsSOxJDFg8WHw5PDlMWQw5bDl8WYxa7DmsWww5zDncWiw5/FlcOhw6LEg8OkxLrEh8OnxI3DqcSZw6vEm8Otw67Ej8SRxYTFiMOzw7TFkcO2w7fFmcWvw7rFscO8w73Fo8uZXCJcbiAgfSxcbiAgXCJ3aW4xMjUwXCI6IFwid2luZG93czEyNTBcIixcbiAgXCJjcDEyNTBcIjogXCJ3aW5kb3dzMTI1MFwiLFxuICBcIndpbmRvd3MxMjUxXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQgtCD4oCa0ZPigJ7igKbigKDigKHigqzigLDQieKAudCK0IzQi9CP0ZLigJjigJnigJzigJ3igKLigJPigJTvv73ihKLRmeKAutGa0ZzRm9GfwqDQjtGe0IjCpNKQwqbCp9CBwqnQhMKrwqzCrcKu0IfCsMKx0IbRltKRwrXCtsK30ZHihJbRlMK70ZjQhdGV0ZfQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj1wiXG4gIH0sXG4gIFwid2luMTI1MVwiOiBcIndpbmRvd3MxMjUxXCIsXG4gIFwiY3AxMjUxXCI6IFwid2luZG93czEyNTFcIixcbiAgXCJ3aW5kb3dzMTI1MlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCaxpLigJ7igKbigKDigKHLhuKAsMWg4oC5xZLvv73Fve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSixaHigLrFk++/vcW+xbjCoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w79cIlxuICB9LFxuICBcIndpbjEyNTJcIjogXCJ3aW5kb3dzMTI1MlwiLFxuICBcImNwMTI1MlwiOiBcIndpbmRvd3MxMjUyXCIsXG4gIFwid2luZG93czEyNTNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/veKAmsaS4oCe4oCm4oCg4oCh77+94oCw77+94oC577+977+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSi77+94oC677+977+977+977+9wqDOhc6GwqPCpMKlwqbCp8Kowqnvv73Cq8Kswq3CruKAlcKwwrHCssKzzoTCtcK2wrfOiM6JzorCu86Mwr3Ojs6PzpDOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6h77+9zqPOpM6lzqbOp86ozqnOqs6rzqzOrc6uzq/OsM6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Dz4TPhc+Gz4fPiM+Jz4rPi8+Mz43Pju+/vVwiXG4gIH0sXG4gIFwid2luMTI1M1wiOiBcIndpbmRvd3MxMjUzXCIsXG4gIFwiY3AxMjUzXCI6IFwid2luZG93czEyNTNcIixcbiAgXCJ3aW5kb3dzMTI1NFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCaxpLigJ7igKbigKDigKHLhuKAsMWg4oC5xZLvv73vv73vv73vv73igJjigJnigJzigJ3igKLigJPigJTLnOKEosWh4oC6xZPvv73vv73FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8Sew5HDksOTw5TDlcOWw5fDmMOZw5rDm8OcxLDFnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/En8Oxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMSxxZ/Dv1wiXG4gIH0sXG4gIFwid2luMTI1NFwiOiBcIndpbmRvd3MxMjU0XCIsXG4gIFwiY3AxMjU0XCI6IFwid2luZG93czEyNTRcIixcbiAgXCJ3aW5kb3dzMTI1NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCaxpLigJ7igKbigKDigKHLhuKAsO+/veKAue+/ve+/ve+/ve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSi77+94oC677+977+977+977+9wqDCocKiwqPigqrCpcKmwqfCqMKpw5fCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnDt8K7wrzCvcK+wr/WsNax1rLWs9a01rXWtta31rjWue+/vda71rzWvda+1r/XgNeB14LXg9ew17HXstez17Tvv73vv73vv73vv73vv73vv73vv73XkNeR15LXk9eU15XXlteX15jXmdea15vXnNed157Xn9eg16HXotej16TXpdem16fXqNep16rvv73vv73igI7igI/vv71cIlxuICB9LFxuICBcIndpbjEyNTVcIjogXCJ3aW5kb3dzMTI1NVwiLFxuICBcImNwMTI1NVwiOiBcIndpbmRvd3MxMjU1XCIsXG4gIFwid2luZG93czEyNTZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrNm+4oCaxpLigJ7igKbigKDigKHLhuKAsNm54oC5xZLahtqY2ojar+KAmOKAmeKAnOKAneKAouKAk+KAlNqp4oSi2pHigLrFk+KAjOKAjdq6wqDYjMKiwqPCpMKlwqbCp8KowqnavsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCudibwrvCvMK9wr7Yn9uB2KHYotij2KTYpdim2KfYqNip2KrYq9is2K3Yrtiv2LDYsdiy2LPYtNi12LbDl9i32LjYudi62YDZgdmC2YPDoNmEw6LZhdmG2YfZiMOnw6jDqcOqw6vZidmKw67Dr9mL2YzZjdmOw7TZj9mQw7fZkcO52ZLDu8O84oCO4oCP25JcIlxuICB9LFxuICBcIndpbjEyNTZcIjogXCJ3aW5kb3dzMTI1NlwiLFxuICBcImNwMTI1NlwiOiBcIndpbmRvd3MxMjU2XCIsXG4gIFwid2luZG93czEyNTdcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrO+/veKAmu+/veKAnuKApuKAoOKAoe+/veKAsO+/veKAue+/vcKoy4fCuO+/veKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEou+/veKAuu+/vcKvy5vvv73CoO+/vcKiwqPCpO+/vcKmwqfDmMKpxZbCq8Kswq3CrsOGwrDCscKywrPCtMK1wrbCt8O4wrnFl8K7wrzCvcK+w6bEhMSuxIDEhsOEw4XEmMSSxIzDicW5xJbEosS2xKrEu8WgxYPFhcOTxYzDlcOWw5fFssWBxZrFqsOcxbvFvcOfxIXEr8SBxIfDpMOlxJnEk8SNw6nFusSXxKPEt8SrxLzFocWExYbDs8WNw7XDtsO3xbPFgsWbxavDvMW8xb7LmVwiXG4gIH0sXG4gIFwid2luMTI1N1wiOiBcIndpbmRvd3MxMjU3XCIsXG4gIFwiY3AxMjU3XCI6IFwid2luZG93czEyNTdcIixcbiAgXCJ3aW5kb3dzMTI1OFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCaxpLigJ7igKbigKDigKHLhuKAsO+/veKAucWS77+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLvv73igLrFk++/ve+/vcW4wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsSCw4TDhcOGw4fDiMOJw4rDi8yAw43DjsOPxJDDkcyJw5PDlMagw5bDl8OYw5nDmsObw5zGr8yDw5/DoMOhw6LEg8Okw6XDpsOnw6jDqcOqw6vMgcOtw67Dr8SRw7HMo8Ozw7TGocO2w7fDuMO5w7rDu8O8xrDigqvDv1wiXG4gIH0sXG4gIFwid2luMTI1OFwiOiBcIndpbmRvd3MxMjU4XCIsXG4gIFwiY3AxMjU4XCI6IFwid2luZG93czEyNThcIixcbiAgXCJpc284ODU5MVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiXG4gIH0sXG4gIFwiY3AyODU5MVwiOiBcImlzbzg4NTkxXCIsXG4gIFwiaXNvODg1OTJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMSEy5jFgcKkxL3FmsKnwqjFoMWexaTFucKtxb3Fu8KwxIXLm8WCwrTEvsWby4fCuMWhxZ/FpcW6y53FvsW8xZTDgcOCxILDhMS5xIbDh8SMw4nEmMOLxJrDjcOOxI7EkMWDxYfDk8OUxZDDlsOXxZjFrsOaxbDDnMOdxaLDn8WVw6HDosSDw6TEusSHw6fEjcOpxJnDq8Sbw63DrsSPxJHFhMWIw7PDtMWRw7bDt8WZxa/DusWxw7zDvcWjy5lcIlxuICB9LFxuICBcImNwMjg1OTJcIjogXCJpc284ODU5MlwiLFxuICBcImlzbzg4NTkzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDEpsuYwqPCpO+/vcSkwqfCqMSwxZ7EnsS0wq3vv73Fu8KwxKfCssKzwrTCtcSlwrfCuMSxxZ/En8S1wr3vv73FvMOAw4HDgu+/vcOExIrEiMOHw4jDicOKw4vDjMONw47Dj++/vcORw5LDk8OUxKDDlsOXxJzDmcOaw5vDnMWsxZzDn8Ogw6HDou+/vcOkxIvEicOnw6jDqcOqw6vDrMOtw67Dr++/vcOxw7LDs8O0xKHDtsO3xJ3DucO6w7vDvMWtxZ3LmVwiXG4gIH0sXG4gIFwiY3AyODU5M1wiOiBcImlzbzg4NTkzXCIsXG4gIFwiaXNvODg1OTRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMSExLjFlsKkxKjEu8KnwqjFoMSSxKLFpsKtxb3Cr8KwxIXLm8WXwrTEqcS8y4fCuMWhxJPEo8WnxYrFvsWLxIDDgcOCw4PDhMOFw4bErsSMw4nEmMOLxJbDjcOOxKrEkMWFxYzEtsOUw5XDlsOXw5jFssOaw5vDnMWoxarDn8SBw6HDosOjw6TDpcOmxK/EjcOpxJnDq8SXw63DrsSrxJHFhsWNxLfDtMO1w7bDt8O4xbPDusO7w7zFqcWry5lcIlxuICB9LFxuICBcImNwMjg1OTRcIjogXCJpc284ODU5NFwiLFxuICBcImlzbzg4NTk1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDQgdCC0IPQhNCF0IbQh9CI0InQitCL0IzCrdCO0I/QkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj+KEltGR0ZLRk9GU0ZXRltGX0ZjRmdGa0ZvRnMKn0Z7Rn1wiXG4gIH0sXG4gIFwiY3AyODU5NVwiOiBcImlzbzg4NTk1XCIsXG4gIFwiaXNvODg1OTZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoO+/ve+/ve+/vcKk77+977+977+977+977+977+977+92IzCre+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vdib77+977+977+92J/vv73Yodii2KPYpNil2KbYp9io2KnYqtir2KzYrdiu2K/YsNix2LLYs9i02LXYtti32LjYudi677+977+977+977+977+92YDZgdmC2YPZhNmF2YbZh9mI2YnZitmL2YzZjdmO2Y/ZkNmR2ZLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv71cIlxuICB9LFxuICBcImNwMjg1OTZcIjogXCJpc284ODU5NlwiLFxuICBcImlzbzg4NTk3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDigJjigJnCo+KCrOKCr8KmwqfCqMKpzbrCq8Kswq3vv73igJXCsMKxwrLCs86EzoXOhsK3zojOic6KwrvOjMK9zo7Oj86QzpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoe+/vc6jzqTOpc6mzqfOqM6pzqrOq86szq3Ors6vzrDOsc6yzrPOtM61zrbOt864zrnOus67zrzOvc6+zr/PgM+Bz4LPg8+Ez4XPhs+Hz4jPic+Kz4vPjM+Nz47vv71cIlxuICB9LFxuICBcImNwMjg1OTdcIjogXCJpc284ODU5N1wiLFxuICBcImlzbzg4NTk4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDvv73CosKjwqTCpcKmwqfCqMKpw5fCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnDt8K7wrzCvcK+77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+94oCX15DXkdeS15PXlNeV15bXl9eY15nXmteb15zXndee15/XoNeh16LXo9ek16XXpten16jXqdeq77+977+94oCO4oCP77+9XCJcbiAgfSxcbiAgXCJjcDI4NTk4XCI6IFwiaXNvODg1OThcIixcbiAgXCJpc284ODU5OVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8Sew5HDksOTw5TDlcOWw5fDmMOZw5rDm8OcxLDFnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/En8Oxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMSxxZ/Dv1wiXG4gIH0sXG4gIFwiY3AyODU5OVwiOiBcImlzbzg4NTk5XCIsXG4gIFwiaXNvODg1OTEwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDEhMSSxKLEqsSoxLbCp8S7xJDFoMWmxb3CrcWqxYrCsMSFxJPEo8SrxKnEt8K3xLzEkcWhxafFvuKAlcWrxYvEgMOBw4LDg8OEw4XDhsSuxIzDicSYw4vElsONw47Dj8OQxYXFjMOTw5TDlcOWxajDmMWyw5rDm8Ocw53DnsOfxIHDocOiw6PDpMOlw6bEr8SNw6nEmcOrxJfDrcOuw6/DsMWGxY3Ds8O0w7XDtsWpw7jFs8O6w7vDvMO9w77EuFwiXG4gIH0sXG4gIFwiY3AyODYwMFwiOiBcImlzbzg4NTkxMFwiLFxuICBcImlzbzg4NTkxMVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg4LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li677+977+977+977+94Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4LmO4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZ4Lma4Lmb77+977+977+977+9XCJcbiAgfSxcbiAgXCJjcDI4NjAxXCI6IFwiaXNvODg1OTExXCIsXG4gIFwiaXNvODg1OTEzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDigJ3CosKjwqTigJ7CpsKnw5jCqcWWwqvCrMKtwq7DhsKwwrHCssKz4oCcwrXCtsK3w7jCucWXwrvCvMK9wr7DpsSExK7EgMSGw4TDhcSYxJLEjMOJxbnElsSixLbEqsS7xaDFg8WFw5PFjMOVw5bDl8WyxYHFmsWqw5zFu8W9w5/EhcSvxIHEh8Okw6XEmcSTxI3DqcW6xJfEo8S3xKvEvMWhxYTFhsOzxY3DtcO2w7fFs8WCxZvFq8O8xbzFvuKAmVwiXG4gIH0sXG4gIFwiY3AyODYwM1wiOiBcImlzbzg4NTkxM1wiLFxuICBcImlzbzg4NTkxNFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg4biC4biDwqPEisSL4biKwqfhuoDCqeG6guG4i+G7ssKtwq7FuOG4nuG4n8SgxKHhuYDhuYHCtuG5luG6geG5l+G6g+G5oOG7s+G6hOG6heG5ocOAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPxbTDkcOSw5PDlMOVw5bhuarDmMOZw5rDm8Ocw53FtsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/FtcOxw7LDs8O0w7XDtuG5q8O4w7nDusO7w7zDvcW3w79cIlxuICB9LFxuICBcImNwMjg2MDRcIjogXCJpc284ODU5MTRcIixcbiAgXCJpc284ODU5MTVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo+KCrMKlxaDCp8WhwqnCqsKrwqzCrcKuwq/CsMKxwrLCs8W9wrXCtsK3xb7CucK6wrvFksWTxbjCv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/XCJcbiAgfSxcbiAgXCJjcDI4NjA1XCI6IFwiaXNvODg1OTE1XCIsXG4gIFwiaXNvODg1OTE2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDEhMSFxYHigqzigJ7FoMKnxaHCqciYwqvFucKtxbrFu8KwwrHEjMWCxb3igJ3CtsK3xb7EjciZwrvFksWTxbjFvMOAw4HDgsSCw4TEhsOGw4fDiMOJw4rDi8OMw43DjsOPxJDFg8OSw5PDlMWQw5bFmsWww5nDmsObw5zEmMiaw5/DoMOhw6LEg8OkxIfDpsOnw6jDqcOqw6vDrMOtw67Dr8SRxYTDssOzw7TFkcO2xZvFscO5w7rDu8O8xJnIm8O/XCJcbiAgfSxcbiAgXCJjcDI4NjA2XCI6IFwiaXNvODg1OTE2XCIsXG4gIFwiY3A0MzdcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8Ouw6zDhMOFw4nDpsOGw7TDtsOyw7vDucO/w5bDnMKiwqPCpeKCp8aSw6HDrcOzw7rDscORwqrCusK/4oyQwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtNDM3XCI6IFwiY3A0MzdcIixcbiAgXCJjc2libTQzN1wiOiBcImNwNDM3XCIsXG4gIFwiY3A3MzdcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIs6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHOo86kzqXOps6nzqjOqc6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPg8+Cz4TPhc+Gz4fPiOKWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM+JzqzOrc6uz4rOr8+Mz43Pi8+OzobOiM6JzorOjM6Ozo/CseKJpeKJpM6qzqvDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm03MzdcIjogXCJjcDczN1wiLFxuICBcImNzaWJtNzM3XCI6IFwiY3A3MzdcIixcbiAgXCJjcDc3NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwixIbDvMOpxIHDpMSjw6XEh8WCxJPFlsWXxKvFucOEw4XDicOmw4bFjcO2xKLCosWaxZvDlsOcw7jCo8OYw5fCpMSAxKrDs8W7xbzFuuKAncKmwqnCrsKswr3CvMWBwqvCu+KWkeKWkuKWk+KUguKUpMSExIzEmMSW4pWj4pWR4pWX4pWdxK7FoOKUkOKUlOKUtOKUrOKUnOKUgOKUvMWyxarilZrilZTilanilabilaDilZDilazFvcSFxI3EmcSXxK/FocWzxavFvuKUmOKUjOKWiOKWhOKWjOKWkOKWgMOTw5/FjMWDw7XDlcK1xYTEtsS3xLvEvMWGxJLFheKAmcKtwrHigJzCvsK2wqfDt+KAnsKw4oiZwrfCucKzwrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtNzc1XCI6IFwiY3A3NzVcIixcbiAgXCJjc2libTc3NVwiOiBcImNwNzc1XCIsXG4gIFwiY3A4NTBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8Ouw6zDhMOFw4nDpsOGw7TDtsOyw7vDucO/w5bDnMO4wqPDmMOXxpLDocOtw7PDusOxw5HCqsK6wr/CrsKswr3CvMKhwqvCu+KWkeKWkuKWk+KUguKUpMOBw4LDgMKp4pWj4pWR4pWX4pWdwqLCpeKUkOKUlOKUtOKUrOKUnOKUgOKUvMOjw4PilZrilZTilanilabilaDilZDilazCpMOww5DDisOLw4jEscONw47Dj+KUmOKUjOKWiOKWhMKmw4ziloDDk8Ofw5TDksO1w5XCtcO+w57DmsObw5nDvcOdwq/CtMKtwrHigJfCvsK2wqfDt8K4wrDCqMK3wrnCs8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg1MFwiOiBcImNwODUwXCIsXG4gIFwiY3NpYm04NTBcIjogXCJjcDg1MFwiLFxuICBcImNwODUyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkxa/Eh8OnxYLDq8WQxZHDrsW5w4TEhsOJxLnEusO0w7bEvcS+xZrFm8OWw5zFpMWlxYHDl8SNw6HDrcOzw7rEhMSFxb3FvsSYxJnCrMW6xIzFn8KrwrvilpHilpLilpPilILilKTDgcOCxJrFnuKVo+KVkeKVl+KVncW7xbzilJDilJTilLTilKzilJzilIDilLzEgsSD4pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTEkcSQxI7Di8SPxYfDjcOOxJvilJjilIzilojiloTFosWu4paAw5PDn8OUxYPFhMWIxaDFocWUw5rFlcWww73DncWjwrTCrcudy5vLh8uYwqfDt8K4wrDCqMuZxbHFmMWZ4pagwqBcIlxuICB9LFxuICBcImlibTg1MlwiOiBcImNwODUyXCIsXG4gIFwiY3NpYm04NTJcIjogXCJjcDg1MlwiLFxuICBcImNwODU1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLRktCC0ZPQg9GR0IHRlNCE0ZXQhdGW0IbRl9CH0ZjQiNGZ0InRmtCK0ZvQi9Gc0IzRntCO0Z/Qj9GO0K7RitCq0LDQkNCx0JHRhtCm0LTQlNC10JXRhNCk0LPQk8KrwrvilpHilpLilpPilILilKTRhdCl0LjQmOKVo+KVkeKVl+KVndC50JnilJDilJTilLTilKzilJzilIDilLzQutCa4pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTQu9Cb0LzQnNC90J3QvtCe0L/ilJjilIzilojiloTQn9GP4paA0K/RgNCg0YHQodGC0KLRg9Cj0LbQltCy0JLRjNCs4oSWwq3Ri9Cr0LfQl9GI0KjRjdCt0YnQqdGH0KfCp+KWoMKgXCJcbiAgfSxcbiAgXCJpYm04NTVcIjogXCJjcDg1NVwiLFxuICBcImNzaWJtODU1XCI6IFwiY3A4NTVcIixcbiAgXCJjcDg1NlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi15DXkdeS15PXlNeV15bXl9eY15nXmteb15zXndee15/XoNeh16LXo9ek16XXpten16jXqdeq77+9wqPvv73Dl++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vcKuwqzCvcK877+9wqvCu+KWkeKWkuKWk+KUguKUpO+/ve+/ve+/vcKp4pWj4pWR4pWX4pWdwqLCpeKUkOKUlOKUtOKUrOKUnOKUgOKUvO+/ve+/veKVmuKVlOKVqeKVpuKVoOKVkOKVrMKk77+977+977+977+977+977+977+977+977+94pSY4pSM4paI4paEwqbvv73iloDvv73vv73vv73vv73vv73vv73Cte+/ve+/ve+/ve+/ve+/ve+/ve+/vcKvwrTCrcKx4oCXwr7CtsKnw7fCuMKwwqjCt8K5wrPCsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NTZcIjogXCJjcDg1NlwiLFxuICBcImNzaWJtODU2XCI6IFwiY3A4NTZcIixcbiAgXCJjcDg1N1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67EscOEw4XDicOmw4bDtMO2w7LDu8O5xLDDlsOcw7jCo8OYxZ7Fn8Ohw63Ds8O6w7HDkcSexJ/Cv8KuwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSkw4HDgsOAwqnilaPilZHilZfilZ3CosKl4pSQ4pSU4pS04pSs4pSc4pSA4pS8w6PDg+KVmuKVlOKVqeKVpuKVoOKVkOKVrMKkwrrCqsOKw4vDiO+/vcONw47Dj+KUmOKUjOKWiOKWhMKmw4ziloDDk8Ofw5TDksO1w5XCte+/vcOXw5rDm8OZw6zDv8KvwrTCrcKx77+9wr7CtsKnw7fCuMKwwqjCt8K5wrPCsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NTdcIjogXCJjcDg1N1wiLFxuICBcImNzaWJtODU3XCI6IFwiY3A4NTdcIixcbiAgXCJjcDg1OFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcw7jCo8OYw5fGksOhw63Ds8O6w7HDkcKqwrrCv8KuwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSkw4HDgsOAwqnilaPilZHilZfilZ3CosKl4pSQ4pSU4pS04pSs4pSc4pSA4pS8w6PDg+KVmuKVlOKVqeKVpuKVoOKVkOKVrMKkw7DDkMOKw4vDiOKCrMONw47Dj+KUmOKUjOKWiOKWhMKmw4ziloDDk8Ofw5TDksO1w5XCtcO+w57DmsObw5nDvcOdwq/CtMKtwrHigJfCvsK2wqfDt8K4wrDCqMK3wrnCs8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg1OFwiOiBcImNwODU4XCIsXG4gIFwiY3NpYm04NThcIjogXCJjcDg1OFwiLFxuICBcImNwODYwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOjw6DDgcOnw6rDisOow43DlMOsw4PDgsOJw4DDiMO0w7XDssOaw7nDjMOVw5zCosKjw5nigqfDk8Ohw63Ds8O6w7HDkcKqwrrCv8OSwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODYwXCI6IFwiY3A4NjBcIixcbiAgXCJjc2libTg2MFwiOiBcImNwODYwXCIsXG4gIFwiY3A4NjFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDkMOww57DhMOFw4nDpsOGw7TDtsO+w7vDncO9w5bDnMO4wqPDmOKCp8aSw6HDrcOzw7rDgcONw5PDmsK/4oyQwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODYxXCI6IFwiY3A4NjFcIixcbiAgXCJjc2libTg2MVwiOiBcImNwODYxXCIsXG4gIFwiY3A4NjJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIteQ15HXkteT15TXldeW15fXmNeZ15rXm9ec153Xntef16DXodei16PXpNel16bXp9eo16nXqsKiwqPCpeKCp8aSw6HDrcOzw7rDscORwqrCusK/4oyQwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODYyXCI6IFwiY3A4NjJcIixcbiAgXCJjc2libTg2MlwiOiBcImNwODYyXCIsXG4gIFwiY3A4NjNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw4LDoMK2w6fDqsOrw6jDr8Ou4oCXw4DCp8OJw4jDisO0w4vDj8O7w7nCpMOUw5zCosKjw5nDm8aSwqbCtMOzw7rCqMK4wrPCr8OO4oyQwqzCvcK8wr7Cq8K74paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODYzXCI6IFwiY3A4NjNcIixcbiAgXCJjc2libTg2M1wiOiBcImNwODYzXCIsXG4gIFwiY3A4NjRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMk2aomJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/CsMK34oiZ4oia4paS4pSA4pSC4pS84pSk4pSs4pSc4pS04pSQ4pSM4pSU4pSYzrLiiJ7PhsKxwr3CvOKJiMKrwrvvu7fvu7jvv73vv73vu7vvu7zvv73CoMKt77qCwqPCpO+6hO+/ve+/ve+6ju+6j++6le+6mdiM77qd77qh77ql2aDZodmi2aPZpNml2abZp9mo2anvu5HYm++6se+6te+6udifwqLvuoDvuoHvuoPvuoXvu4rvuovvuo3vupHvupPvupfvupvvup/vuqPvuqfvuqnvuqvvuq3vuq/vurPvurfvurvvur/vu4Hvu4Xvu4vvu4/CpsKsw7fDl++7idmA77uT77uX77ub77uf77uj77un77ur77ut77uv77uz77q977uM77uO77uN77uh77m92ZHvu6Xvu6nvu6zvu7Dvu7Lvu5Dvu5Xvu7Xvu7bvu53vu5nvu7HilqDvv71cIlxuICB9LFxuICBcImlibTg2NFwiOiBcImNwODY0XCIsXG4gIFwiY3NpYm04NjRcIjogXCJjcDg2NFwiLFxuICBcImNwODY1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsOsw4TDhcOJw6bDhsO0w7bDssO7w7nDv8OWw5zDuMKjw5jigqfGksOhw63Ds8O6w7HDkcKqwrrCv+KMkMKswr3CvMKhwqvCpOKWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgM6xw5/Ok8+AzqPPg8K1z4TOps6YzqnOtOKIns+GzrXiiKniiaHCseKJpeKJpOKMoOKMocO34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg2NVwiOiBcImNwODY1XCIsXG4gIFwiY3NpYm04NjVcIjogXCJjcDg2NVwiLFxuICBcImNwODY2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/ilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDRgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9CB0ZHQhNGU0IfRl9CO0Z7CsOKImcK34oia4oSWwqTilqDCoFwiXG4gIH0sXG4gIFwiaWJtODY2XCI6IFwiY3A4NjZcIixcbiAgXCJjc2libTg2NlwiOiBcImNwODY2XCIsXG4gIFwiY3A4NjlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIu+/ve+/ve+/ve+/ve+/ve+/vc6G77+9wrfCrMKm4oCY4oCZzojigJXOic6KzqrOjO+/ve+/vc6OzqvCqc6PwrLCs86swqPOrc6uzq/Pis6Qz4zPjc6RzpLOk86UzpXOls6Xwr3OmM6ZwqvCu+KWkeKWkuKWk+KUguKUpM6azpvOnM6d4pWj4pWR4pWX4pWdzp7On+KUkOKUlOKUtOKUrOKUnOKUgOKUvM6gzqHilZrilZTilanilabilaDilZDilazOo86kzqXOps6nzqjOqc6xzrLOs+KUmOKUjOKWiOKWhM60zrXiloDOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPg8+Cz4TOhMKtwrHPhc+Gz4fCp8+IzoXCsMKoz4nPi86wz47ilqDCoFwiXG4gIH0sXG4gIFwiaWJtODY5XCI6IFwiY3A4NjlcIixcbiAgXCJjc2libTg2OVwiOiBcImNwODY5XCIsXG4gIFwiY3A5MjJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7igL7CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPxaDDkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zDncW9w5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Whw7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73FvsO/XCJcbiAgfSxcbiAgXCJpYm05MjJcIjogXCJjcDkyMlwiLFxuICBcImNzaWJtOTIyXCI6IFwiY3A5MjJcIixcbiAgXCJjcDEwNDZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIu+6iMOXw7fvo7bvo7Xvo7Tvo7fvubHCiOKWoOKUguKUgOKUkOKUjOKUlOKUmO+5ue+5u++5ve+5v++5t++6iu+7sO+7s++7su+7ju+7j++7kO+7tu+7uO+7uu+7vMKg76O676O576O4wqTvo7vvuovvupHvupfvupvvup/vuqPYjMKt77qn77qz2aDZodmi2aPZpNml2abZp9mo2anvurfYm++6u++6v++7itif77uL2KHYotij2KTYpdim2KfYqNip2KrYq9is2K3Yrtiv2LDYsdiy2LPYtNi12LbYt++7h9i52Lrvu4zvuoLvuoTvuo7vu5PZgNmB2YLZg9mE2YXZhtmH2YjZidmK2YvZjNmN2Y7Zj9mQ2ZHZku+7l++7m++7n++jvO+7te+7t++7ue+7u++7o++7p++7rO+7qe+/vVwiXG4gIH0sXG4gIFwiaWJtMTA0NlwiOiBcImNwMTA0NlwiLFxuICBcImNzaWJtMTA0NlwiOiBcImNwMTA0NlwiLFxuICBcImNwMTEyNFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg0IHQgtKQ0ITQhdCG0IfQiNCJ0IrQi9CMwq3QjtCP0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/ihJbRkdGS0pHRlNGV0ZbRl9GY0ZnRmtGb0ZzCp9Ge0Z9cIlxuICB9LFxuICBcImlibTExMjRcIjogXCJjcDExMjRcIixcbiAgXCJjc2libTExMjRcIjogXCJjcDExMjRcIixcbiAgXCJjcDExMjVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgNGA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0IHRkdKQ0pHQhNGU0IbRltCH0ZfCt+KImuKElsKk4pagwqBcIlxuICB9LFxuICBcImlibTExMjVcIjogXCJjcDExMjVcIixcbiAgXCJjc2libTExMjVcIjogXCJjcDExMjVcIixcbiAgXCJjcDExMjlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo8KkwqXCpsKnxZPCqcKqwqvCrMKtwq7Cr8KwwrHCssKzxbjCtcK2wrfFksK5wrrCu8K8wr3CvsK/w4DDgcOCxILDhMOFw4bDh8OIw4nDisOLzIDDjcOOw4/EkMORzInDk8OUxqDDlsOXw5jDmcOaw5vDnMavzIPDn8Ogw6HDosSDw6TDpcOmw6fDqMOpw6rDq8yBw63DrsOvxJHDscyjw7PDtMahw7bDt8O4w7nDusO7w7zGsOKCq8O/XCJcbiAgfSxcbiAgXCJpYm0xMTI5XCI6IFwiY3AxMTI5XCIsXG4gIFwiY3NpYm0xMTI5XCI6IFwiY3AxMTI5XCIsXG4gIFwiY3AxMTMzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDguoHguoLguoTguofguojguqrguorguo3gupTgupXgupbgupfgupnguprgupvgupzgup3gup7gup/guqHguqLguqPguqXguqfguqvguq3guq7vv73vv73vv73guq/gurDgurLgurPgurTgurXgurbgurfgurjgurngurzgurHgurvgur3vv73vv73vv73gu4Dgu4Hgu4Lgu4Pgu4Tgu4jgu4ngu4rgu4vgu4zgu43gu4bvv73gu5zgu53igq3vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73gu5Dgu5Hgu5Lgu5Pgu5Tgu5Xgu5bgu5fgu5jgu5nvv73vv73CosKswqbvv71cIlxuICB9LFxuICBcImlibTExMzNcIjogXCJjcDExMzNcIixcbiAgXCJjc2libTExMzNcIjogXCJjcDExMzNcIixcbiAgXCJjcDExNjFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veC5iOC4geC4guC4g+C4hOC4heC4huC4h+C4iOC4ieC4iuC4i+C4jOC4jeC4juC4j+C4kOC4keC4kuC4k+C4lOC4leC4luC4l+C4mOC4meC4muC4m+C4nOC4neC4nuC4n+C4oOC4oeC4ouC4o+C4pOC4peC4puC4p+C4qOC4qeC4quC4q+C4rOC4reC4ruC4r+C4sOC4seC4suC4s+C4tOC4teC4tuC4t+C4uOC4ueC4uuC5ieC5iuC5i+KCrOC4v+C5gOC5geC5guC5g+C5hOC5heC5huC5h+C5iOC5ieC5iuC5i+C5jOC5jeC5juC5j+C5kOC5keC5kuC5k+C5lOC5leC5luC5l+C5mOC5meC5muC5m8KiwqzCpsKgXCJcbiAgfSxcbiAgXCJpYm0xMTYxXCI6IFwiY3AxMTYxXCIsXG4gIFwiY3NpYm0xMTYxXCI6IFwiY3AxMTYxXCIsXG4gIFwiY3AxMTYyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzCgcKCwoPChOKApsKGwofCiMKJworCi8KMwo3CjsKPwpDigJjigJnigJzigJ3igKLigJPigJTCmMKZwprCm8Kcwp3CnsKfwqDguIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrvv73vv73vv73vv73guL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3guY7guY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnguZrguZvvv73vv73vv73vv71cIlxuICB9LFxuICBcImlibTExNjJcIjogXCJjcDExNjJcIixcbiAgXCJjc2libTExNjJcIjogXCJjcDExNjJcIixcbiAgXCJjcDExNjNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMKhwqLCo+KCrMKlwqbCp8WTwqnCqsKrwqzCrcKuwq/CsMKxwrLCs8W4wrXCtsK3xZLCucK6wrvCvMK9wr7Cv8OAw4HDgsSCw4TDhcOGw4fDiMOJw4rDi8yAw43DjsOPxJDDkcyJw5PDlMagw5bDl8OYw5nDmsObw5zGr8yDw5/DoMOhw6LEg8Okw6XDpsOnw6jDqcOqw6vMgcOtw67Dr8SRw7HMo8Ozw7TGocO2w7fDuMO5w7rDu8O8xrDigqvDv1wiXG4gIH0sXG4gIFwiaWJtMTE2M1wiOiBcImNwMTE2M1wiLFxuICBcImNzaWJtMTE2M1wiOiBcImNwMTE2M1wiLFxuICBcIm1hY2Nyb2F0aWFuXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7FoOKEosK0wqjiiaDFvcOY4oiewrHiiaTiiaXiiIbCteKIguKIkeKIj8Wh4oirwqrCuuKEpsW+w7jCv8KhwqziiJrGkuKJiMSGwqvEjOKApsKgw4DDg8OVxZLFk8SQ4oCU4oCc4oCd4oCY4oCZw7fil4rvv73CqeKBhMKk4oC54oC6w4bCu+KAk8K34oCa4oCe4oCww4LEh8OBxI3DiMONw47Dj8OMw5PDlMSRw5LDmsObw5nEscuGy5zCr8+Aw4vLmsK4w4rDpsuHXCJcbiAgfSxcbiAgXCJtYWNjeXJpbGxpY1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr+KAoMKwwqLCo8Kn4oCiwrbQhsKuwqnihKLQgtGS4omg0IPRk+KInsKx4omk4oml0ZbCteKIgtCI0ITRlNCH0ZfQidGZ0IrRmtGY0IXCrOKImsaS4omI4oiGwqvCu+KApsKg0IvRm9CM0ZzRleKAk+KAlOKAnOKAneKAmOKAmcO34oCe0I7RntCP0Z/ihJbQgdGR0Y/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjsKkXCJcbiAgfSxcbiAgXCJtYWNncmVla1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TCucKyw4nCs8OWw5zOhcOgw6LDpM6EwqjDp8Opw6jDqsOrwqPihKLDrsOv4oCiwr3igLDDtMO2wqbCrcO5w7vDvOKAoM6TzpTOmM6bzp7OoMOfwq7Cqc6jzqrCp+KJoMKwzofOkcKx4omk4omlwqXOks6VzpbOl86ZzprOnM6mzqvOqM6pzqzOncKszp/OoeKJiM6kwqvCu+KApsKgzqXOp86GzojFk+KAk+KAleKAnOKAneKAmOKAmcO3zonOis6Mzo7Orc6uzq/PjM6Pz43Osc6yz4jOtM61z4bOs863zrnOvs66zrvOvM69zr/PgM+Oz4HPg8+EzrjPic+Cz4fPhc62z4rPi86QzrDvv71cIlxuICB9LFxuICBcIm1hY2ljZWxhbmRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zDncKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCuuKEpsOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTCpMOQw7DDnsO+w73Ct+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvv73DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIlxuICB9LFxuICBcIm1hY3JvbWFuXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK64oSmw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhMKk4oC54oC676yB76yC4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCJcbiAgfSxcbiAgXCJtYWNyb21hbmlhXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDEgsWe4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK64oSmxIPFn8K/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhMKk4oC54oC6xaLFo+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+/vcOSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiXG4gIH0sXG4gIFwibWFjdGhhaVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwqvCu+KApu+ijO+ij++iku+ile+imO+ii++iju+ike+ilO+il+KAnOKAne+ime+/veKAou+ihO+iie+ihe+ihu+ih++iiO+iiu+ije+ikO+ik++iluKAmOKAme+/vcKg4LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li677u/4oCL4oCT4oCU4Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4oSi4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZwq7Cqe+/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwibWFjdHVya2lzaFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCuuKEpsOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjEnsSfxLDEscWexZ/igKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvv73DksOaw5vDme+/vcuGy5zCr8uYy5nLmsK4y53Lm8uHXCJcbiAgfSxcbiAgXCJtYWN1a3JhaW5lXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv4oCgwrDSkMKjwqfigKLCttCGwq7CqeKEotCC0ZLiiaDQg9GT4oiewrHiiaTiiaXRlsK10pHQiNCE0ZTQh9GX0InRmdCK0ZrRmNCFwqziiJrGkuKJiOKIhsKrwrvigKbCoNCL0ZvQjNGc0ZXigJPigJTigJzigJ3igJjigJnDt+KAntCO0Z7Qj9Gf4oSW0IHRkdGP0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7CpFwiXG4gIH0sXG4gIFwia29pOHJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKUgOKUguKUjOKUkOKUlOKUmOKUnOKUpOKUrOKUtOKUvOKWgOKWhOKWiOKWjOKWkOKWkeKWkuKWk+KMoOKWoOKImeKImuKJiOKJpOKJpcKg4oyhwrDCssK3w7filZDilZHilZLRkeKVk+KVlOKVleKVluKVl+KVmOKVmeKVmuKVm+KVnOKVneKVnuKVn+KVoOKVodCB4pWi4pWj4pWk4pWl4pWm4pWn4pWo4pWp4pWq4pWr4pWswqnRjtCw0LHRhtC00LXRhNCz0YXQuNC50LrQu9C80L3QvtC/0Y/RgNGB0YLRg9C20LLRjNGL0LfRiNGN0YnRh9GK0K7QkNCR0KbQlNCV0KTQk9Cl0JjQmdCa0JvQnNCd0J7Qn9Cv0KDQodCi0KPQltCS0KzQq9CX0KjQrdCp0KfQqlwiXG4gIH0sXG4gIFwia29pOHVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKUgOKUguKUjOKUkOKUlOKUmOKUnOKUpOKUrOKUtOKUvOKWgOKWhOKWiOKWjOKWkOKWkeKWkuKWk+KMoOKWoOKImeKImuKJiOKJpOKJpcKg4oyhwrDCssK3w7filZDilZHilZLRkdGU4pWU0ZbRl+KVl+KVmOKVmeKVmuKVm9KR4pWd4pWe4pWf4pWg4pWh0IHQhOKVo9CG0IfilabilafilajilanilarSkOKVrMKp0Y7QsNCx0YbQtNC10YTQs9GF0LjQudC60LvQvNC90L7Qv9GP0YDRgdGC0YPQttCy0YzRi9C30YjRjdGJ0YfRitCu0JDQkdCm0JTQldCk0JPQpdCY0JnQmtCb0JzQndCe0J/Qr9Cg0KHQotCj0JbQktCs0KvQl9Co0K3QqdCn0KpcIlxuICB9LFxuICBcImtvaThydVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4pSA4pSC4pSM4pSQ4pSU4pSY4pSc4pSk4pSs4pS04pS84paA4paE4paI4paM4paQ4paR4paS4paT4oyg4pag4oiZ4oia4omI4omk4omlwqDijKHCsMKywrfDt+KVkOKVkeKVktGR0ZTilZTRltGX4pWX4pWY4pWZ4pWa4pWb0pHRnuKVnuKVn+KVoOKVodCB0ITilaPQhtCH4pWm4pWn4pWo4pWp4pWq0pDQjsKp0Y7QsNCx0YbQtNC10YTQs9GF0LjQudC60LvQvNC90L7Qv9GP0YDRgdGC0YPQttCy0YzRi9C30YjRjdGJ0YfRitCu0JDQkdCm0JTQldCk0JPQpdCY0JnQmtCb0JzQndCe0J/Qr9Cg0KHQotCj0JbQktCs0KvQl9Co0K3QqdCn0KpcIlxuICB9LFxuICBcImtvaTh0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLSm9KT4oCa0pLigJ7igKbigKDigKHvv73igLDSs+KAudKy0rfStu+/vdKa4oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSi77+94oC677+977+977+977+977+906/TrtGRwqTTo8Kmwqfvv73vv73vv73Cq8Kswq3Cru+/vcKwwrHCstCB77+906LCtsK377+94oSW77+9wrvvv73vv73vv73CqdGO0LDQsdGG0LTQtdGE0LPRhdC40LnQutC70LzQvdC+0L/Rj9GA0YHRgtGD0LbQstGM0YvQt9GI0Y3RidGH0YrQrtCQ0JHQptCU0JXQpNCT0KXQmNCZ0JrQm9Cc0J3QntCf0K/QoNCh0KLQo9CW0JLQrNCr0JfQqNCt0KnQp9CqXCJcbiAgfSxcbiAgXCJhcm1zY2lpOFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg77+91ofWiSkowrvCq+KAlC7VnSwt1origKbVnNWb1Z7UsdWh1LLVotSz1aPUtNWk1LXVpdS21abUt9Wn1LjVqNS51anUutWq1LvVq9S81azUvdWt1L7VrtS/1a/VgNWw1YHVsdWC1bLVg9Wz1YTVtNWF1bXVhtW21YfVt9WI1bjVidW51YrVutWL1bvVjNW81Y3VvdWO1b7Vj9W/1ZDWgNWR1oHVktaC1ZPWg9WU1oTVldaF1ZbWhtWa77+9XCJcbiAgfSxcbiAgXCJyazEwNDhcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCC0IPigJrRk+KAnuKApuKAoOKAoeKCrOKAsNCJ4oC50IrSmtK60I/RkuKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEotGZ4oC60ZrSm9K70Z/CoNKw0rHTmMKk06jCpsKn0IHCqdKSwqvCrMKtwq7SrsKwwrHQhtGW06nCtcK2wrfRkeKEltKTwrvTmdKi0qPSr9CQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGPXCJcbiAgfSxcbiAgXCJ0Y3ZuXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAww5rhu6RcXHUwMDAz4buq4bus4buuXFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTDhu6jhu7Dhu7Lhu7bhu7jDneG7tFxcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/w4DhuqLDg8OB4bqg4bq24bqsw4jhurrhurzDieG6uOG7hsOM4buIxKjDjeG7isOS4buOw5XDk+G7jOG7mOG7nOG7nuG7oOG7muG7osOZ4bumxajCoMSCw4LDisOUxqDGr8SQxIPDosOqw7TGocawxJHhurDMgMyJzIPMgcyjw6DhuqPDo8Oh4bqh4bqy4bqx4bqz4bq14bqv4bq04bqu4bqm4bqo4bqq4bqk4buA4bq34bqn4bqp4bqr4bql4bqtw6jhu4Lhurvhur3DqeG6ueG7geG7g+G7heG6v+G7h8Os4buJ4buE4bq+4buSxKnDreG7i8Oy4buU4buPw7XDs+G7jeG7k+G7leG7l+G7keG7meG7neG7n+G7oeG7m+G7o8O54buW4bunxanDuuG7peG7q+G7reG7r+G7qeG7seG7s+G7t+G7ucO94bu14buQXCJcbiAgfSxcbiAgXCJnZW9yZ2lhbmFjYWRlbXlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHigJrGkuKAnuKApuKAoOKAocuG4oCwxaDigLnFksKNwo7Cj8KQ4oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLFoeKAusWTwp3CnsW4wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv+GDkOGDkeGDkuGDk+GDlOGDleGDluGDl+GDmOGDmeGDmuGDm+GDnOGDneGDnuGDn+GDoOGDoeGDouGDo+GDpOGDpeGDpuGDp+GDqOGDqeGDquGDq+GDrOGDreGDruGDr+GDsOGDseGDsuGDs+GDtOGDteGDtsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/XCJcbiAgfSxcbiAgXCJnZW9yZ2lhbnBzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKB4oCaxpLigJ7igKbigKDigKHLhuKAsMWg4oC5xZLCjcKOwo/CkOKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSixaHigLrFk8Kdwp7FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/hg5Dhg5Hhg5Lhg5Phg5Thg5Xhg5bhg7Hhg5fhg5jhg5nhg5rhg5vhg5zhg7Lhg53hg57hg5/hg6Dhg6Hhg6Lhg7Phg6Phg6Thg6Xhg6bhg6fhg6jhg6nhg6rhg6vhg6zhg63hg67hg7Thg6/hg7Dhg7XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/XCJcbiAgfSxcbiAgXCJwdDE1NFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0pbSktOu0pPigJ7igKbSttKu0rLSr9Kg06LSotKa0rrSuNKX4oCY4oCZ4oCc4oCd4oCi4oCT4oCU0rPSt9Kh06PSo9Kb0rvSucKg0I7RntCI06jSmNKwwqfQgcKp05jCq8Ks06/CrtKcwrDSsdCG0ZbSmdOpwrbCt9GR4oSW05nCu9GY0qrSq9Kd0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y9cIlxuICB9LFxuICBcInZpc2NpaVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXFx1MDAwMFxcdTAwMDHhurJcXHUwMDAzXFx1MDAwNOG6tOG6qlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEz4bu2XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOOG7uFxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWThu7RcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/4bqg4bqu4bqw4bq24bqk4bqm4bqo4bqs4bq84bq44bq+4buA4buC4buE4buG4buQ4buS4buU4buW4buY4bui4bua4buc4bue4buK4buO4buM4buI4bumxajhu6Thu7LDleG6r+G6seG6t+G6peG6p+G6qeG6reG6veG6ueG6v+G7geG7g+G7heG7h+G7keG7k+G7leG7l+G7oMag4buZ4bud4buf4buL4buw4buo4buq4busxqHhu5vGr8OAw4HDgsOD4bqixILhurPhurXDiMOJw4rhurrDjMONxKjhu7PEkOG7qcOSw5PDlOG6oeG7t+G7q+G7rcOZw5rhu7nhu7XDneG7ocaww6DDocOiw6PhuqPEg+G7r+G6q8Oow6nDquG6u8Osw63EqeG7icSR4buxw7LDs8O0w7Xhu4/hu43hu6XDucO6xanhu6fDveG7o+G7rlwiXG4gIH0sXG4gIFwiaXNvNjQ2Y25cIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiPCpSUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x94oC+f++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwiaXNvNjQ2anBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW8KlXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x94oC+f++/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwiaHByb21hbjhcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMOAw4LDiMOKw4vDjsOPwrTLi8uGwqjLnMOZw5vigqTCr8Odw73CsMOHw6fDkcOxwqHCv8KkwqPCpcKnxpLCosOiw6rDtMO7w6HDqcOzw7rDoMOow7LDucOkw6vDtsO8w4XDrsOYw4bDpcOtw7jDpsOEw6zDlsOcw4nDr8Ofw5TDgcODw6PDkMOww43DjMOTw5LDlcO1xaDFocOaxbjDv8Oew77Ct8K1wrbCvuKAlMK8wr3CqsK6wqvilqDCu8Kx77+9XCJcbiAgfSxcbiAgXCJtYWNpbnRvc2hcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGEwqTigLnigLrvrIHvrILigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvv73DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIlxuICB9LFxuICBcImFzY2lpXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv71cIlxuICB9LFxuICBcInRpczYyMFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+94LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li677+977+977+977+94Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4LmO4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZ4Lma4Lmb77+977+977+977+9XCJcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiXG5cbi8vIE1hbnVhbGx5IGFkZGVkIGRhdGEgdG8gYmUgdXNlZCBieSBzYmNzIGNvZGVjIGluIGFkZGl0aW9uIHRvIGdlbmVyYXRlZCBvbmUuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIC8vIE5vdCBzdXBwb3J0ZWQgYnkgaWNvbnYsIG5vdCBzdXJlIHdoeS5cbiAgICBcIjEwMDI5XCI6IFwibWFjY2VudGV1cm9cIixcbiAgICBcIm1hY2NlbnRldXJvXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIsOExIDEgcOJxITDlsOcw6HEhcSMw6TEjcSGxIfDqcW5xbrEjsOtxI/EksSTxJbDs8SXw7TDtsO1w7rEmsSbw7zigKDCsMSYwqPCp+KAosK2w5/CrsKp4oSixJnCqOKJoMSjxK7Er8Sq4omk4omlxKvEtuKIguKIkcWCxLvEvMS9xL7EucS6xYXFhsWDwqziiJrFhMWH4oiGwqvCu+KApsKgxYjFkMOVxZHFjOKAk+KAlOKAnOKAneKAmOKAmcO34peKxY3FlMWVxZjigLnigLrFmcWWxZfFoOKAmuKAnsWhxZrFm8OBxaTFpcONxb3FvsWqw5PDlMWrxa7DmsWvxbDFscWyxbPDncO9xLfFu8WBxbzEosuHXCJcbiAgICB9LFxuXG4gICAgXCI4MDhcIjogXCJjcDgwOFwiLFxuICAgIFwiaWJtODA4XCI6IFwiY3A4MDhcIixcbiAgICBcImNwODA4XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgNGA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0IHRkdCE0ZTQh9GX0I7RnsKw4oiZwrfiiJrihJbigqzilqDCoFwiXG4gICAgfSxcblxuICAgIC8vIEFsaWFzZXMgb2YgZ2VuZXJhdGVkIGVuY29kaW5ncy5cbiAgICBcImFzY2lpOGJpdFwiOiBcImFzY2lpXCIsXG4gICAgXCJ1c2FzY2lpXCI6IFwiYXNjaWlcIixcbiAgICBcImFuc2l4MzRcIjogXCJhc2NpaVwiLFxuICAgIFwiYW5zaXgzNDE5NjhcIjogXCJhc2NpaVwiLFxuICAgIFwiYW5zaXgzNDE5ODZcIjogXCJhc2NpaVwiLFxuICAgIFwiY3Nhc2NpaVwiOiBcImFzY2lpXCIsXG4gICAgXCJjcDM2N1wiOiBcImFzY2lpXCIsXG4gICAgXCJpYm0zNjdcIjogXCJhc2NpaVwiLFxuICAgIFwiaXNvaXI2XCI6IFwiYXNjaWlcIixcbiAgICBcImlzbzY0NnVzXCI6IFwiYXNjaWlcIixcbiAgICBcImlzbzY0NmlydlwiOiBcImFzY2lpXCIsXG4gICAgXCJ1c1wiOiBcImFzY2lpXCIsXG5cbiAgICBcImxhdGluMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJsYXRpbjJcIjogXCJpc284ODU5MlwiLFxuICAgIFwibGF0aW4zXCI6IFwiaXNvODg1OTNcIixcbiAgICBcImxhdGluNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJsYXRpbjVcIjogXCJpc284ODU5OVwiLFxuICAgIFwibGF0aW42XCI6IFwiaXNvODg1OTEwXCIsXG4gICAgXCJsYXRpbjdcIjogXCJpc284ODU5MTNcIixcbiAgICBcImxhdGluOFwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwibGF0aW45XCI6IFwiaXNvODg1OTE1XCIsXG4gICAgXCJsYXRpbjEwXCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImNzaXNvbGF0aW4xXCI6IFwiaXNvODg1OTFcIixcbiAgICBcImNzaXNvbGF0aW4yXCI6IFwiaXNvODg1OTJcIixcbiAgICBcImNzaXNvbGF0aW4zXCI6IFwiaXNvODg1OTNcIixcbiAgICBcImNzaXNvbGF0aW40XCI6IFwiaXNvODg1OTRcIixcbiAgICBcImNzaXNvbGF0aW5jeXJpbGxpY1wiOiBcImlzbzg4NTk1XCIsXG4gICAgXCJjc2lzb2xhdGluYXJhYmljXCI6IFwiaXNvODg1OTZcIixcbiAgICBcImNzaXNvbGF0aW5ncmVla1wiIDogXCJpc284ODU5N1wiLFxuICAgIFwiY3Npc29sYXRpbmhlYnJld1wiOiBcImlzbzg4NTk4XCIsXG4gICAgXCJjc2lzb2xhdGluNVwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJjc2lzb2xhdGluNlwiOiBcImlzbzg4NTkxMFwiLFxuXG4gICAgXCJsMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJsMlwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJsM1wiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJsNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJsNVwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJsNlwiOiBcImlzbzg4NTkxMFwiLFxuICAgIFwibDdcIjogXCJpc284ODU5MTNcIixcbiAgICBcImw4XCI6IFwiaXNvODg1OTE0XCIsXG4gICAgXCJsOVwiOiBcImlzbzg4NTkxNVwiLFxuICAgIFwibDEwXCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImlzb2lyMTRcIjogXCJpc282NDZqcFwiLFxuICAgIFwiaXNvaXI1N1wiOiBcImlzbzY0NmNuXCIsXG4gICAgXCJpc29pcjEwMFwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJpc29pcjEwMVwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJpc29pcjEwOVwiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJpc29pcjExMFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJpc29pcjE0NFwiOiBcImlzbzg4NTk1XCIsXG4gICAgXCJpc29pcjEyN1wiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJpc29pcjEyNlwiOiBcImlzbzg4NTk3XCIsXG4gICAgXCJpc29pcjEzOFwiOiBcImlzbzg4NTk4XCIsXG4gICAgXCJpc29pcjE0OFwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJpc29pcjE1N1wiOiBcImlzbzg4NTkxMFwiLFxuICAgIFwiaXNvaXIxNjZcIjogXCJ0aXM2MjBcIixcbiAgICBcImlzb2lyMTc5XCI6IFwiaXNvODg1OTEzXCIsXG4gICAgXCJpc29pcjE5OVwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwiaXNvaXIyMDNcIjogXCJpc284ODU5MTVcIixcbiAgICBcImlzb2lyMjI2XCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImNwODE5XCI6IFwiaXNvODg1OTFcIixcbiAgICBcImlibTgxOVwiOiBcImlzbzg4NTkxXCIsXG5cbiAgICBcImN5cmlsbGljXCI6IFwiaXNvODg1OTVcIixcblxuICAgIFwiYXJhYmljXCI6IFwiaXNvODg1OTZcIixcbiAgICBcImFyYWJpYzhcIjogXCJpc284ODU5NlwiLFxuICAgIFwiZWNtYTExNFwiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJhc21vNzA4XCI6IFwiaXNvODg1OTZcIixcblxuICAgIFwiZ3JlZWtcIiA6IFwiaXNvODg1OTdcIixcbiAgICBcImdyZWVrOFwiIDogXCJpc284ODU5N1wiLFxuICAgIFwiZWNtYTExOFwiIDogXCJpc284ODU5N1wiLFxuICAgIFwiZWxvdDkyOFwiIDogXCJpc284ODU5N1wiLFxuXG4gICAgXCJoZWJyZXdcIjogXCJpc284ODU5OFwiLFxuICAgIFwiaGVicmV3OFwiOiBcImlzbzg4NTk4XCIsXG5cbiAgICBcInR1cmtpc2hcIjogXCJpc284ODU5OVwiLFxuICAgIFwidHVya2lzaDhcIjogXCJpc284ODU5OVwiLFxuXG4gICAgXCJ0aGFpXCI6IFwiaXNvODg1OTExXCIsXG4gICAgXCJ0aGFpOFwiOiBcImlzbzg4NTkxMVwiLFxuXG4gICAgXCJjZWx0aWNcIjogXCJpc284ODU5MTRcIixcbiAgICBcImNlbHRpYzhcIjogXCJpc284ODU5MTRcIixcbiAgICBcImlzb2NlbHRpY1wiOiBcImlzbzg4NTkxNFwiLFxuXG4gICAgXCJ0aXM2MjAwXCI6IFwidGlzNjIwXCIsXG4gICAgXCJ0aXM2MjAyNTI5MVwiOiBcInRpczYyMFwiLFxuICAgIFwidGlzNjIwMjUzMzBcIjogXCJ0aXM2MjBcIixcblxuICAgIFwiMTAwMDBcIjogXCJtYWNyb21hblwiLFxuICAgIFwiMTAwMDZcIjogXCJtYWNncmVla1wiLFxuICAgIFwiMTAwMDdcIjogXCJtYWNjeXJpbGxpY1wiLFxuICAgIFwiMTAwNzlcIjogXCJtYWNpY2VsYW5kXCIsXG4gICAgXCIxMDA4MVwiOiBcIm1hY3R1cmtpc2hcIixcblxuICAgIFwiY3NwYzhjb2RlcGFnZTQzN1wiOiBcImNwNDM3XCIsXG4gICAgXCJjc3BjNzc1YmFsdGljXCI6IFwiY3A3NzVcIixcbiAgICBcImNzcGM4NTBtdWx0aWxpbmd1YWxcIjogXCJjcDg1MFwiLFxuICAgIFwiY3NwY3A4NTJcIjogXCJjcDg1MlwiLFxuICAgIFwiY3NwYzg2MmxhdGluaGVicmV3XCI6IFwiY3A4NjJcIixcbiAgICBcImNwZ3JcIjogXCJjcDg2OVwiLFxuXG4gICAgXCJtc2VlXCI6IFwiY3AxMjUwXCIsXG4gICAgXCJtc2N5cmxcIjogXCJjcDEyNTFcIixcbiAgICBcIm1zYW5zaVwiOiBcImNwMTI1MlwiLFxuICAgIFwibXNncmVla1wiOiBcImNwMTI1M1wiLFxuICAgIFwibXN0dXJrXCI6IFwiY3AxMjU0XCIsXG4gICAgXCJtc2hlYnJcIjogXCJjcDEyNTVcIixcbiAgICBcIm1zYXJhYlwiOiBcImNwMTI1NlwiLFxuICAgIFwid2luYmFsdHJpbVwiOiBcImNwMTI1N1wiLFxuXG4gICAgXCJjcDIwODY2XCI6IFwia29pOHJcIixcbiAgICBcIjIwODY2XCI6IFwia29pOHJcIixcbiAgICBcImlibTg3OFwiOiBcImtvaThyXCIsXG4gICAgXCJjc2tvaThyXCI6IFwia29pOHJcIixcblxuICAgIFwiY3AyMTg2NlwiOiBcImtvaTh1XCIsXG4gICAgXCIyMTg2NlwiOiBcImtvaTh1XCIsXG4gICAgXCJpYm0xMTY4XCI6IFwia29pOHVcIixcblxuICAgIFwic3RyazEwNDgyMDAyXCI6IFwicmsxMDQ4XCIsXG5cbiAgICBcInRjdm41NzEyXCI6IFwidGN2blwiLFxuICAgIFwidGN2bjU3MTIxXCI6IFwidGN2blwiLFxuXG4gICAgXCJnYjE5ODg4MFwiOiBcImlzbzY0NmNuXCIsXG4gICAgXCJjblwiOiBcImlzbzY0NmNuXCIsXG5cbiAgICBcImNzaXNvMTRqaXNjNjIyMHJvXCI6IFwiaXNvNjQ2anBcIixcbiAgICBcImppc2M2MjIwMTk2OXJvXCI6IFwiaXNvNjQ2anBcIixcbiAgICBcImpwXCI6IFwiaXNvNjQ2anBcIixcblxuICAgIFwiY3NocHJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJyOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJyb21hbjhcIjogXCJocHJvbWFuOFwiLFxuICAgIFwieHJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJpYm0xMDUxXCI6IFwiaHByb21hbjhcIixcblxuICAgIFwibWFjXCI6IFwibWFjaW50b3NoXCIsXG4gICAgXCJjc21hY2ludG9zaFwiOiBcIm1hY2ludG9zaFwiLFxufTtcblxuIiwibW9kdWxlLmV4cG9ydHM9W1xuW1wiODc0MFwiLFwi5I+w5LCy5JiD5Jam5JW48KeJp+S1t+SWs/CnsrHks6Lwp7OF466V5Jy25J2E5LGH5LGA8KSKv/CjmJfwp42S8Ka6i/Cng5LksZfwqo2R5J2P5Jea5LKF8KexrOS0h+SqpOSaofCmrKPniKXwpamU8KGpo/CjuIbwo72h5pmN5Zu7XCJdLFxuW1wiODc2N1wiLFwi57aV5aSd8KiuueO3tOmctPCnr6/lr5vwobWe5aqk45il8Km6sOWrkeWut+WzvOadruiWk/CppYXnkaHnkp3jobXwobWT8KOanvCmgKHju6xcIl0sXG5bXCI4N2ExXCIsXCLwpaOe46u156u86b6X8KSFofCopI3wo4eq8KCqivCjiZ7kjIrokoTpvpbpkK/kpLDomJPlopbpnYrpiJjnp5DnqLLmmaDmqKnoop3nkYznr4XmnoLnqKzliY/pgYbjk6bnj4Twpba555OG6b+H5Z6z5KSv5ZGM5ISx8KOajuWgmOepsvCnraXoro/kmq7wprqI5IaB8KW2meeurvCikrzpv4jwopOB8KKTifCik4zpv4nolITwo5a75IK06b+K5JOh8Kq3v+aLgeeBrum/i1wiXSxcbltcIjg4NDBcIixcIuOHgFwiLDQsXCLwoISM44eF8KCDkfCgg43jh4bjh4fwoIOL8KG/qOOHiPCgg4rjh4njh4rjh4vjh4zwoISO44eN44eOxIDDgceNw4DEksOJxJrDiMWMw5PHkcOS4L+/w4rMhOG6vuC/v8OKzIzhu4DDisSBw6HHjsOgyZHEk8OpxJvDqMSrw63HkMOsxY3Ds8eSw7LFq8O6x5TDuceWx5jHmlwiXSxcbltcIjg4YTFcIixcIsecw7zgv7/DqsyE4bq/4L+/w6rMjOG7gcOqyaHij5rij5tcIl0sXG5bXCI4OTQwXCIsXCLwqo6p8KGFhVwiXSxcbltcIjg5NDNcIixcIuaUilwiXSxcbltcIjg5NDZcIixcIuS4vea7nem1jumHn1wiXSxcbltcIjg5NGNcIixcIvCnnLXmkpHkvJrkvKjkvqjlhZblhbTlhpzlh6TliqHliqjljLvljY7lj5Hlj5jlm6Llo7DlpITlpIflpLLlpLTlrablrp7lrp/lsprluobmgLvmlonmn77moITmoaXmtY7ngrznlLXnuqTnuqznurrnu4fnu4/nu5/nvIbnvLfoibroi4/oja/op4borr7or6Lovabovafova5cIl0sXG5bXCI4OWExXCIsXCLnkJHns7znt43mpYbnq4nliKdcIl0sXG5bXCI4OWFiXCIsXCLphoznorjphZ7ogrxcIl0sXG5bXCI4OWIwXCIsXCLotIvog7bwoKenXCJdLFxuW1wiODliNVwiLFwi6IKf6buH5LON6beJ6biM5LC+8Km3tvCngI7puIrwqoSz45eBXCJdLFxuW1wiODljMVwiLFwi5rqa6Ii+55SZXCJdLFxuW1wiODljNVwiLFwi5KSR6ams6aqP6b6Z56aH8KiRrPCht4rwoJeQ8KKrpuS4pOS6geS6gOS6h+S6v+S7q+S8t+ORjOS+veO5iOWAg+WCiOORveOSk+OSpeWGhuWkheWHm+WHvOWIheS6ieWJueWKkOWMp+OXh+WOqeOVkeWOsOOVk+WPguWQo+OVreOVsuOageWSk+WSo+WStOWSueWTkOWTr+WUmOWUo+WUqOOWmOWUv+OWpeOWv+WXl+OXhVwiXSxcbltcIjhhNDBcIixcIvCntoTllKVcIl0sXG5bXCI4YTQzXCIsXCLwoLGC8KC0lfClhKvllpDworOG46es8KCNgei5hvCktrjwqZOl5IGT8KiCvueduvCisLjjqLTkn5XwqIWd8KansvCkt6rmk53woLW88KC+tPCgs5XwoYO05pKN6Lm+8KC6lvCgsIvwoL2k8KKyqfCoiZbwpJOTXCJdLFxuW1wiOGE2NFwiLFwi8KC1hvCpqY3wqIOp5J+08KS6p/Cis4LpqrLjqafwqZe047+t45SG8KWLh/Cpn5Twp6OI8KK1hOm1rumglVwiXSxcbltcIjhhNzZcIixcIuSPmfCmgqXmkrTlk6PworWM8KKvivChgbfjp7vwoYGvXCJdLFxuW1wiOGFhMVwiLFwi8KabmvCmnJbwp6ag5pOq8KWBkvCgsYPouajwooah8KitjPCgnLFcIl0sXG5bXCI4YWFjXCIsXCLkoIvwoIap47+65aGz8KK2jVwiXSxcbltcIjhhYjJcIixcIvCkl4jwoJO88KaCl/CgvYzwoLaW5ZW55IK75I66XCJdLFxuW1wiOGFiYlwiLFwi5Kq08KKppvChgp3ohqrpo7XwoLac5o2546e+8KKdtei3gOWaoeaRvOO5g1wiXSxcbltcIjhhYzlcIixcIvCqmIHwoLiJ8KKrj/Cis4lcIl0sXG5bXCI4YWNlXCIsXCLwoYOI8KOnguOmkuOohvCoipvjlbjwpbmJ8KKDh+WZkvCgvLHworKy8KmcoOOSvOawvfCkuLtcIl0sXG5bXCI4YWRmXCIsXCLwp5W08KK6i/CiiIjwqpmb8KizjfCgubrwoLC08KagnOe+k/Chg4/woqCD8KKkueOXu/Clh6PwoLqM8KC+jfCguqrjvpPwoLyw8KC1h/ChhY/woLmMXCJdLFxuW1wiOGFmNlwiLFwi8KC6q/CgrqnwoLWI8KGDgPChhL3jv7nwopqW5pCy8KC+rVwiXSxcbltcIjhiNDBcIixcIvCjj7Twp5i58KKvjvCgtb7woLW/8KKxkfCisZXjqJjwoLqY8KGDh/CgvK7wqpiy8KatkPCos5LwqLaZ8KiziumWquWTjOiLhOWWuVwiXSxcbltcIjhiNTVcIixcIvCpu4PpsKbpqrbwp52e8KK3rueFgOiFreiDrOWwnPCmlbLohLTjnpfljZ/wqIK96Ya28KC7uvCguI/woLm38KC7u+OXnfCkt6vjmInwoLOW5Zqv8KKetfChg4nwoLiQ8KC5uPChgbjwoYWI8KiIh/ChkZXwoLm58KS5kPCitqTlqZTwoYCd8KGAnvChg7XwoYO25Z6c8KC4kVwiXSxcbltcIjhiYTFcIixcIvCnmpTwqIuN8KC+tfCgubvwpYW+45yD8KC+tvChhoDwpYuY8KqKvfCkp5rwoaC68KSFt/CoibzlopnliajjmJrwpZy9566y5a2o5KCA5Kys6byn5Ken6bCf6a6N8KWttPCjhL3ll7vjl7LlmonkuKjlpILwoa+B8K+huOmdkfCggobkuZvkurvjlL7lsKPlvZHlv4Tjo7rmiYzmlLXmrbrmsLXmsLrngazniKvkuKzniq3wpKOp572S56S757O5572T8KaJquOTgVwiXSxcbltcIjhiZGVcIixcIvCmjYvogILogoDwppiS8KalkeWNneihpOingfCnorLorqDotJ3pkoXplbjplb/pl6jwqLiP6Z+m6aG16aOO6aOe6aWj8KmgkOmxvOm4n+m7hOatr++kh+S4t/CggofpmJ3miLfpkqJcIl0sXG5bXCI4YzQwXCIsXCLlgLvmt77wqbGz6b6m47eJ6KKP8KSFjueBt+WzteSsoPClh43jlZnwpbSw5oSi8Kiosui+p+mHtueGkeacmeeOuvCjioHwqoSH47KL8KGmgOSskOejpOeQguWGrvConI/kgInmqaPwqoq65Iij6JiP8KCpr+eoqvCppYfwqKuq6Z2V54GN5Yyk8KKBvumPtOebmfCop6Ppvqfnn53kuqPkv7DlgrzkuK/kvJfpvqjlkLTntovlopLlo5Dwoba25bqS5bqZ5b+C8KKckuaWi1wiXSxcbltcIjhjYTFcIixcIvCjj7nmpJnmqYPwo7Gj5rO/XCJdLFxuW1wiOGNhN1wiLFwi54iA8KSUheeOjOO7m/CkqJPlrJXnkrnoroPwpbKk8KWaleeqk+evrOezg+e5rOiLuOiWl+m+qeiikOm+qui6uem+q+i/j+iVn+mnoOmIoem+rPCotrnwoZC/5IGx5Iqi5aiaXCJdLFxuW1wiOGNjOVwiLFwi6aGo5p2r5Im25Zy9XCJdLFxuW1wiOGNjZVwiLFwi6JeW8KSlu+iKv/CnhI3ksoHwprW05bW78KaslfCmvr7pvq3pvq7lrpbpvq/mm6fnuZvmuZfnp4rjtojkk4Pwo4mW8KKeluSOmuSUtlwiXSxcbltcIjhjZTZcIixcIuWzlfCjrJroq7nlsbjjtJLwo5WR5bW46b6y54WX5JWY8KSDrPChuKPksbfjpbjjkYrwoIak8KaxgeirjOS+tPCgiLnlpr/ohazpoZbwqaO65by7XCJdLFxuW1wiOGQ0MFwiLFwi8KCun1wiXSxcbltcIjhkNDJcIixcIvCih4HwqKWt5ISC5Jq78KmBueO8h+m+s/CqhrXkg7jjn5bkm7fwprGG5IW88KiasvCnj7/kla3jo5TwpZKa5JWh5JSb5LaJ5LG75LW25Jeq47+I8KSsj+OZoeSTnuSSveSHreW0vuW1iOW1luO3vOOgj+W2pOW2ueOgoOOguOW5guW6veW8peW+g+OkiOOklOOkv+OljeaDl+aEveWzpeOmieaGt+aGueaHj+OmuOaIrOaKkOaLpeaMmOOnuOWasVwiXSxcbltcIjhkYTFcIixcIuOog+aPouaPu+aQh+aRmuOpi+aTgOW0leWYoem+n+Oql+aWhuOqveaXv+aZk+OrsuaakuOsouacluOtguaepOaggOOtmOahiuaihOOtsuOtseOtu+akiealg+eJnOalpOamn+amheOuvOanluOvneappeaptOapseaqguOvrOaqmeOvsuaqq+aqtearlOartuaugeavgeavquaxteayquOzi+a0gua0hua0pua2geOzr+a2pOa2sea4lea4mOa4qea6hvCop4Dmurvmu6Lmu5rpvb/mu6jmu6nmvKTmvLTjtYbwo72B5r6B5r6+47Wq47W154a35bKZ47aK54Cs47aR54GQ54GU54Gv54G/54KJ8KCMpeSPgeOXsfCgu5hcIl0sXG5bXCI4ZTQwXCIsXCLwo7uX5Z6+8Ka7k+eEvvCln6DjmY7mpqLwqK+p5a2056mJ8KWjofCpk5nnqaXnqb3wpaas56q756qw56uC56uD54eR8KaSjeSHiuermuerneerquSHr+WSsvClsIHnrIvnrZXnrKnwpYyO8KWzvueuouetr+iOnPClrrTwprG/56+Q6JCh566S56648KW0oOO2rfClsaXokpLnr7rnsIbnsLXwpbOB57GE57KD8KSigueypuaZvfCklbjns4nns4fns6bnsbTns7Pns7Xns45cIl0sXG5bXCI4ZWExXCIsXCLnuafklJ3wprmE57Wd8Ka7lueSjee2iee2q+eEtee2s+e3kvCkgZfwpoCp57ek47ST57e18KGfuee3pfCoja3nuJ3wpoSh8KaFmue5rue6kuSMq+mRrOe4p+e9gOe9gee9h+ektvCmi5Dpp6Hnvpfwpo2R576j8KGZofCggajklZzwo52m5JSD8KiMuue/uvCmkonogIXogIjogJ3ogKjogK/wqoKH8Kazg+iAu+iAvOiBofCinJTkponwppim8KO3o/Cmm6jmnKXogqfwqKmI6ISH6ISa5aKw8KKbtuaxv/CmkpjwpL645pOn8KGSiuiImPChoZ7mqZPwpKml8KSqleSRuuiIqfCgrI3wpqmS8KO1vuS/ufChk73ok6LojaLwpqyK8KSmp/CjlLDwoZ2z8KO3uOiKquakm/CvppTkh5tcIl0sXG5bXCI4ZjQwXCIsXCLolYvoi5DojJrwoLiW8KGetOObgfCjhb3wo5Wa6Im76Iui6IyY8KO6i/CmtqPwpqyF8Kaul/Cjl47jtr/ojJ3ll6zojoXklIvwpral6I6s6I+B6I+T45G+8Ka7lOapl+iVmuOSlvCmuYLworuv6JGY8KWvpOiRseO3k+STpOaqp+iRivCjsrXnpZjokqjwpq6W8Ka5t/CmuYPok57okI/ojpHkkqDokpPok6TwpbKR5ImA8KWzgOSVg+iUtOWrsvCmupnklKfolbPklJbmnr/omJZcIl0sXG5bXCI4ZmExXCIsXCLwqJil8KiYu+iXgfCngojomILwoZaC8KeDjfCvprLklaromKjjmYjwoaKi5Y+38KeOmuiZvuidsfCqg7jon67worCn6J6x6J+a6KCP5Zmh6Jms5qGW5JiP6KGF6KGG8KeXoPCjtrnwp5ek6KGe6KKc5Jmb6KK06KK15o+B6KOF55238Kecj+imh+imiuimpuimqeimp+imvPCoqKXop6fwp6Sk8KeqveiqnOeek+mHvuiqkPCnqZnnq6nwp6y68KO+j+Sck/CnrLjnhbzorIzorJ/wpZCw8KWVpeisv+itjOitjeiqqfCkqbrorpDorpvoqq/woZuf5JiV6KGP6LKb8Ke1lPCnto/wr6eU45yl8Ke1k+izlvCntpjwp7a96LSS6LSD8KGkkOizm+eBnOi0kfCks4nju5DotbdcIl0sXG5bXCI5MDQwXCIsXCLotqnwqICC8KGAlPCkporjrbzwqIa88KeEjOerp+i6rei6tui7g+mLlOi8mei8rfCojaXwqJCS6L6l6YyD8KqKn/CgqZDovrPkpKrwqKee8KiUvfCjtrvlu7jwo4mi6L+58KqAlPComrzwqJSB8KKMpeOmgPCmu5fpgLfwqJS88KeqvumBofColazwqJiL6YKo8Kick+mDhPCom6bpgq7pg73phafjq7Dphqnph4TnsqzwqKSz8KG6iemIjuayn+mJgemJovCllrnpirnwqKuG8KOym/CorIzwpZebXCJdLFxuW1wiOTBhMVwiLFwi8KC0semMrOmNq/Coq6HwqK+r54KP5auD8KirovCoq6XkpaXpiYTwqK+s8KiwufCor7/pjbPpkZvourzploXplqbpkKbplqDmv7bkirnwopm68KibmPChibzwo7iu5Kef5rCc6Zm76ZqW5IWs6Zqj8Ka7leaHmumatuejtfCoq6Dpmr3lj4zkpqHwprK48KCJtPCmkJDwqYKv8KmDpfCkq5HwoaSV8KOMiumcseiZgumctuSoj+SUveSWhfCkq6nngbXlrYHpnJvpnZzwqYeV6Z2X5a2K8KmHq+mdn+mQpeWDkPCjgrfwo4K86Z6J6Z6f6Z6x6Z6+6Z+A6Z+S6Z+g8KWRrOmfrueQnPCpkLPpn7/pn7XwqZCd8KeluuSrkemgtOmgs+mhi+mhpuOsjvCnhbXjtZHwoJiw8KSFnFwiXSxcbltcIjkxNDBcIixcIvClnIbpo4rporfpo4jpo4fkq7/wprSn8KGbk+WWsOmjoemjpumjrOmNuOmkufCkqKnkrbLwqaGX8KmkhemntemojOmou+mokOmpmPClnKXjm4TwqYKx8KmvlemroOmrovCprIXpq7TksI7prJTprK3wqJiA5YC06ay08KamqOOjg/Cjgb3prZDprYDwqbS+5amF8KGho+mujvCkiYvpsILpr7/psIzwqbmo6beU8Km+t/CqhpLwqoar8KqDofCqhKPwqoef6bW+6baD8KqEtOm4juaiiFwiXSxcbltcIjkxYTFcIixcIum3hPCihZvwqoaT8KqIoPChpLvwqoiz6bS58KqCufCqirTpupDpupXpup7puqLktLTpuqrpuq/wpI2k6buB462g46el47Sd5Lyy456+8Kiwq+m8gum8iOSulumQpPCmtqLpvJfpvJbpvLnlmp/lmorpvYXpprjwqYKL6Z+y6JG/6b2i6b2p56uc6b6O54iW5K6+8KSltfCkprvnhbfwpKe48KSNiPCkqZHnjp7wqK+a8KGjuuemn/Copb7wqLi26Y2p6Y+z8KiphOmLrOmOgemPi/CopazwpJK554iX47ur552y56mD54OQ8KSRs/Ckj7jnhb7woZ+v54Kj8KGivvCjlpnju4fwoaKF8KWQr/Chn7jjnKLwoZu78KGgueObofChnbTwoaOR8KW9i+Oco/Chm4DlnZvwpKil8KGPvvChiqhcIl0sXG5bXCI5MjQwXCIsXCLwoY+G8KGStuiUg/CjmqbolIPokZXwpKaU8KeFpfCjuLHwpZWc8KO7u/CngZLkk7Two5uu8KmmnfCmvKbmn7njnLPjsJXjt6floazwoaSi5qCQ5IGX8KOcv/Ckg6HwpIKL8KSEj/CmsKHlk4vlmp7wppqx5ZqS8KC/n/CgrqjwoLiN6Y+G8Kisk+mOnOS7uOWEq+OgmfCkkLbkurzwoJGl8KCNv+S9i+S+ivClmZHlqajwoIar8KCPi+OmmfCgjIrwoJCU45C15Lyp8KCLgPCourPwoIm16Kua8KCIjOS6mFwiXSxcbltcIjkyYTFcIixcIuWDjeWEjeS+ouS8g/CkqI7wo7qK5L2C5YCu5YGs5YKB5L+M5L+l5YGY5YO85YWZ5YWb5YWd5YWe5rm28KOWlfCjuLnwo7q/5rWy8KGihPCjuonlhqjlh4PwoJeg5JOd8KCSo/CgkpLwoJKR6LW68KiqnPCgnI7liZnliqTwoKGz5Yuh6Y2u5Jm654aM8KSOjPCgsKDwpKas8KGDpOankfCguJ3nkbnju57nkpnnkJTnkZbnjpjkro7wpKq88KSCjeWPkOOWhOeIj/Ckg4nllrTwoI2F5ZON8KCvhuWcnemJnembtOmNpuWfneWejeWdv+OYvuWji+WqmfCoqYbwoZu68KGdr/ChnJDlqKzlprjpio/lqb7lq4/lqJLwpaWG8KGns/ChoaHwpIqV45u15rSF55GD5aih8KW6g1wiXSxcbltcIjkzNDBcIixcIuWqgfCor5fwoJCT6Y+g55KM8KGMg+eEheSlsumQiPCop7vpjr3jnqDlsJ7lsp7luZ7luYjwoaaW8KGlvPCjq67lu43lrY/woaSD8KGkhOOcgfChoqDjm53woZu+45uT6ISq8Kiph/Chtrrwo5Gy8KimqOW8jOW8jvChpKfwoZ6r5amr8KGcu+WthOiYlPCnl73ooaDmgb7woqGg8KKYq+W/m+O6uPCilq/wopa+8KmCiPCmvbPmh4DwoIC+8KCBhvCimJvmhpnmhpjmgbXworKb8KK0h/Ckm5TwqYWNXCJdLFxuW1wiOTNhMVwiLFwi5pGx8KSZpfCirarjqKnwoqyi8KORkPCpo6rworm45oy38KqRm+aStuaMseaPkfCkp6PworWn5oqk8KKyoeaQu+aVq+alsuOvtPCjgo7wo4qt8KSmifCjiqvllI3wo4ug8KGjmfCpkL/mm47wo4qJ8KOGs+OroOSGkPClloTwqKyi8KWWj/Chm7zwpZWb8KWQpeejrvCjhIPwoaCq8KOItOORpPCjiI/wo4aC8KSLieaajvCmtKTmmavkrpPmmLDwp6Gw8KG3q+aZo/Cji5Lwo4uh5pie8KWhsuOjkfCjoLrwo568466Z8KOeovCjj77nk5Djrpbmno/wpJiq5qK25qCe46+E5qq+46Gj8KOflfCkkofmqLPmqZLmq4nmrIXwoaSS5pSR5qKY5qmM46+X5qm65q2X8KO/gPCjsprpjqDpi7LwqK+q8Kiri1wiXSxcbltcIjk0NDBcIixcIumKifCogJ7wqKec6ZGn5ral5ryL8KSnrOa1p/Cjvb/jto/muITwpIC85ai95riK5aGH5rSk56GC54S78KSMmvCkibbng7HniZDniofnipTwpJ6P8KScpeWFufCkqqTwoJer55G68KO7uPCjmZ/wpKmK8KSkl/Clv6HjvIbjurHwpKuf8Kiwo/CjvLXmgqfju7Pnk4znkLzpjofnkLfkkp/wpreq5JWR55aD472j8KSzmfCktIbjvZjnlZXnmbPwqpeG46yZ55Go8KirjPCkpqvwpKaO46u7XCJdLFxuW1wiOTRhMVwiLFwi47eN8KSpjuO7v/Ckp4XwpKOz6Ye65Zyy6Y2C8Kiro/ChoaTlg5/wpYih8KWHp+eduPCjiLLnnI7nnI/nnbvwpJqX8KOegeOpnvCko7DnkLjnkpvjur/wpKq68KSrh+SDiPCkqpbwpoau6YyH8KWWgeegnueijeeiiOejkuePkOelmfCnnYHwpZuj5ISO56ab6JKW56al5qit8KO7uueouuentOSFrvChm6bkhLLpiLXnp7HwoLWM8KSmjPCgipnwo7a68KGdruOWl+WVq+OVsOOaqvCgh5TwoLCN56ui5amZ8KKbtfClqq/wpaqc5aiN8KCJm+ejsOWoqvClr4bnq77kh7nnsZ3nsa3kiJHwpa6z8KW6vPCluqbns43wpKe58KGesOeyjuexvOeyruaqsue3nOe4h+e3k+e9jvCmiaFcIl0sXG5bXCI5NTQwXCIsXCLwpoWc8KetiOe2l/CluoLkiarwpq218KCkluaflvCggY7wo5eP5Z+E8KaQkvCmj7jwpKWi57+d56yn8KCgrPClq6nwpbWD56yM8KW4jumnpuiZhempo+aonPCjkL/jp6LwpKe38KaWremon/CmlqDokoDwp4Sn8KazkeSTquiEt+SQguiDhuiEieiFgvCmnrTpo4PwpqmC6Imi6Iml8KapkeiRk/CmtqfomJDwp4ib5aqG5IW/8KGhgOWsq/ChoqHlq6TwoaOY6Jqg8K+mvPCjto/ooK3wp5Ci5aiCXCJdLFxuW1wiOTVhMVwiLFwi6KGu5L2F6KKH6KK/6KOm6KWl6KWN8KWag+illPCnnoXwp56E8KivtfCor5nwqK6c8KinueO6reiSo+SbteSbj+OfsuioveionPCpkYjlvY3piKvwpIqE5peU54Sp54OE8KGhhem1reiyn+izqfCnt5zlpprnn4Plp7Dkja7jm5TouKrouqfwpLCJ6Lyw6L2K5Iu05rGY5r678KKMoeSim+a9uea6i/Chn5rpr6njmrXwpKSv6YK76YKX5ZWx5KSG6Ya76ZCE8Kipi+SBovCoq7zpkKfwqLCd8Kiwu+iTpeioq+mWmemWp+mWl+mWlvCotLTnkYXju4LwpKO/8KSpgvCkj6rju6fwo4il6ZqP8Ki7p/CouabwqLml47uM8KSnrfCkqbjwo7+u55CS55Gr47u86Z2B8KmCsFwiXSxcbltcIjk2NDBcIixcIuahh+SonfCpgpPwpZ+f6Z2d6Y2o8KimifCosKbwqKyv8KaOvumKuuWskeitqeSkvOePufCkiJvpnpvpnbHppLjwoLym5beB8KivhfCkqrLpoJ/wqZOa6Yu28KmXl+mHpeSTgPCorZDwpKmn8KitpOmjnPCoqYXjvIDpiKrkpKXokJTppLvppY3wp6yG47e96aab5K2v6aaq6amc8KitpfClo4jmqo/pqKHlq77pqK/wqaOx5K6Q8KmliOmmvOSuveSul+mNveWhsvChjILloKLwpKa4XCJdLFxuW1wiOTZhMVwiLFwi8KGTqOehhPCinJ/wo7a45qOF47W96ZGY46Sn5oWQ8KKegfCipavmhIfpsY/psZPpsbvpsLXpsJDprb/pr4/wqbit6a6f8KqHtfCqg77ptKHksq7wpISE6biY5LKw6bSM8KqGtPCqg63wqoOz8Kmkr+m2peiSvfCmuJLwpr+f8KauguiXvOSUs/CmtqTwprqE8Ka3sOiQoOiXrvCmuIDwo5+X8KaBpOenovCjlpzwo5mA5KSt8KSnnuO1oumPm+mKvumNiPCgir/nornpibfpkY3kv6TjkYDpgaTwpZWd56C956GU56K256GL8KGdl/Cjh4nwpKWB45qa5L2y5r+a5r+Z54Ce54Ce5ZCU8KSGteWeu+Wjs+Weium0luWfl+eEtOOSr/Ckhqznh6vwprGA8KS+l+WsqPChnrXwqKmJXCJdLFxuW1wiOTc0MFwiLFwi5oSM5auO5aiL5Iq88KSSiOOcrOStu/Cop7zpjrvpjrjwoaOW8KC8neiRsvCms4DwoZCT8KSLuvCisKbwpI+B5aaU8KO2t/CmnYHntqjwpoWb8KaCpPCkprnwpKaL8KinuumLpeePouO7qeeStPCoraPwoaKf47uh8KSqs+armOePs+ePu+O7lvCkqL7wpKqU8KGfmfCkqabwoI6n8KGQpPCkp6XnkYjwpKSW54Kl8KSltumKhOePpumNn/Cgk77pjLHwqKuO8KiolumOhvCor6fwpZeV5KS18KiqgueFq1wiXSxcbltcIjk3YTFcIixcIvCkpYPwoLO/5Zqk8KCYmvCgr6vwoLK45ZSC56eE8KGfuue3vvChm4LwpKmQ8KGhkuSUrumQgeOcivCoq4DwpKat5aaw8KGiv/ChooPwp5KE5aqh45ui8KO1m+OasOmJn+WpufCoqoHwoaGi6Y2047ON8KCqtOSqluOmiuWDtOO1qeO1jPChjpznhbXki7vwqIiY5riP8KmDpOSTq+a1l/CnuY/ngafmsq/js5bwo7+t8KO4rea4gua8jOO1r/Cgj7XnlZHjmrzjk4jkmoDju5rkobHlp4Tpia7kpL7ovYHwqLCc8KavgOWgkuWfiOOblvChkZLng77wpI2i8KSpsfCiv6PwoYqw8KKOveaiuealp/Chjpjwo5Ol8KevtPCjm5/wqKqD8KOflvCjj7rwpLKf5qia8KOarfCmsrfokL7kk5/kk45cIl0sXG5bXCI5ODQwXCIsXCLwprSm8Ka1kfCmsoLwpr+e5ryX8KeEieiMvfChnLroj63wprKA8KeBk/Chn5vlponlqoLwoZ6z5amh5amx8KGkhfCkh7zjnK3lp6/woZy845uH54aO6Y6Q5pqa8KSKpeWpruWoq/CkipPmqKvwo7u58KectvCkkZvwpIuK54Sd8KSJmfCop6HkvrDwprSo5bOC8KSTjvCnuY3wpI695qiM8KSJlvChjITngqbnhLPwpI+p47al5rOf8K+gpfCkqY/nuaXlp6vltK/jt7PlvZzwpKmd8KGfn+e2pOiQplwiXSxcbltcIjk4YTFcIixcIuWShfCjq7rwo4yA8KCIlOWdvvCgo5XwoJiZ47+l8KG+nvCqirbngIPwqYWb5bWw546P57OT8KipmfCpkKDkv4jnv6fni43njJDwp6u054y454y58KWbtueNgeeNiOO6qfCnrJjpgaznh7XwpKOy54+h6Ie247uK55yM47uR5rKi5Zu955CZ55Ce55Cf47ui47uw47u047u655OT47yO472T55WC55Wt55Wy55aN472855eI55ec47+A55mN47+X55m047+c55m68KS9nOeGiOWYo+imgOWhqeSAneedg+SAueadoeSBheOXm+eemOSBquSBr+Wxnueevuefi+WjsuegmOeCueegnOSCqOegueehh+ehkeehpuiRiPCllLXnpLPmoIPnpLLkhINcIl0sXG5bXCI5OTQwXCIsXCLkhInnppHnppnovrvnqIbovrzkhafnqpHkhrLnqrzoibnkh4Tnq4/nq5vkh4/kuKHnraLnraznrbvnsJLnsJvkiaDkibrnsbvnspzkioznsrjkipTns63ovpPng4DwoLOP57eP57eU57eQ57e9576u576054qf5I6X6ICg6ICl56y56ICu6ICx6IGU47eM5Z6054Kg6IK36IOp5I+t6ISM54yq6ISO6ISS55Wg6ISU5JCB46y56IWW6IWZ6IWaXCJdLFxuW1wiOTlhMVwiLFwi5JCT5aC66IW86IaE5JCl6IaT5JCt6Ial5Z+v6IeB6Iek6ImU5JKP6Iqm6Im26IuK6IuY6Iu/5JKw6I2X6Zmp5qaK6JCF54O16JGk5oOj6JKI5JSE6JK+6JOh6JO46JSQ6JS46JWS5JS76JWv6JWw6Jeg5JW36Jmy6JqS6Jqy6Juv6ZmF6J6L5JiG5JiX6KKu6KO/6KSk6KWH6KaR8Kelp+ioqeiouOiqlOiqtOixkeizlOizsui0nOSemOWhn+i3g+SfreS7rui4uuWXmOWdlOi5seWXtei6sOSgt+i7jui7oui7pOi7rei7sui+t+i/gei/iui/jOmAs+mnhOSiremjoOmIk+SknumIqOmJmOmJq+mKsemKrumKv1wiXSxcbltcIjlhNDBcIixcIumLo+mLq+mLs+mLtOmLvemNg+mOhOmOreSlheSlkem6v+mQl+WMgemQnemQremQvuSlqumRlOmRuemUremWouSmp+mXtOmYs+SnpeaeoOSopOmdgOSotemesumfguWZlOSrpOaDqOmiueSsmemjseWhhOmkjumkmeWGtOmknOmkt+mlgumlnemlouStsOmnheSunemovOmsj+eqg+mtqemugemvnemvsemvtOSxremwoOOdr/Chr4LptYnpsLpcIl0sXG5bXCI5YWExXCIsXCLpu77lmZDptpPptr3pt4Dpt7zpk7bovrbpubvpuqzpurHpur3pu4bpk5zpu6Lpu7Hpu7jnq4jpvYTwoIKU8KCKt/CgjqDmpJrpk4PlpqzwoJOX5aGA6ZOB45658KCXlfCgmJXwoJm28KGauuWdl+eFs/Cgq4LwoKuN8KCuv+WRqvCvoLvwoK+L5ZKe8KCvu/CgsLvwoLGT8KCxpfCgsbzmg6fwoLKN5Zm68KCytfCgs53woLOt8KC1r/CgtrLwoLeI5qWV6bCv6J6l8KC4hPCguI7woLuX8KC+kPCgvK3woLmz5bCg8KC+vOW4i/ChgZzwoYGP8KGBtuacnvChgbvwoYKI8KGCluOZh/Chgr/woYOT8KGEr/ChhLvljaTokq3woYuj8KGNtfChjLboroHwoZW38KGYmfChn4PwoZ+H5Lm454K78KGgrfChpapcIl0sXG5bXCI5YjQwXCIsXCLwoait8KGphfChsKrwobGw8KGyrPChu4jmi4PwobuV8KG8leeGmOahlfCigYXmp6njm4jwoom88KKPl/Cij7rwopyq8KKhsfCipY/oi73woqWn8KKmk/Ciq5XopqXwoquo6L6g8KKsjumeuPCirL/poYfpqr3worGMXCJdLFxuW1wiOWI2MlwiLFwi8KKyiPCisrfwpa+o8KK0iPCitJLwora38KK2lfCiuYLwor208KK/jPCjgLPwo4Gm8KOMn/Cjj57lvrHmmYjmmr/wp6m58KOVp/Cjl7PniIHwpKa655+X8KOYmvCjnJbnuofwoI2G5aK15pyOXCJdLFxuW1wiOWJhMVwiLFwi5qSY8KOqp/CnmZfwpb+i8KO4kfCjurnwp5e+8KKCmuSjkOSquPCkhJnwqKqa8KSLrvCkjI3wpIC78KSMtPCkjpbwpKmF8KCXiuWHkvCgmJHlpp/wobqo466+8KOzv/CkkITwpJOW5Z6I8KSZtOOmm/CknK/wqJeo8KmnieOdovCih4PorZ7wqK2O6aeW8KSgkvCko7vwpKiV54iJ8KSrgPCgsbjlpaXwpLql8KS+hvCgnbnou5rwpYCs5YqP5Zy/54Wx8KWKmfClkJnwo72K8KSqp+WWvPClkYbwpZGu8KatkumHlOORs/CllL/wp5iy8KWVnuScmPCllaLwpZWm8KWfh/CkpL/wpaGd5YGm45O78KOPjOaDnvClpIPknbzwqKWI8KWqrvClronwpbCG8KG2kOWeoeeFkea+tvCmhILwp7CS6YGW8KaGsvCkvproraLwppCC8KaRilwiXSxcbltcIjljNDBcIixcIuW1m/Cmr7fovLbwppKE8KGknOirqvCkp7bwppKI8KO/r/CmlJLkr4Dwppa/8KaatfCinJvpkaXwpZ+h5oaV5ain8K+jjeS+u+WaufCklKHwppu85Lmq8KSktOmZlua2j/Cmsr3jmJjopbfwpp6Z8KahrvCmkJHwpqGe54ef8Kajh+etgvCpg4DwoKiR8KakpumEhPCmpLnnqYXpt7Dwpqe66aim8KaoreOZn/CmkanwoICh56aD8KaotPCmrZvltKzwo5SZ6I+P8KauneSbkPCmsqTnlLvooaXwprau5aK2XCJdLFxuW1wiOWNhMVwiLFwi45yc8KKWjfCngYvwp4eN47GU8KeKgPCnioXpioHwooW68KeKi+mMsPCni6bwpKeQ5rC56ZKf8KeRkPCgu7jooKfoo7XwoqSm8KiRs/ChnrHmurjwpKiq8KGgoOOmpOOaueWwkOeno+SUv+aatvCpsq3wqaKk6KWD8KefjPCnoZjlm5bkg5/woZiK46ah8KOcr/Cog6jwoY+F54at6I2m8KennfCphqjlqafksrfwp4Kv8Kimq/Cnp73wp6iK8Kesi/CntabwpIW6562D56W+8KiAiea+tfCqi5/mqIPwqIyY5Y6i8Ka4h+mOv+agtumdnfCoha/wqICj8KamtfChj63wo4iv8KiBiOW2hfCosLDwqIKD5ZyV6aCj8KilieW2q/Ckpojmlr7mp5Xlj5LwpKql8KO+geOwkeactvCogpDwqIO08KiErvChvqHwqIWPXCJdLFxuW1wiOWQ0MFwiLFwi8KiGifCohq/wqIia8KiMhvCojK/wqI6K45eK8KiRqPComqrko7rmj6bwqKWW56CI6YmV8KimuOSPsvCop6fkj5/wqKeo8KithvCor5Tlp7jwqLCJ6LyL8Ki/hfCpg6znrZHwqYSQ8KmEvOO3t/CphZ7wpKuK6L+Q54qP5ZqL8KmTp/Cpl6nwqZaw8KmWuPCpnLLwqaOR8KmlifCpparwqaeD8KmoqPCprI7wqbWa8Km2m+e6n/Cpu7jwqbyj5LKk6ZWH8KqKk+eGovCqi7/ktpHpgJLwqpeL5Lac8KCynOi+vuWXgVwiXSxcbltcIjlkYTFcIixcIui+uvCikrDovrnwpKqT5JSJ57m/5r2W5qqx5Luq45Ok8KisrPCnop3jnLrouoDwoZ+18KiApPCorazwqK6Z8KeovvCmmq/jt6vwp5mV8KOyt/ClmLXwpaWW5Lqa8KW6gfCmiZjlmr/woLmt6LiO5a2t8KO6iPCksp7mj57mi5DwoZ+28KGhu+aUsOWYrfClsYrlkJrwpYyR47eG8Km2mOSxveWYouWYnue9ifClu5jlpbXwo7WA6J2w5Lic8KC/qvCgtYnwo5q66ISX6bWe6LSY55i76bGF55mO55656Y2F5ZCy6IWI6Iu35Zil6ISy6JCY6IK95Zeq56Wi5ZmD5ZCW8KC6neOXjuWYheWXseabsfCoi6LjmK3nlLTll7DllrrlkpfllbLwoLGB8KCyluW7kPClhYjwoLm28KKxolwiXSxcbltcIjllNDBcIixcIvCguqLpuqvntZrll57woYG15oqd6Z2t5ZKU6LON54e26YW25o+85o655o++5ZWp8KKtg+mxsvCiurPlhprjk5/woLan5Yan5ZGN5ZSe5ZST55mm6Lit8KaiiueWseiCtuighOiehuijh+iGtuiQnPChg4Hkk6znjITwpJyG5a6Q6IyL8Kaik+WZu/Cim7Twp7Sv8KSGo/CntbPwpruQ8KeKtumFsPChh5npiIjwo7O88KqaqfCguqzwoLu554mm8KGyouSdjvCkv4Lwp7+58KC/q+SDulwiXSxcbltcIjllYTFcIixcIumxneaUn/CitqDko7PwpJ+g8Km1vPCgv6zwoLiK5oGi8KeWo/Cgv61cIl0sXG5bXCI5ZWFkXCIsXCLwpoGI8KGGh+eGo+e6jum1kOS4muS4hOOVt+WsjeaysuWNp+OarOOnnOWNveOapfCkmJjloprwpK2u6Iit5ZGL5Z6q8KWqlfCgpblcIl0sXG5bXCI5ZWM1XCIsXCLjqZLwopGl54208Km6rOS0iemvrfCjs77wqbyw5LGb8KS+qfCplp7wqb+e6JGc8KO2tvCnirLwpp6z8KOcoOaMrue0pfCju7fwo7is46iq6YCI5YuM47m045m65Jep8KCSjueZgOWrsPCgurbnobrwp7yu5aKn5IK/5Zm86a6L5bW055mU8KqQtOm6heSzoeeXueOfu+aEmfCjg5rwpI+yXCJdLFxuW1wiOWVmNVwiLFwi5Zmd8KGKqeWep/CkpaPwqbiG5Yi08KeCruOWreaxium1vFwiXSxcbltcIjlmNDBcIixcIuexlumsueWfnvChnazlsZPmk5PwqZOQ8KaMtfCnhaTomq3woLSo8Ka0ovCkq6LwoLWxXCJdLFxuW1wiOWY0ZlwiLFwi5Ye+8KG8j+W2jumcg/Cht5HpuoHpgYznrJ/prILls5HnrqPmiajmjLXpq7/nr4/prKrnsb7prK7nsYLnsobpsJXnr7zprInpvJfpsJvwpKS+6b2a5ZWz5a+D5L+96bqY5L+y5Ymg47iG5YuR5Z2n5YGW5aa35biS6Z+I6bar6L2c5ZGp6Z606aWA6Z665Yys5oSwXCJdLFxuW1wiOWZhMVwiLFwi5qSs5Y+a6bCK6bSC5LC76ZmB5qaA5YKm55WG8KGdremnmuWJs1wiXSxcbltcIjlmYWVcIixcIumFmemagemFnFwiXSxcbltcIjlmYjJcIixcIumFkfCoupfmjb/wprSj5quK5ZiR6YaO55W65oqF8KCPvOeNj+exsPClsKHwo7O9XCJdLFxuW1wiOWZjMVwiLFwi8KSkmeeblumuneS4qvCgs5Tojr7ooYJcIl0sXG5bXCI5ZmM5XCIsXCLlsYrmp4Dlg63lnbrliJ/lt7Xku47msLHwoIey5Ly55ZKc5ZOa5Yqa6LaC45e+5byM45ezXCJdLFxuW1wiOWZkYlwiLFwi5q2S6YW86b6l6a6X6aCu6aK06aq66bqo6bqE54W656yUXCJdLFxuW1wiOWZlN1wiLFwi5q+66KCY5724XCJdLFxuW1wiOWZlYlwiLFwi5Zig8KqZiui5t+m9k1wiXSxcbltcIjlmZjBcIixcIui3lOi5j+m4nOi4geaKgvCojb3ouKjoubXnq5PwpKm356i+56OY5rOq6Kmn55iHXCJdLFxuW1wiYTA0MFwiLFwi8Kipmum8puazjuiflueXg/CqirLnoZPwr6GA6LSM54ui542x6Kyt54yC55Ox6LOr8KSqu+iYr+W+uuiioOSSt1wiXSxcbltcImEwNTVcIixcIvChoLvwpriFXCJdLFxuW1wiYTA1OFwiLFwi6Km+8KKUm1wiXSxcbltcImEwNWJcIixcIuaDveeZp+mrl+m1hOmNrumuj+iftVwiXSxcbltcImEwNjNcIixcIuigj+izt+eMrOmcoemusOOXlueKsuSwh+exkemlivCmhZnmhZnksITpupbmhb1cIl0sXG5bXCJhMDczXCIsXCLlnZ/mha/miqbmiLnmi47jqZzmh6Lljqrwo4+15o2k5qCC45eSXCJdLFxuW1wiYTBhMVwiLFwi5bWX8Kivgui/mvCouLlcIl0sXG5bXCJhMGE2XCIsXCLlg5nwobWG56SG5Yyy6Zi48KC8u+SBpVwiXSxcbltcImEwYWVcIixcIuefvlwiXSxcbltcImEwYjBcIixcIuezgvClvJrns5rnqK3ogabogaPntY3nlIXnk7LoppToiJrmnIzogaLwp5KG6IGb55Ow6ISD55yk6KaJ8KafjOeVk/Cmu5Honqnon47oh4jonozoqYnosq3orYPnnKvnk7jok5rjmLXmprLotqZcIl0sXG5bXCJhMGQ0XCIsXCLopqnnkajmtrnon4HwpICR55On47eb54W25oKk5oac47OR54Wi5oG3XCJdLFxuW1wiYTBlMlwiLFwi572x8KisreeJkOaDqeStvuWIoOOwmPCjs4fwpbuX8KeZlvCllLHwoaWE8KGLvvCppIPwprec8KeCreWzgfCmhq3wqKiP8KOZt/Cgg67wpqGG8KS8juSVouWsn/CmjYzpvZDpuqbwpomrXCJdLFxuW1wiYTNjMFwiLFwi4pCAXCIsMzEsXCLikKFcIl0sXG5bXCJjNmExXCIsXCLikaBcIiw5LFwi4pG0XCIsOSxcIuKFsFwiLDksXCLkuLbkuL/kuoXkuqDlhoLlhpblhqvli7nljLjljanljrblpIrlroDlt5vivLPlub/lu7TlvZDlvaHmlLTml6DnlpLnmbbovrXpmrbCqMuG44O944O+44Kd44Ke44CD5Lud44CF44CG44CH44O877y777y94py944GBXCIsMjNdLFxuW1wiYzc0MFwiLFwi44GZXCIsNTgsXCLjgqHjgqLjgqPjgqRcIl0sXG5bXCJjN2ExXCIsXCLjgqVcIiw4MSxcItCQXCIsNSxcItCB0JZcIiw0XSxcbltcImM4NDBcIixcItCbXCIsMjYsXCLRkdC2XCIsMjUsXCLih6fihrjihrnjh4/woIOM5Lma8KCCiuWIguSSkVwiXSxcbltcImM4YTFcIixcIum+sOWGiOm+sfCnmIdcIl0sXG5bXCJjOGNkXCIsXCLvv6Lvv6TvvIfvvILjiLHihJbihKHjgpvjgpziuoDiuoTiuobiuofiuojiuoriuoziuo3iupXiupziup3iuqXiuqfiuqriuqziuq7iurbiurziur7iu4biu4riu4ziu43iu4/iu5biu5fiu57iu6NcIl0sXG5bXCJjOGY1XCIsXCLKg8mQyZvJlMm1xZPDuMWLyorJqlwiXSxcbltcImY5ZmVcIixcIu+/rVwiXSxcbltcImZhNDBcIixcIvCglYfpi5vwoJef8KO/heiVjOSKteePr+WGteOZifCkpYLwqKek6Y2E8KGnm+iLrvCjs4jnoLzmnYTmi5/wpKSz8KimqvCgiqDwpq6z8KGMheS+q/Cik63lgIjwprSp8KeqhPCjmIDwpKqx8KKUk+WAqfCgjb7lvqTwoI6A8KCNh+a7m/CgkJ/lgb3lhIHjkbrlhI7poazjnYPokJbwpKak8KCSh+WFoPCjjrTlharwoK+/8KKDvPCgi6XwopSw8KCWjvCjiLPwoaaD5a6C6J298KCWs/CjspnlhrLlhrhcIl0sXG5bXCJmYWExXCIsXCLptLTlh4nlh4/lh5Hjs5zlh5PwpKqm5Yaz5Yei5Y2C5Yet6I+N5qS+8KOcreW9u+WIi+WIpuWIvOWKteWJl+WKlOWKueWLheewleiVguWLoOiYjfCmrJPljIXwqKue5ZWJ5ruZ8KO+gPCgpZTwo7+s5Yyz5Y2E8KCvouazi/ChnKbmoJvnj5XmgYrjuqrjo4zwoZuo54ed5JKi5Y2t5Y208Kiaq+WNvuWNv/ChlpbwoZiT55+m5Y6T8Kiqm+WOoOWOq+WOrueOp/ClnbLjvZnnjpzlj4Hlj4XmsYnkuYnln77lj5njqqvwoK6P5Y+g8KO/q/CitqPlj7bwoLG35ZCT54G55ZSr5pmX5rWb5ZGt8Katk/CgtbTllZ3lko/lkqTknqbwoZyN8KC7neO2tPCgtY1cIl0sXG5bXCJmYjQwXCIsXCLwqKa88KKamOWVh+SzreWQr+eQl+WWhuWWqeWYhfCho5fwpIC65JWS8KSQteaas/ChgrTlmLfmm43wo4qK5pqk5pqt5ZmN5ZmP56Ox5Zux6Z6H5Y++5ZyA5Zuv5Zut8KitpuOYo/ChiY/lnYbwpIal5rGu54KL5Z2C45qx8KaxvuWfpvChkJbloIPwoZGU8KSNo+WgpvCkr7XloZzloqrjlaHlo6Dlo5zwoYi85aO75a+/5Z2D8KqFkPCkibjpj5PjlqHlpJ/moqbjm4PmuZlcIl0sXG5bXCJmYmExXCIsXCLwoZi+5aik5ZWT8KGakuiUheWnifCgtY7wprKB8Ka0qvChn5zlp5nwoZ+78KGesvCmtqbmtbHwoaCo8KGbleWnufCmuYXlqqvlqaPjm6bwpKap5am345yI5aqW55Gl5auT8Ka+ofCilZTjtoXwoaSR45yy8KGauOW6g+WLkOWttuaWiOWtvPCnqI7kgITkoZ3woIiE5a+V5oWg8KGotPClp4zwoJal5a+z5a6d5LSQ5bCF8KGthOWwk+ePjuWwlPChsqXwpqyo5bGJ5KOd5bKF5bOp5bOv5baL8KG3ufChuLfltJDltJjltYbwobqk5bK65beX6Iu846Ct8KSkgfCigYnwooWz6IqH46C246+C5biu5qqK5bm15bm68KSSvPCgs5Pljqbkurflu5DljqjwoZ2x5biJ5bu08KiSglwiXSxcbltcImZjNDBcIixcIuW7ueW7u+OioOW7vOagvumQm+W8jfCgh4Hwr6KU46ue5KKu8KGMuuW8uvCmoojwoo+Q5b2Y8KKRseW9o+mevfCmua7lvbLpjYDwqKi25b6n5ba247Wf8KWJkPChvarwp4O48KKZqOmHlvCgip7wqKip5oCx5pqF8KGht+Olo+O3h+OYueWekPCinrTnpbHjuYDmgp7mgqTmgrPwpKaC8KSmj/CnqZPnkqTlg6HlqqDmhaTokKTmhYLwr6Km8Ka7kuaGgeWHtPCgmZbmhoflrqrwo763XCJdLFxuW1wiZmNhMVwiLFwi8KKhn+aHk/Corp3wqaWd5oeQ46Sy8KKmgPCio4HmgKPmhZzmlJ7mjovwoISY5ouF8KGdsOaLlfCiuI3mjazwpKef46iX5pC45o+48KGOjvChn7zmkpDmvorwori26aCU8KSCjPClnJ3mk6Hmk6XpkbvjqabmkLrjqZfmlY3mvJbwpKio8KSoo+aWheaVreaVn/Cjgb7mlrXwpKWA5Ky35peR5IOY8KGgqeaXoOaXo+W/n/CjkIDmmJjwo4e38KOHuOaZhPCjhqTwo4al5pmL8KC5teaZp/Clh6bmmbPmmbTwobi98KOIsfCol7Two4eI8KWMk+efhfCio7fppqTmnILwpI6c8KSooeOsq+anuvCjn4LmnZ7mnafmnaLwpIeN8KmDreafl+STqeagoua5kOmIvOaggfCjj6bwprag5qGdXCJdLFxuW1wiZmQ0MFwiLFwi8KORr+anoeaoi/Coq5/mpbPmo4Pwo5eN5qSB5qSA47Sy46iB8KOYvOOugOaerOalofCoqYrki7zmpLbmppjjrqHwoI+J6I2j5YKQ5qe58KOZmfCihKrmqYXwo5yD5qqd46+z5p6x5quI8KmGnOOwjeasnfCgpKPmg57mrLXmrbTwop+N5rq18KOrm/CgjrXwoaWY452A5ZCh8KOtmuavofCju7zmr5zmsLfwopKL8KSjsfCmrZHmsZroiKbmsbnwo7a85JOF8KO2vfCkhqTwpKSM8KSkgFwiXSxcbltcImZkYTFcIixcIvCjs4njm6Xjs6vwoLSy6a6D8KOHufCikpHnvo/moLfwprSl8Ka2ofCmt6vmtpbmtZzmubzmvITwpKW/8KSChfCmubLolLPwpr205YeH5rKc5rid6JCu8Kisoea4r/CjuK/nkZPwo76C56eM5rmP5aqR8KOBi+a/uOOcjea+nfCjuLDmu7rwoZKX8KSAveSVlemPsOa9hOa9nOO1jua9tPCphbDjtLvmvp/wpIWE5r+T8KSCkfCkhZXwpIC58KO/sPCjvrTwpIS/5Yef8KSFlvCkhZfwpIWA8KaHneeBi+eBvueCp+eCgeeDjOeDleeDlueDn+SEhOO3qOeGtOeGlvCkibfnhKvnhYXlqojnhYrnha7lspzwpI2l54WP6Y2i8KSLgeeErPCkkZrwpKin8KSooueGuvCor6jngr3niI5cIl0sXG5bXCJmZTQwXCIsXCLpkYLniJXlpJHpkYPniKTpjYHwpZiF54iu54mA8KSltOaiveeJleeJl+O5lfCjgYTmoI3mvL3nioLnjKrnjKvwpKCj8Kigq+SjrfCooITnjKjnjK7nj4/njqrwoLC68KaoruePieeRifCkh6LwoZun8KSopOaYo+ObhfCkprfwpKaN8KSnu+ePt+eQleakg/CkqKbnkLnwoJeD47uX55Gc8KKireeRoPCourLnkYfnj6TnkbbojrnnkazjnLDnkbTpj7HmqKznkoLkpZPwpKqMXCJdLFxuW1wiZmVhMVwiLFwi8KSFn/CkqbnwqK6P5a2G8Kiwg/Chop7nk4jwoaaI55SO55Op55Se8Ki7mfChqYvlr5fwqLqs6Y6F55WN55WK55Wn55Wu8KS+guO8hPCktJPnlo7nkZ3nlp7nlrTnmILnmKznmZHnmY/nma/nmbbwpo+155qQ6Iev45+48KakkfCmpI7nmqHnmqXnmrfnm4zwpr6f6JGi8KWCnfClhb3wobic55ye55ym552A5pKv8KWIoOedmPCjiqznnq/wqKWk8KilqPChm4Hnn7TnoInwoY228KSokuajiueir+ejh+ejk+mapeekrvCll6Dno5fnpLTnorHwp5iM6L646KKE8Kisq/CmgoPwopic56aG6KSA5qSC56aA8KWhl+emnfCnrLnnpLznpqnmuKrwp4Sm47qo56eG8KmEjeenlFwiXVxuXVxuIiwibW9kdWxlLmV4cG9ydHM9W1xuW1wiMFwiLFwiXFx1MDAwMFwiLDEyNyxcIuKCrFwiXSxcbltcIjgxNDBcIixcIuS4guS4hOS4heS4huS4j+S4kuS4l+S4n+S4oOS4oeS4o+S4puS4qeS4ruS4r+S4seS4s+S4teS4t+S4vOS5gOS5geS5guS5hOS5huS5iuS5keS5leS5l+S5muS5m+S5ouS5o+S5pOS5peS5p+S5qOS5qlwiLDUsXCLkubLkubRcIiw5LFwi5Lm/XCIsNixcIuS6h+S6ilwiXSxcbltcIjgxODBcIixcIuS6kOS6luS6l+S6meS6nOS6neS6nuS6o+S6quS6r+S6sOS6seS6tOS6tuS6t+S6uOS6ueS6vOS6veS6vuS7iOS7jOS7j+S7kOS7kuS7muS7m+S7nOS7oOS7ouS7puS7p+S7qeS7reS7ruS7r+S7seS7tOS7uOS7ueS7uuS7vOS7vuS8gOS8glwiLDYsXCLkvIvkvIzkvJJcIiw0LFwi5Lyc5Lyd5Lyh5Lyj5Lyo5Lyp5Lys5Lyt5Lyu5Lyx5Lyz5Ly15Ly35Ly55Ly75Ly+XCIsNCxcIuS9hOS9heS9h1wiLDUsXCLkvZLkvZTkvZbkvaHkvaLkvabkvajkvarkvavkva3kva7kvbHkvbLkvbXkvbfkvbjkvbnkvbrkvb3kvoDkvoHkvoLkvoXkvobkvofkvorkvozkvo7kvpDkvpLkvpPkvpXkvpbkvpjkvpnkvprkvpzkvp7kvp/kvqHkvqJcIl0sXG5bXCI4MjQwXCIsXCLkvqTkvqvkvq3kvrBcIiw0LFwi5L62XCIsOCxcIuS/gOS/geS/guS/huS/h+S/iOS/ieS/i+S/jOS/jeS/klwiLDQsXCLkv5nkv5vkv6Dkv6Lkv6Tkv6Xkv6fkv6vkv6zkv7Dkv7Lkv7Tkv7Xkv7bkv7fkv7nkv7vkv7zkv73kv79cIiwxMV0sXG5bXCI4MjgwXCIsXCLlgIvlgI7lgJDlgJHlgJPlgJXlgJblgJflgJvlgJ3lgJ7lgKDlgKLlgKPlgKTlgKflgKvlgK9cIiwxMCxcIuWAu+WAveWAv+WBgOWBgeWBguWBhOWBheWBhuWBieWBiuWBi+WBjeWBkFwiLDQsXCLlgZblgZflgZjlgZnlgZvlgZ1cIiw3LFwi5YGmXCIsNSxcIuWBrVwiLDgsXCLlgbjlgbnlgbrlgbzlgb3lgoHlgoLlgoPlgoTlgoblgoflgonlgorlgovlgozlgo5cIiwyMCxcIuWCpOWCpuWCquWCq+WCrVwiLDQsXCLlgrNcIiw2LFwi5YK8XCJdLFxuW1wiODM0MFwiLFwi5YK9XCIsMTcsXCLlg5BcIiw1LFwi5YOX5YOY5YOZ5YObXCIsMTAsXCLlg6jlg6nlg6rlg6vlg6/lg7Dlg7Hlg7Llg7Tlg7ZcIiw0LFwi5YO8XCIsOSxcIuWEiFwiXSxcbltcIjgzODBcIixcIuWEieWEiuWEjFwiLDUsXCLlhJNcIiwxMyxcIuWEolwiLDI4LFwi5YWC5YWH5YWK5YWM5YWO5YWP5YWQ5YWS5YWT5YWX5YWY5YWZ5YWb5YWdXCIsNCxcIuWFo+WFpOWFpuWFp+WFqeWFquWFr+WFsuWFuuWFvuWFv+WGg+WGhOWGhuWGh+WGiuWGi+WGjuWGj+WGkOWGkeWGk+WGlOWGmOWGmuWGneWGnuWGn+WGoeWGo+WGplwiLDQsXCLlhq3lhq7lhrTlhrjlhrnlhrrlhr7lhr/lh4Hlh4Llh4Plh4Xlh4jlh4rlh43lh47lh5Dlh5JcIiw1XSxcbltcIjg0NDBcIixcIuWHmOWHmeWHmuWHnOWHnuWHn+WHouWHo+WHpVwiLDUsXCLlh6zlh67lh7Hlh7Llh7Tlh7flh77liITliIXliInliIvliIzliI/liJDliJPliJTliJXliJzliJ7liJ/liKHliKLliKPliKXliKbliKfliKrliKzliK/liLHliLLliLTliLXliLzliL7liYRcIiw1LFwi5YmL5YmO5YmP5YmS5YmT5YmV5YmX5YmYXCJdLFxuW1wiODQ4MFwiLFwi5YmZ5Yma5Ymb5Ymd5Ymf5Ymg5Ymi5Ymj5Ymk5Ymm5Ymo5Ymr5Yms5Ymt5Ymu5Ymw5Ymx5YmzXCIsOSxcIuWJvuWKgOWKg1wiLDQsXCLliolcIiw2LFwi5YqR5YqS5YqUXCIsNixcIuWKnOWKpOWKpeWKpuWKp+WKruWKr+WKsOWKtFwiLDksXCLli4Dli4Hli4Lli4Tli4Xli4bli4jli4rli4zli43li47li4/li5Hli5Pli5Tli5Xli5fli5lcIiw1LFwi5Yug5Yuh5Yui5Yuj5YulXCIsMTAsXCLli7FcIiw3LFwi5Yu75Yu85Yu95YyB5YyC5YyD5YyE5YyH5YyJ5YyK5YyL5YyM5YyOXCJdLFxuW1wiODU0MFwiLFwi5YyR5YyS5YyT5YyU5YyY5Yyb5Yyc5Yye5Yyf5Yyi5Yyk5Yyl5Yyn5Yyo5Yyp5Yyr5Yys5Yyt5YyvXCIsOSxcIuWMvOWMveWNgOWNguWNhOWNhuWNi+WNjOWNjeWNkOWNlOWNmOWNmeWNm+WNneWNpeWNqOWNquWNrOWNreWNsuWNtuWNueWNu+WNvOWNveWNvuWOgOWOgeWOg+WOh+WOiOWOiuWOjuWOj1wiXSxcbltcIjg1ODBcIixcIuWOkFwiLDQsXCLljpbljpfljpnljpvljpzljp7ljqDljqHljqTljqfljqrljqvljqzljq3ljq9cIiw2LFwi5Y635Y645Y655Y665Y685Y695Y6+5Y+A5Y+DXCIsNCxcIuWPjuWPj+WPkOWPkuWPk+WPleWPmuWPnOWPneWPnuWPoeWPouWPp+WPtOWPuuWPvuWPv+WQgOWQguWQheWQh+WQi+WQlOWQmOWQmeWQmuWQnOWQouWQpOWQpeWQquWQsOWQs+WQtuWQt+WQuuWQveWQv+WRgeWRguWRhOWRheWRh+WRieWRjOWRjeWRjuWRj+WRkeWRmuWRnVwiLDQsXCLlkaPlkaXlkaflkalcIiw3LFwi5ZG05ZG55ZG65ZG+5ZG/5ZKB5ZKD5ZKF5ZKH5ZKI5ZKJ5ZKK5ZKN5ZKR5ZKT5ZKX5ZKY5ZKc5ZKe5ZKf5ZKg5ZKhXCJdLFxuW1wiODY0MFwiLFwi5ZKi5ZKl5ZKu5ZKw5ZKy5ZK15ZK25ZK35ZK55ZK65ZK85ZK+5ZOD5ZOF5ZOK5ZOL5ZOW5ZOY5ZOb5ZOgXCIsNCxcIuWTq+WTrOWTr+WTsOWTseWTtFwiLDUsXCLlk7vlk77llIDllILllIPllITllIXllIjllIpcIiw0LFwi5ZSS5ZST5ZSVXCIsNSxcIuWUnOWUneWUnuWUn+WUoeWUpeWUplwiXSxcbltcIjg2ODBcIixcIuWUqOWUqeWUq+WUreWUsuWUtOWUteWUtuWUuOWUueWUuuWUu+WUveWVgOWVguWVheWVh+WViOWVi1wiLDQsXCLllZHllZLllZPllZTllZdcIiw0LFwi5ZWd5ZWe5ZWf5ZWg5ZWi5ZWj5ZWo5ZWp5ZWr5ZWvXCIsNSxcIuWVueWVuuWVveWVv+WWheWWhuWWjOWWjeWWjuWWkOWWkuWWk+WWleWWluWWl+WWmuWWm+WWnuWWoFwiLDYsXCLllqhcIiw4LFwi5Zay5Za05Za25Za45Za65Za85Za/XCIsNCxcIuWXhuWXh+WXiOWXiuWXi+WXjuWXj+WXkOWXleWXl1wiLDQsXCLll57ll6Dll6Lll6fll6nll63ll67ll7Dll7Hll7Tll7bll7hcIiw0LFwi5Ze/5ZiC5ZiD5ZiE5ZiFXCJdLFxuW1wiODc0MFwiLFwi5ZiG5ZiH5ZiK5ZiL5ZiN5ZiQXCIsNyxcIuWYmeWYmuWYnOWYneWYoOWYoeWYouWYpeWYpuWYqOWYqeWYquWYq+WYruWYr+WYsOWYs+WYteWYt+WYuOWYuuWYvOWYveWYvuWZgFwiLDExLFwi5ZmPXCIsNCxcIuWZleWZluWZmuWZm+WZnVwiLDRdLFxuW1wiODc4MFwiLFwi5Zmj5Zml5Zmm5Zmn5Zmt5Zmu5Zmv5Zmw5Zmy5Zmz5Zm05Zm15Zm35Zm45Zm55Zm65Zm9XCIsNyxcIuWah1wiLDYsXCLlmpDlmpHlmpLlmpRcIiwxNCxcIuWapFwiLDEwLFwi5ZqwXCIsNixcIuWauOWaueWauuWau+WavVwiLDEyLFwi5ZuLXCIsOCxcIuWbleWbluWbmOWbmeWbnOWbo+WbpVwiLDUsXCLlm6zlm67lm6/lm7Llm7Plm7blm7flm7jlm7vlm7zlnIDlnIHlnILlnIXlnIflnItcIiw2XSxcbltcIjg4NDBcIixcIuWcklwiLDksXCLlnJ3lnJ7lnKDlnKHlnKLlnKTlnKXlnKblnKflnKvlnLHlnLLlnLRcIiw0LFwi5Zy85Zy95Zy/5Z2B5Z2D5Z2E5Z2F5Z2G5Z2I5Z2J5Z2L5Z2SXCIsNCxcIuWdmOWdmeWdouWdo+WdpeWdp+WdrOWdruWdsOWdseWdsuWdtOWdteWduOWdueWduuWdveWdvuWdv+WegFwiXSxcbltcIjg4ODBcIixcIuWegeWeh+WeiOWeieWeiuWejVwiLDQsXCLlnpRcIiw2LFwi5Z6c5Z6d5Z6e5Z6f5Z6l5Z6o5Z6q5Z6s5Z6v5Z6w5Z6x5Z6z5Z615Z625Z635Z65XCIsOCxcIuWfhFwiLDYsXCLln4zln43ln5Dln5Hln5Pln5bln5fln5vln5zln57ln6Hln6Lln6Pln6VcIiw3LFwi5Z+u5Z+w5Z+x5Z+y5Z+z5Z+15Z+25Z+35Z+75Z+85Z++5Z+/5aCB5aCD5aCE5aCF5aCI5aCJ5aCK5aCM5aCO5aCP5aCQ5aCS5aCT5aCU5aCW5aCX5aCY5aCa5aCb5aCc5aCd5aCf5aCi5aCj5aClXCIsNCxcIuWgq1wiLDQsXCLloLHloLLloLPloLTloLZcIiw3XSxcbltcIjg5NDBcIixcIuWgvlwiLDUsXCLloYVcIiw2LFwi5aGO5aGP5aGQ5aGS5aGT5aGV5aGW5aGX5aGZXCIsNCxcIuWhn1wiLDUsXCLloaZcIiw0LFwi5aGtXCIsMTYsXCLlob/looLlooTloobloofloojloorloovlooxcIl0sXG5bXCI4OTgwXCIsXCLloo1cIiw0LFwi5aKUXCIsNCxcIuWim+WinOWineWioFwiLDcsXCLloqpcIiwxNyxcIuWiveWivuWiv+WjgOWjguWjg+WjhOWjhlwiLDEwLFwi5aOS5aOT5aOU5aOWXCIsMTMsXCLlo6VcIiw1LFwi5aOt5aOv5aOx5aOy5aO05aO15aO35aO45aO6XCIsNyxcIuWkg+WkheWkhuWkiFwiLDQsXCLlpI7lpJDlpJHlpJLlpJPlpJflpJjlpJvlpJ3lpJ7lpKDlpKHlpKLlpKPlpKblpKjlpKzlpLDlpLLlpLPlpLXlpLblpLtcIl0sXG5bXCI4YTQwXCIsXCLlpL3lpL7lpL/lpYDlpYPlpYXlpYblpYrlpYzlpY3lpZDlpZLlpZPlpZnlpZtcIiw0LFwi5aWh5aWj5aWk5aWmXCIsMTIsXCLlpbXlpbflpbrlpbvlpbzlpb7lpb/lpoDlpoXlponlpovlpozlpo7lpo/lppDlppHlppTlppXlppjlpprlppvlppzlpp3lpp/lpqDlpqHlpqLlpqZcIl0sXG5bXCI4YTgwXCIsXCLlpqflpqzlpq3lprDlprHlprNcIiw1LFwi5aa65aa85aa95aa/XCIsNixcIuWnh+WniOWnieWnjOWnjeWnjuWnj+WnleWnluWnmeWnm+WnnlwiLDQsXCLlp6Tlp6blp6flp6nlp6rlp6vlp61cIiwxMSxcIuWnuuWnvOWnveWnvuWogOWoguWoiuWoi+WojeWojuWoj+WokOWokuWolOWoleWoluWol+WomeWomuWom+WoneWonuWooeWoouWopOWopuWop+WoqOWoqlwiLDYsXCLlqLPlqLXlqLdcIiw0LFwi5ai95ai+5ai/5amBXCIsNCxcIuWph+WpiOWpi1wiLDksXCLlqZblqZflqZjlqZnlqZtcIiw1XSxcbltcIjhiNDBcIixcIuWpoeWpo+WppOWppeWppuWpqOWpqeWpq1wiLDgsXCLlqbjlqbnlqbvlqbzlqb3lqb7lqoBcIiwxNyxcIuWqk1wiLDYsXCLlqpxcIiwxMyxcIuWqq+WqrFwiXSxcbltcIjhiODBcIixcIuWqrVwiLDQsXCLlqrTlqrblqrflqrlcIiw0LFwi5aq/5auA5auDXCIsNSxcIuWriuWri+WrjVwiLDQsXCLlq5Plq5Xlq5flq5nlq5rlq5vlq53lq57lq5/lq6Llq6Tlq6Xlq6flq6jlq6rlq6xcIiw0LFwi5auyXCIsMjIsXCLlrIpcIiwxMSxcIuWsmFwiLDI1LFwi5ayz5ay15ay25ay4XCIsNyxcIuWtgVwiLDZdLFxuW1wiOGM0MFwiLFwi5a2IXCIsNyxcIuWtkuWtluWtnuWtoOWtoeWtp+WtqOWtq+WtreWtruWtr+WtsuWttOWttuWtt+WtuOWtueWtu+WtvOWtvuWtv+WuguWuhuWuiuWujeWujuWukOWukeWukuWulOWuluWun+Wup+WuqOWuqeWurOWureWuruWur+WuseWusuWut+WuuuWuu+WuvOWvgOWvgeWvg+WviOWvieWviuWvi+WvjeWvjuWvj1wiXSxcbltcIjhjODBcIixcIuWvkeWvlFwiLDgsXCLlr6Dlr6Llr6Plr6blr6flr6lcIiw0LFwi5a+v5a+xXCIsNixcIuWvveWvvuWwgOWwguWwg+WwheWwh+WwiOWwi+WwjOWwjeWwjuWwkOWwkuWwk+Wwl+WwmeWwm+WwnuWwn+WwoOWwoeWwo+WwpuWwqOWwqeWwquWwq+WwreWwruWwr+WwsOWwsuWws+WwteWwtuWwt+Wxg+WxhOWxhuWxh+WxjOWxjeWxkuWxk+WxlOWxluWxl+WxmOWxmuWxm+WxnOWxneWxn+WxouWxpOWxp1wiLDYsXCLlsbDlsbJcIiw2LFwi5bG75bG85bG95bG+5bKA5bKDXCIsNCxcIuWyieWyiuWyi+WyjuWyj+WykuWyk+WyleWynVwiLDQsXCLlsqRcIiw0XSxcbltcIjhkNDBcIixcIuWyquWyruWyr+WysOWysuWytOWytuWyueWyuuWyu+WyvOWyvuWzgOWzguWzg+WzhVwiLDUsXCLls4xcIiw1LFwi5bOTXCIsNSxcIuWzmlwiLDYsXCLls6Lls6Pls6fls6nls6vls6zls67ls6/ls7FcIiw5LFwi5bO8XCIsNF0sXG5bXCI4ZDgwXCIsXCLltIHltITltIXltIhcIiw1LFwi5bSPXCIsNCxcIuW0leW0l+W0mOW0meW0muW0nOW0neW0n1wiLDQsXCLltKXltKjltKrltKvltKzltK9cIiw0LFwi5bS1XCIsNyxcIuW0v1wiLDcsXCLltYjltYnltY1cIiwxMCxcIuW1meW1muW1nOW1nlwiLDEwLFwi5bWq5bWt5bWu5bWw5bWx5bWy5bWz5bW1XCIsMTIsXCLltoNcIiwyMSxcIuW2muW2m+W2nOW2nuW2n+W2oFwiXSxcbltcIjhlNDBcIixcIuW2oVwiLDIxLFwi5ba4XCIsMTIsXCLlt4ZcIiw2LFwi5beOXCIsMTIsXCLlt5zlt5/lt6Dlt6Plt6Tlt6rlt6zlt61cIl0sXG5bXCI4ZTgwXCIsXCLlt7Dlt7Xlt7blt7hcIiw0LFwi5be/5biA5biE5biH5biJ5biK5biL5biN5biO5biS5biT5biX5bieXCIsNyxcIuW4qFwiLDQsXCLluK/luLDluLJcIiw0LFwi5bi55bi65bi+5bi/5bmA5bmB5bmD5bmGXCIsNSxcIuW5jVwiLDYsXCLluZZcIiw0LFwi5bmc5bmd5bmf5bmg5bmjXCIsMTQsXCLlubXlubflubnlub7luoHluoLluoPluoXluojluonluozluo3luo7lupLlupjlupvlup3luqHluqLluqPluqTluqhcIiw0LFwi5bquXCIsNCxcIuW6tOW6uuW6u+W6vOW6veW6v1wiLDZdLFxuW1wiOGY0MFwiLFwi5buG5buH5buI5buLXCIsNSxcIuW7lOW7leW7l+W7mOW7meW7muW7nFwiLDExLFwi5bup5burXCIsOCxcIuW7teW7uOW7ueW7u+W7vOW7veW8heW8huW8h+W8ieW8jOW8jeW8juW8kOW8kuW8lOW8luW8meW8muW8nOW8neW8nuW8oeW8ouW8o+W8pFwiXSxcbltcIjhmODBcIixcIuW8qOW8q+W8rOW8ruW8sOW8slwiLDYsXCLlvLvlvL3lvL7lvL/lvYFcIiwxNCxcIuW9keW9lOW9meW9muW9m+W9nOW9nuW9n+W9oOW9o+W9peW9p+W9qOW9q+W9ruW9r+W9suW9tOW9teW9tuW9uOW9uuW9veW9vuW9v+W+g+W+huW+jeW+juW+j+W+keW+k+W+lOW+luW+muW+m+W+neW+nuW+n+W+oOW+olwiLDUsXCLlvqnlvqvlvqzlvq9cIiw1LFwi5b625b645b655b665b675b6+XCIsNCxcIuW/h+W/iOW/iuW/i+W/juW/k+W/lOW/leW/muW/m+W/nOW/nuW/n+W/ouW/o+W/peW/puW/qOW/qeW/rOW/r+W/sOW/suW/s+W/tOW/tuW/t+W/ueW/uuW/vOaAh1wiXSxcbltcIjkwNDBcIixcIuaAiOaAieaAi+aAjOaAkOaAkeaAk+aAl+aAmOaAmuaAnuaAn+aAouaAo+aApOaArOaAreaAruaAsFwiLDQsXCLmgLZcIiw0LFwi5oC95oC+5oGA5oGEXCIsNixcIuaBjOaBjuaBj+aBkeaBk+aBlOaBluaBl+aBmOaBm+aBnOaBnuaBn+aBoOaBoeaBpeaBpuaBruaBseaBsuaBtOaBteaBt+aBvuaCgFwiXSxcbltcIjkwODBcIixcIuaCgeaCguaCheaChuaCh+aCiOaCiuaCi+aCjuaCj+aCkOaCkeaCk+aCleaCl+aCmOaCmeaCnOaCnuaCoeaCouaCpOaCpeaCp+aCqeaCquaCruaCsOaCs+aCteaCtuaCt+aCueaCuuaCvVwiLDcsXCLmg4fmg4jmg4nmg4xcIiw0LFwi5oOS5oOT5oOU5oOW5oOX5oOZ5oOb5oOe5oOhXCIsNCxcIuaDquaDseaDsuaDteaDt+aDuOaDu1wiLDQsXCLmhILmhIPmhITmhIXmhIfmhIrmhIvmhIzmhJBcIiw0LFwi5oSW5oSX5oSY5oSZ5oSb5oSc5oSd5oSe5oSh5oSi5oSl5oSo5oSp5oSq5oSsXCIsMTgsXCLmhYBcIiw2XSxcbltcIjkxNDBcIixcIuaFh+aFieaFi+aFjeaFj+aFkOaFkuaFk+aFlOaFllwiLDYsXCLmhZ7mhZ/mhaDmhaHmhaPmhaTmhaXmhabmhalcIiw2LFwi5oWx5oWy5oWz5oW05oW25oW4XCIsMTgsXCLmhozmho3mho9cIiw0LFwi5oaVXCJdLFxuW1wiOTE4MFwiLFwi5oaWXCIsNixcIuaGnlwiLDgsXCLmhqrmhqvmhq1cIiw5LFwi5oa4XCIsNSxcIuaGv+aHgOaHgeaHg1wiLDQsXCLmh4nmh4xcIiw0LFwi5oeT5oeVXCIsMTYsXCLmh6dcIiwxMyxcIuaHtlwiLDgsXCLmiIBcIiw1LFwi5oiH5oiJ5oiT5oiU5oiZ5oic5oid5oie5oig5oij5oim5oin5oio5oip5oir5oit5oiv5oiw5oix5oiy5oi15oi25oi4XCIsNCxcIuaJguaJhOaJheaJhuaJilwiXSxcbltcIjkyNDBcIixcIuaJj+aJkOaJleaJluaJl+aJmeaJmuaJnFwiLDYsXCLmiaTmiaXmiajmibHmibLmibTmibXmibfmibjmibrmibvmib3mioHmioLmioPmioXmiobmiofmiojmiotcIiw1LFwi5oqU5oqZ5oqc5oqd5oqe5oqj5oqm5oqn5oqp5oqq5oqt5oqu5oqv5oqw5oqy5oqz5oq05oq25oq35oq45oq65oq+5ouA5ouBXCJdLFxuW1wiOTI4MFwiLFwi5ouD5ouL5ouP5ouR5ouV5oud5oue5oug5ouh5ouk5ouq5our5ouw5ouy5ou15ou45ou55ou65ou75oyA5oyD5oyE5oyF5oyG5oyK5oyL5oyM5oyN5oyP5oyQ5oyS5oyT5oyU5oyV5oyX5oyY5oyZ5oyc5oym5oyn5oyp5oys5oyt5oyu5oyw5oyx5oyzXCIsNSxcIuaMu+aMvOaMvuaMv+aNgOaNgeaNhOaNh+aNiOaNiuaNkeaNkuaNk+aNlOaNllwiLDcsXCLmjaDmjaTmjaXmjabmjajmjarmjavmjazmja/mjbDmjbLmjbPmjbTmjbXmjbjmjbnmjbzmjb3mjb7mjb/mjoHmjoPmjoTmjoXmjobmjovmjo3mjpHmjpPmjpTmjpXmjpfmjplcIiw2LFwi5o6h5o6k5o6m5o6r5o6v5o6x5o6y5o615o625o655o675o695o6/5o+AXCJdLFxuW1wiOTM0MFwiLFwi5o+B5o+C5o+D5o+F5o+H5o+I5o+K5o+L5o+M5o+R5o+T5o+U5o+V5o+XXCIsNixcIuaPn+aPouaPpFwiLDQsXCLmj6vmj6zmj67mj6/mj7Dmj7Hmj7Pmj7Xmj7fmj7nmj7rmj7vmj7zmj77mkIPmkITmkIZcIiw0LFwi5pCN5pCO5pCR5pCS5pCVXCIsNSxcIuaQneaQn+aQouaQo+aQpFwiXSxcbltcIjkzODBcIixcIuaQpeaQp+aQqOaQqeaQq+aQrlwiLDUsXCLmkLVcIiw0LFwi5pC75pC85pC+5pGA5pGC5pGD5pGJ5pGLXCIsNixcIuaRk+aRleaRluaRl+aRmVwiLDQsXCLmkZ9cIiw3LFwi5pGo5pGq5pGr5pGs5pGuXCIsOSxcIuaRu1wiLDYsXCLmkoPmkobmkohcIiw4LFwi5pKT5pKU5pKX5pKY5pKa5pKb5pKc5pKd5pKfXCIsNCxcIuaSpeaSpuaSp+aSqOaSquaSq+aSr+aSseaSsuaSs+aStOaStuaSueaSu+aSveaSvuaSv+aTgeaTg+aThOaThlwiLDYsXCLmk4/mk5Hmk5Pmk5Tmk5Xmk5bmk5nmk5pcIl0sXG5bXCI5NDQwXCIsXCLmk5vmk5zmk53mk5/mk6Dmk6Hmk6Pmk6Xmk6dcIiwyNCxcIuaUgVwiLDcsXCLmlIpcIiw3LFwi5pSTXCIsNCxcIuaUmVwiLDhdLFxuW1wiOTQ4MFwiLFwi5pSi5pSj5pSk5pSmXCIsNCxcIuaUrOaUreaUsOaUseaUsuaUs+aUt+aUuuaUvOaUveaVgFwiLDQsXCLmlYbmlYfmlYrmlYvmlY3mlY7mlZDmlZLmlZPmlZTmlZfmlZjmlZrmlZzmlZ/mlaDmlaHmlaTmlaXmlafmlajmlanmlarmla3mla7mla/mlbHmlbPmlbXmlbbmlbhcIiwxNCxcIuaWiOaWieaWiuaWjeaWjuaWj+aWkuaWlOaWleaWluaWmOaWmuaWneaWnuaWoOaWouaWo+aWpuaWqOaWquaWrOaWruaWsVwiLDcsXCLmlrrmlrvmlr7mlr/ml4Dml4Lml4fml4jml4nml4rml43ml5Dml5Hml5Pml5Tml5Xml5hcIiw3LFwi5peh5pej5pek5peq5perXCJdLFxuW1wiOTU0MFwiLFwi5pey5pez5pe05pe15pe45pe55pe7XCIsNCxcIuaYgeaYhOaYheaYh+aYiOaYieaYi+aYjeaYkOaYkeaYkuaYluaYl+aYmOaYmuaYm+aYnOaYnuaYoeaYouaYo+aYpOaYpuaYqeaYquaYq+aYrOaYruaYsOaYsuaYs+aYt1wiLDQsXCLmmL3mmL/mmYDmmYLmmYRcIiw2LFwi5pmN5pmO5pmQ5pmR5pmYXCJdLFxuW1wiOTU4MFwiLFwi5pmZ5pmb5pmc5pmd5pme5pmg5pmi5pmj5pml5pmn5pmpXCIsNCxcIuaZseaZsuaZs+aZteaZuOaZueaZu+aZvOaZveaZv+aagOaageaag+aaheaahuaaiOaaieaaiuaai+aajeaajuaaj+aakOaakuaak+aalOaaleaamFwiLDQsXCLmmp5cIiw4LFwi5pqpXCIsNCxcIuaar1wiLDQsXCLmmrXmmrbmmrfmmrjmmrrmmrvmmrzmmr3mmr9cIiwyNSxcIuabmuabnlwiLDcsXCLmm6fmm6jmm6pcIiw1LFwi5pux5pu15pu25pu45pu65pu75pu95pyB5pyC5pyDXCJdLFxuW1wiOTY0MFwiLFwi5pyE5pyF5pyG5pyH5pyM5pyO5pyP5pyR5pyS5pyT5pyW5pyY5pyZ5pya5pyc5pye5pygXCIsNSxcIuacp+acqeacruacsOacsuacs+actuact+acuOacueacu+acvOacvuacv+adgeadhOadheadh+adiuadi+adjeadkuadlOadleadl1wiLDQsXCLmnZ3mnaLmnaPmnaTmnabmnafmnavmnazmna7mnbHmnbTmnbZcIl0sXG5bXCI5NjgwXCIsXCLmnbjmnbnmnbrmnbvmnb3mnoDmnoLmnoPmnoXmnobmnojmnormnozmno3mno7mno/mnpHmnpLmnpPmnpTmnpbmnpnmnpvmnp/mnqDmnqHmnqTmnqbmnqnmnqzmnq7mnrHmnrLmnrTmnrlcIiw3LFwi5p+C5p+FXCIsOSxcIuafleafluafl+afm+afn+afoeafo+afpOafpuafp+afqOafquafq+afreafruafsuaftVwiLDcsXCLmn77moIHmoILmoIPmoITmoIbmoI3moJDmoJLmoJTmoJXmoJhcIiw0LFwi5qCe5qCf5qCg5qCiXCIsNixcIuagq1wiLDYsXCLmoLTmoLXmoLbmoLrmoLvmoL/moYfmoYvmoY3moY/moZLmoZZcIiw1XSxcbltcIjk3NDBcIixcIuahnOahneahnuahn+ahquahrFwiLDcsXCLmobXmobhcIiw4LFwi5qKC5qKE5qKHXCIsNyxcIuaikOaikeaikuailOaileailuaimFwiLDksXCLmoqPmoqTmoqXmoqnmoqrmoqvmoqzmoq7morHmorLmorTmorbmorfmorhcIl0sXG5bXCI5NzgwXCIsXCLmorlcIiw2LFwi5qOB5qODXCIsNSxcIuajiuajjOajjuajj+ajkOajkeajk+ajlOajluajl+ajmeajm1wiLDQsXCLmo6Hmo6Lmo6RcIiw5LFwi5qOv5qOy5qOz5qO05qO25qO35qO45qO75qO95qO+5qO/5qSA5qSC5qSD5qSE5qSGXCIsNCxcIuakjOakj+akkeakk1wiLDExLFwi5qSh5qSi5qSj5qSlXCIsNyxcIuakruakr+akseaksuaks+akteaktuakt+akuOakuuaku+akvOakvualgOalgealg1wiLDE2LFwi5qWV5qWW5qWY5qWZ5qWb5qWc5qWfXCJdLFxuW1wiOTg0MFwiLFwi5qWh5qWi5qWk5qWl5qWn5qWo5qWp5qWq5qWs5qWt5qWv5qWw5qWyXCIsNCxcIualuualu+alvealvualv+amgeamg+amheamiuami+amjOamjlwiLDUsXCLmppbmppfmppnmpprmpp1cIiw5LFwi5qap5qaq5qas5qau5qav5qaw5qay5qaz5qa15qa25qa45qa55qa65qa85qa9XCJdLFxuW1wiOTg4MFwiLFwi5qa+5qa/5qeA5qeCXCIsNyxcIuani+anjeanj+ankeankuank+anlVwiLDUsXCLmp5zmp53mp57mp6FcIiwxMSxcIuanruanr+ansOanseans1wiLDksXCLmp77mqIBcIiw5LFwi5qiLXCIsMTEsXCLmqJlcIiw1LFwi5qig5qiiXCIsNSxcIuaoqeaoq+aorOaoreaoruaosOaosuaos+aotOaotlwiLDYsXCLmqL9cIiw0LFwi5qmF5qmG5qmIXCIsNyxcIuapkVwiLDYsXCLmqZpcIl0sXG5bXCI5OTQwXCIsXCLmqZxcIiw0LFwi5qmi5qmj5qmk5qmmXCIsMTAsXCLmqbJcIiw2LFwi5qm65qm75qm95qm+5qm/5qqB5qqC5qqD5qqFXCIsOCxcIuaqj+aqklwiLDQsXCLmqphcIiw3LFwi5qqhXCIsNV0sXG5bXCI5OTgwXCIsXCLmqqfmqqjmqqrmqq1cIiwxMTQsXCLmrKXmrKbmrKhcIiw2XSxcbltcIjlhNDBcIixcIuasr+assOasseass+astOasteastuasuOasu+asvOasveasv+atgOatgeatguathOatheatiOatiuati+atjVwiLDExLFwi5q2aXCIsNyxcIuatqOatqeatq1wiLDEzLFwi5q265q295q2+5q2/5q6A5q6F5q6IXCJdLFxuW1wiOWE4MFwiLFwi5q6M5q6O5q6P5q6Q5q6R5q6U5q6V5q6X5q6Y5q6Z5q6cXCIsNCxcIuauolwiLDcsXCLmrqtcIiw3LFwi5q625q64XCIsNixcIuavgOavg+avhOavhlwiLDQsXCLmr4zmr47mr5Dmr5Hmr5jmr5rmr5xcIiw0LFwi5q+iXCIsNyxcIuavrOavreavruavsOavseavsuavtOavtuavt+avuOavuuavu+avvOavvlwiLDYsXCLmsIhcIiw0LFwi5rCO5rCS5rCX5rCc5rCd5rCe5rCg5rCj5rCl5rCr5rCs5rCt5rCx5rCz5rC25rC35rC55rC65rC75rC85rC+5rC/5rGD5rGE5rGF5rGI5rGLXCIsNCxcIuaxkeaxkuaxk+axluaxmFwiXSxcbltcIjliNDBcIixcIuaxmeaxmuaxouaxo+axpeaxpuaxp+axq1wiLDQsXCLmsbHmsbPmsbXmsbfmsbjmsbrmsbvmsbzmsb/msoDmsoTmsofmsormsovmso3mso7mspHmspLmspXmspbmspfmspjmsprmspzmsp3msp7msqDmsqLmsqjmsqzmsq/msrDmsrTmsrXmsrbmsrfmsrrms4Dms4Hms4Lms4Pms4bms4fms4jms4vms43ms47ms4/ms5Hms5Lms5hcIl0sXG5bXCI5YjgwXCIsXCLms5nms5rms5zms53ms5/ms6Tms6bms6fms6nms6zms63ms7Lms7Tms7nms7/mtIDmtILmtIPmtIXmtIbmtIjmtInmtIrmtI3mtI/mtJDmtJHmtJPmtJTmtJXmtJbmtJjmtJzmtJ3mtJ9cIiw1LFwi5rSm5rSo5rSp5rSs5rSt5rSv5rSw5rS05rS25rS35rS45rS65rS/5rWA5rWC5rWE5rWJ5rWM5rWQ5rWV5rWW5rWX5rWY5rWb5rWd5rWf5rWh5rWi5rWk5rWl5rWn5rWo5rWr5rWs5rWt5rWw5rWx5rWy5rWz5rW15rW25rW55rW65rW75rW9XCIsNCxcIua2g+a2hOa2hua2h+a2iua2i+a2jea2j+a2kOa2kua2llwiLDQsXCLmtpzmtqLmtqXmtqzmtq3mtrDmtrHmtrPmtrTmtrbmtrfmtrlcIiw1LFwi5reB5reC5reD5reI5reJ5reKXCJdLFxuW1wiOWM0MFwiLFwi5reN5reO5reP5reQ5reS5reT5reU5reV5reX5rea5reb5rec5ref5rei5rej5rel5ren5reo5rep5req5ret5rev5rew5rey5re05re15re25re45re65re9XCIsNyxcIua4hua4h+a4iOa4iea4i+a4j+a4kua4k+a4lea4mOa4mea4m+a4nOa4nua4n+a4oua4pua4p+a4qOa4qua4rOa4rua4sOa4sea4s+a4tVwiXSxcbltcIjljODBcIixcIua4tua4t+a4uea4u1wiLDcsXCLmuYVcIiw3LFwi5rmP5rmQ5rmR5rmS5rmV5rmX5rmZ5rma5rmc5rmd5rme5rmgXCIsMTAsXCLmuazmua3mua9cIiwxNCxcIua6gOa6gea6gua6hOa6h+a6iOa6ilwiLDQsXCLmupFcIiw2LFwi5rqZ5rqa5rqb5rqd5rqe5rqg5rqh5rqj5rqk5rqm5rqo5rqp5rqr5rqs5rqt5rqu5rqw5rqz5rq15rq45rq55rq85rq+5rq/5ruA5ruD5ruE5ruF5ruG5ruI5ruJ5ruK5ruM5ruN5ruO5ruQ5ruS5ruW5ruY5ruZ5rub5ruc5rud5ruj5run5ruqXCIsNV0sXG5bXCI5ZDQwXCIsXCLmu7Dmu7Hmu7Lmu7Pmu7Xmu7bmu7fmu7jmu7pcIiw3LFwi5ryD5ryE5ryF5ryH5ryI5ryKXCIsNCxcIua8kOa8kea8kua8llwiLDksXCLmvKHmvKLmvKPmvKXmvKbmvKfmvKjmvKzmvK7mvLDmvLLmvLTmvLXmvLdcIiw2LFwi5ry/5r2A5r2B5r2CXCJdLFxuW1wiOWQ4MFwiLFwi5r2D5r2E5r2F5r2I5r2J5r2K5r2M5r2OXCIsOSxcIua9mea9mua9m+a9nea9n+a9oOa9oea9o+a9pOa9pea9p1wiLDUsXCLmva/mvbDmvbHmvbPmvbXmvbbmvbfmvbnmvbvmvb1cIiw2LFwi5r6F5r6G5r6H5r6K5r6L5r6PXCIsMTIsXCLmvp3mvp7mvp/mvqDmvqJcIiw0LFwi5r6oXCIsMTAsXCLmvrTmvrXmvrfmvrjmvrpcIiw1LFwi5r+B5r+DXCIsNSxcIua/ilwiLDYsXCLmv5NcIiwxMCxcIua/n+a/oua/o+a/pOa/pVwiXSxcbltcIjllNDBcIixcIua/plwiLDcsXCLmv7BcIiwzMixcIueAklwiLDcsXCLngJxcIiw2LFwi54CkXCIsNl0sXG5bXCI5ZTgwXCIsXCLngKtcIiw5LFwi54C254C354C454C6XCIsMTcsXCLngY3ngY7ngZBcIiwxMyxcIueBn1wiLDExLFwi54Gu54Gx54Gy54Gz54G054G354G554G654G754G954KB54KC54KD54KE54KG54KH54KI54KL54KM54KN54KP54KQ54KR54KT54KX54KY54Ka54Kb54KeXCIsMTIsXCLngrDngrLngrTngrXngrbngrrngr7ngr/ng4Tng4Xng4bng4fng4nng4tcIiwxMixcIueDmlwiXSxcbltcIjlmNDBcIixcIueDnOeDneeDnueDoOeDoeeDoueDo+eDpeeDqueDrueDsFwiLDYsXCLng7jng7rng7vng7zng75cIiwxMCxcIueEi1wiLDQsXCLnhJHnhJLnhJTnhJfnhJtcIiwxMCxcIueEp1wiLDcsXCLnhLLnhLPnhLRcIl0sXG5bXCI5ZjgwXCIsXCLnhLXnhLdcIiwxMyxcIueFhueFh+eFiOeFieeFi+eFjeeFj1wiLDEyLFwi54Wd54WfXCIsNCxcIueFpeeFqVwiLDQsXCLnha/nhbDnhbHnhbTnhbXnhbbnhbfnhbnnhbvnhbznhb5cIiw1LFwi54aFXCIsNCxcIueGi+eGjOeGjeeGjueGkOeGkeeGkueGk+eGleeGlueGl+eGmlwiLDQsXCLnhqFcIiw2LFwi54ap54aq54ar54atXCIsNSxcIueGtOeGtueGt+eGuOeGulwiLDgsXCLnh4RcIiw5LFwi54ePXCIsNF0sXG5bXCJhMDQwXCIsXCLnh5ZcIiw5LFwi54eh54ei54ej54ek54em54eoXCIsNSxcIueHr1wiLDksXCLnh7pcIiwxMSxcIueIh1wiLDE5XSxcbltcImEwODBcIixcIueIm+eInOeInlwiLDksXCLniKnniKvniK3niK7niK/niLLniLPniLTniLrniLzniL7niYBcIiw2LFwi54mJ54mK54mL54mO54mP54mQ54mR54mT54mU54mV54mX54mY54ma54mc54me54mg54mj54mk54ml54mo54mq54mr54ms54mt54mw54mx54mz54m054m254m354m454m754m854m954qC54qD54qFXCIsNCxcIueKjOeKjueKkOeKkeeKk1wiLDExLFwi54qgXCIsMTEsXCLniq7nirHnirLnirPnirXnirpcIiw2LFwi54uF54uG54uH54uJ54uK54uL54uM54uP54uR54uT54uU54uV54uW54uY54ua54ubXCJdLFxuW1wiYTFhMVwiLFwi44CA44CB44CCwrfLicuHwqjjgIPjgIXigJTvvZ7igJbigKbigJjigJnigJzigJ3jgJTjgJXjgIhcIiw3LFwi44CW44CX44CQ44CRwrHDl8O34oi24oin4oio4oiR4oiP4oiq4oip4oiI4oi34oia4oql4oil4oig4oyS4oqZ4oir4oiu4omh4omM4omI4oi94oid4omg4omu4omv4omk4oml4oie4oi14oi04pmC4pmAwrDigLLigLPihIPvvITCpO+/oO+/oeKAsMKn4oSW4piG4piF4peL4peP4peO4peH4peG4pah4pag4paz4pay4oC74oaS4oaQ4oaR4oaT44CTXCJdLFxuW1wiYTJhMVwiLFwi4oWwXCIsOV0sXG5bXCJhMmIxXCIsXCLikohcIiwxOSxcIuKRtFwiLDE5LFwi4pGgXCIsOV0sXG5bXCJhMmU1XCIsXCLjiKBcIiw5XSxcbltcImEyZjFcIixcIuKFoFwiLDExXSxcbltcImEzYTFcIixcIu+8ge+8gu+8g++/pe+8hVwiLDg4LFwi77+jXCJdLFxuW1wiYTRhMVwiLFwi44GBXCIsODJdLFxuW1wiYTVhMVwiLFwi44KhXCIsODVdLFxuW1wiYTZhMVwiLFwizpFcIiwxNixcIs6jXCIsNl0sXG5bXCJhNmMxXCIsXCLOsVwiLDE2LFwiz4NcIiw2XSxcbltcImE2ZTBcIixcIu+4te+4tu+4ue+4uu+4v++5gO+4ve+4vu+5ge+5gu+5g++5hFwiXSxcbltcImE2ZWVcIixcIu+4u++4vO+4t++4uO+4sVwiXSxcbltcImE2ZjRcIixcIu+4s++4tFwiXSxcbltcImE3YTFcIixcItCQXCIsNSxcItCB0JZcIiwyNV0sXG5bXCJhN2QxXCIsXCLQsFwiLDUsXCLRkdC2XCIsMjVdLFxuW1wiYTg0MFwiLFwiy4rLi8uZ4oCT4oCV4oCl4oC14oSF4oSJ4oaW4oaX4oaY4oaZ4oiV4oif4oij4omS4omm4omn4oq/4pWQXCIsMzUsXCLiloFcIiw2XSxcbltcImE4ODBcIixcIuKWiFwiLDcsXCLilpPilpTilpXilrzilr3il6Lil6Pil6Til6XimIniipXjgJLjgJ3jgJ5cIl0sXG5bXCJhOGExXCIsXCLEgcOhx47DoMSTw6nEm8OoxKvDrceQw6zFjcOzx5LDssWrw7rHlMO5x5bHmMeax5zDvMOqyZFcIl0sXG5bXCJhOGJkXCIsXCLFhMWIXCJdLFxuW1wiYThjMFwiLFwiyaFcIl0sXG5bXCJhOGM1XCIsXCLjhIVcIiwzNl0sXG5bXCJhOTQwXCIsXCLjgKFcIiw4LFwi44qj446O446P446c446d446e446h44+E44+O44+R44+S44+V77iw77+i77+kXCJdLFxuW1wiYTk1OVwiLFwi4oSh44ixXCJdLFxuW1wiYTk1Y1wiLFwi4oCQXCJdLFxuW1wiYTk2MFwiLFwi44O844Kb44Kc44O944O+44CG44Kd44Ke77mJXCIsOSxcIu+5lO+5le+5lu+5l++5mVwiLDhdLFxuW1wiYTk4MFwiLFwi77miXCIsNCxcIu+5qO+5qe+5qu+5q1wiXSxcbltcImE5OTZcIixcIuOAh1wiXSxcbltcImE5YTRcIixcIuKUgFwiLDc1XSxcbltcImFhNDBcIixcIueLnOeLneeLn+eLolwiLDUsXCLni6rni6vni7Xni7bni7nni73ni77ni7/njIDnjILnjIRcIiw1LFwi54yL54yM54yN54yP54yQ54yR54yS54yU54yY54yZ54ya54yf54yg54yj54yk54ym54yn54yo54yt54yv54yw54yy54yz54y154y254y654y754y854y9542AXCIsOF0sXG5bXCJhYTgwXCIsXCLnjYnnjYrnjYvnjYznjY7njY/njZHnjZPnjZTnjZXnjZbnjZhcIiw3LFwi542hXCIsMTAsXCLnja7njbDnjbFcIl0sXG5bXCJhYjQwXCIsXCLnjbJcIiwxMSxcIueNv1wiLDQsXCLnjoXnjobnjojnjornjoznjo3njo/njpDnjpLnjpPnjpTnjpXnjpfnjpjnjpnnjprnjpznjp3njp7njqDnjqHnjqNcIiw1LFwi546q546s546t546x5460546154625464546554685469546+546/54+B54+DXCIsNF0sXG5bXCJhYjgwXCIsXCLnj4vnj4znj47nj5JcIiw2LFwi54+a54+b54+c54+d54+f54+h54+i54+j54+k54+m54+o54+q54+r54+s54+u54+v54+w54+x54+zXCIsNF0sXG5bXCJhYzQwXCIsXCLnj7hcIiwxMCxcIueQhOeQh+eQiOeQi+eQjOeQjeeQjueQkVwiLDgsXCLnkJxcIiw1LFwi55Cj55Ck55Cn55Cp55Cr55Ct55Cv55Cx55Cy55C3XCIsNCxcIueQveeQvueQv+eRgOeRglwiLDExXSxcbltcImFjODBcIixcIueRjlwiLDYsXCLnkZbnkZjnkZ3nkaBcIiwxMixcIueRrueRr+eRsVwiLDQsXCLnkbjnkbnnkbpcIl0sXG5bXCJhZDQwXCIsXCLnkbvnkbznkb3nkb/nkoLnkoTnkoXnkobnkojnkonnkornkoznko3nko/nkpFcIiwxMCxcIueSneeSn1wiLDcsXCLnkqpcIiwxNSxcIueSu1wiLDEyXSxcbltcImFkODBcIixcIueTiFwiLDksXCLnk5NcIiw4LFwi55Od55Of55Oh55Ol55OnXCIsNixcIueTsOeTseeTslwiXSxcbltcImFlNDBcIixcIueTs+eTteeTuFwiLDYsXCLnlIDnlIHnlILnlIPnlIVcIiw3LFwi55SO55SQ55SS55SU55SV55SW55SX55Sb55Sd55Se55SgXCIsNCxcIueUpueUp+eUqueUrueUtOeUtueUueeUvOeUveeUv+eVgeeVgueVg+eVhOeVhueVh+eVieeViueVjeeVkOeVkeeVkueVk+eVleeVlueVl+eVmFwiXSxcbltcImFlODBcIixcIueVnVwiLDcsXCLnlafnlajnlannlatcIiw2LFwi55Wz55W155W255W355W6XCIsNCxcIueWgOeWgeeWgueWhOeWheeWh1wiXSxcbltcImFmNDBcIixcIueWiOeWieeWiueWjOeWjeeWjueWkOeWk+eWleeWmOeWm+eWnOeWnueWoueWplwiLDQsXCLnlq3nlrbnlrfnlrrnlrvnlr/nl4Dnl4Hnl4bnl4vnl4znl47nl4/nl5Dnl5Hnl5Pnl5fnl5nnl5rnl5znl53nl5/nl6Dnl6Hnl6Xnl6nnl6znl63nl67nl6/nl7Lnl7Pnl7Xnl7bnl7fnl7jnl7rnl7vnl73nl77nmILnmITnmIbnmIdcIl0sXG5bXCJhZjgwXCIsXCLnmIjnmInnmIvnmI3nmI7nmI/nmJHnmJLnmJPnmJTnmJbnmJrnmJznmJ3nmJ7nmKHnmKPnmKfnmKjnmKznmK7nmK/nmLHnmLLnmLbnmLfnmLnnmLrnmLvnmL3nmYHnmYLnmYRcIl0sXG5bXCJiMDQwXCIsXCLnmYVcIiw2LFwi55mOXCIsNSxcIueZleeZl1wiLDQsXCLnmZ3nmZ/nmaDnmaHnmaLnmaRcIiw2LFwi55ms55mt55mu55mwXCIsNyxcIueZueeZuueZvOeZv+eagOeageeag+eaheeaieeaiueajOeajeeaj+eakOeakuealOealeeal+eamOeamueam1wiXSxcbltcImIwODBcIixcIueanFwiLDcsXCLnmqVcIiw4LFwi55qv55qw55qz55q1XCIsOSxcIuebgOebgeebg+WViumYv+Wfg+aMqOWTjuWUieWTgOeakeeZjOiUvOefruiJvueijeeIsemamOmejeawqOWuieS/uuaMieaal+WyuOiDuuahiOiCruaYguebjuWHueaVlueGrOe/seiihOWCsuWlpeaHiua+s+iKreaNjOaJkuWPreWQp+eshuWFq+eWpOW3tOaLlOi3i+mdtuaKiuiAmeWdnemcuOe9oueIuOeZveafj+eZvuaRhuS9sOi0peaLnOeol+aWkeePreaQrOaJs+iIrOmigeadv+eJiOaJruaLjOS8tOeTo+WNiuWKnue7iumCpuW4ruaihuamnOiGgOe7keajkuejheiajOmVkeWCjeiwpOiLnuiDnuWMheikkuWJpVwiXSxcbltcImIxNDBcIixcIuebhOebh+ebieebi+ebjOebk+ebleebmeebmuebnOebneebnueboFwiLDQsXCLnm6ZcIiw3LFwi55uw55uz55u155u255u355u655u755u955u/55yA55yC55yD55yF55yG55yK55yM55yOXCIsMTAsXCLnnJvnnJznnJ3nnJ7nnKHnnKPnnKTnnKXnnKfnnKrnnKtcIl0sXG5bXCJiMTgwXCIsXCLnnKznnK7nnLBcIiw0LFwi55y555y755y955y+55y/552C552E552F552G552IXCIsNyxcIuedklwiLDcsXCLnnZzoloTpm7nkv53loKHppbHlrp3mirHmiqXmmrTosbnpso3niIbmna/nopHmgrLljZHljJfovojog4zotJ3pkqHlgI3ni4jlpIfmg6vnhJnooqvlpZToi6/mnKznrKjltKnnu7fnlK3ms7Xouabov7jpgLzpvLvmr5TphJnnrJTlvbznoqfok5bolL3mr5Xmr5nmr5bluIHluofnl7npl63mlZ3lvIrlv4Xovp/lo4Hoh4Lpgb/pmZvpnq3ovrnnvJbotKzmiYHkvr/lj5jljZ7ovqjovqnovqvpgY3moIflvarohpjooajps5bmhovliKvnmKrlvazmlozmv5Lmu6jlrr7mkYjlhbXlhrDmn4TkuJnnp4nppbzngrNcIl0sXG5bXCJiMjQwXCIsXCLnnZ3nnZ7nnZ/nnaDnnaTnnafnnannnarnna1cIiwxMSxcIueduuedu+edvOeegeeegueeg+eehlwiLDUsXCLnno/nnpDnnpNcIiwxMSxcIueeoeeeo+eepOeepueeqOeeq+eereeerueer+eeseeesueetOeetlwiLDRdLFxuW1wiYjI4MFwiLFwi5568556+55+AXCIsMTIsXCLnn45cIiw4LFwi55+Y55+Z55+a55+dXCIsNCxcIuefpOeXheW5tueOu+iPoOaSreaLqOmSteazouWNmuWLg+aQj+mTgueulOS8r+W4m+iItuiEluiGiua4pOaziumps+aNleWNnOWTuuihpeWfoOS4jeW4g+atpeewv+mDqOaAluaTpueMnOijgeadkOaJjei0ouedrOi4qemHh+W9qeiPnOiUoemkkOWPguialeaui+aDreaDqOeBv+iLjeiIseS7k+ayp+iXj+aTjeezmeanveabueiNieWOleetluS+p+WGjOa1i+Wxgui5reaPkuWPieiMrOiMtuafpeeitOaQveWvn+WylOW3ruivp+aLhuaftOixuuaQgOaOuuidiemmi+iwl+e8oOmTsuS6p+mYkOmipOaYjOeMllwiXSxcbltcImIzNDBcIixcIuefpuefqOefquefr+efsOefseefsueftOefteeft+efueefuuefu+efvOegg1wiLDUsXCLnoIrnoIvnoI7noI/noJDnoJPnoJXnoJnnoJvnoJ7noKDnoKHnoKLnoKTnoKjnoKrnoKvnoK7noK/noLHnoLLnoLPnoLXnoLbnoL3noL/noYHnoYLnoYPnoYTnoYbnoYjnoYnnoYrnoYvnoY3noY/noZHnoZPnoZTnoZjnoZnnoZpcIl0sXG5bXCJiMzgwXCIsXCLnoZvnoZznoZ5cIiwxMSxcIuehr1wiLDcsXCLnobjnobnnobrnobvnob1cIiw2LFwi5Zy65bCd5bi46ZW/5YG/6IKg5Y6C5pWe55WF5ZSx5YCh6LaF5oqE6ZKe5pyd5Ziy5r2u5bei5ZC154KS6L2m5omv5pKk5o6j5b275r6I6YO06Iej6L6w5bCY5pmo5b+x5rKJ6ZmI6LaB6KGs5pKR56ew5Z+O5qmZ5oiQ5ZGI5LmY56iL5oOp5r6E6K+a5om/6YCe6aqL56ek5ZCD55e05oyB5YyZ5rGg6L+f5byb6amw6IC76b2/5L6I5bC66LWk57+F5pal54K95YWF5Yay6Jmr5bSH5a6g5oq96YWs55W06LiM56ig5oSB56255LuH57u4556F5LiR6Iet5Yid5Ye65qmx5Y6o6LqH6ZSE6ZuP5ruB6Zmk5qWaXCJdLFxuW1wiYjQ0MFwiLFwi56KE56KF56KG56KI56KK56KL56KP56KQ56KS56KU56KV56KW56KZ56Kd56Ke56Kg56Ki56Kk56Km56KoXCIsNyxcIueiteeitueit+eiuOeiuueiu+eivOeiveeiv+ejgOejguejg+ejhOejhuejh+ejiOejjOejjeejjuejj+ejkeejkuejk+ejluejl+ejmOejmlwiLDldLFxuW1wiYjQ4MFwiLFwi56Ok56Ol56Om56On56Op56Oq56Or56OtXCIsNCxcIuejs+ejteejtuejuOejueeju1wiLDUsXCLnpILnpIPnpITnpIZcIiw2LFwi56GA5YKo55+X5pCQ6Kem5aSE5o+j5bed56m/5qS95Lyg6Ii55ZaY5Liy55au56qX5bmi5bqK6Zev5Yib5ZC554KK5o226ZSk5Z6C5pil5qS/6YaH5ZSH5rez57qv6KCi5oiz57uw55a16Iyo56OB6ZuM6L6e5oWI55O36K+N5q2k5Yi66LWQ5qyh6IGq6JGx5Zux5YyG5LuO5Lib5YeR57KX6YaL57CH5L+D6Lm/56+h56qc5pGn5bSU5YKs6ISG55iB57K55res57+g5p2R5a2Y5a+456OL5pKu5pCT5o6q5oyr6ZSZ5pCt6L6+562U55ip5omT5aSn5ZGG5q255YKj5oi05bim5q6G5Luj6LS36KKL5b6F6YCuXCJdLFxuW1wiYjU0MFwiLFwi56SNXCIsNSxcIueklFwiLDksXCLnpJ9cIiw0LFwi56SlXCIsMTQsXCLnpLVcIiw0LFwi56S956S/56WC56WD56WE56WF56WH56WKXCIsOCxcIuellOelleelmOelmeeloeelo1wiXSxcbltcImI1ODBcIixcIuelpOelpuelqeelquelq+elrOelruelsFwiLDYsXCLnpbnnpbtcIiw0LFwi56aC56aD56aG56aH56aI56aJ56aL56aM56aN56aO56aQ56aR56aS5oCg6IC95ouF5Li55Y2V6YO45o646IOG5pem5rCu5L2G5oOu5reh6K+e5by56JuL5b2T5oyh5YWa6I2h5qGj5YiA5o2j6LmI5YCS5bKb56W35a+85Yiw56i75oK86YGT55uX5b635b6X55qE6Lms54Gv55m7562J556q5Yez6YKT5aCk5L2O5ru06L+q5pWM56yb54uE5rak57+f5auh5oq15bqV5Zyw6JKC56ys5bid5byf6YCS57yU6aKg5o6C5ruH56KY54K55YW46Z2b5Z6r55S15L2D55S45bqX5oOm5aWg5reA5q6/56KJ5Y+86ZuV5YeL5YiB5o6J5ZCK6ZKT6LCD6LeM54i556Kf6J226L+t6LCN5Y+gXCJdLFxuW1wiYjY0MFwiLFwi56aTXCIsNixcIuemm1wiLDExLFwi56aoXCIsMTAsXCLnprRcIiw0LFwi56a856a/56eC56eE56eF56eH56eI56eK56eM56eO56eP56eQ56eT56eU56eW56eX56eZXCIsNSxcIuenoOenoeenouenpeenqOenqlwiXSxcbltcImI2ODBcIixcIuenrOenruensVwiLDYsXCLnp7nnp7rnp7znp77np7/nqIHnqITnqIXnqIfnqIjnqInnqIrnqIznqI9cIiw0LFwi56iV56iW56iY56iZ56ib56ic5LiB55uv5Y+u6ZKJ6aG26byO6ZSt5a6a6K6i5Lii5Lic5Yas6JGj5oeC5Yqo5qCL5L6X5oGr5Ya75rSe5YWc5oqW5paX6Zmh6LGG6YCX55eY6YO9552j5q+S54qK54us6K+75aC155256LWM5p2c6ZWA6IKa5bqm5rih5aaS56uv55+t6ZS75q615pat57yO5aCG5YWR6Zif5a+55aKp5ZCo6Lmy5pWm6aG/5Zuk6ZKd55u+6YGB5o6H5ZOG5aSa5aS65Z6b6Lqy5py16Le66Ii15YmB5oOw5aCV6Ju+5bOo6bmF5L+E6aKd6K655ail5oG25Y6E5om86YGP6YSC6aW/5oGp6ICM5YS/6ICz5bCU6aW15rSx5LqMXCJdLFxuW1wiYjc0MFwiLFwi56id56if56ih56ii56ikXCIsMTQsXCLnqLTnqLXnqLbnqLjnqLrnqL7nqYBcIiw1LFwi56mHXCIsOSxcIuepklwiLDQsXCLnqZhcIiwxNl0sXG5bXCJiNzgwXCIsXCLnqalcIiw2LFwi56mx56my56mz56m156m756m856m956m+56qC56qF56qH56qJ56qK56qL56qM56qO56qP56qQ56qT56qU56qZ56qa56qb56qe56qh56qi6LSw5Y+R572a562P5LyQ5LmP6ZiA5rOV54+Q6Jep5biG55Wq57+75qiK55++6ZKS57mB5Yeh54Om5Y+N6L+U6IyD6LSp54qv6aWt5rOb5Z2K6Iqz5pa56IKq5oi/6Ziy5aao5Lu/6K6/57q65pS+6I+y6Z2e5ZWh6aOe6IKl5Yyq6K+95ZCg6IK65bqf5rK46LS56Iqs6YWa5ZCp5rCb5YiG57q35Z2f54Sa5rG+57KJ5aWL5Lu95b+/5oSk57Kq5Liw5bCB5p6r6JyC5bOw6ZSL6aOO55av54O96YCi5Yav57yd6K695aWJ5Yek5L2b5ZCm5aSr5pW36IKk5a215om25ouC6L6Q5bmF5rCf56ym5LyP5L+Y5pyNXCJdLFxuW1wiYjg0MFwiLFwi56qj56qk56qn56qp56qq56qr56quXCIsNCxcIueqtFwiLDEwLFwi56uAXCIsMTAsXCLnq4xcIiw5LFwi56uX56uY56ua56ub56uc56ud56uh56ui56uk56unXCIsNSxcIuerruersOerseersuers1wiXSxcbltcImI4ODBcIixcIuertFwiLDQsXCLnq7vnq7znq77nrIDnrIHnrILnrIXnrIfnrInnrIznrI3nrI7nrJDnrJLnrJPnrJbnrJfnrJjnrJrnrJznrJ3nrJ/nrKHnrKLnrKPnrKfnrKnnrK3mta7mtqrnpo/oorHlvJfnlKvmiprovoXkv6/ph5zmlqfohK/ohZHlupzohZDotbTlia/opobotYvlpI3lgoXku5jpmJzniLbohbnotJ/lr4zorqPpmYTlpofnvJrlkpDlmbblmI7or6XmlLnmpoLpkpnnm5bmuonlubLnlJjmnYbmn5Hnq7/ogp3otbbmhJ/np4bmlaLotaPlhojliJrpkqLnvLjogpvnurLlspfmuK/mnaDnr5nnmovpq5joho/nvpTns5XmkJ7plZDnqL/lkYrlk6XmrYzmkIHmiIjpuL3og7PnlpnlibLpnanokZvmoLzom6TpmIHpmpTpk6zkuKrlkITnu5nmoLnot5/ogJXmm7TluprnvrlcIl0sXG5bXCJiOTQwXCIsXCLnrK/nrLDnrLLnrLTnrLXnrLbnrLfnrLnnrLvnrL3nrL9cIiw1LFwi562G562I562K562N562O562T562V562X562Z562c562e562f562h562jXCIsMTAsXCLnra/nrbDnrbPnrbTnrbbnrbjnrbrnrbznrb3nrb/nroHnroLnroPnroTnroZcIiw2LFwi566O566PXCJdLFxuW1wiYjk4MFwiLFwi566R566S566T566W566Y566Z566a566b566e566f566g566j566k566l566u566v566w566y566z5661566256635665XCIsNyxcIuevguevg+evhOWfguiAv+ail+W3peaUu+WKn+aBrem+muS+m+i6rOWFrOWuq+W8k+W3qeaxnuaLsei0oeWFsemSqeWLvuayn+iLn+eLl+WeouaehOi0reWkn+i+nOiPh+WSleeujeS8sOayveWtpOWnkem8k+WPpOibiumqqOiwt+iCoeaVhemhvuWbuumbh+WIrueTnOWJkOWvoeaMguikguS5luaLkOaAquajuuWFs+WumOWGoOingueuoemmhue9kOaDr+eBjOi0r+WFieW5v+mAm+eRsOinhOWcreehheW9kum+n+mXuui9qOmsvOivoeeZuOahguafnOi3qui0teWIvei+iua7muajjemUhemDreWbveaenOijuei/h+WTiFwiXSxcbltcImJhNDBcIixcIuevheeviOevieeviuevi+evjeevjuevj+evkOevkuevlFwiLDQsXCLnr5vnr5znr57nr5/nr6Dnr6Lnr6Pnr6Tnr6fnr6jnr6nnr6vnr6znr63nr6/nr7Dnr7JcIiw0LFwi56+456+556+656+756+956+/XCIsNyxcIuewiOewieewiuewjeewjuewkFwiLDUsXCLnsJfnsJjnsJlcIl0sXG5bXCJiYTgwXCIsXCLnsJpcIiw0LFwi57CgXCIsNSxcIuewqOewqeewq1wiLDEyLFwi57C5XCIsNSxcIuexgumquOWtqea1t+awpuS6peWus+mqh+mFo+aGqOmCr+mfqeWQq+a2teWvkuWHveWWiue9lee/sOaSvOaNjeaXseaGvuaCjeeEiuaxl+axieWkr+adreiIquWjleWajuixquavq+mDneWlveiAl+WPt+a1qeWRteWWneiNt+iPj+aguOemvuWSjOS9leWQiOebkuiyiemYguays+a2uOi1q+ikkOm5pOi0uuWYv+m7keeXleW+iOeLoOaBqOWTvOS6qOaoquihoeaBkui9sOWThOeDmOiZuem4v+a0quWuj+W8mOe6ouWWieS+r+eMtOWQvOWOmuWAmeWQjuWRvOS5juW/veeRmuWjtuiRq+iDoeidtOeLkOeziua5llwiXSxcbltcImJiNDBcIixcIuexg1wiLDksXCLnsY5cIiwzNixcIuextVwiLDUsXCLnsb5cIiw5XSxcbltcImJiODBcIixcIueyiOeyilwiLDYsXCLnspPnspTnspbnspnnsprnspvnsqDnsqHnsqPnsqbnsqfnsqjnsqnnsqvnsqznsq3nsq/nsrDnsrRcIiw0LFwi57K657K75byn6JmO5ZSs5oqk5LqS5rKq5oi36Iqx5ZOX5Y2O54y+5ruR55S75YiS5YyW6K+d5qeQ5b6K5oCA5reu5Z2P5qyi546v5qGT6L+Y57yT5o2i5oKj5ZSk55eq6LGi54SV5raj5a6m5bm76I2S5oWM6buE56O66J2X57Cn55qH5Yew5oO254WM5pmD5bmM5oGN6LCO54Gw5oyl6L6J5b695oGi6JuU5Zue5q+B5oKU5oWn5Y2J5oOg5pmm6LS/56e95Lya54Op5rGH6K6z6K+y57uY6I2k5piP5ama6a2C5rWR5re36LGB5rS75LyZ54Gr6I635oiW5oOR6ZyN6LSn56W45Ye75Zy+5Z+65py655W456i956ev566VXCJdLFxuW1wiYmM0MFwiLFwi57K/57OA57OC57OD57OE57OG57OJ57OL57OOXCIsNixcIuezmOezmuezm+ezneeznuezoVwiLDYsXCLns6lcIiw1LFwi57OwXCIsNyxcIuezueezuuezvFwiLDEzLFwi57SLXCIsNV0sXG5bXCJiYzgwXCIsXCLntJFcIiwxNCxcIue0oee0o+e0pOe0pee0pue0qOe0qee0que0rOe0ree0rue0sFwiLDYsXCLogozppaXov7nmv4DorqXpuKHlp6znu6nnvInlkInmnoHmo5jovpHnsY3pm4blj4rmgKXnlr7msbLljbPlq4nnuqfmjKTlh6DohIrlt7Hok5/mioDlhoDlraPkvI7npa3liYLmgrjmtY7lr4Tlr4LorqHorrDml6Llv4zpmYXlppPnu6fnuqrlmInmnrflpLnkvbPlrrbliqDojZrpoorotL7nlLLpkr7lgYfnqLzku7fmnrbpqb7lq4Hmrbznm5HlnZrlsJbnrLrpl7TnhY7lhbzogqnoibDlpbjnvITojKfmo4Dmn6znorHnobfmi6PmjaHnroDkv63liarlh4/ojZDmp5vpibTot7XotLHop4HplK7nrq3ku7ZcIl0sXG5bXCJiZDQwXCIsXCLntLdcIiw1NCxcIue1r1wiLDddLFxuW1wiYmQ4MFwiLFwi57W4XCIsMzIsXCLlgaXoiLDliZHppa/muJDmuoXmtqflu7rlg7Xlp5zlsIbmtYbmsZ/nlobokovmoajlpZborrLljKDphbHpmY3olYnmpJLnpIHnhKbog7bkuqTpg4rmtYfpqoTlqIflmrzmkIXpk7Dnn6vkvqXohJrni6Hop5LppbrnvLTnu57lib/mlZnphbXovb/ovoPlj6vnqpbmj63mjqXnmobnp7jooZfpmLbmiKrliqvoioLmoZTmnbDmjbfnnavnq63mtIHnu5Pop6Plp5DmiJLol4noiqXnlYzlgJ/ku4vnlqXor6vlsYrlt77nrYvmlqTph5Hku4rmtKXopZ/ntKfplKbku4XosKjov5vpnbPmmYvnpoHov5Hng6zmtbhcIl0sXG5bXCJiZTQwXCIsXCLntplcIiwxMixcIue2p1wiLDYsXCLntq9cIiw0Ml0sXG5bXCJiZTgwXCIsXCLnt5pcIiwzMixcIuWwveWKsuiNhuWFouiMjuedm+aZtumyuOS6rOaDiueyvueys+e7j+S6leitpuaZr+miiOmdmeWig+aVrOmVnOW+hOeXiemdluern+ernuWHgOeCr+eqmOaPqueptue6oOeOlumfreS5heeBuOS5nemFkuWOqeaVkeaXp+iHvOiIheWSjuWwseeWmumeoOaLmOeLmeeWveWxhempueiPiuWxgOWSgOefqeS4vuayruiBmuaLkuaNruW3qOWFt+i3nei4numUr+S/seWPpeaDp+eCrOWJp+aNkOm5g+Won+WApuect+WNt+e7ouaSheaUq+aKieaOmOWAlOeIteinieWGs+ivgOe7neWdh+iPjOmSp+WGm+WQm+Wzu1wiXSxcbltcImJmNDBcIixcIue3u1wiLDYyXSxcbltcImJmODBcIixcIue4uue4vFwiLDQsXCLnuYJcIiw0LFwi57mIXCIsMjEsXCLkv4rnq6PmtZrpg6Hpqo/lloDlkpbljaHlkq/lvIDmj6nmpbflh6/mhajliIrloKrli5jlnY7noI3nnIvlurfmhbfns6DmiZvmipfkuqLngpXogIPmi7fng6TpnaDlnbfoi5vmn6/mo7Xno5Xpopfnp5Hlo7PlkrPlj6/muLTlhYvliLvlrqLor77ogq/llYPlnqbmgbPlnZHlkK3nqbrmgZDlrZTmjqfmiqDlj6PmiaPlr4fmnq/lk63nqp/oi6bphbflupPoo6TlpLjlnq7mjI7ot6jog6/lnZfnrbfkvqnlv6vlrr3mrL7ljKHnrZDni4LmoYbnn7/nnLbml7flhrXkuo/nm5Tlsr/nqqXokbXlpY7prYHlgoBcIl0sXG5bXCJjMDQwXCIsXCLnuZ5cIiwzNSxcIue6g1wiLDIzLFwi57qc57qd57qeXCJdLFxuW1wiYzA4MFwiLFwi57qu57q057q757q857uW57uk57us57u557yK57yQ57ye57y357y557y7XCIsNixcIue9g+e9hlwiLDksXCLnvZLnvZPppojmhKfmuoPlnaTmmIbmjYblm7Dmi6zmianlu5PpmJTlnoPmi4nllofonKHohYrovqPllabojrHmnaXotZbok53lqarmoI/mi6bnr67pmJHlhbDmvpzosLDmj73op4jmh5LnvIbng4Lmu6XnkIXmppTni7zlu4rpg47mnJfmtarmjZ7lirPniaLogIHkvazlp6Xpharng5nmtp3li5LkuZDpm7fpla3olb7no4rntK/lhKHlnpLmk4Logovnsbvms6rmo7HmpZ7lhrfljpjmoqjnioHpu47nr7Hni7jnprvmvJPnkIbmnY7ph4zpsqTnpLzojonojZTlkI/moJfkuL3ljonlirHnoL7ljobliKnlgojkvovkv5BcIl0sXG5bXCJjMTQwXCIsXCLnvZbnvZnnvZvnvZznvZ3nvZ7nvaDnvaNcIiw0LFwi572r572s572t572v572w572z57215722572357245726572757285729572/576A576CXCIsNyxcIue+i+e+jee+j1wiLDQsXCLnvpVcIiw0LFwi576b576c576g576i576j576l576m576oXCIsNixcIue+sVwiXSxcbltcImMxODBcIixcIue+s1wiLDQsXCLnvrrnvrvnvr7nv4Dnv4Lnv4Pnv4Tnv4bnv4fnv4jnv4nnv4vnv43nv49cIiw0LFwi57+W57+X57+ZXCIsNSxcIue/oue/o+eXoueri+eykuaypematuWKm+eSg+WTqeS/qeiBlOiOsui/numVsOW7ieaAnOa2n+W4mOaVm+iEuOmTvuaBi+eCvOe7g+eyruWHieaigeeyseiJr+S4pOi+humHj+aZvuS6ruiwheaSqeiBiuWDmueWl+eHjuWvpei+vea9puS6huaSgumVo+W7luaWmeWIl+ijgueDiOWKo+eMjueQs+ael+ejt+mcluS4tOmCu+mznua3i+WHm+i1geWQneaLjueOsuiPsembtum+hOmTg+S8tue+muWHjOeBtemZteWyremihuWPpuS7pOa6nOeQieamtOehq+mmj+eVmeWImOeYpOa1geafs+WFrem+meiBi+WSmeesvOeqv1wiXSxcbltcImMyNDBcIixcIue/pOe/p+e/qOe/que/q+e/rOe/ree/r+e/sue/tFwiLDYsXCLnv73nv77nv7/ogILogIfogIjogInogIrogI7ogI/ogJHogJPogJrogJvogJ3ogJ7ogJ/ogKHogKPogKTogKtcIiw1LFwi6ICy6IC06IC56IC66IC86IC+6IGA6IGB6IGE6IGF6IGH6IGI6IGJ6IGO6IGP6IGQ6IGR6IGT6IGV6IGW6IGXXCJdLFxuW1wiYzI4MFwiLFwi6IGZ6IGbXCIsMTMsXCLogatcIiw1LFwi6IGyXCIsMTEsXCLpmoblnoTmi6LpmYfmpbzlqITmkILnr5PmvI/pmYvoiqbljaLpooXlupDngonmjrPljaTomY/psoHpupPnoozpnLLot6/otYLpub/mvZ7npoTlvZXpmYbmiK7pqbTlkJXpk53kvqPml4XlsaXlsaHnvJXomZHmsK/lvovnjofmu6Tnu7/ls6bmjJvlrarmu6bljbXkubHmjqDnlaXmiqHova7kvKbku5HmsqbnurborrrokJ3onrrnvZfpgLvplKPnrqnpqqHoo7jokL3mtJvpqobnu5zlpojpurvnjpvnoIHomoLpqazpqoLlmJvlkJfln4vkubDpuqbljZbov4johInnnpLpppLom67mu6HolJPmm7zmhaLmvKtcIl0sXG5bXCJjMzQwXCIsXCLogb7ogoHogoLogoXogojogorogo1cIiw1LFwi6IKU6IKV6IKX6IKZ6IKe6IKj6IKm6IKn6IKo6IKs6IKw6IKz6IK16IK26IK46IK56IK76IOF6IOHXCIsNCxcIuiDj1wiLDYsXCLog5jog5/og6Dog6Log6Pog6bog67og7Xog7fog7nog7vog77og7/ohIDohIHohIPohITohIXohIfohIjohItcIl0sXG5bXCJjMzgwXCIsXCLohIzohJXohJfohJnohJvohJzohJ3ohJ9cIiwxMixcIuiEreiEruiEsOiEs+iEtOiEteiEt+iEuVwiLDQsXCLohL/osKnoipLojKvnm7LmsJPlv5nojr3njKvojIXplJrmr5vnn5vpk4blja/ojILlhpLluL3osozotLjkuYjnjqvmnprmooXphbbpnInnhaTmsqHnnInlqpLplYHmr4/nvo7mmKflr5Dlprnlqprpl6jpl7fku6zokIzokpnmqqznm5/plLDnjJvmoqblrZ/nnK/phprpnaHns5zov7fosJzlvKXnsbPnp5jop4Xms4zonJzlr4bluYLmo4nnnKDnu7XlhpXlhY3li4nlqKnnvIXpnaLoi5fmj4/nnoTol5Dnp5LmuLrlupnlppnolJHnga3msJHmir/nmr/mlY/mgq/pl73mmI7onp/puKPpk63lkI3lkb3osKzmkbhcIl0sXG5bXCJjNDQwXCIsXCLohYBcIiw1LFwi6IWH6IWJ6IWN6IWO6IWP6IWS6IWW6IWX6IWY6IWbXCIsNCxcIuiFoeiFouiFo+iFpOiFpuiFqOiFquiFq+iFrOiFr+iFsuiFs+iFteiFtuiFt+iFuOiGgeiGg1wiLDQsXCLohonohovohozoho3oho7ohpDohpJcIiw1LFwi6IaZ6Iaa6IaeXCIsNCxcIuiGpOiGpVwiXSxcbltcImM0ODBcIixcIuiGp+iGqeiGq1wiLDcsXCLohrRcIiw1LFwi6Ia86Ia96Ia+6Ia/6IeE6IeF6IeH6IeI6IeJ6IeL6IeNXCIsNixcIuaRueiYkeaooeiGnOejqOaRqemtlOaKueacq+iOq+WiqOm7mOayq+a8oOWvnumZjOiwi+eJn+afkOaLh+eJoeS6qeWnhuavjeWik+aaruW5leWLn+aFleacqOebruedpueJp+ephuaLv+WTquWRkOmSoOmCo+WonOe6s+awluS5g+WltuiAkOWliOWNl+eUt+mavuWbiuaMoOiEkeaBvOmXuea3luWRoummgeWGheWrqeiDveWmrumck+WAquazpeWwvOaLn+S9oOWMv+iFu+mAhua6uuiUq+aLiOW5tOeivuaSteaNu+W/teWomOmFv+m4n+Wwv+aNj+iBguWtveWVrumViumVjea2heaCqOafoOeLnuWHneWugVwiXSxcbltcImM1NDBcIixcIuiHlFwiLDE0LFwi6Iek6Iel6Iem6Ieo6Iep6Ier6IeuXCIsNCxcIuiHtVwiLDUsXCLoh73oh7/oiIPoiIdcIiw0LFwi6IiO6IiP6IiR6IiT6IiVXCIsNSxcIuiIneiIoOiIpOiIpeiIpuiIp+iIqeiIruiIsuiIuuiIvOiIveiIv1wiXSxcbltcImM1ODBcIixcIuiJgOiJgeiJguiJg+iJheiJhuiJiOiJiuiJjOiJjeiJjuiJkFwiLDcsXCLoiZnoiZvoiZzoiZ3oiZ7oiaBcIiw3LFwi6Imp5oun5rOe54mb5omt6ZKu57q96IST5rWT5Yac5byE5aW05Yqq5oCS5aWz5pqW6JmQ55af5oyq5oem57Ov6K+65ZOm5qyn6bil5q606JeV5ZGV5YG25rKk5ZWq6La054is5biV5oCV55C25ouN5o6S54mM5b6Y5rmD5rS+5pSA5r2Y55uY56OQ55u855WU5Yik5Y+b5LmT5bqe5peB6ICq6IOW5oqb5ZKG5Yio54Ku6KKN6LeR5rOh5ZG46IOa5Z+56KO06LWU6Zmq6YWN5L2p5rKb5Za355uG56Cw5oqo54O55r6O5b2t6JOs5qOa56G856+36Iao5pyL6bmP5o2n56Kw5Z2v56CS6Zy55om55oqr5YqI55C15q+XXCJdLFxuW1wiYzY0MFwiLFwi6Imq6Imr6Ims6Imt6Imx6Im16Im26Im36Im46Im76Im86IqA6IqB6IqD6IqF6IqG6IqH6IqJ6IqM6IqQ6IqT6IqU6IqV6IqW6Iqa6Iqb6Iqe6Iqg6Iqi6Iqj6Iqn6Iqy6Iq16Iq26Iq66Iq76Iq86Iq/6IuA6IuC6IuD6IuF6IuG6IuJ6IuQ6IuW6IuZ6Iua6Iud6Iui6Iun6Iuo6Iup6Iuq6Ius6Iut6Iuu6Iuw6Iuy6Iuz6Iu16Iu26Iu4XCJdLFxuW1wiYzY4MFwiLFwi6Iu66Iu8XCIsNCxcIuiMiuiMi+iMjeiMkOiMkuiMk+iMluiMmOiMmeiMnVwiLDksXCLojKnojKrojK7ojLDojLLojLfojLvojL3llaTohL7nlrLnmq7ljLnnl57lg7vlsYHoraznr4flgY/niYfpqpfpo5jmvILnk6LnpajmkofnnqXmi7zpopHotKvlk4HogZjkuZLlnaroi7nokI3lubPlh63nk7bor4TlsY/lnaHms7zpooflqYbnoLTprYTov6vnspXliZbmiZHpk7rku4bojobokaHoj6nokrLln5TmnLTlnIPmma7mtabosLHmm53ngJHmnJ/mrLrmoJbmiJrlprvkuIPlh4TmvIbmn5Lmso/lhbbmo4vlpYfmrafnlabltI7ohJDpvZDml5fnpYjnpYHpqpHotbflsoLkuZ7kvIHlkK/lpZHnoIzlmajmsJTov4TlvIPmsb3ms6PorqvmjpBcIl0sXG5bXCJjNzQwXCIsXCLojL7ojL/ojYHojYLojYTojYXojYjojYpcIiw0LFwi6I2T6I2VXCIsNCxcIuiNneiNouiNsFwiLDYsXCLojbnojbrojb5cIiw2LFwi6I6H6I6I6I6K6I6L6I6M6I6N6I6P6I6Q6I6R6I6U6I6V6I6W6I6X6I6Z6I6a6I6d6I6f6I6hXCIsNixcIuiOrOiOreiOrlwiXSxcbltcImM3ODBcIixcIuiOr+iOteiOu+iOvuiOv+iPguiPg+iPhOiPhuiPiOiPieiPi+iPjeiPjuiPkOiPkeiPkuiPk+iPleiPl+iPmeiPmuiPm+iPnuiPouiPo+iPpOiPpuiPp+iPqOiPq+iPrOiPreaBsOa0veeJteaJpumSjumTheWNg+i/geetvuS7n+iwpuS5vum7lOmSsemSs+WJjea9nOmBo+a1heiwtOWgkeW1jOasoOatieaequWRm+iFlOe+jOWimeiUt+W8uuaKouaph+mUueaVsuaChOahpeeep+S5lOS+qOW3p+memOaSrOe/mOWzreS/j+eqjeWIh+iMhOS4lOaAr+eqg+mSpuS+teS6suenpueQtOWLpOiKueaTkuemveWvneaygemdkui9u+awouWAvuWNv+a4heaTjuaZtOawsOaDhemht+ivt+W6hueQvOept+eni+S4mOmCseeQg+axguWbmumFi+azhei2i+WMuuibhuabsui6r+WxiOmpsea4oFwiXSxcbltcImM4NDBcIixcIuiPruiPr+iPs1wiLDQsXCLoj7roj7voj7zoj77oj7/okIDokILokIXokIfokIjokInokIrokJDokJJcIiw1LFwi6JCZ6JCa6JCb6JCeXCIsNSxcIuiQqVwiLDcsXCLokLJcIiw1LFwi6JC56JC66JC76JC+XCIsNyxcIuiRh+iRiOiRiVwiXSxcbltcImM4ODBcIixcIuiRilwiLDYsXCLokZJcIiw0LFwi6JGY6JGd6JGe6JGf6JGg6JGi6JGkXCIsNCxcIuiRquiRruiRr+iRsOiRsuiRtOiRt+iRueiRu+iRvOWPluWotum+i+i2o+WOu+WciOmip+adg+mGm+azieWFqOeXiuaLs+eKrOWIuOWKnee8uueClOeYuOWNtOm5iuamt+ehrumbgOijmee+pOeEtueHg+WGieafk+eTpOWjpOaUmOWat+iuqemltuaJsOe7leaDueeDreWjrOS7geS6uuW/jemfp+S7u+iupOWIg+Wmiue6q+aJlOS7jeaXpeaIjuiMuOiTieiNo+iejeeGlOa6tuWuuee7kuWGl+aPieaflOiCieiMueigleWEkuWtuuWmgui+seS5s+axneWFpeikpei9r+mYruiViueRnumUkOmXsOa2puiLpeW8seaSkua0kuiQqOiFrumzg+Whnui1m+S4ieWPgVwiXSxcbltcImM5NDBcIixcIuiRvVwiLDQsXCLokoPokoTokoXokobokoroko3oko9cIiw3LFwi6JKY6JKa6JKb6JKd6JKe6JKf6JKg6JKiXCIsMTIsXCLokrDokrHokrPokrXokrbokrfokrvokrzokr7ok4Dok4Lok4Pok4Xok4bok4fok4jok4vok4zok47ok4/ok5Lok5Tok5Xok5dcIl0sXG5bXCJjOTgwXCIsXCLok5hcIiw0LFwi6JOe6JOh6JOi6JOk6JOnXCIsNCxcIuiTreiTruiTr+iTsVwiLDEwLFwi6JO96JO+6JSA6JSB6JSC5Lye5pWj5qGR5ZeT5Lin5pCU6aqa5omr5auC55Gf6Imy5rap5qOu5YOn6I6O56CC5p2A5Yi55rKZ57qx5YK75ZWl54We562b5pmS54+K6Iur5p2J5bGx5Yig54W96KGr6Zeq6ZmV5pOF6LWh6Iaz5ZaE5rGV5omH57yu5aKS5Lyk5ZWG6LWP5pmM5LiK5bCa6KOz5qKi5o2O56iN54On6IqN5Yu66Z+25bCR5ZOo6YK157uN5aWi6LWK6JuH6IiM6IiN6LWm5pGE5bCE5oWR5raJ56S+6K6+56C355Sz5ZG75Ly46Lqr5rex5aig57uF56We5rKI5a6h5am255Sa6IK+5oWO5riX5aOw55Sf55Sl54my5Y2H57uzXCJdLFxuW1wiY2E0MFwiLFwi6JSDXCIsOCxcIuiUjeiUjuiUj+iUkOiUkuiUlOiUleiUluiUmOiUmeiUm+iUnOiUneiUnuiUoOiUolwiLDgsXCLolK1cIiw5LFwi6JS+XCIsNCxcIuiVhOiVheiVhuiVh+iVi1wiLDEwXSxcbltcImNhODBcIixcIuiVl+iVmOiVmuiVm+iVnOiVneiVn1wiLDQsXCLolaXolabolafolalcIiw4LFwi6JWz6JW16JW26JW36JW46JW86JW96JW/6JaA6JaB55yB55ub5Ymp6IOc5Zyj5biI5aSx54uu5pa95rm/6K+X5bC46Jmx5Y2B55+z5ou+5pe25LuA6aOf6JqA5a6e6K+G5Y+y55+i5L2/5bGO6am25aeL5byP56S65aOr5LiW5p+/5LqL5out6KqT6YCd5Yq/5piv5Zec5Zms6YCC5LuV5L6N6YeK6aWw5rCP5biC5oGD5a6k6KeG6K+V5pS25omL6aaW5a6I5a+/5o6I5ZSu5Y+X55im5YW96JSs5p6i5qKz5q6K5oqS6L6T5Y+U6IiS5reR55aP5Lmm6LWO5a2w54af6Jav5pqR5puZ572y6JyA6buN6byg5bGe5pyv6L+w5qCR5p2f5oiN56uW5aKF5bq25pWw5ryxXCJdLFxuW1wiY2I0MFwiLFwi6JaC6JaD6JaG6JaIXCIsNixcIuiWkFwiLDEwLFwi6JadXCIsNixcIuiWpeiWpuiWp+iWqeiWq+iWrOiWreiWsVwiLDUsXCLolrjolrpcIiw2LFwi6JeCXCIsNixcIuiXilwiLDQsXCLol5Hol5JcIl0sXG5bXCJjYjgwXCIsXCLol5Tol5ZcIiw1LFwi6JedXCIsNixcIuiXpeiXpuiXp+iXqOiXqlwiLDE0LFwi5oGV5Yi36ICN5pGU6KGw55Sp5biF5qCT5ou06Zyc5Y+M54i96LCB5rC0552h56iO5ZCu556s6aG66Iic6K+056GV5pyU54OB5pav5pKV5Zi25oCd56eB5Y+45Lid5q276IKG5a+65Zej5Zub5Ly65Ly86aWy5bez5p2+6IC45oCC6aKC6YCB5a6L6K686K+15pCc6ImY5pOe5Ze96IuP6YWl5L+X57Sg6YCf57Kf5YOz5aGR5rqv5a6/6K+J6IKD6YW46JKc566X6Jm96ZqL6ZqP57ul6auT56KO5bKB56mX6YGC6Zqn56Wf5a2Z5o2f56yL6JOR5qKt5ZSG57yp55CQ57Si6ZSB5omA5aGM5LuW5a6D5aW55aGUXCJdLFxuW1wiY2M0MFwiLFwi6Je56Je66Je86Je96Je+6JiAXCIsNCxcIuiYhlwiLDEwLFwi6JiS6JiT6JiU6JiV6JiXXCIsMTUsXCLomKjomKpcIiwxMyxcIuiYueiYuuiYu+iYveiYvuiYv+iZgFwiXSxcbltcImNjODBcIixcIuiZgVwiLDExLFwi6JmS6JmT6JmVXCIsNCxcIuiZm+iZnOiZneiZn+iZoOiZoeiZo1wiLDcsXCLnja3mjJ7ouYvouI/og47oi5Tmiqzlj7Dms7DphZ7lpKrmgIHmsbDlnY3mkYrotKrnmKvmu6nlnZvmqoDnl7Dmva3osK3osIjlnabmr6/oopLnorPmjqLlj7nngq3msaTloZjmkKrloILmo6DohpvllJDns5blgJjourrmt4zotp/ng6vmjo/mtpvmu5Tnu6bokITmoYPpgIPmt5jpmbborqjlpZfnibnol6Tohb7nlrzoqormoq/liZTouKLplJHmj5DpopjouYTllbzkvZPmm7/lmo/mg5XmtpXliYPlsYnlpKnmt7vloavnlLDnlJzmgazoiJTohYbmjJHmnaHov6LnnLrot7PotLTpk4HluJbljoXlkKzng4NcIl0sXG5bXCJjZDQwXCIsXCLoma3oma/ombDombJcIiw2LFwi6JqDXCIsNixcIuiajlwiLDQsXCLompTompZcIiw1LFwi6JqeXCIsNCxcIuiapeiapuiaq+iareiaruiasuias+iat+iauOiaueiau1wiLDQsXCLom4Hom4Lom4Pom4Xom4jom4zom43om5Lom5Pom5Xom5bom5fom5rom5xcIl0sXG5bXCJjZDgwXCIsXCLom53om6Dom6Hom6Lom6Pom6Xom6bom6fom6jom6rom6vom6zom6/om7Xom7bom7fom7rom7vom7zom73om7/onIHonITonIXonIbonIvonIzonI7onI/onJDonJHonJTonJbmsYDlu7flgZzkuq3luq3mjLroiYfpgJrmoZDpha7nnrPlkIzpk5zlvaTnq6XmobbmjYXnrZLnu5/nl5vlgbfmipXlpLTpgI/lh7jnp4PnqoHlm77lvpLpgJTmtoLlsaDlnJ/lkJDlhZTmuY3lm6LmjqjpopPohb/onJXopKrpgIDlkJ7lsa/oh4Dmi5bmiZjohLHpuLXpmYDpqa7pqbzmpK3lpqXmi5PllL7mjJblk4fom5nmtLzlqIPnk6boopzmrarlpJbosYzlvK/mub7njqnpob3kuLjng7flroznopfmjL3mmZrnmpbmg4vlrpvlqYnkuIfohZXmsarnjovkuqHmnonnvZHlvoDml7rmnJvlv5jlpoTlqIFcIl0sXG5bXCJjZTQwXCIsXCLonJnonJvonJ3onJ/onKDonKTonKbonKfonKjonKronKvonKzonK3onK/onLDonLLonLPonLXonLbonLjonLnonLronLzonL3onYBcIiw2LFwi6J2K6J2L6J2N6J2P6J2Q6J2R6J2S6J2U6J2V6J2W6J2Y6J2aXCIsNSxcIuidoeidouidplwiLDcsXCLona/onbHonbLonbPonbVcIl0sXG5bXCJjZTgwXCIsXCLonbfonbjonbnonbronb/onoDonoHonoTonobonofonononoronozono5cIiw0LFwi6J6U6J6V6J6W6J6YXCIsNixcIuieoFwiLDQsXCLlt43lvq7ljbHpn6bov53moYXlm7TllK/mg5/kuLrmvY3nu7Toi4fokI7lp5TkvJ/kvKrlsL7nuqzmnKrolJrlkbPnlY/og4PlloLprY/kvY3muK3osJPlsInmhbDljavnmJ/muKnomormlofpl7vnurnlkLvnqLPntIrpl67ll6Hnv4Hnk67mjJ3onJfmtqHnqp3miJHmlqHljafmj6HmsoPlt6vlkZzpkqjkuYzmsaHor6zlsYvml6DoipzmoqflkL7lkLTmr4vmrabkupTmjYLljYjoiJ7kvI3kvq7lnZ7miIrpm77mmaTnianli7/liqHmgp/or6/mmJTnhpnmnpDopb/noZLnn73mmbDlmLvlkLjplKHnibpcIl0sXG5bXCJjZjQwXCIsXCLonqXonqbonqfonqnonqronq7onrDonrHonrLonrTonrbonrfonrjonrnonrvonrzonr7onr/on4FcIiw0LFwi6J+H6J+I6J+J6J+MXCIsNCxcIuiflFwiLDYsXCLon5zon53on57on5/on6Hon6Lon6Pon6Ton6bon6fon6jon6non6von6zon63on69cIiw5XSxcbltcImNmODBcIixcIuifuuifu+ifvOifveifv+iggOiggeigguighFwiLDUsXCLooItcIiw3LFwi6KCU6KCX6KCY6KCZ6KCa6KCcXCIsNCxcIuigo+eogOaBr+W4jOaCieiGneWkleaDnOeGhOeDr+a6quaxkOeKgOaqhOiireW4reS5oOWqs+WWnOmTo+a0l+ezu+mameaIj+e7hueejuiZvuWMo+mcnui+luaah+WzoeS+oOeLreS4i+WOpuWkj+WQk+aOgOmUqOWFiOS7memynOe6pOWSuOi0pOihlOiIt+mXsua2juW8puWrjOaYvumZqeeOsOeMruWOv+iFuummhee+oeWuqumZt+mZkOe6v+ebuOWOoumVtummmeeuseilhOa5mOS5oee/lOelpeivpuaDs+WTjeS6q+mhueW3t+apoeWDj+WQkeixoeiQp+ehnemchOWJiuWTruWao+mUgOa2iOWutea3huaZk1wiXSxcbltcImQwNDBcIixcIuigpFwiLDEzLFwi6KCzXCIsNSxcIuiguuigu+igveigvuigv+ihgeihguihg+ihhlwiLDUsXCLooY5cIiw1LFwi6KGV6KGW6KGY6KGaXCIsNixcIuihpuihp+ihquihreihr+ihseihs+ihtOihteihtuihuOihueihulwiXSxcbltcImQwODBcIixcIuihu+ihvOiigOiig+iihuiih+iiieiiiuiijOiijuiij+iikOiikeiik+iilOiileiil1wiLDQsXCLoop1cIiw0LFwi6KKj6KKlXCIsNSxcIuWwj+WtneagoeiCluWVuOeskeaViOallOS6m+ath+idjumei+WNj+aMn+aQuumCquaWnOiDgeiwkOWGmeaisOWNuOifueaHiOazhOazu+iwouWxkeiWquiKr+mUjOaso+i+m+aWsOW/u+W/g+S/oeihheaYn+iFpeeMqeaDuuWFtOWIkeWei+W9oumCouihjOmGkuW5uOadj+aAp+Wnk+WFhOWHtuiDuOWMiOaxuembhOeGiuS8keS/rue+nuacveWXhemUiOengOiilue7o+Win+aIjOmcgOiZmuWYmOmhu+W+kOiuuOiThOmFl+WPmeaXreW6j+eVnOaBpOe1ruWpv+e7que7rei9qeWWp+Wuo+aCrOaXi+eOhFwiXSxcbltcImQxNDBcIixcIuiirOiiruiir+iisOiislwiLDQsXCLoorjoornoorroorvoor3oor7oor/oo4Doo4Poo4Too4foo4joo4roo4voo4zoo43oo4/oo5Doo5Hoo5Poo5boo5foo5pcIiw0LFwi6KOg6KOh6KOm6KOn6KOpXCIsNixcIuijsuijteijtuijt+ijuuiju+ijveijv+ikgOikgeikg1wiLDVdLFxuW1wiZDE4MFwiLFwi6KSJ6KSLXCIsNCxcIuikkeiklFwiLDQsXCLopJxcIiw0LFwi6KSi6KSj6KSk6KSm6KSn6KSo6KSp6KSs6KSt6KSu6KSv6KSx6KSy6KSz6KS16KS36YCJ55mj55yp57ua6Z206Jab5a2m56m06Zuq6KGA5YuL54aP5b6q5pes6K+i5a+76amv5beh5q6J5rGb6K6t6K6v6YCK6L+F5Y6L5oq86bim6bit5ZGA5Lir6Iq954mZ6Jqc5bSW6KGZ5rav6ZuF5ZOR5Lqa6K6254SJ5ZK96ZiJ54Of5re555uQ5Lil56CU6JyS5bKp5bu26KiA6aKc6ZiO54KO5rK/5aWE5o6p55y86KGN5ryU6Imz5aCw54eV5Y6M56Ca6ZuB5ZSB5b2m54Sw5a606LCa6aqM5q6D5aSu6biv56en5p2o5oms5L2v55ah576K5rSL6Ziz5rCn5Luw55eS5YW75qC35ry+6YKA6IWw5aaW55G2XCJdLFxuW1wiZDI0MFwiLFwi6KS4XCIsOCxcIuilguilg+ilhVwiLDI0LFwi6KWgXCIsNSxcIuilp1wiLDE5LFwi6KW8XCJdLFxuW1wiZDI4MFwiLFwi6KW96KW+6KaA6KaC6KaE6KaF6KaHXCIsMjYsXCLmkYflsKfpgaXnqpHosKPlp5rlkqzoiIDoja/opoHogIDmpLDlmY7ogLbniLfph47lhrbkuZ/pobXmjpbkuJrlj7bmm7PohYvlpJzmtrLkuIDlo7nljLvmj5bpk7Hkvp3kvIrooaPpopDlpLfpgZfnp7vku6rog7DnlpHmsoLlrpzlp6jlvZ3mpIXomoHlgJrlt7LkuZnnn6Pku6XoibrmipHmmJPpgpHlsbnkur/lvbnoh4bpgLjogoTnlqvkuqboo5TmhI/mr4Xlv4bkuYnnm4rmuqLor6Porq7osIror5HlvILnv7znv4znu47ojLXojavlm6Dmrrfpn7PpmLTlp7vlkJ/pk7bmt6vlr4Xppa7lsLnlvJXpmpBcIl0sXG5bXCJkMzQwXCIsXCLopqJcIiwzMCxcIuing+injeink+inlOinleinl+inmOinmeinm+inneinn+inoOinoeinouinpOinp+inqOinqeinquinrOinreinruinsOinseinsuintFwiLDZdLFxuW1wiZDM4MFwiLFwi6Ke7XCIsNCxcIuiogVwiLDUsXCLoqIhcIiwyMSxcIuWNsOiLseaoseWptOm5sOW6lOe8qOiOueiQpOiQpeiNp+idh+i/jui1ouebiOW9semiluehrOaYoOWTn+aLpeS9o+iHg+eXiOW6uOmbjei4iuibueWSj+azs+a2jOawuOaBv+WLh+eUqOW5veS8mOaCoOW/p+WwpOeUsemCrumTgOeKueayuea4uOmFieacieWPi+WPs+S9kemHieivseWPiOW5vOi/gua3pOS6juebguamhuiZnuaEmuiIhuS9meS/numAvumxvOaEiea4nea4lOmaheS6iOWosembqOS4juWxv+emueWuh+ivree+veeOieWfn+iKi+mDgeWQgemBh+WWu+WzquW+oeaEiOassueLseiCsuiqiVwiXSxcbltcImQ0NDBcIixcIuionlwiLDMxLFwi6Ki/XCIsOCxcIuipiVwiLDIxXSxcbltcImQ0ODBcIixcIuipn1wiLDI1LFwi6Km6XCIsNixcIua1tOWvk+ijlemihOixq+mprem4s+a4iuWGpOWFg+Weo+iigeWOn+aPtOi+leWbreWRmOWchueMv+a6kOe8mOi/nOiLkeaEv+aAqOmZouabsOe6pui2iui3g+mSpeWys+eypOaciOaCpumYheiAmOS6kemDp+WMgOmZqOWFgei/kOiVtOmFneaZlemfteWtleWMneeguOadguagveWTieeBvuWusOi9veWGjeWcqOWSseaUkuaagui1nui1g+iEj+iRrOmBreezn+WHv+iXu+aeo+aXqea+oeiapOi6geWZqumAoOeagueBtueHpei0o+aLqeWImeazvei0vOaAjuWinuaGjuabvui1oOaJjuWWs+a4o+acrei9p1wiXSxcbltcImQ1NDBcIixcIuiqgVwiLDcsXCLoqotcIiw3LFwi6KqUXCIsNDZdLFxuW1wiZDU4MFwiLFwi6KuDXCIsMzIsXCLpk6Hpl7jnnKjmoIXmpqjlkovkuY3ngrjor4jmkZjmlovlroXnqoTlgLrlr6jnnrvmr6Hoqbnnspjmsr7nm4/mlqnovpfltK3lsZXomLjmoIjljaDmiJjnq5nmuZvnu73mqJ/nq6DlvbDmvLPlvKDmjozmtqjmnZbkuIjluJDotKbku5fog4DnmLTpmpzmi5vmmK3mib7msrzotbXnhafnvanlhYbogoflj6zpga7mipjlk7Lom7DovpnogIXplJfolJfov5nmtZnnj43mlp/nnJ/nlITnoKfoh7votJ7pkojkvqbmnpXnlrnor4rpnIfmjK/plYfpmLXokrjmjKPnnYHlvoHni7DkuonmgJTmlbTmi6/mraPmlL9cIl0sXG5bXCJkNjQwXCIsXCLoq6RcIiwzNCxcIuisiFwiLDI3XSxcbltcImQ2ODBcIixcIuispOispeisp1wiLDMwLFwi5bin55eH6YOR6K+B6Iqd5p6d5pSv5ZCx6JyY55+l6IKi6ISC5rGB5LmL57uH6IGM55u05qSN5q6W5omn5YC85L6E5Z2A5oyH5q2i6La+5Y+q5peo57q45b+X5oya5o636Iez6Ie0572u5bic5bOZ5Yi25pm656ep56ia6LSo54KZ55eU5rue5rK756qS5Lit55uF5b+g6ZKf6KG357uI56eN6IK/6YeN5Luy5LyX6Iif5ZGo5bee5rSy6K+M57Kl6L206IKY5bia5ZKS55qx5a6Z5pi86aqk54+g5qCq6Jub5pyx54yq6K+46K+b6YCQ56u554Ob54Wu5ouE556p5Zix5Li76JGX5p+x5Yqp6JuA6LSu6ZO4562RXCJdLFxuW1wiZDc0MFwiLFwi6K2GXCIsMzEsXCLoradcIiw0LFwi6K2tXCIsMjVdLFxuW1wiZDc4MFwiLFwi6K6HXCIsMjQsXCLorqzorrHorrvor4for5Dor6rosInosJ7kvY/ms6jnpZ3pqbvmipPniKrmi73kuJPnoJbovazmkrDotZrnr4bmoanluoToo4Xlpobmkp7lo67nirbmpI7plKXov73otZjlnaDnvIDosIblh4bmjYnmi5nljZPmoYznkKLojIHphYzllYTnnYDngbzmtYrlhbnlkqjotYTlp7/mu4vmt4TlrZzntKvku5Tnsb3mu5PlrZDoh6rmuI3lrZfprIPmo5XouKrlrpfnu7zmgLvnurXpgrnotbDlpY/mj43np5/otrPljZLml4/npZbor4XpmLvnu4TpkrvnuoLlmLTphonmnIDnvarlsIrpgbXmmKjlt6bkvZDmn57lgZrkvZzlnZDluqdcIl0sXG5bXCJkODQwXCIsXCLosLhcIiw4LFwi6LGC6LGD6LGE6LGF6LGI6LGK6LGL6LGNXCIsNyxcIuixluixl+ixmOixmeixm1wiLDUsXCLosaNcIiw2LFwi6LGsXCIsNixcIuixtOixteixtuixt+ixu1wiLDYsXCLosoPosoTosobosodcIl0sXG5bXCJkODgwXCIsXCLosojosovoso1cIiw2LFwi6LKV6LKW6LKX6LKZXCIsMjAsXCLkuo3kuIzlhYDkuJDlu7/ljYXkuJXkupjkuJ7prLLlrazlmankuKjnprrkuL/ljJXkuYflpK3niLvlja7msJDlm5/og6Tpppfmr5Pnnb7pvJfkuLbkup/pvJDkuZzkuankupPoiojlrZvllazlmI/ku4Tljo3ljp3ljqPljqXljq7pnaXotZ3ljJrlj7XljKbljK7ljL7otZzljabljaPliILliIjliI7liK3liLPliL/liYDliYzliZ7liaHliZzokq/lib3lioLlioHlipDlipPlhoLnvZTkurvku4Pku4nku4Lku6jku6Hku6vku57kvJvku7PkvKLkvaTku7XkvKXkvKfkvInkvKvkvZ7kvafmlLjkvZrkvZ1cIl0sXG5bXCJkOTQwXCIsXCLosq5cIiw2Ml0sXG5bXCJkOTgwXCIsXCLos61cIiwzMixcIuS9n+S9l+S8suS8veS9tuS9tOS+keS+ieS+g+S+j+S9vuS9u+S+quS9vOS+rOS+lOS/puS/qOS/quS/heS/muS/o+S/nOS/keS/n+S/uOWAqeWBjOS/s+WArOWAj+WAruWAreS/vuWAnOWAjOWApeWAqOWBvuWBg+WBleWBiOWBjuWBrOWBu+WCpeWCp+WCqeWCuuWDluWEhuWDreWDrOWDpuWDruWEh+WEi+S7neawveS9mOS9peS/jum+oOaxhuextOWFruW3vem7iemmmOWGgeWklOWLueWMjeioh+WMkOWHq+WkmeWFleS6oOWFluS6s+ihruiipOS6teiElOijkuemgOWstOigg+e+uOWGq+WGseWGveWGvFwiXSxcbltcImRhNDBcIixcIui0jlwiLDE0LFwi6LSg6LWR6LWS6LWX6LWf6LWl6LWo6LWp6LWq6LWs6LWu6LWv6LWx6LWy6LW4XCIsOCxcIui2gui2g+i2hui2h+i2iOi2iei2jFwiLDQsXCLotpLotpPotpVcIiw5LFwi6Lag6LahXCJdLFxuW1wiZGE4MFwiLFwi6Lai6LakXCIsMTIsXCLotrLotrbotrfotrnotrvotr3ot4Dot4Hot4Lot4Xot4fot4jot4not4rot43ot5Dot5Lot5Pot5Tlh4flhpblhqLlhqXorqDorqborqforqrorrTorrXorrfor4Lor4Por4vor4/or47or5Lor5Por5Tor5bor5jor5nor5zor5/or6Dor6Tor6jor6nor67or7Dor7Por7bor7nor7zor7/osIDosILosITosIfosIzosI/osJHosJLosJTosJXosJbosJnosJvosJjosJ3osJ/osKDosKHosKXosKfosKrosKvosK7osK/osLLosLPosLXosLbljanljbrpmJ3pmKLpmKHpmLHpmKrpmL3pmLzpmYLpmYnpmZTpmZ/pmafpmazpmbLpmbTpmojpmo3pmpfpmrDpgpfpgpvpgp3pgpnpgqzpgqHpgrTpgrPpgrbpgrpcIl0sXG5bXCJkYjQwXCIsXCLot5Xot5jot5not5zot6Dot6Hot6Lot6Xot6bot6fot6not63ot67ot7Dot7Hot7Lot7Tot7bot7zot75cIiw2LFwi6LiG6LiH6LiI6LiL6LiN6LiO6LiQ6LiR6LiS6LiT6LiVXCIsNyxcIui4oOi4oei4pFwiLDQsXCLouKvouK3ouLDouLLouLPouLTouLbouLfouLjouLvouLzouL5cIl0sXG5bXCJkYjgwXCIsXCLouL/ouYPouYXouYbouYxcIiw0LFwi6LmTXCIsNSxcIui5mlwiLDExLFwi6Lmn6Lmo6Lmq6Lmr6Lmu6Lmx6YK46YKw6YOP6YOF6YK+6YOQ6YOE6YOH6YOT6YOm6YOi6YOc6YOX6YOb6YOr6YOv6YO+6YSE6YSi6YSe6YSj6YSx6YSv6YS56YWD6YWG5YiN5aWC5Yqi5Yqs5Yqt5Yq+5ZO/5YuQ5YuW5Yuw5Y+f54eu55+N5bu05Ye15Ye86ayv5Y625byB55Wa5bev5Z2M5Z6p5Z6h5aG+5aK85aOF5aOR5Zyp5Zys5Zyq5Zyz5Zy55Zyu5Zyv5Z2c5Zy75Z2C5Z2p5Z6F5Z2r5Z6G5Z285Z275Z2o5Z2t5Z225Z2z5Z6t5Z6k5Z6M5Z6y5Z+P5Z6n5Z605Z6T5Z6g5Z+V5Z+Y5Z+a5Z+Z5Z+S5Z645Z+05Z+v5Z+45Z+k5Z+dXCJdLFxuW1wiZGM0MFwiLFwi6Lmz6Lm16Lm3XCIsNCxcIui5vei5vui6gOi6gui6g+i6hOi6hui6iFwiLDYsXCLoupHoupLoupPoupVcIiw2LFwi6Lqd6LqfXCIsMTEsXCLouq3ouq7ourDourHourNcIiw2LFwi6Lq7XCIsN10sXG5bXCJkYzgwXCIsXCLou4NcIiwxMCxcIui7j1wiLDIxLFwi5aCL5aCN5Z+95Z+t5aCA5aCe5aCZ5aGE5aCg5aGl5aGs5aKB5aKJ5aKa5aKA6aao6byZ5oe/6Im56Im96Im/6IqP6IqK6Iqo6IqE6IqO6IqR6IqX6IqZ6Iqr6Iq46Iq+6Iqw6IuI6IuK6Iuj6IqY6Iq36Iqu6IuL6IuM6IuB6Iqp6Iq06Iqh6Iqq6Iqf6IuE6IuO6Iqk6Iuh6IyJ6Iu36Iuk6IyP6IyH6Iuc6Iu06IuS6IuY6IyM6Iu76IuT6IyR6Iya6IyG6IyU6IyV6Iug6IuV6Iyc6I2R6I2b6I2c6IyI6I6S6Iy86Iy06Iyx6I6b6I2e6Iyv6I2P6I2H6I2D6I2f6I2A6IyX6I2g6Iyt6Iy66Iyz6I2m6I2lXCJdLFxuW1wiZGQ0MFwiLFwi6LulXCIsNjJdLFxuW1wiZGQ4MFwiLFwi6LykXCIsMzIsXCLojajojJvojanojazojaroja3oja7ojrDojbjojrPojrTojqDojqrojpPojpzojoXojbzojrbojqnojb3ojrjojbvojpjojp7ojqjojrrojrzoj4HokIHoj6Xoj5jloIfokJjokIvoj53oj73oj5bokJzokLjokJHokIboj5Toj5/okI/okIPoj7joj7noj6roj4Xoj4DokKboj7Doj6HokZzokZHokZrokZnokbPokofokojokbrokonokbjokLzokYbokanokbbokozoko7okLHoka3ok4Hok43ok5Dok6bokr3ok5Pok4rokr/okrrok6DokqHokrnokrTokpfok6Xok6PolIznlI3olLjok7DolLnolJ/olLpcIl0sXG5bXCJkZTQwXCIsXCLovYVcIiwzMixcIui9qui+gOi+jOi+kui+nei+oOi+oei+oui+pOi+pei+pui+p+i+qui+rOi+rei+rui+r+i+sui+s+i+tOi+tei+t+i+uOi+uui+u+i+vOi+v+i/gOi/g+i/hlwiXSxcbltcImRlODBcIixcIui/iVwiLDQsXCLov4/ov5Lov5bov5fov5rov6Dov6Hov6Pov6fov6zov6/ov7Hov7Lov7Tov7Xov7bov7rov7vov7zov77ov7/pgIfpgIjpgIzpgI7pgJPpgJXpgJjolZbolLvok7/ok7zolZnolYjolajolaTolZ7olbrnnqLolYPolbLolbvolqTolqjolofolo/olbnolq7olpzoloXolrnolrfolrDol5Pol4Hol5zol7/omKfomIXomKnomJbomLzlu77lvIjlpLzlpYHogLflpZXlpZrlpZjljI/lsKLlsKXlsKzlsLTmiYzmiarmip/mirvmi4rmi5rmi5fmi67mjKLmi7bmjLnmjYvmjYPmjq3mj7bmjbHmjbrmjo7mjrTmja3mjqzmjormjanmjq7mjrzmj7Lmj7jmj6Dmj7/mj4Tmj57mj47mkZLmj4bmjr7mkYXmkYHmkIvmkJvmkKDmkIzmkKbmkKHmkZ7mkoTmka3mkpZcIl0sXG5bXCJkZjQwXCIsXCLpgJnpgJzpgKPpgKTpgKXpgKdcIiw1LFwi6YCwXCIsNCxcIumAt+mAuemAuumAvemAv+mBgOmBg+mBhemBhumBiFwiLDQsXCLpgY7pgZTpgZXpgZbpgZnpgZrpgZxcIiw1LFwi6YGk6YGm6YGn6YGp6YGq6YGr6YGs6YGvXCIsNCxcIumBtlwiLDYsXCLpgb7pgoFcIl0sXG5bXCJkZjgwXCIsXCLpgoTpgoXpgobpgofpgonpgorpgoxcIiw0LFwi6YKS6YKU6YKW6YKY6YKa6YKc6YKe6YKf6YKg6YKk6YKl6YKn6YKo6YKp6YKr6YKt6YKy6YK36YK86YK96YK/6YOA5pG65pK35pK45pKZ5pK65pOA5pOQ5pOX5pOk5pOi5pSJ5pSl5pSu5byL5b+S55SZ5byR5Y2f5Y+x5Y+95Y+p5Y+o5Y+75ZCS5ZCW5ZCG5ZGL5ZGS5ZGT5ZGU5ZGW5ZGD5ZCh5ZGX5ZGZ5ZCj5ZCy5ZKC5ZKU5ZG35ZGx5ZGk5ZKa5ZKb5ZKE5ZG25ZGm5ZKd5ZOQ5ZKt5ZOC5ZK05ZOS5ZKn5ZKm5ZOT5ZOU5ZGy5ZKj5ZOV5ZK75ZK/5ZOM5ZOZ5ZOa5ZOc5ZKp5ZKq5ZKk5ZOd5ZOP5ZOe5ZSb5ZOn5ZSg5ZO95ZSU5ZOz5ZSi5ZSj5ZSP5ZSR5ZSn5ZSq5ZWn5ZaP5Za15ZWJ5ZWt5ZWB5ZWV5ZS/5ZWQ5ZS8XCJdLFxuW1wiZTA0MFwiLFwi6YOC6YOD6YOG6YOI6YOJ6YOL6YOM6YON6YOS6YOU6YOV6YOW6YOY6YOZ6YOa6YOe6YOf6YOg6YOj6YOk6YOl6YOp6YOq6YOs6YOu6YOw6YOx6YOy6YOz6YO16YO26YO36YO56YO66YO76YO86YO/6YSA6YSB6YSD6YSFXCIsMTksXCLphJrphJvphJxcIl0sXG5bXCJlMDgwXCIsXCLphJ3phJ/phKDphKHphKRcIiwxMCxcIumEsOmEslwiLDYsXCLphLpcIiw4LFwi6YWE5ZS35ZWW5ZW15ZW25ZW35ZSz5ZSw5ZWc5ZaL5ZeS5ZaD5Zax5Za55ZaI5ZaB5Zaf5ZW+5ZeW5ZaR5ZW75Zef5Za95Za+5ZaU5ZaZ5Zeq5Ze35ZeJ5Zif5ZeR5Zer5Zes5ZeU5Zem5Zed5ZeE5Zev5Zel5Zey5Zez5ZeM5ZeN5Zeo5Ze15Zek6L6U5Zie5ZiI5ZiM5ZiB5Zik5Zij5Ze+5ZiA5Zin5Zit5ZmY5Zi55ZmX5Zis5ZmN5Zmi5ZmZ5Zmc5ZmM5ZmU5ZqG5Zmk5Zmx5Zmr5Zm75Zm85ZqF5ZqT5Zqv5ZuU5ZuX5Zud5Zuh5Zu15Zur5Zu55Zu/5ZyE5ZyK5ZyJ5Zyc5biP5biZ5biU5biR5bix5bi75bi8XCJdLFxuW1wiZTE0MFwiLFwi6YWF6YWH6YWI6YWR6YWT6YWU6YWV6YWW6YWY6YWZ6YWb6YWc6YWf6YWg6YWm6YWn6YWo6YWr6YWt6YWz6YW66YW76YW86YaAXCIsNCxcIumGhumGiOmGiumGjumGj+mGk1wiLDYsXCLphpxcIiw1LFwi6YakXCIsNSxcIumGq+mGrOmGsOmGsemGsumGs+mGtumGt+mGuOmGuemGu1wiXSxcbltcImUxODBcIixcIumGvFwiLDEwLFwi6YeI6YeL6YeQ6YeSXCIsOSxcIumHnVwiLDgsXCLluLfluYTluZTluZvluZ7luaHlsozlsbrlso3lspDlspblsojlspjlspnlspHlsprlspzlsrXlsqLlsr3lsqzlsqvlsrHlsqPls4Hlsrfls4Tls5Lls6Tls4vls6XltILltIPltKfltKbltK7ltKTltJ7ltIbltJvltZjltL7ltLTltL3ltazltZvlta/ltZ3ltavltYvltYrltanltbTltoLltpnltp3osbPltrflt4XlvbPlvbflvoLlvoflvonlvozlvpXlvpnlvpzlvqjlvq3lvrXlvrzooaLlvaHniq3nirDnirTnirfnirjni4Pni4Hni47ni43ni5Lni6jni6/ni6nni7Lni7Tni7fnjIHni7PnjIPni7pcIl0sXG5bXCJlMjQwXCIsXCLph6ZcIiw2Ml0sXG5bXCJlMjgwXCIsXCLpiKVcIiwzMixcIueLu+eMl+eMk+eMoeeMiueMnueMneeMleeMoueMueeMpeeMrOeMuOeMseeNkOeNjeeNl+eNoOeNrOeNr+eNvuiIm+Wkpemjp+WkpOWkgumlo+mlp1wiLDUsXCLppbTppbfppb3ppoDppoTppofpporppo3pppDpppHpppPpppTpppXluoDlupHluovlupbluqXluqDlurnlurXlur7lurPotZPlu5Llu5Hlu5vlu6jlu6rohrrlv4Tlv4nlv5blv4/mgIPlv67mgITlv6Hlv6Tlv77mgIXmgIblv6rlv63lv7jmgJnmgLXmgKbmgJvmgI/mgI3mgKnmgKvmgIrmgL/mgKHmgbjmgbnmgbvmgbrmgYJcIl0sXG5bXCJlMzQwXCIsXCLpiYZcIiw0NSxcIumJtVwiLDE2XSxcbltcImUzODBcIixcIumKhlwiLDcsXCLpio9cIiwyNCxcIuaBquaBveaCluaCmuaCreaCneaCg+aCkuaCjOaCm+aDrOaCu+aCseaDneaDmOaDhuaDmuaCtOaEoOaEpuaEleaEo+aDtOaEgOaEjuaEq+aFiuaFteaGrOaGlOaGp+aGt+aHlOaHteW/nemas+mXqemXq+mXsemXs+mXtemXtumXvOmXvumYg+mYhOmYhumYiOmYiumYi+mYjOmYjemYj+mYkumYlemYlumYl+mYmemYmuS4rOeIv+aIleawteaxlOaxnOaxiuayo+ayheaykOaylOayjOaxqOaxqeaxtOaxtuayhuayqeazkOazlOayreazt+azuOazseazl+aysuazoOazluazuuazq+azruayseazk+azr+azvlwiXSxcbltcImU0NDBcIixcIumKqFwiLDUsXCLpiq9cIiwyNCxcIumLiVwiLDMxXSxcbltcImU0ODBcIixcIumLqVwiLDMyLFwi5rS55rSn5rSM5rWD5rWI5rSH5rSE5rSZ5rSO5rSr5rWN5rSu5rS15rSa5rWP5rWS5rWU5rSz5raR5rWv5rae5rag5rWe5raT5raU5rWc5rWg5rW85rWj5ria5reH5reF5ree5riO5ra/5reg5riR5rem5red5reZ5riW5rar5riM5rau5rir5rmu5rmO5rmr5rqy5rmf5rqG5rmT5rmU5riy5ril5rmE5ruf5rqx5rqY5rug5ryt5rui5rql5rqn5rq95rq75rq35ruX5rq05ruP5rqP5ruC5rqf5r2i5r2G5r2H5ryk5ryV5ru55ryv5ry25r2L5r205ryq5ryJ5ryp5r6J5r6N5r6M5r245r2y5r285r265r+RXCJdLFxuW1wiZTU0MFwiLFwi6YyKXCIsNTEsXCLpjL9cIiwxMF0sXG5bXCJlNTgwXCIsXCLpjYpcIiwzMSxcIumNq+a/iea+p+a+uea+tua/gua/oea/rua/nua/oOa/r+eAmueAo+eAm+eAueeAteeBj+eBnuWugOWuhOWuleWuk+WupeWuuOeUr+mqnuaQtOWvpOWvruiksOWvsOi5h+ish+i+tui/k+i/lei/pei/rui/pOi/qei/pui/s+i/qOmAhemAhOmAi+mApumAkemAjemAlumAoemAtemAtumAremAr+mBhOmBkemBkumBkOmBqOmBmOmBoumBm+aauemBtOmBvemCgumCiOmCg+mCi+W9kOW9l+W9luW9mOWwu+WSq+WxkOWxmeWtseWxo+Wxpue+vOW8quW8qeW8reiJtOW8vOmsu+WxruWmgeWmg+WmjeWmqeWmquWmo1wiXSxcbltcImU2NDBcIixcIumNrFwiLDM0LFwi6Y6QXCIsMjddLFxuW1wiZTY4MFwiLFwi6Y6sXCIsMjksXCLpj4vpj4zpj43lppflp4rlpqvlpp7lpqTlp5LlprLlpq/lp5flpr7lqIXlqIblp53lqIjlp6Plp5jlp7nlqIzlqInlqLLlqLTlqJHlqKPlqJPlqYDlqaflqYrlqZXlqLzlqaLlqbXog6zlqqrlqpvlqbflqbrlqr7lq6vlqrLlq5Llq5Tlqrjlq6Dlq6Plq7Hlq5blq6blq5jlq5zlrInlrJflrJblrLLlrLflrYDlsJXlsJzlrZrlraXlrbPlrZHlrZPlraLpqbXpqbfpqbjpqbrpqb/pqb3pqoDpqoHpqoXpqojpqorpqpDpqpLpqpPpqpbpqpjpqpvpqpzpqp3pqp/pqqDpqqLpqqPpqqXpqqfnup/nuqHnuqPnuqXnuqjnuqlcIl0sXG5bXCJlNzQwXCIsXCLpj45cIiw3LFwi6Y+XXCIsNTRdLFxuW1wiZTc4MFwiLFwi6ZCOXCIsMzIsXCLnuq3nurDnur7nu4Dnu4Hnu4Lnu4nnu4vnu4znu5Dnu5Tnu5fnu5vnu6Dnu6Hnu6jnu6vnu67nu6/nu7Hnu7LnvI3nu7bnu7rnu7vnu77nvIHnvILnvIPnvIfnvIjnvIvnvIznvI/nvJHnvJLnvJfnvJnnvJznvJvnvJ/nvKFcIiw2LFwi57yq57yr57ys57yt57yvXCIsNCxcIue8teW5uueVv+W3m+eUvumCleeOjueOkeeOrueOoueOn+ePj+ePguePkeeOt+eOs+ePgOePieePiOePpeePmemhvOeQiuePqeePp+ePnueOuuePsueQj+eQqueRm+eQpueQpeeQqOeQsOeQrueQrFwiXSxcbltcImU4NDBcIixcIumQr1wiLDE0LFwi6ZC/XCIsNDMsXCLpkazpka3pka7pka9cIl0sXG5bXCJlODgwXCIsXCLpkbBcIiwyMCxcIumSkemSlumSmOmTh+mTj+mTk+mTlOmTmumTpumTu+mUnOmUoOeQm+eQmueRgeeRnOeRl+eRleeRmeeRt+eRreeRvueSnOeSjueSgOeSgeeSh+eSi+eSnueSqOeSqeeSkOeSp+eTkueSuumfqumfq+mfrOadjOadk+adnuadiOadqeaepeaeh+adquads+aemOaep+adteaeqOaenuaereaei+adt+advOafsOagieafmOagiuafqeaesOagjOafmeaeteafmuaes+afneaggOafg+aeuOafouagjuafgeafveagsuags+ahoOahoeahjuahouahhOahpOaig+agneahleahpuahgeahp+ahgOagvuahiuahieagqeaiteaij+ahtOaht+aik+ahq+ajgualruajvOakn+akoOajuVwiXSxcbltcImU5NDBcIixcIumUp+mUs+mUvemVg+mViOmVi+mVlemVmumVoOmVrumVtOmVtemVt1wiLDcsXCLploBcIiw0Ml0sXG5bXCJlOTgwXCIsXCLplqtcIiwzMixcIuakpOajsOaki+akgeall+ajo+akkOalseakuealoOalgualneamhOalq+amgOammOaluOaktOanjOamh+amiOanjuamiealpualo+alueamm+amp+amu+amq+amreanlOamseangeaniuann+amleanoOamjeanv+aor+anreaol+aomOappeansuaphOaovuaqoOapkOapm+aoteaqjuapueaoveaoqOapmOapvOaqkeaqkOaqqeaql+aqq+eMt+eNkuaugeauguauh+auhOaukuauk+aujeaumuaum+auoeauqui9q+i9rei9sei9sui9s+i9tei9tui9uOi9t+i9uei9uui9vOi9vui+gei+gui+hOi+h+i+i1wiXSxcbltcImVhNDBcIixcIumXjFwiLDI3LFwi6Zes6Ze/6ZiH6ZiT6ZiY6Zib6Zie6Zig6ZijXCIsNixcIumYq+mYrOmYremYr+mYsOmYt+mYuOmYuemYuumYvumZgemZg+mZiumZjumZj+mZkemZkumZk+mZlumZl1wiXSxcbltcImVhODBcIixcIumZmOmZmemZmumZnOmZnemZnumZoOmZo+mZpemZpumZq+mZrVwiLDQsXCLpmbPpmbhcIiwxMixcIumah+maiemaiui+jei+jui+j+i+mOi+mui7juaIi+aIl+aIm+aIn+aIouaIoeaIpeaIpOaIrOiHp+eTr+eTtOeTv+eUj+eUkeeUk+aUtOaXruaXr+aXsOaYiuaYmeadsuaYg+aYleaYgOeCheabt+aYneaYtOaYseaYtuaYteiAhuaZn+aZlOaZgeaZj+aZluaZoeaZl+aZt+aahOaajOaap+aaneaavuabm+abnOabpuabqei0sui0s+i0tui0u+i0vei1gOi1hei1hui1iOi1iei1h+i1jei1lei1meinh+iniuini+injOinjuinj+inkOinkeeJrueKn+eJneeJpueJr+eJvueJv+eKhOeKi+eKjeeKj+eKkuaMiOaMsuaOsFwiXSxcbltcImViNDBcIixcIumajOmajumakemakumak+malemalumamumam+manVwiLDksXCLpmqhcIiw3LFwi6Zqx6Zqy6Zq06Zq16Zq36Zq46Zq66Zq76Zq/6ZuC6ZuD6ZuI6ZuK6ZuL6ZuQ6ZuR6ZuT6ZuU6ZuWXCIsOSxcIumboVwiLDYsXCLpm6tcIl0sXG5bXCJlYjgwXCIsXCLpm6zpm63pm67pm7Dpm7Hpm7Lpm7Tpm7Xpm7jpm7rpm7vpm7zpm73pm7/pnILpnIPpnIXpnIrpnIvpnIzpnJDpnJHpnJLpnJTpnJXpnJdcIiw0LFwi6Zyd6Zyf6Zyg5pC/5pOY6ICE5q+q5q+z5q+95q+15q+55rCF5rCH5rCG5rCN5rCV5rCY5rCZ5rCa5rCh5rCp5rCk5rCq5rCy5pS15pWV5pWr54mN54mS54mW54iw6Jmi5YiW6IKf6IKc6IKT6IK85pyK6IK96IKx6IKr6IKt6IK06IK36IOn6IOo6IOp6IOq6IOb6IOC6IOE6IOZ6ION6IOX5pyQ6IOd6IOr6IOx6IO06IOt6ISN6ISO6IOy6IO85pyV6ISS6LGa6IS26ISe6ISs6ISY6ISy6IWI6IWM6IWT6IW06IWZ6IWa6IWx6IWg6IWp6IW86IW96IWt6IWn5aGN5aq16IaI6IaC6IaR5ruV6Iaj6Iaq6IeM5pym6IeK6Ia7XCJdLFxuW1wiZWM0MFwiLFwi6ZyhXCIsOCxcIumcq+mcrOmcrumcr+mcsemcs1wiLDQsXCLpnLrpnLvpnLzpnL3pnL9cIiwxOCxcIumdlOmdlemdl+mdmOmdmumdnOmdnemdn+mdo+mdpOmdpumdp+mdqOmdqlwiLDddLFxuW1wiZWM4MFwiLFwi6Z2y6Z216Z23XCIsNCxcIumdvVwiLDcsXCLpnoZcIiw0LFwi6Z6M6Z6O6Z6P6Z6Q6Z6T6Z6V6Z6W6Z6X6Z6ZXCIsNCxcIuiHgeiGpuaspOast+asueatg+athuatmemjkemjkumjk+mjlemjmemjmuaus+W9gOavguins+aWkOm9keaWk+aWvOaXhuaXhOaXg+aXjOaXjuaXkuaXlueCgOeCnOeClueCneeCu+eDgOeCt+eCq+eCseeDqOeDiueEkOeEk+eElueEr+eEseeFs+eFnOeFqOeFheeFsueFiueFuOeFuueGmOeGs+eGteeGqOeGoOeHoOeHlOeHp+eHueeIneeIqOeBrOeEmOeFpueGueaIvuaIveaJg+aJiOaJieeku+elgOelhuelieelm+elnOelk+elmuelouell+eloOelr+elp+eluuemheemiuemmuemp+ems+W/keW/kFwiXSxcbltcImVkNDBcIixcIumenumen+meoemeoumepFwiLDYsXCLpnqzpnq7pnrDpnrHpnrPpnrVcIiw0Nl0sXG5bXCJlZDgwXCIsXCLpn6Tpn6Xpn6jpn65cIiw0LFwi6Z+06Z+3XCIsMjMsXCLmgLzmgZ3mgZrmgafmgYHmgZnmgaPmgqvmhIbmhI3mhZ3mhqnmhp3mh4vmh5HmiIbogoDogb/mspPms7bmt7znn7bnn7jnoIDnoInnoJfnoJjnoJHmlqvnoK3noJznoJ3noLnnoLrnoLvnoJ/noLznoKXnoKznoKPnoKnnoY7noa3noZbnoZfnoKbnoZDnoYfnoYznoarnopvnopPnoprnoofnopznoqHnoqPnorLnornnoqXno5Tno5nno4nno6zno7LnpIXno7TnpJPnpKTnpJ7npLTpvpvpu7npu7vpu7znm7HnnITnnI3nm7nnnIfnnIjnnJrnnKLnnJnnnK3nnKbnnLXnnLjnnZDnnZHnnYfnnYPnnZrnnahcIl0sXG5bXCJlZTQwXCIsXCLpoI9cIiw2Ml0sXG5bXCJlZTgwXCIsXCLpoY5cIiwzMixcIuedouedpeedv+eejeedveeegOeejOeekeeen+eeoOeesOeeteeeveeUuueVgOeVjueVi+eViOeVm+eVsueVueeWg+e9mOe9oee9n+ipiOe9qOe9tOe9see9uee+gee9vuebjeebpeigsumShemShumSh+mSi+mSiumSjOmSjemSj+mSkOmSlOmSl+mSlemSmumSm+mSnOmSo+mSpOmSq+mSqumSremSrOmSr+mSsOmSsumStOmStlwiLDQsXCLpkrzpkr3pkr/pk4Tpk4hcIiw2LFwi6ZOQ6ZOR6ZOS6ZOV6ZOW6ZOX6ZOZ6ZOY6ZOb6ZOe6ZOf6ZOg6ZOi6ZOk6ZOl6ZOn6ZOo6ZOqXCJdLFxuW1wiZWY0MFwiLFwi6aGvXCIsNSxcIumii+mijumikumilemimemio+miqFwiLDM3LFwi6aOP6aOQ6aOU6aOW6aOX6aOb6aOc6aOd6aOgXCIsNF0sXG5bXCJlZjgwXCIsXCLpo6Xpo6bpo6lcIiwzMCxcIumTqemTq+mTrumTr+mTs+mTtOmTtemTt+mTuemTvOmTvemTv+mUg+mUgumUhumUh+mUiemUiumUjemUjumUj+mUklwiLDQsXCLplJjplJvplJ3plJ7plJ/plKLplKrplKvplKnplKzplLHplLLplLTplLbplLfplLjplLzplL7plL/plYLplLXplYTplYXplYbplYnplYzplY7plY/plZLplZPplZTplZbplZfplZjplZnplZvplZ7plZ/plZ3plaHplaLplaRcIiw4LFwi6ZWv6ZWx6ZWy6ZWz6ZS655+n55+s6ZuJ56eV56et56ej56er56iG5bWH56iD56iC56ie56iUXCJdLFxuW1wiZjA0MFwiLFwi6aSIXCIsNCxcIumkjumkj+mkkVwiLDI4LFwi6aSvXCIsMjZdLFxuW1wiZjA4MFwiLFwi6aWKXCIsOSxcIumlllwiLDEyLFwi6aWk6aWm6aWz6aW46aW56aW76aW+6aaC6aaD6aaJ56i556i356mR6buP6aal56mw55qI55qO55qT55qZ55qk55Oe55Og55Ss6big6bii6bioXCIsNCxcIum4sum4sem4tum4uOm4t+m4uem4uum4vum5gem5gum5hOm5hum5h+m5iOm5iem5i+m5jOm5jum5kem5lem5l+m5mum5m+m5nOm5num5o+m5plwiLDYsXCLpubHpua3pubPnlpLnlpTnlpbnlqDnlp3nlqznlqPnlrPnlrTnlrjnl4TnlrHnlrDnl4Pnl4Lnl5bnl43nl6Pnl6jnl6bnl6Tnl6vnl6fnmIPnl7Hnl7znl7/nmJDnmIDnmIXnmIznmJfnmIrnmKXnmJjnmJXnmJlcIl0sXG5bXCJmMTQwXCIsXCLppozppo7ppppcIiwxMCxcIummpummp+mmqVwiLDQ3XSxcbltcImYxODBcIixcIumnmVwiLDMyLFwi55ib55i855ii55ig55mA55it55iw55i/55i155mD55i+55iz55mN55me55mU55mc55mW55mr55mv57+K56um56m456m556qA56qG56qI56qV56qm56qg56qs56qo56qt56qz6KGk6KGp6KGy6KG96KG/6KKC6KKi6KOG6KK36KK86KOJ6KOi6KOO6KOj6KOl6KOx6KSa6KO86KOo6KO+6KOw6KSh6KSZ6KST6KSb6KSK6KS06KSr6KS26KWB6KWm6KW755aL6IOl55qy55q055+c6ICS6ICU6ICW6ICc6ICg6ICi6ICl6ICm6ICn6ICp6ICo6ICx6ICL6IC16IGD6IGG6IGN6IGS6IGp6IGx6KaD6aG46aKA6aKDXCJdLFxuW1wiZjI0MFwiLFwi6ae6XCIsNjJdLFxuW1wiZjI4MFwiLFwi6ai5XCIsMzIsXCLpoonpoozpoo3poo/popTpoprpopvpop7pop/poqHpoqLpoqXpoqbomY3omZTomazoma7omb/ombrombzombvomqjomo3omovomqzomp3omqfomqPomqrompPomqnomrbom4TomrXom47omrDomrromrHomq/om4nom4/omrTom6nom7Hom7Lom63om7Pom5DonJPom57om7Tom5/om5jom5HonIPonIfom7jonIjonIronI3onInonKPonLvonJ7onKXonK7onJronL7onYjonLTonLHonKnonLfonL/onoLonKLonb3onb7onbvonaDonbDonYzona7onovonZPonaPonbzonaTonZnonaXonpPonq/onqjon5JcIl0sXG5bXCJmMzQwXCIsXCLpqZpcIiwxNyxcIumpsumqg+mqiemqjemqjumqlOmqlemqmemqpumqqVwiLDYsXCLpqrLpqrPpqrTpqrXpqrnpqrvpqr3pqr7pqr/pq4Ppq4Tpq4ZcIiw0LFwi6auN6auO6auP6auQ6auS6auU6auV6auW6auX6auZ6aua6aub6aucXCJdLFxuW1wiZjM4MFwiLFwi6aud6aue6aug6aui6auj6auk6aul6aun6auo6aup6auq6aus6auu6auwXCIsOCxcIumruumrvFwiLDYsXCLprITprIXprIbon4bonojonoXonq3onpfonoPonqvon6XonqzonrXonrPon4von5Ponr3on5Hon4Don4ron5von6ron6Don67ooJbooJPon77ooIrooJvooKHooLnooLznvLbnvYLnvYTnvYXoiJDnq7rnq73nrIjnrIPnrITnrJXnrIrnrKvnrI/nrYfnrLjnrKrnrJnnrK7nrLHnrKDnrKXnrKTnrLPnrL7nrJ7nrZjnrZrnrYXnrbXnrYznrZ3nraDnra7nrbvnraLnrbLnrbHnrpDnrqbnrqfnrrjnrqznrp3nrqjnroXnrqrnrpznrqLnrqvnrrTnr5Hnr4Hnr4znr53nr5rnr6Xnr6bnr6rnsIznr77nr7znsI/nsJbnsItcIl0sXG5bXCJmNDQwXCIsXCLprIfprIlcIiw1LFwi6ayQ6ayR6ayS6ayUXCIsMTAsXCLprKDprKHprKLprKRcIiwxMCxcIumssOmssemss1wiLDcsXCLprL3prL7prL/prYDprYbprYrprYvprYzprY7prZDprZLprZPprZVcIiw1XSxcbltcImY0ODBcIixcIumtm1wiLDMyLFwi57Cf57Cq57Cm57C457GB57GA6Ie+6IiB6IiC6IiE6Ies6KGE6Iih6Iii6Iij6Iit6Iiv6Iio6Iir6Ii46Ii76Iiz6Ii06Ii+6ImE6ImJ6ImL6ImP6Ima6Imf6Imo6KG+6KKF6KKI6KOY6KOf6KWe576d576f576n576v576w576y57G85pWJ57KR57Kd57Kc57Ke57Ki57Ky57K857K957OB57OH57OM57ON57OI57OF57OX57Oo6Imu5pqo576/57+O57+V57+l57+h57+m57+p57+u57+z57O457W357am57au57mH57qb6bq46bq06LWz6LaE6LaU6LaR6Lax6LWn6LWt6LGH6LGJ6YWK6YWQ6YWO6YWP6YWkXCJdLFxuW1wiZjU0MFwiLFwi6a28XCIsNjJdLFxuW1wiZjU4MFwiLFwi6a67XCIsMzIsXCLphaLphaHphbDphanpha/phb3phb7phbLphbTphbnphozphoXphpDpho3phpHphqLphqPphqrphq3phq7phq/phrXphrTphrrosZXpub7otrjot6vouIXouZnouanotrXotr/otrzotrrot4Tot5bot5fot5rot57ot47ot4/ot5vot4bot6zot7fot7jot6Pot7not7vot6TouInot73ouJTouJ3ouJ/ouKzouK7ouKPouK/ouLrouYDouLnouLXouL3ouLHouYnouYHouYLouZHouZLouYroubDoubboubzoua/oubTouoXouo/oupToupDoupzoup7osbjosoLosorosoXospjospTmlpvop5bop57op5rop5xcIl0sXG5bXCJmNjQwXCIsXCLpr5xcIiw2Ml0sXG5bXCJmNjgwXCIsXCLpsJtcIiwzMixcIuinpeinq+inr+iovuispumdk+mbqembs+mbr+mchumcgemciOmcj+mcjumcqumcremcsOmcvum+gOm+g+m+hVwiLDUsXCLpvozpu77pvIvpvI3pmrnpmrzpmr3pm47pm5Lnnr/pm6Dpio7piq7pi4jpjL7pjarpj4rpjo/pkL7pkavpsb/psoLpsoXpsobpsofpsojnqKPpsovpso7pspDpspHpspLpspTpspXpsprpspvpsp5cIiw1LFwi6bKlXCIsNCxcIumyq+myremyrumysFwiLDcsXCLpsrrpsrvpsrzpsr3ps4Tps4Xps4bps4fps4rps4tcIl0sXG5bXCJmNzQwXCIsXCLpsLxcIiw2Ml0sXG5bXCJmNzgwXCIsXCLpsbvpsb3psb7psoDpsoPpsoTpsonpsorpsozpso/pspPpspbpspfpspjpspnpsp3psqrpsqzpsq/psrnpsr5cIiw0LFwi6bOI6bOJ6bOR6bOS6bOa6bOb6bOg6bOh6bOMXCIsNCxcIumzk+mzlOmzlemzl+mzmOmzmemznOmznemzn+mzoumdvOmehemekemekumelOmer+meq+meo+mesumetOmqsemqsOmqt+m5mOmqtumquumqvOmrgemrgOmrhemrgumri+mrjOmrkemthemtg+mth+mtiemtiOmtjemtkemjqOmkjemkrumllemllOmrn+mroemrpumrr+mrq+mru+mrremruemsiOmsj+msk+msn+mso+m6vem6vue4u+m6gum6h+m6iOm6i+m6kumPlum6nem6n+m7m+m7nOm7nem7oOm7n+m7oum7qem7p+m7pem7qum7r+m8oum8rOm8r+m8uem8t+m8vem8vum9hFwiXSxcbltcImY4NDBcIixcIumzo1wiLDYyXSxcbltcImY4ODBcIixcIum0olwiLDMyXSxcbltcImY5NDBcIixcIum1g1wiLDYyXSxcbltcImY5ODBcIixcIum2glwiLDMyXSxcbltcImZhNDBcIixcIum2o1wiLDYyXSxcbltcImZhODBcIixcIum3olwiLDMyXSxcbltcImZiNDBcIixcIum4g1wiLDI3LFwi6bik6bin6biu6biw6bi06bi76bi86bmA6bmN6bmQ6bmS6bmT6bmU6bmW6bmZ6bmd6bmf6bmg6bmh6bmi6bml6bmu6bmv6bmy6bm0XCIsOSxcIum6gFwiXSxcbltcImZiODBcIixcIum6gem6g+m6hOm6hem6hum6iem6ium6jFwiLDUsXCLpupRcIiw4LFwi6bqe6bqgXCIsNSxcIum6p+m6qOm6qem6qlwiXSxcbltcImZjNDBcIixcIum6q1wiLDgsXCLpurXpurbpurfpurnpurrpurzpur9cIiw0LFwi6buF6buG6buH6buI6buK6buL6buM6buQ6buS6buT6buV6buW6buX6buZ6bua6bue6buh6buj6buk6bum6buo6bur6bus6but6buu6buwXCIsOCxcIum7uum7vem7v1wiLDZdLFxuW1wiZmM4MFwiLFwi6byGXCIsNCxcIum8jOm8j+m8kem8kum8lOm8lem8lum8mOm8mlwiLDUsXCLpvKHpvKNcIiw4LFwi6byt6byu6byw6byxXCJdLFxuW1wiZmQ0MFwiLFwi6byyXCIsNCxcIum8uOm8uum8vOm8v1wiLDQsXCLpvYVcIiwxMCxcIum9klwiLDM4XSxcbltcImZkODBcIixcIum9uVwiLDUsXCLpvoHpvoLpvo1cIiwxMSxcIum+nOm+nem+num+oVwiLDQsXCLvpKzvpbnvppXvp6fvp7FcIl0sXG5bXCJmZTQwXCIsXCLvqIzvqI3vqI7vqI/vqJHvqJPvqJTvqJjvqJ/vqKDvqKHvqKPvqKTvqKfvqKjvqKlcIl1cbl1cbiIsIm1vZHVsZS5leHBvcnRzPVtcbltcIjBcIixcIlxcdTAwMDBcIiwxMjddLFxuW1wiODE0MVwiLFwi6rCC6rCD6rCF6rCG6rCLXCIsNCxcIuqwmOqwnuqwn+qwoeqwouqwo+qwpVwiLDYsXCLqsK7qsLLqsLPqsLRcIl0sXG5bXCI4MTYxXCIsXCLqsLXqsLbqsLfqsLrqsLvqsL3qsL7qsL/qsYFcIiw5LFwi6rGM6rGOXCIsNSxcIuqxlVwiXSxcbltcIjgxODFcIixcIuqxluqxl+qxmeqxmuqxm+qxnVwiLDE4LFwi6rGy6rGz6rG16rG26rG56rG7XCIsNCxcIuqyguqyh+qyiOqyjeqyjuqyj+qykeqykuqyk+qylVwiLDYsXCLqsp7qsqJcIiw1LFwi6rKr6rKt6rKu6rKxXCIsNixcIuqyuuqyvuqyv+qzgOqzguqzg+qzheqzhuqzh+qzieqziuqzi+qzjVwiLDcsXCLqs5bqs5hcIiw3LFwi6rOi6rOj6rOl6rOm6rOp6rOr6rOt6rOu6rOy6rO06rO3XCIsNCxcIuqzvuqzv+q0geq0guq0g+q0heq0h1wiLDQsXCLqtI7qtJDqtJLqtJNcIl0sXG5bXCI4MjQxXCIsXCLqtJTqtJXqtJbqtJfqtJnqtJrqtJvqtJ3qtJ7qtJ/qtKFcIiw3LFwi6rSq6rSr6rSuXCIsNV0sXG5bXCI4MjYxXCIsXCLqtLbqtLfqtLnqtLrqtLvqtL1cIiw2LFwi6rWG6rWI6rWKXCIsNSxcIuq1keq1kuq1k+q1leq1luq1l1wiXSxcbltcIjgyODFcIixcIuq1mVwiLDcsXCLqtaLqtaRcIiw3LFwi6rWu6rWv6rWx6rWy6rW36rW46rW56rW66rW+6raA6raDXCIsNCxcIuq2iuq2i+q2jeq2juq2j+q2kVwiLDEwLFwi6raeXCIsNSxcIuq2pVwiLDE3LFwi6ra4XCIsNyxcIuq3guq3g+q3heq3huq3h+q3iVwiLDYsXCLqt5Lqt5RcIiw3LFwi6red6ree6ref6reh6rei6rej6relXCIsMThdLFxuW1wiODM0MVwiLFwi6re66re76re96re+6riCXCIsNSxcIuq4iuq4jOq4jlwiLDUsXCLquJVcIiw3XSxcbltcIjgzNjFcIixcIuq4nVwiLDE4LFwi6riy6riz6ri16ri26ri56ri76ri8XCJdLFxuW1wiODM4MVwiLFwi6ri96ri+6ri/6rmC6rmE6rmH6rmI6rmJ6rmL6rmP6rmR6rmS6rmT6rmV6rmXXCIsNCxcIuq5nuq5ouq5o+q5pOq5puq5p+q5quq5q+q5req5ruq5r+q5sVwiLDYsXCLqubrqub5cIiw1LFwi6rqGXCIsNSxcIuq6jVwiLDQ2LFwi6rq/6ruB6ruC6ruD6ruFXCIsNixcIuq7juq7klwiLDUsXCLqu5rqu5vqu51cIiw4XSxcbltcIjg0NDFcIixcIuq7puq7p+q7qeq7quq7rOq7rlwiLDUsXCLqu7Xqu7bqu7fqu7nqu7rqu7vqu71cIiw4XSxcbltcIjg0NjFcIixcIuq8huq8ieq8iuq8i+q8jOq8juq8j+q8kVwiLDE4XSxcbltcIjg0ODFcIixcIuq8pFwiLDcsXCLqvK7qvK/qvLHqvLPqvLVcIiw2LFwi6ry+6r2A6r2E6r2F6r2G6r2H6r2KXCIsNSxcIuq9kVwiLDEwLFwi6r2eXCIsNSxcIuq9plwiLDE4LFwi6r26XCIsNSxcIuq+geq+guq+g+q+heq+huq+h+q+iVwiLDYsXCLqvpLqvpPqvpTqvpZcIiw1LFwi6r6dXCIsMjYsXCLqvrrqvrvqvr3qvr5cIl0sXG5bXCI4NTQxXCIsXCLqvr/qv4FcIiw1LFwi6r+K6r+M6r+PXCIsNCxcIuq/lVwiLDYsXCLqv51cIiw0XSxcbltcIjg1NjFcIixcIuq/olwiLDUsXCLqv6pcIiw1LFwi6r+y6r+z6r+16r+26r+36r+5XCIsNixcIuuAguuAg1wiXSxcbltcIjg1ODFcIixcIuuAhVwiLDYsXCLrgI3rgI7rgI/rgJHrgJLrgJPrgJVcIiw2LFwi64CeXCIsOSxcIuuAqVwiLDI2LFwi64GG64GH64GJ64GL64GN64GP64GQ64GR64GS64GW64GY64Ga64Gb64Gc64GeXCIsMjksXCLrgb7rgb/rgoHrgoLrgoPrgoVcIiw2LFwi64KO64KQ64KSXCIsNSxcIuuCm+uCneuCnuuCo+uCpFwiXSxcbltcIjg2NDFcIixcIuuCpeuCpuuCp+uCquuCsOuCsuuCtuuCt+uCueuCuuuCu+uCvVwiLDYsXCLrg4brg4pcIiw1LFwi64OSXCJdLFxuW1wiODY2MVwiLFwi64OT64OV64OW64OX64OZXCIsNixcIuuDoeuDouuDo+uDpOuDplwiLDEwXSxcbltcIjg2ODFcIixcIuuDsVwiLDIyLFwi64SK64SN64SO64SP64SR64SU64SV64SW64SX64Sa64SeXCIsNCxcIuuEpuuEp+uEqeuEquuEq+uErVwiLDYsXCLrhLbrhLpcIiw1LFwi64WC64WD64WF64WG64WH64WJXCIsNixcIuuFkuuFk+uFluuFl+uFmeuFmuuFm+uFneuFnuuFn+uFoVwiLDIyLFwi64W664W764W964W+64W/64aB64aDXCIsNCxcIuuGiuuGjOuGjuuGj+uGkOuGkeuGleuGluuGl+uGmeuGmuuGm+uGnVwiXSxcbltcIjg3NDFcIixcIuuGnlwiLDksXCLrhqlcIiwxNV0sXG5bXCI4NzYxXCIsXCLrhrlcIiwxOCxcIuuHjeuHjuuHj+uHkeuHkuuHk+uHlVwiXSxcbltcIjg3ODFcIixcIuuHllwiLDUsXCLrh57rh6BcIiw3LFwi64eq64er64et64eu64ev64exXCIsNyxcIuuHuuuHvOuHvlwiLDUsXCLriIbriIfriInriIrriI1cIiw2LFwi64iW64iY64iaXCIsNSxcIuuIoVwiLDE4LFwi64i1XCIsNixcIuuIvVwiLDI2LFwi64mZ64ma64mb64md64me64mf64mhXCIsNixcIuuJqlwiLDRdLFxuW1wiODg0MVwiLFwi64mvXCIsNCxcIuuJtlwiLDUsXCLrib1cIiw2LFwi64qG64qH64qI64qKXCIsNF0sXG5bXCI4ODYxXCIsXCLrio/ripLripPripXripbripfriptcIiw0LFwi64qi64qk64qn64qo64qp64qr64qt64qu64qv64qx64qy64qz64q164q264q3XCJdLFxuW1wiODg4MVwiLFwi64q4XCIsMTUsXCLri4rri4vri43ri47ri4/ri5Hri5NcIiw0LFwi64ua64uc64ue64uf64ug64uh64uj64un64up64uq64uw64ux64uy64u264u864u964u+64yC64yD64yF64yG64yH64yJXCIsNixcIuuMkuuMllwiLDUsXCLrjJ1cIiw1NCxcIuuNl+uNmeuNmuuNneuNoOuNoeuNouuNo1wiXSxcbltcIjg5NDFcIixcIuuNpuuNqOuNquuNrOuNreuNr+uNsuuNs+uNteuNtuuNt+uNuVwiLDYsXCLrjoLrjoZcIiw1LFwi646NXCJdLFxuW1wiODk2MVwiLFwi646O646P646R646S646T646VXCIsMTAsXCLrjqJcIiw1LFwi646p646q646r646tXCJdLFxuW1wiODk4MVwiLFwi646uXCIsMjEsXCLrj4brj4frj4nrj4rrj43rj4/rj5Hrj5Lrj5Prj5brj5jrj5rrj5zrj57rj5/rj6Hrj6Lrj6Prj6Xrj6brj6frj6lcIiwxOCxcIuuPvVwiLDE4LFwi65CRXCIsNixcIuuQmeuQmuuQm+uQneuQnuuQn+uQoVwiLDYsXCLrkKrrkKxcIiw3LFwi65C1XCIsMTVdLFxuW1wiOGE0MVwiLFwi65GFXCIsMTAsXCLrkZLrkZPrkZXrkZbrkZfrkZlcIiw2LFwi65Gi65Gk65GmXCJdLFxuW1wiOGE2MVwiLFwi65GnXCIsNCxcIuuRrVwiLDE4LFwi65KB65KCXCJdLFxuW1wiOGE4MVwiLFwi65KDXCIsNCxcIuuSiVwiLDE5LFwi65KeXCIsNSxcIuuSpeuSpuuSp+uSqeuSquuSq+uSrVwiLDcsXCLrkrbrkrjrkrpcIiw1LFwi65OB65OC65OD65OF65OG65OH65OJXCIsNixcIuuTkeuTkuuTk+uTlOuTllwiLDUsXCLrk57rk5/rk6Hrk6Lrk6Xrk6dcIiw0LFwi65Ou65Ow65OyXCIsNSxcIuuTuVwiLDI2LFwi65SW65SX65SZ65Sa65SdXCJdLFxuW1wiOGI0MVwiLFwi65SeXCIsNSxcIuuUpuuUq1wiLDQsXCLrlLLrlLPrlLXrlLbrlLfrlLlcIiw2LFwi65WC65WGXCJdLFxuW1wiOGI2MVwiLFwi65WH65WI65WJ65WK65WO65WP65WR65WS65WT65WVXCIsNixcIuuVnuuVolwiLDhdLFxuW1wiOGI4MVwiLFwi65WrXCIsNTIsXCLrlqLrlqPrlqXrlqbrlqfrlqnrlqzrlq3rlq7rlq/rlrLrlrZcIiw0LFwi65a+65a/65eB65eC65eD65eFXCIsNixcIuuXjuuXklwiLDUsXCLrl5lcIiwxOCxcIuuXrVwiLDE4XSxcbltcIjhjNDFcIixcIuuYgFwiLDE1LFwi65iS65iT65iV65iW65iX65iZXCIsNF0sXG5bXCI4YzYxXCIsXCLrmJ5cIiw2LFwi65imXCIsNSxcIuuYrVwiLDYsXCLrmLVcIiw1XSxcbltcIjhjODFcIixcIuuYu1wiLDEyLFwi65mJXCIsMjYsXCLrmaXrmabrmafrmalcIiw1MCxcIuuanuuan+uaoeuaouuao+uapVwiLDUsXCLrmq3rmq7rmq/rmrDrmrJcIiwxNl0sXG5bXCI4ZDQxXCIsXCLrm4NcIiwxNixcIuublVwiLDhdLFxuW1wiOGQ2MVwiLFwi65ueXCIsMTcsXCLrm7Hrm7Lrm7Prm7Xrm7brm7frm7nrm7pcIl0sXG5bXCI4ZDgxXCIsXCLrm7tcIiw0LFwi65yC65yD65yE65yGXCIsMzMsXCLrnKrrnKvrnK3rnK7rnLFcIiw2LFwi65y665y8XCIsNyxcIuudheudhuudh+udieudiuudi+udjVwiLDYsXCLrnZZcIiw5LFwi652h652i652j652l652m652n652pXCIsNixcIuudsuudtOudtlwiLDUsXCLrnb7rnb/rnoHrnoLrnoPrnoVcIiw2LFwi656O656T656U656V656a656b656d656eXCJdLFxuW1wiOGU0MVwiLFwi656f656hXCIsNixcIuuequuerlwiLDUsXCLrnrbrnrfrnrlcIiw4XSxcbltcIjhlNjFcIixcIuufglwiLDQsXCLrn4jrn4pcIiwxOV0sXG5bXCI4ZTgxXCIsXCLrn55cIiwxMyxcIuufruufr+ufseufsuufs+uftVwiLDYsXCLrn77roIJcIiw0LFwi66CK66CL66CN66CO66CP66CRXCIsNixcIuugmuugnOugnlwiLDUsXCLroKbroKfroKnroKrroKvroK1cIiw2LFwi66C266C6XCIsNSxcIuuhgeuhguuhg+uhhVwiLDExLFwi66GS66GUXCIsNyxcIuuhnuuhn+uhoeuhouuho+uhpVwiLDYsXCLroa7robDrobJcIiw1LFwi66G566G666G766G9XCIsN10sXG5bXCI4ZjQxXCIsXCLrooVcIiw3LFwi66KOXCIsMTddLFxuW1wiOGY2MVwiLFwi66KgXCIsNyxcIuuiqVwiLDYsXCLrorHrorLrorProrXrorbrorfrorlcIiw0XSxcbltcIjhmODFcIixcIuuivuuiv+ujguujhOujhlwiLDUsXCLro43ro47ro4/ro5Hro5Lro5Pro5VcIiw3LFwi66Oe66Og66OiXCIsNSxcIuujquujq+ujreujruujr+ujsVwiLDYsXCLro7rro7zro75cIiw1LFwi66SFXCIsMTgsXCLrpJlcIiw2LFwi66ShXCIsMjYsXCLrpL7rpL/rpYHrpYLrpYPrpYVcIiw2LFwi66WN66WO66WQ66WSXCIsNV0sXG5bXCI5MDQxXCIsXCLrpZrrpZvrpZ3rpZ7rpZ/rpaFcIiw2LFwi66Wq66Ws66WuXCIsNSxcIuultuult+ulueuluuulu+ulvVwiXSxcbltcIjkwNjFcIixcIuulvlwiLDUsXCLrpobrpojrpovrpozrpo9cIiwxNV0sXG5bXCI5MDgxXCIsXCLrpp9cIiwxMixcIuumruumr+umseumsuums+umtVwiLDYsXCLrpr7rp4Drp4JcIiw1LFwi66eK66eL66eN66eTXCIsNCxcIuunmuunnOunn+unoOunouunpuunp+unqeunquunq+unrVwiLDYsXCLrp7brp7tcIiw0LFwi66iCXCIsNSxcIuuoiVwiLDExLFwi66iWXCIsMzMsXCLrqLrrqLvrqL3rqL7rqL/rqYHrqYPrqYTrqYXrqYZcIl0sXG5bXCI5MTQxXCIsXCLrqYfrqYrrqYzrqY/rqZDrqZHrqZLrqZbrqZfrqZnrqZrrqZvrqZ1cIiw2LFwi66mm66mqXCIsNV0sXG5bXCI5MTYxXCIsXCLrqbLrqbPrqbXrqbbrqbfrqblcIiw5LFwi66qG66qI66qJ66qK66qL66qNXCIsNV0sXG5bXCI5MTgxXCIsXCLrqpNcIiwyMCxcIuuqquuqreuqruuqr+uqseuqs1wiLDQsXCLrqrrrqrzrqr5cIiw1LFwi66uF66uG66uH66uJXCIsMTQsXCLrq5pcIiwzMyxcIuurveurvuurv+usgeusguusg+ushVwiLDcsXCLrrI7rrJDrrJJcIiw1LFwi66yZ66ya66yb66yd66ye66yf66yhXCIsNl0sXG5bXCI5MjQxXCIsXCLrrKjrrKrrrKxcIiw3LFwi66y366y566y666y/XCIsNCxcIuuthuutiOutiuuti+utjOutjuutkeutklwiXSxcbltcIjkyNjFcIixcIuutk+utleutluutl+utmVwiLDcsXCLrraLrraRcIiw3LFwi662tXCIsNF0sXG5bXCI5MjgxXCIsXCLrrbJcIiwyMSxcIuuuieuuiuuui+uujeuujuuuj+uukVwiLDE4LFwi666l666m666n666p666q666r666tXCIsNixcIuuuteuutuuuuFwiLDcsXCLrr4Hrr4Lrr4Prr4Xrr4brr4frr4lcIiw2LFwi66+R66+S66+UXCIsMzUsXCLrr7rrr7vrr73rr77rsIFcIl0sXG5bXCI5MzQxXCIsXCLrsINcIiw0LFwi67CK67CO67CQ67CS67CT67CZ67Ca67Cg67Ch67Ci67Cj67Cm67Co67Cq67Cr67Cs67Cu67Cv67Cy67Cz67C1XCJdLFxuW1wiOTM2MVwiLFwi67C267C367C5XCIsNixcIuuxguuxhuuxh+uxiOuxiuuxi+uxjuuxj+uxkVwiLDhdLFxuW1wiOTM4MVwiLFwi67Ga67Gb67Gc67GeXCIsMzcsXCLrsobrsofrsonrsorrso3rso9cIiw0LFwi67KW67KY67KbXCIsNCxcIuuyouuyo+uypeuypuuyqVwiLDYsXCLrsrLrsrZcIiw1LFwi67K+67K/67OB67OC67OD67OFXCIsNyxcIuuzjuuzkuuzk+uzlOuzluuzl+uzmeuzmuuzm+uznVwiLDIyLFwi67O367O567O667O767O9XCJdLFxuW1wiOTQ0MVwiLFwi67O+XCIsNSxcIuu0huu0iOu0ilwiLDUsXCLrtJHrtJLrtJPrtJVcIiw4XSxcbltcIjk0NjFcIixcIuu0nlwiLDUsXCLrtKVcIiw2LFwi67StXCIsMTJdLFxuW1wiOTQ4MVwiLFwi67S6XCIsNSxcIuu1gVwiLDYsXCLrtYrrtYvrtY3rtY7rtY/rtZFcIiw2LFwi67WaXCIsOSxcIuu1peu1puu1p+u1qVwiLDIyLFwi67aC67aD67aF67aG67aLXCIsNCxcIuu2kuu2lOu2luu2l+u2mOu2m+u2nVwiLDYsXCLrtqVcIiwxMCxcIuu2sVwiLDYsXCLrtrlcIiwyNF0sXG5bXCI5NTQxXCIsXCLrt5Lrt5Prt5brt5frt5nrt5rrt5vrt51cIiwxMSxcIuu3qlwiLDUsXCLrt7FcIl0sXG5bXCI5NTYxXCIsXCLrt7Lrt7Prt7Xrt7brt7frt7lcIiw2LFwi67iB67iC67iE67iGXCIsNSxcIuu4juu4j+u4keu4kuu4k1wiXSxcbltcIjk1ODFcIixcIuu4lVwiLDYsXCLruJ7ruKBcIiwzNSxcIuu5huu5h+u5ieu5iuu5i+u5jeu5j1wiLDQsXCLruZbruZjruZzruZ3ruZ7ruZ/ruaLruaPruaXruabruafruanruatcIiw0LFwi67my67m2XCIsNCxcIuu5vuu5v+u6geu6guu6g+u6hVwiLDYsXCLruo7rupJcIiw1LFwi67qaXCIsMTMsXCLruqlcIiwxNF0sXG5bXCI5NjQxXCIsXCLrurhcIiwyMyxcIuu7kuu7k1wiXSxcbltcIjk2NjFcIixcIuu7leu7luu7mVwiLDYsXCLru6Hru6Lru6ZcIiw1LFwi67utXCIsOF0sXG5bXCI5NjgxXCIsXCLru7ZcIiwxMCxcIuu8glwiLDUsXCLrvIpcIiwxMyxcIuu8muu8nlwiLDMzLFwi672C672D672F672G672H672JXCIsNixcIuu9kuu9k+u9lOu9llwiLDQ0XSxcbltcIjk3NDFcIixcIuu+g1wiLDE2LFwi676VXCIsOF0sXG5bXCI5NzYxXCIsXCLrvp5cIiwxNyxcIuu+sVwiLDddLFxuW1wiOTc4MVwiLFwi6765XCIsMTEsXCLrv4ZcIiw1LFwi67+O67+P67+R67+S67+T67+VXCIsNixcIuu/neu/nuu/oOu/olwiLDg5LFwi7IC97IC+7IC/XCJdLFxuW1wiOTg0MVwiLFwi7IGAXCIsMTYsXCLsgZJcIiw1LFwi7IGZ7IGa7IGbXCJdLFxuW1wiOTg2MVwiLFwi7IGd7IGe7IGf7IGhXCIsNixcIuyBqlwiLDE1XSxcbltcIjk4ODFcIixcIuyBulwiLDIxLFwi7IKS7IKT7IKV7IKW7IKX7IKZXCIsNixcIuyCouyCpOyCplwiLDUsXCLsgq7sgrHsgrLsgrdcIiw0LFwi7IK+7IOC7IOD7IOE7IOG7IOH7IOK7IOL7ION7IOO7IOP7IORXCIsNixcIuyDmuyDnlwiLDUsXCLsg6bsg6fsg6nsg6rsg6vsg61cIiw2LFwi7IO27IO47IO6XCIsNSxcIuyEgeyEguyEg+yEheyEhuyEh+yEiVwiLDYsXCLshJHshJLshJPshJTshJZcIiw1LFwi7ISh7ISi7ISl7ISo7ISp7ISq7ISr7ISuXCJdLFxuW1wiOTk0MVwiLFwi7ISy7ISz7IS07IS17IS37IS67IS77IS97IS+7IS/7IWBXCIsNixcIuyFiuyFjlwiLDUsXCLshZbshZdcIl0sXG5bXCI5OTYxXCIsXCLshZnshZrshZvshZ1cIiw2LFwi7IWm7IWqXCIsNSxcIuyFseyFsuyFs+yFteyFtuyFt+yFueyFuuyFu1wiXSxcbltcIjk5ODFcIixcIuyFvFwiLDgsXCLshoZcIiw1LFwi7IaP7IaR7IaS7IaT7IaV7IaXXCIsNCxcIuyGnuyGoOyGouyGo+yGpOyGpuyGp+yGquyGq+yGreyGruyGr+yGsVwiLDExLFwi7Ia+XCIsNSxcIuyHheyHhuyHh+yHieyHiuyHi+yHjVwiLDYsXCLsh5Xsh5bsh5lcIiw2LFwi7Ieh7Iei7Iej7Iel7Iem7Ien7IepXCIsNixcIuyHsuyHtFwiLDcsXCLsh77sh7/siIHsiILsiIPsiIVcIiw2LFwi7IiO7IiQ7IiSXCIsNSxcIuyImuyIm+yIneyInuyIoeyIouyIo1wiXSxcbltcIjlhNDFcIixcIuyIpOyIpeyIpuyIp+yIquyIrOyIruyIsOyIs+yItVwiLDE2XSxcbltcIjlhNjFcIixcIuyJhuyJh+yJiVwiLDYsXCLsiZLsiZPsiZXsiZbsiZfsiZlcIiw2LFwi7Imh7Imi7Imj7Imk7ImmXCJdLFxuW1wiOWE4MVwiLFwi7ImnXCIsNCxcIuyJruyJr+yJseyJsuyJs+yJtVwiLDYsXCLsib7sioDsioJcIiw1LFwi7IqKXCIsNSxcIuyKkVwiLDYsXCLsipnsiprsipzsip5cIiw1LFwi7Iqm7Iqn7Iqp7Iqq7Iqr7IquXCIsNSxcIuyKtuyKuOyKulwiLDMzLFwi7Iue7Iuf7Iuh7Iui7IulXCIsNSxcIuyLruyLsOyLsuyLs+yLtOyLteyLt+yLuuyLveyLvuyLv+yMgVwiLDYsXCLsjIrsjIvsjI7sjI9cIl0sXG5bXCI5YjQxXCIsXCLsjJDsjJHsjJLsjJbsjJfsjJnsjJrsjJvsjJ1cIiw2LFwi7Iym7Iyn7IyqXCIsOF0sXG5bXCI5YjYxXCIsXCLsjLNcIiwxNyxcIuyNhlwiLDddLFxuW1wiOWI4MVwiLFwi7I2OXCIsMjUsXCLsjarsjavsja3sja7sja/sjbHsjbNcIiw0LFwi7I267I277I2+XCIsNSxcIuyOheyOhuyOh+yOieyOiuyOi+yOjVwiLDUwLFwi7I+BXCIsMjIsXCLsj5pcIl0sXG5bXCI5YzQxXCIsXCLsj5vsj53sj57sj6Hsj6NcIiw0LFwi7I+q7I+r7I+s7I+uXCIsNSxcIuyPtuyPt+yPuVwiLDVdLFxuW1wiOWM2MVwiLFwi7I+/XCIsOCxcIuyQiVwiLDYsXCLskJFcIiw5XSxcbltcIjljODFcIixcIuyQm1wiLDgsXCLskKVcIiw2LFwi7JCt7JCu7JCv7JCx7JCy7JCz7JC1XCIsNixcIuyQvlwiLDksXCLskYlcIiwyNixcIuyRpuyRp+yRqeyRquyRq+yRrVwiLDYsXCLskbbskbfskbjskbpcIiw1LFwi7JKBXCIsMTgsXCLskpVcIiw2LFwi7JKdXCIsMTJdLFxuW1wiOWQ0MVwiLFwi7JKqXCIsMTMsXCLskrnskrrskrvskr1cIiw4XSxcbltcIjlkNjFcIixcIuyThlwiLDI1XSxcbltcIjlkODFcIixcIuyToFwiLDgsXCLsk6pcIiw1LFwi7JOy7JOz7JO17JO27JO37JO57JO77JO87JO97JO+7JSCXCIsOSxcIuyUjeyUjuyUj+yUkeyUkuyUk+yUlVwiLDYsXCLslJ1cIiwxMCxcIuyUquyUq+yUreyUruyUr+yUsVwiLDYsXCLslLrslLzslL5cIiw1LFwi7JWG7JWH7JWL7JWP7JWQ7JWR7JWS7JWW7JWa7JWb7JWc7JWf7JWi7JWj7JWl7JWm7JWn7JWpXCIsNixcIuyVsuyVtlwiLDUsXCLslb7slb/sloHsloLsloPsloXslobslojslonslorslovslo7slpDslpLslpPslpRcIl0sXG5bXCI5ZTQxXCIsXCLslpbslpnslprslpvslp3slp7slp/slqFcIiw3LFwi7JaqXCIsOSxcIuyWtlwiXSxcbltcIjllNjFcIixcIuyWt+yWuuyWv1wiLDQsXCLsl4vsl43sl4/sl5Lsl5Psl5Xsl5bsl5fsl5lcIiw2LFwi7Jei7Jek7Jem7JenXCJdLFxuW1wiOWU4MVwiLFwi7Jeo7Jep7Jeq7Jer7Jev7Jex7Jey7Jez7Je17Je47Je57Je67Je77JiC7JiD7JiE7JiJ7JiK7JiL7JiN7JiO7JiP7JiRXCIsNixcIuyYmuyYnVwiLDYsXCLsmKbsmKfsmKnsmKrsmKvsmK/smLHsmLLsmLbsmLjsmLrsmLzsmL3smL7smL/smYLsmYPsmYXsmYbsmYfsmYlcIiw2LFwi7JmS7JmWXCIsNSxcIuyZnuyZn+yZoVwiLDEwLFwi7Jmt7Jmu7Jmw7JmyXCIsNSxcIuyZuuyZu+yZveyZvuyZv+yagVwiLDYsXCLsmorsmozsmo5cIiw1LFwi7JqW7JqX7JqZ7Jqa7Jqb7JqdXCIsNixcIuyaplwiXSxcbltcIjlmNDFcIixcIuyaqOyaqlwiLDUsXCLsmrLsmrPsmrXsmrbsmrfsmrtcIiw0LFwi7JuC7JuE7JuGXCIsNSxcIuybjlwiXSxcbltcIjlmNjFcIixcIuybj+ybkeybkuybk+yblVwiLDYsXCLsm57sm5/sm6JcIiw1LFwi7Juq7Jur7Jut7Juu7Juv7Jux7JuyXCJdLFxuW1wiOWY4MVwiLFwi7JuzXCIsNCxcIuybuuybu+ybvOybvlwiLDUsXCLsnIbsnIfsnInsnIrsnIvsnI1cIiw2LFwi7JyW7JyY7JyaXCIsNSxcIuycouyco+ycpeycpuycp+ycqVwiLDYsXCLsnLLsnLTsnLbsnLjsnLnsnLrsnLvsnL7snL/snYHsnYLsnYPsnYVcIiw0LFwi7J2L7J2O7J2Q7J2Z7J2a7J2b7J2d7J2e7J2f7J2hXCIsNixcIuydqeydquydrFwiLDcsXCLsnbbsnbfsnbnsnbrsnbvsnb/snoDsnoHsnoLsnobsnovsnozsno3sno/snpLsnpPsnpXsnpnsnptcIiw0LFwi7J6i7J6nXCIsNCxcIuyeruyer+yeseyesuyes+yeteyetuyet1wiXSxcbltcImEwNDFcIixcIuyeuOyeueyeuuyeu+yevuyfglwiLDUsXCLsn4rsn4vsn43sn4/sn5FcIiw2LFwi7J+Z7J+a7J+b7J+cXCJdLFxuW1wiYTA2MVwiLFwi7J+eXCIsNSxcIuyfpeyfpuyfp+yfqeyfquyfq+yfrVwiLDEzXSxcbltcImEwODFcIixcIuyfu1wiLDQsXCLsoILsoIPsoIXsoIbsoIfsoInsoItcIiw0LFwi7KCS7KCU7KCXXCIsNCxcIuygnuygn+ygoeygouygo+ygpVwiLDYsXCLsoK7soLDsoLJcIiw1LFwi7KC57KC67KC77KC97KC+7KC/7KGBXCIsNixcIuyhiuyhi+yhjlwiLDUsXCLsoZVcIiwyNixcIuyhsuyhs+yhteyhtuyht+yhueyhu1wiLDQsXCLsooLsooTsoojsoonsoorsoo5cIiw1LFwi7KKVXCIsNyxcIuyinuyioOyiouyio+yipFwiXSxcbltcImExNDFcIixcIuyipeyipuyip+yiqVwiLDE4LFwi7KK+7KK/7KOA7KOBXCJdLFxuW1wiYTE2MVwiLFwi7KOC7KOD7KOF7KOG7KOH7KOJ7KOK7KOL7KONXCIsNixcIuyjluyjmOyjmlwiLDUsXCLso6Lso6Pso6VcIl0sXG5bXCJhMTgxXCIsXCLso6ZcIiwxNCxcIuyjtlwiLDUsXCLso77so7/spIHspILspIPspIdcIiw0LFwi7KSO44CA44CB44CCwrfigKXigKbCqOOAg8Kt4oCV4oil77y84oi84oCY4oCZ4oCc4oCd44CU44CV44CIXCIsOSxcIsKxw5fDt+KJoOKJpOKJpeKInuKItMKw4oCy4oCz4oSD4oSr77+g77+h77+l4pmC4pmA4oig4oql4oyS4oiC4oiH4omh4omSwqfigLvimIbimIXil4vil4/il47il4fil4bilqHilqDilrPilrLilr3ilrzihpLihpDihpHihpPihpTjgJPiiariiaviiJriiL3iiJ3iiLXiiKviiKziiIjiiIviiobiiofiioLiioPiiKriiKniiKfiiKjvv6JcIl0sXG5bXCJhMjQxXCIsXCLspJDspJJcIiw1LFwi7KSZXCIsMThdLFxuW1wiYTI2MVwiLFwi7KStXCIsNixcIuyktVwiLDE4XSxcbltcImEyODFcIixcIuyliFwiLDcsXCLspZLspZPspZXspZbspZfspZlcIiw2LFwi7KWi7KWkXCIsNyxcIuylreylruylr+KHkuKHlOKIgOKIg8K0772ey4fLmMudy5rLmcK4y5vCocK/y5DiiK7iiJHiiI/CpOKEieKAsOKXgeKXgOKWt+KWtuKZpOKZoOKZoeKZpeKZp+KZo+KKmeKXiOKWo+KXkOKXkeKWkuKWpOKWpeKWqOKWp+KWpuKWqeKZqOKYj+KYjuKYnOKYnsK24oCg4oCh4oaV4oaX4oaZ4oaW4oaY4pmt4pmp4pmq4pms44m/44ic4oSW44+H4oSi44+C44+Y4oSh4oKswq5cIl0sXG5bXCJhMzQxXCIsXCLspbHspbLspbPspbVcIiw2LFwi7KW9XCIsMTAsXCLsporspovspo3spo7spo9cIl0sXG5bXCJhMzYxXCIsXCLsppFcIiw2LFwi7Kaa7Kac7KaeXCIsMTZdLFxuW1wiYTM4MVwiLFwi7KavXCIsMTYsXCLsp4Lsp4Psp4Xsp4bsp4nsp4tcIiw0LFwi7KeS7KeU7KeX7KeY7Keb77yBXCIsNTgsXCLvv6bvvL1cIiwzMixcIu+/o1wiXSxcbltcImE0NDFcIixcIuynnuynn+ynoeyno+ynpeynpuynqOynqeynquynq+ynruynslwiLDUsXCLsp7rsp7vsp73sp77sp7/sqIHsqILsqIPsqIRcIl0sXG5bXCJhNDYxXCIsXCLsqIXsqIbsqIfsqIrsqI5cIiw1LFwi7KiV7KiW7KiX7KiZXCIsMTJdLFxuW1wiYTQ4MVwiLFwi7Kim7Kin7Kio7KiqXCIsMjgsXCLjhLFcIiw5M10sXG5bXCJhNTQxXCIsXCLsqYdcIiw0LFwi7KmO7KmP7KmR7KmS7KmT7KmVXCIsNixcIuypnuypolwiLDUsXCLsqansqapcIl0sXG5bXCJhNTYxXCIsXCLsqatcIiwxNyxcIuypvlwiLDUsXCLsqoXsqoZcIl0sXG5bXCJhNTgxXCIsXCLsqodcIiwxNixcIuyqmVwiLDE0LFwi4oWwXCIsOV0sXG5bXCJhNWIwXCIsXCLihaBcIiw5XSxcbltcImE1YzFcIixcIs6RXCIsMTYsXCLOo1wiLDZdLFxuW1wiYTVlMVwiLFwizrFcIiwxNixcIs+DXCIsNl0sXG5bXCJhNjQxXCIsXCLsqqhcIiwxOSxcIuyqvuyqv+yrgeyrguyrg+yrhVwiXSxcbltcImE2NjFcIixcIuyrhlwiLDUsXCLsq47sq5Dsq5Lsq5Tsq5Xsq5bsq5fsq5pcIiw1LFwi7KuhXCIsNl0sXG5bXCJhNjgxXCIsXCLsq6jsq6nsq6rsq6vsq61cIiw2LFwi7Ku1XCIsMTgsXCLsrInsrIrilIDilILilIzilJDilJjilJTilJzilKzilKTilLTilLzilIHilIPilI/ilJPilJvilJfilKPilLPilKvilLvilYvilKDilK/ilKjilLfilL/ilJ3ilLDilKXilLjilYLilJLilJHilJrilJnilJbilJXilI7ilI3ilJ7ilJ/ilKHilKLilKbilKfilKnilKrilK3ilK7ilLHilLLilLXilLbilLnilLrilL3ilL7ilYDilYHilYNcIiw3XSxcbltcImE3NDFcIixcIuysi1wiLDQsXCLsrJHsrJLsrJPsrJXsrJbsrJfsrJlcIiw2LFwi7KyiXCIsN10sXG5bXCJhNzYxXCIsXCLsrKpcIiwyMixcIuytguytg+ythFwiXSxcbltcImE3ODFcIixcIuytheythuyth+ytiuyti+ytjeytjuytj+ytkVwiLDYsXCLsrZrsrZvsrZzsrZ5cIiw1LFwi7K2lXCIsNyxcIuOOleOOluOOl+KEk+OOmOOPhOOOo+OOpOOOpeOOpuOOmVwiLDksXCLjj4rjjo3jjo7jjo/jj4/jjojjjonjj4jjjqfjjqjjjrBcIiw5LFwi446AXCIsNCxcIuOOulwiLDUsXCLjjpBcIiw0LFwi4oSm44+A44+B446K446L446M44+W44+F446t446u446v44+b446p446q446r446s44+d44+Q44+T44+D44+J44+c44+GXCJdLFxuW1wiYTg0MVwiLFwi7K2tXCIsMTAsXCLsrbpcIiwxNF0sXG5bXCJhODYxXCIsXCLsrolcIiwxOCxcIuyunVwiLDZdLFxuW1wiYTg4MVwiLFwi7K6kXCIsMTksXCLsrrlcIiwxMSxcIsOGw5DCqsSmXCJdLFxuW1wiYThhNlwiLFwixLJcIl0sXG5bXCJhOGE4XCIsXCLEv8WBw5jFksK6w57FpsWKXCJdLFxuW1wiYThiMVwiLFwi44mgXCIsMjcsXCLik5BcIiwyNSxcIuKRoFwiLDE0LFwiwr3ihZPihZTCvMK+4oWb4oWc4oWd4oWeXCJdLFxuW1wiYTk0MVwiLFwi7K+FXCIsMTQsXCLsr5VcIiwxMF0sXG5bXCJhOTYxXCIsXCLsr6Dsr6Hsr6Lsr6Psr6Xsr6bsr6jsr6pcIiwxOF0sXG5bXCJhOTgxXCIsXCLsr71cIiwxNCxcIuywjuywj+ywkeywkuywk+ywlVwiLDYsXCLssJ7ssJ/ssKDssKPssKTDpsSRw7DEp8SxxLPEuMWAxYLDuMWTw5/DvsWnxYvFieOIgFwiLDI3LFwi4pKcXCIsMjUsXCLikbRcIiwxNCxcIsK5wrLCs+KBtOKBv+KCgeKCguKCg+KChFwiXSxcbltcImFhNDFcIixcIuywpeywpuywquywq+ywreywr+ywsVwiLDYsXCLssLrssL9cIiw0LFwi7LGG7LGH7LGJ7LGK7LGL7LGN7LGOXCJdLFxuW1wiYWE2MVwiLFwi7LGPXCIsNCxcIuyxluyxmlwiLDUsXCLssaHssaLssaPssaXssafssalcIiw2LFwi7LGx7LGyXCJdLFxuW1wiYWE4MVwiLFwi7LGz7LG07LG2XCIsMjksXCLjgYFcIiw4Ml0sXG5bXCJhYjQxXCIsXCLsspTsspXsspbsspfssprsspvssp3ssp7ssp/ssqFcIiw2LFwi7LKq7LKuXCIsNSxcIuyytuyyt+yyuVwiXSxcbltcImFiNjFcIixcIuyyuuyyu+yyvVwiLDYsXCLss4bss4jss4pcIiw1LFwi7LOR7LOS7LOT7LOVXCIsNV0sXG5bXCJhYjgxXCIsXCLss5tcIiw4LFwi7LOlXCIsNixcIuyzreyzruyzr+yzsVwiLDEyLFwi44KhXCIsODVdLFxuW1wiYWM0MVwiLFwi7LO+7LO/7LSA7LSCXCIsNSxcIuy0iuy0i+y0jey0juy0j+y0kVwiLDYsXCLstJrstJzstJ7stJ/stKBcIl0sXG5bXCJhYzYxXCIsXCLstKHstKLstKPstKXstKbstKfstKnstKrstKvstK1cIiwxMSxcIuy0ulwiLDRdLFxuW1wiYWM4MVwiLFwi7LS/XCIsMjgsXCLstZ3stZ7stZ/QkFwiLDUsXCLQgdCWXCIsMjVdLFxuW1wiYWNkMVwiLFwi0LBcIiw1LFwi0ZHQtlwiLDI1XSxcbltcImFkNDFcIixcIuy1oey1ouy1o+y1pVwiLDYsXCLsta7stbDstbJcIiw1LFwi7LW5XCIsN10sXG5bXCJhZDYxXCIsXCLstoFcIiw2LFwi7LaJXCIsMTAsXCLstpbstpfstpnstprstpvstp3stp7stp9cIl0sXG5bXCJhZDgxXCIsXCLstqDstqHstqLstqPstqbstqjstqpcIiw1LFwi7LaxXCIsMTgsXCLst4VcIl0sXG5bXCJhZTQxXCIsXCLst4ZcIiw1LFwi7LeN7LeO7LeP7LeRXCIsMTZdLFxuW1wiYWU2MVwiLFwi7LeiXCIsNSxcIuy3qey3quy3q+y3rey3ruy3r+y3sVwiLDYsXCLst7rst7zst75cIiw0XSxcbltcImFlODFcIixcIuy4g+y4hey4huy4h+y4iey4iuy4i+y4jVwiLDYsXCLsuJXsuJbsuJfsuJjsuJpcIiw1LFwi7Lii7Lij7Lil7Lim7Lin7Lip7Liq7LirXCJdLFxuW1wiYWY0MVwiLFwi7Lis7Lit7Liu7Liv7Liy7Li07Li2XCIsMTldLFxuW1wiYWY2MVwiLFwi7LmKXCIsMTMsXCLsuZrsuZvsuZ3suZ7suaJcIiw1LFwi7Lmq7LmsXCJdLFxuW1wiYWY4MVwiLFwi7LmuXCIsNSxcIuy5tuy5t+y5uey5uuy5u+y5vVwiLDYsXCLsuobsuojsuopcIiw1LFwi7LqS7LqT7LqV7LqW7LqX7LqZXCJdLFxuW1wiYjA0MVwiLFwi7LqaXCIsNSxcIuy6ouy6plwiLDUsXCLsuq5cIiwxMl0sXG5bXCJiMDYxXCIsXCLsurtcIiw1LFwi7LuCXCIsMTldLFxuW1wiYjA4MVwiLFwi7LuWXCIsMTMsXCLsu6bsu6fsu6nsu6rsu61cIiw2LFwi7Lu27Lu6XCIsNSxcIuqwgOqwgeqwhOqwh+qwiOqwieqwiuqwkFwiLDcsXCLqsJlcIiw0LFwi6rCg6rCk6rCs6rCt6rCv6rCw6rCx6rC46rC56rC86rGA6rGL6rGN6rGU6rGY6rGc6rGw6rGx6rG06rG36rG46rG66rKA6rKB6rKD6rKE6rKF6rKG6rKJ6rKK6rKL6rKM6rKQ6rKU6rKc6rKd6rKf6rKg6rKh6rKo6rKp6rKq6rKs6rKv6rKw6rK46rK56rK76rK86rK96rOB6rOE6rOI6rOM6rOV6rOX6rOg6rOh6rOk6rOn6rOo6rOq6rOs6rOv6rOw6rOx6rOz6rO16rO26rO86rO96rSA6rSE6rSGXCJdLFxuW1wiYjE0MVwiLFwi7LyC7LyD7LyF7LyG7LyH7LyJXCIsNixcIuy8kuy8lOy8llwiLDUsXCLsvJ3svJ7svJ/svKHsvKLsvKNcIl0sXG5bXCJiMTYxXCIsXCLsvKVcIiw2LFwi7Lyu7LyyXCIsNSxcIuy8uVwiLDExXSxcbltcImIxODFcIixcIuy9hVwiLDE0LFwi7L2W7L2X7L2Z7L2a7L2b7L2dXCIsNixcIuy9puy9qOy9quy9q+y9rOq0jOq0jeq0j+q0keq0mOq0nOq0oOq0qeq0rOq0req0tOq0teq0uOq0vOq1hOq1heq1h+q1ieq1kOq1lOq1mOq1oeq1o+q1rOq1req1sOq1s+q1tOq1teq1tuq1u+q1vOq1veq1v+q2geq2guq2iOq2ieq2jOq2kOq2nOq2neq2pOq2t+q3gOq3geq3hOq3iOq3kOq3keq3k+q3nOq3oOq3pOq3uOq3ueq3vOq3v+q4gOq4geq4iOq4ieq4i+q4jeq4lOq4sOq4seq4tOq4t+q4uOq4uuq5gOq5geq5g+q5heq5huq5iuq5jOq5jeq5juq5kOq5lOq5luq5nOq5neq5n+q5oOq5oeq5peq5qOq5qeq5rOq5sOq5uFwiXSxcbltcImIyNDFcIixcIuy9rey9ruy9r+y9suy9s+y9tey9tuy9t+y9uVwiLDYsXCLsvoHsvoLsvoPsvoTsvoZcIiw1LFwi7L6NXCJdLFxuW1wiYjI2MVwiLFwi7L6OXCIsMTgsXCLsvqJcIiw1LFwi7L6pXCJdLFxuW1wiYjI4MVwiLFwi7L6qXCIsNSxcIuy+sVwiLDE4LFwi7L+FXCIsNixcIuq5ueq5u+q5vOq5veq6hOq6heq6jOq6vOq6veq6vuq7gOq7hOq7jOq7jeq7j+q7kOq7keq7mOq7meq7nOq7qOq7q+q7req7tOq7uOq7vOq8h+q8iOq8jeq8kOq8rOq8req8sOq8suq8tOq8vOq8veq8v+q9geq9guq9g+q9iOq9ieq9kOq9nOq9neq9pOq9peq9ueq+gOq+hOq+iOq+kOq+keq+leq+nOq+uOq+ueq+vOq/gOq/h+q/iOq/ieq/i+q/jeq/juq/lOq/nOq/qOq/qeq/sOq/seq/tOq/uOuAgOuAgeuAhOuAjOuAkOuAlOuAnOuAneuAqOuBhOuBheuBiOuBiuuBjOuBjuuBk+uBlOuBleuBl+uBmVwiXSxcbltcImIzNDFcIixcIuy/jFwiLDE5LFwi7L+i7L+j7L+l7L+m7L+n7L+pXCJdLFxuW1wiYjM2MVwiLFwi7L+qXCIsNSxcIuy/suy/tOy/tlwiLDUsXCLsv73sv77sv7/tgIHtgILtgIPtgIVcIiw1XSxcbltcImIzODFcIixcIu2Ai1wiLDUsXCLtgJJcIiw1LFwi7YCZXCIsMTksXCLrgZ3rgbzrgb3rgoDrgoTrgozrgo3rgo/rgpHrgpjrgpnrgprrgpzrgp/rgqDrgqHrgqLrgqjrgqnrgqtcIiw0LFwi64Kx64Kz64K064K164K464K864OE64OF64OH64OI64OJ64OQ64OR64OU64OY64Og64Ol64SI64SJ64SL64SM64SQ64SS64ST64SY64SZ64Sb64Sc64Sd64Sj64Sk64Sl64So64Ss64S064S164S364S464S564WA64WB64WE64WI64WQ64WR64WU64WV64WY64Wc64Wg64W464W564W864aA64aC64aI64aJ64aL64aN64aS64aT64aU64aY64ac64ao64eM64eQ64eU64ec64edXCJdLFxuW1wiYjQ0MVwiLFwi7YCuXCIsNSxcIu2Atu2At+2Aue2Auu2Au+2AvVwiLDYsXCLtgYbtgYjtgYpcIiw1XSxcbltcImI0NjFcIixcIu2Bke2Bku2Bk+2Ble2Blu2Bl+2BmVwiLDYsXCLtgaFcIiwxMCxcIu2Bru2Br1wiXSxcbltcImI0ODFcIixcIu2Bse2Bsu2Bs+2BtVwiLDYsXCLtgb7tgb/tgoDtgoJcIiwxOCxcIuuHn+uHqOuHqeuHrOuHsOuHueuHu+uHveuIhOuIheuIiOuIi+uIjOuIlOuIleuIl+uImeuIoOuItOuIvOuJmOuJnOuJoOuJqOuJqeuJtOuJteuJvOuKhOuKheuKieuKkOuKkeuKlOuKmOuKmeuKmuuKoOuKoeuKo+uKpeuKpuuKquuKrOuKsOuKtOuLiOuLieuLjOuLkOuLkuuLmOuLmeuLm+uLneuLouuLpOuLpeuLpuuLqOuLq1wiLDQsXCLri7Pri7Tri7Xri7dcIiw0LFwi64u/64yA64yB64yE64yI64yQ64yR64yT64yU64yV64yc642U642V642W642Y642b642c642e642f642k642lXCJdLFxuW1wiYjU0MVwiLFwi7YKVXCIsMTQsXCLtgqbtgqftgqntgqrtgqvtgq1cIiw1XSxcbltcImI1NjFcIixcIu2Cs+2Ctu2CuO2CulwiLDUsXCLtg4Ltg4Ptg4Xtg4btg4ftg4pcIiw1LFwi7YOS7YOWXCIsNF0sXG5bXCJiNTgxXCIsXCLtg5vtg57tg5/tg6Htg6Ltg6Ptg6VcIiw2LFwi7YOu7YOyXCIsNSxcIu2DuVwiLDExLFwi642n642p642r642u642w642x64206424646A646B646D646E646F646M646Q646U646g646h646o646s64+E64+F64+I64+L64+M64+O64+Q64+U64+V64+X64+Z64+b64+d64+g64+k64+o64+865CQ65CY65Cc65Cg65Co65Cp65Cr65C065GQ65GR65GU65GY65Gg65Gh65Gj65Gl65Gs65KA65KI65Kd65Kk65Ko65Ks65K165K365K565OA65OE65OI65OQ65OV65Oc65Od65Og65Oj65Ok65Om65Os65Ot65Ov65Ox65O465SU65SV65SY65Sb65Sc65Sk65Sl65Sn65So65Sp65Sq65Sw65Sx65S065S4XCJdLFxuW1wiYjY0MVwiLFwi7YSFXCIsNyxcIu2EjlwiLDE3XSxcbltcImI2NjFcIixcIu2EoFwiLDE1LFwi7YSy7YSz7YS17YS27YS37YS57YS77YS87YS97YS+XCJdLFxuW1wiYjY4MVwiLFwi7YS/7YWC7YWGXCIsNSxcIu2Fju2Fj+2Fke2Fku2Fk+2FlVwiLDYsXCLthZ7thaDthaJcIiw1LFwi7YWp7YWq7YWr7YWt65WA65WB65WD65WE65WF65WL65WM65WN65WQ65WU65Wc65Wd65Wf65Wg65Wh65ag65ah65ak65ao65aq65ar65aw65ax65az65a065a165a765a865a965eA65eE65eM65eN65eP65eQ65eR65eY65es65iQ65iR65iU65iY65il65is65i065mI65mk65mo65qc65qd65qg65qk65qr65qs65qx65uU65uw65u065u465yA65yB65yF65yo65yp65ys65yv65yw65y465y565y7652E652I652M652U652V652g652k652o652w652x652z652165286529656A656E656M656N656P656Q656R656S656W656XXCJdLFxuW1wiYjc0MVwiLFwi7YWuXCIsMTMsXCLthb1cIiw2LFwi7YaF7YaG7YaH7YaJ7YaKXCJdLFxuW1wiYjc2MVwiLFwi7YaLXCIsMjAsXCLthqLthqPthqXthqbthqdcIl0sXG5bXCJiNzgxXCIsXCLthqlcIiw2LFwi7Yay7Ya07Ya27Ya37Ya47Ya57Ya77Ya97Ya+7Ya/7YeBXCIsMTQsXCLrnpjrnpnrnpzrnqDrnqjrnqnrnqvrnqzrnq3rnrTrnrXrnrjrn4frn4nrn6zrn63rn7Drn7Trn7zrn73rn7/roIDroIHroIfroIjroInroIzroJDroJjroJnroJvroJ3roKTroKXroKjroKzroLTroLXroLfroLjroLnroYDroYTroZHroZProZzroZ3roaDroaTroazroa3roa/robHrobjrobzroo3roqjrorDrorTrorjro4Dro4Hro4Pro4Xro4zro5Dro5Tro53ro5/ro6Hro6jro6nro6zro7Dro7jro7nro7vro73rpITrpJjrpKDrpLzrpL3rpYDrpYTrpYzrpY/rpZHrpZjrpZnrpZzrpaDrpajrpalcIl0sXG5bXCJiODQxXCIsXCLth5BcIiw3LFwi7YeZXCIsMTddLFxuW1wiYjg2MVwiLFwi7YerXCIsOCxcIu2Hte2Htu2Ht+2HuVwiLDEzXSxcbltcImI4ODFcIixcIu2IiO2IilwiLDUsXCLtiJFcIiwyNCxcIuulq+ulreultOulteuluOulvOumhOumheumh+umieumiuumjeumjuumrOumreumsOumtOumvOumveumv+ungeuniOunieunjOunjlwiLDQsXCLrp5jrp5nrp5vrp53rp57rp6Hrp6Prp6Trp6Xrp6jrp6zrp7Trp7Xrp7frp7jrp7nrp7rrqIDrqIHrqIjrqJXrqLjrqLnrqLzrqYDrqYLrqYjrqYnrqYvrqY3rqY7rqZPrqZTrqZXrqZjrqZzrqaTrqaXrqafrqajrqanrqbDrqbHrqbTrqbjrqoPrqoTrqoXrqofrqozrqqjrqqnrqqvrqqzrqrDrqrLrqrjrqrnrqrvrqr3rq4Trq4jrq5jrq5nrq7xcIl0sXG5bXCJiOTQxXCIsXCLtiKrtiKvtiK7tiK/tiLHtiLLtiLPtiLVcIiw2LFwi7Yi+7YmA7YmCXCIsNSxcIu2Jie2Jiu2Ji+2JjFwiXSxcbltcImI5NjFcIixcIu2JjVwiLDE0LFwi7YmdXCIsNixcIu2Jpe2Jpu2Jp+2JqFwiXSxcbltcImI5ODFcIixcIu2JqVwiLDIyLFwi7YqC7YqD7YqF7YqG7YqH7YqJ7YqK7YqL7YqM66yA66yE66yN66yP66yR66yY66yc66yg66yp66yr66y066y166y266y466y766y866y966y+662E662F662H662J662N662P662Q662U662Y662h662j662s666I666M666Q666k666o666s6660666366+A66+E66+I66+Q66+T66+466+566+866+/67CA67CC67CI67CJ67CL67CM67CN67CP67CR67CUXCIsNCxcIuuwm1wiLDQsXCLrsKTrsKXrsKfrsKnrsK3rsLDrsLHrsLTrsLjrsYDrsYHrsYPrsYTrsYXrsYnrsYzrsY3rsZDrsZ3rsoTrsoXrsojrsovrsozrso7rspTrspXrspdcIl0sXG5bXCJiYTQxXCIsXCLtio3tio7tio/tipLtipPtipTtipZcIiw1LFwi7Yqd7Yqe7Yqf7Yqh7Yqi7Yqj7YqlXCIsNixcIu2KrVwiXSxcbltcImJhNjFcIixcIu2Kru2Kr+2KsO2KslwiLDUsXCLtirrtirvtir3tir7ti4Hti4NcIiw0LFwi7YuK7YuMXCIsNV0sXG5bXCJiYTgxXCIsXCLti5Lti5Pti5Xti5bti5fti5nti5rti5vti51cIiw2LFwi7YumXCIsOSxcIu2Lsu2Ls+2Lte2Ltu2Lt+2Lue2LuuuymeuymuuyoOuyoeuypOuyp+uyqOuysOuyseuys+uytOuyteuyvOuyveuzgOuzhOuzjeuzj+uzkOuzkeuzleuzmOuznOuztOuzteuztuuzuOuzvOu0hOu0heu0h+u0ieu0kOu0lOu0pOu0rOu1gOu1iOu1ieu1jOu1kOu1mOu1meu1pOu1qOu2gOu2geu2hOu2h+u2iOu2ieu2iuu2kOu2keu2k+u2leu2meu2muu2nOu2pOu2sOu2uOu3lOu3leu3mOu3nOu3qeu3sOu3tOu3uOu4gOu4g+u4heu4jOu4jeu4kOu4lOu4nOu4neu4n+u5hOu5heu5iOu5jOu5juu5lOu5leu5l+u5meu5muu5m+u5oOu5oeu5pFwiXSxcbltcImJiNDFcIixcIu2Lu1wiLDQsXCLtjILtjITtjIZcIiw1LFwi7YyP7YyR7YyS7YyT7YyV7YyXXCIsNCxcIu2Mnu2Mou2Mo1wiXSxcbltcImJiNjFcIixcIu2MpO2Mpu2Mp+2Mqu2Mq+2Mre2Mru2Mr+2MsVwiLDYsXCLtjLrtjL5cIiw1LFwi7Y2G7Y2H7Y2I7Y2JXCJdLFxuW1wiYmI4MVwiLFwi7Y2KXCIsMzEsXCLruajruarrubDrubHrubPrubTrubXrubvrubzrub3ruoDruoTruozruo3ruo/rupDrupHrupjrupnruqjru5Dru5Hru5Tru5fru5jru6Dru6Pru6Tru6Xru6zrvIHrvIjrvInrvJjrvJnrvJvrvJzrvJ3rvYDrvYHrvYTrvYjrvZDrvZHrvZXrvpTrvrDrv4Xrv4zrv43rv5Drv5Trv5zrv5/rv6HsgLzsgZHsgZjsgZzsgaDsgajsgansgpDsgpHsgpTsgpjsgqDsgqHsgqPsgqXsgqzsgq3sgq/sgrDsgrPsgrTsgrXsgrbsgrzsgr3sgr/sg4Dsg4Hsg4Xsg4jsg4nsg4zsg5Dsg5jsg5nsg5vsg5zsg53sg6RcIl0sXG5bXCJiYzQxXCIsXCLtjapcIiwxNyxcIu2Nvu2Nv+2Oge2Ogu2Og+2Ohe2Ohu2Oh1wiXSxcbltcImJjNjFcIixcIu2OiO2Oie2Oiu2Oi+2Oju2OklwiLDUsXCLtjprtjpvtjp3tjp7tjp/tjqFcIiw2LFwi7Y6q7Y6s7Y6uXCJdLFxuW1wiYmM4MVwiLFwi7Y6vXCIsNCxcIu2Ote2Otu2Ot+2Oue2Ouu2Ou+2OvVwiLDYsXCLtj4btj4ftj4pcIiw1LFwi7Y+RXCIsNSxcIuyDpeyDqOyDrOyDtOyDteyDt+yDueyEgOyEhOyEiOyEkOyEleyEnFwiLDQsXCLshKPshKTshKbshKfshKzshK3shK/shLDshLHshLbshLjshLnshLzshYDshYjshYnshYvshYzshY3shZTshZXshZjshZzshaTshaXshafshajshanshbDshbTshbjshoXshozsho3sho7shpDshpTshpbshpzshp3shp/shqHshqXshqjshqnshqzshrDshr3sh4Tsh4jsh4zsh5Tsh5fsh5jsh6Dsh6Tsh6jsh7Dsh7Hsh7Psh7zsh73siIDsiITsiIzsiI3siI/siJHsiJjsiJnsiJzsiJ/siKDsiKjsiKnsiKvsiK1cIl0sXG5bXCJiZDQxXCIsXCLtj5ftj5lcIiw3LFwi7Y+i7Y+kXCIsNyxcIu2Pru2Pr+2Pse2Psu2Ps+2Pte2Ptu2Pt1wiXSxcbltcImJkNjFcIixcIu2PuO2Pue2Puu2Pu+2Pvu2QgO2QglwiLDUsXCLtkIlcIiwxM10sXG5bXCJiZDgxXCIsXCLtkJdcIiw1LFwi7ZCeXCIsMjUsXCLsiK/siLHsiLLsiLTsiYjsiZDsiZHsiZTsiZjsiaDsiaXsiazsia3sibDsibTsibzsib3sib/sioHsiojsionsipDsipjsipvsip3siqTsiqXsiqjsiqzsiq3sirTsirXsirfsirnsi5zsi53si6Dsi6Psi6Tsi6vsi6zsi63si6/si7Hsi7bsi7jsi7nsi7vsi7zsjIDsjIjsjInsjIzsjI3sjJPsjJTsjJXsjJjsjJzsjKTsjKXsjKjsjKnsjYXsjajsjansjazsjbDsjbLsjbjsjbnsjbzsjb3sjoTsjojsjozsj4Dsj5jsj5nsj5zsj5/sj6Dsj6Lsj6jsj6nsj63sj7Tsj7Xsj7jskIjskJDskKTskKzskLBcIl0sXG5bXCJiZTQxXCIsXCLtkLhcIiw3LFwi7ZGB7ZGC7ZGD7ZGFXCIsMTRdLFxuW1wiYmU2MVwiLFwi7ZGUXCIsNyxcIu2Rne2Rnu2Rn+2Roe2Rou2Ro+2RpVwiLDcsXCLtka7tkbDtkbHtkbJcIl0sXG5bXCJiZTgxXCIsXCLtkbNcIiw0LFwi7ZG67ZG77ZG97ZG+7ZKB7ZKDXCIsNCxcIu2Siu2SjO2SjlwiLDUsXCLtkpVcIiw4LFwi7JC07JC87JC97JGI7JGk7JGl7JGo7JGs7JG07JG17JG57JKA7JKU7JKc7JK47JK87JOp7JOw7JOx7JO07JO47JO67JO/7JSA7JSB7JSM7JSQ7JSU7JSc7JSo7JSp7JSs7JSw7JS47JS57JS77JS97JWE7JWF7JWI7JWJ7JWK7JWM7JWN7JWO7JWT7JWU7JWV7JWX7JWY7JWZ7JWd7JWe7JWg7JWh7JWk7JWo7JWw7JWx7JWz7JW07JW17JW87JW97JaA7JaE7JaH7JaM7JaN7JaP7JaR7JaV7JaX7JaY7Jac7Jag7Jap7Ja07Ja17Ja47Ja57Ja77Ja87Ja97Ja+7JeEXCIsNixcIuyXjOyXjlwiXSxcbltcImJmNDFcIixcIu2SnlwiLDEwLFwi7ZKqXCIsMTRdLFxuW1wiYmY2MVwiLFwi7ZK5XCIsMTgsXCLtk43tk47tk4/tk5Htk5Ltk5Ptk5VcIl0sXG5bXCJiZjgxXCIsXCLtk5ZcIiw1LFwi7ZOd7ZOe7ZOgXCIsNyxcIu2Tqe2Tqu2Tq+2Tre2Tru2Tr+2TsVwiLDYsXCLtk7ntk7rtk7zsl5Dsl5Hsl5Tsl5jsl6Dsl6Hsl6Psl6Xsl6zsl63sl67sl7Dsl7Tsl7bsl7fsl7xcIiw1LFwi7JiF7JiG7JiH7JiI7JiM7JiQ7JiY7JiZ7Jib7Jic7Jik7Jil7Jio7Jis7Jit7Jiu7Jiw7Jiz7Ji07Ji17Ji37Ji57Ji77JmA7JmB7JmE7JmI7JmQ7JmR7JmT7JmU7JmV7Jmc7Jmd7Jmg7Jms7Jmv7Jmx7Jm47Jm57Jm87JqA7JqI7JqJ7JqL7JqN7JqU7JqV7JqY7Jqc7Jqk7Jql7Jqn7Jqp7Jqw7Jqx7Jq07Jq47Jq57Jq67JuA7JuB7JuD7JuF7JuM7JuN7JuQ7JuU7Juc7Jud7Jug7Juh7JuoXCJdLFxuW1wiYzA0MVwiLFwi7ZO+XCIsNSxcIu2Uhe2Uhu2Uh+2Uie2Uiu2Ui+2UjVwiLDYsXCLtlJbtlJhcIiw1XSxcbltcImMwNjFcIixcIu2UnlwiLDI1XSxcbltcImMwODFcIixcIu2UuO2Uue2Uuu2Uu+2Uvu2Uv+2Vge2Vgu2Vg+2VhVwiLDYsXCLtlY7tlZDtlZJcIiw1LFwi7ZWa7ZWb7ZWd7ZWe7ZWf7ZWh7ZWi7ZWj7Jup7Jus7Juw7Ju47Ju57Ju97JyE7JyF7JyI7JyM7JyU7JyV7JyX7JyZ7Jyg7Jyh7Jyk7Jyo7Jyw7Jyx7Jyz7Jy17Jy37Jy87Jy97J2A7J2E7J2K7J2M7J2N7J2P7J2RXCIsNyxcIuydnOydoOydqOydq+ydtOydteyduOydvOydveydvuyeg+yehOyeheyeh+yeiOyeieyeiuyejuyekOyekeyelOyeluyel+yemOyemuyeoOyeoeyeo+yepOyepeyepuyerOyereyesOyetOyevOyeveyev+yfgOyfgeyfiOyfieyfjOyfjuyfkOyfmOyfneyfpOyfqOyfrOyggOyggeyghOygiOygilwiXSxcbltcImMxNDFcIixcIu2VpO2Vpu2Vp+2Vqu2VrO2VrlwiLDUsXCLtlbbtlbftlbntlbrtlbvtlb1cIiw2LFwi7ZaG7ZaK7ZaLXCJdLFxuW1wiYzE2MVwiLFwi7ZaM7ZaN7ZaO7ZaP7ZaRXCIsMTksXCLtlqbtlqdcIl0sXG5bXCJjMTgxXCIsXCLtlqhcIiwzMSxcIuygkOygkeygk+ygleygluygnOygneygoOygpOygrOygreygr+ygseyguOygvOyhgOyhiOyhieyhjOyhjeyhlOyhsOyhseyhtOyhuOyhuuyigOyigeyig+yiheyihuyih+yii+yijOyijeyilOyineyin+yioeyiqOyivOyiveyjhOyjiOyjjOyjlOyjleyjl+yjmeyjoOyjoeyjpOyjteyjvOyjveykgOykhOykheykhuykjOykjeykj+ykkeykmOykrOyktOylkOylkeyllOylmOyloOyloeylo+ylrOylsOyltOylvOymiOymieymjOymkOymmOymmeymm+ymneyngOyngeynhOynh+yniOyniuynkOynkeynk1wiXSxcbltcImMyNDFcIixcIu2Xiu2Xi+2Xje2Xju2Xj+2Xke2Xk1wiLDQsXCLtl5rtl5ztl55cIiw1LFwi7Zem7Zen7Zep7Zeq7Zer7Zet7ZeuXCJdLFxuW1wiYzI2MVwiLFwi7ZevXCIsNCxcIu2Xtu2XuO2XulwiLDUsXCLtmILtmIPtmIXtmIbtmIftmIlcIiw2LFwi7ZiSXCJdLFxuW1wiYzI4MVwiLFwi7ZiWXCIsNSxcIu2Yne2Ynu2Yn+2Yoe2You2Yo+2YpVwiLDcsXCLtmK5cIiw5LFwi7Zi67Zi77KeV7KeW7KeZ7Kea7Kec7Ked7Keg7Kei7Kek7Ken7Kes7Ket7Kev7Kew7Kex7Ke47Ke57Ke87KiA7KiI7KiJ7KiL7KiM7KiN7KiU7KiY7Kip7KmM7KmN7KmQ7KmU7Kmc7Kmd7Kmf7Kmg7Kmh7Kmo7Km97KqE7KqY7Kq87Kq97KuA7KuE7KuM7KuN7KuP7KuR7KuT7KuY7KuZ7Kug7Kus7Ku07KyI7KyQ7KyU7KyY7Kyg7Kyh7K2B7K2I7K2J7K2M7K2Q7K2Y7K2Z7K2d7K2k7K247K257K6c7K647K+U7K+k7K+n7K+p7LCM7LCN7LCQ7LCU7LCc7LCd7LCh7LCi7LCn7LCo7LCp7LCs7LCu7LCw7LC47LC57LC7XCJdLFxuW1wiYzM0MVwiLFwi7Zi97Zi+7Zi/7ZmB7ZmC7ZmD7ZmE7ZmG7ZmH7ZmK7ZmM7ZmO7ZmP7ZmQ7ZmS7ZmT7ZmW7ZmX7ZmZ7Zma7Zmb7ZmdXCIsNF0sXG5bXCJjMzYxXCIsXCLtmaJcIiw0LFwi7Zmo7ZmqXCIsNSxcIu2Zsu2Zs+2ZtVwiLDExXSxcbltcImMzODFcIixcIu2age2agu2ahO2ahlwiLDUsXCLtmo7tmo/tmpHtmpLtmpPtmpVcIiw3LFwi7Zqe7Zqg7ZqiXCIsNSxcIu2aqe2aquywvOywveywvuyxhOyxheyxiOyxjOyxlOyxleyxl+yxmOyxmeyxoOyxpOyxpuyxqOyxsOyxteyymOyymeyynOyyoOyyqOyyqeyyq+yyrOyyreyytOyyteyyuOyyvOyzhOyzheyzh+yzieyzkOyzlOyzpOyzrOyzsOy0gey0iOy0iey0jOy0kOy0mOy0mey0m+y0ney0pOy0qOy0rOy0uey1nOy1oOy1pOy1rOy1rey1r+y1sey1uOy2iOy2lOy2ley2mOy2nOy2pOy2pey2p+y2qey2sOy3hOy3jOy3kOy3qOy3rOy3sOy3uOy3uey3u+y3vey4hOy4iOy4jOy4lOy4mey4oOy4oey4pOy4qOy4sOy4sey4s+y4tVwiXSxcbltcImM0NDFcIixcIu2aq+2are2aru2ar+2asVwiLDcsXCLtmrrtmrxcIiw3LFwi7ZuG7ZuH7ZuJ7ZuK7ZuLXCJdLFxuW1wiYzQ2MVwiLFwi7ZuN7ZuO7ZuP7ZuQ7ZuS7ZuT7ZuV7ZuW7ZuY7ZuaXCIsNSxcIu2boe2bou2bo+2bpe2bpu2bp+2bqVwiLDRdLFxuW1wiYzQ4MVwiLFwi7Zuu7Zuv7Zux7Zuy7Zuz7Zu07Zu2XCIsNSxcIu2bvu2bv+2cge2cgu2cg+2chVwiLDExLFwi7ZyS7ZyT7ZyU7LmY7LmZ7Lmc7Lmf7Lmg7Lmh7Lmo7Lmp7Lmr7Lmt7Lm07Lm17Lm47Lm87LqE7LqF7LqH7LqJ7LqQ7LqR7LqU7LqY7Lqg7Lqh7Lqj7Lqk7Lql7Lqs7Lqt7LuB7Luk7Lul7Luo7Lur7Lus7Lu07Lu17Lu37Lu47Lu57LyA7LyB7LyE7LyI7LyQ7LyR7LyT7LyV7Lyc7Lyg7Lyk7Lys7Lyt7Lyv7Lyw7Lyx7Ly47L2U7L2V7L2Y7L2c7L2k7L2l7L2n7L2p7L2w7L2x7L207L247L6A7L6F7L6M7L6h7L6o7L6w7L+E7L+g7L+h7L+k7L+o7L+w7L+x7L+z7L+17L+87YCA7YCE7YCR7YCY7YCt7YC07YC17YC47YC8XCJdLFxuW1wiYzU0MVwiLFwi7ZyV7ZyW7ZyX7Zya7Zyb7Zyd7Zye7Zyf7ZyhXCIsNixcIu2cqu2crO2crlwiLDUsXCLtnLbtnLftnLlcIl0sXG5bXCJjNTYxXCIsXCLtnLrtnLvtnL1cIiw2LFwi7Z2F7Z2G7Z2I7Z2KXCIsNSxcIu2dku2dk+2dle2dmlwiLDRdLFxuW1wiYzU4MVwiLFwi7Z2f7Z2i7Z2k7Z2m7Z2n7Z2o7Z2q7Z2r7Z2t7Z2u7Z2v7Z2x7Z2y7Z2z7Z21XCIsNixcIu2dvu2dv+2egO2eglwiLDUsXCLtnortnovtgYTtgYXtgYftgYntgZDtgZTtgZjtgaDtgaztga3tgbDtgbTtgbztgb3tgoHtgqTtgqXtgqjtgqztgrTtgrXtgrftgrntg4Dtg4Htg4Ttg4jtg4ntg5Dtg5Htg5Ptg5Ttg5Xtg5ztg53tg6Dtg6Ttg6ztg63tg6/tg7Dtg7Htg7jthI3thLDthLHthLTthLjthLrthYDthYHthYPthYTthYXthYzthY3thZDthZTthZzthZ3thZ/thaHthajthazthbzthoTthojthqDthqHthqTthqjthrDthrHthrPthrXthrrthrzth4Dth5jth7Tth7jtiIftiIntiJDtiKztiK3tiLDtiLTtiLztiL3tiL/tiYHtiYjtiZxcIl0sXG5bXCJjNjQxXCIsXCLtno3tno7tno/tnpFcIiw2LFwi7Z6a7Z6c7Z6eXCIsNV0sXG5bXCJjNmExXCIsXCLtiaTtioDtioHtioTtiojtipDtipHtipXtipztiqDtiqTtiqztirHtirjtirntirztir/ti4Dti4Lti4jti4nti4vti5Tti5jti5zti6Tti6Xti7Dti7Hti7Tti7jtjIDtjIHtjIPtjIXtjIztjI3tjI7tjJDtjJTtjJbtjJztjJ3tjJ/tjKDtjKHtjKXtjKjtjKntjKztjLDtjLjtjLntjLvtjLztjL3tjYTtjYXtjbztjb3tjoDtjoTtjoztjo3tjo/tjpDtjpHtjpjtjpntjpztjqDtjqjtjqntjqvtjq3tjrTtjrjtjrztj4Ttj4Xtj4jtj4ntj5Dtj5jtj6Htj6Ptj6ztj63tj7Dtj7Ttj7ztj73tj7/tkIFcIl0sXG5bXCJjN2ExXCIsXCLtkIjtkJ3tkYDtkYTtkZztkaDtkaTtka3tka/tkbjtkbntkbztkb/tkoDtkoLtkojtkontkovtko3tkpTtkqntk4ztk5Dtk5Ttk5ztk5/tk6jtk6ztk7Dtk7jtk7vtk73tlITtlIjtlIztlJTtlJXtlJftlLztlL3tlYDtlYTtlYztlY3tlY/tlZHtlZjtlZntlZztlaDtlaXtlajtlantlavtla3tlbTtlbXtlbjtlbztloTtloXtloftlojtlontlpDtlqXtl4jtl4ntl4ztl5Dtl5Ltl5jtl5ntl5vtl53tl6Ttl6Xtl6jtl6ztl7Ttl7Xtl7ftl7ntmIDtmIHtmITtmIjtmJDtmJHtmJPtmJTtmJXtmJztmKBcIl0sXG5bXCJjOGExXCIsXCLtmKTtmK3tmLjtmLntmLztmYDtmYXtmYjtmYntmYvtmY3tmZHtmZTtmZXtmZjtmZztmaftmantmbDtmbHtmbTtmoPtmoXtmoztmo3tmpDtmpTtmp3tmp/tmqHtmqjtmqztmrDtmrntmrvtm4Ttm4Xtm4jtm4ztm5Htm5Ttm5ftm5ntm6Dtm6Ttm6jtm7Dtm7Xtm7ztm73tnIDtnITtnJHtnJjtnJntnJztnKDtnKjtnKntnKvtnK3tnLTtnLXtnLjtnLztnYTtnYftnYntnZDtnZHtnZTtnZbtnZftnZjtnZntnaDtnaHtnaPtnaXtnantnaztnbDtnbTtnbztnb3tnoHtnojtnontnoztnpDtnpjtnpntnpvtnp1cIl0sXG5bXCJjYWExXCIsXCLkvL3kvbPlgYflg7nliqDlj6/lkbXlk6XlmInlq4Hlrrbmmofmnrbmnrfmn6/mrYznj4Lnl4LnqLzoi5vojITooZfooojoqLbos4jot4/ou7vov6bpp5XliLvljbTlkITmgarmhaTmrrznj4/ohJroprrop5LplqPkvoPliIrlor7lpbjlp6blubLlubnmh4fmj4DmnYbmn6zmob/mvpfnmY7nnIvno7XnqIjnq7/nsKHogp3oia7oibHoq6vplpPkuavllp3mm7fmuLTnoqPnq63okZvopJDonY7pnqjli5jlnY7loKrltYzmhJ/mhr7miKHmlaLmn5HmqYTmuJvnlJjnlrPnm6PnnrDntLrpgq/pkZHpkZLpvpVcIl0sXG5bXCJjYmExXCIsXCLljKPlsqznlLLog5vpiYDplpjliZvloIjlp5zlsqHltJflurflvLrlvYrmhbfmsZ/nlbrnlobns6DntbPntrHnvozohZToiKHolpHopYHorJvpi7zpmY3psYfku4vku7flgIvlh7HloY/mhLfmhL7mhajmlLnmp6rmvJHnlqXnmobnm5bnrofoiqXok4vvpIDpjqfplovlloDlrqLlnZHvpIHnsrPnvrnphrXlgKjljrvlsYXlt6jmi5Lmja7mk5rmk6fmuKDngqznpZvot53ouJ7vpILpgb3piYXpi7jkub7ku7blgaXlt77lu7rmhIbmpZfohbHomZTouYfpjbXpqKvkuZ7lgpHmnbDmoYDlhInlio3lipLmqqJcIl0sXG5bXCJjY2ExXCIsXCLnnrzpiJDpu5TliqvmgK/ov7LlgYjmhqnmj63mk4rmoLzmqoTmv4DohojopqHpmpTloIXnib3niqznlITntbnnua3ogqnopovorbTpgaPptZHmionmsbrmvZTntZDnvLroqKPlhbzmhYrnrp3orJnpiZfpjozkuqzkv5PlgJ7lgr7lhIbli4Hli43ljb/lnbDlooPluprlvpHmhbbmhqzmk47mlazmma/mmrvmm7TmopfmtofngoXng7Hnkp/nkqXnk4rnl5nnoazno6znq5/nq7bntYXntpPogJXogL/ohJvojpborabovJXpgJXpj6HpoIPpoLjpqZrpr6jkv4LllZPloLrlpZHlraPlsYbmgrjmiJLmoYLmorBcIl0sXG5bXCJjZGExXCIsXCLmo6jmuqrnlYznmbjno47nqL3ns7vnuavnubzoqIjoqqHosL/pmo7pt4Tlj6Tlj6nlkYrlkbHlm7rlp5HlraTlsLvluqvmi7fmlLfmlYXmlbLmmqDmnq/mp4Hmsr3nl7znmpDnnb7nqL/nvpTogIPogqHoho/oi6boi73oj7Dol4HooLHoorToqqXvpIPovpzpjK7pm4fpoafpq5jpvJPlk63mlpvmm7Lmoo/nqYDosLfptaDlm7DlnaTltJHmmIbmorHmo43mu77nkKjoop7pr6TmsajvpITpqqjkvpvlhazlhbHlip/lrZTlt6XmgZDmga3mi7HmjqfmlLvnj5nnqbromqPosqLpno/kuLLlr6HmiIjmnpznk5xcIl0sXG5bXCJjZWExXCIsXCLnp5Hoj5PoqofoqrLot6jpgY7pjYvpoYblu5Pmp6jol7/pg63vpIXlhqDlrpjlr6zmhaPmo7rmrL7ngYznkK/nk5jnrqHnvZDoj4Xop4Dosqvpl5zppKjliK7mgZ3mi6zpgILkvorlhYnljKHlo5nlu6Pmm6DmtLjngprni4Lnj5bnrZDog7HpkZvljabmjpvnvavkuZblgoDloYrlo57mgKrmhKfmi5Dmp5DprYHlro/ntJjogrHovZ/kuqTlg5HlkqzllqzlrIzltqDlt6fmlKrmlY7moKHmqYvni6Hnmo7nn6/ntZ7nv7nohqDolY7om5/ovIPovY7pg4rppIPpqZXprqvkuJjkuYXkuZ3ku4fkv7Hlhbfli75cIl0sXG5bXCJjZmExXCIsXCLljYDlj6Plj6Xlko7lmJTlnbXlnqLlr4fltoflu5Dmh7zmi5jmlZHmnrjmn6nmp4vmrZDmr4bmr6zmsYLmup3ngbjni5fnjpbnkIPnnr/nn6nnqbbntb/ogInoh7zoiIXoiIroi5/ooaLorLPos7zou4DpgJHpgrHpiaTpirbpp5LpqYXps6npt5fpvpzlnIvlsYDoj4rpnqDpnqvpurTlkJvnqpjnvqToo5nou43pg6HloIDlsYjmjpjnqp/lrq7lvJPnqbnnqq7oio7ouqzlgKbliLjli7jljbflnIjmi7PmjbLmrIrmt4PnnLfljqXnjZfolajoubbpl5XmnLrmq4PmvbDoqa3ou4zppYvvpIbmmbfmrbjosrRcIl0sXG5bXCJkMGExXCIsXCLprLzvpIflj6vlnK3lpY7mj4bmp7vnj6rnoYXnqrrnq4Xns77okbXopo/otbPpgLXplqjli7vlnYfnlYfnraDoj4zpiJ7vpIjmqZjlhYvliYvliofmiJ/mo5jmpbXpmpnlg4XliqTli6Tmh4PmlqTmoLnmp7/nkb7nrYvoirnoj6voprLorLnov5HppYnvpInku4rlppfmk5LmmJHmqo7nkLTnpoHnpr3oiqnoob7oob/opZ/vpIrpjKbkvIvlj4rmgKXmibHmsbLntJrntabkupjlhaLnn5zogq/kvIHkvI7lhbblhoDll5zlmajlnLvln7rln7zlpJTlpYflppPlr4TlspDltI7lt7Hlub7lv4zmioDml5fml6NcIl0sXG5bXCJkMWExXCIsXCLmnJ7mnJ/mnZ7mo4vmo4TmqZ/mrLrmsKPmsb3msoLmt4fnjpjnkKbnkKrnkoLnkqPnlbjnlb/nooHno6/npYHnpYfnpYjnpbrnrpXntIDntrrnvojogIbogK3ogozoqJjorY/osYjotbfpjKHpjKTpo6LppZHpqI7pqI/pqaXpupLnt4rkvbblkInmi67moZTph5HllqvlhLrvpIvvpIzlqJzmh6bvpI3mi4/mi7/vpI5cIiw1LFwi6YKj76SUXCIsNCxcIuirvu+kme+kmu+km++knOaalu+kneeFlu+knu+kn+mbo++koOaNj+aNuuWNl++koeaej+aloOa5s++koueUt++ko++kpO+kpVwiXSxcbltcImQyYTFcIixcIue0je+kpu+kp+ihsuWbiuWomO+kqFwiLDQsXCLkuYPvpK3lhaflpYjmn7DogJDvpK7lpbPlubTmkprnp4rlv7Xmgazmi4jmjbvlr6flr5fliqrvpK/lpbTlvKnmgJLvpLDvpLHvpLLnkZnvpLNcIiw1LFwi6aeR76S5XCIsMTAsXCLmv4PvpYTvpYXohr/ovrLmg7HvpYbvpYfohabvpYjvpYnlsL/vpYpcIiw3LFwi5aup6Kil5p2757SQ76WSXCIsNSxcIuiDve+lmO+lmeWwvOazpeWMv+a6uuWkmuiMtlwiXSxcbltcImQzYTFcIixcIuS4ueS6tuS9huWWruWcmOWjh+W9luaWt+aXpuaqgOautea5jeefreerr+ewnue3nuibi+iikumEsumNm+aSu+a+vueNuueWuOmBlOWVluWdjeaGuuaTlOabh+a3oea5m+a9rea+ueeXsOiBg+iGveiVgeimg+irh+itmumMn+ayk+eVk+etlOi4j+mBneWUkOWgguWhmOW5ouaIh+aSnuajoOeVtuezluies+m7qOS7o+WeiOWdruWkp+WwjeWyseW4tuW+heaItOaToeeOs+iHuuiii+iyuOmaium7m+WuheW+t+aCs+WAkuWIgOWIsOWcluWgteWhl+WwjuWxoOWztuW2i+W6puW+kuaCvOaMkeaOieaQl+ahg1wiXSxcbltcImQ0YTFcIixcIuajueargua3mOa4oea7lOa/pOeHvuebnOedueemseeou+iQhOimqeizrei3s+i5iOmAg+mAlOmBk+mDvemNjemZtumfnOavkueAhueJmOeKoueNqOedo+emv+evpOe6m+iugOWiqeaDh+aVpuaXveaavuayjOeEnueHieixmumgk+S5reeqgeS7neWGrOWHjeWLleWQjOaGp+adseahkOajn+a0nua9vOeWvOees+erpeiDtOiRo+mKheWFnOaWl+adnOaek+eXmOerh+iNs++lmuixhumAl+mgreWxr+iHgOiKmumBgemBr+mIjeW+l+W2neapmeeHiOeZu+etieiXpOishOmEp+mosOWWh+aHtu+lm+eZqee+hVwiXSxcbltcImQ1YTFcIixcIuiYv+ieuuijuOmCj++lnOa0m+eDmeePnue1oeiQve+lnemFqumnse+lnuS6guWNteashOaskueAvueIm+iYrem4nuWJjOi+o+W1kOaTpeaUrOaslua/q+exg+e6nOiXjeilpOimveaLieiHmOign+W7iuacl+a1queLvOeQheeRr+iegumDnuS+huW0jeW+oOiQiuWGt+aOoOeVpeS6ruWAhuWFqeWHieaigeaokeeyrueyseezp+iJr+irkui8m+mHj+S+tuWEt+WLteWRguW7rOaFruaIvuaXhearmua/vuekquiXnOigo+mWrempoumpqum6l+m7juWKm+abhuatt+eAneekq+i9oumdguaGkOaIgOaUo+a8o1wiXSxcbltcImQ2YTFcIixcIueFieeSiee3tOiBr+iTrui8pumAo+mNiuWGveWIl+WKo+a0jOeDiOijguW7ieaWguaurua/guewvueNteS7pOS8tuWbue+ln+WyuuW2uuaAnOeOsuesree+mue/juiBhumAnumItOmbtumdiOmgmOm9oeS+i+a+p+emrumGtOmat+WLnu+loOaSiOaThOark+a9nueAmOeIkOebp+iAgeiYhuiZnOi3r+i8hemcsumtr+m3uum5teeijOelv+e2oOiPiemMhOm5v+m6k+irluWjn+W8hOacp+eAp+eTj+exoOiBvuWEoeeAqOeJouejiuizguizmuiztOmbt+S6huWDmuWvruW7luaWmeeHjueZgueereiBiuiTvFwiXSxcbltcImQ3YTFcIixcIumBvOmsp+m+jeWjmOWpgeWxouaok+a3mua8j+eYu+e0r+e4t+iUnuikuOmPpOmZi+WKieaXkuafs+amtOa1gea6nOeAj+eQieeRoOeVmeeYpOehq+isrOmhnuWFreaIrumZuOS+luWAq+W0mea3que2uOi8quW+i+aFhOagl++loemahuWLkuiCi+WHnOWHjOalnueonOe2vuiPsemZteS/muWIqeWOmOWQj+WUjuWxpeaCp+adjuaiqOa1rOeKgeeLuOeQhueSg++loueXouexrOe9uee+uOiOieijj+ijoemHjOmHkOmboumvieWQnea9vueHkOeSmOiXuui6qumao+mxl+m6n+ael+a3i+eQs+iHqOmcluegrFwiXSxcbltcImQ4YTFcIixcIueri+esoOeykuaRqeeRqueXsueivOejqOmmrOmtlOm6u+WvnuW5lea8oOiGnOiOq+mCiOS4h+WNjeWoqeW3kuW9juaFouaMveaZqeabvOa7v+a8q+eBo+eenuiQrOiUk+igu+i8k+mlhemwu+WUnOaKueacq+ayq+iMieilqumduuS6oeWmhOW/mOW/meacm+e2sue9lOiKkuiMq+iOvei8numCmeWfi+WmueWqkuWvkOaYp+aemuaiheavj+eFpOe9teiyt+izo+mCgemtheiEiOiyiumZjOmpgOm6peWtn+awk+eMm+ebsuebn+iQjOWGquimk+WFjeWGleWLieajieaylOechOecoOe2v+e3rOmdoum6tea7hVwiXSxcbltcImQ5YTFcIixcIuiUkeWGpeWQjeWRveaYjuaaneakp+a6n+eav+eekeiMl+iTguien+mFqemKmOmztOiiguS+ruWGkuWLn+WnhuW4veaFleaRuOaRueaaruafkOaooeavjeavm+eJn+eJoeeRgeecuOefm+iAl+iKvOiMheisgOisqOiyjOacqOaykOeJp+ebruedpuephum2qeatv+aykuWkouacpuiSmeWNr+Wik+WmmeW7n+aPj+aYtOads+a4uueMq+erl+iLl+mMqOWLmeW3q+aGruaHi+aIiuaLh+aSq+aXoOalmeatpuavi+eEoeePt+eVnee5huiInuiMguiVquiqo+iyv+mcp+m1oeWiqOm7mOWAkeWIjuWQu+WVj+aWh1wiXSxcbltcImRhYTFcIixcIuaxtue0iue0i+iBnuiaiumWgOmbr+WLv+ayleeJqeWRs+WqmuWwvuW1i+W9jOW+ruacquaitualo+a4vOa5hOecieexs+e+juiWh+isjui/t+mdoem7tOWyt+aCtuaEjeaGq+aVj+aXu+aXvOawkeazr+eOn+ePiee3oemWlOWvhuicnOiskOWJneWNmuaLjeaQj+aSsuactOaouOaziuePgOeSnueulOeylee4m+iGiuiItuiWhOi/q+mbuemngeS8tOWNiuWPjeWPm+aLjOaQrOaUgOaWkeang+azrua9mOePreeVlOeYouebpOebvOejkOeju+ekrOe1huiIrOifoOi/lOmgkumjr+WLg+aLlOaSpea4pOa9kVwiXSxcbltcImRiYTFcIixcIueZvOi3i+mGsemJoumrrumtg+WAo+WCjeWdiuWmqOWwqOW5h+W9t+aIv+aUvuaWueaXgeaYieaei+amnOa7guejhee0oeiCquiGgOiIq+iKs+iSoeiajOioquisl+mCpumYsum+kOWAjeS/s++lo+WfueW+mOaLnOaOkuadr+a5g+eEmeebg+iDjOiDmuijtOijteikmeizoOi8qemFjemZquS8r+S9sOW4m+afj+agoueZveeZvumthOW5oeaoiueFqeeHlOeVqu+lpOe5geiVg+iXqemjnOS8kOetj+e9sOmWpeWHoeW4huaiteawvuaxjuazm+eKr+evhOiMg+azleeQuuWDu+WKiOWjgeaTmOaql+eSp+eZllwiXSxcbltcImRjYTFcIixcIueip+iYl+mXoumcue+lpeWNnuW8geiuiui+qOi+r+mCiuWIpeeepemxiem8iOS4meWAguWFteWxm+W5t+aYnuaYuuafhOajheeCs+eUgeeXheenieernei8p+mkoOmoiOS/neWgoeWgseWvtuaZruatpea0kea5uua9veePpOeUq+iPqeijnOikk+itnOi8lOS8j+WDleWMkOWNnOWuk+W+qeacjeemj+iFueiMr+iUlOikh+imhui8uei8u+mmpemwkuacrOS5tuS/uOWlieWwgeWzr+WzsOaNp+ajkueDveeGoueQq+e4q+iTrOicgumAoumLkumzs+S4jeS7mOS/r+WCheWJluWJr+WQpuWSkOWfoOWkq+WpplwiXSxcbltcImRkYTFcIixcIuWtmuWtteWvjOW6nO+lpuaJtuaVt+aWp+a1rua6peeItuespuewv+e8tuiFkOiFkeiGmuiJgOiKmeiOqeiog+iyoOizpuizu+i1tOi2uumDqOmHnOmYnOmZhOmnmemzp+WMl+WIhuWQqeWZtOWis+WllOWlruW/v+aGpOaJruaYkOaxvueEmuebhueyieeznue0m+iKrOizgembsO+lp+S9m+W8l+W9v+aLguW0qeaci+ajmuehvOe5g+m1rOS4leWCmeWMleWMquWNkeWmg+WpouW6h+aCsuaGiuaJieaJueaWkOaeh+amp+avlOavluavl+avmOayuO+lqOeQteeXuuegkueikeenleenmOeyg+e3i+e/oeiCpVwiXSxcbltcImRlYTFcIixcIuiEvuiHguiPsuicmuijqOiqueitrOiyu+mEmemdnumjm+m8u+WarOWsquW9rOaWjOaqs+aur+a1nOa/seeAleeJneeOreiyp+izk+mgu+aGkeawt+iBmOmogeS5jeS6i+S6m+S7leS8uuS8vOS9v+S/n+WDv+WPsuWPuOWUhuWXo+Wbm+Wjq+WlouWokeWvq+WvuuWwhOW3s+W4q+W+meaAneaNqOaWnOaWr+aftuafu+aireatu+aymeazl+a4o+eAieeNheegguekvuelgOeloOengeevqee0l+e1suiChuiIjeiOjuiTkeibh+ijn+ipkOipnuisneiznOi1pui+remCqumjvOmnn+m6neWJiu+lqeaclO+lqlwiXSxcbltcImRmYTFcIixcIuWCmOWIquWxseaVo+axleePiueUo+eWneeul+iSnOmFuOmcsOS5t+aSkuauuueFnuiWqeS4ie+lq+adieajrua4l+iKn+iUmOihq+aPt+a+gemIkumir+S4iuWCt+WDj+WEn+WVhuWWquWYl+WtgOWwmeWzoOW4uOW6iuW6oOW7guaDs+ahkeapoea5mOeIveeJgOeLgOebuOelpeeusee/lOijs+intOips+ixoeiznumcnOWhnueSveizveWXh++lrOepoee0ouiJsueJsueUn+eUpe+lreesmeWiheWju+W2vOW6j+W6tuW+kOaBleaKkuaNv+aVjeaakeabmeabuOagluajsueKgOeRnuetrue1rue3lue9slwiXSxcbltcImUwYTFcIixcIuiDpeiIkuiWr+ilv+iqk+mAnemLpOm7jem8oOWkleWlreW4reaDnOaYlOaZs+aekOaxkOa3hea9n+efs+eiqeiThumHi+mMq+S7meWDiuWFiOWWhOWsi+Wuo+aJh+aVvuaXi+a4sueFveeQgeeRhOeSh+eSv+eZrOemque3mue5lee+qOiFuuiGs+iIueiYmuifrOiptei3o+mBuOmKkemQpemljemuruWNqOWxkeallOazhOa0qea4q+iIjOiWm+iku+ioreiqqumbqum9p+WJoeaaueausue6luifvui0jemWg+mZneaUnea2ieeHru+lruWfjuWnk+WurOaAp+aDuuaIkOaYn+aZn+eMqeePueebm+ecgeetrFwiXSxcbltcImUxYTFcIixcIuiBluiBsuiFpeiqoOmGkuS4luWLouatsua0l+eoheesuee0sO+lr+iysOWPrOWYr+WhkeWuteWwj+WwkeW3ouaJgOaOg+aQlOaYreais+ayvOa2iOa6r+eAn+eCpOeHkueUpueWj+eWjueYmeeskeevoOewq+e0oOe0ueiUrOiVreiYh+iotOmAjemBoemCtemKt+mftumot+S/l+WxrOadn+a2keeyn+e6jOislui0lumAn+Wtq+W3veaQjeiTgOmBnOmjoeeOh+Wui+aCmuadvua3nuion+iqpumAgemgjOWIt++lsOeBkeeijumOluihsOmHl+S/ruWPl+WXveWbmuWeguWjveWrguWuiOWyq+WzgOW4peaEgVwiXSxcbltcImUyYTFcIixcIuaIjeaJi+aOiOaQnOaUtuaVuOaoueauiuawtOa0mea8seeHp+eLqeeNuOeQh+eSsueYpuedoeengOepl+erqueyuee2j+e2rOe5oee+nuiEqeiMseiSkOiTmuiXquiiluiqsOiukOi8uOmBgumCg+mFrOmKlumKuemai+map+maqOmblumcgOmgiOmmlumrk+msmuWPlOWhvuWkmeWtsOWuv+a3kea9mueGn+eQoeeSueiCheiPveW3oeW+h+W+quaBguaXrOagkualr+apk+auiea0tea3s+ePo+ebvueerOetjee0lOiEo+iInOiNgOiTtOiVo+ipouirhOmGh+mMnumghummtOaIjOihk+i/sOmJpeW0h+W0p1wiXSxcbltcImUzYTFcIixcIuW1qeeRn+iGneidqOa/leaLvue/kuiktuilsuS4nuS5mOWDp+WLneWNh+aJv+aYh+e5qeighemZnuS+jeWMmeWYtuWni+WqpOWwuOWxjuWxjeW4guW8keaBg+aWveaYr+aZguaevuaftOeMnOefouekuue/heiSlOiTjeimluippuipqeiroeixleixuuWftOWvlOW8j+aBr+aLreakjeaulua5nOeGhOevkuidleitmOi7vumjn+mjvuS8uOS+geS/oeWRu+WooOWuuOaEvOaWsOaZqOeHvOeUs+elnue0s+iFjuiHo+iOmOiWquiXjuicg+ioiui6q+i+m++lsei/heWkseWupOWvpuaCieWvqeWwi+W/g+aygVwiXSxcbltcImU0YTFcIixcIu+lsua3seeAi+eUmuiKr+irtuS7gOWNge+ls+mbmeawj+S6nuS/hOWFkuWVnuWopeWzqOaIkeeJmeiKveiOquibvuihmeionemYv+mbhemkk+m0iem1neWgiuWys+W2veW5hOaDoeaEleaPoeaogua4pemEgumNlOmhjumwkOm9t+WuieWyuOaMieaZj+ahiOecvOmbgemejemhlOmun+aWoeisgei7i+mWvOWUteWyqeW3luW6teaal+eZjOiPtOmXh+Wjk+aKvOeLjum0qOS7sOWkruaAj+aYu+aug+enp+m0puWOk+WTgOWfg+W0luaEm+ablua2r+eijeiJvumamOmdhOWOhOaJvOaOlua2sue4iuiFi+mhjVwiXSxcbltcImU1YTFcIixcIuaru+e9jOm2r+m4muS5n+WAu+WGtuWknOaDueaPtuaksOeIuuiAtu+ltOmHjuW8se+lte+ltue0hOiLpeiRr+iSu+iXpei6je+lt+S9r++luO+lueWjpOWtg+aBmeaPmuaUmOaVreaamO+luualiuaoo+a0i+eAgeeFrOeXkueYjeems+epsO+lu+e+iu+lvOilhO+lveiuk+mHgOmZve+lvumkiuWchOW+oeaWvOa8geeYgOempuiqnummremtmum9rOWEhOaGtuaKkeaqjeiHhuWBg+WgsOW9pueEieiogOiruuWtvOiYluS/uuWEvOWatOWlhOaOqea3ueW2qualreWGhuS6iOS9me+lv++mgO+mgeWmgu+mglwiXSxcbltcImU2YTFcIixcIu+mg+atn+axne+mhOeSteeklu+mheiIh+iJheiMuei8v+i9ne+mhumkmO+mh++miO+mieS6pu+miuWfn+W9ueaYk++mi++mjOeWq+e5ueitr++mjemAhumpm+WapeWgp+WnuOWon+WutO+mjuW7tu+mj++mkOaNkOaMu++mkeakveayh+ayv+a2jua2k+a3tea8lO+mkueDn+eEtueFme+mk+eHg+eHle+mlOehj+ehr++mleettee3o++mlue4r++ml+ihjei7n++mmO+mme+mmumJm++mm+mztu+mnO+mne+mnuaChea2he+mn+eGse+moO+moemWseWOre+mou+mo++mpOafk++mpeeCjueEsOeQsOiJtuiLklwiXSxcbltcImU3YTFcIixcIu+mpumWu+mrpem5veabhO+mp+eHgeiRie+mqO+mqeWhi++mqu+mq+W2uOW9se+mrOaYoOaajualueamruawuOazs+a4tua9gea/mueAm+eAr+eFkOeHn+eNsO+mreeRm++mrueTlOebiOepjue6k++mr++msOiLseipoOi/ju+msemNiO+msumcme+ms++mtOS5guWAqu+mteWIiOWPoeabs+axrea/iueMiuedv+epouiKruiXneiYgu+mtuijlOipo+itveixq++mt+mKs++muOmck+mgkOS6lOS8jeS/ieWCsuWNiOWQvuWQs+WXmuWhouWiuuWlp+Wom+WvpOaCn++mueaHiuaVluaXv+aZpOaip+axmua+s1wiXSxcbltcImU4YTFcIixcIueDj+eGrOeNkuetveiciOiqpOmwsum8h+Wxi+ayg+eNhOeOiemIuua6q+eRpeeYn+epqee4leiYiuWFgOWjheaTgeeTrueUleeZsOe/gemClembjemllOa4pueTpueqqeeqquiHpeibmeiduOiom+WpieWujOWum+aioeakgOa1o+eOqeeQk+eQrOeil+e3qee/q+iEmOiFleiOnuixjOmYrumgkeabsOW+gOaXuuaeieaxqueOi+WAreWog+atquefruWkluW1rOW3jeeMpeeVj++muu+mu+WDpeWHueWgr+WkreWmluWnmuWvpe+mvO+mveW2ouaLl+aQluaSk+aTvu+mvuabnO+mv+apiO+ngOeHv+eRpO+ngVwiXSxcbltcImU5YTFcIixcIueqiOeqr+e5h+e5nuiAgOiFsO+nguifr+imgeisoOmBme+ng+mCgOmlkuaFvuassua1tOe4n+ikpei+seS/keWCreWGl+WLh+Wfh+WiieWuueW6uOaFguamlea2jOa5p+a6tueGlOeRoueUqOeUrOiBs+iMuOiTiei4iumOlOmPnu+nhOS6juS9keWBtuWEquWPiOWPi+WPs+Wuh+Wvk+WwpOaEmuaGguaXtOeJm+eOl+eRgOebguelkOemkeemuee0hue+veiKi+iXleiZnui/gumBh+mDtemHqumahembqOmbqeWLluW9p+aXreaYseagr+eFnOeotumDgemgiuS6ke+nheapkuaunua+kOeGieiAmOiKuOiVk1wiXSxcbltcImVhYTFcIixcIumBi+malembsumfu+iUmumsseS6kOeGiumbhOWFg+WOn+WToeWck+WckuWeo+Wqm+WrhOWvg+aAqOaEv+aPtOayhea0uea5sua6kOeIsOeMv+eRl+iLkeiigei9hemBoO+nhumZoumhmOm0m+aciOi2iumJnuS9jeWBieWDnuWNseWcjeWnlOWogeWwieaFsOaakOa4reeIsueRi+e3r+iDg+iQjuiRpuiUv+idn+ihm+ikmOisgumBlemfi+mtj+S5s+S+keWEkuWFqu+nh+WUr+WWqeWtuuWupeW5vOW5veW6vuaCoOaDn+aEiOaEieaPhOaUuOacie+niOaflOafmu+niealoealouayuea0p++niua4uO+ni1wiXSxcbltcImViYTFcIixcIua/oeeMtueMt++njOeRnOeUse+njeeZku+nju+nj+e2reiHvuiQuOijleiqmOirm+irrei4sOi5gumBiumAvumBuumFiemHiemNru+nkO+nkeWgie+nkuavk+iCieiCsu+nk++nlOWFgeWlq+Wwue+nle+nlua9pOeOp+iDpOi0h++nl+mIl+mWj++nmO+nme+nmu+nm+iBv+aIjueAnOe1qOieje+nnOWeoOaBqeaFh+aut+iqvumKgOmaseS5meWQn+a3q+iUremZsOmfs+mjruaPluazo+mCkeWHneaHieiGuum3ueS+neWAmuWEgOWunOaEj+aHv+aTrOakheavheeWkeefo+e+qeiJpOiWj+ifu+iho+iqvFwiXSxcbltcImVjYTFcIixcIuitsOmGq+S6jOS7peS8iu+nne+nnuWkt+WnqO+nn+W3suW8m+W9m+aAoe+noO+noe+nou+no+eIvuePpe+npOeVsOeXje+npeenu++npuiAjOiAs+iChOiLoeiNke+np++nqOiyveiys+mCh++nqe+nqumjtOmkjO+nq++nrOeAt+ebiue/iue/jOe/vOismuS6uuS7geWIg+WNsO+nreWSveWboOWnu+WvheW8leW/jea5ru+nru+nr+e1quiMte+nsOiak+iqje+nsemdremdt++nsu+ns+S4gOS9muS9vuWjueaXpea6oumAuOmOsOmmueS7u+WjrOWmiuWnmeaBge+ntO+nteeolO+ntuiNj+izg+WFpeWNhFwiXSxcbltcImVkYTFcIixcIu+nt++nuO+nueS7jeWJqeWtleiKv+S7lOWIuuWSqOWnieWnv+WtkOWtl+WtnOaBo+aFiOa7i+eCmeeFrueOhueTt+eWteejgee0q+iAheiHquiMqOiUl+iXieirruizh+mbjOS9nOWLuuWavOaWq+aYqOeBvOeCuOeItee2veiKjemFjOmbgOm1suWtseajp+aumOa9uuebnuWykeaaq+a9m+eutOewquigtumbnOS4iOS7l+WMoOWgtOWiu+Wjr+WlrOWwh+W4s+W6hOW8teaOjOaasuadluaon+aqo+asjOa8v+eJhu+nuueNkOeSi+eroOeyp+iFuOiHn+iHp+iOiuiRrOiUo+iWlOiXj+ijnei0k+mGrOmVt1wiXSxcbltcImVlYTFcIixcIumanOWGjeWTieWcqOWusOaJjeadkOagveaik+a4vea7k+eBvee4oeijgeiyoei8iem9i+m9jueIreeuj+irjemMmuS9h+S9juWEsuWSgOWnkOW6leaKteadtealruaol+ayrua4mueLmeeMqueWveeuuOe0teiLp+iPueiRl+iXt+ipm+iyr+i6h+mAmemCuOmbjum9n+WLo+WQiuWroeWvguaRmOaVtea7tOeLhO+nu+eahOepjeesm+exjee4vue/n+iNu+isq+iziui1pOi3oei5n+i/qui/uemBqemPkeS9g+S9uuWCs+WFqOWFuOWJjeWJquWhoeWhvOWloOWwiOWxleW7m+aCm+aIsOagk+auv+awiOa+sVwiXSxcbltcImVmYTFcIixcIueFjueQoOeUsOeUuOeVkeeZsuetjOeui+eureevhue6j+iprui8vui9iemIv+mKk+mMoumQq+mbu+mhmumhq+mknuWIh+aIquaKmOa1meeZpOeriuevgOe1tuWNoOWyvuW6l+a8uOeCueeymOmckemujum7nuaOpeaRuuidtuS4geS6leS6reWBnOWBteWRiOWng+WumuW5gOW6reW7t+W+geaDheaMuuaUv+aVtOaXjOaZtuaZuOafvualqOaqieato+axgOa3gOa3qOa4n+a5nueAnueCoeeOjuePveeUuuedm+eih+emjueoi+epveeyvue2juiJh+ioguirquiynumEremFiumHmOmJpumLjOmMoOmchumdllwiXSxcbltcImYwYTFcIixcIumdnOmggum8juWItuWKkeWVvOWgpOW4neW8n+aCjOaPkOair+a/n+elreesrOiHjeiWuuijveiruOi5hOmGjemZpOmam+mcvemhjOm9iuS/juWFhuWHi+WKqeWYsuW8lOW9q+aOquaTjeaXqeaZgeabuuabueacneaineajl+anvea8lea9rueFp+eHpeeIqueSquecuuelluelmuenn+eooOeqleeyl+ezn+e1hOe5sOiCh+iXu+iapOiplOiqv+i2mei6gemAoOmBremHo+mYu+mblemzpeaXj+ewh+i2s+mPg+WtmOWwiuWNkuaLmeeMneWAp+Wul+W+nuaCsOaFq+ajlea3meeQrueorue1gue2nOe4seiFq1wiXSxcbltcImYxYTFcIixcIui4qui4temNvumQmOS9kOWdkOW3puW6p+aMq+e9quS4u+S9j+S+j+WBmuWnneiDhOWRquWRqOWXvuWlj+WumeW3nuW7muaZneacseafseagquazqOa0sua5iua+jeeCt+ePoOeWh+exjOe0gue0rOe2ouiIn+ibm+iou+iqhei1sOi6iui8s+mAsemFjumFkumRhOmnkOerueeypeS/iuWEgeWHhuWfiOWvr+Wzu+aZmeaovea1mua6lua/rOeEjOeVr+ero+igoumAoemBtembi+mnv+iMgeS4reS7suihhumHjeWNvearm+alq+axgeiRuuWinuaGjuabvuaLr+eDneeUkeeXh+e5kuiSuOitiei0iOS5i+WPqlwiXSxcbltcImYyYTFcIixcIuWSq+WcsOWdgOW/l+aMgeaMh+aRr+aUr+aXqOaZuuaeneaes+atouaxoOaymua8rOefpeegpeelieell+e0meiCouiEguiHs+iKneiKt+icmOiqjO+nvOi0hOi2vumBsuebtOeomeeot+e5lOiBt+WUh+WXlOWhteaMr+aQouaZieaZi+ahreamm+auhOa0pea6seePjeeRqOeSoeeVm+eWueeboeecnueei+enpue4iee4neiHu+iUr+iil+iouuizkei7q+i+sOmAsumOremZo+mZs+mch+S+hOWPseWnquWrieW4meahjueThueWvuenqeeqkuiGo+ibreizqui3jOi/reaWn+acle+nveWft+a9l+e3nei8r1wiXSxcbltcImYzYTFcIixcIumPtumbhuW+teaHsua+hOS4lOS+mOWAn+WPieWXn+W1r+W3ruasoeatpOeji+eumu+nvui5iei7iumBruaNieaQvuedgOeqhOmMr+mRv+m9quaSsOa+r+eHpueSqOeTmuerhOewkue6gueysue6mOiumui0iumRvemkkOmljOWIueWvn+aTpuacree0ruWDreWPg+WhueaFmOaFmeaHuuaWrOermeiukuiuluWAieWAoeWJteWUseWovOW7oOW9sOaEtOaVnuaYjOaYtuaaouanjea7hOa8sueMlueYoeeqk+iEueiJmeiPluiSvOWCteWfsOWvgOWvqOW9qeaOoeegpue2teiPnOiUoemHh+mHteWGiuafteetllwiXSxcbltcImY0YTFcIixcIuiyrOWHhOWmu+aCveiZleWAnO+nv+WJlOWwuuaFveaImuaLk+aTsuaWpea7jOeYoOiEiui5oOmZn+mau+S7n+WNg+WWmOWkqeW3neaTheaziea3uueOlOepv+iIm+iWpuizpOi4kOmBt+mHp+mXoemYoemfhuWHuOWTsuWWhuW+ueaSpOa+iOe2tOi8n+i9jemQteWDieWwluayvua3u+eUm+eeu+ewveexpOipueirguWgnuWmvuW4luaNt+eJkueWiuedq+irnOiyvOi8kuW7s+aZtOa3uOiBveiPgeiri+mdkemvlu+ogOWJg+abv+a2lea7r+e3oOirpumArumBnumrlOWIneWJv+WTqOaGlOaKhOaLm+aiolwiXSxcbltcImY1YTFcIixcIuakkualmuaoteeCkueEpuehneekgeekjuenkueojeiCluiJuOiLleiNieiVieiygui2hemFoumGi+mGruS/g+WbkeeHreefl+icgOinuOWvuOW/luadkemCqOWPouWhmuWvteaCpOaGgeaRoOe4veiBsOiUpemKg+aSruWCrOW0lOacgOWinOaKveaOqOakjualuOaonua5q+eauueni+iKu+iQqeirj+i2qOi/vemEkumFi+mGnOmMkOmMmOmOmumbm+motumwjeS4keeVnOelneeruuetkeeviee4ruiThOi5mei5tOi7uOmAkOaYpeakv+eRg+WHuuacrum7nOWFheW/oOayluifsuihneiht+aCtOiGteiQg1wiXSxcbltcImY2YTFcIixcIui0heWPluWQueWYtOWotuWwseeCiue/oOiBmuiEhuiHrei2o+mGiempn+m3suWBtOS7hOWOoOaDu+a4rOWxpOS+iOWApOWXpOWzmeW5n+aBpeailOayu+a3hOeGvueXlOeXtOeZoeeomuepiee3h+e3u+e9ruiHtOiaqei8nOmbiemms+m9kuWJh+WLhemjreimquS4g+afkua8huS+teWvouaeleayiOa1uOeQm+egp+mHnemNvOifhOenpOeoseW/q+S7luWSpOWUvuWiruWmpeaDsOaJk+aLluactualleiItemZgOmmsemnneWArOWNk+WVhOWdvO+ogeaJmO+oguaTouaZq+afnea/gea/r+eQoueQuOiol1wiXSxcbltcImY3YTFcIixcIumQuOWRkeWYhuWdpuW9iOaGmuatjueBmOeCree2u+iqleWlquiEq+aOoueciOiAveiyquWhlOaQreamu+WuleW4kea5r++og+iVqeWFjOWPsOWkquaAoOaFi+auhuaxsOazsOesnuiDjuiLlOi3humCsOmise+ohOaTh+a+pOaSkeaUhOWFjuWQkOWcn+iojuaFn+ahtu+oheeXm+etkue1semAmuWghuanjOiFv+ikqumAgOmgueWBuOWll+WmrOaKlemAj+msquaFneeJuemXluWdoeWphuW3tOaKiuaSreaTuuadt+azoua0vueIrOeQtuegtOe9t+iKrei3m+mgl+WIpOWdguadv+eJiOeTo+iyqei+pumIkVwiXSxcbltcImY4YTFcIixcIumYquWFq+WPreaNjOS9qeWUhOaCluaVl+aym+a1v+eJjOeLveeol+imh+iyneW9rea+jueDueiGqOaEjuS+v+WBj+aJgeeJh+evh+e3qOe/qemBjemeremomeiytuWdquW5s+aesOiQjeipleWQoOWsluW5o+W7ouW8iuaWg+iCuuiUvemWiemZm+S9iOWMheWMjeWMj+WShuWTuuWcg+W4g+aAluaKm+aKseaNle+ohuazoea1pueWseegsuiDnuiEr+iLnuiRoeiSsuiijeikkumAi+mLqumjvemukeW5heaatOabneeAkeeIhu+oh+S/teWJveW9quaFk+adk+aomea8gueTouelqOihqOixuemjh+mjhOmpg1wiXSxcbltcImY5YTFcIixcIuWTgeeon+alk+irt+ixiumiqOmmruW9vOaKq+eWsuearuiiq+mBv+mZguWMueW8vOW/heazjOePjOeVoueWi+ethuiLvummneS5j+mAvOS4i+S9leWOpuWkj+W7iOaYsOays+eRleiNt+idpuizgOmBkOmcnumwleWjkeWtuOiZkOislOm2tOWvkuaBqOaCjeaXseaxl+a8oua+o+eAmue9lee/sOmWkemWkumZkOmfk+WJsui9hOWHveWQq+WSuOWVo+WWiuaqu+a2tee3mOiJpumKnOmZt+m5ueWQiOWTiOebkuibpOmWpOmXlOmZnOS6ouS8ieWnruWrpuW3t+aBkuaKl+adreahgeayhua4r+e8uOiCm+iIqlwiXSxcbltcImZhYTFcIixcIu+oiO+oiemgheS6peWBleWSs+Wek+WlmuWtqeWus+aHiOalt+a1t+eAo+ifueino+ipsuirp+mCgumnremquOWKvuaguOWAluW5uOadj+iNh+ihjOS6q+WQkeWaruePpumElemfv+mkiemll+mmmeWZk+Win+iZm+ioseaGsuartueNu+i7kuath+maqumpl+WlleeIgOi1q+mdqeS/lOWztOW8puaHuOaZm+azq+eCq+eOhOeOueePvuecqeedjee1g+e1oue4o+iIt+ihku+oiuizoumJiemhr+WtkeeptOihgOmggeWrjOS/oOWNlOWkvuWzveaMvua1ueeLueiEheiEh+iOoumLj+mgsOS6qOWFhOWIkeWei1wiXSxcbltcImZiYTFcIixcIuW9ouazgua7jueAheeBkOeCr+eGkuePqeeRqeiNiuieouihoemAiOmCoumOo+mmqOWFruW9l+aDoOaFp+aas+iVmei5iumGr+mei+S5juS6kuWRvOWjleWjuuWlveWyteW8p+aItuaJiOaYiuaZp+avq+a1qea3j+a5lua7uOa+lOa/oOa/qeeBneeLkOeQpeeRmueToOeak+elnOeziue4nuiDoeiKpuiRq+iSv+iZjuiZn+idtOitt+ixqumOrOmggOmhpeaDkeaIlumFt+WpmuaYj+a3t+a4vueQv+mtguW/veaDmuesj+WThOW8mOaxnuazk+a0queDmOe0heiZueiojOm0u+WMluWSjOWsheaouueBq+eVtVwiXSxcbltcImZjYTFcIixcIuemjeemvuiKseiPr+ipseitgeiyqOmdtO+oi+aTtOaUq+eiuueiu+epq+S4uOWWmuWlkOWupuW5u+aCo+aPm+atoeaZpeahk+a4meeFpeeSsOe0iOmChOmpqemwpea0u+a7keeMvuixgemXiuWHsOW5jOW+qOaBjeaDtuaEsOaFjOaZg+aZhOampeazgea5n+a7iea9oueFjOeSnOeah+evgeewp+iNkuidl+mBkemajem7g+WMr+WbnuW7u+W+iuaBouaClOaHt+aZpuacg+aqnOa3rua+rueBsOeNque5quiGvuiMtOiblOiqqOizhOWKg+eNsuWuluapq+mQhOWTruWahuWtneaViOaWheabieain+a2jea3hlwiXSxcbltcImZkYTFcIixcIueIu+iCtOmFtempjeS+r+WAmeWOmuWQjuWQvOWWieWXheW4v+W+jOacveeFpuePnemAheWLm+WLs+WhpOWjjueEhOeGj+eHu+iWsOiok+aaiOiWqOWWp+aahOeFiuiQseWNieWWmeavgeW9meW+veaPruaaieeFh+irsei8nem6vuS8keaQuueDi+eVpuiZp+aBpOitjum3uOWFh+WHtuWMiOa0tuiDuOm7keaYleaso+eCmOeXleWQg+Wxuee0h+ioluasoOasveathuWQuOaBsOa0vee/leiIiOWDluWHnuWWnOWZq+WbjeWnrOWsieW4jOaGmeaGmOaIseaZnuabpueGmeeGueeGuueKp+emp+eogOe+suipsFwiXVxuXVxuIiwibW9kdWxlLmV4cG9ydHM9W1xuW1wiMFwiLFwiXFx1MDAwMFwiLDEyN10sXG5bXCJhMTQwXCIsXCLjgIDvvIzjgIHjgILvvI7igKfvvJvvvJrvvJ/vvIHvuLDigKbigKXvuZDvuZHvuZLCt++5lO+5le+5lu+5l++9nOKAk++4seKAlO+4s+KVtO+4tO+5j++8iO+8ie+4te+4tu+9m++9ne+4t++4uOOAlOOAle+4ue+4uuOAkOOAke+4u++4vOOAiuOAi++4ve+4vuOAiOOAie+4v++5gOOAjOOAje+5ge+5guOAjuOAj++5g++5hO+5me+5mlwiXSxcbltcImExYTFcIixcIu+5m++5nO+5ne+5nuKAmOKAmeKAnOKAneOAneOAnuKAteKAsu+8g++8hu+8iuKAu8Kn44CD4peL4peP4paz4pay4peO4piG4piF4peH4peG4pah4pag4pa94pa844qj4oSFwq/vv6PvvL/Lje+5ie+5iu+5je+5ju+5i++5jO+5n++5oO+5oe+8i++8jcOXw7fCseKImu+8nO+8nu+8neKJpuKJp+KJoOKInuKJkuKJoe+5olwiLDQsXCLvvZ7iiKniiKriiqXiiKDiiJ/iir/jj5Ljj5HiiKviiK7iiLXiiLTimYDimYLiipXiipnihpHihpPihpDihpLihpbihpfihpnihpjiiKXiiKPvvI9cIl0sXG5bXCJhMjQwXCIsXCLvvLziiJXvuajvvITvv6XjgJLvv6Dvv6HvvIXvvKDihIPihInvuanvuarvuavjj5Xjjpzjjp3jjp7jj47jjqHjjo7jjo/jj4TCsOWFmeWFm+WFnuWFneWFoeWFo+WXp+eTqeezjuKWgVwiLDcsXCLilo/ilo7ilo3ilozilovilorilonilLzilLTilKzilKTilJzilpTilIDilILilpXilIzilJDilJTilJjila1cIl0sXG5bXCJhMmExXCIsXCLila7ilbDila/ilZDilZ7ilarilaHil6Lil6Pil6Xil6TilbHilbLilbPvvJBcIiw5LFwi4oWgXCIsOSxcIuOAoVwiLDgsXCLljYHljYTljYXvvKFcIiwyNSxcIu+9gVwiLDIxXSxcbltcImEzNDBcIixcIu+9l++9mO+9me+9ms6RXCIsMTYsXCLOo1wiLDYsXCLOsVwiLDE2LFwiz4NcIiw2LFwi44SFXCIsMTBdLFxuW1wiYTNhMVwiLFwi44SQXCIsMjUsXCLLmcuJy4rLh8uLXCJdLFxuW1wiYTNlMVwiLFwi4oKsXCJdLFxuW1wiYTQ0MFwiLFwi5LiA5LmZ5LiB5LiD5LmD5Lmd5LqG5LqM5Lq65YS/5YWl5YWr5Yeg5YiA5YiB5Yqb5YyV5Y2B5Y2c5Y+I5LiJ5LiL5LiI5LiK5Lir5Li45Yeh5LmF5LmI5Lmf5Lme5LqO5Lqh5YWA5YiD5Yu65Y2D5Y+J5Y+j5Zyf5aOr5aSV5aSn5aWz5a2Q5a2R5a2T5a+45bCP5bCi5bC45bGx5bed5bel5bex5bey5bez5be+5bmy5bu+5byL5byT5omNXCJdLFxuW1wiYTRhMVwiLFwi5LiR5LiQ5LiN5Lit5Liw5Li55LmL5bC55LqI5LqR5LqV5LqS5LqU5Lqi5LuB5LuA5LuD5LuG5LuH5LuN5LuK5LuL5LuE5YWD5YWB5YWn5YWt5YWu5YWs5YaX5Ye25YiG5YiH5YiI5Yu75Yu+5Yu/5YyW5Yy55Y2I5Y2H5Y2F5Y2e5Y6E5Y+L5Y+K5Y+N5aOs5aSp5aSr5aSq5aSt5a2U5bCR5bCk5bC65bGv5be05bm75bu/5byU5byV5b+D5oiI5oi25omL5omO5pSv5paH5paX5pak5pa55pel5puw5pyI5pyo5qyg5q2i5q255q+L5q+U5q+b5rCP5rC054Gr54iq54i254i754mH54mZ54mb54qs546L5LiZXCJdLFxuW1wiYTU0MFwiLFwi5LiW5LiV5LiU5LiY5Li75LmN5LmP5LmO5Lul5LuY5LuU5LuV5LuW5LuX5Luj5Luk5LuZ5Lue5YWF5YWE5YaJ5YaK5Yas5Ye55Ye65Ye45YiK5Yqg5Yqf5YyF5YyG5YyX5Yyd5Luf5Y2K5Y2J5Y2h5Y2g5Y2v5Y2u5Y675Y+v5Y+k5Y+z5Y+s5Y+u5Y+p5Y+o5Y+85Y+45Y+15Y+r5Y+m5Y+q5Y+y5Y+x5Y+w5Y+l5Y+t5Y+75Zub5Zua5aSWXCJdLFxuW1wiYTVhMVwiLFwi5aSu5aSx5aW05aW25a2V5a6D5bC85beo5ben5bem5biC5biD5bmz5bm85byB5byY5byX5b+F5oiK5omT5omU5omS5omR5pal5pem5pyu5pys5pyq5pyr5pyt5q2j5q+N5rCR5rCQ5rC45rGB5rGA5rC+54qv546E546J55Oc55Om55SY55Sf55So55Sp55Sw55Sx55Sy55Sz55aL55m955qu55q/55uu55+b55+i55+z56S656a+56m056uL5Lie5Lif5LmS5LmT5Lmp5LqZ5Lqk5Lqm5Lql5Lu/5LyJ5LyZ5LyK5LyV5LyN5LyQ5LyR5LyP5Luy5Lu25Lu75Luw5Luz5Lu95LyB5LyL5YWJ5YWH5YWG5YWI5YWoXCJdLFxuW1wiYTY0MFwiLFwi5YWx5YaN5Yaw5YiX5YiR5YiS5YiO5YiW5Yqj5YyI5Yyh5Yyg5Y2w5Y2x5ZCJ5ZCP5ZCM5ZCK5ZCQ5ZCB5ZCL5ZCE5ZCR5ZCN5ZCI5ZCD5ZCO5ZCG5ZCS5Zug5Zue5Zud5Zyz5Zyw5Zyo5Zyt5Zys5Zyv5Zyp5aSZ5aSa5aS35aS45aaE5aW45aaD5aW95aW55aaC5aaB5a2X5a2Y5a6H5a6I5a6F5a6J5a+65bCW5bG55bee5biG5bm25bm0XCJdLFxuW1wiYTZhMVwiLFwi5byP5byb5b+Z5b+W5oiO5oiM5oiN5oiQ5omj5omb5omY5pS25pep5peo5pes5pet5puy5puz5pyJ5py95py05pyx5py15qyh5q2k5q275rCW5rGd5rGX5rGZ5rGf5rGg5rGQ5rGV5rGh5rGb5rGN5rGO54Gw54mf54md55m+56u557Gz57O457y2576K57696ICB6ICD6ICM6ICS6ICz6IG/6IKJ6IKL6IKM6Iej6Ieq6Iez6Ie86IiM6Iib6Iif6Imu6Imy6Im+6Jmr6KGA6KGM6KGj6KW/6Zih5Liy5Lqo5L2N5L2P5L2H5L2X5L2e5Ly05L2b5L2V5Lyw5L2Q5L2R5Ly95Ly65Ly45L2D5L2U5Ly85L2G5L2jXCJdLFxuW1wiYTc0MFwiLFwi5L2c5L2g5Lyv5L2O5Ly25L2Z5L2d5L2I5L2a5YWM5YWL5YWN5YW15Ya25Ya35Yil5Yik5Yip5Yiq5Yio5Yqr5Yqp5Yqq5Yqs5Yyj5Y2z5Y215ZCd5ZCt5ZCe5ZC+5ZCm5ZGO5ZCn5ZGG5ZGD5ZCz5ZGI5ZGC5ZCb5ZCp5ZGK5ZC55ZC75ZC45ZCu5ZC15ZC25ZCg5ZC85ZGA5ZCx5ZCr5ZCf5ZCs5Zuq5Zuw5Zuk5Zur5Z2K5Z2R5Z2A5Z2NXCJdLFxuW1wiYTdhMVwiLFwi5Z2H5Z2O5Zy+5Z2Q5Z2P5Zy75aOv5aS+5aad5aaS5aao5aae5aaj5aaZ5aaW5aaN5aak5aaT5aaK5aal5a2d5a2c5a2a5a2b5a6M5a6L5a6P5bCs5bGA5bGB5bC/5bC+5bKQ5bKR5bKU5bKM5ber5biM5bqP5bqH5bqK5bu35byE5byf5b2k5b2i5b235b255b+Y5b+M5b+X5b+N5b+x5b+r5b+45b+q5oiS5oiR5oqE5oqX5oqW5oqA5om25oqJ5omt5oqK5om85om+5om55omz5oqS5omv5oqY5omu5oqV5oqT5oqR5oqG5pS55pS75pS45pex5pu05p2f5p2O5p2P5p2Q5p2R5p2c5p2W5p2e5p2J5p2G5p2gXCJdLFxuW1wiYTg0MFwiLFwi5p2T5p2X5q2l5q+P5rGC5rGe5rKZ5rKB5rKI5rKJ5rKF5rKb5rGq5rG65rKQ5rGw5rKM5rGo5rKW5rKS5rG95rKD5rGy5rG+5rG05rKG5rG25rKN5rKU5rKY5rKC54G254G854G954G454mi54mh54mg54uE54uC546W55Ss55Sr55S355S455qC55uv55+j56eB56eA56a/56m257O7572V6IKW6IKT6IKd6IKY6IKb6IKa6IKy6Imv6IqSXCJdLFxuW1wiYThhMVwiLFwi6IqL6IqN6KaL6KeS6KiA6LC36LGG6LGV6LKd6LWk6LWw6Laz6Lqr6LuK6L6b6L6w6L+C6L+G6L+F6L+E5beh6YKR6YKi6YKq6YKm6YKj6YWJ6YeG6YeM6Ziy6Ziu6Zix6Ziq6Zis5Lim5LmW5Lmz5LqL5Lqb5Lqe5Lqr5Lqs5L2v5L6d5L6N5L2z5L2/5L2s5L6b5L6L5L6G5L6D5L2w5L215L6I5L2p5L275L6W5L2+5L6P5L6R5L265YWU5YWS5YWV5YWp5YW35YW25YW45Ya95Ye95Yi75Yi45Yi35Yi65Yiw5Yiu5Yi25YmB5Yq+5Yq75Y2S5Y2U5Y2T5Y2R5Y2m5Y235Y245Y255Y+W5Y+U5Y+X5ZGz5ZG1XCJdLFxuW1wiYTk0MFwiLFwi5ZKW5ZG45ZKV5ZKA5ZG75ZG35ZKE5ZKS5ZKG5ZG85ZKQ5ZGx5ZG25ZKM5ZKa5ZGi5ZGo5ZKL5ZG95ZKO5Zu65Z6D5Z235Z2q5Z2p5Z2h5Z2m5Z2k5Z285aSc5aWJ5aWH5aWI5aWE5aWU5aa+5aa75aeU5aa55aau5aeR5aeG5aeQ5aeN5aeL5aeT5aeK5aav5aaz5aeS5aeF5a2f5a2k5a2j5a6X5a6a5a6Y5a6c5a6Z5a6b5bCa5bGI5bGFXCJdLFxuW1wiYTlhMVwiLFwi5bGG5bK35bKh5bK45bKp5bKr5bKx5bKz5biY5bia5biW5biV5bib5biR5bm45bqa5bqX5bqc5bqV5bqW5bu25bym5byn5byp5b6A5b6B5b2/5b285b+d5b+g5b+95b+15b+/5oCP5oCU5oCv5oC15oCW5oCq5oCV5oCh5oCn5oCp5oCr5oCb5oiW5oiV5oi/5oi+5omA5om/5ouJ5ouM5ouE5oq/5ouC5oq55ouS5oub5oqr5ouT5ouU5ouL5ouI5oqo5oq95oq85ouQ5ouZ5ouH5ouN5oq15oua5oqx5ouY5ouW5ouX5ouG5oqs5ouO5pS+5pan5pa85pe65piU5piT5piM5piG5piC5piO5piA5piP5piV5piKXCJdLFxuW1wiYWE0MFwiLFwi5piH5pyN5pyL5p2t5p6L5p6V5p2x5p6c5p2z5p235p6H5p6d5p6X5p2v5p2w5p2/5p6J5p2+5p6Q5p215p6a5p6T5p285p2q5p2y5qyj5q2m5q2n5q2/5rCT5rCb5rOj5rOo5rOz5rKx5rOM5rOl5rKz5rK95rK+5rK85rOi5rKr5rOV5rOT5rK45rOE5rK55rOB5rKu5rOX5rOF5rOx5rK/5rK75rOh5rOb5rOK5rKs5rOv5rOc5rOW5rOgXCJdLFxuW1wiYWFhMVwiLFwi54KV54KO54KS54KK54KZ54is54it54i454mI54mn54mp54uA54uO54uZ54uX54uQ546p546o546f546r546l55S955ad55aZ55aa55qE55uC55uy55u055+l55+956S+56WA56WB56eJ56eI56m656m556u657O+572U576M576L6ICF6IK66IKl6IKi6IKx6IKh6IKr6IKp6IK06IKq6IKv6Iel6Ie+6IiN6Iqz6Iqd6IqZ6Iqt6Iq96Iqf6Iq56Iqx6Iqs6Iql6Iqv6Iq46Iqj6Iqw6Iq+6Iq36JmO6Jmx5Yid6KGo6LuL6L+O6L+U6L+R6YK16YK46YKx6YK26YeH6YeR6ZW36ZaA6Zic6ZmA6Zi/6Zi76ZmEXCJdLFxuW1wiYWI0MFwiLFwi6ZmC6Zq56Zuo6Z2S6Z2e5Lqf5Lqt5Lqu5L+h5L615L6v5L6/5L+g5L+R5L+P5L+d5L+D5L625L+Y5L+f5L+K5L+X5L6u5L+Q5L+E5L+C5L+a5L+O5L+e5L635YWX5YaS5YaR5Yag5YmO5YmD5YmK5YmN5YmM5YmL5YmH5YuH5YuJ5YuD5YuB5YyN5Y2X5Y275Y6a5Y+b5ZKs5ZOA5ZKo5ZOO5ZOJ5ZK45ZKm5ZKz5ZOH5ZOC5ZK95ZKq5ZOBXCJdLFxuW1wiYWJhMVwiLFwi5ZOE5ZOI5ZKv5ZKr5ZKx5ZK75ZKp5ZKn5ZK/5Zu/5Z6C5Z6L5Z6g5Z6j5Z6i5Z+O5Z6u5Z6T5aWV5aWR5aWP5aWO5aWQ5aec5aeY5ae/5aej5aeo5aiD5ael5aeq5aea5aem5aiB5ae75a2p5a6j5a6m5a6k5a6i5a6l5bCB5bGO5bGP5bGN5bGL5bOZ5bOS5be35bid5bil5bif5bm95bqg5bqm5bu65byI5byt5b2l5b6I5b6F5b6K5b6L5b6H5b6M5b6J5oCS5oCd5oCg5oCl5oCO5oCo5oGN5oGw5oGo5oGi5oGG5oGD5oGs5oGr5oGq5oGk5omB5ouc5oyW5oyJ5ou85out5oyB5ouu5ou95oyH5oux5ou3XCJdLFxuW1wiYWM0MFwiLFwi5ouv5ous5ou+5ou05oyR5oyC5pS/5pWF5par5pa95pei5pil5pit5pig5pin5piv5pif5pio5pix5pik5pu35p+/5p+T5p+x5p+U5p+Q5p+s5p625p6v5p+15p+p5p+v5p+E5p+R5p605p+a5p+l5p645p+P5p+e5p+z5p6w5p+Z5p+i5p+d5p+S5q2q5q6D5q6G5q615q+S5q+X5rCf5rOJ5rSL5rSy5rSq5rWB5rSl5rSM5rSx5rSe5rSXXCJdLFxuW1wiYWNhMVwiLFwi5rS75rS95rS+5rS25rSb5rO15rS55rSn5rS45rSp5rSu5rS15rSO5rSr54Kr54K654Kz54Ks54Kv54Kt54K454Ku54Kk54iw54my54mv54m054up54ug54uh546354+K5467546y54+N54+A546z55Sa55St55WP55WM55WO55WL55ar55ak55al55ai55aj55m455qG55qH55qI55uI55uG55uD55uF55yB55u555u455yJ55yL55u+55u855yH55+c56CC56CU56CM56CN56WG56WJ56WI56WH56a556a656eR56eS56eL56m/56qB56u/56u957G957SC57SF57SA57SJ57SH57SE57SG57y4576O576/6ICEXCJdLFxuW1wiYWQ0MFwiLFwi6ICQ6ICN6ICR6IC26IOW6IOl6IOa6IOD6IOE6IOM6IOh6IOb6IOO6IOe6IOk6IOd6Ie06Iii6Iun6IyD6IyF6Iuj6Iub6Ium6IyE6Iul6IyC6IyJ6IuS6IuX6Iux6IyB6Iuc6IuU6IuR6Iue6IuT6Iuf6Iuv6IyG6JmQ6Jm56Jm76Jm66KGN6KGr6KaB6KeU6KiI6KiC6KiD6LKe6LKg6LW06LWz6La06LuN6LuM6L+w6L+m6L+i6L+q6L+lXCJdLFxuW1wiYWRhMVwiLFwi6L+t6L+r6L+k6L+o6YOK6YOO6YOB6YOD6YWL6YWK6YeN6ZaC6ZmQ6ZmL6ZmM6ZmN6Z2i6Z2p6Z+L6Z+t6Z+z6aCB6aKo6aOb6aOf6aaW6aaZ5LmY5Lqz5YCM5YCN5YCj5L+v5YCm5YCl5L+45YCp5YCW5YCG5YC85YCf5YCa5YCS5YCR5L+65YCA5YCU5YCo5L+x5YCh5YCL5YCZ5YCY5L+z5L+u5YCt5YCq5L++5YCr5YCJ5YW85Yak5Yal5Yai5YeN5YeM5YeG5YeL5YmW5Ymc5YmU5Ymb5Ymd5Yyq5Y2/5Y6f5Y6d5Y+f5ZOo5ZSQ5ZSB5ZS35ZO85ZOl5ZOy5ZSG5ZO65ZSU5ZOp5ZOt5ZOh5ZSJ5ZOu5ZOqXCJdLFxuW1wiYWU0MFwiLFwi5ZOm5ZSn5ZSH5ZO95ZSP5ZyD5ZyE5Z+C5Z+U5Z+L5Z+D5aCJ5aSP5aWX5aWY5aWa5aiR5aiY5aic5aif5aib5aiT5aes5aig5aij5aip5ail5aiM5aiJ5a2r5bGY5a6w5a6z5a625a605a6u5a615a655a645bCE5bGR5bGV5bGQ5bOt5bO95bO75bOq5bOo5bOw5bO25bSB5bO05beu5bit5bir5bqr5bqt5bqn5byx5b6S5b6R5b6Q5oGZXCJdLFxuW1wiYWVhMVwiLFwi5oGj5oGl5oGQ5oGV5oGt5oGp5oGv5oKE5oKf5oKa5oKN5oKU5oKM5oKF5oKW5omH5ouz5oyI5ou/5o2O5oy+5oyv5o2V5o2C5o2G5o2P5o2J5oy65o2Q5oy95oyq5oyr5oyo5o2N5o2M5pWI5pWJ5paZ5peB5peF5pmC5pmJ5pmP5pmD5pmS5pmM5pmF5pmB5pu45pyU5pyV5pyX5qCh5qC45qGI5qGG5qGT5qC55qGC5qGU5qCp5qKz5qCX5qGM5qGR5qC95p+05qGQ5qGA5qC85qGD5qCq5qGF5qCT5qCY5qGB5q6K5q6J5q635rCj5rCn5rCo5rCm5rCk5rOw5rWq5raV5raI5raH5rWm5rW45rW35rWZ5raTXCJdLFxuW1wiYWY0MFwiLFwi5rWs5raJ5rWu5rWa5rW05rWp5raM5raK5rW55raF5rWl5raU54OK54OY54Ok54OZ54OI54OP54i554m554u854u554u954u454u3546G54+t55CJ54+u54+g54+q54+e55WU55Wd55Wc55Wa55WZ55a+55eF55eH55ay55az55a955a855a555eC55a455qL55qw55uK55uN55uO55yp55yf55yg55yo55+p56Cw56Cn56C456Cd56C056C3XCJdLFxuW1wiYWZhMVwiLFwi56Cl56Ct56Cg56Cf56Cy56WV56WQ56Wg56Wf56WW56We56Wd56WX56Wa56ek56ej56en56ef56em56ep56eY56qE56qI56uZ56yG56yR57KJ57Sh57SX57SL57SK57Sg57Si57SU57SQ57SV57Sa57Sc57SN57SZ57Sb57y6572f576U57+F57+B6ICG6ICY6ICV6ICZ6ICX6IC96IC/6IOx6ISC6IOw6ISF6IOt6IO06ISG6IO46IOz6ISI6IO96ISK6IO86IOv6Iet6Ies6IiA6IiQ6Iiq6Iir6Iio6Iis6Iq76Iyr6I2S6I2U6I2K6Iy46I2Q6I2J6Iy16Iy06I2P6Iyy6Iy56Iy26IyX6I2A6Iyx6Iyo6I2DXCJdLFxuW1wiYjA0MFwiLFwi6JmU6JqK6Jqq6JqT6Jqk6Jqp6JqM6Jqj6Jqc6KGw6KG36KKB6KKC6KG96KG56KiY6KiQ6KiO6KiM6KiV6KiK6KiX6KiT6KiW6KiP6KiR6LGI6LG66LG56LKh6LKi6LW36Lqs6LuS6LuU6LuP6L6x6YCB6YCG6L+36YCA6L+66L+06YCD6L+96YCF6L+46YKV6YOh6YOd6YOi6YWS6YWN6YWM6YeY6Yed6YeX6Yec6YeZ6ZaD6Zmi6Zmj6ZmhXCJdLFxuW1wiYjBhMVwiLFwi6Zmb6Zmd6Zmk6ZmY6Zme6Zq76aOi6aas6aqo6auY6ayl6ayy6ay85Lm+5YG65YG95YGc5YGH5YGD5YGM5YGa5YGJ5YGl5YG25YGO5YGV5YG15YG05YG35YGP5YCP5YGv5YGt5YWc5YaV5Yew5Ymq5Ymv5YuS5YuZ5YuY5YuV5YyQ5YyP5YyZ5Yy/5Y2A5Yy+5Y+D5pu85ZWG5ZWq5ZWm5ZWE5ZWe5ZWh5ZWD5ZWK5ZSx5ZWW5ZWP5ZWV5ZSv5ZWk5ZS45ZSu5ZWc5ZSs5ZWj5ZSz5ZWB5ZWX5ZyI5ZyL5ZyJ5Z+f5aCF5aCK5aCG5Z+g5Z+k5Z+65aCC5aC15Z+35Z+55aSg5aWi5ai25amB5amJ5amm5amq5amAXCJdLFxuW1wiYjE0MFwiLFwi5ai85ami5ama5amG5amK5a2w5a+H5a+F5a+E5a+C5a6/5a+G5bCJ5bCI5bCH5bGg5bGc5bGd5bSH5bSG5bSO5bSb5bSW5bSi5bSR5bSp5bSU5bSZ5bSk5bSn5bSX5bei5bi45bi25biz5bi35bq35bq45bq25bq15bq+5by15by35b2X5b2s5b2p5b2r5b6X5b6Z5b6e5b6Y5b6h5b6g5b6c5oG/5oKj5oKJ5oKg5oKo5oOL5oK05oOm5oK9XCJdLFxuW1wiYjFhMVwiLFwi5oOF5oK75oK15oOc5oK85oOY5oOV5oOG5oOf5oK45oOa5oOH5oia5oib5omI5o6g5o6n5o2y5o6W5o6i5o6l5o235o2n5o6Y5o6q5o2x5o6p5o6J5o6D5o6b5o2r5o6o5o6E5o6I5o6Z5o6h5o6s5o6S5o6P5o6A5o275o2p5o2o5o265pWd5pWW5pWR5pWZ5pWX5ZWf5pWP5pWY5pWV5pWU5pac5pab5pas5peP5peL5peM5peO5pmd5pma5pmk5pmo5pmm5pme5pu55YuX5pyb5qKB5qKv5qKi5qKT5qK15qG/5qG25qKx5qKn5qKX5qKw5qKD5qOE5qKt5qKG5qKF5qKU5qKd5qKo5qKf5qKh5qKC5qyy5q66XCJdLFxuW1wiYjI0MFwiLFwi5q+r5q+s5rCr5raO5ra85rez5reZ5ray5reh5reM5rek5re75re65riF5reH5reL5rav5reR5rau5ree5re55ra45re35re15reF5reS5ria5ra15rea5rer5reY5req5rex5reu5reo5reG5reE5raq5res5ra/5rem54O554SJ54SK54O954Ov54i954m954qB54yc54yb54yW54yT54yZ546H55CF55CK55CD55CG54++55CN55Og55O2XCJdLFxuW1wiYjJhMVwiLFwi55O355Sc55Si55Wl55Wm55Wi55Ww55aP55eU55eV55a155eK55eN55qO55uU55uS55ub55y355y+55y855y255y455y656Gr56GD56GO56Wl56Wo56Wt56e756qS56qV56yg56yo56yb56ys56ym56yZ56ye56yu57KS57KX57KV57WG57WD57Wx57Su57S557S857WA57Sw57Sz57WE57Sv57WC57Sy57Sx57y9576e576a57+M57+O57+S6ICc6IGK6IGG6ISv6ISW6ISj6ISr6ISp6ISw6ISk6IiC6Ii16Ii36Ii26Ii56I6O6I6e6I6Y6I246I6i6I6W6I696I6r6I6S6I6K6I6T6I6J6I6g6I236I276I28XCJdLFxuW1wiYjM0MFwiLFwi6I6G6I6n6JmV5b2q6JuH6JuA6Jq26JuE6Jq16JuG6JuL6Jqx6Jqv6JuJ6KGT6KKe6KKI6KKr6KKS6KKW6KKN6KKL6KaT6KaP6Kiq6Kid6Kij6Kil6Kix6Kit6Kif6Kib6Kii6LGJ6LGa6LKp6LKs6LKr6LKo6LKq6LKn6LWn6LWm6La+6La66Lub6Luf6YCZ6YCN6YCa6YCX6YCj6YCf6YCd6YCQ6YCV6YCe6YCg6YCP6YCi6YCW6YCb6YCUXCJdLFxuW1wiYjNhMVwiLFwi6YOo6YOt6YO96YWX6YeO6Ye16Yem6Yej6Yen6Yet6Yep6ZaJ6Zmq6Zm16Zmz6Zm46Zmw6Zm06Zm26Zm36Zms6ZuA6Zuq6Zup56ug56uf6aCC6aCD6a2a6bOl6bm16bm/6bql6bq75YKi5YKN5YKF5YKZ5YKR5YKA5YKW5YKY5YKa5pyA5Yex5Ymy5Ym05Ym15Ymp5Yue5Yud5Yub5Y2a5Y6l5ZW75ZaA5Zan5ZW85ZaK5Zad5ZaY5ZaC5Zac5Zaq5ZaU5ZaH5ZaL5ZaD5Zaz5Zau5Zaf5ZS+5Zay5Zaa5Za75Zas5Zax5ZW+5ZaJ5Zar5ZaZ5ZyN5aCv5aCq5aC05aCk5aCw5aCx5aCh5aCd5aCg5aO55aO65aWgXCJdLFxuW1wiYjQ0MFwiLFwi5am35aqa5am/5aqS5aqb5aqn5a2z5a2x5a+S5a+M5a+T5a+Q5bCK5bCL5bCx5bWM5bWQ5bS05bWH5be95bmF5bi95bmA5bmD5bm+5buK5buB5buC5buE5by85b2t5b6p5b6q5b6o5oOR5oOh5oKy5oK25oOg5oSc5oSj5oO65oSV5oOw5oO75oO05oWo5oOx5oSO5oO25oSJ5oSA5oSS5oif5omJ5o6j5o6M5o+P5o+A5o+p5o+J5o+G5o+NXCJdLFxuW1wiYjRhMVwiLFwi5o+S5o+j5o+Q5o+h5o+W5o+t5o+u5o225o+05o+q5o+b5pGS5o+a5o+55pWe5pWm5pWi5pWj5paR5paQ5pav5pmu5pmw5pm05pm25pmv5pqR5pm65pm+5pm35pu+5pu/5pyf5pyd5qO65qOV5qOg5qOY5qOX5qSF5qOf5qO15qOu5qOn5qO55qOS5qOy5qOj5qOL5qON5qSN5qSS5qSO5qOJ5qOa5qWu5qO75qy+5qy65qy95q6Y5q6W5q685q+v5rCu5rCv5rCs5riv5ri45rmU5rih5riy5rmn5rmK5rig5ril5rij5rib5rmb5rmY5rik5rmW5rmu5rit5rim5rmv5ri05rmN5ri65ris5rmD5rid5ri+5ruLXCJdLFxuW1wiYjU0MFwiLFwi5rqJ5riZ5rmO5rmj5rmE5rmy5rmp5rmf54SZ54Sa54Sm54Sw54Sh54S254Wu54Sc54mM54qE54qA54y254yl54y054yp55C655Cq55Cz55Ci55Cl55C155C255C055Cv55Cb55Cm55Co55Sl55Sm55Wr55Wq55ei55eb55ej55eZ55eY55ee55eg55m755m855qW55qT55q055uc552P55+t56Gd56Gs56Gv56iN56iI56iL56iF56iA56qYXCJdLFxuW1wiYjVhMVwiLFwi56qX56qW56ul56uj562J562W562G562Q562S562U562N562L562P562R57Kf57Kl57We57WQ57Wo57WV57Sr57Wu57Wy57Wh57Wm57Wi57Ww57Wz5ZaE57+U57+V6ICL6IGS6IKF6IWV6IWU6IWL6IWR6IWO6IS56IWG6IS+6IWM6IWT6IW06IiS6Iic6I+p6JCD6I+46JCN6I+g6I+F6JCL6I+B6I+v6I+x6I+06JGX6JCK6I+w6JCM6I+M6I+96I+y6I+K6JC46JCO6JCE6I+c6JCH6I+U6I+f6Jmb6Juf6JuZ6Jut6JuU6Jub6Juk6JuQ6Jue6KGX6KOB6KOC6KKx6KaD6KaW6Ki76Kmg6KmV6Kme6Ki86KmBXCJdLFxuW1wiYjY0MFwiLFwi6KmU6Kmb6KmQ6KmG6Ki06Ki66Ki26KmW6LGh6LKC6LKv6LK86LKz6LK96LOB6LK76LOA6LK06LK36LK26LK/6LK46LaK6LaF6LaB6LeO6Led6LeL6Lea6LeR6LeM6Leb6LeG6Lu76Lu46Lu86L6c6YCu6YC16YCx6YC46YCy6YC26YSC6YO16YSJ6YO+6YWj6YWl6YeP6YiU6YiV6Yij6YiJ6Yie6YiN6YiQ6YiH6YiR6ZaU6ZaP6ZaL6ZaRXCJdLFxuW1wiYjZhMVwiLFwi6ZaT6ZaS6ZaO6ZqK6ZqO6ZqL6Zm96ZqF6ZqG6ZqN6Zmy6ZqE6ZuB6ZuF6ZuE6ZuG6ZuH6Zuv6Zuy6Z+M6aCF6aCG6aCI6aOn6aOq6aOv6aOp6aOy6aOt6aau6aat6buD6buN6buR5LqC5YKt5YK15YKy5YKz5YOF5YK+5YKs5YK35YK75YKv5YOH5Ym/5Ym35Ym95Yuf5Yum5Yuk5Yui5Yuj5Yyv5Zef5Zeo5ZeT5Zem5ZeO5Zec5ZeH5ZeR5Zej5Zek5Zev5Zea5Zeh5ZeF5ZeG5Zel5ZeJ5ZyS5ZyT5aGe5aGR5aGY5aGX5aGa5aGU5aGr5aGM5aGt5aGK5aGi5aGS5aGL5aWn5auB5auJ5auM5aq+5aq95aq8XCJdLFxuW1wiYjc0MFwiLFwi5aqz5auC5aqy5bWp5bWv5bmM5bm55buJ5buI5byS5b2Z5b6s5b6u5oSa5oSP5oWI5oSf5oOz5oSb5oO55oSB5oSI5oWO5oWM5oWE5oWN5oS+5oS05oSn5oSN5oSG5oS35oih5oii5pCT5pC+5pCe5pCq5pCt5pC95pCs5pCP5pCc5pCU5pCN5pC25pCW5pCX5pCG5pWs5paf5paw5pqX5pqJ5pqH5pqI5pqW5pqE5pqY5pqN5pyD5qaU5qWtXCJdLFxuW1wiYjdhMVwiLFwi5qWa5qW35qWg5qWU5qW15qSw5qaC5qWK5qWo5qWr5qWe5qWT5qW55qaG5qWd5qWj5qWb5q2H5q2y5q+A5q6/5q+T5q+95rqi5rqv5ruT5rq25ruC5rqQ5rqd5ruH5ruF5rql5rqY5rq85rq65rqr5ruR5rqW5rqc5ruE5ruU5rqq5rqn5rq054WO54WZ54Wp54Wk54WJ54Wn54Wc54Ws54Wm54WM54Wl54We54WG54Wo54WW54i654mS54y3542F54y/54y+55Gv55Ga55GV55Gf55Ge55GB55C/55GZ55Gb55Gc55W255W455iA55ew55iB55ey55ex55e655e/55e055ez55ue55uf552b552r552m552e552jXCJdLFxuW1wiYjg0MFwiLFwi5525552q552s552c552l552o552i55+u56KO56Kw56KX56KY56KM56KJ56G856KR56KT56G/56W656W/56aB6JCs56a956ic56ia56ig56iU56if56ie56qf56qg562356+A562g562u562n57Kx57Kz57K157aT57W557aR57aB57aP57Wb572u572p572q572y576p576o576k6IGW6IGY6IKG6IKE6IWx6IWw6IW46IWl6IWu6IWz6IWrXCJdLFxuW1wiYjhhMVwiLFwi6IW56IW66IWm6IiF6ImH6JKC6JG36JC96JCx6JG16JGm6JGr6JGJ6JGs6JGb6JC86JC16JGh6JGj6JGp6JGt6JGG6Jme6Jmc6Jmf6Ju56JyT6JyI6JyH6JyA6Ju+6Ju76JyC6JyD6JyG6JyK6KGZ6KOf6KOU6KOZ6KOc6KOY6KOd6KOh6KOK6KOV6KOS6Kac6Kej6Kmr6Kmy6Kmz6Kmm6Kmp6Kmw6KqH6Km86Kmj6Kqg6Kmx6KqF6Kmt6Kmi6Kmu6Kms6Km56Km76Ki+6Kmo6LGi6LKK6LKJ6LOK6LOH6LOI6LOE6LKy6LOD6LOC6LOF6Leh6Lef6Leo6Lev6Lez6Le66Leq6Lek6Lem6Lqy6LyD6LyJ6Lu+6LyKXCJdLFxuW1wiYjk0MFwiLFwi6L6f6L6y6YGL6YGK6YGT6YGC6YGU6YC86YGV6YGQ6YGH6YGP6YGO6YGN6YGR6YC+6YGB6YSS6YSX6YWs6YWq6YWp6YeJ6Yi36YmX6Yi46Yi96YmA6Yi+6Ymb6YmL6Ymk6YmR6Yi06YmJ6YmN6YmF6Yi56Yi/6Yma6ZaY6ZqY6ZqU6ZqV6ZuN6ZuL6ZuJ6ZuK6Zu36Zu76Zu56Zu26Z2W6Z206Z226aCQ6aCR6aCT6aCK6aCS6aCM6aO86aO0XCJdLFxuW1wiYjlhMVwiLFwi6aO96aO+6aaz6aax6aa06auh6bOp6bqC6byO6byT6byg5YOn5YOu5YOl5YOW5YOt5YOa5YOV5YOP5YOR5YOx5YOO5YOp5YWi5Yez5YqD5YqC5Yyx5Y6t5Ze+5ZiA5Zib5ZiX5Ze95ZiU5ZiG5ZiJ5ZiN5ZiO5Ze35ZiW5Zif5ZiI5ZiQ5Ze25ZyY5ZyW5aG15aG+5aKD5aKT5aKK5aG55aKF5aG95aO95aSl5aSi5aSk5aWq5aWp5auh5aum5aup5auX5auW5auY5auj5a215a+e5a+n5a+h5a+l5a+m5a+o5a+i5a+k5a+f5bCN5bGi5baE5baH5bmb5bmj5bmV5bmX5bmU5buT5buW5byK5b2G5b2w5b655oWHXCJdLFxuW1wiYmE0MFwiLFwi5oS/5oWL5oW35oWi5oWj5oWf5oWa5oWY5oW15oiq5pKH5pGY5pGU5pKk5pG45pGf5pG65pGR5pGn5pC05pGt5pG75pWy5pah5peX5peW5pqi5pqo5pqd5qac5qao5qaV5qeB5qau5qeT5qeL5qab5qa35qa75qar5qa05qeQ5qeN5qat5qeM5qam5qeD5qaj5q2J5q2M5rCz5ryz5ryU5ru+5ryT5ru05ryp5ry+5ryg5rys5ryP5ryC5ryiXCJdLFxuW1wiYmFhMVwiLFwi5ru/5ruv5ryG5ryx5ry45ryy5ryj5ryV5ryr5ryv5r6I5ryq5rus5ryB5ruy5ruM5ru354aU54aZ54W954aK54aE54aS54i+54qS54qW542E542Q55Gk55Gj55Gq55Gw55Gt55SE55aR55in55iN55iL55iJ55iT55uh55uj556E5529552/552h56OB56Kf56Kn56Kz56Kp56Kj56aO56aP56aN56iu56ix56qq56qp56ut56uv566h566V566L5621566X566d566U566P5664566H566E57K557K957K+57a757aw57ac57a957a+57ag57eK57a057ay57ax57a657ai57a/57a157a457at57eS57eH57asXCJdLFxuW1wiYmI0MFwiLFwi572w57+g57+h57+f6IGe6IGa6IKH6IWQ6IaA6IaP6IaI6IaK6IW/6IaC6Ien6Ie66IiH6IiU6Iie6ImL6JOJ6JK/6JOG6JOE6JKZ6JKe6JKy6JKc6JOL6JK46JOA6JOT6JKQ6JK86JOR6JOK6Jy/6Jyc6Jy76Jyi6Jyl6Jy06JyY6J2V6Jy36Jyp6KOz6KSC6KO06KO56KO46KO96KOo6KSa6KOv6Kqm6KqM6Kqe6Kqj6KqN6Kqh6KqT6KqkXCJdLFxuW1wiYmJhMVwiLFwi6Kqq6Kql6Kqo6KqY6KqR6Kqa6Kqn6LGq6LKN6LKM6LOT6LOR6LOS6LWr6LaZ6LaV6Le86LyU6LyS6LyV6LyT6L6j6YGg6YGY6YGc6YGj6YGZ6YGe6YGi6YGd6YGb6YSZ6YSY6YSe6YW16YW46YW36YW06Ym46YqA6YqF6YqY6YqW6Ym76YqT6Yqc6Yqo6Ym86YqR6Zah6Zao6Zap6Zaj6Zal6Zak6ZqZ6Zqc6Zqb6ZuM6ZuS6ZyA6Z286Z6F6Z+26aCX6aCY6aKv6aKx6aSD6aSF6aSM6aSJ6aeB6aqv6aqw6aum6a2B6a2C6bO06bO26bOz6bq86by76b2K5YSE5YSA5YO75YO15YO55YSC5YSI5YSJ5YSF5YecXCJdLFxuW1wiYmM0MFwiLFwi5YqH5YqI5YqJ5YqN5YqK5Yuw5Y6y5Ziu5Zi75Zi55Ziy5Zi/5Zi05Zip5ZmT5ZmO5ZmX5Zm05Zi25Ziv5Ziw5aKA5aKf5aKe5aKz5aKc5aKu5aKp5aKm5aWt5ayJ5au75ayL5au15ayM5ayI5a+u5a+s5a+p5a+r5bGk5bGl5bad5baU5bmi5bmf5bmh5bui5bua5buf5bud5buj5bug5b2I5b2x5b635b615oW25oWn5oWu5oWd5oWV5oaCXCJdLFxuW1wiYmNhMVwiLFwi5oW85oWw5oWr5oW+5oan5oaQ5oar5oaO5oas5oaa5oak5oaU5oau5oiu5pGp5pGv5pG55pKe5pKy5pKI5pKQ5pKw5pKl5pKT5pKV5pKp5pKS5pKu5pKt5pKr5pKa5pKs5pKZ5pKi5pKz5pW15pW35pW45pqu5pqr5pq05pqx5qij5qif5qeo5qiB5qie5qiZ5qe95qih5qiT5qiK5qez5qiC5qiF5qet5qiR5q2Q5q2O5q6k5q+F5q+G5ry/5r285r6E5r2R5r2m5r2U5r6G5r2t5r2b5r245r2u5r6O5r265r2w5r2k5r6X5r2Y5ruV5r2v5r2g5r2f54af54as54ax54ao54mW54qb542O542X55Gp55KL55KDXCJdLFxuW1wiYmQ0MFwiLFwi55G+55KA55W/55ig55ip55if55ik55im55ih55ii55qa55q655uk556O556H556M556R556L56OL56OF56K656OK56K+56OV56K856OQ56i/56i856mA56i956i356i756qv56qu566t566x56+E566056+G56+H56+B566g56+M57OK57eg57e057ev57e757eY57es57ed57eo57ej57ea57ee57ep57ae57eZ57ey57e557215723576vXCJdLFxuW1wiYmRhMVwiLFwi57+p6ICm6Iab6Iac6Iad6Iag6Iaa6IaY6JSX6JS96JSa6JOu6JSs6JSt6JST6JSR6JSj6JSh6JSU6JOs6JSl6JO/6JSG6J6C6J206J226J2g6J2m6J246J2o6J2Z6J2X6J2M6J2T6KGb6KGd6KSQ6KSH6KSS6KST6KSV6KSK6Kq86KuS6KuH6KuE6KqV6KuL6Ku46Kqy6KuJ6KuC6Kq/6Kqw6KuW6KuN6Kq26Kq56Kub6LGM6LGO6LGs6LOg6LOe6LOm6LOk6LOs6LOt6LOi6LOj6LOc6LOq6LOh6LWt6Laf6Laj6Lir6LiQ6Lid6Lii6LiP6Lip6Lif6Lih6Lie6Lq66Lyd6Lyb6Lyf6Lyp6Lym6Lyq6Lyc6LyeXCJdLFxuW1wiYmU0MFwiLFwi6Lyl6YGp6YGu6YGo6YGt6YG36YSw6YSt6YSn6YSx6YaH6YaJ6YaL6YaD6YuF6Yq76Yq36Yuq6Yqs6Yuk6YuB6Yqz6Yq86YuS6YuH6Yuw6Yqy6Zat6Zax6ZyE6ZyG6ZyH6ZyJ6Z2g6Z6N6Z6L6Z6P6aCh6aCr6aCc6aKz6aSK6aST6aSS6aSY6aed6aeQ6aef6aeb6aeR6aeV6aeS6aeZ6aq36auu6auv6ayn6a2F6a2E6a236a2v6bSG6bSJXCJdLFxuW1wiYmVhMVwiLFwi6bSD6bqp6bq+6buO5aKo6b2S5YSS5YSY5YSU5YSQ5YSV5YaA5Yaq5Yed5YqR5YqT5Yuz5ZmZ5Zmr5Zm55Zmp5Zmk5Zm45Zmq5Zmo5Zml5Zmx5Zmv5Zms5Zmi5Zm25aOB5aK+5aOH5aOF5aWu5ayd5ay05a245a+w5bCO5b2K5oay5oaR5oap5oaK5oeN5oa25oa+5oeK5oeI5oiw5pOF5pOB5pOL5pK75pK85pOa5pOE5pOH5pOC5pON5pK/5pOS5pOU5pK+5pW05puG5puJ5pq55puE5puH5pq45qi95qi45qi65qmZ5qmr5qmY5qi55qmE5qmi5qmh5qmL5qmH5qi15qmf5qmI5q2Z5q235rCF5r+C5r6x5r6hXCJdLFxuW1wiYmY0MFwiLFwi5r+D5r6k5r+B5r6n5r6z5r+A5r655r625r6m5r6g5r6054a+54eJ54eQ54eS54eI54eV54a554eO54eZ54ec54eD54eE542o55Kc55Kj55KY55Kf55Ke55Oi55SM55SN55i055i455i655un55ul556g556e556f556l56Oo56Oa56Os56On56am56mN56mO56mG56mM56mL56q656+Z57CR56+J56+k56+b56+h56+p56+m57OV57OW57iKXCJdLFxuW1wiYmZhMVwiLFwi57iR57iI57ib57ij57ie57id57iJ57iQ5725576y57+w57+x57+u6ICo6Iaz6Iap6Iao6Ie76IiI6ImY6ImZ6JWK6JWZ6JWI6JWo6JWp6JWD6JWJ6JWt6JWq6JWe6J6D6J6f6J6e6J6i6J6N6KGh6KSq6KSy6KSl6KSr6KSh6Kaq6Kam6Kum6Ku66Kur6Kux6KyA6Kuc6Kun6Kuu6Ku+6KyB6KyC6Ku36Kut6Kuz6Ku26Ku86LGr6LGt6LKT6LO06LmE6Lix6Li06LmC6Li56Li16Ly76Lyv6Ly46Lyz6L6o6L6m6YG16YG06YG46YGy6YG86YG66YS06YaS6Yyg6Yy26Yu46Yyz6Yyv6Yyi6Yu86Yyr6YyE6YyaXCJdLFxuW1wiYzA0MFwiLFwi6YyQ6Yym6Yyh6YyV6Yyu6YyZ6Za76Zqn6Zqo6Zqq6ZuV6ZyO6ZyR6ZyW6ZyN6ZyT6ZyP6Z2b6Z2c6Z2m6Z6Y6aCw6aC46aC76aC36aCt6aC56aCk6aSQ6aSo6aSe6aSb6aSh6aSa6aet6aei6aex6aq46aq86au76aut6ayo6a6R6bSV6bSj6bSm6bSo6bSS6bSb6buY6buU6b6N6b6c5YSq5YSf5YSh5YSy5Yu15ZqO5ZqA5ZqQ5ZqF5ZqHXCJdLFxuW1wiYzBhMVwiLFwi5ZqP5aOV5aOT5aOR5aOO5ayw5ayq5ayk5a265bC35bGo5ba85ba65ba95ba45bmr5b2M5b695oeJ5oeC5oeH5oem5oeL5oiy5oi05pOO5pOK5pOY5pOg5pOw5pOm5pOs5pOx5pOi5pOt5paC5paD5puZ5puW5qqA5qqU5qqE5qqi5qqc5qub5qqj5qm+5qqX5qqQ5qqg5q2c5q6u5q+a5rCI5r+Y5r+x5r+f5r+g5r+b5r+k5r+r5r+v5r6A5r+s5r+h5r+p5r+V5r+u5r+w54en54ef54eu54em54el54et54es54e054eg54i154mG542w542y55Kp55Kw55Km55Ko55mG55mC55mM55uq556z556q556w556sXCJdLFxuW1wiYzE0MFwiLFwi556n556t55+v56O356O656O056Ov56SB56an56aq56mX56q/57CH57CN56++56+357CM56+g57Og57Oc57Oe57Oi57Of57OZ57Od57iu57i+57mG57i357iy57mD57ir57i957ix57mF57mB57i057i557mI57i157i/57iv572E57+z57+86IGx6IGy6IGw6IGv6IGz6IeG6IeD6Ia66IeC6IeA6Ia/6Ia96IeJ6Ia+6Ieo6IiJ6Imx6JaqXCJdLFxuW1wiYzFhMVwiLFwi6JaE6JW+6Jac6JaR6JaU6Jav6Jab6JaH6Jao6JaK6Jmn6J+A6J+R6J6z6J+S6J+G6J6r6J676J666J+I6J+L6KS76KS26KWE6KS46KS96Kas6KyO6KyX6KyZ6Kyb6KyK6Kyg6Kyd6KyE6KyQ6LGB6LC/6LGz6LO66LO96LO86LO46LO76Lao6LmJ6LmL6LmI6LmK6L2E6Ly+6L2C6L2F6Ly/6YG/6YG96YKE6YKB6YKC6YKA6YS56Yaj6Yae6Yac6Y2N6Y6C6Yyo6Y216Y2K6Y2l6Y2L6YyY6Y2+6Y2s6Y2b6Y2w6Y2a6Y2U6ZeK6ZeL6ZeM6ZeI6ZeG6Zqx6Zq46ZuW6Zyc6Zye6Z6g6Z+T6aGG6aK26aS16aiBXCJdLFxuW1wiYzI0MFwiLFwi6ae/6a6u6a6r6a6q6a6t6bS76bS/6bqL6buP6bue6buc6bud6bub6by+6b2L5Y+i5ZqV5Zqu5aOZ5aOY5ay45b2d5oej5oiz5pO05pOy5pO+5pSG5pO65pO75pO35pa35puc5pym5qqz5qqs5quD5qq75qq45quC5qqu5qqv5q2f5q245q6v54CJ54CL5r++54CG5r+654CR54CP54e754e854e+54e45423542155Kn55K/55SV55mW55mYXCJdLFxuW1wiYzJhMVwiLFwi55mS5569556/5567556856SO56au56mh56mi56mg56uE56uF57Cr57Cn57Cq57Ce57Cj57Ch57On57mU57mV57me57ma57mh57mS57mZ572I57+557+76IG36IG26IeN6IeP6IiK6JeP6Jap6JeN6JeQ6JeJ6Jaw6Ja66Ja56Jam6J+v6J+s6J+y6J+g6KaG6Kay6Ke06Kyo6Ky56Kys6Kyr6LGQ6LSF6LmZ6Lmj6Lmm6Lmk6Lmf6LmV6LuA6L2J6L2N6YKH6YKD6YKI6Yar6Yas6YeQ6Y6U6Y6K6Y6W6Y6i6Y6z6Y6u6Y6s6Y6w6Y6Y6Y6a6Y6X6ZeU6ZeW6ZeQ6ZeV6Zui6Zuc6ZuZ6Zub6Zue6Zyk6Z6j6Z6mXCJdLFxuW1wiYzM0MFwiLFwi6Z6t6Z+56aGN6aGP6aGM6aGO6aGT6aK66aS+6aS/6aS96aSu6aal6aiO6auB6ayD6ayG6a2P6a2O6a2N6a+K6a+J6a+96a+I6a+A6bWR6bWd6bWg6bug6byV6bys5YSz5Zql5aOe5aOf5aOi5a+16b6Q5bus5oey5oe35oe25oe15pSA5pSP5pug5pud5qul5qud5qua5quT54Cb54Cf54Co54Ca54Cd54CV54CY54iG54iN54mY54qi5424XCJdLFxuW1wiYzNhMVwiLFwi542655K955OK55Oj55aH55aG55mf55mh55+H56SZ56ax56mr56mp57C+57C/57C457C957C357GA57mr57mt57m557mp57mq576F57mz5762576557646IeY6Jep6Jed6Jeq6JeV6Jek6Jel6Je36J+76KCF6KCN6J+56J++6KWg6KWf6KWW6KWe6K2B6K2c6K2Y6K2J6K2a6K2O6K2P6K2G6K2Z6LSI6LSK6Lm86Lmy6LqH6Lm26Lms6Lm66Lm06L2U6L2O6L6t6YKK6YKL6Yax6Yau6Y+h6Y+R6Y+f6Y+D6Y+I6Y+c6Y+d6Y+W6Y+i6Y+N6Y+Y6Y+k6Y+X6Y+o6Zec6Zq06Zuj6Zyq6Zyn6Z2h6Z+c6Z+76aGeXCJdLFxuW1wiYzQ0MFwiLFwi6aGY6aGb6aK86aWF6aWJ6aiW6aiZ6ayN6a+o6a+n6a+W6a+b6baJ6bWh6bWy6bWq6bWs6bqS6bqX6bqT6bq05Yu45Zqo5Zq35Zq25Zq05Zq85aOk5a2A5a2D5a295a+25beJ5oe45oe65pSY5pSU5pSZ5pum5pyn5qus54C+54Cw54Cy54iQ542755OP55mi55ml56Sm56Sq56Ss56Sr56uH56u257GM57GD57GN57Ov57Ow6L6u57m957m8XCJdLFxuW1wiYzRhMVwiLFwi57qC572M6ICA6Iea6Imm6Je76Je56JiR6Je66JiG6JiL6JiH6JiK6KCU6KCV6KWk6Ka66Ke46K2w6K2s6K2m6K2v6K2f6K2r6LSP6LSN6LqJ6LqB6LqF6LqC6Ya06YeL6ZCY6ZCD6Y+96Zeh6Zyw6aOE6aWS6aWR6aao6air6aiw6ai36ai16bCT6bCN6bm56bq16buo6byv6b2f6b2j6b2h5YS35YS45ZuB5ZuA5ZuC5aSU5bGs5beN5oe85oe+5pSd5pSc5paV5pup5qu75qyE5qu65q6y54GM54ib54qn55OW55OU55mp55+T57GQ57qP57qM57686JiX6Jit6Jia6KCj6KCi6KCh6KCf6KWq6KWs6Ka96K20XCJdLFxuW1wiYzU0MFwiLFwi6K236K296LST6LqK6LqN6LqL6L2f6L6v6Ya66ZCu6ZCz6ZC16ZC66ZC46ZCy6ZCr6Zei6Zy46Zy56Zyy6Z+/6aGn6aGl6aWX6amF6amD6amA6ai+6auP6a2U6a2R6bCt6bCl6bav6ba06beC6ba46bqd6buv6byZ6b2c6b2m6b2n5YS85YS75ZuI5ZuK5ZuJ5a2/5beU5beS5b2O5oe/5pSk5qyK5q2h54GR54GY546A55Ok55aK55mu55msXCJdLFxuW1wiYzVhMVwiLFwi56az57Gg57Gf6IG+6IG96Ief6KWy6KWv6Ke86K6A6LSW6LSX6LqR6LqT6L2h6YWI6ZGE6ZGR6ZGS6Zy96Zy+6Z+D6Z+B6aGr6aWV6amV6amN6auS6aya6bGJ6bCx6bC+6bC76beT6beX6by06b2s6b2q6b6U5ZuM5beW5oiA5pSj5pSr5pSq5pus5qyQ55Oa56uK57Gk57Gj57Gl57qT57qW57qU6Iei6Ji46Ji/6KCx6K6K6YKQ6YKP6ZGj6ZGg6ZGk6Z2o6aGv6aWc6ama6amb6amX6auT6auU6auR6bGU6bGX6bGW6bel6bqf6bu05ZuR5aOp5pSs54Ge55mx55my55+X572Q576I6KC26KC56KGi6K6T6K6SXCJdLFxuW1wiYzY0MFwiLFwi6K6W6Im36LSb6YeA6ZGq6Z2C6Z2I6Z2E6Z+G6aGw6amf6ayi6a2Y6bGf6be56be66bm86bm96byH6b236b2y5buz5qyW54Gj57Gs57Gu6KC76KeA6Lqh6YeB6ZGy6ZGw6aGx6aWe6auW6ayj6buM54Gk55+a6K6a6ZG36Z+J6ami6aml57qc6K6c6Lqq6YeF6ZG96ZG+6ZG86bG36bG46bu36LGU6ZG/6bia54io6amq6ayx6bib6bie57GyXCJdLFxuW1wiYzk0MFwiLFwi5LmC5Lmc5Ye15Yya5Y6C5LiH5LiM5LmH5LqN5ZuX76iM5bGu5b2z5LiP5YaH5LiO5Liu5LqT5LuC5LuJ5LuI5YaY5Yu85Y2s5Y655Zyg5aSD5aSs5bCQ5be/5peh5q6z5q+M5rCU54i/5Lix5Li85Luo5Luc5Lup5Luh5Lud5Lua5YiM5Yyc5Y2M5Zyi5Zyj5aSX5aSv5a6B5a6E5bCS5bC75bG05bGz5biE5bqA5bqC5b+J5oiJ5omQ5rCVXCJdLFxuW1wiYzlhMVwiLFwi5rC25rGD5rC/5rC754qu54qw546K56a46IKK6Zie5LyO5LyY5Lys5Lu15LyU5Lux5LyA5Lu35LyI5Lyd5LyC5LyF5Lyi5LyT5LyE5Lu05LyS5Yax5YiT5YiJ5YiQ5Yqm5Yyi5Yyf5Y2N5Y6K5ZCH5Zuh5Zuf5Zyu5Zyq5Zy05aS85aaA5aW85aaF5aW75aW+5aW35aW/5a2W5bCV5bCl5bG85bG65bG75bG+5bef5bm15bqE5byC5bya5b205b+V5b+U5b+P5omc5ome5omk5omh5omm5omi5omZ5omg5oma5oml5pev5peu5py+5py55py45py75py65py/5py85pyz5rCY5rGG5rGS5rGc5rGP5rGK5rGU5rGLXCJdLFxuW1wiY2E0MFwiLFwi5rGM54Gx54me54q054q1546O55Sq55m/56m1572R6Im46Im86IqA6Im96Im/6JmN6KW+6YKZ6YKX6YKY6YKb6YKU6Zii6Zik6Zig6Zij5L2W5Ly75L2i5L2J5L2T5L2k5Ly+5L2n5L2S5L2f5L2B5L2Y5Lyt5Lyz5Ly/5L2h5YaP5Ya55Yic5Yie5Yih5Yqt5Yqu5YyJ5Y2j5Y2y5Y6O5Y6P5ZCw5ZC35ZCq5ZGU5ZGF5ZCZ5ZCc5ZCl5ZCYXCJdLFxuW1wiY2FhMVwiLFwi5ZC95ZGP5ZGB5ZCo5ZCk5ZGH5Zuu5Zun5Zul5Z2B5Z2F5Z2M5Z2J5Z2L5Z2S5aSG5aWA5aam5aaY5aag5aaX5aaO5aai5aaQ5aaP5aan5aah5a6O5a6S5bCo5bCq5bKN5bKP5bKI5bKL5bKJ5bKS5bKK5bKG5bKT5bKV5beg5biK5biO5bqL5bqJ5bqM5bqI5bqN5byF5byd5b245b225b+S5b+R5b+Q5b+t5b+o5b+u5b+z5b+h5b+k5b+j5b+65b+v5b+35b+75oCA5b+05oi65oqD5oqM5oqO5oqP5oqU5oqH5omx5om75om65omw5oqB5oqI5om35om95omy5om05pS35pew5pe05pez5pey5pe15p2F5p2HXCJdLFxuW1wiY2I0MFwiLFwi5p2Z5p2V5p2M5p2I5p2d5p2N5p2a5p2L5q+Q5rCZ5rCa5rG45rGn5rGr5rKE5rKL5rKP5rGx5rGv5rGp5rKa5rGt5rKH5rKV5rKc5rGm5rGz5rGl5rG75rKO54G054G654mj54q/54q954uD54uG54uB54q654uF546V546X546T546U546S55S655S555aU55aV55qB56S96IC06IKV6IKZ6IKQ6IKS6IKc6IqQ6IqP6IqF6IqO6IqR6IqTXCJdLFxuW1wiY2JhMVwiLFwi6IqK6IqD6IqE6LG46L+J6L6/6YKf6YKh6YKl6YKe6YKn6YKg6Ziw6Zio6Ziv6Zit5Liz5L6Y5L285L6F5L295L6A5L6H5L225L205L6J5L6E5L235L2M5L6X5L2q5L6a5L255L6B5L245L6Q5L6c5L6U5L6e5L6S5L6C5L6V5L2r5L2u5Yae5Ya85Ya+5Yi15Yiy5Yiz5YmG5Yix5Yq85YyK5YyL5Yy85Y6S5Y6U5ZKH5ZG/5ZKB5ZKR5ZKC5ZKI5ZGr5ZG65ZG+5ZGl5ZGs5ZG05ZGm5ZKN5ZGv5ZGh5ZGg5ZKY5ZGj5ZGn5ZGk5Zu35Zu55Z2v5Z2y5Z2t5Z2r5Z2x5Z2w5Z225Z6A5Z215Z275Z2z5Z205Z2iXCJdLFxuW1wiY2M0MFwiLFwi5Z2o5Z295aSM5aWF5aa15aa65aeP5aeO5aay5aeM5aeB5aa25aa85aeD5aeW5aax5aa95aeA5aeI5aa05aeH5a2i5a2l5a6T5a6V5bGE5bGH5bKu5bKk5bKg5bK15bKv5bKo5bKs5bKf5bKj5bKt5bKi5bKq5bKn5bKd5bKl5bK25bKw5bKm5biX5biU5biZ5byo5byi5byj5byk5b2U5b6C5b2+5b295b+e5b+l5oCt5oCm5oCZ5oCy5oCLXCJdLFxuW1wiY2NhMVwiLFwi5oC05oCK5oCX5oCz5oCa5oCe5oCs5oCi5oCN5oCQ5oCu5oCT5oCR5oCM5oCJ5oCc5oiU5oi95oqt5oq05ouR5oq+5oqq5oq25ouK5oqu5oqz5oqv5oq75oqp5oqw5oq45pS95pao5pa75piJ5pe85piE5piS5piI5pe75piD5piL5piN5piF5pe95piR5piQ5pu25pyK5p6F5p2s5p6O5p6S5p225p275p6Y5p6G5p6E5p205p6N5p6M5p265p6f5p6R5p6Z5p6D5p295p6B5p245p255p6U5qyl5q6A5q2+5q+e5rCd5rKT5rOs5rOr5rOu5rOZ5rK25rOU5rKt5rOn5rK35rOQ5rOC5rK65rOD5rOG5rOt5rOyXCJdLFxuW1wiY2Q0MFwiLFwi5rOS5rOd5rK05rKK5rKd5rKA5rOe5rOA5rSw5rON5rOH5rKw5rO55rOP5rOp5rOR54KU54KY54KF54KT54KG54KE54KR54KW54KC54Ka54KD54mq54uW54uL54uY54uJ54uc54uS54uU54ua54uM54uR546k546h546t546m546i546g546s546d55Od55Oo55S/55WA55S+55aM55aY55qv55uz55ux55uw55u155+455+855+555+755+6XCJdLFxuW1wiY2RhMVwiLFwi55+356WC56S/56eF56m456m756u757G157O96IC16IKP6IKu6IKj6IK46IK16IKt6Iig6Iqg6IuA6Iqr6Iqa6IqY6Iqb6Iq16Iqn6Iqu6Iq86Iqe6Iq66Iq06Iqo6Iqh6Iqp6IuC6Iqk6IuD6Iq26Iqi6Jmw6Jmv6Jmt6Jmu6LGW6L+S6L+L6L+T6L+N6L+W6L+V6L+X6YKy6YK06YKv6YKz6YKw6Zi56Zi96Zi86Zi66ZmD5L+N5L+F5L+T5L6y5L+J5L+L5L+B5L+U5L+c5L+Z5L675L6z5L+b5L+H5L+W5L665L+A5L655L+s5YmE5YmJ5YuA5YuC5Yy95Y285Y6X5Y6W5Y6Z5Y6Y5ZK65ZKh5ZKt5ZKl5ZOPXCJdLFxuW1wiY2U0MFwiLFwi5ZOD6IyN5ZK35ZKu5ZOW5ZK25ZOF5ZOG5ZKg5ZGw5ZK85ZKi5ZK+5ZGy5ZOe5ZKw5Z615Z6e5Z6f5Z6k5Z6M5Z6X5Z6d5Z6b5Z6U5Z6Y5Z6P5Z6Z5Z6l5Z6a5Z6V5aO05aSN5aWT5aeh5aee5aeu5aiA5aex5aed5ae65ae95ae85ae25aek5aey5ae35aeb5aep5aez5ae15aeg5ae+5ae05aet5a6o5bGM5bOQ5bOY5bOM5bOX5bOL5bObXCJdLFxuW1wiY2VhMVwiLFwi5bOe5bOa5bOJ5bOH5bOK5bOW5bOT5bOU5bOP5bOI5bOG5bOO5bOf5bO45be55bih5bii5bij5big5bik5bqw5bqk5bqi5bqb5bqj5bql5byH5byu5b2W5b6G5oC35oC55oGU5oGy5oGe5oGF5oGT5oGH5oGJ5oGb5oGM5oGA5oGC5oGf5oCk5oGE5oGY5oGm5oGu5omC5omD5ouP5oyN5oyL5ou15oyO5oyD5our5ou55oyP5oyM5ou45ou25oyA5oyT5oyU5ou65oyV5ou75ouw5pWB5pWD5paq5pa/5pi25pih5piy5pi15pic5pim5pii5piz5pir5pi65pid5pi05pi55piu5pyP5pyQ5p+B5p+y5p+I5p66XCJdLFxuW1wiY2Y0MFwiLFwi5p+c5p675p+45p+Y5p+A5p635p+F5p+r5p+k5p+f5p615p+N5p6z5p+35p+25p+u5p+j5p+C5p655p+O5p+n5p+w5p6y5p+85p+G5p+t5p+M5p6u5p+m5p+b5p+65p+J5p+K5p+D5p+q5p+L5qyo5q6C5q6E5q625q+W5q+Y5q+g5rCg5rCh5rSo5rS05rSt5rSf5rS85rS/5rSS5rSK5rOa5rSz5rSE5rSZ5rS65rSa5rSR5rSA5rSd5rWCXCJdLFxuW1wiY2ZhMVwiLFwi5rSB5rSY5rS35rSD5rSP5rWA5rSH5rSg5rSs5rSI5rSi5rSJ5rSQ54K354Kf54K+54Kx54Kw54Kh54K054K154Kp54mB54mJ54mK54ms54mw54mz54mu54uK54uk54uo54ur54uf54uq54um54uj546F54+M54+C54+I54+F546554625461546054+r546/54+H546+54+D54+G546454+L55Os55Ou55Su55WH55WI55an55aq55m555uE55yI55yD55yE55yF55yK55u355u755u655+n55+o56CG56CR56CS56CF56CQ56CP56CO56CJ56CD56CT56WK56WM56WL56WF56WE56eV56eN56eP56eW56eO56qAXCJdLFxuW1wiZDA0MFwiLFwi56m+56uR56yA56yB57G657G457G557G/57KA57KB57SD57SI57SB572Y576R576N576+6ICH6ICO6ICP6ICU6IC36IOY6IOH6IOg6IOR6IOI6IOC6IOQ6IOF6IOj6IOZ6IOc6IOK6IOV6IOJ6IOP6IOX6IOm6ION6Ie/6Iih6IqU6IuZ6Iu+6Iu56IyH6Iuo6IyA6IuV6Iy66Iur6IuW6Iu06Ius6Iuh6Iuy6Iu16IyM6Iu76Iu26Iuw6IuqXCJdLFxuW1wiZDBhMVwiLFwi6Iuk6Iug6Iu66Iuz6Iut6Jm36Jm06Jm86Jmz6KGB6KGO6KGn6KGq6KGp6KeT6KiE6KiH6LWy6L+j6L+h6L+u6L+g6YOx6YK96YK/6YOV6YOF6YK+6YOH6YOL6YOI6YeU6YeT6ZmU6ZmP6ZmR6ZmT6ZmK6ZmO5YCe5YCF5YCH5YCT5YCi5YCw5YCb5L+15L+05YCz5YC35YCs5L+25L+35YCX5YCc5YCg5YCn5YC15YCv5YCx5YCO5YWa5YaU5YaT5YeK5YeE5YeF5YeI5YeO5Ymh5Yma5YmS5Yme5Ymf5YmV5Ymi5YuN5YyO5Y6e5ZSm5ZOi5ZSX5ZSS5ZOn5ZOz5ZOk5ZSa5ZO/5ZSE5ZSI5ZOr5ZSR5ZSF5ZOxXCJdLFxuW1wiZDE0MFwiLFwi5ZSK5ZO75ZO35ZO45ZOg5ZSO5ZSD5ZSL5ZyB5ZyC5Z+M5aCy5Z+V5Z+S5Z665Z+G5Z695Z685Z645Z625Z6/5Z+H5Z+Q5Z655Z+B5aSO5aWK5aiZ5aiW5ait5aiu5aiV5aiP5aiX5aiK5aie5aiz5a2s5a6n5a6t5a6s5bCD5bGW5bGU5bOs5bO/5bOu5bOx5bO35bSA5bO55bip5bio5bqo5bqu5bqq5bqs5byz5byw5b2n5oGd5oGa5oGnXCJdLFxuW1wiZDFhMVwiLFwi5oGB5oKi5oKI5oKA5oKS5oKB5oKd5oKD5oKV5oKb5oKX5oKH5oKc5oKO5oiZ5omG5ouy5oyQ5o2W5oys5o2E5o2F5oy25o2D5o+k5oy55o2L5o2K5oy85oyp5o2B5oy05o2Y5o2U5o2Z5oyt5o2H5oyz5o2a5o2R5oy45o2X5o2A5o2I5pWK5pWG5peG5peD5peE5peC5pmK5pmf5pmH5pmR5pyS5pyT5qCf5qCa5qGJ5qCy5qCz5qC75qGL5qGP5qCW5qCx5qCc5qC15qCr5qCt5qCv5qGO5qGE5qC05qCd5qCS5qCU5qCm5qCo5qCu5qGN5qC65qCl5qCg5qys5qyv5qyt5qyx5qy05q2t6IKC5q6I5q+m5q+kXCJdLFxuW1wiZDI0MFwiLFwi5q+o5q+j5q+i5q+n5rCl5rW65rWj5rWk5rW25rSN5rWh5raS5rWY5rWi5rWt5rWv5raR5raN5rev5rW/5raG5rWe5rWn5rWg5raX5rWw5rW85rWf5raC5raY5rSv5rWo5raL5rW+5raA5raE5rSW5raD5rW75rW95rW15raQ54Oc54OT54OR54Od54OL57y554Oi54OX54OS54Oe54Og54OU54ON54OF54OG54OH54Oa54OO54Oh54mC54m4XCJdLFxuW1wiZDJhMVwiLFwi54m354m254yA54u654u054u+54u254uz54u754yB54+T54+Z54+l54+W546854+n54+j54+p54+c54+S54+b54+U54+d54+a54+X54+Y54+o55Oe55Of55O055O155Sh55Wb55Wf55aw55eB55a755eE55eA55a/55a255a655qK55uJ55yd55yb55yQ55yT55yS55yj55yR55yV55yZ55ya55yi55yn56Cj56Cs56Ci56C156Cv56Co56Cu56Cr56Ch56Cp56Cz56Cq56Cx56WU56Wb56WP56Wc56WT56WS56WR56er56es56eg56eu56et56eq56ec56ee56ed56qG56qJ56qF56qL56qM56qK56qH56uY56yQXCJdLFxuW1wiZDM0MFwiLFwi56yE56yT56yF56yP56yI56yK56yO56yJ56yS57KE57KR57KK57KM57KI57KN57KF57Se57Sd57SR57SO57SY57SW57ST57Sf57SS57SP57SM572c572h572e572g572d572b576W576S57+D57+C57+A6ICW6IC+6IC56IO66IOy6IO56IO16ISB6IO76ISA6IiB6Iiv6Iil6Iyz6Iyt6I2E6IyZ6I2R6Iyl6I2W6Iy/6I2B6Iym6Iyc6IyiXCJdLFxuW1wiZDNhMVwiLFwi6I2C6I2O6Iyb6Iyq6IyI6Iy86I2N6IyW6Iyk6Iyg6Iy36Iyv6Iyp6I2H6I2F6I2M6I2T6Iye6Iys6I2L6Iyn6I2I6JmT6JmS6Jqi6Jqo6JqW6JqN6JqR6Jqe6JqH6JqX6JqG6JqL6Jqa6JqF6Jql6JqZ6Jqh6Jqn6JqV6JqY6JqO6Jqd6JqQ6JqU6KGD6KGE6KGt6KG16KG26KGy6KKA6KGx6KG/6KGv6KKD6KG+6KG06KG86KiS6LGH6LGX6LG76LKk6LKj6LW26LW46La16La36La26LuR6LuT6L++6L+16YCC6L+/6L+76YCE6L+86L+26YOW6YOg6YOZ6YOa6YOj6YOf6YOl6YOY6YOb6YOX6YOc6YOk6YWQXCJdLFxuW1wiZDQ0MFwiLFwi6YWO6YWP6YeV6Yei6Yea6Zmc6Zmf6Zq86aOj6auf6ayv5Lm/5YGw5YGq5YGh5YGe5YGg5YGT5YGL5YGd5YGy5YGI5YGN5YGB5YGb5YGK5YGi5YCV5YGF5YGf5YGp5YGr5YGj5YGk5YGG5YGA5YGu5YGz5YGX5YGR5YeQ5Ymr5Ymt5Yms5Ymu5YuW5YuT5Yyt5Y6c5ZW15ZW25ZS85ZWN5ZWQ5ZS05ZSq5ZWR5ZWi5ZS25ZS15ZSw5ZWS5ZWFXCJdLFxuW1wiZDRhMVwiLFwi5ZSM5ZSy5ZWl5ZWO5ZS55ZWI5ZSt5ZS75ZWA5ZWL5ZyK5ZyH5Z+75aCU5Z+i5Z+25Z+c5Z+05aCA5Z+t5Z+95aCI5Z+45aCL5Z+z5Z+P5aCH5Z+u5Z+j5Z+y5Z+l5Z+s5Z+h5aCO5Z+85aCQ5Z+n5aCB5aCM5Z+x5Z+p5Z+w5aCN5aCE5aWc5amg5amY5amV5amn5ame5ai45ai15amt5amQ5amf5aml5ams5amT5amk5amX5amD5amd5amS5amE5amb5amI5aqO5ai+5amN5ai55amM5amw5amp5amH5amR5amW5amC5amc5a2y5a2u5a+B5a+A5bGZ5bSe5bSL5bSd5bSa5bSg5bSM5bSo5bSN5bSm5bSl5bSPXCJdLFxuW1wiZDU0MFwiLFwi5bSw5bSS5bSj5bSf5bSu5bi+5bi05bqx5bq05bq55bqy5bqz5by25by45b6b5b6W5b6f5oKK5oKQ5oKG5oK+5oKw5oK65oOT5oOU5oOP5oOk5oOZ5oOd5oOI5oKx5oOb5oK35oOK5oK/5oOD5oON5oOA5oyy5o2l5o6K5o6C5o295o695o6e5o6t5o6d5o6X5o6r5o6O5o2v5o6H5o6Q5o2u5o6v5o215o6c5o2t5o6u5o285o6k5oy75o6fXCJdLFxuW1wiZDVhMVwiLFwi5o245o6F5o6B5o6R5o6N5o2w5pWT5peN5pml5pmh5pmb5pmZ5pmc5pmi5pyY5qG55qKH5qKQ5qKc5qGt5qGu5qKu5qKr5qWW5qGv5qKj5qKs5qKp5qG15qG05qKy5qKP5qG35qKS5qG85qGr5qGy5qKq5qKA5qGx5qG+5qKb5qKW5qKL5qKg5qKJ5qKk5qG45qG75qKR5qKM5qKK5qG95qy25qyz5qy35qy45q6R5q6P5q6N5q6O5q6M5rCq5reA5rar5ra05raz5rm05ras5rep5rei5ra35re25reU5riA5reI5reg5ref5reW5ra+5rel5rec5red5reb5re05reK5ra95ret5rew5ra65reV5reC5reP5reJXCJdLFxuW1wiZDY0MFwiLFwi5reQ5rey5reT5re95reX5reN5rej5ra754O654SN54O354SX54O054SM54Ow54SE54Oz54SQ54O854O/54SG54ST54SA54O454O254SL54SC54SO54m+54m754m854m/54yd54yX54yH54yR54yY54yK54yI54u/54yP54ye546I54+254+454+155CE55CB54+955CH55CA54+654+854+/55CM55CL54+055CI55Wk55Wj55eO55eS55ePXCJdLFxuW1wiZDZhMVwiLFwi55eL55eM55eR55eQ55qP55qJ55uT55y555yv55yt55yx55yy55y055yz55y955yl55y755y156GI56GS56GJ56GN56GK56GM56Cm56GF56GQ56Wk56Wn56Wp56Wq56Wj56Wr56Wh56a756e656e456e256e356qP56qU56qQ56y1562H56y056yl56yw56yi56yk56yz56yY56yq56yd56yx56yr56yt56yv56yy56y456ya56yj57KU57KY57KW57Kj57S157S957S457S257S657WF57Ss57Sp57WB57WH57S+57S/57WK57S757So572j576V576c576d576b57+K57+L57+N57+Q57+R57+H57+P57+J6ICfXCJdLFxuW1wiZDc0MFwiLFwi6ICe6ICb6IGH6IGD6IGI6ISY6ISl6ISZ6ISb6ISt6ISf6ISs6ISe6ISh6ISV6ISn6ISd6ISi6IiR6Ii46Iiz6Ii66Ii06Iiy6Im06I6Q6I6j6I6o6I6N6I266I2z6I6k6I206I6P6I6B6I6V6I6Z6I216I6U6I6p6I296I6D6I6M6I6d6I6b6I6q6I6L6I2+6I6l6I6v6I6I6I6X6I6w6I2/6I6m6I6H6I6u6I226I6a6JmZ6JmW6Jq/6Jq3XCJdLFxuW1wiZDdhMVwiLFwi6JuC6JuB6JuF6Jq66Jqw6JuI6Jq56Jqz6Jq46JuM6Jq06Jq76Jq86JuD6Jq96Jq+6KGS6KKJ6KKV6KKo6KKi6KKq6KKa6KKR6KKh6KKf6KKY6KKn6KKZ6KKb6KKX6KKk6KKs6KKM6KKT6KKO6KaC6KeW6KeZ6KeV6Kiw6Kin6Kis6Kie6LC56LC76LGc6LGd6LG96LKl6LW96LW76LW56La86LeC6La56La/6LeB6LuY6Lue6Lud6Luc6LuX6Lug6Luh6YCk6YCL6YCR6YCc6YCM6YCh6YOv6YOq6YOw6YO06YOy6YOz6YOU6YOr6YOs6YOp6YWW6YWY6YWa6YWT6YWV6Yes6Ye06Yex6Yez6Ye46Yek6Ye56YeqXCJdLFxuW1wiZDg0MFwiLFwi6Yer6Ye36Yeo6Yeu6ZW66ZaG6ZaI6Zm86Zmt6Zmr6Zmx6Zmv6Zq/6Z2q6aCE6aOl6aaX5YKb5YKV5YKU5YKe5YKL5YKj5YKD5YKM5YKO5YKd5YGo5YKc5YKS5YKC5YKH5YWf5YeU5YyS5YyR5Y6k5Y6n5ZaR5Zao5Zal5Zat5ZW35ZmF5Zai5ZaT5ZaI5ZaP5Za15ZaB5Zaj5ZaS5Zak5ZW95ZaM5Zam5ZW/5ZaV5Zah5ZaO5ZyM5aCp5aC3XCJdLFxuW1wiZDhhMVwiLFwi5aCZ5aCe5aCn5aCj5aCo5Z+15aGI5aCl5aCc5aCb5aCz5aC/5aC25aCu5aC55aC45aCt5aCs5aC75aWh5aqv5aqU5aqf5am65aqi5aqe5am45aqm5am85aql5aqs5aqV5aqu5ai35aqE5aqK5aqX5aqD5aqL5aqp5am75am95aqM5aqc5aqP5aqT5aqd5a+q5a+N5a+L5a+U5a+R5a+K5a+O5bCM5bCw5bS35bWD5bWr5bWB5bWL5bS/5bS15bWR5bWO5bWV5bSz5bS65bWS5bS95bSx5bWZ5bWC5bS55bWJ5bS45bS85bSy5bS25bWA5bWF5bmE5bmB5b2Y5b6m5b6l5b6r5oOJ5oK55oOM5oOi5oOO5oOE5oSUXCJdLFxuW1wiZDk0MFwiLFwi5oOy5oSK5oSW5oSF5oO15oST5oO45oO85oO+5oOB5oSD5oSY5oSd5oSQ5oO/5oSE5oSL5omK5o6U5o6x5o6w5o+O5o+l5o+o5o+v5o+D5pKd5o+z5o+K5o+g5o+25o+V5o+y5o+15pGh5o+f5o6+5o+d5o+c5o+E5o+Y5o+T5o+C5o+H5o+M5o+L5o+I5o+w5o+X5o+Z5pSy5pWn5pWq5pWk5pWc5pWo5pWl5paM5pad5pae5pau5peQ5peSXCJdLFxuW1wiZDlhMVwiLFwi5pm85pms5pm75pqA5pmx5pm55pmq5pmy5pyB5qSM5qOT5qSE5qOc5qSq5qOs5qOq5qOx5qSP5qOW5qO35qOr5qOk5qO25qST5qSQ5qOz5qOh5qSH5qOM5qSI5qWw5qK05qSR5qOv5qOG5qSU5qO45qOQ5qO95qO85qOo5qSL5qSK5qSX5qOO5qOI5qOd5qOe5qOm5qO05qOR5qSG5qOU5qOp5qSV5qSl5qOH5qy55qy75qy/5qy85q6U5q6X5q6Z5q6V5q695q+w5q+y5q+z5rCw5re85rmG5rmH5rif5rmJ5rqI5ri85ri95rmF5rmi5rir5ri/5rmB5rmd5rmz5ric5riz5rmL5rmA5rmR5ri75riD5riu5rmeXCJdLFxuW1wiZGE0MFwiLFwi5rmo5rmc5rmh5rix5rio5rmg5rmx5rmr5ri55rii5riw5rmT5rml5rin5rm45rmk5rm35rmV5rm55rmS5rmm5ri15ri25rma54Sg54Se54Sv54O754Su54Sx54Sj54Sl54Si54Sy54Sf54So54S654Sb54mL54ma54qI54qJ54qG54qF54qL54yS54yL54yw54yi54yx54yz54yn54yy54yt54ym54yj54y154yM55Cu55Cs55Cw55Cr55CWXCJdLFxuW1wiZGFhMVwiLFwi55Ca55Ch55Ct55Cx55Ck55Cj55Cd55Cp55Cg55Cy55O755Sv55Wv55Ws55en55ea55eh55em55ed55ef55ek55eX55qV55qS55ua552G552H552E552N552F552K552O552L552M55+e55+s56Gg56Gk56Gl56Gc56Gt56Gx56Gq56Gu56Gw56Gp56Go56Ge56Gi56W056Wz56Wy56Ww56iC56iK56iD56iM56iE56qZ56um56uk562K56y7562E562I562M562O562A562Y562F57Ki57Ke57Ko57Kh57WY57Wv57Wj57WT57WW57Wn57Wq57WP57Wt57Wc57Wr57WS57WU57Wp57WR57Wf57WO57y+57y/572lXCJdLFxuW1wiZGI0MFwiLFwi572m576i576g576h57+X6IGR6IGP6IGQ6IO+6IOU6IWD6IWK6IWS6IWP6IWH6IS96IWN6IS66Iem6Ieu6Ie36Ie46Ie56IiE6Ii86Ii96Ii/6Im16Iy76I+P6I+56JCj6I+A6I+o6JCS6I+n6I+k6I+86I+26JCQ6I+G6I+I6I+r6I+j6I6/6JCB6I+d6I+l6I+Y6I+/6I+h6I+L6I+O6I+W6I+16I+J6JCJ6JCP6I+e6JCR6JCG6I+C6I+zXCJdLFxuW1wiZGJhMVwiLFwi6I+V6I+66I+H6I+R6I+q6JCT6I+D6I+s6I+u6I+E6I+76I+X6I+i6JCb6I+b6I++6JuY6Jui6Jum6JuT6Juj6Jua6Juq6Jud6Jur6Juc6Jus6Jup6JuX6Juo6JuR6KGI6KGW6KGV6KK66KOX6KK56KK46KOA6KK+6KK26KK86KK36KK96KKy6KSB6KOJ6KaV6KaY6KaX6Ked6Kea6Keb6KmO6KmN6Ki56KmZ6KmA6KmX6KmY6KmE6KmF6KmS6KmI6KmR6KmK6KmM6KmP6LGf6LKB6LKA6LK66LK+6LKw6LK56LK16LaE6LaA6LaJ6LeY6LeT6LeN6LeH6LeW6Lec6LeP6LeV6LeZ6LeI6LeX6LeF6Luv6Lu36Lu6XCJdLFxuW1wiZGM0MFwiLFwi6Lu56Lum6Luu6Lul6Lu16Lun6Luo6Lu26Lur6Lux6Lus6Lu06Lup6YCt6YC06YCv6YSG6YSs6YSE6YO/6YO86YSI6YO56YO76YSB6YSA6YSH6YSF6YSD6YWh6YWk6YWf6YWi6YWg6YiB6YiK6Yil6YiD6Yia6Yim6YiP6YiM6YiA6YiS6Ye/6Ye96YiG6YiE6Yin6YiC6Yic6Yik6YiZ6YiX6YiF6YiW6ZW76ZaN6ZaM6ZaQ6ZqH6Zm+6ZqIXCJdLFxuW1wiZGNhMVwiLFwi6ZqJ6ZqD6ZqA6ZuC6ZuI6ZuD6Zux6Zuw6Z2s6Z2w6Z2u6aCH6aKp6aOr6bOm6bu55LqD5LqE5Lq25YK95YK/5YOG5YKu5YOE5YOK5YK05YOI5YOC5YKw5YOB5YK65YKx5YOL5YOJ5YK25YK45YeX5Ym65Ym45Ym75Ym85ZeD5Zeb5ZeM5ZeQ5ZeL5ZeK5Zed5ZeA5ZeU5ZeE5Zep5Za/5ZeS5ZaN5ZeP5ZeV5Zei5ZeW5ZeI5Zey5ZeN5ZeZ5ZeC5ZyU5aGT5aGo5aGk5aGP5aGN5aGJ5aGv5aGV5aGO5aGd5aGZ5aGl5aGb5aC95aGj5aGx5aO85auH5auE5auL5aq65aq45aqx5aq15aqw5aq/5auI5aq75auGXCJdLFxuW1wiZGQ0MFwiLFwi5aq35auA5auK5aq05aq25auN5aq55aqQ5a+W5a+Y5a+Z5bCf5bCz5bWx5bWj5bWK5bWl5bWy5bWs5bWe5bWo5bWn5bWi5bew5bmP5bmO5bmK5bmN5bmL5buF5buM5buG5buL5buH5b2A5b6v5b6t5oO35oWJ5oWK5oSr5oWF5oS25oSy5oSu5oWG5oSv5oWP5oSp5oWA5oig6YWo5oij5oil5oik5o+F5o+x5o+r5pCQ5pCS5pCJ5pCg5pCkXCJdLFxuW1wiZGRhMVwiLFwi5pCz5pGD5pCf5pCV5pCY5pC55pC35pCi5pCj5pCM5pCm5pCw5pCo5pGB5pC15pCv5pCK5pCa5pGA5pCl5pCn5pCL5o+n5pCb5pCu5pCh5pCO5pWv5paS5peT5pqG5pqM5pqV5pqQ5pqL5pqK5pqZ5pqU5pm45pyg5qWm5qWf5qS45qWO5qWi5qWx5qS/5qWF5qWq5qS55qWC5qWX5qWZ5qW65qWI5qWJ5qS15qWs5qSz5qS95qWl5qOw5qW45qS05qWp5qWA5qWv5qWE5qW25qWY5qWB5qW05qWM5qS75qWL5qS35qWc5qWP5qWR5qSy5qWS5qSv5qW75qS85q2G5q2F5q2D5q2C5q2I5q2B5q6b76iN5q+75q+8XCJdLFxuW1wiZGU0MFwiLFwi5q+55q+35q+45rqb5ruW5ruI5rqP5ruA5rqf5rqT5rqU5rqg5rqx5rq55ruG5ruS5rq95ruB5rqe5ruJ5rq35rqw5ruN5rqm5ruP5rqy5rq+5ruD5ruc5ruY5rqZ5rqS5rqO5rqN5rqk5rqh5rq/5rqz5ruQ5ruK5rqX5rqu5rqj54WH54WU54WS54Wj54Wg54WB54Wd54Wi54Wy54W454Wq54Wh54WC54WY54WD54WL54Ww54Wf54WQ54WTXCJdLFxuW1wiZGVhMVwiLFwi54WE54WN54Wa54mP54qN54qM54qR54qQ54qO54y8542C54y754y6542A542K542J55GE55GK55GL55GS55GR55GX55GA55GP55GQ55GO55GC55GG55GN55GU55Oh55O/55O+55O955Sd55W555W35qaD55ev55iP55iD55e355e+55e855e555e455iQ55e755e255et55e155e955qZ55q155ud552V552f552g552S552W552a552p552n552U552Z552t55+g56KH56Ka56KU56KP56KE56KV56KF56KG56Kh56KD56G556KZ56KA56KW56G756W856aC56W956W556iR56iY56iZ56iS56iX56iV56ii56iTXCJdLFxuW1wiZGY0MFwiLFwi56ib56iQ56qj56qi56qe56ur562m562k562t5620562p562y562l562z562x562w562h56245622562j57Ky57K057Kv57aI57aG57aA57aN57W/57aF57W657aO57W757aD57W857aM57aU57aE57W957aS572t572r572n572o572s576m576l576n57+b57+c6ICh6IWk6IWg6IW36IWc6IWp6IWb6IWi6IWy5pyh6IWe6IW26IWn6IWvXCJdLFxuW1wiZGZhMVwiLFwi6IWE6IWh6Iid6ImJ6ImE6ImA6ImC6ImF6JOx6JC/6JGW6JG26JG56JKP6JKN6JGl6JGR6JGA6JKG6JGn6JCw6JGN6JG96JGa6JGZ6JG06JGz6JGd6JSH6JGe6JC36JC66JC06JG66JGD6JG46JCy6JGF6JCp6I+Z6JGL6JCv6JGC6JCt6JGf6JGw6JC56JGO6JGM6JGS6JGv6JOF6JKO6JC76JGH6JC26JCz6JGo6JG+6JGE6JCr6JGg6JGU6JGu6JGQ6JyL6JyE6Ju36JyM6Ju66JuW6Ju16J2N6Ju46JyO6JyJ6JyB6Ju26JyN6JyF6KOW6KOL6KON6KOO6KOe6KOb6KOa6KOM6KOQ6KaF6Kab6Kef6Kel6KekXCJdLFxuW1wiZTA0MFwiLFwi6Keh6Keg6Kei6Kec6Kem6Km26KqG6Km/6Kmh6Ki/6Km36KqC6KqE6Km16KqD6KqB6Km06Km66LC86LGL6LGK6LGl6LGk6LGm6LKG6LKE6LKF6LOM6LWo6LWp6LaR6LaM6LaO6LaP6LaN6LaT6LaU6LaQ6LaS6Lew6Leg6Les6Lex6Leu6LeQ6Lep6Lej6Lei6Len6Ley6Ler6Le06LyG6Lu/6LyB6LyA6LyF6LyH6LyI6LyC6LyL6YGS6YC/XCJdLFxuW1wiZTBhMVwiLFwi6YGE6YGJ6YC96YSQ6YSN6YSP6YSR6YSW6YSU6YSL6YSO6YWu6YWv6YmI6YmS6Yiw6Yi66Ymm6Yiz6Yml6Yme6YqD6Yiu6YmK6YmG6Ymt6Yms6YmP6Ymg6Ymn6Ymv6Yi26Ymh6Ymw6Yix6YmU6Ymj6YmQ6Ymy6YmO6YmT6YmM6YmW6Yiy6Zaf6Zac6Zae6Zab6ZqS6ZqT6ZqR6ZqX6ZuO6Zu66Zu96Zu46Zu16Z2z6Z236Z246Z2y6aCP6aCN6aCO6aKs6aO26aO56aav6aay6aaw6aa16aqt6aqr6a2b6bOq6bOt6bOn6bqA6bu95YOm5YOU5YOX5YOo5YOz5YOb5YOq5YOd5YOk5YOT5YOs5YOw5YOv5YOj5YOgXCJdLFxuW1wiZTE0MFwiLFwi5YeY5YqA5YqB5Yup5Yur5Yyw5Y6s5Zin5ZiV5ZiM5ZiS5Ze85ZiP5Zic5ZiB5ZiT5ZiC5Ze65Zid5ZiE5Ze/5Ze55aKJ5aG85aKQ5aKY5aKG5aKB5aG/5aG05aKL5aG65aKH5aKR5aKO5aG25aKC5aKI5aG75aKU5aKP5aO+5aWr5auc5auu5aul5auV5auq5aua5aut5aur5auz5aui5aug5aub5aus5aue5aud5auZ5auo5auf5a235a+gXCJdLFxuW1wiZTFhMVwiLFwi5a+j5bGj5baC5baA5bW95baG5bW65baB5bW35baK5baJ5baI5bW+5bW85baN5bW55bW/5bmY5bmZ5bmT5buY5buR5buX5buO5buc5buV5buZ5buS5buU5b2E5b2D5b2v5b625oSs5oSo5oWB5oWe5oWx5oWz5oWS5oWT5oWy5oWs5oaA5oW05oWU5oW65oWb5oWl5oS75oWq5oWh5oWW5oip5oin5oir5pCr5pGN5pGb5pGd5pG05pG25pGy5pGz5pG95pG15pGm5pKm5pGO5pKC5pGe5pGc5pGL5pGT5pGg5pGQ5pG/5pC/5pGs5pGr5pGZ5pGl5pG35pWz5pag5pqh5pqg5pqf5pyF5pyE5pyi5qax5qa25qeJXCJdLFxuW1wiZTI0MFwiLFwi5qag5qeO5qaW5qaw5qas5qa85qaR5qaZ5qaO5qan5qaN5qap5qa+5qav5qa/5qeE5qa95qak5qeU5qa55qeK5qaa5qeP5qaz5qaT5qaq5qah5qae5qeZ5qaX5qaQ5qeC5qa15qal5qeG5q2K5q2N5q2L5q6e5q6f5q6g5q+D5q+E5q++5ruO5ru15rux5ryD5ryl5ru45ry35ru75ryu5ryJ5r2O5ryZ5rya5ryn5ryY5ry75ryS5rut5ryKXCJdLFxuW1wiZTJhMVwiLFwi5ry25r2z5ru55ruu5ryt5r2A5ryw5ry85ry15rur5ryH5ryO5r2D5ryF5ru95ru25ry55ryc5ru85ry65ryf5ryN5rye5ryI5ryh54aH54aQ54aJ54aA54aF54aC54aP54W754aG54aB54aX54mE54mT54qX54qV54qT542D542N542R542M55Gi55Gz55Gx55G155Gy55Gn55Gu55SA55SC55SD55W955aQ55iW55iI55iM55iV55iR55iK55iU55q4556B5528556F556C552u556A552v552+556D56Ky56Kq56K056Kt56Ko56G+56Kr56Ke56Kl56Kg56Ks56Ki56Kk56aY56aK56aL56aW56aV56aU56aTXCJdLFxuW1wiZTM0MFwiLFwi56aX56aI56aS56aQ56ir56mK56iw56iv56io56im56qo56qr56qs56uu566I566c566K566R566Q566W566N566M566b566O566F566Y5YqE566Z566k566C57K757K/57K857K657an57a357eC57aj57aq57eB57eA57eF57ad57eO57eE57eG57eL57eM57av57a557aW57a857af57am57au57ap57ah57eJ572z57+i57+j57+l57+eXCJdLFxuW1wiZTNhMVwiLFwi6ICk6IGd6IGc6IaJ6IaG6IaD6IaH6IaN6IaM6IaL6IiV6JKX6JKk6JKh6JKf6JK66JOO6JOC6JKs6JKu6JKr6JK56JK06JOB6JON6JKq6JKa6JKx6JOQ6JKd6JKn6JK76JKi6JKU6JOH6JOM6JKb6JKp6JKv6JKo6JOW6JKY6JK26JOP6JKg6JOX6JOU6JOS6JOb6JKw6JKR6Jmh6Jyz6Jyj6Jyo6J2r6J2A6Jyu6Jye6Jyh6JyZ6Jyb6J2D6Jys6J2B6Jy+6J2G6Jyg6Jyy6Jyq6Jyt6Jy86JyS6Jy66Jyx6Jy16J2C6Jym6Jyn6Jy46Jyk6Jya6Jyw6JyR6KO36KOn6KOx6KOy6KO66KO+6KOu6KO86KO26KO7XCJdLFxuW1wiZTQ0MFwiLFwi6KOw6KOs6KOr6Kad6Kah6Kaf6Kae6Kep6Ker6Keo6Kqr6KqZ6KqL6KqS6KqP6KqW6LC96LGo6LGp6LOV6LOP6LOX6LaW6LiJ6LiC6Le/6LiN6Le96LiK6LiD6LiH6LiG6LiF6Le+6LiA6LiE6LyQ6LyR6LyO6LyN6YSj6YSc6YSg6YSi6YSf6YSd6YSa6YSk6YSh6YSb6YW66YWy6YW56YWz6Yql6Yqk6Ym26Yqb6Ym66Yqg6YqU6Yqq6YqNXCJdLFxuW1wiZTRhMVwiLFwi6Yqm6Yqa6Yqr6Ym56YqX6Ym/6Yqj6Yuu6YqO6YqC6YqV6Yqi6Ym96YqI6Yqh6YqK6YqG6YqM6YqZ6Yqn6Ym+6YqH6Yqp6Yqd6YqL6Yit6Zqe6Zqh6Zu/6Z2Y6Z296Z266Z2+6Z6D6Z6A6Z6C6Z276Z6E6Z6B6Z2/6Z+O6Z+N6aCW6aKt6aKu6aSC6aSA6aSH6aad6aac6aeD6aa56aa76aa66aeC6aa96aeH6aqx6auj6aun6ay+6ay/6a2g6a2h6a2f6bOx6bOy6bO16bqn5YO/5YSD5YSw5YO45YSG5YSH5YO25YO+5YSL5YSM5YO95YSK5YqL5YqM5Yux5Yuv5ZmI5ZmC5ZmM5Zi15ZmB5ZmK5ZmJ5ZmG5ZmYXCJdLFxuW1wiZTU0MFwiLFwi5Zma5ZmA5Ziz5Zi95Zis5Zi+5Zi45Ziq5Zi65Zya5aKr5aKd5aKx5aKg5aKj5aKv5aKs5aKl5aKh5aO/5au/5au05au95au35au25ayD5au45ayC5au55ayB5ayH5ayF5ayP5bGn5baZ5baX5baf5baS5bai5baT5baV5bag5bac5bah5baa5bae5bmp5bmd5bmg5bmc57ez5bub5bue5buh5b2J5b6y5oaL5oaD5oW55oax5oaw5oai5oaJXCJdLFxuW1wiZTVhMVwiLFwi5oab5oaT5oav5oat5oaf5oaS5oaq5oah5oaN5oWm5oaz5oit5pGu5pGw5pKW5pKg5pKF5pKX5pKc5pKP5pKL5pKK5pKM5pKj5pKf5pGo5pKx5pKY5pW25pW65pW55pW75pay5paz5pq15pqw5pqp5pqy5pq35pqq5pqv5qiA5qiG5qiX5qel5qe45qiV5qex5qek5qig5qe/5qes5qei5qib5qid5qe+5qin5qey5qeu5qiU5qe35qen5qmA5qiI5qem5qe75qiN5qe85qer5qiJ5qiE5qiY5qil5qiP5qe25qim5qiH5qe05qiW5q2R5q6l5q6j5q6i5q6m5rCB5rCA5q+/5rCC5r2B5rym5r2+5r6H5r+G5r6SXCJdLFxuW1wiZTY0MFwiLFwi5r6N5r6J5r6M5r2i5r2P5r6F5r2a5r6W5r225r2s5r6C5r2V5r2y5r2S5r2Q5r2X5r6U5r6T5r2d5ryA5r2h5r2r5r295r2n5r6Q5r2T5r6L5r2p5r2/5r6V5r2j5r235r2q5r2754ay54av54ab54aw54ag54aa54ap54a154ad54al54ae54ak54ah54aq54ac54an54az54qY54qa542Y542S542e542f542g542d542b542h542a542ZXCJdLFxuW1wiZTZhMVwiLFwi542i55KH55KJ55KK55KG55KB55G955KF55KI55G855G555SI55SH55W+55il55ie55iZ55id55ic55ij55ia55io55ib55qc55qd55qe55qb556N556P556J556I56ON56K756OP56OM56OR56OO56OU56OI56OD56OE56OJ56aa56ah56ag56ac56ai56ab5q2256i556qy56q056qz566356+L566+566s56+O566v566556+K566157OF57OI57OM57OL57e357eb57eq57en57eX57eh57iD57e657em57e257ex57ew57eu57ef5722576s576w576t57+t57+r57+q57+s57+m57+o6IGk6IGn6Iaj6IafXCJdLFxuW1wiZTc0MFwiLFwi6Iae6IaV6Iai6IaZ6IaX6IiW6ImP6ImT6ImS6ImQ6ImO6ImR6JSk6JS76JSP6JSA6JSp6JSO6JSJ6JSN6JSf6JSK6JSn6JSc6JO76JSr6JO66JSI6JSM6JO06JSq6JOy6JSV6JO36JOr6JOz6JO86JSS6JOq6JOp6JSW6JO+6JSo6JSd6JSu6JSC6JO96JSe6JO26JSx6JSm6JOn6JOo6JOw6JOv6JO56JSY6JSg6JSw6JSL6JSZ6JSv6JmiXCJdLFxuW1wiZTdhMVwiLFwi6J2W6J2j6J2k6J236J+h6J2z6J2Y6J2U6J2b6J2S6J2h6J2a6J2R6J2e6J2t6J2q6J2Q6J2O6J2f6J2d6J2v6J2s6J266J2u6J2c6J2l6J2P6J276J216J2i6J2n6J2p6KGa6KSF6KSM6KSU6KSL6KSX6KSY6KSZ6KSG6KSW6KSR6KSO6KSJ6Kai6Kak6Kaj6Ket6Kew6Kes6KuP6KuG6Kq46KuT6KuR6KuU6KuV6Kq76KuX6Kq+6KuA6KuF6KuY6KuD6Kq66Kq96KuZ6LC+6LGN6LKP6LOl6LOf6LOZ6LOo6LOa6LOd6LOn6Lag6Lac6Lah6Lab6Lig6Lij6Lil6Lik6Liu6LiV6Lib6LiW6LiR6LiZ6Lim6LinXCJdLFxuW1wiZTg0MFwiLFwi6LiU6LiS6LiY6LiT6Lic6LiX6Lia6Lys6Lyk6LyY6Lya6Lyg6Lyj6LyW6LyX6YGz6YGw6YGv6YGn6YGr6YSv6YSr6YSp6YSq6YSy6YSm6YSu6YaF6YaG6YaK6YaB6YaC6YaE6YaA6YuQ6YuD6YuE6YuA6YuZ6Yq26YuP6Yux6Yuf6YuY6Yup6YuX6Yud6YuM6Yuv6YuC6Yuo6YuK6YuI6YuO6Yum6YuN6YuV6YuJ6Yug6Yue6Yun6YuR6YuTXCJdLFxuW1wiZThhMVwiLFwi6Yq16Yuh6YuG6Yq06ZW86Zas6Zar6Zau6Zaw6Zqk6Zqi6ZuT6ZyF6ZyI6ZyC6Z2a6Z6K6Z6O6Z6I6Z+Q6Z+P6aCe6aCd6aCm6aCp6aCo6aCg6aCb6aCn6aKy6aSI6aO66aSR6aSU6aSW6aSX6aSV6aec6aeN6aeP6aeT6aeU6aeO6aeJ6aeW6aeY6aeL6aeX6aeM6aqz6aus6aur6auz6auy6aux6a2G6a2D6a2n6a206a2x6a2m6a226a216a2w6a2o6a2k6a2s6bO86bO66bO96bO/6bO36bSH6bSA6bO56bO76bSI6bSF6bSE6bqD6buT6byP6byQ5YSc5YST5YSX5YSa5YSR5Yee5Yy05Y+h5Zmw5Zmg5ZmuXCJdLFxuW1wiZTk0MFwiLFwi5Zmz5Zmm5Zmj5Zmt5Zmy5Zme5Zm35Zyc5Zyb5aOI5aK95aOJ5aK/5aK65aOC5aK85aOG5ayX5ayZ5ayb5ayh5ayU5ayT5ayQ5ayW5ayo5aya5ayg5aye5a+v5bas5bax5bap5ban5ba15baw5bau5baq5bao5bay5bat5bav5ba05bmn5bmo5bmm5bmv5bup5bun5bum5buo5bul5b2L5b685oad5oao5oaW5oeF5oa05oeG5oeB5oeM5oa6XCJdLFxuW1wiZTlhMVwiLFwi5oa/5oa45oaM5pOX5pOW5pOQ5pOP5pOJ5pK95pKJ5pOD5pOb5pOz5pOZ5pSz5pW/5pW85pai5puI5pq+5puA5puK5puL5puP5pq95pq75pq65puM5pyj5qi05qmm5qmJ5qmn5qiy5qmo5qi+5qmd5qmt5qm25qmb5qmR5qio5qma5qi75qi/5qmB5qmq5qmk5qmQ5qmP5qmU5qmv5qmp5qmg5qi85qme5qmW5qmV5qmN5qmO5qmG5q2V5q2U5q2W5q6n5q6q5q6r5q+I5q+H5rCE5rCD5rCG5r6t5r+L5r6j5r+H5r685r+O5r+I5r2e5r+E5r695r6e5r+K5r6o54CE5r6l5r6u5r665r6s5r6q5r+P5r6/5r64XCJdLFxuW1wiZWE0MFwiLFwi5r6i5r+J5r6r5r+N5r6v5r6y5r6w54eF54eC54a/54a454eW54eA54eB54eL54eU54eK54eH54eP54a954eY54a854eG54ea54eb54qd54qe542p542m542n542s542l542r542q55G/55Ka55Kg55KU55KS55KV55Kh55SL55aA55iv55it55ix55i955iz55i855i155iy55iw55q755um556a556d556h556c556b556i556j556V556ZXCJdLFxuW1wiZWFhMVwiLFwi556X56Od56Op56Ol56Oq56Oe56Oj56Ob56Oh56Oi56Ot56Of56Og56ak56mE56mI56mH56q256q456q156qx56q356+e56+j56+n56+d56+V56+l56+a56+o56+556+U56+q56+i56+c56+r56+Y56+f57OS57OU57OX57OQ57OR57iS57ih57iX57iM57if57ig57iT57iO57ic57iV57ia57ii57iL57iP57iW57iN57iU57il57ik572D572757285726576x57+v6ICq6ICp6IGs6Iax6Iam6Iau6Ia56Ia16Iar6Iaw6Ias6Ia06Iay6Ia36Ian6Iey6ImV6ImW6ImX6JWW6JWF6JWr6JWN6JWT6JWh6JWYXCJdLFxuW1wiZWI0MFwiLFwi6JWA6JWG6JWk6JWB6JWi6JWE6JWR6JWH6JWj6JS+6JWb6JWx6JWO6JWu6JW16JWV6JWn6JWg6JaM6JWm6JWd6JWU6JWl6JWs6Jmj6Jml6Jmk6J6b6J6P6J6X6J6T6J6S6J6I6J6B6J6W6J6Y6J256J6H6J6j6J6F6J6Q6J6R6J6d6J6E6J6U6J6c6J6a6J6J6KSe6KSm6KSw6KSt6KSu6KSn6KSx6KSi6KSp6KSj6KSv6KSs6KSf6Kex6KugXCJdLFxuW1wiZWJhMVwiLFwi6Kui6Kuy6Ku06Ku16Kud6KyU6Kuk6Kuf6Kuw6KuI6Kue6Kuh6Kuo6Ku/6Kuv6Ku76LKR6LKS6LKQ6LO16LOu6LOx6LOw6LOz6LWs6LWu6Lal6Lan6Liz6Li+6Li46LmA6LmF6Li26Li86Li96LmB6Liw6Li/6Lq96Ly26Lyu6Ly16Lyy6Ly56Ly36Ly06YG26YG56YG76YKG6YO66YSz6YS16YS26YaT6YaQ6YaR6YaN6YaP6Yyn6Yye6YyI6Yyf6YyG6YyP6Y266Yy46Yy86Yyb6Yyj6YyS6YyB6Y2G6Yyt6YyO6YyN6YuL6Yyd6Yu66Yyl6YyT6Yu56Yu36Yy06YyC6Yyk6Yu/6Yyp6Yy56Yy16Yyq6YyU6YyMXCJdLFxuW1wiZWM0MFwiLFwi6YyL6Yu+6YyJ6YyA6Yu76YyW6Za86ZeN6Za+6Za56Za66Za26Za/6Za16Za96Zqp6ZuU6ZyL6ZyS6ZyQ6Z6Z6Z6X6Z6U6Z+w6Z+46aC16aCv6aCy6aSk6aSf6aSn6aSp6aae6aeu6aes6ael6aek6aew6aej6aeq6aep6aen6aq56aq/6aq06aq76au26au66au56au36ayz6a6A6a6F6a6H6a286a2+6a276a6C6a6T6a6S6a6Q6a266a6VXCJdLFxuW1wiZWNhMVwiLFwi6a296a6I6bSl6bSX6bSg6bSe6bSU6bSp6bSd6bSY6bSi6bSQ6bSZ6bSf6bqI6bqG6bqH6bqu6bqt6buV6buW6bu66byS6by95YSm5YSl5YSi5YSk5YSg5YSp5Yu05ZqT5ZqM5ZqN5ZqG5ZqE5ZqD5Zm+5ZqC5Zm/5ZqB5aOW5aOU5aOP5aOS5ayt5ayl5ayy5ayj5ays5ayn5aym5ayv5ayu5a275a+x5a+y5ba35bms5bmq5b6+5b675oeD5oa15oa85oen5oeg5oel5oek5oeo5oee5pOv5pOp5pOj5pOr5pOk5pOo5paB5paA5pa25pea5puS5qqN5qqW5qqB5qql5qqJ5qqf5qqb5qqh5qqe5qqH5qqT5qqOXCJdLFxuW1wiZWQ0MFwiLFwi5qqV5qqD5qqo5qqk5qqR5qm/5qqm5qqa5qqF5qqM5qqS5q2b5q6t5rCJ5r+M5r6p5r+05r+U5r+j5r+c5r+t5r+n5r+m5r+e5r+y5r+d5r+i5r+o54eh54ex54eo54ey54ek54ew54ei542z542u542v55KX55Ky55Kr55KQ55Kq55Kt55Kx55Kl55Kv55SQ55SR55SS55SP55aE55mD55mI55mJ55mH55qk55up5561556r556y55635562XCJdLFxuW1wiZWRhMVwiLFwi5560556x556o55+w56Oz56O956SC56O756O856Oy56SF56O556O+56SE56ar56ao56mc56mb56mW56mY56mU56ma56q+56uA56uB57CF57CP56+y57CA56+/56+757CO56+057CL56+z57CC57CJ57CD57CB56+456+957CG56+w56+x57CQ57CK57Oo57it57i857mC57iz6aGI57i457iq57mJ57mA57mH57ip57mM57iw57i757i257mE57i6572F572/572+572957+057+y6ICs6Ia76IeE6IeM6IeK6IeF6IeH6Ia86Iep6Imb6Ima6Imc6JaD6JaA6JaP6Jan6JaV6Jag6JaL6Jaj6JW76Jak6Jaa6JaeXCJdLFxuW1wiZWU0MFwiLFwi6JW36JW86JaJ6Jah6JW66JW46JWX6JaO6JaW6JaG6JaN6JaZ6Jad6JaB6Jai6JaC6JaI6JaF6JW56JW26JaY6JaQ6Jaf6Jmo6J6+6J6q6J6t6J+F6J6w6J6s6J656J616J686J6u6J+J6J+D6J+C6J+M6J636J6v6J+E6J+K6J606J626J6/6J646J696J+e6J6y6KS16KSz6KS86KS+6KWB6KWS6KS36KWC6Kat6Kav6Kau6Key6Kez6KyeXCJdLFxuW1wiZWVhMVwiLFwi6KyY6KyW6KyR6KyF6KyL6Kyi6KyP6KyS6KyV6KyH6KyN6KyI6KyG6Kyc6KyT6Kya6LGP6LGw6LGy6LGx6LGv6LKV6LKU6LO56LWv6LmO6LmN6LmT6LmQ6LmM6LmH6L2D6L2A6YKF6YG+6YS46Yaa6Yai6Yab6YaZ6Yaf6Yah6Yad6Yag6Y6h6Y6D6Y6v6Y2k6Y2W6Y2H6Y286Y2Y6Y2c6Y226Y2J6Y2Q6Y2R6Y2g6Y2t6Y6P6Y2M6Y2q6Y256Y2X6Y2V6Y2S6Y2P6Y2x6Y236Y276Y2h6Y2e6Y2j6Y2n6Y6A6Y2O6Y2Z6ZeH6ZeA6ZeJ6ZeD6ZeF6Za36Zqu6Zqw6Zqs6Zyg6Zyf6ZyY6Zyd6ZyZ6Z6a6Z6h6Z6cXCJdLFxuW1wiZWY0MFwiLFwi6Z6e6Z6d6Z+V6Z+U6Z+x6aGB6aGE6aGK6aGJ6aGF6aGD6aSl6aSr6aSs6aSq6aSz6aSy6aSv6aSt6aSx6aSw6aaY6aaj6aah6aiC6ae66ae06ae36ae56ae46ae26ae76ae96ae+6ae86aiD6aq+6au+6au96ayB6au86a2I6a6a6a6o6a6e6a6b6a6m6a6h6a6l6a6k6a6G6a6i6a6g6a6v6bSz6bWB6bWn6bS26bSu6bSv6bSx6bS46bSwXCJdLFxuW1wiZWZhMVwiLFwi6bWF6bWC6bWD6bS+6bS36bWA6bS957+16bSt6bqK6bqJ6bqN6bqw6buI6bua6bu76bu/6byk6byj6byi6b2U6b6g5YSx5YSt5YSu5ZqY5Zqc5ZqX5Zqa5Zqd5ZqZ5aWw5ay85bGp5bGq5beA5bmt5bmu5oeY5oef5oet5oeu5oex5oeq5oew5oer5oeW5oep5pO/5pSE5pO95pO45pSB5pSD5pO85paU5peb5pua5pub5puY5quF5qq55qq95quh5quG5qq65qq25qq35quH5qq05qqt5q2e5q+J5rCL54CH54CM54CN54CB54CF54CU54CO5r+/54CA5r+754Cm5r+85r+354CK54iB54e/54e554iD54e95422XCJdLFxuW1wiZjA0MFwiLFwi55K455OA55K155OB55K+55K255K755OC55SU55ST55mc55mk55mZ55mQ55mT55mX55ma55qm55q955us55+C556656O/56SM56ST56SU56SJ56SQ56SS56SR56at56as56mf57Cc57Cp57CZ57Cg57Cf57Ct57Cd57Cm57Co57Ci57Cl57Cw57mc57mQ57mW57mj57mY57mi57mf57mR57mg57mX57mT5761576z57+357+46IG16IeR6IeSXCJdLFxuW1wiZjBhMVwiLFwi6IeQ6Imf6Ime6Ja06JeG6JeA6JeD6JeC6Jaz6Ja16Ja96JeH6JeE6Ja/6JeL6JeO6JeI6JeF6Jax6Ja26JeS6Jik6Ja46Ja36Ja+6Jmp6J+n6J+m6J+i6J+b6J+r6J+q6J+l6J+f6J+z6J+k6J+U6J+c6J+T6J+t6J+Y6J+j6J6k6J+X6J+Z6KCB6J+06J+o6J+d6KWT6KWL6KWP6KWM6KWG6KWQ6KWR6KWJ6Kyq6Kyn6Kyj6Kyz6Kyw6Ky16K2H6Kyv6Ky86Ky+6Kyx6Kyl6Ky36Kym6Ky26Kyu6Kyk6Ky76Ky96Ky66LGC6LG16LKZ6LKY6LKX6LO+6LSE6LSC6LSA6Lmc6Lmi6Lmg6LmX6LmW6Lme6Lml6LmnXCJdLFxuW1wiZjE0MFwiLFwi6Lmb6Lma6Lmh6Lmd6Lmp6LmU6L2G6L2H6L2I6L2L6YSo6YS66YS76YS+6Yao6Yal6Yan6Yav6Yaq6Y616Y6M6Y6S6Y636Y6b6Y6d6Y6J6Y6n6Y6O6Y6q6Y6e6Y6m6Y6V6Y6I6Y6Z6Y6f6Y6N6Y6x6Y6R6Y6y6Y6k6Y6o6Y606Y6j6Y6l6ZeS6ZeT6ZeR6Zqz6ZuX6Zua5beC6Zuf6ZuY6Zud6Zyj6Zyi6Zyl6Z6s6Z6u6Z6o6Z6r6Z6k6Z6qXCJdLFxuW1wiZjFhMVwiLFwi6Z6i6Z6l6Z+X6Z+Z6Z+W6Z+Y6Z+66aGQ6aGR6aGS6aK46aWB6aS86aS66aiP6aiL6aiJ6aiN6aiE6aiR6aiK6aiF6aiH6aiG6auA6auc6ayI6ayE6ayF6ayp6ay16a2K6a2M6a2L6a+H6a+G6a+D6a6/6a+B6a616a646a+T6a626a+E6a656a696bWc6bWT6bWP6bWK6bWb6bWL6bWZ6bWW6bWM6bWX6bWS6bWU6bWf6bWY6bWa6bqO6bqM6buf6byB6byA6byW6byl6byr6byq6byp6byo6b2M6b2V5YS05YS15YqW5Yu35Y605Zqr5Zqt5Zqm5Zqn5Zqq5Zqs5aOa5aOd5aOb5aSS5ay95ay+5ay/5beD5bmwXCJdLFxuW1wiZjI0MFwiLFwi5b6/5oe75pSH5pSQ5pSN5pSJ5pSM5pSO5paE5pee5ped5pue5qun5qug5quM5quR5quZ5quL5quf5quc5quQ5qur5quP5quN5que5q2g5q6w5rCM54CZ54Cn54Cg54CW54Cr54Ch54Ci54Cj54Cp54CX54Ck54Cc54Cq54iM54iK54iH54iC54iF54ql54qm54qk54qj54qh55OL55OF55K355OD55SW55mg55+J55+K55+E55+x56Sd56SbXCJdLFxuW1wiZjJhMVwiLFwi56Sh56Sc56SX56Se56aw56mn56mo57Cz57C857C557Cs57C757Os57Oq57m257m157m457mw57m357mv57m657my57m057mo572L572K576D576G576357+957++6IG46IeX6IeV6Imk6Imh6Imj6Jer6Jex6Jet6JeZ6Jeh6Jeo6Jea6JeX6Jes6Jey6Je46JeY6Jef6Jej6Jec6JeR6Jew6Jem6Jev6Jee6Jei6KCA6J+66KCD6J+26J+36KCJ6KCM6KCL6KCG6J+86KCI6J+/6KCK6KCC6KWi6KWa6KWb6KWX6KWh6KWc6KWY6KWd6KWZ6KaI6Ka36Ka26Ke26K2Q6K2I6K2K6K2A6K2T6K2W6K2U6K2L6K2VXCJdLFxuW1wiZjM0MFwiLFwi6K2R6K2C6K2S6K2X6LGD6LG36LG26LKa6LSG6LSH6LSJ6Las6Laq6Lat6Lar6Lmt6Lm46Lmz6Lmq6Lmv6Lm76LuC6L2S6L2R6L2P6L2Q6L2T6L606YWA6YS/6Yaw6Yat6Y+e6Y+H6Y+P6Y+C6Y+a6Y+Q6Y+56Y+s6Y+M6Y+Z6Y6p6Y+m6Y+K6Y+U6Y+u6Y+j6Y+V6Y+E6Y+O6Y+A6Y+S6Y+n6ZW96Zea6Zeb6Zuh6Zyp6Zyr6Zys6Zyo6ZymXCJdLFxuW1wiZjNhMVwiLFwi6Z6z6Z636Z626Z+d6Z+e6Z+f6aGc6aGZ6aGd6aGX6aK/6aK96aK76aK+6aWI6aWH6aWD6aam6aan6aia6aiV6ail6aid6aik6aib6aii6aig6ain6aij6aie6aic6aiU6auC6ayL6ayK6ayO6ayM6ay36a+q6a+r6a+g6a+e6a+k6a+m6a+i6a+w6a+U6a+X6a+s6a+c6a+Z6a+l6a+V6a+h6a+a6bW36baB6baK6baE6baI6bWx6baA6bW46baG6baL6baM6bW96bWr6bW06bW16bWw6bWp6baF6bWz6bW76baC6bWv6bW56bW/6baH6bWo6bqU6bqR6buA6bu86byt6b2A6b2B6b2N6b2W6b2X6b2Y5Yy35ZqyXCJdLFxuW1wiZjQ0MFwiLFwi5Zq15Zqz5aOj5a2F5beG5beH5buu5buv5b+A5b+B5oe55pSX5pSW5pSV5pST5pef5puo5puj5puk5quz5quw5quq5quo5qu55qux5quu5quv54C854C154Cv54C354C054Cx54GC54C454C/54C654C554GA54C754Cz54GB54iT54iU54qo5429542855K655qr55qq55q+55ut55+M55+O55+P55+N55+y56Sl56Sj56Sn56So56Sk56SpXCJdLFxuW1wiZjRhMVwiLFwi56ay56mu56ms56mt56u357GJ57GI57GK57GH57GF57Ou57m757m+57qB57qA576657+/6IG56Ieb6IeZ6IiL6Imo6Imp6Jii6Je/6JiB6Je+6Jib6JiA6Je26JiE6JiJ6JiF6JiM6Je96KCZ6KCQ6KCR6KCX6KCT6KCW6KWj6KWm6Ka56Ke36K2g6K2q6K2d6K2o6K2j6K2l6K2n6K2t6Lau6LqG6LqI6LqE6L2Z6L2W6L2X6L2V6L2Y6L2a6YKN6YWD6YWB6Ya36Ya16Yay6Yaz6ZCL6ZCT6Y+76ZCg6ZCP6ZCU6Y++6ZCV6ZCQ6ZCo6ZCZ6ZCN6Y+16ZCA6Y+36ZCH6ZCO6ZCW6ZCS6Y+66ZCJ6Y+46ZCK6Y+/XCJdLFxuW1wiZjU0MFwiLFwi6Y+86ZCM6Y+26ZCR6ZCG6Zee6Zeg6Zef6Zyu6Zyv6Z656Z676Z+96Z++6aGg6aGi6aGj6aGf6aOB6aOC6aWQ6aWO6aWZ6aWM6aWL6aWT6aiy6ai06aix6ais6aiq6ai26aip6aiu6ai46ait6auH6auK6auG6ayQ6ayS6ayR6bCL6bCI6a+36bCF6bCS6a+46bGA6bCH6bCO6bCG6bCX6bCU6bCJ6baf6baZ6bak6bad6baS6baY6baQ6babXCJdLFxuW1wiZjVhMVwiLFwi6bag6baU6bac6baq6baX6bah6baa6bai6bao6bae6baj6ba/6bap6baW6bam6ban6bqZ6bqb6bqa6bul6buk6bun6bum6byw6byu6b2b6b2g6b2e6b2d6b2Z6b6R5YS65YS55YqY5YqX5ZuD5Zq95Zq+5a2I5a2H5beL5beP5bux5oe95pSb5qyC5qu85qyD5qu45qyA54GD54GE54GK54GI54GJ54GF54GG54id54ia54iZ542+55SX55mq55+Q56St56Sx56Sv57GU57GT57Oy57qK57qH57qI57qL57qG57qN572N57676ICw6Ied6JiY6Jiq6Jim6Jif6Jij6Jic6JiZ6Jin6Jiu6Jih6Jig6Jip6Jie6JilXCJdLFxuW1wiZjY0MFwiLFwi6KCp6KCd6KCb6KCg6KCk6KCc6KCr6KGK6KWt6KWp6KWu6KWr6Ke66K256K246K2F6K266K276LSQ6LSU6Lav6LqO6LqM6L2e6L2b6L2d6YWG6YWE6YWF6Ya56ZC/6ZC76ZC26ZCp6ZC96ZC86ZCw6ZC56ZCq6ZC36ZCs6ZGA6ZCx6Zel6Zek6Zej6Zy16Zy66Z6/6Z+h6aGk6aOJ6aOG6aOA6aWY6aWW6ai56ai96amG6amE6amC6amB6ai6XCJdLFxuW1wiZjZhMVwiLFwi6ai/6auN6ayV6ayX6ayY6ayW6ay66a2S6bCr6bCd6bCc6bCs6bCj6bCo6bCp6bCk6bCh6ba36ba26ba86beB6beH6beK6beP6ba+6beF6beD6ba76ba16beO6ba56ba66bas6beI6bax6bat6beM6baz6beN6bay6bm66bqc6bur6buu6but6byb6byY6bya6byx6b2O6b2l6b2k6b6S5Lq55ZuG5ZuF5ZuL5aWx5a2L5a2M5beV5beR5buy5pSh5pSg5pSm5pSi5qyL5qyI5qyJ5rCN54GV54GW54GX54GS54ie54if54qp542/55OY55OV55OZ55OX55mt55qt56S156a056mw56mx57GX57Gc57GZ57Gb57GaXCJdLFxuW1wiZjc0MFwiLFwi57O057Ox57qR572P576H6Iee6Imr6Ji06Ji16Jiz6Jis6Jiy6Ji26KCs6KCo6KCm6KCq6KCl6KWx6Ka/6Ka+6Ke76K2+6K6E6K6C6K6G6K6F6K2/6LSV6LqV6LqU6Lqa6LqS6LqQ6LqW6LqX6L2g6L2i6YWH6ZGM6ZGQ6ZGK6ZGL6ZGP6ZGH6ZGF6ZGI6ZGJ6ZGG6Zy/6Z+j6aGq6aGp6aOL6aWU6aWb6amO6amT6amU6amM6amP6amI6amKXCJdLFxuW1wiZjdhMVwiLFwi6amJ6amS6amQ6auQ6ayZ6ayr6ay76a2W6a2V6bGG6bGI6bC/6bGE6bC56bCz6bGB6bC86bC36bC06bCy6bC96bC26beb6beS6bee6bea6beL6beQ6bec6beR6bef6bep6beZ6beY6beW6be16beV6bed6bq26buw6by16byz6byy6b2C6b2r6b6V6b6i5YS95YqZ5aOo5aOn5aWy5a2N5beY6KCv5b2P5oiB5oiD5oiE5pSp5pSl5paW5pur5qyR5qyS5qyP5q+K54Gb54Ga54ii546C546B546D55mw55+U57Gn57Gm57qV6Ims6Ji66JmA6Ji56Ji86Jix6Ji76Ji+6KCw6KCy6KCu6KCz6KW26KW06KWz6Ke+XCJdLFxuW1wiZjg0MFwiLFwi6K6M6K6O6K6L6K6I6LGF6LSZ6LqY6L2k6L2j6Ya86ZGi6ZGV6ZGd6ZGX6ZGe6Z+E6Z+F6aCA6amW6amZ6aye6ayf6ayg6bGS6bGY6bGQ6bGK6bGN6bGL6bGV6bGZ6bGM6bGO6be76be36bev6bej6ber6be46bek6be26beh6beu6bem6bey6bew6bei6bes6be06bez6beo6bet6buC6buQ6buy6buz6byG6byc6by46by36by26b2D6b2PXCJdLFxuW1wiZjhhMVwiLFwi6b2x6b2w6b2u6b2v5ZuT5ZuN5a2O5bGt5pSt5put5puu5qyT54Gf54Gh54Gd54Gg54ij55Ob55Ol55+V56S456a356a257Gq57qX576J6Imt6JmD6KC46KC36KC16KGL6K6U6K6V6Lqe6Lqf6Lqg6Lqd6Ya+6Ya96YeC6ZGr6ZGo6ZGp6Zul6Z2G6Z2D6Z2H6Z+H6Z+l6ame6auV6a2Z6bGj6bGn6bGm6bGi6bGe6bGg6biC6be+6biH6biD6biG6biF6biA6biB6biJ6be/6be96biE6bqg6bye6b2G6b206b216b225ZuU5pSu5pa45qyY5qyZ5qyX5qya54Gi54im54qq55+Y55+Z56S557Gp57Gr57O257qaXCJdLFxuW1wiZjk0MFwiLFwi57qY57qb57qZ6Ieg6Ieh6JmG6JmH6JmI6KW56KW66KW86KW76Ke/6K6Y6K6Z6Lql6Lqk6Lqj6ZGu6ZGt6ZGv6ZGx6ZGz6Z2J6aGy6aWf6bGo6bGu6bGt6biL6biN6biQ6biP6biS6biR6bqh6bu16byJ6b2H6b246b276b266b255Zye54Gm57Gv6KC86Lay6Lqm6YeD6ZG06ZG46ZG26ZG16amg6bG06bGz6bGx6bG16biU6biT6bu26byKXCJdLFxuW1wiZjlhMVwiLFwi6b6k54Go54Gl57O36Jmq6KC+6KC96KC/6K6e6LKc6Lqp6LuJ6Z2L6aGz6aG06aOM6aWh6aar6amk6amm6amn6ayk6biV6biX6b2I5oiH5qye54in6JmM6Lqo6ZKC6ZKA6ZKB6amp6amo6ayu6biZ54ip6JmL6K6f6ZKD6bG56bq355m16amr6bG66bid54Gp54Gq6bqk6b2+6b2J6b6Y56KB6Yq56KOP5aK75oGS57Kn5au64pWU4pWm4pWX4pWg4pWs4pWj4pWa4pWp4pWd4pWS4pWk4pWV4pWe4pWq4pWh4pWY4pWn4pWb4pWT4pWl4pWW4pWf4pWr4pWi4pWZ4pWo4pWc4pWR4pWQ4pWt4pWu4pWw4pWv4paTXCJdXG5dXG4iLCJtb2R1bGUuZXhwb3J0cz1bXG5bXCIwXCIsXCJcXHUwMDAwXCIsMTI3XSxcbltcIjhlYTFcIixcIu+9oVwiLDYyXSxcbltcImExYTFcIixcIuOAgOOAgeOAgu+8jO+8juODu++8mu+8m++8n++8geOCm+OCnMK0772AwqjvvL7vv6PvvL/jg73jg77jgp3jgp7jgIPku53jgIXjgIbjgIfjg7zigJXigJDvvI/vvLzvvZ7iiKXvvZzigKbigKXigJjigJnigJzigJ3vvIjvvInjgJTjgJXvvLvvvL3vvZvvvZ3jgIhcIiw5LFwi77yL77yNwrHDl8O377yd4omg77yc77ye4omm4omn4oie4oi04pmC4pmAwrDigLLigLPihIPvv6XvvITvv6Dvv6HvvIXvvIPvvIbvvIrvvKDCp+KYhuKYheKXi+KXj+KXjuKXh1wiXSxcbltcImEyYTFcIixcIuKXhuKWoeKWoOKWs+KWsuKWveKWvOKAu+OAkuKGkuKGkOKGkeKGk+OAk1wiXSxcbltcImEyYmFcIixcIuKIiOKIi+KKhuKKh+KKguKKg+KIquKIqVwiXSxcbltcImEyY2FcIixcIuKIp+KIqO+/ouKHkuKHlOKIgOKIg1wiXSxcbltcImEyZGNcIixcIuKIoOKKpeKMkuKIguKIh+KJoeKJkuKJquKJq+KImuKIveKIneKIteKIq+KIrFwiXSxcbltcImEyZjJcIixcIuKEq+KAsOKZr+KZreKZquKAoOKAocK2XCJdLFxuW1wiYTJmZVwiLFwi4pevXCJdLFxuW1wiYTNiMFwiLFwi77yQXCIsOV0sXG5bXCJhM2MxXCIsXCLvvKFcIiwyNV0sXG5bXCJhM2UxXCIsXCLvvYFcIiwyNV0sXG5bXCJhNGExXCIsXCLjgYFcIiw4Ml0sXG5bXCJhNWExXCIsXCLjgqFcIiw4NV0sXG5bXCJhNmExXCIsXCLOkVwiLDE2LFwizqNcIiw2XSxcbltcImE2YzFcIixcIs6xXCIsMTYsXCLPg1wiLDZdLFxuW1wiYTdhMVwiLFwi0JBcIiw1LFwi0IHQllwiLDI1XSxcbltcImE3ZDFcIixcItCwXCIsNSxcItGR0LZcIiwyNV0sXG5bXCJhOGExXCIsXCLilIDilILilIzilJDilJjilJTilJzilKzilKTilLTilLzilIHilIPilI/ilJPilJvilJfilKPilLPilKvilLvilYvilKDilK/ilKjilLfilL/ilJ3ilLDilKXilLjilYJcIl0sXG5bXCJhZGExXCIsXCLikaBcIiwxOSxcIuKFoFwiLDldLFxuW1wiYWRjMFwiLFwi442J44yU44yi442N44yY44yn44yD44y2442R442X44yN44ym44yj44yr442K44y7446c446d446e446O446P44+E446hXCJdLFxuW1wiYWRkZlwiLFwi442744Cd44Cf4oSW44+N4oSh44qkXCIsNCxcIuOIseOIsuOIueONvuONveONvOKJkuKJoeKIq+KIruKIkeKImuKKpeKIoOKIn+KKv+KIteKIqeKIqlwiXSxcbltcImIwYTFcIixcIuS6nOWUluWog+mYv+WTgOaEm+aMqOWntumAouiRteiMnOepkOaCquaPoea4peaXreiRpuiKpumvteaik+Wcp+aWoeaJseWum+WnkOiZu+mjtOe1oue2vumujuaIlueyn+iit+WuieW6teaMieaal+ahiOmXh+mejeadj+S7peS8iuS9jeS+neWBieWbsuWkt+WnlOWogeWwieaDn+aEj+aFsOaYk+akheeCuueVj+eVsOenu+e2ree3r+iDg+iQjuiho+isgumBlemBuuWMu+S6leS6peWfn+iCsumDgeejr+S4gOWjsea6oumAuOeosuiMqOiKi+mwr+WFgeWNsOWSveWToeWboOWnu+W8lemjsua3q+iDpOiUrVwiXSxcbltcImIxYTFcIixcIumZoumZsOmaoOmfu+WQi+WPs+Wuh+eDj+e+vei/gumbqOWNr+m1nOequuS4keeik+iHvOa4puWYmOWUhOasneiUmumwu+WnpeWOqea1pueTnOmWj+WZguS6kemBi+mbsuiNj+mkjOWPoeWWtuWssOW9seaYoOabs+aghOawuOazs+a0qeeRm+ebiOepjumgtOiLseihm+ipoOmLrea2sueWq+ebiumnheaCpuisgei2iumWsuamjuWOreWGhuWckuWgsOWlhOWutOW7tuaAqOaOqeaPtOayv+a8lOeCjueElOeFmeeHleeMv+e4geiJtuiLkeiWl+mBoOmJm+m0m+WhqeaWvOaxmueUpeWHueWkruWlpeW+gOW/nFwiXSxcbltcImIyYTFcIixcIuaKvOaXuuaoquasp+autOeOi+e/geillum0rOm0jum7hOWyoeayluiNu+WEhOWxi+aGtuiHhuahtueJoeS5meS/uuWNuOaBqea4qeepj+mfs+S4i+WMluS7ruS9leS8veS+oeS9s+WKoOWPr+WYieWkj+WrgeWutuWvoeenkeaah+aenOaetuatjOays+eBq+ePguemjeemvueovOeuh+iKseiLm+iMhOiNt+iPr+iPk+idpuiqsuWYqeiyqOi/pumBjumcnuiaiuS/hOWzqOaIkeeJmeeUu+iHpeiKveibvuizgOmbhemkk+mnleS7i+S8muino+WbnuWhiuWjiuW7u+W/q+aAquaClOaBouaHkOaIkuaLkOaUuVwiXSxcbltcImIzYTFcIixcIumtgeaZpuaisOa1t+eBsOeVjOeahue1teiKpeifuemWi+majuiyneWHseWKvuWkluWSs+Wus+W0luaFqOamgua2r+eijeiTi+ihl+ipsumOp+mquOa1rOmmqOibmeWeo+afv+ibjumIjuWKg+Wah+WQhOW7k+aLoeaSueagvOaguOauu+eNsueiuuepq+immuinkui1q+i8g+mDremWo+malOmdqeWtpuWys+alvemhjemhjuaOm+esoOaoq+apv+aitumwjea9n+WJsuWWneaBsOaLrOa0u+a4h+a7keiRm+ikkOi9hOS4lOmwueWPtuakm+aouumehOagquWFnOerg+iSsumHnOmOjOWZm+m0qOagouiMheiQsVwiXSxcbltcImI0YTFcIixcIueypeWIiOiLheeTpuS5vuS+g+WGoOWvkuWIiuWLmOWLp+W3u+WWmuWgquWnpuWujOWumOWvm+W5suW5ueaCo+aEn+aFo+aGvuaPm+aVouafkeahk+ajuuasvuatk+axl+a8oua+l+a9heeSsOeUmOebo+eci+erv+euoeewoee3qee8tue/sOiCneiJpuiOnuims+irjOiyq+mChOmRkemWk+mWkemWoumZpemfk+mkqOiImOS4uOWQq+WyuOW3jOeOqeeZjOecvOWyqee/q+i0i+mbgemgkemhlOmhmOS8geS8juWNseWWnOWZqOWfuuWlh+WsieWvhOWykOW4jOW5vuW/jOaPruacuuaXl+aXouacn+aji+ajhFwiXSxcbltcImI1YTFcIixcIuapn+W4sOavheawl+axveeVv+eliOWto+eogOe0gOW+veimj+iomOiytOi1t+i7jOi8nemjoumojumsvOS6gOWBveWEgOWmk+WunOaIr+aKgOaTrOasuueKoOeWkeelh+e+qeifu+iqvOitsOaOrOiPiumeoOWQieWQg+WWq+ahlOapmOipsOegp+adtem7jeWNtOWuouiEmuiZkOmAhuS4mOS5heS7h+S8keWPiuWQuOWuruW8k+aApeaVkeacveaxguaxsuazo+eBuOeQg+eptueqruesiOe0muezvue1puaXp+eJm+WOu+WxheW3qOaLkuaLoOaMmea4oOiZmuiosei3nemLuOa8geempumtmuS6qOS6q+S6rFwiXSxcbltcImI2YTFcIixcIuS+m+S+oOWDkeWFh+ertuWFseWHtuWNlOWMoeWNv+WPq+WWrOWig+WzoeW8t+W9iuaAr+aBkOaBreaMn+aVmeapi+azgeeLgueLreefr+iDuOiEheiIiOiVjumDt+mPoemfv+mll+mpmuS7sOWHneWwreaagealreWxgOabsualteeOieahkOeygeWDheWLpOWdh+W3vumMpuaWpOaso+asveeQtOemgeemveeti+e3iuiKueiPjOihv+iln+isuei/kemHkeWQn+mKgOS5neWAtuWPpeWMuueLl+eOluefqeiLpui6r+mnhumniOmnkuWFt+aEmuiZnuWWsOepuuWBtuWvk+mBh+maheS4suarm+mHp+WxkeWxiFwiXSxcbltcImI3YTFcIixcIuaOmOeqn+ayk+mdtOi9oeeqqueGiumaiOeyguagl+e5sOahkemNrOWLsuWQm+iWq+iok+e+pOi7jemDoeWNpuiiiOelgeS/guWCvuWIkeWFhOWVk+WcreePquWei+WlkeW9ouW+hOaBteaFtuaFp+aGqeaOsuaQuuaVrOaZr+ahgua4k+eVpueoveezu+e1jOe2mee5i+e9q+iMjuiNiuibjeioiOipo+itpui7vemgmum2j+iKuOi/jumvqOWKh+aIn+aSg+a/gOmameahgeWCkeasoOaxuua9lOeptOe1kOihgOioo+aciOS7tuWAueWApuWBpeWFvOWIuOWJo+WWp+Wcj+WgheWrjOW7uuaGsuaHuOaLs+aNslwiXSxcbltcImI4YTFcIixcIuaknOaoqeeJveeKrOeMrueglOehr+e1ueecjOiCqeimi+ismeizoui7kumBo+mNtemZuumhlemok+m5uOWFg+WOn+WOs+W5u+W8pua4m+a6kOeOhOePvue1g+iIt+iogOiruumZkOS5juWAi+WPpOWRvOWbuuWnkeWtpOW3seW6q+W8p+aIuOaVheaer+a5lueLkOeziuiitOiCoeiDoeiPsOiZjuiqh+i3qOmIt+mbh+mhp+m8k+S6lOS6kuS8jeWNiOWRieWQvuWor+W+jOW+oeaCn+aip+aqjueRmueigeiqnuiqpOitt+mGkOS5numvieS6pOS9vOS+r+WAmeWAluWFieWFrOWKn+WKueWLvuWOmuWPo+WQkVwiXSxcbltcImI5YTFcIixcIuWQjuWWieWdkeWeouWlveWtlOWtneWuj+W3peW3p+W3t+W5uOW6g+W6muW6t+W8mOaBkuaFjOaKl+aLmOaOp+aUu+aYguaZg+abtOadreagoeail+ani+axn+a0qua1qea4r+a6neeUsueah+ehrOeov+ezoOe0hee0mOe1nue2seiAleiAg+iCr+iCseiFlOiGj+iIquiNkuihjOihoeism+iyouizvOmDiumFtemJseegv+mLvOmWpOmZjemghemmmemrmOm0u+WJm+WKq+WPt+WQiOWjleaLt+a/oOixqui9n+m6ueWFi+WIu+WRiuWbveepgOmFt+m1oOm7kueNhOa8ieiFsOeUkeW/veaDmumqqOeLm+i+vFwiXSxcbltcImJhYTFcIixcIuatpOmgg+S7iuWbsOWdpOWivuWpmuaBqOaHh+aYj+aYhuagueaisea3t+eXlee0uuiJrumtguS6m+S9kOWPieWUhuW1r+W3puW3ruafu+aymeeRs+egguipkOmOluijn+WdkOW6p+aMq+WCteWCrOWGjeacgOWTieWhnuWmu+WusOW9qeaJjeaOoeagveats+a4iOeBvemHh+eKgOegleegpuelreaWjue0sOiPnOijgei8iemam+WJpOWcqOadkOe9quiyoeWGtOWdgumYquWguuamiuiCtOWSsuW0juWfvOeilem3uuS9nOWJiuWSi+aQvuaYqOaclOafteeqhOetlue0oumMr+ahnOmureesueWMmeWGiuWIt1wiXSxcbltcImJiYTFcIixcIuWvn+aLtuaSruaTpuacreauuuiWqembkeeakOmvluaNjOmMhumuq+eav+aZkuS4ieWCmOWPguWxseaDqOaSkuaVo+ahn+eHpuePiueUo+eul+e6guialeiug+izm+mFuOmkkOaWrOaaq+aui+S7leS7lOS8uuS9v+WIuuWPuOWPsuWXo+Wbm+Wjq+Wni+WnieWnv+WtkOWxjeW4guW4q+W/l+aAneaMh+aUr+WtnOaWr+aWveaXqOaeneatouatu+awj+eNheelieengeezuOe0mee0q+iCouiEguiHs+imluipnuipqeippuiqjOirruizh+iznOmbjOmjvOatr+S6i+S8vOS+jeWFkOWtl+WvuuaFiOaMgeaZglwiXSxcbltcImJjYTFcIixcIuasoea7i+ayu+eIvueSveeXlOejgeekuuiAjOiAs+iHquiSlOi+nuaxkOm5v+W8j+itmOm0q+eruui7uOWujembq+S4g+WPseWft+WkseWrieWupOaCiea5v+a8hueWvuizquWun+iUgOevoOWBsuaftOiKneWxoeiViue4nuiIjuWGmeWwhOaNqOi1puaWnOeFruekvue0l+iAheisnei7iumBruibh+mCquWAn+WLuuWwuuadk+eBvOeItemFjOmHiOmMq+iLpeWvguW8seaDueS4u+WPluWuiOaJi+acseauiueLqeePoOeoruiFq+i2o+mFkummluWEkuWPl+WRquWvv+aOiOaouee2rOmcgOWbmuWPjuWRqFwiXSxcbltcImJkYTFcIixcIuWul+WwseW3nuS/ruaEgeaLvua0suengOeni+e1gue5jee/kuiHreiIn+iSkOihhuilsuiukOi5tOi8r+mAsemFi+mFrOmbhumGnOS7gOS9j+WFheWNgeW+k+aIjuaflOaxgea4i+eNo+e4pumHjemKg+WPlOWkmeWuv+a3keelnee4rueym+WhvueGn+WHuuihk+i/sOS/iuWzu+aYpeeerOero+iInOmnv+WHhuW+quaXrOalr+auiea3s+a6lua9pOebvue0lOW3oemBtemGh+mghuWHpuWIneaJgOaakeabmea4muW6tue3kue9suabuOiWr+iXt+iruOWKqeWPmeWls+W6j+W+kOaBlemLpOmZpOWCt+WEn1wiXSxcbltcImJlYTFcIixcIuWLneWMoOWNh+WPrOWTqOWVhuWUseWYl+WlqOWmvuWovOWuteWwhuWwj+WwkeWwmuW6hOW6iuW7oOW9sOaJv+aKhOaLm+aOjOaNt+aYh+aYjOaYreaZtuadvuaiouaon+aoteayvOa2iOa4iea5mOeEvOeEpueFp+eXh+ecgeehneekgeelpeensOeroOeskeeyp+e0ueiCluiPluiSi+iVieihneijs+ion+iovOiplOips+ixoeiznumGpOmJpumNvumQmOmanOmemOS4iuS4iOS4nuS5l+WGl+WJsOWfjuWgtOWjjOWsouW4uOaDheaTvuadoeadlua1hOeKtueVs+epo+iSuOitsumGuOmMoOWYseWftOmjvlwiXSxcbltcImJmYTFcIixcIuaLreakjeaulueHree5lOiBt+iJsuinpumjn+idlei+seWwu+S8uOS/oeS+teWUh+WooOWvneWvqeW/g+aFjuaMr+aWsOaZi+ajruamm+a1uOa3seeUs+eWueecn+elnuenpue0s+iHo+iKr+iWquimquiouui6q+i+m+mAsumHnemch+S6uuS7geWIg+WhteWjrOWwi+eUmuWwveiFjuioiui/hemZo+mdreespeirj+mgiOmFouWbs+WOqOmAl+WQueWeguW4peaOqOawtOeCiuedoeeyi+e/oOihsOmBgumFlOmMkOmMmOmaj+eRnumrhOW0h+W1qeaVsOaeoui2qOmbm+aNruadieakmeiPhemgl+mbgOijvlwiXSxcbltcImMwYTFcIixcIua+hOaRuuWvuOS4lueArOeVneaYr+WHhOWItuWLouWnk+W+geaAp+aIkOaUv+aVtOaYn+aZtOajsuagluato+a4heeJsueUn+ebm+eyvuiBluWjsOijveilv+iqoOiqk+iri+mAnemGkumdkumdmeaWieeojuiEhumau+W4reaDnOaImuaWpeaYlOaekOefs+epjeexjee4vuiEiuiyrOi1pOi3oei5n+eiqeWIh+aLmeaOpeaRguaKmOioreeqg+evgOiqrOmbque1tuiIjOidieS7meWFiOWNg+WNoOWuo+WwguWwluW3neaIpuaJh+aSsOagk+agtOaziea1hea0l+afk+a9nOeFjueFveaXi+epv+euree3mlwiXSxcbltcImMxYTFcIixcIue5iue+qOiFuuiIm+iIueiWpuipruizjui3temBuOmBt+mKremKkemWg+muruWJjeWWhOa8uOeEtuWFqOemhee5leiGs+ezjuWZjOWhkeWyqOaOquabvuabvealmueLmeeWj+eWjuekjuelluenn+eyl+e0oOe1hOiYh+iotOmYu+mBoem8oOWDp+WJteWPjOWPouWAieWWquWjruWlj+eIveWui+WxpOWMneaDo+aDs+aNnOaOg+aMv+aOu+aTjeaXqeabueW3o+anjeanvea8leeHpeS6ieeXqeebuOeqk+ezn+e3j+e2nOiBoeiNieiNmOiRrOiSvOiXu+ijhei1sOmAgemBremOl+mcnOmokuWDj+Wil+aGjlwiXSxcbltcImMyYTFcIixcIuiHk+iUtei0iOmAoOS/g+WBtOWJh+WNs+aBr+aNieadn+a4rOi2s+mAn+S/l+WxnuiziuaXj+e2muWNkuiiluWFtuaPg+WtmOWtq+WwiuaQjeadkemBnOS7luWkmuWkquaxsOipkeWUvuWgleWmpeaDsOaJk+afgeiIteallemZgOmnhOmoqOS9k+WghuWvvuiAkOWyseW4r+W+heaAoOaFi+aItOabv+azsOa7nuiDjuiFv+iLlOiii+iyuOmAgOmArumaium7m+mvm+S7o+WPsOWkp+esrOmGjemhjOm3uea7neeAp+WNk+WVhOWuheaJmOaKnuaLk+ayoua/r+eQouiol+mQuOa/geirvuiMuOWHp+ibuOWPqlwiXSxcbltcImMzYTFcIixcIuWPqeS9humBlOi+sOWlquiEseW3veerqui+v+ajmuiwt+eLuOmxiOaoveiqsOS4ueWNmOWYhuWdpuaLheaOouaXpuatjua3oea5m+eCreefreerr+euque2u+iAveiDhuibi+iqlemNm+Wbo+Wjh+W8vuaWreaaluaqgOauteeUt+irh+WApOefpeWcsOW8m+aBpeaZuuaxoOeXtOeomue9ruiHtOicmOmBhemms+evieeVnOerueetkeiThOmAkOenqeeqkuiMtuWroeedgOS4reS7suWumeW/oOaKveaYvOafseazqOiZq+iht+iou+mFjumLs+mnkOaol+eApueMquiLp+iRl+iyr+S4geWFhuWHi+WWi+WvtVwiXSxcbltcImM0YTFcIixcIuW4luW4s+W6geW8lOW8teW9q+W+tOaHsuaMkeaaouacnea9rueJkueUuuecuuiBtOiEueiFuOidtuiqv+irnOi2hei3s+mKmumVt+mggumzpeWLheaNl+ebtOacleayiOePjeizg+mOrumZs+a0peWinOakjuanjOi/vemOmueXm+mAmuWhmuagguaOtOanu+S9g+a8rOafmOi+u+iUpue2tOmNlOakv+a9sOWdquWjt+WsrOe0rOeIquWQiumHo+m2tOS6reS9juWBnOWBteWJg+iynuWRiOWgpOWumuW4neW6leW6reW7t+W8n+aCjOaKteaMuuaPkOair+axgOeih+emjueoi+e3oOiJh+ioguirpui5hOmAk1wiXSxcbltcImM1YTFcIixcIumCuOmEremHmOm8juazpeaRmOaTouaVtea7tOeahOesm+mBqemPkea6uuWTsuW+ueaSpOi9jei/remJhOWFuOWhq+WkqeWxleW6l+a3u+e6j+eUnOiyvOi7oumhm+eCueS8neauv+a+seeUsOmbu+WFjuWQkOWgteWhl+WmrOWxoOW+kuaWl+adnOa4oeeZu+iPn+izremAlOmDvemNjeegpeeguuWKquW6puWcn+WltOaAkuWAkuWFmuWGrOWHjeWIgOWUkOWhlOWhmOWll+WuleWztuW2i+aCvOaKleaQreadseahg+aivOajn+ebl+a3mOa5r+a2m+eBr+eHiOW9k+eXmOelt+etieetlOetkuezlue1seWIsFwiXSxcbltcImM2YTFcIixcIuiRo+iVqeiXpOiojuishOixhui4j+mAg+mAj+mQmemZtumgremosOmXmOWDjeWLleWQjOWgguWwjuaGp+aSnua0nuees+erpeiDtOiQhOmBk+mKheWzoOm0h+WMv+W+l+W+s+a2nOeJueedo+emv+evpOavkueLrOiqreagg+apoeWHuOeqgeaktOWxiumztuiLq+WvhemFieeAnuWZuOWxr+aDh+aVpuayjOixmumBgemgk+WRkeabh+mIjeWliOmCo+WGheS5jeWHquiWmeisjueBmOaNuumNi+aloummtOe4hOeVt+WNl+aloOi7n+mbo+axneS6jOWwvOW8kOi/qeWMguizkeiCieiZueW7v+aXpeS5s+WFpVwiXSxcbltcImM3YTFcIixcIuWmguWwv+mfruS7u+WmiuW/jeiqjea/oeemsOelouWvp+iRseeMq+eGseW5tOW/teaNu+aSmueHg+eymOS5g+W7vOS5i+WfnOWaouaCqea/g+e0jeiDveiEs+iGv+i+suiml+iapOW3tOaKiuaSreimh+adt+azoua0vueQtuegtOWphue9teiKremmrOS/s+W7g+aLneaOkuaVl+adr+ebg+eJjOiDjOiCuui8qemFjeWAjeWfueWqkuaiheals+eFpOeLveiyt+WjsuizoOmZqumAmeidv+enpOefp+iQqeS8r+WJpeWNmuaLjeafj+aziueZveeulOeyleiItuiWhOi/q+abnea8oOeIhue4m+iOq+mngem6plwiXSxcbltcImM4YTFcIixcIuWHveeuseehsueuuOiCh+etiOarqOW5oeiCjOeVkeeVoOWFq+mJoua6jOeZuumGl+mrquS8kOe9sOaKnOetj+mWpemzqeWZuuWhmeibpOmavOS8tOWIpOWNiuWPjeWPm+W4huaQrOaWkeadv+awvuaxjueJiOeKr+ePreeVlOe5geiIrOiXqeiyqeevhOmHhueFqemgkumjr+aMveaZqeeVquebpOejkOiVg+ibruWMquWNkeWQpuWmg+W6h+W9vOaCsuaJieaJueaKq+aWkOavlOazjOeWsuearueikeenmOe3i+e9t+iCpeiiq+iqueiyu+mBv+mdnumjm+aoi+ewuOWCmeWwvuW+ruaeh+avmOeQteeciee+jlwiXSxcbltcImM5YTFcIixcIum8u+afiueol+WMueeWi+mrreW9puiGneiPseiCmOW8vOW/heeVouethumAvOahp+Wnq+Wqm+e0kOeZvuisrOS/teW9quaomeawt+a8gueTouelqOihqOipleixueW7n+aPj+eXheenkuiLl+mMqOmLsuiSnOibremwreWTgeW9rOaWjOa1nOeAleiyp+izk+mgu+aVj+eTtuS4jeS7mOWfoOWkq+WppuWvjOWGqOW4g+W6nOaAluaJtuaVt+aWp+aZrua1rueItuespuiFkOiGmuiKmeitnOiyoOizpui1tOmYnOmZhOS+ruaSq+atpuiInuiRoeiVqumDqOWwgealk+miqOiRuuiVl+S8j+WJr+W+qeW5heacjVwiXSxcbltcImNhYTFcIixcIuemj+iFueikh+imhua3teW8l+aJleayuOS7j+eJqemukuWIhuWQu+WZtOWis+aGpOaJrueEmuWlrueyieeznue0m+mbsOaWh+iBnuS4meS9teWFteWhgOW5o+W5s+W8iuafhOS4puiUvemWiemZm+exs+mggeWDu+WjgeeZlueip+WIpeeepeiUkeeuhuWBj+WkieeJh+evh+e3qOi+uui/lOmBjeS+v+WLieWoqeW8gemereS/neiIl+mLquWcg+aNleatqeeUq+ijnOi8lOepguWLn+Wik+aFleaIiuaaruavjeewv+iPqeWAo+S/uOWMheWRhuWgseWlieWuneWzsOWzr+W0qeW6luaKseaNp+aUvuaWueaci1wiXSxcbltcImNiYTFcIixcIuazleazoeeDueegsue4q+iDnuiKs+iQjOiTrOicguikkuioquixiumCpumLkumjvemzs+m1rOS5j+S6oeWCjeWJluWdiuWmqOW4veW/mOW/meaIv+aatOacm+afkOajkuWGkue0oeiCquiGqOisgOiyjOiyv+mJvumYsuWQoOmgrOWMl+WDleWNnOWiqOaSsuactOeJp+edpuephumHpuWLg+ayoeauhuWggOW5jOWllOacrOe/u+WHoeebhuaRqeejqOmtlOm6u+Wfi+WmueaYp+aemuavjuWTqeanmeW5leiGnOaelemuquafvumxkuahneS6puS/o+WPiOaKueacq+ayq+i/hOS+ree5rem6v+S4h+aFoua6gFwiXSxcbltcImNjYTFcIixcIua8q+iUk+WRs+acqumtheW3s+euleWyrOWvhuicnOa5iuiTkeeolOiEiOWmmeeyjeawkeecoOWLmeWkoueEoeeJn+efm+mcp+m1oeaki+Wpv+WomOWGpeWQjeWRveaYjuebn+i/t+mKmOmztOWnqueJnea7heWFjeajiee2v+e3rOmdoum6uuaRuOaooeiMguWmhOWtn+avm+eMm+ebsue2suiAl+iSmeWEsuacqOm7meebruadouWLv+mkheWwpOaIu+exvuiysOWVj+aCtue0i+mWgOWMgeS5n+WGtuWknOeIuuiAtumHjuW8peefouWOhOW9uee0hOiWrOios+i6jemdluafs+iWrumRk+aEieaEiOayueeZklwiXSxcbltcImNkYTFcIixcIuirrei8uOWUr+S9keWEquWLh+WPi+WupeW5veaCoOaGguaPluacieafmua5p+a2jOeMtueMt+eUseelkOijleiqmOmBiumCkemDtembhOiejeWkleS6iOS9meS4juiqiei8v+mgkOWCreW5vOWmluWuueW6uOaPmuaPuuaTgeabnOaliuanmOa0i+a6tueGlOeUqOeqr+e+iuiAgOiRieiTieimgeisoei4iumBpemZvemkiuaFvuaKkeassuayg+a1tOe/jOe/vOa3gOe+heieuuijuOadpeiOsemgvOmbt+a0m+e1oeiQvemFquS5seWNteW1kOashOa/q+iXjeiYreimp+WIqeWQj+WxpeadjuaiqOeQhueSg1wiXSxcbltcImNlYTFcIixcIueXouijj+ijoemHjOmboumZuOW+i+eOh+eri+iRjuaOoOeVpeWKiea1gea6nOeQieeVmeehq+eykumahuernOm+jeS+tuaFruaXheiZnOS6huS6ruWDmuS4oeWHjOWvruaWmeaigea2vOeMn+eZgueereeonOezp+iJr+irkumBvOmHj+mZtemgmOWKm+e3keWAq+WOmOael+a3i+eHkOeQs+iHqOi8qumao+mxl+m6n+eRoOWhgea2mee0r+mhnuS7pOS8tuS+i+WGt+WKseW2uuaAnOeOsuekvOiLk+mItOmat+mbtumcium6l+m9ouaapuattOWIl+WKo+eDiOijguW7ieaBi+aGkOa8o+eFieewvue3tOiBr1wiXSxcbltcImNmYTFcIixcIuiTrumAo+mMrOWRgumtr+ark+eCieizgui3r+mcsuWKtOWpgeW7iuW8hOacl+alvOamlOa1qua8j+eJoueLvOevreiAgeiBvuidi+mDjuWFrem6k+emhOiCi+mMsuirluWAreWSjOipseatquizhOiEh+aDkeaeoOm3suS6meS6mOmwkOipq+iXgeiVqOakgOa5vueil+iFlVwiXSxcbltcImQwYTFcIixcIuW8jOS4kOS4leS4quS4seS4tuS4vOS4v+S5guS5luS5mOS6guS6heixq+S6iuiIkuW8jeS6juS6nuS6n+S6oOS6ouS6sOS6s+S6tuS7juS7jeS7hOS7huS7guS7l+S7nuS7reS7n+S7t+S8ieS9muS8sOS9m+S9neS9l+S9h+S9tuS+iOS+j+S+mOS9u+S9qeS9sOS+keS9r+S+huS+luWEmOS/lOS/n+S/juS/mOS/m+S/keS/muS/kOS/pOS/peWAmuWAqOWAlOWAquWApeWAheS8nOS/tuWAoeWAqeWArOS/vuS/r+WAkeWAhuWBg+WBh+acg+WBleWBkOWBiOWBmuWBluWBrOWBuOWCgOWCmuWCheWCtOWCslwiXSxcbltcImQxYTFcIixcIuWDieWDiuWCs+WDguWDluWDnuWDpeWDreWDo+WDruWDueWDteWEieWEgeWEguWEluWEleWElOWEmuWEoeWEuuWEt+WEvOWEu+WEv+WFgOWFkuWFjOWFlOWFoueruOWFqeWFquWFruWGgOWGguWbmOWGjOWGieWGj+WGkeWGk+WGleWGluWGpOWGpuWGouWGqeWGquWGq+WGs+WGseWGsuWGsOWGteWGveWHheWHieWHm+WHoOiZleWHqeWHreWHsOWHteWHvuWIhOWIi+WIlOWIjuWIp+WIquWIruWIs+WIueWJj+WJhOWJi+WJjOWJnuWJlOWJquWJtOWJqeWJs+WJv+WJveWKjeWKlOWKkuWJseWKiOWKkei+qFwiXSxcbltcImQyYTFcIixcIui+p+WKrOWKreWKvOWKteWLgeWLjeWLl+WLnuWLo+WLpumjreWLoOWLs+WLteWLuOWLueWMhuWMiOeUuOWMjeWMkOWMj+WMleWMmuWMo+WMr+WMseWMs+WMuOWNgOWNhuWNheS4l+WNieWNjeWHluWNnuWNqeWNruWkmOWNu+WNt+WOguWOluWOoOWOpuWOpeWOruWOsOWOtuWPg+ewkumbmeWPn+abvOeHruWPruWPqOWPreWPuuWQgeWQveWRgOWQrOWQreWQvOWQruWQtuWQqeWQneWRjuWSj+WRteWSjuWRn+WRseWRt+WRsOWSkuWRu+WSgOWRtuWShOWSkOWShuWTh+WSouWSuOWSpeWSrOWThOWTiOWSqFwiXSxcbltcImQzYTFcIixcIuWSq+WTguWSpOWSvuWSvOWTmOWTpeWTpuWUj+WUlOWTveWTruWTreWTuuWTouWUueWVgOWVo+WVjOWUruWVnOWVheWVluWVl+WUuOWUs+WVneWWmeWWgOWSr+WWiuWWn+WVu+WVvuWWmOWWnuWWruWVvOWWg+WWqeWWh+WWqOWXmuWXheWXn+WXhOWXnOWXpOWXlOWYlOWXt+WYluWXvuWXveWYm+WXueWZjuWZkOeHn+WYtOWYtuWYsuWYuOWZq+WZpOWYr+WZrOWZquWahuWagOWaiuWaoOWalOWaj+WapeWaruWatuWatOWbguWavOWbgeWbg+WbgOWbiOWbjuWbkeWbk+Wbl+WbruWbueWcgOWbv+WchOWciVwiXSxcbltcImQ0YTFcIixcIuWciOWci+WcjeWck+WcmOWcluWXh+WcnOWcpuWct+WcuOWdjuWcu+WdgOWdj+WdqeWfgOWeiOWdoeWdv+WeieWek+WeoOWes+WepOWequWesOWfg+WfhuWflOWfkuWfk+WgiuWfluWfo+Wgi+WgmeWgneWhsuWgoeWhouWhi+WhsOavgOWhkuWgveWhueWiheWiueWin+Wiq+WiuuWjnuWiu+WiuOWiruWjheWjk+WjkeWjl+WjmeWjmOWjpeWjnOWjpOWjn+Wjr+WjuuWjueWju+WjvOWjveWkguWkiuWkkOWkm+aipuWkpeWkrOWkreWksuWkuOWkvuerkuWlleWlkOWljuWlmuWlmOWlouWloOWlp+WlrOWlqVwiXSxcbltcImQ1YTFcIixcIuWluOWmgeWmneS9nuS+q+Wmo+WmsuWnhuWnqOWnnOWmjeWnmeWnmuWopeWon+WokeWonOWoieWomuWpgOWprOWpieWoteWotuWpouWpquWqmuWqvOWqvuWri+WrguWqveWro+Wrl+WrpuWrqeWrluWruuWru+WsjOWsi+WsluWssuWrkOWsquWstuWsvuWtg+WtheWtgOWtkeWtleWtmuWtm+WtpeWtqeWtsOWts+WtteWtuOaWiOWtuuWugOWug+WupuWuuOWvg+Wvh+WvieWvlOWvkOWvpOWvpuWvouWvnuWvpeWvq+WvsOWvtuWvs+WwheWwh+WwiOWwjeWwk+WwoOWwouWwqOWwuOWwueWxgeWxhuWxjuWxk1wiXSxcbltcImQ2YTFcIixcIuWxkOWxj+WtseWxrOWxruS5ouWxtuWxueWyjOWykeWylOWmm+Wyq+Wyu+WytuWyvOWyt+WzheWyvuWzh+WzmeWzqeWzveWzuuWzreW2jOWzquW0i+W0leW0l+W1nOW0n+W0m+W0keW0lOW0ouW0muW0meW0mOW1jOW1kuW1juW1i+W1rOW1s+W1tuW2h+W2hOW2guW2ouW2neW2rOW2ruW2veW2kOW2t+W2vOW3ieW3jeW3k+W3kuW3luW3m+W3q+W3suW3teW4i+W4muW4meW4keW4m+W4tuW4t+W5hOW5g+W5gOW5juW5l+W5lOW5n+W5ouW5pOW5h+W5teW5tuW5uum6vOW5v+W6oOW7geW7guW7iOW7kOW7j1wiXSxcbltcImQ3YTFcIixcIuW7luW7o+W7neW7muW7m+W7ouW7oeW7qOW7qeW7rOW7seW7s+W7sOW7tOW7uOW7vuW8g+W8ieW9neW9nOW8i+W8keW8luW8qeW8reW8uOW9geW9iOW9jOW9juW8r+W9keW9luW9l+W9meW9oeW9reW9s+W9t+W+g+W+guW9v+W+iuW+iOW+keW+h+W+nuW+meW+mOW+oOW+qOW+reW+vOW/luW/u+W/pOW/uOW/seW/neaCs+W/v+aAoeaBoOaAmeaAkOaAqeaAjuaAseaAm+aAleaAq+aApuaAj+aAuuaBmuaBgeaBquaBt+aBn+aBiuaBhuaBjeaBo+aBg+aBpOaBguaBrOaBq+aBmeaCgeaCjeaDp+aCg+aCmlwiXSxcbltcImQ4YTFcIixcIuaChOaCm+aCluaCl+aCkuaCp+aCi+aDoeaCuOaDoOaDk+aCtOW/sOaCveaDhuaCteaDmOaFjeaEleaEhuaDtuaDt+aEgOaDtOaDuuaEg+aEoeaDu+aDseaEjeaEjuaFh+aEvuaEqOaEp+aFiuaEv+aEvOaErOaEtOaEveaFguaFhOaFs+aFt+aFmOaFmeaFmuaFq+aFtOaFr+aFpeaFseaFn+aFneaFk+aFteaGmeaGluaGh+aGrOaGlOaGmuaGiuaGkeaGq+aGruaHjOaHiuaHieaHt+aHiOaHg+aHhuaGuuaHi+e9ueaHjeaHpuaHo+aHtuaHuuaHtOaHv+aHveaHvOaHvuaIgOaIiOaIieaIjeaIjOaIlOaIm1wiXSxcbltcImQ5YTFcIixcIuaInuaIoeaIquaIruaIsOaIsuaIs+aJgeaJjuaJnuaJo+aJm+aJoOaJqOaJvOaKguaKieaJvuaKkuaKk+aKluaLlOaKg+aKlOaLl+aLkeaKu+aLj+aLv+aLhuaTlOaLiOaLnOaLjOaLiuaLguaLh+aKm+aLieaMjOaLruaLseaMp+aMguaMiOaLr+aLteaNkOaMvuaNjeaQnOaNj+aOluaOjuaOgOaOq+aNtuaOo+aOj+aOieaOn+aOteaNq+aNqeaOvuaPqeaPgOaPhuaPo+aPieaPkuaPtuaPhOaQluaQtOaQhuaQk+aQpuaQtuaUneaQl+aQqOaQj+aRp+aRr+aRtuaRjuaUquaSleaSk+aSpeaSqeaSiOaSvFwiXSxcbltcImRhYTFcIixcIuaTmuaTkuaTheaTh+aSu+aTmOaTguaTseaTp+iIieaToOaToeaKrOaTo+aTr+aUrOaTtuaTtOaTsuaTuuaUgOaTveaUmOaUnOaUheaUpOaUo+aUq+aUtOaUteaUt+aUtuaUuOeVi+aViOaVluaVleaVjeaVmOaVnuaVneaVsuaVuOaWguaWg+iuiuaWm+aWn+aWq+aWt+aXg+aXhuaXgeaXhOaXjOaXkuaXm+aXmeaXoOaXoeaXseadsuaYiuaYg+aXu+ads+aYteaYtuaYtOaYnOaZj+aZhOaZieaZgeaZnuaZneaZpOaZp+aZqOaZn+aZouaZsOaag+aaiOaajuaaieaahOaamOaaneabgeaaueabieaavuaavFwiXSxcbltcImRiYTFcIixcIuabhOaauOabluabmuaboOaYv+abpuabqeabsOabteabt+acj+acluacnuacpuacp+mcuOacruacv+actuadgeacuOact+adhuadnuadoOadmeado+adpOaeieadsOaeqeadvOadquaejOaei+aepuaeoeaeheaet+afr+aetOafrOaes+afqeaeuOafpOafnuafneafouafruaeueafjuafhuafp+aqnOagnuahhuagqeahgOahjeagsuahjuais+agq+ahmeaho+aht+ahv+ain+aij+aireailOaineaim+aig+aqruaiueahtOaiteaioOaiuuakj+aijeahvuakgeajiuakiOajmOakouakpuajoeakjOajjVwiXSxcbltcImRjYTFcIixcIuajlOajp+ajleaktuakkuakhOajl+ajo+akpeajueajoOajr+akqOakquakmuako+akoeajhualuealt+alnOaluOalq+allOalvualruakuealtOakvealmeaksOaloealnualneamgealquamsuamruankOamv+angeank+amvuanjuWvqOaniuanneamu+ang+amp+aoruamkeamoOamnOamleamtOannuanqOaoguaom+anv+asiuanueansuanp+aoheamseaonuanreaolOanq+aoiuaokuargeaoo+aok+aphOaojOapsuaotuapuOaph+apouapmeappuapiOaouOaoouaqkOaqjeaqoOaqhOaqouaqo1wiXSxcbltcImRkYTFcIixcIuaql+iYl+aqu+arg+arguaquOaqs+aqrOarnuarkearn+aqquarmuarquaru+asheiYluaruuaskuaslumsseasn+asuOast+ebnOasuemjruath+atg+atieatkOatmeatlOatm+atn+atoeatuOatueatv+augOauhOaug+aujeaumOauleaunuaupOauquauq+aur+ausuauseaus+aut+auvOavhuavi+avk+avn+avrOavq+avs+avr+m6vuawiOawk+awlOawm+awpOawo+axnuaxleaxouaxquayguayjeaymuaygeaym+axvuaxqOaxs+aykuaykOazhOazseazk+ayveazl+azheazneayruayseayvlwiXSxcbltcImRlYTFcIixcIuayuuazm+azr+azmeazqua0n+ihjea0tua0q+a0vea0uOa0mea0tea0s+a0kua0jOa1o+a2k+a1pOa1mua1uea1mea2jua2lea/pOa2hea3uea4lea4iua2tea3h+a3pua2uOa3hua3rOa3nua3jOa3qOa3kua3hea3uua3mea3pOa3lea3qua3rua4rea5rua4rua4mea5sua5n+a4vua4o+a5q+a4q+a5tua5jea4n+a5g+a4uua5jua4pOa7v+a4nea4uOa6gua6qua6mOa7iea6t+a7k+a6vea6r+a7hOa6sua7lOa7lea6j+a6pea7gua6n+a9gea8keeBjOa7rOa7uOa7vua8v+a7sua8sea7r+a8sua7jFwiXSxcbltcImRmYTFcIixcIua8vua8k+a7t+a+hua9uua9uOa+gea+gOa9r+a9m+a/s+a9rea+gua9vOa9mOa+jua+kea/gua9pua+s+a+o+a+oea+pOa+uea/hua+qua/n+a/lea/rOa/lOa/mOa/sea/rua/m+eAieeAi+a/uueAkeeAgeeAj+a/vueAm+eAmua9tOeAneeAmOeAn+eAsOeAvueAsueBkeeBo+eCmeeCkueCr+eDseeCrOeCuOeCs+eCrueDn+eDi+eDneeDmeeEieeDveeEnOeEmeeFpeeFleeGiOeFpueFoueFjOeFlueFrOeGj+eHu+eGhOeGleeGqOeGrOeHl+eGueeGvueHkueHieeHlOeHjueHoOeHrOeHp+eHteeHvFwiXSxcbltcImUwYTFcIixcIueHueeHv+eIjeeIkOeIm+eIqOeIreeIrOeIsOeIsueIu+eIvOeIv+eJgOeJhueJi+eJmOeJtOeJvueKgueKgeeKh+eKkueKlueKoueKp+eKueeKsueLg+eLhueLhOeLjueLkueLoueLoOeLoeeLueeLt+WAj+eMl+eMiueMnOeMlueMneeMtOeMr+eMqeeMpeeMvueNjueNj+m7mOeNl+eNqueNqOeNsOeNuOeNteeNu+eNuuePiOeOs+ePjueOu+ePgOePpeePruePnueSoueQheeRr+eQpeePuOeQsueQuueRleeQv+eRn+eRmeeRgeeRnOeRqeeRsOeRo+eRqueRtueRvueSi+eSnueSp+eTiueTj+eTlOePsVwiXSxcbltcImUxYTFcIixcIueToOeTo+eTp+eTqeeTrueTsueTsOeTseeTuOeTt+eUhOeUg+eUheeUjOeUjueUjeeUleeUk+eUnueUpueUrOeUvOeVhOeVjeeViueVieeVm+eVhueVmueVqeeVpOeVp+eVq+eVreeVuOeVtueWhueWh+eVtOeWiueWieeWgueWlOeWmueWneeWpeeWo+eXgueWs+eXg+eWteeWveeWuOeWvOeWseeXjeeXiueXkueXmeeXo+eXnueXvueXv+eXvOeYgeeXsOeXuueXsueXs+eYi+eYjeeYieeYn+eYp+eYoOeYoeeYoueYpOeYtOeYsOeYu+eZh+eZiOeZhueZnOeZmOeZoeeZoueZqOeZqeeZqueZp+eZrOeZsFwiXSxcbltcImUyYTFcIixcIueZsueZtueZuOeZvOeagOeag+eaiOeai+eajuealueak+eameeamueasOeatOeauOeaueeauuebguebjeebluebkuebnueboeebpeebp+ebquiYr+ebu+eciOech+echOecqeecpOecnuecpeecpuecm+ect+ecuOedh+edmuedqOedq+edm+edpeedv+edvuedueeejueei+eekeeeoOeenueesOeetueeueeev+eevOeeveeeu+efh+efjeefl+efmuefnOefo+efruefvOegjOegkuekpuegoOekquehheeijuehtOeihuehvOeimueijOeio+eiteeiqueir+ejkeejhueji+ejlOeivueivOejheejiuejrFwiXSxcbltcImUzYTFcIixcIuejp+ejmuejveejtOekh+ekkuekkeekmeekrOekq+elgOeloOell+eln+elmuelleelk+eluuelv+emiuemneemp+m9i+emquemruems+emueemuuenieenleenp+enrOenoeeno+eoiOeojeeomOeomeeooOeon+emgOeoseeou+eovueot+epg+epl+epieepoeepouepqem+neepsOepueepveeqiOeql+eqleeqmOeqlueqqeeriOeqsOeqtuerheerhOeqv+mCg+erh+eriuerjeerj+erleerk+ermeermuerneeroeerouerpuerreersOesguesj+esiueshuess+esmOesmeesnuesteesqOestuetkFwiXSxcbltcImU0YTFcIixcIuetuueshOetjeesi+etjOetheetteetpeettOetp+etsOetseetrOetrueuneeumOeun+eujeeunOeumueui+eukueuj+etneeumeevi+evgeevjOevj+eutOevhuevneevqeewkeewlOevpuevpeexoOewgOewh+ewk+evs+evt+ewl+ewjeevtuewo+ewp+ewquewn+ewt+ewq+ewveexjOexg+exlOexj+exgOexkOexmOexn+expOexluexpeexrOexteeyg+eykOeypOeyreeyoueyq+eyoeeyqOeys+eysueyseeyrueyueeyveezgOezheezguezmOezkueznOezoumsu+ezr+ezsueztOeztuezuue0hlwiXSxcbltcImU1YTFcIixcIue0gue0nOe0lee0iue1hee1i+e0rue0sue0v+e0tee1hue1s+e1lue1jue1sue1qOe1rue1j+e1o+e2k+e2iee1m+e2j+e1vee2m+e2uue2rue2o+e2tee3h+e2vee2q+e4vee2oue2r+e3nOe2uOe2n+e2sOe3mOe3nee3pOe3nue3u+e3sue3oee4hee4iue4o+e4oee4kue4see4n+e4iee4i+e4oue5hue5pue4u+e4tee4uee5g+e4t+e4sue4uue5p+e5nee5lue5nue5mee5mue5uee5que5qee5vOe5u+e6g+e3lee5vei+rue5v+e6iOe6iee6jOe6kue6kOe6k+e6lOe6lue6jue6m+e6nOe8uOe8ulwiXSxcbltcImU2YTFcIixcIue9hee9jOe9jee9jue9kOe9kee9lee9lOe9mOe9n+e9oOe9qOe9qee9p+e9uOe+gue+hue+g+e+iOe+h+e+jOe+lOe+nue+nee+mue+o+e+r+e+sue+uee+rue+tue+uOitsee/hee/hue/iue/lee/lOe/oee/pue/qee/s+e/uemjnOiAhuiAhOiAi+iAkuiAmOiAmeiAnOiAoeiAqOiAv+iAu+iBiuiBhuiBkuiBmOiBmuiBn+iBouiBqOiBs+iBsuiBsOiBtuiBueiBveiBv+iChOiChuiCheiCm+iCk+iCmuiCreWGkOiCrOiDm+iDpeiDmeiDneiDhOiDmuiDluiEieiDr+iDseiEm+iEqeiEo+iEr+iFi1wiXSxcbltcImU3YTFcIixcIumai+iFhuiEvuiFk+iFkeiDvOiFseiFruiFpeiFpuiFtOiGg+iGiOiGiuiGgOiGguiGoOiGleiGpOiGo+iFn+iGk+iGqeiGsOiGteiGvuiGuOiGveiHgOiHguiGuuiHieiHjeiHkeiHmeiHmOiHiOiHmuiHn+iHoOiHp+iHuuiHu+iHvuiIgeiIguiIheiIh+iIiuiIjeiIkOiIluiIqeiIq+iIuOiIs+iJgOiJmeiJmOiJneiJmuiJn+iJpOiJouiJqOiJquiJq+iIruiJseiJt+iJuOiJvuiKjeiKkuiKq+iKn+iKu+iKrOiLoeiLo+iLn+iLkuiLtOiLs+iLuuiOk+iMg+iLu+iLueiLnuiMhuiLnOiMieiLmVwiXSxcbltcImU4YTFcIixcIuiMteiMtOiMluiMsuiMseiNgOiMueiNkOiNheiMr+iMq+iMl+iMmOiOheiOmuiOquiOn+iOouiOluiMo+iOjuiOh+iOiuiNvOiOteiNs+iNteiOoOiOieiOqOiPtOiQk+iPq+iPjuiPveiQg+iPmOiQi+iPgeiPt+iQh+iPoOiPsuiQjeiQouiQoOiOveiQuOiUhuiPu+iRreiQquiQvOiVmuiShOiRt+iRq+iSreiRruiSguiRqeiRhuiQrOiRr+iRueiQteiTiuiRouiSueiSv+iSn+iTmeiTjeiSu+iTmuiTkOiTgeiThuiTluiSoeiUoeiTv+iTtOiUl+iUmOiUrOiUn+iUleiUlOiTvOiVgOiVo+iVmOiViFwiXSxcbltcImU5YTFcIixcIuiVgeiYguiVi+iVleiWgOiWpOiWiOiWkeiWiuiWqOiVreiWlOiWm+iXquiWh+iWnOiVt+iVvuiWkOiXieiWuuiXj+iWueiXkOiXleiXneiXpeiXnOiXueiYiuiYk+iYi+iXvuiXuuiYhuiYouiYmuiYsOiYv+iZjeS5leiZlOiZn+iZp+iZseiak+iao+iaqeiaquiai+iajOiatuiar+ibhOibhuiasOibieigo+iaq+iblOibnuibqeibrOibn+ibm+ibr+ickuichuiciOicgOicg+ibu+ickeicieicjeibueiciuictOicv+ict+icu+icpeicqeicmuidoOidn+iduOidjOidjuidtOidl+idqOidruidmVwiXSxcbltcImVhYTFcIixcIuidk+ido+idquigheieouien+ieguier+ifi+ieveifgOifkOmbluieq+ifhOies+ifh+ifhuieu+ifr+ifsuifoOigj+igjeifvuiftuift+igjuifkuigkeigluigleigouigoeigseigtuigueigp+igu+ihhOihguihkuihmeihnuihouihq+iigeihvuiinuihteihveiiteihsuiiguiil+iikuiiruiimeiiouiijeiipOiisOiiv+iiseijg+ijhOijlOijmOijmeijneijueikguijvOijtOijqOijsuikhOikjOikiuikk+ilg+iknuikpeikquikq+ilgeilhOiku+iktuikuOiljOikneiloOilnlwiXSxcbltcImViYTFcIixcIuilpuilpOilreilquilr+iltOilt+ilvuimg+imiOimiuimk+immOimoeimqeimpuimrOimr+imsuimuuimveimv+ingOinmuinnOinneinp+intOinuOiog+ioluiokOiojOiom+ioneiopeiotuipgeipm+ipkuiphuipiOipvOipreiprOipouiqheiqguiqhOiqqOiqoeiqkeiqpeiqpuiqmuiqo+irhOirjeirguirmuirq+irs+irp+irpOirseislOiroOirouirt+irnuirm+isjOish+ismuiroeisluiskOisl+isoOiss+meq+ispuisq+isvuisqOitgeitjOitj+itjuitieitluitm+itmuitq1wiXSxcbltcImVjYTFcIixcIuitn+itrOitr+ittOitveiugOiujOiujuiukuiuk+iuluiumeiumuiwuuixgeiwv+ixiOixjOixjuixkOixleixouixrOixuOixuuiyguiyieiyheiyiuiyjeiyjuiylOixvOiymOaIneiyreiyquiyveiysuiys+iyruiytuiziOizgeizpOizo+izmuizveizuuizu+i0hOi0hei0iui0h+i0j+i0jei0kOm9jui0k+izjei0lOi0lui1p+i1rei1sei1s+i2gei2mei3gui2vui2uui3j+i3mui3lui3jOi3m+i3i+i3qui3q+i3n+i3o+i3vOi4iOi4iei3v+i4nei4nui4kOi4n+i5gui4tei4sOi4tOi5ilwiXSxcbltcImVkYTFcIixcIui5h+i5iei5jOi5kOi5iOi5mei5pOi5oOi4qui5o+i5lei5tui5sui5vOi6gei6h+i6hei6hOi6i+i6iui6k+i6kei6lOi6mei6qui6oei6rOi6sOi7hui6sei6vui7hei7iOi7i+i7m+i7o+i7vOi7u+i7q+i7vui8iui8hei8lei8kui8mei8k+i8nOi8n+i8m+i8jOi8pui8s+i8u+i8uei9hei9gui8vui9jOi9iei9hui9jui9l+i9nOi9oui9o+i9pOi+nOi+n+i+o+i+rei+r+i+t+i/mui/pei/oui/qui/r+mCh+i/tOmAhei/uei/uumAkemAlemAoemAjemAnumAlumAi+mAp+mAtumAtemAuei/uFwiXSxcbltcImVlYTFcIixcIumBj+mBkOmBkemBkumAjumBiemAvumBlumBmOmBnumBqOmBr+mBtumaqOmBsumCgumBvemCgemCgOmCiumCiemCj+mCqOmCr+mCsemCtemDoumDpOaJiOmDm+mEgumEkumEmemEsumEsOmFiumFlumFmOmFo+mFpemFqemFs+mFsumGi+mGiemGgumGoumGq+mGr+mGqumGtemGtOmGuumHgOmHgemHiemHi+mHkOmHlumHn+mHoemHm+mHvOmHtemHtumInumHv+mIlOmIrOmIlemIkemJnumJl+mJhemJiemJpOmJiOmKlemIv+mJi+mJkOmKnOmKlumKk+mKm+mJmumLj+mKuemKt+mLqemMj+mLuumNhOmMrlwiXSxcbltcImVmYTFcIixcIumMmemMoumMmumMo+mMuumMtemMu+mNnOmNoOmNvOmNrumNlumOsOmOrOmOremOlOmOuemPlumPl+mPqOmPpemPmOmPg+mPnemPkOmPiOmPpOmQmumQlOmQk+mQg+mQh+mQkOmQtumQq+mQtemQoemQuumRgemRkumRhOmRm+mRoOmRoumRnumRqumIqemRsOmRtemRt+mRvemRmumRvOmRvumSgemRv+mWgumWh+mWiumWlOmWlumWmOmWmemWoOmWqOmWp+mWremWvOmWu+mWuemWvumXiua/tumXg+mXjemXjOmXlemXlOmXlumXnOmXoemXpemXoumYoemYqOmYrumYr+mZgumZjOmZj+mZi+mZt+mZnOmZnlwiXSxcbltcImYwYTFcIixcIumZnemZn+mZpumZsumZrOmajemamOmalemal+maqumap+masemasumasOmatOmatumauOmauembjumbi+mbiembjeiljembnOmcjemblembuemchOmchumciOmck+mcjumckemcj+mclumcmemcpOmcqumcsOmcuemcvemcvumdhOmdhumdiOmdgumdiemdnOmdoOmdpOmdpumdqOWLkumdq+mdsemduemehemdvOmegemduumehumei+mej+mekOmenOmeqOmepumeo+mes+metOmfg+mfhumfiOmfi+mfnOmfrem9j+mfsuern+mftumftemgj+mgjOmguOmgpOmgoemgt+mgvemhhumhj+mhi+mhq+mhr+mhsFwiXSxcbltcImYxYTFcIixcIumhsemhtOmhs+miqumir+misemitumjhOmjg+mjhumjqemjq+mkg+mkiemkkumklOmkmOmkoemknemknumkpOmkoOmkrOmkrumkvemkvumlgumliemlhemlkOmli+mlkemlkumljOmllemml+mmmOmmpemmremmrummvOmnn+mnm+mnnemnmOmnkemnremnrumnsemnsumnu+mnuOmogemoj+mohemnoumomemoq+mot+mphempgumpgOmpg+movumplempjempm+mpl+mpn+mpoumppemppOmpqempq+mpqumqremqsOmqvOmrgOmrj+mrkemrk+mrlOmrnumrn+mroumro+mrpumrr+mrq+mrrumrtOmrsemrt1wiXSxcbltcImYyYTFcIixcIumru+mshumsmOmsmumsn+msoumso+mspemsp+msqOmsqemsqumsrumsr+mssumthOmtg+mtj+mtjemtjumtkemtmOmttOmuk+mug+mukemulumul+mun+muoOmuqOmutOmvgOmviumuuemvhumvj+mvkemvkumvo+mvoumvpOmvlOmvoemwuumvsumvsemvsOmwlemwlOmwiemwk+mwjOmwhumwiOmwkumwiumwhOmwrumwm+mwpemwpOmwoemwsOmxh+mwsumxhumwvumxmumxoOmxp+mxtumxuOmzp+mzrOmzsOm0iem0iOmzq+m0g+m0hum0qum0pum2r+m0o+m0n+m1hOm0lem0kum1gem0v+m0vum1hum1iFwiXSxcbltcImYzYTFcIixcIum1nem1num1pOm1kem1kOm1mem1sum2iem2h+m2q+m1r+m1uum2mum2pOm2qem2sum3hOm3gem2u+m2uOm2uum3hum3j+m3gum3mem3k+m3uOm3pum3rem3r+m3vem4mum4m+m4num5tem5uem5vem6gem6iOm6i+m6jOm6kum6lem6kem6nem6pem6qem6uOm6qum6remdoem7jOm7jum7j+m7kOm7lOm7nOm7num7nem7oOm7pem7qOm7r+m7tOm7tum7t+m7uem7u+m7vOm7vem8h+m8iOeat+m8lem8oem8rOm8vum9ium9kum9lOm9o+m9n+m9oOm9oem9pum9p+m9rOm9qum9t+m9sum9tum+lem+nOm+oFwiXSxcbltcImY0YTFcIixcIuWgr+anh+mBmeeRpOWHnOeGmVwiXSxcbltcImY5YTFcIixcIue6iuiknOmNiOmKiOiTnOS/ieeCu+aYseajiOmLueabu+W9heS4qOS7oeS7vOS8gOS8g+S8ueS9luS+kuS+iuS+muS+lOS/jeWBgOWAouS/v+WAnuWBhuWBsOWBguWClOWDtOWDmOWFiuWFpOWGneWGvuWHrOWIleWKnOWKpuWLgOWLm+WMgOWMh+WMpOWNsuWOk+WOsuWPne+ojuWSnOWSiuWSqeWTv+WWhuWdmeWdpeWerOWfiOWfh++oj++okOWinuWisuWki+Wlk+Wlm+WlneWlo+WmpOWmuuWtluWvgOeUr+WvmOWvrOWwnuWypuWyuuWzteW0p+W1k++okeW1guW1reW2uOW2ueW3kOW8oeW8tOW9p+W+t1wiXSxcbltcImZhYTFcIixcIuW/nuaBneaCheaCiuaDnuaDleaEoOaDsuaEkeaEt+aEsOaGmOaIk+aKpuaPteaRoOaSneaTjuaVjuaYgOaYleaYu+aYieaYruaYnuaYpOaZpeaZl+aZme+okuaZs+aameaaoOaasuaav+abuuacju+kqeadpuaeu+ahkuafgOaggeahhOajj++ok+alqO+olOammOanouaosOapq+aphuaps+apvuarouarpOavluawv+axnOayhuaxr+azmua0hOa2h+a1r+a2lua2rOa3j+a3uOa3sua3vOa4uea5nOa4p+a4vOa6v+a+iOa+tea/teeAheeAh+eAqOeCheeCq+eEj+eEhOeFnOeFhueFh++oleeHgeeHvueKsVwiXSxcbltcImZiYTFcIixcIueKvueMpO+olueNt+eOveePieePluePo+ePkueQh+ePteeQpueQqueQqeeQrueRoueSieeSn+eUgeeVr+eagueanOeanueam+eapu+ol+edhuWKr+egoeehjuehpOehuueksO+omO+ome+omuemlO+om+emm+erkeerp++onOerq+eunu+onee1iOe1nOe2t+e2oOe3lue5kue9h+e+oe+onuiMgeiNouiNv+iPh+iPtuiRiOiStOiVk+iVmeiVq++on+iWsO+ooO+ooeigh+ijteiokuiot+ipueiqp+iqvuirn++oouirtuitk+itv+izsOiztOi0kui1tu+oo+i7j++opO+opemBp+mDnu+opumElemEp+mHmlwiXSxcbltcImZjYTFcIixcIumHl+mHnumHremHrumHpOmHpemIhumIkOmIiumIuumJgOmIvOmJjumJmemJkemIuemJp+mKp+mJt+mJuOmLp+mLl+mLmemLkO+op+mLlemLoOmLk+mMpemMoemLu++oqOmMnumLv+mMnemMgumNsOmNl+mOpOmPhumPnumPuOmQsemRhemRiOmWku+nnO+oqemanemar+mcs+mcu+mdg+mdjemdj+mdkemdlemhl+mhpe+oqu+oq+mkp++orOmmnumpjumrmemrnOmttemtsumuj+musemuu+mwgOm1sOm1q++orem4mem7kVwiXSxcbltcImZjZjFcIixcIuKFsFwiLDksXCLvv6Lvv6TvvIfvvIJcIl0sXG5bXCI4ZmEyYWZcIixcIsuYy4fCuMuZy53Cr8uby5rvvZ7OhM6FXCJdLFxuW1wiOGZhMmMyXCIsXCLCocKmwr9cIl0sXG5bXCI4ZmEyZWJcIixcIsK6wqrCqcKu4oSiwqTihJZcIl0sXG5bXCI4ZmE2ZTFcIixcIs6GzojOic6KzqpcIl0sXG5bXCI4ZmE2ZTdcIixcIs6MXCJdLFxuW1wiOGZhNmU5XCIsXCLOjs6rXCJdLFxuW1wiOGZhNmVjXCIsXCLOj1wiXSxcbltcIjhmYTZmMVwiLFwizqzOrc6uzq/Pis6Qz4zPgs+Nz4vOsM+OXCJdLFxuW1wiOGZhN2MyXCIsXCLQglwiLDEwLFwi0I7Qj1wiXSxcbltcIjhmYTdmMlwiLFwi0ZJcIiwxMCxcItGe0Z9cIl0sXG5bXCI4ZmE5YTFcIixcIsOGxJBcIl0sXG5bXCI4ZmE5YTRcIixcIsSmXCJdLFxuW1wiOGZhOWE2XCIsXCLEslwiXSxcbltcIjhmYTlhOFwiLFwixYHEv1wiXSxcbltcIjhmYTlhYlwiLFwixYrDmMWSXCJdLFxuW1wiOGZhOWFmXCIsXCLFpsOeXCJdLFxuW1wiOGZhOWMxXCIsXCLDpsSRw7DEp8SxxLPEuMWCxYDFicWLw7jFk8OfxafDvlwiXSxcbltcIjhmYWFhMVwiLFwiw4HDgMOEw4LEgseNxIDEhMOFw4PEhsSIxIzDh8SKxI7DicOIw4vDisSaxJbEksSYXCJdLFxuW1wiOGZhYWJhXCIsXCLEnMSexKLEoMSkw43DjMOPw47Hj8SwxKrErsSoxLTEtsS5xL3Eu8WDxYfFhcORw5PDksOWw5THkcWQxYzDlcWUxZjFlsWaxZzFoMWexaTFosOaw5nDnMObxazHk8WwxarFssWuxajHl8ebx5nHlcW0w53FuMW2xbnFvcW7XCJdLFxuW1wiOGZhYmExXCIsXCLDocOgw6TDosSDx47EgcSFw6XDo8SHxInEjcOnxIvEj8Opw6jDq8OqxJvEl8STxJnHtcSdxJ9cIl0sXG5bXCI4ZmFiYmRcIixcIsShxKXDrcOsw6/DrseQXCJdLFxuW1wiOGZhYmM1XCIsXCLEq8SvxKnEtcS3xLrEvsS8xYTFiMWGw7HDs8Oyw7bDtMeSxZHFjcO1xZXFmcWXxZvFncWhxZ/FpcWjw7rDucO8w7vFrceUxbHFq8Wzxa/FqceYx5zHmseWxbXDvcO/xbfFusW+xbxcIl0sXG5bXCI4ZmIwYTFcIixcIuS4guS4hOS4heS4jOS4kuS4n+S4o+S4pOS4qOS4q+S4ruS4r+S4sOS4teS5gOS5geS5hOS5h+S5keS5muS5nOS5o+S5qOS5qeS5tOS5teS5ueS5v+S6jeS6luS6l+S6neS6r+S6ueS7g+S7kOS7muS7m+S7oOS7oeS7ouS7qOS7r+S7seS7s+S7teS7veS7vuS7v+S8gOS8guS8g+S8iOS8i+S8jOS8kuS8leS8luS8l+S8meS8ruS8seS9oOS8s+S8teS8t+S8ueS8u+S8vuS9gOS9guS9iOS9ieS9i+S9jOS9kuS9lOS9luS9mOS9n+S9o+S9quS9rOS9ruS9seS9t+S9uOS9ueS9uuS9veS9vuS+geS+guS+hFwiXSxcbltcIjhmYjFhMVwiLFwi5L6F5L6J5L6K5L6M5L6O5L6Q5L6S5L6T5L6U5L6X5L6Z5L6a5L6e5L6f5L6y5L635L655L675L685L695L6+5L+A5L+B5L+F5L+G5L+I5L+J5L+L5L+M5L+N5L+P5L+S5L+c5L+g5L+i5L+w5L+y5L+85L+95L+/5YCA5YCB5YCE5YCH5YCK5YCM5YCO5YCQ5YCT5YCX5YCY5YCb5YCc5YCd5YCe5YCi5YCn5YCu5YCw5YCy5YCz5YC15YGA5YGB5YGC5YGF5YGG5YGK5YGM5YGO5YGR5YGS5YGT5YGX5YGZ5YGf5YGg5YGi5YGj5YGm5YGn5YGq5YGt5YGw5YGx5YC75YKB5YKD5YKE5YKG5YKK5YKO5YKP5YKQXCJdLFxuW1wiOGZiMmExXCIsXCLlgpLlgpPlgpTlgpblgpvlgpzlgp5cIiw0LFwi5YKq5YKv5YKw5YK55YK65YK95YOA5YOD5YOE5YOH5YOM5YOO5YOQ5YOT5YOU5YOY5YOc5YOd5YOf5YOi5YOk5YOm5YOo5YOp5YOv5YOx5YO25YO65YO+5YSD5YSG5YSH5YSI5YSL5YSM5YSN5YSO5YOy5YSQ5YSX5YSZ5YSb5YSc5YSd5YSe5YSj5YSn5YSo5YSs5YSt5YSv5YSx5YSz5YS05YS15YS45YS55YWC5YWK5YWP5YWT5YWV5YWX5YWY5YWf5YWk5YWm5YW+5YaD5YaE5YaL5YaO5YaY5Yad5Yah5Yaj5Yat5Ya45Ya65Ya85Ya+5Ya/5YeCXCJdLFxuW1wiOGZiM2ExXCIsXCLlh4jlh4/lh5Hlh5Llh5Plh5Xlh5jlh57lh6Llh6Xlh67lh7Llh7Plh7Tlh7fliIHliILliIXliJLliJPliJXliJbliJjliKLliKjliLHliLLliLXliLzliYXliYnliZXliZfliZjliZrliZzliZ/liaDliaHliablia7libflibjlibnlioDlioLlioXliorliozlipPlipXlipblipflipjliprlipzliqTliqXliqbliqfliq/lirDlirblirflirjlirrlirvlir3li4Dli4Tli4bli4jli4zli4/li5Hli5Tli5bli5vli5zli6Hli6Xli6jli6nli6rli6zli7Dli7Hli7Tli7bli7fljIDljIPljIrljItcIl0sXG5bXCI4ZmI0YTFcIixcIuWMjOWMkeWMk+WMmOWMm+WMnOWMnuWMn+WMpeWMp+WMqOWMqeWMq+WMrOWMreWMsOWMsuWMteWMvOWMveWMvuWNguWNjOWNi+WNmeWNm+WNoeWNo+WNpeWNrOWNreWNsuWNueWNvuWOg+WOh+WOiOWOjuWOk+WOlOWOmeWOneWOoeWOpOWOquWOq+WOr+WOsuWOtOWOteWOt+WOuOWOuuWOveWPgOWPheWPj+WPkuWPk+WPleWPmuWPneWPnuWPoOWPpuWPp+WPteWQguWQk+WQmuWQoeWQp+WQqOWQquWQr+WQseWQtOWQteWRg+WRhOWRh+WRjeWRj+WRnuWRouWRpOWRpuWRp+WRqeWRq+WRreWRruWRtOWRv1wiXSxcbltcIjhmYjVhMVwiLFwi5ZKB5ZKD5ZKF5ZKI5ZKJ5ZKN5ZKR5ZKV5ZKW5ZKc5ZKf5ZKh5ZKm5ZKn5ZKp5ZKq5ZKt5ZKu5ZKx5ZK35ZK55ZK65ZK75ZK/5ZOG5ZOK5ZON5ZOO5ZOg5ZOq5ZOs5ZOv5ZO25ZO85ZO+5ZO/5ZSA5ZSB5ZSF5ZSI5ZSJ5ZSM5ZSN5ZSO5ZSV5ZSq5ZSr5ZSy5ZS15ZS25ZS75ZS85ZS95ZWB5ZWH5ZWJ5ZWK5ZWN5ZWQ5ZWR5ZWY5ZWa5ZWb5ZWe5ZWg5ZWh5ZWk5ZWm5ZW/5ZaB5ZaC5ZaG5ZaI5ZaO5ZaP5ZaR5ZaS5ZaT5ZaU5ZaX5Zaj5Zak5Zat5Zay5Za/5ZeB5ZeD5ZeG5ZeJ5ZeL5ZeM5ZeO5ZeR5ZeSXCJdLFxuW1wiOGZiNmExXCIsXCLll5Pll5fll5jll5vll57ll6Lll6nll7bll7/lmIXlmIjlmIrlmI1cIiw1LFwi5ZiZ5Zis5Ziw5Ziz5Zi15Zi35Zi55Zi75Zi85Zi95Zi/5ZmA5ZmB5ZmD5ZmE5ZmG5ZmJ5ZmL5ZmN5ZmP5ZmU5Zme5Zmg5Zmh5Zmi5Zmj5Zmm5Zmp5Zmt5Zmv5Zmx5Zmy5Zm15ZqE5ZqF5ZqI5ZqL5ZqM5ZqV5ZqZ5Zqa5Zqd5Zqe5Zqf5Zqm5Zqn5Zqo5Zqp5Zqr5Zqs5Zqt5Zqx5Zqz5Zq35Zq+5ZuF5ZuJ5ZuK5ZuL5ZuP5ZuQ5ZuM5ZuN5ZuZ5Zuc5Zud5Zuf5Zuh5ZukXCIsNCxcIuWbseWbq+WbrVwiXSxcbltcIjhmYjdhMVwiLFwi5Zu25Zu35ZyB5ZyC5ZyH5ZyK5ZyM5ZyR5ZyV5Zya5Zyb5Zyd5Zyg5Zyi5Zyj5Zyk5Zyl5Zyp5Zyq5Zys5Zyu5Zyv5Zyz5Zy05Zy95Zy+5Zy/5Z2F5Z2G5Z2M5Z2N5Z2S5Z2i5Z2l5Z2n5Z2o5Z2r5Z2tXCIsNCxcIuWds+WdtOWdteWdt+WdueWduuWdu+WdvOWdvuWegeWeg+WejOWelOWel+WemeWemuWenOWeneWenuWen+WeoeWeleWep+WeqOWeqeWerOWeuOWeveWfh+WfiOWfjOWfj+WfleWfneWfnuWfpOWfpuWfp+WfqeWfreWfsOWfteWftuWfuOWfveWfvuWfv+Wgg+WghOWgiOWgieWfoVwiXSxcbltcIjhmYjhhMVwiLFwi5aCM5aCN5aCb5aCe5aCf5aCg5aCm5aCn5aCt5aCy5aC55aC/5aGJ5aGM5aGN5aGP5aGQ5aGV5aGf5aGh5aGk5aGn5aGo5aG45aG85aG/5aKA5aKB5aKH5aKI5aKJ5aKK5aKM5aKN5aKP5aKQ5aKU5aKW5aKd5aKg5aKh5aKi5aKm5aKp5aKx5aKy5aOE5aK85aOC5aOI5aON5aOO5aOQ5aOS5aOU5aOW5aOa5aOd5aOh5aOi5aOp5aOz5aSF5aSG5aSL5aSM5aSS5aST5aSU6JmB5aSd5aSh5aSj5aSk5aSo5aSv5aSw5aSz5aS15aS25aS/5aWD5aWG5aWS5aWT5aWZ5aWb5aWd5aWe5aWf5aWh5aWj5aWr5aWtXCJdLFxuW1wiOGZiOWExXCIsXCLlpa/lpbLlpbXlpbblpbnlpbvlpbzlpovlpozlpo7lppLlppXlppflpp/lpqTlpqflpq3lpq7lpq/lprDlprPlprflprrlprzlp4Hlp4Plp4Tlp4jlp4rlp43lp5Llp53lp57lp5/lp6Plp6Tlp6flp67lp6/lp7Hlp7Llp7Tlp7flqIDlqITlqIzlqI3lqI7lqJLlqJPlqJ7lqKPlqKTlqKflqKjlqKrlqK3lqLDlqYTlqYXlqYflqYjlqYzlqZDlqZXlqZ7lqaPlqaXlqaflqa3lqbflqbrlqbvlqb7lqovlqpDlqpPlqpblqpnlqpzlqp7lqp/lqqDlqqLlqqflqqzlqrHlqrLlqrPlqrXlqrjlqrrlqrvlqr9cIl0sXG5bXCI4ZmJhYTFcIixcIuWrhOWrhuWriOWrj+WrmuWrnOWroOWrpeWrquWrruWrteWrtuWrveWsgOWsgeWsiOWsl+WstOWsmeWsm+WsneWsoeWspeWsreWsuOWtgeWti+WtjOWtkuWtluWtnuWtqOWtruWtr+WtvOWtveWtvuWtv+WugeWuhOWuhuWuiuWujuWukOWukeWuk+WulOWuluWuqOWuqeWurOWureWur+WuseWusuWut+WuuuWuvOWvgOWvgeWvjeWvj+WvllwiLDQsXCLlr6Dlr6/lr7Hlr7Tlr73lsIzlsJflsJ7lsJ/lsKPlsKblsKnlsKvlsKzlsK7lsLDlsLLlsLXlsLblsZnlsZrlsZzlsaLlsaPlsaflsajlsalcIl0sXG5bXCI4ZmJiYTFcIixcIuWxreWxsOWxtOWxteWxuuWxu+WxvOWxveWyh+WyiOWyiuWyj+WykuWyneWyn+WyoOWyouWyo+WypuWyquWysuWytOWyteWyuuWzieWzi+WzkuWzneWzl+WzruWzseWzsuWztOW0geW0huW0jeW0kuW0q+W0o+W0pOW0puW0p+W0seW0tOW0ueW0veW0v+W1guW1g+W1huW1iOW1leW1keW1meW1iuW1n+W1oOW1oeW1ouW1pOW1quW1reW1sOW1ueW1uuW1vuW1v+W2geW2g+W2iOW2iuW2kuW2k+W2lOW2leW2meW2m+W2n+W2oOW2p+W2q+W2sOW2tOW2uOW2ueW3g+W3h+W3i+W3kOW3juW3mOW3meW3oOW3pFwiXSxcbltcIjhmYmNhMVwiLFwi5bep5be45be55biA5biH5biN5biS5biU5biV5biY5bif5big5biu5bio5biy5bi15bi+5bmL5bmQ5bmJ5bmR5bmW5bmY5bmb5bmc5bme5bmo5bmqXCIsNCxcIuW5sOW6gOW6i+W6juW6ouW6pOW6peW6qOW6quW6rOW6seW6s+W6veW6vuW6v+W7huW7jOW7i+W7juW7keW7kuW7lOW7leW7nOW7nuW7peW7q+W8guW8huW8h+W8iOW8juW8meW8nOW8neW8oeW8ouW8o+W8pOW8qOW8q+W8rOW8ruW8sOW8tOW8tuW8u+W8veW8v+W9gOW9hOW9heW9h+W9jeW9kOW9lOW9mOW9m+W9oOW9o+W9pOW9p1wiXSxcbltcIjhmYmRhMVwiLFwi5b2v5b2y5b205b215b245b265b295b2+5b6J5b6N5b6P5b6W5b6c5b6d5b6i5b6n5b6r5b6k5b6s5b6v5b6w5b6x5b645b+E5b+H5b+I5b+J5b+L5b+QXCIsNCxcIuW/nuW/oeW/ouW/qOW/qeW/quW/rOW/reW/ruW/r+W/suW/s+W/tuW/uuW/vOaAh+aAiuaAjeaAk+aAlOaAl+aAmOaAmuaAn+aApOaAreaAs+aAteaBgOaBh+aBiOaBieaBjOaBkeaBlOaBluaBl+aBneaBoeaBp+aBseaBvuaBv+aCguaChuaCiOaCiuaCjuaCkeaCk+aCleaCmOaCneaCnuaCouaCpOaCpeaCqOaCsOaCseaCt1wiXSxcbltcIjhmYmVhMVwiLFwi5oK75oK+5oOC5oOE5oOI5oOJ5oOK5oOL5oOO5oOP5oOU5oOV5oOZ5oOb5oOd5oOe5oOi5oOl5oOy5oO15oO45oO85oO95oSC5oSH5oSK5oSM5oSQXCIsNCxcIuaEluaEl+aEmeaEnOaEnuaEouaEquaEq+aEsOaEseaEteaEtuaEt+aEueaFgeaFheaFhuaFieaFnuaFoOaFrOaFsuaFuOaFu+aFvOaFv+aGgOaGgeaGg+aGhOaGi+aGjeaGkuaGk+aGl+aGmOaGnOaGneaGn+aGoOaGpeaGqOaGquaGreaGuOaGueaGvOaHgOaHgeaHguaHjuaHj+aHleaHnOaHneaHnuaHn+aHoeaHouaHp+aHqeaHpVwiXSxcbltcIjhmYmZhMVwiLFwi5oes5oet5oev5oiB5oiD5oiE5oiH5oiT5oiV5oic5oig5oii5oij5oin5oip5oir5oi55oi95omC5omD5omE5omG5omM5omQ5omR5omS5omU5omW5oma5omc5omk5omt5omv5omz5om65om95oqN5oqO5oqP5oqQ5oqm5oqo5oqz5oq25oq35oq65oq+5oq/5ouE5ouO5ouV5ouW5oua5ouq5ouy5ou05ou85ou95oyD5oyE5oyK5oyL5oyN5oyQ5oyT5oyW5oyY5oyp5oyq5oyt5oy15oy25oy55oy85o2B5o2C5o2D5o2E5o2G5o2K5o2L5o2O5o2S5o2T5o2U5o2Y5o2b5o2l5o2m5o2s5o2t5o2x5o205o21XCJdLFxuW1wiOGZjMGExXCIsXCLmjbjmjbzmjb3mjb/mjoLmjoTmjofmjormjpDmjpTmjpXmjpnmjprmjp7mjqTmjqbmjq3mjq7mjq/mjr3mj4Hmj4Xmj4jmj47mj5Hmj5Pmj5Tmj5Xmj5zmj6Dmj6Xmj6rmj6zmj7Lmj7Pmj7Xmj7jmj7nmkInmkIrmkJDmkJLmkJTmkJjmkJ7mkKDmkKLmkKTmkKXmkKnmkKrmkK/mkLDmkLXmkL3mkL/mkYvmkY/mkZHmkZLmkZPmkZTmkZrmkZvmkZzmkZ3mkZ/mkaDmkaHmkaPmka3mkbPmkbTmkbvmkb3mkoXmkofmko/mkpDmkpHmkpjmkpnmkpvmkp3mkp/mkqHmkqPmkqbmkqjmkqzmkrPmkr3mkr7mkr9cIl0sXG5bXCI4ZmMxYTFcIixcIuaThOaTieaTiuaTi+aTjOaTjuaTkOaTkeaTleaTl+aTpOaTpeaTqeaTquaTreaTsOaTteaTt+aTu+aTv+aUgeaUhOaUiOaUieaUiuaUj+aUk+aUlOaUluaUmeaUm+aUnuaUn+aUouaUpuaUqeaUruaUseaUuuaUvOaUveaVg+aVh+aVieaVkOaVkuaVlOaVn+aVoOaVp+aVq+aVuuaVveaWgeaWheaWiuaWkuaWleaWmOaWneaWoOaWo+aWpuaWruaWsuaWs+aWtOaWv+aXguaXiOaXieaXjuaXkOaXlOaXluaXmOaXn+aXsOaXsuaXtOaXteaXueaXvuaXv+aYgOaYhOaYiOaYieaYjeaYkeaYkuaYleaYluaYnVwiXSxcbltcIjhmYzJhMVwiLFwi5pie5pih5pii5pij5pik5pim5pip5piq5pir5pis5piu5piw5pix5piz5pi55pi35pmA5pmF5pmG5pmK5pmM5pmR5pmO5pmX5pmY5pmZ5pmb5pmc5pmg5pmh5pu75pmq5pmr5pms5pm+5pmz5pm15pm/5pm35pm45pm55pm75pqA5pm85pqL5pqM5pqN5pqQ5pqS5pqZ5pqa5pqb5pqc5pqf5pqg5pqk5pqt5pqx5pqy5pq15pq75pq/5puA5puC5puD5puI5puM5puO5puP5puU5pub5puf5puo5pur5pus5puu5pu65pyF5pyH5pyO5pyT5pyZ5pyc5pyg5pyi5pyz5py+5p2F5p2H5p2I5p2M5p2U5p2V5p2dXCJdLFxuW1wiOGZjM2ExXCIsXCLmnabmnazmna7mnbTmnbbmnbvmnoHmnoTmno7mno/mnpHmnpPmnpbmnpjmnpnmnpvmnrDmnrHmnrLmnrXmnrvmnrzmnr3mn7nmn4Dmn4Lmn4Pmn4Xmn4jmn4nmn5Lmn5fmn5nmn5zmn6Hmn6bmn7Dmn7Lmn7bmn7fmoZLmoJTmoJnmoJ3moJ/moKjmoKfmoKzmoK3moK/moLDmoLHmoLPmoLvmoL/moYTmoYXmoYrmoYzmoZXmoZfmoZjmoZvmoavmoa5cIiw0LFwi5qG15qG55qG65qG75qG85qKC5qKE5qKG5qKI5qKW5qKY5qKa5qKc5qKh5qKj5qKl5qKp5qKq5qKu5qKy5qK75qOF5qOI5qOM5qOPXCJdLFxuW1wiOGZjNGExXCIsXCLmo5Dmo5Hmo5Pmo5bmo5nmo5zmo53mo6Xmo6jmo6rmo6vmo6zmo63mo7Dmo7Hmo7Xmo7bmo7vmo7zmo73mpIbmpInmpIrmpJDmpJHmpJPmpJbmpJfmpLHmpLPmpLXmpLjmpLvmpYLmpYXmpYnmpY7mpZfmpZvmpaPmpaTmpaXmpabmpajmpanmpazmpbDmpbHmpbLmpbrmpbvmpb/mpoDmpo3mppLmppbmppjmpqHmpqXmpqbmpqjmpqvmpq3mpq/mprfmprjmprrmprzmp4Xmp4jmp5Hmp5bmp5fmp6Lmp6Xmp67mp6/mp7Hmp7Pmp7Xmp77mqIDmqIHmqIPmqI/mqJHmqJXmqJrmqJ3mqKDmqKTmqKjmqLDmqLJcIl0sXG5bXCI4ZmM1YTFcIixcIuaotOaot+aou+aovuaov+apheaphuapieapiuapjuapkOapkeapkuapleapluapm+appOapp+apquapseaps+apvuaqgeaqg+aqhuaqh+aqieaqi+aqkeaqm+aqneaqnuaqn+aqpeaqq+aqr+aqsOaqseaqtOaqveaqvuaqv+arhuarieariOarjOarkOarlOarlearluarnOarnearpOarp+arrOarsOarsearsuarvOarveasguasg+ashuash+asieasj+askOaskeasl+asm+asnuaspOasqOasq+asrOasr+asteastuasu+asv+athuatiuatjeatkuatluatmOatneatoOatp+atq+atruatsOatteatvVwiXSxcbltcIjhmYzZhMVwiLFwi5q2+5q6C5q6F5q6X5q6b5q6f5q6g5q6i5q6j5q6o5q6p5q6s5q6t5q6u5q6w5q645q655q695q6+5q+D5q+E5q+J5q+M5q+W5q+a5q+h5q+j5q+m5q+n5q+u5q+x5q+35q+55q+/5rCC5rCE5rCF5rCJ5rCN5rCO5rCQ5rCS5rCZ5rCf5rCm5rCn5rCo5rCs5rCu5rCz5rC15rC25rC65rC75rC/5rGK5rGL5rGN5rGP5rGS5rGU5rGZ5rGb5rGc5rGr5rGt5rGv5rG05rG25rG45rG55rG75rKF5rKG5rKH5rKJ5rKU5rKV5rKX5rKY5rKc5rKf5rKw5rKy5rK05rOC5rOG5rON5rOP5rOQ5rOR5rOS5rOU5rOWXCJdLFxuW1wiOGZjN2ExXCIsXCLms5rms5zms6Dms6fms6nms6vms6zms67ms7Lms7TmtITmtIfmtIrmtI7mtI/mtJHmtJPmtJrmtKbmtKfmtKjmsafmtK7mtK/mtLHmtLnmtLzmtL/mtZfmtZ7mtZ/mtaHmtaXmtafmta/mtbDmtbzmtoLmtofmtpHmtpLmtpTmtpbmtpfmtpjmtqrmtqzmtrTmtrfmtrnmtr3mtr/mt4Tmt4jmt4rmt47mt4/mt5bmt5vmt53mt5/mt6Dmt6Lmt6Xmt6nmt6/mt7Dmt7Tmt7bmt7zmuIDmuITmuJ7muKLmuKfmuLLmuLbmuLnmuLvmuLzmuYTmuYXmuYjmuYnmuYvmuY/muZHmuZLmuZPmuZTmuZfmuZzmuZ3muZ5cIl0sXG5bXCI4ZmM4YTFcIixcIua5oua5o+a5qOa5s+a5u+a5vea6jea6k+a6mea6oOa6p+a6rea6rua6sea6s+a6u+a6v+a7gOa7gea7g+a7h+a7iOa7iua7jea7jua7j+a7q+a7rea7rua7uea7u+a7vea8hOa8iOa8iua8jOa8jea8lua8mOa8mua8m+a8pua8qea8qua8r+a8sOa8s+a8tua8u+a8vOa8rea9j+a9kea9kua9k+a9l+a9mea9mua9nea9nua9oea9oua9qOa9rOa9vea9vua+g+a+h+a+iOa+i+a+jOa+jea+kOa+kua+k+a+lOa+lua+mua+n+a+oOa+pea+pua+p+a+qOa+rua+r+a+sOa+tea+tua+vOa/hea/h+a/iOa/ilwiXSxcbltcIjhmYzlhMVwiLFwi5r+a5r+e5r+o5r+p5r+w5r+15r+55r+85r+954CA54CF54CG54CH54CN54CX54Cg54Cj54Cv54C054C354C554C854GD54GE54GI54GJ54GK54GL54GU54GV54Gd54Ge54GO54Gk54Gl54Gs54Gu54G154G254G+54KB54KF54KG54KUXCIsNCxcIueCm+eCpOeCq+eCsOeCseeCtOeCt+eDiueDkeeDk+eDlOeDleeDlueDmOeDnOeDpOeDuueEg1wiLDQsXCLnhIvnhIznhI/nhJ7nhKDnhKvnhK3nhK/nhLDnhLHnhLjnhYHnhYXnhYbnhYfnhYrnhYvnhZDnhZLnhZfnhZrnhZznhZ7nhaBcIl0sXG5bXCI4ZmNhYTFcIixcIueFqOeFueeGgOeGheeGh+eGjOeGkueGmueGm+eGoOeGoueGr+eGsOeGsueGs+eGuueGv+eHgOeHgeeHhOeHi+eHjOeHk+eHlueHmeeHmueHnOeHuOeHvueIgOeIh+eIiOeIieeIk+eIl+eImueIneeIn+eIpOeIq+eIr+eItOeIuOeIueeJgeeJgueJg+eJheeJjueJj+eJkOeJk+eJleeJlueJmueJnOeJnueJoOeJo+eJqOeJq+eJrueJr+eJseeJt+eJuOeJu+eJvOeJv+eKhOeKieeKjeeKjueKk+eKm+eKqOeKreeKrueKseeKtOeKvueLgeeLh+eLieeLjOeLleeLlueLmOeLn+eLpeeLs+eLtOeLuueLu1wiXSxcbltcIjhmY2JhMVwiLFwi54u+54yC54yE54yF54yH54yL54yN54yS54yT54yY54yZ54ye54yi54yk54yn54yo54ys54yx54yy54y154y654y754y9542D542N542Q542S542W542Y542d542e542f542g542m542n542p542r542s542u542v542x542354255428546A546B546D546F546G546O546Q546T546V546X546Y546c546e546f546g546i546l546m546q546r546t54615463546554685469546/54+F54+G54+J54+L54+M54+P54+S54+T54+W54+Z54+d54+h54+j54+m54+n54+p54+054+154+354+554+654+754+9XCJdLFxuW1wiOGZjY2ExXCIsXCLnj7/nkIDnkIHnkITnkIfnkIrnkJHnkJrnkJvnkKTnkKbnkKhcIiw5LFwi55C555GA55GD55GE55GG55GH55GL55GN55GR55GS55GX55Gd55Gi55Gm55Gn55Go55Gr55Gt55Gu55Gx55Gy55KA55KB55KF55KG55KH55KJ55KP55KQ55KR55KS55KY55KZ55Ka55Kc55Kf55Kg55Kh55Kj55Km55Ko55Kp55Kq55Kr55Ku55Kv55Kx55Ky55K155K555K755K/55OI55OJ55OM55OQ55OT55OY55Oa55Ob55Oe55Of55Ok55Oo55Oq55Or55Ov55O055O655O755O855O/55SGXCJdLFxuW1wiOGZjZGExXCIsXCLnlJLnlJbnlJfnlKDnlKHnlKTnlKfnlKnnlKrnlK/nlLbnlLnnlL3nlL7nlL/nlYDnlYPnlYfnlYjnlY7nlZDnlZLnlZfnlZ7nlZ/nlaHnla/nlbHnlblcIiw1LFwi55aB55aF55aQ55aS55aT55aV55aZ55ac55ai55ak55a055a655a/55eA55eB55eE55eG55eM55eO55eP55eX55ec55ef55eg55eh55ek55en55es55eu55ev55ex55e555iA55iC55iD55iE55iH55iI55iK55iM55iP55iS55iT55iV55iW55iZ55ib55ic55id55ie55ij55il55im55ip55it55iy55iz55i155i455i5XCJdLFxuW1wiOGZjZWExXCIsXCLnmLrnmLznmYrnmYDnmYHnmYPnmYTnmYXnmYnnmYvnmZXnmZnnmZ/nmaTnmaXnma3nma7nma/nmbHnmbTnmoHnmoXnmoznmo3nmpXnmpvnmpznmp3nmp/nmqDnmqJcIiw2LFwi55qq55qt55q955uB55uF55uJ55uL55uM55uO55uU55uZ55ug55um55uo55us55uw55ux55u255u555u855yA55yG55yK55yO55yS55yU55yV55yX55yZ55ya55yc55yi55yo55yt55yu55yv55y055y155y255y555y955y+552C552F552G552K552N552O552P552S552W552X552c552e552f552g552iXCJdLFxuW1wiOGZjZmExXCIsXCLnnaTnnafnnarnnaznnbDnnbLnnbPnnbTnnbrnnb3nnoDnnoTnnoznno3nnpTnnpXnnpbnnprnnp/nnqLnnqfnnqrnnq7nnq/nnrHnnrXnnr7nn4Pnn4nnn5Hnn5Lnn5Xnn5nnn57nn5/nn6Dnn6Tnn6bnn6rnn6znn7Dnn7Hnn7Tnn7jnn7vnoIXnoIbnoInnoI3noI7noJHnoJ3noKHnoKLnoKPnoK3noK7noLDnoLXnoLfnoYPnoYTnoYfnoYjnoYznoY7noZLnoZznoZ7noaDnoaHnoaPnoaTnoajnoarnoa7nobrnob7noornoo/nopTnopjnoqHnop3nop7nop/noqTnoqjnoqznoq3norDnorHnorLnorNcIl0sXG5bXCI4ZmQwYTFcIixcIueiu+eiveeiv+ejh+ejiOejieejjOejjuejkuejk+ejleejluejpOejm+ejn+ejoOejoeejpuejquejsuejs+ekgOejtuejt+ejuueju+ejv+ekhuekjOekkOekmueknOeknuekn+ekoOekpeekp+ekqeekreekseektOekteeku+ekveekv+elhOelheelhueliueli+elj+elkeellOelmOelm+elnOelp+elqeelq+elsuelueelu+elvOelvuemi+emjOemkeemk+emlOemleemluemmOemm+emnOemoeemqOemqeemq+emr+emseemtOemuOemu+enguenhOenh+eniOeniuenj+enlOenluenmuenneennlwiXSxcbltcIjhmZDFhMVwiLFwi56eg56ei56el56eq56er56et56ex56e456e856iC56iD56iH56iJ56iK56iM56iR56iV56ib56ie56ih56in56ir56it56iv56iw56i056i156i456i556i656mE56mF56mH56mI56mM56mV56mW56mZ56mc56md56mf56mg56ml56mn56mq56mt56m156m456m+56qA56qC56qF56qG56qK56qL56qQ56qR56qU56qe56qg56qj56qs56qz56q156q556q756q856uG56uJ56uM56uO56uR56ub56uo56up56ur56us56ux56u056u756u956u+56yH56yU56yf56yj56yn56yp56yq56yr56yt56yu56yv56ywXCJdLFxuW1wiOGZkMmExXCIsXCLnrLHnrLTnrL3nrL/nrYDnrYHnrYfnrY7nrZXnraDnraTnrabnrannrarnra3nra/nrbLnrbPnrbfnroTnronnro7nrpDnrpHnrpbnrpvnrp7nrqDnrqXnrqznrq/nrrDnrrLnrrXnrrbnrrrnrrvnrrznrr3nr4Lnr4Xnr4jnr4rnr5Tnr5bnr5fnr5nnr5rnr5vnr6jnr6rnr7Lnr7Tnr7Xnr7jnr7nnr7rnr7znr77nsIHnsILnsIPnsITnsIbnsInnsIvnsIznsI7nsI/nsJnnsJvnsKDnsKXnsKbnsKjnsKznsLHnsLPnsLTnsLbnsLnnsLrnsYbnsYrnsZXnsZHnsZLnsZPnsZlcIiw1XSxcbltcIjhmZDNhMVwiLFwi57Gh57Gj57Gn57Gp57Gt57Gu57Gw57Gy57G557G857G957KG57KH57KP57KU57Ke57Kg57Km57Kw57K257K357K657K757K857K/57OE57OH57OI57OJ57ON57OP57OT57OU57OV57OX57OZ57Oa57Od57Om57Op57Or57O157SD57SH57SI57SJ57SP57SR57SS57ST57SW57Sd57Se57Sj57Sm57Sq57St57Sx57S857S957S+57WA57WB57WH57WI57WN57WR57WT57WX57WZ57Wa57Wc57Wd57Wl57Wn57Wq57Ww57W457W657W757W/57aB57aC57aD57aF57aG57aI57aL57aM57aN57aR57aW57aX57adXCJdLFxuW1wiOGZkNGExXCIsXCLntp7ntqbntqfntqrntrPntrbntrfntrnnt4JcIiw0LFwi57eM57eN57eO57eX57eZ57iA57ei57el57em57eq57er57et57ex57e157e257e557e657iI57iQ57iR57iV57iX57ic57id57ig57in57io57is57it57iv57iz57i257i/57mE57mF57mH57mO57mQ57mS57mY57mf57mh57mi57ml57mr57mu57mv57mz57m457m+57qB57qG57qH57qK57qN57qR57qV57qY57qa57qd57qe57y857y757y957y+57y/572D572E572H572P572S572T572b572c572d572h572j572k572l572m572tXCJdLFxuW1wiOGZkNWExXCIsXCLnvbHnvb3nvb7nvb/nvoDnvovnvo3nvo/nvpDnvpHnvpbnvpfnvpznvqHnvqLnvqbnvqrnvq3nvrTnvrznvr/nv4Dnv4Pnv4jnv47nv4/nv5vnv5/nv6Pnv6Xnv6jnv6znv67nv6/nv7Lnv7rnv73nv77nv7/ogIfogIjogIrogI3ogI7ogI/ogJHogJPogJTogJbogJ3ogJ7ogJ/ogKDogKTogKbogKzogK7ogLDogLTogLXogLfogLnogLrogLzogL7ogYDogYTogaDogaTogaboga3ogbHogbXogoHogojogo7ogpzogp7ogqbogqfogqvogrjogrnog4jog43og4/og5Log5Tog5Xog5fog5jog6Dog63og65cIl0sXG5bXCI4ZmQ2YTFcIixcIuiDsOiDsuiDs+iDtuiDueiDuuiDvuiEg+iEi+iEluiEl+iEmOiEnOiEnuiEoOiEpOiEp+iErOiEsOiEteiEuuiEvOiFheiFh+iFiuiFjOiFkuiFl+iFoOiFoeiFp+iFqOiFqeiFreiFr+iFt+iGgeiGkOiGhOiGheiGhuiGi+iGjuiGluiGmOiGm+iGnuiGouiGruiGsuiGtOiGu+iHi+iHg+iHheiHiuiHjuiHj+iHleiHl+iHm+iHneiHnuiHoeiHpOiHq+iHrOiHsOiHseiHsuiHteiHtuiHuOiHueiHveiHv+iIgOiIg+iIj+iIk+iIlOiImeiImuiIneiIoeiIouiIqOiIsuiItOiIuuiJg+iJhOiJheiJhlwiXSxcbltcIjhmZDdhMVwiLFwi6ImL6ImO6ImP6ImR6ImW6Imc6Img6Imj6Imn6Imt6Im06Im76Im96Im/6IqA6IqB6IqD6IqE6IqH6IqJ6IqK6IqO6IqR6IqU6IqW6IqY6Iqa6Iqb6Iqg6Iqh6Iqj6Iqk6Iqn6Iqo6Iqp6Iqq6Iqu6Iqw6Iqy6Iq06Iq36Iq66Iq86Iq+6Iq/6IuG6IuQ6IuV6Iua6Iug6Iui6Iuk6Iuo6Iuq6Iut6Iuv6Iu26Iu36Iu96Iu+6IyA6IyB6IyH6IyI6IyK6IyL6I2U6Iyb6Iyd6Iye6Iyf6Iyh6Iyi6Iys6Iyt6Iyu6Iyw6Iyz6Iy36Iy66Iy86Iy96I2C6I2D6I2E6I2H6I2N6I2O6I2R6I2V6I2W6I2X6I2w6I24XCJdLFxuW1wiOGZkOGExXCIsXCLojb3ojb/ojoDojoLojoTojobojo3ojpLojpTojpXojpjojpnojpvojpzojp3ojqbojqfojqnojqzojr7ojr/oj4Doj4foj4noj4/oj5Doj5Hoj5Toj53ojZPoj6joj6roj7boj7joj7noj7zokIHokIbokIrokI/okJHokJXokJnojq3okK/okLnokYXokYfokYjokYrokY3okY/okZHokZLokZbokZjokZnokZrokZzokaDokaTokaXokafokarokbDokbPokbTokbbokbjokbzokb3okoHokoXokpLokpPokpXokp7okqbokqjokqnokqrokq/okrHokrTokrrokr3okr7ok4Dok4Lok4fok4jok4zok4/ok5NcIl0sXG5bXCI4ZmQ5YTFcIixcIuiTnOiTp+iTquiTr+iTsOiTseiTsuiTt+iUsuiTuuiTu+iTveiUguiUg+iUh+iUjOiUjuiUkOiUnOiUnuiUouiUo+iUpOiUpeiUp+iUquiUq+iUr+iUs+iUtOiUtuiUv+iVhuiVj1wiLDQsXCLolZbolZnolZxcIiw2LFwi6JWk6JWr6JWv6JW56JW66JW76JW96JW/6JaB6JaF6JaG6JaJ6JaL6JaM6JaP6JaT6JaY6Jad6Jaf6Jag6Jai6Jal6Jan6Ja06Ja26Ja36Ja46Ja86Ja96Ja+6Ja/6JeC6JeH6JeK6JeL6JeO6Jat6JeY6Jea6Jef6Jeg6Jem6Jeo6Jet6Jez6Je26Je8XCJdLFxuW1wiOGZkYWExXCIsXCLol7/omIDomITomIXomI3omI7omJDomJHomJLomJjomJnomJvomJ7omKHomKfomKnomLbomLjomLromLzomL3omYDomYLomYbomZLomZPomZbomZfomZjomZnomZ3omaBcIiw0LFwi6Jmp6Jms6Jmv6Jm16Jm26Jm36Jm66JqN6JqR6JqW6JqY6Jqa6Jqc6Jqh6Jqm6Jqn6Jqo6Jqt6Jqx6Jqz6Jq06Jq16Jq36Jq46Jq56Jq/6JuA6JuB6JuD6JuF6JuR6JuS6JuV6JuX6Jua6Juc6Jug6Juj6Jul6Jun6JqI6Ju66Ju86Ju96JyE6JyF6JyH6JyL6JyO6JyP6JyQ6JyT6JyU6JyZ6Jye6Jyf6Jyh6JyjXCJdLFxuW1wiOGZkYmExXCIsXCLonKjonK7onK/onLHonLLonLnonLronLzonL3onL7onYDonYPonYXonY3onZjonZ3onaHonaTonaXona/onbHonbLonbvonoNcIiw2LFwi6J6L6J6M6J6Q6J6T6J6V6J6X6J6Y6J6Z6J6e6J6g6J6j6J6n6J6s6J6t6J6u6J6x6J616J6+6J6/6J+B6J+I6J+J6J+K6J+O6J+V6J+W6J+Z6J+a6J+c6J+f6J+i6J+j6J+k6J+q6J+r6J+t6J+x6J+z6J+46J+66J+/6KCB6KCD6KCG6KCJ6KCK6KCL6KCQ6KCZ6KCS6KCT6KCU6KCY6KCa6KCb6KCc6KCe6KCf6KCo6KCt6KCu6KCw6KCy6KC1XCJdLFxuW1wiOGZkY2ExXCIsXCLooLrooLzooYHooYPooYXooYjooYnooYrooYvooY7ooZHooZXooZbooZjooZrooZzooZ/ooaDooaTooanoobHoobnoobvoooDoopjooproopvoopzoop/ooqDooqjooqroorroor3oor7oo4Doo4pcIiw0LFwi6KOR6KOS6KOT6KOb6KOe6KOn6KOv6KOw6KOx6KO16KO36KSB6KSG6KSN6KSO6KSP6KSV6KSW6KSY6KSZ6KSa6KSc6KSg6KSm6KSn6KSo6KSw6KSx6KSy6KS16KS56KS66KS+6KWA6KWC6KWF6KWG6KWJ6KWP6KWS6KWX6KWa6KWb6KWc6KWh6KWi6KWj6KWr6KWu6KWw6KWz6KW16KW6XCJdLFxuW1wiOGZkZGExXCIsXCLopbvopbzopb3oponopo3oppDoppToppXoppvoppzopp/opqDopqXoprDoprToprXoprboprfoprzop5RcIiw0LFwi6Kel6Kep6Ker6Ket6Kex6Kez6Ke26Ke56Ke96Ke/6KiE6KiF6KiH6KiP6KiR6KiS6KiU6KiV6Kie6Kig6Kii6Kik6Kim6Kir6Kis6Kiv6Ki16Ki36Ki96Ki+6KmA6KmD6KmF6KmH6KmJ6KmN6KmO6KmT6KmW6KmX6KmY6Kmc6Kmd6Kmh6Kml6Kmn6Km16Km26Km36Km56Km66Km76Km+6Km/6KqA6KqD6KqG6KqL6KqP6KqQ6KqS6KqW6KqX6KqZ6Kqf6Kqn6Kqp6Kqu6Kqv6KqzXCJdLFxuW1wiOGZkZWExXCIsXCLoqrboqrfoqrvoqr7oq4Poq4boq4joq4noq4roq5Hoq5Poq5Toq5Xoq5foq53oq5/oq6zoq7Doq7Toq7Xoq7boq7zoq7/orIXorIborIvorJHorJzorJ7orJ/orIrorK3orLDorLforLzorYJcIiw0LFwi6K2I6K2S6K2T6K2U6K2Z6K2N6K2e6K2j6K2t6K226K246K256K286K2+6K6B6K6E6K6F6K6L6K6N6K6P6K6U6K6V6K6c6K6e6K6f6LC46LC56LC96LC+6LGF6LGH6LGJ6LGL6LGP6LGR6LGT6LGU6LGX6LGY6LGb6LGd6LGZ6LGj6LGk6LGm6LGo6LGp6LGt6LGz6LG16LG26LG76LG+6LKGXCJdLFxuW1wiOGZkZmExXCIsXCLosofosovospDospLospPospnospvospzosqTosrnosrros4Xos4bos4nos4vos4/os5bos5Xos5nos53os6Hos6jos6zos6/os7Dos7Los7Xos7fos7jos77os7/otIHotIPotInotJLotJfotJvotaXotanotazota7otb/otoLotoTotojoto3otpDotpHotpXotp7otp/otqDotqbotqvotqzotq/otrLotrXotrfotrnotrvot4Dot4Xot4bot4fot4jot4rot47ot5Hot5Tot5Xot5fot5not6Tot6Xot6fot6zot7Dotrzot7Hot7Lot7Tot73ouIHouITouIXouIbouIvouJHouJTouJbouKDouKHouKJcIl0sXG5bXCI4ZmUwYTFcIixcIui4o+i4pui4p+i4sei4s+i4tui4t+i4uOi4uei4vei5gOi5gei5i+i5jei5jui5j+i5lOi5m+i5nOi5nei5nui5oei5oui5qei5rOi5rei5r+i5sOi5sei5uei5uui5u+i6gui6g+i6iei6kOi6kui6lei6mui6m+i6nei6nui6oui6p+i6qei6rei6rui6s+i6tei6uui6u+i7gOi7gei7g+i7hOi7h+i7j+i7kei7lOi7nOi7qOi7rui7sOi7sei7t+i7uei7uui7rei8gOi8gui8h+i8iOi8j+i8kOi8lui8l+i8mOi8nui8oOi8oei8o+i8pei8p+i8qOi8rOi8rei8rui8tOi8tei8tui8t+i8uui9gOi9gVwiXSxcbltcIjhmZTFhMVwiLFwi6L2D6L2H6L2P6L2RXCIsNCxcIui9mOi9nei9nui9pei+nei+oOi+oei+pOi+pei+pui+tei+tui+uOi+vui/gOi/gei/hui/iui/i+i/jei/kOi/kui/k+i/lei/oOi/o+i/pOi/qOi/rui/sei/tei/tui/u+i/vumAgumAhOmAiOmAjOmAmOmAm+mAqOmAqemAr+mAqumArOmAremAs+mAtOmAt+mAv+mBg+mBhOmBjOmBm+mBnemBoumBpumBp+mBrOmBsOmBtOmBuemChemCiOmCi+mCjOmCjumCkOmClemCl+mCmOmCmemCm+mCoOmCoemCoumCpemCsOmCsumCs+mCtOmCtumCvemDjOmCvumDg1wiXSxcbltcIjhmZTJhMVwiLFwi6YOE6YOF6YOH6YOI6YOV6YOX6YOY6YOZ6YOc6YOd6YOf6YOl6YOS6YO26YOr6YOv6YOw6YO06YO+6YO/6YSA6YSE6YSF6YSG6YSI6YSN6YSQ6YSU6YSW6YSX6YSY6YSa6YSc6YSe6YSg6YSl6YSi6YSj6YSn6YSp6YSu6YSv6YSx6YS06YS26YS36YS56YS66YS86YS96YWD6YWH6YWI6YWP6YWT6YWX6YWZ6YWa6YWb6YWh6YWk6YWn6YWt6YW06YW56YW66YW76YaB6YaD6YaF6YaG6YaK6YaO6YaR6YaT6YaU6YaV6YaY6Yae6Yah6Yam6Yao6Yas6Yat6Yau6Yaw6Yax6Yay6Yaz6Ya26Ya76Ya86Ya96Ya/XCJdLFxuW1wiOGZlM2ExXCIsXCLph4Lph4Pph4Xph5Pph5Tph5fph5nph5rph57ph6Tph6Xph6nph6rph6xcIiw1LFwi6Ye36Ye56Ye76Ye96YiA6YiB6YiE6YiF6YiG6YiH6YiJ6YiK6YiM6YiQ6YiS6YiT6YiW6YiY6Yic6Yid6Yij6Yik6Yil6Yim6Yio6Yiu6Yiv6Yiw6Yiz6Yi16Yi26Yi46Yi56Yi66Yi86Yi+6YmA6YmC6YmD6YmG6YmH6YmK6YmN6YmO6YmP6YmR6YmY6YmZ6Ymc6Ymd6Ymg6Ymh6Yml6Ymn6Ymo6Ymp6Ymu6Ymv6Ymw6Ym1XCIsNCxcIumJu+mJvOmJvemJv+mKiOmKiemKiumKjemKjumKkumKl1wiXSxcbltcIjhmZTRhMVwiLFwi6YqZ6Yqf6Yqg6Yqk6Yql6Yqn6Yqo6Yqr6Yqv6Yqy6Yq26Yq46Yq66Yq76Yq86Yq96Yq/XCIsNCxcIumLhemLhumLh+mLiOmLi+mLjOmLjemLjumLkOmLk+mLlemLl+mLmOmLmemLnOmLnemLn+mLoOmLoemLo+mLpemLp+mLqOmLrOmLrumLsOmLuemLu+mLv+mMgOmMgumMiOmMjemMkemMlOmMlemMnOmMnemMnumMn+mMoemMpOmMpemMp+mMqemMqumMs+mMtOmMtumMt+mNh+mNiOmNiemNkOmNkemNkumNlemNl+mNmOmNmumNnumNpOmNpemNp+mNqemNqumNremNr+mNsOmNsemNs+mNtOmNtlwiXSxcbltcIjhmZTVhMVwiLFwi6Y266Y296Y2/6Y6A6Y6B6Y6C6Y6I6Y6K6Y6L6Y6N6Y6P6Y6S6Y6V6Y6Y6Y6b6Y6e6Y6h6Y6j6Y6k6Y6m6Y6o6Y6r6Y606Y616Y626Y666Y6p6Y+B6Y+E6Y+F6Y+G6Y+H6Y+JXCIsNCxcIumPk+mPmemPnOmPnumPn+mPoumPpumPp+mPuemPt+mPuOmPuumPu+mPvemQgemQgumQhOmQiOmQiemQjemQjumQj+mQlemQlumQl+mQn+mQrumQr+mQsemQsumQs+mQtOmQu+mQv+mQvemRg+mRhemRiOmRiumRjOmRlemRmemRnOmRn+mRoemRo+mRqOmRq+mRremRrumRr+mRsemRsumShOmSg+mVuOmVuVwiXSxcbltcIjhmZTZhMVwiLFwi6ZW+6ZaE6ZaI6ZaM6ZaN6ZaO6Zad6Zae6Zaf6Zah6Zam6Zap6Zar6Zas6Za06Za26Za66Za96Za/6ZeG6ZeI6ZeJ6ZeL6ZeQ6ZeR6ZeS6ZeT6ZeZ6Zea6Zed6Zee6Zef6Zeg6Zek6Zem6Zid6Zie6Zii6Zik6Zil6Zim6Zis6Zix6Ziz6Zi36Zi46Zi56Zi66Zi86Zi96ZmB6ZmS6ZmU6ZmW6ZmX6ZmY6Zmh6Zmu6Zm06Zm76Zm86Zm+6Zm/6ZqB6ZqC6ZqD6ZqE6ZqJ6ZqR6ZqW6Zqa6Zqd6Zqf6Zqk6Zql6Zqm6Zqp6Zqu6Zqv6Zqz6Zq66ZuK6ZuS5bay6ZuY6Zua6Zud6Zue6Zuf6Zup6Zuv6Zux6Zu66ZyCXCJdLFxuW1wiOGZlN2ExXCIsXCLpnIPpnIXpnInpnJrpnJvpnJ3pnKHpnKLpnKPpnKjpnLHpnLPpnYHpnYPpnYrpnY7pnY/pnZXpnZfpnZjpnZrpnZvpnaPpnafpnarpna7pnbPpnbbpnbfpnbjpnbvpnb3pnb/pnoDpnonpnpXpnpbpnpfpnpnpnprpnp7pnp/pnqLpnqzpnq7pnrHpnrLpnrXpnrbpnrjpnrnpnrrpnrzpnr7pnr/pn4Hpn4Tpn4Xpn4fpn4npn4rpn4zpn43pn47pn5Dpn5Hpn5Tpn5fpn5jpn5npn53pn57pn6Dpn5vpn6Hpn6Tpn6/pn7Hpn7Tpn7fpn7jpn7rpoIfpoIrpoJnpoI3poI7poJTpoJbpoJzpoJ7poKDpoKPpoKZcIl0sXG5bXCI4ZmU4YTFcIixcIumgq+mgrumgr+mgsOmgsumgs+mgtemgpemgvumhhOmhh+mhiumhkemhkumhk+mhlumhl+mhmemhmumhoumho+mhpemhpumhqumhrOmiq+miremirumisOmitOmit+miuOmiuumiu+miv+mjgumjhemjiOmjjOmjoemjo+mjpemjpumjp+mjqumjs+mjtumkgumkh+mkiOmkkemklemklumkl+mkmumkm+mknOmkn+mkoumkpumkp+mkq+mksVwiLDQsXCLppLnppLrppLvppLzppYDppYHppYbppYfppYjppY3ppY7ppZTppZjppZnppZvppZzppZ7ppZ/ppaDpppvppp3ppp/ppqbpprDpprHpprLpprVcIl0sXG5bXCI4ZmU5YTFcIixcIummuemmuummvemmv+mng+mniemnk+mnlOmnmemnmumnnOmnnumnp+mnqumnq+mnrOmnsOmntOmntemnuemnvemnvumogumog+mohOmoi+mojOmokOmokemolumonumooOmooumoo+mopOmop+moremorumos+motemotumouOmph+mpgemphOmpiumpi+mpjOmpjumpkemplOmplumpnemqqumqrOmqrumqr+mqsumqtOmqtemqtumquemqu+mqvumqv+mrgemrg+mrhumriOmrjumrkOmrkumrlemrlumrl+mrm+mrnOmroOmrpOmrpemrp+mrqemrrOmrsumrs+mrtemruemruumrvemrv1wiLDRdLFxuW1wiOGZlYWExXCIsXCLprITprIXprIjprInprIvprIzprI3prI7prJDprJLprJbprJnprJvprJzprKDprKbprKvprK3prLPprLTprLXprLfprLnprLrprL3prYjprYvprYzprZXprZbprZfprZvprZ7praHpraPpraXprabprajprapcIiw0LFwi6a2z6a216a236a246a256a2/6a6A6a6E6a6F6a6G6a6H6a6J6a6K6a6L6a6N6a6P6a6Q6a6U6a6a6a6d6a6e6a6m6a6n6a6p6a6s6a6w6a6x6a6y6a636a646a676a686a6+6a6/6a+B6a+H6a+I6a+O6a+Q6a+X6a+Y6a+d6a+f6a+l6a+n6a+q6a+r6a+v6a+z6a+36a+4XCJdLFxuW1wiOGZlYmExXCIsXCLpr7npr7rpr73pr7/psIDpsILpsIvpsI/psJHpsJbpsJjpsJnpsJrpsJzpsJ7psKLpsKPpsKZcIiw0LFwi6bCx6bC16bC26bC36bC96bGB6bGD6bGE6bGF6bGJ6bGK6bGO6bGP6bGQ6bGT6bGU6bGW6bGY6bGb6bGd6bGe6bGf6bGj6bGp6bGq6bGc6bGr6bGo6bGu6bGw6bGy6bG16bG36bG76bOm6bOy6bO36bO56bSL6bSC6bSR6bSX6bSY6bSc6bSd6bSe6bSv6bSw6bSy6bSz6bS06bS66bS86bWF6bS96bWC6bWD6bWH6bWK6bWT6bWU6bWf6bWj6bWi6bWl6bWp6bWq6bWr6bWw6bW26bW36bW7XCJdLFxuW1wiOGZlY2ExXCIsXCLptbzptb7ptoPptoTptobptorpto3pto7ptpLptpPptpXptpbptpfptpjptqHptqrptqzptq7ptrHptrXptrnptrzptr/pt4Ppt4fpt4npt4rpt5Tpt5Xpt5bpt5fpt5rpt57pt5/pt6Dpt6Xpt6fpt6npt6vpt67pt7Dpt7Ppt7Tpt77puIrpuILpuIfpuI7puJDpuJHpuJLpuJXpuJbpuJnpuJzpuJ3pubrpubvpubzpuoDpuoLpuoPpuoTpuoXpuofpuo7puo/pupbpupjpupvpup7puqTpuqjpuqzpuq7puq/purDpurPpurTpurXpu4bpu4jpu4vpu5Xpu5/pu6Tpu6fpu6zpu63pu67pu7Dpu7Hpu7Lpu7VcIl0sXG5bXCI4ZmVkYTFcIixcIum7uOm7v+m8gum8g+m8iem8j+m8kOm8kem8kum8lOm8lum8l+m8mem8mum8m+m8n+m8oum8pum8qum8q+m8r+m8sem8sum8tOm8t+m8uem8uum8vOm8vem8v+m9gem9g1wiLDQsXCLpvZPpvZXpvZbpvZfpvZjpvZrpvZ3pvZ7pvajpvanpva1cIiw0LFwi6b2z6b216b266b296b6P6b6Q6b6R6b6S6b6U6b6W6b6X6b6e6b6h6b6i6b6j6b6lXCJdXG5dXG4iLCJtb2R1bGUuZXhwb3J0cz17XCJ1Q2hhcnNcIjpbMTI4LDE2NSwxNjksMTc4LDE4NCwyMTYsMjI2LDIzNSwyMzgsMjQ0LDI0OCwyNTEsMjUzLDI1OCwyNzYsMjg0LDMwMCwzMjUsMzI5LDMzNCwzNjQsNDYzLDQ2NSw0NjcsNDY5LDQ3MSw0NzMsNDc1LDQ3Nyw1MDYsNTk0LDYxMCw3MTIsNzE2LDczMCw5MzAsOTM4LDk2Miw5NzAsMTAyNiwxMTA0LDExMDYsODIwOSw4MjE1LDgyMTgsODIyMiw4MjMxLDgyNDEsODI0NCw4MjQ2LDgyNTIsODM2NSw4NDUyLDg0NTQsODQ1OCw4NDcxLDg0ODIsODU1Niw4NTcwLDg1OTYsODYwMiw4NzEzLDg3MjAsODcyMiw4NzI2LDg3MzEsODczNyw4NzQwLDg3NDIsODc0OCw4NzUxLDg3NjAsODc2Niw4Nzc3LDg3ODEsODc4Nyw4ODAyLDg4MDgsODgxNiw4ODU0LDg4NTgsODg3MCw4ODk2LDg5NzksOTMyMiw5MzcyLDk1NDgsOTU4OCw5NjE2LDk2MjIsOTYzNCw5NjUyLDk2NjIsOTY3Miw5Njc2LDk2ODAsOTcwMiw5NzM1LDk3MzgsOTc5Myw5Nzk1LDExOTA2LDExOTA5LDExOTEzLDExOTE3LDExOTI4LDExOTQ0LDExOTQ3LDExOTUxLDExOTU2LDExOTYwLDExOTY0LDExOTc5LDEyMjg0LDEyMjkyLDEyMzEyLDEyMzE5LDEyMzMwLDEyMzUxLDEyNDM2LDEyNDQ3LDEyNTM1LDEyNTQzLDEyNTg2LDEyODQyLDEyODUwLDEyOTY0LDEzMjAwLDEzMjE1LDEzMjE4LDEzMjUzLDEzMjYzLDEzMjY3LDEzMjcwLDEzMzg0LDEzNDI4LDEzNzI3LDEzODM5LDEzODUxLDE0NjE3LDE0NzAzLDE0ODAxLDE0ODE2LDE0OTY0LDE1MTgzLDE1NDcxLDE1NTg1LDE2NDcxLDE2NzM2LDE3MjA4LDE3MzI1LDE3MzMwLDE3Mzc0LDE3NjIzLDE3OTk3LDE4MDE4LDE4MjEyLDE4MjE4LDE4MzAxLDE4MzE4LDE4NzYwLDE4ODExLDE4ODE0LDE4ODIwLDE4ODIzLDE4ODQ0LDE4ODQ4LDE4ODcyLDE5NTc2LDE5NjIwLDE5NzM4LDE5ODg3LDQwODcwLDU5MjQ0LDU5MzM2LDU5MzY3LDU5NDEzLDU5NDE3LDU5NDIzLDU5NDMxLDU5NDM3LDU5NDQzLDU5NDUyLDU5NDYwLDU5NDc4LDU5NDkzLDYzNzg5LDYzODY2LDYzODk0LDYzOTc2LDYzOTg2LDY0MDE2LDY0MDE4LDY0MDIxLDY0MDI1LDY0MDM0LDY0MDM3LDY0MDQyLDY1MDc0LDY1MDkzLDY1MTA3LDY1MTEyLDY1MTI3LDY1MTMyLDY1Mzc1LDY1NTEwLDY1NTM2XSxcImdiQ2hhcnNcIjpbMCwzNiwzOCw0NSw1MCw4MSw4OSw5NSw5NiwxMDAsMTAzLDEwNCwxMDUsMTA5LDEyNiwxMzMsMTQ4LDE3MiwxNzUsMTc5LDIwOCwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDM0MSw0MjgsNDQzLDU0NCw1NDUsNTU4LDc0MSw3NDIsNzQ5LDc1MCw4MDUsODE5LDgyMCw3OTIyLDc5MjQsNzkyNSw3OTI3LDc5MzQsNzk0Myw3OTQ0LDc5NDUsNzk1MCw4MDYyLDgxNDgsODE0OSw4MTUyLDgxNjQsODE3NCw4MjM2LDgyNDAsODI2Miw4MjY0LDgzNzQsODM4MCw4MzgxLDgzODQsODM4OCw4MzkwLDgzOTIsODM5Myw4Mzk0LDgzOTYsODQwMSw4NDA2LDg0MTYsODQxOSw4NDI0LDg0MzcsODQzOSw4NDQ1LDg0ODIsODQ4NSw4NDk2LDg1MjEsODYwMyw4OTM2LDg5NDYsOTA0Niw5MDUwLDkwNjMsOTA2Niw5MDc2LDkwOTIsOTEwMCw5MTA4LDkxMTEsOTExMyw5MTMxLDkxNjIsOTE2NCw5MjE4LDkyMTksMTEzMjksMTEzMzEsMTEzMzQsMTEzMzYsMTEzNDYsMTEzNjEsMTEzNjMsMTEzNjYsMTEzNzAsMTEzNzIsMTEzNzUsMTEzODksMTE2ODIsMTE2ODYsMTE2ODcsMTE2OTIsMTE2OTQsMTE3MTQsMTE3MTYsMTE3MjMsMTE3MjUsMTE3MzAsMTE3MzYsMTE5ODIsMTE5ODksMTIxMDIsMTIzMzYsMTIzNDgsMTIzNTAsMTIzODQsMTIzOTMsMTIzOTUsMTIzOTcsMTI1MTAsMTI1NTMsMTI4NTEsMTI5NjIsMTI5NzMsMTM3MzgsMTM4MjMsMTM5MTksMTM5MzMsMTQwODAsMTQyOTgsMTQ1ODUsMTQ2OTgsMTU1ODMsMTU4NDcsMTYzMTgsMTY0MzQsMTY0MzgsMTY0ODEsMTY3MjksMTcxMDIsMTcxMjIsMTczMTUsMTczMjAsMTc0MDIsMTc0MTgsMTc4NTksMTc5MDksMTc5MTEsMTc5MTUsMTc5MTYsMTc5MzYsMTc5MzksMTc5NjEsMTg2NjQsMTg3MDMsMTg4MTQsMTg5NjIsMTkwNDMsMzM0NjksMzM0NzAsMzM0NzEsMzM0ODQsMzM0ODUsMzM0OTAsMzM0OTcsMzM1MDEsMzM1MDUsMzM1MTMsMzM1MjAsMzM1MzYsMzM1NTAsMzc4NDUsMzc5MjEsMzc5NDgsMzgwMjksMzgwMzgsMzgwNjQsMzgwNjUsMzgwNjYsMzgwNjksMzgwNzUsMzgwNzYsMzgwNzgsMzkxMDgsMzkxMDksMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkyNjUsMzkzOTQsMTg5MDAwXX0iLCJtb2R1bGUuZXhwb3J0cz1bXG5bXCJhMTQwXCIsXCLuk4ZcIiw2Ml0sXG5bXCJhMTgwXCIsXCLulIVcIiwzMl0sXG5bXCJhMjQwXCIsXCLulKZcIiw2Ml0sXG5bXCJhMjgwXCIsXCLulaVcIiwzMl0sXG5bXCJhMmFiXCIsXCLunaZcIiw1XSxcbltcImEyZTNcIixcIuKCrO6drVwiXSxcbltcImEyZWZcIixcIu6dru6dr1wiXSxcbltcImEyZmRcIixcIu6dsO6dsVwiXSxcbltcImEzNDBcIixcIu6WhlwiLDYyXSxcbltcImEzODBcIixcIu6XhVwiLDMxLFwi44CAXCJdLFxuW1wiYTQ0MFwiLFwi7pemXCIsNjJdLFxuW1wiYTQ4MFwiLFwi7pilXCIsMzJdLFxuW1wiYTRmNFwiLFwi7p2yXCIsMTBdLFxuW1wiYTU0MFwiLFwi7pmGXCIsNjJdLFxuW1wiYTU4MFwiLFwi7pqFXCIsMzJdLFxuW1wiYTVmN1wiLFwi7p29XCIsN10sXG5bXCJhNjQwXCIsXCLumqZcIiw2Ml0sXG5bXCJhNjgwXCIsXCLum6VcIiwzMl0sXG5bXCJhNmI5XCIsXCLunoVcIiw3XSxcbltcImE2ZDlcIixcIu6ejVwiLDZdLFxuW1wiYTZlY1wiLFwi7p6U7p6VXCJdLFxuW1wiYTZmM1wiLFwi7p6WXCJdLFxuW1wiYTZmNlwiLFwi7p6XXCIsOF0sXG5bXCJhNzQwXCIsXCLunIZcIiw2Ml0sXG5bXCJhNzgwXCIsXCLunYVcIiwzMl0sXG5bXCJhN2MyXCIsXCLunqBcIiwxNF0sXG5bXCJhN2YyXCIsXCLunq9cIiwxMl0sXG5bXCJhODk2XCIsXCLunrxcIiwxMF0sXG5bXCJhOGJjXCIsXCLun4dcIl0sXG5bXCJhOGJmXCIsXCLHuVwiXSxcbltcImE4YzFcIixcIu6fie6fiu6fi+6fjFwiXSxcbltcImE4ZWFcIixcIu6fjVwiLDIwXSxcbltcImE5NThcIixcIu6folwiXSxcbltcImE5NWJcIixcIu6fo1wiXSxcbltcImE5NWRcIixcIu6fpO6fpe6fplwiXSxcbltcImE5ODlcIixcIuOAvuK/sFwiLDExXSxcbltcImE5OTdcIixcIu6ftFwiLDEyXSxcbltcImE5ZjBcIixcIu6ggVwiLDE0XSxcbltcImFhYTFcIixcIu6AgFwiLDkzXSxcbltcImFiYTFcIixcIu6BnlwiLDkzXSxcbltcImFjYTFcIixcIu6CvFwiLDkzXSxcbltcImFkYTFcIixcIu6EmlwiLDkzXSxcbltcImFlYTFcIixcIu6FuFwiLDkzXSxcbltcImFmYTFcIixcIu6HllwiLDkzXSxcbltcImQ3ZmFcIixcIu6gkFwiLDRdLFxuW1wiZjhhMVwiLFwi7oi0XCIsOTNdLFxuW1wiZjlhMVwiLFwi7oqSXCIsOTNdLFxuW1wiZmFhMVwiLFwi7ouwXCIsOTNdLFxuW1wiZmJhMVwiLFwi7o2OXCIsOTNdLFxuW1wiZmNhMVwiLFwi7o6sXCIsOTNdLFxuW1wiZmRhMVwiLFwi7pCKXCIsOTNdLFxuW1wiZmU1MFwiLFwi4rqB7qCW7qCX7qCY4rqE45Gz45GH4rqI4rqL7qCe45ae45ia45iO4rqM4rqX46Wu46SY7qCm46eP46ef46mz46eQ7qCr7qCs462O47Gu47Og4rqn7qCx7qCy4rqq5IGW5IWf4rqu5Iy34rqz4rq24rq37qC75I6x5I6s4rq75I+d5JOW5Jmh5JmM7qGDXCJdLFxuW1wiZmU4MFwiLFwi5Jyj5Jyp5J285J6N4ruK5KWH5KW65KW95KaC5KaD5KaF5KaG5Kaf5Kab5Ka35Ka27qGU7qGV5LKj5LKf5LKg5LKh5LG35LKi5LSTXCIsNixcIuS2ru6hpO6RqFwiLDkzXVxuXVxuIiwibW9kdWxlLmV4cG9ydHM9W1xuW1wiMFwiLFwiXFx1MDAwMFwiLDEyOF0sXG5bXCJhMVwiLFwi772hXCIsNjJdLFxuW1wiODE0MFwiLFwi44CA44CB44CC77yM77yO44O777ya77yb77yf77yB44Kb44KcwrTvvYDCqO+8vu+/o++8v+ODveODvuOCneOCnuOAg+S7neOAheOAhuOAh+ODvOKAleKAkO+8j++8vO+9nuKIpe+9nOKApuKApeKAmOKAmeKAnOKAne+8iO+8ieOAlOOAle+8u++8ve+9m++9neOAiFwiLDksXCLvvIvvvI3CscOXXCJdLFxuW1wiODE4MFwiLFwiw7fvvJ3iiaDvvJzvvJ7iiabiiafiiJ7iiLTimYLimYDCsOKAsuKAs+KEg++/pe+8hO+/oO+/oe+8he+8g++8hu+8iu+8oMKn4piG4piF4peL4peP4peO4peH4peG4pah4pag4paz4pay4pa94pa84oC744CS4oaS4oaQ4oaR4oaT44CTXCJdLFxuW1wiODFiOFwiLFwi4oiI4oiL4oqG4oqH4oqC4oqD4oiq4oipXCJdLFxuW1wiODFjOFwiLFwi4oin4oio77+i4oeS4oeU4oiA4oiDXCJdLFxuW1wiODFkYVwiLFwi4oig4oql4oyS4oiC4oiH4omh4omS4omq4omr4oia4oi94oid4oi14oir4oisXCJdLFxuW1wiODFmMFwiLFwi4oSr4oCw4pmv4pmt4pmq4oCg4oChwrZcIl0sXG5bXCI4MWZjXCIsXCLil69cIl0sXG5bXCI4MjRmXCIsXCLvvJBcIiw5XSxcbltcIjgyNjBcIixcIu+8oVwiLDI1XSxcbltcIjgyODFcIixcIu+9gVwiLDI1XSxcbltcIjgyOWZcIixcIuOBgVwiLDgyXSxcbltcIjgzNDBcIixcIuOCoVwiLDYyXSxcbltcIjgzODBcIixcIuODoFwiLDIyXSxcbltcIjgzOWZcIixcIs6RXCIsMTYsXCLOo1wiLDZdLFxuW1wiODNiZlwiLFwizrFcIiwxNixcIs+DXCIsNl0sXG5bXCI4NDQwXCIsXCLQkFwiLDUsXCLQgdCWXCIsMjVdLFxuW1wiODQ3MFwiLFwi0LBcIiw1LFwi0ZHQtlwiLDddLFxuW1wiODQ4MFwiLFwi0L5cIiwxN10sXG5bXCI4NDlmXCIsXCLilIDilILilIzilJDilJjilJTilJzilKzilKTilLTilLzilIHilIPilI/ilJPilJvilJfilKPilLPilKvilLvilYvilKDilK/ilKjilLfilL/ilJ3ilLDilKXilLjilYJcIl0sXG5bXCI4NzQwXCIsXCLikaBcIiwxOSxcIuKFoFwiLDldLFxuW1wiODc1ZlwiLFwi442J44yU44yi442N44yY44yn44yD44y2442R442X44yN44ym44yj44yr442K44y7446c446d446e446O446P44+E446hXCJdLFxuW1wiODc3ZVwiLFwi4427XCJdLFxuW1wiODc4MFwiLFwi44Cd44Cf4oSW44+N4oSh44qkXCIsNCxcIuOIseOIsuOIueONvuONveONvOKJkuKJoeKIq+KIruKIkeKImuKKpeKIoOKIn+KKv+KIteKIqeKIqlwiXSxcbltcIjg4OWZcIixcIuS6nOWUluWog+mYv+WTgOaEm+aMqOWntumAouiRteiMnOepkOaCquaPoea4peaXreiRpuiKpumvteaik+Wcp+aWoeaJseWum+WnkOiZu+mjtOe1oue2vumujuaIlueyn+iit+WuieW6teaMieaal+ahiOmXh+mejeadj+S7peS8iuS9jeS+neWBieWbsuWkt+WnlOWogeWwieaDn+aEj+aFsOaYk+akheeCuueVj+eVsOenu+e2ree3r+iDg+iQjuiho+isgumBlemBuuWMu+S6leS6peWfn+iCsumDgeejr+S4gOWjsea6oumAuOeosuiMqOiKi+mwr+WFgeWNsOWSveWToeWboOWnu+W8lemjsua3q+iDpOiUrVwiXSxcbltcIjg5NDBcIixcIumZoumZsOmaoOmfu+WQi+WPs+Wuh+eDj+e+vei/gumbqOWNr+m1nOequuS4keeik+iHvOa4puWYmOWUhOasneiUmumwu+WnpeWOqea1pueTnOmWj+WZguS6kemBi+mbsuiNj+mkjOWPoeWWtuWssOW9seaYoOabs+aghOawuOazs+a0qeeRm+ebiOepjumgtOiLseihm+ipoOmLrea2sueWq+ebiumnheaCpuisgei2iumWsuamjuWOreWGhlwiXSxcbltcIjg5ODBcIixcIuWckuWgsOWlhOWutOW7tuaAqOaOqeaPtOayv+a8lOeCjueElOeFmeeHleeMv+e4geiJtuiLkeiWl+mBoOmJm+m0m+WhqeaWvOaxmueUpeWHueWkruWlpeW+gOW/nOaKvOaXuuaoquasp+autOeOi+e/geillum0rOm0jum7hOWyoeayluiNu+WEhOWxi+aGtuiHhuahtueJoeS5meS/uuWNuOaBqea4qeepj+mfs+S4i+WMluS7ruS9leS8veS+oeS9s+WKoOWPr+WYieWkj+WrgeWutuWvoeenkeaah+aenOaetuatjOays+eBq+ePguemjeemvueovOeuh+iKseiLm+iMhOiNt+iPr+iPk+idpuiqsuWYqeiyqOi/pumBjumcnuiaiuS/hOWzqOaIkeeJmeeUu+iHpeiKveibvuizgOmbhemkk+mnleS7i+S8muino+WbnuWhiuWjiuW7u+W/q+aAquaClOaBouaHkOaIkuaLkOaUuVwiXSxcbltcIjhhNDBcIixcIumtgeaZpuaisOa1t+eBsOeVjOeahue1teiKpeifuemWi+majuiyneWHseWKvuWkluWSs+Wus+W0luaFqOamgua2r+eijeiTi+ihl+ipsumOp+mquOa1rOmmqOibmeWeo+afv+ibjumIjuWKg+Wah+WQhOW7k+aLoeaSueagvOaguOauu+eNsueiuuepq+immuinkui1q+i8g+mDremWo+malOmdqeWtpuWys+alvemhjemhjuaOm+esoOaoq1wiXSxcbltcIjhhODBcIixcIuapv+aitumwjea9n+WJsuWWneaBsOaLrOa0u+a4h+a7keiRm+ikkOi9hOS4lOmwueWPtuakm+aouumehOagquWFnOerg+iSsumHnOmOjOWZm+m0qOagouiMheiQseeypeWIiOiLheeTpuS5vuS+g+WGoOWvkuWIiuWLmOWLp+W3u+WWmuWgquWnpuWujOWumOWvm+W5suW5ueaCo+aEn+aFo+aGvuaPm+aVouafkeahk+ajuuasvuatk+axl+a8oua+l+a9heeSsOeUmOebo+eci+erv+euoeewoee3qee8tue/sOiCneiJpuiOnuims+irjOiyq+mChOmRkemWk+mWkemWoumZpemfk+mkqOiImOS4uOWQq+WyuOW3jOeOqeeZjOecvOWyqee/q+i0i+mbgemgkemhlOmhmOS8geS8juWNseWWnOWZqOWfuuWlh+WsieWvhOWykOW4jOW5vuW/jOaPruacuuaXl+aXouacn+aji+ajhFwiXSxcbltcIjhiNDBcIixcIuapn+W4sOavheawl+axveeVv+eliOWto+eogOe0gOW+veimj+iomOiytOi1t+i7jOi8nemjoumojumsvOS6gOWBveWEgOWmk+WunOaIr+aKgOaTrOasuueKoOeWkeelh+e+qeifu+iqvOitsOaOrOiPiumeoOWQieWQg+WWq+ahlOapmOipsOegp+adtem7jeWNtOWuouiEmuiZkOmAhuS4mOS5heS7h+S8keWPiuWQuOWuruW8k+aApeaVkVwiXSxcbltcIjhiODBcIixcIuacveaxguaxsuazo+eBuOeQg+eptueqruesiOe0muezvue1puaXp+eJm+WOu+WxheW3qOaLkuaLoOaMmea4oOiZmuiosei3nemLuOa8geempumtmuS6qOS6q+S6rOS+m+S+oOWDkeWFh+ertuWFseWHtuWNlOWMoeWNv+WPq+WWrOWig+WzoeW8t+W9iuaAr+aBkOaBreaMn+aVmeapi+azgeeLgueLreefr+iDuOiEheiIiOiVjumDt+mPoemfv+mll+mpmuS7sOWHneWwreaagealreWxgOabsualteeOieahkOeygeWDheWLpOWdh+W3vumMpuaWpOaso+asveeQtOemgeemveeti+e3iuiKueiPjOihv+iln+isuei/kemHkeWQn+mKgOS5neWAtuWPpeWMuueLl+eOluefqeiLpui6r+mnhumniOmnkuWFt+aEmuiZnuWWsOepuuWBtuWvk+mBh+maheS4suarm+mHp+WxkeWxiFwiXSxcbltcIjhjNDBcIixcIuaOmOeqn+ayk+mdtOi9oeeqqueGiumaiOeyguagl+e5sOahkemNrOWLsuWQm+iWq+iok+e+pOi7jemDoeWNpuiiiOelgeS/guWCvuWIkeWFhOWVk+WcreePquWei+WlkeW9ouW+hOaBteaFtuaFp+aGqeaOsuaQuuaVrOaZr+ahgua4k+eVpueoveezu+e1jOe2mee5i+e9q+iMjuiNiuibjeioiOipo+itpui7vemgmum2j+iKuOi/jumvqFwiXSxcbltcIjhjODBcIixcIuWKh+aIn+aSg+a/gOmameahgeWCkeasoOaxuua9lOeptOe1kOihgOioo+aciOS7tuWAueWApuWBpeWFvOWIuOWJo+WWp+Wcj+WgheWrjOW7uuaGsuaHuOaLs+aNsuaknOaoqeeJveeKrOeMrueglOehr+e1ueecjOiCqeimi+ismeizoui7kumBo+mNtemZuumhlemok+m5uOWFg+WOn+WOs+W5u+W8pua4m+a6kOeOhOePvue1g+iIt+iogOiruumZkOS5juWAi+WPpOWRvOWbuuWnkeWtpOW3seW6q+W8p+aIuOaVheaer+a5lueLkOeziuiitOiCoeiDoeiPsOiZjuiqh+i3qOmIt+mbh+mhp+m8k+S6lOS6kuS8jeWNiOWRieWQvuWor+W+jOW+oeaCn+aip+aqjueRmueigeiqnuiqpOitt+mGkOS5numvieS6pOS9vOS+r+WAmeWAluWFieWFrOWKn+WKueWLvuWOmuWPo+WQkVwiXSxcbltcIjhkNDBcIixcIuWQjuWWieWdkeWeouWlveWtlOWtneWuj+W3peW3p+W3t+W5uOW6g+W6muW6t+W8mOaBkuaFjOaKl+aLmOaOp+aUu+aYguaZg+abtOadreagoeail+ani+axn+a0qua1qea4r+a6neeUsueah+ehrOeov+ezoOe0hee0mOe1nue2seiAleiAg+iCr+iCseiFlOiGj+iIquiNkuihjOihoeism+iyouizvOmDiumFtemJseegv+mLvOmWpOmZjVwiXSxcbltcIjhkODBcIixcIumghemmmemrmOm0u+WJm+WKq+WPt+WQiOWjleaLt+a/oOixqui9n+m6ueWFi+WIu+WRiuWbveepgOmFt+m1oOm7kueNhOa8ieiFsOeUkeW/veaDmumqqOeLm+i+vOatpOmgg+S7iuWbsOWdpOWivuWpmuaBqOaHh+aYj+aYhuagueaisea3t+eXlee0uuiJrumtguS6m+S9kOWPieWUhuW1r+W3puW3ruafu+aymeeRs+egguipkOmOluijn+WdkOW6p+aMq+WCteWCrOWGjeacgOWTieWhnuWmu+WusOW9qeaJjeaOoeagveats+a4iOeBvemHh+eKgOegleegpuelreaWjue0sOiPnOijgei8iemam+WJpOWcqOadkOe9quiyoeWGtOWdgumYquWguuamiuiCtOWSsuW0juWfvOeilem3uuS9nOWJiuWSi+aQvuaYqOaclOafteeqhOetlue0oumMr+ahnOmureesueWMmeWGiuWIt1wiXSxcbltcIjhlNDBcIixcIuWvn+aLtuaSruaTpuacreauuuiWqembkeeakOmvluaNjOmMhumuq+eav+aZkuS4ieWCmOWPguWxseaDqOaSkuaVo+ahn+eHpuePiueUo+eul+e6guialeiug+izm+mFuOmkkOaWrOaaq+aui+S7leS7lOS8uuS9v+WIuuWPuOWPsuWXo+Wbm+Wjq+Wni+WnieWnv+WtkOWxjeW4guW4q+W/l+aAneaMh+aUr+WtnOaWr+aWveaXqOaeneatolwiXSxcbltcIjhlODBcIixcIuatu+awj+eNheelieengeezuOe0mee0q+iCouiEguiHs+imluipnuipqeippuiqjOirruizh+iznOmbjOmjvOatr+S6i+S8vOS+jeWFkOWtl+WvuuaFiOaMgeaZguasoea7i+ayu+eIvueSveeXlOejgeekuuiAjOiAs+iHquiSlOi+nuaxkOm5v+W8j+itmOm0q+eruui7uOWujembq+S4g+WPseWft+WkseWrieWupOaCiea5v+a8hueWvuizquWun+iUgOevoOWBsuaftOiKneWxoeiViue4nuiIjuWGmeWwhOaNqOi1puaWnOeFruekvue0l+iAheisnei7iumBruibh+mCquWAn+WLuuWwuuadk+eBvOeItemFjOmHiOmMq+iLpeWvguW8seaDueS4u+WPluWuiOaJi+acseauiueLqeePoOeoruiFq+i2o+mFkummluWEkuWPl+WRquWvv+aOiOaouee2rOmcgOWbmuWPjuWRqFwiXSxcbltcIjhmNDBcIixcIuWul+WwseW3nuS/ruaEgeaLvua0suengOeni+e1gue5jee/kuiHreiIn+iSkOihhuilsuiukOi5tOi8r+mAsemFi+mFrOmbhumGnOS7gOS9j+WFheWNgeW+k+aIjuaflOaxgea4i+eNo+e4pumHjemKg+WPlOWkmeWuv+a3keelnee4rueym+WhvueGn+WHuuihk+i/sOS/iuWzu+aYpeeerOero+iInOmnv+WHhuW+quaXrOalr+auiea3s1wiXSxcbltcIjhmODBcIixcIua6lua9pOebvue0lOW3oemBtemGh+mghuWHpuWIneaJgOaakeabmea4muW6tue3kue9suabuOiWr+iXt+iruOWKqeWPmeWls+W6j+W+kOaBlemLpOmZpOWCt+WEn+WLneWMoOWNh+WPrOWTqOWVhuWUseWYl+WlqOWmvuWovOWuteWwhuWwj+WwkeWwmuW6hOW6iuW7oOW9sOaJv+aKhOaLm+aOjOaNt+aYh+aYjOaYreaZtuadvuaiouaon+aoteayvOa2iOa4iea5mOeEvOeEpueFp+eXh+ecgeehneekgeelpeensOeroOeskeeyp+e0ueiCluiPluiSi+iVieihneijs+ion+iovOiplOips+ixoeiznumGpOmJpumNvumQmOmanOmemOS4iuS4iOS4nuS5l+WGl+WJsOWfjuWgtOWjjOWsouW4uOaDheaTvuadoeadlua1hOeKtueVs+epo+iSuOitsumGuOmMoOWYseWftOmjvlwiXSxcbltcIjkwNDBcIixcIuaLreakjeaulueHree5lOiBt+iJsuinpumjn+idlei+seWwu+S8uOS/oeS+teWUh+WooOWvneWvqeW/g+aFjuaMr+aWsOaZi+ajruamm+a1uOa3seeUs+eWueecn+elnuenpue0s+iHo+iKr+iWquimquiouui6q+i+m+mAsumHnemch+S6uuS7geWIg+WhteWjrOWwi+eUmuWwveiFjuioiui/hemZo+mdreespeirj+mgiOmFouWbs+WOqFwiXSxcbltcIjkwODBcIixcIumAl+WQueWeguW4peaOqOawtOeCiuedoeeyi+e/oOihsOmBgumFlOmMkOmMmOmaj+eRnumrhOW0h+W1qeaVsOaeoui2qOmbm+aNruadieakmeiPhemgl+mbgOijvua+hOaRuuWvuOS4lueArOeVneaYr+WHhOWItuWLouWnk+W+geaAp+aIkOaUv+aVtOaYn+aZtOajsuagluato+a4heeJsueUn+ebm+eyvuiBluWjsOijveilv+iqoOiqk+iri+mAnemGkumdkumdmeaWieeojuiEhumau+W4reaDnOaImuaWpeaYlOaekOefs+epjeexjee4vuiEiuiyrOi1pOi3oei5n+eiqeWIh+aLmeaOpeaRguaKmOioreeqg+evgOiqrOmbque1tuiIjOidieS7meWFiOWNg+WNoOWuo+WwguWwluW3neaIpuaJh+aSsOagk+agtOaziea1hea0l+afk+a9nOeFjueFveaXi+epv+euree3mlwiXSxcbltcIjkxNDBcIixcIue5iue+qOiFuuiIm+iIueiWpuipruizjui3temBuOmBt+mKremKkemWg+muruWJjeWWhOa8uOeEtuWFqOemhee5leiGs+ezjuWZjOWhkeWyqOaOquabvuabvealmueLmeeWj+eWjuekjuelluenn+eyl+e0oOe1hOiYh+iotOmYu+mBoem8oOWDp+WJteWPjOWPouWAieWWquWjruWlj+eIveWui+WxpOWMneaDo+aDs+aNnOaOg+aMv+aOu1wiXSxcbltcIjkxODBcIixcIuaTjeaXqeabueW3o+anjeanvea8leeHpeS6ieeXqeebuOeqk+ezn+e3j+e2nOiBoeiNieiNmOiRrOiSvOiXu+ijhei1sOmAgemBremOl+mcnOmokuWDj+Wil+aGjuiHk+iUtei0iOmAoOS/g+WBtOWJh+WNs+aBr+aNieadn+a4rOi2s+mAn+S/l+WxnuiziuaXj+e2muWNkuiiluWFtuaPg+WtmOWtq+WwiuaQjeadkemBnOS7luWkmuWkquaxsOipkeWUvuWgleWmpeaDsOaJk+afgeiIteallemZgOmnhOmoqOS9k+WghuWvvuiAkOWyseW4r+W+heaAoOaFi+aItOabv+azsOa7nuiDjuiFv+iLlOiii+iyuOmAgOmArumaium7m+mvm+S7o+WPsOWkp+esrOmGjemhjOm3uea7neeAp+WNk+WVhOWuheaJmOaKnuaLk+ayoua/r+eQouiol+mQuOa/geirvuiMuOWHp+ibuOWPqlwiXSxcbltcIjkyNDBcIixcIuWPqeS9humBlOi+sOWlquiEseW3veerqui+v+ajmuiwt+eLuOmxiOaoveiqsOS4ueWNmOWYhuWdpuaLheaOouaXpuatjua3oea5m+eCreefreerr+euque2u+iAveiDhuibi+iqlemNm+Wbo+Wjh+W8vuaWreaaluaqgOauteeUt+irh+WApOefpeWcsOW8m+aBpeaZuuaxoOeXtOeomue9ruiHtOicmOmBhemms+evieeVnOerueetkeiThFwiXSxcbltcIjkyODBcIixcIumAkOenqeeqkuiMtuWroeedgOS4reS7suWumeW/oOaKveaYvOafseazqOiZq+iht+iou+mFjumLs+mnkOaol+eApueMquiLp+iRl+iyr+S4geWFhuWHi+WWi+WvteW4luW4s+W6geW8lOW8teW9q+W+tOaHsuaMkeaaouacnea9rueJkueUuuecuuiBtOiEueiFuOidtuiqv+irnOi2hei3s+mKmumVt+mggumzpeWLheaNl+ebtOacleayiOePjeizg+mOrumZs+a0peWinOakjuanjOi/vemOmueXm+mAmuWhmuagguaOtOanu+S9g+a8rOafmOi+u+iUpue2tOmNlOakv+a9sOWdquWjt+WsrOe0rOeIquWQiumHo+m2tOS6reS9juWBnOWBteWJg+iynuWRiOWgpOWumuW4neW6leW6reW7t+W8n+aCjOaKteaMuuaPkOair+axgOeih+emjueoi+e3oOiJh+ioguirpui5hOmAk1wiXSxcbltcIjkzNDBcIixcIumCuOmEremHmOm8juazpeaRmOaTouaVtea7tOeahOesm+mBqemPkea6uuWTsuW+ueaSpOi9jei/remJhOWFuOWhq+WkqeWxleW6l+a3u+e6j+eUnOiyvOi7oumhm+eCueS8neauv+a+seeUsOmbu+WFjuWQkOWgteWhl+WmrOWxoOW+kuaWl+adnOa4oeeZu+iPn+izremAlOmDvemNjeegpeeguuWKquW6puWcn+WltOaAkuWAkuWFmuWGrFwiXSxcbltcIjkzODBcIixcIuWHjeWIgOWUkOWhlOWhmOWll+WuleWztuW2i+aCvOaKleaQreadseahg+aivOajn+ebl+a3mOa5r+a2m+eBr+eHiOW9k+eXmOelt+etieetlOetkuezlue1seWIsOiRo+iVqeiXpOiojuishOixhui4j+mAg+mAj+mQmemZtumgremosOmXmOWDjeWLleWQjOWgguWwjuaGp+aSnua0nuees+erpeiDtOiQhOmBk+mKheWzoOm0h+WMv+W+l+W+s+a2nOeJueedo+emv+evpOavkueLrOiqreagg+apoeWHuOeqgeaktOWxiumztuiLq+WvhemFieeAnuWZuOWxr+aDh+aVpuayjOixmumBgemgk+WRkeabh+mIjeWliOmCo+WGheS5jeWHquiWmeisjueBmOaNuumNi+aloummtOe4hOeVt+WNl+aloOi7n+mbo+axneS6jOWwvOW8kOi/qeWMguizkeiCieiZueW7v+aXpeS5s+WFpVwiXSxcbltcIjk0NDBcIixcIuWmguWwv+mfruS7u+WmiuW/jeiqjea/oeemsOelouWvp+iRseeMq+eGseW5tOW/teaNu+aSmueHg+eymOS5g+W7vOS5i+WfnOWaouaCqea/g+e0jeiDveiEs+iGv+i+suiml+iapOW3tOaKiuaSreimh+adt+azoua0vueQtuegtOWphue9teiKremmrOS/s+W7g+aLneaOkuaVl+adr+ebg+eJjOiDjOiCuui8qemFjeWAjeWfueWqkuaihVwiXSxcbltcIjk0ODBcIixcIuals+eFpOeLveiyt+WjsuizoOmZqumAmeidv+enpOefp+iQqeS8r+WJpeWNmuaLjeafj+aziueZveeulOeyleiItuiWhOi/q+abnea8oOeIhue4m+iOq+mngem6puWHveeuseehsueuuOiCh+etiOarqOW5oeiCjOeVkeeVoOWFq+mJoua6jOeZuumGl+mrquS8kOe9sOaKnOetj+mWpemzqeWZuuWhmeibpOmavOS8tOWIpOWNiuWPjeWPm+W4huaQrOaWkeadv+awvuaxjueJiOeKr+ePreeVlOe5geiIrOiXqeiyqeevhOmHhueFqemgkumjr+aMveaZqeeVquebpOejkOiVg+ibruWMquWNkeWQpuWmg+W6h+W9vOaCsuaJieaJueaKq+aWkOavlOazjOeWsuearueikeenmOe3i+e9t+iCpeiiq+iqueiyu+mBv+mdnumjm+aoi+ewuOWCmeWwvuW+ruaeh+avmOeQteeciee+jlwiXSxcbltcIjk1NDBcIixcIum8u+afiueol+WMueeWi+mrreW9puiGneiPseiCmOW8vOW/heeVouethumAvOahp+Wnq+Wqm+e0kOeZvuisrOS/teW9quaomeawt+a8gueTouelqOihqOipleixueW7n+aPj+eXheenkuiLl+mMqOmLsuiSnOibremwreWTgeW9rOaWjOa1nOeAleiyp+izk+mgu+aVj+eTtuS4jeS7mOWfoOWkq+WppuWvjOWGqOW4g+W6nOaAluaJtuaVt1wiXSxcbltcIjk1ODBcIixcIuaWp+aZrua1rueItuespuiFkOiGmuiKmeitnOiyoOizpui1tOmYnOmZhOS+ruaSq+atpuiInuiRoeiVqumDqOWwgealk+miqOiRuuiVl+S8j+WJr+W+qeW5heacjeemj+iFueikh+imhua3teW8l+aJleayuOS7j+eJqemukuWIhuWQu+WZtOWis+aGpOaJrueEmuWlrueyieeznue0m+mbsOaWh+iBnuS4meS9teWFteWhgOW5o+W5s+W8iuafhOS4puiUvemWiemZm+exs+mggeWDu+WjgeeZlueip+WIpeeepeiUkeeuhuWBj+WkieeJh+evh+e3qOi+uui/lOmBjeS+v+WLieWoqeW8gemereS/neiIl+mLquWcg+aNleatqeeUq+ijnOi8lOepguWLn+Wik+aFleaIiuaaruavjeewv+iPqeWAo+S/uOWMheWRhuWgseWlieWuneWzsOWzr+W0qeW6luaKseaNp+aUvuaWueaci1wiXSxcbltcIjk2NDBcIixcIuazleazoeeDueegsue4q+iDnuiKs+iQjOiTrOicguikkuioquixiumCpumLkumjvemzs+m1rOS5j+S6oeWCjeWJluWdiuWmqOW4veW/mOW/meaIv+aatOacm+afkOajkuWGkue0oeiCquiGqOisgOiyjOiyv+mJvumYsuWQoOmgrOWMl+WDleWNnOWiqOaSsuactOeJp+edpuephumHpuWLg+ayoeauhuWggOW5jOWllOacrOe/u+WHoeebhlwiXSxcbltcIjk2ODBcIixcIuaRqeejqOmtlOm6u+Wfi+WmueaYp+aemuavjuWTqeanmeW5leiGnOaelemuquafvumxkuahneS6puS/o+WPiOaKueacq+ayq+i/hOS+ree5rem6v+S4h+aFoua6gOa8q+iUk+WRs+acqumtheW3s+euleWyrOWvhuicnOa5iuiTkeeolOiEiOWmmeeyjeawkeecoOWLmeWkoueEoeeJn+efm+mcp+m1oeaki+Wpv+WomOWGpeWQjeWRveaYjuebn+i/t+mKmOmztOWnqueJnea7heWFjeajiee2v+e3rOmdoum6uuaRuOaooeiMguWmhOWtn+avm+eMm+ebsue2suiAl+iSmeWEsuacqOm7meebruadouWLv+mkheWwpOaIu+exvuiysOWVj+aCtue0i+mWgOWMgeS5n+WGtuWknOeIuuiAtumHjuW8peefouWOhOW9uee0hOiWrOios+i6jemdluafs+iWrumRk+aEieaEiOayueeZklwiXSxcbltcIjk3NDBcIixcIuirrei8uOWUr+S9keWEquWLh+WPi+WupeW5veaCoOaGguaPluacieafmua5p+a2jOeMtueMt+eUseelkOijleiqmOmBiumCkemDtembhOiejeWkleS6iOS9meS4juiqiei8v+mgkOWCreW5vOWmluWuueW6uOaPmuaPuuaTgeabnOaliuanmOa0i+a6tueGlOeUqOeqr+e+iuiAgOiRieiTieimgeisoei4iumBpemZvemkiuaFvuaKkeasslwiXSxcbltcIjk3ODBcIixcIuayg+a1tOe/jOe/vOa3gOe+heieuuijuOadpeiOsemgvOmbt+a0m+e1oeiQvemFquS5seWNteW1kOashOa/q+iXjeiYreimp+WIqeWQj+WxpeadjuaiqOeQhueSg+eXouijj+ijoemHjOmboumZuOW+i+eOh+eri+iRjuaOoOeVpeWKiea1gea6nOeQieeVmeehq+eykumahuernOm+jeS+tuaFruaXheiZnOS6huS6ruWDmuS4oeWHjOWvruaWmeaigea2vOeMn+eZgueereeonOezp+iJr+irkumBvOmHj+mZtemgmOWKm+e3keWAq+WOmOael+a3i+eHkOeQs+iHqOi8qumao+mxl+m6n+eRoOWhgea2mee0r+mhnuS7pOS8tuS+i+WGt+WKseW2uuaAnOeOsuekvOiLk+mItOmat+mbtumcium6l+m9ouaapuattOWIl+WKo+eDiOijguW7ieaBi+aGkOa8o+eFieewvue3tOiBr1wiXSxcbltcIjk4NDBcIixcIuiTrumAo+mMrOWRgumtr+ark+eCieizgui3r+mcsuWKtOWpgeW7iuW8hOacl+alvOamlOa1qua8j+eJoueLvOevreiAgeiBvuidi+mDjuWFrem6k+emhOiCi+mMsuirluWAreWSjOipseatquizhOiEh+aDkeaeoOm3suS6meS6mOmwkOipq+iXgeiVqOakgOa5vueil+iFlVwiXSxcbltcIjk4OWZcIixcIuW8jOS4kOS4leS4quS4seS4tuS4vOS4v+S5guS5luS5mOS6guS6heixq+S6iuiIkuW8jeS6juS6nuS6n+S6oOS6ouS6sOS6s+S6tuS7juS7jeS7hOS7huS7guS7l+S7nuS7reS7n+S7t+S8ieS9muS8sOS9m+S9neS9l+S9h+S9tuS+iOS+j+S+mOS9u+S9qeS9sOS+keS9r+S+huS+luWEmOS/lOS/n+S/juS/mOS/m+S/keS/muS/kOS/pOS/peWAmuWAqOWAlOWAquWApeWAheS8nOS/tuWAoeWAqeWArOS/vuS/r+WAkeWAhuWBg+WBh+acg+WBleWBkOWBiOWBmuWBluWBrOWBuOWCgOWCmuWCheWCtOWCslwiXSxcbltcIjk5NDBcIixcIuWDieWDiuWCs+WDguWDluWDnuWDpeWDreWDo+WDruWDueWDteWEieWEgeWEguWEluWEleWElOWEmuWEoeWEuuWEt+WEvOWEu+WEv+WFgOWFkuWFjOWFlOWFoueruOWFqeWFquWFruWGgOWGguWbmOWGjOWGieWGj+WGkeWGk+WGleWGluWGpOWGpuWGouWGqeWGquWGq+WGs+WGseWGsuWGsOWGteWGveWHheWHieWHm+WHoOiZleWHqeWHrVwiXSxcbltcIjk5ODBcIixcIuWHsOWHteWHvuWIhOWIi+WIlOWIjuWIp+WIquWIruWIs+WIueWJj+WJhOWJi+WJjOWJnuWJlOWJquWJtOWJqeWJs+WJv+WJveWKjeWKlOWKkuWJseWKiOWKkei+qOi+p+WKrOWKreWKvOWKteWLgeWLjeWLl+WLnuWLo+WLpumjreWLoOWLs+WLteWLuOWLueWMhuWMiOeUuOWMjeWMkOWMj+WMleWMmuWMo+WMr+WMseWMs+WMuOWNgOWNhuWNheS4l+WNieWNjeWHluWNnuWNqeWNruWkmOWNu+WNt+WOguWOluWOoOWOpuWOpeWOruWOsOWOtuWPg+ewkumbmeWPn+abvOeHruWPruWPqOWPreWPuuWQgeWQveWRgOWQrOWQreWQvOWQruWQtuWQqeWQneWRjuWSj+WRteWSjuWRn+WRseWRt+WRsOWSkuWRu+WSgOWRtuWShOWSkOWShuWTh+WSouWSuOWSpeWSrOWThOWTiOWSqFwiXSxcbltcIjlhNDBcIixcIuWSq+WTguWSpOWSvuWSvOWTmOWTpeWTpuWUj+WUlOWTveWTruWTreWTuuWTouWUueWVgOWVo+WVjOWUruWVnOWVheWVluWVl+WUuOWUs+WVneWWmeWWgOWSr+WWiuWWn+WVu+WVvuWWmOWWnuWWruWVvOWWg+WWqeWWh+WWqOWXmuWXheWXn+WXhOWXnOWXpOWXlOWYlOWXt+WYluWXvuWXveWYm+WXueWZjuWZkOeHn+WYtOWYtuWYsuWYuFwiXSxcbltcIjlhODBcIixcIuWZq+WZpOWYr+WZrOWZquWahuWagOWaiuWaoOWalOWaj+WapeWaruWatuWatOWbguWavOWbgeWbg+WbgOWbiOWbjuWbkeWbk+Wbl+WbruWbueWcgOWbv+WchOWcieWciOWci+WcjeWck+WcmOWcluWXh+WcnOWcpuWct+WcuOWdjuWcu+WdgOWdj+WdqeWfgOWeiOWdoeWdv+WeieWek+WeoOWes+WepOWequWesOWfg+WfhuWflOWfkuWfk+WgiuWfluWfo+Wgi+WgmeWgneWhsuWgoeWhouWhi+WhsOavgOWhkuWgveWhueWiheWiueWin+Wiq+WiuuWjnuWiu+WiuOWiruWjheWjk+WjkeWjl+WjmeWjmOWjpeWjnOWjpOWjn+Wjr+WjuuWjueWju+WjvOWjveWkguWkiuWkkOWkm+aipuWkpeWkrOWkreWksuWkuOWkvuerkuWlleWlkOWljuWlmuWlmOWlouWloOWlp+WlrOWlqVwiXSxcbltcIjliNDBcIixcIuWluOWmgeWmneS9nuS+q+Wmo+WmsuWnhuWnqOWnnOWmjeWnmeWnmuWopeWon+WokeWonOWoieWomuWpgOWprOWpieWoteWotuWpouWpquWqmuWqvOWqvuWri+WrguWqveWro+Wrl+WrpuWrqeWrluWruuWru+WsjOWsi+WsluWssuWrkOWsquWstuWsvuWtg+WtheWtgOWtkeWtleWtmuWtm+WtpeWtqeWtsOWts+WtteWtuOaWiOWtuuWugFwiXSxcbltcIjliODBcIixcIuWug+WupuWuuOWvg+Wvh+WvieWvlOWvkOWvpOWvpuWvouWvnuWvpeWvq+WvsOWvtuWvs+WwheWwh+WwiOWwjeWwk+WwoOWwouWwqOWwuOWwueWxgeWxhuWxjuWxk+WxkOWxj+WtseWxrOWxruS5ouWxtuWxueWyjOWykeWylOWmm+Wyq+Wyu+WytuWyvOWyt+WzheWyvuWzh+WzmeWzqeWzveWzuuWzreW2jOWzquW0i+W0leW0l+W1nOW0n+W0m+W0keW0lOW0ouW0muW0meW0mOW1jOW1kuW1juW1i+W1rOW1s+W1tuW2h+W2hOW2guW2ouW2neW2rOW2ruW2veW2kOW2t+W2vOW3ieW3jeW3k+W3kuW3luW3m+W3q+W3suW3teW4i+W4muW4meW4keW4m+W4tuW4t+W5hOW5g+W5gOW5juW5l+W5lOW5n+W5ouW5pOW5h+W5teW5tuW5uum6vOW5v+W6oOW7geW7guW7iOW7kOW7j1wiXSxcbltcIjljNDBcIixcIuW7luW7o+W7neW7muW7m+W7ouW7oeW7qOW7qeW7rOW7seW7s+W7sOW7tOW7uOW7vuW8g+W8ieW9neW9nOW8i+W8keW8luW8qeW8reW8uOW9geW9iOW9jOW9juW8r+W9keW9luW9l+W9meW9oeW9reW9s+W9t+W+g+W+guW9v+W+iuW+iOW+keW+h+W+nuW+meW+mOW+oOW+qOW+reW+vOW/luW/u+W/pOW/uOW/seW/neaCs+W/v+aAoeaBoFwiXSxcbltcIjljODBcIixcIuaAmeaAkOaAqeaAjuaAseaAm+aAleaAq+aApuaAj+aAuuaBmuaBgeaBquaBt+aBn+aBiuaBhuaBjeaBo+aBg+aBpOaBguaBrOaBq+aBmeaCgeaCjeaDp+aCg+aCmuaChOaCm+aCluaCl+aCkuaCp+aCi+aDoeaCuOaDoOaDk+aCtOW/sOaCveaDhuaCteaDmOaFjeaEleaEhuaDtuaDt+aEgOaDtOaDuuaEg+aEoeaDu+aDseaEjeaEjuaFh+aEvuaEqOaEp+aFiuaEv+aEvOaErOaEtOaEveaFguaFhOaFs+aFt+aFmOaFmeaFmuaFq+aFtOaFr+aFpeaFseaFn+aFneaFk+aFteaGmeaGluaGh+aGrOaGlOaGmuaGiuaGkeaGq+aGruaHjOaHiuaHieaHt+aHiOaHg+aHhuaGuuaHi+e9ueaHjeaHpuaHo+aHtuaHuuaHtOaHv+aHveaHvOaHvuaIgOaIiOaIieaIjeaIjOaIlOaIm1wiXSxcbltcIjlkNDBcIixcIuaInuaIoeaIquaIruaIsOaIsuaIs+aJgeaJjuaJnuaJo+aJm+aJoOaJqOaJvOaKguaKieaJvuaKkuaKk+aKluaLlOaKg+aKlOaLl+aLkeaKu+aLj+aLv+aLhuaTlOaLiOaLnOaLjOaLiuaLguaLh+aKm+aLieaMjOaLruaLseaMp+aMguaMiOaLr+aLteaNkOaMvuaNjeaQnOaNj+aOluaOjuaOgOaOq+aNtuaOo+aOj+aOieaOn+aOteaNq1wiXSxcbltcIjlkODBcIixcIuaNqeaOvuaPqeaPgOaPhuaPo+aPieaPkuaPtuaPhOaQluaQtOaQhuaQk+aQpuaQtuaUneaQl+aQqOaQj+aRp+aRr+aRtuaRjuaUquaSleaSk+aSpeaSqeaSiOaSvOaTmuaTkuaTheaTh+aSu+aTmOaTguaTseaTp+iIieaToOaToeaKrOaTo+aTr+aUrOaTtuaTtOaTsuaTuuaUgOaTveaUmOaUnOaUheaUpOaUo+aUq+aUtOaUteaUt+aUtuaUuOeVi+aViOaVluaVleaVjeaVmOaVnuaVneaVsuaVuOaWguaWg+iuiuaWm+aWn+aWq+aWt+aXg+aXhuaXgeaXhOaXjOaXkuaXm+aXmeaXoOaXoeaXseadsuaYiuaYg+aXu+ads+aYteaYtuaYtOaYnOaZj+aZhOaZieaZgeaZnuaZneaZpOaZp+aZqOaZn+aZouaZsOaag+aaiOaajuaaieaahOaamOaaneabgeaaueabieaavuaavFwiXSxcbltcIjllNDBcIixcIuabhOaauOabluabmuaboOaYv+abpuabqeabsOabteabt+acj+acluacnuacpuacp+mcuOacruacv+actuadgeacuOact+adhuadnuadoOadmeado+adpOaeieadsOaeqeadvOadquaejOaei+aepuaeoeaeheaet+afr+aetOafrOaes+afqeaeuOafpOafnuafneafouafruaeueafjuafhuafp+aqnOagnuahhuagqeahgOahjeagsuahjlwiXSxcbltcIjllODBcIixcIuais+agq+ahmeaho+aht+ahv+ain+aij+aireailOaineaim+aig+aqruaiueahtOaiteaioOaiuuakj+aijeahvuakgeajiuakiOajmOakouakpuajoeakjOajjeajlOajp+ajleaktuakkuakhOajl+ajo+akpeajueajoOajr+akqOakquakmuako+akoeajhualuealt+alnOaluOalq+allOalvualruakuealtOakvealmeaksOaloealnualneamgealquamsuamruankOamv+angeank+amvuanjuWvqOaniuanneamu+ang+amp+aoruamkeamoOamnOamleamtOannuanqOaoguaom+anv+asiuanueansuanp+aoheamseaonuanreaolOanq+aoiuaokuargeaoo+aok+aphOaojOapsuaotuapuOaph+apouapmeappuapiOaouOaoouaqkOaqjeaqoOaqhOaqouaqo1wiXSxcbltcIjlmNDBcIixcIuaql+iYl+aqu+arg+arguaquOaqs+aqrOarnuarkearn+aqquarmuarquaru+asheiYluaruuaskuaslumsseasn+asuOast+ebnOasuemjruath+atg+atieatkOatmeatlOatm+atn+atoeatuOatueatv+augOauhOaug+aujeaumOauleaunuaupOauquauq+aur+ausuauseaus+aut+auvOavhuavi+avk+avn+avrOavq+avs+avr1wiXSxcbltcIjlmODBcIixcIum6vuawiOawk+awlOawm+awpOawo+axnuaxleaxouaxquayguayjeaymuaygeaym+axvuaxqOaxs+aykuaykOazhOazseazk+ayveazl+azheazneayruayseayvuayuuazm+azr+azmeazqua0n+ihjea0tua0q+a0vea0uOa0mea0tea0s+a0kua0jOa1o+a2k+a1pOa1mua1uea1mea2jua2lea/pOa2hea3uea4lea4iua2tea3h+a3pua2uOa3hua3rOa3nua3jOa3qOa3kua3hea3uua3mea3pOa3lea3qua3rua4rea5rua4rua4mea5sua5n+a4vua4o+a5q+a4q+a5tua5jea4n+a5g+a4uua5jua4pOa7v+a4nea4uOa6gua6qua6mOa7iea6t+a7k+a6vea6r+a7hOa6sua7lOa7lea6j+a6pea7gua6n+a9gea8keeBjOa7rOa7uOa7vua8v+a7sua8sea7r+a8sua7jFwiXSxcbltcImUwNDBcIixcIua8vua8k+a7t+a+hua9uua9uOa+gea+gOa9r+a9m+a/s+a9rea+gua9vOa9mOa+jua+kea/gua9pua+s+a+o+a+oea+pOa+uea/hua+qua/n+a/lea/rOa/lOa/mOa/sea/rua/m+eAieeAi+a/uueAkeeAgeeAj+a/vueAm+eAmua9tOeAneeAmOeAn+eAsOeAvueAsueBkeeBo+eCmeeCkueCr+eDseeCrOeCuOeCs+eCrueDn+eDi+eDnVwiXSxcbltcImUwODBcIixcIueDmeeEieeDveeEnOeEmeeFpeeFleeGiOeFpueFoueFjOeFlueFrOeGj+eHu+eGhOeGleeGqOeGrOeHl+eGueeGvueHkueHieeHlOeHjueHoOeHrOeHp+eHteeHvOeHueeHv+eIjeeIkOeIm+eIqOeIreeIrOeIsOeIsueIu+eIvOeIv+eJgOeJhueJi+eJmOeJtOeJvueKgueKgeeKh+eKkueKlueKoueKp+eKueeKsueLg+eLhueLhOeLjueLkueLoueLoOeLoeeLueeLt+WAj+eMl+eMiueMnOeMlueMneeMtOeMr+eMqeeMpeeMvueNjueNj+m7mOeNl+eNqueNqOeNsOeNuOeNteeNu+eNuuePiOeOs+ePjueOu+ePgOePpeePruePnueSoueQheeRr+eQpeePuOeQsueQuueRleeQv+eRn+eRmeeRgeeRnOeRqeeRsOeRo+eRqueRtueRvueSi+eSnueSp+eTiueTj+eTlOePsVwiXSxcbltcImUxNDBcIixcIueToOeTo+eTp+eTqeeTrueTsueTsOeTseeTuOeTt+eUhOeUg+eUheeUjOeUjueUjeeUleeUk+eUnueUpueUrOeUvOeVhOeVjeeViueVieeVm+eVhueVmueVqeeVpOeVp+eVq+eVreeVuOeVtueWhueWh+eVtOeWiueWieeWgueWlOeWmueWneeWpeeWo+eXgueWs+eXg+eWteeWveeWuOeWvOeWseeXjeeXiueXkueXmeeXo+eXnueXvueXv1wiXSxcbltcImUxODBcIixcIueXvOeYgeeXsOeXuueXsueXs+eYi+eYjeeYieeYn+eYp+eYoOeYoeeYoueYpOeYtOeYsOeYu+eZh+eZiOeZhueZnOeZmOeZoeeZoueZqOeZqeeZqueZp+eZrOeZsOeZsueZtueZuOeZvOeagOeag+eaiOeai+eajuealueak+eameeamueasOeatOeauOeaueeauuebguebjeebluebkuebnueboeebpeebp+ebquiYr+ebu+eciOech+echOecqeecpOecnuecpeecpuecm+ect+ecuOedh+edmuedqOedq+edm+edpeedv+edvuedueeejueei+eekeeeoOeenueesOeetueeueeev+eevOeeveeeu+efh+efjeefl+efmuefnOefo+efruefvOegjOegkuekpuegoOekquehheeijuehtOeihuehvOeimueijOeio+eiteeiqueir+ejkeejhueji+ejlOeivueivOejheejiuejrFwiXSxcbltcImUyNDBcIixcIuejp+ejmuejveejtOekh+ekkuekkeekmeekrOekq+elgOeloOell+eln+elmuelleelk+eluuelv+emiuemneemp+m9i+emquemruems+emueemuuenieenleenp+enrOenoeeno+eoiOeojeeomOeomeeooOeon+emgOeoseeou+eovueot+epg+epl+epieepoeepouepqem+neepsOepueepveeqiOeql+eqleeqmOeqlueqqeeriOeqsFwiXSxcbltcImUyODBcIixcIueqtuerheerhOeqv+mCg+erh+eriuerjeerj+erleerk+ermeermuerneeroeerouerpuerreersOesguesj+esiueshuess+esmOesmeesnuesteesqOestuetkOetuueshOetjeesi+etjOetheetteetpeettOetp+etsOetseetrOetrueuneeumOeun+eujeeunOeumueui+eukueuj+etneeumeevi+evgeevjOevj+eutOevhuevneevqeewkeewlOevpuevpeexoOewgOewh+ewk+evs+evt+ewl+ewjeevtuewo+ewp+ewquewn+ewt+ewq+ewveexjOexg+exlOexj+exgOexkOexmOexn+expOexluexpeexrOexteeyg+eykOeypOeyreeyoueyq+eyoeeyqOeys+eysueyseeyrueyueeyveezgOezheezguezmOezkueznOezoumsu+ezr+ezsueztOeztuezuue0hlwiXSxcbltcImUzNDBcIixcIue0gue0nOe0lee0iue1hee1i+e0rue0sue0v+e0tee1hue1s+e1lue1jue1sue1qOe1rue1j+e1o+e2k+e2iee1m+e2j+e1vee2m+e2uue2rue2o+e2tee3h+e2vee2q+e4vee2oue2r+e3nOe2uOe2n+e2sOe3mOe3nee3pOe3nue3u+e3sue3oee4hee4iue4o+e4oee4kue4see4n+e4iee4i+e4oue5hue5pue4u+e4tee4uee5g+e4t1wiXSxcbltcImUzODBcIixcIue4sue4uue5p+e5nee5lue5nue5mee5mue5uee5que5qee5vOe5u+e6g+e3lee5vei+rue5v+e6iOe6iee6jOe6kue6kOe6k+e6lOe6lue6jue6m+e6nOe8uOe8uue9hee9jOe9jee9jue9kOe9kee9lee9lOe9mOe9n+e9oOe9qOe9qee9p+e9uOe+gue+hue+g+e+iOe+h+e+jOe+lOe+nue+nee+mue+o+e+r+e+sue+uee+rue+tue+uOitsee/hee/hue/iue/lee/lOe/oee/pue/qee/s+e/uemjnOiAhuiAhOiAi+iAkuiAmOiAmeiAnOiAoeiAqOiAv+iAu+iBiuiBhuiBkuiBmOiBmuiBn+iBouiBqOiBs+iBsuiBsOiBtuiBueiBveiBv+iChOiChuiCheiCm+iCk+iCmuiCreWGkOiCrOiDm+iDpeiDmeiDneiDhOiDmuiDluiEieiDr+iDseiEm+iEqeiEo+iEr+iFi1wiXSxcbltcImU0NDBcIixcIumai+iFhuiEvuiFk+iFkeiDvOiFseiFruiFpeiFpuiFtOiGg+iGiOiGiuiGgOiGguiGoOiGleiGpOiGo+iFn+iGk+iGqeiGsOiGteiGvuiGuOiGveiHgOiHguiGuuiHieiHjeiHkeiHmeiHmOiHiOiHmuiHn+iHoOiHp+iHuuiHu+iHvuiIgeiIguiIheiIh+iIiuiIjeiIkOiIluiIqeiIq+iIuOiIs+iJgOiJmeiJmOiJneiJmuiJn+iJpFwiXSxcbltcImU0ODBcIixcIuiJouiJqOiJquiJq+iIruiJseiJt+iJuOiJvuiKjeiKkuiKq+iKn+iKu+iKrOiLoeiLo+iLn+iLkuiLtOiLs+iLuuiOk+iMg+iLu+iLueiLnuiMhuiLnOiMieiLmeiMteiMtOiMluiMsuiMseiNgOiMueiNkOiNheiMr+iMq+iMl+iMmOiOheiOmuiOquiOn+iOouiOluiMo+iOjuiOh+iOiuiNvOiOteiNs+iNteiOoOiOieiOqOiPtOiQk+iPq+iPjuiPveiQg+iPmOiQi+iPgeiPt+iQh+iPoOiPsuiQjeiQouiQoOiOveiQuOiUhuiPu+iRreiQquiQvOiVmuiShOiRt+iRq+iSreiRruiSguiRqeiRhuiQrOiRr+iRueiQteiTiuiRouiSueiSv+iSn+iTmeiTjeiSu+iTmuiTkOiTgeiThuiTluiSoeiUoeiTv+iTtOiUl+iUmOiUrOiUn+iUleiUlOiTvOiVgOiVo+iVmOiViFwiXSxcbltcImU1NDBcIixcIuiVgeiYguiVi+iVleiWgOiWpOiWiOiWkeiWiuiWqOiVreiWlOiWm+iXquiWh+iWnOiVt+iVvuiWkOiXieiWuuiXj+iWueiXkOiXleiXneiXpeiXnOiXueiYiuiYk+iYi+iXvuiXuuiYhuiYouiYmuiYsOiYv+iZjeS5leiZlOiZn+iZp+iZseiak+iao+iaqeiaquiai+iajOiatuiar+ibhOibhuiasOibieigo+iaq+iblOibnuibqeibrFwiXSxcbltcImU1ODBcIixcIuibn+ibm+ibr+ickuichuiciOicgOicg+ibu+ickeicieicjeibueiciuictOicv+ict+icu+icpeicqeicmuidoOidn+iduOidjOidjuidtOidl+idqOidruidmeidk+ido+idquigheieouien+ieguier+ifi+ieveifgOifkOmbluieq+ifhOies+ifh+ifhuieu+ifr+ifsuifoOigj+igjeifvuiftuift+igjuifkuigkeigluigleigouigoeigseigtuigueigp+igu+ihhOihguihkuihmeihnuihouihq+iigeihvuiinuihteihveiiteihsuiiguiil+iikuiiruiimeiiouiijeiipOiisOiiv+iiseijg+ijhOijlOijmOijmeijneijueikguijvOijtOijqOijsuikhOikjOikiuikk+ilg+iknuikpeikquikq+ilgeilhOiku+iktuikuOiljOikneiloOilnlwiXSxcbltcImU2NDBcIixcIuilpuilpOilreilquilr+iltOilt+ilvuimg+imiOimiuimk+immOimoeimqeimpuimrOimr+imsuimuuimveimv+ingOinmuinnOinneinp+intOinuOiog+ioluiokOiojOiom+ioneiopeiotuipgeipm+ipkuiphuipiOipvOipreiprOipouiqheiqguiqhOiqqOiqoeiqkeiqpeiqpuiqmuiqo+irhOirjeirguirmuirq+irs+irp1wiXSxcbltcImU2ODBcIixcIuirpOirseislOiroOirouirt+irnuirm+isjOish+ismuiroeisluiskOisl+isoOiss+meq+ispuisq+isvuisqOitgeitjOitj+itjuitieitluitm+itmuitq+itn+itrOitr+ittOitveiugOiujOiujuiukuiuk+iuluiumeiumuiwuuixgeiwv+ixiOixjOixjuixkOixleixouixrOixuOixuuiyguiyieiyheiyiuiyjeiyjuiylOixvOiymOaIneiyreiyquiyveiysuiys+iyruiytuiziOizgeizpOizo+izmuizveizuuizu+i0hOi0hei0iui0h+i0j+i0jei0kOm9jui0k+izjei0lOi0lui1p+i1rei1sei1s+i2gei2mei3gui2vui2uui3j+i3mui3lui3jOi3m+i3i+i3qui3q+i3n+i3o+i3vOi4iOi4iei3v+i4nei4nui4kOi4n+i5gui4tei4sOi4tOi5ilwiXSxcbltcImU3NDBcIixcIui5h+i5iei5jOi5kOi5iOi5mei5pOi5oOi4qui5o+i5lei5tui5sui5vOi6gei6h+i6hei6hOi6i+i6iui6k+i6kei6lOi6mei6qui6oei6rOi6sOi7hui6sei6vui7hei7iOi7i+i7m+i7o+i7vOi7u+i7q+i7vui8iui8hei8lei8kui8mei8k+i8nOi8n+i8m+i8jOi8pui8s+i8u+i8uei9hei9gui8vui9jOi9iei9hui9jui9l+i9nFwiXSxcbltcImU3ODBcIixcIui9oui9o+i9pOi+nOi+n+i+o+i+rei+r+i+t+i/mui/pei/oui/qui/r+mCh+i/tOmAhei/uei/uumAkemAlemAoemAjemAnumAlumAi+mAp+mAtumAtemAuei/uOmBj+mBkOmBkemBkumAjumBiemAvumBlumBmOmBnumBqOmBr+mBtumaqOmBsumCgumBvemCgemCgOmCiumCiemCj+mCqOmCr+mCsemCtemDoumDpOaJiOmDm+mEgumEkumEmemEsumEsOmFiumFlumFmOmFo+mFpemFqemFs+mFsumGi+mGiemGgumGoumGq+mGr+mGqumGtemGtOmGuumHgOmHgemHiemHi+mHkOmHlumHn+mHoemHm+mHvOmHtemHtumInumHv+mIlOmIrOmIlemIkemJnumJl+mJhemJiemJpOmJiOmKlemIv+mJi+mJkOmKnOmKlumKk+mKm+mJmumLj+mKuemKt+mLqemMj+mLuumNhOmMrlwiXSxcbltcImU4NDBcIixcIumMmemMoumMmumMo+mMuumMtemMu+mNnOmNoOmNvOmNrumNlumOsOmOrOmOremOlOmOuemPlumPl+mPqOmPpemPmOmPg+mPnemPkOmPiOmPpOmQmumQlOmQk+mQg+mQh+mQkOmQtumQq+mQtemQoemQuumRgemRkumRhOmRm+mRoOmRoumRnumRqumIqemRsOmRtemRt+mRvemRmumRvOmRvumSgemRv+mWgumWh+mWiumWlOmWlumWmOmWmVwiXSxcbltcImU4ODBcIixcIumWoOmWqOmWp+mWremWvOmWu+mWuemWvumXiua/tumXg+mXjemXjOmXlemXlOmXlumXnOmXoemXpemXoumYoemYqOmYrumYr+mZgumZjOmZj+mZi+mZt+mZnOmZnumZnemZn+mZpumZsumZrOmajemamOmalemal+maqumap+masemasumasOmatOmatumauOmauembjumbi+mbiembjeiljembnOmcjemblembuemchOmchumciOmck+mcjumckemcj+mclumcmemcpOmcqumcsOmcuemcvemcvumdhOmdhumdiOmdgumdiemdnOmdoOmdpOmdpumdqOWLkumdq+mdsemduemehemdvOmegemduumehumei+mej+mekOmenOmeqOmepumeo+mes+metOmfg+mfhumfiOmfi+mfnOmfrem9j+mfsuern+mftumftemgj+mgjOmguOmgpOmgoemgt+mgvemhhumhj+mhi+mhq+mhr+mhsFwiXSxcbltcImU5NDBcIixcIumhsemhtOmhs+miqumir+misemitumjhOmjg+mjhumjqemjq+mkg+mkiemkkumklOmkmOmkoemknemknumkpOmkoOmkrOmkrumkvemkvumlgumliemlhemlkOmli+mlkemlkumljOmllemml+mmmOmmpemmremmrummvOmnn+mnm+mnnemnmOmnkemnremnrumnsemnsumnu+mnuOmogemoj+mohemnoumomemoq+mot+mphempgumpgOmpg1wiXSxcbltcImU5ODBcIixcIumovumplempjempm+mpl+mpn+mpoumppemppOmpqempq+mpqumqremqsOmqvOmrgOmrj+mrkemrk+mrlOmrnumrn+mroumro+mrpumrr+mrq+mrrumrtOmrsemrt+mru+mshumsmOmsmumsn+msoumso+mspemsp+msqOmsqemsqumsrumsr+mssumthOmtg+mtj+mtjemtjumtkemtmOmttOmuk+mug+mukemulumul+mun+muoOmuqOmutOmvgOmviumuuemvhumvj+mvkemvkumvo+mvoumvpOmvlOmvoemwuumvsumvsemvsOmwlemwlOmwiemwk+mwjOmwhumwiOmwkumwiumwhOmwrumwm+mwpemwpOmwoemwsOmxh+mwsumxhumwvumxmumxoOmxp+mxtumxuOmzp+mzrOmzsOm0iem0iOmzq+m0g+m0hum0qum0pum2r+m0o+m0n+m1hOm0lem0kum1gem0v+m0vum1hum1iFwiXSxcbltcImVhNDBcIixcIum1nem1num1pOm1kem1kOm1mem1sum2iem2h+m2q+m1r+m1uum2mum2pOm2qem2sum3hOm3gem2u+m2uOm2uum3hum3j+m3gum3mem3k+m3uOm3pum3rem3r+m3vem4mum4m+m4num5tem5uem5vem6gem6iOm6i+m6jOm6kum6lem6kem6nem6pem6qem6uOm6qum6remdoem7jOm7jum7j+m7kOm7lOm7nOm7num7nem7oOm7pem7qOm7r1wiXSxcbltcImVhODBcIixcIum7tOm7tum7t+m7uem7u+m7vOm7vem8h+m8iOeat+m8lem8oem8rOm8vum9ium9kum9lOm9o+m9n+m9oOm9oem9pum9p+m9rOm9qum9t+m9sum9tum+lem+nOm+oOWgr+anh+mBmeeRpOWHnOeGmVwiXSxcbltcImVkNDBcIixcIue6iuiknOmNiOmKiOiTnOS/ieeCu+aYseajiOmLueabu+W9heS4qOS7oeS7vOS8gOS8g+S8ueS9luS+kuS+iuS+muS+lOS/jeWBgOWAouS/v+WAnuWBhuWBsOWBguWClOWDtOWDmOWFiuWFpOWGneWGvuWHrOWIleWKnOWKpuWLgOWLm+WMgOWMh+WMpOWNsuWOk+WOsuWPne+ojuWSnOWSiuWSqeWTv+WWhuWdmeWdpeWerOWfiOWfh++oj1wiXSxcbltcImVkODBcIixcIu+okOWinuWisuWki+Wlk+Wlm+WlneWlo+WmpOWmuuWtluWvgOeUr+WvmOWvrOWwnuWypuWyuuWzteW0p+W1k++okeW1guW1reW2uOW2ueW3kOW8oeW8tOW9p+W+t+W/nuaBneaCheaCiuaDnuaDleaEoOaDsuaEkeaEt+aEsOaGmOaIk+aKpuaPteaRoOaSneaTjuaVjuaYgOaYleaYu+aYieaYruaYnuaYpOaZpeaZl+aZme+okuaZs+aameaaoOaasuaav+abuuacju+kqeadpuaeu+ahkuafgOaggeahhOajj++ok+alqO+olOammOanouaosOapq+aphuaps+apvuarouarpOavluawv+axnOayhuaxr+azmua0hOa2h+a1r+a2lua2rOa3j+a3uOa3sua3vOa4uea5nOa4p+a4vOa6v+a+iOa+tea/teeAheeAh+eAqOeCheeCq+eEj+eEhOeFnOeFhueFh++oleeHgeeHvueKsVwiXSxcbltcImVlNDBcIixcIueKvueMpO+olueNt+eOveePieePluePo+ePkueQh+ePteeQpueQqueQqeeQrueRoueSieeSn+eUgeeVr+eagueanOeanueam+eapu+ol+edhuWKr+egoeehjuehpOehuueksO+omO+ome+omuemlO+om+emm+erkeerp++onOerq+eunu+onee1iOe1nOe2t+e2oOe3lue5kue9h+e+oe+onuiMgeiNouiNv+iPh+iPtuiRiOiStOiVk+iVmVwiXSxcbltcImVlODBcIixcIuiVq++on+iWsO+ooO+ooeigh+ijteiokuiot+ipueiqp+iqvuirn++oouirtuitk+itv+izsOiztOi0kui1tu+oo+i7j++opO+opemBp+mDnu+opumElemEp+mHmumHl+mHnumHremHrumHpOmHpemIhumIkOmIiumIuumJgOmIvOmJjumJmemJkemIuemJp+mKp+mJt+mJuOmLp+mLl+mLmemLkO+op+mLlemLoOmLk+mMpemMoemLu++oqOmMnumLv+mMnemMgumNsOmNl+mOpOmPhumPnumPuOmQsemRhemRiOmWku+nnO+oqemanemar+mcs+mcu+mdg+mdjemdj+mdkemdlemhl+mhpe+oqu+oq+mkp++orOmmnumpjumrmemrnOmttemtsumuj+musemuu+mwgOm1sOm1q++orem4mem7kVwiXSxcbltcImVlZWZcIixcIuKFsFwiLDksXCLvv6Lvv6TvvIfvvIJcIl0sXG5bXCJmMDQwXCIsXCLugIBcIiw2Ml0sXG5bXCJmMDgwXCIsXCLugL9cIiwxMjRdLFxuW1wiZjE0MFwiLFwi7oK8XCIsNjJdLFxuW1wiZjE4MFwiLFwi7oO7XCIsMTI0XSxcbltcImYyNDBcIixcIu6FuFwiLDYyXSxcbltcImYyODBcIixcIu6Gt1wiLDEyNF0sXG5bXCJmMzQwXCIsXCLuiLRcIiw2Ml0sXG5bXCJmMzgwXCIsXCLuibNcIiwxMjRdLFxuW1wiZjQ0MFwiLFwi7ouwXCIsNjJdLFxuW1wiZjQ4MFwiLFwi7oyvXCIsMTI0XSxcbltcImY1NDBcIixcIu6OrFwiLDYyXSxcbltcImY1ODBcIixcIu6Pq1wiLDEyNF0sXG5bXCJmNjQwXCIsXCLukahcIiw2Ml0sXG5bXCJmNjgwXCIsXCLukqdcIiwxMjRdLFxuW1wiZjc0MFwiLFwi7pSkXCIsNjJdLFxuW1wiZjc4MFwiLFwi7pWjXCIsMTI0XSxcbltcImY4NDBcIixcIu6XoFwiLDYyXSxcbltcImY4ODBcIixcIu6Yn1wiLDEyNF0sXG5bXCJmOTQwXCIsXCLumpxcIl0sXG5bXCJmYTQwXCIsXCLihbBcIiw5LFwi4oWgXCIsOSxcIu+/ou+/pO+8h++8guOIseKEluKEoeKItee6iuiknOmNiOmKiOiTnOS/ieeCu+aYseajiOmLueabu+W9heS4qOS7oeS7vOS8gOS8g+S8ueS9luS+kuS+iuS+muS+lOS/jeWBgOWAouS/v+WAnuWBhuWBsOWBguWClOWDtOWDmOWFilwiXSxcbltcImZhODBcIixcIuWFpOWGneWGvuWHrOWIleWKnOWKpuWLgOWLm+WMgOWMh+WMpOWNsuWOk+WOsuWPne+ojuWSnOWSiuWSqeWTv+WWhuWdmeWdpeWerOWfiOWfh++oj++okOWinuWisuWki+Wlk+Wlm+WlneWlo+WmpOWmuuWtluWvgOeUr+WvmOWvrOWwnuWypuWyuuWzteW0p+W1k++okeW1guW1reW2uOW2ueW3kOW8oeW8tOW9p+W+t+W/nuaBneaCheaCiuaDnuaDleaEoOaDsuaEkeaEt+aEsOaGmOaIk+aKpuaPteaRoOaSneaTjuaVjuaYgOaYleaYu+aYieaYruaYnuaYpOaZpeaZl+aZme+okuaZs+aameaaoOaasuaav+abuuacju+kqeadpuaeu+ahkuafgOaggeahhOajj++ok+alqO+olOammOanouaosOapq+aphuaps+apvuarouarpOavluawv+axnOayhuaxr+azmua0hOa2h+a1r1wiXSxcbltcImZiNDBcIixcIua2lua2rOa3j+a3uOa3sua3vOa4uea5nOa4p+a4vOa6v+a+iOa+tea/teeAheeAh+eAqOeCheeCq+eEj+eEhOeFnOeFhueFh++oleeHgeeHvueKseeKvueMpO+olueNt+eOveePieePluePo+ePkueQh+ePteeQpueQqueQqeeQrueRoueSieeSn+eUgeeVr+eagueanOeanueam+eapu+ol+edhuWKr+egoeehjuehpOehuueksO+omO+omVwiXSxcbltcImZiODBcIixcIu+omuemlO+om+emm+erkeerp++onOerq+eunu+onee1iOe1nOe2t+e2oOe3lue5kue9h+e+oe+onuiMgeiNouiNv+iPh+iPtuiRiOiStOiVk+iVmeiVq++on+iWsO+ooO+ooeigh+ijteiokuiot+ipueiqp+iqvuirn++oouirtuitk+itv+izsOiztOi0kui1tu+oo+i7j++opO+opemBp+mDnu+opumElemEp+mHmumHl+mHnumHremHrumHpOmHpemIhumIkOmIiumIuumJgOmIvOmJjumJmemJkemIuemJp+mKp+mJt+mJuOmLp+mLl+mLmemLkO+op+mLlemLoOmLk+mMpemMoemLu++oqOmMnumLv+mMnemMgumNsOmNl+mOpOmPhumPnumPuOmQsemRhemRiOmWku+nnO+oqemanemar+mcs+mcu+mdg+mdjemdj+mdkemdlemhl+mhpe+oqu+oq+mkp++orOmmnumpjumrmVwiXSxcbltcImZjNDBcIixcIumrnOmttemtsumuj+musemuu+mwgOm1sOm1q++orem4mem7kVwiXVxuXVxuIiwiXCJ1c2Ugc3RyaWN0XCJcblxuLy8gPT0gVVRGMTYtQkUgY29kZWMuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0cy51dGYxNmJlID0gVXRmMTZCRUNvZGVjO1xuZnVuY3Rpb24gVXRmMTZCRUNvZGVjKCkge1xufVxuXG5VdGYxNkJFQ29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBVdGYxNkJFRW5jb2RlcjtcblV0ZjE2QkVDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFV0ZjE2QkVEZWNvZGVyO1xuVXRmMTZCRUNvZGVjLnByb3RvdHlwZS5ib21Bd2FyZSA9IHRydWU7XG5cblxuLy8gLS0gRW5jb2RpbmdcblxuZnVuY3Rpb24gVXRmMTZCRUVuY29kZXIoKSB7XG59XG5cblV0ZjE2QkVFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBidWYgPSBuZXcgQnVmZmVyKHN0ciwgJ3VjczInKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB2YXIgdG1wID0gYnVmW2ldOyBidWZbaV0gPSBidWZbaSsxXTsgYnVmW2krMV0gPSB0bXA7XG4gICAgfVxuICAgIHJldHVybiBidWY7XG59XG5cblV0ZjE2QkVFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGYxNkJFRGVjb2RlcigpIHtcbiAgICB0aGlzLm92ZXJmbG93Qnl0ZSA9IC0xO1xufVxuXG5VdGYxNkJFRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICBpZiAoYnVmLmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4gJyc7XG5cbiAgICB2YXIgYnVmMiA9IG5ldyBCdWZmZXIoYnVmLmxlbmd0aCArIDEpLFxuICAgICAgICBpID0gMCwgaiA9IDA7XG5cbiAgICBpZiAodGhpcy5vdmVyZmxvd0J5dGUgIT09IC0xKSB7XG4gICAgICAgIGJ1ZjJbMF0gPSBidWZbMF07XG4gICAgICAgIGJ1ZjJbMV0gPSB0aGlzLm92ZXJmbG93Qnl0ZTtcbiAgICAgICAgaSA9IDE7IGogPSAyO1xuICAgIH1cblxuICAgIGZvciAoOyBpIDwgYnVmLmxlbmd0aC0xOyBpICs9IDIsIGorPSAyKSB7XG4gICAgICAgIGJ1ZjJbal0gPSBidWZbaSsxXTtcbiAgICAgICAgYnVmMltqKzFdID0gYnVmW2ldO1xuICAgIH1cblxuICAgIHRoaXMub3ZlcmZsb3dCeXRlID0gKGkgPT0gYnVmLmxlbmd0aC0xKSA/IGJ1ZltidWYubGVuZ3RoLTFdIDogLTE7XG5cbiAgICByZXR1cm4gYnVmMi5zbGljZSgwLCBqKS50b1N0cmluZygndWNzMicpO1xufVxuXG5VdGYxNkJFRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cblxuLy8gPT0gVVRGLTE2IGNvZGVjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERlY29kZXIgY2hvb3NlcyBhdXRvbWF0aWNhbGx5IGZyb20gVVRGLTE2TEUgYW5kIFVURi0xNkJFIHVzaW5nIEJPTSBhbmQgc3BhY2UtYmFzZWQgaGV1cmlzdGljLlxuLy8gRGVmYXVsdHMgdG8gVVRGLTE2TEUsIGFzIGl0J3MgcHJldmFsZW50IGFuZCBkZWZhdWx0IGluIE5vZGUuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi0xNiBhbmQgaHR0cDovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTE2bGVcbi8vIERlY29kZXIgZGVmYXVsdCBjYW4gYmUgY2hhbmdlZDogaWNvbnYuZGVjb2RlKGJ1ZiwgJ3V0ZjE2Jywge2RlZmF1bHRFbmNvZGluZzogJ3V0Zi0xNmJlJ30pO1xuXG4vLyBFbmNvZGVyIHVzZXMgVVRGLTE2TEUgYW5kIHByZXBlbmRzIEJPTSAod2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBhZGRCT006IGZhbHNlKS5cblxuZXhwb3J0cy51dGYxNiA9IFV0ZjE2Q29kZWM7XG5mdW5jdGlvbiBVdGYxNkNvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICB0aGlzLmljb252ID0gaWNvbnY7XG59XG5cblV0ZjE2Q29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBVdGYxNkVuY29kZXI7XG5VdGYxNkNvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmMTZEZWNvZGVyO1xuXG5cbi8vIC0tIEVuY29kaW5nIChwYXNzLXRocm91Z2gpXG5cbmZ1bmN0aW9uIFV0ZjE2RW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmIChvcHRpb25zLmFkZEJPTSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICBvcHRpb25zLmFkZEJPTSA9IHRydWU7XG4gICAgdGhpcy5lbmNvZGVyID0gY29kZWMuaWNvbnYuZ2V0RW5jb2RlcigndXRmLTE2bGUnLCBvcHRpb25zKTtcbn1cblxuVXRmMTZFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLmVuY29kZXIud3JpdGUoc3RyKTtcbn1cblxuVXRmMTZFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpO1xufVxuXG5cbi8vIC0tIERlY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjE2RGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gICAgdGhpcy5pbml0aWFsQnl0ZXMgPSBbXTtcbiAgICB0aGlzLmluaXRpYWxCeXRlc0xlbiA9IDA7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMuaWNvbnYgPSBjb2RlYy5pY29udjtcbn1cblxuVXRmMTZEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIGlmICghdGhpcy5kZWNvZGVyKSB7XG4gICAgICAgIC8vIENvZGVjIGlzIG5vdCBjaG9zZW4geWV0LiBBY2N1bXVsYXRlIGluaXRpYWwgYnl0ZXMuXG4gICAgICAgIHRoaXMuaW5pdGlhbEJ5dGVzLnB1c2goYnVmKTtcbiAgICAgICAgdGhpcy5pbml0aWFsQnl0ZXNMZW4gKz0gYnVmLmxlbmd0aDtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxCeXRlc0xlbiA8IDE2KSAvLyBXZSBuZWVkIG1vcmUgYnl0ZXMgdG8gdXNlIHNwYWNlIGhldXJpc3RpYyAoc2VlIGJlbG93KVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuXG4gICAgICAgIC8vIFdlIGhhdmUgZW5vdWdoIGJ5dGVzIC0+IGRldGVjdCBlbmRpYW5uZXNzLlxuICAgICAgICB2YXIgYnVmID0gQnVmZmVyLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksXG4gICAgICAgICAgICBlbmNvZGluZyA9IGRldGVjdEVuY29kaW5nKGJ1ZiwgdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IHRoaXMuaWNvbnYuZ2V0RGVjb2RlcihlbmNvZGluZywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5pbml0aWFsQnl0ZXMubGVuZ3RoID0gdGhpcy5pbml0aWFsQnl0ZXNMZW4gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoYnVmKTtcbn1cblxuVXRmMTZEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuZGVjb2Rlcikge1xuICAgICAgICB2YXIgYnVmID0gQnVmZmVyLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksXG4gICAgICAgICAgICBlbmNvZGluZyA9IGRldGVjdEVuY29kaW5nKGJ1ZiwgdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IHRoaXMuaWNvbnYuZ2V0RGVjb2RlcihlbmNvZGluZywgdGhpcy5vcHRpb25zKTtcblxuICAgICAgICB2YXIgcmVzID0gdGhpcy5kZWNvZGVyLndyaXRlKGJ1ZiksXG4gICAgICAgICAgICB0cmFpbCA9IHRoaXMuZGVjb2Rlci5lbmQoKTtcblxuICAgICAgICByZXR1cm4gdHJhaWwgPyAocmVzICsgdHJhaWwpIDogcmVzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpO1xufVxuXG5mdW5jdGlvbiBkZXRlY3RFbmNvZGluZyhidWYsIGRlZmF1bHRFbmNvZGluZykge1xuICAgIHZhciBlbmMgPSBkZWZhdWx0RW5jb2RpbmcgfHwgJ3V0Zi0xNmxlJztcblxuICAgIGlmIChidWYubGVuZ3RoID49IDIpIHtcbiAgICAgICAgLy8gQ2hlY2sgQk9NLlxuICAgICAgICBpZiAoYnVmWzBdID09IDB4RkUgJiYgYnVmWzFdID09IDB4RkYpIC8vIFVURi0xNkJFIEJPTVxuICAgICAgICAgICAgZW5jID0gJ3V0Zi0xNmJlJztcbiAgICAgICAgZWxzZSBpZiAoYnVmWzBdID09IDB4RkYgJiYgYnVmWzFdID09IDB4RkUpIC8vIFVURi0xNkxFIEJPTVxuICAgICAgICAgICAgZW5jID0gJ3V0Zi0xNmxlJztcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBObyBCT00gZm91bmQuIFRyeSB0byBkZWR1Y2UgZW5jb2RpbmcgZnJvbSBpbml0aWFsIGNvbnRlbnQuXG4gICAgICAgICAgICAvLyBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgY29udGVudCBoYXMgQVNDSUkgY2hhcnMgKFUrMDAqKiksIGJ1dCB0aGUgb3Bwb3NpdGUgKFUrKiowMCkgaXMgdW5jb21tb24uXG4gICAgICAgICAgICAvLyBTbywgd2UgY291bnQgQVNDSUkgYXMgaWYgaXQgd2FzIExFIG9yIEJFLCBhbmQgZGVjaWRlIGZyb20gdGhhdC5cbiAgICAgICAgICAgIHZhciBhc2NpaUNoYXJzTEUgPSAwLCBhc2NpaUNoYXJzQkUgPSAwLCAvLyBDb3VudHMgb2YgY2hhcnMgaW4gYm90aCBwb3NpdGlvbnNcbiAgICAgICAgICAgICAgICBfbGVuID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIChidWYubGVuZ3RoICUgMiksIDY0KTsgLy8gTGVuIGlzIGFsd2F5cyBldmVuLlxuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9sZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIGlmIChidWZbaV0gPT09IDAgJiYgYnVmW2krMV0gIT09IDApIGFzY2lpQ2hhcnNCRSsrO1xuICAgICAgICAgICAgICAgIGlmIChidWZbaV0gIT09IDAgJiYgYnVmW2krMV0gPT09IDApIGFzY2lpQ2hhcnNMRSsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXNjaWlDaGFyc0JFID4gYXNjaWlDaGFyc0xFKVxuICAgICAgICAgICAgICAgIGVuYyA9ICd1dGYtMTZiZSc7XG4gICAgICAgICAgICBlbHNlIGlmIChhc2NpaUNoYXJzQkUgPCBhc2NpaUNoYXJzTEUpXG4gICAgICAgICAgICAgICAgZW5jID0gJ3V0Zi0xNmxlJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbmM7XG59XG5cblxuIiwiXCJ1c2Ugc3RyaWN0XCJcblxuLy8gVVRGLTcgY29kZWMsIGFjY29yZGluZyB0byBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjE1MlxuLy8gU2VlIGFsc28gYmVsb3cgYSBVVEYtNy1JTUFQIGNvZGVjLCBhY2NvcmRpbmcgdG8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTUuMS4zXG5cbmV4cG9ydHMudXRmNyA9IFV0ZjdDb2RlYztcbmV4cG9ydHMudW5pY29kZTExdXRmNyA9ICd1dGY3JzsgLy8gQWxpYXMgVU5JQ09ERS0xLTEtVVRGLTdcbmZ1bmN0aW9uIFV0ZjdDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5pY29udiA9IGljb252O1xufTtcblxuVXRmN0NvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmN0VuY29kZXI7XG5VdGY3Q29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGY3RGVjb2RlcjtcblV0ZjdDb2RlYy5wcm90b3R5cGUuYm9tQXdhcmUgPSB0cnVlO1xuXG5cbi8vIC0tIEVuY29kaW5nXG5cbnZhciBub25EaXJlY3RDaGFycyA9IC9bXkEtWmEtejAtOSdcXChcXCksLVxcLlxcLzpcXD8gXFxuXFxyXFx0XSsvZztcblxuZnVuY3Rpb24gVXRmN0VuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG59XG5cblV0ZjdFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIC8vIE5haXZlIGltcGxlbWVudGF0aW9uLlxuICAgIC8vIE5vbi1kaXJlY3QgY2hhcnMgYXJlIGVuY29kZWQgYXMgXCIrPGJhc2U2ND4tXCI7IHNpbmdsZSBcIitcIiBjaGFyIGlzIGVuY29kZWQgYXMgXCIrLVwiLlxuICAgIHJldHVybiBuZXcgQnVmZmVyKHN0ci5yZXBsYWNlKG5vbkRpcmVjdENoYXJzLCBmdW5jdGlvbihjaHVuaykge1xuICAgICAgICByZXR1cm4gXCIrXCIgKyAoY2h1bmsgPT09ICcrJyA/ICcnIDogXG4gICAgICAgICAgICB0aGlzLmljb252LmVuY29kZShjaHVuaywgJ3V0ZjE2LWJlJykudG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoLz0rJC8sICcnKSkgXG4gICAgICAgICAgICArIFwiLVwiO1xuICAgIH0uYmluZCh0aGlzKSkpO1xufVxuXG5VdGY3RW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cblxuLy8gLS0gRGVjb2RpbmdcblxuZnVuY3Rpb24gVXRmN0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSAnJztcbn1cblxudmFyIGJhc2U2NFJlZ2V4ID0gL1tBLVphLXowLTlcXC8rXS87XG52YXIgYmFzZTY0Q2hhcnMgPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspXG4gICAgYmFzZTY0Q2hhcnNbaV0gPSBiYXNlNjRSZWdleC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpO1xuXG52YXIgcGx1c0NoYXIgPSAnKycuY2hhckNvZGVBdCgwKSwgXG4gICAgbWludXNDaGFyID0gJy0nLmNoYXJDb2RlQXQoMCksXG4gICAgYW5kQ2hhciA9ICcmJy5jaGFyQ29kZUF0KDApO1xuXG5VdGY3RGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICB2YXIgcmVzID0gXCJcIiwgbGFzdEkgPSAwLFxuICAgICAgICBpbkJhc2U2NCA9IHRoaXMuaW5CYXNlNjQsXG4gICAgICAgIGJhc2U2NEFjY3VtID0gdGhpcy5iYXNlNjRBY2N1bTtcblxuICAgIC8vIFRoZSBkZWNvZGVyIGlzIG1vcmUgaW52b2x2ZWQgYXMgd2UgbXVzdCBoYW5kbGUgY2h1bmtzIGluIHN0cmVhbS5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaW5CYXNlNjQpIHsgLy8gV2UncmUgaW4gZGlyZWN0IG1vZGUuXG4gICAgICAgICAgICAvLyBXcml0ZSBkaXJlY3QgY2hhcnMgdW50aWwgJysnXG4gICAgICAgICAgICBpZiAoYnVmW2ldID09IHBsdXNDaGFyKSB7XG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSwgaSksIFwiYXNjaWlcIik7IC8vIFdyaXRlIGRpcmVjdCBjaGFycy5cbiAgICAgICAgICAgICAgICBsYXN0SSA9IGkrMTtcbiAgICAgICAgICAgICAgICBpbkJhc2U2NCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7IC8vIFdlIGRlY29kZSBiYXNlNjQuXG4gICAgICAgICAgICBpZiAoIWJhc2U2NENoYXJzW2J1ZltpXV0pIHsgLy8gQmFzZTY0IGVuZGVkLlxuICAgICAgICAgICAgICAgIGlmIChpID09IGxhc3RJICYmIGJ1ZltpXSA9PSBtaW51c0NoYXIpIHsvLyBcIistXCIgLT4gXCIrXCJcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IFwiK1wiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIGJ1Zi5zbGljZShsYXN0SSwgaSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKG5ldyBCdWZmZXIoYjY0c3RyLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSAhPSBtaW51c0NoYXIpIC8vIE1pbnVzIGlzIGFic29yYmVkIGFmdGVyIGJhc2U2NC5cbiAgICAgICAgICAgICAgICAgICAgaS0tO1xuXG4gICAgICAgICAgICAgICAgbGFzdEkgPSBpKzE7XG4gICAgICAgICAgICAgICAgaW5CYXNlNjQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbkJhc2U2NCkge1xuICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJKSwgXCJhc2NpaVwiKTsgLy8gV3JpdGUgZGlyZWN0IGNoYXJzLlxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIGJ1Zi5zbGljZShsYXN0SSkudG9TdHJpbmcoKTtcblxuICAgICAgICB2YXIgY2FuQmVEZWNvZGVkID0gYjY0c3RyLmxlbmd0aCAtIChiNjRzdHIubGVuZ3RoICUgOCk7IC8vIE1pbmltYWwgY2h1bms6IDIgcXVhZHMgLT4gMngzIGJ5dGVzIC0+IDMgY2hhcnMuXG4gICAgICAgIGJhc2U2NEFjY3VtID0gYjY0c3RyLnNsaWNlKGNhbkJlRGVjb2RlZCk7IC8vIFRoZSByZXN0IHdpbGwgYmUgZGVjb2RlZCBpbiBmdXR1cmUuXG4gICAgICAgIGI2NHN0ciA9IGI2NHN0ci5zbGljZSgwLCBjYW5CZURlY29kZWQpO1xuXG4gICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShuZXcgQnVmZmVyKGI2NHN0ciwgJ2Jhc2U2NCcpLCBcInV0ZjE2LWJlXCIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5CYXNlNjQgPSBpbkJhc2U2NDtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gYmFzZTY0QWNjdW07XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5VdGY3RGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQgJiYgdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGggPiAwKVxuICAgICAgICByZXMgPSB0aGlzLmljb252LmRlY29kZShuZXcgQnVmZmVyKHRoaXMuYmFzZTY0QWNjdW0sICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcblxuICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gJyc7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG4vLyBVVEYtNy1JTUFQIGNvZGVjLlxuLy8gUkZDMzUwMSBTZWMuIDUuMS4zIE1vZGlmaWVkIFVURi03IChodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNS4xLjMpXG4vLyBEaWZmZXJlbmNlczpcbi8vICAqIEJhc2U2NCBwYXJ0IGlzIHN0YXJ0ZWQgYnkgXCImXCIgaW5zdGVhZCBvZiBcIitcIlxuLy8gICogRGlyZWN0IGNoYXJhY3RlcnMgYXJlIDB4MjAtMHg3RSwgZXhjZXB0IFwiJlwiICgweDI2KVxuLy8gICogSW4gQmFzZTY0LCBcIixcIiBpcyB1c2VkIGluc3RlYWQgb2YgXCIvXCJcbi8vICAqIEJhc2U2NCBtdXN0IG5vdCBiZSB1c2VkIHRvIHJlcHJlc2VudCBkaXJlY3QgY2hhcmFjdGVycy5cbi8vICAqIE5vIGltcGxpY2l0IHNoaWZ0IGJhY2sgZnJvbSBCYXNlNjQgKHNob3VsZCBhbHdheXMgZW5kIHdpdGggJy0nKVxuLy8gICogU3RyaW5nIG11c3QgZW5kIGluIG5vbi1zaGlmdGVkIHBvc2l0aW9uLlxuLy8gICogXCItJlwiIHdoaWxlIGluIGJhc2U2NCBpcyBub3QgYWxsb3dlZC5cblxuXG5leHBvcnRzLnV0ZjdpbWFwID0gVXRmN0lNQVBDb2RlYztcbmZ1bmN0aW9uIFV0ZjdJTUFQQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuaWNvbnYgPSBpY29udjtcbn07XG5cblV0ZjdJTUFQQ29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBVdGY3SU1BUEVuY29kZXI7XG5VdGY3SU1BUENvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmN0lNQVBEZWNvZGVyO1xuVXRmN0lNQVBDb2RlYy5wcm90b3R5cGUuYm9tQXdhcmUgPSB0cnVlO1xuXG5cbi8vIC0tIEVuY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjdJTUFQRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuaWNvbnYgPSBjb2RlYy5pY29udjtcbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9IG5ldyBCdWZmZXIoNik7XG4gICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IDA7XG59XG5cblV0ZjdJTUFQRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgaW5CYXNlNjQgPSB0aGlzLmluQmFzZTY0LFxuICAgICAgICBiYXNlNjRBY2N1bSA9IHRoaXMuYmFzZTY0QWNjdW0sXG4gICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gdGhpcy5iYXNlNjRBY2N1bUlkeCxcbiAgICAgICAgYnVmID0gbmV3IEJ1ZmZlcihzdHIubGVuZ3RoKjUgKyAxMCksIGJ1ZklkeCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdUNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKDB4MjAgPD0gdUNoYXIgJiYgdUNoYXIgPD0gMHg3RSkgeyAvLyBEaXJlY3QgY2hhcmFjdGVyIG9yICcmJy5cbiAgICAgICAgICAgIGlmIChpbkJhc2U2NCkge1xuICAgICAgICAgICAgICAgIGlmIChiYXNlNjRBY2N1bUlkeCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmSWR4ICs9IGJ1Zi53cml0ZShiYXNlNjRBY2N1bS5zbGljZSgwLCBiYXNlNjRBY2N1bUlkeCkudG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoL1xcLy9nLCAnLCcpLnJlcGxhY2UoLz0rJC8sICcnKSwgYnVmSWR4KTtcbiAgICAgICAgICAgICAgICAgICAgYmFzZTY0QWNjdW1JZHggPSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7IC8vIFdyaXRlICctJywgdGhlbiBnbyB0byBkaXJlY3QgbW9kZS5cbiAgICAgICAgICAgICAgICBpbkJhc2U2NCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWluQmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IHVDaGFyOyAvLyBXcml0ZSBkaXJlY3QgY2hhcmFjdGVyXG5cbiAgICAgICAgICAgICAgICBpZiAodUNoYXIgPT09IGFuZENoYXIpICAvLyBBbXBlcnNhbmQgLT4gJyYtJ1xuICAgICAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gbWludXNDaGFyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7IC8vIE5vbi1kaXJlY3QgY2hhcmFjdGVyXG4gICAgICAgICAgICBpZiAoIWluQmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IGFuZENoYXI7IC8vIFdyaXRlICcmJywgdGhlbiBnbyB0byBiYXNlNjQgbW9kZS5cbiAgICAgICAgICAgICAgICBpbkJhc2U2NCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bVtiYXNlNjRBY2N1bUlkeCsrXSA9IHVDaGFyID4+IDg7XG4gICAgICAgICAgICAgICAgYmFzZTY0QWNjdW1bYmFzZTY0QWNjdW1JZHgrK10gPSB1Q2hhciAmIDB4RkY7XG5cbiAgICAgICAgICAgICAgICBpZiAoYmFzZTY0QWNjdW1JZHggPT0gYmFzZTY0QWNjdW0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZklkeCArPSBidWYud3JpdGUoYmFzZTY0QWNjdW0udG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoL1xcLy9nLCAnLCcpLCBidWZJZHgpO1xuICAgICAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bUlkeCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbkJhc2U2NCA9IGluQmFzZTY0O1xuICAgIHRoaXMuYmFzZTY0QWNjdW1JZHggPSBiYXNlNjRBY2N1bUlkeDtcblxuICAgIHJldHVybiBidWYuc2xpY2UoMCwgYnVmSWR4KTtcbn1cblxuVXRmN0lNQVBFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcigxMCksIGJ1ZklkeCA9IDA7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQpIHtcbiAgICAgICAgaWYgKHRoaXMuYmFzZTY0QWNjdW1JZHggPiAwKSB7XG4gICAgICAgICAgICBidWZJZHggKz0gYnVmLndyaXRlKHRoaXMuYmFzZTY0QWNjdW0uc2xpY2UoMCwgdGhpcy5iYXNlNjRBY2N1bUlkeCkudG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoL1xcLy9nLCAnLCcpLnJlcGxhY2UoLz0rJC8sICcnKSwgYnVmSWR4KTtcbiAgICAgICAgICAgIHRoaXMuYmFzZTY0QWNjdW1JZHggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmW2J1ZklkeCsrXSA9IG1pbnVzQ2hhcjsgLy8gV3JpdGUgJy0nLCB0aGVuIGdvIHRvIGRpcmVjdCBtb2RlLlxuICAgICAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwLCBidWZJZHgpO1xufVxuXG5cbi8vIC0tIERlY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjdJTUFQRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuaWNvbnYgPSBjb2RlYy5pY29udjtcbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9ICcnO1xufVxuXG52YXIgYmFzZTY0SU1BUENoYXJzID0gYmFzZTY0Q2hhcnMuc2xpY2UoKTtcbmJhc2U2NElNQVBDaGFyc1snLCcuY2hhckNvZGVBdCgwKV0gPSB0cnVlO1xuXG5VdGY3SU1BUERlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgdmFyIHJlcyA9IFwiXCIsIGxhc3RJID0gMCxcbiAgICAgICAgaW5CYXNlNjQgPSB0aGlzLmluQmFzZTY0LFxuICAgICAgICBiYXNlNjRBY2N1bSA9IHRoaXMuYmFzZTY0QWNjdW07XG5cbiAgICAvLyBUaGUgZGVjb2RlciBpcyBtb3JlIGludm9sdmVkIGFzIHdlIG11c3QgaGFuZGxlIGNodW5rcyBpbiBzdHJlYW0uXG4gICAgLy8gSXQgaXMgZm9yZ2l2aW5nLCBjbG9zZXIgdG8gc3RhbmRhcmQgVVRGLTcgKGZvciBleGFtcGxlLCAnLScgaXMgb3B0aW9uYWwgYXQgdGhlIGVuZCkuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWluQmFzZTY0KSB7IC8vIFdlJ3JlIGluIGRpcmVjdCBtb2RlLlxuICAgICAgICAgICAgLy8gV3JpdGUgZGlyZWN0IGNoYXJzIHVudGlsICcmJ1xuICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PSBhbmRDaGFyKSB7XG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSwgaSksIFwiYXNjaWlcIik7IC8vIFdyaXRlIGRpcmVjdCBjaGFycy5cbiAgICAgICAgICAgICAgICBsYXN0SSA9IGkrMTtcbiAgICAgICAgICAgICAgICBpbkJhc2U2NCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7IC8vIFdlIGRlY29kZSBiYXNlNjQuXG4gICAgICAgICAgICBpZiAoIWJhc2U2NElNQVBDaGFyc1tidWZbaV1dKSB7IC8vIEJhc2U2NCBlbmRlZC5cbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsYXN0SSAmJiBidWZbaV0gPT0gbWludXNDaGFyKSB7IC8vIFwiJi1cIiAtPiBcIiZcIlxuICAgICAgICAgICAgICAgICAgICByZXMgKz0gXCImXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGI2NHN0ciA9IGJhc2U2NEFjY3VtICsgYnVmLnNsaWNlKGxhc3RJLCBpKS50b1N0cmluZygpLnJlcGxhY2UoLywvZywgJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKG5ldyBCdWZmZXIoYjY0c3RyLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSAhPSBtaW51c0NoYXIpIC8vIE1pbnVzIG1heSBiZSBhYnNvcmJlZCBhZnRlciBiYXNlNjQuXG4gICAgICAgICAgICAgICAgICAgIGktLTtcblxuICAgICAgICAgICAgICAgIGxhc3RJID0gaSsxO1xuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYmFzZTY0QWNjdW0gPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSksIFwiYXNjaWlcIik7IC8vIFdyaXRlIGRpcmVjdCBjaGFycy5cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYjY0c3RyID0gYmFzZTY0QWNjdW0gKyBidWYuc2xpY2UobGFzdEkpLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCAnLycpO1xuXG4gICAgICAgIHZhciBjYW5CZURlY29kZWQgPSBiNjRzdHIubGVuZ3RoIC0gKGI2NHN0ci5sZW5ndGggJSA4KTsgLy8gTWluaW1hbCBjaHVuazogMiBxdWFkcyAtPiAyeDMgYnl0ZXMgLT4gMyBjaGFycy5cbiAgICAgICAgYmFzZTY0QWNjdW0gPSBiNjRzdHIuc2xpY2UoY2FuQmVEZWNvZGVkKTsgLy8gVGhlIHJlc3Qgd2lsbCBiZSBkZWNvZGVkIGluIGZ1dHVyZS5cbiAgICAgICAgYjY0c3RyID0gYjY0c3RyLnNsaWNlKDAsIGNhbkJlRGVjb2RlZCk7XG5cbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKG5ldyBCdWZmZXIoYjY0c3RyLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG4gICAgfVxuXG4gICAgdGhpcy5pbkJhc2U2NCA9IGluQmFzZTY0O1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSBiYXNlNjRBY2N1bTtcblxuICAgIHJldHVybiByZXM7XG59XG5cblV0ZjdJTUFQRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQgJiYgdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGggPiAwKVxuICAgICAgICByZXMgPSB0aGlzLmljb252LmRlY29kZShuZXcgQnVmZmVyKHRoaXMuYmFzZTY0QWNjdW0sICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcblxuICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gJyc7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG4iLCJcInVzZSBzdHJpY3RcIlxuXG52YXIgQk9NQ2hhciA9ICdcXHVGRUZGJztcblxuZXhwb3J0cy5QcmVwZW5kQk9NID0gUHJlcGVuZEJPTVdyYXBwZXJcbmZ1bmN0aW9uIFByZXBlbmRCT01XcmFwcGVyKGVuY29kZXIsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmVuY29kZXIgPSBlbmNvZGVyO1xuICAgIHRoaXMuYWRkQk9NID0gdHJ1ZTtcbn1cblxuUHJlcGVuZEJPTVdyYXBwZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKHRoaXMuYWRkQk9NKSB7XG4gICAgICAgIHN0ciA9IEJPTUNoYXIgKyBzdHI7XG4gICAgICAgIHRoaXMuYWRkQk9NID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShzdHIpO1xufVxuXG5QcmVwZW5kQk9NV3JhcHBlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKTtcbn1cblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnRzLlN0cmlwQk9NID0gU3RyaXBCT01XcmFwcGVyO1xuZnVuY3Rpb24gU3RyaXBCT01XcmFwcGVyKGRlY29kZXIsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlY29kZXIgPSBkZWNvZGVyO1xuICAgIHRoaXMucGFzcyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cblN0cmlwQk9NV3JhcHBlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICB2YXIgcmVzID0gdGhpcy5kZWNvZGVyLndyaXRlKGJ1Zik7XG4gICAgaWYgKHRoaXMucGFzcyB8fCAhcmVzKVxuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgaWYgKHJlc1swXSA9PT0gQk9NQ2hhcikge1xuICAgICAgICByZXMgPSByZXMuc2xpY2UoMSk7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnN0cmlwQk9NID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0cmlwQk9NKCk7XG4gICAgfVxuXG4gICAgdGhpcy5wYXNzID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzO1xufVxuXG5TdHJpcEJPTVdyYXBwZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRlY29kZXIuZW5kKCk7XG59XG5cbiIsIlwidXNlIHN0cmljdFwiXG5cbi8vID09IEV4dGVuZCBOb2RlIHByaW1pdGl2ZXMgdG8gdXNlIGljb252LWxpdGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGljb252KSB7XG4gICAgdmFyIG9yaWdpbmFsID0gdW5kZWZpbmVkOyAvLyBQbGFjZSB0byBrZWVwIG9yaWdpbmFsIG1ldGhvZHMuXG5cbiAgICAvLyBOb2RlIGF1dGhvcnMgcmV3cm90ZSBCdWZmZXIgaW50ZXJuYWxzIHRvIG1ha2UgaXQgY29tcGF0aWJsZSB3aXRoXG4gICAgLy8gVWludDhBcnJheSBhbmQgd2UgY2Fubm90IHBhdGNoIGtleSBmdW5jdGlvbnMgc2luY2UgdGhlbi5cbiAgICBpY29udi5zdXBwb3J0c05vZGVFbmNvZGluZ3NFeHRlbnNpb24gPSAhKG5ldyBCdWZmZXIoMCkgaW5zdGFuY2VvZiBVaW50OEFycmF5KTtcblxuICAgIGljb252LmV4dGVuZE5vZGVFbmNvZGluZ3MgPSBmdW5jdGlvbiBleHRlbmROb2RlRW5jb2RpbmdzKCkge1xuICAgICAgICBpZiAob3JpZ2luYWwpIHJldHVybjtcbiAgICAgICAgb3JpZ2luYWwgPSB7fTtcblxuICAgICAgICBpZiAoIWljb252LnN1cHBvcnRzTm9kZUVuY29kaW5nc0V4dGVuc2lvbikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkFDVElPTiBORUVERUQ6IHJlcXVpcmUoJ2ljb252LWxpdGUnKS5leHRlbmROb2RlRW5jb2RpbmdzKCkgaXMgbm90IHN1cHBvcnRlZCBpbiB5b3VyIHZlcnNpb24gb2YgTm9kZVwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJTZWUgbW9yZSBpbmZvIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9Ob2RlLXY0LWNvbXBhdGliaWxpdHlcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZU5hdGl2ZUVuY29kaW5ncyA9IHtcbiAgICAgICAgICAgICdoZXgnOiB0cnVlLCAndXRmOCc6IHRydWUsICd1dGYtOCc6IHRydWUsICdhc2NpaSc6IHRydWUsICdiaW5hcnknOiB0cnVlLCBcbiAgICAgICAgICAgICdiYXNlNjQnOiB0cnVlLCAndWNzMic6IHRydWUsICd1Y3MtMic6IHRydWUsICd1dGYxNmxlJzogdHJ1ZSwgJ3V0Zi0xNmxlJzogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyA9IGZ1bmN0aW9uKGVuYykge1xuICAgICAgICAgICAgcmV0dXJuIGVuYyAmJiBub2RlTmF0aXZlRW5jb2RpbmdzW2VuYy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tIFNsb3dCdWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgdmFyIFNsb3dCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5TbG93QnVmZmVyO1xuXG4gICAgICAgIG9yaWdpbmFsLlNsb3dCdWZmZXJUb1N0cmluZyA9IFNsb3dCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nO1xuICAgICAgICBTbG93QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIC8vIFVzZSBuYXRpdmUgY29udmVyc2lvbiB3aGVuIHBvc3NpYmxlXG4gICAgICAgICAgICBpZiAoQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5TbG93QnVmZmVyVG9TdHJpbmcuY2FsbCh0aGlzLCBlbmNvZGluZywgc3RhcnQsIGVuZCk7XG5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIG91ciBkZWNvZGluZyBtZXRob2QuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0YXJ0ID09ICd1bmRlZmluZWQnKSBzdGFydCA9IDA7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVuZCA9PSAndW5kZWZpbmVkJykgZW5kID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gaWNvbnYuZGVjb2RlKHRoaXMuc2xpY2Uoc3RhcnQsIGVuZCksIGVuY29kaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9yaWdpbmFsLlNsb3dCdWZmZXJXcml0ZSA9IFNsb3dCdWZmZXIucHJvdG90eXBlLndyaXRlO1xuICAgICAgICBTbG93QnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gICAgICAgICAgICAvLyBTdXBwb3J0IGJvdGggKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKVxuICAgICAgICAgICAgLy8gYW5kIHRoZSBsZWdhY3kgKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICAgICAgICAgICAgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgeyAgLy8gbGVnYWN5XG4gICAgICAgICAgICAgICAgdmFyIHN3YXAgPSBlbmNvZGluZztcbiAgICAgICAgICAgICAgICBlbmNvZGluZyA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gc3dhcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2Zmc2V0ID0gK29mZnNldCB8fCAwO1xuICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9ICtsZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcgfHwgJ3V0ZjgnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAvLyBVc2UgbmF0aXZlIGNvbnZlcnNpb24gd2hlbiBwb3NzaWJsZVxuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nKGVuY29kaW5nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuU2xvd0J1ZmZlcldyaXRlLmNhbGwodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2F0dGVtcHQgdG8gd3JpdGUgYmV5b25kIGJ1ZmZlciBib3VuZHMnKTtcblxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB1c2Ugb3VyIGVuY29kaW5nIG1ldGhvZC5cbiAgICAgICAgICAgIHZhciBidWYgPSBpY29udi5lbmNvZGUoc3RyaW5nLCBlbmNvZGluZyk7XG4gICAgICAgICAgICBpZiAoYnVmLmxlbmd0aCA8IGxlbmd0aCkgbGVuZ3RoID0gYnVmLmxlbmd0aDtcbiAgICAgICAgICAgIGJ1Zi5jb3B5KHRoaXMsIG9mZnNldCwgMCwgbGVuZ3RoKTtcbiAgICAgICAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLSBCdWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAgICAgb3JpZ2luYWwuQnVmZmVySXNFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nO1xuICAgICAgICBCdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uKGVuY29kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpIHx8IGljb252LmVuY29kaW5nRXhpc3RzKGVuY29kaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9yaWdpbmFsLkJ1ZmZlckJ5dGVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aDtcbiAgICAgICAgQnVmZmVyLmJ5dGVMZW5ndGggPSBTbG93QnVmZmVyLmJ5dGVMZW5ndGggPSBmdW5jdGlvbihzdHIsIGVuY29kaW5nKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIC8vIFVzZSBuYXRpdmUgY29udmVyc2lvbiB3aGVuIHBvc3NpYmxlXG4gICAgICAgICAgICBpZiAoQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5CdWZmZXJCeXRlTGVuZ3RoLmNhbGwodGhpcywgc3RyLCBlbmNvZGluZyk7XG5cbiAgICAgICAgICAgIC8vIFNsb3csIEkga25vdywgYnV0IHdlIGRvbid0IGhhdmUgYSBiZXR0ZXIgd2F5IHlldC5cbiAgICAgICAgICAgIHJldHVybiBpY29udi5lbmNvZGUoc3RyLCBlbmNvZGluZykubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgb3JpZ2luYWwuQnVmZmVyVG9TdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nO1xuICAgICAgICBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgLy8gVXNlIG5hdGl2ZSBjb252ZXJzaW9uIHdoZW4gcG9zc2libGVcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyhlbmNvZGluZykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLkJ1ZmZlclRvU3RyaW5nLmNhbGwodGhpcywgZW5jb2RpbmcsIHN0YXJ0LCBlbmQpO1xuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHVzZSBvdXIgZGVjb2RpbmcgbWV0aG9kLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGFydCA9PSAndW5kZWZpbmVkJykgc3RhcnQgPSAwO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbmQgPT0gJ3VuZGVmaW5lZCcpIGVuZCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGljb252LmRlY29kZSh0aGlzLnNsaWNlKHN0YXJ0LCBlbmQpLCBlbmNvZGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBvcmlnaW5hbC5CdWZmZXJXcml0ZSA9IEJ1ZmZlci5wcm90b3R5cGUud3JpdGU7XG4gICAgICAgIEJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAgICAgICAgICAgdmFyIF9vZmZzZXQgPSBvZmZzZXQsIF9sZW5ndGggPSBsZW5ndGgsIF9lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgICAgICAgLy8gU3VwcG9ydCBib3RoIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZylcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgbGVnYWN5IChzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aClcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHsgIC8vIGxlZ2FjeVxuICAgICAgICAgICAgICAgIHZhciBzd2FwID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHN3YXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgLy8gVXNlIG5hdGl2ZSBjb252ZXJzaW9uIHdoZW4gcG9zc2libGVcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyhlbmNvZGluZykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLkJ1ZmZlcldyaXRlLmNhbGwodGhpcywgc3RyaW5nLCBfb2Zmc2V0LCBfbGVuZ3RoLCBfZW5jb2RpbmcpO1xuXG4gICAgICAgICAgICBvZmZzZXQgPSArb2Zmc2V0IHx8IDA7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gK2xlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYXR0ZW1wdCB0byB3cml0ZSBiZXlvbmQgYnVmZmVyIGJvdW5kcycpO1xuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHVzZSBvdXIgZW5jb2RpbmcgbWV0aG9kLlxuICAgICAgICAgICAgdmFyIGJ1ZiA9IGljb252LmVuY29kZShzdHJpbmcsIGVuY29kaW5nKTtcbiAgICAgICAgICAgIGlmIChidWYubGVuZ3RoIDwgbGVuZ3RoKSBsZW5ndGggPSBidWYubGVuZ3RoO1xuICAgICAgICAgICAgYnVmLmNvcHkodGhpcywgb2Zmc2V0LCAwLCBsZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDtcblxuICAgICAgICAgICAgLy8gVE9ETzogU2V0IF9jaGFyc1dyaXR0ZW4uXG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIC0tIFJlYWRhYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgaWYgKGljb252LnN1cHBvcnRzU3RyZWFtcykge1xuICAgICAgICAgICAgdmFyIFJlYWRhYmxlID0gcmVxdWlyZSgnc3RyZWFtJykuUmVhZGFibGU7XG5cbiAgICAgICAgICAgIG9yaWdpbmFsLlJlYWRhYmxlU2V0RW5jb2RpbmcgPSBSZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc7XG4gICAgICAgICAgICBSZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiBzZXRFbmNvZGluZyhlbmMsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2Ugb3VyIG93biBkZWNvZGVyLCBpdCBoYXMgdGhlIHNhbWUgaW50ZXJmYWNlLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbm5vdCB1c2Ugb3JpZ2luYWwgZnVuY3Rpb24gYXMgaXQgZG9lc24ndCBoYW5kbGUgQk9NLXMuXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyID0gaWNvbnYuZ2V0RGVjb2RlcihlbmMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSBlbmM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlYWRhYmxlLnByb3RvdHlwZS5jb2xsZWN0ID0gaWNvbnYuX2NvbGxlY3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgaWNvbnYtbGl0ZSBOb2RlIHByaW1pdGl2ZSBleHRlbnNpb25zLlxuICAgIGljb252LnVuZG9FeHRlbmROb2RlRW5jb2RpbmdzID0gZnVuY3Rpb24gdW5kb0V4dGVuZE5vZGVFbmNvZGluZ3MoKSB7XG4gICAgICAgIGlmICghaWNvbnYuc3VwcG9ydHNOb2RlRW5jb2RpbmdzRXh0ZW5zaW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIW9yaWdpbmFsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVxdWlyZSgnaWNvbnYtbGl0ZScpLnVuZG9FeHRlbmROb2RlRW5jb2RpbmdzKCk6IE5vdGhpbmcgdG8gdW5kbzsgZXh0ZW5kTm9kZUVuY29kaW5ncygpIGlzIG5vdCBjYWxsZWQuXCIpXG5cbiAgICAgICAgZGVsZXRlIEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nO1xuXG4gICAgICAgIHZhciBTbG93QnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuU2xvd0J1ZmZlcjtcblxuICAgICAgICBTbG93QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IG9yaWdpbmFsLlNsb3dCdWZmZXJUb1N0cmluZztcbiAgICAgICAgU2xvd0J1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBvcmlnaW5hbC5TbG93QnVmZmVyV3JpdGU7XG5cbiAgICAgICAgQnVmZmVyLmlzRW5jb2RpbmcgPSBvcmlnaW5hbC5CdWZmZXJJc0VuY29kaW5nO1xuICAgICAgICBCdWZmZXIuYnl0ZUxlbmd0aCA9IG9yaWdpbmFsLkJ1ZmZlckJ5dGVMZW5ndGg7XG4gICAgICAgIEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBvcmlnaW5hbC5CdWZmZXJUb1N0cmluZztcbiAgICAgICAgQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IG9yaWdpbmFsLkJ1ZmZlcldyaXRlO1xuXG4gICAgICAgIGlmIChpY29udi5zdXBwb3J0c1N0cmVhbXMpIHtcbiAgICAgICAgICAgIHZhciBSZWFkYWJsZSA9IHJlcXVpcmUoJ3N0cmVhbScpLlJlYWRhYmxlO1xuXG4gICAgICAgICAgICBSZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBvcmlnaW5hbC5SZWFkYWJsZVNldEVuY29kaW5nO1xuICAgICAgICAgICAgZGVsZXRlIFJlYWRhYmxlLnByb3RvdHlwZS5jb2xsZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgb3JpZ2luYWwgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCJcblxudmFyIGJvbUhhbmRsaW5nID0gcmVxdWlyZSgnLi9ib20taGFuZGxpbmcnKSxcbiAgICBpY29udiA9IG1vZHVsZS5leHBvcnRzO1xuXG4vLyBBbGwgY29kZWNzIGFuZCBhbGlhc2VzIGFyZSBrZXB0IGhlcmUsIGtleWVkIGJ5IGVuY29kaW5nIG5hbWUvYWxpYXMuXG4vLyBUaGV5IGFyZSBsYXp5IGxvYWRlZCBpbiBgaWNvbnYuZ2V0Q29kZWNgIGZyb20gYGVuY29kaW5ncy9pbmRleC5qc2AuXG5pY29udi5lbmNvZGluZ3MgPSBudWxsO1xuXG4vLyBDaGFyYWN0ZXJzIGVtaXR0ZWQgaW4gY2FzZSBvZiBlcnJvci5cbmljb252LmRlZmF1bHRDaGFyVW5pY29kZSA9ICfvv70nO1xuaWNvbnYuZGVmYXVsdENoYXJTaW5nbGVCeXRlID0gJz8nO1xuXG4vLyBQdWJsaWMgQVBJLlxuaWNvbnYuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0ciwgZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICBzdHIgPSBcIlwiICsgKHN0ciB8fCBcIlwiKTsgLy8gRW5zdXJlIHN0cmluZy5cblxuICAgIHZhciBlbmNvZGVyID0gaWNvbnYuZ2V0RW5jb2RlcihlbmNvZGluZywgb3B0aW9ucyk7XG5cbiAgICB2YXIgcmVzID0gZW5jb2Rlci53cml0ZShzdHIpO1xuICAgIHZhciB0cmFpbCA9IGVuY29kZXIuZW5kKCk7XG4gICAgXG4gICAgcmV0dXJuICh0cmFpbCAmJiB0cmFpbC5sZW5ndGggPiAwKSA/IEJ1ZmZlci5jb25jYXQoW3JlcywgdHJhaWxdKSA6IHJlcztcbn1cblxuaWNvbnYuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGJ1ZiwgZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIGJ1ZiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKCFpY29udi5za2lwRGVjb2RlV2FybmluZykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignSWNvbnYtbGl0ZSB3YXJuaW5nOiBkZWNvZGUoKS1pbmcgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vYXNodHVjaGtpbi9pY29udi1saXRlL3dpa2kvVXNlLUJ1ZmZlcnMtd2hlbi1kZWNvZGluZycpO1xuICAgICAgICAgICAgaWNvbnYuc2tpcERlY29kZVdhcm5pbmcgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmID0gbmV3IEJ1ZmZlcihcIlwiICsgKGJ1ZiB8fCBcIlwiKSwgXCJiaW5hcnlcIik7IC8vIEVuc3VyZSBidWZmZXIuXG4gICAgfVxuXG4gICAgdmFyIGRlY29kZXIgPSBpY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKTtcblxuICAgIHZhciByZXMgPSBkZWNvZGVyLndyaXRlKGJ1Zik7XG4gICAgdmFyIHRyYWlsID0gZGVjb2Rlci5lbmQoKTtcblxuICAgIHJldHVybiB0cmFpbCA/IChyZXMgKyB0cmFpbCkgOiByZXM7XG59XG5cbmljb252LmVuY29kaW5nRXhpc3RzID0gZnVuY3Rpb24gZW5jb2RpbmdFeGlzdHMoZW5jKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWNvbnYuZ2V0Q29kZWMoZW5jKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBMZWdhY3kgYWxpYXNlcyB0byBjb252ZXJ0IGZ1bmN0aW9uc1xuaWNvbnYudG9FbmNvZGluZyA9IGljb252LmVuY29kZTtcbmljb252LmZyb21FbmNvZGluZyA9IGljb252LmRlY29kZTtcblxuLy8gU2VhcmNoIGZvciBhIGNvZGVjIGluIGljb252LmVuY29kaW5ncy4gQ2FjaGUgY29kZWMgZGF0YSBpbiBpY29udi5fY29kZWNEYXRhQ2FjaGUuXG5pY29udi5fY29kZWNEYXRhQ2FjaGUgPSB7fTtcbmljb252LmdldENvZGVjID0gZnVuY3Rpb24gZ2V0Q29kZWMoZW5jb2RpbmcpIHtcbiAgICBpZiAoIWljb252LmVuY29kaW5ncylcbiAgICAgICAgaWNvbnYuZW5jb2RpbmdzID0gcmVxdWlyZShcIi4uL2VuY29kaW5nc1wiKTsgLy8gTGF6eSBsb2FkIGFsbCBlbmNvZGluZyBkZWZpbml0aW9ucy5cbiAgICBcbiAgICAvLyBDYW5vbmljYWxpemUgZW5jb2RpbmcgbmFtZTogc3RyaXAgYWxsIG5vbi1hbHBoYW51bWVyaWMgY2hhcnMgYW5kIGFwcGVuZGVkIHllYXIuXG4gICAgdmFyIGVuYyA9ICgnJytlbmNvZGluZykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXjAtOWEtel18OlxcZHs0fSQvZywgXCJcIik7XG5cbiAgICAvLyBUcmF2ZXJzZSBpY29udi5lbmNvZGluZ3MgdG8gZmluZCBhY3R1YWwgY29kZWMuXG4gICAgdmFyIGNvZGVjT3B0aW9ucyA9IHt9O1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBjb2RlYyA9IGljb252Ll9jb2RlY0RhdGFDYWNoZVtlbmNdO1xuICAgICAgICBpZiAoY29kZWMpXG4gICAgICAgICAgICByZXR1cm4gY29kZWM7XG5cbiAgICAgICAgdmFyIGNvZGVjRGVmID0gaWNvbnYuZW5jb2RpbmdzW2VuY107XG5cbiAgICAgICAgc3dpdGNoICh0eXBlb2YgY29kZWNEZWYpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjogLy8gRGlyZWN0IGFsaWFzIHRvIG90aGVyIGVuY29kaW5nLlxuICAgICAgICAgICAgICAgIGVuYyA9IGNvZGVjRGVmO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6IC8vIEFsaWFzIHdpdGggb3B0aW9ucy4gQ2FuIGJlIGxheWVyZWQuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGNvZGVjRGVmKVxuICAgICAgICAgICAgICAgICAgICBjb2RlY09wdGlvbnNba2V5XSA9IGNvZGVjRGVmW2tleV07XG5cbiAgICAgICAgICAgICAgICBpZiAoIWNvZGVjT3B0aW9ucy5lbmNvZGluZ05hbWUpXG4gICAgICAgICAgICAgICAgICAgIGNvZGVjT3B0aW9ucy5lbmNvZGluZ05hbWUgPSBlbmM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZW5jID0gY29kZWNEZWYudHlwZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6IC8vIENvZGVjIGl0c2VsZi5cbiAgICAgICAgICAgICAgICBpZiAoIWNvZGVjT3B0aW9ucy5lbmNvZGluZ05hbWUpXG4gICAgICAgICAgICAgICAgICAgIGNvZGVjT3B0aW9ucy5lbmNvZGluZ05hbWUgPSBlbmM7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGUgY29kZWMgZnVuY3Rpb24gbXVzdCBsb2FkIGFsbCB0YWJsZXMgYW5kIHJldHVybiBvYmplY3Qgd2l0aCAuZW5jb2RlciBhbmQgLmRlY29kZXIgbWV0aG9kcy5cbiAgICAgICAgICAgICAgICAvLyBJdCdsbCBiZSBjYWxsZWQgb25seSBvbmNlIChmb3IgZWFjaCBkaWZmZXJlbnQgb3B0aW9ucyBvYmplY3QpLlxuICAgICAgICAgICAgICAgIGNvZGVjID0gbmV3IGNvZGVjRGVmKGNvZGVjT3B0aW9ucywgaWNvbnYpO1xuXG4gICAgICAgICAgICAgICAgaWNvbnYuX2NvZGVjRGF0YUNhY2hlW2NvZGVjT3B0aW9ucy5lbmNvZGluZ05hbWVdID0gY29kZWM7IC8vIFNhdmUgaXQgdG8gYmUgcmV1c2VkIGxhdGVyLlxuICAgICAgICAgICAgICAgIHJldHVybiBjb2RlYztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvZGluZyBub3QgcmVjb2duaXplZDogJ1wiICsgZW5jb2RpbmcgKyBcIicgKHNlYXJjaGVkIGFzOiAnXCIrZW5jK1wiJylcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmljb252LmdldEVuY29kZXIgPSBmdW5jdGlvbiBnZXRFbmNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgdmFyIGNvZGVjID0gaWNvbnYuZ2V0Q29kZWMoZW5jb2RpbmcpLFxuICAgICAgICBlbmNvZGVyID0gbmV3IGNvZGVjLmVuY29kZXIob3B0aW9ucywgY29kZWMpO1xuXG4gICAgaWYgKGNvZGVjLmJvbUF3YXJlICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5hZGRCT00pXG4gICAgICAgIGVuY29kZXIgPSBuZXcgYm9tSGFuZGxpbmcuUHJlcGVuZEJPTShlbmNvZGVyLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBlbmNvZGVyO1xufVxuXG5pY29udi5nZXREZWNvZGVyID0gZnVuY3Rpb24gZ2V0RGVjb2RlcihlbmNvZGluZywgb3B0aW9ucykge1xuICAgIHZhciBjb2RlYyA9IGljb252LmdldENvZGVjKGVuY29kaW5nKSxcbiAgICAgICAgZGVjb2RlciA9IG5ldyBjb2RlYy5kZWNvZGVyKG9wdGlvbnMsIGNvZGVjKTtcblxuICAgIGlmIChjb2RlYy5ib21Bd2FyZSAmJiAhKG9wdGlvbnMgJiYgb3B0aW9ucy5zdHJpcEJPTSA9PT0gZmFsc2UpKVxuICAgICAgICBkZWNvZGVyID0gbmV3IGJvbUhhbmRsaW5nLlN0cmlwQk9NKGRlY29kZXIsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGRlY29kZXI7XG59XG5cblxuLy8gTG9hZCBleHRlbnNpb25zIGluIE5vZGUuIEFsbCBvZiB0aGVtIGFyZSBvbWl0dGVkIGluIEJyb3dzZXJpZnkgYnVpbGQgdmlhICdicm93c2VyJyBmaWVsZCBpbiBwYWNrYWdlLmpzb24uXG52YXIgbm9kZVZlciA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZTtcbmlmIChub2RlVmVyKSB7XG5cbiAgICAvLyBMb2FkIHN0cmVhbWluZyBzdXBwb3J0IGluIE5vZGUgdjAuMTArXG4gICAgdmFyIG5vZGVWZXJBcnIgPSBub2RlVmVyLnNwbGl0KFwiLlwiKS5tYXAoTnVtYmVyKTtcbiAgICBpZiAobm9kZVZlckFyclswXSA+IDAgfHwgbm9kZVZlckFyclsxXSA+PSAxMCkge1xuICAgICAgICByZXF1aXJlKFwiLi9zdHJlYW1zXCIpKGljb252KTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIE5vZGUgcHJpbWl0aXZlIGV4dGVuc2lvbnMuXG4gICAgcmVxdWlyZShcIi4vZXh0ZW5kLW5vZGVcIikoaWNvbnYpO1xufVxuXG4iLCJcInVzZSBzdHJpY3RcIlxuXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZShcInN0cmVhbVwiKS5UcmFuc2Zvcm07XG5cblxuLy8gPT0gRXhwb3J0cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaWNvbnYpIHtcbiAgICBcbiAgICAvLyBBZGRpdGlvbmFsIFB1YmxpYyBBUEkuXG4gICAgaWNvbnYuZW5jb2RlU3RyZWFtID0gZnVuY3Rpb24gZW5jb2RlU3RyZWFtKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgSWNvbnZMaXRlRW5jb2RlclN0cmVhbShpY29udi5nZXRFbmNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWNvbnYuZGVjb2RlU3RyZWFtID0gZnVuY3Rpb24gZGVjb2RlU3RyZWFtKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgSWNvbnZMaXRlRGVjb2RlclN0cmVhbShpY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWNvbnYuc3VwcG9ydHNTdHJlYW1zID0gdHJ1ZTtcblxuXG4gICAgLy8gTm90IHB1Ymxpc2hlZCB5ZXQuXG4gICAgaWNvbnYuSWNvbnZMaXRlRW5jb2RlclN0cmVhbSA9IEljb252TGl0ZUVuY29kZXJTdHJlYW07XG4gICAgaWNvbnYuSWNvbnZMaXRlRGVjb2RlclN0cmVhbSA9IEljb252TGl0ZURlY29kZXJTdHJlYW07XG4gICAgaWNvbnYuX2NvbGxlY3QgPSBJY29udkxpdGVEZWNvZGVyU3RyZWFtLnByb3RvdHlwZS5jb2xsZWN0O1xufTtcblxuXG4vLyA9PSBFbmNvZGVyIHN0cmVhbSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5mdW5jdGlvbiBJY29udkxpdGVFbmNvZGVyU3RyZWFtKGNvbnYsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNvbnYgPSBjb252O1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9IGZhbHNlOyAvLyBXZSBhY2NlcHQgb25seSBzdHJpbmdzLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRlY29kZSB0aGVtLlxuICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5JY29udkxpdGVFbmNvZGVyU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNmb3JtLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBJY29udkxpdGVFbmNvZGVyU3RyZWFtIH1cbn0pO1xuXG5JY29udkxpdGVFbmNvZGVyU3RyZWFtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBkb25lKSB7XG4gICAgaWYgKHR5cGVvZiBjaHVuayAhPSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIGRvbmUobmV3IEVycm9yKFwiSWNvbnYgZW5jb2Rpbmcgc3RyZWFtIG5lZWRzIHN0cmluZ3MgYXMgaXRzIGlucHV0LlwiKSk7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi53cml0ZShjaHVuayk7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkgdGhpcy5wdXNoKHJlcyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZG9uZShlKTtcbiAgICB9XG59XG5cbkljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uKGRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jb252LmVuZCgpO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMpO1xuICAgICAgICBkb25lKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRvbmUoZSk7XG4gICAgfVxufVxuXG5JY29udkxpdGVFbmNvZGVyU3RyZWFtLnByb3RvdHlwZS5jb2xsZWN0ID0gZnVuY3Rpb24oY2IpIHtcbiAgICB2YXIgY2h1bmtzID0gW107XG4gICAgdGhpcy5vbignZXJyb3InLCBjYik7XG4gICAgdGhpcy5vbignZGF0YScsIGZ1bmN0aW9uKGNodW5rKSB7IGNodW5rcy5wdXNoKGNodW5rKTsgfSk7XG4gICAgdGhpcy5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGNiKG51bGwsIEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblxuLy8gPT0gRGVjb2RlciBzdHJlYW0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZnVuY3Rpb24gSWNvbnZMaXRlRGVjb2RlclN0cmVhbShjb252LCBvcHRpb25zKSB7XG4gICAgdGhpcy5jb252ID0gY29udjtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLmVuY29kaW5nID0gdGhpcy5lbmNvZGluZyA9ICd1dGY4JzsgLy8gV2Ugb3V0cHV0IHN0cmluZ3MuXG4gICAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cbkljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm0ucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IEljb252TGl0ZURlY29kZXJTdHJlYW0gfVxufSk7XG5cbkljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGRvbmUpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpXG4gICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcihcIkljb252IGRlY29kaW5nIHN0cmVhbSBuZWVkcyBidWZmZXJzIGFzIGl0cyBpbnB1dC5cIikpO1xuICAgIHRyeSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmNvbnYud3JpdGUoY2h1bmspO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMsIHRoaXMuZW5jb2RpbmcpO1xuICAgICAgICBkb25lKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGRvbmUoZSk7XG4gICAgfVxufVxuXG5JY29udkxpdGVEZWNvZGVyU3RyZWFtLnByb3RvdHlwZS5fZmx1c2ggPSBmdW5jdGlvbihkb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi5lbmQoKTtcbiAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoKSB0aGlzLnB1c2gocmVzLCB0aGlzLmVuY29kaW5nKTsgICAgICAgICAgICAgICAgXG4gICAgICAgIGRvbmUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZG9uZShlKTtcbiAgICB9XG59XG5cbkljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLmNvbGxlY3QgPSBmdW5jdGlvbihjYikge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB0aGlzLm9uKCdlcnJvcicsIGNiKTtcbiAgICB0aGlzLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHsgcmVzICs9IGNodW5rOyB9KTtcbiAgICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgY2IobnVsbCwgcmVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCJcbnZhciBpbmRleE9mID0gW10uaW5kZXhPZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihhcnIsIG9iail7XG4gIGlmIChpbmRleE9mKSByZXR1cm4gYXJyLmluZGV4T2Yob2JqKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoYXJyW2ldID09PSBvYmopIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn07IiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCIvKiFcbiAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBCdWZmZXJcbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXG4vLyBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLiBSZW1vdmUgdGhpcyBldmVudHVhbGx5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gISFvYmouY29uc3RydWN0b3IgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKVxufVxuXG4vLyBGb3IgTm9kZSB2MC4xMCBzdXBwb3J0LiBSZW1vdmUgdGhpcyBldmVudHVhbGx5LlxuZnVuY3Rpb24gaXNTbG93QnVmZmVyIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXG59XG4iLCJtb2R1bGUuZXhwb3J0cyAgICAgID0gaXNUeXBlZEFycmF5XG5pc1R5cGVkQXJyYXkuc3RyaWN0ID0gaXNTdHJpY3RUeXBlZEFycmF5XG5pc1R5cGVkQXJyYXkubG9vc2UgID0gaXNMb29zZVR5cGVkQXJyYXlcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xudmFyIG5hbWVzID0ge1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nOiB0cnVlXG4gICwgJ1tvYmplY3QgSW50MTZBcnJheV0nOiB0cnVlXG4gICwgJ1tvYmplY3QgSW50MzJBcnJheV0nOiB0cnVlXG4gICwgJ1tvYmplY3QgVWludDhBcnJheV0nOiB0cnVlXG4gICwgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJzogdHJ1ZVxuICAsICdbb2JqZWN0IFVpbnQxNkFycmF5XSc6IHRydWVcbiAgLCAnW29iamVjdCBVaW50MzJBcnJheV0nOiB0cnVlXG4gICwgJ1tvYmplY3QgRmxvYXQzMkFycmF5XSc6IHRydWVcbiAgLCAnW29iamVjdCBGbG9hdDY0QXJyYXldJzogdHJ1ZVxufVxuXG5mdW5jdGlvbiBpc1R5cGVkQXJyYXkoYXJyKSB7XG4gIHJldHVybiAoXG4gICAgICAgaXNTdHJpY3RUeXBlZEFycmF5KGFycilcbiAgICB8fCBpc0xvb3NlVHlwZWRBcnJheShhcnIpXG4gIClcbn1cblxuZnVuY3Rpb24gaXNTdHJpY3RUeXBlZEFycmF5KGFycikge1xuICByZXR1cm4gKFxuICAgICAgIGFyciBpbnN0YW5jZW9mIEludDhBcnJheVxuICAgIHx8IGFyciBpbnN0YW5jZW9mIEludDE2QXJyYXlcbiAgICB8fCBhcnIgaW5zdGFuY2VvZiBJbnQzMkFycmF5XG4gICAgfHwgYXJyIGluc3RhbmNlb2YgVWludDhBcnJheVxuICAgIHx8IGFyciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5XG4gICAgfHwgYXJyIGluc3RhbmNlb2YgVWludDE2QXJyYXlcbiAgICB8fCBhcnIgaW5zdGFuY2VvZiBVaW50MzJBcnJheVxuICAgIHx8IGFyciBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheVxuICAgIHx8IGFyciBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheVxuICApXG59XG5cbmZ1bmN0aW9uIGlzTG9vc2VUeXBlZEFycmF5KGFycikge1xuICByZXR1cm4gbmFtZXNbdG9TdHJpbmcuY2FsbChhcnIpXVxufVxuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCJ2YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcblxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBzdHJlYW0uU3RyZWFtXG59XG5cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAob2JqKSB7XG4gIHJldHVybiBpc1N0cmVhbShvYmopICYmIHR5cGVvZiBvYmouX3JlYWQgPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLl9yZWFkYWJsZVN0YXRlID09ICdvYmplY3QnXG59XG5cblxuZnVuY3Rpb24gaXNXcml0YWJsZSAob2JqKSB7XG4gIHJldHVybiBpc1N0cmVhbShvYmopICYmIHR5cGVvZiBvYmouX3dyaXRlID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5fd3JpdGFibGVTdGF0ZSA9PSAnb2JqZWN0J1xufVxuXG5cbmZ1bmN0aW9uIGlzRHVwbGV4IChvYmopIHtcbiAgcmV0dXJuIGlzUmVhZGFibGUob2JqKSAmJiBpc1dyaXRhYmxlKG9iailcbn1cblxuXG5tb2R1bGUuZXhwb3J0cyAgICAgICAgICAgID0gaXNTdHJlYW1cbm1vZHVsZS5leHBvcnRzLmlzUmVhZGFibGUgPSBpc1JlYWRhYmxlXG5tb2R1bGUuZXhwb3J0cy5pc1dyaXRhYmxlID0gaXNXcml0YWJsZVxubW9kdWxlLmV4cG9ydHMuaXNEdXBsZXggICA9IGlzRHVwbGV4XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAqIENvcHlyaWdodCAoYykgMjAxNCBNZWdhIExpbWl0ZWRcbiAqIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqIFxuICogQXV0aG9yczogR3V5IEsuIEtsb3NzXG4gKiBcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uXG4gKi9cblxudmFyIGRoID0gcmVxdWlyZSgnLi9saWIvZGgnKTtcbnZhciBlZGRzYSA9IHJlcXVpcmUoJy4vbGliL2VkZHNhJyk7XG52YXIgY3VydmUyNTUgPSByZXF1aXJlKCcuL2xpYi9jdXJ2ZTI1NScpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi9saWIvdXRpbHMnKTtcbiAgICBcbiAgICAvKipcbiAgICAgKiBAZXhwb3J0cyBqb2RpZDI1NTE5XG4gICAgICogQ3VydmUgMjU1MTktYmFzZWQgY3J5cHRvZ3JhcGh5IGNvbGxlY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBFQyBEaWZmaWUtSGVsbG1hbiAoRUNESCkgYmFzZWQgb24gQ3VydmUyNTUxOSBhbmQgZGlnaXRhbCBzaWduYXR1cmVzXG4gICAgICogKEVkRFNBKSBiYXNlZCBvbiBFZDI1NTE5LlxuICAgICAqL1xuICAgIHZhciBucyA9IHt9O1xuICAgIFxuICAgIC8qKiBNb2R1bGUgdmVyc2lvbiBpbmRpY2F0b3IgYXMgc3RyaW5nIChmb3JtYXQ6IFttYWpvci5taW5vci5wYXRjaF0pLiAqL1xuICAgIG5zLlZFUlNJT04gPSAnMC43LjEnO1xuXG4gICAgbnMuZGggPSBkaDtcbiAgICBucy5lZGRzYSA9IGVkZHNhO1xuICAgIG5zLmN1cnZlMjU1ID0gY3VydmUyNTU7XG4gICAgbnMudXRpbHMgPSB1dGlscztcblxubW9kdWxlLmV4cG9ydHMgPSBucztcbiIsIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBAZmlsZU92ZXJ2aWV3XG4gKiBDb3JlIG9wZXJhdGlvbnMgb24gY3VydmUgMjU1MTkgcmVxdWlyZWQgZm9yIHRoZSBoaWdoZXIgbGV2ZWwgbW9kdWxlcy5cbiAqL1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDEzLCAyMDE0IE1pY2hlbGUgQmluaVxuICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZ2EgTGltaXRlZFxuICogdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIEF1dGhvcnM6IEd1eSBLLiBLbG9zcywgTWljaGVsZSBCaW5pXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS5cbiAqL1xuXG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbiAgICAvKipcbiAgICAgKiBAZXhwb3J0cyBqb2RpZDI1NTE5L2NvcmVcbiAgICAgKiBDb3JlIG9wZXJhdGlvbnMgb24gY3VydmUgMjU1MTkgcmVxdWlyZWQgZm9yIHRoZSBoaWdoZXIgbGV2ZWwgbW9kdWxlcy5cbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIENvcmUgb3BlcmF0aW9ucyBvbiBjdXJ2ZSAyNTUxOSByZXF1aXJlZCBmb3IgdGhlIGhpZ2hlciBsZXZlbCBtb2R1bGVzLlxuICAgICAqXG4gICAgICogPHA+XG4gICAgICogVGhpcyBjb3JlIGNvZGUgaXMgZXh0cmFjdGVkIGZyb20gTWljaGVsZSBCaW5pJ3MgY3VydmUyNTUuanMgaW1wbGVtZW50YXRpb24sXG4gICAgICogd2hpY2ggaXMgdXNlZCBhcyBhIGJhc2UgZm9yIEN1cnZlMjU1MTkgRUNESCBhbmQgRWQyNTUxOSBFZERTQSBvcGVyYXRpb25zLlxuICAgICAqIDwvcD5cbiAgICAgKi9cbiAgICB2YXIgbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIF9zZXRiaXQobiwgYywgdikge1xuICAgICAgICB2YXIgaSA9IGMgPj4gNDtcbiAgICAgICAgdmFyIGEgPSBuW2ldO1xuICAgICAgICBhID0gYSArICgxIDw8IChjICYgMHhmKSkgKiB2O1xuICAgICAgICBuW2ldID0gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZ2V0Yml0KG4sIGMpIHtcbiAgICAgICAgcmV0dXJuIChuW2MgPj4gNF0gPj4gKGMgJiAweGYpKSAmIDE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX1pFUk8oKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX09ORSgpIHtcbiAgICAgICAgcmV0dXJuIFsxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbiAgICB9XG5cbiAgICAvLyBCYXNlcG9pbnQuXG4gICAgZnVuY3Rpb24gX0JBU0UoKSB7XG4gICAgICAgIHJldHVybiBbOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIC0xLCAwLCArMSB3aGVuIGEgaXMgbGVzcyB0aGFuLCBlcXVhbCwgb3IgZ3JlYXRlciB0aGFuIGJcbiAgICBmdW5jdGlvbiBfYmlnaW50Y21wKGEsIGIpIHtcbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGEgYml0IHRyaWNreSB0byBhdm9pZCBjb2RlIGJyYW5jaGluZ1xuICAgICAgICB2YXIgYywgYWJzX3IsIG1hc2s7XG4gICAgICAgIHZhciByID0gMDtcbiAgICAgICAgZm9yIChjID0gMTU7IGMgPj0gMDsgYy0tKSB7XG4gICAgICAgICAgICB2YXIgeCA9IGFbY107XG4gICAgICAgICAgICB2YXIgeSA9IGJbY107XG4gICAgICAgICAgICByID0gciArICh4IC0geSkgKiAoMSAtIHIgKiByKTtcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9ncmFwaGljcy5zdGFuZm9yZC5lZHUvfnNlYW5kZXIvYml0aGFja3MuaHRtbCNJbnRlZ2VyQWJzXG4gICAgICAgICAgICAvLyBjb3JyZWN0IGZvciBbLTI5NDk2NzI5NSwgMjk0OTY3Mjk1XVxuICAgICAgICAgICAgbWFzayA9IHIgPj4gMzE7XG4gICAgICAgICAgICBhYnNfciA9IChyICsgbWFzaykgXiBtYXNrO1xuICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81OTY0NjcvaG93LWRvLWktY29udmVydC1hLW51bWJlci10by1hbi1pbnRlZ2VyLWluLWphdmFzY3JpcHRcbiAgICAgICAgICAgIC8vIHRoaXMgcm91bmRzIHRvd2FyZHMgemVyb1xuICAgICAgICAgICAgciA9IH5+KChyIDw8IDEpIC8gKGFic19yICsgMSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9iaWdpbnRhZGQoYSwgYikge1xuICAgICAgICB2YXIgciA9IFtdO1xuICAgICAgICB2YXIgdjtcbiAgICAgICAgclswXSA9ICh2ID0gYVswXSArIGJbMF0pICYgMHhmZmZmO1xuICAgICAgICByWzFdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsxXSArIGJbMV0pICYgMHhmZmZmO1xuICAgICAgICByWzJdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsyXSArIGJbMl0pICYgMHhmZmZmO1xuICAgICAgICByWzNdID0gKHYgPSAodiA+Pj4gMTYpICsgYVszXSArIGJbM10pICYgMHhmZmZmO1xuICAgICAgICByWzRdID0gKHYgPSAodiA+Pj4gMTYpICsgYVs0XSArIGJbNF0pICYgMHhmZmZmO1xuICAgICAgICByWzVdID0gKHYgPSAodiA+Pj4gMTYpICsgYVs1XSArIGJbNV0pICYgMHhmZmZmO1xuICAgICAgICByWzZdID0gKHYgPSAodiA+Pj4gMTYpICsgYVs2XSArIGJbNl0pICYgMHhmZmZmO1xuICAgICAgICByWzddID0gKHYgPSAodiA+Pj4gMTYpICsgYVs3XSArIGJbN10pICYgMHhmZmZmO1xuICAgICAgICByWzhdID0gKHYgPSAodiA+Pj4gMTYpICsgYVs4XSArIGJbOF0pICYgMHhmZmZmO1xuICAgICAgICByWzldID0gKHYgPSAodiA+Pj4gMTYpICsgYVs5XSArIGJbOV0pICYgMHhmZmZmO1xuICAgICAgICByWzEwXSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbMTBdICsgYlsxMF0pICYgMHhmZmZmO1xuICAgICAgICByWzExXSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbMTFdICsgYlsxMV0pICYgMHhmZmZmO1xuICAgICAgICByWzEyXSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbMTJdICsgYlsxMl0pICYgMHhmZmZmO1xuICAgICAgICByWzEzXSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbMTNdICsgYlsxM10pICYgMHhmZmZmO1xuICAgICAgICByWzE0XSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbMTRdICsgYlsxNF0pICYgMHhmZmZmO1xuICAgICAgICByWzE1XSA9ICh2ID4+PiAxNikgKyBhWzE1XSArIGJbMTVdO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYmlnaW50c3ViKGEsIGIpIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgdmFyIHY7XG4gICAgICAgIHJbMF0gPSAodiA9IDB4ODAwMDAgKyBhWzBdIC0gYlswXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMV0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVsxXSAtIGJbMV0pICYgMHhmZmZmO1xuICAgICAgICByWzJdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbMl0gLSBiWzJdKSAmIDB4ZmZmZjtcbiAgICAgICAgclszXSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzNdIC0gYlszXSkgJiAweGZmZmY7XG4gICAgICAgIHJbNF0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVs0XSAtIGJbNF0pICYgMHhmZmZmO1xuICAgICAgICByWzVdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbNV0gLSBiWzVdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls2XSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzZdIC0gYls2XSkgJiAweGZmZmY7XG4gICAgICAgIHJbN10gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVs3XSAtIGJbN10pICYgMHhmZmZmO1xuICAgICAgICByWzhdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbOF0gLSBiWzhdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls5XSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzldIC0gYls5XSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTBdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbMTBdIC0gYlsxMF0pICYgMHhmZmZmO1xuICAgICAgICByWzExXSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzExXSAtIGJbMTFdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMl0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVsxMl0gLSBiWzEyXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTNdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbMTNdIC0gYlsxM10pICYgMHhmZmZmO1xuICAgICAgICByWzE0XSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzE0XSAtIGJbMTRdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNV0gPSAodiA+Pj4gMTYpIC0gOCArIGFbMTVdIC0gYlsxNV07XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9zcXI4aChhNywgYTYsIGE1LCBhNCwgYTMsIGEyLCBhMSwgYTApIHtcbiAgICAgICAgLy8gJ2RpdmlzaW9uIGJ5IDB4MTAwMDAnIGNhbiBub3QgYmUgcmVwbGFjZWQgYnkgJz4+IDE2JyBiZWNhdXNlXG4gICAgICAgIC8vIG1vcmUgdGhhbiAzMiBiaXRzIG9mIHByZWNpc2lvbiBhcmUgbmVlZGVkIHNpbWlsYXJseVxuICAgICAgICAvLyAnbXVsdGlwbGljYXRpb24gYnkgMicgY2Fubm90IGJlIHJlcGxhY2VkIGJ5ICc8PCAxJ1xuICAgICAgICB2YXIgciA9IFtdO1xuICAgICAgICB2YXIgdjtcbiAgICAgICAgclswXSA9ICh2ID0gYTAgKiBhMCkgJiAweGZmZmY7XG4gICAgICAgIHJbMV0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyAyICogYTAgKiBhMSkgJiAweGZmZmY7XG4gICAgICAgIHJbMl0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyAyICogYTAgKiBhMiArIGExICogYTEpICYgMHhmZmZmO1xuICAgICAgICByWzNdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgMiAqIGEwICogYTMgKyAyICogYTEgKiBhMikgJiAweGZmZmY7XG4gICAgICAgIHJbNF0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyAyICogYTAgKiBhNCArIDIgKiBhMSAqIGEzICsgYTJcbiAgICAgICAgICAgICAgICAgICAgKiBhMikgJiAweGZmZmY7XG4gICAgICAgIHJbNV0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyAyICogYTAgKiBhNSArIDIgKiBhMSAqIGE0ICsgMlxuICAgICAgICAgICAgICAgICAgICAqIGEyICogYTMpICYgMHhmZmZmO1xuICAgICAgICByWzZdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgMiAqIGEwICogYTYgKyAyICogYTEgKiBhNSArIDJcbiAgICAgICAgICAgICAgICAgICAgKiBhMiAqIGE0ICsgYTMgKiBhMykgJiAweGZmZmY7XG4gICAgICAgIHJbN10gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyAyICogYTAgKiBhNyArIDIgKiBhMSAqIGE2ICsgMlxuICAgICAgICAgICAgICAgICAgICAqIGEyICogYTUgKyAyICogYTMgKiBhNCkgJiAweGZmZmY7XG4gICAgICAgIHJbOF0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyAyICogYTEgKiBhNyArIDIgKiBhMiAqIGE2ICsgMlxuICAgICAgICAgICAgICAgICAgICAqIGEzICogYTUgKyBhNCAqIGE0KSAmIDB4ZmZmZjtcbiAgICAgICAgcls5XSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIDIgKiBhMiAqIGE3ICsgMiAqIGEzICogYTYgKyAyXG4gICAgICAgICAgICAgICAgICAgICogYTQgKiBhNSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTBdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgMiAqIGEzICogYTcgKyAyICogYTQgKiBhNlxuICAgICAgICAgICAgICAgICAgICAgKyBhNSAqIGE1KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMV0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyAyICogYTQgKiBhNyArIDIgKiBhNSAqIGE2KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMl0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyAyICogYTUgKiBhNyArIGE2ICogYTYpICYgMHhmZmZmO1xuICAgICAgICByWzEzXSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIDIgKiBhNiAqIGE3KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNF0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhNyAqIGE3KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNV0gPSAwIHwgKHYgLyAweDEwMDAwKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3Nxcm1vZHAoYSkge1xuICAgICAgICB2YXIgeCA9IF9zcXI4aChhWzE1XSwgYVsxNF0sIGFbMTNdLCBhWzEyXSwgYVsxMV0sIGFbMTBdLCBhWzldLFxuICAgICAgICAgICAgICAgICAgICAgICBhWzhdKTtcbiAgICAgICAgdmFyIHogPSBfc3FyOGgoYVs3XSwgYVs2XSwgYVs1XSwgYVs0XSwgYVszXSwgYVsyXSwgYVsxXSwgYVswXSk7XG4gICAgICAgIHZhciB5ID0gX3NxcjhoKGFbMTVdICsgYVs3XSwgYVsxNF0gKyBhWzZdLCBhWzEzXSArIGFbNV0sIGFbMTJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgYVsxMV0gKyBhWzNdLCBhWzEwXSArIGFbMl0sIGFbOV0gKyBhWzFdLCBhWzhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhWzBdKTtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgdmFyIHY7XG4gICAgICAgIHJbMF0gPSAodiA9IDB4ODAwMDAwICsgelswXSArICh5WzhdIC0geFs4XSAtIHpbOF0gKyB4WzBdIC0gMHg4MClcbiAgICAgICAgICAgICAgICAgICAgKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbMV0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbMV1cbiAgICAgICAgICAgICAgICAgICAgKyAoeVs5XSAtIHhbOV0gLSB6WzldICsgeFsxXSkgKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbMl0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbMl1cbiAgICAgICAgICAgICAgICAgICAgKyAoeVsxMF0gLSB4WzEwXSAtIHpbMTBdICsgeFsyXSkgKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbM10gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbM11cbiAgICAgICAgICAgICAgICAgICAgKyAoeVsxMV0gLSB4WzExXSAtIHpbMTFdICsgeFszXSkgKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbNF0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbNF1cbiAgICAgICAgICAgICAgICAgICAgKyAoeVsxMl0gLSB4WzEyXSAtIHpbMTJdICsgeFs0XSkgKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbNV0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbNV1cbiAgICAgICAgICAgICAgICAgICAgKyAoeVsxM10gLSB4WzEzXSAtIHpbMTNdICsgeFs1XSkgKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbNl0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbNl1cbiAgICAgICAgICAgICAgICAgICAgKyAoeVsxNF0gLSB4WzE0XSAtIHpbMTRdICsgeFs2XSkgKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbN10gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbN11cbiAgICAgICAgICAgICAgICAgICAgKyAoeVsxNV0gLSB4WzE1XSAtIHpbMTVdICsgeFs3XSkgKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbOF0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbOF0gKyB5WzBdIC0geFswXSAtIHpbMF1cbiAgICAgICAgICAgICAgICAgICAgKyB4WzhdICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzldID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzldICsgeVsxXSAtIHhbMV0gLSB6WzFdXG4gICAgICAgICAgICAgICAgICAgICsgeFs5XSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMF0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbMTBdICsgeVsyXSAtIHhbMl0gLSB6WzJdXG4gICAgICAgICAgICAgICAgICAgICArIHhbMTBdICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzExXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsxMV0gKyB5WzNdIC0geFszXSAtIHpbM11cbiAgICAgICAgICAgICAgICAgICAgICsgeFsxMV0gKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbMTJdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzEyXSArIHlbNF0gLSB4WzRdIC0gels0XVxuICAgICAgICAgICAgICAgICAgICAgKyB4WzEyXSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxM10gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbMTNdICsgeVs1XSAtIHhbNV0gLSB6WzVdXG4gICAgICAgICAgICAgICAgICAgICArIHhbMTNdICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzE0XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsxNF0gKyB5WzZdIC0geFs2XSAtIHpbNl1cbiAgICAgICAgICAgICAgICAgICAgICsgeFsxNF0gKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbMTVdID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsxNV0gKyB5WzddIC0geFs3XSAtIHpbN11cbiAgICAgICAgICAgICAgICArIHhbMTVdICogMzg7XG4gICAgICAgIF9yZWR1Y2Uocik7XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tdWw4aChhNywgYTYsIGE1LCBhNCwgYTMsIGEyLCBhMSwgYTAsIGI3LCBiNiwgYjUsIGI0LCBiMyxcbiAgICAgICAgICAgICAgICAgICAgYjIsIGIxLCBiMCkge1xuICAgICAgICAvLyAnZGl2aXNpb24gYnkgMHgxMDAwMCcgY2FuIG5vdCBiZSByZXBsYWNlZCBieSAnPj4gMTYnIGJlY2F1c2VcbiAgICAgICAgLy8gbW9yZSB0aGFuIDMyIGJpdHMgb2YgcHJlY2lzaW9uIGFyZSBuZWVkZWRcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgdmFyIHY7XG4gICAgICAgIHJbMF0gPSAodiA9IGEwICogYjApICYgMHhmZmZmO1xuICAgICAgICByWzFdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTAgKiBiMSArIGExICogYjApICYgMHhmZmZmO1xuICAgICAgICByWzJdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTAgKiBiMiArIGExICogYjEgKyBhMiAqIGIwKSAmIDB4ZmZmZjtcbiAgICAgICAgclszXSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIGEwICogYjMgKyBhMSAqIGIyICsgYTIgKiBiMVxuICAgICAgICAgICAgICAgICAgICArIGEzICogYjApICYgMHhmZmZmO1xuICAgICAgICByWzRdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTAgKiBiNCArIGExICogYjMgKyBhMiAqIGIyXG4gICAgICAgICAgICAgICAgICAgICsgYTMgKiBiMSArIGE0ICogYjApICYgMHhmZmZmO1xuICAgICAgICByWzVdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTAgKiBiNSArIGExICogYjQgKyBhMiAqIGIzXG4gICAgICAgICAgICAgICAgICAgICsgYTMgKiBiMiArIGE0ICogYjEgKyBhNSAqIGIwKSAmIDB4ZmZmZjtcbiAgICAgICAgcls2XSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIGEwICogYjYgKyBhMSAqIGI1ICsgYTIgKiBiNFxuICAgICAgICAgICAgICAgICAgICArIGEzICogYjMgKyBhNCAqIGIyICsgYTUgKiBiMSArIGE2ICogYjApICYgMHhmZmZmO1xuICAgICAgICByWzddID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTAgKiBiNyArIGExICogYjYgKyBhMiAqIGI1XG4gICAgICAgICAgICAgICAgICAgICsgYTMgKiBiNCArIGE0ICogYjMgKyBhNSAqIGIyICsgYTYgKiBiMSArIGE3ICogYjApICYgMHhmZmZmO1xuICAgICAgICByWzhdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTEgKiBiNyArIGEyICogYjYgKyBhMyAqIGI1XG4gICAgICAgICAgICAgICAgICAgICsgYTQgKiBiNCArIGE1ICogYjMgKyBhNiAqIGIyICsgYTcgKiBiMSkgJiAweGZmZmY7XG4gICAgICAgIHJbOV0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhMiAqIGI3ICsgYTMgKiBiNiArIGE0ICogYjVcbiAgICAgICAgICAgICAgICAgICAgKyBhNSAqIGI0ICsgYTYgKiBiMyArIGE3ICogYjIpICYgMHhmZmZmO1xuICAgICAgICByWzEwXSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIGEzICogYjcgKyBhNCAqIGI2ICsgYTUgKiBiNVxuICAgICAgICAgICAgICAgICAgICAgKyBhNiAqIGI0ICsgYTcgKiBiMykgJiAweGZmZmY7XG4gICAgICAgIHJbMTFdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTQgKiBiNyArIGE1ICogYjYgKyBhNiAqIGI1XG4gICAgICAgICAgICAgICAgICAgICArIGE3ICogYjQpICYgMHhmZmZmO1xuICAgICAgICByWzEyXSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIGE1ICogYjcgKyBhNiAqIGI2ICsgYTcgKiBiNSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTNdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTYgKiBiNyArIGE3ICogYjYpICYgMHhmZmZmO1xuICAgICAgICByWzE0XSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIGE3ICogYjcpICYgMHhmZmZmO1xuICAgICAgICByWzE1XSA9ICgwIHwgKHYgLyAweDEwMDAwKSk7XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tdWxtb2RwKGEsIGIpIHtcbiAgICAgICAgLy8gS2FyYXRzdWJhIG11bHRpcGxpY2F0aW9uIHNjaGVtZTogeCp5ID0gKGJeMitiKSp4MSp5MSAtXG4gICAgICAgIC8vIGIqKHgxLXgwKSooeTEteTApICsgKGIrMSkqeDAqeTBcbiAgICAgICAgdmFyIHggPSBfbXVsOGgoYVsxNV0sIGFbMTRdLCBhWzEzXSwgYVsxMl0sIGFbMTFdLCBhWzEwXSwgYVs5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgYVs4XSwgYlsxNV0sIGJbMTRdLCBiWzEzXSwgYlsxMl0sIGJbMTFdLCBiWzEwXSxcbiAgICAgICAgICAgICAgICAgICAgICAgYls5XSwgYls4XSk7XG4gICAgICAgIHZhciB6ID0gX211bDhoKGFbN10sIGFbNl0sIGFbNV0sIGFbNF0sIGFbM10sIGFbMl0sIGFbMV0sIGFbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgIGJbN10sIGJbNl0sIGJbNV0sIGJbNF0sIGJbM10sIGJbMl0sIGJbMV0sIGJbMF0pO1xuICAgICAgICB2YXIgeSA9IF9tdWw4aChhWzE1XSArIGFbN10sIGFbMTRdICsgYVs2XSwgYVsxM10gKyBhWzVdLCBhWzEyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgIGFbMTFdICsgYVszXSwgYVsxMF0gKyBhWzJdLCBhWzldICsgYVsxXSwgYVs4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgYlsxNV0gKyBiWzddLCBiWzE0XSArIGJbNl0sIGJbMTNdICsgYls1XSwgYlsxMl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBiWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICBiWzExXSArIGJbM10sIGJbMTBdICsgYlsyXSwgYls5XSArIGJbMV0sIGJbOF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGJbMF0pO1xuICAgICAgICB2YXIgciA9IFtdO1xuICAgICAgICB2YXIgdjtcbiAgICAgICAgclswXSA9ICh2ID0gMHg4MDAwMDAgKyB6WzBdICsgKHlbOF0gLSB4WzhdIC0gels4XSArIHhbMF0gLSAweDgwKVxuICAgICAgICAgICAgICAgICAgICAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsxXVxuICAgICAgICAgICAgICAgICAgICArICh5WzldIC0geFs5XSAtIHpbOV0gKyB4WzFdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsyXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsyXVxuICAgICAgICAgICAgICAgICAgICArICh5WzEwXSAtIHhbMTBdIC0gelsxMF0gKyB4WzJdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclszXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelszXVxuICAgICAgICAgICAgICAgICAgICArICh5WzExXSAtIHhbMTFdIC0gelsxMV0gKyB4WzNdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgcls0XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgels0XVxuICAgICAgICAgICAgICAgICAgICArICh5WzEyXSAtIHhbMTJdIC0gelsxMl0gKyB4WzRdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgcls1XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgels1XVxuICAgICAgICAgICAgICAgICAgICArICh5WzEzXSAtIHhbMTNdIC0gelsxM10gKyB4WzVdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgcls2XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgels2XVxuICAgICAgICAgICAgICAgICAgICArICh5WzE0XSAtIHhbMTRdIC0gelsxNF0gKyB4WzZdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgcls3XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgels3XVxuICAgICAgICAgICAgICAgICAgICArICh5WzE1XSAtIHhbMTVdIC0gelsxNV0gKyB4WzddKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgcls4XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgels4XSArIHlbMF0gLSB4WzBdIC0gelswXVxuICAgICAgICAgICAgICAgICAgICArIHhbOF0gKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbOV0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbOV0gKyB5WzFdIC0geFsxXSAtIHpbMV1cbiAgICAgICAgICAgICAgICAgICAgKyB4WzldICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzEwXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsxMF0gKyB5WzJdIC0geFsyXSAtIHpbMl1cbiAgICAgICAgICAgICAgICAgICAgICsgeFsxMF0gKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbMTFdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzExXSArIHlbM10gLSB4WzNdIC0gelszXVxuICAgICAgICAgICAgICAgICAgICAgKyB4WzExXSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMl0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbMTJdICsgeVs0XSAtIHhbNF0gLSB6WzRdXG4gICAgICAgICAgICAgICAgICAgICArIHhbMTJdICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzEzXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsxM10gKyB5WzVdIC0geFs1XSAtIHpbNV1cbiAgICAgICAgICAgICAgICAgICAgICsgeFsxM10gKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbMTRdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzE0XSArIHlbNl0gLSB4WzZdIC0gels2XVxuICAgICAgICAgICAgICAgICAgICAgKyB4WzE0XSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNV0gPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzE1XSArIHlbN10gLSB4WzddIC0gels3XVxuICAgICAgICAgICAgICAgICsgeFsxNV0gKiAzODtcbiAgICAgICAgX3JlZHVjZShyKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3JlZHVjZShhcnIpIHtcbiAgICAgICAgdmFyIGFDb3B5ID0gYXJyLnNsaWNlKDApO1xuICAgICAgICB2YXIgY2hvaWNlID0gW2FyciwgYUNvcHldO1xuICAgICAgICB2YXIgdiA9IGFyclsxNV07XG4gICAgICAgIC8vIFVzZSB0aGUgZHVtbXkgY29weSBpbnN0ZWFkIG9mIGp1c3QgcmV0dXJuaW5nIHRvIGJlIG1vcmUgY29uc3RhbnQgdGltZS5cbiAgICAgICAgdmFyIGEgPSBjaG9pY2VbKHYgPCAweDgwMDApICYgMV07XG4gICAgICAgIGFbMTVdID0gdiAmIDB4N2ZmZjtcbiAgICAgICAgLy8gPjMyLWJpdHMgb2YgcHJlY2lzaW9uIGFyZSByZXF1aXJlZCBoZXJlIHNvICcvIDB4ODAwMCcgY2FuIG5vdCBiZVxuICAgICAgICAvLyByZXBsYWNlZCBieSB0aGUgYXJpdGhtZXRpYyBlcXVpdmFsZW50ICc+Pj4gMTUnXG4gICAgICAgIHYgPSAoMCB8ICh2IC8gMHg4MDAwKSkgKiAxOTtcbiAgICAgICAgYVswXSA9ICh2ICs9IGFbMF0pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbMV0gPSAodiArPSBhWzFdKSAmIDB4ZmZmZjtcbiAgICAgICAgdiA9IHYgPj4+IDE2O1xuICAgICAgICBhWzJdID0gKHYgKz0gYVsyXSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVszXSA9ICh2ICs9IGFbM10pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbNF0gPSAodiArPSBhWzRdKSAmIDB4ZmZmZjtcbiAgICAgICAgdiA9IHYgPj4+IDE2O1xuICAgICAgICBhWzVdID0gKHYgKz0gYVs1XSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVs2XSA9ICh2ICs9IGFbNl0pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbN10gPSAodiArPSBhWzddKSAmIDB4ZmZmZjtcbiAgICAgICAgdiA9IHYgPj4+IDE2O1xuICAgICAgICBhWzhdID0gKHYgKz0gYVs4XSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVs5XSA9ICh2ICs9IGFbOV0pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbMTBdID0gKHYgKz0gYVsxMF0pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbMTFdID0gKHYgKz0gYVsxMV0pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbMTJdID0gKHYgKz0gYVsxMl0pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbMTNdID0gKHYgKz0gYVsxM10pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbMTRdID0gKHYgKz0gYVsxNF0pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbMTVdICs9IHY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2FkZG1vZHAoYSwgYikge1xuICAgICAgICB2YXIgciA9IFtdO1xuICAgICAgICB2YXIgdjtcbiAgICAgICAgclswXSA9ICh2ID0gKCgwIHwgKGFbMTVdID4+PiAxNSkpICsgKDAgfCAoYlsxNV0gPj4+IDE1KSkpICogMTlcbiAgICAgICAgICAgICAgICAgICAgKyBhWzBdICsgYlswXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMV0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzFdICsgYlsxXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMl0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzJdICsgYlsyXSkgJiAweGZmZmY7XG4gICAgICAgIHJbM10gPSAodiA9ICh2ID4+PiAxNikgKyBhWzNdICsgYlszXSkgJiAweGZmZmY7XG4gICAgICAgIHJbNF0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzRdICsgYls0XSkgJiAweGZmZmY7XG4gICAgICAgIHJbNV0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzVdICsgYls1XSkgJiAweGZmZmY7XG4gICAgICAgIHJbNl0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzZdICsgYls2XSkgJiAweGZmZmY7XG4gICAgICAgIHJbN10gPSAodiA9ICh2ID4+PiAxNikgKyBhWzddICsgYls3XSkgJiAweGZmZmY7XG4gICAgICAgIHJbOF0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzhdICsgYls4XSkgJiAweGZmZmY7XG4gICAgICAgIHJbOV0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzldICsgYls5XSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTBdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsxMF0gKyBiWzEwXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTFdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsxMV0gKyBiWzExXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTJdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsxMl0gKyBiWzEyXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTNdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsxM10gKyBiWzEzXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTRdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsxNF0gKyBiWzE0XSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTVdID0gKHYgPj4+IDE2KSArIChhWzE1XSAmIDB4N2ZmZikgKyAoYlsxNV0gJiAweDdmZmYpO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfc3VibW9kcChhLCBiKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIHZhciB2O1xuICAgICAgICByWzBdID0gKHYgPSAweDgwMDAwXG4gICAgICAgICAgICAgICAgICAgICsgKCgwIHwgKGFbMTVdID4+PiAxNSkpIC0gKDAgfCAoYlsxNV0gPj4+IDE1KSkgLSAxKVxuICAgICAgICAgICAgICAgICAgICAqIDE5ICsgYVswXSAtIGJbMF0pICYgMHhmZmZmO1xuICAgICAgICByWzFdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbMV0gLSBiWzFdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsyXSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzJdIC0gYlsyXSkgJiAweGZmZmY7XG4gICAgICAgIHJbM10gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVszXSAtIGJbM10pICYgMHhmZmZmO1xuICAgICAgICByWzRdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbNF0gLSBiWzRdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls1XSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzVdIC0gYls1XSkgJiAweGZmZmY7XG4gICAgICAgIHJbNl0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVs2XSAtIGJbNl0pICYgMHhmZmZmO1xuICAgICAgICByWzddID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbN10gLSBiWzddKSAmIDB4ZmZmZjtcbiAgICAgICAgcls4XSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzhdIC0gYls4XSkgJiAweGZmZmY7XG4gICAgICAgIHJbOV0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVs5XSAtIGJbOV0pICYgMHhmZmZmO1xuICAgICAgICByWzEwXSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzEwXSAtIGJbMTBdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMV0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVsxMV0gLSBiWzExXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTJdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbMTJdIC0gYlsxMl0pICYgMHhmZmZmO1xuICAgICAgICByWzEzXSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzEzXSAtIGJbMTNdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNF0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVsxNF0gLSBiWzE0XSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTVdID0gKHYgPj4+IDE2KSArIDB4N2ZmOCArIChhWzE1XSAmIDB4N2ZmZilcbiAgICAgICAgICAgICAgICAtIChiWzE1XSAmIDB4N2ZmZik7XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbnZtb2RwKGEpIHtcbiAgICAgICAgdmFyIGMgPSBhO1xuICAgICAgICB2YXIgaSA9IDI1MDtcbiAgICAgICAgd2hpbGUgKC0taSkge1xuICAgICAgICAgICAgYSA9IF9zcXJtb2RwKGEpO1xuICAgICAgICAgICAgYSA9IF9tdWxtb2RwKGEsIGMpO1xuICAgICAgICB9XG4gICAgICAgIGEgPSBfc3FybW9kcChhKTtcbiAgICAgICAgYSA9IF9zcXJtb2RwKGEpO1xuICAgICAgICBhID0gX211bG1vZHAoYSwgYyk7XG4gICAgICAgIGEgPSBfc3FybW9kcChhKTtcbiAgICAgICAgYSA9IF9zcXJtb2RwKGEpO1xuICAgICAgICBhID0gX211bG1vZHAoYSwgYyk7XG4gICAgICAgIGEgPSBfc3FybW9kcChhKTtcbiAgICAgICAgYSA9IF9tdWxtb2RwKGEsIGMpO1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfbXVsYXNtYWxsKGEpIHtcbiAgICAgICAgLy8gJ2RpdmlzaW9uIGJ5IDB4MTAwMDAnIGNhbiBub3QgYmUgcmVwbGFjZWQgYnkgJz4+IDE2JyBiZWNhdXNlXG4gICAgICAgIC8vIG1vcmUgdGhhbiAzMiBiaXRzIG9mIHByZWNpc2lvbiBhcmUgbmVlZGVkXG4gICAgICAgIHZhciBtID0gMTIxNjY1O1xuICAgICAgICB2YXIgciA9IFtdO1xuICAgICAgICB2YXIgdjtcbiAgICAgICAgclswXSA9ICh2ID0gYVswXSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzFdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVsxXSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzJdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVsyXSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzNdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVszXSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzRdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVs0XSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzVdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVs1XSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzZdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVs2XSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzddID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVs3XSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzhdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVs4XSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzldID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVs5XSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzEwXSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIGFbMTBdICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTFdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVsxMV0gKiBtKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMl0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzEyXSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzEzXSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIGFbMTNdICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTRdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVsxNF0gKiBtKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNV0gPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVsxNV0gKiBtO1xuICAgICAgICBfcmVkdWNlKHIpO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZGJsKHgsIHopIHtcbiAgICAgICAgdmFyIHhfMiwgel8yLCBtLCBuLCBvO1xuICAgICAgICBtID0gX3Nxcm1vZHAoX2FkZG1vZHAoeCwgeikpO1xuICAgICAgICBuID0gX3Nxcm1vZHAoX3N1Ym1vZHAoeCwgeikpO1xuICAgICAgICBvID0gX3N1Ym1vZHAobSwgbik7XG4gICAgICAgIHhfMiA9IF9tdWxtb2RwKG4sIG0pO1xuICAgICAgICB6XzIgPSBfbXVsbW9kcChfYWRkbW9kcChfbXVsYXNtYWxsKG8pLCBtKSwgbyk7XG4gICAgICAgIHJldHVybiBbeF8yLCB6XzJdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9zdW0oeCwgeiwgeF9wLCB6X3AsIHhfMSkge1xuICAgICAgICB2YXIgeF8zLCB6XzMsIHAsIHE7XG4gICAgICAgIHAgPSBfbXVsbW9kcChfc3VibW9kcCh4LCB6KSwgX2FkZG1vZHAoeF9wLCB6X3ApKTtcbiAgICAgICAgcSA9IF9tdWxtb2RwKF9hZGRtb2RwKHgsIHopLCBfc3VibW9kcCh4X3AsIHpfcCkpO1xuICAgICAgICB4XzMgPSBfc3FybW9kcChfYWRkbW9kcChwLCBxKSk7XG4gICAgICAgIHpfMyA9IF9tdWxtb2RwKF9zcXJtb2RwKF9zdWJtb2RwKHAsIHEpKSwgeF8xKTtcbiAgICAgICAgcmV0dXJuIFt4XzMsIHpfM107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2dlbmVyYXRlS2V5KGN1cnZlMjU1MTkpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IGNyeXB0by5yYW5kb21CeXRlcygzMik7XG5cbiAgICAgICAgLy8gRm9yIEN1cnZlMjU1MTkgREgga2V5cywgd2UgbmVlZCB0byBhcHBseSBzb21lIGJpdCBtYXNrIG9uIGdlbmVyYXRlZFxuICAgICAgICAvLyBrZXlzOlxuICAgICAgICAvLyAqIGNsZWFyIGJpdCAwLCAxLCAyIG9mIGZpcnN0IGJ5dGVcbiAgICAgICAgLy8gKiBjbGVhciBiaXQgNyBvZiBsYXN0IGJ5dGVcbiAgICAgICAgLy8gKiBzZXQgYml0IDYgb2YgbGFzdCBieXRlXG4gICAgICAgIGlmIChjdXJ2ZTI1NTE5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBidWZmZXJbMF0gJj0gMHhmODtcbiAgICAgICAgICAgIGJ1ZmZlclszMV0gPSAoYnVmZmVyWzMxXSAmIDB4N2YpIHwgMHg0MDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZmZlcltpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQuam9pbignJyk7XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHNvbWUgZnVuY3Rpb25zIHRvIHRoZSBvdXRzaWRlIHRocm91Z2ggdGhpcyBuYW1lIHNwYWNlLlxuICAgIC8vIE5vdGU6IFRoaXMgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuXG4gICAgbnMuZ2V0Yml0ID0gX2dldGJpdDtcbiAgICBucy5zZXRiaXQgPSBfc2V0Yml0O1xuICAgIG5zLmFkZG1vZHAgPSBfYWRkbW9kcDtcbiAgICBucy5pbnZtb2RwID0gX2ludm1vZHA7XG4gICAgbnMubXVsbW9kcCA9IF9tdWxtb2RwO1xuICAgIG5zLnJlZHVjZSA9IF9yZWR1Y2U7XG4gICAgbnMuZGJsID0gX2RibDtcbiAgICBucy5zdW0gPSBfc3VtO1xuICAgIG5zLlpFUk8gPSBfWkVSTztcbiAgICBucy5PTkUgPSBfT05FO1xuICAgIG5zLkJBU0UgPSBfQkFTRTtcbiAgICBucy5iaWdpbnRhZGQgPSBfYmlnaW50YWRkO1xuICAgIG5zLmJpZ2ludHN1YiA9IF9iaWdpbnRzdWI7XG4gICAgbnMuYmlnaW50Y21wID0gX2JpZ2ludGNtcDtcbiAgICBucy5tdWxtb2RwID0gX211bG1vZHA7XG4gICAgbnMuc3FybW9kcCA9IF9zcXJtb2RwO1xuICAgIG5zLmdlbmVyYXRlS2V5ID0gX2dlbmVyYXRlS2V5O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gbnM7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQGZpbGVPdmVydmlld1xuICogQ29yZSBvcGVyYXRpb25zIG9uIGN1cnZlIDI1NTE5IHJlcXVpcmVkIGZvciB0aGUgaGlnaGVyIGxldmVsIG1vZHVsZXMuXG4gKi9cblxuLypcbiAqIENvcHlyaWdodCAoYykgMjAwNywgMjAxMywgMjAxNCBNaWNoZWxlIEJpbmlcbiAqIENvcHlyaWdodCAoYykgMjAxNCBNZWdhIExpbWl0ZWRcbiAqIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBBdXRob3JzOiBHdXkgSy4gS2xvc3MsIE1pY2hlbGUgQmluaVxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uXG4gKi9cblxudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuICAgIC8qKlxuICAgICAqIEBleHBvcnRzIGpvZGlkMjU1MTkvY3VydmUyNTVcbiAgICAgKiBMZWdhY3kgY29tcGF0aWJpbGl0eSBtb2R1bGUgZm9yIE1pY2hlbGUgQmluaSdzIHByZXZpb3VzIGN1cnZlMjU1LmpzLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogTGVnYWN5IGNvbXBhdGliaWxpdHkgbW9kdWxlIGZvciBNaWNoZWxlIEJpbmkncyBwcmV2aW91cyBjdXJ2ZTI1NS5qcy5cbiAgICAgKlxuICAgICAqIDxwPlxuICAgICAqIFRoaXMgY29kZSBwcmVzZW50cyBhbiBBUEkgd2l0aCBhbGwga2V5IGZvcm1hdHMgYXMgcHJldmlvdXNseSBhdmFpbGFibGVcbiAgICAgKiBmcm9tIE1pY2hlbGUgQmluaSdzIGN1cnZlMjU1LmpzIGltcGxlbWVudGF0aW9uLlxuICAgICAqIDwvcD5cbiAgICAgKi9cbiAgICB2YXIgbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGN1cnZlMjU1MTlfcmF3KGYsIGMpIHtcbiAgICAgICAgdmFyIGEsIHhfMSwgcTtcblxuICAgICAgICB4XzEgPSBjO1xuICAgICAgICBhID0gY29yZS5kYmwoeF8xLCBjb3JlLk9ORSgpKTtcbiAgICAgICAgcSA9IFt4XzEsIGNvcmUuT05FKCldO1xuXG4gICAgICAgIHZhciBuID0gMjU1O1xuXG4gICAgICAgIHdoaWxlIChjb3JlLmdldGJpdChmLCBuKSA9PSAwKSB7XG4gICAgICAgICAgICBuLS07XG4gICAgICAgICAgICAvLyBGb3IgY29ycmVjdCBjb25zdGFudC10aW1lIG9wZXJhdGlvbiwgYml0IDI1NSBzaG91bGQgYWx3YXlzIGJlXG4gICAgICAgICAgICAvLyBzZXQgdG8gMSBzbyB0aGUgZm9sbG93aW5nICd3aGlsZScgbG9vcCBpcyBuZXZlciBlbnRlcmVkLlxuICAgICAgICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvcmUuWkVSTygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG4tLTtcblxuICAgICAgICB2YXIgYXEgPSBbYSwgcV07XG5cbiAgICAgICAgd2hpbGUgKG4gPj0gMCkge1xuICAgICAgICAgICAgdmFyIHIsIHM7XG4gICAgICAgICAgICB2YXIgYiA9IGNvcmUuZ2V0Yml0KGYsIG4pO1xuICAgICAgICAgICAgciA9IGNvcmUuc3VtKGFxWzBdWzBdLCBhcVswXVsxXSwgYXFbMV1bMF0sIGFxWzFdWzFdLCB4XzEpO1xuICAgICAgICAgICAgcyA9IGNvcmUuZGJsKGFxWzEgLSBiXVswXSwgYXFbMSAtIGJdWzFdKTtcbiAgICAgICAgICAgIGFxWzEgLSBiXSA9IHM7XG4gICAgICAgICAgICBhcVtiXSA9IHI7XG4gICAgICAgICAgICBuLS07XG4gICAgICAgIH1cbiAgICAgICAgcSA9IGFxWzFdO1xuXG4gICAgICAgIHFbMV0gPSBjb3JlLmludm1vZHAocVsxXSk7XG4gICAgICAgIHFbMF0gPSBjb3JlLm11bG1vZHAocVswXSwgcVsxXSk7XG4gICAgICAgIGNvcmUucmVkdWNlKHFbMF0pO1xuICAgICAgICByZXR1cm4gcVswXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJ2ZTI1NTE5YjMyKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIF9iYXNlMzJlbmNvZGUoY3VydmUyNTUxOShfYmFzZTMyZGVjb2RlKGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9iYXNlMzJkZWNvZGUoYikpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJ2ZTI1NTE5KGYsIGMpIHtcbiAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICBjID0gY29yZS5CQVNFKCk7XG4gICAgICAgIH1cbiAgICAgICAgZlswXSAmPSAweEZGRjg7XG4gICAgICAgIGZbMTVdID0gKGZbMTVdICYgMHg3RkZGKSB8IDB4NDAwMDtcbiAgICAgICAgcmV0dXJuIGN1cnZlMjU1MTlfcmF3KGYsIGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9oZXhFbmNvZGVWZWN0b3Ioaykge1xuICAgICAgICB2YXIgaGV4S2V5ID0gdXRpbHMuaGV4RW5jb2RlKGspO1xuICAgICAgICAvLyBQYWQgd2l0aCAnMCcgYXQgdGhlIGZyb250LlxuICAgICAgICBoZXhLZXkgPSBuZXcgQXJyYXkoNjQgKyAxIC0gaGV4S2V5Lmxlbmd0aCkuam9pbignMCcpICsgaGV4S2V5O1xuICAgICAgICAvLyBJbnZlcnQgYnl0ZXMuXG4gICAgICAgIHJldHVybiBoZXhLZXkuc3BsaXQoLyguLikvKS5yZXZlcnNlKCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2hleERlY29kZVZlY3Rvcih2KSB7XG4gICAgICAgIC8vIGFzc2VydChsZW5ndGgoeCkgPT0gNjQpO1xuICAgICAgICAvLyBJbnZlcnQgYnl0ZXMuXG4gICAgICAgIHZhciBoZXhLZXkgPSB2LnNwbGl0KC8oLi4pLykucmV2ZXJzZSgpLmpvaW4oJycpO1xuICAgICAgICByZXR1cm4gdXRpbHMuaGV4RGVjb2RlKGhleEtleSk7XG4gICAgfVxuXG5cbiAgICAvLyBFeHBvc2Ugc29tZSBmdW5jdGlvbnMgdG8gdGhlIG91dHNpZGUgdGhyb3VnaCB0aGlzIG5hbWUgc3BhY2UuXG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgc2NhbGFyIHByb2R1Y3Qgb2YgYSBwb2ludCBvbiB0aGUgY3VydmUgMjU1MTkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHRoZSBESCBrZXktZXhjaGFuZ2UgcHJvdG9jb2wuXG4gICAgICpcbiAgICAgKiBCZWZvcmUgbXVsdGlwbGljYXRpb24sIHNvbWUgYml0IG9wZXJhdGlvbnMgYXJlIGFwcGxpZWQgdG8gdGhlXG4gICAgICogcHJpdmF0ZSBrZXkgdG8gZW5zdXJlIGl0IGlzIGEgdmFsaWQgQ3VydmUyNTUxOSBzZWNyZXQga2V5LlxuICAgICAqIEl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHByaXZhdGVcbiAgICAgKiBrZXkgaXMgYSB1bmlmb3JtbHkgcmFuZG9tLCBzZWNyZXQgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gZiB7YXJyYXl9XG4gICAgICogICAgIFByaXZhdGUga2V5LlxuICAgICAqIEBwYXJhbSBjIHthcnJheX1cbiAgICAgKiAgICAgUHVibGljIHBvaW50IG9uIHRoZSBjdXJ2ZS4gSWYgbm90IGdpdmVuLCB0aGUgY3VydmUncyBiYXNlIHBvaW50IGlzIHVzZWQuXG4gICAgICogQHJldHVybnMge2FycmF5fVxuICAgICAqICAgICBLZXkgcG9pbnQgcmVzdWx0aW5nIGZyb20gc2NhbGFyIHByb2R1Y3QuXG4gICAgICovXG4gICAgbnMuY3VydmUyNTUxOSA9IGN1cnZlMjU1MTk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgc2NhbGFyIHByb2R1Y3Qgb2YgYSBwb2ludCBvbiB0aGUgY3VydmUgMjU1MTkuXG4gICAgICpcbiAgICAgKiBUaGlzIHZhcmlhbnQgZG9lcyBub3QgbWFrZSBzdXJlIHRoYXQgdGhlIHByaXZhdGUga2V5IGlzIHZhbGlkLlxuICAgICAqIFRoZSB1c2VyIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoZSBwcml2YXRlIGtleSBpc1xuICAgICAqIHZhbGlkIG9yIHRoYXQgdGhpcyByZXN1bHRzIGluIGEgc2FmZSBwcm90b2NvbC4gIFVubGVzcyB5b3Uga25vd1xuICAgICAqIGV4YWN0bHkgd2hhdCB5b3UgYXJlIGRvaW5nLCB5b3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyB2YXJpYW50LFxuICAgICAqIHBsZWFzZSB1c2UgJ2N1cnZlMjU1MTknIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gZiB7YXJyYXl9XG4gICAgICogICAgIFByaXZhdGUga2V5LlxuICAgICAqIEBwYXJhbSBjIHthcnJheX1cbiAgICAgKiAgICAgUHVibGljIHBvaW50IG9uIHRoZSBjdXJ2ZS4gSWYgbm90IGdpdmVuLCB0aGUgY3VydmUncyBiYXNlIHBvaW50IGlzIHVzZWQuXG4gICAgICogQHJldHVybnMge2FycmF5fVxuICAgICAqICAgICBLZXkgcG9pbnQgcmVzdWx0aW5nIGZyb20gc2NhbGFyIHByb2R1Y3QuXG4gICAgICovXG4gICAgbnMuY3VydmUyNTUxOV9yYXcgPSBjdXJ2ZTI1NTE5X3JhdztcblxuICAgIC8qKlxuICAgICAqIEVuY29kZXMgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGEga2V5IHRvIGEgY2Fub25pY2FsIGhleFxuICAgICAqIHJlcHJlc2VudGF0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB0aGUgZm9ybWF0IGNvbW1vbmx5IHVzZWQgaW4gb3RoZXIgbGlicmFyaWVzIGFuZCBmb3JcbiAgICAgKiB0ZXN0IHZlY3RvcnMsIGFuZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBoZXggZHVtcCBvZiB0aGUga2V5IGluXG4gICAgICogbGl0dGxlLWVuZGlhbiBiaW5hcnkgZm9ybWF0LlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIG4ge2FycmF5fVxuICAgICAqICAgICBBcnJheSByZXByZXNlbnRhdGlvbiBvZiBrZXkuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgICAgSGV4YWRlY2ltYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGtleS5cbiAgICAgKi9cbiAgICBucy5oZXhFbmNvZGVWZWN0b3IgPSBfaGV4RW5jb2RlVmVjdG9yO1xuXG4gICAgLyoqXG4gICAgICogRGVjb2RlcyBhIGNhbm9uaWNhbCBoZXggcmVwcmVzZW50YXRpb24gb2YgYSBrZXlcbiAgICAgKiB0byBhbiBpbnRlcm5hbGx5IGNvbXBhdGlibGUgYXJyYXkgcmVwcmVzZW50YXRpb24uXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gbiB7c3RyaW5nfVxuICAgICAqICAgICBIZXhhZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Yga2V5LlxuICAgICAqIEByZXR1cm5zIHthcnJheX1cbiAgICAgKiAgICAgQXJyYXkgcmVwcmVzZW50YXRpb24gb2Yga2V5LlxuICAgICAqL1xuICAgIG5zLmhleERlY29kZVZlY3RvciA9IF9oZXhEZWNvZGVWZWN0b3I7XG5cbiAgICAvKipcbiAgICAgKiBFbmNvZGVzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIGtleSBpbnRvIGFcbiAgICAgKiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYSBzdHJpY3QgcG9zaXRpb25hbCBub3RhdGlvbiwgbW9zdCBzaWduaWZpY2FudCBkaWdpdCBmaXJzdC5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBuIHthcnJheX1cbiAgICAgKiAgICAgQXJyYXkgcmVwcmVzZW50YXRpb24gb2Yga2V5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICogICAgIEhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBrZXkuXG4gICAgICovXG4gICAgbnMuaGV4ZW5jb2RlID0gdXRpbHMuaGV4RW5jb2RlO1xuXG4gICAgLyoqXG4gICAgICogRGVjb2RlcyBhIGhleCByZXByZXNlbnRhdGlvbiBvZiBhIGtleSB0byBhbiBpbnRlcm5hbGx5XG4gICAgICogY29tcGF0aWJsZSBhcnJheSByZXByZXNlbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBuIHtzdHJpbmd9XG4gICAgICogICAgIEhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBrZXkuXG4gICAgICogQHJldHVybnMge2FycmF5fVxuICAgICAqICAgICBBcnJheSByZXByZXNlbnRhdGlvbiBvZiBrZXkuXG4gICAgICovXG4gICAgbnMuaGV4ZGVjb2RlID0gdXRpbHMuaGV4RGVjb2RlO1xuXG4gICAgLyoqXG4gICAgICogRW5jb2RlcyB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBrZXkgdG8gYSBiYXNlMzJcbiAgICAgKiByZXByZXNlbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBuIHthcnJheX1cbiAgICAgKiAgICAgQXJyYXkgcmVwcmVzZW50YXRpb24gb2Yga2V5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICogICAgIEJhc2UzMiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Yga2V5LlxuICAgICAqL1xuICAgIG5zLmJhc2UzMmVuY29kZSA9IHV0aWxzLmJhc2UzMmVuY29kZTtcblxuICAgIC8qKlxuICAgICAqIERlY29kZXMgYSBiYXNlMzIgcmVwcmVzZW50YXRpb24gb2YgYSBrZXkgdG8gYW4gaW50ZXJuYWxseVxuICAgICAqIGNvbXBhdGlibGUgYXJyYXkgcmVwcmVzZW50YXRpb24uXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gbiB7c3RyaW5nfVxuICAgICAqICAgICBCYXNlMzIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGtleS5cbiAgICAgKiBAcmV0dXJucyB7YXJyYXl9XG4gICAgICogICAgIEFycmF5IHJlcHJlc2VudGF0aW9uIG9mIGtleS5cbiAgICAgKi9cbiAgICBucy5iYXNlMzJkZWNvZGUgPSB1dGlscy5iYXNlMzJkZWNvZGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbnM7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQGZpbGVPdmVydmlld1xuICogRUMgRGlmZmllLUhlbGxtYW4gb3BlcmF0aW9ucyBvbiBDdXJ2ZTI1NTE5LlxuICovXG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVnYSBMaW1pdGVkXG4gKiB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQXV0aG9yczogR3V5IEsuIEtsb3NzXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS5cbiAqL1xuXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGN1cnZlMjU1ID0gcmVxdWlyZSgnLi9jdXJ2ZTI1NScpO1xuXG5cbiAgICAvKipcbiAgICAgKiBAZXhwb3J0cyBqb2RpZDI1NTE5L2RoXG4gICAgICogRUMgRGlmZmllLUhlbGxtYW4gb3BlcmF0aW9ucyBvbiBDdXJ2ZTI1NTE5LlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogRUMgRGlmZmllLUhlbGxtYW4gb3BlcmF0aW9ucyBvbiBDdXJ2ZTI1NTE5LlxuICAgICAqL1xuICAgIHZhciBucyA9IHt9O1xuXG5cbiAgICBmdW5jdGlvbiBfdG9TdHJpbmcodmVjdG9yKSB7XG4gICAgICAgIHZhciB1ID0gbmV3IFVpbnQxNkFycmF5KHZlY3Rvcik7XG4gICAgICAgIHJldHVybiAobmV3IEJ1ZmZlcihuZXcgVWludDhBcnJheSh1LmJ1ZmZlcikpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZnJvbVN0cmluZyh2ZWN0b3IpIHtcbiAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2ZWN0b3IpKSB7XG4gICAgICAgICAgICB2YXIgdSA9IG5ldyBVaW50OEFycmF5KHZlY3Rvcik7XG4gICAgICAgICAgICByZXR1cm4gKG5ldyBVaW50MTZBcnJheSh1LmJ1ZmZlcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheSgxNik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gMDsgaSA8IHZlY3Rvci5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgcmVzdWx0W2xdID0gKHZlY3Rvci5jaGFyQ29kZUF0KGkgKyAxKSA8PCA4KSB8IHZlY3Rvci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgbCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyBhIGtleSB0aHJvdWdoIHNjYWxhciBtdWx0aXBsaWNhdGlvbiBvZiBhIHBvaW50IG9uIHRoZSBjdXJ2ZSAyNTUxOS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdGhlIERIIGtleS1leGNoYW5nZSBwcm90b2NvbC4gSXQgY29tcHV0ZXMgYVxuICAgICAqIGtleSBiYXNlZCBvbiBhIHNlY3JldCBrZXkgd2l0aCBhIHB1YmxpYyBjb21wb25lbnQgKG9wcG9uZW50J3MgcHVibGljIGtleVxuICAgICAqIG9yIGN1cnZlIGJhc2UgcG9pbnQgaWYgbm90IGdpdmVuKSBieSB1c2luZyBzY2FsYXIgbXVsdGlwbGljYXRpb24uXG4gICAgICpcbiAgICAgKiBCZWZvcmUgbXVsdGlwbGljYXRpb24sIHNvbWUgYml0IG9wZXJhdGlvbnMgYXJlIGFwcGxpZWQgdG8gdGhlXG4gICAgICogcHJpdmF0ZSBrZXkgdG8gZW5zdXJlIGl0IGlzIGEgdmFsaWQgQ3VydmUyNTUxOSBzZWNyZXQga2V5LlxuICAgICAqIEl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHByaXZhdGVcbiAgICAgKiBrZXkgaXMgYSB1bmlmb3JtbHkgcmFuZG9tLCBzZWNyZXQgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gcHJpdmF0ZUNvbXBvbmVudCB7c3RyaW5nfVxuICAgICAqICAgICBQcml2YXRlIHBvaW50IGFzIGJ5dGUgc3RyaW5nIG9uIHRoZSBjdXJ2ZS5cbiAgICAgKiBAcGFyYW0gcHVibGljQ29tcG9uZW50IHtzdHJpbmd9XG4gICAgICogICAgIFB1YmxpYyBwb2ludCBhcyBieXRlIHN0cmluZyBvbiB0aGUgY3VydmUuIElmIG5vdCBnaXZlbiwgdGhlIGN1cnZlJ3NcbiAgICAgKiAgICAgYmFzZSBwb2ludCBpcyB1c2VkLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICogICAgIEtleSBwb2ludCBhcyBieXRlIHN0cmluZyByZXN1bHRpbmcgZnJvbSBzY2FsYXIgcHJvZHVjdC5cbiAgICAgKi9cbiAgICBucy5jb21wdXRlS2V5ID0gZnVuY3Rpb24ocHJpdmF0ZUNvbXBvbmVudCwgcHVibGljQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChwdWJsaWNDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdG9TdHJpbmcoY3VydmUyNTUuY3VydmUyNTUxOShfZnJvbVN0cmluZyhwcml2YXRlQ29tcG9uZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZnJvbVN0cmluZyhwdWJsaWNDb21wb25lbnQpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX3RvU3RyaW5nKGN1cnZlMjU1LmN1cnZlMjU1MTkoX2Zyb21TdHJpbmcocHJpdmF0ZUNvbXBvbmVudCkpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgcHVibGljIGtleSB0byBhIHByaXZhdGUga2V5IG9uIHRoZSBjdXJ2ZSAyNTUxOS5cbiAgICAgKlxuICAgICAqIEJlZm9yZSBtdWx0aXBsaWNhdGlvbiwgc29tZSBiaXQgb3BlcmF0aW9ucyBhcmUgYXBwbGllZCB0byB0aGVcbiAgICAgKiBwcml2YXRlIGtleSB0byBlbnN1cmUgaXQgaXMgYSB2YWxpZCBDdXJ2ZTI1NTE5IHNlY3JldCBrZXkuXG4gICAgICogSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcHJpdmF0ZVxuICAgICAqIGtleSBpcyBhIHVuaWZvcm1seSByYW5kb20sIHNlY3JldCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBwcml2YXRlS2V5IHtzdHJpbmd9XG4gICAgICogICAgIFByaXZhdGUgcG9pbnQgYXMgYnl0ZSBzdHJpbmcgb24gdGhlIGN1cnZlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICogICAgIFB1YmxpYyBrZXkgcG9pbnQgYXMgYnl0ZSBzdHJpbmcgcmVzdWx0aW5nIGZyb20gc2NhbGFyIHByb2R1Y3QuXG4gICAgICovXG4gICAgbnMucHVibGljS2V5ID0gZnVuY3Rpb24ocHJpdmF0ZUtleSkge1xuICAgICAgICByZXR1cm4gX3RvU3RyaW5nKGN1cnZlMjU1LmN1cnZlMjU1MTkoX2Zyb21TdHJpbmcocHJpdmF0ZUtleSkpKTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBuZXcgcmFuZG9tIHByaXZhdGUga2V5IG9mIDMyIGJ5dGVzIGxlbmd0aCAoMjU2IGJpdCkuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqICAgICBCeXRlIHN0cmluZyBjb250YWluaW5nIGEgbmV3IHJhbmRvbSBwcml2YXRlIGtleSBzZWVkLlxuICAgICAqL1xuICAgIG5zLmdlbmVyYXRlS2V5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjb3JlLmdlbmVyYXRlS2V5KHRydWUpO1xuICAgIH07XG5cbm1vZHVsZS5leHBvcnRzID0gbnM7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQGZpbGVPdmVydmlld1xuICogRGlnaXRhbCBzaWduYXR1cmUgc2NoZW1lIGJhc2VkIG9uIEN1cnZlMjU1MTkgKEVkMjU1MTkgb3IgRWREU0EpLlxuICovXG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIDIwMTIsIDIwMTQgUm9uIEdhcnJldFxuICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZ2EgTGltaXRlZFxuICogdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIEF1dGhvcnM6IEd1eSBLLiBLbG9zcywgUm9uIEdhcnJldFxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uXG4gKi9cblxudmFyIGNvcmUgPSByZXF1aXJlKCcuL2NvcmUnKTtcbnZhciBjdXJ2ZTI1NSA9IHJlcXVpcmUoJy4vY3VydmUyNTUnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBCaWdJbnRlZ2VyID0gcmVxdWlyZSgnanNibicpLkJpZ0ludGVnZXI7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbiAgICAvKipcbiAgICAgKiBAZXhwb3J0cyBqb2RpZDI1NTE5L2VkZHNhXG4gICAgICogRGlnaXRhbCBzaWduYXR1cmUgc2NoZW1lIGJhc2VkIG9uIEN1cnZlMjU1MTkgKEVkMjU1MTkgb3IgRWREU0EpLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogRGlnaXRhbCBzaWduYXR1cmUgc2NoZW1lIGJhc2VkIG9uIEN1cnZlMjU1MTkgKEVkMjU1MTkgb3IgRWREU0EpLlxuICAgICAqXG4gICAgICogPHA+XG4gICAgICogVGhpcyBjb2RlIGlzIGFkYXB0ZWQgZnJvbSBmYXN0LWRqYmVjLmpzLCBhIGZhc3RlciBidXQgbW9yZSBjb21wbGljYXRlZFxuICAgICAqIHZlcnNpb24gb2YgdGhlIEVkMjU1MTkgZW5jcnlwdGlvbiBzY2hlbWUgKGFzIGNvbXBhcmVkIHRvIGRqYmVjLmpzKS5cbiAgICAgKiBJdCB1c2VzIHR3byBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIGZvciBiaWcgaW50ZWdlcnM6IFRoZSBqc2JuXG4gICAgICogQmlnSW50ZWdlciBjbGFzcywgd2hpY2ggY2FuIHJlcHJlc2VudCBhcmJpdHJhcnktbGVuZ3RoIG51bWJlcnMsIGFuZCBhXG4gICAgICogc3BlY2lhbCBmaXhlZC1sZW5ndGggcmVwcmVzZW50YXRpb24gb3B0aW1pc2VkIGZvciAyNTYtYml0IGludGVnZXJzLlxuICAgICAqIFRoZSByZWFzb24gYm90aCBhcmUgbmVlZGVkIGlzIHRoYXQgdGhlIEVkMjU1MTkgYWxnb3JpdGhtIHJlcXVpcmVzIHNvbWVcbiAgICAgKiA1MTItYml0IG51bWJlcnMuPC9wPlxuICAgICovXG4gICAgdmFyIG5zID0ge307XG5cbiAgICBmdW5jdGlvbiBfYmkyNTUodmFsdWUpIHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIF9iaTI1NSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgX2JpMjU1KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIF9aRVJPO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjID0gdmFsdWUuY29uc3RydWN0b3I7XG4gICAgICAgIGlmICgoYyA9PT0gQXJyYXkgfHwgYyA9PT0gVWludDE2QXJyYXkgfHwgYyA9PT0gVWludDMyQXJyYXkpICYmICh2YWx1ZS5sZW5ndGggPT09IDE2KSkge1xuICAgICAgICAgICAgdGhpcy5uID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoKGMgPT09IEFycmF5KSAmJiAodmFsdWUubGVuZ3RoID09PSAzMikpIHtcbiAgICAgICAgICAgIHRoaXMubiA9IF9ieXRlczJiaTI1NSh2YWx1ZSkubjtcbiAgICAgICAgfSBlbHNlIGlmIChjID09PSBTdHJpbmcpIHtcbiAgICAgICAgICAgIHRoaXMubiA9IHV0aWxzLmhleERlY29kZSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gTnVtYmVyKSB7XG4gICAgICAgICAgICB0aGlzLm4gPSBbdmFsdWUgJiAweGZmZmYsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPj4gMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgX2JpMjU1KSB7XG4gICAgICAgICAgICB0aGlzLm4gPSB2YWx1ZS5uLnNsaWNlKDApOyAvLyBDb3B5IGNvbnN0cnVjdG9yXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBcIkJhZCBhcmd1bWVudCBmb3IgYmlnbnVtOiBcIiArIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICBfYmkyNTUucHJvdG90eXBlID0ge1xuICAgICAgICAndG9TdHJpbmcnIDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbHMuaGV4RW5jb2RlKHRoaXMubik7XG4gICAgICAgIH0sXG4gICAgICAgICd0b1NvdXJjZScgOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAnXycgKyB1dGlscy5oZXhFbmNvZGUodGhpcy5uKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3BsdXMnIDogZnVuY3Rpb24objEpIHtcbiAgICAgICAgICAgIHJldHVybiBfYmkyNTUoY29yZS5iaWdpbnRhZGQodGhpcy5uLCBuMS5uKSk7XG4gICAgICAgIH0sXG4gICAgICAgICdtaW51cycgOiBmdW5jdGlvbihuMSkge1xuICAgICAgICAgICAgcmV0dXJuIF9iaTI1NShjb3JlLmJpZ2ludHN1Yih0aGlzLm4sIG4xLm4pKS5tb2RxKCk7XG4gICAgICAgIH0sXG4gICAgICAgICd0aW1lcycgOiBmdW5jdGlvbihuMSkge1xuICAgICAgICAgICAgcmV0dXJuIF9iaTI1NShjb3JlLm11bG1vZHAodGhpcy5uLCBuMS5uKSk7XG4gICAgICAgIH0sXG4gICAgICAgICdkaXZpZGUnIDogZnVuY3Rpb24objEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbWVzKG4xLmludigpKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3NxcicgOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBfYmkyNTUoY29yZS5zcXJtb2RwKHRoaXMubikpO1xuICAgICAgICB9LFxuICAgICAgICAnY21wJyA6IGZ1bmN0aW9uKG4xKSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5iaWdpbnRjbXAodGhpcy5uLCBuMS5uKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ2VxdWFscycgOiBmdW5jdGlvbihuMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY21wKG4xKSA9PT0gMDtcbiAgICAgICAgfSxcbiAgICAgICAgJ2lzT2RkJyA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLm5bMF0gJiAxKSA9PT0gMTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3NoaWZ0TGVmdCcgOiBmdW5jdGlvbihjbnQpIHtcbiAgICAgICAgICAgIF9zaGlmdEwodGhpcy5uLCBjbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgICdzaGlmdFJpZ2h0JyA6IGZ1bmN0aW9uKGNudCkge1xuICAgICAgICAgICAgX3NoaWZ0Uih0aGlzLm4sIGNudCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgJ2ludicgOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBfYmkyNTUoY29yZS5pbnZtb2RwKHRoaXMubikpO1xuICAgICAgICB9LFxuICAgICAgICAncG93JyA6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBfYmkyNTUoX3Bvdyh0aGlzLm4sIGUubikpO1xuICAgICAgICB9LFxuICAgICAgICAnbW9kcScgOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBfbW9kcSh0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ2J5dGVzJyA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9iaTI1NV9ieXRlcyh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfc2hpZnRMKG4sIGNudCkge1xuICAgICAgICB2YXIgbGFzdGNhcnJ5ID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2FycnkgPSBuW2ldID4+ICgxNiAtIGNudCk7XG4gICAgICAgICAgICBuW2ldID0gKG5baV0gPDwgY250KSAmIDB4ZmZmZiB8IGxhc3RjYXJyeTtcbiAgICAgICAgICAgIGxhc3RjYXJyeSA9IGNhcnJ5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9zaGlmdFIobiwgY250KSB7XG4gICAgICAgIHZhciBsYXN0Y2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMTU7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB2YXIgY2FycnkgPSBuW2ldIDw8ICgxNiAtIGNudCkgJiAweGZmZmY7XG4gICAgICAgICAgICBuW2ldID0gKG5baV0gPj4gY250KSB8IGxhc3RjYXJyeTtcbiAgICAgICAgICAgIGxhc3RjYXJyeSA9IGNhcnJ5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9iaTI1NV9ieXRlcyhuKSB7XG4gICAgICAgIG4gPSBfYmkyNTUobik7IC8vIE1ha2UgYSBjb3B5IGJlY2F1c2Ugc2hpZnRSaWdodCBpcyBkZXN0cnVjdGl2ZVxuICAgICAgICB2YXIgYSA9IG5ldyBBcnJheSgzMik7XG4gICAgICAgIGZvciAodmFyIGkgPSAzMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGFbaV0gPSBuLm5bMF0gJiAweGZmO1xuICAgICAgICAgICAgbi5zaGlmdFJpZ2h0KDgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9ieXRlczJiaTI1NShhKSB7XG4gICAgICAgIHZhciBuID0gX1pFUk87XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKykge1xuICAgICAgICAgICAgbi5zaGlmdExlZnQoOCk7XG4gICAgICAgICAgICBuID0gbi5wbHVzKF9iaTI1NShhW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3BvdyhuLCBlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjb3JlLk9ORSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY29yZS5nZXRiaXQoZSwgaSkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JlLm11bG1vZHAocmVzdWx0LCBuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG4gPSBjb3JlLnNxcm1vZHAobik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgX1pFUk8gPSBfYmkyNTUoMCk7XG4gICAgdmFyIF9PTkUgPSBfYmkyNTUoMSk7XG4gICAgdmFyIF9UV08gPSBfYmkyNTUoMik7XG4gICAgLy8gVGhpcyBpcyB0aGUgY29yZSBwcmltZS5cbiAgICB2YXIgX1EgPSBfYmkyNTUoWzB4ZmZmZiAtIDE4LCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmLCAweGZmZmYsIDB4ZmZmZixcbiAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZiwgMHhmZmZmLCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmLCAweGZmZmYsIDB4ZmZmZixcbiAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZiwgMHhmZmZmLCAweDdmZmZdKTtcblxuICAgIGZ1bmN0aW9uIF9tb2RxKG4pIHtcbiAgICAgICAgY29yZS5yZWR1Y2Uobi5uKTtcbiAgICAgICAgaWYgKG4uY21wKF9RKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gX21vZHEobi5taW51cyhfUSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuLmNtcChfWkVSTykgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gX21vZHEobi5wbHVzKF9RKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIF9SRUNPVkVSWV9FWFBPTkVOVCA9IF9RLnBsdXMoX2JpMjU1KDMpKS5kaXZpZGUoX2JpMjU1KDgpKTtcbiAgICB2YXIgX1JFQ09WRVJZX0VYUE9ORU5UID0gX2JpMjU1KCcwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlJyk7XG4gICAgLy8gX0QgPSBfUS5taW51cyhfYmkyNTUoMTIxNjY1KSkuZGl2aWRlKF9iaTI1NSgxMjE2NjYpKTtcbiAgICB2YXIgX0QgPSBfYmkyNTUoJzUyMDM2Y2VlMmI2ZmZlNzM4Y2M3NDA3OTc3NzllODk4MDA3MDBhNGQ0MTQxZDhhYjc1ZWI0ZGNhMTM1OTc4YTMnKTtcbiAgICAvLyBfSSA9IF9UV08ucG93KF9RLm1pbnVzKF9PTkUpLmRpdmlkZShfYmkyNTUoNCkpKTtcbiAgICB2YXIgX0kgPSBfYmkyNTUoJzJiODMyNDgwNGZjMWRmMGIyYjRkMDA5OTNkZmJkN2E3MmY0MzE4MDZhZDJmZTQ3OGM0ZWUxYjI3NGEwZWEwYjAnKTtcbiAgICAvLyBfTCA9IF9UV08ucG93KF9iaTI1NSgyNTIpKS5wbHVzKF9iaTI1NSgnMTRkZWY5ZGVhMmY3OWNkNjU4MTI2MzFhNWNmNWQzZWQnKSk7XG4gICAgdmFyIF9MID0gX2JpMjU1KCcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0ZGVmOWRlYTJmNzljZDY1ODEyNjMxYTVjZjVkM2VkJyk7XG4gICAgdmFyIF9MX0JJID0gX2JpKCcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0ZGVmOWRlYTJmNzljZDY1ODEyNjMxYTVjZjVkM2VkJywgMTYpO1xuXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGZ1bmN0aW9uIF9pc29uY3VydmUocCkge1xuICAgICAgICB2YXIgeCA9IHBbMF07XG4gICAgICAgIHZhciB5ID0gcFsxXTtcbiAgICAgICAgdmFyIHhzcXIgPSB4LnNxcigpO1xuICAgICAgICB2YXIgeXNxciA9IHkuc3FyKCk7XG4gICAgICAgIHZhciB2ID0gX0QudGltZXMoeHNxcikudGltZXMoeXNxcik7XG4gICAgICAgIHJldHVybiB5c3FyLm1pbnVzKHhzcXIpLm1pbnVzKF9PTkUpLm1pbnVzKHYpLm1vZHEoKS5lcXVhbHMoX1pFUk8pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF94cmVjb3Zlcih5KSB7XG4gICAgICAgIHZhciB5c3F1YXJlZCA9IHkuc3FyKCk7XG4gICAgICAgIHZhciB4eCA9IHlzcXVhcmVkLm1pbnVzKF9PTkUpLmRpdmlkZShfT05FLnBsdXMoX0QudGltZXMoeXNxdWFyZWQpKSk7XG4gICAgICAgIHZhciB4ID0geHgucG93KF9SRUNPVkVSWV9FWFBPTkVOVCk7XG4gICAgICAgIGlmICghKHgudGltZXMoeCkubWludXMoeHgpLmVxdWFscyhfWkVSTykpKSB7XG4gICAgICAgICAgICB4ID0geC50aW1lcyhfSSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHguaXNPZGQoKSkge1xuICAgICAgICAgICAgeCA9IF9RLm1pbnVzKHgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF94X3B0X2FkZChwdDEsIHB0Mikge1xuICAgICAgICB2YXIgeDEgPSBwdDFbMF07XG4gICAgICAgIHZhciB5MSA9IHB0MVsxXTtcbiAgICAgICAgdmFyIHoxID0gcHQxWzJdO1xuICAgICAgICB2YXIgdDEgPSBwdDFbM107XG4gICAgICAgIHZhciB4MiA9IHB0MlswXTtcbiAgICAgICAgdmFyIHkyID0gcHQyWzFdO1xuICAgICAgICB2YXIgejIgPSBwdDJbMl07XG4gICAgICAgIHZhciB0MiA9IHB0MlszXTtcbiAgICAgICAgdmFyIEEgPSB5MS5taW51cyh4MSkudGltZXMoeTIucGx1cyh4MikpO1xuICAgICAgICB2YXIgQiA9IHkxLnBsdXMoeDEpLnRpbWVzKHkyLm1pbnVzKHgyKSk7XG4gICAgICAgIHZhciBDID0gejEudGltZXMoX1RXTykudGltZXModDIpO1xuICAgICAgICB2YXIgRCA9IHQxLnRpbWVzKF9UV08pLnRpbWVzKHoyKTtcbiAgICAgICAgdmFyIEUgPSBELnBsdXMoQyk7XG4gICAgICAgIHZhciBGID0gQi5taW51cyhBKTtcbiAgICAgICAgdmFyIEcgPSBCLnBsdXMoQSk7XG4gICAgICAgIHZhciBIID0gRC5taW51cyhDKTtcbiAgICAgICAgcmV0dXJuIFtFLnRpbWVzKEYpLCBHLnRpbWVzKEgpLCBGLnRpbWVzKEcpLCBFLnRpbWVzKEgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfeHB0X2RvdWJsZShwdDEpIHtcbiAgICAgICAgdmFyIHgxID0gcHQxWzBdO1xuICAgICAgICB2YXIgeTEgPSBwdDFbMV07XG4gICAgICAgIHZhciB6MSA9IHB0MVsyXTtcbiAgICAgICAgdmFyIEEgPSB4MS50aW1lcyh4MSk7XG4gICAgICAgIHZhciBCID0geTEudGltZXMoeTEpO1xuICAgICAgICB2YXIgQyA9IF9UV08udGltZXMoejEpLnRpbWVzKHoxKTtcbiAgICAgICAgdmFyIEQgPSBfUS5taW51cyhBKTtcbiAgICAgICAgdmFyIEogPSB4MS5wbHVzKHkxKTtcbiAgICAgICAgdmFyIEUgPSBKLnRpbWVzKEopLm1pbnVzKEEpLm1pbnVzKEIpO1xuICAgICAgICB2YXIgRyA9IEQucGx1cyhCKTtcbiAgICAgICAgdmFyIEYgPSBHLm1pbnVzKEMpO1xuICAgICAgICB2YXIgSCA9IEQubWludXMoQik7XG4gICAgICAgIHJldHVybiBbRS50aW1lcyhGKSwgRy50aW1lcyhIKSwgRi50aW1lcyhHKSwgRS50aW1lcyhIKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3hwdF9tdWx0KHB0LCBuKSB7XG4gICAgICAgIGlmIChuLmVxdWFscyhfWkVSTykpIHtcbiAgICAgICAgICAgIHJldHVybiBbX1pFUk8sIF9PTkUsIF9PTkUsIF9aRVJPXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb2RkID0gbi5pc09kZCgpO1xuICAgICAgICBuLnNoaWZ0UmlnaHQoMSk7XG4gICAgICAgIHZhciB2YWx1ZSA9IF94cHRfZG91YmxlKF94cHRfbXVsdChwdCwgbikpO1xuICAgICAgICByZXR1cm4gb2RkID8gX3hfcHRfYWRkKHZhbHVlLCBwdCkgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcHRfeGZvcm0ocHQpIHtcbiAgICAgICAgdmFyIHggPSBwdFswXTtcbiAgICAgICAgdmFyIHkgPSBwdFsxXTtcbiAgICAgICAgcmV0dXJuIFt4LCB5LCBfT05FLCB4LnRpbWVzKHkpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcHRfdW54Zm9ybShwdCkge1xuICAgICAgICB2YXIgeCA9IHB0WzBdO1xuICAgICAgICB2YXIgeSA9IHB0WzFdO1xuICAgICAgICB2YXIgeiA9IHB0WzJdO1xuICAgICAgICB2YXIgaW52eiA9IHouaW52KCk7XG4gICAgICAgIHJldHVybiBbeC50aW1lcyhpbnZ6KSwgeS50aW1lcyhpbnZ6KV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3NjYWxhcm11bHQocHQsIG4pIHtcbiAgICAgICAgcmV0dXJuIF9wdF91bnhmb3JtKF94cHRfbXVsdChfcHRfeGZvcm0ocHQpLCBuKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2J5dGVzZ2V0Yml0KGJ5dGVzLCBuKSB7XG4gICAgICAgIHJldHVybiAoYnl0ZXNbYnl0ZXMubGVuZ3RoIC0gKG4gPj4+IDMpIC0gMV0gPj4gKG4gJiA3KSkgJiAxO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF94cHRfbXVsdF9ieXRlcyhwdCwgYnl0ZXMpIHtcbiAgICAgICAgdmFyIHIgPSBbX1pFUk8sIF9PTkUsIF9PTkUsIF9aRVJPXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IChieXRlcy5sZW5ndGggPDwgMykgLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgciA9IF94cHRfZG91YmxlKHIpO1xuICAgICAgICAgICAgaWYgKF9ieXRlc2dldGJpdChieXRlcywgaSkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByID0gX3hfcHRfYWRkKHIsIHB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfc2NhbGFybXVsdEJ5dGVzKHB0LCBieXRlcykge1xuICAgICAgICByZXR1cm4gX3B0X3VueGZvcm0oX3hwdF9tdWx0X2J5dGVzKF9wdF94Zm9ybShwdCksIGJ5dGVzKSk7XG4gICAgfVxuXG4gICAgdmFyIF9ieSA9IF9iaTI1NSg0KS5kaXZpZGUoX2JpMjU1KDUpKTtcbiAgICB2YXIgX2J4ID0gX3hyZWNvdmVyKF9ieSk7XG4gICAgdmFyIF9icCA9IFtfYngsIF9ieV07XG5cbiAgICBmdW5jdGlvbiBfZW5jb2RlaW50KG4pIHtcbiAgICAgICAgcmV0dXJuIG4uYnl0ZXMoMzIpLnJldmVyc2UoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2RlY29kZWludChiKSB7XG4gICAgICAgIHJldHVybiBfYmkyNTUoYi5zbGljZSgwKS5yZXZlcnNlKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbmNvZGVwb2ludChwKSB7XG4gICAgICAgIHZhciB2ID0gX2VuY29kZWludChwWzFdKTtcbiAgICAgICAgaWYgKHBbMF0uaXNPZGQoKSkge1xuICAgICAgICAgICAgdlszMV0gfD0gMHg4MDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZGVjb2RlcG9pbnQodikge1xuICAgICAgICB2ID0gdi5zbGljZSgwKTtcbiAgICAgICAgdmFyIHNpZ25iaXQgPSB2WzMxXSA+PiA3O1xuICAgICAgICB2WzMxXSAmPSAxMjc7XG4gICAgICAgIHZhciB5ID0gX2RlY29kZWludCh2KTtcbiAgICAgICAgdmFyIHggPSBfeHJlY292ZXIoeSk7XG4gICAgICAgIGlmICgoeC5uWzBdICYgMSkgIT09IHNpZ25iaXQpIHtcbiAgICAgICAgICAgIHggPSBfUS5taW51cyh4KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcCA9IFt4LCB5XTtcbiAgICAgICAgaWYgKCFfaXNvbmN1cnZlKHApKSB7XG4gICAgICAgICAgICB0aHJvdyAoJ1BvaW50IGlzIG5vdCBvbiBjdXJ2ZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvKipcbiAgICAgKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIHN1aXRhYmxlIEJpZ0ludGVnZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKiAgICAgVGhlIHZhbHVlIGZvciB0aGUgYmlnIGludGVnZXIuXG4gICAgICogQHBhcmFtIGJhc2Uge2ludGVnZXJ9XG4gICAgICogICAgIEJhc2Ugb2YgdGhlIGNvbnZlcnNpb24gb2YgZWxlbWVudHMgaW4gYGB2YWx1ZWBgLlxuICAgICAqIEByZXR1cm5zXG4gICAgICogICAgIEEgQmlnSW50ZWdlciBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gX2JpKHZhbHVlLCBiYXNlKSB7XG4gICAgICAgIGlmIChiYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChiYXNlID09PSAyNTYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2JpKHV0aWxzLnN0cmluZzJieXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKHZhbHVlLCBiYXNlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIodmFsdWUsIDEwKTtcbiAgICAgICAgfSBlbHNlIGlmICgodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkgfHwgKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSlcbiAgICAgICAgICB8fCBCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIodmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcih2YWx1ZS50b1N0cmluZygpLCAxMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBcIkNhbid0IGNvbnZlcnQgXCIgKyB2YWx1ZSArIFwiIHRvIEJpZ0ludGVnZXJcIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9iaTJieXRlcyhuLCBjbnQpIHtcbiAgICAgICAgaWYgKGNudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjbnQgPSAobi5iaXRMZW5ndGgoKSArIDcpID4+PiAzO1xuICAgICAgICB9XG4gICAgICAgIHZhciBieXRlcyA9IG5ldyBBcnJheShjbnQpO1xuICAgICAgICBmb3IgKHZhciBpID0gY250IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGJ5dGVzW2ldID0gblswXSAmIDI1NTsgLy8gbi5hbmQoMHhmZik7XG4gICAgICAgICAgICBuID0gbi5zaGlmdFJpZ2h0KDgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBieXRlcztcbiAgICB9XG5cbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5ieXRlcyA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIF9iaTJieXRlcyh0aGlzLCBuKTtcbiAgICB9O1xuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBmdW5jdGlvbiBfYnl0ZWhhc2gocykge1xuICAgICAgICB2YXIgc2hhID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIF9iaTJieXRlcyhfYmkoc2hhKSwgNjQpLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfc3RyaW5naGFzaChzKSB7XG4gICAgICAgIHZhciBzaGEgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHMpLmRpZ2VzdCgpO1xuICAgICAgICByZXR1cm4gX21hcChfY2hyLCBfYmkyYnl0ZXMoX2JpKHNoYSksIDY0KSkuam9pbignJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ludGhhc2gocykge1xuICAgICAgICAvLyBOZWVkIGEgbGVhZGluZyAwIHRvIHByZXZlbnQgc2lnbiBleHRlbnNpb25cbiAgICAgICAgcmV0dXJuIF9iaShbMF0uY29uY2F0KF9ieXRlaGFzaChzKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pbnRoYXNoX2xvKHMpIHtcbiAgICAgICAgcmV0dXJuIF9iaTI1NShfYnl0ZWhhc2gocykuc2xpY2UoMzIsIDY0KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ludGhhc2hfbW9kX2wocykge1xuICAgICAgICByZXR1cm4gX2ludGhhc2gocykubW9kKF9MX0JJKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZ2V0X2Eoc2spIHtcbiAgICAgICAgdmFyIGEgPSBfaW50aGFzaF9sbyhzayk7XG4gICAgICAgIGEublswXSAmPSAweGZmZjg7XG4gICAgICAgIGEublsxNV0gJj0gMHgzZmZmO1xuICAgICAgICBhLm5bMTVdIHw9IDB4NDAwMDtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3B1YmxpY2tleShzaykge1xuICAgICAgICByZXR1cm4gX2VuY29kZXBvaW50KF9zY2FsYXJtdWx0KF9icCwgX2dldF9hKHNrKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoZiwgbCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KGwubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHRbaV0gPSBmKGxbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2NocihuKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vcmQoYykge1xuICAgICAgICByZXR1cm4gYy5jaGFyQ29kZUF0KDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9wdF9hZGQocDEsIHAyKSB7XG4gICAgICAgIHJldHVybiBfcHRfdW54Zm9ybShfeF9wdF9hZGQoX3B0X3hmb3JtKHAxKSwgX3B0X3hmb3JtKHAyKSkpO1xuICAgIH1cblxuXG4gICAgLy8gRXhwb3J0cyBmb3IgdGhlIEFQSS5cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIGEgcG9pbnQgaXMgb24gdGhlIGN1cnZlLlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHBvaW50IHtzdHJpbmd9XG4gICAgICogICAgIFRoZSBwb2ludCB0byBjaGVjayBmb3IgaW4gYSBieXRlIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKiAgICAgdHJ1ZSBpZiB0aGUgcG9pbnQgaXMgb24gdGhlIGN1cnZlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgbnMuaXNPbkN1cnZlID0gZnVuY3Rpb24ocG9pbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIF9pc29uY3VydmUoX2RlY29kZXBvaW50KHV0aWxzLnN0cmluZzJieXRlcyhwb2ludCkpKTtcbiAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICBpZiAoZSA9PT0gJ1BvaW50IGlzIG5vdCBvbiBjdXJ2ZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIEVkRFNBIHB1YmxpYyBrZXkuXG4gICAgICpcbiAgICAgKiA8cD5Ob3RlOiBTZWVkcyBzaG91bGQgYmUgYSBieXRlIHN0cmluZywgbm90IGEgdW5pY29kZSBzdHJpbmcgY29udGFpbmluZ1xuICAgICAqIG11bHRpLWJ5dGUgY2hhcmFjdGVycy48L3A+XG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ga2V5U2VlZCB7c3RyaW5nfVxuICAgICAqICAgICBQcml2YXRlIGtleSBzZWVkIGluIHRoZSBmb3JtIG9mIGEgYnl0ZSBzdHJpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgICAgUHVibGljIGtleSBhcyBieXRlIHN0cmluZyBjb21wdXRlZCBmcm9tIHRoZSBwcml2YXRlIGtleSBzZWVkXG4gICAgICogICAgICgzMiBieXRlcykuXG4gICAgICovXG4gICAgbnMucHVibGljS2V5ID0gZnVuY3Rpb24oa2V5U2VlZCkge1xuICAgICAgICByZXR1cm4gdXRpbHMuYnl0ZXMyc3RyaW5nKF9wdWJsaWNrZXkoa2V5U2VlZCkpO1xuICAgIH07XG5cblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIGFuIEVkRFNBIHNpZ25hdHVyZSBvZiBhIG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiA8cD5Ob3Rlczo8L3A+XG4gICAgICpcbiAgICAgKiA8dWw+XG4gICAgICogICA8bGk+VW5pY29kZSBtZXNzYWdlcyBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byBhIGJ5dGUgcmVwcmVzZW50YXRpb25cbiAgICAgKiAgIChlLiBnLiBVVEYtOCkuPC9saT5cbiAgICAgKiAgIDxsaT5JZiBgcHVibGljS2V5YCBpcyBnaXZlbiwgYW5kIGl0IGlzICpub3QqIGEgcG9pbnQgb2YgdGhlIGN1cnZlLFxuICAgICAqICAgdGhlIHNpZ25hdHVyZSB3aWxsIGJlIGZhdWx0eSwgYnV0IG5vIGVycm9yIHdpbGwgYmUgdGhyb3duLjwvbGk+XG4gICAgICogPC91bD5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBtZXNzYWdlIHtzdHJpbmd9XG4gICAgICogICAgIE1lc3NhZ2UgaW4gdGhlIGZvcm0gb2YgYSBieXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0ga2V5U2VlZCB7c3RyaW5nfVxuICAgICAqICAgICBQcml2YXRlIGtleSBzZWVkIGluIHRoZSBmb3JtIG9mIGEgYnl0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIHB1YmxpY0tleSB7c3RyaW5nfVxuICAgICAqICAgICBQdWJsaWMga2V5IGFzIGJ5dGUgc3RyaW5nIChpZiBub3QgcHJlc2VudCwgaXQgd2lsbCBiZSBjb21wdXRlZCBmcm9tXG4gICAgICogICAgIHRoZSBwcml2YXRlIGtleSBzZWVkKS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqICAgICBEZXRhY2hlZCBtZXNzYWdlIHNpZ25hdHVyZSBpbiB0aGUgZm9ybSBvZiBhIGJ5dGUgc3RyaW5nICg2NCBieXRlcykuXG4gICAgICovXG4gICAgbnMuc2lnbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGtleVNlZWQsIHB1YmxpY0tleSkge1xuICAgICAgICBpZiAocHVibGljS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHB1YmxpY0tleSA9IF9wdWJsaWNrZXkoa2V5U2VlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdWJsaWNLZXkgPSB1dGlscy5zdHJpbmcyYnl0ZXMocHVibGljS2V5KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYSA9IF9iaShfZ2V0X2Eoa2V5U2VlZCkudG9TdHJpbmcoKSwgMTYpO1xuICAgICAgICB2YXIgaHMgPSBfc3RyaW5naGFzaChrZXlTZWVkKTtcbiAgICAgICAgdmFyIHIgPSBfYnl0ZWhhc2goaHMuc2xpY2UoMzIsIDY0KSArIG1lc3NhZ2UpO1xuICAgICAgICB2YXIgcnAgPSBfc2NhbGFybXVsdEJ5dGVzKF9icCwgcik7XG4gICAgICAgIHZhciBlcnAgPSBfZW5jb2RlcG9pbnQocnApO1xuICAgICAgICByID0gX2JpKHIpLm1vZChfYmkoMSwgMTApLnNoaWZ0TGVmdCg1MTIpKTtcbiAgICAgICAgdmFyIHMgPSBfbWFwKF9jaHIsIGVycCkuam9pbignJykgKyBfbWFwKF9jaHIsIHB1YmxpY0tleSkuam9pbignJykgKyBtZXNzYWdlO1xuICAgICAgICBzID0gX2ludGhhc2hfbW9kX2wocykubXVsdGlwbHkoYSkuYWRkKHIpLm1vZChfTF9CSSk7XG4gICAgICAgIHJldHVybiB1dGlscy5ieXRlczJzdHJpbmcoZXJwLmNvbmNhdChfZW5jb2RlaW50KHMpKSk7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogVmVyaWZpZXMgYW4gRWREU0Egc2lnbmF0dXJlIG9mIGEgbWVzc2FnZSB3aXRoIHRoZSBwdWJsaWMga2V5LlxuICAgICAqXG4gICAgICogPHA+Tm90ZTogVW5pY29kZSBtZXNzYWdlcyBuZWVkIHRvIGJlIGNvbnZlcnRlZCB0byBhIGJ5dGUgcmVwcmVzZW50YXRpb25cbiAgICAgKiAoZS4gZy4gVVRGLTgpLjwvcD5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBzaWduYXR1cmUge3N0cmluZ31cbiAgICAgKiAgICAgTWVzc2FnZSBzaWduYXR1cmUgaW4gdGhlIGZvcm0gb2YgYSBieXRlIHN0cmluZy4gQ2FuIGJlIGRldGFjaGVkXG4gICAgICogICAgICg2NCBieXRlcyksIG9yIGF0dGFjaGVkIHRvIGJlIHNsaWNlZCBvZmYuXG4gICAgICogQHBhcmFtIG1lc3NhZ2Uge3N0cmluZ31cbiAgICAgKiAgICAgTWVzc2FnZSBpbiB0aGUgZm9ybSBvZiBhIGJ5dGUgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBwdWJsaWNLZXkge3N0cmluZ31cbiAgICAgKiAgICAgUHVibGljIGtleSBhcyBieXRlIHN0cmluZyAoaWYgbm90IHByZXNlbnQsIGl0IHdpbGwgYmUgY29tcHV0ZWQgZnJvbVxuICAgICAqICAgICB0aGUgcHJpdmF0ZSBrZXkgc2VlZCkuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogICAgIHRydWUsIGlmIHRoZSBzaWduYXR1cmUgdmVyaWZpZXMuXG4gICAgICovXG4gICAgbnMudmVyaWZ5ID0gZnVuY3Rpb24oc2lnbmF0dXJlLCBtZXNzYWdlLCBwdWJsaWNLZXkpIHtcbiAgICAgICAgc2lnbmF0dXJlID0gdXRpbHMuc3RyaW5nMmJ5dGVzKHNpZ25hdHVyZS5zbGljZSgwLCA2NCkpO1xuICAgICAgICBwdWJsaWNLZXkgPSB1dGlscy5zdHJpbmcyYnl0ZXMocHVibGljS2V5KTtcbiAgICAgICAgdmFyIHJwZSA9IHNpZ25hdHVyZS5zbGljZSgwLCAzMik7XG4gICAgICAgIHZhciBycCA9IF9kZWNvZGVwb2ludChycGUpO1xuICAgICAgICB2YXIgYSA9IF9kZWNvZGVwb2ludChwdWJsaWNLZXkpO1xuICAgICAgICB2YXIgcyA9IF9kZWNvZGVpbnQoc2lnbmF0dXJlLnNsaWNlKDMyLCA2NCkpO1xuICAgICAgICB2YXIgaCA9IF9pbnRoYXNoKHV0aWxzLmJ5dGVzMnN0cmluZyhycGUuY29uY2F0KHB1YmxpY0tleSkpICsgbWVzc2FnZSk7XG4gICAgICAgIHZhciB2MSA9IF9zY2FsYXJtdWx0KF9icCwgcyk7XG4gICAgICAgIHZhciB2YWx1ZSA9IF9zY2FsYXJtdWx0Qnl0ZXMoYSwgX2JpMmJ5dGVzKGgpKTtcbiAgICAgICAgdmFyIHYyID0gX3B0X2FkZChycCwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdjFbMF0uZXF1YWxzKHYyWzBdKSAmJiB2MVsxXS5lcXVhbHModjJbMV0pO1xuICAgIH07XG5cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIG5ldyByYW5kb20gcHJpdmF0ZSBrZXkgc2VlZCBvZiAzMiBieXRlcyBsZW5ndGggKDI1NiBiaXQpLlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgICAgQnl0ZSBzdHJpbmcgY29udGFpbmluZyBhIG5ldyByYW5kb20gcHJpdmF0ZSBrZXkgc2VlZC5cbiAgICAgKi9cbiAgICBucy5nZW5lcmF0ZUtleVNlZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNvcmUuZ2VuZXJhdGVLZXkoZmFsc2UpO1xuICAgIH07XG5cbm1vZHVsZS5leHBvcnRzID0gbnM7XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQGZpbGVPdmVydmlld1xuICogQSBjb2xsZWN0aW9uIG9mIGdlbmVyYWwgdXRpbGl0eSBmdW5jdGlvbnMuLlxuICovXG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIDIwMTIsIDIwMTQgUm9uIEdhcnJldFxuICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDEzLCAyMDE0IE1pY2hlbGUgQmluaVxuICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZ2EgTGltaXRlZFxuICogdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIEF1dGhvcnM6IEd1eSBLLiBLbG9zcywgTWljaGVsZSBCaW5pLCBSb24gR2FycmV0XG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS5cbiAqL1xuXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4gICAgLyoqXG4gICAgICogQGV4cG9ydHMgam9kaWQyNTUxOS91dGlsc1xuICAgICAqIEEgY29sbGVjdGlvbiBvZiBnZW5lcmFsIHV0aWxpdHkgZnVuY3Rpb25zLi5cbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIEEgY29sbGVjdGlvbiBvZiBnZW5lcmFsIHV0aWxpdHkgZnVuY3Rpb25zLi5cbiAgICAgKi9cbiAgICB2YXIgbnMgPSB7fTtcblxuICAgIHZhciBfSEVYQ0hBUlMgPSBcIjAxMjM0NTY3ODlhYmNkZWZcIjtcblxuICAgIGZ1bmN0aW9uIF9oZXhlbmNvZGUodmVjdG9yKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHZlY3Rvci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdmVjdG9yW2ldO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goX0hFWENIQVJTLnN1YnN0cigodmFsdWUgPj4+IDEyKSAmIDB4MGYsIDEpKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKF9IRVhDSEFSUy5zdWJzdHIoKHZhbHVlID4+PiA4KSAmIDB4MGYsIDEpKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKF9IRVhDSEFSUy5zdWJzdHIoKHZhbHVlID4+PiA0KSAmIDB4MGYsIDEpKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKF9IRVhDSEFSUy5zdWJzdHIodmFsdWUgJiAweDBmLCAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaGV4ZGVjb2RlKHZlY3Rvcikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuICAgICAgICBmb3IgKHZhciBpID0gdmVjdG9yLmxlbmd0aCAtIDEsIGwgPSAwOyBpID49IDA7IGkgLT0gNCkge1xuICAgICAgICAgICAgcmVzdWx0W2xdID0gKF9IRVhDSEFSUy5pbmRleE9mKHZlY3Rvci5jaGFyQXQoaSkpKVxuICAgICAgICAgICAgICAgICAgICAgIHwgKF9IRVhDSEFSUy5pbmRleE9mKHZlY3Rvci5jaGFyQXQoaSAtIDEpKSA8PCA0KVxuICAgICAgICAgICAgICAgICAgICAgIHwgKF9IRVhDSEFSUy5pbmRleE9mKHZlY3Rvci5jaGFyQXQoaSAtIDIpKSA8PCA4KVxuICAgICAgICAgICAgICAgICAgICAgIHwgKF9IRVhDSEFSUy5pbmRleE9mKHZlY3Rvci5jaGFyQXQoaSAtIDMpKSA8PCAxMik7XG4gICAgICAgICAgICBsKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgX0JBU0UzMkNIQVJTID0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejIzNDU2N1wiO1xuXG4gICAgdmFyIF9CQVNFMzJWQUxVRVMgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX0JBU0UzMkNIQVJTLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHRbX0JBU0UzMkNIQVJTLmNoYXJBdChpKV0gPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkoKTtcblxuICAgIGZ1bmN0aW9uIF9iYXNlMzJlbmNvZGUobikge1xuICAgICAgICB2YXIgYztcbiAgICAgICAgdmFyIHIgPSBcIlwiO1xuICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMjU1OyBjICs9IDUpIHtcbiAgICAgICAgICAgIHIgPSBfQkFTRTMyQ0hBUlMuc3Vic3RyKGNvcmUuZ2V0Yml0KG4sIGMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChjb3JlLmdldGJpdChuLCBjICsgMSkgPDwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGNvcmUuZ2V0Yml0KG4sIGMgKyAyKSA8PCAyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoY29yZS5nZXRiaXQobiwgYyArIDMpIDw8IDMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChjb3JlLmdldGJpdChuLCBjICsgNCkgPDwgNCksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Jhc2UzMmRlY29kZShuKSB7XG4gICAgICAgIHZhciBjID0gMDtcbiAgICAgICAgdmFyIHIgPSBjb3JlLlpFUk8oKTtcbiAgICAgICAgdmFyIGwgPSBuLmxlbmd0aDtcbiAgICAgICAgZm9yIChjID0gMDsgKGwgPiAwKSAmJiAoYyA8IDI1NSk7IGMgKz0gNSkge1xuICAgICAgICAgICAgbC0tO1xuICAgICAgICAgICAgdmFyIHYgPSBfQkFTRTMyVkFMVUVTW24uc3Vic3RyKGwsIDEpXTtcbiAgICAgICAgICAgIGNvcmUuc2V0Yml0KHIsIGMsIHYgJiAxKTtcbiAgICAgICAgICAgIHYgPj49IDE7XG4gICAgICAgICAgICBjb3JlLnNldGJpdChyLCBjICsgMSwgdiAmIDEpO1xuICAgICAgICAgICAgdiA+Pj0gMTtcbiAgICAgICAgICAgIGNvcmUuc2V0Yml0KHIsIGMgKyAyLCB2ICYgMSk7XG4gICAgICAgICAgICB2ID4+PSAxO1xuICAgICAgICAgICAgY29yZS5zZXRiaXQociwgYyArIDMsIHYgJiAxKTtcbiAgICAgICAgICAgIHYgPj49IDE7XG4gICAgICAgICAgICBjb3JlLnNldGJpdChyLCBjICsgNCwgdiAmIDEpO1xuICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tYXAoZiwgbCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KGwubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHRbaV0gPSBmKGxbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2NocihuKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9vcmQoYykge1xuICAgICAgICByZXR1cm4gYy5jaGFyQ29kZUF0KDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9ieXRlczJzdHJpbmcoYnl0ZXMpIHtcbiAgICAgICAgcmV0dXJuIF9tYXAoX2NociwgYnl0ZXMpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9zdHJpbmcyYnl0ZXMocykge1xuICAgICAgICByZXR1cm4gX21hcChfb3JkLCBzKTtcbiAgICB9XG5cblxuICAgIC8vIEV4cG9zZSBzb21lIGZ1bmN0aW9ucyB0byB0aGUgb3V0c2lkZSB0aHJvdWdoIHRoaXMgbmFtZSBzcGFjZS5cblxuICAgIC8qKlxuICAgICAqIEVuY29kZXMgYW4gYXJyYXkgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMgdG8gYSBoZXggc3RyaW5nLlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHZlY3RvciB7YXJyYXl9XG4gICAgICogICAgIEFycmF5IGNvbnRhaW5pbmcgdGhlIGJ5dGUgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICogICAgIFN0cmluZyBjb250YWluaW5nIHZlY3RvciBpbiBhIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqL1xuICAgIG5zLmhleEVuY29kZSA9IF9oZXhlbmNvZGU7XG5cblxuICAgIC8qKlxuICAgICAqIERlY29kZXMgYSBoZXggc3RyaW5nIHRvIGFuIGFycmF5IG9mIHVuc2lnbmVkIDgtYml0IGludGVnZXJzLlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHZlY3RvciB7c3RyaW5nfVxuICAgICAqICAgICBTdHJpbmcgY29udGFpbmluZyB2ZWN0b3IgaW4gYSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7YXJyYXl9XG4gICAgICogICAgIEFycmF5IGNvbnRhaW5pbmcgdGhlIGJ5dGUgdmFsdWVzLlxuICAgICAqL1xuICAgIG5zLmhleERlY29kZSA9IF9oZXhkZWNvZGU7XG5cblxuICAgIC8qKlxuICAgICAqIEVuY29kZXMgYW4gYXJyYXkgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMgdXNpbmcgYmFzZTMyIGVuY29kaW5nLlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHZlY3RvciB7YXJyYXl9XG4gICAgICogICAgIEFycmF5IGNvbnRhaW5pbmcgdGhlIGJ5dGUgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICogICAgIFN0cmluZyBjb250YWluaW5nIHZlY3RvciBpbiBhIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqL1xuICAgIG5zLmJhc2UzMmVuY29kZSA9IF9iYXNlMzJlbmNvZGU7XG5cblxuICAgIC8qKlxuICAgICAqIERlY29kZXMgYSBiYXNlMzIgZW5jb2RlZCBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gdmVjdG9yIHtzdHJpbmd9XG4gICAgICogICAgIFN0cmluZyBjb250YWluaW5nIHZlY3RvciBpbiBhIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqIEByZXR1cm5zIHthcnJheX1cbiAgICAgKiAgICAgQXJyYXkgY29udGFpbmluZyB0aGUgYnl0ZSB2YWx1ZXMuXG4gICAgICovXG4gICAgbnMuYmFzZTMyZGVjb2RlID0gX2Jhc2UzMmRlY29kZTtcblxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYW4gdW5zaWduZWQgOC1iaXQgaW50ZWdlciBhcnJheSByZXByZXNlbnRhdGlvbiB0byBhIGJ5dGUgc3RyaW5nLlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHZlY3RvciB7YXJyYXl9XG4gICAgICogICAgIEFycmF5IGNvbnRhaW5pbmcgdGhlIGJ5dGUgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICogICAgIEJ5dGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHZlY3Rvci5cbiAgICAgKi9cbiAgICBucy5ieXRlczJzdHJpbmcgPSBfYnl0ZXMyc3RyaW5nO1xuXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIGJ5dGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRvIGFuIGFycmF5IG9mIHVuc2lnbmVkXG4gICAgICogOC1iaXQgaW50ZWdlcnMuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gdmVjdG9yIHthcnJheX1cbiAgICAgKiAgICAgQXJyYXkgY29udGFpbmluZyB0aGUgYnl0ZSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgICAgQnl0ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdmVjdG9yLlxuICAgICAqL1xuICAgIG5zLnN0cmluZzJieXRlcyA9IF9zdHJpbmcyYnl0ZXM7XG5cbm1vZHVsZS5leHBvcnRzID0gbnM7XG4iLCJcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvanF1ZXJ5LWRlZmVycmVkJyk7IiwidmFyIGpRdWVyeSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vanF1ZXJ5LWNvcmUuanNcIiksXG5cdGNvcmVfcnNwYWNlID0gL1xccysvO1xuLyoqXG4qIGpRdWVyeSBDYWxsYmFja3NcbipcbiogQ29kZSBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvY2FsbGJhY2tzLmpzXG4qXG4qL1xuXG5cbi8vIFN0cmluZyB0byBPYmplY3Qgb3B0aW9ucyBmb3JtYXQgY2FjaGVcbnZhciBvcHRpb25zQ2FjaGUgPSB7fTtcblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXMgYW5kIHN0b3JlIGluIGNhY2hlXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0gb3B0aW9uc0NhY2hlWyBvcHRpb25zIF0gPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMuc3BsaXQoIGNvcmVfcnNwYWNlICksIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0KCBvcHRpb25zQ2FjaGVbIG9wdGlvbnMgXSB8fCBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gTGFzdCBmaXJlIHZhbHVlIChmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzKVxuXHRcdG1lbW9yeSxcblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cdFx0Ly8gRmlyc3QgY2FsbGJhY2sgdG8gZmlyZSAodXNlZCBpbnRlcm5hbGx5IGJ5IGFkZCBhbmQgZmlyZVdpdGgpXG5cdFx0ZmlyaW5nU3RhcnQsXG5cdFx0Ly8gRW5kIG9mIHRoZSBsb29wIHdoZW4gZmlyaW5nXG5cdFx0ZmlyaW5nTGVuZ3RoLFxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IHJlbW92ZSBpZiBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXgsXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cdFx0Ly8gU3RhY2sgb2YgZmlyZSBjYWxscyBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHN0YWNrID0gIW9wdGlvbnMub25jZSAmJiBbXSxcblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0XHRcdG1lbW9yeSA9IG9wdGlvbnMubWVtb3J5ICYmIGRhdGE7XG5cdFx0XHRmaXJlZCA9IHRydWU7XG5cdFx0XHRmaXJpbmdJbmRleCA9IGZpcmluZ1N0YXJ0IHx8IDA7XG5cdFx0XHRmaXJpbmdTdGFydCA9IDA7XG5cdFx0XHRmaXJpbmdMZW5ndGggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IGxpc3QgJiYgZmlyaW5nSW5kZXggPCBmaXJpbmdMZW5ndGg7IGZpcmluZ0luZGV4KysgKSB7XG5cdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggZGF0YVsgMCBdLCBkYXRhWyAxIF0gKSA9PT0gZmFsc2UgJiYgb3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTsgLy8gVG8gcHJldmVudCBmdXJ0aGVyIGNhbGxzIHVzaW5nIGFkZFxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0aWYgKCBzdGFjayApIHtcblx0XHRcdFx0XHRpZiAoIHN0YWNrLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGZpcmUoIHN0YWNrLnNoaWZ0KCkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2VsZi5kaXNhYmxlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHQvLyBGaXJzdCwgd2Ugc2F2ZSB0aGUgY3VycmVudCBsZW5ndGhcblx0XHRcdFx0XHR2YXIgc3RhcnQgPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHQoZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHQvLyBEbyB3ZSBuZWVkIHRvIGFkZCB0aGUgY2FsbGJhY2tzIHRvIHRoZVxuXHRcdFx0XHRcdC8vIGN1cnJlbnQgZmlyaW5nIGJhdGNoP1xuXHRcdFx0XHRcdGlmICggZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0Ly8gV2l0aCBtZW1vcnksIGlmIHdlJ3JlIG5vdCBmaXJpbmcgdGhlblxuXHRcdFx0XHRcdC8vIHdlIHNob3VsZCBjYWxsIHJpZ2h0IGF3YXlcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdTdGFydCA9IHN0YXJ0O1xuXHRcdFx0XHRcdFx0ZmlyZSggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdFx0d2hpbGUoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGZpcmluZyApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0xlbmd0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZpcmluZ0xlbmd0aC0tO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHQvLyBDb250cm9sIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3Rcblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMTtcblx0XHRcdH0sXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0Ly8gSGF2ZSB0aGUgbGlzdCBkbyBub3RoaW5nIGFueW1vcmVcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsaXN0ID0gc3RhY2sgPSBtZW1vcnkgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdC8vIElzIGl0IGRpc2FibGVkP1xuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXHRcdFx0Ly8gTG9jayB0aGUgbGlzdCBpbiBpdHMgY3VycmVudCBzdGF0ZVxuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHN0YWNrID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgKSB7XG5cdFx0XHRcdFx0c2VsZi5kaXNhYmxlKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0Ly8gSXMgaXQgbG9ja2VkP1xuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFzdGFjaztcblx0XHRcdH0sXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRpZiAoIGxpc3QgJiYgKCAhZmlyZWQgfHwgc3RhY2sgKSApIHtcblx0XHRcdFx0XHRpZiAoIGZpcmluZyApIHtcblx0XHRcdFx0XHRcdHN0YWNrLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZmlyZSggYXJncyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cbiIsIi8qKlxuKiBqUXVlcnkgY29yZSBvYmplY3QuXG4qXG4qIFdvcmtlciB3aXRoIGpRdWVyeSBkZWZlcnJlZFxuKlxuKiBDb2RlIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvbWFzdGVyL3NyYy9jb3JlLmpzXG4qXG4qL1xuXG52YXIgalF1ZXJ5ID0gbW9kdWxlLmV4cG9ydHMgPSB7XG5cdHR5cGU6IHR5cGVcblx0LCBpc0FycmF5OiBpc0FycmF5XG5cdCwgaXNGdW5jdGlvbjogaXNGdW5jdGlvblxuXHQsIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3Rcblx0LCBlYWNoOiBlYWNoXG5cdCwgZXh0ZW5kOiBleHRlbmRcblx0LCBub29wOiBmdW5jdGlvbigpIHt9XG59O1xuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5cIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3RcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG5cdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cblxuZnVuY3Rpb24gdHlwZSggb2JqICkge1xuXHRyZXR1cm4gb2JqID09IG51bGwgP1xuXHRcdFN0cmluZyggb2JqICkgOlxuXHRcdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbChvYmopIF0gfHwgXCJvYmplY3RcIjtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXHRyZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5KCBvYmogKSB7XG5cdHJldHVybiBqUXVlcnkudHlwZShvYmopID09PSBcImFycmF5XCI7XG59XG5cbmZ1bmN0aW9uIGVhY2goIG9iamVjdCwgY2FsbGJhY2ssIGFyZ3MgKSB7XG5cdHZhciBuYW1lLCBpID0gMCxcblx0bGVuZ3RoID0gb2JqZWN0Lmxlbmd0aCxcblx0aXNPYmogPSBsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBpc0Z1bmN0aW9uKCBvYmplY3QgKTtcblxuXHRpZiAoIGFyZ3MgKSB7XG5cdFx0aWYgKCBpc09iaiApIHtcblx0XHRcdGZvciAoIG5hbWUgaW4gb2JqZWN0ICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmFwcGx5KCBvYmplY3RbIG5hbWUgXSwgYXJncyApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmFwcGx5KCBvYmplY3RbIGkrKyBdLCBhcmdzICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQSBzcGVjaWFsLCBmYXN0LCBjYXNlIGZvciB0aGUgbW9zdCBjb21tb24gdXNlIG9mIGVhY2hcblx0fSBlbHNlIHtcblx0XHRpZiAoIGlzT2JqICkge1xuXHRcdFx0Zm9yICggbmFtZSBpbiBvYmplY3QgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqZWN0WyBuYW1lIF0sIG5hbWUsIG9iamVjdFsgbmFtZSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqZWN0WyBpIF0sIGksIG9iamVjdFsgaSsrIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KCBvYmogKSB7XG5cdC8vIE11c3QgYmUgYW4gT2JqZWN0LlxuXHRpZiAoICFvYmogfHwgalF1ZXJ5LnR5cGUob2JqKSAhPT0gXCJvYmplY3RcIiApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZCgpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHR0YXJnZXQgPSBhcmd1bWVudHNbMF0gfHwge30sXG5cdGkgPSAxLFxuXHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9O1xuXHRcdC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHRpID0gMjtcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKHRhcmdldCkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBleHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBsZW5ndGggPT09IGkgKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHQtLWk7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAob3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdKSAhPSBudWxsICkge1xuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoY29weSkpICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSApIHtcblx0XHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNBcnJheShzcmMpID8gc3JjIDogW107XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6IHt9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5cbiIsIlxuLyohXG4qIGpxdWVyeS1kZWZlcnJlZFxuKiBDb3B5cmlnaHQoYykgMjAxMSBIaWRkZW4gPHp6ZGhpZGRlbkBnbWFpbC5jb20+XG4qIE1JVCBMaWNlbnNlZFxuKi9cblxuLyoqXG4qIExpYnJhcnkgdmVyc2lvbi5cbiovXG5cbnZhciBqUXVlcnkgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL2pxdWVyeS1jYWxsYmFja3MuanNcIiksXG5cdGNvcmVfc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cbi8qKlxuKiBqUXVlcnkgZGVmZXJyZWRcbipcbiogQ29kZSBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iL21hc3Rlci9zcmMvZGVmZXJyZWQuanNcbiogRG9jOiBodHRwOi8vYXBpLmpxdWVyeS5jb20vY2F0ZWdvcnkvZGVmZXJyZWQtb2JqZWN0L1xuKlxuKi9cblxualF1ZXJ5LmV4dGVuZCh7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBsaXN0ZW5lciBsaXN0LCBmaW5hbCBzdGF0ZVxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLCBcInJlamVjdGVkXCIgXSxcblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoXCJtZW1vcnlcIikgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdFx0XHRcdFx0dmFyIGFjdGlvbiA9IHR1cGxlWyAwIF0sXG5cdFx0XHRcdFx0XHRcdFx0Zm4gPSBmbnNbIGkgXTtcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWRbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSBmb3IgZm9yd2FyZGluZyBhY3Rpb25zIHRvIG5ld0RlZmVyXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsxXSBdKCBqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSA/XG5cdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIGFjdGlvbiArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gbmV3RGVmZXIgOiB0aGlzLCBbIHJldHVybmVkIF0gKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IDpcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgYWN0aW9uIF1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9KS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0cHJvbWlzZS5waXBlID0gcHJvbWlzZS50aGVuO1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgMyBdO1xuXG5cdFx0XHQvLyBwcm9taXNlWyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbMV0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdC8vIHN0YXRlID0gWyByZXNvbHZlZCB8IHJlamVjdGVkIF1cblx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXG5cdFx0XHRcdC8vIFsgcmVqZWN0X2xpc3QgfCByZXNvbHZlX2xpc3QgXS5kaXNhYmxlOyBwcm9ncmVzc19saXN0LmxvY2tcblx0XHRcdFx0fSwgdHVwbGVzWyBpIF4gMSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAyIF1bIDIgXS5sb2NrICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGRlZmVycmVkWyByZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF0gPSBsaXN0LmZpcmVcblx0XHRcdGRlZmVycmVkWyB0dXBsZVswXSBdID0gbGlzdC5maXJlO1xuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWzBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXHRcdFx0bGVuZ3RoID0gcmVzb2x2ZVZhbHVlcy5sZW5ndGgsXG5cblx0XHRcdC8vIHRoZSBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGxlbmd0aCAhPT0gMSB8fCAoIHN1Ym9yZGluYXRlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBzdWJvcmRpbmF0ZS5wcm9taXNlICkgKSA/IGxlbmd0aCA6IDAsXG5cblx0XHRcdC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWQuIElmIHJlc29sdmVWYWx1ZXMgY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIERlZmVycmVkLCBqdXN0IHVzZSB0aGF0LlxuXHRcdFx0ZGVmZXJyZWQgPSByZW1haW5pbmcgPT09IDEgPyBzdWJvcmRpbmF0ZSA6IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBVcGRhdGUgZnVuY3Rpb24gZm9yIGJvdGggcmVzb2x2ZSBhbmQgcHJvZ3Jlc3MgdmFsdWVzXG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGksIGNvbnRleHRzLCB2YWx1ZXMgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0Y29udGV4dHNbIGkgXSA9IHRoaXM7XG5cdFx0XHRcdFx0dmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHtcblx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXG5cdFx0XHRwcm9ncmVzc1ZhbHVlcywgcHJvZ3Jlc3NDb250ZXh0cywgcmVzb2x2ZUNvbnRleHRzO1xuXG5cdFx0Ly8gYWRkIGxpc3RlbmVycyB0byBEZWZlcnJlZCBzdWJvcmRpbmF0ZXM7IHRyZWF0IG90aGVycyBhcyByZXNvbHZlZFxuXHRcdGlmICggbGVuZ3RoID4gMSApIHtcblx0XHRcdHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTtcblx0XHRcdHByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApO1xuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHQuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICkgKVxuXHRcdFx0XHRcdFx0LmZhaWwoIGRlZmVycmVkLnJlamVjdCApXG5cdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHByb2dyZXNzVmFsdWVzICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQtLXJlbWFpbmluZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGlmIHdlJ3JlIG5vdCB3YWl0aW5nIG9uIGFueXRoaW5nLCByZXNvbHZlIHRoZSBtYXN0ZXJcblx0XHRpZiAoICFyZW1haW5pbmcgKSB7XG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcblx0fVxufSk7XG4iLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuMi4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxNy0wMy0yMFQxODo1OVpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBjb25jYXQgPSBhcnIuY29uY2F0O1xuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cblxuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyXG5cdHZlcnNpb24gPSBcIjMuMi4xXCIsXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuXHQvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1Bcblx0cnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csXG5cblx0Ly8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG5cdHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZyxcblxuXHQvLyBVc2VkIGJ5IGpRdWVyeS5jYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5cdGZjYW1lbENhc2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0ZXIgKSB7XG5cdFx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xuXHR9O1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgKSB7XG5cdFx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgQXJyYXkuaXNBcnJheSggc3JjICkgPyBzcmMgOiBbXTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgPyBzcmMgOiB7fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc0Z1bmN0aW9uOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHJldHVybiBqUXVlcnkudHlwZSggb2JqICkgPT09IFwiZnVuY3Rpb25cIjtcblx0fSxcblxuXHRpc1dpbmRvdzogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9LFxuXG5cdGlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdFx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHRcdC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpXG5cdFx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdFx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKFwiXCIpXG5cdFx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHRcdCFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTtcblx0fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBwcm90bywgQ3RvcjtcblxuXHRcdC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlc1xuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xuXHRcdGlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRwcm90byA9IGdldFByb3RvKCBvYmogKTtcblxuXHRcdC8vIE9iamVjdHMgd2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxhaW5cblx0XHRpZiAoICFwcm90byApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXG5cdFx0Q3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgXCJjb25zdHJ1Y3RvclwiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvNjEyNVxuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdHR5cGU6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRcdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdFx0dHlwZW9mIG9iajtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBnbG9iYWwgY29udGV4dFxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSApIHtcblx0XHRET01FdmFsKCBjb2RlICk7XG5cdH0sXG5cblx0Ly8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDEzXG5cdC8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3Milcblx0Y2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkge1xuXHRcdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdHRyaW06IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFx0XCJcIiA6XG5cdFx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxuXHRcdFx0XHRcdHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGNvbmNhdC5hcHBseSggW10sIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuXHQvLyBhcmd1bWVudHMuXG5cdHByb3h5OiBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdFx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRcdGNvbnRleHQgPSBmbjtcblx0XHRcdGZuID0gdG1wO1xuXHRcdH1cblxuXHRcdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdFx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0XHRpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0XHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdFx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHRcdH07XG5cblx0XHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0XHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRcdHJldHVybiBwcm94eTtcblx0fSxcblxuXHRub3c6IERhdGUubm93LFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xufSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXG5cdGlmICggdHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxudmFyIFNpenpsZSA9XG4vKiFcbiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjMuM1xuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTYtMDgtMDhcbiAqL1xuKGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG5cbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKHt9KS5oYXNPd25Qcm9wZXJ0eSxcblx0YXJyID0gW10sXG5cdHBvcCA9IGFyci5wb3AsXG5cdHB1c2hfbmF0aXZlID0gYXJyLnB1c2gsXG5cdHB1c2ggPSBhcnIucHVzaCxcblx0c2xpY2UgPSBhcnIuc2xpY2UsXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwczovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFtpXSA9PT0gZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2Vcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWlkZW50aWZpZXJcblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFwufFtcXFxcdy1dfFteXFwwLVxcXFx4YTBdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblx0cnRyaW0gPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgKyB3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblxuXHRyYXR0cmlidXRlUXVvdGVzID0gbmV3IFJlZ0V4cCggXCI9XCIgKyB3aGl0ZXNwYWNlICsgXCIqKFteXFxcXF0nXFxcIl0qPylcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLCBcImdcIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3woXCIgKyB3aGl0ZXNwYWNlICsgXCIpfC4pXCIsIFwiaWdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGVkIC0gMHgxMDAwMDtcblx0XHQvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjRcblx0XHQvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICtcIjB4XCJcblx0XHRyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/XG5cdFx0XHRlc2NhcGVkIDpcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0Ly8gQk1QIGNvZGVwb2ludFxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0Ly8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXG5cdGZjc3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRcdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdFx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0ZGlzYWJsZWRBbmNlc3RvciA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiAoXCJmb3JtXCIgaW4gZWxlbSB8fCBcImxhYmVsXCIgaW4gZWxlbSk7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSksXG5cdFx0cHJlZmVycmVkRG9jLmNoaWxkTm9kZXNcblx0KTtcblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cblxuXHRcdC8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaF9uYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbChlbHMpICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcblx0XHRcdHdoaWxlICggKHRhcmdldFtqKytdID0gZWxzW2krK10pICkge31cblx0XHRcdHRhcmdldC5sZW5ndGggPSBqIC0gMTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblxuXHRcdGlmICggKCBjb250ZXh0ID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBwcmVmZXJyZWREb2MgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdH1cblx0XHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSBcImdldCpCeSpcIiBET00gbWV0aG9kXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXG5cdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAobWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkpICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKG0gPSBtYXRjaFsxXSkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XG5cdFx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmIChlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSAmJlxuXHRcdFx0XHRcdFx0XHRjb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzJdICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0XHQvLyBDbGFzcyBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiZcblx0XHRcdFx0XHRjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdGlmICggc3VwcG9ydC5xc2EgJiZcblx0XHRcdFx0IWNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXSAmJlxuXHRcdFx0XHQoIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkpICkge1xuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IGNvbnRleHQ7XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBzZWxlY3RvcjtcblxuXHRcdFx0XHQvLyBxU0EgbG9va3Mgb3V0c2lkZSBFbGVtZW50IGNvbnRleHQsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnRcblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgd29ya2Fyb3VuZCB0ZWNobmlxdWVcblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0aWYgKCAobmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApKSApIHtcblx0XHRcdFx0XHRcdG5pZCA9IG5pZC5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsIChuaWQgPSBleHBhbmRvKSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzW2ldID0gXCIjXCIgKyBuaWQgKyBcIiBcIiArIHRvU2VsZWN0b3IoIGdyb3Vwc1tpXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzXG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBuZXdTZWxlY3RvciApIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUpO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoXCJ8XCIpLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIubmV4dFNpYmxpbmcpICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIChuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIikgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRkaXNhYmxlZEFuY2VzdG9yKCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKGogPSBtYXRjaEluZGV4ZXNbaV0pIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlXG5zdXBwb3J0ID0gU2l6emxlLnN1cHBvcnQgPSB7fTtcblxuLyoqXG4gKiBEZXRlY3RzIFhNTCBub2Rlc1xuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGVcbiAqL1xuaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0Ly8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdFxuXHQvLyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMylcblx0dmFyIGRvY3VtZW50RWxlbWVudCA9IGVsZW0gJiYgKGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtKS5kb2N1bWVudEVsZW1lbnQ7XG5cdHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09IFwiSFRNTFwiIDogZmFsc2U7XG59O1xuXG4vKipcbiAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHtcblx0dmFyIGhhc0NvbXBhcmUsIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0aWYgKCBkb2MgPT09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0ZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvY3VtZW50ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOS0xMSwgRWRnZVxuXHQvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpXG5cdGlmICggcHJlZmVycmVkRG9jICE9PSBkb2N1bWVudCAmJlxuXHRcdChzdWJXaW5kb3cgPSBkb2N1bWVudC5kZWZhdWx0VmlldykgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTEsIEVkZ2Vcblx0XHRpZiAoIHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seVxuXHRcdH0gZWxzZSBpZiAoIHN1YldpbmRvdy5hdHRhY2hFdmVudCApIHtcblx0XHRcdHN1YldpbmRvdy5hdHRhY2hFdmVudCggXCJvbnVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdFx0fVxuXHR9XG5cblx0LyogQXR0cmlidXRlc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gU3VwcG9ydDogSUU8OFxuXHQvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXNcblx0Ly8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpXG5cdHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuY2xhc3NOYW1lID0gXCJpXCI7XG5cdFx0cmV0dXJuICFlbC5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIik7XG5cdH0pO1xuXG5cdC8qIGdldEVsZW1lbnQocylCeSpcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSByZXR1cm5zIG9ubHkgZWxlbWVudHNcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoXCJcIikgKTtcblx0XHRyZXR1cm4gIWVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKS5sZW5ndGg7XG5cdH0pO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDlcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSk7XG5cblx0Ly8gSUQgZmlsdGVyIGFuZCBmaW5kXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKFwiaWRcIikgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0XHRFeHByLmZpbmRbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgbm9kZSwgaSwgZWxlbXMsXG5cdFx0XHRcdFx0ZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0Ly8gVmVyaWZ5IHRoZSBpZCBhdHRyaWJ1dGVcblx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbXNbaSsrXSkgKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbXCJUQUdcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cblx0XHRcdH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHRcdH1cblx0XHR9IDpcblxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0dG1wID0gW10sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHQvLyBCeSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBhcHBlYXJzIG9uIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgdG9vXG5cdFx0XHRcdHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50c1xuXHRcdFx0aWYgKCB0YWcgPT09IFwiKlwiICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0bXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZFtcIkNMQVNTXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qIFFTQS9tYXRjaGVzU2VsZWN0b3Jcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnRcblxuXHQvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KVxuXHRyYnVnZ3lNYXRjaGVzID0gW107XG5cblx0Ly8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSlcblx0Ly8gV2UgYWxsb3cgdGhpcyBiZWNhdXNlIG9mIGEgYnVnIGluIElFOC85IHRoYXQgdGhyb3dzIGFuIGVycm9yXG5cdC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWVcblx0Ly8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3Jcblx0Ly8gU2VlIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OFxuXHRyYnVnZ3lRU0EgPSBbXTtcblxuXHRpZiAoIChzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApKSApIHtcblx0XHQvLyBCdWlsZCBRU0EgcmVnZXhcblx0XHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2Vcblx0XHRcdC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseVxuXHRcdFx0Ly8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsXG5cdFx0XHQvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzU5XG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9IFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPlwiICtcblx0XHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2XG5cdFx0XHQvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9XG5cdFx0XHQvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCBcInNhZmVcIiBmb3IgV2luUlRcblx0XHRcdC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvblxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbc2VsZWN0ZWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuNCwgU2FmYXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjgrXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIn49XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIjpjaGVja2VkXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4K1xuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MVxuXHRcdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2libGluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIuIy4rWyt+XVwiKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbmFtZT1kXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIipbKl4kfCF+XT89XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZClcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZW5hYmxlZFwiKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIjpkaXNhYmxlZFwiKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3Ncblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqLDp4XCIpO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIsLio6XCIpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCAoc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoIChtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XG5cdFx0ZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IpICkpICkge1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHRcdFx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSlcblx0XHRcdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGVsLCBcIipcIiApO1xuXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uXG5cdFx0XHQvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkXG5cdFx0XHRtYXRjaGVzLmNhbGwoIGVsLCBcIltzIT0nJ106eFwiICk7XG5cdFx0XHRyYnVnZ3lNYXRjaGVzLnB1c2goIFwiIT1cIiwgcHNldWRvcyApO1xuXHRcdH0pO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbihcInxcIikgKTtcblx0cmJ1Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbihcInxcIikgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkpO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0aWYgKCBiICkge1xuXHRcdFx0XHR3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHRpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYSkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHRcdGlmICggYiA9PT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBiKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTtcblx0fSA6XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXHRcdFx0cmV0dXJuIGEgPT09IGRvY3VtZW50ID8gLTEgOlxuXHRcdFx0XHRiID09PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRhcC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cdFx0Y3VyID0gYjtcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XG5cdFx0XHRicC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cblx0XHQvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeVxuXHRcdHdoaWxlICggYXBbaV0gPT09IGJwW2ldICkge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBpID9cblx0XHRcdC8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvclxuXHRcdFx0c2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdFxuXHRcdFx0YXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAxIDpcblx0XHRcdDA7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufTtcblxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZFxuXHRleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCBcIj0nJDEnXVwiICk7XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFjb21waWxlckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cdFx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdH1cblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cblx0XHR2YWwgOlxuXHRcdHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XG5cdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcbn07XG5cblNpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2VsICkge1xuXHRyZXR1cm4gKHNlbCArIFwiXCIpLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzO1xuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTtcblx0cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcblxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcblx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXG4gKi9cbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbm9kZSxcblx0XHRyZXQgPSBcIlwiLFxuXHRcdGkgPSAwLFxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRpZiAoICFub2RlVHlwZSApIHtcblx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxuXHRcdHdoaWxlICggKG5vZGUgPSBlbGVtW2krK10pICkge1xuXHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdHJldCArPSBnZXRUZXh0KCBub2RlICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHR9XG5cdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xuXG5cdHJldHVybiByZXQ7XG59O1xuXG5FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbM10gPSAoIG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzJdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWzNdID0gXCIgXCIgKyBtYXRjaFszXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzFdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWzNdICkge1xuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWzRdID0gKyggbWF0Y2hbNF0gPyBtYXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSBcImV2ZW5cIiB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWzVdID0gKyggKCBtYXRjaFs3XSArIG1hdGNoWzhdICkgfHwgbWF0Y2hbM10gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWzZdICYmIG1hdGNoWzJdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwcltcIkNISUxEXCJdLnRlc3QoIG1hdGNoWzBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0bWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiZcblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsyXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9IDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDTEFTU1wiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xuXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxuXHRcdFx0XHQocGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyBjbGFzc05hbWUgKyBcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkpICYmXG5cdFx0XHRcdGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdCggdHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlbGVtLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIgKTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBhcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gbm9kZVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WzBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdFx0XHRpbnB1dFswXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5nIHx8IFwiXCIpICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKFwieG1sOmxhbmdcIikgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRcImVuYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0XCJkaXNhYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLFxuXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIChub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkKTtcblx0XHR9LFxuXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1tcImVtcHR5XCJdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShcInR5cGVcIikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0pLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0pLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pXG5cdH1cbn07XG5cbkV4cHIucHNldWRvc1tcIm50aFwiXSA9IEV4cHIucHNldWRvc1tcImVxXCJdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9KTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoIChtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufTtcblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1tpXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IDpcblxuXHRcdC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50c1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fCAob3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIChvbGRDYWNoZSA9IHVuaXF1ZUNhY2hlWyBrZXkgXSkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSA6XG5cdFx0bWF0Y2hlcnNbMF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbaV0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgXCIqXCIsIGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXMsXG5cblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0W10gOlxuXG5cdFx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdFx0cmVzdWx0cyA6XG5cdFx0XHRcdG1hdGNoZXJJbjtcblxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXHRcdFx0bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwb3N0RmlsdGVyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XG5cdFx0XHRwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7XG5cblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cblx0XHRcdGkgPSB0ZW1wLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIChlbGVtID0gdGVtcFtpXSkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xuXHRcdFx0XHRcdHRlbXAgPSBbXTtcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKG1hdGNoZXJJbltpXSA9IGVsZW0pICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXG5cdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmXG5cdFx0XHRcdFx0XHQodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1swXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlW1wiIFwiXSxcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXG5cblx0XHQvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKVxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlID9cblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0XHRtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7XG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2ldLnR5cGUgXSkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvcihlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlcikgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3Rvcihcblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2xpY2UoIDAsIGkgLSAxICkuY29uY2F0KHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9KVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kW1wiVEFHXCJdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEpLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCkgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoIChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxuXHRcdGlmICggIW1hdGNoICkge1xuXHRcdFx0bWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHR9XG5cdFx0aSA9IG1hdGNoLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7XG5cblx0XHQvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb25cblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0fVxuXHRyZXR1cm4gY2FjaGVkO1xufTtcblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5zZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoIChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1swXSkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kW1wiSURcIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwcltcIm5lZWRzQ29udGV4dFwiXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1tpXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdKSApIHtcblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdFx0XHRcdCkpICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KFwiXCIpLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oXCJcIikgPT09IGV4cGFuZG87XG5cbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpICkgJiAxO1xufSk7XG5cbi8vIFN1cHBvcnQ6IElFPDhcbi8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5IFwiaW50ZXJwb2xhdGlvblwiXG4vLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxuaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09IFwiI1wiIDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0eXBlXCIgPyAxIDogMiApO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiO1xuXHRlbC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiLCBcIlwiICk7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IFwiXCI7XG59KSApIHtcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0pO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRyZXR1cm4gZWwuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIikgPT0gbnVsbDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHZhbDtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcblx0XHR9XG5cdH0pO1xufVxuXG5yZXR1cm4gU2l6emxlO1xuXG59KSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG4gIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59O1xudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG52YXIgcmlzU2ltcGxlID0gL14uW146I1xcW1xcLixdKiQvO1xuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW1wbGUgc2VsZWN0b3IgdGhhdCBjYW4gYmUgZmlsdGVyZWQgZGlyZWN0bHksIHJlbW92aW5nIG5vbi1FbGVtZW50c1xuXHRpZiAoIHJpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG5cdH1cblxuXHQvLyBDb21wbGV4IHNlbGVjdG9yLCBjb21wYXJlIHRoZSB0d28gc2V0cywgcmVtb3Zpbmcgbm9uLUVsZW1lbnRzXG5cdHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMgKTtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdCAmJiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXG5cdFx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRcdG1hdGNoZWQucHVzaCggY3VyICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XG5cdHJldHVybiBjdXI7XG59XG5cbmpRdWVyeS5lYWNoKCB7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xuXHR9LFxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICBpZiAoIG5vZGVOYW1lKCBlbGVtLCBcImlmcmFtZVwiICkgKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcbiAgICAgICAgLy8gVHJlYXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgYXMgYSByZWd1bGFyIG9uZSBpbiBicm93c2VycyB0aGF0XG4gICAgICAgIC8vIGRvbid0IHN1cHBvcnQgaXQuXG4gICAgICAgIGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuICAgICAgICAgICAgZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIGpRdWVyeS50eXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxuZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7XG5cdHJldHVybiB2O1xufVxuZnVuY3Rpb24gVGhyb3dlciggZXggKSB7XG5cdHRocm93IGV4O1xufVxuXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xuXHR2YXIgbWV0aG9kO1xuXG5cdHRyeSB7XG5cblx0XHQvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yXG5cdFx0aWYgKCB2YWx1ZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBqUXVlcnkuaXNGdW5jdGlvbiggZm5zWyB0dXBsZVsgNCBdIF0gKSAmJiBmbnNbIHR1cGxlWyA0IF0gXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5wcm9ncmVzcyhmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZXNvbHZlIH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIHN0YWNrLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSA9IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuaXNGdW5jdGlvbiggb25SZWplY3RlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUmVqZWN0ZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0VGhyb3dlclxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmRvbmUgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVzb2x2ZWRcIiAoaS5lLiwgZnVsZmlsbGVkKVxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlamVjdGVkXCJcblx0XHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgbWFzdGVyIERlZmVycmVkXG5cdFx0XHRtYXN0ZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0bWFzdGVyLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBtYXN0ZXIuZG9uZSggdXBkYXRlRnVuYyggaSApICkucmVzb2x2ZSwgbWFzdGVyLnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIG1hc3Rlci5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRqUXVlcnkuaXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIG1hc3Rlci50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBtYXN0ZXIucmVqZWN0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hc3Rlci5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCBqUXVlcnkudHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgalF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LlxuXHRcdFx0XHRrZXkgPSBrZXkubWFwKCBqUXVlcnkuY2FtZWxDYXNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZGF0YTtcblxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcblx0XHRcdC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxuXHRcdFx0Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS5cblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gVGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGFcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHN0b3JlIHRoZSBjYW1lbENhc2VkIGtleVxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxuXHRcdFx0aWYgKCBkYXRhICkge1xuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBBcnJheS5pc0FycmF5KCBkYXRhICkgKSB7XG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xuXHRcdH1cblx0fSxcblxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcblx0XHRcdHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLFxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcblx0XHRcdG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcblx0XHRcdH07XG5cblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzdGFydExlbmd0aC0tO1xuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cblx0XHRcdC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmdcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KCBcImlucHJvZ3Jlc3NcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR2YXIga2V5ID0gdHlwZSArIFwicXVldWVIb29rc1wiO1xuXHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyBcInF1ZXVlXCIsIGtleSBdICk7XG5cdFx0XHR9IClcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzIDpcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWyAwIF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdH0gKTtcblx0fSxcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHR9LFxuXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XG5cdFx0dmFyIHRtcCxcblx0XHRcdGNvdW50ID0gMSxcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59ICk7XG52YXIgcG51bSA9ICggL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8gKS5zb3VyY2U7XG5cbnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKTtcblxuXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XG5cbnZhciBpc0hpZGRlbldpdGhpblRyZWUgPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XG5cblx0XHQvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblxuXHRcdC8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsXG5cdFx0cmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHxcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJlxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NVxuXHRcdFx0Ly8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzXG5cdFx0XHQvLyBpbiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICYmXG5cblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiO1xuXHR9O1xuXG52YXIgc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjaywgYXJncyApIHtcblx0dmFyIHJldCwgbmFtZSxcblx0XHRvbGQgPSB7fTtcblxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcblx0fVxuXG5cdHJldCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkge1xuXHR2YXIgYWRqdXN0ZWQsXG5cdFx0c2NhbGUgPSAxLFxuXHRcdG1heEl0ZXJhdGlvbnMgPSAyMCxcblx0XHRjdXJyZW50VmFsdWUgPSB0d2VlbiA/XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmN1cigpO1xuXHRcdFx0fSA6XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsIFwiXCIgKTtcblx0XHRcdH0sXG5cdFx0aW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLFxuXHRcdHVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcblxuXHRcdC8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzXG5cdFx0aW5pdGlhbEluVW5pdCA9ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiAraW5pdGlhbCApICYmXG5cdFx0XHRyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApO1xuXG5cdGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxuXHRcdHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdGRvIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgaXRlcmF0aW9uIHplcm9lZCBvdXQsIGRvdWJsZSB1bnRpbCB3ZSBnZXQgKnNvbWV0aGluZyouXG5cdFx0XHQvLyBVc2Ugc3RyaW5nIGZvciBkb3VibGluZyBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkgc2VlIHNjYWxlIGFzIHVuY2hhbmdlZCBiZWxvd1xuXHRcdFx0c2NhbGUgPSBzY2FsZSB8fCBcIi41XCI7XG5cblx0XHRcdC8vIEFkanVzdCBhbmQgYXBwbHlcblx0XHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7XG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBVcGRhdGUgc2NhbGUsIHRvbGVyYXRpbmcgemVybyBvciBOYU4gZnJvbSB0d2Vlbi5jdXIoKVxuXHRcdC8vIEJyZWFrIHRoZSBsb29wIGlmIHNjYWxlIGlzIHVuY2hhbmdlZCBvciBwZXJmZWN0LCBvciBpZiB3ZSd2ZSBqdXN0IGhhZCBlbm91Z2guXG5cdFx0fSB3aGlsZSAoXG5cdFx0XHRzY2FsZSAhPT0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCApICYmIHNjYWxlICE9PSAxICYmIC0tbWF4SXRlcmF0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSspL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0b3B0aW9uOiBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF0sXG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxud3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uO1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgY29udGFpbnMsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCBqUXVlcnkudHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29udGFpbnMgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBjb250YWlucyApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKCMxMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seVxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxuXHRkaXYuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCI7XG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xufSApKCk7XG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxudmFyXG5cdHJrZXlFdmVudCA9IC9ea2V5Lyxcblx0cm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sXG5cdHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBTZWUgIzEzMzkzIGZvciBtb3JlIGluZm9cbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHR9IGNhdGNoICggZXJyICkgeyB9XG59XG5cbmZ1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7XG5cdHZhciBvcmlnRm4sIHR5cGU7XG5cblx0Ly8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzXG5cdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhIClcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKVxuXHRcdFx0ZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdG9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7XG5cdFx0fVxuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHtcblxuXHRcdC8vICggdHlwZXMsIGZuIClcblx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHtcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgc2VsZWN0b3IsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgZGF0YSwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdH0gZWxzZSBpZiAoICFmbiApIHtcblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggb25lID09PSAxICkge1xuXHRcdG9yaWdGbiA9IGZuO1xuXHRcdGZuID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHQvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm9cblx0XHRcdGpRdWVyeSgpLm9mZiggZXZlbnQgKTtcblx0XHRcdHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cblx0XHQvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGblxuXHRcdGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApO1xuXHR9XG5cdHJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTtcblx0fSApO1xufVxuXG4vKlxuICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLlxuICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy5cbiAqL1xualF1ZXJ5LmV2ZW50ID0ge1xuXG5cdGdsb2JhbDoge30sXG5cblx0YWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkge1xuXG5cdFx0dmFyIGhhbmRsZU9iakluLCBldmVudEhhbmRsZSwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0Ly8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4gb2JqZWN0cylcblx0XHRpZiAoICFlbGVtRGF0YSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXJcblx0XHRpZiAoIGhhbmRsZXIuaGFuZGxlciApIHtcblx0XHRcdGhhbmRsZU9iakluID0gaGFuZGxlcjtcblx0XHRcdGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyO1xuXHRcdFx0c2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3Rvcjtcblx0XHR9XG5cblx0XHQvLyBFbnN1cmUgdGhhdCBpbnZhbGlkIHNlbGVjdG9ycyB0aHJvdyBleGNlcHRpb25zIGF0IGF0dGFjaCB0aW1lXG5cdFx0Ly8gRXZhbHVhdGUgYWdhaW5zdCBkb2N1bWVudEVsZW1lbnQgaW4gY2FzZSBlbGVtIGlzIGEgbm9uLWVsZW1lbnQgbm9kZSAoZS5nLiwgZG9jdW1lbnQpXG5cdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZG9jdW1lbnRFbGVtZW50LCBzZWxlY3RvciApO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlclxuXHRcdGlmICggIWhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdFxuXHRcdGlmICggISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgPSB7fTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHR2YXIgZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApO1xuXG5cdFx0dmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLCBoYW5kbGVyUXVldWUsXG5cdFx0XHRhcmdzID0gbmV3IEFycmF5KCBhcmd1bWVudHMubGVuZ3RoICksXG5cdFx0XHRoYW5kbGVycyA9ICggZGF0YVByaXYuZ2V0KCB0aGlzLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gVHJpZ2dlcmVkIGV2ZW50IG11c3QgZWl0aGVyIDEpIGhhdmUgbm8gbmFtZXNwYWNlLCBvciAyKSBoYXZlIG5hbWVzcGFjZShzKVxuXHRcdFx0XHQvLyBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQgKGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHtcblxuXHRcdFx0XHRcdGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcblx0XHRcdFx0XHRldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XG5cblx0XHRcdFx0XHRyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXG5cdFx0aWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHtcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgaSwgaGFuZGxlT2JqLCBzZWwsIG1hdGNoZWRIYW5kbGVycywgbWF0Y2hlZFNlbGVjdG9ycyxcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XG5cblx0XHQvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OVxuXHRcdFx0Ly8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKHRyYWMtMTMxODApXG5cdFx0XHRjdXIubm9kZVR5cGUgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQyXG5cdFx0XHQvLyBTdXBwcmVzcyBzcGVjLXZpb2xhdGluZyBjbGlja3MgaW5kaWNhdGluZyBhIG5vbi1wcmltYXJ5IHBvaW50ZXIgYnV0dG9uICh0cmFjLTM4NjEpXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHQvLyAuLi5idXQgbm90IGFycm93IGtleSBcImNsaWNrc1wiIG9mIHJhZGlvIGlucHV0cywgd2hpY2ggY2FuIGhhdmUgYGJ1dHRvbmAgLTEgKGdoLTIzNDMpXG5cdFx0XHQhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHtcblxuXHRcdFx0Zm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMylcblx0XHRcdFx0XHRcdHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArIFwiIFwiO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlZEhhbmRsZXJzIH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzXG5cdFx0Y3VyID0gdGhpcztcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGFuZGxlclF1ZXVlO1xuXHR9LFxuXG5cdGFkZFByb3A6IGZ1bmN0aW9uKCBuYW1lLCBob29rICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblxuXHRcdFx0Z2V0OiBqUXVlcnkuaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBob29rKCB0aGlzLm9yaWdpbmFsRXZlbnQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGZvY3VzOiB7XG5cblx0XHRcdC8vIEZpcmUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdGhpcyAhPT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmZvY3VzICkge1xuXHRcdFx0XHRcdHRoaXMuZm9jdXMoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWxlZ2F0ZVR5cGU6IFwiZm9jdXNpblwiXG5cdFx0fSxcblx0XHRibHVyOiB7XG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0aGlzID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuYmx1ciApIHtcblx0XHRcdFx0XHR0aGlzLmJsdXIoKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWxlZ2F0ZVR5cGU6IFwiZm9jdXNvdXRcIlxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gRm9yIGNoZWNrYm94LCBmaXJlIG5hdGl2ZSBldmVudCBzbyBjaGVja2VkIHN0YXRlIHdpbGwgYmUgcmlnaHRcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiICYmIHRoaXMuY2xpY2sgJiYgbm9kZU5hbWUoIHRoaXMsIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHRoaXMuY2xpY2soKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBkb24ndCBmaXJlIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0cmV0dXJuIG5vZGVOYW1lKCBldmVudC50YXJnZXQsIFwiYVwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJlZm9yZXVubG9hZDoge1xuXHRcdFx0cG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcblx0XHRcdFx0Ly8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LlxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgalF1ZXJ5Lm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHNcbmpRdWVyeS5lYWNoKCB7XG5cdGFsdEtleTogdHJ1ZSxcblx0YnViYmxlczogdHJ1ZSxcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0Y2hhbmdlZFRvdWNoZXM6IHRydWUsXG5cdGN0cmxLZXk6IHRydWUsXG5cdGRldGFpbDogdHJ1ZSxcblx0ZXZlbnRQaGFzZTogdHJ1ZSxcblx0bWV0YUtleTogdHJ1ZSxcblx0cGFnZVg6IHRydWUsXG5cdHBhZ2VZOiB0cnVlLFxuXHRzaGlmdEtleTogdHJ1ZSxcblx0dmlldzogdHJ1ZSxcblx0XCJjaGFyXCI6IHRydWUsXG5cdGNoYXJDb2RlOiB0cnVlLFxuXHRrZXk6IHRydWUsXG5cdGtleUNvZGU6IHRydWUsXG5cdGJ1dHRvbjogdHJ1ZSxcblx0YnV0dG9uczogdHJ1ZSxcblx0Y2xpZW50WDogdHJ1ZSxcblx0Y2xpZW50WTogdHJ1ZSxcblx0b2Zmc2V0WDogdHJ1ZSxcblx0b2Zmc2V0WTogdHJ1ZSxcblx0cG9pbnRlcklkOiB0cnVlLFxuXHRwb2ludGVyVHlwZTogdHJ1ZSxcblx0c2NyZWVuWDogdHJ1ZSxcblx0c2NyZWVuWTogdHJ1ZSxcblx0dGFyZ2V0VG91Y2hlczogdHJ1ZSxcblx0dG9FbGVtZW50OiB0cnVlLFxuXHR0b3VjaGVzOiB0cnVlLFxuXG5cdHdoaWNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGJ1dHRvbiA9IGV2ZW50LmJ1dHRvbjtcblxuXHRcdC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50c1xuXHRcdGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCAmJiBya2V5RXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0cmV0dXJuIGV2ZW50LmNoYXJDb2RlICE9IG51bGwgPyBldmVudC5jaGFyQ29kZSA6IGV2ZW50LmtleUNvZGU7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdodFxuXHRcdGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICYmIHJtb3VzZUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdGlmICggYnV0dG9uICYgMSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggYnV0dG9uICYgMiApIHtcblx0XHRcdFx0cmV0dXJuIDM7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggYnV0dG9uICYgNCApIHtcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC53aGljaDtcblx0fVxufSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy8zMjI5XG5cdHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLFxuXG5cdC8qIGVzbGludC1lbmFibGUgKi9cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxM1xuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyc2NyaXB0VHlwZU1hc2tlZCA9IC9edHJ1ZVxcLyguKikvLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggXCI+dGJvZHlcIiwgZWxlbSApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHR2YXIgbWF0Y2ggPSByc2NyaXB0VHlwZU1hc2tlZC5leGVjKCBlbGVtLnR5cGUgKTtcblxuXHRpZiAoIG1hdGNoICkge1xuXHRcdGVsZW0udHlwZSA9IG1hdGNoWyAxIF07XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCBwZGF0YUN1ciwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNyYyApO1xuXHRcdHBkYXRhQ3VyID0gZGF0YVByaXYuc2V0KCBkZXN0LCBwZGF0YU9sZCApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTtcblx0XHRcdHBkYXRhQ3VyLmV2ZW50cyA9IHt9O1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gY29uY2F0LmFwcGx5KCBbXSwgYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHRpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggaXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGpRdWVyeS5jb250YWlucyggbm9kZS5vd25lckRvY3VtZW50LCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbC5yZXBsYWNlKCByeGh0bWxUYWcsIFwiPCQxPjwvJDI+XCIgKTtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG5cblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7XG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0aWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcblx0fTtcbn0gKTtcbnZhciBybWFyZ2luID0gKCAvXm1hcmdpbi8gKTtcblxudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAoIzE1MDk4LCAjMTQxNTApXG5cdFx0Ly8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHtcblx0XHRcdHZpZXcgPSB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuXHR9O1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblxuXHQvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXRcblx0Ly8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi5cblx0ZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XG5cblx0XHQvLyBUaGlzIGlzIGEgc2luZ2xldG9uLCB3ZSBuZWVkIHRvIGV4ZWN1dGUgaXQgb25seSBvbmNlXG5cdFx0aWYgKCAhZGl2ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwiYm94LXNpemluZzpib3JkZXItYm94O1wiICtcblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztcIiArXG5cdFx0XHRcIm1hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7XCIgK1xuXHRcdFx0XCJ0b3A6MSU7d2lkdGg6NTAlXCI7XG5cdFx0ZGl2LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gZGl2U3R5bGUubWFyZ2luTGVmdCA9PT0gXCIycHhcIjtcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IGRpdlN0eWxlLndpZHRoID09PSBcIjRweFwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHRcdC8vIFNvbWUgc3R5bGVzIGNvbWUgYmFjayB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLCBldmVuIHRob3VnaCB0aGV5IHNob3VsZG4ndFxuXHRcdGRpdi5zdHlsZS5tYXJnaW5SaWdodCA9IFwiNTAlXCI7XG5cdFx0cGl4ZWxNYXJnaW5SaWdodFZhbCA9IGRpdlN0eWxlLm1hcmdpblJpZ2h0ID09PSBcIjRweFwiO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgcGl4ZWxNYXJnaW5SaWdodFZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcImJvcmRlcjowO3dpZHRoOjhweDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHg7XCIgK1xuXHRcdFwicGFkZGluZzowO21hcmdpbi10b3A6MXB4O3Bvc2l0aW9uOmFic29sdXRlXCI7XG5cdGNvbnRhaW5lci5hcHBlbmRDaGlsZCggZGl2ICk7XG5cblx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbE1hcmdpblJpZ2h0VmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH1cblx0fSApO1xufSApKCk7XG5cblxuZnVuY3Rpb24gY3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHtcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErXG5cdFx0Ly8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvd1xuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcblx0XHQvLyBvbiBkZXRhY2hlZCBlbGVtZW50c1xuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcblx0Ly8gICAuY3NzKCdmaWx0ZXInKSAoSUUgOSBvbmx5LCAjMTI1MzcpXG5cdC8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKCMzMTQ0KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsTWFyZ2luUmlnaHQoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cdHJjdXN0b21Qcm9wID0gL14tLS8sXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9LFxuXG5cdGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZTtcblxuLy8gUmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gU2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3IgcHJlZml4ZWRcblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcHJvcGVydHkgbWFwcGVkIGFsb25nIHdoYXQgalF1ZXJ5LmNzc1Byb3BzIHN1Z2dlc3RzIG9yIHRvXG4vLyBhIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eS5cbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciByZXQgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXTtcblx0aWYgKCAhcmV0ICkge1xuXHRcdHJldCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB8fCBuYW1lO1xuXHR9XG5cdHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSwgaXNCb3JkZXJCb3gsIHN0eWxlcyApIHtcblx0dmFyIGksXG5cdFx0dmFsID0gMDtcblxuXHQvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJpZ2h0IG1lYXN1cmVtZW50LCBhdm9pZCBhdWdtZW50YXRpb25cblx0aWYgKCBleHRyYSA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdGkgPSA0O1xuXG5cdC8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHByb3BlcnRpZXNcblx0fSBlbHNlIHtcblx0XHRpID0gbmFtZSA9PT0gXCJ3aWR0aFwiID8gMSA6IDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW4sIHNvIGFkZCBpdCBpZiB3ZSB3YW50IGl0XG5cdFx0aWYgKCBleHRyYSA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBib3JkZXItYm94IGluY2x1ZGVzIHBhZGRpbmcsIHNvIHJlbW92ZSBpdCBpZiB3ZSB3YW50IGNvbnRlbnRcblx0XHRcdGlmICggZXh0cmEgPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHR2YWwgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGJvcmRlciBub3IgbWFyZ2luLCBzbyByZW1vdmUgYm9yZGVyXG5cdFx0XHRpZiAoIGV4dHJhICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHR2YWwgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50LCBzbyBhZGQgcGFkZGluZ1xuXHRcdFx0dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGV4dHJhICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgdmFsdWVJc0JvcmRlckJveCxcblx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApLFxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIjtcblxuXHQvLyBDb21wdXRlZCB1bml0IGlzIG5vdCBwaXhlbHMuIFN0b3AgaGVyZSBhbmQgcmV0dXJuLlxuXHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRyZXR1cm4gdmFsO1xuXHR9XG5cblx0Ly8gQ2hlY2sgZm9yIHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXNcblx0Ly8gZm9yIGdldENvbXB1dGVkU3R5bGUgc2lsZW50bHkgZmFsbHMgYmFjayB0byB0aGUgcmVsaWFibGUgZWxlbS5zdHlsZVxuXHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3ggJiZcblx0XHQoIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCB2YWwgPT09IGVsZW0uc3R5bGVbIG5hbWUgXSApO1xuXG5cdC8vIEZhbGwgYmFjayB0byBvZmZzZXRXaWR0aC9IZWlnaHQgd2hlbiB2YWx1ZSBpcyBcImF1dG9cIlxuXHQvLyBUaGlzIGhhcHBlbnMgZm9yIGlubGluZSBlbGVtZW50cyB3aXRoIG5vIGV4cGxpY2l0IHNldHRpbmcgKGdoLTM1NzEpXG5cdGlmICggdmFsID09PSBcImF1dG9cIiApIHtcblx0XHR2YWwgPSBlbGVtWyBcIm9mZnNldFwiICsgbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICkgXTtcblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBcIlwiLCBhdXRvLCBhbmQgcHJlcGFyZSBmb3IgZXh0cmFcblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBVc2UgdGhlIGFjdGl2ZSBib3gtc2l6aW5nIG1vZGVsIHRvIGFkZC9zdWJ0cmFjdCBpcnJlbGV2YW50IHN0eWxlc1xuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGF1Z21lbnRXaWR0aE9ySGVpZ2h0KFxuXHRcdFx0ZWxlbSxcblx0XHRcdG5hbWUsXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XG5cdC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eVxuXHRjc3NIb29rczoge1xuXHRcdG9wYWNpdHk6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHlcblx0XHRcdFx0XHR2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBcIm9wYWNpdHlcIiApO1xuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xuXHRjc3NOdW1iZXI6IHtcblx0XHRcImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50XCI6IHRydWUsXG5cdFx0XCJjb2x1bW5Db3VudFwiOiB0cnVlLFxuXHRcdFwiZmlsbE9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcImZsZXhHcm93XCI6IHRydWUsXG5cdFx0XCJmbGV4U2hyaW5rXCI6IHRydWUsXG5cdFx0XCJmb250V2VpZ2h0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge1xuXHRcdFwiZmxvYXRcIjogXCJjc3NGbG9hdFwiXG5cdH0sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgIzkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0aWYgKCB0eXBlID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7XG5cdFx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkge1xuXHRcdFx0dmFyIG1hdGNoZXMsXG5cdFx0XHRcdHN0eWxlcyA9IGV4dHJhICYmIGdldFN0eWxlcyggZWxlbSApLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhICYmIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KFxuXHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRleHRyYSxcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sIFwibWFyZ2luTGVmdFwiICkgKSB8fFxuXHRcdFx0XHRlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoICFybWFyZ2luLnRlc3QoIHByZWZpeCApICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxM1xuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0XHQvLyBUaGUgZmluYWwgc3RlcCBvZiBhIFwiaGlkZVwiIGFuaW1hdGlvbiBpcyBhY3R1YWxseSBoaWRpbmcgdGhlIGVsZW1lbnRcblx0XHRcdFx0aWYgKCAhaGlkZGVuICkge1xuXHRcdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xuXHRcdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdC8vIFBlci1wcm9wZXJ0eSBzZXR1cFxuXHRcdHByb3BUd2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xuXHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xuXHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRwcm9wVHdlZW4uc3RhcnQgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHtcblx0dmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rcztcblxuXHQvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3Ncblx0Zm9yICggaW5kZXggaW4gcHJvcHMgKSB7XG5cdFx0bmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRqUXVlcnkucHJveHkoIHJlc3VsdC5zdG9wLCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0galF1ZXJ5Lm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0cnVjdHVyZS5odG1sI3N0cmlwLWFuZC1jb2xsYXBzZS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlICkge1xuXHRcdFx0Y2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXR0ciggXCJjbGFzc1wiLCBcIlwiICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUgKSB7XG5cdFx0XHRjbGFzc2VzID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIHR5cGUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC87XG5cbmpRdWVyeS5leHRlbmQoIGpRdWVyeS5ldmVudCwge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkge1xuXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7XG5cblx0XHQvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vd1xuXHRcdGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGUuaW5kZXhPZiggXCIuXCIgKSA+IC0xICkge1xuXG5cdFx0XHQvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpXG5cdFx0XHRuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggXCIuXCIgKTtcblx0XHRcdHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7XG5cdFx0XHRuYW1lc3BhY2VzLnNvcnQoKTtcblx0XHR9XG5cdFx0b250eXBlID0gdHlwZS5pbmRleE9mKCBcIjpcIiApIDwgMCAmJiBcIm9uXCIgKyB0eXBlO1xuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nXG5cdFx0ZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRldmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQgKTtcblxuXHRcdC8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSlcblx0XHRldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMztcblx0XHRldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiICk7XG5cdFx0ZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/XG5cdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKSA6XG5cdFx0XHRudWxsO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkXG5cdFx0ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW07XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdFxuXHRcdGRhdGEgPSBkYXRhID09IG51bGwgP1xuXHRcdFx0WyBldmVudCBdIDpcblx0XHRcdGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApO1xuXG5cdFx0Ly8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lc1xuXHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpXG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggKCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXG5cdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0galF1ZXJ5Lm5vdygpO1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWw7XG5cdGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHQvLyBJRSB0aHJvd3Mgb24gcGFyc2VGcm9tU3RyaW5nIHdpdGggaW52YWxpZCBpbnB1dC5cblx0dHJ5IHtcblx0XHR4bWwgPSAoIG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJzZUZyb21TdHJpbmcoIGRhdGEsIFwidGV4dC94bWxcIiApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHR4bWwgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoICF4bWwgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKS5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIGRhdGEgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uO1xuXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0fTtcblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApXG5cdFx0LmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKVxuXHRcdC5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXHRvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDEzXG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLFxuXHRcdFx0Ly8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlKysgKSArIHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblx0XHRcInRocm93c1wiOiB0cnVlXG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIHJlcXVlc3RzXG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApLnByb3AoIHtcblx0XHRcdFx0XHRjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsXG5cdFx0XHRcdFx0c3JjOiBzLnVybFxuXHRcdFx0XHR9ICkub24oXG5cdFx0XHRcdFx0XCJsb2FkIGVycm9yXCIsXG5cdFx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xuXHRcdH0gKTtcblxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA4IG9ubHlcbi8vIEluIFNhZmFyaSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRcbi8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGlzIHNlY3VyaXR5IG1lYXN1cmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIFNhZmFyaSA4LlxuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzN1xuc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkge1xuXHR2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApLmJvZHk7XG5cdGJvZHkuaW5uZXJIVE1MID0gXCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiO1xuXHRyZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMjtcbn0gKSgpO1xuXG5cbi8vIEFyZ3VtZW50IFwiZGF0YVwiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbFxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxuLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnRcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XG5cdGlmICggdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblxuXHR2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzO1xuXG5cdGlmICggIWNvbnRleHQgKSB7XG5cblx0XHQvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHlcblx0XHQvLyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvblxuXHRcdGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICk7XG5cblx0XHRcdC8vIFNldCB0aGUgYmFzZSBocmVmIGZvciB0aGUgY3JlYXRlZCBkb2N1bWVudFxuXHRcdFx0Ly8gc28gYW55IHBhcnNlZCBlbGVtZW50cyB3aXRoIFVSTHNcblx0XHRcdC8vIGFyZSBiYXNlZCBvbiB0aGUgZG9jdW1lbnQncyBVUkwgKGdoLTI5NjUpXG5cdFx0XHRiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImJhc2VcIiApO1xuXHRcdFx0YmFzZS5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcblx0XHRcdGNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0cGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7XG5cdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTtcblx0fVxuXG5cdHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XG5cblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XG59O1xuXG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXG5cdFx0c2VsZiA9IHRoaXMsXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoIFwiIFwiICk7XG5cblx0aWYgKCBvZmYgPiAtMSApIHtcblx0XHRzZWxlY3RvciA9IHN0cmlwQW5kQ29sbGFwc2UoIHVybC5zbGljZSggb2ZmICkgKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuXHR9XG5cblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXG5cdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbi8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgZG9jLCBkb2NFbGVtLCByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdHdpbiA9IGRvYy5kZWZhdWx0VmlldztcblxuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRUb3AsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXQgLSBkb2NFbGVtLmNsaWVudExlZnRcblx0XHR9O1xuXHR9LFxuXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzWyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBGaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gd2luZG93IChwYXJlbnRPZmZzZXQgPSB7dG9wOjAsIGxlZnQ6IDB9LFxuXHRcdC8vIGJlY2F1c2UgaXQgaXMgaXRzIG9ubHkgb2Zmc2V0IHBhcmVudFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpcyB0aGVyZSB3aGVuIGNvbXB1dGVkIHBvc2l0aW9uIGlzIGZpeGVkXG5cdFx0XHRvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnRcblx0XHRcdG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KCk7XG5cblx0XHRcdC8vIEdldCBjb3JyZWN0IG9mZnNldHNcblx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7XG5cdFx0XHRpZiAoICFub2RlTmFtZSggb2Zmc2V0UGFyZW50WyAwIF0sIFwiaHRtbFwiICkgKSB7XG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IG9mZnNldFBhcmVudC5vZmZzZXQoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7XG5cdFx0XHRcdHRvcDogcGFyZW50T2Zmc2V0LnRvcCArIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKSxcblx0XHRcdFx0bGVmdDogcGFyZW50T2Zmc2V0LmxlZnQgKyBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnRbIDAgXSwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtO1xuXHRcdFx0fSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0d2luID0gZWxlbS5kZWZhdWx0Vmlldztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICggd2luICkge1xuXHRcdFx0XHR3aW4uc2Nyb2xsVG8oXG5cdFx0XHRcdFx0IXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCxcblx0XHRcdFx0XHR0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbVsgbWV0aG9kIF0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fTtcbn0gKTtcblxuLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0OVxuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxuLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODkzNDdcbi8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7XG4vLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZVxualF1ZXJ5LmVhY2goIFsgXCJ0b3BcIiwgXCJsZWZ0XCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHsgcGFkZGluZzogXCJpbm5lclwiICsgbmFtZSwgY29udGVudDogdHlwZSwgXCJcIjogXCJvdXRlclwiICsgbmFtZSB9LFxuXHRcdGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcblxuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcbmlmICggIW5vR2xvYmFsICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCIoZnVuY3Rpb24oKXtcblxuICAgIC8vIENvcHlyaWdodCAoYykgMjAwNSAgVG9tIFd1XG4gICAgLy8gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAgICAvLyBTZWUgXCJMSUNFTlNFXCIgZm9yIGRldGFpbHMuXG5cbiAgICAvLyBCYXNpYyBKYXZhU2NyaXB0IEJOIGxpYnJhcnkgLSBzdWJzZXQgdXNlZnVsIGZvciBSU0EgZW5jcnlwdGlvbi5cblxuICAgIC8vIEJpdHMgcGVyIGRpZ2l0XG4gICAgdmFyIGRiaXRzO1xuXG4gICAgLy8gSmF2YVNjcmlwdCBlbmdpbmUgYW5hbHlzaXNcbiAgICB2YXIgY2FuYXJ5ID0gMHhkZWFkYmVlZmNhZmU7XG4gICAgdmFyIGpfbG0gPSAoKGNhbmFyeSYweGZmZmZmZik9PTB4ZWZjYWZlKTtcblxuICAgIC8vIChwdWJsaWMpIENvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gQmlnSW50ZWdlcihhLGIsYykge1xuICAgICAgaWYoYSAhPSBudWxsKVxuICAgICAgICBpZihcIm51bWJlclwiID09IHR5cGVvZiBhKSB0aGlzLmZyb21OdW1iZXIoYSxiLGMpO1xuICAgICAgICBlbHNlIGlmKGIgPT0gbnVsbCAmJiBcInN0cmluZ1wiICE9IHR5cGVvZiBhKSB0aGlzLmZyb21TdHJpbmcoYSwyNTYpO1xuICAgICAgICBlbHNlIHRoaXMuZnJvbVN0cmluZyhhLGIpO1xuICAgIH1cblxuICAgIC8vIHJldHVybiBuZXcsIHVuc2V0IEJpZ0ludGVnZXJcbiAgICBmdW5jdGlvbiBuYmkoKSB7IHJldHVybiBuZXcgQmlnSW50ZWdlcihudWxsKTsgfVxuXG4gICAgLy8gYW06IENvbXB1dGUgd19qICs9ICh4KnRoaXNfaSksIHByb3BhZ2F0ZSBjYXJyaWVzLFxuICAgIC8vIGMgaXMgaW5pdGlhbCBjYXJyeSwgcmV0dXJucyBmaW5hbCBjYXJyeS5cbiAgICAvLyBjIDwgMypkdmFsdWUsIHggPCAyKmR2YWx1ZSwgdGhpc19pIDwgZHZhbHVlXG4gICAgLy8gV2UgbmVlZCB0byBzZWxlY3QgdGhlIGZhc3Rlc3Qgb25lIHRoYXQgd29ya3MgaW4gdGhpcyBlbnZpcm9ubWVudC5cblxuICAgIC8vIGFtMTogdXNlIGEgc2luZ2xlIG11bHQgYW5kIGRpdmlkZSB0byBnZXQgdGhlIGhpZ2ggYml0cyxcbiAgICAvLyBtYXggZGlnaXQgYml0cyBzaG91bGQgYmUgMjYgYmVjYXVzZVxuICAgIC8vIG1heCBpbnRlcm5hbCB2YWx1ZSA9IDIqZHZhbHVlXjItMipkdmFsdWUgKDwgMl41MylcbiAgICBmdW5jdGlvbiBhbTEoaSx4LHcsaixjLG4pIHtcbiAgICAgIHdoaWxlKC0tbiA+PSAwKSB7XG4gICAgICAgIHZhciB2ID0geCp0aGlzW2krK10rd1tqXStjO1xuICAgICAgICBjID0gTWF0aC5mbG9vcih2LzB4NDAwMDAwMCk7XG4gICAgICAgIHdbaisrXSA9IHYmMHgzZmZmZmZmO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIC8vIGFtMiBhdm9pZHMgYSBiaWcgbXVsdC1hbmQtZXh0cmFjdCBjb21wbGV0ZWx5LlxuICAgIC8vIE1heCBkaWdpdCBiaXRzIHNob3VsZCBiZSA8PSAzMCBiZWNhdXNlIHdlIGRvIGJpdHdpc2Ugb3BzXG4gICAgLy8gb24gdmFsdWVzIHVwIHRvIDIqaGR2YWx1ZV4yLWhkdmFsdWUtMSAoPCAyXjMxKVxuICAgIGZ1bmN0aW9uIGFtMihpLHgsdyxqLGMsbikge1xuICAgICAgdmFyIHhsID0geCYweDdmZmYsIHhoID0geD4+MTU7XG4gICAgICB3aGlsZSgtLW4gPj0gMCkge1xuICAgICAgICB2YXIgbCA9IHRoaXNbaV0mMHg3ZmZmO1xuICAgICAgICB2YXIgaCA9IHRoaXNbaSsrXT4+MTU7XG4gICAgICAgIHZhciBtID0geGgqbCtoKnhsO1xuICAgICAgICBsID0geGwqbCsoKG0mMHg3ZmZmKTw8MTUpK3dbal0rKGMmMHgzZmZmZmZmZik7XG4gICAgICAgIGMgPSAobD4+PjMwKSsobT4+PjE1KSt4aCpoKyhjPj4+MzApO1xuICAgICAgICB3W2orK10gPSBsJjB4M2ZmZmZmZmY7XG4gICAgICB9XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgLy8gQWx0ZXJuYXRlbHksIHNldCBtYXggZGlnaXQgYml0cyB0byAyOCBzaW5jZSBzb21lXG4gICAgLy8gYnJvd3NlcnMgc2xvdyBkb3duIHdoZW4gZGVhbGluZyB3aXRoIDMyLWJpdCBudW1iZXJzLlxuICAgIGZ1bmN0aW9uIGFtMyhpLHgsdyxqLGMsbikge1xuICAgICAgdmFyIHhsID0geCYweDNmZmYsIHhoID0geD4+MTQ7XG4gICAgICB3aGlsZSgtLW4gPj0gMCkge1xuICAgICAgICB2YXIgbCA9IHRoaXNbaV0mMHgzZmZmO1xuICAgICAgICB2YXIgaCA9IHRoaXNbaSsrXT4+MTQ7XG4gICAgICAgIHZhciBtID0geGgqbCtoKnhsO1xuICAgICAgICBsID0geGwqbCsoKG0mMHgzZmZmKTw8MTQpK3dbal0rYztcbiAgICAgICAgYyA9IChsPj4yOCkrKG0+PjE0KSt4aCpoO1xuICAgICAgICB3W2orK10gPSBsJjB4ZmZmZmZmZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICB2YXIgaW5Ccm93c2VyID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICBpZihpbkJyb3dzZXIgJiYgal9sbSAmJiAobmF2aWdhdG9yLmFwcE5hbWUgPT0gXCJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXJcIikpIHtcbiAgICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFtID0gYW0yO1xuICAgICAgZGJpdHMgPSAzMDtcbiAgICB9XG4gICAgZWxzZSBpZihpbkJyb3dzZXIgJiYgal9sbSAmJiAobmF2aWdhdG9yLmFwcE5hbWUgIT0gXCJOZXRzY2FwZVwiKSkge1xuICAgICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYW0gPSBhbTE7XG4gICAgICBkYml0cyA9IDI2O1xuICAgIH1cbiAgICBlbHNlIHsgLy8gTW96aWxsYS9OZXRzY2FwZSBzZWVtcyB0byBwcmVmZXIgYW0zXG4gICAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbSA9IGFtMztcbiAgICAgIGRiaXRzID0gMjg7XG4gICAgfVxuXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuREIgPSBkYml0cztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5ETSA9ICgoMTw8ZGJpdHMpLTEpO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkRWID0gKDE8PGRiaXRzKTtcblxuICAgIHZhciBCSV9GUCA9IDUyO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkZWID0gTWF0aC5wb3coMixCSV9GUCk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuRjEgPSBCSV9GUC1kYml0cztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5GMiA9IDIqZGJpdHMtQklfRlA7XG5cbiAgICAvLyBEaWdpdCBjb252ZXJzaW9uc1xuICAgIHZhciBCSV9STSA9IFwiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCI7XG4gICAgdmFyIEJJX1JDID0gbmV3IEFycmF5KCk7XG4gICAgdmFyIHJyLHZ2O1xuICAgIHJyID0gXCIwXCIuY2hhckNvZGVBdCgwKTtcbiAgICBmb3IodnYgPSAwOyB2diA8PSA5OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2O1xuICAgIHJyID0gXCJhXCIuY2hhckNvZGVBdCgwKTtcbiAgICBmb3IodnYgPSAxMDsgdnYgPCAzNjsgKyt2dikgQklfUkNbcnIrK10gPSB2djtcbiAgICByciA9IFwiQVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgZm9yKHZ2ID0gMTA7IHZ2IDwgMzY7ICsrdnYpIEJJX1JDW3JyKytdID0gdnY7XG5cbiAgICBmdW5jdGlvbiBpbnQyY2hhcihuKSB7IHJldHVybiBCSV9STS5jaGFyQXQobik7IH1cbiAgICBmdW5jdGlvbiBpbnRBdChzLGkpIHtcbiAgICAgIHZhciBjID0gQklfUkNbcy5jaGFyQ29kZUF0KGkpXTtcbiAgICAgIHJldHVybiAoYz09bnVsbCk/LTE6YztcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBjb3B5IHRoaXMgdG8gclxuICAgIGZ1bmN0aW9uIGJucENvcHlUbyhyKSB7XG4gICAgICBmb3IodmFyIGkgPSB0aGlzLnQtMTsgaSA+PSAwOyAtLWkpIHJbaV0gPSB0aGlzW2ldO1xuICAgICAgci50ID0gdGhpcy50O1xuICAgICAgci5zID0gdGhpcy5zO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHNldCBmcm9tIGludGVnZXIgdmFsdWUgeCwgLURWIDw9IHggPCBEVlxuICAgIGZ1bmN0aW9uIGJucEZyb21JbnQoeCkge1xuICAgICAgdGhpcy50ID0gMTtcbiAgICAgIHRoaXMucyA9ICh4PDApPy0xOjA7XG4gICAgICBpZih4ID4gMCkgdGhpc1swXSA9IHg7XG4gICAgICBlbHNlIGlmKHggPCAtMSkgdGhpc1swXSA9IHgrdGhpcy5EVjtcbiAgICAgIGVsc2UgdGhpcy50ID0gMDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gYmlnaW50IGluaXRpYWxpemVkIHRvIHZhbHVlXG4gICAgZnVuY3Rpb24gbmJ2KGkpIHsgdmFyIHIgPSBuYmkoKTsgci5mcm9tSW50KGkpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgc2V0IGZyb20gc3RyaW5nIGFuZCByYWRpeFxuICAgIGZ1bmN0aW9uIGJucEZyb21TdHJpbmcocyxiKSB7XG4gICAgICB2YXIgaztcbiAgICAgIGlmKGIgPT0gMTYpIGsgPSA0O1xuICAgICAgZWxzZSBpZihiID09IDgpIGsgPSAzO1xuICAgICAgZWxzZSBpZihiID09IDI1NikgayA9IDg7IC8vIGJ5dGUgYXJyYXlcbiAgICAgIGVsc2UgaWYoYiA9PSAyKSBrID0gMTtcbiAgICAgIGVsc2UgaWYoYiA9PSAzMikgayA9IDU7XG4gICAgICBlbHNlIGlmKGIgPT0gNCkgayA9IDI7XG4gICAgICBlbHNlIHsgdGhpcy5mcm9tUmFkaXgocyxiKTsgcmV0dXJuOyB9XG4gICAgICB0aGlzLnQgPSAwO1xuICAgICAgdGhpcy5zID0gMDtcbiAgICAgIHZhciBpID0gcy5sZW5ndGgsIG1pID0gZmFsc2UsIHNoID0gMDtcbiAgICAgIHdoaWxlKC0taSA+PSAwKSB7XG4gICAgICAgIHZhciB4ID0gKGs9PTgpP3NbaV0mMHhmZjppbnRBdChzLGkpO1xuICAgICAgICBpZih4IDwgMCkge1xuICAgICAgICAgIGlmKHMuY2hhckF0KGkpID09IFwiLVwiKSBtaSA9IHRydWU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbWkgPSBmYWxzZTtcbiAgICAgICAgaWYoc2ggPT0gMClcbiAgICAgICAgICB0aGlzW3RoaXMudCsrXSA9IHg7XG4gICAgICAgIGVsc2UgaWYoc2grayA+IHRoaXMuREIpIHtcbiAgICAgICAgICB0aGlzW3RoaXMudC0xXSB8PSAoeCYoKDE8PCh0aGlzLkRCLXNoKSktMSkpPDxzaDtcbiAgICAgICAgICB0aGlzW3RoaXMudCsrXSA9ICh4Pj4odGhpcy5EQi1zaCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aGlzW3RoaXMudC0xXSB8PSB4PDxzaDtcbiAgICAgICAgc2ggKz0gaztcbiAgICAgICAgaWYoc2ggPj0gdGhpcy5EQikgc2ggLT0gdGhpcy5EQjtcbiAgICAgIH1cbiAgICAgIGlmKGsgPT0gOCAmJiAoc1swXSYweDgwKSAhPSAwKSB7XG4gICAgICAgIHRoaXMucyA9IC0xO1xuICAgICAgICBpZihzaCA+IDApIHRoaXNbdGhpcy50LTFdIHw9ICgoMTw8KHRoaXMuREItc2gpKS0xKTw8c2g7XG4gICAgICB9XG4gICAgICB0aGlzLmNsYW1wKCk7XG4gICAgICBpZihtaSkgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgY2xhbXAgb2ZmIGV4Y2VzcyBoaWdoIHdvcmRzXG4gICAgZnVuY3Rpb24gYm5wQ2xhbXAoKSB7XG4gICAgICB2YXIgYyA9IHRoaXMucyZ0aGlzLkRNO1xuICAgICAgd2hpbGUodGhpcy50ID4gMCAmJiB0aGlzW3RoaXMudC0xXSA9PSBjKSAtLXRoaXMudDtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIGluIGdpdmVuIHJhZGl4XG4gICAgZnVuY3Rpb24gYm5Ub1N0cmluZyhiKSB7XG4gICAgICBpZih0aGlzLnMgPCAwKSByZXR1cm4gXCItXCIrdGhpcy5uZWdhdGUoKS50b1N0cmluZyhiKTtcbiAgICAgIHZhciBrO1xuICAgICAgaWYoYiA9PSAxNikgayA9IDQ7XG4gICAgICBlbHNlIGlmKGIgPT0gOCkgayA9IDM7XG4gICAgICBlbHNlIGlmKGIgPT0gMikgayA9IDE7XG4gICAgICBlbHNlIGlmKGIgPT0gMzIpIGsgPSA1O1xuICAgICAgZWxzZSBpZihiID09IDQpIGsgPSAyO1xuICAgICAgZWxzZSByZXR1cm4gdGhpcy50b1JhZGl4KGIpO1xuICAgICAgdmFyIGttID0gKDE8PGspLTEsIGQsIG0gPSBmYWxzZSwgciA9IFwiXCIsIGkgPSB0aGlzLnQ7XG4gICAgICB2YXIgcCA9IHRoaXMuREItKGkqdGhpcy5EQiklaztcbiAgICAgIGlmKGktLSA+IDApIHtcbiAgICAgICAgaWYocCA8IHRoaXMuREIgJiYgKGQgPSB0aGlzW2ldPj5wKSA+IDApIHsgbSA9IHRydWU7IHIgPSBpbnQyY2hhcihkKTsgfVxuICAgICAgICB3aGlsZShpID49IDApIHtcbiAgICAgICAgICBpZihwIDwgaykge1xuICAgICAgICAgICAgZCA9ICh0aGlzW2ldJigoMTw8cCktMSkpPDwoay1wKTtcbiAgICAgICAgICAgIGQgfD0gdGhpc1stLWldPj4ocCs9dGhpcy5EQi1rKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkID0gKHRoaXNbaV0+PihwLT1rKSkma207XG4gICAgICAgICAgICBpZihwIDw9IDApIHsgcCArPSB0aGlzLkRCOyAtLWk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZCA+IDApIG0gPSB0cnVlO1xuICAgICAgICAgIGlmKG0pIHIgKz0gaW50MmNoYXIoZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtP3I6XCIwXCI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgLXRoaXNcbiAgICBmdW5jdGlvbiBibk5lZ2F0ZSgpIHsgdmFyIHIgPSBuYmkoKTsgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB8dGhpc3xcbiAgICBmdW5jdGlvbiBibkFicygpIHsgcmV0dXJuICh0aGlzLnM8MCk/dGhpcy5uZWdhdGUoKTp0aGlzOyB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gKyBpZiB0aGlzID4gYSwgLSBpZiB0aGlzIDwgYSwgMCBpZiBlcXVhbFxuICAgIGZ1bmN0aW9uIGJuQ29tcGFyZVRvKGEpIHtcbiAgICAgIHZhciByID0gdGhpcy5zLWEucztcbiAgICAgIGlmKHIgIT0gMCkgcmV0dXJuIHI7XG4gICAgICB2YXIgaSA9IHRoaXMudDtcbiAgICAgIHIgPSBpLWEudDtcbiAgICAgIGlmKHIgIT0gMCkgcmV0dXJuICh0aGlzLnM8MCk/LXI6cjtcbiAgICAgIHdoaWxlKC0taSA+PSAwKSBpZigocj10aGlzW2ldLWFbaV0pICE9IDApIHJldHVybiByO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBiaXQgbGVuZ3RoIG9mIHRoZSBpbnRlZ2VyIHhcbiAgICBmdW5jdGlvbiBuYml0cyh4KSB7XG4gICAgICB2YXIgciA9IDEsIHQ7XG4gICAgICBpZigodD14Pj4+MTYpICE9IDApIHsgeCA9IHQ7IHIgKz0gMTY7IH1cbiAgICAgIGlmKCh0PXg+PjgpICE9IDApIHsgeCA9IHQ7IHIgKz0gODsgfVxuICAgICAgaWYoKHQ9eD4+NCkgIT0gMCkgeyB4ID0gdDsgciArPSA0OyB9XG4gICAgICBpZigodD14Pj4yKSAhPSAwKSB7IHggPSB0OyByICs9IDI7IH1cbiAgICAgIGlmKCh0PXg+PjEpICE9IDApIHsgeCA9IHQ7IHIgKz0gMTsgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cyBpbiBcInRoaXNcIlxuICAgIGZ1bmN0aW9uIGJuQml0TGVuZ3RoKCkge1xuICAgICAgaWYodGhpcy50IDw9IDApIHJldHVybiAwO1xuICAgICAgcmV0dXJuIHRoaXMuREIqKHRoaXMudC0xKStuYml0cyh0aGlzW3RoaXMudC0xXV4odGhpcy5zJnRoaXMuRE0pKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyA8PCBuKkRCXG4gICAgZnVuY3Rpb24gYm5wRExTaGlmdFRvKG4scikge1xuICAgICAgdmFyIGk7XG4gICAgICBmb3IoaSA9IHRoaXMudC0xOyBpID49IDA7IC0taSkgcltpK25dID0gdGhpc1tpXTtcbiAgICAgIGZvcihpID0gbi0xOyBpID49IDA7IC0taSkgcltpXSA9IDA7XG4gICAgICByLnQgPSB0aGlzLnQrbjtcbiAgICAgIHIucyA9IHRoaXMucztcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyA+PiBuKkRCXG4gICAgZnVuY3Rpb24gYm5wRFJTaGlmdFRvKG4scikge1xuICAgICAgZm9yKHZhciBpID0gbjsgaSA8IHRoaXMudDsgKytpKSByW2ktbl0gPSB0aGlzW2ldO1xuICAgICAgci50ID0gTWF0aC5tYXgodGhpcy50LW4sMCk7XG4gICAgICByLnMgPSB0aGlzLnM7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPDwgblxuICAgIGZ1bmN0aW9uIGJucExTaGlmdFRvKG4scikge1xuICAgICAgdmFyIGJzID0gbiV0aGlzLkRCO1xuICAgICAgdmFyIGNicyA9IHRoaXMuREItYnM7XG4gICAgICB2YXIgYm0gPSAoMTw8Y2JzKS0xO1xuICAgICAgdmFyIGRzID0gTWF0aC5mbG9vcihuL3RoaXMuREIpLCBjID0gKHRoaXMuczw8YnMpJnRoaXMuRE0sIGk7XG4gICAgICBmb3IoaSA9IHRoaXMudC0xOyBpID49IDA7IC0taSkge1xuICAgICAgICByW2krZHMrMV0gPSAodGhpc1tpXT4+Y2JzKXxjO1xuICAgICAgICBjID0gKHRoaXNbaV0mYm0pPDxicztcbiAgICAgIH1cbiAgICAgIGZvcihpID0gZHMtMTsgaSA+PSAwOyAtLWkpIHJbaV0gPSAwO1xuICAgICAgcltkc10gPSBjO1xuICAgICAgci50ID0gdGhpcy50K2RzKzE7XG4gICAgICByLnMgPSB0aGlzLnM7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPj4gblxuICAgIGZ1bmN0aW9uIGJucFJTaGlmdFRvKG4scikge1xuICAgICAgci5zID0gdGhpcy5zO1xuICAgICAgdmFyIGRzID0gTWF0aC5mbG9vcihuL3RoaXMuREIpO1xuICAgICAgaWYoZHMgPj0gdGhpcy50KSB7IHIudCA9IDA7IHJldHVybjsgfVxuICAgICAgdmFyIGJzID0gbiV0aGlzLkRCO1xuICAgICAgdmFyIGNicyA9IHRoaXMuREItYnM7XG4gICAgICB2YXIgYm0gPSAoMTw8YnMpLTE7XG4gICAgICByWzBdID0gdGhpc1tkc10+PmJzO1xuICAgICAgZm9yKHZhciBpID0gZHMrMTsgaSA8IHRoaXMudDsgKytpKSB7XG4gICAgICAgIHJbaS1kcy0xXSB8PSAodGhpc1tpXSZibSk8PGNicztcbiAgICAgICAgcltpLWRzXSA9IHRoaXNbaV0+PmJzO1xuICAgICAgfVxuICAgICAgaWYoYnMgPiAwKSByW3RoaXMudC1kcy0xXSB8PSAodGhpcy5zJmJtKTw8Y2JzO1xuICAgICAgci50ID0gdGhpcy50LWRzO1xuICAgICAgci5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIC0gYVxuICAgIGZ1bmN0aW9uIGJucFN1YlRvKGEscikge1xuICAgICAgdmFyIGkgPSAwLCBjID0gMCwgbSA9IE1hdGgubWluKGEudCx0aGlzLnQpO1xuICAgICAgd2hpbGUoaSA8IG0pIHtcbiAgICAgICAgYyArPSB0aGlzW2ldLWFbaV07XG4gICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgYyA+Pj0gdGhpcy5EQjtcbiAgICAgIH1cbiAgICAgIGlmKGEudCA8IHRoaXMudCkge1xuICAgICAgICBjIC09IGEucztcbiAgICAgICAgd2hpbGUoaSA8IHRoaXMudCkge1xuICAgICAgICAgIGMgKz0gdGhpc1tpXTtcbiAgICAgICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICAgICAgYyA+Pj0gdGhpcy5EQjtcbiAgICAgICAgfVxuICAgICAgICBjICs9IHRoaXMucztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjICs9IHRoaXMucztcbiAgICAgICAgd2hpbGUoaSA8IGEudCkge1xuICAgICAgICAgIGMgLT0gYVtpXTtcbiAgICAgICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICAgICAgYyA+Pj0gdGhpcy5EQjtcbiAgICAgICAgfVxuICAgICAgICBjIC09IGEucztcbiAgICAgIH1cbiAgICAgIHIucyA9IChjPDApPy0xOjA7XG4gICAgICBpZihjIDwgLTEpIHJbaSsrXSA9IHRoaXMuRFYrYztcbiAgICAgIGVsc2UgaWYoYyA+IDApIHJbaSsrXSA9IGM7XG4gICAgICByLnQgPSBpO1xuICAgICAgci5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzICogYSwgciAhPSB0aGlzLGEgKEhBQyAxNC4xMilcbiAgICAvLyBcInRoaXNcIiBzaG91bGQgYmUgdGhlIGxhcmdlciBvbmUgaWYgYXBwcm9wcmlhdGUuXG4gICAgZnVuY3Rpb24gYm5wTXVsdGlwbHlUbyhhLHIpIHtcbiAgICAgIHZhciB4ID0gdGhpcy5hYnMoKSwgeSA9IGEuYWJzKCk7XG4gICAgICB2YXIgaSA9IHgudDtcbiAgICAgIHIudCA9IGkreS50O1xuICAgICAgd2hpbGUoLS1pID49IDApIHJbaV0gPSAwO1xuICAgICAgZm9yKGkgPSAwOyBpIDwgeS50OyArK2kpIHJbaSt4LnRdID0geC5hbSgwLHlbaV0scixpLDAseC50KTtcbiAgICAgIHIucyA9IDA7XG4gICAgICByLmNsYW1wKCk7XG4gICAgICBpZih0aGlzLnMgIT0gYS5zKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8ocixyKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpc14yLCByICE9IHRoaXMgKEhBQyAxNC4xNilcbiAgICBmdW5jdGlvbiBibnBTcXVhcmVUbyhyKSB7XG4gICAgICB2YXIgeCA9IHRoaXMuYWJzKCk7XG4gICAgICB2YXIgaSA9IHIudCA9IDIqeC50O1xuICAgICAgd2hpbGUoLS1pID49IDApIHJbaV0gPSAwO1xuICAgICAgZm9yKGkgPSAwOyBpIDwgeC50LTE7ICsraSkge1xuICAgICAgICB2YXIgYyA9IHguYW0oaSx4W2ldLHIsMippLDAsMSk7XG4gICAgICAgIGlmKChyW2kreC50XSs9eC5hbShpKzEsMip4W2ldLHIsMippKzEsYyx4LnQtaS0xKSkgPj0geC5EVikge1xuICAgICAgICAgIHJbaSt4LnRdIC09IHguRFY7XG4gICAgICAgICAgcltpK3gudCsxXSA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKHIudCA+IDApIHJbci50LTFdICs9IHguYW0oaSx4W2ldLHIsMippLDAsMSk7XG4gICAgICByLnMgPSAwO1xuICAgICAgci5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGRpdmlkZSB0aGlzIGJ5IG0sIHF1b3RpZW50IGFuZCByZW1haW5kZXIgdG8gcSwgciAoSEFDIDE0LjIwKVxuICAgIC8vIHIgIT0gcSwgdGhpcyAhPSBtLiAgcSBvciByIG1heSBiZSBudWxsLlxuICAgIGZ1bmN0aW9uIGJucERpdlJlbVRvKG0scSxyKSB7XG4gICAgICB2YXIgcG0gPSBtLmFicygpO1xuICAgICAgaWYocG0udCA8PSAwKSByZXR1cm47XG4gICAgICB2YXIgcHQgPSB0aGlzLmFicygpO1xuICAgICAgaWYocHQudCA8IHBtLnQpIHtcbiAgICAgICAgaWYocSAhPSBudWxsKSBxLmZyb21JbnQoMCk7XG4gICAgICAgIGlmKHIgIT0gbnVsbCkgdGhpcy5jb3B5VG8ocik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmKHIgPT0gbnVsbCkgciA9IG5iaSgpO1xuICAgICAgdmFyIHkgPSBuYmkoKSwgdHMgPSB0aGlzLnMsIG1zID0gbS5zO1xuICAgICAgdmFyIG5zaCA9IHRoaXMuREItbmJpdHMocG1bcG0udC0xXSk7ICAgLy8gbm9ybWFsaXplIG1vZHVsdXNcbiAgICAgIGlmKG5zaCA+IDApIHsgcG0ubFNoaWZ0VG8obnNoLHkpOyBwdC5sU2hpZnRUbyhuc2gscik7IH1cbiAgICAgIGVsc2UgeyBwbS5jb3B5VG8oeSk7IHB0LmNvcHlUbyhyKTsgfVxuICAgICAgdmFyIHlzID0geS50O1xuICAgICAgdmFyIHkwID0geVt5cy0xXTtcbiAgICAgIGlmKHkwID09IDApIHJldHVybjtcbiAgICAgIHZhciB5dCA9IHkwKigxPDx0aGlzLkYxKSsoKHlzPjEpP3lbeXMtMl0+PnRoaXMuRjI6MCk7XG4gICAgICB2YXIgZDEgPSB0aGlzLkZWL3l0LCBkMiA9ICgxPDx0aGlzLkYxKS95dCwgZSA9IDE8PHRoaXMuRjI7XG4gICAgICB2YXIgaSA9IHIudCwgaiA9IGkteXMsIHQgPSAocT09bnVsbCk/bmJpKCk6cTtcbiAgICAgIHkuZGxTaGlmdFRvKGosdCk7XG4gICAgICBpZihyLmNvbXBhcmVUbyh0KSA+PSAwKSB7XG4gICAgICAgIHJbci50KytdID0gMTtcbiAgICAgICAgci5zdWJUbyh0LHIpO1xuICAgICAgfVxuICAgICAgQmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKHlzLHQpO1xuICAgICAgdC5zdWJUbyh5LHkpOyAgLy8gXCJuZWdhdGl2ZVwiIHkgc28gd2UgY2FuIHJlcGxhY2Ugc3ViIHdpdGggYW0gbGF0ZXJcbiAgICAgIHdoaWxlKHkudCA8IHlzKSB5W3kudCsrXSA9IDA7XG4gICAgICB3aGlsZSgtLWogPj0gMCkge1xuICAgICAgICAvLyBFc3RpbWF0ZSBxdW90aWVudCBkaWdpdFxuICAgICAgICB2YXIgcWQgPSAoclstLWldPT15MCk/dGhpcy5ETTpNYXRoLmZsb29yKHJbaV0qZDErKHJbaS0xXStlKSpkMik7XG4gICAgICAgIGlmKChyW2ldKz15LmFtKDAscWQscixqLDAseXMpKSA8IHFkKSB7ICAgLy8gVHJ5IGl0IG91dFxuICAgICAgICAgIHkuZGxTaGlmdFRvKGosdCk7XG4gICAgICAgICAgci5zdWJUbyh0LHIpO1xuICAgICAgICAgIHdoaWxlKHJbaV0gPCAtLXFkKSByLnN1YlRvKHQscik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKHEgIT0gbnVsbCkge1xuICAgICAgICByLmRyU2hpZnRUbyh5cyxxKTtcbiAgICAgICAgaWYodHMgIT0gbXMpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyhxLHEpO1xuICAgICAgfVxuICAgICAgci50ID0geXM7XG4gICAgICByLmNsYW1wKCk7XG4gICAgICBpZihuc2ggPiAwKSByLnJTaGlmdFRvKG5zaCxyKTsgLy8gRGVub3JtYWxpemUgcmVtYWluZGVyXG4gICAgICBpZih0cyA8IDApIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyhyLHIpO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgbW9kIGFcbiAgICBmdW5jdGlvbiBibk1vZChhKSB7XG4gICAgICB2YXIgciA9IG5iaSgpO1xuICAgICAgdGhpcy5hYnMoKS5kaXZSZW1UbyhhLG51bGwscik7XG4gICAgICBpZih0aGlzLnMgPCAwICYmIHIuY29tcGFyZVRvKEJpZ0ludGVnZXIuWkVSTykgPiAwKSBhLnN1YlRvKHIscik7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyBNb2R1bGFyIHJlZHVjdGlvbiB1c2luZyBcImNsYXNzaWNcIiBhbGdvcml0aG1cbiAgICBmdW5jdGlvbiBDbGFzc2ljKG0pIHsgdGhpcy5tID0gbTsgfVxuICAgIGZ1bmN0aW9uIGNDb252ZXJ0KHgpIHtcbiAgICAgIGlmKHgucyA8IDAgfHwgeC5jb21wYXJlVG8odGhpcy5tKSA+PSAwKSByZXR1cm4geC5tb2QodGhpcy5tKTtcbiAgICAgIGVsc2UgcmV0dXJuIHg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNSZXZlcnQoeCkgeyByZXR1cm4geDsgfVxuICAgIGZ1bmN0aW9uIGNSZWR1Y2UoeCkgeyB4LmRpdlJlbVRvKHRoaXMubSxudWxsLHgpOyB9XG4gICAgZnVuY3Rpb24gY011bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuICAgIGZ1bmN0aW9uIGNTcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuICAgIENsYXNzaWMucHJvdG90eXBlLmNvbnZlcnQgPSBjQ29udmVydDtcbiAgICBDbGFzc2ljLnByb3RvdHlwZS5yZXZlcnQgPSBjUmV2ZXJ0O1xuICAgIENsYXNzaWMucHJvdG90eXBlLnJlZHVjZSA9IGNSZWR1Y2U7XG4gICAgQ2xhc3NpYy5wcm90b3R5cGUubXVsVG8gPSBjTXVsVG87XG4gICAgQ2xhc3NpYy5wcm90b3R5cGUuc3FyVG8gPSBjU3FyVG87XG5cbiAgICAvLyAocHJvdGVjdGVkKSByZXR1cm4gXCItMS90aGlzICUgMl5EQlwiOyB1c2VmdWwgZm9yIE1vbnQuIHJlZHVjdGlvblxuICAgIC8vIGp1c3RpZmljYXRpb246XG4gICAgLy8gICAgICAgICB4eSA9PSAxIChtb2QgbSlcbiAgICAvLyAgICAgICAgIHh5ID0gIDEra21cbiAgICAvLyAgIHh5KDIteHkpID0gKDEra20pKDEta20pXG4gICAgLy8geFt5KDIteHkpXSA9IDEta14ybV4yXG4gICAgLy8geFt5KDIteHkpXSA9PSAxIChtb2QgbV4yKVxuICAgIC8vIGlmIHkgaXMgMS94IG1vZCBtLCB0aGVuIHkoMi14eSkgaXMgMS94IG1vZCBtXjJcbiAgICAvLyBzaG91bGQgcmVkdWNlIHggYW5kIHkoMi14eSkgYnkgbV4yIGF0IGVhY2ggc3RlcCB0byBrZWVwIHNpemUgYm91bmRlZC5cbiAgICAvLyBKUyBtdWx0aXBseSBcIm92ZXJmbG93c1wiIGRpZmZlcmVudGx5IGZyb20gQy9DKyssIHNvIGNhcmUgaXMgbmVlZGVkIGhlcmUuXG4gICAgZnVuY3Rpb24gYm5wSW52RGlnaXQoKSB7XG4gICAgICBpZih0aGlzLnQgPCAxKSByZXR1cm4gMDtcbiAgICAgIHZhciB4ID0gdGhpc1swXTtcbiAgICAgIGlmKCh4JjEpID09IDApIHJldHVybiAwO1xuICAgICAgdmFyIHkgPSB4JjM7ICAgICAgIC8vIHkgPT0gMS94IG1vZCAyXjJcbiAgICAgIHkgPSAoeSooMi0oeCYweGYpKnkpKSYweGY7IC8vIHkgPT0gMS94IG1vZCAyXjRcbiAgICAgIHkgPSAoeSooMi0oeCYweGZmKSp5KSkmMHhmZjsgICAvLyB5ID09IDEveCBtb2QgMl44XG4gICAgICB5ID0gKHkqKDItKCgoeCYweGZmZmYpKnkpJjB4ZmZmZikpKSYweGZmZmY7ICAgIC8vIHkgPT0gMS94IG1vZCAyXjE2XG4gICAgICAvLyBsYXN0IHN0ZXAgLSBjYWxjdWxhdGUgaW52ZXJzZSBtb2QgRFYgZGlyZWN0bHk7XG4gICAgICAvLyBhc3N1bWVzIDE2IDwgREIgPD0gMzIgYW5kIGFzc3VtZXMgYWJpbGl0eSB0byBoYW5kbGUgNDgtYml0IGludHNcbiAgICAgIHkgPSAoeSooMi14KnkldGhpcy5EVikpJXRoaXMuRFY7ICAgICAgIC8vIHkgPT0gMS94IG1vZCAyXmRiaXRzXG4gICAgICAvLyB3ZSByZWFsbHkgd2FudCB0aGUgbmVnYXRpdmUgaW52ZXJzZSwgYW5kIC1EViA8IHkgPCBEVlxuICAgICAgcmV0dXJuICh5PjApP3RoaXMuRFYteToteTtcbiAgICB9XG5cbiAgICAvLyBNb250Z29tZXJ5IHJlZHVjdGlvblxuICAgIGZ1bmN0aW9uIE1vbnRnb21lcnkobSkge1xuICAgICAgdGhpcy5tID0gbTtcbiAgICAgIHRoaXMubXAgPSBtLmludkRpZ2l0KCk7XG4gICAgICB0aGlzLm1wbCA9IHRoaXMubXAmMHg3ZmZmO1xuICAgICAgdGhpcy5tcGggPSB0aGlzLm1wPj4xNTtcbiAgICAgIHRoaXMudW0gPSAoMTw8KG0uREItMTUpKS0xO1xuICAgICAgdGhpcy5tdDIgPSAyKm0udDtcbiAgICB9XG5cbiAgICAvLyB4UiBtb2QgbVxuICAgIGZ1bmN0aW9uIG1vbnRDb252ZXJ0KHgpIHtcbiAgICAgIHZhciByID0gbmJpKCk7XG4gICAgICB4LmFicygpLmRsU2hpZnRUbyh0aGlzLm0udCxyKTtcbiAgICAgIHIuZGl2UmVtVG8odGhpcy5tLG51bGwscik7XG4gICAgICBpZih4LnMgPCAwICYmIHIuY29tcGFyZVRvKEJpZ0ludGVnZXIuWkVSTykgPiAwKSB0aGlzLm0uc3ViVG8ocixyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIHgvUiBtb2QgbVxuICAgIGZ1bmN0aW9uIG1vbnRSZXZlcnQoeCkge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIHguY29weVRvKHIpO1xuICAgICAgdGhpcy5yZWR1Y2Uocik7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyB4ID0geC9SIG1vZCBtIChIQUMgMTQuMzIpXG4gICAgZnVuY3Rpb24gbW9udFJlZHVjZSh4KSB7XG4gICAgICB3aGlsZSh4LnQgPD0gdGhpcy5tdDIpIC8vIHBhZCB4IHNvIGFtIGhhcyBlbm91Z2ggcm9vbSBsYXRlclxuICAgICAgICB4W3gudCsrXSA9IDA7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5tLnQ7ICsraSkge1xuICAgICAgICAvLyBmYXN0ZXIgd2F5IG9mIGNhbGN1bGF0aW5nIHUwID0geFtpXSptcCBtb2QgRFZcbiAgICAgICAgdmFyIGogPSB4W2ldJjB4N2ZmZjtcbiAgICAgICAgdmFyIHUwID0gKGoqdGhpcy5tcGwrKCgoaip0aGlzLm1waCsoeFtpXT4+MTUpKnRoaXMubXBsKSZ0aGlzLnVtKTw8MTUpKSZ4LkRNO1xuICAgICAgICAvLyB1c2UgYW0gdG8gY29tYmluZSB0aGUgbXVsdGlwbHktc2hpZnQtYWRkIGludG8gb25lIGNhbGxcbiAgICAgICAgaiA9IGkrdGhpcy5tLnQ7XG4gICAgICAgIHhbal0gKz0gdGhpcy5tLmFtKDAsdTAseCxpLDAsdGhpcy5tLnQpO1xuICAgICAgICAvLyBwcm9wYWdhdGUgY2FycnlcbiAgICAgICAgd2hpbGUoeFtqXSA+PSB4LkRWKSB7IHhbal0gLT0geC5EVjsgeFsrK2pdKys7IH1cbiAgICAgIH1cbiAgICAgIHguY2xhbXAoKTtcbiAgICAgIHguZHJTaGlmdFRvKHRoaXMubS50LHgpO1xuICAgICAgaWYoeC5jb21wYXJlVG8odGhpcy5tKSA+PSAwKSB4LnN1YlRvKHRoaXMubSx4KTtcbiAgICB9XG5cbiAgICAvLyByID0gXCJ4XjIvUiBtb2QgbVwiOyB4ICE9IHJcbiAgICBmdW5jdGlvbiBtb250U3FyVG8oeCxyKSB7IHguc3F1YXJlVG8ocik7IHRoaXMucmVkdWNlKHIpOyB9XG5cbiAgICAvLyByID0gXCJ4eS9SIG1vZCBtXCI7IHgseSAhPSByXG4gICAgZnVuY3Rpb24gbW9udE11bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4gICAgTW9udGdvbWVyeS5wcm90b3R5cGUuY29udmVydCA9IG1vbnRDb252ZXJ0O1xuICAgIE1vbnRnb21lcnkucHJvdG90eXBlLnJldmVydCA9IG1vbnRSZXZlcnQ7XG4gICAgTW9udGdvbWVyeS5wcm90b3R5cGUucmVkdWNlID0gbW9udFJlZHVjZTtcbiAgICBNb250Z29tZXJ5LnByb3RvdHlwZS5tdWxUbyA9IG1vbnRNdWxUbztcbiAgICBNb250Z29tZXJ5LnByb3RvdHlwZS5zcXJUbyA9IG1vbnRTcXJUbztcblxuICAgIC8vIChwcm90ZWN0ZWQpIHRydWUgaWZmIHRoaXMgaXMgZXZlblxuICAgIGZ1bmN0aW9uIGJucElzRXZlbigpIHsgcmV0dXJuICgodGhpcy50PjApPyh0aGlzWzBdJjEpOnRoaXMucykgPT0gMDsgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgdGhpc15lLCBlIDwgMl4zMiwgZG9pbmcgc3FyIGFuZCBtdWwgd2l0aCBcInJcIiAoSEFDIDE0Ljc5KVxuICAgIGZ1bmN0aW9uIGJucEV4cChlLHopIHtcbiAgICAgIGlmKGUgPiAweGZmZmZmZmZmIHx8IGUgPCAxKSByZXR1cm4gQmlnSW50ZWdlci5PTkU7XG4gICAgICB2YXIgciA9IG5iaSgpLCByMiA9IG5iaSgpLCBnID0gei5jb252ZXJ0KHRoaXMpLCBpID0gbmJpdHMoZSktMTtcbiAgICAgIGcuY29weVRvKHIpO1xuICAgICAgd2hpbGUoLS1pID49IDApIHtcbiAgICAgICAgei5zcXJUbyhyLHIyKTtcbiAgICAgICAgaWYoKGUmKDE8PGkpKSA+IDApIHoubXVsVG8ocjIsZyxyKTtcbiAgICAgICAgZWxzZSB7IHZhciB0ID0gcjsgciA9IHIyOyByMiA9IHQ7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB6LnJldmVydChyKTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzXmUgJSBtLCAwIDw9IGUgPCAyXjMyXG4gICAgZnVuY3Rpb24gYm5Nb2RQb3dJbnQoZSxtKSB7XG4gICAgICB2YXIgejtcbiAgICAgIGlmKGUgPCAyNTYgfHwgbS5pc0V2ZW4oKSkgeiA9IG5ldyBDbGFzc2ljKG0pOyBlbHNlIHogPSBuZXcgTW9udGdvbWVyeShtKTtcbiAgICAgIHJldHVybiB0aGlzLmV4cChlLHopO1xuICAgIH1cblxuICAgIC8vIHByb3RlY3RlZFxuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNvcHlUbyA9IGJucENvcHlUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tSW50ID0gYm5wRnJvbUludDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tU3RyaW5nID0gYm5wRnJvbVN0cmluZztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGFtcCA9IGJucENsYW1wO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmRsU2hpZnRUbyA9IGJucERMU2hpZnRUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kclNoaWZ0VG8gPSBibnBEUlNoaWZ0VG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubFNoaWZ0VG8gPSBibnBMU2hpZnRUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5yU2hpZnRUbyA9IGJucFJTaGlmdFRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnN1YlRvID0gYm5wU3ViVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlUbyA9IGJucE11bHRpcGx5VG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc3F1YXJlVG8gPSBibnBTcXVhcmVUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZSZW1UbyA9IGJucERpdlJlbVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmludkRpZ2l0ID0gYm5wSW52RGlnaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuaXNFdmVuID0gYm5wSXNFdmVuO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmV4cCA9IGJucEV4cDtcblxuICAgIC8vIHB1YmxpY1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnRvU3RyaW5nID0gYm5Ub1N0cmluZztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5uZWdhdGUgPSBibk5lZ2F0ZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hYnMgPSBibkFicztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jb21wYXJlVG8gPSBibkNvbXBhcmVUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXRMZW5ndGggPSBibkJpdExlbmd0aDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2QgPSBibk1vZDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RQb3dJbnQgPSBibk1vZFBvd0ludDtcblxuICAgIC8vIFwiY29uc3RhbnRzXCJcbiAgICBCaWdJbnRlZ2VyLlpFUk8gPSBuYnYoMCk7XG4gICAgQmlnSW50ZWdlci5PTkUgPSBuYnYoMSk7XG5cbiAgICAvLyBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSAgVG9tIFd1XG4gICAgLy8gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAgICAvLyBTZWUgXCJMSUNFTlNFXCIgZm9yIGRldGFpbHMuXG5cbiAgICAvLyBFeHRlbmRlZCBKYXZhU2NyaXB0IEJOIGZ1bmN0aW9ucywgcmVxdWlyZWQgZm9yIFJTQSBwcml2YXRlIG9wcy5cblxuICAgIC8vIFZlcnNpb24gMS4xOiBuZXcgQmlnSW50ZWdlcihcIjBcIiwgMTApIHJldHVybnMgXCJwcm9wZXJcIiB6ZXJvXG4gICAgLy8gVmVyc2lvbiAxLjI6IHNxdWFyZSgpIEFQSSwgaXNQcm9iYWJsZVByaW1lIGZpeFxuXG4gICAgLy8gKHB1YmxpYylcbiAgICBmdW5jdGlvbiBibkNsb25lKCkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmNvcHlUbyhyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiB2YWx1ZSBhcyBpbnRlZ2VyXG4gICAgZnVuY3Rpb24gYm5JbnRWYWx1ZSgpIHtcbiAgICAgIGlmKHRoaXMucyA8IDApIHtcbiAgICAgICAgaWYodGhpcy50ID09IDEpIHJldHVybiB0aGlzWzBdLXRoaXMuRFY7XG4gICAgICAgIGVsc2UgaWYodGhpcy50ID09IDApIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYodGhpcy50ID09IDEpIHJldHVybiB0aGlzWzBdO1xuICAgICAgZWxzZSBpZih0aGlzLnQgPT0gMCkgcmV0dXJuIDA7XG4gICAgICAvLyBhc3N1bWVzIDE2IDwgREIgPCAzMlxuICAgICAgcmV0dXJuICgodGhpc1sxXSYoKDE8PCgzMi10aGlzLkRCKSktMSkpPDx0aGlzLkRCKXx0aGlzWzBdO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiB2YWx1ZSBhcyBieXRlXG4gICAgZnVuY3Rpb24gYm5CeXRlVmFsdWUoKSB7IHJldHVybiAodGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDI0KT4+MjQ7IH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiB2YWx1ZSBhcyBzaG9ydCAoYXNzdW1lcyBEQj49MTYpXG4gICAgZnVuY3Rpb24gYm5TaG9ydFZhbHVlKCkgeyByZXR1cm4gKHRoaXMudD09MCk/dGhpcy5zOih0aGlzWzBdPDwxNik+PjE2OyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByZXR1cm4geCBzLnQuIHJeeCA8IERWXG4gICAgZnVuY3Rpb24gYm5wQ2h1bmtTaXplKHIpIHsgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5MTjIqdGhpcy5EQi9NYXRoLmxvZyhyKSk7IH1cblxuICAgIC8vIChwdWJsaWMpIDAgaWYgdGhpcyA9PSAwLCAxIGlmIHRoaXMgPiAwXG4gICAgZnVuY3Rpb24gYm5TaWdOdW0oKSB7XG4gICAgICBpZih0aGlzLnMgPCAwKSByZXR1cm4gLTE7XG4gICAgICBlbHNlIGlmKHRoaXMudCA8PSAwIHx8ICh0aGlzLnQgPT0gMSAmJiB0aGlzWzBdIDw9IDApKSByZXR1cm4gMDtcbiAgICAgIGVsc2UgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgY29udmVydCB0byByYWRpeCBzdHJpbmdcbiAgICBmdW5jdGlvbiBibnBUb1JhZGl4KGIpIHtcbiAgICAgIGlmKGIgPT0gbnVsbCkgYiA9IDEwO1xuICAgICAgaWYodGhpcy5zaWdudW0oKSA9PSAwIHx8IGIgPCAyIHx8IGIgPiAzNikgcmV0dXJuIFwiMFwiO1xuICAgICAgdmFyIGNzID0gdGhpcy5jaHVua1NpemUoYik7XG4gICAgICB2YXIgYSA9IE1hdGgucG93KGIsY3MpO1xuICAgICAgdmFyIGQgPSBuYnYoYSksIHkgPSBuYmkoKSwgeiA9IG5iaSgpLCByID0gXCJcIjtcbiAgICAgIHRoaXMuZGl2UmVtVG8oZCx5LHopO1xuICAgICAgd2hpbGUoeS5zaWdudW0oKSA+IDApIHtcbiAgICAgICAgciA9IChhK3ouaW50VmFsdWUoKSkudG9TdHJpbmcoYikuc3Vic3RyKDEpICsgcjtcbiAgICAgICAgeS5kaXZSZW1UbyhkLHkseik7XG4gICAgICB9XG4gICAgICByZXR1cm4gei5pbnRWYWx1ZSgpLnRvU3RyaW5nKGIpICsgcjtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBjb252ZXJ0IGZyb20gcmFkaXggc3RyaW5nXG4gICAgZnVuY3Rpb24gYm5wRnJvbVJhZGl4KHMsYikge1xuICAgICAgdGhpcy5mcm9tSW50KDApO1xuICAgICAgaWYoYiA9PSBudWxsKSBiID0gMTA7XG4gICAgICB2YXIgY3MgPSB0aGlzLmNodW5rU2l6ZShiKTtcbiAgICAgIHZhciBkID0gTWF0aC5wb3coYixjcyksIG1pID0gZmFsc2UsIGogPSAwLCB3ID0gMDtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciB4ID0gaW50QXQocyxpKTtcbiAgICAgICAgaWYoeCA8IDApIHtcbiAgICAgICAgICBpZihzLmNoYXJBdChpKSA9PSBcIi1cIiAmJiB0aGlzLnNpZ251bSgpID09IDApIG1pID0gdHJ1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB3ID0gYip3K3g7XG4gICAgICAgIGlmKCsraiA+PSBjcykge1xuICAgICAgICAgIHRoaXMuZE11bHRpcGx5KGQpO1xuICAgICAgICAgIHRoaXMuZEFkZE9mZnNldCh3LDApO1xuICAgICAgICAgIGogPSAwO1xuICAgICAgICAgIHcgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihqID4gMCkge1xuICAgICAgICB0aGlzLmRNdWx0aXBseShNYXRoLnBvdyhiLGopKTtcbiAgICAgICAgdGhpcy5kQWRkT2Zmc2V0KHcsMCk7XG4gICAgICB9XG4gICAgICBpZihtaSkgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgYWx0ZXJuYXRlIGNvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gYm5wRnJvbU51bWJlcihhLGIsYykge1xuICAgICAgaWYoXCJudW1iZXJcIiA9PSB0eXBlb2YgYikge1xuICAgICAgICAvLyBuZXcgQmlnSW50ZWdlcihpbnQsaW50LFJORylcbiAgICAgICAgaWYoYSA8IDIpIHRoaXMuZnJvbUludCgxKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5mcm9tTnVtYmVyKGEsYyk7XG4gICAgICAgICAgaWYoIXRoaXMudGVzdEJpdChhLTEpKVx0Ly8gZm9yY2UgTVNCIHNldFxuICAgICAgICAgICAgdGhpcy5iaXR3aXNlVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGEtMSksb3Bfb3IsdGhpcyk7XG4gICAgICAgICAgaWYodGhpcy5pc0V2ZW4oKSkgdGhpcy5kQWRkT2Zmc2V0KDEsMCk7IC8vIGZvcmNlIG9kZFxuICAgICAgICAgIHdoaWxlKCF0aGlzLmlzUHJvYmFibGVQcmltZShiKSkge1xuICAgICAgICAgICAgdGhpcy5kQWRkT2Zmc2V0KDIsMCk7XG4gICAgICAgICAgICBpZih0aGlzLmJpdExlbmd0aCgpID4gYSkgdGhpcy5zdWJUbyhCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQoYS0xKSx0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBuZXcgQmlnSW50ZWdlcihpbnQsUk5HKVxuICAgICAgICB2YXIgeCA9IG5ldyBBcnJheSgpLCB0ID0gYSY3O1xuICAgICAgICB4Lmxlbmd0aCA9IChhPj4zKSsxO1xuICAgICAgICBiLm5leHRCeXRlcyh4KTtcbiAgICAgICAgaWYodCA+IDApIHhbMF0gJj0gKCgxPDx0KS0xKTsgZWxzZSB4WzBdID0gMDtcbiAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHgsMjU2KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAocHVibGljKSBjb252ZXJ0IHRvIGJpZ2VuZGlhbiBieXRlIGFycmF5XG4gICAgZnVuY3Rpb24gYm5Ub0J5dGVBcnJheSgpIHtcbiAgICAgIHZhciBpID0gdGhpcy50LCByID0gbmV3IEFycmF5KCk7XG4gICAgICByWzBdID0gdGhpcy5zO1xuICAgICAgdmFyIHAgPSB0aGlzLkRCLShpKnRoaXMuREIpJTgsIGQsIGsgPSAwO1xuICAgICAgaWYoaS0tID4gMCkge1xuICAgICAgICBpZihwIDwgdGhpcy5EQiAmJiAoZCA9IHRoaXNbaV0+PnApICE9ICh0aGlzLnMmdGhpcy5ETSk+PnApXG4gICAgICAgICAgcltrKytdID0gZHwodGhpcy5zPDwodGhpcy5EQi1wKSk7XG4gICAgICAgIHdoaWxlKGkgPj0gMCkge1xuICAgICAgICAgIGlmKHAgPCA4KSB7XG4gICAgICAgICAgICBkID0gKHRoaXNbaV0mKCgxPDxwKS0xKSk8PCg4LXApO1xuICAgICAgICAgICAgZCB8PSB0aGlzWy0taV0+PihwKz10aGlzLkRCLTgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGQgPSAodGhpc1tpXT4+KHAtPTgpKSYweGZmO1xuICAgICAgICAgICAgaWYocCA8PSAwKSB7IHAgKz0gdGhpcy5EQjsgLS1pOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKChkJjB4ODApICE9IDApIGQgfD0gLTI1NjtcbiAgICAgICAgICBpZihrID09IDAgJiYgKHRoaXMucyYweDgwKSAhPSAoZCYweDgwKSkgKytrO1xuICAgICAgICAgIGlmKGsgPiAwIHx8IGQgIT0gdGhpcy5zKSByW2srK10gPSBkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBibkVxdWFscyhhKSB7IHJldHVybih0aGlzLmNvbXBhcmVUbyhhKT09MCk7IH1cbiAgICBmdW5jdGlvbiBibk1pbihhKSB7IHJldHVybih0aGlzLmNvbXBhcmVUbyhhKTwwKT90aGlzOmE7IH1cbiAgICBmdW5jdGlvbiBibk1heChhKSB7IHJldHVybih0aGlzLmNvbXBhcmVUbyhhKT4wKT90aGlzOmE7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIG9wIGEgKGJpdHdpc2UpXG4gICAgZnVuY3Rpb24gYm5wQml0d2lzZVRvKGEsb3Ascikge1xuICAgICAgdmFyIGksIGYsIG0gPSBNYXRoLm1pbihhLnQsdGhpcy50KTtcbiAgICAgIGZvcihpID0gMDsgaSA8IG07ICsraSkgcltpXSA9IG9wKHRoaXNbaV0sYVtpXSk7XG4gICAgICBpZihhLnQgPCB0aGlzLnQpIHtcbiAgICAgICAgZiA9IGEucyZ0aGlzLkRNO1xuICAgICAgICBmb3IoaSA9IG07IGkgPCB0aGlzLnQ7ICsraSkgcltpXSA9IG9wKHRoaXNbaV0sZik7XG4gICAgICAgIHIudCA9IHRoaXMudDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBmID0gdGhpcy5zJnRoaXMuRE07XG4gICAgICAgIGZvcihpID0gbTsgaSA8IGEudDsgKytpKSByW2ldID0gb3AoZixhW2ldKTtcbiAgICAgICAgci50ID0gYS50O1xuICAgICAgfVxuICAgICAgci5zID0gb3AodGhpcy5zLGEucyk7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAmIGFcbiAgICBmdW5jdGlvbiBvcF9hbmQoeCx5KSB7IHJldHVybiB4Jnk7IH1cbiAgICBmdW5jdGlvbiBibkFuZChhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3BfYW5kLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyB8IGFcbiAgICBmdW5jdGlvbiBvcF9vcih4LHkpIHsgcmV0dXJuIHh8eTsgfVxuICAgIGZ1bmN0aW9uIGJuT3IoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX29yLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyBeIGFcbiAgICBmdW5jdGlvbiBvcF94b3IoeCx5KSB7IHJldHVybiB4Xnk7IH1cbiAgICBmdW5jdGlvbiBiblhvcihhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3BfeG9yLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAmIH5hXG4gICAgZnVuY3Rpb24gb3BfYW5kbm90KHgseSkgeyByZXR1cm4geCZ+eTsgfVxuICAgIGZ1bmN0aW9uIGJuQW5kTm90KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3aXNlVG8oYSxvcF9hbmRub3Qscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB+dGhpc1xuICAgIGZ1bmN0aW9uIGJuTm90KCkge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnQ7ICsraSkgcltpXSA9IHRoaXMuRE0mfnRoaXNbaV07XG4gICAgICByLnQgPSB0aGlzLnQ7XG4gICAgICByLnMgPSB+dGhpcy5zO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyA8PCBuXG4gICAgZnVuY3Rpb24gYm5TaGlmdExlZnQobikge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIGlmKG4gPCAwKSB0aGlzLnJTaGlmdFRvKC1uLHIpOyBlbHNlIHRoaXMubFNoaWZ0VG8obixyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgPj4gblxuICAgIGZ1bmN0aW9uIGJuU2hpZnRSaWdodChuKSB7XG4gICAgICB2YXIgciA9IG5iaSgpO1xuICAgICAgaWYobiA8IDApIHRoaXMubFNoaWZ0VG8oLW4scik7IGVsc2UgdGhpcy5yU2hpZnRUbyhuLHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGluZGV4IG9mIGxvd2VzdCAxLWJpdCBpbiB4LCB4IDwgMl4zMVxuICAgIGZ1bmN0aW9uIGxiaXQoeCkge1xuICAgICAgaWYoeCA9PSAwKSByZXR1cm4gLTE7XG4gICAgICB2YXIgciA9IDA7XG4gICAgICBpZigoeCYweGZmZmYpID09IDApIHsgeCA+Pj0gMTY7IHIgKz0gMTY7IH1cbiAgICAgIGlmKCh4JjB4ZmYpID09IDApIHsgeCA+Pj0gODsgciArPSA4OyB9XG4gICAgICBpZigoeCYweGYpID09IDApIHsgeCA+Pj0gNDsgciArPSA0OyB9XG4gICAgICBpZigoeCYzKSA9PSAwKSB7IHggPj49IDI7IHIgKz0gMjsgfVxuICAgICAgaWYoKHgmMSkgPT0gMCkgKytyO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJucyBpbmRleCBvZiBsb3dlc3QgMS1iaXQgKG9yIC0xIGlmIG5vbmUpXG4gICAgZnVuY3Rpb24gYm5HZXRMb3dlc3RTZXRCaXQoKSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy50OyArK2kpXG4gICAgICAgIGlmKHRoaXNbaV0gIT0gMCkgcmV0dXJuIGkqdGhpcy5EQitsYml0KHRoaXNbaV0pO1xuICAgICAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIHRoaXMudCp0aGlzLkRCO1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8vIHJldHVybiBudW1iZXIgb2YgMSBiaXRzIGluIHhcbiAgICBmdW5jdGlvbiBjYml0KHgpIHtcbiAgICAgIHZhciByID0gMDtcbiAgICAgIHdoaWxlKHggIT0gMCkgeyB4ICY9IHgtMTsgKytyOyB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gbnVtYmVyIG9mIHNldCBiaXRzXG4gICAgZnVuY3Rpb24gYm5CaXRDb3VudCgpIHtcbiAgICAgIHZhciByID0gMCwgeCA9IHRoaXMucyZ0aGlzLkRNO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMudDsgKytpKSByICs9IGNiaXQodGhpc1tpXV54KTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRydWUgaWZmIG50aCBiaXQgaXMgc2V0XG4gICAgZnVuY3Rpb24gYm5UZXN0Qml0KG4pIHtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcihuL3RoaXMuREIpO1xuICAgICAgaWYoaiA+PSB0aGlzLnQpIHJldHVybih0aGlzLnMhPTApO1xuICAgICAgcmV0dXJuKCh0aGlzW2pdJigxPDwobiV0aGlzLkRCKSkpIT0wKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0aGlzIG9wICgxPDxuKVxuICAgIGZ1bmN0aW9uIGJucENoYW5nZUJpdChuLG9wKSB7XG4gICAgICB2YXIgciA9IEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChuKTtcbiAgICAgIHRoaXMuYml0d2lzZVRvKHIsb3Ascik7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIHwgKDE8PG4pXG4gICAgZnVuY3Rpb24gYm5TZXRCaXQobikgeyByZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF9vcik7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgJiB+KDE8PG4pXG4gICAgZnVuY3Rpb24gYm5DbGVhckJpdChuKSB7IHJldHVybiB0aGlzLmNoYW5nZUJpdChuLG9wX2FuZG5vdCk7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgXiAoMTw8bilcbiAgICBmdW5jdGlvbiBibkZsaXBCaXQobikgeyByZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF94b3IpOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyArIGFcbiAgICBmdW5jdGlvbiBibnBBZGRUbyhhLHIpIHtcbiAgICAgIHZhciBpID0gMCwgYyA9IDAsIG0gPSBNYXRoLm1pbihhLnQsdGhpcy50KTtcbiAgICAgIHdoaWxlKGkgPCBtKSB7XG4gICAgICAgIGMgKz0gdGhpc1tpXSthW2ldO1xuICAgICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICB9XG4gICAgICBpZihhLnQgPCB0aGlzLnQpIHtcbiAgICAgICAgYyArPSBhLnM7XG4gICAgICAgIHdoaWxlKGkgPCB0aGlzLnQpIHtcbiAgICAgICAgICBjICs9IHRoaXNbaV07XG4gICAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICAgIH1cbiAgICAgICAgYyArPSB0aGlzLnM7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgYyArPSB0aGlzLnM7XG4gICAgICAgIHdoaWxlKGkgPCBhLnQpIHtcbiAgICAgICAgICBjICs9IGFbaV07XG4gICAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICAgIH1cbiAgICAgICAgYyArPSBhLnM7XG4gICAgICB9XG4gICAgICByLnMgPSAoYzwwKT8tMTowO1xuICAgICAgaWYoYyA+IDApIHJbaSsrXSA9IGM7XG4gICAgICBlbHNlIGlmKGMgPCAtMSkgcltpKytdID0gdGhpcy5EVitjO1xuICAgICAgci50ID0gaTtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzICsgYVxuICAgIGZ1bmN0aW9uIGJuQWRkKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5hZGRUbyhhLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAtIGFcbiAgICBmdW5jdGlvbiBiblN1YnRyYWN0KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5zdWJUbyhhLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAqIGFcbiAgICBmdW5jdGlvbiBibk11bHRpcGx5KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5tdWx0aXBseVRvKGEscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzXjJcbiAgICBmdW5jdGlvbiBiblNxdWFyZSgpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5zcXVhcmVUbyhyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgLyBhXG4gICAgZnVuY3Rpb24gYm5EaXZpZGUoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmRpdlJlbVRvKGEscixudWxsKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgJSBhXG4gICAgZnVuY3Rpb24gYm5SZW1haW5kZXIoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmRpdlJlbVRvKGEsbnVsbCxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIFt0aGlzL2EsdGhpcyVhXVxuICAgIGZ1bmN0aW9uIGJuRGl2aWRlQW5kUmVtYWluZGVyKGEpIHtcbiAgICAgIHZhciBxID0gbmJpKCksIHIgPSBuYmkoKTtcbiAgICAgIHRoaXMuZGl2UmVtVG8oYSxxLHIpO1xuICAgICAgcmV0dXJuIG5ldyBBcnJheShxLHIpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXMgKj0gbiwgdGhpcyA+PSAwLCAxIDwgbiA8IERWXG4gICAgZnVuY3Rpb24gYm5wRE11bHRpcGx5KG4pIHtcbiAgICAgIHRoaXNbdGhpcy50XSA9IHRoaXMuYW0oMCxuLTEsdGhpcywwLDAsdGhpcy50KTtcbiAgICAgICsrdGhpcy50O1xuICAgICAgdGhpcy5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXMgKz0gbiA8PCB3IHdvcmRzLCB0aGlzID49IDBcbiAgICBmdW5jdGlvbiBibnBEQWRkT2Zmc2V0KG4sdykge1xuICAgICAgaWYobiA9PSAwKSByZXR1cm47XG4gICAgICB3aGlsZSh0aGlzLnQgPD0gdykgdGhpc1t0aGlzLnQrK10gPSAwO1xuICAgICAgdGhpc1t3XSArPSBuO1xuICAgICAgd2hpbGUodGhpc1t3XSA+PSB0aGlzLkRWKSB7XG4gICAgICAgIHRoaXNbd10gLT0gdGhpcy5EVjtcbiAgICAgICAgaWYoKyt3ID49IHRoaXMudCkgdGhpc1t0aGlzLnQrK10gPSAwO1xuICAgICAgICArK3RoaXNbd107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQSBcIm51bGxcIiByZWR1Y2VyXG4gICAgZnVuY3Rpb24gTnVsbEV4cCgpIHt9XG4gICAgZnVuY3Rpb24gbk5vcCh4KSB7IHJldHVybiB4OyB9XG4gICAgZnVuY3Rpb24gbk11bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB9XG4gICAgZnVuY3Rpb24gblNxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB9XG5cbiAgICBOdWxsRXhwLnByb3RvdHlwZS5jb252ZXJ0ID0gbk5vcDtcbiAgICBOdWxsRXhwLnByb3RvdHlwZS5yZXZlcnQgPSBuTm9wO1xuICAgIE51bGxFeHAucHJvdG90eXBlLm11bFRvID0gbk11bFRvO1xuICAgIE51bGxFeHAucHJvdG90eXBlLnNxclRvID0gblNxclRvO1xuXG4gICAgLy8gKHB1YmxpYykgdGhpc15lXG4gICAgZnVuY3Rpb24gYm5Qb3coZSkgeyByZXR1cm4gdGhpcy5leHAoZSxuZXcgTnVsbEV4cCgpKTsgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IGxvd2VyIG4gd29yZHMgb2YgXCJ0aGlzICogYVwiLCBhLnQgPD0gblxuICAgIC8vIFwidGhpc1wiIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG9uZSBpZiBhcHByb3ByaWF0ZS5cbiAgICBmdW5jdGlvbiBibnBNdWx0aXBseUxvd2VyVG8oYSxuLHIpIHtcbiAgICAgIHZhciBpID0gTWF0aC5taW4odGhpcy50K2EudCxuKTtcbiAgICAgIHIucyA9IDA7IC8vIGFzc3VtZXMgYSx0aGlzID49IDBcbiAgICAgIHIudCA9IGk7XG4gICAgICB3aGlsZShpID4gMCkgclstLWldID0gMDtcbiAgICAgIHZhciBqO1xuICAgICAgZm9yKGogPSByLnQtdGhpcy50OyBpIDwgajsgKytpKSByW2krdGhpcy50XSA9IHRoaXMuYW0oMCxhW2ldLHIsaSwwLHRoaXMudCk7XG4gICAgICBmb3IoaiA9IE1hdGgubWluKGEudCxuKTsgaSA8IGo7ICsraSkgdGhpcy5hbSgwLGFbaV0scixpLDAsbi1pKTtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gXCJ0aGlzICogYVwiIHdpdGhvdXQgbG93ZXIgbiB3b3JkcywgbiA+IDBcbiAgICAvLyBcInRoaXNcIiBzaG91bGQgYmUgdGhlIGxhcmdlciBvbmUgaWYgYXBwcm9wcmlhdGUuXG4gICAgZnVuY3Rpb24gYm5wTXVsdGlwbHlVcHBlclRvKGEsbixyKSB7XG4gICAgICAtLW47XG4gICAgICB2YXIgaSA9IHIudCA9IHRoaXMudCthLnQtbjtcbiAgICAgIHIucyA9IDA7IC8vIGFzc3VtZXMgYSx0aGlzID49IDBcbiAgICAgIHdoaWxlKC0taSA+PSAwKSByW2ldID0gMDtcbiAgICAgIGZvcihpID0gTWF0aC5tYXgobi10aGlzLnQsMCk7IGkgPCBhLnQ7ICsraSlcbiAgICAgICAgclt0aGlzLnQraS1uXSA9IHRoaXMuYW0obi1pLGFbaV0sciwwLDAsdGhpcy50K2ktbik7XG4gICAgICByLmNsYW1wKCk7XG4gICAgICByLmRyU2hpZnRUbygxLHIpO1xuICAgIH1cblxuICAgIC8vIEJhcnJldHQgbW9kdWxhciByZWR1Y3Rpb25cbiAgICBmdW5jdGlvbiBCYXJyZXR0KG0pIHtcbiAgICAgIC8vIHNldHVwIEJhcnJldHRcbiAgICAgIHRoaXMucjIgPSBuYmkoKTtcbiAgICAgIHRoaXMucTMgPSBuYmkoKTtcbiAgICAgIEJpZ0ludGVnZXIuT05FLmRsU2hpZnRUbygyKm0udCx0aGlzLnIyKTtcbiAgICAgIHRoaXMubXUgPSB0aGlzLnIyLmRpdmlkZShtKTtcbiAgICAgIHRoaXMubSA9IG07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmFycmV0dENvbnZlcnQoeCkge1xuICAgICAgaWYoeC5zIDwgMCB8fCB4LnQgPiAyKnRoaXMubS50KSByZXR1cm4geC5tb2QodGhpcy5tKTtcbiAgICAgIGVsc2UgaWYoeC5jb21wYXJlVG8odGhpcy5tKSA8IDApIHJldHVybiB4O1xuICAgICAgZWxzZSB7IHZhciByID0gbmJpKCk7IHguY29weVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgcmV0dXJuIHI7IH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiYXJyZXR0UmV2ZXJ0KHgpIHsgcmV0dXJuIHg7IH1cblxuICAgIC8vIHggPSB4IG1vZCBtIChIQUMgMTQuNDIpXG4gICAgZnVuY3Rpb24gYmFycmV0dFJlZHVjZSh4KSB7XG4gICAgICB4LmRyU2hpZnRUbyh0aGlzLm0udC0xLHRoaXMucjIpO1xuICAgICAgaWYoeC50ID4gdGhpcy5tLnQrMSkgeyB4LnQgPSB0aGlzLm0udCsxOyB4LmNsYW1wKCk7IH1cbiAgICAgIHRoaXMubXUubXVsdGlwbHlVcHBlclRvKHRoaXMucjIsdGhpcy5tLnQrMSx0aGlzLnEzKTtcbiAgICAgIHRoaXMubS5tdWx0aXBseUxvd2VyVG8odGhpcy5xMyx0aGlzLm0udCsxLHRoaXMucjIpO1xuICAgICAgd2hpbGUoeC5jb21wYXJlVG8odGhpcy5yMikgPCAwKSB4LmRBZGRPZmZzZXQoMSx0aGlzLm0udCsxKTtcbiAgICAgIHguc3ViVG8odGhpcy5yMix4KTtcbiAgICAgIHdoaWxlKHguY29tcGFyZVRvKHRoaXMubSkgPj0gMCkgeC5zdWJUbyh0aGlzLm0seCk7XG4gICAgfVxuXG4gICAgLy8gciA9IHheMiBtb2QgbTsgeCAhPSByXG4gICAgZnVuY3Rpb24gYmFycmV0dFNxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4gICAgLy8gciA9IHgqeSBtb2QgbTsgeCx5ICE9IHJcbiAgICBmdW5jdGlvbiBiYXJyZXR0TXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9XG5cbiAgICBCYXJyZXR0LnByb3RvdHlwZS5jb252ZXJ0ID0gYmFycmV0dENvbnZlcnQ7XG4gICAgQmFycmV0dC5wcm90b3R5cGUucmV2ZXJ0ID0gYmFycmV0dFJldmVydDtcbiAgICBCYXJyZXR0LnByb3RvdHlwZS5yZWR1Y2UgPSBiYXJyZXR0UmVkdWNlO1xuICAgIEJhcnJldHQucHJvdG90eXBlLm11bFRvID0gYmFycmV0dE11bFRvO1xuICAgIEJhcnJldHQucHJvdG90eXBlLnNxclRvID0gYmFycmV0dFNxclRvO1xuXG4gICAgLy8gKHB1YmxpYykgdGhpc15lICUgbSAoSEFDIDE0Ljg1KVxuICAgIGZ1bmN0aW9uIGJuTW9kUG93KGUsbSkge1xuICAgICAgdmFyIGkgPSBlLmJpdExlbmd0aCgpLCBrLCByID0gbmJ2KDEpLCB6O1xuICAgICAgaWYoaSA8PSAwKSByZXR1cm4gcjtcbiAgICAgIGVsc2UgaWYoaSA8IDE4KSBrID0gMTtcbiAgICAgIGVsc2UgaWYoaSA8IDQ4KSBrID0gMztcbiAgICAgIGVsc2UgaWYoaSA8IDE0NCkgayA9IDQ7XG4gICAgICBlbHNlIGlmKGkgPCA3NjgpIGsgPSA1O1xuICAgICAgZWxzZSBrID0gNjtcbiAgICAgIGlmKGkgPCA4KVxuICAgICAgICB6ID0gbmV3IENsYXNzaWMobSk7XG4gICAgICBlbHNlIGlmKG0uaXNFdmVuKCkpXG4gICAgICAgIHogPSBuZXcgQmFycmV0dChtKTtcbiAgICAgIGVsc2VcbiAgICAgICAgeiA9IG5ldyBNb250Z29tZXJ5KG0pO1xuXG4gICAgICAvLyBwcmVjb21wdXRhdGlvblxuICAgICAgdmFyIGcgPSBuZXcgQXJyYXkoKSwgbiA9IDMsIGsxID0gay0xLCBrbSA9ICgxPDxrKS0xO1xuICAgICAgZ1sxXSA9IHouY29udmVydCh0aGlzKTtcbiAgICAgIGlmKGsgPiAxKSB7XG4gICAgICAgIHZhciBnMiA9IG5iaSgpO1xuICAgICAgICB6LnNxclRvKGdbMV0sZzIpO1xuICAgICAgICB3aGlsZShuIDw9IGttKSB7XG4gICAgICAgICAgZ1tuXSA9IG5iaSgpO1xuICAgICAgICAgIHoubXVsVG8oZzIsZ1tuLTJdLGdbbl0pO1xuICAgICAgICAgIG4gKz0gMjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaiA9IGUudC0xLCB3LCBpczEgPSB0cnVlLCByMiA9IG5iaSgpLCB0O1xuICAgICAgaSA9IG5iaXRzKGVbal0pLTE7XG4gICAgICB3aGlsZShqID49IDApIHtcbiAgICAgICAgaWYoaSA+PSBrMSkgdyA9IChlW2pdPj4oaS1rMSkpJmttO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB3ID0gKGVbal0mKCgxPDwoaSsxKSktMSkpPDwoazEtaSk7XG4gICAgICAgICAgaWYoaiA+IDApIHcgfD0gZVtqLTFdPj4odGhpcy5EQitpLWsxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG4gPSBrO1xuICAgICAgICB3aGlsZSgodyYxKSA9PSAwKSB7IHcgPj49IDE7IC0tbjsgfVxuICAgICAgICBpZigoaSAtPSBuKSA8IDApIHsgaSArPSB0aGlzLkRCOyAtLWo7IH1cbiAgICAgICAgaWYoaXMxKSB7XHQvLyByZXQgPT0gMSwgZG9uJ3QgYm90aGVyIHNxdWFyaW5nIG9yIG11bHRpcGx5aW5nIGl0XG4gICAgICAgICAgZ1t3XS5jb3B5VG8ocik7XG4gICAgICAgICAgaXMxID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgd2hpbGUobiA+IDEpIHsgei5zcXJUbyhyLHIyKTsgei5zcXJUbyhyMixyKTsgbiAtPSAyOyB9XG4gICAgICAgICAgaWYobiA+IDApIHouc3FyVG8ocixyMik7IGVsc2UgeyB0ID0gcjsgciA9IHIyOyByMiA9IHQ7IH1cbiAgICAgICAgICB6Lm11bFRvKHIyLGdbd10scik7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZShqID49IDAgJiYgKGVbal0mKDE8PGkpKSA9PSAwKSB7XG4gICAgICAgICAgei5zcXJUbyhyLHIyKTsgdCA9IHI7IHIgPSByMjsgcjIgPSB0O1xuICAgICAgICAgIGlmKC0taSA8IDApIHsgaSA9IHRoaXMuREItMTsgLS1qOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB6LnJldmVydChyKTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSBnY2QodGhpcyxhKSAoSEFDIDE0LjU0KVxuICAgIGZ1bmN0aW9uIGJuR0NEKGEpIHtcbiAgICAgIHZhciB4ID0gKHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXMuY2xvbmUoKTtcbiAgICAgIHZhciB5ID0gKGEuczwwKT9hLm5lZ2F0ZSgpOmEuY2xvbmUoKTtcbiAgICAgIGlmKHguY29tcGFyZVRvKHkpIDwgMCkgeyB2YXIgdCA9IHg7IHggPSB5OyB5ID0gdDsgfVxuICAgICAgdmFyIGkgPSB4LmdldExvd2VzdFNldEJpdCgpLCBnID0geS5nZXRMb3dlc3RTZXRCaXQoKTtcbiAgICAgIGlmKGcgPCAwKSByZXR1cm4geDtcbiAgICAgIGlmKGkgPCBnKSBnID0gaTtcbiAgICAgIGlmKGcgPiAwKSB7XG4gICAgICAgIHguclNoaWZ0VG8oZyx4KTtcbiAgICAgICAgeS5yU2hpZnRUbyhnLHkpO1xuICAgICAgfVxuICAgICAgd2hpbGUoeC5zaWdudW0oKSA+IDApIHtcbiAgICAgICAgaWYoKGkgPSB4LmdldExvd2VzdFNldEJpdCgpKSA+IDApIHguclNoaWZ0VG8oaSx4KTtcbiAgICAgICAgaWYoKGkgPSB5LmdldExvd2VzdFNldEJpdCgpKSA+IDApIHkuclNoaWZ0VG8oaSx5KTtcbiAgICAgICAgaWYoeC5jb21wYXJlVG8oeSkgPj0gMCkge1xuICAgICAgICAgIHguc3ViVG8oeSx4KTtcbiAgICAgICAgICB4LnJTaGlmdFRvKDEseCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgeS5zdWJUbyh4LHkpO1xuICAgICAgICAgIHkuclNoaWZ0VG8oMSx5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoZyA+IDApIHkubFNoaWZ0VG8oZyx5KTtcbiAgICAgIHJldHVybiB5O1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXMgJSBuLCBuIDwgMl4yNlxuICAgIGZ1bmN0aW9uIGJucE1vZEludChuKSB7XG4gICAgICBpZihuIDw9IDApIHJldHVybiAwO1xuICAgICAgdmFyIGQgPSB0aGlzLkRWJW4sIHIgPSAodGhpcy5zPDApP24tMTowO1xuICAgICAgaWYodGhpcy50ID4gMClcbiAgICAgICAgaWYoZCA9PSAwKSByID0gdGhpc1swXSVuO1xuICAgICAgICBlbHNlIGZvcih2YXIgaSA9IHRoaXMudC0xOyBpID49IDA7IC0taSkgciA9IChkKnIrdGhpc1tpXSklbjtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIDEvdGhpcyAlIG0gKEhBQyAxNC42MSlcbiAgICBmdW5jdGlvbiBibk1vZEludmVyc2UobSkge1xuICAgICAgdmFyIGFjID0gbS5pc0V2ZW4oKTtcbiAgICAgIGlmKCh0aGlzLmlzRXZlbigpICYmIGFjKSB8fCBtLnNpZ251bSgpID09IDApIHJldHVybiBCaWdJbnRlZ2VyLlpFUk87XG4gICAgICB2YXIgdSA9IG0uY2xvbmUoKSwgdiA9IHRoaXMuY2xvbmUoKTtcbiAgICAgIHZhciBhID0gbmJ2KDEpLCBiID0gbmJ2KDApLCBjID0gbmJ2KDApLCBkID0gbmJ2KDEpO1xuICAgICAgd2hpbGUodS5zaWdudW0oKSAhPSAwKSB7XG4gICAgICAgIHdoaWxlKHUuaXNFdmVuKCkpIHtcbiAgICAgICAgICB1LnJTaGlmdFRvKDEsdSk7XG4gICAgICAgICAgaWYoYWMpIHtcbiAgICAgICAgICAgIGlmKCFhLmlzRXZlbigpIHx8ICFiLmlzRXZlbigpKSB7IGEuYWRkVG8odGhpcyxhKTsgYi5zdWJUbyhtLGIpOyB9XG4gICAgICAgICAgICBhLnJTaGlmdFRvKDEsYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYoIWIuaXNFdmVuKCkpIGIuc3ViVG8obSxiKTtcbiAgICAgICAgICBiLnJTaGlmdFRvKDEsYik7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUodi5pc0V2ZW4oKSkge1xuICAgICAgICAgIHYuclNoaWZ0VG8oMSx2KTtcbiAgICAgICAgICBpZihhYykge1xuICAgICAgICAgICAgaWYoIWMuaXNFdmVuKCkgfHwgIWQuaXNFdmVuKCkpIHsgYy5hZGRUbyh0aGlzLGMpOyBkLnN1YlRvKG0sZCk7IH1cbiAgICAgICAgICAgIGMuclNoaWZ0VG8oMSxjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZighZC5pc0V2ZW4oKSkgZC5zdWJUbyhtLGQpO1xuICAgICAgICAgIGQuclNoaWZ0VG8oMSxkKTtcbiAgICAgICAgfVxuICAgICAgICBpZih1LmNvbXBhcmVUbyh2KSA+PSAwKSB7XG4gICAgICAgICAgdS5zdWJUbyh2LHUpO1xuICAgICAgICAgIGlmKGFjKSBhLnN1YlRvKGMsYSk7XG4gICAgICAgICAgYi5zdWJUbyhkLGIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHYuc3ViVG8odSx2KTtcbiAgICAgICAgICBpZihhYykgYy5zdWJUbyhhLGMpO1xuICAgICAgICAgIGQuc3ViVG8oYixkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodi5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpICE9IDApIHJldHVybiBCaWdJbnRlZ2VyLlpFUk87XG4gICAgICBpZihkLmNvbXBhcmVUbyhtKSA+PSAwKSByZXR1cm4gZC5zdWJ0cmFjdChtKTtcbiAgICAgIGlmKGQuc2lnbnVtKCkgPCAwKSBkLmFkZFRvKG0sZCk7IGVsc2UgcmV0dXJuIGQ7XG4gICAgICBpZihkLnNpZ251bSgpIDwgMCkgcmV0dXJuIGQuYWRkKG0pOyBlbHNlIHJldHVybiBkO1xuICAgIH1cblxuICAgIHZhciBsb3dwcmltZXMgPSBbMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3XTtcbiAgICB2YXIgbHBsaW0gPSAoMTw8MjYpL2xvd3ByaW1lc1tsb3dwcmltZXMubGVuZ3RoLTFdO1xuXG4gICAgLy8gKHB1YmxpYykgdGVzdCBwcmltYWxpdHkgd2l0aCBjZXJ0YWludHkgPj0gMS0uNV50XG4gICAgZnVuY3Rpb24gYm5Jc1Byb2JhYmxlUHJpbWUodCkge1xuICAgICAgdmFyIGksIHggPSB0aGlzLmFicygpO1xuICAgICAgaWYoeC50ID09IDEgJiYgeFswXSA8PSBsb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSkge1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBsb3dwcmltZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgaWYoeFswXSA9PSBsb3dwcmltZXNbaV0pIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZih4LmlzRXZlbigpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpID0gMTtcbiAgICAgIHdoaWxlKGkgPCBsb3dwcmltZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBtID0gbG93cHJpbWVzW2ldLCBqID0gaSsxO1xuICAgICAgICB3aGlsZShqIDwgbG93cHJpbWVzLmxlbmd0aCAmJiBtIDwgbHBsaW0pIG0gKj0gbG93cHJpbWVzW2orK107XG4gICAgICAgIG0gPSB4Lm1vZEludChtKTtcbiAgICAgICAgd2hpbGUoaSA8IGopIGlmKG0lbG93cHJpbWVzW2krK10gPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHgubWlsbGVyUmFiaW4odCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZiBwcm9iYWJseSBwcmltZSAoSEFDIDQuMjQsIE1pbGxlci1SYWJpbilcbiAgICBmdW5jdGlvbiBibnBNaWxsZXJSYWJpbih0KSB7XG4gICAgICB2YXIgbjEgPSB0aGlzLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTtcbiAgICAgIHZhciBrID0gbjEuZ2V0TG93ZXN0U2V0Qml0KCk7XG4gICAgICBpZihrIDw9IDApIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciByID0gbjEuc2hpZnRSaWdodChrKTtcbiAgICAgIHQgPSAodCsxKT4+MTtcbiAgICAgIGlmKHQgPiBsb3dwcmltZXMubGVuZ3RoKSB0ID0gbG93cHJpbWVzLmxlbmd0aDtcbiAgICAgIHZhciBhID0gbmJpKCk7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdDsgKytpKSB7XG4gICAgICAgIC8vUGljayBiYXNlcyBhdCByYW5kb20sIGluc3RlYWQgb2Ygc3RhcnRpbmcgYXQgMlxuICAgICAgICBhLmZyb21JbnQobG93cHJpbWVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsb3dwcmltZXMubGVuZ3RoKV0pO1xuICAgICAgICB2YXIgeSA9IGEubW9kUG93KHIsdGhpcyk7XG4gICAgICAgIGlmKHkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSAhPSAwICYmIHkuY29tcGFyZVRvKG4xKSAhPSAwKSB7XG4gICAgICAgICAgdmFyIGogPSAxO1xuICAgICAgICAgIHdoaWxlKGorKyA8IGsgJiYgeS5jb21wYXJlVG8objEpICE9IDApIHtcbiAgICAgICAgICAgIHkgPSB5Lm1vZFBvd0ludCgyLHRoaXMpO1xuICAgICAgICAgICAgaWYoeS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpID09IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoeS5jb21wYXJlVG8objEpICE9IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gcHJvdGVjdGVkXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY2h1bmtTaXplID0gYm5wQ2h1bmtTaXplO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnRvUmFkaXggPSBibnBUb1JhZGl4O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21SYWRpeCA9IGJucEZyb21SYWRpeDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tTnVtYmVyID0gYm5wRnJvbU51bWJlcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXR3aXNlVG8gPSBibnBCaXR3aXNlVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY2hhbmdlQml0ID0gYm5wQ2hhbmdlQml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFkZFRvID0gYm5wQWRkVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZE11bHRpcGx5ID0gYm5wRE11bHRpcGx5O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmRBZGRPZmZzZXQgPSBibnBEQWRkT2Zmc2V0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5TG93ZXJUbyA9IGJucE11bHRpcGx5TG93ZXJUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseVVwcGVyVG8gPSBibnBNdWx0aXBseVVwcGVyVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW50ID0gYm5wTW9kSW50O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1pbGxlclJhYmluID0gYm5wTWlsbGVyUmFiaW47XG5cbiAgICAvLyBwdWJsaWNcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbG9uZSA9IGJuQ2xvbmU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuaW50VmFsdWUgPSBibkludFZhbHVlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJ5dGVWYWx1ZSA9IGJuQnl0ZVZhbHVlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNob3J0VmFsdWUgPSBiblNob3J0VmFsdWU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc2lnbnVtID0gYm5TaWdOdW07XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUudG9CeXRlQXJyYXkgPSBiblRvQnl0ZUFycmF5O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmVxdWFscyA9IGJuRXF1YWxzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1pbiA9IGJuTWluO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1heCA9IGJuTWF4O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFuZCA9IGJuQW5kO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm9yID0gYm5PcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS54b3IgPSBiblhvcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmROb3QgPSBibkFuZE5vdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5ub3QgPSBibk5vdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdExlZnQgPSBiblNoaWZ0TGVmdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdFJpZ2h0ID0gYm5TaGlmdFJpZ2h0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmdldExvd2VzdFNldEJpdCA9IGJuR2V0TG93ZXN0U2V0Qml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJpdENvdW50ID0gYm5CaXRDb3VudDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS50ZXN0Qml0ID0gYm5UZXN0Qml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNldEJpdCA9IGJuU2V0Qml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNsZWFyQml0ID0gYm5DbGVhckJpdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5mbGlwQml0ID0gYm5GbGlwQml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFkZCA9IGJuQWRkO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnN1YnRyYWN0ID0gYm5TdWJ0cmFjdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseSA9IGJuTXVsdGlwbHk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlID0gYm5EaXZpZGU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUucmVtYWluZGVyID0gYm5SZW1haW5kZXI7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlQW5kUmVtYWluZGVyID0gYm5EaXZpZGVBbmRSZW1haW5kZXI7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93ID0gYm5Nb2RQb3c7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW52ZXJzZSA9IGJuTW9kSW52ZXJzZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5wb3cgPSBiblBvdztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5nY2QgPSBibkdDRDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5pc1Byb2JhYmxlUHJpbWUgPSBibklzUHJvYmFibGVQcmltZTtcblxuICAgIC8vIEpTQk4tc3BlY2lmaWMgZXh0ZW5zaW9uXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc3F1YXJlID0gYm5TcXVhcmU7XG5cbiAgICAvLyBFeHBvc2UgdGhlIEJhcnJldHQgZnVuY3Rpb25cbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5CYXJyZXR0ID0gQmFycmV0dFxuXG4gICAgLy8gQmlnSW50ZWdlciBpbnRlcmZhY2VzIG5vdCBpbXBsZW1lbnRlZCBpbiBqc2JuOlxuXG4gICAgLy8gQmlnSW50ZWdlcihpbnQgc2lnbnVtLCBieXRlW10gbWFnbml0dWRlKVxuICAgIC8vIGRvdWJsZSBkb3VibGVWYWx1ZSgpXG4gICAgLy8gZmxvYXQgZmxvYXRWYWx1ZSgpXG4gICAgLy8gaW50IGhhc2hDb2RlKClcbiAgICAvLyBsb25nIGxvbmdWYWx1ZSgpXG4gICAgLy8gc3RhdGljIEJpZ0ludGVnZXIgdmFsdWVPZihsb25nIHZhbClcblxuXHQvLyBSYW5kb20gbnVtYmVyIGdlbmVyYXRvciAtIHJlcXVpcmVzIGEgUFJORyBiYWNrZW5kLCBlLmcuIHBybmc0LmpzXG5cblx0Ly8gRm9yIGJlc3QgcmVzdWx0cywgcHV0IGNvZGUgbGlrZVxuXHQvLyA8Ym9keSBvbkNsaWNrPSdybmdfc2VlZF90aW1lKCk7JyBvbktleVByZXNzPSdybmdfc2VlZF90aW1lKCk7Jz5cblx0Ly8gaW4geW91ciBtYWluIEhUTUwgZG9jdW1lbnQuXG5cblx0dmFyIHJuZ19zdGF0ZTtcblx0dmFyIHJuZ19wb29sO1xuXHR2YXIgcm5nX3BwdHI7XG5cblx0Ly8gTWl4IGluIGEgMzItYml0IGludGVnZXIgaW50byB0aGUgcG9vbFxuXHRmdW5jdGlvbiBybmdfc2VlZF9pbnQoeCkge1xuXHQgIHJuZ19wb29sW3JuZ19wcHRyKytdIF49IHggJiAyNTU7XG5cdCAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4gOCkgJiAyNTU7XG5cdCAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4gMTYpICYgMjU1O1xuXHQgIHJuZ19wb29sW3JuZ19wcHRyKytdIF49ICh4ID4+IDI0KSAmIDI1NTtcblx0ICBpZihybmdfcHB0ciA+PSBybmdfcHNpemUpIHJuZ19wcHRyIC09IHJuZ19wc2l6ZTtcblx0fVxuXG5cdC8vIE1peCBpbiB0aGUgY3VycmVudCB0aW1lICh3L21pbGxpc2Vjb25kcykgaW50byB0aGUgcG9vbFxuXHRmdW5jdGlvbiBybmdfc2VlZF90aW1lKCkge1xuXHQgIHJuZ19zZWVkX2ludChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG5cdH1cblxuXHQvLyBJbml0aWFsaXplIHRoZSBwb29sIHdpdGgganVuayBpZiBuZWVkZWQuXG5cdGlmKHJuZ19wb29sID09IG51bGwpIHtcblx0ICBybmdfcG9vbCA9IG5ldyBBcnJheSgpO1xuXHQgIHJuZ19wcHRyID0gMDtcblx0ICB2YXIgdDtcblx0ICBpZih0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5jcnlwdG8pIHtcblx0XHRpZiAod2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcblx0XHQgIC8vIFVzZSB3ZWJjcnlwdG8gaWYgYXZhaWxhYmxlXG5cdFx0ICB2YXIgdWEgPSBuZXcgVWludDhBcnJheSgzMik7XG5cdFx0ICB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyh1YSk7XG5cdFx0ICBmb3IodCA9IDA7IHQgPCAzMjsgKyt0KVxuXHRcdFx0cm5nX3Bvb2xbcm5nX3BwdHIrK10gPSB1YVt0XTtcblx0XHR9XG5cdFx0ZWxzZSBpZihuYXZpZ2F0b3IuYXBwTmFtZSA9PSBcIk5ldHNjYXBlXCIgJiYgbmF2aWdhdG9yLmFwcFZlcnNpb24gPCBcIjVcIikge1xuXHRcdCAgLy8gRXh0cmFjdCBlbnRyb3B5ICgyNTYgYml0cykgZnJvbSBOUzQgUk5HIGlmIGF2YWlsYWJsZVxuXHRcdCAgdmFyIHogPSB3aW5kb3cuY3J5cHRvLnJhbmRvbSgzMik7XG5cdFx0ICBmb3IodCA9IDA7IHQgPCB6Lmxlbmd0aDsgKyt0KVxuXHRcdFx0cm5nX3Bvb2xbcm5nX3BwdHIrK10gPSB6LmNoYXJDb2RlQXQodCkgJiAyNTU7XG5cdFx0fVxuXHQgIH1cblx0ICB3aGlsZShybmdfcHB0ciA8IHJuZ19wc2l6ZSkgeyAgLy8gZXh0cmFjdCBzb21lIHJhbmRvbW5lc3MgZnJvbSBNYXRoLnJhbmRvbSgpXG5cdFx0dCA9IE1hdGguZmxvb3IoNjU1MzYgKiBNYXRoLnJhbmRvbSgpKTtcblx0XHRybmdfcG9vbFtybmdfcHB0cisrXSA9IHQgPj4+IDg7XG5cdFx0cm5nX3Bvb2xbcm5nX3BwdHIrK10gPSB0ICYgMjU1O1xuXHQgIH1cblx0ICBybmdfcHB0ciA9IDA7XG5cdCAgcm5nX3NlZWRfdGltZSgpO1xuXHQgIC8vcm5nX3NlZWRfaW50KHdpbmRvdy5zY3JlZW5YKTtcblx0ICAvL3JuZ19zZWVkX2ludCh3aW5kb3cuc2NyZWVuWSk7XG5cdH1cblxuXHRmdW5jdGlvbiBybmdfZ2V0X2J5dGUoKSB7XG5cdCAgaWYocm5nX3N0YXRlID09IG51bGwpIHtcblx0XHRybmdfc2VlZF90aW1lKCk7XG5cdFx0cm5nX3N0YXRlID0gcHJuZ19uZXdzdGF0ZSgpO1xuXHRcdHJuZ19zdGF0ZS5pbml0KHJuZ19wb29sKTtcblx0XHRmb3Iocm5nX3BwdHIgPSAwOyBybmdfcHB0ciA8IHJuZ19wb29sLmxlbmd0aDsgKytybmdfcHB0cilcblx0XHQgIHJuZ19wb29sW3JuZ19wcHRyXSA9IDA7XG5cdFx0cm5nX3BwdHIgPSAwO1xuXHRcdC8vcm5nX3Bvb2wgPSBudWxsO1xuXHQgIH1cblx0ICAvLyBUT0RPOiBhbGxvdyByZXNlZWRpbmcgYWZ0ZXIgZmlyc3QgcmVxdWVzdFxuXHQgIHJldHVybiBybmdfc3RhdGUubmV4dCgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcm5nX2dldF9ieXRlcyhiYSkge1xuXHQgIHZhciBpO1xuXHQgIGZvcihpID0gMDsgaSA8IGJhLmxlbmd0aDsgKytpKSBiYVtpXSA9IHJuZ19nZXRfYnl0ZSgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gU2VjdXJlUmFuZG9tKCkge31cblxuXHRTZWN1cmVSYW5kb20ucHJvdG90eXBlLm5leHRCeXRlcyA9IHJuZ19nZXRfYnl0ZXM7XG5cblx0Ly8gcHJuZzQuanMgLSB1c2VzIEFyY2ZvdXIgYXMgYSBQUk5HXG5cblx0ZnVuY3Rpb24gQXJjZm91cigpIHtcblx0ICB0aGlzLmkgPSAwO1xuXHQgIHRoaXMuaiA9IDA7XG5cdCAgdGhpcy5TID0gbmV3IEFycmF5KCk7XG5cdH1cblxuXHQvLyBJbml0aWFsaXplIGFyY2ZvdXIgY29udGV4dCBmcm9tIGtleSwgYW4gYXJyYXkgb2YgaW50cywgZWFjaCBmcm9tIFswLi4yNTVdXG5cdGZ1bmN0aW9uIEFSQzRpbml0KGtleSkge1xuXHQgIHZhciBpLCBqLCB0O1xuXHQgIGZvcihpID0gMDsgaSA8IDI1NjsgKytpKVxuXHRcdHRoaXMuU1tpXSA9IGk7XG5cdCAgaiA9IDA7XG5cdCAgZm9yKGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcblx0XHRqID0gKGogKyB0aGlzLlNbaV0gKyBrZXlbaSAlIGtleS5sZW5ndGhdKSAmIDI1NTtcblx0XHR0ID0gdGhpcy5TW2ldO1xuXHRcdHRoaXMuU1tpXSA9IHRoaXMuU1tqXTtcblx0XHR0aGlzLlNbal0gPSB0O1xuXHQgIH1cblx0ICB0aGlzLmkgPSAwO1xuXHQgIHRoaXMuaiA9IDA7XG5cdH1cblxuXHRmdW5jdGlvbiBBUkM0bmV4dCgpIHtcblx0ICB2YXIgdDtcblx0ICB0aGlzLmkgPSAodGhpcy5pICsgMSkgJiAyNTU7XG5cdCAgdGhpcy5qID0gKHRoaXMuaiArIHRoaXMuU1t0aGlzLmldKSAmIDI1NTtcblx0ICB0ID0gdGhpcy5TW3RoaXMuaV07XG5cdCAgdGhpcy5TW3RoaXMuaV0gPSB0aGlzLlNbdGhpcy5qXTtcblx0ICB0aGlzLlNbdGhpcy5qXSA9IHQ7XG5cdCAgcmV0dXJuIHRoaXMuU1sodCArIHRoaXMuU1t0aGlzLmldKSAmIDI1NV07XG5cdH1cblxuXHRBcmNmb3VyLnByb3RvdHlwZS5pbml0ID0gQVJDNGluaXQ7XG5cdEFyY2ZvdXIucHJvdG90eXBlLm5leHQgPSBBUkM0bmV4dDtcblxuXHQvLyBQbHVnIGluIHlvdXIgUk5HIGNvbnN0cnVjdG9yIGhlcmVcblx0ZnVuY3Rpb24gcHJuZ19uZXdzdGF0ZSgpIHtcblx0ICByZXR1cm4gbmV3IEFyY2ZvdXIoKTtcblx0fVxuXG5cdC8vIFBvb2wgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBhbmQgZ3JlYXRlciB0aGFuIDMyLlxuXHQvLyBBbiBhcnJheSBvZiBieXRlcyB0aGUgc2l6ZSBvZiB0aGUgcG9vbCB3aWxsIGJlIHBhc3NlZCB0byBpbml0KClcblx0dmFyIHJuZ19wc2l6ZSA9IDI1NjtcblxuICBCaWdJbnRlZ2VyLlNlY3VyZVJhbmRvbSA9IFNlY3VyZVJhbmRvbTtcbiAgQmlnSW50ZWdlci5CaWdJbnRlZ2VyID0gQmlnSW50ZWdlcjtcbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IEJpZ0ludGVnZXI7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5CaWdJbnRlZ2VyID0gQmlnSW50ZWdlcjtcbiAgICB0aGlzLlNlY3VyZVJhbmRvbSA9IFNlY3VyZVJhbmRvbTtcbiAgfVxuXG59KS5jYWxsKHRoaXMpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCJwbi9mc1wiKTtcbmNvbnN0IHZtID0gcmVxdWlyZShcInZtXCIpO1xuY29uc3QgdG91Z2hDb29raWUgPSByZXF1aXJlKFwidG91Z2gtY29va2llXCIpO1xuY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoXCJyZXF1ZXN0LXByb21pc2UtbmF0aXZlXCIpO1xuY29uc3Qgc25pZmZIVE1MRW5jb2RpbmcgPSByZXF1aXJlKFwiaHRtbC1lbmNvZGluZy1zbmlmZmVyXCIpO1xuY29uc3Qgd2hhdHdnVVJMID0gcmVxdWlyZShcIndoYXR3Zy11cmxcIik7XG5jb25zdCB3aGF0d2dFbmNvZGluZyA9IHJlcXVpcmUoXCJ3aGF0d2ctZW5jb2RpbmdcIik7XG5jb25zdCB7IFVSTCB9ID0gcmVxdWlyZShcIndoYXR3Zy11cmxcIik7XG5jb25zdCBwYXJzZUNvbnRlbnRUeXBlID0gcmVxdWlyZShcImNvbnRlbnQtdHlwZS1wYXJzZXJcIik7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvdXRpbHMuanNcIik7XG5jb25zdCBWaXJ0dWFsQ29uc29sZSA9IHJlcXVpcmUoXCIuL2pzZG9tL3ZpcnR1YWwtY29uc29sZS5qc1wiKTtcbmNvbnN0IFdpbmRvdyA9IHJlcXVpcmUoXCIuL2pzZG9tL2Jyb3dzZXIvV2luZG93LmpzXCIpO1xuY29uc3QgeyBsb2NhdGlvbkluZm8gfSA9IHJlcXVpcmUoXCIuL2pzZG9tL2xpdmluZy9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50cy5qc1wiKTtcbmNvbnN0IHsgZG9tVG9IdG1sIH0gPSByZXF1aXJlKFwiLi9qc2RvbS9icm93c2VyL2RvbXRvaHRtbC5qc1wiKTtcbmNvbnN0IHsgYXBwbHlEb2N1bWVudEZlYXR1cmVzIH0gPSByZXF1aXJlKFwiLi9qc2RvbS9icm93c2VyL2RvY3VtZW50ZmVhdHVyZXMuanNcIik7XG5jb25zdCB7IHdyYXBDb29raWVKYXJGb3JSZXF1ZXN0IH0gPSByZXF1aXJlKFwiLi9qc2RvbS9icm93c2VyL3Jlc291cmNlLWxvYWRlci5qc1wiKTtcbmNvbnN0IHsgdmVyc2lvbjogcGFja2FnZVZlcnNpb24gfSA9IHJlcXVpcmUoXCIuLi9wYWNrYWdlLmpzb25cIik7XG5cbmNvbnN0IERFRkFVTFRfVVNFUl9BR0VOVCA9IGBNb3ppbGxhLzUuMCAoJHtwcm9jZXNzLnBsYXRmb3JtfSkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBganNkb20vJHtwYWNrYWdlVmVyc2lvbn1gO1xuXG4vLyBUaGlzIHN5bWJvbCBhbGxvd3MgdXMgdG8gc211Z2dsZSBhIG5vbi1wdWJsaWMgb3B0aW9uIHRocm91Z2ggdG8gdGhlIEpTRE9NIGNvbnN0cnVjdG9yLCBmb3IgdXNlIGJ5IEpTRE9NLmZyb21VUkwuXG5jb25zdCB0cmFuc3BvcnRMYXllckVuY29kaW5nTGFiZWxIaWRkZW5PcHRpb24gPSBTeW1ib2woXCJ0cmFuc3BvcnRMYXllckVuY29kaW5nTGFiZWxcIik7XG5cbmNsYXNzIENvb2tpZUphciBleHRlbmRzIHRvdWdoQ29va2llLkNvb2tpZUphciB7XG4gIGNvbnN0cnVjdG9yKHN0b3JlLCBvcHRpb25zKSB7XG4gICAgLy8ganNkb20gY29va2llIGphcnMgbXVzdCBiZSBsb29zZSBieSBkZWZhdWx0XG4gICAgc3VwZXIoc3RvcmUsIE9iamVjdC5hc3NpZ24oeyBsb29zZU1vZGU6IHRydWUgfSwgb3B0aW9ucykpO1xuICB9XG59XG5cbmNvbnN0IHdpbmRvdyA9IFN5bWJvbChcIndpbmRvd1wiKTtcbmxldCBzaGFyZWRGcmFnbWVudERvY3VtZW50ID0gbnVsbDtcblxuY2xhc3MgSlNET00ge1xuICBjb25zdHJ1Y3RvcihpbnB1dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgeyBodG1sLCBlbmNvZGluZyB9ID0gbm9ybWFsaXplSFRNTChpbnB1dCwgb3B0aW9uc1t0cmFuc3BvcnRMYXllckVuY29kaW5nTGFiZWxIaWRkZW5PcHRpb25dKTtcbiAgICBvcHRpb25zID0gdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zLCBlbmNvZGluZyk7XG5cbiAgICB0aGlzW3dpbmRvd10gPSBuZXcgV2luZG93KG9wdGlvbnMud2luZG93T3B0aW9ucyk7XG5cbiAgICAvLyBUT0RPIE5FV0FQSTogdGhlIHdob2xlIFwiZmVhdHVyZXNcIiBpbmZyYXN0cnVjdHVyZSBpcyBob3JyaWJsZSBhbmQgc2hvdWxkIGJlIHJlLWJ1aWx0LiBXaGVuIHdlIHN3aXRjaCB0byBuZXdhcGlcbiAgICAvLyB3aG9sZXNhbGUsIG9yIHBlcmhhcHMgYmVmb3JlLCB3ZSBzaG91bGQgcmUtZG8gaXQuIEZvciBub3csIGp1c3QgYWRhcHQgdGhlIG5ldywgbmljZSwgcHVibGljIEFQSSBpbnRvIHRoZSBvbGQsXG4gICAgLy8gdWdseSwgaW50ZXJuYWwgQVBJLlxuICAgIGNvbnN0IGZlYXR1cmVzID0ge1xuICAgICAgRmV0Y2hFeHRlcm5hbFJlc291cmNlczogW10sXG4gICAgICBTa2lwRXh0ZXJuYWxSZXNvdXJjZXM6IGZhbHNlXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zLnJlc291cmNlcyA9PT0gXCJ1c2FibGVcIikge1xuICAgICAgZmVhdHVyZXMuRmV0Y2hFeHRlcm5hbFJlc291cmNlcyA9IFtcImxpbmtcIiwgXCJpbWdcIiwgXCJmcmFtZVwiLCBcImlmcmFtZVwiXTtcbiAgICAgIGlmIChvcHRpb25zLndpbmRvd09wdGlvbnMucnVuU2NyaXB0cyA9PT0gXCJkYW5nZXJvdXNseVwiKSB7XG4gICAgICAgIGZlYXR1cmVzLkZldGNoRXh0ZXJuYWxSZXNvdXJjZXMucHVzaChcInNjcmlwdFwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90ZSB0aGF0IFwiaW1nXCIgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSBjb2RlIGluIEhUTUxJbWFnZUVsZW1lbnQtaW1wbC5qcyBpZiBjYW52YXMgaXMgbm90IGluc3RhbGxlZC5cbiAgICAgIC8vIFRPRE8gTkVXQVBJOiBjbGVhbiB0aGF0IHVwIGFuZCBjZW50cmFsaXplIHRoZSBsb2dpYyBoZXJlLlxuICAgIH1cblxuICAgIGNvbnN0IGRvY3VtZW50SW1wbCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXNbd2luZG93XS5fZG9jdW1lbnQpO1xuICAgIGFwcGx5RG9jdW1lbnRGZWF0dXJlcyhkb2N1bWVudEltcGwsIGZlYXR1cmVzKTtcblxuICAgIG9wdGlvbnMuYmVmb3JlUGFyc2UodGhpc1t3aW5kb3ddLl9nbG9iYWxQcm94eSk7XG5cbiAgICAvLyBUT0RPIE5FV0FQSTogdGhpcyBpcyBzdGlsbCBwcmV0dHkgaGFja3kuIEl0J3MgYWxzbyBkaWZmZXJlbnQgdGhhbiBqc2RvbS5qc2RvbS4gRG9lcyBpdCB3b3JrPyBDYW4gaXQgYmUgYmV0dGVyP1xuICAgIGRvY3VtZW50SW1wbC5faHRtbFRvRG9tLmFwcGVuZEh0bWxUb0RvY3VtZW50KGh0bWwsIGRvY3VtZW50SW1wbCk7XG4gICAgZG9jdW1lbnRJbXBsLmNsb3NlKCk7XG4gIH1cblxuICBnZXQgd2luZG93KCkge1xuICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGdyYWIgdGhlIGdsb2JhbCBwcm94eSwgaW5zdGVhZCBvZiBqdXN0IHRoZSByZXN1bHQgb2YgYG5ldyBXaW5kb3coLi4uKWAsIHNpbmNlIG90aGVyd2lzZSB0aGluZ3NcbiAgICAvLyBsaWtlIGB3aW5kb3cuZXZhbGAgZG9uJ3QgZXhpc3QuXG4gICAgcmV0dXJuIHRoaXNbd2luZG93XS5fZ2xvYmFsUHJveHk7XG4gIH1cblxuICBnZXQgdmlydHVhbENvbnNvbGUoKSB7XG4gICAgcmV0dXJuIHRoaXNbd2luZG93XS5fdmlydHVhbENvbnNvbGU7XG4gIH1cblxuICBnZXQgY29va2llSmFyKCkge1xuICAgIC8vIFRPRE8gTkVXQVBJIG1vdmUgX2Nvb2tpZUphciB0byB3aW5kb3cgcHJvYmFibHlcbiAgICByZXR1cm4gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpc1t3aW5kb3ddLl9kb2N1bWVudCkuX2Nvb2tpZUphcjtcbiAgfVxuXG4gIHNlcmlhbGl6ZSgpIHtcbiAgICByZXR1cm4gZG9tVG9IdG1sKFt0aGlzW3dpbmRvd10uX2RvY3VtZW50XSk7XG4gIH1cblxuICBub2RlTG9jYXRpb24obm9kZSkge1xuICAgIGlmICghaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpc1t3aW5kb3ddLl9kb2N1bWVudCkuX3BhcnNlT3B0aW9ucy5sb2NhdGlvbkluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvY2F0aW9uIGluZm9ybWF0aW9uIHdhcyBub3Qgc2F2ZWQgZm9yIHRoaXMganNkb20uIFVzZSBpbmNsdWRlTm9kZUxvY2F0aW9ucyBkdXJpbmcgY3JlYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihub2RlKVtsb2NhdGlvbkluZm9dO1xuICB9XG5cbiAgcnVuVk1TY3JpcHQoc2NyaXB0KSB7XG4gICAgaWYgKCF2bS5pc0NvbnRleHQodGhpc1t3aW5kb3ddKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoaXMganNkb20gd2FzIG5vdCBjb25maWd1cmVkIHRvIGFsbG93IHNjcmlwdCBydW5uaW5nLiBcIiArXG4gICAgICAgIFwiVXNlIHRoZSBydW5TY3JpcHRzIG9wdGlvbiBkdXJpbmcgY3JlYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBzY3JpcHQucnVuSW5Db250ZXh0KHRoaXNbd2luZG93XSk7XG4gIH1cblxuICByZWNvbmZpZ3VyZShzZXR0aW5ncykge1xuICAgIGlmIChcIndpbmRvd1RvcFwiIGluIHNldHRpbmdzKSB7XG4gICAgICB0aGlzW3dpbmRvd10uX3RvcCA9IHNldHRpbmdzLndpbmRvd1RvcDtcbiAgICB9XG5cbiAgICBpZiAoXCJ1cmxcIiBpbiBzZXR0aW5ncykge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzW3dpbmRvd10uX2RvY3VtZW50KTtcblxuICAgICAgY29uc3QgdXJsID0gd2hhdHdnVVJMLnBhcnNlVVJMKHNldHRpbmdzLnVybCk7XG4gICAgICBpZiAodXJsID09PSBcImZhaWx1cmVcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDb3VsZCBub3QgcGFyc2UgXCIke3NldHRpbmdzLnVybH1cIiBhcyBhIFVSTGApO1xuICAgICAgfVxuXG4gICAgICBkb2N1bWVudC5fVVJMID0gdXJsO1xuICAgICAgZG9jdW1lbnQuX29yaWdpbiA9IHdoYXR3Z1VSTC5zZXJpYWxpemVVUkxUb1VuaWNvZGVPcmlnaW4oZG9jdW1lbnQuX1VSTCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyYWdtZW50KHN0cmluZykge1xuICAgIGlmICghc2hhcmVkRnJhZ21lbnREb2N1bWVudCkge1xuICAgICAgc2hhcmVkRnJhZ21lbnREb2N1bWVudCA9IChuZXcgSlNET00oKSkud2luZG93LmRvY3VtZW50O1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlID0gc2hhcmVkRnJhZ21lbnREb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gc3RyaW5nO1xuICAgIHJldHVybiB0ZW1wbGF0ZS5jb250ZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21VUkwodXJsLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKHVybCk7XG4gICAgICB1cmwgPSBwYXJzZWRVUkwuaHJlZjtcbiAgICAgIG9wdGlvbnMgPSBub3JtYWxpemVGcm9tVVJMT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlLFxuICAgICAgICBlbmNvZGluZzogbnVsbCwgLy8gaS5lLiwgZ2l2ZSBtZSB0aGUgcmF3IEJ1ZmZlclxuICAgICAgICBnemlwOiB0cnVlLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJVc2VyLUFnZW50XCI6IG9wdGlvbnMudXNlckFnZW50LFxuICAgICAgICAgIFJlZmVyZXI6IG9wdGlvbnMucmVmZXJyZXIsXG4gICAgICAgICAgQWNjZXB0OiBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOFwiLFxuICAgICAgICAgIFwiQWNjZXB0LUxhbmd1YWdlXCI6IFwiZW5cIlxuICAgICAgICB9LFxuICAgICAgICBqYXI6IHdyYXBDb29raWVKYXJGb3JSZXF1ZXN0KG9wdGlvbnMuY29va2llSmFyKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlcXVlc3QodXJsLCByZXF1ZXN0T3B0aW9ucykudGhlbihyZXMgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWRDb250ZW50VHlwZSA9IHBhcnNlQ29udGVudFR5cGUocmVzLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pO1xuICAgICAgICBjb25zdCB0cmFuc3BvcnRMYXllckVuY29kaW5nTGFiZWwgPSBwYXJzZWRDb250ZW50VHlwZSAmJiBwYXJzZWRDb250ZW50VHlwZS5nZXQoXCJjaGFyc2V0XCIpO1xuXG4gICAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHtcbiAgICAgICAgICB1cmw6IHJlcy5yZXF1ZXN0LmhyZWYgKyBwYXJzZWRVUkwuaGFzaCxcbiAgICAgICAgICBjb250ZW50VHlwZTogcmVzLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0sXG4gICAgICAgICAgcmVmZXJyZXI6IHJlcy5yZXF1ZXN0LmdldEhlYWRlcihcInJlZmVyZXJcIiksXG4gICAgICAgICAgW3RyYW5zcG9ydExheWVyRW5jb2RpbmdMYWJlbEhpZGRlbk9wdGlvbl06IHRyYW5zcG9ydExheWVyRW5jb2RpbmdMYWJlbFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IEpTRE9NKHJlcy5ib2R5LCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZyb21GaWxlKGZpbGVuYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICBvcHRpb25zID0gbm9ybWFsaXplRnJvbUZpbGVPcHRpb25zKGZpbGVuYW1lLCBvcHRpb25zKTtcblxuICAgICAgcmV0dXJuIGZzLnJlYWRGaWxlKGZpbGVuYW1lKS50aGVuKGJ1ZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgSlNET00oYnVmZmVyLCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb21VUkxPcHRpb25zKG9wdGlvbnMpIHtcbiAgLy8gQ2hlY2tzIG9uIG9wdGlvbnMgdGhhdCBhcmUgaW52YWxpZCBmb3IgYGZyb21VUkxgXG4gIGlmIChvcHRpb25zLnVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBzdXBwbHkgYSB1cmwgb3B0aW9uIHdoZW4gdXNpbmcgZnJvbVVSTFwiKTtcbiAgfVxuICBpZiAob3B0aW9ucy5jb250ZW50VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBzdXBwbHkgYSBjb250ZW50VHlwZSBvcHRpb24gd2hlbiB1c2luZyBmcm9tVVJMXCIpO1xuICB9XG5cbiAgLy8gTm9ybWFsaXphdGlvbiBvZiBvcHRpb25zIHdoaWNoIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIHJlc3Qgb2YgdGhlIGZyb21VUkwgY29kZSBjYW4gdXNlIHRoZW0sIGJlY2F1c2UgdGhleSBhcmVcbiAgLy8gZ2l2ZW4gdG8gcmVxdWVzdCgpXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMudXNlckFnZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICBub3JtYWxpemVkLnVzZXJBZ2VudCA9IERFRkFVTFRfVVNFUl9BR0VOVDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlZmVycmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICBub3JtYWxpemVkLnJlZmVycmVyID0gKG5ldyBVUkwob3B0aW9ucy5yZWZlcnJlcikpLmhyZWY7XG4gIH1cblxuICBpZiAob3B0aW9ucy5jb29raWVKYXIgPT09IHVuZGVmaW5lZCkge1xuICAgIG5vcm1hbGl6ZWQuY29va2llSmFyID0gbmV3IENvb2tpZUphcigpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG5cbiAgLy8gQWxsIG90aGVyIG9wdGlvbnMgZG9uJ3QgbmVlZCB0byBiZSBwcm9jZXNzZWQgeWV0LCBhbmQgY2FuIGJlIHRha2VuIGNhcmUgb2YgaW4gdGhlIG5vcm1hbCBjb3Vyc2Ugb2YgdGhpbmdzIHdoZW5cbiAgLy8gYGZyb21VUkxgIGNhbGxzIGBuZXcgSlNET00oaHRtbCwgb3B0aW9ucylgLlxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVGcm9tRmlsZU9wdGlvbnMoZmlsZW5hbWUsIG9wdGlvbnMpIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuXG4gIGlmIChub3JtYWxpemVkLmNvbnRlbnRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBleHRuYW1lID0gcGF0aC5leHRuYW1lKGZpbGVuYW1lKTtcbiAgICBpZiAoZXh0bmFtZSA9PT0gXCIueGh0bWxcIiB8fCBleHRuYW1lID09PSBcIi54bWxcIikge1xuICAgICAgbm9ybWFsaXplZC5jb250ZW50VHlwZSA9IFwiYXBwbGljYXRpb24veGh0bWwreG1sXCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vcm1hbGl6ZWQudXJsID09PSB1bmRlZmluZWQpIHtcbiAgICBub3JtYWxpemVkLnVybCA9IG5ldyBVUkwoXCJmaWxlOlwiICsgcGF0aC5yZXNvbHZlKGZpbGVuYW1lKSk7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zLCBlbmNvZGluZykge1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHtcbiAgICB3aW5kb3dPcHRpb25zOiB7XG4gICAgICAvLyBEZWZhdWx0c1xuICAgICAgdXJsOiBcImFib3V0OmJsYW5rXCIsXG4gICAgICByZWZlcnJlcjogXCJcIixcbiAgICAgIGNvbnRlbnRUeXBlOiBcInRleHQvaHRtbFwiLFxuICAgICAgcGFyc2luZ01vZGU6IFwiaHRtbFwiLFxuICAgICAgdXNlckFnZW50OiBERUZBVUxUX1VTRVJfQUdFTlQsXG4gICAgICBwYXJzZU9wdGlvbnM6IHsgbG9jYXRpb25JbmZvOiBmYWxzZSB9LFxuICAgICAgcnVuU2NyaXB0czogdW5kZWZpbmVkLFxuICAgICAgZW5jb2RpbmcsXG5cbiAgICAgIC8vIERlZmF1bHRzIGZpbGxlZCBpbiBsYXRlclxuICAgICAgdmlydHVhbENvbnNvbGU6IHVuZGVmaW5lZCxcbiAgICAgIGNvb2tpZUphcjogdW5kZWZpbmVkXG4gICAgfSxcblxuICAgIC8vIERlZmF1bHRzXG4gICAgcmVzb3VyY2VzOiB1bmRlZmluZWQsXG4gICAgYmVmb3JlUGFyc2UoKSB7IH1cbiAgfTtcblxuICBpZiAob3B0aW9ucy5jb250ZW50VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29udGVudFR5cGVQYXJzZWQgPSBwYXJzZUNvbnRlbnRUeXBlKG9wdGlvbnMuY29udGVudFR5cGUpO1xuICAgIGlmIChjb250ZW50VHlwZVBhcnNlZCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IHBhcnNlIHRoZSBnaXZlbiBjb250ZW50IHR5cGUgb2YgXCIke29wdGlvbnMuY29udGVudFR5cGV9XCJgKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnRlbnRUeXBlUGFyc2VkLmlzSFRNTCgpICYmICFjb250ZW50VHlwZVBhcnNlZC5pc1hNTCgpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIGdpdmVuIGNvbnRlbnQgdHlwZSBvZiBcIiR7b3B0aW9ucy5jb250ZW50VHlwZX1cIiB3YXMgbm90IGEgSFRNTCBvciBYTUwgY29udGVudCB0eXBlYCk7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtZWQud2luZG93T3B0aW9ucy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlUGFyc2VkLnR5cGUgKyBcIi9cIiArIGNvbnRlbnRUeXBlUGFyc2VkLnN1YnR5cGU7XG4gICAgdHJhbnNmb3JtZWQud2luZG93T3B0aW9ucy5wYXJzaW5nTW9kZSA9IGNvbnRlbnRUeXBlUGFyc2VkLmlzSFRNTCgpID8gXCJodG1sXCIgOiBcInhtbFwiO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICB0cmFuc2Zvcm1lZC53aW5kb3dPcHRpb25zLnVybCA9IChuZXcgVVJMKG9wdGlvbnMudXJsKSkuaHJlZjtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnJlZmVycmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICB0cmFuc2Zvcm1lZC53aW5kb3dPcHRpb25zLnJlZmVycmVyID0gKG5ldyBVUkwob3B0aW9ucy5yZWZlcnJlcikpLmhyZWY7XG4gIH1cblxuICBpZiAob3B0aW9ucy51c2VyQWdlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRyYW5zZm9ybWVkLndpbmRvd09wdGlvbnMudXNlckFnZW50ID0gU3RyaW5nKG9wdGlvbnMudXNlckFnZW50KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmluY2x1ZGVOb2RlTG9jYXRpb25zKSB7XG4gICAgaWYgKHRyYW5zZm9ybWVkLndpbmRvd09wdGlvbnMucGFyc2luZ01vZGUgPT09IFwieG1sXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgc2V0IGluY2x1ZGVOb2RlTG9jYXRpb25zIHRvIHRydWUgd2l0aCBhbiBYTUwgY29udGVudCB0eXBlXCIpO1xuICAgIH1cblxuICAgIHRyYW5zZm9ybWVkLndpbmRvd09wdGlvbnMucGFyc2VPcHRpb25zID0geyBsb2NhdGlvbkluZm86IHRydWUgfTtcbiAgfVxuXG4gIHRyYW5zZm9ybWVkLndpbmRvd09wdGlvbnMuY29va2llSmFyID0gb3B0aW9ucy5jb29raWVKYXIgPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ29va2llSmFyKCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb29raWVKYXI7XG5cbiAgdHJhbnNmb3JtZWQud2luZG93T3B0aW9ucy52aXJ0dWFsQ29uc29sZSA9IG9wdGlvbnMudmlydHVhbENvbnNvbGUgPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXcgVmlydHVhbENvbnNvbGUoKSkuc2VuZFRvKGNvbnNvbGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy52aXJ0dWFsQ29uc29sZTtcblxuICBpZiAob3B0aW9ucy5yZXNvdXJjZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHRyYW5zZm9ybWVkLnJlc291cmNlcyA9IFN0cmluZyhvcHRpb25zLnJlc291cmNlcyk7XG4gICAgaWYgKHRyYW5zZm9ybWVkLnJlc291cmNlcyAhPT0gXCJ1c2FibGVcIikge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYHJlc291cmNlcyBtdXN0IGJlIHVuZGVmaW5lZCBvciBcInVzYWJsZVwiYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMucnVuU2NyaXB0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdHJhbnNmb3JtZWQud2luZG93T3B0aW9ucy5ydW5TY3JpcHRzID0gU3RyaW5nKG9wdGlvbnMucnVuU2NyaXB0cyk7XG4gICAgaWYgKHRyYW5zZm9ybWVkLndpbmRvd09wdGlvbnMucnVuU2NyaXB0cyAhPT0gXCJkYW5nZXJvdXNseVwiICYmXG4gICAgICAgIHRyYW5zZm9ybWVkLndpbmRvd09wdGlvbnMucnVuU2NyaXB0cyAhPT0gXCJvdXRzaWRlLW9ubHlcIikge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYHJ1blNjcmlwdHMgbXVzdCBiZSB1bmRlZmluZWQsIFwiZGFuZ2Vyb3VzbHlcIiwgb3IgXCJvdXRzaWRlLW9ubHlcImApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLmJlZm9yZVBhcnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0cmFuc2Zvcm1lZC5iZWZvcmVQYXJzZSA9IG9wdGlvbnMuYmVmb3JlUGFyc2U7XG4gIH1cblxuICAvLyBjb25jdXJyZW50Tm9kZUl0ZXJhdG9ycz8/XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVIVE1MKGh0bWwgPSBcIlwiLCB0cmFuc3BvcnRMYXllckVuY29kaW5nTGFiZWwpIHtcbiAgbGV0IGVuY29kaW5nID0gXCJVVEYtOFwiO1xuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoaHRtbCkpIHtcbiAgICBodG1sID0gQnVmZmVyLmZyb20oaHRtbC5idWZmZXIsIGh0bWwuYnl0ZU9mZnNldCwgaHRtbC5ieXRlTGVuZ3RoKTtcbiAgfSBlbHNlIGlmIChodG1sIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICBodG1sID0gQnVmZmVyLmZyb20oaHRtbCk7XG4gIH1cblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGh0bWwpKSB7XG4gICAgZW5jb2RpbmcgPSBzbmlmZkhUTUxFbmNvZGluZyhodG1sLCB7IGRlZmF1bHRFbmNvZGluZzogXCJ3aW5kb3dzLTEyNTJcIiwgdHJhbnNwb3J0TGF5ZXJFbmNvZGluZ0xhYmVsIH0pO1xuICAgIGh0bWwgPSB3aGF0d2dFbmNvZGluZy5kZWNvZGUoaHRtbCwgZW5jb2RpbmcpO1xuICB9IGVsc2Uge1xuICAgIGh0bWwgPSBTdHJpbmcoaHRtbCk7XG4gIH1cblxuICByZXR1cm4geyBodG1sLCBlbmNvZGluZyB9O1xufVxuXG5leHBvcnRzLkpTRE9NID0gSlNET007XG5cbmV4cG9ydHMuVmlydHVhbENvbnNvbGUgPSBWaXJ0dWFsQ29uc29sZTtcbmV4cG9ydHMuQ29va2llSmFyID0gQ29va2llSmFyO1xuXG5leHBvcnRzLnRvdWdoQ29va2llID0gdG91Z2hDb29raWU7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3Qgd2ViSURMQ29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgeyBDU1NTdHlsZURlY2xhcmF0aW9uIH0gPSByZXF1aXJlKFwiY3Nzc3R5bGVcIik7XG5jb25zdCBub3RJbXBsZW1lbnRlZCA9IHJlcXVpcmUoXCIuL25vdC1pbXBsZW1lbnRlZFwiKTtcbmNvbnN0IFZpcnR1YWxDb25zb2xlID0gcmVxdWlyZShcIi4uL3ZpcnR1YWwtY29uc29sZVwiKTtcbmNvbnN0IHsgZGVmaW5lIH0gPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBFdmVudFRhcmdldCA9IHJlcXVpcmUoXCIuLi9saXZpbmcvZ2VuZXJhdGVkL0V2ZW50VGFyZ2V0XCIpO1xuY29uc3QgbmFtZWRQcm9wZXJ0aWVzV2luZG93ID0gcmVxdWlyZShcIi4uL2xpdmluZy9uYW1lZC1wcm9wZXJ0aWVzLXdpbmRvd1wiKTtcbmNvbnN0IGNzc29tID0gcmVxdWlyZShcImNzc29tXCIpO1xuY29uc3QgcG9zdE1lc3NhZ2UgPSByZXF1aXJlKFwiLi4vbGl2aW5nL3Bvc3QtbWVzc2FnZVwiKTtcbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcbmNvbnN0IGJ0b2EgPSByZXF1aXJlKFwiYWJhYlwiKS5idG9hO1xuY29uc3QgYXRvYiA9IHJlcXVpcmUoXCJhYmFiXCIpLmF0b2I7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9saXZpbmcvZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgY3JlYXRlWE1MSHR0cFJlcXVlc3QgPSByZXF1aXJlKFwiLi4vbGl2aW5nL3htbGh0dHByZXF1ZXN0XCIpO1xuY29uc3QgY3JlYXRlRmlsZVJlYWRlciA9IHJlcXVpcmUoXCIuLi9saXZpbmcvZ2VuZXJhdGVkL0ZpbGVSZWFkZXJcIikuY3JlYXRlSW50ZXJmYWNlO1xuY29uc3QgRG9jdW1lbnQgPSByZXF1aXJlKFwiLi4vbGl2aW5nL2dlbmVyYXRlZC9Eb2N1bWVudFwiKTtcbmNvbnN0IE5hdmlnYXRvciA9IHJlcXVpcmUoXCIuLi9saXZpbmcvZ2VuZXJhdGVkL05hdmlnYXRvclwiKTtcbmNvbnN0IHJlcG9ydEV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi9saXZpbmcvaGVscGVycy9ydW50aW1lLXNjcmlwdC1lcnJvcnNcIik7XG5jb25zdCB7IGNvbnRleHRpZnlXaW5kb3cgfSA9IHJlcXVpcmUoXCIuL2RvY3VtZW50ZmVhdHVyZXMuanNcIik7XG5cbi8vIE5COiB0aGUgcmVxdWlyZSgpIG11c3QgYmUgYWZ0ZXIgYXNzaWduaW5nIGBtb2R1bGUuZXhwb3J0c2AgYmVjYXVzZSB0aGlzIHJlcXVpcmUoKSBpcyBjaXJjdWxhclxuLy8gVE9ETzogdGhpcyBhYm92ZSBub3RlIG1pZ2h0IG5vdCBldmVuIGJlIHRydWUgYW55bW9yZS4uLiBmaWd1cmUgb3V0IHRoZSBjeWNsZSBhbmQgZG9jdW1lbnQgaXQsIG9yIGNsZWFuIHVwLlxubW9kdWxlLmV4cG9ydHMgPSBXaW5kb3c7XG5jb25zdCBkb20gPSByZXF1aXJlKFwiLi4vbGl2aW5nXCIpO1xuXG5jb25zdCBjc3NTZWxlY3RvclNwbGl0UkUgPSAvKCg/OlteLFwiJ118XCJbXlwiXSpcInwnW14nXSonKSspLztcblxuY29uc3QgZGVmYXVsdFN0eWxlU2hlZXQgPSBjc3NvbS5wYXJzZShyZXF1aXJlKFwiLi9kZWZhdWx0LXN0eWxlc2hlZXRcIikpO1xuXG5kb20uV2luZG93ID0gV2luZG93O1xuXG4vLyBOT1RFOiBwZXIgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jR2xvYmFsLCBhbGwgcHJvcGVydGllcyBvbiB0aGUgV2luZG93IG9iamVjdCBtdXN0IGJlIG93bi1wcm9wZXJ0aWVzLlxuLy8gVGhhdCBpcyB3aHkgd2UgYXNzaWduIGV2ZXJ5dGhpbmcgaW5zaWRlIG9mIHRoZSBjb25zdHJ1Y3RvciwgaW5zdGVhZCBvZiB1c2luZyBhIHNoYXJlZCBwcm90b3R5cGUuXG4vLyBZb3UgY2FuIHZlcmlmeSB0aGlzIGluIGUuZy4gRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3Jlciwgd2hpY2ggZG8gYSBnb29kIGpvYiB3aXRoIFdlYiBJREwgY29tcGxpYW5jZS5cblxuZnVuY3Rpb24gV2luZG93KG9wdGlvbnMpIHtcbiAgRXZlbnRUYXJnZXQuc2V0dXAodGhpcyk7XG5cbiAgY29uc3Qgd2luZG93ID0gdGhpcztcblxuICAvLy8vLyBJTlRFUkZBQ0VTIEZST00gVEhFIERPTVxuICAvLyBUT0RPOiBjb25zaWRlciBhIG1vZGUgb2Ygc29tZSBzb3J0IHdoZXJlIHRoZXNlIGFyZSBub3Qgc2hhcmVkIGJldHdlZW4gYWxsIERPTSBpbnN0YW5jZXNcbiAgLy8gSXQnZCBiZSB2ZXJ5IG1lbW9yeS1leHBlbnNpdmUgaW4gbW9zdCBjYXNlcywgdGhvdWdoLlxuICBmb3IgKGNvbnN0IG5hbWUgaW4gZG9tKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgbmFtZSwge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBkb21bbmFtZV1cbiAgICB9KTtcbiAgfVxuICB0aGlzLl9jb3JlID0gZG9tO1xuXG4gIC8vLy8vIFBSSVZBVEUgREFUQSBQUk9QRVJUSUVTXG5cbiAgLy8gdm0gaW5pdGlhbGl6YXRpb24gaXMgZGVmZXJlZCB1bnRpbCBzY3JpcHQgcHJvY2Vzc2luZyBpcyBhY3RpdmF0ZWRcbiAgdGhpcy5fZ2xvYmFsUHJveHkgPSB0aGlzO1xuXG4gIHRoaXMuX190aW1lcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIC8vIExpc3Qgb3B0aW9ucyBleHBsaWNpdGx5IHRvIGJlIGNsZWFyIHdoaWNoIGFyZSBwYXNzZWQgdGhyb3VnaFxuICB0aGlzLl9kb2N1bWVudCA9IERvY3VtZW50LmNyZWF0ZShbXSwge1xuICAgIGNvcmU6IGRvbSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBwYXJzaW5nTW9kZTogb3B0aW9ucy5wYXJzaW5nTW9kZSxcbiAgICAgIGNvbnRlbnRUeXBlOiBvcHRpb25zLmNvbnRlbnRUeXBlLFxuICAgICAgZW5jb2Rpbmc6IG9wdGlvbnMuZW5jb2RpbmcsXG4gICAgICBjb29raWVKYXI6IG9wdGlvbnMuY29va2llSmFyLFxuICAgICAgcGFyc2VyOiBvcHRpb25zLnBhcnNlcixcbiAgICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgICBsYXN0TW9kaWZpZWQ6IG9wdGlvbnMubGFzdE1vZGlmaWVkLFxuICAgICAgcmVmZXJyZXI6IG9wdGlvbnMucmVmZXJyZXIsXG4gICAgICBjb29raWU6IG9wdGlvbnMuY29va2llLFxuICAgICAgZGVmZXJDbG9zZTogb3B0aW9ucy5kZWZlckNsb3NlLFxuICAgICAgcmVzb3VyY2VMb2FkZXI6IG9wdGlvbnMucmVzb3VyY2VMb2FkZXIsXG4gICAgICBjb25jdXJyZW50Tm9kZUl0ZXJhdG9yczogb3B0aW9ucy5jb25jdXJyZW50Tm9kZUl0ZXJhdG9ycyxcbiAgICAgIHBvb2w6IG9wdGlvbnMucG9vbCxcbiAgICAgIGFnZW50OiBvcHRpb25zLmFnZW50LFxuICAgICAgYWdlbnRDbGFzczogb3B0aW9ucy5hZ2VudENsYXNzLFxuICAgICAgYWdlbnRPcHRpb25zOiBvcHRpb25zLmFnZW50T3B0aW9ucyxcbiAgICAgIHN0cmljdFNTTDogb3B0aW9ucy5zdHJpY3RTU0wsXG4gICAgICBwcm94eTogb3B0aW9ucy5wcm94eSxcbiAgICAgIHBhcnNlT3B0aW9uczogb3B0aW9ucy5wYXJzZU9wdGlvbnMsXG4gICAgICBkZWZhdWx0VmlldzogdGhpcy5fZ2xvYmFsUHJveHksXG4gICAgICBnbG9iYWw6IHRoaXNcbiAgICB9XG4gIH0pO1xuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzZXNzaW9uLWhpc3RvcnlcbiAgdGhpcy5fc2Vzc2lvbkhpc3RvcnkgPSBbe1xuICAgIGRvY3VtZW50OiBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzLl9kb2N1bWVudCksXG4gICAgdXJsOiBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzLl9kb2N1bWVudCkuX1VSTCxcbiAgICBzdGF0ZU9iamVjdDogbnVsbFxuICB9XTtcbiAgdGhpcy5fY3VycmVudFNlc3Npb25IaXN0b3J5RW50cnlJbmRleCA9IDA7XG5cbiAgLy8gVE9ETyBORVdBUEkgY2FuIHJlbW92ZSB0aGlzXG4gIGlmIChvcHRpb25zLnZpcnR1YWxDb25zb2xlKSB7XG4gICAgaWYgKG9wdGlvbnMudmlydHVhbENvbnNvbGUgaW5zdGFuY2VvZiBWaXJ0dWFsQ29uc29sZSkge1xuICAgICAgdGhpcy5fdmlydHVhbENvbnNvbGUgPSBvcHRpb25zLnZpcnR1YWxDb25zb2xlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIm9wdGlvbnMudmlydHVhbENvbnNvbGUgbXVzdCBiZSBhIFZpcnR1YWxDb25zb2xlIChmcm9tIGNyZWF0ZVZpcnR1YWxDb25zb2xlKVwiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fdmlydHVhbENvbnNvbGUgPSBuZXcgVmlydHVhbENvbnNvbGUoKTtcbiAgfVxuXG4gIHRoaXMuX3J1blNjcmlwdHMgPSBvcHRpb25zLnJ1blNjcmlwdHM7XG4gIGlmICh0aGlzLl9ydW5TY3JpcHRzID09PSBcIm91dHNpZGUtb25seVwiIHx8IHRoaXMuX3J1blNjcmlwdHMgPT09IFwiZGFuZ2Vyb3VzbHlcIikge1xuICAgIGNvbnRleHRpZnlXaW5kb3codGhpcyk7XG4gIH1cblxuICAvLyBTZXQgdXAgdGhlIHdpbmRvdyBhcyBpZiBpdCdzIGEgdG9wIGxldmVsIHdpbmRvdy5cbiAgLy8gSWYgaXQncyBub3QsIHRoZW4gcmVmZXJlbmNlcyB3aWxsIGJlIGNvcnJlY3RlZCBieSBmcmFtZS9pZnJhbWUgY29kZS5cbiAgdGhpcy5fcGFyZW50ID0gdGhpcy5fdG9wID0gdGhpcy5fZ2xvYmFsUHJveHk7XG4gIHRoaXMuX2ZyYW1lRWxlbWVudCA9IG51bGw7XG5cbiAgLy8gVGhpcyBpbXBsZW1lbnRzIHdpbmRvdy5mcmFtZXMubGVuZ3RoLCBzaW5jZSB3aW5kb3cuZnJhbWVzIHJldHVybnMgYVxuICAvLyBzZWxmIHJlZmVyZW5jZSB0byB0aGUgd2luZG93IG9iamVjdC4gIFRoaXMgdmFsdWUgaXMgaW5jcmVtZW50ZWQgaW4gdGhlXG4gIC8vIEhUTUxGcmFtZUVsZW1lbnQgaW1wbGVtZW50YXRpb24uXG4gIHRoaXMuX2xlbmd0aCA9IDA7XG5cbiAgLy8vLy8gR0VUVEVSU1xuXG4gIGNvbnN0IG5hdmlnYXRvciA9IE5hdmlnYXRvci5jcmVhdGUoW10sIHsgdXNlckFnZW50OiBvcHRpb25zLnVzZXJBZ2VudCB9KTtcblxuICBkZWZpbmUodGhpcywge1xuICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICByZXR1cm4gd2luZG93Ll9sZW5ndGg7XG4gICAgfSxcbiAgICBnZXQgd2luZG93KCkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5fZ2xvYmFsUHJveHk7XG4gICAgfSxcbiAgICBnZXQgZnJhbWVFbGVtZW50KCkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5fZnJhbWVFbGVtZW50O1xuICAgIH0sXG4gICAgZ2V0IGZyYW1lcygpIHtcbiAgICAgIHJldHVybiB3aW5kb3cuX2dsb2JhbFByb3h5O1xuICAgIH0sXG4gICAgZ2V0IHNlbGYoKSB7XG4gICAgICByZXR1cm4gd2luZG93Ll9nbG9iYWxQcm94eTtcbiAgICB9LFxuICAgIGdldCBwYXJlbnQoKSB7XG4gICAgICByZXR1cm4gd2luZG93Ll9wYXJlbnQ7XG4gICAgfSxcbiAgICBnZXQgdG9wKCkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5fdG9wO1xuICAgIH0sXG4gICAgZ2V0IGRvY3VtZW50KCkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5fZG9jdW1lbnQ7XG4gICAgfSxcbiAgICBnZXQgbG9jYXRpb24oKSB7XG4gICAgICByZXR1cm4gaWRsVXRpbHMud3JhcHBlckZvckltcGwoaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIod2luZG93Ll9kb2N1bWVudCkuX2xvY2F0aW9uKTtcbiAgICB9LFxuICAgIGdldCBoaXN0b3J5KCkge1xuICAgICAgcmV0dXJuIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHdpbmRvdy5fZG9jdW1lbnQpLl9oaXN0b3J5KTtcbiAgICB9LFxuICAgIGdldCBuYXZpZ2F0b3IoKSB7XG4gICAgICByZXR1cm4gbmF2aWdhdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgbmFtZWRQcm9wZXJ0aWVzV2luZG93LmluaXRpYWxpemVXaW5kb3codGhpcywgZG9tLkhUTUxDb2xsZWN0aW9uKTtcblxuICAvLy8vLyBNRVRIT0RTIGZvciBbSW1wbGljaXRUaGlzXSBoYWNrXG4gIC8vIFNlZSBodHRwczovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvcHVibGljLXNjcmlwdC1jb29yZC8yMDE1SmFuTWFyLzAxMDkuaHRtbFxuICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIgPSB0aGlzLmFkZEV2ZW50TGlzdGVuZXIuYmluZCh0aGlzKTtcbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyID0gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQodGhpcyk7XG4gIHRoaXMuZGlzcGF0Y2hFdmVudCA9IHRoaXMuZGlzcGF0Y2hFdmVudC5iaW5kKHRoaXMpO1xuXG4gIC8vLy8vIE1FVEhPRFNcblxuICBsZXQgbGF0ZXN0VGltZXJJZCA9IDA7XG5cbiAgdGhpcy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKGZuLCBtcykge1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgYXJnc1tpIC0gMl0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBzdGFydFRpbWVyKHdpbmRvdywgc2V0VGltZW91dCwgY2xlYXJUaW1lb3V0LCArK2xhdGVzdFRpbWVySWQsIGZuLCBtcywgYXJncyk7XG4gIH07XG4gIHRoaXMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbiAoZm4sIG1zKSB7XG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcmdzW2kgLSAyXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0VGltZXIod2luZG93LCBzZXRJbnRlcnZhbCwgY2xlYXJJbnRlcnZhbCwgKytsYXRlc3RUaW1lcklkLCBmbiwgbXMsIGFyZ3MpO1xuICB9O1xuICB0aGlzLmNsZWFySW50ZXJ2YWwgPSBzdG9wVGltZXIuYmluZCh0aGlzLCB3aW5kb3cpO1xuICB0aGlzLmNsZWFyVGltZW91dCA9IHN0b3BUaW1lci5iaW5kKHRoaXMsIHdpbmRvdyk7XG4gIHRoaXMuX19zdG9wQWxsVGltZXJzID0gc3RvcEFsbFRpbWVycy5iaW5kKHRoaXMsIHdpbmRvdyk7XG5cbiAgZnVuY3Rpb24gT3B0aW9uKHRleHQsIHZhbHVlLCBkZWZhdWx0U2VsZWN0ZWQsIHNlbGVjdGVkKSB7XG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dCA9IFwiXCI7XG4gICAgfVxuICAgIHRleHQgPSB3ZWJJRExDb252ZXJzaW9ucy5ET01TdHJpbmcodGV4dCk7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWUgPSB3ZWJJRExDb252ZXJzaW9ucy5ET01TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIGRlZmF1bHRTZWxlY3RlZCA9IHdlYklETENvbnZlcnNpb25zLmJvb2xlYW4oZGVmYXVsdFNlbGVjdGVkKTtcbiAgICBzZWxlY3RlZCA9IHdlYklETENvbnZlcnNpb25zLmJvb2xlYW4oc2VsZWN0ZWQpO1xuXG4gICAgY29uc3Qgb3B0aW9uID0gd2luZG93Ll9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgIGNvbnN0IGltcGwgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihvcHRpb24pO1xuXG4gICAgaWYgKHRleHQgIT09IFwiXCIpIHtcbiAgICAgIGltcGwudGV4dCA9IHRleHQ7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbXBsLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGRlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgaW1wbC5zZXRBdHRyaWJ1dGUoXCJzZWxlY3RlZFwiLCBcIlwiKTtcbiAgICB9XG4gICAgaW1wbC5fc2VsZWN0ZWRuZXNzID0gc2VsZWN0ZWQ7XG5cbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcHRpb24sIFwicHJvdG90eXBlXCIsIHtcbiAgICB2YWx1ZTogdGhpcy5IVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIFwiT3B0aW9uXCIsIHtcbiAgICB2YWx1ZTogT3B0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KTtcblxuICBmdW5jdGlvbiBJbWFnZSgpIHtcbiAgICBjb25zdCBpbWcgPSB3aW5kb3cuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgY29uc3QgaW1wbCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKGltZyk7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGltcGwuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgU3RyaW5nKGFyZ3VtZW50c1swXSkpO1xuICAgIH1cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGltcGwuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIFN0cmluZyhhcmd1bWVudHNbMV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1nO1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbWFnZSwgXCJwcm90b3R5cGVcIiwge1xuICAgIHZhbHVlOiB0aGlzLkhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCBcIkltYWdlXCIsIHtcbiAgICB2YWx1ZTogSW1hZ2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIEF1ZGlvKHNyYykge1xuICAgIGNvbnN0IGF1ZGlvID0gd2luZG93Ll9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYXVkaW9cIik7XG4gICAgY29uc3QgaW1wbCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKGF1ZGlvKTtcbiAgICBpbXBsLnNldEF0dHJpYnV0ZShcInByZWxvYWRcIiwgXCJhdXRvXCIpO1xuXG4gICAgaWYgKHNyYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbXBsLnNldEF0dHJpYnV0ZShcInNyY1wiLCBTdHJpbmcoc3JjKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF1ZGlvO1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdWRpbywgXCJwcm90b3R5cGVcIiwge1xuICAgIHZhbHVlOiB0aGlzLkhUTUxBdWRpb0VsZW1lbnQucHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCBcIkF1ZGlvXCIsIHtcbiAgICB2YWx1ZTogQXVkaW8sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHdyYXBDb25zb2xlTWV0aG9kKG1ldGhvZCkge1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgd2luZG93Ll92aXJ0dWFsQ29uc29sZS5lbWl0KG1ldGhvZCwgLi4uYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIHRoaXMucG9zdE1lc3NhZ2UgPSBwb3N0TWVzc2FnZTtcblxuICB0aGlzLmF0b2IgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXRvYihzdHIpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfQ0hBUkFDVEVSX0VSUixcbiAgICAgICAgXCJUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB0aGlzLmJ0b2EgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYnRvYShzdHIpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfQ0hBUkFDVEVSX0VSUixcbiAgICAgICAgXCJUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB0aGlzLkZpbGVSZWFkZXIgPSBjcmVhdGVGaWxlUmVhZGVyKHtcbiAgICB3aW5kb3c6IHRoaXNcbiAgfSkuaW50ZXJmYWNlO1xuXG4gIHRoaXMuWE1MSHR0cFJlcXVlc3QgPSBjcmVhdGVYTUxIdHRwUmVxdWVzdCh0aGlzKTtcblxuICAvLyBUT0RPOiBuZWNlc3NhcnkgZm9yIEJsb2IgYW5kIEZpbGVSZWFkZXIgZHVlIHRvIGRpZmZlcmVudC1nbG9iYWxzIHdlaXJkbmVzczsgaW52ZXN0aWdhdGUgaG93IHRvIGF2b2lkIHRoaXMuXG4gIHRoaXMuQXJyYXlCdWZmZXIgPSBBcnJheUJ1ZmZlcjtcbiAgdGhpcy5JbnQ4QXJyYXkgPSBJbnQ4QXJyYXk7XG4gIHRoaXMuVWludDhBcnJheSA9IFVpbnQ4QXJyYXk7XG4gIHRoaXMuVWludDhDbGFtcGVkQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTtcbiAgdGhpcy5JbnQxNkFycmF5ID0gSW50MTZBcnJheTtcbiAgdGhpcy5VaW50MTZBcnJheSA9IFVpbnQxNkFycmF5O1xuICB0aGlzLkludDMyQXJyYXkgPSBJbnQzMkFycmF5O1xuICB0aGlzLlVpbnQzMkFycmF5ID0gVWludDMyQXJyYXk7XG4gIHRoaXMuRmxvYXQzMkFycmF5ID0gRmxvYXQzMkFycmF5O1xuICB0aGlzLkZsb2F0NjRBcnJheSA9IEZsb2F0NjRBcnJheTtcblxuICB0aGlzLnN0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbWFuYWdlciA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXMuX2RvY3VtZW50KS5fcmVxdWVzdE1hbmFnZXI7XG4gICAgaWYgKG1hbmFnZXIpIHtcbiAgICAgIG1hbmFnZXIuY2xvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjbG9zZSBjaGlsZCBmcmFtZSB3aW5kb3dzLCB0aGVuIG91cnNlbHZlcy5cbiAgICBjb25zdCBjdXJyZW50V2luZG93ID0gdGhpcztcbiAgICAoZnVuY3Rpb24gd2luZG93Q2xlYW5lcih3aW5kb3dUb0NsZWFuKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdpbmRvd1RvQ2xlYW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgd2luZG93Q2xlYW5lcih3aW5kb3dUb0NsZWFuW2ldKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2VcInJlIGFscmVhZHkgaW4gb3VyIG93biB3aW5kb3cuY2xvc2UoKS5cbiAgICAgIGlmICh3aW5kb3dUb0NsZWFuICE9PSBjdXJyZW50V2luZG93KSB7XG4gICAgICAgIHdpbmRvd1RvQ2xlYW4uY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KHRoaXMpKTtcblxuICAgIC8vIENsZWFyIG91dCBhbGwgbGlzdGVuZXJzLiBBbnkgaW4tZmxpZ2h0IG9yIHVwY29taW5nIGV2ZW50cyBzaG91bGQgbm90IGdldCBkZWxpdmVyZWQuXG4gICAgaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpcykuX2V2ZW50TGlzdGVuZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmICh0aGlzLl9kb2N1bWVudCkge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnQuY2xvc2UpIHtcbiAgICAgICAgLy8gSXQncyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byBjbGVhciBvdXQgdGhlIGxpc3RlbmVycyBoZXJlIGJlY2F1c2UgZG9jdW1lbnQuY2xvc2UoKSBjYXVzZXMgYSBcImxvYWRcIiBldmVudCB0b1xuICAgICAgICAvLyBmaXJlLlxuICAgICAgICBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzLl9kb2N1bWVudCkuX2V2ZW50TGlzdGVuZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnQuY2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvYyA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXMuX2RvY3VtZW50KTtcbiAgICAgIGlmIChkb2MuX3JlcXVlc3RNYW5hZ2VyKSB7XG4gICAgICAgIGRvYy5fcmVxdWVzdE1hbmFnZXIuY2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSB0aGlzLl9kb2N1bWVudDtcbiAgICB9XG5cbiAgICBzdG9wQWxsVGltZXJzKGN1cnJlbnRXaW5kb3cpO1xuICB9O1xuXG4gIHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgY29uc3QgcyA9IG5vZGUuc3R5bGU7XG4gICAgY29uc3QgY3MgPSBuZXcgQ1NTU3R5bGVEZWNsYXJhdGlvbigpO1xuICAgIGNvbnN0IGZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDtcblxuICAgIGZ1bmN0aW9uIHNldFByb3BlcnRpZXNGcm9tUnVsZShydWxlKSB7XG4gICAgICBpZiAoIXJ1bGUuc2VsZWN0b3JUZXh0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VsZWN0b3JzID0gcnVsZS5zZWxlY3RvclRleHQuc3BsaXQoY3NzU2VsZWN0b3JTcGxpdFJFKTtcbiAgICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XG4gICAgICBmb3IgKGNvbnN0IHNlbGVjdG9yVGV4dCBvZiBzZWxlY3RvcnMpIHtcbiAgICAgICAgaWYgKHNlbGVjdG9yVGV4dCAhPT0gXCJcIiAmJiBzZWxlY3RvclRleHQgIT09IFwiLFwiICYmICFtYXRjaGVkICYmIG1hdGNoZXNEb250VGhyb3cobm9kZSwgc2VsZWN0b3JUZXh0KSkge1xuICAgICAgICAgIG1hdGNoZWQgPSB0cnVlO1xuICAgICAgICAgIGZvckVhY2guY2FsbChydWxlLnN0eWxlLCBwcm9wZXJ0eSA9PiB7XG4gICAgICAgICAgICBjcy5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgcnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSwgcnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BlcnR5KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkU3R5bGVzRnJvbVN0eWxlU2hlZXQoc2hlZXQpIHtcbiAgICAgIGZvckVhY2guY2FsbChzaGVldC5jc3NSdWxlcywgcnVsZSA9PiB7XG4gICAgICAgIGlmIChydWxlLm1lZGlhKSB7XG4gICAgICAgICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwocnVsZS5tZWRpYSwgXCJzY3JlZW5cIikgIT09IC0xKSB7XG4gICAgICAgICAgICBmb3JFYWNoLmNhbGwocnVsZS5jc3NSdWxlcywgc2V0UHJvcGVydGllc0Zyb21SdWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0UHJvcGVydGllc0Zyb21SdWxlKHJ1bGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZWFkU3R5bGVzRnJvbVN0eWxlU2hlZXQoZGVmYXVsdFN0eWxlU2hlZXQpO1xuICAgIGZvckVhY2guY2FsbChub2RlLm93bmVyRG9jdW1lbnQuc3R5bGVTaGVldHMsIHJlYWRTdHlsZXNGcm9tU3R5bGVTaGVldCk7XG5cbiAgICBmb3JFYWNoLmNhbGwocywgcHJvcGVydHkgPT4ge1xuICAgICAgY3Muc2V0UHJvcGVydHkocHJvcGVydHksIHMuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSksIHMuZ2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0eSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNzO1xuICB9O1xuXG4gIC8vLy8vIFBVQkxJQyBEQVRBIFBST1BFUlRJRVMgKFRPRE86IHNob3VsZCBiZSBnZXR0ZXJzKVxuXG4gIHRoaXMuY29uc29sZSA9IHtcbiAgICBhc3NlcnQ6IHdyYXBDb25zb2xlTWV0aG9kKFwiYXNzZXJ0XCIpLFxuICAgIGNsZWFyOiB3cmFwQ29uc29sZU1ldGhvZChcImNsZWFyXCIpLFxuICAgIGNvdW50OiB3cmFwQ29uc29sZU1ldGhvZChcImNvdW50XCIpLFxuICAgIGRlYnVnOiB3cmFwQ29uc29sZU1ldGhvZChcImRlYnVnXCIpLFxuICAgIGVycm9yOiB3cmFwQ29uc29sZU1ldGhvZChcImVycm9yXCIpLFxuICAgIGdyb3VwOiB3cmFwQ29uc29sZU1ldGhvZChcImdyb3VwXCIpLFxuICAgIGdyb3VwQ29sbGFwc2VkOiB3cmFwQ29uc29sZU1ldGhvZChcImdyb3VwQ29sbGFwc2VkXCIpLFxuICAgIGdyb3VwRW5kOiB3cmFwQ29uc29sZU1ldGhvZChcImdyb3VwRW5kXCIpLFxuICAgIGluZm86IHdyYXBDb25zb2xlTWV0aG9kKFwiaW5mb1wiKSxcbiAgICBsb2c6IHdyYXBDb25zb2xlTWV0aG9kKFwibG9nXCIpLFxuICAgIHRhYmxlOiB3cmFwQ29uc29sZU1ldGhvZChcInRhYmxlXCIpLFxuICAgIHRpbWU6IHdyYXBDb25zb2xlTWV0aG9kKFwidGltZVwiKSxcbiAgICB0aW1lRW5kOiB3cmFwQ29uc29sZU1ldGhvZChcInRpbWVFbmRcIiksXG4gICAgdHJhY2U6IHdyYXBDb25zb2xlTWV0aG9kKFwidHJhY2VcIiksXG4gICAgd2Fybjogd3JhcENvbnNvbGVNZXRob2QoXCJ3YXJuXCIpXG4gIH07XG5cbiAgZnVuY3Rpb24gbm90SW1wbGVtZW50ZWRNZXRob2QobmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBub3RJbXBsZW1lbnRlZChuYW1lLCB3aW5kb3cpO1xuICAgIH07XG4gIH1cblxuICBkZWZpbmUodGhpcywge1xuICAgIG5hbWU6IFwibm9kZWpzXCIsXG4gICAgaW5uZXJXaWR0aDogMTAyNCxcbiAgICBpbm5lckhlaWdodDogNzY4LFxuICAgIG91dGVyV2lkdGg6IDEwMjQsXG4gICAgb3V0ZXJIZWlnaHQ6IDc2OCxcbiAgICBwYWdlWE9mZnNldDogMCxcbiAgICBwYWdlWU9mZnNldDogMCxcbiAgICBzY3JlZW5YOiAwLFxuICAgIHNjcmVlblk6IDAsXG4gICAgc2NyZWVuTGVmdDogMCxcbiAgICBzY3JlZW5Ub3A6IDAsXG4gICAgc2Nyb2xsWDogMCxcbiAgICBzY3JvbGxZOiAwLFxuICAgIHNjcm9sbFRvcDogMCxcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcmVlbjoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9LFxuXG4gICAgYWxlcnQ6IG5vdEltcGxlbWVudGVkTWV0aG9kKFwid2luZG93LmFsZXJ0XCIpLFxuICAgIGJsdXI6IG5vdEltcGxlbWVudGVkTWV0aG9kKFwid2luZG93LmJsdXJcIiksXG4gICAgY29uZmlybTogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cuY29uZmlybVwiKSxcbiAgICBjcmVhdGVQb3B1cDogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cuY3JlYXRlUG9wdXBcIiksXG4gICAgZm9jdXM6IG5vdEltcGxlbWVudGVkTWV0aG9kKFwid2luZG93LmZvY3VzXCIpLFxuICAgIG1vdmVCeTogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cubW92ZUJ5XCIpLFxuICAgIG1vdmVUbzogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cubW92ZVRvXCIpLFxuICAgIG9wZW46IG5vdEltcGxlbWVudGVkTWV0aG9kKFwid2luZG93Lm9wZW5cIiksXG4gICAgcHJpbnQ6IG5vdEltcGxlbWVudGVkTWV0aG9kKFwid2luZG93LnByaW50XCIpLFxuICAgIHByb21wdDogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cucHJvbXB0XCIpLFxuICAgIHJlc2l6ZUJ5OiBub3RJbXBsZW1lbnRlZE1ldGhvZChcIndpbmRvdy5yZXNpemVCeVwiKSxcbiAgICByZXNpemVUbzogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cucmVzaXplVG9cIiksXG4gICAgc2Nyb2xsOiBub3RJbXBsZW1lbnRlZE1ldGhvZChcIndpbmRvdy5zY3JvbGxcIiksXG4gICAgc2Nyb2xsQnk6IG5vdEltcGxlbWVudGVkTWV0aG9kKFwid2luZG93LnNjcm9sbEJ5XCIpLFxuICAgIHNjcm9sbFRvOiBub3RJbXBsZW1lbnRlZE1ldGhvZChcIndpbmRvdy5zY3JvbGxUb1wiKVxuICB9KTtcblxuICAvLy8vLyBJTklUSUFMSVpBVElPTlxuXG4gIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgIGlmICghd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm47IC8vIHdpbmRvdyBtaWdodCd2ZSBiZWVuIGNsb3NlZCBhbHJlYWR5XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5kb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgIGNvbnN0IGV2ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiSFRNTEV2ZW50c1wiKTtcbiAgICAgIGV2LmluaXRFdmVudChcImxvYWRcIiwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO1xuICAgICAgICBldi5pbml0RXZlbnQoXCJsb2FkXCIsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihXaW5kb3csIEV2ZW50VGFyZ2V0LmludGVyZmFjZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoV2luZG93LnByb3RvdHlwZSwgRXZlbnRUYXJnZXQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5XaW5kb3cucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIldpbmRvd1wiO1xuXG5mdW5jdGlvbiBtYXRjaGVzRG9udFRocm93KGVsLCBzZWxlY3Rvcikge1xuICB0cnkge1xuICAgIHJldHVybiBlbC5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydFRpbWVyKHdpbmRvdywgc3RhcnRGbiwgc3RvcEZuLCB0aW1lcklkLCBjYWxsYmFjaywgbXMsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc3QgY29kZSA9IFN0cmluZyhjYWxsYmFjayk7XG4gICAgY2FsbGJhY2sgPSB3aW5kb3cuX2dsb2JhbFByb3h5LmV2YWwuYmluZCh3aW5kb3csIGNvZGUgKyBgXFxuLy8jIHNvdXJjZVVSTD0ke3dpbmRvdy5sb2NhdGlvbi5ocmVmfWApO1xuICB9XG5cbiAgY29uc3Qgb2xkQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIG9sZENhbGxiYWNrLmFwcGx5KHdpbmRvdy5fZ2xvYmFsUHJveHksIGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlcG9ydEV4Y2VwdGlvbih3aW5kb3csIGUsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVzID0gc3RhcnRGbihjYWxsYmFjaywgbXMpO1xuICB3aW5kb3cuX190aW1lcnNbdGltZXJJZF0gPSBbcmVzLCBzdG9wRm5dO1xuICByZXR1cm4gdGltZXJJZDtcbn1cblxuZnVuY3Rpb24gc3RvcFRpbWVyKHdpbmRvdywgaWQpIHtcbiAgY29uc3QgdGltZXIgPSB3aW5kb3cuX190aW1lcnNbaWRdO1xuICBpZiAodGltZXIpIHtcbiAgICAvLyBOZWVkIHRvIC5jYWxsKCkgd2l0aCB1bmRlZmluZWQgdG8gZW5zdXJlIHRoZSB0aGlzQXJnIGlzIG5vdCB0aW1lciBpdHNlbGZcbiAgICB0aW1lclsxXS5jYWxsKHVuZGVmaW5lZCwgdGltZXJbMF0pO1xuICAgIGRlbGV0ZSB3aW5kb3cuX190aW1lcnNbaWRdO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3BBbGxUaW1lcnMod2luZG93KSB7XG4gIE9iamVjdC5rZXlzKHdpbmRvdy5fX3RpbWVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGNvbnN0IHRpbWVyID0gd2luZG93Ll9fdGltZXJzW2tleV07XG4gICAgLy8gTmVlZCB0byAuY2FsbCgpIHdpdGggdW5kZWZpbmVkIHRvIGVuc3VyZSB0aGUgdGhpc0FyZyBpcyBub3QgdGltZXIgaXRzZWxmXG4gICAgdGltZXJbMV0uY2FsbCh1bmRlZmluZWQsIHRpbWVyWzBdKTtcbiAgfSk7XG4gIHdpbmRvdy5fX3RpbWVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG4iLCIvLyBJZGVhbGx5LCB3ZSB3b3VsZCB1c2Vcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3JlbmRlcmluZy5odG1sI3RoZS1jc3MtdXNlci1hZ2VudC1zdHlsZS1zaGVldC1hbmQtcHJlc2VudGF0aW9uYWwtaGludHNcbi8vIGJ1dCBmb3Igbm93LCBqdXN0IHVzZSB0aGUgdmVyc2lvbiBmcm9tIGJsaW5rLiBUaGlzIGZpbGUgaXMgY29waWVkIGZyb21cbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rLzk2YWEzYTI4MGFiN2Q2NzE3OGM4ZjEyMmEwNDk0OWNlNWY4NTc5ZTAvU291cmNlL2NvcmUvY3NzL2h0bWwuY3NzXG4vLyAocmVtb3ZlZCBhIGxpbmUgd2hpY2ggaGFkIG9jdGFsIGxpdGVyYWxzIGluc2lkZSBzaW5jZSBvY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gdGVtcGxhdGUgc3RyaW5ncylcblxuLy8gV2UgdXNlIGEgLmpzIGZpbGUgYmVjYXVzZSBvdGhlcndpc2Ugd2UgY2FuJ3QgYnJvd3NlcmlmeSB0aGlzLiAoYnJmcyBpcyB1bnVzYWJsZSBkdWUgdG8gbGFjayBvZiBFUzIwMTUgc3VwcG9ydClcblxubW9kdWxlLmV4cG9ydHMgPSBgXG4vKlxuICogVGhlIGRlZmF1bHQgc3R5bGUgc2hlZXQgdXNlZCB0byByZW5kZXIgSFRNTC5cbiAqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZylcbiAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWNcbiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlclxuICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VXG4gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0b1xuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcixcbiAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLlxuICpcbiAqL1xuXG5AbmFtZXNwYWNlIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5odG1sIHtcbiAgICBkaXNwbGF5OiBibG9ja1xufVxuXG46cm9vdCB7XG4gICAgc2Nyb2xsLWJsb2Nrcy1vbjogc3RhcnQtdG91Y2ggd2hlZWwtZXZlbnRcbn1cblxuLyogY2hpbGRyZW4gb2YgdGhlIDxoZWFkPiBlbGVtZW50IGFsbCBoYXZlIGRpc3BsYXk6bm9uZSAqL1xuaGVhZCB7XG4gICAgZGlzcGxheTogbm9uZVxufVxuXG5tZXRhIHtcbiAgICBkaXNwbGF5OiBub25lXG59XG5cbnRpdGxlIHtcbiAgICBkaXNwbGF5OiBub25lXG59XG5cbmxpbmsge1xuICAgIGRpc3BsYXk6IG5vbmVcbn1cblxuc3R5bGUge1xuICAgIGRpc3BsYXk6IG5vbmVcbn1cblxuc2NyaXB0IHtcbiAgICBkaXNwbGF5OiBub25lXG59XG5cbi8qIGdlbmVyaWMgYmxvY2stbGV2ZWwgZWxlbWVudHMgKi9cblxuYm9keSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiA4cHhcbn1cblxuYm9keTotd2Via2l0LWZ1bGwtcGFnZS1tZWRpYSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDAsIDApXG59XG5cbnAge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMV9fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAxX19xZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDA7XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiAwO1xufVxuXG5kaXYge1xuICAgIGRpc3BsYXk6IGJsb2NrXG59XG5cbmxheWVyIHtcbiAgICBkaXNwbGF5OiBibG9ja1xufVxuXG5hcnRpY2xlLCBhc2lkZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWFpbiwgbmF2LCBzZWN0aW9uIHtcbiAgICBkaXNwbGF5OiBibG9ja1xufVxuXG5tYXJxdWVlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbmFkZHJlc3Mge1xuICAgIGRpc3BsYXk6IGJsb2NrXG59XG5cbmJsb2NrcXVvdGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMV9fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAxZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDQwcHg7XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiA0MHB4O1xufVxuXG5maWdjYXB0aW9uIHtcbiAgICBkaXNwbGF5OiBibG9ja1xufVxuXG5maWd1cmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAxZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDQwcHg7XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiA0MHB4O1xufVxuXG5xIHtcbiAgICBkaXNwbGF5OiBpbmxpbmVcbn1cblxucTpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IG9wZW4tcXVvdGU7XG59XG5cbnE6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IGNsb3NlLXF1b3RlO1xufVxuXG5jZW50ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC8qIHNwZWNpYWwgY2VudGVyaW5nIHRvIGJlIGFibGUgdG8gZW11bGF0ZSB0aGUgaHRtbDQvbmV0c2NhcGUgYmVoYXZpb3VyICovXG4gICAgdGV4dC1hbGlnbjogLXdlYmtpdC1jZW50ZXJcbn1cblxuaHIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMC41ZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYWZ0ZXI6IDAuNWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiBhdXRvO1xuICAgIC13ZWJraXQtbWFyZ2luLWVuZDogYXV0bztcbiAgICBib3JkZXItc3R5bGU6IGluc2V0O1xuICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbn1cblxubWFwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmVcbn1cblxudmlkZW8ge1xuICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG59XG5cbi8qIGhlYWRpbmcgZWxlbWVudHMgKi9cblxuaDEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMmVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMC42N19fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAwLjY3ZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDA7XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG59XG5cbjotd2Via2l0LWFueShhcnRpY2xlLGFzaWRlLG5hdixzZWN0aW9uKSBoMSB7XG4gICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDAuODNfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMC44M2VtO1xufVxuXG46LXdlYmtpdC1hbnkoYXJ0aWNsZSxhc2lkZSxuYXYsc2VjdGlvbikgOi13ZWJraXQtYW55KGFydGljbGUsYXNpZGUsbmF2LHNlY3Rpb24pIGgxIHtcbiAgICBmb250LXNpemU6IDEuMTdlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDFfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMWVtO1xufVxuXG46LXdlYmtpdC1hbnkoYXJ0aWNsZSxhc2lkZSxuYXYsc2VjdGlvbikgOi13ZWJraXQtYW55KGFydGljbGUsYXNpZGUsbmF2LHNlY3Rpb24pIDotd2Via2l0LWFueShhcnRpY2xlLGFzaWRlLG5hdixzZWN0aW9uKSBoMSB7XG4gICAgZm9udC1zaXplOiAxLjAwZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYmVmb3JlOiAxLjMzX19xZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYWZ0ZXI6IDEuMzNlbTtcbn1cblxuOi13ZWJraXQtYW55KGFydGljbGUsYXNpZGUsbmF2LHNlY3Rpb24pIDotd2Via2l0LWFueShhcnRpY2xlLGFzaWRlLG5hdixzZWN0aW9uKSA6LXdlYmtpdC1hbnkoYXJ0aWNsZSxhc2lkZSxuYXYsc2VjdGlvbikgOi13ZWJraXQtYW55KGFydGljbGUsYXNpZGUsbmF2LHNlY3Rpb24pIGgxIHtcbiAgICBmb250LXNpemU6IC44M2VtO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMS42N19fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAxLjY3ZW07XG59XG5cbjotd2Via2l0LWFueShhcnRpY2xlLGFzaWRlLG5hdixzZWN0aW9uKSA6LXdlYmtpdC1hbnkoYXJ0aWNsZSxhc2lkZSxuYXYsc2VjdGlvbikgOi13ZWJraXQtYW55KGFydGljbGUsYXNpZGUsbmF2LHNlY3Rpb24pIDotd2Via2l0LWFueShhcnRpY2xlLGFzaWRlLG5hdixzZWN0aW9uKSA6LXdlYmtpdC1hbnkoYXJ0aWNsZSxhc2lkZSxuYXYsc2VjdGlvbikgaDEge1xuICAgIGZvbnQtc2l6ZTogLjY3ZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYmVmb3JlOiAyLjMzX19xZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYWZ0ZXI6IDIuMzNlbTtcbn1cblxuaDIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMS41ZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYmVmb3JlOiAwLjgzX19xZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYWZ0ZXI6IDAuODNlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1zdGFydDogMDtcbiAgICAtd2Via2l0LW1hcmdpbi1lbmQ6IDA7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbn1cblxuaDMge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMS4xN2VtO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMV9fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAxZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDA7XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG59XG5cbmg0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDEuMzNfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMS4zM2VtO1xuICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiAwO1xuICAgIC13ZWJraXQtbWFyZ2luLWVuZDogMDtcbiAgICBmb250LXdlaWdodDogYm9sZFxufVxuXG5oNSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAuODNlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDEuNjdfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMS42N2VtO1xuICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiAwO1xuICAgIC13ZWJraXQtbWFyZ2luLWVuZDogMDtcbiAgICBmb250LXdlaWdodDogYm9sZFxufVxuXG5oNiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAuNjdlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDIuMzNfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMi4zM2VtO1xuICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiAwO1xuICAgIC13ZWJraXQtbWFyZ2luLWVuZDogMDtcbiAgICBmb250LXdlaWdodDogYm9sZFxufVxuXG4vKiB0YWJsZXMgKi9cblxudGFibGUge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gICAgYm9yZGVyLXNwYWNpbmc6IDJweDtcbiAgICBib3JkZXItY29sb3I6IGdyYXlcbn1cblxudGhlYWQge1xuICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdFxufVxuXG50Ym9keSB7XG4gICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0XG59XG5cbnRmb290IHtcbiAgICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBib3JkZXItY29sb3I6IGluaGVyaXRcbn1cblxuLyogZm9yIHRhYmxlcyB3aXRob3V0IHRhYmxlIHNlY3Rpb24gZWxlbWVudHMgKGNhbiBoYXBwZW4gd2l0aCBYSFRNTCBvciBkeW5hbWljYWxseSBjcmVhdGVkIHRhYmxlcykgKi9cbnRhYmxlID4gdHIge1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbmNvbCB7XG4gICAgZGlzcGxheTogdGFibGUtY29sdW1uXG59XG5cbmNvbGdyb3VwIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXBcbn1cblxudHIge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbiAgICBib3JkZXItY29sb3I6IGluaGVyaXRcbn1cblxudGQsIHRoIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0XG59XG5cbnRoIHtcbiAgICBmb250LXdlaWdodDogYm9sZFxufVxuXG5jYXB0aW9uIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uO1xuICAgIHRleHQtYWxpZ246IC13ZWJraXQtY2VudGVyXG59XG5cbi8qIGxpc3RzICovXG5cbnVsLCBtZW51LCBkaXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDFfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiAwO1xuICAgIC13ZWJraXQtbWFyZ2luLWVuZDogMDtcbiAgICAtd2Via2l0LXBhZGRpbmctc3RhcnQ6IDQwcHhcbn1cblxub2wge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDtcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDFfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiAwO1xuICAgIC13ZWJraXQtbWFyZ2luLWVuZDogMDtcbiAgICAtd2Via2l0LXBhZGRpbmctc3RhcnQ6IDQwcHhcbn1cblxubGkge1xuICAgIGRpc3BsYXk6IGxpc3QtaXRlbTtcbiAgICB0ZXh0LWFsaWduOiAtd2Via2l0LW1hdGNoLXBhcmVudDtcbn1cblxudWwgdWwsIG9sIHVsIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZVxufVxuXG5vbCBvbCB1bCwgb2wgdWwgdWwsIHVsIG9sIHVsLCB1bCB1bCB1bCB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmVcbn1cblxuZGQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiA0MHB4XG59XG5cbmRsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDFfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiAwO1xuICAgIC13ZWJraXQtbWFyZ2luLWVuZDogMDtcbn1cblxuZHQge1xuICAgIGRpc3BsYXk6IGJsb2NrXG59XG5cbm9sIHVsLCB1bCBvbCwgdWwgdWwsIG9sIG9sIHtcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDA7XG4gICAgLXdlYmtpdC1tYXJnaW4tYWZ0ZXI6IDBcbn1cblxuLyogZm9ybSBlbGVtZW50cyAqL1xuXG5mb3JtIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tdG9wOiAwX19xZW07XG59XG5cbmxhYmVsIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbmxlZ2VuZCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiAycHg7XG4gICAgLXdlYmtpdC1wYWRkaW5nLWVuZDogMnB4O1xuICAgIGJvcmRlcjogbm9uZVxufVxuXG5maWVsZHNldCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDJweDtcbiAgICAtd2Via2l0LW1hcmdpbi1lbmQ6IDJweDtcbiAgICAtd2Via2l0LXBhZGRpbmctYmVmb3JlOiAwLjM1ZW07XG4gICAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiAwLjc1ZW07XG4gICAgLXdlYmtpdC1wYWRkaW5nLWVuZDogMC43NWVtO1xuICAgIC13ZWJraXQtcGFkZGluZy1hZnRlcjogMC42MjVlbTtcbiAgICBib3JkZXI6IDJweCBncm9vdmUgVGhyZWVERmFjZTtcbiAgICBtaW4td2lkdGg6IC13ZWJraXQtbWluLWNvbnRlbnQ7XG59XG5cbmJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XG59XG5cbi8qIEZvcm0gY29udHJvbHMgZG9uJ3QgZ28gdmVydGljYWwuICovXG5pbnB1dCwgdGV4dGFyZWEsIGtleWdlbiwgc2VsZWN0LCBidXR0b24sIG1ldGVyLCBwcm9ncmVzcyB7XG4gICAgLXdlYmtpdC13cml0aW5nLW1vZGU6IGhvcml6b250YWwtdGIgIWltcG9ydGFudDtcbn1cblxuaW5wdXQsIHRleHRhcmVhLCBrZXlnZW4sIHNlbGVjdCwgYnV0dG9uIHtcbiAgICBtYXJnaW46IDBfX3FlbTtcbiAgICBmb250OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7XG4gICAgdGV4dC1yZW5kZXJpbmc6IGF1dG87IC8qIEZJWE1FOiBSZW1vdmUgd2hlbiB0YWJzIHdvcmsgd2l0aCBvcHRpbWl6ZUxlZ2liaWxpdHkuICovXG4gICAgY29sb3I6IGluaXRpYWw7XG4gICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcbiAgICB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgIHRleHQtaW5kZW50OiAwO1xuICAgIHRleHQtc2hhZG93OiBub25lO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB0ZXh0LWFsaWduOiBzdGFydDtcbn1cblxuaW5wdXRbdHlwZT1cImhpZGRlblwiIGldIHtcbiAgICBkaXNwbGF5OiBub25lXG59XG5cbmlucHV0IHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgICBwYWRkaW5nOiAxcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgYm9yZGVyOiAycHggaW5zZXQ7XG4gICAgLXdlYmtpdC1ydGwtb3JkZXJpbmc6IGxvZ2ljYWw7XG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDtcbiAgICBjdXJzb3I6IGF1dG87XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIiBpXSB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG5pbnB1dDo6LXdlYmtpdC10ZXh0ZmllbGQtZGVjb3JhdGlvbi1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbiAgICBjb250ZW50OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIiBpXTo6LXdlYmtpdC10ZXh0ZmllbGQtZGVjb3JhdGlvbi1jb250YWluZXIge1xuICAgIGRpcmVjdGlvbjogbHRyO1xufVxuXG5pbnB1dDo6LXdlYmtpdC1jbGVhci1idXR0b24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNoZmllbGQtY2FuY2VsLWJ1dHRvbjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZmxleDogbm9uZTtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbiAgICAtd2Via2l0LW1hcmdpbi1zdGFydDogMnB4O1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbmlucHV0OmVuYWJsZWQ6cmVhZC13cml0ZTotd2Via2l0LWFueSg6Zm9jdXMsOmhvdmVyKTo6LXdlYmtpdC1jbGVhci1idXR0b24ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIiBpXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsZXg6IG5vbmU7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDFweDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCIgaV06ZW5hYmxlZDpyZWFkLXdyaXRlOi13ZWJraXQtYW55KDpmb2N1cyw6aG92ZXIpOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xufVxuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCIgaV06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNoZmllbGQtZGVjb3JhdGlvbjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiBub25lO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1zdGFydDtcbiAgICBtYXJnaW46IGF1dG8gMDtcbn1cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiIGldOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNoZmllbGQtcmVzdWx0cy1kZWNvcmF0aW9uO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsZXg6IG5vbmU7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICAgIG1hcmdpbjogYXV0byAwO1xufVxuXG5pbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBpbm5lci1zcGluLWJ1dHRvbjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGZsZXg6IG5vbmU7XG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbmlucHV0OmVuYWJsZWQ6cmVhZC13cml0ZTotd2Via2l0LWFueSg6Zm9jdXMsOmhvdmVyKTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbn1cblxua2V5Z2VuLCBzZWxlY3Qge1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbn1cblxua2V5Z2VuOjotd2Via2l0LWtleWdlbi1zZWxlY3Qge1xuICAgIG1hcmdpbjogMHB4O1xufVxuXG50ZXh0YXJlYSB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0YXJlYTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBib3JkZXI6IDFweCBzb2xpZDtcbiAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgcmVzaXplOiBhdXRvO1xuICAgIGN1cnNvcjogYXV0bztcbiAgICBwYWRkaW5nOiAycHg7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbn1cblxuOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICAtd2Via2l0LXRleHQtc2VjdXJpdHk6IG5vbmU7XG4gICAgY29sb3I6IGRhcmtHcmF5O1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIHdoaXRlLXNwYWNlOiBwcmU7XG4gICAgd29yZC13cmFwOiBub3JtYWw7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbn1cblxuaW5wdXRbdHlwZT1cInBhc3N3b3JkXCIgaV0ge1xuICAgIC13ZWJraXQtdGV4dC1zZWN1cml0eTogZGlzYyAhaW1wb3J0YW50O1xufVxuXG5pbnB1dFt0eXBlPVwiaGlkZGVuXCIgaV0sIGlucHV0W3R5cGU9XCJpbWFnZVwiIGldLCBpbnB1dFt0eXBlPVwiZmlsZVwiIGldIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGluaXRpYWw7XG4gICAgcGFkZGluZzogaW5pdGlhbDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbml0aWFsO1xuICAgIGJvcmRlcjogaW5pdGlhbDtcbn1cblxuaW5wdXRbdHlwZT1cImZpbGVcIiBpXSB7XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIHRleHQtYWxpZ246IHN0YXJ0ICFpbXBvcnRhbnQ7XG59XG5cbmlucHV0Oi13ZWJraXQtYXV0b2ZpbGwsIHRleHRhcmVhOi13ZWJraXQtYXV0b2ZpbGwsIHNlbGVjdDotd2Via2l0LWF1dG9maWxsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkFGRkJEICFpbXBvcnRhbnQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTpub25lICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDtcbn1cblxuaW5wdXRbdHlwZT1cInJhZGlvXCIgaV0sIGlucHV0W3R5cGU9XCJjaGVja2JveFwiIGldIHtcbiAgICBtYXJnaW46IDNweCAwLjVleDtcbiAgICBwYWRkaW5nOiBpbml0aWFsO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7XG4gICAgYm9yZGVyOiBpbml0aWFsO1xufVxuXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCIgaV0sIGlucHV0W3R5cGU9XCJzdWJtaXRcIiBpXSwgaW5wdXRbdHlwZT1cInJlc2V0XCIgaV0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogcHVzaC1idXR0b247XG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICB3aGl0ZS1zcGFjZTogcHJlXG59XG5cbmlucHV0W3R5cGU9XCJmaWxlXCIgaV06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHB1c2gtYnV0dG9uO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbn1cblxuaW5wdXRbdHlwZT1cImJ1dHRvblwiIGldLCBpbnB1dFt0eXBlPVwic3VibWl0XCIgaV0sIGlucHV0W3R5cGU9XCJyZXNldFwiIGldLCBpbnB1dFt0eXBlPVwiZmlsZVwiIGldOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiwgYnV0dG9uIHtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGNvbG9yOiBCdXR0b25UZXh0O1xuICAgIHBhZGRpbmc6IDJweCA2cHggM3B4IDZweDtcbiAgICBib3JkZXI6IDJweCBvdXRzZXQgQnV0dG9uRmFjZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbn1cblxuaW5wdXRbdHlwZT1cInJhbmdlXCIgaV0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2xpZGVyLWhvcml6b250YWw7XG4gICAgcGFkZGluZzogaW5pdGlhbDtcbiAgICBib3JkZXI6IGluaXRpYWw7XG4gICAgbWFyZ2luOiAycHg7XG4gICAgY29sb3I6ICM5MDkwOTA7XG59XG5cbmlucHV0W3R5cGU9XCJyYW5nZVwiIGldOjotd2Via2l0LXNsaWRlci1jb250YWluZXIsIGlucHV0W3R5cGU9XCJyYW5nZVwiIGldOjotd2Via2l0LW1lZGlhLXNsaWRlci1jb250YWluZXIge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgZGlzcGxheTogZmxleDtcbn1cblxuaW5wdXRbdHlwZT1cInJhbmdlXCIgaV06Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcbiAgICBmbGV4OiAxO1xuICAgIG1pbi13aWR0aDogMDtcbiAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjtcblxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbmlucHV0W3R5cGU9XCJyYW5nZVwiIGldOjotd2Via2l0LXNsaWRlci10aHVtYiwgaW5wdXRbdHlwZT1cInJhbmdlXCIgaV06Oi13ZWJraXQtbWVkaWEtc2xpZGVyLXRodW1iIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlcnRodW1iLWhvcml6b250YWw7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuaW5wdXRbdHlwZT1cImJ1dHRvblwiIGldOmRpc2FibGVkLCBpbnB1dFt0eXBlPVwic3VibWl0XCIgaV06ZGlzYWJsZWQsIGlucHV0W3R5cGU9XCJyZXNldFwiIGldOmRpc2FibGVkLFxuaW5wdXRbdHlwZT1cImZpbGVcIiBpXTpkaXNhYmxlZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbjpkaXNhYmxlZCxcbnNlbGVjdDpkaXNhYmxlZCwga2V5Z2VuOmRpc2FibGVkLCBvcHRncm91cDpkaXNhYmxlZCwgb3B0aW9uOmRpc2FibGVkLFxuc2VsZWN0W2Rpc2FibGVkXT5vcHRpb24ge1xuICAgIGNvbG9yOiBHcmF5VGV4dFxufVxuXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCIgaV06YWN0aXZlLCBpbnB1dFt0eXBlPVwic3VibWl0XCIgaV06YWN0aXZlLCBpbnB1dFt0eXBlPVwicmVzZXRcIiBpXTphY3RpdmUsIGlucHV0W3R5cGU9XCJmaWxlXCIgaV06YWN0aXZlOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiwgYnV0dG9uOmFjdGl2ZSB7XG4gICAgYm9yZGVyLXN0eWxlOiBpbnNldFxufVxuXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCIgaV06YWN0aXZlOmRpc2FibGVkLCBpbnB1dFt0eXBlPVwic3VibWl0XCIgaV06YWN0aXZlOmRpc2FibGVkLCBpbnB1dFt0eXBlPVwicmVzZXRcIiBpXTphY3RpdmU6ZGlzYWJsZWQsIGlucHV0W3R5cGU9XCJmaWxlXCIgaV06YWN0aXZlOmRpc2FibGVkOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiwgYnV0dG9uOmFjdGl2ZTpkaXNhYmxlZCB7XG4gICAgYm9yZGVyLXN0eWxlOiBvdXRzZXRcbn1cblxub3B0aW9uOi1pbnRlcm5hbC1zcGF0aWFsLW5hdmlnYXRpb24tZm9jdXMge1xuICAgIG91dGxpbmU6IGJsYWNrIGRhc2hlZCAxcHg7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XG59XG5cbmRhdGFsaXN0IHtcbiAgICBkaXNwbGF5OiBub25lXG59XG5cbmFyZWEge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbnBhcmFtIHtcbiAgICBkaXNwbGF5OiBub25lXG59XG5cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiIGldIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGNoZWNrYm94O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbmlucHV0W3R5cGU9XCJyYWRpb1wiIGldIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHJhZGlvO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbmlucHV0W3R5cGU9XCJjb2xvclwiIGldIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNxdWFyZS1idXR0b247XG4gICAgd2lkdGg6IDQ0cHg7XG4gICAgaGVpZ2h0OiAyM3B4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IEJ1dHRvbkZhY2U7XG4gICAgLyogU2FtZSBhcyBuYXRpdmVfdGhlbWVfYmFzZS4gKi9cbiAgICBib3JkZXI6IDFweCAjYTlhOWE5IHNvbGlkO1xuICAgIHBhZGRpbmc6IDFweCAycHg7XG59XG5cbmlucHV0W3R5cGU9XCJjb2xvclwiIGldOjotd2Via2l0LWNvbG9yLXN3YXRjaC13cmFwcGVyIHtcbiAgICBkaXNwbGF5OmZsZXg7XG4gICAgcGFkZGluZzogNHB4IDJweDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJVxufVxuXG5pbnB1dFt0eXBlPVwiY29sb3JcIiBpXTo6LXdlYmtpdC1jb2xvci1zd2F0Y2gge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIzc3Nzc3NztcbiAgICBmbGV4OiAxO1xuICAgIG1pbi13aWR0aDogMDtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbn1cblxuaW5wdXRbdHlwZT1cImNvbG9yXCIgaV1bbGlzdF0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3Q7XG4gICAgd2lkdGg6IDg4cHg7XG4gICAgaGVpZ2h0OiAyM3B4XG59XG5cbmlucHV0W3R5cGU9XCJjb2xvclwiIGldW2xpc3RdOjotd2Via2l0LWNvbG9yLXN3YXRjaC13cmFwcGVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDhweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyNHB4O1xufVxuXG5pbnB1dFt0eXBlPVwiY29sb3JcIiBpXVtsaXN0XTo6LXdlYmtpdC1jb2xvci1zd2F0Y2gge1xuICAgIGJvcmRlci1jb2xvcjogIzAwMDAwMDtcbn1cblxuaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAwLjY2ZW07XG4gICAgaGVpZ2h0OiAwLjY2ZW07XG4gICAgcGFkZGluZzogMC4xN2VtIDAuMzRlbTtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG5pbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xufVxuXG5pbnB1dDplbmFibGVkOnJlYWQtd3JpdGU6LXdlYmtpdC1hbnkoOmZvY3VzLDpob3Zlcik6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcixcbmlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3I6Zm9jdXMge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG59XG5cbmlucHV0W3R5cGU9XCJkYXRlXCIgaV06ZGlzYWJsZWQ6Oi13ZWJraXQtY2xlYXItYnV0dG9uLFxuaW5wdXRbdHlwZT1cImRhdGVcIiBpXTpkaXNhYmxlZDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiIGldOmRpc2FibGVkOjotd2Via2l0LWNsZWFyLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiIGldOmRpc2FibGVkOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm1vbnRoXCIgaV06ZGlzYWJsZWQ6Oi13ZWJraXQtY2xlYXItYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm1vbnRoXCIgaV06ZGlzYWJsZWQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5pbnB1dFt0eXBlPVwid2Vla1wiIGldOmRpc2FibGVkOjotd2Via2l0LWNsZWFyLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJ3ZWVrXCIgaV06ZGlzYWJsZWQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5pbnB1dDpkaXNhYmxlZDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yLFxuaW5wdXRbdHlwZT1cImRhdGVcIiBpXVtyZWFkb25seV06Oi13ZWJraXQtY2xlYXItYnV0dG9uLFxuaW5wdXRbdHlwZT1cImRhdGVcIiBpXVtyZWFkb25seV06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5pbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBpXVtyZWFkb25seV06Oi13ZWJraXQtY2xlYXItYnV0dG9uLFxuaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgaV1bcmVhZG9ubHldOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm1vbnRoXCIgaV1bcmVhZG9ubHldOjotd2Via2l0LWNsZWFyLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJtb250aFwiIGldW3JlYWRvbmx5XTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJ3ZWVrXCIgaV1bcmVhZG9ubHldOjotd2Via2l0LWNsZWFyLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJ3ZWVrXCIgaV1bcmVhZG9ubHldOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbcmVhZG9ubHldOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3Ige1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuc2VsZWN0IHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lbnVsaXN0O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIC13ZWJraXQtcnRsLW9yZGVyaW5nOiBsb2dpY2FsO1xuICAgIGNvbG9yOiBibGFjaztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbnNlbGVjdDpub3QoOi1pbnRlcm5hbC1saXN0LWJveCkge1xuICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG59XG5cbnNlbGVjdDotaW50ZXJuYWwtbGlzdC1ib3gge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbGlzdGJveDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBib3JkZXI6IDFweCBpbnNldCBncmF5O1xuICAgIGJvcmRlci1yYWRpdXM6IGluaXRpYWw7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207XG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG5vcHRncm91cCB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxub3B0aW9uIHtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMnB4IDFweCAycHg7XG4gICAgd2hpdGUtc3BhY2U6IHByZTtcbiAgICBtaW4taGVpZ2h0OiAxLjJlbTtcbn1cblxuc2VsZWN0Oi1pbnRlcm5hbC1saXN0LWJveCBvcHRpb24sXG5zZWxlY3Q6LWludGVybmFsLWxpc3QtYm94IG9wdGdyb3VwIHtcbiAgICBsaW5lLWhlaWdodDogaW5pdGlhbCAhaW1wb3J0YW50O1xufVxuXG5zZWxlY3Q6LWludGVybmFsLWxpc3QtYm94OmZvY3VzIG9wdGlvbjpjaGVja2VkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAtaW50ZXJuYWwtYWN0aXZlLWxpc3QtYm94LXNlbGVjdGlvbiAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAtaW50ZXJuYWwtYWN0aXZlLWxpc3QtYm94LXNlbGVjdGlvbi10ZXh0ICFpbXBvcnRhbnQ7XG59XG5cbnNlbGVjdDotaW50ZXJuYWwtbGlzdC1ib3ggb3B0aW9uOmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IC1pbnRlcm5hbC1pbmFjdGl2ZS1saXN0LWJveC1zZWxlY3Rpb24gIWltcG9ydGFudDtcbiAgICBjb2xvcjogLWludGVybmFsLWluYWN0aXZlLWxpc3QtYm94LXNlbGVjdGlvbi10ZXh0ICFpbXBvcnRhbnQ7XG59XG5cbnNlbGVjdDotaW50ZXJuYWwtbGlzdC1ib3g6ZGlzYWJsZWQgb3B0aW9uOmNoZWNrZWQsXG5zZWxlY3Q6LWludGVybmFsLWxpc3QtYm94IG9wdGlvbjpjaGVja2VkOmRpc2FibGVkIHtcbiAgICBjb2xvcjogZ3JheSAhaW1wb3J0YW50O1xufVxuXG5zZWxlY3Q6LWludGVybmFsLWxpc3QtYm94IGhyIHtcbiAgICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG5cbm91dHB1dCB7XG4gICAgZGlzcGxheTogaW5saW5lO1xufVxuXG4vKiBtZXRlciAqL1xuXG5tZXRlciB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZXRlcjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICB3aWR0aDogNWVtO1xuICAgIHZlcnRpY2FsLWFsaWduOiAtMC4yZW07XG59XG5cbm1ldGVyOjotd2Via2l0LW1ldGVyLWlubmVyLWVsZW1lbnQge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogaW5oZXJpdDtcbiAgICBib3gtc2l6aW5nOiBpbmhlcml0O1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxubWV0ZXI6Oi13ZWJraXQtbWV0ZXItYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZGRkLCAjZWVlIDIwJSwgI2NjYyA0NSUsICNjY2MgNTUlLCAjZGRkKTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxubWV0ZXI6Oi13ZWJraXQtbWV0ZXItb3B0aW11bS12YWx1ZSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2FkNywgI2NlYSAyMCUsICM3YTMgNDUlLCAjN2EzIDU1JSwgI2FkNyk7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbm1ldGVyOjotd2Via2l0LW1ldGVyLXN1Ym9wdGltdW0tdmFsdWUge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmZTcsICNmZmMgMjAlLCAjZGIzIDQ1JSwgI2RiMyA1NSUsICNmZTcpO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG5tZXRlcjo6LXdlYmtpdC1tZXRlci1ldmVuLWxlc3MtZ29vZC12YWx1ZSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2Y3NywgI2ZjYyAyMCUsICNkNDQgNDUlLCAjZDQ0IDU1JSwgI2Y3Nyk7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8qIHByb2dyZXNzICovXG5cbnByb2dyZXNzIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHByb2dyZXNzLWJhcjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICB3aWR0aDogMTBlbTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTAuMmVtO1xufVxuXG5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy1pbm5lci1lbGVtZW50IHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGluaGVyaXQ7XG4gICAgYm94LXNpemluZzogaW5oZXJpdDtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHk7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy1iYXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGdyYXk7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDUwJTsgLyogc2hvdWxkIGJlIHJlbW92ZWQgbGF0ZXIgKi9cbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4vKiBpbmxpbmUgZWxlbWVudHMgKi9cblxudSwgaW5zIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVxufVxuXG5zdHJvbmcsIGIge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG59XG5cbmksIGNpdGUsIGVtLCB2YXIsIGFkZHJlc3MsIGRmbiB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljXG59XG5cbnR0LCBjb2RlLCBrYmQsIHNhbXAge1xuICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2Vcbn1cblxucHJlLCB4bXAsIHBsYWludGV4dCwgbGlzdGluZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIG1hcmdpbjogMV9fcWVtIDBcbn1cblxubWFyayB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93O1xuICAgIGNvbG9yOiBibGFja1xufVxuXG5iaWcge1xuICAgIGZvbnQtc2l6ZTogbGFyZ2VyXG59XG5cbnNtYWxsIHtcbiAgICBmb250LXNpemU6IHNtYWxsZXJcbn1cblxucywgc3RyaWtlLCBkZWwge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoXG59XG5cbnN1YiB7XG4gICAgdmVydGljYWwtYWxpZ246IHN1YjtcbiAgICBmb250LXNpemU6IHNtYWxsZXJcbn1cblxuc3VwIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7XG4gICAgZm9udC1zaXplOiBzbWFsbGVyXG59XG5cbm5vYnIge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbn1cblxuLyogc3RhdGVzICovXG5cbjpmb2N1cyB7XG4gICAgb3V0bGluZTogYXV0byA1cHggLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXG59XG5cbi8qIFJlYWQtb25seSB0ZXh0IGZpZWxkcyBkbyBub3Qgc2hvdyBhIGZvY3VzIHJpbmcgYnV0IGRvIHN0aWxsIHJlY2VpdmUgZm9jdXMgKi9cbmh0bWw6Zm9jdXMsIGJvZHk6Zm9jdXMsIGlucHV0W3JlYWRvbmx5XTpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZVxufVxuXG5hcHBsZXQ6Zm9jdXMsIGVtYmVkOmZvY3VzLCBpZnJhbWU6Zm9jdXMsIG9iamVjdDpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZVxufVxuXG5pbnB1dDpmb2N1cywgdGV4dGFyZWE6Zm9jdXMsIGtleWdlbjpmb2N1cywgc2VsZWN0OmZvY3VzIHtcbiAgICBvdXRsaW5lLW9mZnNldDogLTJweFxufVxuXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCIgaV06Zm9jdXMsXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIiBpXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJmaWxlXCIgaV06Zm9jdXMsXG5pbnB1dFt0eXBlPVwiaGlkZGVuXCIgaV06Zm9jdXMsXG5pbnB1dFt0eXBlPVwiaW1hZ2VcIiBpXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJyYWRpb1wiIGldOmZvY3VzLFxuaW5wdXRbdHlwZT1cInJlc2V0XCIgaV06Zm9jdXMsXG5pbnB1dFt0eXBlPVwic2VhcmNoXCIgaV06Zm9jdXMsXG5pbnB1dFt0eXBlPVwic3VibWl0XCIgaV06Zm9jdXMsXG5pbnB1dFt0eXBlPVwiZmlsZVwiIGldOmZvY3VzOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XG4gICAgb3V0bGluZS1vZmZzZXQ6IDBcbn1cblxuYTotd2Via2l0LWFueS1saW5rIHtcbiAgICBjb2xvcjogLXdlYmtpdC1saW5rO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIGN1cnNvcjogYXV0bztcbn1cblxuYTotd2Via2l0LWFueS1saW5rOmFjdGl2ZSB7XG4gICAgY29sb3I6IC13ZWJraXQtYWN0aXZlbGlua1xufVxuXG4vKiBIVE1MNSBydWJ5IGVsZW1lbnRzICovXG5cbnJ1YnksIHJ0IHtcbiAgICB0ZXh0LWluZGVudDogMDsgLyogYmxvY2tzIHVzZWQgZm9yIHJ1YnkgcmVuZGVyaW5nIHNob3VsZCBub3QgdHJpZ2dlciB0aGlzICovXG59XG5cbnJ0IHtcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICAgIC13ZWJraXQtdGV4dC1lbXBoYXNpczogbm9uZTtcbn1cblxucnVieSA+IHJ0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IDUwJTtcbiAgICB0ZXh0LWFsaWduOiBzdGFydDtcbn1cblxucnVieSA+IHJwIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBvdGhlciBlbGVtZW50cyAqL1xuXG5ub2ZyYW1lcyB7XG4gICAgZGlzcGxheTogbm9uZVxufVxuXG5mcmFtZXNldCwgZnJhbWUge1xuICAgIGRpc3BsYXk6IGJsb2NrXG59XG5cbmZyYW1lc2V0IHtcbiAgICBib3JkZXItY29sb3I6IGluaGVyaXRcbn1cblxuaWZyYW1lIHtcbiAgICBib3JkZXI6IDJweCBpbnNldFxufVxuXG5kZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBibG9ja1xufVxuXG5zdW1tYXJ5IHtcbiAgICBkaXNwbGF5OiBibG9ja1xufVxuXG5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2VyIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDAuNjZlbTtcbiAgICBoZWlnaHQ6IDAuNjZlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1lbmQ6IDAuNGVtO1xufVxuXG50ZW1wbGF0ZSB7XG4gICAgZGlzcGxheTogbm9uZVxufVxuXG5iZGksIG91dHB1dCB7XG4gICAgdW5pY29kZS1iaWRpOiAtd2Via2l0LWlzb2xhdGU7XG59XG5cbmJkbyB7XG4gICAgdW5pY29kZS1iaWRpOiBiaWRpLW92ZXJyaWRlO1xufVxuXG50ZXh0YXJlYVtkaXI9YXV0byBpXSB7XG4gICAgdW5pY29kZS1iaWRpOiAtd2Via2l0LXBsYWludGV4dDtcbn1cblxuZGlhbG9nOm5vdChbb3Blbl0pIHtcbiAgICBkaXNwbGF5OiBub25lXG59XG5cbmRpYWxvZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgd2lkdGg6IC13ZWJraXQtZml0LWNvbnRlbnQ7XG4gICAgaGVpZ2h0OiAtd2Via2l0LWZpdC1jb250ZW50O1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBib3JkZXI6IHNvbGlkO1xuICAgIHBhZGRpbmc6IDFlbTtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBjb2xvcjogYmxhY2tcbn1cblxuZGlhbG9nOjpiYWNrZHJvcCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMSlcbn1cblxuLyogcGFnZSAqL1xuXG5AcGFnZSB7XG4gICAgLyogRklYTUU6IERlZmluZSB0aGUgcmlnaHQgZGVmYXVsdCB2YWx1ZXMgZm9yIHBhZ2UgcHJvcGVydGllcy4gKi9cbiAgICBzaXplOiBhdXRvO1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBwYWRkaW5nOiAwcHg7XG4gICAgYm9yZGVyLXdpZHRoOiAwcHg7XG59XG5cbi8qIG5vc2NyaXB0IGlzIGhhbmRsZWQgaW50ZXJuYWxseSwgYXMgaXQgZGVwZW5kcyBvbiBzZXR0aW5ncy4gKi9cblxuYDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9saXZpbmcvZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG4vLyBUcmVlIHRyYXZlcnNpbmdcbmV4cG9ydHMuZ2V0Rmlyc3RDaGlsZCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHJldHVybiBub2RlLmNoaWxkTm9kZXNbMF07XG59O1xuXG5leHBvcnRzLmdldENoaWxkTm9kZXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAvLyBwYXJzZTUgdHJlYXRzIHRlbXBsYXRlIGVsZW1lbnRzIHNwZWNpYWxseSwgYXNzdW1pbmcgeW91IHJldHVybiBhbiBhcnJheSB3aG9zZSBzaW5nbGUgaXRlbSBpcyB0aGUgZG9jdW1lbnQgZnJhZ21lbnRcbiAgY29uc3QgY2hpbGRyZW4gPSBub2RlLl90ZW1wbGF0ZUNvbnRlbnRzID8gW25vZGUuX3RlbXBsYXRlQ29udGVudHNdIDogW107XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7ICsraSkge1xuICAgICAgY2hpbGRyZW4ucHVzaChpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihub2RlLmNoaWxkTm9kZXNbaV0pKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuO1xufTtcblxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZTtcbn07XG5cbmV4cG9ydHMuZ2V0QXR0ckxpc3QgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZS5hdHRyaWJ1dGVzO1xufTtcblxuLy8gTm9kZSBkYXRhXG5leHBvcnRzLmdldFRhZ05hbWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5leHBvcnRzLmdldE5hbWVzcGFjZVVSSSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm5hbWVzcGFjZVVSSSB8fCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcbn07XG5cbmV4cG9ydHMuZ2V0VGV4dE5vZGVDb250ZW50ID0gZnVuY3Rpb24gKHRleHROb2RlKSB7XG4gIHJldHVybiB0ZXh0Tm9kZS5ub2RlVmFsdWU7XG59O1xuXG5leHBvcnRzLmdldENvbW1lbnROb2RlQ29udGVudCA9IGZ1bmN0aW9uIChjb21tZW50Tm9kZSkge1xuICByZXR1cm4gY29tbWVudE5vZGUubm9kZVZhbHVlO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlTmFtZSA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xuICByZXR1cm4gZG9jdHlwZU5vZGUubmFtZTtcbn07XG5cbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZVB1YmxpY0lkID0gZnVuY3Rpb24gKGRvY3R5cGVOb2RlKSB7XG4gIHJldHVybiBkb2N0eXBlTm9kZS5wdWJsaWNJZCB8fCBudWxsO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcbiAgcmV0dXJuIGRvY3R5cGVOb2RlLnN5c3RlbUlkIHx8IG51bGw7XG59O1xuXG4vLyBOb2RlIHR5cGVzXG5leHBvcnRzLmlzVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gXCIjdGV4dFwiO1xufTtcblxuZXhwb3J0cy5pc0NvbW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09IFwiI2NvbW1lbnRcIjtcbn07XG5cbmV4cG9ydHMuaXNEb2N1bWVudFR5cGVOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IDEwO1xufTtcblxuZXhwb3J0cy5pc0VsZW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIEJvb2xlYW4obm9kZS50YWdOYW1lKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHZtID0gcmVxdWlyZShcInZtXCIpO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vbGl2aW5nL2dlbmVyYXRlZC91dGlsc1wiKTtcblxuZXhwb3J0cy5hdmFpbGFibGVEb2N1bWVudEZlYXR1cmVzID0gW1xuICBcIkZldGNoRXh0ZXJuYWxSZXNvdXJjZXNcIixcbiAgXCJTa2lwRXh0ZXJuYWxSZXNvdXJjZXNcIlxuXTtcblxuZXhwb3J0cy5kZWZhdWx0RG9jdW1lbnRGZWF0dXJlcyA9IHtcbiAgRmV0Y2hFeHRlcm5hbFJlc291cmNlczogW1wic2NyaXB0XCIsIFwibGlua1wiXSwgLy8gb21pdHRlZCBieSBkZWZhdWx0OiBcImZyYW1lXCJcbiAgU2tpcEV4dGVybmFsUmVzb3VyY2VzOiBmYWxzZVxufTtcblxuZXhwb3J0cy5hcHBseURvY3VtZW50RmVhdHVyZXMgPSAoZG9jdW1lbnRJbXBsLCBmZWF0dXJlcyA9IHt9KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwb3J0cy5hdmFpbGFibGVEb2N1bWVudEZlYXR1cmVzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgZmVhdHVyZU5hbWUgPSBleHBvcnRzLmF2YWlsYWJsZURvY3VtZW50RmVhdHVyZXNbaV07XG4gICAgbGV0IGZlYXR1cmVTb3VyY2U7XG5cbiAgICBpZiAoZmVhdHVyZXNbZmVhdHVyZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZlYXR1cmVTb3VyY2UgPSBmZWF0dXJlc1tmZWF0dXJlTmFtZV07XG4gICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIHRoZSBsb3dlcmNhc2UgdmVyc2lvbiBhbHNvIGJlY2F1c2UgdGhlIERvY3VtZW50IGZlYXR1cmVcbiAgICAgIC8vIG1ldGhvZHMgY29udmVydCBldmVyeXRoaW5nIHRvIGxvd2VyY2FzZS5cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmZWF0dXJlc1tmZWF0dXJlTmFtZS50b0xvd2VyQ2FzZSgpXSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgZmVhdHVyZVNvdXJjZSA9IGZlYXR1cmVzW2ZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgIH0gZWxzZSBpZiAoZXhwb3J0cy5kZWZhdWx0RG9jdW1lbnRGZWF0dXJlc1tmZWF0dXJlTmFtZV0pIHtcbiAgICAgIGZlYXR1cmVTb3VyY2UgPSBleHBvcnRzLmRlZmF1bHREb2N1bWVudEZlYXR1cmVzW2ZlYXR1cmVOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW1wbEltcGwgPSBkb2N1bWVudEltcGwuX2ltcGxlbWVudGF0aW9uO1xuICAgIGltcGxJbXBsLl9yZW1vdmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcblxuICAgIGlmIChmZWF0dXJlU291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZlYXR1cmVTb3VyY2UpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZmVhdHVyZVNvdXJjZS5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGltcGxJbXBsLl9hZGRGZWF0dXJlKGZlYXR1cmVOYW1lLCBmZWF0dXJlU291cmNlW2pdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1wbEltcGwuX2FkZEZlYXR1cmUoZmVhdHVyZU5hbWUsIGZlYXR1cmVTb3VyY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0cy5jb250ZXh0aWZ5V2luZG93ID0gd2luZG93ID0+IHtcbiAgaWYgKHZtLmlzQ29udGV4dCh3aW5kb3cpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdm0uY3JlYXRlQ29udGV4dCh3aW5kb3cpO1xuICBjb25zdCBkb2N1bWVudEltcGwgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih3aW5kb3cuX2RvY3VtZW50KTtcbiAgZG9jdW1lbnRJbXBsLl9kZWZhdWx0VmlldyA9IHdpbmRvdy5fZ2xvYmFsUHJveHkgPSB2bS5ydW5JbkNvbnRleHQoXCJ0aGlzXCIsIHdpbmRvdyk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBwYXJzZTUgPSByZXF1aXJlKFwicGFyc2U1XCIpO1xuY29uc3QgZG9jdW1lbnRBZGFwdGVyID0gcmVxdWlyZShcIi4vZG9jdW1lbnRBZGFwdGVyXCIpO1xuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL2xpdmluZy9ub2RlLXR5cGVcIik7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9saXZpbmcvZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG5jb25zdCBzZXJpYWxpemVyID0gbmV3IHBhcnNlNS5UcmVlU2VyaWFsaXplcihkb2N1bWVudEFkYXB0ZXIpO1xuXG5leHBvcnRzLmRvbVRvSHRtbCA9IGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBsZXQgcmV0ID0gXCJcIjtcbiAgZm9yIChjb25zdCBub2RlIG9mIGl0ZXJhYmxlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5ET0NVTUVOVF9OT0RFKSB7XG4gICAgICByZXQgKz0gc2VyaWFsaXplci5zZXJpYWxpemUobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldCArPSBzZXJpYWxpemVyLnNlcmlhbGl6ZSh7IGNoaWxkTm9kZXM6IFtpZGxVdGlscy53cmFwcGVyRm9ySW1wbChub2RlKV0gfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHBhcnNlNSA9IHJlcXVpcmUoXCJwYXJzZTVcIik7XG5jb25zdCBzYXggPSByZXF1aXJlKFwic2F4XCIpO1xuY29uc3QgYXR0cmlidXRlcyA9IHJlcXVpcmUoXCIuLi9saXZpbmcvYXR0cmlidXRlc1wiKTtcbmNvbnN0IERvY3VtZW50VHlwZSA9IHJlcXVpcmUoXCIuLi9saXZpbmcvZ2VuZXJhdGVkL0RvY3VtZW50VHlwZVwiKTtcbmNvbnN0IGxvY2F0aW9uSW5mbyA9IHJlcXVpcmUoXCIuLi9saXZpbmcvaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikubG9jYXRpb25JbmZvO1xuXG5jbGFzcyBIdG1sVG9Eb20ge1xuICBjb25zdHJ1Y3Rvcihjb3JlLCBwYXJzZXIsIHBhcnNpbmdNb2RlKSB7XG4gICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgIGlmIChwYXJzaW5nTW9kZSA9PT0gXCJ4bWxcIikge1xuICAgICAgICBwYXJzZXIgPSBzYXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZXIgPSBwYXJzZTU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb3JlID0gY29yZTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnBhcnNpbmdNb2RlID0gcGFyc2luZ01vZGU7XG5cbiAgICBpZiAocGFyc2VyLkRlZmF1bHRIYW5kbGVyKSB7XG4gICAgICB0aGlzLnBhcnNlclR5cGUgPSBcImh0bWxwYXJzZXIyXCI7XG4gICAgfSBlbHNlIGlmIChwYXJzZXIuUGFyc2VyICYmIHBhcnNlci5UcmVlQWRhcHRlcnMpIHtcbiAgICAgIHRoaXMucGFyc2VyVHlwZSA9IFwicGFyc2U1djFcIjtcbiAgICB9IGVsc2UgaWYgKHBhcnNlci5tb2R1bGVOYW1lID09PSBcIkhUTUw1XCIpIHtcbiAgICAgIHRoaXMucGFyc2VyVHlwZSA9IFwiaHRtbDVcIjtcbiAgICB9IGVsc2UgaWYgKHBhcnNlci5wYXJzZXIpIHtcbiAgICAgIHRoaXMucGFyc2VyVHlwZSA9IFwic2F4XCI7XG4gICAgfVxuICB9XG5cbiAgYXBwZW5kSHRtbFRvRWxlbWVudChodG1sLCBlbGVtZW50KSB7XG4gICAgaWYgKHR5cGVvZiBodG1sICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICBodG1sID0gU3RyaW5nKGh0bWwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW1wiX3BhcnNlV2l0aFwiICsgdGhpcy5wYXJzZXJUeXBlXShodG1sLCB0cnVlLCBlbGVtZW50KTtcbiAgfVxuXG4gIGFwcGVuZEh0bWxUb0RvY3VtZW50KGh0bWwsIGRvY3VtZW50SW1wbCkge1xuICAgIGlmICh0eXBlb2YgaHRtbCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgaHRtbCA9IFN0cmluZyhodG1sKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gZG9jdW1lbnRJbXBsLl9wYXJzZU9wdGlvbnM7XG4gICAgcmV0dXJuIHRoaXNbXCJfcGFyc2VXaXRoXCIgKyB0aGlzLnBhcnNlclR5cGVdKGh0bWwsIGZhbHNlLCBkb2N1bWVudEltcGwsIG9wdGlvbnMpO1xuICB9XG5cbiAgX3BhcnNlV2l0aGh0bWxwYXJzZXIyKGh0bWwsIGZyYWdtZW50LCBlbGVtZW50KSB7XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyB0aGlzLnBhcnNlci5EZWZhdWx0SGFuZGxlcigpO1xuICAgIC8vIENoZWNrIGlmIGRvY3VtZW50IGlzIFhNTFxuICAgIGNvbnN0IGlzWE1MID0gdGhpcy5wYXJzaW5nTW9kZSA9PT0gXCJ4bWxcIjtcbiAgICBjb25zdCBwYXJzZXJJbnN0YW5jZSA9IG5ldyB0aGlzLnBhcnNlci5QYXJzZXIoaGFuZGxlciwge1xuICAgICAgeG1sTW9kZTogaXNYTUwsXG4gICAgICBsb3dlckNhc2VUYWdzOiAhaXNYTUwsXG4gICAgICBsb3dlckNhc2VBdHRyaWJ1dGVOYW1lczogIWlzWE1MLFxuICAgICAgZGVjb2RlRW50aXRpZXM6IHRydWVcbiAgICB9KTtcblxuICAgIHBhcnNlckluc3RhbmNlLmluY2x1ZGVMb2NhdGlvbiA9IGZhbHNlO1xuICAgIHBhcnNlckluc3RhbmNlLnBhcnNlQ29tcGxldGUoaHRtbCk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBoYW5kbGVyLmRvbTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnNlZC5sZW5ndGg7IGkrKykge1xuICAgICAgc2V0Q2hpbGQodGhpcy5jb3JlLCBlbGVtZW50LCBwYXJzZWRbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgX3BhcnNlV2l0aHBhcnNlNXYxKGh0bWwsIGZyYWdtZW50LCBlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMucGFyc2luZ01vZGUgPT09IFwieG1sXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHBhcnNlIFhNTCB3aXRoIHBhcnNlNSwgcGxlYXNlIHVzZSBodG1scGFyc2VyMiBpbnN0ZWFkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBodG1scGFyc2VyMkFkYXB0ZXIgPSB0aGlzLnBhcnNlci5UcmVlQWRhcHRlcnMuaHRtbHBhcnNlcjI7XG4gICAgbGV0IGRvbTtcbiAgICBpZiAoZnJhZ21lbnQpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IHRoaXMucGFyc2VyLlBhcnNlcihodG1scGFyc2VyMkFkYXB0ZXIpO1xuICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IGh0bWxwYXJzZXIyQWRhcHRlci5jcmVhdGVFbGVtZW50KGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCBlbGVtZW50Lm5hbWVzcGFjZVVSSSwgW10pO1xuICAgICAgZG9tID0gaW5zdGFuY2UucGFyc2VGcmFnbWVudChodG1sLCBwYXJlbnRFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgdGhpcy5wYXJzZXIuUGFyc2VyKGh0bWxwYXJzZXIyQWRhcHRlciwgb3B0aW9ucyk7XG4gICAgICBkb20gPSBpbnN0YW5jZS5wYXJzZShodG1sKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWQgPSBkb20uY2hpbGRyZW47XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJzZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNldENoaWxkKHRoaXMuY29yZSwgZWxlbWVudCwgcGFyc2VkW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIF9wYXJzZVdpdGhodG1sNShodG1sLCBmcmFnbWVudCwgZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlID09PSA5KSB7XG4gICAgICBuZXcgdGhpcy5wYXJzZXIuUGFyc2VyKHsgZG9jdW1lbnQ6IGVsZW1lbnQgfSkucGFyc2UoaHRtbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHAgPSBuZXcgdGhpcy5wYXJzZXIuUGFyc2VyKHsgZG9jdW1lbnQ6IGVsZW1lbnQub3duZXJEb2N1bWVudCB9KTtcbiAgICAgIHAucGFyc2VfZnJhZ21lbnQoaHRtbCwgZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgX3BhcnNlV2l0aHNheChodG1sLCBmcmFnbWVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IFNheFBhcnNlciA9IHRoaXMucGFyc2VyLnBhcnNlcjtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgU2F4UGFyc2VyKC8qIHN0cmljdCA9ICovdHJ1ZSwgeyB4bWxuczogdHJ1ZSB9KTtcbiAgICBwYXJzZXIubm9zY3JpcHQgPSBmYWxzZTtcbiAgICBwYXJzZXIubG9vc2VDYXNlID0gXCJ0b1N0cmluZ1wiO1xuICAgIGNvbnN0IG9wZW5TdGFjayA9IFtlbGVtZW50XTtcbiAgICBwYXJzZXIub250ZXh0ID0gdGV4dCA9PiB7XG4gICAgICBzZXRDaGlsZCh0aGlzLmNvcmUsIG9wZW5TdGFja1tvcGVuU3RhY2subGVuZ3RoIC0gMV0sIHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIGRhdGE6IHRleHRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgcGFyc2VyLm9ub3BlbnRhZyA9IGFyZyA9PiB7XG4gICAgICBjb25zdCBhdHRyVmFsdWVzID0ge307XG4gICAgICBjb25zdCBhdHRyUHJlZml4ZXMgPSB7fTtcbiAgICAgIGNvbnN0IGF0dHJOYW1lc3BhY2VzID0ge307XG4gICAgICBPYmplY3Qua2V5cyhhcmcuYXR0cmlidXRlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCBsb2NhbE5hbWUgPSBhcmcuYXR0cmlidXRlc1trZXldLmxvY2FsO1xuICAgICAgICBhdHRyVmFsdWVzW2xvY2FsTmFtZV0gPSBhcmcuYXR0cmlidXRlc1trZXldLnZhbHVlO1xuICAgICAgICBhdHRyUHJlZml4ZXNbbG9jYWxOYW1lXSA9IGFyZy5hdHRyaWJ1dGVzW2tleV0ucHJlZml4IHx8IG51bGw7XG4gICAgICAgIGF0dHJOYW1lc3BhY2VzW2xvY2FsTmFtZV0gPSBhcmcuYXR0cmlidXRlc1trZXldLnVyaSB8fCBudWxsO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChhcmcubG9jYWwgPT09IFwic2NyaXB0XCIgJiYgYXJnLnVyaSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpIHtcbiAgICAgICAgb3BlblN0YWNrLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFwidGFnXCIsXG4gICAgICAgICAgbmFtZTogYXJnLmxvY2FsLFxuICAgICAgICAgIHByZWZpeDogYXJnLnByZWZpeCxcbiAgICAgICAgICBuYW1lc3BhY2U6IGFyZy51cmksXG4gICAgICAgICAgYXR0cmliczogYXR0clZhbHVlcyxcbiAgICAgICAgICBcIngtYXR0cmlic1ByZWZpeFwiOiBhdHRyUHJlZml4ZXMsXG4gICAgICAgICAgXCJ4LWF0dHJpYnNOYW1lc3BhY2VcIjogYXR0ck5hbWVzcGFjZXNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlbGVtID0gc2V0Q2hpbGQodGhpcy5jb3JlLCBvcGVuU3RhY2tbb3BlblN0YWNrLmxlbmd0aCAtIDFdLCB7XG4gICAgICAgICAgdHlwZTogXCJ0YWdcIixcbiAgICAgICAgICBuYW1lOiBhcmcubG9jYWwsXG4gICAgICAgICAgcHJlZml4OiBhcmcucHJlZml4LFxuICAgICAgICAgIG5hbWVzcGFjZTogYXJnLnVyaSxcbiAgICAgICAgICBhdHRyaWJzOiBhdHRyVmFsdWVzLFxuICAgICAgICAgIFwieC1hdHRyaWJzUHJlZml4XCI6IGF0dHJQcmVmaXhlcyxcbiAgICAgICAgICBcIngtYXR0cmlic05hbWVzcGFjZVwiOiBhdHRyTmFtZXNwYWNlc1xuICAgICAgICB9KTtcbiAgICAgICAgb3BlblN0YWNrLnB1c2goZWxlbSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBwYXJzZXIub25jbG9zZXRhZyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW0gPSBvcGVuU3RhY2sucG9wKCk7XG4gICAgICBpZiAoZWxlbS5jb25zdHJ1Y3Rvci5uYW1lID09PSBcIk9iamVjdFwiKSB7IC8vIHdlIGhhdmUgYW4gZW1wdHkgc2NyaXB0IHRhZ1xuICAgICAgICBzZXRDaGlsZCh0aGlzLmNvcmUsIG9wZW5TdGFja1tvcGVuU3RhY2subGVuZ3RoIC0gMV0sIGVsZW0pO1xuICAgICAgfVxuICAgIH07XG4gICAgcGFyc2VyLm9uc2NyaXB0ID0gc2NyaXB0VGV4dCA9PiB7XG4gICAgICBjb25zdCB0YWcgPSBvcGVuU3RhY2sucG9wKCk7XG4gICAgICB0YWcuY2hpbGRyZW4gPSBbeyB0eXBlOiBcInRleHRcIiwgZGF0YTogc2NyaXB0VGV4dCB9XTtcbiAgICAgIGNvbnN0IGVsZW0gPSBzZXRDaGlsZCh0aGlzLmNvcmUsIG9wZW5TdGFja1tvcGVuU3RhY2subGVuZ3RoIC0gMV0sIHRhZyk7XG4gICAgICBvcGVuU3RhY2sucHVzaChlbGVtKTtcbiAgICB9O1xuICAgIHBhcnNlci5vbmNvbW1lbnQgPSBjb21tZW50ID0+IHtcbiAgICAgIHNldENoaWxkKHRoaXMuY29yZSwgb3BlblN0YWNrW29wZW5TdGFjay5sZW5ndGggLSAxXSwge1xuICAgICAgICB0eXBlOiBcImNvbW1lbnRcIixcbiAgICAgICAgZGF0YTogY29tbWVudFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBwYXJzZXIub25wcm9jZXNzaW5naW5zdHJ1Y3Rpb24gPSBwaSA9PiB7XG4gICAgICBzZXRDaGlsZCh0aGlzLmNvcmUsIG9wZW5TdGFja1tvcGVuU3RhY2subGVuZ3RoIC0gMV0sIHtcbiAgICAgICAgdHlwZTogXCJkaXJlY3RpdmVcIixcbiAgICAgICAgbmFtZTogXCI/XCIgKyBwaS5uYW1lLFxuICAgICAgICBkYXRhOiBcIj9cIiArIHBpLm5hbWUgKyBcIiBcIiArIHBpLmJvZHkgKyBcIj9cIlxuICAgICAgfSk7XG4gICAgfTtcbiAgICBwYXJzZXIub25kb2N0eXBlID0gZHQgPT4ge1xuICAgICAgc2V0Q2hpbGQodGhpcy5jb3JlLCBvcGVuU3RhY2tbb3BlblN0YWNrLmxlbmd0aCAtIDFdLCB7XG4gICAgICAgIHR5cGU6IFwiZGlyZWN0aXZlXCIsXG4gICAgICAgIG5hbWU6IFwiIWRvY3R5cGVcIixcbiAgICAgICAgZGF0YTogXCIhZG9jdHlwZSBcIiArIGR0XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZW50aXR5TWF0Y2hlciA9IC88IUVOVElUWSAoW14gXSspIFwiKFteXCJdKylcIj4vZztcbiAgICAgIGxldCByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IGVudGl0eU1hdGNoZXIuZXhlYyhkdCkpKSB7XG4gICAgICAgIGNvbnN0IFssIG5hbWUsIHZhbHVlXSA9IHJlc3VsdDtcbiAgICAgICAgaWYgKCEobmFtZSBpbiBwYXJzZXIuRU5USVRJRVMpKSB7XG4gICAgICAgICAgcGFyc2VyLkVOVElUSUVTW25hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcGFyc2VyLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH07XG4gICAgcGFyc2VyLndyaXRlKGh0bWwpLmNsb3NlKCk7XG4gIH1cbn1cblxuLy8gdXRpbGl0eSBmdW5jdGlvbiBmb3IgZm9yZ2l2aW5nIHBhcnNlclxuZnVuY3Rpb24gc2V0Q2hpbGQoY29yZSwgcGFyZW50SW1wbCwgbm9kZSkge1xuICBjb25zdCBjdXJyZW50RG9jdW1lbnQgPSBwYXJlbnRJbXBsICYmIHBhcmVudEltcGwuX293bmVyRG9jdW1lbnQgfHwgcGFyZW50SW1wbDtcblxuICBsZXQgbmV3Tm9kZTtcbiAgbGV0IGlzVGVtcGxhdGVDb250ZW50cyA9IGZhbHNlO1xuICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgIGNhc2UgXCJ0YWdcIjpcbiAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICBuZXdOb2RlID0gY3VycmVudERvY3VtZW50Ll9jcmVhdGVFbGVtZW50V2l0aENvcnJlY3RFbGVtZW50SW50ZXJmYWNlKG5vZGUubmFtZSwgbm9kZS5uYW1lc3BhY2UpO1xuICAgICAgbmV3Tm9kZS5fcHJlZml4ID0gbm9kZS5wcmVmaXggfHwgbnVsbDtcbiAgICAgIG5ld05vZGUuX25hbWVzcGFjZVVSSSA9IG5vZGUubmFtZXNwYWNlIHx8IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJyb290XCI6XG4gICAgICAvLyBJZiB3ZSBhcmUgaW4gPHRlbXBsYXRlPiB0aGVuIGFkZCBhbGwgY2hpbGRyZW4gdG8gdGhlIHBhcmVudCdzIF90ZW1wbGF0ZUNvbnRlbnRzOyBza2lwIHRoaXMgdmlydHVhbCByb290IG5vZGUuXG4gICAgICBpZiAocGFyZW50SW1wbC50YWdOYW1lID09PSBcIlRFTVBMQVRFXCIgJiYgcGFyZW50SW1wbC5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIikge1xuICAgICAgICBuZXdOb2RlID0gcGFyZW50SW1wbC5fdGVtcGxhdGVDb250ZW50cztcbiAgICAgICAgaXNUZW1wbGF0ZUNvbnRlbnRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRleHRcIjpcbiAgICAgIC8vIEhUTUwgZW50aXRpZXMgc2hvdWxkIGFscmVhZHkgYmUgZGVjb2RlZCBieSB0aGUgcGFyc2VyLCBzbyBubyBuZWVkIHRvIGRlY29kZSB0aGVtXG4gICAgICBuZXdOb2RlID0gY3VycmVudERvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5vZGUuZGF0YSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJjb21tZW50XCI6XG4gICAgICBuZXdOb2RlID0gY3VycmVudERvY3VtZW50LmNyZWF0ZUNvbW1lbnQobm9kZS5kYXRhKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImRpcmVjdGl2ZVwiOlxuICAgICAgaWYgKG5vZGUubmFtZVswXSA9PT0gXCI/XCIgJiYgbm9kZS5uYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwiP3htbFwiKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBub2RlLmRhdGEuc2xpY2Uobm9kZS5uYW1lLmxlbmd0aCArIDEsIC0xKTtcbiAgICAgICAgbmV3Tm9kZSA9IGN1cnJlbnREb2N1bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24obm9kZS5uYW1lLnN1YnN0cmluZygxKSwgZGF0YSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUubmFtZS50b0xvd2VyQ2FzZSgpID09PSBcIiFkb2N0eXBlXCIpIHtcbiAgICAgICAgaWYgKG5vZGVbXCJ4LW5hbWVcIl0gIT09IHVuZGVmaW5lZCkgeyAvLyBwYXJzZTUgc3VwcG9ydHMgZG9jdHlwZXMgZGlyZWN0bHlcbiAgICAgICAgICBuZXdOb2RlID0gY3JlYXRlRG9jdW1lbnRUeXBlSW50ZXJuYWwoY29yZSwgY3VycmVudERvY3VtZW50LFxuICAgICAgICAgICAgbm9kZVtcIngtbmFtZVwiXSB8fCBcIlwiLFxuICAgICAgICAgICAgbm9kZVtcIngtcHVibGljSWRcIl0gfHwgXCJcIixcbiAgICAgICAgICAgIG5vZGVbXCJ4LXN5c3RlbUlkXCJdIHx8IFwiXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld05vZGUgPSBwYXJzZURvY1R5cGUoY29yZSwgY3VycmVudERvY3VtZW50LCBcIjxcIiArIG5vZGUuZGF0YSArIFwiPlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cblxuICBpZiAoIW5ld05vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG5ld05vZGVbbG9jYXRpb25JbmZvXSA9IG5vZGUuX19sb2NhdGlvbjtcblxuICBpZiAobm9kZS5hdHRyaWJzKSB7XG4gICAgT2JqZWN0LmtleXMobm9kZS5hdHRyaWJzKS5mb3JFYWNoKGxvY2FsTmFtZSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG5vZGUuYXR0cmlic1tsb2NhbE5hbWVdO1xuICAgICAgbGV0IHByZWZpeCA9XG4gICAgICAgIG5vZGVbXCJ4LWF0dHJpYnNQcmVmaXhcIl0gJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVbXCJ4LWF0dHJpYnNQcmVmaXhcIl0sIGxvY2FsTmFtZSkgJiZcbiAgICAgICAgbm9kZVtcIngtYXR0cmlic1ByZWZpeFwiXVtsb2NhbE5hbWVdIHx8IG51bGw7XG4gICAgICBjb25zdCBuYW1lc3BhY2UgPVxuICAgICAgICBub2RlW1wieC1hdHRyaWJzTmFtZXNwYWNlXCJdICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlW1wieC1hdHRyaWJzTmFtZXNwYWNlXCJdLCBsb2NhbE5hbWUpICYmXG4gICAgICAgIG5vZGVbXCJ4LWF0dHJpYnNOYW1lc3BhY2VcIl1bbG9jYWxOYW1lXSB8fCBudWxsO1xuICAgICAgaWYgKHByZWZpeCA9PT0gXCJ4bWxuc1wiICYmIGxvY2FsTmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgLy8gaW50ZW5kZWQgd2VpcmRuZXNzIGluIG5vZGUtc2F4LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9zYXgtanMvaXNzdWVzLzE2NVxuICAgICAgICBsb2NhbE5hbWUgPSBwcmVmaXg7XG4gICAgICAgIHByZWZpeCA9IG51bGw7XG4gICAgICB9XG4gICAgICBhdHRyaWJ1dGVzLnNldEF0dHJpYnV0ZVZhbHVlKG5ld05vZGUsIGxvY2FsTmFtZSwgdmFsdWUsIHByZWZpeCwgbmFtZXNwYWNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgZm9yIChsZXQgYyA9IDA7IGMgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgYysrKSB7XG4gICAgICBzZXRDaGlsZChjb3JlLCBuZXdOb2RlLCBub2RlLmNoaWxkcmVuW2NdKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzVGVtcGxhdGVDb250ZW50cykge1xuICAgIGlmIChwYXJlbnRJbXBsLl90ZW1wbGF0ZUNvbnRlbnRzKSB7XG4gICAgICAvLyBTZXR0aW5nIGlubmVySFRNTCBvbiBhIDx0ZW1wbGF0ZT5cbiAgICAgIHBhcmVudEltcGwuX3RlbXBsYXRlQ29udGVudHMuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudEltcGwuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld05vZGU7XG59XG5cbmNvbnN0IEhUTUw1X0RPQ1RZUEUgPSAvPCFkb2N0eXBlIGh0bWw+L2k7XG5jb25zdCBQVUJMSUNfRE9DVFlQRSA9IC88IWRvY3R5cGVcXHMrKFteXFxzXSspXFxzK3B1YmxpY1xccytcIihbXlwiXSspXCJcXHMrXCIoW15cIl0rKVwiL2k7XG5jb25zdCBTWVNURU1fRE9DVFlQRSA9IC88IWRvY3R5cGVcXHMrKFteXFxzXSspXFxzK3N5c3RlbVxccytcIihbXlwiXSspXCIvaTtcblxuZnVuY3Rpb24gcGFyc2VEb2NUeXBlKGNvcmUsIGRvYywgaHRtbCkge1xuICBpZiAoSFRNTDVfRE9DVFlQRS50ZXN0KGh0bWwpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZURvY3VtZW50VHlwZUludGVybmFsKGNvcmUsIGRvYywgXCJodG1sXCIsIFwiXCIsIFwiXCIpO1xuICB9XG5cbiAgY29uc3QgcHVibGljUGllY2VzID0gUFVCTElDX0RPQ1RZUEUuZXhlYyhodG1sKTtcbiAgaWYgKHB1YmxpY1BpZWNlcykge1xuICAgIHJldHVybiBjcmVhdGVEb2N1bWVudFR5cGVJbnRlcm5hbChjb3JlLCBkb2MsIHB1YmxpY1BpZWNlc1sxXSwgcHVibGljUGllY2VzWzJdLCBwdWJsaWNQaWVjZXNbM10pO1xuICB9XG5cbiAgY29uc3Qgc3lzdGVtUGllY2VzID0gU1lTVEVNX0RPQ1RZUEUuZXhlYyhodG1sKTtcbiAgaWYgKHN5c3RlbVBpZWNlcykge1xuICAgIHJldHVybiBjcmVhdGVEb2N1bWVudFR5cGVJbnRlcm5hbChjb3JlLCBkb2MsIHN5c3RlbVBpZWNlc1sxXSwgXCJcIiwgc3lzdGVtUGllY2VzWzJdKTtcbiAgfVxuXG4gIC8vIFNob3VsZG4ndCBnZXQgaGVyZSAodGhlIHBhcnNlciBzaG91bGRuJ3QgbGV0IHVzIGtub3cgYWJvdXQgaW52YWxpZCBkb2N0eXBlcyksIGJ1dCBvdXIgbG9naWMgbGlrZWx5IGlzbid0XG4gIC8vIHJlYWwtd29ybGQgcGVyZmVjdCwgc28gbGV0J3MgZmFsbGJhY2suXG4gIHJldHVybiBjcmVhdGVEb2N1bWVudFR5cGVJbnRlcm5hbChjb3JlLCBkb2MsIFwiaHRtbFwiLCBcIlwiLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRG9jdW1lbnRUeXBlSW50ZXJuYWwoY29yZSwgb3duZXJEb2N1bWVudCwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XG4gIHJldHVybiBEb2N1bWVudFR5cGUuY3JlYXRlSW1wbChbXSwgeyBjb3JlLCBvd25lckRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQgfSk7XG59XG5cbmV4cG9ydHMuSHRtbFRvRG9tID0gSHRtbFRvRG9tO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVGb3JFcnJvck1lc3NhZ2UsIHdpbmRvdykge1xuICBpZiAoIXdpbmRvdykge1xuICAgIC8vIERvIG5vdGhpbmcgZm9yIHdpbmRvdy1sZXNzIGRvY3VtZW50cy5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgTm90IGltcGxlbWVudGVkOiAke25hbWVGb3JFcnJvck1lc3NhZ2V9YCk7XG4gIGVycm9yLnR5cGUgPSBcIm5vdCBpbXBsZW1lbnRlZFwiO1xuXG4gIHdpbmRvdy5fdmlydHVhbENvbnNvbGUuZW1pdChcImpzZG9tRXJyb3JcIiwgZXJyb3IpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBwYXJzZUNvbnRlbnRUeXBlID0gcmVxdWlyZShcImNvbnRlbnQtdHlwZS1wYXJzZXJcIik7XG5jb25zdCBzbmlmZkhUTUxFbmNvZGluZyA9IHJlcXVpcmUoXCJodG1sLWVuY29kaW5nLXNuaWZmZXJcIik7XG5jb25zdCB3aGF0d2dFbmNvZGluZyA9IHJlcXVpcmUoXCJ3aGF0d2ctZW5jb2RpbmdcIik7XG5jb25zdCBwYXJzZURhdGFVcmwgPSByZXF1aXJlKFwiLi4vdXRpbHNcIikucGFyc2VEYXRhVXJsO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XG5jb25zdCBkb2N1bWVudEJhc2VVUkxTZXJpYWxpemVkID0gcmVxdWlyZShcIi4uL2xpdmluZy9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsXCIpLmRvY3VtZW50QmFzZVVSTFNlcmlhbGl6ZWQ7XG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbGl2aW5nL25vZGUtdHlwZVwiKTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1tb2R1bGVzICovXG4vLyBUT0RPOiBzdG9wIHVzaW5nIHRoZSBidWlsdC1pbiBVUkwgaW4gZmF2b3Igb2YgdGhlIHNwZWMtY29tcGxpYW50IHdoYXR3Zy11cmwgcGFja2FnZVxuLy8gVGhpcyBsZWdhY3kgdXNhZ2UgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcHVyZ2VkLlxuY29uc3QgVVJMID0gcmVxdWlyZShcInVybFwiKTtcbi8qIGVzbGludC1lbmFibGUgbm8tcmVzdHJpY3RlZC1tb2R1bGVzICovXG5cbmNvbnN0IElTX0JST1dTRVIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgIT09IFwiW29iamVjdCBwcm9jZXNzXVwiO1xuXG5mdW5jdGlvbiBjcmVhdGVSZXNvdXJjZUxvYWRIYW5kbGVyKGVsZW1lbnQsIHJlc291cmNlVXJsLCBkb2N1bWVudCwgbG9hZENhbGxiYWNrKSB7XG4gIGlmIChsb2FkQ2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGxvYWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9O1xuICB9XG4gIHJldHVybiAoZXJyLCBkYXRhLCByZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO1xuXG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvYWRDYWxsYmFjay5jYWxsKGVsZW1lbnQsIGRhdGEsIHJlc291cmNlVXJsLCByZXNwb25zZSk7XG4gICAgICAgIGV2LmluaXRFdmVudChcImxvYWRcIiwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZXJyID0gZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBpZiAoIWVyci5pc0Fib3J0RXJyb3IpIHtcbiAgICAgICAgZXYuaW5pdEV2ZW50KFwiZXJyb3JcIiwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgZXYuZXJyb3IgPSBlcnI7XG4gICAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldik7XG5cbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYENvdWxkIG5vdCBsb2FkICR7ZWxlbWVudC5sb2NhbE5hbWV9OiBcIiR7cmVzb3VyY2VVcmx9XCJgKTtcbiAgICAgICAgZXJyb3IuZGV0YWlsID0gZXJyO1xuICAgICAgICBlcnJvci50eXBlID0gXCJyZXNvdXJjZSBsb2FkaW5nXCI7XG5cbiAgICAgICAgZG9jdW1lbnQuX2RlZmF1bHRWaWV3Ll92aXJ0dWFsQ29uc29sZS5lbWl0KFwianNkb21FcnJvclwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldik7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnRzLnJlYWRGaWxlID0gZnVuY3Rpb24gKGZpbGVQYXRoLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBjb25zdCByZWFkYWJsZVN0cmVhbSA9IGZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpO1xuXG4gIGxldCBkYXRhID0gbmV3IEJ1ZmZlcigwKTtcblxuICByZWFkYWJsZVN0cmVhbS5vbihcImVycm9yXCIsIGNhbGxiYWNrKTtcblxuICByZWFkYWJsZVN0cmVhbS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xuICAgIGRhdGEgPSBCdWZmZXIuY29uY2F0KFtkYXRhLCBjaHVua10pO1xuICB9KTtcblxuICBjb25zdCBkZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZztcbiAgY29uc3QgZGV0ZWN0TWV0YUNoYXJzZXQgPSBvcHRpb25zLmRldGVjdE1ldGFDaGFyc2V0O1xuXG4gIHJlYWRhYmxlU3RyZWFtLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAvLyBOb3QgcGFzc2luZyBkZWZhdWx0IGVuY29kaW5nIG1lYW5zIGJpbmFyeVxuICAgIGlmIChkZWZhdWx0RW5jb2RpbmcpIHtcbiAgICAgIGNvbnN0IGVuY29kaW5nID0gZGV0ZWN0TWV0YUNoYXJzZXQgPyBzbmlmZkhUTUxFbmNvZGluZyhkYXRhLCB7IGRlZmF1bHRFbmNvZGluZyB9KSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHdoYXR3Z0VuY29kaW5nLmdldEJPTUVuY29kaW5nKGRhdGEpIHx8IGRlZmF1bHRFbmNvZGluZztcbiAgICAgIGNvbnN0IGRlY29kZWQgPSB3aGF0d2dFbmNvZGluZy5kZWNvZGUoZGF0YSwgZW5jb2RpbmcpO1xuICAgICAgY2FsbGJhY2sobnVsbCwgZGVjb2RlZCwgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjtjaGFyc2V0PVwiICsgZW5jb2RpbmcgfSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sobnVsbCwgZGF0YSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGFib3J0KCkge1xuICAgICAgcmVhZGFibGVTdHJlYW0uZGVzdHJveSgpO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJyZXF1ZXN0IGNhbmNlbGVkIGJ5IHVzZXJcIik7XG4gICAgICBlcnJvci5pc0Fib3J0RXJyb3IgPSB0cnVlO1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIHJlYWREYXRhVXJsKGRhdGFVcmwsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nO1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBwYXJzZURhdGFVcmwoZGF0YVVybCk7XG4gICAgLy8gSWYgZGVmYXVsdCBlbmNvZGluZyBkb2VzIG5vdCBleGlzdCwgcGFzcyBvbiBiaW5hcnkgZGF0YS5cbiAgICBpZiAoZGVmYXVsdEVuY29kaW5nKSB7XG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhcnNlQ29udGVudFR5cGUoZGF0YS50eXBlKSB8fCBwYXJzZUNvbnRlbnRUeXBlKFwidGV4dC9wbGFpblwiKTtcbiAgICAgIGNvbnN0IHNuaWZmT3B0aW9ucyA9IHtcbiAgICAgICAgdHJhbnNwb3J0TGF5ZXJFbmNvZGluZ0xhYmVsOiBjb250ZW50VHlwZS5nZXQoXCJjaGFyc2V0XCIpLFxuICAgICAgICBkZWZhdWx0RW5jb2RpbmdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGVuY29kaW5nID0gb3B0aW9ucy5kZXRlY3RNZXRhQ2hhcnNldCA/IHNuaWZmSFRNTEVuY29kaW5nKGRhdGEuYnVmZmVyLCBzbmlmZk9wdGlvbnMpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgd2hhdHdnRW5jb2RpbmcuZ2V0Qk9NRW5jb2RpbmcoZGF0YS5idWZmZXIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKGNvbnRlbnRUeXBlLmdldChcImNoYXJzZXRcIikpIHx8IGRlZmF1bHRFbmNvZGluZztcbiAgICAgIGNvbnN0IGRlY29kZWQgPSB3aGF0d2dFbmNvZGluZy5kZWNvZGUoZGF0YS5idWZmZXIsIGVuY29kaW5nKTtcblxuICAgICAgY29udGVudFR5cGUuc2V0KFwiY2hhcnNldFwiLCBlbmNvZGluZyk7XG4gICAgICBkYXRhLnR5cGUgPSBjb250ZW50VHlwZS50b1N0cmluZygpO1xuXG4gICAgICBjYWxsYmFjayhudWxsLCBkZWNvZGVkLCB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogZGF0YS50eXBlIH0gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG51bGwsIGRhdGEuYnVmZmVyLCB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogZGF0YS50eXBlIH0gfSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYWxsYmFjayhlcnIsIG51bGwpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBOT1RFOiByZXF1ZXN0IHdyYXBzIHRvdWdoLWNvb2tpZSBjb29raWUgamFyXG4vLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVxdWVzdC9yZXF1ZXN0L2Jsb2IvbWFzdGVyL2xpYi9jb29raWVzLmpzKS5cbi8vIFRoZXJlZm9yZSwgdG8gcGFzcyBvdXIgY29va2llIGphciB0byB0aGUgcmVxdWVzdCwgd2UgbmVlZCB0byBjcmVhdGVcbi8vIHJlcXVlc3QncyB3cmFwcGVyIGFuZCBtb25rZXkgcGF0Y2ggaXQgd2l0aCBvdXIgamFyLlxuZXhwb3J0cy53cmFwQ29va2llSmFyRm9yUmVxdWVzdCA9IGNvb2tpZUphciA9PiB7XG4gIGNvbnN0IGphcldyYXBwZXIgPSByZXF1ZXN0LmphcigpO1xuICBqYXJXcmFwcGVyLl9qYXIgPSBjb29raWVKYXI7XG4gIHJldHVybiBqYXJXcmFwcGVyO1xufTtcblxuZnVuY3Rpb24gZmV0Y2godXJsT2JqLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAodXJsT2JqLnByb3RvY29sID09PSBcImRhdGE6XCIpIHtcbiAgICByZXR1cm4gcmVhZERhdGFVcmwodXJsT2JqLmhyZWYsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgfSBlbHNlIGlmICh1cmxPYmouaG9zdG5hbWUpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5kb3dubG9hZCh1cmxPYmosIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgfVxuICBjb25zdCBmaWxlUGF0aCA9IHVybE9iai5wYXRobmFtZVxuICAgIC5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9eXFwvKFthLXpdKTpcXC8vaSwgXCIkMTovXCIpXG4gICAgLnJlcGxhY2UoLyUyMC9nLCBcIiBcIik7XG4gIHJldHVybiBleHBvcnRzLnJlYWRGaWxlKGZpbGVQYXRoLCBvcHRpb25zLCBjYWxsYmFjayk7XG59XG5cbmV4cG9ydHMuZW5xdWV1ZSA9IGZ1bmN0aW9uIChlbGVtZW50LCByZXNvdXJjZVVybCwgY2FsbGJhY2spIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBlbGVtZW50Lm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRE9DVU1FTlRfTk9ERSA/IGVsZW1lbnQgOiBlbGVtZW50Ll9vd25lckRvY3VtZW50O1xuXG4gIGlmIChkb2N1bWVudC5fcXVldWUpIHtcbiAgICBjb25zdCBsb2FkSGFuZGxlciA9IGNyZWF0ZVJlc291cmNlTG9hZEhhbmRsZXIoZWxlbWVudCwgcmVzb3VyY2VVcmwgfHwgZG9jdW1lbnQuVVJMLCBkb2N1bWVudCwgY2FsbGJhY2spO1xuICAgIHJldHVybiBkb2N1bWVudC5fcXVldWUucHVzaChsb2FkSGFuZGxlcik7XG4gIH1cblxuICByZXR1cm4gKCkgPT4ge1xuICAgIC8vIGRvIG5vdGhpbmcgaW4gcXVldWUtbGVzcyBkb2N1bWVudHNcbiAgfTtcbn07XG5cbmV4cG9ydHMuZG93bmxvYWQgPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICBwb29sOiBvcHRpb25zLnBvb2wsXG4gICAgYWdlbnQ6IG9wdGlvbnMuYWdlbnQsXG4gICAgYWdlbnRPcHRpb25zOiBvcHRpb25zLmFnZW50T3B0aW9ucyxcbiAgICBhZ2VudENsYXNzOiBvcHRpb25zLmFnZW50Q2xhc3MsXG4gICAgc3RyaWN0U1NMOiBvcHRpb25zLnN0cmljdFNTTCxcbiAgICBnemlwOiB0cnVlLFxuICAgIGphcjogZXhwb3J0cy53cmFwQ29va2llSmFyRm9yUmVxdWVzdChvcHRpb25zLmNvb2tpZUphciksXG4gICAgZW5jb2Rpbmc6IG51bGwsXG4gICAgaGVhZGVyczoge1xuICAgICAgXCJVc2VyLUFnZW50XCI6IG9wdGlvbnMudXNlckFnZW50LFxuICAgICAgXCJBY2NlcHQtTGFuZ3VhZ2VcIjogXCJlblwiLFxuICAgICAgQWNjZXB0OiBvcHRpb25zLmFjY2VwdCB8fCBcIiovKlwiXG4gICAgfVxuICB9O1xuICBpZiAob3B0aW9ucy5yZWZlcnJlciAmJiAhSVNfQlJPV1NFUikge1xuICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMucmVmZXJlciA9IG9wdGlvbnMucmVmZXJyZXI7XG4gIH1cbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHk7XG4gIH1cbiAgT2JqZWN0LmFzc2lnbihyZXF1ZXN0T3B0aW9ucy5oZWFkZXJzLCBvcHRpb25zLmhlYWRlcnMpO1xuXG4gIGNvbnN0IGRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nO1xuICBjb25zdCBkZXRlY3RNZXRhQ2hhcnNldCA9IG9wdGlvbnMuZGV0ZWN0TWV0YUNoYXJzZXQ7XG5cbiAgY29uc3QgcmVxID0gcmVxdWVzdCh1cmwsIHJlcXVlc3RPcHRpb25zLCAoZXJyb3IsIHJlc3BvbnNlLCBidWZmZXJEYXRhKSA9PiB7XG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgLy8gSWYgZGVmYXVsdCBlbmNvZGluZyBkb2VzIG5vdCBleGlzdCwgcGFzcyBvbiBiaW5hcnkgZGF0YS5cbiAgICAgIGlmIChkZWZhdWx0RW5jb2RpbmcpIHtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZUNvbnRlbnRUeXBlKHJlc3BvbnNlLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pIHx8IHBhcnNlQ29udGVudFR5cGUoXCJ0ZXh0L3BsYWluXCIpO1xuICAgICAgICBjb25zdCBzbmlmZk9wdGlvbnMgPSB7XG4gICAgICAgICAgdHJhbnNwb3J0TGF5ZXJFbmNvZGluZ0xhYmVsOiBjb250ZW50VHlwZS5nZXQoXCJjaGFyc2V0XCIpLFxuICAgICAgICAgIGRlZmF1bHRFbmNvZGluZ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGVuY29kaW5nID0gZGV0ZWN0TWV0YUNoYXJzZXQgPyBzbmlmZkhUTUxFbmNvZGluZyhidWZmZXJEYXRhLCBzbmlmZk9wdGlvbnMpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoYXR3Z0VuY29kaW5nLmdldEJPTUVuY29kaW5nKGJ1ZmZlckRhdGEpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZShjb250ZW50VHlwZS5nZXQoXCJjaGFyc2V0XCIpKSB8fCBkZWZhdWx0RW5jb2Rpbmc7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSB3aGF0d2dFbmNvZGluZy5kZWNvZGUoYnVmZmVyRGF0YSwgZW5jb2RpbmcpO1xuXG4gICAgICAgIGNvbnRlbnRUeXBlLnNldChcImNoYXJzZXRcIiwgZW5jb2RpbmcpO1xuICAgICAgICByZXNwb25zZS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gY29udGVudFR5cGUudG9TdHJpbmcoKTtcblxuICAgICAgICBjYWxsYmFjayhudWxsLCBkZWNvZGVkLCByZXNwb25zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBidWZmZXJEYXRhLCByZXNwb25zZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yLCBudWxsLCByZXNwb25zZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBhYm9ydCgpIHtcbiAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJyZXF1ZXN0IGNhbmNlbGVkIGJ5IHVzZXJcIik7XG4gICAgICBlcnJvci5pc0Fib3J0RXJyb3IgPSB0cnVlO1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydHMubG9hZCA9IGZ1bmN0aW9uIChlbGVtZW50LCB1cmxTdHJpbmcsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gZWxlbWVudC5fb3duZXJEb2N1bWVudDtcbiAgY29uc3QgZG9jdW1lbnRJbXBsID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb247XG5cbiAgaWYgKCFkb2N1bWVudEltcGwuX2hhc0ZlYXR1cmUoXCJGZXRjaEV4dGVybmFsUmVzb3VyY2VzXCIsIGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkb2N1bWVudEltcGwuX2hhc0ZlYXR1cmUoXCJTa2lwRXh0ZXJuYWxSZXNvdXJjZXNcIiwgdXJsU3RyaW5nKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHVybE9iaiA9IFVSTC5wYXJzZSh1cmxTdHJpbmcpO1xuICBjb25zdCBlbnF1ZXVlZCA9IGV4cG9ydHMuZW5xdWV1ZShlbGVtZW50LCB1cmxTdHJpbmcsIGNhbGxiYWNrKTtcbiAgY29uc3QgY3VzdG9tTG9hZGVyID0gZG9jdW1lbnQuX2N1c3RvbVJlc291cmNlTG9hZGVyO1xuICBjb25zdCByZXF1ZXN0TWFuYWdlciA9IGRvY3VtZW50Ll9yZXF1ZXN0TWFuYWdlcjtcbiAgY29uc3QgY29va2llSmFyID0gZG9jdW1lbnQuX2Nvb2tpZUphcjtcblxuICBvcHRpb25zLmFjY2VwdCA9IGVsZW1lbnQuX2FjY2VwdDtcbiAgb3B0aW9ucy5jb29raWVKYXIgPSBjb29raWVKYXI7XG4gIG9wdGlvbnMucmVmZXJyZXIgPSBkb2N1bWVudC5VUkw7XG4gIG9wdGlvbnMucG9vbCA9IGRvY3VtZW50Ll9wb29sO1xuICBvcHRpb25zLmFnZW50T3B0aW9ucyA9IGRvY3VtZW50Ll9hZ2VudE9wdGlvbnM7XG4gIG9wdGlvbnMuc3RyaWN0U1NMID0gZG9jdW1lbnQuX3N0cmljdFNTTDtcbiAgb3B0aW9ucy5wcm94eSA9IGRvY3VtZW50Ll9wcm94eTtcbiAgb3B0aW9ucy51c2VyQWdlbnQgPSBkb2N1bWVudC5fZGVmYXVsdFZpZXcubmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICBsZXQgcmVxID0gbnVsbDtcbiAgZnVuY3Rpb24gd3JhcHBlZEVucXVldWVkKCkge1xuICAgIGlmIChyZXEgJiYgcmVxdWVzdE1hbmFnZXIpIHtcbiAgICAgIHJlcXVlc3RNYW5hZ2VyLnJlbW92ZShyZXEpO1xuICAgIH1cbiAgICAvLyBkbyBub3QgdHJpZ2dlciBpZiB0aGUgd2luZG93IGlzIGNsb3NlZFxuICAgIGlmIChlbGVtZW50Ll9vd25lckRvY3VtZW50ICYmIGVsZW1lbnQuX293bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZG9jdW1lbnQpIHtcbiAgICAgIGVucXVldWVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgY3VzdG9tTG9hZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXEgPSBjdXN0b21Mb2FkZXIoe1xuICAgICAgZWxlbWVudCxcbiAgICAgIHVybDogdXJsT2JqLFxuICAgICAgY29va2llOiBjb29raWVKYXIuZ2V0Q29va2llU3RyaW5nU3luYyh1cmxPYmosIHsgaHR0cDogdHJ1ZSB9KSxcbiAgICAgIGJhc2VVcmw6IGRvY3VtZW50QmFzZVVSTFNlcmlhbGl6ZWQoZG9jdW1lbnQpLFxuICAgICAgZGVmYXVsdEZldGNoKGZldGNoQ2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGZldGNoKHVybE9iaiwgb3B0aW9ucywgZmV0Y2hDYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSxcbiAgICB3cmFwcGVkRW5xdWV1ZWQpO1xuICB9IGVsc2Uge1xuICAgIHJlcSA9IGZldGNoKHVybE9iaiwgb3B0aW9ucywgd3JhcHBlZEVucXVldWVkKTtcbiAgfVxuICBpZiAocmVxICYmIHJlcXVlc3RNYW5hZ2VyKSB7XG4gICAgcmVxdWVzdE1hbmFnZXIuYWRkKHJlcSk7XG4gIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGNzc29tID0gcmVxdWlyZShcImNzc29tXCIpO1xuY29uc3QgY3Nzc3R5bGUgPSByZXF1aXJlKFwiY3Nzc3R5bGVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZSA9PiB7XG5cbiAgLy8gV2hhdCB3b3JrcyBub3c6XG4gIC8vIC0gQWNjZXNzaW5nIHRoZSBydWxlcyBkZWZpbmVkIGluIGluZGl2aWR1YWwgc3R5bGVzaGVldHNcbiAgLy8gLSBNb2RpZmljYXRpb25zIHRvIHN0eWxlIGNvbnRlbnQgYXR0cmlidXRlIGFyZSByZWZsZWN0ZWQgaW4gc3R5bGUgcHJvcGVydHlcbiAgLy8gLSBNb2RpZmljYXRpb25zIHRvIHN0eWxlIHByb3BlcnR5IGFyZSByZWZsZWN0ZWQgaW4gc3R5bGUgY29udGVudCBhdHRyaWJ1dGVcbiAgLy8gVE9ET1xuICAvLyAtIE1vZGlmaWNhdGlvbnMgdG8gc3R5bGUgZWxlbWVudCdzIHRleHRDb250ZW50IGFyZSByZWZsZWN0ZWQgaW4gc2hlZXQgcHJvcGVydHkuXG4gIC8vIC0gTW9kaWZpY2F0aW9ucyB0byBzdHlsZSBlbGVtZW50J3Mgc2hlZXQgcHJvcGVydHkgYXJlIHJlZmxlY3RlZCBpbiB0ZXh0Q29udGVudC5cbiAgLy8gLSBNb2RpZmljYXRpb25zIHRvIGxpbmsuaHJlZiBwcm9wZXJ0eSBhcmUgcmVmbGVjdGVkIGluIHNoZWV0IHByb3BlcnR5LlxuICAvLyAtIExlc3MtdXNlZCBmZWF0dXJlcyBvZiBsaW5rOiBkaXNhYmxlZFxuICAvLyAtIExlc3MtdXNlZCBmZWF0dXJlcyBvZiBzdHlsZTogZGlzYWJsZWQsIHNjb3BlZCwgdGl0bGVcbiAgLy8gLSBDU1NPTS1WaWV3XG4gIC8vICAgLSBnZXRDb21wdXRlZFN0eWxlKCk6IHJlcXVpcmVzIGRlZmF1bHQgc3R5bGVzaGVldCwgY2FzY2FkaW5nLCBpbmhlcml0YW5jZSxcbiAgLy8gICAgIGZpbHRlcmluZyBieSBAbWVkaWEgKHNjcmVlbj8gcHJpbnQ/KSwgbGF5b3V0IGZvciB3aWR0aHMvaGVpZ2h0c1xuICAvLyAtIExvYWQgZXZlbnRzIGFyZSBub3QgaW4gdGhlIHNwZWNzLCBidXQgYXBwYXJlbnRseSBzb21lIGJyb3dzZXJzXG4gIC8vICAgaW1wbGVtZW50IHNvbWV0aGluZy4gU2hvdWxkIG9ubG9hZCBvbmx5IGZpcmUgYWZ0ZXIgYWxsIEBpbXBvcnRzIGhhdmUgYmVlblxuICAvLyAgIGxvYWRlZCwgb3Igb25seSB0aGUgcHJpbWFyeSBzaGVldD9cblxuICBjb3JlLlN0eWxlU2hlZXQgPSBjc3NvbS5TdHlsZVNoZWV0O1xuICBjb3JlLk1lZGlhTGlzdCA9IGNzc29tLk1lZGlhTGlzdDtcbiAgY29yZS5DU1NTdHlsZVNoZWV0ID0gY3Nzb20uQ1NTU3R5bGVTaGVldDtcbiAgY29yZS5DU1NSdWxlID0gY3Nzb20uQ1NTUnVsZTtcbiAgY29yZS5DU1NTdHlsZVJ1bGUgPSBjc3NvbS5DU1NTdHlsZVJ1bGU7XG4gIGNvcmUuQ1NTTWVkaWFSdWxlID0gY3Nzb20uQ1NTTWVkaWFSdWxlO1xuICBjb3JlLkNTU0ltcG9ydFJ1bGUgPSBjc3NvbS5DU1NJbXBvcnRSdWxlO1xuICBjb3JlLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBjc3NzdHlsZS5DU1NTdHlsZURlY2xhcmF0aW9uO1xuXG4gIC8vIFJlbGF2YW50IHNwZWNzXG4gIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxlICgyMDAwKVxuICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3NvbS12aWV3LyAoMjAwOClcbiAgLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vICgyMDEwKSBNZWFudCB0byByZXBsYWNlIERPTSBMZXZlbCAyIFN0eWxlXG4gIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlLyBIVE1MNSwgb2YgY291cnNlXG4gIC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzcy1zdHlsZS1hdHRyLyAgbm90IHN1cmUgd2hhdCdzIG5ldyBoZXJlXG5cbiAgLy8gT2JqZWN0cyB0aGF0IGFyZW4ndCBpbiBjc3NvbSBsaWJyYXJ5IGJ1dCBzaG91bGQgYmU6XG4gIC8vICAgQ1NTUnVsZUxpc3QgIChjc3NvbSBqdXN0IHVzZXMgYXJyYXkpXG4gIC8vICAgQ1NTRm9udEZhY2VSdWxlXG4gIC8vICAgQ1NTUGFnZVJ1bGVcblxuICAvLyBUaGVzZSBydWxlcyBkb24ndCByZWFsbHkgbWFrZSBzZW5zZSB0byBpbXBsZW1lbnQsIHNvIENTU09NIGRyYWZ0IG1ha2VzIHRoZW1cbiAgLy8gb2Jzb2xldGUuXG4gIC8vICAgQ1NTQ2hhcnNldFJ1bGVcbiAgLy8gICBDU1NVbmtub3duUnVsZVxuXG4gIC8vIFRoZXNlIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgb2Jzb2xldGUgYnkgQ1NTT00gZHJhZnQsIGFsdGhvdWdoIG1vZGVyblxuICAvLyBicm93c2VycyBpbXBsZW1lbnQgdGhlbS5cbiAgLy8gICBDU1NWYWx1ZVxuICAvLyAgIENTU1ByaW1pdGl2ZVZhbHVlXG4gIC8vICAgQ1NTVmFsdWVMaXN0XG4gIC8vICAgUkdCQ29sb3JcbiAgLy8gICBSZWN0XG4gIC8vICAgQ291bnRlclxuXG4gIC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNzdHlsZXNoZWV0bGlzdFxuICBmdW5jdGlvbiBTdHlsZVNoZWV0TGlzdCgpIHt9XG5cbiAgU3R5bGVTaGVldExpc3QucHJvdG90eXBlLl9fcHJvdG9fXyA9IEFycmF5LnByb3RvdHlwZTtcblxuICBTdHlsZVNoZWV0TGlzdC5wcm90b3R5cGUuaXRlbSA9IGZ1bmN0aW9uIGl0ZW0oaSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcywgaSkgPyB0aGlzW2ldIDogbnVsbDtcbiAgfTtcblxuICBjb3JlLlN0eWxlU2hlZXRMaXN0ID0gU3R5bGVTaGVldExpc3Q7XG59O1xuIiwiLyoqIEhlcmUgaXMgeWV0IGFub3RoZXIgaW1wbGVtZW50YXRpb24gb2YgWFBhdGggMS4wIGluIEphdmFzY3JpcHQuXG4gKlxuICogTXkgZ29hbCB3YXMgdG8gbWFrZSBpdCByZWxhdGl2ZWx5IGNvbXBhY3QsIGJ1dCBhcyBJIGZpeGVkIGFsbCB0aGUgYXhpcyBidWdzXG4gKiB0aGUgYXhlcyBiZWNhbWUgbW9yZSBhbmQgbW9yZSBjb21wbGljYXRlZC4gOi0oLlxuICpcbiAqIEkgaGF2ZSBub3QgaW1wbGVtZW50ZWQgbmFtZXNwYWNlcyBvciBjYXNlLXNlbnNpdGl2ZSBheGVzIGZvciBYTUwgeWV0LlxuICpcbiAqIEhvdyB0byB0ZXN0IGl0IGluIENocm9tZTogWW91IGNhbiBtYWtlIGEgQ2hyb21lIGV4dGVuc2lvbiB0aGF0IHJlcGxhY2VzXG4gKiB0aGUgV2ViS2l0IFhQYXRoIHBhcnNlciB3aXRoIHRoaXMgb25lLiBCdXQgaXQgdGFrZXMgYSBiaXQgb2YgZWZmb3J0IHRvXG4gKiBnZXQgYXJvdW5kIGlzb2xhdGVkIHdvcmxkIGFuZCBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnM6XG4gKiBtYW5pZmVzdC5qc29uOlxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIlhQYXRoVGVzdFwiLFxuICAgICAgXCJ2ZXJzaW9uXCI6IFwiMC4xXCIsXG4gICAgICBcImNvbnRlbnRfc2NyaXB0c1wiOiBbe1xuICAgICAgICBcIm1hdGNoZXNcIjogW1wiaHR0cDovL2xvY2FsaG9zdC8qXCJdLCAgLy8gb3Igd2lsZGNhcmQgaG9zdFxuICAgICAgICBcImpzXCI6IFtcInhwYXRoLmpzXCIsIFwiaW5qZWN0aW9uLmpzXCJdLFxuICAgICAgICBcImFsbF9mcmFtZXNcIjogdHJ1ZSwgXCJydW5fYXRcIjogXCJkb2N1bWVudF9zdGFydFwiXG4gICAgICB9XVxuICAgIH1cbiAqIGluamVjdGlvbi5qczpcbiAgICAvLyBnb2FsOiBnaXZlIG15IHhwYXRoIG9iamVjdCB0byB0aGUgd2Vic2l0ZSdzIEpTIGNvbnRleHQuXG4gICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdC50ZXh0Q29udGVudCA9XG4gICAgICAgIFwiZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigneHBhdGhleHRlbmQnLCBmdW5jdGlvbihlKSB7XFxuXCIgK1xuICAgICAgICBcIiAgY29uc29sZS5sb2coJ2V4dGVuZGluZyBkb2N1bWVudCB3aXRoIHhwYXRoLi4uJyk7XFxuXCIgK1xuICAgICAgICBcIiAgZS5kZXRhaWwod2luZG93KTtcIiArXG4gICAgICAgIFwifSk7XCI7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuICAgIGV2dC5pbml0Q3VzdG9tRXZlbnQoJ3hwYXRoZXh0ZW5kJywgdHJ1ZSwgdHJ1ZSwgdGhpcy54cGF0aC5leHRlbmQpO1xuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjb3JlID0+IHtcbiAgdmFyIHhwYXRoID0ge307XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgbWlncmF0aW9uIG9mIEF0dHIgdG8gbm8gbG9uZ2VyIGhhdmUgYSBub2RlTmFtZSBwcm9wZXJ0eSBkZXNwaXRlIHRoaXMgY29kZWJhc2VcbiAgLy8gYXNzdW1pbmcgaXQgZG9lcy5cbiAgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUobm9kZU9yQXR0cikge1xuICAgIHJldHVybiBub2RlT3JBdHRyLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBdHRyJyA/IG5vZGVPckF0dHIubmFtZSA6IG5vZGVPckF0dHIubm9kZU5hbWU7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRva2VuaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgLyoqXG4gICAqIFRoZSBYUGF0aCBsZXhlciBpcyBiYXNpY2FsbHkgYSBzaW5nbGUgcmVndWxhciBleHByZXNzaW9uLCBhbG9uZyB3aXRoXG4gICAqIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB0byBwb3AgZGlmZmVyZW50IHR5cGVzLlxuICAgKi9cbiAgdmFyIFN0cmVhbSA9IHhwYXRoLlN0cmVhbSA9IGZ1bmN0aW9uIFN0cmVhbShzdHIpIHtcbiAgICB0aGlzLm9yaWdpbmFsID0gdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5wZWVrZWQgPSBudWxsO1xuICAgIC8vIFRPRE86IG5vdCByZWFsbHkgbmVlZGVkLCBidXQgc3VwcG9zZWRseSB0b2tlbml6ZXIgYWxzbyBkaXNhbWJpZ3VhdGVzXG4gICAgLy8gYSAqIGIgdnMuIG5vZGUgdGVzdCAqXG4gICAgdGhpcy5wcmV2ID0gbnVsbDsgIC8vIGZvciBkZWJ1Z2dpbmdcbiAgICB0aGlzLnByZXZwcmV2ID0gbnVsbDtcbiAgfVxuICBTdHJlYW0ucHJvdG90eXBlID0ge1xuICAgIHBlZWs6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMucGVla2VkKSByZXR1cm4gdGhpcy5wZWVrZWQ7XG4gICAgICB2YXIgbSA9IHRoaXMucmUuZXhlYyh0aGlzLnN0cik7XG4gICAgICBpZiAoIW0pIHJldHVybiBudWxsO1xuICAgICAgdGhpcy5zdHIgPSB0aGlzLnN0ci5zdWJzdHIobVswXS5sZW5ndGgpO1xuICAgICAgcmV0dXJuIHRoaXMucGVla2VkID0gbVsxXTtcbiAgICB9LFxuICAgIC8qKiBQZWVrIDIgdG9rZW5zIGFoZWFkLiAqL1xuICAgIHBlZWsyOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMucGVlaygpOyAgLy8gbWFrZSBzdXJlIHRoaXMucGVla2VkIGlzIHNldFxuICAgICAgdmFyIG0gPSB0aGlzLnJlLmV4ZWModGhpcy5zdHIpO1xuICAgICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBtWzFdO1xuICAgIH0sXG4gICAgcG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByID0gdGhpcy5wZWVrKCk7XG4gICAgICB0aGlzLnBlZWtlZCA9IG51bGw7XG4gICAgICB0aGlzLnByZXZwcmV2ID0gdGhpcy5wcmV2O1xuICAgICAgdGhpcy5wcmV2ID0gcjtcbiAgICAgIHJldHVybiByO1xuICAgIH0sXG4gICAgdHJ5cG9wOiBmdW5jdGlvbih0b2tlbnMpIHtcbiAgICAgIHZhciB0b2sgPSB0aGlzLnBlZWsoKTtcbiAgICAgIGlmICh0b2sgPT09IHRva2VucykgcmV0dXJuIHRoaXMucG9wKCk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0b2tlbnMpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgdmFyIHQgPSB0b2tlbnNbaV07XG4gICAgICAgICAgaWYgKHQgPT0gdG9rKSByZXR1cm4gdGhpcy5wb3AoKTs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHRyeXBvcGZ1bmNuYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0b2sgPSB0aGlzLnBlZWsoKTtcbiAgICAgIGlmICghdGhpcy5pc1FuYW1lUmUudGVzdCh0b2spKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIHN3aXRjaCAodG9rKSB7XG4gICAgICAgIGNhc2UgJ2NvbW1lbnQnOiBjYXNlICd0ZXh0JzogY2FzZSAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbic6IGNhc2UgJ25vZGUnOlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCcoJyAhPSB0aGlzLnBlZWsyKCkpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMucG9wKCk7XG4gICAgfSxcbiAgICB0cnlwb3BheGlzbmFtZTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdG9rID0gdGhpcy5wZWVrKCk7XG4gICAgICBzd2l0Y2ggKHRvaykge1xuICAgICAgICBjYXNlICdhbmNlc3Rvcic6IGNhc2UgJ2FuY2VzdG9yLW9yLXNlbGYnOiBjYXNlICdhdHRyaWJ1dGUnOlxuICAgICAgICBjYXNlICdjaGlsZCc6IGNhc2UgJ2Rlc2NlbmRhbnQnOiBjYXNlICdkZXNjZW5kYW50LW9yLXNlbGYnOlxuICAgICAgICBjYXNlICdmb2xsb3dpbmcnOiBjYXNlICdmb2xsb3dpbmctc2libGluZyc6IGNhc2UgJ25hbWVzcGFjZSc6XG4gICAgICAgIGNhc2UgJ3BhcmVudCc6IGNhc2UgJ3ByZWNlZGluZyc6IGNhc2UgJ3ByZWNlZGluZy1zaWJsaW5nJzogY2FzZSAnc2VsZic6XG4gICAgICAgICAgaWYgKCc6OicgPT0gdGhpcy5wZWVrMigpKSByZXR1cm4gdGhpcy5wb3AoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgdHJ5cG9wbmFtZXRlc3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHRvayA9IHRoaXMucGVlaygpO1xuICAgICAgaWYgKCcqJyA9PT0gdG9rIHx8IHRoaXMuc3RhcnRzV2l0aE5jTmFtZVJlLnRlc3QodG9rKSkgcmV0dXJuIHRoaXMucG9wKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHRyeXBvcGxpdGVyYWw6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHRvayA9IHRoaXMucGVlaygpO1xuICAgICAgaWYgKG51bGwgPT0gdG9rKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBmaXJzdCA9IHRvay5jaGFyQXQoMCk7XG4gICAgICB2YXIgbGFzdCA9IHRvay5jaGFyQXQodG9rLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKCdcIicgPT09IGZpcnN0ICYmICdcIicgPT09IGxhc3QgfHxcbiAgICAgICAgICBcIidcIiA9PT0gZmlyc3QgJiYgXCInXCIgPT09IGxhc3QpIHtcbiAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgcmV0dXJuIHRvay5zdWJzdHIoMSwgdG9rLmxlbmd0aCAtIDIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdHJ5cG9wbnVtYmVyOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0b2sgPSB0aGlzLnBlZWsoKTtcbiAgICAgIGlmICh0aGlzLmlzTnVtYmVyUmUudGVzdCh0b2spKSByZXR1cm4gcGFyc2VGbG9hdCh0aGlzLnBvcCgpKTtcbiAgICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICB0cnlwb3B2YXJyZWY6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHRvayA9IHRoaXMucGVlaygpO1xuICAgICAgaWYgKG51bGwgPT0gdG9rKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmICgnJCcgPT09IHRvay5jaGFyQXQoMCkpIHJldHVybiB0aGlzLnBvcCgpLnN1YnN0cigxKTtcbiAgICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbC5sZW5ndGggLSB0aGlzLnN0ci5sZW5ndGg7XG4gICAgfVxuICB9O1xuICAoZnVuY3Rpb24oKSB7XG4gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC1uYW1lcy8jTlQtTkNOYW1lXG4gICAgdmFyIG5hbWVTdGFydENoYXJzRXhjZXB0Q29sb24gPVxuICAgICAgICAnQS1aX2EtelxceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGJyArXG4gICAgICAgICdcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0YnICtcbiAgICAgICAgJ1xcdUZERjAtXFx1RkZGRCc7ICAvLyBKUyBkb2Vzbid0IHN1cHBvcnQgWyN4MTAwMDAtI3hFRkZGRl1cbiAgICB2YXIgbmFtZUNoYXJFeGNlcHRDb2xvbiA9IG5hbWVTdGFydENoYXJzRXhjZXB0Q29sb24gK1xuICAgICAgICAnXFxcXC1cXFxcLjAtOVxceGI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwJztcbiAgICB2YXIgbmNOYW1lQ2hhcnMgPSAnWycgKyBuYW1lU3RhcnRDaGFyc0V4Y2VwdENvbG9uICtcbiAgICAgICAgJ11bJyArIG5hbWVDaGFyRXhjZXB0Q29sb24gKyAnXSonXG4gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC1uYW1lcy8jTlQtUU5hbWVcbiAgICB2YXIgcU5hbWVDaGFycyA9IG5jTmFtZUNoYXJzICsgJyg/OjonICsgbmNOYW1lQ2hhcnMgKyAnKT8nO1xuICAgIHZhciBvdGhlckNoYXJzID0gJ1xcXFwuXFxcXC58W1xcXFwoXFxcXClcXFxcW1xcXFxdLkAsXXw6Oic7ICAvLyAuLiBtdXN0IGNvbWUgYmVmb3JlIFsuXVxuICAgIHZhciBvcGVyYXRvckNoYXJzID1cbiAgICAgICAgJ2FuZHxvcnxtb2R8ZGl2fCcgK1xuICAgICAgICAnLy98IT18PD18Pj18WyovfCtcXFxcLT08Pl0nOyAgLy8gLy8sICE9LCA8PSwgPj0gYmVmb3JlIGluZGl2aWR1YWwgb25lcy5cbiAgICB2YXIgbGl0ZXJhbCA9ICdcIlteXCJdKlwifCcgKyBcIidbXiddKidcIjtcbiAgICB2YXIgbnVtYmVyQ2hhcnMgPSAnWzAtOV0rKD86XFxcXC5bMC05XSopP3xcXFxcLlswLTldKyc7XG4gICAgdmFyIHZhcmlhYmxlUmVmZXJlbmNlID0gJ1xcXFwkJyArIHFOYW1lQ2hhcnM7XG4gICAgdmFyIG5hbWVUZXN0Q2hhcnMgPSAnXFxcXCp8JyArIG5jTmFtZUNoYXJzICsgJzpcXFxcKnwnICsgcU5hbWVDaGFycztcbiAgICB2YXIgb3B0aW9uYWxTcGFjZSA9ICdbIFxcdFxcclxcbl0qJzsgIC8vIHN0cmljdGVyIHRoYW4gcmVnZXhwIFxccy5cbiAgICB2YXIgbm9kZVR5cGUgPSAnY29tbWVudHx0ZXh0fHByb2Nlc3NpbmctaW5zdHJ1Y3Rpb258bm9kZSc7XG4gICAgdmFyIHJlID0gbmV3IFJlZ0V4cChcbiAgICAgICAgLy8gbnVtYmVyQ2hhcnMgYmVmb3JlIG90aGVyQ2hhcnMgc28gdGhhdCBsZWFkaW5nLWRlY2ltYWwgZG9lc24ndCBiZWNvbWUgLlxuICAgICAgICAnXicgKyBvcHRpb25hbFNwYWNlICsgJygnICsgbnVtYmVyQ2hhcnMgKyAnfCcgKyBvdGhlckNoYXJzICsgJ3wnICtcbiAgICAgICAgbmFtZVRlc3RDaGFycyArICd8JyArIG9wZXJhdG9yQ2hhcnMgKyAnfCcgKyBsaXRlcmFsICsgJ3wnICtcbiAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UgKyAnKSdcbiAgICAgICAgLy8gb3BlcmF0b3JOYW1lIHwgbm9kZVR5cGUgfCBmdW5jdGlvbk5hbWUgfCBheGlzTmFtZSBhcmUgbHVtcGVkIGludG9cbiAgICAgICAgLy8gcU5hbWUgZm9yIG5vdzsgd2UnbGwgY2hlY2sgdGhlbSBvbiBwb3AuXG4gICAgKTtcbiAgICBTdHJlYW0ucHJvdG90eXBlLnJlID0gcmU7XG4gICAgU3RyZWFtLnByb3RvdHlwZS5zdGFydHNXaXRoTmNOYW1lUmUgPSBuZXcgUmVnRXhwKCdeJyArIG5jTmFtZUNoYXJzKTtcbiAgICBTdHJlYW0ucHJvdG90eXBlLmlzUW5hbWVSZSA9IG5ldyBSZWdFeHAoJ14nICsgcU5hbWVDaGFycyArICckJyk7XG4gICAgU3RyZWFtLnByb3RvdHlwZS5pc051bWJlclJlID0gbmV3IFJlZ0V4cCgnXicgKyBudW1iZXJDaGFycyArICckJyk7XG4gIH0pKCk7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJzaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gIHZhciBwYXJzZSA9IHhwYXRoLnBhcnNlID0gZnVuY3Rpb24gcGFyc2Uoc3RyZWFtLCBhKSB7XG4gICAgdmFyIHIgPSBvckV4cHIoc3RyZWFtLGEpO1xuICAgIHZhciB4LCB1bnBhcnNlZCA9IFtdO1xuICAgIHdoaWxlICh4ID0gc3RyZWFtLnBvcCgpKSB7XG4gICAgICB1bnBhcnNlZC5wdXNoKHgpO1xuICAgIH1cbiAgICBpZiAodW5wYXJzZWQubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogVW5wYXJzZWQgdG9rZW5zOiAnICsgdW5wYXJzZWQuam9pbignICcpKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBiaW5hcnlMICA6Oj0gc3ViRXhwclxuICAgKiAgICAgICAgICAgIHwgYmluYXJ5TCBvcCBzdWJFeHByXG4gICAqIHNvIGEgb3AgYiBvcCBjIGJlY29tZXMgKChhIG9wIGIpIG9wIGMpXG4gICAqL1xuICBmdW5jdGlvbiBiaW5hcnlMKHN1YkV4cHIsIHN0cmVhbSwgYSwgb3BzKSB7XG4gICAgdmFyIGxocyA9IHN1YkV4cHIoc3RyZWFtLCBhKTtcbiAgICBpZiAobGhzID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHZhciBvcDtcbiAgICB3aGlsZSAob3AgPSBzdHJlYW0udHJ5cG9wKG9wcykpIHtcbiAgICAgIHZhciByaHMgPSBzdWJFeHByKHN0cmVhbSwgYSk7XG4gICAgICBpZiAocmhzID09IG51bGwpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBFeHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgJyArIG9wKTtcbiAgICAgIGxocyA9IGEubm9kZShvcCwgbGhzLCByaHMpO1xuICAgIH1cbiAgICByZXR1cm4gbGhzO1xuICB9XG4gIC8qKlxuICAgKiBUb28gYmFkIHRoaXMgaXMgbmV2ZXIgdXNlZC4gSWYgdGhleSBtYWRlIGEgKiogb3BlcmF0b3IgKHJhaXNlIHRvIHBvd2VyKSxcbiAgICggd2Ugd291bGQgdXNlIGl0LlxuICAgKiBiaW5hcnlSICA6Oj0gc3ViRXhwclxuICAgKiAgICAgICAgICAgIHwgc3ViRXhwciBvcCBiaW5hcnlSXG4gICAqIHNvIGEgb3AgYiBvcCBjIGJlY29tZXMgKGEgb3AgKGIgb3AgYykpXG4gICAqL1xuICBmdW5jdGlvbiBiaW5hcnlSKHN1YkV4cHIsIHN0cmVhbSwgYSwgb3BzKSB7XG4gICAgdmFyIGxocyA9IHN1YkV4cHIoc3RyZWFtLCBhKTtcbiAgICBpZiAobGhzID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHZhciBvcCA9IHN0cmVhbS50cnlwb3Aob3BzKTtcbiAgICBpZiAob3ApIHtcbiAgICAgIHZhciByaHMgPSBiaW5hcnlSKHN0cmVhbSwgYSk7XG4gICAgICBpZiAocmhzID09IG51bGwpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBFeHBlY3RlZCBzb21ldGhpbmcgYWZ0ZXIgJyArIG9wKTtcbiAgICAgIHJldHVybiBhLm5vZGUob3AsIGxocywgcmhzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxoczsvLyBUT0RPXG4gICAgfVxuICB9XG4gIC8qKiBbMV0gTG9jYXRpb25QYXRoOjo9IFJlbGF0aXZlTG9jYXRpb25QYXRoIHwgQWJzb2x1dGVMb2NhdGlvblBhdGhcbiAgICogZS5nLiBhLCBhL2IsIC8vYS9iXG4gICAqL1xuICBmdW5jdGlvbiBsb2NhdGlvblBhdGgoc3RyZWFtLCBhKSB7XG4gICAgcmV0dXJuIGFic29sdXRlTG9jYXRpb25QYXRoKHN0cmVhbSwgYSkgfHxcbiAgICAgICAgICAgcmVsYXRpdmVMb2NhdGlvblBhdGgobnVsbCwgc3RyZWFtLCBhKTtcbiAgfVxuICAvKiogWzJdIEFic29sdXRlTG9jYXRpb25QYXRoOjo9ICcvJyBSZWxhdGl2ZUxvY2F0aW9uUGF0aD8gfCBBYmJyZXZpYXRlZEFic29sdXRlTG9jYXRpb25QYXRoXG4gICAqICBbMTBdIEFiYnJldmlhdGVkQWJzb2x1dGVMb2NhdGlvblBhdGg6Oj0gJy8vJyBSZWxhdGl2ZUxvY2F0aW9uUGF0aFxuICAgKi9cbiAgZnVuY3Rpb24gYWJzb2x1dGVMb2NhdGlvblBhdGgoc3RyZWFtLCBhKSB7XG4gICAgdmFyIG9wID0gc3RyZWFtLnBlZWsoKTtcbiAgICBpZiAoJy8nID09PSBvcCB8fCAnLy8nID09PSBvcCkge1xuICAgICAgdmFyIGxocyA9IGEubm9kZSgnUm9vdCcpO1xuICAgICAgcmV0dXJuIHJlbGF0aXZlTG9jYXRpb25QYXRoKGxocywgc3RyZWFtLCBhLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIC8qKiBbM10gUmVsYXRpdmVMb2NhdGlvblBhdGg6Oj0gU3RlcCB8IFJlbGF0aXZlTG9jYXRpb25QYXRoICcvJyBTdGVwIHxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBYmJyZXZpYXRlZFJlbGF0aXZlTG9jYXRpb25QYXRoXG4gICAqICBbMTFdIEFiYnJldmlhdGVkUmVsYXRpdmVMb2NhdGlvblBhdGg6Oj0gUmVsYXRpdmVMb2NhdGlvblBhdGggJy8vJyBTdGVwXG4gICAqIGUuZy4gcC9hLCBldGMuXG4gICAqL1xuICBmdW5jdGlvbiByZWxhdGl2ZUxvY2F0aW9uUGF0aChsaHMsIHN0cmVhbSwgYSwgaXNPbmx5Um9vdE9rKSB7XG4gICAgaWYgKG51bGwgPT0gbGhzKSB7XG4gICAgICBsaHMgPSBzdGVwKHN0cmVhbSwgYSk7XG4gICAgICBpZiAobnVsbCA9PSBsaHMpIHJldHVybiBsaHM7XG4gICAgfVxuICAgIHZhciBvcDtcbiAgICB3aGlsZSAob3AgPSBzdHJlYW0udHJ5cG9wKFsnLycsICcvLyddKSkge1xuICAgICAgaWYgKCcvLycgPT09IG9wKSB7XG4gICAgICAgIGxocyA9IGEubm9kZSgnLycsIGxocyxcbiAgICAgICAgICAgICAgICAgICAgIGEubm9kZSgnQXhpcycsICdkZXNjZW5kYW50LW9yLXNlbGYnLCAnbm9kZScsIHVuZGVmaW5lZCkpO1xuICAgICAgfVxuICAgICAgdmFyIHJocyA9IHN0ZXAoc3RyZWFtLCBhKTtcbiAgICAgIGlmIChudWxsID09IHJocyAmJiAnLycgPT09IG9wICYmIGlzT25seVJvb3RPaykgcmV0dXJuIGxocztcbiAgICAgIGVsc2UgaXNPbmx5Um9vdE9rID0gZmFsc2U7XG4gICAgICBpZiAobnVsbCA9PSByaHMpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBFeHBlY3RlZCBzdGVwIGFmdGVyICcgKyBvcCk7XG4gICAgICBsaHMgPSBhLm5vZGUoJy8nLCBsaHMsIHJocyk7XG4gICAgfVxuICAgIHJldHVybiBsaHM7XG4gIH1cbiAgLyoqIFs0XSBTdGVwOjo9IEF4aXNTcGVjaWZpZXIgTm9kZVRlc3QgUHJlZGljYXRlKiB8IEFiYnJldmlhdGVkU3RlcFxuICAgKiAgWzEyXSBBYmJyZXZpYXRlZFN0ZXA6Oj0gJy4nIHwgJy4uJ1xuICAgKiBlLmcuIEBocmVmLCBzZWxmOjpwLCBwLCBhW0BocmVmXSwgLiwgLi5cbiAgICovXG4gIGZ1bmN0aW9uIHN0ZXAoc3RyZWFtLCBhKSB7XG4gICAgdmFyIGFiYnJTdGVwID0gc3RyZWFtLnRyeXBvcChbJy4nLCAnLi4nXSk7XG4gICAgaWYgKCcuJyA9PT0gYWJiclN0ZXApICAvLyBBIGxvY2F0aW9uIHN0ZXAgb2YgLiBpcyBzaG9ydCBmb3Igc2VsZjo6bm9kZSgpLlxuICAgICAgcmV0dXJuIGEubm9kZSgnQXhpcycsICdzZWxmJywgJ25vZGUnKTtcbiAgICBpZiAoJy4uJyA9PT0gYWJiclN0ZXApICAvLyBBIGxvY2F0aW9uIHN0ZXAgb2YgLi4gaXMgc2hvcnQgZm9yIHBhcmVudDo6bm9kZSgpXG4gICAgICByZXR1cm4gYS5ub2RlKCdBeGlzJywgJ3BhcmVudCcsICdub2RlJyk7XG5cbiAgICB2YXIgYXhpcyA9IGF4aXNTcGVjaWZpZXIoc3RyZWFtLCBhKTtcbiAgICB2YXIgbm9kZVR5cGUgPSBub2RlVHlwZVRlc3Qoc3RyZWFtLCBhKTtcbiAgICB2YXIgbm9kZU5hbWU7XG4gICAgaWYgKG51bGwgPT0gbm9kZVR5cGUpIG5vZGVOYW1lID0gbm9kZU5hbWVUZXN0KHN0cmVhbSwgYSk7XG4gICAgaWYgKG51bGwgPT0gYXhpcyAmJiBudWxsID09IG5vZGVUeXBlICYmIG51bGwgPT0gbm9kZU5hbWUpIHJldHVybiBudWxsO1xuICAgIGlmIChudWxsID09IG5vZGVUeXBlICYmIG51bGwgPT0gbm9kZU5hbWUpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihcbiAgICAgICAgICAgIFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICc6IEV4cGVjdGVkIG5vZGVUZXN0IGFmdGVyIGF4aXNTcGVjaWZpZXIgJyArIGF4aXMpO1xuICAgIGlmIChudWxsID09IGF4aXMpIGF4aXMgPSAnY2hpbGQnO1xuICAgIGlmIChudWxsID09IG5vZGVUeXBlKSB7XG4gICAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBhIG5vZGUgbmFtZSwgdGhlbiB0aGUgbm9kZSB0eXBlIGlzIGZvcmNlZCB0byBiZSB0aGVcbiAgICAgIC8vIHByaW5jaXBhbCBub2RlIHR5cGUgb2YgdGhlIGF4aXMuXG4gICAgICAvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgvI2R0LXByaW5jaXBhbC1ub2RlLXR5cGVcbiAgICAgIGlmICgnYXR0cmlidXRlJyA9PT0gYXhpcykgbm9kZVR5cGUgPSAnYXR0cmlidXRlJztcbiAgICAgIGVsc2UgaWYgKCduYW1lc3BhY2UnID09PSBheGlzKSBub2RlVHlwZSA9ICduYW1lc3BhY2UnO1xuICAgICAgZWxzZSBub2RlVHlwZSA9ICdlbGVtZW50JztcbiAgICB9XG4gICAgdmFyIGxocyA9IGEubm9kZSgnQXhpcycsIGF4aXMsIG5vZGVUeXBlLCBub2RlTmFtZSk7XG4gICAgdmFyIHByZWQ7XG4gICAgd2hpbGUgKG51bGwgIT0gKHByZWQgPSBwcmVkaWNhdGUobGhzLCBzdHJlYW0sIGEpKSkge1xuICAgICAgbGhzID0gcHJlZDtcbiAgICB9XG4gICAgcmV0dXJuIGxocztcbiAgfVxuICAvKiogWzVdIEF4aXNTcGVjaWZpZXI6Oj0gQXhpc05hbWUgJzo6JyB8IEFiYnJldmlhdGVkQXhpc1NwZWNpZmllclxuICAgKiAgWzZdIEF4aXNOYW1lOjo9ICdhbmNlc3RvcicgfCAnYW5jZXN0b3Itb3Itc2VsZicgfCAnYXR0cmlidXRlJyB8ICdjaGlsZCdcbiAgICogICAgICAgICAgICAgICAgfCAnZGVzY2VuZGFudCcgfCAnZGVzY2VuZGFudC1vci1zZWxmJyB8ICdmb2xsb3dpbmcnXG4gICAqICAgICAgICAgICAgICAgIHwgJ2ZvbGxvd2luZy1zaWJsaW5nJyB8ICduYW1lc3BhY2UnIHwgJ3BhcmVudCcgfFxuICAgKiAgICAgICAgICAgICAgICB8ICdwcmVjZWRpbmcnIHwgJ3ByZWNlZGluZy1zaWJsaW5nJyB8ICdzZWxmJ1xuICAgKiAgWzEzXSBBYmJyZXZpYXRlZEF4aXNTcGVjaWZpZXI6Oj0gJ0AnP1xuICAgKi9cbiAgZnVuY3Rpb24gYXhpc1NwZWNpZmllcihzdHJlYW0sIGEpIHtcbiAgICB2YXIgYXR0ciA9IHN0cmVhbS50cnlwb3AoJ0AnKTtcbiAgICBpZiAobnVsbCAhPSBhdHRyKSByZXR1cm4gJ2F0dHJpYnV0ZSc7XG4gICAgdmFyIGF4aXNOYW1lID0gc3RyZWFtLnRyeXBvcGF4aXNuYW1lKCk7XG4gICAgaWYgKG51bGwgIT0gYXhpc05hbWUpIHtcbiAgICAgIHZhciBjb2xvbmNvbG9uID0gc3RyZWFtLnRyeXBvcCgnOjonKTtcbiAgICAgIGlmIChudWxsID09IGNvbG9uY29sb24pXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBTaG91bGQgbm90IGhhcHBlbi4gU2hvdWxkIGJlIDo6LicpO1xuICAgICAgcmV0dXJuIGF4aXNOYW1lO1xuICAgIH1cbiAgfVxuICAvKiogWzddIE5vZGVUZXN0Ojo9IE5hbWVUZXN0IHwgTm9kZVR5cGUgJygnICcpJyB8ICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnKCcgTGl0ZXJhbCAnKSdcbiAgICogIFszOF0gTm9kZVR5cGU6Oj0gJ2NvbW1lbnQnIHwgJ3RleHQnIHwgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nIHwgJ25vZGUnXG4gICAqIEkndmUgc3BsaXQgbm9kZVR5cGVUZXN0IGZyb20gbm9kZU5hbWVUZXN0IGZvciBjb252ZW5pZW5jZS5cbiAgICovXG4gIGZ1bmN0aW9uIG5vZGVUeXBlVGVzdChzdHJlYW0sIGEpIHtcbiAgICBpZiAoJygnICE9PSBzdHJlYW0ucGVlazIoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciB0eXBlID0gc3RyZWFtLnRyeXBvcChbJ2NvbW1lbnQnLCAndGV4dCcsICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJywgJ25vZGUnXSk7XG4gICAgaWYgKG51bGwgIT0gdHlwZSkge1xuICAgICAgaWYgKG51bGwgPT0gc3RyZWFtLnRyeXBvcCgnKCcpKVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQb3NpdGlvbiAnICsgc3RyZWFtLnBvc2l0aW9uKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogU2hvdWxkIG5vdCBoYXBwZW4uJyk7XG4gICAgICB2YXIgcGFyYW0gPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZSA9PSAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicpIHtcbiAgICAgICAgcGFyYW0gPSBzdHJlYW0udHJ5cG9wbGl0ZXJhbCgpO1xuICAgICAgfVxuICAgICAgaWYgKG51bGwgPT0gc3RyZWFtLnRyeXBvcCgnKScpKVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQb3NpdGlvbiAnICsgc3RyZWFtLnBvc2l0aW9uKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogRXhwZWN0ZWQgY2xvc2UgcGFyZW5zLicpO1xuICAgICAgcmV0dXJuIHR5cGVcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbm9kZU5hbWVUZXN0KHN0cmVhbSwgYSkge1xuICAgIHZhciBuYW1lID0gc3RyZWFtLnRyeXBvcG5hbWV0ZXN0KCk7XG4gICAgaWYgKG5hbWUgIT0gbnVsbCkgcmV0dXJuIG5hbWU7XG4gICAgZWxzZSByZXR1cm4gbnVsbDtcbiAgfVxuICAvKiogWzhdIFByZWRpY2F0ZTo6PSAnWycgUHJlZGljYXRlRXhwciAnXSdcbiAgICogIFs5XSBQcmVkaWNhdGVFeHByOjo9IEV4cHJcbiAgICovXG4gIGZ1bmN0aW9uIHByZWRpY2F0ZShsaHMsIHN0cmVhbSwgYSkge1xuICAgIGlmIChudWxsID09IHN0cmVhbS50cnlwb3AoJ1snKSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGV4cHIgPSBvckV4cHIoc3RyZWFtLCBhKTtcbiAgICBpZiAobnVsbCA9PSBleHByKVxuICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogRXhwZWN0ZWQgZXhwcmVzc2lvbiBhZnRlciBbJyk7XG4gICAgaWYgKG51bGwgPT0gc3RyZWFtLnRyeXBvcCgnXScpKVxuICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogRXhwZWN0ZWQgXSBhZnRlciBleHByZXNzaW9uLicpO1xuICAgIHJldHVybiBhLm5vZGUoJ1ByZWRpY2F0ZScsIGxocywgZXhwcik7XG4gIH1cbiAgLyoqIFsxNF0gRXhwcjo6PSBPckV4cHJcbiAgICovXG4gIC8qKiBbMTVdIFByaW1hcnlFeHByOjo9IFZhcmlhYmxlUmVmZXJlbmNlIHwgJygnIEV4cHIgJyknIHwgTGl0ZXJhbCB8IE51bWJlciB8IEZ1bmN0aW9uQ2FsbFxuICAgKiBlLmcuICR4LCAgKDMrNCksICBcImhpXCIsICAzMiwgIGYoeClcbiAgICovXG4gIGZ1bmN0aW9uIHByaW1hcnlFeHByKHN0cmVhbSwgYSkge1xuICAgIHZhciB4ID0gc3RyZWFtLnRyeXBvcGxpdGVyYWwoKTtcbiAgICBpZiAobnVsbCA9PSB4KVxuICAgICAgeCA9IHN0cmVhbS50cnlwb3BudW1iZXIoKTtcbiAgICBpZiAobnVsbCAhPSB4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgdmFyIHZhclJlZiA9IHN0cmVhbS50cnlwb3B2YXJyZWYoKTtcbiAgICBpZiAobnVsbCAhPSB2YXJSZWYpIHJldHVybiBhLm5vZGUoJ1ZhcmlhYmxlUmVmZXJlbmNlJywgdmFyUmVmKTtcbiAgICB2YXIgZnVuQ2FsbCA9IGZ1bmN0aW9uQ2FsbChzdHJlYW0sIGEpO1xuICAgIGlmIChudWxsICE9IGZ1bkNhbGwpIHtcbiAgICAgIHJldHVybiBmdW5DYWxsO1xuICAgIH1cbiAgICBpZiAoc3RyZWFtLnRyeXBvcCgnKCcpKSB7XG4gICAgICB2YXIgZSA9IG9yRXhwcihzdHJlYW0sIGEpO1xuICAgICAgaWYgKG51bGwgPT0gZSlcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IEV4cGVjdGVkIGV4cHJlc3Npb24gYWZ0ZXIgKC4nKTtcbiAgICAgIGlmIChudWxsID09IHN0cmVhbS50cnlwb3AoJyknKSlcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IEV4cGVjdGVkICkgYWZ0ZXIgZXhwcmVzc2lvbi4nKTtcbiAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKiogWzE2XSBGdW5jdGlvbkNhbGw6Oj0gRnVuY3Rpb25OYW1lICcoJyAoIEFyZ3VtZW50ICggJywnIEFyZ3VtZW50ICkqICk/ICcpJ1xuICAgKiAgWzE3XSBBcmd1bWVudDo6PSBFeHByXG4gICAqL1xuICBmdW5jdGlvbiBmdW5jdGlvbkNhbGwoc3RyZWFtLCBhKSB7XG4gICAgdmFyIG5hbWUgPSBzdHJlYW0udHJ5cG9wZnVuY25hbWUoc3RyZWFtLCBhKTtcbiAgICBpZiAobnVsbCA9PSBuYW1lKSByZXR1cm4gbnVsbDtcbiAgICBpZiAobnVsbCA9PSBzdHJlYW0udHJ5cG9wKCcoJykpXG4gICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBFeHBlY3RlZCAoICkgYWZ0ZXIgZnVuY3Rpb24gbmFtZS4nKTtcbiAgICB2YXIgcGFyYW1zID0gW107XG4gICAgdmFyIGZpcnN0ID0gdHJ1ZTtcbiAgICB3aGlsZSAobnVsbCA9PSBzdHJlYW0udHJ5cG9wKCcpJykpIHtcbiAgICAgIGlmICghZmlyc3QgJiYgbnVsbCA9PSBzdHJlYW0udHJ5cG9wKCcsJykpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBFeHBlY3RlZCAsIGJldHdlZW4gYXJndW1lbnRzIG9mIHRoZSBmdW5jdGlvbi4nKTtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICB2YXIgcGFyYW0gPSBvckV4cHIoc3RyZWFtLCBhKTtcbiAgICAgIGlmIChwYXJhbSA9PSBudWxsKVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQb3NpdGlvbiAnICsgc3RyZWFtLnBvc2l0aW9uKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogRXhwZWN0ZWQgZXhwcmVzc2lvbiBhcyBhcmd1bWVudCBvZiBmdW5jdGlvbi4nKTtcbiAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICB9XG4gICAgcmV0dXJuIGEubm9kZSgnRnVuY3Rpb25DYWxsJywgbmFtZSwgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKiBbMThdIFVuaW9uRXhwcjo6PSBQYXRoRXhwciB8IFVuaW9uRXhwciAnfCcgUGF0aEV4cHJcbiAgICovXG4gIGZ1bmN0aW9uIHVuaW9uRXhwcihzdHJlYW0sIGEpIHsgcmV0dXJuIGJpbmFyeUwocGF0aEV4cHIsIHN0cmVhbSwgYSwgJ3wnKTsgfVxuICAvKiogWzE5XSBQYXRoRXhwciA6Oj0gTG9jYXRpb25QYXRoXG4gICAqICAgICAgICAgICAgICAgICAgfCBGaWx0ZXJFeHByXG4gICAqICAgICAgICAgICAgICAgICAgfCBGaWx0ZXJFeHByICcvJyBSZWxhdGl2ZUxvY2F0aW9uUGF0aFxuICAgKiAgICAgICAgICAgICAgICAgIHwgRmlsdGVyRXhwciAnLy8nIFJlbGF0aXZlTG9jYXRpb25QYXRoXG4gICAqIFVubGlrZSBtb3N0IG90aGVyIG5vZGVzLCB0aGlzIG9uZSBhbHdheXMgZ2VuZXJhdGVzIGEgbm9kZSBiZWNhdXNlXG4gICAqIGF0IHRoaXMgcG9pbnQgYWxsIHJldmVyc2Ugbm9kZXNldHMgbXVzdCB0dXJuIGludG8gYSBmb3J3YXJkIG5vZGVzZXRcbiAgICovXG4gIGZ1bmN0aW9uIHBhdGhFeHByKHN0cmVhbSwgYSkge1xuICAgIC8vIFdlIGhhdmUgdG8gZG8gRmlsdGVyRXhwciBiZWZvcmUgTG9jYXRpb25QYXRoIGJlY2F1c2Ugb3RoZXJ3aXNlXG4gICAgLy8gTG9jYXRpb25QYXRoIHdpbGwgZWF0IHVwIHRoZSBuYW1lIGZyb20gYSBmdW5jdGlvbiBjYWxsLlxuICAgIHZhciBmaWx0ZXIgPSBmaWx0ZXJFeHByKHN0cmVhbSwgYSk7XG4gICAgaWYgKG51bGwgPT0gZmlsdGVyKSB7XG4gICAgICB2YXIgbG9jID0gbG9jYXRpb25QYXRoKHN0cmVhbSwgYSk7XG4gICAgICBpZiAobnVsbCA9PSBsb2MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBUaGUgZXhwcmVzc2lvbiBzaG91bGRuXFwndCBiZSBlbXB0eS4uLicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGEubm9kZSgnUGF0aEV4cHInLCBsb2MpO1xuICAgIH1cbiAgICB2YXIgcmVsID0gcmVsYXRpdmVMb2NhdGlvblBhdGgoZmlsdGVyLCBzdHJlYW0sIGEsIGZhbHNlKTtcbiAgICBpZiAoZmlsdGVyID09PSByZWwpIHJldHVybiByZWw7XG4gICAgZWxzZSByZXR1cm4gYS5ub2RlKCdQYXRoRXhwcicsIHJlbCk7XG4gIH1cbiAgLyoqIFsyMF0gRmlsdGVyRXhwcjo6PSBQcmltYXJ5RXhwciB8IEZpbHRlckV4cHIgUHJlZGljYXRlXG4gICAqIGFrYS4gRmlsdGVyRXhwciA6Oj0gUHJpbWFyeUV4cHIgUHJlZGljYXRlKlxuICAgKi9cbiAgZnVuY3Rpb24gZmlsdGVyRXhwcihzdHJlYW0sIGEpIHtcbiAgICB2YXIgcHJpbWFyeSA9IHByaW1hcnlFeHByKHN0cmVhbSwgYSk7XG4gICAgaWYgKHByaW1hcnkgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHByZWQsIGxocyA9IHByaW1hcnk7XG4gICAgd2hpbGUgKG51bGwgIT0gKHByZWQgPSBwcmVkaWNhdGUobGhzLCBzdHJlYW0sIGEpKSkge1xuICAgICAgbGhzID0gcHJlZDtcbiAgICB9XG4gICAgcmV0dXJuIGxocztcbiAgfVxuXG4gIC8qKiBbMjFdIE9yRXhwcjo6PSBBbmRFeHByIHwgT3JFeHByICdvcicgQW5kRXhwclxuICAgKi9cbiAgZnVuY3Rpb24gb3JFeHByKHN0cmVhbSwgYSkge1xuICAgIHZhciBvcmlnID0gKHN0cmVhbS5wZWVrZWQgfHwgJycpICsgc3RyZWFtLnN0clxuICAgIHZhciByID0gYmluYXJ5TChhbmRFeHByLCBzdHJlYW0sIGEsICdvcicpO1xuICAgIHZhciBub3cgPSAoc3RyZWFtLnBlZWtlZCB8fCAnJykgKyBzdHJlYW0uc3RyO1xuICAgIHJldHVybiByO1xuICB9XG4gIC8qKiBbMjJdIEFuZEV4cHI6Oj0gRXF1YWxpdHlFeHByIHwgQW5kRXhwciAnYW5kJyBFcXVhbGl0eUV4cHJcbiAgICovXG4gIGZ1bmN0aW9uIGFuZEV4cHIoc3RyZWFtLCBhKSB7IHJldHVybiBiaW5hcnlMKGVxdWFsaXR5RXhwciwgc3RyZWFtLCBhLCAnYW5kJyk7IH1cbiAgLyoqIFsyM10gRXF1YWxpdHlFeHByOjo9IFJlbGF0aW9uYWxFeHByIHwgRXF1YWxpdHlFeHByICc9JyBSZWxhdGlvbmFsRXhwclxuICAgKiAgICAgICAgICAgICAgICAgICAgIHwgRXF1YWxpdHlFeHByICchPScgUmVsYXRpb25hbEV4cHJcbiAgICovXG4gIGZ1bmN0aW9uIGVxdWFsaXR5RXhwcihzdHJlYW0sIGEpIHsgcmV0dXJuIGJpbmFyeUwocmVsYXRpb25hbEV4cHIsIHN0cmVhbSwgYSwgWyc9JywnIT0nXSk7IH1cbiAgLyoqIFsyNF0gUmVsYXRpb25hbEV4cHI6Oj0gQWRkaXRpdmVFeHByIHwgUmVsYXRpb25hbEV4cHIgJzwnIEFkZGl0aXZlRXhwclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgfCBSZWxhdGlvbmFsRXhwciAnPicgQWRkaXRpdmVFeHByXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB8IFJlbGF0aW9uYWxFeHByICc8PScgQWRkaXRpdmVFeHByXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB8IFJlbGF0aW9uYWxFeHByICc+PScgQWRkaXRpdmVFeHByXG4gICAqL1xuICBmdW5jdGlvbiByZWxhdGlvbmFsRXhwcihzdHJlYW0sIGEpIHsgcmV0dXJuIGJpbmFyeUwoYWRkaXRpdmVFeHByLCBzdHJlYW0sIGEsIFsnPCcsJz4nLCc8PScsJz49J10pOyB9XG4gIC8qKiBbMjVdIEFkZGl0aXZlRXhwcjo6PSBNdWx0aXBsaWNhdGl2ZUV4cHJcbiAgICogICAgICAgICAgICAgICAgICAgICB8IEFkZGl0aXZlRXhwciAnKycgTXVsdGlwbGljYXRpdmVFeHByXG4gICAqICAgICAgICAgICAgICAgICAgICAgfCBBZGRpdGl2ZUV4cHIgJy0nIE11bHRpcGxpY2F0aXZlRXhwclxuICAgKi9cbiAgZnVuY3Rpb24gYWRkaXRpdmVFeHByKHN0cmVhbSwgYSkgeyByZXR1cm4gYmluYXJ5TChtdWx0aXBsaWNhdGl2ZUV4cHIsIHN0cmVhbSwgYSwgWycrJywnLSddKTsgfVxuICAvKiogWzI2XSBNdWx0aXBsaWNhdGl2ZUV4cHI6Oj0gVW5hcnlFeHByXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGl2ZUV4cHIgTXVsdGlwbHlPcGVyYXRvciBVbmFyeUV4cHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aXZlRXhwciAnZGl2JyBVbmFyeUV4cHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aXZlRXhwciAnbW9kJyBVbmFyeUV4cHJcbiAgICovXG4gIGZ1bmN0aW9uIG11bHRpcGxpY2F0aXZlRXhwcihzdHJlYW0sIGEpIHsgcmV0dXJuIGJpbmFyeUwodW5hcnlFeHByLCBzdHJlYW0sIGEsIFsnKicsJ2RpdicsJ21vZCddKTsgfVxuICAvKiogWzI3XSBVbmFyeUV4cHI6Oj0gVW5pb25FeHByIHwgJy0nIFVuYXJ5RXhwclxuICAgKi9cbiAgZnVuY3Rpb24gdW5hcnlFeHByKHN0cmVhbSwgYSkge1xuICAgIGlmIChzdHJlYW0udHJ5cG9wKCctJykpIHtcbiAgICAgIHZhciBlID0gdW5hcnlFeHByKHN0cmVhbSwgYSk7XG4gICAgICBpZiAobnVsbCA9PSBlKVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQb3NpdGlvbiAnICsgc3RyZWFtLnBvc2l0aW9uKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogRXhwZWN0ZWQgdW5hcnkgZXhwcmVzc2lvbiBhZnRlciAtJyk7XG4gICAgICByZXR1cm4gYS5ub2RlKCdVbmFyeU1pbnVzJywgZSk7XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIHVuaW9uRXhwcihzdHJlYW0sIGEpO1xuICB9XG4gIHZhciBhc3RGYWN0b3J5ID0ge1xuICAgIG5vZGU6IGZ1bmN0aW9uKCkge3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO31cbiAgfTtcblxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW1pemF0aW9ucyAoVE9ETykgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICAvKipcbiAgICogU29tZSB0aGluZ3MgSSd2ZSBiZWVuIGNvbnNpZGVyaW5nOlxuICAgKiAxKSBhLy9iIGJlY29tZXMgYS9kZXNjZW5kYW50OjpiIGlmIHRoZXJlJ3Mgbm8gcHJlZGljYXRlIHRoYXQgdXNlc1xuICAgKiAgICBwb3NpdGlvbigpIG9yIGxhc3QoKVxuICAgKiAyKSBheGlzW3ByZWRdOiB3aGVuIHByZWQgZG9lc24ndCB1c2UgcG9zaXRpb24sIGV2YWx1YXRlIGl0IGp1c3Qgb25jZSBwZXJcbiAgICogICAgbm9kZSBpbiB0aGUgbm9kZS1zZXQgcmF0aGVyIHRoYW4gb25jZSBwZXIgKG5vZGUsIHBvc2l0aW9uLCBsYXN0KS5cbiAgICogRm9yIG1vcmUgb3B0aW1pemF0aW9ucywgbG9vayB1cCBHZWNrbydzIG9wdGltaXplcjpcbiAgICogaHR0cDovL214ci5tb3ppbGxhLm9yZy9tb3ppbGxhLWNlbnRyYWwvc291cmNlL2NvbnRlbnQveHNsdC9zcmMveHBhdGgvdHhYUGF0aE9wdGltaXplci5jcHBcbiAgICovXG4gIC8vIFRPRE9cbiAgZnVuY3Rpb24gb3B0aW1pemUoYXN0KSB7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGlvbjogYXhlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogRGF0YSB0eXBlczogRm9yIHN0cmluZywgbnVtYmVyLCBib29sZWFuLCB3ZSBqdXN0IHVzZSBKYXZhc2NyaXB0IHR5cGVzLlxuICAgKiBOb2RlLXNldHMgaGF2ZSB0aGUgZm9ybVxuICAgKiAgICB7bm9kZXM6IFtub2RlLCAuLi5dfVxuICAgKiBvciB7bm9kZXM6IFtub2RlLCAuLi5dLCBwb3M6IFtbMV0sIFsyXSwgLi4uXSwgbGFzdHM6IFtbMV0sIFsyXSwgLi4uXX1cbiAgICpcbiAgICogTW9zdCBvZiB0aGUgdGltZSwgb25seSB0aGUgbm9kZSBpcyB1c2VkIGFuZCB0aGUgcG9zaXRpb24gaW5mb3JtYXRpb24gaXNcbiAgICogZGlzY2FyZGVkLiBCdXQgaWYgeW91IHVzZSBhIHByZWRpY2F0ZSwgd2UgbmVlZCB0byB0cnkgZXZlcnkgdmFsdWUgb2ZcbiAgICogcG9zaXRpb24gYW5kIGxhc3QgaW4gY2FzZSB0aGUgcHJlZGljYXRlIGNhbGxzIHBvc2l0aW9uKCkgb3IgbGFzdCgpLlxuICAgKi9cblxuICAvKipcbiAgICogVGhlIE5vZGVNdWx0aVNldCBpcyBhIGhlbHBlciBjbGFzcyB0byBoZWxwIGdlbmVyYXRlXG4gICAqIHtub2RlczpbXSwgcG9zOltdLCBsYXN0czpbXX0gc3RydWN0dXJlcy4gSXQgaXMgdXNlZnVsIGZvciB0aGVcbiAgICogZGVzY2VuZGFudCwgZGVzY2VuZGFudC1vci1zZWxmLCBmb2xsb3dpbmctc2libGluZywgYW5kXG4gICAqIHByZWNlZGluZy1zaWJsaW5nIGF4ZXMgZm9yIHdoaWNoIHdlIGNhbiB1c2UgYSBzdGFjayB0byBvcmdhbml6ZSB0aGluZ3MuXG4gICAqL1xuICBmdW5jdGlvbiBOb2RlTXVsdGlTZXQoaXNSZXZlcnNlQXhpcykge1xuICAgIHRoaXMubm9kZXMgPSBbXTtcbiAgICB0aGlzLnBvcyA9IFtdO1xuICAgIHRoaXMubGFzdHMgPSBbXTtcbiAgICB0aGlzLm5leHRQb3MgPSBbXTtcbiAgICB0aGlzLnNlcmllc0luZGV4ZXMgPSBbXTsgIC8vIGluZGV4IHdpdGhpbiBub2RlcyB0aGF0IGVhY2ggc2VyaWVzIGJlZ2lucy5cbiAgICB0aGlzLmlzUmV2ZXJzZUF4aXMgPSBpc1JldmVyc2VBeGlzO1xuICAgIHRoaXMuX3B1c2hUb05vZGVzID0gaXNSZXZlcnNlQXhpcyA/IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0IDogQXJyYXkucHJvdG90eXBlLnB1c2g7XG4gIH1cbiAgTm9kZU11bHRpU2V0LnByb3RvdHlwZSA9IHtcbiAgICBwdXNoU2VyaWVzOiBmdW5jdGlvbiBwdXNoU2VyaWVzKCkge1xuICAgICAgdGhpcy5uZXh0UG9zLnB1c2goMSk7XG4gICAgICB0aGlzLnNlcmllc0luZGV4ZXMucHVzaCh0aGlzLm5vZGVzLmxlbmd0aCk7XG4gICAgfSxcbiAgICBwb3BTZXJpZXM6IGZ1bmN0aW9uIHBvcFNlcmllcygpIHtcbiAgICAgIGNvbnNvbGUuYXNzZXJ0KDAgPCB0aGlzLm5leHRQb3MubGVuZ3RoLCB0aGlzLm5leHRQb3MpO1xuICAgICAgdmFyIGxhc3QgPSB0aGlzLm5leHRQb3MucG9wKCkgLSAxLFxuICAgICAgICAgIGluZGV4SW5Qb3MgPSB0aGlzLm5leHRQb3MubGVuZ3RoLFxuICAgICAgICAgIHNlcmllc0JlZ2luSW5kZXggPSB0aGlzLnNlcmllc0luZGV4ZXMucG9wKCksXG4gICAgICAgICAgc2VyaWVzRW5kSW5kZXggPSB0aGlzLm5vZGVzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSBzZXJpZXNCZWdpbkluZGV4OyBpIDwgc2VyaWVzRW5kSW5kZXg7ICsraSkge1xuICAgICAgICBjb25zb2xlLmFzc2VydChpbmRleEluUG9zIDwgdGhpcy5sYXN0c1tpXS5sZW5ndGgpO1xuICAgICAgICBjb25zb2xlLmFzc2VydCh1bmRlZmluZWQgPT09IHRoaXMubGFzdHNbaV1baW5kZXhJblBvc10pO1xuICAgICAgICB0aGlzLmxhc3RzW2ldW2luZGV4SW5Qb3NdID0gbGFzdDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbmFsaXplOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChudWxsID09IHRoaXMubmV4dFBvcykgcmV0dXJuIHRoaXM7XG4gICAgICBjb25zb2xlLmFzc2VydCgwID09PSB0aGlzLm5leHRQb3MubGVuZ3RoKTtcbiAgICAgIHZhciBsYXN0c0pTT04gPSBKU09OLnN0cmluZ2lmeSh0aGlzLmxhc3RzKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXN0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGFzdHNbaV0ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICBjb25zb2xlLmFzc2VydChudWxsICE9IHRoaXMubGFzdHNbaV1bal0sIGkgKyAnLCcgKyBqICsgJzonICsgbGFzdHNKU09OKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5wdXNoU2VyaWVzID0gdGhpcy5wb3BTZXJpZXMgPSB0aGlzLmFkZE5vZGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbHJlYWR5IGZpbmFsaXplZC4nKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGFkZE5vZGU6IGZ1bmN0aW9uIGFkZE5vZGUobm9kZSkge1xuICAgICAgY29uc29sZS5hc3NlcnQobm9kZSk7XG4gICAgICB0aGlzLl9wdXNoVG9Ob2Rlcy5jYWxsKHRoaXMubm9kZXMsIG5vZGUpXG4gICAgICB0aGlzLl9wdXNoVG9Ob2Rlcy5jYWxsKHRoaXMucG9zLCB0aGlzLm5leHRQb3Muc2xpY2UoKSk7XG4gICAgICB0aGlzLl9wdXNoVG9Ob2Rlcy5jYWxsKHRoaXMubGFzdHMsIG5ldyBBcnJheSh0aGlzLm5leHRQb3MubGVuZ3RoKSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubmV4dFBvcy5sZW5ndGg7ICsraSkgdGhpcy5uZXh0UG9zW2ldKys7XG4gICAgfSxcbiAgICBzaW1wbGlmeTogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmZpbmFsaXplKCk7XG4gICAgICByZXR1cm4ge25vZGVzOnRoaXMubm9kZXMsIHBvczp0aGlzLnBvcywgbGFzdHM6dGhpcy5sYXN0c307XG4gICAgfVxuICB9O1xuICBmdW5jdGlvbiBlYWNoQ29udGV4dChub2RlTXVsdGlTZXQpIHtcbiAgICB2YXIgciA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZU11bHRpU2V0Lm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVNdWx0aVNldC5ub2Rlc1tpXTtcbiAgICAgIGlmICghbm9kZU11bHRpU2V0LnBvcykge1xuICAgICAgICByLnB1c2goe25vZGVzOltub2RlXSwgcG9zOiBbW2kgKyAxXV0sIGxhc3RzOiBbW25vZGVNdWx0aVNldC5ub2Rlcy5sZW5ndGhdXX0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBub2RlTXVsdGlTZXQucG9zW2ldLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgci5wdXNoKHtub2Rlczpbbm9kZV0sIHBvczogW1tub2RlTXVsdGlTZXQucG9zW2ldW2pdXV0sIGxhc3RzOiBbW25vZGVNdWx0aVNldC5sYXN0c1tpXVtqXV1dfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgLyoqIE1hdGNoZXIgdXNlZCBpbiB0aGUgYXhlcy5cbiAgICovXG4gIGZ1bmN0aW9uIE5vZGVNYXRjaGVyKG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgdGhpcy5ub2RlVHlwZU51bSA9IG5vZGVUeXBlTnVtO1xuICAgIHRoaXMubm9kZU5hbWUgPSBub2RlTmFtZTtcbiAgICB0aGlzLnNob3VsZExvd2VyQ2FzZSA9IHNob3VsZExvd2VyQ2FzZTtcbiAgICB0aGlzLm5vZGVOYW1lVGVzdCA9XG4gICAgICBudWxsID09IG5vZGVOYW1lID8gdGhpcy5fYWx3YXlzVHJ1ZSA6XG4gICAgICBzaG91bGRMb3dlckNhc2UgPyB0aGlzLl9ub2RlTmFtZUxvd2VyQ2FzZUVxdWFscyA6XG4gICAgICB0aGlzLl9ub2RlTmFtZUVxdWFscztcbiAgfVxuICBOb2RlTWF0Y2hlci5wcm90b3R5cGUgPSB7XG4gICAgbWF0Y2hlczogZnVuY3Rpb24gbWF0Y2hlcyhub2RlKSB7XG4gICAgICBpZiAoMCA9PT0gdGhpcy5ub2RlVHlwZU51bSB8fCB0aGlzLl9ub2RlVHlwZU1hdGNoZXMobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZU5hbWVUZXN0KGdldE5vZGVOYW1lKG5vZGUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgX25vZGVUeXBlTWF0Y2hlcyhub2RlT3JBdHRyKSB7XG4gICAgICBpZiAobm9kZU9yQXR0ci5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXR0cicgJiYgdGhpcy5ub2RlVHlwZU51bSA9PT0gMikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlT3JBdHRyLm5vZGVUeXBlID09PSB0aGlzLm5vZGVUeXBlTnVtO1xuICAgIH0sXG4gICAgX2Fsd2F5c1RydWU6IGZ1bmN0aW9uKG5hbWUpIHtyZXR1cm4gdHJ1ZTt9LFxuICAgIF9ub2RlTmFtZUVxdWFsczogZnVuY3Rpb24gX25vZGVOYW1lRXF1YWxzKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVOYW1lID09PSBuYW1lO1xuICAgIH0sXG4gICAgX25vZGVOYW1lTG93ZXJDYXNlRXF1YWxzOiBmdW5jdGlvbiBfbm9kZU5hbWVMb3dlckNhc2VFcXVhbHMobmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZU5hbWUgPT09IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gZm9sbG93aW5nU2libGluZ0hlbHBlcihub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UsIHNoaWZ0LCBwZWVrLCBmb2xsb3dpbmdOb2RlLCBhbmRTZWxmLCBpc1JldmVyc2VBeGlzKSB7XG4gICAgdmFyIG1hdGNoZXIgPSBuZXcgTm9kZU1hdGNoZXIobm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpO1xuICAgIHZhciBub2RlTXVsdGlTZXQgPSBuZXcgTm9kZU11bHRpU2V0KGlzUmV2ZXJzZUF4aXMpO1xuICAgIHdoaWxlICgwIDwgbm9kZUxpc3QubGVuZ3RoKSB7ICAvLyBjYW4gYmUgaWYgZm9yIGZvbGxvd2luZywgcHJlY2VkaW5nXG4gICAgICB2YXIgbm9kZSA9IHNoaWZ0LmNhbGwobm9kZUxpc3QpO1xuICAgICAgY29uc29sZS5hc3NlcnQobm9kZSAhPSBudWxsKTtcbiAgICAgIG5vZGUgPSBmb2xsb3dpbmdOb2RlKG5vZGUpO1xuICAgICAgbm9kZU11bHRpU2V0LnB1c2hTZXJpZXMoKTtcbiAgICAgIHZhciBudW1QdXNoZWQgPSAxO1xuICAgICAgd2hpbGUgKG51bGwgIT0gbm9kZSkge1xuICAgICAgICBpZiAoISBhbmRTZWxmICYmIG1hdGNoZXIubWF0Y2hlcyhub2RlKSlcbiAgICAgICAgICBub2RlTXVsdGlTZXQuYWRkTm9kZShub2RlKTtcbiAgICAgICAgaWYgKG5vZGUgPT09IHBlZWsuY2FsbChub2RlTGlzdCkpIHtcbiAgICAgICAgICBzaGlmdC5jYWxsKG5vZGVMaXN0KTtcbiAgICAgICAgICBub2RlTXVsdGlTZXQucHVzaFNlcmllcygpO1xuICAgICAgICAgIG51bVB1c2hlZCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbmRTZWxmICYmIG1hdGNoZXIubWF0Y2hlcyhub2RlKSlcbiAgICAgICAgICBub2RlTXVsdGlTZXQuYWRkTm9kZShub2RlKTtcbiAgICAgICAgbm9kZSA9IGZvbGxvd2luZ05vZGUobm9kZSk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoMCA8IG51bVB1c2hlZC0tKVxuICAgICAgICBub2RlTXVsdGlTZXQucG9wU2VyaWVzKCk7XG4gICAgfVxuICAgIHJldHVybiBub2RlTXVsdGlTZXQ7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgbmV4dCBub24tZGVzY2VuZGFudCBub2RlIGluIGRvY3VtZW50IG9yZGVyLlxuICAgKiBUaGlzIGlzIHRoZSBmaXJzdCBub2RlIGluIGZvbGxvd2luZzo6bm9kZSgpLCBpZiBub2RlIGlzIHRoZSBjb250ZXh0LlxuICAgKi9cbiAgZnVuY3Rpb24gZm9sbG93aW5nTm9uRGVzY2VuZGFudE5vZGUobm9kZSkge1xuICAgIGlmIChub2RlLm93bmVyRWxlbWVudCkge1xuICAgICAgaWYgKG5vZGUub3duZXJFbGVtZW50LmZpcnN0Q2hpbGQpXG4gICAgICAgIHJldHVybiBub2RlLm93bmVyRWxlbWVudC5maXJzdENoaWxkO1xuICAgICAgbm9kZSA9IG5vZGUub3duZXJFbGVtZW50O1xuICAgIH1cbiAgICBkbyB7XG4gICAgICBpZiAobm9kZS5uZXh0U2libGluZykgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG4gICAgfSB3aGlsZSAobm9kZSA9IG5vZGUucGFyZW50Tm9kZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgbmV4dCBub2RlIGluIGEgZG9jdW1lbnQtb3JkZXIgZGVwdGgtZmlyc3Qgc2VhcmNoLlxuICAgKiBTZWUgdGhlIGRlZmluaXRpb24gb2YgZG9jdW1lbnQgb3JkZXJbMV06XG4gICAqICAgMSkgZWxlbWVudFxuICAgKiAgIDIpIG5hbWVzcGFjZSBub2Rlc1xuICAgKiAgIDMpIGF0dHJpYnV0ZXNcbiAgICogICA0KSBjaGlsZHJlblxuICAgKiAgIFsxXTogaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgvI2R0LWRvY3VtZW50LW9yZGVyXG4gICAqL1xuICBmdW5jdGlvbiBmb2xsb3dpbmdOb2RlKG5vZGUpIHtcbiAgICBpZiAobm9kZS5vd25lckVsZW1lbnQpICAvLyBhdHRyaWJ1dGVzOiBmb2xsb3dpbmcgbm9kZSBvZiBlbGVtZW50LlxuICAgICAgbm9kZSA9IG5vZGUub3duZXJFbGVtZW50O1xuICAgIGlmIChudWxsICE9IG5vZGUuZmlyc3RDaGlsZClcbiAgICAgIHJldHVybiBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgZG8ge1xuICAgICAgaWYgKG51bGwgIT0gbm9kZS5uZXh0U2libGluZykge1xuICAgICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfSB3aGlsZSAobm9kZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqIFJldHVybnMgdGhlIHByZXZpb3VzIG5vZGUgaW4gZG9jdW1lbnQgb3JkZXIgKGV4Y2x1ZGluZyBhdHRyaWJ1dGVzXG4gICAqIGFuZCBuYW1lc3BhY2Ugbm9kZXMpLlxuICAgKi9cbiAgZnVuY3Rpb24gcHJlY2VkaW5nTm9kZShub2RlKSB7XG4gICAgaWYgKG5vZGUub3duZXJFbGVtZW50KVxuICAgICAgcmV0dXJuIG5vZGUub3duZXJFbGVtZW50O1xuICAgIGlmIChudWxsICE9IG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICB3aGlsZSAobnVsbCAhPSBub2RlLmxhc3RDaGlsZCkge1xuICAgICAgICBub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgaWYgKG51bGwgIT0gbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKiogVGhpcyBheGlzIGlzIGluZWZmaWNpZW50IGlmIHRoZXJlIGFyZSBtYW55IG5vZGVzIGluIHRoZSBub2RlTGlzdC5cbiAgICogQnV0IEkgdGhpbmsgaXQncyBhIHByZXR0eSB1c2VsZXNzIGF4aXMgc28gaXQncyBvay4gKi9cbiAgZnVuY3Rpb24gZm9sbG93aW5nSGVscGVyKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSkge1xuICAgIHZhciBtYXRjaGVyID0gbmV3IE5vZGVNYXRjaGVyKG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKTtcbiAgICB2YXIgbm9kZU11bHRpU2V0ID0gbmV3IE5vZGVNdWx0aVNldChmYWxzZSk7XG4gICAgdmFyIGN1cnNvciA9IG5vZGVMaXN0WzBdO1xuICAgIHZhciB1bm9yZGVyZWRGb2xsb3dpbmdTdGFydHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVMaXN0W2ldO1xuICAgICAgdmFyIHN0YXJ0ID0gZm9sbG93aW5nTm9uRGVzY2VuZGFudE5vZGUobm9kZSk7XG4gICAgICBpZiAoc3RhcnQpXG4gICAgICAgIHVub3JkZXJlZEZvbGxvd2luZ1N0YXJ0cy5wdXNoKHN0YXJ0KTtcbiAgICB9XG4gICAgaWYgKDAgPT09IHVub3JkZXJlZEZvbGxvd2luZ1N0YXJ0cy5sZW5ndGgpXG4gICAgICByZXR1cm4ge25vZGVzOltdfTtcbiAgICB2YXIgcG9zID0gW10sIG5leHRQb3MgPSBbXTtcbiAgICB2YXIgc3RhcnRlZCA9IDA7XG4gICAgd2hpbGUgKGN1cnNvciA9IGZvbGxvd2luZ05vZGUoY3Vyc29yKSkge1xuICAgICAgZm9yICh2YXIgaSA9IHVub3JkZXJlZEZvbGxvd2luZ1N0YXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG4gICAgICAgIGlmIChjdXJzb3IgPT09IHVub3JkZXJlZEZvbGxvd2luZ1N0YXJ0c1tpXSkge1xuICAgICAgICAgIG5vZGVNdWx0aVNldC5wdXNoU2VyaWVzKCk7XG4gICAgICAgICAgdW5vcmRlcmVkRm9sbG93aW5nU3RhcnRzLnNwbGljZShpLGkrMSk7XG4gICAgICAgICAgc3RhcnRlZCsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhcnRlZCAmJiBtYXRjaGVyLm1hdGNoZXMoY3Vyc29yKSkge1xuICAgICAgICBub2RlTXVsdGlTZXQuYWRkTm9kZShjdXJzb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmFzc2VydCgwID09PSB1bm9yZGVyZWRGb2xsb3dpbmdTdGFydHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXJ0ZWQ7IGkrKylcbiAgICAgIG5vZGVNdWx0aVNldC5wb3BTZXJpZXMoKTtcbiAgICByZXR1cm4gbm9kZU11bHRpU2V0LmZpbmFsaXplKCk7XG4gIH1cbiAgZnVuY3Rpb24gcHJlY2VkaW5nSGVscGVyKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSkge1xuICAgIHZhciBtYXRjaGVyID0gbmV3IE5vZGVNYXRjaGVyKG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKTtcbiAgICB2YXIgY3Vyc29yID0gbm9kZUxpc3QucG9wKCk7XG4gICAgaWYgKG51bGwgPT0gY3Vyc29yKSByZXR1cm4ge25vZGVzOnt9fTtcbiAgICB2YXIgciA9IHtub2RlczpbXSwgcG9zOltdLCBsYXN0czpbXX07XG4gICAgdmFyIG5leHRQYXJlbnRzID0gW2N1cnNvci5wYXJlbnROb2RlIHx8IGN1cnNvci5vd25lckVsZW1lbnRdLCBuZXh0UG9zID0gWzFdO1xuICAgIHdoaWxlIChjdXJzb3IgPSBwcmVjZWRpbmdOb2RlKGN1cnNvcikpIHtcbiAgICAgIGlmIChjdXJzb3IgPT09IG5vZGVMaXN0W25vZGVMaXN0Lmxlbmd0aCAtIDFdKSB7XG4gICAgICAgIG5leHRQYXJlbnRzLnB1c2gobm9kZUxpc3QucG9wKCkpO1xuICAgICAgICBuZXh0UG9zLnB1c2goMSk7XG4gICAgICB9XG4gICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoZXIubWF0Y2hlcyhjdXJzb3IpO1xuICAgICAgdmFyIHBvcywgc29tZW9uZVVzZWQgPSBmYWxzZTtcbiAgICAgIGlmIChtYXRjaGVzKVxuICAgICAgICBwb3MgPSBuZXh0UG9zLnNsaWNlKCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV4dFBhcmVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGN1cnNvciA9PT0gbmV4dFBhcmVudHNbaV0pIHtcbiAgICAgICAgICBuZXh0UGFyZW50c1tpXSA9IGN1cnNvci5wYXJlbnROb2RlIHx8IGN1cnNvci5vd25lckVsZW1lbnQ7XG4gICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgIHBvc1tpXSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgICBwb3NbaV0gPSBuZXh0UG9zW2ldKys7XG4gICAgICAgICAgICBzb21lb25lVXNlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc29tZW9uZVVzZWQpIHtcbiAgICAgICAgci5ub2Rlcy51bnNoaWZ0KGN1cnNvcik7XG4gICAgICAgIHIucG9zLnVuc2hpZnQocG9zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByLnBvcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGxhc3RzID0gW107XG4gICAgICByLmxhc3RzLnB1c2gobGFzdHMpO1xuICAgICAgZm9yICh2YXIgaiA9IHIucG9zW2ldLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgIGlmIChudWxsID09IHIucG9zW2ldW2pdKSB7XG4gICAgICAgICAgci5wb3NbaV0uc3BsaWNlKGosIGorMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFzdHMudW5zaGlmdChuZXh0UG9zW2pdIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICAvKiogbm9kZS1zZXQsIGF4aXMgLT4gbm9kZS1zZXQgKi9cbiAgZnVuY3Rpb24gZGVzY2VuZGFudERmcyhub2RlTXVsdGlTZXQsIG5vZGUsIHJlbWFpbmluZywgbWF0Y2hlciwgYW5kU2VsZiwgYXR0ckluZGljZXMsIGF0dHJOb2Rlcykge1xuICAgIHdoaWxlICgwIDwgcmVtYWluaW5nLmxlbmd0aCAmJiBudWxsICE9IHJlbWFpbmluZ1swXS5vd25lckVsZW1lbnQpIHtcbiAgICAgIHZhciBhdHRyID0gcmVtYWluaW5nLnNoaWZ0KCk7XG4gICAgICBpZiAoYW5kU2VsZiAmJiBtYXRjaGVyLm1hdGNoZXMoYXR0cikpIHtcbiAgICAgICAgYXR0ck5vZGVzLnB1c2goYXR0cik7XG4gICAgICAgIGF0dHJJbmRpY2VzLnB1c2gobm9kZU11bHRpU2V0Lm5vZGVzLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChudWxsICE9IG5vZGUgJiYgIWFuZFNlbGYpIHtcbiAgICAgIGlmIChtYXRjaGVyLm1hdGNoZXMobm9kZSkpXG4gICAgICAgIG5vZGVNdWx0aVNldC5hZGROb2RlKG5vZGUpO1xuICAgIH1cbiAgICB2YXIgcHVzaGVkID0gZmFsc2U7XG4gICAgaWYgKG51bGwgPT0gbm9kZSkge1xuICAgICAgaWYgKDAgPT09IHJlbWFpbmluZy5sZW5ndGgpIHJldHVybjtcbiAgICAgIG5vZGUgPSByZW1haW5pbmcuc2hpZnQoKTtcbiAgICAgIG5vZGVNdWx0aVNldC5wdXNoU2VyaWVzKCk7XG4gICAgICBwdXNoZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoMCA8IHJlbWFpbmluZy5sZW5ndGggJiYgbm9kZSA9PT0gcmVtYWluaW5nWzBdKSB7XG4gICAgICBub2RlTXVsdGlTZXQucHVzaFNlcmllcygpO1xuICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgIHJlbWFpbmluZy5zaGlmdCgpO1xuICAgIH1cbiAgICBpZiAoYW5kU2VsZikge1xuICAgICAgaWYgKG1hdGNoZXIubWF0Y2hlcyhub2RlKSlcbiAgICAgICAgbm9kZU11bHRpU2V0LmFkZE5vZGUobm9kZSk7XG4gICAgfVxuICAgIC8vIFRPRE86IHVzZSBvcHRpbWl6YXRpb24uIEFsc28gdHJ5IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVcbiAgICAvLyB2YXIgbm9kZUxpc3QgPSAxID09PSBub2RlVHlwZU51bSAmJiBudWxsICE9IG5vZGUuY2hpbGRyZW4gPyBub2RlLmNoaWxkcmVuIDogbm9kZS5jaGlsZE5vZGVzO1xuICAgIHZhciBub2RlTGlzdCA9IG5vZGUuY2hpbGROb2RlcztcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vZGVMaXN0Lmxlbmd0aDsgKytqKSB7XG4gICAgICB2YXIgY2hpbGQgPSBub2RlTGlzdFtqXTtcbiAgICAgIGRlc2NlbmRhbnREZnMobm9kZU11bHRpU2V0LCBjaGlsZCwgcmVtYWluaW5nLCBtYXRjaGVyLCBhbmRTZWxmLCBhdHRySW5kaWNlcywgYXR0ck5vZGVzKTtcbiAgICB9XG4gICAgaWYgKHB1c2hlZCkge1xuICAgICAgbm9kZU11bHRpU2V0LnBvcFNlcmllcygpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBkZXNjZW5hbnRIZWxwZXIobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlLCBhbmRTZWxmKSB7XG4gICAgdmFyIG1hdGNoZXIgPSBuZXcgTm9kZU1hdGNoZXIobm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpO1xuICAgIHZhciBub2RlTXVsdGlTZXQgPSBuZXcgTm9kZU11bHRpU2V0KGZhbHNlKTtcbiAgICB2YXIgYXR0ckluZGljZXMgPSBbXSwgYXR0ck5vZGVzID0gW107XG4gICAgd2hpbGUgKDAgPCBub2RlTGlzdC5sZW5ndGgpIHtcbiAgICAgIC8vIHZhciBub2RlID0gbm9kZUxpc3Quc2hpZnQoKTtcbiAgICAgIGRlc2NlbmRhbnREZnMobm9kZU11bHRpU2V0LCBudWxsLCBub2RlTGlzdCwgbWF0Y2hlciwgYW5kU2VsZiwgYXR0ckluZGljZXMsIGF0dHJOb2Rlcyk7XG4gICAgfVxuICAgIG5vZGVNdWx0aVNldC5maW5hbGl6ZSgpO1xuICAgIGZvciAodmFyIGkgPSBhdHRyTm9kZXMubGVuZ3RoLTE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBub2RlTXVsdGlTZXQubm9kZXMuc3BsaWNlKGF0dHJJbmRpY2VzW2ldLCBhdHRySW5kaWNlc1tpXSwgYXR0ck5vZGVzW2ldKTtcbiAgICAgIG5vZGVNdWx0aVNldC5wb3Muc3BsaWNlKGF0dHJJbmRpY2VzW2ldLCBhdHRySW5kaWNlc1tpXSwgWzFdKTtcbiAgICAgIG5vZGVNdWx0aVNldC5sYXN0cy5zcGxpY2UoYXR0ckluZGljZXNbaV0sIGF0dHJJbmRpY2VzW2ldLCBbMV0pO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZU11bHRpU2V0O1xuICB9XG4gIC8qKlxuICAgKi9cbiAgZnVuY3Rpb24gYW5jZXN0b3JIZWxwZXIobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlLCBhbmRTZWxmKSB7XG4gICAgdmFyIG1hdGNoZXIgPSBuZXcgTm9kZU1hdGNoZXIobm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpO1xuICAgIHZhciBhbmNlc3RvcnMgPSBbXTsgLy8gYXJyYXkgb2Ygbm9uLWVtcHR5IGFycmF5cyBvZiBtYXRjaGluZyBhbmNlc3RvcnNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVMaXN0W2ldO1xuICAgICAgdmFyIGlzRmlyc3QgPSB0cnVlO1xuICAgICAgdmFyIGEgPSBbXTtcbiAgICAgIHdoaWxlIChudWxsICE9IG5vZGUpIHtcbiAgICAgICAgaWYgKCFpc0ZpcnN0IHx8IGFuZFNlbGYpIHtcbiAgICAgICAgICBpZiAobWF0Y2hlci5tYXRjaGVzKG5vZGUpKVxuICAgICAgICAgICAgYS5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlzRmlyc3QgPSBmYWxzZTtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSB8fCBub2RlLm93bmVyRWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGlmICgwIDwgYS5sZW5ndGgpXG4gICAgICAgIGFuY2VzdG9ycy5wdXNoKGEpO1xuICAgIH1cbiAgICB2YXIgbGFzdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuY2VzdG9ycy5sZW5ndGg7ICsraSkgbGFzdHMucHVzaChhbmNlc3RvcnNbaV0ubGVuZ3RoKTtcbiAgICB2YXIgbm9kZU11bHRpU2V0ID0gbmV3IE5vZGVNdWx0aVNldCh0cnVlKTtcbiAgICB2YXIgbmV3Q3R4ID0ge25vZGVzOltdLCBwb3M6W10sIGxhc3RzOltdfTtcbiAgICB3aGlsZSAoMCA8IGFuY2VzdG9ycy5sZW5ndGgpIHtcbiAgICAgIHZhciBwb3MgPSBbYW5jZXN0b3JzWzBdLmxlbmd0aF07XG4gICAgICB2YXIgbGFzdCA9IFtsYXN0c1swXV07XG4gICAgICB2YXIgbm9kZSA9IGFuY2VzdG9yc1swXS5wb3AoKTtcbiAgICAgIGZvciAodmFyIGkgPSBhbmNlc3RvcnMubGVuZ3RoIC0gMTsgaSA+IDA7IC0taSkge1xuICAgICAgICBpZiAobm9kZSA9PT0gYW5jZXN0b3JzW2ldW2FuY2VzdG9yc1tpXS5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHBvcy5wdXNoKGFuY2VzdG9yc1tpXS5sZW5ndGgpO1xuICAgICAgICAgIGxhc3QucHVzaChsYXN0c1tpXSk7XG4gICAgICAgICAgYW5jZXN0b3JzW2ldLnBvcCgpO1xuICAgICAgICAgIGlmICgwID09PSBhbmNlc3RvcnNbaV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBhbmNlc3RvcnMuc3BsaWNlKGksIGkrMSk7XG4gICAgICAgICAgICBsYXN0cy5zcGxpY2UoaSwgaSsxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICgwID09PSBhbmNlc3RvcnNbMF0ubGVuZ3RoKSB7XG4gICAgICAgIGFuY2VzdG9ycy5zaGlmdCgpO1xuICAgICAgICBsYXN0cy5zaGlmdCgpO1xuICAgICAgfVxuICAgICAgbmV3Q3R4Lm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICBuZXdDdHgucG9zLnB1c2gocG9zKTtcbiAgICAgIG5ld0N0eC5sYXN0cy5wdXNoKGxhc3QpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3Q3R4O1xuICB9XG4gIC8qKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHNvcnREb2N1bWVudE9yZGVyLiBSZXR1cm5zIGEgbGlzdCBvZiBpbmRpY2VzLCBmcm9tIHRoZVxuICAgKiBub2RlIHRvIHRoZSByb290LCBvZiBwb3NpdGlvbnMgd2l0aGluIHBhcmVudC5cbiAgICogRm9yIGNvbnZlbmllbmNlLCB0aGUgbm9kZSBpcyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBhZGRyZXNzVmVjdG9yKG5vZGUpIHtcbiAgICB2YXIgciA9IFtub2RlXTtcbiAgICBpZiAobnVsbCAhPSBub2RlLm93bmVyRWxlbWVudCkge1xuICAgICAgbm9kZSA9IG5vZGUub3duZXJFbGVtZW50O1xuICAgICAgci5wdXNoKC0xKTtcbiAgICB9XG4gICAgd2hpbGUgKG51bGwgIT0gbm9kZSkge1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgd2hpbGUgKG51bGwgIT0gbm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgICByLnB1c2goaSk7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlXG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIGZ1bmN0aW9uIGFkZHJlc3NDb21wYXJhdG9yKGEsIGIpIHtcbiAgICB2YXIgbWlubGVuID0gTWF0aC5taW4oYS5sZW5ndGggLSAxLCBiLmxlbmd0aCAtIDEpLCAgLy8gbm90IGluY2x1ZGluZyBbMF09bm9kZVxuICAgICAgICBhbGVuID0gYS5sZW5ndGgsXG4gICAgICAgIGJsZW4gPSBiLmxlbmd0aDtcbiAgICBpZiAoYVswXSA9PT0gYlswXSkgcmV0dXJuIDA7XG4gICAgdmFyIGM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW5sZW47ICsraSkge1xuICAgICAgYyA9IGFbYWxlbiAtIGkgLSAxXSAtIGJbYmxlbiAtIGkgLSAxXTtcbiAgICAgIGlmICgwICE9PSBjKVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKG51bGwgPT0gYyB8fCAwID09PSBjKSB7XG4gICAgICAvLyBBbGwgZXF1YWwgdW50aWwgb25lIG9mIHRoZSBub2Rlcy4gVGhlIGxvbmdlciBvbmUgaXMgdGhlIGRlc2NlbmRhbnQuXG4gICAgICBjID0gYWxlbiAtIGJsZW47XG4gICAgfVxuICAgIGlmICgwID09PSBjKVxuICAgICAgYyA9IGdldE5vZGVOYW1lKGEpIC0gZ2V0Tm9kZU5hbWUoYik7XG4gICAgaWYgKDAgPT09IGMpXG4gICAgICBjID0gMTtcbiAgICByZXR1cm4gYztcbiAgfVxuICB2YXIgc29ydFVuaXFEb2N1bWVudE9yZGVyID0geHBhdGguc29ydFVuaXFEb2N1bWVudE9yZGVyID0gZnVuY3Rpb24obm9kZXMpIHtcbiAgICB2YXIgYSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICB2YXIgdiA9IGFkZHJlc3NWZWN0b3Iobm9kZSk7XG4gICAgICBhLnB1c2godik7XG4gICAgfVxuICAgIGEuc29ydChhZGRyZXNzQ29tcGFyYXRvcik7XG4gICAgdmFyIGIgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICgwIDwgaSAmJiBhW2ldWzBdID09PSBhW2kgLSAxXVswXSlcbiAgICAgICAgY29udGludWU7XG4gICAgICBiLnB1c2goYVtpXVswXSk7XG4gICAgfVxuICAgIHJldHVybiBiO1xuICB9XG4gIC8qKiBTb3J0IG5vZGUgbXVsdGlzZXQuIERvZXMgbm90IGRvIGFueSBkZS1kdXBpbmcuICovXG4gIGZ1bmN0aW9uIHNvcnROb2RlTXVsdGlTZXQobm9kZU11bHRpU2V0KSB7XG4gICAgdmFyIGEgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVNdWx0aVNldC5ub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHYgPSBhZGRyZXNzVmVjdG9yKG5vZGVNdWx0aVNldC5ub2Rlc1tpXSk7XG4gICAgICBhLnB1c2goe3Y6diwgbjpub2RlTXVsdGlTZXQubm9kZXNbaV0sXG4gICAgICAgICAgICAgIHA6bm9kZU11bHRpU2V0LnBvc1tpXSwgbDpub2RlTXVsdGlTZXQubGFzdHNbaV19KTtcbiAgICB9XG4gICAgYS5zb3J0KGNvbXBhcmUpO1xuICAgIHZhciByID0ge25vZGVzOltdLCBwb3M6W10sIGxhc3RzOltdfTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHtcbiAgICAgIHIubm9kZXMucHVzaChhW2ldLm4pO1xuICAgICAgci5wb3MucHVzaChhW2ldLnApO1xuICAgICAgci5sYXN0cy5wdXNoKGFbaV0ubCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbXBhcmUoeCwgeSkge1xuICAgICAgcmV0dXJuIGFkZHJlc3NDb21wYXJhdG9yKHgudiwgeS52KTtcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgLyoqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGFuY2VzdG9ycyBkb3duIHRvIGEgbm9kZS5cbiAgICogVGhlIGFycmF5IHN0YXJ0cyB3aXRoIGRvY3VtZW50LlxuICAgKi9cbiAgZnVuY3Rpb24gbm9kZUFuZEFuY2VzdG9ycyhub2RlKSB7XG4gICAgdmFyIGFuY2VzdG9ycyA9IFtub2RlXTtcbiAgICB2YXIgcCA9IG5vZGU7XG4gICAgd2hpbGUgKHAgPSBwLnBhcmVudE5vZGUgfHwgcC5vd25lckVsZW1lbnQpIHtcbiAgICAgIGFuY2VzdG9ycy51bnNoaWZ0KHApO1xuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3JzO1xuICB9XG4gIGZ1bmN0aW9uIGNvbXBhcmVTaWJsaW5ncyhhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpIHJldHVybiAwO1xuICAgIHZhciBjID0gYTtcbiAgICB3aGlsZSAoYyA9IGMucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBpZiAoYyA9PT0gYilcbiAgICAgICAgcmV0dXJuIDE7ICAvLyBiIDwgYVxuICAgIH1cbiAgICBjID0gYjtcbiAgICB3aGlsZSAoYyA9IGMucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBpZiAoYyA9PT0gYSlcbiAgICAgICAgcmV0dXJuIC0xOyAgLy8gYSA8IGJcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhIGFuZCBiIGFyZSBub3Qgc2libGluZ3M6ICcgKyB4cGF0aC5zdHJpbmdpZnlPYmplY3QoYSkgKyAnIHZzICcgKyB4cGF0aC5zdHJpbmdpZnlPYmplY3QoYikpO1xuICB9XG4gIC8qKiBUaGUgbWVyZ2UgaW4gbWVyZ2Utc29ydC4qL1xuICBmdW5jdGlvbiBtZXJnZU5vZGVMaXN0cyh4LCB5KSB7XG4gICAgdmFyIGEsIGIsIGFhbmMsIGJhbmMsIHIgPSBbXTtcbiAgICBpZiAoJ29iamVjdCcgIT09IHR5cGVvZiB4KVxuICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQgTEhTIGZvciB8IG9wZXJhdG9yICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoZXhwZWN0ZWQgbm9kZS1zZXQpOiAnICsgeCk7XG4gICAgaWYgKCdvYmplY3QnICE9PSB0eXBlb2YgeSlcbiAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnZhbGlkIExIUyBmb3IgfCBvcGVyYXRvciAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGV4cGVjdGVkIG5vZGUtc2V0KTogJyArIHkpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobnVsbCA9PSBhKSB7XG4gICAgICAgIGEgPSB4LnNoaWZ0KCk7XG4gICAgICAgIGlmIChudWxsICE9IGEpXG4gICAgICAgICAgYWFuYyA9IGFkZHJlc3NWZWN0b3IoYSk7XG4gICAgICB9XG4gICAgICBpZiAobnVsbCA9PSBiKSB7XG4gICAgICAgIGIgPSB5LnNoaWZ0KCk7XG4gICAgICAgIGlmIChudWxsICE9IGIpXG4gICAgICAgICAgYmFuYyA9IGFkZHJlc3NWZWN0b3IoYik7XG4gICAgICB9XG4gICAgICBpZiAobnVsbCA9PSBhIHx8IG51bGwgPT0gYikgYnJlYWs7XG4gICAgICB2YXIgYyA9IGFkZHJlc3NDb21wYXJhdG9yKGFhbmMsIGJhbmMpO1xuICAgICAgaWYgKGMgPCAwKSB7XG4gICAgICAgIHIucHVzaChhKTtcbiAgICAgICAgYSA9IG51bGw7XG4gICAgICAgIGFhbmMgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChjID4gMCkge1xuICAgICAgICByLnB1c2goYik7XG4gICAgICAgIGIgPSBudWxsO1xuICAgICAgICBiYW5jID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoZ2V0Tm9kZU5hbWUoYSkgPCBnZXROb2RlTmFtZShiKSkgeyAgLy8gYXR0cmlidXRlc1xuICAgICAgICByLnB1c2goYSk7XG4gICAgICAgIGEgPSBudWxsO1xuICAgICAgICBhYW5jID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoZ2V0Tm9kZU5hbWUoYSkgPiBnZXROb2RlTmFtZShiKSkgeyAgLy8gYXR0cmlidXRlc1xuICAgICAgICByLnB1c2goYik7XG4gICAgICAgIGIgPSBudWxsO1xuICAgICAgICBiYW5jID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoYSAhPT0gYikge1xuICAgICAgICAvLyBjaG9vc2UgYiBhcmJpdHJhcmlseVxuICAgICAgICByLnB1c2goYik7XG4gICAgICAgIGIgPSBudWxsO1xuICAgICAgICBiYW5jID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGEgPT09IGIsIGMpO1xuICAgICAgICAvLyBqdXN0IHNraXAgYiB3aXRob3V0IHB1c2hpbmcgaXQuXG4gICAgICAgIGIgPSBudWxsO1xuICAgICAgICBiYW5jID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKGEpIHtcbiAgICAgIHIucHVzaChhKTtcbiAgICAgIGEgPSB4LnNoaWZ0KCk7XG4gICAgfVxuICAgIHdoaWxlIChiKSB7XG4gICAgICByLnB1c2goYik7XG4gICAgICBiID0geS5zaGlmdCgpO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICBmdW5jdGlvbiBjb21wYXJpc29uSGVscGVyKHRlc3QsIHgsIHksIGlzTnVtZXJpY0NvbXBhcmlzb24pIHtcbiAgICB2YXIgY29lcnNpb247XG4gICAgaWYgKGlzTnVtZXJpY0NvbXBhcmlzb24pXG4gICAgICBjb2Vyc2lvbiA9IGZuLm51bWJlcjtcbiAgICBlbHNlIGNvZXJzaW9uID1cbiAgICAgICdib29sZWFuJyA9PT0gdHlwZW9mIHggfHwgJ2Jvb2xlYW4nID09PSB0eXBlb2YgeSA/IGZuWydib29sZWFuJ10gOlxuICAgICAgJ251bWJlcicgPT09IHR5cGVvZiB4IHx8ICdudW1iZXInID09PSB0eXBlb2YgeSA/IGZuLm51bWJlciA6XG4gICAgICBmbi5zdHJpbmc7XG4gICAgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgeCAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHkpIHtcbiAgICAgIHZhciBhTWFwID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHhpID0gY29lcnNpb24oe25vZGVzOlt4Lm5vZGVzW2ldXX0pO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHkubm9kZXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICB2YXIgeWogPSBjb2Vyc2lvbih7bm9kZXM6W3kubm9kZXNbal1dfSk7XG4gICAgICAgICAgaWYgKHRlc3QoeGksIHlqKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgeCAmJiB4Lm5vZGVzICYmIHgubm9kZXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHhpID0gY29lcnNpb24oe25vZGVzOlt4Lm5vZGVzW2ldXX0pLCB5YyA9IGNvZXJzaW9uKHkpO1xuICAgICAgICBpZiAodGVzdCh4aSwgeWMpKVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB5ICYmIHgubm9kZXMgJiYgeC5ub2Rlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5ub2Rlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgeWkgPSBjb2Vyc2lvbih7bm9kZXM6W3kubm9kZXNbaV1dfSksIHhjID0gY29lcnNpb24oeCk7XG4gICAgICAgIGlmICh0ZXN0KHhjLCB5aSkpXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB4YyA9IGNvZXJzaW9uKHgpLCB5YyA9IGNvZXJzaW9uKHkpO1xuICAgICAgcmV0dXJuIHRlc3QoeGMsIHljKTtcbiAgICB9XG4gIH1cbiAgdmFyIGF4ZXMgPSB4cGF0aC5heGVzID0ge1xuICAgICdhbmNlc3Rvcic6XG4gICAgICBmdW5jdGlvbiBhbmNlc3Rvcihub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpIHtcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySGVscGVyKFxuICAgICAgICAgIG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSwgZmFsc2UpO1xuICAgICAgfSxcbiAgICAnYW5jZXN0b3Itb3Itc2VsZic6XG4gICAgICBmdW5jdGlvbiBhbmNlc3Rvck9yU2VsZihub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpIHtcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySGVscGVyKFxuICAgICAgICAgIG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSwgdHJ1ZSk7XG4gICAgICB9LFxuICAgICdhdHRyaWJ1dGUnOlxuICAgICAgZnVuY3Rpb24gYXR0cmlidXRlKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSkge1xuICAgICAgICAvLyBUT0RPOiBmaWd1cmUgb3V0IHdoZXRoZXIgcG9zaXRpb25zIHNob3VsZCBiZSB1bmRlZmluZWQgaGVyZS5cbiAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgTm9kZU1hdGNoZXIobm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpO1xuICAgICAgICB2YXIgbm9kZU11bHRpU2V0ID0gbmV3IE5vZGVNdWx0aVNldChmYWxzZSk7XG4gICAgICAgIGlmIChudWxsICE9IG5vZGVOYW1lKSB7XG4gICAgICAgICAgLy8gVE9ETzogd2l0aCBuYW1lc3BhY2VcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKG51bGwgPT0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKVxuICAgICAgICAgICAgICBjb250aW51ZTsgIC8vIG9ubHkgRWxlbWVudCBoYXMgLmdldEF0dHJpYnV0ZU5vZGVcbiAgICAgICAgICAgIHZhciBhdHRyID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKG5vZGVOYW1lKTtcbiAgICAgICAgICAgIGlmIChudWxsICE9IGF0dHIgJiYgbWF0Y2hlci5tYXRjaGVzKGF0dHIpKSB7XG4gICAgICAgICAgICAgIG5vZGVNdWx0aVNldC5wdXNoU2VyaWVzKCk7XG4gICAgICAgICAgICAgIG5vZGVNdWx0aVNldC5hZGROb2RlKGF0dHIpO1xuICAgICAgICAgICAgICBub2RlTXVsdGlTZXQucG9wU2VyaWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gbm9kZUxpc3RbaV07XG4gICAgICAgICAgICBpZiAobnVsbCAhPSBub2RlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgbm9kZU11bHRpU2V0LnB1c2hTZXJpZXMoKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBqKyspIHsgIC8vIGFsbCBub2RlcyBoYXZlIC5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBub2RlLmF0dHJpYnV0ZXNbal07XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXIubWF0Y2hlcyhhdHRyKSkgIC8vIFRPRE86IEkgdGhpbmsgdGhpcyBjaGVjayBpcyB1bm5lY2Vzc2FyeVxuICAgICAgICAgICAgICAgICAgbm9kZU11bHRpU2V0LmFkZE5vZGUoYXR0cik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbm9kZU11bHRpU2V0LnBvcFNlcmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZU11bHRpU2V0LmZpbmFsaXplKCk7XG4gICAgICB9LFxuICAgICdjaGlsZCc6XG4gICAgICBmdW5jdGlvbiBjaGlsZChub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpIHtcbiAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgTm9kZU1hdGNoZXIobm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpO1xuICAgICAgICB2YXIgbm9kZU11bHRpU2V0ID0gbmV3IE5vZGVNdWx0aVNldChmYWxzZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICB2YXIgbiA9IG5vZGVMaXN0W2ldO1xuICAgICAgICAgIGlmIChuLm93bmVyRWxlbWVudCkgIC8vIHNraXAgYXR0cmlidXRlIG5vZGVzJyB0ZXh0IGNoaWxkLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgaWYgKG4uY2hpbGROb2Rlcykge1xuICAgICAgICAgICAgbm9kZU11bHRpU2V0LnB1c2hTZXJpZXMoKTtcbiAgICAgICAgICAgIHZhciBjaGlsZExpc3QgPSAxID09PSBub2RlVHlwZU51bSAmJiBudWxsICE9IG4uY2hpbGRyZW4gP1xuICAgICAgICAgICAgICAgIG4uY2hpbGRyZW4gOiBuLmNoaWxkTm9kZXM7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkTGlzdC5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZExpc3Rbal07XG4gICAgICAgICAgICAgIGlmIChtYXRjaGVyLm1hdGNoZXMoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgbm9kZU11bHRpU2V0LmFkZE5vZGUoY2hpbGQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGRvbid0IGhhdmUgdG8gZG8gZGUtZHVwaW5nIGJlY2F1c2UgY2hpbGRyZW4gaGF2ZSBwYXJlbnQsXG4gICAgICAgICAgICAgIC8vIHdoaWNoIGFyZSBjdXJyZW50IGNvbnRleHQuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlTXVsdGlTZXQucG9wU2VyaWVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGVNdWx0aVNldC5maW5hbGl6ZSgpO1xuICAgICAgICByZXR1cm4gc29ydE5vZGVNdWx0aVNldChub2RlTXVsdGlTZXQpO1xuICAgICAgfSxcbiAgICAnZGVzY2VuZGFudCc6XG4gICAgICBmdW5jdGlvbiBkZXNjZW5hbnQobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgICAgIHJldHVybiBkZXNjZW5hbnRIZWxwZXIoXG4gICAgICAgICAgbm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlLCBmYWxzZSk7XG4gICAgICB9LFxuICAgICdkZXNjZW5kYW50LW9yLXNlbGYnOlxuICAgICAgZnVuY3Rpb24gZGVzY2VuYW50T3JTZWxmKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSkge1xuICAgICAgICByZXR1cm4gZGVzY2VuYW50SGVscGVyKFxuICAgICAgICAgIG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSwgdHJ1ZSk7XG4gICAgICB9LFxuICAgICdmb2xsb3dpbmcnOlxuICAgICAgZnVuY3Rpb24gZm9sbG93aW5nKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSkge1xuICAgICAgICByZXR1cm4gZm9sbG93aW5nSGVscGVyKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSk7XG4gICAgICB9LFxuICAgICdmb2xsb3dpbmctc2libGluZyc6XG4gICAgICBmdW5jdGlvbiBmb2xsb3dpbmdTaWJsaW5nKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSkge1xuICAgICAgICByZXR1cm4gZm9sbG93aW5nU2libGluZ0hlbHBlcihcbiAgICAgICAgICBub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UsXG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNoaWZ0LCBmdW5jdGlvbigpIHtyZXR1cm4gdGhpc1swXTt9LFxuICAgICAgICAgIGZ1bmN0aW9uKG5vZGUpIHtyZXR1cm4gbm9kZS5uZXh0U2libGluZzt9KTtcbiAgICAgIH0sXG4gICAgJ25hbWVzcGFjZSc6XG4gICAgICBmdW5jdGlvbiBuYW1lc3BhY2Uobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgIH0sXG4gICAgJ3BhcmVudCc6XG4gICAgICBmdW5jdGlvbiBwYXJlbnQobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgICAgIHZhciBtYXRjaGVyID0gbmV3IE5vZGVNYXRjaGVyKG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKTtcbiAgICAgICAgdmFyIG5vZGVzID0gW10sIHBvcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgdmFyIHBhcmVudCA9IG5vZGVMaXN0W2ldLnBhcmVudE5vZGUgfHwgbm9kZUxpc3RbaV0ub3duZXJFbGVtZW50O1xuICAgICAgICAgIGlmIChudWxsID09IHBhcmVudClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIGlmICghbWF0Y2hlci5tYXRjaGVzKHBhcmVudCkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBpZiAobm9kZXMubGVuZ3RoID4gMCAmJiBwYXJlbnQgPT09IG5vZGVzW25vZGVzLmxlbmd0aC0xXSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIG5vZGVzLnB1c2gocGFyZW50KTtcbiAgICAgICAgICBwb3MucHVzaChbMV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7bm9kZXM6bm9kZXMsIHBvczpwb3MsIGxhc3RzOnBvc307XG4gICAgICB9LFxuICAgICdwcmVjZWRpbmcnOlxuICAgICAgZnVuY3Rpb24gcHJlY2VkaW5nKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSkge1xuICAgICAgICByZXR1cm4gcHJlY2VkaW5nSGVscGVyKFxuICAgICAgICAgIG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSk7XG4gICAgICB9LFxuICAgICdwcmVjZWRpbmctc2libGluZyc6XG4gICAgICBmdW5jdGlvbiBwcmVjZWRpbmdTaWJsaW5nKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSkge1xuICAgICAgICByZXR1cm4gZm9sbG93aW5nU2libGluZ0hlbHBlcihcbiAgICAgICAgICBub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UsXG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnBvcCwgZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXNbdGhpcy5sZW5ndGgtMV07fSxcbiAgICAgICAgICBmdW5jdGlvbihub2RlKSB7cmV0dXJuIG5vZGUucHJldmlvdXNTaWJsaW5nfSxcbiAgICAgICAgICBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9LFxuICAgICdzZWxmJzpcbiAgICAgIGZ1bmN0aW9uIHNlbGYobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgICAgIHZhciBub2RlcyA9IFtdLCBwb3MgPSBbXTtcbiAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgTm9kZU1hdGNoZXIobm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXIubWF0Y2hlcyhub2RlTGlzdFtpXSkpIHtcbiAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZUxpc3RbaV0pO1xuICAgICAgICAgICAgcG9zLnB1c2goWzFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtub2Rlczogbm9kZXMsIHBvczogcG9zLCBsYXN0czogcG9zfVxuICAgICAgfVxuICB9O1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGlvbjogZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICB2YXIgZm4gPSB7XG4gICAgJ251bWJlcic6IGZ1bmN0aW9uIG51bWJlcihvcHRPYmplY3QpIHtcbiAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIG9wdE9iamVjdClcbiAgICAgICAgcmV0dXJuIG9wdE9iamVjdDtcbiAgICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIG9wdE9iamVjdClcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQob3B0T2JqZWN0KTsgIC8vIG5vdGU6IHBhcnNlRmxvYXQoJyAnKSAtPiBOYU4sIHVubGlrZSArJyAnIC0+IDAuXG4gICAgICBpZiAoJ2Jvb2xlYW4nID09PSB0eXBlb2Ygb3B0T2JqZWN0KVxuICAgICAgICByZXR1cm4gK29wdE9iamVjdDtcbiAgICAgIHJldHVybiBmbi5udW1iZXIoZm4uc3RyaW5nLmNhbGwodGhpcywgb3B0T2JqZWN0KSk7ICAvLyBmb3Igbm9kZS1zZXRzXG4gICAgfSxcbiAgICAnc3RyaW5nJzogZnVuY3Rpb24gc3RyaW5nKG9wdE9iamVjdCkge1xuICAgICAgaWYgKG51bGwgPT0gb3B0T2JqZWN0KVxuICAgICAgICByZXR1cm4gZm4uc3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2Ygb3B0T2JqZWN0IHx8ICdib29sZWFuJyA9PT0gdHlwZW9mIG9wdE9iamVjdCB8fFxuICAgICAgICAgICdudW1iZXInID09PSB0eXBlb2Ygb3B0T2JqZWN0KVxuICAgICAgICByZXR1cm4gJycgKyBvcHRPYmplY3Q7XG4gICAgICBpZiAoMCA9PSBvcHRPYmplY3Qubm9kZXMubGVuZ3RoKSByZXR1cm4gJyc7XG4gICAgICBpZiAobnVsbCAhPSBvcHRPYmplY3Qubm9kZXNbMF0udGV4dENvbnRlbnQpXG4gICAgICAgIHJldHVybiBvcHRPYmplY3Qubm9kZXNbMF0udGV4dENvbnRlbnQ7XG4gICAgICByZXR1cm4gb3B0T2JqZWN0Lm5vZGVzWzBdLm5vZGVWYWx1ZTtcbiAgICB9LFxuICAgICdib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhblZhbCh4KSB7XG4gICAgICByZXR1cm4gJ29iamVjdCcgPT09IHR5cGVvZiB4ID8geC5ub2Rlcy5sZW5ndGggPiAwIDogISF4O1xuICAgIH0sXG4gICAgJ2xhc3QnOiBmdW5jdGlvbiBsYXN0KCkge1xuICAgICAgY29uc29sZS5hc3NlcnQoQXJyYXkuaXNBcnJheSh0aGlzLnBvcykpO1xuICAgICAgY29uc29sZS5hc3NlcnQoQXJyYXkuaXNBcnJheSh0aGlzLmxhc3RzKSk7XG4gICAgICBjb25zb2xlLmFzc2VydCgxID09PSB0aGlzLnBvcy5sZW5ndGgpO1xuICAgICAgY29uc29sZS5hc3NlcnQoMSA9PT0gdGhpcy5sYXN0cy5sZW5ndGgpO1xuICAgICAgY29uc29sZS5hc3NlcnQoMSA9PT0gdGhpcy5sYXN0c1swXS5sZW5ndGgpO1xuICAgICAgcmV0dXJuIHRoaXMubGFzdHNbMF1bMF07XG4gICAgfSxcbiAgICAncG9zaXRpb24nOiBmdW5jdGlvbiBwb3NpdGlvbigpIHtcbiAgICAgIGNvbnNvbGUuYXNzZXJ0KEFycmF5LmlzQXJyYXkodGhpcy5wb3MpKTtcbiAgICAgIGNvbnNvbGUuYXNzZXJ0KEFycmF5LmlzQXJyYXkodGhpcy5sYXN0cykpO1xuICAgICAgY29uc29sZS5hc3NlcnQoMSA9PT0gdGhpcy5wb3MubGVuZ3RoKTtcbiAgICAgIGNvbnNvbGUuYXNzZXJ0KDEgPT09IHRoaXMubGFzdHMubGVuZ3RoKTtcbiAgICAgIGNvbnNvbGUuYXNzZXJ0KDEgPT09IHRoaXMucG9zWzBdLmxlbmd0aCk7XG4gICAgICByZXR1cm4gdGhpcy5wb3NbMF1bMF07XG4gICAgfSxcbiAgICAnY291bnQnOiBmdW5jdGlvbiBjb3VudChub2RlU2V0KSB7XG4gICAgICBpZiAoJ29iamVjdCcgIT09IHR5cGVvZiBub2RlU2V0KVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQb3NpdGlvbiAnICsgc3RyZWFtLnBvc2l0aW9uKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogRnVuY3Rpb24gY291bnQobm9kZS1zZXQpICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dvdCB3cm9uZyBhcmd1bWVudCB0eXBlOiAnICsgbm9kZVNldCk7XG4gICAgICByZXR1cm4gbm9kZVNldC5ub2Rlcy5sZW5ndGg7XG4gICAgfSxcbiAgICAnaWQnOiBmdW5jdGlvbiBpZChvYmplY3QpIHtcbiAgICAgIHZhciByID0ge25vZGVzOiBbXX07XG4gICAgICB2YXIgZG9jID0gdGhpcy5ub2Rlc1swXS5vd25lckRvY3VtZW50IHx8IHRoaXMubm9kZXNbMF07XG4gICAgICBjb25zb2xlLmFzc2VydChkb2MpO1xuICAgICAgdmFyIGlkcztcbiAgICAgIGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIG9iamVjdCkge1xuICAgICAgICAvLyBmb3Igbm9kZS1zZXRzLCBtYXAgaWQgb3ZlciBlYWNoIG5vZGUgdmFsdWUuXG4gICAgICAgIGlkcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5ub2Rlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHZhciBpZE5vZGUgPSBvYmplY3Qubm9kZXNbaV07XG4gICAgICAgICAgdmFyIGlkc1N0cmluZyA9IGZuLnN0cmluZyh7bm9kZXM6W2lkTm9kZV19KTtcbiAgICAgICAgICB2YXIgYSA9IGlkc1N0cmluZy5zcGxpdCgvWyBcXHRcXHJcXG5dKy9nKTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShpZHMsIGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaWRzU3RyaW5nID0gZm4uc3RyaW5nKG9iamVjdCk7XG4gICAgICAgIHZhciBhID0gaWRzU3RyaW5nLnNwbGl0KC9bIFxcdFxcclxcbl0rL2cpO1xuICAgICAgICBpZHMgPSBhO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGlkID0gaWRzW2ldO1xuICAgICAgICBpZiAoMCA9PT0gaWQubGVuZ3RoKVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB2YXIgbm9kZSA9IGRvYy5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgIGlmIChudWxsICE9IG5vZGUpXG4gICAgICAgICAgci5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgICAgci5ub2RlcyA9IHNvcnRVbmlxRG9jdW1lbnRPcmRlcihyLm5vZGVzKTtcbiAgICAgIHJldHVybiByO1xuICAgIH0sXG4gICAgJ2xvY2FsLW5hbWUnOiBmdW5jdGlvbihub2RlU2V0KSB7XG4gICAgICBpZiAobnVsbCA9PSBub2RlU2V0KVxuICAgICAgICByZXR1cm4gZm4ubmFtZSh0aGlzKTtcbiAgICAgIGlmIChudWxsID09IG5vZGVTZXQubm9kZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJndW1lbnQgdG8gbmFtZSgpIG11c3QgYmUgYSBub2RlLXNldC4gZ290ICcgKyBub2RlU2V0KTtcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IG5hbWVzcGFjZWQgdmVyc2lvblxuICAgICAgcmV0dXJuIG5vZGVTZXQubm9kZXNbMF0ubG9jYWxOYW1lO1xuICAgIH0sXG4gICAgJ25hbWVzcGFjZS11cmknOiBmdW5jdGlvbihub2RlU2V0KSB7XG4gICAgICAvLyBUT0RPXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICB9LFxuICAgICduYW1lJzogZnVuY3Rpb24obm9kZVNldCkge1xuICAgICAgaWYgKG51bGwgPT0gbm9kZVNldClcbiAgICAgICAgcmV0dXJuIGZuLm5hbWUodGhpcyk7XG4gICAgICBpZiAobnVsbCA9PSBub2RlU2V0Lm5vZGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyZ3VtZW50IHRvIG5hbWUoKSBtdXN0IGJlIGEgbm9kZS1zZXQuIGdvdCAnICsgbm9kZVNldCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZVNldC5ub2Rlc1swXS5uYW1lO1xuICAgIH0sXG4gICAgJ2NvbmNhdCc6IGZ1bmN0aW9uIGNvbmNhdCh4KSB7XG4gICAgICB2YXIgbCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgbC5wdXNoKGZuLnN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsLmpvaW4oJycpO1xuICAgIH0sXG4gICAgJ3N0YXJ0cy13aXRoJzogZnVuY3Rpb24gc3RhcnRzV2l0aChhLCBiKSB7XG4gICAgICB2YXIgYXMgPSBmbi5zdHJpbmcoYSksIGJzID0gZm4uc3RyaW5nKGIpO1xuICAgICAgcmV0dXJuIGFzLnN1YnN0cigwLCBicy5sZW5ndGgpID09PSBicztcbiAgICB9LFxuICAgICdjb250YWlucyc6IGZ1bmN0aW9uIGNvbnRhaW5zKGEsIGIpIHtcbiAgICAgIHZhciBhcyA9IGZuLnN0cmluZyhhKSwgYnMgPSBmbi5zdHJpbmcoYik7XG4gICAgICB2YXIgaSA9IGFzLmluZGV4T2YoYnMpO1xuICAgICAgaWYgKC0xID09PSBpKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgICdzdWJzdHJpbmctYmVmb3JlJzogZnVuY3Rpb24gc3Vic3RyaW5nQmVmb3JlKGEsIGIpIHtcbiAgICAgIHZhciBhcyA9IGZuLnN0cmluZyhhKSwgYnMgPSBmbi5zdHJpbmcoYik7XG4gICAgICB2YXIgaSA9IGFzLmluZGV4T2YoYnMpO1xuICAgICAgaWYgKC0xID09PSBpKSByZXR1cm4gJyc7XG4gICAgICByZXR1cm4gYXMuc3Vic3RyKDAsIGkpO1xuICAgIH0sXG4gICAgJ3N1YnN0cmluZy1hZnRlcic6IGZ1bmN0aW9uIHN1YnN0cmluZ0JlZm9yZShhLCBiKSB7XG4gICAgICB2YXIgYXMgPSBmbi5zdHJpbmcoYSksIGJzID0gZm4uc3RyaW5nKGIpO1xuICAgICAgdmFyIGkgPSBhcy5pbmRleE9mKGJzKTtcbiAgICAgIGlmICgtMSA9PT0gaSkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuIGFzLnN1YnN0cihpICsgYnMubGVuZ3RoKTtcbiAgICB9LFxuICAgICdzdWJzdHJpbmcnOiBmdW5jdGlvbiBzdWJzdHJpbmcoc3RyaW5nLCBzdGFydCwgb3B0RW5kKSB7XG4gICAgICBpZiAobnVsbCA9PSBzdHJpbmcgfHwgbnVsbCA9PSBzdGFydCkge1xuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdXN0IGJlIGF0IGxlYXN0IDIgYXJndW1lbnRzIHRvIHN0cmluZygpJyk7XG4gICAgICB9XG4gICAgICB2YXIgc1N0cmluZyA9IGZuLnN0cmluZyhzdHJpbmcpLFxuICAgICAgICAgIGlTdGFydCA9IGZuLnJvdW5kKHN0YXJ0KSxcbiAgICAgICAgICBpRW5kID0gb3B0RW5kID09IG51bGwgPyBudWxsIDogZm4ucm91bmQob3B0RW5kKTtcbiAgICAgIC8vIE5vdGUgdGhhdCB4cGF0aCBzdHJpbmcgcG9zaXRpb25zIHVzZXIgMS1iYXNlZCBpbmRleFxuICAgICAgaWYgKGlFbmQgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHNTdHJpbmcuc3Vic3RyKGlTdGFydCAtIDEpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gc1N0cmluZy5zdWJzdHIoaVN0YXJ0IC0gMSwgaUVuZCk7XG4gICAgfSxcbiAgICAnc3RyaW5nLWxlbmd0aCc6IGZ1bmN0aW9uIHN0cmluZ0xlbmd0aChvcHRTdHJpbmcpIHtcbiAgICAgIHJldHVybiBmbi5zdHJpbmcuY2FsbCh0aGlzLCBvcHRTdHJpbmcpLmxlbmd0aDtcbiAgICB9LFxuICAgICdub3JtYWxpemUtc3BhY2UnOiBmdW5jdGlvbiBub3JtYWxpemVTcGFjZShvcHRTdHJpbmcpIHtcbiAgICAgIHZhciBzID0gZm4uc3RyaW5nLmNhbGwodGhpcywgb3B0U3RyaW5nKTtcbiAgICAgIHJldHVybiBzLnJlcGxhY2UoL1sgXFx0XFxyXFxuXSsvZywgJyAnKS5yZXBsYWNlKC9eIHwgJC9nLCAnJyk7XG4gICAgfSxcbiAgICAndHJhbnNsYXRlJzogZnVuY3Rpb24gdHJhbnNsYXRlKHN0cmluZywgZnJvbSwgdG8pIHtcbiAgICAgIHZhciBzU3RyaW5nID0gZm4uc3RyaW5nLmNhbGwodGhpcywgc3RyaW5nKSxcbiAgICAgICAgICBzRnJvbSA9IGZuLnN0cmluZyhmcm9tKSxcbiAgICAgICAgICBzVG8gPSBmbi5zdHJpbmcodG8pO1xuICAgICAgdmFyIGVhY2hDaGFyUmUgPSBbXTtcbiAgICAgIHZhciBtYXAgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc0Zyb20ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBzRnJvbS5jaGFyQXQoaSk7XG4gICAgICAgIG1hcFtjXSA9IHNUby5jaGFyQXQoaSk7ICAvLyByZXR1cm5zICcnIGlmIGJleW9uZCBsZW5ndGggb2Ygc1RvLlxuICAgICAgICAvLyBjb3BpZWQgZnJvbSBnb29nLnN0cmluZy5yZWdFeHBFc2NhcGUgaW4gdGhlIENsb3N1cmUgbGlicmFyeS5cbiAgICAgICAgZWFjaENoYXJSZS5wdXNoKFxuICAgICAgICAgIGMucmVwbGFjZSgvKFstKClcXFtcXF17fSs/Ki4kXFxefCw6IzwhXFxcXF0pL2csICdcXFxcJDEnKS5cbiAgICAgICAgICAgIHJlcGxhY2UoL1xceDA4L2csICdcXFxceDA4JykpO1xuICAgICAgfVxuICAgICAgdmFyIHJlID0gbmV3IFJlZ0V4cChlYWNoQ2hhclJlLmpvaW4oJ3wnKSwgJ2cnKTtcbiAgICAgIHJldHVybiBzU3RyaW5nLnJlcGxhY2UocmUsIGZ1bmN0aW9uKGMpIHtyZXR1cm4gbWFwW2NdO30pO1xuICAgIH0sXG4gICAgLy8vIEJvb2xlYW4gZnVuY3Rpb25zXG4gICAgJ25vdCc6IGZ1bmN0aW9uIG5vdCh4KSB7XG4gICAgICB2YXIgYnggPSBmblsnYm9vbGVhbiddKHgpO1xuICAgICAgcmV0dXJuICFieDtcbiAgICB9LFxuICAgICd0cnVlJzogZnVuY3Rpb24gdHJ1ZVZhbCgpIHsgcmV0dXJuIHRydWU7IH0sXG4gICAgJ2ZhbHNlJzogZnVuY3Rpb24gZmFsc2VWYWwoKSB7IHJldHVybiBmYWxzZTsgfSxcbiAgICAvLyBUT0RPXG4gICAgJ2xhbmcnOiBmdW5jdGlvbiBsYW5nKHN0cmluZykgeyB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sXG4gICAgJ3N1bSc6IGZ1bmN0aW9uIHN1bShvcHROb2RlU2V0KSB7XG4gICAgICBpZiAobnVsbCA9PSBvcHROb2RlU2V0KSByZXR1cm4gZm4uc3VtKHRoaXMpO1xuICAgICAgLy8gZm9yIG5vZGUtc2V0cywgbWFwIGlkIG92ZXIgZWFjaCBub2RlIHZhbHVlLlxuICAgICAgdmFyIHN1bSA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdE5vZGVTZXQubm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBvcHROb2RlU2V0Lm5vZGVzW2ldO1xuICAgICAgICB2YXIgeCA9IGZuLm51bWJlcih7bm9kZXM6W25vZGVdfSk7XG4gICAgICAgIHN1bSArPSB4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9LFxuICAgICdmbG9vcic6IGZ1bmN0aW9uIGZsb29yKG51bWJlcikge1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZm4ubnVtYmVyKG51bWJlcikpO1xuICAgIH0sXG4gICAgJ2NlaWxpbmcnOiBmdW5jdGlvbiBjZWlsaW5nKG51bWJlcikge1xuICAgICAgcmV0dXJuIE1hdGguY2VpbChmbi5udW1iZXIobnVtYmVyKSk7XG4gICAgfSxcbiAgICAncm91bmQnOiBmdW5jdGlvbiByb3VuZChudW1iZXIpIHtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKGZuLm51bWJlcihudW1iZXIpKTtcbiAgICB9XG4gIH07XG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGlvbjogb3BlcmF0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICB2YXIgbW9yZSA9IHtcbiAgICBVbmFyeU1pbnVzOiBmdW5jdGlvbih4KSB7IHJldHVybiAtZm4ubnVtYmVyKHgpOyB9LFxuICAgICcrJzogZnVuY3Rpb24oeCwgeSkgeyByZXR1cm4gZm4ubnVtYmVyKHgpICsgZm4ubnVtYmVyKHkpOyB9LFxuICAgICctJzogZnVuY3Rpb24oeCwgeSkgeyByZXR1cm4gZm4ubnVtYmVyKHgpIC0gZm4ubnVtYmVyKHkpOyB9LFxuICAgICcqJzogZnVuY3Rpb24oeCwgeSkgeyByZXR1cm4gZm4ubnVtYmVyKHgpICogZm4ubnVtYmVyKHkpOyB9LFxuICAgICdkaXYnOiBmdW5jdGlvbih4LCB5KSB7IHJldHVybiBmbi5udW1iZXIoeCkgLyBmbi5udW1iZXIoeSk7IH0sXG4gICAgJ21vZCc6IGZ1bmN0aW9uKHgsIHkpIHsgcmV0dXJuIGZuLm51bWJlcih4KSAlIGZuLm51bWJlcih5KTsgfSxcbiAgICAnPCc6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiBjb21wYXJpc29uSGVscGVyKGZ1bmN0aW9uKHgsIHkpIHsgcmV0dXJuIGZuLm51bWJlcih4KSA8IGZuLm51bWJlcih5KTt9LCB4LCB5LCB0cnVlKTtcbiAgICB9LFxuICAgICc8PSc6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiBjb21wYXJpc29uSGVscGVyKGZ1bmN0aW9uKHgsIHkpIHsgcmV0dXJuIGZuLm51bWJlcih4KSA8PSBmbi5udW1iZXIoeSk7fSwgeCwgeSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnPic6ICBmdW5jdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4gY29tcGFyaXNvbkhlbHBlcihmdW5jdGlvbih4LCB5KSB7IHJldHVybiBmbi5udW1iZXIoeCkgPiBmbi5udW1iZXIoeSk7fSwgeCwgeSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnPj0nOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4gY29tcGFyaXNvbkhlbHBlcihmdW5jdGlvbih4LCB5KSB7IHJldHVybiBmbi5udW1iZXIoeCkgPj0gZm4ubnVtYmVyKHkpO30sIHgsIHksIHRydWUpO1xuICAgIH0sXG4gICAgJ2FuZCc6IGZ1bmN0aW9uKHgsIHkpIHsgcmV0dXJuIGZuWydib29sZWFuJ10oeCkgJiYgZm5bJ2Jvb2xlYW4nXSh5KTsgfSxcbiAgICAnb3InOiBmdW5jdGlvbih4LCB5KSB7IHJldHVybiBmblsnYm9vbGVhbiddKHgpIHx8IGZuWydib29sZWFuJ10oeSk7IH0sXG4gICAgJ3wnOiBmdW5jdGlvbih4LCB5KSB7IHJldHVybiB7bm9kZXM6IG1lcmdlTm9kZUxpc3RzKHgubm9kZXMsIHkubm9kZXMpfTsgfSxcbiAgICAnPSc6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIC8vIG9wdGltaXphdGlvbiBmb3IgdHdvIG5vZGUtc2V0cyBjYXNlOiBhdm9pZCBuXjIgY29tcGFyaXNvbnMuXG4gICAgICBpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB4ICYmICdvYmplY3QnID09PSB0eXBlb2YgeSkge1xuICAgICAgICB2YXIgYU1hcCA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICB2YXIgcyA9IGZuLnN0cmluZyh7bm9kZXM6W3gubm9kZXNbaV1dfSk7XG4gICAgICAgICAgYU1hcFtzXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB5Lm5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgdmFyIHMgPSBmbi5zdHJpbmcoe25vZGVzOlt5Lm5vZGVzW2ldXX0pO1xuICAgICAgICAgIGlmIChhTWFwW3NdKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29tcGFyaXNvbkhlbHBlcihmdW5jdGlvbih4LCB5KSB7cmV0dXJuIHggPT09IHk7fSwgeCwgeSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnIT0nOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgICAvLyBvcHRpbWl6YXRpb24gZm9yIHR3byBub2RlLXNldHMgY2FzZTogYXZvaWQgbl4yIGNvbXBhcmlzb25zLlxuICAgICAgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgeCAmJiAnb2JqZWN0JyA9PT0gdHlwZW9mIHkpIHtcbiAgICAgICAgaWYgKDAgPT09IHgubm9kZXMubGVuZ3RoIHx8IDAgPT09IHkubm9kZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBhTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5ub2Rlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHZhciBzID0gZm4uc3RyaW5nKHtub2RlczpbeC5ub2Rlc1tpXV19KTtcbiAgICAgICAgICBhTWFwW3NdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHkubm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICB2YXIgcyA9IGZuLnN0cmluZyh7bm9kZXM6W3kubm9kZXNbaV1dfSk7XG4gICAgICAgICAgaWYgKCFhTWFwW3NdKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29tcGFyaXNvbkhlbHBlcihmdW5jdGlvbih4LCB5KSB7cmV0dXJuIHggIT09IHk7fSwgeCwgeSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgbm9kZVR5cGVzID0geHBhdGgubm9kZVR5cGVzID0ge1xuICAgICdub2RlJzogMCxcbiAgICAnYXR0cmlidXRlJzogMixcbiAgICAnY29tbWVudCc6IDgsIC8vIHRoaXMuZG9jLkNPTU1FTlRfTk9ERSxcbiAgICAndGV4dCc6IDMsIC8vIHRoaXMuZG9jLlRFWFRfTk9ERSxcbiAgICAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbic6IDcsIC8vIHRoaXMuZG9jLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSxcbiAgICAnZWxlbWVudCc6IDEgIC8vdGhpcy5kb2MuRUxFTUVOVF9OT0RFXG4gIH07XG4gIC8qKiBGb3IgZGVidWdnaW5nIGFuZCB1bml0IHRlc3RzOiByZXR1cm5qcyBhIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlXG4gICAqIGFyZ3VtZW50LiAqL1xuICB2YXIgc3RyaW5naWZ5T2JqZWN0ID0geHBhdGguc3RyaW5naWZ5T2JqZWN0ID0gZnVuY3Rpb24gc3RyaW5naWZ5T2JqZWN0KGN0eCkge1xuICAgIHZhciBzZWVuS2V5ID0gJ3NlZW4nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjEwMDAwMDAwMDApO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShoZWxwZXIoY3R4KSk7XG5cbiAgICBmdW5jdGlvbiBoZWxwZXIoY3R4KSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdHgpKSB7XG4gICAgICAgIHJldHVybiBjdHgubWFwKGZ1bmN0aW9uKHgpIHtyZXR1cm4gaGVscGVyKHgpO30pO1xuICAgICAgfVxuICAgICAgaWYgKCdvYmplY3QnICE9PSB0eXBlb2YgY3R4KSByZXR1cm4gY3R4O1xuICAgICAgaWYgKG51bGwgPT0gY3R4KSByZXR1cm4gY3R4O1xuICAgIC8vICBpZiAoY3R4LnRvU3RyaW5nKSByZXR1cm4gY3R4LnRvU3RyaW5nKCk7XG4gICAgICBpZiAobnVsbCAhPSBjdHgub3V0ZXJIVE1MKSByZXR1cm4gY3R4Lm91dGVySFRNTDtcbiAgICAgIGlmIChudWxsICE9IGN0eC5ub2RlVmFsdWUpIHJldHVybiBjdHgubm9kZU5hbWUgKyAnPScgKyBjdHgubm9kZVZhbHVlO1xuICAgICAgaWYgKGN0eFtzZWVuS2V5XSkgcmV0dXJuICdbY2lyY3VsYXJdJztcbiAgICAgIGN0eFtzZWVuS2V5XSA9IHRydWU7XG4gICAgICB2YXIgbmljZXIgPSB7fTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBjdHgpIHtcbiAgICAgICAgaWYgKHNlZW5LZXkgPT09IGtleSlcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuaWNlcltrZXldID0gaGVscGVyKGN0eFtrZXldKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIG5pY2VyW2tleV0gPSAnW2V4Y2VwdGlvbjogJyArIGUubWVzc2FnZSArICddJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVsZXRlIGN0eFtzZWVuS2V5XTtcbiAgICAgIHJldHVybiBuaWNlcjtcbiAgICB9XG4gIH1cbiAgdmFyIEV2YWx1YXRvciA9IHhwYXRoLkV2YWx1YXRvciA9IGZ1bmN0aW9uIEV2YWx1YXRvcihkb2MpIHtcbiAgICB0aGlzLmRvYyA9IGRvYztcbiAgfVxuICBFdmFsdWF0b3IucHJvdG90eXBlID0ge1xuICAgIHZhbDogZnVuY3Rpb24gdmFsKGFzdCwgY3R4KSB7XG4gICAgICBjb25zb2xlLmFzc2VydChjdHgubm9kZXMpO1xuXG4gICAgICBpZiAoJ251bWJlcicgPT09IHR5cGVvZiBhc3QgfHwgJ3N0cmluZycgPT09IHR5cGVvZiBhc3QpIHJldHVybiBhc3Q7XG4gICAgICBpZiAobW9yZVthc3RbMF1dKSB7XG4gICAgICAgIHZhciBldmFsdWF0ZWRQYXJhbXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBldmFsdWF0ZWRQYXJhbXMucHVzaCh0aGlzLnZhbChhc3RbaV0sIGN0eCkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByID0gbW9yZVthc3RbMF1dLmFwcGx5KGN0eCwgZXZhbHVhdGVkUGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGFzdFswXSkge1xuICAgICAgICBjYXNlICdSb290JzogcmV0dXJuIHtub2RlczogW3RoaXMuZG9jXX07XG4gICAgICAgIGNhc2UgJ0Z1bmN0aW9uQ2FsbCc6XG4gICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGFzdFsxXSwgZnVuY3Rpb25QYXJhbXMgPSBhc3RbMl07XG4gICAgICAgICAgaWYgKG51bGwgPT0gZm5bZnVuY3Rpb25OYW1lXSlcbiAgICAgICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmtub3duIGZ1bmN0aW9uOiAnICsgZnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICB2YXIgZXZhbHVhdGVkUGFyYW1zID0gW107XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jdGlvblBhcmFtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgZXZhbHVhdGVkUGFyYW1zLnB1c2godGhpcy52YWwoZnVuY3Rpb25QYXJhbXNbaV0sIGN0eCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgciA9IGZuW2Z1bmN0aW9uTmFtZV0uYXBwbHkoY3R4LCBldmFsdWF0ZWRQYXJhbXMpO1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICBjYXNlICdQcmVkaWNhdGUnOlxuICAgICAgICAgIHZhciBsaHMgPSB0aGlzLnZhbChhc3RbMV0sIGN0eCk7XG4gICAgICAgICAgdmFyIHJldCA9IHtub2RlczogW119O1xuICAgICAgICAgIHZhciBjb250ZXh0cyA9IGVhY2hDb250ZXh0KGxocyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250ZXh0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdmFyIHNpbmdsZU5vZGVTZXQgPSBjb250ZXh0c1tpXTtcbiAgICAgICAgICAgIHZhciByaHMgPSB0aGlzLnZhbChhc3RbMl0sIHNpbmdsZU5vZGVTZXQpO1xuICAgICAgICAgICAgdmFyIHN1Y2Nlc3M7XG4gICAgICAgICAgICBpZiAoJ251bWJlcicgPT09IHR5cGVvZiByaHMpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHJocyA9PT0gc2luZ2xlTm9kZVNldC5wb3NbMF1bMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gZm5bJ2Jvb2xlYW4nXShyaHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgdmFyIG5vZGUgPSBzaW5nbGVOb2RlU2V0Lm5vZGVzWzBdO1xuICAgICAgICAgICAgICByZXQubm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgLy8gc2tpcCBvdmVyIGFsbCB0aGUgcmVzdCBvZiB0aGUgc2FtZSBub2RlLlxuICAgICAgICAgICAgICB3aGlsZSAoaSsxIDwgY29udGV4dHMubGVuZ3RoICYmIG5vZGUgPT09IGNvbnRleHRzW2krMV0ubm9kZXNbMF0pIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgY2FzZSAnUGF0aEV4cHInOlxuICAgICAgICAgIC8vIHR1cm4gdGhlIHBhdGggaW50byBhbiBleHByZXNzb2luOyBpLmUuLCByZW1vdmUgdGhlIHBvc2l0aW9uXG4gICAgICAgICAgLy8gaW5mb3JtYXRpb24gb2YgdGhlIGxhc3QgYXhpcy5cbiAgICAgICAgICB2YXIgeCA9IHRoaXMudmFsKGFzdFsxXSwgY3R4KTtcbiAgICAgICAgICAvLyBNYWtlIHRoZSBub2Rlc2V0IGEgZm9yd2FyZC1kaXJlY3Rpb24tb25seSBvbmUuXG4gICAgICAgICAgaWYgKHguZmluYWxpemUpIHsgIC8vIGl0IGlzIGEgTm9kZU11bHRpU2V0XG4gICAgICAgICAgICByZXR1cm4ge25vZGVzOiB4Lm5vZGVzfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICcvJzpcbiAgICAgICAgICAvLyBUT0RPOiBkb24ndCBnZW5lcmF0ZSAnLycgbm9kZXMsIGp1c3QgQXhpcyBub2Rlcy5cbiAgICAgICAgICB2YXIgbGhzID0gdGhpcy52YWwoYXN0WzFdLCBjdHgpO1xuICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG51bGwgIT0gbGhzKTtcbiAgICAgICAgICB2YXIgciA9IHRoaXMudmFsKGFzdFsyXSwgbGhzKTtcbiAgICAgICAgICBjb25zb2xlLmFzc2VydChudWxsICE9IHIpO1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICBjYXNlICdBeGlzJzpcbiAgICAgICAgICAvLyBBbGwgdGhlIGF4aXMgdGVzdHMgZnJvbSBTdGVwLiBXZSBvbmx5IGdldCBBeGlzU3BlY2lmaWVyIE5vZGVUZXN0LFxuICAgICAgICAgIC8vIG5vdCB0aGUgcHJlZGljYXRlICh3aGljaCBpcyBhcHBsaWVkIGxhdGVyKVxuICAgICAgICAgIHZhciBheGlzID0gYXN0WzFdLFxuICAgICAgICAgICAgICBub2RlVHlwZSA9IGFzdFsyXSxcbiAgICAgICAgICAgICAgbm9kZVR5cGVOdW0gPSBub2RlVHlwZXNbbm9kZVR5cGVdLFxuICAgICAgICAgICAgICBzaG91bGRMb3dlckNhc2UgPSB0cnVlLCAgLy8gVE9ETzogZ2l2ZSBvcHRpb25cbiAgICAgICAgICAgICAgbm9kZU5hbWUgPSBhc3RbM10gJiYgc2hvdWxkTG93ZXJDYXNlID8gYXN0WzNdLnRvTG93ZXJDYXNlKCkgOiBhc3RbM107XG4gICAgICAgICAgbm9kZU5hbWUgPSBub2RlTmFtZSA9PT0gJyonID8gbnVsbCA6IG5vZGVOYW1lO1xuICAgICAgICAgIGlmICgnb2JqZWN0JyAhPT0gdHlwZW9mIGN0eCkgcmV0dXJuIHtub2RlczpbXSwgcG9zOltdfTtcbiAgICAgICAgICB2YXIgbm9kZUxpc3QgPSBjdHgubm9kZXMuc2xpY2UoKTsgIC8vIFRPRE86IGlzIGNvcHkgbmVlZGVkP1xuICAgICAgICAgIHZhciByID0gYXhlc1theGlzXShub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpO1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdmFyIGV2YWx1YXRlID0geHBhdGguZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZShleHByLCBkb2MsIGNvbnRleHQpIHtcbiAgICAvL3ZhciBhc3RGYWN0b3J5ID0gbmV3IEFzdEV2YWx1YXRvckZhY3RvcnkoZG9jLCBjb250ZXh0KTtcbiAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmVhbShleHByKTtcbiAgICB2YXIgYXN0ID0gcGFyc2Uoc3RyZWFtLCBhc3RGYWN0b3J5KTtcbiAgICB2YXIgdmFsID0gbmV3IEV2YWx1YXRvcihkb2MpLnZhbChhc3QsIHtub2RlczogW2NvbnRleHRdfSk7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBET00gaW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICB2YXIgWFBhdGhFeGNlcHRpb24gPSB4cGF0aC5YUGF0aEV4Y2VwdGlvbiA9IGZ1bmN0aW9uIFhQYXRoRXhjZXB0aW9uKGNvZGUsIG1lc3NhZ2UpIHtcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICBlLm5hbWUgPSAnWFBhdGhFeGNlcHRpb24nO1xuICAgIGUuY29kZSA9IGNvZGU7XG4gICAgcmV0dXJuIGU7XG4gIH1cbiAgWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUiA9IDUxO1xuICBYUGF0aEV4Y2VwdGlvbi5UWVBFX0VSUiA9IDUyO1xuXG5cbiAgdmFyIFhQYXRoRXZhbHVhdG9yID0geHBhdGguWFBhdGhFdmFsdWF0b3IgPSBmdW5jdGlvbiBYUGF0aEV2YWx1YXRvcigpIHt9XG4gIFhQYXRoRXZhbHVhdG9yLnByb3RvdHlwZSA9IHtcbiAgICBjcmVhdGVFeHByZXNzaW9uOiBmdW5jdGlvbihleHByZXNzaW9uLCByZXNvbHZlcikge1xuICAgICAgcmV0dXJuIG5ldyBYUGF0aEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcmVzb2x2ZXIpO1xuICAgIH0sXG4gICAgY3JlYXRlTlNSZXNvbHZlcjogZnVuY3Rpb24obm9kZVJlc29sdmVyKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfSxcbiAgICBldmFsdWF0ZTogZnVuY3Rpb24gZXZhbHVhdGUoZXhwcmVzc2lvbiwgY29udGV4dE5vZGUsIHJlc29sdmVyLCB0eXBlLCByZXN1bHQpIHtcbiAgICAgIHZhciBleHByID0gbmV3IFhQYXRoRXhwcmVzc2lvbihleHByZXNzaW9uLCByZXNvbHZlcik7XG4gICAgICByZXR1cm4gZXhwci5ldmFsdWF0ZShjb250ZXh0Tm9kZSwgdHlwZSwgcmVzdWx0KTtcbiAgICB9XG4gIH07XG5cblxuICB2YXIgWFBhdGhFeHByZXNzaW9uID0geHBhdGguWFBhdGhFeHByZXNzaW9uID0gZnVuY3Rpb24gWFBhdGhFeHByZXNzaW9uKGV4cHJlc3Npb24sIHJlc29sdmVyLCBvcHREb2MpIHtcbiAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmVhbShleHByZXNzaW9uKTtcbiAgICB0aGlzLl9hc3QgPSBwYXJzZShzdHJlYW0sIGFzdEZhY3RvcnkpO1xuICAgIHRoaXMuX2RvYyA9IG9wdERvYztcbiAgfVxuICBYUGF0aEV4cHJlc3Npb24ucHJvdG90eXBlID0ge1xuICAgIGV2YWx1YXRlOiBmdW5jdGlvbiBldmFsdWF0ZShjb250ZXh0Tm9kZSwgdHlwZSwgcmVzdWx0KSB7XG4gICAgICBpZiAobnVsbCA9PSBjb250ZXh0Tm9kZS5ub2RlVHlwZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgYXJndW1lbnQgKGV4cGVjdGVkIGNvbnRleHQgbm9kZSk6ICcgKyBjb250ZXh0Tm9kZSk7XG4gICAgICB2YXIgZG9jID0gY29udGV4dE5vZGUub3duZXJEb2N1bWVudCB8fCBjb250ZXh0Tm9kZTtcbiAgICAgIGlmIChudWxsICE9IHRoaXMuX2RvYyAmJiB0aGlzLl9kb2MgIT09IGRvYykge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5ET01FeGNlcHRpb24oXG4gICAgICAgICAgICBjb3JlLkRPTUV4Y2VwdGlvbi5XUk9OR19ET0NVTUVOVF9FUlIsXG4gICAgICAgICAgICAnVGhlIGRvY3VtZW50IG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIGNvbnRleHQgbm9kZVxcJ3MgZG9jdW1lbnQuJyk7XG4gICAgICB9XG4gICAgICB2YXIgZXZhbHVhdG9yID0gbmV3IEV2YWx1YXRvcihkb2MpO1xuICAgICAgdmFyIHZhbHVlID0gZXZhbHVhdG9yLnZhbCh0aGlzLl9hc3QsIHtub2RlczogW2NvbnRleHROb2RlXX0pO1xuICAgICAgaWYgKFhQYXRoUmVzdWx0Lk5VTUJFUl9UWVBFID09PSB0eXBlKVxuICAgICAgICB2YWx1ZSA9IGZuLm51bWJlcih2YWx1ZSk7XG4gICAgICBlbHNlIGlmIChYUGF0aFJlc3VsdC5TVFJJTkdfVFlQRSA9PT0gdHlwZSlcbiAgICAgICAgdmFsdWUgPSBmbi5zdHJpbmcodmFsdWUpO1xuICAgICAgZWxzZSBpZiAoWFBhdGhSZXN1bHQuQk9PTEVBTl9UWVBFID09PSB0eXBlKVxuICAgICAgICB2YWx1ZSA9IGZuWydib29sZWFuJ10odmFsdWUpO1xuICAgICAgZWxzZSBpZiAoWFBhdGhSZXN1bHQuQU5ZX1RZUEUgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0LlVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgICBYUGF0aFJlc3VsdC5VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgICBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQuQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0LkZJUlNUX09SREVSRURfTk9ERV9UWVBFICE9PSB0eXBlKVxuICAgICAgICB0aHJvdyBuZXcgY29yZS5ET01FeGNlcHRpb24oXG4gICAgICAgICAgICBjb3JlLkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixcbiAgICAgICAgICAgICdZb3UgbXVzdCBwcm92aWRlIGFuIFhQYXRoIHJlc3VsdCB0eXBlICgwPWFueSkuJyk7XG4gICAgICBlbHNlIGlmIChYUGF0aFJlc3VsdC5BTllfVFlQRSAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgJ29iamVjdCcgIT09IHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFxuICAgICAgICAgICAgWFBhdGhFeGNlcHRpb24uVFlQRV9FUlIsXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgbm9kZS1zZXQ6ICcgKyB2YWx1ZSk7XG4gICAgICByZXR1cm4gbmV3IFhQYXRoUmVzdWx0KGRvYywgdmFsdWUsIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBYUGF0aFJlc3VsdCA9IHhwYXRoLlhQYXRoUmVzdWx0ID0gZnVuY3Rpb24gWFBhdGhSZXN1bHQoZG9jLCB2YWx1ZSwgcmVzdWx0VHlwZSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fcmVzdWx0VHlwZSA9IHJlc3VsdFR5cGU7XG4gICAgdGhpcy5faSA9IDA7XG5cbiAgICAvLyBUT0RPOiB3ZSByZW1vdmVkIG11dGF0aW9uIGV2ZW50cyBidXQgZGlkbid0IHRha2UgY2FyZSBvZiB0aGlzLiBObyB0ZXN0cyBmYWlsLCBzbyB0aGF0J3MgbmljZSwgYnV0IGV2ZW50dWFsbHkgd2VcbiAgICAvLyBzaG91bGQgZml4IHRoaXMsIHByZWZlcmFibHkgYnkgZW50aXJlbHkgcmVwbGFjaW5nIG91ciBYUGF0aCBpbXBsZW1lbnRhdGlvbi5cbiAgICAvLyB0aGlzLl9pbnZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIC8vIGlmICh0aGlzLnJlc3VsdFR5cGUgPT09IFhQYXRoUmVzdWx0LlVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgfHxcbiAgICAvLyAgICAgdGhpcy5yZXN1bHRUeXBlID09PSBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSkge1xuICAgIC8vICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ0RPTVN1YnRyZWVNb2RpZmllZCcsIGludmFsaWRhdGUsIHRydWUpO1xuICAgIC8vICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIC8vICAgZnVuY3Rpb24gaW52YWxpZGF0ZSgpIHtcbiAgICAvLyAgICAgc2VsZi5faW52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIC8vICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NU3VidHJlZU1vZGlmaWVkJywgaW52YWxpZGF0ZSwgdHJ1ZSk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICB9XG4gIFhQYXRoUmVzdWx0LkFOWV9UWVBFID0gMDtcbiAgWFBhdGhSZXN1bHQuTlVNQkVSX1RZUEUgPSAxO1xuICBYUGF0aFJlc3VsdC5TVFJJTkdfVFlQRSA9IDI7XG4gIFhQYXRoUmVzdWx0LkJPT0xFQU5fVFlQRSA9IDM7XG4gIFhQYXRoUmVzdWx0LlVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgPSA0O1xuICBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDU7XG4gIFhQYXRoUmVzdWx0LlVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgPSA2O1xuICBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDc7XG4gIFhQYXRoUmVzdWx0LkFOWV9VTk9SREVSRURfTk9ERV9UWVBFID0gODtcbiAgWFBhdGhSZXN1bHQuRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgPSA5O1xuICB2YXIgcHJvdG8gPSB7XG4gICAgLy8gWFBhdGhSZXN1bHRUeXBlXG4gICAgZ2V0IHJlc3VsdFR5cGUoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzdWx0VHlwZSkgcmV0dXJuIHRoaXMuX3Jlc3VsdFR5cGU7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB0aGlzLl92YWx1ZSkge1xuICAgICAgICBjYXNlICdudW1iZXInOiByZXR1cm4gWFBhdGhSZXN1bHQuTlVNQkVSX1RZUEU7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6IHJldHVybiBYUGF0aFJlc3VsdC5TVFJJTkdfVFlQRTtcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6IHJldHVybiBYUGF0aFJlc3VsdC5CT09MRUFOX1RZUEU7XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiBYUGF0aFJlc3VsdC5VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0IG51bWJlclZhbHVlKCkge1xuICAgICAgaWYgKFhQYXRoUmVzdWx0Lk5VTUJFUl9UWVBFICE9PSB0aGlzLnJlc3VsdFR5cGUpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5UWVBFX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdZb3Ugc2hvdWxkIGhhdmUgYXNrZWQgZm9yIGEgTlVNQkVSX1RZUEUuJyk7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfSxcbiAgICBnZXQgc3RyaW5nVmFsdWUoKSB7XG4gICAgICBpZiAoWFBhdGhSZXN1bHQuU1RSSU5HX1RZUEUgIT09IHRoaXMucmVzdWx0VHlwZSlcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLlRZUEVfRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1lvdSBzaG91bGQgaGF2ZSBhc2tlZCBmb3IgYSBTVFJJTkdfVFlQRS4nKTtcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9LFxuICAgIGdldCBib29sZWFuVmFsdWUoKSB7XG4gICAgICBpZiAoWFBhdGhSZXN1bHQuQk9PTEVBTl9UWVBFICE9PSB0aGlzLnJlc3VsdFR5cGUpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5UWVBFX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdZb3Ugc2hvdWxkIGhhdmUgYXNrZWQgZm9yIGEgQk9PTEVBTl9UWVBFLicpO1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH0sXG4gICAgZ2V0IHNpbmdsZU5vZGVWYWx1ZSgpIHtcbiAgICAgIGlmIChYUGF0aFJlc3VsdC5BTllfVU5PUkRFUkVEX05PREVfVFlQRSAhPT0gdGhpcy5yZXN1bHRUeXBlICYmXG4gICAgICAgICAgWFBhdGhSZXN1bHQuRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgIT09IHRoaXMucmVzdWx0VHlwZSlcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFxuICAgICAgICAgICAgWFBhdGhFeGNlcHRpb24uVFlQRV9FUlIsXG4gICAgICAgICAgICAnWW91IHNob3VsZCBoYXZlIGFza2VkIGZvciBhIEZJUlNUX09SREVSRURfTk9ERV9UWVBFLicpO1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLm5vZGVzWzBdIHx8IG51bGw7XG4gICAgfSxcbiAgICBnZXQgaW52YWxpZEl0ZXJhdG9yU3RhdGUoKSB7XG4gICAgICBpZiAoWFBhdGhSZXN1bHQuVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAhPT0gdGhpcy5yZXN1bHRUeXBlICYmXG4gICAgICAgICAgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgIT09IHRoaXMucmVzdWx0VHlwZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuICEhdGhpcy5faW52YWxpZGF0ZWQ7XG4gICAgfSxcbiAgICBnZXQgc25hcHNob3RMZW5ndGgoKSB7XG4gICAgICBpZiAoWFBhdGhSZXN1bHQuVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSAhPT0gdGhpcy5yZXN1bHRUeXBlICYmXG4gICAgICAgICAgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgIT09IHRoaXMucmVzdWx0VHlwZSlcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFxuICAgICAgICAgICAgWFBhdGhFeGNlcHRpb24uVFlQRV9FUlIsXG4gICAgICAgICAgICAnWW91IHNob3VsZCBoYXZlIGFza2VkIGZvciBhIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLicpO1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLm5vZGVzLmxlbmd0aDtcbiAgICB9LFxuICAgIGl0ZXJhdGVOZXh0OiBmdW5jdGlvbiBpdGVyYXRlTmV4dCgpIHtcbiAgICAgIGlmIChYUGF0aFJlc3VsdC5VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFICE9PSB0aGlzLnJlc3VsdFR5cGUgJiZcbiAgICAgICAgICBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAhPT0gdGhpcy5yZXN1bHRUeXBlKVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oXG4gICAgICAgICAgICBYUGF0aEV4Y2VwdGlvbi5UWVBFX0VSUixcbiAgICAgICAgICAgICdZb3Ugc2hvdWxkIGhhdmUgYXNrZWQgZm9yIGEgT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUuJyk7XG4gICAgICBpZiAodGhpcy5pbnZhbGlkSXRlcmF0b3JTdGF0ZSlcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuRE9NRXhjZXB0aW9uKFxuICAgICAgICAgICAgY29yZS5ET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIsXG4gICAgICAgICAgICAnVGhlIGRvY3VtZW50IGhhcyBiZWVuIG11dGF0ZWQgc2luY2UgdGhlIHJlc3VsdCB3YXMgcmV0dXJuZWQnKTtcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5ub2Rlc1t0aGlzLl9pKytdIHx8IG51bGw7XG4gICAgfSxcbiAgICBzbmFwc2hvdEl0ZW06IGZ1bmN0aW9uIHNuYXBzaG90SXRlbShpbmRleCkge1xuICAgICAgaWYgKFhQYXRoUmVzdWx0LlVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgIT09IHRoaXMucmVzdWx0VHlwZSAmJlxuICAgICAgICAgIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFICE9PSB0aGlzLnJlc3VsdFR5cGUpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihcbiAgICAgICAgICAgIFhQYXRoRXhjZXB0aW9uLlRZUEVfRVJSLFxuICAgICAgICAgICAgJ1lvdSBzaG91bGQgaGF2ZSBhc2tlZCBmb3IgYSBPUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRS4nKTtcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZS5ub2Rlc1tpbmRleF0gfHwgbnVsbDtcbiAgICB9XG4gIH07XG4gIC8vIHNvIHlvdSBjYW4gYWNjZXNzIEFOWV9UWVBFIGV0Yy4gZnJvbSB0aGUgaW5zdGFuY2VzOlxuICBYUGF0aFJlc3VsdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFhQYXRoUmVzdWx0LFxuICAgICAgT2JqZWN0LmtleXMocHJvdG8pLnJlZHVjZShmdW5jdGlvbiAoZGVzY3JpcHRvcnMsIG5hbWUpIHtcbiAgICAgICAgZGVzY3JpcHRvcnNbbmFtZV0gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JzO1xuICAgICAgfSwge1xuICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgIHZhbHVlOiBYUGF0aFJlc3VsdCxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSkpO1xuXG4gIGNvcmUuWFBhdGhFeGNlcHRpb24gPSBYUGF0aEV4Y2VwdGlvbjtcbiAgY29yZS5YUGF0aEV4cHJlc3Npb24gPSBYUGF0aEV4cHJlc3Npb247XG4gIGNvcmUuWFBhdGhSZXN1bHQgPSBYUGF0aFJlc3VsdDtcbiAgY29yZS5YUGF0aEV2YWx1YXRvciA9IFhQYXRoRXZhbHVhdG9yO1xuXG4gIGNvcmUuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUV4cHJlc3Npb24gPVxuICAgIFhQYXRoRXZhbHVhdG9yLnByb3RvdHlwZS5jcmVhdGVFeHByZXNzaW9uO1xuXG4gIGNvcmUuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZU5TUmVzb2x2ZXIgPVxuICAgICAgWFBhdGhFdmFsdWF0b3IucHJvdG90eXBlLmNyZWF0ZU5TUmVzb2x2ZXI7XG5cbiAgY29yZS5Eb2N1bWVudC5wcm90b3R5cGUuZXZhbHVhdGUgPSBYUGF0aEV2YWx1YXRvci5wcm90b3R5cGUuZXZhbHVhdGU7XG5cbiAgcmV0dXJuIHhwYXRoOyAvLyBmb3IgdGVzdHNcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcbmNvbnN0IGRlZmluZUdldHRlciA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKS5kZWZpbmVHZXR0ZXI7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC91dGlsc1wiKTtcbmNvbnN0IGF0dHJHZW5lcmF0ZWQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvQXR0clwiKTtcbmNvbnN0IGNoYW5nZUF0dHJpYnV0ZUltcGwgPSByZXF1aXJlKFwiLi9hdHRyaWJ1dGVzL0F0dHItaW1wbFwiKS5jaGFuZ2VBdHRyaWJ1dGVJbXBsO1xuY29uc3QgZ2V0QXR0ckltcGxRdWFsaWZpZWROYW1lID0gcmVxdWlyZShcIi4vYXR0cmlidXRlcy9BdHRyLWltcGxcIikuZ2V0QXR0ckltcGxRdWFsaWZpZWROYW1lO1xuXG4vLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI25hbWVkbm9kZW1hcFxuXG5jb25zdCBJTlRFUk5BTCA9IFN5bWJvbChcIk5hbWVkTm9kZU1hcCBpbnRlcm5hbFwiKTtcblxuLy8gVE9ETzogdXNlIE5hbWVkUHJvcGVydHlUcmFja2VyIHdoZW4gaHR0cHM6Ly9naXRodWIuY29tL3RtcHZhci9qc2RvbS9wdWxsLzExMTYgbGFuZHM/XG5cbi8vIERvbid0IGVtdWxhdGUgbmFtZWQgZ2V0dGVycyBmb3IgdGhlc2UgcHJvcGVydGllcy5cbi8vIENvbXBpbGVkIGxhdGVyIGFmdGVyIE5hbWVkTm9kZU1hcCBpcyBhbGwgc2V0IHVwLlxuY29uc3QgcmVzZXJ2ZWROYW1lcyA9IG5ldyBTZXQoKTtcblxuZnVuY3Rpb24gTmFtZWROb2RlTWFwKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuZGVmaW5lR2V0dGVyKE5hbWVkTm9kZU1hcC5wcm90b3R5cGUsIFwibGVuZ3RoXCIsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXNbSU5URVJOQUxdLmF0dHJpYnV0ZUxpc3QubGVuZ3RoO1xufSk7XG5cbk5hbWVkTm9kZU1hcC5wcm90b3R5cGUuaXRlbSA9IGZ1bmN0aW9uIChpbmRleCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm90IGVub3VnaCBhcmd1bWVudHMgdG8gTmFtZWROb2RlTWFwLnByb3RvdHlwZS5pdGVtXCIpO1xuICB9XG5cbiAgLy8gRG9uJ3QgYm90aGVyIHdpdGggZnVsbCB1bnNpZ25lZCBsb25nIGxvbmcgY29udmVyc2lvbi4gV2hlbiB3ZSBoYXZlIGJldHRlciBXZWJJREwgc3VwcG9ydCBnZW5lcmFsbHksIHJldmlzaXQuXG4gIGluZGV4ID0gTnVtYmVyKGluZGV4KTtcblxuICByZXR1cm4gdGhpc1tpbmRleF0gfHwgbnVsbDtcbn07XG5cbk5hbWVkTm9kZU1hcC5wcm90b3R5cGUuZ2V0TmFtZWRJdGVtID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vdCBlbm91Z2ggYXJndW1lbnRzIHRvIE5hbWVkTm9kZU1hcC5wcm90b3R5cGUuZ2V0TmFtZWRJdGVtXCIpO1xuICB9XG4gIG5hbWUgPSBTdHJpbmcobmFtZSk7XG5cbiAgcmV0dXJuIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGV4cG9ydHMuZ2V0QXR0cmlidXRlQnlOYW1lKHRoaXNbSU5URVJOQUxdLmVsZW1lbnQsIG5hbWUpKTtcbn07XG5cbk5hbWVkTm9kZU1hcC5wcm90b3R5cGUuZ2V0TmFtZWRJdGVtTlMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vdCBlbm91Z2ggYXJndW1lbnRzIHRvIE5hbWVkTm9kZU1hcC5wcm90b3R5cGUuZ2V0TmFtZWRJdGVtTlNcIik7XG4gIH1cbiAgaWYgKG5hbWVzcGFjZSA9PT0gdW5kZWZpbmVkIHx8IG5hbWVzcGFjZSA9PT0gbnVsbCkge1xuICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgbmFtZXNwYWNlID0gU3RyaW5nKG5hbWVzcGFjZSk7XG4gIH1cbiAgbG9jYWxOYW1lID0gU3RyaW5nKGxvY2FsTmFtZSk7XG5cbiAgcmV0dXJuIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGV4cG9ydHMuZ2V0QXR0cmlidXRlQnlOYW1lTlModGhpc1tJTlRFUk5BTF0uZWxlbWVudCwgbmFtZXNwYWNlLCBsb2NhbE5hbWUpKTtcbn07XG5cbk5hbWVkTm9kZU1hcC5wcm90b3R5cGUuc2V0TmFtZWRJdGVtID0gZnVuY3Rpb24gKGF0dHIpIHtcbiAgaWYgKCFhdHRyR2VuZXJhdGVkLmlzKGF0dHIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IHRvIE5hbWVkTm9kZU1hcC5wcm90b3R5cGUuc2V0TmFtZWRJdGVtIG11c3QgYmUgYW4gQXR0clwiKTtcbiAgfVxuXG4gIHJldHVybiBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChleHBvcnRzLnNldEF0dHJpYnV0ZSh0aGlzW0lOVEVSTkFMXS5lbGVtZW50LCBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihhdHRyKSkpO1xufTtcblxuTmFtZWROb2RlTWFwLnByb3RvdHlwZS5zZXROYW1lZEl0ZW1OUyA9IGZ1bmN0aW9uIChhdHRyKSB7XG4gIGlmICghYXR0ckdlbmVyYXRlZC5pcyhhdHRyKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCB0byBOYW1lZE5vZGVNYXAucHJvdG90eXBlLnNldE5hbWVkSXRlbU5TIG11c3QgYmUgYW4gQXR0clwiKTtcbiAgfVxuXG4gIHJldHVybiBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChleHBvcnRzLnNldEF0dHJpYnV0ZSh0aGlzW0lOVEVSTkFMXS5lbGVtZW50LCBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihhdHRyKSkpO1xufTtcblxuTmFtZWROb2RlTWFwLnByb3RvdHlwZS5yZW1vdmVOYW1lZEl0ZW0gPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm90IGVub3VnaCBhcmd1bWVudHMgdG8gTmFtZWROb2RlTWFwLnByb3RvdHlwZS5nZXROYW1lZEl0ZW1cIik7XG4gIH1cbiAgbmFtZSA9IFN0cmluZyhuYW1lKTtcblxuICBjb25zdCBhdHRyID0gZXhwb3J0cy5yZW1vdmVBdHRyaWJ1dGVCeU5hbWUodGhpc1tJTlRFUk5BTF0uZWxlbWVudCwgbmFtZSk7XG5cbiAgaWYgKGF0dHIgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT1RfRk9VTkRfRVJSLCBcIlRyaWVkIHRvIHJlbW92ZSBhbiBhdHRyaWJ1dGUgdGhhdCB3YXMgbm90IHByZXNlbnRcIik7XG4gIH1cblxuICByZXR1cm4gaWRsVXRpbHMud3JhcHBlckZvckltcGwoYXR0cik7XG59O1xuXG5OYW1lZE5vZGVNYXAucHJvdG90eXBlLnJlbW92ZU5hbWVkSXRlbU5TID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgZW5vdWdoIGFyZ3VtZW50cyB0byBOYW1lZE5vZGVNYXAucHJvdG90eXBlLnJlbW92ZU5hbWVkSXRlbU5TXCIpO1xuICB9XG4gIGlmIChuYW1lc3BhY2UgPT09IHVuZGVmaW5lZCB8fCBuYW1lc3BhY2UgPT09IG51bGwpIHtcbiAgICBuYW1lc3BhY2UgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIG5hbWVzcGFjZSA9IFN0cmluZyhuYW1lc3BhY2UpO1xuICB9XG4gIGxvY2FsTmFtZSA9IFN0cmluZyhsb2NhbE5hbWUpO1xuXG4gIGNvbnN0IGF0dHIgPSBleHBvcnRzLnJlbW92ZUF0dHJpYnV0ZUJ5TmFtZU5TKHRoaXNbSU5URVJOQUxdLmVsZW1lbnQsIG5hbWVzcGFjZSwgbG9jYWxOYW1lKTtcblxuICBpZiAoYXR0ciA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIsIFwiVHJpZWQgdG8gcmVtb3ZlIGFuIGF0dHJpYnV0ZSB0aGF0IHdhcyBub3QgcHJlc2VudFwiKTtcbiAgfVxuXG4gIHJldHVybiBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChhdHRyKTtcbn07XG5cbmV4cG9ydHMuTmFtZWROb2RlTWFwID0gTmFtZWROb2RlTWFwO1xuXG57XG4gIGxldCBwcm90b3R5cGUgPSBOYW1lZE5vZGVNYXAucHJvdG90eXBlO1xuICB3aGlsZSAocHJvdG90eXBlKSB7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSkpIHtcbiAgICAgIHJlc2VydmVkTmFtZXMuYWRkKG5hbWUpO1xuICAgIH1cbiAgICBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcbiAgfVxufVxuXG5leHBvcnRzLmNyZWF0ZU5hbWVkTm9kZU1hcCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIGNvbnN0IG5ubSA9IE9iamVjdC5jcmVhdGUoTmFtZWROb2RlTWFwLnByb3RvdHlwZSk7XG4gIG5ubVtJTlRFUk5BTF0gPSB7XG4gICAgZWxlbWVudCxcbiAgICBhdHRyaWJ1dGVMaXN0OiBbXSxcbiAgICBhdHRyaWJ1dGVzQnlOYW1lTWFwOiBuZXcgTWFwKClcbiAgfTtcbiAgcmV0dXJuIG5ubTtcbn07XG5cbi8vIFRoZSBmb2xsb3dpbmcgdGhyZWUgYXJlIGZvciBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZWxlbWVudC1hdHRyaWJ1dGUtaGFzLiBXZSBkb24ndCBqdXN0IGhhdmUgYVxuLy8gcHJlZGljYXRlIHRlc3RlciBzaW5jZSByZW1vdmluZyB0aGF0IGtpbmQgb2YgZmxleGliaWxpdHkgZ2l2ZXMgdXMgdGhlIHBvdGVudGlhbCBmb3IgYmV0dGVyIGZ1dHVyZSBvcHRpbWl6YXRpb25zLlxuXG5leHBvcnRzLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBBKSB7XG4gIGNvbnN0IGF0dHJpYnV0ZXNOTk0gPSBlbGVtZW50Ll9hdHRyaWJ1dGVzO1xuICBjb25zdCBhdHRyaWJ1dGVMaXN0ID0gYXR0cmlidXRlc05OTVtJTlRFUk5BTF0uYXR0cmlidXRlTGlzdDtcblxuICByZXR1cm4gYXR0cmlidXRlTGlzdC5pbmNsdWRlcyhBKTtcbn07XG5cbmV4cG9ydHMuaGFzQXR0cmlidXRlQnlOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUpIHtcbiAgY29uc3QgYXR0cmlidXRlc05OTSA9IGVsZW1lbnQuX2F0dHJpYnV0ZXM7XG4gIGNvbnN0IGF0dHJpYnV0ZXNCeU5hbWVNYXAgPSBhdHRyaWJ1dGVzTk5NW0lOVEVSTkFMXS5hdHRyaWJ1dGVzQnlOYW1lTWFwO1xuXG4gIHJldHVybiBhdHRyaWJ1dGVzQnlOYW1lTWFwLmhhcyhuYW1lKTtcbn07XG5cbmV4cG9ydHMuaGFzQXR0cmlidXRlQnlOYW1lTlMgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgY29uc3QgYXR0cmlidXRlc05OTSA9IGVsZW1lbnQuX2F0dHJpYnV0ZXM7XG4gIGNvbnN0IGF0dHJpYnV0ZUxpc3QgPSBhdHRyaWJ1dGVzTk5NW0lOVEVSTkFMXS5hdHRyaWJ1dGVMaXN0O1xuXG4gIHJldHVybiBhdHRyaWJ1dGVMaXN0LnNvbWUoYXR0cmlidXRlID0+IHtcbiAgICByZXR1cm4gYXR0cmlidXRlLl9sb2NhbE5hbWUgPT09IGxvY2FsTmFtZSAmJiBhdHRyaWJ1dGUuX25hbWVzcGFjZSA9PT0gbmFtZXNwYWNlO1xuICB9KTtcbn07XG5cbmV4cG9ydHMuY2hhbmdlQXR0cmlidXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVsZW1lbnQtYXR0cmlidXRlcy1jaGFuZ2VcblxuICAvLyBUaGUgcGFydGl0aW9uaW5nIGhlcmUgd29ya3MgYXJvdW5kIGEgcGFydGljdWxhcmx5IGJhZCBjaXJjdWxhciByZXF1aXJlIHByb2JsZW0uIFNlZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdG1wdmFyL2pzZG9tL3B1bGwvMTI0NyNpc3N1ZWNvbW1lbnQtMTQ5MDYwNDcwXG4gIGNoYW5nZUF0dHJpYnV0ZUltcGwoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSk7XG59O1xuXG5leHBvcnRzLmFwcGVuZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBhdHRyaWJ1dGUpIHtcbiAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVsZW1lbnQtYXR0cmlidXRlcy1hcHBlbmRcblxuICBjb25zdCBhdHRyaWJ1dGVzTk5NID0gZWxlbWVudC5fYXR0cmlidXRlcztcbiAgY29uc3QgYXR0cmlidXRlTGlzdCA9IGF0dHJpYnV0ZXNOTk1bSU5URVJOQUxdLmF0dHJpYnV0ZUxpc3Q7XG5cbiAgLy8gVE9ETyBtdXRhdGlvbiBvYnNlcnZlciBzdHVmZlxuXG4gIGF0dHJpYnV0ZUxpc3QucHVzaChhdHRyaWJ1dGUpO1xuICBhdHRyaWJ1dGUuX2VsZW1lbnQgPSBlbGVtZW50O1xuXG4gIC8vIFN5bmMgdGFyZ2V0IGluZGV4ZWQgcHJvcGVydGllc1xuICBhdHRyaWJ1dGVzTk5NW2F0dHJpYnV0ZUxpc3QubGVuZ3RoIC0gMV0gPSBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChhdHRyaWJ1dGUpO1xuXG4gIGNvbnN0IG5hbWUgPSBnZXRBdHRySW1wbFF1YWxpZmllZE5hbWUoYXR0cmlidXRlKTtcblxuICAvLyBTeW5jIHRhcmdldCBuYW1lZCBwcm9wZXJ0aWVzXG4gIGlmICghcmVzZXJ2ZWROYW1lcy5oYXMobmFtZSkgJiYgc2hvdWxkTmFtZUJlSW5OTk1Qcm9wcyhlbGVtZW50LCBuYW1lKSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhdHRyaWJ1dGVzTk5NLCBuYW1lLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGF0dHJpYnV0ZSlcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFN5bmMgbmFtZSBjYWNoZVxuICBjb25zdCBjYWNoZSA9IGF0dHJpYnV0ZXNOTk1bSU5URVJOQUxdLmF0dHJpYnV0ZXNCeU5hbWVNYXA7XG4gIGxldCBlbnRyeSA9IGNhY2hlLmdldChuYW1lKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIGVudHJ5ID0gW107XG4gICAgY2FjaGUuc2V0KG5hbWUsIGVudHJ5KTtcbiAgfVxuICBlbnRyeS5wdXNoKGF0dHJpYnV0ZSk7XG5cbiAgLy8gUnVuIGpzZG9tIGhvb2tzOyByb3VnaGx5IGNvcnJlc3BvbmQgdG8gc3BlYydzIFwiQW4gYXR0cmlidXRlIGlzIHNldCBhbmQgYW4gYXR0cmlidXRlIGlzIGFkZGVkLlwiXG4gIGVsZW1lbnQuX2F0dHJNb2RpZmllZChuYW1lLCBhdHRyaWJ1dGUuX3ZhbHVlLCBudWxsKTtcbn07XG5cbmV4cG9ydHMucmVtb3ZlQXR0cmlidXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIGF0dHJpYnV0ZSkge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZWxlbWVudC1hdHRyaWJ1dGVzLXJlbW92ZVxuXG4gIGNvbnN0IGF0dHJpYnV0ZXNOTk0gPSBlbGVtZW50Ll9hdHRyaWJ1dGVzO1xuICBjb25zdCBhdHRyaWJ1dGVMaXN0ID0gYXR0cmlidXRlc05OTVtJTlRFUk5BTF0uYXR0cmlidXRlTGlzdDtcblxuICAvLyBUT0RPIG11dGF0aW9uIG9ic2VydmVyIHN0dWZmXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGF0dHJpYnV0ZUxpc3RbaV0gPT09IGF0dHJpYnV0ZSkge1xuICAgICAgYXR0cmlidXRlTGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICBhdHRyaWJ1dGUuX2VsZW1lbnQgPSBudWxsO1xuXG4gICAgICAvLyBTeW5jIHRhcmdldCBpbmRleGVkIHByb3BlcnRpZXNcbiAgICAgIGZvciAobGV0IGogPSBpOyBqIDwgYXR0cmlidXRlTGlzdC5sZW5ndGg7ICsraikge1xuICAgICAgICBhdHRyaWJ1dGVzTk5NW2pdID0gaWRsVXRpbHMud3JhcHBlckZvckltcGwoYXR0cmlidXRlTGlzdFtqXSk7XG4gICAgICB9XG4gICAgICBkZWxldGUgYXR0cmlidXRlc05OTVthdHRyaWJ1dGVMaXN0Lmxlbmd0aF07XG5cbiAgICAgIGNvbnN0IG5hbWUgPSBnZXRBdHRySW1wbFF1YWxpZmllZE5hbWUoYXR0cmlidXRlKTtcblxuICAgICAgLy8gU3luYyB0YXJnZXQgbmFtZWQgcHJvcGVydGllc1xuICAgICAgaWYgKCFyZXNlcnZlZE5hbWVzLmhhcyhuYW1lKSAmJiBzaG91bGROYW1lQmVJbk5OTVByb3BzKGVsZW1lbnQsIG5hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzTk5NW25hbWVdO1xuICAgICAgfVxuXG4gICAgICAvLyBTeW5jIG5hbWUgY2FjaGVcbiAgICAgIGNvbnN0IGNhY2hlID0gYXR0cmlidXRlc05OTVtJTlRFUk5BTF0uYXR0cmlidXRlc0J5TmFtZU1hcDtcbiAgICAgIGNvbnN0IGVudHJ5ID0gY2FjaGUuZ2V0KG5hbWUpO1xuICAgICAgZW50cnkuc3BsaWNlKGVudHJ5LmluZGV4T2YoYXR0cmlidXRlKSwgMSk7XG4gICAgICBpZiAoZW50cnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNhY2hlLmRlbGV0ZShuYW1lKTtcbiAgICAgIH1cblxuICAgICAgLy8gUnVuIGpzZG9tIGhvb2tzOyByb3VnaGx5IGNvcnJlc3BvbmQgdG8gc3BlYydzIFwiQW4gYXR0cmlidXRlIGlzIHJlbW92ZWQuXCJcbiAgICAgIGVsZW1lbnQuX2F0dHJNb2RpZmllZChuYW1lLCBudWxsLCBhdHRyaWJ1dGUuX3ZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0cy5yZXBsYWNlQXR0cmlidXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9sZEF0dHIsIG5ld0F0dHIpIHtcbiAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVsZW1lbnQtYXR0cmlidXRlcy1yZXBsYWNlXG5cbiAgY29uc3QgYXR0cmlidXRlc05OTSA9IGVsZW1lbnQuX2F0dHJpYnV0ZXM7XG4gIGNvbnN0IGF0dHJpYnV0ZUxpc3QgPSBhdHRyaWJ1dGVzTk5NW0lOVEVSTkFMXS5hdHRyaWJ1dGVMaXN0O1xuXG4gIC8vIFRPRE8gbXV0YXRpb24gb2JzZXJ2ZXIgc3R1ZmZcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoYXR0cmlidXRlTGlzdFtpXSA9PT0gb2xkQXR0cikge1xuICAgICAgYXR0cmlidXRlTGlzdC5zcGxpY2UoaSwgMSwgbmV3QXR0cik7XG4gICAgICBvbGRBdHRyLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIG5ld0F0dHIuX2VsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgICAvLyBTeW5jIHRhcmdldCBpbmRleGVkIHByb3BlcnRpZXNcbiAgICAgIGF0dHJpYnV0ZXNOTk1baV0gPSBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChuZXdBdHRyKTtcblxuICAgICAgY29uc3QgbmFtZSA9IGdldEF0dHJJbXBsUXVhbGlmaWVkTmFtZShuZXdBdHRyKTtcblxuICAgICAgLy8gU3luYyB0YXJnZXQgbmFtZWQgcHJvcGVydGllc1xuICAgICAgaWYgKCFyZXNlcnZlZE5hbWVzLmhhcyhuYW1lKSAmJiBzaG91bGROYW1lQmVJbk5OTVByb3BzKGVsZW1lbnQsIG5hbWUpKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNOTk1bbmFtZV0gPSBuZXdBdHRyO1xuICAgICAgfVxuXG4gICAgICAvLyBTeW5jIG5hbWUgY2FjaGVcbiAgICAgIGNvbnN0IGNhY2hlID0gYXR0cmlidXRlc05OTVtJTlRFUk5BTF0uYXR0cmlidXRlc0J5TmFtZU1hcDtcbiAgICAgIGxldCBlbnRyeSA9IGNhY2hlLmdldChuYW1lKTtcbiAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgZW50cnkgPSBbXTtcbiAgICAgICAgY2FjaGUuc2V0KG5hbWUsIGVudHJ5KTtcbiAgICAgIH1cbiAgICAgIGVudHJ5LnNwbGljZShlbnRyeS5pbmRleE9mKG9sZEF0dHIpLCAxLCBuZXdBdHRyKTtcblxuICAgICAgLy8gUnVuIGpzZG9tIGhvb2tzOyByb3VnaGx5IGNvcnJlc3BvbmQgdG8gc3BlYydzIFwiQW4gYXR0cmlidXRlIGlzIHNldCBhbmQgYW4gYXR0cmlidXRlIGlzIGNoYW5nZWQuXCJcbiAgICAgIGVsZW1lbnQuX2F0dHJNb2RpZmllZChuYW1lLCBuZXdBdHRyLl92YWx1ZSwgb2xkQXR0ci5fdmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnRzLmdldEF0dHJpYnV0ZUJ5TmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lKSB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbGVtZW50LWF0dHJpYnV0ZXMtZ2V0LWJ5LW5hbWVcblxuICBpZiAoZWxlbWVudC5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiAmJlxuICAgICAgZWxlbWVudC5fb3duZXJEb2N1bWVudC5fcGFyc2luZ01vZGUgPT09IFwiaHRtbFwiKSB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIGNvbnN0IGNhY2hlID0gZWxlbWVudC5fYXR0cmlidXRlc1tJTlRFUk5BTF0uYXR0cmlidXRlc0J5TmFtZU1hcDtcbiAgY29uc3QgZW50cnkgPSBjYWNoZS5nZXQobmFtZSk7XG4gIGlmICghZW50cnkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBlbnRyeVswXTtcbn07XG5cbmV4cG9ydHMuZ2V0QXR0cmlidXRlVmFsdWUgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSkge1xuICBjb25zdCBhdHRyID0gZXhwb3J0cy5nZXRBdHRyaWJ1dGVCeU5hbWUoZWxlbWVudCwgbmFtZSk7XG5cbiAgaWYgKCFhdHRyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYXR0ci5fdmFsdWU7XG59O1xuXG5leHBvcnRzLmdldEF0dHJpYnV0ZUJ5TmFtZU5TID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbGVtZW50LWF0dHJpYnV0ZXMtZ2V0LWJ5LW5hbWVzcGFjZVxuXG4gIGlmIChuYW1lc3BhY2UgPT09IFwiXCIpIHtcbiAgICBuYW1lc3BhY2UgPSBudWxsO1xuICB9XG5cbiAgY29uc3QgYXR0cmlidXRlTGlzdCA9IGVsZW1lbnQuX2F0dHJpYnV0ZXNbSU5URVJOQUxdLmF0dHJpYnV0ZUxpc3Q7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGF0dHIgPSBhdHRyaWJ1dGVMaXN0W2ldO1xuICAgIGlmIChhdHRyLl9uYW1lc3BhY2UgPT09IG5hbWVzcGFjZSAmJiBhdHRyLl9sb2NhbE5hbWUgPT09IGxvY2FsTmFtZSkge1xuICAgICAgcmV0dXJuIGF0dHI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnRzLmdldEF0dHJpYnV0ZVZhbHVlQnlOYW1lTlMgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgY29uc3QgYXR0ciA9IGV4cG9ydHMuZ2V0QXR0cmlidXRlQnlOYW1lTlMoZWxlbWVudCwgbmFtZXNwYWNlLCBsb2NhbE5hbWUpO1xuXG4gIGlmICghYXR0cikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGF0dHIuX3ZhbHVlO1xufTtcblxuZXhwb3J0cy5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgYXR0cikge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZWxlbWVudC1hdHRyaWJ1dGVzLXNldFxuXG4gIGlmIChhdHRyLl9lbGVtZW50ICE9PSBudWxsICYmIGF0dHIuX2VsZW1lbnQgIT09IGVsZW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlVTRV9BVFRSSUJVVEVfRVJSKTtcbiAgfVxuXG4gIGNvbnN0IG9sZEF0dHIgPSBleHBvcnRzLmdldEF0dHJpYnV0ZUJ5TmFtZU5TKGVsZW1lbnQsIGF0dHIuX25hbWVzcGFjZSwgYXR0ci5fbG9jYWxOYW1lKTtcbiAgaWYgKG9sZEF0dHIgPT09IGF0dHIpIHtcbiAgICByZXR1cm4gYXR0cjtcbiAgfVxuXG4gIGlmIChvbGRBdHRyICE9PSBudWxsKSB7XG4gICAgZXhwb3J0cy5yZXBsYWNlQXR0cmlidXRlKGVsZW1lbnQsIG9sZEF0dHIsIGF0dHIpO1xuICB9IGVsc2Uge1xuICAgIGV4cG9ydHMuYXBwZW5kQXR0cmlidXRlKGVsZW1lbnQsIGF0dHIpO1xuICB9XG5cbiAgcmV0dXJuIG9sZEF0dHI7XG59O1xuXG5leHBvcnRzLnNldEF0dHJpYnV0ZVZhbHVlID0gZnVuY3Rpb24gKGVsZW1lbnQsIGxvY2FsTmFtZSwgdmFsdWUsIHByZWZpeCwgbmFtZXNwYWNlKSB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbGVtZW50LWF0dHJpYnV0ZXMtc2V0LXZhbHVlXG5cbiAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcHJlZml4ID0gbnVsbDtcbiAgfVxuICBpZiAobmFtZXNwYWNlID09PSB1bmRlZmluZWQpIHtcbiAgICBuYW1lc3BhY2UgPSBudWxsO1xuICB9XG5cbiAgY29uc3QgYXR0cmlidXRlID0gZXhwb3J0cy5nZXRBdHRyaWJ1dGVCeU5hbWVOUyhlbGVtZW50LCBuYW1lc3BhY2UsIGxvY2FsTmFtZSk7XG4gIGlmIChhdHRyaWJ1dGUgPT09IG51bGwpIHtcbiAgICBjb25zdCBuZXdBdHRyaWJ1dGUgPSBhdHRyR2VuZXJhdGVkLmNyZWF0ZUltcGwoW10sIHsgbmFtZXNwYWNlLCBuYW1lc3BhY2VQcmVmaXg6IHByZWZpeCwgbG9jYWxOYW1lLCB2YWx1ZSB9KTtcbiAgICBleHBvcnRzLmFwcGVuZEF0dHJpYnV0ZShlbGVtZW50LCBuZXdBdHRyaWJ1dGUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGV4cG9ydHMuY2hhbmdlQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpO1xufTtcblxuZXhwb3J0cy5yZW1vdmVBdHRyaWJ1dGVCeU5hbWUgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSkge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZWxlbWVudC1hdHRyaWJ1dGVzLXJlbW92ZS1ieS1uYW1lXG5cbiAgY29uc3QgYXR0ciA9IGV4cG9ydHMuZ2V0QXR0cmlidXRlQnlOYW1lKGVsZW1lbnQsIG5hbWUpO1xuXG4gIGlmIChhdHRyICE9PSBudWxsKSB7XG4gICAgZXhwb3J0cy5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cik7XG4gIH1cblxuICByZXR1cm4gYXR0cjtcbn07XG5cbmV4cG9ydHMucmVtb3ZlQXR0cmlidXRlQnlOYW1lTlMgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVsZW1lbnQtYXR0cmlidXRlcy1yZW1vdmUtYnktbmFtZXNwYWNlXG5cbiAgY29uc3QgYXR0ciA9IGV4cG9ydHMuZ2V0QXR0cmlidXRlQnlOYW1lTlMoZWxlbWVudCwgbmFtZXNwYWNlLCBsb2NhbE5hbWUpO1xuXG4gIGlmIChhdHRyICE9PSBudWxsKSB7XG4gICAgZXhwb3J0cy5yZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cik7XG4gIH1cblxuICByZXR1cm4gYXR0cjtcbn07XG5cbmV4cG9ydHMuY29weUF0dHJpYnV0ZUxpc3QgPSBmdW5jdGlvbiAoc291cmNlRWxlbWVudCwgZGVzdEVsZW1lbnQpIHtcbiAgLy8gTmVlZGVkIGJ5IGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ub2RlLWNsb25lXG5cbiAgZm9yIChjb25zdCBzb3VyY2VBdHRyIG9mIHNvdXJjZUVsZW1lbnQuX2F0dHJpYnV0ZXNbSU5URVJOQUxdLmF0dHJpYnV0ZUxpc3QpIHtcbiAgICBjb25zdCBkZXN0QXR0ciA9IGF0dHJHZW5lcmF0ZWQuY3JlYXRlSW1wbChbXSwge1xuICAgICAgbmFtZXNwYWNlOiBzb3VyY2VBdHRyLl9uYW1lc3BhY2UsXG4gICAgICBuYW1lc3BhY2VQcmVmaXg6IHNvdXJjZUF0dHIuX25hbWVzcGFjZVByZWZpeCxcbiAgICAgIGxvY2FsTmFtZTogc291cmNlQXR0ci5fbG9jYWxOYW1lLFxuICAgICAgdmFsdWU6IHNvdXJjZUF0dHIuX3ZhbHVlXG4gICAgfSk7XG5cbiAgICBleHBvcnRzLmFwcGVuZEF0dHJpYnV0ZShkZXN0RWxlbWVudCwgZGVzdEF0dHIpO1xuICB9XG59O1xuXG5leHBvcnRzLmF0dHJpYnV0ZUxpc3RzRXF1YWwgPSBmdW5jdGlvbiAoZWxlbWVudEEsIGVsZW1lbnRCKSB7XG4gIC8vIE5lZWRlZCBieSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbm9kZS1lcXVhbHNcblxuICBjb25zdCBsaXN0QSA9IGVsZW1lbnRBLl9hdHRyaWJ1dGVzW0lOVEVSTkFMXS5hdHRyaWJ1dGVMaXN0O1xuICBjb25zdCBsaXN0QiA9IGVsZW1lbnRCLl9hdHRyaWJ1dGVzW0lOVEVSTkFMXS5hdHRyaWJ1dGVMaXN0O1xuXG4gIGlmIChsaXN0QS5sZW5ndGggIT09IGxpc3RCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdEEubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBhdHRyQSA9IGxpc3RBW2ldO1xuXG4gICAgaWYgKCFsaXN0Qi5zb21lKGF0dHJCID0+IGVxdWFsc0EoYXR0ckIpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVxdWFsc0EoYXR0ckIpIHtcbiAgICAgIHJldHVybiBhdHRyQS5fbmFtZXNwYWNlID09PSBhdHRyQi5fbmFtZXNwYWNlICYmIGF0dHJBLl9sb2NhbE5hbWUgPT09IGF0dHJCLl9sb2NhbE5hbWUgJiZcbiAgICAgICAgICAgICBhdHRyQS5fdmFsdWUgPT09IGF0dHJCLl92YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydHMuYXR0cmlidXRlTmFtZXMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAvLyBOZWVkZWQgYnkgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZWxlbWVudC1nZXRhdHRyaWJ1dGVuYW1lc1xuXG4gIHJldHVybiBlbGVtZW50Ll9hdHRyaWJ1dGVzW0lOVEVSTkFMXS5hdHRyaWJ1dGVMaXN0Lm1hcChnZXRBdHRySW1wbFF1YWxpZmllZE5hbWUpO1xufTtcblxuZXhwb3J0cy5oYXNBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgLy8gTmVlZGVkIGJ5IGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWVsZW1lbnQtaGFzYXR0cmlidXRlc1xuXG4gIHJldHVybiBlbGVtZW50Ll9hdHRyaWJ1dGVzW0lOVEVSTkFMXS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aCA+IDA7XG59O1xuXG5mdW5jdGlvbiBzaG91bGROYW1lQmVJbk5OTVByb3BzKGVsZW1lbnQsIG5hbWUpIHtcbiAgaWYgKGVsZW1lbnQuX293bmVyRG9jdW1lbnQuX3BhcnNpbmdNb2RlID09PSBcImh0bWxcIiAmJiBlbGVtZW50Ll9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSB7XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgQXR0ckltcGwge1xuICBjb25zdHJ1Y3RvcihfLCBwcml2YXRlRGF0YSkge1xuICAgIHRoaXMuX25hbWVzcGFjZSA9IHByaXZhdGVEYXRhLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkID8gcHJpdmF0ZURhdGEubmFtZXNwYWNlIDogbnVsbDtcbiAgICB0aGlzLl9uYW1lc3BhY2VQcmVmaXggPSBwcml2YXRlRGF0YS5uYW1lc3BhY2VQcmVmaXggIT09IHVuZGVmaW5lZCA/IHByaXZhdGVEYXRhLm5hbWVzcGFjZVByZWZpeCA6IG51bGw7XG4gICAgdGhpcy5fbG9jYWxOYW1lID0gcHJpdmF0ZURhdGEubG9jYWxOYW1lO1xuICAgIHRoaXMuX3ZhbHVlID0gcHJpdmF0ZURhdGEudmFsdWUgIT09IHVuZGVmaW5lZCA/IHByaXZhdGVEYXRhLnZhbHVlIDogXCJcIjtcbiAgICB0aGlzLl9lbGVtZW50ID0gcHJpdmF0ZURhdGEuZWxlbWVudCAhPT0gdW5kZWZpbmVkID8gcHJpdmF0ZURhdGEuZWxlbWVudCA6IG51bGw7XG5cbiAgICB0aGlzLnNwZWNpZmllZCA9IHRydWU7XG4gIH1cblxuICBnZXQgbmFtZXNwYWNlVVJJKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lc3BhY2U7XG4gIH1cblxuICBnZXQgcHJlZml4KCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lc3BhY2VQcmVmaXg7XG4gIH1cblxuICBnZXQgbG9jYWxOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2NhbE5hbWU7XG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5nZXRBdHRySW1wbFF1YWxpZmllZE5hbWUodGhpcyk7XG4gIH1cblxuICAvLyBEZWxlZ2F0ZSB0byBuYW1lXG4gIGdldCBub2RlTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICh0aGlzLl9lbGVtZW50ID09PSBudWxsKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cG9ydHMuY2hhbmdlQXR0cmlidXRlSW1wbCh0aGlzLl9lbGVtZW50LCB0aGlzLCB2KTtcbiAgICB9XG4gIH1cblxuICAvLyBEZWxlZ2F0ZSB0byB2YWx1ZVxuICBnZXQgbm9kZVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG4gIHNldCBub2RlVmFsdWUodikge1xuICAgIHRoaXMudmFsdWUgPSB2O1xuICB9XG5cbiAgLy8gRGVsZWdhdGUgdG8gdmFsdWVcbiAgZ2V0IHRleHRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG4gIHNldCB0ZXh0Q29udGVudCh2KSB7XG4gICAgdGhpcy52YWx1ZSA9IHY7XG4gIH1cblxuICBnZXQgb3duZXJFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50O1xuICB9XG59O1xuXG5leHBvcnRzLmNoYW5nZUF0dHJpYnV0ZUltcGwgPSBmdW5jdGlvbiAoZWxlbWVudCwgYXR0cmlidXRlSW1wbCwgdmFsdWUpIHtcbiAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVsZW1lbnQtYXR0cmlidXRlcy1jaGFuZ2VcblxuICAvLyBUT0RPIG11dGF0aW9uIG9ic2VydmVyIHN0dWZmXG5cbiAgY29uc3Qgb2xkVmFsdWUgPSBhdHRyaWJ1dGVJbXBsLl92YWx1ZTtcbiAgYXR0cmlidXRlSW1wbC5fdmFsdWUgPSB2YWx1ZTtcblxuICAvLyBSdW4ganNkb20gaG9va3M7IHJvdWdobHkgY29ycmVzcG9uZCB0byBzcGVjJ3MgXCJBbiBhdHRyaWJ1dGUgaXMgc2V0IGFuZCBhbiBhdHRyaWJ1dGUgaXMgY2hhbmdlZC5cIlxuICBlbGVtZW50Ll9hdHRyTW9kaWZpZWQoZXhwb3J0cy5nZXRBdHRySW1wbFF1YWxpZmllZE5hbWUoYXR0cmlidXRlSW1wbCksIHZhbHVlLCBvbGRWYWx1ZSk7XG59O1xuXG5leHBvcnRzLmdldEF0dHJJbXBsUXVhbGlmaWVkTmFtZSA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVJbXBsKSB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1hdHRyaWJ1dGUtcXVhbGlmaWVkLW5hbWVcblxuICBpZiAoYXR0cmlidXRlSW1wbC5fbmFtZXNwYWNlUHJlZml4ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZUltcGwuX2xvY2FsTmFtZTtcbiAgfVxuXG4gIHJldHVybiBhdHRyaWJ1dGVJbXBsLl9uYW1lc3BhY2VQcmVmaXggKyBcIjpcIiArIGF0dHJpYnV0ZUltcGwuX2xvY2FsTmFtZTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3Qgb3JkZXJlZFNldFBhcnNlciA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvb3JkZXJlZC1zZXQtcGFyc2VyXCIpO1xuXG4vLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbXRva2VubGlzdFxuXG5jb25zdCBJTlRFUk5BTCA9IFN5bWJvbChcIkRPTVRva2VuTGlzdCBpbnRlcm5hbFwiKTtcblxuY2xhc3MgRE9NVG9rZW5MaXN0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG4gIH1cblxuICBpdGVtKGluZGV4KSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIGxlbmd0aCA8PSBpbmRleCB8fCBpbmRleCA8IDAgPyBudWxsIDogdGhpc1tpbmRleF07XG4gIH1cblxuICBjb250YWlucyh0b2tlbikge1xuICAgIHRva2VuID0gU3RyaW5nKHRva2VuKTtcbiAgICByZXR1cm4gaW5kZXhPZih0aGlzLCB0b2tlbikgIT09IC0xO1xuICB9XG5cbiAgcmVwbGFjZSh0b2tlbiwgbmV3VG9rZW4pIHtcbiAgICB0b2tlbiA9IFN0cmluZyh0b2tlbik7XG4gICAgbmV3VG9rZW4gPSBTdHJpbmcobmV3VG9rZW4pO1xuICAgIHZhbGlkYXRlVG9rZW5zKHRva2VuLCBuZXdUb2tlbik7XG4gICAgY29uc3QgdG9rZW5JbmRleCA9IGluZGV4T2YodGhpcywgdG9rZW4pO1xuICAgIGlmICh0b2tlbkluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdUb2tlbkluZGV4ID0gaW5kZXhPZih0aGlzLCBuZXdUb2tlbik7XG4gICAgaWYgKG5ld1Rva2VuSW5kZXggIT09IC0xKSB7XG4gICAgICBzcGxpY2VMaXRlKHRoaXMsIG5ld1Rva2VuSW5kZXgsIDEpO1xuICAgIH1cbiAgICB0aGlzW0lOVEVSTkFMXS50b2tlbnNbdG9rZW5JbmRleF0gPSBuZXdUb2tlbjtcbiAgICB1cGRhdGUodGhpcyk7XG4gIH1cblxuICBhZGQoLyogdG9rZW5zLi4uICovKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRva2VuID0gU3RyaW5nKGFyZ3VtZW50c1tpXSk7XG4gICAgICB2YWxpZGF0ZVRva2Vucyh0b2tlbik7XG5cbiAgICAgIGlmIChpbmRleE9mKHRoaXMsIHRva2VuKSA9PT0gLTEpIHtcbiAgICAgICAgcHVzaCh0aGlzLCB0b2tlbik7XG4gICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZSh0aGlzKTtcbiAgfVxuXG4gIHJlbW92ZSgvKiB0b2tlbnMuLi4gKi8pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdG9rZW4gPSBTdHJpbmcoYXJndW1lbnRzW2ldKTtcbiAgICAgIHZhbGlkYXRlVG9rZW5zKHRva2VuKTtcblxuICAgICAgY29uc3QgaW5kZXggPSBpbmRleE9mKHRoaXMsIHRva2VuKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgc3BsaWNlTGl0ZSh0aGlzLCBpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZSh0aGlzKTtcbiAgfVxuXG4gIC8vIGlmIGZvcmNlIGlzIHRydWUsIHRoaXMgYmVoYXZlcyBsaWtlIGFkZFxuICAvLyBpZiBmb3JjZSBpcyBmYWxzZSwgdGhpcyBiZWhhdmVzIGxpa2UgcmVtb3ZlXG4gIC8vIGlmIGZvcmNlIGlzIHVuZGVmaW5lZCwgdGhpcyBiZWhhdmVzIGFzIG9uZSB3b3VsZCBleHBlY3QgdG9nZ2xlIHRvXG4gIC8vIGFsd2F5cyByZXR1cm5zIHdoZXRoZXIgY2xhc3NMaXN0IGNvbnRhaW5zIHRva2VuIGFmdGVyIHRvZ2dsaW5nXG4gIHRvZ2dsZSh0b2tlbiwgZm9yY2UpIHtcbiAgICB0b2tlbiA9IFN0cmluZyh0b2tlbik7XG4gICAgZm9yY2UgPSBmb3JjZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogQm9vbGVhbihmb3JjZSk7XG5cbiAgICB2YWxpZGF0ZVRva2Vucyh0b2tlbik7XG5cbiAgICBjb25zdCBpbmRleCA9IGluZGV4T2YodGhpcywgdG9rZW4pO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKGZvcmNlID09PSBmYWxzZSB8fCBmb3JjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNwbGljZUxpdGUodGhpcywgaW5kZXgsIDEpO1xuICAgICAgICB1cGRhdGUodGhpcyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGZvcmNlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1c2godGhpcywgdG9rZW4pO1xuICAgIHVwZGF0ZSh0aGlzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXNbSU5URVJOQUxdLnRva2Vucy5sZW5ndGg7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZSh0aGlzKTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2KSB7XG4gICAgdGhpc1tJTlRFUk5BTF0uZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpc1tJTlRFUk5BTF0uYXR0cmlidXRlLCB2KTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBzZXJpYWxpemUodGhpcyk7XG4gIH1cbn1cblxuRE9NVG9rZW5MaXN0LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJET01Ub2tlbkxpc3RcIjtcblxuZnVuY3Rpb24gc2VyaWFsaXplKGxpc3QpIHtcbiAgY29uc3QgdmFsdWUgPSBsaXN0W0lOVEVSTkFMXS5lbGVtZW50LmdldEF0dHJpYnV0ZShsaXN0W0lOVEVSTkFMXS5hdHRyaWJ1dGUpO1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVG9rZW5zKC8qIHRva2Vucy4uLiAqLykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHRva2VuID0gU3RyaW5nKGFyZ3VtZW50c1tpXSk7XG4gICAgaWYgKHRva2VuID09PSBcIlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSLCBcIlRoZSB0b2tlbiBwcm92aWRlZCBtdXN0IG5vdCBiZSBlbXB0eS5cIik7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSBTdHJpbmcoYXJndW1lbnRzW2ldKTtcbiAgICBpZiAoL1xccy8udGVzdCh0b2tlbikpIHtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2VNc2cgPSBcIlRoZSB0b2tlbiBwcm92aWRlZCBjb250YWlucyBIVE1MIHNwYWNlIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSBub3QgdmFsaWQgaW4gdG9rZW5zLlwiO1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9DSEFSQUNURVJfRVJSLCB3aGl0ZXNwYWNlTXNnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlKGxpc3QpIHtcbiAgY29uc3QgYXR0cmlidXRlID0gbGlzdFtJTlRFUk5BTF0uYXR0cmlidXRlO1xuICBsaXN0W0lOVEVSTkFMXS5lbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGxpc3RbSU5URVJOQUxdLnRva2Vucy5qb2luKFwiIFwiKSk7XG59XG5cbi8vIGNhbGxzIGluZGV4T2Ygb24gaW50ZXJuYWwgYXJyYXlcbmZ1bmN0aW9uIGluZGV4T2YoZHRsLCB0b2tlbikge1xuICByZXR1cm4gZHRsW0lOVEVSTkFMXS50b2tlbnMuaW5kZXhPZih0b2tlbik7XG59XG5cbi8vIGNhbGxzIHB1c2ggb24gaW50ZXJuYWwgYXJyYXksIHRoZW4gbWFudWFsbHkgYWRkcyBpbmRleGVkIHByb3BlcnR5IHRvIGR0bFxuZnVuY3Rpb24gcHVzaChkdGwsIHRva2VuKSB7XG4gIGNvbnN0IGxlbiA9IGR0bFtJTlRFUk5BTF0udG9rZW5zLnB1c2godG9rZW4pO1xuICBkdGxbbGVuIC0gMV0gPSB0b2tlbjtcblxuICByZXR1cm4gbGVuO1xufVxuXG4vLyBjYWxscyBzcGxpY2Ugb24gaW50ZXJuYWwgYXJyYXkgdGhlbiByZXdyaXRlcyBpbmRleGVkIHByb3BlcnRpZXMgb2YgZHRsXG4vLyBkb2VzIG5vdCBhbGxvdyBpdGVtcyB0byBiZSBhZGRlZCwgb25seSByZW1vdmVkLCBzbyBzcGxpY2UtbGl0ZVxuZnVuY3Rpb24gc3BsaWNlTGl0ZShkdGwsIHN0YXJ0LCBkZWxldGVDb3VudCkge1xuICBjb25zdCB0b2tlbnMgPSBkdGxbSU5URVJOQUxdLnRva2VucztcbiAgY29uc3QgcmVtb3ZlZFRva2VucyA9IHRva2Vucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcblxuICAvLyByZW1vdmUgaW5kZXhlZCBwcm9wZXJ0aWVzIGZyb20gbGlzdFxuICBjb25zdCByZSA9IC9eXFxkKyQvO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBkdGwpIHtcbiAgICBpZiAocmUudGVzdChwcm9wKSkge1xuICAgICAgZGVsZXRlIGR0bFtwcm9wXTtcbiAgICB9XG4gIH1cblxuICAvLyBjb3B5IGluZGV4ZWQgcHJvcGVydGllcyBmcm9tIGludGVybmFsIGFycmF5XG4gIGNvbnN0IGxlbiA9IHRva2Vucy5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGR0bFtpXSA9IHRva2Vuc1tpXTtcbiAgfVxuXG4gIHJldHVybiByZW1vdmVkVG9rZW5zO1xufVxuXG5leHBvcnRzLkRPTVRva2VuTGlzdCA9IERPTVRva2VuTGlzdDtcblxuLy8gc2V0IGRvbSB0b2tlbiBsaXN0IHdpdGhvdXQgcnVubmluZyB1cGRhdGUgc3RlcHNcbmV4cG9ydHMucmVzZXQgPSBmdW5jdGlvbiByZXNldERPTVRva2VuTGlzdChsaXN0LCB2YWx1ZSkge1xuICBjb25zdCB0b2tlbnMgPSBsaXN0W0lOVEVSTkFMXS50b2tlbnM7XG5cbiAgc3BsaWNlTGl0ZShsaXN0LCAwLCB0b2tlbnMubGVuZ3RoKTtcblxuICBpZiAodmFsdWUpIHtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIG9yZGVyZWRTZXRQYXJzZXIodmFsdWUpKSB7XG4gICAgICBwdXNoKGxpc3QsIHRva2VuKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydHMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlRE9NVG9rZW5MaXN0KGVsZW1lbnQsIGF0dHJpYnV0ZSkge1xuICBjb25zdCBsaXN0ID0gT2JqZWN0LmNyZWF0ZShET01Ub2tlbkxpc3QucHJvdG90eXBlKTtcblxuICBsaXN0W0lOVEVSTkFMXSA9IHtcbiAgICBlbGVtZW50LFxuICAgIGF0dHJpYnV0ZSxcbiAgICB0b2tlbnM6IFtdXG4gIH07XG5cbiAgZXhwb3J0cy5yZXNldChsaXN0LCBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTtcblxuICByZXR1cm4gbGlzdDtcbn07XG5cbmV4cG9ydHMuY29udGFpbnMgPSBmdW5jdGlvbiBkb21Ub2tlbkxpc3RDb250YWlucyhsaXN0LCB0b2tlbiwgb3B0aW9ucykge1xuICBjb25zdCBjYXNlSW5zZW5zaXRpdmUgPSBvcHRpb25zICYmIG9wdGlvbnMuY2FzZUluc2Vuc2l0aXZlO1xuXG4gIGlmICghY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgcmV0dXJuIGluZGV4T2YobGlzdCwgdG9rZW4pICE9PSAtMTtcbiAgfVxuXG4gIGNvbnN0IHRva2VucyA9IGxpc3RbSU5URVJOQUxdLnRva2VucztcbiAgY29uc3QgbG93ZXJUb2tlbiA9IHRva2VuLnRvTG93ZXJDYXNlKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHRva2Vuc1tpXS50b0xvd2VyQ2FzZSgpID09PSBsb3dlclRva2VuKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgRG9jdW1lbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0RvY3VtZW50XCIpO1xuY29uc3QgY29yZSA9IHJlcXVpcmUoXCIuLlwiKTtcbmNvbnN0IGFwcGx5RG9jdW1lbnRGZWF0dXJlcyA9IHJlcXVpcmUoXCIuLi8uLi9icm93c2VyL2RvY3VtZW50ZmVhdHVyZXNcIikuYXBwbHlEb2N1bWVudEZlYXR1cmVzO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgRE9NUGFyc2VySW1wbCB7XG4gIHBhcnNlRnJvbVN0cmluZyhzdHJpbmcsIGNvbnRlbnRUeXBlKSB7XG4gICAgc3dpdGNoIChTdHJpbmcoY29udGVudFR5cGUpKSB7XG4gICAgICBjYXNlIFwidGV4dC9odG1sXCI6IHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNjcmlwdGluZ0Rpc2FibGVkRG9jdW1lbnQoXCJodG1sXCIsIGNvbnRlbnRUeXBlLCBzdHJpbmcpO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFwidGV4dC94bWxcIjpcbiAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi94bWxcIjpcbiAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi94aHRtbCt4bWxcIjpcbiAgICAgIGNhc2UgXCJpbWFnZS9zdmcreG1sXCI6IHtcbiAgICAgICAgLy8gVE9ETzogdXNlIGEgc3RyaWN0IFhNTCBwYXJzZXIgKHNheCdzIHN0cmljdCBtb2RlIG1pZ2h0IHdvcms/KSBhbmQgY3JlYXRlIHBhcnNlcmVycm9yIGVsZW1lbnRzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVNjcmlwdGluZ0Rpc2FibGVkRG9jdW1lbnQoXCJ4bWxcIiwgY29udGVudFR5cGUsIHN0cmluZyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBjcmVhdGVTY3JpcHRpbmdEaXNhYmxlZERvY3VtZW50KFwieG1sXCIsIGNvbnRlbnRUeXBlKTtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgICAgXCJodHRwOi8vd3d3Lm1vemlsbGEub3JnL25ld2xheW91dC94bWwvcGFyc2VyZXJyb3IueG1sXCIsIFwicGFyc2VyZXJyb3JcIik7XG5cbiAgICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gZXJyb3IubWVzc2FnZTtcblxuICAgICAgICAgIGRvY3VtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBjb250ZW50VHlwZVwiKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVNjcmlwdGluZ0Rpc2FibGVkRG9jdW1lbnQocGFyc2luZ01vZGUsIGNvbnRlbnRUeXBlLCBzdHJpbmcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBEb2N1bWVudC5jcmVhdGVJbXBsKFtdLCB7XG4gICAgY29yZSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBwYXJzaW5nTW9kZSxcbiAgICAgIGVuY29kaW5nOiBcIlVURi04XCIsXG4gICAgICBjb250ZW50VHlwZVxuICAgICAgLy8gVE9ETzogc29tZWhvdyBzZXQgVVJMIHRvIGFjdGl2ZSBkb2N1bWVudCdzIFVSTFxuICAgIH1cbiAgfSk7XG5cbiAgLy8gXCJzY3JpcHRpbmcgZW5hYmxlZFwiIHNldCB0byBmYWxzZVxuICBhcHBseURvY3VtZW50RmVhdHVyZXMoZG9jdW1lbnQsIHtcbiAgICBGZXRjaEV4dGVybmFsUmVzb3VyY2VzOiBbXSxcbiAgICBTa2lwRXh0ZXJuYWxSZXNvdXJjZXM6IGZhbHNlXG4gIH0pO1xuXG4gIGlmIChzdHJpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGRvY3VtZW50Ll9odG1sVG9Eb20uYXBwZW5kSHRtbFRvRG9jdW1lbnQoc3RyaW5nLCBkb2N1bWVudCk7XG4gIH1cbiAgZG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGRvY3VtZW50O1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEV2ZW50SW1wbCA9IHJlcXVpcmUoXCIuL0V2ZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEN1c3RvbUV2ZW50SW1wbCBleHRlbmRzIEV2ZW50SW1wbCB7XG4gIGluaXRDdXN0b21FdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCBkZXRhaWwpIHtcbiAgICBpZiAodGhpcy5fZGlzcGF0Y2hGbGFnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbml0RXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSk7XG4gICAgdGhpcy5kZXRhaWwgPSBkZXRhaWw7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBDdXN0b21FdmVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRXZlbnRJbXBsID0gcmVxdWlyZShcIi4vRXZlbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgRXJyb3JFdmVudEltcGwgZXh0ZW5kcyBFdmVudEltcGwge1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogRXJyb3JFdmVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRXZlbnRJbml0ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9FdmVudEluaXRcIik7XG5cbmNsYXNzIEV2ZW50SW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgY29uc3QgW3R5cGUsIGV2ZW50SW5pdERpY3QgPSBFdmVudEluaXQuY29udmVydCh1bmRlZmluZWQpXSA9IGFyZ3M7XG5cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gICAgY29uc3Qgd3JhcHBlciA9IHByaXZhdGVEYXRhLndyYXBwZXI7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnRJbml0RGljdCkge1xuICAgICAgaWYgKGtleSBpbiB3cmFwcGVyKSB7XG4gICAgICAgIHRoaXNba2V5XSA9IGV2ZW50SW5pdERpY3Rba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLmV2ZW50UGhhc2UgPSAwO1xuXG4gICAgdGhpcy5faW5pdGlhbGl6ZWRGbGFnID0gdHJ1ZTtcbiAgICB0aGlzLl9zdG9wUHJvcGFnYXRpb25GbGFnID0gZmFsc2U7XG4gICAgdGhpcy5fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uRmxhZyA9IGZhbHNlO1xuICAgIHRoaXMuX2NhbmNlbGVkRmxhZyA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3BhdGNoRmxhZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5pc1RydXN0ZWQgPSBwcml2YXRlRGF0YS5pc1RydXN0ZWQgfHwgZmFsc2U7XG4gICAgdGhpcy50aW1lU3RhbXAgPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRQcmV2ZW50ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbmNlbGVkRmxhZztcbiAgfVxuXG4gIHN0b3BQcm9wYWdhdGlvbigpIHtcbiAgICB0aGlzLl9zdG9wUHJvcGFnYXRpb25GbGFnID0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBjYW5jZWxCdWJibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3BQcm9wYWdhdGlvbkZsYWc7XG4gIH1cblxuICBzZXQgY2FuY2VsQnViYmxlKHYpIHtcbiAgICBpZiAodikge1xuICAgICAgdGhpcy5fc3RvcFByb3BhZ2F0aW9uRmxhZyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkge1xuICAgIHRoaXMuX3N0b3BQcm9wYWdhdGlvbkZsYWcgPSB0cnVlO1xuICAgIHRoaXMuX3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbkZsYWcgPSB0cnVlO1xuICB9XG5cbiAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgaWYgKHRoaXMuY2FuY2VsYWJsZSkge1xuICAgICAgdGhpcy5fY2FuY2VsZWRGbGFnID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBfaW5pdGlhbGl6ZSh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLl9pbml0aWFsaXplZEZsYWcgPSB0cnVlO1xuXG4gICAgdGhpcy5fc3RvcFByb3BhZ2F0aW9uRmxhZyA9IGZhbHNlO1xuICAgIHRoaXMuX3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbkZsYWcgPSBmYWxzZTtcbiAgICB0aGlzLl9jYW5jZWxlZEZsYWcgPSBmYWxzZTtcblxuICAgIHRoaXMuaXNUcnVzdGVkID0gZmFsc2U7XG4gICAgdGhpcy50YXJnZXQgPSBudWxsO1xuICAgIHRoaXMuYnViYmxlcyA9IGJ1YmJsZXM7XG4gICAgdGhpcy5jYW5jZWxhYmxlID0gY2FuY2VsYWJsZTtcbiAgfVxuXG4gIGluaXRFdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlKSB7XG4gICAgaWYgKHRoaXMuX2Rpc3BhdGNoRmxhZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRpYWxpemUodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBFdmVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcbmNvbnN0IHJlcG9ydEV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3J1bnRpbWUtc2NyaXB0LWVycm9yc1wiKTtcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcblxuY29uc3QgRXZlbnRJbXBsID0gcmVxdWlyZShcIi4vRXZlbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IEV2ZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9FdmVudFwiKS5pbnRlcmZhY2U7XG5cbmNsYXNzIEV2ZW50VGFyZ2V0SW1wbCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAvLyB3ZWJpZGwyanMgY3VycmVudGx5IGNhbid0IGhhbmRsZSBuZWl0aGVyIG9wdGlvbmFsIGFyZ3VtZW50cyBub3IgY2FsbGJhY2sgaW50ZXJmYWNlc1xuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkIHx8IGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICBjYWxsYmFjayA9IG51bGw7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPbmx5IHVuZGVmaW5lZCwgbnVsbCwgYW4gb2JqZWN0LCBvciBhIGZ1bmN0aW9uIGFyZSBhbGxvd2VkIGZvciB0aGUgY2FsbGJhY2sgcGFyYW1ldGVyXCIpO1xuICAgIH1cblxuICAgIG9wdGlvbnMgPSBub3JtYWxpemVFdmVudEhhbmRsZXJPcHRpb25zKG9wdGlvbnMsIFtcImNhcHR1cmVcIiwgXCJvbmNlXCJdKTtcblxuICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fZXZlbnRMaXN0ZW5lcnNbdHlwZV0pIHtcbiAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW3R5cGVdID0gW107XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9ldmVudExpc3RlbmVyc1t0eXBlXS5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSB0aGlzLl9ldmVudExpc3RlbmVyc1t0eXBlXVtpXTtcbiAgICAgIGlmIChsaXN0ZW5lci5vcHRpb25zLmNhcHR1cmUgPT09IG9wdGlvbnMuY2FwdHVyZSAmJiBsaXN0ZW5lci5jYWxsYmFjayA9PT0gY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW3R5cGVdLnB1c2goe1xuICAgICAgY2FsbGJhY2ssXG4gICAgICBvcHRpb25zXG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQgfHwgY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9ubHkgdW5kZWZpbmVkLCBudWxsLCBhbiBvYmplY3QsIG9yIGEgZnVuY3Rpb24gYXJlIGFsbG93ZWQgZm9yIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXJcIik7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IG5vcm1hbGl6ZUV2ZW50SGFuZGxlck9wdGlvbnMob3B0aW9ucywgW1wiY2FwdHVyZVwiXSk7XG5cbiAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgIC8vIE9wdGltaXphdGlvbiwgbm90IGluIHRoZSBzcGVjLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fZXZlbnRMaXN0ZW5lcnNbdHlwZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2V2ZW50TGlzdGVuZXJzW3R5cGVdLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lciA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzW3R5cGVdW2ldO1xuICAgICAgaWYgKGxpc3RlbmVyLmNhbGxiYWNrID09PSBjYWxsYmFjayAmJiBsaXN0ZW5lci5vcHRpb25zLmNhcHR1cmUgPT09IG9wdGlvbnMuY2FwdHVyZSkge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVyc1t0eXBlXS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRpc3BhdGNoRXZlbnQoZXZlbnRJbXBsKSB7XG4gICAgaWYgKCEoZXZlbnRJbXBsIGluc3RhbmNlb2YgRXZlbnRJbXBsKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IHRvIGRpc3BhdGNoRXZlbnQgbXVzdCBiZSBhbiBFdmVudFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRJbXBsLl9kaXNwYXRjaEZsYWcgfHwgIWV2ZW50SW1wbC5faW5pdGlhbGl6ZWRGbGFnKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUiwgXCJUcmllZCB0byBkaXNwYXRjaCBhbiB1bmluaXRpYWxpemVkIGV2ZW50XCIpO1xuICAgIH1cbiAgICBpZiAoZXZlbnRJbXBsLmV2ZW50UGhhc2UgIT09IEV2ZW50Lk5PTkUpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSLCBcIlRyaWVkIHRvIGRpc3BhdGNoIGEgZGlzcGF0Y2hpbmcgZXZlbnRcIik7XG4gICAgfVxuXG4gICAgZXZlbnRJbXBsLmlzVHJ1c3RlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoKGV2ZW50SW1wbCk7XG4gIH1cblxuICBfZGlzcGF0Y2goZXZlbnRJbXBsLCB0YXJnZXRPdmVycmlkZSkge1xuICAgIGV2ZW50SW1wbC5fZGlzcGF0Y2hGbGFnID0gdHJ1ZTtcbiAgICBldmVudEltcGwudGFyZ2V0ID0gdGFyZ2V0T3ZlcnJpZGUgfHwgdGhpcztcblxuICAgIGNvbnN0IGV2ZW50UGF0aCA9IFtdO1xuICAgIGxldCB0YXJnZXRQYXJlbnQgPSBkb21TeW1ib2xUcmVlLnBhcmVudChldmVudEltcGwudGFyZ2V0KTtcbiAgICBsZXQgdGFyZ2V0ID0gZXZlbnRJbXBsLnRhcmdldDtcbiAgICB3aGlsZSAodGFyZ2V0UGFyZW50KSB7XG4gICAgICBldmVudFBhdGgucHVzaCh0YXJnZXRQYXJlbnQpO1xuICAgICAgdGFyZ2V0ID0gdGFyZ2V0UGFyZW50O1xuICAgICAgdGFyZ2V0UGFyZW50ID0gZG9tU3ltYm9sVHJlZS5wYXJlbnQodGFyZ2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50SW1wbC50eXBlICE9PSBcImxvYWRcIiAmJiB0YXJnZXQuX2RlZmF1bHRWaWV3KSB7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNldmVudHMtYW5kLXRoZS13aW5kb3ctb2JqZWN0XG4gICAgICBldmVudFBhdGgucHVzaChpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0YXJnZXQuX2RlZmF1bHRWaWV3KSk7XG4gICAgfVxuXG4gICAgZXZlbnRJbXBsLmV2ZW50UGhhc2UgPSBFdmVudC5DQVBUVVJJTkdfUEhBU0U7XG4gICAgZm9yIChsZXQgaSA9IGV2ZW50UGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgaWYgKGV2ZW50SW1wbC5fc3RvcFByb3BhZ2F0aW9uRmxhZykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2JqZWN0ID0gZXZlbnRQYXRoW2ldO1xuICAgICAgY29uc3Qgb2JqZWN0SW1wbCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKG9iamVjdCkgfHwgb2JqZWN0OyAvLyB3aW5kb3cgOihcbiAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJzID0gb2JqZWN0SW1wbC5fZXZlbnRMaXN0ZW5lcnNbZXZlbnRJbXBsLnR5cGVdO1xuICAgICAgaW52b2tlRXZlbnRMaXN0ZW5lcnMoZXZlbnRMaXN0ZW5lcnMsIG9iamVjdCwgZXZlbnRJbXBsKTtcbiAgICB9XG5cbiAgICBldmVudEltcGwuZXZlbnRQaGFzZSA9IEV2ZW50LkFUX1RBUkdFVDtcblxuICAgIGlmICghZXZlbnRJbXBsLl9zdG9wUHJvcGFnYXRpb25GbGFnKSB7XG4gICAgICBpbnZva2VJbmxpbmVMaXN0ZW5lcnMoZXZlbnRJbXBsLnRhcmdldCwgZXZlbnRJbXBsKTtcblxuICAgICAgaWYgKHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50SW1wbC50eXBlXSkge1xuICAgICAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzW2V2ZW50SW1wbC50eXBlXTtcbiAgICAgICAgaW52b2tlRXZlbnRMaXN0ZW5lcnMoZXZlbnRMaXN0ZW5lcnMsIGV2ZW50SW1wbC50YXJnZXQsIGV2ZW50SW1wbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50SW1wbC5idWJibGVzKSB7XG4gICAgICBldmVudEltcGwuZXZlbnRQaGFzZSA9IEV2ZW50LkJVQkJMSU5HX1BIQVNFO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudFBhdGgubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKGV2ZW50SW1wbC5fc3RvcFByb3BhZ2F0aW9uRmxhZykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gZXZlbnRQYXRoW2ldO1xuICAgICAgICBjb25zdCBvYmplY3RJbXBsID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIob2JqZWN0KSB8fCBvYmplY3Q7IC8vIHdpbmRvdyA6KFxuICAgICAgICBjb25zdCBldmVudExpc3RlbmVycyA9IG9iamVjdEltcGwuX2V2ZW50TGlzdGVuZXJzW2V2ZW50SW1wbC50eXBlXTtcbiAgICAgICAgaW52b2tlSW5saW5lTGlzdGVuZXJzKG9iamVjdCwgZXZlbnRJbXBsKTtcbiAgICAgICAgaW52b2tlRXZlbnRMaXN0ZW5lcnMoZXZlbnRMaXN0ZW5lcnMsIG9iamVjdCwgZXZlbnRJbXBsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBldmVudEltcGwuX2Rpc3BhdGNoRmxhZyA9IGZhbHNlO1xuICAgIGV2ZW50SW1wbC5fc3RvcFByb3BhZ2F0aW9uRmxhZyA9IGZhbHNlO1xuICAgIGV2ZW50SW1wbC5fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uRmxhZyA9IGZhbHNlO1xuICAgIGV2ZW50SW1wbC5ldmVudFBoYXNlID0gRXZlbnQuTk9ORTtcbiAgICBldmVudEltcGwuY3VycmVudFRhcmdldCA9IG51bGw7XG4gICAgcmV0dXJuICFldmVudEltcGwuX2NhbmNlbGVkRmxhZztcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEV2ZW50VGFyZ2V0SW1wbFxufTtcblxuZnVuY3Rpb24gaW52b2tlSW5saW5lTGlzdGVuZXJzKG9iamVjdCwgZXZlbnQpIHtcbiAgY29uc3Qgd3JhcHBlciA9IGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKG9iamVjdCk7XG4gIGNvbnN0IGlubGluZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXJGb3JJbmxpbmVFdmVudEhhbmRsZXIod3JhcHBlciwgZXZlbnQudHlwZSk7XG4gIGlmIChpbmxpbmVMaXN0ZW5lcikge1xuICAgIC8vIFdpbGwgYmUgZmFsc3kgZm9yIHdpbmRvd3MgdGhhdCBoYXZlIGNsb3NlZFxuICAgIGNvbnN0IGRvY3VtZW50ID0gb2JqZWN0Ll9vd25lckRvY3VtZW50IHx8ICh3cmFwcGVyICYmICh3cmFwcGVyLl9kb2N1bWVudCB8fCB3cmFwcGVyLl9vd25lckRvY3VtZW50KSk7XG5cbiAgICBjb25zdCBydW5TY3JpcHRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuX2RlZmF1bHRWaWV3ICYmIGRvY3VtZW50Ll9kZWZhdWx0Vmlldy5fcnVuU2NyaXB0cyA9PT0gXCJkYW5nZXJvdXNseVwiO1xuICAgIGlmICghb2JqZWN0Lm5vZGVOYW1lIHx8IHJ1blNjcmlwdHMpIHtcbiAgICAgIGludm9rZUV2ZW50TGlzdGVuZXJzKFt7XG4gICAgICAgIGNhbGxiYWNrOiBpbmxpbmVMaXN0ZW5lcixcbiAgICAgICAgb3B0aW9uczogbm9ybWFsaXplRXZlbnRIYW5kbGVyT3B0aW9ucyhmYWxzZSwgW1wiY2FwdHVyZVwiLCBcIm9uY2VcIl0pXG4gICAgICB9XSwgb2JqZWN0LCBldmVudCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUV2ZW50TGlzdGVuZXJzKGxpc3RlbmVycywgdGFyZ2V0LCBldmVudEltcGwpIHtcbiAgY29uc3Qgd3JhcHBlciA9IGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRhcmdldCk7XG4gIGNvbnN0IGRvY3VtZW50ID0gdGFyZ2V0Ll9vd25lckRvY3VtZW50IHx8ICh3cmFwcGVyICYmICh3cmFwcGVyLl9kb2N1bWVudCB8fCB3cmFwcGVyLl9vd25lckRvY3VtZW50KSk7XG4gIC8vIFdpbGwgYmUgZmFsc3kgZm9yIHdpbmRvd3MgdGhhdCBoYXZlIGNsb3NlZFxuICBpZiAoIWRvY3VtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gd29ya2Fyb3VuZCBmb3IgZXZlbnRzIGVtaXR0ZWQgb24gd2luZG93ICh3aW5kb3ctcHJveHkpXG4gIC8vIHRoZSB3cmFwcGVyIGlzIHRoZSByb290IHdpbmRvdyBpbnN0YW5jZSwgYnV0IHdlIG9ubHkgd2FudCB0byBleHBvc2UgdGhlIHZtIHByb3h5IGF0IGFsbCB0aW1lc1xuICBpZiAod3JhcHBlci5fZG9jdW1lbnQpIHtcbiAgICB0YXJnZXQgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih3cmFwcGVyLl9kb2N1bWVudCkuX2RlZmF1bHRWaWV3O1xuICB9XG4gIGV2ZW50SW1wbC5jdXJyZW50VGFyZ2V0ID0gdGFyZ2V0O1xuICBpZiAoIWxpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZXJzID0gbGlzdGVuZXJzLnNsaWNlKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoZXZlbnRJbXBsLl9zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25GbGFnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdGVuZXIgPSBoYW5kbGVyc1tpXTtcbiAgICBjb25zdCBjYXB0dXJlID0gbGlzdGVuZXIub3B0aW9ucy5jYXB0dXJlO1xuICAgIGNvbnN0IG9uY2UgPSBsaXN0ZW5lci5vcHRpb25zLm9uY2U7XG4gICAgLy8gY29uc3QgcGFzc2l2ZSA9IGxpc3RlbmVyLm9wdGlvbnMucGFzc2l2ZTtcblxuICAgIGlmIChsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcikgPT09IC0xIHx8XG4gICAgICAgIChldmVudEltcGwuZXZlbnRQaGFzZSA9PT0gRXZlbnQuQ0FQVFVSSU5HX1BIQVNFICYmICFjYXB0dXJlKSB8fFxuICAgICAgICAoZXZlbnRJbXBsLmV2ZW50UGhhc2UgPT09IEV2ZW50LkJVQkJMSU5HX1BIQVNFICYmIGNhcHR1cmUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAob25jZSkge1xuICAgICAgbGlzdGVuZXJzLnNwbGljZShsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVyLmNhbGxiYWNrID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIuY2FsbGJhY2suaGFuZGxlRXZlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIGxpc3RlbmVyLmNhbGxiYWNrLmhhbmRsZUV2ZW50KGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGV2ZW50SW1wbCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaXN0ZW5lci5jYWxsYmFjay5jYWxsKGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGV2ZW50SW1wbC5jdXJyZW50VGFyZ2V0KSwgaWRsVXRpbHMud3JhcHBlckZvckltcGwoZXZlbnRJbXBsKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbGV0IHdpbmRvdyA9IG51bGw7XG4gICAgICBpZiAod3JhcHBlciAmJiB3cmFwcGVyLl9kb2N1bWVudCkge1xuICAgICAgICAvLyBUcmlnZ2VyZWQgYnkgV2luZG93XG4gICAgICAgIHdpbmRvdyA9IHdyYXBwZXI7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5fb3duZXJEb2N1bWVudCkge1xuICAgICAgICAvLyBUcmlnZ2VyZWQgYnkgbW9zdCB3ZWJpZGwyanMnZWQgaW5zdGFuY2VzXG4gICAgICAgIHdpbmRvdyA9IHRhcmdldC5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXc7XG4gICAgICB9IGVsc2UgaWYgKHdyYXBwZXIuX293bmVyRG9jdW1lbnQpIHtcbiAgICAgICAgLy8gQ3VycmVudGx5IHRyaWdnZXJlZCBieSBYSFIgYW5kIHNvbWUgb3RoZXIgbm9uLXdlYmlkbDJqcyB0aGluZ3NcbiAgICAgICAgd2luZG93ID0gd3JhcHBlci5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXc7XG4gICAgICB9XG5cbiAgICAgIGlmICh3aW5kb3cpIHtcbiAgICAgICAgcmVwb3J0RXhjZXB0aW9uKHdpbmRvdywgZSk7XG4gICAgICB9XG4gICAgICAvLyBFcnJvcnMgaW4gd2luZG93LWxlc3MgZG9jdW1lbnRzIGp1c3QgZ2V0IHN3YWxsb3dlZC4uLiBjYW4geW91IHRoaW5rIG9mIGFueXRoaW5nIGJldHRlcj9cbiAgICB9XG4gIH1cbn1cblxuY29uc3Qgd3JhcHBlZExpc3RlbmVyID0gU3ltYm9sKFwiaW5saW5lIGV2ZW50IGxpc3RlbmVyIHdyYXBwZXJcIik7XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBldmVudCBsaXN0ZW5lcnMgb3B0aW9ucyBhcmd1bWVudCBpbiBvcmRlciB0byBnZXQgYWx3YXlzIGEgdmFsaWQgb3B0aW9ucyBvYmplY3RcbiAqIEBwYXJhbSAgIHtPYmplY3R9IG9wdGlvbnMgICAgICAgICAtIHVzZXIgZGVmaW5lZCBvcHRpb25zXG4gKiBAcGFyYW0gICB7QXJyYXl9IGRlZmF1bHRCb29sS2V5cyAgLSBib29sZWFuIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmVsb25nIHRvIHRoZSBvcHRpb25zIG9iamVjdFxuICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IGNvbnRhaW5pbmcgYXQgbGVhc3QgdGhlIFwiZGVmYXVsdEJvb2xLZXlzXCJcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRIYW5kbGVyT3B0aW9ucyhvcHRpb25zLCBkZWZhdWx0Qm9vbEtleXMpIHtcbiAgY29uc3QgcmV0dXJuVmFsdWUgPSB7fTtcblxuICAvLyBubyBuZWVkIHRvIGdvIGZ1cnRoZXIgaGVyZVxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiYm9vbGVhblwiIHx8IG9wdGlvbnMgPT09IG51bGwgfHwgdHlwZW9mIG9wdGlvbnMgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm5WYWx1ZS5jYXB0dXJlID0gQm9vbGVhbihvcHRpb25zKTtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICAvLyBub24gb2JqZWN0cyBvcHRpb25zIHNvIHdlIHR5cGVjYXN0IGl0cyB2YWx1ZSBhcyBcImNhcHR1cmVcIiB2YWx1ZVxuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm5WYWx1ZS5jYXB0dXJlID0gQm9vbGVhbihvcHRpb25zKTtcbiAgICAvLyBhdCB0aGlzIHBvaW50IHdlIGRvbid0IG5lZWQgdG8gbG9vcCB0aGUgXCJjYXB0dXJlXCIga2V5IGFueW1vcmVcbiAgICBkZWZhdWx0Qm9vbEtleXMgPSBkZWZhdWx0Qm9vbEtleXMuZmlsdGVyKGsgPT4gayAhPT0gXCJjYXB0dXJlXCIpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgZGVmYXVsdEJvb2xLZXlzKSB7XG4gICAgcmV0dXJuVmFsdWVba2V5XSA9IEJvb2xlYW4ob3B0aW9uc1trZXldKTtcbiAgfVxuXG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0TGlzdGVuZXJGb3JJbmxpbmVFdmVudEhhbmRsZXIodGFyZ2V0LCB0eXBlKSB7XG4gIGNvbnN0IGNhbGxiYWNrID0gdGFyZ2V0W1wib25cIiArIHR5cGVdO1xuXG4gIGlmICghY2FsbGJhY2spIHsgLy8gVE9ETyBldmVudCBoYW5kbGVyczogb25seSBjaGVjayBudWxsXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoIWNhbGxiYWNrW3dyYXBwZWRMaXN0ZW5lcl0pIHtcbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWV2ZW50LWhhbmRsZXItcHJvY2Vzc2luZy1hbGdvcml0aG1cbiAgICBjYWxsYmFja1t3cmFwcGVkTGlzdGVuZXJdID0gZnVuY3Rpb24gKEUpIHtcbiAgICAgIGNvbnN0IGlzV2luZG93RXJyb3IgPSBFLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiRXJyb3JFdmVudFwiICYmIHR5cGUgPT09IFwiZXJyb3JcIjsgLy8gVE9ETyBicmFuZGluZ1xuXG4gICAgICBsZXQgcmV0dXJuVmFsdWU7XG4gICAgICBpZiAoaXNXaW5kb3dFcnJvcikge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrLmNhbGwoRS5jdXJyZW50VGFyZ2V0LCBFLm1lc3NhZ2UsIEUuZmlsZW5hbWUsIEUubGluZW5vLCBFLmNvbG5vLCBFLmVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2suY2FsbChFLmN1cnJlbnRUYXJnZXQsIEUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gXCJtb3VzZW92ZXJcIiB8fCBpc1dpbmRvd0Vycm9yKSB7XG4gICAgICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIEUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZXR1cm5WYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgRS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gY2FsbGJhY2tbd3JhcHBlZExpc3RlbmVyXTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgRXZlbnRJbXBsID0gcmVxdWlyZShcIi4vRXZlbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIEZvY3VzRXZlbnRJbXBsIGV4dGVuZHMgRXZlbnRJbXBsIHsgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBFdmVudEltcGwgPSByZXF1aXJlKFwiLi9FdmVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIYXNoQ2hhbmdlRXZlbnRJbXBsIGV4dGVuZHMgRXZlbnRJbXBsIHtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhhc2hDaGFuZ2VFdmVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgVUlFdmVudEltcGwgPSByZXF1aXJlKFwiLi9VSUV2ZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEtleWJvYXJkRXZlbnRJbXBsIGV4dGVuZHMgVUlFdmVudEltcGwge1xuICBpbml0S2V5Ym9hcmRFdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCB2aWV3LCBrZXksIGxvY2F0aW9uLCBtb2RpZmllcnNMaXN0LCByZXBlYXQsIGxvY2FsZSkge1xuICAgIGlmICh0aGlzLl9kaXNwYXRjaEZsYWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRVSUV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIHZpZXcsIGtleSk7XG4gICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgIHRoaXMubW9kaWZpZXJzTGlzdCA9IG1vZGlmaWVyc0xpc3Q7XG4gICAgdGhpcy5yZXBlYXQgPSByZXBlYXQ7XG4gICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBLZXlib2FyZEV2ZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBFdmVudEltcGwgPSByZXF1aXJlKFwiLi9FdmVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBNZXNzYWdlRXZlbnRJbXBsIGV4dGVuZHMgRXZlbnRJbXBsIHtcbiAgaW5pdE1lc3NhZ2VFdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCBkYXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzKSB7XG4gICAgaWYgKHRoaXMuX2Rpc3BhdGNoRmxhZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdEV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUpO1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW47XG4gICAgdGhpcy5sYXN0RXZlbnRJZCA9IGxhc3RFdmVudElkO1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIHRoaXMucG9ydHMgPSBwb3J0cztcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IE1lc3NhZ2VFdmVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgVUlFdmVudEltcGwgPSByZXF1aXJlKFwiLi9VSUV2ZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIE1vdXNlRXZlbnRJbXBsIGV4dGVuZHMgVUlFdmVudEltcGwge1xuICBpbml0TW91c2VFdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCB2aWV3LCBkZXRhaWwsIHNjcmVlblgsIHNjcmVlblksIGNsaWVudFgsIGNsaWVudFksXG4gICAgICAgICAgICAgICAgIGN0cmxLZXksIGFsdEtleSwgc2hpZnRLZXksIG1ldGFLZXksIGJ1dHRvbiwgcmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9kaXNwYXRjaEZsYWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRVSUV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIHZpZXcsIGRldGFpbCk7XG4gICAgdGhpcy5zY3JlZW5YID0gc2NyZWVuWDtcbiAgICB0aGlzLnNjcmVlblkgPSBzY3JlZW5ZO1xuICAgIHRoaXMuY2xpZW50WCA9IGNsaWVudFg7XG4gICAgdGhpcy5jbGllbnRZID0gY2xpZW50WTtcbiAgICB0aGlzLmN0cmxLZXkgPSBjdHJsS2V5O1xuICAgIHRoaXMuYWx0S2V5ID0gYWx0S2V5O1xuICAgIHRoaXMuc2hpZnRLZXkgPSBzaGlmdEtleTtcbiAgICB0aGlzLm1ldGFLZXkgPSBtZXRhS2V5O1xuICAgIHRoaXMuYnV0dG9uID0gYnV0dG9uO1xuICAgIHRoaXMucmVsYXRlZFRhcmdldCA9IHJlbGF0ZWRUYXJnZXQ7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBNb3VzZUV2ZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgRXZlbnRJbXBsID0gcmVxdWlyZShcIi4vRXZlbnQtaW1wbC5qc1wiKS5pbXBsZW1lbnRhdGlvbjtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIFBvcFN0YXRlRXZlbnRJbXBsIGV4dGVuZHMgRXZlbnRJbXBsIHt9O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEV2ZW50SW1wbCA9IHJlcXVpcmUoXCIuL0V2ZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIFByb2dyZXNzRXZlbnRJbXBsIGV4dGVuZHMgRXZlbnRJbXBsIHtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IFByb2dyZXNzRXZlbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IFVJRXZlbnRJbXBsID0gcmVxdWlyZShcIi4vVUlFdmVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBUb3VjaEV2ZW50SW1wbCBleHRlbmRzIFVJRXZlbnRJbXBsIHtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IFRvdWNoRXZlbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEV2ZW50SW1wbCA9IHJlcXVpcmUoXCIuL0V2ZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIFVJRXZlbnRJbXBsIGV4dGVuZHMgRXZlbnRJbXBsIHtcbiAgaW5pdFVJRXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgdmlldywgZGV0YWlsKSB7XG4gICAgaWYgKHRoaXMuX2Rpc3BhdGNoRmxhZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdEV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUpO1xuICAgIHRoaXMudmlldyA9IHZpZXc7XG4gICAgdGhpcy5kZXRhaWwgPSBkZXRhaWw7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBVSUV2ZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgQmxvYiA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvQmxvYlwiKTtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIEJsb2JJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncykge1xuICAgIGNvbnN0IHBhcnRzID0gYXJnc1swXTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gYXJnc1sxXTtcblxuICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTtcblxuICAgIGlmIChwYXJ0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocGFydHMgPT09IG51bGwgfHwgdHlwZW9mIHBhcnRzICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBwYXJ0c1tTeW1ib2wuaXRlcmF0b3JdICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInBhcnRzIG11c3QgYmUgYW4gaXRlcmFibGUgb2JqZWN0XCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgICBpZiAocGFydCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhwYXJ0KSB8fCBCbG9iLmlzKHBhcnQpKSB7XG4gICAgICAgICAgYXJyLnB1c2goaWRsVXRpbHMudHJ5SW1wbEZvcldyYXBwZXIocGFydCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFyci5wdXNoKGNvbnZlcnNpb25zLlVTVlN0cmluZyhwYXJ0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGFycikge1xuICAgICAgICBsZXQgYnVmZmVyO1xuICAgICAgICBpZiAocGFydCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgYnVmZmVyID0gbmV3IEJ1ZmZlcihuZXcgVWludDhBcnJheShwYXJ0KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHBhcnQpKSB7XG4gICAgICAgICAgYnVmZmVyID0gbmV3IEJ1ZmZlcihuZXcgVWludDhBcnJheShwYXJ0LmJ1ZmZlciwgcGFydC5ieXRlT2Zmc2V0LCBwYXJ0LmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChCbG9iLmlzSW1wbChwYXJ0KSkge1xuICAgICAgICAgIGJ1ZmZlciA9IHBhcnQuX2J1ZmZlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWZmZXIgPSBuZXcgQnVmZmVyKHBhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2J1ZmZlciA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycyk7XG5cbiAgICB0aGlzLnR5cGUgPSBwcm9wZXJ0aWVzLnR5cGU7XG4gICAgaWYgKC9bXlxcdTAwMjAtXFx1MDA3RV0vLnRlc3QodGhpcy50eXBlKSkge1xuICAgICAgdGhpcy50eXBlID0gXCJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50eXBlID0gdGhpcy50eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0Nsb3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDbG9zZWQgPyAwIDogdGhpcy5fYnVmZmVyLmxlbmd0aDtcbiAgfVxuXG4gIHNsaWNlKHN0YXJ0LCBlbmQsIGNvbnRlbnRUeXBlKSB7XG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuc2l6ZTtcblxuICAgIGxldCByZWxhdGl2ZVN0YXJ0O1xuICAgIGxldCByZWxhdGl2ZUVuZDtcbiAgICBsZXQgcmVsYXRpdmVDb250ZW50VHlwZTtcblxuICAgIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWxhdGl2ZVN0YXJ0ID0gMDtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgcmVsYXRpdmVTdGFydCA9IE1hdGgubWF4KHNpemUgKyBzdGFydCwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbGF0aXZlU3RhcnQgPSBNYXRoLm1pbihzdGFydCwgc2l6ZSk7XG4gICAgfVxuICAgIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVsYXRpdmVFbmQgPSBzaXplO1xuICAgIH0gZWxzZSBpZiAoZW5kIDwgMCkge1xuICAgICAgcmVsYXRpdmVFbmQgPSBNYXRoLm1heChzaXplICsgZW5kLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVsYXRpdmVFbmQgPSBNYXRoLm1pbihlbmQsIHNpemUpO1xuICAgIH1cblxuICAgIGlmIChjb250ZW50VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWxhdGl2ZUNvbnRlbnRUeXBlID0gXCJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2FuaXRpemF0aW9uIChsb3dlciBjYXNlIGFuZCBpbnZhbGlkIGNoYXIgY2hlY2spIGlzIGRvbmUgaW4gdGhlXG4gICAgICAvLyBjb25zdHJ1Y3RvclxuICAgICAgcmVsYXRpdmVDb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlO1xuICAgIH1cblxuICAgIGNvbnN0IHNwYW4gPSBNYXRoLm1heChyZWxhdGl2ZUVuZCAtIHJlbGF0aXZlU3RhcnQsIDApO1xuXG4gICAgY29uc3QgYnVmZmVyID0gdGhpcy5fYnVmZmVyO1xuICAgIGNvbnN0IHNsaWNlZEJ1ZmZlciA9IGJ1ZmZlci5zbGljZShcbiAgICAgIHJlbGF0aXZlU3RhcnQsXG4gICAgICByZWxhdGl2ZVN0YXJ0ICsgc3BhblxuICAgICk7XG5cbiAgICBjb25zdCBibG9iID0gQmxvYi5jcmVhdGVJbXBsKFtbXSwgeyB0eXBlOiByZWxhdGl2ZUNvbnRlbnRUeXBlIH1dLCB7fSk7XG4gICAgYmxvYi5pc0Nsb3NlZCA9IHRoaXMuaXNDbG9zZWQ7XG4gICAgYmxvYi5fYnVmZmVyID0gc2xpY2VkQnVmZmVyO1xuICAgIHJldHVybiBibG9iO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5pc0Nsb3NlZCA9IHRydWU7XG4gIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgQmxvYkltcGwgPSByZXF1aXJlKFwiLi9CbG9iLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBGaWxlSW1wbCBleHRlbmRzIEJsb2JJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBjb25zdCBmaWxlQml0cyA9IGFyZ3NbMF07XG4gICAgY29uc3QgZmlsZU5hbWUgPSBhcmdzWzFdO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBhcmdzWzJdO1xuICAgIHN1cGVyKFtmaWxlQml0cywgb3B0aW9uc10sIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMubmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UoL1xcLy9nLCBcIjpcIik7XG4gICAgdGhpcy5sYXN0TW9kaWZpZWQgPSBcImxhc3RNb2RpZmllZFwiIGluIG9wdGlvbnMgPyBvcHRpb25zLmxhc3RNb2RpZmllZCA6IERhdGUubm93KCk7XG4gIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIEZpbGVMaXN0SW1wbCBleHRlbmRzIEFycmF5IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoMCk7XG4gIH1cbiAgaXRlbShpbmRleCkge1xuICAgIHJldHVybiB0aGlzW2luZGV4XSB8fCBudWxsO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHdoYXR3Z0VuY29kaW5nID0gcmVxdWlyZShcIndoYXR3Zy1lbmNvZGluZ1wiKTtcbmNvbnN0IHBhcnNlQ29udGVudFR5cGUgPSByZXF1aXJlKFwiY29udGVudC10eXBlLXBhcnNlclwiKTtcbmNvbnN0IHF1ZXJ5c3RyaW5nID0gcmVxdWlyZShcInF1ZXJ5c3RyaW5nXCIpO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgRXZlbnRUYXJnZXRJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9FdmVudFRhcmdldC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgQmxvYiA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvQmxvYlwiKTtcbmNvbnN0IFByb2dyZXNzRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL1Byb2dyZXNzRXZlbnRcIik7XG5cbmNvbnN0IFJFQURZX1NUQVRFUyA9IE9iamVjdC5mcmVlemUoe1xuICBFTVBUWTogMCxcbiAgTE9BRElORzogMSxcbiAgRE9ORTogMlxufSk7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBGaWxlUmVhZGVySW1wbCBleHRlbmRzIEV2ZW50VGFyZ2V0SW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoW10sIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgIHRoaXMucmVhZHlTdGF0ZSA9IFJFQURZX1NUQVRFUy5FTVBUWTtcbiAgICB0aGlzLnJlc3VsdCA9IG51bGw7XG5cbiAgICB0aGlzLm9ubG9hZHN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLm9ucHJvZ3Jlc3MgPSBudWxsO1xuICAgIHRoaXMub25sb2FkID0gbnVsbDtcbiAgICB0aGlzLm9uYWJvcnQgPSBudWxsO1xuICAgIHRoaXMub25lcnJvciA9IG51bGw7XG4gICAgdGhpcy5vbmxvYWRlbmQgPSBudWxsO1xuXG4gICAgdGhpcy5fb3duZXJEb2N1bWVudCA9IHByaXZhdGVEYXRhLndpbmRvdy5kb2N1bWVudDtcbiAgfVxuXG4gIHJlYWRBc0FycmF5QnVmZmVyKGZpbGUpIHtcbiAgICB0aGlzLl9yZWFkRmlsZShmaWxlLCBcImJ1ZmZlclwiKTtcbiAgfVxuICByZWFkQXNEYXRhVVJMKGZpbGUpIHtcbiAgICB0aGlzLl9yZWFkRmlsZShmaWxlLCBcImRhdGFVUkxcIik7XG4gIH1cbiAgcmVhZEFzVGV4dChmaWxlLCBlbmNvZGluZykge1xuICAgIHRoaXMuX3JlYWRGaWxlKGZpbGUsIFwidGV4dFwiLCB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZShlbmNvZGluZykgfHwgXCJVVEYtOFwiKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFJFQURZX1NUQVRFUy5ET05FIHx8IHRoaXMucmVhZHlTdGF0ZSA9PT0gUkVBRFlfU1RBVEVTLkVNUFRZKSB7XG4gICAgICB0aGlzLnJlc3VsdCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gUkVBRFlfU1RBVEVTLkxPQURJTkcpIHtcbiAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFJFQURZX1NUQVRFUy5ET05FO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpcmVQcm9ncmVzc0V2ZW50KFwiYWJvcnRcIik7XG4gICAgdGhpcy5fZmlyZVByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIpO1xuICB9XG5cbiAgX2ZpcmVQcm9ncmVzc0V2ZW50KG5hbWUsIHByb3BzKSB7XG4gICAgY29uc3QgZXZlbnQgPSBQcm9ncmVzc0V2ZW50LmNyZWF0ZUltcGwoW25hbWUsIE9iamVjdC5hc3NpZ24oeyBidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZTogZmFsc2UgfSwgcHJvcHMpXSwge30pO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH1cblxuICBfcmVhZEZpbGUoZmlsZSwgZm9ybWF0LCBlbmNvZGluZykge1xuICAgIGlmICghQmxvYi5pc0ltcGwoZmlsZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJmaWxlIGFyZ3VtZW50IG11c3QgYmUgYSBCbG9iXCIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFJFQURZX1NUQVRFUy5MT0FESU5HKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgfVxuICAgIGlmIChmaWxlLmlzQ2xvc2VkKSB7XG4gICAgICB0aGlzLmVycm9yID0gbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgICAgdGhpcy5fZmlyZVByb2dyZXNzRXZlbnQoXCJlcnJvclwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBSRUFEWV9TVEFURVMuTE9BRElORztcbiAgICB0aGlzLl9maXJlUHJvZ3Jlc3NFdmVudChcImxvYWRzdGFydFwiKTtcblxuICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgbGV0IGRhdGEgPSBmaWxlLl9idWZmZXI7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBCdWZmZXIoXCJcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9maXJlUHJvZ3Jlc3NFdmVudChcInByb2dyZXNzXCIsIHtcbiAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogIWlzTmFOKGZpbGUuc2l6ZSksXG4gICAgICAgIHRvdGFsOiBmaWxlLnNpemUsXG4gICAgICAgIGxvYWRlZDogZGF0YS5sZW5ndGhcbiAgICAgIH0pO1xuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNhc2UgXCJidWZmZXJcIjoge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSAobmV3IFVpbnQ4QXJyYXkoZGF0YSkpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwiZGF0YVVSTFwiOiB7XG4gICAgICAgICAgICBsZXQgZGF0YVVybCA9IFwiZGF0YTpcIjtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VDb250ZW50VHlwZShmaWxlLnR5cGUpO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLmlzVGV4dCgpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrRW5jb2RpbmcgPSB3aGF0d2dFbmNvZGluZy5nZXRCT01FbmNvZGluZyhkYXRhKSB8fFxuICAgICAgICAgICAgICAgIHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKGNvbnRlbnRUeXBlLmdldChcImNoYXJzZXRcIikpIHx8IFwiVVRGLThcIjtcbiAgICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IHdoYXR3Z0VuY29kaW5nLmRlY29kZShkYXRhLCBmYWxsYmFja0VuY29kaW5nKTtcblxuICAgICAgICAgICAgICBjb250ZW50VHlwZS5zZXQoXCJjaGFyc2V0XCIsIGVuY29kaW5nKTtcbiAgICAgICAgICAgICAgZGF0YVVybCArPSBjb250ZW50VHlwZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICBkYXRhVXJsICs9IFwiLFwiO1xuICAgICAgICAgICAgICBkYXRhVXJsICs9IHF1ZXJ5c3RyaW5nLmVzY2FwZShkZWNvZGVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGRhdGFVcmwgKz0gY29udGVudFR5cGUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkYXRhVXJsICs9IFwiO2Jhc2U2NCxcIjtcbiAgICAgICAgICAgICAgZGF0YVVybCArPSBkYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSBkYXRhVXJsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6IHtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gd2hhdHdnRW5jb2RpbmcuZGVjb2RlKGRhdGEsIGVuY29kaW5nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSBSRUFEWV9TVEFURVMuRE9ORTtcbiAgICAgICAgdGhpcy5fZmlyZVByb2dyZXNzRXZlbnQoXCJsb2FkXCIpO1xuICAgICAgICB0aGlzLl9maXJlUHJvZ3Jlc3NFdmVudChcImxvYWRlbmRcIik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEF0dHIoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQXR0ci5wcm90b3R5cGUsIFwibmFtZXNwYWNlVVJJXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm5hbWVzcGFjZVVSSTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEF0dHIucHJvdG90eXBlLCBcInByZWZpeFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wcmVmaXg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdHRyLnByb3RvdHlwZSwgXCJsb2NhbE5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubG9jYWxOYW1lO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQXR0ci5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5uYW1lO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQXR0ci5wcm90b3R5cGUsIFwibm9kZU5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubm9kZU5hbWU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdHRyLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS52YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS52YWx1ZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdHRyLnByb3RvdHlwZSwgXCJub2RlVmFsdWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubm9kZVZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpc1tpbXBsXS5ub2RlVmFsdWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQXR0ci5wcm90b3R5cGUsIFwidGV4dENvbnRlbnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udGV4dENvbnRlbnQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzW2ltcGxdLnRleHRDb250ZW50ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEF0dHIucHJvdG90eXBlLCBcIm93bmVyRWxlbWVudFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vd25lckVsZW1lbnQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQXR0ci5wcm90b3R5cGUsIFwic3BlY2lmaWVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNwZWNpZmllZDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5BdHRyLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJBdHRyXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShBdHRyLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEF0dHIucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogQXR0cixcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEF0dHI6IEF0dHIgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9hdHRyaWJ1dGVzL0F0dHItaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBjb252ZXJ0QmxvYlByb3BlcnR5QmFnID0gcmVxdWlyZShcIi4vQmxvYlByb3BlcnR5QmFnXCIpLmNvbnZlcnQ7XG5cbmZ1bmN0aW9uIEJsb2IoKSB7XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMV0gPSBjb252ZXJ0QmxvYlByb3BlcnR5QmFnKGFyZ3NbMV0pO1xuXG4gIGlmYWNlLnNldHVwKHRoaXMsIGFyZ3MpO1xufVxuXG5cbkJsb2IucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDM7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wibG9uZyBsb25nXCJdKGFyZ3NbMF0sIHsgY2xhbXA6IHRydWUgfSk7XG4gIH1cbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJsb25nIGxvbmdcIl0oYXJnc1sxXSwgeyBjbGFtcDogdHJ1ZSB9KTtcbiAgfVxuICBpZiAoYXJnc1syXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMl0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5zbGljZSguLi5hcmdzKSk7XG59O1xuXG5CbG9iLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uIGNsb3NlKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5jbG9zZSgpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbG9iLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNpemU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbG9iLnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnR5cGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCbG9iLnByb3RvdHlwZSwgXCJpc0Nsb3NlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5pc0Nsb3NlZDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5CbG9iLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJCbG9iXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShCbG9iLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEJsb2IucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogQmxvYixcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEJsb2I6IEJsb2IgfSxcbiAgICBXb3JrZXI6IHsgQmxvYjogQmxvYiB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2ZpbGUtYXBpL0Jsb2ItaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb252ZXJ0SW5oZXJpdChvYmosIHJldCkge1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJ0eXBlXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gXCJcIjtcbiAgICB9XG4gIH0sXG5cbiAgY29udmVydChvYmopIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgaGFzIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgb2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBtYXkgbm90IGJlIGEgRGF0ZSBvciBSZWdFeHAgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbW9kdWxlLmV4cG9ydHMuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBUZXh0ID0gcmVxdWlyZShcIi4vVGV4dC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBDREFUQVNlY3Rpb24oKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKENEQVRBU2VjdGlvbi5wcm90b3R5cGUsIFRleHQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQ0RBVEFTZWN0aW9uLCBUZXh0LmludGVyZmFjZSk7XG5cblxuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJDREFUQVNlY3Rpb25cIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKENEQVRBU2VjdGlvbi5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShDREFUQVNlY3Rpb24ucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIFRleHQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogQ0RBVEFTZWN0aW9uLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgQ0RBVEFTZWN0aW9uOiBDREFUQVNlY3Rpb24gfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9DREFUQVNlY3Rpb24taW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgTm9kZSA9IHJlcXVpcmUoXCIuL05vZGUuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IG1peGluID0gdXRpbHMubWl4aW47XG5jb25zdCBDaGlsZE5vZGUgPSByZXF1aXJlKFwiLi9DaGlsZE5vZGUuanNcIik7XG5jb25zdCBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGUgPSByZXF1aXJlKFwiLi9Ob25Eb2N1bWVudFR5cGVDaGlsZE5vZGUuanNcIik7XG5cbmZ1bmN0aW9uIENoYXJhY3RlckRhdGEoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKENoYXJhY3RlckRhdGEucHJvdG90eXBlLCBOb2RlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKENoYXJhY3RlckRhdGEsIE5vZGUuaW50ZXJmYWNlKTtcblxubWl4aW4oQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUsIENoaWxkTm9kZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbkNoaWxkTm9kZS5taXhlZEludG8ucHVzaChDaGFyYWN0ZXJEYXRhKTtcbm1peGluKENoYXJhY3RlckRhdGEucHJvdG90eXBlLCBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5Ob25Eb2N1bWVudFR5cGVDaGlsZE5vZGUubWl4ZWRJbnRvLnB1c2goQ2hhcmFjdGVyRGF0YSk7XG5cbkNoYXJhY3RlckRhdGEucHJvdG90eXBlLnN1YnN0cmluZ0RhdGEgPSBmdW5jdGlvbiBzdWJzdHJpbmdEYXRhKG9mZnNldCwgY291bnQpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdzdWJzdHJpbmdEYXRhJyBvbiAnQ2hhcmFjdGVyRGF0YSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMV0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5zdWJzdHJpbmdEYXRhKC4uLmFyZ3MpO1xufTtcblxuQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuYXBwZW5kRGF0YSA9IGZ1bmN0aW9uIGFwcGVuZERhdGEoZGF0YSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2FwcGVuZERhdGEnIG9uICdDaGFyYWN0ZXJEYXRhJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5hcHBlbmREYXRhKC4uLmFyZ3MpO1xufTtcblxuQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuaW5zZXJ0RGF0YSA9IGZ1bmN0aW9uIGluc2VydERhdGEob2Zmc2V0LCBkYXRhKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5zZXJ0RGF0YScgb24gJ0NoYXJhY3RlckRhdGEnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5pbnNlcnREYXRhKC4uLmFyZ3MpO1xufTtcblxuQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuZGVsZXRlRGF0YSA9IGZ1bmN0aW9uIGRlbGV0ZURhdGEob2Zmc2V0LCBjb3VudCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZURhdGEnIG9uICdDaGFyYWN0ZXJEYXRhJzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oYXJnc1sxXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmRlbGV0ZURhdGEoLi4uYXJncyk7XG59O1xuXG5DaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5yZXBsYWNlRGF0YSA9IGZ1bmN0aW9uIHJlcGxhY2VEYXRhKG9mZnNldCwgY291bnQsIGRhdGEpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdyZXBsYWNlRGF0YScgb24gJ0NoYXJhY3RlckRhdGEnOiAzIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShhcmdzWzFdKTtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMl0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5yZXBsYWNlRGF0YSguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUsIFwiZGF0YVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5kYXRhO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpc1tpbXBsXS5kYXRhID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENoYXJhY3RlckRhdGEucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5sZW5ndGg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiQ2hhcmFjdGVyRGF0YVwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBOb2RlLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IENoYXJhY3RlckRhdGEsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBDaGFyYWN0ZXJEYXRhOiBDaGFyYWN0ZXJEYXRhIH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvQ2hhcmFjdGVyRGF0YS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gQ2hpbGROb2RlKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuXG5DaGlsZE5vZGUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0ucmVtb3ZlKCk7XG59O1xuXG5DaGlsZE5vZGUucHJvdG90eXBlW1N5bWJvbC51bnNjb3BhYmxlc10gPSB7XG4gIFwicmVtb3ZlXCI6IHRydWVcbn07XG5cbkNoaWxkTm9kZS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiQ2hpbGROb2RlXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShDaGlsZE5vZGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoQ2hpbGROb2RlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IENoaWxkTm9kZSxcbiAgZXhwb3NlOiB7XG4gICAgXG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0NoaWxkTm9kZS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBDaGFyYWN0ZXJEYXRhID0gcmVxdWlyZShcIi4vQ2hhcmFjdGVyRGF0YS5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBDb21tZW50KCkge1xuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzBdID0gXCJcIjtcbiAgfVxuXG4gIGlmYWNlLnNldHVwKHRoaXMsIGFyZ3MpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKENvbW1lbnQucHJvdG90eXBlLCBDaGFyYWN0ZXJEYXRhLmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKENvbW1lbnQsIENoYXJhY3RlckRhdGEuaW50ZXJmYWNlKTtcblxuXG5Db21tZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJDb21tZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShDb21tZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKENvbW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIENoYXJhY3RlckRhdGEuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogQ29tbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IENvbW1lbnQ6IENvbW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9Db21tZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEV2ZW50ID0gcmVxdWlyZShcIi4vRXZlbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IGNvbnZlcnRDdXN0b21FdmVudEluaXQgPSByZXF1aXJlKFwiLi9DdXN0b21FdmVudEluaXRcIikuY29udmVydDtcblxuZnVuY3Rpb24gQ3VzdG9tRXZlbnQodHlwZSkge1xuICBpZiAoIW5ldy50YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnQ3VzdG9tRXZlbnQnLiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvcjsgdGhpcyBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdDdXN0b21FdmVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnRDdXN0b21FdmVudEluaXQoYXJnc1sxXSk7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQ3VzdG9tRXZlbnQucHJvdG90eXBlLCBFdmVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihDdXN0b21FdmVudCwgRXZlbnQuaW50ZXJmYWNlKTtcblxuXG5DdXN0b21FdmVudC5wcm90b3R5cGUuaW5pdEN1c3RvbUV2ZW50ID0gZnVuY3Rpb24gaW5pdEN1c3RvbUV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIGRldGFpbCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luaXRDdXN0b21FdmVudCcgb24gJ0N1c3RvbUV2ZW50JzogNCBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDQ7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzFdKTtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzJdKTtcbiAgYXJnc1szXSA9IGNvbnZlcnNpb25zW1wiYW55XCJdKGFyZ3NbM10pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5pbml0Q3VzdG9tRXZlbnQoLi4uYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEN1c3RvbUV2ZW50LnByb3RvdHlwZSwgXCJkZXRhaWxcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uZGV0YWlsO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkN1c3RvbUV2ZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJDdXN0b21FdmVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoQ3VzdG9tRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoQ3VzdG9tRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEV2ZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEN1c3RvbUV2ZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgQ3VzdG9tRXZlbnQ6IEN1c3RvbUV2ZW50IH0sXG4gICAgV29ya2VyOiB7IEN1c3RvbUV2ZW50OiBDdXN0b21FdmVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9DdXN0b21FdmVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbmNvbnN0IEV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL0V2ZW50SW5pdFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KSB7XG4gICAgRXZlbnRJbml0LmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcblxuICAgIGtleSA9IFwiZGV0YWlsXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImFueVwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgY29udmVydChvYmopIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgaGFzIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgb2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBtYXkgbm90IGJlIGEgRGF0ZSBvciBSZWdFeHAgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbW9kdWxlLmV4cG9ydHMuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gRE9NSW1wbGVtZW50YXRpb24oKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5cbkRPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5jcmVhdGVEb2N1bWVudFR5cGUgPSBmdW5jdGlvbiBjcmVhdGVEb2N1bWVudFR5cGUocXVhbGlmaWVkTmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlRG9jdW1lbnRUeXBlJyBvbiAnRE9NSW1wbGVtZW50YXRpb24nOiAzIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIGFyZ3NbMl0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzJdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY3JlYXRlRG9jdW1lbnRUeXBlKC4uLmFyZ3MpKTtcbn07XG5cbkRPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5jcmVhdGVEb2N1bWVudCA9IGZ1bmN0aW9uIGNyZWF0ZURvY3VtZW50KG5hbWVzcGFjZSwgcXVhbGlmaWVkTmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZURvY3VtZW50JyBvbiAnRE9NSW1wbGVtZW50YXRpb24nOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gPT09IG51bGwgfHwgYXJnc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1swXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgfVxuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICBpZiAoYXJnc1syXSA9PT0gbnVsbCB8fCBhcmdzWzJdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzJdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jcmVhdGVEb2N1bWVudCguLi5hcmdzKSk7XG59O1xuXG5ET01JbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuY3JlYXRlSFRNTERvY3VtZW50ID0gZnVuY3Rpb24gY3JlYXRlSFRNTERvY3VtZW50KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jcmVhdGVIVE1MRG9jdW1lbnQoLi4uYXJncykpO1xufTtcblxuRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmhhc0ZlYXR1cmUgPSBmdW5jdGlvbiBoYXNGZWF0dXJlKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5oYXNGZWF0dXJlKCk7XG59O1xuXG5ET01JbXBsZW1lbnRhdGlvbi5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiRE9NSW1wbGVtZW50YXRpb25cIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKERPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKERPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IERPTUltcGxlbWVudGF0aW9uLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgRE9NSW1wbGVtZW50YXRpb246IERPTUltcGxlbWVudGF0aW9uIH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvRE9NSW1wbGVtZW50YXRpb24taW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIERPTVBhcnNlcigpIHtcblxuICBpZmFjZS5zZXR1cCh0aGlzKTtcbn1cblxuXG5ET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZyA9IGZ1bmN0aW9uIHBhcnNlRnJvbVN0cmluZyhzdHIsIHR5cGUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdwYXJzZUZyb21TdHJpbmcnIG9uICdET01QYXJzZXInOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5wYXJzZUZyb21TdHJpbmcoLi4uYXJncykpO1xufTtcblxuRE9NUGFyc2VyLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJET01QYXJzZXJcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKERPTVBhcnNlci5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShET01QYXJzZXIucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogRE9NUGFyc2VyLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgRE9NUGFyc2VyOiBET01QYXJzZXIgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9kb21wYXJzaW5nL0RPTVBhcnNlci1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBOb2RlID0gcmVxdWlyZShcIi4vTm9kZS5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgbWl4aW4gPSB1dGlscy5taXhpbjtcbmNvbnN0IEdsb2JhbEV2ZW50SGFuZGxlcnMgPSByZXF1aXJlKFwiLi9HbG9iYWxFdmVudEhhbmRsZXJzLmpzXCIpO1xuY29uc3QgTm9uRWxlbWVudFBhcmVudE5vZGUgPSByZXF1aXJlKFwiLi9Ob25FbGVtZW50UGFyZW50Tm9kZS5qc1wiKTtcbmNvbnN0IFBhcmVudE5vZGUgPSByZXF1aXJlKFwiLi9QYXJlbnROb2RlLmpzXCIpO1xuXG5mdW5jdGlvbiBEb2N1bWVudCgpIHtcblxuICBpZmFjZS5zZXR1cCh0aGlzKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihEb2N1bWVudC5wcm90b3R5cGUsIE5vZGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoRG9jdW1lbnQsIE5vZGUuaW50ZXJmYWNlKTtcblxubWl4aW4oRG9jdW1lbnQucHJvdG90eXBlLCBHbG9iYWxFdmVudEhhbmRsZXJzLmludGVyZmFjZS5wcm90b3R5cGUpO1xuR2xvYmFsRXZlbnRIYW5kbGVycy5taXhlZEludG8ucHVzaChEb2N1bWVudCk7XG5taXhpbihEb2N1bWVudC5wcm90b3R5cGUsIE5vbkVsZW1lbnRQYXJlbnROb2RlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuTm9uRWxlbWVudFBhcmVudE5vZGUubWl4ZWRJbnRvLnB1c2goRG9jdW1lbnQpO1xubWl4aW4oRG9jdW1lbnQucHJvdG90eXBlLCBQYXJlbnROb2RlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuUGFyZW50Tm9kZS5taXhlZEludG8ucHVzaChEb2N1bWVudCk7XG5cbkRvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKGxvY2FsTmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEVsZW1lbnRzQnlUYWdOYW1lJyBvbiAnRG9jdW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmdldEVsZW1lbnRzQnlUYWdOYW1lKC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TID0gZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhuYW1lc3BhY2UsIGxvY2FsTmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEVsZW1lbnRzQnlUYWdOYW1lTlMnIG9uICdEb2N1bWVudCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSA9PT0gbnVsbCB8fCBhcmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzBdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyguLi5hcmdzKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lcykge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEVsZW1lbnRzQnlDbGFzc05hbWUnIG9uICdEb2N1bWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSguLi5hcmdzKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQobG9jYWxOYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlRWxlbWVudCcgb24gJ0RvY3VtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jcmVhdGVFbGVtZW50KC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50TlMgPSBmdW5jdGlvbiBjcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlLCBxdWFsaWZpZWROYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlRWxlbWVudE5TJyBvbiAnRG9jdW1lbnQnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gPT09IG51bGwgfHwgYXJnc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1swXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgfVxuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZUVsZW1lbnROUyguLi5hcmdzKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZShkYXRhKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlVGV4dE5vZGUnIG9uICdEb2N1bWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY3JlYXRlVGV4dE5vZGUoLi4uYXJncykpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUNEQVRBU2VjdGlvbiA9IGZ1bmN0aW9uIGNyZWF0ZUNEQVRBU2VjdGlvbihkYXRhKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlQ0RBVEFTZWN0aW9uJyBvbiAnRG9jdW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZUNEQVRBU2VjdGlvbiguLi5hcmdzKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudCA9IGZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQoZGF0YSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUNvbW1lbnQnIG9uICdEb2N1bWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY3JlYXRlQ29tbWVudCguLi5hcmdzKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRhcmdldCwgZGF0YSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbicgb24gJ0RvY3VtZW50JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oLi4uYXJncykpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGUgPSBmdW5jdGlvbiBpbXBvcnROb2RlKG5vZGUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdpbXBvcnROb2RlJyBvbiAnRG9jdW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1sxXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1sxXSk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc1sxXSA9IGZhbHNlO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmltcG9ydE5vZGUoLi4uYXJncykpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmFkb3B0Tm9kZSA9IGZ1bmN0aW9uIGFkb3B0Tm9kZShub2RlKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWRvcHROb2RlJyBvbiAnRG9jdW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5hZG9wdE5vZGUoLi4uYXJncykpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIGNyZWF0ZUF0dHJpYnV0ZShsb2NhbE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVBdHRyaWJ1dGUnIG9uICdEb2N1bWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY3JlYXRlQXR0cmlidXRlKC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVBdHRyaWJ1dGVOUyA9IGZ1bmN0aW9uIGNyZWF0ZUF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgcXVhbGlmaWVkTmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUF0dHJpYnV0ZU5TJyBvbiAnRG9jdW1lbnQnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gPT09IG51bGwgfHwgYXJnc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1swXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgfVxuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZUF0dHJpYnV0ZU5TKC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFdmVudCA9IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KF9pbnRlcmZhY2UpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVFdmVudCcgb24gJ0RvY3VtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jcmVhdGVFdmVudCguLi5hcmdzKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlVHJlZVdhbGtlciA9IGZ1bmN0aW9uIGNyZWF0ZVRyZWVXYWxrZXIocm9vdCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZVRyZWVXYWxrZXInIG9uICdEb2N1bWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDM7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShhcmdzWzFdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzFdID0gNDI5NDk2NzI5NTtcbiAgfVxuICBpZiAoYXJnc1syXSA9PT0gbnVsbCB8fCBhcmdzWzJdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzJdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jcmVhdGVUcmVlV2Fsa2VyKC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5TmFtZSA9IGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlOYW1lKGVsZW1lbnROYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0RWxlbWVudHNCeU5hbWUnIG9uICdEb2N1bWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0RWxlbWVudHNCeU5hbWUoLi4uYXJncykpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiBvcGVuKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzBdID0gXCJ0ZXh0L2h0bWxcIjtcbiAgfVxuICBpZiAoYXJnc1sxXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzFdID0gXCJcIjtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vcGVuKC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uIGNsb3NlKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5jbG9zZSgpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLndyaXRlKC4uLmFyZ3MpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLndyaXRlbG4gPSBmdW5jdGlvbiB3cml0ZWxuKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS53cml0ZWxuKC4uLmFyZ3MpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmhhc0ZvY3VzID0gZnVuY3Rpb24gaGFzRm9jdXMoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmhhc0ZvY3VzKCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJpbXBsZW1lbnRhdGlvblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5pbXBsZW1lbnRhdGlvbik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiVVJMXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLlVSTDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJkb2N1bWVudFVSSVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5kb2N1bWVudFVSSTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJvcmlnaW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub3JpZ2luO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImNvbXBhdE1vZGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY29tcGF0TW9kZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJjaGFyYWN0ZXJTZXRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2hhcmFjdGVyU2V0O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImNoYXJzZXRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2hhcnNldDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJpbnB1dEVuY29kaW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmlucHV0RW5jb2Rpbmc7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiY29udGVudFR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY29udGVudFR5cGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiZG9jdHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5kb2N0eXBlKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJkb2N1bWVudEVsZW1lbnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZG9jdW1lbnRFbGVtZW50KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJyZWZlcnJlclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5yZWZlcnJlcjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJjb29raWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY29va2llO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmNvb2tpZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwibGFzdE1vZGlmaWVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmxhc3RNb2RpZmllZDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJyZWFkeVN0YXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnJlYWR5U3RhdGUpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcInRpdGxlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnRpdGxlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnRpdGxlID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJkaXJcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uZGlyO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmRpciA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiYm9keVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5ib2R5KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBpZiAoViA9PT0gbnVsbCB8fCBWID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFYgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgfVxuICAgIHRoaXNbaW1wbF0uYm9keSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImhlYWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uaGVhZCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiaW1hZ2VzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmltYWdlcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiZW1iZWRzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmVtYmVkcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwicGx1Z2luc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5wbHVnaW5zKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJsaW5rc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5saW5rcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiZm9ybXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZm9ybXMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcInNjcmlwdHNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uc2NyaXB0cyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiY3VycmVudFNjcmlwdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jdXJyZW50U2NyaXB0KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJkZWZhdWx0Vmlld1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5kZWZhdWx0Vmlldyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiYWN0aXZlRWxlbWVudFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5hY3RpdmVFbGVtZW50KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25yZWFkeXN0YXRlY2hhbmdlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImFuY2hvcnNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uYW5jaG9ycyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiYXBwbGV0c1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5hcHBsZXRzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJzdHlsZVNoZWV0c1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5zdHlsZVNoZWV0cyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiaGlkZGVuXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhpZGRlbjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJ2aXNpYmlsaXR5U3RhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0udmlzaWJpbGl0eVN0YXRlKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJvbnZpc2liaWxpdHljaGFuZ2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub252aXNpYmlsaXR5Y2hhbmdlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9udmlzaWJpbGl0eWNoYW5nZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkRvY3VtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJEb2N1bWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRG9jdW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRG9jdW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIE5vZGUuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIFwibG9jYXRpb25cIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwob2JqW2ltcGxdLmxvY2F0aW9uKTtcbiAgICAgIH0sXG4gICAgICBzZXQoVikge1xuICAgICAgICB0aGlzLmxvY2F0aW9uLmhyZWYgPSBWO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSk7XG4gICAgXG4gICAgXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBEb2N1bWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IERvY3VtZW50OiBEb2N1bWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0RvY3VtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IE5vZGUgPSByZXF1aXJlKFwiLi9Ob2RlLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBtaXhpbiA9IHV0aWxzLm1peGluO1xuY29uc3QgUGFyZW50Tm9kZSA9IHJlcXVpcmUoXCIuL1BhcmVudE5vZGUuanNcIik7XG5cbmZ1bmN0aW9uIERvY3VtZW50RnJhZ21lbnQoKSB7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsIE5vZGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoRG9jdW1lbnRGcmFnbWVudCwgTm9kZS5pbnRlcmZhY2UpO1xuXG5taXhpbihEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSwgUGFyZW50Tm9kZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcblBhcmVudE5vZGUubWl4ZWRJbnRvLnB1c2goRG9jdW1lbnRGcmFnbWVudCk7XG5cbkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkRvY3VtZW50RnJhZ21lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgTm9kZS5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBEb2N1bWVudEZyYWdtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgRG9jdW1lbnRGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0RvY3VtZW50RnJhZ21lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgTm9kZSA9IHJlcXVpcmUoXCIuL05vZGUuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IG1peGluID0gdXRpbHMubWl4aW47XG5jb25zdCBDaGlsZE5vZGUgPSByZXF1aXJlKFwiLi9DaGlsZE5vZGUuanNcIik7XG5cbmZ1bmN0aW9uIERvY3VtZW50VHlwZSgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoRG9jdW1lbnRUeXBlLnByb3RvdHlwZSwgTm9kZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihEb2N1bWVudFR5cGUsIE5vZGUuaW50ZXJmYWNlKTtcblxubWl4aW4oRG9jdW1lbnRUeXBlLnByb3RvdHlwZSwgQ2hpbGROb2RlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuQ2hpbGROb2RlLm1peGVkSW50by5wdXNoKERvY3VtZW50VHlwZSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnRUeXBlLnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm5hbWU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudFR5cGUucHJvdG90eXBlLCBcInB1YmxpY0lkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnB1YmxpY0lkO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnRUeXBlLnByb3RvdHlwZSwgXCJzeXN0ZW1JZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zeXN0ZW1JZDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5Eb2N1bWVudFR5cGUucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkRvY3VtZW50VHlwZVwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRG9jdW1lbnRUeXBlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKERvY3VtZW50VHlwZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgTm9kZS5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBEb2N1bWVudFR5cGUsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBEb2N1bWVudFR5cGU6IERvY3VtZW50VHlwZSB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0RvY3VtZW50VHlwZS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBOb2RlID0gcmVxdWlyZShcIi4vTm9kZS5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgbWl4aW4gPSB1dGlscy5taXhpbjtcbmNvbnN0IENoaWxkTm9kZSA9IHJlcXVpcmUoXCIuL0NoaWxkTm9kZS5qc1wiKTtcbmNvbnN0IE5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZSA9IHJlcXVpcmUoXCIuL05vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS5qc1wiKTtcbmNvbnN0IFBhcmVudE5vZGUgPSByZXF1aXJlKFwiLi9QYXJlbnROb2RlLmpzXCIpO1xuXG5mdW5jdGlvbiBFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihFbGVtZW50LnByb3RvdHlwZSwgTm9kZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihFbGVtZW50LCBOb2RlLmludGVyZmFjZSk7XG5cbm1peGluKEVsZW1lbnQucHJvdG90eXBlLCBDaGlsZE5vZGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5DaGlsZE5vZGUubWl4ZWRJbnRvLnB1c2goRWxlbWVudCk7XG5taXhpbihFbGVtZW50LnByb3RvdHlwZSwgTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLm1peGVkSW50by5wdXNoKEVsZW1lbnQpO1xubWl4aW4oRWxlbWVudC5wcm90b3R5cGUsIFBhcmVudE5vZGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5QYXJlbnROb2RlLm1peGVkSW50by5wdXNoKEVsZW1lbnQpO1xuXG5FbGVtZW50LnByb3RvdHlwZS5oYXNBdHRyaWJ1dGVzID0gZnVuY3Rpb24gaGFzQXR0cmlidXRlcygpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uaGFzQXR0cmlidXRlcygpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTmFtZXMgPSBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOYW1lcygpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0QXR0cmlidXRlTmFtZXMoKSk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEF0dHJpYnV0ZScgb24gJ0VsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmdldEF0dHJpYnV0ZSguLi5hcmdzKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TID0gZnVuY3Rpb24gZ2V0QXR0cmlidXRlTlMobmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRBdHRyaWJ1dGVOUycgb24gJ0VsZW1lbnQnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gPT09IG51bGwgfHwgYXJnc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1swXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgfVxuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmdldEF0dHJpYnV0ZU5TKC4uLmFyZ3MpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gc2V0QXR0cmlidXRlKHF1YWxpZmllZE5hbWUsIHZhbHVlKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0QXR0cmlidXRlJyBvbiAnRWxlbWVudCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uc2V0QXR0cmlidXRlKC4uLmFyZ3MpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTlMgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIHF1YWxpZmllZE5hbWUsIHZhbHVlKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0QXR0cmlidXRlTlMnIG9uICdFbGVtZW50JzogMyBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDM7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdID09PSBudWxsIHx8IGFyZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMF0gPSBudWxsO1xuICB9IGVsc2Uge1xuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIH1cbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICBhcmdzWzJdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1syXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLnNldEF0dHJpYnV0ZU5TKC4uLmFyZ3MpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlID0gZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlKHF1YWxpZmllZE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdyZW1vdmVBdHRyaWJ1dGUnIG9uICdFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5yZW1vdmVBdHRyaWJ1dGUoLi4uYXJncyk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVOUyA9IGZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAncmVtb3ZlQXR0cmlidXRlTlMnIG9uICdFbGVtZW50JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdID09PSBudWxsIHx8IGFyZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMF0gPSBudWxsO1xuICB9IGVsc2Uge1xuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIH1cbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5yZW1vdmVBdHRyaWJ1dGVOUyguLi5hcmdzKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uIGhhc0F0dHJpYnV0ZShxdWFsaWZpZWROYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaGFzQXR0cmlidXRlJyBvbiAnRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uaGFzQXR0cmlidXRlKC4uLmFyZ3MpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuaGFzQXR0cmlidXRlTlMgPSBmdW5jdGlvbiBoYXNBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIGxvY2FsTmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2hhc0F0dHJpYnV0ZU5TJyBvbiAnRWxlbWVudCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSA9PT0gbnVsbCB8fCBhcmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzBdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uaGFzQXR0cmlidXRlTlMoLi4uYXJncyk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOb2RlID0gZnVuY3Rpb24gZ2V0QXR0cmlidXRlTm9kZShxdWFsaWZpZWROYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0QXR0cmlidXRlTm9kZScgb24gJ0VsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmdldEF0dHJpYnV0ZU5vZGUoLi4uYXJncykpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTm9kZU5TID0gZnVuY3Rpb24gZ2V0QXR0cmlidXRlTm9kZU5TKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0QXR0cmlidXRlTm9kZU5TJyBvbiAnRWxlbWVudCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSA9PT0gbnVsbCB8fCBhcmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzBdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0QXR0cmlidXRlTm9kZU5TKC4uLmFyZ3MpKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5vZGUgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGVOb2RlKGF0dHIpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdzZXRBdHRyaWJ1dGVOb2RlJyBvbiAnRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnNldEF0dHJpYnV0ZU5vZGUoLi4uYXJncykpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTm9kZU5TID0gZnVuY3Rpb24gc2V0QXR0cmlidXRlTm9kZU5TKGF0dHIpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdzZXRBdHRyaWJ1dGVOb2RlTlMnIG9uICdFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uc2V0QXR0cmlidXRlTm9kZU5TKC4uLmFyZ3MpKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5vZGUgPSBmdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGVOb2RlKGF0dHIpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdyZW1vdmVBdHRyaWJ1dGVOb2RlJyBvbiAnRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnJlbW92ZUF0dHJpYnV0ZU5vZGUoLi4uYXJncykpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uIG1hdGNoZXMoc2VsZWN0b3JzKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnbWF0Y2hlcycgb24gJ0VsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLm1hdGNoZXMoLi4uYXJncyk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiB3ZWJraXRNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3JzKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnd2Via2l0TWF0Y2hlc1NlbGVjdG9yJyBvbiAnRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yKC4uLmFyZ3MpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBmdW5jdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZShsb2NhbE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRFbGVtZW50c0J5VGFnTmFtZScgb24gJ0VsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmdldEVsZW1lbnRzQnlUYWdOYW1lKC4uLmFyZ3MpKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMgPSBmdW5jdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0RWxlbWVudHNCeVRhZ05hbWVOUycgb24gJ0VsZW1lbnQnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gPT09IG51bGwgfHwgYXJnc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1swXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgfVxuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoLi4uYXJncykpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lcykge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEVsZW1lbnRzQnlDbGFzc05hbWUnIG9uICdFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKC4uLmFyZ3MpKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLmluc2VydEFkamFjZW50SFRNTCA9IGZ1bmN0aW9uIGluc2VydEFkamFjZW50SFRNTChwb3NpdGlvbiwgdGV4dCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luc2VydEFkamFjZW50SFRNTCcgb24gJ0VsZW1lbnQnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmluc2VydEFkamFjZW50SFRNTCguLi5hcmdzKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLmdldENsaWVudFJlY3RzID0gZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHMoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmdldENsaWVudFJlY3RzKCkpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcIm5hbWVzcGFjZVVSSVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5uYW1lc3BhY2VVUkk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJwcmVmaXhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucHJlZml4O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwibG9jYWxOYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmxvY2FsTmFtZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcInRhZ05hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udGFnTmFtZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcImlkXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaWRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJjbGFzc05hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcImNsYXNzTGlzdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jbGFzc0xpc3QpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXMuY2xhc3NMaXN0LnZhbHVlID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcImF0dHJpYnV0ZXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uYXR0cmlidXRlcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJpbm5lckhUTUxcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaW5uZXJIVE1MO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpc1tpbXBsXS5pbm5lckhUTUwgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwib3V0ZXJIVE1MXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm91dGVySFRNTDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXNbaW1wbF0ub3V0ZXJIVE1MID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcInNjcm9sbFRvcFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zY3JvbGxUb3A7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGRvdWJsZVwiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNjcm9sbFRvcCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJzY3JvbGxMZWZ0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNjcm9sbExlZnQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGRvdWJsZVwiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNjcm9sbExlZnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwic2Nyb2xsV2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2Nyb2xsV2lkdGg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJzY3JvbGxIZWlnaHRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2Nyb2xsSGVpZ2h0O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwiY2xpZW50VG9wXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmNsaWVudFRvcDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcImNsaWVudExlZnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2xpZW50TGVmdDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcImNsaWVudFdpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmNsaWVudFdpZHRoO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwiY2xpZW50SGVpZ2h0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmNsaWVudEhlaWdodDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5FbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIE5vZGUuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEVsZW1lbnQ6IEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9FbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBFbGVtZW50Q1NTSW5saW5lU3R5bGUoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudENTU0lubGluZVN0eWxlLnByb3RvdHlwZSwgXCJzdHlsZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5zdHlsZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpcy5zdHlsZS5jc3NUZXh0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5FbGVtZW50Q1NTSW5saW5lU3R5bGUucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkVsZW1lbnRDU1NJbmxpbmVTdHlsZVwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRWxlbWVudENTU0lubGluZVN0eWxlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEVsZW1lbnRDU1NJbmxpbmVTdHlsZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBFbGVtZW50Q1NTSW5saW5lU3R5bGUsXG4gIGV4cG9zZToge1xuICAgIFxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9FbGVtZW50Q1NTSW5saW5lU3R5bGUtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEVsZW1lbnRDb250ZW50RWRpdGFibGUoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5cbkVsZW1lbnRDb250ZW50RWRpdGFibGUucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkVsZW1lbnRDb250ZW50RWRpdGFibGVcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEVsZW1lbnRDb250ZW50RWRpdGFibGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRWxlbWVudENvbnRlbnRFZGl0YWJsZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBFbGVtZW50Q29udGVudEVkaXRhYmxlLFxuICBleHBvc2U6IHtcbiAgICBcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvRWxlbWVudENvbnRlbnRFZGl0YWJsZS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBFdmVudCA9IHJlcXVpcmUoXCIuL0V2ZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBjb252ZXJ0RXJyb3JFdmVudEluaXQgPSByZXF1aXJlKFwiLi9FcnJvckV2ZW50SW5pdFwiKS5jb252ZXJ0O1xuXG5mdW5jdGlvbiBFcnJvckV2ZW50KHR5cGUpIHtcbiAgaWYgKCFuZXcudGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0Vycm9yRXZlbnQnLiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvcjsgdGhpcyBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdFcnJvckV2ZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVydEVycm9yRXZlbnRJbml0KGFyZ3NbMV0pO1xuXG4gIGlmYWNlLnNldHVwKHRoaXMsIGFyZ3MpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEVycm9yRXZlbnQucHJvdG90eXBlLCBFdmVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihFcnJvckV2ZW50LCBFdmVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXJyb3JFdmVudC5wcm90b3R5cGUsIFwibWVzc2FnZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5tZXNzYWdlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXJyb3JFdmVudC5wcm90b3R5cGUsIFwiZmlsZW5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uZmlsZW5hbWU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFcnJvckV2ZW50LnByb3RvdHlwZSwgXCJsaW5lbm9cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubGluZW5vO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXJyb3JFdmVudC5wcm90b3R5cGUsIFwiY29sbm9cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY29sbm87XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFcnJvckV2ZW50LnByb3RvdHlwZSwgXCJlcnJvclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5lcnJvcjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5FcnJvckV2ZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJFcnJvckV2ZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShFcnJvckV2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEVycm9yRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEV2ZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEVycm9yRXZlbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBFcnJvckV2ZW50OiBFcnJvckV2ZW50IH0sXG4gICAgV29ya2VyOiB7IEVycm9yRXZlbnQ6IEVycm9yRXZlbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ldmVudHMvRXJyb3JFdmVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbmNvbnN0IEV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL0V2ZW50SW5pdFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KSB7XG4gICAgRXZlbnRJbml0LmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcblxuICAgIGtleSA9IFwiY29sbm9cIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXSh2YWx1ZSk7XG4gICAgfVxuXG4gICAga2V5ID0gXCJlcnJvclwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJhbnlcIl0odmFsdWUpO1xuICAgIH1cblxuICAgIGtleSA9IFwiZmlsZW5hbWVcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKHZhbHVlKTtcbiAgICB9XG5cbiAgICBrZXkgPSBcImxpbmVub1wiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKHZhbHVlKTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIm1lc3NhZ2VcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKHZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgY29udmVydChvYmopIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgaGFzIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgb2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBtYXkgbm90IGJlIGEgRGF0ZSBvciBSZWdFeHAgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbW9kdWxlLmV4cG9ydHMuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IGNvbnZlcnRFdmVudEluaXQgPSByZXF1aXJlKFwiLi9FdmVudEluaXRcIikuY29udmVydDtcblxuZnVuY3Rpb24gRXZlbnQodHlwZSkge1xuICBpZiAoIW5ldy50YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnRXZlbnQnLiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvcjsgdGhpcyBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdFdmVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnRFdmVudEluaXQoYXJnc1sxXSk7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5cblxuRXZlbnQucHJvdG90eXBlLnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbigpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuXG5FdmVudC5wcm90b3R5cGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID0gZnVuY3Rpb24gc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn07XG5cbkV2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5wcmV2ZW50RGVmYXVsdCgpO1xufTtcblxuRXZlbnQucHJvdG90eXBlLmluaXRFdmVudCA9IGZ1bmN0aW9uIGluaXRFdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5pdEV2ZW50JyBvbiAnRXZlbnQnOiAzIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMV0pO1xuICBhcmdzWzJdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMl0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5pbml0RXZlbnQoLi4uYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnR5cGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwidGFyZ2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnRhcmdldCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiY3VycmVudFRhcmdldFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jdXJyZW50VGFyZ2V0KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LCBcIk5PTkVcIiwge1xuICB2YWx1ZTogMCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcIk5PTkVcIiwge1xuICB2YWx1ZTogMCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudCwgXCJDQVBUVVJJTkdfUEhBU0VcIiwge1xuICB2YWx1ZTogMSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcIkNBUFRVUklOR19QSEFTRVwiLCB7XG4gIHZhbHVlOiAxLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LCBcIkFUX1RBUkdFVFwiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiQVRfVEFSR0VUXCIsIHtcbiAgdmFsdWU6IDIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQsIFwiQlVCQkxJTkdfUEhBU0VcIiwge1xuICB2YWx1ZTogMyxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcIkJVQkJMSU5HX1BIQVNFXCIsIHtcbiAgdmFsdWU6IDMsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcImV2ZW50UGhhc2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uZXZlbnRQaGFzZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgXCJjYW5jZWxCdWJibGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2FuY2VsQnViYmxlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgdGhpc1tpbXBsXS5jYW5jZWxCdWJibGUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcImJ1YmJsZXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uYnViYmxlcztcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgXCJjYW5jZWxhYmxlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmNhbmNlbGFibGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiZGVmYXVsdFByZXZlbnRlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5kZWZhdWx0UHJldmVudGVkO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcInRpbWVTdGFtcFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS50aW1lU3RhbXA7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkV2ZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgXCJpc1RydXN0ZWRcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gb2JqW2ltcGxdLmlzVHJ1c3RlZDtcbiAgICAgIH0sXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIFxuICAgIFxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogRXZlbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBFdmVudDogRXZlbnQgfSxcbiAgICBXb3JrZXI6IHsgRXZlbnQ6IEV2ZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vZXZlbnRzL0V2ZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29udmVydEluaGVyaXQob2JqLCByZXQpIHtcbiAgICBsZXQga2V5LCB2YWx1ZTtcblxuICAgIGtleSA9IFwiYnViYmxlc1wiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcImNhbmNlbGFibGVcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuICB9LFxuXG4gIGNvbnZlcnQob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IGhhcyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlIHx8IG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgbWF5IG5vdCBiZSBhIERhdGUgb3IgUmVnRXhwIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIG1vZHVsZS5leHBvcnRzLmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuXG5jb25zdCBVSUV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL1VJRXZlbnRJbml0XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29udmVydEluaGVyaXQob2JqLCByZXQpIHtcbiAgICBVSUV2ZW50SW5pdC5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgbGV0IGtleSwgdmFsdWU7XG5cbiAgICBrZXkgPSBcImFsdEtleVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcImN0cmxLZXlcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ID0gXCJtZXRhS2V5XCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwibW9kaWZpZXJBbHRHcmFwaFwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIm1vZGlmaWVyQ2Fwc0xvY2tcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ID0gXCJtb2RpZmllckZuXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwibW9kaWZpZXJGbkxvY2tcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ID0gXCJtb2RpZmllckh5cGVyXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwibW9kaWZpZXJOdW1Mb2NrXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwibW9kaWZpZXJPU1wiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIm1vZGlmaWVyU2Nyb2xsTG9ja1wiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIm1vZGlmaWVyU3VwZXJcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ID0gXCJtb2RpZmllclN5bWJvbFwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIm1vZGlmaWVyU3ltYm9sTG9ja1wiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcInNoaWZ0S2V5XCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cbiAgfSxcblxuICBjb252ZXJ0KG9iaikge1xuICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBoYXMgdG8gYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSB8fCBvYmogaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IG1heSBub3QgYmUgYSBEYXRlIG9yIFJlZ0V4cCBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBtb2R1bGUuZXhwb3J0cy5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBFdmVudFRhcmdldCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cblxuRXZlbnRUYXJnZXQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWRkRXZlbnRMaXN0ZW5lcicgb24gJ0V2ZW50VGFyZ2V0JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDM7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgaWYgKGFyZ3NbMV0gPT09IG51bGwgfHwgYXJnc1sxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1sxXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uYWRkRXZlbnRMaXN0ZW5lciguLi5hcmdzKTtcbn07XG5cbkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaykge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlbW92ZUV2ZW50TGlzdGVuZXInIG9uICdFdmVudFRhcmdldCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGlmIChhcmdzWzFdID09PSBudWxsIHx8IGFyZ3NbMV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMV0gPSBudWxsO1xuICB9IGVsc2Uge1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoLi4uYXJncyk7XG59O1xuXG5FdmVudFRhcmdldC5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdkaXNwYXRjaEV2ZW50JyBvbiAnRXZlbnRUYXJnZXQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5kaXNwYXRjaEV2ZW50KC4uLmFyZ3MpO1xufTtcblxuRXZlbnRUYXJnZXQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkV2ZW50VGFyZ2V0XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShFdmVudFRhcmdldC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShFdmVudFRhcmdldC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBFdmVudFRhcmdldCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEV2ZW50VGFyZ2V0OiBFdmVudFRhcmdldCB9LFxuICAgIFdvcmtlcjogeyBFdmVudFRhcmdldDogRXZlbnRUYXJnZXQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ldmVudHMvRXZlbnRUYXJnZXQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgQmxvYiA9IHJlcXVpcmUoXCIuL0Jsb2IuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IGNvbnZlcnRGaWxlUHJvcGVydHlCYWcgPSByZXF1aXJlKFwiLi9GaWxlUHJvcGVydHlCYWdcIikuY29udmVydDtcblxuZnVuY3Rpb24gRmlsZShmaWxlQml0cywgZmlsZU5hbWUpIHtcbiAgaWYgKCFuZXcudGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0ZpbGUnLiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvcjsgdGhpcyBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdGaWxlJzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDM7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzFdKTtcbiAgYXJnc1syXSA9IGNvbnZlcnRGaWxlUHJvcGVydHlCYWcoYXJnc1syXSk7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoRmlsZS5wcm90b3R5cGUsIEJsb2IuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoRmlsZSwgQmxvYi5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZS5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5uYW1lO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZS5wcm90b3R5cGUsIFwibGFzdE1vZGlmaWVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmxhc3RNb2RpZmllZDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5GaWxlLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJGaWxlXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShGaWxlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEZpbGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEJsb2IuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogRmlsZSxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEZpbGU6IEZpbGUgfSxcbiAgICBXb3JrZXI6IHsgRmlsZTogRmlsZSB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2ZpbGUtYXBpL0ZpbGUtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEZpbGVMaXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuXG5GaWxlTGlzdC5wcm90b3R5cGUuaXRlbSA9IGZ1bmN0aW9uIGl0ZW0oaW5kZXgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdpdGVtJyBvbiAnRmlsZUxpc3QnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5pdGVtKC4uLmFyZ3MpKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZUxpc3QucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5sZW5ndGg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuRmlsZUxpc3QucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkZpbGVMaXN0XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShGaWxlTGlzdC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShGaWxlTGlzdC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBGaWxlTGlzdCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEZpbGVMaXN0OiBGaWxlTGlzdCB9LFxuICAgIFdvcmtlcjogeyBGaWxlTGlzdDogRmlsZUxpc3QgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9maWxlLWFwaS9GaWxlTGlzdC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbmNvbnN0IEJsb2JQcm9wZXJ0eUJhZyA9IHJlcXVpcmUoXCIuL0Jsb2JQcm9wZXJ0eUJhZ1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KSB7XG4gICAgQmxvYlByb3BlcnR5QmFnLmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcblxuICAgIGtleSA9IFwibGFzdE1vZGlmaWVkXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImxvbmcgbG9uZ1wiXSh2YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIGNvbnZlcnQob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IGhhcyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlIHx8IG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgbWF5IG5vdCBiZSBhIERhdGUgb3IgUmVnRXhwIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIG1vZHVsZS5leHBvcnRzLmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgRXZlbnRUYXJnZXQgPSByZXF1aXJlKFwiLi9FdmVudFRhcmdldC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVJbnRlcmZhY2U6IGZ1bmN0aW9uIChkZWZhdWx0UHJpdmF0ZURhdGEgPSB7fSkge1xuXG5mdW5jdGlvbiBGaWxlUmVhZGVyKCkge1xuXG4gIGlmYWNlLnNldHVwKHRoaXMpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEZpbGVSZWFkZXIucHJvdG90eXBlLCBFdmVudFRhcmdldC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihGaWxlUmVhZGVyLCBFdmVudFRhcmdldC5pbnRlcmZhY2UpO1xuXG5cbkZpbGVSZWFkZXIucHJvdG90eXBlLnJlYWRBc0FycmF5QnVmZmVyID0gZnVuY3Rpb24gcmVhZEFzQXJyYXlCdWZmZXIoYmxvYikge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlYWRBc0FycmF5QnVmZmVyJyBvbiAnRmlsZVJlYWRlcic6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnJlYWRBc0FycmF5QnVmZmVyKC4uLmFyZ3MpO1xufTtcblxuRmlsZVJlYWRlci5wcm90b3R5cGUucmVhZEFzVGV4dCA9IGZ1bmN0aW9uIHJlYWRBc1RleHQoYmxvYikge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlYWRBc1RleHQnIG9uICdGaWxlUmVhZGVyJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0ucmVhZEFzVGV4dCguLi5hcmdzKTtcbn07XG5cbkZpbGVSZWFkZXIucHJvdG90eXBlLnJlYWRBc0RhdGFVUkwgPSBmdW5jdGlvbiByZWFkQXNEYXRhVVJMKGJsb2IpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdyZWFkQXNEYXRhVVJMJyBvbiAnRmlsZVJlYWRlcic6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnJlYWRBc0RhdGFVUkwoLi4uYXJncyk7XG59O1xuXG5GaWxlUmVhZGVyLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uIGFib3J0KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5hYm9ydCgpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlUmVhZGVyLCBcIkVNUFRZXCIsIHtcbiAgdmFsdWU6IDAsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpbGVSZWFkZXIucHJvdG90eXBlLCBcIkVNUFRZXCIsIHtcbiAgdmFsdWU6IDAsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZVJlYWRlciwgXCJMT0FESU5HXCIsIHtcbiAgdmFsdWU6IDEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpbGVSZWFkZXIucHJvdG90eXBlLCBcIkxPQURJTkdcIiwge1xuICB2YWx1ZTogMSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlUmVhZGVyLCBcIkRPTkVcIiwge1xuICB2YWx1ZTogMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZVJlYWRlci5wcm90b3R5cGUsIFwiRE9ORVwiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpbGVSZWFkZXIucHJvdG90eXBlLCBcInJlYWR5U3RhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucmVhZHlTdGF0ZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpbGVSZWFkZXIucHJvdG90eXBlLCBcInJlc3VsdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5yZXN1bHQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZVJlYWRlci5wcm90b3R5cGUsIFwiZXJyb3JcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZXJyb3IpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZVJlYWRlci5wcm90b3R5cGUsIFwib25sb2Fkc3RhcnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25sb2Fkc3RhcnQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25sb2Fkc3RhcnQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpbGVSZWFkZXIucHJvdG90eXBlLCBcIm9ucHJvZ3Jlc3NcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25wcm9ncmVzcyk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnByb2dyZXNzID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlUmVhZGVyLnByb3RvdHlwZSwgXCJvbmxvYWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25sb2FkKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubG9hZCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZVJlYWRlci5wcm90b3R5cGUsIFwib25hYm9ydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmFib3J0KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uYWJvcnQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpbGVSZWFkZXIucHJvdG90eXBlLCBcIm9uZXJyb3JcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25lcnJvcik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmVycm9yID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlUmVhZGVyLnByb3RvdHlwZSwgXCJvbmxvYWRlbmRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25sb2FkZW5kKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubG9hZGVuZCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkZpbGVSZWFkZXIucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkZpbGVSZWFkZXJcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRmlsZVJlYWRlci5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShGaWxlUmVhZGVyLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBFdmVudFRhcmdldC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgZm9yICh2YXIgcHJvcCBpbiBkZWZhdWx0UHJpdmF0ZURhdGEpIHtcbiAgICAgIGlmICghKHByb3AgaW4gcHJpdmF0ZURhdGEpKSB7XG4gICAgICAgIHByaXZhdGVEYXRhW3Byb3BdID0gZGVmYXVsdFByaXZhdGVEYXRhW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEZpbGVSZWFkZXIsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBGaWxlUmVhZGVyOiBGaWxlUmVhZGVyIH0sXG4gICAgV29ya2VyOiB7IEZpbGVSZWFkZXI6IEZpbGVSZWFkZXIgfVxuICB9XG59O1xucmV0dXJuIGlmYWNlO1xuICB9LFxuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbn07XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vZmlsZS1hcGkvRmlsZVJlYWRlci1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBVSUV2ZW50ID0gcmVxdWlyZShcIi4vVUlFdmVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgY29udmVydEZvY3VzRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vRm9jdXNFdmVudEluaXRcIikuY29udmVydDtcblxuZnVuY3Rpb24gRm9jdXNFdmVudCh0eXBlKSB7XG4gIGlmICghbmV3LnRhcmdldCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdGb2N1c0V2ZW50Jy4gUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3I7IHRoaXMgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnRm9jdXNFdmVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnRGb2N1c0V2ZW50SW5pdChhcmdzWzFdKTtcblxuICBpZmFjZS5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihGb2N1c0V2ZW50LnByb3RvdHlwZSwgVUlFdmVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihGb2N1c0V2ZW50LCBVSUV2ZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb2N1c0V2ZW50LnByb3RvdHlwZSwgXCJyZWxhdGVkVGFyZ2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnJlbGF0ZWRUYXJnZXQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkZvY3VzRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkZvY3VzRXZlbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEZvY3VzRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRm9jdXNFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgVUlFdmVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBGb2N1c0V2ZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgRm9jdXNFdmVudDogRm9jdXNFdmVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9Gb2N1c0V2ZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxuY29uc3QgVUlFdmVudEluaXQgPSByZXF1aXJlKFwiLi9VSUV2ZW50SW5pdFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KSB7XG4gICAgVUlFdmVudEluaXQuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJyZWxhdGVkVGFyZ2V0XCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSAodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IG51bGw7XG4gICAgfVxuICB9LFxuXG4gIGNvbnZlcnQob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IGhhcyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlIHx8IG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgbWF5IG5vdCBiZSBhIERhdGUgb3IgUmVnRXhwIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIG1vZHVsZS5leHBvcnRzLmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cblxuY29uc3QgSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHV0aWxzLkl0ZXJhdG9yUHJvdG90eXBlLCB7XG4gIG5leHQ6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGNvbnN0IGludGVybmFsID0gdGhpc1t1dGlscy5pdGVySW50ZXJuYWxTeW1ib2xdO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gaW50ZXJuYWwudGFyZ2V0O1xuICAgICAgY29uc3Qga2luZCA9IGludGVybmFsLmtpbmQ7XG4gICAgICBjb25zdCBpbmRleCA9IGludGVybmFsLmluZGV4O1xuICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbSh0YXJnZXRbaW1wbF0pO1xuICAgICAgY29uc3QgbGVuID0gdmFsdWVzLmxlbmd0aDtcbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWlyID0gdmFsdWVzW2luZGV4XTtcbiAgICAgIGludGVybmFsLmluZGV4ID0gaW5kZXggKyAxO1xuXG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgIGNhc2UgXCJrZXlcIjpcbiAgICAgICAgICByZXN1bHQgPSBwYWlyWzBdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICByZXN1bHQgPSBwYWlyWzFdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwia2V5K3ZhbHVlXCI6XG4gICAgICAgICAgcmVzdWx0ID0gW3BhaXJbMF0sIHBhaXJbMV1dO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgdmFsdWU6IHJlc3VsdCwgZG9uZTogZmFsc2UgfTtcbiAgICB9LFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6IFwiRm9ybURhdGFJdGVyYXRvclwiLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIEZvcm1EYXRhKCkge1xuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuXG4gIGlmYWNlLnNldHVwKHRoaXMsIGFyZ3MpO1xufVxuXG5cbkZvcm1EYXRhLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1swXSk7XG4gIGlmIChhcmdzWzJdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmFwcGVuZCguLi5hcmdzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiBfKG5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdGb3JtRGF0YSc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uZGVsZXRlKC4uLmFyZ3MpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldChuYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnRm9ybURhdGEnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmdldCguLi5hcmdzKSk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKG5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRBbGwnIG9uICdGb3JtRGF0YSc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0QWxsKC4uLmFyZ3MpKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBoYXMobmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2hhcycgb24gJ0Zvcm1EYXRhJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5oYXMoLi4uYXJncyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gc2V0KG5hbWUsIHZhbHVlKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0JyBvbiAnRm9ybURhdGEnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBpZiAoYXJnc1syXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMl0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5zZXQoLi4uYXJncyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cy5jcmVhdGVEZWZhdWx0SXRlcmF0b3IodGhpcywgXCJrZXkrdmFsdWVcIik7XG59XG5Gb3JtRGF0YS5wcm90b3R5cGUuZW50cmllcyA9IEZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdO1xuRm9ybURhdGEucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiBrZXlzKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuY3JlYXRlRGVmYXVsdEl0ZXJhdG9yKHRoaXMsIFwia2V5XCIpO1xufVxuRm9ybURhdGEucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzLmNyZWF0ZURlZmF1bHRJdGVyYXRvcih0aGlzLCBcInZhbHVlXCIpO1xufVxuRm9ybURhdGEucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJ0Zvcm1EYXRhJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LlwiKTtcbiAgfVxuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdGb3JtRGF0YSc6IFRoZSBjYWxsYmFjayBwcm92aWRlZCBhcyBwYXJhbWV0ZXIgMSBpcyBub3QgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgY29uc3QgdGhpc0FyZyA9IGFyZ3VtZW50c1sxXTtcbiAgbGV0IHBhaXJzID0gQXJyYXkuZnJvbSh0aGlzW2ltcGxdKTtcbiAgbGV0IGkgPSAwO1xuICB3aGlsZSAoaSA8IHBhaXJzLmxlbmd0aCkge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhaXJzW2ldO1xuICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWUsIGtleSwgdGhpcyk7XG4gICAgcGFpcnMgPSBBcnJheS5mcm9tKHRoaXNbaW1wbF0pO1xuICAgIGkrKztcbiAgfVxufTtcbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJGb3JtRGF0YVwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZURlZmF1bHRJdGVyYXRvcih0YXJnZXQsIGtpbmQpIHtcbiAgICBjb25zdCBpdGVyYXRvciA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgIGl0ZXJhdG9yW3V0aWxzLml0ZXJJbnRlcm5hbFN5bWJvbF0gPSB7XG4gICAgICB0YXJnZXQsXG4gICAgICBraW5kLFxuICAgICAgaW5kZXg6IDBcbiAgICB9O1xuICAgIHJldHVybiBpdGVyYXRvcjtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShGb3JtRGF0YS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShGb3JtRGF0YS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBGb3JtRGF0YSxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEZvcm1EYXRhOiBGb3JtRGF0YSB9LFxuICAgIFdvcmtlcjogeyBGb3JtRGF0YTogRm9ybURhdGEgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi94aHIvRm9ybURhdGEtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEdsb2JhbEV2ZW50SGFuZGxlcnMoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25hYm9ydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmFib3J0KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uYWJvcnQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uYXV0b2NvbXBsZXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uYXV0b2NvbXBsZXRlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uYXV0b2NvbXBsZXRlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmF1dG9jb21wbGV0ZWVycm9yXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uYXV0b2NvbXBsZXRlZXJyb3IpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25hdXRvY29tcGxldGVlcnJvciA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25ibHVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uYmx1cik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmJsdXIgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uY2FuY2VsXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uY2FuY2VsKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uY2FuY2VsID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmNhbnBsYXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25jYW5wbGF5KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uY2FucGxheSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25jYW5wbGF5dGhyb3VnaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmNhbnBsYXl0aHJvdWdoKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uY2FucGxheXRocm91Z2ggPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uY2hhbmdlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uY2hhbmdlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uY2hhbmdlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmNsaWNrXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uY2xpY2spO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25jbGljayA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25jbG9zZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmNsb3NlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uY2xvc2UgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uY29udGV4dG1lbnVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25jb250ZXh0bWVudSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmNvbnRleHRtZW51ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmN1ZWNoYW5nZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmN1ZWNoYW5nZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmN1ZWNoYW5nZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25kYmxjbGlja1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmRibGNsaWNrKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uZGJsY2xpY2sgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uZHJhZ1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmRyYWcpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25kcmFnID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmRyYWdlbmRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25kcmFnZW5kKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uZHJhZ2VuZCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25kcmFnZW50ZXJcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25kcmFnZW50ZXIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25kcmFnZW50ZXIgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uZHJhZ2V4aXRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25kcmFnZXhpdCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmRyYWdleGl0ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmRyYWdsZWF2ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmRyYWdsZWF2ZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmRyYWdsZWF2ZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25kcmFnb3ZlclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmRyYWdvdmVyKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uZHJhZ292ZXIgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uZHJhZ3N0YXJ0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uZHJhZ3N0YXJ0KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uZHJhZ3N0YXJ0ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmRyb3BcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25kcm9wKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uZHJvcCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25kdXJhdGlvbmNoYW5nZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmR1cmF0aW9uY2hhbmdlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uZHVyYXRpb25jaGFuZ2UgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uZW1wdGllZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmVtcHRpZWQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25lbXB0aWVkID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmVuZGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uZW5kZWQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25lbmRlZCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25lcnJvclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmVycm9yKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uZXJyb3IgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uZm9jdXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25mb2N1cyk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmZvY3VzID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmlucHV0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uaW5wdXQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25pbnB1dCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25pbnZhbGlkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uaW52YWxpZCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmludmFsaWQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ua2V5ZG93blwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmtleWRvd24pO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25rZXlkb3duID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmtleXByZXNzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ua2V5cHJlc3MpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25rZXlwcmVzcyA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25rZXl1cFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmtleXVwKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ua2V5dXAgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ubG9hZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmxvYWQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25sb2FkID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmxvYWRlZGRhdGFcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25sb2FkZWRkYXRhKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubG9hZGVkZGF0YSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25sb2FkZWRtZXRhZGF0YVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmxvYWRlZG1ldGFkYXRhKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubG9hZGVkbWV0YWRhdGEgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ubG9hZHN0YXJ0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ubG9hZHN0YXJ0KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubG9hZHN0YXJ0ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbm1vdXNlZG93blwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbm1vdXNlZG93bik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbm1vdXNlZG93biA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25tb3VzZWVudGVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ubW91c2VlbnRlcik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbm1vdXNlZW50ZXIgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ubW91c2VsZWF2ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbm1vdXNlbGVhdmUpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25tb3VzZWxlYXZlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbm1vdXNlbW92ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbm1vdXNlbW92ZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbm1vdXNlbW92ZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25tb3VzZW91dFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbm1vdXNlb3V0KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubW91c2VvdXQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ubW91c2VvdmVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ubW91c2VvdmVyKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubW91c2VvdmVyID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbm1vdXNldXBcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25tb3VzZXVwKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubW91c2V1cCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib253aGVlbFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbndoZWVsKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ud2hlZWwgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ucGF1c2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25wYXVzZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnBhdXNlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnBsYXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25wbGF5KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucGxheSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25wbGF5aW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ucGxheWluZyk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnBsYXlpbmcgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ucHJvZ3Jlc3NcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25wcm9ncmVzcyk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnByb2dyZXNzID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnJhdGVjaGFuZ2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25yYXRlY2hhbmdlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucmF0ZWNoYW5nZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25yZXNldFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnJlc2V0KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucmVzZXQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ucmVzaXplXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ucmVzaXplKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucmVzaXplID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnNjcm9sbFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnNjcm9sbCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnNjcm9sbCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25zZWVrZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25zZWVrZWQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25zZWVrZWQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uc2Vla2luZ1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnNlZWtpbmcpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25zZWVraW5nID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnNlbGVjdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnNlbGVjdCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnNlbGVjdCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25zaG93XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uc2hvdyk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnNob3cgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uc29ydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnNvcnQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25zb3J0ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnN0YWxsZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25zdGFsbGVkKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uc3RhbGxlZCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25zdWJtaXRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25zdWJtaXQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25zdWJtaXQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uc3VzcGVuZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnN1c3BlbmQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25zdXNwZW5kID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnRpbWV1cGRhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub250aW1ldXBkYXRlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9udGltZXVwZGF0ZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib250b2dnbGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub250b2dnbGUpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub250b2dnbGUgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9udm9sdW1lY2hhbmdlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9udm9sdW1lY2hhbmdlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9udm9sdW1lY2hhbmdlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbndhaXRpbmdcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub253YWl0aW5nKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ud2FpdGluZyA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkdsb2JhbEV2ZW50SGFuZGxlcnNcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBHbG9iYWxFdmVudEhhbmRsZXJzLFxuICBleHBvc2U6IHtcbiAgICBcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvR2xvYmFsRXZlbnRIYW5kbGVycy1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBtaXhpbiA9IHV0aWxzLm1peGluO1xuY29uc3QgSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscyA9IHJlcXVpcmUoXCIuL0hUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMuanNcIik7XG5cbmZ1bmN0aW9uIEhUTUxBbmNob3JFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxBbmNob3JFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5taXhpbihIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUsIEhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLm1peGVkSW50by5wdXNoKEhUTUxBbmNob3JFbGVtZW50KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUsIFwidGFyZ2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInRhcmdldFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSwgXCJkb3dubG9hZFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLCBcInJlbFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwicmVsXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUsIFwiaHJlZmxhbmdcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImhyZWZsYW5nXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJocmVmbGFuZ1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLCBcInRleHRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udGV4dDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS50ZXh0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSwgXCJjb29yZHNcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNvb3Jkc1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29vcmRzXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLCBcImNoYXJzZXRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJzZXRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNoYXJzZXRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSwgXCJyZXZcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInJldlwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwicmV2XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLCBcInNoYXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzaGFwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic2hhcGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxBbmNob3JFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTEFuY2hvckVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MQW5jaG9yRWxlbWVudDogSFRNTEFuY2hvckVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MQW5jaG9yRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxBcHBsZXRFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxBcHBsZXRFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUsIFwiYWx0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbHRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsdFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZSwgXCJhcmNoaXZlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhcmNoaXZlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhcmNoaXZlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLCBcImNvZGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNvZGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvZGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUsIFwiY29kZUJhc2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY29kZUJhc2U7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uY29kZUJhc2UgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLCBcImhlaWdodFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUsIFwiaHNwYWNlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJoc3BhY2VcIikpO1xuICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAwIHx8IHZhbHVlID4gMjE0NzQ4MzY0NyA/IDAgOiB2YWx1ZVxuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgViA9IFYgPiAyMTQ3NDgzNjQ3ID8gMCA6IFY7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJoc3BhY2VcIiwgU3RyaW5nKFYpKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLCBcIm9iamVjdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5vYmplY3Q7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ub2JqZWN0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZSwgXCJ2c3BhY2VcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcInZzcGFjZVwiKSk7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDAgfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3ID8gMCA6IHZhbHVlXG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICBWID0gViA+IDIxNDc0ODM2NDcgPyAwIDogVjtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZzcGFjZVwiLCBTdHJpbmcoVikpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLCBcIndpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxBcHBsZXRFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTEFwcGxldEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MQXBwbGV0RWxlbWVudDogSFRNTEFwcGxldEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MQXBwbGV0RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBtaXhpbiA9IHV0aWxzLm1peGluO1xuY29uc3QgSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscyA9IHJlcXVpcmUoXCIuL0hUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMuanNcIik7XG5cbmZ1bmN0aW9uIEhUTUxBcmVhRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEFyZWFFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5taXhpbihIVE1MQXJlYUVsZW1lbnQucHJvdG90eXBlLCBIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLmludGVyZmFjZS5wcm90b3R5cGUpO1xuSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5taXhlZEludG8ucHVzaChIVE1MQXJlYUVsZW1lbnQpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwiYWx0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbHRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsdFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwiY29vcmRzXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjb29yZHNcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvb3Jkc1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwic2hhcGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNoYXBlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzaGFwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwidGFyZ2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInRhcmdldFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwicmVsXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJyZWxcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInJlbFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwibm9IcmVmXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm5vSHJlZlwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJub0hyZWZcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJub0hyZWZcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MQXJlYUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxBcmVhRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTEFyZWFFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTEFyZWFFbGVtZW50OiBIVE1MQXJlYUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MQXJlYUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTE1lZGlhRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxNZWRpYUVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTEF1ZGlvRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEF1ZGlvRWxlbWVudC5wcm90b3R5cGUsIEhUTUxNZWRpYUVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEF1ZGlvRWxlbWVudCwgSFRNTE1lZGlhRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5cbkhUTUxBdWRpb0VsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxBdWRpb0VsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxBdWRpb0VsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEF1ZGlvRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTE1lZGlhRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MQXVkaW9FbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTEF1ZGlvRWxlbWVudDogSFRNTEF1ZGlvRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxBdWRpb0VsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MQlJFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQlJFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEJSRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCUkVsZW1lbnQucHJvdG90eXBlLCBcImNsZWFyXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjbGVhclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY2xlYXJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEJSRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEJSRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEJSRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQlJFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MQlJFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTEJSRWxlbWVudDogSFRNTEJSRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxCUkVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MQmFzZUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxCYXNlRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxCYXNlRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCYXNlRWxlbWVudC5wcm90b3R5cGUsIFwiaHJlZlwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ocmVmO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhyZWYgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEJhc2VFbGVtZW50LnByb3RvdHlwZSwgXCJ0YXJnZXRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInRhcmdldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxCYXNlRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEJhc2VFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQmFzZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEJhc2VFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MQmFzZUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MQmFzZUVsZW1lbnQ6IEhUTUxCYXNlRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxCYXNlRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBtaXhpbiA9IHV0aWxzLm1peGluO1xuY29uc3QgV2luZG93RXZlbnRIYW5kbGVycyA9IHJlcXVpcmUoXCIuL1dpbmRvd0V2ZW50SGFuZGxlcnMuanNcIik7XG5cbmZ1bmN0aW9uIEhUTUxCb2R5RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEJvZHlFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5taXhpbihIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLCBXaW5kb3dFdmVudEhhbmRsZXJzLmludGVyZmFjZS5wcm90b3R5cGUpO1xuV2luZG93RXZlbnRIYW5kbGVycy5taXhlZEludG8ucHVzaChIVE1MQm9keUVsZW1lbnQpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidGV4dFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInRleHRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLCBcImxpbmtcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImxpbmtcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJsaW5rXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSwgXCJ2TGlua1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidkxpbmtcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ2TGlua1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsIFwiYUxpbmtcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFMaW5rXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYUxpbmtcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLCBcImJnQ29sb3JcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImJnQ29sb3JcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJiZ0NvbG9yXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSwgXCJiYWNrZ3JvdW5kXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJiYWNrZ3JvdW5kXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJiYWNrZ3JvdW5kXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEJvZHlFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MQm9keUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MQm9keUVsZW1lbnQ6IEhUTUxCb2R5RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxCb2R5RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxCdXR0b25FbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxCdXR0b25FbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlLCBcImF1dG9mb2N1c1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJhdXRvZm9jdXNcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYXV0b2ZvY3VzXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiYXV0b2ZvY3VzXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUsIFwiZGlzYWJsZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlLCBcImZvcm1cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZm9ybSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUsIFwiZm9ybU5vVmFsaWRhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiZm9ybU5vVmFsaWRhdGVcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZm9ybU5vVmFsaWRhdGVcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJmb3JtTm9WYWxpZGF0ZVwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlLCBcImZvcm1UYXJnZXRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImZvcm1UYXJnZXRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImZvcm1UYXJnZXRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnR5cGU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0udHlwZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEJ1dHRvbkVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MQnV0dG9uRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxCdXR0b25FbGVtZW50OiBIVE1MQnV0dG9uRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxCdXR0b25FbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTENhbnZhc0VsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTENhbnZhc0VsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLmdldENvbnRleHQgPSBmdW5jdGlvbiBnZXRDb250ZXh0KGNvbnRleHRJZCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldENvbnRleHQnIG9uICdIVE1MQ2FudmFzRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJhbnlcIl0oYXJnc1sxXSk7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0Q29udGV4dCguLi5hcmdzKSk7XG59O1xuXG5IVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUucHJvYmFibHlTdXBwb3J0c0NvbnRleHQgPSBmdW5jdGlvbiBwcm9iYWJseVN1cHBvcnRzQ29udGV4dChjb250ZXh0SWQpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdwcm9iYWJseVN1cHBvcnRzQ29udGV4dCcgb24gJ0hUTUxDYW52YXNFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBpZiAoYXJnc1sxXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcImFueVwiXShhcmdzWzFdKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCguLi5hcmdzKTtcbn07XG5cbkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24gc2V0Q29udGV4dChjb250ZXh0KSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0Q29udGV4dCcgb24gJ0hUTUxDYW52YXNFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uc2V0Q29udGV4dCguLi5hcmdzKTtcbn07XG5cbkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS50b0RhdGFVUkwgPSBmdW5jdGlvbiB0b0RhdGFVUkwoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIGlmIChhcmdzWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiYW55XCJdKGFyZ3NbMV0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnRvRGF0YVVSTCguLi5hcmdzKTtcbn07XG5cbkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS50b0Jsb2IgPSBmdW5jdGlvbiB0b0Jsb2IoY2FsbGJhY2spIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICd0b0Jsb2InIG9uICdIVE1MQ2FudmFzRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICB9XG4gIGlmIChhcmdzWzJdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiYW55XCJdKGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnRvQmxvYiguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLCBcIndpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLndpZHRoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS53aWR0aCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhlaWdodDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaGVpZ2h0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTENhbnZhc0VsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MQ2FudmFzRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxDYW52YXNFbGVtZW50OiBIVE1MQ2FudmFzRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxDYW52YXNFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTERMaXN0RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTERMaXN0RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxETGlzdEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRExpc3RFbGVtZW50LnByb3RvdHlwZSwgXCJjb21wYWN0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImNvbXBhY3RcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29tcGFjdFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImNvbXBhY3RcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MRExpc3RFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MRExpc3RFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRExpc3RFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxETGlzdEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxETGlzdEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MRExpc3RFbGVtZW50OiBIVE1MRExpc3RFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTERMaXN0RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxEYXRhRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTERhdGFFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTERhdGFFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTERhdGFFbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxEYXRhRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTERhdGFFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRGF0YUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTERhdGFFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MRGF0YUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MRGF0YUVsZW1lbnQ6IEhUTUxEYXRhRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxEYXRhRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxEYXRhTGlzdEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxEYXRhTGlzdEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRGF0YUxpc3RFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5cbkhUTUxEYXRhTGlzdEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxEYXRhTGlzdEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxEYXRhTGlzdEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTERhdGFMaXN0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTERhdGFMaXN0RWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxEYXRhTGlzdEVsZW1lbnQ6IEhUTUxEYXRhTGlzdEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MRGF0YUxpc3RFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTERpYWxvZ0VsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxEaWFsb2dFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTERpYWxvZ0VsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRGlhbG9nRWxlbWVudC5wcm90b3R5cGUsIFwib3BlblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJvcGVuXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm9wZW5cIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJvcGVuXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTERpYWxvZ0VsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxEaWFsb2dFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRGlhbG9nRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRGlhbG9nRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTERpYWxvZ0VsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MRGlhbG9nRWxlbWVudDogSFRNTERpYWxvZ0VsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MRGlhbG9nRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxEaXJlY3RvcnlFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRGlyZWN0b3J5RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxEaXJlY3RvcnlFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTERpcmVjdG9yeUVsZW1lbnQucHJvdG90eXBlLCBcImNvbXBhY3RcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiY29tcGFjdFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb21wYWN0XCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiY29tcGFjdFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxEaXJlY3RvcnlFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MRGlyZWN0b3J5RWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTERpcmVjdG9yeUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTERpcmVjdG9yeUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxEaXJlY3RvcnlFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTERpcmVjdG9yeUVsZW1lbnQ6IEhUTUxEaXJlY3RvcnlFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTERpcmVjdG9yeUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MRGl2RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTERpdkVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRGl2RWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxEaXZFbGVtZW50LnByb3RvdHlwZSwgXCJhbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxEaXZFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MRGl2RWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTERpdkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTERpdkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxEaXZFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTERpdkVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTERpdkVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgRWxlbWVudCA9IHJlcXVpcmUoXCIuL0VsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IG1peGluID0gdXRpbHMubWl4aW47XG5jb25zdCBFbGVtZW50Q1NTSW5saW5lU3R5bGUgPSByZXF1aXJlKFwiLi9FbGVtZW50Q1NTSW5saW5lU3R5bGUuanNcIik7XG5jb25zdCBHbG9iYWxFdmVudEhhbmRsZXJzID0gcmVxdWlyZShcIi4vR2xvYmFsRXZlbnRIYW5kbGVycy5qc1wiKTtcbmNvbnN0IEVsZW1lbnRDb250ZW50RWRpdGFibGUgPSByZXF1aXJlKFwiLi9FbGVtZW50Q29udGVudEVkaXRhYmxlLmpzXCIpO1xuXG5mdW5jdGlvbiBIVE1MRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEVsZW1lbnQucHJvdG90eXBlLCBFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxFbGVtZW50LCBFbGVtZW50LmludGVyZmFjZSk7XG5cbm1peGluKEhUTUxFbGVtZW50LnByb3RvdHlwZSwgRWxlbWVudENTU0lubGluZVN0eWxlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuRWxlbWVudENTU0lubGluZVN0eWxlLm1peGVkSW50by5wdXNoKEhUTUxFbGVtZW50KTtcbm1peGluKEhUTUxFbGVtZW50LnByb3RvdHlwZSwgR2xvYmFsRXZlbnRIYW5kbGVycy5pbnRlcmZhY2UucHJvdG90eXBlKTtcbkdsb2JhbEV2ZW50SGFuZGxlcnMubWl4ZWRJbnRvLnB1c2goSFRNTEVsZW1lbnQpO1xubWl4aW4oSFRNTEVsZW1lbnQucHJvdG90eXBlLCBFbGVtZW50Q29udGVudEVkaXRhYmxlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuRWxlbWVudENvbnRlbnRFZGl0YWJsZS5taXhlZEludG8ucHVzaChIVE1MRWxlbWVudCk7XG5cbkhUTUxFbGVtZW50LnByb3RvdHlwZS5jbGljayA9IGZ1bmN0aW9uIGNsaWNrKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5jbGljaygpO1xufTtcblxuSFRNTEVsZW1lbnQucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gZm9jdXMoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmZvY3VzKCk7XG59O1xuXG5IVE1MRWxlbWVudC5wcm90b3R5cGUuYmx1ciA9IGZ1bmN0aW9uIGJsdXIoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmJsdXIoKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVsZW1lbnQucHJvdG90eXBlLCBcInRpdGxlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidGl0bGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsIFwibGFuZ1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibGFuZ1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibGFuZ1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbGVtZW50LnByb3RvdHlwZSwgXCJkaXJcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uZGlyO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmRpciA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsIFwiaGlkZGVuXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImhpZGRlblwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJoaWRkZW5cIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbGVtZW50LnByb3RvdHlwZSwgXCJ0YWJJbmRleFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS50YWJJbmRleDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJsb25nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0udGFiSW5kZXggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVsZW1lbnQucHJvdG90eXBlLCBcImFjY2Vzc0tleVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWNjZXNzS2V5XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhY2Nlc3NLZXlcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsIFwib2Zmc2V0UGFyZW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9mZnNldFBhcmVudCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsIFwib2Zmc2V0VG9wXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9mZnNldFRvcDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbGVtZW50LnByb3RvdHlwZSwgXCJvZmZzZXRMZWZ0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9mZnNldExlZnQ7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsIFwib2Zmc2V0V2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub2Zmc2V0V2lkdGg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsIFwib2Zmc2V0SGVpZ2h0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9mZnNldEhlaWdodDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTEVsZW1lbnQ6IEhUTUxFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MRW1iZWRFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRW1iZWRFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEVtYmVkRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbWJlZEVsZW1lbnQucHJvdG90eXBlLCBcInNyY1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zcmM7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc3JjID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbWJlZEVsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInR5cGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRW1iZWRFbGVtZW50LnByb3RvdHlwZSwgXCJ3aWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwid2lkdGhcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVtYmVkRWxlbWVudC5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbWJlZEVsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRW1iZWRFbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxFbWJlZEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxFbWJlZEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxFbWJlZEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEVtYmVkRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTEVtYmVkRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxFbWJlZEVsZW1lbnQ6IEhUTUxFbWJlZEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MRW1iZWRFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTEZpZWxkU2V0RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEZpZWxkU2V0RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxGaWVsZFNldEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRmllbGRTZXRFbGVtZW50LnByb3RvdHlwZSwgXCJkaXNhYmxlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRmllbGRTZXRFbGVtZW50LnByb3RvdHlwZSwgXCJmb3JtXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmZvcm0pO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZpZWxkU2V0RWxlbWVudC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MRmllbGRTZXRFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MRmllbGRTZXRFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRmllbGRTZXRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxGaWVsZFNldEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxGaWVsZFNldEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MRmllbGRTZXRFbGVtZW50OiBIVE1MRmllbGRTZXRFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEZpZWxkU2V0RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxGb250RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEZvbnRFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEZvbnRFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvbnRFbGVtZW50LnByb3RvdHlwZSwgXCJjb2xvclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY29sb3JcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb2xvclwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb250RWxlbWVudC5wcm90b3R5cGUsIFwiZmFjZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZmFjZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZmFjZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb250RWxlbWVudC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwic2l6ZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic2l6ZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MRm9udEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxGb250RWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEZvbnRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxGb250RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTEZvbnRFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTEZvbnRFbGVtZW50OiBIVE1MRm9udEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MRm9udEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MRm9ybUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxGb3JtRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuXG5IVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uIHN1Ym1pdCgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uc3VibWl0KCk7XG59O1xuXG5IVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnJlc2V0KCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsIFwiYWNjZXB0Q2hhcnNldFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWNjZXB0LWNoYXJzZXRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFjY2VwdC1jaGFyc2V0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgXCJhY3Rpb25cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uYWN0aW9uO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmFjdGlvbiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCBcImVuY3R5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uZW5jdHlwZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5lbmN0eXBlID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsIFwibWV0aG9kXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm1ldGhvZDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5tZXRob2QgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgXCJub1ZhbGlkYXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm5vVmFsaWRhdGVcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibm9WYWxpZGF0ZVwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcIm5vVmFsaWRhdGVcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsIFwidGFyZ2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInRhcmdldFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsIFwiZWxlbWVudHNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZWxlbWVudHMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubGVuZ3RoO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEZvcm1FbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MRm9ybUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MRm9ybUVsZW1lbnQ6IEhUTUxGb3JtRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxGb3JtRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxGcmFtZUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRnJhbWVFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcInNjcm9sbGluZ1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwic2Nyb2xsaW5nXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzY3JvbGxpbmdcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJzcmNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc3JjO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNyYyA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJmcmFtZUJvcmRlclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZnJhbWVCb3JkZXJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImZyYW1lQm9yZGVyXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwibG9uZ0Rlc2NcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubG9uZ0Rlc2M7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ubG9uZ0Rlc2MgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwibm9SZXNpemVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwibm9SZXNpemVcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibm9SZXNpemVcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJub1Jlc2l6ZVwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudERvY3VtZW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNvbnRlbnREb2N1bWVudCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNvbnRlbnRXaW5kb3cpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwibWFyZ2luSGVpZ2h0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJtYXJnaW5IZWlnaHRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtYXJnaW5IZWlnaHRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJtYXJnaW5XaWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibWFyZ2luV2lkdGhcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtYXJnaW5XaWR0aFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MRnJhbWVFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxGcmFtZUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MRnJhbWVFbGVtZW50OiBIVE1MRnJhbWVFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEZyYW1lRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBtaXhpbiA9IHV0aWxzLm1peGluO1xuY29uc3QgV2luZG93RXZlbnRIYW5kbGVycyA9IHJlcXVpcmUoXCIuL1dpbmRvd0V2ZW50SGFuZGxlcnMuanNcIik7XG5cbmZ1bmN0aW9uIEhUTUxGcmFtZVNldEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxGcmFtZVNldEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRnJhbWVTZXRFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5taXhpbihIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSwgV2luZG93RXZlbnRIYW5kbGVycy5pbnRlcmZhY2UucHJvdG90eXBlKTtcbldpbmRvd0V2ZW50SGFuZGxlcnMubWl4ZWRJbnRvLnB1c2goSFRNTEZyYW1lU2V0RWxlbWVudCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZyYW1lU2V0RWxlbWVudC5wcm90b3R5cGUsIFwiY29sc1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY29sc1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29sc1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGcmFtZVNldEVsZW1lbnQucHJvdG90eXBlLCBcInJvd3NcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInJvd3NcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInJvd3NcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEZyYW1lU2V0RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEZyYW1lU2V0RWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEZyYW1lU2V0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MRnJhbWVTZXRFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTEZyYW1lU2V0RWxlbWVudDogSFRNTEZyYW1lU2V0RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxGcmFtZVNldEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MSFJFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MSFJFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEhSRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxIUkVsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSFJFbGVtZW50LnByb3RvdHlwZSwgXCJjb2xvclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY29sb3JcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvbG9yXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEhSRWxlbWVudC5wcm90b3R5cGUsIFwibm9TaGFkZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJub1NoYWRlXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5vU2hhZGVcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJub1NoYWRlXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSFJFbGVtZW50LnByb3RvdHlwZSwgXCJzaXplXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzaXplXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzaXplXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEhSRWxlbWVudC5wcm90b3R5cGUsIFwid2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MSFJFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MSFJFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MSFJFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxIUkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxIUkVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MSFJFbGVtZW50OiBIVE1MSFJFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEhSRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxIZWFkRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEhlYWRFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEhlYWRFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5cbkhUTUxIZWFkRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEhlYWRFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MSGVhZEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEhlYWRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MSGVhZEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MSGVhZEVsZW1lbnQ6IEhUTUxIZWFkRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxIZWFkRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxIZWFkaW5nRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEhlYWRpbmdFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEhlYWRpbmdFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEhlYWRpbmdFbGVtZW50LnByb3RvdHlwZSwgXCJhbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxIZWFkaW5nRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEhlYWRpbmdFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MSGVhZGluZ0VsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEhlYWRpbmdFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MSGVhZGluZ0VsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MSGVhZGluZ0VsZW1lbnQ6IEhUTUxIZWFkaW5nRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxIZWFkaW5nRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxIdG1sRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEh0bWxFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEh0bWxFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEh0bWxFbGVtZW50LnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2ZXJzaW9uXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ2ZXJzaW9uXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxIdG1sRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEh0bWxFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MSHRtbEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEh0bWxFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MSHRtbEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MSHRtbEVsZW1lbnQ6IEhUTUxIdG1sRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxIdG1sRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscygpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSwgXCJocmVmXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhyZWY7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaHJlZiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbkhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5ocmVmOztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSwgXCJvcmlnaW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub3JpZ2luO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUsIFwicHJvdG9jb2xcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucHJvdG9jb2w7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucHJvdG9jb2wgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUsIFwidXNlcm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udXNlcm5hbWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0udXNlcm5hbWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUsIFwicGFzc3dvcmRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGFzc3dvcmQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGFzc3dvcmQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUsIFwiaG9zdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3QgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUsIFwiaG9zdG5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaG9zdG5hbWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaG9zdG5hbWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUsIFwicG9ydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wb3J0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBvcnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUsIFwicGF0aG5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGF0aG5hbWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGF0aG5hbWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUsIFwic2VhcmNoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNlYXJjaDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zZWFyY2ggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUsIFwiaGFzaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5oYXNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhhc2ggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHNcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLFxuICBleHBvc2U6IHtcbiAgICBcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxJRnJhbWVFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxJRnJhbWVFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5cbkhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZS5nZXRTVkdEb2N1bWVudCA9IGZ1bmN0aW9uIGdldFNWR0RvY3VtZW50KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5nZXRTVkdEb2N1bWVudCgpKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcInNyY1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zcmM7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc3JjID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJzcmNkb2NcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNyY2RvY1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3JjZG9jXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwic2VhbWxlc3NcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VhbWxlc3M7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNlYW1sZXNzID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJhbGxvd0Z1bGxzY3JlZW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiYWxsb3dGdWxsc2NyZWVuXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsbG93RnVsbHNjcmVlblwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImFsbG93RnVsbHNjcmVlblwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcIndpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50RG9jdW1lbnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY29udGVudERvY3VtZW50KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNvbnRlbnRXaW5kb3cpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwic2Nyb2xsaW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzY3JvbGxpbmdcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNjcm9sbGluZ1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJmcmFtZUJvcmRlclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZnJhbWVCb3JkZXJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImZyYW1lQm9yZGVyXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImxvbmdEZXNjXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmxvbmdEZXNjO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmxvbmdEZXNjID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJtYXJnaW5IZWlnaHRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm1hcmdpbkhlaWdodFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm1hcmdpbkhlaWdodFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJtYXJnaW5XaWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibWFyZ2luV2lkdGhcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtYXJnaW5XaWR0aFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTElGcmFtZUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MSUZyYW1lRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxJRnJhbWVFbGVtZW50OiBIVE1MSUZyYW1lRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxJRnJhbWVFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTEltYWdlRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxJbWFnZUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJhbHRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsdFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWx0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwic3JjXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNyYztcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zcmMgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwic3Jjc2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzcmNzZXRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNyY3NldFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcInNpemVzXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzaXplc1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic2l6ZXNcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJjcm9zc09yaWdpblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY3Jvc3NPcmlnaW5cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgfVxuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY3Jvc3NPcmlnaW5cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJ1c2VNYXBcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInVzZU1hcFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidXNlTWFwXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwiaXNNYXBcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiaXNNYXBcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaXNNYXBcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJpc01hcFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwid2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ud2lkdGg7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLndpZHRoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcImhlaWdodFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5oZWlnaHQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhlaWdodCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJuYXR1cmFsV2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubmF0dXJhbFdpZHRoO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwibmF0dXJhbEhlaWdodFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5uYXR1cmFsSGVpZ2h0O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwiY29tcGxldGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY29tcGxldGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJjdXJyZW50U3JjXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmN1cnJlbnRTcmM7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwibG93c3JjXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJsb3dzcmNcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImxvd3NyY1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJoc3BhY2VcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcImhzcGFjZVwiKSk7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IC0yMTQ3NDgzNjQ4IHx8IHZhbHVlID4gMjE0NzQ4MzY0NyA/IDAgOiB2YWx1ZVxuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJoc3BhY2VcIiwgU3RyaW5nKFYpKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcInZzcGFjZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwidnNwYWNlXCIpKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgLTIxNDc0ODM2NDggfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3ID8gMCA6IHZhbHVlXG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZzcGFjZVwiLCBTdHJpbmcoVikpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwibG9uZ0Rlc2NcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImxvbmdEZXNjXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJsb25nRGVzY1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcImJvcmRlclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYm9yZGVyXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYm9yZGVyXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxJbWFnZUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTEltYWdlRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxJbWFnZUVsZW1lbnQ6IEhUTUxJbWFnZUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MSW1hZ2VFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTElucHV0RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxJbnB1dEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24gc2VsZWN0KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5zZWxlY3QoKTtcbn07XG5cbkhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLnNldFJhbmdlVGV4dCA9IGZ1bmN0aW9uIHNldFJhbmdlVGV4dChyZXBsYWNlbWVudCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFJhbmdlVGV4dCcgb24gJ0hUTUxJbnB1dEVsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCA0OyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLnNldFJhbmdlVGV4dCguLi5hcmdzKTtcbn07XG5cbkhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLnNldFNlbGVjdGlvblJhbmdlID0gZnVuY3Rpb24gc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFNlbGVjdGlvblJhbmdlJyBvbiAnSFRNTElucHV0RWxlbWVudCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMV0pO1xuICBpZiAoYXJnc1syXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMl0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5zZXRTZWxlY3Rpb25SYW5nZSguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiYWNjZXB0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhY2NlcHRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFjY2VwdFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImFsdFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWx0XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJhdXRvY29tcGxldGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImF1dG9jb21wbGV0ZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYXV0b2NvbXBsZXRlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiYXV0b2ZvY3VzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImF1dG9mb2N1c1wiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhdXRvZm9jdXNcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJhdXRvZm9jdXNcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImRlZmF1bHRDaGVja2VkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImNoZWNrZWRcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImNoZWNrZWRcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImNoZWNrZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2hlY2tlZDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uY2hlY2tlZCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJkaXJOYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJkaXJOYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkaXJOYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiZGlzYWJsZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiZm9ybVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5mb3JtKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImZpbGVzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmZpbGVzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImZvcm1Ob1ZhbGlkYXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImZvcm1Ob1ZhbGlkYXRlXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImZvcm1Ob1ZhbGlkYXRlXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZm9ybU5vVmFsaWRhdGVcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImZvcm1UYXJnZXRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImZvcm1UYXJnZXRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImZvcm1UYXJnZXRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJpbnB1dE1vZGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImlucHV0TW9kZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaW5wdXRNb2RlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibWF4XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJtYXhcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm1heFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcIm1heExlbmd0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5tYXhMZW5ndGg7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLm1heExlbmd0aCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJtaW5cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm1pblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibWluXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibWluTGVuZ3RoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm1pbkxlbmd0aDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJsb25nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ubWluTGVuZ3RoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcIm11bHRpcGxlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm11bHRpcGxlXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm11bHRpcGxlXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwibXVsdGlwbGVcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJwYXR0ZXJuXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJwYXR0ZXJuXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJwYXR0ZXJuXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwicGxhY2Vob2xkZXJcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInBsYWNlaG9sZGVyXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcInJlYWRPbmx5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcInJlYWRPbmx5XCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInJlYWRPbmx5XCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwicmVhZE9ubHlcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcInJlcXVpcmVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcInJlcXVpcmVkXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInJlcXVpcmVkXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwicmVxdWlyZWRcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcInNpemVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2l6ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc2l6ZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJzcmNcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNyY1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3JjXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwic3RlcFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwic3RlcFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3RlcFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udHlwZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS50eXBlID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImRlZmF1bHRWYWx1ZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzW2ltcGxdLnZhbHVlID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcInNlbGVjdGlvblN0YXJ0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNlbGVjdGlvblN0YXJ0O1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIH1cbiAgICB0aGlzW2ltcGxdLnNlbGVjdGlvblN0YXJ0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcInNlbGVjdGlvbkVuZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWxlY3Rpb25FbmQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgaWYgKFYgPT09IG51bGwgfHwgViA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBWID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgfVxuICAgIHRoaXNbaW1wbF0uc2VsZWN0aW9uRW5kID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcInNlbGVjdGlvbkRpcmVjdGlvblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWxlY3Rpb25EaXJlY3Rpb247XG4gIH0sXG4gIHNldChWKSB7XG4gICAgaWYgKFYgPT09IG51bGwgfHwgViA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBWID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB9XG4gICAgdGhpc1tpbXBsXS5zZWxlY3Rpb25EaXJlY3Rpb24gPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcInVzZU1hcFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidXNlTWFwXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ1c2VNYXBcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTElucHV0RWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MSW5wdXRFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTElucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxJbnB1dEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MTElFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTElFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTExJRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMSUVsZW1lbnQucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IC0yMTQ3NDgzNjQ4IHx8IHZhbHVlID4gMjE0NzQ4MzY0NyA/IDAgOiB2YWx1ZVxuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCBTdHJpbmcoVikpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTExJRWxlbWVudC5wcm90b3R5cGUsIFwidHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MTElFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MTElFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTElFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxMSUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxMSUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MTElFbGVtZW50OiBIVE1MTElFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTExJRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxMYWJlbEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxMYWJlbEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTGFiZWxFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTExhYmVsRWxlbWVudC5wcm90b3R5cGUsIFwiZm9ybVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5mb3JtKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMYWJlbEVsZW1lbnQucHJvdG90eXBlLCBcImh0bWxGb3JcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImZvclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZm9yXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxMYWJlbEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxMYWJlbEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxMYWJlbEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTExhYmVsRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTExhYmVsRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxMYWJlbEVsZW1lbnQ6IEhUTUxMYWJlbEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MTGFiZWxFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTExlZ2VuZEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxMZWdlbmRFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTExlZ2VuZEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTGVnZW5kRWxlbWVudC5wcm90b3R5cGUsIFwiZm9ybVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5mb3JtKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMZWdlbmRFbGVtZW50LnByb3RvdHlwZSwgXCJhbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxMZWdlbmRFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MTGVnZW5kRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTExlZ2VuZEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTExlZ2VuZEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxMZWdlbmRFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTExlZ2VuZEVsZW1lbnQ6IEhUTUxMZWdlbmRFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTExlZ2VuZEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgbWl4aW4gPSB1dGlscy5taXhpbjtcbmNvbnN0IExpbmtTdHlsZSA9IHJlcXVpcmUoXCIuL0xpbmtTdHlsZS5qc1wiKTtcblxuZnVuY3Rpb24gSFRNTExpbmtFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTGlua0VsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbm1peGluKEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsIExpbmtTdHlsZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbkxpbmtTdHlsZS5taXhlZEludG8ucHVzaChIVE1MTGlua0VsZW1lbnQpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsIFwiaHJlZlwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ocmVmO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhyZWYgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZSwgXCJjcm9zc09yaWdpblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY3Jvc3NPcmlnaW5cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgfVxuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY3Jvc3NPcmlnaW5cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLCBcInJlbFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwicmVsXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLCBcIm1lZGlhXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJtZWRpYVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLCBcImhyZWZsYW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJocmVmbGFuZ1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaHJlZmxhbmdcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInR5cGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLCBcImNoYXJzZXRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJzZXRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNoYXJzZXRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLCBcInJldlwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwicmV2XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJyZXZcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLCBcInRhcmdldFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidGFyZ2V0XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MTGlua0VsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxMaW5rRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxMaW5rRWxlbWVudDogSFRNTExpbmtFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTExpbmtFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTE1hcEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxNYXBFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE1hcEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWFwRWxlbWVudC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNYXBFbGVtZW50LnByb3RvdHlwZSwgXCJhcmVhc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5hcmVhcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTE1hcEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxNYXBFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTWFwRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTWFwRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTE1hcEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MTWFwRWxlbWVudDogSFRNTE1hcEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MTWFwRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxNZWRpYUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTWVkaWFFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5cbkhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiBsb2FkKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5sb2FkKCk7XG59O1xuXG5IVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5jYW5QbGF5VHlwZSA9IGZ1bmN0aW9uIGNhblBsYXlUeXBlKHR5cGUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdjYW5QbGF5VHlwZScgb24gJ0hUTUxNZWRpYUVsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNhblBsYXlUeXBlKC4uLmFyZ3MpKTtcbn07XG5cbkhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiBwbGF5KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5wbGF5KCk7XG59O1xuXG5IVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uIHBhdXNlKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5wYXVzZSgpO1xufTtcblxuSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuYWRkVGV4dFRyYWNrID0gZnVuY3Rpb24gYWRkVGV4dFRyYWNrKGtpbmQpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdhZGRUZXh0VHJhY2snIG9uICdIVE1MTWVkaWFFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc1sxXSA9IFwiXCI7XG4gIH1cbiAgaWYgKGFyZ3NbMl0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzJdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1syXSk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc1syXSA9IFwiXCI7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uYWRkVGV4dFRyYWNrKC4uLmFyZ3MpKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwic3JjXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNyYztcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zcmMgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiY3VycmVudFNyY1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jdXJyZW50U3JjO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiY3Jvc3NPcmlnaW5cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNyb3NzT3JpZ2luXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBpZiAoViA9PT0gbnVsbCB8fCBWID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFYgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIH1cbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNyb3NzT3JpZ2luXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudCwgXCJORVRXT1JLX0VNUFRZXCIsIHtcbiAgdmFsdWU6IDAsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcIk5FVFdPUktfRU1QVFlcIiwge1xuICB2YWx1ZTogMCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LCBcIk5FVFdPUktfSURMRVwiLCB7XG4gIHZhbHVlOiAxLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJORVRXT1JLX0lETEVcIiwge1xuICB2YWx1ZTogMSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LCBcIk5FVFdPUktfTE9BRElOR1wiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJORVRXT1JLX0xPQURJTkdcIiwge1xuICB2YWx1ZTogMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LCBcIk5FVFdPUktfTk9fU09VUkNFXCIsIHtcbiAgdmFsdWU6IDMsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcIk5FVFdPUktfTk9fU09VUkNFXCIsIHtcbiAgdmFsdWU6IDMsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwibmV0d29ya1N0YXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm5ldHdvcmtTdGF0ZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcInByZWxvYWRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInByZWxvYWRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInByZWxvYWRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJidWZmZXJlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5idWZmZXJlZCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LCBcIkhBVkVfTk9USElOR1wiLCB7XG4gIHZhbHVlOiAwLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJIQVZFX05PVEhJTkdcIiwge1xuICB2YWx1ZTogMCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LCBcIkhBVkVfTUVUQURBVEFcIiwge1xuICB2YWx1ZTogMSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiSEFWRV9NRVRBREFUQVwiLCB7XG4gIHZhbHVlOiAxLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQsIFwiSEFWRV9DVVJSRU5UX0RBVEFcIiwge1xuICB2YWx1ZTogMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiSEFWRV9DVVJSRU5UX0RBVEFcIiwge1xuICB2YWx1ZTogMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LCBcIkhBVkVfRlVUVVJFX0RBVEFcIiwge1xuICB2YWx1ZTogMyxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiSEFWRV9GVVRVUkVfREFUQVwiLCB7XG4gIHZhbHVlOiAzLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQsIFwiSEFWRV9FTk9VR0hfREFUQVwiLCB7XG4gIHZhbHVlOiA0LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJIQVZFX0VOT1VHSF9EQVRBXCIsIHtcbiAgdmFsdWU6IDQsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwicmVhZHlTdGF0ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5yZWFkeVN0YXRlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwic2Vla2luZ1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWVraW5nO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiY3VycmVudFRpbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY3VycmVudFRpbWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiZG91YmxlXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uY3VycmVudFRpbWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiZHVyYXRpb25cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uZHVyYXRpb247XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJwYXVzZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGF1c2VkO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiZGVmYXVsdFBsYXliYWNrUmF0ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5kZWZhdWx0UGxheWJhY2tSYXRlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImRvdWJsZVwiXShWKTtcbiAgICB0aGlzW2ltcGxdLmRlZmF1bHRQbGF5YmFja1JhdGUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwicGxheWJhY2tSYXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnBsYXliYWNrUmF0ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJkb3VibGVcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wbGF5YmFja1JhdGUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwicGxheWVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnBsYXllZCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJzZWVrYWJsZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5zZWVrYWJsZSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJlbmRlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5lbmRlZDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcImF1dG9wbGF5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImF1dG9wbGF5XCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImF1dG9wbGF5XCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiYXV0b3BsYXlcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcImxvb3BcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwibG9vcFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJsb29wXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwibG9vcFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiY29udHJvbHNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiY29udHJvbHNcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29udHJvbHNcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJjb250cm9sc1wiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwidm9sdW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnZvbHVtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJkb3VibGVcIl0oVik7XG4gICAgdGhpc1tpbXBsXS52b2x1bWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwibXV0ZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubXV0ZWQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICB0aGlzW2ltcGxdLm11dGVkID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcImRlZmF1bHRNdXRlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJtdXRlZFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtdXRlZFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcIm11dGVkXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJhdWRpb1RyYWNrc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5hdWRpb1RyYWNrcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJ2aWRlb1RyYWNrc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS52aWRlb1RyYWNrcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJ0ZXh0VHJhY2tzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnRleHRUcmFja3MpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxNZWRpYUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTE1lZGlhRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxNZWRpYUVsZW1lbnQ6IEhUTUxNZWRpYUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MTWVkaWFFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTE1lbnVFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTWVudUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTWVudUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVudUVsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInR5cGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVudUVsZW1lbnQucHJvdG90eXBlLCBcImxhYmVsXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJsYWJlbFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibGFiZWxcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVudUVsZW1lbnQucHJvdG90eXBlLCBcImNvbXBhY3RcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiY29tcGFjdFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb21wYWN0XCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiY29tcGFjdFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxNZW51RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTE1lbnVFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTWVudUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTE1lbnVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MTWVudUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MTWVudUVsZW1lbnQ6IEhUTUxNZW51RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxNZW51RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxNZXRhRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE1ldGFFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE1ldGFFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1ldGFFbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1ldGFFbGVtZW50LnByb3RvdHlwZSwgXCJodHRwRXF1aXZcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImh0dHAtZXF1aXZcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImh0dHAtZXF1aXZcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvbnRlbnRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlLCBcInNjaGVtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwic2NoZW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzY2hlbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTE1ldGFFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MTWV0YUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxNZXRhRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxNZXRhRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxNZXRhRWxlbWVudDogSFRNTE1ldGFFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTE1ldGFFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTE1ldGVyRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE1ldGVyRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxNZXRlckVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTE1ldGVyRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTE1ldGVyRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTE1ldGVyRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTWV0ZXJFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MTWV0ZXJFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTE1ldGVyRWxlbWVudDogSFRNTE1ldGVyRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxNZXRlckVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MTW9kRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE1vZEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTW9kRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNb2RFbGVtZW50LnByb3RvdHlwZSwgXCJjaXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjaXRlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjaXRlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1vZEVsZW1lbnQucHJvdG90eXBlLCBcImRhdGVUaW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRlVGltZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGF0ZVRpbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTE1vZEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxNb2RFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTW9kRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTW9kRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTE1vZEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MTW9kRWxlbWVudDogSFRNTE1vZEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MTW9kRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxPTGlzdEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxPTGlzdEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MT0xpc3RFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9MaXN0RWxlbWVudC5wcm90b3R5cGUsIFwicmV2ZXJzZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwicmV2ZXJzZWRcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwicmV2ZXJzZWRcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJyZXZlcnNlZFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9MaXN0RWxlbWVudC5wcm90b3R5cGUsIFwic3RhcnRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcInN0YXJ0XCIpKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgLTIxNDc0ODM2NDggfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3ID8gMCA6IHZhbHVlXG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInN0YXJ0XCIsIFN0cmluZyhWKSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT0xpc3RFbGVtZW50LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9MaXN0RWxlbWVudC5wcm90b3R5cGUsIFwiY29tcGFjdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJjb21wYWN0XCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvbXBhY3RcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJjb21wYWN0XCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTE9MaXN0RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTE9MaXN0RWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTE9MaXN0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MT0xpc3RFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MT0xpc3RFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTE9MaXN0RWxlbWVudDogSFRNTE9MaXN0RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxPTGlzdEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MT2JqZWN0RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MT2JqZWN0RWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJkYXRhXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmRhdGE7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uZGF0YSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwidHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLCBcInVzZU1hcFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidXNlTWFwXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ1c2VNYXBcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiZm9ybVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5mb3JtKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJ3aWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwid2lkdGhcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLCBcImhlaWdodFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudERvY3VtZW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNvbnRlbnREb2N1bWVudCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJhcmNoaXZlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhcmNoaXZlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhcmNoaXZlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLCBcImNvZGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNvZGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvZGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiZGVjbGFyZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJkZWNsYXJlXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRlY2xhcmVcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJkZWNsYXJlXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiaHNwYWNlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJoc3BhY2VcIikpO1xuICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAwIHx8IHZhbHVlID4gMjE0NzQ4MzY0NyA/IDAgOiB2YWx1ZVxuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgViA9IFYgPiAyMTQ3NDgzNjQ3ID8gMCA6IFY7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJoc3BhY2VcIiwgU3RyaW5nKFYpKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJzdGFuZGJ5XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzdGFuZGJ5XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzdGFuZGJ5XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLCBcInZzcGFjZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwidnNwYWNlXCIpKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDIxNDc0ODM2NDcgPyAwIDogdmFsdWVcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIFYgPSBWID4gMjE0NzQ4MzY0NyA/IDAgOiBWO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidnNwYWNlXCIsIFN0cmluZyhWKSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiY29kZUJhc2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY29kZUJhc2U7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uY29kZUJhc2UgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLCBcImNvZGVUeXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjb2RlVHlwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29kZVR5cGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiYm9yZGVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJib3JkZXJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJib3JkZXJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxPYmplY3RFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTE9iamVjdEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MT2JqZWN0RWxlbWVudDogSFRNTE9iamVjdEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MT2JqZWN0RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxPcHRHcm91cEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxPcHRHcm91cEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MT3B0R3JvdXBFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9wdEdyb3VwRWxlbWVudC5wcm90b3R5cGUsIFwiZGlzYWJsZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9wdEdyb3VwRWxlbWVudC5wcm90b3R5cGUsIFwibGFiZWxcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImxhYmVsXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJsYWJlbFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MT3B0R3JvdXBFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MT3B0R3JvdXBFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MT3B0R3JvdXBFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxPcHRHcm91cEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxPcHRHcm91cEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MT3B0R3JvdXBFbGVtZW50OiBIVE1MT3B0R3JvdXBFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTE9wdEdyb3VwRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxPcHRpb25FbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxPcHRpb25FbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLCBcImRpc2FibGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZSwgXCJmb3JtXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmZvcm0pO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLCBcImxhYmVsXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmxhYmVsO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmxhYmVsID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZSwgXCJkZWZhdWx0U2VsZWN0ZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwic2VsZWN0ZWRcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic2VsZWN0ZWRcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJzZWxlY3RlZFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLCBcInNlbGVjdGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNlbGVjdGVkO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zZWxlY3RlZCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0udmFsdWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLCBcInRleHRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udGV4dDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS50ZXh0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZSwgXCJpbmRleFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5pbmRleDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTE9wdGlvbkVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MT3B0aW9uRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxPcHRpb25FbGVtZW50OiBIVE1MT3B0aW9uRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxPcHRpb25FbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTE91dHB1dEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxPdXRwdXRFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE91dHB1dEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT3V0cHV0RWxlbWVudC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MT3V0cHV0RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTE91dHB1dEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxPdXRwdXRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxPdXRwdXRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MT3V0cHV0RWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxPdXRwdXRFbGVtZW50OiBIVE1MT3V0cHV0RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxPdXRwdXRFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFBhcmFncmFwaEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxQYXJhZ3JhcGhFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFBhcmFncmFwaEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MUGFyYWdyYXBoRWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MUGFyYWdyYXBoRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFBhcmFncmFwaEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxQYXJhZ3JhcGhFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxQYXJhZ3JhcGhFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MUGFyYWdyYXBoRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxQYXJhZ3JhcGhFbGVtZW50OiBIVE1MUGFyYWdyYXBoRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxQYXJhZ3JhcGhFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFBhcmFtRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFBhcmFtRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxQYXJhbUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MUGFyYW1FbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFBhcmFtRWxlbWVudC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxQYXJhbUVsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInR5cGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MUGFyYW1FbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlVHlwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidmFsdWVUeXBlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxQYXJhbUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxQYXJhbUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxQYXJhbUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFBhcmFtRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFBhcmFtRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxQYXJhbUVsZW1lbnQ6IEhUTUxQYXJhbUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MUGFyYW1FbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFByZUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxQcmVFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFByZUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MUHJlRWxlbWVudC5wcm90b3R5cGUsIFwid2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgLTIxNDc0ODM2NDggfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3ID8gMCA6IHZhbHVlXG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFN0cmluZyhWKSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFByZUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxQcmVFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MUHJlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MUHJlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFByZUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MUHJlRWxlbWVudDogSFRNTFByZUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MUHJlRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxQcm9ncmVzc0VsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxQcm9ncmVzc0VsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MUHJvZ3Jlc3NFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5cbkhUTUxQcm9ncmVzc0VsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxQcm9ncmVzc0VsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxQcm9ncmVzc0VsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFByb2dyZXNzRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFByb2dyZXNzRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxQcm9ncmVzc0VsZW1lbnQ6IEhUTUxQcm9ncmVzc0VsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MUHJvZ3Jlc3NFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFF1b3RlRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFF1b3RlRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxRdW90ZUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MUXVvdGVFbGVtZW50LnByb3RvdHlwZSwgXCJjaXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjaXRlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjaXRlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxRdW90ZUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxRdW90ZUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxRdW90ZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFF1b3RlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFF1b3RlRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxRdW90ZUVsZW1lbnQ6IEhUTUxRdW90ZUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MUXVvdGVFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFNjcmlwdEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFNjcmlwdEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUsIFwic3JjXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNyYztcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zcmMgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInR5cGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUsIFwiY2hhcnNldFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY2hhcnNldFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSwgXCJkZWZlclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJkZWZlclwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkZWZlclwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRlZmVyXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUsIFwiY3Jvc3NPcmlnaW5cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNyb3NzT3JpZ2luXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBpZiAoViA9PT0gbnVsbCB8fCBWID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFYgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIH1cbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNyb3NzT3JpZ2luXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLCBcInRleHRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udGV4dDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS50ZXh0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSwgXCJub25jZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibm9uY2VcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLCBcImV2ZW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJldmVudFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZXZlbnRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUsIFwiaHRtbEZvclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZm9yXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJmb3JcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxTY3JpcHRFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFNjcmlwdEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MU2NyaXB0RWxlbWVudDogSFRNTFNjcmlwdEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MU2NyaXB0RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxTZWxlY3RFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxTZWxlY3RFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5cbkhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQoZWxlbWVudCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2FkZCcgb24gJ0hUTUxTZWxlY3RFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMV0gPT09IG51bGwgfHwgYXJnc1sxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1sxXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uYWRkKC4uLmFyZ3MpO1xufTtcblxuSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0ucmVtb3ZlKC4uLmFyZ3MpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiYXV0b2ZvY3VzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImF1dG9mb2N1c1wiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhdXRvZm9jdXNcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJhdXRvZm9jdXNcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgXCJkaXNhYmxlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiZm9ybVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5mb3JtKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgXCJtdWx0aXBsZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcIm11bHRpcGxlXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgXCJyZXF1aXJlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcInJlcXVpcmVkXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zaXplO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zaXplID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnR5cGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsIFwib3B0aW9uc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vcHRpb25zKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubGVuZ3RoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5sZW5ndGggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLCBcInNlbGVjdGVkT3B0aW9uc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5zZWxlY3RlZE9wdGlvbnMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLCBcInNlbGVjdGVkSW5kZXhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VsZWN0ZWRJbmRleDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJsb25nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc2VsZWN0ZWRJbmRleCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0udmFsdWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MU2VsZWN0RWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxTZWxlY3RFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFNlbGVjdEVsZW1lbnQ6IEhUTUxTZWxlY3RFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFNlbGVjdEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MU291cmNlRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFNvdXJjZUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MU291cmNlRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTb3VyY2VFbGVtZW50LnByb3RvdHlwZSwgXCJzcmNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc3JjO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNyYyA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU291cmNlRWxlbWVudC5wcm90b3R5cGUsIFwidHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTb3VyY2VFbGVtZW50LnByb3RvdHlwZSwgXCJzcmNzZXRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNyY3NldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3Jjc2V0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNvdXJjZUVsZW1lbnQucHJvdG90eXBlLCBcInNpemVzXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzaXplc1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic2l6ZXNcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU291cmNlRWxlbWVudC5wcm90b3R5cGUsIFwibWVkaWFcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm1lZGlhXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MU291cmNlRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFNvdXJjZUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxTb3VyY2VFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxTb3VyY2VFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MU291cmNlRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxTb3VyY2VFbGVtZW50OiBIVE1MU291cmNlRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxTb3VyY2VFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFNwYW5FbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MU3BhbkVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MU3BhbkVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MU3BhbkVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MU3BhbkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxTcGFuRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxTcGFuRWxlbWVudDogSFRNTFNwYW5FbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFNwYW5FbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IG1peGluID0gdXRpbHMubWl4aW47XG5jb25zdCBMaW5rU3R5bGUgPSByZXF1aXJlKFwiLi9MaW5rU3R5bGUuanNcIik7XG5cbmZ1bmN0aW9uIEhUTUxTdHlsZUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxTdHlsZUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MU3R5bGVFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5taXhpbihIVE1MU3R5bGVFbGVtZW50LnByb3RvdHlwZSwgTGlua1N0eWxlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuTGlua1N0eWxlLm1peGVkSW50by5wdXNoKEhUTUxTdHlsZUVsZW1lbnQpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTdHlsZUVsZW1lbnQucHJvdG90eXBlLCBcIm1lZGlhXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJtZWRpYVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU3R5bGVFbGVtZW50LnByb3RvdHlwZSwgXCJub25jZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibm9uY2VcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFN0eWxlRWxlbWVudC5wcm90b3R5cGUsIFwidHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MU3R5bGVFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MU3R5bGVFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MU3R5bGVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxTdHlsZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxTdHlsZUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MU3R5bGVFbGVtZW50OiBIVE1MU3R5bGVFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFN0eWxlRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUYWJsZUNhcHRpb25FbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudDogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MVGFibGVDYXB0aW9uRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxUYWJsZUNlbGxFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUYWJsZUNlbGxFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcImNvbFNwYW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY29sU3BhbjtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uY29sU3BhbiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUsIFwicm93U3BhblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5yb3dTcGFuO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5yb3dTcGFuID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSwgXCJoZWFkZXJzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmhlYWRlcnMpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXMuaGVhZGVycy52YWx1ZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUsIFwiY2VsbEluZGV4XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmNlbGxJbmRleDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSwgXCJhbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcImF4aXNcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImF4aXNcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImF4aXNcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSwgXCJ3aWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwid2lkdGhcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcImNoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjaGFyXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjaGFyXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcImNoT2ZmXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjaGFyb2ZmXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjaGFyb2ZmXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcIm5vV3JhcFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJub1dyYXBcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibm9XcmFwXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwibm9XcmFwXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUsIFwidkFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2QWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZBbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSwgXCJiZ0NvbG9yXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJiZ0NvbG9yXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYmdDb2xvclwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFRhYmxlQ2VsbEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MVGFibGVDZWxsRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxUYWJsZUNlbGxFbGVtZW50OiBIVE1MVGFibGVDZWxsRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxUYWJsZUNlbGxFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFRhYmxlQ29sRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRhYmxlQ29sRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUYWJsZUNvbEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZSwgXCJzcGFuXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJzcGFuXCIpKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDIxNDc0ODM2NDcgPyAwIDogdmFsdWVcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIFYgPSBWID4gMjE0NzQ4MzY0NyA/IDAgOiBWO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3BhblwiLCBTdHJpbmcoVikpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ29sRWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUNvbEVsZW1lbnQucHJvdG90eXBlLCBcImNoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjaGFyXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjaGFyXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ29sRWxlbWVudC5wcm90b3R5cGUsIFwiY2hPZmZcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJvZmZcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNoYXJvZmZcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZSwgXCJ2QWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZBbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidkFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ29sRWxlbWVudC5wcm90b3R5cGUsIFwid2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVGFibGVDb2xFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZUNvbEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxUYWJsZUNvbEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MVGFibGVDb2xFbGVtZW50OiBIVE1MVGFibGVDb2xFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFRhYmxlQ29sRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MVGFibGVDZWxsRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxUYWJsZUNlbGxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50LnByb3RvdHlwZSwgSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50LCBIVE1MVGFibGVDZWxsRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50LnByb3RvdHlwZSwgXCJhYmJyXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhYmJyXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhYmJyXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxUYWJsZURhdGFDZWxsRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MVGFibGVDZWxsRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQ6IEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxUYWJsZURhdGFDZWxsRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxUYWJsZUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGFibGVFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5cbkhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUNhcHRpb24gPSBmdW5jdGlvbiBjcmVhdGVDYXB0aW9uKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jcmVhdGVDYXB0aW9uKCkpO1xufTtcblxuSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuZGVsZXRlQ2FwdGlvbiA9IGZ1bmN0aW9uIGRlbGV0ZUNhcHRpb24oKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmRlbGV0ZUNhcHRpb24oKTtcbn07XG5cbkhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVRIZWFkID0gZnVuY3Rpb24gY3JlYXRlVEhlYWQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZVRIZWFkKCkpO1xufTtcblxuSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuZGVsZXRlVEhlYWQgPSBmdW5jdGlvbiBkZWxldGVUSGVhZCgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uZGVsZXRlVEhlYWQoKTtcbn07XG5cbkhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVRGb290ID0gZnVuY3Rpb24gY3JlYXRlVEZvb3QoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZVRGb290KCkpO1xufTtcblxuSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuZGVsZXRlVEZvb3QgPSBmdW5jdGlvbiBkZWxldGVURm9vdCgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uZGVsZXRlVEZvb3QoKTtcbn07XG5cbkhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLmluc2VydFJvdyA9IGZ1bmN0aW9uIGluc2VydFJvdygpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJsb25nXCJdKGFyZ3NbMF0pO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMF0gPSAtMTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5pbnNlcnRSb3coLi4uYXJncykpO1xufTtcblxuSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuZGVsZXRlUm93ID0gZnVuY3Rpb24gZGVsZXRlUm93KGluZGV4KSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlUm93JyBvbiAnSFRNTFRhYmxlRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmRlbGV0ZVJvdyguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIFwiY2FwdGlvblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jYXB0aW9uKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBpZiAoViA9PT0gbnVsbCB8fCBWID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFYgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgfVxuICAgIHRoaXNbaW1wbF0uY2FwdGlvbiA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIFwidEhlYWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0udEhlYWQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICB9XG4gICAgdGhpc1tpbXBsXS50SGVhZCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIFwidEZvb3RcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0udEZvb3QpO1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICB9XG4gICAgdGhpc1tpbXBsXS50Rm9vdCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIFwidEJvZGllc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS50Qm9kaWVzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLCBcInJvd3NcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucm93cyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSwgXCJhbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIFwiYm9yZGVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJib3JkZXJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImJvcmRlclwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLCBcImZyYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJmcmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZnJhbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSwgXCJydWxlc1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwicnVsZXNcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInJ1bGVzXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIFwic3VtbWFyeVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwic3VtbWFyeVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3VtbWFyeVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLCBcIndpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSwgXCJiZ0NvbG9yXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJiZ0NvbG9yXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYmdDb2xvclwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLCBcImNlbGxQYWRkaW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjZWxsUGFkZGluZ1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNlbGxQYWRkaW5nXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIFwiY2VsbFNwYWNpbmdcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNlbGxTcGFjaW5nXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY2VsbFNwYWNpbmdcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFRhYmxlRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MVGFibGVFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFRhYmxlRWxlbWVudDogSFRNTFRhYmxlRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxUYWJsZUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MVGFibGVDZWxsRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBIVE1MVGFibGVDZWxsRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudCwgSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LnByb3RvdHlwZSwgXCJzY29wZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwic2NvcGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNjb3BlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcImFiYnJcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFiYnJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFiYnJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudC5wcm90b3R5cGUsIFwic29ydGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzb3J0ZWRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNvcnRlZFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MVGFibGVDZWxsRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50OiBIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFRhYmxlUm93RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUYWJsZVJvd0VsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0Q2VsbCA9IGZ1bmN0aW9uIGluc2VydENlbGwoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShhcmdzWzBdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzBdID0gLTE7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uaW5zZXJ0Q2VsbCguLi5hcmdzKSk7XG59O1xuXG5IVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZS5kZWxldGVDZWxsID0gZnVuY3Rpb24gZGVsZXRlQ2VsbChpbmRleCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZUNlbGwnIG9uICdIVE1MVGFibGVSb3dFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uZGVsZXRlQ2VsbCguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUsIFwicm93SW5kZXhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucm93SW5kZXg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZSwgXCJzZWN0aW9uUm93SW5kZXhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VjdGlvblJvd0luZGV4O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUsIFwiY2VsbHNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY2VsbHMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLCBcImNoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjaGFyXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjaGFyXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUsIFwiY2hPZmZcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJvZmZcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNoYXJvZmZcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZSwgXCJ2QWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZBbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidkFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUsIFwiYmdDb2xvclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYmdDb2xvclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImJnQ29sb3JcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFRhYmxlUm93RWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MVGFibGVSb3dFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFRhYmxlUm93RWxlbWVudDogSFRNTFRhYmxlUm93RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxUYWJsZVJvd0VsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGFibGVTZWN0aW9uRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuXG5IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0Um93ID0gZnVuY3Rpb24gaW5zZXJ0Um93KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oYXJnc1swXSk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc1swXSA9IC0xO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmluc2VydFJvdyguLi5hcmdzKSk7XG59O1xuXG5IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5wcm90b3R5cGUuZGVsZXRlUm93ID0gZnVuY3Rpb24gZGVsZXRlUm93KGluZGV4KSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlUm93JyBvbiAnSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJsb25nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5kZWxldGVSb3coLi4uYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LnByb3RvdHlwZSwgXCJyb3dzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnJvd3MpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5wcm90b3R5cGUsIFwiY2hcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNoYXJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5wcm90b3R5cGUsIFwiY2hPZmZcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJvZmZcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNoYXJvZmZcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5wcm90b3R5cGUsIFwidkFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2QWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZBbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFRlbXBsYXRlRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUZW1wbGF0ZUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGVtcGxhdGVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNvbnRlbnQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxUZW1wbGF0ZUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFRlbXBsYXRlRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxUZW1wbGF0ZUVsZW1lbnQ6IEhUTUxUZW1wbGF0ZUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MVGVtcGxhdGVFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFRleHRBcmVhRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUZXh0QXJlYUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUuc2VsZWN0ID0gZnVuY3Rpb24gc2VsZWN0KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5zZWxlY3QoKTtcbn07XG5cbkhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLnNldFJhbmdlVGV4dCA9IGZ1bmN0aW9uIHNldFJhbmdlVGV4dChyZXBsYWNlbWVudCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFJhbmdlVGV4dCcgb24gJ0hUTUxUZXh0QXJlYUVsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCA0OyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLnNldFJhbmdlVGV4dCguLi5hcmdzKTtcbn07XG5cbkhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLnNldFNlbGVjdGlvblJhbmdlID0gZnVuY3Rpb24gc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFNlbGVjdGlvblJhbmdlJyBvbiAnSFRNTFRleHRBcmVhRWxlbWVudCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMV0pO1xuICBpZiAoYXJnc1syXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMl0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5zZXRTZWxlY3Rpb25SYW5nZSguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwiYXV0b2NvbXBsZXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhdXRvY29tcGxldGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImF1dG9jb21wbGV0ZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcImF1dG9mb2N1c1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJhdXRvZm9jdXNcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYXV0b2ZvY3VzXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiYXV0b2ZvY3VzXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJjb2xzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmNvbHM7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmNvbHMgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwiZGlyTmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZGlyTmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGlyTmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcImRpc2FibGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcImZvcm1cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZm9ybSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJpbnB1dE1vZGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImlucHV0TW9kZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaW5wdXRNb2RlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwibWF4TGVuZ3RoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJtYXhMZW5ndGhcIikpO1xuICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAtMjE0NzQ4MzY0OCB8fCB2YWx1ZSA+IDIxNDc0ODM2NDcgPyAwIDogdmFsdWVcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJsb25nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibWF4TGVuZ3RoXCIsIFN0cmluZyhWKSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJtaW5MZW5ndGhcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcIm1pbkxlbmd0aFwiKSk7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IC0yMTQ3NDgzNjQ4IHx8IHZhbHVlID4gMjE0NzQ4MzY0NyA/IDAgOiB2YWx1ZVxuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtaW5MZW5ndGhcIiwgU3RyaW5nKFYpKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJwbGFjZWhvbGRlclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInBsYWNlaG9sZGVyXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwicmVhZE9ubHlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwicmVhZE9ubHlcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwicmVhZE9ubHlcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJyZWFkT25seVwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwicmVxdWlyZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwicmVxdWlyZWRcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwicmVxdWlyZWRcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwicm93c1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5yb3dzO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5yb3dzID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcIndyYXBcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIndyYXBcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIndyYXBcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnR5cGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJkZWZhdWx0VmFsdWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uZGVmYXVsdFZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmRlZmF1bHRWYWx1ZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS52YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXNbaW1wbF0udmFsdWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwidGV4dExlbmd0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS50ZXh0TGVuZ3RoO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwic2VsZWN0aW9uU3RhcnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VsZWN0aW9uU3RhcnQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgaWYgKFYgPT09IG51bGwgfHwgViA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBWID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgfVxuICAgIHRoaXNbaW1wbF0uc2VsZWN0aW9uU3RhcnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwic2VsZWN0aW9uRW5kXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNlbGVjdGlvbkVuZDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBpZiAoViA9PT0gbnVsbCB8fCBWID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFYgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICB9XG4gICAgdGhpc1tpbXBsXS5zZWxlY3Rpb25FbmQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwic2VsZWN0aW9uRGlyZWN0aW9uXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNlbGVjdGlvbkRpcmVjdGlvbjtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBpZiAoViA9PT0gbnVsbCB8fCBWID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFYgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIH1cbiAgICB0aGlzW2ltcGxdLnNlbGVjdGlvbkRpcmVjdGlvbiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFRleHRBcmVhRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MVGV4dEFyZWFFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFRleHRBcmVhRWxlbWVudDogSFRNTFRleHRBcmVhRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxUZXh0QXJlYUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MVGltZUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUaW1lRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUaW1lRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUaW1lRWxlbWVudC5wcm90b3R5cGUsIFwiZGF0ZVRpbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImRhdGVUaW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkYXRlVGltZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVGltZUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxUaW1lRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRpbWVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUaW1lRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFRpbWVFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFRpbWVFbGVtZW50OiBIVE1MVGltZUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MVGltZUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MVGl0bGVFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGl0bGVFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRpdGxlRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUaXRsZUVsZW1lbnQucHJvdG90eXBlLCBcInRleHRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udGV4dDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS50ZXh0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVGl0bGVFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVGl0bGVFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGl0bGVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUaXRsZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxUaXRsZUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MVGl0bGVFbGVtZW50OiBIVE1MVGl0bGVFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFRpdGxlRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxUcmFja0VsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUcmFja0VsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVHJhY2tFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRyYWNrRWxlbWVudC5wcm90b3R5cGUsIFwia2luZFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwia2luZFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwia2luZFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUcmFja0VsZW1lbnQucHJvdG90eXBlLCBcInNyY1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zcmM7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc3JjID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUcmFja0VsZW1lbnQucHJvdG90eXBlLCBcInNyY2xhbmdcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNyY2xhbmdcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNyY2xhbmdcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVHJhY2tFbGVtZW50LnByb3RvdHlwZSwgXCJsYWJlbFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibGFiZWxcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImxhYmVsXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRyYWNrRWxlbWVudC5wcm90b3R5cGUsIFwiZGVmYXVsdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJkZWZhdWx0XCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRlZmF1bHRcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJkZWZhdWx0XCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVHJhY2tFbGVtZW50LCBcIk5PTkVcIiwge1xuICB2YWx1ZTogMCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRyYWNrRWxlbWVudC5wcm90b3R5cGUsIFwiTk9ORVwiLCB7XG4gIHZhbHVlOiAwLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUcmFja0VsZW1lbnQsIFwiTE9BRElOR1wiLCB7XG4gIHZhbHVlOiAxLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVHJhY2tFbGVtZW50LnByb3RvdHlwZSwgXCJMT0FESU5HXCIsIHtcbiAgdmFsdWU6IDEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRyYWNrRWxlbWVudCwgXCJMT0FERURcIiwge1xuICB2YWx1ZTogMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRyYWNrRWxlbWVudC5wcm90b3R5cGUsIFwiTE9BREVEXCIsIHtcbiAgdmFsdWU6IDIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRyYWNrRWxlbWVudCwgXCJFUlJPUlwiLCB7XG4gIHZhbHVlOiAzLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVHJhY2tFbGVtZW50LnByb3RvdHlwZSwgXCJFUlJPUlwiLCB7XG4gIHZhbHVlOiAzLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUcmFja0VsZW1lbnQucHJvdG90eXBlLCBcInJlYWR5U3RhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucmVhZHlTdGF0ZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVHJhY2tFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVHJhY2tFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVHJhY2tFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUcmFja0VsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxUcmFja0VsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MVHJhY2tFbGVtZW50OiBIVE1MVHJhY2tFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFRyYWNrRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxVTGlzdEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxVTGlzdEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVUxpc3RFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFVMaXN0RWxlbWVudC5wcm90b3R5cGUsIFwiY29tcGFjdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJjb21wYWN0XCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvbXBhY3RcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJjb21wYWN0XCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVUxpc3RFbGVtZW50LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxVTGlzdEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxVTGlzdEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxVTGlzdEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFVMaXN0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFVMaXN0RWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxVTGlzdEVsZW1lbnQ6IEhUTUxVTGlzdEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MVUxpc3RFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFVua25vd25FbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVW5rbm93bkVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVW5rbm93bkVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTFVua25vd25FbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVW5rbm93bkVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxVbmtub3duRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVW5rbm93bkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxVbmtub3duRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxVbmtub3duRWxlbWVudDogSFRNTFVua25vd25FbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFVua25vd25FbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxNZWRpYUVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MTWVkaWFFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxWaWRlb0VsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlLCBIVE1MTWVkaWFFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxWaWRlb0VsZW1lbnQsIEhUTUxNZWRpYUVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlLCBcIndpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKSk7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDAgfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3ID8gMCA6IHZhbHVlXG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICBWID0gViA+IDIxNDc0ODM2NDcgPyAwIDogVjtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFN0cmluZyhWKSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZSwgXCJoZWlnaHRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcImhlaWdodFwiKSk7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDAgfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3ID8gMCA6IHZhbHVlXG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICBWID0gViA+IDIxNDc0ODM2NDcgPyAwIDogVjtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBTdHJpbmcoVikpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUsIFwidmlkZW9XaWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS52aWRlb1dpZHRoO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUsIFwidmlkZW9IZWlnaHRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udmlkZW9IZWlnaHQ7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZSwgXCJwb3N0ZXJcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucG9zdGVyO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBvc3RlciA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFZpZGVvRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MTWVkaWFFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxWaWRlb0VsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MVmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFZpZGVvRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBFdmVudCA9IHJlcXVpcmUoXCIuL0V2ZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBjb252ZXJ0SGFzaENoYW5nZUV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL0hhc2hDaGFuZ2VFdmVudEluaXRcIikuY29udmVydDtcblxuZnVuY3Rpb24gSGFzaENoYW5nZUV2ZW50KHR5cGUpIHtcbiAgaWYgKCFuZXcudGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0hhc2hDaGFuZ2VFdmVudCcuIFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yOyB0aGlzIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0hhc2hDaGFuZ2VFdmVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnRIYXNoQ2hhbmdlRXZlbnRJbml0KGFyZ3NbMV0pO1xuXG4gIGlmYWNlLnNldHVwKHRoaXMsIGFyZ3MpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhhc2hDaGFuZ2VFdmVudC5wcm90b3R5cGUsIEV2ZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhhc2hDaGFuZ2VFdmVudCwgRXZlbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhhc2hDaGFuZ2VFdmVudC5wcm90b3R5cGUsIFwib2xkVVJMXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9sZFVSTDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhhc2hDaGFuZ2VFdmVudC5wcm90b3R5cGUsIFwibmV3VVJMXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm5ld1VSTDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IYXNoQ2hhbmdlRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhhc2hDaGFuZ2VFdmVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSGFzaENoYW5nZUV2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhhc2hDaGFuZ2VFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgRXZlbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSGFzaENoYW5nZUV2ZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSGFzaENoYW5nZUV2ZW50OiBIYXNoQ2hhbmdlRXZlbnQgfSxcbiAgICBXb3JrZXI6IHsgSGFzaENoYW5nZUV2ZW50OiBIYXNoQ2hhbmdlRXZlbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ldmVudHMvSGFzaENoYW5nZUV2ZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxuY29uc3QgRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vRXZlbnRJbml0XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29udmVydEluaGVyaXQob2JqLCByZXQpIHtcbiAgICBFdmVudEluaXQuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJuZXdVUkxcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKHZhbHVlKTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIm9sZFVSTFwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0odmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBjb252ZXJ0KG9iaikge1xuICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBoYXMgdG8gYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSB8fCBvYmogaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IG1heSBub3QgYmUgYSBEYXRlIG9yIFJlZ0V4cCBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBtb2R1bGUuZXhwb3J0cy5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIaXN0b3J5KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuXG5IaXN0b3J5LnByb3RvdHlwZS5nbyA9IGZ1bmN0aW9uIGdvKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oYXJnc1swXSk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc1swXSA9IDA7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uZ28oLi4uYXJncyk7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5iYWNrID0gZnVuY3Rpb24gYmFjaygpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uYmFjaygpO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUuZm9yd2FyZCA9IGZ1bmN0aW9uIGZvcndhcmQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmZvcndhcmQoKTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLnB1c2hTdGF0ZSA9IGZ1bmN0aW9uIHB1c2hTdGF0ZShkYXRhLCB0aXRsZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3B1c2hTdGF0ZScgb24gJ0hpc3RvcnknOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiYW55XCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIGlmIChhcmdzWzJdID09PSBudWxsIHx8IGFyZ3NbMl0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMl0gPSBudWxsO1xuICB9IGVsc2Uge1xuICBpZiAoYXJnc1syXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMl0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzJdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzJdID0gdW5kZWZpbmVkO1xuICB9XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0ucHVzaFN0YXRlKC4uLmFyZ3MpO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUucmVwbGFjZVN0YXRlID0gZnVuY3Rpb24gcmVwbGFjZVN0YXRlKGRhdGEsIHRpdGxlKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAncmVwbGFjZVN0YXRlJyBvbiAnSGlzdG9yeSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJhbnlcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgaWYgKGFyZ3NbMl0gPT09IG51bGwgfHwgYXJnc1syXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1syXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIGlmIChhcmdzWzJdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMl0pO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMl0gPSB1bmRlZmluZWQ7XG4gIH1cbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5yZXBsYWNlU3RhdGUoLi4uYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhpc3RvcnkucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5sZW5ndGg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIaXN0b3J5LnByb3RvdHlwZSwgXCJzdGF0ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zdGF0ZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IaXN0b3J5LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIaXN0b3J5XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIaXN0b3J5LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhpc3RvcnkucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSGlzdG9yeSxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhpc3Rvcnk6IEhpc3RvcnkgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi93aW5kb3cvSGlzdG9yeS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBVSUV2ZW50ID0gcmVxdWlyZShcIi4vVUlFdmVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgY29udmVydEtleWJvYXJkRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vS2V5Ym9hcmRFdmVudEluaXRcIikuY29udmVydDtcblxuZnVuY3Rpb24gS2V5Ym9hcmRFdmVudCh0eXBlQXJnKSB7XG4gIGlmICghbmV3LnRhcmdldCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdLZXlib2FyZEV2ZW50Jy4gUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3I7IHRoaXMgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnS2V5Ym9hcmRFdmVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnRLZXlib2FyZEV2ZW50SW5pdChhcmdzWzFdKTtcblxuICBpZmFjZS5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgVUlFdmVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihLZXlib2FyZEV2ZW50LCBVSUV2ZW50LmludGVyZmFjZSk7XG5cblxuS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUuZ2V0TW9kaWZpZXJTdGF0ZSA9IGZ1bmN0aW9uIGdldE1vZGlmaWVyU3RhdGUoa2V5QXJnKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0TW9kaWZpZXJTdGF0ZScgb24gJ0tleWJvYXJkRXZlbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmdldE1vZGlmaWVyU3RhdGUoLi4uYXJncyk7XG59O1xuXG5LZXlib2FyZEV2ZW50LnByb3RvdHlwZS5pbml0S2V5Ym9hcmRFdmVudCA9IGZ1bmN0aW9uIGluaXRLZXlib2FyZEV2ZW50KHR5cGVBcmcsIGJ1YmJsZXNBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGtleUFyZywgbG9jYXRpb25BcmcsIG1vZGlmaWVyc0xpc3RBcmcsIHJlcGVhdCwgbG9jYWxlKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgOSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5pdEtleWJvYXJkRXZlbnQnIG9uICdLZXlib2FyZEV2ZW50JzogOSBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDk7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzFdKTtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzJdKTtcbiAgaWYgKGFyZ3NbM10gPT09IG51bGwgfHwgYXJnc1szXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1szXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIH1cbiAgYXJnc1s0XSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbNF0pO1xuICBhcmdzWzVdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbNV0pO1xuICBhcmdzWzZdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1s2XSk7XG4gIGFyZ3NbN10gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1s3XSk7XG4gIGFyZ3NbOF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzhdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uaW5pdEtleWJvYXJkRXZlbnQoLi4uYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEtleWJvYXJkRXZlbnQsIFwiRE9NX0tFWV9MT0NBVElPTl9TVEFOREFSRFwiLCB7XG4gIHZhbHVlOiAwLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgXCJET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEXCIsIHtcbiAgdmFsdWU6IDAsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudCwgXCJET01fS0VZX0xPQ0FUSU9OX0xFRlRcIiwge1xuICB2YWx1ZTogMSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwiRE9NX0tFWV9MT0NBVElPTl9MRUZUXCIsIHtcbiAgdmFsdWU6IDEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudCwgXCJET01fS0VZX0xPQ0FUSU9OX1JJR0hUXCIsIHtcbiAgdmFsdWU6IDIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEtleWJvYXJkRXZlbnQucHJvdG90eXBlLCBcIkRPTV9LRVlfTE9DQVRJT05fUklHSFRcIiwge1xuICB2YWx1ZTogMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LCBcIkRPTV9LRVlfTE9DQVRJT05fTlVNUEFEXCIsIHtcbiAgdmFsdWU6IDMsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEtleWJvYXJkRXZlbnQucHJvdG90eXBlLCBcIkRPTV9LRVlfTE9DQVRJT05fTlVNUEFEXCIsIHtcbiAgdmFsdWU6IDMsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwia2V5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmtleTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEtleWJvYXJkRXZlbnQucHJvdG90eXBlLCBcImNvZGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY29kZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEtleWJvYXJkRXZlbnQucHJvdG90eXBlLCBcImxvY2F0aW9uXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmxvY2F0aW9uO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwiY3RybEtleVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jdHJsS2V5O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwic2hpZnRLZXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2hpZnRLZXk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgXCJhbHRLZXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uYWx0S2V5O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwibWV0YUtleVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5tZXRhS2V5O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwicmVwZWF0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnJlcGVhdDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEtleWJvYXJkRXZlbnQucHJvdG90eXBlLCBcImlzQ29tcG9zaW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmlzQ29tcG9zaW5nO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwiY2hhckNvZGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2hhckNvZGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgXCJrZXlDb2RlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmtleUNvZGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgXCJ3aGljaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS53aGljaDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5LZXlib2FyZEV2ZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJLZXlib2FyZEV2ZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEtleWJvYXJkRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIFVJRXZlbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogS2V5Ym9hcmRFdmVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ldmVudHMvS2V5Ym9hcmRFdmVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbmNvbnN0IEV2ZW50TW9kaWZpZXJJbml0ID0gcmVxdWlyZShcIi4vRXZlbnRNb2RpZmllckluaXRcIik7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb252ZXJ0SW5oZXJpdChvYmosIHJldCkge1xuICAgIEV2ZW50TW9kaWZpZXJJbml0LmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcblxuICAgIGtleSA9IFwiY2hhckNvZGVcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gMDtcbiAgICB9XG5cbiAgICBrZXkgPSBcImNvZGVcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBcIlwiO1xuICAgIH1cblxuICAgIGtleSA9IFwiaXNDb21wb3NpbmdcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ID0gXCJrZXlcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBcIlwiO1xuICAgIH1cblxuICAgIGtleSA9IFwia2V5Q29kZVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSAwO1xuICAgIH1cblxuICAgIGtleSA9IFwibG9jYXRpb25cIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gMDtcbiAgICB9XG5cbiAgICBrZXkgPSBcInJlcGVhdFwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIndoaWNoXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IDA7XG4gICAgfVxuICB9LFxuXG4gIGNvbnZlcnQob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IGhhcyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlIHx8IG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgbWF5IG5vdCBiZSBhIERhdGUgb3IgUmVnRXhwIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIG1vZHVsZS5leHBvcnRzLmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIExpbmtTdHlsZSgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaW5rU3R5bGUucHJvdG90eXBlLCBcInNoZWV0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnNoZWV0KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5MaW5rU3R5bGUucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkxpbmtTdHlsZVwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTGlua1N0eWxlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKExpbmtTdHlsZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBMaW5rU3R5bGUsXG4gIGV4cG9zZToge1xuICAgIFxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9MaW5rU3R5bGUtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIExvY2F0aW9uKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuXG5Mb2NhdGlvbi5wcm90b3R5cGUuYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHVybCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Fzc2lnbicgb24gJ0xvY2F0aW9uJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5hc3NpZ24oLi4uYXJncyk7XG59O1xuXG5Mb2NhdGlvbi5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UodXJsKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAncmVwbGFjZScgb24gJ0xvY2F0aW9uJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5yZXBsYWNlKC4uLmFyZ3MpO1xufTtcblxuTG9jYXRpb24ucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uIHJlbG9hZCgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0ucmVsb2FkKCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2F0aW9uLnByb3RvdHlwZSwgXCJocmVmXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhyZWY7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaHJlZiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbkxvY2F0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uaHJlZjs7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYXRpb24ucHJvdG90eXBlLCBcIm9yaWdpblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5vcmlnaW47XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhdGlvbi5wcm90b3R5cGUsIFwicHJvdG9jb2xcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucHJvdG9jb2w7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucHJvdG9jb2wgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYXRpb24ucHJvdG90eXBlLCBcImhvc3RcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaG9zdDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5ob3N0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2F0aW9uLnByb3RvdHlwZSwgXCJob3N0bmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0bmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5ob3N0bmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhdGlvbi5wcm90b3R5cGUsIFwicG9ydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wb3J0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBvcnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYXRpb24ucHJvdG90eXBlLCBcInBhdGhuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnBhdGhuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBhdGhuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2F0aW9uLnByb3RvdHlwZSwgXCJzZWFyY2hcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VhcmNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNlYXJjaCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhdGlvbi5wcm90b3R5cGUsIFwiaGFzaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5oYXNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhhc2ggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkxvY2F0aW9uLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJMb2NhdGlvblwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTG9jYXRpb24ucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTG9jYXRpb24ucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIFwidmFsdWVPZlwiLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWVPZigpIHsgcmV0dXJuIHRoaXM7IH0sXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgfSk7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IExvY2F0aW9uLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgTG9jYXRpb246IExvY2F0aW9uIH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vd2luZG93L0xvY2F0aW9uLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEV2ZW50ID0gcmVxdWlyZShcIi4vRXZlbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IGNvbnZlcnRNZXNzYWdlRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vTWVzc2FnZUV2ZW50SW5pdFwiKS5jb252ZXJ0O1xuXG5mdW5jdGlvbiBNZXNzYWdlRXZlbnQodHlwZSkge1xuICBpZiAoIW5ldy50YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnTWVzc2FnZUV2ZW50Jy4gUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3I7IHRoaXMgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnTWVzc2FnZUV2ZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVydE1lc3NhZ2VFdmVudEluaXQoYXJnc1sxXSk7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwgRXZlbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoTWVzc2FnZUV2ZW50LCBFdmVudC5pbnRlcmZhY2UpO1xuXG5cbk1lc3NhZ2VFdmVudC5wcm90b3R5cGUuaW5pdE1lc3NhZ2VFdmVudCA9IGZ1bmN0aW9uIGluaXRNZXNzYWdlRXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0cykge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luaXRNZXNzYWdlRXZlbnQnIG9uICdNZXNzYWdlRXZlbnQnOiA4IGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgODsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMV0pO1xuICBhcmdzWzJdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMl0pO1xuICBhcmdzWzNdID0gY29udmVyc2lvbnNbXCJhbnlcIl0oYXJnc1szXSk7XG4gIGFyZ3NbNF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzRdKTtcbiAgYXJnc1s1XSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbNV0pO1xuICBpZiAoYXJnc1s2XSA9PT0gbnVsbCB8fCBhcmdzWzZdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzZdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgfVxuICBpZiAoYXJnc1s3XSA9PT0gbnVsbCB8fCBhcmdzWzddID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzddID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5pbml0TWVzc2FnZUV2ZW50KC4uLmFyZ3MpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXNzYWdlRXZlbnQucHJvdG90eXBlLCBcImRhdGFcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uZGF0YTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1lc3NhZ2VFdmVudC5wcm90b3R5cGUsIFwib3JpZ2luXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9yaWdpbjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1lc3NhZ2VFdmVudC5wcm90b3R5cGUsIFwibGFzdEV2ZW50SWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubGFzdEV2ZW50SWQ7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXNzYWdlRXZlbnQucHJvdG90eXBlLCBcInNvdXJjZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5zb3VyY2UpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwgXCJwb3J0c1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5wb3J0cyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuTWVzc2FnZUV2ZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJNZXNzYWdlRXZlbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE1lc3NhZ2VFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShNZXNzYWdlRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEV2ZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IE1lc3NhZ2VFdmVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IE1lc3NhZ2VFdmVudDogTWVzc2FnZUV2ZW50IH0sXG4gICAgV29ya2VyOiB7IE1lc3NhZ2VFdmVudDogTWVzc2FnZUV2ZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vZXZlbnRzL01lc3NhZ2VFdmVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbmNvbnN0IEV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL0V2ZW50SW5pdFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KSB7XG4gICAgRXZlbnRJbml0LmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcblxuICAgIGtleSA9IFwiZGF0YVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJhbnlcIl0odmFsdWUpO1xuICAgIH1cblxuICAgIGtleSA9IFwibGFzdEV2ZW50SWRcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKHZhbHVlKTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIm9yaWdpblwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0odmFsdWUpO1xuICAgIH1cblxuICAgIGtleSA9IFwicG9ydHNcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9ICh2YWx1ZSk7XG4gICAgfVxuXG4gICAga2V5ID0gXCJzb3VyY2VcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9ICh2YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIGNvbnZlcnQob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IGhhcyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlIHx8IG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgbWF5IG5vdCBiZSBhIERhdGUgb3IgUmVnRXhwIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIG1vZHVsZS5leHBvcnRzLmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgVUlFdmVudCA9IHJlcXVpcmUoXCIuL1VJRXZlbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IGNvbnZlcnRNb3VzZUV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL01vdXNlRXZlbnRJbml0XCIpLmNvbnZlcnQ7XG5cbmZ1bmN0aW9uIE1vdXNlRXZlbnQodHlwZUFyZykge1xuICBpZiAoIW5ldy50YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnTW91c2VFdmVudCcuIFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yOyB0aGlzIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ01vdXNlRXZlbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJ0TW91c2VFdmVudEluaXQoYXJnc1sxXSk7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoTW91c2VFdmVudC5wcm90b3R5cGUsIFVJRXZlbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoTW91c2VFdmVudCwgVUlFdmVudC5pbnRlcmZhY2UpO1xuXG5cbk1vdXNlRXZlbnQucHJvdG90eXBlLmdldE1vZGlmaWVyU3RhdGUgPSBmdW5jdGlvbiBnZXRNb2RpZmllclN0YXRlKGtleUFyZykge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldE1vZGlmaWVyU3RhdGUnIG9uICdNb3VzZUV2ZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5nZXRNb2RpZmllclN0YXRlKC4uLmFyZ3MpO1xufTtcblxuTW91c2VFdmVudC5wcm90b3R5cGUuaW5pdE1vdXNlRXZlbnQgPSBmdW5jdGlvbiBpbml0TW91c2VFdmVudCh0eXBlQXJnLCBidWJibGVzQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcsIHNjcmVlblhBcmcsIHNjcmVlbllBcmcsIGNsaWVudFhBcmcsIGNsaWVudFlBcmcsIGN0cmxLZXlBcmcsIGFsdEtleUFyZywgc2hpZnRLZXlBcmcsIG1ldGFLZXlBcmcsIGJ1dHRvbkFyZywgcmVsYXRlZFRhcmdldEFyZykge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDE1KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdpbml0TW91c2VFdmVudCcgb24gJ01vdXNlRXZlbnQnOiAxNSBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE1OyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1sxXSk7XG4gIGFyZ3NbMl0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1syXSk7XG4gIGlmIChhcmdzWzNdID09PSBudWxsIHx8IGFyZ3NbM10gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbM10gPSBudWxsO1xuICB9IGVsc2Uge1xuICB9XG4gIGFyZ3NbNF0gPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oYXJnc1s0XSk7XG4gIGFyZ3NbNV0gPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oYXJnc1s1XSk7XG4gIGFyZ3NbNl0gPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oYXJnc1s2XSk7XG4gIGFyZ3NbN10gPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oYXJnc1s3XSk7XG4gIGFyZ3NbOF0gPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oYXJnc1s4XSk7XG4gIGFyZ3NbOV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1s5XSk7XG4gIGFyZ3NbMTBdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMTBdKTtcbiAgYXJnc1sxMV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1sxMV0pO1xuICBhcmdzWzEyXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzEyXSk7XG4gIGFyZ3NbMTNdID0gY29udmVyc2lvbnNbXCJzaG9ydFwiXShhcmdzWzEzXSk7XG4gIGlmIChhcmdzWzE0XSA9PT0gbnVsbCB8fCBhcmdzWzE0XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1sxNF0gPSBudWxsO1xuICB9IGVsc2Uge1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmluaXRNb3VzZUV2ZW50KC4uLmFyZ3MpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3VzZUV2ZW50LnByb3RvdHlwZSwgXCJzY3JlZW5YXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNjcmVlblg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3VzZUV2ZW50LnByb3RvdHlwZSwgXCJzY3JlZW5ZXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNjcmVlblk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3VzZUV2ZW50LnByb3RvdHlwZSwgXCJjbGllbnRYXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmNsaWVudFg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3VzZUV2ZW50LnByb3RvdHlwZSwgXCJjbGllbnRZXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmNsaWVudFk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3VzZUV2ZW50LnByb3RvdHlwZSwgXCJjdHJsS2V5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmN0cmxLZXk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3VzZUV2ZW50LnByb3RvdHlwZSwgXCJzaGlmdEtleVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zaGlmdEtleTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vdXNlRXZlbnQucHJvdG90eXBlLCBcImFsdEtleVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5hbHRLZXk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3VzZUV2ZW50LnByb3RvdHlwZSwgXCJtZXRhS2V5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm1ldGFLZXk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3VzZUV2ZW50LnByb3RvdHlwZSwgXCJidXR0b25cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uYnV0dG9uO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTW91c2VFdmVudC5wcm90b3R5cGUsIFwicmVsYXRlZFRhcmdldFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5yZWxhdGVkVGFyZ2V0KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vdXNlRXZlbnQucHJvdG90eXBlLCBcImJ1dHRvbnNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uYnV0dG9ucztcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5Nb3VzZUV2ZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJNb3VzZUV2ZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShNb3VzZUV2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE1vdXNlRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIFVJRXZlbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogTW91c2VFdmVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IE1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ldmVudHMvTW91c2VFdmVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbmNvbnN0IEV2ZW50TW9kaWZpZXJJbml0ID0gcmVxdWlyZShcIi4vRXZlbnRNb2RpZmllckluaXRcIik7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb252ZXJ0SW5oZXJpdChvYmosIHJldCkge1xuICAgIEV2ZW50TW9kaWZpZXJJbml0LmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcblxuICAgIGtleSA9IFwiYnV0dG9uXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcInNob3J0XCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSAwO1xuICAgIH1cblxuICAgIGtleSA9IFwiYnV0dG9uc1wiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBzaG9ydFwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gMDtcbiAgICB9XG5cbiAgICBrZXkgPSBcImNsaWVudFhcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gMDtcbiAgICB9XG5cbiAgICBrZXkgPSBcImNsaWVudFlcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gMDtcbiAgICB9XG5cbiAgICBrZXkgPSBcInJlbGF0ZWRUYXJnZXRcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9ICh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gbnVsbDtcbiAgICB9XG5cbiAgICBrZXkgPSBcInNjcmVlblhcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gMDtcbiAgICB9XG5cbiAgICBrZXkgPSBcInNjcmVlbllcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gMDtcbiAgICB9XG4gIH0sXG5cbiAgY29udmVydChvYmopIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgaGFzIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgb2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBtYXkgbm90IGJlIGEgRGF0ZSBvciBSZWdFeHAgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbW9kdWxlLmV4cG9ydHMuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IG1peGluID0gdXRpbHMubWl4aW47XG5jb25zdCBOYXZpZ2F0b3JJRCA9IHJlcXVpcmUoXCIuL05hdmlnYXRvcklELmpzXCIpO1xuY29uc3QgTmF2aWdhdG9yTGFuZ3VhZ2UgPSByZXF1aXJlKFwiLi9OYXZpZ2F0b3JMYW5ndWFnZS5qc1wiKTtcbmNvbnN0IE5hdmlnYXRvck9uTGluZSA9IHJlcXVpcmUoXCIuL05hdmlnYXRvck9uTGluZS5qc1wiKTtcbmNvbnN0IE5hdmlnYXRvckNvb2tpZXMgPSByZXF1aXJlKFwiLi9OYXZpZ2F0b3JDb29raWVzLmpzXCIpO1xuY29uc3QgTmF2aWdhdG9yUGx1Z2lucyA9IHJlcXVpcmUoXCIuL05hdmlnYXRvclBsdWdpbnMuanNcIik7XG5jb25zdCBOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmUgPSByZXF1aXJlKFwiLi9OYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmUuanNcIik7XG5cbmZ1bmN0aW9uIE5hdmlnYXRvcigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cbm1peGluKE5hdmlnYXRvci5wcm90b3R5cGUsIE5hdmlnYXRvcklELmludGVyZmFjZS5wcm90b3R5cGUpO1xuTmF2aWdhdG9ySUQubWl4ZWRJbnRvLnB1c2goTmF2aWdhdG9yKTtcbm1peGluKE5hdmlnYXRvci5wcm90b3R5cGUsIE5hdmlnYXRvckxhbmd1YWdlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuTmF2aWdhdG9yTGFuZ3VhZ2UubWl4ZWRJbnRvLnB1c2goTmF2aWdhdG9yKTtcbm1peGluKE5hdmlnYXRvci5wcm90b3R5cGUsIE5hdmlnYXRvck9uTGluZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk5hdmlnYXRvck9uTGluZS5taXhlZEludG8ucHVzaChOYXZpZ2F0b3IpO1xubWl4aW4oTmF2aWdhdG9yLnByb3RvdHlwZSwgTmF2aWdhdG9yQ29va2llcy5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk5hdmlnYXRvckNvb2tpZXMubWl4ZWRJbnRvLnB1c2goTmF2aWdhdG9yKTtcbm1peGluKE5hdmlnYXRvci5wcm90b3R5cGUsIE5hdmlnYXRvclBsdWdpbnMuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5OYXZpZ2F0b3JQbHVnaW5zLm1peGVkSW50by5wdXNoKE5hdmlnYXRvcik7XG5taXhpbihOYXZpZ2F0b3IucHJvdG90eXBlLCBOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5OYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmUubWl4ZWRJbnRvLnB1c2goTmF2aWdhdG9yKTtcblxuTmF2aWdhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJOYXZpZ2F0b3JcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5hdmlnYXRvci5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOYXZpZ2F0b3IucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogTmF2aWdhdG9yLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgTmF2aWdhdG9yOiBOYXZpZ2F0b3IgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9uYXZpZ2F0b3IvTmF2aWdhdG9yLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmUoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTmF2aWdhdG9yQ29uY3VycmVudEhhcmR3YXJlLnByb3RvdHlwZSwgXCJoYXJkd2FyZUNvbmN1cnJlbmN5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhhcmR3YXJlQ29uY3VycmVuY3k7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuTmF2aWdhdG9yQ29uY3VycmVudEhhcmR3YXJlLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmVcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogTmF2aWdhdG9yQ29uY3VycmVudEhhcmR3YXJlLFxuICBleHBvc2U6IHtcbiAgICBcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbmF2aWdhdG9yL05hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gTmF2aWdhdG9yQ29va2llcygpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXZpZ2F0b3JDb29raWVzLnByb3RvdHlwZSwgXCJjb29raWVFbmFibGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmNvb2tpZUVuYWJsZWQ7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuTmF2aWdhdG9yQ29va2llcy5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiTmF2aWdhdG9yQ29va2llc1wiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTmF2aWdhdG9yQ29va2llcy5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOYXZpZ2F0b3JDb29raWVzLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IE5hdmlnYXRvckNvb2tpZXMsXG4gIGV4cG9zZToge1xuICAgIFxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9uYXZpZ2F0b3IvTmF2aWdhdG9yQ29va2llcy1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gTmF2aWdhdG9ySUQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTmF2aWdhdG9ySUQucHJvdG90eXBlLCBcImFwcENvZGVOYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmFwcENvZGVOYW1lO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTmF2aWdhdG9ySUQucHJvdG90eXBlLCBcImFwcE5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uYXBwTmFtZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdmlnYXRvcklELnByb3RvdHlwZSwgXCJhcHBWZXJzaW9uXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmFwcFZlcnNpb247XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXZpZ2F0b3JJRC5wcm90b3R5cGUsIFwicGxhdGZvcm1cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGxhdGZvcm07XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXZpZ2F0b3JJRC5wcm90b3R5cGUsIFwicHJvZHVjdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wcm9kdWN0O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTmF2aWdhdG9ySUQucHJvdG90eXBlLCBcInByb2R1Y3RTdWJcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucHJvZHVjdFN1YjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdmlnYXRvcklELnByb3RvdHlwZSwgXCJ1c2VyQWdlbnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udXNlckFnZW50O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTmF2aWdhdG9ySUQucHJvdG90eXBlLCBcInZlbmRvclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS52ZW5kb3I7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXZpZ2F0b3JJRC5wcm90b3R5cGUsIFwidmVuZG9yU3ViXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnZlbmRvclN1YjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5OYXZpZ2F0b3JJRC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiTmF2aWdhdG9ySURcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5hdmlnYXRvcklELnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5hdmlnYXRvcklELnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IE5hdmlnYXRvcklELFxuICBleHBvc2U6IHtcbiAgICBcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbmF2aWdhdG9yL05hdmlnYXRvcklELWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBOYXZpZ2F0b3JMYW5ndWFnZSgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXZpZ2F0b3JMYW5ndWFnZS5wcm90b3R5cGUsIFwibGFuZ3VhZ2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubGFuZ3VhZ2U7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXZpZ2F0b3JMYW5ndWFnZS5wcm90b3R5cGUsIFwibGFuZ3VhZ2VzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmxhbmd1YWdlcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuTmF2aWdhdG9yTGFuZ3VhZ2UucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk5hdmlnYXRvckxhbmd1YWdlXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOYXZpZ2F0b3JMYW5ndWFnZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOYXZpZ2F0b3JMYW5ndWFnZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBOYXZpZ2F0b3JMYW5ndWFnZSxcbiAgZXhwb3NlOiB7XG4gICAgXG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25hdmlnYXRvci9OYXZpZ2F0b3JMYW5ndWFnZS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gTmF2aWdhdG9yT25MaW5lKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdmlnYXRvck9uTGluZS5wcm90b3R5cGUsIFwib25MaW5lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9uTGluZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5OYXZpZ2F0b3JPbkxpbmUucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk5hdmlnYXRvck9uTGluZVwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTmF2aWdhdG9yT25MaW5lLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5hdmlnYXRvck9uTGluZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBOYXZpZ2F0b3JPbkxpbmUsXG4gIGV4cG9zZToge1xuICAgIFxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9uYXZpZ2F0b3IvTmF2aWdhdG9yT25MaW5lLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBOYXZpZ2F0b3JQbHVnaW5zKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuXG5OYXZpZ2F0b3JQbHVnaW5zLnByb3RvdHlwZS5qYXZhRW5hYmxlZCA9IGZ1bmN0aW9uIGphdmFFbmFibGVkKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5qYXZhRW5hYmxlZCgpO1xufTtcblxuTmF2aWdhdG9yUGx1Z2lucy5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiTmF2aWdhdG9yUGx1Z2luc1wiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTmF2aWdhdG9yUGx1Z2lucy5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOYXZpZ2F0b3JQbHVnaW5zLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IE5hdmlnYXRvclBsdWdpbnMsXG4gIGV4cG9zZToge1xuICAgIFxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9uYXZpZ2F0b3IvTmF2aWdhdG9yUGx1Z2lucy1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBFdmVudFRhcmdldCA9IHJlcXVpcmUoXCIuL0V2ZW50VGFyZ2V0LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIE5vZGUoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKE5vZGUucHJvdG90eXBlLCBFdmVudFRhcmdldC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihOb2RlLCBFdmVudFRhcmdldC5pbnRlcmZhY2UpO1xuXG5cbk5vZGUucHJvdG90eXBlLmhhc0NoaWxkTm9kZXMgPSBmdW5jdGlvbiBoYXNDaGlsZE5vZGVzKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5oYXNDaGlsZE5vZGVzKCk7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLm5vcm1hbGl6ZSgpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlID0gZnVuY3Rpb24gY2xvbmVOb2RlKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1swXSk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc1swXSA9IGZhbHNlO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNsb25lTm9kZSguLi5hcmdzKSk7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5pc0VxdWFsTm9kZSA9IGZ1bmN0aW9uIGlzRXF1YWxOb2RlKG90aGVyTm9kZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2lzRXF1YWxOb2RlJyBvbiAnTm9kZSc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdID09PSBudWxsIHx8IGFyZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMF0gPSBudWxsO1xuICB9IGVsc2Uge1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmlzRXF1YWxOb2RlKC4uLmFyZ3MpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPSBmdW5jdGlvbiBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvdGhlcikge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbXBhcmVEb2N1bWVudFBvc2l0aW9uJyBvbiAnTm9kZSc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKC4uLmFyZ3MpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiBjb250YWlucyhvdGhlcikge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRhaW5zJyBvbiAnTm9kZSc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdID09PSBudWxsIHx8IGFyZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMF0gPSBudWxsO1xuICB9IGVsc2Uge1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmNvbnRhaW5zKC4uLmFyZ3MpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKG5vZGUsIGNoaWxkKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5zZXJ0QmVmb3JlJyBvbiAnTm9kZSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1sxXSA9PT0gbnVsbCB8fCBhcmdzWzFdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzFdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5pbnNlcnRCZWZvcmUoLi4uYXJncykpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiBhcHBlbmRDaGlsZChub2RlKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnYXBwZW5kQ2hpbGQnIG9uICdOb2RlJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uYXBwZW5kQ2hpbGQoLi4uYXJncykpO1xufTtcblxuTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkID0gZnVuY3Rpb24gcmVwbGFjZUNoaWxkKG5vZGUsIGNoaWxkKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAncmVwbGFjZUNoaWxkJyBvbiAnTm9kZSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5yZXBsYWNlQ2hpbGQoLi4uYXJncykpO1xufTtcblxuTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiByZW1vdmVDaGlsZChjaGlsZCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlbW92ZUNoaWxkJyBvbiAnTm9kZSc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnJlbW92ZUNoaWxkKC4uLmFyZ3MpKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJFTEVNRU5UX05PREVcIiwge1xuICB2YWx1ZTogMSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiRUxFTUVOVF9OT0RFXCIsIHtcbiAgdmFsdWU6IDEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJBVFRSSUJVVEVfTk9ERVwiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJBVFRSSUJVVEVfTk9ERVwiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiVEVYVF9OT0RFXCIsIHtcbiAgdmFsdWU6IDMsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIlRFWFRfTk9ERVwiLCB7XG4gIHZhbHVlOiAzLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiQ0RBVEFfU0VDVElPTl9OT0RFXCIsIHtcbiAgdmFsdWU6IDQsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIkNEQVRBX1NFQ1RJT05fTk9ERVwiLCB7XG4gIHZhbHVlOiA0LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiRU5USVRZX1JFRkVSRU5DRV9OT0RFXCIsIHtcbiAgdmFsdWU6IDUsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIkVOVElUWV9SRUZFUkVOQ0VfTk9ERVwiLCB7XG4gIHZhbHVlOiA1LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiRU5USVRZX05PREVcIiwge1xuICB2YWx1ZTogNixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiRU5USVRZX05PREVcIiwge1xuICB2YWx1ZTogNixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLCBcIlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERVwiLCB7XG4gIHZhbHVlOiA3LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREVcIiwge1xuICB2YWx1ZTogNyxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLCBcIkNPTU1FTlRfTk9ERVwiLCB7XG4gIHZhbHVlOiA4LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJDT01NRU5UX05PREVcIiwge1xuICB2YWx1ZTogOCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLCBcIkRPQ1VNRU5UX05PREVcIiwge1xuICB2YWx1ZTogOSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiRE9DVU1FTlRfTk9ERVwiLCB7XG4gIHZhbHVlOiA5LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiRE9DVU1FTlRfVFlQRV9OT0RFXCIsIHtcbiAgdmFsdWU6IDEwLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJET0NVTUVOVF9UWVBFX05PREVcIiwge1xuICB2YWx1ZTogMTAsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJET0NVTUVOVF9GUkFHTUVOVF9OT0RFXCIsIHtcbiAgdmFsdWU6IDExLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJET0NVTUVOVF9GUkFHTUVOVF9OT0RFXCIsIHtcbiAgdmFsdWU6IDExLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiTk9UQVRJT05fTk9ERVwiLCB7XG4gIHZhbHVlOiAxMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiTk9UQVRJT05fTk9ERVwiLCB7XG4gIHZhbHVlOiAxMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJub2RlVHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ub2RlVHlwZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIm5vZGVOYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm5vZGVOYW1lO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiYmFzZVVSSVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5iYXNlVVJJO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwib3duZXJEb2N1bWVudFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vd25lckRvY3VtZW50KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcInBhcmVudE5vZGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucGFyZW50Tm9kZSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJwYXJlbnRFbGVtZW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnBhcmVudEVsZW1lbnQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiY2hpbGROb2Rlc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jaGlsZE5vZGVzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcImZpcnN0Q2hpbGRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZmlyc3RDaGlsZCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJsYXN0Q2hpbGRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ubGFzdENoaWxkKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcInByZXZpb3VzU2libGluZ1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5wcmV2aW91c1NpYmxpbmcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwibmV4dFNpYmxpbmdcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ubmV4dFNpYmxpbmcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwibm9kZVZhbHVlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm5vZGVWYWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBpZiAoViA9PT0gbnVsbCB8fCBWID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFYgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIH1cbiAgICB0aGlzW2ltcGxdLm5vZGVWYWx1ZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJ0ZXh0Q29udGVudFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS50ZXh0Q29udGVudDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBpZiAoViA9PT0gbnVsbCB8fCBWID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFYgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIH1cbiAgICB0aGlzW2ltcGxdLnRleHRDb250ZW50ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEXCIsIHtcbiAgdmFsdWU6IDEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRFwiLCB7XG4gIHZhbHVlOiAxLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HXCIsIHtcbiAgdmFsdWU6IDIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElOR1wiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HXCIsIHtcbiAgdmFsdWU6IDQsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lOR1wiLCB7XG4gIHZhbHVlOiA0LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlNcIiwge1xuICB2YWx1ZTogOCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlNcIiwge1xuICB2YWx1ZTogOCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLCBcIkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWVwiLCB7XG4gIHZhbHVlOiAxNixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZXCIsIHtcbiAgdmFsdWU6IDE2LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUNcIiwge1xuICB2YWx1ZTogMzIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIkRPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDXCIsIHtcbiAgdmFsdWU6IDMyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuXG5Ob2RlLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJOb2RlXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOb2RlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5vZGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEV2ZW50VGFyZ2V0Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IE5vZGUsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBOb2RlOiBOb2RlIH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvTm9kZS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS5wcm90b3R5cGUsIFwicHJldmlvdXNFbGVtZW50U2libGluZ1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS5wcm90b3R5cGUsIFwibmV4dEVsZW1lbnRTaWJsaW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm5leHRFbGVtZW50U2libGluZyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGVcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLFxuICBleHBvc2U6IHtcbiAgICBcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBOb25FbGVtZW50UGFyZW50Tm9kZSgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cblxuTm9uRWxlbWVudFBhcmVudE5vZGUucHJvdG90eXBlLmdldEVsZW1lbnRCeUlkID0gZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0RWxlbWVudEJ5SWQnIG9uICdOb25FbGVtZW50UGFyZW50Tm9kZSc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0RWxlbWVudEJ5SWQoLi4uYXJncykpO1xufTtcblxuTm9uRWxlbWVudFBhcmVudE5vZGUucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk5vbkVsZW1lbnRQYXJlbnROb2RlXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOb25FbGVtZW50UGFyZW50Tm9kZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOb25FbGVtZW50UGFyZW50Tm9kZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBOb25FbGVtZW50UGFyZW50Tm9kZSxcbiAgZXhwb3NlOiB7XG4gICAgXG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL05vbkVsZW1lbnRQYXJlbnROb2RlLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBQYXJlbnROb2RlKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuXG5QYXJlbnROb2RlLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yID0gZnVuY3Rpb24gcXVlcnlTZWxlY3RvcihzZWxlY3RvcnMpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdxdWVyeVNlbGVjdG9yJyBvbiAnUGFyZW50Tm9kZSc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucXVlcnlTZWxlY3RvciguLi5hcmdzKSk7XG59O1xuXG5QYXJlbnROb2RlLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsID0gZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcnMpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdxdWVyeVNlbGVjdG9yQWxsJyBvbiAnUGFyZW50Tm9kZSc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucXVlcnlTZWxlY3RvckFsbCguLi5hcmdzKSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcmVudE5vZGUucHJvdG90eXBlLCBcImNoaWxkcmVuXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNoaWxkcmVuKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcmVudE5vZGUucHJvdG90eXBlLCBcImZpcnN0RWxlbWVudENoaWxkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmZpcnN0RWxlbWVudENoaWxkKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcmVudE5vZGUucHJvdG90eXBlLCBcImxhc3RFbGVtZW50Q2hpbGRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ubGFzdEVsZW1lbnRDaGlsZCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShQYXJlbnROb2RlLnByb3RvdHlwZSwgXCJjaGlsZEVsZW1lbnRDb3VudFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jaGlsZEVsZW1lbnRDb3VudDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5QYXJlbnROb2RlLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJQYXJlbnROb2RlXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShQYXJlbnROb2RlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFBhcmVudE5vZGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogUGFyZW50Tm9kZSxcbiAgZXhwb3NlOiB7XG4gICAgXG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL1BhcmVudE5vZGUtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgRXZlbnQgPSByZXF1aXJlKFwiLi9FdmVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgY29udmVydFBvcFN0YXRlRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vUG9wU3RhdGVFdmVudEluaXRcIikuY29udmVydDtcblxuZnVuY3Rpb24gUG9wU3RhdGVFdmVudCh0eXBlKSB7XG4gIGlmICghbmV3LnRhcmdldCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQb3BTdGF0ZUV2ZW50Jy4gUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3I7IHRoaXMgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUG9wU3RhdGVFdmVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnRQb3BTdGF0ZUV2ZW50SW5pdChhcmdzWzFdKTtcblxuICBpZmFjZS5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihQb3BTdGF0ZUV2ZW50LnByb3RvdHlwZSwgRXZlbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoUG9wU3RhdGVFdmVudCwgRXZlbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFBvcFN0YXRlRXZlbnQucHJvdG90eXBlLCBcInN0YXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnN0YXRlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cblBvcFN0YXRlRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIlBvcFN0YXRlRXZlbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFBvcFN0YXRlRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoUG9wU3RhdGVFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgRXZlbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogUG9wU3RhdGVFdmVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFBvcFN0YXRlRXZlbnQ6IFBvcFN0YXRlRXZlbnQgfSxcbiAgICBXb3JrZXI6IHsgUG9wU3RhdGVFdmVudDogUG9wU3RhdGVFdmVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9Qb3BTdGF0ZUV2ZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxuY29uc3QgRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vRXZlbnRJbml0XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29udmVydEluaGVyaXQob2JqLCByZXQpIHtcbiAgICBFdmVudEluaXQuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJzdGF0ZVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJhbnlcIl0odmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBjb252ZXJ0KG9iaikge1xuICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBoYXMgdG8gYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSB8fCBvYmogaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IG1heSBub3QgYmUgYSBEYXRlIG9yIFJlZ0V4cCBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBtb2R1bGUuZXhwb3J0cy5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IENoYXJhY3RlckRhdGEgPSByZXF1aXJlKFwiLi9DaGFyYWN0ZXJEYXRhLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFByb2Nlc3NpbmdJbnN0cnVjdGlvbigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoUHJvY2Vzc2luZ0luc3RydWN0aW9uLnByb3RvdHlwZSwgQ2hhcmFjdGVyRGF0YS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIENoYXJhY3RlckRhdGEuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUsIFwidGFyZ2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnRhcmdldDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIlByb2Nlc3NpbmdJbnN0cnVjdGlvblwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoUHJvY2Vzc2luZ0luc3RydWN0aW9uLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgQ2hhcmFjdGVyRGF0YS5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBFdmVudCA9IHJlcXVpcmUoXCIuL0V2ZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBjb252ZXJ0UHJvZ3Jlc3NFdmVudEluaXQgPSByZXF1aXJlKFwiLi9Qcm9ncmVzc0V2ZW50SW5pdFwiKS5jb252ZXJ0O1xuXG5mdW5jdGlvbiBQcm9ncmVzc0V2ZW50KHR5cGUpIHtcbiAgaWYgKCFuZXcudGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb2dyZXNzRXZlbnQnLiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvcjsgdGhpcyBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9ncmVzc0V2ZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVydFByb2dyZXNzRXZlbnRJbml0KGFyZ3NbMV0pO1xuXG4gIGlmYWNlLnNldHVwKHRoaXMsIGFyZ3MpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKFByb2dyZXNzRXZlbnQucHJvdG90eXBlLCBFdmVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihQcm9ncmVzc0V2ZW50LCBFdmVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvZ3Jlc3NFdmVudC5wcm90b3R5cGUsIFwibGVuZ3RoQ29tcHV0YWJsZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5sZW5ndGhDb21wdXRhYmxlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvZ3Jlc3NFdmVudC5wcm90b3R5cGUsIFwibG9hZGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmxvYWRlZDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFByb2dyZXNzRXZlbnQucHJvdG90eXBlLCBcInRvdGFsXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnRvdGFsO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cblByb2dyZXNzRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIlByb2dyZXNzRXZlbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFByb2dyZXNzRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoUHJvZ3Jlc3NFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgRXZlbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogUHJvZ3Jlc3NFdmVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFByb2dyZXNzRXZlbnQ6IFByb2dyZXNzRXZlbnQgfSxcbiAgICBEZWRpY2F0ZWRXb3JrZXI6IHsgUHJvZ3Jlc3NFdmVudDogUHJvZ3Jlc3NFdmVudCB9LFxuICAgIFNoYXJlZFdvcmtlcjogeyBQcm9ncmVzc0V2ZW50OiBQcm9ncmVzc0V2ZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vZXZlbnRzL1Byb2dyZXNzRXZlbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuXG5jb25zdCBFdmVudEluaXQgPSByZXF1aXJlKFwiLi9FdmVudEluaXRcIik7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb252ZXJ0SW5oZXJpdChvYmosIHJldCkge1xuICAgIEV2ZW50SW5pdC5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgbGV0IGtleSwgdmFsdWU7XG5cbiAgICBrZXkgPSBcImxlbmd0aENvbXB1dGFibGVcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ID0gXCJsb2FkZWRcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZyBsb25nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSAwO1xuICAgIH1cblxuICAgIGtleSA9IFwidG90YWxcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZyBsb25nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSAwO1xuICAgIH1cbiAgfSxcblxuICBjb252ZXJ0KG9iaikge1xuICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBoYXMgdG8gYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSB8fCBvYmogaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IG1heSBub3QgYmUgYSBEYXRlIG9yIFJlZ0V4cCBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBtb2R1bGUuZXhwb3J0cy5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IENoYXJhY3RlckRhdGEgPSByZXF1aXJlKFwiLi9DaGFyYWN0ZXJEYXRhLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFRleHQoKSB7XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMF0gPSBcIlwiO1xuICB9XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoVGV4dC5wcm90b3R5cGUsIENoYXJhY3RlckRhdGEuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoVGV4dCwgQ2hhcmFjdGVyRGF0YS5pbnRlcmZhY2UpO1xuXG5cblRleHQucHJvdG90eXBlLnNwbGl0VGV4dCA9IGZ1bmN0aW9uIHNwbGl0VGV4dChvZmZzZXQpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdzcGxpdFRleHQnIG9uICdUZXh0JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uc3BsaXRUZXh0KC4uLmFyZ3MpKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dC5wcm90b3R5cGUsIFwid2hvbGVUZXh0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLndob2xlVGV4dDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5UZXh0LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJUZXh0XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShUZXh0LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFRleHQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIENoYXJhY3RlckRhdGEuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogVGV4dCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFRleHQ6IFRleHQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9UZXh0LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IFVJRXZlbnQgPSByZXF1aXJlKFwiLi9VSUV2ZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFRvdWNoRXZlbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKFRvdWNoRXZlbnQucHJvdG90eXBlLCBVSUV2ZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKFRvdWNoRXZlbnQsIFVJRXZlbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvdWNoRXZlbnQucHJvdG90eXBlLCBcInRvdWNoZXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0udG91Y2hlcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb3VjaEV2ZW50LnByb3RvdHlwZSwgXCJ0YXJnZXRUb3VjaGVzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnRhcmdldFRvdWNoZXMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVG91Y2hFdmVudC5wcm90b3R5cGUsIFwiY2hhbmdlZFRvdWNoZXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY2hhbmdlZFRvdWNoZXMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVG91Y2hFdmVudC5wcm90b3R5cGUsIFwiYWx0S2V5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmFsdEtleTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvdWNoRXZlbnQucHJvdG90eXBlLCBcIm1ldGFLZXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubWV0YUtleTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvdWNoRXZlbnQucHJvdG90eXBlLCBcImN0cmxLZXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY3RybEtleTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvdWNoRXZlbnQucHJvdG90eXBlLCBcInNoaWZ0S2V5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNoaWZ0S2V5O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cblRvdWNoRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIlRvdWNoRXZlbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFRvdWNoRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoVG91Y2hFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgVUlFdmVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBUb3VjaEV2ZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgVG91Y2hFdmVudDogVG91Y2hFdmVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9Ub3VjaEV2ZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBUcmVlV2Fsa2VyKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuXG5UcmVlV2Fsa2VyLnByb3RvdHlwZS5wYXJlbnROb2RlID0gZnVuY3Rpb24gcGFyZW50Tm9kZSgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucGFyZW50Tm9kZSgpKTtcbn07XG5cblRyZWVXYWxrZXIucHJvdG90eXBlLmZpcnN0Q2hpbGQgPSBmdW5jdGlvbiBmaXJzdENoaWxkKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5maXJzdENoaWxkKCkpO1xufTtcblxuVHJlZVdhbGtlci5wcm90b3R5cGUubGFzdENoaWxkID0gZnVuY3Rpb24gbGFzdENoaWxkKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5sYXN0Q2hpbGQoKSk7XG59O1xuXG5UcmVlV2Fsa2VyLnByb3RvdHlwZS5wcmV2aW91c1NpYmxpbmcgPSBmdW5jdGlvbiBwcmV2aW91c1NpYmxpbmcoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnByZXZpb3VzU2libGluZygpKTtcbn07XG5cblRyZWVXYWxrZXIucHJvdG90eXBlLm5leHRTaWJsaW5nID0gZnVuY3Rpb24gbmV4dFNpYmxpbmcoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm5leHRTaWJsaW5nKCkpO1xufTtcblxuVHJlZVdhbGtlci5wcm90b3R5cGUucHJldmlvdXNOb2RlID0gZnVuY3Rpb24gcHJldmlvdXNOb2RlKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5wcmV2aW91c05vZGUoKSk7XG59O1xuXG5UcmVlV2Fsa2VyLnByb3RvdHlwZS5uZXh0Tm9kZSA9IGZ1bmN0aW9uIG5leHROb2RlKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5uZXh0Tm9kZSgpKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZVdhbGtlci5wcm90b3R5cGUsIFwicm9vdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5yb290KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyZWVXYWxrZXIucHJvdG90eXBlLCBcIndoYXRUb1Nob3dcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ud2hhdFRvU2hvdztcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyZWVXYWxrZXIucHJvdG90eXBlLCBcImZpbHRlclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5maWx0ZXIpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZVdhbGtlci5wcm90b3R5cGUsIFwiY3VycmVudE5vZGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY3VycmVudE5vZGUpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0uY3VycmVudE5vZGUgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5UcmVlV2Fsa2VyLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJUcmVlV2Fsa2VyXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShUcmVlV2Fsa2VyLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFRyZWVXYWxrZXIucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogVHJlZVdhbGtlcixcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFRyZWVXYWxrZXI6IFRyZWVXYWxrZXIgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi90cmF2ZXJzYWwvVHJlZVdhbGtlci1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBFdmVudCA9IHJlcXVpcmUoXCIuL0V2ZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBjb252ZXJ0VUlFdmVudEluaXQgPSByZXF1aXJlKFwiLi9VSUV2ZW50SW5pdFwiKS5jb252ZXJ0O1xuXG5mdW5jdGlvbiBVSUV2ZW50KHR5cGUpIHtcbiAgaWYgKCFuZXcudGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1VJRXZlbnQnLiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvcjsgdGhpcyBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdVSUV2ZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVydFVJRXZlbnRJbml0KGFyZ3NbMV0pO1xuXG4gIGlmYWNlLnNldHVwKHRoaXMsIGFyZ3MpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKFVJRXZlbnQucHJvdG90eXBlLCBFdmVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihVSUV2ZW50LCBFdmVudC5pbnRlcmZhY2UpO1xuXG5cblVJRXZlbnQucHJvdG90eXBlLmluaXRVSUV2ZW50ID0gZnVuY3Rpb24gaW5pdFVJRXZlbnQodHlwZUFyZywgYnViYmxlc0FyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgZGV0YWlsQXJnKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgNSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5pdFVJRXZlbnQnIG9uICdVSUV2ZW50JzogNSBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDU7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzFdKTtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzJdKTtcbiAgaWYgKGFyZ3NbM10gPT09IG51bGwgfHwgYXJnc1szXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1szXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIH1cbiAgYXJnc1s0XSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShhcmdzWzRdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uaW5pdFVJRXZlbnQoLi4uYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVJRXZlbnQucHJvdG90eXBlLCBcInZpZXdcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0udmlldyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVSUV2ZW50LnByb3RvdHlwZSwgXCJkZXRhaWxcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uZGV0YWlsO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cblVJRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIlVJRXZlbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFVJRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoVUlFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgRXZlbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogVUlFdmVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFVJRXZlbnQ6IFVJRXZlbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ldmVudHMvVUlFdmVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbmNvbnN0IEV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL0V2ZW50SW5pdFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KSB7XG4gICAgRXZlbnRJbml0LmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcblxuICAgIGtleSA9IFwiZGV0YWlsXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImxvbmdcIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IDA7XG4gICAgfVxuXG4gICAga2V5ID0gXCJ2aWV3XCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSAodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IG51bGw7XG4gICAgfVxuICB9LFxuXG4gIGNvbnZlcnQob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IGhhcyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlIHx8IG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgbWF5IG5vdCBiZSBhIERhdGUgb3IgUmVnRXhwIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIG1vZHVsZS5leHBvcnRzLmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFdpbmRvd0V2ZW50SGFuZGxlcnMoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25hZnRlcnByaW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uYWZ0ZXJwcmludCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmFmdGVycHJpbnQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uYmVmb3JlcHJpbnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25iZWZvcmVwcmludCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmJlZm9yZXByaW50ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmJlZm9yZXVubG9hZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmJlZm9yZXVubG9hZCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmJlZm9yZXVubG9hZCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25oYXNoY2hhbmdlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uaGFzaGNoYW5nZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmhhc2hjaGFuZ2UgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ubGFuZ3VhZ2VjaGFuZ2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25sYW5ndWFnZWNoYW5nZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmxhbmd1YWdlY2hhbmdlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbm1lc3NhZ2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25tZXNzYWdlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubWVzc2FnZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25vZmZsaW5lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ub2ZmbGluZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbm9mZmxpbmUgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ub25saW5lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ub25saW5lKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ub25saW5lID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnBhZ2VoaWRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ucGFnZWhpZGUpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25wYWdlaGlkZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25wYWdlc2hvd1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnBhZ2VzaG93KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucGFnZXNob3cgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ucG9wc3RhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25wb3BzdGF0ZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnBvcHN0YXRlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnJlamVjdGlvbmhhbmRsZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25yZWplY3Rpb25oYW5kbGVkKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucmVqZWN0aW9uaGFuZGxlZCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25zdG9yYWdlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uc3RvcmFnZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnN0b3JhZ2UgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9udW5oYW5kbGVkcmVqZWN0aW9uXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9udW5oYW5kbGVkcmVqZWN0aW9uKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9udW5oYW5kbGVkcmVqZWN0aW9uID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnVubG9hZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnVubG9hZCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnVubG9hZCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbldpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIldpbmRvd0V2ZW50SGFuZGxlcnNcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFdpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBXaW5kb3dFdmVudEhhbmRsZXJzLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgV2luZG93RXZlbnRIYW5kbGVyczogV2luZG93RXZlbnRIYW5kbGVycyB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL1dpbmRvd0V2ZW50SGFuZGxlcnMtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgRG9jdW1lbnQgPSByZXF1aXJlKFwiLi9Eb2N1bWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBYTUxEb2N1bWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoWE1MRG9jdW1lbnQucHJvdG90eXBlLCBEb2N1bWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihYTUxEb2N1bWVudCwgRG9jdW1lbnQuaW50ZXJmYWNlKTtcblxuXG5YTUxEb2N1bWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiWE1MRG9jdW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFhNTERvY3VtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFhNTERvY3VtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBEb2N1bWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBYTUxEb2N1bWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFhNTERvY3VtZW50OiBYTUxEb2N1bWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL1hNTERvY3VtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMubWl4aW4gPSBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIHNvdXJjZSkge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGtleXNbaV0gaW4gdGFyZ2V0KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXlzW2ldLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5c1tpXSkpO1xuICB9XG59O1xuXG5jb25zdCB3cmFwcGVyU3ltYm9sID0gU3ltYm9sKFwid3JhcHBlclwiKTtcbmNvbnN0IGltcGxTeW1ib2wgPSBTeW1ib2woXCJpbXBsXCIpO1xuXG5mdW5jdGlvbiB3cmFwcGVyRm9ySW1wbChpbXBsKSB7XG4gIHJldHVybiBpbXBsID8gaW1wbFt3cmFwcGVyU3ltYm9sXSA6IG51bGw7XG59O1xuXG5mdW5jdGlvbiBpbXBsRm9yV3JhcHBlcih3cmFwcGVyKSB7XG4gIHJldHVybiB3cmFwcGVyID8gd3JhcHBlcltpbXBsU3ltYm9sXSA6IG51bGw7XG59O1xuXG5mdW5jdGlvbiB0cnlXcmFwcGVyRm9ySW1wbChpbXBsKSB7XG4gIGNvbnN0IHdyYXBwZXIgPSB3cmFwcGVyRm9ySW1wbChpbXBsKTtcbiAgcmV0dXJuIHdyYXBwZXIgPyB3cmFwcGVyIDogaW1wbDtcbn07XG5cbmZ1bmN0aW9uIHRyeUltcGxGb3JXcmFwcGVyKHdyYXBwZXIpIHtcbiAgY29uc3QgaW1wbCA9IGltcGxGb3JXcmFwcGVyKHdyYXBwZXIpO1xuICByZXR1cm4gaW1wbCA/IGltcGwgOiB3cmFwcGVyO1xufTtcblxuY29uc3QgaXRlckludGVybmFsU3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxcIik7XG5jb25zdCBJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSk7XG5cbm1vZHVsZS5leHBvcnRzLndyYXBwZXJTeW1ib2wgPSB3cmFwcGVyU3ltYm9sO1xubW9kdWxlLmV4cG9ydHMuaW1wbFN5bWJvbCA9IGltcGxTeW1ib2w7XG5tb2R1bGUuZXhwb3J0cy53cmFwcGVyRm9ySW1wbCA9IHdyYXBwZXJGb3JJbXBsO1xubW9kdWxlLmV4cG9ydHMuaW1wbEZvcldyYXBwZXIgPSBpbXBsRm9yV3JhcHBlcjtcbm1vZHVsZS5leHBvcnRzLnRyeVdyYXBwZXJGb3JJbXBsID0gdHJ5V3JhcHBlckZvckltcGw7XG5tb2R1bGUuZXhwb3J0cy50cnlJbXBsRm9yV3JhcHBlciA9IHRyeUltcGxGb3JXcmFwcGVyO1xubW9kdWxlLmV4cG9ydHMuaXRlckludGVybmFsU3ltYm9sID0gaXRlckludGVybmFsU3ltYm9sO1xubW9kdWxlLmV4cG9ydHMuSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvclByb3RvdHlwZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgaW50ZXJuYWxRdWVyeVNlbGVjdG9yID0gcmVxdWlyZShcIi4vc2VsZWN0b3JzXCIpLnF1ZXJ5U2VsZWN0b3I7XG5jb25zdCB3aGF0d2dVUkwgPSByZXF1aXJlKFwid2hhdHdnLXVybFwiKTtcblxuZXhwb3J0cy5kb2N1bWVudEJhc2VVUkwgPSBkb2N1bWVudCA9PiB7XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjZG9jdW1lbnQtYmFzZS11cmxcblxuICBjb25zdCBmaXJzdEJhc2UgPSBpbnRlcm5hbFF1ZXJ5U2VsZWN0b3IoZG9jdW1lbnQsIFwiYmFzZVtocmVmXVwiKTtcbiAgY29uc3QgZmFsbGJhY2tCYXNlVVJMID0gZXhwb3J0cy5mYWxsYmFja0Jhc2VVUkwoZG9jdW1lbnQpO1xuXG4gIGlmIChmaXJzdEJhc2UgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsbGJhY2tCYXNlVVJMO1xuICB9XG5cbiAgcmV0dXJuIGZyb3plbkJhc2VVUkwoZmlyc3RCYXNlLCBmYWxsYmFja0Jhc2VVUkwpO1xufTtcblxuZXhwb3J0cy5kb2N1bWVudEJhc2VVUkxTZXJpYWxpemVkID0gZG9jdW1lbnQgPT4ge1xuICByZXR1cm4gd2hhdHdnVVJMLnNlcmlhbGl6ZVVSTChleHBvcnRzLmRvY3VtZW50QmFzZVVSTChkb2N1bWVudCkpO1xufTtcblxuZXhwb3J0cy5mYWxsYmFja0Jhc2VVUkwgPSBkb2N1bWVudCA9PiB7XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjZmFsbGJhY2stYmFzZS11cmxcblxuICAvLyBVbmltcGxlbWVudGVkOiA8aWZyYW1lIHNyY2RvYz5cblxuICBpZiAoZG9jdW1lbnQuVVJMID09PSBcImFib3V0OmJsYW5rXCIgJiYgZG9jdW1lbnQuX2RlZmF1bHRWaWV3ICYmXG4gICAgICBkb2N1bWVudC5fZGVmYXVsdFZpZXcuX3BhcmVudCAhPT0gZG9jdW1lbnQuX2RlZmF1bHRWaWV3KSB7XG4gICAgcmV0dXJuIGV4cG9ydHMuZG9jdW1lbnRCYXNlVVJMKGRvY3VtZW50Ll9kZWZhdWx0Vmlldy5fcGFyZW50Ll9kb2N1bWVudCk7XG4gIH1cblxuICByZXR1cm4gZG9jdW1lbnQuX1VSTDtcbn07XG5cbmV4cG9ydHMucGFyc2VVUkxUb1Jlc3VsdGluZ1VSTFJlY29yZCA9ICh1cmwsIGRvY3VtZW50KSA9PiB7XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3Jlc29sdmUtYS11cmxcblxuICAvLyBFbmNvZGluZyBzdHVmZiBpZ25vcmVkOyBhbHdheXMgVVRGLTggZm9yIHVzLCBmb3Igbm93LlxuXG4gIGNvbnN0IGJhc2VVUkwgPSBleHBvcnRzLmRvY3VtZW50QmFzZVVSTChkb2N1bWVudCk7XG5cbiAgcmV0dXJuIHdoYXR3Z1VSTC5wYXJzZVVSTCh1cmwsIHsgYmFzZVVSTCB9KTtcbiAgLy8gVGhpcyByZXR1cm5zIHRoZSByZXN1bHRpbmcgVVJMIHJlY29yZDsgdG8gZ2V0IHRoZSByZXN1bHRpbmcgVVJMIHN0cmluZywganVzdCBzZXJpYWxpemUgaXQuXG59O1xuXG5mdW5jdGlvbiBmcm96ZW5CYXNlVVJMKGJhc2VFbGVtZW50LCBmYWxsYmFja0Jhc2VVUkwpIHtcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VtYW50aWNzLmh0bWwjZnJvemVuLWJhc2UtdXJsXG4gIC8vIFRoZSBzcGVjIGlzIGVhZ2VyIChzZXR0aW5nIHRoZSBmcm96ZW4gYmFzZSBVUkwgd2hlbiB0aGluZ3MgY2hhbmdlKTsgd2UgYXJlIGxhenkgKGdldHRpbmcgaXQgd2hlbiB3ZSBuZWVkIHRvKVxuXG4gIGNvbnN0IGJhc2VIcmVmQXR0cmlidXRlID0gYmFzZUVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTtcbiAgY29uc3QgcmVzdWx0ID0gd2hhdHdnVVJMLnBhcnNlVVJMKGJhc2VIcmVmQXR0cmlidXRlLCB7IGJhc2VVUkw6IGZhbGxiYWNrQmFzZVVSTCB9KTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gXCJmYWlsdXJlXCIgPyBmYWxsYmFja0Jhc2VVUkwgOiByZXN1bHQ7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IG5vZGVUeXBlID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZS5qc1wiKTtcbmNvbnN0IEZvY3VzRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0ZvY3VzRXZlbnQuanNcIik7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHMuanNcIik7XG5jb25zdCBpc0Rpc2FibGVkID0gcmVxdWlyZShcIi4vZm9ybS1jb250cm9scy5qc1wiKS5pc0Rpc2FibGVkO1xuXG5jb25zdCBmb2N1c2FibGVGb3JtRWxlbWVudHMgPSBuZXcgU2V0KFtcImlucHV0XCIsIFwic2VsZWN0XCIsIFwidGV4dGFyZWFcIiwgXCJidXR0b25cIl0pO1xuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbnRlcmFjdGlvbi5odG1sI2ZvY3VzYWJsZS1hcmVhLCBidXQgYWxzbyBzb21lIG9mXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbnRlcmFjdGlvbi5odG1sI2ZvY3VzaW5nLXN0ZXBzOiBlLmcuLCBEb2N1bWVudHMgYXJlIG5vdCBhY3R1YWxseSBmb2N1c2FibGVcbi8vIGFyZWFzLCBidXQgdGhlaXIgdmlld3BvcnRzIGFyZSwgYW5kIHRoZSBmaXJzdCBzdGVwIG9mIHRoZSBsYXR0ZXIgYWxnb3JpdGhtIHRyYW5zbGF0ZXMgRG9jdW1lbnRzIHRvIHRoZWlyIHZpZXdwb3J0cy5cbi8vIEFuZCBhbHNvIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2ludGVyYWN0aW9uLmh0bWwjc3BlY2lhbGx5LWZvY3VzYWJsZSFcbmV4cG9ydHMuaXNGb2N1c2FibGVBcmVhRWxlbWVudCA9IGVsSW1wbCA9PiB7XG4gIGlmICghZWxJbXBsLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0VmlldyAmJiAhZWxJbXBsLl9kZWZhdWx0Vmlldykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChlbEltcGwuX25vZGVUeXBlID09PSBub2RlVHlwZS5ET0NVTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIU51bWJlci5pc05hTihwYXJzZUludChlbEltcGwuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIikpKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGVsSW1wbC5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIikge1xuICAgIGlmIChlbEltcGwuX2xvY2FsTmFtZSA9PT0gXCJpZnJhbWVcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGVsSW1wbC5fbG9jYWxOYW1lID09PSBcImFcIiAmJiBlbEltcGwuaGFzQXR0cmlidXRlKFwiaHJlZlwiKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGZvY3VzYWJsZUZvcm1FbGVtZW50cy5oYXMoZWxJbXBsLl9sb2NhbE5hbWUpICYmICFpc0Rpc2FibGVkKGVsSW1wbCkpIHtcbiAgICAgIGlmIChlbEltcGwuX2xvY2FsTmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsSW1wbC50eXBlID09PSBcImhpZGRlblwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNmaXJlLWEtZm9jdXMtZXZlbnQgcGx1cyB0aGUgc3RlcHMgb2Zcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2ludGVyYWN0aW9uLmh0bWwjZm9jdXMtdXBkYXRlLXN0ZXBzIHRoYXQgYWRqdXN0IERvY3VtZW50cyB0byBXaW5kb3dzXG5leHBvcnRzLmZpcmVGb2N1c0V2ZW50V2l0aFRhcmdldEFkanVzdG1lbnQgPSAobmFtZSwgdGFyZ2V0LCByZWxhdGVkVGFyZ2V0KSA9PiB7XG4gIGlmICh0YXJnZXQgPT09IG51bGwpIHtcbiAgICAvLyBFLmcuIGZpcmluZyBibHVyIHdpdGggbm90aGluZyBwcmV2aW91c2x5IGZvY3VzZWQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZXZlbnQgPSBGb2N1c0V2ZW50LmNyZWF0ZUltcGwoXG4gICAgW25hbWUsIHtcbiAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICByZWxhdGVkVGFyZ2V0LFxuICAgICAgdmlldzogdGFyZ2V0Ll9vd25lckRvY3VtZW50Ll9kZWZhdWx0VmlldyxcbiAgICAgIGRldGFpbDogMFxuICAgIH1dLFxuICAgIHtcbiAgICAgIGlzVHJ1c3RlZDogdHJ1ZVxuICAgIH1cbiAgKTtcblxuICBpZiAodGFyZ2V0Ll9kZWZhdWx0Vmlldykge1xuICAgIHRhcmdldCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRhcmdldC5fZGVmYXVsdFZpZXcpO1xuICB9XG5cbiAgLy8gX2Rpc3BhdGNoIGFsbG93cyBzZXR0aW5nIGlzVHJ1c3RlZFxuICB0YXJnZXQuX2Rpc3BhdGNoKGV2ZW50KTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgeyBpc1ZhbGlkU2ltcGxlQ29sb3IsIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nQVNDSUlXaGl0ZXNwYWNlLCBzdHJpcE5ld2xpbmVzIH0gPSByZXF1aXJlKFwiLi9zdHJpbmdzXCIpO1xuXG5jb25zdCBzdWJtaXR0YWJsZUxvY2FsTmFtZXMgPSBuZXcgU2V0KFtcImJ1dHRvblwiLCBcImlucHV0XCIsIFwia2V5Z2VuXCIsIFwib2JqZWN0XCIsIFwic2VsZWN0XCIsIFwidGV4dGFyZWFcIl0pO1xuXG5leHBvcnRzLmlzRGlzYWJsZWQgPSBmb3JtQ29udHJvbCA9PiB7XG4gIGlmIChmb3JtQ29udHJvbC5sb2NhbE5hbWUgPT09IFwiYnV0dG9uXCIgfHwgZm9ybUNvbnRyb2wubG9jYWxOYW1lID09PSBcImlucHV0XCIgfHwgZm9ybUNvbnRyb2wubG9jYWxOYW1lID09PSBcInNlbGVjdFwiIHx8XG4gICAgICBmb3JtQ29udHJvbC5sb2NhbE5hbWUgPT09IFwidGV4dGFyZWFcIikge1xuICAgIGlmIChmb3JtQ29udHJvbC5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgbGV0IGUgPSBmb3JtQ29udHJvbC5wYXJlbnROb2RlO1xuICB3aGlsZSAoZSkge1xuICAgIGlmIChlLmxvY2FsTmFtZSA9PT0gXCJmaWVsZHNldFwiICYmIGUuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikpIHtcbiAgICAgIGNvbnN0IGZpcnN0TGVnZW5kRWxlbWVudENoaWxkID0gZS5xdWVyeVNlbGVjdG9yKFwibGVnZW5kXCIpO1xuICAgICAgaWYgKCFmaXJzdExlZ2VuZEVsZW1lbnRDaGlsZCB8fCAhZmlyc3RMZWdlbmRFbGVtZW50Q2hpbGQuY29udGFpbnMoZm9ybUNvbnRyb2wpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBlID0gZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5pc1N1Ym1pdHRhYmxlID0gZm9ybUNvbnRyb2wgPT4ge1xuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LXN1Ym1pdFxuICByZXR1cm4gc3VibWl0dGFibGVMb2NhbE5hbWVzLmhhcyhmb3JtQ29udHJvbC5sb2NhbE5hbWUpO1xufTtcblxuZXhwb3J0cy5pc0J1dHRvbiA9IGZvcm1Db250cm9sID0+IHtcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWJ1dHRvblxuICByZXR1cm4gZm9ybUNvbnRyb2wudHlwZSA9PT0gXCJidXR0b25cIiB8fCBmb3JtQ29udHJvbC50eXBlID09PSBcInN1Ym1pdFwiIHx8IGZvcm1Db250cm9sLnR5cGUgPT09IFwicmVzZXRcIiB8fFxuICAgICAgICAgZm9ybUNvbnRyb2wudHlwZSA9PT0gXCJpbWFnZVwiIHx8IGZvcm1Db250cm9sLmxvY2FsTmFtZSA9PT0gXCJidXR0b25cIjtcbn07XG5cbmV4cG9ydHMubm9ybWFsaXplVG9DUkxGID0gc3RyaW5nID0+IHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXHIoW15cXG5dKS9nLCBcIlxcclxcbiQxXCIpXG4gICAgICAgICAgICAgICAucmVwbGFjZSgvXFxyJC8sIFwiXFxyXFxuXCIpXG4gICAgICAgICAgICAgICAucmVwbGFjZSgvKFteXFxyXSlcXG4vZywgXCIkMVxcclxcblwiKVxuICAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXG4vLCBcIlxcclxcblwiKTtcbn07XG5cbmV4cG9ydHMuc2FuaXRpemVWYWx1ZUJ5VHlwZSA9IChpbnB1dCwgdmFsKSA9PiB7XG4gIHN3aXRjaCAoaW5wdXQudHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSBcInBhc3N3b3JkXCI6XG4gICAgY2FzZSBcInNlYXJjaFwiOlxuICAgIGNhc2UgXCJ0ZWxcIjpcbiAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgdmFsID0gc3RyaXBOZXdsaW5lcyh2YWwpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiY29sb3JcIjpcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29sb3Itc3RhdGUtKHR5cGU9Y29sb3IpOnZhbHVlLXNhbml0aXphdGlvbi1hbGdvcml0aG1cbiAgICAgIHZhbCA9IGlzVmFsaWRTaW1wbGVDb2xvcih2YWwpID8gdmFsLnRvTG93ZXJDYXNlKCkgOiBcIiMwMDAwMDBcIjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImVtYWlsXCI6XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2UtbWFpbC1zdGF0ZS0odHlwZT1lbWFpbCk6dmFsdWUtc2FuaXRpemF0aW9uLWFsZ29yaXRobVxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNlLW1haWwtc3RhdGUtKHR5cGU9ZW1haWwpOnZhbHVlLXNhbml0aXphdGlvbi1hbGdvcml0aG0tMlxuICAgICAgaWYgKGlucHV0Lmhhc0F0dHJpYnV0ZShcIm11bHRpcGxlXCIpKSB7XG4gICAgICAgIHZhbCA9IHZhbC5zcGxpdChcIixcIikubWFwKHRva2VuID0+IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nQVNDSUlXaGl0ZXNwYWNlKHRva2VuKSkuam9pbihcIixcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBzdHJpcE5ld2xpbmVzKHZhbCk7XG4gICAgICAgIHZhbCA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nQVNDSUlXaGl0ZXNwYWNlKHZhbCk7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJ1cmxcIjpcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjdXJsLXN0YXRlLSh0eXBlPXVybCk6dmFsdWUtc2FuaXRpemF0aW9uLWFsZ29yaXRobVxuICAgICAgdmFsID0gc3RyaXBOZXdsaW5lcyh2YWwpO1xuICAgICAgdmFsID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdBU0NJSVdoaXRlc3BhY2UodmFsKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gVE9ETzogU2FuaXRpemUgdmFsdWVzIGZvciBkYXRlLCBkYXRldGltZS1sb2NhbCwgbW9udGgsIG51bWJlciwgcmFuZ2UsIHRpbWUgYW5kIHdlZWsuXG5cbiAgcmV0dXJuIHZhbDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IFN5bWJvbFRyZWUgPSByZXF1aXJlKFwic3ltYm9sLXRyZWVcIik7XG5cbmV4cG9ydHMuY2xvbmluZ1N0ZXBzID0gU3ltYm9sKFwiY2xvbmluZyBzdGVwc1wiKTtcbmV4cG9ydHMubG9jYXRpb25JbmZvID0gU3ltYm9sKFwibG9jYXRpb24gaW5mb1wiKTtcblxuLy8gVE9ETzogdGhlIG1hbnkgdW5kZXJzY29yZS1wcmVmaXhlZCBob29rcyBzaG91bGQgbW92ZSBoZXJlXG4vLyBFLmcuIF9hdHRyTW9kaWZpZWQgKHdoaWNoIG1heWJlIHNob3VsZCBiZSBzcGxpdCBpbnRvIGl0cyBwZXItc3BlYyB2YXJpYW50cylcblxuLyoqXG4gKiBUaGlzIFN5bWJvbFRyZWUgaXMgdXNlZCB0byBidWlsZCB0aGUgdHJlZSBmb3IgYWxsIE5vZGUgaW4gYSBkb2N1bWVudFxuICovXG5leHBvcnRzLmRvbVN5bWJvbFRyZWUgPSBuZXcgU3ltYm9sVHJlZShcIkRPTSBTeW1ib2xUcmVlXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gb3JkZXJlZFNldFBhcnNlcihpbnB1dCkge1xuICByZXR1cm4gbmV3IFNldChpbnB1dC5zcGxpdCgvW1xcdFxcblxcZlxcciBdKy8pLmZpbHRlcihCb29sZWFuKSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNldmVudC1oYW5kbGVycy1vbi1lbGVtZW50cywtZG9jdW1lbnQtb2JqZWN0cywtYW5kLXdpbmRvdy1vYmplY3RzXG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFNldChbXCJvbmJsdXJcIiwgXCJvbmVycm9yXCIsIFwib25mb2N1c1wiLCBcIm9ubG9hZFwiLCBcIm9ucmVzaXplXCIsIFwib25zY3JvbGxcIiwgXCJvbmFmdGVycHJpbnRcIixcbiAgXCJvbmJlZm9yZXByaW50XCIsIFwib25iZWZvcmV1bmxvYWRcIiwgXCJvbmhhc2hjaGFuZ2VcIiwgXCJvbmxhbmd1YWdlY2hhbmdlXCIsIFwib25tZXNzYWdlXCIsIFwib25vZmZsaW5lXCIsIFwib25vbmxpbmVcIixcbiAgXCJvbnBhZ2VoaWRlXCIsIFwib25wYWdlc2hvd1wiLCBcIm9ucG9wc3RhdGVcIiwgXCJvbnN0b3JhZ2VcIiwgXCJvbnVubG9hZFwiXSk7XG5cbi8vIGxldmVsMi9odG1sIHNldHMgdXAgc2V0dGVycy9nZXR0ZXJzIG9uIEhUTUxCb2R5RWxlbWVudCB0aGF0IHByb3h5IHRvIHRoZSB3aW5kb3cgKHNldHRpbmcgZGF0YSBwcm9wZXJ0aWVzIHRoZXJlKVxuLy8gbGV2ZWwxL2NvcmUgc2V0cyB1cCBzbyB0aGF0IG1vZGlmeWluZyB0aGUgYXBwcm9wcmlhdGUgYXR0cmlidXRlcyBvbiBib2R5IGVsZW1lbnRzIHdpbGwgZm9yd2FyZCB0byBzZXR0aW5nIG9uXG4vLyB0aGUgd2luZG93LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBgdGhpc2AuXG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKFwidXRpbFwiKTtcbmNvbnN0IEVycm9yRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0Vycm9yRXZlbnRcIik7XG5cbmNvbnN0IGVycm9yUmVwb3J0aW5nTW9kZSA9IFN5bWJvbChcImVycm9yIHJlcG9ydGluZyBtb2RlXCIpO1xuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjcmVwb3J0LXRoZS1lcnJvclxuLy8gT21pdHMgc2NyaXB0IHBhcmFtZXRlciBhbmQgYW55IGNoZWNrIGZvciBtdXRlZCBlcnJvcnM7IHRha2VzIGVycm9yIG9iamVjdCwgbWVzc2FnZSwgYW5kIGxvY2F0aW9uIGFzIHBhcmFtcywgdW5saWtlXG4vLyB0aGUgc3BlYy4gUmV0dXJucyB3aGV0aGVyIHRoZSBldmVudCB3YXMgaGFuZGxlZCBvciBub3QuXG5mdW5jdGlvbiByZXBvcnRBbkVycm9yKGxpbmUsIGNvbCwgdGFyZ2V0LCBlcnJvck9iamVjdCwgbWVzc2FnZSwgbG9jYXRpb24pIHtcbiAgaWYgKHRhcmdldFtlcnJvclJlcG9ydGluZ01vZGVdKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdGFyZ2V0W2Vycm9yUmVwb3J0aW5nTW9kZV0gPSB0cnVlO1xuXG4gIC8vIFRPRE8gRXZlbnRzOiB1c2UgY29uc3RydWN0b3IgZGlyZWN0bHksIG9uY2UgdGhleSBhcmUgbm8gbG9uZ2VyIHRpZWQgdG8gYSB3aW5kb3cuXG4gIGNvbnN0IGV2ZW50ID0gRXJyb3JFdmVudC5jcmVhdGVJbXBsKFtcImVycm9yXCIsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgIG1lc3NhZ2UsXG4gICAgZmlsZW5hbWU6IGxvY2F0aW9uLFxuICAgIGxpbmVubzogbGluZSxcbiAgICBjb2xubzogY29sLFxuICAgIGVycm9yOiBlcnJvck9iamVjdFxuICB9XSk7XG5cbiAgdHJ5IHtcbiAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZmluYWxseSB7XG4gICAgdGFyZ2V0W2Vycm9yUmVwb3J0aW5nTW9kZV0gPSBmYWxzZTtcbiAgICByZXR1cm4gZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcG9ydEV4Y2VwdGlvbih3aW5kb3csIGVycm9yLCBmaWxlbmFtZUhpbnQpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGdpdmUgZ29vZCByZXN1bHRzIG9uIHJlYWwgRXJyb3Igb2JqZWN0cyB3aXRoIHN0YWNrczsgcG9vciBvbmVzIG90aGVyd2lzZVxuXG4gIGNvbnN0IHN0YWNrID0gZXJyb3IgJiYgZXJyb3Iuc3RhY2s7XG4gIGNvbnN0IGxpbmVzID0gc3RhY2sgJiYgc3RhY2suc3BsaXQoXCJcXG5cIik7XG5cbiAgLy8gRmluZCB0aGUgZmlyc3QgbGluZSB0aGF0IG1hdGNoZXM7IGltcG9ydGFudCBmb3IgbXVsdGktbGluZSBtZXNzYWdlc1xuICBsZXQgcGllY2VzO1xuICBpZiAobGluZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aCAmJiAhcGllY2VzOyArK2kpIHtcbiAgICAgIHBpZWNlcyA9IGxpbmVzW2ldLm1hdGNoKC9hdCAoPzooLispXFxzKyk/XFwoPyg/OiguKz8pOihcXGQrKTooXFxkKyl8KFteKV0rKSlcXCk/Lyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmlsZU5hbWUgPSBwaWVjZXMgJiYgcGllY2VzWzJdIHx8IGZpbGVuYW1lSGludCB8fCB3aW5kb3cuX2RvY3VtZW50LlVSTDtcbiAgY29uc3QgbGluZU51bWJlciA9IHBpZWNlcyAmJiBwYXJzZUludChwaWVjZXNbM10pIHx8IDA7XG4gIGNvbnN0IGNvbHVtbk51bWJlciA9IHBpZWNlcyAmJiBwYXJzZUludChwaWVjZXNbNF0pIHx8IDA7XG5cbiAgY29uc3QgaGFuZGxlZCA9IHJlcG9ydEFuRXJyb3IobGluZU51bWJlciwgY29sdW1uTnVtYmVyLCB3aW5kb3csIGVycm9yLCBlcnJvci5tZXNzYWdlLCBmaWxlTmFtZSk7XG5cbiAgaWYgKCFoYW5kbGVkKSB7XG4gICAgY29uc3QgZXJyb3JTdHJpbmcgPSBzaG91bGRCZURpc3BsYXllZEFzRXJyb3IoZXJyb3IpID8gYFske2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9XWAgOiB1dGlsLmluc3BlY3QoZXJyb3IpO1xuICAgIGNvbnN0IGpzZG9tRXJyb3IgPSBuZXcgRXJyb3IoYFVuY2F1Z2h0ICR7ZXJyb3JTdHJpbmd9YCk7XG4gICAganNkb21FcnJvci5kZXRhaWwgPSBlcnJvcjtcbiAgICBqc2RvbUVycm9yLnR5cGUgPSBcInVuaGFuZGxlZCBleGNlcHRpb25cIjtcblxuICAgIHdpbmRvdy5fdmlydHVhbENvbnNvbGUuZW1pdChcImpzZG9tRXJyb3JcIiwganNkb21FcnJvcik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNob3VsZEJlRGlzcGxheWVkQXNFcnJvcih4KSB7XG4gIHJldHVybiB4Lm5hbWUgJiYgeC5tZXNzYWdlICE9PSB1bmRlZmluZWQgJiYgeC5zdGFjaztcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBud21hdGNoZXIgPSByZXF1aXJlKFwibndtYXRjaGVyL3NyYy9ud21hdGNoZXItbm9xc2FcIik7XG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4vaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5cbi8vIEludGVybmFsIG1ldGhvZCBzbyB5b3UgZG9uJ3QgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBwdWJsaWMgQVBJXG5leHBvcnRzLnF1ZXJ5U2VsZWN0b3IgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgc2VsZWN0b3JzKSB7XG4gIGlmICghZG9tU3ltYm9sVHJlZS5oYXNDaGlsZHJlbihwYXJlbnROb2RlKSB8fFxuICAgICAgKHBhcmVudE5vZGUgPT09IHBhcmVudE5vZGUuX293bmVyRG9jdW1lbnQgJiYgIXBhcmVudE5vZGUuZG9jdW1lbnRFbGVtZW50KSkge1xuICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkIHRoZSBleHBsb3Npb24gdGhhdCBvY2N1cnMgaWYgeW91IHRyeSB0byBhZGQgbndtYXRjaGVyIHRvIGEgZG9jdW1lbnQgdGhhdCBpcyBub3QgeWV0XG4gICAgLy8gaW5pdGlhbGl6ZWQuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYWRkTndtYXRjaGVyKHBhcmVudE5vZGUpLmZpcnN0KHNlbGVjdG9ycywgaWRsVXRpbHMud3JhcHBlckZvckltcGwocGFyZW50Tm9kZSkpO1xufTtcblxuLy8gbndtYXRjaGVyIGdldHMgYGRvY3VtZW50LmRvY3VtZW50RWxlbWVudGAgYXQgY3JlYXRpb24tdGltZSwgc28gd2UgaGF2ZSB0byBpbml0aWFsaXplIGxhemlseSwgc2luY2UgaW4gdGhlIGluaXRpYWxcbi8vIHN0YWdlcyBvZiBEb2N1bWVudCBpbml0aWFsaXphdGlvbiwgdGhlcmUgaXMgbm8gZG9jdW1lbnRFbGVtZW50IHByZXNlbnQgeWV0LlxuZnVuY3Rpb24gYWRkTndtYXRjaGVyKHBhcmVudE5vZGUpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBwYXJlbnROb2RlLl9vd25lckRvY3VtZW50O1xuXG4gIGlmICghZG9jdW1lbnQuX253bWF0Y2hlcikge1xuICAgIGRvY3VtZW50Ll9ud21hdGNoZXIgPSBud21hdGNoZXIoeyBkb2N1bWVudCB9KTtcbiAgICBkb2N1bWVudC5fbndtYXRjaGVyLmNvbmZpZ3VyZSh7IFVOSVFVRV9JRDogZmFsc2UgfSk7XG4gIH1cblxuICByZXR1cm4gZG9jdW1lbnQuX253bWF0Y2hlcjtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtbmV3bGluZXNcbmV4cG9ydHMuc3RyaXBOZXdsaW5lcyA9IHMgPT4ge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bXFxuXFxyXSsvZywgXCJcIik7XG59O1xuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtbGVhZGluZy1hbmQtdHJhaWxpbmctYXNjaWktd2hpdGVzcGFjZVxuZXhwb3J0cy5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ0FTQ0lJV2hpdGVzcGFjZSA9IHMgPT4ge1xuICByZXR1cm4gcy5yZXBsYWNlKC9eWyBcXHRcXG5cXGZcXHJdKy8sIFwiXCIpLnJlcGxhY2UoL1sgXFx0XFxuXFxmXFxyXSskLywgXCJcIik7XG59O1xuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2VcbmV4cG9ydHMuc3RyaXBBbmRDb2xsYXBzZUFTQ0lJV2hpdGVzcGFjZSA9IHMgPT4ge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bIFxcdFxcblxcZlxccl0rL2csIFwiIFwiKS5yZXBsYWNlKC9eWyBcXHRcXG5cXGZcXHJdKy8sIFwiXCIpLnJlcGxhY2UoL1sgXFx0XFxuXFxmXFxyXSskLywgXCJcIik7XG59O1xuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0cnVjdHVyZS5odG1sI3ZhbGlkLXNpbXBsZS1jb2xvdXJcbmV4cG9ydHMuaXNWYWxpZFNpbXBsZUNvbG9yID0gcyA9PiB7XG4gIHJldHVybiAvXiNbYS1mQS1GXFxkXXs2fSQvLnRlc3Qocyk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBjc3NvbSA9IHJlcXVpcmUoXCJjc3NvbVwiKTtcbmNvbnN0IHdoYXR3Z0VuY29kaW5nID0gcmVxdWlyZShcIndoYXR3Zy1lbmNvZGluZ1wiKTtcbmNvbnN0IHdoYXR3Z1VSTCA9IHJlcXVpcmUoXCJ3aGF0d2ctdXJsXCIpO1xuY29uc3QgcmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKFwiLi4vLi4vYnJvd3Nlci9yZXNvdXJjZS1sb2FkZXJcIik7XG5cbmV4cG9ydHMuZmV0Y2hTdHlsZXNoZWV0ID0gKGVsZW1lbnRJbXBsLCB1cmxTdHJpbmcsIHNoZWV0KSA9PiB7XG4gIGNvbnN0IHBhcnNlZFVSTCA9IHdoYXR3Z1VSTC5wYXJzZVVSTCh1cmxTdHJpbmcpO1xuICByZXR1cm4gZmV0Y2hTdHlsZXNoZWV0SW50ZXJuYWwoZWxlbWVudEltcGwsIHVybFN0cmluZywgcGFyc2VkVVJMLCBzaGVldCk7XG59O1xuXG5leHBvcnRzLmV2YWx1YXRlU3R5bGVzaGVldCA9IChlbGVtZW50SW1wbCwgZGF0YSwgc2hlZXQsIGJhc2VVUkwpID0+IHtcbiAgbGV0IG5ld1N0eWxlU2hlZXQ7XG4gIHRyeSB7XG4gICAgbmV3U3R5bGVTaGVldCA9IGNzc29tLnBhcnNlKGRhdGEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGVsZW1lbnRJbXBsLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0Vmlldykge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJDb3VsZCBub3QgcGFyc2UgQ1NTIHN0eWxlc2hlZXRcIik7XG4gICAgICBlcnJvci5kZXRhaWwgPSBkYXRhO1xuICAgICAgZXJyb3IudHlwZSA9IFwiY3NzIHBhcnNpbmdcIjtcblxuICAgICAgZWxlbWVudEltcGwuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3Ll92aXJ0dWFsQ29uc29sZS5lbWl0KFwianNkb21FcnJvclwiLCBlcnJvcik7XG4gICAgfVxuXG4gICAgZWxlbWVudEltcGwuX293bmVyRG9jdW1lbnQuc3R5bGVTaGVldHMucHVzaChzaGVldCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3BsaWNlQXJncyA9IG5ld1N0eWxlU2hlZXQuY3NzUnVsZXM7XG4gIHNwbGljZUFyZ3MudW5zaGlmdCgwLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KHNoZWV0LmNzc1J1bGVzLCBzcGxpY2VBcmdzKTtcblxuICBzY2FuRm9ySW1wb3J0UnVsZXMoZWxlbWVudEltcGwsIHNoZWV0LmNzc1J1bGVzLCBiYXNlVVJMKTtcblxuICBlbGVtZW50SW1wbC5fb3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcbn07XG5cbmZ1bmN0aW9uIGZldGNoU3R5bGVzaGVldEludGVybmFsKGVsZW1lbnRJbXBsLCB1cmxTdHJpbmcsIHBhcnNlZFVSTCwgc2hlZXQpIHtcbiAgbGV0IGRlZmF1bHRFbmNvZGluZyA9IGVsZW1lbnRJbXBsLl9vd25lckRvY3VtZW50Ll9lbmNvZGluZztcbiAgaWYgKGVsZW1lbnRJbXBsLmxvY2FsTmFtZSA9PT0gXCJsaW5rXCIgJiYgZWxlbWVudEltcGwuaGFzQXR0cmlidXRlKFwiY2hhcnNldFwiKSkge1xuICAgIGRlZmF1bHRFbmNvZGluZyA9IHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKGVsZW1lbnRJbXBsLmdldEF0dHJpYnV0ZShcImNoYXJzZXRcIikpO1xuICB9XG5cbiAgcmVzb3VyY2VMb2FkZXIubG9hZChlbGVtZW50SW1wbCwgdXJsU3RyaW5nLCB7IGRlZmF1bHRFbmNvZGluZyB9LCBkYXRhID0+IHtcbiAgICAvLyBUT0RPOiBNSU1FIHR5cGUgY2hlY2tpbmc/XG4gICAgZXhwb3J0cy5ldmFsdWF0ZVN0eWxlc2hlZXQoZWxlbWVudEltcGwsIGRhdGEsIHNoZWV0LCBwYXJzZWRVUkwpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2NhbkZvckltcG9ydFJ1bGVzKGVsZW1lbnRJbXBsLCBjc3NSdWxlcywgYmFzZVVSTCkge1xuICBpZiAoIWNzc1J1bGVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjc3NSdWxlcy5sZW5ndGg7ICsraSkge1xuICAgIGlmIChjc3NSdWxlc1tpXS5jc3NSdWxlcykge1xuICAgICAgLy8gQG1lZGlhIHJ1bGU6IGtlZXAgc2VhcmNoaW5nIGluc2lkZSBpdC5cbiAgICAgIHNjYW5Gb3JJbXBvcnRSdWxlcyhlbGVtZW50SW1wbCwgY3NzUnVsZXNbaV0uY3NzUnVsZXMsIGJhc2VVUkwpO1xuICAgIH0gZWxzZSBpZiAoY3NzUnVsZXNbaV0uaHJlZikge1xuICAgICAgLy8gQGltcG9ydCBydWxlOiBmZXRjaCB0aGUgcmVzb3VyY2UgYW5kIGV2YWx1YXRlIGl0LlxuICAgICAgLy8gU2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNjc3MtaW1wb3J0LXJ1bGVcbiAgICAgIC8vICAgICBJZiBsb2FkaW5nIG9mIHRoZSBzdHlsZSBzaGVldCBmYWlscyBpdHMgY3NzUnVsZXMgbGlzdCBpcyBzaW1wbHlcbiAgICAgIC8vICAgICBlbXB0eS4gSS5lLiBhbiBAaW1wb3J0IHJ1bGUgYWx3YXlzIGhhcyBhbiBhc3NvY2lhdGVkIHN0eWxlIHNoZWV0LlxuICAgICAgY29uc3QgcGFyc2VkID0gd2hhdHdnVVJMLnBhcnNlVVJMKGNzc1J1bGVzW2ldLmhyZWYsIHsgYmFzZVVSTCB9KTtcbiAgICAgIGlmIChwYXJzZWQgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IGVsZW1lbnRJbXBsLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0VmlldztcbiAgICAgICAgaWYgKHdpbmRvdykge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgQ1NTIEBpbXBvcnQgVVJMICR7Y3NzUnVsZXNbaV0uaHJlZn0gcmVsYXRpdmUgdG8gYmFzZSBVUkwgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFwiJHt3aGF0d2dVUkwuc2VyaWFsaXplVVJMKGJhc2VVUkwpfVwiYCk7XG4gICAgICAgICAgZXJyb3IudHlwZSA9IFwiY3NzIEBpbXBvcnQgVVJMIHBhcnNpbmdcIjtcbiAgICAgICAgICB3aW5kb3cuX3ZpcnR1YWxDb25zb2xlLmVtaXQoXCJqc2RvbUVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmV0Y2hTdHlsZXNoZWV0SW50ZXJuYWwoZWxlbWVudEltcGwsIHdoYXR3Z1VSTC5zZXJpYWxpemVVUkwocGFyc2VkKSwgcGFyc2VkLCBlbGVtZW50SW1wbC5zaGVldCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcblxuLy8gQWxsIHRoZXNlIG9wZXJhdGUgb24gYW5kIHJldHVybiBpbXBscywgbm90IHdyYXBwZXJzIVxuXG5leHBvcnRzLmNsb3Nlc3QgPSAoZSwgbG9jYWxOYW1lKSA9PiB7XG4gIHdoaWxlIChlKSB7XG4gICAgaWYgKGUubG9jYWxOYW1lID09PSBsb2NhbE5hbWUpIHtcbiAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgICBlID0gZG9tU3ltYm9sVHJlZS5wYXJlbnQoZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydHMuY2hpbGRyZW5CeUhUTUxMb2NhbE5hbWUgPSAocGFyZW50LCBsb2NhbE5hbWUpID0+IHtcbiAgcmV0dXJuIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5Ub0FycmF5KHBhcmVudCwgeyBmaWx0ZXIobm9kZSkge1xuICAgIHJldHVybiBub2RlLl9sb2NhbE5hbWUgPT09IGxvY2FsTmFtZSAmJiBub2RlLl9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuICB9IH0pO1xufTtcblxuZXhwb3J0cy5kZXNjZW5kYW50c0J5SFRNTExvY2FsTmFtZSA9IChwYXJlbnQsIGxvY2FsTmFtZSkgPT4ge1xuICByZXR1cm4gZG9tU3ltYm9sVHJlZS50cmVlVG9BcnJheShwYXJlbnQsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5fbG9jYWxOYW1lID09PSBsb2NhbE5hbWUgJiYgbm9kZS5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiAmJiBub2RlICE9PSBwYXJlbnQ7XG4gIH0gfSk7XG59O1xuXG5leHBvcnRzLmNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lcyA9IChwYXJlbnQsIGxvY2FsTmFtZXNTZXQpID0+IHtcbiAgcmV0dXJuIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5Ub0FycmF5KHBhcmVudCwgeyBmaWx0ZXIobm9kZSkge1xuICAgIHJldHVybiBsb2NhbE5hbWVzU2V0Lmhhcyhub2RlLl9sb2NhbE5hbWUpICYmIG5vZGUuX25hbWVzcGFjZVVSSSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG4gIH0gfSk7XG59O1xuXG5leHBvcnRzLmRlc2NlbmRhbnRzQnlIVE1MTG9jYWxOYW1lcyA9IChwYXJlbnQsIGxvY2FsTmFtZXNTZXQpID0+IHtcbiAgcmV0dXJuIGRvbVN5bWJvbFRyZWUudHJlZVRvQXJyYXkocGFyZW50LCB7IGZpbHRlcihub2RlKSB7XG4gICAgcmV0dXJuIGxvY2FsTmFtZXNTZXQuaGFzKG5vZGUuX2xvY2FsTmFtZSkgJiZcbiAgICAgICAgICAgbm9kZS5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiAmJlxuICAgICAgICAgICBub2RlICE9PSBwYXJlbnQ7XG4gIH0gfSk7XG59O1xuXG5leHBvcnRzLmZpcnN0Q2hpbGRXaXRoSFRNTExvY2FsTmFtZSA9IChwYXJlbnQsIGxvY2FsTmFtZSkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcihwYXJlbnQpO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGl0ZXJhdG9yKSB7XG4gICAgaWYgKGNoaWxkLl9sb2NhbE5hbWUgPT09IGxvY2FsTmFtZSAmJiBjaGlsZC5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIikge1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydHMuZmlyc3RDaGlsZFdpdGhIVE1MTG9jYWxOYW1lcyA9IChwYXJlbnQsIGxvY2FsTmFtZXNTZXQpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSBkb21TeW1ib2xUcmVlLmNoaWxkcmVuSXRlcmF0b3IocGFyZW50KTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBpdGVyYXRvcikge1xuICAgIGlmIChsb2NhbE5hbWVzU2V0LmhhcyhjaGlsZC5fbG9jYWxOYW1lKSAmJiBjaGlsZC5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIikge1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydHMuZmlyc3REZXNjZW5kYW50V2l0aEhUTUxMb2NhbE5hbWUgPSAocGFyZW50LCBsb2NhbE5hbWUpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSBkb21TeW1ib2xUcmVlLnRyZWVJdGVyYXRvcihwYXJlbnQpO1xuICBmb3IgKGNvbnN0IGRlc2NlbmRhbnQgb2YgaXRlcmF0b3IpIHtcbiAgICBpZiAoZGVzY2VuZGFudC5fbG9jYWxOYW1lID09PSBsb2NhbE5hbWUgJiYgZGVzY2VuZGFudC5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIikge1xuICAgICAgcmV0dXJuIGRlc2NlbmRhbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCB4bnYgPSByZXF1aXJlKFwieG1sLW5hbWUtdmFsaWRhdG9yXCIpO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuXG4vLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI3ZhbGlkYXRlXG5cbmV4cG9ydHMubmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHhudi5uYW1lKG5hbWUpO1xuICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9DSEFSQUNURVJfRVJSLFxuICAgICAgXCJcXFwiXCIgKyBuYW1lICsgXCJcXFwiIGRpZCBub3QgbWF0Y2ggdGhlIE5hbWUgcHJvZHVjdGlvbjogXCIgKyByZXN1bHQuZXJyb3IpO1xuICB9XG59O1xuXG5leHBvcnRzLnFuYW1lID0gZnVuY3Rpb24gKHFuYW1lKSB7XG4gIGV4cG9ydHMubmFtZShxbmFtZSk7XG5cbiAgY29uc3QgcmVzdWx0ID0geG52LnFuYW1lKHFuYW1lKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5BTUVTUEFDRV9FUlIsXG4gICAgICBcIlxcXCJcIiArIHFuYW1lICsgXCJcXFwiIGRpZCBub3QgbWF0Y2ggdGhlIFFOYW1lIHByb2R1Y3Rpb246IFwiICsgcmVzdWx0LmVycm9yKTtcbiAgfVxufTtcblxuZXhwb3J0cy52YWxpZGF0ZUFuZEV4dHJhY3QgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBxdWFsaWZpZWROYW1lKSB7XG4gIGlmIChuYW1lc3BhY2UgPT09IFwiXCIpIHtcbiAgICBuYW1lc3BhY2UgPSBudWxsO1xuICB9XG5cbiAgZXhwb3J0cy5xbmFtZShxdWFsaWZpZWROYW1lKTtcblxuICBsZXQgcHJlZml4ID0gbnVsbDtcbiAgbGV0IGxvY2FsTmFtZSA9IHF1YWxpZmllZE5hbWU7XG5cbiAgY29uc3QgY29sb25JbmRleCA9IHF1YWxpZmllZE5hbWUuaW5kZXhPZihcIjpcIik7XG4gIGlmIChjb2xvbkluZGV4ICE9PSAtMSkge1xuICAgIHByZWZpeCA9IHF1YWxpZmllZE5hbWUuc3Vic3RyaW5nKDAsIGNvbG9uSW5kZXgpO1xuICAgIGxvY2FsTmFtZSA9IHF1YWxpZmllZE5hbWUuc3Vic3RyaW5nKGNvbG9uSW5kZXggKyAxKTtcbiAgfVxuXG4gIGlmIChwcmVmaXggIT09IG51bGwgJiYgbmFtZXNwYWNlID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTkFNRVNQQUNFX0VSUixcbiAgICAgIFwiQSBuYW1lc3BhY2Ugd2FzIGdpdmVuIGJ1dCBhIHByZWZpeCB3YXMgYWxzbyBleHRyYWN0ZWQgZnJvbSB0aGUgcXVhbGlmaWVkTmFtZVwiKTtcbiAgfVxuXG4gIGlmIChwcmVmaXggPT09IFwieG1sXCIgJiYgbmFtZXNwYWNlICE9PSBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTkFNRVNQQUNFX0VSUixcbiAgICAgIFwiQSBwcmVmaXggb2YgXFxcInhtbFxcXCIgd2FzIGdpdmVuIGJ1dCB0aGUgbmFtZXNwYWNlIHdhcyBub3QgdGhlIFhNTCBuYW1lc3BhY2VcIik7XG4gIH1cblxuICBpZiAoKHF1YWxpZmllZE5hbWUgPT09IFwieG1sbnNcIiB8fCBwcmVmaXggPT09IFwieG1sbnNcIikgJiYgbmFtZXNwYWNlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCIpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OQU1FU1BBQ0VfRVJSLFxuICAgICAgXCJBIHByZWZpeCBvciBxdWFsaWZpZWROYW1lIG9mIFxcXCJ4bWxuc1xcXCIgd2FzIGdpdmVuIGJ1dCB0aGUgbmFtZXNwYWNlIHdhcyBub3QgdGhlIFhNTE5TIG5hbWVzcGFjZVwiKTtcbiAgfVxuXG4gIGlmIChuYW1lc3BhY2UgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIiAmJiBxdWFsaWZpZWROYW1lICE9PSBcInhtbG5zXCIgJiYgcHJlZml4ICE9PSBcInhtbG5zXCIpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OQU1FU1BBQ0VfRVJSLFxuICAgICAgXCJUaGUgWE1MTlMgbmFtZXNwYWNlIHdhcyBnaXZlbiBidXQgbmVpdGhlciB0aGUgcHJlZml4IG5vciBxdWFsaWZpZWROYW1lIHdhcyBcXFwieG1sbnNcXFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIHsgbmFtZXNwYWNlLCBwcmVmaXgsIGxvY2FsTmFtZSB9O1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgbGVuZ3RoRnJvbVByb3BlcnRpZXMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIikubGVuZ3RoRnJvbVByb3BlcnRpZXM7XG5jb25zdCBnZXRBdHRyaWJ1dGVWYWx1ZSA9IHJlcXVpcmUoXCIuL2F0dHJpYnV0ZXNcIikuZ2V0QXR0cmlidXRlVmFsdWU7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC91dGlsc1wiKTtcblxuY29uc3QgcHJpdmF0ZXMgPSBTeW1ib2woXCJIVE1MQ29sbGVjdGlvbiBpbnRlcm5hbCBzbG90c1wiKTtcblxuY29uc3QgY29uZmxpY3RLZXlzID0gbmV3IFNldChbXCJsZW5ndGhcIiwgXCJpdGVtXCIsIFwibmFtZWRJdGVtXCJdKTtcblxuY2xhc3MgSFRNTENvbGxlY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzZWNyZXQsIGVsZW1lbnQsIHF1ZXJ5KSB7XG4gICAgaWYgKHNlY3JldCAhPT0gcHJpdmF0ZXMpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNvbnN0cnVjdG9yXCIpO1xuICAgIH1cblxuICAgIHRoaXNbcHJpdmF0ZXNdID0geyBlbGVtZW50LCBxdWVyeSwga2V5czogW10sIGxlbmd0aDogMCwgdmVyc2lvbjogLTEsIGNvbmZsaWN0RWxlbWVudHM6IE9iamVjdC5jcmVhdGUobnVsbCkgfTtcbiAgICB1cGRhdGVIVE1MQ29sbGVjdGlvbih0aGlzKTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKSB7XG4gICAgdXBkYXRlSFRNTENvbGxlY3Rpb24odGhpcyk7XG4gICAgcmV0dXJuIHRoaXNbcHJpdmF0ZXNdLmxlbmd0aDtcbiAgfVxuXG4gIGl0ZW0oaW5kZXgpIHtcbiAgICB1cGRhdGVIVE1MQ29sbGVjdGlvbih0aGlzKTtcbiAgICByZXR1cm4gdGhpc1tpbmRleF0gfHwgbnVsbDtcbiAgfVxuXG4gIG5hbWVkSXRlbShuYW1lKSB7XG4gICAgdXBkYXRlSFRNTENvbGxlY3Rpb24odGhpcyk7XG5cbiAgICBpZiAoY29uZmxpY3RLZXlzLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHRoaXNbcHJpdmF0ZXNdLmNvbmZsaWN0RWxlbWVudHNbbmFtZV0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpc1tuYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuSFRNTENvbGxlY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBBcnJheS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXTtcbkhUTUxDb2xsZWN0aW9uLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MQ29sbGVjdGlvblwiO1xuXG5mdW5jdGlvbiB1cGRhdGVIVE1MQ29sbGVjdGlvbihjb2xsZWN0aW9uKSB7XG4gIGlmIChjb2xsZWN0aW9uW3ByaXZhdGVzXS52ZXJzaW9uIDwgY29sbGVjdGlvbltwcml2YXRlc10uZWxlbWVudC5fdmVyc2lvbikge1xuICAgIHJlc2V0SFRNTENvbGxlY3Rpb25Ubyhjb2xsZWN0aW9uLCBjb2xsZWN0aW9uW3ByaXZhdGVzXS5xdWVyeSgpKTtcbiAgICBjb2xsZWN0aW9uW3ByaXZhdGVzXS52ZXJzaW9uID0gY29sbGVjdGlvbltwcml2YXRlc10uZWxlbWVudC5fdmVyc2lvbjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEhUTUxDb2xsZWN0aW9uVG8oY29sbGVjdGlvbiwgaW1wbHMpIHtcbiAgY29uc3Qgd3JhcHBlcnMgPSBpbXBscy5tYXAoaWRsVXRpbHMud3JhcHBlckZvckltcGwpO1xuXG4gIGNvbnN0IHN0YXJ0aW5nTGVuZ3RoID0gbGVuZ3RoRnJvbVByb3BlcnRpZXMoY29sbGVjdGlvbik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhcnRpbmdMZW5ndGg7ICsraSkge1xuICAgIGRlbGV0ZSBjb2xsZWN0aW9uW2ldO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB3cmFwcGVycy5sZW5ndGg7ICsraSkge1xuICAgIGNvbGxlY3Rpb25baV0gPSB3cmFwcGVyc1tpXTtcbiAgfVxuICBjb2xsZWN0aW9uW3ByaXZhdGVzXS5sZW5ndGggPSB3cmFwcGVycy5sZW5ndGg7XG5cbiAgY29uc3Qga2V5cyA9IGNvbGxlY3Rpb25bcHJpdmF0ZXNdLmtleXM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgIGRlbGV0ZSBjb2xsZWN0aW9uW2tleXNbaV1dO1xuICB9XG4gIGtleXMubGVuZ3RoID0gMDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGltcGxzLmxlbmd0aDsgKytpKSB7XG4gICAgYWRkSWZBdHRyUHJlc2VudChpbXBsc1tpXSwgd3JhcHBlcnNbaV0sIFwibmFtZVwiKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGltcGxzLmxlbmd0aDsgKytpKSB7XG4gICAgYWRkSWZBdHRyUHJlc2VudChpbXBsc1tpXSwgd3JhcHBlcnNbaV0sIFwiaWRcIik7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRJZkF0dHJQcmVzZW50KGltcGwsIHdyYXBwZXIsIGF0dHIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKGltcGwsIGF0dHIpO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSBcIlwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRG9uJ3Qgb3ZlcndyaXRlIG51bWVyaWMgaW5kaWNlcyB3aXRoIG5hbWVkIG9uZXMuXG4gICAgY29uc3QgdmFsdWVBc051bWJlciA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4odmFsdWVBc051bWJlcikgJiYgdmFsdWVBc051bWJlciA+PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgbmFtZWQgb25lc1xuICAgIGlmIChrZXlzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb25mbGljdEtleXMuaGFzKHZhbHVlKSkge1xuICAgICAgY29sbGVjdGlvbltwcml2YXRlc10uY29uZmxpY3RFbGVtZW50c1t2YWx1ZV0gPSB3cmFwcGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2xsZWN0aW9uW3ZhbHVlXSA9IHdyYXBwZXI7XG4gICAgfVxuICAgIGtleXMucHVzaCh2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29yZSkge1xuICBjb3JlLkhUTUxDb2xsZWN0aW9uID0gSFRNTENvbGxlY3Rpb247XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgcXVlcnkpIHtcbiAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbihwcml2YXRlcywgZWxlbWVudCwgcXVlcnkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMudXBkYXRlID0gdXBkYXRlSFRNTENvbGxlY3Rpb247XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5ET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5leHBvcnRzLk5hbWVkTm9kZU1hcCA9IHJlcXVpcmUoXCIuL2F0dHJpYnV0ZXNcIikuTmFtZWROb2RlTWFwO1xuZXhwb3J0cy5BdHRyID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0F0dHJcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5Ob2RlID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL05vZGVcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5FbGVtZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0VsZW1lbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5Eb2N1bWVudEZyYWdtZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0RvY3VtZW50RnJhZ21lbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5Eb2N1bWVudCA9IGV4cG9ydHMuSFRNTERvY3VtZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0RvY3VtZW50XCIpLmludGVyZmFjZTtcbmV4cG9ydHMuWE1MRG9jdW1lbnQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvWE1MRG9jdW1lbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5DaGFyYWN0ZXJEYXRhID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0NoYXJhY3RlckRhdGFcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5UZXh0ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL1RleHRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5DREFUQVNlY3Rpb24gPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvQ0RBVEFTZWN0aW9uXCIpLmludGVyZmFjZTtcbmV4cG9ydHMuUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL1Byb2Nlc3NpbmdJbnN0cnVjdGlvblwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkNvbW1lbnQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvQ29tbWVudFwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkRvY3VtZW50VHlwZSA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9Eb2N1bWVudFR5cGVcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5ET01JbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9ET01JbXBsZW1lbnRhdGlvblwiKS5pbnRlcmZhY2U7XG5cbmV4cG9ydHMuRXZlbnQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvRXZlbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5DdXN0b21FdmVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9DdXN0b21FdmVudFwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLk1lc3NhZ2VFdmVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9NZXNzYWdlRXZlbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5FcnJvckV2ZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0Vycm9yRXZlbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5IYXNoQ2hhbmdlRXZlbnQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSGFzaENoYW5nZUV2ZW50XCIpLmludGVyZmFjZTtcbmV4cG9ydHMuRm9jdXNFdmVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9Gb2N1c0V2ZW50XCIpLmludGVyZmFjZTtcbmV4cG9ydHMuUG9wU3RhdGVFdmVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9Qb3BTdGF0ZUV2ZW50XCIpLmludGVyZmFjZTtcbmV4cG9ydHMuVUlFdmVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9VSUV2ZW50XCIpLmludGVyZmFjZTtcbmV4cG9ydHMuTW91c2VFdmVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9Nb3VzZUV2ZW50XCIpLmludGVyZmFjZTtcbmV4cG9ydHMuS2V5Ym9hcmRFdmVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9LZXlib2FyZEV2ZW50XCIpLmludGVyZmFjZTtcbmV4cG9ydHMuVG91Y2hFdmVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9Ub3VjaEV2ZW50XCIpLmludGVyZmFjZTtcbmV4cG9ydHMuUHJvZ3Jlc3NFdmVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9Qcm9ncmVzc0V2ZW50XCIpLmludGVyZmFjZTtcbmV4cG9ydHMuRXZlbnRUYXJnZXQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvRXZlbnRUYXJnZXRcIikuaW50ZXJmYWNlO1xuXG5leHBvcnRzLkxvY2F0aW9uID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0xvY2F0aW9uXCIpLmludGVyZmFjZTtcbmV4cG9ydHMuSGlzdG9yeSA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IaXN0b3J5XCIpLmludGVyZmFjZTtcblxuZXhwb3J0cy5CbG9iID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0Jsb2JcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5GaWxlID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0ZpbGVcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5GaWxlTGlzdCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9GaWxlTGlzdFwiKS5pbnRlcmZhY2U7XG5cbmV4cG9ydHMuRE9NUGFyc2VyID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0RPTVBhcnNlclwiKS5pbnRlcmZhY2U7XG5cbmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvRm9ybURhdGFcIikuaW50ZXJmYWNlO1xuXG5yZXF1aXJlKFwiLi9yZWdpc3Rlci1lbGVtZW50c1wiKShleHBvcnRzKTtcblxuLy8gVGhlc2UgbmVlZCB0byBiZSBjbGVhbmVkIHVwLi4uXG5yZXF1aXJlKFwiLi4vbGV2ZWwyL3N0eWxlXCIpKGV4cG9ydHMpO1xucmVxdWlyZShcIi4uL2xldmVsMy94cGF0aFwiKShleHBvcnRzKTtcblxuLy8gVGhlc2UgYXJlIE9LIGJ1dCBuZWVkIG1pZ3JhdGlvbiB0byB3ZWJpZGwyanMgZXZlbnR1YWxseS5cbnJlcXVpcmUoXCIuL2h0bWwtY29sbGVjdGlvblwiKShleHBvcnRzKTtcbnJlcXVpcmUoXCIuL25vZGUtZmlsdGVyXCIpKGV4cG9ydHMpO1xucmVxdWlyZShcIi4vbm9kZS1pdGVyYXRvclwiKShleHBvcnRzKTtcbnJlcXVpcmUoXCIuL25vZGUtbGlzdFwiKShleHBvcnRzKTtcbnJlcXVpcmUoXCIuL3htbGh0dHByZXF1ZXN0LWV2ZW50LXRhcmdldFwiKShleHBvcnRzKTtcbnJlcXVpcmUoXCIuL3htbGh0dHByZXF1ZXN0LXVwbG9hZFwiKShleHBvcnRzKTtcblxuZXhwb3J0cy5ET01Ub2tlbkxpc3QgPSByZXF1aXJlKFwiLi9kb20tdG9rZW4tbGlzdFwiKS5ET01Ub2tlbkxpc3Q7XG5leHBvcnRzLlVSTCA9IHJlcXVpcmUoXCJ3aGF0d2ctdXJsXCIpLlVSTDtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgaGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5jb25zdCBuYW1lZFByb3BlcnRpZXNUcmFja2VyID0gcmVxdWlyZShcIi4uL25hbWVkLXByb3BlcnRpZXMtdHJhY2tlclwiKTtcbmNvbnN0IE5PREVfVFlQRSA9IHJlcXVpcmUoXCIuL25vZGUtdHlwZVwiKTtcbmNvbnN0IGNyZWF0ZUhUTUxDb2xsZWN0aW9uID0gcmVxdWlyZShcIi4vaHRtbC1jb2xsZWN0aW9uXCIpLmNyZWF0ZTtcbmNvbnN0IHRyZWVPcmRlclNvcnRlciA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKS50cmVlT3JkZXJTb3J0ZXI7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC91dGlsc1wiKTtcblxuZnVuY3Rpb24gaXNOYW1lZFByb3BlcnR5RWxlbWVudChlbGVtZW50KSB7XG4gIC8vIChmb3IgdGhlIG5hbWUgYXR0cmlidXRlKVxuXG4gIC8vIHVzZSBoYXNPd25Qcm9wZXJ0eSB0byBtYWtlIHN1cmUgY29udGVudFdpbmRvdyBjb21lcyBmcm9tIHRoZSBwcm90b3R5cGUsXG4gIC8vIGFuZCBpcyBub3Qgc2V0IGRpcmVjdGx5IG9uIHRoZSBub2RlIGJ5IGEgc2NyaXB0LlxuICBpZiAoXCJjb250ZW50V2luZG93XCIgaW4gZWxlbWVudCAmJiAhaGFzT3duUHJvcC5jYWxsKGVsZW1lbnQsIFwiY29udGVudFdpbmRvd1wiKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgY2FzZSBcIkFcIjpcbiAgICBjYXNlIFwiQVBQTEVUXCI6XG4gICAgY2FzZSBcIkFSRUFcIjpcbiAgICBjYXNlIFwiRU1CRURcIjpcbiAgICBjYXNlIFwiRk9STVwiOlxuICAgIGNhc2UgXCJGUkFNRVNFVFwiOlxuICAgIGNhc2UgXCJJTUdcIjpcbiAgICBjYXNlIFwiT0JKRUNUXCI6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5hbWVkUHJvcGVydHlSZXNvbHZlcihIVE1MQ29sbGVjdGlvbiwgd2luZG93LCBuYW1lLCB2YWx1ZXMpIHtcbiAgZnVuY3Rpb24gZ2V0UmVzdWx0KCkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiB2YWx1ZXMoKS5rZXlzKCkpIHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gbmFtZSkge1xuICAgICAgICByZXN1bHRzLnB1c2gobm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSA9PT0gbmFtZSAmJiBpc05hbWVkUHJvcGVydHlFbGVtZW50KG5vZGUpKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHRzLnNvcnQodHJlZU9yZGVyU29ydGVyKTtcblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuX2RvY3VtZW50O1xuICBjb25zdCBvYmplY3RzID0gY3JlYXRlSFRNTENvbGxlY3Rpb24oaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSwgZ2V0UmVzdWx0KTtcblxuICBjb25zdCBsZW5ndGggPSBvYmplY3RzLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IG5vZGUgPSBvYmplY3RzW2ldO1xuXG4gICAgaWYgKFwiY29udGVudFdpbmRvd1wiIGluIG5vZGUgJiYgIWhhc093blByb3AuY2FsbChub2RlLCBcImNvbnRlbnRXaW5kb3dcIikgJiZcbiAgICAgICBub2RlLmdldEF0dHJpYnV0ZShcIm5hbWVcIikgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBub2RlLmNvbnRlbnRXaW5kb3c7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAobGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIG9iamVjdHNbMF07XG4gIH1cblxuICByZXR1cm4gb2JqZWN0cztcbn1cblxuZXhwb3J0cy5pbml0aWFsaXplV2luZG93ID0gZnVuY3Rpb24gKHdpbmRvdywgSFRNTENvbGxlY3Rpb24pIHtcbiAgbmFtZWRQcm9wZXJ0aWVzVHJhY2tlci5jcmVhdGUod2luZG93LCBuYW1lZFByb3BlcnR5UmVzb2x2ZXIuYmluZChudWxsLCBIVE1MQ29sbGVjdGlvbikpO1xufTtcblxuZXhwb3J0cy5lbGVtZW50QXR0cmlidXRlTW9kaWZpZWQgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSwgdmFsdWUsIG9sZFZhbHVlKSB7XG4gIGlmICghZWxlbWVudC5fYXR0YWNoZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB1c2VOYW1lID0gaXNOYW1lZFByb3BlcnR5RWxlbWVudChlbGVtZW50KTtcblxuICBpZiAobmFtZSA9PT0gXCJpZFwiIHx8IChuYW1lID09PSBcIm5hbWVcIiAmJiB1c2VOYW1lKSkge1xuICAgIGNvbnN0IHRyYWNrZXIgPSBuYW1lZFByb3BlcnRpZXNUcmFja2VyLmdldChlbGVtZW50Ll9vd25lckRvY3VtZW50Ll9nbG9iYWwpO1xuXG4gICAgLy8gKHRyYWNrZXIgd2lsbCBiZSBudWxsIGlmIHRoZSBkb2N1bWVudCBoYXMgbm8gV2luZG93KVxuICAgIGlmICh0cmFja2VyKSB7XG4gICAgICBpZiAobmFtZSA9PT0gXCJpZFwiICYmICghdXNlTmFtZSB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZShcIm5hbWVcIikgIT09IG9sZFZhbHVlKSkge1xuICAgICAgICB0cmFja2VyLnVudHJhY2sob2xkVmFsdWUsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gXCJuYW1lXCIgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgdHJhY2tlci51bnRyYWNrKG9sZFZhbHVlLCBlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgdHJhY2tlci50cmFjayh2YWx1ZSwgZWxlbWVudCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnRzLm5vZGVBdHRhY2hlZFRvRG9jdW1lbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRyYWNrZXIgPSBuYW1lZFByb3BlcnRpZXNUcmFja2VyLmdldChub2RlLl9vd25lckRvY3VtZW50Ll9nbG9iYWwpO1xuICBpZiAoIXRyYWNrZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cmFja2VyLnRyYWNrKG5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIiksIG5vZGUpO1xuXG4gIGlmIChpc05hbWVkUHJvcGVydHlFbGVtZW50KG5vZGUpKSB7XG4gICAgdHJhY2tlci50cmFjayhub2RlLmdldEF0dHJpYnV0ZShcIm5hbWVcIiksIG5vZGUpO1xuICB9XG59O1xuXG5leHBvcnRzLm5vZGVEZXRhY2hlZEZyb21Eb2N1bWVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdHJhY2tlciA9IG5hbWVkUHJvcGVydGllc1RyYWNrZXIuZ2V0KG5vZGUuX293bmVyRG9jdW1lbnQuX2dsb2JhbCk7XG4gIGlmICghdHJhY2tlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyYWNrZXIudW50cmFjayhub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpLCBub2RlKTtcblxuICBpZiAoaXNOYW1lZFByb3BlcnR5RWxlbWVudChub2RlKSkge1xuICAgIHRyYWNrZXIudW50cmFjayhub2RlLmdldEF0dHJpYnV0ZShcIm5hbWVcIiksIG5vZGUpO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBOYXZpZ2F0b3JJREltcGwgPSByZXF1aXJlKFwiLi9OYXZpZ2F0b3JJRC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgTmF2aWdhdG9yTGFuZ3VhZ2VJbXBsID0gcmVxdWlyZShcIi4vTmF2aWdhdG9yTGFuZ3VhZ2UtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IE5hdmlnYXRvck9uTGluZUltcGwgPSByZXF1aXJlKFwiLi9OYXZpZ2F0b3JPbkxpbmUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IE5hdmlnYXRvckNvb2tpZXNJbXBsID0gcmVxdWlyZShcIi4vTmF2aWdhdG9yQ29va2llcy1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgTmF2aWdhdG9yUGx1Z2luc0ltcGwgPSByZXF1aXJlKFwiLi9OYXZpZ2F0b3JQbHVnaW5zLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmVJbXBsID0gcmVxdWlyZShcIi4vTmF2aWdhdG9yQ29uY3VycmVudEhhcmR3YXJlLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIE5hdmlnYXRvckltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHRoaXMudXNlckFnZW50ID0gcHJpdmF0ZURhdGEudXNlckFnZW50O1xuICAgIHRoaXMubGFuZ3VhZ2VzID0gT2JqZWN0LmZyZWV6ZShbXCJlbi1VU1wiLCBcImVuXCJdKTtcbiAgfVxufVxuXG5pZGxVdGlscy5taXhpbihOYXZpZ2F0b3JJbXBsLnByb3RvdHlwZSwgTmF2aWdhdG9ySURJbXBsLnByb3RvdHlwZSk7XG5pZGxVdGlscy5taXhpbihOYXZpZ2F0b3JJbXBsLnByb3RvdHlwZSwgTmF2aWdhdG9yTGFuZ3VhZ2VJbXBsLnByb3RvdHlwZSk7XG5pZGxVdGlscy5taXhpbihOYXZpZ2F0b3JJbXBsLnByb3RvdHlwZSwgTmF2aWdhdG9yT25MaW5lSW1wbC5wcm90b3R5cGUpO1xuaWRsVXRpbHMubWl4aW4oTmF2aWdhdG9ySW1wbC5wcm90b3R5cGUsIE5hdmlnYXRvckNvb2tpZXNJbXBsLnByb3RvdHlwZSk7XG5pZGxVdGlscy5taXhpbihOYXZpZ2F0b3JJbXBsLnByb3RvdHlwZSwgTmF2aWdhdG9yUGx1Z2luc0ltcGwucHJvdG90eXBlKTtcbmlkbFV0aWxzLm1peGluKE5hdmlnYXRvckltcGwucHJvdG90eXBlLCBOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmVJbXBsLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBOYXZpZ2F0b3JJbXBsO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBvcyA9IHJlcXVpcmUoXCJvc1wiKTtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZUltcGwge1xuICBnZXQgaGFyZHdhcmVDb25jdXJyZW5jeSgpIHtcbiAgICByZXR1cm4gb3MuY3B1cygpLmxlbmd0aDtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgTmF2aWdhdG9yQ29va2llc0ltcGwge1xuICBnZXQgY29va2llRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgTmF2aWdhdG9ySURJbXBsIHtcbiAgZ2V0IGFwcENvZGVOYW1lKCkge1xuICAgIHJldHVybiBcIk1vemlsbGFcIjtcbiAgfVxuXG4gIGdldCBhcHBOYW1lKCkge1xuICAgIHJldHVybiBcIk5ldHNjYXBlXCI7XG4gIH1cblxuICBnZXQgYXBwVmVyc2lvbigpIHtcbiAgICByZXR1cm4gXCI0LjBcIjtcbiAgfVxuXG4gIGdldCBwbGF0Zm9ybSgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldCBwcm9kdWN0KCkge1xuICAgIHJldHVybiBcIkdlY2tvXCI7XG4gIH1cblxuICBnZXQgcHJvZHVjdFN1YigpIHtcbiAgICByZXR1cm4gXCIyMDAzMDEwN1wiO1xuICB9XG5cbiAgLy8gc2VlIE5hdmlnYXRvciBjb25zdHJ1Y3RvciBmb3IgdXNlckFnZW50XG5cbiAgZ2V0IHZlbmRvcigpIHtcbiAgICByZXR1cm4gXCJBcHBsZSBDb21wdXRlciwgSW5jLlwiO1xuICB9XG5cbiAgZ2V0IHZlbmRvclN1YigpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgTmF2aWdhdG9yTGFuZ3VhZ2VJbXBsIHtcbiAgZ2V0IGxhbmd1YWdlKCkge1xuICAgIHJldHVybiBcImVuLVVTXCI7XG4gIH1cblxuICAvLyBTZWUgTmF2aWdhdG9yIGNvbnN0cnVjdG9yIGZvciBsYW5ndWFnZXNcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIE5hdmlnYXRvck9uTGluZUltcGwge1xuICBnZXQgb25MaW5lKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBOYXZpZ2F0b3JQbHVnaW5zSW1wbCB7XG4gIGphdmFFbmFibGVkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUoe1xuICBET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQ6IDEsXG4gIERPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORzogMixcbiAgRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HOiA0LFxuICBET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUzogOCxcbiAgRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZOiAxNixcbiAgRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUM6IDMyXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgYWRkQ29uc3RhbnRzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpLmFkZENvbnN0YW50cztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29yZSkge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS1ub2RlZmlsdGVyXG4gIGNvcmUuTm9kZUZpbHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBhbiB1bnNpZ25lZCBzaG9ydCB0aGF0IHdpbGwgYmUgdXNlZCB0byB0ZWxsIGlmIGEgZ2l2ZW4gTm9kZSBtdXN0XG4gICAqIGJlIGFjY2VwdGVkIG9yIG5vdCBieSB0aGUgTm9kZUl0ZXJhdG9yIG9yIFRyZWVXYWxrZXIgaXRlcmF0aW9uXG4gICAqIGFsZ29yaXRobS4gVGhpcyBtZXRob2QgaXMgZXhwZWN0ZWQgdG8gYmUgd3JpdHRlbiBieSB0aGUgdXNlciBvZiBhXG4gICAqIE5vZGVGaWx0ZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGVGaWx0ZXJcbiAgICogQGludGVyZmFjZVxuICAgKlxuICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlIERPTSBOb2RlXG4gICAqIEByZXR1cm4ge0ZJTFRFUl9BQ0NFUFR8RklMVEVSX1JFSkVDVHxGSUxURVJfU0tJUH1cbiAgICovXG4gIGNvcmUuTm9kZUZpbHRlci5hY2NlcHROb2RlID0gZnVuY3Rpb24gKC8qIG5vZGUgKi8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBpcyBleHBlY3RlZCB0byBiZSB3cml0dGVuIGJ5IHRoZSB1c2VyIG9mIGEgTm9kZUZpbHRlci5cIik7XG4gIH07XG5cbiAgYWRkQ29uc3RhbnRzKGNvcmUuTm9kZUZpbHRlciwge1xuICAgIC8vIENvbnN0YW50cyBmb3Igd2hhdFRvU2hvd1xuICAgIFNIT1dfQUxMOiAweEZGRkZGRkZGLFxuICAgIFNIT1dfRUxFTUVOVDogMHgwMDAwMDAwMSxcbiAgICBTSE9XX0FUVFJJQlVURTogMHgwMDAwMDAwMixcbiAgICBTSE9XX1RFWFQ6IDB4MDAwMDAwMDQsXG4gICAgU0hPV19DREFUQV9TRUNUSU9OOiAweDAwMDAwMDA4LFxuICAgIFNIT1dfRU5USVRZX1JFRkVSRU5DRTogMHgwMDAwMDAxMCxcbiAgICBTSE9XX0VOVElUWTogMHgwMDAwMDAyMCxcbiAgICBTSE9XX1BST0NFU1NJTkdfSU5TVFJVQ1RJT046IDB4MDAwMDAwNDAsXG4gICAgU0hPV19DT01NRU5UOiAweDAwMDAwMDgwLFxuICAgIFNIT1dfRE9DVU1FTlQ6IDB4MDAwMDAxMDAsXG4gICAgU0hPV19ET0NVTUVOVF9UWVBFOiAweDAwMDAwMjAwLFxuICAgIFNIT1dfRE9DVU1FTlRfRlJBR01FTlQ6IDB4MDAwMDA0MDAsXG4gICAgU0hPV19OT1RBVElPTjogMHgwMDAwMDgwMCxcblxuICAgIC8vIENvbnN0YW50cyByZXR1cm5lZCBieSBhY2NlcHROb2RlXG4gICAgRklMVEVSX0FDQ0VQVDogMSxcbiAgICBGSUxURVJfUkVKRUNUOiAyLFxuICAgIEZJTFRFUl9TS0lQOiAzXG4gIH0pO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC91dGlsc1wiKTtcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuY29uc3QgZGVmaW5lR2V0dGVyID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpLmRlZmluZUdldHRlcjtcbmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKFwiTm9kZUl0ZXJhdG9yIGludGVybmFsXCIpO1xuY29uc3QgRG9jdW1lbnRJbXBsID0gcmVxdWlyZShcIi4vbm9kZXMvRG9jdW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29yZSkge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS1ub2RlaXRlcmF0b3JcblxuICBmdW5jdGlvbiBOb2RlSXRlcmF0b3JJbnRlcm5hbChkb2N1bWVudCwgcm9vdCwgd2hhdFRvU2hvdywgZmlsdGVyKSB7XG4gICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IHJvb3Q7XG4gICAgdGhpcy5wb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSA9IHRydWU7XG4gICAgdGhpcy53aGF0VG9TaG93ID0gd2hhdFRvU2hvdztcbiAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjtcbiAgfVxuXG4gIE5vZGVJdGVyYXRvckludGVybmFsLnByb3RvdHlwZS50aHJvd0lmTm90QWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIChvbmx5IHRocm93biBmb3IgZ2V0dGVycy9tZXRob2RzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHJlbW92aW5nIHN0ZXBzKVxuICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgIHRocm93IEVycm9yKFwiVGhpcyBOb2RlSXRlcmF0b3IgaXMgbm8gbG9uZ2VyIGFjdGl2ZS4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJNb3JlIHRoYW4gXCIgKyB0aGlzLmRvY3VtZW50Ll9hY3RpdmVOb2RlSXRlcmF0b3JzTWF4ICtcbiAgICAgICAgICAgICAgICAgIFwiIGl0ZXJhdG9ycyBhcmUgYmVpbmcgdXNlZCBjb25jdXJyZW50bHkuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiWW91IGNhbiBpbmNyZWFzZSB0aGUgJ2NvbmN1cnJlbnROb2RlSXRlcmF0b3JzJyBvcHRpb24gdG8gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJtYWtlIHRoaXMgZXJyb3IgZ28gYXdheS5cIlxuICAgICAgKTtcbiAgICAgIC8vIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcGVzdGVyIEVjbWEgdG8gYWRkIHN1cHBvcnQgZm9yIHdlYWsgcmVmZXJlbmNlcyxcbiAgICAgIC8vIHRoZSBET00gc3RhbmRhcmQgYXNzdW1lcyB0aGUgaW1wbGVtZW50b3IgaGFzIGNvbnRyb2wgb3ZlciBvYmplY3QgbGlmZSBjeWNsZXMuXG4gICAgfVxuICB9O1xuXG4gIE5vZGVJdGVyYXRvckludGVybmFsLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIChuZXh0KSB7XG4gICAgbGV0IG5vZGUgPSB0aGlzLnJlZmVyZW5jZU5vZGU7XG4gICAgbGV0IGJlZm9yZU5vZGUgPSB0aGlzLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlO1xuXG4gICAgZG8ge1xuICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgaWYgKCFiZWZvcmVOb2RlKSB7XG4gICAgICAgICAgbm9kZSA9IGRvbVN5bWJvbFRyZWUuZm9sbG93aW5nKG5vZGUsIHsgcm9vdDogdGhpcy5yb290IH0pO1xuXG4gICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBiZWZvcmVOb2RlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgeyAvLyBwcmV2aW91c1xuICAgICAgICBpZiAoYmVmb3JlTm9kZSkge1xuICAgICAgICAgIG5vZGUgPSBkb21TeW1ib2xUcmVlLnByZWNlZGluZyhub2RlLCB7IHJvb3Q6IHRoaXMucm9vdCB9KTtcblxuICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYmVmb3JlTm9kZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHdoaWxlICh0aGlzLmZpbHRlck5vZGUobm9kZSkgIT09IGNvcmUuTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUKTtcblxuICAgIHRoaXMucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUgPSBiZWZvcmVOb2RlO1xuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IG5vZGU7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG5cbiAgTm9kZUl0ZXJhdG9ySW50ZXJuYWwucHJvdG90eXBlLmZpbHRlck5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGNvbnN0IG4gPSBub2RlLm5vZGVUeXBlIC0gMTtcbiAgICBpZiAoISh0aGlzLndoYXRUb1Nob3cgJiAoMSA8PCBuKSkpIHtcbiAgICAgIHJldHVybiBjb3JlLk5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgfVxuXG4gICAgbGV0IHJldCA9IGNvcmUuTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUO1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVyO1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldCA9IGZpbHRlcihub2RlKTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiB0eXBlb2YgZmlsdGVyLmFjY2VwdE5vZGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0ID0gZmlsdGVyLmFjY2VwdE5vZGUobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHJldCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGNvcmUuTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUO1xuICAgIH0gZWxzZSBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGNvcmUuTm9kZUZpbHRlci5GSUxURVJfUkVKRUNUO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgTm9kZUl0ZXJhdG9ySW50ZXJuYWwucHJvdG90eXBlLnJ1blJlbW92aW5nU3RlcHMgPSBmdW5jdGlvbiAob2xkTm9kZSwgb2xkUGFyZW50LCBvbGRQcmV2aW91c1NpYmxpbmcpIHtcbiAgICBpZiAob2xkTm9kZS5jb250YWlucyh0aGlzLnJvb3QpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgb2xkTm9kZSBpcyBub3QgYW4gaW5jbHVzaXZlIGFuY2VzdG9yIG9mIHRoZSByZWZlcmVuY2VOb2RlXG4gICAgLy8gYXR0cmlidXRlIHZhbHVlLCB0ZXJtaW5hdGUgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKCFvbGROb2RlLmNvbnRhaW5zKHRoaXMucmVmZXJlbmNlTm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSkge1xuICAgICAgLy8gTGV0IG5leHRTaWJsaW5nIGJlIG9sZFByZXZpb3VzU2libGluZ+KAmXMgbmV4dCBzaWJsaW5nLCBpZiBvbGRQcmV2aW91c1NpYmxpbmcgaXMgbm9uLW51bGwsXG4gICAgICAvLyBhbmQgb2xkUGFyZW504oCZcyBmaXJzdCBjaGlsZCBvdGhlcndpc2UuXG4gICAgICBjb25zdCBuZXh0U2libGluZyA9IG9sZFByZXZpb3VzU2libGluZyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFByZXZpb3VzU2libGluZy5uZXh0U2libGluZyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFBhcmVudC5maXJzdENoaWxkO1xuXG4gICAgICAvLyBJZiBuZXh0U2libGluZyBpcyBub24tbnVsbCwgc2V0IHRoZSByZWZlcmVuY2VOb2RlIGF0dHJpYnV0ZSB0byBuZXh0U2libGluZ1xuICAgICAgLy8gYW5kIHRlcm1pbmF0ZSB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChuZXh0U2libGluZykge1xuICAgICAgICB0aGlzLnJlZmVyZW5jZU5vZGUgPSBuZXh0U2libGluZztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBMZXQgbmV4dCBiZSB0aGUgZmlyc3Qgbm9kZSBmb2xsb3dpbmcgb2xkUGFyZW50IChleGNsdWRpbmcgYW55IGNoaWxkcmVuIG9mIG9sZFBhcmVudCkuXG4gICAgICBjb25zdCBuZXh0ID0gZG9tU3ltYm9sVHJlZS5mb2xsb3dpbmcob2xkUGFyZW50LCB7IHNraXBDaGlsZHJlbjogdHJ1ZSB9KTtcblxuICAgICAgLy8gSWYgcm9vdCBpcyBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgbmV4dCwgc2V0IHRoZSByZWZlcmVuY2VOb2RlXG4gICAgICAvLyBhdHRyaWJ1dGUgdG8gbmV4dCBhbmQgdGVybWluYXRlIHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKHRoaXMucm9vdC5jb250YWlucyhuZXh0KSkge1xuICAgICAgICB0aGlzLnJlZmVyZW5jZU5vZGUgPSBuZXh0O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgc2V0IHRoZSBwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSBhdHRyaWJ1dGUgdG8gZmFsc2UuXG4gICAgICB0aGlzLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlID0gZmFsc2U7XG5cbiAgICAgIC8vIE5vdGU6IFN0ZXBzIGFyZSBub3QgdGVybWluYXRlZCBoZXJlLlxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgcmVmZXJlbmNlTm9kZSBhdHRyaWJ1dGUgdG8gdGhlIGxhc3QgaW5jbHVzaXZlIGRlc2NlbmRhbnQgaW4gdHJlZSBvcmRlciBvZiBvbGRQcmV2aW91c1NpYmxpbmcsXG4gICAgLy8gaWYgb2xkUHJldmlvdXNTaWJsaW5nIGlzIG5vbi1udWxsLCBhbmQgdG8gb2xkUGFyZW50IG90aGVyd2lzZS5cbiAgICB0aGlzLnJlZmVyZW5jZU5vZGUgPSBvbGRQcmV2aW91c1NpYmxpbmcgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21TeW1ib2xUcmVlLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KG9sZFByZXZpb3VzU2libGluZykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRQYXJlbnQ7XG4gIH07XG5cbiAgRG9jdW1lbnRJbXBsLl9yZW1vdmluZ1N0ZXBzLnB1c2goKGRvY3VtZW50LCBvbGROb2RlLCBvbGRQYXJlbnQsIG9sZFByZXZpb3VzU2libGluZykgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jdW1lbnQuX2FjdGl2ZU5vZGVJdGVyYXRvcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGludGVybmFsID0gZG9jdW1lbnQuX2FjdGl2ZU5vZGVJdGVyYXRvcnNbaV07XG4gICAgICBpbnRlcm5hbC5ydW5SZW1vdmluZ1N0ZXBzKG9sZE5vZGUsIG9sZFBhcmVudCwgb2xkUHJldmlvdXNTaWJsaW5nKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvcmUuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZU5vZGVJdGVyYXRvciA9IGZ1bmN0aW9uIChyb290LCB3aGF0VG9TaG93LCBmaWx0ZXIpIHtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgZW5vdWdoIGFyZ3VtZW50cyB0byBEb2N1bWVudC5jcmVhdGVOb2RlSXRlcmF0b3IuXCIpO1xuICAgIH1cbiAgICByb290ID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIocm9vdCk7XG5cbiAgICBpZiAoZmlsdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbHRlciA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlciAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgZmlsdGVyICE9PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgdHlwZW9mIGZpbHRlci5hY2NlcHROb2RlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAzIG9mIERvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvciBzaG91bGQgYmUgYSBmdW5jdGlvbiBvciBpbXBsZW1lbnQgTm9kZUZpbHRlci5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgZG9jdW1lbnQgPSByb290Ll9vd25lckRvY3VtZW50O1xuXG4gICAgd2hhdFRvU2hvdyA9IHdoYXRUb1Nob3cgPT09IHVuZGVmaW5lZCA/XG4gICAgICBjb3JlLk5vZGVGaWx0ZXIuU0hPV19BTEwgOlxuICAgICAgKHdoYXRUb1Nob3cgJiBjb3JlLk5vZGVGaWx0ZXIuU0hPV19BTEwpID4+PiAwOyAvLyA+Pj4gbWFrZXMgc3VyZSB0aGUgcmVzdWx0IGlzIHVuc2lnbmVkXG5cbiAgICBmaWx0ZXIgPSBmaWx0ZXIgfHwgbnVsbDtcblxuICAgIGNvbnN0IGl0ID0gT2JqZWN0LmNyZWF0ZShjb3JlLk5vZGVJdGVyYXRvci5wcm90b3R5cGUpO1xuICAgIGNvbnN0IGludGVybmFsID0gbmV3IE5vZGVJdGVyYXRvckludGVybmFsKGRvY3VtZW50LCByb290LCB3aGF0VG9TaG93LCBmaWx0ZXIpO1xuICAgIGl0W0lOVEVSTkFMXSA9IGludGVybmFsO1xuXG4gICAgZG9jdW1lbnQuX2FjdGl2ZU5vZGVJdGVyYXRvcnMucHVzaChpbnRlcm5hbCk7XG4gICAgd2hpbGUgKGRvY3VtZW50Ll9hY3RpdmVOb2RlSXRlcmF0b3JzLmxlbmd0aCA+IGRvY3VtZW50Ll9hY3RpdmVOb2RlSXRlcmF0b3JzTWF4KSB7XG4gICAgICBjb25zdCBpbnRlcm5hbE90aGVyID0gZG9jdW1lbnQuX2FjdGl2ZU5vZGVJdGVyYXRvcnMuc2hpZnQoKTtcbiAgICAgIGludGVybmFsT3RoZXIuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0O1xuICB9O1xuXG4gIGNvcmUuTm9kZUl0ZXJhdG9yID0gZnVuY3Rpb24gTm9kZUl0ZXJhdG9yKCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xuICB9O1xuXG4gIGRlZmluZUdldHRlcihjb3JlLk5vZGVJdGVyYXRvci5wcm90b3R5cGUsIFwicm9vdFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRoaXNbSU5URVJOQUxdLnJvb3QpO1xuICB9KTtcblxuICBkZWZpbmVHZXR0ZXIoY29yZS5Ob2RlSXRlcmF0b3IucHJvdG90eXBlLCBcInJlZmVyZW5jZU5vZGVcIiwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGludGVybmFsID0gdGhpc1tJTlRFUk5BTF07XG4gICAgaW50ZXJuYWwudGhyb3dJZk5vdEFjdGl2ZSgpO1xuICAgIHJldHVybiBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChpbnRlcm5hbC5yZWZlcmVuY2VOb2RlKTtcbiAgfSk7XG5cbiAgZGVmaW5lR2V0dGVyKGNvcmUuTm9kZUl0ZXJhdG9yLnByb3RvdHlwZSwgXCJwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW50ZXJuYWwgPSB0aGlzW0lOVEVSTkFMXTtcbiAgICBpbnRlcm5hbC50aHJvd0lmTm90QWN0aXZlKCk7XG4gICAgcmV0dXJuIGludGVybmFsLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlO1xuICB9KTtcblxuICBkZWZpbmVHZXR0ZXIoY29yZS5Ob2RlSXRlcmF0b3IucHJvdG90eXBlLCBcIndoYXRUb1Nob3dcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzW0lOVEVSTkFMXS53aGF0VG9TaG93O1xuICB9KTtcblxuICBkZWZpbmVHZXR0ZXIoY29yZS5Ob2RlSXRlcmF0b3IucHJvdG90eXBlLCBcImZpbHRlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXNbSU5URVJOQUxdLmZpbHRlcjtcbiAgfSk7XG5cbiAgY29yZS5Ob2RlSXRlcmF0b3IucHJvdG90eXBlLnByZXZpb3VzTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbnRlcm5hbCA9IHRoaXNbSU5URVJOQUxdO1xuICAgIGludGVybmFsLnRocm93SWZOb3RBY3RpdmUoKTtcbiAgICByZXR1cm4gaWRsVXRpbHMud3JhcHBlckZvckltcGwoaW50ZXJuYWwudHJhdmVyc2UoZmFsc2UpKTtcbiAgfTtcblxuICBjb3JlLk5vZGVJdGVyYXRvci5wcm90b3R5cGUubmV4dE5vZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW50ZXJuYWwgPSB0aGlzW0lOVEVSTkFMXTtcbiAgICBpbnRlcm5hbC50aHJvd0lmTm90QWN0aXZlKCk7XG4gICAgcmV0dXJuIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGludGVybmFsLnRyYXZlcnNlKHRydWUpKTtcbiAgfTtcblxuICBjb3JlLk5vZGVJdGVyYXRvci5wcm90b3R5cGUuZGV0YWNoID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG5vb3BcbiAgfTtcblxuICBjb3JlLk5vZGVJdGVyYXRvci5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiTm9kZUl0ZXJhdG9yXCI7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBsZW5ndGhGcm9tUHJvcGVydGllcyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKS5sZW5ndGhGcm9tUHJvcGVydGllcztcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG5jb25zdCBwcml2YXRlcyA9IFN5bWJvbChcIk5vZGVMaXN0IGludGVybmFsIHNsb3RzXCIpO1xuXG5jbGFzcyBOb2RlTGlzdCB7XG4gIGNvbnN0cnVjdG9yKHNlY3JldCwgY29uZmlnKSB7XG4gICAgaWYgKHNlY3JldCAhPT0gcHJpdmF0ZXMpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNvbnN0cnVjdG9yXCIpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcubm9kZXMpIHtcbiAgICAgIHRoaXNbcHJpdmF0ZXNdID0ge1xuICAgICAgICBpc0xpdmU6IGZhbHNlLFxuICAgICAgICBsZW5ndGg6IGNvbmZpZy5ub2Rlcy5sZW5ndGhcbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlnLm5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXNbaV0gPSBjb25maWcubm9kZXNbaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbcHJpdmF0ZXNdID0ge1xuICAgICAgICBpc0xpdmU6IHRydWUsXG4gICAgICAgIGVsZW1lbnQ6IGNvbmZpZy5lbGVtZW50LFxuICAgICAgICBxdWVyeTogY29uZmlnLnF1ZXJ5LFxuICAgICAgICBzbmFwc2hvdDogdW5kZWZpbmVkLFxuICAgICAgICBsZW5ndGg6IDAsXG4gICAgICAgIHZlcnNpb246IC0xXG4gICAgICB9O1xuICAgICAgdXBkYXRlTm9kZUxpc3QodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICB1cGRhdGVOb2RlTGlzdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpc1twcml2YXRlc10ubGVuZ3RoO1xuICB9XG5cbiAgaXRlbShpbmRleCkge1xuICAgIHVwZGF0ZU5vZGVMaXN0KHRoaXMpO1xuICAgIHJldHVybiB0aGlzW2luZGV4XSB8fCBudWxsO1xuICB9XG5cbiAgLy8gVE9ETyByZWltcGxlbWVudCB0aGlzIGluIHdlYmlkbDJqcyBzbyB0aGVzZSBiZWNvbWUgbW9yZSBwZXItc3BlY1xuICAqIGtleXMoKSB7XG4gICAgdXBkYXRlTm9kZUxpc3QodGhpcyk7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpc1twcml2YXRlc10ubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIHlpZWxkIGk7XG4gICAgfVxuICB9XG5cbiAgKiBlbnRyaWVzKCkge1xuICAgIHVwZGF0ZU5vZGVMaXN0KHRoaXMpO1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXNbcHJpdmF0ZXNdLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICB5aWVsZCBbaSwgdGhpc1tpXV07XG4gICAgfVxuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyA9IHVuZGVmaW5lZCkge1xuICAgIGxldCB2YWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMpO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB0aGlzKTtcbiAgICAgIHZhbHVlcyA9IEFycmF5LmZyb20odGhpcyk7XG4gICAgICArK2k7XG4gICAgfVxuICB9XG59XG5cbk5vZGVMaXN0LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gTm9kZUxpc3QucHJvdG90eXBlLnZhbHVlcyA9IEFycmF5LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdO1xuTm9kZUxpc3QucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk5vZGVMaXN0XCI7XG5cbmZ1bmN0aW9uIHVwZGF0ZU5vZGVMaXN0KG5vZGVMaXN0KSB7XG4gIGlmIChub2RlTGlzdFtwcml2YXRlc10uaXNMaXZlKSB7XG4gICAgaWYgKG5vZGVMaXN0W3ByaXZhdGVzXS52ZXJzaW9uIDwgbm9kZUxpc3RbcHJpdmF0ZXNdLmVsZW1lbnQuX3ZlcnNpb24pIHtcbiAgICAgIG5vZGVMaXN0W3ByaXZhdGVzXS5zbmFwc2hvdCA9IG5vZGVMaXN0W3ByaXZhdGVzXS5xdWVyeSgpO1xuICAgICAgcmVzZXROb2RlTGlzdFRvKG5vZGVMaXN0LCBub2RlTGlzdFtwcml2YXRlc10uc25hcHNob3QpO1xuICAgICAgbm9kZUxpc3RbcHJpdmF0ZXNdLnZlcnNpb24gPSBub2RlTGlzdFtwcml2YXRlc10uZWxlbWVudC5fdmVyc2lvbjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbm9kZUxpc3RbcHJpdmF0ZXNdLmxlbmd0aCA9IGxlbmd0aEZyb21Qcm9wZXJ0aWVzKG5vZGVMaXN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldE5vZGVMaXN0VG8obm9kZUxpc3QsIG5vZGVzKSB7XG4gIGNvbnN0IHN0YXJ0aW5nTGVuZ3RoID0gbGVuZ3RoRnJvbVByb3BlcnRpZXMobm9kZUxpc3QpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0aW5nTGVuZ3RoOyArK2kpIHtcbiAgICBkZWxldGUgbm9kZUxpc3RbaV07XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKG5vZGVzW2ldKTtcbiAgICBub2RlTGlzdFtpXSA9IHdyYXBwZXIgPyB3cmFwcGVyIDogbm9kZXNbaV07XG4gIH1cbiAgbm9kZUxpc3RbcHJpdmF0ZXNdLmxlbmd0aCA9IG5vZGVzLmxlbmd0aDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29yZSkge1xuICBjb3JlLk5vZGVMaXN0ID0gTm9kZUxpc3Q7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVMaXZlID0gZnVuY3Rpb24gKGVsZW1lbnQsIHF1ZXJ5KSB7XG4gIHJldHVybiBuZXcgTm9kZUxpc3QocHJpdmF0ZXMsIHsgZWxlbWVudCwgcXVlcnkgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVTdGF0aWMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgcmV0dXJuIG5ldyBOb2RlTGlzdChwcml2YXRlcywgeyBub2RlcyB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnVwZGF0ZSA9IHVwZGF0ZU5vZGVMaXN0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEVMRU1FTlRfTk9ERTogMSxcbiAgQVRUUklCVVRFX05PREU6IDIsIC8vIGhpc3RvcmljYWxcbiAgVEVYVF9OT0RFOiAzLFxuICBDREFUQV9TRUNUSU9OX05PREU6IDQsIC8vIGhpc3RvcmljYWxcbiAgRU5USVRZX1JFRkVSRU5DRV9OT0RFOiA1LCAvLyBoaXN0b3JpY2FsXG4gIEVOVElUWV9OT0RFOiA2LCAvLyBoaXN0b3JpY2FsXG4gIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTogNyxcbiAgQ09NTUVOVF9OT0RFOiA4LFxuICBET0NVTUVOVF9OT0RFOiA5LFxuICBET0NVTUVOVF9UWVBFX05PREU6IDEwLFxuICBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOiAxMSxcbiAgTk9UQVRJT05fTk9ERTogMTIgLy8gaGlzdG9yaWNhbFxufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGF0dHJpYnV0ZXMgPSByZXF1aXJlKFwiLi9hdHRyaWJ1dGVzXCIpO1xuY29uc3QgY2xvbmluZ1N0ZXBzID0gcmVxdWlyZShcIi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuY2xvbmluZ1N0ZXBzO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi9ub2RlLXR5cGVcIik7XG5jb25zdCBvcmRlcmVkU2V0UGFyc2VyID0gcmVxdWlyZShcIi4vaGVscGVycy9vcmRlcmVkLXNldC1wYXJzZXJcIik7XG5jb25zdCBjcmVhdGVIVE1MQ29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuL2h0bWwtY29sbGVjdGlvblwiKS5jcmVhdGU7XG5jb25zdCBkb21Ub2tlbkxpc3RDb250YWlucyA9IHJlcXVpcmUoXCIuL2RvbS10b2tlbi1saXN0XCIpLmNvbnRhaW5zO1xuXG5tb2R1bGUuZXhwb3J0cy5jbG9uZSA9IGZ1bmN0aW9uIChjb3JlLCBub2RlLCBkb2N1bWVudCwgY2xvbmVDaGlsZHJlbikge1xuICBpZiAoZG9jdW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgIGRvY3VtZW50ID0gbm9kZS5fb3duZXJEb2N1bWVudDtcbiAgfVxuXG4gIGxldCBjb3B5O1xuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5PREVfVFlQRS5ET0NVTUVOVF9OT0RFOlxuICAgICAgLy8gVE9ETzoganVzdCB1c2UgRG9jdW1lbnQgd2hlbiB3ZSBlbGltaW5hdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBEb2N1bWVudCBhbmQgSFRNTERvY3VtZW50LlxuICAgICAgaWYgKG5vZGUuY29udGVudFR5cGUgPT09IFwidGV4dC9odG1sXCIpIHsgLy8gbmVlZCB0byBkaWZmZXJlbnRpYXRlIGR1ZSB0byBwYXJzaW5nIG1vZGVcbiAgICAgICAgY29weSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgpO1xuICAgICAgICBjb3B5LnJlbW92ZUNoaWxkKGNvcHkuZG9jdW1lbnRFbGVtZW50KTsgLy8gO187XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3B5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoXCJcIiwgXCJcIiwgbnVsbCk7XG4gICAgICB9XG4gICAgICBkb2N1bWVudCA9IGNvcHk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTk9ERV9UWVBFLkRPQ1VNRU5UX1RZUEVfTk9ERTpcbiAgICAgIGNvcHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudFR5cGUobm9kZS5uYW1lLCBub2RlLnB1YmxpY0lkLCBub2RlLnN5c3RlbUlkKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFOlxuICAgICAgY29weSA9IGRvY3VtZW50Ll9jcmVhdGVFbGVtZW50V2l0aENvcnJlY3RFbGVtZW50SW50ZXJmYWNlKG5vZGUuX2xvY2FsTmFtZSwgbm9kZS5fbmFtZXNwYWNlVVJJKTtcbiAgICAgIGNvcHkuX25hbWVzcGFjZVVSSSA9IG5vZGUuX25hbWVzcGFjZVVSSTtcbiAgICAgIGNvcHkuX3ByZWZpeCA9IG5vZGUuX3ByZWZpeDtcbiAgICAgIGNvcHkuX2xvY2FsTmFtZSA9IG5vZGUuX2xvY2FsTmFtZTtcbiAgICAgIGF0dHJpYnV0ZXMuY29weUF0dHJpYnV0ZUxpc3Qobm9kZSwgY29weSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTk9ERV9UWVBFLlRFWFRfTk9ERTpcbiAgICAgIGNvcHkgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShub2RlLl9kYXRhKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOT0RFX1RZUEUuQ0RBVEFfU0VDVElPTl9OT0RFOlxuICAgICAgY29weSA9IGRvY3VtZW50LmNyZWF0ZUNEQVRBU2VjdGlvbihub2RlLl9kYXRhKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOT0RFX1RZUEUuQ09NTUVOVF9OT0RFOlxuICAgICAgY29weSA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQobm9kZS5fZGF0YSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTk9ERV9UWVBFLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTpcbiAgICAgIGNvcHkgPSBkb2N1bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24obm9kZS50YXJnZXQsIG5vZGUuX2RhdGEpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE5PREVfVFlQRS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlxuICAgICAgY29weSA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgaWYgKG5vZGVbY2xvbmluZ1N0ZXBzXSkge1xuICAgIG5vZGVbY2xvbmluZ1N0ZXBzXShjb3B5LCBub2RlLCBkb2N1bWVudCwgY2xvbmVDaGlsZHJlbik7XG4gIH1cblxuICBpZiAoY2xvbmVDaGlsZHJlbikge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKG5vZGUpKSB7XG4gICAgICBjb25zdCBjaGlsZENvcHkgPSBtb2R1bGUuZXhwb3J0cy5jbG9uZShjb3JlLCBjaGlsZCwgZG9jdW1lbnQsIHRydWUpO1xuICAgICAgY29weS5hcHBlbmRDaGlsZChjaGlsZENvcHkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb3B5O1xufTtcblxuLy8gRm9yIHRoZSBmb2xsb3dpbmcsIG1lbW9pemF0aW9uIGlzIG5vdCBhcHBsaWVkIGhlcmUgc2luY2UgdGhlIG1lbW9pemVkIHJlc3VsdHMgYXJlIHN0b3JlZCBvbiBgdGhpc2AuXG5cbm1vZHVsZS5leHBvcnRzLmxpc3RPZkVsZW1lbnRzV2l0aENsYXNzTmFtZXMgPSAoY2xhc3NOYW1lcywgcm9vdCkgPT4ge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxuXG4gIGNvbnN0IGNsYXNzZXMgPSBvcmRlcmVkU2V0UGFyc2VyKGNsYXNzTmFtZXMpO1xuXG4gIGlmIChjbGFzc2VzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTENvbGxlY3Rpb24ocm9vdCwgKCkgPT4gW10pO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHJvb3QsICgpID0+IHtcbiAgICBjb25zdCBpc1F1aXJrc01vZGUgPSByb290Ll9vd25lckRvY3VtZW50LmNvbXBhdE1vZGUgPT09IFwiQmFja0NvbXBhdFwiO1xuXG4gICAgcmV0dXJuIGRvbVN5bWJvbFRyZWUudHJlZVRvQXJyYXkocm9vdCwgeyBmaWx0ZXIobm9kZSkge1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUgfHwgbm9kZSA9PT0gcm9vdCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIG9mIGNsYXNzZXMpIHtcbiAgICAgICAgaWYgKCFkb21Ub2tlbkxpc3RDb250YWlucyhub2RlLmNsYXNzTGlzdCwgY2xhc3NOYW1lLCB7IGNhc2VJbnNlbnNpdGl2ZTogaXNRdWlya3NNb2RlIH0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gfSk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMubGlzdE9mRWxlbWVudHNXaXRoUXVhbGlmaWVkTmFtZSA9IChxdWFsaWZpZWROYW1lLCByb290KSA9PiB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1nZXRlbGVtZW50c2J5dGFnbmFtZVxuXG4gIGlmIChxdWFsaWZpZWROYW1lID09PSBcIipcIikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MQ29sbGVjdGlvbihyb290LCAoKSA9PiB7XG4gICAgICByZXR1cm4gZG9tU3ltYm9sVHJlZS50cmVlVG9BcnJheShyb290LCB7IGZpbHRlcihub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFICYmIG5vZGUgIT09IHJvb3Q7XG4gICAgICB9IH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJvb3QuX293bmVyRG9jdW1lbnQuX3BhcnNpbmdNb2RlID09PSBcImh0bWxcIikge1xuICAgIGNvbnN0IGxvd2VyUXVhbGlmaWVkTmFtZSA9IHF1YWxpZmllZE5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHJldHVybiBjcmVhdGVIVE1MQ29sbGVjdGlvbihyb290LCAoKSA9PiB7XG4gICAgICByZXR1cm4gZG9tU3ltYm9sVHJlZS50cmVlVG9BcnJheShyb290LCB7IGZpbHRlcihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFIHx8IG5vZGUgPT09IHJvb3QpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIikge1xuICAgICAgICAgIHJldHVybiBub2RlLl9xdWFsaWZpZWROYW1lID09PSBsb3dlclF1YWxpZmllZE5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZS5fcXVhbGlmaWVkTmFtZSA9PT0gcXVhbGlmaWVkTmFtZTtcbiAgICAgIH0gfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlSFRNTENvbGxlY3Rpb24ocm9vdCwgKCkgPT4ge1xuICAgIHJldHVybiBkb21TeW1ib2xUcmVlLnRyZWVUb0FycmF5KHJvb3QsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFIHx8IG5vZGUgPT09IHJvb3QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZS5fcXVhbGlmaWVkTmFtZSA9PT0gcXVhbGlmaWVkTmFtZTtcbiAgICB9IH0pO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmxpc3RPZkVsZW1lbnRzV2l0aE5hbWVzcGFjZUFuZExvY2FsTmFtZSA9IChuYW1lc3BhY2UsIGxvY2FsTmFtZSwgcm9vdCkgPT4ge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZ2V0ZWxlbWVudHNieXRhZ25hbWVuc1xuXG4gIGlmIChuYW1lc3BhY2UgPT09IFwiXCIpIHtcbiAgICBuYW1lc3BhY2UgPSBudWxsO1xuICB9XG5cbiAgaWYgKG5hbWVzcGFjZSA9PT0gXCIqXCIgJiYgbG9jYWxOYW1lID09PSBcIipcIikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MQ29sbGVjdGlvbihyb290LCAoKSA9PiB7XG4gICAgICByZXR1cm4gZG9tU3ltYm9sVHJlZS50cmVlVG9BcnJheShyb290LCB7IGZpbHRlcihub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFICYmIG5vZGUgIT09IHJvb3Q7XG4gICAgICB9IH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKG5hbWVzcGFjZSA9PT0gXCIqXCIpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTENvbGxlY3Rpb24ocm9vdCwgKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvbVN5bWJvbFRyZWUudHJlZVRvQXJyYXkocm9vdCwgeyBmaWx0ZXIobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSB8fCBub2RlID09PSByb290KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuX2xvY2FsTmFtZSA9PT0gbG9jYWxOYW1lO1xuICAgICAgfSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChsb2NhbE5hbWUgPT09IFwiKlwiKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHJvb3QsICgpID0+IHtcbiAgICAgIHJldHVybiBkb21TeW1ib2xUcmVlLnRyZWVUb0FycmF5KHJvb3QsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUgfHwgbm9kZSA9PT0gcm9vdCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlLl9uYW1lc3BhY2VVUkkgPT09IG5hbWVzcGFjZTtcbiAgICAgIH0gfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlSFRNTENvbGxlY3Rpb24ocm9vdCwgKCkgPT4ge1xuICAgIHJldHVybiBkb21TeW1ib2xUcmVlLnRyZWVUb0FycmF5KHJvb3QsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFIHx8IG5vZGUgPT09IHJvb3QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZS5fbG9jYWxOYW1lID09PSBsb2NhbE5hbWUgJiYgbm9kZS5fbmFtZXNwYWNlVVJJID09PSBuYW1lc3BhY2U7XG4gICAgfSB9KTtcbiAgfSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IFRleHRJbXBsID0gcmVxdWlyZShcIi4vVGV4dC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcblxuY2xhc3MgQ0RBVEFTZWN0aW9uSW1wbCBleHRlbmRzIFRleHRJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG5cbiAgICB0aGlzLm5vZGVUeXBlID0gTk9ERV9UWVBFLkNEQVRBX1NFQ1RJT05fTk9ERTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IENEQVRBU2VjdGlvbkltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgTm9kZUltcGwgPSByZXF1aXJlKFwiLi9Ob2RlLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBDaGlsZE5vZGVJbXBsID0gcmVxdWlyZShcIi4vQ2hpbGROb2RlLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGVJbXBsID0gcmVxdWlyZShcIi4vTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5cbmNsYXNzIENoYXJhY3RlckRhdGFJbXBsIGV4dGVuZHMgTm9kZUltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMuX2RhdGEgPSBwcml2YXRlRGF0YS5kYXRhO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cbiAgc2V0IGRhdGEoZGF0YSkge1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5sZW5ndGg7XG4gIH1cblxuICBzdWJzdHJpbmdEYXRhKG9mZnNldCwgY291bnQpIHtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblxuICAgIGlmIChvZmZzZXQgPiBsZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSKTtcbiAgICB9XG5cbiAgICBpZiAob2Zmc2V0ICsgY291bnQgPiBsZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhLnN1YnN0cmluZyhvZmZzZXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9kYXRhLnN1YnN0cmluZyhvZmZzZXQsIG9mZnNldCArIGNvdW50KTtcbiAgfVxuXG4gIGFwcGVuZERhdGEoZGF0YSkge1xuICAgIHRoaXMucmVwbGFjZURhdGEodGhpcy5sZW5ndGgsIDAsIGRhdGEpO1xuICB9XG5cbiAgaW5zZXJ0RGF0YShvZmZzZXQsIGRhdGEpIHtcbiAgICB0aGlzLnJlcGxhY2VEYXRhKG9mZnNldCwgMCwgZGF0YSk7XG4gIH1cblxuICBkZWxldGVEYXRhKG9mZnNldCwgY291bnQpIHtcbiAgICB0aGlzLnJlcGxhY2VEYXRhKG9mZnNldCwgY291bnQsIFwiXCIpO1xuICB9XG5cbiAgcmVwbGFjZURhdGEob2Zmc2V0LCBjb3VudCwgZGF0YSkge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXG4gICAgaWYgKG9mZnNldCA+IGxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpO1xuICAgIH1cblxuICAgIGlmIChvZmZzZXQgKyBjb3VudCA+IGxlbmd0aCkge1xuICAgICAgY291bnQgPSBsZW5ndGggLSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLl9kYXRhLnN1YnN0cmluZygwLCBvZmZzZXQpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuX2RhdGEuc3Vic3RyaW5nKG9mZnNldCArIGNvdW50KTtcblxuICAgIHRoaXMuX2RhdGEgPSBzdGFydCArIGRhdGEgKyBlbmQ7XG5cbiAgICAvLyBUT0RPOiByYW5nZSBzdHVmZlxuICB9XG59XG5cbmlkbFV0aWxzLm1peGluKENoYXJhY3RlckRhdGFJbXBsLnByb3RvdHlwZSwgTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlSW1wbC5wcm90b3R5cGUpO1xuaWRsVXRpbHMubWl4aW4oQ2hhcmFjdGVyRGF0YUltcGwucHJvdG90eXBlLCBDaGlsZE5vZGVJbXBsLnByb3RvdHlwZSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogQ2hhcmFjdGVyRGF0YUltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY2xhc3MgQ2hpbGROb2RlSW1wbCB7XG4gIHJlbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMucGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IENoaWxkTm9kZUltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgQ2hhcmFjdGVyRGF0YUltcGwgPSByZXF1aXJlKFwiLi9DaGFyYWN0ZXJEYXRhLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNvbnN0IE5PREVfVFlQRSA9IHJlcXVpcmUoXCIuLi9ub2RlLXR5cGVcIik7XG5cbmNsYXNzIENvbW1lbnRJbXBsIGV4dGVuZHMgQ2hhcmFjdGVyRGF0YUltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMubm9kZVR5cGUgPSBOT0RFX1RZUEUuQ09NTUVOVF9OT0RFO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogQ29tbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgdmFsaWRhdGVOYW1lcyA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3ZhbGlkYXRlLW5hbWVzXCIpO1xuY29uc3QgRG9jdW1lbnRUeXBlID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9Eb2N1bWVudFR5cGVcIik7XG5jb25zdCBEb2N1bWVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvRG9jdW1lbnRcIik7XG5cbmNsYXNzIERPTUltcGxlbWVudGF0aW9uSW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgdGhpcy5jb3JlID0gcHJpdmF0ZURhdGEuY29yZTtcbiAgICB0aGlzLl9vd25lckRvY3VtZW50ID0gcHJpdmF0ZURhdGEub3duZXJEb2N1bWVudDtcbiAgICB0aGlzLl9mZWF0dXJlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBoYXNGZWF0dXJlKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY3JlYXRlRG9jdW1lbnRUeXBlKHF1YWxpZmllZE5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIHZhbGlkYXRlTmFtZXMucW5hbWUocXVhbGlmaWVkTmFtZSk7XG5cbiAgICByZXR1cm4gRG9jdW1lbnRUeXBlLmNyZWF0ZUltcGwoW10sIHtcbiAgICAgIGNvcmU6IHRoaXMuY29yZSxcbiAgICAgIG93bmVyRG9jdW1lbnQ6IHRoaXMuX293bmVyRG9jdW1lbnQsXG4gICAgICBuYW1lOiBxdWFsaWZpZWROYW1lLFxuICAgICAgcHVibGljSWQsXG4gICAgICBzeXN0ZW1JZFxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRG9jdW1lbnQobmFtZXNwYWNlLCBxdWFsaWZpZWROYW1lLCBkb2N0eXBlKSB7XG4gICAgbmFtZXNwYWNlID0gbmFtZXNwYWNlICE9PSBudWxsID8gU3RyaW5nKG5hbWVzcGFjZSkgOiBuYW1lc3BhY2U7XG4gICAgcXVhbGlmaWVkTmFtZSA9IHF1YWxpZmllZE5hbWUgPT09IG51bGwgPyBcIlwiIDogU3RyaW5nKHF1YWxpZmllZE5hbWUpO1xuICAgIGlmIChkb2N0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRvY3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRvY3VtZW50ID0gRG9jdW1lbnQuY3JlYXRlSW1wbChbXSwge1xuICAgICAgY29yZTogdGhpcy5jb3JlLFxuICAgICAgb3B0aW9uczogeyBwYXJzaW5nTW9kZTogXCJ4bWxcIiwgZW5jb2Rpbmc6IFwiVVRGLThcIiB9XG4gICAgfSk7XG5cbiAgICBsZXQgZWxlbWVudCA9IG51bGw7XG4gICAgaWYgKHF1YWxpZmllZE5hbWUgIT09IFwiXCIpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlLCBxdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoZG9jdHlwZSAhPT0gbnVsbCkge1xuICAgICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jdHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGRvY3VtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBkb2N1bWVudDtcbiAgfVxuXG4gIGNyZWF0ZUhUTUxEb2N1bWVudCh0aXRsZSkge1xuICAgIC8vIExldCBkb2MgYmUgYSBuZXcgZG9jdW1lbnQgdGhhdCBpcyBhbiBIVE1MIGRvY3VtZW50LlxuICAgIC8vIFNldCBkb2MncyBjb250ZW50IHR5cGUgdG8gXCJ0ZXh0L2h0bWxcIi5cbiAgICBjb25zdCBkb2N1bWVudCA9IERvY3VtZW50LmNyZWF0ZUltcGwoW10sIHtcbiAgICAgIGNvcmU6IHRoaXMuY29yZSxcbiAgICAgIG9wdGlvbnM6IHsgcGFyc2luZ01vZGU6IFwiaHRtbFwiLCBlbmNvZGluZzogXCJVVEYtOFwiIH1cbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBhIGRvY3R5cGUsIHdpdGggXCJodG1sXCIgYXMgaXRzIG5hbWUgYW5kIHdpdGggaXRzIG5vZGUgZG9jdW1lbnQgc2V0XG4gICAgLy8gdG8gZG9jLiBBcHBlbmQgdGhlIG5ld2x5IGNyZWF0ZWQgbm9kZSB0byBkb2MuXG4gICAgY29uc3QgZG9jdHlwZSA9IERvY3VtZW50VHlwZS5jcmVhdGVJbXBsKFtdLCB7XG4gICAgICBjb3JlOiB0aGlzLmNvcmUsXG4gICAgICBvd25lckRvY3VtZW50OiB0aGlzLFxuICAgICAgbmFtZTogXCJodG1sXCIsXG4gICAgICBwdWJsaWNJZDogXCJcIixcbiAgICAgIHN5c3RlbUlkOiBcIlwiXG4gICAgfSk7XG5cbiAgICBkb2N1bWVudC5hcHBlbmRDaGlsZChkb2N0eXBlKTtcblxuICAgIC8vIENyZWF0ZSBhbiBodG1sIGVsZW1lbnQgaW4gdGhlIEhUTUwgbmFtZXNwYWNlLCBhbmQgYXBwZW5kIGl0IHRvIGRvYy5cbiAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiwgXCJodG1sXCIpO1xuICAgIGRvY3VtZW50LmFwcGVuZENoaWxkKGh0bWxFbGVtZW50KTtcblxuICAgIC8vIENyZWF0ZSBhIGhlYWQgZWxlbWVudCBpbiB0aGUgSFRNTCBuYW1lc3BhY2UsIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGh0bWxcbiAgICAvLyBlbGVtZW50IGNyZWF0ZWQgaW4gdGhlIHByZXZpb3VzIHN0ZXAuXG4gICAgY29uc3QgaGVhZEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaGVhZFwiKTtcbiAgICBodG1sRWxlbWVudC5hcHBlbmRDaGlsZChoZWFkRWxlbWVudCk7XG5cbiAgICAvLyBJZiB0aGUgdGl0bGUgYXJndW1lbnQgaXMgbm90IG9taXR0ZWQ6XG4gICAgaWYgKHRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENyZWF0ZSBhIHRpdGxlIGVsZW1lbnQgaW4gdGhlIEhUTUwgbmFtZXNwYWNlLCBhbmQgYXBwZW5kIGl0IHRvIHRoZSBoZWFkXG4gICAgICAvLyBlbGVtZW50IGNyZWF0ZWQgaW4gdGhlIHByZXZpb3VzIHN0ZXAuXG4gICAgICBjb25zdCB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGl0bGVcIik7XG4gICAgICBoZWFkRWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpO1xuXG4gICAgICAvLyBDcmVhdGUgYSBUZXh0IG5vZGUsIHNldCBpdHMgZGF0YSB0byB0aXRsZSAod2hpY2ggY291bGQgYmUgdGhlIGVtcHR5XG4gICAgICAvLyBzdHJpbmcpLCBhbmQgYXBwZW5kIGl0IHRvIHRoZSB0aXRsZSBlbGVtZW50IGNyZWF0ZWQgaW4gdGhlIHByZXZpb3VzIHN0ZXAuXG4gICAgICB0aXRsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGl0bGUpKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBib2R5IGVsZW1lbnQgaW4gdGhlIEhUTUwgbmFtZXNwYWNlLCBhbmQgYXBwZW5kIGl0IHRvIHRoZSBodG1sXG4gICAgLy8gZWxlbWVudCBjcmVhdGVkIGluIHRoZSBlYXJsaWVyIHN0ZXAuXG4gICAgaHRtbEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJvZHlcIikpO1xuXG4gICAgLy8gZG9jJ3Mgb3JpZ2luIGlzIGFuIGFsaWFzIHRvIHRoZSBvcmlnaW4gb2YgdGhlIGNvbnRleHQgb2JqZWN0J3MgYXNzb2NpYXRlZFxuICAgIC8vIGRvY3VtZW50LCBhbmQgZG9jJ3MgZWZmZWN0aXZlIHNjcmlwdCBvcmlnaW4gaXMgYW4gYWxpYXMgdG8gdGhlIGVmZmVjdGl2ZVxuICAgIC8vIHNjcmlwdCBvcmlnaW4gb2YgdGhlIGNvbnRleHQgb2JqZWN0J3MgYXNzb2NpYXRlZCBkb2N1bWVudC5cblxuICAgIHJldHVybiBkb2N1bWVudDtcbiAgfVxuXG4gIF9yZW1vdmVGZWF0dXJlKGZlYXR1cmUsIHZlcnNpb24pIHtcbiAgICBmZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0aGlzLl9mZWF0dXJlc1tmZWF0dXJlXSkge1xuICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbnMgPSB0aGlzLl9mZWF0dXJlc1tmZWF0dXJlXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2ZXJzaW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGlmICh2ZXJzaW9uc1tqXSA9PT0gdmVyc2lvbikge1xuICAgICAgICAgICAgdmVyc2lvbnMuc3BsaWNlKGosIDEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2ZlYXR1cmVzW2ZlYXR1cmVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9hZGRGZWF0dXJlKGZlYXR1cmUsIHZlcnNpb24pIHtcbiAgICBmZWF0dXJlID0gZmVhdHVyZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKHZlcnNpb24pIHtcbiAgICAgIGlmICghdGhpcy5fZmVhdHVyZXNbZmVhdHVyZV0pIHtcbiAgICAgICAgdGhpcy5fZmVhdHVyZXNbZmVhdHVyZV0gPSBbXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZlcnNpb24gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLl9mZWF0dXJlc1tmZWF0dXJlXSwgdmVyc2lvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9mZWF0dXJlc1tmZWF0dXJlXS5wdXNoKHZlcnNpb24pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9mZWF0dXJlc1tmZWF0dXJlXSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIF9oYXNGZWF0dXJlKGZlYXR1cmUsIHZlcnNpb24pIHtcbiAgICBmZWF0dXJlID0gZmVhdHVyZSA/IGZlYXR1cmUudG9Mb3dlckNhc2UoKSA6IFwiXCI7XG4gICAgY29uc3QgdmVyc2lvbnMgPSB0aGlzLl9mZWF0dXJlc1tmZWF0dXJlXSB8fCBmYWxzZTtcblxuICAgIGlmICghdmVyc2lvbiAmJiB2ZXJzaW9ucy5sZW5ndGggJiYgdmVyc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmVyc2lvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB2ZXJzaW9ucyA9PT0gdmVyc2lvbjtcbiAgICB9IGVsc2UgaWYgKHZlcnNpb25zLmluZGV4T2YgJiYgdmVyc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJzaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHZlcnNpb25zW2ldIGluc3RhbmNlb2YgUmVnRXhwID8gdmVyc2lvbnNbaV0udGVzdCh2ZXJzaW9uKSA6IHZlcnNpb25zW2ldID09PSB2ZXJzaW9uO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IERPTUltcGxlbWVudGF0aW9uSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBDb29raWVKYXIgPSByZXF1aXJlKFwidG91Z2gtY29va2llXCIpLkNvb2tpZUphcjtcblxuY29uc3QgTm9kZUltcGwgPSByZXF1aXJlKFwiLi9Ob2RlLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBpc05vZGVJbXBsID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9Ob2RlXCIpLmlzSW1wbDtcblxuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcbmNvbnN0IG1lbW9pemVRdWVyeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5tZW1vaXplUXVlcnk7XG5jb25zdCBmaXJzdENoaWxkV2l0aEhUTUxMb2NhbE5hbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuZmlyc3RDaGlsZFdpdGhIVE1MTG9jYWxOYW1lO1xuY29uc3QgZmlyc3RDaGlsZFdpdGhIVE1MTG9jYWxOYW1lcyA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5maXJzdENoaWxkV2l0aEhUTUxMb2NhbE5hbWVzO1xuY29uc3QgZmlyc3REZXNjZW5kYW50V2l0aEhUTUxMb2NhbE5hbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuZmlyc3REZXNjZW5kYW50V2l0aEhUTUxMb2NhbE5hbWU7XG5jb25zdCB3aGF0d2dVUkwgPSByZXF1aXJlKFwid2hhdHdnLXVybFwiKTtcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcbmNvbnN0IHN0cmlwQW5kQ29sbGFwc2VBU0NJSVdoaXRlc3BhY2UgPSByZXF1aXJlKFwiLi4vaGVscGVycy9zdHJpbmdzXCIpLnN0cmlwQW5kQ29sbGFwc2VBU0NJSVdoaXRlc3BhY2U7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5jb25zdCBIdG1sVG9Eb20gPSByZXF1aXJlKFwiLi4vLi4vYnJvd3Nlci9odG1sdG9kb21cIikuSHRtbFRvRG9tO1xuY29uc3QgSGlzdG9yeSA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvSGlzdG9yeVwiKTtcbmNvbnN0IExvY2F0aW9uID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9Mb2NhdGlvblwiKTtcbmNvbnN0IGNyZWF0ZUhUTUxDb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uL2h0bWwtY29sbGVjdGlvblwiKS5jcmVhdGU7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCB2YWxpZGF0ZU5hbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy92YWxpZGF0ZS1uYW1lc1wiKS5uYW1lO1xuY29uc3QgdmFsaWRhdGVBbmRFeHRyYWN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdmFsaWRhdGUtbmFtZXNcIikudmFsaWRhdGVBbmRFeHRyYWN0O1xuY29uc3QgcmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKFwiLi4vLi4vYnJvd3Nlci9yZXNvdXJjZS1sb2FkZXJcIik7XG5cbmNvbnN0IGNsb25lID0gcmVxdWlyZShcIi4uL25vZGVcIikuY2xvbmU7XG5jb25zdCBnZW5lcmF0ZWRBdHRyID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9BdHRyXCIpO1xuY29uc3QgbGlzdE9mRWxlbWVudHNXaXRoUXVhbGlmaWVkTmFtZSA9IHJlcXVpcmUoXCIuLi9ub2RlXCIpLmxpc3RPZkVsZW1lbnRzV2l0aFF1YWxpZmllZE5hbWU7XG5jb25zdCBsaXN0T2ZFbGVtZW50c1dpdGhOYW1lc3BhY2VBbmRMb2NhbE5hbWUgPSByZXF1aXJlKFwiLi4vbm9kZVwiKS5saXN0T2ZFbGVtZW50c1dpdGhOYW1lc3BhY2VBbmRMb2NhbE5hbWU7XG5jb25zdCBsaXN0T2ZFbGVtZW50c1dpdGhDbGFzc05hbWVzID0gcmVxdWlyZShcIi4uL25vZGVcIikubGlzdE9mRWxlbWVudHNXaXRoQ2xhc3NOYW1lcztcbmNvbnN0IENvbW1lbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0NvbW1lbnRcIik7XG5jb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL1Byb2Nlc3NpbmdJbnN0cnVjdGlvblwiKTtcbmNvbnN0IENEQVRBU2VjdGlvbiA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvQ0RBVEFTZWN0aW9uXCIpO1xuY29uc3QgVGV4dCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvVGV4dFwiKTtcbmNvbnN0IERvY3VtZW50RnJhZ21lbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0RvY3VtZW50RnJhZ21lbnRcIik7XG5jb25zdCBET01JbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvRE9NSW1wbGVtZW50YXRpb25cIik7XG5jb25zdCBQYXJlbnROb2RlSW1wbCA9IHJlcXVpcmUoXCIuL1BhcmVudE5vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9IVE1MRWxlbWVudFwiKTtcbmNvbnN0IEhUTUxVbmtub3duRWxlbWVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvSFRNTFVua25vd25FbGVtZW50XCIpO1xuY29uc3QgVHJlZVdhbGtlciA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvVHJlZVdhbGtlclwiKTtcblxuY29uc3QgQ3VzdG9tRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0N1c3RvbUV2ZW50XCIpO1xuY29uc3QgRXJyb3JFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvRXJyb3JFdmVudFwiKTtcbmNvbnN0IEV2ZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9FdmVudFwiKTtcbmNvbnN0IEZvY3VzRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0ZvY3VzRXZlbnRcIik7XG5jb25zdCBIYXNoQ2hhbmdlRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0hhc2hDaGFuZ2VFdmVudFwiKTtcbmNvbnN0IEtleWJvYXJkRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0tleWJvYXJkRXZlbnRcIik7XG5jb25zdCBNZXNzYWdlRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL01lc3NhZ2VFdmVudFwiKTtcbmNvbnN0IE1vdXNlRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL01vdXNlRXZlbnRcIik7XG5jb25zdCBQb3BTdGF0ZUV2ZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9Qb3BTdGF0ZUV2ZW50XCIpO1xuY29uc3QgUHJvZ3Jlc3NFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvUHJvZ3Jlc3NFdmVudFwiKTtcbmNvbnN0IFRvdWNoRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL1RvdWNoRXZlbnRcIik7XG5jb25zdCBVSUV2ZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9VSUV2ZW50XCIpO1xuXG5mdW5jdGlvbiBjbGVhckNoaWxkTm9kZXMobm9kZSkge1xuICBmb3IgKGxldCBjaGlsZCA9IGRvbVN5bWJvbFRyZWUuZmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gZG9tU3ltYm9sVHJlZS5maXJzdENoaWxkKG5vZGUpKSB7XG4gICAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0SW5uZXJIVE1MKGRvY3VtZW50LCBub2RlLCBodG1sKSB7XG4gIC8vIENsZWFyIHRoZSBjaGlsZHJlbiBmaXJzdDpcbiAgaWYgKG5vZGUuX3RlbXBsYXRlQ29udGVudHMpIHtcbiAgICBjbGVhckNoaWxkTm9kZXMobm9kZS5fdGVtcGxhdGVDb250ZW50cyk7XG4gIH0gZWxzZSB7XG4gICAgY2xlYXJDaGlsZE5vZGVzKG5vZGUpO1xuICB9XG5cbiAgaWYgKGh0bWwgIT09IFwiXCIpIHtcbiAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gXCIjZG9jdW1lbnRcIikge1xuICAgICAgZG9jdW1lbnQuX2h0bWxUb0RvbS5hcHBlbmRIdG1sVG9Eb2N1bWVudChodG1sLCBub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuX2h0bWxUb0RvbS5hcHBlbmRIdG1sVG9FbGVtZW50KGh0bWwsIG5vZGUpO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBSZXNvdXJjZVF1ZXVlIHtcbiAgY29uc3RydWN0b3IocGF1c2VkKSB7XG4gICAgdGhpcy5wYXVzZWQgPSBCb29sZWFuKHBhdXNlZCk7XG4gIH1cblxuICBwdXNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcSA9IHRoaXM7XG4gICAgY29uc3QgaXRlbSA9IHtcbiAgICAgIHByZXY6IHEudGFpbCxcbiAgICAgIGNoZWNrKCkge1xuICAgICAgICBpZiAoIXEucGF1c2VkICYmICF0aGlzLnByZXYgJiYgdGhpcy5maXJlZCkge1xuICAgICAgICAgIGNhbGxiYWNrKHRoaXMuZXJyLCB0aGlzLmRhdGEsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIGlmICh0aGlzLm5leHQpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dC5wcmV2ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubmV4dC5jaGVjaygpO1xuICAgICAgICAgIH0gZWxzZSB7IC8vIHEudGFpbD09PXRoaXNcbiAgICAgICAgICAgIHEudGFpbCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocS50YWlsKSB7XG4gICAgICBxLnRhaWwubmV4dCA9IGl0ZW07XG4gICAgfVxuICAgIHEudGFpbCA9IGl0ZW07XG4gICAgcmV0dXJuIChlcnIsIGRhdGEsIHJlc3BvbnNlKSA9PiB7XG4gICAgICBpdGVtLmZpcmVkID0gMTtcbiAgICAgIGl0ZW0uZXJyID0gZXJyO1xuICAgICAgaXRlbS5kYXRhID0gZGF0YTtcbiAgICAgIGl0ZW0ucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgIGl0ZW0uY2hlY2soKTtcbiAgICB9O1xuICB9XG5cbiAgcmVzdW1lKCkge1xuICAgIGlmICghdGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcblxuICAgIGxldCBoZWFkID0gdGhpcy50YWlsO1xuICAgIHdoaWxlIChoZWFkICYmIGhlYWQucHJldikge1xuICAgICAgaGVhZCA9IGhlYWQucHJldjtcbiAgICB9XG4gICAgaWYgKGhlYWQpIHtcbiAgICAgIGhlYWQuY2hlY2soKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm9wZW5lZFJlcXVlc3RzID0gW107XG4gIH1cblxuICBhZGQocmVxKSB7XG4gICAgdGhpcy5vcGVuZWRSZXF1ZXN0cy5wdXNoKHJlcSk7XG4gIH1cblxuICByZW1vdmUocmVxKSB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5vcGVuZWRSZXF1ZXN0cy5pbmRleE9mKHJlcSk7XG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXMub3BlbmVkUmVxdWVzdHMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgZm9yIChjb25zdCBvcGVuZWRSZXF1ZXN0IG9mIHRoaXMub3BlbmVkUmVxdWVzdHMpIHtcbiAgICAgIG9wZW5lZFJlcXVlc3QuYWJvcnQoKTtcbiAgICB9XG4gICAgdGhpcy5vcGVuZWRSZXF1ZXN0cyA9IFtdO1xuICB9XG5cbiAgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuZWRSZXF1ZXN0cy5sZW5ndGg7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFkKG51bWJlcikge1xuICBpZiAobnVtYmVyIDwgMTApIHtcbiAgICByZXR1cm4gXCIwXCIgKyBudW1iZXI7XG4gIH1cbiAgcmV0dXJuIG51bWJlcjtcbn1cblxuZnVuY3Rpb24gdG9MYXN0TW9kaWZpZWRTdHJpbmcoZGF0ZSkge1xuICByZXR1cm4gcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpICtcbiAgICBcIi9cIiArIHBhZChkYXRlLmdldERhdGUoKSkgK1xuICAgIFwiL1wiICsgZGF0ZS5nZXRGdWxsWWVhcigpICtcbiAgICBcIiBcIiArIHBhZChkYXRlLmdldEhvdXJzKCkpICtcbiAgICBcIjpcIiArIHBhZChkYXRlLmdldE1pbnV0ZXMoKSkgK1xuICAgIFwiOlwiICsgcGFkKGRhdGUuZ2V0U2Vjb25kcygpKTtcbn1cblxuY29uc3Qgbm9uSW5oZXJpdGVkVGFncyA9IG5ldyBTZXQoW1xuICBcImFydGljbGVcIiwgXCJzZWN0aW9uXCIsIFwibmF2XCIsIFwiYXNpZGVcIiwgXCJoZ3JvdXBcIiwgXCJoZWFkZXJcIiwgXCJmb290ZXJcIiwgXCJhZGRyZXNzXCIsIFwiZHRcIixcbiAgXCJkZFwiLCBcImZpZ3VyZVwiLCBcImZpZ2NhcHRpb25cIiwgXCJtYWluXCIsIFwiZW1cIiwgXCJzdHJvbmdcIiwgXCJzbWFsbFwiLCBcInNcIiwgXCJjaXRlXCIsIFwiZGZuXCIsIFwiYWJiclwiLFxuICBcInJ1YnlcIiwgXCJydFwiLCBcInJwXCIsIFwiY29kZVwiLCBcInZhclwiLCBcInNhbXBcIiwgXCJrYmRcIiwgXCJpXCIsIFwiYlwiLCBcInVcIiwgXCJtYXJrXCIsIFwiYmRpXCIsIFwiYmRvXCIsIFwid2JyXCJcbl0pO1xuXG5jb25zdCBldmVudEludGVyZmFjZVRhYmxlID0ge1xuICBjdXN0b21ldmVudDogQ3VzdG9tRXZlbnQsXG4gIGVycm9yZXZlbnQ6IEVycm9yRXZlbnQsXG4gIGV2ZW50OiBFdmVudCxcbiAgZXZlbnRzOiBFdmVudCxcbiAgZm9jdXNldmVudDogRm9jdXNFdmVudCxcbiAgaGFzaGNoYW5nZWV2ZW50OiBIYXNoQ2hhbmdlRXZlbnQsXG4gIGh0bWxldmVudHM6IEV2ZW50LFxuICBrZXlib2FyZGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuICBtZXNzYWdlZXZlbnQ6IE1lc3NhZ2VFdmVudCxcbiAgbW91c2VldmVudDogTW91c2VFdmVudCxcbiAgbW91c2VldmVudHM6IE1vdXNlRXZlbnQsXG4gIHBvcHN0YXRlZXZlbnQ6IFBvcFN0YXRlRXZlbnQsXG4gIHByb2dyZXNzZXZlbnQ6IFByb2dyZXNzRXZlbnQsXG4gIHN2Z2V2ZW50czogRXZlbnQsXG4gIHRvdWNoZXZlbnQ6IFRvdWNoRXZlbnQsXG4gIHVpZXZlbnQ6IFVJRXZlbnQsXG4gIHVpZXZlbnRzOiBVSUV2ZW50XG59O1xuXG5jbGFzcyBEb2N1bWVudEltcGwgZXh0ZW5kcyBOb2RlSW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoYXJncywgcHJpdmF0ZURhdGEpO1xuXG4gICAgdGhpcy5fb3duZXJEb2N1bWVudCA9IHRoaXM7XG4gICAgdGhpcy5ub2RlVHlwZSA9IE5PREVfVFlQRS5ET0NVTUVOVF9OT0RFO1xuICAgIGlmICghcHJpdmF0ZURhdGEub3B0aW9ucykge1xuICAgICAgcHJpdmF0ZURhdGEub3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIXByaXZhdGVEYXRhLm9wdGlvbnMucGFyc2luZ01vZGUpIHtcbiAgICAgIHByaXZhdGVEYXRhLm9wdGlvbnMucGFyc2luZ01vZGUgPSBcInhtbFwiO1xuICAgIH1cblxuICAgIHRoaXMuX3BhcnNpbmdNb2RlID0gcHJpdmF0ZURhdGEub3B0aW9ucy5wYXJzaW5nTW9kZTtcbiAgICB0aGlzLl9odG1sVG9Eb20gPSBuZXcgSHRtbFRvRG9tKHByaXZhdGVEYXRhLmNvcmUsIHByaXZhdGVEYXRhLm9wdGlvbnMucGFyc2VyLCBwcml2YXRlRGF0YS5vcHRpb25zLnBhcnNpbmdNb2RlKTtcblxuICAgIHRoaXMuX2ltcGxlbWVudGF0aW9uID0gRE9NSW1wbGVtZW50YXRpb24uY3JlYXRlSW1wbChbXSwge1xuICAgICAgY29yZTogdGhpcy5fY29yZSxcbiAgICAgIG93bmVyRG9jdW1lbnQ6IHRoaXNcbiAgICB9KTtcblxuICAgIHRoaXMuX2RlZmF1bHRWaWV3ID0gcHJpdmF0ZURhdGEub3B0aW9ucy5kZWZhdWx0VmlldyB8fCBudWxsO1xuICAgIHRoaXMuX2dsb2JhbCA9IHByaXZhdGVEYXRhLm9wdGlvbnMuZ2xvYmFsO1xuICAgIHRoaXMuX2RvY3VtZW50RWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy5faWRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9hdHRhY2hlZCA9IHRydWU7XG4gICAgdGhpcy5fY3VycmVudFNjcmlwdCA9IG51bGw7XG4gICAgdGhpcy5fY29va2llSmFyID0gcHJpdmF0ZURhdGEub3B0aW9ucy5jb29raWVKYXI7XG4gICAgdGhpcy5fcGFyc2VPcHRpb25zID0gcHJpdmF0ZURhdGEub3B0aW9ucy5wYXJzZU9wdGlvbnM7XG4gICAgaWYgKHRoaXMuX2Nvb2tpZUphciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jb29raWVKYXIgPSBuZXcgQ29va2llSmFyKG51bGwsIHsgbG9vc2VNb2RlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRlbnRUeXBlID0gcHJpdmF0ZURhdGEub3B0aW9ucy5jb250ZW50VHlwZTtcbiAgICB0aGlzLl9lbmNvZGluZyA9IHByaXZhdGVEYXRhLm9wdGlvbnMuZW5jb2Rpbmc7XG5cbiAgICBjb25zdCB1cmxPcHRpb24gPSBwcml2YXRlRGF0YS5vcHRpb25zLnVybCA9PT0gdW5kZWZpbmVkID8gXCJhYm91dDpibGFua1wiIDogcHJpdmF0ZURhdGEub3B0aW9ucy51cmw7XG4gICAgY29uc3QgcGFyc2VkID0gd2hhdHdnVVJMLnBhcnNlVVJMKHVybE9wdGlvbik7XG4gICAgaWYgKHBhcnNlZCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBcIiR7dXJsT3B0aW9ufVwiIGFzIGEgVVJMYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fVVJMID0gcGFyc2VkO1xuICAgIHRoaXMuX29yaWdpbiA9IHdoYXR3Z1VSTC5zZXJpYWxpemVVUkxUb1VuaWNvZGVPcmlnaW4ocGFyc2VkKTtcblxuICAgIHRoaXMuX2xvY2F0aW9uID0gTG9jYXRpb24uY3JlYXRlSW1wbChbXSwgeyByZWxldmFudERvY3VtZW50OiB0aGlzIH0pO1xuICAgIHRoaXMuX2hpc3RvcnkgPSBIaXN0b3J5LmNyZWF0ZUltcGwoW10sIHtcbiAgICAgIHdpbmRvdzogdGhpcy5fZGVmYXVsdFZpZXcsXG4gICAgICBkb2N1bWVudDogdGhpcyxcbiAgICAgIGFjdEFzSWZMb2NhdGlvblJlbG9hZENhbGxlZDogKCkgPT4gdGhpcy5fbG9jYXRpb24ucmVsb2FkKClcbiAgICB9KTtcblxuICAgIGlmIChwcml2YXRlRGF0YS5vcHRpb25zLmNvb2tpZSkge1xuICAgICAgY29uc3QgY29va2llcyA9IEFycmF5LmlzQXJyYXkocHJpdmF0ZURhdGEub3B0aW9ucy5jb29raWUpID9cbiAgICAgICAgcHJpdmF0ZURhdGEub3B0aW9ucy5jb29raWUgOiBbcHJpdmF0ZURhdGEub3B0aW9ucy5jb29raWVdO1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzO1xuXG4gICAgICBjb29raWVzLmZvckVhY2goY29va2llU3RyID0+IHtcbiAgICAgICAgZG9jdW1lbnQuX2Nvb2tpZUphci5zZXRDb29raWVTeW5jKGNvb2tpZVN0ciwgZG9jdW1lbnQuVVJMLCB7IGlnbm9yZUVycm9yOiB0cnVlIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlTm9kZUl0ZXJhdG9ycyA9IFtdO1xuICAgIHRoaXMuX2FjdGl2ZU5vZGVJdGVyYXRvcnNNYXggPSBwcml2YXRlRGF0YS5vcHRpb25zLmNvbmN1cnJlbnROb2RlSXRlcmF0b3JzID09PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIocHJpdmF0ZURhdGEub3B0aW9ucy5jb25jdXJyZW50Tm9kZUl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoaXNOYU4odGhpcy5fYWN0aXZlTm9kZUl0ZXJhdG9yc01heCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgJ2NvbmN1cnJlbnROb2RlSXRlcmF0b3JzJyBvcHRpb24gbXVzdCBiZSBhIE51bWJlclwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYWN0aXZlTm9kZUl0ZXJhdG9yc01heCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlICdjb25jdXJyZW50Tm9kZUl0ZXJhdG9ycycgb3B0aW9uIG11c3QgYmUgYSBub24gbmVnYXRpdmUgTnVtYmVyXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlZmVycmVyID0gcHJpdmF0ZURhdGEub3B0aW9ucy5yZWZlcnJlciB8fCBcIlwiO1xuICAgIHRoaXMuX2xhc3RNb2RpZmllZCA9IHRvTGFzdE1vZGlmaWVkU3RyaW5nKHByaXZhdGVEYXRhLm9wdGlvbnMubGFzdE1vZGlmaWVkIHx8IG5ldyBEYXRlKCkpO1xuICAgIHRoaXMuX3F1ZXVlID0gbmV3IFJlc291cmNlUXVldWUocHJpdmF0ZURhdGEub3B0aW9ucy5kZWZlckNsb3NlKTtcbiAgICB0aGlzLl9jdXN0b21SZXNvdXJjZUxvYWRlciA9IHByaXZhdGVEYXRhLm9wdGlvbnMucmVzb3VyY2VMb2FkZXI7XG4gICAgdGhpcy5fcG9vbCA9IHByaXZhdGVEYXRhLm9wdGlvbnMucG9vbDtcbiAgICB0aGlzLl9hZ2VudE9wdGlvbnMgPSBwcml2YXRlRGF0YS5vcHRpb25zLmFnZW50T3B0aW9ucztcbiAgICB0aGlzLl9zdHJpY3RTU0wgPSBwcml2YXRlRGF0YS5vcHRpb25zLnN0cmljdFNTTDtcbiAgICB0aGlzLl9wcm94eSA9IHByaXZhdGVEYXRhLm9wdGlvbnMucHJveHk7XG4gICAgdGhpcy5fcmVxdWVzdE1hbmFnZXIgPSBuZXcgUmVxdWVzdE1hbmFnZXIoKTtcbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBcImxvYWRpbmdcIjtcblxuICAgIHRoaXMuX2xhc3RGb2N1c2VkRWxlbWVudCA9IG51bGw7XG4gIH1cblxuICBfZGVmYXVsdEVsZW1lbnRCdWlsZGVyKGRvY3VtZW50LCB0YWdOYW1lKSB7XG4gICAgaWYgKG5vbkluaGVyaXRlZFRhZ3MuaGFzKHRhZ05hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIHJldHVybiBIVE1MRWxlbWVudC5jcmVhdGUoW10sIHtcbiAgICAgICAgY29yZTogdGhpcy5fY29yZSxcbiAgICAgICAgb3duZXJEb2N1bWVudDogdGhpcyxcbiAgICAgICAgbG9jYWxOYW1lOiB0YWdOYW1lXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIEhUTUxVbmtub3duRWxlbWVudC5jcmVhdGUoW10sIHtcbiAgICAgIGNvcmU6IHRoaXMuX2NvcmUsXG4gICAgICBvd25lckRvY3VtZW50OiB0aGlzLFxuICAgICAgbG9jYWxOYW1lOiB0YWdOYW1lXG4gICAgfSk7XG4gIH1cblxuICBnZXQgY29udGVudFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRUeXBlIHx8ICh0aGlzLl9wYXJzaW5nTW9kZSA9PT0gXCJ4bWxcIiA/IFwiYXBwbGljYXRpb24veG1sXCIgOiBcInRleHQvaHRtbFwiKTtcbiAgfVxuICBnZXQgY29tcGF0TW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyc2luZ01vZGUgPT09IFwieG1sXCIgfHwgdGhpcy5kb2N0eXBlID8gXCJDU1MxQ29tcGF0XCIgOiBcIkJhY2tDb21wYXRcIjtcbiAgfVxuICBnZXQgY2hhcnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5jb2Rpbmc7XG4gIH1cbiAgZ2V0IGNoYXJhY3RlclNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5jb2Rpbmc7XG4gIH1cbiAgZ2V0IGlucHV0RW5jb2RpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuY29kaW5nO1xuICB9XG4gIGdldCBkb2N0eXBlKCkge1xuICAgIGZvciAoY29uc3QgY2hpbGROb2RlIG9mIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcih0aGlzKSkge1xuICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkRPQ1VNRU5UX1RZUEVfTk9ERSkge1xuICAgICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXQgVVJMKCkge1xuICAgIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplVVJMKHRoaXMuX1VSTCk7XG4gIH1cbiAgZ2V0IGRvY3VtZW50VVJJKCkge1xuICAgIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplVVJMKHRoaXMuX1VSTCk7XG4gIH1cbiAgZ2V0IG9yaWdpbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3JpZ2luO1xuICB9XG4gIGdldCBsb2NhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZpZXcgPyB0aGlzLl9sb2NhdGlvbiA6IG51bGw7XG4gIH1cbiAgZ2V0IGRvY3VtZW50RWxlbWVudCgpIHtcbiAgICBpZiAodGhpcy5fZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGROb2RlIG9mIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcih0aGlzKSkge1xuICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICB0aGlzLl9kb2N1bWVudEVsZW1lbnQgPSBjaGlsZE5vZGU7XG4gICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgaW1wbGVtZW50YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltcGxlbWVudGF0aW9uO1xuICB9XG4gIHNldCBpbXBsZW1lbnRhdGlvbihpbXBsZW1lbnRhdGlvbikge1xuICAgIHRoaXMuX2ltcGxlbWVudGF0aW9uID0gaW1wbGVtZW50YXRpb247XG4gIH1cblxuICBnZXQgZGVmYXVsdFZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWaWV3O1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTY3JpcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTY3JpcHQ7XG4gIH1cblxuICBnZXQgYWN0aXZlRWxlbWVudCgpIHtcbiAgICBpZiAodGhpcy5fbGFzdEZvY3VzZWRFbGVtZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGFzdEZvY3VzZWRFbGVtZW50O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJvZHk7XG4gIH1cblxuICBoYXNGb2N1cygpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9sYXN0Rm9jdXNlZEVsZW1lbnQpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBIVE1MRG9jdW1lbnRdXCI7XG4gIH1cblxuICBfY3JlYXRlRWxlbWVudFdpdGhDb3JyZWN0RWxlbWVudEludGVyZmFjZShuYW1lLCBuYW1lc3BhY2UpIHtcbiAgICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZWxlbWVudC1pbnRlcmZhY2VcbiAgICAvLyBUT0RPOiBldmVudHVhbGx5IHdlIHNob3VsZCByZS13cml0ZSB0aGUgZWxlbWVudC1idWlsZGVyIHN5c3RlbSB0byBiZSBuYW1lc3BhY2UgYXdhcmUsIGJ1dCBmb3Igbm93IGl0IGlzIG5vdC5cbiAgICBjb25zdCBidWlsZGVyID0gdGhpcy5fZWxlbWVudEJ1aWxkZXJzW25hbWUudG9Mb3dlckNhc2UoKV0gfHwgdGhpcy5fZGVmYXVsdEVsZW1lbnRCdWlsZGVyLmJpbmQodGhpcyk7XG4gICAgY29uc3QgZWxlbSA9IGJ1aWxkZXIodGhpcywgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICByZXR1cm4gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIoZWxlbSk7XG4gIH1cblxuICBhcHBlbmRDaGlsZCgvKiBOb2RlICovIGFyZykge1xuICAgIGlmICh0aGlzLmRvY3VtZW50RWxlbWVudCAmJiBhcmcubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLkhJRVJBUkNIWV9SRVFVRVNUX0VSUik7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5hcHBlbmRDaGlsZChhcmcpO1xuICB9XG5cbiAgcmVtb3ZlQ2hpbGQoLyogTm9kZSAqLyBhcmcpIHtcbiAgICBjb25zdCByZXQgPSBzdXBlci5yZW1vdmVDaGlsZChhcmcpO1xuICAgIGlmIChhcmcgPT09IHRoaXMuX2RvY3VtZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5fZG9jdW1lbnRFbGVtZW50ID0gbnVsbDsvLyBmb3JjZSBhIHJlY2FsY3VsYXRpb25cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIF9kZXNjZW5kYW50UmVtb3ZlZChwYXJlbnQsIGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkLnRhZ05hbWUgPT09IFwiU1RZTEVcIikge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnN0eWxlU2hlZXRzLmluZGV4T2YoY2hpbGQuc2hlZXQpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5zdHlsZVNoZWV0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdyaXRlKCkge1xuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgdGV4dCArPSBTdHJpbmcoYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGFyc2luZ01vZGUgPT09IFwieG1sXCIpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSLCBcIkNhbm5vdCB1c2UgZG9jdW1lbnQud3JpdGUgb24gWE1MIGRvY3VtZW50c1wiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fd3JpdGVBZnRlckVsZW1lbnQpIHtcbiAgICAgIC8vIElmIGNhbGxlZCBmcm9tIGFuIHNjcmlwdCBlbGVtZW50IGRpcmVjdGx5IChkdXJpbmcgdGhlIGZpcnN0IHRpY2spLFxuICAgICAgLy8gdGhlIG5ldyBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgcmlnaHQgYWZ0ZXIgdGhhdCBlbGVtZW50LlxuICAgICAgY29uc3QgdGVtcERpdiA9IHRoaXMuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHNldElubmVySFRNTCh0aGlzLCB0ZW1wRGl2LCB0ZXh0KTtcblxuICAgICAgbGV0IGNoaWxkID0gdGVtcERpdi5maXJzdENoaWxkO1xuICAgICAgbGV0IHByZXZpb3VzID0gdGhpcy5fd3JpdGVBZnRlckVsZW1lbnQ7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl93cml0ZUFmdGVyRWxlbWVudC5wYXJlbnROb2RlO1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkO1xuICAgICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIHByZXZpb3VzLm5leHRTaWJsaW5nKTtcbiAgICAgICAgcHJldmlvdXMgPSBub2RlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5yZWFkeVN0YXRlID09PSBcImxvYWRpbmdcIikge1xuICAgICAgLy8gRHVyaW5nIHBhZ2UgbG9hZGluZywgZG9jdW1lbnQud3JpdGUgYXBwZW5kcyB0byB0aGUgY3VycmVudCBlbGVtZW50XG4gICAgICAvLyBGaW5kIHRoZSBsYXN0IGNoaWxkIHRoYXQgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgbGV0IG5vZGUgPSB0aGlzO1xuICAgICAgd2hpbGUgKG5vZGUubGFzdENoaWxkICYmIG5vZGUubGFzdENoaWxkLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLmxhc3RDaGlsZDtcbiAgICAgIH1cbiAgICAgIHNldElubmVySFRNTCh0aGlzLCBub2RlLCB0ZXh0KTtcbiAgICB9IGVsc2UgaWYgKHRleHQpIHtcbiAgICAgIHNldElubmVySFRNTCh0aGlzLCB0aGlzLCB0ZXh0KTtcbiAgICB9XG4gIH1cblxuICB3cml0ZWxuKCkge1xuICAgIHRoaXMud3JpdGUoLi4uYXJndW1lbnRzLCBcIlxcblwiKTtcbiAgfVxuXG4gIGdldEVsZW1lbnRCeUlkKGlkKSB7XG4gICAgLy8gcmV0dXJuIHRoZSBmaXJzdCBlbGVtZW50XG4gICAgcmV0dXJuIHRoaXMuX2lkc1tpZF0gJiYgdGhpcy5faWRzW2lkXS5sZW5ndGggPiAwID8gdGhpcy5faWRzW2lkXVswXSA6IG51bGw7XG4gIH1cblxuICBnZXQgcmVmZXJyZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZmVycmVyIHx8IFwiXCI7XG4gIH1cbiAgZ2V0IGxhc3RNb2RpZmllZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdE1vZGlmaWVkO1xuICB9XG4gIGdldCBpbWFnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJJTUdcIik7XG4gIH1cbiAgZ2V0IGVtYmVkcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcIkVNQkVEXCIpO1xuICB9XG4gIGdldCBwbHVnaW5zKCkge1xuICAgIHJldHVybiB0aGlzLmVtYmVkcztcbiAgfVxuICBnZXQgbGlua3MoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMsICgpID0+IGRvbVN5bWJvbFRyZWUudHJlZVRvQXJyYXkodGhpcywgeyBmaWx0ZXIobm9kZSkge1xuICAgICAgcmV0dXJuIChub2RlLl9sb2NhbE5hbWUgPT09IFwiYVwiIHx8IG5vZGUuX2xvY2FsTmFtZSA9PT0gXCJhcmVhXCIpICYmXG4gICAgICAgICAgICAgbm9kZS5oYXNBdHRyaWJ1dGUoXCJocmVmXCIpICYmXG4gICAgICAgICAgICAgbm9kZS5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcbiAgICB9IH0pKTtcbiAgfVxuICBnZXQgZm9ybXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJGT1JNXCIpO1xuICB9XG4gIGdldCBzY3JpcHRzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiU0NSSVBUXCIpO1xuICB9XG4gIGdldCBhbmNob3JzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MQ29sbGVjdGlvbih0aGlzLCAoKSA9PiBkb21TeW1ib2xUcmVlLnRyZWVUb0FycmF5KHRoaXMsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLl9sb2NhbE5hbWUgPT09IFwiYVwiICYmXG4gICAgICAgICAgICAgbm9kZS5oYXNBdHRyaWJ1dGUoXCJuYW1lXCIpICYmXG4gICAgICAgICAgICAgbm9kZS5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcbiAgICB9IH0pKTtcbiAgfVxuICBnZXQgYXBwbGV0cygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcIkFQUExFVFwiKTtcbiAgfVxuICBvcGVuKCkge1xuICAgIGxldCBjaGlsZCA9IGRvbVN5bWJvbFRyZWUuZmlyc3RDaGlsZCh0aGlzKTtcbiAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgY2hpbGQgPSBkb21TeW1ib2xUcmVlLmZpcnN0Q2hpbGQodGhpcyk7XG4gICAgfVxuICAgIHRoaXMuX2RvY3VtZW50RWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy5fbW9kaWZpZWQoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBjbG9zZSgpIHtcbiAgICB0aGlzLl9xdWV1ZS5yZXN1bWUoKTtcblxuICAgIC8vIFNldCB0aGUgcmVhZHlTdGF0ZSB0byAnY29tcGxldGUnIG9uY2UgYWxsIHJlc291cmNlcyBhcmUgbG9hZGVkLlxuICAgIC8vIEFzIGEgc2lkZS1lZmZlY3QgdGhlIGRvY3VtZW50J3MgbG9hZC1ldmVudCB3aWxsIGJlIGRpc3BhdGNoZWQuXG4gICAgcmVzb3VyY2VMb2FkZXIuZW5xdWV1ZSh0aGlzLCBudWxsLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLnJlYWR5U3RhdGUgPSBcImNvbXBsZXRlXCI7XG4gICAgICBjb25zdCBldiA9IHRoaXMuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO1xuICAgICAgZXYuaW5pdEV2ZW50KFwiRE9NQ29udGVudExvYWRlZFwiLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2KTtcbiAgICB9KShudWxsLCB0cnVlKTtcbiAgfVxuXG4gIGdldEVsZW1lbnRzQnlOYW1lKGVsZW1lbnROYW1lKSB7XG4gICAgLy8gVE9ETzogc2hvdWxkIGJlIE5vZGVMaXN0LCBzaG91bGQgYmUgbWVtb2l6ZWRcbiAgICByZXR1cm4gY3JlYXRlSFRNTENvbGxlY3Rpb24odGhpcywgKCkgPT4gZG9tU3ltYm9sVHJlZS50cmVlVG9BcnJheSh0aGlzLCB7IGZpbHRlcihub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpID09PSBlbGVtZW50TmFtZTtcbiAgICB9IH0pKTtcbiAgfVxuXG4gIGdldCB0aXRsZSgpIHtcbiAgICAvLyBUT0RPIFNWR1xuXG4gICAgY29uc3QgdGl0bGVFbGVtZW50ID0gZmlyc3REZXNjZW5kYW50V2l0aEhUTUxMb2NhbE5hbWUodGhpcywgXCJ0aXRsZVwiKTtcbiAgICBsZXQgdmFsdWUgPSB0aXRsZUVsZW1lbnQgIT09IG51bGwgPyB0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgOiBcIlwiO1xuICAgIHZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZUFTQ0lJV2hpdGVzcGFjZSh2YWx1ZSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc2V0IHRpdGxlKHZhbCkge1xuICAgIC8vIFRPRE8gU1ZHXG5cbiAgICBjb25zdCB0aXRsZUVsZW1lbnQgPSBmaXJzdERlc2NlbmRhbnRXaXRoSFRNTExvY2FsTmFtZSh0aGlzLCBcInRpdGxlXCIpO1xuICAgIGNvbnN0IGhlYWRFbGVtZW50ID0gdGhpcy5oZWFkO1xuXG4gICAgaWYgKHRpdGxlRWxlbWVudCA9PT0gbnVsbCAmJiBoZWFkRWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBlbGVtZW50O1xuICAgIGlmICh0aXRsZUVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGVsZW1lbnQgPSB0aXRsZUVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJ0aXRsZVwiKTtcbiAgICAgIGhlYWRFbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB2YWw7XG4gIH1cblxuICBnZXQgZGlyKCkge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50RWxlbWVudCA/IHRoaXMuZG9jdW1lbnRFbGVtZW50LmRpciA6IFwiXCI7XG4gIH1cbiAgc2V0IGRpcih2YWx1ZSkge1xuICAgIGlmICh0aGlzLmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5kb2N1bWVudEVsZW1lbnQuZGlyID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhlYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRFbGVtZW50ID8gZmlyc3RDaGlsZFdpdGhIVE1MTG9jYWxOYW1lKHRoaXMuZG9jdW1lbnRFbGVtZW50LCBcImhlYWRcIikgOiBudWxsO1xuICB9XG5cbiAgZ2V0IGJvZHkoKSB7XG4gICAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gdGhpcy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgaWYgKCFkb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnRFbGVtZW50Ll9sb2NhbE5hbWUgIT09IFwiaHRtbFwiIHx8XG4gICAgICAgIGRvY3VtZW50RWxlbWVudC5fbmFtZXNwYWNlVVJJICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0Q2hpbGRXaXRoSFRNTExvY2FsTmFtZXModGhpcy5kb2N1bWVudEVsZW1lbnQsIG5ldyBTZXQoW1wiYm9keVwiLCBcImZyYW1lc2V0XCJdKSk7XG4gIH1cblxuICBzZXQgYm9keSh2YWx1ZSkge1xuICAgIGlmICghSFRNTEVsZW1lbnQuaXNJbXBsKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBIVE1MRWxlbWVudFwiKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLl9uYW1lc3BhY2VVUkkgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiIHx8XG4gICAgICAgICh2YWx1ZS5fbG9jYWxOYW1lICE9PSBcImJvZHlcIiAmJiB2YWx1ZS5fbG9jYWxOYW1lICE9PSBcImZyYW1lc2V0XCIpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5ISUVSQVJDSFlfUkVRVUVTVF9FUlIsIFwiQ2Fubm90IHNldCB0aGUgYm9keSB0byBhIG5vbi1ib2R5L2ZyYW1lc2V0IGVsZW1lbnRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keUVsZW1lbnQgPSB0aGlzLmJvZHk7XG4gICAgaWYgKHZhbHVlID09PSBib2R5RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChib2R5RWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgYm9keUVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodmFsdWUsIGJvZHlFbGVtZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50RWxlbWVudDtcbiAgICBpZiAoZG9jdW1lbnRFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5ISUVSQVJDSFlfUkVRVUVTVF9FUlIsXG4gICAgICAgIFwiQ2Fubm90IHNldCB0aGUgYm9keSB3aGVuIHRoZXJlIGlzIG5vIGRvY3VtZW50IGVsZW1lbnRcIik7XG4gICAgfVxuXG4gICAgZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHZhbHVlKTtcbiAgfVxuXG4gIF9ydW5SZW1vdmluZ1N0ZXBzKG9sZE5vZGUsIG9sZFBhcmVudCwgb2xkUHJldmlvdXNTaWJsaW5nKSB7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gRG9jdW1lbnRJbXBsLl9yZW1vdmluZ1N0ZXBzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICBsaXN0ZW5lcnNbaV0odGhpcywgb2xkTm9kZSwgb2xkUGFyZW50LCBvbGRQcmV2aW91c1NpYmxpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUV2ZW50KHR5cGUpIHtcbiAgICBjb25zdCB0eXBlTG93ZXIgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZXZlbnRXcmFwcGVyID0gZXZlbnRJbnRlcmZhY2VUYWJsZVt0eXBlTG93ZXJdIHx8IG51bGw7XG5cbiAgICBpZiAoIWV2ZW50V3JhcHBlcikge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsXG4gICAgICAgIFwiVGhlIHByb3ZpZGVkIGV2ZW50IHR5cGUgKFxcXCJcIiArIHR5cGUgKyBcIlxcXCIpIGlzIGludmFsaWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgaW1wbCA9IGV2ZW50V3JhcHBlci5jcmVhdGVJbXBsKFtcIlwiXSk7XG4gICAgaW1wbC5faW5pdGlhbGl6ZWRGbGFnID0gZmFsc2U7XG4gICAgcmV0dXJuIGltcGw7XG4gIH1cblxuICBjcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKSB7XG4gICAgdmFsaWRhdGVOYW1lKHRhcmdldCk7XG5cbiAgICBpZiAoZGF0YS5pbmNsdWRlcyhcIj8+XCIpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX0NIQVJBQ1RFUl9FUlIsXG4gICAgICAgIFwiUHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBkYXRhIGNhbm5vdCBjb250YWluIHRoZSBzdHJpbmcgXFxcIj8+XFxcIlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNyZWF0ZUltcGwoW10sIHtcbiAgICAgIGNvcmU6IHRoaXMuX2NvcmUsXG4gICAgICBvd25lckRvY3VtZW50OiB0aGlzLFxuICAgICAgdGFyZ2V0LFxuICAgICAgZGF0YVxuICAgIH0pO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZG9jdW1lbnQtY3JlYXRlY2RhdGFzZWN0aW9uXG4gIGNyZWF0ZUNEQVRBU2VjdGlvbihkYXRhKSB7XG4gICAgaWYgKHRoaXMuX3BhcnNpbmdNb2RlID09PSBcImh0bWxcIikge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsXG4gICAgICAgIFwiQ2Fubm90IGNyZWF0ZSBDREFUQSBzZWN0aW9ucyBpbiBIVE1MIGRvY3VtZW50c1wiKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5pbmNsdWRlcyhcIl1dPlwiKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9DSEFSQUNURVJfRVJSLFxuICAgICAgICBcIkNEQVRBIHNlY3Rpb24gZGF0YSBjYW5ub3QgY29udGFpbiB0aGUgc3RyaW5nIFxcXCJdXT5cXFwiXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBDREFUQVNlY3Rpb24uY3JlYXRlSW1wbChbXSwge1xuICAgICAgY29yZTogdGhpcy5fY29yZSxcbiAgICAgIG93bmVyRG9jdW1lbnQ6IHRoaXMsXG4gICAgICBkYXRhXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVUZXh0Tm9kZShkYXRhKSB7XG4gICAgcmV0dXJuIFRleHQuY3JlYXRlSW1wbChbXSwge1xuICAgICAgY29yZTogdGhpcy5fY29yZSxcbiAgICAgIG93bmVyRG9jdW1lbnQ6IHRoaXMsXG4gICAgICBkYXRhXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVDb21tZW50KGRhdGEpIHtcbiAgICByZXR1cm4gQ29tbWVudC5jcmVhdGVJbXBsKFtdLCB7XG4gICAgICBjb3JlOiB0aGlzLl9jb3JlLFxuICAgICAgb3duZXJEb2N1bWVudDogdGhpcyxcbiAgICAgIGRhdGFcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUVsZW1lbnQobG9jYWxOYW1lKSB7XG4gICAgdmFsaWRhdGVOYW1lKGxvY2FsTmFtZSk7XG4gICAgaWYgKHRoaXMuX3BhcnNpbmdNb2RlID09PSBcImh0bWxcIikge1xuICAgICAgbG9jYWxOYW1lID0gbG9jYWxOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2NyZWF0ZUVsZW1lbnRXaXRoQ29ycmVjdEVsZW1lbnRJbnRlcmZhY2UobG9jYWxOYW1lLCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIik7XG4gICAgZWxlbWVudC5fbmFtZXNwYWNlVVJJID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG4gICAgZWxlbWVudC5fbG9jYWxOYW1lID0gbG9jYWxOYW1lO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBjcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlLCBxdWFsaWZpZWROYW1lKSB7XG4gICAgbmFtZXNwYWNlID0gbmFtZXNwYWNlICE9PSBudWxsID8gU3RyaW5nKG5hbWVzcGFjZSkgOiBuYW1lc3BhY2U7XG5cbiAgICBjb25zdCBleHRyYWN0ZWQgPSB2YWxpZGF0ZUFuZEV4dHJhY3QobmFtZXNwYWNlLCBxdWFsaWZpZWROYW1lKTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9jcmVhdGVFbGVtZW50V2l0aENvcnJlY3RFbGVtZW50SW50ZXJmYWNlKGV4dHJhY3RlZC5sb2NhbE5hbWUsIGV4dHJhY3RlZC5uYW1lc3BhY2UpO1xuICAgIGVsZW1lbnQuX25hbWVzcGFjZVVSSSA9IGV4dHJhY3RlZC5uYW1lc3BhY2U7XG4gICAgZWxlbWVudC5fcHJlZml4ID0gZXh0cmFjdGVkLnByZWZpeDtcbiAgICBlbGVtZW50Ll9sb2NhbE5hbWUgPSBleHRyYWN0ZWQubG9jYWxOYW1lO1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBjcmVhdGVEb2N1bWVudEZyYWdtZW50KCkge1xuICAgIHJldHVybiBEb2N1bWVudEZyYWdtZW50LmNyZWF0ZUltcGwoW10sIHsgb3duZXJEb2N1bWVudDogdGhpcyB9KTtcbiAgfVxuXG4gIGNyZWF0ZUF0dHJpYnV0ZShsb2NhbE5hbWUpIHtcbiAgICB2YWxpZGF0ZU5hbWUobG9jYWxOYW1lKTtcblxuICAgIGlmICh0aGlzLl9wYXJzaW5nTW9kZSA9PT0gXCJodG1sXCIpIHtcbiAgICAgIGxvY2FsTmFtZSA9IGxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBnZW5lcmF0ZWRBdHRyLmNyZWF0ZUltcGwoW10sIHsgbG9jYWxOYW1lIH0pO1xuICB9XG5cbiAgY3JlYXRlQXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWVzcGFjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lc3BhY2UgPSBudWxsO1xuICAgIH1cbiAgICBuYW1lc3BhY2UgPSBuYW1lc3BhY2UgIT09IG51bGwgPyBTdHJpbmcobmFtZXNwYWNlKSA6IG5hbWVzcGFjZTtcblxuICAgIGNvbnN0IGV4dHJhY3RlZCA9IHZhbGlkYXRlQW5kRXh0cmFjdChuYW1lc3BhY2UsIG5hbWUpO1xuICAgIHJldHVybiBnZW5lcmF0ZWRBdHRyLmNyZWF0ZUltcGwoW10sIHtcbiAgICAgIG5hbWVzcGFjZTogZXh0cmFjdGVkLm5hbWVzcGFjZSxcbiAgICAgIG5hbWVzcGFjZVByZWZpeDogZXh0cmFjdGVkLnByZWZpeCxcbiAgICAgIGxvY2FsTmFtZTogZXh0cmFjdGVkLmxvY2FsTmFtZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gVE9ETzogQWRkIGNhbGxiYWNrIGludGVyZmFjZSBzdXBwb3J0IHRvIGB3ZWJpZGwyanNgXG4gIGNyZWF0ZVRyZWVXYWxrZXIocm9vdCwgd2hhdFRvU2hvdywgZmlsdGVyKSB7XG4gICAgaWYgKCFpc05vZGVJbXBsKHJvb3QpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgdG8gY3JlYXRlVHJlZVdhbGtlciBtdXN0IGJlIGEgTm9kZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVHJlZVdhbGtlci5jcmVhdGVJbXBsKFtdLCB7XG4gICAgICByb290LFxuICAgICAgd2hhdFRvU2hvdyxcbiAgICAgIGZpbHRlclxuICAgIH0pO1xuICB9XG5cbiAgaW1wb3J0Tm9kZShub2RlLCBkZWVwKSB7XG4gICAgaWYgKCFpc05vZGVJbXBsKG5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgdG8gaW1wb3J0Tm9kZSBtdXN0IGJlIGEgTm9kZVwiKTtcbiAgICB9XG4gICAgZGVlcCA9IEJvb2xlYW4oZGVlcCk7XG5cbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkRPQ1VNRU5UX05PREUpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLCBcIkNhbm5vdCBpbXBvcnQgYSBkb2N1bWVudCBub2RlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBjbG9uZSh0aGlzLl9jb3JlLCBub2RlLCB0aGlzLCBkZWVwKTtcbiAgfVxuXG4gIGFkb3B0Tm9kZShub2RlKSB7XG4gICAgaWYgKCFpc05vZGVJbXBsKG5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgdG8gYWRvcHROb2RlIG11c3QgYmUgYSBOb2RlXCIpO1xuICAgIH1cbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkRPQ1VNRU5UX05PREUpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLCBcIkNhbm5vdCBhZG9wdCBhIGRvY3VtZW50IG5vZGVcIik7XG4gICAgfVxuICAgIC8vIFRPRE86IERldGVybWluZSBjb3JyZWN0IHdheSB0byBkZXRlY3QgYSBzaGFkb3cgcm9vdFxuICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViY29tcG9uZW50cy9pc3N1ZXMvMTgyXG5cbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgfVxuICAgIG5vZGUuX293bmVyRG9jdW1lbnQgPSB0aGlzO1xuICAgIGZvciAoY29uc3QgZGVzY2VuZGFudCBvZiBkb21TeW1ib2xUcmVlLnRyZWVJdGVyYXRvcihub2RlKSkge1xuICAgICAgZGVzY2VuZGFudC5fb3duZXJEb2N1bWVudCA9IHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBnZXQgY29va2llKCkge1xuICAgIHJldHVybiB0aGlzLl9jb29raWVKYXIuZ2V0Q29va2llU3RyaW5nU3luYyh0aGlzLlVSTCwgeyBodHRwOiBmYWxzZSB9KTtcbiAgfVxuICBzZXQgY29va2llKGNvb2tpZVN0cikge1xuICAgIGNvb2tpZVN0ciA9IFN0cmluZyhjb29raWVTdHIpO1xuICAgIHRoaXMuX2Nvb2tpZUphci5zZXRDb29raWVTeW5jKGNvb2tpZVN0ciwgdGhpcy5VUkwsIHtcbiAgICAgIGh0dHA6IGZhbHNlLFxuICAgICAgaWdub3JlRXJyb3I6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzdHlsZVNoZWV0cygpIHtcbiAgICBpZiAoIXRoaXMuX3N0eWxlU2hlZXRzKSB7XG4gICAgICB0aGlzLl9zdHlsZVNoZWV0cyA9IG5ldyB0aGlzLl9jb3JlLlN0eWxlU2hlZXRMaXN0KCk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZWFjaCBzdHlsZSBhbmQgbGluayBlbGVtZW50IHNob3VsZCByZWdpc3RlciBpdHMgc2hlZXQgb24gY3JlYXRpb25cbiAgICAvLyBhbmQgcmVtb3ZlIGl0IG9uIHJlbW92YWwuXG4gICAgcmV0dXJuIHRoaXMuX3N0eWxlU2hlZXRzO1xuICB9XG5cbiAgZ2V0IGhpZGRlbigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCB2aXNpYmlsaXR5U3RhdGUoKSB7XG4gICAgcmV0dXJuIFwicHJlcmVuZGVyXCI7XG4gIH1cbn1cblxuaWRsVXRpbHMubWl4aW4oRG9jdW1lbnRJbXBsLnByb3RvdHlwZSwgUGFyZW50Tm9kZUltcGwucHJvdG90eXBlKTtcblxuRG9jdW1lbnRJbXBsLl9yZW1vdmluZ1N0ZXBzID0gW107XG5cbkRvY3VtZW50SW1wbC5wcm90b3R5cGUuX2VsZW1lbnRCdWlsZGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbkRvY3VtZW50SW1wbC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBtZW1vaXplUXVlcnkoZnVuY3Rpb24gKHF1YWxpZmllZE5hbWUpIHtcbiAgcmV0dXJuIGxpc3RPZkVsZW1lbnRzV2l0aFF1YWxpZmllZE5hbWUocXVhbGlmaWVkTmFtZSwgdGhpcyk7XG59KTtcblxuRG9jdW1lbnRJbXBsLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TID0gbWVtb2l6ZVF1ZXJ5KGZ1bmN0aW9uIChuYW1lc3BhY2UsIGxvY2FsTmFtZSkge1xuICByZXR1cm4gbGlzdE9mRWxlbWVudHNXaXRoTmFtZXNwYWNlQW5kTG9jYWxOYW1lKG5hbWVzcGFjZSwgbG9jYWxOYW1lLCB0aGlzKTtcbn0pO1xuXG5Eb2N1bWVudEltcGwucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBtZW1vaXplUXVlcnkoZnVuY3Rpb24gZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWVzKSB7XG4gIHJldHVybiBsaXN0T2ZFbGVtZW50c1dpdGhDbGFzc05hbWVzKGNsYXNzTmFtZXMsIHRoaXMpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogRG9jdW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcbmNvbnN0IE5vZGVJbXBsID0gcmVxdWlyZShcIi4vTm9kZS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgUGFyZW50Tm9kZUltcGwgPSByZXF1aXJlKFwiLi9QYXJlbnROb2RlLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNvbnN0IE5PREVfVFlQRSA9IHJlcXVpcmUoXCIuLi9ub2RlLXR5cGVcIik7XG5cbmNsYXNzIERvY3VtZW50RnJhZ21lbnRJbXBsIGV4dGVuZHMgTm9kZUltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMubm9kZVR5cGUgPSBOT0RFX1RZUEUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTtcbiAgfVxufVxuXG5pZGxVdGlscy5taXhpbihEb2N1bWVudEZyYWdtZW50SW1wbC5wcm90b3R5cGUsIFBhcmVudE5vZGVJbXBsLnByb3RvdHlwZSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogRG9jdW1lbnRGcmFnbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG5jb25zdCBOb2RlSW1wbCA9IHJlcXVpcmUoXCIuL05vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IENoaWxkTm9kZUltcGwgPSByZXF1aXJlKFwiLi9DaGlsZE5vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcblxuY2xhc3MgRG9jdW1lbnRUeXBlSW1wbCBleHRlbmRzIE5vZGVJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG5cbiAgICB0aGlzLm5vZGVUeXBlID0gTk9ERV9UWVBFLkRPQ1VNRU5UX1RZUEVfTk9ERTtcblxuICAgIHRoaXMubmFtZSA9IHByaXZhdGVEYXRhLm5hbWU7XG4gICAgdGhpcy5wdWJsaWNJZCA9IHByaXZhdGVEYXRhLnB1YmxpY0lkO1xuICAgIHRoaXMuc3lzdGVtSWQgPSBwcml2YXRlRGF0YS5zeXN0ZW1JZDtcbiAgfVxufVxuXG5pZGxVdGlscy5taXhpbihEb2N1bWVudFR5cGVJbXBsLnByb3RvdHlwZSwgQ2hpbGROb2RlSW1wbC5wcm90b3R5cGUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IERvY3VtZW50VHlwZUltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHZtID0gcmVxdWlyZShcInZtXCIpO1xuY29uc3QgbndtYXRjaGVyID0gcmVxdWlyZShcIm53bWF0Y2hlci9zcmMvbndtYXRjaGVyLW5vcXNhXCIpO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgTm9kZUltcGwgPSByZXF1aXJlKFwiLi9Ob2RlLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBQYXJlbnROb2RlSW1wbCA9IHJlcXVpcmUoXCIuL1BhcmVudE5vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IENoaWxkTm9kZUltcGwgPSByZXF1aXJlKFwiLi9DaGlsZE5vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IGF0dHJpYnV0ZXMgPSByZXF1aXJlKFwiLi4vYXR0cmlidXRlc1wiKTtcbmNvbnN0IG5hbWVkUHJvcGVydGllc1dpbmRvdyA9IHJlcXVpcmUoXCIuLi9uYW1lZC1wcm9wZXJ0aWVzLXdpbmRvd1wiKTtcbmNvbnN0IE5PREVfVFlQRSA9IHJlcXVpcmUoXCIuLi9ub2RlLXR5cGVcIik7XG5jb25zdCBkb21Ub0h0bWwgPSByZXF1aXJlKFwiLi4vLi4vYnJvd3Nlci9kb210b2h0bWxcIikuZG9tVG9IdG1sO1xuY29uc3QgbWVtb2l6ZVF1ZXJ5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLm1lbW9pemVRdWVyeTtcbmNvbnN0IGNsb25lID0gcmVxdWlyZShcIi4uL25vZGVcIikuY2xvbmU7XG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCByZXNldERPTVRva2VuTGlzdCA9IHJlcXVpcmUoXCIuLi9kb20tdG9rZW4tbGlzdFwiKS5yZXNldDtcbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcbmNvbnN0IGNyZWF0ZURPTVRva2VuTGlzdCA9IHJlcXVpcmUoXCIuLi9kb20tdG9rZW4tbGlzdFwiKS5jcmVhdGU7XG5jb25zdCBhdHRyR2VuZXJhdGVkID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9BdHRyXCIpO1xuY29uc3QgdmFsaWRhdGVOYW1lcyA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3ZhbGlkYXRlLW5hbWVzXCIpO1xuY29uc3QgbGlzdE9mRWxlbWVudHNXaXRoUXVhbGlmaWVkTmFtZSA9IHJlcXVpcmUoXCIuLi9ub2RlXCIpLmxpc3RPZkVsZW1lbnRzV2l0aFF1YWxpZmllZE5hbWU7XG5jb25zdCBsaXN0T2ZFbGVtZW50c1dpdGhOYW1lc3BhY2VBbmRMb2NhbE5hbWUgPSByZXF1aXJlKFwiLi4vbm9kZVwiKS5saXN0T2ZFbGVtZW50c1dpdGhOYW1lc3BhY2VBbmRMb2NhbE5hbWU7XG5jb25zdCBsaXN0T2ZFbGVtZW50c1dpdGhDbGFzc05hbWVzID0gcmVxdWlyZShcIi4uL25vZGVcIikubGlzdE9mRWxlbWVudHNXaXRoQ2xhc3NOYW1lcztcbmNvbnN0IHByb3hpZWRXaW5kb3dFdmVudEhhbmRsZXJzID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcHJveGllZC13aW5kb3ctZXZlbnQtaGFuZGxlcnNcIik7XG5jb25zdCBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGUgPSByZXF1aXJlKFwiLi9Ob25Eb2N1bWVudFR5cGVDaGlsZE5vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuLy8gbndtYXRjaGVyIGdldHMgYGRvY3VtZW50LmRvY3VtZW50RWxlbWVudGAgYXQgY3JlYXRpb24tdGltZSwgc28gd2UgaGF2ZSB0byBpbml0aWFsaXplIGxhemlseSwgc2luY2UgaW4gdGhlIGluaXRpYWxcbi8vIHN0YWdlcyBvZiBEb2N1bWVudCBpbml0aWFsaXphdGlvbiwgdGhlcmUgaXMgbm8gZG9jdW1lbnRFbGVtZW50IHByZXNlbnQgeWV0LlxuZnVuY3Rpb24gYWRkTndtYXRjaGVyKHBhcmVudE5vZGUpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBwYXJlbnROb2RlLl9vd25lckRvY3VtZW50O1xuXG4gIGlmICghZG9jdW1lbnQuX253bWF0Y2hlcikge1xuICAgIGRvY3VtZW50Ll9ud21hdGNoZXIgPSBud21hdGNoZXIoeyBkb2N1bWVudCB9KTtcbiAgICBkb2N1bWVudC5fbndtYXRjaGVyLmNvbmZpZ3VyZSh7IFVOSVFVRV9JRDogZmFsc2UgfSk7XG4gIH1cblxuICByZXR1cm4gZG9jdW1lbnQuX253bWF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gY2xlYXJDaGlsZE5vZGVzKG5vZGUpIHtcbiAgZm9yIChsZXQgY2hpbGQgPSBkb21TeW1ib2xUcmVlLmZpcnN0Q2hpbGQobm9kZSk7IGNoaWxkOyBjaGlsZCA9IGRvbVN5bWJvbFRyZWUuZmlyc3RDaGlsZChub2RlKSkge1xuICAgIG5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldElubmVySFRNTChkb2N1bWVudCwgbm9kZSwgaHRtbCkge1xuICAvLyBDbGVhciB0aGUgY2hpbGRyZW4gZmlyc3Q6XG4gIGlmIChub2RlLl90ZW1wbGF0ZUNvbnRlbnRzKSB7XG4gICAgY2xlYXJDaGlsZE5vZGVzKG5vZGUuX3RlbXBsYXRlQ29udGVudHMpO1xuICB9IGVsc2Uge1xuICAgIGNsZWFyQ2hpbGROb2Rlcyhub2RlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVOYW1lID09PSBcIiNkb2N1bWVudFwiKSB7XG4gICAgZG9jdW1lbnQuX2h0bWxUb0RvbS5hcHBlbmRIdG1sVG9Eb2N1bWVudChodG1sLCBub2RlKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5faHRtbFRvRG9tLmFwcGVuZEh0bWxUb0VsZW1lbnQoaHRtbCwgbm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0YWNoSWQoaWQsIGVsbSwgZG9jKSB7XG4gIGlmIChpZCAmJiBlbG0gJiYgZG9jKSB7XG4gICAgaWYgKCFkb2MuX2lkc1tpZF0pIHtcbiAgICAgIGRvYy5faWRzW2lkXSA9IFtdO1xuICAgIH1cbiAgICBkb2MuX2lkc1tpZF0ucHVzaChlbG0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGFjaElkKGlkLCBlbG0sIGRvYykge1xuICBpZiAoaWQgJiYgZWxtICYmIGRvYykge1xuICAgIGlmIChkb2MuX2lkcyAmJiBkb2MuX2lkc1tpZF0pIHtcbiAgICAgIGNvbnN0IGVsbXMgPSBkb2MuX2lkc1tpZF07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGVsbXNbaV0gPT09IGVsbSkge1xuICAgICAgICAgIGVsbXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIC0taTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGVsbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBkb2MuX2lkc1tpZF07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIEVsZW1lbnRJbXBsIGV4dGVuZHMgTm9kZUltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMubm9kZVR5cGUgPSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFO1xuICAgIHRoaXMuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLnNjcm9sbExlZnQgPSAwO1xuXG4gICAgdGhpcy5fbmFtZXNwYWNlVVJJID0gbnVsbDtcbiAgICB0aGlzLl9wcmVmaXggPSBudWxsO1xuICAgIHRoaXMuX2xvY2FsTmFtZSA9IHByaXZhdGVEYXRhLmxvY2FsTmFtZTtcbiAgICB0aGlzLl9hdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jcmVhdGVOYW1lZE5vZGVNYXAodGhpcyk7XG4gIH1cblxuICBfYXR0YWNoKCkge1xuICAgIG5hbWVkUHJvcGVydGllc1dpbmRvdy5ub2RlQXR0YWNoZWRUb0RvY3VtZW50KHRoaXMpO1xuXG4gICAgY29uc3QgaWQgPSB0aGlzLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICAgIGlmIChpZCkge1xuICAgICAgYXR0YWNoSWQoaWQsIHRoaXMsIHRoaXMuX293bmVyRG9jdW1lbnQpO1xuICAgIH1cblxuICAgIHN1cGVyLl9hdHRhY2goKTtcbiAgfVxuXG4gIF9kZXRhY2goKSB7XG4gICAgc3VwZXIuX2RldGFjaCgpO1xuXG4gICAgbmFtZWRQcm9wZXJ0aWVzV2luZG93Lm5vZGVEZXRhY2hlZEZyb21Eb2N1bWVudCh0aGlzKTtcblxuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgICBpZiAoaWQpIHtcbiAgICAgIGRldGFjaElkKGlkLCB0aGlzLCB0aGlzLl9vd25lckRvY3VtZW50KTtcbiAgICB9XG4gIH1cblxuICBfYXR0ck1vZGlmaWVkKG5hbWUsIHZhbHVlLCBvbGRWYWx1ZSkge1xuICAgIHRoaXMuX21vZGlmaWVkKCk7XG4gICAgbmFtZWRQcm9wZXJ0aWVzV2luZG93LmVsZW1lbnRBdHRyaWJ1dGVNb2RpZmllZCh0aGlzLCBuYW1lLCB2YWx1ZSwgb2xkVmFsdWUpO1xuXG4gICAgaWYgKG5hbWUgPT09IFwiaWRcIiAmJiB0aGlzLl9hdHRhY2hlZCkge1xuICAgICAgY29uc3QgZG9jID0gdGhpcy5fb3duZXJEb2N1bWVudDtcbiAgICAgIGRldGFjaElkKG9sZFZhbHVlLCB0aGlzLCBkb2MpO1xuICAgICAgYXR0YWNoSWQodmFsdWUsIHRoaXMsIGRvYyk7XG4gICAgfVxuXG4gICAgY29uc3QgdyA9IHRoaXMuX293bmVyRG9jdW1lbnQuX2dsb2JhbDtcblxuICAgIC8vIFRPRE8gZXZlbnQgaGFuZGxlcnM6XG4gICAgLy8gVGhlIGNvcnJlY3Qgd2F5IHRvIGRvIHRoaXMgaXMgbGF6eSwgYW5kIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQ7IHNlZVxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNldmVudC1oYW5kbGVyLWNvbnRlbnQtYXR0cmlidXRlc1xuICAgIC8vIEl0IHdvdWxkIG9ubHkgYmUgcG9zc2libGUgaWYgd2UgaGFkIHByb3BlciBnZXR0ZXJzL3NldHRlcnMgZm9yIGV2ZXJ5IGV2ZW50IGhhbmRsZXIsIHdoaWNoIHdlIGRvbid0IHJpZ2h0IG5vdy5cbiAgICBpZiAobmFtZS5sZW5ndGggPiAyICYmIG5hbWVbMF0gPT09IFwib1wiICYmIG5hbWVbMV0gPT09IFwiblwiKSB7XG4gICAgICAvLyBJZiB0aGlzIGRvY3VtZW50IGRvZXMgbm90IGhhdmUgYSB3aW5kb3csIHNldCBJREwgYXR0cmlidXRlIHRvIG51bGxcbiAgICAgIC8vIHN0ZXAgMjogaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2dldHRpbmctdGhlLWN1cnJlbnQtdmFsdWUtb2YtdGhlLWV2ZW50LWhhbmRsZXJcbiAgICAgIGlmICh2YWx1ZSAmJiB3KSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSBwcm94aWVkV2luZG93RXZlbnRIYW5kbGVycy5oYXMobmFtZSkgJiYgdGhpcy5fbG9jYWxOYW1lID09PSBcImJvZHlcIiA/IHcgOiB0aGlzO1xuICAgICAgICBjb25zdCB2bU9wdGlvbnMgPSB7IGZpbGVuYW1lOiB0aGlzLl9vd25lckRvY3VtZW50LlVSTCwgZGlzcGxheUVycm9yczogZmFsc2UgfTtcblxuICAgICAgICAvLyBUaGUgaGFuZGxlciBjb2RlIHByb2JhYmx5IHJlZmVycyB0byBmdW5jdGlvbnMgZGVjbGFyZWQgZ2xvYmFsbHkgb24gdGhlIHdpbmRvdywgc28gd2UgbmVlZCB0byBydW4gaXQgaW5cbiAgICAgICAgLy8gdGhhdCBjb250ZXh0LiBJbiBmYWN0LCBpdCdzIHdvcnNlOyBzZWVcbiAgICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvU291cmNlL2JpbmRpbmdzL2NvcmUvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHBcbiAgICAgICAgLy8gcGx1cyB0aGUgc3BlYywgd2hpY2ggc2hvdyBob3cgbXVsdGlwbGUgbmVzdGVkIHNjb3BlcyBhcmUgdGVjaG5pY2FsbHkgcmVxdWlyZWQuIFdlIHdvbid0IGltcGxlbWVudCB0aGF0XG4gICAgICAgIC8vIHVudGlsIHNvbWVvbmUgYXNrcyBmb3IgaXQsIHRob3VnaC5cblxuICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWV2ZW50LWhhbmRsZXItcHJvY2Vzc2luZy1hbGdvcml0aG1cblxuICAgICAgICBpZiAobmFtZSA9PT0gXCJvbmVycm9yXCIgJiYgc2VsZiA9PT0gdykge1xuICAgICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNnZXR0aW5nLXRoZS1jdXJyZW50LXZhbHVlLW9mLXRoZS1ldmVudC1oYW5kbGVyXG4gICAgICAgICAgLy8gc3RlcCAxMFxuXG4gICAgICAgICAgc2VsZltuYW1lXSA9IGZ1bmN0aW9uIChldmVudCwgc291cmNlLCBsaW5lbm8sIGNvbG5vLCBlcnJvcikge1xuICAgICAgICAgICAgdy5fX3RlbXBFdmVudEhhbmRsZXJUaGlzID0gdGhpcztcbiAgICAgICAgICAgIHcuX190ZW1wRXZlbnRIYW5kbGVyRXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgIHcuX190ZW1wRXZlbnRIYW5kbGVyU291cmNlID0gc291cmNlO1xuICAgICAgICAgICAgdy5fX3RlbXBFdmVudEhhbmRsZXJMaW5lbm8gPSBsaW5lbm87XG4gICAgICAgICAgICB3Ll9fdGVtcEV2ZW50SGFuZGxlckNvbG5vID0gY29sbm87XG4gICAgICAgICAgICB3Ll9fdGVtcEV2ZW50SGFuZGxlckVycm9yID0gZXJyb3I7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiB2bS5ydW5JbkNvbnRleHQoYFxuICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoZXZlbnQsIHNvdXJjZSwgbGluZW5vLCBjb2xubywgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICR7dmFsdWV9XG4gICAgICAgICAgICAgICAgfSkuY2FsbChfX3RlbXBFdmVudEhhbmRsZXJUaGlzLCBfX3RlbXBFdmVudEhhbmRsZXJFdmVudCwgX190ZW1wRXZlbnRIYW5kbGVyU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgX190ZW1wRXZlbnRIYW5kbGVyTGluZW5vLCBfX3RlbXBFdmVudEhhbmRsZXJDb2xubywgX190ZW1wRXZlbnRIYW5kbGVyRXJyb3IpYCwgdywgdm1PcHRpb25zKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB3Ll9fdGVtcEV2ZW50SGFuZGxlclRoaXM7XG4gICAgICAgICAgICAgIGRlbGV0ZSB3Ll9fdGVtcEV2ZW50SGFuZGxlckV2ZW50O1xuICAgICAgICAgICAgICBkZWxldGUgdy5fX3RlbXBFdmVudEhhbmRsZXJTb3VyY2U7XG4gICAgICAgICAgICAgIGRlbGV0ZSB3Ll9fdGVtcEV2ZW50SGFuZGxlckxpbmVubztcbiAgICAgICAgICAgICAgZGVsZXRlIHcuX190ZW1wRXZlbnRIYW5kbGVyQ29sbm87XG4gICAgICAgICAgICAgIGRlbGV0ZSB3Ll9fdGVtcEV2ZW50SGFuZGxlckVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZltuYW1lXSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgdy5fX3RlbXBFdmVudEhhbmRsZXJUaGlzID0gdGhpcztcbiAgICAgICAgICAgIHcuX190ZW1wRXZlbnRIYW5kbGVyRXZlbnQgPSBldmVudDtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZtLnJ1bkluQ29udGV4dChgXG4gICAgICAgICAgICAgICAgKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgICAgJHt2YWx1ZX1cbiAgICAgICAgICAgICAgICB9KS5jYWxsKF9fdGVtcEV2ZW50SGFuZGxlclRoaXMsIF9fdGVtcEV2ZW50SGFuZGxlckV2ZW50KWAsIHcsIHZtT3B0aW9ucyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBkZWxldGUgdy5fX3RlbXBFdmVudEhhbmRsZXJUaGlzO1xuICAgICAgICAgICAgICBkZWxldGUgdy5fX3RlbXBFdmVudEhhbmRsZXJFdmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW25hbWVdID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgY2xhc3NMaXN0XG4gICAgaWYgKG5hbWUgPT09IFwiY2xhc3NcIikge1xuICAgICAgcmVzZXRET01Ub2tlbkxpc3QodGhpcy5jbGFzc0xpc3QsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbmFtZXNwYWNlVVJJKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lc3BhY2VVUkk7XG4gIH1cbiAgZ2V0IHByZWZpeCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4O1xuICB9XG4gIGdldCBsb2NhbE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsTmFtZTtcbiAgfVxuICBnZXQgX3F1YWxpZmllZE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZWZpeCAhPT0gbnVsbCA/IHRoaXMuX3ByZWZpeCArIFwiOlwiICsgdGhpcy5fbG9jYWxOYW1lIDogdGhpcy5fbG9jYWxOYW1lO1xuICB9XG4gIGdldCB0YWdOYW1lKCkge1xuICAgIGxldCBxdWFsaWZpZWROYW1lID0gdGhpcy5fcXVhbGlmaWVkTmFtZTtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiICYmIHRoaXMuX293bmVyRG9jdW1lbnQuX3BhcnNpbmdNb2RlID09PSBcImh0bWxcIikge1xuICAgICAgcXVhbGlmaWVkTmFtZSA9IHF1YWxpZmllZE5hbWUudG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1YWxpZmllZE5hbWU7XG4gIH1cblxuICBnZXQgYXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fYXR0cmlidXRlcztcbiAgfVxuXG4gIGdldCBvdXRlckhUTUwoKSB7XG4gICAgcmV0dXJuIGRvbVRvSHRtbChbdGhpc10pO1xuICB9XG5cbiAgc2V0IG91dGVySFRNTChodG1sKSB7XG4gICAgaWYgKGh0bWwgPT09IG51bGwpIHtcbiAgICAgIGh0bWwgPSBcIlwiO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IGRvbVN5bWJvbFRyZWUucGFyZW50KHRoaXMpO1xuICAgIGNvbnN0IGRvY3VtZW50ID0gdGhpcy5fb3duZXJEb2N1bWVudDtcblxuICAgIGlmICghcGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGNvbnRleHRFbGVtZW50O1xuICAgIGlmIChwYXJlbnQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5ET0NVTUVOVF9OT0RFKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJNb2RpZmljYXRpb25zIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBkb2N1bWVudFwiKTtcbiAgICB9IGVsc2UgaWYgKHBhcmVudC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpIHtcbiAgICAgIGNvbnRleHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLCBcImJvZHlcIik7XG4gICAgfSBlbHNlIGlmIChwYXJlbnQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUpIHtcbiAgICAgIGNvbnRleHRFbGVtZW50ID0gY2xvbmUodGhpcy5fY29yZSwgcGFyZW50LCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblwiKTtcbiAgICB9XG5cbiAgICBkb2N1bWVudC5faHRtbFRvRG9tLmFwcGVuZEh0bWxUb0VsZW1lbnQoaHRtbCwgY29udGV4dEVsZW1lbnQpO1xuXG4gICAgd2hpbGUgKGNvbnRleHRFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoY29udGV4dEVsZW1lbnQuZmlyc3RDaGlsZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9XG5cbiAgZ2V0IGlubmVySFRNTCgpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gdGhpcy50YWdOYW1lO1xuICAgIGlmICh0YWdOYW1lID09PSBcIlNDUklQVFwiIHx8IHRhZ05hbWUgPT09IFwiU1RZTEVcIikge1xuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICAgIGlmICghdHlwZSB8fCAvXnRleHRcXC8vaS50ZXN0KHR5cGUpIHx8IC9cXC9qYXZhc2NyaXB0JC9pLnRlc3QodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIGRvbVRvSHRtbChkb21TeW1ib2xUcmVlLmNoaWxkcmVuSXRlcmF0b3IodGhpcykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugb2YgPHRlbXBsYXRlPiB3ZSBzaG91bGQgcGFzcyBpdHMgXCJ0ZW1wbGF0ZSBjb250ZW50c1wiIGZyYWdtZW50IGFzIGEgc2VyaWFsaXphdGlvbiByb290IGlmIHdlIGhhdmUgb25lXG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlQ29udGVudHMpIHtcbiAgICAgIHJldHVybiBkb21Ub0h0bWwoZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHRoaXMuX3RlbXBsYXRlQ29udGVudHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZG9tVG9IdG1sKGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcih0aGlzKSk7XG4gIH1cblxuICBzZXQgaW5uZXJIVE1MKGh0bWwpIHtcbiAgICBpZiAoaHRtbCA9PT0gbnVsbCkge1xuICAgICAgaHRtbCA9IFwiXCI7XG4gICAgfVxuXG4gICAgc2V0SW5uZXJIVE1MKHRoaXMub3duZXJEb2N1bWVudCwgdGhpcywgaHRtbCk7XG4gIH1cblxuICBnZXQgY2xhc3NMaXN0KCkge1xuICAgIGlmICh0aGlzLl9jbGFzc0xpc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2xhc3NMaXN0ID0gY3JlYXRlRE9NVG9rZW5MaXN0KHRoaXMsIFwiY2xhc3NcIik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbGFzc0xpc3Q7XG4gIH1cblxuICBoYXNBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzLmhhc0F0dHJpYnV0ZXModGhpcyk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVOYW1lcygpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlcy5hdHRyaWJ1dGVOYW1lcyh0aGlzKTtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZShuYW1lKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0QXR0cmlidXRlVmFsdWUodGhpcywgbmFtZSk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIGxvY2FsTmFtZSkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzLmdldEF0dHJpYnV0ZVZhbHVlQnlOYW1lTlModGhpcywgbmFtZXNwYWNlLCBsb2NhbE5hbWUpO1xuICB9XG5cbiAgc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7XG4gICAgdmFsaWRhdGVOYW1lcy5uYW1lKG5hbWUpO1xuXG4gICAgaWYgKHRoaXMuX25hbWVzcGFjZVVSSSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIgJiYgdGhpcy5fb3duZXJEb2N1bWVudC5fcGFyc2luZ01vZGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMuZ2V0QXR0cmlidXRlQnlOYW1lKHRoaXMsIG5hbWUpO1xuXG4gICAgaWYgKGF0dHJpYnV0ZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgbmV3QXR0ciA9IGF0dHJHZW5lcmF0ZWQuY3JlYXRlSW1wbChbXSwgeyBsb2NhbE5hbWU6IG5hbWUsIHZhbHVlIH0pO1xuICAgICAgYXR0cmlidXRlcy5hcHBlbmRBdHRyaWJ1dGUodGhpcywgbmV3QXR0cik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXR0cmlidXRlcy5jaGFuZ2VBdHRyaWJ1dGUodGhpcywgYXR0cmlidXRlLCB2YWx1ZSk7XG4gIH1cblxuICBzZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3QgZXh0cmFjdGVkID0gdmFsaWRhdGVOYW1lcy52YWxpZGF0ZUFuZEV4dHJhY3QobmFtZXNwYWNlLCBuYW1lKTtcblxuICAgIGF0dHJpYnV0ZXMuc2V0QXR0cmlidXRlVmFsdWUodGhpcywgZXh0cmFjdGVkLmxvY2FsTmFtZSwgdmFsdWUsIGV4dHJhY3RlZC5wcmVmaXgsIGV4dHJhY3RlZC5uYW1lc3BhY2UpO1xuICB9XG5cbiAgcmVtb3ZlQXR0cmlidXRlKG5hbWUpIHtcbiAgICBhdHRyaWJ1dGVzLnJlbW92ZUF0dHJpYnV0ZUJ5TmFtZSh0aGlzLCBuYW1lKTtcbiAgfVxuXG4gIHJlbW92ZUF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gICAgYXR0cmlidXRlcy5yZW1vdmVBdHRyaWJ1dGVCeU5hbWVOUyh0aGlzLCBuYW1lc3BhY2UsIGxvY2FsTmFtZSk7XG4gIH1cblxuICBoYXNBdHRyaWJ1dGUobmFtZSkge1xuICAgIGlmICh0aGlzLl9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiICYmIHRoaXMuX293bmVyRG9jdW1lbnQuX3BhcnNpbmdNb2RlID09PSBcImh0bWxcIikge1xuICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlcy5oYXNBdHRyaWJ1dGVCeU5hbWUodGhpcywgbmFtZSk7XG4gIH1cblxuICBoYXNBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIGxvY2FsTmFtZSkge1xuICAgIGlmIChuYW1lc3BhY2UgPT09IFwiXCIpIHtcbiAgICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXMuaGFzQXR0cmlidXRlQnlOYW1lTlModGhpcywgbmFtZXNwYWNlLCBsb2NhbE5hbWUpO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlTm9kZShuYW1lKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0QXR0cmlidXRlQnlOYW1lKHRoaXMsIG5hbWUpO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlTm9kZU5TKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0QXR0cmlidXRlQnlOYW1lTlModGhpcywgbmFtZXNwYWNlLCBsb2NhbE5hbWUpO1xuICB9XG5cbiAgc2V0QXR0cmlidXRlTm9kZShhdHRyKSB7XG4gICAgaWYgKCFhdHRyR2VuZXJhdGVkLmlzSW1wbChhdHRyKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IHRvIEVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5vZGUgbXVzdCBiZSBhbiBBdHRyXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRyaWJ1dGVzLnNldEF0dHJpYnV0ZSh0aGlzLCBhdHRyKTtcbiAgfVxuXG4gIHNldEF0dHJpYnV0ZU5vZGVOUyhhdHRyKSB7XG4gICAgaWYgKCFhdHRyR2VuZXJhdGVkLmlzSW1wbChhdHRyKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IHRvIEVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5vZGVOUyBtdXN0IGJlIGFuIEF0dHJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXMuc2V0QXR0cmlidXRlKHRoaXMsIGF0dHIpO1xuICB9XG5cbiAgcmVtb3ZlQXR0cmlidXRlTm9kZShhdHRyKSB7XG4gICAgaWYgKCFhdHRyR2VuZXJhdGVkLmlzSW1wbChhdHRyKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IHRvIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5vZGUgbXVzdCBiZSBhbiBBdHRyXCIpO1xuICAgIH1cblxuICAgIGlmICghYXR0cmlidXRlcy5oYXNBdHRyaWJ1dGUodGhpcywgYXR0cikpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIsIFwiVHJpZWQgdG8gcmVtb3ZlIGFuIGF0dHJpYnV0ZSB0aGF0IHdhcyBub3QgcHJlc2VudFwiKTtcbiAgICB9XG5cbiAgICBhdHRyaWJ1dGVzLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLCBhdHRyKTtcblxuICAgIHJldHVybiBhdHRyO1xuICB9XG5cbiAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBib3R0b206IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0b3A6IDAsXG4gICAgICB3aWR0aDogMFxuICAgIH07XG4gIH1cblxuICBnZXRDbGllbnRSZWN0cygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXQgc2Nyb2xsV2lkdGgoKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBnZXQgc2Nyb2xsSGVpZ2h0KCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IGNsaWVudFRvcCgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldCBjbGllbnRMZWZ0KCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IGNsaWVudFdpZHRoKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IGNsaWVudEhlaWdodCgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9ET00tUGFyc2luZy8jZG9tLWVsZW1lbnQtaW5zZXJ0YWRqYWNlbnRodG1sXG4gIGluc2VydEFkamFjZW50SFRNTChwb3NpdGlvbiwgdGV4dCkge1xuICAgIHBvc2l0aW9uID0gcG9zaXRpb24udG9Mb3dlckNhc2UoKTtcblxuICAgIGxldCBjb250ZXh0O1xuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgIGNhc2UgXCJiZWZvcmViZWdpblwiOlxuICAgICAgY2FzZSBcImFmdGVyZW5kXCI6IHtcbiAgICAgICAgY29udGV4dCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKGNvbnRleHQgPT09IG51bGwgfHwgY29udGV4dC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkRPQ1VNRU5UX05PREUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsIFwiQ2Fubm90IGluc2VydCBIVE1MIGFkamFjZW50IHRvIFwiICtcbiAgICAgICAgICAgIFwicGFyZW50LWxlc3Mgbm9kZXMgb3IgY2hpbGRyZW4gb2YgZG9jdW1lbnQgbm9kZXMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImFmdGVyYmVnaW5cIjpcbiAgICAgIGNhc2UgXCJiZWZvcmVlbmRcIjoge1xuICAgICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIsIFwiTXVzdCBwcm92aWRlIG9uZSBvZiBcXFwiYmVmb3JlYmVnaW5cXFwiLCBcXFwiYWZ0ZXJlbmRcXFwiLCBcIiArXG4gICAgICAgICAgXCJcXFwiYWZ0ZXJiZWdpblxcXCIsIG9yIFxcXCJiZWZvcmVlbmRcXFwiLlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiB1c2UgY29udGV4dCBmb3IgcGFyc2luZyBpbnN0ZWFkIG9mIGEgPHRlbXBsYXRlPi5cbiAgICBjb25zdCBmcmFnbWVudCA9IHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgZnJhZ21lbnQuaW5uZXJIVE1MID0gdGV4dDtcblxuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgIGNhc2UgXCJiZWZvcmViZWdpblwiOiB7XG4gICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZnJhZ21lbnQuY29udGVudCwgdGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImFmdGVyYmVnaW5cIjoge1xuICAgICAgICB0aGlzLmluc2VydEJlZm9yZShmcmFnbWVudC5jb250ZW50LCB0aGlzLmZpcnN0Q2hpbGQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJiZWZvcmVlbmRcIjoge1xuICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGZyYWdtZW50LmNvbnRlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJhZnRlcmVuZFwiOiB7XG4gICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZnJhZ21lbnQuY29udGVudCwgdGhpcy5uZXh0U2libGluZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5pZGxVdGlscy5taXhpbihFbGVtZW50SW1wbC5wcm90b3R5cGUsIE5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS5wcm90b3R5cGUpO1xuaWRsVXRpbHMubWl4aW4oRWxlbWVudEltcGwucHJvdG90eXBlLCBQYXJlbnROb2RlSW1wbC5wcm90b3R5cGUpO1xuaWRsVXRpbHMubWl4aW4oRWxlbWVudEltcGwucHJvdG90eXBlLCBDaGlsZE5vZGVJbXBsLnByb3RvdHlwZSk7XG5cbkVsZW1lbnRJbXBsLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IG1lbW9pemVRdWVyeShmdW5jdGlvbiAocXVhbGlmaWVkTmFtZSkge1xuICByZXR1cm4gbGlzdE9mRWxlbWVudHNXaXRoUXVhbGlmaWVkTmFtZShxdWFsaWZpZWROYW1lLCB0aGlzKTtcbn0pO1xuXG5FbGVtZW50SW1wbC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyA9IG1lbW9pemVRdWVyeShmdW5jdGlvbiAobmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgcmV0dXJuIGxpc3RPZkVsZW1lbnRzV2l0aE5hbWVzcGFjZUFuZExvY2FsTmFtZShuYW1lc3BhY2UsIGxvY2FsTmFtZSwgdGhpcyk7XG59KTtcblxuRWxlbWVudEltcGwucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBtZW1vaXplUXVlcnkoZnVuY3Rpb24gKGNsYXNzTmFtZXMpIHtcbiAgcmV0dXJuIGxpc3RPZkVsZW1lbnRzV2l0aENsYXNzTmFtZXMoY2xhc3NOYW1lcywgdGhpcyk7XG59KTtcblxuRWxlbWVudEltcGwucHJvdG90eXBlLm1hdGNoZXMgPSBtZW1vaXplUXVlcnkoZnVuY3Rpb24gKHNlbGVjdG9ycykge1xuICBjb25zdCBtYXRjaGVyID0gYWRkTndtYXRjaGVyKHRoaXMpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG1hdGNoZXIubWF0Y2goaWRsVXRpbHMud3JhcHBlckZvckltcGwodGhpcyksIHNlbGVjdG9ycyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSLCBlLm1lc3NhZ2UpO1xuICB9XG59KTtcblxuRWxlbWVudEltcGwucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvciA9IEVsZW1lbnRJbXBsLnByb3RvdHlwZS5tYXRjaGVzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNsYXNzIEVsZW1lbnRDU1NJbmxpbmVTdHlsZSB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBFbGVtZW50Q1NTSW5saW5lU3R5bGVcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY2xhc3MgRWxlbWVudENvbnRlbnRFZGl0YWJsZUltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogRWxlbWVudENvbnRlbnRFZGl0YWJsZUltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY2xhc3MgR2xvYmFsRXZlbnRIYW5kbGVyc0ltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogR2xvYmFsRXZlbnRIYW5kbGVyc0ltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzSW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTEFuY2hvckVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG5cbiAgICB0aGlzLl9odG1sSHlwZXJsaW5rRWxlbWVudFV0aWxzU2V0dXAoKTtcbiAgfVxuXG4gIGdldCB0ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnRleHRDb250ZW50O1xuICB9XG4gIHNldCB0ZXh0KHYpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdjtcbiAgfVxufVxuXG5pZGxVdGlscy5taXhpbihIVE1MQW5jaG9yRWxlbWVudEltcGwucHJvdG90eXBlLCBIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzSW1wbC5wcm90b3R5cGUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxBbmNob3JFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgcmVmbGVjdFVSTEF0dHJpYnV0ZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5yZWZsZWN0VVJMQXR0cmlidXRlO1xuXG5jbGFzcyBIVE1MQXBwbGV0RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBnZXQgb2JqZWN0KCkge1xuICAgIHJldHVybiByZWZsZWN0VVJMQXR0cmlidXRlKHRoaXMsIFwib2JqZWN0XCIpO1xuICB9XG5cbiAgc2V0IG9iamVjdChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJvYmplY3RcIiwgVik7XG4gIH1cblxuICBnZXQgY29kZUJhc2UoKSB7XG4gICAgcmV0dXJuIHJlZmxlY3RVUkxBdHRyaWJ1dGUodGhpcywgXCJjb2RlYmFzZVwiKTtcbiAgfVxuXG4gIHNldCBjb2RlQmFzZShWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb2RlYmFzZVwiLCBWKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxBcHBsZXRFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IEhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHNJbXBsID0gcmVxdWlyZShcIi4vSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MQXJlYUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG5cbiAgICB0aGlzLl9odG1sSHlwZXJsaW5rRWxlbWVudFV0aWxzU2V0dXAoKTtcbiAgfVxufVxuXG5pZGxVdGlscy5taXhpbihIVE1MQXJlYUVsZW1lbnRJbXBsLnByb3RvdHlwZSwgSFRNTEh5cGVybGlua0VsZW1lbnRVdGlsc0ltcGwucHJvdG90eXBlKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MQXJlYUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxNZWRpYUVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTE1lZGlhRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MQXVkaW9FbGVtZW50SW1wbCBleHRlbmRzIEhUTUxNZWRpYUVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxBdWRpb0VsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxCUkVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxCUkVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3Qgd2hhdHdnVVJMID0gcmVxdWlyZShcIndoYXR3Zy11cmxcIik7XG5jb25zdCBmYWxsYmFja0Jhc2VVUkwgPSByZXF1aXJlKFwiLi4vaGVscGVycy9kb2N1bWVudC1iYXNlLXVybFwiKS5mYWxsYmFja0Jhc2VVUkw7XG5cbmNsYXNzIEhUTUxCYXNlRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGdldCBocmVmKCkge1xuICAgIGNvbnN0IGRvY3VtZW50ID0gdGhpcy5fb3duZXJEb2N1bWVudDtcblxuICAgIGNvbnN0IHVybCA9IHRoaXMuaGFzQXR0cmlidXRlKFwiaHJlZlwiKSA/IHRoaXMuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA6IFwiXCI7XG4gICAgY29uc3QgcGFyc2VkID0gd2hhdHdnVVJMLnBhcnNlVVJMKHVybCwgeyBiYXNlVVJMOiBmYWxsYmFja0Jhc2VVUkwoZG9jdW1lbnQpIH0pO1xuXG4gICAgaWYgKHBhcnNlZCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVVUkwocGFyc2VkKTtcbiAgfVxuXG4gIHNldCBocmVmKHZhbHVlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxCYXNlRWxlbWVudFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IHByb3hpZWRXaW5kb3dFdmVudEhhbmRsZXJzID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcHJveGllZC13aW5kb3ctZXZlbnQtaGFuZGxlcnNcIik7XG5cbmNsYXNzIEhUTUxCb2R5RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge31cblxuZm9yIChjb25zdCBuYW1lIG9mIHByb3hpZWRXaW5kb3dFdmVudEhhbmRsZXJzKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQm9keUVsZW1lbnRJbXBsLnByb3RvdHlwZSwgbmFtZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHdpbmRvdyA9IHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3O1xuICAgICAgcmV0dXJuIHdpbmRvdyA/IHdpbmRvd1tuYW1lXSA6IG51bGw7XG4gICAgfSxcbiAgICBzZXQoaGFuZGxlcikge1xuICAgICAgY29uc3Qgd2luZG93ID0gdGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXc7XG4gICAgICBpZiAod2luZG93KSB7XG4gICAgICAgIHdpbmRvd1tuYW1lXSA9IGhhbmRsZXI7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MQm9keUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNvbnN0IGNsb3Nlc3QgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuY2xvc2VzdDtcbmNvbnN0IGlzRGlzYWJsZWQgPSByZXF1aXJlKFwiLi4vaGVscGVycy9mb3JtLWNvbnRyb2xzXCIpLmlzRGlzYWJsZWQ7XG5cbmNsYXNzIEhUTUxCdXR0b25FbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIF9hY3RpdmF0aW9uQmVoYXZpb3IoKSB7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybTtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gXCJzdWJtaXRcIiAmJiAhaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgICBmb3JtLl9kaXNwYXRjaFN1Ym1pdEV2ZW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2dldFZhbHVlKCkge1xuICAgIGNvbnN0IHZhbHVlQXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG4gICAgcmV0dXJuIHZhbHVlQXR0ciA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZUF0dHI7XG4gIH1cblxuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gY2xvc2VzdCh0aGlzLCBcImZvcm1cIik7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICBjb25zdCB0eXBlQXR0ciA9ICh0aGlzLmdldEF0dHJpYnV0ZShcInR5cGVcIikgfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICBzd2l0Y2ggKHR5cGVBdHRyKSB7XG4gICAgICBjYXNlIFwic3VibWl0XCI6XG4gICAgICBjYXNlIFwicmVzZXRcIjpcbiAgICAgIGNhc2UgXCJidXR0b25cIjpcbiAgICAgIGNhc2UgXCJtZW51XCI6XG4gICAgICAgIHJldHVybiB0eXBlQXR0cjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcInN1Ym1pdFwiO1xuICAgIH1cbiAgfVxuXG4gIHNldCB0eXBlKHYpIHtcbiAgICB2ID0gU3RyaW5nKHYpLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoICh2KSB7XG4gICAgICBjYXNlIFwic3VibWl0XCI6XG4gICAgICBjYXNlIFwicmVzZXRcIjpcbiAgICAgIGNhc2UgXCJidXR0b25cIjpcbiAgICAgIGNhc2UgXCJtZW51XCI6XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCB2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJzdWJtaXRcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxCdXR0b25FbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IG5vdEltcGxlbWVudGVkID0gcmVxdWlyZShcIi4uLy4uL2Jyb3dzZXIvbm90LWltcGxlbWVudGVkXCIpO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgQ2FudmFzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLkNhbnZhcztcblxuY2xhc3MgSFRNTENhbnZhc0VsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgX2F0dHJNb2RpZmllZChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLl9jYW52YXMgJiYgKG5hbWUgPT09IFwid2lkdGhcIiB8fCBuYW1lID09PSBcImhlaWdodFwiKSkge1xuICAgICAgdGhpcy5fY2FudmFzW25hbWVdID0gcGFyc2VJbnQodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5fYXR0ck1vZGlmaWVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfZ2V0Q2FudmFzKCkge1xuICAgIGlmIChDYW52YXMgJiYgIXRoaXMuX2NhbnZhcykge1xuICAgICAgdGhpcy5fY2FudmFzID0gbmV3IENhbnZhcyh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jYW52YXM7XG4gIH1cblxuICBnZXRDb250ZXh0KGNvbnRleHRJZCkge1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuX2dldENhbnZhcygpO1xuICAgIGlmIChjYW52YXMpIHtcbiAgICAgIGlmICghdGhpcy5fY29udGV4dCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoY29udGV4dElkKSB8fCBudWxsO1xuICAgICAgICBpZiAodGhpcy5fY29udGV4dCkge1xuICAgICAgICAgIC8vIE92ZXJyaWRlIHRoZSBuYXRpdmUgY2FudmFzIHJlZmVyZW5jZSB3aXRoIG91ciB3cmFwcGVyLiBUaGlzIGlzIHRoZVxuICAgICAgICAgIC8vIHJlYXNvbiB3aHkgd2UgbmVlZCB0byBsb2NhbGx5IGNhY2hlIF9jb250ZXh0LCBzaW5jZSBlYWNoIGNhbGwgdG9cbiAgICAgICAgICAvLyBjYW52YXMuZ2V0Q29udGV4dChjb250ZXh0SWQpIHdvdWxkIHJlcGxhY2UgdGhpcyByZWZlcmVuY2UgYWdhaW4uXG4gICAgICAgICAgLy8gUGVyaGFwcyBpbiB0aGUgbG9uZ2VyIHRlcm0sIGEgYmV0dGVyIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGNyZWF0ZSBhXG4gICAgICAgICAgLy8gZnVsbCB3cmFwcGVyIGZvciB0aGUgQ29udGV4dCBvYmplY3QgYXMgd2VsbC5cbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmNhbnZhcyA9IGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRoaXMpO1xuICAgICAgICAgIHdyYXBOb2RlQ2FudmFzTWV0aG9kKHRoaXMuX2NvbnRleHQsIFwiY3JlYXRlUGF0dGVyblwiKTtcbiAgICAgICAgICB3cmFwTm9kZUNhbnZhc01ldGhvZCh0aGlzLl9jb250ZXh0LCBcImRyYXdJbWFnZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG4gICAgfVxuXG4gICAgbm90SW1wbGVtZW50ZWQoXCJIVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuZ2V0Q29udGV4dCAod2l0aG91dCBpbnN0YWxsaW5nIHRoZSBjYW52YXMgbnBtIHBhY2thZ2UpXCIsXG4gICAgICB0aGlzLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0Vmlldyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcm9iYWJseVN1cHBvcnRzQ29udGV4dChjb250ZXh0SWQpIHtcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLl9nZXRDYW52YXMoKTtcbiAgICByZXR1cm4gY2FudmFzID8gY29udGV4dElkID09PSBcIjJkXCIgOiBmYWxzZTtcbiAgfVxuXG4gIHNldENvbnRleHQoKSB7XG4gICAgbm90SW1wbGVtZW50ZWQoXCJIVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuc2V0Q29udGV4dFwiKTtcbiAgfVxuXG4gIHRvRGF0YVVSTCgpIHtcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLl9nZXRDYW52YXMoKTtcbiAgICBpZiAoY2FudmFzKSB7XG4gICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTC5hcHBseSh0aGlzLl9jYW52YXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgbm90SW1wbGVtZW50ZWQoXCJIVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUudG9EYXRhVVJMICh3aXRob3V0IGluc3RhbGxpbmcgdGhlIGNhbnZhcyBucG0gcGFja2FnZSlcIixcbiAgICAgIHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRvQmxvYihjYWxsYmFjaywgdHlwZSwgcXVhbGl0eUFyZ3VtZW50KSB7XG4gICAgY29uc3Qgd2luZG93ID0gdGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXc7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5fZ2V0Q2FudmFzKCk7XG4gICAgaWYgKGNhbnZhcykge1xuICAgICAgbGV0IHN0cmVhbTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiaW1hZ2UvanBnXCI6XG4gICAgICAgIGNhc2UgXCJpbWFnZS9qcGVnXCI6XG4gICAgICAgICAgc3RyZWFtID0gY2FudmFzLmNyZWF0ZUpQRUdTdHJlYW0oe1xuICAgICAgICAgICAgcXVhbGl0eTogTWF0aC5taW4oMCwgTWF0aC5tYXgoMSwgcXVhbGl0eUFyZ3VtZW50KSkgKiAxMDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBUT0RPOiBQYXRjaCBub2RlLWNhbnZhcyB0byByZWNlaXZlIHF1YWxpdHlBcmd1bWVudCBmb3IgUE5HIHN0cmVhbVxuICAgICAgICAgIHR5cGUgPSBcImltYWdlL3BuZ1wiO1xuICAgICAgICAgIHN0cmVhbSA9IGNhbnZhcy5jcmVhdGVQTkdTdHJlYW0oKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTtcbiAgICAgIHN0cmVhbS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xuICAgICAgICBidWZmZXJzLnB1c2goY2h1bmspO1xuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhuZXcgd2luZG93LkJsb2IoYnVmZmVycywgeyB0eXBlIH0pKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RJbXBsZW1lbnRlZChcIkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS50b0Jsb2IgKHdpdGhvdXQgaW5zdGFsbGluZyB0aGUgY2FudmFzIG5wbSBwYWNrYWdlKVwiLFxuICAgICAgICB3aW5kb3cpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB3aWR0aCgpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpKTtcbiAgICByZXR1cm4gaXNOYU4ocGFyc2VkKSB8fCBwYXJzZWQgPCAwIHx8IHBhcnNlZCA+IDIxNDc0ODM2NDcgPyAzMDAgOiBwYXJzZWQ7XG4gIH1cblxuICBzZXQgd2lkdGgodikge1xuICAgIHYgPSB2ID4gMjE0NzQ4MzY0NyA/IDMwMCA6IHY7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBTdHJpbmcodikpO1xuICB9XG5cbiAgZ2V0IGhlaWdodCgpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcImhlaWdodFwiKSk7XG4gICAgcmV0dXJuIGlzTmFOKHBhcnNlZCkgfHwgcGFyc2VkIDwgMCB8fCBwYXJzZWQgPiAyMTQ3NDgzNjQ3ID8gMTUwIDogcGFyc2VkO1xuICB9XG5cbiAgc2V0IGhlaWdodCh2KSB7XG4gICAgdiA9IHYgPiAyMTQ3NDgzNjQ3ID8gMTUwIDogdjtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBTdHJpbmcodikpO1xuICB9XG59XG5cbi8vIFdlIG5lZWQgdG8gd3JhcCB0aGUgbWV0aG9kcyB0aGF0IHJlY2VpdmUgYW4gaW1hZ2Ugb3IgY2FudmFzIG9iamVjdFxuLy8gKGx1Y2tpbHksIGFsd2F5cyBhcyB0aGUgZmlyc3QgYXJndW1lbnQpLCBzbyB0aGF0IHRoZXNlIG9iamVjdHMgY2FuIGJlXG4vLyB1bndyYXBwZWQgYW4gdGhlIGV4cGVjdGVkIHR5cGVzIHBhc3NlZC5cbmZ1bmN0aW9uIHdyYXBOb2RlQ2FudmFzTWV0aG9kKGN0eCwgbmFtZSkge1xuICBjb25zdCBwcmV2ID0gY3R4W25hbWVdO1xuICBjdHhbbmFtZV0gPSBmdW5jdGlvbiAoaW1hZ2UpIHtcbiAgICBjb25zdCBpbXBsID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIoaW1hZ2UpO1xuICAgIGlmIChpbXBsKSB7XG4gICAgICBhcmd1bWVudHNbMF0gPSBpbXBsLl9pbWFnZSB8fCBpbXBsLl9jYW52YXM7XG4gICAgfVxuICAgIHJldHVybiBwcmV2LmFwcGx5KGN0eCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MQ2FudmFzRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTERMaXN0RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTERMaXN0RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTERhdGFFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MRGF0YUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxEYXRhTGlzdEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxEYXRhTGlzdEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxEaWFsb2dFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MRGlhbG9nRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MRGl2RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTERpdkVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgTW91c2VFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvTW91c2VFdmVudFwiKTtcbmNvbnN0IGZvY3VzaW5nID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZm9jdXNpbmcuanNcIik7XG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCBpc0Rpc2FibGVkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZm9ybS1jb250cm9sc1wiKS5pc0Rpc2FibGVkO1xuXG5jbGFzcyBIVE1MRWxlbWVudEltcGwgZXh0ZW5kcyBFbGVtZW50SW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoYXJncywgcHJpdmF0ZURhdGEpO1xuXG4gICAgdGhpcy5fdGFiSW5kZXggPSAwO1xuXG4gICAgdGhpcy5fc2V0dGluZ0Nzc1RleHQgPSBmYWxzZTtcbiAgICB0aGlzLl9jbGlja0luUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIHRoaXMuX3N0eWxlID0gbmV3IHRoaXMuX2NvcmUuQ1NTU3R5bGVEZWNsYXJhdGlvbihuZXdDc3NUZXh0ID0+IHtcbiAgICAgIGlmICghdGhpcy5fc2V0dGluZ0Nzc1RleHQpIHtcbiAgICAgICAgdGhpcy5fc2V0dGluZ0Nzc1RleHQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIG5ld0Nzc1RleHQpO1xuICAgICAgICB0aGlzLl9zZXR0aW5nQ3NzVGV4dCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gQWRkIGRlZmF1bHQgZXZlbnQgYmVoYXZpb3IgKGNsaWNrIGxpbmsgdG8gbmF2aWdhdGUsIGNsaWNrIGJ1dHRvbiB0byBzdWJtaXRcbiAgLy8gZm9ybSwgZXRjKS4gV2Ugc3RhcnQgYnkgd3JhcHBpbmcgZGlzcGF0Y2hFdmVudCBzbyB3ZSBjYW4gZm9yd2FyZCBldmVudHMgdG9cbiAgLy8gdGhlIGVsZW1lbnQncyBkZWZhdWx0IGZ1bmN0aW9ucyAob25seSBldmVudHMgdGhhdCBkaWQgbm90IGluY3VyXG4gIC8vIHByZXZlbnREZWZhdWx0KS5cbiAgZGlzcGF0Y2hFdmVudChldmVudCkge1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIHtcbiAgICAgIGNhbGxFdmVudEJlaGF2aW9ySG9vayhldmVudCwgXCJfcHJlQ2xpY2tBY3RpdmF0aW9uU3RlcHNcIiwgdGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0Y29tZSA9IHN1cGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikge1xuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgY2FsbEV2ZW50QmVoYXZpb3JIb29rKGV2ZW50LCBcIl9jYW5jZWxlZEFjdGl2YXRpb25TdGVwc1wiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxFdmVudEJlaGF2aW9ySG9vayhldmVudCwgXCJfYWN0aXZhdGlvbkJlaGF2aW9yXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRjb21lO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgaWYgKCFmb2N1c2luZy5pc0ZvY3VzYWJsZUFyZWFFbGVtZW50KHRoaXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLl9vd25lckRvY3VtZW50Ll9sYXN0Rm9jdXNlZEVsZW1lbnQ7XG5cbiAgICBmb2N1c2luZy5maXJlRm9jdXNFdmVudFdpdGhUYXJnZXRBZGp1c3RtZW50KFwiYmx1clwiLCBwcmV2aW91cywgdGhpcyk7XG4gICAgdGhpcy5fb3duZXJEb2N1bWVudC5fbGFzdEZvY3VzZWRFbGVtZW50ID0gdGhpcztcbiAgICBmb2N1c2luZy5maXJlRm9jdXNFdmVudFdpdGhUYXJnZXRBZGp1c3RtZW50KFwiZm9jdXNcIiwgdGhpcywgcHJldmlvdXMpO1xuXG4gICAgaWYgKHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3Ll9mcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3Ll9mcmFtZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBibHVyKCkge1xuICAgIGlmICh0aGlzLl9vd25lckRvY3VtZW50Ll9sYXN0Rm9jdXNlZEVsZW1lbnQgIT09IHRoaXMgfHwgIWZvY3VzaW5nLmlzRm9jdXNhYmxlQXJlYUVsZW1lbnQodGhpcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb2N1c2luZy5maXJlRm9jdXNFdmVudFdpdGhUYXJnZXRBZGp1c3RtZW50KFwiYmx1clwiLCB0aGlzLCB0aGlzLl9vd25lckRvY3VtZW50KTtcbiAgICB0aGlzLl9vd25lckRvY3VtZW50Ll9sYXN0Rm9jdXNlZEVsZW1lbnQgPSBudWxsO1xuICAgIGZvY3VzaW5nLmZpcmVGb2N1c0V2ZW50V2l0aFRhcmdldEFkanVzdG1lbnQoXCJmb2N1c1wiLCB0aGlzLl9vd25lckRvY3VtZW50LCB0aGlzKTtcbiAgfVxuXG4gIGNsaWNrKCkge1xuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2ludGVyYWN0aW9uLmh0bWwjZG9tLWNsaWNrXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNydW4tc3ludGhldGljLWNsaWNrLWFjdGl2YXRpb24tc3RlcHNcbiAgICAvLyBOb3QgY29tcGxldGVseSBzcGVjIGNvbXBsaWFudCBkdWUgdG8gZS5nLiBpbmNvbXBsZXRlIGltcGxlbWVudGF0aW9ucyBvZiBkaXNhYmxlZCBmb3IgZm9ybSBjb250cm9scywgb3Igbm9cbiAgICAvLyBpbXBsZW1lbnRhdGlvbiBhdCBhbGwgb2YgaXNUcnVzdGVkLlxuXG4gICAgaWYgKHRoaXMuX2NsaWNrSW5Qcm9ncmVzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NsaWNrSW5Qcm9ncmVzcyA9IHRydWU7XG5cbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50ID0gTW91c2VFdmVudC5jcmVhdGVJbXBsKFtcImNsaWNrXCIsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9XSwge30pO1xuXG4gICAgLy8gUnVuIHN5bnRoZXRpYyBjbGljayBhY3RpdmF0aW9uIHN0ZXBzLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsXG4gICAgLy8gdGhpcyBzaG91bGQgbm90IGJlIGNhbGxpbmcgZGlzcGF0Y2hFdmVudCwgYnV0IGl0IG1hdGNoZXMgYnJvd3NlciBiZWhhdmlvci5cbiAgICAvLyBTZWU6IGh0dHBzOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MTIyMzBcbiAgICAvLyBTZWUgYWxzbzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy84MDVcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXG5cbiAgICB0aGlzLl9jbGlja0luUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgfVxuXG4gIGdldCBkaXIoKSB7XG4gICAgbGV0IGRpclZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJkaXJcIik7XG4gICAgaWYgKGRpclZhbHVlICE9PSBudWxsKSB7XG4gICAgICBkaXJWYWx1ZSA9IGRpclZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChbXCJsdHJcIiwgXCJydGxcIiwgXCJhdXRvXCJdLmluY2x1ZGVzKGRpclZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZGlyVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHNldCBkaXIodmFsdWUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRpclwiLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQgc3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0eWxlO1xuICB9XG4gIHNldCBzdHlsZSh2YWx1ZSkge1xuICAgIHRoaXMuX3N0eWxlLmNzc1RleHQgPSB2YWx1ZTtcbiAgfVxuXG4gIF9hdHRyTW9kaWZpZWQobmFtZSwgdmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgaWYgKG5hbWUgPT09IFwic3R5bGVcIiAmJiB2YWx1ZSAhPT0gb2xkVmFsdWUgJiYgIXRoaXMuX3NldHRpbmdDc3NUZXh0KSB7XG4gICAgICB0aGlzLl9zZXR0aW5nQ3NzVGV4dCA9IHRydWU7XG4gICAgICB0aGlzLl9zdHlsZS5jc3NUZXh0ID0gdmFsdWU7XG4gICAgICB0aGlzLl9zZXR0aW5nQ3NzVGV4dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHN1cGVyLl9hdHRyTW9kaWZpZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBzaG91bGQgYmUgW1JlZmxlY3RdYWJsZSBpZiB3ZSBhZGRlZCBkZWZhdWx0IHZhbHVlIHN1cHBvcnQgdG8gd2ViaWRsMmpzJ3MgW1JlZmxlY3RdXG4gIGdldCB0YWJJbmRleCgpIHtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwidGFiaW5kZXhcIikpIHtcbiAgICAgIHJldHVybiBmb2N1c2luZy5pc0ZvY3VzYWJsZUFyZWFFbGVtZW50KHRoaXMpID8gMCA6IC0xO1xuICAgIH1cbiAgICByZXR1cm4gY29udmVyc2lvbnMubG9uZyh0aGlzLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpKTtcbiAgfVxuXG4gIHNldCB0YWJJbmRleCh2YWx1ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidGFiSW5kZXhcIiwgU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICBnZXQgb2Zmc2V0UGFyZW50KCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IG9mZnNldFRvcCgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldCBvZmZzZXRMZWZ0KCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IG9mZnNldFdpZHRoKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IG9mZnNldEhlaWdodCgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsRXZlbnRCZWhhdmlvckhvb2soZXZlbnQsIG5hbWUsIHRhcmdldE92ZXJyaWRlKSB7XG4gIGlmIChldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldE92ZXJyaWRlIHx8IGV2ZW50LnRhcmdldDtcbiAgICBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXRbbmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGFyZ2V0W25hbWVdKCk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCByZWZsZWN0VVJMQXR0cmlidXRlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLnJlZmxlY3RVUkxBdHRyaWJ1dGU7XG5cbmNsYXNzIEhUTUxFbWJlZEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgZ2V0IHNyYygpIHtcbiAgICByZXR1cm4gcmVmbGVjdFVSTEF0dHJpYnV0ZSh0aGlzLCBcInNyY1wiKTtcbiAgfVxuXG4gIHNldCBzcmModmFsdWUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNyY1wiLCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MRW1iZWRFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgY2xvc2VzdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5jbG9zZXN0O1xuXG5jbGFzcyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiBjbG9zZXN0KHRoaXMsIFwiZm9ybVwiKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxGb250RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEZvbnRFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgZGVzY2VuZGFudHNCeUhUTUxMb2NhbE5hbWVzID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmRlc2NlbmRhbnRzQnlIVE1MTG9jYWxOYW1lcztcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcbmNvbnN0IGNyZWF0ZUhUTUxDb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL2xpdmluZy9odG1sLWNvbGxlY3Rpb25cIikuY3JlYXRlO1xuY29uc3Qgbm90SW1wbGVtZW50ZWQgPSByZXF1aXJlKFwiLi4vLi4vYnJvd3Nlci9ub3QtaW1wbGVtZW50ZWRcIik7XG5jb25zdCByZWZsZWN0VVJMQXR0cmlidXRlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLnJlZmxlY3RVUkxBdHRyaWJ1dGU7XG5cbi8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI2NhdGVnb3J5LWxpc3RlZFxuY29uc3QgbGlzdGVkRWxlbWVudHMgPSBuZXcgU2V0KFtcImJ1dHRvblwiLCBcImZpZWxkc2V0XCIsIFwiaW5wdXRcIiwgXCJrZXlnZW5cIiwgXCJvYmplY3RcIiwgXCJzZWxlY3RcIiwgXCJ0ZXh0YXJlYVwiXSk7XG5cbmNvbnN0IGVuY1R5cGVzID0gbmV3IFNldChbXG4gIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsXG4gIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLFxuICBcInRleHQvcGxhaW5cIlxuXSk7XG5cbmNvbnN0IG1ldGhvZHMgPSBuZXcgU2V0KFtcbiAgXCJnZXRcIixcbiAgXCJwb3N0XCIsXG4gIFwiZGlhbG9nXCJcbl0pO1xuXG5jbGFzcyBIVE1MRm9ybUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgX2Rlc2NlbmRhbnRBZGRlZChwYXJlbnQsIGNoaWxkKSB7XG4gICAgY29uc3QgZm9ybSA9IHRoaXM7XG4gICAgZm9yIChjb25zdCBlbCBvZiBkb21TeW1ib2xUcmVlLnRyZWVJdGVyYXRvcihjaGlsZCkpIHtcbiAgICAgIGlmICh0eXBlb2YgZWwuX2NoYW5nZWRGb3JtT3duZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBlbC5fY2hhbmdlZEZvcm1Pd25lcihmb3JtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlci5fZGVzY2VuZGFudEFkZGVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfZGVzY2VuZGFudFJlbW92ZWQocGFyZW50LCBjaGlsZCkge1xuICAgIGZvciAoY29uc3QgZWwgb2YgZG9tU3ltYm9sVHJlZS50cmVlSXRlcmF0b3IoY2hpbGQpKSB7XG4gICAgICBpZiAodHlwZW9mIGVsLl9jaGFuZ2VkRm9ybU93bmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZWwuX2NoYW5nZWRGb3JtT3duZXIobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VwZXIuX2Rlc2NlbmRhbnRSZW1vdmVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBnZXQgZWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMsICgpID0+IGRlc2NlbmRhbnRzQnlIVE1MTG9jYWxOYW1lcyh0aGlzLCBsaXN0ZWRFbGVtZW50cykpO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGg7XG4gIH1cblxuICBfZGlzcGF0Y2hTdWJtaXRFdmVudCgpIHtcbiAgICBjb25zdCBldiA9IHRoaXMuX293bmVyRG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO1xuICAgIGV2LmluaXRFdmVudChcInN1Ym1pdFwiLCB0cnVlLCB0cnVlKTtcbiAgICBpZiAodGhpcy5kaXNwYXRjaEV2ZW50KGV2KSkge1xuICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgbm90SW1wbGVtZW50ZWQoXCJIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnN1Ym1pdFwiLCB0aGlzLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0Vmlldyk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRoaXMuZWxlbWVudHMsIGVsID0+IHtcbiAgICAgIGVsID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIoZWwpO1xuICAgICAgaWYgKHR5cGVvZiBlbC5fZm9ybVJlc2V0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZWwuX2Zvcm1SZXNldCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IG1ldGhvZCgpIHtcbiAgICBsZXQgbWV0aG9kID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJtZXRob2RcIik7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgbWV0aG9kID0gbWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZHMuaGFzKG1ldGhvZCkpIHtcbiAgICAgIHJldHVybiBtZXRob2Q7XG4gICAgfVxuICAgIHJldHVybiBcImdldFwiO1xuICB9XG5cbiAgc2V0IG1ldGhvZChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtZXRob2RcIiwgVik7XG4gIH1cblxuICBnZXQgZW5jdHlwZSgpIHtcbiAgICBsZXQgdHlwZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZW5jdHlwZVwiKTtcbiAgICBpZiAodHlwZSkge1xuICAgICAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoZW5jVHlwZXMuaGFzKHR5cGUpKSB7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG4gIH1cblxuICBzZXQgZW5jdHlwZShWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJlbmN0eXBlXCIsIFYpO1xuICB9XG5cbiAgZ2V0IGFjdGlvbigpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWN0aW9uXCIpO1xuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZSA9PT0gbnVsbCB8fCBhdHRyaWJ1dGVWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIHRoaXMuX293bmVyRG9jdW1lbnQuVVJMO1xuICAgIH1cblxuICAgIHJldHVybiByZWZsZWN0VVJMQXR0cmlidXRlKHRoaXMsIFwiYWN0aW9uXCIpO1xuICB9XG5cbiAgc2V0IGFjdGlvbihWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgVik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MRm9ybUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHBhcnNlQ29udGVudFR5cGUgPSByZXF1aXJlKFwiY29udGVudC10eXBlLXBhcnNlclwiKTtcbmNvbnN0IFVSTCA9IHJlcXVpcmUoXCJ3aGF0d2ctdXJsXCIpLlVSTDtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IGFwcGx5RG9jdW1lbnRGZWF0dXJlcyA9IHJlcXVpcmUoXCIuLi8uLi9icm93c2VyL2RvY3VtZW50ZmVhdHVyZXNcIikuYXBwbHlEb2N1bWVudEZlYXR1cmVzO1xuY29uc3QgcmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKFwiLi4vLi4vYnJvd3Nlci9yZXNvdXJjZS1sb2FkZXJcIik7XG5jb25zdCBkZWZpbmVHZXR0ZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikuZGVmaW5lR2V0dGVyO1xuY29uc3QgZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsXCIpLmRvY3VtZW50QmFzZVVSTFNlcmlhbGl6ZWQ7XG5jb25zdCBnZXRBdHRyaWJ1dGVWYWx1ZSA9IHJlcXVpcmUoXCIuLi9hdHRyaWJ1dGVzXCIpLmdldEF0dHJpYnV0ZVZhbHVlO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgcmVmbGVjdFVSTEF0dHJpYnV0ZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5yZWZsZWN0VVJMQXR0cmlidXRlO1xuXG5mdW5jdGlvbiBsb2FkRnJhbWUoZnJhbWUpIHtcbiAgaWYgKGZyYW1lLl9jb250ZW50RG9jdW1lbnQpIHtcbiAgICBpZiAoZnJhbWUuX2NvbnRlbnREb2N1bWVudC5fZGVmYXVsdFZpZXcpIHtcbiAgICAgIC8vIGNsb3NlIGNhbGxzIGRlbGV0ZSBvbiBpdHMgZG9jdW1lbnQuXG4gICAgICBmcmFtZS5fY29udGVudERvY3VtZW50Ll9kZWZhdWx0Vmlldy5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgZnJhbWUuX2NvbnRlbnREb2N1bWVudDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXJlbnREb2MgPSBmcmFtZS5fb3duZXJEb2N1bWVudDtcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNwcm9jZXNzLXRoZS1pZnJhbWUtYXR0cmlidXRlc1xuICBsZXQgdXJsO1xuICBjb25zdCBzcmNBdHRyaWJ1dGUgPSBnZXRBdHRyaWJ1dGVWYWx1ZShmcmFtZSwgXCJzcmNcIik7XG4gIGlmIChzcmNBdHRyaWJ1dGUgPT09IG51bGwgfHwgc3JjQXR0cmlidXRlID09PSBcIlwiKSB7XG4gICAgdXJsID0gbmV3IFVSTChcImFib3V0OmJsYW5rXCIpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICB1cmwgPSBuZXcgVVJMKHNyY0F0dHJpYnV0ZSwgZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZChwYXJlbnREb2MpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB1cmwgPSBuZXcgVVJMKFwiYWJvdXQ6YmxhbmtcIik7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyBpcyBub3QgZ3JlYXQsIGJ1dCBwcmV2ZW50cyBhIHJlcXVpcmUgY3ljbGUgZHVyaW5nIHdlYmlkbDJqcyBnZW5lcmF0aW9uXG4gIGNvbnN0IHduZCA9IG5ldyBwYXJlbnREb2MuX2RlZmF1bHRWaWV3LmNvbnN0cnVjdG9yKHtcbiAgICBwYXJzaW5nTW9kZTogXCJodG1sXCIsXG4gICAgdXJsOiB1cmwucHJvdG9jb2wgPT09IFwiamF2YXNjcmlwdDpcIiB8fCB1cmwuaHJlZiA9PT0gXCJhYm91dDpibGFua1wiID8gcGFyZW50RG9jLlVSTCA6IHVybC5ocmVmLFxuICAgIHJlc291cmNlTG9hZGVyOiBwYXJlbnREb2MuX2N1c3RvbVJlc291cmNlTG9hZGVyLFxuICAgIHVzZXJBZ2VudDogcGFyZW50RG9jLl9kZWZhdWx0Vmlldy5uYXZpZ2F0b3IudXNlckFnZW50LFxuICAgIHJlZmVycmVyOiBwYXJlbnREb2MuVVJMLFxuICAgIGNvb2tpZUphcjogcGFyZW50RG9jLl9jb29raWVKYXIsXG4gICAgcG9vbDogcGFyZW50RG9jLl9wb29sLFxuICAgIGVuY29kaW5nOiBwYXJlbnREb2MuX2VuY29kaW5nLFxuICAgIGFnZW50T3B0aW9uczogcGFyZW50RG9jLl9hZ2VudE9wdGlvbnMsXG4gICAgc3RyaWN0U1NMOiBwYXJlbnREb2MuX3N0cmljdFNTTCxcbiAgICBwcm94eTogcGFyZW50RG9jLl9wcm94eSxcbiAgICBydW5TY3JpcHRzOiBwYXJlbnREb2MuX2RlZmF1bHRWaWV3Ll9ydW5TY3JpcHRzXG4gIH0pO1xuICBjb25zdCBjb250ZW50RG9jID0gZnJhbWUuX2NvbnRlbnREb2N1bWVudCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHduZC5fZG9jdW1lbnQpO1xuICBhcHBseURvY3VtZW50RmVhdHVyZXMoY29udGVudERvYywgcGFyZW50RG9jLl9pbXBsZW1lbnRhdGlvbi5fZmVhdHVyZXMpO1xuXG4gIGNvbnN0IHBhcmVudCA9IHBhcmVudERvYy5fZGVmYXVsdFZpZXc7XG4gIGNvbnN0IGNvbnRlbnRXaW5kb3cgPSBjb250ZW50RG9jLl9kZWZhdWx0VmlldztcbiAgY29udGVudFdpbmRvdy5fcGFyZW50ID0gcGFyZW50O1xuICBjb250ZW50V2luZG93Ll90b3AgPSBwYXJlbnQudG9wO1xuICBjb250ZW50V2luZG93Ll9mcmFtZUVsZW1lbnQgPSBmcmFtZTtcbiAgY29udGVudFdpbmRvdy5fdmlydHVhbENvbnNvbGUgPSBwYXJlbnQuX3ZpcnR1YWxDb25zb2xlO1xuXG4gIC8vIEhhbmRsZSBhYm91dDpibGFuayB3aXRoIGEgc2ltdWxhdGVkIGxvYWQgb2YgYW4gZW1wdHkgZG9jdW1lbnQuXG4gIGlmICh1cmwuaHJlZiA9PT0gXCJhYm91dDpibGFua1wiKSB7XG4gICAgLy8gQ2Fubm90IGJlIGRvbmUgaW5zaWRlIHRoZSBlbnF1ZXVlZCBjYWxsYmFjazsgdGhlIGRvY3VtZW50RWxlbWVudCBldGMuIG5lZWQgdG8gYmUgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLlxuICAgIGNvbnRlbnREb2Mud3JpdGUoXCI8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD5cIik7XG4gICAgY29udGVudERvYy5jbG9zZSgpO1xuICAgIHJlc291cmNlTG9hZGVyLmVucXVldWUoZnJhbWUpKCk7IC8vIHRvIGZpcmUgdGhlIGxvYWQgZXZlbnRcbiAgfSBlbHNlIGlmICh1cmwucHJvdG9jb2wgPT09IFwiamF2YXNjcmlwdDpcIikge1xuICAgIC8vIENhbm5vdCBiZSBkb25lIGluc2lkZSB0aGUgZW5xdWV1ZWQgY2FsbGJhY2s7IHRoZSBkb2N1bWVudEVsZW1lbnQgZXRjLiBuZWVkIHRvIGJlIGltbWVkaWF0ZWx5IGF2YWlsYWJsZS5cbiAgICBjb250ZW50RG9jLndyaXRlKFwiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+XCIpO1xuICAgIGNvbnRlbnREb2MuY2xvc2UoKTtcbiAgICBjb250ZW50V2luZG93LmV2YWwodXJsLnBhdGhuYW1lKTtcbiAgICByZXNvdXJjZUxvYWRlci5lbnF1ZXVlKGZyYW1lKSgpOyAvLyB0byBmaXJlIHRoZSBsb2FkIGV2ZW50XG4gIH0gZWxzZSB7XG4gICAgcmVzb3VyY2VMb2FkZXIubG9hZChcbiAgICAgIGZyYW1lLFxuICAgICAgdXJsLmhyZWYsXG4gICAgICB7IGRlZmF1bHRFbmNvZGluZzogcGFyZW50RG9jLl9lbmNvZGluZywgZGV0ZWN0TWV0YUNoYXJzZXQ6IHRydWUgfSxcbiAgICAgIChodG1sLCByZXNwb25zZVVSTCwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZUNvbnRlbnRUeXBlKHJlc3BvbnNlLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pO1xuICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmlzWE1MKCkpIHtcbiAgICAgICAgICAgICAgY29udGVudERvYy5fcGFyc2luZ01vZGUgPSBcInhtbFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGVudERvYy5fZW5jb2RpbmcgPSBjb250ZW50VHlwZS5nZXQoXCJjaGFyc2V0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb250ZW50RG9jLndyaXRlKGh0bWwpO1xuICAgICAgICBjb250ZW50RG9jLmNsb3NlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWZyZXNoQWNjZXNzb3JzKGRvY3VtZW50KSB7XG4gIGNvbnN0IHdpbmRvdyA9IGRvY3VtZW50Ll9kZWZhdWx0VmlldztcblxuICBpZiAoIXdpbmRvdykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZyYW1lcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJpZnJhbWUsZnJhbWVcIik7XG5cbiAgLy8gZGVsZXRlIGFjY2Vzc29ycyBmb3IgYWxsIGZyYW1lc1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHdpbmRvdy5fbGVuZ3RoOyArK2kpIHtcbiAgICBkZWxldGUgd2luZG93W2ldO1xuICB9XG5cbiAgd2luZG93Ll9sZW5ndGggPSBmcmFtZXMubGVuZ3RoO1xuICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGZyYW1lcywgKGZyYW1lLCBpKSA9PiB7XG4gICAgZGVmaW5lR2V0dGVyKHdpbmRvdywgaSwgKCkgPT4gZnJhbWUuY29udGVudFdpbmRvdyk7XG4gIH0pO1xufVxuXG5jbGFzcyBIVE1MRnJhbWVFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoYXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHRoaXMuX2NvbnRlbnREb2N1bWVudCA9IG51bGw7XG4gIH1cbiAgX2F0dHJNb2RpZmllZChuYW1lLCB2YWx1ZSwgb2xkVmFsKSB7XG4gICAgc3VwZXIuX2F0dHJNb2RpZmllZChuYW1lLCB2YWx1ZSwgb2xkVmFsKTtcbiAgICBpZiAobmFtZSA9PT0gXCJzcmNcIikge1xuICAgICAgLy8gaWZyYW1lIHNob3VsZCBuZXZlciBsb2FkIGluIGEgZG9jdW1lbnQgd2l0aG91dCBhIFdpbmRvd1xuICAgICAgLy8gKGUuZy4gaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KVxuICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkICYmIHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3KSB7XG4gICAgICAgIGxvYWRGcmFtZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfZGV0YWNoKCkge1xuICAgIHN1cGVyLl9kZXRhY2goKTtcblxuICAgIGlmICh0aGlzLmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgIHRoaXMuY29udGVudFdpbmRvdy5jbG9zZSgpO1xuICAgIH1cblxuICAgIHJlZnJlc2hBY2Nlc3NvcnModGhpcy5fb3duZXJEb2N1bWVudCk7XG4gIH1cblxuICBfYXR0YWNoKCkge1xuICAgIHN1cGVyLl9hdHRhY2goKTtcblxuICAgIGlmICh0aGlzLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0Vmlldykge1xuICAgICAgbG9hZEZyYW1lKHRoaXMpO1xuICAgIH1cbiAgICByZWZyZXNoQWNjZXNzb3JzKHRoaXMuX293bmVyRG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnREb2N1bWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGVudERvY3VtZW50O1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRXaW5kb3coKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudERvY3VtZW50ID8gdGhpcy5jb250ZW50RG9jdW1lbnQuX2RlZmF1bHRWaWV3IDogbnVsbDtcbiAgfVxuXG4gIGdldCBzcmMoKSB7XG4gICAgcmV0dXJuIHJlZmxlY3RVUkxBdHRyaWJ1dGUodGhpcywgXCJzcmNcIik7XG4gIH1cblxuICBzZXQgc3JjKHZhbHVlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgdmFsdWUpO1xuICB9XG5cbiAgZ2V0IGxvbmdEZXNjKCkge1xuICAgIHJldHVybiByZWZsZWN0VVJMQXR0cmlidXRlKHRoaXMsIFwibG9uZ2Rlc2NcIik7XG4gIH1cblxuICBzZXQgbG9uZ0Rlc2ModmFsdWUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImxvbmdkZXNjXCIsIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxGcmFtZUVsZW1lbnRJbXBsXG59O1xuXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTEZyYW1lc2V0RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEZyYW1lc2V0RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTEhSRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEhSRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTEhlYWRFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MSGVhZEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxIZWFkaW5nRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEhlYWRpbmdFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MSHRtbEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxIdG1sRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHdoYXR3Z1VSTCA9IHJlcXVpcmUoXCJ3aGF0d2ctdXJsXCIpO1xuY29uc3QgcGFyc2VVUkxUb1Jlc3VsdGluZ1VSTFJlY29yZCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsXCIpLnBhcnNlVVJMVG9SZXN1bHRpbmdVUkxSZWNvcmQ7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzSW1wbCB7XG4gIF9odG1sSHlwZXJsaW5rRWxlbWVudFV0aWxzU2V0dXAoKSB7XG4gICAgdGhpcy51cmwgPSBudWxsO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHJlZjtcbiAgfVxuXG4gIGdldCBocmVmKCkge1xuICAgIHJlaW5pdGlhbGl6ZVVSTCh0aGlzKTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcblxuICAgIGlmICh1cmwgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGhyZWYgPSB0aGlzLmdldEF0dHJpYnV0ZShcImhyZWZcIik7XG4gICAgICByZXR1cm4gaHJlZiA9PT0gbnVsbCA/IFwiXCIgOiBocmVmO1xuICAgIH1cblxuICAgIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplVVJMKHVybCk7XG4gIH1cblxuICBzZXQgaHJlZih2KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHYpO1xuICB9XG5cbiAgZ2V0IG9yaWdpbigpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG5cbiAgICBpZiAodGhpcy51cmwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplVVJMVG9Vbmljb2RlT3JpZ2luKHRoaXMudXJsKTtcbiAgfVxuXG4gIGdldCBwcm90b2NvbCgpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG5cbiAgICBpZiAodGhpcy51cmwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIjpcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51cmwuc2NoZW1lICsgXCI6XCI7XG4gIH1cblxuICBzZXQgcHJvdG9jb2wodikge1xuICAgIHJlaW5pdGlhbGl6ZVVSTCh0aGlzKTtcblxuICAgIGlmICh0aGlzLnVybCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKHYgKyBcIjpcIiwgeyB1cmw6IHRoaXMudXJsLCBzdGF0ZU92ZXJyaWRlOiBcInNjaGVtZSBzdGFydFwiIH0pO1xuICAgIHVwZGF0ZUhyZWYodGhpcyk7XG4gIH1cblxuICBnZXQgdXNlcm5hbWUoKSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuXG4gICAgaWYgKHRoaXMudXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51cmwudXNlcm5hbWU7XG4gIH1cblxuICBzZXQgdXNlcm5hbWUodikge1xuICAgIHJlaW5pdGlhbGl6ZVVSTCh0aGlzKTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcblxuICAgIGlmICh1cmwgPT09IG51bGwgfHwgdXJsLmhvc3QgPT09IG51bGwgfHwgdXJsLmhvc3QgPT09IFwiXCIgfHwgdXJsLmNhbm5vdEJlQUJhc2VVUkwgfHwgdXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGF0d2dVUkwuc2V0VGhlVXNlcm5hbWUodXJsLCB2KTtcbiAgICB1cGRhdGVIcmVmKHRoaXMpO1xuICB9XG5cbiAgZ2V0IHBhc3N3b3JkKCkge1xuICAgIHJlaW5pdGlhbGl6ZVVSTCh0aGlzKTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcblxuICAgIGlmICh1cmwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwucGFzc3dvcmQ7XG4gIH1cblxuICBzZXQgcGFzc3dvcmQodikge1xuICAgIHJlaW5pdGlhbGl6ZVVSTCh0aGlzKTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcblxuICAgIGlmICh1cmwgPT09IG51bGwgfHwgdXJsLmhvc3QgPT09IG51bGwgfHwgdXJsLmhvc3QgPT09IFwiXCIgfHwgdXJsLmNhbm5vdEJlQUJhc2VVUkwgfHwgdXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGF0d2dVUkwuc2V0VGhlUGFzc3dvcmQodXJsLCB2KTtcbiAgICB1cGRhdGVIcmVmKHRoaXMpO1xuICB9XG5cbiAgZ2V0IGhvc3QoKSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgaWYgKHVybC5wb3J0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gd2hhdHdnVVJMLnNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplSG9zdCh1cmwuaG9zdCkgKyBcIjpcIiArIHdoYXR3Z1VSTC5zZXJpYWxpemVJbnRlZ2VyKHVybC5wb3J0KTtcbiAgfVxuXG4gIHNldCBob3N0KHYpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG5cbiAgICBpZiAodXJsID09PSBudWxsIHx8IHVybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hhdHdnVVJMLmJhc2ljVVJMUGFyc2UodiwgeyB1cmwsIHN0YXRlT3ZlcnJpZGU6IFwiaG9zdFwiIH0pO1xuICAgIHVwZGF0ZUhyZWYodGhpcyk7XG4gIH1cblxuICBnZXQgaG9zdG5hbWUoKSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVIb3N0KHVybC5ob3N0KTtcbiAgfVxuXG4gIHNldCBob3N0bmFtZSh2KSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCB8fCB1cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImhvc3RuYW1lXCIgfSk7XG4gICAgdXBkYXRlSHJlZih0aGlzKTtcbiAgfVxuXG4gIGdldCBwb3J0KCkge1xuICAgIHJlaW5pdGlhbGl6ZVVSTCh0aGlzKTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcblxuICAgIGlmICh1cmwgPT09IG51bGwgfHwgdXJsLnBvcnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplSW50ZWdlcih1cmwucG9ydCk7XG4gIH1cblxuICBzZXQgcG9ydCh2KSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gXCJcIiB8fCB1cmwuY2Fubm90QmVBQmFzZVVSTCB8fCB1cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB1cmwucG9ydCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInBvcnRcIiB9KTtcbiAgICB9XG4gICAgdXBkYXRlSHJlZih0aGlzKTtcbiAgfVxuXG4gIGdldCBwYXRobmFtZSgpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBpZiAodXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybiB1cmwucGF0aFswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCIvXCIgKyB1cmwucGF0aC5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIHNldCBwYXRobmFtZSh2KSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCB8fCB1cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVybC5wYXRoID0gW107XG4gICAgd2hhdHdnVVJMLmJhc2ljVVJMUGFyc2UodiwgeyB1cmwsIHN0YXRlT3ZlcnJpZGU6IFwicGF0aCBzdGFydFwiIH0pO1xuICAgIHVwZGF0ZUhyZWYodGhpcyk7XG4gIH1cblxuICBnZXQgc2VhcmNoKCkge1xuICAgIHJlaW5pdGlhbGl6ZVVSTCh0aGlzKTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcblxuICAgIGlmICh1cmwgPT09IG51bGwgfHwgdXJsLnF1ZXJ5ID09PSBudWxsIHx8IHVybC5xdWVyeSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiP1wiICsgdXJsLnF1ZXJ5O1xuICB9XG5cbiAgc2V0IHNlYXJjaCh2KSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB1cmwucXVlcnkgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiP1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgICAgdXJsLnF1ZXJ5ID0gXCJcIjtcbiAgICAgIHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKGlucHV0LCB7XG4gICAgICAgIHVybCxcbiAgICAgICAgc3RhdGVPdmVycmlkZTogXCJxdWVyeVwiLFxuICAgICAgICBlbmNvZGluZ092ZXJyaWRlOiB0aGlzLl9vd25lckRvY3VtZW50LmNoYXJzZXRcbiAgICAgIH0pO1xuICAgIH1cbiAgICB1cGRhdGVIcmVmKHRoaXMpO1xuICB9XG5cbiAgZ2V0IGhhc2goKSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCB8fCB1cmwuZnJhZ21lbnQgPT09IG51bGwgfHwgdXJsLmZyYWdtZW50ID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCIjXCIgKyB1cmwuZnJhZ21lbnQ7XG4gIH1cblxuICBzZXQgaGFzaCh2KSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB1cmwuZnJhZ21lbnQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiI1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgICAgdXJsLmZyYWdtZW50ID0gXCJcIjtcbiAgICAgIHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IHVybCwgc3RhdGVPdmVycmlkZTogXCJmcmFnbWVudFwiIH0pO1xuICAgIH1cbiAgICB1cGRhdGVIcmVmKHRoaXMpO1xuICB9XG59O1xuXG5mdW5jdGlvbiByZWluaXRpYWxpemVVUkwoaGhldSkge1xuICBpZiAoaGhldS51cmwgIT09IG51bGwgJiYgaGhldS51cmwuc2NoZW1lID09PSBcImJsb2JcIiAmJiBoaGV1LnVybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2V0VGhlVVJMKGhoZXUpO1xufVxuXG5mdW5jdGlvbiBzZXRUaGVVUkwoaGhldSkge1xuICBjb25zdCBocmVmID0gaGhldS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpO1xuICBpZiAoaHJlZiA9PT0gbnVsbCkge1xuICAgIGhoZXUudXJsID0gbnVsbDtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBwYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkKGhyZWYsIGhoZXUuX293bmVyRG9jdW1lbnQpO1xuXG4gIGhoZXUudXJsID0gcGFyc2VkID09PSBcImZhaWx1cmVcIiA/IG51bGwgOiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhyZWYoaGhldSkge1xuICBoaGV1LnNldEF0dHJpYnV0ZShcImhyZWZcIiwgd2hhdHdnVVJMLnNlcmlhbGl6ZVVSTChoaGV1LnVybCkpO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxGcmFtZUVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEZyYW1lRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MSUZyYW1lRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRnJhbWVFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MSUZyYW1lRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCByZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoXCIuLi8uLi9icm93c2VyL3Jlc291cmNlLWxvYWRlclwiKTtcbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IENhbnZhcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5DYW52YXM7XG5jb25zdCByZWZsZWN0VVJMQXR0cmlidXRlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLnJlZmxlY3RVUkxBdHRyaWJ1dGU7XG5cbmNsYXNzIEhUTUxJbWFnZUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgX2F0dHJNb2RpZmllZChuYW1lLCB2YWx1ZSwgb2xkVmFsKSB7XG4gICAgaWYgKG5hbWUgPT09IFwic3JjXCIgJiYgdmFsdWUgIT09IG9sZFZhbCkge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLl9vd25lckRvY3VtZW50O1xuICAgICAgaWYgKENhbnZhcyAmJiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5faGFzRmVhdHVyZShcIkZldGNoRXh0ZXJuYWxSZXNvdXJjZXNcIiwgXCJpbWdcIikpIHtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBpZiAoIXRoaXMuX2ltYWdlKSB7XG4gICAgICAgICAgdGhpcy5faW1hZ2UgPSBuZXcgQ2FudmFzLkltYWdlKCk7XG4gICAgICAgICAgLy8gSW5zdGFsbCBhbiBlcnJvciBoYW5kbGVyIHRoYXQganVzdCByZW1lbWJlcnMgdGhlIGVycm9yLiBJdCBpcyB0aGVuXG4gICAgICAgICAgLy8gdGhyb3duIGluIHRoZSBjYWxsYmFjayBvZiByZXNvdXJjZUxvYWRlci5sb2FkKCkgYmVsb3cuXG4gICAgICAgICAgdGhpcy5faW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3VycmVudFNyYyA9IG51bGw7XG4gICAgICAgIHJlc291cmNlTG9hZGVyLmxvYWQodGhpcywgdGhpcy5zcmMsIHt9LCAoZGF0YSwgdXJsLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5zdGF0dXNDb2RlICE9PSB1bmRlZmluZWQgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0dXMgY29kZTogXCIgKyByZXNwb25zZS5zdGF0dXNDb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX2ltYWdlLnNvdXJjZSA9IGRhdGE7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3JjID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyLl9hdHRyTW9kaWZpZWQobmFtZSwgdmFsdWUsIG9sZFZhbCk7XG4gIH1cblxuICBnZXQgX2FjY2VwdCgpIHtcbiAgICByZXR1cm4gXCJpbWFnZS9wbmcsaW1hZ2UvKjtxPTAuOCwqLyo7cT0wLjVcIjtcbiAgfVxuXG4gIGdldCBzcmMoKSB7XG4gICAgcmV0dXJuIHJlZmxlY3RVUkxBdHRyaWJ1dGUodGhpcywgXCJzcmNcIik7XG4gIH1cblxuICBzZXQgc3JjKHZhbHVlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgdmFsdWUpO1xuICB9XG5cbiAgZ2V0IGhlaWdodCgpIHtcbiAgICAvLyBKdXN0IGxpa2Ugb24gYnJvd3NlcnMsIGlmIG5vIHdpZHRoIC8gaGVpZ2h0IGlzIGRlZmluZWQsIHdlIGZhbGwgYmFjayBvbiB0aGVcbiAgICAvLyBkaW1lbnNpb25zIG9mIHRoZSBpbnRlcm5hbCBpbWFnZSBkYXRhLlxuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImhlaWdodFwiKSA/XG4gICAgICBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0odGhpcy5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIikpIDogdGhpcy5uYXR1cmFsSGVpZ2h0O1xuICB9XG5cbiAgc2V0IGhlaWdodChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgU3RyaW5nKFYpKTtcbiAgfVxuXG4gIGdldCB3aWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJ3aWR0aFwiKSA/XG4gICAgICBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0odGhpcy5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKSkgOiB0aGlzLm5hdHVyYWxXaWR0aDtcbiAgfVxuXG4gIHNldCB3aWR0aChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBTdHJpbmcoVikpO1xuICB9XG5cbiAgZ2V0IG5hdHVyYWxIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlID8gdGhpcy5faW1hZ2UuaGVpZ2h0IDogMDtcbiAgfVxuXG4gIGdldCBuYXR1cmFsV2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlID8gdGhpcy5faW1hZ2Uud2lkdGggOiAwO1xuICB9XG5cbiAgZ2V0IGNvbXBsZXRlKCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2ltYWdlICYmIHRoaXMuX2ltYWdlLmNvbXBsZXRlKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50U3JjKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3JjIHx8IFwiXCI7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MSW1hZ2VFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG5jb25zdCBFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvRXZlbnRcIik7XG5jb25zdCBGaWxlTGlzdCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvRmlsZUxpc3RcIik7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5jb25zdCBpbnRlcm5hbENvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKTtcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSBpbnRlcm5hbENvbnN0YW50cy5kb21TeW1ib2xUcmVlO1xuY29uc3QgY2xvbmluZ1N0ZXBzID0gaW50ZXJuYWxDb25zdGFudHMuY2xvbmluZ1N0ZXBzO1xuY29uc3QgY2xvc2VzdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5jbG9zZXN0O1xuY29uc3QgaXNEaXNhYmxlZCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2Zvcm0tY29udHJvbHNcIikuaXNEaXNhYmxlZDtcbmNvbnN0IHNhbml0aXplVmFsdWVCeVR5cGUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9mb3JtLWNvbnRyb2xzXCIpLnNhbml0aXplVmFsdWVCeVR5cGU7XG5cbmNvbnN0IGZpbGVzU3ltYm9sID0gU3ltYm9sKFwiZmlsZXNcIik7XG5cbmNvbnN0IHNlbGVjdEFsbG93ZWRUeXBlcyA9IG5ldyBTZXQoW1widGV4dFwiLCBcInNlYXJjaFwiLCBcInRlbFwiLCBcInVybFwiLCBcInBhc3N3b3JkXCIsIFwiZW1haWxcIiwgXCJkYXRlXCIsIFwibW9udGhcIiwgXCJ3ZWVrXCIsXG4gIFwidGltZVwiLCBcImRhdGV0aW1lLWxvY2FsXCIsIFwiY29sb3JcIiwgXCJmaWxlXCIsIFwibnVtYmVyXCJdKTtcblxuY29uc3QgdmFyaWFibGVMZW5ndGhTZWxlY3Rpb25BbGxvd2VkVHlwZXMgPSBuZXcgU2V0KFtcInRleHRcIiwgXCJzZWFyY2hcIiwgXCJ0ZWxcIiwgXCJ1cmxcIiwgXCJwYXNzd29yZFwiXSk7XG5cbmZ1bmN0aW9uIGFsbG93U2VsZWN0KHR5cGUpIHtcbiAgcmV0dXJuIHNlbGVjdEFsbG93ZWRUeXBlcy5oYXModHlwZS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuZnVuY3Rpb24gYWxsb3dWYXJpYWJsZUxlbmd0aFNlbGVjdGlvbih0eXBlKSB7XG4gIHJldHVybiB2YXJpYWJsZUxlbmd0aFNlbGVjdGlvbkFsbG93ZWRUeXBlcy5oYXModHlwZS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuY2xhc3MgSFRNTElucHV0RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIGlmICghdGhpcy50eXBlKSB7XG4gICAgICB0aGlzLnR5cGUgPSBcInRleHRcIjtcbiAgICB9XG4gICAgdGhpcy5fc2VsZWN0aW9uU3RhcnQgPSB0aGlzLl9zZWxlY3Rpb25FbmQgPSAwO1xuICAgIHRoaXMuX3NlbGVjdGlvbkRpcmVjdGlvbiA9IFwibm9uZVwiO1xuICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9kaXJ0eVZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hlY2tlZG5lc3MgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXJ0eUNoZWNrZWRuZXNzID0gZmFsc2U7XG5cbiAgICAvLyBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBjYW5jZWxlZCBhY3RpdmF0aW9uIHN0ZXBzIGZvciByYWRpbyBpbnB1dHM6XG4gICAgLy8gXCJUaGUgY2FuY2VsZWQgYWN0aXZhdGlvbiBzdGVwcyBjb25zaXN0IG9mIHNldHRpbmcgdGhlIGNoZWNrZWRuZXNzIGFuZCB0aGUgZWxlbWVudCdzIGluZGV0ZXJtaW5hdGUgSURMXG4gICAgLy8gYXR0cmlidXRlIGJhY2sgdG8gdGhlIHZhbHVlcyB0aGV5IGhhZCBiZWZvcmUgdGhlIHByZS1jbGljayBhY3RpdmF0aW9uIHN0ZXBzIHdlcmUgcnVuLlwiXG4gICAgdGhpcy5fcHJlQ2FuY2VsU3RhdGUgPSBudWxsO1xuICB9XG5cbiAgX2dldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIF9wcmVDbGlja0FjdGl2YXRpb25TdGVwcygpIHtcbiAgICBpZiAodGhpcy50eXBlID09PSBcImNoZWNrYm94XCIpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9ICF0aGlzLmNoZWNrZWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwicmFkaW9cIikge1xuICAgICAgdGhpcy5fcHJlQ2FuY2VsU3RhdGUgPSB0aGlzLmNoZWNrZWQ7XG4gICAgICB0aGlzLmNoZWNrZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIF9jYW5jZWxlZEFjdGl2YXRpb25TdGVwcygpIHtcbiAgICBpZiAodGhpcy50eXBlID09PSBcImNoZWNrYm94XCIpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9ICF0aGlzLmNoZWNrZWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwicmFkaW9cIikge1xuICAgICAgaWYgKHRoaXMuX3ByZUNhbmNlbFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IHRoaXMuX3ByZUNhbmNlbFN0YXRlO1xuICAgICAgICB0aGlzLl9wcmVDYW5jZWxTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2FjdGl2YXRpb25CZWhhdmlvcigpIHtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiY2hlY2tib3hcIikge1xuICAgICAgY29uc3QgaW5wdXRFdmVudCA9IEV2ZW50LmNyZWF0ZUltcGwoW1wiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH1dLCB7fSk7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoaW5wdXRFdmVudCk7XG5cbiAgICAgIGNvbnN0IGNoYW5nZUV2ZW50ID0gRXZlbnQuY3JlYXRlSW1wbChbXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH1dLCB7fSk7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoY2hhbmdlRXZlbnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBcInN1Ym1pdFwiKSB7XG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtO1xuICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgZm9ybS5fZGlzcGF0Y2hTdWJtaXRFdmVudCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9hdHRyTW9kaWZpZWQobmFtZSkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKTtcbiAgICBpZiAoIXRoaXMuX2RpcnR5VmFsdWUgJiYgbmFtZSA9PT0gXCJ2YWx1ZVwiKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHNhbml0aXplVmFsdWVCeVR5cGUodGhpcywgd3JhcHBlci5kZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2RpcnR5Q2hlY2tlZG5lc3MgJiYgbmFtZSA9PT0gXCJjaGVja2VkXCIpIHtcbiAgICAgIHRoaXMuX2NoZWNrZWRuZXNzID0gd3JhcHBlci5kZWZhdWx0Q2hlY2tlZDtcbiAgICAgIGlmICh0aGlzLl9jaGVja2VkbmVzcykge1xuICAgICAgICB0aGlzLl9yZW1vdmVPdGhlclJhZGlvQ2hlY2tlZG5lc3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmFtZSA9PT0gXCJuYW1lXCIgfHwgbmFtZSA9PT0gXCJ0eXBlXCIpIHtcbiAgICAgIGlmICh0aGlzLl9jaGVja2VkbmVzcykge1xuICAgICAgICB0aGlzLl9yZW1vdmVPdGhlclJhZGlvQ2hlY2tlZG5lc3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlci5fYXR0ck1vZGlmaWVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgX2Zvcm1SZXNldCgpIHtcbiAgICBjb25zdCB3cmFwcGVyID0gaWRsVXRpbHMud3JhcHBlckZvckltcGwodGhpcyk7XG4gICAgdGhpcy5fdmFsdWUgPSBzYW5pdGl6ZVZhbHVlQnlUeXBlKHRoaXMsIHdyYXBwZXIuZGVmYXVsdFZhbHVlKTtcbiAgICB0aGlzLl9kaXJ0eVZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hlY2tlZG5lc3MgPSB3cmFwcGVyLmRlZmF1bHRDaGVja2VkO1xuICAgIHRoaXMuX2RpcnR5Q2hlY2tlZG5lc3MgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5fY2hlY2tlZG5lc3MpIHtcbiAgICAgIHRoaXMuX3JlbW92ZU90aGVyUmFkaW9DaGVja2VkbmVzcygpO1xuICAgIH1cbiAgfVxuICBfY2hhbmdlZEZvcm1Pd25lcigpIHtcbiAgICBpZiAodGhpcy5fY2hlY2tlZG5lc3MpIHtcbiAgICAgIHRoaXMuX3JlbW92ZU90aGVyUmFkaW9DaGVja2VkbmVzcygpO1xuICAgIH1cbiAgfVxuICBfcmVtb3ZlT3RoZXJSYWRpb0NoZWNrZWRuZXNzKCkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKTtcbiAgICBjb25zdCByb290ID0gdGhpcy5fcmFkaW9CdXR0b25Hcm91cFJvb3Q7XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IHdyYXBwZXIubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSBkb21TeW1ib2xUcmVlLnRyZWVJdGVyYXRvcihyb290KTtcbiAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBkZXNjZW5kYW50cykge1xuICAgICAgaWYgKGNhbmRpZGF0ZS5fcmFkaW9CdXR0b25Hcm91cFJvb3QgIT09IHJvb3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbmRpZGF0ZVdyYXBwZXIgPSBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChjYW5kaWRhdGUpO1xuICAgICAgaWYgKCFjYW5kaWRhdGVXcmFwcGVyLm5hbWUgfHwgY2FuZGlkYXRlV3JhcHBlci5uYW1lLnRvTG93ZXJDYXNlKCkgIT09IG5hbWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYW5kaWRhdGUgIT09IHRoaXMpIHtcbiAgICAgICAgY2FuZGlkYXRlLl9jaGVja2VkbmVzcyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgX3JhZGlvQnV0dG9uR3JvdXBSb290KCkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKTtcbiAgICBpZiAodGhpcy50eXBlICE9PSBcInJhZGlvXCIgfHwgIXdyYXBwZXIubmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGUgPSBkb21TeW1ib2xUcmVlLnBhcmVudCh0aGlzKTtcbiAgICB3aGlsZSAoZSkge1xuICAgICAgLy8gcm9vdCBub2RlIG9mIHRoaXMgaG9tZSBzdWIgdHJlZVxuICAgICAgLy8gb3IgdGhlIGZvcm0gZWxlbWVudCB3ZSBiZWxvbmcgdG9cbiAgICAgIGlmICghZG9tU3ltYm9sVHJlZS5wYXJlbnQoZSkgfHwgZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIkZPUk1cIikge1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cbiAgICAgIGUgPSBkb21TeW1ib2xUcmVlLnBhcmVudChlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIGNsb3Nlc3QodGhpcywgXCJmb3JtXCIpO1xuICB9XG4gIGdldCBjaGVja2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGVja2VkbmVzcztcbiAgfVxuICBzZXQgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgdGhpcy5fY2hlY2tlZG5lc3MgPSBCb29sZWFuKGNoZWNrZWQpO1xuICAgIHRoaXMuX2RpcnR5Q2hlY2tlZG5lc3MgPSB0cnVlO1xuICAgIGlmICh0aGlzLl9jaGVja2VkbmVzcykge1xuICAgICAgdGhpcy5fcmVtb3ZlT3RoZXJSYWRpb0NoZWNrZWRuZXNzKCk7XG4gICAgfVxuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICBpZiAodGhpcy5fdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbCkge1xuICAgIHRoaXMuX2RpcnR5VmFsdWUgPSB0cnVlO1xuXG4gICAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHNhbml0aXplVmFsdWVCeVR5cGUodGhpcywgU3RyaW5nKHZhbCkpO1xuICAgIH1cblxuICAgIHRoaXMuX3NlbGVjdGlvblN0YXJ0ID0gMDtcbiAgICB0aGlzLl9zZWxlY3Rpb25FbmQgPSAwO1xuICAgIHRoaXMuX3NlbGVjdGlvbkRpcmVjdGlvbiA9IFwibm9uZVwiO1xuICB9XG4gIGdldCBmaWxlcygpIHtcbiAgICBpZiAodGhpcy50eXBlID09PSBcImZpbGVcIikge1xuICAgICAgdGhpc1tmaWxlc1N5bWJvbF0gPSB0aGlzW2ZpbGVzU3ltYm9sXSB8fCBGaWxlTGlzdC5jcmVhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1tmaWxlc1N5bWJvbF0gPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpc1tmaWxlc1N5bWJvbF07XG4gIH1cbiAgZ2V0IHR5cGUoKSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICByZXR1cm4gdHlwZSA/IHR5cGUudG9Mb3dlckNhc2UoKSA6IFwidGV4dFwiO1xuICB9XG4gIHNldCB0eXBlKHR5cGUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgdHlwZSk7XG4gIH1cblxuICBfZGlzcGF0Y2hTZWxlY3RFdmVudCgpIHtcbiAgICBjb25zdCBldmVudCA9IHRoaXMuX293bmVyRG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO1xuICAgIGV2ZW50LmluaXRFdmVudChcInNlbGVjdFwiLCB0cnVlLCB0cnVlKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9XG4gIF9nZXRWYWx1ZUxlbmd0aCgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMudmFsdWUgPT09IFwic3RyaW5nXCIgPyB0aGlzLnZhbHVlLmxlbmd0aCA6IDA7XG4gIH1cblxuICBzZWxlY3QoKSB7XG4gICAgaWYgKCFhbGxvd1NlbGVjdCh0aGlzLnR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgfVxuXG4gICAgdGhpcy5fc2VsZWN0aW9uU3RhcnQgPSAwO1xuICAgIHRoaXMuX3NlbGVjdGlvbkVuZCA9IHRoaXMuX2dldFZhbHVlTGVuZ3RoKCk7XG4gICAgdGhpcy5fc2VsZWN0aW9uRGlyZWN0aW9uID0gXCJub25lXCI7XG4gICAgdGhpcy5fZGlzcGF0Y2hTZWxlY3RFdmVudCgpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvblN0YXJ0KCkge1xuICAgIGlmICghYWxsb3dWYXJpYWJsZUxlbmd0aFNlbGVjdGlvbih0aGlzLnR5cGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uU3RhcnQ7XG4gIH1cblxuICBzZXQgc2VsZWN0aW9uU3RhcnQoc3RhcnQpIHtcbiAgICBpZiAoIWFsbG93VmFyaWFibGVMZW5ndGhTZWxlY3Rpb24odGhpcy50eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIE1hdGgubWF4KHN0YXJ0LCB0aGlzLl9zZWxlY3Rpb25FbmQpLCB0aGlzLl9zZWxlY3Rpb25EaXJlY3Rpb24pO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvbkVuZCgpIHtcbiAgICBpZiAoIWFsbG93VmFyaWFibGVMZW5ndGhTZWxlY3Rpb24odGhpcy50eXBlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkVuZDtcbiAgfVxuXG4gIHNldCBzZWxlY3Rpb25FbmQoZW5kKSB7XG4gICAgaWYgKCFhbGxvd1ZhcmlhYmxlTGVuZ3RoU2VsZWN0aW9uKHRoaXMudHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHRoaXMuX3NlbGVjdGlvblN0YXJ0LCBlbmQsIHRoaXMuX3NlbGVjdGlvbkRpcmVjdGlvbik7XG4gIH1cblxuICBnZXQgc2VsZWN0aW9uRGlyZWN0aW9uKCkge1xuICAgIGlmICghYWxsb3dWYXJpYWJsZUxlbmd0aFNlbGVjdGlvbih0aGlzLnR5cGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uRGlyZWN0aW9uO1xuICB9XG5cbiAgc2V0IHNlbGVjdGlvbkRpcmVjdGlvbihkaXIpIHtcbiAgICBpZiAoIWFsbG93VmFyaWFibGVMZW5ndGhTZWxlY3Rpb24odGhpcy50eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5fc2VsZWN0aW9uU3RhcnQsIHRoaXMuX3NlbGVjdGlvbkVuZCwgZGlyKTtcbiAgfVxuXG4gIHNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQsIGRpcikge1xuICAgIGlmICghYWxsb3dWYXJpYWJsZUxlbmd0aFNlbGVjdGlvbih0aGlzLnR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgfVxuXG4gICAgdGhpcy5fc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oZW5kLCB0aGlzLl9nZXRWYWx1ZUxlbmd0aCgpKTtcbiAgICB0aGlzLl9zZWxlY3Rpb25TdGFydCA9IE1hdGgubWluKHN0YXJ0LCB0aGlzLl9zZWxlY3Rpb25FbmQpO1xuICAgIHRoaXMuX3NlbGVjdGlvbkRpcmVjdGlvbiA9IGRpciA9PT0gXCJmb3J3YXJkXCIgfHwgZGlyID09PSBcImJhY2t3YXJkXCIgPyBkaXIgOiBcIm5vbmVcIjtcbiAgICB0aGlzLl9kaXNwYXRjaFNlbGVjdEV2ZW50KCk7XG4gIH1cblxuICBzZXRSYW5nZVRleHQocmVwbCwgc3RhcnQsIGVuZCwgc2VsZWN0aW9uTW9kZSkge1xuICAgIGlmICghYWxsb3dWYXJpYWJsZUxlbmd0aFNlbGVjdGlvbih0aGlzLnR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICBzdGFydCA9IHRoaXMuX3NlbGVjdGlvblN0YXJ0O1xuICAgICAgZW5kID0gdGhpcy5fc2VsZWN0aW9uRW5kO1xuICAgIH0gZWxzZSBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSKTtcbiAgICB9XG5cbiAgICBzdGFydCA9IE1hdGgubWluKHN0YXJ0LCB0aGlzLl9nZXRWYWx1ZUxlbmd0aCgpKTtcbiAgICBlbmQgPSBNYXRoLm1pbihlbmQsIHRoaXMuX2dldFZhbHVlTGVuZ3RoKCkpO1xuXG4gICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBsZXQgc2VsU3RhcnQgPSB0aGlzLl9zZWxlY3Rpb25TdGFydDtcbiAgICBsZXQgc2VsRW5kID0gdGhpcy5fc2VsZWN0aW9uRW5kO1xuXG4gICAgdGhpcy52YWx1ZSA9IHZhbC5zbGljZSgwLCBzdGFydCkgKyByZXBsICsgdmFsLnNsaWNlKGVuZCk7XG5cbiAgICBjb25zdCBuZXdFbmQgPSBzdGFydCArIHRoaXMudmFsdWUubGVuZ3RoO1xuXG4gICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09IFwic2VsZWN0XCIpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIG5ld0VuZCk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09PSBcInN0YXJ0XCIpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIHN0YXJ0KTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbk1vZGUgPT09IFwiZW5kXCIpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UobmV3RW5kLCBuZXdFbmQpO1xuICAgIH0gZWxzZSB7IC8vIHByZXNlcnZlXG4gICAgICBjb25zdCBkZWx0YSA9IHJlcGwubGVuZ3RoIC0gKGVuZCAtIHN0YXJ0KTtcblxuICAgICAgaWYgKHNlbFN0YXJ0ID4gZW5kKSB7XG4gICAgICAgIHNlbFN0YXJ0ICs9IGRlbHRhO1xuICAgICAgfSBlbHNlIGlmIChzZWxTdGFydCA+IHN0YXJ0KSB7XG4gICAgICAgIHNlbFN0YXJ0ID0gc3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxFbmQgPiBlbmQpIHtcbiAgICAgICAgc2VsRW5kICs9IGRlbHRhO1xuICAgICAgfSBlbHNlIGlmIChzZWxFbmQgPiBzdGFydCkge1xuICAgICAgICBzZWxFbmQgPSBuZXdFbmQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsU3RhcnQsIHNlbEVuZCk7XG4gICAgfVxuICB9XG5cbiAgc2V0IG1heExlbmd0aCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSKTtcbiAgICB9XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIiwgU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICBnZXQgbWF4TGVuZ3RoKCkge1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIikpIHtcbiAgICAgIHJldHVybiA1MjQyODg7IC8vIHN0b2xlIHRoaXMgZnJvbSBjaHJvbWVcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwibWF4bGVuZ3RoXCIpKTtcbiAgfVxuXG4gIHNldCBtaW5MZW5ndGgodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUik7XG4gICAgfVxuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibWlubGVuZ3RoXCIsIFN0cmluZyh2YWx1ZSkpO1xuICB9XG5cbiAgZ2V0IG1pbkxlbmd0aCgpIHtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwibWlubGVuZ3RoXCIpKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwibWlubGVuZ3RoXCIpKTtcbiAgfVxuXG4gIGdldCBzaXplKCkge1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJzaXplXCIpKSB7XG4gICAgICByZXR1cm4gMjA7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcInNpemVcIikpO1xuICB9XG5cbiAgc2V0IHNpemUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpO1xuICAgIH1cbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNpemVcIiwgU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICBbY2xvbmluZ1N0ZXBzXShjb3B5LCBub2RlKSB7XG4gICAgY29weS5fdmFsdWUgPSBub2RlLl92YWx1ZTtcbiAgICBjb3B5Ll9jaGVja2VkbmVzcyA9IG5vZGUuX2NoZWNrZWRuZXNzO1xuICAgIGNvcHkuX2RpcnR5VmFsdWUgPSBub2RlLl9kaXJ0eVZhbHVlO1xuICAgIGNvcHkuX2RpcnR5Q2hlY2tlZG5lc3MgPSBub2RlLl9kaXJ0eUNoZWNrZWRuZXNzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTElucHV0RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTExJRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTExJRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IE1vdXNlRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL01vdXNlRXZlbnRcIik7XG5jb25zdCBjbG9zZXN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmNsb3Nlc3Q7XG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5cbmZ1bmN0aW9uIGlzTGFiZWxhYmxlKG5vZGUpIHtcbiAgLy8gbGFiZWxhYmxlIGxvZ2ljIGRlZmluZWQgYXQ6IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGFiZWxcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKG5vZGUudGFnTmFtZSkge1xuICAgIGNhc2UgXCJCVVRUT05cIjpcbiAgICBjYXNlIFwiS0VZR0VOXCI6XG4gICAgY2FzZSBcIk1FVEVSXCI6XG4gICAgY2FzZSBcIk9VVFBVVFwiOlxuICAgIGNhc2UgXCJQUk9HUkVTU1wiOlxuICAgIGNhc2UgXCJTRUxFQ1RcIjpcbiAgICBjYXNlIFwiVEVYVEFSRUFcIjpcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBcIklOUFVUXCI6XG4gICAgICByZXR1cm4gbm9kZS50eXBlICE9PSBcImhpZGRlblwiO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzZW5kQ2xpY2tUb0Fzc29jaWF0ZWROb2RlKG5vZGUpIHtcbiAgbm9kZS5kaXNwYXRjaEV2ZW50KFxuICAgIE1vdXNlRXZlbnQuY3JlYXRlSW1wbChbXCJjbGlja1wiLCB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgIHZpZXc6IG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA6IG51bGwsXG4gICAgICBzY3JlZW5YOiAwLFxuICAgICAgc2NyZWVuWTogMCxcbiAgICAgIGNsaWVudFg6IDAsXG4gICAgICBjbGllbnRZOiAwLFxuICAgICAgYnV0dG9uOiAwLFxuICAgICAgZGV0YWlsOiAxLFxuICAgICAgcmVsYXRlZFRhcmdldDogbnVsbFxuICAgIH1dKVxuICApO1xufVxuXG5jbGFzcyBIVE1MTGFiZWxFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIF9hY3RpdmF0aW9uQmVoYXZpb3IoKSB7XG4gICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKFwiZm9yXCIpKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0QXR0cmlidXRlKFwiZm9yXCIpKTtcbiAgICAgIGlmIChub2RlICYmIGlzTGFiZWxhYmxlKG5vZGUpKSB7XG4gICAgICAgIHNlbmRDbGlja1RvQXNzb2NpYXRlZE5vZGUobm9kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgZGVzY2VuZGFudCBvZiBkb21TeW1ib2xUcmVlLnRyZWVJdGVyYXRvcih0aGlzKSkge1xuICAgICAgICBpZiAoaXNMYWJlbGFibGUoZGVzY2VuZGFudCkpIHtcbiAgICAgICAgICBzZW5kQ2xpY2tUb0Fzc29jaWF0ZWROb2RlKGRlc2NlbmRhbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIGNsb3Nlc3QodGhpcywgXCJmb3JtXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTExhYmVsRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IGNsb3Nlc3QgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuY2xvc2VzdDtcblxuY2xhc3MgSFRNTExlZ2VuZEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIGNsb3Nlc3QodGhpcywgXCJmb3JtXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTExlZ2VuZEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgTGlua1N0eWxlSW1wbCA9IHJlcXVpcmUoXCIuL0xpbmtTdHlsZS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgcmVmbGVjdFVSTEF0dHJpYnV0ZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5yZWZsZWN0VVJMQXR0cmlidXRlO1xuY29uc3QgZmV0Y2hTdHlsZXNoZWV0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvc3R5bGVzaGVldHNcIikuZmV0Y2hTdHlsZXNoZWV0O1xuY29uc3QgcGFyc2VVUkxUb1Jlc3VsdGluZ1VSTFJlY29yZCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsXCIpLnBhcnNlVVJMVG9SZXN1bHRpbmdVUkxSZWNvcmQ7XG5jb25zdCB3aGF0d2dVUkwgPSByZXF1aXJlKFwid2hhdHdnLXVybFwiKTtcblxuLy8gSW1wb3J0YW50IHJlYWRpbmc6IFwiYXBwcm9wcmlhdGUgdGltZXMgdG8gb2J0YWluIHRoZSByZXNvdXJjZVwiIGluXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZW1hbnRpY3MuaHRtbCNsaW5rLXR5cGUtc3R5bGVzaGVldFxuXG5jbGFzcyBIVE1MTGlua0VsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgX2F0dGFjaCgpIHtcbiAgICBzdXBlci5fYXR0YWNoKCk7XG5cbiAgICBpZiAoaXNFeHRlcm5hbFJlc291cmNlTGluayh0aGlzKSkge1xuICAgICAgb2J0YWluVGhlUmVzb3VyY2UodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgX2F0dHJNb2RpZmllZChuYW1lLCB2YWx1ZSwgb2xkVmFsdWUpIHtcbiAgICBzdXBlci5fYXR0ck1vZGlmaWVkKG5hbWUsIHZhbHVlLCBvbGRWYWx1ZSk7XG5cbiAgICBpZiAobmFtZSA9PT0gXCJocmVmXCIgJiYgdGhpcy5fYXR0YWNoZWQgJiYgaXNFeHRlcm5hbFJlc291cmNlTGluayh0aGlzKSkge1xuICAgICAgb2J0YWluVGhlUmVzb3VyY2UodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IF9hY2NlcHQoKSB7XG4gICAgcmV0dXJuIFwidGV4dC9jc3MsKi8qO3E9MC4xXCI7XG4gIH1cblxuICBnZXQgaHJlZigpIHtcbiAgICByZXR1cm4gcmVmbGVjdFVSTEF0dHJpYnV0ZSh0aGlzLCBcImhyZWZcIik7XG4gIH1cblxuICBzZXQgaHJlZih2YWx1ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB2YWx1ZSk7XG4gIH1cbn1cblxuaWRsVXRpbHMubWl4aW4oSFRNTExpbmtFbGVtZW50SW1wbC5wcm90b3R5cGUsIExpbmtTdHlsZUltcGwucHJvdG90eXBlKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MTGlua0VsZW1lbnRJbXBsXG59O1xuXG5mdW5jdGlvbiBvYnRhaW5UaGVSZXNvdXJjZShlbCkge1xuICBjb25zdCBocmVmID0gZWwuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTtcblxuICBpZiAoaHJlZiA9PT0gbnVsbCB8fCBocmVmID09PSBcIlwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdXJsID0gcGFyc2VVUkxUb1Jlc3VsdGluZ1VSTFJlY29yZChocmVmLCBlbC5fb3duZXJEb2N1bWVudCk7XG4gIGlmICh1cmwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IHdoYXR3Z1VSTC5zZXJpYWxpemVVUkwodXJsKTtcblxuICBmZXRjaFN0eWxlc2hlZXQoZWwsIHNlcmlhbGl6ZWQsIGVsLnNoZWV0KTtcbn1cblxuZnVuY3Rpb24gaXNFeHRlcm5hbFJlc291cmNlTGluayhlbCkge1xuICAvLyBmb3Igb3VyIHB1cnBvc2VzLCBvbmx5IHN0eWxlc2hlZXRzIGNhbiBiZSBleHRlcm5hbCByZXNvdXJjZSBsaW5rc1xuICBjb25zdCB3cmFwcGVyID0gaWRsVXRpbHMud3JhcHBlckZvckltcGwoZWwpO1xuICBpZiAoIS8oPzpbIFxcdFxcblxcclxcZl18XilzdHlsZXNoZWV0KD86WyBcXHRcXG5cXHJcXGZdfCQpL2kudGVzdCh3cmFwcGVyLnJlbCkpIHtcbiAgICAvLyByZWwgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB0b2tlbnMsIGFuZCB0aGUgb3JpZ2luYWwgcmVsIHR5cGVzXG4gICAgLy8gYXJlIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIEJvb2xlYW4oZWwuaHJlZik7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTE1hcEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgZ2V0IGFyZWFzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiQVJFQVwiKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxNYXBFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IG5vdEltcGxlbWVudGVkID0gcmVxdWlyZShcIi4uLy4uL2Jyb3dzZXIvbm90LWltcGxlbWVudGVkXCIpO1xuY29uc3QgcmVmbGVjdFVSTEF0dHJpYnV0ZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5yZWZsZWN0VVJMQXR0cmlidXRlO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuXG5mdW5jdGlvbiBnZXRUaW1lUmFuZ2VEdW1teSgpIHtcbiAgcmV0dXJuIHtcbiAgICBsZW5ndGg6IDAsXG4gICAgc3RhcnQoKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9LFxuICAgIGVuZCgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfTtcbn1cblxuY2xhc3MgSFRNTE1lZGlhRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMuX211dGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdm9sdW1lID0gMS4wO1xuICAgIHRoaXMucmVhZHlTdGF0ZSA9IDA7XG4gICAgdGhpcy5uZXR3b3JrU3RhdGUgPSAwO1xuICAgIHRoaXMuY3VycmVudFRpbWUgPSAwO1xuICAgIHRoaXMuY3VycmVudFNyYyA9IFwiXCI7XG4gICAgdGhpcy5idWZmZXJlZCA9IGdldFRpbWVSYW5nZUR1bW15KCk7XG4gICAgdGhpcy5zZWVraW5nID0gZmFsc2U7XG4gICAgdGhpcy5kdXJhdGlvbiA9IDA7XG4gICAgdGhpcy5wYXVzZWQgPSB0cnVlO1xuICAgIHRoaXMucGxheWVkID0gZ2V0VGltZVJhbmdlRHVtbXkoKTtcbiAgICB0aGlzLnNlZWthYmxlID0gZ2V0VGltZVJhbmdlRHVtbXkoKTtcbiAgICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5hdWRpb1RyYWNrcyA9IFtdO1xuICAgIHRoaXMudmlkZW9UcmFja3MgPSBbXTtcbiAgICB0aGlzLnRleHRUcmFja3MgPSBbXTtcbiAgfVxuICAvLyBJbXBsZW1lbnRlZCBhY2NvcmluZyB0byBXM0MgRHJhZnQgMjIgQXVndXN0IDIwMTJcbiAgc2V0IGRlZmF1bHRQbGF5YmFja1JhdGUodikge1xuICAgIGlmICh2ID09PSAwLjApIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRQbGF5YmFja1JhdGUgIT09IHYpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRQbGF5YmFja1JhdGUgPSB2O1xuICAgICAgdGhpcy5fZGlzcGF0Y2hSYXRlQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgX2Rpc3BhdGNoUmF0ZUNoYW5nZSgpIHtcbiAgICBjb25zdCBldiA9IHRoaXMuX293bmVyRG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO1xuICAgIGV2LmluaXRFdmVudChcInJhdGVjaGFuZ2VcIiwgZmFsc2UsIGZhbHNlKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXYpO1xuICB9XG4gIGdldCBkZWZhdWx0UGxheWJhY2tSYXRlKCkge1xuICAgIGlmICh0aGlzLl9kZWZhdWx0UGxheWJhY2tSYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAxLjA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0UGxheWJhY2tSYXRlO1xuICB9XG4gIGdldCBwbGF5YmFja1JhdGUoKSB7XG4gICAgaWYgKHRoaXMuX3BsYXliYWNrUmF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gMS4wO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tSYXRlO1xuICB9XG4gIHNldCBwbGF5YmFja1JhdGUodikge1xuICAgIGlmICh2ICE9PSB0aGlzLl9wbGF5YmFja1JhdGUpIHtcbiAgICAgIHRoaXMuX3BsYXliYWNrUmF0ZSA9IHY7XG4gICAgICB0aGlzLl9kaXNwYXRjaFJhdGVDaGFuZ2UoKTtcbiAgICB9XG4gIH1cbiAgZ2V0IG11dGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9tdXRlZDtcbiAgfVxuICBfZGlzcGF0Y2hWb2x1bWVDaGFuZ2UoKSB7XG4gICAgY29uc3QgZXYgPSB0aGlzLl9vd25lckRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiSFRNTEV2ZW50c1wiKTtcbiAgICBldi5pbml0RXZlbnQoXCJ2b2x1bWVjaGFuZ2VcIiwgZmFsc2UsIGZhbHNlKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXYpO1xuICB9XG4gIHNldCBtdXRlZCh2KSB7XG4gICAgaWYgKHYgIT09IHRoaXMuX211dGVkKSB7XG4gICAgICB0aGlzLl9tdXRlZCA9IHY7XG4gICAgICB0aGlzLl9kaXNwYXRjaFZvbHVtZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuICBnZXQgZGVmYXVsdE11dGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcIm11dGVkXCIpICE9PSBudWxsO1xuICB9XG4gIHNldCBkZWZhdWx0TXV0ZWQodikge1xuICAgIGlmICh2KSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm11dGVkXCIsIHYpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcIm11dGVkXCIpO1xuICAgIH1cbiAgfVxuICBnZXQgdm9sdW1lKCkge1xuICAgIHJldHVybiB0aGlzLl92b2x1bWU7XG4gIH1cbiAgc2V0IHZvbHVtZSh2KSB7XG4gICAgaWYgKHYgPCAwIHx8IHYgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUik7XG4gICAgfVxuICAgIGlmICh0aGlzLl92b2x1bWUgIT09IHYpIHtcbiAgICAgIHRoaXMuX3ZvbHVtZSA9IHY7XG4gICAgICB0aGlzLl9kaXNwYXRjaFZvbHVtZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gICAgLy8gTm90ICh5ZXQpIGltcGxlbWVudGVkIGFjY29yZGluZyB0byBzcGVjXG4gICAgLy8gU2hvdWxkIHJldHVybiBzYW5lIGRlZmF1bHQgdmFsdWVzXG4gIGxvYWQoKSB7XG4gICAgbm90SW1wbGVtZW50ZWQoXCJIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5sb2FkXCIsIHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3KTtcbiAgfVxuICBjYW5QbGF5VHlwZSgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwbGF5KCkge1xuICAgIG5vdEltcGxlbWVudGVkKFwiSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUucGxheVwiLCB0aGlzLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0Vmlldyk7XG4gIH1cbiAgcGF1c2UoKSB7XG4gICAgbm90SW1wbGVtZW50ZWQoXCJIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wYXVzZVwiLCB0aGlzLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0Vmlldyk7XG4gIH1cbiAgYWRkVGV4dFRyYWNrKCkge1xuICAgIG5vdEltcGxlbWVudGVkKFwiSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUuYWRkTmV4dFRyYWNrXCIsIHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3KTtcbiAgfVxuXG4gIGdldCBzcmMoKSB7XG4gICAgcmV0dXJuIHJlZmxlY3RVUkxBdHRyaWJ1dGUodGhpcywgXCJzcmNcIik7XG4gIH1cblxuICBzZXQgc3JjKHZhbHVlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTE1lZGlhRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTE1lbnVFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MTWVudUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxNZXRhRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTE1ldGFFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MTWV0ZXJFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MTWV0ZXJFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MTW9kRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTE1vZEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxPTGlzdEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxPTGlzdEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCByZWZsZWN0VVJMQXR0cmlidXRlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLnJlZmxlY3RVUkxBdHRyaWJ1dGU7XG5jb25zdCBjbG9zZXN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmNsb3Nlc3Q7XG5cbmNsYXNzIEhUTUxPYmplY3RFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiBjbG9zZXN0KHRoaXMsIFwiZm9ybVwiKTtcbiAgfVxuXG4gIGdldCBjb250ZW50RG9jdW1lbnQoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gcmVmbGVjdFVSTEF0dHJpYnV0ZSh0aGlzLCBcImRhdGFcIik7XG4gIH1cblxuICBzZXQgZGF0YShWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkYXRhXCIsIFYpO1xuICB9XG5cbiAgZ2V0IGNvZGVCYXNlKCkge1xuICAgIHJldHVybiByZWZsZWN0VVJMQXR0cmlidXRlKHRoaXMsIFwiY29kZWJhc2VcIik7XG4gIH1cblxuICBzZXQgY29kZUJhc2UoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29kZWJhc2VcIiwgVik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MT2JqZWN0RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTE9wdEdyb3VwRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTE9wdEdyb3VwRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcbmNvbnN0IHN0cmlwQW5kQ29sbGFwc2VBU0NJSVdoaXRlc3BhY2UgPSByZXF1aXJlKFwiLi4vaGVscGVycy9zdHJpbmdzXCIpLnN0cmlwQW5kQ29sbGFwc2VBU0NJSVdoaXRlc3BhY2U7XG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBjbG9zZXN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmNsb3Nlc3Q7XG5cbmNsYXNzIEhUTUxPcHRpb25FbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoYXJncywgcHJpdmF0ZURhdGEpO1xuXG4gICAgLy8gd2hlbmV2ZXIgc2VsZWN0ZWRuZXNzIGlzIHNldCB0byB0cnVlLCBtYWtlIHN1cmUgYWxsXG4gICAgLy8gb3RoZXIgb3B0aW9ucyBzZXQgc2VsZWN0ZWRuZXNzIHRvIGZhbHNlXG4gICAgdGhpcy5fc2VsZWN0ZWRuZXNzID0gZmFsc2U7XG4gICAgdGhpcy5fZGlydHluZXNzID0gZmFsc2U7XG4gIH1cbiAgX3JlbW92ZU90aGVyU2VsZWN0ZWRuZXNzKCkge1xuICAgIC8vIFJlbW92ZSB0aGUgc2VsZWN0ZWRuZXNzIGZsYWcgZnJvbSBhbGwgb3RoZXIgb3B0aW9ucyBpbiB0aGlzIHNlbGVjdFxuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuX3NlbGVjdE5vZGU7XG5cbiAgICBpZiAoc2VsZWN0ICYmICFzZWxlY3QuaGFzQXR0cmlidXRlKFwibXVsdGlwbGVcIikpIHtcbiAgICAgIGNvbnN0IG8gPSBzZWxlY3Qub3B0aW9ucztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgby5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihvW2ldKTtcbiAgICAgICAgaWYgKG9wdGlvbiAhPT0gdGhpcykge1xuICAgICAgICAgIG9wdGlvbi5fc2VsZWN0ZWRuZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX2Fza0ZvckFSZXNldCgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLl9zZWxlY3ROb2RlO1xuICAgIGlmIChzZWxlY3QpIHtcbiAgICAgIHNlbGVjdC5fYXNrZWRGb3JBUmVzZXQoKTtcbiAgICB9XG4gIH1cbiAgX2F0dHJNb2RpZmllZChuYW1lKSB7XG4gICAgaWYgKCF0aGlzLl9kaXJ0eW5lc3MgJiYgbmFtZSA9PT0gXCJzZWxlY3RlZFwiKSB7XG4gICAgICBjb25zdCB3cmFwcGVyID0gaWRsVXRpbHMud3JhcHBlckZvckltcGwodGhpcyk7XG4gICAgICB0aGlzLl9zZWxlY3RlZG5lc3MgPSB3cmFwcGVyLmRlZmF1bHRTZWxlY3RlZDtcbiAgICAgIGlmICh0aGlzLl9zZWxlY3RlZG5lc3MpIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlT3RoZXJTZWxlY3RlZG5lc3MoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Fza0ZvckFSZXNldCgpO1xuICAgIH1cbiAgICBzdXBlci5fYXR0ck1vZGlmaWVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgZ2V0IF9zZWxlY3ROb2RlKCkge1xuICAgIGxldCBzZWxlY3QgPSBkb21TeW1ib2xUcmVlLnBhcmVudCh0aGlzKTtcbiAgICBpZiAoIXNlbGVjdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpICE9PSBcIlNFTEVDVFwiKSB7XG4gICAgICBzZWxlY3QgPSBkb21TeW1ib2xUcmVlLnBhcmVudChzZWxlY3QpO1xuICAgICAgaWYgKCFzZWxlY3QgfHwgc2VsZWN0Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgIT09IFwiU0VMRUNUXCIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Q7XG4gIH1cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIGNsb3Nlc3QodGhpcywgXCJmb3JtXCIpO1xuICB9XG4gIGdldCB0ZXh0KCkge1xuICAgIC8vIFRPRE8gaXMgbm90IGNvcnJlY3RseSBleGNsdWRpbmcgc2NyaXB0IGFuZCBTVkcgc2NyaXB0IGRlc2NlbmRhbnRzXG4gICAgcmV0dXJuIHN0cmlwQW5kQ29sbGFwc2VBU0NJSVdoaXRlc3BhY2UodGhpcy50ZXh0Q29udGVudCk7XG4gIH1cbiAgc2V0IHRleHQoVikge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBWO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcInZhbHVlXCIpID8gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB2YWwpO1xuICB9XG4gIGdldCBpbmRleCgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBjbG9zZXN0KHRoaXMsIFwic2VsZWN0XCIpO1xuICAgIGlmIChzZWxlY3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHNlbGVjdC5vcHRpb25zLCBpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKSk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZG5lc3M7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHMpIHtcbiAgICB0aGlzLl9kaXJ0eW5lc3MgPSB0cnVlO1xuICAgIHRoaXMuX3NlbGVjdGVkbmVzcyA9IEJvb2xlYW4ocyk7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkbmVzcykge1xuICAgICAgdGhpcy5fcmVtb3ZlT3RoZXJTZWxlY3RlZG5lc3MoKTtcbiAgICB9XG4gICAgdGhpcy5fYXNrRm9yQVJlc2V0KCk7XG4gIH1cblxuICAvLyBUT0RPIHRoaXMgaXMgcXVpdGUgd3JvbmdcbiAgZ2V0IGxhYmVsKCkge1xuICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZShcImxhYmVsXCIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJsYWJlbFwiKTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ID0gdGhpcy5fc2VsZWN0Tm9kZTtcbiAgICBpZiAoc2VsZWN0KSB7XG4gICAgICByZXR1cm4gc2VsZWN0LmdldEF0dHJpYnV0ZShcImxhYmVsXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNldCBsYWJlbChWKSB7XG4gICAgY29uc3Qgc2VsZWN0ID0gdGhpcy5fc2VsZWN0Tm9kZTtcbiAgICBpZiAoc2VsZWN0KSB7XG4gICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKFwibGFiZWxcIiwgVik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTE9wdGlvbkVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxPdXRwdXRFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MT3V0cHV0RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MUGFyYW1FbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MUGFyYW1FbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MUHJlRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFByZUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxQcm9ncmVzc0VsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxQcm9ncmVzc0VsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxRdW90ZUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxRdW90ZUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCB2bSA9IHJlcXVpcmUoXCJ2bVwiKTtcbmNvbnN0IHdoYXR3Z0VuY29kaW5nID0gcmVxdWlyZShcIndoYXR3Zy1lbmNvZGluZ1wiKTtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IHJlZmxlY3RVUkxBdHRyaWJ1dGUgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikucmVmbGVjdFVSTEF0dHJpYnV0ZTtcbmNvbnN0IHJlc291cmNlTG9hZGVyID0gcmVxdWlyZShcIi4uLy4uL2Jyb3dzZXIvcmVzb3VyY2UtbG9hZGVyXCIpO1xuY29uc3QgcmVwb3J0RXhjZXB0aW9uID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcnVudGltZS1zY3JpcHQtZXJyb3JzXCIpO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuY29uc3Qgbm9kZVR5cGVzID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcblxuY29uc3QganNNSU1FVHlwZXMgPSBuZXcgU2V0KFtcbiAgXCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0XCIsXG4gIFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiLFxuICBcImFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiLFxuICBcImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdFwiLFxuICBcInRleHQvZWNtYXNjcmlwdFwiLFxuICBcInRleHQvamF2YXNjcmlwdFwiLFxuICBcInRleHQvamF2YXNjcmlwdDEuMFwiLFxuICBcInRleHQvamF2YXNjcmlwdDEuMVwiLFxuICBcInRleHQvamF2YXNjcmlwdDEuMlwiLFxuICBcInRleHQvamF2YXNjcmlwdDEuM1wiLFxuICBcInRleHQvamF2YXNjcmlwdDEuNFwiLFxuICBcInRleHQvamF2YXNjcmlwdDEuNVwiLFxuICBcInRleHQvanNjcmlwdFwiLFxuICBcInRleHQvbGl2ZXNjcmlwdFwiLFxuICBcInRleHQveC1lY21hc2NyaXB0XCIsXG4gIFwidGV4dC94LWphdmFzY3JpcHRcIlxuXSk7XG5cbmNsYXNzIEhUTUxTY3JpcHRFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIF9hdHRhY2goKSB7XG4gICAgc3VwZXIuX2F0dGFjaCgpO1xuICAgIGlmICh0aGlzLnNyYykge1xuICAgICAgcmVzb3VyY2VMb2FkZXIubG9hZChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5zcmMsXG4gICAgICAgIHsgZGVmYXVsdEVuY29kaW5nOiB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZSh0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJzZXRcIikpIHx8IHRoaXMuX293bmVyRG9jdW1lbnQuX2VuY29kaW5nIH0sXG4gICAgICAgIHRoaXMuX2V2YWxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRleHQudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc291cmNlTG9hZGVyLmVucXVldWUodGhpcywgdGhpcy5fb3duZXJEb2N1bWVudC5VUkwsIHRoaXMuX2V2YWwpKG51bGwsIHRoaXMudGV4dCk7XG4gICAgfVxuICB9XG5cbiAgX2F0dHJNb2RpZmllZChuYW1lLCB2YWx1ZSwgb2xkVmFsdWUpIHtcbiAgICBzdXBlci5fYXR0ck1vZGlmaWVkKG5hbWUsIHZhbHVlLCBvbGRWYWx1ZSk7XG5cbiAgICBpZiAodGhpcy5fYXR0YWNoZWQgJiYgbmFtZSA9PT0gXCJzcmNcIiAmJiBvbGRWYWx1ZSA9PT0gbnVsbCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmVzb3VyY2VMb2FkZXIubG9hZChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5zcmMsXG4gICAgICAgIHsgZGVmYXVsdEVuY29kaW5nOiB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZSh0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJzZXRcIikpIHx8IHRoaXMuX293bmVyRG9jdW1lbnQuX2VuY29kaW5nIH0sXG4gICAgICAgIHRoaXMuX2V2YWxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgX2V2YWwodGV4dCwgZmlsZW5hbWUpIHtcbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy5fZ2V0VHlwZVN0cmluZygpO1xuXG4gICAgaWYgKHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3ICYmIHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3Ll9ydW5TY3JpcHRzID09PSBcImRhbmdlcm91c2x5XCIgJiZcbiAgICAgICAganNNSU1FVHlwZXMuaGFzKHR5cGVTdHJpbmcudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIHRoaXMuX293bmVyRG9jdW1lbnQuX3dyaXRlQWZ0ZXJFbGVtZW50ID0gdGhpcztcbiAgICAgIHByb2Nlc3NKYXZhU2NyaXB0KHRoaXMsIHRleHQsIGZpbGVuYW1lKTtcbiAgICAgIGRlbGV0ZSB0aGlzLl9vd25lckRvY3VtZW50Ll93cml0ZUFmdGVyRWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBfZ2V0VHlwZVN0cmluZygpIHtcbiAgICBjb25zdCB0eXBlQXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICBjb25zdCBsYW5nQXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibGFuZ3VhZ2VcIik7XG5cbiAgICBpZiAodHlwZUF0dHIgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcInRleHQvamF2YXNjcmlwdFwiO1xuICAgIH1cblxuICAgIGlmICh0eXBlQXR0ciA9PT0gbnVsbCAmJiBsYW5nQXR0ciA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwidGV4dC9qYXZhc2NyaXB0XCI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVBdHRyID09PSBudWxsICYmIGxhbmdBdHRyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcbiAgICB9XG5cbiAgICBpZiAodHlwZUF0dHIgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0eXBlQXR0ci50cmltKCk7XG4gICAgfVxuXG4gICAgaWYgKGxhbmdBdHRyICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJ0ZXh0L1wiICsgbGFuZ0F0dHI7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgdGV4dCgpIHtcbiAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBkb21TeW1ib2xUcmVlLmNoaWxkcmVuSXRlcmF0b3IodGhpcykpIHtcbiAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gbm9kZVR5cGVzLlRFWFRfTk9ERSkge1xuICAgICAgICB0ZXh0ICs9IGNoaWxkLm5vZGVWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBzZXQgdGV4dCh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH1cblxuICBnZXQgc3JjKCkge1xuICAgIHJldHVybiByZWZsZWN0VVJMQXR0cmlidXRlKHRoaXMsIFwic3JjXCIpO1xuICB9XG5cbiAgc2V0IHNyYyhWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgVik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0phdmFTY3JpcHQoZWxlbWVudCwgY29kZSwgZmlsZW5hbWUpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gIGNvbnN0IHdpbmRvdyA9IGRvY3VtZW50ICYmIGRvY3VtZW50Ll9nbG9iYWw7XG5cbiAgaWYgKHdpbmRvdykge1xuICAgIGRvY3VtZW50Ll9jdXJyZW50U2NyaXB0ID0gZWxlbWVudDtcblxuICAgIHRyeSB7XG4gICAgICB2bS5ydW5JbkNvbnRleHQoY29kZSwgd2luZG93LCB7IGZpbGVuYW1lLCBkaXNwbGF5RXJyb3JzOiBmYWxzZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXBvcnRFeGNlcHRpb24od2luZG93LCBlLCBmaWxlbmFtZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRvY3VtZW50Ll9jdXJyZW50U2NyaXB0ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MU2NyaXB0RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcbmNvbnN0IGNyZWF0ZUhUTUxDb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uL2h0bWwtY29sbGVjdGlvblwiKS5jcmVhdGU7XG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBkZXNjZW5kYW50c0J5SFRNTExvY2FsTmFtZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5kZXNjZW5kYW50c0J5SFRNTExvY2FsTmFtZTtcbmNvbnN0IGNsb3Nlc3QgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuY2xvc2VzdDtcblxuY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgX2Zvcm1SZXNldCgpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRoaXMub3B0aW9ucywgb3B0aW9uID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbkltcGwgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihvcHRpb24pO1xuICAgICAgb3B0aW9uSW1wbC5fc2VsZWN0ZWRuZXNzID0gb3B0aW9uLmRlZmF1bHRTZWxlY3RlZDtcbiAgICAgIG9wdGlvbkltcGwuX2RpcnR5bmVzcyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuX2Fza2VkRm9yQVJlc2V0KCk7XG4gIH1cblxuICBfYXNrZWRGb3JBUmVzZXQoKSB7XG4gICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKFwibXVsdGlwbGVcIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCh0aGlzLm9wdGlvbnMsIG9wdGlvbiA9PiB7XG4gICAgICBvcHRpb24gPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihvcHRpb24pO1xuICAgICAgcmV0dXJuIG9wdGlvbi5fc2VsZWN0ZWRuZXNzO1xuICAgIH0pO1xuXG4gICAgLy8gc2l6ZSA9IDEgaXMgZGVmYXVsdCBpZiBub3QgbXVsdGlwbGVcbiAgICBpZiAoKCF0aGlzLnNpemUgfHwgdGhpcy5zaXplID09PSAxKSAmJiAhc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAvLyBzZWxlY3QgdGhlIGZpcnN0IG9wdGlvbiB0aGF0IGlzIG5vdCBkaXNhYmxlZFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpcy5vcHRpb25zW2ldKTtcbiAgICAgICAgbGV0IGRpc2FibGVkID0gdGhpcy5vcHRpb25zW2ldLmRpc2FibGVkO1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gZG9tU3ltYm9sVHJlZS5wYXJlbnQob3B0aW9uKTtcbiAgICAgICAgaWYgKHBhcmVudE5vZGUgJiZcbiAgICAgICAgICAgIHBhcmVudE5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gXCJPUFRHUk9VUFwiICYmXG4gICAgICAgICAgICBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChwYXJlbnROb2RlKS5kaXNhYmxlZCkge1xuICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICAvLyAoZG8gbm90IHNldCBkaXJ0eSlcbiAgICAgICAgICBvcHRpb24uX3NlbGVjdGVkbmVzcyA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkLmxlbmd0aCA+PSAyKSB7XG4gICAgICAvLyBzZWxlY3QgdGhlIGxhc3Qgc2VsZWN0ZWQgb3B0aW9uXG4gICAgICBzZWxlY3RlZC5mb3JFYWNoKChvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgIG9wdGlvbiA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKG9wdGlvbik7XG4gICAgICAgIG9wdGlvbi5fc2VsZWN0ZWRuZXNzID0gaW5kZXggPT09IHNlbGVjdGVkLmxlbmd0aCAtIDE7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfZGVzY2VuZGFudEFkZGVkKHBhcmVudCwgY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUpIHtcbiAgICAgIHRoaXMuX2Fza2VkRm9yQVJlc2V0KCk7XG4gICAgfVxuXG4gICAgc3VwZXIuX2Rlc2NlbmRhbnRBZGRlZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2Rlc2NlbmRhbnRSZW1vdmVkKHBhcmVudCwgY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUpIHtcbiAgICAgIHRoaXMuX2Fza2VkRm9yQVJlc2V0KCk7XG4gICAgfVxuXG4gICAgc3VwZXIuX2Rlc2NlbmRhbnRSZW1vdmVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfYXR0ck1vZGlmaWVkKG5hbWUpIHtcbiAgICBpZiAobmFtZSA9PT0gXCJtdWx0aXBsZVwiIHx8IG5hbWUgPT09IFwic2l6ZVwiKSB7XG4gICAgICB0aGlzLl9hc2tlZEZvckFSZXNldCgpO1xuICAgIH1cbiAgICBzdXBlci5fYXR0ck1vZGlmaWVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgSFRNTE9wdGlvbnNDb2xsZWN0aW9uXG4gICAgcmV0dXJuIGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMsICgpID0+IGRlc2NlbmRhbnRzQnlIVE1MTG9jYWxOYW1lKHRoaXMsIFwib3B0aW9uXCIpKTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGg7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRPcHRpb25zKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MQ29sbGVjdGlvbih0aGlzLCAoKSA9PiBkb21TeW1ib2xUcmVlLnRyZWVUb0FycmF5KHRoaXMsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLl9sb2NhbE5hbWUgPT09IFwib3B0aW9uXCIgJiYgbm9kZS5fc2VsZWN0ZWRuZXNzID09PSB0cnVlO1xuICAgIH0gfSkpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkSW5kZXgoKSB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodC5jYWxsKHRoaXMub3B0aW9ucywgKHByZXYsIG9wdGlvbiwgaSkgPT4ge1xuICAgICAgb3B0aW9uID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIob3B0aW9uKTtcbiAgICAgIHJldHVybiBvcHRpb24uc2VsZWN0ZWQgPyBpIDogcHJldjtcbiAgICB9LCAtMSk7XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleCkge1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodGhpcy5vcHRpb25zLCAob3B0aW9uLCBpKSA9PiB7XG4gICAgICBvcHRpb24gPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihvcHRpb24pO1xuICAgICAgb3B0aW9uLnNlbGVjdGVkID0gaSA9PT0gaW5kZXg7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgbGV0IGkgPSB0aGlzLnNlbGVjdGVkSW5kZXg7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggJiYgKGkgPT09IC0xKSkge1xuICAgICAgaSA9IDA7XG4gICAgfVxuICAgIGlmIChpID09PSAtMSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnNbaV0udmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0aGlzLm9wdGlvbnMsIG9wdGlvbiA9PiB7XG4gICAgICBvcHRpb24gPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihvcHRpb24pO1xuICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsKSB7XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKCFzZWxmLmhhc0F0dHJpYnV0ZShcIm11bHRpcGxlXCIpKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgc2VsZWN0ZWQgYml0IGZyb20gYWxsIG90aGVyIG9wdGlvbnMgaW4gdGhpcyBncm91cFxuICAgICAgICAvLyBpZiB0aGUgbXVsdGlwbGUgYXR0ciBpcyBub3QgcHJlc2VudCBvbiB0aGUgc2VsZWN0XG4gICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIGNsb3Nlc3QodGhpcywgXCJmb3JtXCIpO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwibXVsdGlwbGVcIikgPyBcInNlbGVjdC1tdWx0aXBsZVwiIDogXCJzZWxlY3Qtb25lXCI7XG4gIH1cblxuICBhZGQob3B0LCBiZWZvcmUpIHtcbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICB0aGlzLmluc2VydEJlZm9yZShvcHQsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwZW5kQ2hpbGQob3B0KTtcbiAgICB9XG4gIH1cblxuICByZW1vdmUoaW5kZXgpIHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgb3B0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGVsID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIob3B0c1tpbmRleF0pO1xuICAgICAgZG9tU3ltYm9sVHJlZS5wYXJlbnQoZWwpLnJlbW92ZUNoaWxkKGVsKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwic2l6ZVwiKSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IHNpemUgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0odGhpcy5nZXRBdHRyaWJ1dGUoXCJzaXplXCIpKTtcbiAgICBpZiAoaXNOYU4oc2l6ZSkpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuXG4gIHNldCBzaXplKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNpemVcIiwgVik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MU2VsZWN0RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IHJlZmxlY3RVUkxBdHRyaWJ1dGUgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikucmVmbGVjdFVSTEF0dHJpYnV0ZTtcblxuY2xhc3MgSFRNTFNvdXJjZUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgZ2V0IHNyYygpIHtcbiAgICByZXR1cm4gcmVmbGVjdFVSTEF0dHJpYnV0ZSh0aGlzLCBcInNyY1wiKTtcbiAgfVxuXG4gIHNldCBzcmModmFsdWUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNyY1wiLCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MU291cmNlRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTFNwYW5FbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MU3BhbkVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgTGlua1N0eWxlSW1wbCA9IHJlcXVpcmUoXCIuL0xpbmtTdHlsZS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcbmNvbnN0IGV2YWx1YXRlU3R5bGVzaGVldCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3N0eWxlc2hlZXRzXCIpLmV2YWx1YXRlU3R5bGVzaGVldDtcbmNvbnN0IGRvY3VtZW50QmFzZVVSTCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsXCIpLmRvY3VtZW50QmFzZVVSTDtcblxuY2xhc3MgSFRNTFN0eWxlRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBfYXR0YWNoKCkge1xuICAgIGlmICh0aGlzLnR5cGUgJiYgdGhpcy50eXBlICE9PSBcInRleHQvY3NzXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29udGVudCA9IFwiXCI7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBkb21TeW1ib2xUcmVlLmNoaWxkcmVuSXRlcmF0b3IodGhpcykpIHtcbiAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLlRFWFRfTk9ERSkge1xuICAgICAgICBjb250ZW50ICs9IGNoaWxkLm5vZGVWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBldmFsdWF0ZVN0eWxlc2hlZXQodGhpcywgY29udGVudCwgdGhpcy5zaGVldCwgZG9jdW1lbnRCYXNlVVJMKHRoaXMuX293bmVyRG9jdW1lbnQpKTtcblxuICAgIHN1cGVyLl9hdHRhY2goKTtcbiAgfVxufVxuXG5pZGxVdGlscy5taXhpbihIVE1MU3R5bGVFbGVtZW50SW1wbC5wcm90b3R5cGUsIExpbmtTdHlsZUltcGwucHJvdG90eXBlKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MU3R5bGVFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5cbmNvbnN0IGNsb3Nlc3QgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuY2xvc2VzdDtcbmNvbnN0IGNyZWF0ZURPTVRva2VuTGlzdCA9IHJlcXVpcmUoXCIuLi9kb20tdG9rZW4tbGlzdFwiKS5jcmVhdGU7XG5jb25zdCByZXNldERPTVRva2VuTGlzdCA9IHJlcXVpcmUoXCIuLi9kb20tdG9rZW4tbGlzdFwiKS5yZXNldDtcblxuY2xhc3MgSFRNTFRhYmxlQ2VsbEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBnZXQgaGVhZGVycygpIHtcbiAgICBpZiAodGhpcy5faGVhZGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9oZWFkZXJzID0gY3JlYXRlRE9NVG9rZW5MaXN0KHRoaXMsIFwiaGVhZGVyc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlcnM7XG4gIH1cblxuICBnZXQgY2VsbEluZGV4KCkge1xuICAgIGNvbnN0IHRyID0gY2xvc2VzdCh0aGlzLCBcInRyXCIpO1xuICAgIGlmICh0ciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRyLmNlbGxzLCBpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKSk7XG4gIH1cblxuICBnZXQgY29sU3BhbigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY29sc3BhblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyAxIDogdmFsdWU7XG4gIH1cblxuICBzZXQgY29sU3BhbihWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb2xzcGFuXCIsIFN0cmluZyhWKSk7XG4gIH1cblxuICBnZXQgcm93U3BhbigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwicm93c3BhblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyAxIDogdmFsdWU7XG4gIH1cblxuICBzZXQgcm93U3BhbihWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJyb3dzcGFuXCIsIFN0cmluZyhWKSk7XG4gIH1cblxuICBfYXR0ck1vZGlmaWVkKG5hbWUsIHZhbHVlLCBvbGRWYWx1ZSkge1xuICAgIGlmIChuYW1lID09PSBcImhlYWRlcnNcIiAmJiB0aGlzLl9oZWFkZXJzKSB7XG4gICAgICByZXNldERPTVRva2VuTGlzdCh0aGlzLl9oZWFkZXJzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgc3VwZXIuX2F0dHJNb2RpZmllZChuYW1lLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFRhYmxlQ2VsbEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFRhYmxlQ29sRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTFRhYmxlQ2VsbEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNvbnN0IGZpcnN0Q2hpbGRXaXRoSFRNTExvY2FsTmFtZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5maXJzdENoaWxkV2l0aEhUTUxMb2NhbE5hbWU7XG5jb25zdCBjaGlsZHJlbkJ5SFRNTExvY2FsTmFtZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5jaGlsZHJlbkJ5SFRNTExvY2FsTmFtZTtcbmNvbnN0IGNyZWF0ZUhUTUxDb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL2xpdmluZy9odG1sLWNvbGxlY3Rpb25cIikuY3JlYXRlO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG5jbGFzcyBIVE1MVGFibGVFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGdldCBjYXB0aW9uKCkge1xuICAgIHJldHVybiBmaXJzdENoaWxkV2l0aEhUTUxMb2NhbE5hbWUodGhpcywgXCJjYXB0aW9uXCIpO1xuICB9XG5cbiAgZ2V0IHRIZWFkKCkge1xuICAgIHJldHVybiBmaXJzdENoaWxkV2l0aEhUTUxMb2NhbE5hbWUodGhpcywgXCJ0aGVhZFwiKTtcbiAgfVxuXG4gIGdldCB0Rm9vdCgpIHtcbiAgICByZXR1cm4gZmlyc3RDaGlsZFdpdGhIVE1MTG9jYWxOYW1lKHRoaXMsIFwidGZvb3RcIik7XG4gIH1cblxuICBnZXQgcm93cygpIHtcbiAgICBpZiAoIXRoaXMuX3Jvd3MpIHtcbiAgICAgIHRoaXMuX3Jvd3MgPSBjcmVhdGVIVE1MQ29sbGVjdGlvbih0aGlzLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gW107XG4gICAgICAgIGlmICh0aGlzLnRIZWFkKSB7XG4gICAgICAgICAgc2VjdGlvbnMucHVzaCh0aGlzLnRIZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBzZWN0aW9ucy5wdXNoKC4uLmNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lKHRoaXMsIFwidGJvZHlcIikpO1xuICAgICAgICBpZiAodGhpcy50Rm9vdCkge1xuICAgICAgICAgIHNlY3Rpb25zLnB1c2godGhpcy50Rm9vdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lKHRoaXMsIFwidHJcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiBzZWN0aW9ucykge1xuICAgICAgICAgIHJvd3MucHVzaCguLi5jaGlsZHJlbkJ5SFRNTExvY2FsTmFtZShzLCBcInRyXCIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93cztcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcm93cztcbiAgfVxuXG4gIGdldCB0Qm9kaWVzKCkge1xuICAgIGlmICghdGhpcy5fdEJvZGllcykge1xuICAgICAgdGhpcy5fdEJvZGllcyA9IGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMsICgpID0+IGNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lKHRoaXMsIFwidGJvZHlcIikpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdEJvZGllcztcbiAgfVxuXG4gIGNyZWF0ZVRIZWFkKCkge1xuICAgIGxldCBlbCA9IHRoaXMudEhlYWQ7XG4gICAgaWYgKCFlbCkge1xuICAgICAgZWwgPSB0aGlzLl9vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJUSEVBRFwiKTtcbiAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIH1cbiAgICByZXR1cm4gZWw7XG4gIH1cblxuICBkZWxldGVUSGVhZCgpIHtcbiAgICBjb25zdCBlbCA9IHRoaXMudEhlYWQ7XG4gICAgaWYgKGVsKSB7XG4gICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVURm9vdCgpIHtcbiAgICBsZXQgZWwgPSB0aGlzLnRGb290O1xuICAgIGlmICghZWwpIHtcbiAgICAgIGVsID0gdGhpcy5fb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiVEZPT1RcIik7XG4gICAgICB0aGlzLmFwcGVuZENoaWxkKGVsKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsO1xuICB9XG5cbiAgZGVsZXRlVEZvb3QoKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzLnRGb290O1xuICAgIGlmIChlbCkge1xuICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQ2FwdGlvbigpIHtcbiAgICBsZXQgZWwgPSB0aGlzLmNhcHRpb247XG4gICAgaWYgKCFlbCkge1xuICAgICAgZWwgPSB0aGlzLl9vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJDQVBUSU9OXCIpO1xuICAgICAgdGhpcy5hcHBlbmRDaGlsZChlbCk7XG4gICAgfVxuICAgIHJldHVybiBlbDtcbiAgfVxuXG4gIGRlbGV0ZUNhcHRpb24oKSB7XG4gICAgY29uc3QgYyA9IHRoaXMuY2FwdGlvbjtcbiAgICBpZiAoYykge1xuICAgICAgYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpO1xuICAgIH1cbiAgfVxuXG4gIGluc2VydFJvdyhpbmRleCkge1xuICAgIGlmIChpbmRleCA8IC0xIHx8IGluZGV4ID4gdGhpcy5yb3dzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIsXG4gICAgICAgIFwiQ2Fubm90IGluc2VydCBhIHJvdyBhdCBhbiBpbmRleCB0aGF0IGlzIGxlc3MgdGhhbiAtMSBvciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBleGlzdGluZyByb3dzXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyID0gdGhpcy5fb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidHJcIik7XG5cbiAgICBpZiAodGhpcy5yb3dzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnRCb2RpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCB0Qm9keSA9IHRoaXMuX293bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRib2R5XCIpO1xuICAgICAgdEJvZHkuYXBwZW5kQ2hpbGQodHIpO1xuICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0Qm9keSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCB0Qm9keSA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXMudEJvZGllc1t0aGlzLnRCb2RpZXMubGVuZ3RoIC0gMV0pO1xuICAgICAgdEJvZHkuYXBwZW5kQ2hpbGQodHIpO1xuICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSB0aGlzLnJvd3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0U2VjdGlvbiA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXMucm93c1t0aGlzLnJvd3MubGVuZ3RoIC0gMV0pLnBhcmVudE5vZGU7XG4gICAgICB0U2VjdGlvbi5hcHBlbmRDaGlsZCh0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJlZm9yZVRSID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpcy5yb3dzW2luZGV4XSk7XG4gICAgICBjb25zdCB0U2VjdGlvbiA9IGJlZm9yZVRSLnBhcmVudE5vZGU7XG4gICAgICB0U2VjdGlvbi5pbnNlcnRCZWZvcmUodHIsIGJlZm9yZVRSKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHI7XG4gIH1cblxuICBkZWxldGVSb3coaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBpbmRleCA9IHRoaXMucm93cy5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5yb3dzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIsIGBDYW5ub3QgZGVsZXRlIGEgcm93IGF0IGluZGV4ICR7aW5kZXh9LCB3aGVyZSBubyByb3cgZXhpc3RzYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHIgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzLnJvd3NbaW5kZXhdKTtcbiAgICB0ci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRyKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxUYWJsZUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxUYWJsZUNlbGxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcbmNvbnN0IGNyZWF0ZUhUTUxDb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL2xpdmluZy9odG1sLWNvbGxlY3Rpb25cIikuY3JlYXRlO1xuY29uc3QgY2hpbGRyZW5CeUhUTUxMb2NhbE5hbWVzID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lcztcbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcbmNvbnN0IGNsb3Nlc3QgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuY2xvc2VzdDtcblxuY29uc3QgY2VsbExvY2FsTmFtZXMgPSBuZXcgU2V0KFtcInRkXCIsIFwidGhcIl0pO1xuXG5jbGFzcyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGdldCBjZWxscygpIHtcbiAgICBpZiAoIXRoaXMuX2NlbGxzKSB7XG4gICAgICB0aGlzLl9jZWxscyA9IGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMsICgpID0+IGNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lcyh0aGlzLCBjZWxsTG9jYWxOYW1lcykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2VsbHM7XG4gIH1cblxuICBnZXQgcm93SW5kZXgoKSB7XG4gICAgY29uc3QgdGFibGUgPSBjbG9zZXN0KHRoaXMsIFwidGFibGVcIik7XG4gICAgcmV0dXJuIHRhYmxlID8gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0YWJsZS5yb3dzLCBpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKSkgOiAtMTtcbiAgfVxuXG4gIGdldCBzZWN0aW9uUm93SW5kZXgoKSB7XG4gICAgY29uc3QgcGFyZW50ID0gZG9tU3ltYm9sVHJlZS5wYXJlbnQodGhpcyk7XG4gICAgaWYgKHBhcmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGNvbnN0IHJvd3MgPSBwYXJlbnQucm93cztcbiAgICBpZiAoIXJvd3MpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChyb3dzLCBpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKSk7XG4gIH1cblxuICBpbnNlcnRDZWxsKGluZGV4KSB7XG4gICAgY29uc3QgdGQgPSB0aGlzLl9vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJURFwiKTtcbiAgICBjb25zdCBjZWxscyA9IHRoaXMuY2VsbHM7XG4gICAgaWYgKGluZGV4IDwgLTEgfHwgaW5kZXggPiBjZWxscy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSKTtcbiAgICB9XG4gICAgaWYgKGluZGV4ID09PSAtMSB8fCBpbmRleCA9PT0gY2VsbHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFwcGVuZENoaWxkKHRkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVmID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIoY2VsbHNbaW5kZXhdKTtcbiAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHRkLCByZWYpO1xuICAgIH1cbiAgICByZXR1cm4gdGQ7XG4gIH1cblxuICBkZWxldGVDZWxsKGluZGV4KSB7XG4gICAgY29uc3QgY2VsbHMgPSB0aGlzLmNlbGxzO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIGluZGV4ID0gY2VsbHMubGVuZ3RoIC0gMTtcbiAgICB9XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBjZWxscy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSKTtcbiAgICB9XG4gICAgY29uc3QgdGQgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihjZWxsc1tpbmRleF0pO1xuICAgIHRoaXMucmVtb3ZlQ2hpbGQodGQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFRhYmxlUm93RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcbmNvbnN0IGNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lO1xuY29uc3QgY3JlYXRlSFRNTENvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vbGl2aW5nL2h0bWwtY29sbGVjdGlvblwiKS5jcmVhdGU7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5cbmNsYXNzIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGdldCByb3dzKCkge1xuICAgIGlmICghdGhpcy5fcm93cykge1xuICAgICAgdGhpcy5fcm93cyA9IGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMsICgpID0+IGNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lKHRoaXMsIFwidHJcIikpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcm93cztcbiAgfVxuXG4gIGluc2VydFJvdyhpbmRleCkge1xuICAgIGlmIChpbmRleCA8IC0xIHx8IGluZGV4ID4gdGhpcy5yb3dzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIsXG4gICAgICAgIFwiQ2Fubm90IGluc2VydCBhIHJvdyBhdCBhbiBpbmRleCB0aGF0IGlzIGxlc3MgdGhhbiAtMSBvciBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBleGlzdGluZyByb3dzXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyID0gdGhpcy5fb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidHJcIik7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSB0aGlzLnJvd3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFwcGVuZENoaWxkKHRyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYmVmb3JlVFIgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzLnJvd3NbaW5kZXhdKTtcbiAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHRyLCBiZWZvcmVUUik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyO1xuICB9XG5cbiAgZGVsZXRlUm93KGluZGV4KSB7XG4gICAgaWYgKGluZGV4IDwgLTEgfHwgaW5kZXggPj0gdGhpcy5yb3dzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIsIGBDYW5ub3QgZGVsZXRlIGEgcm93IGF0IGluZGV4ICR7aW5kZXh9LCB3aGVyZSBubyByb3cgZXhpc3RzYCk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgaWYgKHRoaXMucm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHRyID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpcy5yb3dzW3RoaXMucm93cy5sZW5ndGggLSAxXSk7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQodHIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0ciA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXMucm93c1tpbmRleF0pO1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0cik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNvbnN0IGNsb25pbmdTdGVwcyA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5jbG9uaW5nU3RlcHM7XG5jb25zdCBjbG9uZSA9IHJlcXVpcmUoXCIuLi9ub2RlXCIpLmNsb25lO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuXG5jbGFzcyBIVE1MVGVtcGxhdGVFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoYXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHRoaXMuX3RlbXBsYXRlQ29udGVudHMgPSB0aGlzLl9vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgfVxuXG4gIGdldCBjb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUNvbnRlbnRzO1xuICB9XG5cbiAgW2Nsb25pbmdTdGVwc10oY29weSwgbm9kZSwgZG9jdW1lbnQsIGNsb25lQ2hpbGRyZW4pIHtcbiAgICBpZiAoIWNsb25lQ2hpbGRyZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcihub2RlLl90ZW1wbGF0ZUNvbnRlbnRzKSkge1xuICAgICAgY29uc3QgY2hpbGRDb3B5ID0gY2xvbmUodGhpcy5fY29yZSwgY2hpbGQsIGNvcHkuX3RlbXBsYXRlQ29udGVudHMuX293bmVyRG9jdW1lbnQsIHRydWUpO1xuICAgICAgY29weS5fdGVtcGxhdGVDb250ZW50cy5hcHBlbmRDaGlsZChjaGlsZENvcHkpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxUZW1wbGF0ZUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcbmNvbnN0IGNsb3Nlc3QgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuY2xvc2VzdDtcbmNvbnN0IG5vcm1hbGl6ZVRvQ1JMRiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2Zvcm0tY29udHJvbHNcIikubm9ybWFsaXplVG9DUkxGO1xuXG5jbGFzcyBIVE1MVGV4dEFyZWFFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG5cbiAgICB0aGlzLl9yYXdWYWx1ZSA9IFwiXCI7XG4gICAgdGhpcy5fZGlydHlWYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgX2Zvcm1SZXNldCgpIHtcbiAgICB0aGlzLl9yYXdWYWx1ZSA9IHRoaXMudGV4dENvbnRlbnQ7XG4gICAgdGhpcy5fZGlydHlWYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgX2dldEFQSVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9yYXdWYWx1ZS5yZXBsYWNlKC9cXHJcXG4vZywgXCJcXG5cIikucmVwbGFjZSgvXFxyL2csIFwiXFxuXCIpO1xuICB9XG5cbiAgX2dldFZhbHVlKCkge1xuICAgIC8vIEhhcmQtd3JhcHBpbmcgb21pdHRlZCwgZm9yIG5vdy5cbiAgICByZXR1cm4gbm9ybWFsaXplVG9DUkxGKHRoaXMuX3Jhd1ZhbHVlKTtcbiAgfVxuXG4gIF9tb2RpZmllZCgpIHtcbiAgICBzdXBlci5fbW9kaWZpZWQoKTtcblxuICAgIGlmICh0aGlzLl9kaXJ0eVZhbHVlID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fcmF3VmFsdWUgPSB0aGlzLnRleHRDb250ZW50O1xuICAgIH1cbiAgfVxuXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiBjbG9zZXN0KHRoaXMsIFwiZm9ybVwiKTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dENvbnRlbnQ7XG4gIH1cblxuICBzZXQgZGVmYXVsdFZhbHVlKHZhbCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWw7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldEFQSVZhbHVlKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsKSB7XG4gICAgdGhpcy5fcmF3VmFsdWUgPSB2YWw7XG4gICAgdGhpcy5fZGlydHlWYWx1ZSA9IHRydWU7XG5cbiAgICB0aGlzLl9zZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgdGhpcy5fc2VsZWN0aW9uRW5kID0gMDtcbiAgICB0aGlzLl9zZWxlY3Rpb25EaXJlY3Rpb24gPSBcIm5vbmVcIjtcbiAgfVxuXG4gIGdldCB0ZXh0TGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLmxlbmd0aDsgLy8gY29kZSB1bml0IGxlbmd0aCAoMTYgYml0KVxuICB9XG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcInRleHRhcmVhXCI7XG4gIH1cblxuICBfZGlzcGF0Y2hTZWxlY3RFdmVudCgpIHtcbiAgICBjb25zdCBldmVudCA9IHRoaXMuX293bmVyRG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO1xuICAgIGV2ZW50LmluaXRFdmVudChcInNlbGVjdFwiLCB0cnVlLCB0cnVlKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9XG4gIF9nZXRWYWx1ZUxlbmd0aCgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMudmFsdWUgPT09IFwic3RyaW5nXCIgPyB0aGlzLnZhbHVlLmxlbmd0aCA6IDA7XG4gIH1cbiAgc2VsZWN0KCkge1xuICAgIHRoaXMuX3NlbGVjdGlvblN0YXJ0ID0gMDtcbiAgICB0aGlzLl9zZWxlY3Rpb25FbmQgPSB0aGlzLl9nZXRWYWx1ZUxlbmd0aCgpO1xuICAgIHRoaXMuX3NlbGVjdGlvbkRpcmVjdGlvbiA9IFwibm9uZVwiO1xuICAgIHRoaXMuX2Rpc3BhdGNoU2VsZWN0RXZlbnQoKTtcbiAgfVxuICBnZXQgc2VsZWN0aW9uU3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvblN0YXJ0O1xuICB9XG4gIHNldCBzZWxlY3Rpb25TdGFydChzdGFydCkge1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIE1hdGgubWF4KHN0YXJ0LCB0aGlzLl9zZWxlY3Rpb25FbmQpLCB0aGlzLl9zZWxlY3Rpb25EaXJlY3Rpb24pO1xuICB9XG4gIGdldCBzZWxlY3Rpb25FbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkVuZDtcbiAgfVxuICBzZXQgc2VsZWN0aW9uRW5kKGVuZCkge1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5fc2VsZWN0aW9uU3RhcnQsIGVuZCwgdGhpcy5fc2VsZWN0aW9uRGlyZWN0aW9uKTtcbiAgfVxuICBnZXQgc2VsZWN0aW9uRGlyZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25EaXJlY3Rpb247XG4gIH1cbiAgc2V0IHNlbGVjdGlvbkRpcmVjdGlvbihkaXIpIHtcbiAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHRoaXMuX3NlbGVjdGlvblN0YXJ0LCB0aGlzLl9zZWxlY3Rpb25FbmQsIGRpcik7XG4gIH1cbiAgc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCwgZGlyKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oZW5kLCB0aGlzLl9nZXRWYWx1ZUxlbmd0aCgpKTtcbiAgICB0aGlzLl9zZWxlY3Rpb25TdGFydCA9IE1hdGgubWluKHN0YXJ0LCB0aGlzLl9zZWxlY3Rpb25FbmQpO1xuICAgIHRoaXMuX3NlbGVjdGlvbkRpcmVjdGlvbiA9IGRpciA9PT0gXCJmb3J3YXJkXCIgfHwgZGlyID09PSBcImJhY2t3YXJkXCIgPyBkaXIgOiBcIm5vbmVcIjtcbiAgICB0aGlzLl9kaXNwYXRjaFNlbGVjdEV2ZW50KCk7XG4gIH1cbiAgc2V0UmFuZ2VUZXh0KHJlcGwsIHN0YXJ0LCBlbmQsIHNlbGVjdGlvbk1vZGUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uU3RhcnQ7XG4gICAgICBlbmQgPSB0aGlzLl9zZWxlY3Rpb25FbmQ7XG4gICAgfSBlbHNlIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpO1xuICAgIH1cblxuICAgIHN0YXJ0ID0gTWF0aC5taW4oc3RhcnQsIHRoaXMuX2dldFZhbHVlTGVuZ3RoKCkpO1xuICAgIGVuZCA9IE1hdGgubWluKGVuZCwgdGhpcy5fZ2V0VmFsdWVMZW5ndGgoKSk7XG5cbiAgICBjb25zdCB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGxldCBzZWxTdGFydCA9IHRoaXMuX3NlbGVjdGlvblN0YXJ0O1xuICAgIGxldCBzZWxFbmQgPSB0aGlzLl9zZWxlY3Rpb25FbmQ7XG5cbiAgICB0aGlzLnZhbHVlID0gdmFsLnNsaWNlKDAsIHN0YXJ0KSArIHJlcGwgKyB2YWwuc2xpY2UoZW5kKTtcblxuICAgIGNvbnN0IG5ld0VuZCA9IHN0YXJ0ICsgdGhpcy52YWx1ZS5sZW5ndGg7XG5cbiAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgbmV3RW5kKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbk1vZGUgPT09IFwic3RhcnRcIikge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgc3RhcnQpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gXCJlbmRcIikge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShuZXdFbmQsIG5ld0VuZCk7XG4gICAgfSBlbHNlIHsgLy8gcHJlc2VydmVcbiAgICAgIGNvbnN0IGRlbHRhID0gcmVwbC5sZW5ndGggLSAoZW5kIC0gc3RhcnQpO1xuXG4gICAgICBpZiAoc2VsU3RhcnQgPiBlbmQpIHtcbiAgICAgICAgc2VsU3RhcnQgKz0gZGVsdGE7XG4gICAgICB9IGVsc2UgaWYgKHNlbFN0YXJ0ID4gc3RhcnQpIHtcbiAgICAgICAgc2VsU3RhcnQgPSBzdGFydDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbEVuZCA+IGVuZCkge1xuICAgICAgICBzZWxFbmQgKz0gZGVsdGE7XG4gICAgICB9IGVsc2UgaWYgKHNlbEVuZCA+IHN0YXJ0KSB7XG4gICAgICAgIHNlbEVuZCA9IG5ld0VuZDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShzZWxTdGFydCwgc2VsRW5kKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29scygpIHtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwiY29sc1wiKSkge1xuICAgICAgcmV0dXJuIDIwO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJjb2xzXCIpKTtcbiAgfVxuXG4gIHNldCBjb2xzKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSKTtcbiAgICB9XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb2xzXCIsIFN0cmluZyh2YWx1ZSkpO1xuICB9XG5cbiAgZ2V0IHJvd3MoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcInJvd3NcIikpIHtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJyb3dzXCIpKTtcbiAgfVxuXG4gIHNldCByb3dzKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSKTtcbiAgICB9XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJyb3dzXCIsIFN0cmluZyh2YWx1ZSkpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFRleHRBcmVhRWxlbWVudFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MVGltZUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxUaW1lRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTFRpdGxlRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBnZXQgdGV4dCgpIHtcbiAgICAvLyBUT0RPIHRoaXMgaXMgcXVpdGUgaW5jb3JyZWN0XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJIVE1MO1xuICB9XG5cbiAgc2V0IHRleHQocykge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFRpdGxlRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IHJlZmxlY3RVUkxBdHRyaWJ1dGUgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikucmVmbGVjdFVSTEF0dHJpYnV0ZTtcblxuY2xhc3MgSFRNTFRyYWNrRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBnZXQgcmVhZHlTdGF0ZSgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldCBzcmMoKSB7XG4gICAgcmV0dXJuIHJlZmxlY3RVUkxBdHRyaWJ1dGUodGhpcywgXCJzcmNcIik7XG4gIH1cbiAgc2V0IHNyYyh2YWx1ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3JjXCIsIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxUcmFja0VsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxVTGlzdEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxVTGlzdEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxVbmtub3duRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFVua25vd25FbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MTWVkaWFFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxNZWRpYUVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IHJlZmxlY3RVUkxBdHRyaWJ1dGUgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikucmVmbGVjdFVSTEF0dHJpYnV0ZTtcblxuY2xhc3MgSFRNTFZpZGVvRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MTWVkaWFFbGVtZW50SW1wbCB7XG4gIGdldCBwb3N0ZXIoKSB7XG4gICAgcmV0dXJuIHJlZmxlY3RVUkxBdHRyaWJ1dGUodGhpcywgXCJwb3N0ZXJcIik7XG4gIH1cblxuICBzZXQgcG9zdGVyKHZhbHVlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJwb3N0ZXJcIiwgdmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZpZGVvV2lkdGgoKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBnZXQgdmlkZW9IZWlnaHQoKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MVmlkZW9FbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjc3NvbSA9IHJlcXVpcmUoXCJjc3NvbVwiKTtcblxuY2xhc3MgTGlua1N0eWxlSW1wbCB7XG4gIGdldCBzaGVldCgpIHtcbiAgICBpZiAoIXRoaXMuX2Nzc1N0eWxlU2hlZXQpIHtcbiAgICAgIHRoaXMuX2Nzc1N0eWxlU2hlZXQgPSBuZXcgY3Nzb20uQ1NTU3R5bGVTaGVldCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3NzU3R5bGVTaGVldDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IExpbmtTdHlsZUltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRXZlbnRUYXJnZXRJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9FdmVudFRhcmdldC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBzaW11bHRhbmVvdXNJdGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikuc2ltdWx0YW5lb3VzSXRlcmF0b3JzO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcbmNvbnN0IE5PREVfRE9DVU1FTlRfUE9TSVRJT04gPSByZXF1aXJlKFwiLi4vbm9kZS1kb2N1bWVudC1wb3NpdGlvblwiKTtcbmNvbnN0IGNyZWF0ZUxpdmVOb2RlTGlzdCA9IHJlcXVpcmUoXCIuLi9ub2RlLWxpc3RcIikuY3JlYXRlTGl2ZTtcbmNvbnN0IHVwZGF0ZU5vZGVMaXN0ID0gcmVxdWlyZShcIi4uL25vZGUtbGlzdFwiKS51cGRhdGU7XG5jb25zdCB1cGRhdGVIVE1MQ29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi9odG1sLWNvbGxlY3Rpb25cIikudXBkYXRlO1xuY29uc3QgZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsXCIpLmRvY3VtZW50QmFzZVVSTFNlcmlhbGl6ZWQ7XG5jb25zdCBjbG9uZU5vZGUgPSByZXF1aXJlKFwiLi4vbm9kZVwiKS5jbG9uZTtcbmNvbnN0IGF0dHJpYnV0ZXMgPSByZXF1aXJlKFwiLi4vYXR0cmlidXRlc1wiKTtcblxuZnVuY3Rpb24gaXNPYnNvbGV0ZU5vZGVUeXBlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTlRJVFlfTk9ERSB8fFxuICAgIG5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTlRJVFlfUkVGRVJFTkNFX05PREUgfHxcbiAgICBub2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuTk9UQVRJT05fTk9ERSB8fFxuLy8gIG5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5BVFRSSUJVVEVfTk9ERSB8fCAgLy8gdGhpcyBpcyBtaXNzaW5nIGhvdyBkbyB3ZSBoYW5kbGU/XG4gICAgbm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkNEQVRBX1NFQ1RJT05fTk9ERTtcbn1cblxuZnVuY3Rpb24gbm9kZUVxdWFscyhhLCBiKSB7XG4gIGlmIChhLm5vZGVUeXBlICE9PSBiLm5vZGVUeXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoIChhLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOT0RFX1RZUEUuRE9DVU1FTlRfVFlQRV9OT0RFOlxuICAgICAgaWYgKGEubmFtZSAhPT0gYi5uYW1lIHx8IGEucHVibGljSWQgIT09IGIucHVibGljSWQgfHxcbiAgICAgICAgICBhLnN5c3RlbUlkICE9PSBiLnN5c3RlbUlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTk9ERV9UWVBFLkVMRU1FTlRfTk9ERTpcbiAgICAgIGlmIChhLl9uYW1lc3BhY2VVUkkgIT09IGIuX25hbWVzcGFjZVVSSSB8fCBhLl9wcmVmaXggIT09IGIuX3ByZWZpeCB8fCBhLl9sb2NhbE5hbWUgIT09IGIuX2xvY2FsTmFtZSB8fFxuICAgICAgICAgIGEuX2F0dHJpYnV0ZXMubGVuZ3RoICE9PSBiLl9hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIE5PREVfVFlQRS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6XG4gICAgICBpZiAoYS5fdGFyZ2V0ICE9PSBiLl90YXJnZXQgfHwgYS5fZGF0YSAhPT0gYi5fZGF0YSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIE5PREVfVFlQRS5URVhUX05PREU6XG4gICAgY2FzZSBOT0RFX1RZUEUuQ09NTUVOVF9OT0RFOlxuICAgICAgaWYgKGEuX2RhdGEgIT09IGIuX2RhdGEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gIH1cblxuICBpZiAoYS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSAmJiAhYXR0cmlidXRlcy5hdHRyaWJ1dGVMaXN0c0VxdWFsKGEsIGIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChjb25zdCBub2RlcyBvZiBzaW11bHRhbmVvdXNJdGVyYXRvcnMoZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKGEpLCBkb21TeW1ib2xUcmVlLmNoaWxkcmVuSXRlcmF0b3IoYikpKSB7XG4gICAgaWYgKCFub2Rlc1swXSB8fCAhbm9kZXNbMV0pIHtcbiAgICAgIC8vIG1pc21hdGNoIGluIHRoZSBhbW91bnQgb2YgY2hpbGROb2Rlc1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghbm9kZUVxdWFscyhub2Rlc1swXSwgbm9kZXNbMV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmNsYXNzIE5vZGVJbXBsIGV4dGVuZHMgRXZlbnRUYXJnZXRJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgZG9tU3ltYm9sVHJlZS5pbml0aWFsaXplKHRoaXMpO1xuXG4gICAgdGhpcy5fY29yZSA9IHByaXZhdGVEYXRhLmNvcmU7XG4gICAgdGhpcy5fb3duZXJEb2N1bWVudCA9IHByaXZhdGVEYXRhLm93bmVyRG9jdW1lbnQ7XG5cbiAgICB0aGlzLl9jaGlsZE5vZGVzTGlzdCA9IG51bGw7XG4gICAgdGhpcy5fY2hpbGRyZW5MaXN0ID0gbnVsbDtcbiAgICB0aGlzLl92ZXJzaW9uID0gMDtcbiAgICB0aGlzLl9tZW1vaXplZFF1ZXJpZXMgPSB7fTtcbiAgfVxuXG4gIGdldCBub2RlVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMubm9kZVR5cGUgPT09IE5PREVfVFlQRS5URVhUX05PREUgfHxcbiAgICAgIHRoaXMubm9kZVR5cGUgPT09IE5PREVfVFlQRS5DT01NRU5UX05PREUgfHxcbiAgICAgIHRoaXMubm9kZVR5cGUgPT09IE5PREVfVFlQRS5DREFUQV9TRUNUSU9OX05PREUgfHxcbiAgICAgIHRoaXMubm9kZVR5cGUgPT09IE5PREVfVFlQRS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0IG5vZGVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuVEVYVF9OT0RFIHx8XG4gICAgICB0aGlzLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuQ09NTUVOVF9OT0RFIHx8XG4gICAgICB0aGlzLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuQ0RBVEFfU0VDVElPTl9OT0RFIHx8XG4gICAgICB0aGlzLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKSB7XG4gICAgICB0aGlzLnJlcGxhY2VEYXRhKDAsIHRoaXMubGVuZ3RoLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhcmVudE5vZGUoKSB7XG4gICAgcmV0dXJuIGRvbVN5bWJvbFRyZWUucGFyZW50KHRoaXMpO1xuICB9XG5cbiAgZ2V0IG5vZGVOYW1lKCkge1xuICAgIHN3aXRjaCAodGhpcy5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gdGhpcy50YWdOYW1lO1xuICAgICAgY2FzZSBOT0RFX1RZUEUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gXCIjdGV4dFwiO1xuICAgICAgY2FzZSBOT0RFX1RZUEUuQ0RBVEFfU0VDVElPTl9OT0RFOlxuICAgICAgICByZXR1cm4gXCIjY2RhdGEtc2VjdGlvblwiO1xuICAgICAgY2FzZSBOT0RFX1RZUEUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOlxuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQ7XG4gICAgICBjYXNlIE5PREVfVFlQRS5DT01NRU5UX05PREU6XG4gICAgICAgIHJldHVybiBcIiNjb21tZW50XCI7XG4gICAgICBjYXNlIE5PREVfVFlQRS5ET0NVTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gXCIjZG9jdW1lbnRcIjtcbiAgICAgIGNhc2UgTk9ERV9UWVBFLkRPQ1VNRU5UX1RZUEVfTk9ERTpcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICAgIGNhc2UgTk9ERV9UWVBFLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBcIiNkb2N1bWVudC1mcmFnbWVudFwiO1xuICAgIH1cblxuICAgIC8vIHNob3VsZCBuZXZlciBoYXBwZW5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBmaXJzdENoaWxkKCkge1xuICAgIHJldHVybiBkb21TeW1ib2xUcmVlLmZpcnN0Q2hpbGQodGhpcyk7XG4gIH1cblxuICBnZXQgb3duZXJEb2N1bWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkRPQ1VNRU5UX05PREUgPyBudWxsIDogdGhpcy5fb3duZXJEb2N1bWVudDtcbiAgfVxuXG4gIGdldCBsYXN0Q2hpbGQoKSB7XG4gICAgcmV0dXJuIGRvbVN5bWJvbFRyZWUubGFzdENoaWxkKHRoaXMpO1xuICB9XG5cbiAgZ2V0IGNoaWxkTm9kZXMoKSB7XG4gICAgaWYgKCF0aGlzLl9jaGlsZE5vZGVzTGlzdCkge1xuICAgICAgdGhpcy5fY2hpbGROb2Rlc0xpc3QgPSBjcmVhdGVMaXZlTm9kZUxpc3QodGhpcywgKCkgPT4gZG9tU3ltYm9sVHJlZS5jaGlsZHJlblRvQXJyYXkodGhpcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVOb2RlTGlzdCh0aGlzLl9jaGlsZE5vZGVzTGlzdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkTm9kZXNMaXN0O1xuICB9XG5cbiAgZ2V0IG5leHRTaWJsaW5nKCkge1xuICAgIHJldHVybiBkb21TeW1ib2xUcmVlLm5leHRTaWJsaW5nKHRoaXMpO1xuICB9XG5cbiAgZ2V0IHByZXZpb3VzU2libGluZygpIHtcbiAgICByZXR1cm4gZG9tU3ltYm9sVHJlZS5wcmV2aW91c1NpYmxpbmcodGhpcyk7XG4gIH1cblxuICBpbnNlcnRCZWZvcmUobmV3Q2hpbGRJbXBsLCByZWZDaGlsZEltcGwpIHtcbiAgICAvLyBUT0RPIGJyYW5kaW5nXG4gICAgaWYgKCFuZXdDaGlsZEltcGwgfHwgIShuZXdDaGlsZEltcGwgaW5zdGFuY2VvZiBOb2RlSW1wbCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCB0byBOb2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUgbXVzdCBiZSBhIE5vZGVcIik7XG4gICAgfVxuICAgIGlmIChyZWZDaGlsZEltcGwgIT09IG51bGwgJiYgIShyZWZDaGlsZEltcGwgaW5zdGFuY2VvZiBOb2RlSW1wbCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTZWNvbmQgYXJndW1lbnQgdG8gTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlIG11c3QgYmUgYSBOb2RlIG9yIG51bGwgb3IgdW5kZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIC8vIERvY3VtZW50VHlwZSBtdXN0IGJlIGltcGxpY2l0bHkgYWRvcHRlZFxuICAgIGlmIChuZXdDaGlsZEltcGwubm9kZVR5cGUgPT09IE5PREVfVFlQRS5ET0NVTUVOVF9UWVBFX05PREUpIHtcbiAgICAgIG5ld0NoaWxkSW1wbC5fb3duZXJEb2N1bWVudCA9IHRoaXMuX293bmVyRG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKG5ld0NoaWxkSW1wbC5ub2RlVHlwZSAmJiBuZXdDaGlsZEltcGwubm9kZVR5cGUgPT09IE5PREVfVFlQRS5BVFRSSUJVVEVfTk9ERSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb3duZXJEb2N1bWVudCAhPT0gbmV3Q2hpbGRJbXBsLl9vd25lckRvY3VtZW50KSB7XG4gICAgICAvLyBhZG9wdCB0aGUgbm9kZSB3aGVuIGl0J3Mgbm90IGluIHRoaXMgZG9jdW1lbnRcbiAgICAgIHRoaXMuX293bmVyRG9jdW1lbnQuYWRvcHROb2RlKG5ld0NoaWxkSW1wbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNlYXJjaCBmb3IgcGFyZW50cyBtYXRjaGluZyB0aGUgbmV3Q2hpbGRcbiAgICAgIGZvciAoY29uc3QgYW5jZXN0b3Igb2YgZG9tU3ltYm9sVHJlZS5hbmNlc3RvcnNJdGVyYXRvcih0aGlzKSkge1xuICAgICAgICBpZiAoYW5jZXN0b3IgPT09IG5ld0NoaWxkSW1wbCkge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLkhJRVJBUkNIWV9SRVFVRVNUX0VSUik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmcmFnbWVudHMgYXJlIG1lcmdlZCBpbnRvIHRoZSBlbGVtZW50IChleGNlcHQgcGFyc2VyLWNyZWF0ZWQgZnJhZ21lbnRzIGluIDx0ZW1wbGF0ZT4pXG4gICAgaWYgKG5ld0NoaWxkSW1wbC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpIHtcbiAgICAgIGxldCBncmFuZENoaWxkSW1wbDtcbiAgICAgIHdoaWxlICgoZ3JhbmRDaGlsZEltcGwgPSBkb21TeW1ib2xUcmVlLmZpcnN0Q2hpbGQobmV3Q2hpbGRJbXBsKSkpIHtcbiAgICAgICAgbmV3Q2hpbGRJbXBsLnJlbW92ZUNoaWxkKGdyYW5kQ2hpbGRJbXBsKTtcbiAgICAgICAgdGhpcy5pbnNlcnRCZWZvcmUoZ3JhbmRDaGlsZEltcGwsIHJlZkNoaWxkSW1wbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXdDaGlsZEltcGwgPT09IHJlZkNoaWxkSW1wbCkge1xuICAgICAgcmV0dXJuIG5ld0NoaWxkSW1wbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb2xkUGFyZW50SW1wbCA9IGRvbVN5bWJvbFRyZWUucGFyZW50KG5ld0NoaWxkSW1wbCk7XG4gICAgICAvLyBpZiB0aGUgbmV3Q2hpbGQgaXMgYWxyZWFkeSBpbiB0aGUgdHJlZSBlbHNld2hlcmUsIHJlbW92ZSBpdCBmaXJzdFxuICAgICAgaWYgKG9sZFBhcmVudEltcGwpIHtcbiAgICAgICAgb2xkUGFyZW50SW1wbC5yZW1vdmVDaGlsZChuZXdDaGlsZEltcGwpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmQ2hpbGRJbXBsID09PSBudWxsKSB7XG4gICAgICAgIGRvbVN5bWJvbFRyZWUuYXBwZW5kQ2hpbGQodGhpcywgbmV3Q2hpbGRJbXBsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkb21TeW1ib2xUcmVlLnBhcmVudChyZWZDaGlsZEltcGwpICE9PSB0aGlzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX0ZPVU5EX0VSUik7XG4gICAgICAgIH1cblxuICAgICAgICBkb21TeW1ib2xUcmVlLmluc2VydEJlZm9yZShyZWZDaGlsZEltcGwsIG5ld0NoaWxkSW1wbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX21vZGlmaWVkKCk7XG5cbiAgICAgIGlmICh0aGlzLl9hdHRhY2hlZCAmJiBuZXdDaGlsZEltcGwuX2F0dGFjaCkge1xuICAgICAgICBuZXdDaGlsZEltcGwuX2F0dGFjaCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kZXNjZW5kYW50QWRkZWQodGhpcywgbmV3Q2hpbGRJbXBsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3Q2hpbGRJbXBsO1xuICB9IC8vIHJhaXNlcyhET01FeGNlcHRpb24pO1xuXG4gIF9tb2RpZmllZCgpIHtcbiAgICB0aGlzLl92ZXJzaW9uKys7XG4gICAgZm9yIChjb25zdCBhbmNlc3RvciBvZiBkb21TeW1ib2xUcmVlLmFuY2VzdG9yc0l0ZXJhdG9yKHRoaXMpKSB7XG4gICAgICBhbmNlc3Rvci5fdmVyc2lvbisrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGlsZHJlbkxpc3QpIHtcbiAgICAgIHVwZGF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMuX2NoaWxkcmVuTGlzdCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jaGlsZE5vZGVzTGlzdCkge1xuICAgICAgdXBkYXRlTm9kZUxpc3QodGhpcy5fY2hpbGROb2Rlc0xpc3QpO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhck1lbW9pemVkUXVlcmllcygpO1xuICB9XG5cbiAgX2NsZWFyTWVtb2l6ZWRRdWVyaWVzKCkge1xuICAgIHRoaXMuX21lbW9pemVkUXVlcmllcyA9IHt9O1xuICAgIGNvbnN0IG15UGFyZW50ID0gZG9tU3ltYm9sVHJlZS5wYXJlbnQodGhpcyk7XG4gICAgaWYgKG15UGFyZW50KSB7XG4gICAgICBteVBhcmVudC5fY2xlYXJNZW1vaXplZFF1ZXJpZXMoKTtcbiAgICB9XG4gIH1cblxuICBfZGVzY2VuZGFudFJlbW92ZWQocGFyZW50LCBjaGlsZCkge1xuICAgIGNvbnN0IG15UGFyZW50ID0gZG9tU3ltYm9sVHJlZS5wYXJlbnQodGhpcyk7XG4gICAgaWYgKG15UGFyZW50KSB7XG4gICAgICBteVBhcmVudC5fZGVzY2VuZGFudFJlbW92ZWQocGFyZW50LCBjaGlsZCk7XG4gICAgfVxuICB9XG5cbiAgX2Rlc2NlbmRhbnRBZGRlZChwYXJlbnQsIGNoaWxkKSB7XG4gICAgY29uc3QgbXlQYXJlbnQgPSBkb21TeW1ib2xUcmVlLnBhcmVudCh0aGlzKTtcbiAgICBpZiAobXlQYXJlbnQpIHtcbiAgICAgIG15UGFyZW50Ll9kZXNjZW5kYW50QWRkZWQocGFyZW50LCBjaGlsZCk7XG4gICAgfVxuICB9XG5cbiAgcmVwbGFjZUNoaWxkKG5vZGUsIGNoaWxkKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm90IGVub3VnaCBhcmd1bWVudHMgdG8gTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkXCIpO1xuICAgIH1cbiAgICAvLyBUT0RPIGJyYW5kaW5nXG4gICAgaWYgKCFub2RlIHx8ICEobm9kZSBpbnN0YW5jZW9mIE5vZGVJbXBsKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IHRvIE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCBtdXN0IGJlIGEgTm9kZVwiKTtcbiAgICB9XG4gICAgaWYgKCFjaGlsZCB8fCAhKGNoaWxkIGluc3RhbmNlb2YgTm9kZUltcGwpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU2Vjb25kIGFyZ3VtZW50IHRvIE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCBtdXN0IGJlIGEgTm9kZVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmluc2VydEJlZm9yZShub2RlLCBjaGlsZCk7XG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9XG5cbiAgX2F0dGFjaCgpIHtcbiAgICB0aGlzLl9hdHRhY2hlZCA9IHRydWU7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcih0aGlzKSkge1xuICAgICAgaWYgKGNoaWxkLl9hdHRhY2gpIHtcbiAgICAgICAgY2hpbGQuX2F0dGFjaCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9kZXRhY2goKSB7XG4gICAgdGhpcy5fYXR0YWNoZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9vd25lckRvY3VtZW50ICYmIHRoaXMuX293bmVyRG9jdW1lbnQuX2xhc3RGb2N1c2VkRWxlbWVudCA9PT0gdGhpcykge1xuICAgICAgdGhpcy5fb3duZXJEb2N1bWVudC5fbGFzdEZvY3VzZWRFbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcih0aGlzKSkge1xuICAgICAgaWYgKGNoaWxkLl9kZXRhY2gpIHtcbiAgICAgICAgY2hpbGQuX2RldGFjaCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUNoaWxkKC8qIE5vZGUgKi8gb2xkQ2hpbGRJbXBsKSB7XG4gICAgaWYgKCFvbGRDaGlsZEltcGwgfHwgZG9tU3ltYm9sVHJlZS5wYXJlbnQob2xkQ2hpbGRJbXBsKSAhPT0gdGhpcykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX0ZPVU5EX0VSUik7XG4gICAgfVxuXG4gICAgY29uc3Qgb2xkUHJldmlvdXNTaWJsaW5nID0gb2xkQ2hpbGRJbXBsLnByZXZpb3VzU2libGluZztcbiAgICBkb21TeW1ib2xUcmVlLnJlbW92ZShvbGRDaGlsZEltcGwpO1xuICAgIHRoaXMuX21vZGlmaWVkKCk7XG4gICAgb2xkQ2hpbGRJbXBsLl9kZXRhY2goKTtcbiAgICB0aGlzLl9kZXNjZW5kYW50UmVtb3ZlZCh0aGlzLCBvbGRDaGlsZEltcGwpO1xuICAgIGlmICh0aGlzLl9vd25lckRvY3VtZW50KSB7XG4gICAgICB0aGlzLl9vd25lckRvY3VtZW50Ll9ydW5SZW1vdmluZ1N0ZXBzKG9sZENoaWxkSW1wbCwgdGhpcywgb2xkUHJldmlvdXNTaWJsaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9sZENoaWxkSW1wbDtcbiAgfSAvLyByYWlzZXMoRE9NRXhjZXB0aW9uKTtcblxuICBhcHBlbmRDaGlsZChuZXdDaGlsZCkge1xuICAgIGlmICghKFwibm9kZVR5cGVcIiBpbiBuZXdDaGlsZCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCB0byBOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZCBtdXN0IGJlIGEgTm9kZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobmV3Q2hpbGQsIG51bGwpO1xuICB9XG5cbiAgaGFzQ2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gZG9tU3ltYm9sVHJlZS5oYXNDaGlsZHJlbih0aGlzKTtcbiAgfVxuXG4gIG5vcm1hbGl6ZSgpIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcih0aGlzKSkge1xuICAgICAgaWYgKGNoaWxkLm5vcm1hbGl6ZSkge1xuICAgICAgICBjaGlsZC5ub3JtYWxpemUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoaWxkLm5vZGVWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByZXZDaGlsZCA9IGRvbVN5bWJvbFRyZWUucHJldmlvdXNTaWJsaW5nKGNoaWxkKTtcblxuICAgICAgaWYgKHByZXZDaGlsZCAmJiBwcmV2Q2hpbGQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5URVhUX05PREUgJiYgY2hpbGQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5URVhUX05PREUpIHtcbiAgICAgICAgLy8gbWVyZ2UgdGV4dCBub2Rlc1xuICAgICAgICBwcmV2Q2hpbGQuYXBwZW5kRGF0YShjaGlsZC5ub2RlVmFsdWUpO1xuICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgcGFyZW50RWxlbWVudCgpIHtcbiAgICBjb25zdCBwYXJlbnROb2RlID0gZG9tU3ltYm9sVHJlZS5wYXJlbnQodGhpcyk7XG4gICAgcmV0dXJuIHBhcmVudE5vZGUgIT09IG51bGwgJiYgcGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSA/IHBhcmVudE5vZGUgOiBudWxsO1xuICB9XG5cbiAgZ2V0IGJhc2VVUkkoKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50QmFzZVVSTFNlcmlhbGl6ZWQodGhpcy5fb3duZXJEb2N1bWVudCk7XG4gIH1cblxuICBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvdGhlckltcGwpIHtcbiAgICAvLyBMZXQgcmVmZXJlbmNlIGJlIHRoZSBjb250ZXh0IG9iamVjdC5cbiAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzO1xuXG4gICAgaWYgKCEob3RoZXJJbXBsIGluc3RhbmNlb2YgTm9kZUltcGwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb21wYXJpbmcgcG9zaXRpb24gYWdhaW5zdCBub24tTm9kZSB2YWx1ZXMgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGlzT2Jzb2xldGVOb2RlVHlwZShyZWZlcmVuY2UpIHx8IGlzT2Jzb2xldGVOb2RlVHlwZShvdGhlckltcGwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPYnNvbGV0ZSBub2RlIHR5cGVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gZG9tU3ltYm9sVHJlZS5jb21wYXJlVHJlZVBvc2l0aW9uKHJlZmVyZW5jZSwgb3RoZXJJbXBsKTtcblxuICAgIC8vIOKAnElmIG90aGVyIGFuZCByZWZlcmVuY2UgYXJlIG5vdCBpbiB0aGUgc2FtZSB0cmVlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBhZGRpbmcgRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVELFxuICAgIC8vICBET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJQywgYW5kIGVpdGhlciBET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcgb3JcbiAgICAvLyBET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcsIHdpdGggdGhlIGNvbnN0cmFpbnQgdGhhdCB0aGlzIGlzIHRvIGJlIGNvbnNpc3RlbnQsIHRvZ2V0aGVyLuKAnVxuICAgIGlmIChyZXN1bHQgPT09IE5PREVfRE9DVU1FTlRfUE9TSVRJT04uRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEKSB7XG4gICAgICAvLyBzeW1ib2wtdHJlZSBkb2VzIG5vdCBhZGQgdGhlc2UgYml0cyByZXF1aXJlZCBieSB0aGUgc3BlYzpcbiAgICAgIHJldHVybiBOT0RFX0RPQ1VNRU5UX1BPU0lUSU9OLkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCB8XG4gICAgICAgIE5PREVfRE9DVU1FTlRfUE9TSVRJT04uRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUMgfFxuICAgICAgICBOT0RFX0RPQ1VNRU5UX1BPU0lUSU9OLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29udGFpbnMob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIE5vZGVJbXBsKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG90aGVyKSAmIE5PREVfRE9DVU1FTlRfUE9TSVRJT04uRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKTtcbiAgfVxuXG4gIGlzRXF1YWxOb2RlKG5vZGUpIHtcbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEZhc3QtcGF0aCwgbm90IGluIHRoZSBzcGVjXG4gICAgaWYgKHRoaXMgPT09IG5vZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlRXF1YWxzKHRoaXMsIG5vZGUpO1xuICB9XG5cbiAgY2xvbmVOb2RlKGRlZXApIHtcbiAgICBkZWVwID0gQm9vbGVhbihkZWVwKTtcblxuICAgIHJldHVybiBjbG9uZU5vZGUodGhpcy5fY29yZSwgdGhpcywgdW5kZWZpbmVkLCBkZWVwKTtcbiAgfVxuXG4gIGdldCB0ZXh0Q29udGVudCgpIHtcbiAgICBsZXQgdGV4dDtcbiAgICBzd2l0Y2ggKHRoaXMubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTk9ERV9UWVBFLkNPTU1FTlRfTk9ERTpcbiAgICAgIGNhc2UgTk9ERV9UWVBFLkNEQVRBX1NFQ1RJT05fTk9ERTpcbiAgICAgIGNhc2UgTk9ERV9UWVBFLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTpcbiAgICAgIGNhc2UgTk9ERV9UWVBFLlRFWFRfTk9ERTpcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZVZhbHVlO1xuXG4gICAgICBjYXNlIE5PREVfVFlQRS5BVFRSSUJVVEVfTk9ERTpcbiAgICAgIGNhc2UgTk9ERV9UWVBFLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG4gICAgICBjYXNlIE5PREVfVFlQRS5FTEVNRU5UX05PREU6XG4gICAgICAgIHRleHQgPSBcIlwiO1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRvbVN5bWJvbFRyZWUudHJlZUl0ZXJhdG9yKHRoaXMpKSB7XG4gICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuVEVYVF9OT0RFIHx8IGNoaWxkLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuQ0RBVEFfU0VDVElPTl9OT0RFKSB7XG4gICAgICAgICAgICB0ZXh0ICs9IGNoaWxkLm5vZGVWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHNldCB0ZXh0Q29udGVudCh0eHQpIHtcbiAgICBzd2l0Y2ggKHRoaXMubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTk9ERV9UWVBFLkNPTU1FTlRfTk9ERTpcbiAgICAgIGNhc2UgTk9ERV9UWVBFLkNEQVRBX1NFQ1RJT05fTk9ERTpcbiAgICAgIGNhc2UgTk9ERV9UWVBFLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTpcbiAgICAgIGNhc2UgTk9ERV9UWVBFLlRFWFRfTk9ERTpcbiAgICAgICAgdGhpcy5ub2RlVmFsdWUgPSBTdHJpbmcodHh0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjaGlsZCA9IGRvbVN5bWJvbFRyZWUuZmlyc3RDaGlsZCh0aGlzKTtcbiAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgY2hpbGQgPSBkb21TeW1ib2xUcmVlLmZpcnN0Q2hpbGQodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHR4dCAhPT0gXCJcIiAmJiB0eHQgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodGhpcy5fb3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0eHQpKTtcbiAgICB9XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBjb25zdCB3cmFwcGVyID0gaWRsVXRpbHMud3JhcHBlckZvckltcGwodGhpcyk7XG4gICAgcmV0dXJuIGBbb2JqZWN0ICR7d3JhcHBlci5jb25zdHJ1Y3Rvci5uYW1lfV1gO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogTm9kZUltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcblxuY2xhc3MgTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlSW1wbCB7XG4gIGdldCBuZXh0RWxlbWVudFNpYmxpbmcoKSB7XG4gICAgZm9yIChjb25zdCBzaWJsaW5nIG9mIGRvbVN5bWJvbFRyZWUubmV4dFNpYmxpbmdzSXRlcmF0b3IodGhpcykpIHtcbiAgICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIHJldHVybiBzaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBwcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkge1xuICAgIGZvciAoY29uc3Qgc2libGluZyBvZiBkb21TeW1ib2xUcmVlLnByZXZpb3VzU2libGluZ3NJdGVyYXRvcih0aGlzKSkge1xuICAgICAgaWYgKHNpYmxpbmcubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIHNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jbGFzcyBOb25FbGVtZW50UGFyZW50Tm9kZUltcGwge1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogTm9uRWxlbWVudFBhcmVudE5vZGVJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcblxuY29uc3QgbndtYXRjaGVyID0gcmVxdWlyZShcIm53bWF0Y2hlci9zcmMvbndtYXRjaGVyLW5vcXNhXCIpO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcbmNvbnN0IGNyZWF0ZUhUTUxDb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uL2h0bWwtY29sbGVjdGlvblwiKS5jcmVhdGU7XG5jb25zdCB1cGRhdGVIVE1MQ29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi9odG1sLWNvbGxlY3Rpb25cIikudXBkYXRlO1xuY29uc3QgbWVtb2l6ZVF1ZXJ5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLm1lbW9pemVRdWVyeTtcbmNvbnN0IGNyZWF0ZVN0YXRpY05vZGVMaXN0ID0gcmVxdWlyZShcIi4uL25vZGUtbGlzdFwiKS5jcmVhdGVTdGF0aWM7XG5cbi8vIG53bWF0Y2hlciBnZXRzIGBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRgIGF0IGNyZWF0aW9uLXRpbWUsIHNvIHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSBsYXppbHksIHNpbmNlIGluIHRoZSBpbml0aWFsXG4vLyBzdGFnZXMgb2YgRG9jdW1lbnQgaW5pdGlhbGl6YXRpb24sIHRoZXJlIGlzIG5vIGRvY3VtZW50RWxlbWVudCBwcmVzZW50IHlldC5cbmZ1bmN0aW9uIGFkZE53bWF0Y2hlcihwYXJlbnROb2RlKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gcGFyZW50Tm9kZS5fb3duZXJEb2N1bWVudDtcblxuICBpZiAoIWRvY3VtZW50Ll9ud21hdGNoZXIpIHtcbiAgICBkb2N1bWVudC5fbndtYXRjaGVyID0gbndtYXRjaGVyKHsgZG9jdW1lbnQgfSk7XG4gICAgZG9jdW1lbnQuX253bWF0Y2hlci5jb25maWd1cmUoeyBVTklRVUVfSUQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgcmV0dXJuIGRvY3VtZW50Ll9ud21hdGNoZXI7XG59XG5cbmNsYXNzIFBhcmVudE5vZGVJbXBsIHtcbiAgZ2V0IGNoaWxkcmVuKCkge1xuICAgIGlmICghdGhpcy5fY2hpbGRyZW5MaXN0KSB7XG4gICAgICB0aGlzLl9jaGlsZHJlbkxpc3QgPSBjcmVhdGVIVE1MQ29sbGVjdGlvbih0aGlzLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBkb21TeW1ib2xUcmVlLmNoaWxkcmVuVG9BcnJheSh0aGlzLCB7IGZpbHRlcihub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREU7XG4gICAgICAgIH0gfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlSFRNTENvbGxlY3Rpb24odGhpcy5fY2hpbGRyZW5MaXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuTGlzdDtcbiAgfVxuXG4gIGdldCBmaXJzdEVsZW1lbnRDaGlsZCgpIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcih0aGlzKSkge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBsYXN0RWxlbWVudENoaWxkKCkge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHRoaXMsIHsgcmV2ZXJzZTogdHJ1ZSB9KSkge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBjaGlsZEVsZW1lbnRDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIH1cbn1cblxuUGFyZW50Tm9kZUltcGwucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IgPSBtZW1vaXplUXVlcnkoZnVuY3Rpb24gKHNlbGVjdG9ycykge1xuICBjb25zdCBtYXRjaGVyID0gYWRkTndtYXRjaGVyKHRoaXMpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG1hdGNoZXIuZmlyc3Qoc2VsZWN0b3JzLCBpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSLCBlLm1lc3NhZ2UpO1xuICB9XG59KTtcblxuUGFyZW50Tm9kZUltcGwucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwgPSBtZW1vaXplUXVlcnkoZnVuY3Rpb24gKHNlbGVjdG9ycykge1xuICBjb25zdCBtYXRjaGVyID0gYWRkTndtYXRjaGVyKHRoaXMpO1xuXG4gIGxldCBsaXN0O1xuICB0cnkge1xuICAgIGxpc3QgPSBtYXRjaGVyLnNlbGVjdChzZWxlY3RvcnMsIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRoaXMpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIsIGUubWVzc2FnZSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlU3RhdGljTm9kZUxpc3QobGlzdCk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBQYXJlbnROb2RlSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBDaGFyYWN0ZXJEYXRhSW1wbCA9IHJlcXVpcmUoXCIuL0NoYXJhY3RlckRhdGEtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcblxuY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbCBleHRlbmRzIENoYXJhY3RlckRhdGFJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG5cbiAgICB0aGlzLm5vZGVUeXBlID0gTk9ERV9UWVBFLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTtcbiAgICB0aGlzLl90YXJnZXQgPSBwcml2YXRlRGF0YS50YXJnZXQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXQ7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IENoYXJhY3RlckRhdGFJbXBsID0gcmVxdWlyZShcIi4vQ2hhcmFjdGVyRGF0YS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlXCIpO1xuXG5jbGFzcyBUZXh0SW1wbCBleHRlbmRzIENoYXJhY3RlckRhdGFJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG5cbiAgICB0aGlzLm5vZGVUeXBlID0gTk9ERV9UWVBFLlRFWFRfTk9ERTtcbiAgfVxuXG4gIHNwbGl0VGV4dChvZmZzZXQpIHtcbiAgICBvZmZzZXQgPj4+PSAwO1xuXG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cbiAgICBpZiAob2Zmc2V0ID4gbGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUik7XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSBsZW5ndGggLSBvZmZzZXQ7XG4gICAgY29uc3QgbmV3RGF0YSA9IHRoaXMuc3Vic3RyaW5nRGF0YShvZmZzZXQsIGNvdW50KTtcblxuICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld0RhdGEpO1xuXG4gICAgY29uc3QgcGFyZW50ID0gZG9tU3ltYm9sVHJlZS5wYXJlbnQodGhpcyk7XG5cbiAgICBpZiAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHRoaXMubmV4dFNpYmxpbmcpO1xuICAgIH1cblxuICAgIHRoaXMucmVwbGFjZURhdGEob2Zmc2V0LCBjb3VudCwgXCJcIik7XG5cbiAgICByZXR1cm4gbmV3Tm9kZTtcblxuICAgIC8vIFRPRE86IHJhbmdlIHN0dWZmXG4gIH1cblxuICBnZXQgd2hvbGVUZXh0KCkge1xuICAgIGxldCB3aG9sZVRleHQgPSB0aGlzLnRleHRDb250ZW50O1xuICAgIGxldCBuZXh0O1xuICAgIGxldCBjdXJyZW50ID0gdGhpcztcbiAgICB3aGlsZSAoKG5leHQgPSBkb21TeW1ib2xUcmVlLnByZXZpb3VzU2libGluZyhjdXJyZW50KSkgJiYgbmV4dC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLlRFWFRfTk9ERSkge1xuICAgICAgd2hvbGVUZXh0ID0gbmV4dC50ZXh0Q29udGVudCArIHdob2xlVGV4dDtcbiAgICAgIGN1cnJlbnQgPSBuZXh0O1xuICAgIH1cbiAgICBjdXJyZW50ID0gdGhpcztcbiAgICB3aGlsZSAoKG5leHQgPSBkb21TeW1ib2xUcmVlLm5leHRTaWJsaW5nKGN1cnJlbnQpKSAmJiBuZXh0Lm5vZGVUeXBlID09PSBOT0RFX1RZUEUuVEVYVF9OT0RFKSB7XG4gICAgICB3aG9sZVRleHQgKz0gbmV4dC50ZXh0Q29udGVudDtcbiAgICAgIGN1cnJlbnQgPSBuZXh0O1xuICAgIH1cbiAgICByZXR1cm4gd2hvbGVUZXh0O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogVGV4dEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY2xhc3MgV2luZG93RXZlbnRIYW5kbGVyc0ltcGwge1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogV2luZG93RXZlbnRIYW5kbGVyc0ltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IERvY3VtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0RvY3VtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBYTUxEb2N1bWVudEltcGwgZXh0ZW5kcyBEb2N1bWVudEltcGwge307XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGlzVmFsaWRUYXJnZXRPcmlnaW4gPSByZXF1aXJlKFwiLi4vdXRpbHNcIikuaXNWYWxpZFRhcmdldE9yaWdpbjtcbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWVzc2FnZSwgdGFyZ2V0T3JpZ2luKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCIncG9zdE1lc3NhZ2UnIHJlcXVpcmVzIDIgYXJndW1lbnRzOiAnbWVzc2FnZScgYW5kICd0YXJnZXRPcmlnaW4nXCIpO1xuICB9XG5cbiAgdGFyZ2V0T3JpZ2luID0gU3RyaW5nKHRhcmdldE9yaWdpbik7XG5cbiAgaWYgKCFpc1ZhbGlkVGFyZ2V0T3JpZ2luKHRhcmdldE9yaWdpbikpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSLCBcIkZhaWxlZCB0byBleGVjdXRlICdwb3N0TWVzc2FnZScgb24gJ1dpbmRvdyc6IFwiICtcbiAgICAgIFwiSW52YWxpZCB0YXJnZXQgb3JpZ2luICdcIiArIHRhcmdldE9yaWdpbiArIFwiJyBpbiBhIGNhbGwgdG8gJ3Bvc3RNZXNzYWdlJy5cIik7XG4gIH1cblxuICAvLyBUT0RPOiB0YXJnZXRPcmlnaW4gPT09ICcvJyAtIHJlcXVpcmVzIHJlZmVyZW5jZSB0byBzb3VyY2Ugd2luZG93XG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdG1wdmFyL2pzZG9tL3B1bGwvMTE0MCNpc3N1ZWNvbW1lbnQtMTExNTg3NDk5XG4gIGlmICh0YXJnZXRPcmlnaW4gIT09IFwiKlwiICYmIHRhcmdldE9yaWdpbiAhPT0gdGhpcy5sb2NhdGlvbi5vcmlnaW4pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUT0RPOiBldmVudC5zb3VyY2UgLSByZXF1aXJlcyByZWZlcmVuY2UgdG8gc291cmNlIHdpbmRvd1xuICAvLyBUT0RPOiBldmVudC5vcmlnaW4gLSByZXF1aXJlcyByZWZlcmVuY2UgdG8gc291cmNlIHdpbmRvd1xuICAvLyBUT0RPOiBldmVudC5wb3J0c1xuICAvLyBUT0RPOiBldmVudC5kYXRhIC0gc3RydWN0dXJlZCBjbG9uZSBtZXNzYWdlIC0gcmVxdWlyZXMgY2xvbmluZyBET00gbm9kZXNcbiAgY29uc3QgZXZlbnQgPSBuZXcgdGhpcy5NZXNzYWdlRXZlbnQoXCJtZXNzYWdlXCIsIHtcbiAgICBkYXRhOiBtZXNzYWdlXG4gIH0pO1xuXG4gIGV2ZW50LmluaXRFdmVudChcIm1lc3NhZ2VcIiwgZmFsc2UsIGZhbHNlKTtcblxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9LCAwKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qIGVzbGludCBnbG9iYWwtcmVxdWlyZTogMCAqL1xuXG5jb25zdCBEb2N1bWVudEltcGwgPSByZXF1aXJlKFwiLi9ub2Rlcy9Eb2N1bWVudC1pbXBsLmpzXCIpO1xuXG5jb25zdCBtYXBwaW5ncyA9IHtcbiAgSFRNTEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW11cbiAgfSxcbiAgSFRNTEFuY2hvckVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEFuY2hvckVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiYVwiXVxuICB9LFxuICBIVE1MQXBwbGV0RWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MQXBwbGV0RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJhcHBsZXRcIl1cbiAgfSxcbiAgSFRNTEFyZWFFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxBcmVhRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJhcmVhXCJdXG4gIH0sXG4gIEhUTUxBdWRpb0VsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEF1ZGlvRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJhdWRpb1wiXVxuICB9LFxuICBIVE1MQmFzZUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEJhc2VFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImJhc2VcIl1cbiAgfSxcbiAgSFRNTEJvZHlFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxCb2R5RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJib2R5XCJdXG4gIH0sXG4gIEhUTUxCUkVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEJSRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJiclwiXVxuICB9LFxuICBIVE1MQnV0dG9uRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MQnV0dG9uRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJidXR0b25cIl1cbiAgfSxcbiAgSFRNTENhbnZhc0VsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTENhbnZhc0VsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiY2FudmFzXCJdXG4gIH0sXG4gIEhUTUxEYXRhRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MRGF0YUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiZGF0YVwiXVxuICB9LFxuICBIVE1MRGF0YUxpc3RFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxEYXRhTGlzdEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiZGF0YWxpc3RcIl1cbiAgfSxcbiAgSFRNTERpYWxvZ0VsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTERpYWxvZ0VsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiZGlhbG9nXCJdXG4gIH0sXG4gIEhUTUxEaXJlY3RvcnlFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxEaXJlY3RvcnlFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImRpclwiXVxuICB9LFxuICBIVE1MRGl2RWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MRGl2RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJkaXZcIl1cbiAgfSxcbiAgSFRNTERMaXN0RWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MRExpc3RFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImRsXCJdXG4gIH0sXG4gIEhUTUxFbWJlZEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEVtYmVkRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJlbWJlZFwiXVxuICB9LFxuICBIVE1MRmllbGRTZXRFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxGaWVsZFNldEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiZmllbGRzZXRcIl1cbiAgfSxcbiAgSFRNTEZvbnRFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxGb250RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJmb250XCJdXG4gIH0sXG4gIEhUTUxGb3JtRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MRm9ybUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiZm9ybVwiXVxuICB9LFxuICBIVE1MRnJhbWVFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxGcmFtZUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiZnJhbWVcIl1cbiAgfSxcbiAgSFRNTEZyYW1lU2V0RWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MRnJhbWVTZXRFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImZyYW1lc2V0XCJdXG4gIH0sXG4gIEhUTUxIZWFkaW5nRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MSGVhZGluZ0VsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiaDFcIiwgXCJoMlwiLCBcImgzXCIsIFwiaDRcIiwgXCJoNVwiLCBcImg2XCJdXG4gIH0sXG4gIEhUTUxIZWFkRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MSGVhZEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiaGVhZFwiXVxuICB9LFxuICBIVE1MSFJFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxIUkVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiaHJcIl1cbiAgfSxcbiAgSFRNTEh0bWxFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxIdG1sRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJodG1sXCJdXG4gIH0sXG4gIEhUTUxJRnJhbWVFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxJRnJhbWVFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImlmcmFtZVwiXVxuICB9LFxuICBIVE1MSW1hZ2VFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxJbWFnZUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiaW1nXCJdXG4gIH0sXG4gIEhUTUxJbnB1dEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTElucHV0RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJpbnB1dFwiXVxuICB9LFxuICBIVE1MTGFiZWxFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxMYWJlbEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wibGFiZWxcIl1cbiAgfSxcbiAgSFRNTExlZ2VuZEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTExlZ2VuZEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wibGVnZW5kXCJdXG4gIH0sXG4gIEhUTUxMSUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTExJRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJsaVwiXVxuICB9LFxuICBIVE1MTGlua0VsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTExpbmtFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImxpbmtcIl1cbiAgfSxcbiAgSFRNTE1hcEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTE1hcEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wibWFwXCJdXG4gIH0sXG4gIEhUTUxNZWRpYUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTE1lZGlhRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXVxuICB9LFxuICBIVE1MTWVudUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTE1lbnVFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcIm1lbnVcIl1cbiAgfSxcbiAgSFRNTE1ldGFFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxNZXRhRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJtZXRhXCJdXG4gIH0sXG4gIEhUTUxNZXRlckVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTE1ldGVyRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJtZXRlclwiXVxuICB9LFxuICBIVE1MTW9kRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MTW9kRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJkZWxcIiwgXCJpbnNcIl1cbiAgfSxcbiAgSFRNTE9iamVjdEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTE9iamVjdEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wib2JqZWN0XCJdXG4gIH0sXG4gIEhUTUxPTGlzdEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTE9MaXN0RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJvbFwiXVxuICB9LFxuICBIVE1MT3B0R3JvdXBFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxPcHRHcm91cEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wib3B0Z3JvdXBcIl1cbiAgfSxcbiAgSFRNTE9wdGlvbkVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTE9wdGlvbkVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wib3B0aW9uXCJdXG4gIH0sXG4gIEhUTUxPdXRwdXRFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxPdXRwdXRFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcIm91dHB1dFwiXVxuICB9LFxuICBIVE1MUGFyYWdyYXBoRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MUGFyYWdyYXBoRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJwXCJdXG4gIH0sXG4gIEhUTUxQYXJhbUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFBhcmFtRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJwYXJhbVwiXVxuICB9LFxuICBIVE1MUHJlRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MUHJlRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJwcmVcIl1cbiAgfSxcbiAgSFRNTFByb2dyZXNzRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInByb2dyZXNzXCJdXG4gIH0sXG4gIEhUTUxRdW90ZUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFF1b3RlRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJibG9ja3F1b3RlXCIsIFwicVwiXVxuICB9LFxuICBIVE1MU2NyaXB0RWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MU2NyaXB0RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJzY3JpcHRcIl1cbiAgfSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFNlbGVjdEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wic2VsZWN0XCJdXG4gIH0sXG4gIEhUTUxTb3VyY2VFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxTb3VyY2VFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInNvdXJjZVwiXVxuICB9LFxuICBIVE1MU3BhbkVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFNwYW5FbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInNwYW5cIl1cbiAgfSxcbiAgSFRNTFN0eWxlRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MU3R5bGVFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInN0eWxlXCJdXG4gIH0sXG4gIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImNhcHRpb25cIl1cbiAgfSxcbiAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW11cbiAgfSxcbiAgSFRNTFRhYmxlQ29sRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MVGFibGVDb2xFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImNvbFwiLCBcImNvbGdyb3VwXCJdXG4gIH0sXG4gIEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1widGRcIl1cbiAgfSxcbiAgSFRNTFRhYmxlRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MVGFibGVFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInRhYmxlXCJdXG4gIH0sXG4gIEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInRoXCJdXG4gIH0sXG4gIEhUTUxUaW1lRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MVGltZUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1widGltZVwiXVxuICB9LFxuICBIVE1MVGl0bGVFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxUaXRsZUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1widGl0bGVcIl1cbiAgfSxcbiAgSFRNTFRhYmxlUm93RWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MVGFibGVSb3dFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInRyXCJdXG4gIH0sXG4gIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInRoZWFkXCIsIFwidGJvZHlcIiwgXCJ0Zm9vdFwiXVxuICB9LFxuICBIVE1MVGVtcGxhdGVFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxUZW1wbGF0ZUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1widGVtcGxhdGVcIl1cbiAgfSxcbiAgSFRNTFRleHRBcmVhRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MVGV4dEFyZWFFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInRleHRhcmVhXCJdXG4gIH0sXG4gIEhUTUxUcmFja0VsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFRyYWNrRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJ0cmFja1wiXVxuICB9LFxuICBIVE1MVUxpc3RFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxVTGlzdEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1widWxcIl1cbiAgfSxcbiAgSFRNTFVua25vd25FbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxVbmtub3duRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXVxuICB9LFxuICBIVE1MVmlkZW9FbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxWaWRlb0VsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1widmlkZW9cIl1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlID0+IHtcbiAgZm9yIChjb25zdCBpbnRlcmZhY2VOYW1lIG9mIE9iamVjdC5rZXlzKG1hcHBpbmdzKSkge1xuICAgIGNvbnN0IGZpbGUgPSBtYXBwaW5nc1tpbnRlcmZhY2VOYW1lXS5maWxlO1xuICAgIGNvbnN0IHRhZ3MgPSBtYXBwaW5nc1tpbnRlcmZhY2VOYW1lXS50YWdzO1xuXG4gICAgY29yZVtpbnRlcmZhY2VOYW1lXSA9IGZpbGUuaW50ZXJmYWNlO1xuXG4gICAgZm9yIChjb25zdCB0YWdOYW1lIG9mIHRhZ3MpIHtcbiAgICAgIERvY3VtZW50SW1wbC5pbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuX2VsZW1lbnRCdWlsZGVyc1t0YWdOYW1lXSA9IChkb2N1bWVudCwgZWxOYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiBmaWxlLmNyZWF0ZShbXSwge1xuICAgICAgICAgIGNvcmUsXG4gICAgICAgICAgb3duZXJEb2N1bWVudDogZG9jdW1lbnQsXG4gICAgICAgICAgbG9jYWxOYW1lOiBlbE5hbWUgfHwgdGFnTmFtZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuXG4vLyBGSVhNRTogT25jZSBOb2RlRmlsdGVyIGlzIHBvcnRlZCB0byBJREwgbWV0aG9kLCB1bmNvbW1lbnQgdGhlc2UuXG5jb25zdCBGSUxURVJfQUNDRVBUID0gMTsgLy8gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUO1xuY29uc3QgRklMVEVSX1JFSkVDVCA9IDI7IC8vIE5vZGVGaWx0ZXIuRklMVEVSX1JFSkVDVDtcbmNvbnN0IEZJTFRFUl9TS0lQID0gMzsgLy8gTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbmNvbnN0IEZJUlNUID0gZmFsc2U7XG5jb25zdCBMQVNUID0gdHJ1ZTtcbmNvbnN0IE5FWFQgPSBmYWxzZTtcbmNvbnN0IFBSRVZJT1VTID0gdHJ1ZTtcblxuZnVuY3Rpb24gaXNOdWxsKG8pIHtcbiAgcmV0dXJuIG8gPT09IG51bGwgfHwgdHlwZW9mIG8gPT09IFwidW5kZWZpbmVkXCI7XG59XG5cbmNsYXNzIFRyZWVXYWxrZXJJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICB0aGlzLnJvb3QgPSBwcml2YXRlRGF0YS5yb290O1xuICAgIHRoaXMud2hhdFRvU2hvdyA9IHByaXZhdGVEYXRhLndoYXRUb1Nob3c7XG4gICAgdGhpcy5maWx0ZXIgPSBwcml2YXRlRGF0YS5maWx0ZXI7XG4gICAgdGhpcy5jdXJyZW50Tm9kZSA9IHRoaXMucm9vdDtcbiAgfVxuXG4gIGdldCBjdXJyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudE5vZGU7XG4gIH1cblxuICBzZXQgY3VycmVudE5vZGUobm9kZSkge1xuICAgIGlmIChpc051bGwobm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLCBcIkNhbm5vdCBzZXQgY3VycmVudE5vZGUgdG8gbnVsbFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50Tm9kZSA9IG5vZGU7XG4gIH1cblxuICBwYXJlbnROb2RlKCkge1xuICAgIGxldCBub2RlID0gdGhpcy5fY3VycmVudE5vZGU7XG4gICAgd2hpbGUgKCFpc051bGwobm9kZSkgJiYgbm9kZSAhPT0gdGhpcy5yb290KSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXG4gICAgICBpZiAoIWlzTnVsbChub2RlKSAmJiB0aGlzLl9maWx0ZXJOb2RlKG5vZGUpID09PSBGSUxURVJfQUNDRVBUKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fY3VycmVudE5vZGUgPSBub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmaXJzdENoaWxkKCkge1xuICAgIHJldHVybiB0aGlzLl90cmF2ZXJzZUNoaWxkcmVuKEZJUlNUKTtcbiAgfVxuXG4gIGxhc3RDaGlsZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhdmVyc2VDaGlsZHJlbihMQVNUKTtcbiAgfVxuXG4gIHByZXZpb3VzU2libGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhdmVyc2VTaWJsaW5ncyhQUkVWSU9VUyk7XG4gIH1cblxuICBuZXh0U2libGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhdmVyc2VTaWJsaW5ncyhORVhUKTtcbiAgfVxuXG4gIHByZXZpb3VzTm9kZSgpIHtcbiAgICBsZXQgbm9kZSA9IHRoaXMuX2N1cnJlbnROb2RlO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IHRoaXMucm9vdCkge1xuICAgICAgbGV0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcblxuICAgICAgd2hpbGUgKCFpc051bGwoc2libGluZykpIHtcbiAgICAgICAgbm9kZSA9IHNpYmxpbmc7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLl9maWx0ZXJOb2RlKG5vZGUpO1xuXG4gICAgICAgIHdoaWxlIChyZXN1bHQgIT09IEZJTFRFUl9SRUpFQ1QgJiYgbm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG4gICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZmlsdGVyTm9kZShub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IEZJTFRFUl9BQ0NFUFQpIHtcbiAgICAgICAgICByZXR1cm4gKHRoaXMuX2N1cnJlbnROb2RlID0gbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSB0aGlzLnJvb3QgfHwgaXNOdWxsKG5vZGUucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgICAgIGlmICh0aGlzLl9maWx0ZXJOb2RlKG5vZGUpID09PSBGSUxURVJfQUNDRVBUKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fY3VycmVudE5vZGUgPSBub2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG5leHROb2RlKCkge1xuICAgIGxldCBub2RlID0gdGhpcy5fY3VycmVudE5vZGU7XG4gICAgbGV0IHJlc3VsdCA9IEZJTFRFUl9BQ0NFUFQ7XG5cbiAgICBmb3IgKDs7KSB7XG4gICAgICB3aGlsZSAocmVzdWx0ICE9PSBGSUxURVJfUkVKRUNUICYmIG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpbHRlck5vZGUobm9kZSk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IEZJTFRFUl9BQ0NFUFQpIHtcbiAgICAgICAgICByZXR1cm4gKHRoaXMuX2N1cnJlbnROb2RlID0gbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobm9kZSA9PT0gdGhpcy5yb290KSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaWJsaW5nID0gbm9kZS5uZXh0U2libGluZztcblxuICAgICAgICBpZiAoIWlzTnVsbChzaWJsaW5nKSkge1xuICAgICAgICAgIG5vZGUgPSBzaWJsaW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH0gd2hpbGUgKCFpc051bGwobm9kZSkpO1xuXG4gICAgICBpZiAoaXNOdWxsKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSB0aGlzLl9maWx0ZXJOb2RlKG5vZGUpO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSBGSUxURVJfQUNDRVBUKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fY3VycmVudE5vZGUgPSBub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IFRyZWVXYWxrZXJdXCI7XG4gIH1cblxuICBfZmlsdGVyTm9kZShub2RlKSB7XG4gICAgY29uc3QgbiA9IG5vZGUubm9kZVR5cGUgLSAxO1xuXG4gICAgaWYgKCEoKDEgPDwgbikgJiB0aGlzLndoYXRUb1Nob3cpKSB7XG4gICAgICByZXR1cm4gRklMVEVSX1NLSVA7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5maWx0ZXI7XG5cbiAgICBpZiAoaXNOdWxsKGZpbHRlcikpIHtcbiAgICAgIHJldHVybiBGSUxURVJfQUNDRVBUO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQ7XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXN1bHQgPSBmaWx0ZXIoaWRsVXRpbHMud3JhcHBlckZvckltcGwobm9kZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBmaWx0ZXIuYWNjZXB0Tm9kZShpZGxVdGlscy53cmFwcGVyRm9ySW1wbChub2RlKSk7XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBzaG9ydFwiXShyZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIF90cmF2ZXJzZUNoaWxkcmVuKHR5cGUpIHtcbiAgICBsZXQgbm9kZSA9IHRoaXMuX2N1cnJlbnROb2RlO1xuICAgIG5vZGUgPSB0eXBlID09PSBGSVJTVCA/IG5vZGUuZmlyc3RDaGlsZCA6IG5vZGUubGFzdENoaWxkO1xuXG4gICAgaWYgKGlzTnVsbChub2RlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbWFpbjogZm9yICg7Oykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZmlsdGVyTm9kZShub2RlKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gRklMVEVSX0FDQ0VQVCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2N1cnJlbnROb2RlID0gbm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IEZJTFRFUl9TS0lQKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdHlwZSA9PT0gRklSU1QgPyBub2RlLmZpcnN0Q2hpbGQgOiBub2RlLmxhc3RDaGlsZDtcblxuICAgICAgICBpZiAoIWlzTnVsbChjaGlsZCkpIHtcbiAgICAgICAgICBub2RlID0gY2hpbGQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICg7Oykge1xuICAgICAgICBjb25zdCBzaWJsaW5nID0gdHlwZSA9PT0gRklSU1QgPyBub2RlLm5leHRTaWJsaW5nIDogbm9kZS5wcmV2aW91c1NpYmxpbmc7XG5cbiAgICAgICAgaWYgKCFpc051bGwoc2libGluZykpIHtcbiAgICAgICAgICBub2RlID0gc2libGluZztcbiAgICAgICAgICBjb250aW51ZSBtYWluO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuXG4gICAgICAgIGlmIChpc051bGwocGFyZW50KSB8fCBwYXJlbnQgPT09IHRoaXMucm9vdCB8fCBwYXJlbnQgPT09IHRoaXMuX2N1cnJlbnROb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF90cmF2ZXJzZVNpYmxpbmdzKHR5cGUpIHtcbiAgICBsZXQgbm9kZSA9IHRoaXMuX2N1cnJlbnROb2RlO1xuXG4gICAgaWYgKG5vZGUgPT09IHRoaXMucm9vdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICg7Oykge1xuICAgICAgbGV0IHNpYmxpbmcgPSB0eXBlID09PSBORVhUID8gbm9kZS5uZXh0U2libGluZyA6IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoIWlzTnVsbChzaWJsaW5nKSkge1xuICAgICAgICBub2RlID0gc2libGluZztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZmlsdGVyTm9kZShub2RlKTtcblxuICAgICAgICBpZiAocmVzdWx0ID09PSBGSUxURVJfQUNDRVBUKSB7XG4gICAgICAgICAgcmV0dXJuICh0aGlzLl9jdXJyZW50Tm9kZSA9IG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2libGluZyA9IHR5cGUgPT09IE5FWFQgPyBub2RlLmZpcnN0Q2hpbGQgOiBub2RlLmxhc3RDaGlsZDtcblxuICAgICAgICBpZiAocmVzdWx0ID09PSBGSUxURVJfUkVKRUNUIHx8IGlzTnVsbChzaWJsaW5nKSkge1xuICAgICAgICAgIHNpYmxpbmcgPSB0eXBlID09PSBORVhUID8gbm9kZS5uZXh0U2libGluZyA6IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgICAgIGlmIChpc051bGwobm9kZSkgfHwgbm9kZSA9PT0gdGhpcy5yb290KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZmlsdGVyTm9kZShub2RlKSA9PT0gRklMVEVSX0FDQ0VQVCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBUcmVlV2Fsa2VySW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uLmpzXCIpO1xuY29uc3QgZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsLmpzXCIpLmRvY3VtZW50QmFzZVVSTFNlcmlhbGl6ZWQ7XG5jb25zdCBwYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZG9jdW1lbnQtYmFzZS11cmwuanNcIikucGFyc2VVUkxUb1Jlc3VsdGluZ1VSTFJlY29yZDtcbmNvbnN0IHRyYXZlcnNlSGlzdG9yeSA9IHJlcXVpcmUoXCIuL25hdmlnYXRpb24uanNcIikudHJhdmVyc2VIaXN0b3J5O1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgSGlzdG9yeUltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHRoaXMuX3dpbmRvdyA9IHByaXZhdGVEYXRhLndpbmRvdztcbiAgICB0aGlzLl9kb2N1bWVudCA9IHByaXZhdGVEYXRhLmRvY3VtZW50O1xuICAgIHRoaXMuX2FjdEFzSWZMb2NhdGlvblJlbG9hZENhbGxlZCA9IHByaXZhdGVEYXRhLmFjdEFzSWZMb2NhdGlvblJlbG9hZENhbGxlZDtcbiAgICB0aGlzLl9zdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5fbGF0ZXN0RW50cnkgPSBudWxsO1xuXG4gICAgdGhpcy5faGlzdG9yeVRyYXZlcnNhbFF1ZXVlID0gbmV3IFNldCgpO1xuICB9XG5cbiAgX2d1YXJkQWdhaW5zdEluYWN0aXZlRG9jdW1lbnRzKCkge1xuICAgIGlmICghdGhpcy5fd2luZG93KSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TRUNVUklUWV9FUlIsXG4gICAgICAgIFwiSGlzdG9yeSBvYmplY3QgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZG9jdW1lbnQgdGhhdCBpcyBub3QgZnVsbHkgYWN0aXZlLlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHRoaXMuX2d1YXJkQWdhaW5zdEluYWN0aXZlRG9jdW1lbnRzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fd2luZG93Ll9zZXNzaW9uSGlzdG9yeS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdGUoKSB7XG4gICAgdGhpcy5fZ3VhcmRBZ2FpbnN0SW5hY3RpdmVEb2N1bWVudHMoKTtcblxuICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgfVxuXG4gIGdvKGRlbHRhKSB7XG4gICAgdGhpcy5fZ3VhcmRBZ2FpbnN0SW5hY3RpdmVEb2N1bWVudHMoKTtcblxuICAgIGlmIChkZWx0YSA9PT0gMCkge1xuICAgICAgdGhpcy5fYWN0QXNJZkxvY2F0aW9uUmVsb2FkQ2FsbGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3F1ZXVlSGlzdG9yeVRyYXZlcnNhbFRhc2soKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuX3dpbmRvdy5fY3VycmVudFNlc3Npb25IaXN0b3J5RW50cnlJbmRleCArIGRlbHRhO1xuICAgICAgICBpZiAobmV3SW5kZXggPCAwIHx8IG5ld0luZGV4ID49IHRoaXMuX3dpbmRvdy5fc2Vzc2lvbkhpc3RvcnkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3BlY2lmaWVkRW50cnkgPSB0aGlzLl93aW5kb3cuX3Nlc3Npb25IaXN0b3J5W25ld0luZGV4XTtcblxuICAgICAgICAvLyBOb3QgaW1wbGVtZW50ZWQ6IHVubG9hZCBhIGRvY3VtZW50IGd1YXJkXG5cbiAgICAgICAgLy8gTm90IGNsZWFyIHRoYXQgdGhpcyBzaG91bGQgYmUgcXVldWVkLiBodG1sL2Jyb3dzZXJzL2hpc3RvcnkvdGhlLWhpc3RvcnktaW50ZXJmYWNlLzAwNC5odG1sIGNhbiBiZSBmaXhlZFxuICAgICAgICAvLyBieSByZW1vdmluZyB0aGUgcXVldWUsIGJ1dCBkb2luZyBzbyBicmVha3Mgc29tZSB0ZXN0cyBpbiBoaXN0b3J5LmpzIHRoYXQgYWxzbyBwYXNzIGluIGJyb3dzZXJzLlxuICAgICAgICB0aGlzLl9xdWV1ZUhpc3RvcnlUcmF2ZXJzYWxUYXNrKCgpID0+IHRyYXZlcnNlSGlzdG9yeSh0aGlzLl93aW5kb3csIHNwZWNpZmllZEVudHJ5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBiYWNrKCkge1xuICAgIHRoaXMuZ28oLTEpO1xuICB9XG5cbiAgZm9yd2FyZCgpIHtcbiAgICB0aGlzLmdvKCsxKTtcbiAgfVxuXG4gIHB1c2hTdGF0ZShkYXRhLCB0aXRsZSwgdXJsKSB7XG4gICAgdGhpcy5fc2hhcmVkUHVzaEFuZFJlcGxhY2VTdGF0ZShkYXRhLCB0aXRsZSwgdXJsLCBcInB1c2hTdGF0ZVwiKTtcbiAgfVxuICByZXBsYWNlU3RhdGUoZGF0YSwgdGl0bGUsIHVybCkge1xuICAgIHRoaXMuX3NoYXJlZFB1c2hBbmRSZXBsYWNlU3RhdGUoZGF0YSwgdGl0bGUsIHVybCwgXCJyZXBsYWNlU3RhdGVcIik7XG4gIH1cblxuICBfc2hhcmVkUHVzaEFuZFJlcGxhY2VTdGF0ZShkYXRhLCB0aXRsZSwgdXJsLCBtZXRob2ROYW1lKSB7XG4gICAgdGhpcy5fZ3VhcmRBZ2FpbnN0SW5hY3RpdmVEb2N1bWVudHMoKTtcblxuICAgIC8vIFRPRE8gc3RydWN0dXJlZCBjbG9uZSBkYXRhXG5cbiAgICBsZXQgbmV3VVJMO1xuICAgIGlmICh1cmwgIT09IG51bGwpIHtcbiAgICAgIC8vIE5vdCBpbXBsZW1lbnRlZDogdXNlIG9mIGVudHJ5IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC4gSW5zdGVhZCB3ZSBqdXN0IHVzZSB0aGUgZG9jdW1lbnQgYmFzZSBVUkwuIFRoZVxuICAgICAgLy8gZGlmZmVyZW5jZSBtYXR0ZXJzIGluIHRoZSBjYXNlIG9mIGNyb3NzLWZyYW1lIGNhbGxzLlxuICAgICAgbmV3VVJMID0gcGFyc2VVUkxUb1Jlc3VsdGluZ1VSTFJlY29yZCh1cmwsIHRoaXMuX2RvY3VtZW50KTtcblxuICAgICAgaWYgKG5ld1VSTCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uU0VDVVJJVFlfRVJSLCBgQ291bGQgbm90IHBhcnNlIHVybCBhcmd1bWVudCBcIiR7dXJsfVwiIHRvICR7bWV0aG9kTmFtZX0gYCArXG4gICAgICAgICAgYGFnYWluc3QgYmFzZSBVUkwgXCIke2RvY3VtZW50QmFzZVVSTFNlcmlhbGl6ZWQodGhpcy5fZG9jdW1lbnQpfVwiLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VVJMLnNjaGVtZSAhPT0gdGhpcy5fZG9jdW1lbnQuX1VSTC5zY2hlbWUgfHxcbiAgICAgICAgICBuZXdVUkwudXNlcm5hbWUgIT09IHRoaXMuX2RvY3VtZW50Ll9VUkwudXNlcm5hbWUgfHxcbiAgICAgICAgICBuZXdVUkwucGFzc3dvcmQgIT09IHRoaXMuX2RvY3VtZW50Ll9VUkwucGFzc3dvcmQgfHxcbiAgICAgICAgICBuZXdVUkwuaG9zdCAhPT0gdGhpcy5fZG9jdW1lbnQuX1VSTC5ob3N0IHx8XG4gICAgICAgICAgbmV3VVJMLnBvcnQgIT09IHRoaXMuX2RvY3VtZW50Ll9VUkwucG9ydCB8fFxuICAgICAgICAgIG5ld1VSTC5jYW5ub3RCZUFCYXNlVVJMICE9PSB0aGlzLl9kb2N1bWVudC5fVVJMLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uU0VDVVJJVFlfRVJSLCBgJHttZXRob2ROYW1lfSBjYW5ub3QgdXBkYXRlIGhpc3RvcnkgdG8gYSBVUkwgd2hpY2ggYCArXG4gICAgICAgICAgYGRpZmZlcnMgaW4gY29tcG9uZW50cyBvdGhlciB0aGFuIGluIHBhdGgsIHF1ZXJ5LCBvciBmcmFnbWVudC5gKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm90IGltcGxlbWVudGVkOiBvcmlnaW4gY2hlY2sgKHNlZW1zIHRvIG9ubHkgYXBwbHkgdG8gZG9jdW1lbnRzIHdpdGggd2VpcmQgb3JpZ2lucywgZS5nLiBzYW5kYm94ZWQgb25lcylcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VVJMID0gdGhpcy5fd2luZG93Ll9zZXNzaW9uSGlzdG9yeVt0aGlzLl93aW5kb3cuX2N1cnJlbnRTZXNzaW9uSGlzdG9yeUVudHJ5SW5kZXhdLnVybDtcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kTmFtZSA9PT0gXCJwdXNoU3RhdGVcIikge1xuICAgICAgdGhpcy5fd2luZG93Ll9zZXNzaW9uSGlzdG9yeS5zcGxpY2UodGhpcy5fd2luZG93Ll9jdXJyZW50U2Vzc2lvbkhpc3RvcnlFbnRyeUluZGV4ICsgMSwgSW5maW5pdHkpO1xuXG4gICAgICB0aGlzLl9jbGVhckhpc3RvcnlUcmF2ZXJzYWxUYXNrcygpO1xuXG4gICAgICB0aGlzLl93aW5kb3cuX3Nlc3Npb25IaXN0b3J5LnB1c2goe1xuICAgICAgICBkb2N1bWVudDogdGhpcy5fZG9jdW1lbnQsXG4gICAgICAgIHN0YXRlT2JqZWN0OiBkYXRhLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgdXJsOiBuZXdVUkxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fd2luZG93Ll9jdXJyZW50U2Vzc2lvbkhpc3RvcnlFbnRyeUluZGV4ID0gdGhpcy5fd2luZG93Ll9zZXNzaW9uSGlzdG9yeS5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdXJyZW50RW50cnkgPSB0aGlzLl93aW5kb3cuX3Nlc3Npb25IaXN0b3J5W3RoaXMuX3dpbmRvdy5fY3VycmVudFNlc3Npb25IaXN0b3J5RW50cnlJbmRleF07XG4gICAgICBjdXJyZW50RW50cnkuc3RhdGVPYmplY3QgPSBkYXRhO1xuICAgICAgY3VycmVudEVudHJ5LnRpdGxlID0gdGl0bGU7XG4gICAgICBjdXJyZW50RW50cnkudXJsID0gbmV3VVJMO1xuICAgIH1cblxuICAgIHRoaXMuX2RvY3VtZW50Ll9VUkwgPSBuZXdVUkw7XG4gICAgdGhpcy5fc3RhdGUgPSBkYXRhOyAvLyBUT0RPIGNsb25lIGFnYWluISEgT19vXG4gICAgdGhpcy5fbGF0ZXN0RW50cnkgPSB0aGlzLl93aW5kb3cuX3Nlc3Npb25IaXN0b3J5W3RoaXMuX3dpbmRvdy5fY3VycmVudFNlc3Npb25IaXN0b3J5RW50cnlJbmRleF07XG4gIH1cblxuICBfcXVldWVIaXN0b3J5VHJhdmVyc2FsVGFzayhmbikge1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHRoaXMuX3dpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2hpc3RvcnlUcmF2ZXJzYWxRdWV1ZS5kZWxldGUodGltZW91dElkKTtcbiAgICAgIGZuKCk7XG4gICAgfSwgMCk7XG5cbiAgICB0aGlzLl9oaXN0b3J5VHJhdmVyc2FsUXVldWUuYWRkKHRpbWVvdXRJZCk7XG4gIH1cblxuICBfY2xlYXJIaXN0b3J5VHJhdmVyc2FsVGFza3MoKSB7XG4gICAgZm9yIChjb25zdCB0aW1lb3V0SWQgb2YgdGhpcy5faGlzdG9yeVRyYXZlcnNhbFF1ZXVlKSB7XG4gICAgICB0aGlzLl93aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgfVxuICAgIHRoaXMuX2hpc3RvcnlUcmF2ZXJzYWxRdWV1ZS5jbGVhcigpO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCB3aGF0d2dVUkwgPSByZXF1aXJlKFwid2hhdHdnLXVybFwiKTtcbmNvbnN0IGRvY3VtZW50QmFzZVVSTCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsLmpzXCIpLmRvY3VtZW50QmFzZVVSTDtcbmNvbnN0IHBhcnNlVVJMVG9SZXN1bHRpbmdVUkxSZWNvcmQgPSByZXF1aXJlKFwiLi4vaGVscGVycy9kb2N1bWVudC1iYXNlLXVybC5qc1wiKS5wYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uLmpzXCIpO1xuY29uc3Qgbm90SW1wbGVtZW50ZWQgPSByZXF1aXJlKFwiLi4vLi4vYnJvd3Nlci9ub3QtaW1wbGVtZW50ZWQuanNcIik7XG5jb25zdCBuYXZpZ2F0ZSA9IHJlcXVpcmUoXCIuL25hdmlnYXRpb24uanNcIikubmF2aWdhdGU7XG5cbi8vIE5vdCBpbXBsZW1lbnRlZDogdXNlIG9mIGVudHJ5IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTCBpbiBocmVmIHNldHRlciwgYXNzaWduLCBhbmQgcmVwbGFjZS4gSW5zdGVhZCB3ZSBqdXN0XG4vLyB1c2UgdGhlIGRvY3VtZW50IGJhc2UgVVJMLiBUaGUgZGlmZmVyZW5jZSBtYXR0ZXJzIGluIHRoZSBjYXNlIG9mIGNyb3NzLWZyYW1lIGNhbGxzLlxuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgTG9jYXRpb25JbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICB0aGlzLl9yZWxldmFudERvY3VtZW50ID0gcHJpdmF0ZURhdGEucmVsZXZhbnREb2N1bWVudDtcbiAgICB0aGlzLnVybCA9IG51bGw7XG4gIH1cblxuICBnZXQgX3VybCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVsZXZhbnREb2N1bWVudC5fVVJMO1xuICB9XG5cbiAgX2xvY2F0aW9uT2JqZWN0U2V0dGVyTmF2aWdhdGUodXJsKSB7XG4gICAgLy8gTm90IGltcGxlbWVudGVkOiBleHRyYSBzdGVwcyBoZXJlIHRvIGRldGVybWluZSByZXBsYWNlbWVudCBmbGFnLCBzaW5jZSB0aGV5IGFyZSBub3QgYXBwbGljYWJsZSB0byBvdXJcbiAgICAvLyBydWRpbWVudGFyeSBcIm5hdmlnYXRpb25cIiBpbXBsZW1lbnRhdGlvbi5cblxuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbk9iamVjdE5hdmlnYXRlKHVybCk7XG4gIH1cblxuICBfbG9jYXRpb25PYmplY3ROYXZpZ2F0ZSh1cmwvKiAsIHsgcmVwbGFjZW1lbnQgPSBmYWxzZSB9ID0ge30gKi8pIHtcbiAgICAvLyBOb3QgaW1wbGVtZW50ZWQ6IHRoZSBzZXR1cCBmb3IgY2FsbGluZyBuYXZpZ2F0ZSwgd2hpY2ggZG9lc24ndCBhcHBseSB0byBvdXIgc3R1YiBuYXZpZ2F0ZSBhbnl3YXkuXG4gICAgLy8gTm90IGltcGxlbWVudGVkOiB1c2luZyB0aGUgcmVwbGFjZW1lbnQgZmxhZy5cblxuICAgIG5hdmlnYXRlKHRoaXMuX3JlbGV2YW50RG9jdW1lbnQuX2RlZmF1bHRWaWV3LCB1cmwpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHJlZjtcbiAgfVxuXG4gIGdldCBocmVmKCkge1xuICAgIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplVVJMKHRoaXMuX3VybCk7XG4gIH1cbiAgc2V0IGhyZWYodikge1xuICAgIGNvbnN0IG5ld1VSTCA9IHdoYXR3Z1VSTC5wYXJzZVVSTCh2LCB7IGJhc2VVUkw6IGRvY3VtZW50QmFzZVVSTCh0aGlzLl9yZWxldmFudERvY3VtZW50KSB9KTtcbiAgICBpZiAobmV3VVJMID09PSBcImZhaWx1cmVcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IHBhcnNlIFwiJHt2fVwiIGFzIGEgVVJMYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9jYXRpb25PYmplY3RTZXR0ZXJOYXZpZ2F0ZShuZXdVUkwpO1xuICB9XG5cbiAgZ2V0IG9yaWdpbigpIHtcbiAgICByZXR1cm4gd2hhdHdnVVJMLnNlcmlhbGl6ZVVSTFRvVW5pY29kZU9yaWdpbih0aGlzLl91cmwpO1xuICB9XG5cbiAgZ2V0IHByb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwuc2NoZW1lICsgXCI6XCI7XG4gIH1cbiAgc2V0IHByb3RvY29sKHYpIHtcbiAgICBjb25zdCBjb3B5VVJMID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fdXJsKTtcblxuICAgIGNvbnN0IHBvc3NpYmxlRmFpbHVyZSA9IHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKHYgKyBcIjpcIiwgeyB1cmw6IGNvcHlVUkwsIHN0YXRlT3ZlcnJpZGU6IFwic2NoZW1lIHN0YXJ0XCIgfSk7XG4gICAgaWYgKHBvc3NpYmxlRmFpbHVyZSA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYENvdWxkIG5vdCBwYXJzZSB0aGUgVVJMIGFmdGVyIHNldHRpbmcgdGhlIHByb2NvbCB0byBcIiR7dn1cImApO1xuICAgIH1cblxuICAgIGlmIChjb3B5VVJMLnNjaGVtZSAhPT0gXCJodHRwXCIgJiYgY29weVVSTC5zY2hlbWUgIT09IFwiaHR0cHNcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvY2F0aW9uT2JqZWN0U2V0dGVyTmF2aWdhdGUoY29weVVSTCk7XG4gIH1cblxuICBnZXQgaG9zdCgpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG5cbiAgICBpZiAodXJsLmhvc3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBpZiAodXJsLnBvcnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplSG9zdCh1cmwuaG9zdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVIb3N0KHVybC5ob3N0KSArIFwiOlwiICsgd2hhdHdnVVJMLnNlcmlhbGl6ZUludGVnZXIodXJsLnBvcnQpO1xuICB9XG4gIHNldCBob3N0KHYpIHtcbiAgICBjb25zdCBjb3B5VVJMID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fdXJsKTtcblxuICAgIGlmIChjb3B5VVJMLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGF0d2dVUkwuYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogY29weVVSTCwgc3RhdGVPdmVycmlkZTogXCJob3N0XCIgfSk7XG5cbiAgICB0aGlzLl9sb2NhdGlvbk9iamVjdFNldHRlck5hdmlnYXRlKGNvcHlVUkwpO1xuICB9XG5cbiAgZ2V0IGhvc3RuYW1lKCkge1xuICAgIGlmICh0aGlzLl91cmwuaG9zdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVIb3N0KHRoaXMuX3VybC5ob3N0KTtcbiAgfVxuICBzZXQgaG9zdG5hbWUodikge1xuICAgIGNvbnN0IGNvcHlVUkwgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl91cmwpO1xuXG4gICAgaWYgKGNvcHlVUkwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiBjb3B5VVJMLCBzdGF0ZU92ZXJyaWRlOiBcImhvc3RuYW1lXCIgfSk7XG5cbiAgICB0aGlzLl9sb2NhdGlvbk9iamVjdFNldHRlck5hdmlnYXRlKGNvcHlVUkwpO1xuICB9XG5cbiAgZ2V0IHBvcnQoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5wb3J0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gd2hhdHdnVVJMLnNlcmlhbGl6ZUludGVnZXIodGhpcy5fdXJsLnBvcnQpO1xuICB9XG4gIHNldCBwb3J0KHYpIHtcbiAgICBjb25zdCBjb3B5VVJMID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fdXJsKTtcblxuICAgIGlmIChjb3B5VVJMLmhvc3QgPT09IG51bGwgfHwgY29weVVSTC5jYW5ub3RCZUFCYXNlVVJMIHx8IGNvcHlVUkwuc2NoZW1lID09PSBcImZpbGVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiBjb3B5VVJMLCBzdGF0ZU92ZXJyaWRlOiBcInBvcnRcIiB9KTtcblxuICAgIHRoaXMuX2xvY2F0aW9uT2JqZWN0U2V0dGVyTmF2aWdhdGUoY29weVVSTCk7XG4gIH1cblxuICBnZXQgcGF0aG5hbWUoKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5fdXJsO1xuXG4gICAgaWYgKHVybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm4gdXJsLnBhdGhbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiL1wiICsgdXJsLnBhdGguam9pbihcIi9cIik7XG4gIH1cbiAgc2V0IHBhdGhuYW1lKHYpIHtcbiAgICBjb25zdCBjb3B5VVJMID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fdXJsKTtcblxuICAgIGlmIChjb3B5VVJMLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb3B5VVJMLnBhdGggPSBbXTtcbiAgICB3aGF0d2dVUkwuYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogY29weVVSTCwgc3RhdGVPdmVycmlkZTogXCJwYXRoIHN0YXJ0XCIgfSk7XG5cbiAgICB0aGlzLl9sb2NhdGlvbk9iamVjdFNldHRlck5hdmlnYXRlKGNvcHlVUkwpO1xuICB9XG5cbiAgZ2V0IHNlYXJjaCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLnF1ZXJ5ID09PSBudWxsIHx8IHRoaXMuX3VybC5xdWVyeSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiP1wiICsgdGhpcy5fdXJsLnF1ZXJ5O1xuICB9XG4gIHNldCBzZWFyY2godikge1xuICAgIGNvbnN0IGNvcHlVUkwgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl91cmwpO1xuXG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIGNvcHlVUkwucXVlcnkgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiP1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgICAgY29weVVSTC5xdWVyeSA9IFwiXCI7XG4gICAgICB3aGF0d2dVUkwuYmFzaWNVUkxQYXJzZShpbnB1dCwge1xuICAgICAgICB1cmw6IGNvcHlVUkwsXG4gICAgICAgIHN0YXRlT3ZlcnJpZGU6IFwicXVlcnlcIixcbiAgICAgICAgZW5jb2RpbmdPdmVycmlkZTogdGhpcy5fcmVsZXZhbnREb2N1bWVudC5jaGFyc2V0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2NhdGlvbk9iamVjdFNldHRlck5hdmlnYXRlKGNvcHlVUkwpO1xuICB9XG5cbiAgZ2V0IGhhc2goKSB7XG4gICAgaWYgKHRoaXMuX3VybC5mcmFnbWVudCA9PT0gbnVsbCB8fCB0aGlzLl91cmwuZnJhZ21lbnQgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIiNcIiArIHRoaXMuX3VybC5mcmFnbWVudDtcbiAgfVxuICBzZXQgaGFzaCh2KSB7XG4gICAgY29uc3QgY29weVVSTCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3VybCk7XG5cbiAgICBpZiAoY29weVVSTC5zY2hlbWUgPT09IFwiamF2YXNjcmlwdFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIGNvcHlVUkwuZnJhZ21lbnQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiI1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgICAgY29weVVSTC5mcmFnbWVudCA9IFwiXCI7XG4gICAgICB3aGF0d2dVUkwuYmFzaWNVUkxQYXJzZShpbnB1dCwgeyB1cmw6IGNvcHlVUkwsIHN0YXRlT3ZlcnJpZGU6IFwiZnJhZ21lbnRcIiB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2NhdGlvbk9iamVjdFNldHRlck5hdmlnYXRlKGNvcHlVUkwpO1xuICB9XG5cbiAgYXNzaWduKHVybCkge1xuICAgIC8vIFNob3VsZCBiZSBlbnRyeSBzZXR0aW5ncyBvYmplY3Q7IG9oIHdlbGxcbiAgICBjb25zdCBwYXJzZWRVUkwgPSBwYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkKHVybCwgdGhpcy5fcmVsZXZhbnREb2N1bWVudCk7XG5cbiAgICBpZiAocGFyc2VkVVJMID09PSBcImZhaWx1cmVcIikge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uU1lOVEFYX0VSUiwgYENvdWxkIG5vdCByZXNvbHZlIHRoZSBnaXZlbiBzdHJpbmcgXCIke3VybH1cIiByZWxhdGl2ZSB0byB0aGUgYCArXG4gICAgICAgIGBiYXNlIFVSTCBcIiR7dGhpcy5fcmVsZXZhbnREb2N1bWVudC5VUkx9XCJgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2NhdGlvbk9iamVjdE5hdmlnYXRlKHBhcnNlZFVSTCk7XG4gIH1cblxuICByZXBsYWNlKHVybCkge1xuICAgIC8vIFNob3VsZCBiZSBlbnRyeSBzZXR0aW5ncyBvYmplY3Q7IG9oIHdlbGxcbiAgICBjb25zdCBwYXJzZWRVUkwgPSBwYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkKHVybCwgdGhpcy5fcmVsZXZhbnREb2N1bWVudCk7XG5cbiAgICBpZiAocGFyc2VkVVJMID09PSBcImZhaWx1cmVcIikge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uU1lOVEFYX0VSUiwgYENvdWxkIG5vdCByZXNvbHZlIHRoZSBnaXZlbiBzdHJpbmcgXCIke3VybH1cIiByZWxhdGl2ZSB0byB0aGUgYCArXG4gICAgICAgIGBiYXNlIFVSTCBcIiR7dGhpcy5fcmVsZXZhbnREb2N1bWVudC5VUkx9XCJgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2NhdGlvbk9iamVjdE5hdmlnYXRlKHBhcnNlZFVSTCwgeyByZXBsYWNlbWVudDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlbG9hZCgpIHtcbiAgICBub3RJbXBsZW1lbnRlZChcImxvY2F0aW9uLnJlbG9hZCgpXCIsIHRoaXMuX3JlbGV2YW50RG9jdW1lbnQuX2RlZmF1bHRWaWV3KTtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3Qgd2hhdHdnVVJMID0gcmVxdWlyZShcIndoYXR3Zy11cmxcIik7XG5jb25zdCBhcnJheUVxdWFsID0gcmVxdWlyZShcImFycmF5LWVxdWFsXCIpO1xuY29uc3Qgbm90SW1wbGVtZW50ZWQgPSByZXF1aXJlKFwiLi4vLi4vYnJvd3Nlci9ub3QtaW1wbGVtZW50ZWQuanNcIik7XG5jb25zdCBIYXNoQ2hhbmdlRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0hhc2hDaGFuZ2VFdmVudC5qc1wiKTtcbmNvbnN0IFBvcFN0YXRlRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL1BvcFN0YXRlRXZlbnQuanNcIik7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5cbmV4cG9ydHMudHJhdmVyc2VIaXN0b3J5ID0gKHdpbmRvdywgc3BlY2lmaWVkRW50cnksIGZsYWdzKSA9PiB7XG4gIC8vIE5vdCBzcGVjIGNvbXBsaWFudCwganVzdCBtaW5pbWFsLiBMb3RzIG9mIG1pc3Npbmcgc3RlcHMuXG5cbiAgaWYgKGZsYWdzID09PSB1bmRlZmluZWQpIHtcbiAgICBmbGFncyA9IHt9O1xuICB9XG4gIGNvbnN0IG5vbkJsb2NraW5nRXZlbnRzID0gQm9vbGVhbihmbGFncy5ub25CbG9ja2luZ0V2ZW50cyk7XG5cbiAgY29uc3QgZG9jdW1lbnQgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih3aW5kb3cuX2RvY3VtZW50KTtcblxuICBjb25zdCBjdXJyZW50RW50cnkgPSB3aW5kb3cuX3Nlc3Npb25IaXN0b3J5W3dpbmRvdy5fY3VycmVudFNlc3Npb25IaXN0b3J5RW50cnlJbmRleF07XG5cbiAgaWYgKGN1cnJlbnRFbnRyeS50aXRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY3VycmVudEVudHJ5LnRpdGxlID0gZG9jdW1lbnQudGl0bGU7XG4gIH1cblxuICBkb2N1bWVudC5fVVJMID0gc3BlY2lmaWVkRW50cnkudXJsO1xuXG4gIGxldCBoYXNoQ2hhbmdlZCA9IGZhbHNlO1xuICBsZXQgb2xkVVJMO1xuICBsZXQgbmV3VVJMO1xuICBpZiAoc3BlY2lmaWVkRW50cnkudXJsLmZyYWdtZW50ICE9PSBjdXJyZW50RW50cnkudXJsLmZyYWdtZW50KSB7XG4gICAgaGFzaENoYW5nZWQgPSB0cnVlO1xuICAgIG9sZFVSTCA9IGN1cnJlbnRFbnRyeS51cmw7XG4gICAgbmV3VVJMID0gc3BlY2lmaWVkRW50cnkudXJsO1xuICB9XG5cbiAgY29uc3Qgc3RhdGUgPSBzcGVjaWZpZWRFbnRyeS5zdGF0ZU9iamVjdDsgLy8gVE9ETyBzdHJ1Y3R1cmVkIGNsb25lXG4gIGRvY3VtZW50Ll9oaXN0b3J5Ll9zdGF0ZSA9IHN0YXRlO1xuXG4gIGNvbnN0IHN0YXRlQ2hhbmdlZCA9IHNwZWNpZmllZEVudHJ5LmRvY3VtZW50Ll9oaXN0b3J5Ll9sYXRlc3RFbnRyeSAhPT0gc3BlY2lmaWVkRW50cnk7XG4gIHNwZWNpZmllZEVudHJ5LmRvY3VtZW50Ll9oaXN0b3J5Ll9sYXRlc3RFbnRyeSA9IHNwZWNpZmllZEVudHJ5O1xuXG4gIGlmIChub25CbG9ja2luZ0V2ZW50cykge1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZpcmVFdmVudHMsIDApO1xuICB9IGVsc2Uge1xuICAgIGZpcmVFdmVudHMoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpcmVFdmVudHMoKSB7XG4gICAgaWYgKHN0YXRlQ2hhbmdlZCkge1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoUG9wU3RhdGVFdmVudC5jcmVhdGUoW1wicG9wc3RhdGVcIiwge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgc3RhdGVcbiAgICAgIH1dKSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc2hDaGFuZ2VkKSB7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChIYXNoQ2hhbmdlRXZlbnQuY3JlYXRlKFtcImhhc2hjaGFuZ2VcIiwge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgb2xkVVJMOiB3aGF0d2dVUkwuc2VyaWFsaXplVVJMKG9sZFVSTCksXG4gICAgICAgIG5ld1VSTDogd2hhdHdnVVJMLnNlcmlhbGl6ZVVSTChuZXdVUkwpXG4gICAgICB9XSkpO1xuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5fY3VycmVudFNlc3Npb25IaXN0b3J5RW50cnlJbmRleCA9IHdpbmRvdy5fc2Vzc2lvbkhpc3RvcnkuaW5kZXhPZihzcGVjaWZpZWRFbnRyeSk7XG59O1xuXG5leHBvcnRzLm5hdmlnYXRlID0gKHdpbmRvdywgbmV3VVJMKSA9PiB7XG4gIC8vIFRoaXMgaXMgTk9UIGEgc3BlYy1jb21wbGlhbnQgaW1wbGVtZW50YXRpb24gb2YgbmF2aWdhdGlvbiBpbiBhbnkgd2F5LiBJdCBpbXBsZW1lbnRzIGEgZmV3IHNlbGVjdGl2ZSBzdGVwcyB0aGF0XG4gIC8vIGFyZSBuaWNlIGZvciBqc2RvbSB1c2VycywgcmVnYXJkaW5nIGhhc2ggY2hhbmdlcy4gV2UgY291bGQgbWF5YmUgaW1wbGVtZW50IGphdmFzY3JpcHQ6IFVSTHMgaW4gdGhlIGZ1dHVyZSwgYnV0XG4gIC8vIHRoZSByZXN0IGlzIHRvbyBoYXJkLlxuXG4gIGNvbnN0IGRvY3VtZW50ID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIod2luZG93Ll9kb2N1bWVudCk7XG5cbiAgY29uc3QgY3VycmVudFVSTCA9IGRvY3VtZW50Ll9VUkw7XG5cbiAgaWYgKG5ld1VSTC5zY2hlbWUgIT09IGN1cnJlbnRVUkwuc2NoZW1lIHx8XG4gICAgICBuZXdVUkwudXNlcm5hbWUgIT09IGN1cnJlbnRVUkwudXNlcm5hbWUgfHxcbiAgICAgIG5ld1VSTC5wYXNzd29yZCAhPT0gY3VycmVudFVSTC5wYXNzd29yZCB8fFxuICAgICAgbmV3VVJMLmhvc3QgIT09IGN1cnJlbnRVUkwuaG9zdCB8fFxuICAgICAgbmV3VVJMLnBvcnQgIT09IGN1cnJlbnRVUkwucG9ydCB8fFxuICAgICAgIWFycmF5RXF1YWwobmV3VVJMLnBhdGgsIGN1cnJlbnRVUkwucGF0aCkgfHxcbiAgICAgIG5ld1VSTC5xdWVyeSAhPT0gY3VycmVudFVSTC5xdWVyeSB8fFxuICAgICAgLy8gT21pdHRlZCBwZXIgc3BlYzogdXJsLmZyYWdtZW50ICE9PSB0aGlzLl91cmwuZnJhZ21lbnQgfHxcbiAgICAgIG5ld1VSTC5jYW5ub3RCZUFCYXNlVVJMICE9PSBjdXJyZW50VVJMLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICBub3RJbXBsZW1lbnRlZChcIm5hdmlnYXRpb24gKGV4Y2VwdCBoYXNoIGNoYW5nZXMpXCIsIHdpbmRvdyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5ld1VSTC5mcmFnbWVudCAhPT0gY3VycmVudFVSTC5mcmFnbWVudCkge1xuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3Njcm9sbC10by1mcmFnaWRcblxuICAgIHdpbmRvdy5fc2Vzc2lvbkhpc3Rvcnkuc3BsaWNlKHdpbmRvdy5fY3VycmVudFNlc3Npb25IaXN0b3J5RW50cnlJbmRleCArIDEsIEluZmluaXR5KTtcblxuICAgIGRvY3VtZW50Ll9oaXN0b3J5Ll9jbGVhckhpc3RvcnlUcmF2ZXJzYWxUYXNrcygpO1xuXG4gICAgY29uc3QgbmV3RW50cnkgPSB7IGRvY3VtZW50LCB1cmw6IG5ld1VSTCB9O1xuICAgIHdpbmRvdy5fc2Vzc2lvbkhpc3RvcnkucHVzaChuZXdFbnRyeSk7XG4gICAgZXhwb3J0cy50cmF2ZXJzZUhpc3Rvcnkod2luZG93LCBuZXdFbnRyeSwgeyBub25CbG9ja2luZ0V2ZW50czogdHJ1ZSB9KTtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiZXZlbnRzXCIpLkV2ZW50RW1pdHRlcjtcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuY29uc3QgVVJMID0gcmVxdWlyZShcIndoYXR3Zy11cmxcIikuVVJMO1xuXG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmNvbnN0IHhoclN5bWJvbHMgPSByZXF1aXJlKFwiLi94bWxodHRwcmVxdWVzdC1zeW1ib2xzXCIpO1xuXG5mdW5jdGlvbiB3cmFwQ29va2llSmFyRm9yUmVxdWVzdChjb29raWVKYXIpIHtcbiAgY29uc3QgamFyV3JhcHBlciA9IHJlcXVlc3QuamFyKCk7XG4gIGphcldyYXBwZXIuX2phciA9IGNvb2tpZUphcjtcbiAgcmV0dXJuIGphcldyYXBwZXI7XG59XG5cbmZ1bmN0aW9uIGdldFJlcXVlc3RIZWFkZXIocmVxdWVzdEhlYWRlcnMsIGhlYWRlcikge1xuICBjb25zdCBsY0hlYWRlciA9IGhlYWRlci50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVxdWVzdEhlYWRlcnMpO1xuICBsZXQgbiA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAobi0tKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tuXTtcbiAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09IGxjSGVhZGVyKSB7XG4gICAgICByZXR1cm4gcmVxdWVzdEhlYWRlcnNba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlcXVlc3RIZWFkZXIocmVxdWVzdEhlYWRlcnMsIGhlYWRlciwgbmV3VmFsdWUpIHtcbiAgY29uc3QgbGNIZWFkZXIgPSBoZWFkZXIudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJlcXVlc3RIZWFkZXJzKTtcbiAgbGV0IG4gPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKG4tLSkge1xuICAgIGNvbnN0IGtleSA9IGtleXNbbl07XG4gICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBsY0hlYWRlcikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNba2V5XSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZUhlYWRlcnMobGhzLCByaHMpIHtcbiAgY29uc3QgcmhzUGFydHMgPSByaHMuc3BsaXQoXCIsXCIpO1xuICBjb25zdCBsaHNQYXJ0cyA9IGxocy5zcGxpdChcIixcIik7XG4gIHJldHVybiByaHNQYXJ0cy5jb25jYXQobGhzUGFydHMuZmlsdGVyKHAgPT4gcmhzUGFydHMuaW5kZXhPZihwKSA8IDApKS5qb2luKFwiLFwiKTtcbn1cblxuY29uc3Qgc2ltcGxlTWV0aG9kcyA9IG5ldyBTZXQoW1wiR0VUXCIsIFwiSEVBRFwiLCBcIlBPU1RcIl0pO1xuY29uc3Qgc2ltcGxlSGVhZGVycyA9IG5ldyBTZXQoW1wiYWNjZXB0XCIsIFwiYWNjZXB0LWxhbmd1YWdlXCIsIFwiY29udGVudC1sYW5ndWFnZVwiLCBcImNvbnRlbnQtdHlwZVwiXSk7XG5jb25zdCBwcmVmbGlnaHRIZWFkZXJzID0gbmV3IFNldChbXG4gIFwiYWNjZXNzLWNvbnRyb2wtZXhwb3NlLWhlYWRlcnNcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHNcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIlxuXSk7XG5cbmV4cG9ydHMuZ2V0UmVxdWVzdEhlYWRlciA9IGdldFJlcXVlc3RIZWFkZXI7XG5leHBvcnRzLnVwZGF0ZVJlcXVlc3RIZWFkZXIgPSB1cGRhdGVSZXF1ZXN0SGVhZGVyO1xuZXhwb3J0cy5zaW1wbGVIZWFkZXJzID0gc2ltcGxlSGVhZGVycztcbmV4cG9ydHMucHJlZmxpZ2h0SGVhZGVycyA9IHByZWZsaWdodEhlYWRlcnM7XG5cbi8vIHJldHVybiBhIFwicmVxdWVzdFwiIGNsaWVudCBvYmplY3Qgb3IgYW4gZXZlbnQgZW1pdHRlciBtYXRjaGluZyB0aGUgc2FtZSBiZWhhdmlvdXIgZm9yIHVuc3VwcG9ydGVkIHByb3RvY29sc1xuLy8gdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhIFwicmVxdWVzdFwiIHJlc3BvbnNlIG9iamVjdCBvciBhbiBldmVudCBlbWl0dGVyIG1hdGNoaW5nIHRoZSBzYW1lIGJlaGF2aW91ciB0b29cbmV4cG9ydHMuY3JlYXRlQ2xpZW50ID0gZnVuY3Rpb24gY3JlYXRlQ2xpZW50KHhocikge1xuICBjb25zdCBmbGFnID0geGhyW3hoclN5bWJvbHMuZmxhZ107XG4gIGNvbnN0IHByb3BlcnRpZXMgPSB4aHJbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcbiAgY29uc3QgdXJsT2JqID0gbmV3IFVSTChmbGFnLnVyaSk7XG4gIGNvbnN0IHVyaSA9IHVybE9iai5ocmVmO1xuICBjb25zdCB1Y01ldGhvZCA9IGZsYWcubWV0aG9kLnRvVXBwZXJDYXNlKCk7XG5cbiAgY29uc3QgcmVxdWVzdE1hbmFnZXIgPSBmbGFnLnJlcXVlc3RNYW5hZ2VyO1xuXG4gIGlmICh1cmxPYmoucHJvdG9jb2wgPT09IFwiZmlsZTpcIikge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHJlc3BvbnNlLnN0YXR1c0NvZGUgPSAyMDA7XG4gICAgcmVzcG9uc2UucmF3SGVhZGVycyA9IFtdO1xuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSB7fTtcbiAgICByZXNwb25zZS5yZXF1ZXN0ID0geyB1cmk6IHVybE9iaiB9O1xuICAgIGNvbnN0IGZpbGVQYXRoID0gdXJsT2JqLnBhdGhuYW1lXG4gICAgICAucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIilcbiAgICAgIC5yZXBsYWNlKC9eXFwvKFthLXpdKTpcXC8vaSwgXCIkMTovXCIpXG4gICAgICAucmVwbGFjZSgvJTIwL2csIFwiIFwiKTtcblxuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCwgeyBlbmNvZGluZzogbnVsbCB9KTtcblxuICAgIHJlYWRhYmxlU3RyZWFtLm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XG4gICAgICByZXNwb25zZS5lbWl0KFwiZGF0YVwiLCBjaHVuayk7XG4gICAgICBjbGllbnQuZW1pdChcImRhdGFcIiwgY2h1bmspO1xuICAgIH0pO1xuXG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgcmVzcG9uc2UuZW1pdChcImVuZFwiKTtcbiAgICAgIGNsaWVudC5lbWl0KFwiZW5kXCIpO1xuICAgIH0pO1xuXG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJlcnJvclwiLCBlcnIgPT4ge1xuICAgICAgcmVzcG9uc2UuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgICBjbGllbnQuZW1pdChcImVycm9yXCIsIGVycik7XG4gICAgfSk7XG5cbiAgICBjbGllbnQuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZWFkYWJsZVN0cmVhbS5kZXN0cm95KCk7XG4gICAgICBjbGllbnQuZW1pdChcImFib3J0XCIpO1xuICAgIH07XG5cbiAgICBpZiAocmVxdWVzdE1hbmFnZXIpIHtcbiAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgYWJvcnQoKSB7XG4gICAgICAgICAgcHJvcGVydGllcy5hYm9ydEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICB4aHIuYWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJlcXVlc3RNYW5hZ2VyLmFkZChyZXEpO1xuICAgICAgY29uc3Qgcm1SZXEgPSByZXF1ZXN0TWFuYWdlci5yZW1vdmUuYmluZChyZXF1ZXN0TWFuYWdlciwgcmVxKTtcbiAgICAgIGNsaWVudC5vbihcImFib3J0XCIsIHJtUmVxKTtcbiAgICAgIGNsaWVudC5vbihcImVycm9yXCIsIHJtUmVxKTtcbiAgICAgIGNsaWVudC5vbihcImVuZFwiLCBybVJlcSk7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiBjbGllbnQuZW1pdChcInJlc3BvbnNlXCIsIHJlc3BvbnNlKSk7XG5cbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG5cbiAgaWYgKHVybE9iai5wcm90b2NvbCA9PT0gXCJkYXRhOlwiKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICByZXNwb25zZS5yZXF1ZXN0ID0geyB1cmk6IHVybE9iaiB9O1xuXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgbGV0IGJ1ZmZlcjtcbiAgICBpZiAodWNNZXRob2QgPT09IFwiR0VUXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGFVcmxDb250ZW50ID0gdXRpbHMucGFyc2VEYXRhVXJsKHVyaSk7XG4gICAgICAgIGJ1ZmZlciA9IGRhdGFVcmxDb250ZW50LmJ1ZmZlcjtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgcmVzcG9uc2UucmF3SGVhZGVycyA9IGRhdGFVcmxDb250ZW50LnR5cGUgPyBbXCJDb250ZW50LVR5cGVcIiwgZGF0YVVybENvbnRlbnQudHlwZV0gOiBbXTtcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IGRhdGFVcmxDb250ZW50LnR5cGUgPyB7IFwiY29udGVudC10eXBlXCI6IGRhdGFVcmxDb250ZW50LnR5cGUgfSA6IHt9O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4gY2xpZW50LmVtaXQoXCJlcnJvclwiLCBlcnIpKTtcbiAgICAgICAgcmV0dXJuIGNsaWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyID0gbmV3IEJ1ZmZlcihcIlwiKTtcbiAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGUgPSAwO1xuICAgICAgcmVzcG9uc2UucmF3SGVhZGVycyA9IHt9O1xuICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IHt9O1xuICAgIH1cblxuICAgIGNsaWVudC5hYm9ydCA9ICgpID0+IHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9O1xuXG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICBjbGllbnQuZW1pdChcInJlc3BvbnNlXCIsIHJlc3BvbnNlKTtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICByZXNwb25zZS5lbWl0KFwiZGF0YVwiLCBidWZmZXIpO1xuICAgICAgICBjbGllbnQuZW1pdChcImRhdGFcIiwgYnVmZmVyKTtcbiAgICAgICAgcmVzcG9uc2UuZW1pdChcImVuZFwiKTtcbiAgICAgICAgY2xpZW50LmVtaXQoXCJlbmRcIik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cblxuICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IHt9O1xuXG4gIGZvciAoY29uc3QgaGVhZGVyIGluIGZsYWcucmVxdWVzdEhlYWRlcnMpIHtcbiAgICByZXF1ZXN0SGVhZGVyc1toZWFkZXJdID0gZmxhZy5yZXF1ZXN0SGVhZGVyc1toZWFkZXJdO1xuICB9XG5cbiAgaWYgKGdldFJlcXVlc3RIZWFkZXIoZmxhZy5yZXF1ZXN0SGVhZGVycywgXCJyZWZlcmVyXCIpID09PSBudWxsKSB7XG4gICAgcmVxdWVzdEhlYWRlcnMuUmVmZXJlciA9IGZsYWcucmVmZXJyZXI7XG4gIH1cbiAgaWYgKGdldFJlcXVlc3RIZWFkZXIoZmxhZy5yZXF1ZXN0SGVhZGVycywgXCJ1c2VyLWFnZW50XCIpID09PSBudWxsKSB7XG4gICAgcmVxdWVzdEhlYWRlcnNbXCJVc2VyLUFnZW50XCJdID0gZmxhZy51c2VyQWdlbnQ7XG4gIH1cbiAgaWYgKGdldFJlcXVlc3RIZWFkZXIoZmxhZy5yZXF1ZXN0SGVhZGVycywgXCJhY2NlcHQtbGFuZ3VhZ2VcIikgPT09IG51bGwpIHtcbiAgICByZXF1ZXN0SGVhZGVyc1tcIkFjY2VwdC1MYW5ndWFnZVwiXSA9IFwiZW5cIjtcbiAgfVxuICBpZiAoZ2V0UmVxdWVzdEhlYWRlcihmbGFnLnJlcXVlc3RIZWFkZXJzLCBcImFjY2VwdFwiKSA9PT0gbnVsbCkge1xuICAgIHJlcXVlc3RIZWFkZXJzLkFjY2VwdCA9IFwiKi8qXCI7XG4gIH1cblxuICBjb25zdCBjcm9zc09yaWdpbiA9IGZsYWcub3JpZ2luICE9PSB1cmxPYmoub3JpZ2luO1xuICBpZiAoY3Jvc3NPcmlnaW4pIHtcbiAgICByZXF1ZXN0SGVhZGVycy5PcmlnaW4gPSBmbGFnLm9yaWdpbjtcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgdXJpLFxuICAgIG1ldGhvZDogZmxhZy5tZXRob2QsXG4gICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgZ3ppcDogdHJ1ZSxcbiAgICBtYXhSZWRpcmVjdHM6IDIxLFxuICAgIGZvbGxvd0FsbFJlZGlyZWN0czogdHJ1ZSxcbiAgICBlbmNvZGluZzogbnVsbCxcbiAgICBwb29sOiBmbGFnLnBvb2wsXG4gICAgYWdlbnRPcHRpb25zOiBmbGFnLmFnZW50T3B0aW9ucyxcbiAgICBzdHJpY3RTU0w6IGZsYWcuc3RyaWN0U1NMXG4gIH07XG4gIGlmIChmbGFnLmF1dGgpIHtcbiAgICBvcHRpb25zLmF1dGggPSB7XG4gICAgICB1c2VyOiBmbGFnLmF1dGgudXNlciB8fCBcIlwiLFxuICAgICAgcGFzczogZmxhZy5hdXRoLnBhc3MgfHwgXCJcIixcbiAgICAgIHNlbmRJbW1lZGlhdGVseTogZmFsc2VcbiAgICB9O1xuICB9XG4gIGlmIChmbGFnLmNvb2tpZUphciAmJiAoIWNyb3NzT3JpZ2luIHx8IGZsYWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgIG9wdGlvbnMuamFyID0gd3JhcENvb2tpZUphckZvclJlcXVlc3QoZmxhZy5jb29raWVKYXIpO1xuICB9XG5cbiAgaWYgKGZsYWcucHJveHkpIHtcbiAgICBvcHRpb25zLnByb3h5ID0gZmxhZy5wcm94eTtcbiAgfVxuXG4gIGNvbnN0IGJvZHkgPSBmbGFnLmJvZHk7XG4gIGNvbnN0IGhhc0JvZHkgPSBib2R5ICE9PSB1bmRlZmluZWQgJiZcbiAgICBib2R5ICE9PSBudWxsICYmXG4gICAgYm9keSAhPT0gXCJcIiAmJlxuICAgICEodWNNZXRob2QgPT09IFwiSEVBRFwiIHx8IHVjTWV0aG9kID09PSBcIkdFVFwiKTtcblxuICBpZiAoaGFzQm9keSAmJiAhZmxhZy5mb3JtRGF0YSkge1xuICAgIG9wdGlvbnMuYm9keSA9IGJvZHk7XG4gIH1cblxuICBpZiAoaGFzQm9keSAmJiBnZXRSZXF1ZXN0SGVhZGVyKGZsYWcucmVxdWVzdEhlYWRlcnMsIFwiY29udGVudC10eXBlXCIpID09PSBudWxsKSB7XG4gICAgcmVxdWVzdEhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOFwiO1xuICB9XG5cbiAgZnVuY3Rpb24gZG9SZXF1ZXN0KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZXF1ZXN0KG9wdGlvbnMpO1xuXG4gICAgICBpZiAoaGFzQm9keSAmJiBmbGFnLmZvcm1EYXRhKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBjbGllbnQuZm9ybSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGJvZHkpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChlbnRyeS5uYW1lLCBlbnRyeS52YWx1ZSwgZW50cnkub3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsaWVudDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IGNsaWVudC5lbWl0KFwiZXJyb3JcIiwgZSkpO1xuICAgICAgcmV0dXJuIGNsaWVudDtcbiAgICB9XG4gIH1cblxuICBsZXQgY2xpZW50O1xuXG4gIGNvbnN0IG5vblNpbXBsZUhlYWRlcnMgPSBPYmplY3Qua2V5cyhmbGFnLnJlcXVlc3RIZWFkZXJzKVxuICAgIC5maWx0ZXIoaGVhZGVyID0+ICFzaW1wbGVIZWFkZXJzLmhhcyhoZWFkZXIudG9Mb3dlckNhc2UoKSkpO1xuXG4gIGlmIChjcm9zc09yaWdpbiAmJiAoIXNpbXBsZU1ldGhvZHMuaGFzKHVjTWV0aG9kKSB8fCBub25TaW1wbGVIZWFkZXJzLmxlbmd0aCA+IDApKSB7XG4gICAgY2xpZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgY29uc3QgcHJlZmxpZ2h0UmVxdWVzdEhlYWRlcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGhlYWRlciBpbiByZXF1ZXN0SGVhZGVycykge1xuICAgICAgcHJlZmxpZ2h0UmVxdWVzdEhlYWRlcnNbaGVhZGVyXSA9IHJlcXVlc3RIZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuXG4gICAgcHJlZmxpZ2h0UmVxdWVzdEhlYWRlcnNbXCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZFwiXSA9IGZsYWcubWV0aG9kO1xuICAgIGlmIChub25TaW1wbGVIZWFkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByZWZsaWdodFJlcXVlc3RIZWFkZXJzW1wiQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzXCJdID0gbm9uU2ltcGxlSGVhZGVycy5qb2luKFwiLCBcIik7XG4gICAgfVxuXG4gICAgZmxhZy5wcmVmbGlnaHQgPSB0cnVlO1xuXG4gICAgY29uc3QgcHJlZmxpZ2h0T3B0aW9ucyA9IHtcbiAgICAgIHVyaSxcbiAgICAgIG1ldGhvZDogXCJPUFRJT05TXCIsXG4gICAgICBoZWFkZXJzOiBwcmVmbGlnaHRSZXF1ZXN0SGVhZGVycyxcbiAgICAgIGZvbGxvd1JlZGlyZWN0OiBmYWxzZSxcbiAgICAgIGVuY29kaW5nOiBudWxsLFxuICAgICAgcG9vbDogZmxhZy5wb29sLFxuICAgICAgYWdlbnRPcHRpb25zOiBmbGFnLmFnZW50T3B0aW9ucyxcbiAgICAgIHN0cmljdFNTTDogZmxhZy5zdHJpY3RTU0xcbiAgICB9O1xuXG4gICAgaWYgKGZsYWcucHJveHkpIHtcbiAgICAgIHByZWZsaWdodE9wdGlvbnMucHJveHkgPSBmbGFnLnByb3h5O1xuICAgIH1cblxuICAgIGNvbnN0IHByZWZsaWdodENsaWVudCA9IHJlcXVlc3QocHJlZmxpZ2h0T3B0aW9ucyk7XG5cbiAgICBwcmVmbGlnaHRDbGllbnQub24oXCJyZXNwb25zZVwiLCByZXNwID0+IHtcbiAgICAgIGlmIChyZXNwLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlc3Auc3RhdHVzQ29kZSA8PSAyOTkpIHtcbiAgICAgICAgY29uc3QgcmVhbENsaWVudCA9IGRvUmVxdWVzdCgpO1xuICAgICAgICByZWFsQ2xpZW50Lm9uKFwicmVzcG9uc2VcIiwgcmVzID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBpbiByZXNwLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChwcmVmbGlnaHRIZWFkZXJzLmhhcyhoZWFkZXIpKSB7XG4gICAgICAgICAgICAgIHJlcy5oZWFkZXJzW2hlYWRlcl0gPSByZXMuaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpID9cbiAgICAgICAgICAgICAgICBtZXJnZUhlYWRlcnMocmVzLmhlYWRlcnNbaGVhZGVyXSwgcmVzcC5oZWFkZXJzW2hlYWRlcl0pIDogcmVzcC5oZWFkZXJzW2hlYWRlcl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNsaWVudC5lbWl0KFwicmVzcG9uc2VcIiwgcmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlYWxDbGllbnQub24oXCJkYXRhXCIsIGNodW5rID0+IGNsaWVudC5lbWl0KFwiZGF0YVwiLCBjaHVuaykpO1xuICAgICAgICByZWFsQ2xpZW50Lm9uKFwiZW5kXCIsICgpID0+IGNsaWVudC5lbWl0KFwiZW5kXCIpKTtcbiAgICAgICAgcmVhbENsaWVudC5vbihcImFib3J0XCIsICgpID0+IGNsaWVudC5lbWl0KFwiYWJvcnRcIikpO1xuICAgICAgICByZWFsQ2xpZW50Lm9uKFwicmVxdWVzdFwiLCByZXEgPT4ge1xuICAgICAgICAgIGNsaWVudC5oZWFkZXJzID0gcmVhbENsaWVudC5oZWFkZXJzO1xuICAgICAgICAgIGNsaWVudC5lbWl0KFwicmVxdWVzdFwiLCByZXEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVhbENsaWVudC5vbihcInJlZGlyZWN0XCIsICgpID0+IHtcbiAgICAgICAgICBjbGllbnQucmVzcG9uc2UgPSByZWFsQ2xpZW50LnJlc3BvbnNlO1xuICAgICAgICAgIGNsaWVudC5lbWl0KFwicmVkaXJlY3RcIik7XG4gICAgICAgIH0pO1xuICAgICAgICByZWFsQ2xpZW50Lm9uKFwiZXJyb3JcIiwgZXJyID0+IGNsaWVudC5lbWl0KFwiZXJyb3JcIiwgZXJyKSk7XG4gICAgICAgIGNsaWVudC5hYm9ydCA9ICgpID0+IHtcbiAgICAgICAgICByZWFsQ2xpZW50LmFib3J0KCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnQuZW1pdChcImVycm9yXCIsIG5ldyBFcnJvcihcIlJlc3BvbnNlIGZvciBwcmVmbGlnaHQgaGFzIGludmFsaWQgSFRUUCBzdGF0dXMgY29kZSBcIiArIHJlc3Auc3RhdHVzQ29kZSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcHJlZmxpZ2h0Q2xpZW50Lm9uKFwiZXJyb3JcIiwgZXJyID0+IGNsaWVudC5lbWl0KFwiZXJyb3JcIiwgZXJyKSk7XG5cbiAgICBjbGllbnQuYWJvcnQgPSAoKSA9PiB7XG4gICAgICBwcmVmbGlnaHRDbGllbnQuYWJvcnQoKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNsaWVudCA9IGRvUmVxdWVzdCgpO1xuICB9XG5cbiAgaWYgKHJlcXVlc3RNYW5hZ2VyKSB7XG4gICAgY29uc3QgcmVxID0ge1xuICAgICAgYWJvcnQoKSB7XG4gICAgICAgIHByb3BlcnRpZXMuYWJvcnRFcnJvciA9IHRydWU7XG4gICAgICAgIHhoci5hYm9ydCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmVxdWVzdE1hbmFnZXIuYWRkKHJlcSk7XG4gICAgY29uc3Qgcm1SZXEgPSByZXF1ZXN0TWFuYWdlci5yZW1vdmUuYmluZChyZXF1ZXN0TWFuYWdlciwgcmVxKTtcbiAgICBjbGllbnQub24oXCJhYm9ydFwiLCBybVJlcSk7XG4gICAgY2xpZW50Lm9uKFwiZXJyb3JcIiwgcm1SZXEpO1xuICAgIGNsaWVudC5vbihcImVuZFwiLCBybVJlcSk7XG4gIH1cblxuICByZXR1cm4gY2xpZW50O1xufTtcblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBpc0Zvcm1FbGVtZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9IVE1MRm9ybUVsZW1lbnRcIikuaXNJbXBsO1xuY29uc3QgY2xvc2VzdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5jbG9zZXN0O1xuY29uc3QgaXNEaXNhYmxlZCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2Zvcm0tY29udHJvbHNcIikuaXNEaXNhYmxlZDtcbmNvbnN0IGlzU3VibWl0dGFibGUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9mb3JtLWNvbnRyb2xzXCIpLmlzU3VibWl0dGFibGU7XG5jb25zdCBpc0J1dHRvbiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2Zvcm0tY29udHJvbHNcIikuaXNCdXR0b247XG5jb25zdCBub3JtYWxpemVUb0NSTEYgPSByZXF1aXJlKFwiLi4vaGVscGVycy9mb3JtLWNvbnRyb2xzXCIpLm5vcm1hbGl6ZVRvQ1JMRjtcbmNvbnN0IEJsb2IgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0Jsb2IuanNcIik7XG5jb25zdCBGaWxlID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9GaWxlLmpzXCIpO1xuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgRm9ybURhdGFJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncykge1xuICAgIHRoaXMuX2VudHJpZXMgPSBbXTtcblxuICAgIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghaXNGb3JtRWxlbWVudChhcmdzWzBdKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgbXVzdCB1bmRlZmluZWQgb3IgYSBIVE1MRm9ybUVsZW1lbnRcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VudHJpZXMgPSBjb25zdHJ1Y3RUaGVGb3JtRGF0YVNldChhcmdzWzBdKTtcbiAgICB9XG4gIH1cblxuICBhcHBlbmQobmFtZSwgdmFsdWUsIGZpbGVuYW1lKSB7XG4gICAgLy8gSGFuZGxpbmcgdGhpcyBtYW51YWxseSBmb3Igbm93OiBodHRwczovL2dpdGh1Yi5jb20vanNkb20vd2ViaWRsMmpzL2lzc3Vlcy8yOVxuICAgIGlmICghQmxvYi5pc0ltcGwodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IGNvbnZlcnNpb25zLlVTVlN0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnkgPSBjcmVhdGVBbkVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSk7XG4gICAgdGhpcy5fZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGRlbGV0ZShuYW1lKSB7XG4gICAgdGhpcy5fZW50cmllcyA9IHRoaXMuX2VudHJpZXMuZmlsdGVyKGVudHJ5ID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpO1xuICB9XG5cbiAgZ2V0KG5hbWUpIHtcbiAgICBjb25zdCBmb3VuZEVudHJ5ID0gdGhpcy5fZW50cmllcy5maW5kKGVudHJ5ID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpO1xuICAgIHJldHVybiBmb3VuZEVudHJ5ICE9PSB1bmRlZmluZWQgPyBmb3VuZEVudHJ5LnZhbHVlIDogbnVsbDtcbiAgfVxuXG4gIGdldEFsbChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VudHJpZXMuZmlsdGVyKGVudHJ5ID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpLm1hcChlbnRyeSA9PiBlbnRyeS52YWx1ZSk7XG4gIH1cblxuICBoYXMobmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9lbnRyaWVzLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKSAhPT0gLTE7XG4gIH1cblxuICBzZXQobmFtZSwgdmFsdWUsIGZpbGVuYW1lKSB7XG4gICAgLy8gSGFuZGxpbmcgdGhpcyBtYW51YWxseSBmb3Igbm93OiBodHRwczovL2dpdGh1Yi5jb20vanNkb20vd2ViaWRsMmpzL2lzc3Vlcy8yOVxuICAgIGlmICghQmxvYi5pc0ltcGwodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IGNvbnZlcnNpb25zLlVTVlN0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnkgPSBjcmVhdGVBbkVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSk7XG5cbiAgICBjb25zdCBmb3VuZEluZGV4ID0gdGhpcy5fZW50cmllcy5maW5kSW5kZXgoZSA9PiBlLm5hbWUgPT09IG5hbWUpO1xuICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZW50cmllc1tmb3VuZEluZGV4XSA9IGVudHJ5O1xuICAgICAgdGhpcy5fZW50cmllcyA9IHRoaXMuX2VudHJpZXMuZmlsdGVyKChlLCBpKSA9PiBlLm5hbWUgIT09IG5hbWUgfHwgaSA9PT0gZm91bmRJbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfVxuICB9XG5cbiAgKiBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuX2VudHJpZXMpIHtcbiAgICAgIHlpZWxkIFtlbnRyeS5uYW1lLCBpZGxVdGlscy50cnlXcmFwcGVyRm9ySW1wbChlbnRyeS52YWx1ZSldO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlQW5FbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgY29uc3QgZW50cnkgPSB7IG5hbWUgfTtcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3hoci9pc3N1ZXMvNzVcblxuICBpZiAoQmxvYi5pc0ltcGwodmFsdWUpICYmICFGaWxlLmlzSW1wbCh2YWx1ZSkpIHtcbiAgICBjb25zdCBvbGRWYWx1ZSA9IHZhbHVlO1xuICAgIHZhbHVlID0gRmlsZS5jcmVhdGVJbXBsKFtcbiAgICAgIFtdLFxuICAgICAgXCJibG9iXCIsXG4gICAgICB7IHR5cGU6IG9sZFZhbHVlLnR5cGUgfVxuICAgIF0pO1xuICAgIC8vIFwicmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzXCJcbiAgICB2YWx1ZS5fYnVmZmVyID0gb2xkVmFsdWUuX2J1ZmZlcjtcbiAgfVxuXG4gIGlmIChGaWxlLmlzSW1wbCh2YWx1ZSkgJiYgZmlsZW5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdmFsdWU7XG4gICAgdmFsdWUgPSBGaWxlLmNyZWF0ZUltcGwoW1xuICAgICAgW10sXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIC8vIHNwZWMgbWFrZXMgbm8gbWVudGlvbiBvZiBgbGFzdE1vZGlmaWVkYDsgYXNzdW1lIGl0IGlzIGluaGVyaXRlZFxuICAgICAgLy8gKENocm9tZSdzIGJlaGF2aW9yKVxuICAgICAgeyB0eXBlOiBvbGRWYWx1ZS50eXBlLCBsYXN0TW9kaWZpZWQ6IG9sZFZhbHVlLmxhc3RNb2RpZmllZCB9XG4gICAgXSk7XG4gICAgLy8gXCJyZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXNcIlxuICAgIHZhbHVlLl9idWZmZXIgPSBvbGRWYWx1ZS5fYnVmZmVyO1xuICB9XG5cbiAgZW50cnkudmFsdWUgPSB2YWx1ZTtcblxuICByZXR1cm4gZW50cnk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFRoZUZvcm1EYXRhU2V0KGZvcm0sIHN1Ym1pdHRlcikge1xuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbnN0cnVjdGluZy1mb3JtLWRhdGEtc2V0XG5cbiAgY29uc3QgY29udHJvbHMgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZm9ybS5lbGVtZW50cywgaXNTdWJtaXR0YWJsZSk7IC8vIHN1Ym1pdHRhYmxlIGlzIGEgc3Vic2V0IG9mIGxpc3RlZFxuICBjb25zdCBmb3JtRGF0YVNldCA9IFtdO1xuXG4gIGZvciAoY29uc3QgZmllbGRXcmFwcGVyIG9mIGNvbnRyb2xzKSB7XG4gICAgY29uc3QgZmllbGQgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihmaWVsZFdyYXBwZXIpO1xuXG4gICAgaWYgKGNsb3Nlc3QoZmllbGQsIFwiZGF0YWxpc3RcIikgIT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNEaXNhYmxlZChmaWVsZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaXNCdXR0b24oZmllbGQpICYmIGZpZWxkICE9PSBzdWJtaXR0ZXIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZmllbGQudHlwZSA9PT0gXCJjaGVja2JveFwiICYmIGZpZWxkLl9jaGVja2VkbmVzcyA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZmllbGQudHlwZSA9PT0gXCJyYWRpb1wiICYmIGZpZWxkLl9jaGVja2VkbmVzcyA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZmllbGQudHlwZSAhPT0gXCJpbWFnZVwiICYmICghZmllbGQuaGFzQXR0cmlidXRlKFwibmFtZVwiKSB8fCBmaWVsZC5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpID09PSBcIlwiKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChmaWVsZC5sb2NhbE5hbWUgPT09IFwib2JqZWN0XCIpIHsgLy8gaW4ganNkb20sIG5vIG9iamVjdHMgYXJlIFwidXNpbmcgYSBwbHVnaW5cIlxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IGZpZWxkLnR5cGU7XG5cbiAgICAvLyBPbWl0IHNwZWNpYWwgcHJvY2Vzc2luZyBvZiA8aW5wdXQgdHlwZT1cImltYWdlXCI+IHNpbmNlIHNvIGZhciB3ZSBkb24ndCBhY3R1YWxseSBldmVyIHBhc3Mgc3VibWl0dGVyXG5cbiAgICBjb25zdCBuYW1lQXR0ciA9IGZpZWxkLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgY29uc3QgbmFtZSA9IG5hbWVBdHRyID09PSBudWxsID8gXCJcIiA6IG5hbWVBdHRyO1xuXG4gICAgaWYgKGZpZWxkLmxvY2FsTmFtZSA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZC5vcHRpb25zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKGZpZWxkLm9wdGlvbnNbaV0pO1xuICAgICAgICBpZiAob3B0aW9uLl9zZWxlY3RlZG5lc3MgPT09IHRydWUgJiYgIWlzRGlzYWJsZWQoZmllbGQpKSB7XG4gICAgICAgICAgZm9ybURhdGFTZXQucHVzaCh7IG5hbWUsIHZhbHVlOiBvcHRpb24udmFsdWUsIHR5cGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpZWxkLmxvY2FsTmFtZSA9PT0gXCJpbnB1dFwiICYmICh0eXBlID09PSBcImNoZWNrYm94XCIgfHwgdHlwZSA9PT0gXCJyYWRpb1wiKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC5oYXNBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSA/IGZpZWxkLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpIDogXCJvblwiO1xuICAgICAgZm9ybURhdGFTZXQucHVzaCh7IG5hbWUsIHZhbHVlLCB0eXBlIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGQuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgZm9ybURhdGFTZXQucHVzaCh7IG5hbWUsIHZhbHVlOiBmaWVsZC5maWxlcy5pdGVtKGkpLCB0eXBlIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGQuZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGZvcm1EYXRhU2V0LnB1c2goeyBuYW1lLCB2YWx1ZTogXCJcIiwgdHlwZTogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIiB9KTtcbiAgICAgIH1cbiAgICB9IC8qIHNraXAgcGx1Z2lucyAqLyBlbHNlIHtcbiAgICAgIGZvcm1EYXRhU2V0LnB1c2goeyBuYW1lLCB2YWx1ZTogZmllbGQuX2dldFZhbHVlKCksIHR5cGUgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlybmFtZSA9IGZpZWxkLmdldEF0dHJpYnV0ZShcImRpcm5hbWVcIik7XG4gICAgaWYgKGRpcm5hbWUgIT09IG51bGwgJiYgZGlybmFtZSAhPT0gXCJcIikge1xuICAgICAgY29uc3QgZGlyID0gXCJsdHJcIjsgLy8ganNkb20gZG9lcyBub3QgKHlldD8pIGltcGxlbWVudCBhY3R1YWwgZGlyZWN0aW9uYWxpdHlcbiAgICAgIGZvcm1EYXRhU2V0LnB1c2goeyBuYW1lOiBkaXJuYW1lLCB2YWx1ZTogZGlyLCB0eXBlOiBcImRpcmVjdGlvblwiIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZm9ybURhdGFTZXQpIHtcbiAgICBlbnRyeS5uYW1lID0gY29udmVyc2lvbnMuVVNWU3RyaW5nKG5vcm1hbGl6ZVRvQ1JMRihlbnRyeS5uYW1lKSk7XG5cbiAgICBpZiAoZW50cnkudHlwZSAhPT0gXCJmaWxlXCIgJiYgZW50cnkudHlwZSAhPT0gXCJ0ZXh0YXJlYVwiKSB7XG4gICAgICBlbnRyeS52YWx1ZSA9IG5vcm1hbGl6ZVRvQ1JMRihlbnRyeS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5LnR5cGUgIT09IFwiZmlsZVwiKSB7XG4gICAgICBlbnRyeS52YWx1ZSA9IGNvbnZlcnNpb25zLlVTVlN0cmluZyhlbnRyeS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvcm1EYXRhU2V0O1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEV2ZW50VGFyZ2V0ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0V2ZW50VGFyZ2V0XCIpO1xuXG5mdW5jdGlvbiBYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0KCkge1xuICBpZiAoIW5ldy50YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIEV2ZW50VGFyZ2V0LnNldHVwKHRoaXMpO1xuICB0aGlzLm9uYWJvcnQgPSBudWxsO1xuICB0aGlzLm9uZXJyb3IgPSBudWxsO1xuICB0aGlzLm9ubG9hZCA9IG51bGw7XG4gIHRoaXMub25sb2FkZW5kID0gbnVsbDtcbiAgdGhpcy5vbmxvYWRzdGFydCA9IG51bGw7XG4gIHRoaXMub25wcm9ncmVzcyA9IG51bGw7XG4gIHRoaXMub250aW1lb3V0ID0gbnVsbDtcbn1cblxuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEV2ZW50VGFyZ2V0LmludGVyZmFjZS5wcm90b3R5cGUpO1xuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb3JlKSB7XG4gIGNvcmUuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCA9IFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuZmxhZyA9IFN5bWJvbChcImZsYWdcIik7XG5leHBvcnRzLnByb3BlcnRpZXMgPSBTeW1ib2woXCJwcm9wZXJ0aWVzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvcmUpIHtcbiAgY29uc3QgWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCA9IGNvcmUuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtcblxuICBjbGFzcyBYTUxIdHRwUmVxdWVzdFVwbG9hZCBleHRlbmRzIFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIGlmICghbmV3LnRhcmdldCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBYTUxIdHRwUmVxdWVzdFVwbG9hZC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiWE1MSHR0cFJlcXVlc3RVcGxvYWRcIjtcblxuICBjb3JlLlhNTEh0dHBSZXF1ZXN0VXBsb2FkID0gWE1MSHR0cFJlcXVlc3RVcGxvYWQ7XG59O1xuXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRUUF9TVEFUVVNfQ09ERVMgPSByZXF1aXJlKFwiaHR0cFwiKS5TVEFUVVNfQ09ERVM7XG5jb25zdCBzcGF3blN5bmMgPSByZXF1aXJlKFwiY2hpbGRfcHJvY2Vzc1wiKS5zcGF3blN5bmM7XG5jb25zdCBVUkwgPSByZXF1aXJlKFwid2hhdHdnLXVybFwiKS5VUkw7XG5jb25zdCB3aGF0d2dFbmNvZGluZyA9IHJlcXVpcmUoXCJ3aGF0d2ctZW5jb2RpbmdcIik7XG5jb25zdCB0b3VnaCA9IHJlcXVpcmUoXCJ0b3VnaC1jb29raWVcIik7XG5jb25zdCBwYXJzZUNvbnRlbnRUeXBlID0gcmVxdWlyZShcImNvbnRlbnQtdHlwZS1wYXJzZXJcIik7XG5cbmNvbnN0IHhoclV0aWxzID0gcmVxdWlyZShcIi4veGhyLXV0aWxzXCIpO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgeGhyU3ltYm9scyA9IHJlcXVpcmUoXCIuL3htbGh0dHByZXF1ZXN0LXN5bWJvbHNcIik7XG5jb25zdCBhZGRDb25zdGFudHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIikuYWRkQ29uc3RhbnRzO1xuY29uc3QgZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZCA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvZG9jdW1lbnQtYmFzZS11cmxcIikuZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZDtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgRG9jdW1lbnQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvRG9jdW1lbnRcIik7XG5jb25zdCBCbG9iID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0Jsb2JcIik7XG5jb25zdCBkb21Ub0h0bWwgPSByZXF1aXJlKFwiLi4vYnJvd3Nlci9kb210b2h0bWxcIikuZG9tVG9IdG1sO1xuXG5jb25zdCBzeW5jV29ya2VyRmlsZSA9IHJlcXVpcmUucmVzb2x2ZSA/IHJlcXVpcmUucmVzb2x2ZShcIi4veGhyLXN5bmMtd29ya2VyLmpzXCIpIDogbnVsbDtcblxuY29uc3QgdG9rZW5SZWdleHAgPSAvXlshIyQlJicqK1xcLS5eX2B8fjAtOUEtWmEtel0rJC87XG5jb25zdCBoZWFkZXJMaXN0U2VwYXJhdG9yUmVnZXhwID0gLyxbIFxcdF0qLztcbmNvbnN0IGZpZWxkVmFsdWVSZWdleHAgPSAvXlsgXFx0XSooPzpbXFx4MjEtXFx4N0VcXHg4MC1cXHhGRl0oPzpbIFxcdF1bXFx4MjEtXFx4N0VcXHg4MC1cXHhGRl0pPykqWyBcXHRdKiQvO1xuXG5jb25zdCBmb3JiaWRkZW5SZXF1ZXN0SGVhZGVycyA9IG5ldyBTZXQoW1xuICBcImFjY2VwdC1jaGFyc2V0XCIsXG4gIFwiYWNjZXB0LWVuY29kaW5nXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1oZWFkZXJzXCIsXG4gIFwiYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1tZXRob2RcIixcbiAgXCJjb25uZWN0aW9uXCIsXG4gIFwiY29udGVudC1sZW5ndGhcIixcbiAgXCJjb29raWVcIixcbiAgXCJjb29raWUyXCIsXG4gIFwiZGF0ZVwiLFxuICBcImRudFwiLFxuICBcImV4cGVjdFwiLFxuICBcImhvc3RcIixcbiAgXCJrZWVwLWFsaXZlXCIsXG4gIFwib3JpZ2luXCIsXG4gIFwicmVmZXJlclwiLFxuICBcInRlXCIsXG4gIFwidHJhaWxlclwiLFxuICBcInRyYW5zZmVyLWVuY29kaW5nXCIsXG4gIFwidXBncmFkZVwiLFxuICBcInZpYVwiXG5dKTtcbmNvbnN0IGZvcmJpZGRlblJlc3BvbnNlSGVhZGVycyA9IG5ldyBTZXQoW1xuICBcInNldC1jb29raWVcIixcbiAgXCJzZXQtY29va2llMlwiXG5dKTtcbmNvbnN0IHVuaXF1ZVJlc3BvbnNlSGVhZGVycyA9IG5ldyBTZXQoW1xuICBcImNvbnRlbnQtdHlwZVwiLFxuICBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gIFwidXNlci1hZ2VudFwiLFxuICBcInJlZmVyZXJcIixcbiAgXCJob3N0XCIsXG4gIFwiYXV0aG9yaXphdGlvblwiLFxuICBcInByb3h5LWF1dGhvcml6YXRpb25cIixcbiAgXCJpZi1tb2RpZmllZC1zaW5jZVwiLFxuICBcImlmLXVubW9kaWZpZWQtc2luY2VcIixcbiAgXCJmcm9tXCIsXG4gIFwibG9jYXRpb25cIixcbiAgXCJtYXgtZm9yd2FyZHNcIlxuXSk7XG5jb25zdCBjb3JzU2FmZVJlc3BvbnNlSGVhZGVycyA9IG5ldyBTZXQoW1xuICBcImNhY2hlLWNvbnRyb2xcIixcbiAgXCJjb250ZW50LWxhbmd1YWdlXCIsXG4gIFwiY29udGVudC10eXBlXCIsXG4gIFwiZXhwaXJlc1wiLFxuICBcImxhc3QtbW9kaWZpZWRcIixcbiAgXCJwcmFnbWFcIlxuXSk7XG5cblxuY29uc3QgYWxsb3dlZFJlcXVlc3RNZXRob2RzID0gbmV3IFNldChbXCJPUFRJT05TXCIsIFwiR0VUXCIsIFwiSEVBRFwiLCBcIlBPU1RcIiwgXCJQVVRcIiwgXCJERUxFVEVcIl0pO1xuY29uc3QgZm9yYmlkZGVuUmVxdWVzdE1ldGhvZHMgPSBuZXcgU2V0KFtcIlRSQUNLXCIsIFwiVFJBQ0VcIiwgXCJDT05ORUNUXCJdKTtcblxuY29uc3QgWE1MSHR0cFJlcXVlc3RSZXNwb25zZVR5cGUgPSBuZXcgU2V0KFtcbiAgXCJcIixcbiAgXCJhcnJheWJ1ZmZlclwiLFxuICBcImJsb2JcIixcbiAgXCJkb2N1bWVudFwiLFxuICBcImpzb25cIixcbiAgXCJ0ZXh0XCJcbl0pO1xuXG5jb25zdCBzaW1wbGVIZWFkZXJzID0geGhyVXRpbHMuc2ltcGxlSGVhZGVycztcblxuY29uc3QgcmVkaXJlY3RTdGF0dXNlcyA9IG5ldyBTZXQoWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlWE1MSHR0cFJlcXVlc3Qod2luZG93KSB7XG4gIGNvbnN0IEV2ZW50ID0gd2luZG93LkV2ZW50O1xuICBjb25zdCBQcm9ncmVzc0V2ZW50ID0gd2luZG93LlByb2dyZXNzRXZlbnQ7XG4gIGNvbnN0IEZvcm1EYXRhID0gd2luZG93LkZvcm1EYXRhO1xuICBjb25zdCBYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0ID0gd2luZG93LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7XG4gIGNvbnN0IFhNTEh0dHBSZXF1ZXN0VXBsb2FkID0gd2luZG93LlhNTEh0dHBSZXF1ZXN0VXBsb2FkO1xuXG4gIGNsYXNzIFhNTEh0dHBSZXF1ZXN0IGV4dGVuZHMgWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFhNTEh0dHBSZXF1ZXN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGxvYWQgPSBuZXcgWE1MSHR0cFJlcXVlc3RVcGxvYWQoKTtcbiAgICAgIHRoaXMudXBsb2FkLl9vd25lckRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG4gICAgICB0aGlzW3hoclN5bWJvbHMuZmxhZ10gPSB7XG4gICAgICAgIHN5bmNocm9ub3VzOiBmYWxzZSxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICAgICAgbWltZVR5cGU6IG51bGwsXG4gICAgICAgIGF1dGg6IG51bGwsXG4gICAgICAgIG1ldGhvZDogdW5kZWZpbmVkLFxuICAgICAgICByZXNwb25zZVR5cGU6IFwiXCIsXG4gICAgICAgIHJlcXVlc3RIZWFkZXJzOiB7fSxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMuX293bmVyRG9jdW1lbnQuVVJMLFxuICAgICAgICB1cmk6IFwiXCIsXG4gICAgICAgIHRpbWVvdXQ6IDAsXG4gICAgICAgIGJvZHk6IHVuZGVmaW5lZCxcbiAgICAgICAgZm9ybURhdGE6IGZhbHNlLFxuICAgICAgICBwcmVmbGlnaHQ6IGZhbHNlLFxuICAgICAgICByZXF1ZXN0TWFuYWdlcjogdGhpcy5fb3duZXJEb2N1bWVudC5fcmVxdWVzdE1hbmFnZXIsXG4gICAgICAgIHBvb2w6IHRoaXMuX293bmVyRG9jdW1lbnQuX3Bvb2wsXG4gICAgICAgIGFnZW50T3B0aW9uczogdGhpcy5fb3duZXJEb2N1bWVudC5fYWdlbnRPcHRpb25zLFxuICAgICAgICBzdHJpY3RTU0w6IHRoaXMuX293bmVyRG9jdW1lbnQuX3N0cmljdFNTTCxcbiAgICAgICAgcHJveHk6IHRoaXMuX293bmVyRG9jdW1lbnQuX3Byb3h5LFxuICAgICAgICBjb29raWVKYXI6IHRoaXMuX293bmVyRG9jdW1lbnQuX2Nvb2tpZUphcixcbiAgICAgICAgZW5jb2Rpbmc6IHRoaXMuX293bmVyRG9jdW1lbnQuX2VuY29kaW5nLFxuICAgICAgICBvcmlnaW46IHRoaXMuX293bmVyRG9jdW1lbnQub3JpZ2luLFxuICAgICAgICB1c2VyQWdlbnQ6IHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3Lm5hdmlnYXRvci51c2VyQWdlbnRcbiAgICAgIH07XG5cbiAgICAgIHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXSA9IHtcbiAgICAgICAgYmVmb3JlU2VuZDogZmFsc2UsXG4gICAgICAgIHNlbmQ6IGZhbHNlLFxuICAgICAgICB0aW1lb3V0U3RhcnQ6IDAsXG4gICAgICAgIHRpbWVvdXRJZDogMCxcbiAgICAgICAgdGltZW91dEZuOiBudWxsLFxuICAgICAgICBjbGllbnQ6IG51bGwsXG4gICAgICAgIHJlc3BvbnNlSGVhZGVyczoge30sXG4gICAgICAgIGZpbHRlcmVkUmVzcG9uc2VIZWFkZXJzOiBbXSxcbiAgICAgICAgcmVzcG9uc2VCdWZmZXI6IG51bGwsXG4gICAgICAgIHJlc3BvbnNlQ2FjaGU6IG51bGwsXG4gICAgICAgIHJlc3BvbnNlVGV4dENhY2hlOiBudWxsLFxuICAgICAgICByZXNwb25zZVhNTENhY2hlOiBudWxsLFxuICAgICAgICByZXNwb25zZVVSTDogXCJcIixcbiAgICAgICAgcmVhZHlTdGF0ZTogWE1MSHR0cFJlcXVlc3QuVU5TRU5ULFxuICAgICAgICBzdGF0dXM6IDAsXG4gICAgICAgIHN0YXR1c1RleHQ6IFwiXCIsXG4gICAgICAgIGVycm9yOiBcIlwiLFxuICAgICAgICB1cGxvYWRDb21wbGV0ZTogdHJ1ZSxcbiAgICAgICAgYWJvcnRFcnJvcjogZmFsc2UsXG4gICAgICAgIGNvb2tpZUphcjogdGhpcy5fb3duZXJEb2N1bWVudC5fY29va2llSmFyLFxuICAgICAgICBidWZmZXJTdGVwU2l6ZTogMSAqIDEwMjQgKiAxMDI0LCAvLyBwcmUtYWxsb2NhdGUgYnVmZmVyIGluY3JlYXNlIHN0ZXAgc2l6ZS4gaW5pdCB2YWx1ZSBpcyAxTUJcbiAgICAgICAgdG90YWxSZWNlaXZlZENodW5rU2l6ZTogMFxuICAgICAgfTtcbiAgICAgIHRoaXMub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICB9XG4gICAgZ2V0IHJlYWR5U3RhdGUoKSB7XG4gICAgICByZXR1cm4gdGhpc1t4aHJTeW1ib2xzLnByb3BlcnRpZXNdLnJlYWR5U3RhdGU7XG4gICAgfVxuICAgIGdldCBzdGF0dXMoKSB7XG4gICAgICByZXR1cm4gdGhpc1t4aHJTeW1ib2xzLnByb3BlcnRpZXNdLnN0YXR1cztcbiAgICB9XG4gICAgZ2V0IHN0YXR1c1RleHQoKSB7XG4gICAgICByZXR1cm4gdGhpc1t4aHJTeW1ib2xzLnByb3BlcnRpZXNdLnN0YXR1c1RleHQ7XG4gICAgfVxuICAgIGdldCByZXNwb25zZVR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpc1t4aHJTeW1ib2xzLmZsYWddLnJlc3BvbnNlVHlwZTtcbiAgICB9XG4gICAgc2V0IHJlc3BvbnNlVHlwZShyZXNwb25zZVR5cGUpIHtcbiAgICAgIGNvbnN0IGZsYWcgPSB0aGlzW3hoclN5bWJvbHMuZmxhZ107XG4gICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5MT0FESU5HIHx8IHRoaXMucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5PUEVORUQgJiYgZmxhZy5zeW5jaHJvbm91cykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX0FDQ0VTU19FUlIpO1xuICAgICAgfVxuICAgICAgaWYgKCFYTUxIdHRwUmVxdWVzdFJlc3BvbnNlVHlwZS5oYXMocmVzcG9uc2VUeXBlKSkge1xuICAgICAgICByZXNwb25zZVR5cGUgPSBcIlwiO1xuICAgICAgfVxuICAgICAgZmxhZy5yZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGU7XG4gICAgfVxuICAgIGdldCByZXNwb25zZSgpIHtcbiAgICAgIGNvbnN0IGZsYWcgPSB0aGlzW3hoclN5bWJvbHMuZmxhZ107XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpc1t4aHJTeW1ib2xzLnByb3BlcnRpZXNdO1xuICAgICAgaWYgKHByb3BlcnRpZXMucmVzcG9uc2VDYWNoZSkge1xuICAgICAgICByZXR1cm4gcHJvcGVydGllcy5yZXNwb25zZUNhY2hlO1xuICAgICAgfVxuICAgICAgbGV0IHJlcyA9IFwiXCI7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlQnVmZmVyID0gIXByb3BlcnRpZXMucmVzcG9uc2VCdWZmZXIgPyBudWxsIDpcbiAgICAgICAgICAgIHByb3BlcnRpZXMucmVzcG9uc2VCdWZmZXIuc2xpY2UoMCwgcHJvcGVydGllcy50b3RhbFJlY2VpdmVkQ2h1bmtTaXplKTtcblxuICAgICAgc3dpdGNoICh0aGlzLnJlc3BvbnNlVHlwZSkge1xuICAgICAgICBjYXNlIFwiXCI6XG4gICAgICAgIGNhc2UgXCJ0ZXh0XCI6IHtcbiAgICAgICAgICByZXMgPSB0aGlzLnJlc3BvbnNlVGV4dDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYXJyYXlidWZmZXJcIjoge1xuICAgICAgICAgIGlmICghcmVzcG9uc2VCdWZmZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXMgPSAobmV3IFVpbnQ4QXJyYXkocmVzcG9uc2VCdWZmZXIpKS5idWZmZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImJsb2JcIjoge1xuICAgICAgICAgIGlmICghcmVzcG9uc2VCdWZmZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IGdldENvbnRlbnRUeXBlKHRoaXMpO1xuICAgICAgICAgIHJlcyA9IEJsb2IuY3JlYXRlKFtbbmV3IFVpbnQ4QXJyYXkocmVzcG9uc2VCdWZmZXIpXSwge1xuICAgICAgICAgICAgdHlwZTogY29udGVudFR5cGUgJiYgY29udGVudFR5cGUudG9TdHJpbmcoKSB8fCBcIlwiXG4gICAgICAgICAgfV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJkb2N1bWVudFwiOiB7XG4gICAgICAgICAgcmVzID0gdGhpcy5yZXNwb25zZVhNTDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwianNvblwiOiB7XG4gICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSB8fCAhcmVzcG9uc2VCdWZmZXIpIHtcbiAgICAgICAgICAgIHJlcyA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBnZXRDb250ZW50VHlwZSh0aGlzKTtcbiAgICAgICAgICBjb25zdCBmYWxsYmFja0VuY29kaW5nID0gd2hhdHdnRW5jb2RpbmcubGFiZWxUb05hbWUoXG4gICAgICAgICAgICBjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5nZXQoXCJjaGFyc2V0XCIpIHx8IGZsYWcuZW5jb2RpbmcpO1xuICAgICAgICAgIGNvbnN0IGpzb25TdHIgPSB3aGF0d2dFbmNvZGluZy5kZWNvZGUocmVzcG9uc2VCdWZmZXIsIGZhbGxiYWNrRW5jb2RpbmcpO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlcyA9IEpTT04ucGFyc2UoanNvblN0cik7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVzID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHByb3BlcnRpZXMucmVzcG9uc2VDYWNoZSA9IHJlcztcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGdldCByZXNwb25zZVRleHQoKSB7XG4gICAgICBjb25zdCBmbGFnID0gdGhpc1t4aHJTeW1ib2xzLmZsYWddO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNlVHlwZSAhPT0gXCJcIiAmJiB0aGlzLnJlc3BvbnNlVHlwZSAhPT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPT0gWE1MSHR0cFJlcXVlc3QuTE9BRElORyAmJiB0aGlzLnJlYWR5U3RhdGUgIT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgICBpZiAocHJvcGVydGllcy5yZXNwb25zZVRleHRDYWNoZSkge1xuICAgICAgICByZXR1cm4gcHJvcGVydGllcy5yZXNwb25zZVRleHRDYWNoZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlQnVmZmVyID0gIXByb3BlcnRpZXMucmVzcG9uc2VCdWZmZXIgPyBudWxsIDpcbiAgICAgICAgICAgIHByb3BlcnRpZXMucmVzcG9uc2VCdWZmZXIuc2xpY2UoMCwgcHJvcGVydGllcy50b3RhbFJlY2VpdmVkQ2h1bmtTaXplKTtcblxuICAgICAgaWYgKCFyZXNwb25zZUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBnZXRDb250ZW50VHlwZSh0aGlzKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrRW5jb2RpbmcgPSB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZShjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5nZXQoXCJjaGFyc2V0XCIpIHx8IGZsYWcuZW5jb2RpbmcpO1xuICAgICAgY29uc3QgcmVzID0gd2hhdHdnRW5jb2RpbmcuZGVjb2RlKHJlc3BvbnNlQnVmZmVyLCBmYWxsYmFja0VuY29kaW5nKTtcblxuICAgICAgcHJvcGVydGllcy5yZXNwb25zZVRleHRDYWNoZSA9IHJlcztcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGdldCByZXNwb25zZVhNTCgpIHtcbiAgICAgIGNvbnN0IGZsYWcgPSB0aGlzW3hoclN5bWJvbHMuZmxhZ107XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpc1t4aHJTeW1ib2xzLnByb3BlcnRpZXNdO1xuICAgICAgaWYgKHRoaXMucmVzcG9uc2VUeXBlICE9PSBcIlwiICYmIHRoaXMucmVzcG9uc2VUeXBlICE9PSBcImRvY3VtZW50XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wZXJ0aWVzLnJlc3BvbnNlWE1MQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMucmVzcG9uc2VYTUxDYWNoZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlQnVmZmVyID0gIXByb3BlcnRpZXMucmVzcG9uc2VCdWZmZXIgPyBudWxsIDpcbiAgICAgICAgICAgIHByb3BlcnRpZXMucmVzcG9uc2VCdWZmZXIuc2xpY2UoMCwgcHJvcGVydGllcy50b3RhbFJlY2VpdmVkQ2h1bmtTaXplKTtcblxuICAgICAgaWYgKCFyZXNwb25zZUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gZ2V0Q29udGVudFR5cGUodGhpcyk7XG4gICAgICBsZXQgaXNIVE1MID0gZmFsc2U7XG4gICAgICBsZXQgaXNYTUwgPSBmYWxzZTtcbiAgICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICBpc0hUTUwgPSBjb250ZW50VHlwZS5pc0hUTUwoKTtcbiAgICAgICAgaXNYTUwgPSBjb250ZW50VHlwZS5pc1hNTCgpO1xuICAgICAgICBpZiAoIWlzWE1MICYmICFpc0hUTUwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBlbmNvZGluZyA9IHdoYXR3Z0VuY29kaW5nLmdldEJPTUVuY29kaW5nKHJlc3BvbnNlQnVmZmVyKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZShjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5nZXQoXCJjaGFyc2V0XCIpIHx8IGZsYWcuZW5jb2RpbmcpO1xuICAgICAgY29uc3QgcmVzVGV4dCA9IHdoYXR3Z0VuY29kaW5nLmRlY29kZShyZXNwb25zZUJ1ZmZlciwgZW5jb2RpbmcpO1xuXG4gICAgICBpZiAoIXJlc1RleHQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZXNwb25zZVR5cGUgPT09IFwiXCIgJiYgaXNIVE1MKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzID0gRG9jdW1lbnQuY3JlYXRlKFtdLCB7IGNvcmU6IHdpbmRvdy5fY29yZSwgb3B0aW9uczoge1xuICAgICAgICB1cmw6IGZsYWcudXJpLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IG5ldyBEYXRlKGdldFJlc3BvbnNlSGVhZGVyKHRoaXMsIFwibGFzdC1tb2RpZmllZFwiKSksXG4gICAgICAgIHBhcnNpbmdNb2RlOiBpc0hUTUwgPyBcImh0bWxcIiA6IFwieG1sXCIsXG4gICAgICAgIGNvb2tpZUphcjogeyBzZXRDb29raWVTeW5jOiAoKSA9PiB1bmRlZmluZWQsIGdldENvb2tpZVN0cmluZ1N5bmM6ICgpID0+IFwiXCIgfSxcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICAgIHBhcnNlT3B0aW9uczogdGhpcy5fb3duZXJEb2N1bWVudC5fcGFyc2VPcHRpb25zXG4gICAgICB9IH0pO1xuICAgICAgY29uc3QgcmVzSW1wbCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHJlcyk7XG4gICAgICB0cnkge1xuICAgICAgICByZXNJbXBsLl9odG1sVG9Eb20uYXBwZW5kSHRtbFRvRG9jdW1lbnQocmVzVGV4dCwgcmVzSW1wbCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHByb3BlcnRpZXMucmVzcG9uc2VYTUxDYWNoZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmVzLmNsb3NlKCk7XG4gICAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlWE1MQ2FjaGUgPSByZXM7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGdldCByZXNwb25zZVVSTCgpIHtcbiAgICAgIHJldHVybiB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc10ucmVzcG9uc2VVUkw7XG4gICAgfVxuXG4gICAgZ2V0IHRpbWVvdXQoKSB7XG4gICAgICByZXR1cm4gdGhpc1t4aHJTeW1ib2xzLmZsYWddLnRpbWVvdXQ7XG4gICAgfVxuICAgIHNldCB0aW1lb3V0KHZhbCkge1xuICAgICAgY29uc3QgZmxhZyA9IHRoaXNbeGhyU3ltYm9scy5mbGFnXTtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc107XG4gICAgICBpZiAoZmxhZy5zeW5jaHJvbm91cykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX0FDQ0VTU19FUlIpO1xuICAgICAgfVxuICAgICAgZmxhZy50aW1lb3V0ID0gdmFsO1xuICAgICAgY2xlYXJUaW1lb3V0KHByb3BlcnRpZXMudGltZW91dElkKTtcbiAgICAgIGlmICh2YWwgPiAwICYmIHByb3BlcnRpZXMudGltZW91dEZuKSB7XG4gICAgICAgIHByb3BlcnRpZXMudGltZW91dElkID0gc2V0VGltZW91dChcbiAgICAgICAgICBwcm9wZXJ0aWVzLnRpbWVvdXRGbixcbiAgICAgICAgICBNYXRoLm1heCgwLCB2YWwgLSAoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHByb3BlcnRpZXMudGltZW91dFN0YXJ0KSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BlcnRpZXMudGltZW91dEZuID0gbnVsbDtcbiAgICAgICAgcHJvcGVydGllcy50aW1lb3V0U3RhcnQgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBnZXQgd2l0aENyZWRlbnRpYWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXNbeGhyU3ltYm9scy5mbGFnXS53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuICAgIHNldCB3aXRoQ3JlZGVudGlhbHModmFsKSB7XG4gICAgICBjb25zdCBmbGFnID0gdGhpc1t4aHJTeW1ib2xzLmZsYWddO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcbiAgICAgIGlmICghKHRoaXMucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuVU5TRU5UIHx8IHRoaXMucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuT1BFTkVEKSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgICB9XG4gICAgICBpZiAocHJvcGVydGllcy5zZW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtcbiAgICAgIH1cbiAgICAgIGZsYWcud2l0aENyZWRlbnRpYWxzID0gdmFsO1xuICAgIH1cblxuICAgIGFib3J0KCkge1xuICAgICAgY29uc3QgZmxhZyA9IHRoaXNbeGhyU3ltYm9scy5mbGFnXTtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc107XG5cbiAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgcmVxdWVzdFxuICAgICAgY2xlYXJUaW1lb3V0KHByb3BlcnRpZXMudGltZW91dElkKTtcbiAgICAgIHByb3BlcnRpZXMudGltZW91dEZuID0gbnVsbDtcbiAgICAgIHByb3BlcnRpZXMudGltZW91dFN0YXJ0ID0gMDtcblxuICAgICAgY29uc3QgY2xpZW50ID0gcHJvcGVydGllcy5jbGllbnQ7XG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIGNsaWVudC5hYm9ydCgpO1xuICAgICAgICBwcm9wZXJ0aWVzLmNsaWVudCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICgodGhpcy5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5PUEVORUQgJiYgcHJvcGVydGllcy5zZW5kKSB8fFxuICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuSEVBREVSU19SRUNFSVZFRCB8fFxuICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuTE9BRElORykge1xuICAgICAgICAvLyBSdW4gdGhlIHJlcXVlc3QgZXJyb3Igc3RlcHMgZm9yIGV2ZW50IGFib3J0XG4gICAgICAgIHByb3BlcnRpZXMucmVhZHlTdGF0ZSA9IFhNTEh0dHBSZXF1ZXN0LkRPTkU7XG4gICAgICAgIHByb3BlcnRpZXMuc2VuZCA9IGZhbHNlO1xuXG4gICAgICAgIHByb3BlcnRpZXMuc3RhdHVzID0gMDtcbiAgICAgICAgcHJvcGVydGllcy5zdGF0dXNUZXh0ID0gXCJcIjtcbiAgICAgICAgcHJvcGVydGllcy5yZXNwb25zZUNhY2hlID0gcHJvcGVydGllcy5yZXNwb25zZVRleHRDYWNoZSA9IHByb3BlcnRpZXMucmVzcG9uc2VYTUxDYWNoZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGZsYWcuc3luY2hyb25vdXMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5BQk9SVF9FUlIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInJlYWR5c3RhdGVjaGFuZ2VcIikpO1xuXG4gICAgICAgIC8vIFRPRE86IHNwZWMgc2F5cyB0aGlzIHNob3VsZCBvbmx5IGJlIGNoZWNraW5nIHVwbG9hZCBjb21wbGV0ZSBmbGFnP1xuICAgICAgICBpZiAoIShmbGFnLm1ldGhvZCA9PT0gXCJIRUFEXCIgfHwgZmxhZy5tZXRob2QgPT09IFwiR0VUXCIpKSB7XG4gICAgICAgICAgcHJvcGVydGllcy51cGxvYWRDb21wbGV0ZSA9IHRydWU7XG5cbiAgICAgICAgICAvLyBUT0RPIHVwbG9hZCBsaXN0ZW5lclxuXG4gICAgICAgICAgdGhpcy51cGxvYWQuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImFib3J0XCIpKTtcbiAgICAgICAgICBpZiAocHJvcGVydGllcy5hYm9ydEVycm9yKSB7XG4gICAgICAgICAgICAvLyBUT0RPIGRvY3VtZW50IHdoYXQgdGhpcyBpcyBhYm91dCAoaGVyZSBhbmQgYmVsb3cpXG4gICAgICAgICAgICB0aGlzLnVwbG9hZC5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwiZXJyb3JcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwbG9hZC5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwibG9hZGVuZFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJhYm9ydFwiKSk7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmFib3J0RXJyb3IpIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJlcnJvclwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwibG9hZGVuZFwiKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgcHJvcGVydGllcy5yZWFkeVN0YXRlID0gWE1MSHR0cFJlcXVlc3QuVU5TRU5UO1xuXG4gICAgICAgIHByb3BlcnRpZXMuc3RhdHVzID0gMDtcbiAgICAgICAgcHJvcGVydGllcy5zdGF0dXNUZXh0ID0gXCJcIjtcbiAgICAgICAgcHJvcGVydGllcy5yZXNwb25zZUNhY2hlID0gcHJvcGVydGllcy5yZXNwb25zZVRleHRDYWNoZSA9IHByb3BlcnRpZXMucmVzcG9uc2VYTUxDYWNoZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGdldEFsbFJlc3BvbnNlSGVhZGVycygpIHtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc107XG4gICAgICBjb25zdCByZWFkeVN0YXRlID0gdGhpcy5yZWFkeVN0YXRlO1xuICAgICAgaWYgKHJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LlVOU0VOVCB8fCByZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5PUEVORUQpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcGVydGllcy5yZXNwb25zZUhlYWRlcnMpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+IHByb3BlcnRpZXMuZmlsdGVyZWRSZXNwb25zZUhlYWRlcnMuaW5kZXhPZihrZXkpID09PSAtMSlcbiAgICAgICAgLm1hcChrZXkgPT4gW2tleSwgcHJvcGVydGllcy5yZXNwb25zZUhlYWRlcnNba2V5XV0uam9pbihcIjogXCIpKS5qb2luKFwiXFxyXFxuXCIpO1xuICAgIH1cblxuICAgIGdldFJlc3BvbnNlSGVhZGVyKGhlYWRlcikge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcbiAgICAgIGNvbnN0IHJlYWR5U3RhdGUgPSB0aGlzLnJlYWR5U3RhdGU7XG4gICAgICBpZiAocmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuVU5TRU5UIHx8IHJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0Lk9QRU5FRCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxjSGVhZGVyID0gdG9CeXRlU3RyaW5nKGhlYWRlcikudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChwcm9wZXJ0aWVzLmZpbHRlcmVkUmVzcG9uc2VIZWFkZXJzLmZpbmQoZmlsdGVyZWQgPT4gbGNIZWFkZXIgPT09IGZpbHRlcmVkLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldFJlc3BvbnNlSGVhZGVyKHRoaXMsIGxjSGVhZGVyKTtcbiAgICB9XG5cbiAgICBvcGVuKG1ldGhvZCwgdXJpLCBhc3luY2hyb25vdXMsIHVzZXIsIHBhc3N3b3JkKSB7XG4gICAgICBpZiAoIXRoaXMuX293bmVyRG9jdW1lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgICAgfVxuICAgICAgY29uc3QgZmxhZyA9IHRoaXNbeGhyU3ltYm9scy5mbGFnXTtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc107XG4gICAgICBjb25zdCBhcmd1bWVudENvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChhcmd1bWVudENvdW50IDwgMikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm90IGVub3VnaCBhcmd1bWVudHMgKGV4cGVjdGVkIGF0IGxlYXN0IDIpXCIpO1xuICAgICAgfVxuICAgICAgbWV0aG9kID0gdG9CeXRlU3RyaW5nKG1ldGhvZCk7XG4gICAgICBpZiAoIXRva2VuUmVnZXhwLnRlc3QobWV0aG9kKSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwcGVyQ2FzZU1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgaWYgKGZvcmJpZGRlblJlcXVlc3RNZXRob2RzLmhhcyh1cHBlckNhc2VNZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNFQ1VSSVRZX0VSUik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsaWVudCA9IHByb3BlcnRpZXMuY2xpZW50O1xuICAgICAgaWYgKGNsaWVudCAmJiB0eXBlb2YgY2xpZW50LmFib3J0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2xpZW50LmFib3J0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGxvd2VkUmVxdWVzdE1ldGhvZHMuaGFzKHVwcGVyQ2FzZU1ldGhvZCkpIHtcbiAgICAgICAgbWV0aG9kID0gdXBwZXJDYXNlTWV0aG9kO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBhc3luY2hyb25vdXMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgZmxhZy5zeW5jaHJvbm91cyA9ICFhc3luY2hyb25vdXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbGFnLnN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZmxhZy5yZXNwb25zZVR5cGUgJiYgZmxhZy5zeW5jaHJvbm91cykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX0FDQ0VTU19FUlIpO1xuICAgICAgfVxuICAgICAgaWYgKGZsYWcuc3luY2hyb25vdXMgJiYgZmxhZy50aW1lb3V0KSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfQUNDRVNTX0VSUik7XG4gICAgICB9XG4gICAgICBmbGFnLm1ldGhvZCA9IG1ldGhvZDtcblxuICAgICAgbGV0IHVybE9iajtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKHVyaSwgZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZCh0aGlzLl9vd25lckRvY3VtZW50KSlcbiAgICAgICAgdXJsT2JqID0gbmV3IFVSTCh1cmksIGRvY3VtZW50QmFzZVVSTFNlcmlhbGl6ZWQodGhpcy5fb3duZXJEb2N1bWVudCkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHVzZXIgfHwgKHBhc3N3b3JkICYmICF1cmxPYmoudXNlcm5hbWUpKSB7XG4gICAgICAgIGZsYWcuYXV0aCA9IHtcbiAgICAgICAgICB1c2VyLFxuICAgICAgICAgIHBhc3M6IHBhc3N3b3JkXG4gICAgICAgIH07XG4gICAgICAgIHVybE9iai51c2VybmFtZSA9IFwiXCI7XG4gICAgICAgIHVybE9iai5wYXNzd29yZCA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIGZsYWcudXJpID0gdXJsT2JqLmhyZWY7XG4gICAgICBmbGFnLnJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgICBmbGFnLnByZWZsaWdodCA9IGZhbHNlO1xuXG4gICAgICBwcm9wZXJ0aWVzLnNlbmQgPSBmYWxzZTtcbiAgICAgIHByb3BlcnRpZXMucmVxdWVzdEJ1ZmZlciA9IG51bGw7XG4gICAgICBwcm9wZXJ0aWVzLnJlcXVlc3RDYWNoZSA9IG51bGw7XG4gICAgICBwcm9wZXJ0aWVzLmFib3J0RXJyb3IgPSBmYWxzZTtcbiAgICAgIHByb3BlcnRpZXMucmVzcG9uc2VVUkwgPSBcIlwiO1xuICAgICAgcmVhZHlTdGF0ZUNoYW5nZSh0aGlzLCBYTUxIdHRwUmVxdWVzdC5PUEVORUQpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlTWltZVR5cGUobWltZSkge1xuICAgICAgY29uc3QgcmVhZHlTdGF0ZSA9IHRoaXMucmVhZHlTdGF0ZTtcbiAgICAgIGlmIChyZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5MT0FESU5HIHx8IHJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgICAgfVxuICAgICAgaWYgKCFtaW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIpO1xuICAgICAgfVxuICAgICAgbWltZSA9IFN0cmluZyhtaW1lKTtcbiAgICAgIGlmICghcGFyc2VDb250ZW50VHlwZShtaW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSKTtcbiAgICAgIH1cbiAgICAgIHRoaXNbeGhyU3ltYm9scy5mbGFnXS5taW1lVHlwZSA9IG1pbWU7XG4gICAgfVxuXG4gICAgc2VuZChib2R5KSB7XG4gICAgICBpZiAoIXRoaXMuX293bmVyRG9jdW1lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgICAgfVxuICAgICAgY29uc3QgZmxhZyA9IHRoaXNbeGhyU3ltYm9scy5mbGFnXTtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc107XG5cbiAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgIT09IFhNTEh0dHBSZXF1ZXN0Lk9QRU5FRCB8fCBwcm9wZXJ0aWVzLnNlbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgICAgfVxuXG4gICAgICBwcm9wZXJ0aWVzLmJlZm9yZVNlbmQgPSB0cnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWZsYWcuYm9keSAmJlxuICAgICAgICAgICAgYm9keSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBib2R5ICE9PSBudWxsICYmXG4gICAgICAgICAgICBib2R5ICE9PSBcIlwiICYmXG4gICAgICAgICAgICAhKGZsYWcubWV0aG9kID09PSBcIkhFQURcIiB8fCBmbGFnLm1ldGhvZCA9PT0gXCJHRVRcIikpIHtcbiAgICAgICAgICBsZXQgY29udGVudFR5cGUgPSBudWxsO1xuICAgICAgICAgIGxldCBlbmNvZGluZyA9IG51bGw7XG4gICAgICAgICAgaWYgKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgICAgZmxhZy5mb3JtRGF0YSA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihib2R5KS5fZW50cmllcykge1xuICAgICAgICAgICAgICBsZXQgdmFsO1xuICAgICAgICAgICAgICBpZiAoQmxvYi5pc0ltcGwoZW50cnkudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgICAgIHZhbCA9IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogYmxvYi5fYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogYmxvYi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogYmxvYi50eXBlLFxuICAgICAgICAgICAgICAgICAgICBrbm93bkxlbmd0aDogYmxvYi5zaXplXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBlbnRyeTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbGFnLmJvZHkgPSBmb3JtRGF0YTtcbiAgICAgICAgICAgIC8vIFRPRE8gY29udGVudCB0eXBlOyB3aGF0IGlzIHRoZSBmb3JtIGJvdW5kYXJ5P1xuICAgICAgICAgIH0gZWxzZSBpZiAoQmxvYi5pcyhib2R5KSkge1xuICAgICAgICAgICAgY29uc3QgYmxvYiA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKGJvZHkpO1xuICAgICAgICAgICAgZmxhZy5ib2R5ID0gYmxvYi5fYnVmZmVyO1xuICAgICAgICAgICAgaWYgKGJsb2IudHlwZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IGJsb2IudHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgZmxhZy5ib2R5ID0gbmV3IEJ1ZmZlcihuZXcgVWludDhBcnJheShib2R5KSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChib2R5IGluc3RhbmNlb2YgRG9jdW1lbnQuaW50ZXJmYWNlKSB7XG4gICAgICAgICAgICBpZiAoYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbGFnLmJvZHkgPSBkb21Ub0h0bWwoW2JvZHldKTtcblxuICAgICAgICAgICAgZW5jb2RpbmcgPSBcIlVURi04XCI7XG5cbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50Qm9keVBhcnNpbmdNb2RlID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIoYm9keSkuX3BhcnNpbmdNb2RlO1xuICAgICAgICAgICAgY29udGVudFR5cGUgPSBkb2N1bWVudEJvZHlQYXJzaW5nTW9kZSA9PT0gXCJodG1sXCIgPyBcInRleHQvaHRtbFwiIDogXCJhcHBsaWNhdGlvbi94bWxcIjtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlICs9IFwiO2NoYXJzZXQ9VVRGLThcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBmbGFnLmJvZHkgPSBTdHJpbmcoYm9keSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsYWcuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICBjb250ZW50VHlwZSA9IFwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04XCI7XG4gICAgICAgICAgICBlbmNvZGluZyA9IFwiVVRGLThcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBleGlzdGluZ0NvbnRlbnRUeXBlID0geGhyVXRpbHMuZ2V0UmVxdWVzdEhlYWRlcihmbGFnLnJlcXVlc3RIZWFkZXJzLCBcImNvbnRlbnQtdHlwZVwiKTtcbiAgICAgICAgICBpZiAoY29udGVudFR5cGUgIT09IG51bGwgJiYgZXhpc3RpbmdDb250ZW50VHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZmxhZy5yZXF1ZXN0SGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IGNvbnRlbnRUeXBlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdDb250ZW50VHlwZSAhPT0gbnVsbCAmJiBlbmNvZGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDb250ZW50VHlwZShleGlzdGluZ0NvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgcGFyc2VkLnBhcmFtZXRlckxpc3RcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHYgPT4gdi5rZXkgJiYgdi5rZXkudG9Mb3dlckNhc2UoKSA9PT0gXCJjaGFyc2V0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKHYudmFsdWUpICE9PSBcIlVURi04XCIpXG4gICAgICAgICAgICAgICAgLmZvckVhY2godiA9PiB7XG4gICAgICAgICAgICAgICAgICB2LnZhbHVlID0gXCJVVEYtOFwiO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB4aHJVdGlscy51cGRhdGVSZXF1ZXN0SGVhZGVyKGZsYWcucmVxdWVzdEhlYWRlcnMsIFwiY29udGVudC10eXBlXCIsIHBhcnNlZC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmJlZm9yZVNlbmQpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLmJlZm9yZVNlbmQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZsYWcuc3luY2hyb25vdXMpIHtcbiAgICAgICAgY29uc3QgZmxhZ1N0ciA9IEpTT04uc3RyaW5naWZ5KGZsYWcsIGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgICAgICAgaWYgKHRoaXMgPT09IGZsYWcgJiYgayA9PT0gXCJyZXF1ZXN0TWFuYWdlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMgPT09IGZsYWcgJiYgayA9PT0gXCJwb29sXCIgJiYgdikge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWF4U29ja2V0czogdi5tYXhTb2NrZXRzIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzID0gc3Bhd25TeW5jKFxuICAgICAgICAgIHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICAgICAgW3N5bmNXb3JrZXJGaWxlXSxcbiAgICAgICAgICB7IGlucHV0OiBmbGFnU3RyIH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHJlcy5zdGF0dXMgIT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLnN0ZGVyci50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzLmVycm9yKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMuZXJyb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlcy5lcnJvciA9IG5ldyBFcnJvcihyZXMuZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyByZXMuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy5zdGRvdXQudG9TdHJpbmcoKSwgKGssIHYpID0+IHtcbiAgICAgICAgICBpZiAoayA9PT0gXCJyZXNwb25zZUJ1ZmZlclwiICYmIHYgJiYgdi5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcih2LmRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoayA9PT0gXCJjb29raWVKYXJcIiAmJiB2KSB7XG4gICAgICAgICAgICByZXR1cm4gdG91Z2guQ29va2llSmFyLmRlc2VyaWFsaXplU3luYyh2LCB0aGlzLl9vd25lckRvY3VtZW50Ll9jb29raWVKYXIuc3RvcmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3BvbnNlLnByb3BlcnRpZXMucmVhZHlTdGF0ZSA9IFhNTEh0dHBSZXF1ZXN0LkxPQURJTkc7XG4gICAgICAgIHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXSA9IHJlc3BvbnNlLnByb3BlcnRpZXM7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnByb3BlcnRpZXMuZXJyb3IpIHtcbiAgICAgICAgICBkaXNwYXRjaEVycm9yKHRoaXMpO1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5FVFdPUktfRVJSLCByZXNwb25zZS5wcm9wZXJ0aWVzLmVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZUJ1ZmZlciA9IHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXS5yZXNwb25zZUJ1ZmZlcjtcbiAgICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gZ2V0UmVzcG9uc2VIZWFkZXIodGhpcywgXCJjb250ZW50LWxlbmd0aFwiKSB8fCBcIjBcIjtcbiAgICAgICAgICBjb25zdCBidWZmZXJMZW5ndGggPSBwYXJzZUludChjb250ZW50TGVuZ3RoKSB8fCByZXNwb25zZUJ1ZmZlci5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3NPYmogPSB7IGxlbmd0aENvbXB1dGFibGU6IGZhbHNlIH07XG4gICAgICAgICAgaWYgKGJ1ZmZlckxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgcHJvZ3Jlc3NPYmoudG90YWwgPSBidWZmZXJMZW5ndGg7XG4gICAgICAgICAgICBwcm9ncmVzc09iai5sb2FkZWQgPSBidWZmZXJMZW5ndGg7XG4gICAgICAgICAgICBwcm9ncmVzc09iai5sZW5ndGhDb21wdXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwicHJvZ3Jlc3NcIiwgcHJvZ3Jlc3NPYmopKTtcbiAgICAgICAgICByZWFkeVN0YXRlQ2hhbmdlKHRoaXMsIFhNTEh0dHBSZXF1ZXN0LkRPTkUpO1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImxvYWRcIiwgcHJvZ3Jlc3NPYmopKTtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIsIHByb2dyZXNzT2JqKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BlcnRpZXMuc2VuZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwibG9hZHN0YXJ0XCIpKTtcblxuICAgICAgICBjb25zdCBjbGllbnQgPSB4aHJVdGlscy5jcmVhdGVDbGllbnQodGhpcyk7XG5cbiAgICAgICAgcHJvcGVydGllcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgICAgIC8vIEZvciBuZXcgY2xpZW50LCByZXNldCB0b3RhbFJlY2VpdmVkQ2h1bmtTaXplIGFuZCBidWZmZXJTdGVwU2l6ZVxuICAgICAgICBwcm9wZXJ0aWVzLnRvdGFsUmVjZWl2ZWRDaHVua1NpemUgPSAwO1xuICAgICAgICBwcm9wZXJ0aWVzLmJ1ZmZlclN0ZXBTaXplID0gMSAqIDEwMjQgKiAxMDI0O1xuXG4gICAgICAgIHByb3BlcnRpZXMub3JpZ2luID0gZmxhZy5vcmlnaW47XG5cbiAgICAgICAgY2xpZW50Lm9uKFwiZXJyb3JcIiwgZXJyID0+IHtcbiAgICAgICAgICBjbGllbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgcHJvcGVydGllcy5lcnJvciA9IGVycjtcbiAgICAgICAgICBkaXNwYXRjaEVycm9yKHRoaXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjbGllbnQub24oXCJyZXNwb25zZVwiLCByZXMgPT4gcmVjZWl2ZVJlc3BvbnNlKHRoaXMsIHJlcykpO1xuXG4gICAgICAgIGNsaWVudC5vbihcInJlZGlyZWN0XCIsICgpID0+IHtcbiAgICAgICAgICBpZiAoZmxhZy5wcmVmbGlnaHQpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuZXJyb3IgPSBcIlJlZGlyZWN0IGFmdGVyIHByZWZsaWdodCBmb3JiaWRkZW5cIjtcbiAgICAgICAgICAgIGRpc3BhdGNoRXJyb3IodGhpcyk7XG4gICAgICAgICAgICBjbGllbnQuYWJvcnQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGNsaWVudC5yZXNwb25zZTtcbiAgICAgICAgICBjb25zdCBkZXN0VXJsT2JqID0gbmV3IFVSTChyZXNwb25zZS5yZXF1ZXN0LmhlYWRlcnMuUmVmZXJlcik7XG5cbiAgICAgICAgICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHJlc3BvbnNlLnJlcXVlc3QudXJpLmhyZWYpO1xuXG4gICAgICAgICAgaWYgKGRlc3RVcmxPYmoub3JpZ2luICE9PSB1cmxPYmoub3JpZ2luICYmIGRlc3RVcmxPYmoub3JpZ2luICE9PSBmbGFnLm9yaWdpbikge1xuICAgICAgICAgICAgcHJvcGVydGllcy5vcmlnaW4gPSBcIm51bGxcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNwb25zZS5yZXF1ZXN0LmhlYWRlcnMuT3JpZ2luID0gcHJvcGVydGllcy5vcmlnaW47XG5cbiAgICAgICAgICBpZiAoZmxhZy5vcmlnaW4gIT09IGRlc3RVcmxPYmoub3JpZ2luICYmXG4gICAgICAgICAgICAgIGRlc3RVcmxPYmoucHJvdG9jb2wgIT09IFwiZGF0YTpcIikge1xuICAgICAgICAgICAgaWYgKCF2YWxpZENPUlNIZWFkZXJzKHRoaXMsIHJlc3BvbnNlLCBmbGFnLCBwcm9wZXJ0aWVzLCBmbGFnLm9yaWdpbikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVybE9iai51c2VybmFtZSB8fCB1cmxPYmoucGFzc3dvcmQgfHwgcmVzcG9uc2UucmVxdWVzdC51cmkuaHJlZi5tYXRjaCgvXmh0dHBzPzpcXC9cXC86QC8pKSB7XG4gICAgICAgICAgICAgIHByb3BlcnRpZXMuZXJyb3IgPSBcIlVzZXJpbmZvIGZvcmJpZGRlbiBpbiBjb3JzIHJlZGlyZWN0XCI7XG4gICAgICAgICAgICAgIGRpc3BhdGNoRXJyb3IodGhpcyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYm9keSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgYm9keSAhPT0gbnVsbCAmJlxuICAgICAgICAgIGJvZHkgIT09IFwiXCIgJiZcbiAgICAgICAgICAhKGZsYWcubWV0aG9kID09PSBcIkhFQURcIiB8fCBmbGFnLm1ldGhvZCA9PT0gXCJHRVRcIikpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnVwbG9hZENvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgc2V0RGlzcGF0Y2hQcm9ncmVzc0V2ZW50cyh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnVwbG9hZENvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aW1lb3V0ID4gMCkge1xuICAgICAgICAgIHByb3BlcnRpZXMudGltZW91dFN0YXJ0ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnRpbWVvdXRGbiA9ICgpID0+IHtcbiAgICAgICAgICAgIGNsaWVudC5hYm9ydCgpO1xuICAgICAgICAgICAgaWYgKCEodGhpcy5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5VTlNFTlQgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5PUEVORUQgJiYgIXByb3BlcnRpZXMuc2VuZCkgfHxcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpKSB7XG4gICAgICAgICAgICAgIHByb3BlcnRpZXMuc2VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBsZXQgc3RhdGVDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGlmICghKGZsYWcubWV0aG9kID09PSBcIkhFQURcIiB8fCBmbGFnLm1ldGhvZCA9PT0gXCJHRVRcIikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZC5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwicHJvZ3Jlc3NcIikpO1xuICAgICAgICAgICAgICAgIHJlYWR5U3RhdGVDaGFuZ2UodGhpcywgWE1MSHR0cFJlcXVlc3QuRE9ORSk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWQuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcInRpbWVvdXRcIikpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIpKTtcbiAgICAgICAgICAgICAgICBzdGF0ZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcInByb2dyZXNzXCIpKTtcbiAgICAgICAgICAgICAgaWYgKCFzdGF0ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICByZWFkeVN0YXRlQ2hhbmdlKHRoaXMsIFhNTEh0dHBSZXF1ZXN0LkRPTkUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcInRpbWVvdXRcIikpO1xuICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3BlcnRpZXMucmVhZHlTdGF0ZSA9IFhNTEh0dHBSZXF1ZXN0LlVOU0VOVDtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHByb3BlcnRpZXMudGltZW91dElkID0gc2V0VGltZW91dChwcm9wZXJ0aWVzLnRpbWVvdXRGbiwgdGhpcy50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmxhZy5ib2R5ID0gdW5kZWZpbmVkO1xuICAgICAgZmxhZy5mb3JtRGF0YSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLCB2YWx1ZSkge1xuICAgICAgY29uc3QgZmxhZyA9IHRoaXNbeGhyU3ltYm9scy5mbGFnXTtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc107XG5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCIyIGFyZ3VtZW50cyByZXF1aXJlZCBmb3Igc2V0UmVxdWVzdEhlYWRlclwiKTtcbiAgICAgIH1cbiAgICAgIGhlYWRlciA9IHRvQnl0ZVN0cmluZyhoZWFkZXIpO1xuICAgICAgdmFsdWUgPSB0b0J5dGVTdHJpbmcodmFsdWUpO1xuXG4gICAgICBpZiAodGhpcy5yZWFkeVN0YXRlICE9PSBYTUxIdHRwUmVxdWVzdC5PUEVORUQgfHwgcHJvcGVydGllcy5zZW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSBub3JtYWxpemVIZWFkZXJWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmICghdG9rZW5SZWdleHAudGVzdChoZWFkZXIpIHx8ICFmaWVsZFZhbHVlUmVnZXhwLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsY0hlYWRlciA9IGhlYWRlci50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAoZm9yYmlkZGVuUmVxdWVzdEhlYWRlcnMuaGFzKGxjSGVhZGVyKSB8fCBsY0hlYWRlci5zdGFydHNXaXRoKFwic2VjLVwiKSB8fCBsY0hlYWRlci5zdGFydHNXaXRoKFwicHJveHktXCIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZsYWcucmVxdWVzdEhlYWRlcnMpO1xuICAgICAgbGV0IG4gPSBrZXlzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChuLS0pIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tuXTtcbiAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBsY0hlYWRlcikge1xuICAgICAgICAgIGZsYWcucmVxdWVzdEhlYWRlcnNba2V5XSArPSBcIixcIiArIHZhbHVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmxhZy5yZXF1ZXN0SGVhZGVyc1tsY0hlYWRlcl0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgX293bmVyRG9jdW1lbnQoKSB7XG4gICAgICByZXR1cm4gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIod2luZG93LmRvY3VtZW50KTtcbiAgICB9XG4gIH1cblxuICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblxuICBhZGRDb25zdGFudHMoWE1MSHR0cFJlcXVlc3QsIHtcbiAgICBVTlNFTlQ6IDAsXG4gICAgT1BFTkVEOiAxLFxuICAgIEhFQURFUlNfUkVDRUlWRUQ6IDIsXG4gICAgTE9BRElORzogMyxcbiAgICBET05FOiA0XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHJlYWR5U3RhdGVDaGFuZ2UoeGhyLCByZWFkeVN0YXRlKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHhoclt4aHJTeW1ib2xzLnByb3BlcnRpZXNdO1xuICAgIGlmIChwcm9wZXJ0aWVzLnJlYWR5U3RhdGUgPT09IHJlYWR5U3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9wZXJ0aWVzLnJlYWR5U3RhdGUgPSByZWFkeVN0YXRlO1xuXG4gICAgY29uc3QgcmVhZHlTdGF0ZUNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50KFwicmVhZHlzdGF0ZWNoYW5nZVwiKTtcbiAgICB4aHIuZGlzcGF0Y2hFdmVudChyZWFkeVN0YXRlQ2hhbmdlRXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjZWl2ZVJlc3BvbnNlKHhociwgcmVzcG9uc2UpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0geGhyW3hoclN5bWJvbHMucHJvcGVydGllc107XG4gICAgY29uc3QgZmxhZyA9IHhoclt4aHJTeW1ib2xzLmZsYWddO1xuXG4gICAgY29uc3Qgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XG5cbiAgICBpZiAoZmxhZy5wcmVmbGlnaHQgJiYgcmVkaXJlY3RTdGF0dXNlcy5oYXMoc3RhdHVzQ29kZSkpIHtcbiAgICAgIHByb3BlcnRpZXMuZXJyb3IgPSBcIlJlZGlyZWN0IGFmdGVyIHByZWZsaWdodCBmb3JiaWRkZW5cIjtcbiAgICAgIGRpc3BhdGNoRXJyb3IodGhpcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGJ5dGVPZmZzZXQgPSAwO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuICAgIGNvbnN0IGZpbHRlcmVkUmVzcG9uc2VIZWFkZXJzID0gW107XG4gICAgY29uc3QgaGVhZGVyTWFwID0ge307XG4gICAgY29uc3QgcmF3SGVhZGVycyA9IHJlc3BvbnNlLnJhd0hlYWRlcnM7XG4gICAgY29uc3QgbiA9IE51bWJlcihyYXdIZWFkZXJzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgIGNvbnN0IGsgPSByYXdIZWFkZXJzW2ldO1xuICAgICAgY29uc3Qga2wgPSBrLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB2ID0gcmF3SGVhZGVyc1tpICsgMV07XG4gICAgICBpZiAodW5pcXVlUmVzcG9uc2VIZWFkZXJzLmhhcyhrbCkpIHtcbiAgICAgICAgaWYgKGhlYWRlck1hcFtrbF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlck1hcFtrbF1dO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnNba10gPSB2O1xuICAgICAgfSBlbHNlIGlmIChoZWFkZXJNYXBba2xdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVhZGVyc1toZWFkZXJNYXBba2xdXSArPSBcIiwgXCIgKyB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyc1trXSA9IHY7XG4gICAgICB9XG4gICAgICBoZWFkZXJNYXBba2xdID0gaztcbiAgICB9XG5cbiAgICBjb25zdCBkZXN0VXJsT2JqID0gbmV3IFVSTChyZXNwb25zZS5yZXF1ZXN0LnVyaS5ocmVmKTtcbiAgICBpZiAocHJvcGVydGllcy5vcmlnaW4gIT09IGRlc3RVcmxPYmoub3JpZ2luICYmXG4gICAgICAgIGRlc3RVcmxPYmoucHJvdG9jb2wgIT09IFwiZGF0YTpcIikge1xuICAgICAgaWYgKCF2YWxpZENPUlNIZWFkZXJzKHhociwgcmVzcG9uc2UsIGZsYWcsIHByb3BlcnRpZXMsIHByb3BlcnRpZXMub3JpZ2luKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBhY2VoU3RyID0gcmVzcG9uc2UuaGVhZGVyc1tcImFjY2Vzcy1jb250cm9sLWV4cG9zZS1oZWFkZXJzXCJdO1xuICAgICAgY29uc3QgYWNlaCA9IG5ldyBTZXQoYWNlaFN0ciA/IGFjZWhTdHIudHJpbSgpLnRvTG93ZXJDYXNlKCkuc3BsaXQoaGVhZGVyTGlzdFNlcGFyYXRvclJlZ2V4cCkgOiBbXSk7XG4gICAgICBmb3IgKGNvbnN0IGhlYWRlciBpbiBoZWFkZXJzKSB7XG4gICAgICAgIGNvbnN0IGxjSGVhZGVyID0gaGVhZGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghY29yc1NhZmVSZXNwb25zZUhlYWRlcnMuaGFzKGxjSGVhZGVyKSAmJiAhYWNlaC5oYXMobGNIZWFkZXIpKSB7XG4gICAgICAgICAgZmlsdGVyZWRSZXNwb25zZUhlYWRlcnMucHVzaChoZWFkZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgY29uc3QgbGNIZWFkZXIgPSBoZWFkZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChmb3JiaWRkZW5SZXNwb25zZUhlYWRlcnMuaGFzKGxjSGVhZGVyKSkge1xuICAgICAgICBmaWx0ZXJlZFJlc3BvbnNlSGVhZGVycy5wdXNoKGhlYWRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcGVydGllcy5yZXNwb25zZVVSTCA9IGRlc3RVcmxPYmouaHJlZjtcblxuICAgIHByb3BlcnRpZXMuc3RhdHVzID0gc3RhdHVzQ29kZTtcbiAgICBwcm9wZXJ0aWVzLnN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0dXNNZXNzYWdlIHx8IEhUVFBfU1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIHx8IFwiXCI7XG5cbiAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlSGVhZGVycyA9IGhlYWRlcnM7XG4gICAgcHJvcGVydGllcy5maWx0ZXJlZFJlc3BvbnNlSGVhZGVycyA9IGZpbHRlcmVkUmVzcG9uc2VIZWFkZXJzO1xuXG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IGdldFJlc3BvbnNlSGVhZGVyKHhociwgXCJjb250ZW50LWxlbmd0aFwiKSB8fCBcIjBcIjtcbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSBwYXJzZUludChjb250ZW50TGVuZ3RoKSB8fCAwO1xuICAgIGNvbnN0IHByb2dyZXNzT2JqID0geyBsZW5ndGhDb21wdXRhYmxlOiBmYWxzZSB9O1xuICAgIGxldCBsYXN0UHJvZ3Jlc3NSZXBvcnRlZDtcbiAgICBpZiAoYnVmZmVyTGVuZ3RoICE9PSAwKSB7XG4gICAgICBwcm9ncmVzc09iai50b3RhbCA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgIHByb2dyZXNzT2JqLmxvYWRlZCA9IDA7XG4gICAgICBwcm9ncmVzc09iai5sZW5ndGhDb21wdXRhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gcHJlLWFsbG9jYXRlIGJ1ZmZlci5cbiAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlQnVmZmVyID0gQnVmZmVyLmFsbG9jKHByb3BlcnRpZXMuYnVmZmVyU3RlcFNpemUpO1xuICAgIHByb3BlcnRpZXMucmVzcG9uc2VDYWNoZSA9IG51bGw7XG4gICAgcHJvcGVydGllcy5yZXNwb25zZVRleHRDYWNoZSA9IG51bGw7XG4gICAgcHJvcGVydGllcy5yZXNwb25zZVhNTENhY2hlID0gbnVsbDtcbiAgICByZWFkeVN0YXRlQ2hhbmdlKHhociwgWE1MSHR0cFJlcXVlc3QuSEVBREVSU19SRUNFSVZFRCk7XG5cbiAgICBpZiAoIXByb3BlcnRpZXMuY2xpZW50KSB7XG4gICAgICAvLyBUaGUgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbiByZWFjdGlvbiB0byB0aGUgcmVhZHlzdGF0ZWNoYW5nZSBldmVudC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDYW4ndCB1c2UgdGhlIGNsaWVudCBzaW5jZSB0aGUgY2xpZW50IGdldHMgdGhlIHBvc3QtdW5nemlwcGluZyBieXRlcyAod2hpY2ggY2FuIGJlIGdyZWF0ZXIgdGhhbiB0aGVcbiAgICAvLyBDb250ZW50LUxlbmd0aCkuXG4gICAgcmVzcG9uc2Uub24oXCJkYXRhXCIsIGNodW5rID0+IHtcbiAgICAgIGJ5dGVPZmZzZXQgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgcHJvZ3Jlc3NPYmoubG9hZGVkID0gYnl0ZU9mZnNldDtcbiAgICB9KTtcblxuICAgIHByb3BlcnRpZXMuY2xpZW50Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XG4gICAgICBwcm9wZXJ0aWVzLnRvdGFsUmVjZWl2ZWRDaHVua1NpemUgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgaWYgKHByb3BlcnRpZXMudG90YWxSZWNlaXZlZENodW5rU2l6ZSA+PSBwcm9wZXJ0aWVzLmJ1ZmZlclN0ZXBTaXplKSB7XG4gICAgICAgIHByb3BlcnRpZXMuYnVmZmVyU3RlcFNpemUgKj0gMjtcbiAgICAgICAgd2hpbGUgKHByb3BlcnRpZXMudG90YWxSZWNlaXZlZENodW5rU2l6ZSA+PSBwcm9wZXJ0aWVzLmJ1ZmZlclN0ZXBTaXplKSB7XG4gICAgICAgICAgcHJvcGVydGllcy5idWZmZXJTdGVwU2l6ZSAqPSAyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRtcEJ1ZiA9IEJ1ZmZlci5hbGxvYyhwcm9wZXJ0aWVzLmJ1ZmZlclN0ZXBTaXplKTtcbiAgICAgICAgcHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3Byb3BlcnRpZXMucmVzcG9uc2VCdWZmZXIsIGNodW5rXSk7XG4gICAgICAgIHByb3BlcnRpZXMucmVzcG9uc2VCdWZmZXIuY29weSh0bXBCdWYsIDAsIDAsIHByb3BlcnRpZXMucmVzcG9uc2VCdWZmZXIubGVuZ3RoKTtcbiAgICAgICAgcHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlciA9IHRtcEJ1ZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNodW5rLmNvcHkocHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlciwgcHJvcGVydGllcy50b3RhbFJlY2VpdmVkQ2h1bmtTaXplIC0gY2h1bmsubGVuZ3RoLCAwLCBjaHVuay5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgcHJvcGVydGllcy5yZXNwb25zZUNhY2hlID0gbnVsbDtcbiAgICAgIHByb3BlcnRpZXMucmVzcG9uc2VUZXh0Q2FjaGUgPSBudWxsO1xuICAgICAgcHJvcGVydGllcy5yZXNwb25zZVhNTENhY2hlID0gbnVsbDtcblxuICAgICAgaWYgKHByb3BlcnRpZXMucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuSEVBREVSU19SRUNFSVZFRCkge1xuICAgICAgICBwcm9wZXJ0aWVzLnJlYWR5U3RhdGUgPSBYTUxIdHRwUmVxdWVzdC5MT0FESU5HO1xuICAgICAgfVxuICAgICAgeGhyLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicmVhZHlzdGF0ZWNoYW5nZVwiKSk7XG5cbiAgICAgIGlmIChwcm9ncmVzc09iai50b3RhbCAhPT0gcHJvZ3Jlc3NPYmoubG9hZGVkIHx8IHByb3BlcnRpZXMudG90YWxSZWNlaXZlZENodW5rU2l6ZSA9PT0gYnl0ZU9mZnNldCkge1xuICAgICAgICBpZiAobGFzdFByb2dyZXNzUmVwb3J0ZWQgIT09IHByb2dyZXNzT2JqLmxvYWRlZCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZWNlc3NhcnkgY2hlY2sgaW4gdGhlIGd6aXAgY2FzZSB3aGVyZSB3ZSBjYW4gYmUgZ2V0dGluZyBuZXcgZGF0YSBmcm9tIHRoZSBjbGllbnQsIGFzIGl0XG4gICAgICAgICAgLy8gdW4tZ3ppcHMsIGJ1dCBubyBuZXcgZGF0YSBoYXMgYmVlbiBnb3R0ZW4gZnJvbSB0aGUgcmVzcG9uc2UsIHNvIHdlIHNob3VsZCBub3QgZmlyZSBhIHByb2dyZXNzIGV2ZW50LlxuICAgICAgICAgIGxhc3RQcm9ncmVzc1JlcG9ydGVkID0gcHJvZ3Jlc3NPYmoubG9hZGVkO1xuICAgICAgICAgIHhoci5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwicHJvZ3Jlc3NcIiwgcHJvZ3Jlc3NPYmopKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHByb3BlcnRpZXMuY2xpZW50Lm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChwcm9wZXJ0aWVzLnRpbWVvdXRJZCk7XG4gICAgICBwcm9wZXJ0aWVzLnRpbWVvdXRGbiA9IG51bGw7XG4gICAgICBwcm9wZXJ0aWVzLnRpbWVvdXRTdGFydCA9IDA7XG4gICAgICBwcm9wZXJ0aWVzLmNsaWVudCA9IG51bGw7XG4gICAgICB4aHIuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcInByb2dyZXNzXCIsIHByb2dyZXNzT2JqKSk7XG4gICAgICByZWFkeVN0YXRlQ2hhbmdlKHhociwgWE1MSHR0cFJlcXVlc3QuRE9ORSk7XG4gICAgICB4aHIuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImxvYWRcIiwgcHJvZ3Jlc3NPYmopKTtcbiAgICAgIHhoci5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwibG9hZGVuZFwiLCBwcm9ncmVzc09iaikpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0RGlzcGF0Y2hQcm9ncmVzc0V2ZW50cyh4aHIpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0geGhyW3hoclN5bWJvbHMucHJvcGVydGllc107XG4gICAgY29uc3QgY2xpZW50ID0gcHJvcGVydGllcy5jbGllbnQ7XG4gICAgY29uc3QgdXBsb2FkID0geGhyLnVwbG9hZDtcblxuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgbGV0IGxlbmd0aENvbXB1dGFibGUgPSBmYWxzZTtcbiAgICBjb25zdCBsZW5ndGggPSBjbGllbnQuaGVhZGVycyAmJiBwYXJzZUludCh4aHJVdGlscy5nZXRSZXF1ZXN0SGVhZGVyKGNsaWVudC5oZWFkZXJzLCBcImNvbnRlbnQtbGVuZ3RoXCIpKTtcbiAgICBpZiAobGVuZ3RoKSB7XG4gICAgICB0b3RhbCA9IGxlbmd0aDtcbiAgICAgIGxlbmd0aENvbXB1dGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBpbml0UHJvZ3Jlc3MgPSB7XG4gICAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgICAgdG90YWwsXG4gICAgICBsb2FkZWQ6IDBcbiAgICB9O1xuICAgIHVwbG9hZC5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwibG9hZHN0YXJ0XCIsIGluaXRQcm9ncmVzcykpO1xuXG4gICAgY2xpZW50Lm9uKFwicmVxdWVzdFwiLCByZXEgPT4ge1xuICAgICAgcmVxLm9uKFwicmVzcG9uc2VcIiwgKCkgPT4ge1xuICAgICAgICBwcm9wZXJ0aWVzLnVwbG9hZENvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB7XG4gICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgICAgICB0b3RhbCxcbiAgICAgICAgICBsb2FkZWQ6IHRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHVwbG9hZC5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwicHJvZ3Jlc3NcIiwgcHJvZ3Jlc3MpKTtcbiAgICAgICAgdXBsb2FkLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2FkXCIsIHByb2dyZXNzKSk7XG4gICAgICAgIHVwbG9hZC5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwibG9hZGVuZFwiLCBwcm9ncmVzcykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkaXNwYXRjaEVycm9yKHhocikge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB4aHJbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcbiAgICByZWFkeVN0YXRlQ2hhbmdlKHhociwgWE1MSHR0cFJlcXVlc3QuRE9ORSk7XG4gICAgaWYgKCFwcm9wZXJ0aWVzLnVwbG9hZENvbXBsZXRlKSB7XG4gICAgICB4aHIudXBsb2FkLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJlcnJvclwiKSk7XG4gICAgICB4aHIudXBsb2FkLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIpKTtcbiAgICB9XG4gICAgeGhyLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJlcnJvclwiKSk7XG4gICAgeGhyLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIpKTtcbiAgICBpZiAoeGhyLl9vd25lckRvY3VtZW50KSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihwcm9wZXJ0aWVzLmVycm9yKTtcbiAgICAgIGVycm9yLnR5cGUgPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cbiAgICAgIHhoci5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXcuX3ZpcnR1YWxDb25zb2xlLmVtaXQoXCJqc2RvbUVycm9yXCIsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZENPUlNIZWFkZXJzKHhociwgcmVzcG9uc2UsIGZsYWcsIHByb3BlcnRpZXMsIG9yaWdpbikge1xuICAgIGNvbnN0IGFjYW9TdHIgPSByZXNwb25zZS5oZWFkZXJzW1wiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luXCJdO1xuICAgIGNvbnN0IGFjYW8gPSBhY2FvU3RyID8gYWNhb1N0ci50cmltKCkgOiBudWxsO1xuICAgIGlmIChhY2FvICE9PSBcIipcIiAmJiBhY2FvICE9PSBvcmlnaW4pIHtcbiAgICAgIHByb3BlcnRpZXMuZXJyb3IgPSBcIkNyb3NzIG9yaWdpbiBcIiArIG9yaWdpbiArIFwiIGZvcmJpZGRlblwiO1xuICAgICAgZGlzcGF0Y2hFcnJvcih4aHIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBhY2FjU3RyID0gcmVzcG9uc2UuaGVhZGVyc1tcImFjY2Vzcy1jb250cm9sLWFsbG93LWNyZWRlbnRpYWxzXCJdO1xuICAgIGNvbnN0IGFjYWMgPSBhY2FjU3RyID8gYWNhY1N0ci50cmltKCkgOiBudWxsO1xuICAgIGlmIChmbGFnLndpdGhDcmVkZW50aWFscyAmJiBhY2FjICE9PSBcInRydWVcIikge1xuICAgICAgcHJvcGVydGllcy5lcnJvciA9IFwiQ3JlZGVudGlhbHMgZm9yYmlkZGVuXCI7XG4gICAgICBkaXNwYXRjaEVycm9yKHhocik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFjYWhTdHIgPSByZXNwb25zZS5oZWFkZXJzW1wiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVyc1wiXTtcbiAgICBjb25zdCBhY2FoID0gbmV3IFNldChhY2FoU3RyID8gYWNhaFN0ci50cmltKCkudG9Mb3dlckNhc2UoKS5zcGxpdChoZWFkZXJMaXN0U2VwYXJhdG9yUmVnZXhwKSA6IFtdKTtcbiAgICBjb25zdCBmb3JiaWRkZW5IZWFkZXJzID0gT2JqZWN0LmtleXMoZmxhZy5yZXF1ZXN0SGVhZGVycykuZmlsdGVyKGhlYWRlciA9PiB7XG4gICAgICBjb25zdCBsY0hlYWRlciA9IGhlYWRlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuICFzaW1wbGVIZWFkZXJzLmhhcyhsY0hlYWRlcikgJiYgIWFjYWguaGFzKGxjSGVhZGVyKTtcbiAgICB9KTtcbiAgICBpZiAoZm9yYmlkZGVuSGVhZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9wZXJ0aWVzLmVycm9yID0gXCJIZWFkZXJzIFwiICsgZm9yYmlkZGVuSGVhZGVycyArIFwiIGZvcmJpZGRlblwiO1xuICAgICAgZGlzcGF0Y2hFcnJvcih4aHIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvQnl0ZVN0cmluZyh2YWx1ZSkge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICBpZiAoIS9eW1xcMC1cXHhGRl0qJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIEJ5dGVTdHJpbmdcIik7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbnRlbnRUeXBlKHhocikge1xuICAgIGNvbnN0IGZsYWcgPSB4aHJbeGhyU3ltYm9scy5mbGFnXTtcbiAgICByZXR1cm4gcGFyc2VDb250ZW50VHlwZShmbGFnLm1pbWVUeXBlIHx8IGdldFJlc3BvbnNlSGVhZGVyKHhociwgXCJjb250ZW50LXR5cGVcIikpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXIoeGhyLCBsY0hlYWRlcikge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB4aHJbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcy5yZXNwb25zZUhlYWRlcnMpO1xuICAgIGxldCBuID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKG4tLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tuXTtcbiAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gbGNIZWFkZXIpIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMucmVzcG9uc2VIZWFkZXJzW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXltcXHgwOVxceDBBXFx4MERcXHgyMF0rLywgXCJcIikucmVwbGFjZSgvW1xceDA5XFx4MEFcXHgwRFxceDIwXSskLywgXCJcIik7XG4gIH1cblxuICByZXR1cm4gWE1MSHR0cFJlcXVlc3Q7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtbmFtZWQtcHJvcGVydGllc1xuXG5jb25zdCBJU19OQU1FRF9QUk9QRVJUWSA9IFN5bWJvbCgpO1xuY29uc3QgVFJBQ0tFUiA9IFN5bWJvbCgpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBOYW1lZFByb3BlcnRpZXNUcmFja2VyIGZvciB0aGUgZ2l2ZW4gYG9iamVjdGAuXG4gKlxuICogTmFtZWQgcHJvcGVydGllcyBhcmUgdXNlZCBpbiBET00gdG8gbGV0IHlvdSBsb29rdXAgKGZvciBleGFtcGxlKSBhIE5vZGUgYnkgYWNjZXNzaW5nIGEgcHJvcGVydHkgb24gYW5vdGhlciBvYmplY3QuXG4gKiBGb3IgZXhhbXBsZSBgd2luZG93LmZvb2AgbWlnaHQgcmVzb2x2ZSB0byBhbiBpbWFnZSBlbGVtZW50IHdpdGggaWQgXCJmb29cIi5cbiAqXG4gKiBUaGlzIHRyYWNrZXIgaXMgYSB3b3JrYXJvdW5kIGJlY2F1c2UgdGhlIEVTNiBQcm94eSBmZWF0dXJlIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmVyRnVuYyBFYWNoIHRpbWUgYSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZlxuICogICAgICAgIHRoZSBwcm9wZXJ0eS4gVGhlIGZ1bmN0aW9uIGlzIHBhc3NlZCAzIGFyZ3VtZW50czogKG9iamVjdCwgbmFtZSwgdmFsdWVzKS5cbiAqICAgICAgICBgb2JqZWN0YCBpcyBpZGVudGljYWwgdG8gdGhlIGBvYmplY3RgIHBhcmFtZXRlciBvZiB0aGlzIGBjcmVhdGVgIGZ1bmN0aW9uLlxuICogICAgICAgIGBuYW1lYCBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gKiAgICAgICAgYHZhbHVlc2AgaXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBTZXQgd2l0aCBhbGwgdGhlIHRyYWNrZWQgdmFsdWVzIGZvciB0aGlzIG5hbWUuIFRoZSBvcmRlciBvZiB0aGVzZVxuICogICAgICAgIHZhbHVlcyBpcyB1bmRlZmluZWQuXG4gKlxuICogQHJldHVybnMge05hbWVkUHJvcGVydGllc1RyYWNrZXJ9XG4gKi9cbmV4cG9ydHMuY3JlYXRlID0gZnVuY3Rpb24gKG9iamVjdCwgcmVzb2x2ZXJGdW5jKSB7XG4gIGlmIChvYmplY3RbVFJBQ0tFUl0pIHtcbiAgICB0aHJvdyBFcnJvcihcIkEgTmFtZWRQcm9wZXJ0aWVzVHJhY2tlciBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgb2JqZWN0XCIpO1xuICB9XG5cbiAgY29uc3QgdHJhY2tlciA9IG5ldyBOYW1lZFByb3BlcnRpZXNUcmFja2VyKG9iamVjdCwgcmVzb2x2ZXJGdW5jKTtcbiAgb2JqZWN0W1RSQUNLRVJdID0gdHJhY2tlcjtcbiAgcmV0dXJuIHRyYWNrZXI7XG59O1xuXG5leHBvcnRzLmdldCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBvYmplY3RbVFJBQ0tFUl0gfHwgbnVsbDtcbn07XG5cbmZ1bmN0aW9uIE5hbWVkUHJvcGVydGllc1RyYWNrZXIob2JqZWN0LCByZXNvbHZlckZ1bmMpIHtcbiAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XG4gIHRoaXMucmVzb2x2ZXJGdW5jID0gcmVzb2x2ZXJGdW5jO1xuICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBuZXcgTWFwKCk7IC8vIE1hcDxTZXQ8dmFsdWU+PlxufVxuXG5mdW5jdGlvbiBuZXdQcm9wZXJ0eURlc2NyaXB0b3IodHJhY2tlciwgbmFtZSkge1xuICBjb25zdCBlbXB0eVNldCA9IG5ldyBTZXQoKTtcblxuICBmdW5jdGlvbiBnZXRWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRyYWNrZXIudHJhY2tlZFZhbHVlcy5nZXQobmFtZSkgfHwgZW1wdHlTZXQ7XG4gIH1cblxuICBjb25zdCBkZXNjcmlwdG9yID0ge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0cmFja2VyLnJlc29sdmVyRnVuYyh0cmFja2VyLm9iamVjdCwgbmFtZSwgZ2V0VmFsdWVzKTtcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRyYWNrZXIub2JqZWN0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgZGVzY3JpcHRvci5nZXRbSVNfTkFNRURfUFJPUEVSVFldID0gdHJ1ZTtcbiAgZGVzY3JpcHRvci5zZXRbSVNfTkFNRURfUFJPUEVSVFldID0gdHJ1ZTtcbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogVHJhY2sgYSB2YWx1ZSAoZS5nLiBhIE5vZGUpIGZvciBhIHNwZWNpZmllZCBuYW1lLlxuICpcbiAqIFZhbHVlcyBjYW4gYmUgdHJhY2tlZCBlYWdlcmx5LCB3aGljaCBtZWFucyB0aGF0IG5vdCBhbGwgdHJhY2tlZCB2YWx1ZXMgKmhhdmUqIHRvIGFwcGVhciBpbiB0aGUgb3V0cHV0LiBUaGUgcmVzb2x2ZXJcbiAqIGZ1bmN0aW9uIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgb3V0cHV0IG1heSBmaWx0ZXIgdGhlIHZhbHVlLlxuICpcbiAqIFRyYWNraW5nIHRoZSBzYW1lIGBuYW1lYCBhbmQgYHZhbHVlYCBwYWlyIG11bHRpcGxlIHRpbWVzIGhhcyBubyBlZmZlY3RcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5OYW1lZFByb3BlcnRpZXNUcmFja2VyLnByb3RvdHlwZS50cmFjayA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkIHx8IG5hbWUgPT09IG51bGwgfHwgbmFtZSA9PT0gXCJcIikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCB2YWx1ZVNldCA9IHRoaXMudHJhY2tlZFZhbHVlcy5nZXQobmFtZSk7XG4gIGlmICghdmFsdWVTZXQpIHtcbiAgICB2YWx1ZVNldCA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLnRyYWNrZWRWYWx1ZXMuc2V0KG5hbWUsIHZhbHVlU2V0KTtcbiAgfVxuXG4gIHZhbHVlU2V0LmFkZCh2YWx1ZSk7XG5cbiAgaWYgKG5hbWUgaW4gdGhpcy5vYmplY3QpIHtcbiAgICAvLyBhbHJlYWR5IGFkZGVkIG91ciBnZXR0ZXIgb3IgaXQgaXMgbm90IGEgbmFtZWQgcHJvcGVydHkgKGUuZy4gXCJhZGRFdmVudExpc3RlbmVyXCIpXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGVzY3JpcHRvciA9IG5ld1Byb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBuYW1lKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMub2JqZWN0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG5cbi8qKlxuICogU3RvcCB0cmFja2luZyBhIHByZXZpb3VzbHkgdHJhY2tlZCBgbmFtZWAgJiBgdmFsdWVgIHBhaXIsIHNlZSB0cmFjaygpLlxuICpcbiAqIFVudHJhY2tpbmcgdGhlIHNhbWUgYG5hbWVgIGFuZCBgdmFsdWVgIHBhaXIgbXVsdGlwbGUgdGltZXMgaGFzIG5vIGVmZmVjdFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cbk5hbWVkUHJvcGVydGllc1RyYWNrZXIucHJvdG90eXBlLnVudHJhY2sgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCB8fCBuYW1lID09PSBudWxsIHx8IG5hbWUgPT09IFwiXCIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB2YWx1ZVNldCA9IHRoaXMudHJhY2tlZFZhbHVlcy5nZXQobmFtZSk7XG4gIGlmICghdmFsdWVTZXQpIHtcbiAgICAvLyB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnRcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXZhbHVlU2V0LmRlbGV0ZSh2YWx1ZSkpIHtcbiAgICAvLyB0aGUgdmFsdWUgd2FzIG5vdCBwcmVzZW50XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHZhbHVlU2V0LnNpemUgPT09IDApIHtcbiAgICB0aGlzLnRyYWNrZWRWYWx1ZXMuZGVsZXRlKG5hbWUpO1xuICB9XG5cbiAgaWYgKHZhbHVlU2V0LnNpemUgPiAwKSB7XG4gICAgLy8gb3RoZXIgdmFsdWVzIGZvciB0aGlzIG5hbWUgYXJlIHN0aWxsIHByZXNlbnRcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBhdCB0aGlzIHBvaW50IHRoZXJlIGFyZSBubyBtb3JlIHZhbHVlcywgZGVsZXRlIHRoZSBwcm9wZXJ0eVxuXG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMub2JqZWN0LCBuYW1lKTtcblxuICBpZiAoIWRlc2NyaXB0b3IgfHwgIWRlc2NyaXB0b3IuZ2V0IHx8IGRlc2NyaXB0b3IuZ2V0W0lTX05BTUVEX1BST1BFUlRZXSAhPT0gdHJ1ZSkge1xuICAgIC8vIE5vdCBkZWZpbmVkIGJ5IE5hbWVkUHJvcGVydHlUcmFja2VyXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gbm90ZTogZGVsZXRlIHB1dHMgdGhlIG9iamVjdCBpbiBkaWN0aW9uYXJ5IG1vZGUuXG4gIC8vIGlmIHRoaXMgdHVybnMgb3V0IHRvIGJlIGEgcGVyZm9ybWFuY2UgaXNzdWUsIG1heWJlIGFkZDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC9ibG9iLzNlMzZmYzg2MWFjNTc5NTE5M2JhMzc5MzUzMzNlYjZlZjM3MTYzOTAvc3JjL3V0aWwuanMjTDE3N1xuICBkZWxldGUgdGhpcy5vYmplY3RbbmFtZV07XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XG5jb25zdCB3aGF0d2dVUkwgPSByZXF1aXJlKFwid2hhdHdnLXVybFwiKTtcbmNvbnN0IHF1ZXJ5c3RyaW5nID0gcmVxdWlyZShcInF1ZXJ5c3RyaW5nXCIpO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuL2xpdmluZy9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuY29uc3QgU1lNQk9MX1RSRUVfUE9TSVRJT04gPSByZXF1aXJlKFwic3ltYm9sLXRyZWVcIikuVHJlZVBvc2l0aW9uO1xuY29uc3QgcGFyc2VVUkxUb1Jlc3VsdGluZ1VSTFJlY29yZCA9IHJlcXVpcmUoXCIuL2xpdmluZy9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsXCIpLnBhcnNlVVJMVG9SZXN1bHRpbmdVUkxSZWNvcmQ7XG5cbmV4cG9ydHMudG9GaWxlVXJsID0gZnVuY3Rpb24gKGZpbGVOYW1lKSB7XG4gIC8vIEJleW9uZCBqdXN0IHRoZSBgcGF0aC5yZXNvbHZlYCwgdGhpcyBpcyBtb3N0bHkgZm9yIHRoZSBiZW5lZml0IG9mIFdpbmRvd3MsXG4gIC8vIHdoZXJlIHdlIG5lZWQgdG8gY29udmVydCBcIlxcXCIgdG8gXCIvXCIgYW5kIGFkZCBhbiBleHRyYSBcIi9cIiBwcmVmaXggYmVmb3JlIHRoZVxuICAvLyBkcml2ZSBsZXR0ZXIuXG4gIGxldCBwYXRobmFtZSA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlTmFtZSkucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG4gIGlmIChwYXRobmFtZVswXSAhPT0gXCIvXCIpIHtcbiAgICBwYXRobmFtZSA9IFwiL1wiICsgcGF0aG5hbWU7XG4gIH1cblxuICAvLyBwYXRoIG1pZ2h0IGNvbnRhaW4gc3BhY2VzLCBzbyBjb252ZXJ0IHRob3NlIHRvICUyMFxuICByZXR1cm4gXCJmaWxlOi8vXCIgKyBlbmNvZGVVUkkocGF0aG5hbWUpO1xufTtcblxuLyoqXG4gKiBEZWZpbmUgYSBnZXR0ZXIgb24gYW4gb2JqZWN0XG4gKlxuICogVGhpcyBtZXRob2QgcmVwbGFjZXMgYW55IGV4aXN0aW5nIGdldHRlciBidXQgbGVhdmVzIHNldHRlcnMgaW4gcGxhY2UuXG4gKlxuICogLSBgb2JqZWN0YCB7T2JqZWN0fSB0aGUgb2JqZWN0IHRvIGRlZmluZSB0aGUgZ2V0dGVyIG9uXG4gKiAtIGBwcm9wZXJ0eWAge1N0cmluZ30gdGhlIG5hbWUgb2YgdGhlIGdldHRlclxuICogLSBgZ2V0dGVyRm5gIHtGdW5jdGlvbn0gdGhlIGdldHRlclxuICovXG5leHBvcnRzLmRlZmluZUdldHRlciA9IGZ1bmN0aW9uIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBnZXR0ZXJGbikge1xuICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KSB8fCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWVcbiAgfTtcblxuICBkZXNjcmlwdG9yLmdldCA9IGdldHRlckZuO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTtcbn07XG5cbi8qKlxuICogRGVmaW5lIGEgc2V0IG9mIHByb3BlcnRpZXMgb24gYW4gb2JqZWN0LCBieSBjb3B5aW5nIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yc1xuICogZnJvbSB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICpcbiAqIC0gYG9iamVjdGAge09iamVjdH0gdGhlIHRhcmdldCBvYmplY3RcbiAqIC0gYHByb3BlcnRpZXNgIHtPYmplY3R9IHRoZSBzb3VyY2UgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnR5IGRlc2NyaXB0b3JzXG4gKi9cbmV4cG9ydHMuZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKG9iamVjdCwgcHJvcGVydGllcykge1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvcGVydGllcykpIHtcbiAgICBjb25zdCBwcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvcGVydGllcywgbmFtZSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwgcHJvcERlc2MpO1xuICB9XG59O1xuXG4vKipcbiAqIERlZmluZSBhIGxpc3Qgb2YgY29uc3RhbnRzIG9uIGEgY29uc3RydWN0b3IgYW5kIGl0cyAucHJvdG90eXBlXG4gKlxuICogLSBgQ29uc3RydWN0b3JgIHtGdW5jdGlvbn0gdGhlIGNvbnN0cnVjdG9yIHRvIGRlZmluZSB0aGUgY29uc3RhbnRzIG9uXG4gKiAtIGBwcm9wZXJ0eU1hcGAge09iamVjdH0gIGtleS92YWx1ZSBtYXAgb2YgcHJvcGVydGllcyB0byBkZWZpbmVcbiAqL1xuZXhwb3J0cy5hZGRDb25zdGFudHMgPSBmdW5jdGlvbiBhZGRDb25zdGFudHMoQ29uc3RydWN0b3IsIHByb3BlcnR5TWFwKSB7XG4gIGZvciAoY29uc3QgcHJvcGVydHkgaW4gcHJvcGVydHlNYXApIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnR5TWFwW3Byb3BlcnR5XTtcbiAgICBhZGRDb25zdGFudChDb25zdHJ1Y3RvciwgcHJvcGVydHksIHZhbHVlKTtcbiAgICBhZGRDb25zdGFudChDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BlcnR5LCB2YWx1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFkZENvbnN0YW50KG9iamVjdCwgcHJvcGVydHksIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB7XG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB2YWx1ZVxuICB9KTtcbn1cblxubGV0IG1lbW9pemVRdWVyeVR5cGVDb3VudGVyID0gMDtcblxuLyoqXG4gKiBSZXR1cm5zIGEgdmVyc2lvbiBvZiBhIG1ldGhvZCB0aGF0IG1lbW9pemVzIHNwZWNpZmljIHR5cGVzIG9mIGNhbGxzIG9uIHRoZSBvYmplY3RcbiAqXG4gKiAtIGBmbmAge0Z1bmN0aW9ufSB0aGUgbWV0aG9kIHRvIGJlIG1lbW96aWVkXG4gKi9cbmV4cG9ydHMubWVtb2l6ZVF1ZXJ5ID0gZnVuY3Rpb24gbWVtb2l6ZVF1ZXJ5KGZuKSB7XG4gIC8vIE9ubHkgbWVtb2l6ZSBxdWVyeSBmdW5jdGlvbnMgd2l0aCBhcml0eSA8PSAyXG4gIGlmIChmbi5sZW5ndGggPiAyKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgY29uc3QgdHlwZSA9IG1lbW9pemVRdWVyeVR5cGVDb3VudGVyKys7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX21lbW9pemVkUXVlcmllcykge1xuICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9tZW1vaXplZFF1ZXJpZXNbdHlwZV0pIHtcbiAgICAgIHRoaXMuX21lbW9pemVkUXVlcmllc1t0eXBlXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgbGV0IGtleTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJndW1lbnRzWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBrZXkgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBhcmd1bWVudHNbMF0gPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAga2V5ID0gYXJndW1lbnRzWzBdICsgXCI6OlwiICsgYXJndW1lbnRzWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBpZiAoIShrZXkgaW4gdGhpcy5fbWVtb2l6ZWRRdWVyaWVzW3R5cGVdKSkge1xuICAgICAgdGhpcy5fbWVtb2l6ZWRRdWVyaWVzW3R5cGVdW2tleV0gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbWVtb2l6ZWRRdWVyaWVzW3R5cGVdW2tleV07XG4gIH07XG59O1xuXG5leHBvcnRzLnJlZmxlY3RVUkxBdHRyaWJ1dGUgPSAoZWxlbWVudEltcGwsIGNvbnRlbnRBdHRyaWJ1dGVOYW1lKSA9PiB7XG4gIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gZWxlbWVudEltcGwuZ2V0QXR0cmlidXRlKGNvbnRlbnRBdHRyaWJ1dGVOYW1lKTtcbiAgaWYgKGF0dHJpYnV0ZVZhbHVlID09PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCB1cmxSZWNvcmQgPSBwYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkKGF0dHJpYnV0ZVZhbHVlLCBlbGVtZW50SW1wbC5fb3duZXJEb2N1bWVudCk7XG4gIGlmICh1cmxSZWNvcmQgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICB9XG4gIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplVVJMKHVybFJlY29yZCk7XG59O1xuXG5mdW5jdGlvbiBpc1ZhbGlkQWJzb2x1dGVVUkwoc3RyKSB7XG4gIHJldHVybiB3aGF0d2dVUkwucGFyc2VVUkwoc3RyKSAhPT0gXCJmYWlsdXJlXCI7XG59XG5cbmV4cG9ydHMuaXNWYWxpZFRhcmdldE9yaWdpbiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ciA9PT0gXCIqXCIgfHwgc3RyID09PSBcIi9cIiB8fCBpc1ZhbGlkQWJzb2x1dGVVUkwoc3RyKTtcbn07XG5cbmV4cG9ydHMuc2ltdWx0YW5lb3VzSXRlcmF0b3JzID0gZnVuY3Rpb24qIChmaXJzdCwgc2Vjb25kKSB7XG4gIGZvciAoOzspIHtcbiAgICBjb25zdCBmaXJzdFJlc3VsdCA9IGZpcnN0Lm5leHQoKTtcbiAgICBjb25zdCBzZWNvbmRSZXN1bHQgPSBzZWNvbmQubmV4dCgpO1xuXG4gICAgaWYgKGZpcnN0UmVzdWx0LmRvbmUgJiYgc2Vjb25kUmVzdWx0LmRvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB5aWVsZCBbXG4gICAgICBmaXJzdFJlc3VsdC5kb25lID8gbnVsbCA6IGZpcnN0UmVzdWx0LnZhbHVlLFxuICAgICAgc2Vjb25kUmVzdWx0LmRvbmUgPyBudWxsIDogc2Vjb25kUmVzdWx0LnZhbHVlXG4gICAgXTtcbiAgfVxufTtcblxuZXhwb3J0cy50cmVlT3JkZXJTb3J0ZXIgPSBmdW5jdGlvbiAoYSwgYikge1xuICBjb25zdCBjb21wYXJlID0gZG9tU3ltYm9sVHJlZS5jb21wYXJlVHJlZVBvc2l0aW9uKGEsIGIpO1xuXG4gIGlmIChjb21wYXJlICYgU1lNQk9MX1RSRUVfUE9TSVRJT04uUFJFQ0VESU5HKSB7IC8vIGIgaXMgcHJlY2VkaW5nIGFcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmIChjb21wYXJlICYgU1lNQk9MX1RSRUVfUE9TSVRJT04uRk9MTE9XSU5HKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gZGlzY29ubmVjdGVkIG9yIGVxdWFsOlxuICByZXR1cm4gMDtcbn07XG5cbmV4cG9ydHMubGVuZ3RoRnJvbVByb3BlcnRpZXMgPSBmdW5jdGlvbiAoYXJyYXlMaWtlKSB7XG4gIGxldCBtYXggPSAtMTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycmF5TGlrZSk7XG4gIGNvbnN0IGhpZ2hlc3RLZXlJbmRleCA9IGtleXMubGVuZ3RoIC0gMTtcblxuICAvLyBBYnVzZXMgYSB2OCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgZm9yIGEgdmVyeSBmYXN0IGNhc2VcbiAgLy8gKGlmIHRoaXMgaW1wbGVtZW50YXRpb24gZGV0YWlsIGNoYW5nZXMsIHRoaXMgbWV0aG9kIHdpbGwgc3RpbGxcbiAgLy8gIHJldHVybiBjb3JyZWN0IHJlc3VsdHMpXG4gIC8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuICBpZiAoaGlnaGVzdEtleUluZGV4ID09IGtleXNbaGlnaGVzdEtleUluZGV4XSkgeyAvLyBub3QgPT09XG4gICAgLyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cbiAgICByZXR1cm4ga2V5cy5sZW5ndGg7XG4gIH1cblxuICBmb3IgKGxldCBpID0gaGlnaGVzdEtleUluZGV4OyBpID49IDA7IC0taSkge1xuICAgIGNvbnN0IGFzTnVtYmVyID0gTnVtYmVyKGtleXNbaV0pO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNOYU4oYXNOdW1iZXIpICYmIGFzTnVtYmVyID4gbWF4KSB7XG4gICAgICBtYXggPSBhc051bWJlcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1heCArIDE7XG59O1xuXG5jb25zdCBiYXNlNjRSZWdleHAgPSAvXig/OltBLVowLTkrL117NH0pKig/OltBLVowLTkrL117Mn09PXxbQS1aMC05Ky9dezN9PXxbQS1aMC05Ky9dezR9KSQvaTtcblxuZXhwb3J0cy5wYXJzZURhdGFVcmwgPSBmdW5jdGlvbiBwYXJzZURhdGFVcmwodXJsKSB7XG4gIGNvbnN0IHVybFBhcnRzID0gdXJsLm1hdGNoKC9eZGF0YTooLis/KSg/OjsoYmFzZTY0KSk/LCguKikkLyk7XG4gIGxldCBidWZmZXI7XG4gIGlmICh1cmxQYXJ0c1syXSA9PT0gXCJiYXNlNjRcIikge1xuICAgIGlmICh1cmxQYXJ0c1szXSAmJiAhYmFzZTY0UmVnZXhwLnRlc3QodXJsUGFydHNbM10pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSBiYXNlNjQgc3RyaW5nXCIpO1xuICAgIH1cbiAgICBidWZmZXIgPSBuZXcgQnVmZmVyKHVybFBhcnRzWzNdLCBcImJhc2U2NFwiKTtcbiAgfSBlbHNlIHtcbiAgICBidWZmZXIgPSBuZXcgQnVmZmVyKHF1ZXJ5c3RyaW5nLnVuZXNjYXBlKHVybFBhcnRzWzNdKSk7XG4gIH1cbiAgcmV0dXJuIHsgYnVmZmVyLCB0eXBlOiB1cmxQYXJ0c1sxXSB9O1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgZ2xvYmFsLXJlcXVpcmUgKi9cblxuZXhwb3J0cy5DYW52YXMgPSBudWxsO1xuW1wiY2FudmFzXCIsIFwiY2FudmFzLXByZWJ1aWx0XCJdLnNvbWUobW9kdWxlTmFtZSA9PiB7XG4gIHRyeSB7XG4gICAgZXhwb3J0cy5DYW52YXMgPSByZXF1aXJlKG1vZHVsZU5hbWUpO1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cy5DYW52YXMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLy8gSW4gYnJvd3NlcmlmeSwgdGhlIHJlcXVpcmUgd2lsbCBzdWNjZWVkIGJ1dCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0XG4gICAgICBleHBvcnRzLkNhbnZhcyA9IG51bGw7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXhwb3J0cy5DYW52YXMgPSBudWxsO1xuICB9XG4gIHJldHVybiBleHBvcnRzLkNhbnZhcyAhPT0gbnVsbDtcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiZXZlbnRzXCIpLkV2ZW50RW1pdHRlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBWaXJ0dWFsQ29uc29sZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLm9uKFwiZXJyb3JcIiwgKCkgPT4ge1xuICAgICAgLy8gSWYgXCJlcnJvclwiIGV2ZW50IGhhcyBubyBsaXN0ZW5lcnMsXG4gICAgICAvLyBFdmVudEVtaXR0ZXIgdGhyb3dzIGFuIGV4Y2VwdGlvblxuICAgIH0pO1xuICB9XG5cbiAgc2VuZFRvKGFueUNvbnNvbGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgT2JqZWN0LmtleXMoYW55Q29uc29sZSkpIHtcbiAgICAgIGlmICh0eXBlb2YgYW55Q29uc29sZVttZXRob2RdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZnVuY3Rpb24gb25NZXRob2RDYWxsKCkge1xuICAgICAgICAgIGFueUNvbnNvbGVbbWV0aG9kXSguLi5hcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub24obWV0aG9kLCBvbk1ldGhvZENhbGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5vbWl0SlNET01FcnJvcnMpIHtcbiAgICAgIHRoaXMub24oXCJqc2RvbUVycm9yXCIsIGUgPT4gYW55Q29uc29sZS5lcnJvcihlLnN0YWNrLCBlLmRldGFpbCkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYyAqL1xuY29uc3QgYWNvcm4gPSByZXF1aXJlKFwiYWNvcm5cIik7XG5jb25zdCBmaW5kR2xvYmFscyA9IHJlcXVpcmUoXCJhY29ybi1nbG9iYWxzXCIpO1xuY29uc3QgZXNjb2RlZ2VuID0gcmVxdWlyZShcImVzY29kZWdlblwiKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoZSBkZWZhdWx0IGJyb3dzZXJpZnkgdm0gc2hpbSBiZWNhdXNlIGl0IGRvZXNuJ3Qgd29yayBpbiBhIHdlYiB3b3JrZXIuXG5cbi8vIEZyb20gRVMgc3BlYyB0YWJsZSBvZiBjb250ZW50cy4gQWxzbywgZG9uJ3QgZm9yZ2V0IHRoZSBBbm5leCBCIGFkZGl0aW9ucy5cbi8vIElmIHNvbWVvbmUgZmVlbHMgYW1iaXRpb3VzIG1heWJlIG1ha2UgdGhpcyBpbnRvIGFuIG5wbSBwYWNrYWdlLlxuY29uc3QgYnVpbHRJbkNvbnN0cyA9IFtcIkluZmluaXR5XCIsIFwiTmFOXCIsIFwidW5kZWZpbmVkXCJdO1xuY29uc3Qgb3RoZXJCdWlsdElucyA9IFtcImlzRmluaXRlXCIsIFwiaXNOYU5cIiwgXCJwYXJzZUZsb2F0XCIsIFwicGFyc2VJbnRcIiwgXCJkZWNvZGVVUklcIiwgXCJkZWNvZGVVUklDb21wb25lbnRcIixcbiAgXCJlbmNvZGVVUklcIiwgXCJlbmNvZGVVUklDb21wb25lbnRcIiwgXCJBcnJheVwiLCBcIkFycmF5QnVmZmVyXCIsIFwiQm9vbGVhblwiLCBcIkRhdGFWaWV3XCIsIFwiRGF0ZVwiLCBcIkVycm9yXCIsIFwiRXZhbEVycm9yXCIsXG4gIFwiRmxvYXQzMkFycmF5XCIsIFwiRmxvYXQ2NEFycmF5XCIsIFwiRnVuY3Rpb25cIiwgXCJJbnQ4QXJyYXlcIiwgXCJJbnQxNkFycmF5XCIsIFwiSW50MzJBcnJheVwiLCBcIk1hcFwiLCBcIk51bWJlclwiLCBcIk9iamVjdFwiLFxuICBcIlByb3h5XCIsIFwiUHJvbWlzZVwiLCBcIlJhbmdlRXJyb3JcIiwgXCJSZWZlcmVuY2VFcnJvclwiLCBcIlJlZ0V4cFwiLCBcIlNldFwiLCBcIlN0cmluZ1wiLCBcIlN5bWJvbFwiLCBcIlN5bnRheEVycm9yXCIsIFwiVHlwZUVycm9yXCIsXG4gIFwiVWludDhBcnJheVwiLCBcIlVpbnQ4Q2xhbXBlZEFycmF5XCIsIFwiVWludDE2QXJyYXlcIiwgXCJVaW50MzJBcnJheVwiLCBcIlVSSUVycm9yXCIsIFwiV2Vha01hcFwiLCBcIldlYWtTZXRcIiwgXCJKU09OXCIsIFwiTWF0aFwiLFxuICBcIlJlZmxlY3RcIiwgXCJlc2NhcGVcIiwgXCJ1bmVzY2FwZVwiXTtcblxuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24gKHNhbmRib3gpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNhbmRib3gsIFwiX19pc1ZNU2hpbUNvbnRleHRcIiwge1xuICAgIHZhbHVlOiB0cnVlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9KTtcblxuICBmb3IgKGNvbnN0IGJ1aWx0SW4gb2YgYnVpbHRJbkNvbnN0cykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzYW5kYm94LCBidWlsdEluLCB7XG4gICAgICB2YWx1ZTogZ2xvYmFsW2J1aWx0SW5dLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGJ1aWx0SW4gb2Ygb3RoZXJCdWlsdElucykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzYW5kYm94LCBidWlsdEluLCB7XG4gICAgICB2YWx1ZTogZ2xvYmFsW2J1aWx0SW5dLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNhbmRib3gsIFwiZXZhbFwiLCB7XG4gICAgdmFsdWUoY29kZSkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMucnVuSW5Db250ZXh0KGNvZGUsIHNhbmRib3gpO1xuICAgIH0sXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pO1xufTtcblxuZXhwb3J0cy5pc0NvbnRleHQgPSBmdW5jdGlvbiAoc2FuZGJveCkge1xuICByZXR1cm4gc2FuZGJveC5fX2lzVk1TaGltQ29udGV4dDtcbn07XG5cbmV4cG9ydHMucnVuSW5Db250ZXh0ID0gZnVuY3Rpb24gKGNvZGUsIGNvbnRleHRpZmllZFNhbmRib3gsIG9wdGlvbnMpIHtcbiAgaWYgKGNvZGUgPT09IFwidGhpc1wiKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlIGZvciBkdXJpbmcgd2luZG93IGNyZWF0aW9uLlxuICAgIHJldHVybiBjb250ZXh0aWZpZWRTYW5kYm94O1xuICB9XG5cbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1lbnRzID0gW107XG4gIGNvbnN0IHRva2VucyA9IFtdO1xuICBjb25zdCBhc3QgPSBhY29ybi5wYXJzZShjb2RlLCB7XG4gICAgYWxsb3dSZXR1cm5PdXRzaWRlRnVuY3Rpb246IHRydWUsXG4gICAgcmFuZ2VzOiB0cnVlLFxuICAgIC8vIGNvbGxlY3QgY29tbWVudHMgaW4gRXNwcmltYSdzIGZvcm1hdFxuICAgIG9uQ29tbWVudDogY29tbWVudHMsXG4gICAgLy8gY29sbGVjdCB0b2tlbiByYW5nZXNcbiAgICBvblRva2VuOiB0b2tlbnNcbiAgfSk7XG5cbiAgLy8gbWFrZSBzdXJlIHdlIGtlZXAgY29tbWVudHNcbiAgZXNjb2RlZ2VuLmF0dGFjaENvbW1lbnRzKGFzdCwgY29tbWVudHMsIHRva2Vucyk7XG5cbiAgY29uc3QgZ2xvYmFscyA9IGZpbmRHbG9iYWxzKGFzdCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZ2xvYmFscy5sZW5ndGg7ICsraSkge1xuICAgIGlmIChnbG9iYWxzW2ldLm5hbWUgPT09IFwid2luZG93XCIgfHwgZ2xvYmFsc1tpXS5uYW1lID09PSBcInRoaXNcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBnbG9iYWxzW2ldLm5vZGVzO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbm9kZXMubGVuZ3RoOyArK2opIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBub2Rlc1tqXS50eXBlO1xuICAgICAgY29uc3QgbmFtZSA9IG5vZGVzW2pdLm5hbWU7XG4gICAgICBub2Rlc1tqXS50eXBlID0gXCJNZW1iZXJFeHByZXNzaW9uXCI7XG4gICAgICBub2Rlc1tqXS5wcm9wZXJ0eSA9IHsgbmFtZSwgdHlwZSB9O1xuICAgICAgbm9kZXNbal0uY29tcHV0ZWQgPSBmYWxzZTtcbiAgICAgIG5vZGVzW2pdLm9iamVjdCA9IHtcbiAgICAgICAgbmFtZTogXCJ3aW5kb3dcIixcbiAgICAgICAgdHlwZTogXCJJZGVudGlmaWVyXCJcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbGFzdE5vZGUgPSBhc3QuYm9keVthc3QuYm9keS5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3ROb2RlLnR5cGUgPT09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgbGFzdE5vZGUudHlwZSA9IFwiUmV0dXJuU3RhdGVtZW50XCI7XG4gICAgbGFzdE5vZGUuYXJndW1lbnQgPSBsYXN0Tm9kZS5leHByZXNzaW9uO1xuICAgIGRlbGV0ZSBsYXN0Tm9kZS5leHByZXNzaW9uO1xuICB9XG5cbiAgY29uc3QgcmV3cml0dGVuQ29kZSA9IGVzY29kZWdlbi5nZW5lcmF0ZShhc3QsIHsgY29tbWVudDogdHJ1ZSB9KTtcbiAgY29uc3Qgc3VmZml4ID0gb3B0aW9ucy5maWxlbmFtZSAhPT0gdW5kZWZpbmVkID8gXCJcXG4vLyMgc291cmNlVVJMPVwiICsgb3B0aW9ucy5maWxlbmFtZSA6IFwiXCI7XG5cbiAgcmV0dXJuIEZ1bmN0aW9uKFwid2luZG93XCIsIHJld3JpdHRlbkNvZGUgKyBzdWZmaXgpLmJpbmQoY29udGV4dGlmaWVkU2FuZGJveCkoY29udGV4dGlmaWVkU2FuZGJveCk7XG59O1xuXG5leHBvcnRzLlNjcmlwdCA9IGNsYXNzIFZNU2hpbVNjcmlwdCB7XG4gIGNvbnN0cnVjdG9yKGNvZGUsIG9wdGlvbnMpIHtcbiAgICB0aGlzLl9jb2RlID0gY29kZTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHJ1bkluQ29udGV4dChzYW5kYm94LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGV4cG9ydHMucnVuSW5Db250ZXh0KHRoaXMuX2NvZGUsIHNhbmRib3gsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX29wdGlvbnMsIG9wdGlvbnMpKTtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgYWRkQ29uc3RhbnRzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpLmFkZENvbnN0YW50cztcbmNvbnN0IHRhYmxlID0gcmVxdWlyZShcIi4vZG9tLWV4Y2VwdGlvbi10YWJsZS5qc29uXCIpOyAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtRE9NRXhjZXB0aW9uLWVycm9yLW5hbWVzXG5cbi8vIFByZWNvbXB1dGUgc29tZSBzdHVmZi4gTW9zdGx5IHVubmVjZXNzYXJ5IG9uY2Ugd2UgdGFrZSBjYXJlIG9mIHRoZSBUT0RPIGJlbG93LlxuY29uc3QgbmFtZXNXaXRoQ29kZXMgPSBPYmplY3Qua2V5cyh0YWJsZSkuZmlsdGVyKG5hbWUgPT4gXCJsZWdhY3lDb2RlVmFsdWVcIiBpbiB0YWJsZVtuYW1lXSk7XG5cbmNvbnN0IGNvZGVzVG9OYW1lcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5mb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXNXaXRoQ29kZXMpIHtcbiAgY29kZXNUb05hbWVzW3RhYmxlW25hbWVdLmxlZ2FjeUNvZGVWYWx1ZV0gPSBuYW1lO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERPTUV4Y2VwdGlvbjtcblxuLy8gVE9ETzogdXBkYXRlIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSB0byBtYXRjaCBXZWJJREwgc3BlY1xuLy8gU2VlIGFsc28gaHR0cHM6Ly9naXRodWIuY29tL2hleWNhbS93ZWJpZGwvcHVsbC8yMiB3aGljaCBpc24ndCBtZXJnZWQgYXMgb2YgeWV0XG5mdW5jdGlvbiBET01FeGNlcHRpb24oY29kZSwgbWVzc2FnZSkge1xuICBjb25zdCBuYW1lID0gY29kZXNUb05hbWVzW2NvZGVdO1xuXG4gIGlmIChtZXNzYWdlID09PSB1bmRlZmluZWQpIHtcbiAgICBtZXNzYWdlID0gdGFibGVbbmFtZV0uZGVzY3JpcHRpb247XG4gIH1cbiAgRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJuYW1lXCIsIHsgdmFsdWU6IG5hbWUsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2RlXCIsIHsgdmFsdWU6IGNvZGUsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIERPTUV4Y2VwdGlvbik7XG4gIH1cbn1cblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKERPTUV4Y2VwdGlvbiwgRXJyb3IpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKERPTUV4Y2VwdGlvbi5wcm90b3R5cGUsIEVycm9yLnByb3RvdHlwZSk7XG5cbmNvbnN0IGNvbnN0YW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5mb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXNXaXRoQ29kZXMpIHtcbiAgY29uc3RhbnRzW3RhYmxlW25hbWVdLmxlZ2FjeUNvZGVOYW1lXSA9IHRhYmxlW25hbWVdLmxlZ2FjeUNvZGVWYWx1ZTtcbn1cblxuYWRkQ29uc3RhbnRzKERPTUV4Y2VwdGlvbiwgY29uc3RhbnRzKTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJJbmRleFNpemVFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBpbmRleCBpcyBub3QgaW4gdGhlIGFsbG93ZWQgcmFuZ2UuXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIklOREVYX1NJWkVfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMVxuICB9LFxuICBcIkhpZXJhcmNoeVJlcXVlc3RFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvcGVyYXRpb24gd291bGQgeWllbGQgYW4gaW5jb3JyZWN0IG5vZGUgdHJlZS5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiSElFUkFSQ0hZX1JFUVVFU1RfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogM1xuICB9LFxuICBcIldyb25nRG9jdW1lbnRFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvYmplY3QgaXMgaW4gdGhlIHdyb25nIGRvY3VtZW50LlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJXUk9OR19ET0NVTUVOVF9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiA0XG4gIH0sXG4gIFwiSW52YWxpZENoYXJhY3RlckVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIHN0cmluZyBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIklOVkFMSURfQ0hBUkFDVEVSX0VSUlwiLFxuICAgIFwibGVnYWN5Q29kZVZhbHVlXCI6IDVcbiAgfSxcbiAgXCJOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvYmplY3QgY2FuIG5vdCBiZSBtb2RpZmllZC5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogN1xuICB9LFxuICBcIk5vdEZvdW5kRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgb2JqZWN0IGNhbiBub3QgYmUgZm91bmQgaGVyZS5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiTk9UX0ZPVU5EX0VSUlwiLFxuICAgIFwibGVnYWN5Q29kZVZhbHVlXCI6IDhcbiAgfSxcbiAgXCJOb3RTdXBwb3J0ZWRFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZC5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiTk9UX1NVUFBPUlRFRF9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiA5XG4gIH0sXG4gIFwiSW5Vc2VBdHRyaWJ1dGVFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBhdHRyaWJ1dGUgaXMgaW4gdXNlLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJJTlVTRV9BVFRSSUJVVEVfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMTBcbiAgfSxcbiAgXCJJbnZhbGlkU3RhdGVFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvYmplY3QgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiSU5WQUxJRF9TVEFURV9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiAxMVxuICB9LFxuICBcIlN5bnRheEVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIHN0cmluZyBkaWQgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBwYXR0ZXJuLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJTWU5UQVhfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMTJcbiAgfSxcbiAgXCJJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgb2JqZWN0IGNhbiBub3QgYmUgbW9kaWZpZWQgaW4gdGhpcyB3YXkuXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUlwiLFxuICAgIFwibGVnYWN5Q29kZVZhbHVlXCI6IDEzXG4gIH0sXG4gIFwiTmFtZXNwYWNlRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGJ5IE5hbWVzcGFjZXMgaW4gWE1MLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJOQU1FU1BBQ0VfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMTRcbiAgfSxcbiAgXCJJbnZhbGlkQWNjZXNzRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgb2JqZWN0IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBvciBhcmd1bWVudC5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiSU5WQUxJRF9BQ0NFU1NfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMTVcbiAgfSxcbiAgXCJTZWN1cml0eUVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG9wZXJhdGlvbiBpcyBpbnNlY3VyZS5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiU0VDVVJJVFlfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMThcbiAgfSxcbiAgXCJOZXR3b3JrRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQuXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIk5FVFdPUktfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMTlcbiAgfSxcbiAgXCJBYm9ydEVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiQUJPUlRfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMjBcbiAgfSxcbiAgXCJVUkxNaXNtYXRjaEVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIGdpdmVuIFVSTCBkb2VzIG5vdCBtYXRjaCBhbm90aGVyIFVSTC5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiVVJMX01JU01BVENIX0VSUlwiLFxuICAgIFwibGVnYWN5Q29kZVZhbHVlXCI6IDIxXG4gIH0sXG4gIFwiUXVvdGFFeGNlZWRlZEVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIHF1b3RhIGhhcyBiZWVuIGV4Y2VlZGVkLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJRVU9UQV9FWENFRURFRF9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiAyMlxuICB9LFxuICBcIlRpbWVvdXRFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvcGVyYXRpb24gdGltZWQgb3V0LlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJUSU1FT1VUX0VSUlwiLFxuICAgIFwibGVnYWN5Q29kZVZhbHVlXCI6IDIzXG4gIH0sXG4gIFwiSW52YWxpZE5vZGVUeXBlRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgc3VwcGxpZWQgbm9kZSBpcyBpbmNvcnJlY3Qgb3IgaGFzIGFuIGluY29ycmVjdCBhbmNlc3RvciBmb3IgdGhpcyBvcGVyYXRpb24uXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIklOVkFMSURfTk9ERV9UWVBFX0VSUlwiLFxuICAgIFwibGVnYWN5Q29kZVZhbHVlXCI6IDI0XG4gIH0sXG4gIFwiRGF0YUNsb25lRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgb2JqZWN0IGNhbiBub3QgYmUgY2xvbmVkLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJEQVRBX0NMT05FX0VSUlwiLFxuICAgIFwibGVnYWN5Q29kZVZhbHVlXCI6IDI1XG4gIH0sXG4gIFwiRW5jb2RpbmdFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBlbmNvZGluZyBvcGVyYXRpb24gKGVpdGhlciBlbmNvZGVkIG9yIGRlY29kaW5nKSBmYWlsZWQuXCJcbiAgfSxcbiAgXCJOb3RSZWFkYWJsZUVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIEkvTyByZWFkIG9wZXJhdGlvbiBmYWlsZWQuXCJcbiAgfSxcbiAgXCJVbmtub3duRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgb3BlcmF0aW9uIGZhaWxlZCBmb3IgYW4gdW5rbm93biB0cmFuc2llbnQgcmVhc29uIChlLmcuIG91dCBvZiBtZW1vcnkpLlwiXG4gIH0sXG4gIFwiQ29uc3RyYWludEVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiQSBtdXRhdGlvbiBvcGVyYXRpb24gaW4gYSB0cmFuc2FjdGlvbiBmYWlsZWQgYmVjYXVzZSBhIGNvbnN0cmFpbnQgd2FzIG5vdCBzYXRpc2ZpZWQuXCJcbiAgfSxcbiAgXCJEYXRhRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJQcm92aWRlZCBkYXRhIGlzIGluYWRlcXVhdGUuXCJcbiAgfSxcbiAgXCJUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIHJlcXVlc3Qgd2FzIHBsYWNlZCBhZ2FpbnN0IGEgdHJhbnNhY3Rpb24gd2hpY2ggaXMgY3VycmVudGx5IG5vdCBhY3RpdmUsIG9yIHdoaWNoIGlzIGZpbmlzaGVkLlwiXG4gIH0sXG4gIFwiUmVhZE9ubHlFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBtdXRhdGluZyBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBpbiBhIFxcXCJyZWFkb25seVxcXCIgdHJhbnNhY3Rpb24uXCJcbiAgfSxcbiAgXCJWZXJzaW9uRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIG9wZW4gYSBkYXRhYmFzZSB1c2luZyBhIGxvd2VyIHZlcnNpb24gdGhhbiB0aGUgZXhpc3RpbmcgdmVyc2lvbi5cIlxuICB9LFxuICBcIk9wZXJhdGlvbkVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG9wZXJhdGlvbiBmYWlsZWQgZm9yIGFuIG9wZXJhdGlvbi1zcGVjaWZpYyByZWFzb24uXCJcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIl9hcmdzXCI6IFtcbiAgICBbXG4gICAgICB7XG4gICAgICAgIFwicmF3XCI6IFwianNkb21AXjEwLjEuMFwiLFxuICAgICAgICBcInNjb3BlXCI6IG51bGwsXG4gICAgICAgIFwiZXNjYXBlZE5hbWVcIjogXCJqc2RvbVwiLFxuICAgICAgICBcIm5hbWVcIjogXCJqc2RvbVwiLFxuICAgICAgICBcInJhd1NwZWNcIjogXCJeMTAuMS4wXCIsXG4gICAgICAgIFwic3BlY1wiOiBcIj49MTAuMS4wIDwxMS4wLjBcIixcbiAgICAgICAgXCJ0eXBlXCI6IFwicmFuZ2VcIlxuICAgICAgfSxcbiAgICAgIFwiL2hvbWUvZ2FicmllbC9Eb2N1bWVudHMvd2ViLXNjcmFwZXItY2hyb21lLWV4dGVuc2lvblwiXG4gICAgXVxuICBdLFxuICBcIl9mcm9tXCI6IFwianNkb21APj0xMC4xLjAgPDExLjAuMFwiLFxuICBcIl9pZFwiOiBcImpzZG9tQDEwLjEuMFwiLFxuICBcIl9pbkNhY2hlXCI6IHRydWUsXG4gIFwiX2xvY2F0aW9uXCI6IFwiL2pzZG9tXCIsXG4gIFwiX25vZGVWZXJzaW9uXCI6IFwiNy41LjBcIixcbiAgXCJfbnBtT3BlcmF0aW9uYWxJbnRlcm5hbFwiOiB7XG4gICAgXCJob3N0XCI6IFwicGFja2FnZXMtMTItd2VzdC5pbnRlcm5hbC5ucG1qcy5jb21cIixcbiAgICBcInRtcFwiOiBcInRtcC9qc2RvbS0xMC4xLjAudGd6XzE0OTM2MDc0NzQ1MzZfMC44ODAyODk2MDIwOTMzOTg2XCJcbiAgfSxcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiZG9tZW5pY1wiLFxuICAgIFwiZW1haWxcIjogXCJkQGRvbWVuaWMubWVcIlxuICB9LFxuICBcIl9ucG1WZXJzaW9uXCI6IFwiNC4xLjJcIixcbiAgXCJfcGhhbnRvbUNoaWxkcmVuXCI6IHt9LFxuICBcIl9yZXF1ZXN0ZWRcIjoge1xuICAgIFwicmF3XCI6IFwianNkb21AXjEwLjEuMFwiLFxuICAgIFwic2NvcGVcIjogbnVsbCxcbiAgICBcImVzY2FwZWROYW1lXCI6IFwianNkb21cIixcbiAgICBcIm5hbWVcIjogXCJqc2RvbVwiLFxuICAgIFwicmF3U3BlY1wiOiBcIl4xMC4xLjBcIixcbiAgICBcInNwZWNcIjogXCI+PTEwLjEuMCA8MTEuMC4wXCIsXG4gICAgXCJ0eXBlXCI6IFwicmFuZ2VcIlxuICB9LFxuICBcIl9yZXF1aXJlZEJ5XCI6IFtcbiAgICBcIi9cIlxuICBdLFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzZG9tLy0vanNkb20tMTAuMS4wLnRnelwiLFxuICBcIl9zaGFzdW1cIjogXCI3NzY1ZTAwZmQ1YzM1NjdmMzQ5ODVhMWM4NmZmNDY2YTYxZGFjYzZhXCIsXG4gIFwiX3Nocmlua3dyYXBcIjogbnVsbCxcbiAgXCJfc3BlY1wiOiBcImpzZG9tQF4xMC4xLjBcIixcbiAgXCJfd2hlcmVcIjogXCIvaG9tZS9nYWJyaWVsL0RvY3VtZW50cy93ZWItc2NyYXBlci1jaHJvbWUtZXh0ZW5zaW9uXCIsXG4gIFwiYnJvd3NlclwiOiB7XG4gICAgXCJjYW52YXNcIjogZmFsc2UsXG4gICAgXCJ2bVwiOiBcIi4vbGliL2pzZG9tL3ZtLXNoaW0uanNcIlxuICB9LFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3RtcHZhci9qc2RvbS9pc3N1ZXNcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhYmFiXCI6IFwiXjEuMC4zXCIsXG4gICAgXCJhY29yblwiOiBcIl40LjAuNFwiLFxuICAgIFwiYWNvcm4tZ2xvYmFsc1wiOiBcIl4zLjEuMFwiLFxuICAgIFwiYXJyYXktZXF1YWxcIjogXCJeMS4wLjBcIixcbiAgICBcImNvbnRlbnQtdHlwZS1wYXJzZXJcIjogXCJeMS4wLjFcIixcbiAgICBcImNzc29tXCI6IFwiPj0gMC4zLjIgPCAwLjQuMFwiLFxuICAgIFwiY3Nzc3R5bGVcIjogXCI+PSAwLjIuMzcgPCAwLjMuMFwiLFxuICAgIFwiZXNjb2RlZ2VuXCI6IFwiXjEuNi4xXCIsXG4gICAgXCJodG1sLWVuY29kaW5nLXNuaWZmZXJcIjogXCJeMS4wLjFcIixcbiAgICBcIm53bWF0Y2hlclwiOiBcIj49IDEuMy45IDwgMi4wLjBcIixcbiAgICBcInBhcnNlNVwiOiBcIl4xLjUuMVwiLFxuICAgIFwicG5cIjogXCJeMS4wLjBcIixcbiAgICBcInJlcXVlc3RcIjogXCJeMi43OS4wXCIsXG4gICAgXCJyZXF1ZXN0LXByb21pc2UtbmF0aXZlXCI6IFwiXjEuMC4zXCIsXG4gICAgXCJzYXhcIjogXCJeMS4yLjFcIixcbiAgICBcInN5bWJvbC10cmVlXCI6IFwiXjMuMi4xXCIsXG4gICAgXCJ0b3VnaC1jb29raWVcIjogXCJeMi4zLjJcIixcbiAgICBcIndlYmlkbC1jb252ZXJzaW9uc1wiOiBcIl40LjAuMFwiLFxuICAgIFwid2hhdHdnLWVuY29kaW5nXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJ3aGF0d2ctdXJsXCI6IFwiXjQuMy4wXCIsXG4gICAgXCJ4bWwtbmFtZS12YWxpZGF0b3JcIjogXCJeMi4wLjFcIlxuICB9LFxuICBcImRlc2NyaXB0aW9uXCI6IFwiQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIG1hbnkgd2ViIHN0YW5kYXJkc1wiLFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJiZW5jaG1hcmtcIjogXCIxLjAuMFwiLFxuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl4xNC4wLjBcIixcbiAgICBcImNoYWlcIjogXCJeMy41LjBcIixcbiAgICBcImNvbG9yc1wiOiBcIl4xLjEuMlwiLFxuICAgIFwiZWNzdGF0aWNcIjogXCJeMi4xLjBcIixcbiAgICBcImVzbGludFwiOiBcIl4zLjE0LjFcIixcbiAgICBcImVzbGludC1wbHVnaW4taHRtbFwiOiBcIl4yLjAuMFwiLFxuICAgIFwiZnMtcmVhZGRpci1yZWN1cnNpdmVcIjogXCJeMS4wLjBcIixcbiAgICBcImthcm1hXCI6IFwiXjEuNC4xXCIsXG4gICAgXCJrYXJtYS1icm93c2VyaWZ5XCI6IFwiXjUuMS4xXCIsXG4gICAgXCJrYXJtYS1jaHJvbWUtbGF1bmNoZXJcIjogXCJeMi4wLjBcIixcbiAgICBcImthcm1hLW1vY2hhXCI6IFwiXjEuMy4wXCIsXG4gICAgXCJrYXJtYS1tb2NoYS13ZWJ3b3JrZXJcIjogXCJeMS4zLjBcIixcbiAgICBcImthcm1hLXNhdWNlLWxhdW5jaGVyXCI6IFwiXjEuMS4wXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4zLjIuMFwiLFxuICAgIFwibW9jaGEtc3VnYXItZnJlZVwiOiBcIl4xLjMuMVwiLFxuICAgIFwibm9kZXVuaXRcIjogXCIwLjEwLjJcIixcbiAgICBcIm9wdGltaXN0XCI6IFwiMC42LjFcIixcbiAgICBcInBvcnRmaW5kZXJcIjogXCJeMS4wLjEzXCIsXG4gICAgXCJxXCI6IFwiXjEuNC4xXCIsXG4gICAgXCJyaW1yYWZcIjogXCJeMi42LjFcIixcbiAgICBcInNlbGVuaXVtLXN0YW5kYWxvbmVcIjogXCJeNi4wLjFcIixcbiAgICBcInNlcnZlci1kZXN0cm95XCI6IFwiXjEuMC4xXCIsXG4gICAgXCJzdFwiOiBcIl4xLjIuMFwiLFxuICAgIFwid2F0Y2hpZnlcIjogXCJeMy45LjBcIixcbiAgICBcIndkXCI6IFwiXjEuMS4zXCIsXG4gICAgXCJ3ZWJpZGwyanNcIjogXCJeNi4xLjBcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHt9LFxuICBcImRpc3RcIjoge1xuICAgIFwic2hhc3VtXCI6IFwiNzc2NWUwMGZkNWMzNTY3ZjM0OTg1YTFjODZmZjQ2NmE2MWRhY2M2YVwiLFxuICAgIFwidGFyYmFsbFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzZG9tLy0vanNkb20tMTAuMS4wLnRnelwiXG4gIH0sXG4gIFwiZ2l0SGVhZFwiOiBcImQwNzg4MzBlYWZkMTdlYzM4YWE4MTZjZjI4M2RhMzllYzUzMTZlMzFcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS90bXB2YXIvanNkb20jcmVhZG1lXCIsXG4gIFwia2V5d29yZHNcIjogW1xuICAgIFwiZG9tXCIsXG4gICAgXCJodG1sXCIsXG4gICAgXCJ3aGF0d2dcIixcbiAgICBcInczY1wiXG4gIF0sXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcIm1haW5cIjogXCIuL2xpYi9hcGkuanNcIixcbiAgXCJtYWludGFpbmVyc1wiOiBbXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwidG1wdmFyXCIsXG4gICAgICBcImVtYWlsXCI6IFwidG1wdmFyQGdtYWlsLmNvbVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJkb21lbmljXCIsXG4gICAgICBcImVtYWlsXCI6IFwiZG9tZW5pY0Bkb21lbmljZGVuaWNvbGEuY29tXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcInNlYm1hc3RlclwiLFxuICAgICAgXCJlbWFpbFwiOiBcInNlYm1hc3RlcjE2QGdtYWlsLmNvbVwiXG4gICAgfVxuICBdLFxuICBcIm5hbWVcIjogXCJqc2RvbVwiLFxuICBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCI6IHt9LFxuICBcInJlYWRtZVwiOiBcIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCFcIixcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImdpdCtodHRwczovL2dpdGh1Yi5jb20vdG1wdmFyL2pzZG9tLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJiZW5jaG1hcmtcIjogXCJub2RlIC4vYmVuY2htYXJrL3J1bm5lclwiLFxuICAgIFwiYmVuY2htYXJrLWJyb3dzZXJcIjogXCJub2RlIC4vYmVuY2htYXJrL3J1bm5lciAtLWJ1bmRsZVwiLFxuICAgIFwiY29udmVydC1pZGxcIjogXCJub2RlIC4vc2NyaXB0cy93ZWJpZGwvY29udmVydFwiLFxuICAgIFwibGludFwiOiBcImVzbGludCAuICYmIGVzbGludCB0ZXN0L3dlYi1wbGF0Zm9ybS10ZXN0cy90by11cHN0cmVhbSAtLWV4dCAuaHRtbFwiLFxuICAgIFwicHJlcHVibGlzaFwiOiBcIm5wbSBydW4gY29udmVydC1pZGxcIixcbiAgICBcInByZXRlc3RcIjogXCJucG0gcnVuIGNvbnZlcnQtaWRsICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZVwiLFxuICAgIFwidGVzdFwiOiBcIm5wbSBydW4gdGVzdC1tb2NoYS1hbGwgJiYgbnBtIHJ1biB0ZXN0LW9sZFwiLFxuICAgIFwidGVzdC1hcGlcIjogXCJtb2NoYSB0ZXN0L2FwaVwiLFxuICAgIFwidGVzdC1icm93c2VyXCI6IFwibnBtIHJ1biB0ZXN0LWthcm1hICYmIG5wbSBydW4gdGVzdC1rYXJtYS13b3JrZXIgJiYgbnBtIHJ1biB0ZXN0LWJyb3dzZXItb2xkXCIsXG4gICAgXCJ0ZXN0LWJyb3dzZXItb2xkXCI6IFwibm9kZSAuL3Rlc3QvYnJvd3Nlci1ydW5uZXJcIixcbiAgICBcInRlc3Qta2FybWFcIjogXCJrYXJtYSBzdGFydCB0ZXN0L2thcm1hLmNvbmYuanNcIixcbiAgICBcInRlc3Qta2FybWEtd29ya2VyXCI6IFwia2FybWEgc3RhcnQgdGVzdC9rYXJtYS13ZWJ3b3JrZXIuY29uZi5qc1wiLFxuICAgIFwidGVzdC1tb2NoYVwiOiBcIm1vY2hhXCIsXG4gICAgXCJ0ZXN0LW1vY2hhLWFsbFwiOiBcIm1vY2hhIHRlc3QvaW5kZXguanNcIixcbiAgICBcInRlc3Qtb2xkXCI6IFwibm9kZSAuL3Rlc3QvcnVubmVyXCIsXG4gICAgXCJ0ZXN0LXR1d3B0XCI6IFwibW9jaGEgdGVzdC93ZWItcGxhdGZvcm0tdGVzdHMvdG8tdXBzdHJlYW0uanNcIixcbiAgICBcInRlc3Qtd3B0XCI6IFwibW9jaGEgdGVzdC93ZWItcGxhdGZvcm0tdGVzdHMvaW5kZXguanNcIixcbiAgICBcInVwZGF0ZS1hdXRob3JzXCI6IFwiZ2l0IGxvZyAtLWZvcm1hdD1cXFwiJWFOIDwlYUU+XFxcIiB8IHNvcnQgLWYgfCB1bmlxID4gQVVUSE9SUy50eHRcIlxuICB9LFxuICBcInZlcnNpb25cIjogXCIxMC4xLjBcIlxufVxuIiwiLyoqXHJcbiAqIEpTT05TY2hlbWEgVmFsaWRhdG9yIC0gVmFsaWRhdGVzIEphdmFTY3JpcHQgb2JqZWN0cyB1c2luZyBKU09OIFNjaGVtYXNcclxuICpcdChodHRwOi8vd3d3Lmpzb24uY29tL2pzb24tc2NoZW1hLXByb3Bvc2FsLylcclxuICpcclxuICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXMgWnlwIFNpdGVQZW4gKHd3dy5zaXRlcGVuLmNvbSlcclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VOU0UudHh0KSBsaWNlbnNlLlxyXG5UbyB1c2UgdGhlIHZhbGlkYXRvciBjYWxsIHRoZSB2YWxpZGF0ZSBmdW5jdGlvbiB3aXRoIGFuIGluc3RhbmNlIG9iamVjdCBhbmQgYW4gb3B0aW9uYWwgc2NoZW1hIG9iamVjdC5cclxuSWYgYSBzY2hlbWEgaXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZS4gSWYgdGhlIGluc3RhbmNlIG9iamVjdCByZWZlcnMgdG8gYSBzY2hlbWEgKHNlbGYtdmFsaWRhdGluZyksXHJcbnRoYXQgc2NoZW1hIHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdGhlIHNjaGVtYSBwYXJhbWV0ZXIgaXMgbm90IG5lY2Vzc2FyeSAoaWYgYm90aCBleGlzdCxcclxuYm90aCB2YWxpZGF0aW9ucyB3aWxsIG9jY3VyKS5cclxuVGhlIHZhbGlkYXRlIG1ldGhvZCB3aWxsIHJldHVybiBhbiBhcnJheSBvZiB2YWxpZGF0aW9uIGVycm9ycy4gSWYgdGhlcmUgYXJlIG5vIGVycm9ycywgdGhlbiBhblxyXG5lbXB0eSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQuIEEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGhhdmUgdHdvIHByb3BlcnRpZXM6XHJcblwicHJvcGVydHlcIiB3aGljaCBpbmRpY2F0ZXMgd2hpY2ggcHJvcGVydHkgaGFkIHRoZSBlcnJvclxyXG5cIm1lc3NhZ2VcIiB3aGljaCBpbmRpY2F0ZXMgd2hhdCB0aGUgZXJyb3Igd2FzXHJcbiAqL1xyXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXHJcbiAgICAgICAgZGVmaW5lKFtdLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWN0b3J5KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XHJcbiAgICAgICAgLy8gTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0XHJcbiAgICAgICAgLy8gb25seSBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMsXHJcbiAgICAgICAgLy8gbGlrZSBOb2RlLlxyXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHNcclxuICAgICAgICByb290Lmpzb25TY2hlbWEgPSBmYWN0b3J5KCk7XHJcbiAgICB9XHJcbn0odGhpcywgZnVuY3Rpb24gKCkgey8vIHNldHVwIHByaW1pdGl2ZSBjbGFzc2VzIHRvIGJlIEpTT04gU2NoZW1hIHR5cGVzXHJcbnZhciBleHBvcnRzID0gdmFsaWRhdGVcclxuZXhwb3J0cy5JbnRlZ2VyID0ge3R5cGU6XCJpbnRlZ2VyXCJ9O1xyXG52YXIgcHJpbWl0aXZlQ29uc3RydWN0b3JzID0ge1xyXG5cdFN0cmluZzogU3RyaW5nLFxyXG5cdEJvb2xlYW46IEJvb2xlYW4sXHJcblx0TnVtYmVyOiBOdW1iZXIsXHJcblx0T2JqZWN0OiBPYmplY3QsXHJcblx0QXJyYXk6IEFycmF5LFxyXG5cdERhdGU6IERhdGVcclxufVxyXG5leHBvcnRzLnZhbGlkYXRlID0gdmFsaWRhdGU7XHJcbmZ1bmN0aW9uIHZhbGlkYXRlKC8qQW55Ki9pbnN0YW5jZSwvKk9iamVjdCovc2NoZW1hKSB7XHJcblx0XHQvLyBTdW1tYXJ5OlxyXG5cdFx0Ly8gIFx0VG8gdXNlIHRoZSB2YWxpZGF0b3IgY2FsbCBKU09OU2NoZW1hLnZhbGlkYXRlIHdpdGggYW4gaW5zdGFuY2Ugb2JqZWN0IGFuZCBhbiBvcHRpb25hbCBzY2hlbWEgb2JqZWN0LlxyXG5cdFx0Ly8gXHRcdElmIGEgc2NoZW1hIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gdmFsaWRhdGUuIElmIHRoZSBpbnN0YW5jZSBvYmplY3QgcmVmZXJzIHRvIGEgc2NoZW1hIChzZWxmLXZhbGlkYXRpbmcpLFxyXG5cdFx0Ly8gXHRcdHRoYXQgc2NoZW1hIHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdGhlIHNjaGVtYSBwYXJhbWV0ZXIgaXMgbm90IG5lY2Vzc2FyeSAoaWYgYm90aCBleGlzdCxcclxuXHRcdC8vIFx0XHRib3RoIHZhbGlkYXRpb25zIHdpbGwgb2NjdXIpLlxyXG5cdFx0Ly8gXHRcdFRoZSB2YWxpZGF0ZSBtZXRob2Qgd2lsbCByZXR1cm4gYW4gb2JqZWN0IHdpdGggdHdvIHByb3BlcnRpZXM6XHJcblx0XHQvLyBcdFx0XHR2YWxpZDogQSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGluc3RhbmNlIGlzIHZhbGlkIGJ5IHRoZSBzY2hlbWFcclxuXHRcdC8vIFx0XHRcdGVycm9yczogQW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMuIElmIHRoZXJlIGFyZSBubyBlcnJvcnMsIHRoZW4gYW5cclxuXHRcdC8vIFx0XHRcdFx0XHRlbXB0eSBsaXN0IHdpbGwgYmUgcmV0dXJuZWQuIEEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGhhdmUgdHdvIHByb3BlcnRpZXM6XHJcblx0XHQvLyBcdFx0XHRcdFx0XHRwcm9wZXJ0eTogd2hpY2ggaW5kaWNhdGVzIHdoaWNoIHByb3BlcnR5IGhhZCB0aGUgZXJyb3JcclxuXHRcdC8vIFx0XHRcdFx0XHRcdG1lc3NhZ2U6IHdoaWNoIGluZGljYXRlcyB3aGF0IHRoZSBlcnJvciB3YXNcclxuXHRcdC8vXHJcblx0XHRyZXR1cm4gdmFsaWRhdGUoaW5zdGFuY2UsIHNjaGVtYSwge2NoYW5naW5nOiBmYWxzZX0pOy8vLCBjb2VyY2U6IGZhbHNlLCBleGlzdGluZ09ubHk6IGZhbHNlfSk7XHJcblx0fTtcclxuZXhwb3J0cy5jaGVja1Byb3BlcnR5Q2hhbmdlID0gZnVuY3Rpb24oLypBbnkqL3ZhbHVlLC8qT2JqZWN0Ki9zY2hlbWEsIC8qU3RyaW5nKi9wcm9wZXJ0eSkge1xyXG5cdFx0Ly8gU3VtbWFyeTpcclxuXHRcdC8vIFx0XHRUaGUgY2hlY2tQcm9wZXJ0eUNoYW5nZSBtZXRob2Qgd2lsbCBjaGVjayB0byBzZWUgaWYgYW4gdmFsdWUgY2FuIGxlZ2FsbHkgYmUgaW4gcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gc2NoZW1hXHJcblx0XHQvLyBcdFx0VGhpcyBpcyBzbGlnaHRseSBkaWZmZXJlbnQgdGhhbiB0aGUgdmFsaWRhdGUgbWV0aG9kIGluIHRoYXQgaXQgd2lsbCBmYWlsIGlmIHRoZSBzY2hlbWEgaXMgcmVhZG9ubHkgYW5kIGl0IHdpbGxcclxuXHRcdC8vIFx0XHRub3QgY2hlY2sgZm9yIHNlbGYtdmFsaWRhdGlvbiwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBwYXNzZWQgaW4gdmFsdWUgaXMgYWxyZWFkeSBpbnRlcm5hbGx5IHZhbGlkLlxyXG5cdFx0Ly8gXHRcdFRoZSBjaGVja1Byb3BlcnR5Q2hhbmdlIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgc2FtZSBvYmplY3QgdHlwZSBhcyB2YWxpZGF0ZSwgc2VlIEpTT05TY2hlbWEudmFsaWRhdGUgZm9yXHJcblx0XHQvLyBcdFx0aW5mb3JtYXRpb24uXHJcblx0XHQvL1xyXG5cdFx0cmV0dXJuIHZhbGlkYXRlKHZhbHVlLCBzY2hlbWEsIHtjaGFuZ2luZzogcHJvcGVydHkgfHwgXCJwcm9wZXJ0eVwifSk7XHJcblx0fTtcclxudmFyIHZhbGlkYXRlID0gZXhwb3J0cy5fdmFsaWRhdGUgPSBmdW5jdGlvbigvKkFueSovaW5zdGFuY2UsLypPYmplY3QqL3NjaGVtYSwvKk9iamVjdCovb3B0aW9ucykge1xyXG5cclxuXHRpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcclxuXHR2YXIgX2NoYW5naW5nID0gb3B0aW9ucy5jaGFuZ2luZztcclxuXHJcblx0ZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWEpe1xyXG5cdFx0cmV0dXJuIHNjaGVtYS50eXBlIHx8IChwcmltaXRpdmVDb25zdHJ1Y3RvcnNbc2NoZW1hLm5hbWVdID09IHNjaGVtYSAmJiBzY2hlbWEubmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuXHR9XHJcblx0dmFyIGVycm9ycyA9IFtdO1xyXG5cdC8vIHZhbGlkYXRlIGEgdmFsdWUgYWdhaW5zdCBhIHByb3BlcnR5IGRlZmluaXRpb25cclxuXHRmdW5jdGlvbiBjaGVja1Byb3AodmFsdWUsIHNjaGVtYSwgcGF0aCxpKXtcclxuXHJcblx0XHR2YXIgbDtcclxuXHRcdHBhdGggKz0gcGF0aCA/IHR5cGVvZiBpID09ICdudW1iZXInID8gJ1snICsgaSArICddJyA6IHR5cGVvZiBpID09ICd1bmRlZmluZWQnID8gJycgOiAnLicgKyBpIDogaTtcclxuXHRcdGZ1bmN0aW9uIGFkZEVycm9yKG1lc3NhZ2Upe1xyXG5cdFx0XHRlcnJvcnMucHVzaCh7cHJvcGVydHk6cGF0aCxtZXNzYWdlOm1lc3NhZ2V9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZigodHlwZW9mIHNjaGVtYSAhPSAnb2JqZWN0JyB8fCBzY2hlbWEgaW5zdGFuY2VvZiBBcnJheSkgJiYgKHBhdGggfHwgdHlwZW9mIHNjaGVtYSAhPSAnZnVuY3Rpb24nKSAmJiAhKHNjaGVtYSAmJiBnZXRUeXBlKHNjaGVtYSkpKXtcclxuXHRcdFx0aWYodHlwZW9mIHNjaGVtYSA9PSAnZnVuY3Rpb24nKXtcclxuXHRcdFx0XHRpZighKHZhbHVlIGluc3RhbmNlb2Ygc2NoZW1hKSl7XHJcblx0XHRcdFx0XHRhZGRFcnJvcihcImlzIG5vdCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MvY29uc3RydWN0b3IgXCIgKyBzY2hlbWEubmFtZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9ZWxzZSBpZihzY2hlbWEpe1xyXG5cdFx0XHRcdGFkZEVycm9yKFwiSW52YWxpZCBzY2hlbWEvcHJvcGVydHkgZGVmaW5pdGlvbiBcIiArIHNjaGVtYSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0XHRpZihfY2hhbmdpbmcgJiYgc2NoZW1hLnJlYWRvbmx5KXtcclxuXHRcdFx0YWRkRXJyb3IoXCJpcyBhIHJlYWRvbmx5IGZpZWxkLCBpdCBjYW4gbm90IGJlIGNoYW5nZWRcIik7XHJcblx0XHR9XHJcblx0XHRpZihzY2hlbWFbJ2V4dGVuZHMnXSl7IC8vIGlmIGl0IGV4dGVuZHMgYW5vdGhlciBzY2hlbWEsIGl0IG11c3QgcGFzcyB0aGF0IHNjaGVtYSBhcyB3ZWxsXHJcblx0XHRcdGNoZWNrUHJvcCh2YWx1ZSxzY2hlbWFbJ2V4dGVuZHMnXSxwYXRoLGkpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gdmFsaWRhdGUgYSB2YWx1ZSBhZ2FpbnN0IGEgdHlwZSBkZWZpbml0aW9uXHJcblx0XHRmdW5jdGlvbiBjaGVja1R5cGUodHlwZSx2YWx1ZSl7XHJcblx0XHRcdGlmKHR5cGUpe1xyXG5cdFx0XHRcdGlmKHR5cGVvZiB0eXBlID09ICdzdHJpbmcnICYmIHR5cGUgIT0gJ2FueScgJiZcclxuXHRcdFx0XHRcdFx0KHR5cGUgPT0gJ251bGwnID8gdmFsdWUgIT09IG51bGwgOiB0eXBlb2YgdmFsdWUgIT0gdHlwZSkgJiZcclxuXHRcdFx0XHRcdFx0ISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIHR5cGUgPT0gJ2FycmF5JykgJiZcclxuXHRcdFx0XHRcdFx0ISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdHlwZSA9PSAnZGF0ZScpICYmXHJcblx0XHRcdFx0XHRcdCEodHlwZSA9PSAnaW50ZWdlcicgJiYgdmFsdWUlMT09PTApKXtcclxuXHRcdFx0XHRcdHJldHVybiBbe3Byb3BlcnR5OnBhdGgsbWVzc2FnZToodHlwZW9mIHZhbHVlKSArIFwiIHZhbHVlIGZvdW5kLCBidXQgYSBcIiArIHR5cGUgKyBcIiBpcyByZXF1aXJlZFwifV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHR5cGUgaW5zdGFuY2VvZiBBcnJheSl7XHJcblx0XHRcdFx0XHR2YXIgdW5pb25FcnJvcnM9W107XHJcblx0XHRcdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgdHlwZS5sZW5ndGg7IGorKyl7IC8vIGEgdW5pb24gdHlwZVxyXG5cdFx0XHRcdFx0XHRpZighKHVuaW9uRXJyb3JzPWNoZWNrVHlwZSh0eXBlW2pdLHZhbHVlKSkubGVuZ3RoKXtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYodW5pb25FcnJvcnMubGVuZ3RoKXtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHVuaW9uRXJyb3JzO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1lbHNlIGlmKHR5cGVvZiB0eXBlID09ICdvYmplY3QnKXtcclxuXHRcdFx0XHRcdHZhciBwcmlvckVycm9ycyA9IGVycm9ycztcclxuXHRcdFx0XHRcdGVycm9ycyA9IFtdO1xyXG5cdFx0XHRcdFx0Y2hlY2tQcm9wKHZhbHVlLHR5cGUscGF0aCk7XHJcblx0XHRcdFx0XHR2YXIgdGhlc2VFcnJvcnMgPSBlcnJvcnM7XHJcblx0XHRcdFx0XHRlcnJvcnMgPSBwcmlvckVycm9ycztcclxuXHRcdFx0XHRcdHJldHVybiB0aGVzZUVycm9ycztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cdFx0fVxyXG5cdFx0aWYodmFsdWUgPT09IHVuZGVmaW5lZCl7XHJcblx0XHRcdGlmKHNjaGVtYS5yZXF1aXJlZCl7XHJcblx0XHRcdFx0YWRkRXJyb3IoXCJpcyBtaXNzaW5nIGFuZCBpdCBpcyByZXF1aXJlZFwiKTtcclxuXHRcdFx0fVxyXG5cdFx0fWVsc2V7XHJcblx0XHRcdGVycm9ycyA9IGVycm9ycy5jb25jYXQoY2hlY2tUeXBlKGdldFR5cGUoc2NoZW1hKSx2YWx1ZSkpO1xyXG5cdFx0XHRpZihzY2hlbWEuZGlzYWxsb3cgJiYgIWNoZWNrVHlwZShzY2hlbWEuZGlzYWxsb3csdmFsdWUpLmxlbmd0aCl7XHJcblx0XHRcdFx0YWRkRXJyb3IoXCIgZGlzYWxsb3dlZCB2YWx1ZSB3YXMgbWF0Y2hlZFwiKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZih2YWx1ZSAhPT0gbnVsbCl7XHJcblx0XHRcdFx0aWYodmFsdWUgaW5zdGFuY2VvZiBBcnJheSl7XHJcblx0XHRcdFx0XHRpZihzY2hlbWEuaXRlbXMpe1xyXG5cdFx0XHRcdFx0XHR2YXIgaXRlbXNJc0FycmF5ID0gc2NoZW1hLml0ZW1zIGluc3RhbmNlb2YgQXJyYXk7XHJcblx0XHRcdFx0XHRcdHZhciBwcm9wRGVmID0gc2NoZW1hLml0ZW1zO1xyXG5cdFx0XHRcdFx0XHRmb3IgKGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSArPSAxKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW1zSXNBcnJheSlcclxuXHRcdFx0XHRcdFx0XHRcdHByb3BEZWYgPSBzY2hlbWEuaXRlbXNbaV07XHJcblx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMuY29lcmNlKVxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVbaV0gPSBvcHRpb25zLmNvZXJjZSh2YWx1ZVtpXSwgcHJvcERlZik7XHJcblx0XHRcdFx0XHRcdFx0ZXJyb3JzLmNvbmNhdChjaGVja1Byb3AodmFsdWVbaV0scHJvcERlZixwYXRoLGkpKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYoc2NoZW1hLm1pbkl0ZW1zICYmIHZhbHVlLmxlbmd0aCA8IHNjaGVtYS5taW5JdGVtcyl7XHJcblx0XHRcdFx0XHRcdGFkZEVycm9yKFwiVGhlcmUgbXVzdCBiZSBhIG1pbmltdW0gb2YgXCIgKyBzY2hlbWEubWluSXRlbXMgKyBcIiBpbiB0aGUgYXJyYXlcIik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZihzY2hlbWEubWF4SXRlbXMgJiYgdmFsdWUubGVuZ3RoID4gc2NoZW1hLm1heEl0ZW1zKXtcclxuXHRcdFx0XHRcdFx0YWRkRXJyb3IoXCJUaGVyZSBtdXN0IGJlIGEgbWF4aW11bSBvZiBcIiArIHNjaGVtYS5tYXhJdGVtcyArIFwiIGluIHRoZSBhcnJheVwiKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9ZWxzZSBpZihzY2hlbWEucHJvcGVydGllcyB8fCBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMpe1xyXG5cdFx0XHRcdFx0ZXJyb3JzLmNvbmNhdChjaGVja09iaih2YWx1ZSwgc2NoZW1hLnByb3BlcnRpZXMsIHBhdGgsIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcykpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZihzY2hlbWEucGF0dGVybiAmJiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgIXZhbHVlLm1hdGNoKHNjaGVtYS5wYXR0ZXJuKSl7XHJcblx0XHRcdFx0XHRhZGRFcnJvcihcImRvZXMgbm90IG1hdGNoIHRoZSByZWdleCBwYXR0ZXJuIFwiICsgc2NoZW1hLnBhdHRlcm4pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZihzY2hlbWEubWF4TGVuZ3RoICYmIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiBzY2hlbWEubWF4TGVuZ3RoKXtcclxuXHRcdFx0XHRcdGFkZEVycm9yKFwibWF5IG9ubHkgYmUgXCIgKyBzY2hlbWEubWF4TGVuZ3RoICsgXCIgY2hhcmFjdGVycyBsb25nXCIpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZihzY2hlbWEubWluTGVuZ3RoICYmIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPCBzY2hlbWEubWluTGVuZ3RoKXtcclxuXHRcdFx0XHRcdGFkZEVycm9yKFwibXVzdCBiZSBhdCBsZWFzdCBcIiArIHNjaGVtYS5taW5MZW5ndGggKyBcIiBjaGFyYWN0ZXJzIGxvbmdcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHR5cGVvZiBzY2hlbWEubWluaW11bSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSA9PSB0eXBlb2Ygc2NoZW1hLm1pbmltdW0gJiZcclxuXHRcdFx0XHRcdFx0c2NoZW1hLm1pbmltdW0gPiB2YWx1ZSl7XHJcblx0XHRcdFx0XHRhZGRFcnJvcihcIm11c3QgaGF2ZSBhIG1pbmltdW0gdmFsdWUgb2YgXCIgKyBzY2hlbWEubWluaW11bSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHR5cGVvZiBzY2hlbWEubWF4aW11bSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSA9PSB0eXBlb2Ygc2NoZW1hLm1heGltdW0gJiZcclxuXHRcdFx0XHRcdFx0c2NoZW1hLm1heGltdW0gPCB2YWx1ZSl7XHJcblx0XHRcdFx0XHRhZGRFcnJvcihcIm11c3QgaGF2ZSBhIG1heGltdW0gdmFsdWUgb2YgXCIgKyBzY2hlbWEubWF4aW11bSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHNjaGVtYVsnZW51bSddKXtcclxuXHRcdFx0XHRcdHZhciBlbnVtZXIgPSBzY2hlbWFbJ2VudW0nXTtcclxuXHRcdFx0XHRcdGwgPSBlbnVtZXIubGVuZ3RoO1xyXG5cdFx0XHRcdFx0dmFyIGZvdW5kO1xyXG5cdFx0XHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGw7IGorKyl7XHJcblx0XHRcdFx0XHRcdGlmKGVudW1lcltqXT09PXZhbHVlKXtcclxuXHRcdFx0XHRcdFx0XHRmb3VuZD0xO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZighZm91bmQpe1xyXG5cdFx0XHRcdFx0XHRhZGRFcnJvcihcImRvZXMgbm90IGhhdmUgYSB2YWx1ZSBpbiB0aGUgZW51bWVyYXRpb24gXCIgKyBlbnVtZXIuam9pbihcIiwgXCIpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYodHlwZW9mIHNjaGVtYS5tYXhEZWNpbWFsID09ICdudW1iZXInICYmXHJcblx0XHRcdFx0XHQodmFsdWUudG9TdHJpbmcoKS5tYXRjaChuZXcgUmVnRXhwKFwiXFxcXC5bMC05XXtcIiArIChzY2hlbWEubWF4RGVjaW1hbCArIDEpICsgXCIsfVwiKSkpKXtcclxuXHRcdFx0XHRcdGFkZEVycm9yKFwibWF5IG9ubHkgaGF2ZSBcIiArIHNjaGVtYS5tYXhEZWNpbWFsICsgXCIgZGlnaXRzIG9mIGRlY2ltYWwgcGxhY2VzXCIpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cdC8vIHZhbGlkYXRlIGFuIG9iamVjdCBhZ2FpbnN0IGEgc2NoZW1hXHJcblx0ZnVuY3Rpb24gY2hlY2tPYmooaW5zdGFuY2Usb2JqVHlwZURlZixwYXRoLGFkZGl0aW9uYWxQcm9wKXtcclxuXHJcblx0XHRpZih0eXBlb2Ygb2JqVHlwZURlZiA9PSdvYmplY3QnKXtcclxuXHRcdFx0aWYodHlwZW9mIGluc3RhbmNlICE9ICdvYmplY3QnIHx8IGluc3RhbmNlIGluc3RhbmNlb2YgQXJyYXkpe1xyXG5cdFx0XHRcdGVycm9ycy5wdXNoKHtwcm9wZXJ0eTpwYXRoLG1lc3NhZ2U6XCJhbiBvYmplY3QgaXMgcmVxdWlyZWRcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0XHRmb3IodmFyIGkgaW4gb2JqVHlwZURlZil7IFxyXG5cdFx0XHRcdGlmKG9ialR5cGVEZWYuaGFzT3duUHJvcGVydHkoaSkpe1xyXG5cdFx0XHRcdFx0dmFyIHZhbHVlID0gaW5zdGFuY2VbaV07XHJcblx0XHRcdFx0XHQvLyBza2lwIF9ub3RfIHNwZWNpZmllZCBwcm9wZXJ0aWVzXHJcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmV4aXN0aW5nT25seSkgY29udGludWU7XHJcblx0XHRcdFx0XHR2YXIgcHJvcERlZiA9IG9ialR5cGVEZWZbaV07XHJcblx0XHRcdFx0XHQvLyBzZXQgZGVmYXVsdFxyXG5cdFx0XHRcdFx0aWYodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBwcm9wRGVmW1wiZGVmYXVsdFwiXSl7XHJcblx0XHRcdFx0XHRcdHZhbHVlID0gaW5zdGFuY2VbaV0gPSBwcm9wRGVmW1wiZGVmYXVsdFwiXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmKG9wdGlvbnMuY29lcmNlICYmIGkgaW4gaW5zdGFuY2Upe1xyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGluc3RhbmNlW2ldID0gb3B0aW9ucy5jb2VyY2UodmFsdWUsIHByb3BEZWYpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y2hlY2tQcm9wKHZhbHVlLHByb3BEZWYscGF0aCxpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGZvcihpIGluIGluc3RhbmNlKXtcclxuXHRcdFx0aWYoaW5zdGFuY2UuaGFzT3duUHJvcGVydHkoaSkgJiYgIShpLmNoYXJBdCgwKSA9PSAnXycgJiYgaS5jaGFyQXQoMSkgPT0gJ18nKSAmJiBvYmpUeXBlRGVmICYmICFvYmpUeXBlRGVmW2ldICYmIGFkZGl0aW9uYWxQcm9wPT09ZmFsc2Upe1xyXG5cdFx0XHRcdGlmIChvcHRpb25zLmZpbHRlcikge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIGluc3RhbmNlW2ldO1xyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGVycm9ycy5wdXNoKHtwcm9wZXJ0eTpwYXRoLG1lc3NhZ2U6KHR5cGVvZiB2YWx1ZSkgKyBcIlRoZSBwcm9wZXJ0eSBcIiArIGkgK1xyXG5cdFx0XHRcdFx0XHRcIiBpcyBub3QgZGVmaW5lZCBpbiB0aGUgc2NoZW1hIGFuZCB0aGUgc2NoZW1hIGRvZXMgbm90IGFsbG93IGFkZGl0aW9uYWwgcHJvcGVydGllc1wifSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHZhciByZXF1aXJlcyA9IG9ialR5cGVEZWYgJiYgb2JqVHlwZURlZltpXSAmJiBvYmpUeXBlRGVmW2ldLnJlcXVpcmVzO1xyXG5cdFx0XHRpZihyZXF1aXJlcyAmJiAhKHJlcXVpcmVzIGluIGluc3RhbmNlKSl7XHJcblx0XHRcdFx0ZXJyb3JzLnB1c2goe3Byb3BlcnR5OnBhdGgsbWVzc2FnZTpcInRoZSBwcmVzZW5jZSBvZiB0aGUgcHJvcGVydHkgXCIgKyBpICsgXCIgcmVxdWlyZXMgdGhhdCBcIiArIHJlcXVpcmVzICsgXCIgYWxzbyBiZSBwcmVzZW50XCJ9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YWx1ZSA9IGluc3RhbmNlW2ldO1xyXG5cdFx0XHRpZihhZGRpdGlvbmFsUHJvcCAmJiAoIShvYmpUeXBlRGVmICYmIHR5cGVvZiBvYmpUeXBlRGVmID09ICdvYmplY3QnKSB8fCAhKGkgaW4gb2JqVHlwZURlZikpKXtcclxuXHRcdFx0XHRpZihvcHRpb25zLmNvZXJjZSl7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IGluc3RhbmNlW2ldID0gb3B0aW9ucy5jb2VyY2UodmFsdWUsIGFkZGl0aW9uYWxQcm9wKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y2hlY2tQcm9wKHZhbHVlLGFkZGl0aW9uYWxQcm9wLHBhdGgsaSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYoIV9jaGFuZ2luZyAmJiB2YWx1ZSAmJiB2YWx1ZS4kc2NoZW1hKXtcclxuXHRcdFx0XHRlcnJvcnMgPSBlcnJvcnMuY29uY2F0KGNoZWNrUHJvcCh2YWx1ZSx2YWx1ZS4kc2NoZW1hLHBhdGgsaSkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZXJyb3JzO1xyXG5cdH1cclxuXHRpZihzY2hlbWEpe1xyXG5cdFx0Y2hlY2tQcm9wKGluc3RhbmNlLHNjaGVtYSwnJyxfY2hhbmdpbmcgfHwgJycpO1xyXG5cdH1cclxuXHRpZighX2NoYW5naW5nICYmIGluc3RhbmNlICYmIGluc3RhbmNlLiRzY2hlbWEpe1xyXG5cdFx0Y2hlY2tQcm9wKGluc3RhbmNlLGluc3RhbmNlLiRzY2hlbWEsJycsJycpO1xyXG5cdH1cclxuXHRyZXR1cm4ge3ZhbGlkOiFlcnJvcnMubGVuZ3RoLGVycm9yczplcnJvcnN9O1xyXG59O1xyXG5leHBvcnRzLm11c3RCZVZhbGlkID0gZnVuY3Rpb24ocmVzdWx0KXtcclxuXHQvL1x0c3VtbWFyeTpcclxuXHQvL1x0XHRUaGlzIGNoZWNrcyB0byBlbnN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIHZhbGlkIGFuZCB3aWxsIHRocm93IGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UgaWYgaXQgaXMgbm90XHJcblx0Ly8gcmVzdWx0OiB0aGUgcmVzdWx0IHJldHVybmVkIGZyb20gY2hlY2tQcm9wZXJ0eUNoYW5nZSBvciB2YWxpZGF0ZVxyXG5cdGlmKCFyZXN1bHQudmFsaWQpe1xyXG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihyZXN1bHQuZXJyb3JzLm1hcChmdW5jdGlvbihlcnJvcil7cmV0dXJuIFwiZm9yIHByb3BlcnR5IFwiICsgZXJyb3IucHJvcGVydHkgKyAnOiAnICsgZXJyb3IubWVzc2FnZTt9KS5qb2luKFwiLCBcXG5cIikpO1xyXG5cdH1cclxufVxyXG5cclxucmV0dXJuIGV4cG9ydHM7XHJcbn0pKTtcclxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gc3RyaW5naWZ5XG5leHBvcnRzLmdldFNlcmlhbGl6ZSA9IHNlcmlhbGl6ZXJcblxuZnVuY3Rpb24gc3RyaW5naWZ5KG9iaiwgcmVwbGFjZXIsIHNwYWNlcywgY3ljbGVSZXBsYWNlcikge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBzZXJpYWxpemVyKHJlcGxhY2VyLCBjeWNsZVJlcGxhY2VyKSwgc3BhY2VzKVxufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVyKHJlcGxhY2VyLCBjeWNsZVJlcGxhY2VyKSB7XG4gIHZhciBzdGFjayA9IFtdLCBrZXlzID0gW11cblxuICBpZiAoY3ljbGVSZXBsYWNlciA9PSBudWxsKSBjeWNsZVJlcGxhY2VyID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIGlmIChzdGFja1swXSA9PT0gdmFsdWUpIHJldHVybiBcIltDaXJjdWxhciB+XVwiXG4gICAgcmV0dXJuIFwiW0NpcmN1bGFyIH4uXCIgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKFwiLlwiKSArIFwiXVwiXG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgdGhpc1BvcyA9IHN0YWNrLmluZGV4T2YodGhpcylcbiAgICAgIH50aGlzUG9zID8gc3RhY2suc3BsaWNlKHRoaXNQb3MgKyAxKSA6IHN0YWNrLnB1c2godGhpcylcbiAgICAgIH50aGlzUG9zID8ga2V5cy5zcGxpY2UodGhpc1BvcywgSW5maW5pdHksIGtleSkgOiBrZXlzLnB1c2goa2V5KVxuICAgICAgaWYgKH5zdGFjay5pbmRleE9mKHZhbHVlKSkgdmFsdWUgPSBjeWNsZVJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSlcbiAgICB9XG4gICAgZWxzZSBzdGFjay5wdXNoKHZhbHVlKVxuXG4gICAgcmV0dXJuIHJlcGxhY2VyID09IG51bGwgPyB2YWx1ZSA6IHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSlcbiAgfVxufVxuIiwiZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vbGliL3BhcnNlJyk7XG5leHBvcnRzLnN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vbGliL3N0cmluZ2lmeScpO1xuIiwidmFyIGF0LCAvLyBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgY2gsIC8vIFRoZSBjdXJyZW50IGNoYXJhY3RlclxuICAgIGVzY2FwZWUgPSB7XG4gICAgICAgICdcIic6ICAnXCInLFxuICAgICAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAgICAgJy8nOiAgJy8nLFxuICAgICAgICBiOiAgICAnXFxiJyxcbiAgICAgICAgZjogICAgJ1xcZicsXG4gICAgICAgIG46ICAgICdcXG4nLFxuICAgICAgICByOiAgICAnXFxyJyxcbiAgICAgICAgdDogICAgJ1xcdCdcbiAgICB9LFxuICAgIHRleHQsXG5cbiAgICBlcnJvciA9IGZ1bmN0aW9uIChtKSB7XG4gICAgICAgIC8vIENhbGwgZXJyb3Igd2hlbiBzb21ldGhpbmcgaXMgd3JvbmcuXG4gICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIG5hbWU6ICAgICdTeW50YXhFcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBtLFxuICAgICAgICAgICAgYXQ6ICAgICAgYXQsXG4gICAgICAgICAgICB0ZXh0OiAgICB0ZXh0XG4gICAgICAgIH07XG4gICAgfSxcbiAgICBcbiAgICBuZXh0ID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgLy8gSWYgYSBjIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdmVyaWZ5IHRoYXQgaXQgbWF0Y2hlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChjICYmIGMgIT09IGNoKSB7XG4gICAgICAgICAgICBlcnJvcihcIkV4cGVjdGVkICdcIiArIGMgKyBcIicgaW5zdGVhZCBvZiAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gR2V0IHRoZSBuZXh0IGNoYXJhY3Rlci4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjaGFyYWN0ZXJzLFxuICAgICAgICAvLyByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgICAgXG4gICAgICAgIGNoID0gdGV4dC5jaGFyQXQoYXQpO1xuICAgICAgICBhdCArPSAxO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgfSxcbiAgICBcbiAgICBudW1iZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFBhcnNlIGEgbnVtYmVyIHZhbHVlLlxuICAgICAgICB2YXIgbnVtYmVyLFxuICAgICAgICAgICAgc3RyaW5nID0gJyc7XG4gICAgICAgIFxuICAgICAgICBpZiAoY2ggPT09ICctJykge1xuICAgICAgICAgICAgc3RyaW5nID0gJy0nO1xuICAgICAgICAgICAgbmV4dCgnLScpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoID09PSAnLicpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSAnLic7XG4gICAgICAgICAgICB3aGlsZSAobmV4dCgpICYmIGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykge1xuICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnLScgfHwgY2ggPT09ICcrJykge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbnVtYmVyID0gK3N0cmluZztcbiAgICAgICAgaWYgKCFpc0Zpbml0ZShudW1iZXIpKSB7XG4gICAgICAgICAgICBlcnJvcihcIkJhZCBudW1iZXJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBcbiAgICBzdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFBhcnNlIGEgc3RyaW5nIHZhbHVlLlxuICAgICAgICB2YXIgaGV4LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHN0cmluZyA9ICcnLFxuICAgICAgICAgICAgdWZmZmY7XG4gICAgICAgIFxuICAgICAgICAvLyBXaGVuIHBhcnNpbmcgZm9yIHN0cmluZyB2YWx1ZXMsIHdlIG11c3QgbG9vayBmb3IgXCIgYW5kIFxcIGNoYXJhY3RlcnMuXG4gICAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICAgICAgd2hpbGUgKG5leHQoKSkge1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVmZmZmID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXggPSBwYXJzZUludChuZXh0KCksIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGhleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXNjYXBlZVtjaF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gZXNjYXBlZVtjaF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IoXCJCYWQgc3RyaW5nXCIpO1xuICAgIH0sXG5cbiAgICB3aGl0ZSA9IGZ1bmN0aW9uICgpIHtcblxuLy8gU2tpcCB3aGl0ZXNwYWNlLlxuXG4gICAgICAgIHdoaWxlIChjaCAmJiBjaCA8PSAnICcpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB3b3JkID0gZnVuY3Rpb24gKCkge1xuXG4vLyB0cnVlLCBmYWxzZSwgb3IgbnVsbC5cblxuICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgbmV4dCgndCcpO1xuICAgICAgICAgICAgbmV4dCgncicpO1xuICAgICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgICAgbmV4dCgnZicpO1xuICAgICAgICAgICAgbmV4dCgnYScpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgbmV4dCgncycpO1xuICAgICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlICduJzpcbiAgICAgICAgICAgIG5leHQoJ24nKTtcbiAgICAgICAgICAgIG5leHQoJ3UnKTtcbiAgICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yKFwiVW5leHBlY3RlZCAnXCIgKyBjaCArIFwiJ1wiKTtcbiAgICB9LFxuXG4gICAgdmFsdWUsICAvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSB2YWx1ZSBmdW5jdGlvbi5cblxuICAgIGFycmF5ID0gZnVuY3Rpb24gKCkge1xuXG4vLyBQYXJzZSBhbiBhcnJheSB2YWx1ZS5cblxuICAgICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgICBpZiAoY2ggPT09ICdbJykge1xuICAgICAgICAgICAgbmV4dCgnWycpO1xuICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTsgICAvLyBlbXB0eSBhcnJheVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSgpKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBhcnJheVwiKTtcbiAgICB9LFxuXG4gICAgb2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuXG4vLyBQYXJzZSBhbiBvYmplY3QgdmFsdWUuXG5cbiAgICAgICAgdmFyIGtleSxcbiAgICAgICAgICAgIG9iamVjdCA9IHt9O1xuXG4gICAgICAgIGlmIChjaCA9PT0gJ3snKSB7XG4gICAgICAgICAgICBuZXh0KCd7Jyk7XG4gICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICBuZXh0KCd9Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsgICAvLyBlbXB0eSBvYmplY3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjaCkge1xuICAgICAgICAgICAgICAgIGtleSA9IHN0cmluZygpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgbmV4dCgnOicpO1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IoJ0R1cGxpY2F0ZSBrZXkgXCInICsga2V5ICsgJ1wiJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IoXCJCYWQgb2JqZWN0XCIpO1xuICAgIH07XG5cbnZhbHVlID0gZnVuY3Rpb24gKCkge1xuXG4vLyBQYXJzZSBhIEpTT04gdmFsdWUuIEl0IGNvdWxkIGJlIGFuIG9iamVjdCwgYW4gYXJyYXksIGEgc3RyaW5nLCBhIG51bWJlcixcbi8vIG9yIGEgd29yZC5cblxuICAgIHdoaXRlKCk7XG4gICAgc3dpdGNoIChjaCkge1xuICAgIGNhc2UgJ3snOlxuICAgICAgICByZXR1cm4gb2JqZWN0KCk7XG4gICAgY2FzZSAnWyc6XG4gICAgICAgIHJldHVybiBhcnJheSgpO1xuICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgcmV0dXJuIHN0cmluZygpO1xuICAgIGNhc2UgJy0nOlxuICAgICAgICByZXR1cm4gbnVtYmVyKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNoID49ICcwJyAmJiBjaCA8PSAnOScgPyBudW1iZXIoKSA6IHdvcmQoKTtcbiAgICB9XG59O1xuXG4vLyBSZXR1cm4gdGhlIGpzb25fcGFyc2UgZnVuY3Rpb24uIEl0IHdpbGwgaGF2ZSBhY2Nlc3MgdG8gYWxsIG9mIHRoZSBhYm92ZVxuLy8gZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNvdXJjZSwgcmV2aXZlcikge1xuICAgIHZhciByZXN1bHQ7XG4gICAgXG4gICAgdGV4dCA9IHNvdXJjZTtcbiAgICBhdCA9IDA7XG4gICAgY2ggPSAnICc7XG4gICAgcmVzdWx0ID0gdmFsdWUoKTtcbiAgICB3aGl0ZSgpO1xuICAgIGlmIChjaCkge1xuICAgICAgICBlcnJvcihcIlN5bnRheCBlcnJvclwiKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsXG4gICAgLy8gcGFzc2luZyBlYWNoIG5hbWUvdmFsdWUgcGFpciB0byB0aGUgcmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGVcbiAgICAvLyB0cmFuc2Zvcm1hdGlvbiwgc3RhcnRpbmcgd2l0aCBhIHRlbXBvcmFyeSByb290IG9iamVjdCB0aGF0IGhvbGRzIHRoZSByZXN1bHRcbiAgICAvLyBpbiBhbiBlbXB0eSBrZXkuIElmIHRoZXJlIGlzIG5vdCBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHNpbXBseSByZXR1cm4gdGhlXG4gICAgLy8gcmVzdWx0LlxuXG4gICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nID8gKGZ1bmN0aW9uIHdhbGsoaG9sZGVyLCBrZXkpIHtcbiAgICAgICAgdmFyIGssIHYsIHZhbHVlID0gaG9sZGVyW2tleV07XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICB2ID0gd2Fsayh2YWx1ZSwgayk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgfSh7Jyc6IHJlc3VsdH0sICcnKSkgOiByZXN1bHQ7XG59O1xuIiwidmFyIGN4ID0gL1tcXHUwMDAwXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgZXNjYXBhYmxlID0gL1tcXFxcXFxcIlxceDAwLVxceDFmXFx4N2YtXFx4OWZcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICBnYXAsXG4gICAgaW5kZW50LFxuICAgIG1ldGEgPSB7ICAgIC8vIHRhYmxlIG9mIGNoYXJhY3RlciBzdWJzdGl0dXRpb25zXG4gICAgICAgICdcXGInOiAnXFxcXGInLFxuICAgICAgICAnXFx0JzogJ1xcXFx0JyxcbiAgICAgICAgJ1xcbic6ICdcXFxcbicsXG4gICAgICAgICdcXGYnOiAnXFxcXGYnLFxuICAgICAgICAnXFxyJzogJ1xcXFxyJyxcbiAgICAgICAgJ1wiJyA6ICdcXFxcXCInLFxuICAgICAgICAnXFxcXCc6ICdcXFxcXFxcXCdcbiAgICB9LFxuICAgIHJlcDtcblxuZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7XG4gICAgLy8gSWYgdGhlIHN0cmluZyBjb250YWlucyBubyBjb250cm9sIGNoYXJhY3RlcnMsIG5vIHF1b3RlIGNoYXJhY3RlcnMsIGFuZCBub1xuICAgIC8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuXG4gICAgLy8gT3RoZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRoIHNhZmUgZXNjYXBlXG4gICAgLy8gc2VxdWVuY2VzLlxuICAgIFxuICAgIGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwO1xuICAgIHJldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpID8gJ1wiJyArIHN0cmluZy5yZXBsYWNlKGVzY2FwYWJsZSwgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgdmFyIGMgPSBtZXRhW2FdO1xuICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnID8gYyA6XG4gICAgICAgICAgICAnXFxcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbiAgICB9KSArICdcIicgOiAnXCInICsgc3RyaW5nICsgJ1wiJztcbn1cblxuZnVuY3Rpb24gc3RyKGtleSwgaG9sZGVyKSB7XG4gICAgLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXldLlxuICAgIHZhciBpLCAgICAgICAgICAvLyBUaGUgbG9vcCBjb3VudGVyLlxuICAgICAgICBrLCAgICAgICAgICAvLyBUaGUgbWVtYmVyIGtleS5cbiAgICAgICAgdiwgICAgICAgICAgLy8gVGhlIG1lbWJlciB2YWx1ZS5cbiAgICAgICAgbGVuZ3RoLFxuICAgICAgICBtaW5kID0gZ2FwLFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldO1xuICAgIFxuICAgIC8vIElmIHRoZSB2YWx1ZSBoYXMgYSB0b0pTT04gbWV0aG9kLCBjYWxsIGl0IHRvIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKGtleSk7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIHdlIHdlcmUgY2FsbGVkIHdpdGggYSByZXBsYWNlciBmdW5jdGlvbiwgdGhlbiBjYWxsIHRoZSByZXBsYWNlciB0b1xuICAgIC8vIG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLlxuICAgIGlmICh0eXBlb2YgcmVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gcmVwLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgXG4gICAgLy8gV2hhdCBoYXBwZW5zIG5leHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUncyB0eXBlLlxuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gcXVvdGUodmFsdWUpO1xuICAgICAgICBcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIC8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4gRW5jb2RlIG5vbi1maW5pdGUgbnVtYmVycyBhcyBudWxsLlxuICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiAnbnVsbCc7XG4gICAgICAgIFxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuIE5vdGU6XG4gICAgICAgICAgICAvLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9kdWNlICdudWxsJy4gVGhlIGNhc2UgaXMgaW5jbHVkZWQgaGVyZSBpblxuICAgICAgICAgICAgLy8gdGhlIHJlbW90ZSBjaGFuY2UgdGhhdCB0aGlzIGdldHMgZml4ZWQgc29tZWRheS5cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgXG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJ251bGwnO1xuICAgICAgICAgICAgZ2FwICs9IGluZGVudDtcbiAgICAgICAgICAgIHBhcnRpYWwgPSBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQXJyYXkuaXNBcnJheVxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsW2ldID0gc3RyKGksIHZhbHVlKSB8fCAnbnVsbCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEpvaW4gYWxsIG9mIHRoZSBlbGVtZW50cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLCBhbmRcbiAgICAgICAgICAgICAgICAvLyB3cmFwIHRoZW0gaW4gYnJhY2tldHMuXG4gICAgICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwID8gJ1tdJyA6IGdhcCA/XG4gICAgICAgICAgICAgICAgICAgICdbXFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ10nIDpcbiAgICAgICAgICAgICAgICAgICAgJ1snICsgcGFydGlhbC5qb2luKCcsJykgKyAnXSc7XG4gICAgICAgICAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlXG4gICAgICAgICAgICAvLyBzdHJpbmdpZmllZC5cbiAgICAgICAgICAgIGlmIChyZXAgJiYgdHlwZW9mIHJlcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSByZXAubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICBrID0gcmVwW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC5cbiAgICAgICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAvLyBKb2luIGFsbCBvZiB0aGUgbWVtYmVyIHRleHRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsXG4gICAgICAgIC8vIGFuZCB3cmFwIHRoZW0gaW4gYnJhY2VzLlxuXG4gICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMCA/ICd7fScgOiBnYXAgP1xuICAgICAgICAgICAgJ3tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnfScgOlxuICAgICAgICAgICAgJ3snICsgcGFydGlhbC5qb2luKCcsJykgKyAnfSc7XG4gICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgIHZhciBpO1xuICAgIGdhcCA9ICcnO1xuICAgIGluZGVudCA9ICcnO1xuICAgIFxuICAgIC8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIG1ha2UgYW4gaW5kZW50IHN0cmluZyBjb250YWluaW5nIHRoYXRcbiAgICAvLyBtYW55IHNwYWNlcy5cbiAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3BhY2U7IGkgKz0gMSkge1xuICAgICAgICAgICAgaW5kZW50ICs9ICcgJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgc3RyaW5nLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluZGVudCBzdHJpbmcuXG4gICAgZWxzZSBpZiAodHlwZW9mIHNwYWNlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpbmRlbnQgPSBzcGFjZTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHJlcGxhY2VyLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuXG4gICAgLy8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvci5cbiAgICByZXAgPSByZXBsYWNlcjtcbiAgICBpZiAocmVwbGFjZXIgJiYgdHlwZW9mIHJlcGxhY2VyICE9PSAnZnVuY3Rpb24nXG4gICAgJiYgKHR5cGVvZiByZXBsYWNlciAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHJlcGxhY2VyLmxlbmd0aCAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTtcbiAgICB9XG4gICAgXG4gICAgLy8gTWFrZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAnJy5cbiAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBzdHJpbmdpZnlpbmcgdGhlIHZhbHVlLlxuICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTtcbn07XG4iLCIvKlxuICogbGliL2pzcHJpbS5qczogdXRpbGl0aWVzIGZvciBwcmltaXRpdmUgSmF2YVNjcmlwdCB0eXBlc1xuICovXG5cbnZhciBtb2RfYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBtb2RfdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxudmFyIG1vZF9leHRzcHJpbnRmID0gcmVxdWlyZSgnZXh0c3ByaW50ZicpO1xudmFyIG1vZF92ZXJyb3IgPSByZXF1aXJlKCd2ZXJyb3InKTtcbnZhciBtb2RfanNvbnNjaGVtYSA9IHJlcXVpcmUoJ2pzb24tc2NoZW1hJyk7XG5cbi8qXG4gKiBQdWJsaWMgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydHMuZGVlcENvcHkgPSBkZWVwQ29weTtcbmV4cG9ydHMuZGVlcEVxdWFsID0gZGVlcEVxdWFsO1xuZXhwb3J0cy5pc0VtcHR5ID0gaXNFbXB0eTtcbmV4cG9ydHMuaGFzS2V5ID0gaGFzS2V5O1xuZXhwb3J0cy5mb3JFYWNoS2V5ID0gZm9yRWFjaEtleTtcbmV4cG9ydHMucGx1Y2sgPSBwbHVjaztcbmV4cG9ydHMuZmxhdHRlbk9iamVjdCA9IGZsYXR0ZW5PYmplY3Q7XG5leHBvcnRzLmZsYXR0ZW5JdGVyID0gZmxhdHRlbkl0ZXI7XG5leHBvcnRzLnZhbGlkYXRlSnNvbk9iamVjdCA9IHZhbGlkYXRlSnNvbk9iamVjdEpTO1xuZXhwb3J0cy52YWxpZGF0ZUpzb25PYmplY3RKUyA9IHZhbGlkYXRlSnNvbk9iamVjdEpTO1xuZXhwb3J0cy5yYW5kRWx0ID0gcmFuZEVsdDtcbmV4cG9ydHMuZXh0cmFQcm9wZXJ0aWVzID0gZXh0cmFQcm9wZXJ0aWVzO1xuZXhwb3J0cy5tZXJnZU9iamVjdHMgPSBtZXJnZU9iamVjdHM7XG5cbmV4cG9ydHMuc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGg7XG5leHBvcnRzLmVuZHNXaXRoID0gZW5kc1dpdGg7XG5cbmV4cG9ydHMucGFyc2VJbnRlZ2VyID0gcGFyc2VJbnRlZ2VyO1xuXG5leHBvcnRzLmlzbzg2MDEgPSBpc284NjAxO1xuZXhwb3J0cy5yZmMxMTIzID0gcmZjMTEyMztcbmV4cG9ydHMucGFyc2VEYXRlVGltZSA9IHBhcnNlRGF0ZVRpbWU7XG5cbmV4cG9ydHMuaHJ0aW1lZGlmZiA9IGhydGltZURpZmY7XG5leHBvcnRzLmhydGltZURpZmYgPSBocnRpbWVEaWZmO1xuZXhwb3J0cy5ocnRpbWVBY2N1bSA9IGhydGltZUFjY3VtO1xuZXhwb3J0cy5ocnRpbWVBZGQgPSBocnRpbWVBZGQ7XG5leHBvcnRzLmhydGltZU5hbm9zZWMgPSBocnRpbWVOYW5vc2VjO1xuZXhwb3J0cy5ocnRpbWVNaWNyb3NlYyA9IGhydGltZU1pY3Jvc2VjO1xuZXhwb3J0cy5ocnRpbWVNaWxsaXNlYyA9IGhydGltZU1pbGxpc2VjO1xuXG5cbi8qXG4gKiBEZWVwIGNvcHkgYW4gYWN5Y2xpYyAqYmFzaWMqIEphdmFzY3JpcHQgb2JqZWN0LiAgVGhpcyBvbmx5IGhhbmRsZXMgYmFzaWNcbiAqIHNjYWxhcnMgKHN0cmluZ3MsIG51bWJlcnMsIGJvb2xlYW5zKSBhbmQgYXJiaXRyYXJpbHkgZGVlcCBhcnJheXMgYW5kIG9iamVjdHNcbiAqIGNvbnRhaW5pbmcgdGhlc2UuICBUaGlzIGRvZXMgKm5vdCogaGFuZGxlIGluc3RhbmNlcyBvZiBvdGhlciBjbGFzc2VzLlxuICovXG5mdW5jdGlvbiBkZWVwQ29weShvYmopXG57XG5cdHZhciByZXQsIGtleTtcblx0dmFyIG1hcmtlciA9ICdfX2RlZXBDb3B5JztcblxuXHRpZiAob2JqICYmIG9ialttYXJrZXJdKVxuXHRcdHRocm93IChuZXcgRXJyb3IoJ2F0dGVtcHRlZCBkZWVwIGNvcHkgb2YgY3ljbGljIG9iamVjdCcpKTtcblxuXHRpZiAob2JqICYmIG9iai5jb25zdHJ1Y3RvciA9PSBPYmplY3QpIHtcblx0XHRyZXQgPSB7fTtcblx0XHRvYmpbbWFya2VyXSA9IHRydWU7XG5cblx0XHRmb3IgKGtleSBpbiBvYmopIHtcblx0XHRcdGlmIChrZXkgPT0gbWFya2VyKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0cmV0W2tleV0gPSBkZWVwQ29weShvYmpba2V5XSk7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIChvYmpbbWFya2VyXSk7XG5cdFx0cmV0dXJuIChyZXQpO1xuXHR9XG5cblx0aWYgKG9iaiAmJiBvYmouY29uc3RydWN0b3IgPT0gQXJyYXkpIHtcblx0XHRyZXQgPSBbXTtcblx0XHRvYmpbbWFya2VyXSA9IHRydWU7XG5cblx0XHRmb3IgKGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKVxuXHRcdFx0cmV0LnB1c2goZGVlcENvcHkob2JqW2tleV0pKTtcblxuXHRcdGRlbGV0ZSAob2JqW21hcmtlcl0pO1xuXHRcdHJldHVybiAocmV0KTtcblx0fVxuXG5cdC8qXG5cdCAqIEl0IG11c3QgYmUgYSBwcmltaXRpdmUgdHlwZSAtLSBqdXN0IHJldHVybiBpdC5cblx0ICovXG5cdHJldHVybiAob2JqKTtcbn1cblxuZnVuY3Rpb24gZGVlcEVxdWFsKG9iajEsIG9iajIpXG57XG5cdGlmICh0eXBlb2YgKG9iajEpICE9IHR5cGVvZiAob2JqMikpXG5cdFx0cmV0dXJuIChmYWxzZSk7XG5cblx0aWYgKG9iajEgPT09IG51bGwgfHwgb2JqMiA9PT0gbnVsbCB8fCB0eXBlb2YgKG9iajEpICE9ICdvYmplY3QnKVxuXHRcdHJldHVybiAob2JqMSA9PT0gb2JqMik7XG5cblx0aWYgKG9iajEuY29uc3RydWN0b3IgIT0gb2JqMi5jb25zdHJ1Y3Rvcilcblx0XHRyZXR1cm4gKGZhbHNlKTtcblxuXHR2YXIgaztcblx0Zm9yIChrIGluIG9iajEpIHtcblx0XHRpZiAoIW9iajIuaGFzT3duUHJvcGVydHkoaykpXG5cdFx0XHRyZXR1cm4gKGZhbHNlKTtcblxuXHRcdGlmICghZGVlcEVxdWFsKG9iajFba10sIG9iajJba10pKVxuXHRcdFx0cmV0dXJuIChmYWxzZSk7XG5cdH1cblxuXHRmb3IgKGsgaW4gb2JqMikge1xuXHRcdGlmICghb2JqMS5oYXNPd25Qcm9wZXJ0eShrKSlcblx0XHRcdHJldHVybiAoZmFsc2UpO1xuXHR9XG5cblx0cmV0dXJuICh0cnVlKTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvYmopXG57XG5cdHZhciBrZXk7XG5cdGZvciAoa2V5IGluIG9iailcblx0XHRyZXR1cm4gKGZhbHNlKTtcblx0cmV0dXJuICh0cnVlKTtcbn1cblxuZnVuY3Rpb24gaGFzS2V5KG9iaiwga2V5KVxue1xuXHRtb2RfYXNzZXJ0LmVxdWFsKHR5cGVvZiAoa2V5KSwgJ3N0cmluZycpO1xuXHRyZXR1cm4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpO1xufVxuXG5mdW5jdGlvbiBmb3JFYWNoS2V5KG9iaiwgY2FsbGJhY2spXG57XG5cdGZvciAodmFyIGtleSBpbiBvYmopIHtcblx0XHRpZiAoaGFzS2V5KG9iaiwga2V5KSkge1xuXHRcdFx0Y2FsbGJhY2soa2V5LCBvYmpba2V5XSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHBsdWNrKG9iaiwga2V5KVxue1xuXHRtb2RfYXNzZXJ0LmVxdWFsKHR5cGVvZiAoa2V5KSwgJ3N0cmluZycpO1xuXHRyZXR1cm4gKHBsdWNrdihvYmosIGtleSkpO1xufVxuXG5mdW5jdGlvbiBwbHVja3Yob2JqLCBrZXkpXG57XG5cdGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0Jylcblx0XHRyZXR1cm4gKHVuZGVmaW5lZCk7XG5cblx0aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuXHRcdHJldHVybiAob2JqW2tleV0pO1xuXG5cdHZhciBpID0ga2V5LmluZGV4T2YoJy4nKTtcblx0aWYgKGkgPT0gLTEpXG5cdFx0cmV0dXJuICh1bmRlZmluZWQpO1xuXG5cdHZhciBrZXkxID0ga2V5LnN1YnN0cigwLCBpKTtcblx0aWYgKCFvYmouaGFzT3duUHJvcGVydHkoa2V5MSkpXG5cdFx0cmV0dXJuICh1bmRlZmluZWQpO1xuXG5cdHJldHVybiAocGx1Y2t2KG9ialtrZXkxXSwga2V5LnN1YnN0cihpICsgMSkpKTtcbn1cblxuLypcbiAqIEludm9rZSBjYWxsYmFjayhyb3cpIGZvciBlYWNoIGVudHJ5IGluIHRoZSBhcnJheSB0aGF0IHdvdWxkIGJlIHJldHVybmVkIGJ5XG4gKiBmbGF0dGVuT2JqZWN0KGRhdGEsIGRlcHRoKS4gIFRoaXMgaXMganVzdCBsaWtlIGZsYXR0ZW5PYmplY3QoZGF0YSxcbiAqIGRlcHRoKS5mb3JFYWNoKGNhbGxiYWNrKSwgZXhjZXB0IHRoYXQgdGhlIGludGVybWVkaWF0ZSBhcnJheSBpcyBuZXZlclxuICogY3JlYXRlZC5cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbkl0ZXIoZGF0YSwgZGVwdGgsIGNhbGxiYWNrKVxue1xuXHRkb0ZsYXR0ZW5JdGVyKGRhdGEsIGRlcHRoLCBbXSwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBkb0ZsYXR0ZW5JdGVyKGRhdGEsIGRlcHRoLCBhY2N1bSwgY2FsbGJhY2spXG57XG5cdHZhciBlYWNoO1xuXHR2YXIga2V5O1xuXG5cdGlmIChkZXB0aCA9PT0gMCkge1xuXHRcdGVhY2ggPSBhY2N1bS5zbGljZSgwKTtcblx0XHRlYWNoLnB1c2goZGF0YSk7XG5cdFx0Y2FsbGJhY2soZWFjaCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bW9kX2Fzc2VydC5vayhkYXRhICE9PSBudWxsKTtcblx0bW9kX2Fzc2VydC5lcXVhbCh0eXBlb2YgKGRhdGEpLCAnb2JqZWN0Jyk7XG5cdG1vZF9hc3NlcnQuZXF1YWwodHlwZW9mIChkZXB0aCksICdudW1iZXInKTtcblx0bW9kX2Fzc2VydC5vayhkZXB0aCA+PSAwKTtcblxuXHRmb3IgKGtleSBpbiBkYXRhKSB7XG5cdFx0ZWFjaCA9IGFjY3VtLnNsaWNlKDApO1xuXHRcdGVhY2gucHVzaChrZXkpO1xuXHRcdGRvRmxhdHRlbkl0ZXIoZGF0YVtrZXldLCBkZXB0aCAtIDEsIGVhY2gsIGNhbGxiYWNrKTtcblx0fVxufVxuXG5mdW5jdGlvbiBmbGF0dGVuT2JqZWN0KGRhdGEsIGRlcHRoKVxue1xuXHRpZiAoZGVwdGggPT09IDApXG5cdFx0cmV0dXJuIChbIGRhdGEgXSk7XG5cblx0bW9kX2Fzc2VydC5vayhkYXRhICE9PSBudWxsKTtcblx0bW9kX2Fzc2VydC5lcXVhbCh0eXBlb2YgKGRhdGEpLCAnb2JqZWN0Jyk7XG5cdG1vZF9hc3NlcnQuZXF1YWwodHlwZW9mIChkZXB0aCksICdudW1iZXInKTtcblx0bW9kX2Fzc2VydC5vayhkZXB0aCA+PSAwKTtcblxuXHR2YXIgcnYgPSBbXTtcblx0dmFyIGtleTtcblxuXHRmb3IgKGtleSBpbiBkYXRhKSB7XG5cdFx0ZmxhdHRlbk9iamVjdChkYXRhW2tleV0sIGRlcHRoIC0gMSkuZm9yRWFjaChmdW5jdGlvbiAocCkge1xuXHRcdFx0cnYucHVzaChbIGtleSBdLmNvbmNhdChwKSk7XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gKHJ2KTtcbn1cblxuZnVuY3Rpb24gc3RhcnRzV2l0aChzdHIsIHByZWZpeClcbntcblx0cmV0dXJuIChzdHIuc3Vic3RyKDAsIHByZWZpeC5sZW5ndGgpID09IHByZWZpeCk7XG59XG5cbmZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc3VmZml4KVxue1xuXHRyZXR1cm4gKHN0ci5zdWJzdHIoXG5cdCAgICBzdHIubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCwgc3VmZml4Lmxlbmd0aCkgPT0gc3VmZml4KTtcbn1cblxuZnVuY3Rpb24gaXNvODYwMShkKVxue1xuXHRpZiAodHlwZW9mIChkKSA9PSAnbnVtYmVyJylcblx0XHRkID0gbmV3IERhdGUoZCk7XG5cdG1vZF9hc3NlcnQub2soZC5jb25zdHJ1Y3RvciA9PT0gRGF0ZSk7XG5cdHJldHVybiAobW9kX2V4dHNwcmludGYuc3ByaW50ZignJTRkLSUwMmQtJTAyZFQlMDJkOiUwMmQ6JTAyZC4lMDNkWicsXG5cdCAgICBkLmdldFVUQ0Z1bGxZZWFyKCksIGQuZ2V0VVRDTW9udGgoKSArIDEsIGQuZ2V0VVRDRGF0ZSgpLFxuXHQgICAgZC5nZXRVVENIb3VycygpLCBkLmdldFVUQ01pbnV0ZXMoKSwgZC5nZXRVVENTZWNvbmRzKCksXG5cdCAgICBkLmdldFVUQ01pbGxpc2Vjb25kcygpKSk7XG59XG5cbnZhciBSRkMxMTIzX01PTlRIUyA9IFtcbiAgICAnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLFxuICAgICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddO1xudmFyIFJGQzExMjNfREFZUyA9IFtcbiAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0J107XG5cbmZ1bmN0aW9uIHJmYzExMjMoZGF0ZSkge1xuXHRyZXR1cm4gKG1vZF9leHRzcHJpbnRmLnNwcmludGYoJyVzLCAlMDJkICVzICUwNGQgJTAyZDolMDJkOiUwMmQgR01UJyxcblx0ICAgIFJGQzExMjNfREFZU1tkYXRlLmdldFVUQ0RheSgpXSwgZGF0ZS5nZXRVVENEYXRlKCksXG5cdCAgICBSRkMxMTIzX01PTlRIU1tkYXRlLmdldFVUQ01vbnRoKCldLCBkYXRlLmdldFVUQ0Z1bGxZZWFyKCksXG5cdCAgICBkYXRlLmdldFVUQ0hvdXJzKCksIGRhdGUuZ2V0VVRDTWludXRlcygpLFxuXHQgICAgZGF0ZS5nZXRVVENTZWNvbmRzKCkpKTtcbn1cblxuLypcbiAqIFBhcnNlcyBhIGRhdGUgZXhwcmVzc2VkIGFzIGEgc3RyaW5nLCBhcyBlaXRoZXIgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gKiB0aGUgZXBvY2ggb3IgYW55IHN0cmluZyBmb3JtYXQgdGhhdCBEYXRlIGFjY2VwdHMsIGdpdmluZyBwcmVmZXJlbmNlIHRvIHRoZVxuICogZm9ybWVyIHdoZXJlIHRoZXNlIHR3byBzZXRzIG92ZXJsYXAgKGUuZy4sIHNtYWxsIG51bWJlcnMpLlxuICovXG5mdW5jdGlvbiBwYXJzZURhdGVUaW1lKHN0cilcbntcblx0Lypcblx0ICogVGhpcyBpcyBpcnJpdGF0aW5nbHkgaW1wbGljaXQsIGJ1dCBzaWduaWZpY2FudGx5IG1vcmUgY29uY2lzZSB0aGFuXG5cdCAqIGFsdGVybmF0aXZlcy4gIFRoZSBcIitzdHJcIiB3aWxsIGNvbnZlcnQgYSBzdHJpbmcgY29udGFpbmluZyBvbmx5IGFcblx0ICogbnVtYmVyIGRpcmVjdGx5IHRvIGEgTnVtYmVyLCBvciBOYU4gZm9yIG90aGVyIHN0cmluZ3MuICBUaHVzLCBpZiB0aGVcblx0ICogY29udmVyc2lvbiBzdWNjZWVkcywgd2UgdXNlIGl0ICh0aGlzIGlzIHRoZSBtaWxsaXNlY29uZHMtc2luY2UtZXBvY2hcblx0ICogY2FzZSkuICBPdGhlcndpc2UsIHdlIHBhc3MgdGhlIHN0cmluZyBkaXJlY3RseSB0byB0aGUgRGF0ZVxuXHQgKiBjb25zdHJ1Y3RvciB0byBwYXJzZS5cblx0ICovXG5cdHZhciBudW1lcmljID0gK3N0cjtcblx0aWYgKCFpc05hTihudW1lcmljKSkge1xuXHRcdHJldHVybiAobmV3IERhdGUobnVtZXJpYykpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAobmV3IERhdGUoc3RyKSk7XG5cdH1cbn1cblxuXG4vKlxuICogTnVtYmVyLipfU0FGRV9JTlRFR0VSIGlzbid0IHByZXNlbnQgYmVmb3JlIG5vZGUgdjAuMTIsIHNvIHdlIGhhcmRjb2RlXG4gKiB0aGUgRVM2IGRlZmluaXRpb25zIGhlcmUsIHdoaWxlIGFsbG93aW5nIGZvciB0aGVtIHRvIHNvbWVkYXkgYmUgaGlnaGVyLlxuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8IDkwMDcxOTkyNTQ3NDA5OTE7XG52YXIgTUlOX1NBRkVfSU5URUdFUiA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSIHx8IC05MDA3MTk5MjU0NzQwOTkxO1xuXG5cbi8qXG4gKiBEZWZhdWx0IG9wdGlvbnMgZm9yIHBhcnNlSW50ZWdlcigpLlxuICovXG52YXIgUElfREVGQVVMVFMgPSB7XG5cdGJhc2U6IDEwLFxuXHRhbGxvd1NpZ246IHRydWUsXG5cdGFsbG93UHJlZml4OiBmYWxzZSxcblx0YWxsb3dUcmFpbGluZzogZmFsc2UsXG5cdGFsbG93SW1wcmVjaXNlOiBmYWxzZSxcblx0dHJpbVdoaXRlc3BhY2U6IGZhbHNlLFxuXHRsZWFkaW5nWmVyb0lzT2N0YWw6IGZhbHNlXG59O1xuXG52YXIgQ1BfMCA9IDB4MzA7XG52YXIgQ1BfOSA9IDB4Mzk7XG5cbnZhciBDUF9BID0gMHg0MTtcbnZhciBDUF9CID0gMHg0MjtcbnZhciBDUF9PID0gMHg0ZjtcbnZhciBDUF9UID0gMHg1NDtcbnZhciBDUF9YID0gMHg1ODtcbnZhciBDUF9aID0gMHg1YTtcblxudmFyIENQX2EgPSAweDYxO1xudmFyIENQX2IgPSAweDYyO1xudmFyIENQX28gPSAweDZmO1xudmFyIENQX3QgPSAweDc0O1xudmFyIENQX3ggPSAweDc4O1xudmFyIENQX3ogPSAweDdhO1xuXG52YXIgUElfQ09OVl9ERUMgPSAweDMwO1xudmFyIFBJX0NPTlZfVUMgPSAweDM3O1xudmFyIFBJX0NPTlZfTEMgPSAweDU3O1xuXG5cbi8qXG4gKiBBIHN0cmljdGVyIHZlcnNpb24gb2YgcGFyc2VJbnQoKSB0aGF0IHByb3ZpZGVzIG9wdGlvbnMgZm9yIGNoYW5naW5nIHdoYXRcbiAqIGlzIGFuIGFjY2VwdGFibGUgc3RyaW5nIChmb3IgZXhhbXBsZSwgZGlzYWxsb3dpbmcgdHJhaWxpbmcgY2hhcmFjdGVycykuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSW50ZWdlcihzdHIsIHVvcHRzKVxue1xuXHRtb2RfYXNzZXJ0LnN0cmluZyhzdHIsICdzdHInKTtcblx0bW9kX2Fzc2VydC5vcHRpb25hbE9iamVjdCh1b3B0cywgJ29wdGlvbnMnKTtcblxuXHR2YXIgYmFzZU92ZXJyaWRlID0gZmFsc2U7XG5cdHZhciBvcHRpb25zID0gUElfREVGQVVMVFM7XG5cblx0aWYgKHVvcHRzKSB7XG5cdFx0YmFzZU92ZXJyaWRlID0gaGFzS2V5KHVvcHRzLCAnYmFzZScpO1xuXHRcdG9wdGlvbnMgPSBtZXJnZU9iamVjdHMob3B0aW9ucywgdW9wdHMpO1xuXHRcdG1vZF9hc3NlcnQubnVtYmVyKG9wdGlvbnMuYmFzZSwgJ29wdGlvbnMuYmFzZScpO1xuXHRcdG1vZF9hc3NlcnQub2sob3B0aW9ucy5iYXNlID49IDIsICdvcHRpb25zLmJhc2UgPj0gMicpO1xuXHRcdG1vZF9hc3NlcnQub2sob3B0aW9ucy5iYXNlIDw9IDM2LCAnb3B0aW9ucy5iYXNlIDw9IDM2Jyk7XG5cdFx0bW9kX2Fzc2VydC5ib29sKG9wdGlvbnMuYWxsb3dTaWduLCAnb3B0aW9ucy5hbGxvd1NpZ24nKTtcblx0XHRtb2RfYXNzZXJ0LmJvb2wob3B0aW9ucy5hbGxvd1ByZWZpeCwgJ29wdGlvbnMuYWxsb3dQcmVmaXgnKTtcblx0XHRtb2RfYXNzZXJ0LmJvb2wob3B0aW9ucy5hbGxvd1RyYWlsaW5nLFxuXHRcdCAgICAnb3B0aW9ucy5hbGxvd1RyYWlsaW5nJyk7XG5cdFx0bW9kX2Fzc2VydC5ib29sKG9wdGlvbnMuYWxsb3dJbXByZWNpc2UsXG5cdFx0ICAgICdvcHRpb25zLmFsbG93SW1wcmVjaXNlJyk7XG5cdFx0bW9kX2Fzc2VydC5ib29sKG9wdGlvbnMudHJpbVdoaXRlc3BhY2UsXG5cdFx0ICAgICdvcHRpb25zLnRyaW1XaGl0ZXNwYWNlJyk7XG5cdFx0bW9kX2Fzc2VydC5ib29sKG9wdGlvbnMubGVhZGluZ1plcm9Jc09jdGFsLFxuXHRcdCAgICAnb3B0aW9ucy5sZWFkaW5nWmVyb0lzT2N0YWwnKTtcblxuXHRcdGlmIChvcHRpb25zLmxlYWRpbmdaZXJvSXNPY3RhbCkge1xuXHRcdFx0bW9kX2Fzc2VydC5vayghYmFzZU92ZXJyaWRlLFxuXHRcdFx0ICAgICdcImJhc2VcIiBhbmQgXCJsZWFkaW5nWmVyb0lzT2N0YWxcIiBhcmUgJyArXG5cdFx0XHQgICAgJ211dHVhbGx5IGV4Y2x1c2l2ZScpO1xuXHRcdH1cblx0fVxuXG5cdHZhciBjO1xuXHR2YXIgcGJhc2UgPSAtMTtcblx0dmFyIGJhc2UgPSBvcHRpb25zLmJhc2U7XG5cdHZhciBzdGFydDtcblx0dmFyIG11bHQgPSAxO1xuXHR2YXIgdmFsdWUgPSAwO1xuXHR2YXIgaWR4ID0gMDtcblx0dmFyIGxlbiA9IHN0ci5sZW5ndGg7XG5cblx0LyogVHJpbSBhbnkgd2hpdGVzcGFjZSBvbiB0aGUgbGVmdCBzaWRlLiAqL1xuXHRpZiAob3B0aW9ucy50cmltV2hpdGVzcGFjZSkge1xuXHRcdHdoaWxlIChpZHggPCBsZW4gJiYgaXNTcGFjZShzdHIuY2hhckNvZGVBdChpZHgpKSkge1xuXHRcdFx0KytpZHg7XG5cdFx0fVxuXHR9XG5cblx0LyogQ2hlY2sgdGhlIG51bWJlciBmb3IgYSBsZWFkaW5nIHNpZ24uICovXG5cdGlmIChvcHRpb25zLmFsbG93U2lnbikge1xuXHRcdGlmIChzdHJbaWR4XSA9PT0gJy0nKSB7XG5cdFx0XHRpZHggKz0gMTtcblx0XHRcdG11bHQgPSAtMTtcblx0XHR9IGVsc2UgaWYgKHN0cltpZHhdID09PSAnKycpIHtcblx0XHRcdGlkeCArPSAxO1xuXHRcdH1cblx0fVxuXG5cdC8qIFBhcnNlIHRoZSBiYXNlLWluZGljYXRpbmcgcHJlZml4IGlmIHRoZXJlIGlzIG9uZS4gKi9cblx0aWYgKHN0cltpZHhdID09PSAnMCcpIHtcblx0XHRpZiAob3B0aW9ucy5hbGxvd1ByZWZpeCkge1xuXHRcdFx0cGJhc2UgPSBwcmVmaXhUb0Jhc2Uoc3RyLmNoYXJDb2RlQXQoaWR4ICsgMSkpO1xuXHRcdFx0aWYgKHBiYXNlICE9PSAtMSAmJiAoIWJhc2VPdmVycmlkZSB8fCBwYmFzZSA9PT0gYmFzZSkpIHtcblx0XHRcdFx0YmFzZSA9IHBiYXNlO1xuXHRcdFx0XHRpZHggKz0gMjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGJhc2UgPT09IC0xICYmIG9wdGlvbnMubGVhZGluZ1plcm9Jc09jdGFsKSB7XG5cdFx0XHRiYXNlID0gODtcblx0XHR9XG5cdH1cblxuXHQvKiBQYXJzZSB0aGUgYWN0dWFsIGRpZ2l0cy4gKi9cblx0Zm9yIChzdGFydCA9IGlkeDsgaWR4IDwgbGVuOyArK2lkeCkge1xuXHRcdGMgPSB0cmFuc2xhdGVEaWdpdChzdHIuY2hhckNvZGVBdChpZHgpKTtcblx0XHRpZiAoYyAhPT0gLTEgJiYgYyA8IGJhc2UpIHtcblx0XHRcdHZhbHVlICo9IGJhc2U7XG5cdFx0XHR2YWx1ZSArPSBjO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvKiBJZiB3ZSBkaWRuJ3QgcGFyc2UgYW55IGRpZ2l0cywgd2UgaGF2ZSBhbiBpbnZhbGlkIG51bWJlci4gKi9cblx0aWYgKHN0YXJ0ID09PSBpZHgpIHtcblx0XHRyZXR1cm4gKG5ldyBFcnJvcignaW52YWxpZCBudW1iZXI6ICcgKyBKU09OLnN0cmluZ2lmeShzdHIpKSk7XG5cdH1cblxuXHQvKiBUcmltIGFueSB3aGl0ZXNwYWNlIG9uIHRoZSByaWdodCBzaWRlLiAqL1xuXHRpZiAob3B0aW9ucy50cmltV2hpdGVzcGFjZSkge1xuXHRcdHdoaWxlIChpZHggPCBsZW4gJiYgaXNTcGFjZShzdHIuY2hhckNvZGVBdChpZHgpKSkge1xuXHRcdFx0KytpZHg7XG5cdFx0fVxuXHR9XG5cblx0LyogQ2hlY2sgZm9yIHRyYWlsaW5nIGNoYXJhY3RlcnMuICovXG5cdGlmIChpZHggPCBsZW4gJiYgIW9wdGlvbnMuYWxsb3dUcmFpbGluZykge1xuXHRcdHJldHVybiAobmV3IEVycm9yKCd0cmFpbGluZyBjaGFyYWN0ZXJzIGFmdGVyIG51bWJlcjogJyArXG5cdFx0ICAgIEpTT04uc3RyaW5naWZ5KHN0ci5zbGljZShpZHgpKSkpO1xuXHR9XG5cblx0LyogSWYgb3VyIHZhbHVlIGlzIDAsIHdlIHJldHVybiBub3csIHRvIGF2b2lkIHJldHVybmluZyAtMC4gKi9cblx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0cmV0dXJuICgwKTtcblx0fVxuXG5cdC8qIENhbGN1bGF0ZSBvdXIgZmluYWwgdmFsdWUuICovXG5cdHZhciByZXN1bHQgPSB2YWx1ZSAqIG11bHQ7XG5cblx0Lypcblx0ICogSWYgdGhlIHN0cmluZyByZXByZXNlbnRzIGEgdmFsdWUgdGhhdCBjYW5ub3QgYmUgcHJlY2lzZWx5IHJlcHJlc2VudGVkXG5cdCAqIGJ5IEphdmFTY3JpcHQsIHRoZW4gd2Ugd2FudCB0byBjaGVjayB0aGF0OlxuXHQgKlxuXHQgKiAtIFdlIG5ldmVyIGluY3JlYXNlZCB0aGUgdmFsdWUgcGFzdCBNQVhfU0FGRV9JTlRFR0VSXG5cdCAqIC0gV2UgZG9uJ3QgbWFrZSB0aGUgcmVzdWx0IG5lZ2F0aXZlIGFuZCBiZWxvdyBNSU5fU0FGRV9JTlRFR0VSXG5cdCAqXG5cdCAqIEJlY2F1c2Ugd2Ugb25seSBldmVyIGluY3JlbWVudCB0aGUgdmFsdWUgZHVyaW5nIHBhcnNpbmcsIHRoZXJlJ3Mgbm9cblx0ICogY2hhbmNlIG9mIG1vdmluZyBwYXN0IE1BWF9TQUZFX0lOVEVHRVIgYW5kIHRoZW4gZHJvcHBpbmcgYmVsb3cgaXRcblx0ICogYWdhaW4sIGxvc2luZyBwcmVjaXNpb24gaW4gdGhlIHByb2Nlc3MuIFRoaXMgbWVhbnMgdGhhdCB3ZSBvbmx5IG5lZWRcblx0ICogdG8gZG8gb3VyIGNoZWNrcyBoZXJlLCBhdCB0aGUgZW5kLlxuXHQgKi9cblx0aWYgKCFvcHRpb25zLmFsbG93SW1wcmVjaXNlICYmXG5cdCAgICAodmFsdWUgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHJlc3VsdCA8IE1JTl9TQUZFX0lOVEVHRVIpKSB7XG5cdFx0cmV0dXJuIChuZXcgRXJyb3IoJ251bWJlciBpcyBvdXRzaWRlIG9mIHRoZSBzdXBwb3J0ZWQgcmFuZ2U6ICcgK1xuXHRcdCAgICBKU09OLnN0cmluZ2lmeShzdHIuc2xpY2Uoc3RhcnQsIGlkeCkpKSk7XG5cdH1cblxuXHRyZXR1cm4gKHJlc3VsdCk7XG59XG5cblxuLypcbiAqIEludGVycHJldCBhIGNoYXJhY3RlciBjb2RlIGFzIGEgYmFzZS0zNiBkaWdpdC5cbiAqL1xuZnVuY3Rpb24gdHJhbnNsYXRlRGlnaXQoZClcbntcblx0aWYgKGQgPj0gQ1BfMCAmJiBkIDw9IENQXzkpIHtcblx0XHQvKiAnMCcgdG8gJzknIC0+IDAgdG8gOSAqL1xuXHRcdHJldHVybiAoZCAtIFBJX0NPTlZfREVDKTtcblx0fSBlbHNlIGlmIChkID49IENQX0EgJiYgZCA8PSBDUF9aKSB7XG5cdFx0LyogJ0EnIC0gJ1onIC0+IDEwIHRvIDM1ICovXG5cdFx0cmV0dXJuIChkIC0gUElfQ09OVl9VQyk7XG5cdH0gZWxzZSBpZiAoZCA+PSBDUF9hICYmIGQgPD0gQ1Bfeikge1xuXHRcdC8qICdhJyAtICd6JyAtPiAxMCB0byAzNSAqL1xuXHRcdHJldHVybiAoZCAtIFBJX0NPTlZfTEMpO1xuXHR9IGVsc2Uge1xuXHRcdC8qIEludmFsaWQgY2hhcmFjdGVyIGNvZGUgKi9cblx0XHRyZXR1cm4gKC0xKTtcblx0fVxufVxuXG5cbi8qXG4gKiBUZXN0IGlmIGEgdmFsdWUgbWF0Y2hlcyB0aGUgRUNNQVNjcmlwdCBkZWZpbml0aW9uIG9mIHRyaW1tYWJsZSB3aGl0ZXNwYWNlLlxuICovXG5mdW5jdGlvbiBpc1NwYWNlKGMpXG57XG5cdHJldHVybiAoYyA9PT0gMHgyMCkgfHxcblx0ICAgIChjID49IDB4MDAwOSAmJiBjIDw9IDB4MDAwZCkgfHxcblx0ICAgIChjID09PSAweDAwYTApIHx8XG5cdCAgICAoYyA9PT0gMHgxNjgwKSB8fFxuXHQgICAgKGMgPT09IDB4MTgwZSkgfHxcblx0ICAgIChjID49IDB4MjAwMCAmJiBjIDw9IDB4MjAwYSkgfHxcblx0ICAgIChjID09PSAweDIwMjgpIHx8XG5cdCAgICAoYyA9PT0gMHgyMDI5KSB8fFxuXHQgICAgKGMgPT09IDB4MjAyZikgfHxcblx0ICAgIChjID09PSAweDIwNWYpIHx8XG5cdCAgICAoYyA9PT0gMHgzMDAwKSB8fFxuXHQgICAgKGMgPT09IDB4ZmVmZik7XG59XG5cblxuLypcbiAqIERldGVybWluZSB3aGljaCBiYXNlIGEgY2hhcmFjdGVyIGluZGljYXRlcyAoZS5nLiwgJ3gnIGluZGljYXRlcyBoZXgpLlxuICovXG5mdW5jdGlvbiBwcmVmaXhUb0Jhc2UoYylcbntcblx0aWYgKGMgPT09IENQX2IgfHwgYyA9PT0gQ1BfQikge1xuXHRcdC8qIDBiLzBCIChiaW5hcnkpICovXG5cdFx0cmV0dXJuICgyKTtcblx0fSBlbHNlIGlmIChjID09PSBDUF9vIHx8IGMgPT09IENQX08pIHtcblx0XHQvKiAwby8wTyAob2N0YWwpICovXG5cdFx0cmV0dXJuICg4KTtcblx0fSBlbHNlIGlmIChjID09PSBDUF90IHx8IGMgPT09IENQX1QpIHtcblx0XHQvKiAwdC8wVCAoZGVjaW1hbCkgKi9cblx0XHRyZXR1cm4gKDEwKTtcblx0fSBlbHNlIGlmIChjID09PSBDUF94IHx8IGMgPT09IENQX1gpIHtcblx0XHQvKiAweC8wWCAoaGV4YWRlY2ltYWwpICovXG5cdFx0cmV0dXJuICgxNik7XG5cdH0gZWxzZSB7XG5cdFx0LyogTm90IGEgbWVhbmluZ2Z1bCBjaGFyYWN0ZXIgKi9cblx0XHRyZXR1cm4gKC0xKTtcblx0fVxufVxuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlSnNvbk9iamVjdEpTKHNjaGVtYSwgaW5wdXQpXG57XG5cdHZhciByZXBvcnQgPSBtb2RfanNvbnNjaGVtYS52YWxpZGF0ZShpbnB1dCwgc2NoZW1hKTtcblxuXHRpZiAocmVwb3J0LmVycm9ycy5sZW5ndGggPT09IDApXG5cdFx0cmV0dXJuIChudWxsKTtcblxuXHQvKiBDdXJyZW50bHksIHdlIG9ubHkgZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggdGhlIGZpcnN0IGVycm9yLiAqL1xuXHR2YXIgZXJyb3IgPSByZXBvcnQuZXJyb3JzWzBdO1xuXG5cdC8qIFRoZSBmYWlsZWQgcHJvcGVydHkgaXMgZ2l2ZW4gYnkgYSBVUkkgd2l0aCBhbiBpcnJlbGV2YW50IHByZWZpeC4gKi9cblx0dmFyIHByb3BuYW1lID0gZXJyb3JbJ3Byb3BlcnR5J107XG5cdHZhciByZWFzb24gPSBlcnJvclsnbWVzc2FnZSddLnRvTG93ZXJDYXNlKCk7XG5cdHZhciBpLCBqO1xuXG5cdC8qXG5cdCAqIFRoZXJlJ3MgYXQgbGVhc3Qgb25lIGNhc2Ugd2hlcmUgdGhlIHByb3BlcnR5IGVycm9yIG1lc3NhZ2UgaXNcblx0ICogY29uZnVzaW5nIGF0IGJlc3QuICBXZSB3b3JrIGFyb3VuZCB0aGlzIGhlcmUuXG5cdCAqL1xuXHRpZiAoKGkgPSByZWFzb24uaW5kZXhPZigndGhlIHByb3BlcnR5ICcpKSAhPSAtMSAmJlxuXHQgICAgKGogPSByZWFzb24uaW5kZXhPZignIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBzY2hlbWEgYW5kIHRoZSAnICtcblx0ICAgICdzY2hlbWEgZG9lcyBub3QgYWxsb3cgYWRkaXRpb25hbCBwcm9wZXJ0aWVzJykpICE9IC0xKSB7XG5cdFx0aSArPSAndGhlIHByb3BlcnR5ICcubGVuZ3RoO1xuXHRcdGlmIChwcm9wbmFtZSA9PT0gJycpXG5cdFx0XHRwcm9wbmFtZSA9IHJlYXNvbi5zdWJzdHIoaSwgaiAtIGkpO1xuXHRcdGVsc2Vcblx0XHRcdHByb3BuYW1lID0gcHJvcG5hbWUgKyAnLicgKyByZWFzb24uc3Vic3RyKGksIGogLSBpKTtcblxuXHRcdHJlYXNvbiA9ICd1bnN1cHBvcnRlZCBwcm9wZXJ0eSc7XG5cdH1cblxuXHR2YXIgcnYgPSBuZXcgbW9kX3ZlcnJvci5WRXJyb3IoJ3Byb3BlcnR5IFwiJXNcIjogJXMnLCBwcm9wbmFtZSwgcmVhc29uKTtcblx0cnYuanN2X2RldGFpbHMgPSBlcnJvcjtcblx0cmV0dXJuIChydik7XG59XG5cbmZ1bmN0aW9uIHJhbmRFbHQoYXJyKVxue1xuXHRtb2RfYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkoYXJyKSAmJiBhcnIubGVuZ3RoID4gMCxcblx0ICAgICdyYW5kRWx0IGFyZ3VtZW50IG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXknKTtcblxuXHRyZXR1cm4gKGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKV0pO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRIcnRpbWUoYSlcbntcblx0bW9kX2Fzc2VydC5vayhhWzBdID49IDAgJiYgYVsxXSA+PSAwLFxuXHQgICAgJ25lZ2F0aXZlIG51bWJlcnMgbm90IGFsbG93ZWQgaW4gaHJ0aW1lcycpO1xuXHRtb2RfYXNzZXJ0Lm9rKGFbMV0gPCAxZTksICduYW5vc2Vjb25kcyBjb2x1bW4gb3ZlcmZsb3cnKTtcbn1cblxuLypcbiAqIENvbXB1dGUgdGhlIHRpbWUgZWxhcHNlZCBiZXR3ZWVuIGhydGltZSByZWFkaW5ncyBBIGFuZCBCLCB3aGVyZSBBIGlzIGxhdGVyXG4gKiB0aGFuIEIuICBocnRpbWUgcmVhZGluZ3MgY29tZSBmcm9tIE5vZGUncyBwcm9jZXNzLmhydGltZSgpLiAgVGhlcmUgaXMgbm9cbiAqIGRlZmluZWQgd2F5IHRvIHJlcHJlc2VudCBuZWdhdGl2ZSBkZWx0YXMsIHNvIGl0J3MgaWxsZWdhbCB0byBkaWZmIEIgZnJvbSBBXG4gKiB3aGVyZSB0aGUgdGltZSBkZW5vdGVkIGJ5IEIgaXMgbGF0ZXIgdGhhbiB0aGUgdGltZSBkZW5vdGVkIGJ5IEEuICBJZiB0aGlzXG4gKiBiZWNvbWVzIHZhbHVhYmxlLCB3ZSBjYW4gZGVmaW5lIGEgcmVwcmVzZW50YXRpb24gYW5kIGV4dGVuZCB0aGVcbiAqIGltcGxlbWVudGF0aW9uIHRvIHN1cHBvcnQgaXQuXG4gKi9cbmZ1bmN0aW9uIGhydGltZURpZmYoYSwgYilcbntcblx0YXNzZXJ0SHJ0aW1lKGEpO1xuXHRhc3NlcnRIcnRpbWUoYik7XG5cdG1vZF9hc3NlcnQub2soYVswXSA+IGJbMF0gfHwgKGFbMF0gPT0gYlswXSAmJiBhWzFdID49IGJbMV0pLFxuXHQgICAgJ25lZ2F0aXZlIGRpZmZlcmVuY2VzIG5vdCBhbGxvd2VkJyk7XG5cblx0dmFyIHJ2ID0gWyBhWzBdIC0gYlswXSwgMCBdO1xuXG5cdGlmIChhWzFdID49IGJbMV0pIHtcblx0XHRydlsxXSA9IGFbMV0gLSBiWzFdO1xuXHR9IGVsc2Uge1xuXHRcdHJ2WzBdLS07XG5cdFx0cnZbMV0gPSAxZTkgLSAoYlsxXSAtIGFbMV0pO1xuXHR9XG5cblx0cmV0dXJuIChydik7XG59XG5cbi8qXG4gKiBDb252ZXJ0IGEgaHJ0aW1lIHJlYWRpbmcgZnJvbSB0aGUgYXJyYXkgZm9ybWF0IHJldHVybmVkIGJ5IE5vZGUnc1xuICogcHJvY2Vzcy5ocnRpbWUoKSBpbnRvIGEgc2NhbGFyIG51bWJlciBvZiBuYW5vc2Vjb25kcy5cbiAqL1xuZnVuY3Rpb24gaHJ0aW1lTmFub3NlYyhhKVxue1xuXHRhc3NlcnRIcnRpbWUoYSk7XG5cblx0cmV0dXJuIChNYXRoLmZsb29yKGFbMF0gKiAxZTkgKyBhWzFdKSk7XG59XG5cbi8qXG4gKiBDb252ZXJ0IGEgaHJ0aW1lIHJlYWRpbmcgZnJvbSB0aGUgYXJyYXkgZm9ybWF0IHJldHVybmVkIGJ5IE5vZGUnc1xuICogcHJvY2Vzcy5ocnRpbWUoKSBpbnRvIGEgc2NhbGFyIG51bWJlciBvZiBtaWNyb3NlY29uZHMuXG4gKi9cbmZ1bmN0aW9uIGhydGltZU1pY3Jvc2VjKGEpXG57XG5cdGFzc2VydEhydGltZShhKTtcblxuXHRyZXR1cm4gKE1hdGguZmxvb3IoYVswXSAqIDFlNiArIGFbMV0gLyAxZTMpKTtcbn1cblxuLypcbiAqIENvbnZlcnQgYSBocnRpbWUgcmVhZGluZyBmcm9tIHRoZSBhcnJheSBmb3JtYXQgcmV0dXJuZWQgYnkgTm9kZSdzXG4gKiBwcm9jZXNzLmhydGltZSgpIGludG8gYSBzY2FsYXIgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqL1xuZnVuY3Rpb24gaHJ0aW1lTWlsbGlzZWMoYSlcbntcblx0YXNzZXJ0SHJ0aW1lKGEpO1xuXG5cdHJldHVybiAoTWF0aC5mbG9vcihhWzBdICogMWUzICsgYVsxXSAvIDFlNikpO1xufVxuXG4vKlxuICogQWRkIHR3byBocnRpbWUgcmVhZGluZ3MgQSBhbmQgQiwgb3ZlcndyaXRpbmcgQSB3aXRoIHRoZSByZXN1bHQgb2YgdGhlXG4gKiBhZGRpdGlvbi4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBhY2N1bXVsYXRpbmcgc2V2ZXJhbCBocnRpbWUgaW50ZXJ2YWxzXG4gKiBpbnRvIGEgY291bnRlci4gIFJldHVybnMgQS5cbiAqL1xuZnVuY3Rpb24gaHJ0aW1lQWNjdW0oYSwgYilcbntcblx0YXNzZXJ0SHJ0aW1lKGEpO1xuXHRhc3NlcnRIcnRpbWUoYik7XG5cblx0Lypcblx0ICogQWNjdW11bGF0ZSB0aGUgbmFub3NlY29uZCBjb21wb25lbnQuXG5cdCAqL1xuXHRhWzFdICs9IGJbMV07XG5cdGlmIChhWzFdID49IDFlOSkge1xuXHRcdC8qXG5cdFx0ICogVGhlIG5hbm9zZWNvbmQgY29tcG9uZW50IG92ZXJmbG93ZWQsIHNvIGNhcnJ5IHRvIHRoZSBzZWNvbmRzXG5cdFx0ICogZmllbGQuXG5cdFx0ICovXG5cdFx0YVswXSsrO1xuXHRcdGFbMV0gLT0gMWU5O1xuXHR9XG5cblx0Lypcblx0ICogQWNjdW11bGF0ZSB0aGUgc2Vjb25kcyBjb21wb25lbnQuXG5cdCAqL1xuXHRhWzBdICs9IGJbMF07XG5cblx0cmV0dXJuIChhKTtcbn1cblxuLypcbiAqIEFkZCB0d28gaHJ0aW1lIHJlYWRpbmdzIEEgYW5kIEIsIHJldHVybmluZyB0aGUgcmVzdWx0IGFzIGEgbmV3IGhydGltZSBhcnJheS5cbiAqIERvZXMgbm90IG1vZGlmeSBlaXRoZXIgaW5wdXQgYXJndW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGhydGltZUFkZChhLCBiKVxue1xuXHRhc3NlcnRIcnRpbWUoYSk7XG5cblx0dmFyIHJ2ID0gWyBhWzBdLCBhWzFdIF07XG5cblx0cmV0dXJuIChocnRpbWVBY2N1bShydiwgYikpO1xufVxuXG5cbi8qXG4gKiBDaGVjayBhbiBvYmplY3QgZm9yIHVuZXhwZWN0ZWQgcHJvcGVydGllcy4gIEFjY2VwdHMgdGhlIG9iamVjdCB0byBjaGVjaywgYW5kXG4gKiBhbiBhcnJheSBvZiBhbGxvd2VkIHByb3BlcnR5IG5hbWVzIChzdHJpbmdzKS4gIFJldHVybnMgYW4gYXJyYXkgb2Yga2V5IG5hbWVzXG4gKiB0aGF0IHdlcmUgZm91bmQgb24gdGhlIG9iamVjdCwgYnV0IGRpZCBub3QgYXBwZWFyIGluIHRoZSBsaXN0IG9mIGFsbG93ZWRcbiAqIHByb3BlcnRpZXMuICBJZiBubyBwcm9wZXJ0aWVzIHdlcmUgZm91bmQsIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGJlIG9mXG4gKiB6ZXJvIGxlbmd0aC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFQcm9wZXJ0aWVzKG9iaiwgYWxsb3dlZClcbntcblx0bW9kX2Fzc2VydC5vayh0eXBlb2YgKG9iaikgPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCxcblx0ICAgICdvYmogYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdCcpO1xuXHRtb2RfYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkoYWxsb3dlZCksXG5cdCAgICAnYWxsb3dlZCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhbGxvd2VkLmxlbmd0aDsgaSsrKSB7XG5cdFx0bW9kX2Fzc2VydC5vayh0eXBlb2YgKGFsbG93ZWRbaV0pID09PSAnc3RyaW5nJyxcblx0XHQgICAgJ2FsbG93ZWQgYXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJyk7XG5cdH1cblxuXHRyZXR1cm4gKE9iamVjdC5rZXlzKG9iaikuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRyZXR1cm4gKGFsbG93ZWQuaW5kZXhPZihrZXkpID09PSAtMSk7XG5cdH0pKTtcbn1cblxuLypcbiAqIEdpdmVuIHRocmVlIHNldHMgb2YgcHJvcGVydGllcyBcInByb3ZpZGVkXCIgKG1heSBiZSB1bmRlZmluZWQpLCBcIm92ZXJyaWRlc1wiXG4gKiAocmVxdWlyZWQpLCBhbmQgXCJkZWZhdWx0c1wiIChtYXkgYmUgdW5kZWZpbmVkKSwgY29uc3RydWN0IGFuIG9iamVjdCBjb250YWluaW5nXG4gKiB0aGUgdW5pb24gb2YgdGhlc2Ugc2V0cyB3aXRoIFwib3ZlcnJpZGVzXCIgb3ZlcnJpZGluZyBcInByb3ZpZGVkXCIsIGFuZFxuICogXCJwcm92aWRlZFwiIG92ZXJyaWRpbmcgXCJkZWZhdWx0c1wiLiAgTm9uZSBvZiB0aGUgaW5wdXQgb2JqZWN0cyBhcmUgbW9kaWZpZWQuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlT2JqZWN0cyhwcm92aWRlZCwgb3ZlcnJpZGVzLCBkZWZhdWx0cylcbntcblx0dmFyIHJ2LCBrO1xuXG5cdHJ2ID0ge307XG5cdGlmIChkZWZhdWx0cykge1xuXHRcdGZvciAoayBpbiBkZWZhdWx0cylcblx0XHRcdHJ2W2tdID0gZGVmYXVsdHNba107XG5cdH1cblxuXHRpZiAocHJvdmlkZWQpIHtcblx0XHRmb3IgKGsgaW4gcHJvdmlkZWQpXG5cdFx0XHRydltrXSA9IHByb3ZpZGVkW2tdO1xuXHR9XG5cblx0aWYgKG92ZXJyaWRlcykge1xuXHRcdGZvciAoayBpbiBvdmVycmlkZXMpXG5cdFx0XHRydltrXSA9IG92ZXJyaWRlc1trXTtcblx0fVxuXG5cdHJldHVybiAocnYpO1xufVxuIiwiLy8gQ29weXJpZ2h0IChjKSAyMDEyLCBNYXJrIENhdmFnZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cblxuLy8vLS0tIEdsb2JhbHNcblxuLyogSlNTVFlMRUQgKi9cbnZhciBVVUlEX1JFR0VYUCA9IC9eW2EtZkEtRjAtOV17OH0tW2EtZkEtRjAtOV17NH0tW2EtZkEtRjAtOV17NH0tW2EtZkEtRjAtOV17NH0tW2EtZkEtRjAtOV17MTJ9JC87XG5cblxuLy8vLS0tIEludGVybmFsXG5cbmZ1bmN0aW9uIF9jYXBpdGFsaXplKHN0cikge1xuICAgIHJldHVybiAoc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpKTtcbn1cblxuZnVuY3Rpb24gX3Rvc3MobmFtZSwgZXhwZWN0ZWQsIG9wZXIsIGFyZywgYWN0dWFsKSB7XG4gICAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6IHV0aWwuZm9ybWF0KCclcyAoJXMpIGlzIHJlcXVpcmVkJywgbmFtZSwgZXhwZWN0ZWQpLFxuICAgICAgICBhY3R1YWw6IChhY3R1YWwgPT09IHVuZGVmaW5lZCkgPyB0eXBlb2YgKGFyZykgOiBhY3R1YWwoYXJnKSxcbiAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgICAgICBvcGVyYXRvcjogb3BlciB8fCAnPT09JyxcbiAgICAgICAgc3RhY2tTdGFydEZ1bmN0aW9uOiBfdG9zcy5jYWxsZXJcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2dldENsYXNzKGFyZykge1xuICAgIHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykuc2xpY2UoOCwgLTEpKTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHtcbiAgICAvLyBXaHkgZXZlbiBib3RoZXIgd2l0aCBhc3NlcnRzP1xufVxuXG5cbi8vLy0tLSBFeHBvcnRzXG5cbnZhciB0eXBlcyA9IHtcbiAgICBib29sOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdib29sZWFuJzsgfVxuICAgIH0sXG4gICAgZnVuYzoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnZnVuY3Rpb24nOyB9XG4gICAgfSxcbiAgICBzdHJpbmc6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ3N0cmluZyc7IH1cbiAgICB9LFxuICAgIG9iamVjdDoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBudW1iZXI6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdudW1iZXInICYmICFpc05hTihhcmcpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBmaW5pdGU6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdudW1iZXInICYmICFpc05hTihhcmcpICYmIGlzRmluaXRlKGFyZyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGJ1ZmZlcjoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGFyZyk7IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnQnVmZmVyLmlzQnVmZmVyJ1xuICAgIH0sXG4gICAgYXJyYXk6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKTsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdBcnJheS5pc0FycmF5J1xuICAgIH0sXG4gICAgc3RyZWFtOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBhcmcgaW5zdGFuY2VvZiBTdHJlYW07IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaW5zdGFuY2VvZicsXG4gICAgICAgIGFjdHVhbDogX2dldENsYXNzXG4gICAgfSxcbiAgICBkYXRlOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBhcmcgaW5zdGFuY2VvZiBEYXRlOyB9LFxuICAgICAgICBvcGVyYXRvcjogJ2luc3RhbmNlb2YnLFxuICAgICAgICBhY3R1YWw6IF9nZXRDbGFzc1xuICAgIH0sXG4gICAgcmVnZXhwOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBhcmcgaW5zdGFuY2VvZiBSZWdFeHA7IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaW5zdGFuY2VvZicsXG4gICAgICAgIGFjdHVhbDogX2dldENsYXNzXG4gICAgfSxcbiAgICB1dWlkOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnc3RyaW5nJyAmJiBVVUlEX1JFR0VYUC50ZXN0KGFyZyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaXNVVUlEJ1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIF9zZXRFeHBvcnRzKG5kZWJ1Zykge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModHlwZXMpO1xuICAgIHZhciBvdXQ7XG5cbiAgICAvKiByZS1leHBvcnQgc3RhbmRhcmQgYXNzZXJ0ICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfTkRFQlVHKSB7XG4gICAgICAgIG91dCA9IG5vb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgJ3RydWUnLCBhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qIHN0YW5kYXJkIGNoZWNrcyAqL1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICBpZiAobmRlYnVnKSB7XG4gICAgICAgICAgICBvdXRba10gPSBub29wO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0eXBlID0gdHlwZXNba107XG4gICAgICAgIG91dFtrXSA9IGZ1bmN0aW9uIChhcmcsIG1zZykge1xuICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZykpIHtcbiAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGssIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogb3B0aW9uYWwgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBuYW1lID0gJ29wdGlvbmFsJyArIF9jYXBpdGFsaXplKGspO1xuICAgICAgICBpZiAobmRlYnVnKSB7XG4gICAgICAgICAgICBvdXRbbmFtZV0gPSBub29wO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0eXBlID0gdHlwZXNba107XG4gICAgICAgIG91dFtuYW1lXSA9IGZ1bmN0aW9uIChhcmcsIG1zZykge1xuICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdHlwZS5jaGVjayhhcmcpKSB7XG4gICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBrLCB0eXBlLm9wZXJhdG9yLCBhcmcsIHR5cGUuYWN0dWFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qIGFycmF5T2YgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBuYW1lID0gJ2FycmF5T2YnICsgX2NhcGl0YWxpemUoayk7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtuYW1lXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgdmFyIGV4cGVjdGVkID0gJ1snICsgayArICddJztcbiAgICAgICAgb3V0W25hbWVdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgZXhwZWN0ZWQsIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZ1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBleHBlY3RlZCwgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogb3B0aW9uYWxBcnJheU9mIGNoZWNrcyAqL1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICB2YXIgbmFtZSA9ICdvcHRpb25hbEFycmF5T2YnICsgX2NhcGl0YWxpemUoayk7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtuYW1lXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgdmFyIGV4cGVjdGVkID0gJ1snICsgayArICddJztcbiAgICAgICAgb3V0W25hbWVdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGV4cGVjdGVkLCB0eXBlLm9wZXJhdG9yLCBhcmcsIHR5cGUuYWN0dWFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdHlwZS5jaGVjayhhcmdbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIF90b3NzKG1zZywgZXhwZWN0ZWQsIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qIHJlLWV4cG9ydCBidWlsdC1pbiBhc3NlcnRpb25zICovXG4gICAgT2JqZWN0LmtleXMoYXNzZXJ0KS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChrID09PSAnQXNzZXJ0aW9uRXJyb3InKSB7XG4gICAgICAgICAgICBvdXRba10gPSBhc3NlcnRba107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5kZWJ1Zykge1xuICAgICAgICAgICAgb3V0W2tdID0gbm9vcDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBvdXRba10gPSBhc3NlcnRba107XG4gICAgfSk7XG5cbiAgICAvKiBleHBvcnQgb3Vyc2VsdmVzIChmb3IgdW5pdCB0ZXN0cyBfb25seV8pICovXG4gICAgb3V0Ll9zZXRFeHBvcnRzID0gX3NldEV4cG9ydHM7XG5cbiAgICByZXR1cm4gb3V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRFeHBvcnRzKHByb2Nlc3MuZW52Lk5PREVfTkRFQlVHKTtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaW5nO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVW5kZWZpbmVkKHZvaWQgMCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1VuZGVmaW5lZChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVW5kZWZpbmVkO1xuIiwidmFyIGJuID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBicm9yYW5kID0gcmVxdWlyZSgnYnJvcmFuZCcpO1xuXG5mdW5jdGlvbiBNaWxsZXJSYWJpbihyYW5kKSB7XG4gIHRoaXMucmFuZCA9IHJhbmQgfHwgbmV3IGJyb3JhbmQuUmFuZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBNaWxsZXJSYWJpbjtcblxuTWlsbGVyUmFiaW4uY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHJhbmQpIHtcbiAgcmV0dXJuIG5ldyBNaWxsZXJSYWJpbihyYW5kKTtcbn07XG5cbk1pbGxlclJhYmluLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgdmFyIGxlbiA9IG4uYml0TGVuZ3RoKCk7XG4gIHZhciBidWYgPSB0aGlzLnJhbmQuZ2VuZXJhdGUoTWF0aC5jZWlsKGxlbiAvIDgpKTtcblxuICAvLyBTZXQgbG93IGJpdHNcbiAgYnVmWzBdIHw9IDM7XG5cbiAgLy8gTWFzayBoaWdoIGJpdHNcbiAgdmFyIG1hc2sgPSBsZW4gJiAweDc7XG4gIGlmIChtYXNrICE9PSAwKVxuICAgIGJ1ZltidWYubGVuZ3RoIC0gMV0gPj49IDcgLSBtYXNrO1xuXG4gIHJldHVybiBuZXcgYm4oYnVmKTtcbn1cblxuTWlsbGVyUmFiaW4ucHJvdG90eXBlLnRlc3QgPSBmdW5jdGlvbiB0ZXN0KG4sIGssIGNiKSB7XG4gIHZhciBsZW4gPSBuLmJpdExlbmd0aCgpO1xuICB2YXIgcmVkID0gYm4ubW9udChuKTtcbiAgdmFyIHJvbmUgPSBuZXcgYm4oMSkudG9SZWQocmVkKTtcblxuICBpZiAoIWspXG4gICAgayA9IE1hdGgubWF4KDEsIChsZW4gLyA0OCkgfCAwKTtcblxuICAvLyBGaW5kIGQgYW5kIHMsIChuIC0gMSkgPSAoMiBeIHMpICogZDtcbiAgdmFyIG4xID0gbi5zdWJuKDEpO1xuICB2YXIgbjIgPSBuMS5zdWJuKDEpO1xuICBmb3IgKHZhciBzID0gMDsgIW4xLnRlc3RuKHMpOyBzKyspIHt9XG4gIHZhciBkID0gbi5zaHJuKHMpO1xuXG4gIHZhciBybjEgPSBuMS50b1JlZChyZWQpO1xuXG4gIHZhciBwcmltZSA9IHRydWU7XG4gIGZvciAoOyBrID4gMDsgay0tKSB7XG4gICAgdmFyIGEgPSB0aGlzLl9yYW5kKG4yKTtcbiAgICBpZiAoY2IpXG4gICAgICBjYihhKTtcblxuICAgIHZhciB4ID0gYS50b1JlZChyZWQpLnJlZFBvdyhkKTtcbiAgICBpZiAoeC5jbXAocm9uZSkgPT09IDAgfHwgeC5jbXAocm4xKSA9PT0gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBzOyBpKyspIHtcbiAgICAgIHggPSB4LnJlZFNxcigpO1xuXG4gICAgICBpZiAoeC5jbXAocm9uZSkgPT09IDApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh4LmNtcChybjEpID09PSAwKVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gcylcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBwcmltZTtcbn07XG5cbk1pbGxlclJhYmluLnByb3RvdHlwZS5nZXREaXZpc29yID0gZnVuY3Rpb24gZ2V0RGl2aXNvcihuLCBrKSB7XG4gIHZhciBsZW4gPSBuLmJpdExlbmd0aCgpO1xuICB2YXIgcmVkID0gYm4ubW9udChuKTtcbiAgdmFyIHJvbmUgPSBuZXcgYm4oMSkudG9SZWQocmVkKTtcblxuICBpZiAoIWspXG4gICAgayA9IE1hdGgubWF4KDEsIChsZW4gLyA0OCkgfCAwKTtcblxuICAvLyBGaW5kIGQgYW5kIHMsIChuIC0gMSkgPSAoMiBeIHMpICogZDtcbiAgdmFyIG4xID0gbi5zdWJuKDEpO1xuICB2YXIgbjIgPSBuMS5zdWJuKDEpO1xuICBmb3IgKHZhciBzID0gMDsgIW4xLnRlc3RuKHMpOyBzKyspIHt9XG4gIHZhciBkID0gbi5zaHJuKHMpO1xuXG4gIHZhciBybjEgPSBuMS50b1JlZChyZWQpO1xuXG4gIGZvciAoOyBrID4gMDsgay0tKSB7XG4gICAgdmFyIGEgPSB0aGlzLl9yYW5kKG4yKTtcblxuICAgIHZhciBnID0gbi5nY2QoYSk7XG4gICAgaWYgKGcuY21wbigxKSAhPT0gMClcbiAgICAgIHJldHVybiBnO1xuXG4gICAgdmFyIHggPSBhLnRvUmVkKHJlZCkucmVkUG93KGQpO1xuICAgIGlmICh4LmNtcChyb25lKSA9PT0gMCB8fCB4LmNtcChybjEpID09PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHM7IGkrKykge1xuICAgICAgeCA9IHgucmVkU3FyKCk7XG5cbiAgICAgIGlmICh4LmNtcChyb25lKSA9PT0gMClcbiAgICAgICAgcmV0dXJuIHguZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKG4pO1xuICAgICAgaWYgKHguY21wKHJuMSkgPT09IDApXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChpID09PSBzKSB7XG4gICAgICB4ID0geC5yZWRTcXIoKTtcbiAgICAgIHJldHVybiB4LmZyb21SZWQoKS5zdWJuKDEpLmdjZChuKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImFwcGxpY2F0aW9uLzFkLWludGVybGVhdmVkLXBhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi8zZ3BkYXNoLXFvZS1yZXBvcnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uLzNncHAtaW1zK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hMmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWN0aXZlbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWNvc3RtYXAranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tY29zdG1hcGZpbHRlcitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1kaXJlY3RvcnkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tZW5kcG9pbnRjb3N0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWVuZHBvaW50Y29zdHBhcmFtcytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1lbmRwb2ludHByb3AranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tZW5kcG9pbnRwcm9wcGFyYW1zK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWVycm9yK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLW5ldHdvcmttYXAranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tbmV0d29ya21hcGZpbHRlcitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYW1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FuZHJldy1pbnNldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXBwbGVmaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FwcGxpeHdhcmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0ZnhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRvbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF0b21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdG9tY2F0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF0b21jYXRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdG9tZGVsZXRlZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRvbWljbWFpbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdG9tc3ZjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF0b21zdmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdHhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdXRoLXBvbGljeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYmFjbmV0LXhkZCt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYmF0Y2gtc210cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9iZG9jXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYmRvY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2JlZXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NhbGVuZGFyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jYWxlbmRhcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2FsbC1jb21wbGV0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NhbHMtMTg0MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NjbXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NjeG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNjeG1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2RmeCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2RtaS1jYXBhYmlsaXR5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RtaWFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG1pLWNvbnRhaW5lclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkbWljXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2RtaS1kb21haW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZG1pZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkbWktb2JqZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RtaW9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG1pLXF1ZXVlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RtaXFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG5pXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NlYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZWEtMjAxOCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2VsbG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZndcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2x1ZV9pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jbXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY25ycCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY29hcC1ncm91cCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY29hcC1wYXlsb2FkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NvbW1vbmdyb3VuZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb25mZXJlbmNlLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nvc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY29zZS1rZXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY29zZS1rZXktc2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NwbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3NyYXR0cnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3N0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3N0YWRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nzdm0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2N1LXNlZW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjdVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2N5YmVyY2FzaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kYXJ0XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGFzaCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kYXNoZGVsdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGF2bW91bnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGF2bW91bnRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kY2EtcmZ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RjZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kZWMtZHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGlhbG9nLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RpY29tXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RpY29tK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kaWNvbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGlpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RpdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kbnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZG9jYm9vayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRia1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rza3BwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kc3NjK2RlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRzc2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kc3NjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkc3NjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZHZjc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlY21hXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZWRpLWNvbnNlbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZWRpLXgxMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lZGlmYWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VmaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5jb21tZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5jb250cm9sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5kZXZpY2VpbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5lY2FsbC5tc2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEucHJvdmlkZXJpbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5zZXJ2aWNlaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuc3Vic2NyaWJlcmluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLnZlZHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtbWEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW1tYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Vtb3Rpb25tbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW5jYXBydHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZXBwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lcHViK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVwdWJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lc2hvcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9leGlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJleGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mYXN0aW5mb3NldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mYXN0c29hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mZHQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZpdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZm9udC1zZm50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZvbnQtdGRwZnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwZnJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mb250LXdvZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3b2ZmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZm9udC13b2ZmMlwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndvZmYyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZnJhbWV3b3JrLWF0dHJpYnV0ZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2dlbytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZW9qc29uXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ2VvK2pzb24tc2VxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2dtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ncHgreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJncHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9neGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd4ZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2d6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaDIyNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9oZWxkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9odHRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2h5cGVyc3R1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaWJlLWtleS1yZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pYmUtcGtnLXJlcGx5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pYmUtcHAtZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pZ2VzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ltLWlzY29tcG9zaW5nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pbmRleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pbmRleC5jbWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW5kZXgub2JqXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2luZGV4LnJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2luZGV4LnZuZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pbmttbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpbmtcIixcImlua21sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW90cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pcGZpeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlwZml4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaXBwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lzdXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaXRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImphclwiLFwid2FyXCIsXCJlYXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qYXZhLXNlcmlhbGl6ZWQtb2JqZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qYXZhLXZtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbGFzc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qb3NlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pvc2UranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pyZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc29uXCIsXCJtYXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qc29uLXNlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qc29uNVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpzb241XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNvbm1sK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianNvbm1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vandrK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qd2stc2V0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qd3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24va3BtbC1yZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9rcG1sLXJlc3BvbnNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9sZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc29ubGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9sZ3IreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xpbmstZm9ybWF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xvYWQtY29udHJvbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbG9zdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsb3N0eG1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbG9zdHN5bmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2x4ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYWMtYmluaGV4NDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJocXhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYWMtY29tcGFjdHByb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3B0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWFjd3JpdGVpaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYWRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1hZHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYW5pZmVzdCtqc29uXCI6IHtcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYm1hbmlmZXN0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWFyY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1yY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hcmN4bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXJjeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhlbWF0aWNhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWFcIixcIm5iXCIsXCJtYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYXRobWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYXRobWwtY29udGVudCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWF0aG1sLXByZXNlbnRhdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1hc3NvY2lhdGVkLXByb2NlZHVyZS1kZXNjcmlwdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1kZXJlZ2lzdGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLWVudmVsb3BlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLW1zayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1tc2stcmVzcG9uc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtcHJvdGVjdGlvbi1kZXNjcmlwdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1yZWNlcHRpb24tcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXJlZ2lzdGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXJlZ2lzdGVyLXJlc3BvbnNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXNjaGVkdWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXVzZXItc2VydmljZS1kZXNjcmlwdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJveFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ib3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZWRpYS1wb2xpY3ktZGF0YXNldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWVkaWFfY29udHJvbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWVkaWFzZXJ2ZXJjb250cm9sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zY21sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWVyZ2UtcGF0Y2granNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ldGFsaW5rK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWV0YWxpbmtcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZXRhbGluazQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWV0YTRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZXRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ldHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZjRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWlrZXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9kcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtb2RzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9zcy1rZXlzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21vc3Mtc2lnbmF0dXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21vc3NrZXktZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tb3Nza2V5LXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXAyMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm0yMVwiLFwibXAyMVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21wNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wNHNcIixcIm00cFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21wZWc0LWdlbmVyaWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXBlZzQtaW9kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21wZWc0LWlvZC14bXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXJiLWNvbnN1bWVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcmItcHVibGlzaCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXNjLWl2cit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXNjLW1peGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tc3dvcmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkb2NcIixcImRvdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL211ZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXhmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXhmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbi1xdWFkc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uLXRyaXBsZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbmFzZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uZXdzLWNoZWNrZ3JvdXBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL25ld3MtZ3JvdXBpbmZvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL25ld3MtdHJhbnNtaXNzaW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL25sc21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2NzcC1yZXF1ZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL29jc3AtcmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYmluXCIsXCJkbXNcIixcImxyZlwiLFwibWFyXCIsXCJzb1wiLFwiZGlzdFwiLFwiZGlzdHpcIixcInBrZ1wiLFwiYnBrXCIsXCJkdW1wXCIsXCJlbGNcIixcImRlcGxveVwiLFwiZXhlXCIsXCJkbGxcIixcImRlYlwiLFwiZG1nXCIsXCJpc29cIixcImltZ1wiLFwibXNpXCIsXCJtc3BcIixcIm1zbVwiLFwiYnVmZmVyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2RhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2R4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL29lYnBzLXBhY2thZ2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3BmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2dnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2d4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb21kb2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvbWRvY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL29uZW5vdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9uZXRvY1wiLFwib25ldG9jMlwiLFwib25ldG1wXCIsXCJvbmVwa2dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9veHBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3hwc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3AycC1vdmVybGF5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGF0Y2gtb3BzLWVycm9yK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhlclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BkeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wZ3AtZW5jcnlwdGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGdwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGdwLWtleXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFzY1wiLFwic2lnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGljcy1ydWxlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHJmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGlkZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGlkZi1kaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzMTBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwMTBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGtjczctbWltZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInA3bVwiLFwicDdjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGtjczctc2lnbmF0dXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicDdzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGtjczhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwOFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BraXgtYXR0ci1jZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4LWNlcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4LWNybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNybFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BraXgtcGtpcGF0aFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBraXBhdGhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4Y21wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGtpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGxzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBsc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BvYy1zZXR0aW5ncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcG9zdHNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWlcIixcImVwc1wiLFwicHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcHNwLXRyYWNrZXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Byb2JsZW0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Byb2JsZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Byb3ZlbmFuY2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5hbHZlc3RyYW5kLnRpdHJheC1zaGVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcnMuY3d3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3d3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLmhwdWIremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5ucHJlbmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLnBsdWNrZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLnJkZi14bWwtY3J5cHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLnhzZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHNrYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwc2tjeG1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcXNpZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yYXB0b3JmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmRhcCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmRmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmVnaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyaWZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZWxheC1uZy1jb21wYWN0LXN5bnRheFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJuY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JlbW90ZS1wcmludGluZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZXB1dG9uK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZXNvdXJjZS1saXN0cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzLWRpZmYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmxkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmZjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yaXNjb3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmxtaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmxzLXNlcnZpY2VzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnBraS1naG9zdGJ1c3RlcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnYnJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ycGtpLW1hbmlmZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWZ0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnBraS1yb2FcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyb2FcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ycGtpLXVwZG93blwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yc2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyc2RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yc3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJzc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3J0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnRwbG9vcGJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NhbWxhc3NlcnRpb24reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NhbWxtZXRhZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2JtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzYm1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2NhaXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjaW0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjcVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY3NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcHFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3BwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2RwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2RwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2VwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXAtZXhpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlc3Npb24taW5mb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXQtcGF5bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXQtcGF5bWVudC1pbml0aWF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2V0cGF5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2V0LXJlZ2lzdHJhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXQtcmVnaXN0cmF0aW9uLWluaXRpYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZXRyZWdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZ21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NnbWwtb3Blbi1jYXRhbG9nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NoZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zaWV2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zaW1wbGUtZmlsdGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zaW1wbGUtbWVzc2FnZS1zdW1tYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NpbXBsZXN5bWJvbGNvbnRhaW5lclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zbWlsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NtaWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic21pXCIsXCJzbWlsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc21wdGUzMzZtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NvYXArZmFzdGluZm9zZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc29hcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zcGFycWwtcXVlcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJycVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NwYXJxbC1yZXN1bHRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNyeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NwaXJpdHMtZXZlbnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NxbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zcmdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3JhbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NyZ3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3J4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zcnUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3J1XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3NkbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNzZGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zc21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNzbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLWFwZXgtdXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtYXBleC11cGRhdGUtY29uZmlybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLWNvbW11bml0eS11cGRhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1jb21tdW5pdHktdXBkYXRlLWNvbmZpcm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1lcnJvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXNlcXVlbmNlLWFkanVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXNlcXVlbmNlLWFkanVzdC1jb25maXJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtc3RhdHVzLXF1ZXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtc3RhdHVzLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtdXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtdXBkYXRlLWNvbmZpcm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFyXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGVpK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRlaVwiLFwidGVpY29ycHVzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGhyYXVkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRmaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RpbWVzdGFtcC1xdWVyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90aW1lc3RhbXAtcmVwbHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGltZXN0YW1wZWQtZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRzZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RyaWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdHRtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdHZlLXRyaWdnZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdWxwZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3VyYy1ncnBzaGVldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdXJjLXJlc3NoZWV0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91cmMtdGFyZ2V0ZGVzYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdXJjLXVpc29ja2V0ZGVzYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdmNhcmQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZjYXJkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92ZW1taVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92aXZpZGVuY2Uuc2NyaXB0ZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLXByb3NlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC1wcm9zZS1wYzNjaCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuYWNjZXNzLXRyYW5zZmVyLWV2ZW50cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuYnNmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5taWQtY2FsbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LWxhcmdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGxiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXNtYWxsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHNiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXZhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB2YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnNtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zbXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnNydmNjLWV4dCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc3J2Y2MtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc3RhdGUtYW5kLWV2ZW50LWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnVzc2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwMi5iY21jc2luZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwMi5zbXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAyLnRjYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0Y2FwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNsaWdodHNzb2Z0d2FyZS5pbWFnZXNjYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNtLnBvc3QtaXQtbm90ZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwd25cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWNjcGFjLnNpbXBseS5hc29cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhc29cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWNjcGFjLnNpbXBseS5pbXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpbXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWN1Y29ib2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhY3VcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWN1Y29ycFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF0Y1wiLFwiYWN1dGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWlyLWFwcGxpY2F0aW9uLWluc3RhbGxlci1wYWNrYWdlK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWlyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLmZsYXNoLm1vdmllXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5mb3Jtc2NlbnRyYWwuZmNkdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZjZHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUuZnhwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnhwXCIsXCJmeHBsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLnBhcnRpYWwtdXBsb2FkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS54ZHAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGRwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLnhmZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZmRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFldGhlci5pbXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFoLWJhcmNvZGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFoZWFkLnNwYWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWhlYWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWlyemlwLmZpbGVzZWN1cmUuYXpmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXpmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFpcnppcC5maWxlc2VjdXJlLmF6c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF6c1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24uZWJvb2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF6d1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24ubW9iaTgtZWJvb2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtZXJpY2FuZHluYW1pY3MuYWNjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtaWdhLmFtaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFtaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbXVuZHNlbi5tYXplK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5wYWNrYWdlLWFyY2hpdmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwa1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbmtpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbnNlci13ZWItY2VydGlmaWNhdGUtaXNzdWUtaW5pdGlhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNpaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbnNlci13ZWItZnVuZHMtdHJhbnNmZXItaW5pdGlhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnRpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFudGl4LmdhbWUtY29tcG9uZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXR4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwYWNoZS50aHJpZnQuYmluYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcGFjaGUudGhyaWZ0LmNvbXBhY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwYWNoZS50aHJpZnQuanNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBpK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBvdGhla2VuZGUucmVzZXJ2YXRpb24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5pbnN0YWxsZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBrZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTN1OFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5wa3Bhc3NcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwa3Bhc3NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXJhc3RyYS5zd2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFyaXN0YW5ldHdvcmtzLnN3aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN3aVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcnRzcXVhcmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFzdHJhZWEtc29mdHdhcmUuaW90YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlvdGFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXVkaW9ncmFwaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFlcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hdXRvcGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXZpc3Rhcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJhbHNhbWlxLmJtbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iYWxzYW1pcS5ibXByXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iZWtpdHp1ci1zdGVjaCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJpb3BheC5yZGYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibHVlaWNlLm11bHRpcGFzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibHVldG9vdGguZXAub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibHVldG9vdGgubGUub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibWlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibWlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYnVzaW5lc3NvYmplY3RzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmVwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNhYi1qc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jYW5vbi1jcGRsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jYW5vbi1saXBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jZW5kaW8udGhpbmxpbmMuY2xpZW50Y29uZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2VudHVyeS1zeXN0ZW1zLnRjcF9zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNoZW1kcmF3K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkeG1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNoZXNzLXBnblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2hpcG51dHMua2FyYW9rZS1tbWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2luZGVyZWxsYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkeVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaXJwYWNrLmlzZG4tZXh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaXRhdGlvbnN0eWxlcy5zdHlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNsYXltb3JlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNsb2FudG8ucnA5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnA5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNsb25rLmM0Z3JvdXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjNGdcIixcImM0ZFwiLFwiYzRmXCIsXCJjNHBcIixcImM0dVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbHVldHJ1c3QuY2FydG9tb2JpbGUtY29uZmlnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYzExYW1jXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNsdWV0cnVzdC5jYXJ0b21vYmlsZS1jb25maWctcGtnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYzExYW16XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvZmZlZXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29sbGVjdGlvbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbGxlY3Rpb24uZG9jK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29sbGVjdGlvbi5uZXh0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29taWNib29rK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29tbWVyY2UtYmF0dGVsbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbW1vbnNwYWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3NwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbnRhY3QuY21zZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkYmNtc2dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29yZW9zLmlnbml0aW9uK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29zbW9jYWxsZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsa3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5rZXlib2FyZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsa2tcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5wYWxldHRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xrcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xrdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLndvcmRiYW5rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xrd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcml0aWNhbHRvb2xzLndicyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3YnNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3RjLXBvc21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN0Y3Qud3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXBkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3Vwcy1wb3N0c2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXBwZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXJhc3RlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3Vwcy1yYXdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cmwuY2FyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjYXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3VybC5wY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGN1cmxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3lhbi5kZWFuLnJvb3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jeWJhbmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmQybC5jb3Vyc2VwYWNrYWdlMXAwK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGFydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGFydFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kYXRhLXZpc2lvbi5yZHpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyZHpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGF0YXJlc291cmNlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGViaWFuLmJpbmFyeS1wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZWNlLmRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dmZcIixcInV2dmZcIixcInV2ZFwiLFwidXZ2ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZWNlLnR0bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZ0XCIsXCJ1dnZ0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlY2UudW5zcGVjaWZpZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnhcIixcInV2dnhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGVjZS56aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnpcIixcInV2dnpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGVub3ZvLmZjc2VsYXlvdXQtbGlua1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZlX2xhdW5jaFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZXNtdW1lLW1vdmllXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZXNtdW1lLm1vdmllXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRpci1iaS5wbGF0ZS1kbC1ub3N1ZmZpeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZG0uZGVsZWdhdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRuYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRuYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kb2N1bWVudCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRvbGJ5Lm1scFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWxwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRvbGJ5Lm1vYmlsZS4xXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kb2xieS5tb2JpbGUuMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZG9yZW1pci5zY29yZWNsb3VkLWJpbmFyeS1kb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHBncmFwaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRwZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kcmVhbWZhY3RvcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZmFjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRyaXZlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHMta2V5cG9pbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImtweHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHRnLmxvY2FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdGcubG9jYWwuZmxhc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR0Zy5sb2NhbC5odG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuYWl0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWl0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5kdmJqXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuZXNnY29udGFpbmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuaXBkY2RmdG5vdGlmYWNjZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuaXBkY2VzZ2FjY2Vzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNlc2dhY2Nlc3MyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuaXBkY2VzZ3BkZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNyb2FtaW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuaXB0di5hbGZlYy1iYXNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuaXB0di5hbGZlYy1lbmhhbmNlbWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWFnZ3JlZ2F0ZS1yb290K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWNvbnRhaW5lcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1nZW5lcmljK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWlhLW1zZ2xpc3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtaWEtcmVnaXN0cmF0aW9uLXJlcXVlc3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtaWEtcmVnaXN0cmF0aW9uLXJlc3BvbnNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWluaXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIucGZyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuc2VydmljZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN2Y1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5keHJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR5bmFnZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZW9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHpyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lYXN5a2FyYW9rZS5jZGdkb3dubG9hZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNkaXMtdXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uY2hhcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYWdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNvd2luLmZpbGVyZXF1ZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uZmlsZXVwZGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNvd2luLnNlcmllc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNvd2luLnNlcmllc3JlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5zZXJpZXN1cGRhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVmaS5pbWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVmaS5pc29cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVtY2xpZW50LmFjY2Vzc3JlcXVlc3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lbmxpdmVuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibm1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVucGhhc2UuZW52b3lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVwcmludHMuZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVwc29uLmVzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5tc2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXBzb24ucXVpY2thbmltZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInFhbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5zYWx0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2x0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVwc29uLnNzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNzZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcmljc3Nvbi5xdWlja2NhbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVzcGFzcy1lc3Bhc3MremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lc3ppZ25vMyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlczNcIixcImV0M1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmFvYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuYXNpYy1lK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5hc2ljLXMremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmN1Zyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dmNvbW1hbmQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZkaXNjb3ZlcnkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZwcm9maWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2FkLWJjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2FkLWNvZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dnNhZC1ucHZyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2VydmljZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dnN5bmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZ1ZXByb2ZpbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLm1jaWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLm1oZWc1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLm92ZXJsb2FkLWNvbnRyb2wtcG9saWN5LWRhdGFzZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnBzdG4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnNjaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuc2ltc2VydnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnRpbWVzdGFtcC10b2tlblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS50c2wreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnRzbC5kZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV1ZG9yYS5kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lenBpeC1hbGJ1bVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV6MlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lenBpeC1wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXozXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmYtc2VjdXJlLm1vYmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmFzdGNvcHktZGlzay1pbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZkc24ubXNlZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2VlZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mZHNuLnNlZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZWVkXCIsXCJkYXRhbGVzc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mZnNuc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmlsbWl0LnpmY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmludHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZpcmVtb25rZXlzLmNsb3VkY2VsbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmxvZ3JhcGhpdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdwaFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mbHV4dGltZS5jbGlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnRjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZvbnQtZm9udGZvcmdlLXNmZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnJhbWVtYWtlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZtXCIsXCJmcmFtZVwiLFwibWFrZXJcIixcImJvb2tcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnJvZ2Fucy5mbmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnJvZ2Fucy5sdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsdGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnNjLndlYmxhdW5jaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2FzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXMyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2EyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXMzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2EzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXNncFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZnNVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzcHJzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYmgyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5hcnQtZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5hcnQ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guZGRkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGRkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kb2N1d29ya3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZHdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRvY3V3b3Jrcy5iaW5kZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4YmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRvY3V3b3Jrcy5jb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5oYnBsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdXQtbWlzbmV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdXp6eXNoZWV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnpzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlbm9tYXRpeC50dXhlZG9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0eGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VvK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VvY3ViZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb2dlYnJhLmZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZ2JcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VvZ2VicmEudG9vbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdndFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9tZXRyeS1leHBsb3JlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdleFwiLFwiZ3JlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb25leHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJneHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VvcGxhblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImcyd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9zcGFjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImczd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZXJiZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdsb2JhbHBsYXRmb3JtLmNhcmQtY29udGVudC1tZ3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdsb2JhbHBsYXRmb3JtLmNhcmQtY29udGVudC1tZ3QtcmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdteFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdteFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5kb2N1bWVudFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdkb2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWFwcHMucHJlc2VudGF0aW9uXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3NsaWRlc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5zcHJlYWRzaGVldFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdzaGVldFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtZWFydGgua21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia21sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1lYXJ0aC5rbXpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrbXpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ292LnNrLmUtZm9ybSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvdi5zay5lLWZvcm0remlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb3Yuc2sueG1sZGF0YWNvbnRhaW5lcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyYWZlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdxZlwiLFwiZ3FzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyaWRtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWFjY291bnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnYWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWhlbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnaGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWlkZW50aXR5LW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnaW1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWluamVjdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3J2XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJndG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLXRvb2wtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0cGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLXZjYXJkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhhbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhhbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoYWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGFuZGhlbGQtZW50ZXJ0YWlubWVudCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ6bW1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGJjaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhiY2lcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oY2wtYmlyZXBvcnRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oZHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhlcm9rdStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhoZS5sZXNzb24tcGxheWVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGVzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLWhwZ2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJocGdsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLWhwaWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJocGlkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLWhwc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhwc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ocC1qbHl0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamx0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLXBjbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBjbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ocC1wY2x4bFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBjbHhsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh0dHBob25lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oeWRyb3N0YXRpeC5zb2YtZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNmZC1oZHN0eFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oeXBlcmRyaXZlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHpuLTNkLWNyb3Nzd29yZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWJtLmFmcGxpbmVkYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0uZWxlY3Ryb25pYy1tZWRpYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWJtLm1pbmlwYXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcHlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWJtLm1vZGNhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFmcFwiLFwibGlzdGFmcFwiLFwibGlzdDM4MjBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWJtLnJpZ2h0cy1tYW5hZ2VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXJtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlibS5zZWN1cmUtY29udGFpbmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWNjcHJvZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImljY1wiLFwiaWNtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmllZWUuMTkwNVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWdsb2FkZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpZ2xcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1hZ2VtZXRlci5pbWFnZSt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltbWVydmlzaW9uLWl2cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIml2cFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbW1lcnZpc2lvbi1pdnVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpdnVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmltc2NjdjFwMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmltc2NjdjFwMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmltc2NjdjFwM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmxpcy52Mi5yZXN1bHQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xjb25zdW1lcnByb2ZpbGUranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xwcm94eStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5sdGkudjIudG9vbHByb3h5LmlkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmx0aS52Mi50b29sc2V0dGluZ3MranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xzZXR0aW5ncy5zaW1wbGUranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbmZvcm1lZGNvbnRyb2wucm1zK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW5mb3JtaXgtdmlzaW9uYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbmZvdGVjaC5wcm9qZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbmZvdGVjaC5wcm9qZWN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW5ub3BhdGgud2FtcC5ub3RpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmluc29ycy5pZ21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpZ21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW50ZXJjb24uZm9ybW5ldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwd1wiLFwieHB4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmludGVyZ2VvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaTJnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmludGVydHJ1c3QuZGlnaWJveFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW50ZXJ0cnVzdC5ubmNwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbnR1LnFib1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInFib1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbnR1LnFmeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInFmeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcHRjLmcyLmNhdGFsb2dpdGVtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5jb25jZXB0aXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIua25vd2xlZGdlaXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIubmV3c2l0ZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcHRjLmcyLm5ld3NtZXNzYWdlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5wYWNrYWdlaXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIucGxhbm5pbmdpdGVtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB1bnBsdWdnZWQucmNwcm9maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmNwcm9maWxlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlyZXBvc2l0b3J5LnBhY2thZ2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXJwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlzLXhwclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pc2FjLmZjc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZjc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYW1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtZGlyZWN0b3J5LXNlcnZpY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmphcGFubmV0LWpwbnN0b3JlLXdha2V1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtcGF5bWVudC13YWtldXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmphcGFubmV0LXJlZ2lzdHJhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtcmVnaXN0cmF0aW9uLXdha2V1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtc2V0c3RvcmUtd2FrZXVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC12ZXJpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmphcGFubmV0LXZlcmlmaWNhdGlvbi13YWtldXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmpjcC5qYXZhbWUubWlkbGV0LXJtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJtc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qaXNwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamlzcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qb29zdC5qb2RhLWFyY2hpdmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqb2RhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmpzay5pc2RuLW5nblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2Fob290elwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImt0elwiLFwia3RyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rYXJib25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrYXJib25cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmtjaGFydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNocnRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmtmb3JtdWxhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia2ZvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5raXZpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZsd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rZGUua29udG91clwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImtvblwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rZGUua3ByZXNlbnRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImtwclwiLFwia3B0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rc3ByZWFkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3NwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rd29yZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImt3ZFwiLFwia3d0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtlbmFtZWFhcHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJodGtlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtpZHNwaXJhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImtpYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5raW5hclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImtuZVwiLFwia25wXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtvYW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJza3BcIixcInNrZFwiLFwic2t0XCIsXCJza21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua29kYWstZGVzY3JpcHRvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNzZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sYXMubGFzK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubGFzLmxhcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsYXN4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubGliZXJ0eS1yZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubGxhbWFncmFwaGljcy5saWZlLWJhbGFuY2UuZGVza3RvcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxiZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sbGFtYWdyYXBoaWNzLmxpZmUtYmFsYW5jZS5leGNoYW5nZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsYmVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtMS0yLTNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCIxMjNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtYXBwcm9hY2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhcHJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtZnJlZWxhbmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHJlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxvdHVzLW5vdGVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibnNmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxvdHVzLW9yZ2FuaXplclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9yZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy1zY3JlZW5jYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtd29yZHByb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImx3cFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYWNwb3J0cy5wb3J0cGtnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG9ydHBrZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXBib3gtdmVjdG9yLXRpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hcmxpbi5kcm0uYWN0aW9udG9rZW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXJsaW4uZHJtLmNvbmZ0b2tlbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hcmxpbi5kcm0ubGljZW5zZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hcmxpbi5kcm0ubWRjZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWFzb24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXhtaW5kLm1heG1pbmQtZGJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1jZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1jZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tZWRjYWxjZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1jMVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tZWRpYXN0YXRpb24uY2RrZXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZGtleVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tZXJpZGlhbi1zbGluZ3Nob3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1mZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtd2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWZtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1mbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taWNybytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3JvZ3JhZnguZmxvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmxvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3JvZ3JhZnguaWd4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWd4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5wb3J0YWJsZS1leGVjdXRhYmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taWVsZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1pZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taW5pc29mdC1ocDMwMDAtc2F2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWl0c3ViaXNoaS5taXN0eS1ndWFyZC50cnVzdHdlYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLmRhZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRhZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMuZGlzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGlzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tYmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYmtcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLm1xeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1xeVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMubXNsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXNsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5wbGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwbGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLnR4ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR4ZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3BodW4uYXBwbGljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcG5cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW9waHVuLmNlcnRpZmljYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vdG9yb2xhLmZsZXhzdWl0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLmFkc2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vdG9yb2xhLmZsZXhzdWl0ZS5maXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vdG9yb2xhLmZsZXhzdWl0ZS5nb3RhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLmttclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLnR0Y1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLndlbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuaXBybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW96aWxsYS54dWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4dWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtM21mZG9jdW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWFydGdhbHJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2lsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWFzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtY2FiLWNvbXByZXNzZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjYWJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtY29sb3IuaWNjcHJvZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsc1wiLFwieGxtXCIsXCJ4bGFcIixcInhsY1wiLFwieGx0XCIsXCJ4bHdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYWRkaW4ubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGxhbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGxzYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bHNtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRlbXBsYXRlLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsdG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW90XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWh0bWxoZWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2htXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWltc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImltc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1scm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJscm1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZXgreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2V0aGVtZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRobXhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtb3BlbnR5cGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wYWNrYWdlLm9iZnVzY2F0ZWQtb3BlbnR5cGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcGtpLnNlY2NhdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2F0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXBraS5zdGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN0bFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wbGF5cmVhZHkuaW5pdGlhdG9yK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwdFwiLFwicHBzXCIsXCJwb3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5hZGRpbi5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcGFtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQucHJlc2VudGF0aW9uLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwdG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5zbGlkZS5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbGRtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQuc2xpZGVzaG93Lm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwc21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwb3RtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXByaW50ZGV2aWNlY2FwYWJpbGl0aWVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcHJpbnRpbmcucHJpbnR0aWNrZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXByaW50c2NoZW1hdGlja2V0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcHJvamVjdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wcFwiLFwibXB0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXRuZWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdpbmRvd3MuZGV2aWNlcGFpcmluZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd2luZG93cy5ud3ByaW50aW5nLm9vYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd2luZG93cy5wcmludGVycGFpcmluZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd2luZG93cy53c2Qub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13bWRybS5saWMtY2hsZy1yZXFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdtZHJtLmxpYy1yZXNwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13bWRybS5tZXRlci1jaGxnLXJlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd21kcm0ubWV0ZXItcmVzcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd29yZC5kb2N1bWVudC5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkb2NtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdvcmQudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZG90bVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13b3Jrc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndwc1wiLFwid2tzXCIsXCJ3Y21cIixcIndkYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13cGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMteHBzZG9jdW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4cHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXNhLWRpc2staW1hZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zZXFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2VxXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zaWduXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tdWx0aWFkLmNyZWF0b3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm11bHRpYWQuY3JlYXRvci5jaWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm11c2ljLW5pZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm11c2ljaWFuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXVzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm11dmVlLnN0eWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXN0eVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5teW5mY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRhZ2xldFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uY2QuY29udHJvbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmNkLnJlZmVyZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmVhcnN0Lmluditqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5lcnZhbmFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5ldGZweFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmV1cm9sYW5ndWFnZS5ubHVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJubHVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmludGVuZG8ubml0cm8ucm9tXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uaW50ZW5kby5zbmVzLnJvbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubml0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm50ZlwiLFwibml0ZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2JsZW5ldC1kaXJlY3RvcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJubmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9ibGVuZXQtc2VhbGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibm5zXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5vYmxlbmV0LXdlYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5ud1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5jYXRhbG9nc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEuY29ubWwrd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmNvbm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEuaXB0di5jb25maWcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5pc2RzLXJhZGlvLXByZXNldHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmxhbmRtYXJrK3dieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5sYW5kbWFyayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmxhbmRtYXJrY29sbGVjdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLm4tZ2FnZS5hYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLm4tZ2FnZS5kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmdkYXRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubi1nYWdlLnN5bWJpYW4uaW5zdGFsbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm4tZ2FnZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uY2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLnBjZCt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEucGNkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnBzdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5yYWRpby1wcmVzZXRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnBzc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub3ZhZGlnbS5lZG1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlZG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm92YWRpZ20uZWR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWR4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV4dFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwuY29udGVudC1zaGFyZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubnR0LWxvY2FsLmZpbGUtdHJhbnNmZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm50dC1sb2NhbC5vZ3dfcmVtb3RlLWFjY2Vzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubnR0LWxvY2FsLnNpcC10YV9yZW1vdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm50dC1sb2NhbC5zaXAtdGFfdGNwX3N0cmVhbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmNoYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5jaGFydC10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90Y1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZGF0YWJhc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmZvcm11bGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmZvcm11bGEtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGZ0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5ncmFwaGljc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZ3JhcGhpY3MtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5pbWFnZS10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90aVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb24tdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldC10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90c1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC1tYXN0ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtd2ViXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3RoXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9iblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2NmK2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9mdG4ubDEwbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9pcGYuY29udGVudGFjY2Vzc2Rvd25sb2FkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5jb250ZW50YWNjZXNzc3RyZWFtaW5nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5jc3BnLWhleGJpbmFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5kYWUuc3ZnK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5kYWUueGh0bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLm1pcHB2Y29udHJvbG1lc3NhZ2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLnBhZS5nZW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9pcGYuc3BkaXNjb3ZlcnkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLnNwZGxpc3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLnVlcHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9pcGYudXNlcnByb2ZpbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbHBjLXN1Z2FyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLXNjd3MtY29uZmlnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEtc2N3cy1odHRwLXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS1zY3dzLWh0dHAtcmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5hc3NvY2lhdGVkLXByb2NlZHVyZS1wYXJhbWV0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3QuZHJtLXRyaWdnZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3QuaW1kK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0Lmx0a21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5ub3RpZmljYXRpb24reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3QucHJvdmlzaW9uaW5ndHJpZ2dlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNnYm9vdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNnZGQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc2dkdVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNpbXBsZS1zeW1ib2wtY29udGFpbmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc21hcnRjYXJkLXRyaWdnZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc3Byb3YreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc3RrbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi1hZGRyZXNzLWJvb2sreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuY2FiLWZlYXR1cmUtaGFuZGxlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5jYWItcGNjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi1zdWJzLWludml0ZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5jYWItdXNlci1wcmVmcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5kY2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5kY2RjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuZGQyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRkMlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuZHJtLnJpc2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuZ3JvdXAtdXNhZ2UtbGlzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5sd20ybStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5sd20ybSt0bHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wYWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEucG9jLmRldGFpbGVkLXByb2dyZXNzLXJlcG9ydCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2MuZmluYWwtcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnBvYy5ncm91cHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEucG9jLmludm9jYXRpb24tZGVzY3JpcHRvcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2Mub3B0aW1pemVkLXByb2dyZXNzLXJlcG9ydCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wdXNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuc2NpZG0ubWVzc2FnZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEueGNhcC1kaXJlY3RvcnkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWFkcy1lbWFpbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYWRzLWZpbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWFkcy1mb2xkZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWFsb2Mtc3VwbC1pbml0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbmVwYWdlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbmJsb3guZ2FtZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW5ibG94LmdhbWUtYmluYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVuZXllLm9lYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3Blbm9mZmljZW9yZy5leHRlbnNpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm94dFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVuc3RyZWV0bWFwLmRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b20tcHJvcGVydGllcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbXhtbHByb3BlcnRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0c2hhcGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1jb2xvcnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbWRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbWxheW91dCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtc3R5bGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5leHRlbmRlZC1wcm9wZXJ0aWVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLmNvbW1lbnRhdXRob3JzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuY29tbWVudHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5oYW5kb3V0bWFzdGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwubm90ZXNtYXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5ub3Rlc3NsaWRlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHB0eFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24ubWFpbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNwcm9wcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2xkeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlbGF5b3V0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVtYXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZXNob3dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcHN4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlc2hvdy5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGV1cGRhdGVpbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGFibGVzdHlsZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50YWdzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBvdHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGVtcGxhdGUubWFpbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnZpZXdwcm9wcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2FsY2NoYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb21tZW50cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmRpYWxvZ3NoZWV0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbGxpbmsreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Y2FjaGVkZWZpbml0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdGNhY2hlcmVjb3Jkcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3R0YWJsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnl0YWJsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25oZWFkZXJzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbmxvZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVkc3RyaW5ncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bHN4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXRtZXRhZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGVzaW5nbGVjZWxscyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsdHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZS5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VybmFtZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlZGVwZW5kZW5jaWVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC53b3Jrc2hlZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lb3ZlcnJpZGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxkcmF3aW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmNvbW1lbnRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvY3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudC5nbG9zc2FyeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQubWFpbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZW5kbm90ZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmZvbnR0YWJsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZm9vdGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5mb290bm90ZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLm51bWJlcmluZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuc2V0dGluZ3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnN0eWxlcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvdHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC50ZW1wbGF0ZS5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC53ZWJzZXR0aW5ncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5kaWdpdGFsLXNpZ25hdHVyZS14bWxzaWduYXR1cmUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcmFjbGUucmVzb3VyY2UranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcmFuZ2UuaW5kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vc2EubmV0ZGVwbG95XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vc2dlby5tYXBndWlkZS5wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWdwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zZ2kuYnVuZGxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vc2dpLmRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3NnaS5zdWJzeXN0ZW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlc2FcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3Rwcy5jdC1raXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5veGxpLmNvdW50Z3JhcGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhZ2VyZHV0eStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhbG1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwZGJcIixcInBxYVwiLFwib3ByY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wYW5vcGx5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wYW9zK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGFvcy54bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGF3YWFmaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGF3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBjb3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBnLmZvcm1hdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN0clwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wZy5vc2FzbGlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlaTZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGlhY2Nlc3MuYXBwbGljYXRpb24tbGljZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGljc2VsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWZpZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wbWkud2lkZ2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG9jLmdyb3VwLWFkdmVydGlzZW1lbnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb2NrZXRsZWFyblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBsZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGJkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvd2VyYnVpbGRlcjYtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyN1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyNy1zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI3NVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyNzUtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHJlbWluZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnByZXZpZXdzeXN0ZW1zLmJveFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJveFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wcm90ZXVzLm1hZ2F6aW5lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWd6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnB1Ymxpc2hhcmUtZGVsdGEtdHJlZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInFwc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wdmkucHRpZDFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwdGlkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnB3Zy1tdWx0aXBsZXhlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHdnLXhodG1sLXByaW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucXVhbGNvbW0uYnJldy1hcHAtcmVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5xdWFyYW50YWluZW5ldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucXVhcmsucXVhcmt4cHJlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJxeGRcIixcInF4dFwiLFwicXdkXCIsXCJxd3RcIixcInF4bFwiLFwicXhiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnF1b2JqZWN0LXF1b3hkb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tb21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWF1ZGl0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWF1ZGl0LWNvbmYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtYXVkaXQtY29ubit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1hdWRpdC1kaWFsb2creG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtYXVkaXQtc3RyZWFtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWNvbmYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWRpYWxvZy1iYXNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWRpYWxvZy1mYXgtZGV0ZWN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWRpYWxvZy1mYXgtc2VuZHJlY3YreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLWdyb3VwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWRpYWxvZy1zcGVlY2greG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLXRyYW5zZm9ybSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhaW5zdG9yLmRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhcGlkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJlYWx2bmMuYmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYmVkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJlY29yZGFyZS5tdXNpY3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm14bFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZWNvcmRhcmUubXVzaWN4bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXVzaWN4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmVubGVhcm4ucmxwcmludFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmlnLmNyeXB0b25vdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcnlwdG9ub3RlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJpbS5jb2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNvZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYS12YnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJtdmJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucm91dGU2Ni5saW5rNjYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGluazY2XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJzLTI3NHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJ1Y2t1cy5kb3dubG9hZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuczNzbXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNhaWxpbmd0cmFja2VyLnRyYWNrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2JtLmNpZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2JtLm1pZDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNjcmlidXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC4zZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC5jc2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC5kb2NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC5lbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC5taHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC5uZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC5wcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC50aWZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQueGxzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWRtZWRpYS5zb2Z0c2VhbC5odG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWRtZWRpYS5zb2Z0c2VhbC5wZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlZW1haWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZWVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VtYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlbWFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VtZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlbWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VtZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlbWZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQuZm9ybWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpZm1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQuZm9ybXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXRwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmludGVyY2hhbmdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWlmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLnBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpcGtcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2ltdGVjaC1taW5kbWFwcGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHdkXCIsXCJ0d2RzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNpcmVuK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc21hZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1tZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zbWFydC5ub3RlYm9va1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc21hcnQudGVhY2hlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRlYWNoZXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc29mdHdhcmU2MDIuZmlsbGVyLmZvcm0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zb2Z0d2FyZTYwMi5maWxsZXIuZm9ybS14bWwtemlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zb2xlbnQuc2RrbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZGttXCIsXCJzZGtkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNwb3RmaXJlLmR4cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR4cFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zcG90ZmlyZS5zZnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZnNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3NzLWNvZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3NzLWR0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3NzLW50ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmNhbGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNkY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uZHJhd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2RhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5pbXByZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLm1hdGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNtZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ud3JpdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZHdcIixcInZvclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ud3JpdGVyLWdsb2JhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2dsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0ZXBtYW5pYS5wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic216aXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RlcG1hbmlhLnN0ZXBjaGFydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0cmVldC1zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN1bi53YWRsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5kcmF3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5kcmF3LnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5tYXRoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC53cml0ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4d1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci5nbG9iYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4Z1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci50ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3R3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN1cy1jYWxlbmRhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN1c1wiLFwic3VzcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3dpZnR2aWV3LWljc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3ltYmlhbi5pbnN0YWxsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaXNcIixcInNpc3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3luY21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhzbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0rd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiZG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0ubm90aWZpY2F0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG1kZGYrd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbWRkZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbXRuZHMrd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbXRuZHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZHMubm90aWZpY2F0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50YWJsZXNjaGVtYStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRhby5pbnRlbnQtbW9kdWxlLWFyY2hpdmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0YW9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudGNwZHVtcC5wY2FwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNhcFwiLFwiY2FwXCIsXCJkbXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudG1kLm1lZGlhZmxleC5hcGkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRtb2JpbGUtbGl2ZXR2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widG1vXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRyaS5vbmVzb3VyY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRyaWQudHB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHB0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRyaXNjYXBlLm14c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm14c1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cnVlYXBwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHJhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRydWVkb2NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnViaXNvZnQud2VicGxheWVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51ZmRsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widWZkXCIsXCJ1ZmRsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVpcS50aGVtZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV0elwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51bWFqaW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1bWpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudW5pdHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1bml0eXdlYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51b21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInVvbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5hbGVydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5hbGVydC13YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5iZWFyZXItY2hvaWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmJlYXJlci1jaG9pY2Utd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuY2FjaGVvcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5jYWNoZW9wLXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmNoYW5uZWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuY2hhbm5lbC13YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0Lmxpc3Qtd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQubGlzdGNtZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0Y21kLXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LnNpZ25hbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXJpLW1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmFsdmUuc291cmNlLm1hdGVyaWFsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52Y3hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Y3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmQtc3R1ZHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlY3RvcndvcmtzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52ZWwranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52ZXJpbWF0cml4LnZjYXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZpZHNvZnQudmlkY29uZmVyZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmlzaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2c2RcIixcInZzdFwiLFwidnNzXCIsXCJ2c3dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmlzaW9uYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmlzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZpdmlkZW5jZS5zY3JpcHRmaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52c2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2c2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLnNpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLnNsY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLndieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2J4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLndtbGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWxjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndhcC53bWxzY3JpcHRjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21sc2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2VidHVyYm9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3dGJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2ZhLnAycFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2ZhLndzY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2luZG93cy5kZXZpY2VwYWlyaW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53bWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndtZi5ib290c3RyYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndvbGZyYW0ubWF0aGVtYXRpY2FcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndvbGZyYW0ubWF0aGVtYXRpY2EucGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud29sZnJhbS5wbGF5ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuYnBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud29yZHBlcmZlY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud3FkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3FkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndycS1ocDMwMDAtbGFiZWxsZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnd0LnN0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN0ZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53di5jc3Ard2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnd2LmNzcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnd2LnNzcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhhY21sK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueGFyYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC54ZmRsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGZkbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC54ZmRsLndlYmZvcm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhtaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhtcGllLmNwa2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhtcGllLmRwa2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhtcGllLnBsYW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhtcGllLnBwa2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhtcGllLnhsaW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi1kaWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJodmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh2c1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEuaHYtdm9pY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJodnBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLm9wZW5zY29yZWZvcm1hdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9zZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEub3BlbnNjb3JlZm9ybWF0Lm9zZnB2Zyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvc2ZwdmdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLnJlbW90ZS1zZXR1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLnNtYWYtYXVkaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzYWZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLnNtYWYtcGhyYXNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3BmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS50aHJvdWdoLW5nblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLnR1bm5lbC11ZHBlbmNhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFvd2VtZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWVsbG93cml2ZXItY3VzdG9tLW1lbnVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuenVsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiemlyXCIsXCJ6aXJ6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnp6YXp6LmRlY2sreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiemF6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm9pY2V4bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widnhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZxLXJ0Y3B4clwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93YXRjaGVyaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd2hvaXNwcC1xdWVyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93aG9pc3BwLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dpZGdldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndndFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dpbmhscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGxwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd2l0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93b3JkcGVyZmVjdDUuMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93c2RsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndzZGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93c3BvbGljeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3c3BvbGljeVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiN3pcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWFiaXdvcmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFid1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYWNlLWNvbXByZXNzZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFjZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYW1mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hcHBsZS1kaXNraW1hZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRtZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYXV0aG9yd2FyZS1iaW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFhYlwiLFwieDMyXCIsXCJ1MzJcIixcInZveFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYXV0aG9yd2FyZS1tYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFhbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYXV0aG9yd2FyZS1zZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFhc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYmNwaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJjcGlvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1iZG9jXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYmRvY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widG9ycmVudFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYmxvcmJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJsYlwiLFwiYmxvcmJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJ6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJ6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1iemlwMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYnoyXCIsXCJib3pcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNiclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2JyXCIsXCJjYmFcIixcImNidFwiLFwiY2J6XCIsXCJjYjdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNkbGlua1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jZnMtY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2ZzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jaGF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjaGF0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jaGVzcy1wZ25cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBnblwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2hyb21lLWV4dGVuc2lvblwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNyeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY29jb2FcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2NvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jb21wcmVzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY29uZmVyZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibnNjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jcGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcGlvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNzaFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZGViXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZGViaWFuLXBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRlYlwiLFwidWRlYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZGdjLWNvbXByZXNzZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRnY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZGlyZWN0b3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRpclwiLFwiZGNyXCIsXCJkeHJcIixcImNzdFwiLFwiY2N0XCIsXCJjeHRcIixcInczZFwiLFwiZmdkXCIsXCJzd2FcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRvb21cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZHRibmN4K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmN4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kdGJvb2sreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdGJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWR0YnJlc291cmNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmVzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kdmlcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR2aVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZW52b3lcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV2eVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZXZhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJldmFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtYmRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiZGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtZG9zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWZyYW1lbWFrZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtZ2hvc3RzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdzZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1saWJncnhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtbGludXgtcHNmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwc2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtb3RmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90ZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1wY2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBjZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1zbmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNuZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1zcGVlZG9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtc3Vub3MtbmV3c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC10dGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHRmXCIsXCJ0dGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtdHlwZTFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBmYVwiLFwicGZiXCIsXCJwZm1cIixcImFmbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC12Zm9udFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZnJlZWFyY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXJjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mdXR1cmVzcGxhc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNwbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZ2NhLWNvbXByZXNzZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdjYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZ2x1bHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInVseFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZ251bWVyaWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdudW1lcmljXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1ncmFtcHMteG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJncmFtcHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWd0YXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd0YXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWd6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWhkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1odHRwZC1waHBcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBocFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtaW5zdGFsbC1pbnN0cnVjdGlvbnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImluc3RhbGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWlzbzk2NjAtaW1hZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlzb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtamF2YS1hcmNoaXZlLWRpZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamFyZGlmZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtamF2YS1qbmxwLWZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpubHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHRcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWxhdGV4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsYXRleFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbHVhLWJ5dGVjb2RlXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibHVhY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbHpoLWNvbXByZXNzZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImx6aFwiLFwibGhhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tYWtlc2VsZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJydW5cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1pZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWllXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tb2JpcG9ja2V0LWVib29rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcmNcIixcIm1vYmlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1wZWd1cmxcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tcy1hcHBsaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXBwbGljYXRpb25cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zLXNob3J0Y3V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsbmtcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zLXdtZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21kXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tcy13bXpcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXMteGJhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGJhcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNhY2Nlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1kYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNiaW5kZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9iZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNjYXJkZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3JkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc2NsaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNscFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNkb3MtcHJvZ3JhbVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV4ZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNkb3dubG9hZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXhlXCIsXCJkbGxcIixcImNvbVwiLFwiYmF0XCIsXCJtc2lcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zbWVkaWF2aWV3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdmJcIixcIm0xM1wiLFwibTE0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc21ldGFmaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWZcIixcIndtelwiLFwiZW1mXCIsXCJlbXpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zbW9uZXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ueVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNwdWJsaXNoZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB1YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNzY2hlZHVsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2NkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc3Rlcm1pbmFsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0cm1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zd3JpdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndyaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbmV0Y2RmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuY1wiLFwiY2RmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1ucy1wcm94eS1hdXRvY29uZmlnXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwYWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW56YlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibnpiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1wZXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBsXCIsXCJwbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtcGlsb3RcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHJjXCIsXCJwZGJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXBrY3MxMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicDEyXCIsXCJwZnhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXBrY3M3LWNlcnRpZmljYXRlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicDdiXCIsXCJzcGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXBrY3M3LWNlcnRyZXFyZXNwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwN3JcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXJlZGhhdC1wYWNrYWdlLW1hbmFnZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnBtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1yZXNlYXJjaC1pbmZvLXN5c3RlbXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJpc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc2VhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXNoYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNoYXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3dmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zaWx2ZXJsaWdodC1hcHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhhcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc3FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXN0dWZmaXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc3R1ZmZpdHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpdHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXN1YnJpcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3J0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zdjRjcGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdjRjcGlvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zdjRjcmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN2NGNyY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdDN2bS1pbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widDNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXRhZHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdhbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdGNsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0Y2xcIixcInRrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10ZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRleFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdGV4LXRmbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGZtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10ZXhpbmZvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0ZXhpbmZvXCIsXCJ0ZXhpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10Z2lmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYmpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXVzdGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1c3RhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtd2Fpcy1zb3VyY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNyY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtd2ViLWFwcC1tYW5pZmVzdCtqc29uXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3ZWJhcHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXg1MDktY2EtY2VydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGVyXCIsXCJjcnRcIixcInBlbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteGZpZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmlnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC14bGlmZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteHBpbnN0YWxsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4cGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXh6XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4elwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtem1hY2hpbmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInoxXCIsXCJ6MlwiLFwiejNcIixcIno0XCIsXCJ6NVwiLFwiejZcIixcIno3XCIsXCJ6OFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3g0MDAtYnBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGFjbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hhbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4YW1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGNhcC1hdHQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtY2Fwcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGNhcC1kaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtZWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtZXJyb3IreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtbnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjb24tY29uZmVyZW5jZS1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y29uLWNvbmZlcmVuY2UtaW5mby1kaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94ZW5jK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhlbmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94aHRtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhodG1sXCIsXCJ4aHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94aHRtbC12b2ljZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhtbFwiLFwieHNsXCIsXCJ4c2RcIixcInJuZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3htbC1kdGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR0ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3htbC1leHRlcm5hbC1wYXJzZWQtZW50aXR5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3htbC1wYXRjaCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG1wcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG9wK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG9wXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veHByb2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4cGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94c2x0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhzbHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94c3BmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHNwZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3h2K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm14bWxcIixcInhodm1sXCIsXCJ4dm1sXCIsXCJ4dm1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieWFuZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3lhbmctZGF0YStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veWFuZy1kYXRhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nLXBhdGNoK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nLXBhdGNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95aW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieWluXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vemlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiemlwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vemxpYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby8xZC1pbnRlcmxlYXZlZC1wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vMzJrYWRwY21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vM2dwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjNncHBcIl1cbiAgfSxcbiAgXCJhdWRpby8zZ3BwMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hYzNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vYWRwY21cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFkcFwiXVxuICB9LFxuICBcImF1ZGlvL2FtclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hbXItd2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vYW1yLXdiK1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hcHR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2FzY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hdHJhYy1hZHZhbmNlZC1sb3NzbGVzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hdHJhYy14XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2F0cmFjM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9iYXNpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF1XCIsXCJzbmRcIl1cbiAgfSxcbiAgXCJhdWRpby9idjE2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2J2MzJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vY2xlYXJtb2RlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2NuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2RhdDEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2Rsc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9kc3ItZXMyMDExMDhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZHNyLWVzMjAyMDUwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2Rzci1lczIwMjIxMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9kc3ItZXMyMDIyMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZHZpNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9lYWMzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2VuY2FwcnRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyYy1xY3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyYzBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyYzFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY2IwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmNiMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjbndcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY253MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjbncxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmN3YlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjd2IwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmN3YjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2Z3ZHJlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzExLTBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcxOVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzIyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjIxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyNi0xNlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI2LTI0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjYtMzJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyNi00MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyOTFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyOWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyOWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZ3NtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2dzbS1lZnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZ3NtLWhyLTA4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2lsYmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vaXAtbXJfdjIuNVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9pc2FjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXVkaW8vbDE2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2wyMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9sMjRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXVkaW8vbDhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbHBjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL21lbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbWVscDEyMDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbWVscDI0MDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbWVscDYwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9taWRpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtaWRcIixcIm1pZGlcIixcImthclwiLFwicm1pXCJdXG4gIH0sXG4gIFwiYXVkaW8vbW9iaWxlLXhtZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tcDNcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcDNcIl1cbiAgfSxcbiAgXCJhdWRpby9tcDRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtNGFcIixcIm1wNGFcIl1cbiAgfSxcbiAgXCJhdWRpby9tcDRhLWxhdG1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbXBhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL21wYS1yb2J1c3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbXBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wZ2FcIixcIm1wMlwiLFwibXAyYVwiLFwibXAzXCIsXCJtMmFcIixcIm0zYVwiXVxuICB9LFxuICBcImF1ZGlvL21wZWc0LWdlbmVyaWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbXVzZXBhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhdWRpby9vZ2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZ2FcIixcIm9nZ1wiLFwic3B4XCJdXG4gIH0sXG4gIFwiYXVkaW8vb3B1c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcGNtYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9wY21hLXdiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3BjbXVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcGNtdS13YlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9wcnMuc2lkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3FjZWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3JhcHRvcmZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9yZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcnRwLWVuYy1hZXNjbTEyOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ydHAtbWlkaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ydHBsb29wYmFja1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ydHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vczNtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzM21cIl1cbiAgfSxcbiAgXCJhdWRpby9zaWxrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaWxcIl1cbiAgfSxcbiAgXCJhdWRpby9zbXZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vc212LXFjcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9zbXYwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3NwLW1pZGlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vc3BlZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdDE0MGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdDM4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3RlbGVwaG9uZS1ldmVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby90b25lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3VlbWNsaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdWxwZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZkdmlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm1yLXdiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC4zZ3BwLml1ZnBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLjRzYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuYXVkaW9rb3pcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmNlbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmNpc2NvLm5zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuY21sZXMucmFkaW8tZXZlbnRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5jbnMuYW5wMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuY25zLmluZjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRlY2UuYXVkaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dmFcIixcInV2dmFcIl1cbiAgfSxcbiAgXCJhdWRpby92bmQuZGlnaXRhbC13aW5kc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVvbFwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5kbG5hLmFkdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5LmhlYWFjLjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5LmhlYWFjLjJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5Lm1scFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkubXBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5kb2xieS5wbDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5LnBsMnhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5LnBsMnpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5LnB1bHNlLjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRyYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRyYVwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5kdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdHNcIl1cbiAgfSxcbiAgXCJhdWRpby92bmQuZHRzLmhkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHRzaGRcIl1cbiAgfSxcbiAgXCJhdWRpby92bmQuZHZiLmZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmV2ZXJhZC5wbGpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmhucy5hdWRpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQubHVjZW50LnZvaWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibHZwXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLm1zLXBsYXlyZWFkeS5tZWRpYS5weWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJweWFcIl1cbiAgfSxcbiAgXCJhdWRpby92bmQubm9raWEubW9iaWxlLXhtZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQubm9ydGVsLnZia1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQubnVlcmEuZWNlbHA0ODAwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWNlbHA0ODAwXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLm51ZXJhLmVjZWxwNzQ3MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVjZWxwNzQ3MFwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5udWVyYS5lY2VscDk2MDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlY2VscDk2MDBcIl1cbiAgfSxcbiAgXCJhdWRpby92bmQub2N0ZWwuc2JjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5xY2VscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQucmhldG9yZXguMzJrYWRwY21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnJpcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJpcFwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5ybi1yZWFsYXVkaW9cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnNlYWxlZG1lZGlhLnNvZnRzZWFsLm1wZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnZteC5jdnNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC53YXZlXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImF1ZGlvL3ZvcmJpc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhdWRpby92b3JiaXMtY29uZmlnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3dhdlwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhdlwiXVxuICB9LFxuICBcImF1ZGlvL3dhdmVcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3YXZcIl1cbiAgfSxcbiAgXCJhdWRpby93ZWJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3ZWJhXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1hYWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFhY1wiXVxuICB9LFxuICBcImF1ZGlvL3gtYWlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWlmXCIsXCJhaWZmXCIsXCJhaWZjXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1jYWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNhZlwiXVxuICB9LFxuICBcImF1ZGlvL3gtZmxhY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmxhY1wiXVxuICB9LFxuICBcImF1ZGlvL3gtbTRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm00YVwiXVxuICB9LFxuICBcImF1ZGlvL3gtbWF0cm9za2FcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1rYVwiXVxuICB9LFxuICBcImF1ZGlvL3gtbXBlZ3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTN1XCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tcy13YXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndheFwiXVxuICB9LFxuICBcImF1ZGlvL3gtbXMtd21hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWFcIl1cbiAgfSxcbiAgXCJhdWRpby94LXBuLXJlYWxhdWRpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmFtXCIsXCJyYVwiXVxuICB9LFxuICBcImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicm1wXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1yZWFsYXVkaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmFcIl1cbiAgfSxcbiAgXCJhdWRpby94LXR0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImF1ZGlvL3gtd2F2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3YXZcIl1cbiAgfSxcbiAgXCJhdWRpby94bVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG1cIl1cbiAgfSxcbiAgXCJjaGVtaWNhbC94LWNkeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2R4XCJdXG4gIH0sXG4gIFwiY2hlbWljYWwveC1jaWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNpZlwiXVxuICB9LFxuICBcImNoZW1pY2FsL3gtY21kZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY21kZlwiXVxuICB9LFxuICBcImNoZW1pY2FsL3gtY21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbWxcIl1cbiAgfSxcbiAgXCJjaGVtaWNhbC94LWNzbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNzbWxcIl1cbiAgfSxcbiAgXCJjaGVtaWNhbC94LXBkYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImNoZW1pY2FsL3gteHl6XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4eXpcIl1cbiAgfSxcbiAgXCJmb250L29wZW50eXBlXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGZcIl1cbiAgfSxcbiAgXCJpbWFnZS9hcG5nXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXBuZ1wiXVxuICB9LFxuICBcImltYWdlL2JtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYm1wXCJdXG4gIH0sXG4gIFwiaW1hZ2UvY2dtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2dtXCJdXG4gIH0sXG4gIFwiaW1hZ2UvZGljb20tcmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL2VtZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS9maXRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL2czZmF4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZzNcIl1cbiAgfSxcbiAgXCJpbWFnZS9naWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnaWZcIl1cbiAgfSxcbiAgXCJpbWFnZS9pZWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpZWZcIl1cbiAgfSxcbiAgXCJpbWFnZS9qbHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2UvanAyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL2pwZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqcGVnXCIsXCJqcGdcIixcImpwZVwiXVxuICB9LFxuICBcImltYWdlL2pwbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS9qcHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uva3R4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3R4XCJdXG4gIH0sXG4gIFwiaW1hZ2UvbmFwbHBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3BqcGVnXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImltYWdlL3BuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBuZ1wiXVxuICB9LFxuICBcImltYWdlL3Bycy5idGlmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYnRpZlwiXVxuICB9LFxuICBcImltYWdlL3Bycy5wdGlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2UvcHdnLXJhc3RlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS9zZ2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNnaVwiXVxuICB9LFxuICBcImltYWdlL3N2Zyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN2Z1wiLFwic3ZnelwiXVxuICB9LFxuICBcImltYWdlL3QzOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS90aWZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGlmZlwiLFwidGlmXCJdXG4gIH0sXG4gIFwiaW1hZ2UvdGlmZi1meFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQuYWRvYmUucGhvdG9zaG9wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwc2RcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuYWlyemlwLmFjY2VsZXJhdG9yLmF6dlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQuY25zLmluZjJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmRlY2UuZ3JhcGhpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2aVwiLFwidXZ2aVwiLFwidXZnXCIsXCJ1dnZnXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmRqdnVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkanZ1XCIsXCJkanZcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZHZiLnN1YnRpdGxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3ViXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmR3Z1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR3Z1wiXVxuICB9LFxuICBcImltYWdlL3ZuZC5keGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkeGZcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZmFzdGJpZHNoZWV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmJzXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmZweFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZweFwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5mc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmc3RcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZnVqaXhlcm94LmVkbWljcy1tbXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbXJcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZnVqaXhlcm94LmVkbWljcy1ybGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybGNcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZ2xvYmFsZ3JhcGhpY3MucGdiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQubWl4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5tb3ppbGxhLmFwbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLm1zLW1vZGlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZGlcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQubXMtcGhvdG9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndkcFwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5uZXQtZnB4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibnB4XCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnJhZGlhbmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5zZWFsZWQucG5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5zZWFsZWRtZWRpYS5zb2Z0c2VhbC5naWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnNlYWxlZG1lZGlhLnNvZnRzZWFsLmpwZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQuc3ZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC50ZW5jZW50LnRhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQudmFsdmUuc291cmNlLnRleHR1cmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLndhcC53Ym1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2JtcFwiXVxuICB9LFxuICBcImltYWdlL3ZuZC54aWZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGlmXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnpicnVzaC5wY3hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvd2VicFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2VicFwiXVxuICB9LFxuICBcImltYWdlL3dtZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS94LTNkc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiM2RzXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1jbXUtcmFzdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYXNcIl1cbiAgfSxcbiAgXCJpbWFnZS94LWNteFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY214XCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1mcmVlaGFuZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmhcIixcImZoY1wiLFwiZmg0XCIsXCJmaDVcIixcImZoN1wiXVxuICB9LFxuICBcImltYWdlL3gtaWNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpY29cIl1cbiAgfSxcbiAgXCJpbWFnZS94LWpuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqbmdcIl1cbiAgfSxcbiAgXCJpbWFnZS94LW1yc2lkLWltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaWRcIl1cbiAgfSxcbiAgXCJpbWFnZS94LW1zLWJtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJtcFwiXVxuICB9LFxuICBcImltYWdlL3gtcGN4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwY3hcIl1cbiAgfSxcbiAgXCJpbWFnZS94LXBpY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBpY1wiLFwicGN0XCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1wb3J0YWJsZS1hbnltYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBubVwiXVxuICB9LFxuICBcImltYWdlL3gtcG9ydGFibGUtYml0bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwYm1cIl1cbiAgfSxcbiAgXCJpbWFnZS94LXBvcnRhYmxlLWdyYXltYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBnbVwiXVxuICB9LFxuICBcImltYWdlL3gtcG9ydGFibGUtcGl4bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcG1cIl1cbiAgfSxcbiAgXCJpbWFnZS94LXJnYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmdiXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC10Z2FcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRnYVwiXVxuICB9LFxuICBcImltYWdlL3gteGJpdG1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGJtXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC14Y2ZcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiaW1hZ2UveC14cGl4bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4cG1cIl1cbiAgfSxcbiAgXCJpbWFnZS94LXh3aW5kb3dkdW1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4d2RcIl1cbiAgfSxcbiAgXCJtZXNzYWdlL2NwaW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9kZWxpdmVyeS1zdGF0dXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9kaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9leHRlcm5hbC1ib2R5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2UvZmVlZGJhY2stcmVwb3J0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2UvZ2xvYmFsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2UvZ2xvYmFsLWRlbGl2ZXJ5LXN0YXR1c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL2dsb2JhbC1kaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9nbG9iYWwtaGVhZGVyc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL2h0dHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwibWVzc2FnZS9pbWRuK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcIm1lc3NhZ2UvbmV3c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL3BhcnRpYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwibWVzc2FnZS9yZmM4MjJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVtbFwiLFwibWltZVwiXVxuICB9LFxuICBcIm1lc3NhZ2Uvcy1odHRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2Uvc2lwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2Uvc2lwZnJhZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL3RyYWNraW5nLXN0YXR1c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL3ZuZC5zaS5zaW1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2Uvdm5kLndmYS53c2NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibW9kZWwvZ2x0Zitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwibW9kZWwvaWdlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlnc1wiLFwiaWdlc1wiXVxuICB9LFxuICBcIm1vZGVsL21lc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2hcIixcIm1lc2hcIixcInNpbG9cIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQuY29sbGFkYSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkYWVcIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQuZHdmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHdmXCJdXG4gIH0sXG4gIFwibW9kZWwvdm5kLmZsYXRsYW5kLjNkbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibW9kZWwvdm5kLmdkbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdkbFwiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5ncy1nZGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJtb2RlbC92bmQuZ3MuZ2RsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC5ndHdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJndHdcIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQubW9tbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibW9kZWwvdm5kLm10c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm10c1wiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5vcGVuZ2V4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC5wYXJhc29saWQudHJhbnNtaXQuYmluYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC5wYXJhc29saWQudHJhbnNtaXQudGV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtb2RlbC92bmQucm9zZXR0ZS5hbm5vdGF0ZWQtZGF0YS1tb2RlbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtb2RlbC92bmQudmFsdmUuc291cmNlLmNvbXBpbGVkLW1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtb2RlbC92bmQudnR1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widnR1XCJdXG4gIH0sXG4gIFwibW9kZWwvdnJtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndybFwiLFwidnJtbFwiXVxuICB9LFxuICBcIm1vZGVsL3gzZCtiaW5hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIngzZGJcIixcIngzZGJ6XCJdXG4gIH0sXG4gIFwibW9kZWwveDNkK2Zhc3RpbmZvc2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3gzZCt2cm1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4M2R2XCIsXCJ4M2R2elwiXVxuICB9LFxuICBcIm1vZGVsL3gzZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIngzZFwiLFwieDNkelwiXVxuICB9LFxuICBcIm1vZGVsL3gzZC12cm1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9hbHRlcm5hdGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtdWx0aXBhcnQvYXBwbGVkb3VibGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2J5dGVyYW5nZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2RpZ2VzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtdWx0aXBhcnQvZW5jcnlwdGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcIm11bHRpcGFydC9mb3JtLWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2hlYWRlci1zZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibXVsdGlwYXJ0L21peGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcIm11bHRpcGFydC9wYXJhbGxlbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtdWx0aXBhcnQvcmVsYXRlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtdWx0aXBhcnQvcmVwb3J0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9zaWduZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwibXVsdGlwYXJ0L3ZvaWNlLW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibXVsdGlwYXJ0L3gtbWl4ZWQtcmVwbGFjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0LzFkLWludGVybGVhdmVkLXBhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2NhY2hlLW1hbmlmZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhcHBjYWNoZVwiLFwibWFuaWZlc3RcIl1cbiAgfSxcbiAgXCJ0ZXh0L2NhbGVuZGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWNzXCIsXCJpZmJcIl1cbiAgfSxcbiAgXCJ0ZXh0L2NhbGVuZGVyXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwidGV4dC9jbWRcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJ0ZXh0L2NvZmZlZXNjcmlwdFwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNvZmZlZVwiLFwibGl0Y29mZmVlXCJdXG4gIH0sXG4gIFwidGV4dC9jc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNzc1wiXVxuICB9LFxuICBcInRleHQvY3N2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjc3ZcIl1cbiAgfSxcbiAgXCJ0ZXh0L2Nzdi1zY2hlbWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9kaXJlY3RvcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9kbnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9lY21hc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZW5jYXBydHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9lbnJpY2hlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2Z3ZHJlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2dyYW1tYXItcmVmLWxpc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9oanNvblwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhqc29uXCJdXG4gIH0sXG4gIFwidGV4dC9odG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJodG1sXCIsXCJodG1cIixcInNodG1sXCJdXG4gIH0sXG4gIFwidGV4dC9qYWRlXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamFkZVwiXVxuICB9LFxuICBcInRleHQvamF2YXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcInRleHQvamNyLWNuZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2pzeFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianN4XCJdXG4gIH0sXG4gIFwidGV4dC9sZXNzXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGVzc1wiXVxuICB9LFxuICBcInRleHQvbWFya2Rvd25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9tYXRobWxcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibW1sXCJdXG4gIH0sXG4gIFwidGV4dC9taXphclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L24zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuM1wiXVxuICB9LFxuICBcInRleHQvcGFyYW1ldGVyc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3Bhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3BsYWluXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0eHRcIixcInRleHRcIixcImNvbmZcIixcImRlZlwiLFwibGlzdFwiLFwibG9nXCIsXCJpblwiLFwiaW5pXCJdXG4gIH0sXG4gIFwidGV4dC9wcm92ZW5hbmNlLW5vdGF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcHJzLmZhbGxlbnN0ZWluLnJzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3Bycy5saW5lcy50YWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkc2NcIl1cbiAgfSxcbiAgXCJ0ZXh0L3Bycy5wcm9wLmxvZ2ljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcmFwdG9yZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcmZjODIyLWhlYWRlcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9yaWNodGV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnR4XCJdXG4gIH0sXG4gIFwidGV4dC9ydGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJ0ZlwiXVxuICB9LFxuICBcInRleHQvcnRwLWVuYy1hZXNjbTEyOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3J0cGxvb3BiYWNrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcnR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvc2dtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNnbWxcIixcInNnbVwiXVxuICB9LFxuICBcInRleHQvc2xpbVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNsaW1cIixcInNsbVwiXVxuICB9LFxuICBcInRleHQvc3R5bHVzXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3R5bHVzXCIsXCJzdHlsXCJdXG4gIH0sXG4gIFwidGV4dC90MTQwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRzdlwiXVxuICB9LFxuICBcInRleHQvdHJvZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0XCIsXCJ0clwiLFwicm9mZlwiLFwibWFuXCIsXCJtZVwiLFwibXNcIl1cbiAgfSxcbiAgXCJ0ZXh0L3R1cnRsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR0bFwiXVxuICB9LFxuICBcInRleHQvdWxwZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdXJpLWxpc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInVyaVwiLFwidXJpc1wiLFwidXJsc1wiXVxuICB9LFxuICBcInRleHQvdmNhcmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZjYXJkXCJdXG4gIH0sXG4gIFwidGV4dC92bmQuYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5hYmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuYXNjaWktYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLmN1cmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjdXJsXCJdXG4gIH0sXG4gIFwidGV4dC92bmQuY3VybC5kY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGN1cmxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5jdXJsLm1jdXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtY3VybFwiXVxuICB9LFxuICBcInRleHQvdm5kLmN1cmwuc2N1cmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjdXJsXCJdXG4gIH0sXG4gIFwidGV4dC92bmQuZGViaWFuLmNvcHlyaWdodFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5kbWNsaWVudHNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5kdmIuc3VidGl0bGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdWJcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5lc21lcnRlYy50aGVtZS1kZXNjcmlwdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLmZseVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZseVwiXVxuICB9LFxuICBcInRleHQvdm5kLmZtaS5mbGV4c3RvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZseFwiXVxuICB9LFxuICBcInRleHQvdm5kLmdyYXBodml6XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3ZcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5pbjNkLjNkbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCIzZG1sXCJdXG4gIH0sXG4gIFwidGV4dC92bmQuaW4zZC5zcG90XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3BvdFwiXVxuICB9LFxuICBcInRleHQvdm5kLmlwdGMubmV3c21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLmlwdGMubml0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5sYXRleC16XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLm1vdG9yb2xhLnJlZmxleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5tcy1tZWRpYXBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQubmV0MnBob25lLmNvbW1jZW50ZXIuY29tbWFuZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5yYWRpc3lzLm1zbWwtYmFzaWMtbGF5b3V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLnNpLnVyaWNhdGFsb2d1ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5zdW4uajJtZS5hcHAtZGVzY3JpcHRvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImphZFwiXVxuICB9LFxuICBcInRleHQvdm5kLnRyb2xsdGVjaC5saW5ndWlzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC53YXAuc2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQud2FwLnNsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLndhcC53bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC53YXAud21sc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21sc1wiXVxuICB9LFxuICBcInRleHQvdnR0XCI6IHtcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZ0dFwiXVxuICB9LFxuICBcInRleHQveC1hc21cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNcIixcImFzbVwiXVxuICB9LFxuICBcInRleHQveC1jXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjXCIsXCJjY1wiLFwiY3h4XCIsXCJjcHBcIixcImhcIixcImhoXCIsXCJkaWNcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtY29tcG9uZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh0Y1wiXVxuICB9LFxuICBcInRleHQveC1mb3J0cmFuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmXCIsXCJmb3JcIixcImY3N1wiLFwiZjkwXCJdXG4gIH0sXG4gIFwidGV4dC94LWd3dC1ycGNcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJ0ZXh0L3gtaGFuZGxlYmFycy10ZW1wbGF0ZVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhic1wiXVxuICB9LFxuICBcInRleHQveC1qYXZhLXNvdXJjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamF2YVwiXVxuICB9LFxuICBcInRleHQveC1qcXVlcnktdG1wbFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcInRleHQveC1sdWFcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsdWFcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtbWFya2Rvd25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1hcmtkb3duXCIsXCJtZFwiLFwibWtkXCJdXG4gIH0sXG4gIFwidGV4dC94LW5mb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmZvXCJdXG4gIH0sXG4gIFwidGV4dC94LW9wbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9wbWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtcGFzY2FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwXCIsXCJwYXNcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtcHJvY2Vzc2luZ1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGRlXCJdXG4gIH0sXG4gIFwidGV4dC94LXNhc3NcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzYXNzXCJdXG4gIH0sXG4gIFwidGV4dC94LXNjc3NcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY3NzXCJdXG4gIH0sXG4gIFwidGV4dC94LXNldGV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXR4XCJdXG4gIH0sXG4gIFwidGV4dC94LXNmdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2Z2XCJdXG4gIH0sXG4gIFwidGV4dC94LXN1c2UteW1wXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ5bXBcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtdXVlbmNvZGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV1XCJdXG4gIH0sXG4gIFwidGV4dC94LXZjYWxlbmRhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNzXCJdXG4gIH0sXG4gIFwidGV4dC94LXZjYXJkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Y2ZcIl1cbiAgfSxcbiAgXCJ0ZXh0L3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG1sXCJdXG4gIH0sXG4gIFwidGV4dC94bWwtZXh0ZXJuYWwtcGFyc2VkLWVudGl0eVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3lhbWxcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ5YW1sXCIsXCJ5bWxcIl1cbiAgfSxcbiAgXCJ2aWRlby8xZC1pbnRlcmxlYXZlZC1wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby8zZ3BwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCIzZ3BcIixcIjNncHBcIl1cbiAgfSxcbiAgXCJ2aWRlby8zZ3BwLXR0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vM2dwcDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjNnMlwiXVxuICB9LFxuICBcInZpZGVvL2JtcGVnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vYnQ2NTZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9jZWxiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vZHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9lbmNhcHJ0cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL2gyNjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImgyNjFcIl1cbiAgfSxcbiAgXCJ2aWRlby9oMjYzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoMjYzXCJdXG4gIH0sXG4gIFwidmlkZW8vaDI2My0xOTk4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vaDI2My0yMDAwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vaDI2NFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaDI2NFwiXVxuICB9LFxuICBcInZpZGVvL2gyNjQtcmNkb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL2gyNjQtc3ZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vaDI2NVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL2lzby5zZWdtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vanBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianBndlwiXVxuICB9LFxuICBcInZpZGVvL2pwZWcyMDAwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vanBtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqcG1cIixcImpwZ21cIl1cbiAgfSxcbiAgXCJ2aWRlby9tajJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1qMlwiLFwibWpwMlwiXVxuICB9LFxuICBcInZpZGVvL21wMXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9tcDJwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vbXAydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHNcIl1cbiAgfSxcbiAgXCJ2aWRlby9tcDRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wNFwiLFwibXA0dlwiLFwibXBnNFwiXVxuICB9LFxuICBcInZpZGVvL21wNHYtZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9tcGVnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGVnXCIsXCJtcGdcIixcIm1wZVwiLFwibTF2XCIsXCJtMnZcIl1cbiAgfSxcbiAgXCJ2aWRlby9tcGVnNC1nZW5lcmljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vbXB2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vbnZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9vZ2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9ndlwiXVxuICB9LFxuICBcInZpZGVvL3Bhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3BvaW50ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9xdWlja3RpbWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInF0XCIsXCJtb3ZcIl1cbiAgfSxcbiAgXCJ2aWRlby9yYXB0b3JmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9yYXdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9ydHAtZW5jLWFlc2NtMTI4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vcnRwbG9vcGJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9ydHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9zbXB0ZTI5Mm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby91bHBmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92YzFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuY2N0dlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLmhkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dmhcIixcInV2dmhcIl1cbiAgfSxcbiAgXCJ2aWRlby92bmQuZGVjZS5tb2JpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2bVwiLFwidXZ2bVwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLm1wNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLnBkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnBcIixcInV2dnBcIl1cbiAgfSxcbiAgXCJ2aWRlby92bmQuZGVjZS5zZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZzXCIsXCJ1dnZzXCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRlY2UudmlkZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2dlwiLFwidXZ2dlwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5kaXJlY3R2Lm1wZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuZGlyZWN0di5tcGVnLXR0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5kbG5hLm1wZWctdHRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmR2Yi5maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdmJcIl1cbiAgfSxcbiAgXCJ2aWRlby92bmQuZnZ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmdnRcIl1cbiAgfSxcbiAgXCJ2aWRlby92bmQuaG5zLnZpZGVvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmlwdHZmb3J1bS4xZHBhcml0eWZlYy0xMDEwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmlwdHZmb3J1bS4xZHBhcml0eWZlYy0yMDA1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmlwdHZmb3J1bS4yZHBhcml0eWZlYy0xMDEwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmlwdHZmb3J1bS4yZHBhcml0eWZlYy0yMDA1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmlwdHZmb3J1bS50dHNhdmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuaXB0dmZvcnVtLnR0c21wZWcyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm1vdG9yb2xhLnZpZGVvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm1vdG9yb2xhLnZpZGVvcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5tcGVndXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteHVcIixcIm00dVwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5tcy1wbGF5cmVhZHkubWVkaWEucHl2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJweXZcIl1cbiAgfSxcbiAgXCJ2aWRlby92bmQubm9raWEuaW50ZXJsZWF2ZWQtbXVsdGltZWRpYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5ub2tpYS52aWRlb3ZvaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQub2JqZWN0dmlkZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQucmFkZ2FtZXR0b29scy5iaW5rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLnJhZGdhbWV0dG9vbHMuc21hY2tlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5zZWFsZWQubXBlZzFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuc2VhbGVkLm1wZWc0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLnNlYWxlZC5zd2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwubW92XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLnV2dnUubXA0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnVcIixcInV2dnVcIl1cbiAgfSxcbiAgXCJ2aWRlby92bmQudml2b1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widml2XCJdXG4gIH0sXG4gIFwidmlkZW8vdnA4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vd2VibVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2VibVwiXVxuICB9LFxuICBcInZpZGVvL3gtZjR2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmNHZcIl1cbiAgfSxcbiAgXCJ2aWRlby94LWZsaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmxpXCJdXG4gIH0sXG4gIFwidmlkZW8veC1mbHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZsdlwiXVxuICB9LFxuICBcInZpZGVvL3gtbTR2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtNHZcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1hdHJvc2thXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJta3ZcIixcIm1rM2RcIixcIm1rc1wiXVxuICB9LFxuICBcInZpZGVvL3gtbW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbmdcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zLWFzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXNmXCIsXCJhc3hcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zLXZvYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widm9iXCJdXG4gIH0sXG4gIFwidmlkZW8veC1tcy13bVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21cIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zLXdtdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid212XCJdXG4gIH0sXG4gIFwidmlkZW8veC1tcy13bXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndteFwiXVxuICB9LFxuICBcInZpZGVvL3gtbXMtd3Z4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3dnhcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zdmlkZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF2aVwiXVxuICB9LFxuICBcInZpZGVvL3gtc2dpLW1vdmllXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtb3ZpZVwiXVxuICB9LFxuICBcInZpZGVvL3gtc212XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbXZcIl1cbiAgfSxcbiAgXCJ4LWNvbmZlcmVuY2UveC1jb29sdGFsa1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWNlXCJdXG4gIH0sXG4gIFwieC1zaGFkZXIveC1mcmFnbWVudFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcIngtc2hhZGVyL3gtdmVydGV4XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH1cbn1cbiIsIi8qIVxuICogbWltZS1kYlxuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kYi5qc29uJylcbiIsIi8qIVxuICogbWltZS10eXBlc1xuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNSBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGRiID0gcmVxdWlyZSgnbWltZS1kYicpXG52YXIgZXh0bmFtZSA9IHJlcXVpcmUoJ3BhdGgnKS5leHRuYW1lXG5cbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIGV4dHJhY3RUeXBlUmVnRXhwID0gL15cXHMqKFteO1xcc10qKSg/Ojt8XFxzfCQpL1xudmFyIHRleHRUeXBlUmVnRXhwID0gL150ZXh0XFwvL2lcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNoYXJzZXQgPSBjaGFyc2V0XG5leHBvcnRzLmNoYXJzZXRzID0geyBsb29rdXA6IGNoYXJzZXQgfVxuZXhwb3J0cy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG5leHBvcnRzLmV4dGVuc2lvbiA9IGV4dGVuc2lvblxuZXhwb3J0cy5leHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuZXhwb3J0cy5sb29rdXAgPSBsb29rdXBcbmV4cG9ydHMudHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbi8vIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zL3R5cGVzIG1hcHNcbnBvcHVsYXRlTWFwcyhleHBvcnRzLmV4dGVuc2lvbnMsIGV4cG9ydHMudHlwZXMpXG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGNoYXJzZXQgZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjaGFyc2V0ICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBleHRyYWN0VHlwZVJlZ0V4cC5leGVjKHR5cGUpXG4gIHZhciBtaW1lID0gbWF0Y2ggJiYgZGJbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAobWltZSAmJiBtaW1lLmNoYXJzZXQpIHtcbiAgICByZXR1cm4gbWltZS5jaGFyc2V0XG4gIH1cblxuICAvLyBkZWZhdWx0IHRleHQvKiB0byB1dGYtOFxuICBpZiAobWF0Y2ggJiYgdGV4dFR5cGVSZWdFeHAudGVzdChtYXRjaFsxXSkpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVsbCBDb250ZW50LVR5cGUgaGVhZGVyIGdpdmVuIGEgTUlNRSB0eXBlIG9yIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjb250ZW50VHlwZSAoc3RyKSB7XG4gIC8vIFRPRE86IHNob3VsZCB0aGlzIGV2ZW4gYmUgaW4gdGhpcyBtb2R1bGU/XG4gIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgbWltZSA9IHN0ci5pbmRleE9mKCcvJykgPT09IC0xXG4gICAgPyBleHBvcnRzLmxvb2t1cChzdHIpXG4gICAgOiBzdHJcblxuICBpZiAoIW1pbWUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBjb250ZW50LXR5cGUgb3Igb3RoZXIgbW9kdWxlXG4gIGlmIChtaW1lLmluZGV4T2YoJ2NoYXJzZXQnKSA9PT0gLTEpIHtcbiAgICB2YXIgY2hhcnNldCA9IGV4cG9ydHMuY2hhcnNldChtaW1lKVxuICAgIGlmIChjaGFyc2V0KSBtaW1lICs9ICc7IGNoYXJzZXQ9JyArIGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgcmV0dXJuIG1pbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZXh0ZW5zaW9uICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBleHRyYWN0VHlwZVJlZ0V4cC5leGVjKHR5cGUpXG5cbiAgLy8gZ2V0IGV4dGVuc2lvbnNcbiAgdmFyIGV4dHMgPSBtYXRjaCAmJiBleHBvcnRzLmV4dGVuc2lvbnNbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXh0c1swXVxufVxuXG4vKipcbiAqIExvb2t1cCB0aGUgTUlNRSB0eXBlIGZvciBhIGZpbGUgcGF0aC9leHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGxvb2t1cCAocGF0aCkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBnZXQgdGhlIGV4dGVuc2lvbiAoXCJleHRcIiBvciBcIi5leHRcIiBvciBmdWxsIHBhdGgpXG4gIHZhciBleHRlbnNpb24gPSBleHRuYW1lKCd4LicgKyBwYXRoKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnN1YnN0cigxKVxuXG4gIGlmICghZXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy50eXBlc1tleHRlbnNpb25dIHx8IGZhbHNlXG59XG5cbi8qKlxuICogUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMgYW5kIHR5cGVzIG1hcHMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBvcHVsYXRlTWFwcyAoZXh0ZW5zaW9ucywgdHlwZXMpIHtcbiAgLy8gc291cmNlIHByZWZlcmVuY2UgKGxlYXN0IC0+IG1vc3QpXG4gIHZhciBwcmVmZXJlbmNlID0gWyduZ2lueCcsICdhcGFjaGUnLCB1bmRlZmluZWQsICdpYW5hJ11cblxuICBPYmplY3Qua2V5cyhkYikuZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoTWltZVR5cGUgKHR5cGUpIHtcbiAgICB2YXIgbWltZSA9IGRiW3R5cGVdXG4gICAgdmFyIGV4dHMgPSBtaW1lLmV4dGVuc2lvbnNcblxuICAgIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIG1pbWUgLT4gZXh0ZW5zaW9uc1xuICAgIGV4dGVuc2lvbnNbdHlwZV0gPSBleHRzXG5cbiAgICAvLyBleHRlbnNpb24gLT4gbWltZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dHNbaV1cblxuICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0pIHtcbiAgICAgICAgdmFyIGZyb20gPSBwcmVmZXJlbmNlLmluZGV4T2YoZGJbdHlwZXNbZXh0ZW5zaW9uXV0uc291cmNlKVxuICAgICAgICB2YXIgdG8gPSBwcmVmZXJlbmNlLmluZGV4T2YobWltZS5zb3VyY2UpXG5cbiAgICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0gIT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nICYmXG4gICAgICAgICAgKGZyb20gPiB0byB8fCAoZnJvbSA9PT0gdG8gJiYgdHlwZXNbZXh0ZW5zaW9uXS5zdWJzdHIoMCwgMTIpID09PSAnYXBwbGljYXRpb24vJykpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGUgcmVtYXBwaW5nXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzZXQgdGhlIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgICB0eXBlc1tleHRlbnNpb25dID0gdHlwZVxuICAgIH1cbiAgfSlcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSBleHBvcnRzO1xuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgIT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgICByZXNbaV0gPSBtc2dbaV0gfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgaWYgKGVuYyA9PT0gJ2hleCcpIHtcbiAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgIGlmIChtc2cubGVuZ3RoICUgMiAhPT0gMClcbiAgICAgIG1zZyA9ICcwJyArIG1zZztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gMilcbiAgICAgIHJlcy5wdXNoKHBhcnNlSW50KG1zZ1tpXSArIG1zZ1tpICsgMV0sIDE2KSk7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICB2YXIgaGkgPSBjID4+IDg7XG4gICAgICB2YXIgbG8gPSBjICYgMHhmZjtcbiAgICAgIGlmIChoaSlcbiAgICAgICAgcmVzLnB1c2goaGksIGxvKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmVzLnB1c2gobG8pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxudXRpbHMudG9BcnJheSA9IHRvQXJyYXk7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG51dGlscy56ZXJvMiA9IHplcm8yO1xuXG5mdW5jdGlvbiB0b0hleChtc2cpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICByZXMgKz0gemVybzIobXNnW2ldLnRvU3RyaW5nKDE2KSk7XG4gIHJldHVybiByZXM7XG59XG51dGlscy50b0hleCA9IHRvSGV4O1xuXG51dGlscy5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoYXJyLCBlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHRvSGV4KGFycik7XG4gIGVsc2VcbiAgICByZXR1cm4gYXJyO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNiBEaWVnbyBQZXJpbmlcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogbndtYXRjaGVyLW5vcXNhLmpzIC0gQSBmYXN0IENTUyBzZWxlY3RvciBlbmdpbmUgYW5kIG1hdGNoZXJcbiAqXG4gKiBBdXRob3I6IERpZWdvIFBlcmluaSA8ZGllZ28ucGVyaW5pIGF0IGdtYWlsIGNvbT5cbiAqIFZlcnNpb246IDEuMy45XG4gKiBDcmVhdGVkOiAyMDA3MDcyMlxuICogUmVsZWFzZTogMjAxNjEwMjZcbiAqXG4gKiBMaWNlbnNlOlxuICogIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9OV01hdGNoZXIvTUlULUxJQ0VOU0VcbiAqIERvd25sb2FkOlxuICogIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9OV01hdGNoZXIvbndtYXRjaGVyLmpzXG4gKi9cblxuKGZ1bmN0aW9uKGdsb2JhbCwgZmFjdG9yeSkge1xuXG4gIGlmICh0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lW1wiYW1kXCJdKSB7XG4gICAgZGVmaW5lKGZhY3RvcnkpO1xuICB9IGVsc2Uge1xuICAgIGdsb2JhbC5OVyB8fCAoZ2xvYmFsLk5XID0geyB9KTtcbiAgICBnbG9iYWwuTlcuRG9tID0gZmFjdG9yeShnbG9iYWwpO1xuICB9XG5cbn0pKHRoaXMsIGZ1bmN0aW9uKGdsb2JhbCkge1xuXG4gIHZhciB2ZXJzaW9uID0gJ253bWF0Y2hlci0xLjMuOScsXG5cbiAgZG9jID0gZ2xvYmFsLmRvY3VtZW50LFxuICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudCxcblxuICBpc1NpbmdsZU1hdGNoLFxuICBpc1NpbmdsZVNlbGVjdCxcblxuICBsYXN0U2xpY2UsXG4gIGxhc3RDb250ZXh0LFxuICBsYXN0UG9zaXRpb24sXG5cbiAgbGFzdE1hdGNoZXIsXG4gIGxhc3RTZWxlY3RvcixcblxuICBsYXN0UGFydHNNYXRjaCxcbiAgbGFzdFBhcnRzU2VsZWN0LFxuXG4gIHByZWZpeGVzID0gJ1sjLjpdPycsXG4gIG9wZXJhdG9ycyA9ICcoW34qXiR8IV0/PXsxfSknLFxuICB3aGl0ZXNwYWNlID0gJ1tcXFxceDIwXFxcXHRcXFxcblxcXFxyXFxcXGZdJyxcbiAgY29tYmluYXRvcnMgPSAnXFxcXHgyMHxbPit+XSg/PVtePit+XSknLFxuICBwc2V1ZG9wYXJtcyA9ICcoPzpbLStdP1xcXFxkKm4pP1stK10/XFxcXGQqJyxcbiAgc2tpcF9ncm91cHMgPSAnXFxcXFsuKlxcXFxdfFxcXFwoLipcXFxcKXxcXFxcey4qXFxcXH0nLFxuXG4gIGFueV9lc2NfY2hyID0gJ1xcXFxcXFxcLicsXG4gIGFscGhhbG9kYXNoID0gJ1tfYS16QS1aXScsXG4gIG5vbl9hc2NfY2hyID0gJ1teXFxcXHgwMC1cXFxceDlmXScsXG4gIGVzY2FwZWRfY2hyID0gJ1xcXFxcXFxcW15cXFxcblxcXFxyXFxcXGYwLTlhLWZBLUZdJyxcbiAgdW5pY29kZV9jaHIgPSAnXFxcXFxcXFxbMC05YS1mQS1GXXsxLDZ9KD86XFxcXHJcXFxcbnwnICsgd2hpdGVzcGFjZSArICcpPycsXG5cbiAgcXVvdGVkdmFsdWUgPSAnXCJbXlwiXFxcXFxcXFxdKig/OlxcXFxcXFxcLlteXCJcXFxcXFxcXF0qKSpcIicgKyBcInwnW14nXFxcXFxcXFxdKig/OlxcXFxcXFxcLlteJ1xcXFxcXFxcXSopKidcIixcblxuICByZVNwbGl0R3JvdXAgPSAvKFteLFxcXFwoKVtcXF1dK3xcXFtbXltcXF1dKlxcXXxcXFsuKlxcXXxcXChbXigpXStcXCl8XFwoLipcXCl8XFx7W157fV0rXFx9fFxcey4qXFx9fFxcXFwuKSsvZyxcblxuICByZVRyaW1TcGFjZXMgPSBSZWdFeHAoJ1tcXFxcblxcXFxyXFxcXGZdfF4nICsgd2hpdGVzcGFjZSArICcrfCcgKyB3aGl0ZXNwYWNlICsgJyskJywgJ2cnKSxcblxuICByZUVzY2FwZWRDaGFycyA9IC9cXFxcKFswLTlhLWZBLUZdezEsNn1bXFx4MjBcXHRcXG5cXHJcXGZdP3wuKXwoW1xceDIyXFx4MjddKS9nLFxuXG4gIHN0YW5kYXJkVmFsaWRhdG9yLCBleHRlbmRlZFZhbGlkYXRvciwgcmVWYWxpZGF0b3IsXG5cbiAgYXR0cmNoZWNrLCBhdHRyaWJ1dGVzLCBhdHRybWF0Y2hlciwgcHNldWRvY2xhc3MsXG5cbiAgcmVPcHRpbWl6ZVNlbGVjdG9yLCByZVNpbXBsZU5vdCwgcmVTcGxpdFRva2VuLFxuXG4gIE9wdGltaXplLCBpZGVudGlmaWVyLCBleHRlbnNpb25zID0gJy4rJyxcblxuICBQYXR0ZXJucyA9IHtcbiAgICBzcHNldWRvczogL15cXDoocm9vdHxlbXB0eXwoPzpmaXJzdHxsYXN0fG9ubHkpKD86LWNoaWxkfC1vZi10eXBlKXxudGgoPzotbGFzdCk/KD86LWNoaWxkfC1vZi10eXBlKVxcKFxccyooZXZlbnxvZGR8KD86Wy0rXXswLDF9XFxkKm5cXHMqKT9bLStdezAsMX1cXHMqXFxkKilcXHMqXFwpKT8oLiopL2ksXG4gICAgZHBzZXVkb3M6IC9eXFw6KGxpbmt8dmlzaXRlZHx0YXJnZXR8YWN0aXZlfGZvY3VzfGhvdmVyfGNoZWNrZWR8ZGlzYWJsZWR8ZW5hYmxlZHxzZWxlY3RlZHxsYW5nXFwoKFstXFx3XXsyLH0pXFwpfG5vdFxcKFxccyooOm50aCg/Oi1sYXN0KT8oPzotY2hpbGR8LW9mLXR5cGUpXFwoXFxzKig/OmV2ZW58b2RkfCg/OlstK117MCwxfVxcZCpuXFxzKik/Wy0rXXswLDF9XFxzKlxcZCopXFxzKlxcKXxbXigpXSopXFxzKlxcKSk/KC4qKS9pLFxuICAgIGNoaWxkcmVuOiBSZWdFeHAoJ14nICsgd2hpdGVzcGFjZSArICcqXFxcXD4nICsgd2hpdGVzcGFjZSArICcqKC4qKScpLFxuICAgIGFkamFjZW50OiBSZWdFeHAoJ14nICsgd2hpdGVzcGFjZSArICcqXFxcXCsnICsgd2hpdGVzcGFjZSArICcqKC4qKScpLFxuICAgIHJlbGF0aXZlOiBSZWdFeHAoJ14nICsgd2hpdGVzcGFjZSArICcqXFxcXH4nICsgd2hpdGVzcGFjZSArICcqKC4qKScpLFxuICAgIGFuY2VzdG9yOiBSZWdFeHAoJ14nICsgd2hpdGVzcGFjZSArICcrKC4qKScpLFxuICAgIHVuaXZlcnNhbDogUmVnRXhwKCdeXFxcXCooLiopJylcbiAgfSxcblxuICBUb2tlbnMgPSB7XG4gICAgcHJlZml4ZXM6IHByZWZpeGVzLFxuICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgYXR0cmlidXRlczogYXR0cmlidXRlc1xuICB9LFxuXG4gIFFVSVJLU19NT0RFLFxuICBYTUxfRE9DVU1FTlQsXG5cbiAgR0VCVE4gPSAnZ2V0RWxlbWVudHNCeVRhZ05hbWUnIGluIGRvYyxcbiAgR0VCQ04gPSAnZ2V0RWxlbWVudHNCeUNsYXNzTmFtZScgaW4gZG9jLFxuXG4gIElFX0xUXzkgPSB0eXBlb2YgZG9jLmFkZEV2ZW50TGlzdGVuZXIgIT0gJ2Z1bmN0aW9uJyxcblxuICBMSU5LX05PREVTID0geyBhOiAxLCBBOiAxLCBhcmVhOiAxLCBBUkVBOiAxLCBsaW5rOiAxLCBMSU5LOiAxIH0sXG5cbiAgQVRUUl9CT09MRUFOID0ge1xuICAgIGNoZWNrZWQ6IDEsIGRpc2FibGVkOiAxLCBpc21hcDogMSxcbiAgICBtdWx0aXBsZTogMSwgcmVhZG9ubHk6IDEsIHNlbGVjdGVkOiAxXG4gIH0sXG5cbiAgQVRUUl9ERUZBVUxUID0ge1xuICAgIHZhbHVlOiAnZGVmYXVsdFZhbHVlJyxcbiAgICBjaGVja2VkOiAnZGVmYXVsdENoZWNrZWQnLFxuICAgIHNlbGVjdGVkOiAnZGVmYXVsdFNlbGVjdGVkJ1xuICB9LFxuXG4gIEFUVFJfVVJJREFUQSA9IHtcbiAgICBhY3Rpb246IDIsIGNpdGU6IDIsIGNvZGViYXNlOiAyLCBkYXRhOiAyLCBocmVmOiAyLFxuICAgIGxvbmdkZXNjOiAyLCBsb3dzcmM6IDIsIHNyYzogMiwgdXNlbWFwOiAyXG4gIH0sXG5cbiAgSU5TRU5TSVRJVkVfTUFQID0ge1xuICAgICdjbGFzcyc6IDAsXG4gICAgJ2hyZWYnOiAxLCAnbGFuZyc6IDEsICdzcmMnOiAxLCAnc3R5bGUnOiAxLCAndGl0bGUnOiAxLFxuICAgICd0eXBlJzogMSwgJ3htbG5zJzogMSwgJ3htbDpsYW5nJzogMSwgJ3htbDpzcGFjZSc6IDFcbiAgfSxcblxuICBTZWxlY3RvcnMgPSB7IH0sXG5cbiAgT3BlcmF0b3JzID0ge1xuICAgICAnPSc6IFwibj09JyVtJ1wiLFxuICAgICdePSc6IFwibi5pbmRleE9mKCclbScpPT0wXCIsXG4gICAgJyo9JzogXCJuLmluZGV4T2YoJyVtJyk+LTFcIixcbiAgICAnfD0nOiBcIihuKyctJykuaW5kZXhPZignJW0tJyk9PTBcIixcbiAgICAnfj0nOiBcIignICcrbisnICcpLmluZGV4T2YoJyAlbSAnKT4tMVwiLFxuICAgICckPSc6IFwibi5zdWJzdHIobi5sZW5ndGgtJyVtJy5sZW5ndGgpPT0nJW0nXCJcbiAgfSxcblxuICBjb25jYXRDYWxsID1cbiAgICBmdW5jdGlvbihkYXRhLCBlbGVtZW50cywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBpID0gLTEsIGVsZW1lbnQ7XG4gICAgICB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50c1srK2ldKSkge1xuICAgICAgICBpZiAoZmFsc2UgPT09IGNhbGxiYWNrKGRhdGFbZGF0YS5sZW5ndGhdID0gZWxlbWVudCkpIHsgYnJlYWs7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG5cbiAgc3dpdGNoQ29udGV4dCA9XG4gICAgZnVuY3Rpb24oZnJvbSwgZm9yY2UpIHtcbiAgICAgIHZhciBvbGREb2MgPSBkb2M7XG4gICAgICBsYXN0Q29udGV4dCA9IGZyb207XG4gICAgICBkb2MgPSBmcm9tLm93bmVyRG9jdW1lbnQgfHwgZnJvbTtcbiAgICAgIGlmIChmb3JjZSB8fCBvbGREb2MgIT09IGRvYykge1xuICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgWE1MX0RPQ1VNRU5UID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RpVicpLm5vZGVOYW1lID09ICdEaVYnO1xuICAgICAgICBRVUlSS1NfTU9ERSA9ICFYTUxfRE9DVU1FTlQgJiZcbiAgICAgICAgICB0eXBlb2YgZG9jLmNvbXBhdE1vZGUgPT0gJ3N0cmluZycgP1xuICAgICAgICAgIGRvYy5jb21wYXRNb2RlLmluZGV4T2YoJ0NTUycpIDwgMCA6XG4gICAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHN0eWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlICYmIChzdHlsZS53aWR0aCA9IDEpICYmIHN0eWxlLndpZHRoID09ICcxcHgnO1xuICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgQ29uZmlnLkNBQ0hJTkcgJiYgRG9tLnNldENhY2hlKHRydWUsIGRvYyk7XG4gICAgICB9XG4gICAgfSxcblxuICBjb2RlUG9pbnRUb1VURjE2ID1cbiAgICBmdW5jdGlvbihjb2RlUG9pbnQpIHtcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAxIHx8IGNvZGVQb2ludCA+IDB4MTBmZmZmIHx8XG4gICAgICAgIChjb2RlUG9pbnQgPiAweGQ3ZmYgJiYgY29kZVBvaW50IDwgMHhlMDAwKSkge1xuICAgICAgICByZXR1cm4gJ1xcXFx1ZmZmZCc7XG4gICAgICB9XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgICB2YXIgbG93SGV4ID0gJzAwMCcgKyBjb2RlUG9pbnQudG9TdHJpbmcoMTYpO1xuICAgICAgICByZXR1cm4gJ1xcXFx1JyArIGxvd0hleC5zdWJzdHIobG93SGV4Lmxlbmd0aCAtIDQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICdcXFxcdScgKyAoKChjb2RlUG9pbnQgLSAweDEwMDAwKSA+PiAweDBhKSArIDB4ZDgwMCkudG9TdHJpbmcoMTYpICtcbiAgICAgICAgICAgICAnXFxcXHUnICsgKCgoY29kZVBvaW50IC0gMHgxMDAwMCkgJSAweDQwMCkgKyAweGRjMDApLnRvU3RyaW5nKDE2KTtcbiAgICB9LFxuXG4gIHN0cmluZ0Zyb21Db2RlUG9pbnQgPVxuICAgIGZ1bmN0aW9uKGNvZGVQb2ludCkge1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDEgfHwgY29kZVBvaW50ID4gMHgxMGZmZmYgfHxcbiAgICAgICAgKGNvZGVQb2ludCA+IDB4ZDdmZiAmJiBjb2RlUG9pbnQgPCAweGUwMDApKSB7XG4gICAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgICB9XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlUG9pbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50ID9cbiAgICAgICAgU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KSA6XG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoXG4gICAgICAgICAgKChjb2RlUG9pbnQgLSAweDEwMDAwKSA+PiAweDBhKSArIDB4ZDgwMCxcbiAgICAgICAgICAoKGNvZGVQb2ludCAtIDB4MTAwMDApICUgMHg0MDApICsgMHhkYzAwKTtcbiAgICB9LFxuXG4gIGNvbnZlcnRFc2NhcGVzID1cbiAgICBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiBzdHIucmVwbGFjZShyZUVzY2FwZWRDaGFycyxcbiAgICAgICAgICBmdW5jdGlvbihzdWJzdHJpbmcsIHAxLCBwMikge1xuICAgICAgICAgICAgcmV0dXJuIHAyID8gJ1xcXFwnICsgcDIgOlxuICAgICAgICAgICAgICAvXlswLTlhLWZBLUZdLy50ZXN0KHAxKSA/IGNvZGVQb2ludFRvVVRGMTYocGFyc2VJbnQocDEsIDE2KSkgOlxuICAgICAgICAgICAgICAvXltcXFxcXFx4MjJcXHgyN10vLnRlc3QocDEpID8gc3Vic3RyaW5nIDpcbiAgICAgICAgICAgICAgcDE7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgdW5lc2NhcGVJZGVudGlmaWVyID1cbiAgICBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiBzdHIucmVwbGFjZShyZUVzY2FwZWRDaGFycyxcbiAgICAgICAgICBmdW5jdGlvbihzdWJzdHJpbmcsIHAxLCBwMikge1xuICAgICAgICAgICAgcmV0dXJuIHAyID8gcDIgOlxuICAgICAgICAgICAgICAvXlswLTlhLWZBLUZdLy50ZXN0KHAxKSA/IHN0cmluZ0Zyb21Db2RlUG9pbnQocGFyc2VJbnQocDEsIDE2KSkgOlxuICAgICAgICAgICAgICAvXltcXFxcXFx4MjJcXHgyN10vLnRlc3QocDEpID8gc3Vic3RyaW5nIDpcbiAgICAgICAgICAgICAgcDE7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgYnlJZFJhdyA9XG4gICAgZnVuY3Rpb24oaWQsIGVsZW1lbnRzKSB7XG4gICAgICB2YXIgaSA9IC0xLCBlbGVtZW50O1xuICAgICAgd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudHNbKytpXSkpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpID09IGlkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50IHx8IG51bGw7XG4gICAgfSxcblxuICBfYnlJZCA9ICFJRV9MVF85ID9cbiAgICBmdW5jdGlvbihpZCwgZnJvbSkge1xuICAgICAgaWQgPSAoL1xcXFwvKS50ZXN0KGlkKSA/IHVuZXNjYXBlSWRlbnRpZmllcihpZCkgOiBpZDtcbiAgICAgIHJldHVybiBmcm9tLmdldEVsZW1lbnRCeUlkICYmIGZyb20uZ2V0RWxlbWVudEJ5SWQoaWQpIHx8XG4gICAgICAgIGJ5SWRSYXcoaWQsIGZyb20uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSk7XG4gICAgfSA6XG4gICAgZnVuY3Rpb24oaWQsIGZyb20pIHtcbiAgICAgIHZhciBlbGVtZW50ID0gbnVsbDtcbiAgICAgIGlkID0gKC9cXFxcLykudGVzdChpZCkgPyB1bmVzY2FwZUlkZW50aWZpZXIoaWQpIDogaWQ7XG4gICAgICBpZiAoWE1MX0RPQ1VNRU5UIHx8IGZyb20ubm9kZVR5cGUgIT0gOSkge1xuICAgICAgICByZXR1cm4gYnlJZFJhdyhpZCwgZnJvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKTtcbiAgICAgIH1cbiAgICAgIGlmICgoZWxlbWVudCA9IGZyb20uZ2V0RWxlbWVudEJ5SWQoaWQpKSAmJlxuICAgICAgICBlbGVtZW50Lm5hbWUgPT0gaWQgJiYgZnJvbS5nZXRFbGVtZW50c0J5TmFtZSkge1xuICAgICAgICByZXR1cm4gYnlJZFJhdyhpZCwgZnJvbS5nZXRFbGVtZW50c0J5TmFtZShpZCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSxcblxuICBieUlkID1cbiAgICBmdW5jdGlvbihpZCwgZnJvbSkge1xuICAgICAgZnJvbSB8fCAoZnJvbSA9IGRvYyk7XG4gICAgICBpZiAobGFzdENvbnRleHQgIT09IGZyb20pIHsgc3dpdGNoQ29udGV4dChmcm9tKTsgfVxuICAgICAgcmV0dXJuIF9ieUlkKGlkLCBmcm9tKTtcbiAgICB9LFxuXG4gIGJ5VGFnUmF3ID1cbiAgICBmdW5jdGlvbih0YWcsIGZyb20pIHtcbiAgICAgIHZhciBhbnkgPSB0YWcgPT0gJyonLCBlbGVtZW50ID0gZnJvbSwgZWxlbWVudHMgPSBbIF0sIG5leHQgPSBlbGVtZW50LmZpcnN0Q2hpbGQ7XG4gICAgICBhbnkgfHwgKHRhZyA9IHRhZy50b1VwcGVyQ2FzZSgpKTtcbiAgICAgIHdoaWxlICgoZWxlbWVudCA9IG5leHQpKSB7XG4gICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPiAnQCcgJiYgKGFueSB8fCBlbGVtZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PSB0YWcpKSB7XG4gICAgICAgICAgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoXSA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChuZXh0ID0gZWxlbWVudC5maXJzdENoaWxkIHx8IGVsZW1lbnQubmV4dFNpYmxpbmcpKSBjb250aW51ZTtcbiAgICAgICAgd2hpbGUgKCFuZXh0ICYmIChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSAmJiBlbGVtZW50ICE9PSBmcm9tKSB7XG4gICAgICAgICAgbmV4dCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9LFxuXG4gIGNvbnRhaW5zID0gJ2NvbXBhcmVEb2N1bWVudFBvc2l0aW9uJyBpbiByb290ID9cbiAgICBmdW5jdGlvbihjb250YWluZXIsIGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiAoY29udGFpbmVyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGVsZW1lbnQpICYgMTYpID09IDE2O1xuICAgIH0gOiAnY29udGFpbnMnIGluIHJvb3QgP1xuICAgIGZ1bmN0aW9uKGNvbnRhaW5lciwgZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGNvbnRhaW5lciAhPT0gZWxlbWVudCAmJiBjb250YWluZXIuY29udGFpbnMoZWxlbWVudCk7XG4gICAgfSA6XG4gICAgZnVuY3Rpb24oY29udGFpbmVyLCBlbGVtZW50KSB7XG4gICAgICB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpKSB7XG4gICAgICAgIGlmIChlbGVtZW50ID09PSBjb250YWluZXIpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgZ2V0QXR0cmlidXRlID0gIUlFX0xUXzkgP1xuICAgIGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgfSA6XG4gICAgZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKSB7XG4gICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh0eXBlb2Ygbm9kZVthdHRyaWJ1dGVdID09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBub2RlLmF0dHJpYnV0ZXNbYXR0cmlidXRlXSAmJlxuICAgICAgICAgIG5vZGUuYXR0cmlidXRlc1thdHRyaWJ1dGVdLnZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXR0cmlidXRlID09ICd0eXBlJyA/IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgOlxuICAgICAgICBBVFRSX1VSSURBVEFbYXR0cmlidXRlXSA/IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgMikgOlxuICAgICAgICBBVFRSX0JPT0xFQU5bYXR0cmlidXRlXSA/IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgPyBhdHRyaWJ1dGUgOiAnZmFsc2UnIDpcbiAgICAgICAgICAobm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpKSAmJiBub2RlLnZhbHVlKTtcbiAgICB9LFxuXG4gIGhhc0F0dHJpYnV0ZSA9ICFJRV9MVF85ICYmIHJvb3QuaGFzQXR0cmlidXRlID9cbiAgICBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpIHtcbiAgICAgIHJldHVybiBub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgIH0gOlxuICAgIGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSkge1xuICAgICAgdmFyIG9iaiA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUudG9Mb3dlckNhc2UoKSk7XG4gICAgICByZXR1cm4gQVRUUl9ERUZBVUxUW2F0dHJpYnV0ZV0gJiYgYXR0cmlidXRlICE9ICd2YWx1ZScgP1xuICAgICAgICBub2RlW0FUVFJfREVGQVVMVFthdHRyaWJ1dGVdXSA6IG9iaiAmJiBvYmouc3BlY2lmaWVkO1xuICAgIH0sXG5cbiAgaXNFbXB0eSA9XG4gICAgZnVuY3Rpb24obm9kZSkge1xuICAgICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDMgfHwgbm9kZS5ub2RlTmFtZSA+ICdAJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgaXNMaW5rID1cbiAgICBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICByZXR1cm4gaGFzQXR0cmlidXRlKGVsZW1lbnQsICdocmVmJykgJiYgTElOS19OT0RFU1tlbGVtZW50Lm5vZGVOYW1lXTtcbiAgICB9LFxuXG4gIG50aEVsZW1lbnQgPVxuICAgIGZ1bmN0aW9uKGVsZW1lbnQsIGxhc3QpIHtcbiAgICAgIHZhciBjb3VudCA9IDEsIHN1Y2MgPSBsYXN0ID8gJ25leHRTaWJsaW5nJyA6ICdwcmV2aW91c1NpYmxpbmcnO1xuICAgICAgd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudFtzdWNjXSkpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPiAnQCcpICsrY291bnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY291bnQ7XG4gICAgfSxcblxuICBudGhPZlR5cGUgPVxuICAgIGZ1bmN0aW9uKGVsZW1lbnQsIGxhc3QpIHtcbiAgICAgIHZhciBjb3VudCA9IDEsIHN1Y2MgPSBsYXN0ID8gJ25leHRTaWJsaW5nJyA6ICdwcmV2aW91c1NpYmxpbmcnLCB0eXBlID0gZWxlbWVudC5ub2RlTmFtZTtcbiAgICAgIHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnRbc3VjY10pKSB7XG4gICAgICAgIGlmIChlbGVtZW50Lm5vZGVOYW1lID09IHR5cGUpICsrY291bnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gY291bnQ7XG4gICAgfSxcblxuICBjb25maWd1cmUgPVxuICAgIGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIHsgcmV0dXJuICEhQ29uZmlnW29wdGlvbl07IH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uICE9ICdvYmplY3QnKSB7IHJldHVybiBDb25maWc7IH1cbiAgICAgIGZvciAodmFyIGkgaW4gb3B0aW9uKSB7XG4gICAgICAgIENvbmZpZ1tpXSA9ICEhb3B0aW9uW2ldO1xuICAgICAgICBpZiAoaSA9PSAnU0lNUExFTk9UJykge1xuICAgICAgICAgIG1hdGNoQ29udGV4dHMgPSB7IH07XG4gICAgICAgICAgbWF0Y2hSZXNvbHZlcnMgPSB7IH07XG4gICAgICAgICAgc2VsZWN0Q29udGV4dHMgPSB7IH07XG4gICAgICAgICAgc2VsZWN0UmVzb2x2ZXJzID0geyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRJZGVudGlmaWVyU3ludGF4KCk7XG4gICAgICByZVZhbGlkYXRvciA9IFJlZ0V4cChDb25maWcuU0lNUExFTk9UID9cbiAgICAgICAgc3RhbmRhcmRWYWxpZGF0b3IgOiBleHRlbmRlZFZhbGlkYXRvcik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gIGVtaXQgPVxuICAgIGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiAgICAgIGlmIChDb25maWcuVkVSQk9TSVRZKSB7IHRocm93IEVycm9yKG1lc3NhZ2UpOyB9XG4gICAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gIENvbmZpZyA9IHtcbiAgICBDQUNISU5HOiBmYWxzZSxcbiAgICBFU0NBUEVDSFI6IHRydWUsXG4gICAgTk9OX0FTQ0lJOiB0cnVlLFxuICAgIFNFTEVDVE9SMzogdHJ1ZSxcbiAgICBVTklDT0RFMTY6IHRydWUsXG4gICAgU0hPUlRDVVRTOiBmYWxzZSxcbiAgICBTSU1QTEVOT1Q6IHRydWUsXG4gICAgVU5JUVVFX0lEOiB0cnVlLFxuICAgIFVTRV9IVE1MNTogdHJ1ZSxcbiAgICBWRVJCT1NJVFk6IHRydWVcbiAgfSxcblxuICBpbml0aWFsaXplID1cbiAgICBmdW5jdGlvbihkb2MpIHtcbiAgICAgIHNldElkZW50aWZpZXJTeW50YXgoKTtcbiAgICAgIHN3aXRjaENvbnRleHQoZG9jLCB0cnVlKTtcbiAgICB9LFxuXG4gIHNldElkZW50aWZpZXJTeW50YXggPVxuICAgIGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgc3ludGF4ID0gJycsIHN0YXJ0ID0gQ29uZmlnWydTRUxFQ1RPUjMnXSA/ICctezJ9fCcgOiAnJztcblxuICAgICAgQ29uZmlnWydOT05fQVNDSUknXSAmJiAoc3ludGF4ICs9ICd8JyArIG5vbl9hc2NfY2hyKTtcbiAgICAgIENvbmZpZ1snVU5JQ09ERTE2J10gJiYgKHN5bnRheCArPSAnfCcgKyB1bmljb2RlX2Nocik7XG4gICAgICBDb25maWdbJ0VTQ0FQRUNIUiddICYmIChzeW50YXggKz0gJ3wnICsgZXNjYXBlZF9jaHIpO1xuXG4gICAgICBzeW50YXggKz0gKENvbmZpZ1snVU5JQ09ERTE2J10gfHwgQ29uZmlnWydFU0NBUEVDSFInXSkgPyAnJyA6ICd8JyArIGFueV9lc2NfY2hyO1xuXG4gICAgICBpZGVudGlmaWVyID0gJy0/KD86JyArIHN0YXJ0ICsgYWxwaGFsb2Rhc2ggKyBzeW50YXggKyAnKSg/Oi18WzAtOV18JyArIGFscGhhbG9kYXNoICsgc3ludGF4ICsgJykqJztcblxuICAgICAgYXR0cmNoZWNrID0gJygnICsgcXVvdGVkdmFsdWUgKyAnfCcgKyBpZGVudGlmaWVyICsgJyknO1xuICAgICAgYXR0cmlidXRlcyA9IHdoaXRlc3BhY2UgKyAnKignICsgaWRlbnRpZmllciArICc6PycgKyBpZGVudGlmaWVyICsgJyknICtcbiAgICAgICAgd2hpdGVzcGFjZSArICcqKD86JyArIG9wZXJhdG9ycyArIHdoaXRlc3BhY2UgKyAnKicgKyBhdHRyY2hlY2sgKyAnKT8nICsgd2hpdGVzcGFjZSArICcqJztcbiAgICAgIGF0dHJtYXRjaGVyID0gYXR0cmlidXRlcy5yZXBsYWNlKGF0dHJjaGVjaywgJyhbXFxcXHgyMlxcXFx4MjddKikoKD86XFxcXFxcXFw/LikqPylcXFxcMycpO1xuXG4gICAgICBwc2V1ZG9jbGFzcyA9ICcoKD86JyArXG4gICAgICAgIHBzZXVkb3Bhcm1zICsgJ3wnICsgcXVvdGVkdmFsdWUgKyAnfCcgK1xuICAgICAgICBwcmVmaXhlcyArIGlkZW50aWZpZXIgKyAnfCcgK1xuICAgICAgICAnXFxcXFsnICsgYXR0cmlidXRlcyArICdcXFxcXXwnICtcbiAgICAgICAgJ1xcXFwoLitcXFxcKXwnICsgd2hpdGVzcGFjZSArICcqfCcgK1xuICAgICAgICAnLCkrKSc7XG5cbiAgICAgIHN0YW5kYXJkVmFsaWRhdG9yID1cbiAgICAgICAgJyg/PVtcXFxceDIwXFxcXHRcXFxcblxcXFxyXFxcXGZdKltePit+KCl7fTw+XSknICtcbiAgICAgICAgJygnICtcbiAgICAgICAgJ1xcXFwqJyArXG4gICAgICAgICd8KD86JyArIHByZWZpeGVzICsgaWRlbnRpZmllciArICcpJyArXG4gICAgICAgICd8JyArIGNvbWJpbmF0b3JzICtcbiAgICAgICAgJ3xcXFxcWycgKyBhdHRyaWJ1dGVzICsgJ1xcXFxdJyArXG4gICAgICAgICd8XFxcXCgnICsgcHNldWRvY2xhc3MgKyAnXFxcXCknICtcbiAgICAgICAgJ3xcXFxceycgKyBleHRlbnNpb25zICsgJ1xcXFx9JyArXG4gICAgICAgICd8KD86LHwnICsgd2hpdGVzcGFjZSArICcqKScgK1xuICAgICAgICAnKSsnO1xuXG4gICAgICByZVNpbXBsZU5vdCA9IFJlZ0V4cCgnXignICtcbiAgICAgICAgJyg/ITpub3QpJyArXG4gICAgICAgICcoJyArIHByZWZpeGVzICsgaWRlbnRpZmllciArXG4gICAgICAgICd8XFxcXChbXigpXSpcXFxcKSkrJyArXG4gICAgICAgICd8XFxcXFsnICsgYXR0cmlidXRlcyArICdcXFxcXScgK1xuICAgICAgICAnKSQnKTtcblxuICAgICAgcmVTcGxpdFRva2VuID0gUmVnRXhwKCcoJyArXG4gICAgICAgIHByZWZpeGVzICsgaWRlbnRpZmllciArICd8JyArXG4gICAgICAgICdcXFxcWycgKyBhdHRyaWJ1dGVzICsgJ1xcXFxdfCcgK1xuICAgICAgICAnXFxcXCgnICsgcHNldWRvY2xhc3MgKyAnXFxcXCl8JyArXG4gICAgICAgICdcXFxcXFxcXC58W15cXFxceDIwXFxcXHRcXFxcblxcXFxyXFxcXGY+K35dKSsnLCAnZycpO1xuXG4gICAgICByZU9wdGltaXplU2VsZWN0b3IgPSBSZWdFeHAoaWRlbnRpZmllciArICd8XiQnKTtcblxuICAgICAgT3B0aW1pemUgPSB7XG4gICAgICAgIElEOiBSZWdFeHAoJ15cXFxcKj8jKCcgKyBpZGVudGlmaWVyICsgJyl8JyArIHNraXBfZ3JvdXBzKSxcbiAgICAgICAgVEFHOiBSZWdFeHAoJ14oJyArIGlkZW50aWZpZXIgKyAnKXwnICsgc2tpcF9ncm91cHMpLFxuICAgICAgICBDTEFTUzogUmVnRXhwKCdeXFxcXC4oJyArIGlkZW50aWZpZXIgKyAnJCl8JyArIHNraXBfZ3JvdXBzKVxuICAgICAgfTtcblxuICAgICAgUGF0dGVybnMuaWQgPSBSZWdFeHAoJ14jKCcgKyBpZGVudGlmaWVyICsgJykoLiopJyk7XG4gICAgICBQYXR0ZXJucy50YWdOYW1lID0gUmVnRXhwKCdeKCcgKyBpZGVudGlmaWVyICsgJykoLiopJyk7XG4gICAgICBQYXR0ZXJucy5jbGFzc05hbWUgPSBSZWdFeHAoJ15cXFxcLignICsgaWRlbnRpZmllciArICcpKC4qKScpO1xuICAgICAgUGF0dGVybnMuYXR0cmlidXRlID0gUmVnRXhwKCdeXFxcXFsnICsgYXR0cm1hdGNoZXIgKyAnXFxcXF0oLiopJyk7XG5cbiAgICAgIFRva2Vucy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjtcbiAgICAgIFRva2Vucy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcblxuICAgICAgZXh0ZW5kZWRWYWxpZGF0b3IgPSBzdGFuZGFyZFZhbGlkYXRvci5yZXBsYWNlKHBzZXVkb2NsYXNzLCAnLionKTtcblxuICAgICAgcmVWYWxpZGF0b3IgPSBSZWdFeHAoc3RhbmRhcmRWYWxpZGF0b3IpO1xuICAgIH0sXG5cbiAgQUNDRVBUX05PREUgPSAncltyLmxlbmd0aF09Y1trXTtpZihmJiZmYWxzZT09PWYoY1trXSkpYnJlYWsgbWFpbjtlbHNlIGNvbnRpbnVlIG1haW47JyxcbiAgUkVKRUNUX05PREUgPSBJRV9MVF85ID8gJ2lmKGUubm9kZU5hbWU8XCJBXCIpY29udGludWU7JyA6ICcnLFxuICBUT19VUFBFUl9DQVNFID0gSUVfTFRfOSA/ICcudG9VcHBlckNhc2UoKScgOiAnJyxcblxuICBjb21waWxlID1cbiAgICBmdW5jdGlvbihzZWxlY3Rvciwgc291cmNlLCBtb2RlKSB7XG5cbiAgICAgIHZhciBwYXJ0cyA9IHR5cGVvZiBzZWxlY3RvciA9PSAnc3RyaW5nJyA/IHNlbGVjdG9yLm1hdGNoKHJlU3BsaXRHcm91cCkgOiBzZWxlY3RvcjtcblxuICAgICAgdHlwZW9mIHNvdXJjZSA9PSAnc3RyaW5nJyB8fCAoc291cmNlID0gJycpO1xuXG4gICAgICBpZiAocGFydHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgc291cmNlICs9IGNvbXBpbGVTZWxlY3RvcihwYXJ0c1swXSwgbW9kZSA/IEFDQ0VQVF9OT0RFIDogJ2YmJmYoayk7cmV0dXJuIHRydWU7JywgbW9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaSA9IC0xLCBzZWVuID0geyB9LCB0b2tlbjtcbiAgICAgICAgd2hpbGUgKCh0b2tlbiA9IHBhcnRzWysraV0pKSB7XG4gICAgICAgICAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKHJlVHJpbVNwYWNlcywgJycpO1xuICAgICAgICAgIGlmICghc2Vlblt0b2tlbl0gJiYgKHNlZW5bdG9rZW5dID0gdHJ1ZSkpIHtcbiAgICAgICAgICAgIHNvdXJjZSArPSBjb21waWxlU2VsZWN0b3IodG9rZW4sIG1vZGUgPyBBQ0NFUFRfTk9ERSA6ICdmJiZmKGspO3JldHVybiB0cnVlOycsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb24oJ2MscyxyLGQsaCxnLGYsdicsXG4gICAgICAgICAgJ3ZhciBOLG4seD0wLGs9LTEsZTttYWluOndoaWxlKChlPWNbKytrXSkpeycgKyBzb3VyY2UgKyAnfXJldHVybiByOycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uKCdlLHMscixkLGgsZyxmLHYnLFxuICAgICAgICAgICd2YXIgTixuLHg9MCxrPWU7JyArIHNvdXJjZSArICdyZXR1cm4gZmFsc2U7Jyk7XG4gICAgICB9XG4gICAgfSxcblxuICBGSUxURVIgPVxuICAgICd2YXIgej12W0BdfHwodltAXT1bXSksbD16Lmxlbmd0aC0xOycgK1xuICAgICd3aGlsZShsPj0wJiZ6W2xdIT09ZSktLWw7JyArXG4gICAgJ2lmKGwhPT0tMSl7YnJlYWs7fScgK1xuICAgICd6W3oubGVuZ3RoXT1lOycsXG5cbiAgY29tcGlsZVNlbGVjdG9yID1cbiAgICBmdW5jdGlvbihzZWxlY3Rvciwgc291cmNlLCBtb2RlKSB7XG5cbiAgICAgIHZhciBhLCBiLCBuLCBrID0gMCwgZXhwciwgbWF0Y2gsIHJlc3VsdCwgc3RhdHVzLCB0ZXN0LCB0eXBlO1xuXG4gICAgICB3aGlsZSAoc2VsZWN0b3IpIHtcblxuICAgICAgICBrKys7XG5cbiAgICAgICAgaWYgKChtYXRjaCA9IHNlbGVjdG9yLm1hdGNoKFBhdHRlcm5zLnVuaXZlcnNhbCkpKSB7XG4gICAgICAgICAgZXhwciA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gc2VsZWN0b3IubWF0Y2goUGF0dGVybnMuaWQpKSkge1xuICAgICAgICAgIG1hdGNoWzFdID0gKC9cXFxcLykudGVzdChtYXRjaFsxXSkgPyBjb252ZXJ0RXNjYXBlcyhtYXRjaFsxXSkgOiBtYXRjaFsxXTtcbiAgICAgICAgICBzb3VyY2UgPSAnaWYoJyArIChYTUxfRE9DVU1FTlQgP1xuICAgICAgICAgICAgJ3MuZ2V0QXR0cmlidXRlKGUsXCJpZFwiKScgOlxuICAgICAgICAgICAgJyhlLnN1Ym1pdD9zLmdldEF0dHJpYnV0ZShlLFwiaWRcIik6ZS5pZCknKSArXG4gICAgICAgICAgICAnPT1cIicgKyBtYXRjaFsxXSArICdcIicgK1xuICAgICAgICAgICAgJyl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHNlbGVjdG9yLm1hdGNoKFBhdHRlcm5zLnRhZ05hbWUpKSkge1xuICAgICAgICAgIHNvdXJjZSA9ICdpZihlLm5vZGVOYW1lJyArIChYTUxfRE9DVU1FTlQgP1xuICAgICAgICAgICAgJz09XCInICsgbWF0Y2hbMV0gKyAnXCInIDogVE9fVVBQRVJfQ0FTRSArXG4gICAgICAgICAgICAnPT1cIicgKyBtYXRjaFsxXS50b1VwcGVyQ2FzZSgpICsgJ1wiJykgK1xuICAgICAgICAgICAgJyl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHNlbGVjdG9yLm1hdGNoKFBhdHRlcm5zLmNsYXNzTmFtZSkpKSB7XG4gICAgICAgICAgbWF0Y2hbMV0gPSAoL1xcXFwvKS50ZXN0KG1hdGNoWzFdKSA/IGNvbnZlcnRFc2NhcGVzKG1hdGNoWzFdKSA6IG1hdGNoWzFdO1xuICAgICAgICAgIG1hdGNoWzFdID0gUVVJUktTX01PREUgPyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIDogbWF0Y2hbMV07XG4gICAgICAgICAgc291cmNlID0gJ2lmKChuPScgKyAoWE1MX0RPQ1VNRU5UID9cbiAgICAgICAgICAgICdlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpJyA6ICdlLmNsYXNzTmFtZScpICtcbiAgICAgICAgICAgICcpJiZuLmxlbmd0aCYmKFwiIFwiKycgKyAoUVVJUktTX01PREUgPyAnbi50b0xvd2VyQ2FzZSgpJyA6ICduJykgK1xuICAgICAgICAgICAgJy5yZXBsYWNlKC8nICsgd2hpdGVzcGFjZSArICcrL2csXCIgXCIpK1wiIFwiKS5pbmRleE9mKFwiICcgKyBtYXRjaFsxXSArICcgXCIpPi0xJyArXG4gICAgICAgICAgICAnKXsnICsgc291cmNlICsgJ30nO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gc2VsZWN0b3IubWF0Y2goUGF0dGVybnMuYXR0cmlidXRlKSkpIHtcbiAgICAgICAgICBpZiAobWF0Y2hbMl0gJiYgIU9wZXJhdG9yc1ttYXRjaFsyXV0pIHtcbiAgICAgICAgICAgIGVtaXQoJ1Vuc3VwcG9ydGVkIG9wZXJhdG9yIGluIGF0dHJpYnV0ZSBzZWxlY3RvcnMgXCInICsgc2VsZWN0b3IgKyAnXCInKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGVzdCA9ICdmYWxzZSc7XG4gICAgICAgICAgaWYgKG1hdGNoWzJdICYmIG1hdGNoWzRdICYmICh0ZXN0ID0gT3BlcmF0b3JzW21hdGNoWzJdXSkpIHtcbiAgICAgICAgICAgIG1hdGNoWzRdID0gKC9cXFxcLykudGVzdChtYXRjaFs0XSkgPyBjb252ZXJ0RXNjYXBlcyhtYXRjaFs0XSkgOiBtYXRjaFs0XTtcbiAgICAgICAgICAgIElOU0VOU0lUSVZFX01BUFsnY2xhc3MnXSA9IFFVSVJLU19NT0RFID8gMSA6IDA7XG4gICAgICAgICAgICB0eXBlID0gSU5TRU5TSVRJVkVfTUFQW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgdGVzdCA9IHRlc3QucmVwbGFjZSgvXFwlbS9nLCB0eXBlID8gbWF0Y2hbNF0udG9Mb3dlckNhc2UoKSA6IG1hdGNoWzRdKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoWzJdID09ICchPScgfHwgbWF0Y2hbMl0gPT0gJz0nKSB7XG4gICAgICAgICAgICB0ZXN0ID0gJ24nICsgbWF0Y2hbMl0gKyAnPVwiXCInO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzb3VyY2UgPSAnaWYobj1zLmhhc0F0dHJpYnV0ZShlLFwiJyArIG1hdGNoWzFdICsgJ1wiKSl7JyArXG4gICAgICAgICAgICAobWF0Y2hbMl0gPyAnbj1zLmdldEF0dHJpYnV0ZShlLFwiJyArIG1hdGNoWzFdICsgJ1wiKScgOiAnJykgK1xuICAgICAgICAgICAgKHR5cGUgJiYgbWF0Y2hbMl0gPyAnLnRvTG93ZXJDYXNlKCk7JyA6ICc7JykgK1xuICAgICAgICAgICAgJ2lmKCcgKyAobWF0Y2hbMl0gPyB0ZXN0IDogJ24nKSArICcpeycgKyBzb3VyY2UgKyAnfX0nO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gc2VsZWN0b3IubWF0Y2goUGF0dGVybnMuYWRqYWNlbnQpKSkge1xuICAgICAgICAgIHNvdXJjZSA9IChtb2RlID8gJycgOiBGSUxURVIucmVwbGFjZSgvQC9nLCBrKSkgKyBzb3VyY2U7XG4gICAgICAgICAgc291cmNlID0gJ3ZhciBOJyArIGsgKyAnPWU7d2hpbGUoZSYmKGU9ZS5wcmV2aW91c1NpYmxpbmcpKXtpZihlLm5vZGVOYW1lPlwiQFwiKXsnICsgc291cmNlICsgJ2JyZWFrO319ZT1OJyArIGsgKyAnOyc7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSBzZWxlY3Rvci5tYXRjaChQYXR0ZXJucy5yZWxhdGl2ZSkpKSB7XG4gICAgICAgICAgc291cmNlID0gKG1vZGUgPyAnJyA6IEZJTFRFUi5yZXBsYWNlKC9AL2csIGspKSArIHNvdXJjZTtcbiAgICAgICAgICBzb3VyY2UgPSAndmFyIE4nICsgayArICc9ZTtlPWUucGFyZW50Tm9kZS5maXJzdENoaWxkO3doaWxlKGUmJmUhPT1OJyArIGsgKyAnKXtpZihlLm5vZGVOYW1lPlwiQFwiKXsnICsgc291cmNlICsgJ31lPWUubmV4dFNpYmxpbmc7fWU9TicgKyBrICsgJzsnO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gc2VsZWN0b3IubWF0Y2goUGF0dGVybnMuY2hpbGRyZW4pKSkge1xuICAgICAgICAgIHNvdXJjZSA9IChtb2RlID8gJycgOiBGSUxURVIucmVwbGFjZSgvQC9nLCBrKSkgKyBzb3VyY2U7XG4gICAgICAgICAgc291cmNlID0gJ3ZhciBOJyArIGsgKyAnPWU7d2hpbGUoZSYmZSE9PWgmJmUhPT1nJiYoZT1lLnBhcmVudE5vZGUpKXsnICsgc291cmNlICsgJ2JyZWFrO31lPU4nICsgayArICc7JztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHNlbGVjdG9yLm1hdGNoKFBhdHRlcm5zLmFuY2VzdG9yKSkpIHtcbiAgICAgICAgICBzb3VyY2UgPSAobW9kZSA/ICcnIDogRklMVEVSLnJlcGxhY2UoL0AvZywgaykpICsgc291cmNlO1xuICAgICAgICAgIHNvdXJjZSA9ICd2YXIgTicgKyBrICsgJz1lO3doaWxlKGUmJmUhPT1oJiZlIT09ZyYmKGU9ZS5wYXJlbnROb2RlKSl7JyArIHNvdXJjZSArICd9ZT1OJyArIGsgKyAnOyc7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSBzZWxlY3Rvci5tYXRjaChQYXR0ZXJucy5zcHNldWRvcykpICYmIG1hdGNoWzFdKSB7XG4gICAgICAgICAgc3dpdGNoIChtYXRjaFsxXSkge1xuICAgICAgICAgICAgY2FzZSAncm9vdCc6XG4gICAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIHNvdXJjZSA9ICdpZihlPT09aHx8cy5jb250YWlucyhoLGUpKXsnICsgc291cmNlICsgJ30nO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNvdXJjZSA9ICdpZihlPT09aCl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzpcbiAgICAgICAgICAgICAgc291cmNlID0gJ2lmKHMuaXNFbXB0eShlKSl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0gJiYgbWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMl0gPT0gJ24nKSB7XG4gICAgICAgICAgICAgICAgICBzb3VyY2UgPSAnaWYoZSE9PWgpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoWzJdID09ICdldmVuJykge1xuICAgICAgICAgICAgICAgICAgYSA9IDI7XG4gICAgICAgICAgICAgICAgICBiID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoWzJdID09ICdvZGQnKSB7XG4gICAgICAgICAgICAgICAgICBhID0gMjtcbiAgICAgICAgICAgICAgICAgIGIgPSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBiID0gKChuID0gbWF0Y2hbMl0ubWF0Y2goLygtP1xcZCspJC8pKSA/IHBhcnNlSW50KG5bMV0sIDEwKSA6IDApO1xuICAgICAgICAgICAgICAgICAgYSA9ICgobiA9IG1hdGNoWzJdLm1hdGNoKC8oLT9cXGQqKW4vaSkpID8gcGFyc2VJbnQoblsxXSwgMTApIDogMCk7XG4gICAgICAgICAgICAgICAgICBpZiAobiAmJiBuWzFdID09ICctJykgYSA9IC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0ZXN0ID0gYSA+IDEgP1xuICAgICAgICAgICAgICAgICAgKC9sYXN0L2kudGVzdChtYXRjaFsxXSkpID8gJyhuLSgnICsgYiArICcpKSUnICsgYSArICc9PTAnIDpcbiAgICAgICAgICAgICAgICAgICduPj0nICsgYiArICcmJihuLSgnICsgYiArICcpKSUnICsgYSArICc9PTAnIDogYSA8IC0xID9cbiAgICAgICAgICAgICAgICAgICgvbGFzdC9pLnRlc3QobWF0Y2hbMV0pKSA/ICcobi0oJyArIGIgKyAnKSklJyArIGEgKyAnPT0wJyA6XG4gICAgICAgICAgICAgICAgICAnbjw9JyArIGIgKyAnJiYobi0oJyArIGIgKyAnKSklJyArIGEgKyAnPT0wJyA6IGEgPT09IDAgP1xuICAgICAgICAgICAgICAgICAgJ249PScgKyBiIDogYSA9PSAtMSA/ICduPD0nICsgYiA6ICduPj0nICsgYjtcbiAgICAgICAgICAgICAgICBzb3VyY2UgPVxuICAgICAgICAgICAgICAgICAgJ2lmKGUhPT1oKXsnICtcbiAgICAgICAgICAgICAgICAgICAgJ249c1snICsgKC8tb2YtdHlwZS9pLnRlc3QobWF0Y2hbMV0pID8gJ1wibnRoT2ZUeXBlXCInIDogJ1wibnRoRWxlbWVudFwiJykgKyAnXScgK1xuICAgICAgICAgICAgICAgICAgICAgICcoZSwnICsgKC9sYXN0L2kudGVzdChtYXRjaFsxXSkgPyAndHJ1ZScgOiAnZmFsc2UnKSArICcpOycgK1xuICAgICAgICAgICAgICAgICAgICAnaWYoJyArIHRlc3QgKyAnKXsnICsgc291cmNlICsgJ30nICtcbiAgICAgICAgICAgICAgICAgICd9JztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhID0gL2ZpcnN0L2kudGVzdChtYXRjaFsxXSkgPyAncHJldmlvdXMnIDogJ25leHQnO1xuICAgICAgICAgICAgICAgIG4gPSAvb25seS9pLnRlc3QobWF0Y2hbMV0pID8gJ3ByZXZpb3VzJyA6ICduZXh0JztcbiAgICAgICAgICAgICAgICBiID0gL2ZpcnN0fGxhc3QvaS50ZXN0KG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICB0eXBlID0gLy1vZi10eXBlL2kudGVzdChtYXRjaFsxXSkgPyAnJiZuLm5vZGVOYW1lIT1lLm5vZGVOYW1lJyA6ICcmJm4ubm9kZU5hbWU8XCJAXCInO1xuICAgICAgICAgICAgICAgIHNvdXJjZSA9ICdpZihlIT09aCl7JyArXG4gICAgICAgICAgICAgICAgICAoICduPWU7d2hpbGUoKG49bi4nICsgYSArICdTaWJsaW5nKScgKyB0eXBlICsgJyk7aWYoIW4peycgKyAoYiA/IHNvdXJjZSA6XG4gICAgICAgICAgICAgICAgICAgICduPWU7d2hpbGUoKG49bi4nICsgbiArICdTaWJsaW5nKScgKyB0eXBlICsgJyk7aWYoIW4peycgKyBzb3VyY2UgKyAnfScpICsgJ30nICkgKyAnfSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gc2VsZWN0b3IubWF0Y2goUGF0dGVybnMuZHBzZXVkb3MpKSAmJiBtYXRjaFsxXSkge1xuICAgICAgICAgIHN3aXRjaCAobWF0Y2hbMV0ubWF0Y2goL15cXHcrLylbMF0pIHtcbiAgICAgICAgICAgIGNhc2UgJ25vdCc6XG4gICAgICAgICAgICAgIGV4cHIgPSBtYXRjaFszXS5yZXBsYWNlKHJlVHJpbVNwYWNlcywgJycpO1xuICAgICAgICAgICAgICBpZiAoQ29uZmlnLlNJTVBMRU5PVCAmJiAhcmVTaW1wbGVOb3QudGVzdChleHByKSkge1xuICAgICAgICAgICAgICAgIGVtaXQoJ05lZ2F0aW9uIHBzZXVkby1jbGFzcyBvbmx5IGFjY2VwdHMgc2ltcGxlIHNlbGVjdG9ycyBcIicgKyBzZWxlY3RvciArICdcIicpO1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoJ2NvbXBhdE1vZGUnIGluIGRvYykge1xuICAgICAgICAgICAgICAgICAgc291cmNlID0gJ2lmKCEnICsgY29tcGlsZShleHByLCAnJywgZmFsc2UpICsgJyhlLHMscixkLGgsZykpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNvdXJjZSA9ICdpZighcy5tYXRjaChlLCBcIicgKyBleHByLnJlcGxhY2UoL1xceDIyL2csICdcXFxcXCInKSArICdcIixnKSl7JyArIHNvdXJjZSArJ30nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NoZWNrZWQnOlxuICAgICAgICAgICAgICBzb3VyY2UgPSAnaWYoKHR5cGVvZiBlLmZvcm0hPT1cInVuZGVmaW5lZFwiJiYoL14oPzpyYWRpb3xjaGVja2JveCkkL2kpLnRlc3QoZS50eXBlKSYmZS5jaGVja2VkKScgK1xuICAgICAgICAgICAgICAgIChDb25maWcuVVNFX0hUTUw1ID8gJ3x8KC9eb3B0aW9uJC9pLnRlc3QoZS5ub2RlTmFtZSkmJihlLnNlbGVjdGVkfHxlLmNoZWNrZWQpKScgOiAnJykgK1xuICAgICAgICAgICAgICAgICcpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGlzYWJsZWQnOlxuICAgICAgICAgICAgICBzb3VyY2UgPSAnaWYoKCh0eXBlb2YgZS5mb3JtIT09XCJ1bmRlZmluZWRcIicgK1xuICAgICAgICAgICAgICAgIChDb25maWcuVVNFX0hUTUw1ID8gJycgOiAnJiYhKC9eaGlkZGVuJC9pKS50ZXN0KGUudHlwZSknKSArXG4gICAgICAgICAgICAgICAgJyl8fHMuaXNMaW5rKGUpKSYmZS5kaXNhYmxlZD09PXRydWUpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5hYmxlZCc6XG4gICAgICAgICAgICAgIHNvdXJjZSA9ICdpZigoKHR5cGVvZiBlLmZvcm0hPT1cInVuZGVmaW5lZFwiJyArXG4gICAgICAgICAgICAgICAgKENvbmZpZy5VU0VfSFRNTDUgPyAnJyA6ICcmJiEoL15oaWRkZW4kL2kpLnRlc3QoZS50eXBlKScpICtcbiAgICAgICAgICAgICAgICAnKXx8cy5pc0xpbmsoZSkpJiZlLmRpc2FibGVkPT09ZmFsc2UpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGFuZyc6XG4gICAgICAgICAgICAgIHRlc3QgPSAnJztcbiAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB0ZXN0ID0gbWF0Y2hbMl0uc3Vic3RyKDAsIDIpICsgJy0nO1xuICAgICAgICAgICAgICBzb3VyY2UgPSAnZG97KG49ZS5sYW5nfHxcIlwiKS50b0xvd2VyQ2FzZSgpOycgK1xuICAgICAgICAgICAgICAgICdpZigobj09XCJcIiYmaC5sYW5nPT1cIicgKyBtYXRjaFsyXS50b0xvd2VyQ2FzZSgpICsgJ1wiKXx8JyArXG4gICAgICAgICAgICAgICAgJyhuJiYobj09XCInICsgbWF0Y2hbMl0udG9Mb3dlckNhc2UoKSArXG4gICAgICAgICAgICAgICAgJ1wifHxuLnN1YnN0cigwLDMpPT1cIicgKyB0ZXN0LnRvTG93ZXJDYXNlKCkgKyAnXCIpKSknICtcbiAgICAgICAgICAgICAgICAneycgKyBzb3VyY2UgKyAnYnJlYWs7fX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiZlIT09Zyk7JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0YXJnZXQnOlxuICAgICAgICAgICAgICBzb3VyY2UgPSAnaWYoZS5pZD09ZC5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpKXsnICsgc291cmNlICsgJ30nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICAgICAgICBzb3VyY2UgPSAnaWYocy5pc0xpbmsoZSkmJiFlLnZpc2l0ZWQpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmlzaXRlZCc6XG4gICAgICAgICAgICAgIHNvdXJjZSA9ICdpZihzLmlzTGluayhlKSYmZS52aXNpdGVkKXsnICsgc291cmNlICsgJ30nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FjdGl2ZSc6XG4gICAgICAgICAgICAgIHNvdXJjZSA9ICdpZihlPT09ZC5hY3RpdmVFbGVtZW50KXsnICsgc291cmNlICsgJ30nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdmVyJzpcbiAgICAgICAgICAgICAgc291cmNlID0gJ2lmKGU9PT1kLmhvdmVyRWxlbWVudCl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmb2N1cyc6XG4gICAgICAgICAgICAgIHNvdXJjZSA9ICdoYXNGb2N1cycgaW4gZG9jID9cbiAgICAgICAgICAgICAgICAnaWYoZT09PWQuYWN0aXZlRWxlbWVudCYmZC5oYXNGb2N1cygpJiYoZS50eXBlfHxlLmhyZWZ8fHR5cGVvZiBlLnRhYkluZGV4PT1cIm51bWJlclwiKSl7JyArIHNvdXJjZSArICd9JyA6XG4gICAgICAgICAgICAgICAgJ2lmKGU9PT1kLmFjdGl2ZUVsZW1lbnQmJihlLnR5cGV8fGUuaHJlZikpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0ZWQnOlxuICAgICAgICAgICAgICBzb3VyY2UgPSAnaWYoL15vcHRpb24kL2kudGVzdChlLm5vZGVOYW1lKSYmKGUuc2VsZWN0ZWR8fGUuY2hlY2tlZCkpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSB7XG5cbiAgICAgICAgICBleHByID0gZmFsc2U7XG4gICAgICAgICAgc3RhdHVzID0gZmFsc2U7XG4gICAgICAgICAgZm9yIChleHByIGluIFNlbGVjdG9ycykge1xuICAgICAgICAgICAgaWYgKChtYXRjaCA9IHNlbGVjdG9yLm1hdGNoKFNlbGVjdG9yc1tleHByXS5FeHByZXNzaW9uKSkgJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gU2VsZWN0b3JzW2V4cHJdLkNhbGxiYWNrKG1hdGNoLCBzb3VyY2UpO1xuICAgICAgICAgICAgICBzb3VyY2UgPSByZXN1bHQuc291cmNlO1xuICAgICAgICAgICAgICBzdGF0dXMgPSByZXN1bHQuc3RhdHVzO1xuICAgICAgICAgICAgICBpZiAoc3RhdHVzKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgICAgIGVtaXQoJ1Vua25vd24gcHNldWRvLWNsYXNzIHNlbGVjdG9yIFwiJyArIHNlbGVjdG9yICsgJ1wiJyk7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFleHByKSB7XG4gICAgICAgICAgICBlbWl0KCdVbmtub3duIHRva2VuIGluIHNlbGVjdG9yIFwiJyArIHNlbGVjdG9yICsgJ1wiJyk7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgZW1pdCgnSW52YWxpZCBzeW50YXggaW4gc2VsZWN0b3IgXCInICsgc2VsZWN0b3IgKyAnXCInKTtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxlY3RvciA9IG1hdGNoICYmIG1hdGNoW21hdGNoLmxlbmd0aCAtIDFdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc291cmNlO1xuICAgIH0sXG5cbiAgbWF0Y2ggPVxuICAgIGZ1bmN0aW9uKGVsZW1lbnQsIHNlbGVjdG9yLCBmcm9tLCBjYWxsYmFjaykge1xuXG4gICAgICB2YXIgcGFydHM7XG5cbiAgICAgIGlmICghKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PSAxKSkge1xuICAgICAgICBlbWl0KCdJbnZhbGlkIGVsZW1lbnQgYXJndW1lbnQnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT0gJ3N0cmluZycpIHtcbiAgICAgICAgZW1pdCgnSW52YWxpZCBzZWxlY3RvciBhcmd1bWVudCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGxhc3RDb250ZXh0ICE9PSBmcm9tKSB7XG4gICAgICAgIHN3aXRjaENvbnRleHQoZnJvbSB8fCAoZnJvbSA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkpO1xuICAgICAgfVxuXG4gICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLlxuICAgICAgICByZXBsYWNlKHJlVHJpbVNwYWNlcywgJycpLlxuICAgICAgICByZXBsYWNlKC9cXHgwMHxcXFxcJC9nLCAnXFx1ZmZmZCcpO1xuXG4gICAgICBDb25maWcuU0hPUlRDVVRTICYmIChzZWxlY3RvciA9IERvbS5zaG9ydGN1dHMoc2VsZWN0b3IsIGVsZW1lbnQsIGZyb20pKTtcblxuICAgICAgaWYgKGxhc3RNYXRjaGVyICE9IHNlbGVjdG9yKSB7XG4gICAgICAgIGlmICgocGFydHMgPSBzZWxlY3Rvci5tYXRjaChyZVZhbGlkYXRvcikpICYmIHBhcnRzWzBdID09IHNlbGVjdG9yKSB7XG4gICAgICAgICAgaXNTaW5nbGVNYXRjaCA9IChwYXJ0cyA9IHNlbGVjdG9yLm1hdGNoKHJlU3BsaXRHcm91cCkpLmxlbmd0aCA8IDI7XG4gICAgICAgICAgbGFzdE1hdGNoZXIgPSBzZWxlY3RvcjtcbiAgICAgICAgICBsYXN0UGFydHNNYXRjaCA9IHBhcnRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVtaXQoJ1RoZSBzdHJpbmcgXCInICsgc2VsZWN0b3IgKyAnXCIsIGlzIG5vdCBhIHZhbGlkIENTUyBzZWxlY3RvcicpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHBhcnRzID0gbGFzdFBhcnRzTWF0Y2g7XG5cbiAgICAgIGlmICghbWF0Y2hSZXNvbHZlcnNbc2VsZWN0b3JdIHx8IG1hdGNoQ29udGV4dHNbc2VsZWN0b3JdICE9PSBmcm9tKSB7XG4gICAgICAgIG1hdGNoUmVzb2x2ZXJzW3NlbGVjdG9yXSA9IGNvbXBpbGUoaXNTaW5nbGVNYXRjaCA/IFtzZWxlY3Rvcl0gOiBwYXJ0cywgJycsIGZhbHNlKTtcbiAgICAgICAgbWF0Y2hDb250ZXh0c1tzZWxlY3Rvcl0gPSBmcm9tO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWF0Y2hSZXNvbHZlcnNbc2VsZWN0b3JdKGVsZW1lbnQsIFNuYXBzaG90LCBbIF0sIGRvYywgcm9vdCwgZnJvbSwgY2FsbGJhY2ssIHsgfSk7XG4gICAgfSxcblxuICBmaXJzdCA9XG4gICAgZnVuY3Rpb24oc2VsZWN0b3IsIGZyb20pIHtcbiAgICAgIHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIGZyb20sIGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0pWzBdIHx8IG51bGw7XG4gICAgfSxcblxuICBzZWxlY3QgPVxuICAgIGZ1bmN0aW9uKHNlbGVjdG9yLCBmcm9tLCBjYWxsYmFjaykge1xuXG4gICAgICB2YXIgaSwgY2hhbmdlZCwgZWxlbWVudCwgZWxlbWVudHMsIHBhcnRzLCB0b2tlbiwgb3JpZ2luYWwgPSBzZWxlY3RvcjtcblxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZW1pdCgnTm90IGVub3VnaCBhcmd1bWVudHMnKTtcbiAgICAgICAgcmV0dXJuIFsgXTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlbGVjdG9yICE9ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBbIF07XG4gICAgICB9IGVsc2UgaWYgKGZyb20gJiYgISgvMXw5fDExLykudGVzdChmcm9tLm5vZGVUeXBlKSkge1xuICAgICAgICBlbWl0KCdJbnZhbGlkIG9yIGlsbGVnYWwgY29udGV4dCBlbGVtZW50Jyk7XG4gICAgICAgIHJldHVybiBbIF07XG4gICAgICB9IGVsc2UgaWYgKGxhc3RDb250ZXh0ICE9PSBmcm9tKSB7XG4gICAgICAgIHN3aXRjaENvbnRleHQoZnJvbSB8fCAoZnJvbSA9IGRvYykpO1xuICAgICAgfVxuXG4gICAgICBpZiAoQ29uZmlnLkNBQ0hJTkcgJiYgKGVsZW1lbnRzID0gRG9tLmxvYWRSZXN1bHRzKG9yaWdpbmFsLCBmcm9tLCBkb2MsIHJvb3QpKSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyBjb25jYXRDYWxsKFsgXSwgZWxlbWVudHMsIGNhbGxiYWNrKSA6IGVsZW1lbnRzO1xuICAgICAgfVxuXG4gICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLlxuICAgICAgICByZXBsYWNlKHJlVHJpbVNwYWNlcywgJycpLlxuICAgICAgICByZXBsYWNlKC9cXHgwMHxcXFxcJC9nLCAnXFx1ZmZmZCcpO1xuXG4gICAgICBDb25maWcuU0hPUlRDVVRTICYmIChzZWxlY3RvciA9IERvbS5zaG9ydGN1dHMoc2VsZWN0b3IsIGZyb20pKTtcblxuICAgICAgaWYgKChjaGFuZ2VkID0gbGFzdFNlbGVjdG9yICE9IHNlbGVjdG9yKSkge1xuICAgICAgICBpZiAoKHBhcnRzID0gc2VsZWN0b3IubWF0Y2gocmVWYWxpZGF0b3IpKSAmJiBwYXJ0c1swXSA9PSBzZWxlY3Rvcikge1xuICAgICAgICAgIGlzU2luZ2xlU2VsZWN0ID0gKHBhcnRzID0gc2VsZWN0b3IubWF0Y2gocmVTcGxpdEdyb3VwKSkubGVuZ3RoIDwgMjtcbiAgICAgICAgICBsYXN0U2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgICBsYXN0UGFydHNTZWxlY3QgPSBwYXJ0cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbWl0KCdUaGUgc3RyaW5nIFwiJyArIHNlbGVjdG9yICsgJ1wiLCBpcyBub3QgYSB2YWxpZCBDU1Mgc2VsZWN0b3InKTtcbiAgICAgICAgICByZXR1cm4gWyBdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgcGFydHMgPSBsYXN0UGFydHNTZWxlY3Q7XG5cbiAgICAgIGlmIChmcm9tLm5vZGVUeXBlID09IDExKSB7XG5cbiAgICAgICAgZWxlbWVudHMgPSBieVRhZ1JhdygnKicsIGZyb20pO1xuXG4gICAgICB9IGVsc2UgaWYgKGlzU2luZ2xlU2VsZWN0KSB7XG5cbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICBwYXJ0cyA9IHNlbGVjdG9yLm1hdGNoKHJlU3BsaXRUb2tlbik7XG4gICAgICAgICAgdG9rZW4gPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBsYXN0U2xpY2UgPSB0b2tlbi5zcGxpdCgnOm5vdCcpO1xuICAgICAgICAgIGxhc3RTbGljZSA9IGxhc3RTbGljZVtsYXN0U2xpY2UubGVuZ3RoIC0gMV07XG4gICAgICAgICAgbGFzdFBvc2l0aW9uID0gc2VsZWN0b3IubGVuZ3RoIC0gdG9rZW4ubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKENvbmZpZy5VTklRVUVfSUQgJiYgKHBhcnRzID0gbGFzdFNsaWNlLm1hdGNoKE9wdGltaXplLklEKSkgJiYgKHRva2VuID0gcGFydHNbMV0pKSB7XG4gICAgICAgICAgaWYgKChlbGVtZW50ID0gX2J5SWQodG9rZW4sIGZyb20pKSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoKGVsZW1lbnQsIHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhlbGVtZW50KTtcbiAgICAgICAgICAgICAgZWxlbWVudHMgPSBbZWxlbWVudF07XG4gICAgICAgICAgICB9IGVsc2UgZWxlbWVudHMgPSBbIF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoQ29uZmlnLlVOSVFVRV9JRCAmJiAocGFydHMgPSBzZWxlY3Rvci5tYXRjaChPcHRpbWl6ZS5JRCkpICYmICh0b2tlbiA9IHBhcnRzWzFdKSkge1xuICAgICAgICAgIGlmICgoZWxlbWVudCA9IF9ieUlkKHRva2VuLCBkb2MpKSkge1xuICAgICAgICAgICAgaWYgKCcjJyArIHRva2VuID09IHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKGVsZW1lbnQpO1xuICAgICAgICAgICAgICBlbGVtZW50cyA9IFtlbGVtZW50XTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL1s+K35dLy50ZXN0KHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgICBmcm9tID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZnJvbSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGVsZW1lbnRzID0gWyBdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVsZW1lbnRzKSB7XG4gICAgICAgICAgQ29uZmlnLkNBQ0hJTkcgJiYgRG9tLnNhdmVSZXN1bHRzKG9yaWdpbmFsLCBmcm9tLCBkb2MsIGVsZW1lbnRzKTtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIVhNTF9ET0NVTUVOVCAmJiBHRUJUTiAmJiAocGFydHMgPSBsYXN0U2xpY2UubWF0Y2goT3B0aW1pemUuVEFHKSkgJiYgKHRva2VuID0gcGFydHNbMV0pKSB7XG4gICAgICAgICAgaWYgKChlbGVtZW50cyA9IGZyb20uZ2V0RWxlbWVudHNCeVRhZ05hbWUodG9rZW4pKS5sZW5ndGggPT09IDApIHsgcmV0dXJuIFsgXTsgfVxuICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoMCwgbGFzdFBvc2l0aW9uKSArIHNlbGVjdG9yLnNsaWNlKGxhc3RQb3NpdGlvbikucmVwbGFjZSh0b2tlbiwgJyonKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKCFYTUxfRE9DVU1FTlQgJiYgR0VCQ04gJiYgKHBhcnRzID0gbGFzdFNsaWNlLm1hdGNoKE9wdGltaXplLkNMQVNTKSkgJiYgKHRva2VuID0gcGFydHNbMV0pKSB7XG4gICAgICAgICAgaWYgKChlbGVtZW50cyA9IGZyb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh1bmVzY2FwZUlkZW50aWZpZXIodG9rZW4pKSkubGVuZ3RoID09PSAwKSB7IHJldHVybiBbIF07IH1cbiAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoMCwgbGFzdFBvc2l0aW9uKSArIHNlbGVjdG9yLnNsaWNlKGxhc3RQb3NpdGlvbikucmVwbGFjZSgnLicgKyB0b2tlbixcbiAgICAgICAgICAgICAgcmVPcHRpbWl6ZVNlbGVjdG9yLnRlc3Qoc2VsZWN0b3IuY2hhckF0KHNlbGVjdG9yLmluZGV4T2YodG9rZW4pIC0gMSkpID8gJycgOiAnKicpO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKCFlbGVtZW50cykge1xuICAgICAgICBpZiAoSUVfTFRfOSkge1xuICAgICAgICAgIGVsZW1lbnRzID0gL14oPzphcHBsZXR8b2JqZWN0KSQvaS50ZXN0KGZyb20ubm9kZU5hbWUpID8gZnJvbS5jaGlsZHJlbiA6IGJ5VGFnUmF3KCcqJywgZnJvbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudHMgPSBmcm9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFzZWxlY3RSZXNvbHZlcnNbc2VsZWN0b3JdIHx8IHNlbGVjdENvbnRleHRzW3NlbGVjdG9yXSAhPT0gZnJvbSkge1xuICAgICAgICBzZWxlY3RSZXNvbHZlcnNbc2VsZWN0b3JdID0gY29tcGlsZShpc1NpbmdsZVNlbGVjdCA/IFtzZWxlY3Rvcl0gOiBwYXJ0cywgUkVKRUNUX05PREUsIHRydWUpO1xuICAgICAgICBzZWxlY3RDb250ZXh0c1tzZWxlY3Rvcl0gPSBmcm9tO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50cyA9IHNlbGVjdFJlc29sdmVyc1tzZWxlY3Rvcl0oZWxlbWVudHMsIFNuYXBzaG90LCBbIF0sIGRvYywgcm9vdCwgZnJvbSwgY2FsbGJhY2ssIHsgfSk7XG5cbiAgICAgIENvbmZpZy5DQUNISU5HICYmIERvbS5zYXZlUmVzdWx0cyhvcmlnaW5hbCwgZnJvbSwgZG9jLCBlbGVtZW50cyk7XG5cbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9LFxuXG4gIEZOID0gZnVuY3Rpb24oeCkgeyByZXR1cm4geDsgfSxcblxuICBtYXRjaENvbnRleHRzID0geyB9LFxuICBtYXRjaFJlc29sdmVycyA9IHsgfSxcblxuICBzZWxlY3RDb250ZXh0cyA9IHsgfSxcbiAgc2VsZWN0UmVzb2x2ZXJzID0geyB9LFxuXG4gIFNuYXBzaG90ID0ge1xuICAgIGJ5SWQ6IF9ieUlkLFxuICAgIG1hdGNoOiBtYXRjaCxcbiAgICBzZWxlY3Q6IHNlbGVjdCxcbiAgICBpc0xpbms6IGlzTGluayxcbiAgICBpc0VtcHR5OiBpc0VtcHR5LFxuICAgIGNvbnRhaW5zOiBjb250YWlucyxcbiAgICBudGhPZlR5cGU6IG50aE9mVHlwZSxcbiAgICBudGhFbGVtZW50OiBudGhFbGVtZW50LFxuICAgIGdldEF0dHJpYnV0ZTogZ2V0QXR0cmlidXRlLFxuICAgIGhhc0F0dHJpYnV0ZTogaGFzQXR0cmlidXRlXG4gIH0sXG5cbiAgRG9tID0ge1xuXG4gICAgQUNDRVBUX05PREU6IEFDQ0VQVF9OT0RFLFxuXG4gICAgYnlJZDogYnlJZCxcbiAgICBtYXRjaDogbWF0Y2gsXG4gICAgZmlyc3Q6IGZpcnN0LFxuICAgIHNlbGVjdDogc2VsZWN0LFxuICAgIGNvbXBpbGU6IGNvbXBpbGUsXG4gICAgY29udGFpbnM6IGNvbnRhaW5zLFxuICAgIGNvbmZpZ3VyZTogY29uZmlndXJlLFxuICAgIGdldEF0dHJpYnV0ZTogZ2V0QXR0cmlidXRlLFxuICAgIGhhc0F0dHJpYnV0ZTogaGFzQXR0cmlidXRlLFxuXG4gICAgc2V0Q2FjaGU6IEZOLFxuICAgIHNob3J0Y3V0czogRk4sXG4gICAgbG9hZFJlc3VsdHM6IEZOLFxuICAgIHNhdmVSZXN1bHRzOiBGTixcblxuICAgIGVtaXQ6IGVtaXQsXG4gICAgQ29uZmlnOiBDb25maWcsXG4gICAgU25hcHNob3Q6IFNuYXBzaG90LFxuXG4gICAgT3BlcmF0b3JzOiBPcGVyYXRvcnMsXG4gICAgU2VsZWN0b3JzOiBTZWxlY3RvcnMsXG5cbiAgICBUb2tlbnM6IFRva2VucyxcbiAgICBWZXJzaW9uOiB2ZXJzaW9uLFxuXG4gICAgcmVnaXN0ZXJPcGVyYXRvcjpcbiAgICAgIGZ1bmN0aW9uKHN5bWJvbCwgcmVzb2x2ZXIpIHtcbiAgICAgICAgT3BlcmF0b3JzW3N5bWJvbF0gfHwgKE9wZXJhdG9yc1tzeW1ib2xdID0gcmVzb2x2ZXIpO1xuICAgICAgfSxcblxuICAgIHJlZ2lzdGVyU2VsZWN0b3I6XG4gICAgICBmdW5jdGlvbihuYW1lLCByZXhwLCBmdW5jKSB7XG4gICAgICAgIFNlbGVjdG9yc1tuYW1lXSB8fCAoU2VsZWN0b3JzW25hbWVdID0ge1xuICAgICAgICAgIEV4cHJlc3Npb246IHJleHAsXG4gICAgICAgICAgQ2FsbGJhY2s6IGZ1bmNcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgfTtcblxuICBpbml0aWFsaXplKGRvYyk7XG5cbiAgcmV0dXJuIERvbTtcbn0pO1xuIiwidmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gICwgcXMgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG4gIDtcblxuZnVuY3Rpb24gc2hhMSAoa2V5LCBib2R5KSB7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIGtleSkudXBkYXRlKGJvZHkpLmRpZ2VzdCgnYmFzZTY0Jylcbn1cblxuZnVuY3Rpb24gcnNhIChrZXksIGJvZHkpIHtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVTaWduKFwiUlNBLVNIQTFcIikudXBkYXRlKGJvZHkpLnNpZ24oa2V5LCAnYmFzZTY0Jyk7XG59XG5cbmZ1bmN0aW9uIHJmYzM5ODYgKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cilcbiAgICAucmVwbGFjZSgvIS9nLCclMjEnKVxuICAgIC5yZXBsYWNlKC9cXCovZywnJTJBJylcbiAgICAucmVwbGFjZSgvXFwoL2csJyUyOCcpXG4gICAgLnJlcGxhY2UoL1xcKS9nLCclMjknKVxuICAgIC5yZXBsYWNlKC8nL2csJyUyNycpXG4gICAgO1xufVxuXG4vLyBNYXBzIG9iamVjdCB0byBiaS1kaW1lbnNpb25hbCBhcnJheVxuLy8gQ29udmVydHMgeyBmb286ICdBJywgYmFyOiBbICdiJywgJ0InIF19IHRvXG4vLyBbIFsnZm9vJywgJ0EnXSwgWydiYXInLCAnYiddLCBbJ2JhcicsICdCJ10gXVxuZnVuY3Rpb24gbWFwIChvYmopIHtcbiAgdmFyIGtleSwgdmFsLCBhcnIgPSBbXVxuICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICB2YWwgPSBvYmpba2V5XVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKylcbiAgICAgICAgYXJyLnB1c2goW2tleSwgdmFsW2ldXSlcbiAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiKVxuICAgICAgZm9yICh2YXIgcHJvcCBpbiB2YWwpXG4gICAgICAgIGFyci5wdXNoKFtrZXkgKyAnWycgKyBwcm9wICsgJ10nLCB2YWxbcHJvcF1dKTtcbiAgICBlbHNlXG4gICAgICBhcnIucHVzaChba2V5LCB2YWxdKVxuICB9XG4gIHJldHVybiBhcnJcbn1cblxuLy8gQ29tcGFyZSBmdW5jdGlvbiBmb3Igc29ydFxuZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICByZXR1cm4gYSA+IGIgPyAxIDogYSA8IGIgPyAtMSA6IDBcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVCYXNlIChodHRwTWV0aG9kLCBiYXNlX3VyaSwgcGFyYW1zKSB7XG4gIC8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2Rldi50d2l0dGVyLmNvbS9kb2NzL2F1dGgvb2F1dGggYW5kIFxuICAvLyBodHRwczovL2Rldi50d2l0dGVyLmNvbS9kb2NzL2F1dGgvY3JlYXRpbmctc2lnbmF0dXJlXG5cbiAgLy8gUGFyYW1ldGVyIG5vcm1hbGl6YXRpb25cbiAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTg0OSNzZWN0aW9uLTMuNC4xLjMuMlxuICB2YXIgbm9ybWFsaXplZCA9IG1hcChwYXJhbXMpXG4gIC8vIDEuICBGaXJzdCwgdGhlIG5hbWUgYW5kIHZhbHVlIG9mIGVhY2ggcGFyYW1ldGVyIGFyZSBlbmNvZGVkXG4gIC5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gWyByZmMzOTg2KHBbMF0pLCByZmMzOTg2KHBbMV0gfHwgJycpIF1cbiAgfSlcbiAgLy8gMi4gIFRoZSBwYXJhbWV0ZXJzIGFyZSBzb3J0ZWQgYnkgbmFtZSwgdXNpbmcgYXNjZW5kaW5nIGJ5dGUgdmFsdWVcbiAgLy8gICAgIG9yZGVyaW5nLiAgSWYgdHdvIG9yIG1vcmUgcGFyYW1ldGVycyBzaGFyZSB0aGUgc2FtZSBuYW1lLCB0aGV5XG4gIC8vICAgICBhcmUgc29ydGVkIGJ5IHRoZWlyIHZhbHVlLlxuICAuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBjb21wYXJlKGFbMF0sIGJbMF0pIHx8IGNvbXBhcmUoYVsxXSwgYlsxXSlcbiAgfSlcbiAgLy8gMy4gIFRoZSBuYW1lIG9mIGVhY2ggcGFyYW1ldGVyIGlzIGNvbmNhdGVuYXRlZCB0byBpdHMgY29ycmVzcG9uZGluZ1xuICAvLyAgICAgdmFsdWUgdXNpbmcgYW4gXCI9XCIgY2hhcmFjdGVyIChBU0NJSSBjb2RlIDYxKSBhcyBhIHNlcGFyYXRvciwgZXZlblxuICAvLyAgICAgaWYgdGhlIHZhbHVlIGlzIGVtcHR5LlxuICAubWFwKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLmpvaW4oJz0nKSB9KVxuICAgLy8gNC4gIFRoZSBzb3J0ZWQgbmFtZS92YWx1ZSBwYWlycyBhcmUgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIGludG8gYVxuICAgLy8gICAgIHNpbmdsZSBzdHJpbmcgYnkgdXNpbmcgYW4gXCImXCIgY2hhcmFjdGVyIChBU0NJSSBjb2RlIDM4KSBhc1xuICAgLy8gICAgIHNlcGFyYXRvci5cbiAgLmpvaW4oJyYnKVxuXG4gIHZhciBiYXNlID0gW1xuICAgIHJmYzM5ODYoaHR0cE1ldGhvZCA/IGh0dHBNZXRob2QudG9VcHBlckNhc2UoKSA6ICdHRVQnKSxcbiAgICByZmMzOTg2KGJhc2VfdXJpKSxcbiAgICByZmMzOTg2KG5vcm1hbGl6ZWQpXG4gIF0uam9pbignJicpXG5cbiAgcmV0dXJuIGJhc2Vcbn1cblxuZnVuY3Rpb24gaG1hY3NpZ24gKGh0dHBNZXRob2QsIGJhc2VfdXJpLCBwYXJhbXMsIGNvbnN1bWVyX3NlY3JldCwgdG9rZW5fc2VjcmV0KSB7XG4gIHZhciBiYXNlID0gZ2VuZXJhdGVCYXNlKGh0dHBNZXRob2QsIGJhc2VfdXJpLCBwYXJhbXMpXG4gIHZhciBrZXkgPSBbXG4gICAgY29uc3VtZXJfc2VjcmV0IHx8ICcnLFxuICAgIHRva2VuX3NlY3JldCB8fCAnJ1xuICBdLm1hcChyZmMzOTg2KS5qb2luKCcmJylcblxuICByZXR1cm4gc2hhMShrZXksIGJhc2UpXG59XG5cbmZ1bmN0aW9uIHJzYXNpZ24gKGh0dHBNZXRob2QsIGJhc2VfdXJpLCBwYXJhbXMsIHByaXZhdGVfa2V5LCB0b2tlbl9zZWNyZXQpIHtcbiAgdmFyIGJhc2UgPSBnZW5lcmF0ZUJhc2UoaHR0cE1ldGhvZCwgYmFzZV91cmksIHBhcmFtcylcbiAgdmFyIGtleSA9IHByaXZhdGVfa2V5IHx8ICcnXG5cbiAgcmV0dXJuIHJzYShrZXksIGJhc2UpXG59XG5cbmZ1bmN0aW9uIHBsYWludGV4dCAoY29uc3VtZXJfc2VjcmV0LCB0b2tlbl9zZWNyZXQpIHtcbiAgdmFyIGtleSA9IFtcbiAgICBjb25zdW1lcl9zZWNyZXQgfHwgJycsXG4gICAgdG9rZW5fc2VjcmV0IHx8ICcnXG4gIF0ubWFwKHJmYzM5ODYpLmpvaW4oJyYnKVxuXG4gIHJldHVybiBrZXlcbn1cblxuZnVuY3Rpb24gc2lnbiAoc2lnbk1ldGhvZCwgaHR0cE1ldGhvZCwgYmFzZV91cmksIHBhcmFtcywgY29uc3VtZXJfc2VjcmV0LCB0b2tlbl9zZWNyZXQpIHtcbiAgdmFyIG1ldGhvZFxuICB2YXIgc2tpcEFyZ3MgPSAxXG5cbiAgc3dpdGNoIChzaWduTWV0aG9kKSB7XG4gICAgY2FzZSAnUlNBLVNIQTEnOlxuICAgICAgbWV0aG9kID0gcnNhc2lnblxuICAgICAgYnJlYWtcbiAgICBjYXNlICdITUFDLVNIQTEnOlxuICAgICAgbWV0aG9kID0gaG1hY3NpZ25cbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnUExBSU5URVhUJzpcbiAgICAgIG1ldGhvZCA9IHBsYWludGV4dFxuICAgICAgc2tpcEFyZ3MgPSA0XG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgIHRocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBtZXRob2Qgbm90IHN1cHBvcnRlZDogXCIgKyBzaWduTWV0aG9kKVxuICB9XG5cbiAgcmV0dXJuIG1ldGhvZC5hcHBseShudWxsLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgc2tpcEFyZ3MpKVxufVxuXG5leHBvcnRzLmhtYWNzaWduID0gaG1hY3NpZ25cbmV4cG9ydHMucnNhc2lnbiA9IHJzYXNpZ25cbmV4cG9ydHMucGxhaW50ZXh0ID0gcGxhaW50ZXh0XG5leHBvcnRzLnNpZ24gPSBzaWduXG5leHBvcnRzLnJmYzM5ODYgPSByZmMzOTg2XG5leHBvcnRzLmdlbmVyYXRlQmFzZSA9IGdlbmVyYXRlQmFzZVxuXG4iLCJleHBvcnRzLmVuZGlhbm5lc3MgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnTEUnIH07XG5cbmV4cG9ydHMuaG9zdG5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhvc3RuYW1lXG4gICAgfVxuICAgIGVsc2UgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0cy5sb2FkYXZnID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gW10gfTtcblxuZXhwb3J0cy51cHRpbWUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAwIH07XG5cbmV4cG9ydHMuZnJlZW1lbSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gTnVtYmVyLk1BWF9WQUxVRTtcbn07XG5cbmV4cG9ydHMudG90YWxtZW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE51bWJlci5NQVhfVkFMVUU7XG59O1xuXG5leHBvcnRzLmNwdXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXSB9O1xuXG5leHBvcnRzLnR5cGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnQnJvd3NlcicgfTtcblxuZXhwb3J0cy5yZWxlYXNlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLmFwcFZlcnNpb247XG4gICAgfVxuICAgIHJldHVybiAnJztcbn07XG5cbmV4cG9ydHMubmV0d29ya0ludGVyZmFjZXNcbj0gZXhwb3J0cy5nZXROZXR3b3JrSW50ZXJmYWNlc1xuPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7fSB9O1xuXG5leHBvcnRzLmFyY2ggPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnamF2YXNjcmlwdCcgfTtcblxuZXhwb3J0cy5wbGF0Zm9ybSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdicm93c2VyJyB9O1xuXG5leHBvcnRzLnRtcGRpciA9IGV4cG9ydHMudG1wRGlyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnL3RtcCc7XG59O1xuXG5leHBvcnRzLkVPTCA9ICdcXG4nO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciBUWVBFRF9PSyA9ICAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgVWludDE2QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpO1xuXG5cbmV4cG9ydHMuYXNzaWduID0gZnVuY3Rpb24gKG9iaiAvKmZyb20xLCBmcm9tMiwgZnJvbTMsIC4uLiovKSB7XG4gIHZhciBzb3VyY2VzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoKSB7XG4gICAgdmFyIHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKTtcbiAgICBpZiAoIXNvdXJjZSkgeyBjb250aW51ZTsgfVxuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNvdXJjZSArICdtdXN0IGJlIG5vbi1vYmplY3QnKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBwIGluIHNvdXJjZSkge1xuICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwKSkge1xuICAgICAgICBvYmpbcF0gPSBzb3VyY2VbcF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cblxuLy8gcmVkdWNlIGJ1ZmZlciBzaXplLCBhdm9pZGluZyBtZW0gY29weVxuZXhwb3J0cy5zaHJpbmtCdWYgPSBmdW5jdGlvbiAoYnVmLCBzaXplKSB7XG4gIGlmIChidWYubGVuZ3RoID09PSBzaXplKSB7IHJldHVybiBidWY7IH1cbiAgaWYgKGJ1Zi5zdWJhcnJheSkgeyByZXR1cm4gYnVmLnN1YmFycmF5KDAsIHNpemUpOyB9XG4gIGJ1Zi5sZW5ndGggPSBzaXplO1xuICByZXR1cm4gYnVmO1xufTtcblxuXG52YXIgZm5UeXBlZCA9IHtcbiAgYXJyYXlTZXQ6IGZ1bmN0aW9uIChkZXN0LCBzcmMsIHNyY19vZmZzLCBsZW4sIGRlc3Rfb2Zmcykge1xuICAgIGlmIChzcmMuc3ViYXJyYXkgJiYgZGVzdC5zdWJhcnJheSkge1xuICAgICAgZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY19vZmZzLCBzcmNfb2ZmcyArIGxlbiksIGRlc3Rfb2Zmcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrIHRvIG9yZGluYXJ5IGFycmF5XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgZGVzdFtkZXN0X29mZnMgKyBpXSA9IHNyY1tzcmNfb2ZmcyArIGldO1xuICAgIH1cbiAgfSxcbiAgLy8gSm9pbiBhcnJheSBvZiBjaHVua3MgdG8gc2luZ2xlIGFycmF5LlxuICBmbGF0dGVuQ2h1bmtzOiBmdW5jdGlvbiAoY2h1bmtzKSB7XG4gICAgdmFyIGksIGwsIGxlbiwgcG9zLCBjaHVuaywgcmVzdWx0O1xuXG4gICAgLy8gY2FsY3VsYXRlIGRhdGEgbGVuZ3RoXG4gICAgbGVuID0gMDtcbiAgICBmb3IgKGkgPSAwLCBsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgbGVuICs9IGNodW5rc1tpXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gam9pbiBjaHVua3NcbiAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIHBvcyA9IDA7XG4gICAgZm9yIChpID0gMCwgbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNodW5rID0gY2h1bmtzW2ldO1xuICAgICAgcmVzdWx0LnNldChjaHVuaywgcG9zKTtcbiAgICAgIHBvcyArPSBjaHVuay5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcblxudmFyIGZuVW50eXBlZCA9IHtcbiAgYXJyYXlTZXQ6IGZ1bmN0aW9uIChkZXN0LCBzcmMsIHNyY19vZmZzLCBsZW4sIGRlc3Rfb2Zmcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGRlc3RbZGVzdF9vZmZzICsgaV0gPSBzcmNbc3JjX29mZnMgKyBpXTtcbiAgICB9XG4gIH0sXG4gIC8vIEpvaW4gYXJyYXkgb2YgY2h1bmtzIHRvIHNpbmdsZSBhcnJheS5cbiAgZmxhdHRlbkNodW5rczogZnVuY3Rpb24gKGNodW5rcykge1xuICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkoW10sIGNodW5rcyk7XG4gIH1cbn07XG5cblxuLy8gRW5hYmxlL0Rpc2FibGUgdHlwZWQgYXJyYXlzIHVzZSwgZm9yIHRlc3Rpbmdcbi8vXG5leHBvcnRzLnNldFR5cGVkID0gZnVuY3Rpb24gKG9uKSB7XG4gIGlmIChvbikge1xuICAgIGV4cG9ydHMuQnVmOCAgPSBVaW50OEFycmF5O1xuICAgIGV4cG9ydHMuQnVmMTYgPSBVaW50MTZBcnJheTtcbiAgICBleHBvcnRzLkJ1ZjMyID0gSW50MzJBcnJheTtcbiAgICBleHBvcnRzLmFzc2lnbihleHBvcnRzLCBmblR5cGVkKTtcbiAgfSBlbHNlIHtcbiAgICBleHBvcnRzLkJ1ZjggID0gQXJyYXk7XG4gICAgZXhwb3J0cy5CdWYxNiA9IEFycmF5O1xuICAgIGV4cG9ydHMuQnVmMzIgPSBBcnJheTtcbiAgICBleHBvcnRzLmFzc2lnbihleHBvcnRzLCBmblVudHlwZWQpO1xuICB9XG59O1xuXG5leHBvcnRzLnNldFR5cGVkKFRZUEVEX09LKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gTm90ZTogYWRsZXIzMiB0YWtlcyAxMiUgZm9yIGxldmVsIDAgYW5kIDIlIGZvciBsZXZlbCA2LlxuLy8gSXQgZG9lc24ndCB3b3J0aCB0byBtYWtlIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9uYSBhcyBpbiBvcmlnaW5hbC5cbi8vIFNtYWxsIHNpemUgaXMgcHJlZmVyYWJsZS5cblxuZnVuY3Rpb24gYWRsZXIzMihhZGxlciwgYnVmLCBsZW4sIHBvcykge1xuICB2YXIgczEgPSAoYWRsZXIgJiAweGZmZmYpIHwwLFxuICAgICAgczIgPSAoKGFkbGVyID4+PiAxNikgJiAweGZmZmYpIHwwLFxuICAgICAgbiA9IDA7XG5cbiAgd2hpbGUgKGxlbiAhPT0gMCkge1xuICAgIC8vIFNldCBsaW1pdCB+IHR3aWNlIGxlc3MgdGhhbiA1NTUyLCB0byBrZWVwXG4gICAgLy8gczIgaW4gMzEtYml0cywgYmVjYXVzZSB3ZSBmb3JjZSBzaWduZWQgaW50cy5cbiAgICAvLyBpbiBvdGhlciBjYXNlICU9IHdpbGwgZmFpbC5cbiAgICBuID0gbGVuID4gMjAwMCA/IDIwMDAgOiBsZW47XG4gICAgbGVuIC09IG47XG5cbiAgICBkbyB7XG4gICAgICBzMSA9IChzMSArIGJ1Zltwb3MrK10pIHwwO1xuICAgICAgczIgPSAoczIgKyBzMSkgfDA7XG4gICAgfSB3aGlsZSAoLS1uKTtcblxuICAgIHMxICU9IDY1NTIxO1xuICAgIHMyICU9IDY1NTIxO1xuICB9XG5cbiAgcmV0dXJuIChzMSB8IChzMiA8PCAxNikpIHwwO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gYWRsZXIzMjtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAvKiBBbGxvd2VkIGZsdXNoIHZhbHVlczsgc2VlIGRlZmxhdGUoKSBhbmQgaW5mbGF0ZSgpIGJlbG93IGZvciBkZXRhaWxzICovXG4gIFpfTk9fRkxVU0g6ICAgICAgICAgMCxcbiAgWl9QQVJUSUFMX0ZMVVNIOiAgICAxLFxuICBaX1NZTkNfRkxVU0g6ICAgICAgIDIsXG4gIFpfRlVMTF9GTFVTSDogICAgICAgMyxcbiAgWl9GSU5JU0g6ICAgICAgICAgICA0LFxuICBaX0JMT0NLOiAgICAgICAgICAgIDUsXG4gIFpfVFJFRVM6ICAgICAgICAgICAgNixcblxuICAvKiBSZXR1cm4gY29kZXMgZm9yIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGZ1bmN0aW9ucy4gTmVnYXRpdmUgdmFsdWVzXG4gICogYXJlIGVycm9ycywgcG9zaXRpdmUgdmFsdWVzIGFyZSB1c2VkIGZvciBzcGVjaWFsIGJ1dCBub3JtYWwgZXZlbnRzLlxuICAqL1xuICBaX09LOiAgICAgICAgICAgICAgIDAsXG4gIFpfU1RSRUFNX0VORDogICAgICAgMSxcbiAgWl9ORUVEX0RJQ1Q6ICAgICAgICAyLFxuICBaX0VSUk5POiAgICAgICAgICAgLTEsXG4gIFpfU1RSRUFNX0VSUk9SOiAgICAtMixcbiAgWl9EQVRBX0VSUk9SOiAgICAgIC0zLFxuICAvL1pfTUVNX0VSUk9SOiAgICAgLTQsXG4gIFpfQlVGX0VSUk9SOiAgICAgICAtNSxcbiAgLy9aX1ZFUlNJT05fRVJST1I6IC02LFxuXG4gIC8qIGNvbXByZXNzaW9uIGxldmVscyAqL1xuICBaX05PX0NPTVBSRVNTSU9OOiAgICAgICAgIDAsXG4gIFpfQkVTVF9TUEVFRDogICAgICAgICAgICAgMSxcbiAgWl9CRVNUX0NPTVBSRVNTSU9OOiAgICAgICA5LFxuICBaX0RFRkFVTFRfQ09NUFJFU1NJT046ICAgLTEsXG5cblxuICBaX0ZJTFRFUkVEOiAgICAgICAgICAgICAgIDEsXG4gIFpfSFVGRk1BTl9PTkxZOiAgICAgICAgICAgMixcbiAgWl9STEU6ICAgICAgICAgICAgICAgICAgICAzLFxuICBaX0ZJWEVEOiAgICAgICAgICAgICAgICAgIDQsXG4gIFpfREVGQVVMVF9TVFJBVEVHWTogICAgICAgMCxcblxuICAvKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBmaWVsZCAodGhvdWdoIHNlZSBpbmZsYXRlKCkpICovXG4gIFpfQklOQVJZOiAgICAgICAgICAgICAgICAgMCxcbiAgWl9URVhUOiAgICAgICAgICAgICAgICAgICAxLFxuICAvL1pfQVNDSUk6ICAgICAgICAgICAgICAgIDEsIC8vID0gWl9URVhUIChkZXByZWNhdGVkKVxuICBaX1VOS05PV046ICAgICAgICAgICAgICAgIDIsXG5cbiAgLyogVGhlIGRlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kICovXG4gIFpfREVGTEFURUQ6ICAgICAgICAgICAgICAgOFxuICAvL1pfTlVMTDogICAgICAgICAgICAgICAgIG51bGwgLy8gVXNlIC0xIG9yIG51bGwgaW5saW5lLCBkZXBlbmRpbmcgb24gdmFyIHR5cGVcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIE5vdGU6IHdlIGNhbid0IGdldCBzaWduaWZpY2FudCBzcGVlZCBib29zdCBoZXJlLlxuLy8gU28gd3JpdGUgY29kZSB0byBtaW5pbWl6ZSBzaXplIC0gbm8gcHJlZ2VuZXJhdGVkIHRhYmxlc1xuLy8gYW5kIGFycmF5IHRvb2xzIGRlcGVuZGVuY2llcy5cblxuXG4vLyBVc2Ugb3JkaW5hcnkgYXJyYXksIHNpbmNlIHVudHlwZWQgbWFrZXMgbm8gYm9vc3QgaGVyZVxuZnVuY3Rpb24gbWFrZVRhYmxlKCkge1xuICB2YXIgYywgdGFibGUgPSBbXTtcblxuICBmb3IgKHZhciBuID0gMDsgbiA8IDI1NjsgbisrKSB7XG4gICAgYyA9IG47XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCA4OyBrKyspIHtcbiAgICAgIGMgPSAoKGMgJiAxKSA/ICgweEVEQjg4MzIwIF4gKGMgPj4+IDEpKSA6IChjID4+PiAxKSk7XG4gICAgfVxuICAgIHRhYmxlW25dID0gYztcbiAgfVxuXG4gIHJldHVybiB0YWJsZTtcbn1cblxuLy8gQ3JlYXRlIHRhYmxlIG9uIGxvYWQuIEp1c3QgMjU1IHNpZ25lZCBsb25ncy4gTm90IGEgcHJvYmxlbS5cbnZhciBjcmNUYWJsZSA9IG1ha2VUYWJsZSgpO1xuXG5cbmZ1bmN0aW9uIGNyYzMyKGNyYywgYnVmLCBsZW4sIHBvcykge1xuICB2YXIgdCA9IGNyY1RhYmxlLFxuICAgICAgZW5kID0gcG9zICsgbGVuO1xuXG4gIGNyYyBePSAtMTtcblxuICBmb3IgKHZhciBpID0gcG9zOyBpIDwgZW5kOyBpKyspIHtcbiAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRbKGNyYyBeIGJ1ZltpXSkgJiAweEZGXTtcbiAgfVxuXG4gIHJldHVybiAoY3JjIF4gKC0xKSk7IC8vID4+PiAwO1xufVxuXG5cbm1vZHVsZS5leHBvcnRzID0gY3JjMzI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyAgID0gcmVxdWlyZSgnLi4vdXRpbHMvY29tbW9uJyk7XG52YXIgdHJlZXMgICA9IHJlcXVpcmUoJy4vdHJlZXMnKTtcbnZhciBhZGxlcjMyID0gcmVxdWlyZSgnLi9hZGxlcjMyJyk7XG52YXIgY3JjMzIgICA9IHJlcXVpcmUoJy4vY3JjMzInKTtcbnZhciBtc2cgICAgID0gcmVxdWlyZSgnLi9tZXNzYWdlcycpO1xuXG4vKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG4vKiBBbGxvd2VkIGZsdXNoIHZhbHVlczsgc2VlIGRlZmxhdGUoKSBhbmQgaW5mbGF0ZSgpIGJlbG93IGZvciBkZXRhaWxzICovXG52YXIgWl9OT19GTFVTSCAgICAgID0gMDtcbnZhciBaX1BBUlRJQUxfRkxVU0ggPSAxO1xuLy92YXIgWl9TWU5DX0ZMVVNIICAgID0gMjtcbnZhciBaX0ZVTExfRkxVU0ggICAgPSAzO1xudmFyIFpfRklOSVNIICAgICAgICA9IDQ7XG52YXIgWl9CTE9DSyAgICAgICAgID0gNTtcbi8vdmFyIFpfVFJFRVMgICAgICAgICA9IDY7XG5cblxuLyogUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlIHZhbHVlc1xuICogYXJlIGVycm9ycywgcG9zaXRpdmUgdmFsdWVzIGFyZSB1c2VkIGZvciBzcGVjaWFsIGJ1dCBub3JtYWwgZXZlbnRzLlxuICovXG52YXIgWl9PSyAgICAgICAgICAgID0gMDtcbnZhciBaX1NUUkVBTV9FTkQgICAgPSAxO1xuLy92YXIgWl9ORUVEX0RJQ1QgICAgID0gMjtcbi8vdmFyIFpfRVJSTk8gICAgICAgICA9IC0xO1xudmFyIFpfU1RSRUFNX0VSUk9SICA9IC0yO1xudmFyIFpfREFUQV9FUlJPUiAgICA9IC0zO1xuLy92YXIgWl9NRU1fRVJST1IgICAgID0gLTQ7XG52YXIgWl9CVUZfRVJST1IgICAgID0gLTU7XG4vL3ZhciBaX1ZFUlNJT05fRVJST1IgPSAtNjtcblxuXG4vKiBjb21wcmVzc2lvbiBsZXZlbHMgKi9cbi8vdmFyIFpfTk9fQ09NUFJFU1NJT04gICAgICA9IDA7XG4vL3ZhciBaX0JFU1RfU1BFRUQgICAgICAgICAgPSAxO1xuLy92YXIgWl9CRVNUX0NPTVBSRVNTSU9OICAgID0gOTtcbnZhciBaX0RFRkFVTFRfQ09NUFJFU1NJT04gPSAtMTtcblxuXG52YXIgWl9GSUxURVJFRCAgICAgICAgICAgID0gMTtcbnZhciBaX0hVRkZNQU5fT05MWSAgICAgICAgPSAyO1xudmFyIFpfUkxFICAgICAgICAgICAgICAgICA9IDM7XG52YXIgWl9GSVhFRCAgICAgICAgICAgICAgID0gNDtcbnZhciBaX0RFRkFVTFRfU1RSQVRFR1kgICAgPSAwO1xuXG4vKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBmaWVsZCAodGhvdWdoIHNlZSBpbmZsYXRlKCkpICovXG4vL3ZhciBaX0JJTkFSWSAgICAgICAgICAgICAgPSAwO1xuLy92YXIgWl9URVhUICAgICAgICAgICAgICAgID0gMTtcbi8vdmFyIFpfQVNDSUkgICAgICAgICAgICAgICA9IDE7IC8vID0gWl9URVhUXG52YXIgWl9VTktOT1dOICAgICAgICAgICAgID0gMjtcblxuXG4vKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKi9cbnZhciBaX0RFRkxBVEVEICA9IDg7XG5cbi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cblxudmFyIE1BWF9NRU1fTEVWRUwgPSA5O1xuLyogTWF4aW11bSB2YWx1ZSBmb3IgbWVtTGV2ZWwgaW4gZGVmbGF0ZUluaXQyICovXG52YXIgTUFYX1dCSVRTID0gMTU7XG4vKiAzMksgTFo3NyB3aW5kb3cgKi9cbnZhciBERUZfTUVNX0xFVkVMID0gODtcblxuXG52YXIgTEVOR1RIX0NPREVTICA9IDI5O1xuLyogbnVtYmVyIG9mIGxlbmd0aCBjb2Rlcywgbm90IGNvdW50aW5nIHRoZSBzcGVjaWFsIEVORF9CTE9DSyBjb2RlICovXG52YXIgTElURVJBTFMgICAgICA9IDI1Njtcbi8qIG51bWJlciBvZiBsaXRlcmFsIGJ5dGVzIDAuLjI1NSAqL1xudmFyIExfQ09ERVMgICAgICAgPSBMSVRFUkFMUyArIDEgKyBMRU5HVEhfQ09ERVM7XG4vKiBudW1iZXIgb2YgTGl0ZXJhbCBvciBMZW5ndGggY29kZXMsIGluY2x1ZGluZyB0aGUgRU5EX0JMT0NLIGNvZGUgKi9cbnZhciBEX0NPREVTICAgICAgID0gMzA7XG4vKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMgKi9cbnZhciBCTF9DT0RFUyAgICAgID0gMTk7XG4vKiBudW1iZXIgb2YgY29kZXMgdXNlZCB0byB0cmFuc2ZlciB0aGUgYml0IGxlbmd0aHMgKi9cbnZhciBIRUFQX1NJWkUgICAgID0gMiAqIExfQ09ERVMgKyAxO1xuLyogbWF4aW11bSBoZWFwIHNpemUgKi9cbnZhciBNQVhfQklUUyAgPSAxNTtcbi8qIEFsbCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JJVFMgYml0cyAqL1xuXG52YXIgTUlOX01BVENIID0gMztcbnZhciBNQVhfTUFUQ0ggPSAyNTg7XG52YXIgTUlOX0xPT0tBSEVBRCA9IChNQVhfTUFUQ0ggKyBNSU5fTUFUQ0ggKyAxKTtcblxudmFyIFBSRVNFVF9ESUNUID0gMHgyMDtcblxudmFyIElOSVRfU1RBVEUgPSA0MjtcbnZhciBFWFRSQV9TVEFURSA9IDY5O1xudmFyIE5BTUVfU1RBVEUgPSA3MztcbnZhciBDT01NRU5UX1NUQVRFID0gOTE7XG52YXIgSENSQ19TVEFURSA9IDEwMztcbnZhciBCVVNZX1NUQVRFID0gMTEzO1xudmFyIEZJTklTSF9TVEFURSA9IDY2NjtcblxudmFyIEJTX05FRURfTU9SRSAgICAgID0gMTsgLyogYmxvY2sgbm90IGNvbXBsZXRlZCwgbmVlZCBtb3JlIGlucHV0IG9yIG1vcmUgb3V0cHV0ICovXG52YXIgQlNfQkxPQ0tfRE9ORSAgICAgPSAyOyAvKiBibG9jayBmbHVzaCBwZXJmb3JtZWQgKi9cbnZhciBCU19GSU5JU0hfU1RBUlRFRCA9IDM7IC8qIGZpbmlzaCBzdGFydGVkLCBuZWVkIG9ubHkgbW9yZSBvdXRwdXQgYXQgbmV4dCBkZWZsYXRlICovXG52YXIgQlNfRklOSVNIX0RPTkUgICAgPSA0OyAvKiBmaW5pc2ggZG9uZSwgYWNjZXB0IG5vIG1vcmUgaW5wdXQgb3Igb3V0cHV0ICovXG5cbnZhciBPU19DT0RFID0gMHgwMzsgLy8gVW5peCA6KSAuIERvbid0IGRldGVjdCwgdXNlIHRoaXMgZGVmYXVsdC5cblxuZnVuY3Rpb24gZXJyKHN0cm0sIGVycm9yQ29kZSkge1xuICBzdHJtLm1zZyA9IG1zZ1tlcnJvckNvZGVdO1xuICByZXR1cm4gZXJyb3JDb2RlO1xufVxuXG5mdW5jdGlvbiByYW5rKGYpIHtcbiAgcmV0dXJuICgoZikgPDwgMSkgLSAoKGYpID4gNCA/IDkgOiAwKTtcbn1cblxuZnVuY3Rpb24gemVybyhidWYpIHsgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7IHdoaWxlICgtLWxlbiA+PSAwKSB7IGJ1ZltsZW5dID0gMDsgfSB9XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZS4gQWxsIGRlZmxhdGUoKSBvdXRwdXQgZ29lc1xuICogdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHNvIHNvbWUgYXBwbGljYXRpb25zIG1heSB3aXNoIHRvIG1vZGlmeSBpdFxuICogdG8gYXZvaWQgYWxsb2NhdGluZyBhIGxhcmdlIHN0cm0tPm91dHB1dCBidWZmZXIgYW5kIGNvcHlpbmcgaW50byBpdC5cbiAqIChTZWUgYWxzbyByZWFkX2J1ZigpKS5cbiAqL1xuZnVuY3Rpb24gZmx1c2hfcGVuZGluZyhzdHJtKSB7XG4gIHZhciBzID0gc3RybS5zdGF0ZTtcblxuICAvL190cl9mbHVzaF9iaXRzKHMpO1xuICB2YXIgbGVuID0gcy5wZW5kaW5nO1xuICBpZiAobGVuID4gc3RybS5hdmFpbF9vdXQpIHtcbiAgICBsZW4gPSBzdHJtLmF2YWlsX291dDtcbiAgfVxuICBpZiAobGVuID09PSAwKSB7IHJldHVybjsgfVxuXG4gIHV0aWxzLmFycmF5U2V0KHN0cm0ub3V0cHV0LCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmdfb3V0LCBsZW4sIHN0cm0ubmV4dF9vdXQpO1xuICBzdHJtLm5leHRfb3V0ICs9IGxlbjtcbiAgcy5wZW5kaW5nX291dCArPSBsZW47XG4gIHN0cm0udG90YWxfb3V0ICs9IGxlbjtcbiAgc3RybS5hdmFpbF9vdXQgLT0gbGVuO1xuICBzLnBlbmRpbmcgLT0gbGVuO1xuICBpZiAocy5wZW5kaW5nID09PSAwKSB7XG4gICAgcy5wZW5kaW5nX291dCA9IDA7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBmbHVzaF9ibG9ja19vbmx5KHMsIGxhc3QpIHtcbiAgdHJlZXMuX3RyX2ZsdXNoX2Jsb2NrKHMsIChzLmJsb2NrX3N0YXJ0ID49IDAgPyBzLmJsb2NrX3N0YXJ0IDogLTEpLCBzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydCwgbGFzdCk7XG4gIHMuYmxvY2tfc3RhcnQgPSBzLnN0cnN0YXJ0O1xuICBmbHVzaF9wZW5kaW5nKHMuc3RybSk7XG59XG5cblxuZnVuY3Rpb24gcHV0X2J5dGUocywgYikge1xuICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IGI7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogUHV0IGEgc2hvcnQgaW4gdGhlIHBlbmRpbmcgYnVmZmVyLiBUaGUgMTYtYml0IHZhbHVlIGlzIHB1dCBpbiBNU0Igb3JkZXIuXG4gKiBJTiBhc3NlcnRpb246IHRoZSBzdHJlYW0gc3RhdGUgaXMgY29ycmVjdCBhbmQgdGhlcmUgaXMgZW5vdWdoIHJvb20gaW5cbiAqIHBlbmRpbmdfYnVmLlxuICovXG5mdW5jdGlvbiBwdXRTaG9ydE1TQihzLCBiKSB7XG4vLyAgcHV0X2J5dGUocywgKEJ5dGUpKGIgPj4gOCkpO1xuLy8gIHB1dF9ieXRlKHMsIChCeXRlKShiICYgMHhmZikpO1xuICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IChiID4+PiA4KSAmIDB4ZmY7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYiAmIDB4ZmY7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBSZWFkIGEgbmV3IGJ1ZmZlciBmcm9tIHRoZSBjdXJyZW50IGlucHV0IHN0cmVhbSwgdXBkYXRlIHRoZSBhZGxlcjMyXG4gKiBhbmQgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuICBBbGwgZGVmbGF0ZSgpIGlucHV0IGdvZXMgdGhyb3VnaFxuICogdGhpcyBmdW5jdGlvbiBzbyBzb21lIGFwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBtb2RpZnkgaXQgdG8gYXZvaWRcbiAqIGFsbG9jYXRpbmcgYSBsYXJnZSBzdHJtLT5pbnB1dCBidWZmZXIgYW5kIGNvcHlpbmcgZnJvbSBpdC5cbiAqIChTZWUgYWxzbyBmbHVzaF9wZW5kaW5nKCkpLlxuICovXG5mdW5jdGlvbiByZWFkX2J1ZihzdHJtLCBidWYsIHN0YXJ0LCBzaXplKSB7XG4gIHZhciBsZW4gPSBzdHJtLmF2YWlsX2luO1xuXG4gIGlmIChsZW4gPiBzaXplKSB7IGxlbiA9IHNpemU7IH1cbiAgaWYgKGxlbiA9PT0gMCkgeyByZXR1cm4gMDsgfVxuXG4gIHN0cm0uYXZhaWxfaW4gLT0gbGVuO1xuXG4gIC8vIHptZW1jcHkoYnVmLCBzdHJtLT5uZXh0X2luLCBsZW4pO1xuICB1dGlscy5hcnJheVNldChidWYsIHN0cm0uaW5wdXQsIHN0cm0ubmV4dF9pbiwgbGVuLCBzdGFydCk7XG4gIGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDEpIHtcbiAgICBzdHJtLmFkbGVyID0gYWRsZXIzMihzdHJtLmFkbGVyLCBidWYsIGxlbiwgc3RhcnQpO1xuICB9XG5cbiAgZWxzZSBpZiAoc3RybS5zdGF0ZS53cmFwID09PSAyKSB7XG4gICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7XG4gIH1cblxuICBzdHJtLm5leHRfaW4gKz0gbGVuO1xuICBzdHJtLnRvdGFsX2luICs9IGxlbjtcblxuICByZXR1cm4gbGVuO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2V0IG1hdGNoX3N0YXJ0IHRvIHRoZSBsb25nZXN0IG1hdGNoIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBzdHJpbmcgYW5kXG4gKiByZXR1cm4gaXRzIGxlbmd0aC4gTWF0Y2hlcyBzaG9ydGVyIG9yIGVxdWFsIHRvIHByZXZfbGVuZ3RoIGFyZSBkaXNjYXJkZWQsXG4gKiBpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgZXF1YWwgdG8gcHJldl9sZW5ndGggYW5kIG1hdGNoX3N0YXJ0IGlzXG4gKiBnYXJiYWdlLlxuICogSU4gYXNzZXJ0aW9uczogY3VyX21hdGNoIGlzIHRoZSBoZWFkIG9mIHRoZSBoYXNoIGNoYWluIGZvciB0aGUgY3VycmVudFxuICogICBzdHJpbmcgKHN0cnN0YXJ0KSBhbmQgaXRzIGRpc3RhbmNlIGlzIDw9IE1BWF9ESVNULCBhbmQgcHJldl9sZW5ndGggPj0gMVxuICogT1VUIGFzc2VydGlvbjogdGhlIG1hdGNoIGxlbmd0aCBpcyBub3QgZ3JlYXRlciB0aGFuIHMtPmxvb2thaGVhZC5cbiAqL1xuZnVuY3Rpb24gbG9uZ2VzdF9tYXRjaChzLCBjdXJfbWF0Y2gpIHtcbiAgdmFyIGNoYWluX2xlbmd0aCA9IHMubWF4X2NoYWluX2xlbmd0aDsgICAgICAvKiBtYXggaGFzaCBjaGFpbiBsZW5ndGggKi9cbiAgdmFyIHNjYW4gPSBzLnN0cnN0YXJ0OyAvKiBjdXJyZW50IHN0cmluZyAqL1xuICB2YXIgbWF0Y2g7ICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaGVkIHN0cmluZyAqL1xuICB2YXIgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IG1hdGNoICovXG4gIHZhciBiZXN0X2xlbiA9IHMucHJldl9sZW5ndGg7ICAgICAgICAgICAgICAvKiBiZXN0IG1hdGNoIGxlbmd0aCBzbyBmYXIgKi9cbiAgdmFyIG5pY2VfbWF0Y2ggPSBzLm5pY2VfbWF0Y2g7ICAgICAgICAgICAgIC8qIHN0b3AgaWYgbWF0Y2ggbG9uZyBlbm91Z2ggKi9cbiAgdmFyIGxpbWl0ID0gKHMuc3Ryc3RhcnQgPiAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkgP1xuICAgICAgcy5zdHJzdGFydCAtIChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIDogMC8qTklMKi87XG5cbiAgdmFyIF93aW4gPSBzLndpbmRvdzsgLy8gc2hvcnRjdXRcblxuICB2YXIgd21hc2sgPSBzLndfbWFzaztcbiAgdmFyIHByZXYgID0gcy5wcmV2O1xuXG4gIC8qIFN0b3Agd2hlbiBjdXJfbWF0Y2ggYmVjb21lcyA8PSBsaW1pdC4gVG8gc2ltcGxpZnkgdGhlIGNvZGUsXG4gICAqIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmcgb2Ygd2luZG93IGluZGV4IDAuXG4gICAqL1xuXG4gIHZhciBzdHJlbmQgPSBzLnN0cnN0YXJ0ICsgTUFYX01BVENIO1xuICB2YXIgc2Nhbl9lbmQxICA9IF93aW5bc2NhbiArIGJlc3RfbGVuIC0gMV07XG4gIHZhciBzY2FuX2VuZCAgID0gX3dpbltzY2FuICsgYmVzdF9sZW5dO1xuXG4gIC8qIFRoZSBjb2RlIGlzIG9wdGltaXplZCBmb3IgSEFTSF9CSVRTID49IDggYW5kIE1BWF9NQVRDSC0yIG11bHRpcGxlIG9mIDE2LlxuICAgKiBJdCBpcyBlYXN5IHRvIGdldCByaWQgb2YgdGhpcyBvcHRpbWl6YXRpb24gaWYgbmVjZXNzYXJ5LlxuICAgKi9cbiAgLy8gQXNzZXJ0KHMtPmhhc2hfYml0cyA+PSA4ICYmIE1BWF9NQVRDSCA9PSAyNTgsIFwiQ29kZSB0b28gY2xldmVyXCIpO1xuXG4gIC8qIERvIG5vdCB3YXN0ZSB0b28gbXVjaCB0aW1lIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGdvb2QgbWF0Y2g6ICovXG4gIGlmIChzLnByZXZfbGVuZ3RoID49IHMuZ29vZF9tYXRjaCkge1xuICAgIGNoYWluX2xlbmd0aCA+Pj0gMjtcbiAgfVxuICAvKiBEbyBub3QgbG9vayBmb3IgbWF0Y2hlcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuIFRoaXMgaXMgbmVjZXNzYXJ5XG4gICAqIHRvIG1ha2UgZGVmbGF0ZSBkZXRlcm1pbmlzdGljLlxuICAgKi9cbiAgaWYgKG5pY2VfbWF0Y2ggPiBzLmxvb2thaGVhZCkgeyBuaWNlX21hdGNoID0gcy5sb29rYWhlYWQ7IH1cblxuICAvLyBBc3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3dfc2l6ZS1NSU5fTE9PS0FIRUFELCBcIm5lZWQgbG9va2FoZWFkXCIpO1xuXG4gIGRvIHtcbiAgICAvLyBBc3NlcnQoY3VyX21hdGNoIDwgcy0+c3Ryc3RhcnQsIFwibm8gZnV0dXJlXCIpO1xuICAgIG1hdGNoID0gY3VyX21hdGNoO1xuXG4gICAgLyogU2tpcCB0byBuZXh0IG1hdGNoIGlmIHRoZSBtYXRjaCBsZW5ndGggY2Fubm90IGluY3JlYXNlXG4gICAgICogb3IgaWYgdGhlIG1hdGNoIGxlbmd0aCBpcyBsZXNzIHRoYW4gMi4gIE5vdGUgdGhhdCB0aGUgY2hlY2tzIGJlbG93XG4gICAgICogZm9yIGluc3VmZmljaWVudCBsb29rYWhlYWQgb25seSBvY2N1ciBvY2Nhc2lvbmFsbHkgZm9yIHBlcmZvcm1hbmNlXG4gICAgICogcmVhc29ucy4gIFRoZXJlZm9yZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aWxsIGJlIGFjY2Vzc2VkLCBhbmRcbiAgICAgKiBjb25kaXRpb25hbCBqdW1wcyB3aWxsIGJlIG1hZGUgdGhhdCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzLlxuICAgICAqIEhvd2V2ZXIgdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2ggaXMgbGltaXRlZCB0byB0aGUgbG9va2FoZWFkLCBzb1xuICAgICAqIHRoZSBvdXRwdXQgb2YgZGVmbGF0ZSBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLlxuICAgICAqL1xuXG4gICAgaWYgKF93aW5bbWF0Y2ggKyBiZXN0X2xlbl0gICAgICE9PSBzY2FuX2VuZCAgfHxcbiAgICAgICAgX3dpblttYXRjaCArIGJlc3RfbGVuIC0gMV0gIT09IHNjYW5fZW5kMSB8fFxuICAgICAgICBfd2luW21hdGNoXSAgICAgICAgICAgICAgICAhPT0gX3dpbltzY2FuXSB8fFxuICAgICAgICBfd2luWysrbWF0Y2hdICAgICAgICAgICAgICAhPT0gX3dpbltzY2FuICsgMV0pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qIFRoZSBjaGVjayBhdCBiZXN0X2xlbi0xIGNhbiBiZSByZW1vdmVkIGJlY2F1c2UgaXQgd2lsbCBiZSBtYWRlXG4gICAgICogYWdhaW4gbGF0ZXIuIChUaGlzIGhldXJpc3RpYyBpcyBub3QgYWx3YXlzIGEgd2luLilcbiAgICAgKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNvbXBhcmUgc2NhblsyXSBhbmQgbWF0Y2hbMl0gc2luY2UgdGhleVxuICAgICAqIGFyZSBhbHdheXMgZXF1YWwgd2hlbiB0aGUgb3RoZXIgYnl0ZXMgbWF0Y2gsIGdpdmVuIHRoYXRcbiAgICAgKiB0aGUgaGFzaCBrZXlzIGFyZSBlcXVhbCBhbmQgdGhhdCBIQVNIX0JJVFMgPj0gOC5cbiAgICAgKi9cbiAgICBzY2FuICs9IDI7XG4gICAgbWF0Y2grKztcbiAgICAvLyBBc3NlcnQoKnNjYW4gPT0gKm1hdGNoLCBcIm1hdGNoWzJdP1wiKTtcblxuICAgIC8qIFdlIGNoZWNrIGZvciBpbnN1ZmZpY2llbnQgbG9va2FoZWFkIG9ubHkgZXZlcnkgOHRoIGNvbXBhcmlzb247XG4gICAgICogdGhlIDI1NnRoIGNoZWNrIHdpbGwgYmUgbWFkZSBhdCBzdHJzdGFydCsyNTguXG4gICAgICovXG4gICAgZG8ge1xuICAgICAgLypqc2hpbnQgbm9lbXB0eTpmYWxzZSovXG4gICAgfSB3aGlsZSAoX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJlxuICAgICAgICAgICAgIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiZcbiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmXG4gICAgICAgICAgICAgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJlxuICAgICAgICAgICAgIHNjYW4gPCBzdHJlbmQpO1xuXG4gICAgLy8gQXNzZXJ0KHNjYW4gPD0gcy0+d2luZG93Kyh1bnNpZ25lZCkocy0+d2luZG93X3NpemUtMSksIFwid2lsZCBzY2FuXCIpO1xuXG4gICAgbGVuID0gTUFYX01BVENIIC0gKHN0cmVuZCAtIHNjYW4pO1xuICAgIHNjYW4gPSBzdHJlbmQgLSBNQVhfTUFUQ0g7XG5cbiAgICBpZiAobGVuID4gYmVzdF9sZW4pIHtcbiAgICAgIHMubWF0Y2hfc3RhcnQgPSBjdXJfbWF0Y2g7XG4gICAgICBiZXN0X2xlbiA9IGxlbjtcbiAgICAgIGlmIChsZW4gPj0gbmljZV9tYXRjaCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHNjYW5fZW5kMSAgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdO1xuICAgICAgc2Nhbl9lbmQgICA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTtcbiAgICB9XG4gIH0gd2hpbGUgKChjdXJfbWF0Y2ggPSBwcmV2W2N1cl9tYXRjaCAmIHdtYXNrXSkgPiBsaW1pdCAmJiAtLWNoYWluX2xlbmd0aCAhPT0gMCk7XG5cbiAgaWYgKGJlc3RfbGVuIDw9IHMubG9va2FoZWFkKSB7XG4gICAgcmV0dXJuIGJlc3RfbGVuO1xuICB9XG4gIHJldHVybiBzLmxvb2thaGVhZDtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZpbGwgdGhlIHdpbmRvdyB3aGVuIHRoZSBsb29rYWhlYWQgYmVjb21lcyBpbnN1ZmZpY2llbnQuXG4gKiBVcGRhdGVzIHN0cnN0YXJ0IGFuZCBsb29rYWhlYWQuXG4gKlxuICogSU4gYXNzZXJ0aW9uOiBsb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEXG4gKiBPVVQgYXNzZXJ0aW9uczogc3Ryc3RhcnQgPD0gd2luZG93X3NpemUtTUlOX0xPT0tBSEVBRFxuICogICAgQXQgbGVhc3Qgb25lIGJ5dGUgaGFzIGJlZW4gcmVhZCwgb3IgYXZhaWxfaW4gPT0gMDsgcmVhZHMgYXJlXG4gKiAgICBwZXJmb3JtZWQgZm9yIGF0IGxlYXN0IHR3byBieXRlcyAocmVxdWlyZWQgZm9yIHRoZSB6aXAgdHJhbnNsYXRlX2VvbFxuICogICAgb3B0aW9uIC0tIG5vdCBzdXBwb3J0ZWQgaGVyZSkuXG4gKi9cbmZ1bmN0aW9uIGZpbGxfd2luZG93KHMpIHtcbiAgdmFyIF93X3NpemUgPSBzLndfc2l6ZTtcbiAgdmFyIHAsIG4sIG0sIG1vcmUsIHN0cjtcblxuICAvL0Fzc2VydChzLT5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFELCBcImFscmVhZHkgZW5vdWdoIGxvb2thaGVhZFwiKTtcblxuICBkbyB7XG4gICAgbW9yZSA9IHMud2luZG93X3NpemUgLSBzLmxvb2thaGVhZCAtIHMuc3Ryc3RhcnQ7XG5cbiAgICAvLyBKUyBpbnRzIGhhdmUgMzIgYml0LCBibG9jayBiZWxvdyBub3QgbmVlZGVkXG4gICAgLyogRGVhbCB3aXRoICFAIyQlIDY0SyBsaW1pdDogKi9cbiAgICAvL2lmIChzaXplb2YoaW50KSA8PSAyKSB7XG4gICAgLy8gICAgaWYgKG1vcmUgPT0gMCAmJiBzLT5zdHJzdGFydCA9PSAwICYmIHMtPmxvb2thaGVhZCA9PSAwKSB7XG4gICAgLy8gICAgICAgIG1vcmUgPSB3c2l6ZTtcbiAgICAvL1xuICAgIC8vICB9IGVsc2UgaWYgKG1vcmUgPT0gKHVuc2lnbmVkKSgtMSkpIHtcbiAgICAvLyAgICAgICAgLyogVmVyeSB1bmxpa2VseSwgYnV0IHBvc3NpYmxlIG9uIDE2IGJpdCBtYWNoaW5lIGlmXG4gICAgLy8gICAgICAgICAqIHN0cnN0YXJ0ID09IDAgJiYgbG9va2FoZWFkID09IDEgKGlucHV0IGRvbmUgYSBieXRlIGF0IHRpbWUpXG4gICAgLy8gICAgICAgICAqL1xuICAgIC8vICAgICAgICBtb3JlLS07XG4gICAgLy8gICAgfVxuICAgIC8vfVxuXG5cbiAgICAvKiBJZiB0aGUgd2luZG93IGlzIGFsbW9zdCBmdWxsIGFuZCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgbG9va2FoZWFkLFxuICAgICAqIG1vdmUgdGhlIHVwcGVyIGhhbGYgdG8gdGhlIGxvd2VyIG9uZSB0byBtYWtlIHJvb20gaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICovXG4gICAgaWYgKHMuc3Ryc3RhcnQgPj0gX3dfc2l6ZSArIChfd19zaXplIC0gTUlOX0xPT0tBSEVBRCkpIHtcblxuICAgICAgdXRpbHMuYXJyYXlTZXQocy53aW5kb3csIHMud2luZG93LCBfd19zaXplLCBfd19zaXplLCAwKTtcbiAgICAgIHMubWF0Y2hfc3RhcnQgLT0gX3dfc2l6ZTtcbiAgICAgIHMuc3Ryc3RhcnQgLT0gX3dfc2l6ZTtcbiAgICAgIC8qIHdlIG5vdyBoYXZlIHN0cnN0YXJ0ID49IE1BWF9ESVNUICovXG4gICAgICBzLmJsb2NrX3N0YXJ0IC09IF93X3NpemU7XG5cbiAgICAgIC8qIFNsaWRlIHRoZSBoYXNoIHRhYmxlIChjb3VsZCBiZSBhdm9pZGVkIHdpdGggMzIgYml0IHZhbHVlc1xuICAgICAgIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZSkuIFdlIHNsaWRlIGV2ZW4gd2hlbiBsZXZlbCA9PSAwXG4gICAgICAgdG8ga2VlcCB0aGUgaGFzaCB0YWJsZSBjb25zaXN0ZW50IGlmIHdlIHN3aXRjaCBiYWNrIHRvIGxldmVsID4gMFxuICAgICAgIGxhdGVyLiAoVXNpbmcgbGV2ZWwgMCBwZXJtYW5lbnRseSBpcyBub3QgYW4gb3B0aW1hbCB1c2FnZSBvZlxuICAgICAgIHpsaWIsIHNvIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhpcyBwYXRob2xvZ2ljYWwgY2FzZS4pXG4gICAgICAgKi9cblxuICAgICAgbiA9IHMuaGFzaF9zaXplO1xuICAgICAgcCA9IG47XG4gICAgICBkbyB7XG4gICAgICAgIG0gPSBzLmhlYWRbLS1wXTtcbiAgICAgICAgcy5oZWFkW3BdID0gKG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMCk7XG4gICAgICB9IHdoaWxlICgtLW4pO1xuXG4gICAgICBuID0gX3dfc2l6ZTtcbiAgICAgIHAgPSBuO1xuICAgICAgZG8ge1xuICAgICAgICBtID0gcy5wcmV2Wy0tcF07XG4gICAgICAgIHMucHJldltwXSA9IChtID49IF93X3NpemUgPyBtIC0gX3dfc2l6ZSA6IDApO1xuICAgICAgICAvKiBJZiBuIGlzIG5vdCBvbiBhbnkgaGFzaCBjaGFpbiwgcHJldltuXSBpcyBnYXJiYWdlIGJ1dFxuICAgICAgICAgKiBpdHMgdmFsdWUgd2lsbCBuZXZlciBiZSB1c2VkLlxuICAgICAgICAgKi9cbiAgICAgIH0gd2hpbGUgKC0tbik7XG5cbiAgICAgIG1vcmUgKz0gX3dfc2l6ZTtcbiAgICB9XG4gICAgaWYgKHMuc3RybS5hdmFpbF9pbiA9PT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLyogSWYgdGhlcmUgd2FzIG5vIHNsaWRpbmc6XG4gICAgICogICAgc3Ryc3RhcnQgPD0gV1NJWkUrTUFYX0RJU1QtMSAmJiBsb29rYWhlYWQgPD0gTUlOX0xPT0tBSEVBRCAtIDEgJiZcbiAgICAgKiAgICBtb3JlID09IHdpbmRvd19zaXplIC0gbG9va2FoZWFkIC0gc3Ryc3RhcnRcbiAgICAgKiA9PiBtb3JlID49IHdpbmRvd19zaXplIC0gKE1JTl9MT09LQUhFQUQtMSArIFdTSVpFICsgTUFYX0RJU1QtMSlcbiAgICAgKiA9PiBtb3JlID49IHdpbmRvd19zaXplIC0gMipXU0laRSArIDJcbiAgICAgKiBJbiB0aGUgQklHX01FTSBvciBNTUFQIGNhc2UgKG5vdCB5ZXQgc3VwcG9ydGVkKSxcbiAgICAgKiAgIHdpbmRvd19zaXplID09IGlucHV0X3NpemUgKyBNSU5fTE9PS0FIRUFEICAmJlxuICAgICAqICAgc3Ryc3RhcnQgKyBzLT5sb29rYWhlYWQgPD0gaW5wdXRfc2l6ZSA9PiBtb3JlID49IE1JTl9MT09LQUhFQUQuXG4gICAgICogT3RoZXJ3aXNlLCB3aW5kb3dfc2l6ZSA9PSAyKldTSVpFIHNvIG1vcmUgPj0gMi5cbiAgICAgKiBJZiB0aGVyZSB3YXMgc2xpZGluZywgbW9yZSA+PSBXU0laRS4gU28gaW4gYWxsIGNhc2VzLCBtb3JlID49IDIuXG4gICAgICovXG4gICAgLy9Bc3NlcnQobW9yZSA+PSAyLCBcIm1vcmUgPCAyXCIpO1xuICAgIG4gPSByZWFkX2J1ZihzLnN0cm0sIHMud2luZG93LCBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQsIG1vcmUpO1xuICAgIHMubG9va2FoZWFkICs9IG47XG5cbiAgICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHZhbHVlIG5vdyB0aGF0IHdlIGhhdmUgc29tZSBpbnB1dDogKi9cbiAgICBpZiAocy5sb29rYWhlYWQgKyBzLmluc2VydCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgIHN0ciA9IHMuc3Ryc3RhcnQgLSBzLmluc2VydDtcbiAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzdHJdO1xuXG4gICAgICAvKiBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIDFdKTsgKi9cbiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIDFdKSAmIHMuaGFzaF9tYXNrO1xuLy8jaWYgTUlOX01BVENIICE9IDNcbi8vICAgICAgICBDYWxsIHVwZGF0ZV9oYXNoKCkgTUlOX01BVENILTMgbW9yZSB0aW1lc1xuLy8jZW5kaWZcbiAgICAgIHdoaWxlIChzLmluc2VydCkge1xuICAgICAgICAvKiBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7ICovXG4gICAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuXG4gICAgICAgIHMucHJldltzdHIgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG4gICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHN0cjtcbiAgICAgICAgc3RyKys7XG4gICAgICAgIHMuaW5zZXJ0LS07XG4gICAgICAgIGlmIChzLmxvb2thaGVhZCArIHMuaW5zZXJ0IDwgTUlOX01BVENIKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLyogSWYgdGhlIHdob2xlIGlucHV0IGhhcyBsZXNzIHRoYW4gTUlOX01BVENIIGJ5dGVzLCBpbnNfaCBpcyBnYXJiYWdlLFxuICAgICAqIGJ1dCB0aGlzIGlzIG5vdCBpbXBvcnRhbnQgc2luY2Ugb25seSBsaXRlcmFsIGJ5dGVzIHdpbGwgYmUgZW1pdHRlZC5cbiAgICAgKi9cblxuICB9IHdoaWxlIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgcy5zdHJtLmF2YWlsX2luICE9PSAwKTtcblxuICAvKiBJZiB0aGUgV0lOX0lOSVQgYnl0ZXMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBkYXRhIGhhdmUgbmV2ZXIgYmVlblxuICAgKiB3cml0dGVuLCB0aGVuIHplcm8gdGhvc2UgYnl0ZXMgaW4gb3JkZXIgdG8gYXZvaWQgbWVtb3J5IGNoZWNrIHJlcG9ydHMgb2ZcbiAgICogdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIChvciB1bmluaXRpYWxpc2VkIGFzIEp1bGlhbiB3cml0ZXMpIGJ5dGVzIGJ5XG4gICAqIHRoZSBsb25nZXN0IG1hdGNoIHJvdXRpbmVzLiAgVXBkYXRlIHRoZSBoaWdoIHdhdGVyIG1hcmsgZm9yIHRoZSBuZXh0XG4gICAqIHRpbWUgdGhyb3VnaCBoZXJlLiAgV0lOX0lOSVQgaXMgc2V0IHRvIE1BWF9NQVRDSCBzaW5jZSB0aGUgbG9uZ2VzdCBtYXRjaFxuICAgKiByb3V0aW5lcyBhbGxvdyBzY2FubmluZyB0byBzdHJzdGFydCArIE1BWF9NQVRDSCwgaWdub3JpbmcgbG9va2FoZWFkLlxuICAgKi9cbi8vICBpZiAocy5oaWdoX3dhdGVyIDwgcy53aW5kb3dfc2l6ZSkge1xuLy8gICAgdmFyIGN1cnIgPSBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQ7XG4vLyAgICB2YXIgaW5pdCA9IDA7XG4vL1xuLy8gICAgaWYgKHMuaGlnaF93YXRlciA8IGN1cnIpIHtcbi8vICAgICAgLyogUHJldmlvdXMgaGlnaCB3YXRlciBtYXJrIGJlbG93IGN1cnJlbnQgZGF0YSAtLSB6ZXJvIFdJTl9JTklUXG4vLyAgICAgICAqIGJ5dGVzIG9yIHVwIHRvIGVuZCBvZiB3aW5kb3csIHdoaWNoZXZlciBpcyBsZXNzLlxuLy8gICAgICAgKi9cbi8vICAgICAgaW5pdCA9IHMud2luZG93X3NpemUgLSBjdXJyO1xuLy8gICAgICBpZiAoaW5pdCA+IFdJTl9JTklUKVxuLy8gICAgICAgIGluaXQgPSBXSU5fSU5JVDtcbi8vICAgICAgem1lbXplcm8ocy0+d2luZG93ICsgY3VyciwgKHVuc2lnbmVkKWluaXQpO1xuLy8gICAgICBzLT5oaWdoX3dhdGVyID0gY3VyciArIGluaXQ7XG4vLyAgICB9XG4vLyAgICBlbHNlIGlmIChzLT5oaWdoX3dhdGVyIDwgKHVsZyljdXJyICsgV0lOX0lOSVQpIHtcbi8vICAgICAgLyogSGlnaCB3YXRlciBtYXJrIGF0IG9yIGFib3ZlIGN1cnJlbnQgZGF0YSwgYnV0IGJlbG93IGN1cnJlbnQgZGF0YVxuLy8gICAgICAgKiBwbHVzIFdJTl9JTklUIC0tIHplcm8gb3V0IHRvIGN1cnJlbnQgZGF0YSBwbHVzIFdJTl9JTklULCBvciB1cFxuLy8gICAgICAgKiB0byBlbmQgb2Ygd2luZG93LCB3aGljaGV2ZXIgaXMgbGVzcy5cbi8vICAgICAgICovXG4vLyAgICAgIGluaXQgPSAodWxnKWN1cnIgKyBXSU5fSU5JVCAtIHMtPmhpZ2hfd2F0ZXI7XG4vLyAgICAgIGlmIChpbml0ID4gcy0+d2luZG93X3NpemUgLSBzLT5oaWdoX3dhdGVyKVxuLy8gICAgICAgIGluaXQgPSBzLT53aW5kb3dfc2l6ZSAtIHMtPmhpZ2hfd2F0ZXI7XG4vLyAgICAgIHptZW16ZXJvKHMtPndpbmRvdyArIHMtPmhpZ2hfd2F0ZXIsICh1bnNpZ25lZClpbml0KTtcbi8vICAgICAgcy0+aGlnaF93YXRlciArPSBpbml0O1xuLy8gICAgfVxuLy8gIH1cbi8vXG4vLyAgQXNzZXJ0KCh1bGcpcy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUgLSBNSU5fTE9PS0FIRUFELFxuLy8gICAgXCJub3QgZW5vdWdoIHJvb20gZm9yIHNlYXJjaFwiKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5IHdpdGhvdXQgY29tcHJlc3Npb24gYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIHJldHVyblxuICogdGhlIGN1cnJlbnQgYmxvY2sgc3RhdGUuXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGluc2VydCBuZXcgc3RyaW5ncyBpbiB0aGUgZGljdGlvbmFyeSBzaW5jZVxuICogdW5jb21wcmVzc2libGUgZGF0YSBpcyBwcm9iYWJseSBub3QgdXNlZnVsLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWRcbiAqIG9ubHkgZm9yIHRoZSBsZXZlbD0wIGNvbXByZXNzaW9uIG9wdGlvbi5cbiAqIE5PVEU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG9wdGltaXplZCB0byBhdm9pZCBleHRyYSBjb3B5aW5nIGZyb21cbiAqIHdpbmRvdyB0byBwZW5kaW5nX2J1Zi5cbiAqL1xuZnVuY3Rpb24gZGVmbGF0ZV9zdG9yZWQocywgZmx1c2gpIHtcbiAgLyogU3RvcmVkIGJsb2NrcyBhcmUgbGltaXRlZCB0byAweGZmZmYgYnl0ZXMsIHBlbmRpbmdfYnVmIGlzIGxpbWl0ZWRcbiAgICogdG8gcGVuZGluZ19idWZfc2l6ZSwgYW5kIGVhY2ggc3RvcmVkIGJsb2NrIGhhcyBhIDUgYnl0ZSBoZWFkZXI6XG4gICAqL1xuICB2YXIgbWF4X2Jsb2NrX3NpemUgPSAweGZmZmY7XG5cbiAgaWYgKG1heF9ibG9ja19zaXplID4gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNSkge1xuICAgIG1heF9ibG9ja19zaXplID0gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNTtcbiAgfVxuXG4gIC8qIENvcHkgYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIGlucHV0IHRvIG91dHB1dDogKi9cbiAgZm9yICg7Oykge1xuICAgIC8qIEZpbGwgdGhlIHdpbmRvdyBhcyBtdWNoIGFzIHBvc3NpYmxlOiAqL1xuICAgIGlmIChzLmxvb2thaGVhZCA8PSAxKSB7XG5cbiAgICAgIC8vQXNzZXJ0KHMtPnN0cnN0YXJ0IDwgcy0+d19zaXplK01BWF9ESVNUKHMpIHx8XG4gICAgICAvLyAgcy0+YmxvY2tfc3RhcnQgPj0gKGxvbmcpcy0+d19zaXplLCBcInNsaWRlIHRvbyBsYXRlXCIpO1xuLy8gICAgICBpZiAoIShzLnN0cnN0YXJ0IDwgcy53X3NpemUgKyAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSB8fFxuLy8gICAgICAgIHMuYmxvY2tfc3RhcnQgPj0gcy53X3NpemUpKSB7XG4vLyAgICAgICAgdGhyb3cgIG5ldyBFcnJvcihcInNsaWRlIHRvbyBsYXRlXCIpO1xuLy8gICAgICB9XG5cbiAgICAgIGZpbGxfd2luZG93KHMpO1xuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgfVxuICAgIC8vQXNzZXJ0KHMtPmJsb2NrX3N0YXJ0ID49IDBMLCBcImJsb2NrIGdvbmVcIik7XG4vLyAgICBpZiAocy5ibG9ja19zdGFydCA8IDApIHRocm93IG5ldyBFcnJvcihcImJsb2NrIGdvbmVcIik7XG5cbiAgICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkO1xuICAgIHMubG9va2FoZWFkID0gMDtcblxuICAgIC8qIEVtaXQgYSBzdG9yZWQgYmxvY2sgaWYgcGVuZGluZ19idWYgd2lsbCBiZSBmdWxsOiAqL1xuICAgIHZhciBtYXhfc3RhcnQgPSBzLmJsb2NrX3N0YXJ0ICsgbWF4X2Jsb2NrX3NpemU7XG5cbiAgICBpZiAocy5zdHJzdGFydCA9PT0gMCB8fCBzLnN0cnN0YXJ0ID49IG1heF9zdGFydCkge1xuICAgICAgLyogc3Ryc3RhcnQgPT0gMCBpcyBwb3NzaWJsZSB3aGVuIHdyYXBhcm91bmQgb24gMTYtYml0IG1hY2hpbmUgKi9cbiAgICAgIHMubG9va2FoZWFkID0gcy5zdHJzdGFydCAtIG1heF9zdGFydDtcbiAgICAgIHMuc3Ryc3RhcnQgPSBtYXhfc3RhcnQ7XG4gICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICAvKioqL1xuXG5cbiAgICB9XG4gICAgLyogRmx1c2ggaWYgd2UgbWF5IGhhdmUgdG8gc2xpZGUsIG90aGVyd2lzZSBibG9ja19zdGFydCBtYXkgYmVjb21lXG4gICAgICogbmVnYXRpdmUgYW5kIHRoZSBkYXRhIHdpbGwgYmUgZ29uZTpcbiAgICAgKi9cbiAgICBpZiAocy5zdHJzdGFydCAtIHMuYmxvY2tfc3RhcnQgPj0gKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkpIHtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG4gICAgfVxuICB9XG5cbiAgcy5pbnNlcnQgPSAwO1xuXG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEO1xuICAgIH1cbiAgICAvKioqL1xuICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTtcbiAgfVxuXG4gIGlmIChzLnN0cnN0YXJ0ID4gcy5ibG9ja19zdGFydCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICB9XG4gICAgLyoqKi9cbiAgfVxuXG4gIHJldHVybiBCU19ORUVEX01PUkU7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29tcHJlc3MgYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIHJldHVybiB0aGUgY3VycmVudFxuICogYmxvY2sgc3RhdGUuXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0gbGF6eSBldmFsdWF0aW9uIG9mIG1hdGNoZXMgYW5kIGluc2VydHNcbiAqIG5ldyBzdHJpbmdzIGluIHRoZSBkaWN0aW9uYXJ5IG9ubHkgZm9yIHVubWF0Y2hlZCBzdHJpbmdzIG9yIGZvciBzaG9ydFxuICogbWF0Y2hlcy4gSXQgaXMgdXNlZCBvbmx5IGZvciB0aGUgZmFzdCBjb21wcmVzc2lvbiBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBkZWZsYXRlX2Zhc3QocywgZmx1c2gpIHtcbiAgdmFyIGhhc2hfaGVhZDsgICAgICAgIC8qIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gKi9cbiAgdmFyIGJmbHVzaDsgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqL1xuXG4gIGZvciAoOzspIHtcbiAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHRcbiAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlc1xuICAgICAqIGZvciB0aGUgbmV4dCBtYXRjaCwgcGx1cyBNSU5fTUFUQ0ggYnl0ZXMgdG8gaW5zZXJ0IHRoZVxuICAgICAqIHN0cmluZyBmb2xsb3dpbmcgdGhlIG5leHQgbWF0Y2guXG4gICAgICovXG4gICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCkge1xuICAgICAgZmlsbF93aW5kb3cocyk7XG4gICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHtcbiAgICAgICAgYnJlYWs7IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogSW5zZXJ0IHRoZSBzdHJpbmcgd2luZG93W3N0cnN0YXJ0IC4uIHN0cnN0YXJ0KzJdIGluIHRoZVxuICAgICAqIGRpY3Rpb25hcnksIGFuZCBzZXQgaGFzaF9oZWFkIHRvIHRoZSBoZWFkIG9mIHRoZSBoYXNoIGNoYWluOlxuICAgICAqL1xuICAgIGhhc2hfaGVhZCA9IDAvKk5JTCovO1xuICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0LCBoYXNoX2hlYWQpOyAqKiovXG4gICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7XG4gICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTtcbiAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7XG4gICAgICAvKioqL1xuICAgIH1cblxuICAgIC8qIEZpbmQgdGhlIGxvbmdlc3QgbWF0Y2gsIGRpc2NhcmRpbmcgdGhvc2UgPD0gcHJldl9sZW5ndGguXG4gICAgICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFsd2F5cyBtYXRjaF9sZW5ndGggPCBNSU5fTUFUQ0hcbiAgICAgKi9cbiAgICBpZiAoaGFzaF9oZWFkICE9PSAwLypOSUwqLyAmJiAoKHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQpIDw9IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSkge1xuICAgICAgLyogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmdcbiAgICAgICAqIG9mIHdpbmRvdyBpbmRleCAwIChpbiBwYXJ0aWN1bGFyIHdlIGhhdmUgdG8gYXZvaWQgYSBtYXRjaFxuICAgICAgICogb2YgdGhlIHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUpLlxuICAgICAgICovXG4gICAgICBzLm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2gocywgaGFzaF9oZWFkKTtcbiAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovXG4gICAgfVxuICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgIC8vIGNoZWNrX21hdGNoKHMsIHMuc3Ryc3RhcnQsIHMubWF0Y2hfc3RhcnQsIHMubWF0Y2hfbGVuZ3RoKTsgLy8gZm9yIGRlYnVnIG9ubHlcblxuICAgICAgLyoqKiBfdHJfdGFsbHlfZGlzdChzLCBzLnN0cnN0YXJ0IC0gcy5tYXRjaF9zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTtcblxuICAgICAgcy5sb29rYWhlYWQgLT0gcy5tYXRjaF9sZW5ndGg7XG5cbiAgICAgIC8qIEluc2VydCBuZXcgc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSBvbmx5IGlmIHRoZSBtYXRjaCBsZW5ndGhcbiAgICAgICAqIGlzIG5vdCB0b28gbGFyZ2UuIFRoaXMgc2F2ZXMgdGltZSBidXQgZGVncmFkZXMgY29tcHJlc3Npb24uXG4gICAgICAgKi9cbiAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSBzLm1heF9sYXp5X21hdGNoLyptYXhfaW5zZXJ0X2xlbmd0aCovICYmIHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkge1xuICAgICAgICBzLm1hdGNoX2xlbmd0aC0tOyAvKiBzdHJpbmcgYXQgc3Ryc3RhcnQgYWxyZWFkeSBpbiB0YWJsZSAqL1xuICAgICAgICBkbyB7XG4gICAgICAgICAgcy5zdHJzdGFydCsrO1xuICAgICAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0LCBoYXNoX2hlYWQpOyAqKiovXG4gICAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7XG4gICAgICAgICAgLyoqKi9cbiAgICAgICAgICAvKiBzdHJzdGFydCBuZXZlciBleGNlZWRzIFdTSVpFLU1BWF9NQVRDSCwgc28gdGhlcmUgYXJlXG4gICAgICAgICAgICogYWx3YXlzIE1JTl9NQVRDSCBieXRlcyBhaGVhZC5cbiAgICAgICAgICAgKi9cbiAgICAgICAgfSB3aGlsZSAoLS1zLm1hdGNoX2xlbmd0aCAhPT0gMCk7XG4gICAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICAgIH0gZWxzZVxuICAgICAge1xuICAgICAgICBzLnN0cnN0YXJ0ICs9IHMubWF0Y2hfbGVuZ3RoO1xuICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7XG4gICAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzLnN0cnN0YXJ0XTtcbiAgICAgICAgLyogVVBEQVRFX0hBU0gocywgcy5pbnNfaCwgcy53aW5kb3dbcy5zdHJzdGFydCsxXSk7ICovXG4gICAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyAxXSkgJiBzLmhhc2hfbWFzaztcblxuLy8jaWYgTUlOX01BVENIICE9IDNcbi8vICAgICAgICAgICAgICAgIENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzXG4vLyNlbmRpZlxuICAgICAgICAvKiBJZiBsb29rYWhlYWQgPCBNSU5fTUFUQ0gsIGluc19oIGlzIGdhcmJhZ2UsIGJ1dCBpdCBkb2VzIG5vdFxuICAgICAgICAgKiBtYXR0ZXIgc2luY2UgaXQgd2lsbCBiZSByZWNvbXB1dGVkIGF0IG5leHQgZGVmbGF0ZSBjYWxsLlxuICAgICAgICAgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLyogTm8gbWF0Y2gsIG91dHB1dCBhIGxpdGVyYWwgYnl0ZSAqL1xuICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSkpO1xuICAgICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnRdLCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pO1xuXG4gICAgICBzLmxvb2thaGVhZC0tO1xuICAgICAgcy5zdHJzdGFydCsrO1xuICAgIH1cbiAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICAvKioqL1xuICAgIH1cbiAgfVxuICBzLmluc2VydCA9ICgocy5zdHJzdGFydCA8IChNSU5fTUFUQ0ggLSAxKSkgPyBzLnN0cnN0YXJ0IDogTUlOX01BVENIIC0gMSk7XG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEO1xuICAgIH1cbiAgICAvKioqL1xuICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTtcbiAgfVxuICBpZiAocy5sYXN0X2xpdCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICB9XG4gICAgLyoqKi9cbiAgfVxuICByZXR1cm4gQlNfQkxPQ0tfRE9ORTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTYW1lIGFzIGFib3ZlLCBidXQgYWNoaWV2ZXMgYmV0dGVyIGNvbXByZXNzaW9uLiBXZSB1c2UgYSBsYXp5XG4gKiBldmFsdWF0aW9uIGZvciBtYXRjaGVzOiBhIG1hdGNoIGlzIGZpbmFsbHkgYWRvcHRlZCBvbmx5IGlmIHRoZXJlIGlzXG4gKiBubyBiZXR0ZXIgbWF0Y2ggYXQgdGhlIG5leHQgd2luZG93IHBvc2l0aW9uLlxuICovXG5mdW5jdGlvbiBkZWZsYXRlX3Nsb3cocywgZmx1c2gpIHtcbiAgdmFyIGhhc2hfaGVhZDsgICAgICAgICAgLyogaGVhZCBvZiBoYXNoIGNoYWluICovXG4gIHZhciBiZmx1c2g7ICAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi9cblxuICB2YXIgbWF4X2luc2VydDtcblxuICAvKiBQcm9jZXNzIHRoZSBpbnB1dCBibG9jay4gKi9cbiAgZm9yICg7Oykge1xuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdFxuICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQgTUFYX01BVENIIGJ5dGVzXG4gICAgICogZm9yIHRoZSBuZXh0IG1hdGNoLCBwbHVzIE1JTl9NQVRDSCBieXRlcyB0byBpbnNlcnQgdGhlXG4gICAgICogc3RyaW5nIGZvbGxvd2luZyB0aGUgbmV4dCBtYXRjaC5cbiAgICAgKi9cbiAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7XG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgeyBicmVhazsgfSAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgIH1cblxuICAgIC8qIEluc2VydCB0aGUgc3RyaW5nIHdpbmRvd1tzdHJzdGFydCAuLiBzdHJzdGFydCsyXSBpbiB0aGVcbiAgICAgKiBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVhZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbjpcbiAgICAgKi9cbiAgICBoYXNoX2hlYWQgPSAwLypOSUwqLztcbiAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7XG4gICAgICAvKioqIElOU0VSVF9TVFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqL1xuICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG4gICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0O1xuICAgICAgLyoqKi9cbiAgICB9XG5cbiAgICAvKiBGaW5kIHRoZSBsb25nZXN0IG1hdGNoLCBkaXNjYXJkaW5nIHRob3NlIDw9IHByZXZfbGVuZ3RoLlxuICAgICAqL1xuICAgIHMucHJldl9sZW5ndGggPSBzLm1hdGNoX2xlbmd0aDtcbiAgICBzLnByZXZfbWF0Y2ggPSBzLm1hdGNoX3N0YXJ0O1xuICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcblxuICAgIGlmIChoYXNoX2hlYWQgIT09IDAvKk5JTCovICYmIHMucHJldl9sZW5ndGggPCBzLm1heF9sYXp5X21hdGNoICYmXG4gICAgICAgIHMuc3Ryc3RhcnQgLSBoYXNoX2hlYWQgPD0gKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkvKk1BWF9ESVNUKHMpKi8pIHtcbiAgICAgIC8qIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCB3ZSBwcmV2ZW50IG1hdGNoZXMgd2l0aCB0aGUgc3RyaW5nXG4gICAgICAgKiBvZiB3aW5kb3cgaW5kZXggMCAoaW4gcGFydGljdWxhciB3ZSBoYXZlIHRvIGF2b2lkIGEgbWF0Y2hcbiAgICAgICAqIG9mIHRoZSBzdHJpbmcgd2l0aCBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBmaWxlKS5cbiAgICAgICAqL1xuICAgICAgcy5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoKHMsIGhhc2hfaGVhZCk7XG4gICAgICAvKiBsb25nZXN0X21hdGNoKCkgc2V0cyBtYXRjaF9zdGFydCAqL1xuXG4gICAgICBpZiAocy5tYXRjaF9sZW5ndGggPD0gNSAmJlxuICAgICAgICAgKHMuc3RyYXRlZ3kgPT09IFpfRklMVEVSRUQgfHwgKHMubWF0Y2hfbGVuZ3RoID09PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQgPiA0MDk2LypUT09fRkFSKi8pKSkge1xuXG4gICAgICAgIC8qIElmIHByZXZfbWF0Y2ggaXMgYWxzbyBNSU5fTUFUQ0gsIG1hdGNoX3N0YXJ0IGlzIGdhcmJhZ2VcbiAgICAgICAgICogYnV0IHdlIHdpbGwgaWdub3JlIHRoZSBjdXJyZW50IG1hdGNoIGFueXdheS5cbiAgICAgICAgICovXG4gICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogSWYgdGhlcmUgd2FzIGEgbWF0Y2ggYXQgdGhlIHByZXZpb3VzIHN0ZXAgYW5kIHRoZSBjdXJyZW50XG4gICAgICogbWF0Y2ggaXMgbm90IGJldHRlciwgb3V0cHV0IHRoZSBwcmV2aW91cyBtYXRjaDpcbiAgICAgKi9cbiAgICBpZiAocy5wcmV2X2xlbmd0aCA+PSBNSU5fTUFUQ0ggJiYgcy5tYXRjaF9sZW5ndGggPD0gcy5wcmV2X2xlbmd0aCkge1xuICAgICAgbWF4X2luc2VydCA9IHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCAtIE1JTl9NQVRDSDtcbiAgICAgIC8qIERvIG5vdCBpbnNlcnQgc3RyaW5ncyBpbiBoYXNoIHRhYmxlIGJleW9uZCB0aGlzLiAqL1xuXG4gICAgICAvL2NoZWNrX21hdGNoKHMsIHMuc3Ryc3RhcnQtMSwgcy5wcmV2X21hdGNoLCBzLnByZXZfbGVuZ3RoKTtcblxuICAgICAgLyoqKl90cl90YWxseV9kaXN0KHMsIHMuc3Ryc3RhcnQgLSAxIC0gcy5wcmV2X21hdGNoLFxuICAgICAgICAgICAgICAgICAgICAgcy5wcmV2X2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgcy5zdHJzdGFydCAtIDEgLSBzLnByZXZfbWF0Y2gsIHMucHJldl9sZW5ndGggLSBNSU5fTUFUQ0gpO1xuICAgICAgLyogSW5zZXJ0IGluIGhhc2ggdGFibGUgYWxsIHN0cmluZ3MgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbWF0Y2guXG4gICAgICAgKiBzdHJzdGFydC0xIGFuZCBzdHJzdGFydCBhcmUgYWxyZWFkeSBpbnNlcnRlZC4gSWYgdGhlcmUgaXMgbm90XG4gICAgICAgKiBlbm91Z2ggbG9va2FoZWFkLCB0aGUgbGFzdCB0d28gc3RyaW5ncyBhcmUgbm90IGluc2VydGVkIGluXG4gICAgICAgKiB0aGUgaGFzaCB0YWJsZS5cbiAgICAgICAqL1xuICAgICAgcy5sb29rYWhlYWQgLT0gcy5wcmV2X2xlbmd0aCAtIDE7XG4gICAgICBzLnByZXZfbGVuZ3RoIC09IDI7XG4gICAgICBkbyB7XG4gICAgICAgIGlmICgrK3Muc3Ryc3RhcnQgPD0gbWF4X2luc2VydCkge1xuICAgICAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0LCBoYXNoX2hlYWQpOyAqKiovXG4gICAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuICAgICAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuICAgICAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7XG4gICAgICAgICAgLyoqKi9cbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoLS1zLnByZXZfbGVuZ3RoICE9PSAwKTtcbiAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcbiAgICAgIHMuc3Ryc3RhcnQrKztcblxuICAgICAgaWYgKGJmbHVzaCkge1xuICAgICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICAgIH1cbiAgICAgICAgLyoqKi9cbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHtcbiAgICAgIC8qIElmIHRoZXJlIHdhcyBubyBtYXRjaCBhdCB0aGUgcHJldmlvdXMgcG9zaXRpb24sIG91dHB1dCBhXG4gICAgICAgKiBzaW5nbGUgbGl0ZXJhbC4gSWYgdGhlcmUgd2FzIGEgbWF0Y2ggYnV0IHRoZSBjdXJyZW50IG1hdGNoXG4gICAgICAgKiBpcyBsb25nZXIsIHRydW5jYXRlIHRoZSBwcmV2aW91cyBtYXRjaCB0byBhIHNpbmdsZSBsaXRlcmFsLlxuICAgICAgICovXG4gICAgICAvL1RyYWNldnYoKHN0ZGVycixcIiVjXCIsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSkpO1xuICAgICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnQtMV0sIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0IC0gMV0pO1xuXG4gICAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAgIC8qKiogRkxVU0hfQkxPQ0tfT05MWShzLCAwKSAqKiovXG4gICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgICAvKioqL1xuICAgICAgfVxuICAgICAgcy5zdHJzdGFydCsrO1xuICAgICAgcy5sb29rYWhlYWQtLTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIFRoZXJlIGlzIG5vIHByZXZpb3VzIG1hdGNoIHRvIGNvbXBhcmUgd2l0aCwgd2FpdCBmb3JcbiAgICAgICAqIHRoZSBuZXh0IHN0ZXAgdG8gZGVjaWRlLlxuICAgICAgICovXG4gICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDE7XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgICBzLmxvb2thaGVhZC0tO1xuICAgIH1cbiAgfVxuICAvL0Fzc2VydCAoZmx1c2ggIT0gWl9OT19GTFVTSCwgXCJubyBmbHVzaD9cIik7XG4gIGlmIChzLm1hdGNoX2F2YWlsYWJsZSkge1xuICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0LTFdKSk7XG4gICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnQtMV0sIGJmbHVzaCk7ICoqKi9cbiAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydCAtIDFdKTtcblxuICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgfVxuICBzLmluc2VydCA9IHMuc3Ryc3RhcnQgPCBNSU5fTUFUQ0ggLSAxID8gcy5zdHJzdGFydCA6IE1JTl9NQVRDSCAtIDE7XG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEO1xuICAgIH1cbiAgICAvKioqL1xuICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTtcbiAgfVxuICBpZiAocy5sYXN0X2xpdCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICB9XG4gICAgLyoqKi9cbiAgfVxuXG4gIHJldHVybiBCU19CTE9DS19ET05FO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRm9yIFpfUkxFLCBzaW1wbHkgbG9vayBmb3IgcnVucyBvZiBieXRlcywgZ2VuZXJhdGUgbWF0Y2hlcyBvbmx5IG9mIGRpc3RhbmNlXG4gKiBvbmUuICBEbyBub3QgbWFpbnRhaW4gYSBoYXNoIHRhYmxlLiAgKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBydW4gb2ZcbiAqIGRlZmxhdGUgc3dpdGNoZXMgYXdheSBmcm9tIFpfUkxFLilcbiAqL1xuZnVuY3Rpb24gZGVmbGF0ZV9ybGUocywgZmx1c2gpIHtcbiAgdmFyIGJmbHVzaDsgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi9cbiAgdmFyIHByZXY7ICAgICAgICAgICAgICAvKiBieXRlIGF0IGRpc3RhbmNlIG9uZSB0byBtYXRjaCAqL1xuICB2YXIgc2Nhbiwgc3RyZW5kOyAgICAgIC8qIHNjYW4gZ29lcyB1cCB0byBzdHJlbmQgZm9yIGxlbmd0aCBvZiBydW4gKi9cblxuICB2YXIgX3dpbiA9IHMud2luZG93O1xuXG4gIGZvciAoOzspIHtcbiAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHRcbiAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlc1xuICAgICAqIGZvciB0aGUgbG9uZ2VzdCBydW4sIHBsdXMgb25lIGZvciB0aGUgdW5yb2xsZWQgbG9vcC5cbiAgICAgKi9cbiAgICBpZiAocy5sb29rYWhlYWQgPD0gTUFYX01BVENIKSB7XG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA8PSBNQVhfTUFUQ0ggJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgeyBicmVhazsgfSAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgIH1cblxuICAgIC8qIFNlZSBob3cgbWFueSB0aW1lcyB0aGUgcHJldmlvdXMgYnl0ZSByZXBlYXRzICovXG4gICAgcy5tYXRjaF9sZW5ndGggPSAwO1xuICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0ggJiYgcy5zdHJzdGFydCA+IDApIHtcbiAgICAgIHNjYW4gPSBzLnN0cnN0YXJ0IC0gMTtcbiAgICAgIHByZXYgPSBfd2luW3NjYW5dO1xuICAgICAgaWYgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dKSB7XG4gICAgICAgIHN0cmVuZCA9IHMuc3Ryc3RhcnQgKyBNQVhfTUFUQ0g7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAvKmpzaGludCBub2VtcHR5OmZhbHNlKi9cbiAgICAgICAgfSB3aGlsZSAocHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJlxuICAgICAgICAgICAgICAgICBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmXG4gICAgICAgICAgICAgICAgIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiZcbiAgICAgICAgICAgICAgICAgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJlxuICAgICAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTtcbiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7XG4gICAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA+IHMubG9va2FoZWFkKSB7XG4gICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLmxvb2thaGVhZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy9Bc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVJbnQpKHMtPndpbmRvd19zaXplLTEpLCBcIndpbGQgc2NhblwiKTtcbiAgICB9XG5cbiAgICAvKiBFbWl0IG1hdGNoIGlmIGhhdmUgcnVuIG9mIE1JTl9NQVRDSCBvciBsb25nZXIsIGVsc2UgZW1pdCBsaXRlcmFsICovXG4gICAgaWYgKHMubWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkge1xuICAgICAgLy9jaGVja19tYXRjaChzLCBzLnN0cnN0YXJ0LCBzLnN0cnN0YXJ0IC0gMSwgcy5tYXRjaF9sZW5ndGgpO1xuXG4gICAgICAvKioqIF90cl90YWxseV9kaXN0KHMsIDEsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMSwgcy5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gpO1xuXG4gICAgICBzLmxvb2thaGVhZCAtPSBzLm1hdGNoX2xlbmd0aDtcbiAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7XG4gICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIE5vIG1hdGNoLCBvdXRwdXQgYSBsaXRlcmFsIGJ5dGUgKi9cbiAgICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSkpO1xuICAgICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnRdLCBiZmx1c2gpOyAqKiovXG4gICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pO1xuXG4gICAgICBzLmxvb2thaGVhZC0tO1xuICAgICAgcy5zdHJzdGFydCsrO1xuICAgIH1cbiAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgICB9XG4gICAgICAvKioqL1xuICAgIH1cbiAgfVxuICBzLmluc2VydCA9IDA7XG4gIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEO1xuICAgIH1cbiAgICAvKioqL1xuICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTtcbiAgfVxuICBpZiAocy5sYXN0X2xpdCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTtcbiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICB9XG4gICAgLyoqKi9cbiAgfVxuICByZXR1cm4gQlNfQkxPQ0tfRE9ORTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBGb3IgWl9IVUZGTUFOX09OTFksIGRvIG5vdCBsb29rIGZvciBtYXRjaGVzLiAgRG8gbm90IG1haW50YWluIGEgaGFzaCB0YWJsZS5cbiAqIChJdCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGlmIHRoaXMgcnVuIG9mIGRlZmxhdGUgc3dpdGNoZXMgYXdheSBmcm9tIEh1ZmZtYW4uKVxuICovXG5mdW5jdGlvbiBkZWZsYXRlX2h1ZmYocywgZmx1c2gpIHtcbiAgdmFyIGJmbHVzaDsgICAgICAgICAgICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovXG5cbiAgZm9yICg7Oykge1xuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSBsaXRlcmFsIHRvIHdyaXRlLiAqL1xuICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgZmlsbF93aW5kb3cocyk7XG4gICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHtcbiAgICAgICAgaWYgKGZsdXNoID09PSBaX05PX0ZMVVNIKSB7XG4gICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgICAgfVxuICAgICAgICBicmVhazsgICAgICAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqL1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIE91dHB1dCBhIGxpdGVyYWwgYnl0ZSAqL1xuICAgIHMubWF0Y2hfbGVuZ3RoID0gMDtcbiAgICAvL1RyYWNldnYoKHN0ZGVycixcIiVjXCIsIHMtPndpbmRvd1tzLT5zdHJzdGFydF0pKTtcbiAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydF0sIGJmbHVzaCk7ICoqKi9cbiAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pO1xuICAgIHMubG9va2FoZWFkLS07XG4gICAgcy5zdHJzdGFydCsrO1xuICAgIGlmIChiZmx1c2gpIHtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG4gICAgfVxuICB9XG4gIHMuaW5zZXJ0ID0gMDtcbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLmxhc3RfbGl0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG4gIHJldHVybiBCU19CTE9DS19ET05FO1xufVxuXG4vKiBWYWx1ZXMgZm9yIG1heF9sYXp5X21hdGNoLCBnb29kX21hdGNoIGFuZCBtYXhfY2hhaW5fbGVuZ3RoLCBkZXBlbmRpbmcgb25cbiAqIHRoZSBkZXNpcmVkIHBhY2sgbGV2ZWwgKDAuLjkpLiBUaGUgdmFsdWVzIGdpdmVuIGJlbG93IGhhdmUgYmVlbiB0dW5lZCB0b1xuICogZXhjbHVkZSB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIGZvciBwYXRob2xvZ2ljYWwgZmlsZXMuIEJldHRlciB2YWx1ZXMgbWF5IGJlXG4gKiBmb3VuZCBmb3Igc3BlY2lmaWMgZmlsZXMuXG4gKi9cbmZ1bmN0aW9uIENvbmZpZyhnb29kX2xlbmd0aCwgbWF4X2xhenksIG5pY2VfbGVuZ3RoLCBtYXhfY2hhaW4sIGZ1bmMpIHtcbiAgdGhpcy5nb29kX2xlbmd0aCA9IGdvb2RfbGVuZ3RoO1xuICB0aGlzLm1heF9sYXp5ID0gbWF4X2xhenk7XG4gIHRoaXMubmljZV9sZW5ndGggPSBuaWNlX2xlbmd0aDtcbiAgdGhpcy5tYXhfY2hhaW4gPSBtYXhfY2hhaW47XG4gIHRoaXMuZnVuYyA9IGZ1bmM7XG59XG5cbnZhciBjb25maWd1cmF0aW9uX3RhYmxlO1xuXG5jb25maWd1cmF0aW9uX3RhYmxlID0gW1xuICAvKiAgICAgIGdvb2QgbGF6eSBuaWNlIGNoYWluICovXG4gIG5ldyBDb25maWcoMCwgMCwgMCwgMCwgZGVmbGF0ZV9zdG9yZWQpLCAgICAgICAgICAvKiAwIHN0b3JlIG9ubHkgKi9cbiAgbmV3IENvbmZpZyg0LCA0LCA4LCA0LCBkZWZsYXRlX2Zhc3QpLCAgICAgICAgICAgIC8qIDEgbWF4IHNwZWVkLCBubyBsYXp5IG1hdGNoZXMgKi9cbiAgbmV3IENvbmZpZyg0LCA1LCAxNiwgOCwgZGVmbGF0ZV9mYXN0KSwgICAgICAgICAgIC8qIDIgKi9cbiAgbmV3IENvbmZpZyg0LCA2LCAzMiwgMzIsIGRlZmxhdGVfZmFzdCksICAgICAgICAgIC8qIDMgKi9cblxuICBuZXcgQ29uZmlnKDQsIDQsIDE2LCAxNiwgZGVmbGF0ZV9zbG93KSwgICAgICAgICAgLyogNCBsYXp5IG1hdGNoZXMgKi9cbiAgbmV3IENvbmZpZyg4LCAxNiwgMzIsIDMyLCBkZWZsYXRlX3Nsb3cpLCAgICAgICAgIC8qIDUgKi9cbiAgbmV3IENvbmZpZyg4LCAxNiwgMTI4LCAxMjgsIGRlZmxhdGVfc2xvdyksICAgICAgIC8qIDYgKi9cbiAgbmV3IENvbmZpZyg4LCAzMiwgMTI4LCAyNTYsIGRlZmxhdGVfc2xvdyksICAgICAgIC8qIDcgKi9cbiAgbmV3IENvbmZpZygzMiwgMTI4LCAyNTgsIDEwMjQsIGRlZmxhdGVfc2xvdyksICAgIC8qIDggKi9cbiAgbmV3IENvbmZpZygzMiwgMjU4LCAyNTgsIDQwOTYsIGRlZmxhdGVfc2xvdykgICAgIC8qIDkgbWF4IGNvbXByZXNzaW9uICovXG5dO1xuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZSB0aGUgXCJsb25nZXN0IG1hdGNoXCIgcm91dGluZXMgZm9yIGEgbmV3IHpsaWIgc3RyZWFtXG4gKi9cbmZ1bmN0aW9uIGxtX2luaXQocykge1xuICBzLndpbmRvd19zaXplID0gMiAqIHMud19zaXplO1xuXG4gIC8qKiogQ0xFQVJfSEFTSChzKTsgKioqL1xuICB6ZXJvKHMuaGVhZCk7IC8vIEZpbGwgd2l0aCBOSUwgKD0gMCk7XG5cbiAgLyogU2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczpcbiAgICovXG4gIHMubWF4X2xhenlfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLm1heF9sYXp5O1xuICBzLmdvb2RfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLmdvb2RfbGVuZ3RoO1xuICBzLm5pY2VfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLm5pY2VfbGVuZ3RoO1xuICBzLm1heF9jaGFpbl9sZW5ndGggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLm1heF9jaGFpbjtcblxuICBzLnN0cnN0YXJ0ID0gMDtcbiAgcy5ibG9ja19zdGFydCA9IDA7XG4gIHMubG9va2FoZWFkID0gMDtcbiAgcy5pbnNlcnQgPSAwO1xuICBzLm1hdGNoX2xlbmd0aCA9IHMucHJldl9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxO1xuICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7XG4gIHMuaW5zX2ggPSAwO1xufVxuXG5cbmZ1bmN0aW9uIERlZmxhdGVTdGF0ZSgpIHtcbiAgdGhpcy5zdHJtID0gbnVsbDsgICAgICAgICAgICAvKiBwb2ludGVyIGJhY2sgdG8gdGhpcyB6bGliIHN0cmVhbSAqL1xuICB0aGlzLnN0YXR1cyA9IDA7ICAgICAgICAgICAgLyogYXMgdGhlIG5hbWUgaW1wbGllcyAqL1xuICB0aGlzLnBlbmRpbmdfYnVmID0gbnVsbDsgICAgICAvKiBvdXRwdXQgc3RpbGwgcGVuZGluZyAqL1xuICB0aGlzLnBlbmRpbmdfYnVmX3NpemUgPSAwOyAgLyogc2l6ZSBvZiBwZW5kaW5nX2J1ZiAqL1xuICB0aGlzLnBlbmRpbmdfb3V0ID0gMDsgICAgICAgLyogbmV4dCBwZW5kaW5nIGJ5dGUgdG8gb3V0cHV0IHRvIHRoZSBzdHJlYW0gKi9cbiAgdGhpcy5wZW5kaW5nID0gMDsgICAgICAgICAgIC8qIG5iIG9mIGJ5dGVzIGluIHRoZSBwZW5kaW5nIGJ1ZmZlciAqL1xuICB0aGlzLndyYXAgPSAwOyAgICAgICAgICAgICAgLyogYml0IDAgdHJ1ZSBmb3IgemxpYiwgYml0IDEgdHJ1ZSBmb3IgZ3ppcCAqL1xuICB0aGlzLmd6aGVhZCA9IG51bGw7ICAgICAgICAgLyogZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gdG8gd3JpdGUgKi9cbiAgdGhpcy5nemluZGV4ID0gMDsgICAgICAgICAgIC8qIHdoZXJlIGluIGV4dHJhLCBuYW1lLCBvciBjb21tZW50ICovXG4gIHRoaXMubWV0aG9kID0gWl9ERUZMQVRFRDsgLyogY2FuIG9ubHkgYmUgREVGTEFURUQgKi9cbiAgdGhpcy5sYXN0X2ZsdXNoID0gLTE7ICAgLyogdmFsdWUgb2YgZmx1c2ggcGFyYW0gZm9yIHByZXZpb3VzIGRlZmxhdGUgY2FsbCAqL1xuXG4gIHRoaXMud19zaXplID0gMDsgIC8qIExaNzcgd2luZG93IHNpemUgKDMySyBieSBkZWZhdWx0KSAqL1xuICB0aGlzLndfYml0cyA9IDA7ICAvKiBsb2cyKHdfc2l6ZSkgICg4Li4xNikgKi9cbiAgdGhpcy53X21hc2sgPSAwOyAgLyogd19zaXplIC0gMSAqL1xuXG4gIHRoaXMud2luZG93ID0gbnVsbDtcbiAgLyogU2xpZGluZyB3aW5kb3cuIElucHV0IGJ5dGVzIGFyZSByZWFkIGludG8gdGhlIHNlY29uZCBoYWxmIG9mIHRoZSB3aW5kb3csXG4gICAqIGFuZCBtb3ZlIHRvIHRoZSBmaXJzdCBoYWxmIGxhdGVyIHRvIGtlZXAgYSBkaWN0aW9uYXJ5IG9mIGF0IGxlYXN0IHdTaXplXG4gICAqIGJ5dGVzLiBXaXRoIHRoaXMgb3JnYW5pemF0aW9uLCBtYXRjaGVzIGFyZSBsaW1pdGVkIHRvIGEgZGlzdGFuY2Ugb2ZcbiAgICogd1NpemUtTUFYX01BVENIIGJ5dGVzLCBidXQgdGhpcyBlbnN1cmVzIHRoYXQgSU8gaXMgYWx3YXlzXG4gICAqIHBlcmZvcm1lZCB3aXRoIGEgbGVuZ3RoIG11bHRpcGxlIG9mIHRoZSBibG9jayBzaXplLlxuICAgKi9cblxuICB0aGlzLndpbmRvd19zaXplID0gMDtcbiAgLyogQWN0dWFsIHNpemUgb2Ygd2luZG93OiAyKndTaXplLCBleGNlcHQgd2hlbiB0aGUgdXNlciBpbnB1dCBidWZmZXJcbiAgICogaXMgZGlyZWN0bHkgdXNlZCBhcyBzbGlkaW5nIHdpbmRvdy5cbiAgICovXG5cbiAgdGhpcy5wcmV2ID0gbnVsbDtcbiAgLyogTGluayB0byBvbGRlciBzdHJpbmcgd2l0aCBzYW1lIGhhc2ggaW5kZXguIFRvIGxpbWl0IHRoZSBzaXplIG9mIHRoaXNcbiAgICogYXJyYXkgdG8gNjRLLCB0aGlzIGxpbmsgaXMgbWFpbnRhaW5lZCBvbmx5IGZvciB0aGUgbGFzdCAzMksgc3RyaW5ncy5cbiAgICogQW4gaW5kZXggaW4gdGhpcyBhcnJheSBpcyB0aHVzIGEgd2luZG93IGluZGV4IG1vZHVsbyAzMksuXG4gICAqL1xuXG4gIHRoaXMuaGVhZCA9IG51bGw7ICAgLyogSGVhZHMgb2YgdGhlIGhhc2ggY2hhaW5zIG9yIE5JTC4gKi9cblxuICB0aGlzLmluc19oID0gMDsgICAgICAgLyogaGFzaCBpbmRleCBvZiBzdHJpbmcgdG8gYmUgaW5zZXJ0ZWQgKi9cbiAgdGhpcy5oYXNoX3NpemUgPSAwOyAgIC8qIG51bWJlciBvZiBlbGVtZW50cyBpbiBoYXNoIHRhYmxlICovXG4gIHRoaXMuaGFzaF9iaXRzID0gMDsgICAvKiBsb2cyKGhhc2hfc2l6ZSkgKi9cbiAgdGhpcy5oYXNoX21hc2sgPSAwOyAgIC8qIGhhc2hfc2l6ZS0xICovXG5cbiAgdGhpcy5oYXNoX3NoaWZ0ID0gMDtcbiAgLyogTnVtYmVyIG9mIGJpdHMgYnkgd2hpY2ggaW5zX2ggbXVzdCBiZSBzaGlmdGVkIGF0IGVhY2ggaW5wdXRcbiAgICogc3RlcC4gSXQgbXVzdCBiZSBzdWNoIHRoYXQgYWZ0ZXIgTUlOX01BVENIIHN0ZXBzLCB0aGUgb2xkZXN0XG4gICAqIGJ5dGUgbm8gbG9uZ2VyIHRha2VzIHBhcnQgaW4gdGhlIGhhc2gga2V5LCB0aGF0IGlzOlxuICAgKiAgIGhhc2hfc2hpZnQgKiBNSU5fTUFUQ0ggPj0gaGFzaF9iaXRzXG4gICAqL1xuXG4gIHRoaXMuYmxvY2tfc3RhcnQgPSAwO1xuICAvKiBXaW5kb3cgcG9zaXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBvdXRwdXQgYmxvY2suIEdldHNcbiAgICogbmVnYXRpdmUgd2hlbiB0aGUgd2luZG93IGlzIG1vdmVkIGJhY2t3YXJkcy5cbiAgICovXG5cbiAgdGhpcy5tYXRjaF9sZW5ndGggPSAwOyAgICAgIC8qIGxlbmd0aCBvZiBiZXN0IG1hdGNoICovXG4gIHRoaXMucHJldl9tYXRjaCA9IDA7ICAgICAgICAvKiBwcmV2aW91cyBtYXRjaCAqL1xuICB0aGlzLm1hdGNoX2F2YWlsYWJsZSA9IDA7ICAgLyogc2V0IGlmIHByZXZpb3VzIG1hdGNoIGV4aXN0cyAqL1xuICB0aGlzLnN0cnN0YXJ0ID0gMDsgICAgICAgICAgLyogc3RhcnQgb2Ygc3RyaW5nIHRvIGluc2VydCAqL1xuICB0aGlzLm1hdGNoX3N0YXJ0ID0gMDsgICAgICAgLyogc3RhcnQgb2YgbWF0Y2hpbmcgc3RyaW5nICovXG4gIHRoaXMubG9va2FoZWFkID0gMDsgICAgICAgICAvKiBudW1iZXIgb2YgdmFsaWQgYnl0ZXMgYWhlYWQgaW4gd2luZG93ICovXG5cbiAgdGhpcy5wcmV2X2xlbmd0aCA9IDA7XG4gIC8qIExlbmd0aCBvZiB0aGUgYmVzdCBtYXRjaCBhdCBwcmV2aW91cyBzdGVwLiBNYXRjaGVzIG5vdCBncmVhdGVyIHRoYW4gdGhpc1xuICAgKiBhcmUgZGlzY2FyZGVkLiBUaGlzIGlzIHVzZWQgaW4gdGhlIGxhenkgbWF0Y2ggZXZhbHVhdGlvbi5cbiAgICovXG5cbiAgdGhpcy5tYXhfY2hhaW5fbGVuZ3RoID0gMDtcbiAgLyogVG8gc3BlZWQgdXAgZGVmbGF0aW9uLCBoYXNoIGNoYWlucyBhcmUgbmV2ZXIgc2VhcmNoZWQgYmV5b25kIHRoaXNcbiAgICogbGVuZ3RoLiAgQSBoaWdoZXIgbGltaXQgaW1wcm92ZXMgY29tcHJlc3Npb24gcmF0aW8gYnV0IGRlZ3JhZGVzIHRoZVxuICAgKiBzcGVlZC5cbiAgICovXG5cbiAgdGhpcy5tYXhfbGF6eV9tYXRjaCA9IDA7XG4gIC8qIEF0dGVtcHQgdG8gZmluZCBhIGJldHRlciBtYXRjaCBvbmx5IHdoZW4gdGhlIGN1cnJlbnQgbWF0Y2ggaXMgc3RyaWN0bHlcbiAgICogc21hbGxlciB0aGFuIHRoaXMgdmFsdWUuIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgb25seSBmb3IgY29tcHJlc3Npb25cbiAgICogbGV2ZWxzID49IDQuXG4gICAqL1xuICAvLyBUaGF0J3MgYWxpYXMgdG8gbWF4X2xhenlfbWF0Y2gsIGRvbid0IHVzZSBkaXJlY3RseVxuICAvL3RoaXMubWF4X2luc2VydF9sZW5ndGggPSAwO1xuICAvKiBJbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgb25seSBpZiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIG5vdFxuICAgKiBncmVhdGVyIHRoYW4gdGhpcyBsZW5ndGguIFRoaXMgc2F2ZXMgdGltZSBidXQgZGVncmFkZXMgY29tcHJlc3Npb24uXG4gICAqIG1heF9pbnNlcnRfbGVuZ3RoIGlzIHVzZWQgb25seSBmb3IgY29tcHJlc3Npb24gbGV2ZWxzIDw9IDMuXG4gICAqL1xuXG4gIHRoaXMubGV2ZWwgPSAwOyAgICAgLyogY29tcHJlc3Npb24gbGV2ZWwgKDEuLjkpICovXG4gIHRoaXMuc3RyYXRlZ3kgPSAwOyAgLyogZmF2b3Igb3IgZm9yY2UgSHVmZm1hbiBjb2RpbmcqL1xuXG4gIHRoaXMuZ29vZF9tYXRjaCA9IDA7XG4gIC8qIFVzZSBhIGZhc3RlciBzZWFyY2ggd2hlbiB0aGUgcHJldmlvdXMgbWF0Y2ggaXMgbG9uZ2VyIHRoYW4gdGhpcyAqL1xuXG4gIHRoaXMubmljZV9tYXRjaCA9IDA7IC8qIFN0b3Agc2VhcmNoaW5nIHdoZW4gY3VycmVudCBtYXRjaCBleGNlZWRzIHRoaXMgKi9cblxuICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRyZWVzLmM6ICovXG5cbiAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqL1xuXG4gIC8vIHN0cnVjdCBjdF9kYXRhX3MgZHluX2x0cmVlW0hFQVBfU0laRV07ICAgLyogbGl0ZXJhbCBhbmQgbGVuZ3RoIHRyZWUgKi9cbiAgLy8gc3RydWN0IGN0X2RhdGFfcyBkeW5fZHRyZWVbMipEX0NPREVTKzFdOyAvKiBkaXN0YW5jZSB0cmVlICovXG4gIC8vIHN0cnVjdCBjdF9kYXRhX3MgYmxfdHJlZVsyKkJMX0NPREVTKzFdOyAgLyogSHVmZm1hbiB0cmVlIGZvciBiaXQgbGVuZ3RocyAqL1xuXG4gIC8vIFVzZSBmbGF0IGFycmF5IG9mIERPVUJMRSBzaXplLCB3aXRoIGludGVybGVhdmVkIGZhdGEsXG4gIC8vIGJlY2F1c2UgSlMgZG9lcyBub3Qgc3VwcG9ydCBlZmZlY3RpdmVcbiAgdGhpcy5keW5fbHRyZWUgID0gbmV3IHV0aWxzLkJ1ZjE2KEhFQVBfU0laRSAqIDIpO1xuICB0aGlzLmR5bl9kdHJlZSAgPSBuZXcgdXRpbHMuQnVmMTYoKDIgKiBEX0NPREVTICsgMSkgKiAyKTtcbiAgdGhpcy5ibF90cmVlICAgID0gbmV3IHV0aWxzLkJ1ZjE2KCgyICogQkxfQ09ERVMgKyAxKSAqIDIpO1xuICB6ZXJvKHRoaXMuZHluX2x0cmVlKTtcbiAgemVybyh0aGlzLmR5bl9kdHJlZSk7XG4gIHplcm8odGhpcy5ibF90cmVlKTtcblxuICB0aGlzLmxfZGVzYyAgID0gbnVsbDsgICAgICAgICAvKiBkZXNjLiBmb3IgbGl0ZXJhbCB0cmVlICovXG4gIHRoaXMuZF9kZXNjICAgPSBudWxsOyAgICAgICAgIC8qIGRlc2MuIGZvciBkaXN0YW5jZSB0cmVlICovXG4gIHRoaXMuYmxfZGVzYyAgPSBudWxsOyAgICAgICAgIC8qIGRlc2MuIGZvciBiaXQgbGVuZ3RoIHRyZWUgKi9cblxuICAvL3VzaCBibF9jb3VudFtNQVhfQklUUysxXTtcbiAgdGhpcy5ibF9jb3VudCA9IG5ldyB1dGlscy5CdWYxNihNQVhfQklUUyArIDEpO1xuICAvKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoIGZvciBhbiBvcHRpbWFsIHRyZWUgKi9cblxuICAvL2ludCBoZWFwWzIqTF9DT0RFUysxXTsgICAgICAvKiBoZWFwIHVzZWQgdG8gYnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgKi9cbiAgdGhpcy5oZWFwID0gbmV3IHV0aWxzLkJ1ZjE2KDIgKiBMX0NPREVTICsgMSk7ICAvKiBoZWFwIHVzZWQgdG8gYnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgKi9cbiAgemVybyh0aGlzLmhlYXApO1xuXG4gIHRoaXMuaGVhcF9sZW4gPSAwOyAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGVhcCAqL1xuICB0aGlzLmhlYXBfbWF4ID0gMDsgICAgICAgICAgICAgICAvKiBlbGVtZW50IG9mIGxhcmdlc3QgZnJlcXVlbmN5ICovXG4gIC8qIFRoZSBzb25zIG9mIGhlYXBbbl0gYXJlIGhlYXBbMipuXSBhbmQgaGVhcFsyKm4rMV0uIGhlYXBbMF0gaXMgbm90IHVzZWQuXG4gICAqIFRoZSBzYW1lIGhlYXAgYXJyYXkgaXMgdXNlZCB0byBidWlsZCBhbGwgdHJlZXMuXG4gICAqL1xuXG4gIHRoaXMuZGVwdGggPSBuZXcgdXRpbHMuQnVmMTYoMiAqIExfQ09ERVMgKyAxKTsgLy91Y2ggZGVwdGhbMipMX0NPREVTKzFdO1xuICB6ZXJvKHRoaXMuZGVwdGgpO1xuICAvKiBEZXB0aCBvZiBlYWNoIHN1YnRyZWUgdXNlZCBhcyB0aWUgYnJlYWtlciBmb3IgdHJlZXMgb2YgZXF1YWwgZnJlcXVlbmN5XG4gICAqL1xuXG4gIHRoaXMubF9idWYgPSAwOyAgICAgICAgICAvKiBidWZmZXIgaW5kZXggZm9yIGxpdGVyYWxzIG9yIGxlbmd0aHMgKi9cblxuICB0aGlzLmxpdF9idWZzaXplID0gMDtcbiAgLyogU2l6ZSBvZiBtYXRjaCBidWZmZXIgZm9yIGxpdGVyYWxzL2xlbmd0aHMuICBUaGVyZSBhcmUgNCByZWFzb25zIGZvclxuICAgKiBsaW1pdGluZyBsaXRfYnVmc2l6ZSB0byA2NEs6XG4gICAqICAgLSBmcmVxdWVuY2llcyBjYW4gYmUga2VwdCBpbiAxNiBiaXQgY291bnRlcnNcbiAgICogICAtIGlmIGNvbXByZXNzaW9uIGlzIG5vdCBzdWNjZXNzZnVsIGZvciB0aGUgZmlyc3QgYmxvY2ssIGFsbCBpbnB1dFxuICAgKiAgICAgZGF0YSBpcyBzdGlsbCBpbiB0aGUgd2luZG93IHNvIHdlIGNhbiBzdGlsbCBlbWl0IGEgc3RvcmVkIGJsb2NrIGV2ZW5cbiAgICogICAgIHdoZW4gaW5wdXQgY29tZXMgZnJvbSBzdGFuZGFyZCBpbnB1dC4gIChUaGlzIGNhbiBhbHNvIGJlIGRvbmUgZm9yXG4gICAqICAgICBhbGwgYmxvY2tzIGlmIGxpdF9idWZzaXplIGlzIG5vdCBncmVhdGVyIHRoYW4gMzJLLilcbiAgICogICAtIGlmIGNvbXByZXNzaW9uIGlzIG5vdCBzdWNjZXNzZnVsIGZvciBhIGZpbGUgc21hbGxlciB0aGFuIDY0Sywgd2UgY2FuXG4gICAqICAgICBldmVuIGVtaXQgYSBzdG9yZWQgZmlsZSBpbnN0ZWFkIG9mIGEgc3RvcmVkIGJsb2NrIChzYXZpbmcgNSBieXRlcykuXG4gICAqICAgICBUaGlzIGlzIGFwcGxpY2FibGUgb25seSBmb3IgemlwIChub3QgZ3ppcCBvciB6bGliKS5cbiAgICogICAtIGNyZWF0aW5nIG5ldyBIdWZmbWFuIHRyZWVzIGxlc3MgZnJlcXVlbnRseSBtYXkgbm90IHByb3ZpZGUgZmFzdFxuICAgKiAgICAgYWRhcHRhdGlvbiB0byBjaGFuZ2VzIGluIHRoZSBpbnB1dCBkYXRhIHN0YXRpc3RpY3MuIChUYWtlIGZvclxuICAgKiAgICAgZXhhbXBsZSBhIGJpbmFyeSBmaWxlIHdpdGggcG9vcmx5IGNvbXByZXNzaWJsZSBjb2RlIGZvbGxvd2VkIGJ5XG4gICAqICAgICBhIGhpZ2hseSBjb21wcmVzc2libGUgc3RyaW5nIHRhYmxlLikgU21hbGxlciBidWZmZXIgc2l6ZXMgZ2l2ZVxuICAgKiAgICAgZmFzdCBhZGFwdGF0aW9uIGJ1dCBoYXZlIG9mIGNvdXJzZSB0aGUgb3ZlcmhlYWQgb2YgdHJhbnNtaXR0aW5nXG4gICAqICAgICB0cmVlcyBtb3JlIGZyZXF1ZW50bHkuXG4gICAqICAgLSBJIGNhbid0IGNvdW50IGFib3ZlIDRcbiAgICovXG5cbiAgdGhpcy5sYXN0X2xpdCA9IDA7ICAgICAgLyogcnVubmluZyBpbmRleCBpbiBsX2J1ZiAqL1xuXG4gIHRoaXMuZF9idWYgPSAwO1xuICAvKiBCdWZmZXIgaW5kZXggZm9yIGRpc3RhbmNlcy4gVG8gc2ltcGxpZnkgdGhlIGNvZGUsIGRfYnVmIGFuZCBsX2J1ZiBoYXZlXG4gICAqIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cy4gVG8gdXNlIGRpZmZlcmVudCBsZW5ndGhzLCBhbiBleHRyYSBmbGFnXG4gICAqIGFycmF5IHdvdWxkIGJlIG5lY2Vzc2FyeS5cbiAgICovXG5cbiAgdGhpcy5vcHRfbGVuID0gMDsgICAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggb3B0aW1hbCB0cmVlcyAqL1xuICB0aGlzLnN0YXRpY19sZW4gPSAwOyAgICAvKiBiaXQgbGVuZ3RoIG9mIGN1cnJlbnQgYmxvY2sgd2l0aCBzdGF0aWMgdHJlZXMgKi9cbiAgdGhpcy5tYXRjaGVzID0gMDsgICAgICAgLyogbnVtYmVyIG9mIHN0cmluZyBtYXRjaGVzIGluIGN1cnJlbnQgYmxvY2sgKi9cbiAgdGhpcy5pbnNlcnQgPSAwOyAgICAgICAgLyogYnl0ZXMgYXQgZW5kIG9mIHdpbmRvdyBsZWZ0IHRvIGluc2VydCAqL1xuXG5cbiAgdGhpcy5iaV9idWYgPSAwO1xuICAvKiBPdXRwdXQgYnVmZmVyLiBiaXRzIGFyZSBpbnNlcnRlZCBzdGFydGluZyBhdCB0aGUgYm90dG9tIChsZWFzdFxuICAgKiBzaWduaWZpY2FudCBiaXRzKS5cbiAgICovXG4gIHRoaXMuYmlfdmFsaWQgPSAwO1xuICAvKiBOdW1iZXIgb2YgdmFsaWQgYml0cyBpbiBiaV9idWYuICBBbGwgYml0cyBhYm92ZSB0aGUgbGFzdCB2YWxpZCBiaXRcbiAgICogYXJlIGFsd2F5cyB6ZXJvLlxuICAgKi9cblxuICAvLyBVc2VkIGZvciB3aW5kb3cgbWVtb3J5IGluaXQuIFdlIHNhZmVseSBpZ25vcmUgaXQgZm9yIEpTLiBUaGF0IG1ha2VzXG4gIC8vIHNlbnNlIG9ubHkgZm9yIHBvaW50ZXJzIGFuZCBtZW1vcnkgY2hlY2sgdG9vbHMuXG4gIC8vdGhpcy5oaWdoX3dhdGVyID0gMDtcbiAgLyogSGlnaCB3YXRlciBtYXJrIG9mZnNldCBpbiB3aW5kb3cgZm9yIGluaXRpYWxpemVkIGJ5dGVzIC0tIGJ5dGVzIGFib3ZlXG4gICAqIHRoaXMgYXJlIHNldCB0byB6ZXJvIGluIG9yZGVyIHRvIGF2b2lkIG1lbW9yeSBjaGVjayB3YXJuaW5ncyB3aGVuXG4gICAqIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMgYWNjZXNzIGJ5dGVzIHBhc3QgdGhlIGlucHV0LiAgVGhpcyBpcyB0aGVuXG4gICAqIHVwZGF0ZWQgdG8gdGhlIG5ldyBoaWdoIHdhdGVyIG1hcmsuXG4gICAqL1xufVxuXG5cbmZ1bmN0aW9uIGRlZmxhdGVSZXNldEtlZXAoc3RybSkge1xuICB2YXIgcztcblxuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKTtcbiAgfVxuXG4gIHN0cm0udG90YWxfaW4gPSBzdHJtLnRvdGFsX291dCA9IDA7XG4gIHN0cm0uZGF0YV90eXBlID0gWl9VTktOT1dOO1xuXG4gIHMgPSBzdHJtLnN0YXRlO1xuICBzLnBlbmRpbmcgPSAwO1xuICBzLnBlbmRpbmdfb3V0ID0gMDtcblxuICBpZiAocy53cmFwIDwgMCkge1xuICAgIHMud3JhcCA9IC1zLndyYXA7XG4gICAgLyogd2FzIG1hZGUgbmVnYXRpdmUgYnkgZGVmbGF0ZSguLi4sIFpfRklOSVNIKTsgKi9cbiAgfVxuICBzLnN0YXR1cyA9IChzLndyYXAgPyBJTklUX1NUQVRFIDogQlVTWV9TVEFURSk7XG4gIHN0cm0uYWRsZXIgPSAocy53cmFwID09PSAyKSA/XG4gICAgMCAgLy8gY3JjMzIoMCwgWl9OVUxMLCAwKVxuICA6XG4gICAgMTsgLy8gYWRsZXIzMigwLCBaX05VTEwsIDApXG4gIHMubGFzdF9mbHVzaCA9IFpfTk9fRkxVU0g7XG4gIHRyZWVzLl90cl9pbml0KHMpO1xuICByZXR1cm4gWl9PSztcbn1cblxuXG5mdW5jdGlvbiBkZWZsYXRlUmVzZXQoc3RybSkge1xuICB2YXIgcmV0ID0gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKTtcbiAgaWYgKHJldCA9PT0gWl9PSykge1xuICAgIGxtX2luaXQoc3RybS5zdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuXG5mdW5jdGlvbiBkZWZsYXRlU2V0SGVhZGVyKHN0cm0sIGhlYWQpIHtcbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBpZiAoc3RybS5zdGF0ZS53cmFwICE9PSAyKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBzdHJtLnN0YXRlLmd6aGVhZCA9IGhlYWQ7XG4gIHJldHVybiBaX09LO1xufVxuXG5cbmZ1bmN0aW9uIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpIHtcbiAgaWYgKCFzdHJtKSB7IC8vID09PSBaX05VTExcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cbiAgdmFyIHdyYXAgPSAxO1xuXG4gIGlmIChsZXZlbCA9PT0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OKSB7XG4gICAgbGV2ZWwgPSA2O1xuICB9XG5cbiAgaWYgKHdpbmRvd0JpdHMgPCAwKSB7IC8qIHN1cHByZXNzIHpsaWIgd3JhcHBlciAqL1xuICAgIHdyYXAgPSAwO1xuICAgIHdpbmRvd0JpdHMgPSAtd2luZG93Qml0cztcbiAgfVxuXG4gIGVsc2UgaWYgKHdpbmRvd0JpdHMgPiAxNSkge1xuICAgIHdyYXAgPSAyOyAgICAgICAgICAgLyogd3JpdGUgZ3ppcCB3cmFwcGVyIGluc3RlYWQgKi9cbiAgICB3aW5kb3dCaXRzIC09IDE2O1xuICB9XG5cblxuICBpZiAobWVtTGV2ZWwgPCAxIHx8IG1lbUxldmVsID4gTUFYX01FTV9MRVZFTCB8fCBtZXRob2QgIT09IFpfREVGTEFURUQgfHxcbiAgICB3aW5kb3dCaXRzIDwgOCB8fCB3aW5kb3dCaXRzID4gMTUgfHwgbGV2ZWwgPCAwIHx8IGxldmVsID4gOSB8fFxuICAgIHN0cmF0ZWd5IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQpIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKTtcbiAgfVxuXG5cbiAgaWYgKHdpbmRvd0JpdHMgPT09IDgpIHtcbiAgICB3aW5kb3dCaXRzID0gOTtcbiAgfVxuICAvKiB1bnRpbCAyNTYtYnl0ZSB3aW5kb3cgYnVnIGZpeGVkICovXG5cbiAgdmFyIHMgPSBuZXcgRGVmbGF0ZVN0YXRlKCk7XG5cbiAgc3RybS5zdGF0ZSA9IHM7XG4gIHMuc3RybSA9IHN0cm07XG5cbiAgcy53cmFwID0gd3JhcDtcbiAgcy5nemhlYWQgPSBudWxsO1xuICBzLndfYml0cyA9IHdpbmRvd0JpdHM7XG4gIHMud19zaXplID0gMSA8PCBzLndfYml0cztcbiAgcy53X21hc2sgPSBzLndfc2l6ZSAtIDE7XG5cbiAgcy5oYXNoX2JpdHMgPSBtZW1MZXZlbCArIDc7XG4gIHMuaGFzaF9zaXplID0gMSA8PCBzLmhhc2hfYml0cztcbiAgcy5oYXNoX21hc2sgPSBzLmhhc2hfc2l6ZSAtIDE7XG4gIHMuaGFzaF9zaGlmdCA9IH5+KChzLmhhc2hfYml0cyArIE1JTl9NQVRDSCAtIDEpIC8gTUlOX01BVENIKTtcblxuICBzLndpbmRvdyA9IG5ldyB1dGlscy5CdWY4KHMud19zaXplICogMik7XG4gIHMuaGVhZCA9IG5ldyB1dGlscy5CdWYxNihzLmhhc2hfc2l6ZSk7XG4gIHMucHJldiA9IG5ldyB1dGlscy5CdWYxNihzLndfc2l6ZSk7XG5cbiAgLy8gRG9uJ3QgbmVlZCBtZW0gaW5pdCBtYWdpYyBmb3IgSlMuXG4gIC8vcy5oaWdoX3dhdGVyID0gMDsgIC8qIG5vdGhpbmcgd3JpdHRlbiB0byBzLT53aW5kb3cgeWV0ICovXG5cbiAgcy5saXRfYnVmc2l6ZSA9IDEgPDwgKG1lbUxldmVsICsgNik7IC8qIDE2SyBlbGVtZW50cyBieSBkZWZhdWx0ICovXG5cbiAgcy5wZW5kaW5nX2J1Zl9zaXplID0gcy5saXRfYnVmc2l6ZSAqIDQ7XG5cbiAgLy9vdmVybGF5ID0gKHVzaGYgKikgWkFMTE9DKHN0cm0sIHMtPmxpdF9idWZzaXplLCBzaXplb2YodXNoKSsyKTtcbiAgLy9zLT5wZW5kaW5nX2J1ZiA9ICh1Y2hmICopIG92ZXJsYXk7XG4gIHMucGVuZGluZ19idWYgPSBuZXcgdXRpbHMuQnVmOChzLnBlbmRpbmdfYnVmX3NpemUpO1xuXG4gIC8vIEl0IGlzIG9mZnNldCBmcm9tIGBzLnBlbmRpbmdfYnVmYCAoc2l6ZSBpcyBgcy5saXRfYnVmc2l6ZSAqIDJgKVxuICAvL3MtPmRfYnVmID0gb3ZlcmxheSArIHMtPmxpdF9idWZzaXplL3NpemVvZih1c2gpO1xuICBzLmRfYnVmID0gMSAqIHMubGl0X2J1ZnNpemU7XG5cbiAgLy9zLT5sX2J1ZiA9IHMtPnBlbmRpbmdfYnVmICsgKDErc2l6ZW9mKHVzaCkpKnMtPmxpdF9idWZzaXplO1xuICBzLmxfYnVmID0gKDEgKyAyKSAqIHMubGl0X2J1ZnNpemU7XG5cbiAgcy5sZXZlbCA9IGxldmVsO1xuICBzLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7XG4gIHMubWV0aG9kID0gbWV0aG9kO1xuXG4gIHJldHVybiBkZWZsYXRlUmVzZXQoc3RybSk7XG59XG5cbmZ1bmN0aW9uIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSB7XG4gIHJldHVybiBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIFpfREVGTEFURUQsIE1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZKTtcbn1cblxuXG5mdW5jdGlvbiBkZWZsYXRlKHN0cm0sIGZsdXNoKSB7XG4gIHZhciBvbGRfZmx1c2gsIHM7XG4gIHZhciBiZWcsIHZhbDsgLy8gZm9yIGd6aXAgaGVhZGVyIHdyaXRlIG9ubHlcblxuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUgfHxcbiAgICBmbHVzaCA+IFpfQkxPQ0sgfHwgZmx1c2ggPCAwKSB7XG4gICAgcmV0dXJuIHN0cm0gPyBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpIDogWl9TVFJFQU1fRVJST1I7XG4gIH1cblxuICBzID0gc3RybS5zdGF0ZTtcblxuICBpZiAoIXN0cm0ub3V0cHV0IHx8XG4gICAgICAoIXN0cm0uaW5wdXQgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkgfHxcbiAgICAgIChzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIGZsdXNoICE9PSBaX0ZJTklTSCkpIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIChzdHJtLmF2YWlsX291dCA9PT0gMCkgPyBaX0JVRl9FUlJPUiA6IFpfU1RSRUFNX0VSUk9SKTtcbiAgfVxuXG4gIHMuc3RybSA9IHN0cm07IC8qIGp1c3QgaW4gY2FzZSAqL1xuICBvbGRfZmx1c2ggPSBzLmxhc3RfZmx1c2g7XG4gIHMubGFzdF9mbHVzaCA9IGZsdXNoO1xuXG4gIC8qIFdyaXRlIHRoZSBoZWFkZXIgKi9cbiAgaWYgKHMuc3RhdHVzID09PSBJTklUX1NUQVRFKSB7XG5cbiAgICBpZiAocy53cmFwID09PSAyKSB7IC8vIEdaSVAgaGVhZGVyXG4gICAgICBzdHJtLmFkbGVyID0gMDsgIC8vY3JjMzIoMEwsIFpfTlVMTCwgMCk7XG4gICAgICBwdXRfYnl0ZShzLCAzMSk7XG4gICAgICBwdXRfYnl0ZShzLCAxMzkpO1xuICAgICAgcHV0X2J5dGUocywgOCk7XG4gICAgICBpZiAoIXMuZ3poZWFkKSB7IC8vIHMtPmd6aGVhZCA9PSBaX05VTExcbiAgICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgICBwdXRfYnl0ZShzLCAwKTtcbiAgICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgICBwdXRfYnl0ZShzLCBzLmxldmVsID09PSA5ID8gMiA6XG4gICAgICAgICAgICAgICAgICAgIChzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyID9cbiAgICAgICAgICAgICAgICAgICAgIDQgOiAwKSk7XG4gICAgICAgIHB1dF9ieXRlKHMsIE9TX0NPREUpO1xuICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRleHQgPyAxIDogMCkgK1xuICAgICAgICAgICAgICAgICAgICAocy5nemhlYWQuaGNyYyA/IDIgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgICghcy5nemhlYWQuZXh0cmEgPyAwIDogNCkgK1xuICAgICAgICAgICAgICAgICAgICAoIXMuZ3poZWFkLm5hbWUgPyAwIDogOCkgK1xuICAgICAgICAgICAgICAgICAgICAoIXMuZ3poZWFkLmNvbW1lbnQgPyAwIDogMTYpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGltZSA+PiA4KSAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGltZSA+PiAxNikgJiAweGZmKTtcbiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRpbWUgPj4gMjQpICYgMHhmZik7XG4gICAgICAgIHB1dF9ieXRlKHMsIHMubGV2ZWwgPT09IDkgPyAyIDpcbiAgICAgICAgICAgICAgICAgICAgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgP1xuICAgICAgICAgICAgICAgICAgICAgNCA6IDApKTtcbiAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQub3MgJiAweGZmKTtcbiAgICAgICAgaWYgKHMuZ3poZWFkLmV4dHJhICYmIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkge1xuICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDB4ZmYpO1xuICAgICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC5leHRyYS5sZW5ndGggPj4gOCkgJiAweGZmKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocy5nemhlYWQuaGNyYykge1xuICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcsIDApO1xuICAgICAgICB9XG4gICAgICAgIHMuZ3ppbmRleCA9IDA7XG4gICAgICAgIHMuc3RhdHVzID0gRVhUUkFfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgLy8gREVGTEFURSBoZWFkZXJcbiAgICB7XG4gICAgICB2YXIgaGVhZGVyID0gKFpfREVGTEFURUQgKyAoKHMud19iaXRzIC0gOCkgPDwgNCkpIDw8IDg7XG4gICAgICB2YXIgbGV2ZWxfZmxhZ3MgPSAtMTtcblxuICAgICAgaWYgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIpIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAwO1xuICAgICAgfSBlbHNlIGlmIChzLmxldmVsIDwgNikge1xuICAgICAgICBsZXZlbF9mbGFncyA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHMubGV2ZWwgPT09IDYpIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV2ZWxfZmxhZ3MgPSAzO1xuICAgICAgfVxuICAgICAgaGVhZGVyIHw9IChsZXZlbF9mbGFncyA8PCA2KTtcbiAgICAgIGlmIChzLnN0cnN0YXJ0ICE9PSAwKSB7IGhlYWRlciB8PSBQUkVTRVRfRElDVDsgfVxuICAgICAgaGVhZGVyICs9IDMxIC0gKGhlYWRlciAlIDMxKTtcblxuICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuICAgICAgcHV0U2hvcnRNU0IocywgaGVhZGVyKTtcblxuICAgICAgLyogU2F2ZSB0aGUgYWRsZXIzMiBvZiB0aGUgcHJlc2V0IGRpY3Rpb25hcnk6ICovXG4gICAgICBpZiAocy5zdHJzdGFydCAhPT0gMCkge1xuICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyID4+PiAxNik7XG4gICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiAweGZmZmYpO1xuICAgICAgfVxuICAgICAgc3RybS5hZGxlciA9IDE7IC8vIGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7XG4gICAgfVxuICB9XG5cbi8vI2lmZGVmIEdaSVBcbiAgaWYgKHMuc3RhdHVzID09PSBFWFRSQV9TVEFURSkge1xuICAgIGlmIChzLmd6aGVhZC5leHRyYS8qICE9IFpfTlVMTCovKSB7XG4gICAgICBiZWcgPSBzLnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovXG5cbiAgICAgIHdoaWxlIChzLmd6aW5kZXggPCAocy5nemhlYWQuZXh0cmEubGVuZ3RoICYgMHhmZmZmKSkge1xuICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICAgICAgYmVnID0gcy5wZW5kaW5nO1xuICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhW3MuZ3ppbmRleF0gJiAweGZmKTtcbiAgICAgICAgcy5nemluZGV4Kys7XG4gICAgICB9XG4gICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmd6aW5kZXggPT09IHMuZ3poZWFkLmV4dHJhLmxlbmd0aCkge1xuICAgICAgICBzLmd6aW5kZXggPSAwO1xuICAgICAgICBzLnN0YXR1cyA9IE5BTUVfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcy5zdGF0dXMgPSBOQU1FX1NUQVRFO1xuICAgIH1cbiAgfVxuICBpZiAocy5zdGF0dXMgPT09IE5BTUVfU1RBVEUpIHtcbiAgICBpZiAocy5nemhlYWQubmFtZS8qICE9IFpfTlVMTCovKSB7XG4gICAgICBiZWcgPSBzLnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovXG4gICAgICAvL2ludCB2YWw7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgICAgICAgIGJlZyA9IHMucGVuZGluZztcbiAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICAgIHZhbCA9IDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSlMgc3BlY2lmaWM6IGxpdHRsZSBtYWdpYyB0byBhZGQgemVybyB0ZXJtaW5hdG9yIHRvIGVuZCBvZiBzdHJpbmdcbiAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLm5hbWUubGVuZ3RoKSB7XG4gICAgICAgICAgdmFsID0gcy5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKSAmIDB4ZmY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gMDtcbiAgICAgICAgfVxuICAgICAgICBwdXRfYnl0ZShzLCB2YWwpO1xuICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTtcblxuICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7XG4gICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsID09PSAwKSB7XG4gICAgICAgIHMuZ3ppbmRleCA9IDA7XG4gICAgICAgIHMuc3RhdHVzID0gQ09NTUVOVF9TVEFURTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzLnN0YXR1cyA9IENPTU1FTlRfU1RBVEU7XG4gICAgfVxuICB9XG4gIGlmIChzLnN0YXR1cyA9PT0gQ09NTUVOVF9TVEFURSkge1xuICAgIGlmIChzLmd6aGVhZC5jb21tZW50LyogIT0gWl9OVUxMKi8pIHtcbiAgICAgIGJlZyA9IHMucGVuZGluZzsgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi9cbiAgICAgIC8vaW50IHZhbDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICAgICAgYmVnID0gcy5wZW5kaW5nO1xuICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgICAgdmFsID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBKUyBzcGVjaWZpYzogbGl0dGxlIG1hZ2ljIHRvIGFkZCB6ZXJvIHRlcm1pbmF0b3IgdG8gZW5kIG9mIHN0cmluZ1xuICAgICAgICBpZiAocy5nemluZGV4IDwgcy5nemhlYWQuY29tbWVudC5sZW5ndGgpIHtcbiAgICAgICAgICB2YWwgPSBzLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQocy5nemluZGV4KyspICYgMHhmZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7XG4gICAgICB9IHdoaWxlICh2YWwgIT09IDApO1xuXG4gICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWwgPT09IDApIHtcbiAgICAgICAgcy5zdGF0dXMgPSBIQ1JDX1NUQVRFO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHMuc3RhdHVzID0gSENSQ19TVEFURTtcbiAgICB9XG4gIH1cbiAgaWYgKHMuc3RhdHVzID09PSBIQ1JDX1NUQVRFKSB7XG4gICAgaWYgKHMuZ3poZWFkLmhjcmMpIHtcbiAgICAgIGlmIChzLnBlbmRpbmcgKyAyID4gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICB9XG4gICAgICBpZiAocy5wZW5kaW5nICsgMiA8PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAoc3RybS5hZGxlciA+PiA4KSAmIDB4ZmYpO1xuICAgICAgICBzdHJtLmFkbGVyID0gMDsgLy9jcmMzMigwTCwgWl9OVUxMLCAwKTtcbiAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTtcbiAgICB9XG4gIH1cbi8vI2VuZGlmXG5cbiAgLyogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZSAqL1xuICBpZiAocy5wZW5kaW5nICE9PSAwKSB7XG4gICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIC8qIFNpbmNlIGF2YWlsX291dCBpcyAwLCBkZWZsYXRlIHdpbGwgYmUgY2FsbGVkIGFnYWluIHdpdGhcbiAgICAgICAqIG1vcmUgb3V0cHV0IHNwYWNlLCBidXQgcG9zc2libHkgd2l0aCBib3RoIHBlbmRpbmcgYW5kXG4gICAgICAgKiBhdmFpbF9pbiBlcXVhbCB0byB6ZXJvLiBUaGVyZSB3b24ndCBiZSBhbnl0aGluZyB0byBkbyxcbiAgICAgICAqIGJ1dCB0aGlzIGlzIG5vdCBhbiBlcnJvciBzaXR1YXRpb24gc28gbWFrZSBzdXJlIHdlXG4gICAgICAgKiByZXR1cm4gT0sgaW5zdGVhZCBvZiBCVUZfRVJST1IgYXQgbmV4dCBjYWxsIG9mIGRlZmxhdGU6XG4gICAgICAgKi9cbiAgICAgIHMubGFzdF9mbHVzaCA9IC0xO1xuICAgICAgcmV0dXJuIFpfT0s7XG4gICAgfVxuXG4gICAgLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNvbWV0aGluZyB0byBkbyBhbmQgYXZvaWQgZHVwbGljYXRlIGNvbnNlY3V0aXZlXG4gICAgICogZmx1c2hlcy4gRm9yIHJlcGVhdGVkIGFuZCB1c2VsZXNzIGNhbGxzIHdpdGggWl9GSU5JU0gsIHdlIGtlZXBcbiAgICAgKiByZXR1cm5pbmcgWl9TVFJFQU1fRU5EIGluc3RlYWQgb2YgWl9CVUZfRVJST1IuXG4gICAgICovXG4gIH0gZWxzZSBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiByYW5rKGZsdXNoKSA8PSByYW5rKG9sZF9mbHVzaCkgJiZcbiAgICBmbHVzaCAhPT0gWl9GSU5JU0gpIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTtcbiAgfVxuXG4gIC8qIFVzZXIgbXVzdCBub3QgcHJvdmlkZSBtb3JlIGlucHV0IGFmdGVyIHRoZSBmaXJzdCBGSU5JU0g6ICovXG4gIGlmIChzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIHN0cm0uYXZhaWxfaW4gIT09IDApIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfQlVGX0VSUk9SKTtcbiAgfVxuXG4gIC8qIFN0YXJ0IGEgbmV3IGJsb2NrIG9yIGNvbnRpbnVlIHRoZSBjdXJyZW50IG9uZS5cbiAgICovXG4gIGlmIChzdHJtLmF2YWlsX2luICE9PSAwIHx8IHMubG9va2FoZWFkICE9PSAwIHx8XG4gICAgKGZsdXNoICE9PSBaX05PX0ZMVVNIICYmIHMuc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUpKSB7XG4gICAgdmFyIGJzdGF0ZSA9IChzLnN0cmF0ZWd5ID09PSBaX0hVRkZNQU5fT05MWSkgPyBkZWZsYXRlX2h1ZmYocywgZmx1c2gpIDpcbiAgICAgIChzLnN0cmF0ZWd5ID09PSBaX1JMRSA/IGRlZmxhdGVfcmxlKHMsIGZsdXNoKSA6XG4gICAgICAgIGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZnVuYyhzLCBmbHVzaCkpO1xuXG4gICAgaWYgKGJzdGF0ZSA9PT0gQlNfRklOSVNIX1NUQVJURUQgfHwgYnN0YXRlID09PSBCU19GSU5JU0hfRE9ORSkge1xuICAgICAgcy5zdGF0dXMgPSBGSU5JU0hfU1RBVEU7XG4gICAgfVxuICAgIGlmIChic3RhdGUgPT09IEJTX05FRURfTU9SRSB8fCBic3RhdGUgPT09IEJTX0ZJTklTSF9TVEFSVEVEKSB7XG4gICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7XG4gICAgICAgIC8qIGF2b2lkIEJVRl9FUlJPUiBuZXh0IGNhbGwsIHNlZSBhYm92ZSAqL1xuICAgICAgfVxuICAgICAgcmV0dXJuIFpfT0s7XG4gICAgICAvKiBJZiBmbHVzaCAhPSBaX05PX0ZMVVNIICYmIGF2YWlsX291dCA9PSAwLCB0aGUgbmV4dCBjYWxsXG4gICAgICAgKiBvZiBkZWZsYXRlIHNob3VsZCB1c2UgdGhlIHNhbWUgZmx1c2ggcGFyYW1ldGVyIHRvIG1ha2Ugc3VyZVxuICAgICAgICogdGhhdCB0aGUgZmx1c2ggaXMgY29tcGxldGUuIFNvIHdlIGRvbid0IGhhdmUgdG8gb3V0cHV0IGFuXG4gICAgICAgKiBlbXB0eSBibG9jayBoZXJlLCB0aGlzIHdpbGwgYmUgZG9uZSBhdCBuZXh0IGNhbGwuIFRoaXMgYWxzb1xuICAgICAgICogZW5zdXJlcyB0aGF0IGZvciBhIHZlcnkgc21hbGwgb3V0cHV0IGJ1ZmZlciwgd2UgZW1pdCBhdCBtb3N0XG4gICAgICAgKiBvbmUgZW1wdHkgYmxvY2suXG4gICAgICAgKi9cbiAgICB9XG4gICAgaWYgKGJzdGF0ZSA9PT0gQlNfQkxPQ0tfRE9ORSkge1xuICAgICAgaWYgKGZsdXNoID09PSBaX1BBUlRJQUxfRkxVU0gpIHtcbiAgICAgICAgdHJlZXMuX3RyX2FsaWduKHMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZmx1c2ggIT09IFpfQkxPQ0spIHsgLyogRlVMTF9GTFVTSCBvciBTWU5DX0ZMVVNIICovXG5cbiAgICAgICAgdHJlZXMuX3RyX3N0b3JlZF9ibG9jayhzLCAwLCAwLCBmYWxzZSk7XG4gICAgICAgIC8qIEZvciBhIGZ1bGwgZmx1c2gsIHRoaXMgZW1wdHkgYmxvY2sgd2lsbCBiZSByZWNvZ25pemVkXG4gICAgICAgICAqIGFzIGEgc3BlY2lhbCBtYXJrZXIgYnkgaW5mbGF0ZV9zeW5jKCkuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZmx1c2ggPT09IFpfRlVMTF9GTFVTSCkge1xuICAgICAgICAgIC8qKiogQ0xFQVJfSEFTSChzKTsgKioqLyAgICAgICAgICAgICAvKiBmb3JnZXQgaGlzdG9yeSAqL1xuICAgICAgICAgIHplcm8ocy5oZWFkKTsgLy8gRmlsbCB3aXRoIE5JTCAoPSAwKTtcblxuICAgICAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICAgICAgcy5zdHJzdGFydCA9IDA7XG4gICAgICAgICAgICBzLmJsb2NrX3N0YXJ0ID0gMDtcbiAgICAgICAgICAgIHMuaW5zZXJ0ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7IC8qIGF2b2lkIEJVRl9FUlJPUiBhdCBuZXh0IGNhbGwsIHNlZSBhYm92ZSAqL1xuICAgICAgICByZXR1cm4gWl9PSztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy9Bc3NlcnQoc3RybS0+YXZhaWxfb3V0ID4gMCwgXCJidWcyXCIpO1xuICAvL2lmIChzdHJtLmF2YWlsX291dCA8PSAwKSB7IHRocm93IG5ldyBFcnJvcihcImJ1ZzJcIik7fVxuXG4gIGlmIChmbHVzaCAhPT0gWl9GSU5JU0gpIHsgcmV0dXJuIFpfT0s7IH1cbiAgaWYgKHMud3JhcCA8PSAwKSB7IHJldHVybiBaX1NUUkVBTV9FTkQ7IH1cblxuICAvKiBXcml0ZSB0aGUgdHJhaWxlciAqL1xuICBpZiAocy53cmFwID09PSAyKSB7XG4gICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDgpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gMTYpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gMjQpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgc3RybS50b3RhbF9pbiAmIDB4ZmYpO1xuICAgIHB1dF9ieXRlKHMsIChzdHJtLnRvdGFsX2luID4+IDgpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0udG90YWxfaW4gPj4gMTYpICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0udG90YWxfaW4gPj4gMjQpICYgMHhmZik7XG4gIH1cbiAgZWxzZVxuICB7XG4gICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciA+Pj4gMTYpO1xuICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiAweGZmZmYpO1xuICB9XG5cbiAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgLyogSWYgYXZhaWxfb3V0IGlzIHplcm8sIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNhbGwgZGVmbGF0ZSBhZ2FpblxuICAgKiB0byBmbHVzaCB0aGUgcmVzdC5cbiAgICovXG4gIGlmIChzLndyYXAgPiAwKSB7IHMud3JhcCA9IC1zLndyYXA7IH1cbiAgLyogd3JpdGUgdGhlIHRyYWlsZXIgb25seSBvbmNlISAqL1xuICByZXR1cm4gcy5wZW5kaW5nICE9PSAwID8gWl9PSyA6IFpfU1RSRUFNX0VORDtcbn1cblxuZnVuY3Rpb24gZGVmbGF0ZUVuZChzdHJtKSB7XG4gIHZhciBzdGF0dXM7XG5cbiAgaWYgKCFzdHJtLyo9PSBaX05VTEwqLyB8fCAhc3RybS5zdGF0ZS8qPT0gWl9OVUxMKi8pIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cblxuICBzdGF0dXMgPSBzdHJtLnN0YXRlLnN0YXR1cztcbiAgaWYgKHN0YXR1cyAhPT0gSU5JVF9TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gRVhUUkFfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IE5BTUVfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IENPTU1FTlRfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IEhDUkNfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IEJVU1lfU1RBVEUgJiZcbiAgICBzdGF0dXMgIT09IEZJTklTSF9TVEFURVxuICApIHtcbiAgICByZXR1cm4gZXJyKHN0cm0sIFpfU1RSRUFNX0VSUk9SKTtcbiAgfVxuXG4gIHN0cm0uc3RhdGUgPSBudWxsO1xuXG4gIHJldHVybiBzdGF0dXMgPT09IEJVU1lfU1RBVEUgPyBlcnIoc3RybSwgWl9EQVRBX0VSUk9SKSA6IFpfT0s7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZXMgdGhlIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gYnl0ZVxuICogc2VxdWVuY2Ugd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LlxuICovXG5mdW5jdGlvbiBkZWZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5KSB7XG4gIHZhciBkaWN0TGVuZ3RoID0gZGljdGlvbmFyeS5sZW5ndGg7XG5cbiAgdmFyIHM7XG4gIHZhciBzdHIsIG47XG4gIHZhciB3cmFwO1xuICB2YXIgYXZhaWw7XG4gIHZhciBuZXh0O1xuICB2YXIgaW5wdXQ7XG4gIHZhciB0bXBEaWN0O1xuXG4gIGlmICghc3RybS8qPT0gWl9OVUxMKi8gfHwgIXN0cm0uc3RhdGUvKj09IFpfTlVMTCovKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgcyA9IHN0cm0uc3RhdGU7XG4gIHdyYXAgPSBzLndyYXA7XG5cbiAgaWYgKHdyYXAgPT09IDIgfHwgKHdyYXAgPT09IDEgJiYgcy5zdGF0dXMgIT09IElOSVRfU1RBVEUpIHx8IHMubG9va2FoZWFkKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgLyogd2hlbiB1c2luZyB6bGliIHdyYXBwZXJzLCBjb21wdXRlIEFkbGVyLTMyIGZvciBwcm92aWRlZCBkaWN0aW9uYXJ5ICovXG4gIGlmICh3cmFwID09PSAxKSB7XG4gICAgLyogYWRsZXIzMihzdHJtLT5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7ICovXG4gICAgc3RybS5hZGxlciA9IGFkbGVyMzIoc3RybS5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwgMCk7XG4gIH1cblxuICBzLndyYXAgPSAwOyAgIC8qIGF2b2lkIGNvbXB1dGluZyBBZGxlci0zMiBpbiByZWFkX2J1ZiAqL1xuXG4gIC8qIGlmIGRpY3Rpb25hcnkgd291bGQgZmlsbCB3aW5kb3csIGp1c3QgcmVwbGFjZSB0aGUgaGlzdG9yeSAqL1xuICBpZiAoZGljdExlbmd0aCA+PSBzLndfc2l6ZSkge1xuICAgIGlmICh3cmFwID09PSAwKSB7ICAgICAgICAgICAgLyogYWxyZWFkeSBlbXB0eSBvdGhlcndpc2UgKi9cbiAgICAgIC8qKiogQ0xFQVJfSEFTSChzKTsgKioqL1xuICAgICAgemVybyhzLmhlYWQpOyAvLyBGaWxsIHdpdGggTklMICg9IDApO1xuICAgICAgcy5zdHJzdGFydCA9IDA7XG4gICAgICBzLmJsb2NrX3N0YXJ0ID0gMDtcbiAgICAgIHMuaW5zZXJ0ID0gMDtcbiAgICB9XG4gICAgLyogdXNlIHRoZSB0YWlsICovXG4gICAgLy8gZGljdGlvbmFyeSA9IGRpY3Rpb25hcnkuc2xpY2UoZGljdExlbmd0aCAtIHMud19zaXplKTtcbiAgICB0bXBEaWN0ID0gbmV3IHV0aWxzLkJ1Zjgocy53X3NpemUpO1xuICAgIHV0aWxzLmFycmF5U2V0KHRtcERpY3QsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGggLSBzLndfc2l6ZSwgcy53X3NpemUsIDApO1xuICAgIGRpY3Rpb25hcnkgPSB0bXBEaWN0O1xuICAgIGRpY3RMZW5ndGggPSBzLndfc2l6ZTtcbiAgfVxuICAvKiBpbnNlcnQgZGljdGlvbmFyeSBpbnRvIHdpbmRvdyBhbmQgaGFzaCAqL1xuICBhdmFpbCA9IHN0cm0uYXZhaWxfaW47XG4gIG5leHQgPSBzdHJtLm5leHRfaW47XG4gIGlucHV0ID0gc3RybS5pbnB1dDtcbiAgc3RybS5hdmFpbF9pbiA9IGRpY3RMZW5ndGg7XG4gIHN0cm0ubmV4dF9pbiA9IDA7XG4gIHN0cm0uaW5wdXQgPSBkaWN0aW9uYXJ5O1xuICBmaWxsX3dpbmRvdyhzKTtcbiAgd2hpbGUgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkge1xuICAgIHN0ciA9IHMuc3Ryc3RhcnQ7XG4gICAgbiA9IHMubG9va2FoZWFkIC0gKE1JTl9NQVRDSCAtIDEpO1xuICAgIGRvIHtcbiAgICAgIC8qIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsgKi9cbiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrO1xuXG4gICAgICBzLnByZXZbc3RyICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuXG4gICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzdHI7XG4gICAgICBzdHIrKztcbiAgICB9IHdoaWxlICgtLW4pO1xuICAgIHMuc3Ryc3RhcnQgPSBzdHI7XG4gICAgcy5sb29rYWhlYWQgPSBNSU5fTUFUQ0ggLSAxO1xuICAgIGZpbGxfd2luZG93KHMpO1xuICB9XG4gIHMuc3Ryc3RhcnQgKz0gcy5sb29rYWhlYWQ7XG4gIHMuYmxvY2tfc3RhcnQgPSBzLnN0cnN0YXJ0O1xuICBzLmluc2VydCA9IHMubG9va2FoZWFkO1xuICBzLmxvb2thaGVhZCA9IDA7XG4gIHMubWF0Y2hfbGVuZ3RoID0gcy5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7XG4gIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgc3RybS5uZXh0X2luID0gbmV4dDtcbiAgc3RybS5pbnB1dCA9IGlucHV0O1xuICBzdHJtLmF2YWlsX2luID0gYXZhaWw7XG4gIHMud3JhcCA9IHdyYXA7XG4gIHJldHVybiBaX09LO1xufVxuXG5cbmV4cG9ydHMuZGVmbGF0ZUluaXQgPSBkZWZsYXRlSW5pdDtcbmV4cG9ydHMuZGVmbGF0ZUluaXQyID0gZGVmbGF0ZUluaXQyO1xuZXhwb3J0cy5kZWZsYXRlUmVzZXQgPSBkZWZsYXRlUmVzZXQ7XG5leHBvcnRzLmRlZmxhdGVSZXNldEtlZXAgPSBkZWZsYXRlUmVzZXRLZWVwO1xuZXhwb3J0cy5kZWZsYXRlU2V0SGVhZGVyID0gZGVmbGF0ZVNldEhlYWRlcjtcbmV4cG9ydHMuZGVmbGF0ZSA9IGRlZmxhdGU7XG5leHBvcnRzLmRlZmxhdGVFbmQgPSBkZWZsYXRlRW5kO1xuZXhwb3J0cy5kZWZsYXRlU2V0RGljdGlvbmFyeSA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5O1xuZXhwb3J0cy5kZWZsYXRlSW5mbyA9ICdwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpJztcblxuLyogTm90IGltcGxlbWVudGVkXG5leHBvcnRzLmRlZmxhdGVCb3VuZCA9IGRlZmxhdGVCb3VuZDtcbmV4cG9ydHMuZGVmbGF0ZUNvcHkgPSBkZWZsYXRlQ29weTtcbmV4cG9ydHMuZGVmbGF0ZVBhcmFtcyA9IGRlZmxhdGVQYXJhbXM7XG5leHBvcnRzLmRlZmxhdGVQZW5kaW5nID0gZGVmbGF0ZVBlbmRpbmc7XG5leHBvcnRzLmRlZmxhdGVQcmltZSA9IGRlZmxhdGVQcmltZTtcbmV4cG9ydHMuZGVmbGF0ZVR1bmUgPSBkZWZsYXRlVHVuZTtcbiovXG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIFNlZSBzdGF0ZSBkZWZzIGZyb20gaW5mbGF0ZS5qc1xudmFyIEJBRCA9IDMwOyAgICAgICAvKiBnb3QgYSBkYXRhIGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG52YXIgVFlQRSA9IDEyOyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIHR5cGUgYml0cywgaW5jbHVkaW5nIGxhc3QtZmxhZyBiaXQgKi9cblxuLypcbiAgIERlY29kZSBsaXRlcmFsLCBsZW5ndGgsIGFuZCBkaXN0YW5jZSBjb2RlcyBhbmQgd3JpdGUgb3V0IHRoZSByZXN1bHRpbmdcbiAgIGxpdGVyYWwgYW5kIG1hdGNoIGJ5dGVzIHVudGlsIGVpdGhlciBub3QgZW5vdWdoIGlucHV0IG9yIG91dHB1dCBpc1xuICAgYXZhaWxhYmxlLCBhbiBlbmQtb2YtYmxvY2sgaXMgZW5jb3VudGVyZWQsIG9yIGEgZGF0YSBlcnJvciBpcyBlbmNvdW50ZXJlZC5cbiAgIFdoZW4gbGFyZ2UgZW5vdWdoIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBhcmUgc3VwcGxpZWQgdG8gaW5mbGF0ZSgpLCBmb3JcbiAgIGV4YW1wbGUsIGEgMTZLIGlucHV0IGJ1ZmZlciBhbmQgYSA2NEsgb3V0cHV0IGJ1ZmZlciwgbW9yZSB0aGFuIDk1JSBvZiB0aGVcbiAgIGluZmxhdGUgZXhlY3V0aW9uIHRpbWUgaXMgc3BlbnQgaW4gdGhpcyByb3V0aW5lLlxuXG4gICBFbnRyeSBhc3N1bXB0aW9uczpcblxuICAgICAgICBzdGF0ZS5tb2RlID09PSBMRU5cbiAgICAgICAgc3RybS5hdmFpbF9pbiA+PSA2XG4gICAgICAgIHN0cm0uYXZhaWxfb3V0ID49IDI1OFxuICAgICAgICBzdGFydCA+PSBzdHJtLmF2YWlsX291dFxuICAgICAgICBzdGF0ZS5iaXRzIDwgOFxuXG4gICBPbiByZXR1cm4sIHN0YXRlLm1vZGUgaXMgb25lIG9mOlxuXG4gICAgICAgIExFTiAtLSByYW4gb3V0IG9mIGVub3VnaCBvdXRwdXQgc3BhY2Ugb3IgZW5vdWdoIGF2YWlsYWJsZSBpbnB1dFxuICAgICAgICBUWVBFIC0tIHJlYWNoZWQgZW5kIG9mIGJsb2NrIGNvZGUsIGluZmxhdGUoKSB0byBpbnRlcnByZXQgbmV4dCBibG9ja1xuICAgICAgICBCQUQgLS0gZXJyb3IgaW4gYmxvY2sgZGF0YVxuXG4gICBOb3RlczpcblxuICAgIC0gVGhlIG1heGltdW0gaW5wdXQgYml0cyB1c2VkIGJ5IGEgbGVuZ3RoL2Rpc3RhbmNlIHBhaXIgaXMgMTUgYml0cyBmb3IgdGhlXG4gICAgICBsZW5ndGggY29kZSwgNSBiaXRzIGZvciB0aGUgbGVuZ3RoIGV4dHJhLCAxNSBiaXRzIGZvciB0aGUgZGlzdGFuY2UgY29kZSxcbiAgICAgIGFuZCAxMyBiaXRzIGZvciB0aGUgZGlzdGFuY2UgZXh0cmEuICBUaGlzIHRvdGFscyA0OCBiaXRzLCBvciBzaXggYnl0ZXMuXG4gICAgICBUaGVyZWZvcmUgaWYgc3RybS5hdmFpbF9pbiA+PSA2LCB0aGVuIHRoZXJlIGlzIGVub3VnaCBpbnB1dCB0byBhdm9pZFxuICAgICAgY2hlY2tpbmcgZm9yIGF2YWlsYWJsZSBpbnB1dCB3aGlsZSBkZWNvZGluZy5cblxuICAgIC0gVGhlIG1heGltdW0gYnl0ZXMgdGhhdCBhIHNpbmdsZSBsZW5ndGgvZGlzdGFuY2UgcGFpciBjYW4gb3V0cHV0IGlzIDI1OFxuICAgICAgYnl0ZXMsIHdoaWNoIGlzIHRoZSBtYXhpbXVtIGxlbmd0aCB0aGF0IGNhbiBiZSBjb2RlZC4gIGluZmxhdGVfZmFzdCgpXG4gICAgICByZXF1aXJlcyBzdHJtLmF2YWlsX291dCA+PSAyNTggZm9yIGVhY2ggbG9vcCB0byBhdm9pZCBjaGVja2luZyBmb3JcbiAgICAgIG91dHB1dCBzcGFjZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmZsYXRlX2Zhc3Qoc3RybSwgc3RhcnQpIHtcbiAgdmFyIHN0YXRlO1xuICB2YXIgX2luOyAgICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5pbnB1dCAqL1xuICB2YXIgbGFzdDsgICAgICAgICAgICAgICAgICAgLyogaGF2ZSBlbm91Z2ggaW5wdXQgd2hpbGUgaW4gPCBsYXN0ICovXG4gIHZhciBfb3V0OyAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLm91dHB1dCAqL1xuICB2YXIgYmVnOyAgICAgICAgICAgICAgICAgICAgLyogaW5mbGF0ZSgpJ3MgaW5pdGlhbCBzdHJtLm91dHB1dCAqL1xuICB2YXIgZW5kOyAgICAgICAgICAgICAgICAgICAgLyogd2hpbGUgb3V0IDwgZW5kLCBlbm91Z2ggc3BhY2UgYXZhaWxhYmxlICovXG4vLyNpZmRlZiBJTkZMQVRFX1NUUklDVFxuICB2YXIgZG1heDsgICAgICAgICAgICAgICAgICAgLyogbWF4aW11bSBkaXN0YW5jZSBmcm9tIHpsaWIgaGVhZGVyICovXG4vLyNlbmRpZlxuICB2YXIgd3NpemU7ICAgICAgICAgICAgICAgICAgLyogd2luZG93IHNpemUgb3IgemVybyBpZiBub3QgdXNpbmcgd2luZG93ICovXG4gIHZhciB3aGF2ZTsgICAgICAgICAgICAgICAgICAvKiB2YWxpZCBieXRlcyBpbiB0aGUgd2luZG93ICovXG4gIHZhciB3bmV4dDsgICAgICAgICAgICAgICAgICAvKiB3aW5kb3cgd3JpdGUgaW5kZXggKi9cbiAgLy8gVXNlIGBzX3dpbmRvd2AgaW5zdGVhZCBgd2luZG93YCwgYXZvaWQgY29uZmxpY3Qgd2l0aCBpbnN0cnVtZW50YXRpb24gdG9vbHNcbiAgdmFyIHNfd2luZG93OyAgICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBzbGlkaW5nIHdpbmRvdywgaWYgd3NpemUgIT0gMCAqL1xuICB2YXIgaG9sZDsgICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5ob2xkICovXG4gIHZhciBiaXRzOyAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmJpdHMgKi9cbiAgdmFyIGxjb2RlOyAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0ubGVuY29kZSAqL1xuICB2YXIgZGNvZGU7ICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5kaXN0Y29kZSAqL1xuICB2YXIgbG1hc2s7ICAgICAgICAgICAgICAgICAgLyogbWFzayBmb3IgZmlyc3QgbGV2ZWwgb2YgbGVuZ3RoIGNvZGVzICovXG4gIHZhciBkbWFzazsgICAgICAgICAgICAgICAgICAvKiBtYXNrIGZvciBmaXJzdCBsZXZlbCBvZiBkaXN0YW5jZSBjb2RlcyAqL1xuICB2YXIgaGVyZTsgICAgICAgICAgICAgICAgICAgLyogcmV0cmlldmVkIHRhYmxlIGVudHJ5ICovXG4gIHZhciBvcDsgICAgICAgICAgICAgICAgICAgICAvKiBjb2RlIGJpdHMsIG9wZXJhdGlvbiwgZXh0cmEgYml0cywgb3IgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB3aW5kb3cgcG9zaXRpb24sIHdpbmRvdyBieXRlcyB0byBjb3B5ICovXG4gIHZhciBsZW47ICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaCBsZW5ndGgsIHVudXNlZCBieXRlcyAqL1xuICB2YXIgZGlzdDsgICAgICAgICAgICAgICAgICAgLyogbWF0Y2ggZGlzdGFuY2UgKi9cbiAgdmFyIGZyb207ICAgICAgICAgICAgICAgICAgIC8qIHdoZXJlIHRvIGNvcHkgbWF0Y2ggZnJvbSAqL1xuICB2YXIgZnJvbV9zb3VyY2U7XG5cblxuICB2YXIgaW5wdXQsIG91dHB1dDsgLy8gSlMgc3BlY2lmaWMsIGJlY2F1c2Ugd2UgaGF2ZSBubyBwb2ludGVyc1xuXG4gIC8qIGNvcHkgc3RhdGUgdG8gbG9jYWwgdmFyaWFibGVzICovXG4gIHN0YXRlID0gc3RybS5zdGF0ZTtcbiAgLy9oZXJlID0gc3RhdGUuaGVyZTtcbiAgX2luID0gc3RybS5uZXh0X2luO1xuICBpbnB1dCA9IHN0cm0uaW5wdXQ7XG4gIGxhc3QgPSBfaW4gKyAoc3RybS5hdmFpbF9pbiAtIDUpO1xuICBfb3V0ID0gc3RybS5uZXh0X291dDtcbiAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7XG4gIGJlZyA9IF9vdXQgLSAoc3RhcnQgLSBzdHJtLmF2YWlsX291dCk7XG4gIGVuZCA9IF9vdXQgKyAoc3RybS5hdmFpbF9vdXQgLSAyNTcpO1xuLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1RcbiAgZG1heCA9IHN0YXRlLmRtYXg7XG4vLyNlbmRpZlxuICB3c2l6ZSA9IHN0YXRlLndzaXplO1xuICB3aGF2ZSA9IHN0YXRlLndoYXZlO1xuICB3bmV4dCA9IHN0YXRlLnduZXh0O1xuICBzX3dpbmRvdyA9IHN0YXRlLndpbmRvdztcbiAgaG9sZCA9IHN0YXRlLmhvbGQ7XG4gIGJpdHMgPSBzdGF0ZS5iaXRzO1xuICBsY29kZSA9IHN0YXRlLmxlbmNvZGU7XG4gIGRjb2RlID0gc3RhdGUuZGlzdGNvZGU7XG4gIGxtYXNrID0gKDEgPDwgc3RhdGUubGVuYml0cykgLSAxO1xuICBkbWFzayA9ICgxIDw8IHN0YXRlLmRpc3RiaXRzKSAtIDE7XG5cblxuICAvKiBkZWNvZGUgbGl0ZXJhbHMgYW5kIGxlbmd0aC9kaXN0YW5jZXMgdW50aWwgZW5kLW9mLWJsb2NrIG9yIG5vdCBlbm91Z2hcbiAgICAgaW5wdXQgZGF0YSBvciBvdXRwdXQgc3BhY2UgKi9cblxuICB0b3A6XG4gIGRvIHtcbiAgICBpZiAoYml0cyA8IDE1KSB7XG4gICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgYml0cyArPSA4O1xuICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0cztcbiAgICAgIGJpdHMgKz0gODtcbiAgICB9XG5cbiAgICBoZXJlID0gbGNvZGVbaG9sZCAmIGxtYXNrXTtcblxuICAgIGRvbGVuOlxuICAgIGZvciAoOzspIHsgLy8gR290byBlbXVsYXRpb25cbiAgICAgIG9wID0gaGVyZSA+Pj4gMjQvKmhlcmUuYml0cyovO1xuICAgICAgaG9sZCA+Pj49IG9wO1xuICAgICAgYml0cyAtPSBvcDtcbiAgICAgIG9wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmYvKmhlcmUub3AqLztcbiAgICAgIGlmIChvcCA9PT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGl0ZXJhbCAqL1xuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgaGVyZS52YWwgPj0gMHgyMCAmJiBoZXJlLnZhbCA8IDB4N2YgP1xuICAgICAgICAvLyAgICAgICAgXCJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgJyVjJ1xcblwiIDpcbiAgICAgICAgLy8gICAgICAgIFwiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxcblwiLCBoZXJlLnZhbCkpO1xuICAgICAgICBvdXRwdXRbX291dCsrXSA9IGhlcmUgJiAweGZmZmYvKmhlcmUudmFsKi87XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChvcCAmIDE2KSB7ICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIGJhc2UgKi9cbiAgICAgICAgbGVuID0gaGVyZSAmIDB4ZmZmZi8qaGVyZS52YWwqLztcbiAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgKi9cbiAgICAgICAgaWYgKG9wKSB7XG4gICAgICAgICAgaWYgKGJpdHMgPCBvcCkge1xuICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0cztcbiAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuICs9IGhvbGQgJiAoKDEgPDwgb3ApIC0gMSk7XG4gICAgICAgICAgaG9sZCA+Pj49IG9wO1xuICAgICAgICAgIGJpdHMgLT0gb3A7XG4gICAgICAgIH1cbiAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBsZW5ndGggJXVcXG5cIiwgbGVuKSk7XG4gICAgICAgIGlmIChiaXRzIDwgMTUpIHtcbiAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICBoZXJlID0gZGNvZGVbaG9sZCAmIGRtYXNrXTtcblxuICAgICAgICBkb2Rpc3Q6XG4gICAgICAgIGZvciAoOzspIHsgLy8gZ290byBlbXVsYXRpb25cbiAgICAgICAgICBvcCA9IGhlcmUgPj4+IDI0LypoZXJlLmJpdHMqLztcbiAgICAgICAgICBob2xkID4+Pj0gb3A7XG4gICAgICAgICAgYml0cyAtPSBvcDtcbiAgICAgICAgICBvcCA9IChoZXJlID4+PiAxNikgJiAweGZmLypoZXJlLm9wKi87XG5cbiAgICAgICAgICBpZiAob3AgJiAxNikgeyAgICAgICAgICAgICAgICAgICAgICAvKiBkaXN0YW5jZSBiYXNlICovXG4gICAgICAgICAgICBkaXN0ID0gaGVyZSAmIDB4ZmZmZi8qaGVyZS52YWwqLztcbiAgICAgICAgICAgIG9wICY9IDE1OyAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgKi9cbiAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHtcbiAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0cztcbiAgICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7XG4gICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0cztcbiAgICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3QgKz0gaG9sZCAmICgoMSA8PCBvcCkgLSAxKTtcbi8vI2lmZGVmIElORkxBVEVfU1RSSUNUXG4gICAgICAgICAgICBpZiAoZGlzdCA+IGRtYXgpIHtcbiAgICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2snO1xuICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgICAgICBicmVhayB0b3A7XG4gICAgICAgICAgICB9XG4vLyNlbmRpZlxuICAgICAgICAgICAgaG9sZCA+Pj49IG9wO1xuICAgICAgICAgICAgYml0cyAtPSBvcDtcbiAgICAgICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJXVcXG5cIiwgZGlzdCkpO1xuICAgICAgICAgICAgb3AgPSBfb3V0IC0gYmVnOyAgICAgICAgICAgICAgICAvKiBtYXggZGlzdGFuY2UgaW4gb3V0cHV0ICovXG4gICAgICAgICAgICBpZiAoZGlzdCA+IG9wKSB7ICAgICAgICAgICAgICAgIC8qIHNlZSBpZiBjb3B5IGZyb20gd2luZG93ICovXG4gICAgICAgICAgICAgIG9wID0gZGlzdCAtIG9wOyAgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhY2sgaW4gd2luZG93ICovXG4gICAgICAgICAgICAgIGlmIChvcCA+IHdoYXZlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNhbmUpIHtcbiAgICAgICAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrJztcbiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICAgICAgICBicmVhayB0b3A7XG4gICAgICAgICAgICAgICAgfVxuXG4vLyAoISkgVGhpcyBibG9jayBpcyBkaXNhYmxlZCBpbiB6bGliIGRlZmFpbHRzLFxuLy8gZG9uJ3QgZW5hYmxlIGl0IGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eVxuLy8jaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSXG4vLyAgICAgICAgICAgICAgICBpZiAobGVuIDw9IG9wIC0gd2hhdmUpIHtcbi8vICAgICAgICAgICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gMDtcbi8vICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1sZW4pO1xuLy8gICAgICAgICAgICAgICAgICBjb250aW51ZSB0b3A7XG4vLyAgICAgICAgICAgICAgICB9XG4vLyAgICAgICAgICAgICAgICBsZW4gLT0gb3AgLSB3aGF2ZTtcbi8vICAgICAgICAgICAgICAgIGRvIHtcbi8vICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSAwO1xuLy8gICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCA+IHdoYXZlKTtcbi8vICAgICAgICAgICAgICAgIGlmIChvcCA9PT0gMCkge1xuLy8gICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7XG4vLyAgICAgICAgICAgICAgICAgIGRvIHtcbi8vICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuLy8gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7XG4vLyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHRvcDtcbi8vICAgICAgICAgICAgICAgIH1cbi8vI2VuZGlmXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZnJvbSA9IDA7IC8vIHdpbmRvdyBpbmRleFxuICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IHNfd2luZG93O1xuICAgICAgICAgICAgICBpZiAod25leHQgPT09IDApIHsgICAgICAgICAgIC8qIHZlcnkgY29tbW9uIGNhc2UgKi9cbiAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplIC0gb3A7XG4gICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgICAgbGVuIC09IG9wO1xuICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTtcbiAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsgIC8qIHJlc3QgZnJvbSBvdXRwdXQgKi9cbiAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmICh3bmV4dCA8IG9wKSB7ICAgICAgLyogd3JhcCBhcm91bmQgd2luZG93ICovXG4gICAgICAgICAgICAgICAgZnJvbSArPSB3c2l6ZSArIHduZXh0IC0gb3A7XG4gICAgICAgICAgICAgICAgb3AgLT0gd25leHQ7XG4gICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIGVuZCBvZiB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDtcbiAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdO1xuICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7XG4gICAgICAgICAgICAgICAgICBmcm9tID0gMDtcbiAgICAgICAgICAgICAgICAgIGlmICh3bmV4dCA8IGxlbikgeyAgLyogc29tZSBmcm9tIHN0YXJ0IG9mIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgICAgICBvcCA9IHduZXh0O1xuICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7XG4gICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApO1xuICAgICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAgICAgLyogcmVzdCBmcm9tIG91dHB1dCAqL1xuICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRpZ3VvdXMgaW4gd2luZG93ICovXG4gICAgICAgICAgICAgICAgZnJvbSArPSB3bmV4dCAtIG9wO1xuICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgeyAgICAgICAgIC8qIHNvbWUgZnJvbSB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDtcbiAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBzX3dpbmRvd1tmcm9tKytdO1xuICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7XG4gICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAvKiByZXN0IGZyb20gb3V0cHV0ICovXG4gICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgd2hpbGUgKGxlbiA+IDIpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdO1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gMztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdO1xuICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OyAgICAgICAgICAvKiBjb3B5IGRpcmVjdCBmcm9tIG91dHB1dCAqL1xuICAgICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogbWluaW11bSBsZW5ndGggaXMgdGhyZWUgKi9cbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gMztcbiAgICAgICAgICAgICAgfSB3aGlsZSAobGVuID4gMik7XG4gICAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICgob3AgJiA2NCkgPT09IDApIHsgICAgICAgICAgLyogMm5kIGxldmVsIGRpc3RhbmNlIGNvZGUgKi9cbiAgICAgICAgICAgIGhlcmUgPSBkY29kZVsoaGVyZSAmIDB4ZmZmZikvKmhlcmUudmFsKi8gKyAoaG9sZCAmICgoMSA8PCBvcCkgLSAxKSldO1xuICAgICAgICAgICAgY29udGludWUgZG9kaXN0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgY29kZSc7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgICAgYnJlYWsgdG9wO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrOyAvLyBuZWVkIHRvIGVtdWxhdGUgZ290byB2aWEgXCJjb250aW51ZVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKChvcCAmIDY0KSA9PT0gMCkgeyAgICAgICAgICAgICAgLyogMm5kIGxldmVsIGxlbmd0aCBjb2RlICovXG4gICAgICAgIGhlcmUgPSBsY29kZVsoaGVyZSAmIDB4ZmZmZikvKmhlcmUudmFsKi8gKyAoaG9sZCAmICgoMSA8PCBvcCkgLSAxKSldO1xuICAgICAgICBjb250aW51ZSBkb2xlbjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG9wICYgMzIpIHsgICAgICAgICAgICAgICAgICAgICAvKiBlbmQtb2YtYmxvY2sgKi9cbiAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBlbmQgb2YgYmxvY2tcXG5cIikpO1xuICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRTtcbiAgICAgICAgYnJlYWsgdG9wO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrIHRvcDtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7IC8vIG5lZWQgdG8gZW11bGF0ZSBnb3RvIHZpYSBcImNvbnRpbnVlXCJcbiAgICB9XG4gIH0gd2hpbGUgKF9pbiA8IGxhc3QgJiYgX291dCA8IGVuZCk7XG5cbiAgLyogcmV0dXJuIHVudXNlZCBieXRlcyAob24gZW50cnksIGJpdHMgPCA4LCBzbyBpbiB3b24ndCBnbyB0b28gZmFyIGJhY2spICovXG4gIGxlbiA9IGJpdHMgPj4gMztcbiAgX2luIC09IGxlbjtcbiAgYml0cyAtPSBsZW4gPDwgMztcbiAgaG9sZCAmPSAoMSA8PCBiaXRzKSAtIDE7XG5cbiAgLyogdXBkYXRlIHN0YXRlIGFuZCByZXR1cm4gKi9cbiAgc3RybS5uZXh0X2luID0gX2luO1xuICBzdHJtLm5leHRfb3V0ID0gX291dDtcbiAgc3RybS5hdmFpbF9pbiA9IChfaW4gPCBsYXN0ID8gNSArIChsYXN0IC0gX2luKSA6IDUgLSAoX2luIC0gbGFzdCkpO1xuICBzdHJtLmF2YWlsX291dCA9IChfb3V0IDwgZW5kID8gMjU3ICsgKGVuZCAtIF9vdXQpIDogMjU3IC0gKF9vdXQgLSBlbmQpKTtcbiAgc3RhdGUuaG9sZCA9IGhvbGQ7XG4gIHN0YXRlLmJpdHMgPSBiaXRzO1xuICByZXR1cm47XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB1dGlscyAgICAgICAgID0gcmVxdWlyZSgnLi4vdXRpbHMvY29tbW9uJyk7XG52YXIgYWRsZXIzMiAgICAgICA9IHJlcXVpcmUoJy4vYWRsZXIzMicpO1xudmFyIGNyYzMyICAgICAgICAgPSByZXF1aXJlKCcuL2NyYzMyJyk7XG52YXIgaW5mbGF0ZV9mYXN0ICA9IHJlcXVpcmUoJy4vaW5mZmFzdCcpO1xudmFyIGluZmxhdGVfdGFibGUgPSByZXF1aXJlKCcuL2luZnRyZWVzJyk7XG5cbnZhciBDT0RFUyA9IDA7XG52YXIgTEVOUyA9IDE7XG52YXIgRElTVFMgPSAyO1xuXG4vKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG4vKiBBbGxvd2VkIGZsdXNoIHZhbHVlczsgc2VlIGRlZmxhdGUoKSBhbmQgaW5mbGF0ZSgpIGJlbG93IGZvciBkZXRhaWxzICovXG4vL3ZhciBaX05PX0ZMVVNIICAgICAgPSAwO1xuLy92YXIgWl9QQVJUSUFMX0ZMVVNIID0gMTtcbi8vdmFyIFpfU1lOQ19GTFVTSCAgICA9IDI7XG4vL3ZhciBaX0ZVTExfRkxVU0ggICAgPSAzO1xudmFyIFpfRklOSVNIICAgICAgICA9IDQ7XG52YXIgWl9CTE9DSyAgICAgICAgID0gNTtcbnZhciBaX1RSRUVTICAgICAgICAgPSA2O1xuXG5cbi8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXNcbiAqIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy5cbiAqL1xudmFyIFpfT0sgICAgICAgICAgICA9IDA7XG52YXIgWl9TVFJFQU1fRU5EICAgID0gMTtcbnZhciBaX05FRURfRElDVCAgICAgPSAyO1xuLy92YXIgWl9FUlJOTyAgICAgICAgID0gLTE7XG52YXIgWl9TVFJFQU1fRVJST1IgID0gLTI7XG52YXIgWl9EQVRBX0VSUk9SICAgID0gLTM7XG52YXIgWl9NRU1fRVJST1IgICAgID0gLTQ7XG52YXIgWl9CVUZfRVJST1IgICAgID0gLTU7XG4vL3ZhciBaX1ZFUlNJT05fRVJST1IgPSAtNjtcblxuLyogVGhlIGRlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kICovXG52YXIgWl9ERUZMQVRFRCAgPSA4O1xuXG5cbi8qIFNUQVRFUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbnZhciAgICBIRUFEID0gMTsgICAgICAgLyogaTogd2FpdGluZyBmb3IgbWFnaWMgaGVhZGVyICovXG52YXIgICAgRkxBR1MgPSAyOyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIG1ldGhvZCBhbmQgZmxhZ3MgKGd6aXApICovXG52YXIgICAgVElNRSA9IDM7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIG1vZGlmaWNhdGlvbiB0aW1lIChnemlwKSAqL1xudmFyICAgIE9TID0gNDsgICAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBmbGFncyBhbmQgb3BlcmF0aW5nIHN5c3RlbSAoZ3ppcCkgKi9cbnZhciAgICBFWExFTiA9IDU7ICAgICAgLyogaTogd2FpdGluZyBmb3IgZXh0cmEgbGVuZ3RoIChnemlwKSAqL1xudmFyICAgIEVYVFJBID0gNjsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBieXRlcyAoZ3ppcCkgKi9cbnZhciAgICBOQU1FID0gNzsgICAgICAgLyogaTogd2FpdGluZyBmb3IgZW5kIG9mIGZpbGUgbmFtZSAoZ3ppcCkgKi9cbnZhciAgICBDT01NRU5UID0gODsgICAgLyogaTogd2FpdGluZyBmb3IgZW5kIG9mIGNvbW1lbnQgKGd6aXApICovXG52YXIgICAgSENSQyA9IDk7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGhlYWRlciBjcmMgKGd6aXApICovXG52YXIgICAgRElDVElEID0gMTA7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpY3Rpb25hcnkgY2hlY2sgdmFsdWUgKi9cbnZhciAgICBESUNUID0gMTE7ICAgICAgLyogd2FpdGluZyBmb3IgaW5mbGF0ZVNldERpY3Rpb25hcnkoKSBjYWxsICovXG52YXIgICAgICAgIFRZUEUgPSAxMjsgICAgICAvKiBpOiB3YWl0aW5nIGZvciB0eXBlIGJpdHMsIGluY2x1ZGluZyBsYXN0LWZsYWcgYml0ICovXG52YXIgICAgICAgIFRZUEVETyA9IDEzOyAgICAvKiBpOiBzYW1lLCBidXQgc2tpcCBjaGVjayB0byBleGl0IGluZmxhdGUgb24gbmV3IGJsb2NrICovXG52YXIgICAgICAgIFNUT1JFRCA9IDE0OyAgICAvKiBpOiB3YWl0aW5nIGZvciBzdG9yZWQgc2l6ZSAobGVuZ3RoIGFuZCBjb21wbGVtZW50KSAqL1xudmFyICAgICAgICBDT1BZXyA9IDE1OyAgICAgLyogaS9vOiBzYW1lIGFzIENPUFkgYmVsb3csIGJ1dCBvbmx5IGZpcnN0IHRpbWUgaW4gKi9cbnZhciAgICAgICAgQ09QWSA9IDE2OyAgICAgIC8qIGkvbzogd2FpdGluZyBmb3IgaW5wdXQgb3Igb3V0cHV0IHRvIGNvcHkgc3RvcmVkIGJsb2NrICovXG52YXIgICAgICAgIFRBQkxFID0gMTc7ICAgICAvKiBpOiB3YWl0aW5nIGZvciBkeW5hbWljIGJsb2NrIHRhYmxlIGxlbmd0aHMgKi9cbnZhciAgICAgICAgTEVOTEVOUyA9IDE4OyAgIC8qIGk6IHdhaXRpbmcgZm9yIGNvZGUgbGVuZ3RoIGNvZGUgbGVuZ3RocyAqL1xudmFyICAgICAgICBDT0RFTEVOUyA9IDE5OyAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdCBhbmQgZGlzdGFuY2UgY29kZSBsZW5ndGhzICovXG52YXIgICAgICAgICAgICBMRU5fID0gMjA7ICAgICAgLyogaTogc2FtZSBhcyBMRU4gYmVsb3csIGJ1dCBvbmx5IGZpcnN0IHRpbWUgaW4gKi9cbnZhciAgICAgICAgICAgIExFTiA9IDIxOyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGgvbGl0L2VvYiBjb2RlICovXG52YXIgICAgICAgICAgICBMRU5FWFQgPSAyMjsgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoIGV4dHJhIGJpdHMgKi9cbnZhciAgICAgICAgICAgIERJU1QgPSAyMzsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBkaXN0YW5jZSBjb2RlICovXG52YXIgICAgICAgICAgICBESVNURVhUID0gMjQ7ICAgLyogaTogd2FpdGluZyBmb3IgZGlzdGFuY2UgZXh0cmEgYml0cyAqL1xudmFyICAgICAgICAgICAgTUFUQ0ggPSAyNTsgICAgIC8qIG86IHdhaXRpbmcgZm9yIG91dHB1dCBzcGFjZSB0byBjb3B5IHN0cmluZyAqL1xudmFyICAgICAgICAgICAgTElUID0gMjY7ICAgICAgIC8qIG86IHdhaXRpbmcgZm9yIG91dHB1dCBzcGFjZSB0byB3cml0ZSBsaXRlcmFsICovXG52YXIgICAgQ0hFQ0sgPSAyNzsgICAgIC8qIGk6IHdhaXRpbmcgZm9yIDMyLWJpdCBjaGVjayB2YWx1ZSAqL1xudmFyICAgIExFTkdUSCA9IDI4OyAgICAvKiBpOiB3YWl0aW5nIGZvciAzMi1iaXQgbGVuZ3RoIChnemlwKSAqL1xudmFyICAgIERPTkUgPSAyOTsgICAgICAvKiBmaW5pc2hlZCBjaGVjaywgZG9uZSAtLSByZW1haW4gaGVyZSB1bnRpbCByZXNldCAqL1xudmFyICAgIEJBRCA9IDMwOyAgICAgICAvKiBnb3QgYSBkYXRhIGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG52YXIgICAgTUVNID0gMzE7ICAgICAgIC8qIGdvdCBhbiBpbmZsYXRlKCkgbWVtb3J5IGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG52YXIgICAgU1lOQyA9IDMyOyAgICAgIC8qIGxvb2tpbmcgZm9yIHN5bmNocm9uaXphdGlvbiBieXRlcyB0byByZXN0YXJ0IGluZmxhdGUoKSAqL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cblxudmFyIEVOT1VHSF9MRU5TID0gODUyO1xudmFyIEVOT1VHSF9ESVNUUyA9IDU5Mjtcbi8vdmFyIEVOT1VHSCA9ICAoRU5PVUdIX0xFTlMrRU5PVUdIX0RJU1RTKTtcblxudmFyIE1BWF9XQklUUyA9IDE1O1xuLyogMzJLIExaNzcgd2luZG93ICovXG52YXIgREVGX1dCSVRTID0gTUFYX1dCSVRTO1xuXG5cbmZ1bmN0aW9uIHpzd2FwMzIocSkge1xuICByZXR1cm4gICgoKHEgPj4+IDI0KSAmIDB4ZmYpICtcbiAgICAgICAgICAoKHEgPj4+IDgpICYgMHhmZjAwKSArXG4gICAgICAgICAgKChxICYgMHhmZjAwKSA8PCA4KSArXG4gICAgICAgICAgKChxICYgMHhmZikgPDwgMjQpKTtcbn1cblxuXG5mdW5jdGlvbiBJbmZsYXRlU3RhdGUoKSB7XG4gIHRoaXMubW9kZSA9IDA7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgaW5mbGF0ZSBtb2RlICovXG4gIHRoaXMubGFzdCA9IGZhbHNlOyAgICAgICAgICAvKiB0cnVlIGlmIHByb2Nlc3NpbmcgbGFzdCBibG9jayAqL1xuICB0aGlzLndyYXAgPSAwOyAgICAgICAgICAgICAgLyogYml0IDAgdHJ1ZSBmb3IgemxpYiwgYml0IDEgdHJ1ZSBmb3IgZ3ppcCAqL1xuICB0aGlzLmhhdmVkaWN0ID0gZmFsc2U7ICAgICAgLyogdHJ1ZSBpZiBkaWN0aW9uYXJ5IHByb3ZpZGVkICovXG4gIHRoaXMuZmxhZ3MgPSAwOyAgICAgICAgICAgICAvKiBnemlwIGhlYWRlciBtZXRob2QgYW5kIGZsYWdzICgwIGlmIHpsaWIpICovXG4gIHRoaXMuZG1heCA9IDA7ICAgICAgICAgICAgICAvKiB6bGliIGhlYWRlciBtYXggZGlzdGFuY2UgKElORkxBVEVfU1RSSUNUKSAqL1xuICB0aGlzLmNoZWNrID0gMDsgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGNvcHkgb2YgY2hlY2sgdmFsdWUgKi9cbiAgdGhpcy50b3RhbCA9IDA7ICAgICAgICAgICAgIC8qIHByb3RlY3RlZCBjb3B5IG9mIG91dHB1dCBjb3VudCAqL1xuICAvLyBUT0RPOiBtYXkgYmUge31cbiAgdGhpcy5oZWFkID0gbnVsbDsgICAgICAgICAgIC8qIHdoZXJlIHRvIHNhdmUgZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gKi9cblxuICAvKiBzbGlkaW5nIHdpbmRvdyAqL1xuICB0aGlzLndiaXRzID0gMDsgICAgICAgICAgICAgLyogbG9nIGJhc2UgMiBvZiByZXF1ZXN0ZWQgd2luZG93IHNpemUgKi9cbiAgdGhpcy53c2l6ZSA9IDA7ICAgICAgICAgICAgIC8qIHdpbmRvdyBzaXplIG9yIHplcm8gaWYgbm90IHVzaW5nIHdpbmRvdyAqL1xuICB0aGlzLndoYXZlID0gMDsgICAgICAgICAgICAgLyogdmFsaWQgYnl0ZXMgaW4gdGhlIHdpbmRvdyAqL1xuICB0aGlzLnduZXh0ID0gMDsgICAgICAgICAgICAgLyogd2luZG93IHdyaXRlIGluZGV4ICovXG4gIHRoaXMud2luZG93ID0gbnVsbDsgICAgICAgICAvKiBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIGlmIG5lZWRlZCAqL1xuXG4gIC8qIGJpdCBhY2N1bXVsYXRvciAqL1xuICB0aGlzLmhvbGQgPSAwOyAgICAgICAgICAgICAgLyogaW5wdXQgYml0IGFjY3VtdWxhdG9yICovXG4gIHRoaXMuYml0cyA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYml0cyBpbiBcImluXCIgKi9cblxuICAvKiBmb3Igc3RyaW5nIGFuZCBzdG9yZWQgYmxvY2sgY29weWluZyAqL1xuICB0aGlzLmxlbmd0aCA9IDA7ICAgICAgICAgICAgLyogbGl0ZXJhbCBvciBsZW5ndGggb2YgZGF0YSB0byBjb3B5ICovXG4gIHRoaXMub2Zmc2V0ID0gMDsgICAgICAgICAgICAvKiBkaXN0YW5jZSBiYWNrIHRvIGNvcHkgc3RyaW5nIGZyb20gKi9cblxuICAvKiBmb3IgdGFibGUgYW5kIGNvZGUgZGVjb2RpbmcgKi9cbiAgdGhpcy5leHRyYSA9IDA7ICAgICAgICAgICAgIC8qIGV4dHJhIGJpdHMgbmVlZGVkICovXG5cbiAgLyogZml4ZWQgYW5kIGR5bmFtaWMgY29kZSB0YWJsZXMgKi9cbiAgdGhpcy5sZW5jb2RlID0gbnVsbDsgICAgICAgICAgLyogc3RhcnRpbmcgdGFibGUgZm9yIGxlbmd0aC9saXRlcmFsIGNvZGVzICovXG4gIHRoaXMuZGlzdGNvZGUgPSBudWxsOyAgICAgICAgIC8qIHN0YXJ0aW5nIHRhYmxlIGZvciBkaXN0YW5jZSBjb2RlcyAqL1xuICB0aGlzLmxlbmJpdHMgPSAwOyAgICAgICAgICAgLyogaW5kZXggYml0cyBmb3IgbGVuY29kZSAqL1xuICB0aGlzLmRpc3RiaXRzID0gMDsgICAgICAgICAgLyogaW5kZXggYml0cyBmb3IgZGlzdGNvZGUgKi9cblxuICAvKiBkeW5hbWljIHRhYmxlIGJ1aWxkaW5nICovXG4gIHRoaXMubmNvZGUgPSAwOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzICovXG4gIHRoaXMubmxlbiA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbGVuZ3RoIGNvZGUgbGVuZ3RocyAqL1xuICB0aGlzLm5kaXN0ID0gMDsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGUgbGVuZ3RocyAqL1xuICB0aGlzLmhhdmUgPSAwOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGUgbGVuZ3RocyBpbiBsZW5zW10gKi9cbiAgdGhpcy5uZXh0ID0gbnVsbDsgICAgICAgICAgICAgIC8qIG5leHQgYXZhaWxhYmxlIHNwYWNlIGluIGNvZGVzW10gKi9cblxuICB0aGlzLmxlbnMgPSBuZXcgdXRpbHMuQnVmMTYoMzIwKTsgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGNvZGUgbGVuZ3RocyAqL1xuICB0aGlzLndvcmsgPSBuZXcgdXRpbHMuQnVmMTYoMjg4KTsgLyogd29yayBhcmVhIGZvciBjb2RlIHRhYmxlIGJ1aWxkaW5nICovXG5cbiAgLypcbiAgIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBwb2ludGVycyBpbiBqcywgd2UgdXNlIGxlbmNvZGUgYW5kIGRpc3Rjb2RlIGRpcmVjdGx5XG4gICBhcyBidWZmZXJzIHNvIHdlIGRvbid0IG5lZWQgY29kZXNcbiAgKi9cbiAgLy90aGlzLmNvZGVzID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSCk7ICAgICAgIC8qIHNwYWNlIGZvciBjb2RlIHRhYmxlcyAqL1xuICB0aGlzLmxlbmR5biA9IG51bGw7ICAgICAgICAgICAgICAvKiBkeW5hbWljIHRhYmxlIGZvciBsZW5ndGgvbGl0ZXJhbCBjb2RlcyAoSlMgc3BlY2lmaWMpICovXG4gIHRoaXMuZGlzdGR5biA9IG51bGw7ICAgICAgICAgICAgIC8qIGR5bmFtaWMgdGFibGUgZm9yIGRpc3RhbmNlIGNvZGVzIChKUyBzcGVjaWZpYykgKi9cbiAgdGhpcy5zYW5lID0gMDsgICAgICAgICAgICAgICAgICAgLyogaWYgZmFsc2UsIGFsbG93IGludmFsaWQgZGlzdGFuY2UgdG9vIGZhciAqL1xuICB0aGlzLmJhY2sgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBiaXRzIGJhY2sgb2YgbGFzdCB1bnByb2Nlc3NlZCBsZW5ndGgvbGl0ICovXG4gIHRoaXMud2FzID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIGluaXRpYWwgbGVuZ3RoIG9mIG1hdGNoICovXG59XG5cbmZ1bmN0aW9uIGluZmxhdGVSZXNldEtlZXAoc3RybSkge1xuICB2YXIgc3RhdGU7XG5cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBzdGF0ZSA9IHN0cm0uc3RhdGU7XG4gIHN0cm0udG90YWxfaW4gPSBzdHJtLnRvdGFsX291dCA9IHN0YXRlLnRvdGFsID0gMDtcbiAgc3RybS5tc2cgPSAnJzsgLypaX05VTEwqL1xuICBpZiAoc3RhdGUud3JhcCkgeyAgICAgICAvKiB0byBzdXBwb3J0IGlsbC1jb25jZWl2ZWQgSmF2YSB0ZXN0IHN1aXRlICovXG4gICAgc3RybS5hZGxlciA9IHN0YXRlLndyYXAgJiAxO1xuICB9XG4gIHN0YXRlLm1vZGUgPSBIRUFEO1xuICBzdGF0ZS5sYXN0ID0gMDtcbiAgc3RhdGUuaGF2ZWRpY3QgPSAwO1xuICBzdGF0ZS5kbWF4ID0gMzI3Njg7XG4gIHN0YXRlLmhlYWQgPSBudWxsLypaX05VTEwqLztcbiAgc3RhdGUuaG9sZCA9IDA7XG4gIHN0YXRlLmJpdHMgPSAwO1xuICAvL3N0YXRlLmxlbmNvZGUgPSBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLm5leHQgPSBzdGF0ZS5jb2RlcztcbiAgc3RhdGUubGVuY29kZSA9IHN0YXRlLmxlbmR5biA9IG5ldyB1dGlscy5CdWYzMihFTk9VR0hfTEVOUyk7XG4gIHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUuZGlzdGR5biA9IG5ldyB1dGlscy5CdWYzMihFTk9VR0hfRElTVFMpO1xuXG4gIHN0YXRlLnNhbmUgPSAxO1xuICBzdGF0ZS5iYWNrID0gLTE7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogcmVzZXRcXG5cIikpO1xuICByZXR1cm4gWl9PSztcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZVJlc2V0KHN0cm0pIHtcbiAgdmFyIHN0YXRlO1xuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICBzdGF0ZS53c2l6ZSA9IDA7XG4gIHN0YXRlLndoYXZlID0gMDtcbiAgc3RhdGUud25leHQgPSAwO1xuICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTtcblxufVxuXG5mdW5jdGlvbiBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpIHtcbiAgdmFyIHdyYXA7XG4gIHZhciBzdGF0ZTtcblxuICAvKiBnZXQgdGhlIHN0YXRlICovXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuXG4gIC8qIGV4dHJhY3Qgd3JhcCByZXF1ZXN0IGZyb20gd2luZG93Qml0cyBwYXJhbWV0ZXIgKi9cbiAgaWYgKHdpbmRvd0JpdHMgPCAwKSB7XG4gICAgd3JhcCA9IDA7XG4gICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzO1xuICB9XG4gIGVsc2Uge1xuICAgIHdyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDE7XG4gICAgaWYgKHdpbmRvd0JpdHMgPCA0OCkge1xuICAgICAgd2luZG93Qml0cyAmPSAxNTtcbiAgICB9XG4gIH1cblxuICAvKiBzZXQgbnVtYmVyIG9mIHdpbmRvdyBiaXRzLCBmcmVlIHdpbmRvdyBpZiBkaWZmZXJlbnQgKi9cbiAgaWYgKHdpbmRvd0JpdHMgJiYgKHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSkpIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cbiAgaWYgKHN0YXRlLndpbmRvdyAhPT0gbnVsbCAmJiBzdGF0ZS53Yml0cyAhPT0gd2luZG93Qml0cykge1xuICAgIHN0YXRlLndpbmRvdyA9IG51bGw7XG4gIH1cblxuICAvKiB1cGRhdGUgc3RhdGUgYW5kIHJlc2V0IHRoZSByZXN0IG9mIGl0ICovXG4gIHN0YXRlLndyYXAgPSB3cmFwO1xuICBzdGF0ZS53Yml0cyA9IHdpbmRvd0JpdHM7XG4gIHJldHVybiBpbmZsYXRlUmVzZXQoc3RybSk7XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSB7XG4gIHZhciByZXQ7XG4gIHZhciBzdGF0ZTtcblxuICBpZiAoIXN0cm0pIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIC8vc3RybS5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqL1xuXG4gIHN0YXRlID0gbmV3IEluZmxhdGVTdGF0ZSgpO1xuXG4gIC8vaWYgKHN0YXRlID09PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjtcbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiBhbGxvY2F0ZWRcXG5cIikpO1xuICBzdHJtLnN0YXRlID0gc3RhdGU7XG4gIHN0YXRlLndpbmRvdyA9IG51bGwvKlpfTlVMTCovO1xuICByZXQgPSBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpO1xuICBpZiAocmV0ICE9PSBaX09LKSB7XG4gICAgc3RybS5zdGF0ZSA9IG51bGwvKlpfTlVMTCovO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVJbml0KHN0cm0pIHtcbiAgcmV0dXJuIGluZmxhdGVJbml0MihzdHJtLCBERUZfV0JJVFMpO1xufVxuXG5cbi8qXG4gUmV0dXJuIHN0YXRlIHdpdGggbGVuZ3RoIGFuZCBkaXN0YW5jZSBkZWNvZGluZyB0YWJsZXMgYW5kIGluZGV4IHNpemVzIHNldCB0b1xuIGZpeGVkIGNvZGUgZGVjb2RpbmcuICBOb3JtYWxseSB0aGlzIHJldHVybnMgZml4ZWQgdGFibGVzIGZyb20gaW5mZml4ZWQuaC5cbiBJZiBCVUlMREZJWEVEIGlzIGRlZmluZWQsIHRoZW4gaW5zdGVhZCB0aGlzIHJvdXRpbmUgYnVpbGRzIHRoZSB0YWJsZXMgdGhlXG4gZmlyc3QgdGltZSBpdCdzIGNhbGxlZCwgYW5kIHJldHVybnMgdGhvc2UgdGFibGVzIHRoZSBmaXJzdCB0aW1lIGFuZFxuIHRoZXJlYWZ0ZXIuICBUaGlzIHJlZHVjZXMgdGhlIHNpemUgb2YgdGhlIGNvZGUgYnkgYWJvdXQgMksgYnl0ZXMsIGluXG4gZXhjaGFuZ2UgZm9yIGEgbGl0dGxlIGV4ZWN1dGlvbiB0aW1lLiAgSG93ZXZlciwgQlVJTERGSVhFRCBzaG91bGQgbm90IGJlXG4gdXNlZCBmb3IgdGhyZWFkZWQgYXBwbGljYXRpb25zLCBzaW5jZSB0aGUgcmV3cml0aW5nIG9mIHRoZSB0YWJsZXMgYW5kIHZpcmdpblxuIG1heSBub3QgYmUgdGhyZWFkLXNhZmUuXG4gKi9cbnZhciB2aXJnaW4gPSB0cnVlO1xuXG52YXIgbGVuZml4LCBkaXN0Zml4OyAvLyBXZSBoYXZlIG5vIHBvaW50ZXJzIGluIEpTLCBzbyBrZWVwIHRhYmxlcyBzZXBhcmF0ZVxuXG5mdW5jdGlvbiBmaXhlZHRhYmxlcyhzdGF0ZSkge1xuICAvKiBidWlsZCBmaXhlZCBodWZmbWFuIHRhYmxlcyBpZiBmaXJzdCBjYWxsIChtYXkgbm90IGJlIHRocmVhZCBzYWZlKSAqL1xuICBpZiAodmlyZ2luKSB7XG4gICAgdmFyIHN5bTtcblxuICAgIGxlbmZpeCA9IG5ldyB1dGlscy5CdWYzMig1MTIpO1xuICAgIGRpc3RmaXggPSBuZXcgdXRpbHMuQnVmMzIoMzIpO1xuXG4gICAgLyogbGl0ZXJhbC9sZW5ndGggdGFibGUgKi9cbiAgICBzeW0gPSAwO1xuICAgIHdoaWxlIChzeW0gPCAxNDQpIHsgc3RhdGUubGVuc1tzeW0rK10gPSA4OyB9XG4gICAgd2hpbGUgKHN5bSA8IDI1NikgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDk7IH1cbiAgICB3aGlsZSAoc3ltIDwgMjgwKSB7IHN0YXRlLmxlbnNbc3ltKytdID0gNzsgfVxuICAgIHdoaWxlIChzeW0gPCAyODgpIHsgc3RhdGUubGVuc1tzeW0rK10gPSA4OyB9XG5cbiAgICBpbmZsYXRlX3RhYmxlKExFTlMsICBzdGF0ZS5sZW5zLCAwLCAyODgsIGxlbmZpeCwgICAwLCBzdGF0ZS53b3JrLCB7IGJpdHM6IDkgfSk7XG5cbiAgICAvKiBkaXN0YW5jZSB0YWJsZSAqL1xuICAgIHN5bSA9IDA7XG4gICAgd2hpbGUgKHN5bSA8IDMyKSB7IHN0YXRlLmxlbnNbc3ltKytdID0gNTsgfVxuXG4gICAgaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUubGVucywgMCwgMzIsICAgZGlzdGZpeCwgMCwgc3RhdGUud29yaywgeyBiaXRzOiA1IH0pO1xuXG4gICAgLyogZG8gdGhpcyBqdXN0IG9uY2UgKi9cbiAgICB2aXJnaW4gPSBmYWxzZTtcbiAgfVxuXG4gIHN0YXRlLmxlbmNvZGUgPSBsZW5maXg7XG4gIHN0YXRlLmxlbmJpdHMgPSA5O1xuICBzdGF0ZS5kaXN0Y29kZSA9IGRpc3RmaXg7XG4gIHN0YXRlLmRpc3RiaXRzID0gNTtcbn1cblxuXG4vKlxuIFVwZGF0ZSB0aGUgd2luZG93IHdpdGggdGhlIGxhc3Qgd3NpemUgKG5vcm1hbGx5IDMySykgYnl0ZXMgd3JpdHRlbiBiZWZvcmVcbiByZXR1cm5pbmcuICBJZiB3aW5kb3cgZG9lcyBub3QgZXhpc3QgeWV0LCBjcmVhdGUgaXQuICBUaGlzIGlzIG9ubHkgY2FsbGVkXG4gd2hlbiBhIHdpbmRvdyBpcyBhbHJlYWR5IGluIHVzZSwgb3Igd2hlbiBvdXRwdXQgaGFzIGJlZW4gd3JpdHRlbiBkdXJpbmcgdGhpc1xuIGluZmxhdGUgY2FsbCwgYnV0IHRoZSBlbmQgb2YgdGhlIGRlZmxhdGUgc3RyZWFtIGhhcyBub3QgYmVlbiByZWFjaGVkIHlldC5cbiBJdCBpcyBhbHNvIGNhbGxlZCB0byBjcmVhdGUgYSB3aW5kb3cgZm9yIGRpY3Rpb25hcnkgZGF0YSB3aGVuIGEgZGljdGlvbmFyeVxuIGlzIGxvYWRlZC5cblxuIFByb3ZpZGluZyBvdXRwdXQgYnVmZmVycyBsYXJnZXIgdGhhbiAzMksgdG8gaW5mbGF0ZSgpIHNob3VsZCBwcm92aWRlIGEgc3BlZWRcbiBhZHZhbnRhZ2UsIHNpbmNlIG9ubHkgdGhlIGxhc3QgMzJLIG9mIG91dHB1dCBpcyBjb3BpZWQgdG8gdGhlIHNsaWRpbmcgd2luZG93XG4gdXBvbiByZXR1cm4gZnJvbSBpbmZsYXRlKCksIGFuZCBzaW5jZSBhbGwgZGlzdGFuY2VzIGFmdGVyIHRoZSBmaXJzdCAzMksgb2ZcbiBvdXRwdXQgd2lsbCBmYWxsIGluIHRoZSBvdXRwdXQgZGF0YSwgbWFraW5nIG1hdGNoIGNvcGllcyBzaW1wbGVyIGFuZCBmYXN0ZXIuXG4gVGhlIGFkdmFudGFnZSBtYXkgYmUgZGVwZW5kZW50IG9uIHRoZSBzaXplIG9mIHRoZSBwcm9jZXNzb3IncyBkYXRhIGNhY2hlcy5cbiAqL1xuZnVuY3Rpb24gdXBkYXRld2luZG93KHN0cm0sIHNyYywgZW5kLCBjb3B5KSB7XG4gIHZhciBkaXN0O1xuICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlO1xuXG4gIC8qIGlmIGl0IGhhc24ndCBiZWVuIGRvbmUgYWxyZWFkeSwgYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSB3aW5kb3cgKi9cbiAgaWYgKHN0YXRlLndpbmRvdyA9PT0gbnVsbCkge1xuICAgIHN0YXRlLndzaXplID0gMSA8PCBzdGF0ZS53Yml0cztcbiAgICBzdGF0ZS53bmV4dCA9IDA7XG4gICAgc3RhdGUud2hhdmUgPSAwO1xuXG4gICAgc3RhdGUud2luZG93ID0gbmV3IHV0aWxzLkJ1Zjgoc3RhdGUud3NpemUpO1xuICB9XG5cbiAgLyogY29weSBzdGF0ZS0+d3NpemUgb3IgbGVzcyBvdXRwdXQgYnl0ZXMgaW50byB0aGUgY2lyY3VsYXIgd2luZG93ICovXG4gIGlmIChjb3B5ID49IHN0YXRlLndzaXplKSB7XG4gICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUud2luZG93LCBzcmMsIGVuZCAtIHN0YXRlLndzaXplLCBzdGF0ZS53c2l6ZSwgMCk7XG4gICAgc3RhdGUud25leHQgPSAwO1xuICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7XG4gIH1cbiAgZWxzZSB7XG4gICAgZGlzdCA9IHN0YXRlLndzaXplIC0gc3RhdGUud25leHQ7XG4gICAgaWYgKGRpc3QgPiBjb3B5KSB7XG4gICAgICBkaXN0ID0gY29weTtcbiAgICB9XG4gICAgLy96bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d25leHQsIGVuZCAtIGNvcHksIGRpc3QpO1xuICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdywgc3JjLCBlbmQgLSBjb3B5LCBkaXN0LCBzdGF0ZS53bmV4dCk7XG4gICAgY29weSAtPSBkaXN0O1xuICAgIGlmIChjb3B5KSB7XG4gICAgICAvL3ptZW1jcHkoc3RhdGUtPndpbmRvdywgZW5kIC0gY29weSwgY29weSk7XG4gICAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gY29weSwgY29weSwgMCk7XG4gICAgICBzdGF0ZS53bmV4dCA9IGNvcHk7XG4gICAgICBzdGF0ZS53aGF2ZSA9IHN0YXRlLndzaXplO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHN0YXRlLnduZXh0ICs9IGRpc3Q7XG4gICAgICBpZiAoc3RhdGUud25leHQgPT09IHN0YXRlLndzaXplKSB7IHN0YXRlLnduZXh0ID0gMDsgfVxuICAgICAgaWYgKHN0YXRlLndoYXZlIDwgc3RhdGUud3NpemUpIHsgc3RhdGUud2hhdmUgKz0gZGlzdDsgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZShzdHJtLCBmbHVzaCkge1xuICB2YXIgc3RhdGU7XG4gIHZhciBpbnB1dCwgb3V0cHV0OyAgICAgICAgICAvLyBpbnB1dC9vdXRwdXQgYnVmZmVyc1xuICB2YXIgbmV4dDsgICAgICAgICAgICAgICAgICAgLyogbmV4dCBpbnB1dCBJTkRFWCAqL1xuICB2YXIgcHV0OyAgICAgICAgICAgICAgICAgICAgLyogbmV4dCBvdXRwdXQgSU5ERVggKi9cbiAgdmFyIGhhdmUsIGxlZnQ7ICAgICAgICAgICAgIC8qIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0ICovXG4gIHZhciBob2xkOyAgICAgICAgICAgICAgICAgICAvKiBiaXQgYnVmZmVyICovXG4gIHZhciBiaXRzOyAgICAgICAgICAgICAgICAgICAvKiBiaXRzIGluIGJpdCBidWZmZXIgKi9cbiAgdmFyIF9pbiwgX291dDsgICAgICAgICAgICAgIC8qIHNhdmUgc3RhcnRpbmcgYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi9cbiAgdmFyIGNvcHk7ICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzdG9yZWQgb3IgbWF0Y2ggYnl0ZXMgdG8gY29weSAqL1xuICB2YXIgZnJvbTsgICAgICAgICAgICAgICAgICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBieXRlcyBmcm9tICovXG4gIHZhciBmcm9tX3NvdXJjZTtcbiAgdmFyIGhlcmUgPSAwOyAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgZGVjb2RpbmcgdGFibGUgZW50cnkgKi9cbiAgdmFyIGhlcmVfYml0cywgaGVyZV9vcCwgaGVyZV92YWw7IC8vIHBha2VkIFwiaGVyZVwiIGRlbm9ybWFsaXplZCAoSlMgc3BlY2lmaWMpXG4gIC8vdmFyIGxhc3Q7ICAgICAgICAgICAgICAgICAgIC8qIHBhcmVudCB0YWJsZSBlbnRyeSAqL1xuICB2YXIgbGFzdF9iaXRzLCBsYXN0X29wLCBsYXN0X3ZhbDsgLy8gcGFrZWQgXCJsYXN0XCIgZGVub3JtYWxpemVkIChKUyBzcGVjaWZpYylcbiAgdmFyIGxlbjsgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCB0byBjb3B5IGZvciByZXBlYXRzLCBiaXRzIHRvIGRyb3AgKi9cbiAgdmFyIHJldDsgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlICovXG4gIHZhciBoYnVmID0gbmV3IHV0aWxzLkJ1ZjgoNCk7ICAgIC8qIGJ1ZmZlciBmb3IgZ3ppcCBoZWFkZXIgY3JjIGNhbGN1bGF0aW9uICovXG4gIHZhciBvcHRzO1xuXG4gIHZhciBuOyAvLyB0ZW1wb3JhcnkgdmFyIGZvciBORUVEX0JJVFNcblxuICB2YXIgb3JkZXIgPSAvKiBwZXJtdXRhdGlvbiBvZiBjb2RlIGxlbmd0aHMgKi9cbiAgICBbIDE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTUgXTtcblxuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSB8fCAhc3RybS5vdXRwdXQgfHxcbiAgICAgICghc3RybS5pbnB1dCAmJiBzdHJtLmF2YWlsX2luICE9PSAwKSkge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIHN0YXRlID0gc3RybS5zdGF0ZTtcbiAgaWYgKHN0YXRlLm1vZGUgPT09IFRZUEUpIHsgc3RhdGUubW9kZSA9IFRZUEVETzsgfSAgICAvKiBza2lwIGNoZWNrICovXG5cblxuICAvLy0tLSBMT0FEKCkgLS0tXG4gIHB1dCA9IHN0cm0ubmV4dF9vdXQ7XG4gIG91dHB1dCA9IHN0cm0ub3V0cHV0O1xuICBsZWZ0ID0gc3RybS5hdmFpbF9vdXQ7XG4gIG5leHQgPSBzdHJtLm5leHRfaW47XG4gIGlucHV0ID0gc3RybS5pbnB1dDtcbiAgaGF2ZSA9IHN0cm0uYXZhaWxfaW47XG4gIGhvbGQgPSBzdGF0ZS5ob2xkO1xuICBiaXRzID0gc3RhdGUuYml0cztcbiAgLy8tLS1cblxuICBfaW4gPSBoYXZlO1xuICBfb3V0ID0gbGVmdDtcbiAgcmV0ID0gWl9PSztcblxuICBpbmZfbGVhdmU6IC8vIGdvdG8gZW11bGF0aW9uXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKHN0YXRlLm1vZGUpIHtcbiAgICBjYXNlIEhFQUQ6XG4gICAgICBpZiAoc3RhdGUud3JhcCA9PT0gMCkge1xuICAgICAgICBzdGF0ZS5tb2RlID0gVFlQRURPO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vPT09IE5FRURCSVRTKDE2KTtcbiAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIGlmICgoc3RhdGUud3JhcCAmIDIpICYmIGhvbGQgPT09IDB4OGIxZikgeyAgLyogZ3ppcCBoZWFkZXIgKi9cbiAgICAgICAgc3RhdGUuY2hlY2sgPSAwLypjcmMzMigwTCwgWl9OVUxMLCAwKSovO1xuICAgICAgICAvLz09PSBDUkMyKHN0YXRlLmNoZWNrLCBob2xkKTtcbiAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICBoYnVmWzFdID0gKGhvbGQgPj4+IDgpICYgMHhmZjtcbiAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7XG4gICAgICAgIC8vPT09Ly9cblxuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RhdGUubW9kZSA9IEZMQUdTO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0YXRlLmZsYWdzID0gMDsgICAgICAgICAgIC8qIGV4cGVjdCB6bGliIGhlYWRlciAqL1xuICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIShzdGF0ZS53cmFwICYgMSkgfHwgICAvKiBjaGVjayBpZiB6bGliIGhlYWRlciBhbGxvd2VkICovXG4gICAgICAgICgoKGhvbGQgJiAweGZmKS8qQklUUyg4KSovIDw8IDgpICsgKGhvbGQgPj4gOCkpICUgMzEpIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW5jb3JyZWN0IGhlYWRlciBjaGVjayc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKChob2xkICYgMHgwZikvKkJJVFMoNCkqLyAhPT0gWl9ERUZMQVRFRCkge1xuICAgICAgICBzdHJtLm1zZyA9ICd1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8tLS0gRFJPUEJJVFMoNCkgLS0tLy9cbiAgICAgIGhvbGQgPj4+PSA0O1xuICAgICAgYml0cyAtPSA0O1xuICAgICAgLy8tLS0vL1xuICAgICAgbGVuID0gKGhvbGQgJiAweDBmKS8qQklUUyg0KSovICsgODtcbiAgICAgIGlmIChzdGF0ZS53Yml0cyA9PT0gMCkge1xuICAgICAgICBzdGF0ZS53Yml0cyA9IGxlbjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGxlbiA+IHN0YXRlLndiaXRzKSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgd2luZG93IHNpemUnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0YXRlLmRtYXggPSAxIDw8IGxlbjtcbiAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICB6bGliIGhlYWRlciBva1xcblwiKSk7XG4gICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAxLyphZGxlcjMyKDBMLCBaX05VTEwsIDApKi87XG4gICAgICBzdGF0ZS5tb2RlID0gaG9sZCAmIDB4MjAwID8gRElDVElEIDogVFlQRTtcbiAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICBob2xkID0gMDtcbiAgICAgIGJpdHMgPSAwO1xuICAgICAgLy89PT0vL1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBGTEFHUzpcbiAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi9cbiAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIHN0YXRlLmZsYWdzID0gaG9sZDtcbiAgICAgIGlmICgoc3RhdGUuZmxhZ3MgJiAweGZmKSAhPT0gWl9ERUZMQVRFRCkge1xuICAgICAgICBzdHJtLm1zZyA9ICd1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHhlMDAwKSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ3Vua25vd24gaGVhZGVyIGZsYWdzIHNldCc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgc3RhdGUuaGVhZC50ZXh0ID0gKChob2xkID4+IDgpICYgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7XG4gICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjtcbiAgICAgICAgaGJ1ZlsxXSA9IChob2xkID4+PiA4KSAmIDB4ZmY7XG4gICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApO1xuICAgICAgICAvLz09PS8vXG4gICAgICB9XG4gICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgaG9sZCA9IDA7XG4gICAgICBiaXRzID0gMDtcbiAgICAgIC8vPT09Ly9cbiAgICAgIHN0YXRlLm1vZGUgPSBUSU1FO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgVElNRTpcbiAgICAgIC8vPT09IE5FRURCSVRTKDMyKTsgKi9cbiAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgIHN0YXRlLmhlYWQudGltZSA9IGhvbGQ7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgLy89PT0gQ1JDNChzdGF0ZS5jaGVjaywgaG9sZClcbiAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICBoYnVmWzFdID0gKGhvbGQgPj4+IDgpICYgMHhmZjtcbiAgICAgICAgaGJ1ZlsyXSA9IChob2xkID4+PiAxNikgJiAweGZmO1xuICAgICAgICBoYnVmWzNdID0gKGhvbGQgPj4+IDI0KSAmIDB4ZmY7XG4gICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDQsIDApO1xuICAgICAgICAvLz09PVxuICAgICAgfVxuICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgIGhvbGQgPSAwO1xuICAgICAgYml0cyA9IDA7XG4gICAgICAvLz09PS8vXG4gICAgICBzdGF0ZS5tb2RlID0gT1M7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBPUzpcbiAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi9cbiAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgIHN0YXRlLmhlYWQueGZsYWdzID0gKGhvbGQgJiAweGZmKTtcbiAgICAgICAgc3RhdGUuaGVhZC5vcyA9IChob2xkID4+IDgpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgIC8vPT09IENSQzIoc3RhdGUuY2hlY2ssIGhvbGQpO1xuICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7XG4gICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTtcbiAgICAgICAgLy89PT0vL1xuICAgICAgfVxuICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgIGhvbGQgPSAwO1xuICAgICAgYml0cyA9IDA7XG4gICAgICAvLz09PS8vXG4gICAgICBzdGF0ZS5tb2RlID0gRVhMRU47XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBFWExFTjpcbiAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDQwMCkge1xuICAgICAgICAvLz09PSBORUVEQklUUygxNik7ICovXG4gICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RhdGUubGVuZ3RoID0gaG9sZDtcbiAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhX2xlbiA9IGhvbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7XG4gICAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApO1xuICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgfVxuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgc3RhdGUuaGVhZC5leHRyYSA9IG51bGwvKlpfTlVMTCovO1xuICAgICAgfVxuICAgICAgc3RhdGUubW9kZSA9IEVYVFJBO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgRVhUUkE6XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDA0MDApIHtcbiAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDtcbiAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSB7IGNvcHkgPSBoYXZlOyB9XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgICAgIGxlbiA9IHN0YXRlLmhlYWQuZXh0cmFfbGVuIC0gc3RhdGUubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKCFzdGF0ZS5oZWFkLmV4dHJhKSB7XG4gICAgICAgICAgICAgIC8vIFVzZSB1bnR5cGVkIGFycmF5IGZvciBtb3JlIGNvbnZlbmllbmQgcHJvY2Vzc2luZyBsYXRlclxuICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhID0gbmV3IEFycmF5KHN0YXRlLmhlYWQuZXh0cmFfbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHV0aWxzLmFycmF5U2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhLFxuICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgICAgLy8gZXh0cmEgZmllbGQgaXMgbGltaXRlZCB0byA2NTUzNiBieXRlc1xuICAgICAgICAgICAgICAvLyAtIG5vIG5lZWQgZm9yIGFkZGl0aW9uYWwgc2l6ZSBjaGVja1xuICAgICAgICAgICAgICBjb3B5LFxuICAgICAgICAgICAgICAvKmxlbiArIGNvcHkgPiBzdGF0ZS5oZWFkLmV4dHJhX21heCAtIGxlbiA/IHN0YXRlLmhlYWQuZXh0cmFfbWF4IDogY29weSwqL1xuICAgICAgICAgICAgICBsZW5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvL3ptZW1jcHkoc3RhdGUuaGVhZC5leHRyYSArIGxlbiwgbmV4dCxcbiAgICAgICAgICAgIC8vICAgICAgICBsZW4gKyBjb3B5ID4gc3RhdGUuaGVhZC5leHRyYV9tYXggP1xuICAgICAgICAgICAgLy8gICAgICAgIHN0YXRlLmhlYWQuZXh0cmFfbWF4IC0gbGVuIDogY29weSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkge1xuICAgICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaW5wdXQsIGNvcHksIG5leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoYXZlIC09IGNvcHk7XG4gICAgICAgICAgbmV4dCArPSBjb3B5O1xuICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZS5sZW5ndGgpIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICB9XG4gICAgICBzdGF0ZS5sZW5ndGggPSAwO1xuICAgICAgc3RhdGUubW9kZSA9IE5BTUU7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBOQU1FOlxuICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwODAwKSB7XG4gICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICBjb3B5ID0gMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIC8vIFRPRE86IDIgb3IgMSBieXRlcz9cbiAgICAgICAgICBsZW4gPSBpbnB1dFtuZXh0ICsgY29weSsrXTtcbiAgICAgICAgICAvKiB1c2UgY29uc3RhbnQgbGltaXQgYmVjYXVzZSBpbiBqcyB3ZSBzaG91bGQgbm90IHByZWFsbG9jYXRlIG1lbW9yeSAqL1xuICAgICAgICAgIGlmIChzdGF0ZS5oZWFkICYmIGxlbiAmJlxuICAgICAgICAgICAgICAoc3RhdGUubGVuZ3RoIDwgNjU1MzYgLypzdGF0ZS5oZWFkLm5hbWVfbWF4Ki8pKSB7XG4gICAgICAgICAgICBzdGF0ZS5oZWFkLm5hbWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShsZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTtcblxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaGF2ZSAtPSBjb3B5O1xuICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgIGlmIChsZW4pIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgIHN0YXRlLmhlYWQubmFtZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBzdGF0ZS5sZW5ndGggPSAwO1xuICAgICAgc3RhdGUubW9kZSA9IENPTU1FTlQ7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBDT01NRU5UOlxuICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgxMDAwKSB7XG4gICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICBjb3B5ID0gMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGxlbiA9IGlucHV0W25leHQgKyBjb3B5KytdO1xuICAgICAgICAgIC8qIHVzZSBjb25zdGFudCBsaW1pdCBiZWNhdXNlIGluIGpzIHdlIHNob3VsZCBub3QgcHJlYWxsb2NhdGUgbWVtb3J5ICovXG4gICAgICAgICAgaWYgKHN0YXRlLmhlYWQgJiYgbGVuICYmXG4gICAgICAgICAgICAgIChzdGF0ZS5sZW5ndGggPCA2NTUzNiAvKnN0YXRlLmhlYWQuY29tbV9tYXgqLykpIHtcbiAgICAgICAgICAgIHN0YXRlLmhlYWQuY29tbWVudCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChsZW4gJiYgY29weSA8IGhhdmUpO1xuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaGF2ZSAtPSBjb3B5O1xuICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgIGlmIChsZW4pIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgIHN0YXRlLmhlYWQuY29tbWVudCA9IG51bGw7XG4gICAgICB9XG4gICAgICBzdGF0ZS5tb2RlID0gSENSQztcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIEhDUkM6XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMTYpOyAqL1xuICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIGlmIChob2xkICE9PSAoc3RhdGUuY2hlY2sgJiAweGZmZmYpKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaGVhZGVyIGNyYyBtaXNtYXRjaCc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5oZWFkKSB7XG4gICAgICAgIHN0YXRlLmhlYWQuaGNyYyA9ICgoc3RhdGUuZmxhZ3MgPj4gOSkgJiAxKTtcbiAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDA7XG4gICAgICBzdGF0ZS5tb2RlID0gVFlQRTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRElDVElEOlxuICAgICAgLy89PT0gTkVFREJJVFMoMzIpOyAqL1xuICAgICAgd2hpbGUgKGJpdHMgPCAzMikge1xuICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgaGF2ZS0tO1xuICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgYml0cyArPSA4O1xuICAgICAgfVxuICAgICAgLy89PT0vL1xuICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0genN3YXAzMihob2xkKTtcbiAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICBob2xkID0gMDtcbiAgICAgIGJpdHMgPSAwO1xuICAgICAgLy89PT0vL1xuICAgICAgc3RhdGUubW9kZSA9IERJQ1Q7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBESUNUOlxuICAgICAgaWYgKHN0YXRlLmhhdmVkaWN0ID09PSAwKSB7XG4gICAgICAgIC8vLS0tIFJFU1RPUkUoKSAtLS1cbiAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDtcbiAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0O1xuICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0O1xuICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTtcbiAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7XG4gICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzO1xuICAgICAgICAvLy0tLVxuICAgICAgICByZXR1cm4gWl9ORUVEX0RJQ1Q7XG4gICAgICB9XG4gICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAxLyphZGxlcjMyKDBMLCBaX05VTEwsIDApKi87XG4gICAgICBzdGF0ZS5tb2RlID0gVFlQRTtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIFRZUEU6XG4gICAgICBpZiAoZmx1c2ggPT09IFpfQkxPQ0sgfHwgZmx1c2ggPT09IFpfVFJFRVMpIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBUWVBFRE86XG4gICAgICBpZiAoc3RhdGUubGFzdCkge1xuICAgICAgICAvLy0tLSBCWVRFQklUUygpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSBiaXRzICYgNztcbiAgICAgICAgYml0cyAtPSBiaXRzICYgNztcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICBzdGF0ZS5tb2RlID0gQ0hFQ0s7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy89PT0gTkVFREJJVFMoMyk7ICovXG4gICAgICB3aGlsZSAoYml0cyA8IDMpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIHN0YXRlLmxhc3QgPSAoaG9sZCAmIDB4MDEpLypCSVRTKDEpKi87XG4gICAgICAvLy0tLSBEUk9QQklUUygxKSAtLS0vL1xuICAgICAgaG9sZCA+Pj49IDE7XG4gICAgICBiaXRzIC09IDE7XG4gICAgICAvLy0tLS8vXG5cbiAgICAgIHN3aXRjaCAoKGhvbGQgJiAweDAzKS8qQklUUygyKSovKSB7XG4gICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdG9yZWQgYmxvY2sgKi9cbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgc3RvcmVkIGJsb2NrJXNcXG5cIixcbiAgICAgICAgLy8gICAgICAgIHN0YXRlLmxhc3QgPyBcIiAobGFzdClcIiA6IFwiXCIpKTtcbiAgICAgICAgc3RhdGUubW9kZSA9IFNUT1JFRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXhlZCBibG9jayAqL1xuICAgICAgICBmaXhlZHRhYmxlcyhzdGF0ZSk7XG4gICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgIGZpeGVkIGNvZGVzIGJsb2NrJXNcXG5cIixcbiAgICAgICAgLy8gICAgICAgIHN0YXRlLmxhc3QgPyBcIiAobGFzdClcIiA6IFwiXCIpKTtcbiAgICAgICAgc3RhdGUubW9kZSA9IExFTl87ICAgICAgICAgICAgIC8qIGRlY29kZSBjb2RlcyAqL1xuICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHtcbiAgICAgICAgICAvLy0tLSBEUk9QQklUUygyKSAtLS0vL1xuICAgICAgICAgIGhvbGQgPj4+PSAyO1xuICAgICAgICAgIGJpdHMgLT0gMjtcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgYnJlYWsgaW5mX2xlYXZlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZHluYW1pYyBibG9jayAqL1xuICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICBkeW5hbWljIGNvZGVzIGJsb2NrJXNcXG5cIixcbiAgICAgICAgLy8gICAgICAgIHN0YXRlLmxhc3QgPyBcIiAobGFzdClcIiA6IFwiXCIpKTtcbiAgICAgICAgc3RhdGUubW9kZSA9IFRBQkxFO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBibG9jayB0eXBlJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgIH1cbiAgICAgIC8vLS0tIERST1BCSVRTKDIpIC0tLS8vXG4gICAgICBob2xkID4+Pj0gMjtcbiAgICAgIGJpdHMgLT0gMjtcbiAgICAgIC8vLS0tLy9cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU1RPUkVEOlxuICAgICAgLy8tLS0gQllURUJJVFMoKSAtLS0vLyAvKiBnbyB0byBieXRlIGJvdW5kYXJ5ICovXG4gICAgICBob2xkID4+Pj0gYml0cyAmIDc7XG4gICAgICBiaXRzIC09IGJpdHMgJiA3O1xuICAgICAgLy8tLS0vL1xuICAgICAgLy89PT0gTkVFREJJVFMoMzIpOyAqL1xuICAgICAgd2hpbGUgKGJpdHMgPCAzMikge1xuICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgaGF2ZS0tO1xuICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgYml0cyArPSA4O1xuICAgICAgfVxuICAgICAgLy89PT0vL1xuICAgICAgaWYgKChob2xkICYgMHhmZmZmKSAhPT0gKChob2xkID4+PiAxNikgXiAweGZmZmYpKSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0YXRlLmxlbmd0aCA9IGhvbGQgJiAweGZmZmY7XG4gICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgIHN0b3JlZCBsZW5ndGggJXVcXG5cIixcbiAgICAgIC8vICAgICAgICBzdGF0ZS5sZW5ndGgpKTtcbiAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICBob2xkID0gMDtcbiAgICAgIGJpdHMgPSAwO1xuICAgICAgLy89PT0vL1xuICAgICAgc3RhdGUubW9kZSA9IENPUFlfO1xuICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgQ09QWV86XG4gICAgICBzdGF0ZS5tb2RlID0gQ09QWTtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIENPUFk6XG4gICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoO1xuICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSB7IGNvcHkgPSBoYXZlOyB9XG4gICAgICAgIGlmIChjb3B5ID4gbGVmdCkgeyBjb3B5ID0gbGVmdDsgfVxuICAgICAgICBpZiAoY29weSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgLy8tLS0gem1lbWNweShwdXQsIG5leHQsIGNvcHkpOyAtLS1cbiAgICAgICAgdXRpbHMuYXJyYXlTZXQob3V0cHV0LCBpbnB1dCwgbmV4dCwgY29weSwgcHV0KTtcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICBoYXZlIC09IGNvcHk7XG4gICAgICAgIG5leHQgKz0gY29weTtcbiAgICAgICAgbGVmdCAtPSBjb3B5O1xuICAgICAgICBwdXQgKz0gY29weTtcbiAgICAgICAgc3RhdGUubGVuZ3RoIC09IGNvcHk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICBzdG9yZWQgZW5kXFxuXCIpKTtcbiAgICAgIHN0YXRlLm1vZGUgPSBUWVBFO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBUQUJMRTpcbiAgICAgIC8vPT09IE5FRURCSVRTKDE0KTsgKi9cbiAgICAgIHdoaWxlIChiaXRzIDwgMTQpIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgIH1cbiAgICAgIC8vPT09Ly9cbiAgICAgIHN0YXRlLm5sZW4gPSAoaG9sZCAmIDB4MWYpLypCSVRTKDUpKi8gKyAyNTc7XG4gICAgICAvLy0tLSBEUk9QQklUUyg1KSAtLS0vL1xuICAgICAgaG9sZCA+Pj49IDU7XG4gICAgICBiaXRzIC09IDU7XG4gICAgICAvLy0tLS8vXG4gICAgICBzdGF0ZS5uZGlzdCA9IChob2xkICYgMHgxZikvKkJJVFMoNSkqLyArIDE7XG4gICAgICAvLy0tLSBEUk9QQklUUyg1KSAtLS0vL1xuICAgICAgaG9sZCA+Pj49IDU7XG4gICAgICBiaXRzIC09IDU7XG4gICAgICAvLy0tLS8vXG4gICAgICBzdGF0ZS5uY29kZSA9IChob2xkICYgMHgwZikvKkJJVFMoNCkqLyArIDQ7XG4gICAgICAvLy0tLSBEUk9QQklUUyg0KSAtLS0vL1xuICAgICAgaG9sZCA+Pj49IDQ7XG4gICAgICBiaXRzIC09IDQ7XG4gICAgICAvLy0tLS8vXG4vLyNpZm5kZWYgUEtaSVBfQlVHX1dPUktBUk9VTkRcbiAgICAgIGlmIChzdGF0ZS5ubGVuID4gMjg2IHx8IHN0YXRlLm5kaXN0ID4gMzApIHtcbiAgICAgICAgc3RybS5tc2cgPSAndG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbi8vI2VuZGlmXG4gICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgIHRhYmxlIHNpemVzIG9rXFxuXCIpKTtcbiAgICAgIHN0YXRlLmhhdmUgPSAwO1xuICAgICAgc3RhdGUubW9kZSA9IExFTkxFTlM7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBMRU5MRU5TOlxuICAgICAgd2hpbGUgKHN0YXRlLmhhdmUgPCBzdGF0ZS5uY29kZSkge1xuICAgICAgICAvLz09PSBORUVEQklUUygzKTtcbiAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLmxlbnNbb3JkZXJbc3RhdGUuaGF2ZSsrXV0gPSAoaG9sZCAmIDB4MDcpOy8vQklUUygzKTtcbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoMykgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IDM7XG4gICAgICAgIGJpdHMgLT0gMztcbiAgICAgICAgLy8tLS0vL1xuICAgICAgfVxuICAgICAgd2hpbGUgKHN0YXRlLmhhdmUgPCAxOSkge1xuICAgICAgICBzdGF0ZS5sZW5zW29yZGVyW3N0YXRlLmhhdmUrK11dID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIFdlIGhhdmUgc2VwYXJhdGUgdGFibGVzICYgbm8gcG9pbnRlcnMuIDIgY29tbWVudGVkIGxpbmVzIGJlbG93IG5vdCBuZWVkZWQuXG4gICAgICAvL3N0YXRlLm5leHQgPSBzdGF0ZS5jb2RlcztcbiAgICAgIC8vc3RhdGUubGVuY29kZSA9IHN0YXRlLm5leHQ7XG4gICAgICAvLyBTd2l0Y2ggdG8gdXNlIGR5bmFtaWMgdGFibGVcbiAgICAgIHN0YXRlLmxlbmNvZGUgPSBzdGF0ZS5sZW5keW47XG4gICAgICBzdGF0ZS5sZW5iaXRzID0gNztcblxuICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9O1xuICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUubGVucywgMCwgMTksIHN0YXRlLmxlbmNvZGUsIDAsIHN0YXRlLndvcmssIG9wdHMpO1xuICAgICAgc3RhdGUubGVuYml0cyA9IG9wdHMuYml0cztcblxuICAgICAgaWYgKHJldCkge1xuICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgY29kZSBsZW5ndGhzIG9rXFxuXCIpKTtcbiAgICAgIHN0YXRlLmhhdmUgPSAwO1xuICAgICAgc3RhdGUubW9kZSA9IENPREVMRU5TO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgQ09ERUxFTlM6XG4gICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IHN0YXRlLm5sZW4gKyBzdGF0ZS5uZGlzdCkge1xuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDEpXTsvKkJJVFMoc3RhdGUubGVuYml0cykqL1xuICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0O1xuICAgICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICBpZiAoKGhlcmVfYml0cykgPD0gYml0cykgeyBicmVhazsgfVxuICAgICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgfVxuICAgICAgICBpZiAoaGVyZV92YWwgPCAxNikge1xuICAgICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy9cbiAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzO1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUrK10gPSBoZXJlX3ZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoaGVyZV92YWwgPT09IDE2KSB7XG4gICAgICAgICAgICAvLz09PSBORUVEQklUUyhoZXJlLmJpdHMgKyAyKTtcbiAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAyO1xuICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vXG4gICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgICBpZiAoc3RhdGUuaGF2ZSA9PT0gMCkge1xuICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0JztcbiAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZW4gPSBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUgLSAxXTtcbiAgICAgICAgICAgIGNvcHkgPSAzICsgKGhvbGQgJiAweDAzKTsvL0JJVFMoMik7XG4gICAgICAgICAgICAvLy0tLSBEUk9QQklUUygyKSAtLS0vL1xuICAgICAgICAgICAgaG9sZCA+Pj49IDI7XG4gICAgICAgICAgICBiaXRzIC09IDI7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGhlcmVfdmFsID09PSAxNykge1xuICAgICAgICAgICAgLy89PT0gTkVFREJJVFMoaGVyZS5iaXRzICsgMyk7XG4gICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgMztcbiAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikge1xuICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy89PT0vL1xuICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgbGVuID0gMDtcbiAgICAgICAgICAgIGNvcHkgPSAzICsgKGhvbGQgJiAweDA3KTsvL0JJVFMoMyk7XG4gICAgICAgICAgICAvLy0tLSBEUk9QQklUUygzKSAtLS0vL1xuICAgICAgICAgICAgaG9sZCA+Pj49IDM7XG4gICAgICAgICAgICBiaXRzIC09IDM7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy89PT0gTkVFREJJVFMoaGVyZS5iaXRzICsgNyk7XG4gICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgNztcbiAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikge1xuICAgICAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy89PT0vL1xuICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgICAgbGVuID0gMDtcbiAgICAgICAgICAgIGNvcHkgPSAxMSArIChob2xkICYgMHg3Zik7Ly9CSVRTKDcpO1xuICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoNykgLS0tLy9cbiAgICAgICAgICAgIGhvbGQgPj4+PSA3O1xuICAgICAgICAgICAgYml0cyAtPSA3O1xuICAgICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhdGUuaGF2ZSArIGNvcHkgPiBzdGF0ZS5ubGVuICsgc3RhdGUubmRpc3QpIHtcbiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgYml0IGxlbmd0aCByZXBlYXQnO1xuICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAoY29weS0tKSB7XG4gICAgICAgICAgICBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUrK10gPSBsZW47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIGhhbmRsZSBlcnJvciBicmVha3MgaW4gd2hpbGUgKi9cbiAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBCQUQpIHsgYnJlYWs7IH1cblxuICAgICAgLyogY2hlY2sgZm9yIGVuZC1vZi1ibG9jayBjb2RlIChiZXR0ZXIgaGF2ZSBvbmUpICovXG4gICAgICBpZiAoc3RhdGUubGVuc1syNTZdID09PSAwKSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvKiBidWlsZCBjb2RlIHRhYmxlcyAtLSBub3RlOiBkbyBub3QgY2hhbmdlIHRoZSBsZW5iaXRzIG9yIGRpc3RiaXRzXG4gICAgICAgICB2YWx1ZXMgaGVyZSAoOSBhbmQgNikgd2l0aG91dCByZWFkaW5nIHRoZSBjb21tZW50cyBpbiBpbmZ0cmVlcy5oXG4gICAgICAgICBjb25jZXJuaW5nIHRoZSBFTk9VR0ggY29uc3RhbnRzLCB3aGljaCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzICovXG4gICAgICBzdGF0ZS5sZW5iaXRzID0gOTtcblxuICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUubGVuYml0cyB9O1xuICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCBzdGF0ZS5ubGVuLCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTtcbiAgICAgIC8vIFdlIGhhdmUgc2VwYXJhdGUgdGFibGVzICYgbm8gcG9pbnRlcnMuIDIgY29tbWVudGVkIGxpbmVzIGJlbG93IG5vdCBuZWVkZWQuXG4gICAgICAvLyBzdGF0ZS5uZXh0X2luZGV4ID0gb3B0cy50YWJsZV9pbmRleDtcbiAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7XG4gICAgICAvLyBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubmV4dDtcblxuICAgICAgaWYgKHJldCkge1xuICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgc3RhdGUuZGlzdGJpdHMgPSA2O1xuICAgICAgLy9zdGF0ZS5kaXN0Y29kZS5jb3B5KHN0YXRlLmNvZGVzKTtcbiAgICAgIC8vIFN3aXRjaCB0byB1c2UgZHluYW1pYyB0YWJsZVxuICAgICAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluO1xuICAgICAgb3B0cyA9IHsgYml0czogc3RhdGUuZGlzdGJpdHMgfTtcbiAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoRElTVFMsIHN0YXRlLmxlbnMsIHN0YXRlLm5sZW4sIHN0YXRlLm5kaXN0LCBzdGF0ZS5kaXN0Y29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7XG4gICAgICAvLyBXZSBoYXZlIHNlcGFyYXRlIHRhYmxlcyAmIG5vIHBvaW50ZXJzLiAyIGNvbW1lbnRlZCBsaW5lcyBiZWxvdyBub3QgbmVlZGVkLlxuICAgICAgLy8gc3RhdGUubmV4dF9pbmRleCA9IG9wdHMudGFibGVfaW5kZXg7XG4gICAgICBzdGF0ZS5kaXN0Yml0cyA9IG9wdHMuYml0cztcbiAgICAgIC8vIHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUubmV4dDtcblxuICAgICAgaWYgKHJldCkge1xuICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlcyBzZXQnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vVHJhY2V2KChzdGRlcnIsICdpbmZsYXRlOiAgICAgICBjb2RlcyBva1xcbicpKTtcbiAgICAgIHN0YXRlLm1vZGUgPSBMRU5fO1xuICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgTEVOXzpcbiAgICAgIHN0YXRlLm1vZGUgPSBMRU47XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBMRU46XG4gICAgICBpZiAoaGF2ZSA+PSA2ICYmIGxlZnQgPj0gMjU4KSB7XG4gICAgICAgIC8vLS0tIFJFU1RPUkUoKSAtLS1cbiAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDtcbiAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0O1xuICAgICAgICBzdHJtLm5leHRfaW4gPSBuZXh0O1xuICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTtcbiAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7XG4gICAgICAgIHN0YXRlLmJpdHMgPSBiaXRzO1xuICAgICAgICAvLy0tLVxuICAgICAgICBpbmZsYXRlX2Zhc3Qoc3RybSwgX291dCk7XG4gICAgICAgIC8vLS0tIExPQUQoKSAtLS1cbiAgICAgICAgcHV0ID0gc3RybS5uZXh0X291dDtcbiAgICAgICAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7XG4gICAgICAgIGxlZnQgPSBzdHJtLmF2YWlsX291dDtcbiAgICAgICAgbmV4dCA9IHN0cm0ubmV4dF9pbjtcbiAgICAgICAgaW5wdXQgPSBzdHJtLmlucHV0O1xuICAgICAgICBoYXZlID0gc3RybS5hdmFpbF9pbjtcbiAgICAgICAgaG9sZCA9IHN0YXRlLmhvbGQ7XG4gICAgICAgIGJpdHMgPSBzdGF0ZS5iaXRzO1xuICAgICAgICAvLy0tLVxuXG4gICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBUWVBFKSB7XG4gICAgICAgICAgc3RhdGUuYmFjayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3RhdGUuYmFjayA9IDA7XG4gICAgICBmb3IgKDs7KSB7XG4gICAgICAgIGhlcmUgPSBzdGF0ZS5sZW5jb2RlW2hvbGQgJiAoKDEgPDwgc3RhdGUubGVuYml0cykgLSAxKV07ICAvKkJJVFMoc3RhdGUubGVuYml0cykqL1xuICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDtcbiAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmO1xuICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgaWYgKGhlcmVfYml0cyA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgLy8tLS0vL1xuICAgICAgfVxuICAgICAgaWYgKGhlcmVfb3AgJiYgKGhlcmVfb3AgJiAweGYwKSA9PT0gMCkge1xuICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7XG4gICAgICAgIGxhc3Rfb3AgPSBoZXJlX29wO1xuICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsO1xuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbbGFzdF92YWwgK1xuICAgICAgICAgICAgICAgICAgKChob2xkICYgKCgxIDw8IChsYXN0X2JpdHMgKyBsYXN0X29wKSkgLSAxKSkvKkJJVFMobGFzdC5iaXRzICsgbGFzdC5vcCkqLyA+PiBsYXN0X2JpdHMpXTtcbiAgICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDtcbiAgICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7XG4gICAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgMHhmZmZmO1xuXG4gICAgICAgICAgaWYgKChsYXN0X2JpdHMgKyBoZXJlX2JpdHMpIDw9IGJpdHMpIHsgYnJlYWs7IH1cbiAgICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vXG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAvLy0tLS8vXG4gICAgICAgIH1cbiAgICAgICAgLy8tLS0gRFJPUEJJVFMobGFzdC5iaXRzKSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gbGFzdF9iaXRzO1xuICAgICAgICBiaXRzIC09IGxhc3RfYml0cztcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICBzdGF0ZS5iYWNrICs9IGxhc3RfYml0cztcbiAgICAgIH1cbiAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy9cbiAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7XG4gICAgICBiaXRzIC09IGhlcmVfYml0cztcbiAgICAgIC8vLS0tLy9cbiAgICAgIHN0YXRlLmJhY2sgKz0gaGVyZV9iaXRzO1xuICAgICAgc3RhdGUubGVuZ3RoID0gaGVyZV92YWw7XG4gICAgICBpZiAoaGVyZV9vcCA9PT0gMCkge1xuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgaGVyZS52YWwgPj0gMHgyMCAmJiBoZXJlLnZhbCA8IDB4N2YgP1xuICAgICAgICAvLyAgICAgICAgXCJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgJyVjJ1xcblwiIDpcbiAgICAgICAgLy8gICAgICAgIFwiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxcblwiLCBoZXJlLnZhbCkpO1xuICAgICAgICBzdGF0ZS5tb2RlID0gTElUO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChoZXJlX29wICYgMzIpIHtcbiAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBlbmQgb2YgYmxvY2tcXG5cIikpO1xuICAgICAgICBzdGF0ZS5iYWNrID0gLTE7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChoZXJlX29wICYgNjQpIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzdGF0ZS5leHRyYSA9IGhlcmVfb3AgJiAxNTtcbiAgICAgIHN0YXRlLm1vZGUgPSBMRU5FWFQ7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBMRU5FWFQ6XG4gICAgICBpZiAoc3RhdGUuZXh0cmEpIHtcbiAgICAgICAgLy89PT0gTkVFREJJVFMoc3RhdGUuZXh0cmEpO1xuICAgICAgICBuID0gc3RhdGUuZXh0cmE7XG4gICAgICAgIHdoaWxlIChiaXRzIDwgbikge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5sZW5ndGggKz0gaG9sZCAmICgoMSA8PCBzdGF0ZS5leHRyYSkgLSAxKS8qQklUUyhzdGF0ZS5leHRyYSkqLztcbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoc3RhdGUuZXh0cmEpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSBzdGF0ZS5leHRyYTtcbiAgICAgICAgYml0cyAtPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICBzdGF0ZS5iYWNrICs9IHN0YXRlLmV4dHJhO1xuICAgICAgfVxuICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBsZW5ndGggJXVcXG5cIiwgc3RhdGUubGVuZ3RoKSk7XG4gICAgICBzdGF0ZS53YXMgPSBzdGF0ZS5sZW5ndGg7XG4gICAgICBzdGF0ZS5tb2RlID0gRElTVDtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIERJU1Q6XG4gICAgICBmb3IgKDs7KSB7XG4gICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtob2xkICYgKCgxIDw8IHN0YXRlLmRpc3RiaXRzKSAtIDEpXTsvKkJJVFMoc3RhdGUuZGlzdGJpdHMpKi9cbiAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgMHhmZmZmO1xuXG4gICAgICAgIGlmICgoaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGhhdmUtLTtcbiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgLy8tLS0vL1xuICAgICAgfVxuICAgICAgaWYgKChoZXJlX29wICYgMHhmMCkgPT09IDApIHtcbiAgICAgICAgbGFzdF9iaXRzID0gaGVyZV9iaXRzO1xuICAgICAgICBsYXN0X29wID0gaGVyZV9vcDtcbiAgICAgICAgbGFzdF92YWwgPSBoZXJlX3ZhbDtcbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtsYXN0X3ZhbCArXG4gICAgICAgICAgICAgICAgICAoKGhvbGQgJiAoKDEgPDwgKGxhc3RfYml0cyArIGxhc3Rfb3ApKSAtIDEpKS8qQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSovID4+IGxhc3RfYml0cyldO1xuICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0O1xuICAgICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICBpZiAoKGxhc3RfYml0cyArIGhlcmVfYml0cykgPD0gYml0cykgeyBicmVhazsgfVxuICAgICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgfVxuICAgICAgICAvLy0tLSBEUk9QQklUUyhsYXN0LmJpdHMpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSBsYXN0X2JpdHM7XG4gICAgICAgIGJpdHMgLT0gbGFzdF9iaXRzO1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzO1xuICAgICAgfVxuICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgIGJpdHMgLT0gaGVyZV9iaXRzO1xuICAgICAgLy8tLS0vL1xuICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7XG4gICAgICBpZiAoaGVyZV9vcCAmIDY0KSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgY29kZSc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3RhdGUub2Zmc2V0ID0gaGVyZV92YWw7XG4gICAgICBzdGF0ZS5leHRyYSA9IChoZXJlX29wKSAmIDE1O1xuICAgICAgc3RhdGUubW9kZSA9IERJU1RFWFQ7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBESVNURVhUOlxuICAgICAgaWYgKHN0YXRlLmV4dHJhKSB7XG4gICAgICAgIC8vPT09IE5FRURCSVRTKHN0YXRlLmV4dHJhKTtcbiAgICAgICAgbiA9IHN0YXRlLmV4dHJhO1xuICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RhdGUub2Zmc2V0ICs9IGhvbGQgJiAoKDEgPDwgc3RhdGUuZXh0cmEpIC0gMSkvKkJJVFMoc3RhdGUuZXh0cmEpKi87XG4gICAgICAgIC8vLS0tIERST1BCSVRTKHN0YXRlLmV4dHJhKSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gc3RhdGUuZXh0cmE7XG4gICAgICAgIGJpdHMgLT0gc3RhdGUuZXh0cmE7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgc3RhdGUuYmFjayArPSBzdGF0ZS5leHRyYTtcbiAgICAgIH1cbi8vI2lmZGVmIElORkxBVEVfU1RSSUNUXG4gICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gc3RhdGUuZG1heCkge1xuICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuLy8jZW5kaWZcbiAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJXVcXG5cIiwgc3RhdGUub2Zmc2V0KSk7XG4gICAgICBzdGF0ZS5tb2RlID0gTUFUQ0g7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBNQVRDSDpcbiAgICAgIGlmIChsZWZ0ID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgY29weSA9IF9vdXQgLSBsZWZ0O1xuICAgICAgaWYgKHN0YXRlLm9mZnNldCA+IGNvcHkpIHsgICAgICAgICAvKiBjb3B5IGZyb20gd2luZG93ICovXG4gICAgICAgIGNvcHkgPSBzdGF0ZS5vZmZzZXQgLSBjb3B5O1xuICAgICAgICBpZiAoY29weSA+IHN0YXRlLndoYXZlKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnNhbmUpIHtcbiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrJztcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4vLyAoISkgVGhpcyBibG9jayBpcyBkaXNhYmxlZCBpbiB6bGliIGRlZmFpbHRzLFxuLy8gZG9uJ3QgZW5hYmxlIGl0IGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eVxuLy8jaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSXG4vLyAgICAgICAgICBUcmFjZSgoc3RkZXJyLCBcImluZmxhdGUuYyB0b28gZmFyXFxuXCIpKTtcbi8vICAgICAgICAgIGNvcHkgLT0gc3RhdGUud2hhdmU7XG4vLyAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLmxlbmd0aCkgeyBjb3B5ID0gc3RhdGUubGVuZ3RoOyB9XG4vLyAgICAgICAgICBpZiAoY29weSA+IGxlZnQpIHsgY29weSA9IGxlZnQ7IH1cbi8vICAgICAgICAgIGxlZnQgLT0gY29weTtcbi8vICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5O1xuLy8gICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICBvdXRwdXRbcHV0KytdID0gMDtcbi8vICAgICAgICAgIH0gd2hpbGUgKC0tY29weSk7XG4vLyAgICAgICAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7IHN0YXRlLm1vZGUgPSBMRU47IH1cbi8vICAgICAgICAgIGJyZWFrO1xuLy8jZW5kaWZcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29weSA+IHN0YXRlLnduZXh0KSB7XG4gICAgICAgICAgY29weSAtPSBzdGF0ZS53bmV4dDtcbiAgICAgICAgICBmcm9tID0gc3RhdGUud3NpemUgLSBjb3B5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZyb20gPSBzdGF0ZS53bmV4dCAtIGNvcHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS5sZW5ndGgpIHsgY29weSA9IHN0YXRlLmxlbmd0aDsgfVxuICAgICAgICBmcm9tX3NvdXJjZSA9IHN0YXRlLndpbmRvdztcbiAgICAgIH1cbiAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcHkgZnJvbSBvdXRwdXQgKi9cbiAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7XG4gICAgICAgIGZyb20gPSBwdXQgLSBzdGF0ZS5vZmZzZXQ7XG4gICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoY29weSA+IGxlZnQpIHsgY29weSA9IGxlZnQ7IH1cbiAgICAgIGxlZnQgLT0gY29weTtcbiAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5O1xuICAgICAgZG8ge1xuICAgICAgICBvdXRwdXRbcHV0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgIH0gd2hpbGUgKC0tY29weSk7XG4gICAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7IHN0YXRlLm1vZGUgPSBMRU47IH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTElUOlxuICAgICAgaWYgKGxlZnQgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICBvdXRwdXRbcHV0KytdID0gc3RhdGUubGVuZ3RoO1xuICAgICAgbGVmdC0tO1xuICAgICAgc3RhdGUubW9kZSA9IExFTjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ0hFQ0s6XG4gICAgICBpZiAoc3RhdGUud3JhcCkge1xuICAgICAgICAvLz09PSBORUVEQklUUygzMik7XG4gICAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgLy8gVXNlICd8JyBpbnNkZWFkIG9mICcrJyB0byBtYWtlIHN1cmUgdGhhdCByZXN1bHQgaXMgc2lnbmVkXG4gICAgICAgICAgaG9sZCB8PSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgX291dCAtPSBsZWZ0O1xuICAgICAgICBzdHJtLnRvdGFsX291dCArPSBfb3V0O1xuICAgICAgICBzdGF0ZS50b3RhbCArPSBfb3V0O1xuICAgICAgICBpZiAoX291dCkge1xuICAgICAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9XG4gICAgICAgICAgICAgIC8qVVBEQVRFKHN0YXRlLmNoZWNrLCBwdXQgLSBfb3V0LCBfb3V0KTsqL1xuICAgICAgICAgICAgICAoc3RhdGUuZmxhZ3MgPyBjcmMzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBwdXQgLSBfb3V0KSA6IGFkbGVyMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgcHV0IC0gX291dCkpO1xuXG4gICAgICAgIH1cbiAgICAgICAgX291dCA9IGxlZnQ7XG4gICAgICAgIC8vIE5COiBjcmMzMiBzdG9yZWQgYXMgc2lnbmVkIDMyLWJpdCBpbnQsIHpzd2FwMzIgcmV0dXJucyBzaWduZWQgdG9vXG4gICAgICAgIGlmICgoc3RhdGUuZmxhZ3MgPyBob2xkIDogenN3YXAzMihob2xkKSkgIT09IHN0YXRlLmNoZWNrKSB7XG4gICAgICAgICAgc3RybS5tc2cgPSAnaW5jb3JyZWN0IGRhdGEgY2hlY2snO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAvLz09PS8vXG4gICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICBjaGVjayBtYXRjaGVzIHRyYWlsZXJcXG5cIikpO1xuICAgICAgfVxuICAgICAgc3RhdGUubW9kZSA9IExFTkdUSDtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIExFTkdUSDpcbiAgICAgIGlmIChzdGF0ZS53cmFwICYmIHN0YXRlLmZsYWdzKSB7XG4gICAgICAgIC8vPT09IE5FRURCSVRTKDMyKTtcbiAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBpZiAoaG9sZCAhPT0gKHN0YXRlLnRvdGFsICYgMHhmZmZmZmZmZikpIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICdpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgIGhvbGQgPSAwO1xuICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgLy89PT0vL1xuICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgbGVuZ3RoIG1hdGNoZXMgdHJhaWxlclxcblwiKSk7XG4gICAgICB9XG4gICAgICBzdGF0ZS5tb2RlID0gRE9ORTtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIERPTkU6XG4gICAgICByZXQgPSBaX1NUUkVBTV9FTkQ7XG4gICAgICBicmVhayBpbmZfbGVhdmU7XG4gICAgY2FzZSBCQUQ6XG4gICAgICByZXQgPSBaX0RBVEFfRVJST1I7XG4gICAgICBicmVhayBpbmZfbGVhdmU7XG4gICAgY2FzZSBNRU06XG4gICAgICByZXR1cm4gWl9NRU1fRVJST1I7XG4gICAgY2FzZSBTWU5DOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5mX2xlYXZlIDwtIGhlcmUgaXMgcmVhbCBwbGFjZSBmb3IgXCJnb3RvIGluZl9sZWF2ZVwiLCBlbXVsYXRlZCB2aWEgXCJicmVhayBpbmZfbGVhdmVcIlxuXG4gIC8qXG4gICAgIFJldHVybiBmcm9tIGluZmxhdGUoKSwgdXBkYXRpbmcgdGhlIHRvdGFsIGNvdW50cyBhbmQgdGhlIGNoZWNrIHZhbHVlLlxuICAgICBJZiB0aGVyZSB3YXMgbm8gcHJvZ3Jlc3MgZHVyaW5nIHRoZSBpbmZsYXRlKCkgY2FsbCwgcmV0dXJuIGEgYnVmZmVyXG4gICAgIGVycm9yLiAgQ2FsbCB1cGRhdGV3aW5kb3coKSB0byBjcmVhdGUgYW5kL29yIHVwZGF0ZSB0aGUgd2luZG93IHN0YXRlLlxuICAgICBOb3RlOiBhIG1lbW9yeSBlcnJvciBmcm9tIGluZmxhdGUoKSBpcyBub24tcmVjb3ZlcmFibGUuXG4gICAqL1xuXG4gIC8vLS0tIFJFU1RPUkUoKSAtLS1cbiAgc3RybS5uZXh0X291dCA9IHB1dDtcbiAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0O1xuICBzdHJtLm5leHRfaW4gPSBuZXh0O1xuICBzdHJtLmF2YWlsX2luID0gaGF2ZTtcbiAgc3RhdGUuaG9sZCA9IGhvbGQ7XG4gIHN0YXRlLmJpdHMgPSBiaXRzO1xuICAvLy0tLVxuXG4gIGlmIChzdGF0ZS53c2l6ZSB8fCAoX291dCAhPT0gc3RybS5hdmFpbF9vdXQgJiYgc3RhdGUubW9kZSA8IEJBRCAmJlxuICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZS5tb2RlIDwgQ0hFQ0sgfHwgZmx1c2ggIT09IFpfRklOSVNIKSkpIHtcbiAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0LCBfb3V0IC0gc3RybS5hdmFpbF9vdXQpKSB7XG4gICAgICBzdGF0ZS5tb2RlID0gTUVNO1xuICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SO1xuICAgIH1cbiAgfVxuICBfaW4gLT0gc3RybS5hdmFpbF9pbjtcbiAgX291dCAtPSBzdHJtLmF2YWlsX291dDtcbiAgc3RybS50b3RhbF9pbiArPSBfaW47XG4gIHN0cm0udG90YWxfb3V0ICs9IF9vdXQ7XG4gIHN0YXRlLnRvdGFsICs9IF9vdXQ7XG4gIGlmIChzdGF0ZS53cmFwICYmIF9vdXQpIHtcbiAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAvKlVQREFURShzdGF0ZS5jaGVjaywgc3RybS5uZXh0X291dCAtIF9vdXQsIF9vdXQpOyovXG4gICAgICAoc3RhdGUuZmxhZ3MgPyBjcmMzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBzdHJtLm5leHRfb3V0IC0gX291dCkgOiBhZGxlcjMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHN0cm0ubmV4dF9vdXQgLSBfb3V0KSk7XG4gIH1cbiAgc3RybS5kYXRhX3R5cGUgPSBzdGF0ZS5iaXRzICsgKHN0YXRlLmxhc3QgPyA2NCA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgKHN0YXRlLm1vZGUgPT09IFRZUEUgPyAxMjggOiAwKSArXG4gICAgICAgICAgICAgICAgICAgIChzdGF0ZS5tb2RlID09PSBMRU5fIHx8IHN0YXRlLm1vZGUgPT09IENPUFlfID8gMjU2IDogMCk7XG4gIGlmICgoKF9pbiA9PT0gMCAmJiBfb3V0ID09PSAwKSB8fCBmbHVzaCA9PT0gWl9GSU5JU0gpICYmIHJldCA9PT0gWl9PSykge1xuICAgIHJldCA9IFpfQlVGX0VSUk9SO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVFbmQoc3RybSkge1xuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSAvKnx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCovKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgdmFyIHN0YXRlID0gc3RybS5zdGF0ZTtcbiAgaWYgKHN0YXRlLndpbmRvdykge1xuICAgIHN0YXRlLndpbmRvdyA9IG51bGw7XG4gIH1cbiAgc3RybS5zdGF0ZSA9IG51bGw7XG4gIHJldHVybiBaX09LO1xufVxuXG5mdW5jdGlvbiBpbmZsYXRlR2V0SGVhZGVyKHN0cm0sIGhlYWQpIHtcbiAgdmFyIHN0YXRlO1xuXG4gIC8qIGNoZWNrIHN0YXRlICovXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICBpZiAoKHN0YXRlLndyYXAgJiAyKSA9PT0gMCkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cblxuICAvKiBzYXZlIGhlYWRlciBzdHJ1Y3R1cmUgKi9cbiAgc3RhdGUuaGVhZCA9IGhlYWQ7XG4gIGhlYWQuZG9uZSA9IGZhbHNlO1xuICByZXR1cm4gWl9PSztcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSkge1xuICB2YXIgZGljdExlbmd0aCA9IGRpY3Rpb25hcnkubGVuZ3RoO1xuXG4gIHZhciBzdGF0ZTtcbiAgdmFyIGRpY3RpZDtcbiAgdmFyIHJldDtcblxuICAvKiBjaGVjayBzdGF0ZSAqL1xuICBpZiAoIXN0cm0gLyogPT0gWl9OVUxMICovIHx8ICFzdHJtLnN0YXRlIC8qID09IFpfTlVMTCAqLykgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuXG4gIGlmIChzdGF0ZS53cmFwICE9PSAwICYmIHN0YXRlLm1vZGUgIT09IERJQ1QpIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cblxuICAvKiBjaGVjayBmb3IgY29ycmVjdCBkaWN0aW9uYXJ5IGlkZW50aWZpZXIgKi9cbiAgaWYgKHN0YXRlLm1vZGUgPT09IERJQ1QpIHtcbiAgICBkaWN0aWQgPSAxOyAvKiBhZGxlcjMyKDAsIG51bGwsIDApKi9cbiAgICAvKiBkaWN0aWQgPSBhZGxlcjMyKGRpY3RpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7ICovXG4gICAgZGljdGlkID0gYWRsZXIzMihkaWN0aWQsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgsIDApO1xuICAgIGlmIChkaWN0aWQgIT09IHN0YXRlLmNoZWNrKSB7XG4gICAgICByZXR1cm4gWl9EQVRBX0VSUk9SO1xuICAgIH1cbiAgfVxuICAvKiBjb3B5IGRpY3Rpb25hcnkgdG8gd2luZG93IHVzaW5nIHVwZGF0ZXdpbmRvdygpLCB3aGljaCB3aWxsIGFtZW5kIHRoZVxuICAgZXhpc3RpbmcgZGljdGlvbmFyeSBpZiBhcHByb3ByaWF0ZSAqL1xuICByZXQgPSB1cGRhdGV3aW5kb3coc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwgZGljdExlbmd0aCk7XG4gIGlmIChyZXQpIHtcbiAgICBzdGF0ZS5tb2RlID0gTUVNO1xuICAgIHJldHVybiBaX01FTV9FUlJPUjtcbiAgfVxuICBzdGF0ZS5oYXZlZGljdCA9IDE7XG4gIC8vIFRyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgZGljdGlvbmFyeSBzZXRcXG5cIikpO1xuICByZXR1cm4gWl9PSztcbn1cblxuZXhwb3J0cy5pbmZsYXRlUmVzZXQgPSBpbmZsYXRlUmVzZXQ7XG5leHBvcnRzLmluZmxhdGVSZXNldDIgPSBpbmZsYXRlUmVzZXQyO1xuZXhwb3J0cy5pbmZsYXRlUmVzZXRLZWVwID0gaW5mbGF0ZVJlc2V0S2VlcDtcbmV4cG9ydHMuaW5mbGF0ZUluaXQgPSBpbmZsYXRlSW5pdDtcbmV4cG9ydHMuaW5mbGF0ZUluaXQyID0gaW5mbGF0ZUluaXQyO1xuZXhwb3J0cy5pbmZsYXRlID0gaW5mbGF0ZTtcbmV4cG9ydHMuaW5mbGF0ZUVuZCA9IGluZmxhdGVFbmQ7XG5leHBvcnRzLmluZmxhdGVHZXRIZWFkZXIgPSBpbmZsYXRlR2V0SGVhZGVyO1xuZXhwb3J0cy5pbmZsYXRlU2V0RGljdGlvbmFyeSA9IGluZmxhdGVTZXREaWN0aW9uYXJ5O1xuZXhwb3J0cy5pbmZsYXRlSW5mbyA9ICdwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpJztcblxuLyogTm90IGltcGxlbWVudGVkXG5leHBvcnRzLmluZmxhdGVDb3B5ID0gaW5mbGF0ZUNvcHk7XG5leHBvcnRzLmluZmxhdGVHZXREaWN0aW9uYXJ5ID0gaW5mbGF0ZUdldERpY3Rpb25hcnk7XG5leHBvcnRzLmluZmxhdGVNYXJrID0gaW5mbGF0ZU1hcms7XG5leHBvcnRzLmluZmxhdGVQcmltZSA9IGluZmxhdGVQcmltZTtcbmV4cG9ydHMuaW5mbGF0ZVN5bmMgPSBpbmZsYXRlU3luYztcbmV4cG9ydHMuaW5mbGF0ZVN5bmNQb2ludCA9IGluZmxhdGVTeW5jUG9pbnQ7XG5leHBvcnRzLmluZmxhdGVVbmRlcm1pbmUgPSBpbmZsYXRlVW5kZXJtaW5lO1xuKi9cbiIsIid1c2Ugc3RyaWN0JztcblxuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscy9jb21tb24nKTtcblxudmFyIE1BWEJJVFMgPSAxNTtcbnZhciBFTk9VR0hfTEVOUyA9IDg1MjtcbnZhciBFTk9VR0hfRElTVFMgPSA1OTI7XG4vL3ZhciBFTk9VR0ggPSAoRU5PVUdIX0xFTlMrRU5PVUdIX0RJU1RTKTtcblxudmFyIENPREVTID0gMDtcbnZhciBMRU5TID0gMTtcbnZhciBESVNUUyA9IDI7XG5cbnZhciBsYmFzZSA9IFsgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGJhc2UgKi9cbiAgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMywgMTUsIDE3LCAxOSwgMjMsIDI3LCAzMSxcbiAgMzUsIDQzLCA1MSwgNTksIDY3LCA4MywgOTksIDExNSwgMTMxLCAxNjMsIDE5NSwgMjI3LCAyNTgsIDAsIDBcbl07XG5cbnZhciBsZXh0ID0gWyAvKiBMZW5ndGggY29kZXMgMjU3Li4yODUgZXh0cmEgKi9cbiAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE3LCAxNywgMTgsIDE4LCAxOCwgMTgsXG4gIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3MiwgNzhcbl07XG5cbnZhciBkYmFzZSA9IFsgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgYmFzZSAqL1xuICAxLCAyLCAzLCA0LCA1LCA3LCA5LCAxMywgMTcsIDI1LCAzMywgNDksIDY1LCA5NywgMTI5LCAxOTMsXG4gIDI1NywgMzg1LCA1MTMsIDc2OSwgMTAyNSwgMTUzNywgMjA0OSwgMzA3MywgNDA5NywgNjE0NSxcbiAgODE5MywgMTIyODksIDE2Mzg1LCAyNDU3NywgMCwgMFxuXTtcblxudmFyIGRleHQgPSBbIC8qIERpc3RhbmNlIGNvZGVzIDAuLjI5IGV4dHJhICovXG4gIDE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE4LCAxOCwgMTksIDE5LCAyMCwgMjAsIDIxLCAyMSwgMjIsIDIyLFxuICAyMywgMjMsIDI0LCAyNCwgMjUsIDI1LCAyNiwgMjYsIDI3LCAyNyxcbiAgMjgsIDI4LCAyOSwgMjksIDY0LCA2NFxuXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmZsYXRlX3RhYmxlKHR5cGUsIGxlbnMsIGxlbnNfaW5kZXgsIGNvZGVzLCB0YWJsZSwgdGFibGVfaW5kZXgsIHdvcmssIG9wdHMpXG57XG4gIHZhciBiaXRzID0gb3B0cy5iaXRzO1xuICAgICAgLy9oZXJlID0gb3B0cy5oZXJlOyAvKiB0YWJsZSBlbnRyeSBmb3IgZHVwbGljYXRpb24gKi9cblxuICB2YXIgbGVuID0gMDsgICAgICAgICAgICAgICAvKiBhIGNvZGUncyBsZW5ndGggaW4gYml0cyAqL1xuICB2YXIgc3ltID0gMDsgICAgICAgICAgICAgICAvKiBpbmRleCBvZiBjb2RlIHN5bWJvbHMgKi9cbiAgdmFyIG1pbiA9IDAsIG1heCA9IDA7ICAgICAgICAgIC8qIG1pbmltdW0gYW5kIG1heGltdW0gY29kZSBsZW5ndGhzICovXG4gIHZhciByb290ID0gMDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciByb290IHRhYmxlICovXG4gIHZhciBjdXJyID0gMDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciBjdXJyZW50IHRhYmxlICovXG4gIHZhciBkcm9wID0gMDsgICAgICAgICAgICAgIC8qIGNvZGUgYml0cyB0byBkcm9wIGZvciBzdWItdGFibGUgKi9cbiAgdmFyIGxlZnQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcHJlZml4IGNvZGVzIGF2YWlsYWJsZSAqL1xuICB2YXIgdXNlZCA9IDA7ICAgICAgICAgICAgICAvKiBjb2RlIGVudHJpZXMgaW4gdGFibGUgdXNlZCAqL1xuICB2YXIgaHVmZiA9IDA7ICAgICAgICAgICAgICAvKiBIdWZmbWFuIGNvZGUgKi9cbiAgdmFyIGluY3I7ICAgICAgICAgICAgICAvKiBmb3IgaW5jcmVtZW50aW5nIGNvZGUsIGluZGV4ICovXG4gIHZhciBmaWxsOyAgICAgICAgICAgICAgLyogaW5kZXggZm9yIHJlcGxpY2F0aW5nIGVudHJpZXMgKi9cbiAgdmFyIGxvdzsgICAgICAgICAgICAgICAvKiBsb3cgYml0cyBmb3IgY3VycmVudCByb290IGVudHJ5ICovXG4gIHZhciBtYXNrOyAgICAgICAgICAgICAgLyogbWFzayBmb3IgbG93IHJvb3QgYml0cyAqL1xuICB2YXIgbmV4dDsgICAgICAgICAgICAgLyogbmV4dCBhdmFpbGFibGUgc3BhY2UgaW4gdGFibGUgKi9cbiAgdmFyIGJhc2UgPSBudWxsOyAgICAgLyogYmFzZSB2YWx1ZSB0YWJsZSB0byB1c2UgKi9cbiAgdmFyIGJhc2VfaW5kZXggPSAwO1xuLy8gIHZhciBzaG9leHRyYTsgICAgLyogZXh0cmEgYml0cyB0YWJsZSB0byB1c2UgKi9cbiAgdmFyIGVuZDsgICAgICAgICAgICAgICAgICAgIC8qIHVzZSBiYXNlIGFuZCBleHRyYSBmb3Igc3ltYm9sID4gZW5kICovXG4gIHZhciBjb3VudCA9IG5ldyB1dGlscy5CdWYxNihNQVhCSVRTICsgMSk7IC8vW01BWEJJVFMrMV07ICAgIC8qIG51bWJlciBvZiBjb2RlcyBvZiBlYWNoIGxlbmd0aCAqL1xuICB2YXIgb2ZmcyA9IG5ldyB1dGlscy5CdWYxNihNQVhCSVRTICsgMSk7IC8vW01BWEJJVFMrMV07ICAgICAvKiBvZmZzZXRzIGluIHRhYmxlIGZvciBlYWNoIGxlbmd0aCAqL1xuICB2YXIgZXh0cmEgPSBudWxsO1xuICB2YXIgZXh0cmFfaW5kZXggPSAwO1xuXG4gIHZhciBoZXJlX2JpdHMsIGhlcmVfb3AsIGhlcmVfdmFsO1xuXG4gIC8qXG4gICBQcm9jZXNzIGEgc2V0IG9mIGNvZGUgbGVuZ3RocyB0byBjcmVhdGUgYSBjYW5vbmljYWwgSHVmZm1hbiBjb2RlLiAgVGhlXG4gICBjb2RlIGxlbmd0aHMgYXJlIGxlbnNbMC4uY29kZXMtMV0uICBFYWNoIGxlbmd0aCBjb3JyZXNwb25kcyB0byB0aGVcbiAgIHN5bWJvbHMgMC4uY29kZXMtMS4gIFRoZSBIdWZmbWFuIGNvZGUgaXMgZ2VuZXJhdGVkIGJ5IGZpcnN0IHNvcnRpbmcgdGhlXG4gICBzeW1ib2xzIGJ5IGxlbmd0aCBmcm9tIHNob3J0IHRvIGxvbmcsIGFuZCByZXRhaW5pbmcgdGhlIHN5bWJvbCBvcmRlclxuICAgZm9yIGNvZGVzIHdpdGggZXF1YWwgbGVuZ3Rocy4gIFRoZW4gdGhlIGNvZGUgc3RhcnRzIHdpdGggYWxsIHplcm8gYml0c1xuICAgZm9yIHRoZSBmaXJzdCBjb2RlIG9mIHRoZSBzaG9ydGVzdCBsZW5ndGgsIGFuZCB0aGUgY29kZXMgYXJlIGludGVnZXJcbiAgIGluY3JlbWVudHMgZm9yIHRoZSBzYW1lIGxlbmd0aCwgYW5kIHplcm9zIGFyZSBhcHBlbmRlZCBhcyB0aGUgbGVuZ3RoXG4gICBpbmNyZWFzZXMuICBGb3IgdGhlIGRlZmxhdGUgZm9ybWF0LCB0aGVzZSBiaXRzIGFyZSBzdG9yZWQgYmFja3dhcmRzXG4gICBmcm9tIHRoZWlyIG1vcmUgbmF0dXJhbCBpbnRlZ2VyIGluY3JlbWVudCBvcmRlcmluZywgYW5kIHNvIHdoZW4gdGhlXG4gICBkZWNvZGluZyB0YWJsZXMgYXJlIGJ1aWx0IGluIHRoZSBsYXJnZSBsb29wIGJlbG93LCB0aGUgaW50ZWdlciBjb2Rlc1xuICAgYXJlIGluY3JlbWVudGVkIGJhY2t3YXJkcy5cblxuICAgVGhpcyByb3V0aW5lIGFzc3VtZXMsIGJ1dCBkb2VzIG5vdCBjaGVjaywgdGhhdCBhbGwgb2YgdGhlIGVudHJpZXMgaW5cbiAgIGxlbnNbXSBhcmUgaW4gdGhlIHJhbmdlIDAuLk1BWEJJVFMuICBUaGUgY2FsbGVyIG11c3QgYXNzdXJlIHRoaXMuXG4gICAxLi5NQVhCSVRTIGlzIGludGVycHJldGVkIGFzIHRoYXQgY29kZSBsZW5ndGguICB6ZXJvIG1lYW5zIHRoYXQgdGhhdFxuICAgc3ltYm9sIGRvZXMgbm90IG9jY3VyIGluIHRoaXMgY29kZS5cblxuICAgVGhlIGNvZGVzIGFyZSBzb3J0ZWQgYnkgY29tcHV0aW5nIGEgY291bnQgb2YgY29kZXMgZm9yIGVhY2ggbGVuZ3RoLFxuICAgY3JlYXRpbmcgZnJvbSB0aGF0IGEgdGFibGUgb2Ygc3RhcnRpbmcgaW5kaWNlcyBmb3IgZWFjaCBsZW5ndGggaW4gdGhlXG4gICBzb3J0ZWQgdGFibGUsIGFuZCB0aGVuIGVudGVyaW5nIHRoZSBzeW1ib2xzIGluIG9yZGVyIGluIHRoZSBzb3J0ZWRcbiAgIHRhYmxlLiAgVGhlIHNvcnRlZCB0YWJsZSBpcyB3b3JrW10sIHdpdGggdGhhdCBzcGFjZSBiZWluZyBwcm92aWRlZCBieVxuICAgdGhlIGNhbGxlci5cblxuICAgVGhlIGxlbmd0aCBjb3VudHMgYXJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzIGFzIHdlbGwsIGkuZS4gZmluZGluZ1xuICAgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gbGVuZ3RoIGNvZGVzLCBkZXRlcm1pbmluZyBpZiB0aGVyZSBhcmUgYW55XG4gICBjb2RlcyBhdCBhbGwsIGNoZWNraW5nIGZvciBhIHZhbGlkIHNldCBvZiBsZW5ndGhzLCBhbmQgbG9va2luZyBhaGVhZFxuICAgYXQgbGVuZ3RoIGNvdW50cyB0byBkZXRlcm1pbmUgc3ViLXRhYmxlIHNpemVzIHdoZW4gYnVpbGRpbmcgdGhlXG4gICBkZWNvZGluZyB0YWJsZXMuXG4gICAqL1xuXG4gIC8qIGFjY3VtdWxhdGUgbGVuZ3RocyBmb3IgY29kZXMgKGFzc3VtZXMgbGVuc1tdIGFsbCBpbiAwLi5NQVhCSVRTKSAqL1xuICBmb3IgKGxlbiA9IDA7IGxlbiA8PSBNQVhCSVRTOyBsZW4rKykge1xuICAgIGNvdW50W2xlbl0gPSAwO1xuICB9XG4gIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7XG4gICAgY291bnRbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rKztcbiAgfVxuXG4gIC8qIGJvdW5kIGNvZGUgbGVuZ3RocywgZm9yY2Ugcm9vdCB0byBiZSB3aXRoaW4gY29kZSBsZW5ndGhzICovXG4gIHJvb3QgPSBiaXRzO1xuICBmb3IgKG1heCA9IE1BWEJJVFM7IG1heCA+PSAxOyBtYXgtLSkge1xuICAgIGlmIChjb3VudFttYXhdICE9PSAwKSB7IGJyZWFrOyB9XG4gIH1cbiAgaWYgKHJvb3QgPiBtYXgpIHtcbiAgICByb290ID0gbWF4O1xuICB9XG4gIGlmIChtYXggPT09IDApIHsgICAgICAgICAgICAgICAgICAgICAvKiBubyBzeW1ib2xzIHRvIGNvZGUgYXQgYWxsICovXG4gICAgLy90YWJsZS5vcFtvcHRzLnRhYmxlX2luZGV4XSA9IDY0OyAgLy9oZXJlLm9wID0gKHZhciBjaGFyKTY0OyAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovXG4gICAgLy90YWJsZS5iaXRzW29wdHMudGFibGVfaW5kZXhdID0gMTsgICAvL2hlcmUuYml0cyA9ICh2YXIgY2hhcikxO1xuICAgIC8vdGFibGUudmFsW29wdHMudGFibGVfaW5kZXgrK10gPSAwOyAgIC8vaGVyZS52YWwgPSAodmFyIHNob3J0KTA7XG4gICAgdGFibGVbdGFibGVfaW5kZXgrK10gPSAoMSA8PCAyNCkgfCAoNjQgPDwgMTYpIHwgMDtcblxuXG4gICAgLy90YWJsZS5vcFtvcHRzLnRhYmxlX2luZGV4XSA9IDY0O1xuICAgIC8vdGFibGUuYml0c1tvcHRzLnRhYmxlX2luZGV4XSA9IDE7XG4gICAgLy90YWJsZS52YWxbb3B0cy50YWJsZV9pbmRleCsrXSA9IDA7XG4gICAgdGFibGVbdGFibGVfaW5kZXgrK10gPSAoMSA8PCAyNCkgfCAoNjQgPDwgMTYpIHwgMDtcblxuICAgIG9wdHMuYml0cyA9IDE7XG4gICAgcmV0dXJuIDA7ICAgICAvKiBubyBzeW1ib2xzLCBidXQgd2FpdCBmb3IgZGVjb2RpbmcgdG8gcmVwb3J0IGVycm9yICovXG4gIH1cbiAgZm9yIChtaW4gPSAxOyBtaW4gPCBtYXg7IG1pbisrKSB7XG4gICAgaWYgKGNvdW50W21pbl0gIT09IDApIHsgYnJlYWs7IH1cbiAgfVxuICBpZiAocm9vdCA8IG1pbikge1xuICAgIHJvb3QgPSBtaW47XG4gIH1cblxuICAvKiBjaGVjayBmb3IgYW4gb3Zlci1zdWJzY3JpYmVkIG9yIGluY29tcGxldGUgc2V0IG9mIGxlbmd0aHMgKi9cbiAgbGVmdCA9IDE7XG4gIGZvciAobGVuID0gMTsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7XG4gICAgbGVmdCA8PD0gMTtcbiAgICBsZWZ0IC09IGNvdW50W2xlbl07XG4gICAgaWYgKGxlZnQgPCAwKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfSAgICAgICAgLyogb3Zlci1zdWJzY3JpYmVkICovXG4gIH1cbiAgaWYgKGxlZnQgPiAwICYmICh0eXBlID09PSBDT0RFUyB8fCBtYXggIT09IDEpKSB7XG4gICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAvKiBpbmNvbXBsZXRlIHNldCAqL1xuICB9XG5cbiAgLyogZ2VuZXJhdGUgb2Zmc2V0cyBpbnRvIHN5bWJvbCB0YWJsZSBmb3IgZWFjaCBsZW5ndGggZm9yIHNvcnRpbmcgKi9cbiAgb2Zmc1sxXSA9IDA7XG4gIGZvciAobGVuID0gMTsgbGVuIDwgTUFYQklUUzsgbGVuKyspIHtcbiAgICBvZmZzW2xlbiArIDFdID0gb2Zmc1tsZW5dICsgY291bnRbbGVuXTtcbiAgfVxuXG4gIC8qIHNvcnQgc3ltYm9scyBieSBsZW5ndGgsIGJ5IHN5bWJvbCBvcmRlciB3aXRoaW4gZWFjaCBsZW5ndGggKi9cbiAgZm9yIChzeW0gPSAwOyBzeW0gPCBjb2Rlczsgc3ltKyspIHtcbiAgICBpZiAobGVuc1tsZW5zX2luZGV4ICsgc3ltXSAhPT0gMCkge1xuICAgICAgd29ya1tvZmZzW2xlbnNbbGVuc19pbmRleCArIHN5bV1dKytdID0gc3ltO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICBDcmVhdGUgYW5kIGZpbGwgaW4gZGVjb2RpbmcgdGFibGVzLiAgSW4gdGhpcyBsb29wLCB0aGUgdGFibGUgYmVpbmdcbiAgIGZpbGxlZCBpcyBhdCBuZXh0IGFuZCBoYXMgY3VyciBpbmRleCBiaXRzLiAgVGhlIGNvZGUgYmVpbmcgdXNlZCBpcyBodWZmXG4gICB3aXRoIGxlbmd0aCBsZW4uICBUaGF0IGNvZGUgaXMgY29udmVydGVkIHRvIGFuIGluZGV4IGJ5IGRyb3BwaW5nIGRyb3BcbiAgIGJpdHMgb2ZmIG9mIHRoZSBib3R0b20uICBGb3IgY29kZXMgd2hlcmUgbGVuIGlzIGxlc3MgdGhhbiBkcm9wICsgY3VycixcbiAgIHRob3NlIHRvcCBkcm9wICsgY3VyciAtIGxlbiBiaXRzIGFyZSBpbmNyZW1lbnRlZCB0aHJvdWdoIGFsbCB2YWx1ZXMgdG9cbiAgIGZpbGwgdGhlIHRhYmxlIHdpdGggcmVwbGljYXRlZCBlbnRyaWVzLlxuXG4gICByb290IGlzIHRoZSBudW1iZXIgb2YgaW5kZXggYml0cyBmb3IgdGhlIHJvb3QgdGFibGUuICBXaGVuIGxlbiBleGNlZWRzXG4gICByb290LCBzdWItdGFibGVzIGFyZSBjcmVhdGVkIHBvaW50ZWQgdG8gYnkgdGhlIHJvb3QgZW50cnkgd2l0aCBhbiBpbmRleFxuICAgb2YgdGhlIGxvdyByb290IGJpdHMgb2YgaHVmZi4gIFRoaXMgaXMgc2F2ZWQgaW4gbG93IHRvIGNoZWNrIGZvciB3aGVuIGFcbiAgIG5ldyBzdWItdGFibGUgc2hvdWxkIGJlIHN0YXJ0ZWQuICBkcm9wIGlzIHplcm8gd2hlbiB0aGUgcm9vdCB0YWJsZSBpc1xuICAgYmVpbmcgZmlsbGVkLCBhbmQgZHJvcCBpcyByb290IHdoZW4gc3ViLXRhYmxlcyBhcmUgYmVpbmcgZmlsbGVkLlxuXG4gICBXaGVuIGEgbmV3IHN1Yi10YWJsZSBpcyBuZWVkZWQsIGl0IGlzIG5lY2Vzc2FyeSB0byBsb29rIGFoZWFkIGluIHRoZVxuICAgY29kZSBsZW5ndGhzIHRvIGRldGVybWluZSB3aGF0IHNpemUgc3ViLXRhYmxlIGlzIG5lZWRlZC4gIFRoZSBsZW5ndGhcbiAgIGNvdW50cyBhcmUgdXNlZCBmb3IgdGhpcywgYW5kIHNvIGNvdW50W10gaXMgZGVjcmVtZW50ZWQgYXMgY29kZXMgYXJlXG4gICBlbnRlcmVkIGluIHRoZSB0YWJsZXMuXG5cbiAgIHVzZWQga2VlcHMgdHJhY2sgb2YgaG93IG1hbnkgdGFibGUgZW50cmllcyBoYXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gdGhlXG4gICBwcm92aWRlZCAqdGFibGUgc3BhY2UuICBJdCBpcyBjaGVja2VkIGZvciBMRU5TIGFuZCBESVNUIHRhYmxlcyBhZ2FpbnN0XG4gICB0aGUgY29uc3RhbnRzIEVOT1VHSF9MRU5TIGFuZCBFTk9VR0hfRElTVFMgdG8gZ3VhcmQgYWdhaW5zdCBjaGFuZ2VzIGluXG4gICB0aGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUgY29uc3RhbnRzLiAgU2VlIHRoZSBjb21tZW50cyBpbiBpbmZ0cmVlcy5oXG4gICBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuICAgc3ltIGluY3JlbWVudHMgdGhyb3VnaCBhbGwgc3ltYm9scywgYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMgd2hlblxuICAgYWxsIGNvZGVzIG9mIGxlbmd0aCBtYXgsIGkuZS4gYWxsIGNvZGVzLCBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAgVGhpc1xuICAgcm91dGluZSBwZXJtaXRzIGluY29tcGxldGUgY29kZXMsIHNvIGFub3RoZXIgbG9vcCBhZnRlciB0aGlzIG9uZSBmaWxsc1xuICAgaW4gdGhlIHJlc3Qgb2YgdGhlIGRlY29kaW5nIHRhYmxlcyB3aXRoIGludmFsaWQgY29kZSBtYXJrZXJzLlxuICAgKi9cblxuICAvKiBzZXQgdXAgZm9yIGNvZGUgdHlwZSAqL1xuICAvLyBwb29yIG1hbiBvcHRpbWl6YXRpb24gLSB1c2UgaWYtZWxzZSBpbnN0ZWFkIG9mIHN3aXRjaCxcbiAgLy8gdG8gYXZvaWQgZGVvcHRzIGluIG9sZCB2OFxuICBpZiAodHlwZSA9PT0gQ09ERVMpIHtcbiAgICBiYXNlID0gZXh0cmEgPSB3b3JrOyAgICAvKiBkdW1teSB2YWx1ZS0tbm90IHVzZWQgKi9cbiAgICBlbmQgPSAxOTtcblxuICB9IGVsc2UgaWYgKHR5cGUgPT09IExFTlMpIHtcbiAgICBiYXNlID0gbGJhc2U7XG4gICAgYmFzZV9pbmRleCAtPSAyNTc7XG4gICAgZXh0cmEgPSBsZXh0O1xuICAgIGV4dHJhX2luZGV4IC09IDI1NztcbiAgICBlbmQgPSAyNTY7XG5cbiAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIERJU1RTICovXG4gICAgYmFzZSA9IGRiYXNlO1xuICAgIGV4dHJhID0gZGV4dDtcbiAgICBlbmQgPSAtMTtcbiAgfVxuXG4gIC8qIGluaXRpYWxpemUgb3B0cyBmb3IgbG9vcCAqL1xuICBodWZmID0gMDsgICAgICAgICAgICAgICAgICAgLyogc3RhcnRpbmcgY29kZSAqL1xuICBzeW0gPSAwOyAgICAgICAgICAgICAgICAgICAgLyogc3RhcnRpbmcgY29kZSBzeW1ib2wgKi9cbiAgbGVuID0gbWluOyAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0aW5nIGNvZGUgbGVuZ3RoICovXG4gIG5leHQgPSB0YWJsZV9pbmRleDsgICAgICAgICAgICAgIC8qIGN1cnJlbnQgdGFibGUgdG8gZmlsbCBpbiAqL1xuICBjdXJyID0gcm9vdDsgICAgICAgICAgICAgICAgLyogY3VycmVudCB0YWJsZSBpbmRleCBiaXRzICovXG4gIGRyb3AgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IGJpdHMgdG8gZHJvcCBmcm9tIGNvZGUgZm9yIGluZGV4ICovXG4gIGxvdyA9IC0xOyAgICAgICAgICAgICAgICAgICAvKiB0cmlnZ2VyIG5ldyBzdWItdGFibGUgd2hlbiBsZW4gPiByb290ICovXG4gIHVzZWQgPSAxIDw8IHJvb3Q7ICAgICAgICAgIC8qIHVzZSByb290IHRhYmxlIGVudHJpZXMgKi9cbiAgbWFzayA9IHVzZWQgLSAxOyAgICAgICAgICAgIC8qIG1hc2sgZm9yIGNvbXBhcmluZyBsb3cgKi9cblxuICAvKiBjaGVjayBhdmFpbGFibGUgdGFibGUgc3BhY2UgKi9cbiAgaWYgKCh0eXBlID09PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUykgfHxcbiAgICAodHlwZSA9PT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBpID0gMDtcbiAgLyogcHJvY2VzcyBhbGwgY29kZXMgYW5kIG1ha2UgdGFibGUgZW50cmllcyAqL1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIC8qIGNyZWF0ZSB0YWJsZSBlbnRyeSAqL1xuICAgIGhlcmVfYml0cyA9IGxlbiAtIGRyb3A7XG4gICAgaWYgKHdvcmtbc3ltXSA8IGVuZCkge1xuICAgICAgaGVyZV9vcCA9IDA7XG4gICAgICBoZXJlX3ZhbCA9IHdvcmtbc3ltXTtcbiAgICB9XG4gICAgZWxzZSBpZiAod29ya1tzeW1dID4gZW5kKSB7XG4gICAgICBoZXJlX29wID0gZXh0cmFbZXh0cmFfaW5kZXggKyB3b3JrW3N5bV1dO1xuICAgICAgaGVyZV92YWwgPSBiYXNlW2Jhc2VfaW5kZXggKyB3b3JrW3N5bV1dO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGhlcmVfb3AgPSAzMiArIDY0OyAgICAgICAgIC8qIGVuZCBvZiBibG9jayAqL1xuICAgICAgaGVyZV92YWwgPSAwO1xuICAgIH1cblxuICAgIC8qIHJlcGxpY2F0ZSBmb3IgdGhvc2UgaW5kaWNlcyB3aXRoIGxvdyBsZW4gYml0cyBlcXVhbCB0byBodWZmICovXG4gICAgaW5jciA9IDEgPDwgKGxlbiAtIGRyb3ApO1xuICAgIGZpbGwgPSAxIDw8IGN1cnI7XG4gICAgbWluID0gZmlsbDsgICAgICAgICAgICAgICAgIC8qIHNhdmUgb2Zmc2V0IHRvIG5leHQgdGFibGUgKi9cbiAgICBkbyB7XG4gICAgICBmaWxsIC09IGluY3I7XG4gICAgICB0YWJsZVtuZXh0ICsgKGh1ZmYgPj4gZHJvcCkgKyBmaWxsXSA9IChoZXJlX2JpdHMgPDwgMjQpIHwgKGhlcmVfb3AgPDwgMTYpIHwgaGVyZV92YWwgfDA7XG4gICAgfSB3aGlsZSAoZmlsbCAhPT0gMCk7XG5cbiAgICAvKiBiYWNrd2FyZHMgaW5jcmVtZW50IHRoZSBsZW4tYml0IGNvZGUgaHVmZiAqL1xuICAgIGluY3IgPSAxIDw8IChsZW4gLSAxKTtcbiAgICB3aGlsZSAoaHVmZiAmIGluY3IpIHtcbiAgICAgIGluY3IgPj49IDE7XG4gICAgfVxuICAgIGlmIChpbmNyICE9PSAwKSB7XG4gICAgICBodWZmICY9IGluY3IgLSAxO1xuICAgICAgaHVmZiArPSBpbmNyO1xuICAgIH0gZWxzZSB7XG4gICAgICBodWZmID0gMDtcbiAgICB9XG5cbiAgICAvKiBnbyB0byBuZXh0IHN5bWJvbCwgdXBkYXRlIGNvdW50LCBsZW4gKi9cbiAgICBzeW0rKztcbiAgICBpZiAoLS1jb3VudFtsZW5dID09PSAwKSB7XG4gICAgICBpZiAobGVuID09PSBtYXgpIHsgYnJlYWs7IH1cbiAgICAgIGxlbiA9IGxlbnNbbGVuc19pbmRleCArIHdvcmtbc3ltXV07XG4gICAgfVxuXG4gICAgLyogY3JlYXRlIG5ldyBzdWItdGFibGUgaWYgbmVlZGVkICovXG4gICAgaWYgKGxlbiA+IHJvb3QgJiYgKGh1ZmYgJiBtYXNrKSAhPT0gbG93KSB7XG4gICAgICAvKiBpZiBmaXJzdCB0aW1lLCB0cmFuc2l0aW9uIHRvIHN1Yi10YWJsZXMgKi9cbiAgICAgIGlmIChkcm9wID09PSAwKSB7XG4gICAgICAgIGRyb3AgPSByb290O1xuICAgICAgfVxuXG4gICAgICAvKiBpbmNyZW1lbnQgcGFzdCBsYXN0IHRhYmxlICovXG4gICAgICBuZXh0ICs9IG1pbjsgICAgICAgICAgICAvKiBoZXJlIG1pbiBpcyAxIDw8IGN1cnIgKi9cblxuICAgICAgLyogZGV0ZXJtaW5lIGxlbmd0aCBvZiBuZXh0IHRhYmxlICovXG4gICAgICBjdXJyID0gbGVuIC0gZHJvcDtcbiAgICAgIGxlZnQgPSAxIDw8IGN1cnI7XG4gICAgICB3aGlsZSAoY3VyciArIGRyb3AgPCBtYXgpIHtcbiAgICAgICAgbGVmdCAtPSBjb3VudFtjdXJyICsgZHJvcF07XG4gICAgICAgIGlmIChsZWZ0IDw9IDApIHsgYnJlYWs7IH1cbiAgICAgICAgY3VycisrO1xuICAgICAgICBsZWZ0IDw8PSAxO1xuICAgICAgfVxuXG4gICAgICAvKiBjaGVjayBmb3IgZW5vdWdoIHNwYWNlICovXG4gICAgICB1c2VkICs9IDEgPDwgY3VycjtcbiAgICAgIGlmICgodHlwZSA9PT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMpIHx8XG4gICAgICAgICh0eXBlID09PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgLyogcG9pbnQgZW50cnkgaW4gcm9vdCB0YWJsZSB0byBzdWItdGFibGUgKi9cbiAgICAgIGxvdyA9IGh1ZmYgJiBtYXNrO1xuICAgICAgLyp0YWJsZS5vcFtsb3ddID0gY3VycjtcbiAgICAgIHRhYmxlLmJpdHNbbG93XSA9IHJvb3Q7XG4gICAgICB0YWJsZS52YWxbbG93XSA9IG5leHQgLSBvcHRzLnRhYmxlX2luZGV4OyovXG4gICAgICB0YWJsZVtsb3ddID0gKHJvb3QgPDwgMjQpIHwgKGN1cnIgPDwgMTYpIHwgKG5leHQgLSB0YWJsZV9pbmRleCkgfDA7XG4gICAgfVxuICB9XG5cbiAgLyogZmlsbCBpbiByZW1haW5pbmcgdGFibGUgZW50cnkgaWYgY29kZSBpcyBpbmNvbXBsZXRlIChndWFyYW50ZWVkIHRvIGhhdmVcbiAgIGF0IG1vc3Qgb25lIHJlbWFpbmluZyBlbnRyeSwgc2luY2UgaWYgdGhlIGNvZGUgaXMgaW5jb21wbGV0ZSwgdGhlXG4gICBtYXhpbXVtIGNvZGUgbGVuZ3RoIHRoYXQgd2FzIGFsbG93ZWQgdG8gZ2V0IHRoaXMgZmFyIGlzIG9uZSBiaXQpICovXG4gIGlmIChodWZmICE9PSAwKSB7XG4gICAgLy90YWJsZS5vcFtuZXh0ICsgaHVmZl0gPSA2NDsgICAgICAgICAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovXG4gICAgLy90YWJsZS5iaXRzW25leHQgKyBodWZmXSA9IGxlbiAtIGRyb3A7XG4gICAgLy90YWJsZS52YWxbbmV4dCArIGh1ZmZdID0gMDtcbiAgICB0YWJsZVtuZXh0ICsgaHVmZl0gPSAoKGxlbiAtIGRyb3ApIDw8IDI0KSB8ICg2NCA8PCAxNikgfDA7XG4gIH1cblxuICAvKiBzZXQgcmV0dXJuIHBhcmFtZXRlcnMgKi9cbiAgLy9vcHRzLnRhYmxlX2luZGV4ICs9IHVzZWQ7XG4gIG9wdHMuYml0cyA9IHJvb3Q7XG4gIHJldHVybiAwO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIDI6ICAgICAgJ25lZWQgZGljdGlvbmFyeScsICAgICAvKiBaX05FRURfRElDVCAgICAgICAyICAqL1xuICAxOiAgICAgICdzdHJlYW0gZW5kJywgICAgICAgICAgLyogWl9TVFJFQU1fRU5EICAgICAgMSAgKi9cbiAgMDogICAgICAnJywgICAgICAgICAgICAgICAgICAgIC8qIFpfT0sgICAgICAgICAgICAgIDAgICovXG4gICctMSc6ICAgJ2ZpbGUgZXJyb3InLCAgICAgICAgICAvKiBaX0VSUk5PICAgICAgICAgKC0xKSAqL1xuICAnLTInOiAgICdzdHJlYW0gZXJyb3InLCAgICAgICAgLyogWl9TVFJFQU1fRVJST1IgICgtMikgKi9cbiAgJy0zJzogICAnZGF0YSBlcnJvcicsICAgICAgICAgIC8qIFpfREFUQV9FUlJPUiAgICAoLTMpICovXG4gICctNCc6ICAgJ2luc3VmZmljaWVudCBtZW1vcnknLCAvKiBaX01FTV9FUlJPUiAgICAgKC00KSAqL1xuICAnLTUnOiAgICdidWZmZXIgZXJyb3InLCAgICAgICAgLyogWl9CVUZfRVJST1IgICAgICgtNSkgKi9cbiAgJy02JzogICAnaW5jb21wYXRpYmxlIHZlcnNpb24nIC8qIFpfVkVSU0lPTl9FUlJPUiAoLTYpICovXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzL2NvbW1vbicpO1xuXG4vKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG4vL3ZhciBaX0ZJTFRFUkVEICAgICAgICAgID0gMTtcbi8vdmFyIFpfSFVGRk1BTl9PTkxZICAgICAgPSAyO1xuLy92YXIgWl9STEUgICAgICAgICAgICAgICA9IDM7XG52YXIgWl9GSVhFRCAgICAgICAgICAgICAgID0gNDtcbi8vdmFyIFpfREVGQVVMVF9TVFJBVEVHWSAgPSAwO1xuXG4vKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBmaWVsZCAodGhvdWdoIHNlZSBpbmZsYXRlKCkpICovXG52YXIgWl9CSU5BUlkgICAgICAgICAgICAgID0gMDtcbnZhciBaX1RFWFQgICAgICAgICAgICAgICAgPSAxO1xuLy92YXIgWl9BU0NJSSAgICAgICAgICAgICA9IDE7IC8vID0gWl9URVhUXG52YXIgWl9VTktOT1dOICAgICAgICAgICAgID0gMjtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG5mdW5jdGlvbiB6ZXJvKGJ1ZikgeyB2YXIgbGVuID0gYnVmLmxlbmd0aDsgd2hpbGUgKC0tbGVuID49IDApIHsgYnVmW2xlbl0gPSAwOyB9IH1cblxuLy8gRnJvbSB6dXRpbC5oXG5cbnZhciBTVE9SRURfQkxPQ0sgPSAwO1xudmFyIFNUQVRJQ19UUkVFUyA9IDE7XG52YXIgRFlOX1RSRUVTICAgID0gMjtcbi8qIFRoZSB0aHJlZSBraW5kcyBvZiBibG9jayB0eXBlICovXG5cbnZhciBNSU5fTUFUQ0ggICAgPSAzO1xudmFyIE1BWF9NQVRDSCAgICA9IDI1ODtcbi8qIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG1hdGNoIGxlbmd0aHMgKi9cblxuLy8gRnJvbSBkZWZsYXRlLmhcbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuXG4gKi9cblxudmFyIExFTkdUSF9DT0RFUyAgPSAyOTtcbi8qIG51bWJlciBvZiBsZW5ndGggY29kZXMsIG5vdCBjb3VudGluZyB0aGUgc3BlY2lhbCBFTkRfQkxPQ0sgY29kZSAqL1xuXG52YXIgTElURVJBTFMgICAgICA9IDI1Njtcbi8qIG51bWJlciBvZiBsaXRlcmFsIGJ5dGVzIDAuLjI1NSAqL1xuXG52YXIgTF9DT0RFUyAgICAgICA9IExJVEVSQUxTICsgMSArIExFTkdUSF9DT0RFUztcbi8qIG51bWJlciBvZiBMaXRlcmFsIG9yIExlbmd0aCBjb2RlcywgaW5jbHVkaW5nIHRoZSBFTkRfQkxPQ0sgY29kZSAqL1xuXG52YXIgRF9DT0RFUyAgICAgICA9IDMwO1xuLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzICovXG5cbnZhciBCTF9DT0RFUyAgICAgID0gMTk7XG4vKiBudW1iZXIgb2YgY29kZXMgdXNlZCB0byB0cmFuc2ZlciB0aGUgYml0IGxlbmd0aHMgKi9cblxudmFyIEhFQVBfU0laRSAgICAgPSAyICogTF9DT0RFUyArIDE7XG4vKiBtYXhpbXVtIGhlYXAgc2l6ZSAqL1xuXG52YXIgTUFYX0JJVFMgICAgICA9IDE1O1xuLyogQWxsIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQklUUyBiaXRzICovXG5cbnZhciBCdWZfc2l6ZSAgICAgID0gMTY7XG4vKiBzaXplIG9mIGJpdCBidWZmZXIgaW4gYmlfYnVmICovXG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb25zdGFudHNcbiAqL1xuXG52YXIgTUFYX0JMX0JJVFMgPSA3O1xuLyogQml0IGxlbmd0aCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JMX0JJVFMgYml0cyAqL1xuXG52YXIgRU5EX0JMT0NLICAgPSAyNTY7XG4vKiBlbmQgb2YgYmxvY2sgbGl0ZXJhbCBjb2RlICovXG5cbnZhciBSRVBfM182ICAgICA9IDE2O1xuLyogcmVwZWF0IHByZXZpb3VzIGJpdCBsZW5ndGggMy02IHRpbWVzICgyIGJpdHMgb2YgcmVwZWF0IGNvdW50KSAqL1xuXG52YXIgUkVQWl8zXzEwICAgPSAxNztcbi8qIHJlcGVhdCBhIHplcm8gbGVuZ3RoIDMtMTAgdGltZXMgICgzIGJpdHMgb2YgcmVwZWF0IGNvdW50KSAqL1xuXG52YXIgUkVQWl8xMV8xMzggPSAxODtcbi8qIHJlcGVhdCBhIHplcm8gbGVuZ3RoIDExLTEzOCB0aW1lcyAgKDcgYml0cyBvZiByZXBlYXQgY291bnQpICovXG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbW1hLXNwYWNpbmcsYXJyYXktYnJhY2tldC1zcGFjaW5nICovXG52YXIgZXh0cmFfbGJpdHMgPSAgIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggbGVuZ3RoIGNvZGUgKi9cbiAgWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF07XG5cbnZhciBleHRyYV9kYml0cyA9ICAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBkaXN0YW5jZSBjb2RlICovXG4gIFswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXTtcblxudmFyIGV4dHJhX2JsYml0cyA9ICAvKiBleHRyYSBiaXRzIGZvciBlYWNoIGJpdCBsZW5ndGggY29kZSAqL1xuICBbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN107XG5cbnZhciBibF9vcmRlciA9XG4gIFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtcbi8qIGVzbGludC1lbmFibGUgY29tbWEtc3BhY2luZyxhcnJheS1icmFja2V0LXNwYWNpbmcgKi9cblxuLyogVGhlIGxlbmd0aHMgb2YgdGhlIGJpdCBsZW5ndGggY29kZXMgYXJlIHNlbnQgaW4gb3JkZXIgb2YgZGVjcmVhc2luZ1xuICogcHJvYmFiaWxpdHksIHRvIGF2b2lkIHRyYW5zbWl0dGluZyB0aGUgbGVuZ3RocyBmb3IgdW51c2VkIGJpdCBsZW5ndGggY29kZXMuXG4gKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBMb2NhbCBkYXRhLiBUaGVzZSBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlLlxuICovXG5cbi8vIFdlIHByZS1maWxsIGFycmF5cyB3aXRoIDAgdG8gYXZvaWQgdW5pbml0aWFsaXplZCBnYXBzXG5cbnZhciBESVNUX0NPREVfTEVOID0gNTEyOyAvKiBzZWUgZGVmaW5pdGlvbiBvZiBhcnJheSBkaXN0X2NvZGUgYmVsb3cgKi9cblxuLy8gISEhISBVc2UgZmxhdCBhcnJheSBpbnNkZWFkIG9mIHN0cnVjdHVyZSwgRnJlcSA9IGkqMiwgTGVuID0gaSoyKzFcbnZhciBzdGF0aWNfbHRyZWUgID0gbmV3IEFycmF5KChMX0NPREVTICsgMikgKiAyKTtcbnplcm8oc3RhdGljX2x0cmVlKTtcbi8qIFRoZSBzdGF0aWMgbGl0ZXJhbCB0cmVlLiBTaW5jZSB0aGUgYml0IGxlbmd0aHMgYXJlIGltcG9zZWQsIHRoZXJlIGlzIG5vXG4gKiBuZWVkIGZvciB0aGUgTF9DT0RFUyBleHRyYSBjb2RlcyB1c2VkIGR1cmluZyBoZWFwIGNvbnN0cnVjdGlvbi4gSG93ZXZlclxuICogVGhlIGNvZGVzIDI4NiBhbmQgMjg3IGFyZSBuZWVkZWQgdG8gYnVpbGQgYSBjYW5vbmljYWwgdHJlZSAoc2VlIF90cl9pbml0XG4gKiBiZWxvdykuXG4gKi9cblxudmFyIHN0YXRpY19kdHJlZSAgPSBuZXcgQXJyYXkoRF9DT0RFUyAqIDIpO1xuemVybyhzdGF0aWNfZHRyZWUpO1xuLyogVGhlIHN0YXRpYyBkaXN0YW5jZSB0cmVlLiAoQWN0dWFsbHkgYSB0cml2aWFsIHRyZWUgc2luY2UgYWxsIGNvZGVzIHVzZVxuICogNSBiaXRzLilcbiAqL1xuXG52YXIgX2Rpc3RfY29kZSAgICA9IG5ldyBBcnJheShESVNUX0NPREVfTEVOKTtcbnplcm8oX2Rpc3RfY29kZSk7XG4vKiBEaXN0YW5jZSBjb2Rlcy4gVGhlIGZpcnN0IDI1NiB2YWx1ZXMgY29ycmVzcG9uZCB0byB0aGUgZGlzdGFuY2VzXG4gKiAzIC4uIDI1OCwgdGhlIGxhc3QgMjU2IHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSB0b3AgOCBiaXRzIG9mXG4gKiB0aGUgMTUgYml0IGRpc3RhbmNlcy5cbiAqL1xuXG52YXIgX2xlbmd0aF9jb2RlICA9IG5ldyBBcnJheShNQVhfTUFUQ0ggLSBNSU5fTUFUQ0ggKyAxKTtcbnplcm8oX2xlbmd0aF9jb2RlKTtcbi8qIGxlbmd0aCBjb2RlIGZvciBlYWNoIG5vcm1hbGl6ZWQgbWF0Y2ggbGVuZ3RoICgwID09IE1JTl9NQVRDSCkgKi9cblxudmFyIGJhc2VfbGVuZ3RoICAgPSBuZXcgQXJyYXkoTEVOR1RIX0NPREVTKTtcbnplcm8oYmFzZV9sZW5ndGgpO1xuLyogRmlyc3Qgbm9ybWFsaXplZCBsZW5ndGggZm9yIGVhY2ggY29kZSAoMCA9IE1JTl9NQVRDSCkgKi9cblxudmFyIGJhc2VfZGlzdCAgICAgPSBuZXcgQXJyYXkoRF9DT0RFUyk7XG56ZXJvKGJhc2VfZGlzdCk7XG4vKiBGaXJzdCBub3JtYWxpemVkIGRpc3RhbmNlIGZvciBlYWNoIGNvZGUgKDAgPSBkaXN0YW5jZSBvZiAxKSAqL1xuXG5cbmZ1bmN0aW9uIFN0YXRpY1RyZWVEZXNjKHN0YXRpY190cmVlLCBleHRyYV9iaXRzLCBleHRyYV9iYXNlLCBlbGVtcywgbWF4X2xlbmd0aCkge1xuXG4gIHRoaXMuc3RhdGljX3RyZWUgID0gc3RhdGljX3RyZWU7ICAvKiBzdGF0aWMgdHJlZSBvciBOVUxMICovXG4gIHRoaXMuZXh0cmFfYml0cyAgID0gZXh0cmFfYml0czsgICAvKiBleHRyYSBiaXRzIGZvciBlYWNoIGNvZGUgb3IgTlVMTCAqL1xuICB0aGlzLmV4dHJhX2Jhc2UgICA9IGV4dHJhX2Jhc2U7ICAgLyogYmFzZSBpbmRleCBmb3IgZXh0cmFfYml0cyAqL1xuICB0aGlzLmVsZW1zICAgICAgICA9IGVsZW1zOyAgICAgICAgLyogbWF4IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdHJlZSAqL1xuICB0aGlzLm1heF9sZW5ndGggICA9IG1heF9sZW5ndGg7ICAgLyogbWF4IGJpdCBsZW5ndGggZm9yIHRoZSBjb2RlcyAqL1xuXG4gIC8vIHNob3cgaWYgYHN0YXRpY190cmVlYCBoYXMgZGF0YSBvciBkdW1teSAtIG5lZWRlZCBmb3IgbW9ub21vcnBoaWMgb2JqZWN0c1xuICB0aGlzLmhhc19zdHJlZSAgICA9IHN0YXRpY190cmVlICYmIHN0YXRpY190cmVlLmxlbmd0aDtcbn1cblxuXG52YXIgc3RhdGljX2xfZGVzYztcbnZhciBzdGF0aWNfZF9kZXNjO1xudmFyIHN0YXRpY19ibF9kZXNjO1xuXG5cbmZ1bmN0aW9uIFRyZWVEZXNjKGR5bl90cmVlLCBzdGF0X2Rlc2MpIHtcbiAgdGhpcy5keW5fdHJlZSA9IGR5bl90cmVlOyAgICAgLyogdGhlIGR5bmFtaWMgdHJlZSAqL1xuICB0aGlzLm1heF9jb2RlID0gMDsgICAgICAgICAgICAvKiBsYXJnZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVxdWVuY3kgKi9cbiAgdGhpcy5zdGF0X2Rlc2MgPSBzdGF0X2Rlc2M7ICAgLyogdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHRyZWUgKi9cbn1cblxuXG5cbmZ1bmN0aW9uIGRfY29kZShkaXN0KSB7XG4gIHJldHVybiBkaXN0IDwgMjU2ID8gX2Rpc3RfY29kZVtkaXN0XSA6IF9kaXN0X2NvZGVbMjU2ICsgKGRpc3QgPj4+IDcpXTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIE91dHB1dCBhIHNob3J0IExTQiBmaXJzdCBvbiB0aGUgc3RyZWFtLlxuICogSU4gYXNzZXJ0aW9uOiB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpbiBwZW5kaW5nQnVmLlxuICovXG5mdW5jdGlvbiBwdXRfc2hvcnQocywgdykge1xuLy8gICAgcHV0X2J5dGUocywgKHVjaCkoKHcpICYgMHhmZikpO1xuLy8gICAgcHV0X2J5dGUocywgKHVjaCkoKHVzaCkodykgPj4gOCkpO1xuICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9ICh3KSAmIDB4ZmY7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gKHcgPj4+IDgpICYgMHhmZjtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgYSB2YWx1ZSBvbiBhIGdpdmVuIG51bWJlciBvZiBiaXRzLlxuICogSU4gYXNzZXJ0aW9uOiBsZW5ndGggPD0gMTYgYW5kIHZhbHVlIGZpdHMgaW4gbGVuZ3RoIGJpdHMuXG4gKi9cbmZ1bmN0aW9uIHNlbmRfYml0cyhzLCB2YWx1ZSwgbGVuZ3RoKSB7XG4gIGlmIChzLmJpX3ZhbGlkID4gKEJ1Zl9zaXplIC0gbGVuZ3RoKSkge1xuICAgIHMuYmlfYnVmIHw9ICh2YWx1ZSA8PCBzLmJpX3ZhbGlkKSAmIDB4ZmZmZjtcbiAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpO1xuICAgIHMuYmlfYnVmID0gdmFsdWUgPj4gKEJ1Zl9zaXplIC0gcy5iaV92YWxpZCk7XG4gICAgcy5iaV92YWxpZCArPSBsZW5ndGggLSBCdWZfc2l6ZTtcbiAgfSBlbHNlIHtcbiAgICBzLmJpX2J1ZiB8PSAodmFsdWUgPDwgcy5iaV92YWxpZCkgJiAweGZmZmY7XG4gICAgcy5iaV92YWxpZCArPSBsZW5ndGg7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzZW5kX2NvZGUocywgYywgdHJlZSkge1xuICBzZW5kX2JpdHMocywgdHJlZVtjICogMl0vKi5Db2RlKi8sIHRyZWVbYyAqIDIgKyAxXS8qLkxlbiovKTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFJldmVyc2UgdGhlIGZpcnN0IGxlbiBiaXRzIG9mIGEgY29kZSwgdXNpbmcgc3RyYWlnaHRmb3J3YXJkIGNvZGUgKGEgZmFzdGVyXG4gKiBtZXRob2Qgd291bGQgdXNlIGEgdGFibGUpXG4gKiBJTiBhc3NlcnRpb246IDEgPD0gbGVuIDw9IDE1XG4gKi9cbmZ1bmN0aW9uIGJpX3JldmVyc2UoY29kZSwgbGVuKSB7XG4gIHZhciByZXMgPSAwO1xuICBkbyB7XG4gICAgcmVzIHw9IGNvZGUgJiAxO1xuICAgIGNvZGUgPj4+PSAxO1xuICAgIHJlcyA8PD0gMTtcbiAgfSB3aGlsZSAoLS1sZW4gPiAwKTtcbiAgcmV0dXJuIHJlcyA+Pj4gMTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZsdXNoIHRoZSBiaXQgYnVmZmVyLCBrZWVwaW5nIGF0IG1vc3QgNyBiaXRzIGluIGl0LlxuICovXG5mdW5jdGlvbiBiaV9mbHVzaChzKSB7XG4gIGlmIChzLmJpX3ZhbGlkID09PSAxNikge1xuICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7XG4gICAgcy5iaV9idWYgPSAwO1xuICAgIHMuYmlfdmFsaWQgPSAwO1xuXG4gIH0gZWxzZSBpZiAocy5iaV92YWxpZCA+PSA4KSB7XG4gICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBzLmJpX2J1ZiAmIDB4ZmY7XG4gICAgcy5iaV9idWYgPj49IDg7XG4gICAgcy5iaV92YWxpZCAtPSA4O1xuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb21wdXRlIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGhzIGZvciBhIHRyZWUgYW5kIHVwZGF0ZSB0aGUgdG90YWwgYml0IGxlbmd0aFxuICogZm9yIHRoZSBjdXJyZW50IGJsb2NrLlxuICogSU4gYXNzZXJ0aW9uOiB0aGUgZmllbGRzIGZyZXEgYW5kIGRhZCBhcmUgc2V0LCBoZWFwW2hlYXBfbWF4XSBhbmRcbiAqICAgIGFib3ZlIGFyZSB0aGUgdHJlZSBub2RlcyBzb3J0ZWQgYnkgaW5jcmVhc2luZyBmcmVxdWVuY3kuXG4gKiBPVVQgYXNzZXJ0aW9uczogdGhlIGZpZWxkIGxlbiBpcyBzZXQgdG8gdGhlIG9wdGltYWwgYml0IGxlbmd0aCwgdGhlXG4gKiAgICAgYXJyYXkgYmxfY291bnQgY29udGFpbnMgdGhlIGZyZXF1ZW5jaWVzIGZvciBlYWNoIGJpdCBsZW5ndGguXG4gKiAgICAgVGhlIGxlbmd0aCBvcHRfbGVuIGlzIHVwZGF0ZWQ7IHN0YXRpY19sZW4gaXMgYWxzbyB1cGRhdGVkIGlmIHN0cmVlIGlzXG4gKiAgICAgbm90IG51bGwuXG4gKi9cbmZ1bmN0aW9uIGdlbl9iaXRsZW4ocywgZGVzYylcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICB0cmVlX2Rlc2MgKmRlc2M7ICAgIC8qIHRoZSB0cmVlIGRlc2NyaXB0b3IgKi9cbntcbiAgdmFyIHRyZWUgICAgICAgICAgICA9IGRlc2MuZHluX3RyZWU7XG4gIHZhciBtYXhfY29kZSAgICAgICAgPSBkZXNjLm1heF9jb2RlO1xuICB2YXIgc3RyZWUgICAgICAgICAgID0gZGVzYy5zdGF0X2Rlc2Muc3RhdGljX3RyZWU7XG4gIHZhciBoYXNfc3RyZWUgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5oYXNfc3RyZWU7XG4gIHZhciBleHRyYSAgICAgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5leHRyYV9iaXRzO1xuICB2YXIgYmFzZSAgICAgICAgICAgID0gZGVzYy5zdGF0X2Rlc2MuZXh0cmFfYmFzZTtcbiAgdmFyIG1heF9sZW5ndGggICAgICA9IGRlc2Muc3RhdF9kZXNjLm1heF9sZW5ndGg7XG4gIHZhciBoOyAgICAgICAgICAgICAgLyogaGVhcCBpbmRleCAqL1xuICB2YXIgbiwgbTsgICAgICAgICAgIC8qIGl0ZXJhdGUgb3ZlciB0aGUgdHJlZSBlbGVtZW50cyAqL1xuICB2YXIgYml0czsgICAgICAgICAgIC8qIGJpdCBsZW5ndGggKi9cbiAgdmFyIHhiaXRzOyAgICAgICAgICAvKiBleHRyYSBiaXRzICovXG4gIHZhciBmOyAgICAgICAgICAgICAgLyogZnJlcXVlbmN5ICovXG4gIHZhciBvdmVyZmxvdyA9IDA7ICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggYml0IGxlbmd0aCB0b28gbGFyZ2UgKi9cblxuICBmb3IgKGJpdHMgPSAwOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHtcbiAgICBzLmJsX2NvdW50W2JpdHNdID0gMDtcbiAgfVxuXG4gIC8qIEluIGEgZmlyc3QgcGFzcywgY29tcHV0ZSB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RocyAod2hpY2ggbWF5XG4gICAqIG92ZXJmbG93IGluIHRoZSBjYXNlIG9mIHRoZSBiaXQgbGVuZ3RoIHRyZWUpLlxuICAgKi9cbiAgdHJlZVtzLmhlYXBbcy5oZWFwX21heF0gKiAyICsgMV0vKi5MZW4qLyA9IDA7IC8qIHJvb3Qgb2YgdGhlIGhlYXAgKi9cblxuICBmb3IgKGggPSBzLmhlYXBfbWF4ICsgMTsgaCA8IEhFQVBfU0laRTsgaCsrKSB7XG4gICAgbiA9IHMuaGVhcFtoXTtcbiAgICBiaXRzID0gdHJlZVt0cmVlW24gKiAyICsgMV0vKi5EYWQqLyAqIDIgKyAxXS8qLkxlbiovICsgMTtcbiAgICBpZiAoYml0cyA+IG1heF9sZW5ndGgpIHtcbiAgICAgIGJpdHMgPSBtYXhfbGVuZ3RoO1xuICAgICAgb3ZlcmZsb3crKztcbiAgICB9XG4gICAgdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSBiaXRzO1xuICAgIC8qIFdlIG92ZXJ3cml0ZSB0cmVlW25dLkRhZCB3aGljaCBpcyBubyBsb25nZXIgbmVlZGVkICovXG5cbiAgICBpZiAobiA+IG1heF9jb2RlKSB7IGNvbnRpbnVlOyB9IC8qIG5vdCBhIGxlYWYgbm9kZSAqL1xuXG4gICAgcy5ibF9jb3VudFtiaXRzXSsrO1xuICAgIHhiaXRzID0gMDtcbiAgICBpZiAobiA+PSBiYXNlKSB7XG4gICAgICB4Yml0cyA9IGV4dHJhW24gLSBiYXNlXTtcbiAgICB9XG4gICAgZiA9IHRyZWVbbiAqIDJdLyouRnJlcSovO1xuICAgIHMub3B0X2xlbiArPSBmICogKGJpdHMgKyB4Yml0cyk7XG4gICAgaWYgKGhhc19zdHJlZSkge1xuICAgICAgcy5zdGF0aWNfbGVuICs9IGYgKiAoc3RyZWVbbiAqIDIgKyAxXS8qLkxlbiovICsgeGJpdHMpO1xuICAgIH1cbiAgfVxuICBpZiAob3ZlcmZsb3cgPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgLy8gVHJhY2UoKHN0ZGVycixcIlxcbmJpdCBsZW5ndGggb3ZlcmZsb3dcXG5cIikpO1xuICAvKiBUaGlzIGhhcHBlbnMgZm9yIGV4YW1wbGUgb24gb2JqMiBhbmQgcGljIG9mIHRoZSBDYWxnYXJ5IGNvcnB1cyAqL1xuXG4gIC8qIEZpbmQgdGhlIGZpcnN0IGJpdCBsZW5ndGggd2hpY2ggY291bGQgaW5jcmVhc2U6ICovXG4gIGRvIHtcbiAgICBiaXRzID0gbWF4X2xlbmd0aCAtIDE7XG4gICAgd2hpbGUgKHMuYmxfY291bnRbYml0c10gPT09IDApIHsgYml0cy0tOyB9XG4gICAgcy5ibF9jb3VudFtiaXRzXS0tOyAgICAgIC8qIG1vdmUgb25lIGxlYWYgZG93biB0aGUgdHJlZSAqL1xuICAgIHMuYmxfY291bnRbYml0cyArIDFdICs9IDI7IC8qIG1vdmUgb25lIG92ZXJmbG93IGl0ZW0gYXMgaXRzIGJyb3RoZXIgKi9cbiAgICBzLmJsX2NvdW50W21heF9sZW5ndGhdLS07XG4gICAgLyogVGhlIGJyb3RoZXIgb2YgdGhlIG92ZXJmbG93IGl0ZW0gYWxzbyBtb3ZlcyBvbmUgc3RlcCB1cCxcbiAgICAgKiBidXQgdGhpcyBkb2VzIG5vdCBhZmZlY3QgYmxfY291bnRbbWF4X2xlbmd0aF1cbiAgICAgKi9cbiAgICBvdmVyZmxvdyAtPSAyO1xuICB9IHdoaWxlIChvdmVyZmxvdyA+IDApO1xuXG4gIC8qIE5vdyByZWNvbXB1dGUgYWxsIGJpdCBsZW5ndGhzLCBzY2FubmluZyBpbiBpbmNyZWFzaW5nIGZyZXF1ZW5jeS5cbiAgICogaCBpcyBzdGlsbCBlcXVhbCB0byBIRUFQX1NJWkUuIChJdCBpcyBzaW1wbGVyIHRvIHJlY29uc3RydWN0IGFsbFxuICAgKiBsZW5ndGhzIGluc3RlYWQgb2YgZml4aW5nIG9ubHkgdGhlIHdyb25nIG9uZXMuIFRoaXMgaWRlYSBpcyB0YWtlblxuICAgKiBmcm9tICdhcicgd3JpdHRlbiBieSBIYXJ1aGlrbyBPa3VtdXJhLilcbiAgICovXG4gIGZvciAoYml0cyA9IG1heF9sZW5ndGg7IGJpdHMgIT09IDA7IGJpdHMtLSkge1xuICAgIG4gPSBzLmJsX2NvdW50W2JpdHNdO1xuICAgIHdoaWxlIChuICE9PSAwKSB7XG4gICAgICBtID0gcy5oZWFwWy0taF07XG4gICAgICBpZiAobSA+IG1heF9jb2RlKSB7IGNvbnRpbnVlOyB9XG4gICAgICBpZiAodHJlZVttICogMiArIDFdLyouTGVuKi8gIT09IGJpdHMpIHtcbiAgICAgICAgLy8gVHJhY2UoKHN0ZGVycixcImNvZGUgJWQgYml0cyAlZC0+JWRcXG5cIiwgbSwgdHJlZVttXS5MZW4sIGJpdHMpKTtcbiAgICAgICAgcy5vcHRfbGVuICs9IChiaXRzIC0gdHJlZVttICogMiArIDFdLyouTGVuKi8pICogdHJlZVttICogMl0vKi5GcmVxKi87XG4gICAgICAgIHRyZWVbbSAqIDIgKyAxXS8qLkxlbiovID0gYml0cztcbiAgICAgIH1cbiAgICAgIG4tLTtcbiAgICB9XG4gIH1cbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEdlbmVyYXRlIHRoZSBjb2RlcyBmb3IgYSBnaXZlbiB0cmVlIGFuZCBiaXQgY291bnRzICh3aGljaCBuZWVkIG5vdCBiZVxuICogb3B0aW1hbCkuXG4gKiBJTiBhc3NlcnRpb246IHRoZSBhcnJheSBibF9jb3VudCBjb250YWlucyB0aGUgYml0IGxlbmd0aCBzdGF0aXN0aWNzIGZvclxuICogdGhlIGdpdmVuIHRyZWUgYW5kIHRoZSBmaWVsZCBsZW4gaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cy5cbiAqIE9VVCBhc3NlcnRpb246IHRoZSBmaWVsZCBjb2RlIGlzIHNldCBmb3IgYWxsIHRyZWUgZWxlbWVudHMgb2Ygbm9uXG4gKiAgICAgemVybyBjb2RlIGxlbmd0aC5cbiAqL1xuZnVuY3Rpb24gZ2VuX2NvZGVzKHRyZWUsIG1heF9jb2RlLCBibF9jb3VudClcbi8vICAgIGN0X2RhdGEgKnRyZWU7ICAgICAgICAgICAgIC8qIHRoZSB0cmVlIHRvIGRlY29yYXRlICovXG4vLyAgICBpbnQgbWF4X2NvZGU7ICAgICAgICAgICAgICAvKiBsYXJnZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVxdWVuY3kgKi9cbi8vICAgIHVzaGYgKmJsX2NvdW50OyAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb2RlcyBhdCBlYWNoIGJpdCBsZW5ndGggKi9cbntcbiAgdmFyIG5leHRfY29kZSA9IG5ldyBBcnJheShNQVhfQklUUyArIDEpOyAvKiBuZXh0IGNvZGUgdmFsdWUgZm9yIGVhY2ggYml0IGxlbmd0aCAqL1xuICB2YXIgY29kZSA9IDA7ICAgICAgICAgICAgICAvKiBydW5uaW5nIGNvZGUgdmFsdWUgKi9cbiAgdmFyIGJpdHM7ICAgICAgICAgICAgICAgICAgLyogYml0IGluZGV4ICovXG4gIHZhciBuOyAgICAgICAgICAgICAgICAgICAgIC8qIGNvZGUgaW5kZXggKi9cblxuICAvKiBUaGUgZGlzdHJpYnV0aW9uIGNvdW50cyBhcmUgZmlyc3QgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY29kZSB2YWx1ZXNcbiAgICogd2l0aG91dCBiaXQgcmV2ZXJzYWwuXG4gICAqL1xuICBmb3IgKGJpdHMgPSAxOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHtcbiAgICBuZXh0X2NvZGVbYml0c10gPSBjb2RlID0gKGNvZGUgKyBibF9jb3VudFtiaXRzIC0gMV0pIDw8IDE7XG4gIH1cbiAgLyogQ2hlY2sgdGhhdCB0aGUgYml0IGNvdW50cyBpbiBibF9jb3VudCBhcmUgY29uc2lzdGVudC4gVGhlIGxhc3QgY29kZVxuICAgKiBtdXN0IGJlIGFsbCBvbmVzLlxuICAgKi9cbiAgLy9Bc3NlcnQgKGNvZGUgKyBibF9jb3VudFtNQVhfQklUU10tMSA9PSAoMTw8TUFYX0JJVFMpLTEsXG4gIC8vICAgICAgICBcImluY29uc2lzdGVudCBiaXQgY291bnRzXCIpO1xuICAvL1RyYWNldigoc3RkZXJyLFwiXFxuZ2VuX2NvZGVzOiBtYXhfY29kZSAlZCBcIiwgbWF4X2NvZGUpKTtcblxuICBmb3IgKG4gPSAwOyAgbiA8PSBtYXhfY29kZTsgbisrKSB7XG4gICAgdmFyIGxlbiA9IHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovO1xuICAgIGlmIChsZW4gPT09IDApIHsgY29udGludWU7IH1cbiAgICAvKiBOb3cgcmV2ZXJzZSB0aGUgYml0cyAqL1xuICAgIHRyZWVbbiAqIDJdLyouQ29kZSovID0gYmlfcmV2ZXJzZShuZXh0X2NvZGVbbGVuXSsrLCBsZW4pO1xuXG4gICAgLy9UcmFjZWN2KHRyZWUgIT0gc3RhdGljX2x0cmVlLCAoc3RkZXJyLFwiXFxubiAlM2QgJWMgbCAlMmQgYyAlNHggKCV4KSBcIixcbiAgICAvLyAgICAgbiwgKGlzZ3JhcGgobikgPyBuIDogJyAnKSwgbGVuLCB0cmVlW25dLkNvZGUsIG5leHRfY29kZVtsZW5dLTEpKTtcbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZSB0aGUgdmFyaW91cyAnY29uc3RhbnQnIHRhYmxlcy5cbiAqL1xuZnVuY3Rpb24gdHJfc3RhdGljX2luaXQoKSB7XG4gIHZhciBuOyAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciB0cmVlIGVsZW1lbnRzICovXG4gIHZhciBiaXRzOyAgICAgLyogYml0IGNvdW50ZXIgKi9cbiAgdmFyIGxlbmd0aDsgICAvKiBsZW5ndGggdmFsdWUgKi9cbiAgdmFyIGNvZGU7ICAgICAvKiBjb2RlIHZhbHVlICovXG4gIHZhciBkaXN0OyAgICAgLyogZGlzdGFuY2UgaW5kZXggKi9cbiAgdmFyIGJsX2NvdW50ID0gbmV3IEFycmF5KE1BWF9CSVRTICsgMSk7XG4gIC8qIG51bWJlciBvZiBjb2RlcyBhdCBlYWNoIGJpdCBsZW5ndGggZm9yIGFuIG9wdGltYWwgdHJlZSAqL1xuXG4gIC8vIGRvIGNoZWNrIGluIF90cl9pbml0KClcbiAgLy9pZiAoc3RhdGljX2luaXRfZG9uZSkgcmV0dXJuO1xuXG4gIC8qIEZvciBzb21lIGVtYmVkZGVkIHRhcmdldHMsIGdsb2JhbCB2YXJpYWJsZXMgYXJlIG5vdCBpbml0aWFsaXplZDogKi9cbi8qI2lmZGVmIE5PX0lOSVRfR0xPQkFMX1BPSU5URVJTXG4gIHN0YXRpY19sX2Rlc2Muc3RhdGljX3RyZWUgPSBzdGF0aWNfbHRyZWU7XG4gIHN0YXRpY19sX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2xiaXRzO1xuICBzdGF0aWNfZF9kZXNjLnN0YXRpY190cmVlID0gc3RhdGljX2R0cmVlO1xuICBzdGF0aWNfZF9kZXNjLmV4dHJhX2JpdHMgPSBleHRyYV9kYml0cztcbiAgc3RhdGljX2JsX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2JsYml0cztcbiNlbmRpZiovXG5cbiAgLyogSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBsZW5ndGggKDAuLjI1NSkgLT4gbGVuZ3RoIGNvZGUgKDAuLjI4KSAqL1xuICBsZW5ndGggPSAwO1xuICBmb3IgKGNvZGUgPSAwOyBjb2RlIDwgTEVOR1RIX0NPREVTIC0gMTsgY29kZSsrKSB7XG4gICAgYmFzZV9sZW5ndGhbY29kZV0gPSBsZW5ndGg7XG4gICAgZm9yIChuID0gMDsgbiA8ICgxIDw8IGV4dHJhX2xiaXRzW2NvZGVdKTsgbisrKSB7XG4gICAgICBfbGVuZ3RoX2NvZGVbbGVuZ3RoKytdID0gY29kZTtcbiAgICB9XG4gIH1cbiAgLy9Bc3NlcnQgKGxlbmd0aCA9PSAyNTYsIFwidHJfc3RhdGljX2luaXQ6IGxlbmd0aCAhPSAyNTZcIik7XG4gIC8qIE5vdGUgdGhhdCB0aGUgbGVuZ3RoIDI1NSAobWF0Y2ggbGVuZ3RoIDI1OCkgY2FuIGJlIHJlcHJlc2VudGVkXG4gICAqIGluIHR3byBkaWZmZXJlbnQgd2F5czogY29kZSAyODQgKyA1IGJpdHMgb3IgY29kZSAyODUsIHNvIHdlXG4gICAqIG92ZXJ3cml0ZSBsZW5ndGhfY29kZVsyNTVdIHRvIHVzZSB0aGUgYmVzdCBlbmNvZGluZzpcbiAgICovXG4gIF9sZW5ndGhfY29kZVtsZW5ndGggLSAxXSA9IGNvZGU7XG5cbiAgLyogSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBkaXN0ICgwLi4zMkspIC0+IGRpc3QgY29kZSAoMC4uMjkpICovXG4gIGRpc3QgPSAwO1xuICBmb3IgKGNvZGUgPSAwOyBjb2RlIDwgMTY7IGNvZGUrKykge1xuICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3Q7XG4gICAgZm9yIChuID0gMDsgbiA8ICgxIDw8IGV4dHJhX2RiaXRzW2NvZGVdKTsgbisrKSB7XG4gICAgICBfZGlzdF9jb2RlW2Rpc3QrK10gPSBjb2RlO1xuICAgIH1cbiAgfVxuICAvL0Fzc2VydCAoZGlzdCA9PSAyNTYsIFwidHJfc3RhdGljX2luaXQ6IGRpc3QgIT0gMjU2XCIpO1xuICBkaXN0ID4+PSA3OyAvKiBmcm9tIG5vdyBvbiwgYWxsIGRpc3RhbmNlcyBhcmUgZGl2aWRlZCBieSAxMjggKi9cbiAgZm9yICg7IGNvZGUgPCBEX0NPREVTOyBjb2RlKyspIHtcbiAgICBiYXNlX2Rpc3RbY29kZV0gPSBkaXN0IDw8IDc7XG4gICAgZm9yIChuID0gMDsgbiA8ICgxIDw8IChleHRyYV9kYml0c1tjb2RlXSAtIDcpKTsgbisrKSB7XG4gICAgICBfZGlzdF9jb2RlWzI1NiArIGRpc3QrK10gPSBjb2RlO1xuICAgIH1cbiAgfVxuICAvL0Fzc2VydCAoZGlzdCA9PSAyNTYsIFwidHJfc3RhdGljX2luaXQ6IDI1NitkaXN0ICE9IDUxMlwiKTtcblxuICAvKiBDb25zdHJ1Y3QgdGhlIGNvZGVzIG9mIHRoZSBzdGF0aWMgbGl0ZXJhbCB0cmVlICovXG4gIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykge1xuICAgIGJsX2NvdW50W2JpdHNdID0gMDtcbiAgfVxuXG4gIG4gPSAwO1xuICB3aGlsZSAobiA8PSAxNDMpIHtcbiAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovID0gODtcbiAgICBuKys7XG4gICAgYmxfY291bnRbOF0rKztcbiAgfVxuICB3aGlsZSAobiA8PSAyNTUpIHtcbiAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovID0gOTtcbiAgICBuKys7XG4gICAgYmxfY291bnRbOV0rKztcbiAgfVxuICB3aGlsZSAobiA8PSAyNzkpIHtcbiAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovID0gNztcbiAgICBuKys7XG4gICAgYmxfY291bnRbN10rKztcbiAgfVxuICB3aGlsZSAobiA8PSAyODcpIHtcbiAgICBzdGF0aWNfbHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovID0gODtcbiAgICBuKys7XG4gICAgYmxfY291bnRbOF0rKztcbiAgfVxuICAvKiBDb2RlcyAyODYgYW5kIDI4NyBkbyBub3QgZXhpc3QsIGJ1dCB3ZSBtdXN0IGluY2x1ZGUgdGhlbSBpbiB0aGVcbiAgICogdHJlZSBjb25zdHJ1Y3Rpb24gdG8gZ2V0IGEgY2Fub25pY2FsIEh1ZmZtYW4gdHJlZSAobG9uZ2VzdCBjb2RlXG4gICAqIGFsbCBvbmVzKVxuICAgKi9cbiAgZ2VuX2NvZGVzKHN0YXRpY19sdHJlZSwgTF9DT0RFUyArIDEsIGJsX2NvdW50KTtcblxuICAvKiBUaGUgc3RhdGljIGRpc3RhbmNlIHRyZWUgaXMgdHJpdmlhbDogKi9cbiAgZm9yIChuID0gMDsgbiA8IERfQ09ERVM7IG4rKykge1xuICAgIHN0YXRpY19kdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA1O1xuICAgIHN0YXRpY19kdHJlZVtuICogMl0vKi5Db2RlKi8gPSBiaV9yZXZlcnNlKG4sIDUpO1xuICB9XG5cbiAgLy8gTm93IGRhdGEgcmVhZHkgYW5kIHdlIGNhbiBpbml0IHN0YXRpYyB0cmVlc1xuICBzdGF0aWNfbF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKHN0YXRpY19sdHJlZSwgZXh0cmFfbGJpdHMsIExJVEVSQUxTICsgMSwgTF9DT0RFUywgTUFYX0JJVFMpO1xuICBzdGF0aWNfZF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKHN0YXRpY19kdHJlZSwgZXh0cmFfZGJpdHMsIDAsICAgICAgICAgIERfQ09ERVMsIE1BWF9CSVRTKTtcbiAgc3RhdGljX2JsX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2MobmV3IEFycmF5KDApLCBleHRyYV9ibGJpdHMsIDAsICAgICAgICAgQkxfQ09ERVMsIE1BWF9CTF9CSVRTKTtcblxuICAvL3N0YXRpY19pbml0X2RvbmUgPSB0cnVlO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZSBhIG5ldyBibG9jay5cbiAqL1xuZnVuY3Rpb24gaW5pdF9ibG9jayhzKSB7XG4gIHZhciBuOyAvKiBpdGVyYXRlcyBvdmVyIHRyZWUgZWxlbWVudHMgKi9cblxuICAvKiBJbml0aWFsaXplIHRoZSB0cmVlcy4gKi9cbiAgZm9yIChuID0gMDsgbiA8IExfQ09ERVM7ICBuKyspIHsgcy5keW5fbHRyZWVbbiAqIDJdLyouRnJlcSovID0gMDsgfVxuICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgIG4rKykgeyBzLmR5bl9kdHJlZVtuICogMl0vKi5GcmVxKi8gPSAwOyB9XG4gIGZvciAobiA9IDA7IG4gPCBCTF9DT0RFUzsgbisrKSB7IHMuYmxfdHJlZVtuICogMl0vKi5GcmVxKi8gPSAwOyB9XG5cbiAgcy5keW5fbHRyZWVbRU5EX0JMT0NLICogMl0vKi5GcmVxKi8gPSAxO1xuICBzLm9wdF9sZW4gPSBzLnN0YXRpY19sZW4gPSAwO1xuICBzLmxhc3RfbGl0ID0gcy5tYXRjaGVzID0gMDtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZsdXNoIHRoZSBiaXQgYnVmZmVyIGFuZCBhbGlnbiB0aGUgb3V0cHV0IG9uIGEgYnl0ZSBib3VuZGFyeVxuICovXG5mdW5jdGlvbiBiaV93aW5kdXAocylcbntcbiAgaWYgKHMuYmlfdmFsaWQgPiA4KSB7XG4gICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTtcbiAgfSBlbHNlIGlmIChzLmJpX3ZhbGlkID4gMCkge1xuICAgIC8vcHV0X2J5dGUocywgKEJ5dGUpcy0+YmlfYnVmKTtcbiAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMuYmlfYnVmO1xuICB9XG4gIHMuYmlfYnVmID0gMDtcbiAgcy5iaV92YWxpZCA9IDA7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weSBhIHN0b3JlZCBibG9jaywgc3RvcmluZyBmaXJzdCB0aGUgbGVuZ3RoIGFuZCBpdHNcbiAqIG9uZSdzIGNvbXBsZW1lbnQgaWYgcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiBjb3B5X2Jsb2NrKHMsIGJ1ZiwgbGVuLCBoZWFkZXIpXG4vL0RlZmxhdGVTdGF0ZSAqcztcbi8vY2hhcmYgICAgKmJ1ZjsgICAgLyogdGhlIGlucHV0IGRhdGEgKi9cbi8vdW5zaWduZWQgbGVuOyAgICAgLyogaXRzIGxlbmd0aCAqL1xuLy9pbnQgICAgICBoZWFkZXI7ICAvKiB0cnVlIGlmIGJsb2NrIGhlYWRlciBtdXN0IGJlIHdyaXR0ZW4gKi9cbntcbiAgYmlfd2luZHVwKHMpOyAgICAgICAgLyogYWxpZ24gb24gYnl0ZSBib3VuZGFyeSAqL1xuXG4gIGlmIChoZWFkZXIpIHtcbiAgICBwdXRfc2hvcnQocywgbGVuKTtcbiAgICBwdXRfc2hvcnQocywgfmxlbik7XG4gIH1cbi8vICB3aGlsZSAobGVuLS0pIHtcbi8vICAgIHB1dF9ieXRlKHMsICpidWYrKyk7XG4vLyAgfVxuICB1dGlscy5hcnJheVNldChzLnBlbmRpbmdfYnVmLCBzLndpbmRvdywgYnVmLCBsZW4sIHMucGVuZGluZyk7XG4gIHMucGVuZGluZyArPSBsZW47XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29tcGFyZXMgdG8gc3VidHJlZXMsIHVzaW5nIHRoZSB0cmVlIGRlcHRoIGFzIHRpZSBicmVha2VyIHdoZW5cbiAqIHRoZSBzdWJ0cmVlcyBoYXZlIGVxdWFsIGZyZXF1ZW5jeS4gVGhpcyBtaW5pbWl6ZXMgdGhlIHdvcnN0IGNhc2UgbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBzbWFsbGVyKHRyZWUsIG4sIG0sIGRlcHRoKSB7XG4gIHZhciBfbjIgPSBuICogMjtcbiAgdmFyIF9tMiA9IG0gKiAyO1xuICByZXR1cm4gKHRyZWVbX24yXS8qLkZyZXEqLyA8IHRyZWVbX20yXS8qLkZyZXEqLyB8fFxuICAgICAgICAgKHRyZWVbX24yXS8qLkZyZXEqLyA9PT0gdHJlZVtfbTJdLyouRnJlcSovICYmIGRlcHRoW25dIDw9IGRlcHRoW21dKSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogUmVzdG9yZSB0aGUgaGVhcCBwcm9wZXJ0eSBieSBtb3ZpbmcgZG93biB0aGUgdHJlZSBzdGFydGluZyBhdCBub2RlIGssXG4gKiBleGNoYW5naW5nIGEgbm9kZSB3aXRoIHRoZSBzbWFsbGVzdCBvZiBpdHMgdHdvIHNvbnMgaWYgbmVjZXNzYXJ5LCBzdG9wcGluZ1xuICogd2hlbiB0aGUgaGVhcCBwcm9wZXJ0eSBpcyByZS1lc3RhYmxpc2hlZCAoZWFjaCBmYXRoZXIgc21hbGxlciB0aGFuIGl0c1xuICogdHdvIHNvbnMpLlxuICovXG5mdW5jdGlvbiBwcWRvd25oZWFwKHMsIHRyZWUsIGspXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgIC8qIHRoZSB0cmVlIHRvIHJlc3RvcmUgKi9cbi8vICAgIGludCBrOyAgICAgICAgICAgICAgIC8qIG5vZGUgdG8gbW92ZSBkb3duICovXG57XG4gIHZhciB2ID0gcy5oZWFwW2tdO1xuICB2YXIgaiA9IGsgPDwgMTsgIC8qIGxlZnQgc29uIG9mIGsgKi9cbiAgd2hpbGUgKGogPD0gcy5oZWFwX2xlbikge1xuICAgIC8qIFNldCBqIHRvIHRoZSBzbWFsbGVzdCBvZiB0aGUgdHdvIHNvbnM6ICovXG4gICAgaWYgKGogPCBzLmhlYXBfbGVuICYmXG4gICAgICBzbWFsbGVyKHRyZWUsIHMuaGVhcFtqICsgMV0sIHMuaGVhcFtqXSwgcy5kZXB0aCkpIHtcbiAgICAgIGorKztcbiAgICB9XG4gICAgLyogRXhpdCBpZiB2IGlzIHNtYWxsZXIgdGhhbiBib3RoIHNvbnMgKi9cbiAgICBpZiAoc21hbGxlcih0cmVlLCB2LCBzLmhlYXBbal0sIHMuZGVwdGgpKSB7IGJyZWFrOyB9XG5cbiAgICAvKiBFeGNoYW5nZSB2IHdpdGggdGhlIHNtYWxsZXN0IHNvbiAqL1xuICAgIHMuaGVhcFtrXSA9IHMuaGVhcFtqXTtcbiAgICBrID0gajtcblxuICAgIC8qIEFuZCBjb250aW51ZSBkb3duIHRoZSB0cmVlLCBzZXR0aW5nIGogdG8gdGhlIGxlZnQgc29uIG9mIGsgKi9cbiAgICBqIDw8PSAxO1xuICB9XG4gIHMuaGVhcFtrXSA9IHY7XG59XG5cblxuLy8gaW5saW5lZCBtYW51YWxseVxuLy8gdmFyIFNNQUxMRVNUID0gMTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTZW5kIHRoZSBibG9jayBkYXRhIGNvbXByZXNzZWQgdXNpbmcgdGhlIGdpdmVuIEh1ZmZtYW4gdHJlZXNcbiAqL1xuZnVuY3Rpb24gY29tcHJlc3NfYmxvY2socywgbHRyZWUsIGR0cmVlKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIGNvbnN0IGN0X2RhdGEgKmx0cmVlOyAvKiBsaXRlcmFsIHRyZWUgKi9cbi8vICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5jZSB0cmVlICovXG57XG4gIHZhciBkaXN0OyAgICAgICAgICAgLyogZGlzdGFuY2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi9cbiAgdmFyIGxjOyAgICAgICAgICAgICAvKiBtYXRjaCBsZW5ndGggb3IgdW5tYXRjaGVkIGNoYXIgKGlmIGRpc3QgPT0gMCkgKi9cbiAgdmFyIGx4ID0gMDsgICAgICAgICAvKiBydW5uaW5nIGluZGV4IGluIGxfYnVmICovXG4gIHZhciBjb2RlOyAgICAgICAgICAgLyogdGhlIGNvZGUgdG8gc2VuZCAqL1xuICB2YXIgZXh0cmE7ICAgICAgICAgIC8qIG51bWJlciBvZiBleHRyYSBiaXRzIHRvIHNlbmQgKi9cblxuICBpZiAocy5sYXN0X2xpdCAhPT0gMCkge1xuICAgIGRvIHtcbiAgICAgIGRpc3QgPSAocy5wZW5kaW5nX2J1ZltzLmRfYnVmICsgbHggKiAyXSA8PCA4KSB8IChzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBseCAqIDIgKyAxXSk7XG4gICAgICBsYyA9IHMucGVuZGluZ19idWZbcy5sX2J1ZiArIGx4XTtcbiAgICAgIGx4Kys7XG5cbiAgICAgIGlmIChkaXN0ID09PSAwKSB7XG4gICAgICAgIHNlbmRfY29kZShzLCBsYywgbHRyZWUpOyAvKiBzZW5kIGEgbGl0ZXJhbCBieXRlICovXG4gICAgICAgIC8vVHJhY2Vjdihpc2dyYXBoKGxjKSwgKHN0ZGVycixcIiAnJWMnIFwiLCBsYykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogSGVyZSwgbGMgaXMgdGhlIG1hdGNoIGxlbmd0aCAtIE1JTl9NQVRDSCAqL1xuICAgICAgICBjb2RlID0gX2xlbmd0aF9jb2RlW2xjXTtcbiAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUgKyBMSVRFUkFMUyArIDEsIGx0cmVlKTsgLyogc2VuZCB0aGUgbGVuZ3RoIGNvZGUgKi9cbiAgICAgICAgZXh0cmEgPSBleHRyYV9sYml0c1tjb2RlXTtcbiAgICAgICAgaWYgKGV4dHJhICE9PSAwKSB7XG4gICAgICAgICAgbGMgLT0gYmFzZV9sZW5ndGhbY29kZV07XG4gICAgICAgICAgc2VuZF9iaXRzKHMsIGxjLCBleHRyYSk7ICAgICAgIC8qIHNlbmQgdGhlIGV4dHJhIGxlbmd0aCBiaXRzICovXG4gICAgICAgIH1cbiAgICAgICAgZGlzdC0tOyAvKiBkaXN0IGlzIG5vdyB0aGUgbWF0Y2ggZGlzdGFuY2UgLSAxICovXG4gICAgICAgIGNvZGUgPSBkX2NvZGUoZGlzdCk7XG4gICAgICAgIC8vQXNzZXJ0IChjb2RlIDwgRF9DT0RFUywgXCJiYWQgZF9jb2RlXCIpO1xuXG4gICAgICAgIHNlbmRfY29kZShzLCBjb2RlLCBkdHJlZSk7ICAgICAgIC8qIHNlbmQgdGhlIGRpc3RhbmNlIGNvZGUgKi9cbiAgICAgICAgZXh0cmEgPSBleHRyYV9kYml0c1tjb2RlXTtcbiAgICAgICAgaWYgKGV4dHJhICE9PSAwKSB7XG4gICAgICAgICAgZGlzdCAtPSBiYXNlX2Rpc3RbY29kZV07XG4gICAgICAgICAgc2VuZF9iaXRzKHMsIGRpc3QsIGV4dHJhKTsgICAvKiBzZW5kIHRoZSBleHRyYSBkaXN0YW5jZSBiaXRzICovXG4gICAgICAgIH1cbiAgICAgIH0gLyogbGl0ZXJhbCBvciBtYXRjaCBwYWlyID8gKi9cblxuICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgb3ZlcmxheSBiZXR3ZWVuIHBlbmRpbmdfYnVmIGFuZCBkX2J1ZitsX2J1ZiBpcyBvazogKi9cbiAgICAgIC8vQXNzZXJ0KCh1SW50KShzLT5wZW5kaW5nKSA8IHMtPmxpdF9idWZzaXplICsgMipseCxcbiAgICAgIC8vICAgICAgIFwicGVuZGluZ0J1ZiBvdmVyZmxvd1wiKTtcblxuICAgIH0gd2hpbGUgKGx4IDwgcy5sYXN0X2xpdCk7XG4gIH1cblxuICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBsdHJlZSk7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb25zdHJ1Y3Qgb25lIEh1ZmZtYW4gdHJlZSBhbmQgYXNzaWducyB0aGUgY29kZSBiaXQgc3RyaW5ncyBhbmQgbGVuZ3Rocy5cbiAqIFVwZGF0ZSB0aGUgdG90YWwgYml0IGxlbmd0aCBmb3IgdGhlIGN1cnJlbnQgYmxvY2suXG4gKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZCBmcmVxIGlzIHNldCBmb3IgYWxsIHRyZWUgZWxlbWVudHMuXG4gKiBPVVQgYXNzZXJ0aW9uczogdGhlIGZpZWxkcyBsZW4gYW5kIGNvZGUgYXJlIHNldCB0byB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RoXG4gKiAgICAgYW5kIGNvcnJlc3BvbmRpbmcgY29kZS4gVGhlIGxlbmd0aCBvcHRfbGVuIGlzIHVwZGF0ZWQ7IHN0YXRpY19sZW4gaXNcbiAqICAgICBhbHNvIHVwZGF0ZWQgaWYgc3RyZWUgaXMgbm90IG51bGwuIFRoZSBmaWVsZCBtYXhfY29kZSBpcyBzZXQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkX3RyZWUocywgZGVzYylcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICB0cmVlX2Rlc2MgKmRlc2M7IC8qIHRoZSB0cmVlIGRlc2NyaXB0b3IgKi9cbntcbiAgdmFyIHRyZWUgICAgID0gZGVzYy5keW5fdHJlZTtcbiAgdmFyIHN0cmVlICAgID0gZGVzYy5zdGF0X2Rlc2Muc3RhdGljX3RyZWU7XG4gIHZhciBoYXNfc3RyZWUgPSBkZXNjLnN0YXRfZGVzYy5oYXNfc3RyZWU7XG4gIHZhciBlbGVtcyAgICA9IGRlc2Muc3RhdF9kZXNjLmVsZW1zO1xuICB2YXIgbiwgbTsgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIGhlYXAgZWxlbWVudHMgKi9cbiAgdmFyIG1heF9jb2RlID0gLTE7IC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xuICB2YXIgbm9kZTsgICAgICAgICAgLyogbmV3IG5vZGUgYmVpbmcgY3JlYXRlZCAqL1xuXG4gIC8qIENvbnN0cnVjdCB0aGUgaW5pdGlhbCBoZWFwLCB3aXRoIGxlYXN0IGZyZXF1ZW50IGVsZW1lbnQgaW5cbiAgICogaGVhcFtTTUFMTEVTVF0uIFRoZSBzb25zIG9mIGhlYXBbbl0gYXJlIGhlYXBbMipuXSBhbmQgaGVhcFsyKm4rMV0uXG4gICAqIGhlYXBbMF0gaXMgbm90IHVzZWQuXG4gICAqL1xuICBzLmhlYXBfbGVuID0gMDtcbiAgcy5oZWFwX21heCA9IEhFQVBfU0laRTtcblxuICBmb3IgKG4gPSAwOyBuIDwgZWxlbXM7IG4rKykge1xuICAgIGlmICh0cmVlW24gKiAyXS8qLkZyZXEqLyAhPT0gMCkge1xuICAgICAgcy5oZWFwWysrcy5oZWFwX2xlbl0gPSBtYXhfY29kZSA9IG47XG4gICAgICBzLmRlcHRoW25dID0gMDtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyogVGhlIHBremlwIGZvcm1hdCByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IG9uZSBkaXN0YW5jZSBjb2RlIGV4aXN0cyxcbiAgICogYW5kIHRoYXQgYXQgbGVhc3Qgb25lIGJpdCBzaG91bGQgYmUgc2VudCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lXG4gICAqIHBvc3NpYmxlIGNvZGUuIFNvIHRvIGF2b2lkIHNwZWNpYWwgY2hlY2tzIGxhdGVyIG9uIHdlIGZvcmNlIGF0IGxlYXN0XG4gICAqIHR3byBjb2RlcyBvZiBub24gemVybyBmcmVxdWVuY3kuXG4gICAqL1xuICB3aGlsZSAocy5oZWFwX2xlbiA8IDIpIHtcbiAgICBub2RlID0gcy5oZWFwWysrcy5oZWFwX2xlbl0gPSAobWF4X2NvZGUgPCAyID8gKyttYXhfY29kZSA6IDApO1xuICAgIHRyZWVbbm9kZSAqIDJdLyouRnJlcSovID0gMTtcbiAgICBzLmRlcHRoW25vZGVdID0gMDtcbiAgICBzLm9wdF9sZW4tLTtcblxuICAgIGlmIChoYXNfc3RyZWUpIHtcbiAgICAgIHMuc3RhdGljX2xlbiAtPSBzdHJlZVtub2RlICogMiArIDFdLyouTGVuKi87XG4gICAgfVxuICAgIC8qIG5vZGUgaXMgMCBvciAxIHNvIGl0IGRvZXMgbm90IGhhdmUgZXh0cmEgYml0cyAqL1xuICB9XG4gIGRlc2MubWF4X2NvZGUgPSBtYXhfY29kZTtcblxuICAvKiBUaGUgZWxlbWVudHMgaGVhcFtoZWFwX2xlbi8yKzEgLi4gaGVhcF9sZW5dIGFyZSBsZWF2ZXMgb2YgdGhlIHRyZWUsXG4gICAqIGVzdGFibGlzaCBzdWItaGVhcHMgb2YgaW5jcmVhc2luZyBsZW5ndGhzOlxuICAgKi9cbiAgZm9yIChuID0gKHMuaGVhcF9sZW4gPj4gMS8qaW50IC8yKi8pOyBuID49IDE7IG4tLSkgeyBwcWRvd25oZWFwKHMsIHRyZWUsIG4pOyB9XG5cbiAgLyogQ29uc3RydWN0IHRoZSBIdWZmbWFuIHRyZWUgYnkgcmVwZWF0ZWRseSBjb21iaW5pbmcgdGhlIGxlYXN0IHR3b1xuICAgKiBmcmVxdWVudCBub2Rlcy5cbiAgICovXG4gIG5vZGUgPSBlbGVtczsgICAgICAgICAgICAgIC8qIG5leHQgaW50ZXJuYWwgbm9kZSBvZiB0aGUgdHJlZSAqL1xuICBkbyB7XG4gICAgLy9wcXJlbW92ZShzLCB0cmVlLCBuKTsgIC8qIG4gPSBub2RlIG9mIGxlYXN0IGZyZXF1ZW5jeSAqL1xuICAgIC8qKiogcHFyZW1vdmUgKioqL1xuICAgIG4gPSBzLmhlYXBbMS8qU01BTExFU1QqL107XG4gICAgcy5oZWFwWzEvKlNNQUxMRVNUKi9dID0gcy5oZWFwW3MuaGVhcF9sZW4tLV07XG4gICAgcHFkb3duaGVhcChzLCB0cmVlLCAxLypTTUFMTEVTVCovKTtcbiAgICAvKioqL1xuXG4gICAgbSA9IHMuaGVhcFsxLypTTUFMTEVTVCovXTsgLyogbSA9IG5vZGUgb2YgbmV4dCBsZWFzdCBmcmVxdWVuY3kgKi9cblxuICAgIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gbjsgLyoga2VlcCB0aGUgbm9kZXMgc29ydGVkIGJ5IGZyZXF1ZW5jeSAqL1xuICAgIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gbTtcblxuICAgIC8qIENyZWF0ZSBhIG5ldyBub2RlIGZhdGhlciBvZiBuIGFuZCBtICovXG4gICAgdHJlZVtub2RlICogMl0vKi5GcmVxKi8gPSB0cmVlW24gKiAyXS8qLkZyZXEqLyArIHRyZWVbbSAqIDJdLyouRnJlcSovO1xuICAgIHMuZGVwdGhbbm9kZV0gPSAocy5kZXB0aFtuXSA+PSBzLmRlcHRoW21dID8gcy5kZXB0aFtuXSA6IHMuZGVwdGhbbV0pICsgMTtcbiAgICB0cmVlW24gKiAyICsgMV0vKi5EYWQqLyA9IHRyZWVbbSAqIDIgKyAxXS8qLkRhZCovID0gbm9kZTtcblxuICAgIC8qIGFuZCBpbnNlcnQgdGhlIG5ldyBub2RlIGluIHRoZSBoZWFwICovXG4gICAgcy5oZWFwWzEvKlNNQUxMRVNUKi9dID0gbm9kZSsrO1xuICAgIHBxZG93bmhlYXAocywgdHJlZSwgMS8qU01BTExFU1QqLyk7XG5cbiAgfSB3aGlsZSAocy5oZWFwX2xlbiA+PSAyKTtcblxuICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IHMuaGVhcFsxLypTTUFMTEVTVCovXTtcblxuICAvKiBBdCB0aGlzIHBvaW50LCB0aGUgZmllbGRzIGZyZXEgYW5kIGRhZCBhcmUgc2V0LiBXZSBjYW4gbm93XG4gICAqIGdlbmVyYXRlIHRoZSBiaXQgbGVuZ3Rocy5cbiAgICovXG4gIGdlbl9iaXRsZW4ocywgZGVzYyk7XG5cbiAgLyogVGhlIGZpZWxkIGxlbiBpcyBub3cgc2V0LCB3ZSBjYW4gZ2VuZXJhdGUgdGhlIGJpdCBjb2RlcyAqL1xuICBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIHMuYmxfY291bnQpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2NhbiBhIGxpdGVyYWwgb3IgZGlzdGFuY2UgdHJlZSB0byBkZXRlcm1pbmUgdGhlIGZyZXF1ZW5jaWVzIG9mIHRoZSBjb2Rlc1xuICogaW4gdGhlIGJpdCBsZW5ndGggdHJlZS5cbiAqL1xuZnVuY3Rpb24gc2Nhbl90cmVlKHMsIHRyZWUsIG1heF9jb2RlKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIGN0X2RhdGEgKnRyZWU7ICAgLyogdGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqL1xuLy8gICAgaW50IG1heF9jb2RlOyAgICAvKiBhbmQgaXRzIGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kgKi9cbntcbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciBhbGwgdHJlZSBlbGVtZW50cyAqL1xuICB2YXIgcHJldmxlbiA9IC0xOyAgICAgICAgICAvKiBsYXN0IGVtaXR0ZWQgbGVuZ3RoICovXG4gIHZhciBjdXJsZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IGNvZGUgKi9cblxuICB2YXIgbmV4dGxlbiA9IHRyZWVbMCAqIDIgKyAxXS8qLkxlbiovOyAvKiBsZW5ndGggb2YgbmV4dCBjb2RlICovXG5cbiAgdmFyIGNvdW50ID0gMDsgICAgICAgICAgICAgLyogcmVwZWF0IGNvdW50IG9mIHRoZSBjdXJyZW50IGNvZGUgKi9cbiAgdmFyIG1heF9jb3VudCA9IDc7ICAgICAgICAgLyogbWF4IHJlcGVhdCBjb3VudCAqL1xuICB2YXIgbWluX2NvdW50ID0gNDsgICAgICAgICAvKiBtaW4gcmVwZWF0IGNvdW50ICovXG5cbiAgaWYgKG5leHRsZW4gPT09IDApIHtcbiAgICBtYXhfY291bnQgPSAxMzg7XG4gICAgbWluX2NvdW50ID0gMztcbiAgfVxuICB0cmVlWyhtYXhfY29kZSArIDEpICogMiArIDFdLyouTGVuKi8gPSAweGZmZmY7IC8qIGd1YXJkICovXG5cbiAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7XG4gICAgY3VybGVuID0gbmV4dGxlbjtcbiAgICBuZXh0bGVuID0gdHJlZVsobiArIDEpICogMiArIDFdLyouTGVuKi87XG5cbiAgICBpZiAoKytjb3VudCA8IG1heF9jb3VudCAmJiBjdXJsZW4gPT09IG5leHRsZW4pIHtcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgfSBlbHNlIGlmIChjb3VudCA8IG1pbl9jb3VudCkge1xuICAgICAgcy5ibF90cmVlW2N1cmxlbiAqIDJdLyouRnJlcSovICs9IGNvdW50O1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gIT09IDApIHtcblxuICAgICAgaWYgKGN1cmxlbiAhPT0gcHJldmxlbikgeyBzLmJsX3RyZWVbY3VybGVuICogMl0vKi5GcmVxKi8rKzsgfVxuICAgICAgcy5ibF90cmVlW1JFUF8zXzYgKiAyXS8qLkZyZXEqLysrO1xuXG4gICAgfSBlbHNlIGlmIChjb3VudCA8PSAxMCkge1xuICAgICAgcy5ibF90cmVlW1JFUFpfM18xMCAqIDJdLyouRnJlcSovKys7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgcy5ibF90cmVlW1JFUFpfMTFfMTM4ICogMl0vKi5GcmVxKi8rKztcbiAgICB9XG5cbiAgICBjb3VudCA9IDA7XG4gICAgcHJldmxlbiA9IGN1cmxlbjtcblxuICAgIGlmIChuZXh0bGVuID09PSAwKSB7XG4gICAgICBtYXhfY291bnQgPSAxMzg7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gPT09IG5leHRsZW4pIHtcbiAgICAgIG1heF9jb3VudCA9IDY7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIG1heF9jb3VudCA9IDc7XG4gICAgICBtaW5fY291bnQgPSA0O1xuICAgIH1cbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIGxpdGVyYWwgb3IgZGlzdGFuY2UgdHJlZSBpbiBjb21wcmVzc2VkIGZvcm0sIHVzaW5nIHRoZSBjb2RlcyBpblxuICogYmxfdHJlZS5cbiAqL1xuZnVuY3Rpb24gc2VuZF90cmVlKHMsIHRyZWUsIG1heF9jb2RlKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIGN0X2RhdGEgKnRyZWU7IC8qIHRoZSB0cmVlIHRvIGJlIHNjYW5uZWQgKi9cbi8vICAgIGludCBtYXhfY29kZTsgICAgICAgLyogYW5kIGl0cyBsYXJnZXN0IGNvZGUgb2Ygbm9uIHplcm8gZnJlcXVlbmN5ICovXG57XG4gIHZhciBuOyAgICAgICAgICAgICAgICAgICAgIC8qIGl0ZXJhdGVzIG92ZXIgYWxsIHRyZWUgZWxlbWVudHMgKi9cbiAgdmFyIHByZXZsZW4gPSAtMTsgICAgICAgICAgLyogbGFzdCBlbWl0dGVkIGxlbmd0aCAqL1xuICB2YXIgY3VybGVuOyAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgY3VycmVudCBjb2RlICovXG5cbiAgdmFyIG5leHRsZW4gPSB0cmVlWzAgKiAyICsgMV0vKi5MZW4qLzsgLyogbGVuZ3RoIG9mIG5leHQgY29kZSAqL1xuXG4gIHZhciBjb3VudCA9IDA7ICAgICAgICAgICAgIC8qIHJlcGVhdCBjb3VudCBvZiB0aGUgY3VycmVudCBjb2RlICovXG4gIHZhciBtYXhfY291bnQgPSA3OyAgICAgICAgIC8qIG1heCByZXBlYXQgY291bnQgKi9cbiAgdmFyIG1pbl9jb3VudCA9IDQ7ICAgICAgICAgLyogbWluIHJlcGVhdCBjb3VudCAqL1xuXG4gIC8qIHRyZWVbbWF4X2NvZGUrMV0uTGVuID0gLTE7ICovICAvKiBndWFyZCBhbHJlYWR5IHNldCAqL1xuICBpZiAobmV4dGxlbiA9PT0gMCkge1xuICAgIG1heF9jb3VudCA9IDEzODtcbiAgICBtaW5fY291bnQgPSAzO1xuICB9XG5cbiAgZm9yIChuID0gMDsgbiA8PSBtYXhfY29kZTsgbisrKSB7XG4gICAgY3VybGVuID0gbmV4dGxlbjtcbiAgICBuZXh0bGVuID0gdHJlZVsobiArIDEpICogMiArIDFdLyouTGVuKi87XG5cbiAgICBpZiAoKytjb3VudCA8IG1heF9jb3VudCAmJiBjdXJsZW4gPT09IG5leHRsZW4pIHtcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgfSBlbHNlIGlmIChjb3VudCA8IG1pbl9jb3VudCkge1xuICAgICAgZG8geyBzZW5kX2NvZGUocywgY3VybGVuLCBzLmJsX3RyZWUpOyB9IHdoaWxlICgtLWNvdW50ICE9PSAwKTtcblxuICAgIH0gZWxzZSBpZiAoY3VybGVuICE9PSAwKSB7XG4gICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7XG4gICAgICAgIHNlbmRfY29kZShzLCBjdXJsZW4sIHMuYmxfdHJlZSk7XG4gICAgICAgIGNvdW50LS07XG4gICAgICB9XG4gICAgICAvL0Fzc2VydChjb3VudCA+PSAzICYmIGNvdW50IDw9IDYsIFwiIDNfNj9cIik7XG4gICAgICBzZW5kX2NvZGUocywgUkVQXzNfNiwgcy5ibF90cmVlKTtcbiAgICAgIHNlbmRfYml0cyhzLCBjb3VudCAtIDMsIDIpO1xuXG4gICAgfSBlbHNlIGlmIChjb3VudCA8PSAxMCkge1xuICAgICAgc2VuZF9jb2RlKHMsIFJFUFpfM18xMCwgcy5ibF90cmVlKTtcbiAgICAgIHNlbmRfYml0cyhzLCBjb3VudCAtIDMsIDMpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbmRfY29kZShzLCBSRVBaXzExXzEzOCwgcy5ibF90cmVlKTtcbiAgICAgIHNlbmRfYml0cyhzLCBjb3VudCAtIDExLCA3KTtcbiAgICB9XG5cbiAgICBjb3VudCA9IDA7XG4gICAgcHJldmxlbiA9IGN1cmxlbjtcbiAgICBpZiAobmV4dGxlbiA9PT0gMCkge1xuICAgICAgbWF4X2NvdW50ID0gMTM4O1xuICAgICAgbWluX2NvdW50ID0gMztcblxuICAgIH0gZWxzZSBpZiAoY3VybGVuID09PSBuZXh0bGVuKSB7XG4gICAgICBtYXhfY291bnQgPSA2O1xuICAgICAgbWluX2NvdW50ID0gMztcblxuICAgIH0gZWxzZSB7XG4gICAgICBtYXhfY291bnQgPSA3O1xuICAgICAgbWluX2NvdW50ID0gNDtcbiAgICB9XG4gIH1cbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbnN0cnVjdCB0aGUgSHVmZm1hbiB0cmVlIGZvciB0aGUgYml0IGxlbmd0aHMgYW5kIHJldHVybiB0aGUgaW5kZXggaW5cbiAqIGJsX29yZGVyIG9mIHRoZSBsYXN0IGJpdCBsZW5ndGggY29kZSB0byBzZW5kLlxuICovXG5mdW5jdGlvbiBidWlsZF9ibF90cmVlKHMpIHtcbiAgdmFyIG1heF9ibGluZGV4OyAgLyogaW5kZXggb2YgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgb2Ygbm9uIHplcm8gZnJlcSAqL1xuXG4gIC8qIERldGVybWluZSB0aGUgYml0IGxlbmd0aCBmcmVxdWVuY2llcyBmb3IgbGl0ZXJhbCBhbmQgZGlzdGFuY2UgdHJlZXMgKi9cbiAgc2Nhbl90cmVlKHMsIHMuZHluX2x0cmVlLCBzLmxfZGVzYy5tYXhfY29kZSk7XG4gIHNjYW5fdHJlZShzLCBzLmR5bl9kdHJlZSwgcy5kX2Rlc2MubWF4X2NvZGUpO1xuXG4gIC8qIEJ1aWxkIHRoZSBiaXQgbGVuZ3RoIHRyZWU6ICovXG4gIGJ1aWxkX3RyZWUocywgcy5ibF9kZXNjKTtcbiAgLyogb3B0X2xlbiBub3cgaW5jbHVkZXMgdGhlIGxlbmd0aCBvZiB0aGUgdHJlZSByZXByZXNlbnRhdGlvbnMsIGV4Y2VwdFxuICAgKiB0aGUgbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aHMgY29kZXMgYW5kIHRoZSA1KzUrNCBiaXRzIGZvciB0aGUgY291bnRzLlxuICAgKi9cblxuICAvKiBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBiaXQgbGVuZ3RoIGNvZGVzIHRvIHNlbmQuIFRoZSBwa3ppcCBmb3JtYXRcbiAgICogcmVxdWlyZXMgdGhhdCBhdCBsZWFzdCA0IGJpdCBsZW5ndGggY29kZXMgYmUgc2VudC4gKGFwcG5vdGUudHh0IHNheXNcbiAgICogMyBidXQgdGhlIGFjdHVhbCB2YWx1ZSB1c2VkIGlzIDQuKVxuICAgKi9cbiAgZm9yIChtYXhfYmxpbmRleCA9IEJMX0NPREVTIC0gMTsgbWF4X2JsaW5kZXggPj0gMzsgbWF4X2JsaW5kZXgtLSkge1xuICAgIGlmIChzLmJsX3RyZWVbYmxfb3JkZXJbbWF4X2JsaW5kZXhdICogMiArIDFdLyouTGVuKi8gIT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICAvKiBVcGRhdGUgb3B0X2xlbiB0byBpbmNsdWRlIHRoZSBiaXQgbGVuZ3RoIHRyZWUgYW5kIGNvdW50cyAqL1xuICBzLm9wdF9sZW4gKz0gMyAqIChtYXhfYmxpbmRleCArIDEpICsgNSArIDUgKyA0O1xuICAvL1RyYWNldigoc3RkZXJyLCBcIlxcbmR5biB0cmVlczogZHluICVsZCwgc3RhdCAlbGRcIixcbiAgLy8gICAgICAgIHMtPm9wdF9sZW4sIHMtPnN0YXRpY19sZW4pKTtcblxuICByZXR1cm4gbWF4X2JsaW5kZXg7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTZW5kIHRoZSBoZWFkZXIgZm9yIGEgYmxvY2sgdXNpbmcgZHluYW1pYyBIdWZmbWFuIHRyZWVzOiB0aGUgY291bnRzLCB0aGVcbiAqIGxlbmd0aHMgb2YgdGhlIGJpdCBsZW5ndGggY29kZXMsIHRoZSBsaXRlcmFsIHRyZWUgYW5kIHRoZSBkaXN0YW5jZSB0cmVlLlxuICogSU4gYXNzZXJ0aW9uOiBsY29kZXMgPj0gMjU3LCBkY29kZXMgPj0gMSwgYmxjb2RlcyA+PSA0LlxuICovXG5mdW5jdGlvbiBzZW5kX2FsbF90cmVlcyhzLCBsY29kZXMsIGRjb2RlcywgYmxjb2Rlcylcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICBpbnQgbGNvZGVzLCBkY29kZXMsIGJsY29kZXM7IC8qIG51bWJlciBvZiBjb2RlcyBmb3IgZWFjaCB0cmVlICovXG57XG4gIHZhciByYW5rOyAgICAgICAgICAgICAgICAgICAgLyogaW5kZXggaW4gYmxfb3JkZXIgKi9cblxuICAvL0Fzc2VydCAobGNvZGVzID49IDI1NyAmJiBkY29kZXMgPj0gMSAmJiBibGNvZGVzID49IDQsIFwibm90IGVub3VnaCBjb2Rlc1wiKTtcbiAgLy9Bc3NlcnQgKGxjb2RlcyA8PSBMX0NPREVTICYmIGRjb2RlcyA8PSBEX0NPREVTICYmIGJsY29kZXMgPD0gQkxfQ09ERVMsXG4gIC8vICAgICAgICBcInRvbyBtYW55IGNvZGVzXCIpO1xuICAvL1RyYWNldigoc3RkZXJyLCBcIlxcbmJsIGNvdW50czogXCIpKTtcbiAgc2VuZF9iaXRzKHMsIGxjb2RlcyAtIDI1NywgNSk7IC8qIG5vdCArMjU1IGFzIHN0YXRlZCBpbiBhcHBub3RlLnR4dCAqL1xuICBzZW5kX2JpdHMocywgZGNvZGVzIC0gMSwgICA1KTtcbiAgc2VuZF9iaXRzKHMsIGJsY29kZXMgLSA0LCAgNCk7IC8qIG5vdCAtMyBhcyBzdGF0ZWQgaW4gYXBwbm90ZS50eHQgKi9cbiAgZm9yIChyYW5rID0gMDsgcmFuayA8IGJsY29kZXM7IHJhbmsrKykge1xuICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgY29kZSAlMmQgXCIsIGJsX29yZGVyW3JhbmtdKSk7XG4gICAgc2VuZF9iaXRzKHMsIHMuYmxfdHJlZVtibF9vcmRlcltyYW5rXSAqIDIgKyAxXS8qLkxlbiovLCAzKTtcbiAgfVxuICAvL1RyYWNldigoc3RkZXJyLCBcIlxcbmJsIHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xuXG4gIHNlbmRfdHJlZShzLCBzLmR5bl9sdHJlZSwgbGNvZGVzIC0gMSk7IC8qIGxpdGVyYWwgdHJlZSAqL1xuICAvL1RyYWNldigoc3RkZXJyLCBcIlxcbmxpdCB0cmVlOiBzZW50ICVsZFwiLCBzLT5iaXRzX3NlbnQpKTtcblxuICBzZW5kX3RyZWUocywgcy5keW5fZHRyZWUsIGRjb2RlcyAtIDEpOyAvKiBkaXN0YW5jZSB0cmVlICovXG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuZGlzdCB0cmVlOiBzZW50ICVsZFwiLCBzLT5iaXRzX3NlbnQpKTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENoZWNrIGlmIHRoZSBkYXRhIHR5cGUgaXMgVEVYVCBvciBCSU5BUlksIHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOlxuICogLSBURVhUIGlmIHRoZSB0d28gY29uZGl0aW9ucyBiZWxvdyBhcmUgc2F0aXNmaWVkOlxuICogICAgYSkgVGhlcmUgYXJlIG5vIG5vbi1wb3J0YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgYmVsb25naW5nIHRvIHRoZVxuICogICAgICAgXCJibGFjayBsaXN0XCIgKDAuLjYsIDE0Li4yNSwgMjguLjMxKS5cbiAqICAgIGIpIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwcmludGFibGUgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byB0aGVcbiAqICAgICAgIFwid2hpdGUgbGlzdFwiICg5IHtUQUJ9LCAxMCB7TEZ9LCAxMyB7Q1J9LCAzMi4uMjU1KS5cbiAqIC0gQklOQVJZIG90aGVyd2lzZS5cbiAqIC0gVGhlIGZvbGxvd2luZyBwYXJ0aWFsbHktcG9ydGFibGUgY29udHJvbCBjaGFyYWN0ZXJzIGZvcm0gYVxuICogICBcImdyYXkgbGlzdFwiIHRoYXQgaXMgaWdub3JlZCBpbiB0aGlzIGRldGVjdGlvbiBhbGdvcml0aG06XG4gKiAgICg3IHtCRUx9LCA4IHtCU30sIDExIHtWVH0sIDEyIHtGRn0sIDI2IHtTVUJ9LCAyNyB7RVNDfSkuXG4gKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZHMgRnJlcSBvZiBkeW5fbHRyZWUgYXJlIHNldC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0X2RhdGFfdHlwZShzKSB7XG4gIC8qIGJsYWNrX21hc2sgaXMgdGhlIGJpdCBtYXNrIG9mIGJsYWNrLWxpc3RlZCBieXRlc1xuICAgKiBzZXQgYml0cyAwLi42LCAxNC4uMjUsIGFuZCAyOC4uMzFcbiAgICogMHhmM2ZmYzA3ZiA9IGJpbmFyeSAxMTExMDAxMTExMTExMTExMTEwMDAwMDAwMTExMTExMVxuICAgKi9cbiAgdmFyIGJsYWNrX21hc2sgPSAweGYzZmZjMDdmO1xuICB2YXIgbjtcblxuICAvKiBDaGVjayBmb3Igbm9uLXRleHR1YWwgKFwiYmxhY2stbGlzdGVkXCIpIGJ5dGVzLiAqL1xuICBmb3IgKG4gPSAwOyBuIDw9IDMxOyBuKyssIGJsYWNrX21hc2sgPj4+PSAxKSB7XG4gICAgaWYgKChibGFja19tYXNrICYgMSkgJiYgKHMuZHluX2x0cmVlW24gKiAyXS8qLkZyZXEqLyAhPT0gMCkpIHtcbiAgICAgIHJldHVybiBaX0JJTkFSWTtcbiAgICB9XG4gIH1cblxuICAvKiBDaGVjayBmb3IgdGV4dHVhbCAoXCJ3aGl0ZS1saXN0ZWRcIikgYnl0ZXMuICovXG4gIGlmIChzLmR5bl9sdHJlZVs5ICogMl0vKi5GcmVxKi8gIT09IDAgfHwgcy5keW5fbHRyZWVbMTAgKiAyXS8qLkZyZXEqLyAhPT0gMCB8fFxuICAgICAgcy5keW5fbHRyZWVbMTMgKiAyXS8qLkZyZXEqLyAhPT0gMCkge1xuICAgIHJldHVybiBaX1RFWFQ7XG4gIH1cbiAgZm9yIChuID0gMzI7IG4gPCBMSVRFUkFMUzsgbisrKSB7XG4gICAgaWYgKHMuZHluX2x0cmVlW24gKiAyXS8qLkZyZXEqLyAhPT0gMCkge1xuICAgICAgcmV0dXJuIFpfVEVYVDtcbiAgICB9XG4gIH1cblxuICAvKiBUaGVyZSBhcmUgbm8gXCJibGFjay1saXN0ZWRcIiBvciBcIndoaXRlLWxpc3RlZFwiIGJ5dGVzOlxuICAgKiB0aGlzIHN0cmVhbSBlaXRoZXIgaXMgZW1wdHkgb3IgaGFzIHRvbGVyYXRlZCAoXCJncmF5LWxpc3RlZFwiKSBieXRlcyBvbmx5LlxuICAgKi9cbiAgcmV0dXJuIFpfQklOQVJZO1xufVxuXG5cbnZhciBzdGF0aWNfaW5pdF9kb25lID0gZmFsc2U7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogSW5pdGlhbGl6ZSB0aGUgdHJlZSBkYXRhIHN0cnVjdHVyZXMgZm9yIGEgbmV3IHpsaWIgc3RyZWFtLlxuICovXG5mdW5jdGlvbiBfdHJfaW5pdChzKVxue1xuXG4gIGlmICghc3RhdGljX2luaXRfZG9uZSkge1xuICAgIHRyX3N0YXRpY19pbml0KCk7XG4gICAgc3RhdGljX2luaXRfZG9uZSA9IHRydWU7XG4gIH1cblxuICBzLmxfZGVzYyAgPSBuZXcgVHJlZURlc2Mocy5keW5fbHRyZWUsIHN0YXRpY19sX2Rlc2MpO1xuICBzLmRfZGVzYyAgPSBuZXcgVHJlZURlc2Mocy5keW5fZHRyZWUsIHN0YXRpY19kX2Rlc2MpO1xuICBzLmJsX2Rlc2MgPSBuZXcgVHJlZURlc2Mocy5ibF90cmVlLCBzdGF0aWNfYmxfZGVzYyk7XG5cbiAgcy5iaV9idWYgPSAwO1xuICBzLmJpX3ZhbGlkID0gMDtcblxuICAvKiBJbml0aWFsaXplIHRoZSBmaXJzdCBibG9jayBvZiB0aGUgZmlyc3QgZmlsZTogKi9cbiAgaW5pdF9ibG9jayhzKTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgYSBzdG9yZWQgYmxvY2tcbiAqL1xuZnVuY3Rpb24gX3RyX3N0b3JlZF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpXG4vL0RlZmxhdGVTdGF0ZSAqcztcbi8vY2hhcmYgKmJ1ZjsgICAgICAgLyogaW5wdXQgYmxvY2sgKi9cbi8vdWxnIHN0b3JlZF9sZW47ICAgLyogbGVuZ3RoIG9mIGlucHV0IGJsb2NrICovXG4vL2ludCBsYXN0OyAgICAgICAgIC8qIG9uZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGJsb2NrIGZvciBhIGZpbGUgKi9cbntcbiAgc2VuZF9iaXRzKHMsIChTVE9SRURfQkxPQ0sgPDwgMSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7ICAgIC8qIHNlbmQgYmxvY2sgdHlwZSAqL1xuICBjb3B5X2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgdHJ1ZSk7IC8qIHdpdGggaGVhZGVyICovXG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTZW5kIG9uZSBlbXB0eSBzdGF0aWMgYmxvY2sgdG8gZ2l2ZSBlbm91Z2ggbG9va2FoZWFkIGZvciBpbmZsYXRlLlxuICogVGhpcyB0YWtlcyAxMCBiaXRzLCBvZiB3aGljaCA3IG1heSByZW1haW4gaW4gdGhlIGJpdCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIF90cl9hbGlnbihzKSB7XG4gIHNlbmRfYml0cyhzLCBTVEFUSUNfVFJFRVMgPDwgMSwgMyk7XG4gIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIHN0YXRpY19sdHJlZSk7XG4gIGJpX2ZsdXNoKHMpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRGV0ZXJtaW5lIHRoZSBiZXN0IGVuY29kaW5nIGZvciB0aGUgY3VycmVudCBibG9jazogZHluYW1pYyB0cmVlcywgc3RhdGljXG4gKiB0cmVlcyBvciBzdG9yZSwgYW5kIG91dHB1dCB0aGUgZW5jb2RlZCBibG9jayB0byB0aGUgemlwIGZpbGUuXG4gKi9cbmZ1bmN0aW9uIF90cl9mbHVzaF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpXG4vL0RlZmxhdGVTdGF0ZSAqcztcbi8vY2hhcmYgKmJ1ZjsgICAgICAgLyogaW5wdXQgYmxvY2ssIG9yIE5VTEwgaWYgdG9vIG9sZCAqL1xuLy91bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi9cbi8vaW50IGxhc3Q7ICAgICAgICAgLyogb25lIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqL1xue1xuICB2YXIgb3B0X2xlbmIsIHN0YXRpY19sZW5iOyAgLyogb3B0X2xlbiBhbmQgc3RhdGljX2xlbiBpbiBieXRlcyAqL1xuICB2YXIgbWF4X2JsaW5kZXggPSAwOyAgICAgICAgLyogaW5kZXggb2YgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgb2Ygbm9uIHplcm8gZnJlcSAqL1xuXG4gIC8qIEJ1aWxkIHRoZSBIdWZmbWFuIHRyZWVzIHVubGVzcyBhIHN0b3JlZCBibG9jayBpcyBmb3JjZWQgKi9cbiAgaWYgKHMubGV2ZWwgPiAwKSB7XG5cbiAgICAvKiBDaGVjayBpZiB0aGUgZmlsZSBpcyBiaW5hcnkgb3IgdGV4dCAqL1xuICAgIGlmIChzLnN0cm0uZGF0YV90eXBlID09PSBaX1VOS05PV04pIHtcbiAgICAgIHMuc3RybS5kYXRhX3R5cGUgPSBkZXRlY3RfZGF0YV90eXBlKHMpO1xuICAgIH1cblxuICAgIC8qIENvbnN0cnVjdCB0aGUgbGl0ZXJhbCBhbmQgZGlzdGFuY2UgdHJlZXMgKi9cbiAgICBidWlsZF90cmVlKHMsIHMubF9kZXNjKTtcbiAgICAvLyBUcmFjZXYoKHN0ZGVyciwgXCJcXG5saXQgZGF0YTogZHluICVsZCwgc3RhdCAlbGRcIiwgcy0+b3B0X2xlbixcbiAgICAvLyAgICAgICAgcy0+c3RhdGljX2xlbikpO1xuXG4gICAgYnVpbGRfdHJlZShzLCBzLmRfZGVzYyk7XG4gICAgLy8gVHJhY2V2KChzdGRlcnIsIFwiXFxuZGlzdCBkYXRhOiBkeW4gJWxkLCBzdGF0ICVsZFwiLCBzLT5vcHRfbGVuLFxuICAgIC8vICAgICAgICBzLT5zdGF0aWNfbGVuKSk7XG4gICAgLyogQXQgdGhpcyBwb2ludCwgb3B0X2xlbiBhbmQgc3RhdGljX2xlbiBhcmUgdGhlIHRvdGFsIGJpdCBsZW5ndGhzIG9mXG4gICAgICogdGhlIGNvbXByZXNzZWQgYmxvY2sgZGF0YSwgZXhjbHVkaW5nIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9ucy5cbiAgICAgKi9cblxuICAgIC8qIEJ1aWxkIHRoZSBiaXQgbGVuZ3RoIHRyZWUgZm9yIHRoZSBhYm92ZSB0d28gdHJlZXMsIGFuZCBnZXQgdGhlIGluZGV4XG4gICAgICogaW4gYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0aCBjb2RlIHRvIHNlbmQuXG4gICAgICovXG4gICAgbWF4X2JsaW5kZXggPSBidWlsZF9ibF90cmVlKHMpO1xuXG4gICAgLyogRGV0ZXJtaW5lIHRoZSBiZXN0IGVuY29kaW5nLiBDb21wdXRlIHRoZSBibG9jayBsZW5ndGhzIGluIGJ5dGVzLiAqL1xuICAgIG9wdF9sZW5iID0gKHMub3B0X2xlbiArIDMgKyA3KSA+Pj4gMztcbiAgICBzdGF0aWNfbGVuYiA9IChzLnN0YXRpY19sZW4gKyAzICsgNykgPj4+IDM7XG5cbiAgICAvLyBUcmFjZXYoKHN0ZGVyciwgXCJcXG5vcHQgJWx1KCVsdSkgc3RhdCAlbHUoJWx1KSBzdG9yZWQgJWx1IGxpdCAldSBcIixcbiAgICAvLyAgICAgICAgb3B0X2xlbmIsIHMtPm9wdF9sZW4sIHN0YXRpY19sZW5iLCBzLT5zdGF0aWNfbGVuLCBzdG9yZWRfbGVuLFxuICAgIC8vICAgICAgICBzLT5sYXN0X2xpdCkpO1xuXG4gICAgaWYgKHN0YXRpY19sZW5iIDw9IG9wdF9sZW5iKSB7IG9wdF9sZW5iID0gc3RhdGljX2xlbmI7IH1cblxuICB9IGVsc2Uge1xuICAgIC8vIEFzc2VydChidWYgIT0gKGNoYXIqKTAsIFwibG9zdCBidWZcIik7XG4gICAgb3B0X2xlbmIgPSBzdGF0aWNfbGVuYiA9IHN0b3JlZF9sZW4gKyA1OyAvKiBmb3JjZSBhIHN0b3JlZCBibG9jayAqL1xuICB9XG5cbiAgaWYgKChzdG9yZWRfbGVuICsgNCA8PSBvcHRfbGVuYikgJiYgKGJ1ZiAhPT0gLTEpKSB7XG4gICAgLyogNDogdHdvIHdvcmRzIGZvciB0aGUgbGVuZ3RocyAqL1xuXG4gICAgLyogVGhlIHRlc3QgYnVmICE9IE5VTEwgaXMgb25seSBuZWNlc3NhcnkgaWYgTElUX0JVRlNJWkUgPiBXU0laRS5cbiAgICAgKiBPdGhlcndpc2Ugd2UgY2FuJ3QgaGF2ZSBwcm9jZXNzZWQgbW9yZSB0aGFuIFdTSVpFIGlucHV0IGJ5dGVzIHNpbmNlXG4gICAgICogdGhlIGxhc3QgYmxvY2sgZmx1c2gsIGJlY2F1c2UgY29tcHJlc3Npb24gd291bGQgaGF2ZSBiZWVuXG4gICAgICogc3VjY2Vzc2Z1bC4gSWYgTElUX0JVRlNJWkUgPD0gV1NJWkUsIGl0IGlzIG5ldmVyIHRvbyBsYXRlIHRvXG4gICAgICogdHJhbnNmb3JtIGEgYmxvY2sgaW50byBhIHN0b3JlZCBibG9jay5cbiAgICAgKi9cbiAgICBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCk7XG5cbiAgfSBlbHNlIGlmIChzLnN0cmF0ZWd5ID09PSBaX0ZJWEVEIHx8IHN0YXRpY19sZW5iID09PSBvcHRfbGVuYikge1xuXG4gICAgc2VuZF9iaXRzKHMsIChTVEFUSUNfVFJFRVMgPDwgMSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7XG4gICAgY29tcHJlc3NfYmxvY2socywgc3RhdGljX2x0cmVlLCBzdGF0aWNfZHRyZWUpO1xuXG4gIH0gZWxzZSB7XG4gICAgc2VuZF9iaXRzKHMsIChEWU5fVFJFRVMgPDwgMSkgKyAobGFzdCA/IDEgOiAwKSwgMyk7XG4gICAgc2VuZF9hbGxfdHJlZXMocywgcy5sX2Rlc2MubWF4X2NvZGUgKyAxLCBzLmRfZGVzYy5tYXhfY29kZSArIDEsIG1heF9ibGluZGV4ICsgMSk7XG4gICAgY29tcHJlc3NfYmxvY2socywgcy5keW5fbHRyZWUsIHMuZHluX2R0cmVlKTtcbiAgfVxuICAvLyBBc3NlcnQgKHMtPmNvbXByZXNzZWRfbGVuID09IHMtPmJpdHNfc2VudCwgXCJiYWQgY29tcHJlc3NlZCBzaXplXCIpO1xuICAvKiBUaGUgYWJvdmUgY2hlY2sgaXMgbWFkZSBtb2QgMl4zMiwgZm9yIGZpbGVzIGxhcmdlciB0aGFuIDUxMiBNQlxuICAgKiBhbmQgdUxvbmcgaW1wbGVtZW50ZWQgb24gMzIgYml0cy5cbiAgICovXG4gIGluaXRfYmxvY2socyk7XG5cbiAgaWYgKGxhc3QpIHtcbiAgICBiaV93aW5kdXAocyk7XG4gIH1cbiAgLy8gVHJhY2V2KChzdGRlcnIsXCJcXG5jb21wcmxlbiAlbHUoJWx1KSBcIiwgcy0+Y29tcHJlc3NlZF9sZW4+PjMsXG4gIC8vICAgICAgIHMtPmNvbXByZXNzZWRfbGVuLTcqbGFzdCkpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNhdmUgdGhlIG1hdGNoIGluZm8gYW5kIHRhbGx5IHRoZSBmcmVxdWVuY3kgY291bnRzLiBSZXR1cm4gdHJ1ZSBpZlxuICogdGhlIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkLlxuICovXG5mdW5jdGlvbiBfdHJfdGFsbHkocywgZGlzdCwgbGMpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgdW5zaWduZWQgZGlzdDsgIC8qIGRpc3RhbmNlIG9mIG1hdGNoZWQgc3RyaW5nICovXG4vLyAgICB1bnNpZ25lZCBsYzsgICAgLyogbWF0Y2ggbGVuZ3RoLU1JTl9NQVRDSCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdD09MCkgKi9cbntcbiAgLy92YXIgb3V0X2xlbmd0aCwgaW5fbGVuZ3RoLCBkY29kZTtcblxuICBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBzLmxhc3RfbGl0ICogMl0gICAgID0gKGRpc3QgPj4+IDgpICYgMHhmZjtcbiAgcy5wZW5kaW5nX2J1ZltzLmRfYnVmICsgcy5sYXN0X2xpdCAqIDIgKyAxXSA9IGRpc3QgJiAweGZmO1xuXG4gIHMucGVuZGluZ19idWZbcy5sX2J1ZiArIHMubGFzdF9saXRdID0gbGMgJiAweGZmO1xuICBzLmxhc3RfbGl0Kys7XG5cbiAgaWYgKGRpc3QgPT09IDApIHtcbiAgICAvKiBsYyBpcyB0aGUgdW5tYXRjaGVkIGNoYXIgKi9cbiAgICBzLmR5bl9sdHJlZVtsYyAqIDJdLyouRnJlcSovKys7XG4gIH0gZWxzZSB7XG4gICAgcy5tYXRjaGVzKys7XG4gICAgLyogSGVyZSwgbGMgaXMgdGhlIG1hdGNoIGxlbmd0aCAtIE1JTl9NQVRDSCAqL1xuICAgIGRpc3QtLTsgICAgICAgICAgICAgLyogZGlzdCA9IG1hdGNoIGRpc3RhbmNlIC0gMSAqL1xuICAgIC8vQXNzZXJ0KCh1c2gpZGlzdCA8ICh1c2gpTUFYX0RJU1QocykgJiZcbiAgICAvLyAgICAgICAodXNoKWxjIDw9ICh1c2gpKE1BWF9NQVRDSC1NSU5fTUFUQ0gpICYmXG4gICAgLy8gICAgICAgKHVzaClkX2NvZGUoZGlzdCkgPCAodXNoKURfQ09ERVMsICBcIl90cl90YWxseTogYmFkIG1hdGNoXCIpO1xuXG4gICAgcy5keW5fbHRyZWVbKF9sZW5ndGhfY29kZVtsY10gKyBMSVRFUkFMUyArIDEpICogMl0vKi5GcmVxKi8rKztcbiAgICBzLmR5bl9kdHJlZVtkX2NvZGUoZGlzdCkgKiAyXS8qLkZyZXEqLysrO1xuICB9XG5cbi8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVmYWlsdHMsXG4vLyBkb24ndCBlbmFibGUgaXQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5XG5cbi8vI2lmZGVmIFRSVU5DQVRFX0JMT0NLXG4vLyAgLyogVHJ5IHRvIGd1ZXNzIGlmIGl0IGlzIHByb2ZpdGFibGUgdG8gc3RvcCB0aGUgY3VycmVudCBibG9jayBoZXJlICovXG4vLyAgaWYgKChzLmxhc3RfbGl0ICYgMHgxZmZmKSA9PT0gMCAmJiBzLmxldmVsID4gMikge1xuLy8gICAgLyogQ29tcHV0ZSBhbiB1cHBlciBib3VuZCBmb3IgdGhlIGNvbXByZXNzZWQgbGVuZ3RoICovXG4vLyAgICBvdXRfbGVuZ3RoID0gcy5sYXN0X2xpdCo4O1xuLy8gICAgaW5fbGVuZ3RoID0gcy5zdHJzdGFydCAtIHMuYmxvY2tfc3RhcnQ7XG4vL1xuLy8gICAgZm9yIChkY29kZSA9IDA7IGRjb2RlIDwgRF9DT0RFUzsgZGNvZGUrKykge1xuLy8gICAgICBvdXRfbGVuZ3RoICs9IHMuZHluX2R0cmVlW2Rjb2RlKjJdLyouRnJlcSovICogKDUgKyBleHRyYV9kYml0c1tkY29kZV0pO1xuLy8gICAgfVxuLy8gICAgb3V0X2xlbmd0aCA+Pj49IDM7XG4vLyAgICAvL1RyYWNldigoc3RkZXJyLFwiXFxubGFzdF9saXQgJXUsIGluICVsZCwgb3V0IH4lbGQoJWxkJSUpIFwiLFxuLy8gICAgLy8gICAgICAgcy0+bGFzdF9saXQsIGluX2xlbmd0aCwgb3V0X2xlbmd0aCxcbi8vICAgIC8vICAgICAgIDEwMEwgLSBvdXRfbGVuZ3RoKjEwMEwvaW5fbGVuZ3RoKSk7XG4vLyAgICBpZiAocy5tYXRjaGVzIDwgKHMubGFzdF9saXQ+PjEpLyppbnQgLzIqLyAmJiBvdXRfbGVuZ3RoIDwgKGluX2xlbmd0aD4+MSkvKmludCAvMiovKSB7XG4vLyAgICAgIHJldHVybiB0cnVlO1xuLy8gICAgfVxuLy8gIH1cbi8vI2VuZGlmXG5cbiAgcmV0dXJuIChzLmxhc3RfbGl0ID09PSBzLmxpdF9idWZzaXplIC0gMSk7XG4gIC8qIFdlIGF2b2lkIGVxdWFsaXR5IHdpdGggbGl0X2J1ZnNpemUgYmVjYXVzZSBvZiB3cmFwYXJvdW5kIGF0IDY0S1xuICAgKiBvbiAxNiBiaXQgbWFjaGluZXMgYW5kIGJlY2F1c2Ugc3RvcmVkIGJsb2NrcyBhcmUgcmVzdHJpY3RlZCB0b1xuICAgKiA2NEstMSBieXRlcy5cbiAgICovXG59XG5cbmV4cG9ydHMuX3RyX2luaXQgID0gX3RyX2luaXQ7XG5leHBvcnRzLl90cl9zdG9yZWRfYmxvY2sgPSBfdHJfc3RvcmVkX2Jsb2NrO1xuZXhwb3J0cy5fdHJfZmx1c2hfYmxvY2sgID0gX3RyX2ZsdXNoX2Jsb2NrO1xuZXhwb3J0cy5fdHJfdGFsbHkgPSBfdHJfdGFsbHk7XG5leHBvcnRzLl90cl9hbGlnbiA9IF90cl9hbGlnbjtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG5mdW5jdGlvbiBaU3RyZWFtKCkge1xuICAvKiBuZXh0IGlucHV0IGJ5dGUgKi9cbiAgdGhpcy5pbnB1dCA9IG51bGw7IC8vIEpTIHNwZWNpZmljLCBiZWNhdXNlIHdlIGhhdmUgbm8gcG9pbnRlcnNcbiAgdGhpcy5uZXh0X2luID0gMDtcbiAgLyogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBpbnB1dCAqL1xuICB0aGlzLmF2YWlsX2luID0gMDtcbiAgLyogdG90YWwgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovXG4gIHRoaXMudG90YWxfaW4gPSAwO1xuICAvKiBuZXh0IG91dHB1dCBieXRlIHNob3VsZCBiZSBwdXQgdGhlcmUgKi9cbiAgdGhpcy5vdXRwdXQgPSBudWxsOyAvLyBKUyBzcGVjaWZpYywgYmVjYXVzZSB3ZSBoYXZlIG5vIHBvaW50ZXJzXG4gIHRoaXMubmV4dF9vdXQgPSAwO1xuICAvKiByZW1haW5pbmcgZnJlZSBzcGFjZSBhdCBvdXRwdXQgKi9cbiAgdGhpcy5hdmFpbF9vdXQgPSAwO1xuICAvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqL1xuICB0aGlzLnRvdGFsX291dCA9IDA7XG4gIC8qIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvciAqL1xuICB0aGlzLm1zZyA9ICcnLypaX05VTEwqLztcbiAgLyogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICovXG4gIHRoaXMuc3RhdGUgPSBudWxsO1xuICAvKiBiZXN0IGd1ZXNzIGFib3V0IHRoZSBkYXRhIHR5cGU6IGJpbmFyeSBvciB0ZXh0ICovXG4gIHRoaXMuZGF0YV90eXBlID0gMi8qWl9VTktOT1dOKi87XG4gIC8qIGFkbGVyMzIgdmFsdWUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhICovXG4gIHRoaXMuYWRsZXIgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFpTdHJlYW07XG4iLCJtb2R1bGUuZXhwb3J0cz17XCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xXCI6IFwiYWVzLTEyOC1lY2JcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuMlwiOiBcImFlcy0xMjgtY2JjXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjNcIjogXCJhZXMtMTI4LW9mYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40XCI6IFwiYWVzLTEyOC1jZmJcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjFcIjogXCJhZXMtMTkyLWVjYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMlwiOiBcImFlcy0xOTItY2JjXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzXCI6IFwiYWVzLTE5Mi1vZmJcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjRcIjogXCJhZXMtMTkyLWNmYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MVwiOiBcImFlcy0yNTYtZWNiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyXCI6IFwiYWVzLTI1Ni1jYmNcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDNcIjogXCJhZXMtMjU2LW9mYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NFwiOiBcImFlcy0yNTYtY2ZiXCJcbn0iLCIvLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L3NlbGYtc2lnbmVkL2Jsb2IvZ2gtcGFnZXMvbGliL2FzbjEuanNcbi8vIEZlZG9yLCB5b3UgYXJlIGFtYXppbmcuXG4ndXNlIHN0cmljdCdcblxudmFyIGFzbjEgPSByZXF1aXJlKCdhc24xLmpzJylcblxuZXhwb3J0cy5jZXJ0aWZpY2F0ZSA9IHJlcXVpcmUoJy4vY2VydGlmaWNhdGUnKVxuXG52YXIgUlNBUHJpdmF0ZUtleSA9IGFzbjEuZGVmaW5lKCdSU0FQcml2YXRlS2V5JywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgndmVyc2lvbicpLmludCgpLFxuICAgIHRoaXMua2V5KCdtb2R1bHVzJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3B1YmxpY0V4cG9uZW50JykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3ByaXZhdGVFeHBvbmVudCcpLmludCgpLFxuICAgIHRoaXMua2V5KCdwcmltZTEnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHJpbWUyJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ2V4cG9uZW50MScpLmludCgpLFxuICAgIHRoaXMua2V5KCdleHBvbmVudDInKS5pbnQoKSxcbiAgICB0aGlzLmtleSgnY29lZmZpY2llbnQnKS5pbnQoKVxuICApXG59KVxuZXhwb3J0cy5SU0FQcml2YXRlS2V5ID0gUlNBUHJpdmF0ZUtleVxuXG52YXIgUlNBUHVibGljS2V5ID0gYXNuMS5kZWZpbmUoJ1JTQVB1YmxpY0tleScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ21vZHVsdXMnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHVibGljRXhwb25lbnQnKS5pbnQoKVxuICApXG59KVxuZXhwb3J0cy5SU0FQdWJsaWNLZXkgPSBSU0FQdWJsaWNLZXlcblxudmFyIFB1YmxpY0tleSA9IGFzbjEuZGVmaW5lKCdTdWJqZWN0UHVibGljS2V5SW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSxcbiAgICB0aGlzLmtleSgnc3ViamVjdFB1YmxpY0tleScpLmJpdHN0cigpXG4gIClcbn0pXG5leHBvcnRzLlB1YmxpY0tleSA9IFB1YmxpY0tleVxuXG52YXIgQWxnb3JpdGhtSWRlbnRpZmllciA9IGFzbjEuZGVmaW5lKCdBbGdvcml0aG1JZGVudGlmaWVyJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgnYWxnb3JpdGhtJykub2JqaWQoKSxcbiAgICB0aGlzLmtleSgnbm9uZScpLm51bGxfKCkub3B0aW9uYWwoKSxcbiAgICB0aGlzLmtleSgnY3VydmUnKS5vYmppZCgpLm9wdGlvbmFsKCksXG4gICAgdGhpcy5rZXkoJ3BhcmFtcycpLnNlcSgpLm9iaihcbiAgICAgIHRoaXMua2V5KCdwJykuaW50KCksXG4gICAgICB0aGlzLmtleSgncScpLmludCgpLFxuICAgICAgdGhpcy5rZXkoJ2cnKS5pbnQoKVxuICAgICkub3B0aW9uYWwoKVxuICApXG59KVxuXG52YXIgUHJpdmF0ZUtleUluZm8gPSBhc24xLmRlZmluZSgnUHJpdmF0ZUtleUluZm8nLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd2ZXJzaW9uJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLnVzZShBbGdvcml0aG1JZGVudGlmaWVyKSxcbiAgICB0aGlzLmtleSgnc3ViamVjdFByaXZhdGVLZXknKS5vY3RzdHIoKVxuICApXG59KVxuZXhwb3J0cy5Qcml2YXRlS2V5ID0gUHJpdmF0ZUtleUluZm9cbnZhciBFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyA9IGFzbjEuZGVmaW5lKCdFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLnNlcSgpLm9iaihcbiAgICAgIHRoaXMua2V5KCdpZCcpLm9iamlkKCksXG4gICAgICB0aGlzLmtleSgnZGVjcnlwdCcpLnNlcSgpLm9iaihcbiAgICAgICAgdGhpcy5rZXkoJ2tkZScpLnNlcSgpLm9iaihcbiAgICAgICAgICB0aGlzLmtleSgnaWQnKS5vYmppZCgpLFxuICAgICAgICAgIHRoaXMua2V5KCdrZGVwYXJhbXMnKS5zZXEoKS5vYmooXG4gICAgICAgICAgICB0aGlzLmtleSgnc2FsdCcpLm9jdHN0cigpLFxuICAgICAgICAgICAgdGhpcy5rZXkoJ2l0ZXJzJykuaW50KClcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHRoaXMua2V5KCdjaXBoZXInKS5zZXEoKS5vYmooXG4gICAgICAgICAgdGhpcy5rZXkoJ2FsZ28nKS5vYmppZCgpLFxuICAgICAgICAgIHRoaXMua2V5KCdpdicpLm9jdHN0cigpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIHRoaXMua2V5KCdzdWJqZWN0UHJpdmF0ZUtleScpLm9jdHN0cigpXG4gIClcbn0pXG5cbmV4cG9ydHMuRW5jcnlwdGVkUHJpdmF0ZUtleSA9IEVuY3J5cHRlZFByaXZhdGVLZXlJbmZvXG5cbnZhciBEU0FQcml2YXRlS2V5ID0gYXNuMS5kZWZpbmUoJ0RTQVByaXZhdGVLZXknLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd2ZXJzaW9uJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3AnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncScpLmludCgpLFxuICAgIHRoaXMua2V5KCdnJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3B1Yl9rZXknKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHJpdl9rZXknKS5pbnQoKVxuICApXG59KVxuZXhwb3J0cy5EU0FQcml2YXRlS2V5ID0gRFNBUHJpdmF0ZUtleVxuXG5leHBvcnRzLkRTQXBhcmFtID0gYXNuMS5kZWZpbmUoJ0RTQXBhcmFtJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLmludCgpXG59KVxuXG52YXIgRUNQcml2YXRlS2V5ID0gYXNuMS5kZWZpbmUoJ0VDUHJpdmF0ZUtleScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3ZlcnNpb24nKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHJpdmF0ZUtleScpLm9jdHN0cigpLFxuICAgIHRoaXMua2V5KCdwYXJhbWV0ZXJzJykub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoRUNQYXJhbWV0ZXJzKSxcbiAgICB0aGlzLmtleSgncHVibGljS2V5Jykub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKVxuICApXG59KVxuZXhwb3J0cy5FQ1ByaXZhdGVLZXkgPSBFQ1ByaXZhdGVLZXlcblxudmFyIEVDUGFyYW1ldGVycyA9IGFzbjEuZGVmaW5lKCdFQ1BhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2hvaWNlKHtcbiAgICBuYW1lZEN1cnZlOiB0aGlzLm9iamlkKClcbiAgfSlcbn0pXG5cbmV4cG9ydHMuc2lnbmF0dXJlID0gYXNuMS5kZWZpbmUoJ3NpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3InKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncycpLmludCgpXG4gIClcbn0pXG4iLCIvLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9SYW50YW5lbi9ub2RlLWR0bHMvYmxvYi8yNWE3ZGM4NjFiZGEzOGNmZWFjOTNhNzIzNTAwZWVhNGYwYWMyZTg2L0NlcnRpZmljYXRlLmpzXG4vLyB0aGFua3MgdG8gQFJhbnRhbmVuXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYXNuID0gcmVxdWlyZSgnYXNuMS5qcycpXG5cbnZhciBUaW1lID0gYXNuLmRlZmluZSgnVGltZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jaG9pY2Uoe1xuICAgIHV0Y1RpbWU6IHRoaXMudXRjdGltZSgpLFxuICAgIGdlbmVyYWxUaW1lOiB0aGlzLmdlbnRpbWUoKVxuICB9KVxufSlcblxudmFyIEF0dHJpYnV0ZVR5cGVWYWx1ZSA9IGFzbi5kZWZpbmUoJ0F0dHJpYnV0ZVR5cGVWYWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3R5cGUnKS5vYmppZCgpLFxuICAgIHRoaXMua2V5KCd2YWx1ZScpLmFueSgpXG4gIClcbn0pXG5cbnZhciBBbGdvcml0aG1JZGVudGlmaWVyID0gYXNuLmRlZmluZSgnQWxnb3JpdGhtSWRlbnRpZmllcicsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2FsZ29yaXRobScpLm9iamlkKCksXG4gICAgdGhpcy5rZXkoJ3BhcmFtZXRlcnMnKS5vcHRpb25hbCgpXG4gIClcbn0pXG5cbnZhciBTdWJqZWN0UHVibGljS2V5SW5mbyA9IGFzbi5kZWZpbmUoJ1N1YmplY3RQdWJsaWNLZXlJbmZvJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgnYWxnb3JpdGhtJykudXNlKEFsZ29yaXRobUlkZW50aWZpZXIpLFxuICAgIHRoaXMua2V5KCdzdWJqZWN0UHVibGljS2V5JykuYml0c3RyKClcbiAgKVxufSlcblxudmFyIFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUgPSBhc24uZGVmaW5lKCdSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNldG9mKEF0dHJpYnV0ZVR5cGVWYWx1ZSlcbn0pXG5cbnZhciBSRE5TZXF1ZW5jZSA9IGFzbi5kZWZpbmUoJ1JETlNlcXVlbmNlJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcW9mKFJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUpXG59KVxuXG52YXIgTmFtZSA9IGFzbi5kZWZpbmUoJ05hbWUnLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuY2hvaWNlKHtcbiAgICByZG5TZXF1ZW5jZTogdGhpcy51c2UoUkROU2VxdWVuY2UpXG4gIH0pXG59KVxuXG52YXIgVmFsaWRpdHkgPSBhc24uZGVmaW5lKCdWYWxpZGl0eScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ25vdEJlZm9yZScpLnVzZShUaW1lKSxcbiAgICB0aGlzLmtleSgnbm90QWZ0ZXInKS51c2UoVGltZSlcbiAgKVxufSlcblxudmFyIEV4dGVuc2lvbiA9IGFzbi5kZWZpbmUoJ0V4dGVuc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ2V4dG5JRCcpLm9iamlkKCksXG4gICAgdGhpcy5rZXkoJ2NyaXRpY2FsJykuYm9vbCgpLmRlZihmYWxzZSksXG4gICAgdGhpcy5rZXkoJ2V4dG5WYWx1ZScpLm9jdHN0cigpXG4gIClcbn0pXG5cbnZhciBUQlNDZXJ0aWZpY2F0ZSA9IGFzbi5kZWZpbmUoJ1RCU0NlcnRpZmljYXRlJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgndmVyc2lvbicpLmV4cGxpY2l0KDApLmludCgpLFxuICAgIHRoaXMua2V5KCdzZXJpYWxOdW1iZXInKS5pbnQoKSxcbiAgICB0aGlzLmtleSgnc2lnbmF0dXJlJykudXNlKEFsZ29yaXRobUlkZW50aWZpZXIpLFxuICAgIHRoaXMua2V5KCdpc3N1ZXInKS51c2UoTmFtZSksXG4gICAgdGhpcy5rZXkoJ3ZhbGlkaXR5JykudXNlKFZhbGlkaXR5KSxcbiAgICB0aGlzLmtleSgnc3ViamVjdCcpLnVzZShOYW1lKSxcbiAgICB0aGlzLmtleSgnc3ViamVjdFB1YmxpY0tleUluZm8nKS51c2UoU3ViamVjdFB1YmxpY0tleUluZm8pLFxuICAgIHRoaXMua2V5KCdpc3N1ZXJVbmlxdWVJRCcpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksXG4gICAgdGhpcy5rZXkoJ3N1YmplY3RVbmlxdWVJRCcpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksXG4gICAgdGhpcy5rZXkoJ2V4dGVuc2lvbnMnKS5leHBsaWNpdCgzKS5zZXFvZihFeHRlbnNpb24pLm9wdGlvbmFsKClcbiAgKVxufSlcblxudmFyIFg1MDlDZXJ0aWZpY2F0ZSA9IGFzbi5kZWZpbmUoJ1g1MDlDZXJ0aWZpY2F0ZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3Ric0NlcnRpZmljYXRlJykudXNlKFRCU0NlcnRpZmljYXRlKSxcbiAgICB0aGlzLmtleSgnc2lnbmF0dXJlQWxnb3JpdGhtJykudXNlKEFsZ29yaXRobUlkZW50aWZpZXIpLFxuICAgIHRoaXMua2V5KCdzaWduYXR1cmVWYWx1ZScpLmJpdHN0cigpXG4gIClcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0gWDUwOUNlcnRpZmljYXRlXG4iLCIvLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FwYXRpbC9wZW1zdHJpcFxudmFyIGZpbmRQcm9jID0gL1Byb2MtVHlwZTogNCxFTkNSWVBURURcXG5cXHI/REVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVxcblxccj9cXG5cXHI/KFswLTlBLXpcXG5cXHJcXCtcXC9cXD1dKylcXG5cXHI/L21cbnZhciBzdGFydFJlZ2V4ID0gL14tLS0tLUJFR0lOICgoPzouKiBLRVkpfENFUlRJRklDQVRFKS0tLS0tXFxuL21cbnZhciBmdWxsUmVnZXggPSAvXi0tLS0tQkVHSU4gKCg/Oi4qIEtFWSl8Q0VSVElGSUNBVEUpLS0tLS1cXG5cXHI/KFswLTlBLXpcXG5cXHJcXCtcXC9cXD1dKylcXG5cXHI/LS0tLS1FTkQgXFwxLS0tLS0kL21cbnZhciBldnAgPSByZXF1aXJlKCdldnBfYnl0ZXN0b2tleScpXG52YXIgY2lwaGVycyA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktYWVzJylcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9rZXksIHBhc3N3b3JkKSB7XG4gIHZhciBrZXkgPSBva2V5LnRvU3RyaW5nKClcbiAgdmFyIG1hdGNoID0ga2V5Lm1hdGNoKGZpbmRQcm9jKVxuICB2YXIgZGVjcnlwdGVkXG4gIGlmICghbWF0Y2gpIHtcbiAgICB2YXIgbWF0Y2gyID0ga2V5Lm1hdGNoKGZ1bGxSZWdleClcbiAgICBkZWNyeXB0ZWQgPSBuZXcgQnVmZmVyKG1hdGNoMlsyXS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKSwgJ2Jhc2U2NCcpXG4gIH0gZWxzZSB7XG4gICAgdmFyIHN1aXRlID0gJ2FlcycgKyBtYXRjaFsxXVxuICAgIHZhciBpdiA9IG5ldyBCdWZmZXIobWF0Y2hbMl0sICdoZXgnKVxuICAgIHZhciBjaXBoZXJUZXh0ID0gbmV3IEJ1ZmZlcihtYXRjaFszXS5yZXBsYWNlKC9cXHI/XFxuL2csICcnKSwgJ2Jhc2U2NCcpXG4gICAgdmFyIGNpcGhlcktleSA9IGV2cChwYXNzd29yZCwgaXYuc2xpY2UoMCwgOCksIHBhcnNlSW50KG1hdGNoWzFdLCAxMCkpLmtleVxuICAgIHZhciBvdXQgPSBbXVxuICAgIHZhciBjaXBoZXIgPSBjaXBoZXJzLmNyZWF0ZURlY2lwaGVyaXYoc3VpdGUsIGNpcGhlcktleSwgaXYpXG4gICAgb3V0LnB1c2goY2lwaGVyLnVwZGF0ZShjaXBoZXJUZXh0KSlcbiAgICBvdXQucHVzaChjaXBoZXIuZmluYWwoKSlcbiAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KG91dClcbiAgfVxuICB2YXIgdGFnID0ga2V5Lm1hdGNoKHN0YXJ0UmVnZXgpWzFdXG4gIHJldHVybiB7XG4gICAgdGFnOiB0YWcsXG4gICAgZGF0YTogZGVjcnlwdGVkXG4gIH1cbn1cbiIsInZhciBhc24xID0gcmVxdWlyZSgnLi9hc24xJylcbnZhciBhZXNpZCA9IHJlcXVpcmUoJy4vYWVzaWQuanNvbicpXG52YXIgZml4UHJvYyA9IHJlcXVpcmUoJy4vZml4UHJvYycpXG52YXIgY2lwaGVycyA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktYWVzJylcbnZhciBjb21wYXQgPSByZXF1aXJlKCdwYmtkZjInKVxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZUtleXNcblxuZnVuY3Rpb24gcGFyc2VLZXlzIChidWZmZXIpIHtcbiAgdmFyIHBhc3N3b3JkXG4gIGlmICh0eXBlb2YgYnVmZmVyID09PSAnb2JqZWN0JyAmJiAhQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpIHtcbiAgICBwYXNzd29yZCA9IGJ1ZmZlci5wYXNzcGhyYXNlXG4gICAgYnVmZmVyID0gYnVmZmVyLmtleVxuICB9XG4gIGlmICh0eXBlb2YgYnVmZmVyID09PSAnc3RyaW5nJykge1xuICAgIGJ1ZmZlciA9IG5ldyBCdWZmZXIoYnVmZmVyKVxuICB9XG5cbiAgdmFyIHN0cmlwcGVkID0gZml4UHJvYyhidWZmZXIsIHBhc3N3b3JkKVxuXG4gIHZhciB0eXBlID0gc3RyaXBwZWQudGFnXG4gIHZhciBkYXRhID0gc3RyaXBwZWQuZGF0YVxuICB2YXIgc3VidHlwZSwgbmRhdGFcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnQ0VSVElGSUNBVEUnOlxuICAgICAgbmRhdGEgPSBhc24xLmNlcnRpZmljYXRlLmRlY29kZShkYXRhLCAnZGVyJykudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm9cbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICBjYXNlICdQVUJMSUMgS0VZJzpcbiAgICAgIGlmICghbmRhdGEpIHtcbiAgICAgICAgbmRhdGEgPSBhc24xLlB1YmxpY0tleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgICB9XG4gICAgICBzdWJ0eXBlID0gbmRhdGEuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCcuJylcbiAgICAgIHN3aXRjaCAoc3VidHlwZSkge1xuICAgICAgICBjYXNlICcxLjIuODQwLjExMzU0OS4xLjEuMSc6XG4gICAgICAgICAgcmV0dXJuIGFzbjEuUlNBUHVibGljS2V5LmRlY29kZShuZGF0YS5zdWJqZWN0UHVibGljS2V5LmRhdGEsICdkZXInKVxuICAgICAgICBjYXNlICcxLjIuODQwLjEwMDQ1LjIuMSc6XG4gICAgICAgICAgbmRhdGEuc3ViamVjdFByaXZhdGVLZXkgPSBuZGF0YS5zdWJqZWN0UHVibGljS2V5XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdlYycsXG4gICAgICAgICAgICBkYXRhOiBuZGF0YVxuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnMS4yLjg0MC4xMDA0MC40LjEnOlxuICAgICAgICAgIG5kYXRhLmFsZ29yaXRobS5wYXJhbXMucHViX2tleSA9IGFzbjEuRFNBcGFyYW0uZGVjb2RlKG5kYXRhLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwgJ2RlcicpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkc2EnLFxuICAgICAgICAgICAgZGF0YTogbmRhdGEuYWxnb3JpdGhtLnBhcmFtc1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGtleSBpZCAnICsgc3VidHlwZSlcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBrZXkgdHlwZSAnICsgdHlwZSlcbiAgICBjYXNlICdFTkNSWVBURUQgUFJJVkFURSBLRVknOlxuICAgICAgZGF0YSA9IGFzbjEuRW5jcnlwdGVkUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgICBkYXRhID0gZGVjcnlwdChkYXRhLCBwYXNzd29yZClcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgICBjYXNlICdQUklWQVRFIEtFWSc6XG4gICAgICBuZGF0YSA9IGFzbjEuUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgICBzdWJ0eXBlID0gbmRhdGEuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCcuJylcbiAgICAgIHN3aXRjaCAoc3VidHlwZSkge1xuICAgICAgICBjYXNlICcxLjIuODQwLjExMzU0OS4xLjEuMSc6XG4gICAgICAgICAgcmV0dXJuIGFzbjEuUlNBUHJpdmF0ZUtleS5kZWNvZGUobmRhdGEuc3ViamVjdFByaXZhdGVLZXksICdkZXInKVxuICAgICAgICBjYXNlICcxLjIuODQwLjEwMDQ1LjIuMSc6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnZlOiBuZGF0YS5hbGdvcml0aG0uY3VydmUsXG4gICAgICAgICAgICBwcml2YXRlS2V5OiBhc24xLkVDUHJpdmF0ZUtleS5kZWNvZGUobmRhdGEuc3ViamVjdFByaXZhdGVLZXksICdkZXInKS5wcml2YXRlS2V5XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICcxLjIuODQwLjEwMDQwLjQuMSc6XG4gICAgICAgICAgbmRhdGEuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleSA9IGFzbjEuRFNBcGFyYW0uZGVjb2RlKG5kYXRhLnN1YmplY3RQcml2YXRlS2V5LCAnZGVyJylcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2RzYScsXG4gICAgICAgICAgICBwYXJhbXM6IG5kYXRhLmFsZ29yaXRobS5wYXJhbXNcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcigndW5rbm93biBrZXkgaWQgJyArIHN1YnR5cGUpXG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24ga2V5IHR5cGUgJyArIHR5cGUpXG4gICAgY2FzZSAnUlNBIFBVQkxJQyBLRVknOlxuICAgICAgcmV0dXJuIGFzbjEuUlNBUHVibGljS2V5LmRlY29kZShkYXRhLCAnZGVyJylcbiAgICBjYXNlICdSU0EgUFJJVkFURSBLRVknOlxuICAgICAgcmV0dXJuIGFzbjEuUlNBUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgY2FzZSAnRFNBIFBSSVZBVEUgS0VZJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdkc2EnLFxuICAgICAgICBwYXJhbXM6IGFzbjEuRFNBUHJpdmF0ZUtleS5kZWNvZGUoZGF0YSwgJ2RlcicpXG4gICAgICB9XG4gICAgY2FzZSAnRUMgUFJJVkFURSBLRVknOlxuICAgICAgZGF0YSA9IGFzbjEuRUNQcml2YXRlS2V5LmRlY29kZShkYXRhLCAnZGVyJylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnZlOiBkYXRhLnBhcmFtZXRlcnMudmFsdWUsXG4gICAgICAgIHByaXZhdGVLZXk6IGRhdGEucHJpdmF0ZUtleVxuICAgICAgfVxuICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcigndW5rbm93biBrZXkgdHlwZSAnICsgdHlwZSlcbiAgfVxufVxucGFyc2VLZXlzLnNpZ25hdHVyZSA9IGFzbjEuc2lnbmF0dXJlXG5mdW5jdGlvbiBkZWNyeXB0IChkYXRhLCBwYXNzd29yZCkge1xuICB2YXIgc2FsdCA9IGRhdGEuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0XG4gIHZhciBpdGVycyA9IHBhcnNlSW50KGRhdGEuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLCAxMClcbiAgdmFyIGFsZ28gPSBhZXNpZFtkYXRhLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oJy4nKV1cbiAgdmFyIGl2ID0gZGF0YS5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXZcbiAgdmFyIGNpcGhlclRleHQgPSBkYXRhLnN1YmplY3RQcml2YXRlS2V5XG4gIHZhciBrZXlsZW4gPSBwYXJzZUludChhbGdvLnNwbGl0KCctJylbMV0sIDEwKSAvIDhcbiAgdmFyIGtleSA9IGNvbXBhdC5wYmtkZjJTeW5jKHBhc3N3b3JkLCBzYWx0LCBpdGVycywga2V5bGVuKVxuICB2YXIgY2lwaGVyID0gY2lwaGVycy5jcmVhdGVEZWNpcGhlcml2KGFsZ28sIGtleSwgaXYpXG4gIHZhciBvdXQgPSBbXVxuICBvdXQucHVzaChjaXBoZXIudXBkYXRlKGNpcGhlclRleHQpKVxuICBvdXQucHVzaChjaXBoZXIuZmluYWwoKSlcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQob3V0KVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0cy5QYXJzZXIgPSByZXF1aXJlKCcuL2xpYi90cmVlX2NvbnN0cnVjdGlvbi9wYXJzZXInKTtcclxuZXhwb3J0cy5TaW1wbGVBcGlQYXJzZXIgPSByZXF1aXJlKCcuL2xpYi9zaW1wbGVfYXBpL3NpbXBsZV9hcGlfcGFyc2VyJyk7XHJcbmV4cG9ydHMuVHJlZVNlcmlhbGl6ZXIgPVxyXG5leHBvcnRzLlNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL2xpYi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6ZXInKTtcclxuZXhwb3J0cy5Kc0RvbVBhcnNlciA9IHJlcXVpcmUoJy4vbGliL2pzZG9tL2pzZG9tX3BhcnNlcicpO1xyXG5cclxuZXhwb3J0cy5UcmVlQWRhcHRlcnMgPSB7XHJcbiAgICBkZWZhdWx0OiByZXF1aXJlKCcuL2xpYi90cmVlX2FkYXB0ZXJzL2RlZmF1bHQnKSxcclxuICAgIGh0bWxwYXJzZXIyOiByZXF1aXJlKCcuL2xpYi90cmVlX2FkYXB0ZXJzL2h0bWxwYXJzZXIyJylcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy9Db25zdFxyXG52YXIgVkFMSURfRE9DVFlQRV9OQU1FID0gJ2h0bWwnLFxyXG4gICAgUVVJUktTX01PREVfU1lTVEVNX0lEID0gJ2h0dHA6Ly93d3cuaWJtLmNvbS9kYXRhL2R0ZC92MTEvaWJteGh0bWwxLXRyYW5zaXRpb25hbC5kdGQnLFxyXG4gICAgUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xyXG4gICAgICAgIFwiKy8vc2lsbWFyaWwvL2R0ZCBodG1sIHBybyB2MHIxMSAxOTk3MDEwMS8vZW5cIixcclxuICAgICAgICBcIi0vL2FkdmFzb2Z0IGx0ZC8vZHRkIGh0bWwgMy4wIGFzd2VkaXQgKyBleHRlbnNpb25zLy9lblwiLFxyXG4gICAgICAgIFwiLS8vYXMvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBsZXZlbCAxLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDIvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDEvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDIvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0Ly9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4xZS8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMC8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMC8vZW4vL1wiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy4yIGZpbmFsLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy4yLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAwLy9lbi8vMi4wXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMS8vZW4vLzIuMFwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMi8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDIvL2VuLy8yLjBcIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAzLy9lbi8vMy4wXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAwLy9lbi8vMi4wXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMS8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy9lbi8vMi4wXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMi8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAyLy9lbi8vMi4wXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAzLy9lbi8vMy4wXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuLy8yLjBcIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdC8vZW4vLzMuMFwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW4vLzIuMFwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwvL2VuLy8zLjBcIixcclxuICAgICAgICBcIi0vL21ldHJpdXMvL2R0ZCBtZXRyaXVzIHByZXNlbnRhdGlvbmFsLy9lblwiLFxyXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwgc3RyaWN0Ly9lblwiLFxyXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwvL2VuXCIsXHJcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAyLjAgdGFibGVzLy9lblwiLFxyXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwgc3RyaWN0Ly9lblwiLFxyXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwvL2VuXCIsXHJcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAzLjAgdGFibGVzLy9lblwiLFxyXG4gICAgICAgIFwiLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBodG1sLy9lblwiLFxyXG4gICAgICAgIFwiLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBzdHJpY3QgaHRtbC8vZW5cIixcclxuICAgICAgICBcIi0vL28ncmVpbGx5IGFuZCBhc3NvY2lhdGVzLy9kdGQgaHRtbCAyLjAvL2VuXCIsXHJcbiAgICAgICAgXCItLy9vJ3JlaWxseSBhbmQgYXNzb2NpYXRlcy8vZHRkIGh0bWwgZXh0ZW5kZWQgMS4wLy9lblwiLFxyXG4gICAgICAgIFwiLS8vc3B5Z2xhc3MvL2R0ZCBodG1sIDIuMCBleHRlbmRlZC8vZW5cIixcclxuICAgICAgICBcIi0vL3NxLy9kdGQgaHRtbCAyLjAgaG90bWV0YWwgKyBleHRlbnNpb25zLy9lblwiLFxyXG4gICAgICAgIFwiLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgaHRtbC8vZW5cIixcclxuICAgICAgICBcIi0vL3N1biBtaWNyb3N5c3RlbXMgY29ycC4vL2R0ZCBob3RqYXZhIHN0cmljdCBodG1sLy9lblwiLFxyXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzIDE5OTUtMDMtMjQvL2VuXCIsXHJcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMiBkcmFmdC8vZW5cIixcclxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgMy4yIGZpbmFsLy9lblwiLFxyXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzLjIvL2VuXCIsXHJcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMnMgZHJhZnQvL2VuXCIsXHJcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDQuMCBmcmFtZXNldC8vZW5cIixcclxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC8vZW5cIixcclxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDE5OTYwNzEyLy9lblwiLFxyXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCBleHBlcmltZW50YWwgOTcwNDIxLy9lblwiLFxyXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgdzMgaHRtbC8vZW5cIixcclxuICAgICAgICBcIi0vL3czby8vZHRkIHczIGh0bWwgMy4wLy9lblwiLFxyXG4gICAgICAgIFwiLS8vdzNvLy9kdGQgdzMgaHRtbCAzLjAvL2VuLy9cIixcclxuICAgICAgICBcIi0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sIDIuMC8vZW5cIixcclxuICAgICAgICBcIi0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sLy9lblwiXHJcbiAgICBdLFxyXG4gICAgUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyA9IFtcclxuICAgICAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIGZyYW1lc2V0Ly8nLFxyXG4gICAgICAgICctLy93M2MvL2R0ZCBodG1sIDQuMDEgdHJhbnNpdGlvbmFsLy8nXHJcbiAgICBdLFxyXG4gICAgUVVJUktTX01PREVfUFVCTElDX0lEUyA9IFtcclxuICAgICAgICAnLS8vdzNvLy9kdGQgdzMgaHRtbCBzdHJpY3QgMy4wLy9lbi8vJyxcclxuICAgICAgICAnLS93M2MvZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC9lbicsXHJcbiAgICAgICAgJ2h0bWwnXHJcbiAgICBdO1xyXG5cclxuXHJcbi8vVXRpbHNcclxuZnVuY3Rpb24gZW5xdW90ZURvY3R5cGVJZChpZCkge1xyXG4gICAgdmFyIHF1b3RlID0gaWQuaW5kZXhPZignXCInKSAhPT0gLTEgPyAnXFwnJyA6ICdcIic7XHJcblxyXG4gICAgcmV0dXJuIHF1b3RlICsgaWQgKyBxdW90ZTtcclxufVxyXG5cclxuXHJcbi8vQVBJXHJcbmV4cG9ydHMuaXNRdWlya3MgPSBmdW5jdGlvbiAobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XHJcbiAgICBpZiAobmFtZSAhPT0gVkFMSURfRE9DVFlQRV9OQU1FKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGlmIChzeXN0ZW1JZCAmJiBzeXN0ZW1JZC50b0xvd2VyQ2FzZSgpID09PSBRVUlSS1NfTU9ERV9TWVNURU1fSUQpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgaWYgKHB1YmxpY0lkICE9PSBudWxsKSB7XHJcbiAgICAgICAgcHVibGljSWQgPSBwdWJsaWNJZC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiAoUVVJUktTX01PREVfUFVCTElDX0lEUy5pbmRleE9mKHB1YmxpY0lkKSA+IC0xKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIHByZWZpeGVzID0gUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTO1xyXG5cclxuICAgICAgICBpZiAoc3lzdGVtSWQgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHByZWZpeGVzID0gcHJlZml4ZXMuY29uY2F0KFFVSVJLU19NT0RFX05PX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVMpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZWZpeGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChwdWJsaWNJZC5pbmRleE9mKHByZWZpeGVzW2ldKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn07XHJcblxyXG5leHBvcnRzLnNlcmlhbGl6ZUNvbnRlbnQgPSBmdW5jdGlvbiAobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XHJcbiAgICB2YXIgc3RyID0gJyFET0NUWVBFICcgKyBuYW1lO1xyXG5cclxuICAgIGlmIChwdWJsaWNJZCAhPT0gbnVsbClcclxuICAgICAgICBzdHIgKz0gJyBQVUJMSUMgJyArIGVucXVvdGVEb2N0eXBlSWQocHVibGljSWQpO1xyXG5cclxuICAgIGVsc2UgaWYgKHN5c3RlbUlkICE9PSBudWxsKVxyXG4gICAgICAgIHN0ciArPSAnIFNZU1RFTSc7XHJcblxyXG4gICAgaWYgKHN5c3RlbUlkICE9PSBudWxsKVxyXG4gICAgICAgIHN0ciArPSAnICcgKyBlbnF1b3RlRG9jdHlwZUlkKHN5c3RlbUlkKTtcclxuXHJcbiAgICByZXR1cm4gc3RyO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxyXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4vaHRtbCcpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gSFRNTC5UQUdfTkFNRVMsXHJcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUyxcclxuICAgIEFUVFJTID0gSFRNTC5BVFRSUztcclxuXHJcblxyXG4vL01JTUUgdHlwZXNcclxudmFyIE1JTUVfVFlQRVMgPSB7XHJcbiAgICBURVhUX0hUTUw6ICd0ZXh0L2h0bWwnLFxyXG4gICAgQVBQTElDQVRJT05fWE1MOiAnYXBwbGljYXRpb24veGh0bWwreG1sJ1xyXG59O1xyXG5cclxuLy9BdHRyaWJ1dGVzXHJcbnZhciBERUZJTklUSU9OX1VSTF9BVFRSID0gJ2RlZmluaXRpb251cmwnLFxyXG4gICAgQURKVVNURURfREVGSU5JVElPTl9VUkxfQVRUUiA9ICdkZWZpbml0aW9uVVJMJyxcclxuICAgIFNWR19BVFRSU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICAgICAnYXR0cmlidXRlbmFtZSc6ICdhdHRyaWJ1dGVOYW1lJyxcclxuICAgICAgICAnYXR0cmlidXRldHlwZSc6ICdhdHRyaWJ1dGVUeXBlJyxcclxuICAgICAgICAnYmFzZWZyZXF1ZW5jeSc6ICdiYXNlRnJlcXVlbmN5JyxcclxuICAgICAgICAnYmFzZXByb2ZpbGUnOiAnYmFzZVByb2ZpbGUnLFxyXG4gICAgICAgICdjYWxjbW9kZSc6ICdjYWxjTW9kZScsXHJcbiAgICAgICAgJ2NsaXBwYXRodW5pdHMnOiAnY2xpcFBhdGhVbml0cycsXHJcbiAgICAgICAgJ2NvbnRlbnRzY3JpcHR0eXBlJzogJ2NvbnRlbnRTY3JpcHRUeXBlJyxcclxuICAgICAgICAnY29udGVudHN0eWxldHlwZSc6ICdjb250ZW50U3R5bGVUeXBlJyxcclxuICAgICAgICAnZGlmZnVzZWNvbnN0YW50JzogJ2RpZmZ1c2VDb25zdGFudCcsXHJcbiAgICAgICAgJ2VkZ2Vtb2RlJzogJ2VkZ2VNb2RlJyxcclxuICAgICAgICAnZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZCc6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcclxuICAgICAgICAnZmlsdGVycmVzJzogJ2ZpbHRlclJlcycsXHJcbiAgICAgICAgJ2ZpbHRlcnVuaXRzJzogJ2ZpbHRlclVuaXRzJyxcclxuICAgICAgICAnZ2x5cGhyZWYnOiAnZ2x5cGhSZWYnLFxyXG4gICAgICAgICdncmFkaWVudHRyYW5zZm9ybSc6ICdncmFkaWVudFRyYW5zZm9ybScsXHJcbiAgICAgICAgJ2dyYWRpZW50dW5pdHMnOiAnZ3JhZGllbnRVbml0cycsXHJcbiAgICAgICAgJ2tlcm5lbG1hdHJpeCc6ICdrZXJuZWxNYXRyaXgnLFxyXG4gICAgICAgICdrZXJuZWx1bml0bGVuZ3RoJzogJ2tlcm5lbFVuaXRMZW5ndGgnLFxyXG4gICAgICAgICdrZXlwb2ludHMnOiAna2V5UG9pbnRzJyxcclxuICAgICAgICAna2V5c3BsaW5lcyc6ICdrZXlTcGxpbmVzJyxcclxuICAgICAgICAna2V5dGltZXMnOiAna2V5VGltZXMnLFxyXG4gICAgICAgICdsZW5ndGhhZGp1c3QnOiAnbGVuZ3RoQWRqdXN0JyxcclxuICAgICAgICAnbGltaXRpbmdjb25lYW5nbGUnOiAnbGltaXRpbmdDb25lQW5nbGUnLFxyXG4gICAgICAgICdtYXJrZXJoZWlnaHQnOiAnbWFya2VySGVpZ2h0JyxcclxuICAgICAgICAnbWFya2VydW5pdHMnOiAnbWFya2VyVW5pdHMnLFxyXG4gICAgICAgICdtYXJrZXJ3aWR0aCc6ICdtYXJrZXJXaWR0aCcsXHJcbiAgICAgICAgJ21hc2tjb250ZW50dW5pdHMnOiAnbWFza0NvbnRlbnRVbml0cycsXHJcbiAgICAgICAgJ21hc2t1bml0cyc6ICdtYXNrVW5pdHMnLFxyXG4gICAgICAgICdudW1vY3RhdmVzJzogJ251bU9jdGF2ZXMnLFxyXG4gICAgICAgICdwYXRobGVuZ3RoJzogJ3BhdGhMZW5ndGgnLFxyXG4gICAgICAgICdwYXR0ZXJuY29udGVudHVuaXRzJzogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxyXG4gICAgICAgICdwYXR0ZXJudHJhbnNmb3JtJzogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxyXG4gICAgICAgICdwYXR0ZXJudW5pdHMnOiAncGF0dGVyblVuaXRzJyxcclxuICAgICAgICAncG9pbnRzYXR4JzogJ3BvaW50c0F0WCcsXHJcbiAgICAgICAgJ3BvaW50c2F0eSc6ICdwb2ludHNBdFknLFxyXG4gICAgICAgICdwb2ludHNhdHonOiAncG9pbnRzQXRaJyxcclxuICAgICAgICAncHJlc2VydmVhbHBoYSc6ICdwcmVzZXJ2ZUFscGhhJyxcclxuICAgICAgICAncHJlc2VydmVhc3BlY3RyYXRpbyc6ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcclxuICAgICAgICAncHJpbWl0aXZldW5pdHMnOiAncHJpbWl0aXZlVW5pdHMnLFxyXG4gICAgICAgICdyZWZ4JzogJ3JlZlgnLFxyXG4gICAgICAgICdyZWZ5JzogJ3JlZlknLFxyXG4gICAgICAgICdyZXBlYXRjb3VudCc6ICdyZXBlYXRDb3VudCcsXHJcbiAgICAgICAgJ3JlcGVhdGR1cic6ICdyZXBlYXREdXInLFxyXG4gICAgICAgICdyZXF1aXJlZGV4dGVuc2lvbnMnOiAncmVxdWlyZWRFeHRlbnNpb25zJyxcclxuICAgICAgICAncmVxdWlyZWRmZWF0dXJlcyc6ICdyZXF1aXJlZEZlYXR1cmVzJyxcclxuICAgICAgICAnc3BlY3VsYXJjb25zdGFudCc6ICdzcGVjdWxhckNvbnN0YW50JyxcclxuICAgICAgICAnc3BlY3VsYXJleHBvbmVudCc6ICdzcGVjdWxhckV4cG9uZW50JyxcclxuICAgICAgICAnc3ByZWFkbWV0aG9kJzogJ3NwcmVhZE1ldGhvZCcsXHJcbiAgICAgICAgJ3N0YXJ0b2Zmc2V0JzogJ3N0YXJ0T2Zmc2V0JyxcclxuICAgICAgICAnc3RkZGV2aWF0aW9uJzogJ3N0ZERldmlhdGlvbicsXHJcbiAgICAgICAgJ3N0aXRjaHRpbGVzJzogJ3N0aXRjaFRpbGVzJyxcclxuICAgICAgICAnc3VyZmFjZXNjYWxlJzogJ3N1cmZhY2VTY2FsZScsXHJcbiAgICAgICAgJ3N5c3RlbWxhbmd1YWdlJzogJ3N5c3RlbUxhbmd1YWdlJyxcclxuICAgICAgICAndGFibGV2YWx1ZXMnOiAndGFibGVWYWx1ZXMnLFxyXG4gICAgICAgICd0YXJnZXR4JzogJ3RhcmdldFgnLFxyXG4gICAgICAgICd0YXJnZXR5JzogJ3RhcmdldFknLFxyXG4gICAgICAgICd0ZXh0bGVuZ3RoJzogJ3RleHRMZW5ndGgnLFxyXG4gICAgICAgICd2aWV3Ym94JzogJ3ZpZXdCb3gnLFxyXG4gICAgICAgICd2aWV3dGFyZ2V0JzogJ3ZpZXdUYXJnZXQnLFxyXG4gICAgICAgICd4Y2hhbm5lbHNlbGVjdG9yJzogJ3hDaGFubmVsU2VsZWN0b3InLFxyXG4gICAgICAgICd5Y2hhbm5lbHNlbGVjdG9yJzogJ3lDaGFubmVsU2VsZWN0b3InLFxyXG4gICAgICAgICd6b29tYW5kcGFuJzogJ3pvb21BbmRQYW4nXHJcbiAgICB9LFxyXG4gICAgWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQID0ge1xyXG4gICAgICAgICd4bGluazphY3R1YXRlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2FjdHVhdGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6YXJjcm9sZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdhcmNyb2xlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOmhyZWYnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAnaHJlZicsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazpyb2xlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3JvbGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6c2hvdyc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdzaG93JywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnRpdGxlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3RpdGxlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnR5cGUnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAndHlwZScsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bWw6YmFzZSc6IHtwcmVmaXg6ICd4bWwnLCBuYW1lOiAnYmFzZScsIG5hbWVzcGFjZTogTlMuWE1MfSxcclxuICAgICAgICAneG1sOmxhbmcnOiB7cHJlZml4OiAneG1sJywgbmFtZTogJ2xhbmcnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbDpzcGFjZSc6IHtwcmVmaXg6ICd4bWwnLCBuYW1lOiAnc3BhY2UnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbG5zJzoge3ByZWZpeDogJycsIG5hbWU6ICd4bWxucycsIG5hbWVzcGFjZTogTlMuWE1MTlN9LFxyXG4gICAgICAgICd4bWxuczp4bGluayc6IHtwcmVmaXg6ICd4bWxucycsIG5hbWU6ICd4bGluaycsIG5hbWVzcGFjZTogTlMuWE1MTlN9XHJcblxyXG4gICAgfTtcclxuXHJcbi8vU1ZHIHRhZyBuYW1lcyBhZGp1c3RtZW50IG1hcFxyXG52YXIgU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICdhbHRnbHlwaCc6ICdhbHRHbHlwaCcsXHJcbiAgICAnYWx0Z2x5cGhkZWYnOiAnYWx0R2x5cGhEZWYnLFxyXG4gICAgJ2FsdGdseXBoaXRlbSc6ICdhbHRHbHlwaEl0ZW0nLFxyXG4gICAgJ2FuaW1hdGVjb2xvcic6ICdhbmltYXRlQ29sb3InLFxyXG4gICAgJ2FuaW1hdGVtb3Rpb24nOiAnYW5pbWF0ZU1vdGlvbicsXHJcbiAgICAnYW5pbWF0ZXRyYW5zZm9ybSc6ICdhbmltYXRlVHJhbnNmb3JtJyxcclxuICAgICdjbGlwcGF0aCc6ICdjbGlwUGF0aCcsXHJcbiAgICAnZmVibGVuZCc6ICdmZUJsZW5kJyxcclxuICAgICdmZWNvbG9ybWF0cml4JzogJ2ZlQ29sb3JNYXRyaXgnLFxyXG4gICAgJ2ZlY29tcG9uZW50dHJhbnNmZXInOiAnZmVDb21wb25lbnRUcmFuc2ZlcicsXHJcbiAgICAnZmVjb21wb3NpdGUnOiAnZmVDb21wb3NpdGUnLFxyXG4gICAgJ2ZlY29udm9sdmVtYXRyaXgnOiAnZmVDb252b2x2ZU1hdHJpeCcsXHJcbiAgICAnZmVkaWZmdXNlbGlnaHRpbmcnOiAnZmVEaWZmdXNlTGlnaHRpbmcnLFxyXG4gICAgJ2ZlZGlzcGxhY2VtZW50bWFwJzogJ2ZlRGlzcGxhY2VtZW50TWFwJyxcclxuICAgICdmZWRpc3RhbnRsaWdodCc6ICdmZURpc3RhbnRMaWdodCcsXHJcbiAgICAnZmVmbG9vZCc6ICdmZUZsb29kJyxcclxuICAgICdmZWZ1bmNhJzogJ2ZlRnVuY0EnLFxyXG4gICAgJ2ZlZnVuY2InOiAnZmVGdW5jQicsXHJcbiAgICAnZmVmdW5jZyc6ICdmZUZ1bmNHJyxcclxuICAgICdmZWZ1bmNyJzogJ2ZlRnVuY1InLFxyXG4gICAgJ2ZlZ2F1c3NpYW5ibHVyJzogJ2ZlR2F1c3NpYW5CbHVyJyxcclxuICAgICdmZWltYWdlJzogJ2ZlSW1hZ2UnLFxyXG4gICAgJ2ZlbWVyZ2UnOiAnZmVNZXJnZScsXHJcbiAgICAnZmVtZXJnZW5vZGUnOiAnZmVNZXJnZU5vZGUnLFxyXG4gICAgJ2ZlbW9ycGhvbG9neSc6ICdmZU1vcnBob2xvZ3knLFxyXG4gICAgJ2Zlb2Zmc2V0JzogJ2ZlT2Zmc2V0JyxcclxuICAgICdmZXBvaW50bGlnaHQnOiAnZmVQb2ludExpZ2h0JyxcclxuICAgICdmZXNwZWN1bGFybGlnaHRpbmcnOiAnZmVTcGVjdWxhckxpZ2h0aW5nJyxcclxuICAgICdmZXNwb3RsaWdodCc6ICdmZVNwb3RMaWdodCcsXHJcbiAgICAnZmV0aWxlJzogJ2ZlVGlsZScsXHJcbiAgICAnZmV0dXJidWxlbmNlJzogJ2ZlVHVyYnVsZW5jZScsXHJcbiAgICAnZm9yZWlnbm9iamVjdCc6ICdmb3JlaWduT2JqZWN0JyxcclxuICAgICdnbHlwaHJlZic6ICdnbHlwaFJlZicsXHJcbiAgICAnbGluZWFyZ3JhZGllbnQnOiAnbGluZWFyR3JhZGllbnQnLFxyXG4gICAgJ3JhZGlhbGdyYWRpZW50JzogJ3JhZGlhbEdyYWRpZW50JyxcclxuICAgICd0ZXh0cGF0aCc6ICd0ZXh0UGF0aCdcclxufTtcclxuXHJcbi8vVGFncyB0aGF0IGNhdXNlcyBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XHJcbnZhciBFWElUU19GT1JFSUdOX0NPTlRFTlQgPSB7fTtcclxuXHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQklHXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJMT0NLUVVPVEVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQk9EWV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5CUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5DRU5URVJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQ09ERV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5ERF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5ESVZdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRExdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRFRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRU1dID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRU1CRURdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDFdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDNdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDZdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSEVBRF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5IUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5JXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLklNR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5MSV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5MSVNUSU5HXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk1FTlVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTUVUQV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5OT0JSXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk9MXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlBdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuUFJFXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlJVQlldID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TTUFMTF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TUEFOXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNUUk9OR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TVFJJS0VdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU1VCXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNVUF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5UQUJMRV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5UVF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5VXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlVMXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlZBUl0gPSB0cnVlO1xyXG5cclxuLy9DaGVjayBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XHJcbmV4cG9ydHMuY2F1c2VzRXhpdCA9IGZ1bmN0aW9uIChzdGFydFRhZ1Rva2VuKSB7XHJcbiAgICB2YXIgdG4gPSBzdGFydFRhZ1Rva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkZPTlQgJiYgKFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuQ09MT1IpICE9PSBudWxsIHx8XHJcbiAgICAgICAgVG9rZW5pemVyLmdldFRva2VuQXR0cihzdGFydFRhZ1Rva2VuLCBBVFRSUy5TSVpFKSAhPT0gbnVsbCB8fFxyXG4gICAgICAgIFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuRkFDRSkgIT09IG51bGwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEVYSVRTX0ZPUkVJR05fQ09OVEVOVFt0bl07XHJcbn07XHJcblxyXG4vL1Rva2VuIGFkanVzdG1lbnRzXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0b2tlbi5hdHRyc1tpXS5uYW1lID09PSBERUZJTklUSU9OX1VSTF9BVFRSKSB7XHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBBREpVU1RFRF9ERUZJTklUSU9OX1VSTF9BVFRSO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmFkanVzdFRva2VuU1ZHQXR0cnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYWRqdXN0ZWRBdHRyTmFtZSA9IFNWR19BVFRSU19BREpVU1RNRU5UX01BUFt0b2tlbi5hdHRyc1tpXS5uYW1lXTtcclxuXHJcbiAgICAgICAgaWYgKGFkanVzdGVkQXR0ck5hbWUpXHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBhZGp1c3RlZEF0dHJOYW1lO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5hZGp1c3RUb2tlblhNTEF0dHJzID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGFkanVzdGVkQXR0ckVudHJ5ID0gWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQW3Rva2VuLmF0dHJzW2ldLm5hbWVdO1xyXG5cclxuICAgICAgICBpZiAoYWRqdXN0ZWRBdHRyRW50cnkpIHtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ucHJlZml4ID0gYWRqdXN0ZWRBdHRyRW50cnkucHJlZml4O1xyXG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZTtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZXNwYWNlID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZXNwYWNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5TVkdUYWdOYW1lID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICB2YXIgYWRqdXN0ZWRUYWdOYW1lID0gU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUFt0b2tlbi50YWdOYW1lXTtcclxuXHJcbiAgICBpZiAoYWRqdXN0ZWRUYWdOYW1lKVxyXG4gICAgICAgIHRva2VuLnRhZ05hbWUgPSBhZGp1c3RlZFRhZ05hbWU7XHJcbn07XHJcblxyXG4vL0ludGVncmF0aW9uIHBvaW50c1xyXG5leHBvcnRzLmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAodG4sIG5zKSB7XHJcbiAgICByZXR1cm4gbnMgPT09IE5TLk1BVEhNTCAmJiAodG4gPT09ICQuTUkgfHwgdG4gPT09ICQuTU8gfHwgdG4gPT09ICQuTU4gfHwgdG4gPT09ICQuTVMgfHwgdG4gPT09ICQuTVRFWFQpO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0h0bWxJbnRlZ3JhdGlvblBvaW50ID0gZnVuY3Rpb24gKHRuLCBucywgYXR0cnMpIHtcclxuICAgIGlmIChucyA9PT0gTlMuTUFUSE1MICYmIHRuID09PSAkLkFOTk9UQVRJT05fWE1MKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gQVRUUlMuRU5DT0RJTkcpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJzW2ldLnZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSBNSU1FX1RZUEVTLlRFWFRfSFRNTCB8fCB2YWx1ZSA9PT0gTUlNRV9UWVBFUy5BUFBMSUNBVElPTl9YTUw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5zID09PSBOUy5TVkcgJiYgKHRuID09PSAkLkZPUkVJR05fT0JKRUNUIHx8IHRuID09PSAkLkRFU0MgfHwgdG4gPT09ICQuVElUTEUpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgTlMgPSBleHBvcnRzLk5BTUVTUEFDRVMgPSB7XHJcbiAgICBIVE1MOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsXHJcbiAgICBNQVRITUw6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJyxcclxuICAgIFNWRzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyxcclxuICAgIFhMSU5LOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsXHJcbiAgICBYTUw6ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLFxyXG4gICAgWE1MTlM6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLydcclxufTtcclxuXHJcbmV4cG9ydHMuQVRUUlMgPSB7XHJcbiAgICBUWVBFOiAndHlwZScsXHJcbiAgICBBQ1RJT046ICdhY3Rpb24nLFxyXG4gICAgRU5DT0RJTkc6ICdlbmNvZGluZycsXHJcbiAgICBQUk9NUFQ6ICdwcm9tcHQnLFxyXG4gICAgTkFNRTogJ25hbWUnLFxyXG4gICAgQ09MT1I6ICdjb2xvcicsXHJcbiAgICBGQUNFOiAnZmFjZScsXHJcbiAgICBTSVpFOiAnc2l6ZSdcclxufTtcclxuXHJcbnZhciAkID0gZXhwb3J0cy5UQUdfTkFNRVMgPSB7XHJcbiAgICBBOiAnYScsXHJcbiAgICBBRERSRVNTOiAnYWRkcmVzcycsXHJcbiAgICBBTk5PVEFUSU9OX1hNTDogJ2Fubm90YXRpb24teG1sJyxcclxuICAgIEFQUExFVDogJ2FwcGxldCcsXHJcbiAgICBBUkVBOiAnYXJlYScsXHJcbiAgICBBUlRJQ0xFOiAnYXJ0aWNsZScsXHJcbiAgICBBU0lERTogJ2FzaWRlJyxcclxuXHJcbiAgICBCOiAnYicsXHJcbiAgICBCQVNFOiAnYmFzZScsXHJcbiAgICBCQVNFRk9OVDogJ2Jhc2Vmb250JyxcclxuICAgIEJHU09VTkQ6ICdiZ3NvdW5kJyxcclxuICAgIEJJRzogJ2JpZycsXHJcbiAgICBCTE9DS1FVT1RFOiAnYmxvY2txdW90ZScsXHJcbiAgICBCT0RZOiAnYm9keScsXHJcbiAgICBCUjogJ2JyJyxcclxuICAgIEJVVFRPTjogJ2J1dHRvbicsXHJcblxyXG4gICAgQ0FQVElPTjogJ2NhcHRpb24nLFxyXG4gICAgQ0VOVEVSOiAnY2VudGVyJyxcclxuICAgIENPREU6ICdjb2RlJyxcclxuICAgIENPTDogJ2NvbCcsXHJcbiAgICBDT0xHUk9VUDogJ2NvbGdyb3VwJyxcclxuICAgIENPTU1BTkQ6ICdjb21tYW5kJyxcclxuXHJcbiAgICBERDogJ2RkJyxcclxuICAgIERFU0M6ICdkZXNjJyxcclxuICAgIERFVEFJTFM6ICdkZXRhaWxzJyxcclxuICAgIERJQUxPRzogJ2RpYWxvZycsXHJcbiAgICBESVI6ICdkaXInLFxyXG4gICAgRElWOiAnZGl2JyxcclxuICAgIERMOiAnZGwnLFxyXG4gICAgRFQ6ICdkdCcsXHJcblxyXG4gICAgRU06ICdlbScsXHJcbiAgICBFTUJFRDogJ2VtYmVkJyxcclxuXHJcbiAgICBGSUVMRFNFVDogJ2ZpZWxkc2V0JyxcclxuICAgIEZJR0NBUFRJT046ICdmaWdjYXB0aW9uJyxcclxuICAgIEZJR1VSRTogJ2ZpZ3VyZScsXHJcbiAgICBGT05UOiAnZm9udCcsXHJcbiAgICBGT09URVI6ICdmb290ZXInLFxyXG4gICAgRk9SRUlHTl9PQkpFQ1Q6ICdmb3JlaWduT2JqZWN0JyxcclxuICAgIEZPUk06ICdmb3JtJyxcclxuICAgIEZSQU1FOiAnZnJhbWUnLFxyXG4gICAgRlJBTUVTRVQ6ICdmcmFtZXNldCcsXHJcblxyXG4gICAgSDE6ICdoMScsXHJcbiAgICBIMjogJ2gyJyxcclxuICAgIEgzOiAnaDMnLFxyXG4gICAgSDQ6ICdoNCcsXHJcbiAgICBINTogJ2g1JyxcclxuICAgIEg2OiAnaDYnLFxyXG4gICAgSEVBRDogJ2hlYWQnLFxyXG4gICAgSEVBREVSOiAnaGVhZGVyJyxcclxuICAgIEhHUk9VUDogJ2hncm91cCcsXHJcbiAgICBIUjogJ2hyJyxcclxuICAgIEhUTUw6ICdodG1sJyxcclxuXHJcbiAgICBJOiAnaScsXHJcbiAgICBJTUc6ICdpbWcnLFxyXG4gICAgSU1BR0U6ICdpbWFnZScsXHJcbiAgICBJTlBVVDogJ2lucHV0JyxcclxuICAgIElGUkFNRTogJ2lmcmFtZScsXHJcbiAgICBJU0lOREVYOiAnaXNpbmRleCcsXHJcblxyXG4gICAgS0VZR0VOOiAna2V5Z2VuJyxcclxuXHJcbiAgICBMQUJFTDogJ2xhYmVsJyxcclxuICAgIExJOiAnbGknLFxyXG4gICAgTElOSzogJ2xpbmsnLFxyXG4gICAgTElTVElORzogJ2xpc3RpbmcnLFxyXG5cclxuICAgIE1BSU46ICdtYWluJyxcclxuICAgIE1BTElHTk1BUks6ICdtYWxpZ25tYXJrJyxcclxuICAgIE1BUlFVRUU6ICdtYXJxdWVlJyxcclxuICAgIE1BVEg6ICdtYXRoJyxcclxuICAgIE1FTlU6ICdtZW51JyxcclxuICAgIE1FTlVJVEVNOiAnbWVudWl0ZW0nLFxyXG4gICAgTUVUQTogJ21ldGEnLFxyXG4gICAgTUdMWVBIOiAnbWdseXBoJyxcclxuICAgIE1JOiAnbWknLFxyXG4gICAgTU86ICdtbycsXHJcbiAgICBNTjogJ21uJyxcclxuICAgIE1TOiAnbXMnLFxyXG4gICAgTVRFWFQ6ICdtdGV4dCcsXHJcblxyXG4gICAgTkFWOiAnbmF2JyxcclxuICAgIE5PQlI6ICdub2JyJyxcclxuICAgIE5PRlJBTUVTOiAnbm9mcmFtZXMnLFxyXG4gICAgTk9FTUJFRDogJ25vZW1iZWQnLFxyXG4gICAgTk9TQ1JJUFQ6ICdub3NjcmlwdCcsXHJcblxyXG4gICAgT0JKRUNUOiAnb2JqZWN0JyxcclxuICAgIE9MOiAnb2wnLFxyXG4gICAgT1BUR1JPVVA6ICdvcHRncm91cCcsXHJcbiAgICBPUFRJT046ICdvcHRpb24nLFxyXG5cclxuICAgIFA6ICdwJyxcclxuICAgIFBBUkFNOiAncGFyYW0nLFxyXG4gICAgUExBSU5URVhUOiAncGxhaW50ZXh0JyxcclxuICAgIFBSRTogJ3ByZScsXHJcblxyXG4gICAgUlA6ICdycCcsXHJcbiAgICBSVDogJ3J0JyxcclxuICAgIFJVQlk6ICdydWJ5JyxcclxuXHJcbiAgICBTOiAncycsXHJcbiAgICBTQ1JJUFQ6ICdzY3JpcHQnLFxyXG4gICAgU0VDVElPTjogJ3NlY3Rpb24nLFxyXG4gICAgU0VMRUNUOiAnc2VsZWN0JyxcclxuICAgIFNPVVJDRTogJ3NvdXJjZScsXHJcbiAgICBTTUFMTDogJ3NtYWxsJyxcclxuICAgIFNQQU46ICdzcGFuJyxcclxuICAgIFNUUklLRTogJ3N0cmlrZScsXHJcbiAgICBTVFJPTkc6ICdzdHJvbmcnLFxyXG4gICAgU1RZTEU6ICdzdHlsZScsXHJcbiAgICBTVUI6ICdzdWInLFxyXG4gICAgU1VNTUFSWTogJ3N1bW1hcnknLFxyXG4gICAgU1VQOiAnc3VwJyxcclxuXHJcbiAgICBUQUJMRTogJ3RhYmxlJyxcclxuICAgIFRCT0RZOiAndGJvZHknLFxyXG4gICAgVEVNUExBVEU6ICd0ZW1wbGF0ZScsXHJcbiAgICBURVhUQVJFQTogJ3RleHRhcmVhJyxcclxuICAgIFRGT09UOiAndGZvb3QnLFxyXG4gICAgVEQ6ICd0ZCcsXHJcbiAgICBUSDogJ3RoJyxcclxuICAgIFRIRUFEOiAndGhlYWQnLFxyXG4gICAgVElUTEU6ICd0aXRsZScsXHJcbiAgICBUUjogJ3RyJyxcclxuICAgIFRSQUNLOiAndHJhY2snLFxyXG4gICAgVFQ6ICd0dCcsXHJcblxyXG4gICAgVTogJ3UnLFxyXG4gICAgVUw6ICd1bCcsXHJcblxyXG4gICAgU1ZHOiAnc3ZnJyxcclxuXHJcbiAgICBWQVI6ICd2YXInLFxyXG5cclxuICAgIFdCUjogJ3dicicsXHJcblxyXG4gICAgWE1QOiAneG1wJ1xyXG59O1xyXG5cclxudmFyIFNQRUNJQUxfRUxFTUVOVFMgPSBleHBvcnRzLlNQRUNJQUxfRUxFTUVOVFMgPSB7fTtcclxuXHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF0gPSB7fTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFERFJFU1NdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFQUExFVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVJFQV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVJUSUNMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVNJREVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJBU0VdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJBU0VGT05UXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CR1NPVU5EXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CTE9DS1FVT1RFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CT0RZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQlVUVE9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DQVBUSU9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DRU5URVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkNPTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQ09MR1JPVVBdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkREXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ERVRBSUxTXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ESVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRJVl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRExdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5FTUJFRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRklFTERTRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJR0NBUFRJT05dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJR1VSRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRk9PVEVSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GT1JNXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GUkFNRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRlJBTUVTRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkgxXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IMl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkg0XSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5INV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDZdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhFQURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhFQURFUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSEdST1VQXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSFRNTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSUZSQU1FXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JTUddID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLklOUFVUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JU0lOREVYXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5MSV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTElOS10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTElTVElOR10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUFJTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUFSUVVFRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUVOVV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUVOVUlURU1dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1FVEFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5BVl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTk9FTUJFRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTk9GUkFNRVNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5PU0NSSVBUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5PQkpFQ1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk9MXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QQVJBTV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuUExBSU5URVhUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QUkVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNDUklQVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU0VDVElPTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU0VMRUNUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TT1VSQ0VdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNUWUxFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TVU1NQVJZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UQUJMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEJPRFldID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlREXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5URU1QTEFURV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEVYVEFSRUFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRGT09UXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5USF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEhFQURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRJVExFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVFJBQ0tdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlVMXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5XQlJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlhNUF0gPSB0cnVlO1xyXG5cclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5NQVRITUxdID0ge307XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1JXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1PXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1TXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1URVhUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLkFOTk9UQVRJT05fWE1MXSA9IHRydWU7XHJcblxyXG5TUEVDSUFMX0VMRU1FTlRTW05TLlNWR10gPSB7fTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuVElUTEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuRk9SRUlHTl9PQkpFQ1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuREVTQ10gPSB0cnVlO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUiA9ICdcXHVGRkZEJztcclxuXHJcbmV4cG9ydHMuQ09ERV9QT0lOVFMgPSB7XHJcbiAgICBFT0Y6IC0xLFxyXG4gICAgTlVMTDogMHgwMCxcclxuICAgIFRBQlVMQVRJT046IDB4MDksXHJcbiAgICBDQVJSSUFHRV9SRVRVUk46IDB4MEQsXHJcbiAgICBMSU5FX0ZFRUQ6IDB4MEEsXHJcbiAgICBGT1JNX0ZFRUQ6IDB4MEMsXHJcbiAgICBTUEFDRTogMHgyMCxcclxuICAgIEVYQ0xBTUFUSU9OX01BUks6IDB4MjEsXHJcbiAgICBRVU9UQVRJT05fTUFSSzogMHgyMixcclxuICAgIE5VTUJFUl9TSUdOOiAweDIzLFxyXG4gICAgQU1QRVJTQU5EOiAweDI2LFxyXG4gICAgQVBPU1RST1BIRTogMHgyNyxcclxuICAgIEhZUEhFTl9NSU5VUzogMHgyRCxcclxuICAgIFNPTElEVVM6IDB4MkYsXHJcbiAgICBESUdJVF8wOiAweDMwLFxyXG4gICAgRElHSVRfOTogMHgzOSxcclxuICAgIFNFTUlDT0xPTjogMHgzQixcclxuICAgIExFU1NfVEhBTl9TSUdOOiAweDNDLFxyXG4gICAgRVFVQUxTX1NJR046IDB4M0QsXHJcbiAgICBHUkVBVEVSX1RIQU5fU0lHTjogMHgzRSxcclxuICAgIFFVRVNUSU9OX01BUks6IDB4M0YsXHJcbiAgICBMQVRJTl9DQVBJVEFMX0E6IDB4NDEsXHJcbiAgICBMQVRJTl9DQVBJVEFMX0Y6IDB4NDYsXHJcbiAgICBMQVRJTl9DQVBJVEFMX1g6IDB4NTgsXHJcbiAgICBMQVRJTl9DQVBJVEFMX1o6IDB4NUEsXHJcbiAgICBHUkFWRV9BQ0NFTlQ6IDB4NjAsXHJcbiAgICBMQVRJTl9TTUFMTF9BOiAweDYxLFxyXG4gICAgTEFUSU5fU01BTExfRjogMHg2NixcclxuICAgIExBVElOX1NNQUxMX1g6IDB4NzgsXHJcbiAgICBMQVRJTl9TTUFMTF9aOiAweDdBLFxyXG4gICAgQk9NOiAweEZFRkYsXHJcbiAgICBSRVBMQUNFTUVOVF9DSEFSQUNURVI6IDB4RkZGRFxyXG59O1xyXG5cclxuZXhwb3J0cy5DT0RFX1BPSU5UX1NFUVVFTkNFUyA9IHtcclxuICAgIERBU0hfREFTSF9TVFJJTkc6IFsweDJELCAweDJEXSwgLy8tLVxyXG4gICAgRE9DVFlQRV9TVFJJTkc6IFsweDQ0LCAweDRGLCAweDQzLCAweDU0LCAweDU5LCAweDUwLCAweDQ1XSwgLy9ET0NUWVBFXHJcbiAgICBDREFUQV9TVEFSVF9TVFJJTkc6IFsweDVCLCAweDQzLCAweDQ0LCAweDQxLCAweDU0LCAweDQxLCAweDVCXSwgLy9bQ0RBVEFbXHJcbiAgICBDREFUQV9FTkRfU1RSSU5HOiBbMHg1RCwgMHg1RCwgMHgzRV0sIC8vXV0+XHJcbiAgICBTQ1JJUFRfU1RSSU5HOiBbMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NF0sIC8vc2NyaXB0XHJcbiAgICBQVUJMSUNfU1RSSU5HOiBbMHg1MCwgMHg1NSwgMHg0MiwgMHg0QywgMHg0OSwgMHg0M10sIC8vUFVCTElDXHJcbiAgICBTWVNURU1fU1RSSU5HOiBbMHg1MywgMHg1OSwgMHg1MywgMHg1NCwgMHg0NSwgMHg0RF0gLy9TWVNURU1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0cy5tZXJnZU9wdGlvbnMgPSBmdW5jdGlvbiAoZGVmYXVsdHMsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIHJldHVybiBbZGVmYXVsdHMsIG9wdGlvbnNdLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBvcHRPYmopIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhvcHRPYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBtZXJnZWRba2V5XSA9IG9wdE9ialtrZXldO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbWVyZ2VkO1xyXG4gICAgfSwge30pO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgUGFyc2VyID0gcmVxdWlyZSgnLi4vdHJlZV9jb25zdHJ1Y3Rpb24vcGFyc2VyJyksXHJcbiAgICBQYXJzaW5nVW5pdCA9IHJlcXVpcmUoJy4vcGFyc2luZ191bml0Jyk7XHJcblxyXG4vL0FQSVxyXG5leHBvcnRzLnBhcnNlRG9jdW1lbnQgPSBmdW5jdGlvbiAoaHRtbCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIC8vTk9URTogdGhpcyBzaG91bGQgYmUgcmVlbnRyYW50LCBzbyB3ZSBjcmVhdGUgbmV3IHBhcnNlciBoZXJlXHJcbiAgICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcih0cmVlQWRhcHRlciksXHJcbiAgICAgICAgcGFyc2luZ1VuaXQgPSBuZXcgUGFyc2luZ1VuaXQocGFyc2VyKTtcclxuXHJcbiAgICAvL05PVEU6IG92ZXJyaWRlIHBhcnNlciBsb29wIG1ldGhvZFxyXG4gICAgcGFyc2VyLl9ydW5QYXJzaW5nTG9vcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBwYXJzaW5nVW5pdC5wYXJzaW5nTG9vcExvY2sgPSB0cnVlO1xyXG5cclxuICAgICAgICB3aGlsZSAoIXBhcnNpbmdVbml0LnN1c3BlbmRlZCAmJiAhdGhpcy5zdG9wcGVkKVxyXG4gICAgICAgICAgICB0aGlzLl9pdGVyYXRlUGFyc2luZ0xvb3AoKTtcclxuXHJcbiAgICAgICAgcGFyc2luZ1VuaXQucGFyc2luZ0xvb3BMb2NrID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0b3BwZWQpXHJcbiAgICAgICAgICAgIHBhcnNpbmdVbml0LmNhbGxiYWNrKHRoaXMuZG9jdW1lbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvL05PVEU6IHdhaXQgd2hpbGUgcGFyc2VyQ29udHJvbGxlciB3aWxsIGJlIGFkb3B0ZWQgYnkgY2FsbGluZyBjb2RlLCB0aGVuXHJcbiAgICAvL3N0YXJ0IHBhcnNpbmdcclxuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHBhcnNlci5wYXJzZShodG1sKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXJzaW5nVW5pdDtcclxufTtcclxuXHJcbmV4cG9ydHMucGFyc2VJbm5lckh0bWwgPSBmdW5jdGlvbiAoaW5uZXJIdG1sLCBjb250ZXh0RWxlbWVudCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIC8vTk9URTogdGhpcyBzaG91bGQgYmUgcmVlbnRyYW50LCBzbyB3ZSBjcmVhdGUgbmV3IHBhcnNlciBoZXJlXHJcbiAgICB2YXIgcGFyc2VyID0gbmV3IFBhcnNlcih0cmVlQWRhcHRlcik7XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZUZyYWdtZW50KGlubmVySHRtbCwgY29udGV4dEVsZW1lbnQpO1xyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBQYXJzaW5nVW5pdCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhcnNlcikge1xyXG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJzaW5nTG9vcExvY2sgPSBmYWxzZTtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLl9zdGF0ZUd1YXJkID0gZnVuY3Rpb24gKHN1c3BlbmQpIHtcclxuICAgIGlmICh0aGlzLnN1c3BlbmRlZCAmJiBzdXNwZW5kKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyc2U1OiBQYXJzZXIgd2FzIGFscmVhZHkgc3VzcGVuZGVkLiBQbGVhc2UsIGNoZWNrIHlvdXIgY29udHJvbCBmbG93IGxvZ2ljLicpO1xyXG5cclxuICAgIGVsc2UgaWYgKCF0aGlzLnN1c3BlbmRlZCAmJiAhc3VzcGVuZClcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcnNlNTogUGFyc2VyIHdhcyBhbHJlYWR5IHJlc3VtZWQuIFBsZWFzZSwgY2hlY2sgeW91ciBjb250cm9sIGZsb3cgbG9naWMuJyk7XHJcblxyXG4gICAgcmV0dXJuIHN1c3BlbmQ7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3VzcGVuZGVkID0gdGhpcy5fc3RhdGVHdWFyZCh0cnVlKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IHRoaXMuX3N0YXRlR3VhcmQoZmFsc2UpO1xyXG5cclxuICAgIC8vTk9URTogZG9uJ3QgZW50ZXIgcGFyc2luZyBsb29wIGlmIGl0IGlzIGxvY2tlZC4gV2l0aG91dCB0aGlzIGxvY2sgX3J1blBhcnNpbmdMb29wKCkgbWF5IGJlIGNhbGxlZFxyXG4gICAgLy93aGlsZSBwYXJzaW5nIGxvb3AgaXMgc3RpbGwgcnVubmluZy4gRS5nLiB3aGVuIHN1c3BlbmQoKSBhbmQgcmVzdW1lKCkgY2FsbGVkIHN5bmNocm9ub3VzbHkuXHJcbiAgICBpZiAoIXRoaXMucGFyc2luZ0xvb3BMb2NrKVxyXG4gICAgICAgIHRoaXMucGFyc2VyLl9ydW5QYXJzaW5nTG9vcCgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLmRvY3VtZW50V3JpdGUgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgdGhpcy5wYXJzZXIudG9rZW5pemVyLnByZXByb2Nlc3Nvci53cml0ZShodG1sKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5oYW5kbGVTY3JpcHRzID0gZnVuY3Rpb24gKHNjcmlwdEhhbmRsZXIpIHtcclxuICAgIHRoaXMucGFyc2VyLnNjcmlwdEhhbmRsZXIgPSBzY3JpcHRIYW5kbGVyO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLmRvbmUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIERlZmF1bHRUcmVlQWRhcHRlciA9IHJlcXVpcmUoJy4uL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxyXG4gICAgRG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyksXHJcbiAgICBVdGlscyA9IHJlcXVpcmUoJy4uL2NvbW1vbi91dGlscycpLFxyXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XHJcblxyXG4vL0FsaWFzZXNcclxudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcclxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xyXG5cclxuLy9EZWZhdWx0IHNlcmlhbGl6ZXIgb3B0aW9uc1xyXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xyXG4gICAgZW5jb2RlSHRtbEVudGl0aWVzOiB0cnVlXHJcbn07XHJcblxyXG4vL0VzY2FwaW5nIHJlZ2V4ZXNcclxudmFyIEFNUF9SRUdFWCA9IC8mL2csXHJcbiAgICBOQlNQX1JFR0VYID0gL1xcdTAwYTAvZyxcclxuICAgIERPVUJMRV9RVU9URV9SRUdFWCA9IC9cIi9nLFxyXG4gICAgTFRfUkVHRVggPSAvPC9nLFxyXG4gICAgR1RfUkVHRVggPSAvPi9nO1xyXG5cclxuLy9Fc2NhcGUgc3RyaW5nXHJcbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHIsIGF0dHJNb2RlKSB7XHJcbiAgICBzdHIgPSBzdHJcclxuICAgICAgICAucmVwbGFjZShBTVBfUkVHRVgsICcmYW1wOycpXHJcbiAgICAgICAgLnJlcGxhY2UoTkJTUF9SRUdFWCwgJyZuYnNwOycpO1xyXG5cclxuICAgIGlmIChhdHRyTW9kZSlcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShET1VCTEVfUVVPVEVfUkVHRVgsICcmcXVvdDsnKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBzdHIgPSBzdHJcclxuICAgICAgICAgICAgLnJlcGxhY2UoTFRfUkVHRVgsICcmbHQ7JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoR1RfUkVHRVgsICcmZ3Q7Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0cjtcclxufVxyXG5cclxuXHJcbi8vRW5xdW90ZSBkb2N0eXBlIElEXHJcblxyXG5cclxuXHJcbi8vU2VyaWFsaXplclxyXG52YXIgU2VyaWFsaXplciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRyZWVBZGFwdGVyLCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXIgfHwgRGVmYXVsdFRyZWVBZGFwdGVyO1xyXG4gICAgdGhpcy5vcHRpb25zID0gVXRpbHMubWVyZ2VPcHRpb25zKERFRkFVTFRfT1BUSU9OUywgb3B0aW9ucyk7XHJcbn07XHJcblxyXG5cclxuLy9BUElcclxuU2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHRoaXMuaHRtbCA9ICcnO1xyXG4gICAgdGhpcy5fc2VyaWFsaXplQ2hpbGROb2Rlcyhub2RlKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odG1sO1xyXG59O1xyXG5cclxuXHJcbi8vSW50ZXJuYWxzXHJcblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVDaGlsZE5vZGVzID0gZnVuY3Rpb24gKHBhcmVudE5vZGUpIHtcclxuICAgIHZhciBjaGlsZE5vZGVzID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKHBhcmVudE5vZGUpO1xyXG5cclxuICAgIGlmIChjaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGNuTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBjbkxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50Tm9kZSA9IGNoaWxkTm9kZXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5pc0VsZW1lbnROb2RlKGN1cnJlbnROb2RlKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZUVsZW1lbnQoY3VycmVudE5vZGUpO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50cmVlQWRhcHRlci5pc1RleHROb2RlKGN1cnJlbnROb2RlKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZVRleHROb2RlKGN1cnJlbnROb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNDb21tZW50Tm9kZShjdXJyZW50Tm9kZSkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVDb21tZW50Tm9kZShjdXJyZW50Tm9kZSk7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzRG9jdW1lbnRUeXBlTm9kZShjdXJyZW50Tm9kZSkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVEb2N1bWVudFR5cGVOb2RlKGN1cnJlbnROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobm9kZSksXHJcbiAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShub2RlKTtcclxuXHJcbiAgICB0aGlzLmh0bWwgKz0gJzwnICsgdG47XHJcbiAgICB0aGlzLl9zZXJpYWxpemVBdHRyaWJ1dGVzKG5vZGUpO1xyXG4gICAgdGhpcy5odG1sICs9ICc+JztcclxuXHJcbiAgICBpZiAodG4gIT09ICQuQVJFQSAmJiB0biAhPT0gJC5CQVNFICYmIHRuICE9PSAkLkJBU0VGT05UICYmIHRuICE9PSAkLkJHU09VTkQgJiYgdG4gIT09ICQuQlIgJiYgdG4gIT09ICQuQlIgJiZcclxuICAgICAgICB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuRU1CRUQgJiYgdG4gIT09ICQuRlJBTUUgJiYgdG4gIT09ICQuSFIgJiYgdG4gIT09ICQuSU1HICYmIHRuICE9PSAkLklOUFVUICYmXHJcbiAgICAgICAgdG4gIT09ICQuS0VZR0VOICYmIHRuICE9PSAkLkxJTksgJiYgdG4gIT09ICQuTUVOVUlURU0gJiYgdG4gIT09ICQuTUVUQSAmJiB0biAhPT0gJC5QQVJBTSAmJiB0biAhPT0gJC5TT1VSQ0UgJiZcclxuICAgICAgICB0biAhPT0gJC5UUkFDSyAmJiB0biAhPT0gJC5XQlIpIHtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLlBSRSB8fCB0biA9PT0gJC5URVhUQVJFQSB8fCB0biA9PT0gJC5MSVNUSU5HKSB7XHJcbiAgICAgICAgICAgIHZhciBmaXJzdENoaWxkID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKG5vZGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgJiYgdGhpcy50cmVlQWRhcHRlci5pc1RleHROb2RlKGZpcnN0Q2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGV4dE5vZGVDb250ZW50KGZpcnN0Q2hpbGQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50WzBdID09PSAnXFxuJylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ1xcbic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaGlsZE5vZGVzSG9sZGVyID0gdG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKG5vZGUpWzBdIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU7XHJcblxyXG4gICAgICAgIHRoaXMuX3NlcmlhbGl6ZUNoaWxkTm9kZXMoY2hpbGROb2Rlc0hvbGRlcik7XHJcbiAgICAgICAgdGhpcy5odG1sICs9ICc8LycgKyB0biArICc+JztcclxuICAgIH1cclxufTtcclxuXHJcblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHZhciBhdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3Qobm9kZSk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDAsIGF0dHJzTGVuZ3RoID0gYXR0cnMubGVuZ3RoOyBpIDwgYXR0cnNMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBhdHRyID0gYXR0cnNbaV0sXHJcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5vcHRpb25zLmVuY29kZUh0bWxFbnRpdGllcyA/IGVzY2FwZVN0cmluZyhhdHRyLnZhbHVlLCB0cnVlKSA6IGF0dHIudmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMuaHRtbCArPSAnICc7XHJcblxyXG4gICAgICAgIGlmICghYXR0ci5uYW1lc3BhY2UpXHJcbiAgICAgICAgICAgIHRoaXMuaHRtbCArPSBhdHRyLm5hbWU7XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTUwpXHJcbiAgICAgICAgICAgIHRoaXMuaHRtbCArPSAneG1sOicgKyBhdHRyLm5hbWU7XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTUxOUykge1xyXG4gICAgICAgICAgICBpZiAoYXR0ci5uYW1lICE9PSAneG1sbnMnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5odG1sICs9ICd4bWxuczonO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5odG1sICs9IGF0dHIubmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTElOSylcclxuICAgICAgICAgICAgdGhpcy5odG1sICs9ICd4bGluazonICsgYXR0ci5uYW1lO1xyXG5cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaHRtbCArPSBhdHRyLm5hbWVzcGFjZSArICc6JyArIGF0dHIubmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5odG1sICs9ICc9XCInICsgdmFsdWUgKyAnXCInO1xyXG4gICAgfVxyXG59O1xyXG5cclxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZVRleHROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHZhciBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQobm9kZSksXHJcbiAgICAgICAgcGFyZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRQYXJlbnROb2RlKG5vZGUpLFxyXG4gICAgICAgIHBhcmVudFRuID0gdm9pZCAwO1xyXG5cclxuICAgIGlmIChwYXJlbnQgJiYgdGhpcy50cmVlQWRhcHRlci5pc0VsZW1lbnROb2RlKHBhcmVudCkpXHJcbiAgICAgICAgcGFyZW50VG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUocGFyZW50KTtcclxuXHJcbiAgICBpZiAocGFyZW50VG4gPT09ICQuU1RZTEUgfHwgcGFyZW50VG4gPT09ICQuU0NSSVBUIHx8IHBhcmVudFRuID09PSAkLlhNUCB8fCBwYXJlbnRUbiA9PT0gJC5JRlJBTUUgfHxcclxuICAgICAgICBwYXJlbnRUbiA9PT0gJC5OT0VNQkVEIHx8IHBhcmVudFRuID09PSAkLk5PRlJBTUVTIHx8IHBhcmVudFRuID09PSAkLlBMQUlOVEVYVCB8fCBwYXJlbnRUbiA9PT0gJC5OT1NDUklQVCkge1xyXG4gICAgICAgIHRoaXMuaHRtbCArPSBjb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmh0bWwgKz0gdGhpcy5vcHRpb25zLmVuY29kZUh0bWxFbnRpdGllcyA/IGVzY2FwZVN0cmluZyhjb250ZW50LCBmYWxzZSkgOiBjb250ZW50O1xyXG59O1xyXG5cclxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZUNvbW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHRoaXMuaHRtbCArPSAnPCEtLScgKyB0aGlzLnRyZWVBZGFwdGVyLmdldENvbW1lbnROb2RlQ29udGVudChub2RlKSArICctLT4nO1xyXG59O1xyXG5cclxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZURvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgdmFyIG5hbWUgPSB0aGlzLnRyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVOYW1lKG5vZGUpLFxyXG4gICAgICAgIHB1YmxpY0lkID0gdGhpcy50cmVlQWRhcHRlci5nZXREb2N1bWVudFR5cGVOb2RlUHVibGljSWQobm9kZSksXHJcbiAgICAgICAgc3lzdGVtSWQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVTeXN0ZW1JZChub2RlKTtcclxuXHJcbiAgICB0aGlzLmh0bWwgKz0gJzwnICsgRG9jdHlwZS5zZXJpYWxpemVDb250ZW50KG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkgKyAnPic7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXHJcbiAgICBUb2tlbml6ZXJQcm94eSA9IHJlcXVpcmUoJy4vdG9rZW5pemVyX3Byb3h5JyksXHJcbiAgICBVdGlscyA9IHJlcXVpcmUoJy4uL2NvbW1vbi91dGlscycpO1xyXG5cclxuLy9EZWZhdWx0IG9wdGlvbnNcclxudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcclxuICAgIGRlY29kZUh0bWxFbnRpdGllczogdHJ1ZSxcclxuICAgIGxvY2F0aW9uSW5mbzogZmFsc2VcclxufTtcclxuXHJcbi8vU2tpcHBpbmcgaGFuZGxlclxyXG5mdW5jdGlvbiBza2lwKCkge1xyXG4gICAgLy9OT1RFOiBkbyBub3RoaW5nID0pXHJcbn1cclxuXHJcbi8vU2ltcGxlQXBpUGFyc2VyXHJcbnZhciBTaW1wbGVBcGlQYXJzZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoYW5kbGVycywgb3B0aW9ucykge1xyXG4gICAgdGhpcy5vcHRpb25zID0gVXRpbHMubWVyZ2VPcHRpb25zKERFRkFVTFRfT1BUSU9OUywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLmhhbmRsZXJzID0ge1xyXG4gICAgICAgIGRvY3R5cGU6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLmRvY3R5cGUpLFxyXG4gICAgICAgIHN0YXJ0VGFnOiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy5zdGFydFRhZyksXHJcbiAgICAgICAgZW5kVGFnOiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy5lbmRUYWcpLFxyXG4gICAgICAgIHRleHQ6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLnRleHQpLFxyXG4gICAgICAgIGNvbW1lbnQ6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLmNvbW1lbnQpXHJcbiAgICB9O1xyXG59O1xyXG5cclxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5fd3JhcEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xyXG4gICAgdmFyIHBhcnNlciA9IHRoaXM7XHJcblxyXG4gICAgaGFuZGxlciA9IGhhbmRsZXIgfHwgc2tpcDtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9uSW5mbykge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgYXJncy5wdXNoKHBhcnNlci5jdXJyZW50VG9rZW5Mb2NhdGlvbik7XHJcbiAgICAgICAgICAgIGhhbmRsZXIuYXBwbHkoaGFuZGxlciwgYXJncyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGFuZGxlcjtcclxufTtcclxuXHJcbi8vQVBJXHJcblNpbXBsZUFwaVBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgdmFyIHRva2VuID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLl9yZXNldChodG1sKTtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgICAgdG9rZW4gPSB0aGlzLnRva2VuaXplclByb3h5LmdldE5leHRUb2tlbigpO1xyXG5cclxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiB8fFxyXG4gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4gfHxcclxuICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9uSW5mbykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ1RleHQgPT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5Mb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xyXG5cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uLmVuZCA9IHRva2VuLmxvY2F0aW9uLmVuZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGV4dCA9ICh0aGlzLnBlbmRpbmdUZXh0IHx8ICcnKSArIHRva2VuLmNoYXJzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VtaXRQZW5kaW5nVGV4dCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVUb2tlbih0b2tlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfSB3aGlsZSAodG9rZW4udHlwZSAhPT0gVG9rZW5pemVyLkVPRl9UT0tFTik7XHJcbn07XHJcblxyXG4vL0ludGVybmFsc1xyXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl9oYW5kbGVUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5Mb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xyXG5cclxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxyXG4gICAgICAgIHRoaXMuaGFuZGxlcnMuc3RhcnRUYWcodG9rZW4udGFnTmFtZSwgdG9rZW4uYXR0cnMsIHRva2VuLnNlbGZDbG9zaW5nKTtcclxuXHJcbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTilcclxuICAgICAgICB0aGlzLmhhbmRsZXJzLmVuZFRhZyh0b2tlbi50YWdOYW1lKTtcclxuXHJcbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTilcclxuICAgICAgICB0aGlzLmhhbmRsZXJzLmNvbW1lbnQodG9rZW4uZGF0YSk7XHJcblxyXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU4pXHJcbiAgICAgICAgdGhpcy5oYW5kbGVycy5kb2N0eXBlKHRva2VuLm5hbWUsIHRva2VuLnB1YmxpY0lkLCB0b2tlbi5zeXN0ZW1JZCk7XHJcblxyXG59O1xyXG5cclxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgdGhpcy50b2tlbml6ZXJQcm94eSA9IG5ldyBUb2tlbml6ZXJQcm94eShodG1sLCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgdGhpcy5wZW5kaW5nVGV4dCA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uID0gbnVsbDtcclxufTtcclxuXHJcblNpbXBsZUFwaVBhcnNlci5wcm90b3R5cGUuX2VtaXRQZW5kaW5nVGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLnBlbmRpbmdUZXh0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVycy50ZXh0KHRoaXMucGVuZGluZ1RleHQpO1xyXG4gICAgICAgIHRoaXMucGVuZGluZ1RleHQgPSBudWxsO1xyXG4gICAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxyXG4gICAgRm9yZWlnbkNvbnRlbnQgPSByZXF1aXJlKCcuLi9jb21tb24vZm9yZWlnbl9jb250ZW50JyksXHJcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcclxuICAgIEhUTUwgPSByZXF1aXJlKCcuLi9jb21tb24vaHRtbCcpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gSFRNTC5UQUdfTkFNRVMsXHJcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUztcclxuXHJcblxyXG4vL1Rva2VuaXplciBwcm94eVxyXG4vL05PVEU6IHRoaXMgcHJveHkgc2ltdWxhdGVzIGFkanVzdG1lbnQgb2YgdGhlIFRva2VuaXplciB3aGljaCBwZXJmb3JtZWQgYnkgc3RhbmRhcmQgcGFyc2VyIGR1cmluZyB0cmVlIGNvbnN0cnVjdGlvbi5cclxudmFyIFRva2VuaXplclByb3h5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaHRtbCwgb3B0aW9ucykge1xyXG4gICAgdGhpcy50b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKGh0bWwsIG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMubmFtZXNwYWNlU3RhY2sgPSBbXTtcclxuICAgIHRoaXMubmFtZXNwYWNlU3RhY2tUb3AgPSAtMTtcclxuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IG51bGw7XHJcbiAgICB0aGlzLmluRm9yZWlnbkNvbnRlbnQgPSBmYWxzZTtcclxufTtcclxuXHJcbi8vQVBJXHJcblRva2VuaXplclByb3h5LnByb3RvdHlwZS5nZXROZXh0VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdG9rZW4gPSB0aGlzLnRva2VuaXplci5nZXROZXh0VG9rZW4oKTtcclxuXHJcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTilcclxuICAgICAgICB0aGlzLl9oYW5kbGVTdGFydFRhZ1Rva2VuKHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTilcclxuICAgICAgICB0aGlzLl9oYW5kbGVFbmRUYWdUb2tlbih0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOICYmIHRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xyXG4gICAgICAgIHRva2VuLnR5cGUgPSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOO1xyXG4gICAgICAgIHRva2VuLmNoYXJzID0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRva2VuO1xyXG59O1xyXG5cclxuLy9OYW1lc3BhY2Ugc3RhY2sgbXV0YXRpb25zXHJcblRva2VuaXplclByb3h5LnByb3RvdHlwZS5fZW50ZXJOYW1lc3BhY2UgPSBmdW5jdGlvbiAobmFtZXNwYWNlKSB7XHJcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrVG9wKys7XHJcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrLnB1c2gobmFtZXNwYWNlKTtcclxuXHJcbiAgICB0aGlzLmluRm9yZWlnbkNvbnRlbnQgPSBuYW1lc3BhY2UgIT09IE5TLkhUTUw7XHJcbiAgICB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPSBuYW1lc3BhY2U7XHJcbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gdGhpcy5pbkZvcmVpZ25Db250ZW50O1xyXG59O1xyXG5cclxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9sZWF2ZUN1cnJlbnROYW1lc3BhY2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrVG9wLS07XHJcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrLnBvcCgpO1xyXG5cclxuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlU3RhY2tbdGhpcy5uYW1lc3BhY2VTdGFja1RvcF07XHJcbiAgICB0aGlzLmluRm9yZWlnbkNvbnRlbnQgPSB0aGlzLmN1cnJlbnROYW1lc3BhY2UgIT09IE5TLkhUTUw7XHJcbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gdGhpcy5pbkZvcmVpZ25Db250ZW50O1xyXG59O1xyXG5cclxuLy9Ub2tlbiBoYW5kbGVyc1xyXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2Vuc3VyZVRva2VuaXplck1vZGUgPSBmdW5jdGlvbiAodG4pIHtcclxuICAgIGlmICh0biA9PT0gJC5URVhUQVJFQSB8fCB0biA9PT0gJC5USVRMRSlcclxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJDREFUQTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5QTEFJTlRFWFQpXHJcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5QTEFJTlRFWFQ7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKVxyXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuU0NSSVBUX0RBVEE7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuSUZSQU1FIHx8IHRuID09PSAkLlhNUCB8fFxyXG4gICAgICAgICAgICAgdG4gPT09ICQuTk9FTUJFRCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5OT1NDUklQVCkge1xyXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkFXVEVYVDtcclxuICAgIH1cclxufTtcclxuXHJcblRva2VuaXplclByb3h5LnByb3RvdHlwZS5faGFuZGxlU3RhcnRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuU1ZHKVxyXG4gICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLlNWRyk7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTUFUSClcclxuICAgICAgICB0aGlzLl9lbnRlck5hbWVzcGFjZShOUy5NQVRITUwpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmluRm9yZWlnbkNvbnRlbnQpIHtcclxuICAgICAgICAgICAgaWYgKEZvcmVpZ25Db250ZW50LmNhdXNlc0V4aXQodG9rZW4pKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGVhdmVDdXJyZW50TmFtZXNwYWNlKCk7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChGb3JlaWduQ29udGVudC5pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHRuLCB0aGlzLmN1cnJlbnROYW1lc3BhY2UpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIHRoaXMuY3VycmVudE5hbWVzcGFjZSwgdG9rZW4uYXR0cnMpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbnRlck5hbWVzcGFjZShOUy5IVE1MKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLl9lbnN1cmVUb2tlbml6ZXJNb2RlKHRuKTtcclxuICAgIH1cclxufTtcclxuXHJcblRva2VuaXplclByb3h5LnByb3RvdHlwZS5faGFuZGxlRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLmluRm9yZWlnbkNvbnRlbnQpIHtcclxuICAgICAgICB2YXIgcHJldmlvdXNOcyA9IHRoaXMubmFtZXNwYWNlU3RhY2tbdGhpcy5uYW1lc3BhY2VTdGFja1RvcCAtIDFdO1xyXG5cclxuICAgICAgICAvL05PVEU6IGNoZWNrIGZvciBleGl0IGZyb20gaW50ZWdyYXRpb24gcG9pbnRcclxuICAgICAgICBpZiAoRm9yZWlnbkNvbnRlbnQuaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCh0biwgcHJldmlvdXNOcykgfHxcclxuICAgICAgICAgICAgRm9yZWlnbkNvbnRlbnQuaXNIdG1sSW50ZWdyYXRpb25Qb2ludCh0biwgcHJldmlvdXNOcywgdG9rZW4uYXR0cnMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKVxyXG4gICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLkRBVEE7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoKHRuID09PSAkLlNWRyAmJiB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPT09IE5TLlNWRykgfHxcclxuICAgICAgICAgICAgICh0biA9PT0gJC5NQVRIICYmIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9PT0gTlMuTUFUSE1MKSlcclxuICAgICAgICB0aGlzLl9sZWF2ZUN1cnJlbnROYW1lc3BhY2UoKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiAodG9rZW5pemVyKSB7XHJcbiAgICAvL05PVEU6IG9idGFpbiBUb2tlbml6ZXIgcHJvdG8gdGhpcyB3YXkgdG8gYXZvaWQgbW9kdWxlIGNpcmN1bGFyIHJlZmVyZW5jZXNcclxuICAgIHZhciB0b2tlbml6ZXJQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0b2tlbml6ZXIpO1xyXG5cclxuICAgIHRva2VuaXplci50b2tlblN0YXJ0TG9jID0gLTE7XHJcblxyXG4gICAgLy9OT1RFOiBhZGQgbG9jYXRpb24gaW5mbyBidWlsZGVyIG1ldGhvZFxyXG4gICAgdG9rZW5pemVyLl9hdHRhY2hMb2NhdGlvbkluZm8gPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgICAgICB0b2tlbi5sb2NhdGlvbiA9IHtcclxuICAgICAgICAgICAgc3RhcnQ6IHRoaXMudG9rZW5TdGFydExvYyxcclxuICAgICAgICAgICAgZW5kOiAtMVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIC8vTk9URTogcGF0Y2ggdG9rZW4gY3JlYXRpb24gbWV0aG9kcyBhbmQgYXR0YWNoIGxvY2F0aW9uIG9iamVjdHNcclxuICAgIHRva2VuaXplci5fY3JlYXRlU3RhcnRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVTdGFydFRhZ1Rva2VuLmNhbGwodGhpcywgdGFnTmFtZUZpcnN0Q2gpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaExvY2F0aW9uSW5mbyh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIHRva2VuaXplci5fY3JlYXRlRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZUZpcnN0Q2gpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlRW5kVGFnVG9rZW4uY2FsbCh0aGlzLCB0YWdOYW1lRmlyc3RDaCk7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoTG9jYXRpb25JbmZvKHRoaXMuY3VycmVudFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVDb21tZW50VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZUNvbW1lbnRUb2tlbi5jYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaExvY2F0aW9uSW5mbyh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIHRva2VuaXplci5fY3JlYXRlRG9jdHlwZVRva2VuID0gZnVuY3Rpb24gKGRvY3R5cGVOYW1lRmlyc3RDaCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVEb2N0eXBlVG9rZW4uY2FsbCh0aGlzLCBkb2N0eXBlTmFtZUZpcnN0Q2gpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaExvY2F0aW9uSW5mbyh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIHRva2VuaXplci5fY3JlYXRlQ2hhcmFjdGVyVG9rZW4gPSBmdW5jdGlvbiAodHlwZSwgY2gpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlQ2hhcmFjdGVyVG9rZW4uY2FsbCh0aGlzLCB0eXBlLCBjaCk7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoTG9jYXRpb25JbmZvKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiBwYXRjaCB0b2tlbiBlbWlzc2lvbiBtZXRob2RzIHRvIGRldGVybWluZSBlbmQgbG9jYXRpb25cclxuICAgIHRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvL05PVEU6IGlmIHdlIGhhdmUgcGVuZGluZyBjaGFyYWN0ZXIgdG9rZW4gbWFrZSBpdCdzIGVuZCBsb2NhdGlvbiBlcXVhbCB0byB0aGVcclxuICAgICAgICAvL2N1cnJlbnQgdG9rZW4ncyBzdGFydCBsb2NhdGlvbi5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZCA9IHRoaXMuY3VycmVudFRva2VuLmxvY2F0aW9uLnN0YXJ0O1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5sb2NhdGlvbi5lbmQgPSB0aGlzLnByZXByb2Nlc3Nvci5wb3MgKyAxO1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9lbWl0Q3VycmVudFRva2VuLmNhbGwodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHRva2VuaXplci5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvL05PVEU6IGlmIHdlIGhhdmUgY2hhcmFjdGVyIHRva2VuIGFuZCBpdCdzIGxvY2F0aW9uIHdhc24ndCBzZXQgaW4gdGhlIF9lbWl0Q3VycmVudFRva2VuKCksXHJcbiAgICAgICAgLy90aGVuIHNldCBpdCdzIGxvY2F0aW9uIGF0IHRoZSBjdXJyZW50IHByZXByb2Nlc3NvciBwb3NpdGlvblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiAmJiB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbi5lbmQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vTk9URTogd2UgZG9uJ3QgbmVlZCB0byBpbmNyZW1lbnQgcHJlcHJvY2Vzc29yIHBvc2l0aW9uLCBzaW5jZSBjaGFyYWN0ZXIgdG9rZW5cclxuICAgICAgICAgICAgLy9lbWlzc2lvbiBpcyBhbHdheXMgZm9yY2VkIGJ5IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG9rZW4gaGVyZS5cclxuICAgICAgICAgICAgLy9Tbywgd2UgYWxyZWFkeSBoYXZlIGFkdmFuY2VkIHBvc2l0aW9uLlxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbi5lbmQgPSB0aGlzLnByZXByb2Nlc3Nvci5wb3M7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5jYWxsKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvL05PVEU6IHBhdGNoIGluaXRpYWwgc3RhdGVzIGZvciBlYWNoIG1vZGUgdG8gb2J0YWluIHRva2VuIHN0YXJ0IHBvc2l0aW9uXHJcbiAgICBPYmplY3Qua2V5cyh0b2tlbml6ZXJQcm90by5NT0RFKVxyXG5cclxuICAgICAgICAubWFwKGZ1bmN0aW9uIChtb2RlTmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdG9rZW5pemVyUHJvdG8uTU9ERVttb2RlTmFtZV07XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRva2VuaXplcltzdGF0ZV0gPSBmdW5jdGlvbiAoY3ApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5TdGFydExvYyA9IHRoaXMucHJlcHJvY2Vzc29yLnBvcztcclxuICAgICAgICAgICAgICAgIHRva2VuaXplclByb3RvW3N0YXRlXS5jYWxsKHRoaXMsIGNwKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy9OT1RFOiB0aGlzIGZpbGUgY29udGFpbnMgYXV0byBnZW5lcmF0ZWQgdHJpZSBzdHJ1Y3R1cmUgdGhhdCBpcyB1c2VkIGZvciBuYW1lZCBlbnRpdHkgcmVmZXJlbmNlcyBjb25zdW1wdGlvblxyXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI3Rva2VuaXppbmctY2hhcmFjdGVyLXJlZmVyZW5jZXMgYW5kXHJcbi8vaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZXMuaHRtbCNuYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlcylcclxubW9kdWxlLmV4cG9ydHMgPSB7NjU6e2w6ezY5OntsOnsxMDg6e2w6ezEwNTp7bDp7MTAzOntsOns1OTp7YzpbMTk4XX19LGM6WzE5OF19fX19fX19LDc3OntsOns4MDp7bDp7NTk6e2M6WzM4XX19LGM6WzM4XX19fSw5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlsxOTNdfX0sYzpbMTkzXX19fX19fX19fSw5ODp7bDp7MTE0OntsOnsxMDE6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbMjU4XX19fX19fX19fX19LDk5OntsOnsxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsxOTRdfX0sYzpbMTk0XX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNDBdfX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwNjhdfX19fX0sMTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6WzE5Ml19fSxjOlsxOTJdfX19fX19fX19LDEwODp7bDp7MTEyOntsOnsxMDQ6e2w6ezk3OntsOns1OTp7YzpbOTEzXX19fX19fX19fSwxMDk6e2w6ezk3OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMjU2XX19fX19fX19fSwxMTA6e2w6ezEwMDp7bDp7NTk6e2M6WzEwODM1XX19fX19LDExMTp7bDp7MTAzOntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzI2MF19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTIwXX19fX19fX0sMTEyOntsOnsxMTI6e2w6ezEwODp7bDp7MTIxOntsOns3MDp7bDp7MTE3OntsOnsxMTA6e2w6ezk5OntsOnsxMTY6e2w6ezEwNTp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls4Mjg5XX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezExMDp7bDp7MTAzOntsOns1OTp7YzpbMTk3XX19LGM6WzE5N119fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk2NF19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTAzOntsOnsxMTA6e2w6ezU5OntjOls4Nzg4XX19fX19fX19fX19LDExNjp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbMTk1XX19LGM6WzE5NV19fX19fX19fX0sMTE3OntsOnsxMDk6e2w6ezEwODp7bDp7NTk6e2M6WzE5Nl19fSxjOlsxOTZdfX19fX19fSw2Njp7bDp7OTc6e2w6ezk5OntsOnsxMDc6e2w6ezExNTp7bDp7MTA4OntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4NzI2XX19fX19fX19fX19fX19fSwxMTQ6e2w6ezExODp7bDp7NTk6e2M6WzEwOTgzXX19fSwxMTk6e2w6ezEwMTp7bDp7MTAwOntsOns1OTp7YzpbODk2Nl19fX19fX19fX19fSw5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA0MV19fX19fSwxMDE6e2w6ezk5OntsOns5Nzp7bDp7MTE3OntsOnsxMTU6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NTddfX19fX19fX19fX0sMTE0OntsOnsxMTA6e2w6ezExMTp7bDp7MTE3OntsOnsxMDg6e2w6ezEwODp7bDp7MTA1OntsOnsxMTU6e2w6ezU5OntjOls4NDkyXX19fX19fX19fX19fX19fX19LDExNjp7bDp7OTc6e2w6ezU5OntjOls5MTRdfX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA2OV19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTIxXX19fX19fX0sMTE0OntsOnsxMDE6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbNzI4XX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOls4NDkyXX19fX19fX0sMTE3OntsOnsxMDk6e2w6ezExMjp7bDp7MTAxOntsOnsxMTM6e2w6ezU5OntjOls4NzgyXX19fX19fX19fX19fX0sNjc6e2w6ezcyOntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA2M119fX19fX19LDc5OntsOns4MDp7bDp7ODk6e2w6ezU5OntjOlsxNjldfX0sYzpbMTY5XX19fX19LDk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzI2Ml19fX19fX19fX0sMTEyOntsOns1OTp7YzpbODkxNF19LDEwNTp7bDp7MTE2OntsOns5Nzp7bDp7MTA4OntsOns2ODp7bDp7MTA1OntsOnsxMDI6e2w6ezEwMjp7bDp7MTAxOntsOnsxMTQ6e2w6ezEwMTp7bDp7MTEwOntsOnsxMTY6e2w6ezEwNTp7bDp7OTc6e2w6ezEwODp7bDp7Njg6e2w6ezU5OntjOls4NTE3XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTIxOntsOnsxMDg6e2w6ezEwMTp7bDp7MTIxOntsOnsxMTU6e2w6ezU5OntjOls4NDkzXX19fX19fX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMjY4XX19fX19fX19fSwxMDE6e2w6ezEwMDp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOlsxOTldfX0sYzpbMTk5XX19fX19fX0sMTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMjY0XX19fX19fX0sMTExOntsOnsxMTA6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOls4NzUyXX19fX19fX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzI2Nl19fX19fX19LDEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezEwODp7bDp7MTA4OntsOns5Nzp7bDp7NTk6e2M6WzE4NF19fX19fX19fX19fSwxMTA6e2w6ezExNjp7bDp7MTAxOntsOnsxMTQ6e2w6ezY4OntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzE4M119fX19fX19fX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6Wzg0OTNdfX19fX0sMTA0OntsOnsxMDU6e2w6ezU5OntjOls5MzVdfX19fX0sMTA1OntsOnsxMTQ6e2w6ezk5OntsOnsxMDg6e2w6ezEwMTp7bDp7Njg6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODg1N119fX19fX19LDc3OntsOnsxMDU6e2w6ezExMDp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOls4ODU0XX19fX19fX19fX19LDgwOntsOnsxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbODg1M119fX19fX19fX0sODQ6e2w6ezEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6Wzg4NTVdfX19fX19fX19fX19fX19fX19fX19LDEwODp7bDp7MTExOntsOns5OTp7bDp7MTA3OntsOnsxMTk6e2w6ezEwNTp7bDp7MTE1OntsOnsxMDE6e2w6ezY3OntsOnsxMTE6e2w6ezExMDp7bDp7MTE2OntsOnsxMTE6e2w6ezExNzp7bDp7MTE0OntsOns3Mzp7bDp7MTEwOntsOnsxMTY6e2w6ezEwMTp7bDp7MTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4NzU0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOnsxMDE6e2w6ezY3OntsOnsxMTc6e2w6ezExNDp7bDp7MTA4OntsOnsxMjE6e2w6ezY4OntsOnsxMTE6e2w6ezExNzp7bDp7OTg6e2w6ezEwODp7bDp7MTAxOntsOns4MTp7bDp7MTE3OntsOnsxMTE6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbODIyMV19fX19fX19fX19fX19fX19fX19fX19fSw4MTp7bDp7MTE3OntsOnsxMTE6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbODIxN119fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTE6e2w6ezEwODp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls4NzU5XX0sMTAxOntsOns1OTp7YzpbMTA4NjhdfX19fX19fX19LDExMDp7bDp7MTAzOntsOnsxMTQ6e2w6ezExNzp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6Wzg4MDFdfX19fX19fX19fX19fSwxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbODc1MV19fX19fX19LDExNjp7bDp7MTExOntsOnsxMTc6e2w6ezExNDp7bDp7NzM6e2w6ezExMDp7bDp7MTE2OntsOnsxMDE6e2w6ezEwMzp7bDp7MTE0OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODc1MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOls4NDUwXX19fSwxMTQ6e2w6ezExMTp7bDp7MTAwOntsOnsxMTc6e2w6ezk5OntsOnsxMTY6e2w6ezU5OntjOls4NzIwXX19fX19fX19fX19fX19fSwxMTc6e2w6ezExMDp7bDp7MTE2OntsOnsxMDE6e2w6ezExNDp7bDp7Njc6e2w6ezEwODp7bDp7MTExOntsOns5OTp7bDp7MTA3OntsOnsxMTk6e2w6ezEwNTp7bDp7MTE1OntsOnsxMDE6e2w6ezY3OntsOnsxMTE6e2w6ezExMDp7bDp7MTE2OntsOnsxMTE6e2w6ezExNzp7bDp7MTE0OntsOns3Mzp7bDp7MTEwOntsOnsxMTY6e2w6ezEwMTp7bDp7MTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4NzU1XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMTE6e2w6ezExNTp7bDp7MTE1OntsOns1OTp7YzpbMTA3OTldfX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk2Nl19fX19fX19LDExNzp7bDp7MTEyOntsOns1OTp7YzpbODkxNV19LDY3OntsOns5Nzp7bDp7MTEyOntsOns1OTp7YzpbODc4MV19fX19fX19fX19fX19LDY4OntsOns2ODp7bDp7NTk6e2M6Wzg1MTddfSwxMTE6e2w6ezExNjp7bDp7MTE0OntsOns5Nzp7bDp7MTA0OntsOnsxMDA6e2w6ezU5OntjOlsxMDUxM119fX19fX19fX19fX19fX0sNzQ6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDI2XX19fX19fX0sODM6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDI5XX19fX19fX0sOTA6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDM5XX19fX19fX0sOTc6e2w6ezEwMzp7bDp7MTAzOntsOnsxMDE6e2w6ezExNDp7bDp7NTk6e2M6WzgyMjVdfX19fX19fX19LDExNDp7bDp7MTE0OntsOns1OTp7YzpbODYwOV19fX19fSwxMTU6e2w6ezEwNDp7bDp7MTE4OntsOns1OTp7YzpbMTA5ODBdfX19fX19fX19LDk5OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzI3MF19fX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA0NF19fX19fSwxMDE6e2w6ezEwODp7bDp7NTk6e2M6Wzg3MTFdfSwxMTY6e2w6ezk3OntsOns1OTp7YzpbOTE2XX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA3MV19fX19fSwxMDU6e2w6ezk3OntsOns5OTp7bDp7MTE0OntsOnsxMDU6e2w6ezExNjp7bDp7MTA1OntsOns5OTp7bDp7OTc6e2w6ezEwODp7bDp7NjU6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMTgwXX19fX19fX19fX19LDY4OntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzcyOV19fX0sMTE3OntsOns5ODp7bDp7MTA4OntsOnsxMDE6e2w6ezY1OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzczM119fX19fX19fX19fX19fX19fX19fX19fSw3MTp7bDp7MTE0OntsOns5Nzp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOls5Nl19fX19fX19fX19fSw4NDp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbNzMyXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMDk6e2w6ezExMTp7bDp7MTEwOntsOnsxMDA6e2w6ezU5OntjOls4OTAwXX19fX19fX19fX19LDEwMjp7bDp7MTAyOntsOnsxMDE6e2w6ezExNDp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7MTA1OntsOns5Nzp7bDp7MTA4OntsOns2ODp7bDp7NTk6e2M6Wzg1MThdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTIzXX19fX19LDExNjp7bDp7NTk6e2M6WzE2OF19LDY4OntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg0MTJdfX19fX19fSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4Nzg0XX19fX19fX19fX19fX0sMTE3OntsOns5ODp7bDp7MTA4OntsOnsxMDE6e2w6ezY3OntsOnsxMTE6e2w6ezExMDp7bDp7MTE2OntsOnsxMTE6e2w6ezExNzp7bDp7MTE0OntsOns3Mzp7bDp7MTEwOntsOnsxMTY6e2w6ezEwMTp7bDp7MTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4NzUxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sNjg6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTY4XX19fSwxMTk6e2w6ezExMDp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NTldfX19fX19fX19fX19fX19fX19fSw3Njp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NTZdfX19fX19fX19fX0sODI6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NjBdfX19fX19fX19fX19fX19fX19fX19LDg0OntsOnsxMDE6e2w6ezEwMTp7bDp7NTk6e2M6WzEwOTgwXX19fX19fX19fX19fX0sMTExOntsOnsxMTA6e2w6ezEwMzp7bDp7NzY6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOlsxMDIzMl19fX19fX19fX19fSw4Mjp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTAyMzRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sODI6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6WzEwMjMzXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDgyOntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjU4XX19fX19fX19fX19LDg0OntsOnsxMDE6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4NzJdfX19fX19fX19fX19fX19fX0sODU6e2w6ezExMjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NTddfX19fX19fX19fX0sNjg6e2w6ezExMTp7bDp7MTE5OntsOnsxMTA6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjYxXX19fX19fX19fX19fX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezExNDp7bDp7MTE2OntsOnsxMDU6e2w6ezk5OntsOns5Nzp7bDp7MTA4OntsOns2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6Wzg3NDFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTk6e2w6ezExMDp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTVdfSw2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTE1XX19fX19fX0sODU6e2w6ezExMjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2OTNdfX19fX19fX19fX19fX19fX19fX19fX19fSw2Njp7bDp7MTE0OntsOnsxMDE6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbNzg1XX19fX19fX19fX19LDc2OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns4Mjp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTc2XX19fX19fX19fX19fX19fX19fX19fX19LDg0OntsOnsxMDE6e2w6ezEwMTp7bDp7ODY6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOlsxMDU5MF19fX19fX19fX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbODYzN119LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1ODJdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDgyOntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezg0OntsOnsxMDE6e2w6ezEwMTp7bDp7ODY6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOlsxMDU5MV19fX19fX19fX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbODY0MV19LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1ODNdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwMTp7bDp7MTAxOntsOns1OTp7YzpbODg2OF19LDY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjE1XX19fX19fX19fX19fX19fX19LDk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjU5XX19fX19fX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk2N119fX19fSwxMTY6e2w6ezExNDp7bDp7MTExOntsOnsxMDc6e2w6ezU5OntjOlsyNzJdfX19fX19fX19fX19fSw2OTp7bDp7Nzg6e2w6ezcxOntsOns1OTp7YzpbMzMwXX19fX19LDg0OntsOns3Mjp7bDp7NTk6e2M6WzIwOF19fSxjOlsyMDhdfX19LDk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzIwMV19fSxjOlsyMDFdfX19fX19fX19LDk5OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzI4Ml19fX19fX19fX0sMTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMjAyXX19LGM6WzIwMl19fX19fSwxMjE6e2w6ezU5OntjOlsxMDY5XX19fX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsyNzhdfX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA3Ml19fX19fSwxMDM6e2w6ezExNDp7bDp7OTc6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbMjAwXX19LGM6WzIwMF19fX19fX19fX0sMTA4OntsOnsxMDE6e2w6ezEwOTp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MTJdfX19fX19fX19fX19fSwxMDk6e2w6ezk3OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMjc0XX19fX19fX0sMTEyOntsOnsxMTY6e2w6ezEyMTp7bDp7ODM6e2w6ezEwOTp7bDp7OTc6e2w6ezEwODp7bDp7MTA4OntsOns4Mzp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMTQ6e2w6ezEwMTp7bDp7NTk6e2M6Wzk3MjNdfX19fX19fX19fX19fX19fX19fX19fX0sODY6e2w6ezEwMTp7bDp7MTE0OntsOnsxMjE6e2w6ezgzOntsOnsxMDk6e2w6ezk3OntsOnsxMDg6e2w6ezEwODp7bDp7ODM6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTE0OntsOnsxMDE6e2w6ezU5OntjOls5NjQzXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTE6e2w6ezEwMzp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlsyODBdfX19fX19fSwxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDEyNF19fX19fX19LDExMjp7bDp7MTE1OntsOnsxMDU6e2w6ezEwODp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls5MTddfX19fX19fX19fX19fSwxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6WzEwODY5XX0sODQ6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NzBdfX19fX19fX19fX19fX19LDEwNTp7bDp7MTA4OntsOnsxMDU6e2w6ezk4OntsOnsxMTQ6e2w6ezEwNTp7bDp7MTE3OntsOnsxMDk6e2w6ezU5OntjOls4NjUyXX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOls4NDk2XX19fX19LDEwNTp7bDp7MTA5OntsOns1OTp7YzpbMTA4NjddfX19fX19fSwxMTY6e2w6ezk3OntsOns1OTp7YzpbOTE5XX19fX19LDExNzp7bDp7MTA5OntsOnsxMDg6e2w6ezU5OntjOlsyMDNdfX0sYzpbMjAzXX19fX19LDEyMDp7bDp7MTA1OntsOnsxMTU6e2w6ezExNjp7bDp7MTE1OntsOns1OTp7YzpbODcwN119fX19fX19fX0sMTEyOntsOnsxMTE6e2w6ezExMDp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7MTA1OntsOns5Nzp7bDp7MTA4OntsOns2OTp7bDp7NTk6e2M6Wzg1MTldfX19fX19fX19fX19fX19fX19fX19fX19fSw3MDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNjBdfX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwNzNdfX19fX0sMTA1OntsOnsxMDg6e2w6ezEwODp7bDp7MTAxOntsOnsxMDA6e2w6ezgzOntsOnsxMDk6e2w6ezk3OntsOnsxMDg6e2w6ezEwODp7bDp7ODM6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTE0OntsOnsxMDE6e2w6ezU5OntjOls5NzI0XX19fX19fX19fX19fX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezExNDp7bDp7MTIxOntsOns4Mzp7bDp7MTA5OntsOns5Nzp7bDp7MTA4OntsOnsxMDg6e2w6ezgzOntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezExNDp7bDp7MTAxOntsOns1OTp7YzpbOTY0Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTI1XX19fX19LDExNDp7bDp7NjU6e2w6ezEwODp7bDp7MTA4OntsOns1OTp7YzpbODcwNF19fX19fX19fX0sMTE3OntsOnsxMTQ6e2w6ezEwNTp7bDp7MTAxOntsOnsxMTQ6e2w6ezExNjp7bDp7MTE0OntsOnsxMDI6e2w6ezU5OntjOls4NDk3XX19fX19fX19fX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbODQ5N119fX19fX19fX0sNzE6e2w6ezc0OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTAyN119fX19fX19LDg0OntsOns1OTp7YzpbNjJdfX0sYzpbNjJdfSw5Nzp7bDp7MTA5OntsOnsxMDk6e2w6ezk3OntsOns1OTp7YzpbOTE1XX0sMTAwOntsOns1OTp7YzpbOTg4XX19fX19fX19fX19LDk4OntsOnsxMTQ6e2w6ezEwMTp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOlsyODZdfX19fX19fX19fX0sOTk6e2w6ezEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzI5MF19fX19fX19fX0sMTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMjg0XX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA0M119fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMjg4XX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwNzRdfX19fX0sMTAzOntsOns1OTp7YzpbODkyMV19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDEyNl19fX19fX19LDExNDp7bDp7MTAxOntsOns5Nzp7bDp7MTE2OntsOnsxMDE6e2w6ezExNDp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODgwNV19LDc2OntsOnsxMDE6e2w6ezExNTp7bDp7MTE1OntsOns1OTp7YzpbODkyM119fX19fX19fX19fX19fX19fX19LDcwOntsOnsxMTc6e2w6ezEwODp7bDp7MTA4OntsOns2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODA3XX19fX19fX19fX19fX19fX19fX0sNzE6e2w6ezExNDp7bDp7MTAxOntsOns5Nzp7bDp7MTE2OntsOnsxMDE6e2w6ezExNDp7bDp7NTk6e2M6WzEwOTE0XX19fX19fX19fX19fX19fSw3Njp7bDp7MTAxOntsOnsxMTU6e2w6ezExNTp7bDp7NTk6e2M6Wzg4MjNdfX19fX19fX19LDgzOntsOnsxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezExNjp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbMTA4NzhdfX19fX19fX19fX19fX19fX19fX19LDg0OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOls4ODE5XX19fX19fX19fX19fX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk3MF19fX19fX19LDExNjp7bDp7NTk6e2M6Wzg4MTFdfX19fX0sNzI6e2w6ezY1OntsOns4Mjp7bDp7Njg6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDY2XX19fX19fX19fX19LDk3OntsOns5OTp7bDp7MTAxOntsOnsxMDc6e2w6ezU5OntjOls3MTFdfX19fX19fSwxMTY6e2w6ezU5OntjOls5NF19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMjkyXX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6Wzg0NjBdfX19fX0sMTA1OntsOnsxMDg6e2w6ezk4OntsOnsxMDE6e2w6ezExNDp7bDp7MTE2OntsOns4Mzp7bDp7MTEyOntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6Wzg0NTldfX19fX19fX19fX19fX19fX19fX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6Wzg0NjFdfX19fX0sMTE0OntsOnsxMDU6e2w6ezEyMjp7bDp7MTExOntsOnsxMTA6e2w6ezExNjp7bDp7OTc6e2w6ezEwODp7bDp7NzY6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDE6e2w6ezU5OntjOls5NDcyXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOls4NDU5XX19fX19LDExNjp7bDp7MTE0OntsOnsxMTE6e2w6ezEwNzp7bDp7NTk6e2M6WzI5NF19fX19fX19fX19fSwxMTc6e2w6ezEwOTp7bDp7MTEyOntsOns2ODp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7NzI6e2w6ezExNzp7bDp7MTA5OntsOnsxMTI6e2w6ezU5OntjOls4NzgyXX19fX19fX19fX19fX19fX19LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg3ODNdfX19fX19fX19fX19fX19fX19fSw3Mzp7bDp7Njk6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDQ1XX19fX19fX0sNzQ6e2w6ezEwODp7bDp7MTA1OntsOnsxMDM6e2w6ezU5OntjOlszMDZdfX19fX19fX19LDc5OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTAyNV19fX19fX19LDk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzIwNV19fSxjOlsyMDVdfX19fX19fX19LDk5OntsOnsxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsyMDZdfX0sYzpbMjA2XX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNDhdfX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzMwNF19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbODQ2NV19fX19fSwxMDM6e2w6ezExNDp7bDp7OTc6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbMjA0XX19LGM6WzIwNF19fX19fX19fX0sMTA5OntsOns1OTp7YzpbODQ2NV19LDk3OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMjk4XX19fX19LDEwMzp7bDp7MTA1OntsOnsxMTA6e2w6ezk3OntsOnsxMTQ6e2w6ezEyMTp7bDp7NzM6e2w6ezU5OntjOls4NTIwXX19fX19fX19fX19fX19fX19LDExMjp7bDp7MTA4OntsOnsxMDU6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbODY1OF19fX19fX19fX19fX19LDExMDp7bDp7MTE2OntsOns1OTp7YzpbODc0OF19LDEwMTp7bDp7MTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4NzQ3XX19fX19fX19fSwxMTQ6e2w6ezExNTp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMDU6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbODg5OF19fX19fX19fX19fX19fX19fX19fX0sMTE4OntsOnsxMDU6e2w6ezExNTp7bDp7MTA1OntsOns5ODp7bDp7MTA4OntsOnsxMDE6e2w6ezY3OntsOnsxMTE6e2w6ezEwOTp7bDp7MTA5OntsOns5Nzp7bDp7NTk6e2M6WzgyOTFdfX19fX19fX19fX0sODQ6e2w6ezEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6WzgyOTBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTAzOntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzMwMl19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTI4XX19fX19LDExNjp7bDp7OTc6e2w6ezU5OntjOls5MjFdfX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOls4NDY0XX19fX19fX0sMTE2OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOlsyOTZdfX19fX19fX19fX0sMTE3OntsOnsxMDc6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDMwXX19fX19fX0sMTA5OntsOnsxMDg6e2w6ezU5OntjOlsyMDddfX0sYzpbMjA3XX19fX19fX0sNzQ6e2w6ezk5OntsOnsxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlszMDhdfX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDQ5XX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDc3XX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMjldfX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5NzNdfX19fX0sMTAxOntsOnsxMTQ6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDMyXX19fX19fX19fX19LDExNzp7bDp7MTA3OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTAyOF19fX19fX19fX19fSw3NTp7bDp7NzI6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDYxXX19fX19fX0sNzQ6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDM2XX19fX19fX0sOTc6e2w6ezExMjp7bDp7MTEyOntsOns5Nzp7bDp7NTk6e2M6WzkyMl19fX19fX19fX0sOTk6e2w6ezEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzMxMF19fX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA1MF19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA3OF19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTMwXX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTc0XX19fX19fX19fSw3Njp7bDp7NzQ6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDMzXX19fX19fX0sODQ6e2w6ezU5OntjOls2MF19fSxjOls2MF19LDk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzMxM119fX19fX19fX0sMTA5OntsOns5ODp7bDp7MTAwOntsOns5Nzp7bDp7NTk6e2M6WzkyM119fX19fX19fX0sMTEwOntsOnsxMDM6e2w6ezU5OntjOlsxMDIxOF19fX19fSwxMTI6e2w6ezEwODp7bDp7OTc6e2w6ezk5OntsOnsxMDE6e2w6ezExNjp7bDp7MTE0OntsOnsxMDI6e2w6ezU5OntjOls4NDY2XX19fX19fX19fX19fX19fX19LDExNDp7bDp7MTE0OntsOns1OTp7YzpbODYwNl19fX19fX19LDk5OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzMxN119fX19fX19fX0sMTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMzE1XX19fX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDUxXX19fX19LDEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezY1OntsOnsxMTA6e2w6ezEwMzp7bDp7MTA4OntsOnsxMDE6e2w6ezY2OntsOnsxMTQ6e2w6ezk3OntsOns5OTp7bDp7MTA3OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6WzEwMjE2XX19fX19fX19fX19fX19fX19fX19fX19LDExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTJdfSw2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NzZdfX19fX19fSw4Mjp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY0Nl19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDY3OntsOnsxMDE6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDU6e2w6ezExMDp7bDp7MTAzOntsOns1OTp7YzpbODk2OF19fX19fX19fX19fX19fX0sNjg6e2w6ezExMTp7bDp7MTE3OntsOns5ODp7bDp7MTA4OntsOnsxMDE6e2w6ezY2OntsOnsxMTQ6e2w6ezk3OntsOns5OTp7bDp7MTA3OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6WzEwMjE0XX19fX19fX19fX19fX19fX19fX19fX19LDExOTp7bDp7MTEwOntsOns4NDp7bDp7MTAxOntsOnsxMDE6e2w6ezg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbMTA1OTNdfX19fX19fX19fX19fX19fX19fSw4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NDNdfSw2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTg1XX19fX19fX19fX19fX19fX19fX19fX19fX19fSw3MDp7bDp7MTA4OntsOnsxMTE6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbODk3MF19fX19fX19fX19fSw4Mjp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODU5Nl19fX19fX19fX19fSw4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTc0XX19fX19fX19fX19fX19fX19fX19fX19LDg0OntsOnsxMDE6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4NjddfSw2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODYxMl19fX19fX19fX19fSw4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTg2XX19fX19fX19fX19fX19fX19LDExNDp7bDp7MTA1OntsOns5Nzp7bDp7MTEwOntsOnsxMDM6e2w6ezEwODp7bDp7MTAxOntsOns1OTp7YzpbODg4Ml19LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA3MDNdfX19fX19fSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODg0XX19fX19fX19fX19fX19fX19fX19fX19fX19fSw4NTp7bDp7MTEyOntsOns2ODp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7ODY6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOlsxMDU3N119fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwMTp7bDp7MTAxOntsOns4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTkyXX19fX19fX19fX19fX19fX19fX0sODY6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOls4NjM5XX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU4NF19fX19fX19fX19fX19fX19fX19fX19fSw4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6Wzg2MzZdfSw2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTc4XX19fX19fX19fX19fX19fX19fX0sOTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NTZdfX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjYwXX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOnsxMTU6e2w6ezY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NzE6e2w6ezExNDp7bDp7MTAxOntsOns5Nzp7bDp7MTE2OntsOnsxMDE6e2w6ezExNDp7bDp7NTk6e2M6Wzg5MjJdfX19fX19fX19fX19fX19fX19fX19fX19fSw3MDp7bDp7MTE3OntsOnsxMDg6e2w6ezEwODp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODgwNl19fX19fX19fX19fX19fX19fX19LDcxOntsOnsxMTQ6e2w6ezEwMTp7bDp7OTc6e2w6ezExNjp7bDp7MTAxOntsOnsxMTQ6e2w6ezU5OntjOls4ODIyXX19fX19fX19fX19fX19fSw3Njp7bDp7MTAxOntsOnsxMTU6e2w6ezExNTp7bDp7NTk6e2M6WzEwOTEzXX19fX19fX19fSw4Mzp7bDp7MTA4OntsOns5Nzp7bDp7MTEwOntsOnsxMTY6e2w6ezY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6WzEwODc3XX19fX19fX19fX19fX19fX19fX19fSw4NDp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbODgxOF19fX19fX19fX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA3OV19fX19fSwxMDg6e2w6ezU5OntjOls4OTIwXX0sMTAxOntsOnsxMDI6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NjZdfX19fX19fX19fX19fX19fX19fSwxMDk6e2w6ezEwNTp7bDp7MTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzMxOV19fX19fX19fX19fSwxMTE6e2w6ezExMDp7bDp7MTAzOntsOns3Njp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6WzEwMjI5XX19fX19fX19fX19LDgyOntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOlsxMDIzMV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSw4Mjp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTAyMzBdfX19fX19fX19fX19fX19fX19fX19LDEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6WzEwMjMyXX19fX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTAyMzRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOlsxMDIzM119fX19fX19fX19fX19fX19fX19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTMxXX19fX19LDExOTp7bDp7MTAxOntsOnsxMTQ6e2w6ezc2OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODYwMV19fX19fX19fX19fX19fX19fX19LDgyOntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjAwXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6Wzg0NjZdfX19fX0sMTA0OntsOns1OTp7YzpbODYyNF19fX0sMTE2OntsOnsxMTQ6e2w6ezExMTp7bDp7MTA3OntsOns1OTp7YzpbMzIxXX19fX19fX19fX19LDExNjp7bDp7NTk6e2M6Wzg4MTBdfX19fX0sNzc6e2w6ezk3OntsOnsxMTI6e2w6ezU5OntjOlsxMDUwMV19fX19fSw5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA1Ml19fX19fSwxMDE6e2w6ezEwMDp7bDp7MTA1OntsOnsxMTc6e2w6ezEwOTp7bDp7ODM6e2w6ezExMjp7bDp7OTc6e2w6ezk5OntsOnsxMDE6e2w6ezU5OntjOls4Mjg3XX19fX19fX19fX19fX19fX19fX0sMTA4OntsOnsxMDg6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezExNDp7bDp7MTAyOntsOns1OTp7YzpbODQ5OV19fX19fX19fX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA4MF19fX19fSwxMDU6e2w6ezExMDp7bDp7MTE3OntsOnsxMTU6e2w6ezgwOntsOnsxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbODcyM119fX19fX19fX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTMyXX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbODQ5OV19fX19fX19LDExNzp7bDp7NTk6e2M6WzkyNF19fX19fSw3ODp7bDp7NzQ6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDM0XX19fX19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMzIzXX19fX19fX19fX19LDk5OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzMyN119fX19fX19fX0sMTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMzI1XX19fX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDUzXX19fX19LDEwMTp7bDp7MTAzOntsOns5Nzp7bDp7MTE2OntsOnsxMDU6e2w6ezExODp7bDp7MTAxOntsOns3Nzp7bDp7MTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTE3OntsOnsxMDk6e2w6ezgzOntsOnsxMTI6e2w6ezk3OntsOns5OTp7bDp7MTAxOntsOns1OTp7YzpbODIwM119fX19fX19fX19fX19fX19fX19fX19fSw4NDp7bDp7MTA0OntsOnsxMDU6e2w6ezk5OntsOnsxMDc6e2w6ezgzOntsOnsxMTI6e2w6ezk3OntsOns5OTp7bDp7MTAxOntsOns1OTp7YzpbODIwM119fX19fX19fX19fX19fX0sMTEwOntsOns4Mzp7bDp7MTEyOntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6WzgyMDNdfX19fX19fX19fX19fX19fX19fSw4Njp7bDp7MTAxOntsOnsxMTQ6e2w6ezEyMTp7bDp7ODQ6e2w6ezEwNDp7bDp7MTA1OntsOnsxMTA6e2w6ezgzOntsOnsxMTI6e2w6ezk3OntsOns5OTp7bDp7MTAxOntsOns1OTp7YzpbODIwM119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOnsxMTY6e2w6ezEwMTp7bDp7MTAwOntsOns3MTp7bDp7MTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOns3MTp7bDp7MTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOns1OTp7YzpbODgxMV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSw3Njp7bDp7MTAxOntsOnsxMTU6e2w6ezExNTp7bDp7NzY6e2w6ezEwMTp7bDp7MTE1OntsOnsxMTU6e2w6ezU5OntjOls4ODEwXX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE5OntsOns3Njp7bDp7MTA1OntsOnsxMTA6e2w6ezEwMTp7bDp7NTk6e2M6WzEwXX19fX19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwODFdfX19fX0sMTExOntsOns2Njp7bDp7MTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMDc6e2w6ezU5OntjOls4Mjg4XX19fX19fX19fX19LDExMDp7bDp7NjY6e2w6ezExNDp7bDp7MTAxOntsOns5Nzp7bDp7MTA3OntsOnsxMDU6e2w6ezExMDp7bDp7MTAzOntsOns4Mzp7bDp7MTEyOntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6WzE2MF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTI6e2w6ezEwMjp7bDp7NTk6e2M6Wzg0NjldfX19fX0sMTE2OntsOns1OTp7YzpbMTA5ODhdfSw2Nzp7bDp7MTExOntsOnsxMTA6e2w6ezEwMzp7bDp7MTE0OntsOnsxMTc6e2w6ezEwMTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOls4ODAyXX19fX19fX19fX19fX19fX19LDExNzp7bDp7MTEyOntsOns2Nzp7bDp7OTc6e2w6ezExMjp7bDp7NTk6e2M6Wzg4MTNdfX19fX19fX19fX19fSw2ODp7bDp7MTExOntsOnsxMTc6e2w6ezk4OntsOnsxMDg6e2w6ezEwMTp7bDp7ODY6e2w6ezEwMTp7bDp7MTE0OntsOnsxMTY6e2w6ezEwNTp7bDp7OTk6e2w6ezk3OntsOnsxMDg6e2w6ezY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODc0Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSw2OTp7bDp7MTA4OntsOnsxMDE6e2w6ezEwOTp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MTNdfX19fX19fX19fX19fSwxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg4MDBdfSw4NDp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbODc3MCw4MjRdfX19fX19fX19fX19fX19fX19fSwxMjA6e2w6ezEwNTp7bDp7MTE1OntsOnsxMTY6e2w6ezExNTp7bDp7NTk6e2M6Wzg3MDhdfX19fX19fX19fX19fSw3MTp7bDp7MTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOns1OTp7YzpbODgxNV19LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg4MTddfX19fX19fX19fX0sNzA6e2w6ezExNzp7bDp7MTA4OntsOnsxMDg6e2w6ezY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg4MDcsODI0XX19fX19fX19fX19fX19fX19fX0sNzE6e2w6ezExNDp7bDp7MTAxOntsOns5Nzp7bDp7MTE2OntsOnsxMDE6e2w6ezExNDp7bDp7NTk6e2M6Wzg4MTEsODI0XX19fX19fX19fX19fX19fSw3Njp7bDp7MTAxOntsOnsxMTU6e2w6ezExNTp7bDp7NTk6e2M6Wzg4MjVdfX19fX19fX19LDgzOntsOnsxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezExNjp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbMTA4NzgsODI0XX19fX19fX19fX19fX19fX19fX19fSw4NDp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbODgyMV19fX19fX19fX19fX19fX19fX19fX19fX19LDcyOntsOnsxMTc6e2w6ezEwOTp7bDp7MTEyOntsOns2ODp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7NzI6e2w6ezExNzp7bDp7MTA5OntsOnsxMTI6e2w6ezU5OntjOls4NzgyLDgyNF19fX19fX19fX19fX19fX19fSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4NzgzLDgyNF19fX19fX19fX19fX19fX19fX19LDc2OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns4NDp7bDp7MTE0OntsOnsxMDU6e2w6ezk3OntsOnsxMTA6e2w6ezEwMzp7bDp7MTA4OntsOnsxMDE6e2w6ezU5OntjOls4OTM4XX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDcwMyw4MjRdfX19fX19fSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4OTQwXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOnsxMTU6e2w6ezU5OntjOls4ODE0XX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODgxNl19fX19fX19fX19fSw3MTp7bDp7MTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOns1OTp7YzpbODgyNF19fX19fX19fX19fX19fX0sNzY6e2w6ezEwMTp7bDp7MTE1OntsOnsxMTU6e2w6ezU5OntjOls4ODEwLDgyNF19fX19fX19fX0sODM6e2w6ezEwODp7bDp7OTc6e2w6ezExMDp7bDp7MTE2OntsOns2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOlsxMDg3Nyw4MjRdfX19fX19fX19fX19fX19fX19fX19LDg0OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOls4ODIwXX19fX19fX19fX19fX19fX19fX0sNzg6e2w6ezEwMTp7bDp7MTE1OntsOnsxMTY6e2w6ezEwMTp7bDp7MTAwOntsOns3MTp7bDp7MTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOns3MTp7bDp7MTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOns1OTp7YzpbMTA5MTQsODI0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDc2OntsOnsxMDE6e2w6ezExNTp7bDp7MTE1OntsOns3Njp7bDp7MTAxOntsOnsxMTU6e2w6ezExNTp7bDp7NTk6e2M6WzEwOTEzLDgyNF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSw4MDp7bDp7MTE0OntsOnsxMDE6e2w6ezk5OntsOnsxMDE6e2w6ezEwMDp7bDp7MTAxOntsOnsxMTU6e2w6ezU5OntjOls4ODMyXX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbMTA5MjcsODI0XX19fX19fX19fX19LDgzOntsOnsxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezExNjp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODkyOF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDgyOntsOnsxMDE6e2w6ezExODp7bDp7MTAxOntsOnsxMTQ6e2w6ezExNTp7bDp7MTAxOntsOns2OTp7bDp7MTA4OntsOnsxMDE6e2w6ezEwOTp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MTZdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7ODQ6e2w6ezExNDp7bDp7MTA1OntsOns5Nzp7bDp7MTEwOntsOnsxMDM6e2w6ezEwODp7bDp7MTAxOntsOns1OTp7YzpbODkzOV19LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA3MDQsODI0XX19fX19fX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODk0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDgzOntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezExNDp7bDp7MTAxOntsOns4Mzp7bDp7MTE3OntsOns5ODp7bDp7MTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg4NDcsODI0XX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODkzMF19fX19fX19fX19fX19fX19fX19LDExMjp7bDp7MTAxOntsOnsxMTQ6e2w6ezExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4ODQ4LDgyNF19LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg5MzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTc6e2w6ezk4OntsOnsxMTU6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbODgzNCw4NDAyXX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODg0MF19fX19fX19fX19fX19fX19fX19LDk5OntsOns5OTp7bDp7MTAxOntsOnsxMDE6e2w6ezEwMDp7bDp7MTE1OntsOns1OTp7YzpbODgzM119LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6WzEwOTI4LDgyNF19fX19fX19fX19fSw4Mzp7bDp7MTA4OntsOns5Nzp7bDp7MTEwOntsOnsxMTY6e2w6ezY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg5MjldfX19fX19fX19fX19fX19fX19fX19LDg0OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOls4ODMxLDgyNF19fX19fX19fX19fX19fX19fX19fX19fSwxMTI6e2w6ezEwMTp7bDp7MTE0OntsOnsxMTU6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbODgzNSw4NDAyXX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODg0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NjldfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4NzcyXX19fX19fX19fX19LDcwOntsOnsxMTc6e2w6ezEwODp7bDp7MTA4OntsOns2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4Nzc1XX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NzddfX19fX19fX19fX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezExNDp7bDp7MTE2OntsOnsxMDU6e2w6ezk5OntsOns5Nzp7bDp7MTA4OntsOns2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6Wzg3NDBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk3N119fX19fX19LDExNjp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbMjA5XX19LGM6WzIwOV19fX19fX19fX0sMTE3OntsOns1OTp7YzpbOTI1XX19fX19LDc5OntsOns2OTp7bDp7MTA4OntsOnsxMDU6e2w6ezEwMzp7bDp7NTk6e2M6WzMzOF19fX19fX19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMjExXX19LGM6WzIxMV19fX19fX19fX0sOTk6e2w6ezEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzIxMl19fSxjOlsyMTJdfX19fX0sMTIxOntsOns1OTp7YzpbMTA1NF19fX19fSwxMDA6e2w6ezk4OntsOnsxMDg6e2w6ezk3OntsOns5OTp7bDp7NTk6e2M6WzMzNl19fX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA4Ml19fX19fSwxMDM6e2w6ezExNDp7bDp7OTc6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbMjEwXX19LGM6WzIxMF19fX19fX19fX0sMTA5OntsOns5Nzp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzMzMl19fX19fX19LDEwMTp7bDp7MTAzOntsOns5Nzp7bDp7NTk6e2M6WzkzN119fX19fX19LDEwNTp7bDp7OTk6e2w6ezExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls5MjddfX19fX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTM0XX19fX19fX0sMTEyOntsOnsxMDE6e2w6ezExMDp7bDp7Njc6e2w6ezExNzp7bDp7MTE0OntsOnsxMDg6e2w6ezEyMTp7bDp7Njg6e2w6ezExMTp7bDp7MTE3OntsOns5ODp7bDp7MTA4OntsOnsxMDE6e2w6ezgxOntsOnsxMTc6e2w6ezExMTp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOls4MjIwXX19fX19fX19fX19fX19fX19fX19fX19LDgxOntsOnsxMTc6e2w6ezExMTp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOls4MjE2XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTQ6e2w6ezU5OntjOlsxMDgzNl19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTc4XX19fX19LDEwODp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbMjE2XX19LGM6WzIxNl19fX19fX19fX0sMTE2OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOlsyMTNdfX0sYzpbMjEzXX19fX19LDEwOTp7bDp7MTAxOntsOnsxMTU6e2w6ezU5OntjOlsxMDgwN119fX19fX19fX19fSwxMTc6e2w6ezEwOTp7bDp7MTA4OntsOns1OTp7YzpbMjE0XX19LGM6WzIxNF19fX19fSwxMTg6e2w6ezEwMTp7bDp7MTE0OntsOns2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzgyNTRdfX19fX0sMTE0OntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6WzkxODJdfX19LDEwNzp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls5MTQwXX19fX19fX19fX19fX19fSw4MDp7bDp7OTc6e2w6ezExNDp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7MTA0OntsOnsxMDE6e2w6ezExNTp7bDp7MTA1OntsOnsxMTU6e2w6ezU5OntjOls5MTgwXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sODA6e2w6ezk3OntsOnsxMTQ6e2w6ezExNjp7bDp7MTA1OntsOns5Nzp7bDp7MTA4OntsOns2ODp7bDp7NTk6e2M6Wzg3MDZdfX19fX19fX19fX19fX19LDk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDU1XX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDgzXX19fX19LDEwNDp7bDp7MTA1OntsOns1OTp7YzpbOTM0XX19fX19LDEwNTp7bDp7NTk6e2M6WzkyOF19fX0sMTA4OntsOnsxMTc6e2w6ezExNTp7bDp7Nzc6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6WzE3N119fX19fX19fX19fX19fX19fSwxMTE6e2w6ezEwNTp7bDp7MTEwOntsOns5OTp7bDp7OTc6e2w6ezExNDp7bDp7MTAxOntsOnsxMTI6e2w6ezEwODp7bDp7OTc6e2w6ezExMDp7bDp7MTAxOntsOns1OTp7YzpbODQ2MF19fX19fX19fX19fX19fX19fX19fX19fSwxMTI6e2w6ezEwMjp7bDp7NTk6e2M6Wzg0NzNdfX19fX19fSwxMTQ6e2w6ezU5OntjOlsxMDkzOV19LDEwMTp7bDp7OTk6e2w6ezEwMTp7bDp7MTAwOntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6Wzg4MjZdfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOlsxMDkyN119fX19fX19fX19fSw4Mzp7bDp7MTA4OntsOns5Nzp7bDp7MTEwOntsOnsxMTY6e2w6ezY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg4MjhdfX19fX19fX19fX19fX19fX19fX19LDg0OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOls4ODMwXX19fX19fX19fX19fX19fX19fX19fX19LDEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezU5OntjOls4MjQzXX19fX19fX0sMTExOntsOnsxMDA6e2w6ezExNzp7bDp7OTk6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MTldfX19fX19fX19LDExMjp7bDp7MTExOntsOnsxMTQ6e2w6ezExNjp7bDp7MTA1OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6Wzg3NTldfSw5Nzp7bDp7MTA4OntsOns1OTp7YzpbODczM119fX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5NzldfX19fX0sMTA1OntsOns1OTp7YzpbOTM2XX19fX19fX0sODE6e2w6ezg1OntsOns3OTp7bDp7ODQ6e2w6ezU5OntjOlszNF19fSxjOlszNF19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA4NF19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbODQ3NF19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk4MF19fX19fX19fX0sODI6e2w6ezY2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDUxMl19fX19fX19fX0sNjk6e2w6ezcxOntsOns1OTp7YzpbMTc0XX19LGM6WzE3NF19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMzQwXX19fX19fX19fSwxMTA6e2w6ezEwMzp7bDp7NTk6e2M6WzEwMjE5XX19fX19LDExNDp7bDp7MTE0OntsOns1OTp7YzpbODYwOF19LDExNjp7bDp7MTA4OntsOns1OTp7YzpbMTA1MThdfX19fX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzQ0XX19fX19fX19fSwxMDE6e2w6ezEwMDp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOlszNDJdfX19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNTZdfX19fX0sMTAxOntsOns1OTp7YzpbODQ3Nl19LDExODp7bDp7MTAxOntsOnsxMTQ6e2w6ezExNTp7bDp7MTAxOntsOns2OTp7bDp7MTA4OntsOnsxMDE6e2w6ezEwOTp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MTVdfX19fX19fX19fX19fSwxMTM6e2w6ezExNzp7bDp7MTA1OntsOnsxMDg6e2w6ezEwNTp7bDp7OTg6e2w6ezExNDp7bDp7MTA1OntsOnsxMTc6e2w6ezEwOTp7bDp7NTk6e2M6Wzg2NTFdfX19fX19fX19fX19fX19fX19fX19fX0sODU6e2w6ezExMjp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOnsxMDU6e2w6ezEwODp7bDp7MTA1OntsOns5ODp7bDp7MTE0OntsOnsxMDU6e2w6ezExNzp7bDp7MTA5OntsOns1OTp7YzpbMTA2MDddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbODQ3Nl19fX19fSwxMDQ6e2w6ezExMTp7bDp7NTk6e2M6WzkyOV19fX19fSwxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezY1OntsOnsxMTA6e2w6ezEwMzp7bDp7MTA4OntsOnsxMDE6e2w6ezY2OntsOnsxMTQ6e2w6ezk3OntsOns5OTp7bDp7MTA3OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6WzEwMjE3XX19fX19fX19fX19fX19fX19fX19fX19LDExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTRdfSw2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NzddfX19fX19fSw3Njp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NDRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sNjc6e2w6ezEwMTp7bDp7MTA1OntsOnsxMDg6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDM6e2w6ezU5OntjOls4OTY5XX19fX19fX19fX19fX19fSw2ODp7bDp7MTExOntsOnsxMTc6e2w6ezk4OntsOnsxMDg6e2w6ezEwMTp7bDp7NjY6e2w6ezExNDp7bDp7OTc6e2w6ezk5OntsOnsxMDc6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbMTAyMTVdfX19fX19fX19fX19fX19fX19fX19fX0sMTE5OntsOnsxMTA6e2w6ezg0OntsOnsxMDE6e2w6ezEwMTp7bDp7ODY6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOlsxMDU4OV19fX19fX19fX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbODY0Ml19LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1ODFdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDcwOntsOnsxMDg6e2w6ezExMTp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOls4OTcxXX19fX19fX19fX19LDg0OntsOnsxMDE6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4NjZdfSw2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODYxNF19fX19fX19fX19fSw4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTg3XX19fX19fX19fX19fX19fX19LDExNDp7bDp7MTA1OntsOns5Nzp7bDp7MTEwOntsOnsxMDM6e2w6ezEwODp7bDp7MTAxOntsOns1OTp7YzpbODg4M119LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA3MDRdfX19fX19fSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODg1XX19fX19fX19fX19fX19fX19fX19fX19fX19fSw4NTp7bDp7MTEyOntsOns2ODp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7ODY6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOlsxMDU3NV19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwMTp7bDp7MTAxOntsOns4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTg4XX19fX19fX19fX19fX19fX19fX0sODY6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOls4NjM4XX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU4MF19fX19fX19fX19fX19fX19fX19fX19fSw4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NDBdfSw2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTc5XX19fX19fX19fX19fX19fX19fX0sOTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NThdfX19fX19fX19fX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbODQ3N119fX19fSwxMTc6e2w6ezExMDp7bDp7MTAwOntsOns3Mzp7bDp7MTA5OntsOnsxMTI6e2w6ezEwODp7bDp7MTA1OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6WzEwNjA4XX19fX19fX19fX19fX19fX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY2N119fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbODQ3NV19fX19fSwxMDQ6e2w6ezU5OntjOls4NjI1XX19fX19LDExNzp7bDp7MTA4OntsOnsxMDE6e2w6ezY4OntsOnsxMDE6e2w6ezEwODp7bDp7OTc6e2w6ezEyMTp7bDp7MTAxOntsOnsxMDA6e2w6ezU5OntjOlsxMDc0MF19fX19fX19fX19fX19fX19fX19fX19fSw4Mzp7bDp7NzI6e2w6ezY3OntsOns3Mjp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNjVdfX19fX19fX19LDk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDY0XX19fX19fX0sNzk6e2w6ezcwOntsOns4NDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNjhdfX19fX19fX19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMzQ2XX19fX19fX19fX19LDk5OntsOns1OTp7YzpbMTA5NDBdfSw5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzM1Ml19fX19fX19fX0sMTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMzUwXX19fX19fX19fSwxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlszNDhdfX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDU3XX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDg2XX19fX19LDEwNDp7bDp7MTExOntsOnsxMTQ6e2w6ezExNjp7bDp7Njg6e2w6ezExMTp7bDp7MTE5OntsOnsxMTA6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTk1XX19fX19fX19fX19fX19fX19fX0sNzY6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTkyXX19fX19fX19fX19fX19fX19fX0sODI6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTRdfX19fX19fX19fX19fX19fX19fX19LDg1OntsOnsxMTI6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTkzXX19fX19fX19fX19fX19fX19fX19fX19LDEwNTp7bDp7MTAzOntsOnsxMDk6e2w6ezk3OntsOns1OTp7YzpbOTMxXX19fX19fX19fSwxMDk6e2w6ezk3OntsOnsxMDg6e2w6ezEwODp7bDp7Njc6e2w6ezEwNTp7bDp7MTE0OntsOns5OTp7bDp7MTA4OntsOnsxMDE6e2w6ezU5OntjOls4NzI4XX19fX19fX19fX19fX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTM4XX19fX19fX0sMTEzOntsOnsxMTQ6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MzBdfX19fX0sMTE3OntsOns5Nzp7bDp7MTE0OntsOnsxMDE6e2w6ezU5OntjOls5NjMzXX0sNzM6e2w6ezExMDp7bDp7MTE2OntsOnsxMDE6e2w6ezExNDp7bDp7MTE1OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezEwNTp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls4ODUxXX19fX19fX19fX19fX19fX19fX19fX19fX0sODM6e2w6ezExNzp7bDp7OTg6e2w6ezExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4ODQ3XX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODg0OV19fX19fX19fX19fX19fX19fX19LDExMjp7bDp7MTAxOntsOnsxMTQ6e2w6ezExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4ODQ4XX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODg1MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sODU6e2w6ezExMDp7bDp7MTA1OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6Wzg4NTJdfX19fX19fX19fX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk4Ml19fX19fX19LDExNjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6Wzg5MDJdfX19fX19fSwxMTc6e2w6ezk4OntsOns1OTp7YzpbODkxMl19LDExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4OTEyXX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODgzOF19fX19fX19fX19fX19fX19fX19LDk5OntsOns5OTp7bDp7MTAxOntsOnsxMDE6e2w6ezEwMDp7bDp7MTE1OntsOns1OTp7YzpbODgyN119LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6WzEwOTI4XX19fX19fX19fX19LDgzOntsOnsxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezExNjp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODgyOV19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4MzFdfX19fX19fX19fX19fX19fX19fX19LDEwNDp7bDp7ODQ6e2w6ezEwNDp7bDp7OTc6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MTVdfX19fX19fX19fX19fSwxMDk6e2w6ezU5OntjOls4NzIxXX19fSwxMTI6e2w6ezU5OntjOls4OTEzXX0sMTAxOntsOnsxMTQ6e2w6ezExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4ODM1XX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODgzOV19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5MTNdfX19fX19fX19fX19fSw4NDp7bDp7NzI6e2w6ezc5OntsOns4Mjp7bDp7Nzg6e2w6ezU5OntjOlsyMjJdfX0sYzpbMjIyXX19fX19fX0sODI6e2w6ezY1OntsOns2ODp7bDp7Njk6e2w6ezU5OntjOls4NDgyXX19fX19fX19fSw4Mzp7bDp7NzI6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDM1XX19fX19fX0sOTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNjJdfX19fX19fSw5Nzp7bDp7OTg6e2w6ezU5OntjOls5XX19fSwxMTc6e2w6ezU5OntjOls5MzJdfX19fX0sOTk6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzU2XX19fX19fX19fSwxMDE6e2w6ezEwMDp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOlszNTRdfX19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNThdfX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwODddfX19fX0sMTA0OntsOnsxMDE6e2w6ezExNDp7bDp7MTAxOntsOnsxMDI6e2w6ezExMTp7bDp7MTE0OntsOnsxMDE6e2w6ezU5OntjOls4NzU2XX19fX19fX19fX19fX0sMTE2OntsOns5Nzp7bDp7NTk6e2M6WzkyMF19fX19fX19LDEwNTp7bDp7OTk6e2w6ezEwNzp7bDp7ODM6e2w6ezExMjp7bDp7OTc6e2w6ezk5OntsOnsxMDE6e2w6ezU5OntjOls4Mjg3LDgyMDJdfX19fX19fX19fX19fX19LDExMDp7bDp7ODM6e2w6ezExMjp7bDp7OTc6e2w6ezk5OntsOnsxMDE6e2w6ezU5OntjOls4MjAxXX19fX19fX19fX19fX19fX19LDEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NjRdfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4NzcxXX19fX19fX19fX19LDcwOntsOnsxMTc6e2w6ezEwODp7bDp7MTA4OntsOns2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4NzczXX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NzZdfX19fX19fX19fX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTM5XX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezExMjp7bDp7MTA4OntsOnsxMDE6e2w6ezY4OntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg0MTFdfX19fX19fX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTgzXX19fX19LDExNjp7bDp7MTE0OntsOnsxMTE6e2w6ezEwNzp7bDp7NTk6e2M6WzM1OF19fX19fX19fX19fX19LDg1OntsOns5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlsyMThdfX0sYzpbMjE4XX19fX19fX0sMTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjA3XX0sMTExOntsOns5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU2OV19fX19fX19fX19fX19fX0sOTg6e2w6ezExNDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwMzhdfX19fX0sMTAxOntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6WzM2NF19fX19fX19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMjE5XX19LGM6WzIxOV19fX19fSwxMjE6e2w6ezU5OntjOlsxMDU5XX19fX19LDEwMDp7bDp7OTg6e2w6ezEwODp7bDp7OTc6e2w6ezk5OntsOns1OTp7YzpbMzY4XX19fX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDg4XX19fX19LDEwMzp7bDp7MTE0OntsOns5Nzp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOlsyMTddfX0sYzpbMjE3XX19fX19fX19fSwxMDk6e2w6ezk3OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMzYyXX19fX19fX19fSwxMTA6e2w6ezEwMDp7bDp7MTAxOntsOnsxMTQ6e2w6ezY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbOTVdfX19fX0sMTE0OntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6WzkxODNdfX19LDEwNzp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls5MTQxXX19fX19fX19fX19fX19fSw4MDp7bDp7OTc6e2w6ezExNDp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7MTA0OntsOnsxMDE6e2w6ezExNTp7bDp7MTA1OntsOnsxMTU6e2w6ezU5OntjOls5MTgxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDEwNTp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls4ODk5XX0sODA6e2w6ezEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOls4ODQ2XX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTAzOntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzM3MF19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTQwXX19fX19fX0sMTEyOntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODU5M119LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1MTRdfX19fX19fSw2ODp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NDVdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sNjg6e2w6ezExMTp7bDp7MTE5OntsOnsxMTA6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTk3XX19fX19fX19fX19fX19fX19fX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOnsxMDU6e2w6ezEwODp7bDp7MTA1OntsOns5ODp7bDp7MTE0OntsOnsxMDU6e2w6ezExNzp7bDp7MTA5OntsOns1OTp7YzpbMTA2MDZdfX19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwMTp7bDp7MTAxOntsOns1OTp7YzpbODg2OV19LDY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjEzXX19fX19fX19fX19fX19fX19LDk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjU3XX19fX19fX19fX19LDEwMDp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NjFdfX19fX19fX19fX19fX19fX19fSwxMTI6e2w6ezEwMTp7bDp7MTE0OntsOns3Njp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OThdfX19fX19fX19fX19fX19fX19fSw4Mjp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODU5OV19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOnsxMDU6e2w6ezU5OntjOls5NzhdfSwxMDg6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbOTMzXX19fX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezExMDp7bDp7MTAzOntsOns1OTp7YzpbMzY2XX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5ODRdfX19fX19fSwxMTY6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6WzM2MF19fX19fX19fX19fSwxMTc6e2w6ezEwOTp7bDp7MTA4OntsOns1OTp7YzpbMjIwXX19LGM6WzIyMF19fX19fX19LDg2OntsOns2ODp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODg3NV19fX19fX19fX0sOTg6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDk4N119fX19fX19LDk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDQyXX19fX19LDEwMDp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODg3M119LDEwODp7bDp7NTk6e2M6WzEwOTgyXX19fX19fX19fX19LDEwMTp7bDp7MTAxOntsOns1OTp7YzpbODg5N119fX0sMTE0OntsOns5ODp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzgyMTRdfX19fX19fSwxMTY6e2w6ezU5OntjOls4MjE0XX0sMTA1OntsOns5OTp7bDp7OTc6e2w6ezEwODp7bDp7NjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOls4NzM5XX19fX19fX0sNzY6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDE6e2w6ezU5OntjOlsxMjRdfX19fX19fX19LDgzOntsOnsxMDE6e2w6ezExMjp7bDp7OTc6e2w6ezExNDp7bDp7OTc6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOlsxMDA3Ml19fX19fX19fX19fX19fX19fX19LDg0OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOls4NzY4XX19fX19fX19fX19fX19fX19fX19fSwxMjE6e2w6ezg0OntsOnsxMDQ6e2w6ezEwNTp7bDp7MTEwOntsOns4Mzp7bDp7MTEyOntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6WzgyMDJdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA4OV19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTQxXX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTg1XX19fX19fX0sMTE4OntsOnsxMDA6e2w6ezk3OntsOnsxMTU6e2w6ezEwNDp7bDp7NTk6e2M6Wzg4NzRdfX19fX19fX19fX19fSw4Nzp7bDp7OTk6e2w6ezEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzM3Ml19fX19fX19fX0sMTAxOntsOnsxMDA6e2w6ezEwMzp7bDp7MTAxOntsOns1OTp7YzpbODg5Nl19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwOTBdfX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE0Ml19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk4Nl19fX19fX19fX0sODg6e2w6ezEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDkxXX19fX19LDEwNTp7bDp7NTk6e2M6WzkyNl19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE0M119fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk4N119fX19fX19fX0sODk6e2w6ezY1OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA3MV19fX19fX19LDczOntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTAzMV19fX19fX19LDg1OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA3MF19fX19fX19LDk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzIyMV19fSxjOlsyMjFdfX19fX19fX19LDk5OntsOnsxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlszNzRdfX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDY3XX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDkyXX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNDRdfX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5ODhdfX19fX19fSwxMTc6e2w6ezEwOTp7bDp7MTA4OntsOns1OTp7YzpbMzc2XX19fX19fX19fSw5MDp7bDp7NzI6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDQ2XX19fX19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMzc3XX19fX19fX19fX19LDk5OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzM4MV19fX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA0N119fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMzc5XX19fX19fX0sMTAxOntsOnsxMTQ6e2w6ezExMTp7bDp7ODc6e2w6ezEwNTp7bDp7MTAwOntsOnsxMTY6e2w6ezEwNDp7bDp7ODM6e2w6ezExMjp7bDp7OTc6e2w6ezk5OntsOnsxMDE6e2w6ezU5OntjOls4MjAzXX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE2OntsOns5Nzp7bDp7NTk6e2M6WzkxOF19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbODQ4OF19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbODQ4NF19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk4OV19fX19fX19fX0sOTc6e2w6ezk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzIyNV19fSxjOlsyMjVdfX19fX19fX19LDk4OntsOnsxMTQ6e2w6ezEwMTp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOlsyNTldfX19fX19fX19fX0sOTk6e2w6ezU5OntjOls4NzY2XX0sNjk6e2w6ezU5OntjOls4NzY2LDgxOV19fX0sMTAwOntsOns1OTp7YzpbODc2N119fX0sMTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMjI2XX19LGM6WzIyNl19fX19fSwxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMTgwXX19LGM6WzE4MF19fX19fSwxMjE6e2w6ezU5OntjOlsxMDcyXX19fX19LDEwMTp7bDp7MTA4OntsOnsxMDU6e2w6ezEwMzp7bDp7NTk6e2M6WzIzMF19fSxjOlsyMzBdfX19fX19fSwxMDI6e2w6ezU5OntjOls4Mjg5XX0sMTE0OntsOns1OTp7YzpbMTIwMDk0XX19fX19LDEwMzp7bDp7MTE0OntsOns5Nzp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOlsyMjRdfX0sYzpbMjI0XX19fX19fX19fSwxMDg6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTU6e2w6ezEyMTp7bDp7MTA5OntsOns1OTp7YzpbODUwMV19fX19fX19fX0sMTEyOntsOnsxMDQ6e2w6ezU5OntjOls4NTAxXX19fX19fX0sMTEyOntsOnsxMDQ6e2w6ezk3OntsOns1OTp7YzpbOTQ1XX19fX19fX19fSwxMDk6e2w6ezk3OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMjU3XX19fX19LDEwODp7bDp7MTAzOntsOns1OTp7YzpbMTA4MTVdfX19fX19fSwxMTI6e2w6ezU5OntjOlszOF19fSxjOlszOF19fX0sMTEwOntsOnsxMDA6e2w6ezU5OntjOls4NzQzXX0sOTc6e2w6ezExMDp7bDp7MTAwOntsOns1OTp7YzpbMTA4MzddfX19fX19fSwxMDA6e2w6ezU5OntjOlsxMDg0NF19fX0sMTE1OntsOnsxMDg6e2w6ezExMTp7bDp7MTEyOntsOnsxMDE6e2w6ezU5OntjOlsxMDg0MF19fX19fX19fX19fSwxMTg6e2w6ezU5OntjOlsxMDg0Ml19fX19fSwxMDM6e2w6ezU5OntjOls4NzM2XX0sMTAxOntsOns1OTp7YzpbMTA2NjBdfX19LDEwODp7bDp7MTAxOntsOns1OTp7YzpbODczNl19fX19fSwxMDk6e2w6ezExNTp7bDp7MTAwOntsOns1OTp7YzpbODczN119LDk3OntsOns5Nzp7bDp7NTk6e2M6WzEwNjY0XX19fSw5ODp7bDp7NTk6e2M6WzEwNjY1XX19fSw5OTp7bDp7NTk6e2M6WzEwNjY2XX19fSwxMDA6e2w6ezU5OntjOlsxMDY2N119fX0sMTAxOntsOns1OTp7YzpbMTA2NjhdfX19LDEwMjp7bDp7NTk6e2M6WzEwNjY5XX19fSwxMDM6e2w6ezU5OntjOlsxMDY3MF19fX0sMTA0OntsOns1OTp7YzpbMTA2NzFdfX19fX19fX19fX0sMTE0OntsOnsxMTY6e2w6ezU5OntjOls4NzM1XX0sMTE4OntsOns5ODp7bDp7NTk6e2M6Wzg4OTRdfSwxMDA6e2w6ezU5OntjOlsxMDY1M119fX19fX19fX19fSwxMTU6e2w6ezExMjp7bDp7MTA0OntsOns1OTp7YzpbODczOF19fX19fSwxMTY6e2w6ezU5OntjOlsxOTddfX19fX0sMTIyOntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls5MDg0XX19fX19fX19fX19fX0sMTExOntsOnsxMDM6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMjYxXX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNDZdfX19fX19fSwxMTI6e2w6ezU5OntjOls4Nzc2XX0sNjk6e2w6ezU5OntjOlsxMDg2NF19fX0sOTc6e2w6ezk5OntsOnsxMDU6e2w6ezExNDp7bDp7NTk6e2M6WzEwODYzXX19fX19fX19fSwxMDE6e2w6ezU5OntjOls4Nzc4XX19fSwxMDU6e2w6ezEwMDp7bDp7NTk6e2M6Wzg3NzldfX19fX0sMTExOntsOnsxMTU6e2w6ezU5OntjOlszOV19fX19fSwxMTI6e2w6ezExNDp7bDp7MTExOntsOnsxMjA6e2w6ezU5OntjOls4Nzc2XX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4Nzc4XX19fX19fX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDM6e2w6ezU5OntjOlsyMjldfX0sYzpbMjI5XX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTkwXX19fX19LDExNjp7bDp7NTk6e2M6WzQyXX19fSwxMjE6e2w6ezEwOTp7bDp7MTEyOntsOns1OTp7YzpbODc3Nl19LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbODc4MV19fX19fX19fX19fX19LDExNjp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbMjI3XX19LGM6WzIyN119fX19fX19fX0sMTE3OntsOnsxMDk6e2w6ezEwODp7bDp7NTk6e2M6WzIyOF19fSxjOlsyMjhdfX19fX0sMTE5OntsOns5OTp7bDp7MTExOntsOnsxMTA6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOls4NzU1XX19fX19fX19fX19fX0sMTA1OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6WzEwNzY5XX19fX19fX19fX19LDk4OntsOns3ODp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDk4OV19fX19fX19LDk3OntsOns5OTp7bDp7MTA3OntsOns5OTp7bDp7MTExOntsOnsxMTA6e2w6ezEwMzp7bDp7NTk6e2M6Wzg3ODBdfX19fX19fX19LDEwMTp7bDp7MTEyOntsOnsxMTU6e2w6ezEwNTp7bDp7MTA4OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzEwMTRdfX19fX19fX19fX19fX19LDExMjp7bDp7MTE0OntsOnsxMDU6e2w6ezEwOTp7bDp7MTAxOntsOns1OTp7YzpbODI0NV19fX19fX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODc2NV19LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbODkwOV19fX19fX19fX19fX19fX0sMTE0OntsOnsxMTg6e2w6ezEwMTp7bDp7MTAxOntsOns1OTp7YzpbODg5M119fX19fX19LDExOTp7bDp7MTAxOntsOnsxMDA6e2w6ezU5OntjOls4OTY1XX0sMTAzOntsOnsxMDE6e2w6ezU5OntjOls4OTY1XX19fX19fX19fX19fX19fSw5ODp7bDp7MTE0OntsOnsxMDc6e2w6ezU5OntjOls5MTQxXX0sMTE2OntsOns5ODp7bDp7MTE0OntsOnsxMDc6e2w6ezU5OntjOls5MTQyXX19fX19fX19fX19fX19fSw5OTp7bDp7MTExOntsOnsxMTA6e2w6ezEwMzp7bDp7NTk6e2M6Wzg3ODBdfX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDczXX19fX19LDEwMDp7bDp7MTEzOntsOnsxMTc6e2w6ezExMTp7bDp7NTk6e2M6WzgyMjJdfX19fX19fX19LDEwMTp7bDp7OTk6e2w6ezk3OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6Wzg3NTddfSwxMDE6e2w6ezU5OntjOls4NzU3XX19fX19fX19fX19LDEwOTp7bDp7MTEyOntsOnsxMTY6e2w6ezEyMTp7bDp7MTE4OntsOns1OTp7YzpbMTA2NzJdfX19fX19fX19fX0sMTEyOntsOnsxMTU6e2w6ezEwNTp7bDp7NTk6e2M6WzEwMTRdfX19fX19fSwxMTQ6e2w6ezExMDp7bDp7MTExOntsOnsxMTc6e2w6ezU5OntjOls4NDkyXX19fX19fX19fSwxMTY6e2w6ezk3OntsOns1OTp7YzpbOTQ2XX19fSwxMDQ6e2w6ezU5OntjOls4NTAyXX19fSwxMTk6e2w6ezEwMTp7bDp7MTAxOntsOnsxMTA6e2w6ezU5OntjOls4ODEyXX19fX19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwOTVdfX19fX0sMTA1OntsOnsxMDM6e2w6ezk5OntsOns5Nzp7bDp7MTEyOntsOns1OTp7YzpbODg5OF19fX19fSwxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOls5NzExXX19fX19fX0sMTE3OntsOnsxMTI6e2w6ezU5OntjOls4ODk5XX19fX19fX0sMTExOntsOnsxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTA3NTJdfX19fX19fSwxMTI6e2w6ezEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOlsxMDc1M119fX19fX19fX0sMTE2OntsOnsxMDU6e2w6ezEwOTp7bDp7MTAxOntsOnsxMTU6e2w6ezU5OntjOlsxMDc1NF19fX19fX19fX19fX19LDExNTp7bDp7MTEzOntsOns5OTp7bDp7MTE3OntsOnsxMTI6e2w6ezU5OntjOlsxMDc1OF19fX19fX19fX0sMTE2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbOTczM119fX19fX19fX0sMTE2OntsOnsxMTQ6e2w6ezEwNTp7bDp7OTc6e2w6ezExMDp7bDp7MTAzOntsOnsxMDg6e2w6ezEwMTp7bDp7MTAwOntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns1OTp7YzpbOTY2MV19fX19fX19fX0sMTE3OntsOnsxMTI6e2w6ezU5OntjOls5NjUxXX19fX19fX19fX19fX19fX19fX19fSwxMTc6e2w6ezExMjp7bDp7MTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6WzEwNzU2XX19fX19fX19fX19LDExODp7bDp7MTAxOntsOnsxMDE6e2w6ezU5OntjOls4ODk3XX19fX19fX0sMTE5OntsOnsxMDE6e2w6ezEwMDp7bDp7MTAzOntsOnsxMDE6e2w6ezU5OntjOls4ODk2XX19fX19fX19fX19fX19fSwxMDc6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTA1MDldfX19fX19fX19fX0sMTA4OntsOns5Nzp7bDp7OTk6e2w6ezEwNzp7bDp7MTA4OntsOnsxMTE6e2w6ezEyMjp7bDp7MTAxOntsOnsxMTA6e2w6ezEwMzp7bDp7MTAxOntsOns1OTp7YzpbMTA3MzFdfX19fX19fX19fX19fX19LDExNTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMTQ6e2w6ezEwMTp7bDp7NTk6e2M6Wzk2NDJdfX19fX19fX19fX19fSwxMTY6e2w6ezExNDp7bDp7MTA1OntsOns5Nzp7bDp7MTEwOntsOnsxMDM6e2w6ezEwODp7bDp7MTAxOntsOns1OTp7YzpbOTY1Ml19LDEwMDp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7NTk6e2M6Wzk2NjJdfX19fX19fX19LDEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NTk6e2M6Wzk2NjZdfX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns1OTp7YzpbOTY1Nl19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExMDp7bDp7MTA3OntsOns1OTp7YzpbOTI1MV19fX19fX19LDEwNzp7bDp7NDk6e2w6ezUwOntsOns1OTp7YzpbOTYxOF19fX0sNTI6e2w6ezU5OntjOls5NjE3XX19fX19LDUxOntsOns1Mjp7bDp7NTk6e2M6Wzk2MTldfX19fX19fSwxMTE6e2w6ezk5OntsOnsxMDc6e2w6ezU5OntjOls5NjA4XX19fX19fX19fSwxMTA6e2w6ezEwMTp7bDp7NTk6e2M6WzYxLDg0MjFdfSwxMTM6e2w6ezExNzp7bDp7MTA1OntsOnsxMTg6e2w6ezU5OntjOls4ODAxLDg0MjFdfX19fX19fX19fX0sMTExOntsOnsxMTY6e2w6ezU5OntjOls4OTc2XX19fX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE0N119fX19fSwxMTY6e2w6ezU5OntjOls4ODY5XX0sMTE2OntsOnsxMTE6e2w6ezEwOTp7bDp7NTk6e2M6Wzg4NjldfX19fX19fX19LDExOTp7bDp7MTE2OntsOnsxMDU6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5MDRdfX19fX19fX19LDEyMDp7bDp7Njg6e2w6ezc2OntsOns1OTp7YzpbOTU1OV19fX0sODI6e2w6ezU5OntjOls5NTU2XX19fSwxMDg6e2w6ezU5OntjOls5NTU4XX19fSwxMTQ6e2w6ezU5OntjOls5NTU1XX19fX19LDcyOntsOns1OTp7YzpbOTU1Ml19LDY4OntsOns1OTp7YzpbOTU3NF19fX0sODU6e2w6ezU5OntjOls5NTc3XX19fSwxMDA6e2w6ezU5OntjOls5NTcyXX19fSwxMTc6e2w6ezU5OntjOls5NTc1XX19fX19LDg1OntsOns3Njp7bDp7NTk6e2M6Wzk1NjVdfX19LDgyOntsOns1OTp7YzpbOTU2Ml19fX0sMTA4OntsOns1OTp7YzpbOTU2NF19fX0sMTE0OntsOns1OTp7YzpbOTU2MV19fX19fSw4Njp7bDp7NTk6e2M6Wzk1NTNdfSw3Mjp7bDp7NTk6e2M6Wzk1ODBdfX19LDc2OntsOns1OTp7YzpbOTU3MV19fX0sODI6e2w6ezU5OntjOls5NTY4XX19fSwxMDQ6e2w6ezU5OntjOls5NTc5XX19fSwxMDg6e2w6ezU5OntjOls5NTcwXX19fSwxMTQ6e2w6ezU5OntjOls5NTY3XX19fX19LDk4OntsOnsxMTE6e2w6ezEyMDp7bDp7NTk6e2M6WzEwNjk3XX19fX19fX0sMTAwOntsOns3Njp7bDp7NTk6e2M6Wzk1NTddfX19LDgyOntsOns1OTp7YzpbOTU1NF19fX0sMTA4OntsOns1OTp7YzpbOTQ4OF19fX0sMTE0OntsOns1OTp7YzpbOTQ4NF19fX19fSwxMDQ6e2w6ezU5OntjOls5NDcyXX0sNjg6e2w6ezU5OntjOls5NTczXX19fSw4NTp7bDp7NTk6e2M6Wzk1NzZdfX19LDEwMDp7bDp7NTk6e2M6Wzk1MTZdfX19LDExNzp7bDp7NTk6e2M6Wzk1MjRdfX19fX0sMTA5OntsOnsxMDU6e2w6ezExMDp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOls4ODYzXX19fX19fX19fX19LDExMjp7bDp7MTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6Wzg4NjJdfX19fX19fX19LDExNjp7bDp7MTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbODg2NF19fX19fX19fX19fSwxMTc6e2w6ezc2OntsOns1OTp7YzpbOTU2M119fX0sODI6e2w6ezU5OntjOls5NTYwXX19fSwxMDg6e2w6ezU5OntjOls5NDk2XX19fSwxMTQ6e2w6ezU5OntjOls5NDkyXX19fX19LDExODp7bDp7NTk6e2M6Wzk0NzRdfSw3Mjp7bDp7NTk6e2M6Wzk1NzhdfX19LDc2OntsOns1OTp7YzpbOTU2OV19fX0sODI6e2w6ezU5OntjOls5NTY2XX19fSwxMDQ6e2w6ezU5OntjOls5NTMyXX19fSwxMDg6e2w6ezU5OntjOls5NTA4XX19fSwxMTQ6e2w6ezU5OntjOls5NTAwXX19fX19fX19fSwxMTI6e2w6ezExNDp7bDp7MTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7NTk6e2M6WzgyNDVdfX19fX19fX19fX0sMTE0OntsOnsxMDE6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbNzI4XX19fX19fX0sMTE4OntsOns5ODp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzE2Nl19fSxjOlsxNjZdfX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk5MV19fX19fSwxMDE6e2w6ezEwOTp7bDp7MTA1OntsOns1OTp7YzpbODI3MV19fX19fX19LDEwNTp7bDp7MTA5OntsOns1OTp7YzpbODc2NV19LDEwMTp7bDp7NTk6e2M6Wzg5MDldfX19fX19fSwxMTE6e2w6ezEwODp7bDp7NTk6e2M6WzkyXX0sOTg6e2w6ezU5OntjOlsxMDY5M119fX0sMTA0OntsOnsxMTU6e2w6ezExNzp7bDp7OTg6e2w6ezU5OntjOlsxMDE4NF19fX19fX19fX19fX19fX0sMTE3OntsOnsxMDg6e2w6ezEwODp7bDp7NTk6e2M6WzgyMjZdfSwxMDE6e2w6ezExNjp7bDp7NTk6e2M6WzgyMjZdfX19fX19fX19LDEwOTp7bDp7MTEyOntsOns1OTp7YzpbODc4Ml19LDY5OntsOns1OTp7YzpbMTA5MjZdfX19LDEwMTp7bDp7NTk6e2M6Wzg3ODNdfSwxMTM6e2w6ezU5OntjOls4NzgzXX19fX19fX19fX19fX0sOTk6e2w6ezk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzI2M119fX19fX19fX0sMTEyOntsOns1OTp7YzpbODc0NV19LDk3OntsOnsxMTA6e2w6ezEwMDp7bDp7NTk6e2M6WzEwODIwXX19fX19fX0sOTg6e2w6ezExNDp7bDp7OTk6e2w6ezExNzp7bDp7MTEyOntsOns1OTp7YzpbMTA4MjVdfX19fX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTI6e2w6ezU5OntjOlsxMDgyN119fX19fSwxMTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwODIzXX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzEwODE2XX19fX19fX0sMTE1OntsOns1OTp7YzpbODc0NSw2NTAyNF19fX19fSwxMTQ6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbODI1N119fX19fSwxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzcxMV19fX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTI6e2w6ezExNTp7bDp7NTk6e2M6WzEwODI5XX19fX19LDExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlsyNjldfX19fX19fX19LDEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzIzMV19fSxjOlsyMzFdfX19fX19fSwxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsyNjVdfX19fX19fSwxMTc6e2w6ezExMjp7bDp7MTE1OntsOns1OTp7YzpbMTA4MjhdfSwxMTU6e2w6ezEwOTp7bDp7NTk6e2M6WzEwODMyXX19fX19fX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzI2N119fX19fX19LDEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzE4NF19fSxjOlsxODRdfX19fX0sMTA5OntsOnsxMTI6e2w6ezExNjp7bDp7MTIxOntsOnsxMTg6e2w6ezU5OntjOlsxMDY3NF19fX19fX19fX19fSwxMTA6e2w6ezExNjp7bDp7NTk6e2M6WzE2Ml19LDEwMTp7bDp7MTE0OntsOnsxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTgzXX19fX19fX19fX19fSxjOlsxNjJdfX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwOTZdfX19fX0sMTA0OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA5NV19fX19fSwxMDE6e2w6ezk5OntsOnsxMDc6e2w6ezU5OntjOlsxMDAwM119LDEwOTp7bDp7OTc6e2w6ezExNDp7bDp7MTA3OntsOns1OTp7YzpbMTAwMDNdfX19fX19fX19fX19fX19LDEwNTp7bDp7NTk6e2M6Wzk2N119fX19fSwxMDU6e2w6ezExNDp7bDp7NTk6e2M6Wzk2NzVdfSw2OTp7bDp7NTk6e2M6WzEwNjkxXX19fSw5OTp7bDp7NTk6e2M6WzcxMF19LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbODc5MV19fX19fSwxMDg6e2w6ezEwMTp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7MTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns1OTp7YzpbODYzNF19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOls4NjM1XX19fX19fX19fX19fX19fX19fX19fSwxMDA6e2w6ezgyOntsOns1OTp7YzpbMTc0XX19fSw4Mzp7bDp7NTk6e2M6Wzk0MTZdfX19LDk3OntsOnsxMTU6e2w6ezExNjp7bDp7NTk6e2M6Wzg4NTldfX19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbODg1OF19fX19fX19fX0sMTAwOntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4ODYxXX19fX19fX19fX19fX19fX19LDEwMTp7bDp7NTk6e2M6Wzg3OTFdfX19LDEwMjp7bDp7MTEwOntsOnsxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA3NjhdfX19fX19fX19fX0sMTA5OntsOnsxMDU6e2w6ezEwMDp7bDp7NTk6e2M6WzEwOTkxXX19fX19fX0sMTE1OntsOns5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezU5OntjOlsxMDY5MF19fX19fX19fX19fX19LDEwODp7bDp7MTE3OntsOns5ODp7bDp7MTE1OntsOns1OTp7YzpbOTgyN119LDExNzp7bDp7MTA1OntsOnsxMTY6e2w6ezU5OntjOls5ODI3XX19fX19fX19fX19fX19fSwxMTE6e2w6ezEwODp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls1OF19LDEwMTp7bDp7NTk6e2M6Wzg3ODhdfSwxMTM6e2w6ezU5OntjOls4Nzg4XX19fX19fX19fX19LDEwOTp7bDp7MTA5OntsOns5Nzp7bDp7NTk6e2M6WzQ0XX0sMTE2OntsOns1OTp7YzpbNjRdfX19fX19fSwxMTI6e2w6ezU5OntjOls4NzA1XX0sMTAyOntsOnsxMTA6e2w6ezU5OntjOls4NzI4XX19fX19LDEwODp7bDp7MTAxOntsOnsxMDk6e2w6ezEwMTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOls4NzA1XX19fX19fX19fSwxMjA6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbODQ1MF19fX19fX19fX19fX19fX0sMTEwOntsOnsxMDM6e2w6ezU5OntjOls4NzczXX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzEwODYxXX19fX19fX19fSwxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbODc1MF19fX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNDhdfX19LDExNDp7bDp7MTExOntsOnsxMDA6e2w6ezU5OntjOls4NzIwXX19fX19fX0sMTIxOntsOns1OTp7YzpbMTY5XX0sMTE1OntsOnsxMTQ6e2w6ezU5OntjOls4NDcxXX19fX19fSxjOlsxNjldfX19fX0sMTE0OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjI5XX19fX19fX0sMTExOntsOnsxMTU6e2w6ezExNTp7bDp7NTk6e2M6WzEwMDA3XX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5OTJdfX19fX0sMTE3OntsOns5ODp7bDp7NTk6e2M6WzEwOTU5XX0sMTAxOntsOns1OTp7YzpbMTA5NjFdfX19fX0sMTEyOntsOns1OTp7YzpbMTA5NjBdfSwxMDE6e2w6ezU5OntjOlsxMDk2Ml19fX19fX19fX0sMTE2OntsOnsxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODk0M119fX19fX19fX0sMTE3OntsOnsxMDA6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTA4OntsOns1OTp7YzpbMTA1NTJdfX19LDExNDp7bDp7NTk6e2M6WzEwNTQ5XX19fX19fX19fX19LDEwMTp7bDp7MTEyOntsOnsxMTQ6e2w6ezU5OntjOls4OTI2XX19fX19LDExNTp7bDp7OTk6e2w6ezU5OntjOls4OTI3XX19fX19fX0sMTA4OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjMwXX0sMTEyOntsOns1OTp7YzpbMTA1NTddfX19fX19fX19fX0sMTEyOntsOns1OTp7YzpbODc0Nl19LDk4OntsOnsxMTQ6e2w6ezk5OntsOns5Nzp7bDp7MTEyOntsOns1OTp7YzpbMTA4MjRdfX19fX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTI6e2w6ezU5OntjOlsxMDgyMl19fX19fSwxMTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwODI2XX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg4NDVdfX19fX19fSwxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwODIxXX19fX19LDExNTp7bDp7NTk6e2M6Wzg3NDYsNjUwMjRdfX19fX0sMTE0OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjMxXX0sMTA5OntsOns1OTp7YzpbMTA1NTZdfX19fX19fX19LDEwODp7bDp7MTIxOntsOnsxMDE6e2w6ezExMzp7bDp7MTEyOntsOnsxMTQ6e2w6ezEwMTp7bDp7OTk6e2w6ezU5OntjOls4OTI2XX19fX19fX19fSwxMTU6e2w6ezExNzp7bDp7OTk6e2w6ezk5OntsOns1OTp7YzpbODkyN119fX19fX19fX19fX19LDExODp7bDp7MTAxOntsOnsxMDE6e2w6ezU5OntjOls4OTEwXX19fX19fX0sMTE5OntsOnsxMDE6e2w6ezEwMDp7bDp7MTAzOntsOnsxMDE6e2w6ezU5OntjOls4OTExXX19fX19fX19fX19fX19fSwxMTQ6e2w6ezEwMTp7bDp7MTEwOntsOns1OTp7YzpbMTY0XX19LGM6WzE2NF19fX19fSwxMTg6e2w6ezEwMTp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7MTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns1OTp7YzpbODYzMF19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOls4NjMxXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTg6e2w6ezEwMTp7bDp7MTAxOntsOns1OTp7YzpbODkxMF19fX19fX19LDExOTp7bDp7MTAxOntsOnsxMDA6e2w6ezU5OntjOls4OTExXX19fX19fX19fSwxMTk6e2w6ezk5OntsOnsxMTE6e2w6ezExMDp7bDp7MTA1OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6Wzg3NTRdfX19fX19fX19fX19fSwxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbODc1M119fX19fX19fX0sMTIxOntsOnsxMDg6e2w6ezk5OntsOnsxMTY6e2w6ezEyMTp7bDp7NTk6e2M6WzkwMDVdfX19fX19fX19fX19fSwxMDA6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NTldfX19fX19fSw3Mjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTk3XX19fX19fX0sOTc6e2w6ezEwMzp7bDp7MTAzOntsOnsxMDE6e2w6ezExNDp7bDp7NTk6e2M6WzgyMjRdfX19fX19fX19LDEwODp7bDp7MTAxOntsOnsxMTY6e2w6ezEwNDp7bDp7NTk6e2M6Wzg1MDRdfX19fX19fX19LDExNDp7bDp7MTE0OntsOns1OTp7YzpbODU5NV19fX19fSwxMTU6e2w6ezEwNDp7bDp7NTk6e2M6WzgyMDhdfSwxMTg6e2w6ezU5OntjOls4ODY3XX19fX19fX19fSw5ODp7bDp7MTA3OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6WzEwNTExXX19fX19fX19fX19LDEwODp7bDp7OTc6e2w6ezk5OntsOns1OTp7YzpbNzMzXX19fX19fX19fSw5OTp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlsyNzFdfX19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNzZdfX19fX0sMTAwOntsOns1OTp7YzpbODUxOF19LDk3OntsOnsxMDM6e2w6ezEwMzp7bDp7MTAxOntsOnsxMTQ6e2w6ezU5OntjOls4MjI1XX19fX19fX19fSwxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NTBdfX19fX19fSwxMTE6e2w6ezExNjp7bDp7MTE1OntsOnsxMDE6e2w6ezExMzp7bDp7NTk6e2M6WzEwODcxXX19fX19fX19fX19fX0sMTAxOntsOnsxMDM6e2w6ezU5OntjOlsxNzZdfX0sYzpbMTc2XX0sMTA4OntsOnsxMTY6e2w6ezk3OntsOns1OTp7YzpbOTQ4XX19fX19fX0sMTA5OntsOnsxMTI6e2w6ezExNjp7bDp7MTIxOntsOnsxMTg6e2w6ezU5OntjOlsxMDY3M119fX19fX19fX19fX19LDEwMjp7bDp7MTA1OntsOnsxMTU6e2w6ezEwNDp7bDp7MTE2OntsOns1OTp7YzpbMTA2MjNdfX19fX19fX19LDExNDp7bDp7NTk6e2M6WzEyMDA5N119fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezEwODp7bDp7NTk6e2M6Wzg2NDNdfX19LDExNDp7bDp7NTk6e2M6Wzg2NDJdfX19fX19fX19LDEwNTp7bDp7OTc6e2w6ezEwOTp7bDp7NTk6e2M6Wzg5MDBdfSwxMTE6e2w6ezExMDp7bDp7MTAwOntsOns1OTp7YzpbODkwMF19LDExNTp7bDp7MTE3OntsOnsxMDU6e2w6ezExNjp7bDp7NTk6e2M6Wzk4MzBdfX19fX19fX19fX19fX19LDExNTp7bDp7NTk6e2M6Wzk4MzBdfX19fX19fSwxMDE6e2w6ezU5OntjOlsxNjhdfX19LDEwMzp7bDp7OTc6e2w6ezEwOTp7bDp7MTA5OntsOns5Nzp7bDp7NTk6e2M6Wzk4OV19fX19fX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTEwOntsOns1OTp7YzpbODk0Nl19fX19fX19LDExODp7bDp7NTk6e2M6WzI0N119LDEwNTp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOlsyNDddfSwxMTE6e2w6ezExMDp7bDp7MTE2OntsOnsxMDU6e2w6ezEwOTp7bDp7MTAxOntsOnsxMTU6e2w6ezU5OntjOls4OTAzXX19fX19fX19fX19fX19fX0sYzpbMjQ3XX19fX19LDExMTp7bDp7MTEwOntsOnsxMjA6e2w6ezU5OntjOls4OTAzXX19fX19fX19fX19LDEwNjp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzExMDZdfX19fX19fSwxMDg6e2w6ezk5OntsOnsxMTE6e2w6ezExNDp7bDp7MTEwOntsOns1OTp7YzpbODk5MF19fX19fX19LDExNDp7bDp7MTExOntsOnsxMTI6e2w6ezU5OntjOls4OTczXX19fX19fX19fX19LDExMTp7bDp7MTA4OntsOnsxMDg6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlszNl19fX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNDldfX19fX0sMTE2OntsOns1OTp7YzpbNzI5XX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4Nzg0XX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg3ODVdfX19fX19fX19fX0sMTA5OntsOnsxMDU6e2w6ezExMDp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOls4NzYwXX19fX19fX19fX19LDExMjp7bDp7MTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6Wzg3MjRdfX19fX19fX19LDExNTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMTQ6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4NjVdfX19fX19fX19fX19fX19LDExNzp7bDp7OTg6e2w6ezEwODp7bDp7MTAxOntsOns5ODp7bDp7OTc6e2w6ezExNDp7bDp7MTE5OntsOnsxMDE6e2w6ezEwMDp7bDp7MTAzOntsOnsxMDE6e2w6ezU5OntjOls4OTY2XX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE5OntsOnsxMTA6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTk1XX19fX19fX19fX19LDEwMDp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7MTE1OntsOns1OTp7YzpbODY1MF19fX19fX19fX19fX19fX19fX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOnsxMTI6e2w6ezExMTp7bDp7MTExOntsOnsxMTA6e2w6ezEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NTk6e2M6Wzg2NDNdfX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns1OTp7YzpbODY0Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExNDp7bDp7OTg6e2w6ezEwNzp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOlsxMDUxMl19fX19fX19fX19fX19LDk5OntsOnsxMTE6e2w6ezExNDp7bDp7MTEwOntsOns1OTp7YzpbODk5MV19fX19fX19LDExNDp7bDp7MTExOntsOnsxMTI6e2w6ezU5OntjOls4OTcyXX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk5M119fX0sMTIxOntsOns1OTp7YzpbMTEwOV19fX19fSwxMTE6e2w6ezEwODp7bDp7NTk6e2M6WzEwNzQyXX19fX19LDExNjp7bDp7MTE0OntsOnsxMTE6e2w6ezEwNzp7bDp7NTk6e2M6WzI3M119fX19fX19fX19fSwxMTY6e2w6ezEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOls4OTQ1XX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezU5OntjOls5NjYzXX0sMTAyOntsOns1OTp7YzpbOTY2Ml19fX19fX19fX0sMTE3OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjkzXX19fX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA2MDddfX19fX19fX19LDExOTp7bDp7OTc6e2w6ezExMDp7bDp7MTAzOntsOnsxMDg6e2w6ezEwMTp7bDp7NTk6e2M6WzEwNjYyXX19fX19fX19fX19fX0sMTIyOntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTExOV19fX19fSwxMDU6e2w6ezEwMzp7bDp7MTE0OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDIzOV19fX19fX19fX19fX19fX19fSwxMDE6e2w6ezY4OntsOns2ODp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDg3MV19fX19fX19LDExMTp7bDp7MTE2OntsOns1OTp7YzpbODc4NV19fX19fX19LDk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzIzM119fSxjOlsyMzNdfX19fX19fSwxMTU6e2w6ezExNjp7bDp7MTAxOntsOnsxMTQ6e2w6ezU5OntjOlsxMDg2Ml19fX19fX19fX19fSw5OTp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlsyODNdfX19fX19fX19LDEwNTp7bDp7MTE0OntsOns1OTp7YzpbODc5MF19LDk5OntsOns1OTp7YzpbMjM0XX19LGM6WzIzNF19fX19fSwxMTE6e2w6ezEwODp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls4Nzg5XX19fX19fX19fSwxMjE6e2w6ezU5OntjOlsxMTAxXX19fX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsyNzldfX19fX19fSwxMDE6e2w6ezU5OntjOls4NTE5XX19fSwxMDI6e2w6ezY4OntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg3ODZdfX19fX19fSwxMTQ6e2w6ezU5OntjOlsxMjAwOThdfX19fX0sMTAzOntsOns1OTp7YzpbMTA5MDZdfSwxMTQ6e2w6ezk3OntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6WzIzMl19fSxjOlsyMzJdfX19fX19fSwxMTU6e2w6ezU5OntjOlsxMDkwMl19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDkwNF19fX19fX19fX19fSwxMDg6e2w6ezU5OntjOlsxMDkwNV19LDEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOnsxMTU6e2w6ezU5OntjOls5MTkxXX19fX19fX19fX19fX0sMTA4OntsOns1OTp7YzpbODQ2N119fX0sMTE1OntsOns1OTp7YzpbMTA5MDFdfSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTA5MDNdfX19fX19fX19fX0sMTA5OntsOns5Nzp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzI3NV19fX19fX19LDExMjp7bDp7MTE2OntsOnsxMjE6e2w6ezU5OntjOls4NzA5XX0sMTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MDldfX19fX19fSwxMTg6e2w6ezU5OntjOls4NzA5XX19fX19fX19fSwxMTU6e2w6ezExMjp7bDp7NDk6e2w6ezUxOntsOns1OTp7YzpbODE5Nl19fX0sNTI6e2w6ezU5OntjOls4MTk3XX19fX19LDU5OntjOls4MTk1XX19fX19fX0sMTEwOntsOnsxMDM6e2w6ezU5OntjOlszMzFdfX19LDExNTp7bDp7MTEyOntsOns1OTp7YzpbODE5NF19fX19fX19LDExMTp7bDp7MTAzOntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzI4MV19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTUwXX19fX19fX0sMTEyOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODkxN119LDExNTp7bDp7MTA4OntsOns1OTp7YzpbMTA3MjNdfX19fX19fX19LDEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOlsxMDg2NV19fX19fX19LDExNTp7bDp7MTA1OntsOns1OTp7YzpbOTQ5XX0sMTA4OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6Wzk0OV19fX19fX19LDExODp7bDp7NTk6e2M6WzEwMTNdfX19fX19fX19LDExMzp7bDp7OTk6e2w6ezEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6Wzg3OTBdfX19fX19fSwxMTE6e2w6ezEwODp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls4Nzg5XX19fX19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4NzcwXX19fX19LDEwODp7bDp7OTc6e2w6ezExMDp7bDp7MTE2OntsOnsxMDM6e2w6ezExNjp7bDp7MTE0OntsOns1OTp7YzpbMTA5MDJdfX19fX19fSwxMDg6e2w6ezEwMTp7bDp7MTE1OntsOnsxMTU6e2w6ezU5OntjOlsxMDkwMV19fX19fX19fX19fX19fX19fX19LDExNzp7bDp7OTc6e2w6ezEwODp7bDp7MTE1OntsOns1OTp7YzpbNjFdfX19fX19fSwxMDE6e2w6ezExNTp7bDp7MTE2OntsOns1OTp7YzpbODc5OV19fX19fX19LDEwNTp7bDp7MTE4OntsOns1OTp7YzpbODgwMV19LDY4OntsOns2ODp7bDp7NTk6e2M6WzEwODcyXX19fX19fX19fX19LDExODp7bDp7MTEyOntsOns5Nzp7bDp7MTE0OntsOnsxMTU6e2w6ezEwODp7bDp7NTk6e2M6WzEwNzI1XX19fX19fX19fX19fX19fSwxMTQ6e2w6ezY4OntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg3ODddfX19fX19fSw5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDYwOV19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbODQ5NV19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODc4NF19fX19fX19LDEwNTp7bDp7MTA5OntsOns1OTp7YzpbODc3MF19fX19fX19LDExNjp7bDp7OTc6e2w6ezU5OntjOls5NTFdfX19LDEwNDp7bDp7NTk6e2M6WzI0MF19fSxjOlsyNDBdfX19LDExNzp7bDp7MTA5OntsOnsxMDg6e2w6ezU5OntjOlsyMzVdfX0sYzpbMjM1XX19fSwxMTQ6e2w6ezExMTp7bDp7NTk6e2M6WzgzNjRdfX19fX19fSwxMjA6e2w6ezk5OntsOnsxMDg6e2w6ezU5OntjOlszM119fX19fSwxMDU6e2w6ezExNTp7bDp7MTE2OntsOns1OTp7YzpbODcwN119fX19fX19LDExMjp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOns5Nzp7bDp7MTE2OntsOnsxMDU6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbODQ5Nl19fX19fX19fX19fX19fX19fSwxMTE6e2w6ezExMDp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7MTA1OntsOns5Nzp7bDp7MTA4OntsOnsxMDE6e2w6ezU5OntjOls4NTE5XX19fX19fX19fX19fX19fX19fX19fX19fX0sMTAyOntsOns5Nzp7bDp7MTA4OntsOnsxMDg6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDM6e2w6ezEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezExNTp7bDp7MTAxOntsOnsxMTM6e2w6ezU5OntjOls4Nzg2XX19fX19fX19fX19fX19fX19fX19fX19fX0sOTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwOTJdfX19fX0sMTAxOntsOnsxMDk6e2w6ezk3OntsOnsxMDg6e2w6ezEwMTp7bDp7NTk6e2M6Wzk3OTJdfX19fX19fX19fX0sMTAyOntsOnsxMDU6e2w6ezEwODp7bDp7MTA1OntsOnsxMDM6e2w6ezU5OntjOls2NDI1OV19fX19fX19fX0sMTA4OntsOnsxMDU6e2w6ezEwMzp7bDp7NTk6e2M6WzY0MjU2XX19fX19LDEwODp7bDp7MTA1OntsOnsxMDM6e2w6ezU5OntjOls2NDI2MF19fX19fX19fX0sMTE0OntsOns1OTp7YzpbMTIwMDk5XX19fX19LDEwNTp7bDp7MTA4OntsOnsxMDU6e2w6ezEwMzp7bDp7NTk6e2M6WzY0MjU3XX19fX19fX19fSwxMDY6e2w6ezEwODp7bDp7MTA1OntsOnsxMDM6e2w6ezU5OntjOlsxMDIsMTA2XX19fX19fX19fSwxMDg6e2w6ezk3OntsOnsxMTY6e2w6ezU5OntjOls5ODM3XX19fX19LDEwODp7bDp7MTA1OntsOnsxMDM6e2w6ezU5OntjOls2NDI1OF19fX19fX19LDExNjp7bDp7MTEwOntsOnsxMTU6e2w6ezU5OntjOls5NjQ5XX19fX19fX19fSwxMTA6e2w6ezExMTp7bDp7MTAyOntsOns1OTp7YzpbNDAyXX19fX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE1MV19fX19fSwxMTQ6e2w6ezk3OntsOnsxMDg6e2w6ezEwODp7bDp7NTk6e2M6Wzg3MDRdfX19fX19fSwxMDc6e2w6ezU5OntjOls4OTE2XX0sMTE4OntsOns1OTp7YzpbMTA5NjldfX19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7MTE2OntsOnsxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA3NjVdfX19fX19fX19fX19fX19LDExNDp7bDp7OTc6e2w6ezk5OntsOns0OTp7bDp7NTA6e2w6ezU5OntjOlsxODldfX0sYzpbMTg5XX0sNTE6e2w6ezU5OntjOls4NTMxXX19fSw1Mjp7bDp7NTk6e2M6WzE4OF19fSxjOlsxODhdfSw1Mzp7bDp7NTk6e2M6Wzg1MzNdfX19LDU0OntsOns1OTp7YzpbODUzN119fX0sNTY6e2w6ezU5OntjOls4NTM5XX19fX19LDUwOntsOns1MTp7bDp7NTk6e2M6Wzg1MzJdfX19LDUzOntsOns1OTp7YzpbODUzNF19fX19fSw1MTp7bDp7NTI6e2w6ezU5OntjOlsxOTBdfX0sYzpbMTkwXX0sNTM6e2w6ezU5OntjOls4NTM1XX19fSw1Njp7bDp7NTk6e2M6Wzg1NDBdfX19fX0sNTI6e2w6ezUzOntsOns1OTp7YzpbODUzNl19fX19fSw1Mzp7bDp7NTQ6e2w6ezU5OntjOls4NTM4XX19fSw1Njp7bDp7NTk6e2M6Wzg1NDFdfX19fX0sNTU6e2w6ezU2OntsOns1OTp7YzpbODU0Ml19fX19fX19LDExNTp7bDp7MTA4OntsOns1OTp7YzpbODI2MF19fX19fX19LDExMTp7bDp7MTE5OntsOnsxMTA6e2w6ezU5OntjOls4OTk0XX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5OTVdfX19fX19fX19LDEwMzp7bDp7Njk6e2w6ezU5OntjOls4ODA3XX0sMTA4OntsOns1OTp7YzpbMTA4OTJdfX19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbNTAxXX19fX19fX19fSwxMDk6e2w6ezEwOTp7bDp7OTc6e2w6ezU5OntjOls5NDddfSwxMDA6e2w6ezU5OntjOls5ODldfX19fX19fX19LDExMjp7bDp7NTk6e2M6WzEwODg2XX19fX19LDk4OntsOnsxMTQ6e2w6ezEwMTp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOlsyODddfX19fX19fX19fX0sOTk6e2w6ezEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzI4NV19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNzVdfX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzI4OV19fX19fX19LDEwMTp7bDp7NTk6e2M6Wzg4MDVdfSwxMDg6e2w6ezU5OntjOls4OTIzXX19fSwxMTM6e2w6ezU5OntjOls4ODA1XX0sMTEzOntsOns1OTp7YzpbODgwN119fX0sMTE1OntsOnsxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6WzEwODc4XX19fX19fX19fX19fX0sMTE1OntsOns1OTp7YzpbMTA4NzhdfSw5OTp7bDp7OTk6e2w6ezU5OntjOlsxMDkyMV19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTA4ODBdfSwxMTE6e2w6ezU5OntjOlsxMDg4Ml19LDEwODp7bDp7NTk6e2M6WzEwODg0XX19fX19fX19fX19LDEwODp7bDp7NTk6e2M6Wzg5MjMsNjUwMjRdfSwxMDE6e2w6ezExNTp7bDp7NTk6e2M6WzEwOTAwXX19fX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMTAwXX19fX19LDEwMzp7bDp7NTk6e2M6Wzg4MTFdfSwxMDM6e2w6ezU5OntjOls4OTIxXX19fX19LDEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezEwODp7bDp7NTk6e2M6Wzg1MDNdfX19fX19fX19LDEwNjp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzExMDddfX19fX19fSwxMDg6e2w6ezU5OntjOls4ODIzXX0sNjk6e2w6ezU5OntjOlsxMDg5OF19fX0sOTc6e2w6ezU5OntjOlsxMDkxN119fX0sMTA2OntsOns1OTp7YzpbMTA5MTZdfX19fX0sMTEwOntsOns2OTp7bDp7NTk6e2M6Wzg4MDldfX19LDk3OntsOnsxMTI6e2w6ezU5OntjOlsxMDg5MF19LDExMjp7bDp7MTE0OntsOnsxMTE6e2w6ezEyMDp7bDp7NTk6e2M6WzEwODkwXX19fX19fX19fX19fX0sMTAxOntsOns1OTp7YzpbMTA4ODhdfSwxMTM6e2w6ezU5OntjOlsxMDg4OF19LDExMzp7bDp7NTk6e2M6Wzg4MDldfX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODkzNV19fX19fX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE1Ml19fX19fX19LDExNDp7bDp7OTc6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbOTZdfX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6Wzg0NThdfX19fX0sMTA1OntsOnsxMDk6e2w6ezU5OntjOls4ODE5XX0sMTAxOntsOns1OTp7YzpbMTA4OTRdfX19LDEwODp7bDp7NTk6e2M6WzEwODk2XX19fX19fX19fSwxMTY6e2w6ezU5OntjOls2Ml19LDk5OntsOns5OTp7bDp7NTk6e2M6WzEwOTE5XX19fSwxMDU6e2w6ezExNDp7bDp7NTk6e2M6WzEwODc0XX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5MTldfX19fX19fSwxMDg6e2w6ezgwOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA2NDVdfX19fX19fX19LDExMzp7bDp7MTE3OntsOnsxMDE6e2w6ezExNTp7bDp7MTE2OntsOns1OTp7YzpbMTA4NzZdfX19fX19fX19fX0sMTE0OntsOns5Nzp7bDp7MTEyOntsOnsxMTI6e2w6ezExNDp7bDp7MTExOntsOnsxMjA6e2w6ezU5OntjOlsxMDg4Nl19fX19fX19fX19fSwxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjE2XX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5MTldfX19fX19fSwxMDE6e2w6ezExMzp7bDp7MTA4OntsOnsxMDE6e2w6ezExNTp7bDp7MTE1OntsOns1OTp7YzpbODkyM119fX19fX19fX0sMTEzOntsOnsxMDg6e2w6ezEwMTp7bDp7MTE1OntsOnsxMTU6e2w6ezU5OntjOlsxMDg5Ml19fX19fX19fX19fX19fX0sMTA4OntsOnsxMDE6e2w6ezExNTp7bDp7MTE1OntsOns1OTp7YzpbODgyM119fX19fX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg4MTldfX19fX19fX19fSxjOls2Ml19LDExODp7bDp7MTAxOntsOnsxMTQ6e2w6ezExNjp7bDp7MTEwOntsOnsxMDE6e2w6ezExMzp7bDp7MTEzOntsOns1OTp7YzpbODgwOSw2NTAyNF19fX19fX19fX19fX19fX0sMTEwOntsOns2OTp7bDp7NTk6e2M6Wzg4MDksNjUwMjRdfX19fX19fX19LDEwNDp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY2MF19fX19fX19LDk3OntsOnsxMDU6e2w6ezExNDp7bDp7MTE1OntsOnsxMTI6e2w6ezU5OntjOls4MjAyXX19fX19fX19fSwxMDg6e2w6ezEwMjp7bDp7NTk6e2M6WzE4OV19fX19fSwxMDk6e2w6ezEwNTp7bDp7MTA4OntsOnsxMTY6e2w6ezU5OntjOls4NDU5XX19fX19fX19fSwxMTQ6e2w6ezEwMDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwOThdfX19fX19fSwxMTQ6e2w6ezU5OntjOls4NTk2XX0sOTk6e2w6ezEwNTp7bDp7MTE0OntsOns1OTp7YzpbMTA1NjhdfX19fX19fSwxMTk6e2w6ezU5OntjOls4NjIxXX19fX19fX19fSw5ODp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6Wzg0NjNdfX19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMjkzXX19fX19fX19fSwxMDE6e2w6ezk3OntsOnsxMTQ6e2w6ezExNjp7bDp7MTE1OntsOns1OTp7YzpbOTgyOV19LDExNzp7bDp7MTA1OntsOnsxMTY6e2w6ezU5OntjOls5ODI5XX19fX19fX19fX19fX19fSwxMDg6e2w6ezEwODp7bDp7MTA1OntsOnsxMTI6e2w6ezU5OntjOls4MjMwXX19fX19fX19fSwxMTQ6e2w6ezk5OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6Wzg4ODldfX19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMDFdfX19fX0sMTA3OntsOnsxMTU6e2w6ezEwMTp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOlsxMDUzM119fX19fX19fX19fSwxMTk6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTA1MzRdfX19fX19fX19fX19fX19LDExMTp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODcwM119fX19fX19LDEwOTp7bDp7MTE2OntsOnsxMDQ6e2w6ezExNjp7bDp7NTk6e2M6Wzg3NjNdfX19fX19fX19LDExMTp7bDp7MTA3OntsOnsxMDg6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjE3XX19fX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjE4XX19fX19fX19fX19fX19fX19fX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNTNdfX19fX0sMTE0OntsOns5ODp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzgyMTNdfX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTk3XX19fX19LDEwODp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODQ2M119fX19fX19fX0sMTE2OntsOnsxMTQ6e2w6ezExMTp7bDp7MTA3OntsOns1OTp7YzpbMjk1XX19fX19fX19fX19LDEyMTp7bDp7OTg6e2w6ezExNzp7bDp7MTA4OntsOnsxMDg6e2w6ezU5OntjOls4MjU5XX19fX19fX19fSwxMTI6e2w6ezEwNDp7bDp7MTAxOntsOnsxMTA6e2w6ezU5OntjOls4MjA4XX19fX19fX19fX19fX0sMTA1OntsOns5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlsyMzddfX0sYzpbMjM3XX19fX19fX19fSw5OTp7bDp7NTk6e2M6WzgyOTFdfSwxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsyMzhdfX0sYzpbMjM4XX19fX19LDEyMTp7bDp7NTk6e2M6WzEwODBdfX19fX0sMTAxOntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA3N119fX19fSwxMjA6e2w6ezk5OntsOnsxMDg6e2w6ezU5OntjOlsxNjFdfX0sYzpbMTYxXX19fX19fX0sMTAyOntsOnsxMDI6e2w6ezU5OntjOls4NjYwXX19fSwxMTQ6e2w6ezU5OntjOlsxMjAxMDJdfX19fX0sMTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6WzIzNl19fSxjOlsyMzZdfX19fX19fX19LDEwNTp7bDp7NTk6e2M6Wzg1MjBdfSwxMDU6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOlsxMDc2NF19fX19fX19LDExMDp7bDp7MTE2OntsOns1OTp7YzpbODc0OV19fX19fX19LDExMDp7bDp7MTAyOntsOnsxMDU6e2w6ezExMDp7bDp7NTk6e2M6WzEwNzE2XX19fX19fX19fSwxMTE6e2w6ezExNjp7bDp7OTc6e2w6ezU5OntjOls4NDg5XX19fX19fX19fSwxMDY6e2w6ezEwODp7bDp7MTA1OntsOnsxMDM6e2w6ezU5OntjOlszMDddfX19fX19fX19LDEwOTp7bDp7OTc6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsyOTldfX19fX0sMTAzOntsOnsxMDE6e2w6ezU5OntjOls4NDY1XX19fSwxMDg6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDE6e2w6ezU5OntjOls4NDY0XX19fX19fX19fSwxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezExNjp7bDp7NTk6e2M6Wzg0NjVdfX19fX19fX19fX0sMTE2OntsOnsxMDQ6e2w6ezU5OntjOlszMDVdfX19fX19fSwxMTE6e2w6ezEwMjp7bDp7NTk6e2M6Wzg4ODddfX19fX0sMTEyOntsOnsxMDE6e2w6ezEwMDp7bDp7NTk6e2M6WzQzN119fX19fX19fX0sMTEwOntsOns1OTp7YzpbODcxMl19LDk5OntsOns5Nzp7bDp7MTE0OntsOnsxMDE6e2w6ezU5OntjOls4NDUzXX19fX19fX19fSwxMDI6e2w6ezEwNTp7bDp7MTEwOntsOns1OTp7YzpbODczNF19LDExNjp7bDp7MTA1OntsOnsxMDE6e2w6ezU5OntjOlsxMDcxN119fX19fX19fX19fX19LDExMTp7bDp7MTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzMwNV19fX19fX19fX0sMTE2OntsOns1OTp7YzpbODc0N119LDk5OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODg5MF19fX19fX19LDEwMTp7bDp7MTAzOntsOnsxMDE6e2w6ezExNDp7bDp7MTE1OntsOns1OTp7YzpbODQ4NF19fX19fX19fX0sMTE0OntsOns5OTp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg4OTBdfX19fX19fX19fX0sMTA4OntsOns5Nzp7bDp7MTE0OntsOnsxMDQ6e2w6ezEwNzp7bDp7NTk6e2M6WzEwNzc1XX19fX19fX19fX19LDExMjp7bDp7MTE0OntsOnsxMTE6e2w6ezEwMDp7bDp7NTk6e2M6WzEwODEyXX19fX19fX19fX19fX0sMTExOntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTEwNV19fX19fSwxMDM6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzAzXX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNTRdfX19fX0sMTE2OntsOns5Nzp7bDp7NTk6e2M6Wzk1M119fX19fX19LDExMjp7bDp7MTE0OntsOnsxMTE6e2w6ezEwMDp7bDp7NTk6e2M6WzEwODEyXX19fX19fX19fSwxMTM6e2w6ezExNzp7bDp7MTAxOntsOnsxMTU6e2w6ezExNjp7bDp7NTk6e2M6WzE5MV19fSxjOlsxOTFdfX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk5OF19fX19fSwxMDU6e2w6ezExMDp7bDp7NTk6e2M6Wzg3MTJdfSw2OTp7bDp7NTk6e2M6Wzg5NTNdfX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOls4OTQ5XX19fX19fX0sMTE1OntsOns1OTp7YzpbODk0OF19LDExODp7bDp7NTk6e2M6Wzg5NDddfX19fX0sMTE4OntsOns1OTp7YzpbODcxMl19fX19fX19fX0sMTE2OntsOns1OTp7YzpbODI5MF19LDEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6WzI5N119fX19fX19fX19fSwxMTc6e2w6ezEwNzp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzExMTBdfX19fX19fSwxMDk6e2w6ezEwODp7bDp7NTk6e2M6WzIzOV19fSxjOlsyMzldfX19fX19fSwxMDY6e2w6ezk5OntsOnsxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlszMDldfX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDgxXX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMTAzXX19fX19LDEwOTp7bDp7OTc6e2w6ezExNjp7bDp7MTA0OntsOns1OTp7YzpbNTY3XX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTU1XX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTk5XX19fX19LDEwMTp7bDp7MTE0OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTExMl19fX19fX19fX19fSwxMTc6e2w6ezEwNzp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzExMDhdfX19fX19fX19fX0sMTA3OntsOns5Nzp7bDp7MTEyOntsOnsxMTI6e2w6ezk3OntsOns1OTp7YzpbOTU0XX0sMTE4OntsOns1OTp7YzpbMTAwOF19fX19fX19fX19fSw5OTp7bDp7MTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMzExXX19fX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDgyXX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMTA0XX19fX19LDEwMzp7bDp7MTE0OntsOnsxMDE6e2w6ezEwMTp7bDp7MTEwOntsOns1OTp7YzpbMzEyXX19fX19fX19fX19LDEwNDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwOTNdfX19fX19fSwxMDY6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMTE2XX19fX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE1Nl19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDAwMF19fX19fX19fX0sMTA4OntsOns2NTp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY2Nl19fX19fX19LDExNDp7bDp7MTE0OntsOns1OTp7YzpbODY1Nl19fX19fSwxMTY6e2w6ezk3OntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzEwNTIzXX19fX19fX19fX19LDY2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDUxMF19fX19fX19fX0sNjk6e2w6ezU5OntjOls4ODA2XX0sMTAzOntsOns1OTp7YzpbMTA4OTFdfX19fX0sNzI6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU5NF19fX19fX19LDk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzMxNF19fX19fX19fX0sMTAxOntsOnsxMDk6e2w6ezExMjp7bDp7MTE2OntsOnsxMjE6e2w6ezExODp7bDp7NTk6e2M6WzEwNjc2XX19fX19fX19fX19fX0sMTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMTA6e2w6ezU5OntjOls4NDY2XX19fX19fX19fSwxMDk6e2w6ezk4OntsOnsxMDA6e2w6ezk3OntsOns1OTp7YzpbOTU1XX19fX19fX19fSwxMTA6e2w6ezEwMzp7bDp7NTk6e2M6WzEwMjE2XX0sMTAwOntsOns1OTp7YzpbMTA2NDFdfX19LDEwODp7bDp7MTAxOntsOns1OTp7YzpbMTAyMTZdfX19fX19fX19LDExMjp7bDp7NTk6e2M6WzEwODg1XX19fSwxMTM6e2w6ezExNzp7bDp7MTExOntsOns1OTp7YzpbMTcxXX19LGM6WzE3MV19fX19fSwxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg1OTJdfSw5ODp7bDp7NTk6e2M6Wzg2NzZdfSwxMDI6e2w6ezExNTp7bDp7NTk6e2M6WzEwNTI3XX19fX19fX0sMTAyOntsOnsxMTU6e2w6ezU5OntjOlsxMDUyNV19fX19fSwxMDQ6e2w6ezEwNzp7bDp7NTk6e2M6Wzg2MTddfX19fX0sMTA4OntsOnsxMTI6e2w6ezU5OntjOls4NjE5XX19fX19LDExMjp7bDp7MTA4OntsOns1OTp7YzpbMTA1NTNdfX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6WzEwNjExXX19fX19fX0sMTE2OntsOnsxMDg6e2w6ezU5OntjOls4NjEwXX19fX19fX19fSwxMTY6e2w6ezU5OntjOlsxMDkyM119LDk3OntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzEwNTIxXX19fX19fX0sMTAxOntsOns1OTp7YzpbMTA5MjVdfSwxMTU6e2w6ezU5OntjOlsxMDkyNSw2NTAyNF19fX19fX19fX0sOTg6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTA4XX19fX19fX0sOTg6e2w6ezExNDp7bDp7MTA3OntsOns1OTp7YzpbMTAwOThdfX19fX19fSwxMTQ6e2w6ezk3OntsOns5OTp7bDp7MTAxOntsOns1OTp7YzpbMTIzXX19fSwxMDc6e2w6ezU5OntjOls5MV19fX19fX19LDEwNzp7bDp7MTAxOntsOns1OTp7YzpbMTA2MzVdfX19LDExNTp7bDp7MTA4OntsOnsxMDA6e2w6ezU5OntjOlsxMDYzOV19fX0sMTE3OntsOns1OTp7YzpbMTA2MzddfX19fX19fX19fX19fSw5OTp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlszMThdfX19fX19fX19LDEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzMxNl19fX19fX19LDEwNTp7bDp7MTA4OntsOns1OTp7YzpbODk2OF19fX19fX19LDExNzp7bDp7OTg6e2w6ezU5OntjOlsxMjNdfX19fX0sMTIxOntsOns1OTp7YzpbMTA4M119fX19fSwxMDA6e2w6ezk5OntsOns5Nzp7bDp7NTk6e2M6WzEwNTUwXX19fX19LDExMzp7bDp7MTE3OntsOnsxMTE6e2w6ezU5OntjOls4MjIwXX0sMTE0OntsOns1OTp7YzpbODIyMl19fX19fX19fX0sMTE0OntsOnsxMDA6e2w6ezEwNDp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTk5XX19fX19fX19fSwxMTc6e2w6ezExNTp7bDp7MTA0OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1NzFdfX19fX19fX19fX19fSwxMTU6e2w6ezEwNDp7bDp7NTk6e2M6Wzg2MjZdfX19fX19fSwxMDE6e2w6ezU5OntjOls4ODA0XX0sMTAyOntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTkyXX0sMTE2OntsOns5Nzp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOls4NjEwXX19fX19fX19fX19fX19fX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOnsxMTI6e2w6ezExMTp7bDp7MTExOntsOnsxMTA6e2w6ezEwMDp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7NTk6e2M6Wzg2MzddfX19fX19fX19LDExNzp7bDp7MTEyOntsOns1OTp7YzpbODYzNl19fX19fX19fX19fX19fX19fX19LDEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7MTE1OntsOns1OTp7YzpbODY0N119fX19fX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTk2XX0sMTE1OntsOns1OTp7YzpbODY0Nl19fX19fX19fX19fX19LDEwNDp7bDp7OTc6e2w6ezExNDp7bDp7MTEyOntsOnsxMTE6e2w6ezExMTp7bDp7MTEwOntsOnsxMTU6e2w6ezU5OntjOls4NjUxXX19fX19fX19fX19fX19fX19LDExNTp7bDp7MTEzOntsOnsxMTc6e2w6ezEwNTp7bDp7MTAzOntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODYyMV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExNjp7bDp7MTA0OntsOnsxMTQ6e2w6ezEwMTp7bDp7MTAxOntsOnsxMTY6e2w6ezEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6Wzg5MDddfX19fX19fX19fX19fX19fX19fX19fX19fSwxMDM6e2w6ezU5OntjOls4OTIyXX19fSwxMTM6e2w6ezU5OntjOls4ODA0XX0sMTEzOntsOns1OTp7YzpbODgwNl19fX0sMTE1OntsOnsxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6WzEwODc3XX19fX19fX19fX19fX0sMTE1OntsOns1OTp7YzpbMTA4NzddfSw5OTp7bDp7OTk6e2w6ezU5OntjOlsxMDkyMF19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTA4NzldfSwxMTE6e2w6ezU5OntjOlsxMDg4MV19LDExNDp7bDp7NTk6e2M6WzEwODgzXX19fX19fX19fX19LDEwMzp7bDp7NTk6e2M6Wzg5MjIsNjUwMjRdfSwxMDE6e2w6ezExNTp7bDp7NTk6e2M6WzEwODk5XX19fX19fX0sMTE1OntsOns5Nzp7bDp7MTEyOntsOnsxMTI6e2w6ezExNDp7bDp7MTExOntsOnsxMjA6e2w6ezU5OntjOlsxMDg4NV19fX19fX19fX19fX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOls4OTE4XX19fX19fX0sMTAxOntsOnsxMTM6e2w6ezEwMzp7bDp7MTE2OntsOnsxMTQ6e2w6ezU5OntjOls4OTIyXX19fX19fX0sMTEzOntsOnsxMDM6e2w6ezExNjp7bDp7MTE0OntsOns1OTp7YzpbMTA4OTFdfX19fX19fX19fX19fSwxMDM6e2w6ezExNjp7bDp7MTE0OntsOns1OTp7YzpbODgyMl19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4ODE4XX19fX19fX19fX19fX0sMTAyOntsOnsxMDU6e2w6ezExNTp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOlsxMDYyMF19fX19fX19fX0sMTA4OntsOnsxMTE6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbODk3MF19fX19fX19fX0sMTE0OntsOns1OTp7YzpbMTIwMTA1XX19fX19LDEwMzp7bDp7NTk6e2M6Wzg4MjJdfSw2OTp7bDp7NTk6e2M6WzEwODk3XX19fX19LDEwNDp7bDp7OTc6e2w6ezExNDp7bDp7MTAwOntsOns1OTp7YzpbODYzN119fX0sMTE3OntsOns1OTp7YzpbODYzNl19LDEwODp7bDp7NTk6e2M6WzEwNjAyXX19fX19fX19fSw5ODp7bDp7MTA4OntsOnsxMDc6e2w6ezU5OntjOls5NjA0XX19fX19fX19fSwxMDY6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMTEzXX19fX19fX0sMTA4OntsOns1OTp7YzpbODgxMF19LDk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NDddfX19fX19fSw5OTp7bDp7MTExOntsOnsxMTQ6e2w6ezExMDp7bDp7MTAxOntsOnsxMTQ6e2w6ezU5OntjOls4OTkwXX19fX19fX19fX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOnsxMDA6e2w6ezU5OntjOlsxMDYwM119fX19fX19fX0sMTE2OntsOnsxMTQ6e2w6ezEwNTp7bDp7NTk6e2M6Wzk3MjJdfX19fX19fX19LDEwOTp7bDp7MTA1OntsOnsxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMzIwXX19fX19fX19fSwxMTE6e2w6ezExNzp7bDp7MTE1OntsOnsxMTY6e2w6ezU5OntjOls5MTM2XX0sOTc6e2w6ezk5OntsOnsxMDQ6e2w6ezEwMTp7bDp7NTk6e2M6WzkxMzZdfX19fX19fX19fX19fX19fX19fSwxMTA6e2w6ezY5OntsOns1OTp7YzpbODgwOF19fX0sOTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwODg5XX0sMTEyOntsOnsxMTQ6e2w6ezExMTp7bDp7MTIwOntsOns1OTp7YzpbMTA4ODldfX19fX19fX19fX19fSwxMDE6e2w6ezU5OntjOlsxMDg4N119LDExMzp7bDp7NTk6e2M6WzEwODg3XX0sMTEzOntsOns1OTp7YzpbODgwOF19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4OTM0XX19fX19fX19fSwxMTE6e2w6ezk3OntsOnsxMTA6e2w6ezEwMzp7bDp7NTk6e2M6WzEwMjIwXX19fX19LDExNDp7bDp7MTE0OntsOns1OTp7YzpbODcwMV19fX19fX19LDk4OntsOnsxMTQ6e2w6ezEwNzp7bDp7NTk6e2M6WzEwMjE0XX19fX19fX0sMTEwOntsOnsxMDM6e2w6ezEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6WzEwMjI5XX19fX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTAyMzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTA5OntsOns5Nzp7bDp7MTEyOntsOnsxMTU6e2w6ezExNjp7bDp7MTExOntsOns1OTp7YzpbMTAyMzZdfX19fX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6WzEwMjMwXX19fX19fX19fX19fX19fX19fX19fX19fX0sMTExOntsOnsxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NTk6e2M6Wzg2MTldfX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns1OTp7YzpbODYyMF19fX19fX19fX19fX19fX19fX19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjI5XX19fX19LDEwMjp7bDp7NTk6e2M6WzEyMDE1N119fX0sMTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6WzEwNzk3XX19fX19fX19fSwxMTY6e2w6ezEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6WzEwODA0XX19fX19fX19fX19LDExOTp7bDp7OTc6e2w6ezExNTp7bDp7MTE2OntsOns1OTp7YzpbODcyN119fX19fX19LDk4OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbOTVdfX19fX19fX19LDEyMjp7bDp7NTk6e2M6Wzk2NzRdfSwxMDE6e2w6ezExMDp7bDp7MTAzOntsOnsxMDE6e2w6ezU5OntjOls5Njc0XX19fX19fX19fSwxMDI6e2w6ezU5OntjOlsxMDczMV19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzQwXX0sMTA4OntsOnsxMTY6e2w6ezU5OntjOlsxMDY0M119fX19fX19fX19fSwxMTQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NDZdfX19fX19fSw5OTp7bDp7MTExOntsOnsxMTQ6e2w6ezExMDp7bDp7MTAxOntsOnsxMTQ6e2w6ezU5OntjOls4OTkxXX19fX19fX19fX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODY1MV19LDEwMDp7bDp7NTk6e2M6WzEwNjA1XX19fX19fX19fSwxMDk6e2w6ezU5OntjOls4MjA2XX19fSwxMTY6e2w6ezExNDp7bDp7MTA1OntsOns1OTp7YzpbODg5NV19fX19fX19fX0sMTE1OntsOns5Nzp7bDp7MTEzOntsOnsxMTc6e2w6ezExMTp7bDp7NTk6e2M6WzgyNDldfX19fX19fX19LDk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwMDFdfX19fX0sMTA0OntsOns1OTp7YzpbODYyNF19fX0sMTA1OntsOnsxMDk6e2w6ezU5OntjOls4ODE4XX0sMTAxOntsOns1OTp7YzpbMTA4OTNdfX19LDEwMzp7bDp7NTk6e2M6WzEwODk1XX19fX19fX0sMTEzOntsOns5ODp7bDp7NTk6e2M6WzkxXX19fSwxMTc6e2w6ezExMTp7bDp7NTk6e2M6WzgyMTZdfSwxMTQ6e2w6ezU5OntjOls4MjE4XX19fX19fX19fSwxMTY6e2w6ezExNDp7bDp7MTExOntsOnsxMDc6e2w6ezU5OntjOlszMjJdfX19fX19fX19fX0sMTE2OntsOns1OTp7YzpbNjBdfSw5OTp7bDp7OTk6e2w6ezU5OntjOlsxMDkxOF19fX0sMTA1OntsOnsxMTQ6e2w6ezU5OntjOlsxMDg3M119fX19fX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOls4OTE4XX19fX19fX0sMTA0OntsOnsxMTQ6e2w6ezEwMTp7bDp7MTAxOntsOns1OTp7YzpbODkwN119fX19fX19fX0sMTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbODkwNV19fX19fX19fX0sMTA4OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDYxNF19fX19fX19fX0sMTEzOntsOnsxMTc6e2w6ezEwMTp7bDp7MTE1OntsOnsxMTY6e2w6ezU5OntjOlsxMDg3NV19fX19fX19fX19fSwxMTQ6e2w6ezgwOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA2NDZdfX19fX19fSwxMDU6e2w6ezU5OntjOls5NjY3XX0sMTAxOntsOns1OTp7YzpbODg4NF19fX0sMTAyOntsOns1OTp7YzpbOTY2Nl19fX19fX19fSxjOls2MF19LDExNzp7bDp7MTE0OntsOnsxMDA6e2w6ezExNTp7bDp7MTA0OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1NzBdfX19fX19fX19fX0sMTE3OntsOnsxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU5OF19fX19fX19fX19fX19LDExODp7bDp7MTAxOntsOnsxMTQ6e2w6ezExNjp7bDp7MTEwOntsOnsxMDE6e2w6ezExMzp7bDp7MTEzOntsOns1OTp7YzpbODgwOCw2NTAyNF19fX19fX19fX19fX19fX0sMTEwOntsOns2OTp7bDp7NTk6e2M6Wzg4MDgsNjUwMjRdfX19fX19fX19LDEwOTp7bDp7Njg6e2w6ezY4OntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg3NjJdfX19fX19fX19LDk3OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTc1XX19LGM6WzE3NV19fX0sMTA4OntsOnsxMDE6e2w6ezU5OntjOls5Nzk0XX19fSwxMTY6e2w6ezU5OntjOlsxMDAxNl19LDEwMTp7bDp7MTE1OntsOnsxMDE6e2w6ezU5OntjOlsxMDAxNl19fX19fX19fX19fSwxMTI6e2w6ezU5OntjOls4NjE0XX0sMTE1OntsOnsxMTY6e2w6ezExMTp7bDp7NTk6e2M6Wzg2MTRdfSwxMDA6e2w6ezExMTp7bDp7MTE5OntsOnsxMTA6e2w6ezU5OntjOls4NjE1XX19fX19fX19fSwxMDg6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezU5OntjOls4NjEyXX19fX19fX19fSwxMTc6e2w6ezExMjp7bDp7NTk6e2M6Wzg2MTNdfX19fX19fX19fX19fSwxMTQ6e2w6ezEwNzp7bDp7MTAxOntsOnsxMTQ6e2w6ezU5OntjOls5NjQ2XX19fX19fX19fX19LDk5OntsOnsxMTE6e2w6ezEwOTp7bDp7MTA5OntsOns5Nzp7bDp7NTk6e2M6WzEwNzkzXX19fX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDg0XX19fX19LDEwMDp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODIxMl19fX19fX19fX0sMTAxOntsOns5Nzp7bDp7MTE1OntsOnsxMTc6e2w6ezExNDp7bDp7MTAxOntsOnsxMDA6e2w6ezk3OntsOnsxMTA6e2w6ezEwMzp7bDp7MTA4OntsOnsxMDE6e2w6ezU5OntjOls4NzM3XX19fX19fX19fX19fX19fX19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMDZdfX19fX0sMTA0OntsOnsxMTE6e2w6ezU5OntjOls4NDg3XX19fX19LDEwNTp7bDp7OTk6e2w6ezExNDp7bDp7MTExOntsOns1OTp7YzpbMTgxXX19LGM6WzE4MV19fX19fSwxMDA6e2w6ezU5OntjOls4NzM5XX0sOTc6e2w6ezExNTp7bDp7MTE2OntsOns1OTp7YzpbNDJdfX19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezU5OntjOlsxMDk5Ml19fX19fX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxODNdfX0sYzpbMTgzXX19fX19fX0sMTEwOntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6Wzg3MjJdfSw5ODp7bDp7NTk6e2M6Wzg4NjNdfX19LDEwMDp7bDp7NTk6e2M6Wzg3NjBdfSwxMTc6e2w6ezU5OntjOlsxMDc5NF19fX19fX19fX19fX19LDEwODp7bDp7OTk6e2w6ezExMjp7bDp7NTk6e2M6WzEwOTcxXX19fX19LDEwMDp7bDp7MTE0OntsOns1OTp7YzpbODIzMF19fX19fX19LDExMDp7bDp7MTEyOntsOnsxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbODcyM119fX19fX19fX19fSwxMTE6e2w6ezEwMDp7bDp7MTAxOntsOnsxMDg6e2w6ezExNTp7bDp7NTk6e2M6Wzg4NzFdfX19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTU4XX19fX19fX0sMTEyOntsOns1OTp7YzpbODcyM119fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDAyXX19fX19LDExNjp7bDp7MTEyOntsOnsxMTE6e2w6ezExNTp7bDp7NTk6e2M6Wzg3NjZdfX19fX19fX19fX0sMTE3OntsOns1OTp7YzpbOTU2XX0sMTA4OntsOnsxMTY6e2w6ezEwNTp7bDp7MTA5OntsOns5Nzp7bDp7MTEyOntsOns1OTp7YzpbODg4OF19fX19fX19fX19fX19LDEwOTp7bDp7OTc6e2w6ezExMjp7bDp7NTk6e2M6Wzg4ODhdfX19fX19fX19fX0sMTEwOntsOns3MTp7bDp7MTAzOntsOns1OTp7YzpbODkyMSw4MjRdfX19LDExNjp7bDp7NTk6e2M6Wzg4MTEsODQwMl19LDExODp7bDp7NTk6e2M6Wzg4MTEsODI0XX19fX19fX0sNzY6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjUzXX19fX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY1NF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTA4OntsOns1OTp7YzpbODkyMCw4MjRdfX19LDExNjp7bDp7NTk6e2M6Wzg4MTAsODQwMl19LDExODp7bDp7NTk6e2M6Wzg4MTAsODI0XX19fX19fX0sODI6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NTVdfX19fX19fX19fX19fX19fX19fX19LDg2OntsOns2ODp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODg3OV19fX19fX19fX0sMTAwOntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4ODc4XX19fX19fX19fX19LDk3OntsOns5ODp7bDp7MTA4OntsOns5Nzp7bDp7NTk6e2M6Wzg3MTFdfX19fX19fSw5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzMyNF19fX19fX19fX0sMTEwOntsOnsxMDM6e2w6ezU5OntjOls4NzM2LDg0MDJdfX19fX0sMTEyOntsOns1OTp7YzpbODc3N119LDY5OntsOns1OTp7YzpbMTA4NjQsODI0XX19fSwxMDU6e2w6ezEwMDp7bDp7NTk6e2M6Wzg3NzksODI0XX19fX19LDExMTp7bDp7MTE1OntsOns1OTp7YzpbMzI5XX19fX19LDExMjp7bDp7MTE0OntsOnsxMTE6e2w6ezEyMDp7bDp7NTk6e2M6Wzg3NzddfX19fX19fX19fX0sMTE2OntsOnsxMTc6e2w6ezExNDp7bDp7NTk6e2M6Wzk4MzhdfSw5Nzp7bDp7MTA4OntsOns1OTp7YzpbOTgzOF19LDExNTp7bDp7NTk6e2M6Wzg0NjldfX19fX19fX19fX19fX19LDk4OntsOnsxMTU6e2w6ezExMjp7bDp7NTk6e2M6WzE2MF19fSxjOlsxNjBdfX19LDExNzp7bDp7MTA5OntsOnsxMTI6e2w6ezU5OntjOls4NzgyLDgyNF19LDEwMTp7bDp7NTk6e2M6Wzg3ODMsODI0XX19fX19fX19fX19LDk5OntsOns5Nzp7bDp7MTEyOntsOns1OTp7YzpbMTA4MTldfX19LDExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlszMjhdfX19fX19fX19LDEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzMyNl19fX19fX19fX0sMTExOntsOnsxMTA6e2w6ezEwMzp7bDp7NTk6e2M6Wzg3NzVdfSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTA4NjEsODI0XX19fX19fX19fX19fX0sMTE3OntsOnsxMTI6e2w6ezU5OntjOlsxMDgxOF19fX19fSwxMjE6e2w6ezU5OntjOlsxMDg1XX19fX19LDEwMDp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODIxMV19fX19fX19fX0sMTAxOntsOns1OTp7YzpbODgwMF19LDY1OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NjNdfX19fX19fSw5Nzp7bDp7MTE0OntsOnsxMDQ6e2w6ezEwNzp7bDp7NTk6e2M6WzEwNTMyXX19fX19LDExNDp7bDp7NTk6e2M6Wzg1OTldfSwxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTldfX19fX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg3ODQsODI0XX19fX19fX0sMTEzOntsOnsxMTc6e2w6ezEwNTp7bDp7MTE4OntsOns1OTp7YzpbODgwMl19fX19fX19fX0sMTE1OntsOnsxMDE6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDUzNl19fX19fX19LDEwNTp7bDp7MTA5OntsOns1OTp7YzpbODc3MCw4MjRdfX19fX19fSwxMjA6e2w6ezEwNTp7bDp7MTE1OntsOnsxMTY6e2w6ezU5OntjOls4NzA4XX0sMTE1OntsOns1OTp7YzpbODcwOF19fX19fX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMTA3XX19fX19LDEwMzp7bDp7Njk6e2w6ezU5OntjOls4ODA3LDgyNF19fX0sMTAxOntsOns1OTp7YzpbODgxN119LDExMzp7bDp7NTk6e2M6Wzg4MTddfSwxMTM6e2w6ezU5OntjOls4ODA3LDgyNF19fX0sMTE1OntsOnsxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6WzEwODc4LDgyNF19fX19fX19fX19fX19LDExNTp7bDp7NTk6e2M6WzEwODc4LDgyNF19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODgyMV19fX19fX19LDExNjp7bDp7NTk6e2M6Wzg4MTVdfSwxMTQ6e2w6ezU5OntjOls4ODE1XX19fX19fX0sMTA0OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjU0XX19fX19fX0sOTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODYyMl19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwOTk0XX19fX19fX19fSwxMDU6e2w6ezU5OntjOls4NzE1XX0sMTE1OntsOns1OTp7YzpbODk1Nl19LDEwMDp7bDp7NTk6e2M6Wzg5NTRdfX19fX0sMTE4OntsOns1OTp7YzpbODcxNV19fX19fSwxMDY6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMTE0XX19fX19fX0sMTA4OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjUzXX19fX19fX0sNjk6e2w6ezU5OntjOls4ODA2LDgyNF19fX0sOTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODYwMl19fX19fX19LDEwMDp7bDp7MTE0OntsOns1OTp7YzpbODIyOV19fX19fSwxMDE6e2w6ezU5OntjOls4ODE2XX0sMTAyOntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjAyXX19fX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODYyMl19fX19fX19fX19fX19fX19fX19fX19fX19LDExMzp7bDp7NTk6e2M6Wzg4MTZdfSwxMTM6e2w6ezU5OntjOls4ODA2LDgyNF19fX0sMTE1OntsOnsxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6WzEwODc3LDgyNF19fX19fX19fX19fX19LDExNTp7bDp7NTk6e2M6WzEwODc3LDgyNF19LDExNTp7bDp7NTk6e2M6Wzg4MTRdfX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODgyMF19fX19fX19LDExNjp7bDp7NTk6e2M6Wzg4MTRdfSwxMTQ6e2w6ezEwNTp7bDp7NTk6e2M6Wzg5MzhdfSwxMDE6e2w6ezU5OntjOls4OTQwXX19fX19fX19fX19LDEwOTp7bDp7MTA1OntsOnsxMDA6e2w6ezU5OntjOls4NzQwXX19fX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE1OV19fX19fSwxMTY6e2w6ezU5OntjOlsxNzJdfSwxMDU6e2w6ezExMDp7bDp7NTk6e2M6Wzg3MTNdfSw2OTp7bDp7NTk6e2M6Wzg5NTMsODI0XX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODk0OSw4MjRdfX19fX19fSwxMTg6e2w6ezk3OntsOns1OTp7YzpbODcxM119fX0sOTg6e2w6ezU5OntjOls4OTUxXX19fSw5OTp7bDp7NTk6e2M6Wzg5NTBdfX19fX19fX19LDExMDp7bDp7MTA1OntsOns1OTp7YzpbODcxNl19LDExODp7bDp7OTc6e2w6ezU5OntjOls4NzE2XX19fSw5ODp7bDp7NTk6e2M6Wzg5NThdfX19LDk5OntsOns1OTp7YzpbODk1N119fX19fX19fX19LGM6WzE3Ml19fX0sMTEyOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODc0Ml19LDk3OntsOnsxMDg6e2w6ezEwODp7bDp7MTAxOntsOnsxMDg6e2w6ezU5OntjOls4NzQyXX19fX19fX19fX19LDExNTp7bDp7MTA4OntsOns1OTp7YzpbMTEwMDUsODQyMV19fX19fSwxMTY6e2w6ezU5OntjOls4NzA2LDgyNF19fX19fX19LDExMTp7bDp7MTA4OntsOnsxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA3NzJdfX19fX19fX19fX0sMTE0OntsOns1OTp7YzpbODgzMl19LDk5OntsOnsxMTc6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5MjhdfX19fX19fSwxMDE6e2w6ezU5OntjOlsxMDkyNyw4MjRdfSw5OTp7bDp7NTk6e2M6Wzg4MzJdfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6WzEwOTI3LDgyNF19fX19fX19fX19fX19LDExNDp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY1NV19fX19fX19LDk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2MDNdfSw5OTp7bDp7NTk6e2M6WzEwNTQ3LDgyNF19fX0sMTE5OntsOns1OTp7YzpbODYwNSw4MjRdfX19fX19fX19LDEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MDNdfX19fX19fX19fX19fX19fX19fSwxMTY6e2w6ezExNDp7bDp7MTA1OntsOns1OTp7YzpbODkzOV19LDEwMTp7bDp7NTk6e2M6Wzg5NDFdfX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7NTk6e2M6Wzg4MzNdfSw5OTp7bDp7MTE3OntsOnsxMDE6e2w6ezU5OntjOls4OTI5XX19fX19fX0sMTAxOntsOns1OTp7YzpbMTA5MjgsODI0XX19fSwxMTQ6e2w6ezU5OntjOlsxMjAwMDNdfX19fX0sMTA0OntsOnsxMTE6e2w6ezExNDp7bDp7MTE2OntsOnsxMDk6e2w6ezEwNTp7bDp7MTAwOntsOns1OTp7YzpbODc0MF19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7OTc6e2w6ezEwODp7bDp7MTA4OntsOnsxMDE6e2w6ezEwODp7bDp7NTk6e2M6Wzg3NDJdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg3NjldfSwxMDE6e2w6ezU5OntjOls4NzcyXX0sMTEzOntsOns1OTp7YzpbODc3Ml19fX19fX19fX0sMTA5OntsOnsxMDU6e2w6ezEwMDp7bDp7NTk6e2M6Wzg3NDBdfX19fX19fSwxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOls4NzQyXX19fX19fX0sMTEzOntsOnsxMTU6e2w6ezExNzp7bDp7OTg6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5MzBdfX19fX0sMTEyOntsOnsxMDE6e2w6ezU5OntjOls4OTMxXX19fX19fX19fX19LDExNzp7bDp7OTg6e2w6ezU5OntjOls4ODM2XX0sNjk6e2w6ezU5OntjOlsxMDk0OSw4MjRdfX19LDEwMTp7bDp7NTk6e2M6Wzg4NDBdfX19LDExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4ODM0LDg0MDJdfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg4NDBdfSwxMTM6e2w6ezU5OntjOlsxMDk0OSw4MjRdfX19fX19fX19fX19fX19LDk5OntsOns5OTp7bDp7NTk6e2M6Wzg4MzNdfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6WzEwOTI4LDgyNF19fX19fX19fX0sMTEyOntsOns1OTp7YzpbODgzN119LDY5OntsOns1OTp7YzpbMTA5NTAsODI0XX19fSwxMDE6e2w6ezU5OntjOls4ODQxXX19fSwxMTU6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbODgzNSw4NDAyXX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4ODQxXX0sMTEzOntsOns1OTp7YzpbMTA5NTAsODI0XX19fX19fX19fX19fX19fX19fX0sMTE2OntsOnsxMDM6e2w6ezEwODp7bDp7NTk6e2M6Wzg4MjVdfX19fX0sMTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbMjQxXX19LGM6WzI0MV19fX19fX19LDEwODp7bDp7MTAzOntsOns1OTp7YzpbODgyNF19fX19fSwxMTQ6e2w6ezEwNTp7bDp7OTc6e2w6ezExMDp7bDp7MTAzOntsOnsxMDg6e2w6ezEwMTp7bDp7MTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns1OTp7YzpbODkzOF19LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbODk0MF19fX19fX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns1OTp7YzpbODkzOV19LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbODk0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExNzp7bDp7NTk6e2M6Wzk1N119LDEwOTp7bDp7NTk6e2M6WzM1XX0sMTAxOntsOnsxMTQ6e2w6ezExMTp7bDp7NTk6e2M6Wzg0NzBdfX19fX19fSwxMTU6e2w6ezExMjp7bDp7NTk6e2M6WzgxOTldfX19fX19fX19LDExODp7bDp7Njg6e2w6ezk3OntsOnsxMTU6e2w6ezEwNDp7bDp7NTk6e2M6Wzg4NzddfX19fX19fX19LDcyOntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDUwMF19fX19fX19fX0sOTc6e2w6ezExMjp7bDp7NTk6e2M6Wzg3ODEsODQwMl19fX19fSwxMDA6e2w6ezk3OntsOnsxMTU6e2w6ezEwNDp7bDp7NTk6e2M6Wzg4NzZdfX19fX19fX19LDEwMzp7bDp7MTAxOntsOns1OTp7YzpbODgwNSw4NDAyXX19fSwxMTY6e2w6ezU5OntjOls2Miw4NDAyXX19fX19LDEwNTp7bDp7MTEwOntsOnsxMDI6e2w6ezEwNTp7bDp7MTEwOntsOns1OTp7YzpbMTA3MThdfX19fX19fX19fX0sMTA4OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDQ5OF19fX19fX19LDEwMTp7bDp7NTk6e2M6Wzg4MDQsODQwMl19fX0sMTE2OntsOns1OTp7YzpbNjAsODQwMl19LDExNDp7bDp7MTA1OntsOnsxMDE6e2w6ezU5OntjOls4ODg0LDg0MDJdfX19fX19fX19fX0sMTE0OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDQ5OV19fX19fX19LDExNjp7bDp7MTE0OntsOnsxMDU6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4ODUsODQwMl19fX19fX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODc2NCw4NDAyXX19fX19fX19fSwxMTk6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NjJdfX19fX19fSw5Nzp7bDp7MTE0OntsOnsxMDQ6e2w6ezEwNzp7bDp7NTk6e2M6WzEwNTMxXX19fX19LDExNDp7bDp7NTk6e2M6Wzg1OThdfSwxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OThdfX19fX19fX19fX0sMTEwOntsOnsxMDE6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDUzNV19fX19fX19fX19fX19LDExMTp7bDp7ODM6e2w6ezU5OntjOls5NDE2XX19fSw5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlsyNDNdfX0sYzpbMjQzXX19fX19fX0sMTE1OntsOnsxMTY6e2w6ezU5OntjOls4ODU5XX19fX19fX0sOTk6e2w6ezEwNTp7bDp7MTE0OntsOns1OTp7YzpbODg1OF19LDk5OntsOns1OTp7YzpbMjQ0XX19LGM6WzI0NF19fX19fSwxMjE6e2w6ezU5OntjOlsxMDg2XX19fX19LDEwMDp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODg2MV19fX19fX19LDk4OntsOnsxMDg6e2w6ezk3OntsOns5OTp7bDp7NTk6e2M6WzMzN119fX19fX19fX0sMTA1OntsOnsxMTg6e2w6ezU5OntjOlsxMDgwOF19fX19fSwxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg4NTddfX19fX0sMTE1OntsOnsxMTE6e2w6ezEwODp7bDp7MTAwOntsOns1OTp7YzpbMTA2ODRdfX19fX19fX19fX0sMTAxOntsOnsxMDg6e2w6ezEwNTp7bDp7MTAzOntsOns1OTp7YzpbMzM5XX19fX19fX19fSwxMDI6e2w6ezk5OntsOnsxMDU6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjg3XX19fX19fX0sMTE0OntsOns1OTp7YzpbMTIwMTA4XX19fX19LDEwMzp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls3MzFdfX19fX0sMTE0OntsOns5Nzp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOlsyNDJdfX0sYzpbMjQyXX19fX19fX0sMTE2OntsOns1OTp7YzpbMTA2ODldfX19fX0sMTA0OntsOns5ODp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjc3XX19fX19fX0sMTA5OntsOns1OTp7YzpbOTM3XX19fX19LDEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOls4NzUwXX19fX19fX0sMTA4OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjM0XX19fX19fX0sOTk6e2w6ezEwNTp7bDp7MTE0OntsOns1OTp7YzpbMTA2ODZdfX19fX0sMTE0OntsOnsxMTE6e2w6ezExNTp7bDp7MTE1OntsOns1OTp7YzpbMTA2ODNdfX19fX19fX19fX0sMTA1OntsOnsxMTA6e2w6ezEwMTp7bDp7NTk6e2M6WzgyNTRdfX19fX19fSwxMTY6e2w6ezU5OntjOlsxMDY4OF19fX19fSwxMDk6e2w6ezk3OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMzMzXX19fX19fX0sMTAxOntsOnsxMDM6e2w6ezk3OntsOns1OTp7YzpbOTY5XX19fX19fX0sMTA1OntsOns5OTp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6Wzk1OV19fX19fX19fX0sMTAwOntsOns1OTp7YzpbMTA2NzhdfX19LDExMDp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOls4ODU0XX19fX19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNjBdfX19fX19fSwxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDY3OV19fX19fSwxMDE6e2w6ezExNDp7bDp7MTEyOntsOns1OTp7YzpbMTA2ODFdfX19fX19fSwxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbODg1M119fX19fX19fX0sMTE0OntsOns1OTp7YzpbODc0NF19LDk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2MzVdfX19fX19fSwxMDA6e2w6ezU5OntjOlsxMDg0NV19LDEwMTp7bDp7MTE0OntsOns1OTp7YzpbODUwMF19LDExMTp7bDp7MTAyOntsOns1OTp7YzpbODUwMF19fX19fX19fX0sMTAyOntsOns1OTp7YzpbMTcwXX19LGM6WzE3MF19LDEwOTp7bDp7NTk6e2M6WzE4Nl19fSxjOlsxODZdfX19LDEwNTp7bDp7MTAzOntsOnsxMTE6e2w6ezEwMjp7bDp7NTk6e2M6Wzg4ODZdfX19fX19fX19LDExMTp7bDp7MTE0OntsOns1OTp7YzpbMTA4MzhdfX19fX0sMTE1OntsOnsxMDg6e2w6ezExMTp7bDp7MTEyOntsOnsxMDE6e2w6ezU5OntjOlsxMDgzOV19fX19fX19fX19fSwxMTg6e2w6ezU5OntjOlsxMDg0M119fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOls4NTAwXX19fX19LDEwODp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbMjQ4XX19LGM6WzI0OF19fX19fX19LDExMTp7bDp7MTA4OntsOns1OTp7YzpbODg1Nl19fX19fX19LDExNjp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbMjQ1XX19LGM6WzI0NV19fX19fSwxMDk6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbODg1NV19LDk3OntsOnsxMTU6e2w6ezU5OntjOlsxMDgwNl19fX19fX19fX19fX19fX0sMTE3OntsOnsxMDk6e2w6ezEwODp7bDp7NTk6e2M6WzI0Nl19fSxjOlsyNDZdfX19fX0sMTE4OntsOns5ODp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzkwMjFdfX19fX19fX19fX0sMTEyOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODc0MV19LDk3OntsOns1OTp7YzpbMTgyXX0sMTA4OntsOnsxMDg6e2w6ezEwMTp7bDp7MTA4OntsOns1OTp7YzpbODc0MV19fX19fX19fX19LGM6WzE4Ml19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOlsxMDk5NV19fX19fSwxMDg6e2w6ezU5OntjOlsxMTAwNV19fX19fSwxMTY6e2w6ezU5OntjOls4NzA2XX19fX19fX0sOTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwODddfX19fX0sMTAxOntsOnsxMTQ6e2w6ezk5OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6WzM3XX19fX19fX0sMTA1OntsOnsxMTE6e2w6ezEwMDp7bDp7NTk6e2M6WzQ2XX19fX19fX0sMTA5OntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzgyNDBdfX19fX19fSwxMTI6e2w6ezU5OntjOls4ODY5XX19fSwxMTY6e2w6ezEwMTp7bDp7MTEwOntsOnsxMDc6e2w6ezU5OntjOls4MjQxXX19fX19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMDldfX19fX0sMTA0OntsOnsxMDU6e2w6ezU5OntjOls5NjZdfSwxMTg6e2w6ezU5OntjOls5ODFdfX19fX0sMTA5OntsOnsxMDk6e2w6ezk3OntsOnsxMTY6e2w6ezU5OntjOls4NDk5XX19fX19fX19fSwxMTE6e2w6ezExMDp7bDp7MTAxOntsOns1OTp7YzpbOTc0Ml19fX19fX19fX0sMTA1OntsOns1OTp7YzpbOTYwXX0sMTE2OntsOns5OTp7bDp7MTA0OntsOnsxMDI6e2w6ezExMTp7bDp7MTE0OntsOnsxMDc6e2w6ezU5OntjOls4OTE2XX19fX19fX19fX19fX19fSwxMTg6e2w6ezU5OntjOls5ODJdfX19fX0sMTA4OntsOns5Nzp7bDp7MTEwOntsOns5OTp7bDp7MTA3OntsOns1OTp7YzpbODQ2M119LDEwNDp7bDp7NTk6e2M6Wzg0NjJdfX19fX19fSwxMDc6e2w6ezExODp7bDp7NTk6e2M6Wzg0NjNdfX19fX19fX19LDExNzp7bDp7MTE1OntsOns1OTp7YzpbNDNdfSw5Nzp7bDp7OTk6e2w6ezEwNTp7bDp7MTE0OntsOns1OTp7YzpbMTA3ODddfX19fX19fX19LDk4OntsOns1OTp7YzpbODg2Ml19fX0sOTk6e2w6ezEwNTp7bDp7MTE0OntsOns1OTp7YzpbMTA3ODZdfX19fX19fSwxMDA6e2w6ezExMTp7bDp7NTk6e2M6Wzg3MjRdfX19LDExNzp7bDp7NTk6e2M6WzEwNzg5XX19fX19LDEwMTp7bDp7NTk6e2M6WzEwODY2XX19fSwxMDk6e2w6ezExMDp7bDp7NTk6e2M6WzE3N119fSxjOlsxNzddfX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOlsxMDc5MF19fX19fX19LDExNjp7bDp7MTE5OntsOnsxMTE6e2w6ezU5OntjOlsxMDc5MV19fX19fX19fX19fX19LDEwOTp7bDp7NTk6e2M6WzE3N119fX0sMTExOntsOnsxMDU6e2w6ezExMDp7bDp7MTE2OntsOnsxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA3NzNdfX19fX19fX19fX19fSwxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE2MV19fX19fSwxMTc6e2w6ezExMDp7bDp7MTAwOntsOns1OTp7YzpbMTYzXX19LGM6WzE2M119fX19fX19LDExNDp7bDp7NTk6e2M6Wzg4MjZdfSw2OTp7bDp7NTk6e2M6WzEwOTMxXX19fSw5Nzp7bDp7MTEyOntsOns1OTp7YzpbMTA5MzVdfX19fX0sOTk6e2w6ezExNzp7bDp7MTAxOntsOns1OTp7YzpbODgyOF19fX19fX19LDEwMTp7bDp7NTk6e2M6WzEwOTI3XX0sOTk6e2w6ezU5OntjOls4ODI2XX0sOTc6e2w6ezExMjp7bDp7MTEyOntsOnsxMTQ6e2w6ezExMTp7bDp7MTIwOntsOns1OTp7YzpbMTA5MzVdfX19fX19fX19fX19fSw5OTp7bDp7MTE3OntsOnsxMTQ6e2w6ezEwODp7bDp7MTIxOntsOnsxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg4MjhdfX19fX19fX19fX19fX19LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbMTA5MjddfX19fX0sMTEwOntsOns5Nzp7bDp7MTEyOntsOnsxMTI6e2w6ezExNDp7bDp7MTExOntsOnsxMjA6e2w6ezU5OntjOlsxMDkzN119fX19fX19fX19fX19LDEwMTp7bDp7MTEzOntsOnsxMTM6e2w6ezU5OntjOlsxMDkzM119fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4OTM2XX19fX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODgzMF19fX19fX19fX19fSwxMDU6e2w6ezEwOTp7bDp7MTAxOntsOns1OTp7YzpbODI0Ml19LDExNTp7bDp7NTk6e2M6Wzg0NzNdfX19fX19fX19LDExMDp7bDp7Njk6e2w6ezU5OntjOlsxMDkzM119fX0sOTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwOTM3XX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4OTM2XX19fX19fX19fSwxMTE6e2w6ezEwMDp7bDp7NTk6e2M6Wzg3MTldfX19LDEwMjp7bDp7OTc6e2w6ezEwODp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzkwMDZdfX19fX19fX19LDEwODp7bDp7MTA1OntsOnsxMTA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5NzhdfX19fX19fX19LDExNTp7bDp7MTE3OntsOnsxMTQ6e2w6ezEwMjp7bDp7NTk6e2M6Wzg5NzldfX19fX19fX19fX0sMTEyOntsOns1OTp7YzpbODczM119LDExNjp7bDp7MTExOntsOns1OTp7YzpbODczM119fX19fX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg4MzBdfX19fX19fSwxMTc6e2w6ezExNDp7bDp7MTAxOntsOnsxMDg6e2w6ezU5OntjOls4ODgwXX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDAwNV19fX19fSwxMDU6e2w6ezU5OntjOls5NjhdfX19fX0sMTE3OntsOnsxMTA6e2w6ezk5OntsOnsxMTU6e2w6ezExMjp7bDp7NTk6e2M6WzgyMDBdfX19fX19fX19fX19fSwxMTM6e2w6ezEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMTEwXX19fX19LDEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOlsxMDc2NF19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNjJdfX19fX19fSwxMTI6e2w6ezExNDp7bDp7MTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7NTk6e2M6WzgyNzldfX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDA2XX19fX19fX0sMTE3OntsOns5Nzp7bDp7MTE2OntsOnsxMDE6e2w6ezExNDp7bDp7MTEwOntsOnsxMDU6e2w6ezExMTp7bDp7MTEwOntsOnsxMTU6e2w6ezU5OntjOls4NDYxXX19fX19fX19fX19fX19fSwxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA3NzRdfX19fX19fX19fX0sMTAxOntsOnsxMTU6e2w6ezExNjp7bDp7NTk6e2M6WzYzXX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4Nzk5XX19fX19fX19fX19LDExMTp7bDp7MTE2OntsOns1OTp7YzpbMzRdfX0sYzpbMzRdfX19fX19fSwxMTQ6e2w6ezY1OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjY3XX19fX19fX0sMTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjU4XX19fX19LDExNjp7bDp7OTc6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMTA1MjRdfX19fX19fX19fX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTExXX19fX19fX19fSw3Mjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTk2XX19fX19fX0sOTc6e2w6ezk5OntsOnsxMDE6e2w6ezU5OntjOls4NzY1LDgxN119fX0sMTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzM0MV19fX19fX19fX0sMTAwOntsOnsxMDU6e2w6ezk5OntsOns1OTp7YzpbODczMF19fX19fX19LDEwMTp7bDp7MTA5OntsOnsxMTI6e2w6ezExNjp7bDp7MTIxOntsOnsxMTg6e2w6ezU5OntjOlsxMDY3NV19fX19fX19fX19fX19LDExMDp7bDp7MTAzOntsOns1OTp7YzpbMTAyMTddfSwxMDA6e2w6ezU5OntjOlsxMDY0Ml19fX0sMTAxOntsOns1OTp7YzpbMTA2NjFdfX19LDEwODp7bDp7MTAxOntsOns1OTp7YzpbMTAyMTddfX19fX19fX19LDExMzp7bDp7MTE3OntsOnsxMTE6e2w6ezU5OntjOlsxODddfX0sYzpbMTg3XX19fX19LDExNDp7bDp7MTE0OntsOns1OTp7YzpbODU5NF19LDk3OntsOnsxMTI6e2w6ezU5OntjOlsxMDYxM119fX19fSw5ODp7bDp7NTk6e2M6Wzg2NzddfSwxMDI6e2w6ezExNTp7bDp7NTk6e2M6WzEwNTI4XX19fX19fX0sOTk6e2w6ezU5OntjOlsxMDU0N119fX0sMTAyOntsOnsxMTU6e2w6ezU5OntjOlsxMDUyNl19fX19fSwxMDQ6e2w6ezEwNzp7bDp7NTk6e2M6Wzg2MThdfX19fX0sMTA4OntsOnsxMTI6e2w6ezU5OntjOls4NjIwXX19fX19LDExMjp7bDp7MTA4OntsOns1OTp7YzpbMTA1NjVdfX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6WzEwNjEyXX19fX19fX0sMTE2OntsOnsxMDg6e2w6ezU5OntjOls4NjExXX19fX19LDExOTp7bDp7NTk6e2M6Wzg2MDVdfX19fX19fSwxMTY6e2w6ezk3OntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzEwNTIyXX19fX19fX0sMTA1OntsOnsxMTE6e2w6ezU5OntjOls4NzU4XX0sMTEwOntsOns5Nzp7bDp7MTA4OntsOnsxMTU6e2w6ezU5OntjOls4NDc0XX19fX19fX19fX19fX19fX19LDk4OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDUwOV19fX19fX19LDk4OntsOnsxMTQ6e2w6ezEwNzp7bDp7NTk6e2M6WzEwMDk5XX19fX19fX0sMTE0OntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6WzEyNV19fX0sMTA3OntsOns1OTp7YzpbOTNdfX19fX19fSwxMDc6e2w6ezEwMTp7bDp7NTk6e2M6WzEwNjM2XX19fSwxMTU6e2w6ezEwODp7bDp7MTAwOntsOns1OTp7YzpbMTA2MzhdfX19LDExNzp7bDp7NTk6e2M6WzEwNjQwXX19fX19fX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzQ1XX19fX19fX19fSwxMDE6e2w6ezEwMDp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOlszNDNdfX19fX19fSwxMDU6e2w6ezEwODp7bDp7NTk6e2M6Wzg5NjldfX19fX19fSwxMTc6e2w6ezk4OntsOns1OTp7YzpbMTI1XX19fX19LDEyMTp7bDp7NTk6e2M6WzEwODhdfX19fX0sMTAwOntsOns5OTp7bDp7OTc6e2w6ezU5OntjOlsxMDU1MV19fX19fSwxMDg6e2w6ezEwMDp7bDp7MTA0OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA2MDFdfX19fX19fX19fX0sMTEzOntsOnsxMTc6e2w6ezExMTp7bDp7NTk6e2M6WzgyMjFdfSwxMTQ6e2w6ezU5OntjOls4MjIxXX19fX19fX19fSwxMTU6e2w6ezEwNDp7bDp7NTk6e2M6Wzg2MjddfX19fX19fSwxMDE6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4NDc2XX0sMTA1OntsOnsxMTA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg0NzVdfX19fX19fSwxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezExNjp7bDp7NTk6e2M6Wzg0NzZdfX19fX19fX19LDExNTp7bDp7NTk6e2M6Wzg0NzddfX19fX19fSw5OTp7bDp7MTE2OntsOns1OTp7YzpbOTY0NV19fX19fSwxMDM6e2w6ezU5OntjOlsxNzRdfX0sYzpbMTc0XX19fSwxMDI6e2w6ezEwNTp7bDp7MTE1OntsOnsxMDQ6e2w6ezExNjp7bDp7NTk6e2M6WzEwNjIxXX19fX19fX19fSwxMDg6e2w6ezExMTp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOls4OTcxXX19fX19fX19fSwxMTQ6e2w6ezU5OntjOlsxMjAxMTFdfX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOnsxMDA6e2w6ezU5OntjOls4NjQxXX19fSwxMTc6e2w6ezU5OntjOls4NjQwXX0sMTA4OntsOns1OTp7YzpbMTA2MDRdfX19fX19fX19LDExMTp7bDp7NTk6e2M6Wzk2MV19LDExODp7bDp7NTk6e2M6WzEwMDldfX19fX19fSwxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTk0XX0sMTE2OntsOns5Nzp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOls4NjExXX19fX19fX19fX19fX19fX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOnsxMTI6e2w6ezExMTp7bDp7MTExOntsOnsxMTA6e2w6ezEwMDp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7NTk6e2M6Wzg2NDFdfX19fX19fX19LDExNzp7bDp7MTEyOntsOns1OTp7YzpbODY0MF19fX19fX19fX19fX19fX19fX19LDEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7MTE1OntsOns1OTp7YzpbODY0NF19fX19fX19fX19fX19LDEwNDp7bDp7OTc6e2w6ezExNDp7bDp7MTEyOntsOnsxMTE6e2w6ezExMTp7bDp7MTEwOntsOnsxMTU6e2w6ezU5OntjOls4NjUyXX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezExNTp7bDp7NTk6e2M6Wzg2NDldfX19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOnsxMTM6e2w6ezExNzp7bDp7MTA1OntsOnsxMDM6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjA1XX19fX19fX19fX19fX19fX19fX19fSwxMTY6e2w6ezEwNDp7bDp7MTE0OntsOnsxMDE6e2w6ezEwMTp7bDp7MTE2OntsOnsxMDU6e2w6ezEwOTp7bDp7MTAxOntsOnsxMTU6e2w6ezU5OntjOls4OTA4XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTA6e2w6ezEwMzp7bDp7NTk6e2M6WzczMF19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDM6e2w6ezEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezExNTp7bDp7MTAxOntsOnsxMTM6e2w6ezU5OntjOls4Nzg3XX19fX19fX19fX19fX19fX19fX19fX19LDEwODp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY0NF19fX19fX19LDEwNDp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NTJdfX19fX19fSwxMDk6e2w6ezU5OntjOls4MjA3XX19fX19LDEwOTp7bDp7MTExOntsOnsxMTc6e2w6ezExNTp7bDp7MTE2OntsOns1OTp7YzpbOTEzN119LDk3OntsOns5OTp7bDp7MTA0OntsOnsxMDE6e2w6ezU5OntjOls5MTM3XX19fX19fX19fX19fX19fX19fX0sMTEwOntsOnsxMDk6e2w6ezEwNTp7bDp7MTAwOntsOns1OTp7YzpbMTA5OTBdfX19fX19fX19LDExMTp7bDp7OTc6e2w6ezExMDp7bDp7MTAzOntsOns1OTp7YzpbMTAyMjFdfX19fX0sMTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NzAyXX19fX19fX0sOTg6e2w6ezExNDp7bDp7MTA3OntsOns1OTp7YzpbMTAyMTVdfX19fX19fSwxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDYzMF19fX19fSwxMDI6e2w6ezU5OntjOlsxMjAxNjNdfX19LDEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOlsxMDc5OF19fX19fX19fX0sMTE2OntsOnsxMDU6e2w6ezEwOTp7bDp7MTAxOntsOnsxMTU6e2w6ezU5OntjOlsxMDgwNV19fX19fX19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzQxXX0sMTAzOntsOnsxMTY6e2w6ezU5OntjOlsxMDY0NF19fX19fX19fX0sMTEyOntsOnsxMTE6e2w6ezEwODp7bDp7MTA1OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6WzEwNzcwXX19fX19fX19fX19fX19fSwxMTQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NDldfX19fX19fX19LDExNTp7bDp7OTc6e2w6ezExMzp7bDp7MTE3OntsOnsxMTE6e2w6ezU5OntjOls4MjUwXX19fX19fX19fSw5OTp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDA3XX19fX19LDEwNDp7bDp7NTk6e2M6Wzg2MjVdfX19LDExMzp7bDp7OTg6e2w6ezU5OntjOls5M119fX0sMTE3OntsOnsxMTE6e2w6ezU5OntjOls4MjE3XX0sMTE0OntsOns1OTp7YzpbODIxN119fX19fX19fX19fSwxMTY6e2w6ezEwNDp7bDp7MTE0OntsOnsxMDE6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5MDhdfX19fX19fX19LDEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6Wzg5MDZdfX19fX19fX19LDExNDp7bDp7MTA1OntsOns1OTp7YzpbOTY1N119LDEwMTp7bDp7NTk6e2M6Wzg4ODVdfX19LDEwMjp7bDp7NTk6e2M6Wzk2NTZdfX19LDEwODp7bDp7MTE2OntsOnsxMTQ6e2w6ezEwNTp7bDp7NTk6e2M6WzEwNzAyXX19fX19fX19fX19fX19fSwxMTc6e2w6ezEwODp7bDp7MTE3OntsOnsxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDYwMF19fX19fX19fX19fX19LDEyMDp7bDp7NTk6e2M6Wzg0NzhdfX19fX0sMTE1OntsOns5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlszNDddfX19fX19fX19fX0sOTg6e2w6ezExMzp7bDp7MTE3OntsOnsxMTE6e2w6ezU5OntjOls4MjE4XX19fX19fX19fSw5OTp7bDp7NTk6e2M6Wzg4MjddfSw2OTp7bDp7NTk6e2M6WzEwOTMyXX19fSw5Nzp7bDp7MTEyOntsOns1OTp7YzpbMTA5MzZdfX19LDExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlszNTNdfX19fX19fX19LDk5OntsOnsxMTc6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4MjldfX19fX19fSwxMDE6e2w6ezU5OntjOlsxMDkyOF19LDEwMDp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOlszNTFdfX19fX19fX19LDEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzM0OV19fX19fX19LDExMDp7bDp7Njk6e2w6ezU5OntjOlsxMDkzNF19fX0sOTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwOTM4XX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4OTM3XX19fX19fX19fSwxMTI6e2w6ezExMTp7bDp7MTA4OntsOnsxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA3NzFdfX19fX19fX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODgzMV19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwODldfX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5MDFdfSw5ODp7bDp7NTk6e2M6Wzg4NjVdfX19LDEwMTp7bDp7NTk6e2M6WzEwODU0XX19fX19fX19fSwxMDE6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NjRdfX19fX19fSw5Nzp7bDp7MTE0OntsOnsxMDQ6e2w6ezEwNzp7bDp7NTk6e2M6WzEwNTMzXX19fX19LDExNDp7bDp7NTk6e2M6Wzg2MDBdfSwxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MDBdfX19fX19fX19fX0sOTk6e2w6ezExNjp7bDp7NTk6e2M6WzE2N119fSxjOlsxNjddfX19LDEwOTp7bDp7MTA1OntsOns1OTp7YzpbNTldfX19fX0sMTE1OntsOnsxMTk6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDUzN119fX19fX19fX0sMTE2OntsOnsxMDk6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6Wzg3MjZdfX19fX19fX19LDExMDp7bDp7NTk6e2M6Wzg3MjZdfX19fX19fSwxMjA6e2w6ezExNjp7bDp7NTk6e2M6WzEwMDM4XX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMTJdfSwxMTE6e2w6ezExOTp7bDp7MTEwOntsOns1OTp7YzpbODk5NF19fX19fX19fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExMjp7bDp7NTk6e2M6Wzk4MzldfX19fX19fSw5OTp7bDp7MTA0OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA5N119fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwOTZdfX19fX0sMTExOntsOnsxMTQ6e2w6ezExNjp7bDp7MTA5OntsOnsxMDU6e2w6ezEwMDp7bDp7NTk6e2M6Wzg3MzldfX19fX19fSwxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezk3OntsOnsxMDg6e2w6ezEwODp7bDp7MTAxOntsOnsxMDg6e2w6ezU5OntjOls4NzQxXX19fX19fX19fX19fX19fX19fX19fX19LDEyMTp7bDp7NTk6e2M6WzE3M119fSxjOlsxNzNdfX19LDEwNTp7bDp7MTAzOntsOnsxMDk6e2w6ezk3OntsOns1OTp7YzpbOTYzXX0sMTAyOntsOns1OTp7YzpbOTYyXX19fSwxMTg6e2w6ezU5OntjOls5NjJdfX19fX19fX19LDEwOTp7bDp7NTk6e2M6Wzg3NjRdfSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTA4NThdfX19fX19fSwxMDE6e2w6ezU5OntjOls4NzcxXX0sMTEzOntsOns1OTp7YzpbODc3MV19fX19fSwxMDM6e2w6ezU5OntjOlsxMDkxMF19LDY5OntsOns1OTp7YzpbMTA5MTJdfX19fX0sMTA4OntsOns1OTp7YzpbMTA5MDldfSw2OTp7bDp7NTk6e2M6WzEwOTExXX19fX19LDExMDp7bDp7MTAxOntsOns1OTp7YzpbODc3NF19fX19fSwxMTI6e2w6ezEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOlsxMDc4OF19fX19fX19fX0sMTE0OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDYxMF19fX19fX19fX19fX19LDEwODp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODU5Ml19fX19fX19fX0sMTA5OntsOns5Nzp7bDp7MTA4OntsOnsxMDg6e2w6ezExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezEwOTp7bDp7MTA1OntsOnsxMTA6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbODcyNl19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOnsxMDQ6e2w6ezExMjp7bDp7NTk6e2M6WzEwODAzXX19fX19fX19fSwxMDE6e2w6ezExMjp7bDp7OTc6e2w6ezExNDp7bDp7MTE1OntsOnsxMDg6e2w6ezU5OntjOlsxMDcyNF19fX19fX19fX19fX19LDEwNTp7bDp7MTAwOntsOns1OTp7YzpbODczOV19fX0sMTA4OntsOnsxMDE6e2w6ezU5OntjOls4OTk1XX19fX19fX0sMTE2OntsOns1OTp7YzpbMTA5MjJdfSwxMDE6e2w6ezU5OntjOlsxMDkyNF19LDExNTp7bDp7NTk6e2M6WzEwOTI0LDY1MDI0XX19fX19fX19fSwxMTE6e2w6ezEwMjp7bDp7MTE2OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTEwMF19fX19fX19fX0sMTA4OntsOns1OTp7YzpbNDddfSw5ODp7bDp7NTk6e2M6WzEwNjkyXX0sOTc6e2w6ezExNDp7bDp7NTk6e2M6WzkwMjNdfX19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTY0XX19fX19fX0sMTEyOntsOns5Nzp7bDp7MTAwOntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6Wzk4MjRdfSwxMTc6e2w6ezEwNTp7bDp7MTE2OntsOns1OTp7YzpbOTgyNF19fX19fX19fX19fX19LDExNDp7bDp7NTk6e2M6Wzg3NDFdfX19fX19fSwxMTM6e2w6ezk5OntsOns5Nzp7bDp7MTEyOntsOns1OTp7YzpbODg1MV19LDExNTp7bDp7NTk6e2M6Wzg4NTEsNjUwMjRdfX19fX19fSwxMTc6e2w6ezExMjp7bDp7NTk6e2M6Wzg4NTJdfSwxMTU6e2w6ezU5OntjOls4ODUyLDY1MDI0XX19fX19fX19fSwxMTU6e2w6ezExNzp7bDp7OTg6e2w6ezU5OntjOls4ODQ3XX0sMTAxOntsOns1OTp7YzpbODg0OV19fX0sMTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg4NDddfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg4NDldfX19fX19fX19fX19fSwxMTI6e2w6ezU5OntjOls4ODQ4XX0sMTAxOntsOns1OTp7YzpbODg1MF19fX0sMTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg4NDhdfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg4NTBdfX19fX19fX19fX19fX19fX0sMTE3OntsOns1OTp7YzpbOTYzM119LDk3OntsOnsxMTQ6e2w6ezEwMTp7bDp7NTk6e2M6Wzk2MzNdfX19LDEwMjp7bDp7NTk6e2M6Wzk2NDJdfX19fX19fSwxMDI6e2w6ezU5OntjOls5NjQyXX19fX19fX0sMTE0OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NTk0XX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwMDhdfX19fX0sMTAxOntsOnsxMTY6e2w6ezEwOTp7bDp7MTEwOntsOns1OTp7YzpbODcyNl19fX19fX19fX0sMTA5OntsOnsxMDU6e2w6ezEwODp7bDp7MTAxOntsOns1OTp7YzpbODk5NV19fX19fX19fX0sMTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMDI6e2w6ezU5OntjOls4OTAyXX19fX19fX19fX19LDExNjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6Wzk3MzRdfSwxMDI6e2w6ezU5OntjOls5NzMzXX19fX19fX0sMTE0OntsOns5Nzp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOnsxMDE6e2w6ezExMjp7bDp7MTE1OntsOnsxMDU6e2w6ezEwODp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlsxMDEzXX19fX19fX19fX19fX19fSwxMTI6e2w6ezEwNDp7bDp7MTA1OntsOns1OTp7YzpbOTgxXX19fX19fX19fX19fX19fX19LDExMDp7bDp7MTE1OntsOns1OTp7YzpbMTc1XX19fX19fX19fSwxMTc6e2w6ezk4OntsOns1OTp7YzpbODgzNF19LDY5OntsOns1OTp7YzpbMTA5NDldfX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDk0MV19fX19fX19LDEwMTp7bDp7NTk6e2M6Wzg4MzhdfSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTA5NDddfX19fX19fX19LDEwOTp7bDp7MTE3OntsOnsxMDg6e2w6ezExNjp7bDp7NTk6e2M6WzEwOTQ1XX19fX19fX19fSwxMTA6e2w6ezY5OntsOns1OTp7YzpbMTA5NTVdfX19LDEwMTp7bDp7NTk6e2M6Wzg4NDJdfX19fX0sMTEyOntsOnsxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbMTA5NDNdfX19fX19fX19LDExNDp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbMTA2MTddfX19fX19fX19LDExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4ODM0XX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4ODM4XX0sMTEzOntsOns1OTp7YzpbMTA5NDldfX19fX19fSwxMTA6e2w6ezEwMTp7bDp7MTEzOntsOns1OTp7YzpbODg0Ml19LDExMzp7bDp7NTk6e2M6WzEwOTU1XX19fX19fX19fX19fX0sMTA1OntsOnsxMDk6e2w6ezU5OntjOlsxMDk1MV19fX19fSwxMTc6e2w6ezk4OntsOns1OTp7YzpbMTA5NjVdfX19LDExMjp7bDp7NTk6e2M6WzEwOTYzXX19fX19fX19fSw5OTp7bDp7OTk6e2w6ezU5OntjOls4ODI3XX0sOTc6e2w6ezExMjp7bDp7MTEyOntsOnsxMTQ6e2w6ezExMTp7bDp7MTIwOntsOns1OTp7YzpbMTA5MzZdfX19fX19fX19fX19fSw5OTp7bDp7MTE3OntsOnsxMTQ6e2w6ezEwODp7bDp7MTIxOntsOnsxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg4MjldfX19fX19fX19fX19fX19LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbMTA5MjhdfX19fX0sMTEwOntsOns5Nzp7bDp7MTEyOntsOnsxMTI6e2w6ezExNDp7bDp7MTExOntsOnsxMjA6e2w6ezU5OntjOlsxMDkzOF19fX19fX19fX19fX19LDEwMTp7bDp7MTEzOntsOnsxMTM6e2w6ezU5OntjOlsxMDkzNF19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4OTM3XX19fX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODgzMV19fX19fX19fX19fSwxMDk6e2w6ezU5OntjOls4NzIxXX19fSwxMTA6e2w6ezEwMzp7bDp7NTk6e2M6Wzk4MzRdfX19fX0sMTEyOntsOns0OTp7bDp7NTk6e2M6WzE4NV19fSxjOlsxODVdfSw1MDp7bDp7NTk6e2M6WzE3OF19fSxjOlsxNzhdfSw1MTp7bDp7NTk6e2M6WzE3OV19fSxjOlsxNzldfSw1OTp7YzpbODgzNV19LDY5OntsOns1OTp7YzpbMTA5NTBdfX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDk0Ml19fX19fSwxMTU6e2w6ezExNzp7bDp7OTg6e2w6ezU5OntjOlsxMDk2OF19fX19fX19fX0sMTAxOntsOns1OTp7YzpbODgzOV19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDk0OF19fX19fX19fX0sMTA0OntsOnsxMTU6e2w6ezExMTp7bDp7MTA4OntsOns1OTp7YzpbMTAxODVdfX19fX0sMTE3OntsOns5ODp7bDp7NTk6e2M6WzEwOTY3XX19fX19fX19fSwxMDg6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjE5XX19fX19fX19fSwxMDk6e2w6ezExNzp7bDp7MTA4OntsOnsxMTY6e2w6ezU5OntjOlsxMDk0Nl19fX19fX19fX0sMTEwOntsOns2OTp7bDp7NTk6e2M6WzEwOTU2XX19fSwxMDE6e2w6ezU5OntjOls4ODQzXX19fX19LDExMjp7bDp7MTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6WzEwOTQ0XX19fX19fX19fSwxMTU6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbODgzNV19LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbODgzOV19LDExMzp7bDp7NTk6e2M6WzEwOTUwXX19fX19fX0sMTEwOntsOnsxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg4NDNdfSwxMTM6e2w6ezU5OntjOlsxMDk1Nl19fX19fX19fX19fX19LDEwNTp7bDp7MTA5OntsOns1OTp7YzpbMTA5NTJdfX19fX0sMTE3OntsOns5ODp7bDp7NTk6e2M6WzEwOTY0XX19fSwxMTI6e2w6ezU5OntjOlsxMDk2Nl19fX19fX19fX19fSwxMTk6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NjVdfX19fX19fSw5Nzp7bDp7MTE0OntsOnsxMDQ6e2w6ezEwNzp7bDp7NTk6e2M6WzEwNTM0XX19fX19LDExNDp7bDp7NTk6e2M6Wzg2MDFdfSwxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MDFdfX19fX19fX19fX0sMTEwOntsOnsxMTk6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDUzOF19fX19fX19fX19fSwxMjI6e2w6ezEwODp7bDp7MTA1OntsOnsxMDM6e2w6ezU5OntjOlsyMjNdfX0sYzpbMjIzXX19fX19fX19fSwxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezEwMzp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4OTgyXX19fX19fX19fSwxMTc6e2w6ezU5OntjOls5NjRdfX19fX0sOTg6e2w6ezExNDp7bDp7MTA3OntsOns1OTp7YzpbOTE0MF19fX19fX19LDk5OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzM1N119fX19fX19fX0sMTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMzU1XX19fX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDkwXX19fX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOls4NDExXX19fX19fX0sMTAxOntsOnsxMDg6e2w6ezExNDp7bDp7MTAxOntsOns5OTp7bDp7NTk6e2M6Wzg5ODFdfX19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMTNdfX19fX0sMTA0OntsOnsxMDE6e2w6ezExNDp7bDp7MTAxOntsOns1Mjp7bDp7NTk6e2M6Wzg3NTZdfX19LDEwMjp7bDp7MTExOntsOnsxMTQ6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NTZdfX19fX19fX19fX19fSwxMTY6e2w6ezk3OntsOns1OTp7YzpbOTUyXX0sMTE1OntsOnsxMjE6e2w6ezEwOTp7bDp7NTk6e2M6Wzk3N119fX19fX19LDExODp7bDp7NTk6e2M6Wzk3N119fX19fX19fX0sMTA1OntsOns5OTp7bDp7MTA3OntsOns5Nzp7bDp7MTEyOntsOnsxMTI6e2w6ezExNDp7bDp7MTExOntsOnsxMjA6e2w6ezU5OntjOls4Nzc2XX19fX19fX19fX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg3NjRdfX19fX19fX19fX0sMTEwOntsOnsxMTU6e2w6ezExMjp7bDp7NTk6e2M6WzgyMDFdfX19fX19fX19LDEwNzp7bDp7OTc6e2w6ezExMjp7bDp7NTk6e2M6Wzg3NzZdfX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg3NjRdfX19fX19fX19LDExMTp7bDp7MTE0OntsOnsxMTA6e2w6ezU5OntjOlsyNTRdfX0sYzpbMjU0XX19fX19fX0sMTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbNzMyXX19fX19fX0sMTA5OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6WzIxNV19LDk4OntsOns1OTp7YzpbODg2NF19LDk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDgwMV19fX19fX19LDEwMDp7bDp7NTk6e2M6WzEwODAwXX19fX0sYzpbMjE1XX19fX19LDExMDp7bDp7MTE2OntsOns1OTp7YzpbODc0OV19fX19fX19LDExMTp7bDp7MTAxOntsOns5Nzp7bDp7NTk6e2M6WzEwNTM2XX19fX19LDExMjp7bDp7NTk6e2M6Wzg4NjhdfSw5ODp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOls5MDE0XX19fX19fX0sOTk6e2w6ezEwNTp7bDp7MTE0OntsOns1OTp7YzpbMTA5OTNdfX19fX19fSwxMDI6e2w6ezU5OntjOlsxMjAxNjVdfSwxMTE6e2w6ezExNDp7bDp7MTA3OntsOns1OTp7YzpbMTA5NzBdfX19fX19fX19fX0sMTE1OntsOns5Nzp7bDp7NTk6e2M6WzEwNTM3XX19fX19fX0sMTEyOntsOnsxMTQ6e2w6ezEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezU5OntjOls4MjQ0XX19fX19fX19fX19LDExNDp7bDp7OTc6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbODQ4Ml19fX19fX19LDEwNTp7bDp7OTc6e2w6ezExMDp7bDp7MTAzOntsOnsxMDg6e2w6ezEwMTp7bDp7NTk6e2M6Wzk2NTNdfSwxMDA6e2w6ezExMTp7bDp7MTE5OntsOnsxMTA6e2w6ezU5OntjOls5NjYzXX19fX19fX19fSwxMDg6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezU5OntjOls5NjY3XX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4ODg0XX19fX19fX19fX19fX0sMTEzOntsOns1OTp7YzpbODc5Nl19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOls5NjU3XX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4ODg1XX19fX19fX19fX19fX19fX19fX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzk3MDhdfX19fX19fSwxMDE6e2w6ezU5OntjOls4Nzk2XX19fSwxMDk6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6WzEwODEwXX19fX19fX19fX19LDExMjp7bDp7MTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6WzEwODA5XX19fX19fX19fSwxMTU6e2w6ezk4OntsOns1OTp7YzpbMTA3MDFdfX19fX0sMTE2OntsOnsxMDU6e2w6ezEwOTp7bDp7MTAxOntsOns1OTp7YzpbMTA4MTFdfX19fX19fX19fX0sMTEyOntsOnsxMDE6e2w6ezEyMjp7bDp7MTA1OntsOnsxMTc6e2w6ezEwOTp7bDp7NTk6e2M6WzkxODZdfX19fX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDAwOV19fX0sMTIxOntsOns1OTp7YzpbMTA5NF19fX19fSwxMDQ6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMTE1XX19fX19fX0sMTE2OntsOnsxMTQ6e2w6ezExMTp7bDp7MTA3OntsOns1OTp7YzpbMzU5XX19fX19fX19fX19LDExOTp7bDp7MTA1OntsOnsxMjA6e2w6ezExNjp7bDp7NTk6e2M6Wzg4MTJdfX19fX19fSwxMTE6e2w6ezEwNDp7bDp7MTAxOntsOns5Nzp7bDp7MTAwOntsOnsxMDg6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjA2XX19fX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjA4XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExNzp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY1N119fX19fX19LDcyOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1OTVdfX19fX19fSw5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlsyNTBdfX0sYzpbMjUwXX19fX19fX0sMTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NTkzXX19fX19fX0sOTg6e2w6ezExNDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzExMThdfX19fX0sMTAxOntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6WzM2NV19fX19fX19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMjUxXX19LGM6WzI1MV19fX19fSwxMjE6e2w6ezU5OntjOlsxMDkxXX19fX19LDEwMDp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY0NV19fX19fX19LDk4OntsOnsxMDg6e2w6ezk3OntsOns5OTp7bDp7NTk6e2M6WzM2OV19fX19fX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA2MDZdfX19fX19fX19LDEwMjp7bDp7MTA1OntsOnsxMTU6e2w6ezEwNDp7bDp7MTE2OntsOns1OTp7YzpbMTA2MjJdfX19fX19fX19LDExNDp7bDp7NTk6e2M6WzEyMDExNF19fX19fSwxMDM6e2w6ezExNDp7bDp7OTc6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbMjQ5XX19LGM6WzI0OV19fX19fX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOnsxMDg6e2w6ezU5OntjOls4NjM5XX19fSwxMTQ6e2w6ezU5OntjOls4NjM4XX19fX19fX0sOTg6e2w6ezEwODp7bDp7MTA3OntsOns1OTp7YzpbOTYwMF19fX19fX19fX0sMTA4OntsOns5OTp7bDp7MTExOntsOnsxMTQ6e2w6ezExMDp7bDp7NTk6e2M6Wzg5ODhdfSwxMDE6e2w6ezExNDp7bDp7NTk6e2M6Wzg5ODhdfX19fX19fX19fX0sMTE0OntsOnsxMTE6e2w6ezExMjp7bDp7NTk6e2M6Wzg5NzVdfX19fX19fX19LDExNjp7bDp7MTE0OntsOnsxMDU6e2w6ezU5OntjOls5NzIwXX19fX19fX19fSwxMDk6e2w6ezk3OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMzYzXX19fX19fX0sMTA4OntsOns1OTp7YzpbMTY4XX19LGM6WzE2OF19fX0sMTExOntsOnsxMDM6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzcxXX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNjZdfX19fX19fSwxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTkzXX19fX19fX19fX19LDEwMDp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTddfX19fX19fX19fX19fX19fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExMjp7bDp7MTExOntsOnsxMTE6e2w6ezExMDp7bDp7MTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns1OTp7YzpbODYzOV19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOls4NjM4XX19fX19fX19fX19fX19fX19fX19fX19fX0sMTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6Wzg4NDZdfX19fX19fSwxMTU6e2w6ezEwNTp7bDp7NTk6e2M6Wzk2NV19LDEwNDp7bDp7NTk6e2M6Wzk3OF19fX0sMTA4OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6Wzk2NV19fX19fX19fX19fSwxMTc6e2w6ezExMjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7MTE1OntsOns1OTp7YzpbODY0OF19fX19fX19fX19fX19fX19fX19LDExNDp7bDp7OTk6e2w6ezExMTp7bDp7MTE0OntsOnsxMTA6e2w6ezU5OntjOls4OTg5XX0sMTAxOntsOnsxMTQ6e2w6ezU5OntjOls4OTg5XX19fX19fX19fX19LDExNDp7bDp7MTExOntsOnsxMTI6e2w6ezU5OntjOls4OTc0XX19fX19fX19fSwxMDU6e2w6ezExMDp7bDp7MTAzOntsOns1OTp7YzpbMzY3XX19fX19fX0sMTE2OntsOnsxMTQ6e2w6ezEwNTp7bDp7NTk6e2M6Wzk3MjFdfX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDAxMF19fX19fX19LDExNjp7bDp7MTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5NDRdfX19fX19fSwxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOlszNjFdfX19fX19fX19LDExNDp7bDp7MTA1OntsOns1OTp7YzpbOTY1M119LDEwMjp7bDp7NTk6e2M6Wzk2NTJdfX19fX19fX19LDExNzp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY0OF19fX19fX19LDEwOTp7bDp7MTA4OntsOns1OTp7YzpbMjUyXX19LGM6WzI1Ml19fX19fSwxMTk6e2w6ezk3OntsOnsxMTA6e2w6ezEwMzp7bDp7MTA4OntsOnsxMDE6e2w6ezU5OntjOlsxMDY2M119fX19fX19fX19fX19fX0sMTE4OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjYxXX19fX19fX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDk4NF19LDExODp7bDp7NTk6e2M6WzEwOTg1XX19fX19fX19fSw2ODp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODg3Ml19fX19fX19fX0sOTc6e2w6ezExMDp7bDp7MTAzOntsOnsxMTQ6e2w6ezExNjp7bDp7NTk6e2M6WzEwNjUyXX19fX19fX19fSwxMTQ6e2w6ezEwMTp7bDp7MTEyOntsOnsxMTU6e2w6ezEwNTp7bDp7MTA4OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzEwMTNdfX19fX19fX19fX19fX19LDEwNzp7bDp7OTc6e2w6ezExMjp7bDp7MTEyOntsOns5Nzp7bDp7NTk6e2M6WzEwMDhdfX19fX19fX19fX0sMTEwOntsOnsxMTE6e2w6ezExNjp7bDp7MTA0OntsOnsxMDU6e2w6ezExMDp7bDp7MTAzOntsOns1OTp7YzpbODcwOV19fX19fX19fX19fX19fX0sMTEyOntsOnsxMDQ6e2w6ezEwNTp7bDp7NTk6e2M6Wzk4MV19fX19fSwxMDU6e2w6ezU5OntjOls5ODJdfX19LDExNDp7bDp7MTExOntsOnsxMTI6e2w6ezExNjp7bDp7MTExOntsOns1OTp7YzpbODczM119fX19fX19fX19fX19LDExNDp7bDp7NTk6e2M6Wzg1OTddfSwxMDQ6e2w6ezExMTp7bDp7NTk6e2M6WzEwMDldfX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDk6e2w6ezk3OntsOns1OTp7YzpbOTYyXX19fX19fX19fSwxMTc6e2w6ezk4OntsOnsxMTU6e2w6ezEwMTp7bDp7MTE2OntsOnsxMTA6e2w6ezEwMTp7bDp7MTEzOntsOns1OTp7YzpbODg0Miw2NTAyNF19LDExMzp7bDp7NTk6e2M6WzEwOTU1LDY1MDI0XX19fX19fX19fX19fX19fX19LDExMjp7bDp7MTE1OntsOnsxMDE6e2w6ezExNjp7bDp7MTEwOntsOnsxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg4NDMsNjUwMjRdfSwxMTM6e2w6ezU5OntjOlsxMDk1Niw2NTAyNF19fX19fX19fX19fX19fX19fX19fX0sMTE2OntsOnsxMDQ6e2w6ezEwMTp7bDp7MTE2OntsOns5Nzp7bDp7NTk6e2M6Wzk3N119fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezk3OntsOnsxMTA6e2w6ezEwMzp7bDp7MTA4OntsOnsxMDE6e2w6ezEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NTk6e2M6Wzg4ODJdfX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns1OTp7YzpbODg4M119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDc0XX19fX19LDEwMDp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODg2Nl19fX19fX19fX0sMTAxOntsOnsxMDE6e2w6ezU5OntjOls4NzQ0XX0sOTg6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOls4ODkxXX19fX19fX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4Nzk0XX19fX19fX0sMTA4OntsOnsxMDg6e2w6ezEwNTp7bDp7MTEyOntsOns1OTp7YzpbODk0Ml19fX19fX19fX0sMTE0OntsOns5ODp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEyNF19fX19fX19LDExNjp7bDp7NTk6e2M6WzEyNF19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMTE1XX19fX19LDEwODp7bDp7MTE2OntsOnsxMTQ6e2w6ezEwNTp7bDp7NTk6e2M6Wzg4ODJdfX19fX19fX19LDExMDp7bDp7MTE1OntsOnsxMTc6e2w6ezk4OntsOns1OTp7YzpbODgzNCw4NDAyXX19fSwxMTI6e2w6ezU5OntjOls4ODM1LDg0MDJdfX19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNjddfX19fX19fSwxMTI6e2w6ezExNDp7bDp7MTExOntsOnsxMTI6e2w6ezU5OntjOls4NzMzXX19fX19fX19fSwxMTQ6e2w6ezExNjp7bDp7MTE0OntsOnsxMDU6e2w6ezU5OntjOls4ODgzXX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwMTFdfX19fX0sMTE3OntsOns5ODp7bDp7MTEwOntsOns2OTp7bDp7NTk6e2M6WzEwOTU1LDY1MDI0XX19fSwxMDE6e2w6ezU5OntjOls4ODQyLDY1MDI0XX19fX19fX0sMTEyOntsOnsxMTA6e2w6ezY5OntsOns1OTp7YzpbMTA5NTYsNjUwMjRdfX19LDEwMTp7bDp7NTk6e2M6Wzg4NDMsNjUwMjRdfX19fX19fX19fX0sMTIyOntsOnsxMDU6e2w6ezEwMzp7bDp7MTIyOntsOns5Nzp7bDp7MTAzOntsOns1OTp7YzpbMTA2NTBdfX19fX19fX19fX19fX19LDExOTp7bDp7OTk6e2w6ezEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzM3M119fX19fX19fX0sMTAxOntsOnsxMDA6e2w6ezk4OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA4NDddfX19fX19fSwxMDM6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NDNdfSwxMTM6e2w6ezU5OntjOls4NzkzXX19fX19fX19fSwxMDU6e2w6ezEwMTp7bDp7MTE0OntsOnsxMTI6e2w6ezU5OntjOls4NDcyXX19fX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMTE2XX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNjhdfX19fX19fSwxMTI6e2w6ezU5OntjOls4NDcyXX19fSwxMTQ6e2w6ezU5OntjOls4NzY4XX0sMTAxOntsOns5Nzp7bDp7MTE2OntsOnsxMDQ6e2w6ezU5OntjOls4NzY4XX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDAxMl19fX19fX19fX0sMTIwOntsOns5OTp7bDp7OTc6e2w6ezExMjp7bDp7NTk6e2M6Wzg4OThdfX19fX0sMTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbOTcxMV19fX19fX19LDExNzp7bDp7MTEyOntsOns1OTp7YzpbODg5OV19fX19fX19LDEwMDp7bDp7MTE2OntsOnsxMTQ6e2w6ezEwNTp7bDp7NTk6e2M6Wzk2NjFdfX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMTE3XX19fX19LDEwNDp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbMTAyMzRdfX19fX19fSw5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDIzMV19fX19fX19fX0sMTA1OntsOns1OTp7YzpbOTU4XX19fSwxMDg6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwMjMyXX19fX19fX0sOTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbMTAyMjldfX19fX19fX19LDEwOTp7bDp7OTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwMjM2XX19fX19fX0sMTEwOntsOnsxMDU6e2w6ezExNTp7bDp7NTk6e2M6Wzg5NTVdfX19fX19fSwxMTE6e2w6ezEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDc1Ml19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTY5XX19fSwxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbMTA3NTNdfX19fX19fX19LDExNjp7bDp7MTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7NTk6e2M6WzEwNzU0XX19fX19fX19fX19LDExNDp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbMTAyMzNdfX19fX19fSw5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDIzMF19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDEzXX19fX19LDExMzp7bDp7OTk6e2w6ezExNzp7bDp7MTEyOntsOns1OTp7YzpbMTA3NThdfX19fX19fX19fX0sMTE3OntsOnsxMTI6e2w6ezEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOlsxMDc1Nl19fX19fX19fX0sMTE2OntsOnsxMTQ6e2w6ezEwNTp7bDp7NTk6e2M6Wzk2NTFdfX19fX19fX19LDExODp7bDp7MTAxOntsOnsxMDE6e2w6ezU5OntjOls4ODk3XX19fX19fX0sMTE5OntsOnsxMDE6e2w6ezEwMDp7bDp7MTAzOntsOnsxMDE6e2w6ezU5OntjOls4ODk2XX19fX19fX19fX19fX0sMTIxOntsOns5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlsyNTNdfX0sYzpbMjUzXX19fX19LDEyMTp7bDp7NTk6e2M6WzExMDNdfX19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMzc1XX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA5OV19fX19fSwxMDE6e2w6ezExMDp7bDp7NTk6e2M6WzE2NV19fSxjOlsxNjVdfX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMTE4XX19fX19LDEwNTp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzExMTFdfX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTcwXX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDE0XX19fX19fX0sMTE3OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTEwMl19fX19fSwxMDk6e2w6ezEwODp7bDp7NTk6e2M6WzI1NV19fSxjOlsyNTVdfX19fX19fSwxMjI6e2w6ezk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzM3OF19fX19fX19fX19fSw5OTp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlszODJdfX19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNzldfX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzM4MF19fX19fX19LDEwMTp7bDp7MTAxOntsOnsxMTY6e2w6ezExNDp7bDp7MTAyOntsOns1OTp7YzpbODQ4OF19fX19fX19fX0sMTE2OntsOns5Nzp7bDp7NTk6e2M6Wzk1MF19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMTE5XX19fX19LDEwNDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNzhdfX19fX19fSwxMDU6e2w6ezEwMzp7bDp7MTE0OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjY5XX19fX19fX19fX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE3MV19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDAxNV19fX19fX19LDExOTp7bDp7MTA2OntsOns1OTp7YzpbODIwNV19fX0sMTEwOntsOnsxMDY6e2w6ezU5OntjOls4MjA0XX19fX19fX19fX07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IFVOSUNPREUuQ09ERV9QT0lOVFM7XHJcblxyXG4vL1V0aWxzXHJcblxyXG4vL09QVElNSVpBVElPTjogdGhlc2UgdXRpbGl0eSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSBtb3ZlZCBvdXQgb2YgdGhpcyBtb2R1bGUuIFY4IENyYW5rc2hhZnQgd2lsbCBub3QgaW5saW5lXHJcbi8vdGhpcyBmdW5jdGlvbnMgaWYgdGhleSB3aWxsIGJlIHNpdHVhdGVkIGluIGFub3RoZXIgbW9kdWxlIGR1ZSB0byBjb250ZXh0IHN3aXRjaC5cclxuLy9BbHdheXMgcGVyZm9ybSBpbmxpbmluZyBjaGVjayBiZWZvcmUgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb25zICgnbm9kZSAtLXRyYWNlLWlubGluaW5nJykuXHJcbmZ1bmN0aW9uIGlzUmVzZXJ2ZWRDb2RlUG9pbnQoY3ApIHtcclxuICAgIHJldHVybiBjcCA+PSAweEQ4MDAgJiYgY3AgPD0gMHhERkZGIHx8IGNwID4gMHgxMEZGRkY7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3Vycm9nYXRlUGFpcihjcDEsIGNwMikge1xyXG4gICAgcmV0dXJuIGNwMSA+PSAweEQ4MDAgJiYgY3AxIDw9IDB4REJGRiAmJiBjcDIgPj0gMHhEQzAwICYmIGNwMiA8PSAweERGRkY7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVBhaXJDb2RlUG9pbnQoY3AxLCBjcDIpIHtcclxuICAgIHJldHVybiAoY3AxIC0gMHhEODAwKSAqIDB4NDAwICsgMHgyNDAwICsgY3AyO1xyXG59XHJcblxyXG4vL1ByZXByb2Nlc3NvclxyXG4vL05PVEU6IEhUTUwgaW5wdXQgcHJlcHJvY2Vzc2luZ1xyXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNwcmVwcm9jZXNzaW5nLXRoZS1pbnB1dC1zdHJlYW0pXHJcbnZhciBQcmVwcm9jZXNzb3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICB0aGlzLndyaXRlKGh0bWwpO1xyXG5cclxuICAgIC8vTk9URTogb25lIGxlYWRpbmcgVStGRUZGIEJZVEUgT1JERVIgTUFSSyBjaGFyYWN0ZXIgbXVzdCBiZSBpZ25vcmVkIGlmIGFueSBhcmUgcHJlc2VudCBpbiB0aGUgaW5wdXQgc3RyZWFtLlxyXG4gICAgdGhpcy5wb3MgPSB0aGlzLmh0bWwuY2hhckNvZGVBdCgwKSA9PT0gJC5CT00gPyAwIDogLTE7XHJcblxyXG4gICAgdGhpcy5nYXBTdGFjayA9IFtdO1xyXG4gICAgdGhpcy5sYXN0R2FwUG9zID0gLTE7XHJcbiAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xyXG59O1xyXG5cclxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICBpZiAodGhpcy5odG1sKSB7XHJcbiAgICAgICAgdGhpcy5odG1sID0gdGhpcy5odG1sLnN1YnN0cmluZygwLCB0aGlzLnBvcyArIDEpICtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmh0bWwuc3Vic3RyaW5nKHRoaXMucG9zICsgMSwgdGhpcy5odG1sLmxlbmd0aCk7XHJcblxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuaHRtbCA9IGh0bWw7XHJcblxyXG5cclxuICAgIHRoaXMubGFzdENoYXJQb3MgPSB0aGlzLmh0bWwubGVuZ3RoIC0gMTtcclxufTtcclxuXHJcblByZXByb2Nlc3Nvci5wcm90b3R5cGUuYWR2YW5jZUFuZFBlZWtDb2RlUG9pbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnBvcysrO1xyXG5cclxuICAgIGlmICh0aGlzLnBvcyA+IHRoaXMubGFzdENoYXJQb3MpXHJcbiAgICAgICAgcmV0dXJuICQuRU9GO1xyXG5cclxuICAgIHZhciBjcCA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcclxuXHJcbiAgICAvL05PVEU6IGFueSBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVycyB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvdyBhIFUrMDAwRCBDQVJSSUFHRSBSRVRVUk4gKENSKSBjaGFyYWN0ZXJcclxuICAgIC8vbXVzdCBiZSBpZ25vcmVkLlxyXG4gICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lICYmIGNwID09PSAkLkxJTkVfRkVFRCkge1xyXG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fYWRkR2FwKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZUFuZFBlZWtDb2RlUG9pbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL05PVEU6IGFsbCBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVycyBtdXN0IGJlIGNvbnZlcnRlZCB0byBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyc1xyXG4gICAgaWYgKGNwID09PSAkLkNBUlJJQUdFX1JFVFVSTikge1xyXG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gJC5MSU5FX0ZFRUQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcclxuXHJcbiAgICAvL09QVElNSVpBVElPTjogZmlyc3QgcGVyZm9ybSBjaGVjayBpZiB0aGUgY29kZSBwb2ludCBpbiB0aGUgYWxsb3dlZCByYW5nZSB0aGF0IGNvdmVycyBtb3N0IGNvbW1vblxyXG4gICAgLy9IVE1MIGlucHV0IChlLmcuIEFTQ0lJIGNvZGVzKSB0byBhdm9pZCBwZXJmb3JtYW5jZS1jb3N0IG9wZXJhdGlvbnMgZm9yIGhpZ2gtcmFuZ2UgY29kZSBwb2ludHMuXHJcbiAgICByZXR1cm4gY3AgPj0gMHhEODAwID8gdGhpcy5fcHJvY2Vzc0hpZ2hSYW5nZUNvZGVQb2ludChjcCkgOiBjcDtcclxufTtcclxuXHJcblByZXByb2Nlc3Nvci5wcm90b3R5cGUuX3Byb2Nlc3NIaWdoUmFuZ2VDb2RlUG9pbnQgPSBmdW5jdGlvbiAoY3ApIHtcclxuICAgIC8vTk9URTogdHJ5IHRvIHBlZWsgYSBzdXJyb2dhdGUgcGFpclxyXG4gICAgaWYgKHRoaXMucG9zICE9PSB0aGlzLmxhc3RDaGFyUG9zKSB7XHJcbiAgICAgICAgdmFyIG5leHRDcCA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XHJcblxyXG4gICAgICAgIGlmIChpc1N1cnJvZ2F0ZVBhaXIoY3AsIG5leHRDcCkpIHtcclxuICAgICAgICAgICAgLy9OT1RFOiB3ZSBoYXZlIGEgc3Vycm9nYXRlIHBhaXIuIFBlZWsgcGFpciBjaGFyYWN0ZXIgYW5kIHJlY2FsY3VsYXRlIGNvZGUgcG9pbnQuXHJcbiAgICAgICAgICAgIHRoaXMucG9zKys7XHJcbiAgICAgICAgICAgIGNwID0gZ2V0U3Vycm9nYXRlUGFpckNvZGVQb2ludChjcCwgbmV4dENwKTtcclxuXHJcbiAgICAgICAgICAgIC8vTk9URTogYWRkIGdhcCB0aGF0IHNob3VsZCBiZSBhdm9pZGVkIGR1cmluZyByZXRyZWF0XHJcbiAgICAgICAgICAgIHRoaXMuX2FkZEdhcCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNSZXNlcnZlZENvZGVQb2ludChjcCkpXHJcbiAgICAgICAgY3AgPSAkLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICByZXR1cm4gY3A7XHJcbn07XHJcblxyXG5QcmVwcm9jZXNzb3IucHJvdG90eXBlLl9hZGRHYXAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmdhcFN0YWNrLnB1c2godGhpcy5sYXN0R2FwUG9zKTtcclxuICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMucG9zO1xyXG59O1xyXG5cclxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5yZXRyZWF0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMucG9zID09PSB0aGlzLmxhc3RHYXBQb3MpIHtcclxuICAgICAgICB0aGlzLmxhc3RHYXBQb3MgPSB0aGlzLmdhcFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMucG9zLS07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wb3MtLTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFByZXByb2Nlc3NvciA9IHJlcXVpcmUoJy4vcHJlcHJvY2Vzc29yJyksXHJcbiAgICBMb2NhdGlvbkluZm9NaXhpbiA9IHJlcXVpcmUoJy4vbG9jYXRpb25faW5mb19taXhpbicpLFxyXG4gICAgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyksXHJcbiAgICBOQU1FRF9FTlRJVFlfVFJJRSA9IHJlcXVpcmUoJy4vbmFtZWRfZW50aXR5X3RyaWUnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IFVOSUNPREUuQ09ERV9QT0lOVFMsXHJcbiAgICAkJCA9IFVOSUNPREUuQ09ERV9QT0lOVF9TRVFVRU5DRVM7XHJcblxyXG4vL1JlcGxhY2VtZW50IGNvZGUgcG9pbnRzIGZvciBudW1lcmljIGVudGl0aWVzXHJcbnZhciBOVU1FUklDX0VOVElUWV9SRVBMQUNFTUVOVFMgPSB7XHJcbiAgICAweDAwOiAweEZGRkQsIDB4MEQ6IDB4MDAwRCwgMHg4MDogMHgyMEFDLCAweDgxOiAweDAwODEsIDB4ODI6IDB4MjAxQSwgMHg4MzogMHgwMTkyLCAweDg0OiAweDIwMUUsXHJcbiAgICAweDg1OiAweDIwMjYsIDB4ODY6IDB4MjAyMCwgMHg4NzogMHgyMDIxLCAweDg4OiAweDAyQzYsIDB4ODk6IDB4MjAzMCwgMHg4QTogMHgwMTYwLCAweDhCOiAweDIwMzksXHJcbiAgICAweDhDOiAweDAxNTIsIDB4OEQ6IDB4MDA4RCwgMHg4RTogMHgwMTdELCAweDhGOiAweDAwOEYsIDB4OTA6IDB4MDA5MCwgMHg5MTogMHgyMDE4LCAweDkyOiAweDIwMTksXHJcbiAgICAweDkzOiAweDIwMUMsIDB4OTQ6IDB4MjAxRCwgMHg5NTogMHgyMDIyLCAweDk2OiAweDIwMTMsIDB4OTc6IDB4MjAxNCwgMHg5ODogMHgwMkRDLCAweDk5OiAweDIxMjIsXHJcbiAgICAweDlBOiAweDAxNjEsIDB4OUI6IDB4MjAzQSwgMHg5QzogMHgwMTUzLCAweDlEOiAweDAwOUQsIDB4OUU6IDB4MDE3RSwgMHg5RjogMHgwMTc4XHJcbn07XHJcblxyXG4vL1N0YXRlc1xyXG52YXIgREFUQV9TVEFURSA9ICdEQVRBX1NUQVRFJyxcclxuICAgIENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURSA9ICdDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0RBVEFfU1RBVEUnLFxyXG4gICAgUkNEQVRBX1NUQVRFID0gJ1JDREFUQV9TVEFURScsXHJcbiAgICBDSEFSQUNURVJfUkVGRVJFTkNFX0lOX1JDREFUQV9TVEFURSA9ICdDSEFSQUNURVJfUkVGRVJFTkNFX0lOX1JDREFUQV9TVEFURScsXHJcbiAgICBSQVdURVhUX1NUQVRFID0gJ1JBV1RFWFRfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfU1RBVEUgPSAnU0NSSVBUX0RBVEFfU1RBVEUnLFxyXG4gICAgUExBSU5URVhUX1NUQVRFID0gJ1BMQUlOVEVYVF9TVEFURScsXHJcbiAgICBUQUdfT1BFTl9TVEFURSA9ICdUQUdfT1BFTl9TVEFURScsXHJcbiAgICBFTkRfVEFHX09QRU5fU1RBVEUgPSAnRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFRBR19OQU1FX1NUQVRFID0gJ1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFJDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdSQ0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURSA9ICdSQ0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEUgPSAnUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURScsXHJcbiAgICBSQVdURVhUX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1JBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEUgPSAnUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEUgPSAnUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEUgPSAnU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VORF9UQUdfT1BFTl9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURScsXHJcbiAgICBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9OQU1FX1NUQVRFID0gJ0FUVFJJQlVURV9OQU1FX1NUQVRFJyxcclxuICAgIEFGVEVSX0FUVFJJQlVURV9OQU1FX1NUQVRFID0gJ0FGVEVSX0FUVFJJQlVURV9OQU1FX1NUQVRFJyxcclxuICAgIEJFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEUgPSAnQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURScsXHJcbiAgICBBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEUgPSAnQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFJyxcclxuICAgIENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFJyxcclxuICAgIEFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEUgPSAnQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURScsXHJcbiAgICBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFID0gJ1NFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEUnLFxyXG4gICAgQk9HVVNfQ09NTUVOVF9TVEFURSA9ICdCT0dVU19DT01NRU5UX1NUQVRFJyxcclxuICAgIE1BUktVUF9ERUNMQVJBVElPTl9PUEVOX1NUQVRFID0gJ01BUktVUF9ERUNMQVJBVElPTl9PUEVOX1NUQVRFJyxcclxuICAgIENPTU1FTlRfU1RBUlRfU1RBVEUgPSAnQ09NTUVOVF9TVEFSVF9TVEFURScsXHJcbiAgICBDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEUgPSAnQ09NTUVOVF9TVEFSVF9EQVNIX1NUQVRFJyxcclxuICAgIENPTU1FTlRfU1RBVEUgPSAnQ09NTUVOVF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9EQVNIX1NUQVRFID0gJ0NPTU1FTlRfRU5EX0RBU0hfU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9FTkRfU1RBVEUgPSAnQ09NTUVOVF9FTkRfU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9FTkRfQkFOR19TVEFURSA9ICdDT01NRU5UX0VORF9CQU5HX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfU1RBVEUgPSAnRE9DVFlQRV9TVEFURScsXHJcbiAgICBCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9OQU1FX1NUQVRFID0gJ0RPQ1RZUEVfTkFNRV9TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX05BTUVfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkRfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURScsXHJcbiAgICBCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURSA9ICdCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURScsXHJcbiAgICBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUgPSAnRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEUnLFxyXG4gICAgQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFJyxcclxuICAgIEJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURSA9ICdCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNfU1RBVEUnLFxyXG4gICAgQUZURVJfRE9DVFlQRV9TWVNURU1fS0VZV09SRF9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgQk9HVVNfRE9DVFlQRV9TVEFURSA9ICdCT0dVU19ET0NUWVBFX1NUQVRFJyxcclxuICAgIENEQVRBX1NFQ1RJT05fU1RBVEUgPSAnQ0RBVEFfU0VDVElPTl9TVEFURSc7XHJcblxyXG4vL1V0aWxzXHJcblxyXG4vL09QVElNSVpBVElPTjogdGhlc2UgdXRpbGl0eSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSBtb3ZlZCBvdXQgb2YgdGhpcyBtb2R1bGUuIFY4IENyYW5rc2hhZnQgd2lsbCBub3QgaW5saW5lXHJcbi8vdGhpcyBmdW5jdGlvbnMgaWYgdGhleSB3aWxsIGJlIHNpdHVhdGVkIGluIGFub3RoZXIgbW9kdWxlIGR1ZSB0byBjb250ZXh0IHN3aXRjaC5cclxuLy9BbHdheXMgcGVyZm9ybSBpbmxpbmluZyBjaGVjayBiZWZvcmUgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb25zICgnbm9kZSAtLXRyYWNlLWlubGluaW5nJykuXHJcbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjcCkge1xyXG4gICAgcmV0dXJuIGNwID09PSAkLlNQQUNFIHx8IGNwID09PSAkLkxJTkVfRkVFRCB8fCBjcCA9PT0gJC5UQUJVTEFUSU9OIHx8IGNwID09PSAkLkZPUk1fRkVFRDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaURpZ2l0KGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gJC5ESUdJVF8wICYmIGNwIDw9ICQuRElHSVRfOTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaVVwcGVyKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gJC5MQVRJTl9DQVBJVEFMX0EgJiYgY3AgPD0gJC5MQVRJTl9DQVBJVEFMX1o7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXNjaWlMb3dlcihjcCkge1xyXG4gICAgcmV0dXJuIGNwID49ICQuTEFUSU5fU01BTExfQSAmJiBjcCA8PSAkLkxBVElOX1NNQUxMX1o7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXNjaWlBbHBoYU51bWVyaWMoY3ApIHtcclxuICAgIHJldHVybiBpc0FzY2lpRGlnaXQoY3ApIHx8IGlzQXNjaWlVcHBlcihjcCkgfHwgaXNBc2NpaUxvd2VyKGNwKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEaWdpdChjcCwgaXNIZXgpIHtcclxuICAgIHJldHVybiBpc0FzY2lpRGlnaXQoY3ApIHx8IChpc0hleCAmJiAoKGNwID49ICQuTEFUSU5fQ0FQSVRBTF9BICYmIGNwIDw9ICQuTEFUSU5fQ0FQSVRBTF9GKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3AgPj0gJC5MQVRJTl9TTUFMTF9BICYmIGNwIDw9ICQuTEFUSU5fU01BTExfRikpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNSZXNlcnZlZENvZGVQb2ludChjcCkge1xyXG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCAmJiBjcCA8PSAweERGRkYgfHwgY3AgPiAweDEwRkZGRjtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSB7XHJcbiAgICByZXR1cm4gY3AgKyAweDAwMjA7XHJcbn1cclxuXHJcbi8vTk9URTogU3RyaW5nLmZyb21DaGFyQ29kZSgpIGZ1bmN0aW9uIGNhbiBoYW5kbGUgb25seSBjaGFyYWN0ZXJzIGZyb20gQk1QIHN1YnNldC5cclxuLy9Tbywgd2UgbmVlZCB0byB3b3JrYXJvdW5kIHRoaXMgbWFudWFsbHkuXHJcbi8vKHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvZnJvbUNoYXJDb2RlI0dldHRpbmdfaXRfdG9fd29ya193aXRoX2hpZ2hlcl92YWx1ZXMpXHJcbmZ1bmN0aW9uIHRvQ2hhcihjcCkge1xyXG4gICAgaWYgKGNwIDw9IDB4RkZGRilcclxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjcCk7XHJcblxyXG4gICAgY3AgLT0gMHgxMDAwMDtcclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEQzAwIHwgY3AgJiAweDNGRik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvQXNjaWlMb3dlckNoYXIoY3ApIHtcclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRvQXNjaWlMb3dlckNvZGVQb2ludChjcCkpO1xyXG59XHJcblxyXG4vL1Rva2VuaXplclxyXG52YXIgVG9rZW5pemVyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaHRtbCwgb3B0aW9ucykge1xyXG4gICAgdGhpcy5kaXNhYmxlRW50aXRpZXNEZWNvZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMucHJlcHJvY2Vzc29yID0gbmV3IFByZXByb2Nlc3NvcihodG1sKTtcclxuXHJcbiAgICB0aGlzLnRva2VuUXVldWUgPSBbXTtcclxuXHJcbiAgICB0aGlzLmFsbG93Q0RBVEEgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIHRoaXMucmV0dXJuU3RhdGUgPSAnJztcclxuXHJcbiAgICB0aGlzLmNvbnN1bXB0aW9uUG9zID0gMDtcclxuXHJcbiAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSB2b2lkIDA7XHJcbiAgICB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPSAnJztcclxuXHJcbiAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRBdHRyID0gbnVsbDtcclxuXHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUVudGl0aWVzRGVjb2RpbmcgPSAhb3B0aW9ucy5kZWNvZGVIdG1sRW50aXRpZXM7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmxvY2F0aW9uSW5mbylcclxuICAgICAgICAgICAgTG9jYXRpb25JbmZvTWl4aW4uYXNzaWduKHRoaXMpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy9Ub2tlbiB0eXBlc1xyXG5Ub2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOID0gJ0NIQVJBQ1RFUl9UT0tFTic7XHJcblRva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTiA9ICdOVUxMX0NIQVJBQ1RFUl9UT0tFTic7XHJcblRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiA9ICdXSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTic7XHJcblRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gPSAnU1RBUlRfVEFHX1RPS0VOJztcclxuVG9rZW5pemVyLkVORF9UQUdfVE9LRU4gPSAnRU5EX1RBR19UT0tFTic7XHJcblRva2VuaXplci5DT01NRU5UX1RPS0VOID0gJ0NPTU1FTlRfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRE9DVFlQRV9UT0tFTiA9ICdET0NUWVBFX1RPS0VOJztcclxuVG9rZW5pemVyLkVPRl9UT0tFTiA9ICdFT0ZfVE9LRU4nO1xyXG5cclxuLy9Ub2tlbml6ZXIgaW5pdGlhbCBzdGF0ZXMgZm9yIGRpZmZlcmVudCBtb2Rlc1xyXG5Ub2tlbml6ZXIuTU9ERSA9IFRva2VuaXplci5wcm90b3R5cGUuTU9ERSA9IHtcclxuICAgIERBVEE6IERBVEFfU1RBVEUsXHJcbiAgICBSQ0RBVEE6IFJDREFUQV9TVEFURSxcclxuICAgIFJBV1RFWFQ6IFJBV1RFWFRfU1RBVEUsXHJcbiAgICBTQ1JJUFRfREFUQTogU0NSSVBUX0RBVEFfU1RBVEUsXHJcbiAgICBQTEFJTlRFWFQ6IFBMQUlOVEVYVF9TVEFURVxyXG59O1xyXG5cclxuLy9TdGF0aWNcclxuVG9rZW5pemVyLmdldFRva2VuQXR0ciA9IGZ1bmN0aW9uICh0b2tlbiwgYXR0ck5hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0b2tlbi5hdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0b2tlbi5hdHRyc1tpXS5uYW1lID09PSBhdHRyTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRva2VuLmF0dHJzW2ldLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuLy9HZXQgdG9rZW5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5nZXROZXh0VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAoIXRoaXMudG9rZW5RdWV1ZS5sZW5ndGgpXHJcbiAgICAgICAgdGhpc1t0aGlzLnN0YXRlXSh0aGlzLl9jb25zdW1lKCkpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRva2VuUXVldWUuc2hpZnQoKTtcclxufTtcclxuXHJcbi8vQ29uc3VtcHRpb25cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY29uc3VtcHRpb25Qb3MrKztcclxuICAgIHJldHVybiB0aGlzLnByZXByb2Nlc3Nvci5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCgpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fdW5jb25zdW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jb25zdW1wdGlvblBvcy0tO1xyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IucmV0cmVhdCgpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fdW5jb25zdW1lU2V2ZXJhbCA9IGZ1bmN0aW9uIChjb3VudCkge1xyXG4gICAgd2hpbGUgKGNvdW50LS0pXHJcbiAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9yZWNvbnN1bWVJblN0YXRlID0gZnVuY3Rpb24gKHN0YXRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XHJcbiAgICB0aGlzLl91bmNvbnN1bWUoKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCA9IGZ1bmN0aW9uIChwYXR0ZXJuLCBzdGFydENwLCBjYXNlU2Vuc2l0aXZlKSB7XHJcbiAgICB2YXIgcm9sbGJhY2tQb3MgPSB0aGlzLmNvbnN1bXB0aW9uUG9zLFxyXG4gICAgICAgIGlzTWF0Y2ggPSB0cnVlLFxyXG4gICAgICAgIHBhdHRlcm5MZW5ndGggPSBwYXR0ZXJuLmxlbmd0aCxcclxuICAgICAgICBwYXR0ZXJuUG9zID0gMCxcclxuICAgICAgICBjcCA9IHN0YXJ0Q3AsXHJcbiAgICAgICAgcGF0dGVybkNwID0gdm9pZCAwO1xyXG5cclxuICAgIGZvciAoOyBwYXR0ZXJuUG9zIDwgcGF0dGVybkxlbmd0aDsgcGF0dGVyblBvcysrKSB7XHJcbiAgICAgICAgaWYgKHBhdHRlcm5Qb3MgPiAwKVxyXG4gICAgICAgICAgICBjcCA9IHRoaXMuX2NvbnN1bWUoKTtcclxuXHJcbiAgICAgICAgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGF0dGVybkNwID0gcGF0dGVybltwYXR0ZXJuUG9zXTtcclxuXHJcbiAgICAgICAgaWYgKGNwICE9PSBwYXR0ZXJuQ3AgJiYgKGNhc2VTZW5zaXRpdmUgfHwgY3AgIT09IHRvQXNjaWlMb3dlckNvZGVQb2ludChwYXR0ZXJuQ3ApKSkge1xyXG4gICAgICAgICAgICBpc01hdGNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzTWF0Y2gpXHJcbiAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbCh0aGlzLmNvbnN1bXB0aW9uUG9zIC0gcm9sbGJhY2tQb3MpO1xyXG5cclxuICAgIHJldHVybiBpc01hdGNoO1xyXG59O1xyXG5cclxuLy9Mb29rYWhlYWRcclxuVG9rZW5pemVyLnByb3RvdHlwZS5fbG9va2FoZWFkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNwID0gdGhpcy5wcmVwcm9jZXNzb3IuYWR2YW5jZUFuZFBlZWtDb2RlUG9pbnQoKTtcclxuICAgIHRoaXMucHJlcHJvY2Vzc29yLnJldHJlYXQoKTtcclxuXHJcbiAgICByZXR1cm4gY3A7XHJcbn07XHJcblxyXG4vL1RlbXAgYnVmZmVyXHJcblRva2VuaXplci5wcm90b3R5cGUuaXNUZW1wQnVmZmVyRXF1YWxUb1NjcmlwdFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLnRlbXBCdWZmLmxlbmd0aCAhPT0gJCQuU0NSSVBUX1NUUklORy5sZW5ndGgpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50ZW1wQnVmZi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLnRlbXBCdWZmW2ldICE9PSAkJC5TQ1JJUFRfU1RSSU5HW2ldKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vL1Rva2VuIGNyZWF0aW9uXHJcblRva2VuaXplci5wcm90b3R5cGUuYnVpbGRTdGFydFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTixcclxuICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLFxyXG4gICAgICAgIHNlbGZDbG9zaW5nOiBmYWxzZSxcclxuICAgICAgICBhdHRyczogW11cclxuICAgIH07XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLmJ1aWxkRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTixcclxuICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLFxyXG4gICAgICAgIGlnbm9yZWQ6IGZhbHNlLFxyXG4gICAgICAgIGF0dHJzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZUZpcnN0Q2gpIHtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0gdGhpcy5idWlsZFN0YXJ0VGFnVG9rZW4odGFnTmFtZUZpcnN0Q2gpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZUZpcnN0Q2gpIHtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0gdGhpcy5idWlsZEVuZFRhZ1Rva2VuKHRhZ05hbWVGaXJzdENoKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NyZWF0ZUNvbW1lbnRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0ge1xyXG4gICAgICAgIHR5cGU6IFRva2VuaXplci5DT01NRU5UX1RPS0VOLFxyXG4gICAgICAgIGRhdGE6ICcnXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlRG9jdHlwZVRva2VuID0gZnVuY3Rpb24gKGRvY3R5cGVOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB7XHJcbiAgICAgICAgdHlwZTogVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU4sXHJcbiAgICAgICAgbmFtZTogZG9jdHlwZU5hbWVGaXJzdENoIHx8ICcnLFxyXG4gICAgICAgIGZvcmNlUXVpcmtzOiBmYWxzZSxcclxuICAgICAgICBwdWJsaWNJZDogbnVsbCxcclxuICAgICAgICBzeXN0ZW1JZDogbnVsbFxyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NyZWF0ZUNoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IHtcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIGNoYXJzOiBjaFxyXG4gICAgfTtcclxufTtcclxuXHJcbi8vVGFnIGF0dHJpYnV0ZXNcclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQXR0ciA9IGZ1bmN0aW9uIChhdHRyTmFtZUZpcnN0Q2gpIHtcclxuICAgIHRoaXMuY3VycmVudEF0dHIgPSB7XHJcbiAgICAgICAgbmFtZTogYXR0ck5hbWVGaXJzdENoLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2lzRHVwbGljYXRlQXR0ciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHRoaXMuY3VycmVudFRva2VuLCB0aGlzLmN1cnJlbnRBdHRyLm5hbWUpICE9PSBudWxsO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fbGVhdmVBdHRyTmFtZSA9IGZ1bmN0aW9uICh0b1N0YXRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gdG9TdGF0ZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2lzRHVwbGljYXRlQXR0cigpKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmF0dHJzLnB1c2godGhpcy5jdXJyZW50QXR0cik7XHJcbn07XHJcblxyXG4vL0FwcHJvcHJpYXRlIGVuZCB0YWcgdG9rZW5cclxuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCNhcHByb3ByaWF0ZS1lbmQtdGFnLXRva2VuKVxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXN0U3RhcnRUYWdOYW1lID09PSB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lO1xyXG59O1xyXG5cclxuLy9Ub2tlbiBlbWlzc2lvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q3VycmVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbigpO1xyXG5cclxuICAgIC8vTk9URTogc3RvcmUgZW1pdGVkIHN0YXJ0IHRhZydzIHRhZ05hbWUgdG8gZGV0ZXJtaW5lIGlzIHRoZSBmb2xsb3dpbmcgZW5kIHRhZyB0b2tlbiBpcyBhcHByb3ByaWF0ZS5cclxuICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxyXG4gICAgICAgIHRoaXMubGFzdFN0YXJ0VGFnTmFtZSA9IHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgdGhpcy50b2tlblF1ZXVlLnB1c2godGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSBudWxsO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbikge1xyXG4gICAgICAgIHRoaXMudG9rZW5RdWV1ZS5wdXNoKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IG51bGw7XHJcbiAgICB9XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0RU9GVG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcbiAgICB0aGlzLnRva2VuUXVldWUucHVzaCh7dHlwZTogVG9rZW5pemVyLkVPRl9UT0tFTn0pO1xyXG59O1xyXG5cclxuLy9DaGFyYWN0ZXJzIGVtaXNzaW9uXHJcblxyXG4vL09QVElNSVpBVElPTjogc3BlY2lmaWNhdGlvbiB1c2VzIG9ubHkgb25lIHR5cGUgb2YgY2hhcmFjdGVyIHRva2VucyAob25lIHRva2VuIHBlciBjaGFyYWN0ZXIpLlxyXG4vL1RoaXMgY2F1c2VzIGEgaHVnZSBtZW1vcnkgb3ZlcmhlYWQgYW5kIGEgbG90IG9mIHVubmVjZXNzYXJ5IHBhcnNlciBsb29wcy4gcGFyc2U1IHVzZXMgMyBncm91cHMgb2YgY2hhcmFjdGVycy5cclxuLy9JZiB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGJlbG9uZyB0byB0aGUgc2FtZSBncm91cCwgcGFyc2VyIGNhbiBwcm9jZXNzIGl0XHJcbi8vYXMgYSBzaW5nbGUgc29saWQgY2hhcmFjdGVyIHRva2VuLlxyXG4vL1NvLCB0aGVyZSBhcmUgMyB0eXBlcyBvZiBjaGFyYWN0ZXIgdG9rZW5zIGluIHBhcnNlNTpcclxuLy8xKU5VTExfQ0hBUkFDVEVSX1RPS0VOIC0gXFx1MDAwMC1jaGFyYWN0ZXIgc2VxdWVuY2VzIChlLmcuICdcXHUwMDAwXFx1MDAwMFxcdTAwMDAnKVxyXG4vLzIpV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4gLSBhbnkgd2hpdGVzcGFjZS9uZXctbGluZSBjaGFyYWN0ZXIgc2VxdWVuY2VzIChlLmcuICdcXG4gIFxcclxcdCAgIFxcZicpXHJcbi8vMylDSEFSQUNURVJfVE9LRU4gLSBhbnkgY2hhcmFjdGVyIHNlcXVlbmNlIHdoaWNoIGRvbid0IGJlbG9uZyB0byBncm91cHMgMSBhbmQgMiAoZS5nLiAnYWJjZGVmMTIzNEBAIyQlXicpXHJcblRva2VuaXplci5wcm90b3R5cGUuX2FwcGVuZENoYXJUb0N1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IGZ1bmN0aW9uICh0eXBlLCBjaCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuICYmIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLnR5cGUgIT09IHR5cGUpXHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbigpO1xyXG5cclxuICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbilcclxuICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5jaGFycyArPSBjaDtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQ2hhcmFjdGVyVG9rZW4odHlwZSwgY2gpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdENvZGVQb2ludCA9IGZ1bmN0aW9uIChjcCkge1xyXG4gICAgdmFyIHR5cGUgPSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOO1xyXG5cclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHR5cGUgPSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0eXBlID0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOO1xyXG5cclxuICAgIHRoaXMuX2FwcGVuZENoYXJUb0N1cnJlbnRDaGFyYWN0ZXJUb2tlbih0eXBlLCB0b0NoYXIoY3ApKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyA9IGZ1bmN0aW9uIChjb2RlUG9pbnRzKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVQb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjb2RlUG9pbnRzW2ldKTtcclxufTtcclxuXHJcbi8vTk9URTogdXNlZCB0aGVuIHdlIGVtaXQgY2hhcmFjdGVyIGV4cGxpY2l0bHkuIFRoaXMgaXMgYWx3YXlzIGEgbm9uLXdoaXRlc3BhY2UgYW5kIGEgbm9uLW51bGwgY2hhcmFjdGVyLlxyXG4vL1NvIHdlIGNhbiBhdm9pZCBhZGRpdGlvbmFsIGNoZWNrcyBoZXJlLlxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q2hhciA9IGZ1bmN0aW9uIChjaCkge1xyXG4gICAgdGhpcy5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4sIGNoKTtcclxufTtcclxuXHJcbi8vQ2hhcmFjdGVyIHJlZmVyZW5jZSB0b2tlbml6YXRpb25cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZU51bWVyaWNFbnRpdHkgPSBmdW5jdGlvbiAoaXNIZXgpIHtcclxuICAgIHZhciBkaWdpdHMgPSAnJyxcclxuICAgICAgICBuZXh0Q3AgPSB2b2lkIDA7XHJcblxyXG4gICAgZG8ge1xyXG4gICAgICAgIGRpZ2l0cyArPSB0b0NoYXIodGhpcy5fY29uc3VtZSgpKTtcclxuICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuICAgIH0gd2hpbGUgKG5leHRDcCAhPT0gJC5FT0YgJiYgaXNEaWdpdChuZXh0Q3AsIGlzSGV4KSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2xvb2thaGVhZCgpID09PSAkLlNFTUlDT0xPTilcclxuICAgICAgICB0aGlzLl9jb25zdW1lKCk7XHJcblxyXG4gICAgdmFyIHJlZmVyZW5jZWRDcCA9IHBhcnNlSW50KGRpZ2l0cywgaXNIZXggPyAxNiA6IDEwKSxcclxuICAgICAgICByZXBsYWNlbWVudCA9IE5VTUVSSUNfRU5USVRZX1JFUExBQ0VNRU5UU1tyZWZlcmVuY2VkQ3BdO1xyXG5cclxuICAgIGlmIChyZXBsYWNlbWVudClcclxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XHJcblxyXG4gICAgaWYgKGlzUmVzZXJ2ZWRDb2RlUG9pbnQocmVmZXJlbmNlZENwKSlcclxuICAgICAgICByZXR1cm4gJC5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgcmV0dXJuIHJlZmVyZW5jZWRDcDtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NvbnN1bWVOYW1lZEVudGl0eSA9IGZ1bmN0aW9uIChzdGFydENwLCBpbkF0dHIpIHtcclxuICAgIHZhciByZWZlcmVuY2VkQ29kZVBvaW50cyA9IG51bGwsXHJcbiAgICAgICAgZW50aXR5Q29kZVBvaW50c0NvdW50ID0gMCxcclxuICAgICAgICBjcCA9IHN0YXJ0Q3AsXHJcbiAgICAgICAgbGVhZiA9IE5BTUVEX0VOVElUWV9UUklFW2NwXSxcclxuICAgICAgICBjb25zdW1lZENvdW50ID0gMSxcclxuICAgICAgICBzZW1pY29sb25UZXJtaW5hdGVkID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICg7IGxlYWYgJiYgY3AgIT09ICQuRU9GOyBjcCA9IHRoaXMuX2NvbnN1bWUoKSwgY29uc3VtZWRDb3VudCsrLCBsZWFmID0gbGVhZi5sICYmIGxlYWYubFtjcF0pIHtcclxuICAgICAgICBpZiAobGVhZi5jKSB7XHJcbiAgICAgICAgICAgIC8vTk9URTogd2UgaGF2ZSBhdCBsZWFzdCBvbmUgbmFtZWQgcmVmZXJlbmNlIG1hdGNoLiBCdXQgd2UgZG9uJ3Qgc3RvcCBsb29rdXAgYXQgdGhpcyBwb2ludCxcclxuICAgICAgICAgICAgLy9iZWNhdXNlIGxvbmdlciBtYXRjaGVzIHN0aWxsIGNhbiBiZSBmb3VuZCAoZS5nLiAnJm5vdCcgYW5kICcmbm90aW47JykgZXhjZXB0IHRoZSBjYXNlXHJcbiAgICAgICAgICAgIC8vdGhlbiBmb3VuZCBtYXRjaCBpcyB0ZXJtaW5hdGVkIGJ5IHNlbWljb2xvbi5cclxuICAgICAgICAgICAgcmVmZXJlbmNlZENvZGVQb2ludHMgPSBsZWFmLmM7XHJcbiAgICAgICAgICAgIGVudGl0eUNvZGVQb2ludHNDb3VudCA9IGNvbnN1bWVkQ291bnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuU0VNSUNPTE9OKSB7XHJcbiAgICAgICAgICAgICAgICBzZW1pY29sb25UZXJtaW5hdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWZlcmVuY2VkQ29kZVBvaW50cykge1xyXG4gICAgICAgIGlmICghc2VtaWNvbG9uVGVybWluYXRlZCkge1xyXG4gICAgICAgICAgICAvL05PVEU6IHVuY29uc3VtZSBleGNlc3MgKGUuZy4gJ2l0JyBpbiAnJm5vdGl0JylcclxuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChjb25zdW1lZENvdW50IC0gZW50aXR5Q29kZVBvaW50c0NvdW50KTtcclxuXHJcbiAgICAgICAgICAgIC8vTk9URTogSWYgdGhlIGNoYXJhY3RlciByZWZlcmVuY2UgaXMgYmVpbmcgY29uc3VtZWQgYXMgcGFydCBvZiBhbiBhdHRyaWJ1dGUgYW5kIHRoZSBuZXh0IGNoYXJhY3RlclxyXG4gICAgICAgICAgICAvL2lzIGVpdGhlciBhIFUrMDAzRCBFUVVBTFMgU0lHTiBjaGFyYWN0ZXIgKD0pIG9yIGFuIGFscGhhbnVtZXJpYyBBU0NJSSBjaGFyYWN0ZXIsIHRoZW4sIGZvciBoaXN0b3JpY2FsXHJcbiAgICAgICAgICAgIC8vcmVhc29ucywgYWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgd2VyZSBtYXRjaGVkIGFmdGVyIHRoZSBVKzAwMjYgQU1QRVJTQU5EIGNoYXJhY3RlciAoJikgbXVzdCBiZVxyXG4gICAgICAgICAgICAvL3VuY29uc3VtZWQsIGFuZCBub3RoaW5nIGlzIHJldHVybmVkLlxyXG4gICAgICAgICAgICAvL0hvd2V2ZXIsIGlmIHRoaXMgbmV4dCBjaGFyYWN0ZXIgaXMgaW4gZmFjdCBhIFUrMDAzRCBFUVVBTFMgU0lHTiBjaGFyYWN0ZXIgKD0pLCB0aGVuIHRoaXMgaXMgYVxyXG4gICAgICAgICAgICAvL3BhcnNlIGVycm9yLCBiZWNhdXNlIHNvbWUgbGVnYWN5IHVzZXIgYWdlbnRzIHdpbGwgbWlzaW50ZXJwcmV0IHRoZSBtYXJrdXAgaW4gdGhvc2UgY2FzZXMuXHJcbiAgICAgICAgICAgIC8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjdG9rZW5pemluZy1jaGFyYWN0ZXItcmVmZXJlbmNlcylcclxuICAgICAgICAgICAgaWYgKGluQXR0cikge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5leHRDcCA9IHRoaXMuX2xvb2thaGVhZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChuZXh0Q3AgPT09ICQuRVFVQUxTX1NJR04gfHwgaXNBc2NpaUFscGhhTnVtZXJpYyhuZXh0Q3ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChlbnRpdHlDb2RlUG9pbnRzQ291bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlZENvZGVQb2ludHM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChjb25zdW1lZENvdW50KTtcclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2NvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UgPSBmdW5jdGlvbiAoc3RhcnRDcCwgaW5BdHRyKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlRW50aXRpZXNEZWNvZGluZyB8fCBpc1doaXRlc3BhY2Uoc3RhcnRDcCkgfHwgc3RhcnRDcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTiB8fFxyXG4gICAgICAgIHN0YXJ0Q3AgPT09ICQuQU1QRVJTQU5EIHx8IHN0YXJ0Q3AgPT09IHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCB8fCBzdGFydENwID09PSAkLkVPRikge1xyXG4gICAgICAgIC8vTk9URTogbm90IGEgY2hhcmFjdGVyIHJlZmVyZW5jZS4gTm8gY2hhcmFjdGVycyBhcmUgY29uc3VtZWQsIGFuZCBub3RoaW5nIGlzIHJldHVybmVkLlxyXG4gICAgICAgIHRoaXMuX3VuY29uc3VtZSgpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHN0YXJ0Q3AgPT09ICQuTlVNQkVSX1NJR04pIHtcclxuICAgICAgICAvL05PVEU6IHdlIGhhdmUgYSBudW1lcmljIGVudGl0eSBjYW5kaWRhdGUsIG5vdyB3ZSBzaG91bGQgZGV0ZXJtaW5lIGlmIGl0J3MgaGV4IG9yIGRlY2ltYWxcclxuICAgICAgICB2YXIgaXNIZXggPSBmYWxzZSxcclxuICAgICAgICAgICAgbmV4dENwID0gdGhpcy5fbG9va2FoZWFkKCk7XHJcblxyXG4gICAgICAgIGlmIChuZXh0Q3AgPT09ICQuTEFUSU5fU01BTExfWCB8fCBuZXh0Q3AgPT09ICQuTEFUSU5fQ0FQSVRBTF9YKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbnN1bWUoKTtcclxuICAgICAgICAgICAgaXNIZXggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbmV4dENwID0gdGhpcy5fbG9va2FoZWFkKCk7XHJcblxyXG4gICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgZGlnaXQgdGhpcyBpcyBhIG51bWVyaWMgZW50aXR5IGZvciBzdXJlLCBzbyB3ZSBjb25zdW1lIGl0XHJcbiAgICAgICAgaWYgKG5leHRDcCAhPT0gJC5FT0YgJiYgaXNEaWdpdChuZXh0Q3AsIGlzSGV4KSlcclxuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLl9jb25zdW1lTnVtZXJpY0VudGl0eShpc0hleCldO1xyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy9OT1RFOiBvdGhlcndpc2UgdGhpcyBpcyBhIGJvZ3VzIG51bWJlciBlbnRpdHkgYW5kIGEgcGFyc2UgZXJyb3IuIFVuY29uc3VtZSB0aGUgbnVtYmVyIHNpZ25cclxuICAgICAgICAgICAgLy9hbmQgdGhlICd4Jy1jaGFyYWN0ZXIgaWYgYXBwcm9wcmlhdGUuXHJcbiAgICAgICAgICAgIHRoaXMuX3VuY29uc3VtZVNldmVyYWwoaXNIZXggPyAyIDogMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN1bWVOYW1lZEVudGl0eShzdGFydENwLCBpbkF0dHIpO1xyXG59O1xyXG5cclxuLy9TdGF0ZSBtYWNoaW5lXHJcbnZhciBfID0gVG9rZW5pemVyLnByb3RvdHlwZTtcclxuXHJcbi8vMTIuMi40LjEgRGF0YSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gZGF0YVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0RBVEFfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRBR19PUEVOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yIENoYXJhY3RlciByZWZlcmVuY2UgaW4gZGF0YSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURV0gPSBmdW5jdGlvbiBjaGFyYWN0ZXJSZWZlcmVuY2VJbkRhdGFTdGF0ZShjcCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSB2b2lkIDA7XHJcblxyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gdGhpcy5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShjcCwgZmFsc2UpO1xyXG5cclxuICAgIGlmIChyZWZlcmVuY2VkQ29kZVBvaW50cylcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHMocmVmZXJlbmNlZENvZGVQb2ludHMpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcmJyk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMyBSQ0RBVEEgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tSQ0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gcmNkYXRhU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQ0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40IENoYXJhY3RlciByZWZlcmVuY2UgaW4gUkNEQVRBIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9SQ0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gY2hhcmFjdGVyUmVmZXJlbmNlSW5SY2RhdGFTdGF0ZShjcCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9TVEFURTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENvZGVQb2ludHMgPSB0aGlzLl9jb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKGNwLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKVxyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyhyZWZlcmVuY2VkQ29kZVBvaW50cyk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJyYnKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41IFJBV1RFWFQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tSQVdURVhUX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQVdURVhUX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNiBTY3JpcHQgZGF0YSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjcgUExBSU5URVhUIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUExBSU5URVhUX1NUQVRFXSA9IGZ1bmN0aW9uIHBsYWludGV4dFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC44IFRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gdGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gRU5EX1RBR19PUEVOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVTdGFydFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4odG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVRVNUSU9OX01BUkspIHtcclxuICAgICAgICAvL05PVEU6IGNhbGwgYm9ndXMgY29tbWVudCBzdGF0ZSBkaXJlY3RseSB3aXRoIGN1cnJlbnQgY29uc3VtZWQgY2hhcmFjdGVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlY29uc3VtcHRpb24uXHJcbiAgICAgICAgdGhpc1tCT0dVU19DT01NRU5UX1NUQVRFXShjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjkgRW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRU5EX1RBR19PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIGVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFRBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy9OT1RFOiBjYWxsIGJvZ3VzIGNvbW1lbnQgc3RhdGUgZGlyZWN0bHkgd2l0aCBjdXJyZW50IGNvbnN1bWVkIGNoYXJhY3RlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWNvbnN1bXB0aW9uLlxyXG4gICAgICAgIHRoaXNbQk9HVVNfQ09NTUVOVF9TVEFURV0oY3ApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjEwIFRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gdGFnTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjExIFJDREFUQSBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFMZXNzVGhhblNpZ25TdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTIgUkNEQVRBIGVuZCB0YWcgb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9FTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gcmNkYXRhRW5kVGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTMgUkNEQVRBIGVuZCB0YWcgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gcmNkYXRhRW5kVGFnTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQXBwcm9wcmlhdGVFbmRUYWdUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHModGhpcy50ZW1wQnVmZik7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQ0RBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE0IFJBV1RFWFQgbGVzcy10aGFuIHNpZ24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tSQVdURVhUX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRMZXNzVGhhblNpZ25TdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfRU5EX1RBR19PUEVOX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQVdURVhUX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xNSBSQVdURVhUIGVuZCB0YWcgb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfRU5EX1RBR19PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShSQVdURVhUX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xNiBSQVdURVhUIGVuZCB0YWcgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIHJhd3RleHRFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE3IFNjcmlwdCBkYXRhIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05fU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUxlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVYQ0xBTUFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJyEnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE4IFNjcmlwdCBkYXRhIGVuZCB0YWcgb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRW5kVGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTkgU2NyaXB0IGRhdGEgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHModGhpcy50ZW1wQnVmZik7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjAgU2NyaXB0IGRhdGEgZXNjYXBlIHN0YXJ0IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIxIFNjcmlwdCBkYXRhIGVzY2FwZSBzdGFydCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZVN0YXJ0RGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIyIFNjcmlwdCBkYXRhIGVzY2FwZWQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIzIFNjcmlwdCBkYXRhIGVzY2FwZWQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLScpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjQgU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZERhc2hEYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPicpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjUgU2NyaXB0IGRhdGEgZXNjYXBlZCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRMZXNzVGhhblNpZ25TdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmID0gW107XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKHRvQXNjaWlMb3dlckNvZGVQb2ludChjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI2IFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNyBTY3JpcHQgZGF0YSBlc2NhcGVkIGVuZCB0YWcgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRW5kVGFnTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQXBwcm9wcmlhdGVFbmRUYWdUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9lbWl0U2V2ZXJhbENvZGVQb2ludHModGhpcy50ZW1wQnVmZik7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yOCBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlIHN0YXJ0IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlU3RhcnRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkgfHwgY3AgPT09ICQuU09MSURVUyB8fCBjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmlzVGVtcEJ1ZmZlckVxdWFsVG9TY3JpcHRTdHJpbmcoKSA/IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFIDogU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKHRvQXNjaWlMb3dlckNvZGVQb2ludChjcCkpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI5IFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGVkIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YURvdWJsZUVzY2FwZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzAgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YURvdWJsZUVzY2FwZWREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzEgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgZGFzaCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVkRGFzaERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLScpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJz4nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzIgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgbGVzcy10aGFuIHNpZ24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9FTkRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzMgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZSBlbmQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlRW5kU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApIHx8IGNwID09PSAkLlNPTElEVVMgfHwgY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5pc1RlbXBCdWZmZXJFcXVhbFRvU2NyaXB0U3RyaW5nKCkgPyBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFIDogU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcblxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM0IEJlZm9yZSBhdHRyaWJ1dGUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVBdHRyaWJ1dGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTiB8fCBjcCA9PT0gJC5FUVVBTFNfU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM1IEF0dHJpYnV0ZSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQVRUUklCVVRFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gYXR0cmlidXRlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLl9sZWF2ZUF0dHJOYW1lKEFGVEVSX0FUVFJJQlVURV9OQU1FX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURSk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVFVQUxTX1NJR04pXHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLIHx8IGNwID09PSAkLkFQT1NUUk9QSEUgfHwgY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM2IEFmdGVyIGF0dHJpYnV0ZSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJBdHRyaWJ1dGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FUVVBTFNfU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIodG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM3IEJlZm9yZSBhdHRyaWJ1dGUgdmFsdWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZUF0dHJpYnV0ZVZhbHVlU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORClcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURSk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTiB8fCBjcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBjcCA9PT0gJC5HUkFWRV9BQ0NFTlQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zOCBBdHRyaWJ1dGUgdmFsdWUgKGRvdWJsZS1xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gYXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuUVVPVEFUSU9OX01BUks7XHJcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM5IEF0dHJpYnV0ZSB2YWx1ZSAoc2luZ2xlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVWYWx1ZVNpbmdsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpIHtcclxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSAkLkFQT1NUUk9QSEU7XHJcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQwIEF0dHJpYnV0ZSB2YWx1ZSAodW5xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGF0dHJpYnV0ZVZhbHVlVW5xdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpIHtcclxuICAgICAgICB0aGlzLmFkZGl0aW9uYWxBbGxvd2VkQ3AgPSAkLkdSRUFURVJfVEhBTl9TSUdOO1xyXG4gICAgICAgIHRoaXMucmV0dXJuU3RhdGUgPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0FUVFJJQlVURV9WQUxVRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTiB8fFxyXG4gICAgICAgICAgICAgY3AgPT09ICQuRVFVQUxTX1NJR04gfHwgY3AgPT09ICQuR1JBVkVfQUNDRU5UKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDEgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBhdHRyaWJ1dGUgdmFsdWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDSEFSQUNURVJfUkVGRVJFTkNFX0lOX0FUVFJJQlVURV9WQUxVRV9TVEFURV0gPSBmdW5jdGlvbiBjaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZVZhbHVlU3RhdGUoY3ApIHtcclxuICAgIHZhciByZWZlcmVuY2VkQ29kZVBvaW50cyA9IHRoaXMuX2NvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoY3AsIHRydWUpO1xyXG5cclxuICAgIGlmIChyZWZlcmVuY2VkQ29kZVBvaW50cykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVmZXJlbmNlZENvZGVQb2ludHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKHJlZmVyZW5jZWRDb2RlUG9pbnRzW2ldKTtcclxuICAgIH0gZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gJyYnO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnJldHVyblN0YXRlO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQyIEFmdGVyIGF0dHJpYnV0ZSB2YWx1ZSAocXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40MyBTZWxmLWNsb3Npbmcgc3RhcnQgdGFnIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURV0gPSBmdW5jdGlvbiBzZWxmQ2xvc2luZ1N0YXJ0VGFnU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnNlbGZDbG9zaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NCBCb2d1cyBjb21tZW50IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQk9HVVNfQ09NTUVOVF9TVEFURV0gPSBmdW5jdGlvbiBib2d1c0NvbW1lbnRTdGF0ZShjcCkge1xyXG4gICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCk7XHJcblxyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gY3AgPT09ICQuTlVMTCA/IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSIDogdG9DaGFyKGNwKTtcclxuICAgICAgICAgICAgY3AgPSB0aGlzLl9jb25zdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NSBNYXJrdXAgZGVjbGFyYXRpb24gb3BlbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW01BUktVUF9ERUNMQVJBVElPTl9PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIG1hcmt1cERlY2xhcmF0aW9uT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkRBU0hfREFTSF9TVFJJTkcsIGNwLCB0cnVlKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUNvbW1lbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVJUX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCgkJC5ET0NUWVBFX1NUUklORywgY3AsIGZhbHNlKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmICh0aGlzLmFsbG93Q0RBVEEgJiYgdGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkNEQVRBX1NUQVJUX1NUUklORywgY3AsIHRydWUpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDREFUQV9TRUNUSU9OX1NUQVRFO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vTk9URTogY2FsbCBib2d1cyBjb21tZW50IHN0YXRlIGRpcmVjdGx5IHdpdGggY3VycmVudCBjb25zdW1lZCBjaGFyYWN0ZXIgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVjb25zdW1wdGlvbi5cclxuICAgICAgICB0aGlzW0JPR1VTX0NPTU1FTlRfU1RBVEVdKGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NiBDb21tZW50IHN0YXJ0IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9TVEFSVF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhcnRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFSVF9EQVNIX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40NyBDb21tZW50IHN0YXJ0IGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudFN0YXJ0RGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0VORF9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDggQ29tbWVudCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0VORF9EQVNIX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ5IENvbW1lbnQgZW5kIGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX0VORF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRFbmREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MCBDb21tZW50IGVuZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRFbmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVYQ0xBTUFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0JBTkdfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUxIENvbW1lbnQgZW5kIGJhbmcgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX0VORF9CQU5HX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRFbmRCYW5nU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX0VORF9EQVNIX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLS0hJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTIgRE9DVFlQRSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTMgQmVmb3JlIERPQ1RZUEUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gYmVmb3JlRG9jdHlwZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4odG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41NCBET0NUWVBFIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfTkFNRV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLm5hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5uYW1lICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubmFtZSArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU1IEFmdGVyIERPQ1RZUEUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckRvY3R5cGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCgkJC5QVUJMSUNfU1RSSU5HLCBjcCwgZmFsc2UpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTdWJzZXF1ZW50SWZNYXRjaCgkJC5TWVNURU1fU1RSSU5HLCBjcCwgZmFsc2UpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41NiBBZnRlciBET0NUWVBFIHB1YmxpYyBrZXl3b3JkIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckRvY3R5cGVQdWJsaWNLZXl3b3JkU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU3IEJlZm9yZSBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEVdID0gZnVuY3Rpb24gYmVmb3JlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU4IERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgKGRvdWJsZS1xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGRvY3R5cGVQdWJsaWNJZGVudGlmaWVyRG91YmxlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTkgRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciAoc2luZ2xlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVB1YmxpY0lkZW50aWZpZXJTaW5nbGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjYwIEFmdGVyIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjEgQmV0d2VlbiBET0NUWVBFIHB1YmxpYyBhbmQgc3lzdGVtIGlkZW50aWZpZXJzIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFXSA9IGZ1bmN0aW9uIGJldHdlZW5Eb2N0eXBlUHVibGljQW5kU3lzdGVtSWRlbnRpZmllcnNTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjYyIEFmdGVyIERPQ1RZUEUgc3lzdGVtIGtleXdvcmQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZVN5c3RlbUtleXdvcmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjMgQmVmb3JlIERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRUZPUkVfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlU3lzdGVtSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjQgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVN5c3RlbUlkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NSBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3lzdGVtSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjYgQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlU3lzdGVtSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjcgQm9ndXMgRE9DVFlQRSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JPR1VTX0RPQ1RZUEVfU1RBVEVdID0gZnVuY3Rpb24gYm9ndXNEb2N0eXBlU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42OCBDREFUQSBzZWN0aW9uIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ0RBVEFfU0VDVElPTl9TVEFURV0gPSBmdW5jdGlvbiBjZGF0YVNlY3Rpb25TdGF0ZShjcCkge1xyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkNEQVRBX0VORF9TVFJJTkcsIGNwLCB0cnVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICAgICAgICAgIGNwID0gdGhpcy5fY29uc3VtZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy9Ob2RlIGNvbnN0cnVjdGlvblxyXG5leHBvcnRzLmNyZWF0ZURvY3VtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBub2RlTmFtZTogJyNkb2N1bWVudCcsXHJcbiAgICAgICAgcXVpcmtzTW9kZTogZmFsc2UsXHJcbiAgICAgICAgY2hpbGROb2RlczogW11cclxuICAgIH07XHJcbn07XHJcblxyXG5leHBvcnRzLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiAnI2RvY3VtZW50LWZyYWdtZW50JyxcclxuICAgICAgICBxdWlya3NNb2RlOiBmYWxzZSxcclxuICAgICAgICBjaGlsZE5vZGVzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICh0YWdOYW1lLCBuYW1lc3BhY2VVUkksIGF0dHJzKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiB0YWdOYW1lLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgYXR0cnM6IGF0dHJzLFxyXG4gICAgICAgIG5hbWVzcGFjZVVSSTogbmFtZXNwYWNlVVJJLFxyXG4gICAgICAgIGNoaWxkTm9kZXM6IFtdLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH07XHJcbn07XHJcblxyXG5leHBvcnRzLmNyZWF0ZUNvbW1lbnROb2RlID0gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjY29tbWVudCcsXHJcbiAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICBwYXJlbnROb2RlOiBudWxsXHJcbiAgICB9O1xyXG59O1xyXG5cclxudmFyIGNyZWF0ZVRleHROb2RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiAnI3RleHQnLFxyXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICBwYXJlbnROb2RlOiBudWxsXHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy9UcmVlIG11dGF0aW9uXHJcbmV4cG9ydHMuc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24gKGRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcclxuICAgIHZhciBkb2N0eXBlTm9kZSA9IG51bGw7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmNoaWxkTm9kZXNbaV0ubm9kZU5hbWUgPT09ICcjZG9jdW1lbnRUeXBlJykge1xyXG4gICAgICAgICAgICBkb2N0eXBlTm9kZSA9IGRvY3VtZW50LmNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG9jdHlwZU5vZGUpIHtcclxuICAgICAgICBkb2N0eXBlTm9kZS5uYW1lID0gbmFtZTtcclxuICAgICAgICBkb2N0eXBlTm9kZS5wdWJsaWNJZCA9IHB1YmxpY0lkO1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLnN5c3RlbUlkID0gc3lzdGVtSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQsIHtcclxuICAgICAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnRUeXBlJyxcclxuICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgcHVibGljSWQ6IHB1YmxpY0lkLFxyXG4gICAgICAgICAgICBzeXN0ZW1JZDogc3lzdGVtSWRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuc2V0UXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xyXG4gICAgZG9jdW1lbnQucXVpcmtzTW9kZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzUXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LnF1aXJrc01vZGU7XHJcbn07XHJcblxyXG52YXIgYXBwZW5kQ2hpbGQgPSBleHBvcnRzLmFwcGVuZENoaWxkID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUpIHtcclxuICAgIHBhcmVudE5vZGUuY2hpbGROb2Rlcy5wdXNoKG5ld05vZGUpO1xyXG4gICAgbmV3Tm9kZS5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcclxufTtcclxuXHJcbnZhciBpbnNlcnRCZWZvcmUgPSBleHBvcnRzLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICB2YXIgaW5zZXJ0aW9uSWR4ID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2YocmVmZXJlbmNlTm9kZSk7XHJcblxyXG4gICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld05vZGUpO1xyXG4gICAgbmV3Tm9kZS5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcclxufTtcclxuXHJcbmV4cG9ydHMuZGV0YWNoTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgdmFyIGlkeCA9IG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2Yobm9kZSk7XHJcblxyXG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIG5vZGUucGFyZW50Tm9kZSA9IG51bGw7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmluc2VydFRleHQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgdGV4dCkge1xyXG4gICAgaWYgKHBhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICBpZiAocHJldk5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCcpIHtcclxuICAgICAgICAgICAgcHJldk5vZGUudmFsdWUgKz0gdGV4dDtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhcHBlbmRDaGlsZChwYXJlbnROb2RlLCBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XHJcbn07XHJcblxyXG5leHBvcnRzLmluc2VydFRleHRCZWZvcmUgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgdGV4dCwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgdmFyIHByZXZOb2RlID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzW3BhcmVudE5vZGUuY2hpbGROb2Rlcy5pbmRleE9mKHJlZmVyZW5jZU5vZGUpIC0gMV07XHJcblxyXG4gICAgaWYgKHByZXZOb2RlICYmIHByZXZOb2RlLm5vZGVOYW1lID09PSAnI3RleHQnKVxyXG4gICAgICAgIHByZXZOb2RlLnZhbHVlICs9IHRleHQ7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpLCByZWZlcmVuY2VOb2RlKTtcclxufTtcclxuXHJcbmV4cG9ydHMuYWRvcHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHJlY2lwaWVudE5vZGUsIGF0dHJzKSB7XHJcbiAgICB2YXIgcmVjaXBpZW50QXR0cnNNYXAgPSBbXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY2lwaWVudE5vZGUuYXR0cnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgcmVjaXBpZW50QXR0cnNNYXAucHVzaChyZWNpcGllbnROb2RlLmF0dHJzW2ldLm5hbWUpO1xyXG5cclxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAocmVjaXBpZW50QXR0cnNNYXAuaW5kZXhPZihhdHRyc1tqXS5uYW1lKSA9PT0gLTEpXHJcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGUuYXR0cnMucHVzaChhdHRyc1tqXSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy9UcmVlIHRyYXZlcnNpbmdcclxuZXhwb3J0cy5nZXRGaXJzdENoaWxkID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLmNoaWxkTm9kZXNbMF07XHJcbn07XHJcblxyXG5leHBvcnRzLmdldENoaWxkTm9kZXMgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUuY2hpbGROb2RlcztcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0UGFyZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRBdHRyTGlzdCA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5hdHRycztcclxufTtcclxuXHJcbi8vTm9kZSBkYXRhXHJcbmV4cG9ydHMuZ2V0VGFnTmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC50YWdOYW1lO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXROYW1lc3BhY2VVUkkgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQubmFtZXNwYWNlVVJJO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRUZXh0Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAodGV4dE5vZGUpIHtcclxuICAgIHJldHVybiB0ZXh0Tm9kZS52YWx1ZTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0Q29tbWVudE5vZGVDb250ZW50ID0gZnVuY3Rpb24gKGNvbW1lbnROb2RlKSB7XHJcbiAgICByZXR1cm4gY29tbWVudE5vZGUuZGF0YTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZU5hbWUgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZS5uYW1lO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlUHVibGljSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZS5wdWJsaWNJZDtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkID0gZnVuY3Rpb24gKGRvY3R5cGVOb2RlKSB7XHJcbiAgICByZXR1cm4gZG9jdHlwZU5vZGUuc3lzdGVtSWQ7XHJcbn07XHJcblxyXG4vL05vZGUgdHlwZXNcclxuZXhwb3J0cy5pc1RleHROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI3RleHQnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0NvbW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2NvbW1lbnQnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0RvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnRUeXBlJztcclxufTtcclxuXHJcbmV4cG9ydHMuaXNFbGVtZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gISFub2RlLnRhZ05hbWU7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBEb2N0eXBlID0gcmVxdWlyZSgnLi4vY29tbW9uL2RvY3R5cGUnKTtcclxuXHJcbi8vQ29udmVyc2lvbiB0YWJsZXMgZm9yIERPTSBMZXZlbDEgc3RydWN0dXJlIGVtdWxhdGlvblxyXG52YXIgbm9kZVR5cGVzID0ge1xyXG4gICAgZWxlbWVudDogMSxcclxuICAgIHRleHQ6IDMsXHJcbiAgICBjZGF0YTogNCxcclxuICAgIGNvbW1lbnQ6IDhcclxufTtcclxuXHJcbnZhciBub2RlUHJvcGVydHlTaG9ydGhhbmRzID0ge1xyXG4gICAgdGFnTmFtZTogJ25hbWUnLFxyXG4gICAgY2hpbGROb2RlczogJ2NoaWxkcmVuJyxcclxuICAgIHBhcmVudE5vZGU6ICdwYXJlbnQnLFxyXG4gICAgcHJldmlvdXNTaWJsaW5nOiAncHJldicsXHJcbiAgICBuZXh0U2libGluZzogJ25leHQnLFxyXG4gICAgbm9kZVZhbHVlOiAnZGF0YSdcclxufTtcclxuXHJcbi8vTm9kZVxyXG52YXIgTm9kZSA9IGZ1bmN0aW9uIChwcm9wcykge1xyXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XHJcbiAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KGtleSkpXHJcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IHByb3BzW2tleV07XHJcbiAgICB9XHJcbn07XHJcblxyXG5Ob2RlLnByb3RvdHlwZSA9IHtcclxuICAgIGdldCBmaXJzdENoaWxkKCkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuICYmIGNoaWxkcmVuWzBdIHx8IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldCBsYXN0Q2hpbGQoKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0gfHwgbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0IG5vZGVUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiBub2RlVHlwZXNbdGhpcy50eXBlXSB8fCBub2RlVHlwZXMuZWxlbWVudDtcclxuICAgIH1cclxufTtcclxuXHJcbk9iamVjdC5rZXlzKG5vZGVQcm9wZXJ0eVNob3J0aGFuZHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgdmFyIHNob3J0aGFuZCA9IG5vZGVQcm9wZXJ0eVNob3J0aGFuZHNba2V5XTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIGtleSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1tzaG9ydGhhbmRdIHx8IG51bGw7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcclxuICAgICAgICAgICAgdGhpc1tzaG9ydGhhbmRdID0gdmFsO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTtcclxuXHJcblxyXG4vL05vZGUgY29uc3RydWN0aW9uXHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnQgPVxyXG5leHBvcnRzLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xyXG4gICAgICAgIHR5cGU6ICdyb290JyxcclxuICAgICAgICBuYW1lOiAncm9vdCcsXHJcbiAgICAgICAgcGFyZW50OiBudWxsLFxyXG4gICAgICAgIHByZXY6IG51bGwsXHJcbiAgICAgICAgbmV4dDogbnVsbCxcclxuICAgICAgICBjaGlsZHJlbjogW11cclxuICAgIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcclxuICAgIHZhciBhdHRyaWJzID0ge30sXHJcbiAgICAgICAgYXR0cmlic05hbWVzcGFjZSA9IHt9LFxyXG4gICAgICAgIGF0dHJpYnNQcmVmaXggPSB7fTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGF0dHJOYW1lID0gYXR0cnNbaV0ubmFtZTtcclxuXHJcbiAgICAgICAgYXR0cmlic1thdHRyTmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcclxuICAgICAgICBhdHRyaWJzTmFtZXNwYWNlW2F0dHJOYW1lXSA9IGF0dHJzW2ldLm5hbWVzcGFjZTtcclxuICAgICAgICBhdHRyaWJzUHJlZml4W2F0dHJOYW1lXSA9IGF0dHJzW2ldLnByZWZpeDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xyXG4gICAgICAgIHR5cGU6IHRhZ05hbWUgPT09ICdzY3JpcHQnIHx8IHRhZ05hbWUgPT09ICdzdHlsZScgPyB0YWdOYW1lIDogJ3RhZycsXHJcbiAgICAgICAgbmFtZTogdGFnTmFtZSxcclxuICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZVVSSSxcclxuICAgICAgICBhdHRyaWJzOiBhdHRyaWJzLFxyXG4gICAgICAgICd4LWF0dHJpYnNOYW1lc3BhY2UnOiBhdHRyaWJzTmFtZXNwYWNlLFxyXG4gICAgICAgICd4LWF0dHJpYnNQcmVmaXgnOiBhdHRyaWJzUHJlZml4LFxyXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICBwYXJlbnQ6IG51bGwsXHJcbiAgICAgICAgcHJldjogbnVsbCxcclxuICAgICAgICBuZXh0OiBudWxsXHJcbiAgICB9KTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgcmV0dXJuIG5ldyBOb2RlKHtcclxuICAgICAgICB0eXBlOiAnY29tbWVudCcsXHJcbiAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICBwYXJlbnQ6IG51bGwsXHJcbiAgICAgICAgcHJldjogbnVsbCxcclxuICAgICAgICBuZXh0OiBudWxsXHJcbiAgICB9KTtcclxufTtcclxuXHJcbnZhciBjcmVhdGVUZXh0Tm9kZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBOb2RlKHtcclxuICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgZGF0YTogdmFsdWUsXHJcbiAgICAgICAgcGFyZW50OiBudWxsLFxyXG4gICAgICAgIHByZXY6IG51bGwsXHJcbiAgICAgICAgbmV4dDogbnVsbFxyXG4gICAgfSk7XHJcbn07XHJcblxyXG5cclxuLy9UcmVlIG11dGF0aW9uXHJcbmV4cG9ydHMuc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24gKGRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcclxuICAgIHZhciBkYXRhID0gRG9jdHlwZS5zZXJpYWxpemVDb250ZW50KG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCksXHJcbiAgICAgICAgZG9jdHlwZU5vZGUgPSBudWxsO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGRyZW5baV0udHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgZG9jdW1lbnQuY2hpbGRyZW5baV0ubmFtZSA9PT0gJyFkb2N0eXBlJykge1xyXG4gICAgICAgICAgICBkb2N0eXBlTm9kZSA9IGRvY3VtZW50LmNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvY3R5cGVOb2RlKSB7XHJcbiAgICAgICAgZG9jdHlwZU5vZGUuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgZG9jdHlwZU5vZGVbJ3gtbmFtZSddID0gbmFtZTtcclxuICAgICAgICBkb2N0eXBlTm9kZVsneC1wdWJsaWNJZCddID0gcHVibGljSWQ7XHJcbiAgICAgICAgZG9jdHlwZU5vZGVbJ3gtc3lzdGVtSWQnXSA9IHN5c3RlbUlkO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGFwcGVuZENoaWxkKGRvY3VtZW50LCBuZXcgTm9kZSh7XHJcbiAgICAgICAgICAgIHR5cGU6ICdkaXJlY3RpdmUnLFxyXG4gICAgICAgICAgICBuYW1lOiAnIWRvY3R5cGUnLFxyXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgICAgICAneC1uYW1lJzogbmFtZSxcclxuICAgICAgICAgICAgJ3gtcHVibGljSWQnOiBwdWJsaWNJZCxcclxuICAgICAgICAgICAgJ3gtc3lzdGVtSWQnOiBzeXN0ZW1JZFxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5leHBvcnRzLnNldFF1aXJrc01vZGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQpIHtcclxuICAgIGRvY3VtZW50LnF1aXJrc01vZGUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc1F1aXJrc01vZGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQpIHtcclxuICAgIHJldHVybiBkb2N1bWVudC5xdWlya3NNb2RlO1xyXG59O1xyXG5cclxudmFyIGFwcGVuZENoaWxkID0gZXhwb3J0cy5hcHBlbmRDaGlsZCA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBuZXdOb2RlKSB7XHJcbiAgICB2YXIgcHJldiA9IHBhcmVudE5vZGUuY2hpbGRyZW5bcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXTtcclxuXHJcbiAgICBpZiAocHJldikge1xyXG4gICAgICAgIHByZXYubmV4dCA9IG5ld05vZGU7XHJcbiAgICAgICAgbmV3Tm9kZS5wcmV2ID0gcHJldjtcclxuICAgIH1cclxuXHJcbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnB1c2gobmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudCA9IHBhcmVudE5vZGU7XHJcbn07XHJcblxyXG52YXIgaW5zZXJ0QmVmb3JlID0gZXhwb3J0cy5pbnNlcnRCZWZvcmUgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgbmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgdmFyIGluc2VydGlvbklkeCA9IHBhcmVudE5vZGUuY2hpbGRyZW4uaW5kZXhPZihyZWZlcmVuY2VOb2RlKSxcclxuICAgICAgICBwcmV2ID0gcmVmZXJlbmNlTm9kZS5wcmV2O1xyXG5cclxuICAgIGlmIChwcmV2KSB7XHJcbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcclxuICAgICAgICBuZXdOb2RlLnByZXYgPSBwcmV2O1xyXG4gICAgfVxyXG5cclxuICAgIHJlZmVyZW5jZU5vZGUucHJldiA9IG5ld05vZGU7XHJcbiAgICBuZXdOb2RlLm5leHQgPSByZWZlcmVuY2VOb2RlO1xyXG5cclxuICAgIHBhcmVudE5vZGUuY2hpbGRyZW4uc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudCA9IHBhcmVudE5vZGU7XHJcbn07XHJcblxyXG5leHBvcnRzLmRldGFjaE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgaWYgKG5vZGUucGFyZW50KSB7XHJcbiAgICAgICAgdmFyIGlkeCA9IG5vZGUucGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZSksXHJcbiAgICAgICAgICAgIHByZXYgPSBub2RlLnByZXYsXHJcbiAgICAgICAgICAgIG5leHQgPSBub2RlLm5leHQ7XHJcblxyXG4gICAgICAgIG5vZGUucHJldiA9IG51bGw7XHJcbiAgICAgICAgbm9kZS5uZXh0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHByZXYpXHJcbiAgICAgICAgICAgIHByZXYubmV4dCA9IG5leHQ7XHJcblxyXG4gICAgICAgIGlmIChuZXh0KVxyXG4gICAgICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xyXG5cclxuICAgICAgICBub2RlLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICBub2RlLnBhcmVudCA9IG51bGw7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmluc2VydFRleHQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgdGV4dCkge1xyXG4gICAgdmFyIGxhc3RDaGlsZCA9IHBhcmVudE5vZGUuY2hpbGRyZW5bcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXTtcclxuXHJcbiAgICBpZiAobGFzdENoaWxkICYmIGxhc3RDaGlsZC50eXBlID09PSAndGV4dCcpXHJcbiAgICAgICAgbGFzdENoaWxkLmRhdGEgKz0gdGV4dDtcclxuICAgIGVsc2VcclxuICAgICAgICBhcHBlbmRDaGlsZChwYXJlbnROb2RlLCBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XHJcbn07XHJcblxyXG5leHBvcnRzLmluc2VydFRleHRCZWZvcmUgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgdGV4dCwgcmVmZXJlbmNlTm9kZSkge1xyXG4gICAgdmFyIHByZXZOb2RlID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmluZGV4T2YocmVmZXJlbmNlTm9kZSkgLSAxXTtcclxuXHJcbiAgICBpZiAocHJldk5vZGUgJiYgcHJldk5vZGUudHlwZSA9PT0gJ3RleHQnKVxyXG4gICAgICAgIHByZXZOb2RlLmRhdGEgKz0gdGV4dDtcclxuICAgIGVsc2VcclxuICAgICAgICBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgY3JlYXRlVGV4dE5vZGUodGV4dCksIHJlZmVyZW5jZU5vZGUpO1xyXG59O1xyXG5cclxuZXhwb3J0cy5hZG9wdEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAocmVjaXBpZW50Tm9kZSwgYXR0cnMpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYXR0ck5hbWUgPSBhdHRyc1tpXS5uYW1lO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHJlY2lwaWVudE5vZGUuYXR0cmlic1thdHRyTmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGUuYXR0cmlic1thdHRyTmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcclxuICAgICAgICAgICAgcmVjaXBpZW50Tm9kZVsneC1hdHRyaWJzTmFtZXNwYWNlJ11bYXR0ck5hbWVdID0gYXR0cnNbaV0ubmFtZXNwYWNlO1xyXG4gICAgICAgICAgICByZWNpcGllbnROb2RlWyd4LWF0dHJpYnNQcmVmaXgnXVthdHRyTmFtZV0gPSBhdHRyc1tpXS5wcmVmaXg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vVHJlZSB0cmF2ZXJzaW5nXHJcbmV4cG9ydHMuZ2V0Rmlyc3RDaGlsZCA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5jaGlsZHJlblswXTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0Q2hpbGROb2RlcyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5jaGlsZHJlbjtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0UGFyZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5wYXJlbnQ7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldEF0dHJMaXN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHZhciBhdHRyTGlzdCA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZS5hdHRyaWJzKSB7XHJcbiAgICAgICAgaWYgKG5vZGUuYXR0cmlicy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICBhdHRyTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogbm9kZS5hdHRyaWJzW25hbWVdLFxyXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlOiBub2RlWyd4LWF0dHJpYnNOYW1lc3BhY2UnXVtuYW1lXSxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogbm9kZVsneC1hdHRyaWJzUHJlZml4J11bbmFtZV1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhdHRyTGlzdDtcclxufTtcclxuXHJcblxyXG4vL05vZGUgZGF0YVxyXG5leHBvcnRzLmdldFRhZ05hbWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQubmFtZTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0TmFtZXNwYWNlVVJJID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBlbGVtZW50Lm5hbWVzcGFjZTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0VGV4dE5vZGVDb250ZW50ID0gZnVuY3Rpb24gKHRleHROb2RlKSB7XHJcbiAgICByZXR1cm4gdGV4dE5vZGUuZGF0YTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0Q29tbWVudE5vZGVDb250ZW50ID0gZnVuY3Rpb24gKGNvbW1lbnROb2RlKSB7XHJcbiAgICByZXR1cm4gY29tbWVudE5vZGUuZGF0YTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZU5hbWUgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZVsneC1uYW1lJ107XHJcbn07XHJcblxyXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlWyd4LXB1YmxpY0lkJ107XHJcbn07XHJcblxyXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVTeXN0ZW1JZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlWyd4LXN5c3RlbUlkJ107XHJcbn07XHJcblxyXG5cclxuLy9Ob2RlIHR5cGVzXHJcbmV4cG9ydHMuaXNUZXh0Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSAndGV4dCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2NvbW1lbnQnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0RvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgbm9kZS5uYW1lID09PSAnIWRvY3R5cGUnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0VsZW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiAhIW5vZGUuYXR0cmlicztcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuLy9Db25zdFxyXG52YXIgTk9BSF9BUktfQ0FQQUNJVFkgPSAzO1xyXG5cclxuLy9MaXN0IG9mIGZvcm1hdHRpbmcgZWxlbWVudHNcclxudmFyIEZvcm1hdHRpbmdFbGVtZW50TGlzdCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRyZWVBZGFwdGVyKSB7XHJcbiAgICB0aGlzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLmVudHJpZXMgPSBbXTtcclxuICAgIHRoaXMudHJlZUFkYXB0ZXIgPSB0cmVlQWRhcHRlcjtcclxuICAgIHRoaXMuYm9va21hcmsgPSBudWxsO1xyXG59O1xyXG5cclxuLy9FbnRyeSB0eXBlc1xyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZID0gJ01BUktFUl9FTlRSWSc7XHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZID0gJ0VMRU1FTlRfRU5UUlknO1xyXG5cclxuLy9Ob2FoIEFyaydzIGNvbmRpdGlvblxyXG4vL09QVElNSVpBVElPTjogYXQgZmlyc3Qgd2UgdHJ5IHRvIGZpbmQgcG9zc2libGUgY2FuZGlkYXRlcyBmb3IgZXhjbHVzaW9uIHVzaW5nXHJcbi8vbGlnaHR3ZWlnaHQgaGV1cmlzdGljcyB3aXRob3V0IHRob3JvdWdoIGF0dHJpYnV0ZXMgY2hlY2suXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuX2dldE5vYWhBcmtDb25kaXRpb25DYW5kaWRhdGVzID0gZnVuY3Rpb24gKG5ld0VsZW1lbnQpIHtcclxuICAgIHZhciBjYW5kaWRhdGVzID0gW107XHJcblxyXG4gICAgaWYgKHRoaXMubGVuZ3RoID49IE5PQUhfQVJLX0NBUEFDSVRZKSB7XHJcbiAgICAgICAgdmFyIG5lQXR0cnNMZW5ndGggPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KG5ld0VsZW1lbnQpLmxlbmd0aCxcclxuICAgICAgICAgICAgbmVUYWdOYW1lID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG5ld0VsZW1lbnQpLFxyXG4gICAgICAgICAgICBuZU5hbWVzcGFjZVVSSSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKG5ld0VsZW1lbnQpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmVudHJpZXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBlbnRyeS5lbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudEF0dHJzID0gdGhpcy50cmVlQWRhcHRlci5nZXRBdHRyTGlzdChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09IG5lVGFnTmFtZSAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZWxlbWVudCkgPT09IG5lTmFtZXNwYWNlVVJJICYmXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50QXR0cnMubGVuZ3RoID09PSBuZUF0dHJzTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goe2lkeDogaSwgYXR0cnM6IGVsZW1lbnRBdHRyc30pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYW5kaWRhdGVzLmxlbmd0aCA8IE5PQUhfQVJLX0NBUEFDSVRZID8gW10gOiBjYW5kaWRhdGVzO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5fZW5zdXJlTm9haEFya0NvbmRpdGlvbiA9IGZ1bmN0aW9uIChuZXdFbGVtZW50KSB7XHJcbiAgICB2YXIgY2FuZGlkYXRlcyA9IHRoaXMuX2dldE5vYWhBcmtDb25kaXRpb25DYW5kaWRhdGVzKG5ld0VsZW1lbnQpLFxyXG4gICAgICAgIGNMZW5ndGggPSBjYW5kaWRhdGVzLmxlbmd0aDtcclxuXHJcbiAgICBpZiAoY0xlbmd0aCkge1xyXG4gICAgICAgIHZhciBuZUF0dHJzID0gdGhpcy50cmVlQWRhcHRlci5nZXRBdHRyTGlzdChuZXdFbGVtZW50KSxcclxuICAgICAgICAgICAgbmVBdHRyc0xlbmd0aCA9IG5lQXR0cnMubGVuZ3RoLFxyXG4gICAgICAgICAgICBuZUF0dHJzTWFwID0ge307XHJcblxyXG4gICAgICAgIC8vTk9URTogYnVpbGQgYXR0cnMgbWFwIGZvciB0aGUgbmV3IGVsZW1lbnQgc28gd2UgY2FuIHBlcmZvcm0gZmFzdCBsb29rdXBzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZUF0dHJzTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5lQXR0ciA9IG5lQXR0cnNbaV07XHJcblxyXG4gICAgICAgICAgICBuZUF0dHJzTWFwW25lQXR0ci5uYW1lXSA9IG5lQXR0ci52YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmVBdHRyc0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY0xlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY0F0dHIgPSBjYW5kaWRhdGVzW2pdLmF0dHJzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChuZUF0dHJzTWFwW2NBdHRyLm5hbWVdICE9PSBjQXR0ci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNMZW5ndGgtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPCBOT0FIX0FSS19DQVBBQ0lUWSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vTk9URTogcmVtb3ZlIGJvdHRvbW1vc3QgY2FuZGlkYXRlcyB1bnRpbCBOb2FoJ3MgQXJrIGNvbmRpdGlvbiB3aWxsIG5vdCBiZSBtZXRcclxuICAgICAgICBmb3IgKHZhciBpID0gY0xlbmd0aCAtIDE7IGkgPj0gTk9BSF9BUktfQ0FQQUNJVFkgLSAxOyBpLS0pIHtcclxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZShjYW5kaWRhdGVzW2ldLmlkeCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoLS07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLy9NdXRhdGlvbnNcclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5pbnNlcnRNYXJrZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7dHlwZTogRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWX0pO1xyXG4gICAgdGhpcy5sZW5ndGgrKztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUucHVzaEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgdG9rZW4pIHtcclxuICAgIHRoaXMuX2Vuc3VyZU5vYWhBcmtDb25kaXRpb24oZWxlbWVudCk7XHJcblxyXG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xyXG4gICAgICAgIHR5cGU6IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZLFxyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgdG9rZW46IHRva2VuXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxlbmd0aCsrO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5pbnNlcnRFbGVtZW50QWZ0ZXJCb29rbWFyayA9IGZ1bmN0aW9uIChlbGVtZW50LCB0b2tlbikge1xyXG4gICAgdmFyIGJvb2ttYXJrSWR4ID0gdGhpcy5sZW5ndGggLSAxO1xyXG5cclxuICAgIGZvciAoOyBib29rbWFya0lkeCA+PSAwOyBib29rbWFya0lkeC0tKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50cmllc1tib29rbWFya0lkeF0gPT09IHRoaXMuYm9va21hcmspXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50cmllcy5zcGxpY2UoYm9va21hcmtJZHggKyAxLCAwLCB7XHJcbiAgICAgICAgdHlwZTogRm9ybWF0dGluZ0VsZW1lbnRMaXN0LkVMRU1FTlRfRU5UUlksXHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICB0b2tlbjogdG9rZW5cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubGVuZ3RoKys7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLnJlbW92ZUVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5KSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLmVudHJpZXNbaV0gPT09IGVudHJ5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoLS07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuY2xlYXJUb0xhc3RNYXJrZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmVudHJpZXMucG9wKCk7XHJcblxyXG4gICAgICAgIHRoaXMubGVuZ3RoLS07XHJcblxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbi8vU2VhcmNoXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuZ2V0RWxlbWVudEVudHJ5SW5TY29wZVdpdGhUYWdOYW1lID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzW2ldO1xyXG5cclxuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWSlcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZW50cnkuZWxlbWVudCkgPT09IHRhZ05hbWUpXHJcbiAgICAgICAgICAgIHJldHVybiBlbnRyeTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuZ2V0RWxlbWVudEVudHJ5ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzW2ldO1xyXG5cclxuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gRm9ybWF0dGluZ0VsZW1lbnRMaXN0LkVMRU1FTlRfRU5UUlkgJiYgZW50cnkuZWxlbWVudCA9PSBlbGVtZW50KVxyXG4gICAgICAgICAgICByZXR1cm4gZW50cnk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBPcGVuRWxlbWVudFN0YWNrID0gcmVxdWlyZSgnLi9vcGVuX2VsZW1lbnRfc3RhY2snKSxcclxuICAgIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcclxuICAgIEhUTUwgPSByZXF1aXJlKCcuLi9jb21tb24vaHRtbCcpO1xyXG5cclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIGNsb3NpbmdUb2tlbiwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIHZhciBsb2MgPSBlbGVtZW50Ll9fbG9jYXRpb247XHJcblxyXG4gICAgaWYgKCFsb2MpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmICghbG9jLnN0YXJ0VGFnKSB7XHJcbiAgICAgICAgbG9jLnN0YXJ0VGFnID0ge1xyXG4gICAgICAgICAgICBzdGFydDogbG9jLnN0YXJ0LFxyXG4gICAgICAgICAgICBlbmQ6IGxvYy5lbmRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjbG9zaW5nVG9rZW4ubG9jYXRpb24pIHtcclxuICAgICAgICB2YXIgdG4gPSB0cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxyXG4gICAgICAgICAgICAvLyBOT1RFOiBGb3IgY2FzZXMgbGlrZSA8cD4gPHA+IDwvcD4gLSBGaXJzdCAncCcgY2xvc2VzIHdpdGhvdXQgYSBjbG9zaW5nIHRhZyBhbmRcclxuICAgICAgICAgICAgLy8gZm9yIGNhc2VzIGxpa2UgPHRkPiA8cD4gPC90ZD4gLSAncCcgY2xvc2VzIHdpdGhvdXQgYSBjbG9zaW5nIHRhZ1xyXG4gICAgICAgICAgICBpc0Nsb3NpbmdFbmRUYWcgPSBjbG9zaW5nVG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkVORF9UQUdfVE9LRU4gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG4gPT09IGNsb3NpbmdUb2tlbi50YWdOYW1lO1xyXG5cclxuICAgICAgICBpZiAoaXNDbG9zaW5nRW5kVGFnKSB7XHJcbiAgICAgICAgICAgIGxvYy5lbmRUYWcgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogY2xvc2luZ1Rva2VuLmxvY2F0aW9uLnN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgZW5kOiBjbG9zaW5nVG9rZW4ubG9jYXRpb24uZW5kXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2MuZW5kID0gY2xvc2luZ1Rva2VuLmxvY2F0aW9uLmVuZDtcclxuICAgIH1cclxufVxyXG5cclxuLy9OT1RFOiBwYXRjaCBvcGVuIGVsZW1lbnRzIHN0YWNrLCBzbyB3ZSBjYW4gYXNzaWduIGVuZCBsb2NhdGlvbiBmb3IgdGhlIGVsZW1lbnRzXHJcbmZ1bmN0aW9uIHBhdGNoT3BlbkVsZW1lbnRzU3RhY2soc3RhY2ssIHBhcnNlcikge1xyXG4gICAgdmFyIHRyZWVBZGFwdGVyID0gcGFyc2VyLnRyZWVBZGFwdGVyO1xyXG5cclxuICAgIHN0YWNrLnBvcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZXRFbmRMb2NhdGlvbih0aGlzLmN1cnJlbnQsIHBhcnNlci5jdXJyZW50VG9rZW4sIHRyZWVBZGFwdGVyKTtcclxuICAgICAgICBPcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3AuY2FsbCh0aGlzKTtcclxuICAgIH07XHJcblxyXG4gICAgc3RhY2sucG9wQWxsVXBUb0h0bWxFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID4gMDsgaS0tKVxyXG4gICAgICAgICAgICBzZXRFbmRMb2NhdGlvbih0aGlzLml0ZW1zW2ldLCBwYXJzZXIuY3VycmVudFRva2VuLCB0cmVlQWRhcHRlcik7XHJcblxyXG4gICAgICAgIE9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcEFsbFVwVG9IdG1sRWxlbWVudC5jYWxsKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBzdGFjay5yZW1vdmUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIHBhcnNlci5jdXJyZW50VG9rZW4sIHRyZWVBZGFwdGVyKTtcclxuICAgICAgICBPcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzLCBlbGVtZW50KTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydHMuYXNzaWduID0gZnVuY3Rpb24gKHBhcnNlcikge1xyXG4gICAgLy9OT1RFOiBvYnRhaW4gUGFyc2VyIHByb3RvIHRoaXMgd2F5IHRvIGF2b2lkIG1vZHVsZSBjaXJjdWxhciByZWZlcmVuY2VzXHJcbiAgICB2YXIgcGFyc2VyUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyc2VyKSxcclxuICAgICAgICB0cmVlQWRhcHRlciA9IHBhcnNlci50cmVlQWRhcHRlcjtcclxuXHJcblxyXG4gICAgLy9OT1RFOiBwYXRjaCBfcmVzZXQgbWV0aG9kXHJcbiAgICBwYXJzZXIuX3Jlc2V0ID0gZnVuY3Rpb24gKGh0bWwsIGRvY3VtZW50LCBmcmFnbWVudENvbnRleHQpIHtcclxuICAgICAgICBwYXJzZXJQcm90by5fcmVzZXQuY2FsbCh0aGlzLCBodG1sLCBkb2N1bWVudCwgZnJhZ21lbnRDb250ZXh0KTtcclxuXHJcbiAgICAgICAgdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICAgICAgICBwYXRjaE9wZW5FbGVtZW50c1N0YWNrKHRoaXMub3BlbkVsZW1lbnRzLCBwYXJzZXIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwYXJzZXIuX3Byb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xyXG4gICAgICAgIHBhcnNlclByb3RvLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50LmNhbGwodGhpcywgdG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICBwYXJzZXIuX3Byb2Nlc3NUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gdG9rZW47XHJcbiAgICAgICAgcGFyc2VyUHJvdG8uX3Byb2Nlc3NUb2tlbi5jYWxsKHRoaXMsIHRva2VuKTtcclxuXHJcbiAgICAgICAgLy9OT1RFOiA8Ym9keT4gYW5kIDxodG1sPiBhcmUgbmV2ZXIgcG9wcGVkIGZyb20gdGhlIHN0YWNrLCBzbyB3ZSBuZWVkIHRvIHVwZGF0ZWRcclxuICAgICAgICAvL3RoZWlyIGVuZCBsb2NhdGlvbiBleHBsaWNpdGx5LlxyXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTiAmJlxyXG4gICAgICAgICAgICAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MIHx8XHJcbiAgICAgICAgICAgICh0b2tlbi50YWdOYW1lID09PSAkLkJPRFkgJiYgdGhpcy5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkJPRFkpKSkpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0b2tlbi50YWdOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0RW5kTG9jYXRpb24oZWxlbWVudCwgdG9rZW4sIHRyZWVBZGFwdGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy9Eb2N0eXBlXHJcbiAgICBwYXJzZXIuX3NldERvY3VtZW50VHlwZSA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgICAgIHBhcnNlclByb3RvLl9zZXREb2N1bWVudFR5cGUuY2FsbCh0aGlzLCB0b2tlbik7XHJcblxyXG4gICAgICAgIHZhciBkb2N1bWVudENoaWxkcmVuID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKHRoaXMuZG9jdW1lbnQpLFxyXG4gICAgICAgICAgICBjbkxlbmd0aCA9IGRvY3VtZW50Q2hpbGRyZW4ubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNuTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudENoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLl9fbG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvL0VsZW1lbnRzXHJcbiAgICBwYXJzZXIuX2F0dGFjaEVsZW1lbnRUb1RyZWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIC8vTk9URTogX2F0dGFjaEVsZW1lbnRUb1RyZWUgaXMgY2FsbGVkIGZyb20gX2FwcGVuZEVsZW1lbnQsIF9pbnNlcnRFbGVtZW50IGFuZCBfaW5zZXJ0VGVtcGxhdGUgbWV0aG9kcy5cclxuICAgICAgICAvL1NvIHdlIHdpbGwgdXNlIHRva2VuIGxvY2F0aW9uIHN0b3JlZCBpbiB0aGlzIG1ldGhvZHMgZm9yIHRoZSBlbGVtZW50LlxyXG4gICAgICAgIGVsZW1lbnQuX19sb2NhdGlvbiA9IHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgcGFyc2VyUHJvdG8uX2F0dGFjaEVsZW1lbnRUb1RyZWUuY2FsbCh0aGlzLCBlbGVtZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgcGFyc2VyLl9hcHBlbmRFbGVtZW50ID0gZnVuY3Rpb24gKHRva2VuLCBuYW1lc3BhY2VVUkkpIHtcclxuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcclxuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kRWxlbWVudC5jYWxsKHRoaXMsIHRva2VuLCBuYW1lc3BhY2VVUkkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwYXJzZXIuX2luc2VydEVsZW1lbnQgPSBmdW5jdGlvbiAodG9rZW4sIG5hbWVzcGFjZVVSSSkge1xyXG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xyXG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRFbGVtZW50LmNhbGwodGhpcywgdG9rZW4sIG5hbWVzcGFjZVVSSSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHBhcnNlci5faW5zZXJ0VGVtcGxhdGUgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcclxuICAgICAgICBwYXJzZXJQcm90by5faW5zZXJ0VGVtcGxhdGUuY2FsbCh0aGlzLCB0b2tlbik7XHJcblxyXG4gICAgICAgIHZhciB0bXBsQ29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyh0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50KVswXTtcclxuXHJcbiAgICAgICAgdG1wbENvbnRlbnQuX19sb2NhdGlvbiA9IG51bGw7XHJcbiAgICB9O1xyXG5cclxuICAgIHBhcnNlci5faW5zZXJ0RmFrZVJvb3RFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQuY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50Ll9fbG9jYXRpb24gPSBudWxsO1xyXG4gICAgfTtcclxuXHJcbiAgICAvL0NvbW1lbnRzXHJcbiAgICBwYXJzZXIuX2FwcGVuZENvbW1lbnROb2RlID0gZnVuY3Rpb24gKHRva2VuLCBwYXJlbnQpIHtcclxuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kQ29tbWVudE5vZGUuY2FsbCh0aGlzLCB0b2tlbiwgcGFyZW50KTtcclxuXHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKHBhcmVudCksXHJcbiAgICAgICAgICAgIGNvbW1lbnROb2RlID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIGNvbW1lbnROb2RlLl9fbG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcclxuICAgIH07XHJcblxyXG4gICAgLy9UZXh0XHJcbiAgICBwYXJzZXIuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvL05PVEU6IHN0b3JlIGxhc3QgZm9zdGVyIHBhcmVudGluZyBsb2NhdGlvbiwgc28gd2Ugd2lsbCBiZSBhYmxlIHRvIGZpbmQgaW5zZXJ0ZWQgdGV4dFxyXG4gICAgICAgIC8vaW4gY2FzZSBvZiBmb3N0ZXIgcGFyZW50aW5nXHJcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBwYXJzZXJQcm90by5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uLmNhbGwodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdEZvc3RlclBhcmVudGluZ0xvY2F0aW9uO1xyXG4gICAgfTtcclxuXHJcbiAgICBwYXJzZXIuX2luc2VydENoYXJhY3RlcnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgICAgICBwYXJzZXJQcm90by5faW5zZXJ0Q2hhcmFjdGVycy5jYWxsKHRoaXMsIHRva2VuKTtcclxuXHJcbiAgICAgICAgdmFyIGhhc0Zvc3RlclBhcmVudCA9IHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCksXHJcbiAgICAgICAgICAgIHBhcmVudGluZ0xvY2F0aW9uID0gdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24sXHJcbiAgICAgICAgICAgIHBhcmVudCA9IChoYXNGb3N0ZXJQYXJlbnQgJiYgcGFyZW50aW5nTG9jYXRpb24ucGFyZW50KSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudCxcclxuICAgICAgICAgICAgc2libGluZ3MgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcclxuICAgICAgICAgICAgdGV4dE5vZGVJZHggPSBoYXNGb3N0ZXJQYXJlbnQgJiYgcGFyZW50aW5nTG9jYXRpb24uYmVmb3JlRWxlbWVudCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZ3MuaW5kZXhPZihwYXJlbnRpbmdMb2NhdGlvbi5iZWZvcmVFbGVtZW50KSAtIDEgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmdzLmxlbmd0aCAtIDEsXHJcbiAgICAgICAgICAgIHRleHROb2RlID0gc2libGluZ3NbdGV4dE5vZGVJZHhdO1xyXG5cclxuICAgICAgICAvL05PVEU6IGlmIHdlIGhhdmUgbG9jYXRpb24gYXNzaWduZWQgYnkgYW5vdGhlciB0b2tlbiwgdGhlbiBqdXN0IHVwZGF0ZSBlbmQgcG9zaXRpb25cclxuICAgICAgICBpZiAodGV4dE5vZGUuX19sb2NhdGlvbilcclxuICAgICAgICAgICAgdGV4dE5vZGUuX19sb2NhdGlvbi5lbmQgPSB0b2tlbi5sb2NhdGlvbi5lbmQ7XHJcblxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGV4dE5vZGUuX19sb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xyXG4gICAgfTtcclxufTtcclxuXHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxyXG4gICAgTlMgPSBIVE1MLk5BTUVTUEFDRVM7XHJcblxyXG4vL0VsZW1lbnQgdXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBJbnRlZ2VyIGNvbXBhcmlzb25zIGFyZSBsb3ctY29zdCwgc28gd2UgY2FuIHVzZSB2ZXJ5IGZhc3QgdGFnIG5hbWUgbGVuZ3RoIGZpbHRlcnMgaGVyZS5cclxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXHJcbmZ1bmN0aW9uIGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRuKSB7XHJcbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlA7XHJcblxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlJQIHx8IHRuID09PSAkLlJUIHx8IHRuID09PSAkLkREIHx8IHRuID09PSAkLkRUIHx8IHRuID09PSAkLkxJO1xyXG5cclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5PUFRJT047XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLk9QVEdST1VQO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTY29waW5nRWxlbWVudCh0biwgbnMpIHtcclxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NSSB8fCB0biA9PT0gJC5NTyB8fCB0biA9PSAkLk1OIHx8IHRuID09PSAkLk1TKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRFU0MpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1URVhUKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5USVRMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuU1ZHO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgcmV0dXJuICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKSAmJiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXR1cm4gKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuTUFSUVVFRSkgJiYgbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuRk9SRUlHTl9PQkpFQ1QgJiYgbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLkFOTk9UQVRJT05fWE1MICYmIG5zID09PSBOUy5NQVRITUw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vL1N0YWNrIG9mIG9wZW4gZWxlbWVudHNcclxudmFyIE9wZW5FbGVtZW50U3RhY2sgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb2N1bWVudCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AgPSAtMTtcclxuICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IGRvY3VtZW50O1xyXG4gICAgdGhpcy5jdXJyZW50VGFnTmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRUbXBsQ29udGVudCA9IG51bGw7XHJcbiAgICB0aGlzLnRtcGxDb3VudCA9IDA7XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XHJcbn07XHJcblxyXG4vL0luZGV4IG9mIGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2luZGV4T2YgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IC0xO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlkeCA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpZHg7XHJcbn07XHJcblxyXG4vL1VwZGF0ZSBjdXJyZW50IGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2lzSW5UZW1wbGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KSA9PT0gTlMuSFRNTDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLl91cGRhdGVDdXJyZW50RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuaXRlbXNbdGhpcy5zdGFja1RvcF07XHJcbiAgICB0aGlzLmN1cnJlbnRUYWdOYW1lID0gdGhpcy5jdXJyZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLmN1cnJlbnQpO1xyXG5cclxuICAgIHRoaXMuY3VycmVudFRtcGxDb250ZW50ID0gdGhpcy5faXNJblRlbXBsYXRlKCkgPyB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXModGhpcy5jdXJyZW50KVswXSA6IG51bGw7XHJcbn07XHJcblxyXG4vL011dGF0aW9uc1xyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHRoaXMuaXRlbXNbKyt0aGlzLnN0YWNrVG9wXSA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc0luVGVtcGxhdGUoKSlcclxuICAgICAgICB0aGlzLnRtcGxDb3VudCsrO1xyXG5cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AtLTtcclxuXHJcbiAgICBpZiAodGhpcy50bXBsQ291bnQgPiAwICYmIHRoaXMuX2lzSW5UZW1wbGF0ZSgpKVxyXG4gICAgICAgIHRoaXMudG1wbENvdW50LS07XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiAob2xkRWxlbWVudCwgbmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IHRoaXMuX2luZGV4T2Yob2xkRWxlbWVudCk7XHJcbiAgICB0aGlzLml0ZW1zW2lkeF0gPSBuZXdFbGVtZW50O1xyXG5cclxuICAgIGlmIChpZHggPT09IHRoaXMuc3RhY2tUb3ApXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmluc2VydEFmdGVyID0gZnVuY3Rpb24gKHJlZmVyZW5jZUVsZW1lbnQsIG5ld0VsZW1lbnQpIHtcclxuICAgIHZhciBpbnNlcnRpb25JZHggPSB0aGlzLl9pbmRleE9mKHJlZmVyZW5jZUVsZW1lbnQpICsgMTtcclxuXHJcbiAgICB0aGlzLml0ZW1zLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld0VsZW1lbnQpO1xyXG5cclxuICAgIGlmIChpbnNlcnRpb25JZHggPT0gKyt0aGlzLnN0YWNrVG9wKVxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRhZ05hbWVQb3BwZWQgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWU7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWUsXHJcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsRWxlbWVudFBvcHBlZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHBvcHBlZEVsZW1lbnQgPSB0aGlzLmN1cnJlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmIChwb3BwZWRFbGVtZW50ID09PSBlbGVtZW50KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsTnVtYmVyZWRIZWFkZXJQb3BwZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy5jdXJyZW50VGFnTmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcEFsbFVwVG9IdG1sRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCByb290IDxodG1sPiBlbGVtZW50IGlzIGFsd2F5cyBmaXJzdCBpbiB0aGUgb3BlbiBlbGVtZW50IHN0YWNrLCBzb1xyXG4gICAgLy93ZSBwZXJmb3JtIHRoaXMgZmFzdCBzdGFjayBjbGVhbiB1cC5cclxuICAgIHRoaXMuc3RhY2tUb3AgPSAwO1xyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEFCTEUgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URU1QTEFURSAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRCT0RZICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEZPT1QgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRIRUFEICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEVNUExBVEUgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpIHtcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5UUiAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuSFRNTClcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YWNrVG9wLS07XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8vU2VhcmNoXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLy9Qcm9wZXJseSBuZXN0ZWQgPGJvZHk+IGVsZW1lbnQgKHNob3VsZCBiZSBzZWNvbmQgZWxlbWVudCBpbiBzdGFjaykuXHJcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuaXRlbXNbMV07XHJcbiAgICByZXR1cm4gZWxlbWVudCAmJiB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09ICQuQk9EWSA/IGVsZW1lbnQgOiBudWxsO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGV4T2YoZWxlbWVudCkgPiAtMTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmdldENvbW1vbkFuY2VzdG9yID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHZhciBlbGVtZW50SWR4ID0gdGhpcy5faW5kZXhPZihlbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gLS1lbGVtZW50SWR4ID49IDAgPyB0aGlzLml0ZW1zW2VsZW1lbnRJZHhdIDogbnVsbDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YWNrVG9wID09PSAwICYmIHRoaXMuY3VycmVudFRhZ05hbWUgPT09ICQuSFRNTDtcclxufTtcclxuXHJcbi8vRWxlbWVudCBpbiBzY29wZVxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmIChpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc051bWJlcmVkSGVhZGVySW5TY29wZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGlzU2NvcGluZ0VsZW1lbnQodG4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5MaXN0SXRlbVNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgoKHRuID09PSAkLlVMIHx8IHRuID09PSAkLk9MKSAmJiBucyA9PT0gTlMuSFRNTCkgfHwgaXNTY29waW5nRWxlbWVudCh0biwgbnMpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJbkJ1dHRvblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgodG4gPT09ICQuQlVUVE9OICYmIG5zID09PSBOUy5IVE1MKSB8fCBpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc0luVGFibGVTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAoKHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLkhUTUwpICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVEZPT1QpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKCh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5IVE1MKSAmJiBucyA9PT0gTlMuSFRNTClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5TZWxlY3RTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gIT09ICQuT1BUSU9OICYmIHRuICE9PSAkLk9QVEdST1VQICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vL0ltcGxpZWQgZW5kIHRhZ3NcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlIChpc0ltcGxpZWRFbmRUYWdSZXF1aXJlZCh0aGlzLmN1cnJlbnRUYWdOYW1lKSlcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24gPSBmdW5jdGlvbiAoZXhjbHVzaW9uVGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRoaXMuY3VycmVudFRhZ05hbWUpICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09IGV4Y2x1c2lvblRhZ05hbWUpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcclxuICAgIE9wZW5FbGVtZW50U3RhY2sgPSByZXF1aXJlKCcuL29wZW5fZWxlbWVudF9zdGFjaycpLFxyXG4gICAgRm9ybWF0dGluZ0VsZW1lbnRMaXN0ID0gcmVxdWlyZSgnLi9mb3JtYXR0aW5nX2VsZW1lbnRfbGlzdCcpLFxyXG4gICAgTG9jYXRpb25JbmZvTWl4aW4gPSByZXF1aXJlKCcuL2xvY2F0aW9uX2luZm9fbWl4aW4nKSxcclxuICAgIERlZmF1bHRUcmVlQWRhcHRlciA9IHJlcXVpcmUoJy4uL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxyXG4gICAgRG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyksXHJcbiAgICBGb3JlaWduQ29udGVudCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9mb3JlaWduX2NvbnRlbnQnKSxcclxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyksXHJcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcclxuICAgIEhUTUwgPSByZXF1aXJlKCcuLi9jb21tb24vaHRtbCcpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gSFRNTC5UQUdfTkFNRVMsXHJcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUyxcclxuICAgIEFUVFJTID0gSFRNTC5BVFRSUztcclxuXHJcbi8vRGVmYXVsdCBvcHRpb25zXHJcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XHJcbiAgICBkZWNvZGVIdG1sRW50aXRpZXM6IHRydWUsXHJcbiAgICBsb2NhdGlvbkluZm86IGZhbHNlXHJcbn07XHJcblxyXG4vL01pc2MgY29uc3RhbnRzXHJcbnZhciBTRUFSQ0hBQkxFX0lOREVYX0RFRkFVTFRfUFJPTVBUID0gJ1RoaXMgaXMgYSBzZWFyY2hhYmxlIGluZGV4LiBFbnRlciBzZWFyY2gga2V5d29yZHM6ICcsXHJcbiAgICBTRUFSQ0hBQkxFX0lOREVYX0lOUFVUX05BTUUgPSAnaXNpbmRleCcsXHJcbiAgICBISURERU5fSU5QVVRfVFlQRSA9ICdoaWRkZW4nO1xyXG5cclxuLy9BZG9wdGlvbiBhZ2VuY3kgbG9vcHMgaXRlcmF0aW9uIGNvdW50XHJcbnZhciBBQV9PVVRFUl9MT09QX0lURVIgPSA4LFxyXG4gICAgQUFfSU5ORVJfTE9PUF9JVEVSID0gMztcclxuXHJcbi8vSW5zZXJ0aW9uIG1vZGVzXHJcbnZhciBJTklUSUFMX01PREUgPSAnSU5JVElBTF9NT0RFJyxcclxuICAgIEJFRk9SRV9IVE1MX01PREUgPSAnQkVGT1JFX0hUTUxfTU9ERScsXHJcbiAgICBCRUZPUkVfSEVBRF9NT0RFID0gJ0JFRk9SRV9IRUFEX01PREUnLFxyXG4gICAgSU5fSEVBRF9NT0RFID0gJ0lOX0hFQURfTU9ERScsXHJcbiAgICBBRlRFUl9IRUFEX01PREUgPSAnQUZURVJfSEVBRF9NT0RFJyxcclxuICAgIElOX0JPRFlfTU9ERSA9ICdJTl9CT0RZX01PREUnLFxyXG4gICAgVEVYVF9NT0RFID0gJ1RFWFRfTU9ERScsXHJcbiAgICBJTl9UQUJMRV9NT0RFID0gJ0lOX1RBQkxFX01PREUnLFxyXG4gICAgSU5fVEFCTEVfVEVYVF9NT0RFID0gJ0lOX1RBQkxFX1RFWFRfTU9ERScsXHJcbiAgICBJTl9DQVBUSU9OX01PREUgPSAnSU5fQ0FQVElPTl9NT0RFJyxcclxuICAgIElOX0NPTFVNTl9HUk9VUF9NT0RFID0gJ0lOX0NPTFVNTl9HUk9VUF9NT0RFJyxcclxuICAgIElOX1RBQkxFX0JPRFlfTU9ERSA9ICdJTl9UQUJMRV9CT0RZX01PREUnLFxyXG4gICAgSU5fUk9XX01PREUgPSAnSU5fUk9XX01PREUnLFxyXG4gICAgSU5fQ0VMTF9NT0RFID0gJ0lOX0NFTExfTU9ERScsXHJcbiAgICBJTl9TRUxFQ1RfTU9ERSA9ICdJTl9TRUxFQ1RfTU9ERScsXHJcbiAgICBJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERSA9ICdJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERScsXHJcbiAgICBJTl9URU1QTEFURV9NT0RFID0gJ0lOX1RFTVBMQVRFX01PREUnLFxyXG4gICAgQUZURVJfQk9EWV9NT0RFID0gJ0FGVEVSX0JPRFlfTU9ERScsXHJcbiAgICBJTl9GUkFNRVNFVF9NT0RFID0gJ0lOX0ZSQU1FU0VUX01PREUnLFxyXG4gICAgQUZURVJfRlJBTUVTRVRfTU9ERSA9ICdBRlRFUl9GUkFNRVNFVF9NT0RFJyxcclxuICAgIEFGVEVSX0FGVEVSX0JPRFlfTU9ERSA9ICdBRlRFUl9BRlRFUl9CT0RZX01PREUnLFxyXG4gICAgQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERSA9ICdBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFJztcclxuXHJcbi8vSW5zZXJ0aW9uIG1vZGUgcmVzZXQgbWFwXHJcbnZhciBJTlNFUlRJT05fTU9ERV9SRVNFVF9NQVAgPSB7fTtcclxuXHJcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRSXSA9IElOX1JPV19NT0RFO1xyXG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5UQk9EWV0gPVxyXG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5USEVBRF0gPVxyXG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5URk9PVF0gPSBJTl9UQUJMRV9CT0RZX01PREU7XHJcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkNBUFRJT05dID0gSU5fQ0FQVElPTl9NT0RFO1xyXG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5DT0xHUk9VUF0gPSBJTl9DT0xVTU5fR1JPVVBfTU9ERTtcclxuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEFCTEVdID0gSU5fVEFCTEVfTU9ERTtcclxuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuQk9EWV0gPSBJTl9CT0RZX01PREU7XHJcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkZSQU1FU0VUXSA9IElOX0ZSQU1FU0VUX01PREU7XHJcblxyXG4vL1RlbXBsYXRlIGluc2VydGlvbiBtb2RlIHN3aXRjaCBtYXBcclxudmFyIFRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVAgPSB7fTtcclxuXHJcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5DQVBUSU9OXSA9XHJcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5DT0xHUk9VUF0gPVxyXG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVEJPRFldID1cclxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRGT09UXSA9XHJcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5USEVBRF0gPSBJTl9UQUJMRV9NT0RFO1xyXG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ09MXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xyXG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVFJdID0gSU5fVEFCTEVfQk9EWV9NT0RFO1xyXG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVERdID1cclxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIXSA9IElOX1JPV19NT0RFO1xyXG5cclxuLy9Ub2tlbiBoYW5kbGVycyBtYXAgZm9yIGluc2VydGlvbiBtb2Rlc1xyXG52YXIgXyA9IHt9O1xyXG5cclxuX1tJTklUSUFMX01PREVdID0ge307XHJcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5JbkluaXRpYWxNb2RlO1xyXG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcclxuX1tJTklUSUFMX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGRvY3R5cGVJbkluaXRpYWxNb2RlO1xyXG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPVxyXG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID1cclxuX1tJTklUSUFMX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gdG9rZW5JbkluaXRpYWxNb2RlO1xyXG5cclxuX1tCRUZPUkVfSFRNTF9NT0RFXSA9IHt9O1xyXG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cclxuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5CZWZvcmVIdG1sO1xyXG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdCZWZvcmVIdG1sO1xyXG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0JlZm9yZUh0bWw7XHJcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSB0b2tlbkJlZm9yZUh0bWw7XHJcblxyXG5fW0JFRk9SRV9IRUFEX01PREVdID0ge307XHJcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUhlYWQ7XHJcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0JlZm9yZUhlYWQ7XHJcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQmVmb3JlSGVhZDtcclxuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSGVhZDtcclxuXHJcbl9bSU5fSEVBRF9NT0RFXSA9IHt9O1xyXG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuSW5IZWFkO1xyXG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XHJcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5IZWFkO1xyXG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5IZWFkO1xyXG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSB0b2tlbkluSGVhZDtcclxuXHJcbl9bQUZURVJfSEVBRF9NT0RFXSA9IHt9O1xyXG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuQWZ0ZXJIZWFkO1xyXG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XHJcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJIZWFkO1xyXG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQWZ0ZXJIZWFkO1xyXG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSB0b2tlbkFmdGVySGVhZDtcclxuXHJcbl9bSU5fQk9EWV9NT0RFXSA9IHt9O1xyXG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJbkJvZHk7XHJcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcclxuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkJvZHk7XHJcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJbkJvZHk7XHJcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcclxuXHJcbl9bVEVYVF9NT0RFXSA9IHt9O1xyXG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcclxuX1tURVhUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9XHJcbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPVxyXG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tURVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luVGV4dDtcclxuX1tURVhUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5UZXh0O1xyXG5cclxuX1tJTl9UQUJMRV9NT0RFXSA9IHt9O1xyXG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cclxuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID1cclxuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5UYWJsZTtcclxuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRhYmxlO1xyXG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luVGFibGU7XHJcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XHJcblxyXG5fW0lOX1RBQkxFX1RFWFRfTU9ERV0gPSB7fTtcclxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5UYWJsZVRleHQ7XHJcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluVGFibGVUZXh0O1xyXG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID1cclxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9XHJcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9XHJcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPVxyXG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSB0b2tlbkluVGFibGVUZXh0O1xyXG5cclxuX1tJTl9DQVBUSU9OX01PREVdID0ge307XHJcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcclxuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xyXG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcclxuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luQ2FwdGlvbjtcclxuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQ2FwdGlvbjtcclxuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xyXG5cclxuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV0gPSB7fTtcclxuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5JbkNvbHVtbkdyb3VwO1xyXG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcclxuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcclxuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkNvbHVtbkdyb3VwO1xyXG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJbkNvbHVtbkdyb3VwO1xyXG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcclxuXHJcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXSA9IHt9O1xyXG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5UYWJsZTtcclxuX1tJTl9UQUJMRV9CT0RZX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9UQUJMRV9CT0RZX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRhYmxlQm9keTtcclxuX1tJTl9UQUJMRV9CT0RZX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luVGFibGVCb2R5O1xyXG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XHJcblxyXG5fW0lOX1JPV19NT0RFXSA9IHt9O1xyXG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5UYWJsZTtcclxuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcclxuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblJvdztcclxuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Sb3c7XHJcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xyXG5cclxuX1tJTl9DRUxMX01PREVdID0ge307XHJcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcclxuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xyXG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcclxuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luQ2VsbDtcclxuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQ2VsbDtcclxuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xyXG5cclxuX1tJTl9TRUxFQ1RfTU9ERV0gPSB7fTtcclxuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xyXG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xyXG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luU2VsZWN0O1xyXG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblNlbGVjdDtcclxuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XHJcblxyXG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXSA9IHt9O1xyXG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XHJcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XHJcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5TZWxlY3RJblRhYmxlO1xyXG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblNlbGVjdEluVGFibGU7XHJcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xyXG5cclxuX1tJTl9URU1QTEFURV9NT0RFXSA9IHt9O1xyXG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5Cb2R5O1xyXG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcclxuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRlbXBsYXRlO1xyXG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luVGVtcGxhdGU7XHJcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJblRlbXBsYXRlO1xyXG5cclxuX1tBRlRFUl9CT0RZX01PREVdID0ge307XHJcbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckJvZHk7XHJcbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcclxuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnRUb1Jvb3RIdG1sRWxlbWVudDtcclxuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0FmdGVyQm9keTtcclxuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0FmdGVyQm9keTtcclxuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XHJcblxyXG5fW0lOX0ZSQU1FU0VUX01PREVdID0ge307XHJcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcclxuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkZyYW1lc2V0O1xyXG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luRnJhbWVzZXQ7XHJcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBzdG9wUGFyc2luZztcclxuXHJcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV0gPSB7fTtcclxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xyXG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0FmdGVyRnJhbWVzZXQ7XHJcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQWZ0ZXJGcmFtZXNldDtcclxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHN0b3BQYXJzaW5nO1xyXG5cclxuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdID0ge307XHJcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuQWZ0ZXJBZnRlckJvZHk7XHJcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcclxuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xyXG5fW0FGVEVSX0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQ7XHJcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdBZnRlckFmdGVyQm9keTtcclxuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IHRva2VuQWZ0ZXJBZnRlckJvZHk7XHJcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHN0b3BQYXJzaW5nO1xyXG5cclxuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXSA9IHt9O1xyXG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cclxuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XHJcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQ7XHJcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0FmdGVyQWZ0ZXJGcmFtZXNldDtcclxuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHN0b3BQYXJzaW5nO1xyXG5cclxuLy9TZWFyY2hhYmxlIGluZGV4IGJ1aWxkaW5nIHV0aWxzICg8aXNpbmRleD4gdGFnKVxyXG5mdW5jdGlvbiBnZXRTZWFyY2hhYmxlSW5kZXhGb3JtQXR0cnMoaXNpbmRleFN0YXJ0VGFnVG9rZW4pIHtcclxuICAgIHZhciBpbmRleEFjdGlvbiA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIoaXNpbmRleFN0YXJ0VGFnVG9rZW4sIEFUVFJTLkFDVElPTiksXHJcbiAgICAgICAgYXR0cnMgPSBbXTtcclxuXHJcbiAgICBpZiAoaW5kZXhBY3Rpb24gIT09IG51bGwpIHtcclxuICAgICAgICBhdHRycy5wdXNoKHtcclxuICAgICAgICAgICAgbmFtZTogQVRUUlMuQUNUSU9OLFxyXG4gICAgICAgICAgICB2YWx1ZTogaW5kZXhBY3Rpb25cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXR0cnM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleExhYmVsVGV4dChpc2luZGV4U3RhcnRUYWdUb2tlbikge1xyXG4gICAgdmFyIGluZGV4UHJvbXB0ID0gVG9rZW5pemVyLmdldFRva2VuQXR0cihpc2luZGV4U3RhcnRUYWdUb2tlbiwgQVRUUlMuUFJPTVBUKTtcclxuXHJcbiAgICByZXR1cm4gaW5kZXhQcm9tcHQgPT09IG51bGwgPyBTRUFSQ0hBQkxFX0lOREVYX0RFRkFVTFRfUFJPTVBUIDogaW5kZXhQcm9tcHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleElucHV0QXR0cnMoaXNpbmRleFN0YXJ0VGFnVG9rZW4pIHtcclxuICAgIHZhciBpc2luZGV4QXR0cnMgPSBpc2luZGV4U3RhcnRUYWdUb2tlbi5hdHRycyxcclxuICAgICAgICBpbnB1dEF0dHJzID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpc2luZGV4QXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbmFtZSA9IGlzaW5kZXhBdHRyc1tpXS5uYW1lO1xyXG5cclxuICAgICAgICBpZiAobmFtZSAhPT0gQVRUUlMuTkFNRSAmJiBuYW1lICE9PSBBVFRSUy5BQ1RJT04gJiYgbmFtZSAhPT0gQVRUUlMuUFJPTVBUKVxyXG4gICAgICAgICAgICBpbnB1dEF0dHJzLnB1c2goaXNpbmRleEF0dHJzW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnB1dEF0dHJzLnB1c2goe1xyXG4gICAgICAgIG5hbWU6IEFUVFJTLk5BTUUsXHJcbiAgICAgICAgdmFsdWU6IFNFQVJDSEFCTEVfSU5ERVhfSU5QVVRfTkFNRVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGlucHV0QXR0cnM7XHJcbn1cclxuXHJcbi8vUGFyc2VyXHJcbnZhciBQYXJzZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0cmVlQWRhcHRlciwgb3B0aW9ucykge1xyXG4gICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyIHx8IERlZmF1bHRUcmVlQWRhcHRlcjtcclxuICAgIHRoaXMub3B0aW9ucyA9IFV0aWxzLm1lcmdlT3B0aW9ucyhERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5zY3JpcHRIYW5kbGVyID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9uSW5mbylcclxuICAgICAgICBMb2NhdGlvbkluZm9NaXhpbi5hc3NpZ24odGhpcyk7XHJcbn07XHJcblxyXG4vL0FQSVxyXG5QYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgIHZhciBkb2N1bWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnQoKTtcclxuXHJcbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudCwgbnVsbCk7XHJcbiAgICB0aGlzLl9ydW5QYXJzaW5nTG9vcCgpO1xyXG5cclxuICAgIHJldHVybiBkb2N1bWVudDtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUucGFyc2VGcmFnbWVudCA9IGZ1bmN0aW9uIChodG1sLCBmcmFnbWVudENvbnRleHQpIHtcclxuICAgIC8vTk9URTogdXNlIDx0ZW1wbGF0ZT4gZWxlbWVudCBhcyBhIGZyYWdtZW50IGNvbnRleHQgaWYgY29udGV4dCBlbGVtZW50IHdhcyBub3QgcHJvdmlkZWQsXHJcbiAgICAvL3NvIHdlIHdpbGwgcGFyc2UgaW4gXCJmb3JnaXZpbmdcIiBtYW5uZXJcclxuICAgIGlmICghZnJhZ21lbnRDb250ZXh0KVxyXG4gICAgICAgIGZyYWdtZW50Q29udGV4dCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCgkLlRFTVBMQVRFLCBOUy5IVE1MLCBbXSk7XHJcblxyXG4gICAgLy9OT1RFOiBjcmVhdGUgZmFrZSBlbGVtZW50IHdoaWNoIHdpbGwgYmUgdXNlZCBhcyAnZG9jdW1lbnQnIGZvciBmcmFnbWVudCBwYXJzaW5nLlxyXG4gICAgLy9UaGlzIGlzIGltcG9ydGFudCBmb3IganNkb20gdGhlcmUgJ2RvY3VtZW50JyBjYW4ndCBiZSByZWNyZWF0ZWQsIHRoZXJlZm9yZVxyXG4gICAgLy9mcmFnbWVudCBwYXJzaW5nIGNhdXNlcyBtZXNzaW5nIG9mIHRoZSBtYWluIGBkb2N1bWVudGAuXHJcbiAgICB2YXIgZG9jdW1lbnRNb2NrID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KCdkb2N1bWVudG1vY2snLCBOUy5IVE1MLCBbXSk7XHJcblxyXG4gICAgdGhpcy5fcmVzZXQoaHRtbCwgZG9jdW1lbnRNb2NrLCBmcmFnbWVudENvbnRleHQpO1xyXG5cclxuICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZnJhZ21lbnRDb250ZXh0KSA9PT0gJC5URU1QTEFURSlcclxuICAgICAgICB0aGlzLl9wdXNoVG1wbEluc2VydGlvbk1vZGUoSU5fVEVNUExBVEVfTU9ERSk7XHJcblxyXG4gICAgdGhpcy5faW5pdFRva2VuaXplckZvckZyYWdtZW50UGFyc2luZygpO1xyXG4gICAgdGhpcy5faW5zZXJ0RmFrZVJvb3RFbGVtZW50KCk7XHJcbiAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGUoKTtcclxuICAgIHRoaXMuX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQoKTtcclxuICAgIHRoaXMuX3J1blBhcnNpbmdMb29wKCk7XHJcblxyXG4gICAgdmFyIHJvb3RFbGVtZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKGRvY3VtZW50TW9jayksXHJcbiAgICAgICAgZnJhZ21lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcclxuXHJcbiAgICB0aGlzLl9hZG9wdE5vZGVzKHJvb3RFbGVtZW50LCBmcmFnbWVudCk7XHJcblxyXG4gICAgcmV0dXJuIGZyYWdtZW50O1xyXG59O1xyXG5cclxuLy9SZXNldCBzdGF0ZVxyXG5QYXJzZXIucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uIChodG1sLCBkb2N1bWVudCwgZnJhZ21lbnRDb250ZXh0KSB7XHJcbiAgICB0aGlzLnRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoaHRtbCwgdGhpcy5vcHRpb25zKTtcclxuXHJcbiAgICB0aGlzLnN0b3BwZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTklUSUFMX01PREU7XHJcbiAgICB0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcclxuICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0ID0gZnJhZ21lbnRDb250ZXh0O1xyXG5cclxuICAgIHRoaXMuaGVhZEVsZW1lbnQgPSBudWxsO1xyXG4gICAgdGhpcy5mb3JtRWxlbWVudCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5vcGVuRWxlbWVudHMgPSBuZXcgT3BlbkVsZW1lbnRTdGFjayh0aGlzLmRvY3VtZW50LCB0aGlzLnRyZWVBZGFwdGVyKTtcclxuICAgIHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzID0gbmV3IEZvcm1hdHRpbmdFbGVtZW50TGlzdCh0aGlzLnRyZWVBZGFwdGVyKTtcclxuXHJcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sgPSBbXTtcclxuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcCA9IC0xO1xyXG4gICAgdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGUgPSBudWxsO1xyXG5cclxuICAgIHRoaXMucGVuZGluZ0NoYXJhY3RlclRva2VucyA9IFtdO1xyXG4gICAgdGhpcy5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5mcmFtZXNldE9rID0gdHJ1ZTtcclxuICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XHJcbiAgICB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSBmYWxzZTtcclxufTtcclxuXHJcbi8vUGFyc2luZyBsb29wXHJcblBhcnNlci5wcm90b3R5cGUuX2l0ZXJhdGVQYXJzaW5nTG9vcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX3NldHVwVG9rZW5pemVyQ0RBVEFNb2RlKCk7XHJcblxyXG4gICAgdmFyIHRva2VuID0gdGhpcy50b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lKSB7XHJcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAmJiB0b2tlbi5jaGFyc1swXSA9PT0gJ1xcbicpIHtcclxuICAgICAgICAgICAgaWYgKHRva2VuLmNoYXJzLmxlbmd0aCA9PT0gMSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHRva2VuLmNoYXJzID0gdG9rZW4uY2hhcnMuc3Vic3RyKDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbikpXHJcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbik7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9ydW5QYXJzaW5nTG9vcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICghdGhpcy5zdG9wcGVkKVxyXG4gICAgICAgIHRoaXMuX2l0ZXJhdGVQYXJzaW5nTG9vcCgpO1xyXG59O1xyXG5cclxuLy9UZXh0IHBhcnNpbmdcclxuUGFyc2VyLnByb3RvdHlwZS5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKTtcclxuXHJcbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gY3VycmVudCAmJiBjdXJyZW50ICE9PSB0aGlzLmRvY3VtZW50ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY3VycmVudCkgIT09IE5TLkhUTUwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIXRoaXMuX2lzSHRtbEludGVncmF0aW9uUG9pbnQoY3VycmVudCkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX3N3aXRjaFRvVGV4dFBhcnNpbmcgPSBmdW5jdGlvbiAoY3VycmVudFRva2VuLCBuZXh0VG9rZW5pemVyU3RhdGUpIHtcclxuICAgIHRoaXMuX2luc2VydEVsZW1lbnQoY3VycmVudFRva2VuLCBOUy5IVE1MKTtcclxuICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gbmV4dFRva2VuaXplclN0YXRlO1xyXG4gICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSB0aGlzLmluc2VydGlvbk1vZGU7XHJcbiAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBURVhUX01PREU7XHJcbn07XHJcblxyXG4vL0ZyYWdtZW50IHBhcnNpbmdcclxuUGFyc2VyLnByb3RvdHlwZS5fZ2V0QWRqdXN0ZWRDdXJyZW50RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA9PT0gMCAmJiB0aGlzLmZyYWdtZW50Q29udGV4dCA/XHJcbiAgICAgICAgICAgdGhpcy5mcmFnbWVudENvbnRleHQgOlxyXG4gICAgICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9maW5kRm9ybUluRnJhZ21lbnRDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG5vZGUgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKSA9PT0gJC5GT1JNKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUVsZW1lbnQgPSBub2RlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG5vZGUgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICB9IHdoaWxlIChub2RlKTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5mcmFnbWVudENvbnRleHQpO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5USVRMRSB8fCB0biA9PT0gJC5URVhUQVJFQSlcclxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJDREFUQTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5TVFlMRSB8fCB0biA9PT0gJC5YTVAgfHwgdG4gPT09ICQuSUZSQU1FIHx8XHJcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0VNQkVEIHx8IHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLk5PU0NSSVBUKSB7XHJcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5SQVdURVhUO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVClcclxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlBMQUlOVEVYVClcclxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcclxufTtcclxuXHJcbi8vVHJlZSBtdXRhdGlvblxyXG5QYXJzZXIucHJvdG90eXBlLl9zZXREb2N1bWVudFR5cGUgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIHRoaXMudHJlZUFkYXB0ZXIuc2V0RG9jdW1lbnRUeXBlKHRoaXMuZG9jdW1lbnQsIHRva2VuLm5hbWUsIHRva2VuLnB1YmxpY0lkLCB0b2tlbi5zeXN0ZW1JZCk7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9hdHRhY2hFbGVtZW50VG9UcmVlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIGlmICh0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpKVxyXG4gICAgICAgIHRoaXMuX2Zvc3RlclBhcmVudEVsZW1lbnQoZWxlbWVudCk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnRUbXBsQ29udGVudCB8fCB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xyXG5cclxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHBhcmVudCwgZWxlbWVudCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9hcHBlbmRFbGVtZW50ID0gZnVuY3Rpb24gKHRva2VuLCBuYW1lc3BhY2VVUkkpIHtcclxuICAgIHZhciBlbGVtZW50ID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgdG9rZW4uYXR0cnMpO1xyXG5cclxuICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCk7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRFbGVtZW50ID0gZnVuY3Rpb24gKHRva2VuLCBuYW1lc3BhY2VVUkkpIHtcclxuICAgIHZhciBlbGVtZW50ID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgdG9rZW4uYXR0cnMpO1xyXG5cclxuICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCk7XHJcbiAgICB0aGlzLm9wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5faW5zZXJ0VGVtcGxhdGUgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIHZhciB0bXBsID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIE5TLkhUTUwsIHRva2VuLmF0dHJzKSxcclxuICAgICAgICBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcblxyXG4gICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZCh0bXBsLCBjb250ZW50KTtcclxuICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUodG1wbCk7XHJcbiAgICB0aGlzLm9wZW5FbGVtZW50cy5wdXNoKHRtcGwpO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5faW5zZXJ0RmFrZVJvb3RFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJC5IVE1MLCBOUy5IVE1MLCBbXSk7XHJcblxyXG4gICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZCh0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50LCBlbGVtZW50KTtcclxuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9hcHBlbmRDb21tZW50Tm9kZSA9IGZ1bmN0aW9uICh0b2tlbiwgcGFyZW50KSB7XHJcbiAgICB2YXIgY29tbWVudE5vZGUgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUNvbW1lbnROb2RlKHRva2VuLmRhdGEpO1xyXG5cclxuICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBjb21tZW50Tm9kZSk7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBpZiAodGhpcy5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24oKSlcclxuICAgICAgICB0aGlzLl9mb3N0ZXJQYXJlbnRUZXh0KHRva2VuLmNoYXJzKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudFRtcGxDb250ZW50IHx8IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dChwYXJlbnQsIHRva2VuLmNoYXJzKTtcclxuICAgIH1cclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2Fkb3B0Tm9kZXMgPSBmdW5jdGlvbiAoZG9ub3IsIHJlY2lwaWVudCkge1xyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEZpcnN0Q2hpbGQoZG9ub3IpO1xyXG5cclxuICAgICAgICBpZiAoIWNoaWxkKVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGNoaWxkKTtcclxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHJlY2lwaWVudCwgY2hpbGQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy9Ub2tlbiBwcm9jZXNzaW5nXHJcblBhcnNlci5wcm90b3R5cGUuX3Nob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIHZhciBjdXJyZW50ID0gdGhpcy5fZ2V0QWRqdXN0ZWRDdXJyZW50RWxlbWVudCgpO1xyXG5cclxuICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50ID09PSB0aGlzLmRvY3VtZW50KVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KTtcclxuXHJcbiAgICBpZiAobnMgPT09IE5TLkhUTUwpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoY3VycmVudCkgPT09ICQuQU5OT1RBVElPTl9YTUwgJiYgbnMgPT09IE5TLk1BVEhNTCAmJlxyXG4gICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gJiYgdG9rZW4udGFnTmFtZSA9PT0gJC5TVkcpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlzQ2hhcmFjdGVyVG9rZW4gPSB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4sXHJcbiAgICAgICAgaXNNYXRoTUxUZXh0U3RhcnRUYWcgPSB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi50YWdOYW1lICE9PSAkLk1HTFlQSCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udGFnTmFtZSAhPT0gJC5NQUxJR05NQVJLO1xyXG5cclxuICAgIGlmICgoaXNNYXRoTUxUZXh0U3RhcnRUYWcgfHwgaXNDaGFyYWN0ZXJUb2tlbikgJiYgdGhpcy5faXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKCh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOIHx8IGlzQ2hhcmFjdGVyVG9rZW4pICYmIHRoaXMuX2lzSHRtbEludGVncmF0aW9uUG9pbnQoY3VycmVudCkpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB0b2tlbi50eXBlICE9PSBUb2tlbml6ZXIuRU9GX1RPS0VOO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc1Rva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBfW3RoaXMuaW5zZXJ0aW9uTW9kZV1bdG9rZW4udHlwZV0odGhpcywgdG9rZW4pO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc1Rva2VuSW5Cb2R5TW9kZSA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgX1tJTl9CT0RZX01PREVdW3Rva2VuLnR5cGVdKHRoaXMsIHRva2VuKTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOKVxyXG4gICAgICAgIGNoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xyXG5cclxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTilcclxuICAgICAgICBudWxsQ2hhcmFjdGVySW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOKVxyXG4gICAgICAgIGluc2VydENoYXJhY3RlcnModGhpcywgdG9rZW4pO1xyXG5cclxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DT01NRU5UX1RPS0VOKVxyXG4gICAgICAgIGFwcGVuZENvbW1lbnQodGhpcywgdG9rZW4pO1xyXG5cclxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4pXHJcbiAgICAgICAgc3RhcnRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTilcclxuICAgICAgICBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMgPSBmdW5jdGlvbiAodGFnTmFtZSwgYXR0cnMpIHtcclxuICAgIHZhciBmYWtlVG9rZW4gPSB0aGlzLnRva2VuaXplci5idWlsZFN0YXJ0VGFnVG9rZW4odGFnTmFtZSk7XHJcblxyXG4gICAgZmFrZVRva2VuLmF0dHJzID0gYXR0cnM7XHJcbiAgICB0aGlzLl9wcm9jZXNzVG9rZW4oZmFrZVRva2VuKTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlU3RhcnRUYWcgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgdmFyIGZha2VUb2tlbiA9IHRoaXMudG9rZW5pemVyLmJ1aWxkU3RhcnRUYWdUb2tlbih0YWdOYW1lKTtcclxuXHJcbiAgICB0aGlzLl9wcm9jZXNzVG9rZW4oZmFrZVRva2VuKTtcclxuICAgIHJldHVybiBmYWtlVG9rZW47XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzRmFrZUVuZFRhZyA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRFbmRUYWdUb2tlbih0YWdOYW1lKTtcclxuXHJcbiAgICB0aGlzLl9wcm9jZXNzVG9rZW4oZmFrZVRva2VuKTtcclxuICAgIHJldHVybiBmYWtlVG9rZW47XHJcbn07XHJcblxyXG4vL0ludGVncmF0aW9uIHBvaW50c1xyXG5QYXJzZXIucHJvdG90eXBlLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSxcclxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBGb3JlaWduQ29udGVudC5pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHRuLCBucyk7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9pc0h0bWxJbnRlZ3JhdGlvblBvaW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSxcclxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpLFxyXG4gICAgICAgIGF0dHJzID0gdGhpcy50cmVlQWRhcHRlci5nZXRBdHRyTGlzdChlbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gRm9yZWlnbkNvbnRlbnQuaXNIdG1sSW50ZWdyYXRpb25Qb2ludCh0biwgbnMsIGF0dHJzKTtcclxufTtcclxuXHJcbi8vQWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVudHMgcmVjb25zdHJ1Y3Rpb25cclxuUGFyc2VyLnByb3RvdHlwZS5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbGlzdExlbmd0aCA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmxlbmd0aDtcclxuXHJcbiAgICBpZiAobGlzdExlbmd0aCkge1xyXG4gICAgICAgIHZhciB1bm9wZW5JZHggPSBsaXN0TGVuZ3RoLFxyXG4gICAgICAgICAgICBlbnRyeSA9IG51bGw7XHJcblxyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgdW5vcGVuSWR4LS07XHJcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZW50cmllc1t1bm9wZW5JZHhdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkgfHwgdGhpcy5vcGVuRWxlbWVudHMuY29udGFpbnMoZW50cnkuZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIHVub3BlbklkeCsrO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlICh1bm9wZW5JZHggPiAwKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHVub3BlbklkeDsgaSA8IGxpc3RMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmVudHJpZXNbaV07XHJcbiAgICAgICAgICAgIHRoaXMuX2luc2VydEVsZW1lbnQoZW50cnkudG9rZW4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVudHJ5LmVsZW1lbnQpKTtcclxuICAgICAgICAgICAgZW50cnkuZWxlbWVudCA9IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLy9DbG9zZSBlbGVtZW50c1xyXG5QYXJzZXIucHJvdG90eXBlLl9jbG9zZVRhYmxlQ2VsbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5URCkpXHJcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5URCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVEgpO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fY2xvc2VQRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuUCk7XHJcbiAgICB0aGlzLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5QKTtcclxufTtcclxuXHJcbi8vSW5zZXJ0aW9uIG1vZGVzXHJcblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCwgbGFzdCA9IGZhbHNlOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV07XHJcblxyXG4gICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgIGxhc3QgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KVxyXG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMuZnJhZ21lbnRDb250ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxyXG4gICAgICAgICAgICBuZXdJbnNlcnRpb25Nb2RlID0gSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQW3RuXTtcclxuXHJcbiAgICAgICAgaWYgKG5ld0luc2VydGlvbk1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gbmV3SW5zZXJ0aW9uTW9kZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICghbGFzdCAmJiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOX0NFTExfTU9ERTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICghbGFzdCAmJiB0biA9PT0gJC5IRUFEKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOX0hFQURfTU9ERTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TRUxFQ1QpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0KGkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IHRoaXMuY3VycmVudFRtcGxJbnNlcnRpb25Nb2RlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhUTUwpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gdGhpcy5oZWFkRWxlbWVudCA/IEFGVEVSX0hFQURfTU9ERSA6IEJFRk9SRV9IRUFEX01PREU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAobGFzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZUZvclNlbGVjdCA9IGZ1bmN0aW9uIChzZWxlY3RJZHgpIHtcclxuICAgIGlmIChzZWxlY3RJZHggPiAwKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHNlbGVjdElkeCAtIDE7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV0sXHJcbiAgICAgICAgICAgICAgICB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShhbmNlc3Rvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9TRUxFQ1RfTU9ERTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX3B1c2hUbXBsSW5zZXJ0aW9uTW9kZSA9IGZ1bmN0aW9uIChtb2RlKSB7XHJcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sucHVzaChtb2RlKTtcclxuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcCsrO1xyXG4gICAgdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGUgPSBtb2RlO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fcG9wVG1wbEluc2VydGlvbk1vZGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sucG9wKCk7XHJcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AtLTtcclxuICAgIHRoaXMuY3VycmVudFRtcGxJbnNlcnRpb25Nb2RlID0gdGhpcy50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrW3RoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcF07XHJcbn07XHJcblxyXG4vL0Zvc3RlciBwYXJlbnRpbmdcclxuUGFyc2VyLnByb3RvdHlwZS5faXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gdG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUjtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCAmJiB0aGlzLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcodGhpcy5vcGVuRWxlbWVudHMuY3VycmVudCk7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbG9jYXRpb24gPSB7XHJcbiAgICAgICAgcGFyZW50OiBudWxsLFxyXG4gICAgICAgIGJlZm9yZUVsZW1lbnQ6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBvcGVuRWxlbWVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2ldLFxyXG4gICAgICAgICAgICB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShvcGVuRWxlbWVudCksXHJcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkob3BlbkVsZW1lbnQpO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwpIHtcclxuICAgICAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKG9wZW5FbGVtZW50KVswXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSkge1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5wYXJlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFBhcmVudE5vZGUob3BlbkVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxvY2F0aW9uLnBhcmVudClcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQgPSBvcGVuRWxlbWVudDtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaSAtIDFdO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghbG9jYXRpb24ucGFyZW50KVxyXG4gICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zWzBdO1xyXG5cclxuICAgIHJldHVybiBsb2NhdGlvbjtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2Zvc3RlclBhcmVudEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uKCk7XHJcblxyXG4gICAgaWYgKGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpXHJcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5pbnNlcnRCZWZvcmUobG9jYXRpb24ucGFyZW50LCBlbGVtZW50LCBsb2NhdGlvbi5iZWZvcmVFbGVtZW50KTtcclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGxvY2F0aW9uLnBhcmVudCwgZWxlbWVudCk7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9mb3N0ZXJQYXJlbnRUZXh0ID0gZnVuY3Rpb24gKGNoYXJzKSB7XHJcbiAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKTtcclxuXHJcbiAgICBpZiAobG9jYXRpb24uYmVmb3JlRWxlbWVudClcclxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHRCZWZvcmUobG9jYXRpb24ucGFyZW50LCBjaGFycywgbG9jYXRpb24uYmVmb3JlRWxlbWVudCk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5pbnNlcnRUZXh0KGxvY2F0aW9uLnBhcmVudCwgY2hhcnMpO1xyXG59O1xyXG5cclxuLy9TcGVjaWFsIGVsZW1lbnRzXHJcblBhcnNlci5wcm90b3R5cGUuX2lzU3BlY2lhbEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxyXG4gICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZWxlbWVudCk7XHJcblxyXG4gICAgcmV0dXJuIEhUTUwuU1BFQ0lBTF9FTEVNRU5UU1tuc11bdG5dO1xyXG59O1xyXG5cclxuLy9BZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtXHJcbi8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdHJlZS1jb25zdHJ1Y3Rpb24uaHRtbCNhZG9wdGlvbkFnZW5jeSlcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8vU3RlcHMgNS04IG9mIHRoZSBhbGdvcml0aG1cclxuZnVuY3Rpb24gYWFPYnRhaW5Gb3JtYXR0aW5nRWxlbWVudEVudHJ5KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSh0b2tlbi50YWdOYW1lKTtcclxuXHJcbiAgICBpZiAoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSkge1xyXG4gICAgICAgIGlmICghcC5vcGVuRWxlbWVudHMuY29udGFpbnMoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSkge1xyXG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcclxuICAgICAgICAgICAgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICghcC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0b2tlbi50YWdOYW1lKSlcclxuICAgICAgICAgICAgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgIHJldHVybiBmb3JtYXR0aW5nRWxlbWVudEVudHJ5O1xyXG59XHJcblxyXG4vL1N0ZXBzIDkgYW5kIDEwIG9mIHRoZSBhbGdvcml0aG1cclxuZnVuY3Rpb24gYWFPYnRhaW5GdXJ0aGVzdEJsb2NrKHAsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcclxuICAgIHZhciBmdXJ0aGVzdEJsb2NrID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudClcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGlmIChwLl9pc1NwZWNpYWxFbGVtZW50KGVsZW1lbnQpKVxyXG4gICAgICAgICAgICBmdXJ0aGVzdEJsb2NrID0gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZ1cnRoZXN0QmxvY2spIHtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcclxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVydGhlc3RCbG9jaztcclxufVxyXG5cclxuLy9TdGVwIDEzIG9mIHRoZSBhbGdvcml0aG1cclxuZnVuY3Rpb24gYWFJbm5lckxvb3AocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnQpIHtcclxuICAgIHZhciBlbGVtZW50ID0gbnVsbCxcclxuICAgICAgICBsYXN0RWxlbWVudCA9IGZ1cnRoZXN0QmxvY2ssXHJcbiAgICAgICAgbmV4dEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5nZXRDb21tb25BbmNlc3RvcihmdXJ0aGVzdEJsb2NrKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEFBX0lOTkVSX0xPT1BfSVRFUjsgaSsrKSB7XHJcbiAgICAgICAgZWxlbWVudCA9IG5leHRFbGVtZW50O1xyXG5cclxuICAgICAgICAvL05PVEU6IHN0b3JlIG5leHQgZWxlbWVudCBmb3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24gKGl0IG1heSBiZSBkZWxldGVkIGZyb20gdGhlIHN0YWNrIGJ5IHN0ZXAgOS41KVxyXG4gICAgICAgIG5leHRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuZ2V0Q29tbW9uQW5jZXN0b3IoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHZhciBlbGVtZW50RW50cnkgPSBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5nZXRFbGVtZW50RW50cnkoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmICghZWxlbWVudEVudHJ5KSB7XHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShlbGVtZW50KTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gZm9ybWF0dGluZ0VsZW1lbnQpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBlbGVtZW50ID0gYWFSZWNyZWF0ZUVsZW1lbnRGcm9tRW50cnkocCwgZWxlbWVudEVudHJ5KTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RFbGVtZW50ID09PSBmdXJ0aGVzdEJsb2NrKVxyXG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5ib29rbWFyayA9IGVsZW1lbnRFbnRyeTtcclxuXHJcbiAgICAgICAgcC50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGxhc3RFbGVtZW50KTtcclxuICAgICAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGVsZW1lbnQsIGxhc3RFbGVtZW50KTtcclxuICAgICAgICBsYXN0RWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhc3RFbGVtZW50O1xyXG59XHJcblxyXG4vL1N0ZXAgMTMuNyBvZiB0aGUgYWxnb3JpdGhtXHJcbmZ1bmN0aW9uIGFhUmVjcmVhdGVFbGVtZW50RnJvbUVudHJ5KHAsIGVsZW1lbnRFbnRyeSkge1xyXG4gICAgdmFyIG5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZWxlbWVudEVudHJ5LmVsZW1lbnQpLFxyXG4gICAgICAgIG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoZWxlbWVudEVudHJ5LnRva2VuLnRhZ05hbWUsIG5zLCBlbGVtZW50RW50cnkudG9rZW4uYXR0cnMpO1xyXG5cclxuICAgIHAub3BlbkVsZW1lbnRzLnJlcGxhY2UoZWxlbWVudEVudHJ5LmVsZW1lbnQsIG5ld0VsZW1lbnQpO1xyXG4gICAgZWxlbWVudEVudHJ5LmVsZW1lbnQgPSBuZXdFbGVtZW50O1xyXG5cclxuICAgIHJldHVybiBuZXdFbGVtZW50O1xyXG59XHJcblxyXG4vL1N0ZXAgMTQgb2YgdGhlIGFsZ29yaXRobVxyXG5mdW5jdGlvbiBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpIHtcclxuICAgIGlmIChwLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcoY29tbW9uQW5jZXN0b3IpKVxyXG4gICAgICAgIHAuX2Zvc3RlclBhcmVudEVsZW1lbnQobGFzdEVsZW1lbnQpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciB0biA9IHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShjb21tb25BbmNlc3RvciksXHJcbiAgICAgICAgICAgIG5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY29tbW9uQW5jZXN0b3IpO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwpXHJcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKGNvbW1vbkFuY2VzdG9yKVswXTtcclxuXHJcbiAgICAgICAgcC50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vL1N0ZXBzIDE1LTE5IG9mIHRoZSBhbGdvcml0aG1cclxuZnVuY3Rpb24gYWFSZXBsYWNlRm9ybWF0dGluZ0VsZW1lbnQocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSkge1xyXG4gICAgdmFyIG5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSxcclxuICAgICAgICB0b2tlbiA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4sXHJcbiAgICAgICAgbmV3RWxlbWVudCA9IHAudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0b2tlbi50YWdOYW1lLCBucywgdG9rZW4uYXR0cnMpO1xyXG5cclxuICAgIHAuX2Fkb3B0Tm9kZXMoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XHJcbiAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGZ1cnRoZXN0QmxvY2ssIG5ld0VsZW1lbnQpO1xyXG5cclxuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydEVsZW1lbnRBZnRlckJvb2ttYXJrKG5ld0VsZW1lbnQsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4pO1xyXG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XHJcblxyXG4gICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XHJcbiAgICBwLm9wZW5FbGVtZW50cy5pbnNlcnRBZnRlcihmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcclxufVxyXG5cclxuLy9BbGdvcml0aG0gZW50cnkgcG9pbnRcclxuZnVuY3Rpb24gY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEFBX09VVEVSX0xPT1BfSVRFUjsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGZvcm1hdHRpbmdFbGVtZW50RW50cnkgPSBhYU9idGFpbkZvcm1hdHRpbmdFbGVtZW50RW50cnkocCwgdG9rZW4sIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xyXG5cclxuICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50RW50cnkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB2YXIgZnVydGhlc3RCbG9jayA9IGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcclxuXHJcbiAgICAgICAgaWYgKCFmdXJ0aGVzdEJsb2NrKVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuYm9va21hcmsgPSBmb3JtYXR0aW5nRWxlbWVudEVudHJ5O1xyXG5cclxuICAgICAgICB2YXIgbGFzdEVsZW1lbnQgPSBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpLFxyXG4gICAgICAgICAgICBjb21tb25BbmNlc3RvciA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShsYXN0RWxlbWVudCk7XHJcbiAgICAgICAgYWFJbnNlcnRMYXN0Tm9kZUluQ29tbW9uQW5jZXN0b3IocCwgY29tbW9uQW5jZXN0b3IsIGxhc3RFbGVtZW50KTtcclxuICAgICAgICBhYVJlcGxhY2VGb3JtYXR0aW5nRWxlbWVudChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbi8vR2VuZXJpYyB0b2tlbiBoYW5kbGVyc1xyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBpZ25vcmVUb2tlbihwLCB0b2tlbikge1xyXG4gICAgLy9OT1RFOiBkbyBub3RoaW5nID0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwcGVuZENvbW1lbnQocCwgdG9rZW4pIHtcclxuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgcC5vcGVuRWxlbWVudHMuY3VycmVudClcclxufVxyXG5cclxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50KHAsIHRva2VuKSB7XHJcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5vcGVuRWxlbWVudHMuaXRlbXNbMF0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcHBlbmRDb21tZW50VG9Eb2N1bWVudChwLCB0b2tlbikge1xyXG4gICAgcC5fYXBwZW5kQ29tbWVudE5vZGUodG9rZW4sIHAuZG9jdW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnNlcnRDaGFyYWN0ZXJzKHAsIHRva2VuKSB7XHJcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3RvcFBhcnNpbmcocCwgdG9rZW4pIHtcclxuICAgIHAuc3RvcHBlZCA9IHRydWU7XHJcbn1cclxuXHJcbi8vMTIuMi41LjQuMSBUaGUgXCJpbml0aWFsXCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gZG9jdHlwZUluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcclxuICAgIHAuX3NldERvY3VtZW50VHlwZSh0b2tlbik7XHJcblxyXG4gICAgaWYgKHRva2VuLmZvcmNlUXVpcmtzIHx8IERvY3R5cGUuaXNRdWlya3ModG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKSlcclxuICAgICAgICBwLnRyZWVBZGFwdGVyLnNldFF1aXJrc01vZGUocC5kb2N1bWVudCk7XHJcblxyXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hUTUxfTU9ERTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9rZW5JbkluaXRpYWxNb2RlKHAsIHRva2VuKSB7XHJcbiAgICBwLnRyZWVBZGFwdGVyLnNldFF1aXJrc01vZGUocC5kb2N1bWVudCk7XHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBCRUZPUkVfSFRNTF9NT0RFO1xyXG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxufVxyXG5cclxuXHJcbi8vMTIuMi41LjQuMiBUaGUgXCJiZWZvcmUgaHRtbFwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xyXG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTCkge1xyXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IRUFEX01PREU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRva2VuQmVmb3JlSHRtbChwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZFRhZ0JlZm9yZUh0bWwocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkhUTUwgfHwgdG4gPT09ICQuSEVBRCB8fCB0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkJSKVxyXG4gICAgICAgIHRva2VuQmVmb3JlSHRtbChwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRva2VuQmVmb3JlSHRtbChwLCB0b2tlbikge1xyXG4gICAgcC5faW5zZXJ0RmFrZVJvb3RFbGVtZW50KCk7XHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBCRUZPUkVfSEVBRF9NT0RFO1xyXG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxufVxyXG5cclxuXHJcbi8vMTIuMi41LjQuMyBUaGUgXCJiZWZvcmUgaGVhZFwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSGVhZChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuSEVBRCkge1xyXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgICAgIHAuaGVhZEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xyXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0hFQURfTU9ERTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnQmVmb3JlSGVhZChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuSEVBRCB8fCB0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkhUTUwgfHwgdG4gPT09ICQuQlIpXHJcbiAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKSB7XHJcbiAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuSEVBRCk7XHJcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG5cclxuLy8xMi4yLjUuNC40IFRoZSBcImluIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0luSGVhZChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5CR1NPVU5EIHx8XHJcbiAgICAgICAgICAgICB0biA9PT0gJC5DT01NQU5EIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSkge1xyXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRJVExFKVxyXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJDREFUQSk7XHJcblxyXG4gICAgLy9OT1RFOiBoZXJlIHdlIGFzc3VtZSB0aGF0IHdlIGFsd2F5cyBhY3QgYXMgYW4gaW50ZXJhY3RpdmUgdXNlciBhZ2VudCB3aXRoIGVuYWJsZWQgc2NyaXB0aW5nLCBzbyB3ZSBwYXJzZVxyXG4gICAgLy88bm9zY3JpcHQ+IGFzIGEgcmF3dGV4dC5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLk5PU0NSSVBUIHx8IHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLlNUWUxFKVxyXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVClcclxuICAgICAgICBwLl9zd2l0Y2hUb1RleHRQYXJzaW5nKHRva2VuLCBUb2tlbml6ZXIuTU9ERS5TQ1JJUFRfREFUQSk7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpIHtcclxuICAgICAgICBwLl9pbnNlcnRUZW1wbGF0ZSh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XHJcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEVNUExBVEVfTU9ERTtcclxuICAgICAgICBwLl9wdXNoVG1wbEluc2VydGlvbk1vZGUoSU5fVEVNUExBVEVfTU9ERSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcclxuICAgICAgICB0b2tlbkluSGVhZChwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZFRhZ0luSGVhZChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuSEVBRCkge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xyXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0hFQURfTU9ERTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkJSIHx8IHRuID09PSAkLkhUTUwpXHJcbiAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUZW1wbGF0ZVBvcHBlZCgpO1xyXG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XHJcbiAgICAgICAgcC5fcG9wVG1wbEluc2VydGlvbk1vZGUoKTtcclxuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdG9rZW5JbkhlYWQocCwgdG9rZW4pIHtcclxuICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuSEVBRCk7XHJcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG5cclxuLy8xMi4yLjUuNC42IFRoZSBcImFmdGVyIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVySGVhZChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQk9EWSkge1xyXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xyXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0JPRFlfTU9ERTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5GUkFNRVNFVCkge1xyXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0ZSQU1FU0VUX01PREU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5CR1NPVU5EIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSB8fFxyXG4gICAgICAgICAgICAgdG4gPT09ICQuTk9GUkFNRVMgfHwgdG4gPT09ICQuU0NSSVBUIHx8IHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLlRJVExFKSB7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucHVzaChwLmhlYWRFbGVtZW50KTtcclxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKHAuaGVhZEVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkhFQUQpXHJcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRUYWdBZnRlckhlYWQocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5CUilcclxuICAgICAgICB0b2tlbkFmdGVySGVhZChwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXHJcbiAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pIHtcclxuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5CT0RZKTtcclxuICAgIHAuZnJhbWVzZXRPayA9IHRydWU7XHJcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG5cclxuLy8xMi4yLjUuNC43IFRoZSBcImluIGJvZHlcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcclxuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xyXG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGh0bWxTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA9PT0gMClcclxuICAgICAgICBwLnRyZWVBZGFwdGVyLmFkb3B0QXR0cmlidXRlcyhwLm9wZW5FbGVtZW50cy5pdGVtc1swXSwgdG9rZW4uYXR0cnMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBib2R5U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XHJcblxyXG4gICAgaWYgKGJvZHlFbGVtZW50ICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA9PT0gMCkge1xyXG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xyXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYWRvcHRBdHRyaWJ1dGVzKGJvZHlFbGVtZW50LCB0b2tlbi5hdHRycyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZyYW1lc2V0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XHJcblxyXG4gICAgaWYgKHAuZnJhbWVzZXRPayAmJiBib2R5RWxlbWVudCkge1xyXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShib2R5RWxlbWVudCk7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wQWxsVXBUb0h0bWxFbGVtZW50KCk7XHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fRlJBTUVTRVRfTU9ERTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxyXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcclxuXHJcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbnVtYmVyZWRIZWFkZXJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcclxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XHJcblxyXG4gICAgdmFyIHRuID0gcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xyXG5cclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcclxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XHJcblxyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAvL05PVEU6IElmIHRoZSBuZXh0IHRva2VuIGlzIGEgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlciB0b2tlbiwgdGhlbiBpZ25vcmUgdGhhdCB0b2tlbiBhbmQgbW92ZVxyXG4gICAgLy9vbiB0byB0aGUgbmV4dCBvbmUuIChOZXdsaW5lcyBhdCB0aGUgc3RhcnQgb2YgcHJlIGJsb2NrcyBhcmUgaWdub3JlZCBhcyBhbiBhdXRob3JpbmcgY29udmVuaWVuY2UuKVxyXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xyXG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgdmFyIGluVGVtcGxhdGUgPSBwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPiAwO1xyXG5cclxuICAgIGlmICghcC5mb3JtRWxlbWVudCB8fCBpblRlbXBsYXRlKSB7XHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcclxuICAgICAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xyXG5cclxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuXHJcbiAgICAgICAgaWYgKCFpblRlbXBsYXRlKVxyXG4gICAgICAgICAgICBwLmZvcm1FbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbaV0sXHJcbiAgICAgICAgICAgIHRuID0gcC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBpZiAoKHRva2VuLnRhZ05hbWUgPT09ICQuTEkgJiYgdG4gPT09ICQuTEkpIHx8XHJcbiAgICAgICAgICAgICgodG9rZW4udGFnTmFtZSA9PT0gJC5ERCB8fCB0b2tlbi50YWdOYW1lID09PSAkLkRUKSAmJiAodG4gPT09ICQuREQgfHwgdG4gPT0gJC5EVCkpKSB7XHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKHRuKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodG4gIT09ICQuQUREUkVTUyAmJiB0biAhPT0gJC5ESVYgJiYgdG4gIT09ICQuUCAmJiBwLl9pc1NwZWNpYWxFbGVtZW50KGVsZW1lbnQpKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxyXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcclxuXHJcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGxhaW50ZXh0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXHJcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xyXG5cclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgcC50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5QTEFJTlRFWFQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJ1dHRvblN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkJVVFRPTikpIHtcclxuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkJVVFRPTik7XHJcbiAgICAgICAgYnV0dG9uU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgdmFyIGFjdGl2ZUVsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSgkLkEpO1xyXG5cclxuICAgIGlmIChhY3RpdmVFbGVtZW50RW50cnkpIHtcclxuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkEpO1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShhY3RpdmVFbGVtZW50RW50cnkuZWxlbWVudCk7XHJcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoYWN0aXZlRWxlbWVudEVudHJ5KTtcclxuICAgIH1cclxuXHJcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaEVsZW1lbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub2JyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XHJcblxyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5OT0JSKSkge1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuTk9CUik7XHJcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXBwbGV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XHJcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xyXG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRhYmxlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIGlmICghcC50cmVlQWRhcHRlci5pc1F1aXJrc01vZGUocC5kb2N1bWVudCkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxyXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcclxuXHJcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xyXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5wdXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcclxuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG5cclxuICAgIHZhciBpbnB1dFR5cGUgPSBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHRva2VuLCBBVFRSUy5UWVBFKTtcclxuXHJcbiAgICBpZiAoIWlucHV0VHlwZSB8fCBpbnB1dFR5cGUudG9Mb3dlckNhc2UoKSAhPT0gSElEREVOX0lOUFVUX1RZUEUpXHJcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaHJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcclxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XHJcblxyXG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgdG9rZW4udGFnTmFtZSA9ICQuSU1HO1xyXG4gICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNpbmRleFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgfHwgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCkge1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMoJC5GT1JNLCBnZXRTZWFyY2hhYmxlSW5kZXhGb3JtQXR0cnModG9rZW4pKTtcclxuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuSFIpO1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5MQUJFTCk7XHJcbiAgICAgICAgcC50cmVlQWRhcHRlci5pbnNlcnRUZXh0KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIGdldFNlYXJjaGFibGVJbmRleExhYmVsVGV4dCh0b2tlbikpO1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMoJC5JTlBVVCwgZ2V0U2VhcmNoYWJsZUluZGV4SW5wdXRBdHRycyh0b2tlbikpO1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuTEFCRUwpO1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5IUik7XHJcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5GT1JNKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdGV4dGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAvL05PVEU6IElmIHRoZSBuZXh0IHRva2VuIGlzIGEgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlciB0b2tlbiwgdGhlbiBpZ25vcmUgdGhhdCB0b2tlbiBhbmQgbW92ZVxyXG4gICAgLy9vbiB0byB0aGUgbmV4dCBvbmUuIChOZXdsaW5lcyBhdCB0aGUgc3RhcnQgb2YgdGV4dGFyZWEgZWxlbWVudHMgYXJlIGlnbm9yZWQgYXMgYW4gYXV0aG9yaW5nIGNvbnZlbmllbmNlLilcclxuICAgIHAuc2tpcE5leHROZXdMaW5lID0gdHJ1ZTtcclxuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xyXG4gICAgcC5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBwLmluc2VydGlvbk1vZGU7XHJcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IFRFWFRfTU9ERTtcclxufVxyXG5cclxuZnVuY3Rpb24geG1wU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXHJcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xyXG5cclxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XHJcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcbiAgICBwLl9zd2l0Y2hUb1RleHRQYXJzaW5nKHRva2VuLCBUb2tlbml6ZXIuTU9ERS5SQVdURVhUKTtcclxufVxyXG5cclxuLy9OT1RFOiBoZXJlIHdlIGFzc3VtZSB0aGF0IHdlIGFsd2F5cyBhY3QgYXMgYW4gdXNlciBhZ2VudCB3aXRoIGVuYWJsZWQgcGx1Z2lucywgc28gd2UgcGFyc2VcclxuLy88bm9lbWJlZD4gYXMgYSByYXd0ZXh0LlxyXG5mdW5jdGlvbiBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZWxlY3RTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHAuaW5zZXJ0aW9uTW9kZSA9PT0gSU5fVEFCTEVfTU9ERSB8fCBwLmluc2VydGlvbk1vZGUgPT09IElOX0NBUFRJT05fTU9ERSB8fFxyXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9PT0gSU5fVEFCTEVfQk9EWV9NT0RFIHx8IHAuaW5zZXJ0aW9uTW9kZSA9PT0gSU5fUk9XX01PREUgfHxcclxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IElOX0NFTExfTU9ERSkge1xyXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9JTl9UQUJMRV9NT0RFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9TRUxFQ1RfTU9ERTtcclxufVxyXG5cclxuZnVuY3Rpb24gb3B0Z3JvdXBTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcclxuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLk9QVElPTik7XHJcblxyXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBycFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLlJVQlkpKVxyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcclxuXHJcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWVudWl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcclxuXHJcbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlbk1hdGhNTEF0dHJzKHRva2VuKTtcclxuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xyXG5cclxuICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZylcclxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5NQVRITUwpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLk1BVEhNTCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG5cclxuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHQXR0cnModG9rZW4pO1xyXG4gICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5YTUxBdHRycyh0b2tlbik7XHJcblxyXG4gICAgaWYgKHRva2VuLnNlbGZDbG9zaW5nKVxyXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLlNWRyk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuU1ZHKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbn1cclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBJbnRlZ2VyIGNvbXBhcmlzb25zIGFyZSBsb3ctY29zdCwgc28gd2UgY2FuIHVzZSB2ZXJ5IGZhc3QgdGFnIG5hbWUgbGVuZ3RoIGZpbHRlcnMgaGVyZS5cclxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSSB8fCB0biA9PT0gJC5TIHx8IHRuID09PSAkLkIgfHwgdG4gPT09ICQuVSlcclxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkEpXHJcbiAgICAgICAgICAgICAgICBhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5ETCB8fCB0biA9PT0gJC5PTCB8fCB0biA9PT0gJC5VTClcclxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcclxuICAgICAgICAgICAgICAgIG51bWJlcmVkSGVhZGVyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTEkgfHwgdG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXHJcbiAgICAgICAgICAgICAgICBsaXN0SXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNIHx8IHRuID09PSAkLlRUKVxyXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxyXG4gICAgICAgICAgICAgICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhSKVxyXG4gICAgICAgICAgICAgICAgaHJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5SUCB8fCB0biA9PT0gJC5SVClcclxuICAgICAgICAgICAgICAgIHJwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVFIpXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkRJViB8fCB0biA9PT0gJC5ESVIgfHwgdG4gPT09ICQuTkFWKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlBSRSlcclxuICAgICAgICAgICAgICAgIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJJRylcclxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTUcgfHwgdG4gPT09ICQuV0JSKVxyXG4gICAgICAgICAgICAgICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlhNUClcclxuICAgICAgICAgICAgICAgIHhtcFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNWRylcclxuICAgICAgICAgICAgICAgIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkNPTClcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICAgICAgICAgIGh0bWxTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5CQVNFIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSlcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJPRFkpXHJcbiAgICAgICAgICAgICAgICBib2R5U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTUFJTiB8fCB0biA9PT0gJC5NRU5VKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZPUk0pXHJcbiAgICAgICAgICAgICAgICBmb3JtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQ09ERSB8fCB0biA9PT0gJC5GT05UKVxyXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PQlIpXHJcbiAgICAgICAgICAgICAgICBub2JyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVJFQSlcclxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQVRIKVxyXG4gICAgICAgICAgICAgICAgbWF0aFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkhFQUQpXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRJVExFKVxyXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVNJREUpXHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU01BTEwpXHJcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpXHJcbiAgICAgICAgICAgICAgICB0YWJsZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNQkVEKVxyXG4gICAgICAgICAgICAgICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklOUFVUKVxyXG4gICAgICAgICAgICAgICAgaW5wdXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QQVJBTSB8fCB0biA9PT0gJC5UUkFDSylcclxuICAgICAgICAgICAgICAgIHBhcmFtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSU1BR0UpXHJcbiAgICAgICAgICAgICAgICBpbWFnZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkZSQU1FICYmIHRuICE9PSAkLlRCT0RZICYmIHRuICE9PSAkLlRGT09UICYmIHRuICE9PSAkLlRIRUFEKVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5TQ1JJUFQpXHJcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJVVFRPTilcclxuICAgICAgICAgICAgICAgIGJ1dHRvblN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNUUklLRSB8fCB0biA9PT0gJC5TVFJPTkcpXHJcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVBQTEVUIHx8IHRuID09PSAkLk9CSkVDVClcclxuICAgICAgICAgICAgICAgIGFwcGxldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLktFWUdFTilcclxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TT1VSQ0UpXHJcbiAgICAgICAgICAgICAgICBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklGUkFNRSlcclxuICAgICAgICAgICAgICAgIGlmcmFtZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVClcclxuICAgICAgICAgICAgICAgIHNlbGVjdFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTilcclxuICAgICAgICAgICAgICAgIG9wdGdyb3VwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDc6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CR1NPVU5EIHx8IHRuID09PSAkLkNPTU1BTkQpXHJcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5ERVRBSUxTIHx8IHRuID09PSAkLkFERFJFU1MgfHwgdG4gPT09ICQuQVJUSUNMRSB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTElTVElORylcclxuICAgICAgICAgICAgICAgIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXHJcbiAgICAgICAgICAgICAgICBhcHBsZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JU0lOREVYKVxyXG4gICAgICAgICAgICAgICAgaXNpbmRleFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRU1CRUQpXHJcbiAgICAgICAgICAgICAgICBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ0FQVElPTilcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA4OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuTUVOVUlURU0pXHJcbiAgICAgICAgICAgICAgICBtZW51aXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKVxyXG4gICAgICAgICAgICAgICAgZnJhbWVzZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GSUVMRFNFVClcclxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URVhUQVJFQSlcclxuICAgICAgICAgICAgICAgIHRleHRhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXHJcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVClcclxuICAgICAgICAgICAgICAgIG5vZW1iZWRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUClcclxuICAgICAgICAgICAgICAgIG9wdGdyb3VwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ09MR1JPVVApXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgOTpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlBMQUlOVEVYVClcclxuICAgICAgICAgICAgICAgIHBsYWludGV4dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAxMDpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJMT0NLUVVPVEUgfHwgdG4gPT09ICQuRklHQ0FQVElPTilcclxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJvZHlFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQk9EWSkpXHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfQk9EWV9NT0RFO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaHRtbEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQk9EWSk7XHJcblxyXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcclxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRuKSkge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgaW5UZW1wbGF0ZSA9IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDAsXHJcbiAgICAgICAgZm9ybUVsZW1lbnQgPSBwLmZvcm1FbGVtZW50O1xyXG5cclxuICAgIGlmICghaW5UZW1wbGF0ZSlcclxuICAgICAgICBwLmZvcm1FbGVtZW50ID0gbnVsbDtcclxuXHJcbiAgICBpZiAoKGZvcm1FbGVtZW50IHx8IGluVGVtcGxhdGUpICYmIHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5GT1JNKSkge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcclxuXHJcbiAgICAgICAgaWYgKGluVGVtcGxhdGUpXHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkZPUk0pO1xyXG5cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtRWxlbWVudCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5QKTtcclxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBsaUVuZFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luTGlzdEl0ZW1TY29wZSgkLkxJKSkge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuTEkpO1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkxJKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZGRFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG4pKSB7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG51bWJlcmVkSGVhZGVyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkpIHtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxOdW1iZXJlZEhlYWRlclBvcHBlZCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBhcHBsZXRFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG4pKSB7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XHJcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYnJFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5CUik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID4gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gdG4pIHtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHAuX2lzU3BlY2lhbEVsZW1lbnQoZWxlbWVudCkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59XHJcblxyXG4vL09QVElNSVpBVElPTjogSW50ZWdlciBjb21wYXJpc29ucyBhcmUgbG93LWNvc3QsIHNvIHdlIGNhbiB1c2UgdmVyeSBmYXN0IHRhZyBuYW1lIGxlbmd0aCBmaWx0ZXJzIGhlcmUuXHJcbi8vSXQncyBmYXN0ZXIgdGhhbiB1c2luZyBkaWN0aW9uYXJ5LlxyXG5mdW5jdGlvbiBlbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgc3dpdGNoICh0bi5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5BIHx8IHRuID09PSAkLkIgfHwgdG4gPT09ICQuSSB8fCB0biA9PT0gJC5TIHx8IHRuID09ICQuVSlcclxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QKVxyXG4gICAgICAgICAgICAgICAgcEVuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIGlmICh0biA9PSAkLkRMIHx8IHRuID09PSAkLlVMIHx8IHRuID09PSAkLk9MKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5MSSlcclxuICAgICAgICAgICAgICAgIGxpRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkREIHx8IHRuID09PSAkLkRUKVxyXG4gICAgICAgICAgICAgICAgZGRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpXHJcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlckVuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5CUilcclxuICAgICAgICAgICAgICAgIGJyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNIHx8IHRuID09PSAkLlRUKVxyXG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJJRylcclxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5ESVIgfHwgdG4gPT09ICQuRElWIHx8IHRuID09PSAkLk5BVilcclxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQk9EWSlcclxuICAgICAgICAgICAgICAgIGJvZHlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICAgICAgICAgIGh0bWxFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRk9STSlcclxuICAgICAgICAgICAgICAgIGZvcm1FbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQ09ERSB8fCB0biA9PT0gJC5GT05UIHx8IHRuID09PSAkLk5PQlIpXHJcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTUFJTiB8fCB0biA9PT0gJC5NRU5VKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5BU0lERSlcclxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU01BTEwpXHJcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQ0VOVEVSIHx8IHRuID09PSAkLkZJR1VSRSB8fCB0biA9PT0gJC5GT09URVIgfHwgdG4gPT09ICQuSEVBREVSIHx8IHRuID09PSAkLkhHUk9VUClcclxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVBQTEVUIHx8IHRuID09PSAkLk9CSkVDVClcclxuICAgICAgICAgICAgICAgIGFwcGxldEVuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PSAkLlNUUklLRSB8fCB0biA9PT0gJC5TVFJPTkcpXHJcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQUREUkVTUyB8fCB0biA9PT0gJC5BUlRJQ0xFIHx8IHRuID09PSAkLkRFVEFJTFMgfHwgdG4gPT09ICQuU0VDVElPTiB8fCB0biA9PT0gJC5TVU1NQVJZKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQVJRVUVFKVxyXG4gICAgICAgICAgICAgICAgYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkZJRUxEU0VUKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSlcclxuICAgICAgICAgICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDEwOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkxPQ0tRVU9URSB8fCB0biA9PT0gJC5GSUdDQVBUSU9OKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0IDpcclxuICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVvZkluQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcCA+IC0xKVxyXG4gICAgICAgIGVvZkluVGVtcGxhdGUocCwgdG9rZW4pO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICBwLnN0b3BwZWQgPSB0cnVlO1xyXG59XHJcblxyXG4vLzEyLjIuNS40LjggVGhlIFwidGV4dFwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIGVuZFRhZ0luVGV4dChwLCB0b2tlbikge1xyXG4gICAgaWYgKCFwLmZyYWdtZW50Q29udGV4dCAmJiBwLnNjcmlwdEhhbmRsZXIgJiYgdG9rZW4udGFnTmFtZSA9PT0gJC5TQ1JJUFQpXHJcbiAgICAgICAgcC5zY3JpcHRIYW5kbGVyKHAuZG9jdW1lbnQsIHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpO1xyXG5cclxuICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xyXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBlb2ZJblRleHQocCwgdG9rZW4pIHtcclxuICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xyXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XHJcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG5cclxuLy8xMi4yLjUuNC45IFRoZSBcImluIHRhYmxlXCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gY2hhcmFjdGVySW5UYWJsZShwLCB0b2tlbikge1xyXG4gICAgdmFyIGN1clRuID0gcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWU7XHJcblxyXG4gICAgaWYgKGN1clRuID09PSAkLlRBQkxFIHx8IGN1clRuID09PSAkLlRCT0RZIHx8IGN1clRuID09PSAkLlRGT09UIHx8IGN1clRuID09PSAkLlRIRUFEIHx8IGN1clRuID09PSAkLlRSKSB7XHJcbiAgICAgICAgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zID0gW107XHJcbiAgICAgICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gZmFsc2U7XHJcbiAgICAgICAgcC5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBwLmluc2VydGlvbk1vZGU7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfVEVYVF9NT0RFO1xyXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhcHRpb25TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcclxuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XHJcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQ0FQVElPTl9NT0RFO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb2xncm91cFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xyXG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQ09MVU1OX0dST1VQX01PREU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xyXG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkNPTEdST1VQKTtcclxuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRib2R5U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XHJcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9CT0RZX01PREU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRkU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XHJcbiAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuVEJPRFkpO1xyXG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcclxuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlRBQkxFKTtcclxuXHJcbiAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxyXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcclxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xyXG4gICAgdmFyIGlucHV0VHlwZSA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIodG9rZW4sIEFUVFJTLlRZUEUpO1xyXG5cclxuICAgIGlmIChpbnB1dFR5cGUgJiYgaW5wdXRUeXBlLnRvTG93ZXJDYXNlKCkgPT09IEhJRERFTl9JTlBVVF9UWVBFKVxyXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XHJcbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAgICAgcC5mb3JtRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlREIHx8IHRuID09PSAkLlRIIHx8IHRuID09PSAkLlRSKVxyXG4gICAgICAgICAgICAgICAgdGRTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DT0wpXHJcbiAgICAgICAgICAgICAgICBjb2xTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5GT1JNKVxyXG4gICAgICAgICAgICAgICAgZm9ybVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlRBQkxFKVxyXG4gICAgICAgICAgICAgICAgdGFibGVTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU1RZTEUpXHJcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRClcclxuICAgICAgICAgICAgICAgIHRib2R5U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklOUFVUKVxyXG4gICAgICAgICAgICAgICAgaW5wdXRTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5TQ1JJUFQpXHJcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkNBUFRJT04pXHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA4OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQ09MR1JPVVApXHJcbiAgICAgICAgICAgICAgICBjb2xncm91cFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSlcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLlRBQkxFKSB7XHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRBQkxFKSkge1xyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5UQUJMRSk7XHJcbiAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSlcclxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkJPRFkgJiYgdG4gIT09ICQuQ0FQVElPTiAmJiB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuQ09MR1JPVVAgJiYgdG4gIT09ICQuSFRNTCAmJlxyXG4gICAgICAgICAgICAgdG4gIT09ICQuVEJPRFkgJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEZPT1QgJiYgdG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEhFQUQgJiYgdG4gIT09ICQuVFIpIHtcclxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB0b2tlbkluVGFibGUocCwgdG9rZW4pIHtcclxuICAgIHZhciBzYXZlZEZvc3RlclBhcmVudGluZ1N0YXRlID0gcC5mb3N0ZXJQYXJlbnRpbmdFbmFibGVkO1xyXG5cclxuICAgIHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IHRydWU7XHJcbiAgICBwLl9wcm9jZXNzVG9rZW5JbkJvZHlNb2RlKHRva2VuKTtcclxuICAgIHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGU7XHJcbn1cclxuXHJcblxyXG4vLzEyLjIuNS40LjEwIFRoZSBcImluIHRhYmxlIHRleHRcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcclxuICAgIHAucGVuZGluZ0NoYXJhY3RlclRva2Vucy5wdXNoKHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcclxuICAgIHAucGVuZGluZ0NoYXJhY3RlclRva2Vucy5wdXNoKHRva2VuKTtcclxuICAgIHAuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbiA9IHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRva2VuSW5UYWJsZVRleHQocCwgdG9rZW4pIHtcclxuICAgIGlmIChwLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4pIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHAucGVuZGluZ0NoYXJhY3RlclRva2Vucy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHAucGVuZGluZ0NoYXJhY3RlclRva2Vuc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIHAuX2luc2VydENoYXJhY3RlcnMocC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZTtcclxuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn1cclxuXHJcblxyXG4vLzEyLjIuNS40LjExIFRoZSBcImluIGNhcHRpb25cIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHwgdG4gPT09ICQuVEJPRFkgfHxcclxuICAgICAgICB0biA9PT0gJC5URCB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USCB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUikge1xyXG4gICAgICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkNBUFRJT04pO1xyXG5cclxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxyXG4gICAgICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnSW5DYXB0aW9uKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5DQVBUSU9OKSB7XHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLkNBUFRJT04pKSB7XHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuQ0FQVElPTik7XHJcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XHJcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX01PREU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XHJcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQ0FQVElPTik7XHJcblxyXG4gICAgICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXHJcbiAgICAgICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCAmJiB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlRCT0RZICYmXHJcbiAgICAgICAgICAgICB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5URk9PVCAmJiB0biAhPT0gJC5USCAmJiB0biAhPT0gJC5USEVBRCAmJiB0biAhPT0gJC5UUikge1xyXG4gICAgICAgIGVuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vLzEyLjIuNS40LjEyIFRoZSBcImluIGNvbHVtbiBncm91cFwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ09MKVxyXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdG9rZW5JbkNvbHVtbkdyb3VwKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuQ09MR1JPVVApIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgIT09ICQuQ09MR1JPVVApXHJcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XHJcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX01PREU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gIT09ICQuQ09MKVxyXG4gICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xyXG4gICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQ09MR1JPVVApO1xyXG5cclxuICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXHJcbiAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxyXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn1cclxuXHJcbi8vMTIuMi41LjQuMTMgVGhlIFwiaW4gdGFibGUgYm9keVwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLlRSKSB7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fUk9XX01PREU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEggfHwgdG4gPT09ICQuVEQpIHtcclxuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuVFIpO1xyXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHxcclxuICAgICAgICAgICAgIHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEKSB7XHJcblxyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lKTtcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcclxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzVGFibGVCb2R5Q29udGV4dEluVGFibGVTY29wZSgpKSB7XHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xyXG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZyhwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSk7XHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkJPRFkgJiYgdG4gIT09ICQuQ0FQVElPTiAmJiB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuQ09MR1JPVVAgfHxcclxuICAgICAgICAgICAgIHRuICE9PSAkLkhUTUwgJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEggJiYgdG4gIT09ICQuVFIpIHtcclxuICAgICAgICBlbmRUYWdJblRhYmxlKHAsIHRva2VuKTtcclxuICAgIH1cclxufVxyXG5cclxuLy8xMi4yLjUuNC4xNCBUaGUgXCJpbiByb3dcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0luUm93KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5USCB8fCB0biA9PT0gJC5URCkge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQ0VMTF9NT0RFO1xyXG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XHJcbiAgICAgICAgICAgICB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUikge1xyXG4gICAgICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlRSKTtcclxuXHJcbiAgICAgICAgLy9OT1RFOiBUaGUgZmFrZSBlbmQgdGFnIHRva2VuIGhlcmUgY2FuIG9ubHkgYmUgaWdub3JlZCBpbiB0aGUgZnJhZ21lbnQgY2FzZS5cclxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxyXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRUYWdJblJvdyhwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuVFIpIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuVFIpKSB7XHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xyXG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9CT0RZX01PREU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XHJcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVFIpO1xyXG5cclxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxyXG4gICAgICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQpIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xyXG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlRSKTtcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCB8fFxyXG4gICAgICAgICAgICAgdG4gIT09ICQuSFRNTCAmJiB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5USCkge1xyXG4gICAgICAgIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuLy8xMi4yLjUuNC4xNSBUaGUgXCJpbiBjZWxsXCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gc3RhcnRUYWdJbkNlbGwocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XHJcbiAgICAgICAgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEggfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcclxuXHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSB8fCBwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5USCkpIHtcclxuICAgICAgICAgICAgcC5fY2xvc2VUYWJsZUNlbGwoKTtcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnSW5DZWxsKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcclxuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcclxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fUk9XX01PREU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSKSB7XHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcclxuICAgICAgICAgICAgcC5fY2xvc2VUYWJsZUNlbGwoKTtcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCAmJiB0biAhPT0gJC5IVE1MKVxyXG4gICAgICAgIGVuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcbn1cclxuXHJcbi8vMTIuMi41LjQuMTYgVGhlIFwiaW4gc2VsZWN0XCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gc3RhcnRUYWdJblNlbGVjdChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuT1BUSU9OKSB7XHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xyXG5cclxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUCkge1xyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRJT04pXHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUSU9OKTtcclxuXHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVEdST1VQKVxyXG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLk9QVEdST1VQKTtcclxuXHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0VMRUNUKVxyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuU0VMRUNUKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5JTlBVVCB8fCB0biA9PT0gJC5LRVlHRU4gfHwgdG4gPT09ICQuVEVYVEFSRUEpIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TZWxlY3RTY29wZSgkLlNFTEVDVCkpIHtcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xyXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQgfHwgdG4gPT09ICQuVEVNUExBVEUpXHJcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRUYWdJblNlbGVjdChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuT1BUR1JPVVApIHtcclxuICAgICAgICB2YXIgcHJldk9wZW5FbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbcC5vcGVuRWxlbWVudHMuc3RhY2tUb3AgLSAxXSxcclxuICAgICAgICAgICAgcHJldk9wZW5FbGVtZW50VG4gPSBwcmV2T3BlbkVsZW1lbnQgJiYgcC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHByZXZPcGVuRWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRJT04gJiYgcHJldk9wZW5FbGVtZW50VG4gPT09ICQuT1BUR1JPVVApXHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUSU9OKTtcclxuXHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVEdST1VQKVxyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRJT04pIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5TRUxFQ1QgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5TZWxlY3RTY29wZSgkLlNFTEVDVCkpIHtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5TRUxFQ1QpO1xyXG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XHJcbn1cclxuXHJcbi8vMTIuMi41LjQuMTcgVGhlIFwiaW4gc2VsZWN0IGluIHRhYmxlXCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gc3RhcnRUYWdJblNlbGVjdEluVGFibGUocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHxcclxuICAgICAgICB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUiB8fCB0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuU0VMRUNUKTtcclxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICBzdGFydFRhZ0luU2VsZWN0KHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnSW5TZWxlY3RJblRhYmxlKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5DQVBUSU9OIHx8IHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8XHJcbiAgICAgICAgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIgfHwgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xyXG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlNFTEVDVCk7XHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICBlbmRUYWdJblNlbGVjdChwLCB0b2tlbik7XHJcbn1cclxuXHJcbi8vMTIuMi41LjQuMTggVGhlIFwiaW4gdGVtcGxhdGVcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0luVGVtcGxhdGUocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuQkdTT1VORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEgfHxcclxuICAgICAgICB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TQ1JJUFQgfHwgdG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuVEVNUExBVEUgfHwgdG4gPT09ICQuVElUTEUpIHtcclxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIG5ld0luc2VydGlvbk1vZGUgPSBURU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQW3RuXSB8fCBJTl9CT0RZX01PREU7XHJcblxyXG4gICAgICAgIHAuX3BvcFRtcGxJbnNlcnRpb25Nb2RlKCk7XHJcbiAgICAgICAgcC5fcHVzaFRtcGxJbnNlcnRpb25Nb2RlKG5ld0luc2VydGlvbk1vZGUpO1xyXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IG5ld0luc2VydGlvbk1vZGU7XHJcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnSW5UZW1wbGF0ZShwLCB0b2tlbikge1xyXG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuVEVNUExBVEUpXHJcbiAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW9mSW5UZW1wbGF0ZShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkKCk7XHJcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcclxuICAgICAgICBwLl9wb3BUbXBsSW5zZXJ0aW9uTW9kZSgpO1xyXG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xyXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XHJcbn1cclxuXHJcblxyXG4vLzEyLjIuNS40LjE5IFRoZSBcImFmdGVyIGJvZHlcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTClcclxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MKSB7XHJcbiAgICAgICAgaWYgKCFwLmZyYWdtZW50Q29udGV4dClcclxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfQUZURVJfQk9EWV9NT0RFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XHJcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG4vLzEyLjIuNS40LjIwIFRoZSBcImluIGZyYW1lc2V0XCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gc3RhcnRUYWdJbkZyYW1lc2V0KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5GUkFNRVNFVClcclxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5GUkFNRSlcclxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5OT0ZSQU1FUylcclxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZFRhZ0luRnJhbWVzZXQocCwgdG9rZW4pIHtcclxuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkZSQU1FU0VUICYmICFwLm9wZW5FbGVtZW50cy5pc1Jvb3RIdG1sRWxlbWVudEN1cnJlbnQoKSkge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xyXG5cclxuICAgICAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkZSQU1FU0VUKVxyXG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9GUkFNRVNFVF9NT0RFO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLzEyLjIuNS40LjIxIFRoZSBcImFmdGVyIGZyYW1lc2V0XCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckZyYW1lc2V0KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5OT0ZSQU1FUylcclxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZFRhZ0FmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcclxuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERTtcclxufVxyXG5cclxuLy8xMi4yLjUuNC4yMiBUaGUgXCJhZnRlciBhZnRlciBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTClcclxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRva2VuQWZ0ZXJBZnRlckJvZHkocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b2tlbkFmdGVyQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XHJcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG4vLzEyLjIuNS40LjIzIFRoZSBcImFmdGVyIGFmdGVyIGZyYW1lc2V0XCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkhUTUwpXHJcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRlJBTUVTKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxufVxyXG5cclxuXHJcbi8vMTIuMi41LjUgVGhlIHJ1bGVzIGZvciBwYXJzaW5nIHRva2VucyBpbiBmb3JlaWduIGNvbnRlbnRcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gbnVsbENoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcclxuICAgIHRva2VuLmNoYXJzID0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xyXG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XHJcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3RhcnRUYWdJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XHJcbiAgICBpZiAoRm9yZWlnbkNvbnRlbnQuY2F1c2VzRXhpdCh0b2tlbikgJiYgIXAuZnJhZ21lbnRDb250ZXh0KSB7XHJcbiAgICAgICAgd2hpbGUgKHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpICE9PSBOUy5IVE1MICYmXHJcbiAgICAgICAgICAgICAgICghcC5faXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludChwLm9wZW5FbGVtZW50cy5jdXJyZW50KSkgJiZcclxuICAgICAgICAgICAgICAgKCFwLl9pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSkge1xyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBwLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50KCksXHJcbiAgICAgICAgICAgIGN1cnJlbnROcyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudE5zID09PSBOUy5NQVRITUwpXHJcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuTWF0aE1MQXR0cnModG9rZW4pO1xyXG5cclxuICAgICAgICBlbHNlIGlmIChjdXJyZW50TnMgPT09IE5TLlNWRykge1xyXG4gICAgICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR1RhZ05hbWUodG9rZW4pO1xyXG4gICAgICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR0F0dHJzKHRva2VuKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xyXG5cclxuICAgICAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpXHJcbiAgICAgICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIGN1cnJlbnROcyk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XHJcbiAgICBmb3IgKHZhciBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xyXG5cclxuICAgICAgICBpZiAocC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZWxlbWVudCkgPT09IE5TLkhUTUwpIHtcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLnRvTG93ZXJDYXNlKCkgPT09IHRva2VuLnRhZ05hbWUpIHtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxFbGVtZW50UG9wcGVkKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG4iLCJcbmV4cG9ydHMucGJrZGYyID0gcmVxdWlyZSgnLi9saWIvYXN5bmMnKVxuXG5leHBvcnRzLnBia2RmMlN5bmMgPSByZXF1aXJlKCcuL2xpYi9zeW5jJylcbiIsInZhciBjaGVja1BhcmFtZXRlcnMgPSByZXF1aXJlKCcuL3ByZWNvbmRpdGlvbicpXG52YXIgZGVmYXVsdEVuY29kaW5nID0gcmVxdWlyZSgnLi9kZWZhdWx0LWVuY29kaW5nJylcbnZhciBzeW5jID0gcmVxdWlyZSgnLi9zeW5jJylcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG52YXIgWkVST19CVUZcbnZhciBzdWJ0bGUgPSBnbG9iYWwuY3J5cHRvICYmIGdsb2JhbC5jcnlwdG8uc3VidGxlXG52YXIgdG9Ccm93c2VyID0ge1xuICAnc2hhJzogJ1NIQS0xJyxcbiAgJ3NoYS0xJzogJ1NIQS0xJyxcbiAgJ3NoYTEnOiAnU0hBLTEnLFxuICAnc2hhMjU2JzogJ1NIQS0yNTYnLFxuICAnc2hhLTI1Nic6ICdTSEEtMjU2JyxcbiAgJ3NoYTM4NCc6ICdTSEEtMzg0JyxcbiAgJ3NoYS0zODQnOiAnU0hBLTM4NCcsXG4gICdzaGEtNTEyJzogJ1NIQS01MTInLFxuICAnc2hhNTEyJzogJ1NIQS01MTInXG59XG52YXIgY2hlY2tzID0gW11cbmZ1bmN0aW9uIGNoZWNrTmF0aXZlIChhbGdvKSB7XG4gIGlmIChnbG9iYWwucHJvY2VzcyAmJiAhZ2xvYmFsLnByb2Nlc3MuYnJvd3Nlcikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpXG4gIH1cbiAgaWYgKCFzdWJ0bGUgfHwgIXN1YnRsZS5pbXBvcnRLZXkgfHwgIXN1YnRsZS5kZXJpdmVCaXRzKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcbiAgfVxuICBpZiAoY2hlY2tzW2FsZ29dICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2hlY2tzW2FsZ29dXG4gIH1cbiAgWkVST19CVUYgPSBaRVJPX0JVRiB8fCBCdWZmZXIuYWxsb2MoOClcbiAgdmFyIHByb20gPSBicm93c2VyUGJrZGYyKFpFUk9fQlVGLCBaRVJPX0JVRiwgMTAsIDEyOCwgYWxnbylcbiAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0pXG4gIGNoZWNrc1thbGdvXSA9IHByb21cbiAgcmV0dXJuIHByb21cbn1cbmZ1bmN0aW9uIGJyb3dzZXJQYmtkZjIgKHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBsZW5ndGgsIGFsZ28pIHtcbiAgcmV0dXJuIHN1YnRsZS5pbXBvcnRLZXkoXG4gICAgJ3JhdycsIHBhc3N3b3JkLCB7bmFtZTogJ1BCS0RGMid9LCBmYWxzZSwgWydkZXJpdmVCaXRzJ11cbiAgKS50aGVuKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gc3VidGxlLmRlcml2ZUJpdHMoe1xuICAgICAgbmFtZTogJ1BCS0RGMicsXG4gICAgICBzYWx0OiBzYWx0LFxuICAgICAgaXRlcmF0aW9uczogaXRlcmF0aW9ucyxcbiAgICAgIGhhc2g6IHtcbiAgICAgICAgbmFtZTogYWxnb1xuICAgICAgfVxuICAgIH0sIGtleSwgbGVuZ3RoIDw8IDMpXG4gIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShyZXMpXG4gIH0pXG59XG5mdW5jdGlvbiByZXNvbHZlUHJvbWlzZSAocHJvbWlzZSwgY2FsbGJhY2spIHtcbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChvdXQpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrKG51bGwsIG91dClcbiAgICB9KVxuICB9LCBmdW5jdGlvbiAoZSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2soZSlcbiAgICB9KVxuICB9KVxufVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGtleWxlbiwgZGlnZXN0LCBjYWxsYmFjaykge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihwYXNzd29yZCkpIHBhc3N3b3JkID0gQnVmZmVyLmZyb20ocGFzc3dvcmQsIGRlZmF1bHRFbmNvZGluZylcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2FsdCkpIHNhbHQgPSBCdWZmZXIuZnJvbShzYWx0LCBkZWZhdWx0RW5jb2RpbmcpXG5cbiAgY2hlY2tQYXJhbWV0ZXJzKGl0ZXJhdGlvbnMsIGtleWxlbilcbiAgaWYgKHR5cGVvZiBkaWdlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGRpZ2VzdFxuICAgIGRpZ2VzdCA9IHVuZGVmaW5lZFxuICB9XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyJylcblxuICBkaWdlc3QgPSBkaWdlc3QgfHwgJ3NoYTEnXG4gIHZhciBhbGdvID0gdG9Ccm93c2VyW2RpZ2VzdC50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWFsZ28gfHwgdHlwZW9mIGdsb2JhbC5Qcm9taXNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG91dFxuICAgICAgdHJ5IHtcbiAgICAgICAgb3V0ID0gc3luYyhwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywga2V5bGVuLCBkaWdlc3QpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlKVxuICAgICAgfVxuICAgICAgY2FsbGJhY2sobnVsbCwgb3V0KVxuICAgIH0pXG4gIH1cbiAgcmVzb2x2ZVByb21pc2UoY2hlY2tOYXRpdmUoYWxnbykudGhlbihmdW5jdGlvbiAocmVzcCkge1xuICAgIGlmIChyZXNwKSB7XG4gICAgICByZXR1cm4gYnJvd3NlclBia2RmMihwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywga2V5bGVuLCBhbGdvKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3luYyhwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywga2V5bGVuLCBkaWdlc3QpXG4gICAgfVxuICB9KSwgY2FsbGJhY2spXG59XG4iLCJ2YXIgZGVmYXVsdEVuY29kaW5nXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKHByb2Nlc3MuYnJvd3Nlcikge1xuICBkZWZhdWx0RW5jb2RpbmcgPSAndXRmLTgnXG59IGVsc2Uge1xuICB2YXIgcFZlcnNpb25NYWpvciA9IHBhcnNlSW50KHByb2Nlc3MudmVyc2lvbi5zcGxpdCgnLicpWzBdLnNsaWNlKDEpLCAxMClcblxuICBkZWZhdWx0RW5jb2RpbmcgPSBwVmVyc2lvbk1ham9yID49IDYgPyAndXRmLTgnIDogJ2JpbmFyeSdcbn1cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdEVuY29kaW5nXG4iLCJ2YXIgTUFYX0FMTE9DID0gTWF0aC5wb3coMiwgMzApIC0gMSAvLyBkZWZhdWx0IGluIGlvanNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdGlvbnMsIGtleWxlbikge1xuICBpZiAodHlwZW9mIGl0ZXJhdGlvbnMgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSXRlcmF0aW9ucyBub3QgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKGl0ZXJhdGlvbnMgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQmFkIGl0ZXJhdGlvbnMnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBrZXlsZW4gIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IGxlbmd0aCBub3QgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKGtleWxlbiA8IDAgfHwga2V5bGVuID4gTUFYX0FMTE9DIHx8IGtleWxlbiAhPT0ga2V5bGVuKSB7IC8qIGVzbGludCBuby1zZWxmLWNvbXBhcmU6IDAgKi9cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCYWQga2V5IGxlbmd0aCcpXG4gIH1cbn1cbiIsInZhciBtZDUgPSByZXF1aXJlKCdjcmVhdGUtaGFzaC9tZDUnKVxudmFyIHJtZDE2MCA9IHJlcXVpcmUoJ3JpcGVtZDE2MCcpXG52YXIgc2hhID0gcmVxdWlyZSgnc2hhLmpzJylcblxudmFyIGNoZWNrUGFyYW1ldGVycyA9IHJlcXVpcmUoJy4vcHJlY29uZGl0aW9uJylcbnZhciBkZWZhdWx0RW5jb2RpbmcgPSByZXF1aXJlKCcuL2RlZmF1bHQtZW5jb2RpbmcnKVxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG52YXIgWkVST1MgPSBCdWZmZXIuYWxsb2MoMTI4KVxudmFyIHNpemVzID0ge1xuICBtZDU6IDE2LFxuICBzaGExOiAyMCxcbiAgc2hhMjI0OiAyOCxcbiAgc2hhMjU2OiAzMixcbiAgc2hhMzg0OiA0OCxcbiAgc2hhNTEyOiA2NCxcbiAgcm1kMTYwOiAyMCxcbiAgcmlwZW1kMTYwOiAyMFxufVxuZnVuY3Rpb24gSG1hYyAoYWxnLCBrZXksIHNhbHRMZW4pIHtcbiAgdmFyIGhhc2ggPSBnZXREaWdlc3QoYWxnKVxuICB2YXIgYmxvY2tzaXplID0gKGFsZyA9PT0gJ3NoYTUxMicgfHwgYWxnID09PSAnc2hhMzg0JykgPyAxMjggOiA2NFxuXG4gIGlmIChrZXkubGVuZ3RoID4gYmxvY2tzaXplKSB7XG4gICAga2V5ID0gaGFzaChrZXkpXG4gIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA8IGJsb2Nrc2l6ZSkge1xuICAgIGtleSA9IEJ1ZmZlci5jb25jYXQoW2tleSwgWkVST1NdLCBibG9ja3NpemUpXG4gIH1cblxuICB2YXIgaXBhZCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShibG9ja3NpemUgKyBzaXplc1thbGddKVxuICB2YXIgb3BhZCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShibG9ja3NpemUgKyBzaXplc1thbGddKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2Nrc2l6ZTsgaSsrKSB7XG4gICAgaXBhZFtpXSA9IGtleVtpXSBeIDB4MzZcbiAgICBvcGFkW2ldID0ga2V5W2ldIF4gMHg1Q1xuICB9XG5cbiAgdmFyIGlwYWQxID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJsb2Nrc2l6ZSArIHNhbHRMZW4gKyA0KVxuICBpcGFkLmNvcHkoaXBhZDEsIDAsIDAsIGJsb2Nrc2l6ZSlcbiAgdGhpcy5pcGFkMSA9IGlwYWQxXG4gIHRoaXMuaXBhZDIgPSBpcGFkXG4gIHRoaXMub3BhZCA9IG9wYWRcbiAgdGhpcy5hbGcgPSBhbGdcbiAgdGhpcy5ibG9ja3NpemUgPSBibG9ja3NpemVcbiAgdGhpcy5oYXNoID0gaGFzaFxuICB0aGlzLnNpemUgPSBzaXplc1thbGddXG59XG5cbkhtYWMucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChkYXRhLCBpcGFkKSB7XG4gIGRhdGEuY29weShpcGFkLCB0aGlzLmJsb2Nrc2l6ZSlcbiAgdmFyIGggPSB0aGlzLmhhc2goaXBhZClcbiAgaC5jb3B5KHRoaXMub3BhZCwgdGhpcy5ibG9ja3NpemUpXG4gIHJldHVybiB0aGlzLmhhc2godGhpcy5vcGFkKVxufVxuXG5mdW5jdGlvbiBnZXREaWdlc3QgKGFsZykge1xuICBpZiAoYWxnID09PSAncm1kMTYwJyB8fCBhbGcgPT09ICdyaXBlbWQxNjAnKSByZXR1cm4gcm1kMTYwXG4gIGlmIChhbGcgPT09ICdtZDUnKSByZXR1cm4gbWQ1XG4gIHJldHVybiBzaGFGdW5jXG5cbiAgZnVuY3Rpb24gc2hhRnVuYyAoZGF0YSkge1xuICAgIHJldHVybiBzaGEoYWxnKS51cGRhdGUoZGF0YSkuZGlnZXN0KClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywga2V5bGVuLCBkaWdlc3QpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocGFzc3dvcmQpKSBwYXNzd29yZCA9IEJ1ZmZlci5mcm9tKHBhc3N3b3JkLCBkZWZhdWx0RW5jb2RpbmcpXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHNhbHQpKSBzYWx0ID0gQnVmZmVyLmZyb20oc2FsdCwgZGVmYXVsdEVuY29kaW5nKVxuXG4gIGNoZWNrUGFyYW1ldGVycyhpdGVyYXRpb25zLCBrZXlsZW4pXG5cbiAgZGlnZXN0ID0gZGlnZXN0IHx8ICdzaGExJ1xuXG4gIHZhciBobWFjID0gbmV3IEhtYWMoZGlnZXN0LCBwYXNzd29yZCwgc2FsdC5sZW5ndGgpXG5cbiAgdmFyIERLID0gQnVmZmVyLmFsbG9jVW5zYWZlKGtleWxlbilcbiAgdmFyIGJsb2NrMSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShzYWx0Lmxlbmd0aCArIDQpXG4gIHNhbHQuY29weShibG9jazEsIDAsIDAsIHNhbHQubGVuZ3RoKVxuXG4gIHZhciBVLCBqLCBkZXN0UG9zLCBsZW5cblxuICB2YXIgaExlbiA9IGhtYWMuc2l6ZVxuICB2YXIgVCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShoTGVuKVxuICB2YXIgbCA9IE1hdGguY2VpbChrZXlsZW4gLyBoTGVuKVxuICB2YXIgciA9IGtleWxlbiAtIChsIC0gMSkgKiBoTGVuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gbDsgaSsrKSB7XG4gICAgYmxvY2sxLndyaXRlVUludDMyQkUoaSwgc2FsdC5sZW5ndGgpXG4gICAgVSA9IGhtYWMucnVuKGJsb2NrMSwgaG1hYy5pcGFkMSlcblxuICAgIFUuY29weShULCAwLCAwLCBoTGVuKVxuXG4gICAgZm9yIChqID0gMTsgaiA8IGl0ZXJhdGlvbnM7IGorKykge1xuICAgICAgVSA9IGhtYWMucnVuKFUsIGhtYWMuaXBhZDIpXG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IGhMZW47IGsrKykgVFtrXSBePSBVW2tdXG4gICAgfVxuXG4gICAgZGVzdFBvcyA9IChpIC0gMSkgKiBoTGVuXG4gICAgbGVuID0gKGkgPT09IGwgPyByIDogaExlbilcbiAgICBULmNvcHkoREssIGRlc3RQb3MsIDAsIGxlbilcbiAgfVxuXG4gIHJldHVybiBES1xufVxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjcuMVxuKGZ1bmN0aW9uKCkge1xuICB2YXIgZ2V0TmFub1NlY29uZHMsIGhydGltZSwgbG9hZFRpbWU7XG5cbiAgaWYgKCh0eXBlb2YgcGVyZm9ybWFuY2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcGVyZm9ybWFuY2UgIT09IG51bGwpICYmIHBlcmZvcm1hbmNlLm5vdykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmICgodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2VzcyAhPT0gbnVsbCkgJiYgcHJvY2Vzcy5ocnRpbWUpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIChnZXROYW5vU2Vjb25kcygpIC0gbG9hZFRpbWUpIC8gMWU2O1xuICAgIH07XG4gICAgaHJ0aW1lID0gcHJvY2Vzcy5ocnRpbWU7XG4gICAgZ2V0TmFub1NlY29uZHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBocjtcbiAgICAgIGhyID0gaHJ0aW1lKCk7XG4gICAgICByZXR1cm4gaHJbMF0gKiAxZTkgKyBoclsxXTtcbiAgICB9O1xuICAgIGxvYWRUaW1lID0gZ2V0TmFub1NlY29uZHMoKTtcbiAgfSBlbHNlIGlmIChEYXRlLm5vdykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIGxvYWRUaW1lO1xuICAgIH07XG4gICAgbG9hZFRpbWUgPSBEYXRlLm5vdygpO1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBsb2FkVGltZTtcbiAgICB9O1xuICAgIGxvYWRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEFsbG93IHRoZSB1c2VyIHRvIGN1c3RvbWl6ZSB0aGUgUHJvbWlzZSB0eXBlIHJldHVybmVkIGJ5IHRoaXMgbGlicmFyeS5cbnZhciBteXByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3JTZXRQcm9taXNlKHApIHtcbiAgICBpZiAocCkgeyBteXByb21pc2UgPSBwOyB9XG4gICAgcmV0dXJuIG15cHJvbWlzZTtcbn07XG4iLCIvLyBmcmVlemUgQXJyYXkjc2xpY2UsIGp1c3QgaW4gY2FzZSBvZiBmdW5ueSBidXNpbmVzcyBsYXRlci5cbnZhciBfc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgZ2V0UHJvbWlzZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UuanMnKTtcbi8vIGRlZmVycmVkIGdldHMgaXRzIG93biBzY29wZSB0byBwcmV2ZW50IGluYWR2ZXJ0ZW50IGNhcHR1cmUgaW4gdGhlIGNsb3N1cmVcbnZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICB2YXIgUHJvbWlzZSA9IGdldFByb21pc2UoKTtcbiAgICB2YXIgcmVzb2x2ZSwgcmVqZWN0LCBwID0gbmV3IFByb21pc2UoZnVuY3Rpb24oX3Jlc29sdmUsIF9yZWplY3QpIHtcbiAgICAgICAgcmVzb2x2ZSA9IF9yZXNvbHZlOyByZWplY3QgPSBfcmVqZWN0O1xuICAgIH0pO1xuICAgIHZhciBwYXR0ZXJuID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXR0ZXJuKTtcbiAgICB2YXIgbm9FcnJvciA9IChvcHRpb25zICYmIG9wdGlvbnMubm9FcnJvcik7XG4gICAgdmFyIGNiID0gcGF0dGVybiA/IGZ1bmN0aW9uKGVycikge1xuICAgICAgICBpZiAoZXJyICYmICFub0Vycm9yKSB7IHJldHVybiByZWplY3QoZXJyKTsgfVxuICAgICAgICB2YXIgcmVzdWx0ID0ge30sIGksIG9mZnNldCA9IG5vRXJyb3IgPyAwIDogMTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdFtwYXR0ZXJuW2ldXSA9IGFyZ3VtZW50c1tpK29mZnNldF07XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0gOiBub0Vycm9yID8gcmVzb2x2ZSA6IGZ1bmN0aW9uKGVyciwgdmFsKSB7XG4gICAgICAgIGlmIChlcnIpIHsgcmVqZWN0KGVycik7IH0gZWxzZSB7IHJlc29sdmUodmFsKTsgfVxuICAgIH07XG4gICAgcmV0dXJuIHsgcHJvbWlzZTogcCwgY2FsbGJhY2s6IGNiIH07XG59O1xudmFyIHByb21pc2lmeSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCwgZnVuYywgbWFuZGF0b3J5QXJncywgb3B0aW9ucykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNiID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKHR5cGVvZihjYikgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb29oLCBwcm9taXNlcy5cbiAgICAgICAgdmFyIGQgPSBkZWZlcnJlZChvcHRpb25zKTtcbiAgICAgICAgdmFyIGEgPSBfc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICAgICAgICB3aGlsZSAoYS5sZW5ndGggPCBtYW5kYXRvcnlBcmdzKSB7IGEucHVzaCh1bmRlZmluZWQpOyB9XG4gICAgICAgIGEucHVzaChkLmNhbGxiYWNrKTtcbiAgICAgICAgdmFyIHJldHZhbCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYSk7XG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmV0dXJuc09iamVjdCkge1xuICAgICAgICAgICAgLy8gaXQgd291bGQgYmUgbmljZSB0byBoYXZlIGEgYmV0dGVyIGNvbnZlbnRpb24gaGVyZVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldHZhbCwgJ3Byb21pc2UnLCB7IHZhbHVlOiBkLnByb21pc2UgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkLnByb21pc2U7XG4gICAgfTtcbn07XG4iLCJ2YXIgZnMgPSByZXF1aXJlKFwiZnNcIik7XG52YXIgcHJvbWlzaWZ5ID0gcmVxdWlyZShcIi4vX3Byb21pc2lmeS5qc1wiKTtcbnZhciBiaW5kID0gZnVuY3Rpb24oYywgZikgeyByZXR1cm4gZiAmJiBmLmJpbmQoYyk7IH07XG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhtb2R1bGUuZXhwb3J0cywge1xuICBGX09LOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBmcy5GX09LIH0sXG4gIEZpbGVSZWFkU3RyZWFtOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBmcy5GaWxlUmVhZFN0cmVhbSB9LFxuICBGaWxlV3JpdGVTdHJlYW06IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGZzLkZpbGVXcml0ZVN0cmVhbSB9LFxuICBSX09LOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBmcy5SX09LIH0sXG4gIFJlYWRTdHJlYW06IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGZzLlJlYWRTdHJlYW0gfSxcbiAgU3RhdHM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGZzLlN0YXRzIH0sXG4gIFdfT0s6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGZzLldfT0sgfSxcbiAgV3JpdGVTdHJlYW06IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGZzLldyaXRlU3RyZWFtIH0sXG4gIFhfT0s6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGZzLlhfT0sgfSxcbiAgLy9fdG9Vbml4VGltZXN0YW1wOiAvLyBza2lwcGluZ1xuICBhY2Nlc3M6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMuYWNjZXNzLCAxKSB9LFxuICBhY2Nlc3NTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5hY2Nlc3NTeW5jKSB9LFxuICBhcHBlbmRGaWxlOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLmFwcGVuZEZpbGUsIDIpIH0sXG4gIGFwcGVuZEZpbGVTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5hcHBlbmRGaWxlU3luYykgfSxcbiAgY2htb2Q6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMuY2htb2QsIDIpIH0sXG4gIGNobW9kU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMuY2htb2RTeW5jKSB9LFxuICBjaG93bjogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5jaG93biwgMykgfSxcbiAgY2hvd25TeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5jaG93blN5bmMpIH0sXG4gIGNsb3NlOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLmNsb3NlLCAxKSB9LFxuICBjbG9zZVN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmNsb3NlU3luYykgfSxcbiAgY3JlYXRlUmVhZFN0cmVhbTogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMuY3JlYXRlUmVhZFN0cmVhbSkgfSxcbiAgY3JlYXRlV3JpdGVTdHJlYW06IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmNyZWF0ZVdyaXRlU3RyZWFtKSB9LFxuICBleGlzdHM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMuZXhpc3RzLCAxLCB7XCJub0Vycm9yXCI6dHJ1ZX0pIH0sXG4gIGV4aXN0c1N5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmV4aXN0c1N5bmMpIH0sXG4gIGZjaG1vZDogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5mY2htb2QsIDIpIH0sXG4gIGZjaG1vZFN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmZjaG1vZFN5bmMpIH0sXG4gIGZjaG93bjogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5mY2hvd24sIDMpIH0sXG4gIGZjaG93blN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmZjaG93blN5bmMpIH0sXG4gIGZkYXRhc3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5mZGF0YXN5bmMsIDEpIH0sXG4gIGZkYXRhc3luY1N5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmZkYXRhc3luY1N5bmMpIH0sXG4gIGZzdGF0OiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLmZzdGF0LCAxKSB9LFxuICBmc3RhdFN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmZzdGF0U3luYykgfSxcbiAgZnN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMuZnN5bmMsIDEpIH0sXG4gIGZzeW5jU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMuZnN5bmNTeW5jKSB9LFxuICBmdHJ1bmNhdGU6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMuZnRydW5jYXRlLCAyKSB9LFxuICBmdHJ1bmNhdGVTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5mdHJ1bmNhdGVTeW5jKSB9LFxuICBmdXRpbWVzOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLmZ1dGltZXMsIDMpIH0sXG4gIGZ1dGltZXNTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5mdXRpbWVzU3luYykgfSxcbiAgbGluazogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5saW5rLCAyKSB9LFxuICBsaW5rU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMubGlua1N5bmMpIH0sXG4gIGxzdGF0OiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLmxzdGF0LCAxKSB9LFxuICBsc3RhdFN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmxzdGF0U3luYykgfSxcbiAgbWtkaXI6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMubWtkaXIsIDEpIH0sXG4gIG1rZGlyU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMubWtkaXJTeW5jKSB9LFxuICBvcGVuOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLm9wZW4sIDIpIH0sXG4gIG9wZW5TeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5vcGVuU3luYykgfSxcbiAgcmVhZDogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5yZWFkLCA1LCB7XCJwYXR0ZXJuXCI6W1wicmVhZFwiLFwiYnVmZmVyXCJdfSkgfSxcbiAgcmVhZEZpbGU6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMucmVhZEZpbGUsIDEpIH0sXG4gIHJlYWRGaWxlU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMucmVhZEZpbGVTeW5jKSB9LFxuICByZWFkU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMucmVhZFN5bmMpIH0sXG4gIHJlYWRkaXI6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMucmVhZGRpciwgMSkgfSxcbiAgcmVhZGRpclN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLnJlYWRkaXJTeW5jKSB9LFxuICByZWFkbGluazogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5yZWFkbGluaywgMSkgfSxcbiAgcmVhZGxpbmtTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5yZWFkbGlua1N5bmMpIH0sXG4gIHJlYWxwYXRoOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLnJlYWxwYXRoLCAxKSB9LFxuICByZWFscGF0aFN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLnJlYWxwYXRoU3luYykgfSxcbiAgcmVuYW1lOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLnJlbmFtZSwgMikgfSxcbiAgcmVuYW1lU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMucmVuYW1lU3luYykgfSxcbiAgcm1kaXI6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMucm1kaXIsIDEpIH0sXG4gIHJtZGlyU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMucm1kaXJTeW5jKSB9LFxuICBzdGF0OiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLnN0YXQsIDEpIH0sXG4gIHN0YXRTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5zdGF0U3luYykgfSxcbiAgc3ltbGluazogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5zeW1saW5rLCAyKSB9LFxuICBzeW1saW5rU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMuc3ltbGlua1N5bmMpIH0sXG4gIHRydW5jYXRlOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLnRydW5jYXRlLCAyKSB9LFxuICB0cnVuY2F0ZVN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLnRydW5jYXRlU3luYykgfSxcbiAgdW5saW5rOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLnVubGluaywgMSkgfSxcbiAgdW5saW5rU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMudW5saW5rU3luYykgfSxcbiAgdW53YXRjaEZpbGU6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLnVud2F0Y2hGaWxlKSB9LFxuICB1dGltZXM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMudXRpbWVzLCAzKSB9LFxuICB1dGltZXNTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy51dGltZXNTeW5jKSB9LFxuICB3YXRjaDogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMud2F0Y2gpIH0sXG4gIHdhdGNoRmlsZTogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMud2F0Y2hGaWxlKSB9LFxuICB3cml0ZTogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy53cml0ZSwgNSwge1wicGF0dGVyblwiOltcIndyaXR0ZW5cIixcImJ1ZmZlclwiXX0pIH0sXG4gIHdyaXRlRmlsZTogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy53cml0ZUZpbGUsIDIpIH0sXG4gIHdyaXRlRmlsZVN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLndyaXRlRmlsZVN5bmMpIH0sXG4gIHdyaXRlU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMud3JpdGVTeW5jKSB9LFxufSk7IiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAoIXByb2Nlc3MudmVyc2lvbiB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MC4nKSA9PT0gMCB8fFxuICAgIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS4nKSA9PT0gMCAmJiBwcm9jZXNzLnZlcnNpb24uaW5kZXhPZigndjEuOC4nKSAhPT0gMCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IG5leHRUaWNrO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBwcm9jZXNzLm5leHRUaWNrO1xufVxuXG5mdW5jdGlvbiBuZXh0VGljayhmbiwgYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJjYWxsYmFja1wiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG4gIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgYXJncywgaTtcbiAgc3dpdGNoIChsZW4pIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZm4pO1xuICBjYXNlIDI6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrT25lKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxKTtcbiAgICB9KTtcbiAgY2FzZSAzOlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja1R3bygpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMik7XG4gICAgfSk7XG4gIGNhc2UgNDpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tUaHJlZSgpIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgfSk7XG4gIGRlZmF1bHQ6XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTtcbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgICBhcmdzW2krK10gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGljaygpIHtcbiAgICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0pO1xuICB9XG59XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiZXhwb3J0cy5wdWJsaWNFbmNyeXB0ID0gcmVxdWlyZSgnLi9wdWJsaWNFbmNyeXB0Jyk7XG5leHBvcnRzLnByaXZhdGVEZWNyeXB0ID0gcmVxdWlyZSgnLi9wcml2YXRlRGVjcnlwdCcpO1xuXG5leHBvcnRzLnByaXZhdGVFbmNyeXB0ID0gZnVuY3Rpb24gcHJpdmF0ZUVuY3J5cHQoa2V5LCBidWYpIHtcbiAgcmV0dXJuIGV4cG9ydHMucHVibGljRW5jcnlwdChrZXksIGJ1ZiwgdHJ1ZSk7XG59O1xuXG5leHBvcnRzLnB1YmxpY0RlY3J5cHQgPSBmdW5jdGlvbiBwdWJsaWNEZWNyeXB0KGtleSwgYnVmKSB7XG4gIHJldHVybiBleHBvcnRzLnByaXZhdGVEZWNyeXB0KGtleSwgYnVmLCB0cnVlKTtcbn07IiwidmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2VlZCwgbGVuKSB7XG4gIHZhciB0ID0gbmV3IEJ1ZmZlcignJyk7XG4gIHZhciAgaSA9IDAsIGM7XG4gIHdoaWxlICh0Lmxlbmd0aCA8IGxlbikge1xuICAgIGMgPSBpMm9wcyhpKyspO1xuICAgIHQgPSBCdWZmZXIuY29uY2F0KFt0LCBjcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKHNlZWQpLnVwZGF0ZShjKS5kaWdlc3QoKV0pO1xuICB9XG4gIHJldHVybiB0LnNsaWNlKDAsIGxlbik7XG59O1xuXG5mdW5jdGlvbiBpMm9wcyhjKSB7XG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKDQpO1xuICBvdXQud3JpdGVVSW50MzJCRShjLDApO1xuICByZXR1cm4gb3V0O1xufSIsInZhciBwYXJzZUtleXMgPSByZXF1aXJlKCdwYXJzZS1hc24xJyk7XG52YXIgbWdmID0gcmVxdWlyZSgnLi9tZ2YnKTtcbnZhciB4b3IgPSByZXF1aXJlKCcuL3hvcicpO1xudmFyIGJuID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBjcnQgPSByZXF1aXJlKCdicm93c2VyaWZ5LXJzYScpO1xudmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpO1xudmFyIHdpdGhQdWJsaWMgPSByZXF1aXJlKCcuL3dpdGhQdWJsaWMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcHJpdmF0ZURlY3J5cHQocHJpdmF0ZV9rZXksIGVuYywgcmV2ZXJzZSkge1xuICB2YXIgcGFkZGluZztcbiAgaWYgKHByaXZhdGVfa2V5LnBhZGRpbmcpIHtcbiAgICBwYWRkaW5nID0gcHJpdmF0ZV9rZXkucGFkZGluZztcbiAgfSBlbHNlIGlmIChyZXZlcnNlKSB7XG4gICAgcGFkZGluZyA9IDE7XG4gIH0gZWxzZSB7XG4gICAgcGFkZGluZyA9IDQ7XG4gIH1cbiAgXG4gIHZhciBrZXkgPSBwYXJzZUtleXMocHJpdmF0ZV9rZXkpO1xuICB2YXIgayA9IGtleS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgaWYgKGVuYy5sZW5ndGggPiBrIHx8IG5ldyBibihlbmMpLmNtcChrZXkubW9kdWx1cykgPj0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVjcnlwdGlvbiBlcnJvcicpO1xuICB9XG4gIHZhciBtc2c7XG4gIGlmIChyZXZlcnNlKSB7XG4gICAgbXNnID0gd2l0aFB1YmxpYyhuZXcgYm4oZW5jKSwga2V5KTtcbiAgfSBlbHNlIHtcbiAgICBtc2cgPSBjcnQoZW5jLCBrZXkpO1xuICB9XG4gIHZhciB6QnVmZmVyID0gbmV3IEJ1ZmZlcihrIC0gbXNnLmxlbmd0aCk7XG4gIHpCdWZmZXIuZmlsbCgwKTtcbiAgbXNnID0gQnVmZmVyLmNvbmNhdChbekJ1ZmZlciwgbXNnXSwgayk7XG4gIGlmIChwYWRkaW5nID09PSA0KSB7XG4gICAgcmV0dXJuIG9hZXAoa2V5LCBtc2cpO1xuICB9IGVsc2UgaWYgKHBhZGRpbmcgPT09IDEpIHtcbiAgICByZXR1cm4gcGtjczEoa2V5LCBtc2csIHJldmVyc2UpO1xuICB9IGVsc2UgaWYgKHBhZGRpbmcgPT09IDMpIHtcbiAgICByZXR1cm4gbXNnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBwYWRkaW5nJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIG9hZXAoa2V5LCBtc2cpe1xuICB2YXIgbiA9IGtleS5tb2R1bHVzO1xuICB2YXIgayA9IGtleS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIG1MZW4gPSBtc2cubGVuZ3RoO1xuICB2YXIgaUhhc2ggPSBjcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKG5ldyBCdWZmZXIoJycpKS5kaWdlc3QoKTtcbiAgdmFyIGhMZW4gPSBpSGFzaC5sZW5ndGg7XG4gIHZhciBoTGVuMiA9IDIgKiBoTGVuO1xuICBpZiAobXNnWzBdICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZWNyeXB0aW9uIGVycm9yJyk7XG4gIH1cbiAgdmFyIG1hc2tlZFNlZWQgPSBtc2cuc2xpY2UoMSwgaExlbiArIDEpO1xuICB2YXIgbWFza2VkRGIgPSAgbXNnLnNsaWNlKGhMZW4gKyAxKTtcbiAgdmFyIHNlZWQgPSB4b3IobWFza2VkU2VlZCwgbWdmKG1hc2tlZERiLCBoTGVuKSk7XG4gIHZhciBkYiA9IHhvcihtYXNrZWREYiwgbWdmKHNlZWQsIGsgLSBoTGVuIC0gMSkpO1xuICBpZiAoY29tcGFyZShpSGFzaCwgZGIuc2xpY2UoMCwgaExlbikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZWNyeXB0aW9uIGVycm9yJyk7XG4gIH1cbiAgdmFyIGkgPSBoTGVuO1xuICB3aGlsZSAoZGJbaV0gPT09IDApIHtcbiAgICBpKys7XG4gIH1cbiAgaWYgKGRiW2krK10gIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZXJyb3InKTtcbiAgfVxuICByZXR1cm4gZGIuc2xpY2UoaSk7XG59XG5cbmZ1bmN0aW9uIHBrY3MxKGtleSwgbXNnLCByZXZlcnNlKXtcbiAgdmFyIHAxID0gbXNnLnNsaWNlKDAsIDIpO1xuICB2YXIgaSA9IDI7XG4gIHZhciBzdGF0dXMgPSAwO1xuICB3aGlsZSAobXNnW2krK10gIT09IDApIHtcbiAgICBpZiAoaSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgICBzdGF0dXMrKztcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2YXIgcHMgPSBtc2cuc2xpY2UoMiwgaSAtIDEpO1xuICB2YXIgcDIgPSBtc2cuc2xpY2UoaSAtIDEsIGkpO1xuXG4gIGlmICgocDEudG9TdHJpbmcoJ2hleCcpICE9PSAnMDAwMicgJiYgIXJldmVyc2UpIHx8IChwMS50b1N0cmluZygnaGV4JykgIT09ICcwMDAxJyAmJiByZXZlcnNlKSl7XG4gICAgc3RhdHVzKys7XG4gIH1cbiAgaWYgKHBzLmxlbmd0aCA8IDgpIHtcbiAgICBzdGF0dXMrKztcbiAgfVxuICBpZiAoc3RhdHVzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZWNyeXB0aW9uIGVycm9yJyk7XG4gIH1cbiAgcmV0dXJuICBtc2cuc2xpY2UoaSk7XG59XG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpe1xuICBhID0gbmV3IEJ1ZmZlcihhKTtcbiAgYiA9IG5ldyBCdWZmZXIoYik7XG4gIHZhciBkaWYgPSAwO1xuICB2YXIgbGVuID0gYS5sZW5ndGg7XG4gIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICBkaWYrKztcbiAgICBsZW4gPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xuICB9XG4gIHZhciBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBkaWYgKz0gKGFbaV0gXiBiW2ldKTtcbiAgfVxuICByZXR1cm4gZGlmO1xufSIsInZhciBwYXJzZUtleXMgPSByZXF1aXJlKCdwYXJzZS1hc24xJyk7XG52YXIgcmFuZG9tQnl0ZXMgPSByZXF1aXJlKCdyYW5kb21ieXRlcycpO1xudmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpO1xudmFyIG1nZiA9IHJlcXVpcmUoJy4vbWdmJyk7XG52YXIgeG9yID0gcmVxdWlyZSgnLi94b3InKTtcbnZhciBibiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgd2l0aFB1YmxpYyA9IHJlcXVpcmUoJy4vd2l0aFB1YmxpYycpO1xudmFyIGNydCA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktcnNhJyk7XG5cbnZhciBjb25zdGFudHMgPSB7XG4gIFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6IDQsXG4gIFJTQV9QS0NTMV9QQURESU46IDEsXG4gIFJTQV9OT19QQURESU5HOiAzXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHB1YmxpY0VuY3J5cHQocHVibGljX2tleSwgbXNnLCByZXZlcnNlKSB7XG4gIHZhciBwYWRkaW5nO1xuICBpZiAocHVibGljX2tleS5wYWRkaW5nKSB7XG4gICAgcGFkZGluZyA9IHB1YmxpY19rZXkucGFkZGluZztcbiAgfSBlbHNlIGlmIChyZXZlcnNlKSB7XG4gICAgcGFkZGluZyA9IDE7XG4gIH0gZWxzZSB7XG4gICAgcGFkZGluZyA9IDQ7XG4gIH1cbiAgdmFyIGtleSA9IHBhcnNlS2V5cyhwdWJsaWNfa2V5KTtcbiAgdmFyIHBhZGRlZE1zZztcbiAgaWYgKHBhZGRpbmcgPT09IDQpIHtcbiAgICBwYWRkZWRNc2cgPSBvYWVwKGtleSwgbXNnKTtcbiAgfSBlbHNlIGlmIChwYWRkaW5nID09PSAxKSB7XG4gICAgcGFkZGVkTXNnID0gcGtjczEoa2V5LCBtc2csIHJldmVyc2UpO1xuICB9IGVsc2UgaWYgKHBhZGRpbmcgPT09IDMpIHtcbiAgICBwYWRkZWRNc2cgPSBuZXcgYm4obXNnKTtcbiAgICBpZiAocGFkZGVkTXNnLmNtcChrZXkubW9kdWx1cykgPj0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBwYWRkaW5nJyk7XG4gIH1cbiAgaWYgKHJldmVyc2UpIHtcbiAgICByZXR1cm4gY3J0KHBhZGRlZE1zZywga2V5KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gd2l0aFB1YmxpYyhwYWRkZWRNc2csIGtleSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIG9hZXAoa2V5LCBtc2cpe1xuICB2YXIgayA9IGtleS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIG1MZW4gPSBtc2cubGVuZ3RoO1xuICB2YXIgaUhhc2ggPSBjcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKG5ldyBCdWZmZXIoJycpKS5kaWdlc3QoKTtcbiAgdmFyIGhMZW4gPSBpSGFzaC5sZW5ndGg7XG4gIHZhciBoTGVuMiA9IDIgKiBoTGVuO1xuICBpZiAobUxlbiA+IGsgLSBoTGVuMiAtIDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21lc3NhZ2UgdG9vIGxvbmcnKTtcbiAgfVxuICB2YXIgcHMgPSBuZXcgQnVmZmVyKGsgLSBtTGVuIC0gaExlbjIgLSAyKTtcbiAgcHMuZmlsbCgwKTtcbiAgdmFyIGRibGVuID0gayAtIGhMZW4gLSAxO1xuICB2YXIgc2VlZCA9IHJhbmRvbUJ5dGVzKGhMZW4pO1xuICB2YXIgbWFza2VkRGIgPSB4b3IoQnVmZmVyLmNvbmNhdChbaUhhc2gsIHBzLCBuZXcgQnVmZmVyKFsxXSksIG1zZ10sIGRibGVuKSwgbWdmKHNlZWQsIGRibGVuKSk7XG4gIHZhciBtYXNrZWRTZWVkID0geG9yKHNlZWQsIG1nZihtYXNrZWREYiwgaExlbikpO1xuICByZXR1cm4gbmV3IGJuKEJ1ZmZlci5jb25jYXQoW25ldyBCdWZmZXIoWzBdKSwgbWFza2VkU2VlZCwgbWFza2VkRGJdLCBrKSk7XG59XG5mdW5jdGlvbiBwa2NzMShrZXksIG1zZywgcmV2ZXJzZSl7XG4gIHZhciBtTGVuID0gbXNnLmxlbmd0aDtcbiAgdmFyIGsgPSBrZXkubW9kdWx1cy5ieXRlTGVuZ3RoKCk7XG4gIGlmIChtTGVuID4gayAtIDExKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXNzYWdlIHRvbyBsb25nJyk7XG4gIH1cbiAgdmFyIHBzO1xuICBpZiAocmV2ZXJzZSkge1xuICAgIHBzID0gbmV3IEJ1ZmZlcihrIC0gbUxlbiAtIDMpO1xuICAgIHBzLmZpbGwoMHhmZik7XG4gIH0gZWxzZSB7XG4gICAgcHMgPSBub25aZXJvKGsgLSBtTGVuIC0gMyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBibihCdWZmZXIuY29uY2F0KFtuZXcgQnVmZmVyKFswLCByZXZlcnNlPzE6Ml0pLCBwcywgbmV3IEJ1ZmZlcihbMF0pLCBtc2ddLCBrKSk7XG59XG5mdW5jdGlvbiBub25aZXJvKGxlbiwgY3J5cHRvKSB7XG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGxlbik7XG4gIHZhciBpID0gMDtcbiAgdmFyIGNhY2hlID0gcmFuZG9tQnl0ZXMobGVuKjIpO1xuICB2YXIgY3VyID0gMDtcbiAgdmFyIG51bTtcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICBpZiAoY3VyID09PSBjYWNoZS5sZW5ndGgpIHtcbiAgICAgIGNhY2hlID0gcmFuZG9tQnl0ZXMobGVuKjIpO1xuICAgICAgY3VyID0gMDtcbiAgICB9XG4gICAgbnVtID0gY2FjaGVbY3VyKytdO1xuICAgIGlmIChudW0pIHtcbiAgICAgIG91dFtpKytdID0gbnVtO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufSIsInZhciBibiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG5mdW5jdGlvbiB3aXRoUHVibGljKHBhZGRlZE1zZywga2V5KSB7XG4gIHJldHVybiBuZXcgQnVmZmVyKHBhZGRlZE1zZ1xuICAgIC50b1JlZChibi5tb250KGtleS5tb2R1bHVzKSlcbiAgICAucmVkUG93KG5ldyBibihrZXkucHVibGljRXhwb25lbnQpKVxuICAgIC5mcm9tUmVkKClcbiAgICAudG9BcnJheSgpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aXRoUHVibGljOyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24geG9yKGEsIGIpIHtcbiAgdmFyIGxlbiA9IGEubGVuZ3RoO1xuICB2YXIgaSA9IC0xO1xuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgYVtpXSBePSBiW2ldO1xuICB9XG4gIHJldHVybiBhXG59OyIsIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4xIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuNC4xJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xudmFyIHBlcmNlbnRUd2VudGllcyA9IC8lMjAvZztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgJ2RlZmF1bHQnOiAnUkZDMzk4NicsXG4gICAgZm9ybWF0dGVyczoge1xuICAgICAgICBSRkMxNzM4OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXBsYWNlLmNhbGwodmFsdWUsIHBlcmNlbnRUd2VudGllcywgJysnKTtcbiAgICAgICAgfSxcbiAgICAgICAgUkZDMzk4NjogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFJGQzE3Mzg6ICdSRkMxNzM4JyxcbiAgICBSRkMzOTg2OiAnUkZDMzk4Nidcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeScpO1xudmFyIHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpO1xudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZm9ybWF0czogZm9ybWF0cyxcbiAgICBwYXJzZTogcGFyc2UsXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgICBhbGxvd0RvdHM6IGZhbHNlLFxuICAgIGFsbG93UHJvdG90eXBlczogZmFsc2UsXG4gICAgYXJyYXlMaW1pdDogMjAsXG4gICAgZGVjb2RlcjogdXRpbHMuZGVjb2RlLFxuICAgIGRlbGltaXRlcjogJyYnLFxuICAgIGRlcHRoOiA1LFxuICAgIHBhcmFtZXRlckxpbWl0OiAxMDAwLFxuICAgIHBsYWluT2JqZWN0czogZmFsc2UsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nOiBmYWxzZVxufTtcblxudmFyIHBhcnNlVmFsdWVzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ1ZhbHVlcyhzdHIsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0ge307XG4gICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KG9wdGlvbnMuZGVsaW1pdGVyLCBvcHRpb25zLnBhcmFtZXRlckxpbWl0ID09PSBJbmZpbml0eSA/IHVuZGVmaW5lZCA6IG9wdGlvbnMucGFyYW1ldGVyTGltaXQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcGFydCA9IHBhcnRzW2ldO1xuICAgICAgICB2YXIgcG9zID0gcGFydC5pbmRleE9mKCddPScpID09PSAtMSA/IHBhcnQuaW5kZXhPZignPScpIDogcGFydC5pbmRleE9mKCddPScpICsgMTtcblxuICAgICAgICB2YXIga2V5LCB2YWw7XG4gICAgICAgIGlmIChwb3MgPT09IC0xKSB7XG4gICAgICAgICAgICBrZXkgPSBvcHRpb25zLmRlY29kZXIocGFydCk7XG4gICAgICAgICAgICB2YWwgPSBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA/IG51bGwgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKDAsIHBvcykpO1xuICAgICAgICAgICAgdmFsID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQuc2xpY2UocG9zICsgMSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gW10uY29uY2F0KG9ialtrZXldKS5jb25jYXQodmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBwYXJzZU9iamVjdCA9IGZ1bmN0aW9uIHBhcnNlT2JqZWN0UmVjdXJzaXZlKGNoYWluLCB2YWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNoYWluLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIHZhciByb290ID0gY2hhaW4uc2hpZnQoKTtcblxuICAgIHZhciBvYmo7XG4gICAgaWYgKHJvb3QgPT09ICdbXScpIHtcbiAgICAgICAgb2JqID0gW107XG4gICAgICAgIG9iaiA9IG9iai5jb25jYXQocGFyc2VPYmplY3QoY2hhaW4sIHZhbCwgb3B0aW9ucykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgICB2YXIgY2xlYW5Sb290ID0gcm9vdC5jaGFyQXQoMCkgPT09ICdbJyAmJiByb290LmNoYXJBdChyb290Lmxlbmd0aCAtIDEpID09PSAnXScgPyByb290LnNsaWNlKDEsIC0xKSA6IHJvb3Q7XG4gICAgICAgIHZhciBpbmRleCA9IHBhcnNlSW50KGNsZWFuUm9vdCwgMTApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNOYU4oaW5kZXgpICYmXG4gICAgICAgICAgICByb290ICE9PSBjbGVhblJvb3QgJiZcbiAgICAgICAgICAgIFN0cmluZyhpbmRleCkgPT09IGNsZWFuUm9vdCAmJlxuICAgICAgICAgICAgaW5kZXggPj0gMCAmJlxuICAgICAgICAgICAgKG9wdGlvbnMucGFyc2VBcnJheXMgJiYgaW5kZXggPD0gb3B0aW9ucy5hcnJheUxpbWl0KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIG9iaiA9IFtdO1xuICAgICAgICAgICAgb2JqW2luZGV4XSA9IHBhcnNlT2JqZWN0KGNoYWluLCB2YWwsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW2NsZWFuUm9vdF0gPSBwYXJzZU9iamVjdChjaGFpbiwgdmFsLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgcGFyc2VLZXlzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ0tleXMoZ2l2ZW5LZXksIHZhbCwgb3B0aW9ucykge1xuICAgIGlmICghZ2l2ZW5LZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyYW5zZm9ybSBkb3Qgbm90YXRpb24gdG8gYnJhY2tldCBub3RhdGlvblxuICAgIHZhciBrZXkgPSBvcHRpb25zLmFsbG93RG90cyA/IGdpdmVuS2V5LnJlcGxhY2UoL1xcLihbXi5bXSspL2csICdbJDFdJykgOiBnaXZlbktleTtcblxuICAgIC8vIFRoZSByZWdleCBjaHVua3NcblxuICAgIHZhciBicmFja2V0cyA9IC8oXFxbW15bXFxdXSpdKS87XG4gICAgdmFyIGNoaWxkID0gLyhcXFtbXltcXF1dKl0pL2c7XG5cbiAgICAvLyBHZXQgdGhlIHBhcmVudFxuXG4gICAgdmFyIHNlZ21lbnQgPSBicmFja2V0cy5leGVjKGtleSk7XG4gICAgdmFyIHBhcmVudCA9IHNlZ21lbnQgPyBrZXkuc2xpY2UoMCwgc2VnbWVudC5pbmRleCkgOiBrZXk7XG5cbiAgICAvLyBTdGFzaCB0aGUgcGFyZW50IGlmIGl0IGV4aXN0c1xuXG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGFyZW4ndCB1c2luZyBwbGFpbiBvYmplY3RzLCBvcHRpb25hbGx5IHByZWZpeCBrZXlzXG4gICAgICAgIC8vIHRoYXQgd291bGQgb3ZlcndyaXRlIG9iamVjdCBwcm90b3R5cGUgcHJvcGVydGllc1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHBhcmVudCkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzLnB1c2gocGFyZW50KTtcbiAgICB9XG5cbiAgICAvLyBMb29wIHRocm91Z2ggY2hpbGRyZW4gYXBwZW5kaW5nIHRvIHRoZSBhcnJheSB1bnRpbCB3ZSBoaXQgZGVwdGhcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoKHNlZ21lbnQgPSBjaGlsZC5leGVjKGtleSkpICE9PSBudWxsICYmIGkgPCBvcHRpb25zLmRlcHRoKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzZWdtZW50WzFdLnNsaWNlKDEsIC0xKSkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5wdXNoKHNlZ21lbnRbMV0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSByZW1haW5kZXIsIGp1c3QgYWRkIHdoYXRldmVyIGlzIGxlZnRcblxuICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIGtleXMucHVzaCgnWycgKyBrZXkuc2xpY2Uoc2VnbWVudC5pbmRleCkgKyAnXScpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU9iamVjdChrZXlzLCB2YWwsIG9wdGlvbnMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBvcHRzIHx8IHt9O1xuXG4gICAgaWYgKG9wdGlvbnMuZGVjb2RlciAhPT0gbnVsbCAmJiBvcHRpb25zLmRlY29kZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5kZWNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5kZWxpbWl0ZXIgPSB0eXBlb2Ygb3B0aW9ucy5kZWxpbWl0ZXIgPT09ICdzdHJpbmcnIHx8IHV0aWxzLmlzUmVnRXhwKG9wdGlvbnMuZGVsaW1pdGVyKSA/IG9wdGlvbnMuZGVsaW1pdGVyIDogZGVmYXVsdHMuZGVsaW1pdGVyO1xuICAgIG9wdGlvbnMuZGVwdGggPSB0eXBlb2Ygb3B0aW9ucy5kZXB0aCA9PT0gJ251bWJlcicgPyBvcHRpb25zLmRlcHRoIDogZGVmYXVsdHMuZGVwdGg7XG4gICAgb3B0aW9ucy5hcnJheUxpbWl0ID0gdHlwZW9mIG9wdGlvbnMuYXJyYXlMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRpb25zLmFycmF5TGltaXQgOiBkZWZhdWx0cy5hcnJheUxpbWl0O1xuICAgIG9wdGlvbnMucGFyc2VBcnJheXMgPSBvcHRpb25zLnBhcnNlQXJyYXlzICE9PSBmYWxzZTtcbiAgICBvcHRpb25zLmRlY29kZXIgPSB0eXBlb2Ygb3B0aW9ucy5kZWNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5kZWNvZGVyIDogZGVmYXVsdHMuZGVjb2RlcjtcbiAgICBvcHRpb25zLmFsbG93RG90cyA9IHR5cGVvZiBvcHRpb25zLmFsbG93RG90cyA9PT0gJ2Jvb2xlYW4nID8gb3B0aW9ucy5hbGxvd0RvdHMgOiBkZWZhdWx0cy5hbGxvd0RvdHM7XG4gICAgb3B0aW9ucy5wbGFpbk9iamVjdHMgPSB0eXBlb2Ygb3B0aW9ucy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdGlvbnMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzO1xuICAgIG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzID0gdHlwZW9mIG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzID09PSAnYm9vbGVhbicgPyBvcHRpb25zLmFsbG93UHJvdG90eXBlcyA6IGRlZmF1bHRzLmFsbG93UHJvdG90eXBlcztcbiAgICBvcHRpb25zLnBhcmFtZXRlckxpbWl0ID0gdHlwZW9mIG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPT09ICdudW1iZXInID8gb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCA6IGRlZmF1bHRzLnBhcmFtZXRlckxpbWl0O1xuICAgIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID0gdHlwZW9mIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID09PSAnYm9vbGVhbicgPyBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA6IGRlZmF1bHRzLnN0cmljdE51bGxIYW5kbGluZztcblxuICAgIGlmIChzdHIgPT09ICcnIHx8IHN0ciA9PT0gbnVsbCB8fCB0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgfVxuXG4gICAgdmFyIHRlbXBPYmogPSB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHBhcnNlVmFsdWVzKHN0ciwgb3B0aW9ucykgOiBzdHI7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBrZXlzIGFuZCBzZXR1cCB0aGUgbmV3IG9iamVjdFxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0ZW1wT2JqKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIHZhciBuZXdPYmogPSBwYXJzZUtleXMoa2V5LCB0ZW1wT2JqW2tleV0sIG9wdGlvbnMpO1xuICAgICAgICBvYmogPSB1dGlscy5tZXJnZShvYmosIG5ld09iaiwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHV0aWxzLmNvbXBhY3Qob2JqKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbnZhciBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gICAgYnJhY2tldHM6IGZ1bmN0aW9uIGJyYWNrZXRzKHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1tdJztcbiAgICB9LFxuICAgIGluZGljZXM6IGZ1bmN0aW9uIGluZGljZXMocHJlZml4LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbJyArIGtleSArICddJztcbiAgICB9LFxuICAgIHJlcGVhdDogZnVuY3Rpb24gcmVwZWF0KHByZWZpeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbn07XG5cbnZhciB0b0lTTyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZW5jb2RlOiB0cnVlLFxuICAgIGVuY29kZXI6IHV0aWxzLmVuY29kZSxcbiAgICBlbmNvZGVWYWx1ZXNPbmx5OiBmYWxzZSxcbiAgICBzZXJpYWxpemVEYXRlOiBmdW5jdGlvbiBzZXJpYWxpemVEYXRlKGRhdGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICAgICAgcmV0dXJuIHRvSVNPLmNhbGwoZGF0ZSk7XG4gICAgfSxcbiAgICBza2lwTnVsbHM6IGZhbHNlLFxuICAgIHN0cmljdE51bGxIYW5kbGluZzogZmFsc2Vcbn07XG5cbnZhciBzdHJpbmdpZnkgPSBmdW5jdGlvbiBzdHJpbmdpZnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG4gICAgb2JqZWN0LFxuICAgIHByZWZpeCxcbiAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICBza2lwTnVsbHMsXG4gICAgZW5jb2RlcixcbiAgICBmaWx0ZXIsXG4gICAgc29ydCxcbiAgICBhbGxvd0RvdHMsXG4gICAgc2VyaWFsaXplRGF0ZSxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seVxuKSB7XG4gICAgdmFyIG9iaiA9IG9iamVjdDtcbiAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvYmogPSBmaWx0ZXIocHJlZml4LCBvYmopO1xuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBvYmogPSBzZXJpYWxpemVEYXRlKG9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHN0cmljdE51bGxIYW5kbGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZXIgJiYgIWVuY29kZVZhbHVlc09ubHkgPyBlbmNvZGVyKHByZWZpeCkgOiBwcmVmaXg7XG4gICAgICAgIH1cblxuICAgICAgICBvYmogPSAnJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9iaiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nIHx8IHV0aWxzLmlzQnVmZmVyKG9iaikpIHtcbiAgICAgICAgaWYgKGVuY29kZXIpIHtcbiAgICAgICAgICAgIHZhciBrZXlWYWx1ZSA9IGVuY29kZVZhbHVlc09ubHkgPyBwcmVmaXggOiBlbmNvZGVyKHByZWZpeCk7XG4gICAgICAgICAgICByZXR1cm4gW2Zvcm1hdHRlcihrZXlWYWx1ZSkgKyAnPScgKyBmb3JtYXR0ZXIoZW5jb2RlcihvYmopKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtmb3JtYXR0ZXIocHJlZml4KSArICc9JyArIGZvcm1hdHRlcihTdHJpbmcob2JqKSldO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cblxuICAgIHZhciBvYmpLZXlzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcbiAgICAgICAgb2JqS2V5cyA9IGZpbHRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgICAgIG9iaktleXMgPSBzb3J0ID8ga2V5cy5zb3J0KHNvcnQpIDoga2V5cztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iaktleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbaV07XG5cbiAgICAgICAgaWYgKHNraXBOdWxscyAmJiBvYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4KHByZWZpeCwga2V5KSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KHN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgICAgICBwcmVmaXggKyAoYWxsb3dEb3RzID8gJy4nICsga2V5IDogJ1snICsga2V5ICsgJ10nKSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICAgICAgZW5jb2RlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBvcHRzKSB7XG4gICAgdmFyIG9iaiA9IG9iamVjdDtcbiAgICB2YXIgb3B0aW9ucyA9IG9wdHMgfHwge307XG5cbiAgICBpZiAob3B0aW9ucy5lbmNvZGVyICE9PSBudWxsICYmIG9wdGlvbnMuZW5jb2RlciAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLmVuY29kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICB2YXIgZGVsaW1pdGVyID0gdHlwZW9mIG9wdGlvbnMuZGVsaW1pdGVyID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmRlbGltaXRlciA6IG9wdGlvbnMuZGVsaW1pdGVyO1xuICAgIHZhciBzdHJpY3ROdWxsSGFuZGxpbmcgPSB0eXBlb2Ygb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nO1xuICAgIHZhciBza2lwTnVsbHMgPSB0eXBlb2Ygb3B0aW9ucy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzO1xuICAgIHZhciBlbmNvZGUgPSB0eXBlb2Ygb3B0aW9ucy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlO1xuICAgIHZhciBlbmNvZGVyID0gdHlwZW9mIG9wdGlvbnMuZW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuZW5jb2RlciA6IGRlZmF1bHRzLmVuY29kZXI7XG4gICAgdmFyIHNvcnQgPSB0eXBlb2Ygb3B0aW9ucy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5zb3J0IDogbnVsbDtcbiAgICB2YXIgYWxsb3dEb3RzID0gdHlwZW9mIG9wdGlvbnMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IGZhbHNlIDogb3B0aW9ucy5hbGxvd0RvdHM7XG4gICAgdmFyIHNlcmlhbGl6ZURhdGUgPSB0eXBlb2Ygb3B0aW9ucy5zZXJpYWxpemVEYXRlID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5zZXJpYWxpemVEYXRlIDogZGVmYXVsdHMuc2VyaWFsaXplRGF0ZTtcbiAgICB2YXIgZW5jb2RlVmFsdWVzT25seSA9IHR5cGVvZiBvcHRpb25zLmVuY29kZVZhbHVlc09ubHkgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuZW5jb2RlVmFsdWVzT25seSA6IGRlZmF1bHRzLmVuY29kZVZhbHVlc09ubHk7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZvcm1hdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgb3B0aW9ucy5mb3JtYXQgPSBmb3JtYXRzLmRlZmF1bHQ7XG4gICAgfSBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvcm1hdHMuZm9ybWF0dGVycywgb3B0aW9ucy5mb3JtYXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZm9ybWF0IG9wdGlvbiBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHMuZm9ybWF0dGVyc1tvcHRpb25zLmZvcm1hdF07XG4gICAgdmFyIG9iaktleXM7XG4gICAgdmFyIGZpbHRlcjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBrZXlzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICB2YXIgYXJyYXlGb3JtYXQ7XG4gICAgaWYgKG9wdGlvbnMuYXJyYXlGb3JtYXQgaW4gYXJyYXlQcmVmaXhHZW5lcmF0b3JzKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0aW9ucy5hcnJheUZvcm1hdDtcbiAgICB9IGVsc2UgaWYgKCdpbmRpY2VzJyBpbiBvcHRpb25zKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0aW9ucy5pbmRpY2VzID8gJ2luZGljZXMnIDogJ3JlcGVhdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSAnaW5kaWNlcyc7XG4gICAgfVxuXG4gICAgdmFyIGdlbmVyYXRlQXJyYXlQcmVmaXggPSBhcnJheVByZWZpeEdlbmVyYXRvcnNbYXJyYXlGb3JtYXRdO1xuXG4gICAgaWYgKCFvYmpLZXlzKSB7XG4gICAgICAgIG9iaktleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICAgIG9iaktleXMuc29ydChzb3J0KTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iaktleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbaV07XG5cbiAgICAgICAgaWYgKHNraXBOdWxscyAmJiBvYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoc3RyaW5naWZ5KFxuICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgZW5jb2RlID8gZW5jb2RlciA6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHlcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXMuam9pbihkZWxpbWl0ZXIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBoZXhUYWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICBhcnJheS5wdXNoKCclJyArICgoaSA8IDE2ID8gJzAnIDogJycpICsgaS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn0oKSk7XG5cbmV4cG9ydHMuYXJyYXlUb09iamVjdCA9IGZ1bmN0aW9uIChzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0gb3B0aW9ucyAmJiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVtpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9ialtpXSA9IHNvdXJjZVtpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnRzLm1lcmdlID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgdGFyZ2V0LnB1c2goc291cmNlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMucGxhaW5PYmplY3RzIHx8IG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzIHx8ICFoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W3NvdXJjZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFt0YXJnZXQsIHNvdXJjZV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gW3RhcmdldF0uY29uY2F0KHNvdXJjZSk7XG4gICAgfVxuXG4gICAgdmFyIG1lcmdlVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgIUFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBtZXJnZVRhcmdldCA9IGV4cG9ydHMuYXJyYXlUb09iamVjdCh0YXJnZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkgJiYgQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIHNvdXJjZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpKSB7XG4gICAgICAgICAgICBpZiAoaGFzLmNhbGwodGFyZ2V0LCBpKSkge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRbaV0gJiYgdHlwZW9mIHRhcmdldFtpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gZXhwb3J0cy5tZXJnZSh0YXJnZXRbaV0sIGl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFjYywga2V5KSkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSBleHBvcnRzLm1lcmdlKGFjY1trZXldLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbWVyZ2VUYXJnZXQpO1xufTtcblxuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHIucmVwbGFjZSgvXFwrL2csICcgJykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG59O1xuXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAvLyBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBCcmlhbiBXaGl0ZSAobXNjZGV4KSBmb3IgdGhlIGlvLmpzIGNvcmUgcXVlcnlzdHJpbmcgbGlicmFyeS5cbiAgICAvLyBJdCBoYXMgYmVlbiBhZGFwdGVkIGhlcmUgZm9yIHN0cmljdGVyIGFkaGVyZW5jZSB0byBSRkMgMzk4NlxuICAgIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZyA9IHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gc3RyIDogU3RyaW5nKHN0cik7XG5cbiAgICB2YXIgb3V0ID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjID09PSAweDJEIHx8IC8vIC1cbiAgICAgICAgICAgIGMgPT09IDB4MkUgfHwgLy8gLlxuICAgICAgICAgICAgYyA9PT0gMHg1RiB8fCAvLyBfXG4gICAgICAgICAgICBjID09PSAweDdFIHx8IC8vIH5cbiAgICAgICAgICAgIChjID49IDB4MzAgJiYgYyA8PSAweDM5KSB8fCAvLyAwLTlcbiAgICAgICAgICAgIChjID49IDB4NDEgJiYgYyA8PSAweDVBKSB8fCAvLyBhLXpcbiAgICAgICAgICAgIChjID49IDB4NjEgJiYgYyA8PSAweDdBKSAvLyBBLVpcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBvdXQgKz0gc3RyaW5nLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyBoZXhUYWJsZVtjXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4QzAgfCAoYyA+PiA2KV0gKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID49IDB4RTAwMCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgKGhleFRhYmxlWzB4RTAgfCAoYyA+PiAxMildICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXSArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjICYgMHgzRkYpIDw8IDEwKSB8IChzdHJpbmcuY2hhckNvZGVBdChpKSAmIDB4M0ZGKSk7XG4gICAgICAgIG91dCArPSBoZXhUYWJsZVsweEYwIHwgKGMgPj4gMTgpXSArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gMTIpICYgMHgzRildICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXSArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGVuXG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbmV4cG9ydHMuY29tcGFjdCA9IGZ1bmN0aW9uIChvYmosIHJlZmVyZW5jZXMpIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgdmFyIHJlZnMgPSByZWZlcmVuY2VzIHx8IFtdO1xuICAgIHZhciBsb29rdXAgPSByZWZzLmluZGV4T2Yob2JqKTtcbiAgICBpZiAobG9va3VwICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gcmVmc1tsb29rdXBdO1xuICAgIH1cblxuICAgIHJlZnMucHVzaChvYmopO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICB2YXIgY29tcGFjdGVkID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChvYmpbaV0gJiYgdHlwZW9mIG9ialtpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjb21wYWN0ZWQucHVzaChleHBvcnRzLmNvbXBhY3Qob2JqW2ldLCByZWZzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmpbaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29tcGFjdGVkLnB1c2gob2JqW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21wYWN0ZWQ7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIG9ialtrZXldID0gZXhwb3J0cy5jb21wYWN0KG9ialtrZXldLCByZWZzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnRzLmlzUmVnRXhwID0gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59O1xuXG5leHBvcnRzLmlzQnVmZmVyID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhIShvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopKTtcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIid1c2Ugc3RyaWN0J1xuXG5mdW5jdGlvbiBvbGRCcm93c2VyICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXFxudXNlIGNocm9tZSwgRmlyZUZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMScpXG59XG5cbnZhciBjcnlwdG8gPSBnbG9iYWwuY3J5cHRvIHx8IGdsb2JhbC5tc0NyeXB0b1xuXG5pZiAoY3J5cHRvICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByYW5kb21CeXRlc1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBvbGRCcm93c2VyXG59XG5cbmZ1bmN0aW9uIHJhbmRvbUJ5dGVzIChzaXplLCBjYikge1xuICAvLyBwaGFudG9tanMgbmVlZHMgdG8gdGhyb3dcbiAgaWYgKHNpemUgPiA2NTUzNikgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzJylcbiAgLy8gaW4gY2FzZSBicm93c2VyaWZ5ICBpc24ndCB1c2luZyB0aGUgVWludDhBcnJheSB2ZXJzaW9uXG4gIHZhciByYXdCeXRlcyA9IG5ldyBnbG9iYWwuVWludDhBcnJheShzaXplKVxuXG4gIC8vIFRoaXMgd2lsbCBub3Qgd29yayBpbiBvbGRlciBicm93c2Vycy5cbiAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS93aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlc1xuICBpZiAoc2l6ZSA+IDApIHsgIC8vIGdldFJhbmRvbVZhbHVlcyBmYWlscyBvbiBJRSBpZiBzaXplID09IDBcbiAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHJhd0J5dGVzKVxuICB9XG4gIC8vIHBoYW50b21qcyBkb2Vzbid0IGxpa2UgYSBidWZmZXIgYmVpbmcgcGFzc2VkIGhlcmVcbiAgdmFyIGJ5dGVzID0gbmV3IEJ1ZmZlcihyYXdCeXRlcy5idWZmZXIpXG5cbiAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNiKG51bGwsIGJ5dGVzKVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9kdXBsZXguanMnKTtcbiIsIi8vIGEgZHVwbGV4IHN0cmVhbSBpcyBqdXN0IGEgc3RyZWFtIHRoYXQgaXMgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUuXG4vLyBTaW5jZSBKUyBkb2Vzbid0IGhhdmUgbXVsdGlwbGUgcHJvdG90eXBhbCBpbmhlcml0YW5jZSwgdGhpcyBjbGFzc1xuLy8gcHJvdG90eXBhbGx5IGluaGVyaXRzIGZyb20gUmVhZGFibGUsIGFuZCB0aGVuIHBhcmFzaXRpY2FsbHkgZnJvbVxuLy8gV3JpdGFibGUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgfXJldHVybiBrZXlzO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5tb2R1bGUuZXhwb3J0cyA9IER1cGxleDtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBwcm9jZXNzTmV4dFRpY2sgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIFJlYWRhYmxlID0gcmVxdWlyZSgnLi9fc3RyZWFtX3JlYWRhYmxlJyk7XG52YXIgV3JpdGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fd3JpdGFibGUnKTtcblxudXRpbC5pbmhlcml0cyhEdXBsZXgsIFJlYWRhYmxlKTtcblxudmFyIGtleXMgPSBvYmplY3RLZXlzKFdyaXRhYmxlLnByb3RvdHlwZSk7XG5mb3IgKHZhciB2ID0gMDsgdiA8IGtleXMubGVuZ3RoOyB2KyspIHtcbiAgdmFyIG1ldGhvZCA9IGtleXNbdl07XG4gIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbn1cblxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHJldHVybiBuZXcgRHVwbGV4KG9wdGlvbnMpO1xuXG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIFdyaXRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLndyaXRhYmxlID09PSBmYWxzZSkgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuXG4gIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuYWxsb3dIYWxmT3BlbiA9PT0gZmFsc2UpIHRoaXMuYWxsb3dIYWxmT3BlbiA9IGZhbHNlO1xuXG4gIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xufVxuXG4vLyB0aGUgbm8taGFsZi1vcGVuIGVuZm9yY2VyXG5mdW5jdGlvbiBvbmVuZCgpIHtcbiAgLy8gaWYgd2UgYWxsb3cgaGFsZi1vcGVuIHN0YXRlLCBvciBpZiB0aGUgd3JpdGFibGUgc2lkZSBlbmRlZCxcbiAgLy8gdGhlbiB3ZSdyZSBvay5cbiAgaWYgKHRoaXMuYWxsb3dIYWxmT3BlbiB8fCB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkKSByZXR1cm47XG5cbiAgLy8gbm8gbW9yZSBkYXRhIGNhbiBiZSB3cml0dGVuLlxuICAvLyBCdXQgYWxsb3cgbW9yZSB3cml0ZXMgdG8gaGFwcGVuIGluIHRoaXMgdGljay5cbiAgcHJvY2Vzc05leHRUaWNrKG9uRW5kTlQsIHRoaXMpO1xufVxuXG5mdW5jdGlvbiBvbkVuZE5UKHNlbGYpIHtcbiAgc2VsZi5lbmQoKTtcbn1cblxuZnVuY3Rpb24gZm9yRWFjaCh4cywgZikge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGYoeHNbaV0sIGkpO1xuICB9XG59IiwiLy8gYSBwYXNzdGhyb3VnaCBzdHJlYW0uXG4vLyBiYXNpY2FsbHkganVzdCB0aGUgbW9zdCBtaW5pbWFsIHNvcnQgb2YgVHJhbnNmb3JtIHN0cmVhbS5cbi8vIEV2ZXJ5IHdyaXR0ZW4gY2h1bmsgZ2V0cyBvdXRwdXQgYXMtaXMuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBQYXNzVGhyb3VnaDtcblxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vX3N0cmVhbV90cmFuc2Zvcm0nKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFBhc3NUaHJvdWdoLCBUcmFuc2Zvcm0pO1xuXG5mdW5jdGlvbiBQYXNzVGhyb3VnaChvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXNzVGhyb3VnaCkpIHJldHVybiBuZXcgUGFzc1Rocm91Z2gob3B0aW9ucyk7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cblBhc3NUaHJvdWdoLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY2IobnVsbCwgY2h1bmspO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgcHJvY2Vzc05leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5Jyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBEdXBsZXg7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbnZhciBFRWxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZW1pdHRlciwgdHlwZSkge1xuICByZXR1cm4gZW1pdHRlci5saXN0ZW5lcnModHlwZSkubGVuZ3RoO1xufTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0nKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBidWZmZXJTaGltID0gcmVxdWlyZSgnYnVmZmVyLXNoaW1zJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGRlYnVnVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBkZWJ1ZyA9IHZvaWQgMDtcbmlmIChkZWJ1Z1V0aWwgJiYgZGVidWdVdGlsLmRlYnVnbG9nKSB7XG4gIGRlYnVnID0gZGVidWdVdGlsLmRlYnVnbG9nKCdzdHJlYW0nKTtcbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24gKCkge307XG59XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlckxpc3QgPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdCcpO1xudmFyIFN0cmluZ0RlY29kZXI7XG5cbnV0aWwuaW5oZXJpdHMoUmVhZGFibGUsIFN0cmVhbSk7XG5cbnZhciBrUHJveHlFdmVudHMgPSBbJ2Vycm9yJywgJ2Nsb3NlJywgJ2Rlc3Ryb3knLCAncGF1c2UnLCAncmVzdW1lJ107XG5cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIHN1cmUgdGhhdCBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55XG4gICAgLy8gdXNlcmxhbmQgb25lcy4gIE5FVkVSIERPIFRISVMuIFRoaXMgaXMgaGVyZSBvbmx5IGJlY2F1c2UgdGhpcyBjb2RlIG5lZWRzXG4gICAgLy8gdG8gY29udGludWUgdG8gd29yayB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIE5vZGUuanMgdGhhdCBkbyBub3QgaW5jbHVkZVxuICAgIC8vIHRoZSBwcmVwZW5kTGlzdGVuZXIoKSBtZXRob2QuIFRoZSBnb2FsIGlzIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoaXMgaGFjay5cbiAgICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgZW1pdHRlci5vbihldmVudCwgZm4pO2Vsc2UgaWYgKGlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbik7ZWxzZSBlbWl0dGVyLl9ldmVudHNbZXZlbnRdID0gW2ZuLCBlbWl0dGVyLl9ldmVudHNbZXZlbnRdXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSkge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIG9iamVjdCBzdHJlYW0gZmxhZy4gVXNlZCB0byBtYWtlIHJlYWQobikgaWdub3JlIG4gYW5kIHRvXG4gIC8vIG1ha2UgYWxsIHRoZSBidWZmZXIgbWVyZ2luZyBhbmQgbGVuZ3RoIGNoZWNrcyBnbyBhd2F5XG4gIHRoaXMub2JqZWN0TW9kZSA9ICEhb3B0aW9ucy5vYmplY3RNb2RlO1xuXG4gIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBEdXBsZXgpIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIW9wdGlvbnMucmVhZGFibGVPYmplY3RNb2RlO1xuXG4gIC8vIHRoZSBwb2ludCBhdCB3aGljaCBpdCBzdG9wcyBjYWxsaW5nIF9yZWFkKCkgdG8gZmlsbCB0aGUgYnVmZmVyXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgXCJkb24ndCBjYWxsIF9yZWFkIHByZWVtcHRpdmVseSBldmVyXCJcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaHdtIHx8IGh3bSA9PT0gMCA/IGh3bSA6IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSB+fnRoaXMuaGlnaFdhdGVyTWFyaztcblxuICAvLyBBIGxpbmtlZCBsaXN0IGlzIHVzZWQgdG8gc3RvcmUgZGF0YSBjaHVua3MgaW5zdGVhZCBvZiBhbiBhcnJheSBiZWNhdXNlIHRoZVxuICAvLyBsaW5rZWQgbGlzdCBjYW4gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGJlZ2lubmluZyBmYXN0ZXIgdGhhblxuICAvLyBhcnJheS5zaGlmdCgpXG4gIHRoaXMuYnVmZmVyID0gbmV3IEJ1ZmZlckxpc3QoKTtcbiAgdGhpcy5sZW5ndGggPSAwO1xuICB0aGlzLnBpcGVzID0gbnVsbDtcbiAgdGhpcy5waXBlc0NvdW50ID0gMDtcbiAgdGhpcy5mbG93aW5nID0gbnVsbDtcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICB0aGlzLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWFkaW5nID0gZmFsc2U7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gd2hlbmV2ZXIgd2UgcmV0dXJuIG51bGwsIHRoZW4gd2Ugc2V0IGEgZmxhZyB0byBzYXlcbiAgLy8gdGhhdCB3ZSdyZSBhd2FpdGluZyBhICdyZWFkYWJsZScgZXZlbnQgZW1pc3Npb24uXG4gIHRoaXMubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGVMaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdGhpcy5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyB3aGVuIHBpcGluZywgd2Ugb25seSBjYXJlIGFib3V0ICdyZWFkYWJsZScgZXZlbnRzIHRoYXQgaGFwcGVuXG4gIC8vIGFmdGVyIHJlYWQoKWluZyBhbGwgdGhlIGJ5dGVzIGFuZCBub3QgZ2V0dGluZyBhbnkgcHVzaGJhY2suXG4gIHRoaXMucmFuT3V0ID0gZmFsc2U7XG5cbiAgLy8gdGhlIG51bWJlciBvZiB3cml0ZXJzIHRoYXQgYXJlIGF3YWl0aW5nIGEgZHJhaW4gZXZlbnQgaW4gLnBpcGUoKXNcbiAgdGhpcy5hd2FpdERyYWluID0gMDtcblxuICAvLyBpZiB0cnVlLCBhIG1heWJlUmVhZE1vcmUgaGFzIGJlZW4gc2NoZWR1bGVkXG4gIHRoaXMucmVhZGluZ01vcmUgPSBmYWxzZTtcblxuICB0aGlzLmRlY29kZXIgPSBudWxsO1xuICB0aGlzLmVuY29kaW5nID0gbnVsbDtcbiAgaWYgKG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICAgIHRoaXMuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKG9wdGlvbnMuZW5jb2RpbmcpO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKSByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO1xuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUgPSBuZXcgUmVhZGFibGVTdGF0ZShvcHRpb25zLCB0aGlzKTtcblxuICAvLyBsZWdhY3lcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMucmVhZCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZDtcblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gTWFudWFsbHkgc2hvdmUgc29tZXRoaW5nIGludG8gdGhlIHJlYWQoKSBidWZmZXIuXG4vLyBUaGlzIHJldHVybnMgdHJ1ZSBpZiB0aGUgaGlnaFdhdGVyTWFyayBoYXMgbm90IGJlZW4gaGl0IHlldCxcbi8vIHNpbWlsYXIgdG8gaG93IFdyaXRhYmxlLndyaXRlKCkgcmV0dXJucyB0cnVlIGlmIHlvdSBzaG91bGRcbi8vIHdyaXRlKCkgc29tZSBtb3JlLlxuUmVhZGFibGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICBpZiAoZW5jb2RpbmcgIT09IHN0YXRlLmVuY29kaW5nKSB7XG4gICAgICBjaHVuayA9IGJ1ZmZlclNoaW0uZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgZW5jb2RpbmcgPSAnJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBmYWxzZSk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKVxuUmVhZGFibGUucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCAnJywgdHJ1ZSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQpIHtcbiAgdmFyIGVyID0gY2h1bmtJbnZhbGlkKHN0YXRlLCBjaHVuayk7XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfSBlbHNlIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgICBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpO1xuICB9IGVsc2UgaWYgKHN0YXRlLm9iamVjdE1vZGUgfHwgY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkge1xuICAgIGlmIChzdGF0ZS5lbmRlZCAmJiAhYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoJ3N0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GJyk7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZEVtaXR0ZWQgJiYgYWRkVG9Gcm9udCkge1xuICAgICAgdmFyIF9lID0gbmV3IEVycm9yKCdzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCcpO1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgX2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc2tpcEFkZDtcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFhZGRUb0Zyb250ICYmICFlbmNvZGluZykge1xuICAgICAgICBjaHVuayA9IHN0YXRlLmRlY29kZXIud3JpdGUoY2h1bmspO1xuICAgICAgICBza2lwQWRkID0gIXN0YXRlLm9iamVjdE1vZGUgJiYgY2h1bmsubGVuZ3RoID09PSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFkZFRvRnJvbnQpIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcblxuICAgICAgLy8gRG9uJ3QgYWRkIHRvIHRoZSBidWZmZXIgaWYgd2UndmUgZGVjb2RlZCB0byBhbiBlbXB0eSBzdHJpbmcgY2h1bmsgYW5kXG4gICAgICAvLyB3ZSdyZSBub3QgaW4gb2JqZWN0IG1vZGVcbiAgICAgIGlmICghc2tpcEFkZCkge1xuICAgICAgICAvLyBpZiB3ZSB3YW50IHRoZSBkYXRhIG5vdywganVzdCBlbWl0IGl0LlxuICAgICAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMpIHtcbiAgICAgICAgICBzdHJlYW0uZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB1cGRhdGUgdGhlIGJ1ZmZlciBpbmZvLlxuICAgICAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICBpZiAoYWRkVG9Gcm9udCkgc3RhdGUuYnVmZmVyLnVuc2hpZnQoY2h1bmspO2Vsc2Ugc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSkgZW1pdFJlYWRhYmxlKHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gbmVlZE1vcmVEYXRhKHN0YXRlKTtcbn1cblxuLy8gaWYgaXQncyBwYXN0IHRoZSBoaWdoIHdhdGVyIG1hcmssIHdlIGNhbiBwdXNoIGluIHNvbWUgbW9yZS5cbi8vIEFsc28sIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXQsIHdlIGNhbiBzdGFuZCBzb21lXG4vLyBtb3JlIGJ5dGVzLiAgVGhpcyBpcyB0byB3b3JrIGFyb3VuZCBjYXNlcyB3aGVyZSBod209MCxcbi8vIHN1Y2ggYXMgdGhlIHJlcGwuICBBbHNvLCBpZiB0aGUgcHVzaCgpIHRyaWdnZXJlZCBhXG4vLyByZWFkYWJsZSBldmVudCwgYW5kIHRoZSB1c2VyIGNhbGxlZCByZWFkKGxhcmdlTnVtYmVyKSBzdWNoIHRoYXRcbi8vIG5lZWRSZWFkYWJsZSB3YXMgc2V0LCB0aGVuIHdlIG91Z2h0IHRvIHB1c2ggbW9yZSwgc28gdGhhdCBhbm90aGVyXG4vLyAncmVhZGFibGUnIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkLlxuZnVuY3Rpb24gbmVlZE1vcmVEYXRhKHN0YXRlKSB7XG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLm5lZWRSZWFkYWJsZSB8fCBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuUmVhZGFibGUucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24gKGVuYykge1xuICBpZiAoIVN0cmluZ0RlY29kZXIpIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2Rlci8nKS5TdHJpbmdEZWNvZGVyO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nID0gZW5jO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIERvbid0IHJhaXNlIHRoZSBod20gPiA4TUJcbnZhciBNQVhfSFdNID0gMHg4MDAwMDA7XG5mdW5jdGlvbiBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKSB7XG4gIGlmIChuID49IE1BWF9IV00pIHtcbiAgICBuID0gTUFYX0hXTTtcbiAgfSBlbHNlIHtcbiAgICAvLyBHZXQgdGhlIG5leHQgaGlnaGVzdCBwb3dlciBvZiAyIHRvIHByZXZlbnQgaW5jcmVhc2luZyBod20gZXhjZXNzaXZlbHkgaW5cbiAgICAvLyB0aW55IGFtb3VudHNcbiAgICBuLS07XG4gICAgbiB8PSBuID4+PiAxO1xuICAgIG4gfD0gbiA+Pj4gMjtcbiAgICBuIHw9IG4gPj4+IDQ7XG4gICAgbiB8PSBuID4+PiA4O1xuICAgIG4gfD0gbiA+Pj4gMTY7XG4gICAgbisrO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIGlubGluYWJsZSwgc28gcGxlYXNlIHRha2UgY2FyZSB3aGVuIG1ha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgZnVuY3Rpb24gYm9keS5cbmZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobiwgc3RhdGUpIHtcbiAgaWYgKG4gPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHJldHVybiAwO1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0dXJuIDE7XG4gIGlmIChuICE9PSBuKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lXG4gICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoKSByZXR1cm4gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg7ZWxzZSByZXR1cm4gc3RhdGUubGVuZ3RoO1xuICB9XG4gIC8vIElmIHdlJ3JlIGFza2luZyBmb3IgbW9yZSB0aGFuIHRoZSBjdXJyZW50IGh3bSwgdGhlbiByYWlzZSB0aGUgaHdtLlxuICBpZiAobiA+IHN0YXRlLmhpZ2hXYXRlck1hcmspIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgaWYgKG4gPD0gc3RhdGUubGVuZ3RoKSByZXR1cm4gbjtcbiAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2hcbiAgaWYgKCFzdGF0ZS5lbmRlZCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbn1cblxuLy8geW91IGNhbiBvdmVycmlkZSBlaXRoZXIgdGhpcyBtZXRob2QsIG9yIHRoZSBhc3luYyBfcmVhZChuKSBiZWxvdy5cblJlYWRhYmxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgZGVidWcoJ3JlYWQnLCBuKTtcbiAgbiA9IHBhcnNlSW50KG4sIDEwKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIG5PcmlnID0gbjtcblxuICBpZiAobiAhPT0gMCkgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG5cbiAgLy8gaWYgd2UncmUgZG9pbmcgcmVhZCgwKSB0byB0cmlnZ2VyIGEgcmVhZGFibGUgZXZlbnQsIGJ1dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYSBidW5jaCBvZiBkYXRhIGluIHRoZSBidWZmZXIsIHRoZW4ganVzdCB0cmlnZ2VyXG4gIC8vIHRoZSAncmVhZGFibGUnIGV2ZW50IGFuZCBtb3ZlIG9uLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5uZWVkUmVhZGFibGUgJiYgKHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8IHN0YXRlLmVuZGVkKSkge1xuICAgIGRlYnVnKCdyZWFkOiBlbWl0UmVhZGFibGUnLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtlbHNlIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG4gPSBob3dNdWNoVG9SZWFkKG4sIHN0YXRlKTtcblxuICAvLyBpZiB3ZSd2ZSBlbmRlZCwgYW5kIHdlJ3JlIG5vdyBjbGVhciwgdGhlbiBmaW5pc2ggaXQgdXAuXG4gIGlmIChuID09PSAwICYmIHN0YXRlLmVuZGVkKSB7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBbGwgdGhlIGFjdHVhbCBjaHVuayBnZW5lcmF0aW9uIGxvZ2ljIG5lZWRzIHRvIGJlXG4gIC8vICpiZWxvdyogdGhlIGNhbGwgdG8gX3JlYWQuICBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2VydGFpblxuICAvLyBzeW50aGV0aWMgc3RyZWFtIGNhc2VzLCBzdWNoIGFzIHBhc3N0aHJvdWdoIHN0cmVhbXMsIF9yZWFkXG4gIC8vIG1heSBiZSBhIGNvbXBsZXRlbHkgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdoaWNoIG1heSBjaGFuZ2VcbiAgLy8gdGhlIHN0YXRlIG9mIHRoZSByZWFkIGJ1ZmZlciwgcHJvdmlkaW5nIGVub3VnaCBkYXRhIHdoZW5cbiAgLy8gYmVmb3JlIHRoZXJlIHdhcyAqbm90KiBlbm91Z2guXG4gIC8vXG4gIC8vIFNvLCB0aGUgc3RlcHMgYXJlOlxuICAvLyAxLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHN0YXRlIG9mIHRoaW5ncyB3aWxsIGJlIGFmdGVyIHdlIGRvXG4gIC8vIGEgcmVhZCBmcm9tIHRoZSBidWZmZXIuXG4gIC8vXG4gIC8vIDIuIElmIHRoYXQgcmVzdWx0aW5nIHN0YXRlIHdpbGwgdHJpZ2dlciBhIF9yZWFkLCB0aGVuIGNhbGwgX3JlYWQuXG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1heSBiZSBhc3luY2hyb25vdXMsIG9yIHN5bmNocm9ub3VzLiAgWWVzLCBpdCBpc1xuICAvLyBkZWVwbHkgdWdseSB0byB3cml0ZSBBUElzIHRoaXMgd2F5LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW5cbiAgLy8gdGhhdCB0aGUgUmVhZGFibGUgY2xhc3Mgc2hvdWxkIGJlaGF2ZSBpbXByb3Blcmx5LCBhcyBzdHJlYW1zIGFyZVxuICAvLyBkZXNpZ25lZCB0byBiZSBzeW5jL2FzeW5jIGFnbm9zdGljLlxuICAvLyBUYWtlIG5vdGUgaWYgdGhlIF9yZWFkIGNhbGwgaXMgc3luYyBvciBhc3luYyAoaWUsIGlmIHRoZSByZWFkIGNhbGxcbiAgLy8gaGFzIHJldHVybmVkIHlldCksIHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCBpdCdzIHNhZmUgdG8gZW1pdFxuICAvLyAncmVhZGFibGUnIGV0Yy5cbiAgLy9cbiAgLy8gMy4gQWN0dWFsbHkgcHVsbCB0aGUgcmVxdWVzdGVkIGNodW5rcyBvdXQgb2YgdGhlIGJ1ZmZlciBhbmQgcmV0dXJuLlxuXG4gIC8vIGlmIHdlIG5lZWQgYSByZWFkYWJsZSBldmVudCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgcmVhZGluZy5cbiAgdmFyIGRvUmVhZCA9IHN0YXRlLm5lZWRSZWFkYWJsZTtcbiAgZGVidWcoJ25lZWQgcmVhZGFibGUnLCBkb1JlYWQpO1xuXG4gIC8vIGlmIHdlIGN1cnJlbnRseSBoYXZlIGxlc3MgdGhhbiB0aGUgaGlnaFdhdGVyTWFyaywgdGhlbiBhbHNvIHJlYWQgc29tZVxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwIHx8IHN0YXRlLmxlbmd0aCAtIG4gPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZG9SZWFkID0gdHJ1ZTtcbiAgICBkZWJ1ZygnbGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsnLCBkb1JlYWQpO1xuICB9XG5cbiAgLy8gaG93ZXZlciwgaWYgd2UndmUgZW5kZWQsIHRoZW4gdGhlcmUncyBubyBwb2ludCwgYW5kIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LlxuICBpZiAoc3RhdGUuZW5kZWQgfHwgc3RhdGUucmVhZGluZykge1xuICAgIGRvUmVhZCA9IGZhbHNlO1xuICAgIGRlYnVnKCdyZWFkaW5nIG9yIGVuZGVkJywgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZygnZG8gcmVhZCcpO1xuICAgIHN0YXRlLnJlYWRpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnN5bmMgPSB0cnVlO1xuICAgIC8vIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IHplcm8sIHRoZW4gd2UgKm5lZWQqIGEgcmVhZGFibGUgZXZlbnQuXG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvLyBjYWxsIGludGVybmFsIHJlYWQgbWV0aG9kXG4gICAgdGhpcy5fcmVhZChzdGF0ZS5oaWdoV2F0ZXJNYXJrKTtcbiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7XG4gICAgLy8gSWYgX3JlYWQgcHVzaGVkIGRhdGEgc3luY2hyb25vdXNseSwgdGhlbiBgcmVhZGluZ2Agd2lsbCBiZSBmYWxzZSxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgbXVjaCBkYXRhIHdlIGNhbiByZXR1cm4gdG8gdGhlIHVzZXIuXG4gICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSBuID0gaG93TXVjaFRvUmVhZChuT3JpZywgc3RhdGUpO1xuICB9XG5cbiAgdmFyIHJldDtcbiAgaWYgKG4gPiAwKSByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7ZWxzZSByZXQgPSBudWxsO1xuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIG4gPSAwO1xuICB9IGVsc2Uge1xuICAgIHN0YXRlLmxlbmd0aCAtPSBuO1xuICB9XG5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgdHJpZWQgdG8gcmVhZCgpIHBhc3QgdGhlIEVPRiwgdGhlbiBlbWl0IGVuZCBvbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmIChuT3JpZyAhPT0gbiAmJiBzdGF0ZS5lbmRlZCkgZW5kUmVhZGFibGUodGhpcyk7XG4gIH1cblxuICBpZiAocmV0ICE9PSBudWxsKSB0aGlzLmVtaXQoJ2RhdGEnLCByZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKSB7XG4gIHZhciBlciA9IG51bGw7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGNodW5rKSAmJiB0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICByZXR1cm4gZXI7XG59XG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUuZW5kZWQpIHJldHVybjtcbiAgaWYgKHN0YXRlLmRlY29kZXIpIHtcbiAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgIHN0YXRlLmxlbmd0aCArPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuXG4gIC8vIGVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgaWYgKCFzdGF0ZS5lbWl0dGVkUmVhZGFibGUpIHtcbiAgICBkZWJ1ZygnZW1pdFJlYWRhYmxlJywgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBpZiAoc3RhdGUuc3luYykgcHJvY2Vzc05leHRUaWNrKGVtaXRSZWFkYWJsZV8sIHN0cmVhbSk7ZWxzZSBlbWl0UmVhZGFibGVfKHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlXyhzdHJlYW0pIHtcbiAgZGVidWcoJ2VtaXQgcmVhZGFibGUnKTtcbiAgc3RyZWFtLmVtaXQoJ3JlYWRhYmxlJyk7XG4gIGZsb3coc3RyZWFtKTtcbn1cblxuLy8gYXQgdGhpcyBwb2ludCwgdGhlIHVzZXIgaGFzIHByZXN1bWFibHkgc2VlbiB0aGUgJ3JlYWRhYmxlJyBldmVudCxcbi8vIGFuZCBjYWxsZWQgcmVhZCgpIHRvIGNvbnN1bWUgc29tZSBkYXRhLiAgdGhhdCBtYXkgaGF2ZSB0cmlnZ2VyZWRcbi8vIGluIHR1cm4gYW5vdGhlciBfcmVhZChuKSBjYWxsLCBpbiB3aGljaCBjYXNlIHJlYWRpbmcgPSB0cnVlIGlmXG4vLyBpdCdzIGluIHByb2dyZXNzLlxuLy8gSG93ZXZlciwgaWYgd2UncmUgbm90IGVuZGVkLCBvciByZWFkaW5nLCBhbmQgdGhlIGxlbmd0aCA8IGh3bSxcbi8vIHRoZW4gZ28gYWhlYWQgYW5kIHRyeSB0byByZWFkIHNvbWUgbW9yZSBwcmVlbXB0aXZlbHkuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSkge1xuICAgIHN0YXRlLnJlYWRpbmdNb3JlID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2sobWF5YmVSZWFkTW9yZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIGxlbiA9IHN0YXRlLmxlbmd0aDtcbiAgd2hpbGUgKCFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5lbmRlZCAmJiBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrKSB7XG4gICAgZGVidWcoJ21heWJlUmVhZE1vcmUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gICAgaWYgKGxlbiA9PT0gc3RhdGUubGVuZ3RoKVxuICAgICAgLy8gZGlkbid0IGdldCBhbnkgZGF0YSwgc3RvcCBzcGlubmluZy5cbiAgICAgIGJyZWFrO2Vsc2UgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB9XG4gIHN0YXRlLnJlYWRpbmdNb3JlID0gZmFsc2U7XG59XG5cbi8vIGFic3RyYWN0IG1ldGhvZC4gIHRvIGJlIG92ZXJyaWRkZW4gaW4gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gY2xhc3Nlcy5cbi8vIGNhbGwgY2IoZXIsIGRhdGEpIHdoZXJlIGRhdGEgaXMgPD0gbiBpbiBsZW5ndGguXG4vLyBmb3IgdmlydHVhbCAobm9uLXN0cmluZywgbm9uLWJ1ZmZlcikgc3RyZWFtcywgXCJsZW5ndGhcIiBpcyBzb21ld2hhdFxuLy8gYXJiaXRyYXJ5LCBhbmQgcGVyaGFwcyBub3QgdmVyeSBtZWFuaW5nZnVsLlxuUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQnKSk7XG59O1xuXG5SZWFkYWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBwaXBlT3B0cykge1xuICB2YXIgc3JjID0gdGhpcztcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBzd2l0Y2ggKHN0YXRlLnBpcGVzQ291bnQpIHtcbiAgICBjYXNlIDA6XG4gICAgICBzdGF0ZS5waXBlcyA9IGRlc3Q7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6XG4gICAgICBzdGF0ZS5waXBlcyA9IFtzdGF0ZS5waXBlcywgZGVzdF07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHN0YXRlLnBpcGVzQ291bnQgKz0gMTtcbiAgZGVidWcoJ3BpcGUgY291bnQ9JWQgb3B0cz0laicsIHN0YXRlLnBpcGVzQ291bnQsIHBpcGVPcHRzKTtcblxuICB2YXIgZG9FbmQgPSAoIXBpcGVPcHRzIHx8IHBpcGVPcHRzLmVuZCAhPT0gZmFsc2UpICYmIGRlc3QgIT09IHByb2Nlc3Muc3Rkb3V0ICYmIGRlc3QgIT09IHByb2Nlc3Muc3RkZXJyO1xuXG4gIHZhciBlbmRGbiA9IGRvRW5kID8gb25lbmQgOiBjbGVhbnVwO1xuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkgcHJvY2Vzc05leHRUaWNrKGVuZEZuKTtlbHNlIHNyYy5vbmNlKCdlbmQnLCBlbmRGbik7XG5cbiAgZGVzdC5vbigndW5waXBlJywgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSkge1xuICAgIGRlYnVnKCdvbnVucGlwZScpO1xuICAgIGlmIChyZWFkYWJsZSA9PT0gc3JjKSB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgZGVidWcoJ29uZW5kJyk7XG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG4gIC8vIHdoZW4gdGhlIGRlc3QgZHJhaW5zLCBpdCByZWR1Y2VzIHRoZSBhd2FpdERyYWluIGNvdW50ZXJcbiAgLy8gb24gdGhlIHNvdXJjZS4gIFRoaXMgd291bGQgYmUgbW9yZSBlbGVnYW50IHdpdGggYSAub25jZSgpXG4gIC8vIGhhbmRsZXIgaW4gZmxvdygpLCBidXQgYWRkaW5nIGFuZCByZW1vdmluZyByZXBlYXRlZGx5IGlzXG4gIC8vIHRvbyBzbG93LlxuICB2YXIgb25kcmFpbiA9IHBpcGVPbkRyYWluKHNyYyk7XG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG5cbiAgdmFyIGNsZWFuZWRVcCA9IGZhbHNlO1xuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGRlYnVnKCdjbGVhbnVwJyk7XG4gICAgLy8gY2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgb25kcmFpbik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbmRhdGEpO1xuXG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIGlmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gJiYgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSkgb25kcmFpbigpO1xuICB9XG5cbiAgLy8gSWYgdGhlIHVzZXIgcHVzaGVzIG1vcmUgZGF0YSB3aGlsZSB3ZSdyZSB3cml0aW5nIHRvIGRlc3QgdGhlbiB3ZSdsbCBlbmQgdXBcbiAgLy8gaW4gb25kYXRhIGFnYWluLiBIb3dldmVyLCB3ZSBvbmx5IHdhbnQgdG8gaW5jcmVhc2UgYXdhaXREcmFpbiBvbmNlIGJlY2F1c2VcbiAgLy8gZGVzdCB3aWxsIG9ubHkgZW1pdCBvbmUgJ2RyYWluJyBldmVudCBmb3IgdGhlIG11bHRpcGxlIHdyaXRlcy5cbiAgLy8gPT4gSW50cm9kdWNlIGEgZ3VhcmQgb24gaW5jcmVhc2luZyBhd2FpdERyYWluLlxuICB2YXIgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICBzcmMub24oJ2RhdGEnLCBvbmRhdGEpO1xuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBkZWJ1Zygnb25kYXRhJyk7XG4gICAgaW5jcmVhc2VkQXdhaXREcmFpbiA9IGZhbHNlO1xuICAgIHZhciByZXQgPSBkZXN0LndyaXRlKGNodW5rKTtcbiAgICBpZiAoZmFsc2UgPT09IHJldCAmJiAhaW5jcmVhc2VkQXdhaXREcmFpbikge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgdW5waXBlZCBkdXJpbmcgYGRlc3Qud3JpdGUoKWAsIGl0IGlzIHBvc3NpYmxlXG4gICAgICAvLyB0byBnZXQgc3R1Y2sgaW4gYSBwZXJtYW5lbnRseSBwYXVzZWQgc3RhdGUgaWYgdGhhdCB3cml0ZVxuICAgICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAgIC8vID0+IENoZWNrIHdoZXRoZXIgYGRlc3RgIGlzIHN0aWxsIGEgcGlwaW5nIGRlc3RpbmF0aW9uLlxuICAgICAgaWYgKChzdGF0ZS5waXBlc0NvdW50ID09PSAxICYmIHN0YXRlLnBpcGVzID09PSBkZXN0IHx8IHN0YXRlLnBpcGVzQ291bnQgPiAxICYmIGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpICE9PSAtMSkgJiYgIWNsZWFuZWRVcCkge1xuICAgICAgICBkZWJ1ZygnZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlJywgc3JjLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4pO1xuICAgICAgICBzcmMuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbisrO1xuICAgICAgICBpbmNyZWFzZWRBd2FpdERyYWluID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHNyYy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBob3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGVyKTtcbiAgICB1bnBpcGUoKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGlmIChFRWxpc3RlbmVyQ291bnQoZGVzdCwgJ2Vycm9yJykgPT09IDApIGRlc3QuZW1pdCgnZXJyb3InLCBlcik7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIHVzZXJsYW5kIG9uZXMuXG4gIHByZXBlbmRMaXN0ZW5lcihkZXN0LCAnZXJyb3InLCBvbmVycm9yKTtcblxuICAvLyBCb3RoIGNsb3NlIGFuZCBmaW5pc2ggc2hvdWxkIHRyaWdnZXIgdW5waXBlLCBidXQgb25seSBvbmNlLlxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2Nsb3NlJywgb25jbG9zZSk7XG4gIGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIGRlYnVnKCdvbmZpbmlzaCcpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25jbG9zZSk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG5cbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKCd1bnBpcGUnKTtcbiAgICBzcmMudW5waXBlKGRlc3QpO1xuICB9XG5cbiAgLy8gdGVsbCB0aGUgZGVzdCB0aGF0IGl0J3MgYmVpbmcgcGlwZWQgdG9cbiAgZGVzdC5lbWl0KCdwaXBlJywgc3JjKTtcblxuICAvLyBzdGFydCB0aGUgZmxvdyBpZiBpdCBoYXNuJ3QgYmVlbiBzdGFydGVkIGFscmVhZHkuXG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwaXBlIHJlc3VtZScpO1xuICAgIHNyYy5yZXN1bWUoKTtcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufTtcblxuZnVuY3Rpb24gcGlwZU9uRHJhaW4oc3JjKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXRlID0gc3JjLl9yZWFkYWJsZVN0YXRlO1xuICAgIGRlYnVnKCdwaXBlT25EcmFpbicsIHN0YXRlLmF3YWl0RHJhaW4pO1xuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluKSBzdGF0ZS5hd2FpdERyYWluLS07XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4gPT09IDAgJiYgRUVsaXN0ZW5lckNvdW50KHNyYywgJ2RhdGEnKSkge1xuICAgICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgICBmbG93KHNyYyk7XG4gICAgfVxuICB9O1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUudW5waXBlID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBpZiB3ZSdyZSBub3QgcGlwaW5nIGFueXdoZXJlLCB0aGVuIGRvIG5vdGhpbmcuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAwKSByZXR1cm4gdGhpcztcblxuICAvLyBqdXN0IG9uZSBkZXN0aW5hdGlvbi4gIG1vc3QgY29tbW9uIGNhc2UuXG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSB7XG4gICAgLy8gcGFzc2VkIGluIG9uZSwgYnV0IGl0J3Mgbm90IHRoZSByaWdodCBvbmUuXG4gICAgaWYgKGRlc3QgJiYgZGVzdCAhPT0gc3RhdGUucGlwZXMpIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKCFkZXN0KSBkZXN0ID0gc3RhdGUucGlwZXM7XG5cbiAgICAvLyBnb3QgYSBtYXRjaC5cbiAgICBzdGF0ZS5waXBlcyA9IG51bGw7XG4gICAgc3RhdGUucGlwZXNDb3VudCA9IDA7XG4gICAgc3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIGlmIChkZXN0KSBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gc2xvdyBjYXNlLiBtdWx0aXBsZSBwaXBlIGRlc3RpbmF0aW9ucy5cblxuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIHZhciBkZXN0cyA9IHN0YXRlLnBpcGVzO1xuICAgIHZhciBsZW4gPSBzdGF0ZS5waXBlc0NvdW50O1xuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBkZXN0c1tpXS5lbWl0KCd1bnBpcGUnLCB0aGlzKTtcbiAgICB9cmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB0cnkgdG8gZmluZCB0aGUgcmlnaHQgb25lLlxuICB2YXIgaW5kZXggPSBpbmRleE9mKHN0YXRlLnBpcGVzLCBkZXN0KTtcbiAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuIHRoaXM7XG5cbiAgc3RhdGUucGlwZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgc3RhdGUucGlwZXNDb3VudCAtPSAxO1xuICBpZiAoc3RhdGUucGlwZXNDb3VudCA9PT0gMSkgc3RhdGUucGlwZXMgPSBzdGF0ZS5waXBlc1swXTtcblxuICBkZXN0LmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmdcblJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldiwgZm4pIHtcbiAgdmFyIHJlcyA9IFN0cmVhbS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldiwgZm4pO1xuXG4gIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgLy8gU3RhcnQgZmxvd2luZyBvbiBuZXh0IHRpY2sgaWYgc3RyZWFtIGlzbid0IGV4cGxpY2l0bHkgcGF1c2VkXG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyAhPT0gZmFsc2UpIHRoaXMucmVzdW1lKCk7XG4gIH0gZWxzZSBpZiAoZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiAhc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcpIHtcbiAgICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgICAgIHByb2Nlc3NOZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5SZWFkYWJsZS5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBSZWFkYWJsZS5wcm90b3R5cGUub247XG5cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZygncmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwJyk7XG4gIHNlbGYucmVhZCgwKTtcbn1cblxuLy8gcGF1c2UoKSBhbmQgcmVzdW1lKCkgYXJlIHJlbW5hbnRzIG9mIHRoZSBsZWdhY3kgcmVhZGFibGUgc3RyZWFtIEFQSVxuLy8gSWYgdGhlIHVzZXIgdXNlcyB0aGVtLCB0aGVuIHN3aXRjaCBpbnRvIG9sZCBtb2RlLlxuUmVhZGFibGUucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3Jlc3VtZScpO1xuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuICAgIHJlc3VtZSh0aGlzLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiByZXN1bWUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlc3VtZVNjaGVkdWxlZCkge1xuICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lIHJlYWQgMCcpO1xuICAgIHN0cmVhbS5yZWFkKDApO1xuICB9XG5cbiAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHN0YXRlLmF3YWl0RHJhaW4gPSAwO1xuICBzdHJlYW0uZW1pdCgncmVzdW1lJyk7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHN0cmVhbS5yZWFkKDApO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKCdjYWxsIHBhdXNlIGZsb3dpbmc9JWonLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpO1xuICBpZiAoZmFsc2UgIT09IHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKCdwYXVzZScpO1xuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZsb3coc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoJ2Zsb3cnLCBzdGF0ZS5mbG93aW5nKTtcbiAgd2hpbGUgKHN0YXRlLmZsb3dpbmcgJiYgc3RyZWFtLnJlYWQoKSAhPT0gbnVsbCkge31cbn1cblxuLy8gd3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIHZhciBwYXVzZWQgPSBmYWxzZTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGRlYnVnKCd3cmFwcGVkIGVuZCcpO1xuICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFzdGF0ZS5lbmRlZCkge1xuICAgICAgdmFyIGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICAgIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHNlbGYucHVzaChjaHVuayk7XG4gICAgfVxuXG4gICAgc2VsZi5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBkYXRhJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIpIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG5cbiAgICAvLyBkb24ndCBza2lwIG92ZXIgZmFsc3kgdmFsdWVzIGluIG9iamVjdE1vZGVcbiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSAmJiAoY2h1bmsgPT09IG51bGwgfHwgY2h1bmsgPT09IHVuZGVmaW5lZCkpIHJldHVybjtlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiAoIWNodW5rIHx8ICFjaHVuay5sZW5ndGgpKSByZXR1cm47XG5cbiAgICB2YXIgcmV0ID0gc2VsZi5wdXNoKGNodW5rKTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gcHJveHkgYWxsIHRoZSBvdGhlciBtZXRob2RzLlxuICAvLyBpbXBvcnRhbnQgd2hlbiB3cmFwcGluZyBmaWx0ZXJzIGFuZCBkdXBsZXhlcy5cbiAgZm9yICh2YXIgaSBpbiBzdHJlYW0pIHtcbiAgICBpZiAodGhpc1tpXSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzdHJlYW1baV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNbaV0gPSBmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmVhbVttZXRob2RdLmFwcGx5KHN0cmVhbSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0oaSk7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJveHkgY2VydGFpbiBpbXBvcnRhbnQgZXZlbnRzLlxuICBmb3IgKHZhciBuID0gMDsgbiA8IGtQcm94eUV2ZW50cy5sZW5ndGg7IG4rKykge1xuICAgIHN0cmVhbS5vbihrUHJveHlFdmVudHNbbl0sIHNlbGYuZW1pdC5iaW5kKHNlbGYsIGtQcm94eUV2ZW50c1tuXSkpO1xuICB9XG5cbiAgLy8gd2hlbiB3ZSB0cnkgdG8gY29uc3VtZSBzb21lIG1vcmUgYnl0ZXMsIHNpbXBseSB1bnBhdXNlIHRoZVxuICAvLyB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgc2VsZi5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgX3JlYWQnLCBuKTtcbiAgICBpZiAocGF1c2VkKSB7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIHN0cmVhbS5yZXN1bWUoKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNlbGY7XG59O1xuXG4vLyBleHBvc2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG5SZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdDtcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgLy8gbm90aGluZyBidWZmZXJlZFxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICB2YXIgcmV0O1xuICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgcmV0ID0gc3RhdGUuYnVmZmVyLnNoaWZ0KCk7ZWxzZSBpZiAoIW4gfHwgbiA+PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICAvLyByZWFkIGl0IGFsbCwgdHJ1bmNhdGUgdGhlIGxpc3RcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgcmV0ID0gc3RhdGUuYnVmZmVyLmpvaW4oJycpO2Vsc2UgaWYgKHN0YXRlLmJ1ZmZlci5sZW5ndGggPT09IDEpIHJldCA9IHN0YXRlLmJ1ZmZlci5oZWFkLmRhdGE7ZWxzZSByZXQgPSBzdGF0ZS5idWZmZXIuY29uY2F0KHN0YXRlLmxlbmd0aCk7XG4gICAgc3RhdGUuYnVmZmVyLmNsZWFyKCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVhZCBwYXJ0IG9mIGxpc3RcbiAgICByZXQgPSBmcm9tTGlzdFBhcnRpYWwobiwgc3RhdGUuYnVmZmVyLCBzdGF0ZS5kZWNvZGVyKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbi8vIEV4dHJhY3RzIG9ubHkgZW5vdWdoIGJ1ZmZlcmVkIGRhdGEgdG8gc2F0aXNmeSB0aGUgYW1vdW50IHJlcXVlc3RlZC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3RQYXJ0aWFsKG4sIGxpc3QsIGhhc1N0cmluZ3MpIHtcbiAgdmFyIHJldDtcbiAgaWYgKG4gPCBsaXN0LmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAvLyBzbGljZSBpcyB0aGUgc2FtZSBmb3IgYnVmZmVycyBhbmQgc3RyaW5nc1xuICAgIHJldCA9IGxpc3QuaGVhZC5kYXRhLnNsaWNlKDAsIG4pO1xuICAgIGxpc3QuaGVhZC5kYXRhID0gbGlzdC5oZWFkLmRhdGEuc2xpY2Uobik7XG4gIH0gZWxzZSBpZiAobiA9PT0gbGlzdC5oZWFkLmRhdGEubGVuZ3RoKSB7XG4gICAgLy8gZmlyc3QgY2h1bmsgaXMgYSBwZXJmZWN0IG1hdGNoXG4gICAgcmV0ID0gbGlzdC5zaGlmdCgpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlc3VsdCBzcGFucyBtb3JlIHRoYW4gb25lIGJ1ZmZlclxuICAgIHJldCA9IGhhc1N0cmluZ3MgPyBjb3B5RnJvbUJ1ZmZlclN0cmluZyhuLCBsaXN0KSA6IGNvcHlGcm9tQnVmZmVyKG4sIGxpc3QpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8vIENvcGllcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBsaXN0IG9mIGJ1ZmZlcmVkIGRhdGFcbi8vIGNodW5rcy5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gY29weUZyb21CdWZmZXJTdHJpbmcobiwgbGlzdCkge1xuICB2YXIgcCA9IGxpc3QuaGVhZDtcbiAgdmFyIGMgPSAxO1xuICB2YXIgcmV0ID0gcC5kYXRhO1xuICBuIC09IHJldC5sZW5ndGg7XG4gIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgdmFyIHN0ciA9IHAuZGF0YTtcbiAgICB2YXIgbmIgPSBuID4gc3RyLmxlbmd0aCA/IHN0ci5sZW5ndGggOiBuO1xuICAgIGlmIChuYiA9PT0gc3RyLmxlbmd0aCkgcmV0ICs9IHN0cjtlbHNlIHJldCArPSBzdHIuc2xpY2UoMCwgbik7XG4gICAgbiAtPSBuYjtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICAgICsrYztcbiAgICAgICAgaWYgKHAubmV4dCkgbGlzdC5oZWFkID0gcC5uZXh0O2Vsc2UgbGlzdC5oZWFkID0gbGlzdC50YWlsID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuaGVhZCA9IHA7XG4gICAgICAgIHAuZGF0YSA9IHN0ci5zbGljZShuYik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytjO1xuICB9XG4gIGxpc3QubGVuZ3RoIC09IGM7XG4gIHJldHVybiByZXQ7XG59XG5cbi8vIENvcGllcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgYnl0ZXMgZnJvbSB0aGUgbGlzdCBvZiBidWZmZXJlZCBkYXRhIGNodW5rcy5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gY29weUZyb21CdWZmZXIobiwgbGlzdCkge1xuICB2YXIgcmV0ID0gYnVmZmVyU2hpbS5hbGxvY1Vuc2FmZShuKTtcbiAgdmFyIHAgPSBsaXN0LmhlYWQ7XG4gIHZhciBjID0gMTtcbiAgcC5kYXRhLmNvcHkocmV0KTtcbiAgbiAtPSBwLmRhdGEubGVuZ3RoO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHZhciBidWYgPSBwLmRhdGE7XG4gICAgdmFyIG5iID0gbiA+IGJ1Zi5sZW5ndGggPyBidWYubGVuZ3RoIDogbjtcbiAgICBidWYuY29weShyZXQsIHJldC5sZW5ndGggLSBuLCAwLCBuYik7XG4gICAgbiAtPSBuYjtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgaWYgKG5iID09PSBidWYubGVuZ3RoKSB7XG4gICAgICAgICsrYztcbiAgICAgICAgaWYgKHAubmV4dCkgbGlzdC5oZWFkID0gcC5uZXh0O2Vsc2UgbGlzdC5oZWFkID0gbGlzdC50YWlsID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3QuaGVhZCA9IHA7XG4gICAgICAgIHAuZGF0YSA9IGJ1Zi5zbGljZShuYik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgKytjO1xuICB9XG4gIGxpc3QubGVuZ3RoIC09IGM7XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cbiAgLy8gSWYgd2UgZ2V0IGhlcmUgYmVmb3JlIGNvbnN1bWluZyBhbGwgdGhlIGJ5dGVzLCB0aGVuIHRoYXQgaXMgYVxuICAvLyBidWcgaW4gbm9kZS4gIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gIGlmIChzdGF0ZS5sZW5ndGggPiAwKSB0aHJvdyBuZXcgRXJyb3IoJ1wiZW5kUmVhZGFibGUoKVwiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7XG5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgc3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRSZWFkYWJsZU5UKHN0YXRlLCBzdHJlYW0pIHtcbiAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgZ2V0IG9uZSBsYXN0IHVuc2hpZnQuXG4gIGlmICghc3RhdGUuZW5kRW1pdHRlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICBzdHJlYW0ucmVhZGFibGUgPSBmYWxzZTtcbiAgICBzdHJlYW0uZW1pdCgnZW5kJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yRWFjaCh4cywgZikge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGYoeHNbaV0sIGkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB4cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoeHNbaV0gPT09IHgpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn0iLCIvLyBhIHRyYW5zZm9ybSBzdHJlYW0gaXMgYSByZWFkYWJsZS93cml0YWJsZSBzdHJlYW0gd2hlcmUgeW91IGRvXG4vLyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YS4gIFNvbWV0aW1lcyBpdCdzIGNhbGxlZCBhIFwiZmlsdGVyXCIsXG4vLyBidXQgdGhhdCdzIG5vdCBhIGdyZWF0IG5hbWUgZm9yIGl0LCBzaW5jZSB0aGF0IGltcGxpZXMgYSB0aGluZyB3aGVyZVxuLy8gc29tZSBiaXRzIHBhc3MgdGhyb3VnaCwgYW5kIG90aGVycyBhcmUgc2ltcGx5IGlnbm9yZWQuICAoVGhhdCB3b3VsZFxuLy8gYmUgYSB2YWxpZCBleGFtcGxlIG9mIGEgdHJhbnNmb3JtLCBvZiBjb3Vyc2UuKVxuLy9cbi8vIFdoaWxlIHRoZSBvdXRwdXQgaXMgY2F1c2FsbHkgcmVsYXRlZCB0byB0aGUgaW5wdXQsIGl0J3Mgbm90IGFcbi8vIG5lY2Vzc2FyaWx5IHN5bW1ldHJpYyBvciBzeW5jaHJvbm91cyB0cmFuc2Zvcm1hdGlvbi4gIEZvciBleGFtcGxlLFxuLy8gYSB6bGliIHN0cmVhbSBtaWdodCB0YWtlIG11bHRpcGxlIHBsYWluLXRleHQgd3JpdGVzKCksIGFuZCB0aGVuXG4vLyBlbWl0IGEgc2luZ2xlIGNvbXByZXNzZWQgY2h1bmsgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuXG4vL1xuLy8gSGVyZSdzIGhvdyB0aGlzIHdvcmtzOlxuLy9cbi8vIFRoZSBUcmFuc2Zvcm0gc3RyZWFtIGhhcyBhbGwgdGhlIGFzcGVjdHMgb2YgdGhlIHJlYWRhYmxlIGFuZCB3cml0YWJsZVxuLy8gc3RyZWFtIGNsYXNzZXMuICBXaGVuIHlvdSB3cml0ZShjaHVuayksIHRoYXQgY2FsbHMgX3dyaXRlKGNodW5rLGNiKVxuLy8gaW50ZXJuYWxseSwgYW5kIHJldHVybnMgZmFsc2UgaWYgdGhlcmUncyBhIGxvdCBvZiBwZW5kaW5nIHdyaXRlc1xuLy8gYnVmZmVyZWQgdXAuICBXaGVuIHlvdSBjYWxsIHJlYWQoKSwgdGhhdCBjYWxscyBfcmVhZChuKSB1bnRpbFxuLy8gdGhlcmUncyBlbm91Z2ggcGVuZGluZyByZWFkYWJsZSBkYXRhIGJ1ZmZlcmVkIHVwLlxuLy9cbi8vIEluIGEgdHJhbnNmb3JtIHN0cmVhbSwgdGhlIHdyaXR0ZW4gZGF0YSBpcyBwbGFjZWQgaW4gYSBidWZmZXIuICBXaGVuXG4vLyBfcmVhZChuKSBpcyBjYWxsZWQsIGl0IHRyYW5zZm9ybXMgdGhlIHF1ZXVlZCB1cCBkYXRhLCBjYWxsaW5nIHRoZVxuLy8gYnVmZmVyZWQgX3dyaXRlIGNiJ3MgYXMgaXQgY29uc3VtZXMgY2h1bmtzLiAgSWYgY29uc3VtaW5nIGEgc2luZ2xlXG4vLyB3cml0dGVuIGNodW5rIHdvdWxkIHJlc3VsdCBpbiBtdWx0aXBsZSBvdXRwdXQgY2h1bmtzLCB0aGVuIHRoZSBmaXJzdFxuLy8gb3V0cHV0dGVkIGJpdCBjYWxscyB0aGUgcmVhZGNiLCBhbmQgc3Vic2VxdWVudCBjaHVua3MganVzdCBnbyBpbnRvXG4vLyB0aGUgcmVhZCBidWZmZXIsIGFuZCB3aWxsIGNhdXNlIGl0IHRvIGVtaXQgJ3JlYWRhYmxlJyBpZiBuZWNlc3NhcnkuXG4vL1xuLy8gVGhpcyB3YXksIGJhY2stcHJlc3N1cmUgaXMgYWN0dWFsbHkgZGV0ZXJtaW5lZCBieSB0aGUgcmVhZGluZyBzaWRlLFxuLy8gc2luY2UgX3JlYWQgaGFzIHRvIGJlIGNhbGxlZCB0byBzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGNodW5rLiAgSG93ZXZlcixcbi8vIGEgcGF0aG9sb2dpY2FsIGluZmxhdGUgdHlwZSBvZiB0cmFuc2Zvcm0gY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBidWZmZXJpbmdcbi8vIGhlcmUuICBGb3IgZXhhbXBsZSwgaW1hZ2luZSBhIHN0cmVhbSB3aGVyZSBldmVyeSBieXRlIG9mIGlucHV0IGlzXG4vLyBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIGZyb20gMC0yNTUsIGFuZCB0aGVuIHJlc3VsdHMgaW4gdGhhdCBtYW55XG4vLyBieXRlcyBvZiBvdXRwdXQuICBXcml0aW5nIHRoZSA0IGJ5dGVzIHtmZixmZixmZixmZn0gd291bGQgcmVzdWx0IGluXG4vLyAxa2Igb2YgZGF0YSBiZWluZyBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIHlvdSBjb3VsZCB3cml0ZSBhIHZlcnkgc21hbGxcbi8vIGFtb3VudCBvZiBpbnB1dCwgYW5kIGVuZCB1cCB3aXRoIGEgdmVyeSBsYXJnZSBhbW91bnQgb2Ygb3V0cHV0LiAgSW5cbi8vIHN1Y2ggYSBwYXRob2xvZ2ljYWwgaW5mbGF0aW5nIG1lY2hhbmlzbSwgdGhlcmUnZCBiZSBubyB3YXkgdG8gdGVsbFxuLy8gdGhlIHN5c3RlbSB0byBzdG9wIGRvaW5nIHRoZSB0cmFuc2Zvcm0uICBBIHNpbmdsZSA0TUIgd3JpdGUgY291bGRcbi8vIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuXG4vL1xuLy8gSG93ZXZlciwgZXZlbiBpbiBzdWNoIGEgcGF0aG9sb2dpY2FsIGNhc2UsIG9ubHkgYSBzaW5nbGUgd3JpdHRlbiBjaHVua1xuLy8gd291bGQgYmUgY29uc3VtZWQsIGFuZCB0aGVuIHRoZSByZXN0IHdvdWxkIHdhaXQgKHVuLXRyYW5zZm9ybWVkKSB1bnRpbFxuLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHByZXZpb3VzIHRyYW5zZm9ybWVkIGNodW5rIHdlcmUgY29uc3VtZWQuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2Zvcm07XG5cbnZhciBEdXBsZXggPSByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgdXRpbCA9IHJlcXVpcmUoJ2NvcmUtdXRpbC1pcycpO1xudXRpbC5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudXRpbC5pbmhlcml0cyhUcmFuc2Zvcm0sIER1cGxleCk7XG5cbmZ1bmN0aW9uIFRyYW5zZm9ybVN0YXRlKHN0cmVhbSkge1xuICB0aGlzLmFmdGVyVHJhbnNmb3JtID0gZnVuY3Rpb24gKGVyLCBkYXRhKSB7XG4gICAgcmV0dXJuIGFmdGVyVHJhbnNmb3JtKHN0cmVhbSwgZXIsIGRhdGEpO1xuICB9O1xuXG4gIHRoaXMubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICB0aGlzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuICB0aGlzLndyaXRlY2h1bmsgPSBudWxsO1xuICB0aGlzLndyaXRlZW5jb2RpbmcgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBhZnRlclRyYW5zZm9ybShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIHZhciB0cyA9IHN0cmVhbS5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLnRyYW5zZm9ybWluZyA9IGZhbHNlO1xuXG4gIHZhciBjYiA9IHRzLndyaXRlY2I7XG5cbiAgaWYgKCFjYikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignbm8gd3JpdGVjYiBpbiBUcmFuc2Zvcm0gY2xhc3MnKSk7XG5cbiAgdHMud3JpdGVjaHVuayA9IG51bGw7XG4gIHRzLndyaXRlY2IgPSBudWxsO1xuXG4gIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkgc3RyZWFtLnB1c2goZGF0YSk7XG5cbiAgY2IoZXIpO1xuXG4gIHZhciBycyA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgcnMucmVhZGluZyA9IGZhbHNlO1xuICBpZiAocnMubmVlZFJlYWRhYmxlIHx8IHJzLmxlbmd0aCA8IHJzLmhpZ2hXYXRlck1hcmspIHtcbiAgICBzdHJlYW0uX3JlYWQocnMuaGlnaFdhdGVyTWFyayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVHJhbnNmb3JtKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRyYW5zZm9ybSkpIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuXG4gIER1cGxleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIHRoaXMuX3RyYW5zZm9ybVN0YXRlID0gbmV3IFRyYW5zZm9ybVN0YXRlKHRoaXMpO1xuXG4gIHZhciBzdHJlYW0gPSB0aGlzO1xuXG4gIC8vIHN0YXJ0IG91dCBhc2tpbmcgZm9yIGEgcmVhZGFibGUgZXZlbnQgb25jZSBkYXRhIGlzIHRyYW5zZm9ybWVkLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgLy8gd2UgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgX3JlYWQgbWV0aG9kLCBhbmQgZG9uZSB0aGUgb3RoZXIgdGhpbmdzXG4gIC8vIHRoYXQgUmVhZGFibGUgd2FudHMgYmVmb3JlIHRoZSBmaXJzdCBfcmVhZCBjYWxsLCBzbyB1bnNldCB0aGVcbiAgLy8gc3luYyBndWFyZCBmbGFnLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHRoaXMuX3RyYW5zZm9ybSA9IG9wdGlvbnMudHJhbnNmb3JtO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAnZnVuY3Rpb24nKSB0aGlzLl9mbHVzaCA9IG9wdGlvbnMuZmx1c2g7XG4gIH1cblxuICAvLyBXaGVuIHRoZSB3cml0YWJsZSBzaWRlIGZpbmlzaGVzLCB0aGVuIGZsdXNoIG91dCBhbnl0aGluZyByZW1haW5pbmcuXG4gIHRoaXMub25jZSgncHJlZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoKGZ1bmN0aW9uIChlciwgZGF0YSkge1xuICAgICAgZG9uZShzdHJlYW0sIGVyLCBkYXRhKTtcbiAgICB9KTtlbHNlIGRvbmUoc3RyZWFtKTtcbiAgfSk7XG59XG5cblRyYW5zZm9ybS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybSA9IGZhbHNlO1xuICByZXR1cm4gRHVwbGV4LnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcywgY2h1bmssIGVuY29kaW5nKTtcbn07XG5cbi8vIFRoaXMgaXMgdGhlIHBhcnQgd2hlcmUgeW91IGRvIHN0dWZmIVxuLy8gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gJ2NodW5rJyBpcyBhbiBpbnB1dCBjaHVuay5cbi8vXG4vLyBDYWxsIGBwdXNoKG5ld0NodW5rKWAgdG8gcGFzcyBhbG9uZyB0cmFuc2Zvcm1lZCBvdXRwdXRcbi8vIHRvIHRoZSByZWFkYWJsZSBzaWRlLiAgWW91IG1heSBjYWxsICdwdXNoJyB6ZXJvIG9yIG1vcmUgdGltZXMuXG4vL1xuLy8gQ2FsbCBgY2IoZXJyKWAgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCB0aGlzIGNodW5rLiAgSWYgeW91IHBhc3Ncbi8vIGFuIGVycm9yLCB0aGVuIHRoYXQnbGwgcHV0IHRoZSBodXJ0IG9uIHRoZSB3aG9sZSBvcGVyYXRpb24uICBJZiB5b3Vcbi8vIG5ldmVyIGNhbGwgY2IoKSwgdGhlbiB5b3UnbGwgbmV2ZXIgZ2V0IGFub3RoZXIgY2h1bmsuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ190cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG4gIHRzLndyaXRlY2IgPSBjYjtcbiAgdHMud3JpdGVjaHVuayA9IGNodW5rO1xuICB0cy53cml0ZWVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIGlmICghdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdmFyIHJzID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgICBpZiAodHMubmVlZFRyYW5zZm9ybSB8fCBycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykgdGhpcy5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufTtcblxuLy8gRG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgYXJncyBhcmUgaGVyZS5cbi8vIF90cmFuc2Zvcm0gZG9lcyBhbGwgdGhlIHdvcmsuXG4vLyBUaGF0IHdlIGdvdCBoZXJlIG1lYW5zIHRoYXQgdGhlIHJlYWRhYmxlIHNpZGUgd2FudHMgbW9yZSBkYXRhLlxuVHJhbnNmb3JtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciB0cyA9IHRoaXMuX3RyYW5zZm9ybVN0YXRlO1xuXG4gIGlmICh0cy53cml0ZWNodW5rICE9PSBudWxsICYmIHRzLndyaXRlY2IgJiYgIXRzLnRyYW5zZm9ybWluZykge1xuICAgIHRzLnRyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgdGhpcy5fdHJhbnNmb3JtKHRzLndyaXRlY2h1bmssIHRzLndyaXRlZW5jb2RpbmcsIHRzLmFmdGVyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBtYXJrIHRoYXQgd2UgbmVlZCBhIHRyYW5zZm9ybSwgc28gdGhhdCBhbnkgZGF0YSB0aGF0IGNvbWVzIGluXG4gICAgLy8gd2lsbCBnZXQgcHJvY2Vzc2VkLCBub3cgdGhhdCB3ZSd2ZSBhc2tlZCBmb3IgaXQuXG4gICAgdHMubmVlZFRyYW5zZm9ybSA9IHRydWU7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGRvbmUoc3RyZWFtLCBlciwgZGF0YSkge1xuICBpZiAoZXIpIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG5cbiAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKSBzdHJlYW0ucHVzaChkYXRhKTtcblxuICAvLyBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gdGhlIHdyaXRlIGJ1ZmZlciwgdGhlbiB0aGF0IG1lYW5zXG4gIC8vIHRoYXQgbm90aGluZyBtb3JlIHdpbGwgZXZlciBiZSBwcm92aWRlZFxuICB2YXIgd3MgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIHZhciB0cyA9IHN0cmVhbS5fdHJhbnNmb3JtU3RhdGU7XG5cbiAgaWYgKHdzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAnKTtcblxuICBpZiAodHMudHJhbnNmb3JtaW5nKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmcnKTtcblxuICByZXR1cm4gc3RyZWFtLnB1c2gobnVsbCk7XG59IiwiLy8gQSBiaXQgc2ltcGxlciB0aGFuIHJlYWRhYmxlIHN0cmVhbXMuXG4vLyBJbXBsZW1lbnQgYW4gYXN5bmMgLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKSwgYW5kIGl0J2xsIGhhbmRsZSBhbGxcbi8vIHRoZSBkcmFpbiBldmVudCBlbWlzc2lvbiBhbmQgYnVmZmVyaW5nLlxuXG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGU7XG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgcHJvY2Vzc05leHRUaWNrID0gcmVxdWlyZSgncHJvY2Vzcy1uZXh0aWNrLWFyZ3MnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGFzeW5jV3JpdGUgPSAhcHJvY2Vzcy5icm93c2VyICYmIFsndjAuMTAnLCAndjAuOS4nXS5pbmRleE9mKHByb2Nlc3MudmVyc2lvbi5zbGljZSgwLCA1KSkgPiAtMSA/IHNldEltbWVkaWF0ZSA6IHByb2Nlc3NOZXh0VGljaztcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5Xcml0YWJsZS5Xcml0YWJsZVN0YXRlID0gV3JpdGFibGVTdGF0ZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGludGVybmFsVXRpbCA9IHtcbiAgZGVwcmVjYXRlOiByZXF1aXJlKCd1dGlsLWRlcHJlY2F0ZScpXG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGJ1ZmZlclNoaW0gPSByZXF1aXJlKCdidWZmZXItc2hpbXMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFdyaXRhYmxlLCBTdHJlYW0pO1xuXG5mdW5jdGlvbiBub3AoKSB7fVxuXG5mdW5jdGlvbiBXcml0ZVJlcShjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRoaXMuY2h1bmsgPSBjaHVuaztcbiAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICB0aGlzLmNhbGxiYWNrID0gY2I7XG4gIHRoaXMubmV4dCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIFdyaXRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy53cml0YWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIHdyaXRlKCkgc3RhcnRzIHJldHVybmluZyBmYWxzZVxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIHRoYXQgd2UgYWx3YXlzIHJldHVybiBmYWxzZSBpZlxuICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBpcyBub3QgZmx1c2hlZCBpbW1lZGlhdGVseSBvbiB3cml0ZSgpXG4gIHZhciBod20gPSBvcHRpb25zLmhpZ2hXYXRlck1hcms7XG4gIHZhciBkZWZhdWx0SHdtID0gdGhpcy5vYmplY3RNb2RlID8gMTYgOiAxNiAqIDEwMjQ7XG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IGh3bSB8fCBod20gPT09IDAgPyBod20gOiBkZWZhdWx0SHdtO1xuXG4gIC8vIGNhc3QgdG8gaW50cy5cbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gfn50aGlzLmhpZ2hXYXRlck1hcms7XG5cbiAgLy8gZHJhaW4gZXZlbnQgZmxhZy5cbiAgdGhpcy5uZWVkRHJhaW4gPSBmYWxzZTtcbiAgLy8gYXQgdGhlIHN0YXJ0IG9mIGNhbGxpbmcgZW5kKClcbiAgdGhpcy5lbmRpbmcgPSBmYWxzZTtcbiAgLy8gd2hlbiBlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGFuZCByZXR1cm5lZFxuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIC8vIHdoZW4gJ2ZpbmlzaCcgaXMgZW1pdHRlZFxuICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gc2hvdWxkIHdlIGRlY29kZSBzdHJpbmdzIGludG8gYnVmZmVycyBiZWZvcmUgcGFzc2luZyB0byBfd3JpdGU/XG4gIC8vIHRoaXMgaXMgaGVyZSBzbyB0aGF0IHNvbWUgbm9kZS1jb3JlIHN0cmVhbXMgY2FuIG9wdGltaXplIHN0cmluZ1xuICAvLyBoYW5kbGluZyBhdCBhIGxvd2VyIGxldmVsLlxuICB2YXIgbm9EZWNvZGUgPSBvcHRpb25zLmRlY29kZVN0cmluZ3MgPT09IGZhbHNlO1xuICB0aGlzLmRlY29kZVN0cmluZ3MgPSAhbm9EZWNvZGU7XG5cbiAgLy8gQ3J5cHRvIGlzIGtpbmQgb2Ygb2xkIGFuZCBjcnVzdHkuICBIaXN0b3JpY2FsbHksIGl0cyBkZWZhdWx0IHN0cmluZ1xuICAvLyBlbmNvZGluZyBpcyAnYmluYXJ5JyBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhpcyBjb25maWd1cmFibGUuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgdW5pdmVyc2UgdXNlcyAndXRmOCcsIHRob3VnaC5cbiAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmOCc7XG5cbiAgLy8gbm90IGFuIGFjdHVhbCBidWZmZXIgd2Uga2VlcCB0cmFjayBvZiwgYnV0IGEgbWVhc3VyZW1lbnRcbiAgLy8gb2YgaG93IG11Y2ggd2UncmUgd2FpdGluZyB0byBnZXQgcHVzaGVkIHRvIHNvbWUgdW5kZXJseWluZ1xuICAvLyBzb2NrZXQgb3IgZmlsZS5cbiAgdGhpcy5sZW5ndGggPSAwO1xuXG4gIC8vIGEgZmxhZyB0byBzZWUgd2hlbiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgd3JpdGUuXG4gIHRoaXMud3JpdGluZyA9IGZhbHNlO1xuXG4gIC8vIHdoZW4gdHJ1ZSBhbGwgd3JpdGVzIHdpbGwgYmUgYnVmZmVyZWQgdW50aWwgLnVuY29yaygpIGNhbGxcbiAgdGhpcy5jb3JrZWQgPSAwO1xuXG4gIC8vIGEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIGEgZmxhZyB0byBrbm93IGlmIHdlJ3JlIHByb2Nlc3NpbmcgcHJldmlvdXNseSBidWZmZXJlZCBpdGVtcywgd2hpY2hcbiAgLy8gbWF5IGNhbGwgdGhlIF93cml0ZSgpIGNhbGxiYWNrIGluIHRoZSBzYW1lIHRpY2ssIHNvIHRoYXQgd2UgZG9uJ3RcbiAgLy8gZW5kIHVwIGluIGFuIG92ZXJsYXBwZWQgb253cml0ZSBzaXR1YXRpb24uXG4gIHRoaXMuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0J3MgcGFzc2VkIHRvIF93cml0ZShjaHVuayxjYilcbiAgdGhpcy5vbndyaXRlID0gZnVuY3Rpb24gKGVyKSB7XG4gICAgb253cml0ZShzdHJlYW0sIGVyKTtcbiAgfTtcblxuICAvLyB0aGUgY2FsbGJhY2sgdGhhdCB0aGUgdXNlciBzdXBwbGllcyB0byB3cml0ZShjaHVuayxlbmNvZGluZyxjYilcbiAgdGhpcy53cml0ZWNiID0gbnVsbDtcblxuICAvLyB0aGUgYW1vdW50IHRoYXQgaXMgYmVpbmcgd3JpdHRlbiB3aGVuIF93cml0ZSBpcyBjYWxsZWQuXG4gIHRoaXMud3JpdGVsZW4gPSAwO1xuXG4gIHRoaXMuYnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcblxuICAvLyBudW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWRcbiAgdGhpcy5wZW5kaW5nY2IgPSAwO1xuXG4gIC8vIGVtaXQgcHJlZmluaXNoIGlmIHRoZSBvbmx5IHRoaW5nIHdlJ3JlIHdhaXRpbmcgZm9yIGlzIF93cml0ZSBjYnNcbiAgLy8gVGhpcyBpcyByZWxldmFudCBmb3Igc3luY2hyb25vdXMgVHJhbnNmb3JtIHN0cmVhbXNcbiAgdGhpcy5wcmVmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIC8vIFRydWUgaWYgdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQgYW5kIHNob3VsZCBub3QgYmUgdGhyb3duIGFnYWluXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG5cbiAgLy8gY291bnQgYnVmZmVyZWQgcmVxdWVzdHNcbiAgdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG5cbiAgLy8gYWxsb2NhdGUgdGhlIGZpcnN0IENvcmtlZFJlcXVlc3QsIHRoZXJlIGlzIGFsd2F5c1xuICAvLyBvbmUgYWxsb2NhdGVkIGFuZCBmcmVlIHRvIHVzZSwgYW5kIHdlIG1haW50YWluIGF0IG1vc3QgdHdvXG4gIHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3QodGhpcyk7XG59XG5cbldyaXRhYmxlU3RhdGUucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uIGdldEJ1ZmZlcigpIHtcbiAgdmFyIGN1cnJlbnQgPSB0aGlzLmJ1ZmZlcmVkUmVxdWVzdDtcbiAgdmFyIG91dCA9IFtdO1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIG91dC5wdXNoKGN1cnJlbnQpO1xuICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG5cbihmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RhdGUucHJvdG90eXBlLCAnYnVmZmVyJywge1xuICAgICAgZ2V0OiBpbnRlcm5hbFV0aWwuZGVwcmVjYXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCk7XG4gICAgICB9LCAnX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgJyArICdpbnN0ZWFkLicpXG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHt9XG59KSgpO1xuXG4vLyBUZXN0IF93cml0YWJsZVN0YXRlIGZvciBpbmhlcml0YW5jZSB0byBhY2NvdW50IGZvciBEdXBsZXggc3RyZWFtcyxcbi8vIHdob3NlIHByb3RvdHlwZSBjaGFpbiBvbmx5IHBvaW50cyB0byBSZWFkYWJsZS5cbnZhciByZWFsSGFzSW5zdGFuY2U7XG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaGFzSW5zdGFuY2UgJiYgdHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdID09PSAnZnVuY3Rpb24nKSB7XG4gIHJlYWxIYXNJbnN0YW5jZSA9IEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICAgIHZhbHVlOiBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICBpZiAocmVhbEhhc0luc3RhbmNlLmNhbGwodGhpcywgb2JqZWN0KSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgV3JpdGFibGVTdGF0ZTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiB0aGlzO1xuICB9O1xufVxuXG5mdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgLy8gV3JpdGFibGUgY3RvciBpcyBhcHBsaWVkIHRvIER1cGxleGVzLCB0b28uXG4gIC8vIGByZWFsSGFzSW5zdGFuY2VgIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHVzaW5nIHBsYWluIGBpbnN0YW5jZW9mYFxuICAvLyB3b3VsZCByZXR1cm4gZmFsc2UsIGFzIG5vIGBfd3JpdGFibGVTdGF0ZWAgcHJvcGVydHkgaXMgYXR0YWNoZWQuXG5cbiAgLy8gVHJ5aW5nIHRvIHVzZSB0aGUgY3VzdG9tIGBpbnN0YW5jZW9mYCBmb3IgV3JpdGFibGUgaGVyZSB3aWxsIGFsc28gYnJlYWsgdGhlXG4gIC8vIE5vZGUuanMgTGF6eVRyYW5zZm9ybSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggaGFzIGEgbm9uLXRyaXZpYWwgZ2V0dGVyIGZvclxuICAvLyBgX3dyaXRhYmxlU3RhdGVgIHRoYXQgd291bGQgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gIGlmICghcmVhbEhhc0luc3RhbmNlLmNhbGwoV3JpdGFibGUsIHRoaXMpICYmICEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHtcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKG9wdGlvbnMpO1xuICB9XG5cbiAgdGhpcy5fd3JpdGFibGVTdGF0ZSA9IG5ldyBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeS5cbiAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZXYgPT09ICdmdW5jdGlvbicpIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuICB9XG5cbiAgU3RyZWFtLmNhbGwodGhpcyk7XG59XG5cbi8vIE90aGVyd2lzZSBwZW9wbGUgY2FuIHBpcGUgV3JpdGFibGUgc3RyZWFtcywgd2hpY2ggaXMganVzdCB3cm9uZy5cbldyaXRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlJykpO1xufTtcblxuZnVuY3Rpb24gd3JpdGVBZnRlckVuZChzdHJlYW0sIGNiKSB7XG4gIHZhciBlciA9IG5ldyBFcnJvcignd3JpdGUgYWZ0ZXIgZW5kJyk7XG4gIC8vIFRPRE86IGRlZmVyIGVycm9yIGV2ZW50cyBjb25zaXN0ZW50bHkgZXZlcnl3aGVyZSwgbm90IGp1c3QgdGhlIGNiXG4gIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgcHJvY2Vzc05leHRUaWNrKGNiLCBlcik7XG59XG5cbi8vIENoZWNrcyB0aGF0IGEgdXNlci1zdXBwbGllZCBjaHVuayBpcyB2YWxpZCwgZXNwZWNpYWxseSBmb3IgdGhlIHBhcnRpY3VsYXJcbi8vIG1vZGUgdGhlIHN0cmVhbSBpcyBpbi4gQ3VycmVudGx5IHRoaXMgbWVhbnMgdGhhdCBgbnVsbGAgaXMgbmV2ZXIgYWNjZXB0ZWRcbi8vIGFuZCB1bmRlZmluZWQvbm9uLXN0cmluZyB2YWx1ZXMgYXJlIG9ubHkgYWxsb3dlZCBpbiBvYmplY3QgbW9kZS5cbmZ1bmN0aW9uIHZhbGlkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGNiKSB7XG4gIHZhciB2YWxpZCA9IHRydWU7XG4gIHZhciBlciA9IGZhbHNlO1xuXG4gIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0nKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnICYmIGNodW5rICE9PSB1bmRlZmluZWQgJiYgIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBlciA9IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsnKTtcbiAgfVxuICBpZiAoZXIpIHtcbiAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG4gICAgcHJvY2Vzc05leHRUaWNrKGNiLCBlcik7XG4gICAgdmFsaWQgPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsaWQ7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciByZXQgPSBmYWxzZTtcbiAgdmFyIGlzQnVmID0gQnVmZmVyLmlzQnVmZmVyKGNodW5rKTtcblxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoaXNCdWYpIGVuY29kaW5nID0gJ2J1ZmZlcic7ZWxzZSBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcblxuICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSBjYiA9IG5vcDtcblxuICBpZiAoc3RhdGUuZW5kZWQpIHdyaXRlQWZ0ZXJFbmQodGhpcywgY2IpO2Vsc2UgaWYgKGlzQnVmIHx8IHZhbGlkQ2h1bmsodGhpcywgc3RhdGUsIGNodW5rLCBjYikpIHtcbiAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICByZXQgPSB3cml0ZU9yQnVmZmVyKHRoaXMsIHN0YXRlLCBpc0J1ZiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgc3RhdGUuY29ya2VkKys7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUudW5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLTtcblxuICAgIGlmICghc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QpIGNsZWFyQnVmZmVyKHRoaXMsIHN0YXRlKTtcbiAgfVxufTtcblxuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycpIGVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCEoWydoZXgnLCAndXRmOCcsICd1dGYtOCcsICdhc2NpaScsICdiaW5hcnknLCAnYmFzZTY0JywgJ3VjczInLCAndWNzLTInLCAndXRmMTZsZScsICd1dGYtMTZsZScsICdyYXcnXS5pbmRleE9mKChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpKSA+IC0xKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKTtcbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2RpbmcgPSBlbmNvZGluZztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBkZWNvZGVDaHVuayhzdGF0ZSwgY2h1bmssIGVuY29kaW5nKSB7XG4gIGlmICghc3RhdGUub2JqZWN0TW9kZSAmJiBzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSAmJiB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgY2h1bmsgPSBidWZmZXJTaGltLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgfVxuICByZXR1cm4gY2h1bms7XG59XG5cbi8vIGlmIHdlJ3JlIGFscmVhZHkgd3JpdGluZyBzb21ldGhpbmcsIHRoZW4ganVzdCBwdXQgdGhpc1xuLy8gaW4gdGhlIHF1ZXVlLCBhbmQgd2FpdCBvdXIgdHVybi4gIE90aGVyd2lzZSwgY2FsbCBfd3JpdGVcbi8vIElmIHdlIHJldHVybiBmYWxzZSwgdGhlbiB3ZSBuZWVkIGEgZHJhaW4gZXZlbnQsIHNvIHNldCB0aGF0IGZsYWcuXG5mdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGlmICghaXNCdWYpIHtcbiAgICBjaHVuayA9IGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpO1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSBlbmNvZGluZyA9ICdidWZmZXInO1xuICB9XG4gIHZhciBsZW4gPSBzdGF0ZS5vYmplY3RNb2RlID8gMSA6IGNodW5rLmxlbmd0aDtcblxuICBzdGF0ZS5sZW5ndGggKz0gbGVuO1xuXG4gIHZhciByZXQgPSBzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAvLyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHByZXZpb3VzIG5lZWREcmFpbiB3aWxsIG5vdCBiZSByZXNldCB0byBmYWxzZS5cbiAgaWYgKCFyZXQpIHN0YXRlLm5lZWREcmFpbiA9IHRydWU7XG5cbiAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkKSB7XG4gICAgdmFyIGxhc3QgPSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBuZXcgV3JpdGVSZXEoY2h1bmssIGVuY29kaW5nLCBjYik7XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIGxhc3QubmV4dCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgfVxuICAgIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ICs9IDE7XG4gIH0gZWxzZSB7XG4gICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAod3JpdGV2KSBzdHJlYW0uX3dyaXRldihjaHVuaywgc3RhdGUub253cml0ZSk7ZWxzZSBzdHJlYW0uX3dyaXRlKGNodW5rLCBlbmNvZGluZywgc3RhdGUub253cml0ZSk7XG4gIHN0YXRlLnN5bmMgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIHN5bmMsIGVyLCBjYikge1xuICAtLXN0YXRlLnBlbmRpbmdjYjtcbiAgaWYgKHN5bmMpIHByb2Nlc3NOZXh0VGljayhjYiwgZXIpO2Vsc2UgY2IoZXIpO1xuXG4gIHN0cmVhbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcik7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSkge1xuICBzdGF0ZS53cml0aW5nID0gZmFsc2U7XG4gIHN0YXRlLndyaXRlY2IgPSBudWxsO1xuICBzdGF0ZS5sZW5ndGggLT0gc3RhdGUud3JpdGVsZW47XG4gIHN0YXRlLndyaXRlbGVuID0gMDtcbn1cblxuZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHN5bmMgPSBzdGF0ZS5zeW5jO1xuICB2YXIgY2IgPSBzdGF0ZS53cml0ZWNiO1xuXG4gIG9ud3JpdGVTdGF0ZVVwZGF0ZShzdGF0ZSk7XG5cbiAgaWYgKGVyKSBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKTtlbHNlIHtcbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBhY3R1YWxseSByZWFkeSB0byBmaW5pc2gsIGJ1dCBkb24ndCBlbWl0IHlldFxuICAgIHZhciBmaW5pc2hlZCA9IG5lZWRGaW5pc2goc3RhdGUpO1xuXG4gICAgaWYgKCFmaW5pc2hlZCAmJiAhc3RhdGUuY29ya2VkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkge1xuICAgICAgY2xlYXJCdWZmZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIC8qPHJlcGxhY2VtZW50PiovXG4gICAgICBhc3luY1dyaXRlKGFmdGVyV3JpdGUsIHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgICAvKjwvcmVwbGFjZW1lbnQ+Ki9cbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCBmaW5pc2hlZCwgY2IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYikge1xuICBpZiAoIWZpbmlzaGVkKSBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSk7XG4gIHN0YXRlLnBlbmRpbmdjYi0tO1xuICBjYigpO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbn1cblxuLy8gTXVzdCBmb3JjZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gbmV4dFRpY2ssIHNvIHRoYXQgd2UgZG9uJ3Rcbi8vIGVtaXQgJ2RyYWluJyBiZWZvcmUgdGhlIHdyaXRlKCkgY29uc3VtZXIgZ2V0cyB0aGUgJ2ZhbHNlJyByZXR1cm5cbi8vIHZhbHVlLCBhbmQgaGFzIGEgY2hhbmNlIHRvIGF0dGFjaCBhICdkcmFpbicgbGlzdGVuZXIuXG5mdW5jdGlvbiBvbndyaXRlRHJhaW4oc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLm5lZWREcmFpbikge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdkcmFpbicpO1xuICB9XG59XG5cbi8vIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBwcm9jZXNzIGl0XG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSB0cnVlO1xuICB2YXIgZW50cnkgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3Q7XG5cbiAgaWYgKHN0cmVhbS5fd3JpdGV2ICYmIGVudHJ5ICYmIGVudHJ5Lm5leHQpIHtcbiAgICAvLyBGYXN0IGNhc2UsIHdyaXRlIGV2ZXJ5dGhpbmcgdXNpbmcgX3dyaXRldigpXG4gICAgdmFyIGwgPSBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudDtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGwpO1xuICAgIHZhciBob2xkZXIgPSBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7XG4gICAgaG9sZGVyLmVudHJ5ID0gZW50cnk7XG5cbiAgICB2YXIgY291bnQgPSAwO1xuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgYnVmZmVyW2NvdW50XSA9IGVudHJ5O1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgY291bnQgKz0gMTtcbiAgICB9XG5cbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHRydWUsIHN0YXRlLmxlbmd0aCwgYnVmZmVyLCAnJywgaG9sZGVyLmZpbmlzaCk7XG5cbiAgICAvLyBkb1dyaXRlIGlzIGFsbW9zdCBhbHdheXMgYXN5bmMsIGRlZmVyIHRoZXNlIHRvIHNhdmUgYSBiaXQgb2YgdGltZVxuICAgIC8vIGFzIHRoZSBob3QgcGF0aCBlbmRzIHdpdGggZG9Xcml0ZVxuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICAgIGlmIChob2xkZXIubmV4dCkge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gaG9sZGVyLm5leHQ7XG4gICAgICBob2xkZXIubmV4dCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSA9IG5ldyBDb3JrZWRSZXF1ZXN0KHN0YXRlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU2xvdyBjYXNlLCB3cml0ZSBjaHVua3Mgb25lLWJ5LW9uZVxuICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgdmFyIGNodW5rID0gZW50cnkuY2h1bms7XG4gICAgICB2YXIgZW5jb2RpbmcgPSBlbnRyeS5lbmNvZGluZztcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgLy8gaWYgd2UgZGlkbid0IGNhbGwgdGhlIG9ud3JpdGUgaW1tZWRpYXRlbHksIHRoZW5cbiAgICAgIC8vIGl0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0IGRvZXMuXG4gICAgICAvLyBhbHNvLCB0aGF0IG1lYW5zIHRoYXQgdGhlIGNodW5rIGFuZCBjYiBhcmUgY3VycmVudGx5XG4gICAgICAvLyBiZWluZyBwcm9jZXNzZWQsIHNvIG1vdmUgdGhlIGJ1ZmZlciBjb3VudGVyIHBhc3QgdGhlbS5cbiAgICAgIGlmIChzdGF0ZS53cml0aW5nKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbnRyeSA9PT0gbnVsbCkgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gIH1cblxuICBzdGF0ZS5idWZmZXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9IGVudHJ5O1xuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihuZXcgRXJyb3IoJ193cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpKTtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbDtcblxuV3JpdGFibGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gY2h1bms7XG4gICAgY2h1bmsgPSBudWxsO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG5cbiAgLy8gLmVuZCgpIGZ1bGx5IHVuY29ya3NcbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZCA9IDE7XG4gICAgdGhpcy51bmNvcmsoKTtcbiAgfVxuXG4gIC8vIGlnbm9yZSB1bm5lY2Vzc2FyeSBlbmQoKSBjYWxscy5cbiAgaWYgKCFzdGF0ZS5lbmRpbmcgJiYgIXN0YXRlLmZpbmlzaGVkKSBlbmRXcml0YWJsZSh0aGlzLCBzdGF0ZSwgY2IpO1xufTtcblxuZnVuY3Rpb24gbmVlZEZpbmlzaChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZW5kaW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5idWZmZXJlZFJlcXVlc3QgPT09IG51bGwgJiYgIXN0YXRlLmZpbmlzaGVkICYmICFzdGF0ZS53cml0aW5nO1xufVxuXG5mdW5jdGlvbiBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnByZWZpbmlzaGVkKSB7XG4gICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKSB7XG4gIHZhciBuZWVkID0gbmVlZEZpbmlzaChzdGF0ZSk7XG4gIGlmIChuZWVkKSB7XG4gICAgaWYgKHN0YXRlLnBlbmRpbmdjYiA9PT0gMCkge1xuICAgICAgcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgc3RhdGUuZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoJ2ZpbmlzaCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZWVkO1xufVxuXG5mdW5jdGlvbiBlbmRXcml0YWJsZShzdHJlYW0sIHN0YXRlLCBjYikge1xuICBzdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlKTtcbiAgaWYgKGNiKSB7XG4gICAgaWYgKHN0YXRlLmZpbmlzaGVkKSBwcm9jZXNzTmV4dFRpY2soY2IpO2Vsc2Ugc3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIGNiKTtcbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gIHN0cmVhbS53cml0YWJsZSA9IGZhbHNlO1xufVxuXG4vLyBJdCBzZWVtcyBhIGxpbmtlZCBsaXN0IGJ1dCBpdCBpcyBub3Rcbi8vIHRoZXJlIHdpbGwgYmUgb25seSAyIG9mIHRoZXNlIGZvciBlYWNoIHN0cmVhbVxuZnVuY3Rpb24gQ29ya2VkUmVxdWVzdChzdGF0ZSkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHRoaXMubmV4dCA9IG51bGw7XG4gIHRoaXMuZW50cnkgPSBudWxsO1xuICB0aGlzLmZpbmlzaCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICB2YXIgZW50cnkgPSBfdGhpcy5lbnRyeTtcbiAgICBfdGhpcy5lbnRyeSA9IG51bGw7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICB2YXIgY2IgPSBlbnRyeS5jYWxsYmFjaztcbiAgICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgICAgY2IoZXJyKTtcbiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZSkge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQgPSBfdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gX3RoaXM7XG4gICAgfVxuICB9O1xufSIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYnVmZmVyU2hpbSA9IHJlcXVpcmUoJ2J1ZmZlci1zaGltcycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyTGlzdDtcblxuZnVuY3Rpb24gQnVmZmVyTGlzdCgpIHtcbiAgdGhpcy5oZWFkID0gbnVsbDtcbiAgdGhpcy50YWlsID0gbnVsbDtcbiAgdGhpcy5sZW5ndGggPSAwO1xufVxuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiBudWxsIH07XG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7ZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgdGhpcy50YWlsID0gZW50cnk7XG4gICsrdGhpcy5sZW5ndGg7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiB0aGlzLmhlYWQgfTtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgdGhpcy5oZWFkID0gZW50cnk7XG4gICsrdGhpcy5sZW5ndGg7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIHZhciByZXQgPSB0aGlzLmhlYWQuZGF0YTtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO2Vsc2UgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQ7XG4gIC0tdGhpcy5sZW5ndGg7XG4gIHJldHVybiByZXQ7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgdGhpcy5sZW5ndGggPSAwO1xufTtcblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uIChzKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgdmFyIHJldCA9ICcnICsgcC5kYXRhO1xuICB3aGlsZSAocCA9IHAubmV4dCkge1xuICAgIHJldCArPSBzICsgcC5kYXRhO1xuICB9cmV0dXJuIHJldDtcbn07XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uIChuKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGJ1ZmZlclNoaW0uYWxsb2MoMCk7XG4gIGlmICh0aGlzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRoaXMuaGVhZC5kYXRhO1xuICB2YXIgcmV0ID0gYnVmZmVyU2hpbS5hbGxvY1Vuc2FmZShuID4+PiAwKTtcbiAgdmFyIHAgPSB0aGlzLmhlYWQ7XG4gIHZhciBpID0gMDtcbiAgd2hpbGUgKHApIHtcbiAgICBwLmRhdGEuY29weShyZXQsIGkpO1xuICAgIGkgKz0gcC5kYXRhLmxlbmd0aDtcbiAgICBwID0gcC5uZXh0O1xuICB9XG4gIHJldHVybiByZXQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xudmFyIGJ1ZmZlclNoaW0gPSByZXF1aXJlKCdidWZmZXItc2hpbXMnKTtcblxudmFyIGlzRW5jb2RpbmcgPSBCdWZmZXIuaXNFbmNvZGluZyB8fCBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgZW5jb2RpbmcgPSAnJyArIGVuY29kaW5nO1xuICBzd2l0Y2ggKGVuY29kaW5nICYmIGVuY29kaW5nLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOmNhc2UgJ3V0ZjgnOmNhc2UgJ3V0Zi04JzpjYXNlICdhc2NpaSc6Y2FzZSAnYmluYXJ5JzpjYXNlICdiYXNlNjQnOmNhc2UgJ3VjczInOmNhc2UgJ3Vjcy0yJzpjYXNlICd1dGYxNmxlJzpjYXNlICd1dGYtMTZsZSc6Y2FzZSAncmF3JzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgaWYgKCFlbmMpIHJldHVybiAndXRmOCc7XG4gIHZhciByZXRyaWVkO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jKSB7XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuICd1dGY4JztcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiAndXRmMTZsZSc7XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuICdsYXRpbjEnO1xuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBlbmM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAocmV0cmllZCkgcmV0dXJuOyAvLyB1bmRlZmluZWRcbiAgICAgICAgZW5jID0gKCcnICsgZW5jKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXRyaWVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIERvIG5vdCBjYWNoZSBgQnVmZmVyLmlzRW5jb2RpbmdgIHdoZW4gY2hlY2tpbmcgZW5jb2RpbmcgbmFtZXMgYXMgc29tZVxuLy8gbW9kdWxlcyBtb25rZXktcGF0Y2ggaXQgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGVuY29kaW5nc1xuZnVuY3Rpb24gbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIHZhciBuZW5jID0gX25vcm1hbGl6ZUVuY29kaW5nKGVuYyk7XG4gIGlmICh0eXBlb2YgbmVuYyAhPT0gJ3N0cmluZycgJiYgKEJ1ZmZlci5pc0VuY29kaW5nID09PSBpc0VuY29kaW5nIHx8ICFpc0VuY29kaW5nKGVuYykpKSB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmMpO1xuICByZXR1cm4gbmVuYyB8fCBlbmM7XG59XG5cbi8vIFN0cmluZ0RlY29kZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBlZmZpY2llbnRseSBzcGxpdHRpbmcgYSBzZXJpZXMgb2Zcbi8vIGJ1ZmZlcnMgaW50byBhIHNlcmllcyBvZiBKUyBzdHJpbmdzIHdpdGhvdXQgYnJlYWtpbmcgYXBhcnQgbXVsdGktYnl0ZVxuLy8gY2hhcmFjdGVycy5cbmV4cG9ydHMuU3RyaW5nRGVjb2RlciA9IFN0cmluZ0RlY29kZXI7XG5mdW5jdGlvbiBTdHJpbmdEZWNvZGVyKGVuY29kaW5nKSB7XG4gIHRoaXMuZW5jb2RpbmcgPSBub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZyk7XG4gIHZhciBuYjtcbiAgc3dpdGNoICh0aGlzLmVuY29kaW5nKSB7XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICB0aGlzLnRleHQgPSB1dGYxNlRleHQ7XG4gICAgICB0aGlzLmVuZCA9IHV0ZjE2RW5kO1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXRmOCc6XG4gICAgICB0aGlzLmZpbGxMYXN0ID0gdXRmOEZpbGxMYXN0O1xuICAgICAgbmIgPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgIHRoaXMudGV4dCA9IGJhc2U2NFRleHQ7XG4gICAgICB0aGlzLmVuZCA9IGJhc2U2NEVuZDtcbiAgICAgIG5iID0gMztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLndyaXRlID0gc2ltcGxlV3JpdGU7XG4gICAgICB0aGlzLmVuZCA9IHNpbXBsZUVuZDtcbiAgICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgdGhpcy5sYXN0VG90YWwgPSAwO1xuICB0aGlzLmxhc3RDaGFyID0gYnVmZmVyU2hpbS5hbGxvY1Vuc2FmZShuYik7XG59XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcjtcbiAgdmFyIGk7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgciA9IHRoaXMuZmlsbExhc3QoYnVmKTtcbiAgICBpZiAociA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaSA9IHRoaXMubGFzdE5lZWQ7XG4gICAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gIH1cbiAgaWYgKGkgPCBidWYubGVuZ3RoKSByZXR1cm4gciA/IHIgKyB0aGlzLnRleHQoYnVmLCBpKSA6IHRoaXMudGV4dChidWYsIGkpO1xuICByZXR1cm4gciB8fCAnJztcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IHV0ZjhFbmQ7XG5cbi8vIFJldHVybnMgb25seSBjb21wbGV0ZSBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS50ZXh0ID0gdXRmOFRleHQ7XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgcGFydGlhbCBub24tVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmZpbGxMYXN0ID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufTtcblxuLy8gQ2hlY2tzIHRoZSB0eXBlIG9mIGEgVVRGLTggYnl0ZSwgd2hldGhlciBpdCdzIEFTQ0lJLCBhIGxlYWRpbmcgYnl0ZSwgb3IgYVxuLy8gY29udGludWF0aW9uIGJ5dGUuXG5mdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpIHtcbiAgaWYgKGJ5dGUgPD0gMHg3RikgcmV0dXJuIDA7ZWxzZSBpZiAoYnl0ZSA+PiA1ID09PSAweDA2KSByZXR1cm4gMjtlbHNlIGlmIChieXRlID4+IDQgPT09IDB4MEUpIHJldHVybiAzO2Vsc2UgaWYgKGJ5dGUgPj4gMyA9PT0gMHgxRSkgcmV0dXJuIDQ7XG4gIHJldHVybiAtMTtcbn1cblxuLy8gQ2hlY2tzIGF0IG1vc3QgMyBieXRlcyBhdCB0aGUgZW5kIG9mIGEgQnVmZmVyIGluIG9yZGVyIHRvIGRldGVjdCBhblxuLy8gaW5jb21wbGV0ZSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3Rlci4gVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyAoMiwgMywgb3IgNClcbi8vIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgVVRGLTggY2hhcmFjdGVyIChpZiBhcHBsaWNhYmxlKSBhcmUgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tJbmNvbXBsZXRlKHNlbGYsIGJ1ZiwgaSkge1xuICB2YXIgaiA9IGJ1Zi5sZW5ndGggLSAxO1xuICBpZiAoaiA8IGkpIHJldHVybiAwO1xuICB2YXIgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkgc2VsZi5sYXN0TmVlZCA9IG5iIC0gMTtcbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgaWYgKC0taiA8IGkpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAyO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSkgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHtcbiAgICAgIGlmIChuYiA9PT0gMikgbmIgPSAwO2Vsc2Ugc2VsZi5sYXN0TmVlZCA9IG5iIC0gMztcbiAgICB9XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vLyBWYWxpZGF0ZXMgYXMgbWFueSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgYXNcbi8vIG5lZWRlZCBvciBhcmUgYXZhaWxhYmxlLiBJZiB3ZSBzZWUgYSBub24tY29udGludWF0aW9uIGJ5dGUgd2hlcmUgd2UgZXhwZWN0XG4vLyBvbmUsIHdlIFwicmVwbGFjZVwiIHRoZSB2YWxpZGF0ZWQgY29udGludWF0aW9uIGJ5dGVzIHdlJ3ZlIHNlZW4gc28gZmFyIHdpdGhcbi8vIFVURi04IHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgKCdcXHVmZmZkJyksIHRvIG1hdGNoIHY4J3MgVVRGLTggZGVjb2Rpbmdcbi8vIGJlaGF2aW9yLiBUaGUgY29udGludWF0aW9uIGJ5dGUgY2hlY2sgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMgaW4gdGhlIGNhc2Vcbi8vIHdoZXJlIGFsbCBvZiB0aGUgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIGNoYXJhY3RlciBleGlzdCBpbiB0aGUgc2FtZSBidWZmZXIuXG4vLyBJdCBpcyBhbHNvIGRvbmUgdGhpcyB3YXkgYXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaW5zdGVhZCBvZiB1c2luZyBhXG4vLyBsb29wLlxuZnVuY3Rpb24gdXRmOENoZWNrRXh0cmFCeXRlcyhzZWxmLCBidWYsIHApIHtcbiAgaWYgKChidWZbMF0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgIHNlbGYubGFzdE5lZWQgPSAwO1xuICAgIHJldHVybiAnXFx1ZmZmZCcucmVwZWF0KHApO1xuICB9XG4gIGlmIChzZWxmLmxhc3ROZWVkID4gMSAmJiBidWYubGVuZ3RoID4gMSkge1xuICAgIGlmICgoYnVmWzFdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgIHNlbGYubGFzdE5lZWQgPSAxO1xuICAgICAgcmV0dXJuICdcXHVmZmZkJy5yZXBlYXQocCArIDEpO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sYXN0TmVlZCA+IDIgJiYgYnVmLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgoYnVmWzJdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgICAgc2VsZi5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHJldHVybiAnXFx1ZmZmZCcucmVwZWF0KHAgKyAyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyLlxuZnVuY3Rpb24gdXRmOEZpbGxMYXN0KGJ1Zikge1xuICB2YXIgcCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgdmFyIHIgPSB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHRoaXMsIGJ1ZiwgcCk7XG4gIGlmIChyICE9PSB1bmRlZmluZWQpIHJldHVybiByO1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgdGhpcy5sYXN0TmVlZCk7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpO1xuICB9XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59XG5cbi8vIFJldHVybnMgYWxsIGNvbXBsZXRlIFVURi04IGNoYXJhY3RlcnMgaW4gYSBCdWZmZXIuIElmIHRoZSBCdWZmZXIgZW5kZWQgb24gYVxuLy8gcGFydGlhbCBjaGFyYWN0ZXIsIHRoZSBjaGFyYWN0ZXIncyBieXRlcyBhcmUgYnVmZmVyZWQgdW50aWwgdGhlIHJlcXVpcmVkXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXJlIGF2YWlsYWJsZS5cbmZ1bmN0aW9uIHV0ZjhUZXh0KGJ1ZiwgaSkge1xuICB2YXIgdG90YWwgPSB1dGY4Q2hlY2tJbmNvbXBsZXRlKHRoaXMsIGJ1ZiwgaSk7XG4gIGlmICghdGhpcy5sYXN0TmVlZCkgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGkpO1xuICB0aGlzLmxhc3RUb3RhbCA9IHRvdGFsO1xuICB2YXIgZW5kID0gYnVmLmxlbmd0aCAtICh0b3RhbCAtIHRoaXMubGFzdE5lZWQpO1xuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCAwLCBlbmQpO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSwgZW5kKTtcbn1cblxuLy8gRm9yIFVURi04LCBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciBmb3IgZWFjaCBidWZmZXJlZCBieXRlIG9mIGEgKHBhcnRpYWwpXG4vLyBjaGFyYWN0ZXIgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIG91dHB1dC5cbmZ1bmN0aW9uIHV0ZjhFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgJ1xcdWZmZmQnLnJlcGVhdCh0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gVVRGLTE2TEUgdHlwaWNhbGx5IG5lZWRzIHR3byBieXRlcyBwZXIgY2hhcmFjdGVyLCBidXQgZXZlbiBpZiB3ZSBoYXZlIGFuIGV2ZW5cbi8vIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUsIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgZW5kIG9uIGEgbGVhZGluZy9oaWdoXG4vLyBzdXJyb2dhdGUuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gb3JkZXIgdG9cbi8vIGRlY29kZSB0aGUgbGFzdCBjaGFyYWN0ZXIgcHJvcGVybHkuXG5mdW5jdGlvbiB1dGYxNlRleHQoYnVmLCBpKSB7XG4gIGlmICgoYnVmLmxlbmd0aCAtIGkpICUgMiA9PT0gMCkge1xuICAgIHZhciByID0gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSk7XG4gICAgaWYgKHIpIHtcbiAgICAgIHZhciBjID0gci5jaGFyQ29kZUF0KHIubGVuZ3RoIC0gMSk7XG4gICAgICBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERCRkYpIHtcbiAgICAgICAgdGhpcy5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHRoaXMubGFzdFRvdGFsID0gNDtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICAgICAgICByZXR1cm4gci5zbGljZSgwLCAtMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAxO1xuICB0aGlzLmxhc3RUb3RhbCA9IDI7XG4gIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGYxNmxlJywgaSwgYnVmLmxlbmd0aCAtIDEpO1xufVxuXG4vLyBGb3IgVVRGLTE2TEUgd2UgZG8gbm90IGV4cGxpY2l0bHkgYXBwZW5kIHNwZWNpYWwgcmVwbGFjZW1lbnQgY2hhcmFjdGVycyBpZiB3ZVxuLy8gZW5kIG9uIGEgcGFydGlhbCBjaGFyYWN0ZXIsIHdlIHNpbXBseSBsZXQgdjggaGFuZGxlIHRoYXQuXG5mdW5jdGlvbiB1dGYxNkVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkge1xuICAgIHZhciBlbmQgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gICAgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCd1dGYxNmxlJywgMCwgZW5kKTtcbiAgfVxuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gYmFzZTY0VGV4dChidWYsIGkpIHtcbiAgdmFyIG4gPSAoYnVmLmxlbmd0aCAtIGkpICUgMztcbiAgaWYgKG4gPT09IDApIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGkpO1xuICB0aGlzLmxhc3ROZWVkID0gMyAtIG47XG4gIHRoaXMubGFzdFRvdGFsID0gMztcbiAgaWYgKG4gPT09IDEpIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgfVxuICByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpLCBidWYubGVuZ3RoIC0gbik7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCdiYXNlNjQnLCAwLCAzIC0gdGhpcy5sYXN0TmVlZCk7XG4gIHJldHVybiByO1xufVxuXG4vLyBQYXNzIGJ5dGVzIG9uIHRocm91Z2ggZm9yIHNpbmdsZS1ieXRlIGVuY29kaW5ncyAoZS5nLiBhc2NpaSwgbGF0aW4xLCBoZXgpXG5mdW5jdGlvbiBzaW1wbGVXcml0ZShidWYpIHtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZyh0aGlzLmVuY29kaW5nKTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlRW5kKGJ1Zikge1xuICByZXR1cm4gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKS5QYXNzVGhyb3VnaFxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcycpO1xuZXhwb3J0cy5TdHJlYW0gPSBleHBvcnRzO1xuZXhwb3J0cy5SZWFkYWJsZSA9IGV4cG9ydHM7XG5leHBvcnRzLldyaXRhYmxlID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcycpO1xuZXhwb3J0cy5EdXBsZXggPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuZXhwb3J0cy5UcmFuc2Zvcm0gPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcycpO1xuZXhwb3J0cy5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMnKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpLlRyYW5zZm9ybVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjb3JlID0gcmVxdWlyZSgnLi4vJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJ2xvZGFzaC9pc0FycmF5JyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJ2xvZGFzaC9pc0Z1bmN0aW9uJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnbG9kYXNoL2lzT2JqZWN0TGlrZScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblxuICAgIHZhciBlcnJvclRleHQgPSAnUGxlYXNlIHZlcmlmeSBvcHRpb25zJzsgLy8gRm9yIGJldHRlciBtaW5pZmljYXRpb24gYmVjYXVzZSB0aGlzIHN0cmluZyBpcyByZXBlYXRpbmdcblxuICAgIGlmICghaXNPYmplY3RMaWtlKG9wdGlvbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3JUZXh0KTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24ob3B0aW9ucy5yZXF1ZXN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGVycm9yVGV4dCArICcucmVxdWVzdCcpO1xuICAgIH1cblxuICAgIGlmICghaXNBcnJheShvcHRpb25zLmV4cG9zZSkgfHwgb3B0aW9ucy5leHBvc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3JUZXh0ICsgJy5leHBvc2UnKTtcbiAgICB9XG5cblxuICAgIHZhciBwbHVtYmluZyA9IGNvcmUoe1xuICAgICAgICBQcm9taXNlSW1wbDogb3B0aW9ucy5Qcm9taXNlSW1wbCxcbiAgICAgICAgY29uc3RydWN0b3JNaXhpbjogb3B0aW9ucy5jb25zdHJ1Y3Rvck1peGluXG4gICAgfSk7XG5cblxuICAgIC8vIEludGVyY2VwdGluZyBSZXF1ZXN0J3MgaW5pdCBtZXRob2RcblxuICAgIHZhciBvcmlnaW5hbEluaXQgPSBvcHRpb25zLnJlcXVlc3QuUmVxdWVzdC5wcm90b3R5cGUuaW5pdDtcblxuICAgIG9wdGlvbnMucmVxdWVzdC5SZXF1ZXN0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gUlAkaW5pdEludGVyY2VwdG9yKHJlcXVlc3RPcHRpb25zKSB7XG5cbiAgICAgICAgLy8gSW5pdCBtYXkgYmUgY2FsbGVkIGFnYWluIC0gY3VycmVudGx5IGluIGNhc2Ugb2YgcmVkaXJlY3RzXG4gICAgICAgIGlmIChpc09iamVjdExpa2UocmVxdWVzdE9wdGlvbnMpICYmICF0aGlzLl9jYWxsYmFjayAmJiAhdGhpcy5fcnBfcHJvbWlzZSkge1xuXG4gICAgICAgICAgICBwbHVtYmluZy5pbml0LmNhbGwodGhpcywgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3JpZ2luYWxJbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB9O1xuXG5cbiAgICAvLyBFeHBvc2luZyB0aGUgUHJvbWlzZSBjYXBhYmlsaXRpZXNcblxuICAgIHZhciB0aGVuRXhwb3NlZCA9IGZhbHNlO1xuICAgIGZvciAoIHZhciBpID0gMDsgaSA8IG9wdGlvbnMuZXhwb3NlLmxlbmd0aDsgaSs9MSApIHtcblxuICAgICAgICB2YXIgbWV0aG9kID0gb3B0aW9ucy5leHBvc2VbaV07XG5cbiAgICAgICAgcGx1bWJpbmdbIG1ldGhvZCA9PT0gJ3Byb21pc2UnID8gJ2V4cG9zZVByb21pc2UnIDogJ2V4cG9zZVByb21pc2VNZXRob2QnIF0oXG4gICAgICAgICAgICBvcHRpb25zLnJlcXVlc3QuUmVxdWVzdC5wcm90b3R5cGUsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgJ19ycF9wcm9taXNlJyxcbiAgICAgICAgICAgIG1ldGhvZFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChtZXRob2QgPT09ICd0aGVuJykge1xuICAgICAgICAgICAgdGhlbkV4cG9zZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoIXRoZW5FeHBvc2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGV4cG9zZSBcInRoZW5cIicpO1xuICAgIH1cblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG5mdW5jdGlvbiBSZXF1ZXN0RXJyb3IoY2F1c2UsIG9wdGlvbnMsIHJlc3BvbnNlKSB7XG5cbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdEVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSBTdHJpbmcoY2F1c2UpO1xuICAgIHRoaXMuY2F1c2UgPSBjYXVzZTtcbiAgICB0aGlzLmVycm9yID0gY2F1c2U7IC8vIGxlZ2FjeSBhdHRyaWJ1dGVcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgeyAvLyByZXF1aXJlZCBmb3Igbm9uLVY4IGVudmlyb25tZW50c1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzKTtcbiAgICB9XG5cbn1cblJlcXVlc3RFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5SZXF1ZXN0RXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVxdWVzdEVycm9yO1xuXG5cbmZ1bmN0aW9uIFN0YXR1c0NvZGVFcnJvcihzdGF0dXNDb2RlLCBib2R5LCBvcHRpb25zLCByZXNwb25zZSkge1xuXG4gICAgdGhpcy5uYW1lID0gJ1N0YXR1c0NvZGVFcnJvcic7XG4gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBzdGF0dXNDb2RlICsgJyAtICcgKyAoSlNPTiAmJiBKU09OLnN0cmluZ2lmeSA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogYm9keSk7XG4gICAgdGhpcy5lcnJvciA9IGJvZHk7IC8vIGxlZ2FjeSBhdHRyaWJ1dGVcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgeyAvLyByZXF1aXJlZCBmb3Igbm9uLVY4IGVudmlyb25tZW50c1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzKTtcbiAgICB9XG5cbn1cblN0YXR1c0NvZGVFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5TdGF0dXNDb2RlRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RhdHVzQ29kZUVycm9yO1xuXG5cbmZ1bmN0aW9uIFRyYW5zZm9ybUVycm9yKGNhdXNlLCBvcHRpb25zLCByZXNwb25zZSkge1xuXG4gICAgdGhpcy5uYW1lID0gJ1RyYW5zZm9ybUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSBTdHJpbmcoY2F1c2UpO1xuICAgIHRoaXMuY2F1c2UgPSBjYXVzZTtcbiAgICB0aGlzLmVycm9yID0gY2F1c2U7IC8vIGxlZ2FjeSBhdHRyaWJ1dGVcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcblxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgeyAvLyByZXF1aXJlZCBmb3Igbm9uLVY4IGVudmlyb25tZW50c1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzKTtcbiAgICB9XG5cbn1cblRyYW5zZm9ybUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblRyYW5zZm9ybUVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRyYW5zZm9ybUVycm9yO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIFJlcXVlc3RFcnJvcjogUmVxdWVzdEVycm9yLFxuICAgIFN0YXR1c0NvZGVFcnJvcjogU3RhdHVzQ29kZUVycm9yLFxuICAgIFRyYW5zZm9ybUVycm9yOiBUcmFuc2Zvcm1FcnJvclxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVycm9ycyA9IHJlcXVpcmUoJy4vZXJyb3JzLmpzJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJ2xvZGFzaC9pc0Z1bmN0aW9uJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnbG9kYXNoL2lzT2JqZWN0TGlrZScpLFxuICAgIGlzU3RyaW5nID0gcmVxdWlyZSgnbG9kYXNoL2lzU3RyaW5nJyksXG4gICAgaXNVbmRlZmluZWQgPSByZXF1aXJlKCdsb2Rhc2gvaXNVbmRlZmluZWQnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cbiAgICB2YXIgZXJyb3JUZXh0ID0gJ1BsZWFzZSB2ZXJpZnkgb3B0aW9ucyc7IC8vIEZvciBiZXR0ZXIgbWluaWZpY2F0aW9uIGJlY2F1c2UgdGhpcyBzdHJpbmcgaXMgcmVwZWF0aW5nXG5cbiAgICBpZiAoIWlzT2JqZWN0TGlrZShvcHRpb25zKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGVycm9yVGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKG9wdGlvbnMuUHJvbWlzZUltcGwpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3JUZXh0ICsgJy5Qcm9taXNlSW1wbCcpO1xuICAgIH1cblxuICAgIGlmICghaXNVbmRlZmluZWQob3B0aW9ucy5jb25zdHJ1Y3Rvck1peGluKSAmJiAhaXNGdW5jdGlvbihvcHRpb25zLmNvbnN0cnVjdG9yTWl4aW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3JUZXh0ICsgJy5Qcm9taXNlSW1wbCcpO1xuICAgIH1cblxuICAgIHZhciBQcm9taXNlSW1wbCA9IG9wdGlvbnMuUHJvbWlzZUltcGw7XG4gICAgdmFyIGNvbnN0cnVjdG9yTWl4aW4gPSBvcHRpb25zLmNvbnN0cnVjdG9yTWl4aW47XG5cblxuICAgIHZhciBwbHVtYmluZyA9IHt9O1xuXG4gICAgcGx1bWJpbmcuaW5pdCA9IGZ1bmN0aW9uIChyZXF1ZXN0T3B0aW9ucykge1xuXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICBzZWxmLl9ycF9wcm9taXNlID0gbmV3IFByb21pc2VJbXBsKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHNlbGYuX3JwX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgc2VsZi5fcnBfcmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yTWl4aW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvck1peGluLmFwcGx5KHNlbGYsIGFyZ3VtZW50cyk7IC8vIFVzaW5nIGFyZ3VtZW50cyBzaW5jZSBzcGVjaWZpYyBQcm9taXNlIGxpYnJhcmllcyBtYXkgcGFzcyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2VsZi5fcnBfY2FsbGJhY2tPcmlnID0gcmVxdWVzdE9wdGlvbnMuY2FsbGJhY2s7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNhbGxiYWNrID0gc2VsZi5jYWxsYmFjayA9IGZ1bmN0aW9uIFJQJGNhbGxiYWNrKGVyciwgcmVzcG9uc2UsIGJvZHkpIHtcbiAgICAgICAgICAgIHBsdW1iaW5nLmNhbGxiYWNrLmNhbGwoc2VsZiwgZXJyLCByZXNwb25zZSwgYm9keSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGlzU3RyaW5nKHJlcXVlc3RPcHRpb25zLm1ldGhvZCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLm1ldGhvZCA9IHJlcXVlc3RPcHRpb25zLm1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdE9wdGlvbnMudHJhbnNmb3JtID0gcmVxdWVzdE9wdGlvbnMudHJhbnNmb3JtIHx8IHBsdW1iaW5nLmRlZmF1bHRUcmFuc2Zvcm1hdGlvbnNbcmVxdWVzdE9wdGlvbnMubWV0aG9kXTtcblxuICAgICAgICBzZWxmLl9ycF9vcHRpb25zID0gcmVxdWVzdE9wdGlvbnM7XG4gICAgICAgIHNlbGYuX3JwX29wdGlvbnMuc2ltcGxlID0gcmVxdWVzdE9wdGlvbnMuc2ltcGxlICE9PSBmYWxzZTtcbiAgICAgICAgc2VsZi5fcnBfb3B0aW9ucy5yZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSA9IHJlcXVlc3RPcHRpb25zLnJlc29sdmVXaXRoRnVsbFJlc3BvbnNlID09PSB0cnVlO1xuICAgICAgICBzZWxmLl9ycF9vcHRpb25zLnRyYW5zZm9ybTJ4eE9ubHkgPSByZXF1ZXN0T3B0aW9ucy50cmFuc2Zvcm0yeHhPbmx5ID09PSB0cnVlO1xuXG4gICAgfTtcblxuICAgIHBsdW1iaW5nLmRlZmF1bHRUcmFuc2Zvcm1hdGlvbnMgPSB7XG4gICAgICAgIEhFQUQ6IGZ1bmN0aW9uIChib2R5LCByZXNwb25zZSwgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSA/IHJlc3BvbnNlIDogcmVzcG9uc2UuaGVhZGVycztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwbHVtYmluZy5jYWxsYmFjayA9IGZ1bmN0aW9uIChlcnIsIHJlc3BvbnNlLCBib2R5KSB7XG5cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHZhciBvcmlnQ2FsbGJhY2tUaHJld0V4Y2VwdGlvbiA9IGZhbHNlLCB0aHJvd25FeGNlcHRpb24gPSBudWxsO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHNlbGYuX3JwX2NhbGxiYWNrT3JpZykpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fcnBfY2FsbGJhY2tPcmlnLmFwcGx5KHNlbGYsIGFyZ3VtZW50cyk7IC8vIFRPRE86IEFwcGx5IHRvIHNlbGYgbWltaWNzIGJlaGF2aW9yIG9mIHJlcXVlc3RAMi4gSXMgdGhhdCBhbHNvIHJpZ2h0IGZvciByZXF1ZXN0QG5leHQ/XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgb3JpZ0NhbGxiYWNrVGhyZXdFeGNlcHRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRocm93bkV4Y2VwdGlvbiA9IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaXMyeHggPSAhZXJyICYmIC9eMi8udGVzdCgnJyArIHJlc3BvbnNlLnN0YXR1c0NvZGUpO1xuXG4gICAgICAgIGlmIChlcnIpIHtcblxuICAgICAgICAgICAgc2VsZi5fcnBfcmVqZWN0KG5ldyBlcnJvcnMuUmVxdWVzdEVycm9yKGVyciwgc2VsZi5fcnBfb3B0aW9ucywgcmVzcG9uc2UpKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHNlbGYuX3JwX29wdGlvbnMuc2ltcGxlICYmICFpczJ4eCkge1xuXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihzZWxmLl9ycF9vcHRpb25zLnRyYW5zZm9ybSkgJiYgc2VsZi5fcnBfb3B0aW9ucy50cmFuc2Zvcm0yeHhPbmx5ID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgKG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNlbGYuX3JwX29wdGlvbnMudHJhbnNmb3JtKGJvZHksIHJlc3BvbnNlLCBzZWxmLl9ycF9vcHRpb25zLnJlc29sdmVXaXRoRnVsbFJlc3BvbnNlKSk7IC8vIHRyYW5zZm9ybSBtYXkgcmV0dXJuIGEgUHJvbWlzZVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodHJhbnNmb3JtZWRSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnBfcmVqZWN0KG5ldyBlcnJvcnMuU3RhdHVzQ29kZUVycm9yKHJlc3BvbnNlLnN0YXR1c0NvZGUsIGJvZHksIHNlbGYuX3JwX29wdGlvbnMsIHRyYW5zZm9ybWVkUmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICh0cmFuc2Zvcm1FcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JwX3JlamVjdChuZXcgZXJyb3JzLlRyYW5zZm9ybUVycm9yKHRyYW5zZm9ybUVyciwgc2VsZi5fcnBfb3B0aW9ucywgcmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fcnBfcmVqZWN0KG5ldyBlcnJvcnMuU3RhdHVzQ29kZUVycm9yKHJlc3BvbnNlLnN0YXR1c0NvZGUsIGJvZHksIHNlbGYuX3JwX29wdGlvbnMsIHJlc3BvbnNlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2VsZi5fcnBfb3B0aW9ucy50cmFuc2Zvcm0pICYmIChpczJ4eCB8fCBzZWxmLl9ycF9vcHRpb25zLnRyYW5zZm9ybTJ4eE9ubHkgPT09IGZhbHNlKSkge1xuXG4gICAgICAgICAgICAgICAgKG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNlbGYuX3JwX29wdGlvbnMudHJhbnNmb3JtKGJvZHksIHJlc3BvbnNlLCBzZWxmLl9ycF9vcHRpb25zLnJlc29sdmVXaXRoRnVsbFJlc3BvbnNlKSk7IC8vIHRyYW5zZm9ybSBtYXkgcmV0dXJuIGEgUHJvbWlzZVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodHJhbnNmb3JtZWRSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnBfcmVzb2x2ZSh0cmFuc2Zvcm1lZFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICh0cmFuc2Zvcm1FcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JwX3JlamVjdChuZXcgZXJyb3JzLlRyYW5zZm9ybUVycm9yKHRyYW5zZm9ybUVyciwgc2VsZi5fcnBfb3B0aW9ucywgcmVzcG9uc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZi5fcnBfb3B0aW9ucy5yZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuX3JwX3Jlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9ycF9yZXNvbHZlKGJvZHkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3JpZ0NhbGxiYWNrVGhyZXdFeGNlcHRpb24pIHtcbiAgICAgICAgICAgIHRocm93IHRocm93bkV4Y2VwdGlvbjtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIHBsdW1iaW5nLmV4cG9zZVByb21pc2VNZXRob2QgPSBmdW5jdGlvbiAoZXhwb3NlVG8sIGJpbmRUbywgcHJvbWlzZVByb3BlcnR5S2V5LCBtZXRob2RUb0V4cG9zZSwgZXhwb3NlQXMpIHtcblxuICAgICAgICBleHBvc2VBcyA9IGV4cG9zZUFzIHx8IG1ldGhvZFRvRXhwb3NlO1xuXG4gICAgICAgIGlmIChleHBvc2VBcyBpbiBleHBvc2VUbykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZXhwb3NlIG1ldGhvZCBcIicgKyBleHBvc2VBcyArICdcIicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwb3NlVG9bZXhwb3NlQXNdID0gZnVuY3Rpb24gUlAkZXhwb3NlZCgpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gYmluZFRvIHx8IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gc2VsZltwcm9taXNlUHJvcGVydHlLZXldW21ldGhvZFRvRXhwb3NlXS5hcHBseShzZWxmW3Byb21pc2VQcm9wZXJ0eUtleV0sIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICB9O1xuXG4gICAgcGx1bWJpbmcuZXhwb3NlUHJvbWlzZSA9IGZ1bmN0aW9uIChleHBvc2VUbywgYmluZFRvLCBwcm9taXNlUHJvcGVydHlLZXksIGV4cG9zZUFzKSB7XG5cbiAgICAgICAgZXhwb3NlQXMgPSBleHBvc2VBcyB8fCAncHJvbWlzZSc7XG5cbiAgICAgICAgaWYgKGV4cG9zZUFzIGluIGV4cG9zZVRvKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBleHBvc2UgbWV0aG9kIFwiJyArIGV4cG9zZUFzICsgJ1wiJyk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBvc2VUb1tleHBvc2VBc10gPSBmdW5jdGlvbiBSUCRwcm9taXNlKCkge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSBiaW5kVG8gfHwgdGhpcztcbiAgICAgICAgICAgIHJldHVybiBzZWxmW3Byb21pc2VQcm9wZXJ0eUtleV07XG4gICAgICAgIH07XG5cbiAgICB9O1xuXG4gICAgcmV0dXJuIHBsdW1iaW5nO1xuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY29uZmlndXJlID0gcmVxdWlyZSgncmVxdWVzdC1wcm9taXNlLWNvcmUvY29uZmlndXJlL3JlcXVlc3QyJyksXG4gICAgc3RlYWx0aHlSZXF1aXJlID0gcmVxdWlyZSgnc3RlYWx0aHktcmVxdWlyZScpO1xuXG4vLyBMb2FkIFJlcXVlc3QgZnJlc2hseSAtIHNvIHRoYXQgdXNlcnMgY2FuIHJlcXVpcmUgYW4gdW5hbHRlcmVkIHJlcXVlc3QgaW5zdGFuY2UhXG52YXIgcmVxdWVzdCA9IHN0ZWFsdGh5UmVxdWlyZShyZXF1aXJlLmNhY2hlLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJ3JlcXVlc3QnKTtcbn0sXG5mdW5jdGlvbiAoKSB7XG4gICAgcmVxdWlyZSgndG91Z2gtY29va2llJyk7XG59LCBtb2R1bGUpO1xuXG5cbmNvbmZpZ3VyZSh7XG4gICAgcmVxdWVzdDogcmVxdWVzdCxcbiAgICBQcm9taXNlSW1wbDogUHJvbWlzZSxcbiAgICBleHBvc2U6IFtcbiAgICAgICAgJ3RoZW4nLFxuICAgICAgICAnY2F0Y2gnLFxuICAgICAgICAncHJvbWlzZSdcbiAgICBdXG59KTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVlc3Q7XG4iLCIvLyBDb3B5cmlnaHQgMjAxMC0yMDEyIE1pa2VhbCBSb2dlcnNcbi8vXG4vLyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgZXh0ZW5kICAgICAgICAgICAgICAgID0gcmVxdWlyZSgnZXh0ZW5kJylcbiAgLCBjb29raWVzICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL2xpYi9jb29raWVzJylcbiAgLCBoZWxwZXJzICAgICAgICAgICAgICAgPSByZXF1aXJlKCcuL2xpYi9oZWxwZXJzJylcblxudmFyIHBhcmFtc0hhdmVSZXF1ZXN0Qm9keSA9IGhlbHBlcnMucGFyYW1zSGF2ZVJlcXVlc3RCb2R5XG5cblxuLy8gb3JnYW5pemUgcGFyYW1zIGZvciBwYXRjaCwgcG9zdCwgcHV0LCBoZWFkLCBkZWxcbmZ1bmN0aW9uIGluaXRQYXJhbXModXJpLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IG9wdGlvbnNcbiAgfVxuXG4gIHZhciBwYXJhbXMgPSB7fVxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgZXh0ZW5kKHBhcmFtcywgb3B0aW9ucywge3VyaTogdXJpfSlcbiAgfSBlbHNlIGlmICh0eXBlb2YgdXJpID09PSAnc3RyaW5nJykge1xuICAgIGV4dGVuZChwYXJhbXMsIHt1cmk6IHVyaX0pXG4gIH0gZWxzZSB7XG4gICAgZXh0ZW5kKHBhcmFtcywgdXJpKVxuICB9XG5cbiAgcGFyYW1zLmNhbGxiYWNrID0gY2FsbGJhY2sgfHwgcGFyYW1zLmNhbGxiYWNrXG4gIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gcmVxdWVzdCAodXJpLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIHVyaSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZGVmaW5lZCBpcyBub3QgYSB2YWxpZCB1cmkgb3Igb3B0aW9ucyBvYmplY3QuJylcbiAgfVxuXG4gIHZhciBwYXJhbXMgPSBpbml0UGFyYW1zKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spXG5cbiAgaWYgKHBhcmFtcy5tZXRob2QgPT09ICdIRUFEJyAmJiBwYXJhbXNIYXZlUmVxdWVzdEJvZHkocGFyYW1zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSFRUUCBIRUFEIHJlcXVlc3RzIE1VU1QgTk9UIGluY2x1ZGUgYSByZXF1ZXN0IGJvZHkuJylcbiAgfVxuXG4gIHJldHVybiBuZXcgcmVxdWVzdC5SZXF1ZXN0KHBhcmFtcylcbn1cblxuZnVuY3Rpb24gdmVyYkZ1bmMgKHZlcmIpIHtcbiAgdmFyIG1ldGhvZCA9IHZlcmIudG9VcHBlckNhc2UoKVxuICByZXR1cm4gZnVuY3Rpb24gKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICB2YXIgcGFyYW1zID0gaW5pdFBhcmFtcyh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgIHBhcmFtcy5tZXRob2QgPSBtZXRob2RcbiAgICByZXR1cm4gcmVxdWVzdChwYXJhbXMsIHBhcmFtcy5jYWxsYmFjaylcbiAgfVxufVxuXG4vLyBkZWZpbmUgbGlrZSB0aGlzIHRvIHBsZWFzZSBjb2RlaW50ZWwvaW50ZWxsaXNlbnNlIElERXNcbnJlcXVlc3QuZ2V0ID0gdmVyYkZ1bmMoJ2dldCcpXG5yZXF1ZXN0LmhlYWQgPSB2ZXJiRnVuYygnaGVhZCcpXG5yZXF1ZXN0LnBvc3QgPSB2ZXJiRnVuYygncG9zdCcpXG5yZXF1ZXN0LnB1dCA9IHZlcmJGdW5jKCdwdXQnKVxucmVxdWVzdC5wYXRjaCA9IHZlcmJGdW5jKCdwYXRjaCcpXG5yZXF1ZXN0LmRlbCA9IHZlcmJGdW5jKCdkZWxldGUnKVxucmVxdWVzdFsnZGVsZXRlJ10gPSB2ZXJiRnVuYygnZGVsZXRlJylcblxucmVxdWVzdC5qYXIgPSBmdW5jdGlvbiAoc3RvcmUpIHtcbiAgcmV0dXJuIGNvb2tpZXMuamFyKHN0b3JlKVxufVxuXG5yZXF1ZXN0LmNvb2tpZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIGNvb2tpZXMucGFyc2Uoc3RyKVxufVxuXG5mdW5jdGlvbiB3cmFwUmVxdWVzdE1ldGhvZCAobWV0aG9kLCBvcHRpb25zLCByZXF1ZXN0ZXIsIHZlcmIpIHtcblxuICByZXR1cm4gZnVuY3Rpb24gKHVyaSwgb3B0cywgY2FsbGJhY2spIHtcbiAgICB2YXIgcGFyYW1zID0gaW5pdFBhcmFtcyh1cmksIG9wdHMsIGNhbGxiYWNrKVxuXG4gICAgdmFyIHRhcmdldCA9IHt9XG4gICAgZXh0ZW5kKHRydWUsIHRhcmdldCwgb3B0aW9ucywgcGFyYW1zKVxuXG4gICAgdGFyZ2V0LnBvb2wgPSBwYXJhbXMucG9vbCB8fCBvcHRpb25zLnBvb2xcblxuICAgIGlmICh2ZXJiKSB7XG4gICAgICB0YXJnZXQubWV0aG9kID0gdmVyYi50b1VwcGVyQ2FzZSgpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1ldGhvZCA9IHJlcXVlc3RlclxuICAgIH1cblxuICAgIHJldHVybiBtZXRob2QodGFyZ2V0LCB0YXJnZXQuY2FsbGJhY2spXG4gIH1cbn1cblxucmVxdWVzdC5kZWZhdWx0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCByZXF1ZXN0ZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXF1ZXN0ZXIgPSBvcHRpb25zXG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB2YXIgZGVmYXVsdHMgICAgICA9IHdyYXBSZXF1ZXN0TWV0aG9kKHNlbGYsIG9wdGlvbnMsIHJlcXVlc3RlcilcblxuICB2YXIgdmVyYnMgPSBbJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2RlbCcsICdkZWxldGUnXVxuICB2ZXJicy5mb3JFYWNoKGZ1bmN0aW9uKHZlcmIpIHtcbiAgICBkZWZhdWx0c1t2ZXJiXSAgPSB3cmFwUmVxdWVzdE1ldGhvZChzZWxmW3ZlcmJdLCBvcHRpb25zLCByZXF1ZXN0ZXIsIHZlcmIpXG4gIH0pXG5cbiAgZGVmYXVsdHMuY29va2llICAgPSB3cmFwUmVxdWVzdE1ldGhvZChzZWxmLmNvb2tpZSwgb3B0aW9ucywgcmVxdWVzdGVyKVxuICBkZWZhdWx0cy5qYXIgICAgICA9IHNlbGYuamFyXG4gIGRlZmF1bHRzLmRlZmF1bHRzID0gc2VsZi5kZWZhdWx0c1xuICByZXR1cm4gZGVmYXVsdHNcbn1cblxucmVxdWVzdC5mb3JldmVyID0gZnVuY3Rpb24gKGFnZW50T3B0aW9ucywgb3B0aW9uc0FyZykge1xuICB2YXIgb3B0aW9ucyA9IHt9XG4gIGlmIChvcHRpb25zQXJnKSB7XG4gICAgZXh0ZW5kKG9wdGlvbnMsIG9wdGlvbnNBcmcpXG4gIH1cbiAgaWYgKGFnZW50T3B0aW9ucykge1xuICAgIG9wdGlvbnMuYWdlbnRPcHRpb25zID0gYWdlbnRPcHRpb25zXG4gIH1cblxuICBvcHRpb25zLmZvcmV2ZXIgPSB0cnVlXG4gIHJldHVybiByZXF1ZXN0LmRlZmF1bHRzKG9wdGlvbnMpXG59XG5cbi8vIEV4cG9ydHNcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1ZXN0XG5yZXF1ZXN0LlJlcXVlc3QgPSByZXF1aXJlKCcuL3JlcXVlc3QnKVxucmVxdWVzdC5pbml0UGFyYW1zID0gaW5pdFBhcmFtc1xuXG4vLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgcmVxdWVzdC5kZWJ1Z1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVlc3QsICdkZWJ1ZycsIHtcbiAgZW51bWVyYWJsZSA6IHRydWUsXG4gIGdldCA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiByZXF1ZXN0LlJlcXVlc3QuZGVidWdcbiAgfSxcbiAgc2V0IDogZnVuY3Rpb24oZGVidWcpIHtcbiAgICByZXF1ZXN0LlJlcXVlc3QuZGVidWcgPSBkZWJ1Z1xuICB9XG59KVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBjYXNlbGVzcyA9IHJlcXVpcmUoJ2Nhc2VsZXNzJylcbiAgLCB1dWlkID0gcmVxdWlyZSgndXVpZCcpXG4gICwgaGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpXG5cbnZhciBtZDUgPSBoZWxwZXJzLm1kNVxuICAsIHRvQmFzZTY0ID0gaGVscGVycy50b0Jhc2U2NFxuXG5cbmZ1bmN0aW9uIEF1dGggKHJlcXVlc3QpIHtcbiAgLy8gZGVmaW5lIGFsbCBwdWJsaWMgcHJvcGVydGllcyBoZXJlXG4gIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RcbiAgdGhpcy5oYXNBdXRoID0gZmFsc2VcbiAgdGhpcy5zZW50QXV0aCA9IGZhbHNlXG4gIHRoaXMuYmVhcmVyVG9rZW4gPSBudWxsXG4gIHRoaXMudXNlciA9IG51bGxcbiAgdGhpcy5wYXNzID0gbnVsbFxufVxuXG5BdXRoLnByb3RvdHlwZS5iYXNpYyA9IGZ1bmN0aW9uICh1c2VyLCBwYXNzLCBzZW5kSW1tZWRpYXRlbHkpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmICh0eXBlb2YgdXNlciAhPT0gJ3N0cmluZycgfHwgKHBhc3MgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGFzcyAhPT0gJ3N0cmluZycpKSB7XG4gICAgc2VsZi5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdhdXRoKCkgcmVjZWl2ZWQgaW52YWxpZCB1c2VyIG9yIHBhc3N3b3JkJykpXG4gIH1cbiAgc2VsZi51c2VyID0gdXNlclxuICBzZWxmLnBhc3MgPSBwYXNzXG4gIHNlbGYuaGFzQXV0aCA9IHRydWVcbiAgdmFyIGhlYWRlciA9IHVzZXIgKyAnOicgKyAocGFzcyB8fCAnJylcbiAgaWYgKHNlbmRJbW1lZGlhdGVseSB8fCB0eXBlb2Ygc2VuZEltbWVkaWF0ZWx5ID09PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBhdXRoSGVhZGVyID0gJ0Jhc2ljICcgKyB0b0Jhc2U2NChoZWFkZXIpXG4gICAgc2VsZi5zZW50QXV0aCA9IHRydWVcbiAgICByZXR1cm4gYXV0aEhlYWRlclxuICB9XG59XG5cbkF1dGgucHJvdG90eXBlLmJlYXJlciA9IGZ1bmN0aW9uIChiZWFyZXIsIHNlbmRJbW1lZGlhdGVseSkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgc2VsZi5iZWFyZXJUb2tlbiA9IGJlYXJlclxuICBzZWxmLmhhc0F1dGggPSB0cnVlXG4gIGlmIChzZW5kSW1tZWRpYXRlbHkgfHwgdHlwZW9mIHNlbmRJbW1lZGlhdGVseSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodHlwZW9mIGJlYXJlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYmVhcmVyID0gYmVhcmVyKClcbiAgICB9XG4gICAgdmFyIGF1dGhIZWFkZXIgPSAnQmVhcmVyICcgKyAoYmVhcmVyIHx8ICcnKVxuICAgIHNlbGYuc2VudEF1dGggPSB0cnVlXG4gICAgcmV0dXJuIGF1dGhIZWFkZXJcbiAgfVxufVxuXG5BdXRoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAobWV0aG9kLCBwYXRoLCBhdXRoSGVhZGVyKSB7XG4gIC8vIFRPRE86IE1vcmUgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgUkZDIDI2MTcuXG4gIC8vICAgLSBoYW5kbGUgY2hhbGxlbmdlLmRvbWFpblxuICAvLyAgIC0gc3VwcG9ydCBxb3A9XCJhdXRoLWludFwiIG9ubHlcbiAgLy8gICAtIGhhbmRsZSBBdXRoZW50aWNhdGlvbi1JbmZvIChub3QgbmVjZXNzYXJpbHk/KVxuICAvLyAgIC0gY2hlY2sgY2hhbGxlbmdlLnN0YWxlIChub3QgbmVjZXNzYXJpbHk/KVxuICAvLyAgIC0gaW5jcmVhc2UgbmMgKG5vdCBuZWNlc3NhcmlseT8pXG4gIC8vIEZvciByZWZlcmVuY2U6XG4gIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI2MTcjc2VjdGlvbi0zXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWdkZXIvY3VybC9ibG9iL21hc3Rlci9saWIvaHR0cF9kaWdlc3QuY1xuXG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIHZhciBjaGFsbGVuZ2UgPSB7fVxuICB2YXIgcmUgPSAvKFthLXowLTlfLV0rKT0oPzpcIihbXlwiXSspXCJ8KFthLXowLTlfLV0rKSkvZ2lcbiAgZm9yICg7Oykge1xuICAgIHZhciBtYXRjaCA9IHJlLmV4ZWMoYXV0aEhlYWRlcilcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgICBjaGFsbGVuZ2VbbWF0Y2hbMV1dID0gbWF0Y2hbMl0gfHwgbWF0Y2hbM11cbiAgfVxuXG4gIC8qKlxuICAgKiBSRkMgMjYxNzogaGFuZGxlIGJvdGggTUQ1IGFuZCBNRDUtc2VzcyBhbGdvcml0aG1zLlxuICAgKlxuICAgKiBJZiB0aGUgYWxnb3JpdGhtIGRpcmVjdGl2ZSdzIHZhbHVlIGlzIFwiTUQ1XCIgb3IgdW5zcGVjaWZpZWQsIHRoZW4gSEExIGlzXG4gICAqICAgSEExPU1ENSh1c2VybmFtZTpyZWFsbTpwYXNzd29yZClcbiAgICogSWYgdGhlIGFsZ29yaXRobSBkaXJlY3RpdmUncyB2YWx1ZSBpcyBcIk1ENS1zZXNzXCIsIHRoZW4gSEExIGlzXG4gICAqICAgSEExPU1ENShNRDUodXNlcm5hbWU6cmVhbG06cGFzc3dvcmQpOm5vbmNlOmNub25jZSlcbiAgICovXG4gIHZhciBoYTFDb21wdXRlID0gZnVuY3Rpb24gKGFsZ29yaXRobSwgdXNlciwgcmVhbG0sIHBhc3MsIG5vbmNlLCBjbm9uY2UpIHtcbiAgICB2YXIgaGExID0gbWQ1KHVzZXIgKyAnOicgKyByZWFsbSArICc6JyArIHBhc3MpXG4gICAgaWYgKGFsZ29yaXRobSAmJiBhbGdvcml0aG0udG9Mb3dlckNhc2UoKSA9PT0gJ21kNS1zZXNzJykge1xuICAgICAgcmV0dXJuIG1kNShoYTEgKyAnOicgKyBub25jZSArICc6JyArIGNub25jZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGhhMVxuICAgIH1cbiAgfVxuXG4gIHZhciBxb3AgPSAvKF58LClcXHMqYXV0aFxccyooJHwsKS8udGVzdChjaGFsbGVuZ2UucW9wKSAmJiAnYXV0aCdcbiAgdmFyIG5jID0gcW9wICYmICcwMDAwMDAwMSdcbiAgdmFyIGNub25jZSA9IHFvcCAmJiB1dWlkKCkucmVwbGFjZSgvLS9nLCAnJylcbiAgdmFyIGhhMSA9IGhhMUNvbXB1dGUoY2hhbGxlbmdlLmFsZ29yaXRobSwgc2VsZi51c2VyLCBjaGFsbGVuZ2UucmVhbG0sIHNlbGYucGFzcywgY2hhbGxlbmdlLm5vbmNlLCBjbm9uY2UpXG4gIHZhciBoYTIgPSBtZDUobWV0aG9kICsgJzonICsgcGF0aClcbiAgdmFyIGRpZ2VzdFJlc3BvbnNlID0gcW9wXG4gICAgPyBtZDUoaGExICsgJzonICsgY2hhbGxlbmdlLm5vbmNlICsgJzonICsgbmMgKyAnOicgKyBjbm9uY2UgKyAnOicgKyBxb3AgKyAnOicgKyBoYTIpXG4gICAgOiBtZDUoaGExICsgJzonICsgY2hhbGxlbmdlLm5vbmNlICsgJzonICsgaGEyKVxuICB2YXIgYXV0aFZhbHVlcyA9IHtcbiAgICB1c2VybmFtZTogc2VsZi51c2VyLFxuICAgIHJlYWxtOiBjaGFsbGVuZ2UucmVhbG0sXG4gICAgbm9uY2U6IGNoYWxsZW5nZS5ub25jZSxcbiAgICB1cmk6IHBhdGgsXG4gICAgcW9wOiBxb3AsXG4gICAgcmVzcG9uc2U6IGRpZ2VzdFJlc3BvbnNlLFxuICAgIG5jOiBuYyxcbiAgICBjbm9uY2U6IGNub25jZSxcbiAgICBhbGdvcml0aG06IGNoYWxsZW5nZS5hbGdvcml0aG0sXG4gICAgb3BhcXVlOiBjaGFsbGVuZ2Uub3BhcXVlXG4gIH1cblxuICBhdXRoSGVhZGVyID0gW11cbiAgZm9yICh2YXIgayBpbiBhdXRoVmFsdWVzKSB7XG4gICAgaWYgKGF1dGhWYWx1ZXNba10pIHtcbiAgICAgIGlmIChrID09PSAncW9wJyB8fCBrID09PSAnbmMnIHx8IGsgPT09ICdhbGdvcml0aG0nKSB7XG4gICAgICAgIGF1dGhIZWFkZXIucHVzaChrICsgJz0nICsgYXV0aFZhbHVlc1trXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF1dGhIZWFkZXIucHVzaChrICsgJz1cIicgKyBhdXRoVmFsdWVzW2tdICsgJ1wiJylcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYXV0aEhlYWRlciA9ICdEaWdlc3QgJyArIGF1dGhIZWFkZXIuam9pbignLCAnKVxuICBzZWxmLnNlbnRBdXRoID0gdHJ1ZVxuICByZXR1cm4gYXV0aEhlYWRlclxufVxuXG5BdXRoLnByb3RvdHlwZS5vblJlcXVlc3QgPSBmdW5jdGlvbiAodXNlciwgcGFzcywgc2VuZEltbWVkaWF0ZWx5LCBiZWFyZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCByZXF1ZXN0ID0gc2VsZi5yZXF1ZXN0XG5cbiAgdmFyIGF1dGhIZWFkZXJcbiAgaWYgKGJlYXJlciA9PT0gdW5kZWZpbmVkICYmIHVzZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHNlbGYucmVxdWVzdC5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignbm8gYXV0aCBtZWNoYW5pc20gZGVmaW5lZCcpKVxuICB9IGVsc2UgaWYgKGJlYXJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXV0aEhlYWRlciA9IHNlbGYuYmVhcmVyKGJlYXJlciwgc2VuZEltbWVkaWF0ZWx5KVxuICB9IGVsc2Uge1xuICAgIGF1dGhIZWFkZXIgPSBzZWxmLmJhc2ljKHVzZXIsIHBhc3MsIHNlbmRJbW1lZGlhdGVseSlcbiAgfVxuICBpZiAoYXV0aEhlYWRlcikge1xuICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdhdXRob3JpemF0aW9uJywgYXV0aEhlYWRlcilcbiAgfVxufVxuXG5BdXRoLnByb3RvdHlwZS5vblJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwgcmVxdWVzdCA9IHNlbGYucmVxdWVzdFxuXG4gIGlmICghc2VsZi5oYXNBdXRoIHx8IHNlbGYuc2VudEF1dGgpIHsgcmV0dXJuIG51bGwgfVxuXG4gIHZhciBjID0gY2FzZWxlc3MocmVzcG9uc2UuaGVhZGVycylcblxuICB2YXIgYXV0aEhlYWRlciA9IGMuZ2V0KCd3d3ctYXV0aGVudGljYXRlJylcbiAgdmFyIGF1dGhWZXJiID0gYXV0aEhlYWRlciAmJiBhdXRoSGVhZGVyLnNwbGl0KCcgJylbMF0udG9Mb3dlckNhc2UoKVxuICByZXF1ZXN0LmRlYnVnKCdyZWF1dGgnLCBhdXRoVmVyYilcblxuICBzd2l0Y2ggKGF1dGhWZXJiKSB7XG4gICAgY2FzZSAnYmFzaWMnOlxuICAgICAgcmV0dXJuIHNlbGYuYmFzaWMoc2VsZi51c2VyLCBzZWxmLnBhc3MsIHRydWUpXG5cbiAgICBjYXNlICdiZWFyZXInOlxuICAgICAgcmV0dXJuIHNlbGYuYmVhcmVyKHNlbGYuYmVhcmVyVG9rZW4sIHRydWUpXG5cbiAgICBjYXNlICdkaWdlc3QnOlxuICAgICAgcmV0dXJuIHNlbGYuZGlnZXN0KHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnBhdGgsIGF1dGhIZWFkZXIpXG4gIH1cbn1cblxuZXhwb3J0cy5BdXRoID0gQXV0aFxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciB0b3VnaCA9IHJlcXVpcmUoJ3RvdWdoLWNvb2tpZScpXG5cbnZhciBDb29raWUgPSB0b3VnaC5Db29raWVcbiAgLCBDb29raWVKYXIgPSB0b3VnaC5Db29raWVKYXJcblxuXG5leHBvcnRzLnBhcnNlID0gZnVuY3Rpb24oc3RyKSB7XG4gIGlmIChzdHIgJiYgc3RyLnVyaSkge1xuICAgIHN0ciA9IHN0ci51cmlcbiAgfVxuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb29raWUgZnVuY3Rpb24gb25seSBhY2NlcHRzIFNUUklORyBhcyBwYXJhbScpXG4gIH1cbiAgcmV0dXJuIENvb2tpZS5wYXJzZShzdHIsIHtsb29zZTogdHJ1ZX0pXG59XG5cbi8vIEFkYXB0IHRoZSBzb21ldGltZXMtQXN5bmMgYXBpIG9mIHRvdWdoLkNvb2tpZUphciB0byBvdXIgcmVxdWlyZW1lbnRzXG5mdW5jdGlvbiBSZXF1ZXN0SmFyKHN0b3JlKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBzZWxmLl9qYXIgPSBuZXcgQ29va2llSmFyKHN0b3JlLCB7bG9vc2VNb2RlOiB0cnVlfSlcbn1cblJlcXVlc3RKYXIucHJvdG90eXBlLnNldENvb2tpZSA9IGZ1bmN0aW9uKGNvb2tpZU9yU3RyLCB1cmksIG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHJldHVybiBzZWxmLl9qYXIuc2V0Q29va2llU3luYyhjb29raWVPclN0ciwgdXJpLCBvcHRpb25zIHx8IHt9KVxufVxuUmVxdWVzdEphci5wcm90b3R5cGUuZ2V0Q29va2llU3RyaW5nID0gZnVuY3Rpb24odXJpKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICByZXR1cm4gc2VsZi5famFyLmdldENvb2tpZVN0cmluZ1N5bmModXJpKVxufVxuUmVxdWVzdEphci5wcm90b3R5cGUuZ2V0Q29va2llcyA9IGZ1bmN0aW9uKHVyaSkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgcmV0dXJuIHNlbGYuX2phci5nZXRDb29raWVzU3luYyh1cmkpXG59XG5cbmV4cG9ydHMuamFyID0gZnVuY3Rpb24oc3RvcmUpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0SmFyKHN0b3JlKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIGZvcm1hdEhvc3RuYW1lKGhvc3RuYW1lKSB7XG4gIC8vIGNhbm9uaWNhbGl6ZSB0aGUgaG9zdG5hbWUsIHNvIHRoYXQgJ29vZ2xlLmNvbScgd29uJ3QgbWF0Y2ggJ2dvb2dsZS5jb20nXG4gIHJldHVybiBob3N0bmFtZS5yZXBsYWNlKC9eXFwuKi8sICcuJykudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBwYXJzZU5vUHJveHlab25lKHpvbmUpIHtcbiAgem9uZSA9IHpvbmUudHJpbSgpLnRvTG93ZXJDYXNlKClcblxuICB2YXIgem9uZVBhcnRzID0gem9uZS5zcGxpdCgnOicsIDIpXG4gICAgLCB6b25lSG9zdCA9IGZvcm1hdEhvc3RuYW1lKHpvbmVQYXJ0c1swXSlcbiAgICAsIHpvbmVQb3J0ID0gem9uZVBhcnRzWzFdXG4gICAgLCBoYXNQb3J0ID0gem9uZS5pbmRleE9mKCc6JykgPiAtMVxuXG4gIHJldHVybiB7aG9zdG5hbWU6IHpvbmVIb3N0LCBwb3J0OiB6b25lUG9ydCwgaGFzUG9ydDogaGFzUG9ydH1cbn1cblxuZnVuY3Rpb24gdXJpSW5Ob1Byb3h5KHVyaSwgbm9Qcm94eSkge1xuICB2YXIgcG9ydCA9IHVyaS5wb3J0IHx8ICh1cmkucHJvdG9jb2wgPT09ICdodHRwczonID8gJzQ0MycgOiAnODAnKVxuICAgICwgaG9zdG5hbWUgPSBmb3JtYXRIb3N0bmFtZSh1cmkuaG9zdG5hbWUpXG4gICAgLCBub1Byb3h5TGlzdCA9IG5vUHJveHkuc3BsaXQoJywnKVxuXG4gIC8vIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbm9Qcm94eUxpc3QgdW50aWwgaXQgZmluZHMgYSBtYXRjaC5cbiAgcmV0dXJuIG5vUHJveHlMaXN0Lm1hcChwYXJzZU5vUHJveHlab25lKS5zb21lKGZ1bmN0aW9uKG5vUHJveHlab25lKSB7XG4gICAgdmFyIGlzTWF0Y2hlZEF0ID0gaG9zdG5hbWUuaW5kZXhPZihub1Byb3h5Wm9uZS5ob3N0bmFtZSlcbiAgICAgICwgaG9zdG5hbWVNYXRjaGVkID0gKFxuICAgICAgICAgIGlzTWF0Y2hlZEF0ID4gLTEgJiZcbiAgICAgICAgICAoaXNNYXRjaGVkQXQgPT09IGhvc3RuYW1lLmxlbmd0aCAtIG5vUHJveHlab25lLmhvc3RuYW1lLmxlbmd0aClcbiAgICAgICAgKVxuXG4gICAgaWYgKG5vUHJveHlab25lLmhhc1BvcnQpIHtcbiAgICAgIHJldHVybiAocG9ydCA9PT0gbm9Qcm94eVpvbmUucG9ydCkgJiYgaG9zdG5hbWVNYXRjaGVkXG4gICAgfVxuXG4gICAgcmV0dXJuIGhvc3RuYW1lTWF0Y2hlZFxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRQcm94eUZyb21VUkkodXJpKSB7XG4gIC8vIERlY2lkZSB0aGUgcHJvcGVyIHJlcXVlc3QgcHJveHkgdG8gdXNlIGJhc2VkIG9uIHRoZSByZXF1ZXN0IFVSSSBvYmplY3QgYW5kIHRoZVxuICAvLyBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyAoTk9fUFJPWFksIEhUVFBfUFJPWFksIGV0Yy4pXG4gIC8vIHJlc3BlY3QgTk9fUFJPWFkgZW52aXJvbm1lbnQgdmFyaWFibGVzIChzZWU6IGh0dHA6Ly9seW54LmlzYy5vcmcvY3VycmVudC9icmVha291dC9seW54X2hlbHAva2V5c3Ryb2tlcy9lbnZpcm9ubWVudHMuaHRtbClcblxuICB2YXIgbm9Qcm94eSA9IHByb2Nlc3MuZW52Lk5PX1BST1hZIHx8IHByb2Nlc3MuZW52Lm5vX3Byb3h5IHx8ICcnXG5cbiAgLy8gaWYgdGhlIG5vUHJveHkgaXMgYSB3aWxkY2FyZCB0aGVuIHJldHVybiBudWxsXG5cbiAgaWYgKG5vUHJveHkgPT09ICcqJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBpZiB0aGUgbm9Qcm94eSBpcyBub3QgZW1wdHkgYW5kIHRoZSB1cmkgaXMgZm91bmQgcmV0dXJuIG51bGxcblxuICBpZiAobm9Qcm94eSAhPT0gJycgJiYgdXJpSW5Ob1Byb3h5KHVyaSwgbm9Qcm94eSkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIEhUVFAgb3IgSFRUUFMgUHJveHkgaW4gZW52aXJvbm1lbnQgRWxzZSBkZWZhdWx0IHRvIG51bGxcblxuICBpZiAodXJpLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkhUVFBfUFJPWFkgfHxcbiAgICAgICAgICAgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eSB8fCBudWxsXG4gIH1cblxuICBpZiAodXJpLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5IVFRQU19QUk9YWSB8fFxuICAgICAgICAgICBwcm9jZXNzLmVudi5odHRwc19wcm94eSB8fFxuICAgICAgICAgICBwcm9jZXNzLmVudi5IVFRQX1BST1hZICB8fFxuICAgICAgICAgICBwcm9jZXNzLmVudi5odHRwX3Byb3h5ICB8fCBudWxsXG4gIH1cblxuICAvLyBpZiBub25lIG9mIHRoYXQgd29ya3MsIHJldHVybiBudWxsXG4gIC8vIChXaGF0IHVyaSBwcm90b2NvbCBhcmUgeW91IHVzaW5nIHRoZW4/KVxuXG4gIHJldHVybiBudWxsXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJveHlGcm9tVVJJXG4iLCIndXNlIHN0cmljdCdcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKVxudmFyIHFzID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKVxudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnaGFyLXZhbGlkYXRvcicpXG52YXIgZXh0ZW5kID0gcmVxdWlyZSgnZXh0ZW5kJylcblxuZnVuY3Rpb24gSGFyIChyZXF1ZXN0KSB7XG4gIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Rcbn1cblxuSGFyLnByb3RvdHlwZS5yZWR1Y2VyID0gZnVuY3Rpb24gKG9iaiwgcGFpcikge1xuICAvLyBuZXcgcHJvcGVydHkgP1xuICBpZiAob2JqW3BhaXIubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIG9ialtwYWlyLm5hbWVdID0gcGFpci52YWx1ZVxuICAgIHJldHVybiBvYmpcbiAgfVxuXG4gIC8vIGV4aXN0aW5nPyBjb252ZXJ0IHRvIGFycmF5XG4gIHZhciBhcnIgPSBbXG4gICAgb2JqW3BhaXIubmFtZV0sXG4gICAgcGFpci52YWx1ZVxuICBdXG5cbiAgb2JqW3BhaXIubmFtZV0gPSBhcnJcblxuICByZXR1cm4gb2JqXG59XG5cbkhhci5wcm90b3R5cGUucHJlcCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIC8vIGNvbnN0cnVjdCB1dGlsaXR5IHByb3BlcnRpZXNcbiAgZGF0YS5xdWVyeU9iaiA9IHt9XG4gIGRhdGEuaGVhZGVyc09iaiA9IHt9XG4gIGRhdGEucG9zdERhdGEuanNvbk9iaiA9IGZhbHNlXG4gIGRhdGEucG9zdERhdGEucGFyYW1zT2JqID0gZmFsc2VcblxuICAvLyBjb25zdHJ1Y3QgcXVlcnkgb2JqZWN0c1xuICBpZiAoZGF0YS5xdWVyeVN0cmluZyAmJiBkYXRhLnF1ZXJ5U3RyaW5nLmxlbmd0aCkge1xuICAgIGRhdGEucXVlcnlPYmogPSBkYXRhLnF1ZXJ5U3RyaW5nLnJlZHVjZSh0aGlzLnJlZHVjZXIsIHt9KVxuICB9XG5cbiAgLy8gY29uc3RydWN0IGhlYWRlcnMgb2JqZWN0c1xuICBpZiAoZGF0YS5oZWFkZXJzICYmIGRhdGEuaGVhZGVycy5sZW5ndGgpIHtcbiAgICAvLyBsb3dlQ2FzZSBoZWFkZXIga2V5c1xuICAgIGRhdGEuaGVhZGVyc09iaiA9IGRhdGEuaGVhZGVycy5yZWR1Y2VSaWdodChmdW5jdGlvbiAoaGVhZGVycywgaGVhZGVyKSB7XG4gICAgICBoZWFkZXJzW2hlYWRlci5uYW1lXSA9IGhlYWRlci52YWx1ZVxuICAgICAgcmV0dXJuIGhlYWRlcnNcbiAgICB9LCB7fSlcbiAgfVxuXG4gIC8vIGNvbnN0cnVjdCBDb29raWUgaGVhZGVyXG4gIGlmIChkYXRhLmNvb2tpZXMgJiYgZGF0YS5jb29raWVzLmxlbmd0aCkge1xuICAgIHZhciBjb29raWVzID0gZGF0YS5jb29raWVzLm1hcChmdW5jdGlvbiAoY29va2llKSB7XG4gICAgICByZXR1cm4gY29va2llLm5hbWUgKyAnPScgKyBjb29raWUudmFsdWVcbiAgICB9KVxuXG4gICAgaWYgKGNvb2tpZXMubGVuZ3RoKSB7XG4gICAgICBkYXRhLmhlYWRlcnNPYmouY29va2llID0gY29va2llcy5qb2luKCc7ICcpXG4gICAgfVxuICB9XG5cbiAgLy8gcHJlcCBib2R5XG4gIGZ1bmN0aW9uIHNvbWUgKGFycikge1xuICAgIHJldHVybiBhcnIuc29tZShmdW5jdGlvbiAodHlwZSkge1xuICAgICAgcmV0dXJuIGRhdGEucG9zdERhdGEubWltZVR5cGUuaW5kZXhPZih0eXBlKSA9PT0gMFxuICAgIH0pXG4gIH1cblxuICBpZiAoc29tZShbXG4gICAgJ211bHRpcGFydC9taXhlZCcsXG4gICAgJ211bHRpcGFydC9yZWxhdGVkJyxcbiAgICAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgJ211bHRpcGFydC9hbHRlcm5hdGl2ZSddKSkge1xuXG4gICAgLy8gcmVzZXQgdmFsdWVzXG4gICAgZGF0YS5wb3N0RGF0YS5taW1lVHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICB9XG5cbiAgZWxzZSBpZiAoc29tZShbXG4gICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCddKSkge1xuXG4gICAgaWYgKCFkYXRhLnBvc3REYXRhLnBhcmFtcykge1xuICAgICAgZGF0YS5wb3N0RGF0YS50ZXh0ID0gJydcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YS5wb3N0RGF0YS5wYXJhbXNPYmogPSBkYXRhLnBvc3REYXRhLnBhcmFtcy5yZWR1Y2UodGhpcy5yZWR1Y2VyLCB7fSlcblxuICAgICAgLy8gYWx3YXlzIG92ZXJ3cml0ZVxuICAgICAgZGF0YS5wb3N0RGF0YS50ZXh0ID0gcXMuc3RyaW5naWZ5KGRhdGEucG9zdERhdGEucGFyYW1zT2JqKVxuICAgIH1cbiAgfVxuXG4gIGVsc2UgaWYgKHNvbWUoW1xuICAgICd0ZXh0L2pzb24nLFxuICAgICd0ZXh0L3gtanNvbicsXG4gICAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICdhcHBsaWNhdGlvbi94LWpzb24nXSkpIHtcblxuICAgIGRhdGEucG9zdERhdGEubWltZVR5cGUgPSAnYXBwbGljYXRpb24vanNvbidcblxuICAgIGlmIChkYXRhLnBvc3REYXRhLnRleHQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEucG9zdERhdGEuanNvbk9iaiA9IEpTT04ucGFyc2UoZGF0YS5wb3N0RGF0YS50ZXh0KVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QuZGVidWcoZSlcblxuICAgICAgICAvLyBmb3JjZSBiYWNrIHRvIHRleHQvcGxhaW5cbiAgICAgICAgZGF0YS5wb3N0RGF0YS5taW1lVHlwZSA9ICd0ZXh0L3BsYWluJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhXG59XG5cbkhhci5wcm90b3R5cGUub3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIC8vIHNraXAgaWYgbm8gaGFyIHByb3BlcnR5IGRlZmluZWRcbiAgaWYgKCFvcHRpb25zLmhhcikge1xuICAgIHJldHVybiBvcHRpb25zXG4gIH1cblxuICB2YXIgaGFyID0ge31cbiAgZXh0ZW5kKGhhciwgb3B0aW9ucy5oYXIpXG5cbiAgLy8gb25seSBwcm9jZXNzIHRoZSBmaXJzdCBlbnRyeVxuICBpZiAoaGFyLmxvZyAmJiBoYXIubG9nLmVudHJpZXMpIHtcbiAgICBoYXIgPSBoYXIubG9nLmVudHJpZXNbMF1cbiAgfVxuXG4gIC8vIGFkZCBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIG1ha2UgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXG4gIGhhci51cmwgPSBoYXIudXJsIHx8IG9wdGlvbnMudXJsIHx8IG9wdGlvbnMudXJpIHx8IG9wdGlvbnMuYmFzZVVybCB8fCAnLydcbiAgaGFyLmh0dHBWZXJzaW9uID0gaGFyLmh0dHBWZXJzaW9uIHx8ICdIVFRQLzEuMSdcbiAgaGFyLnF1ZXJ5U3RyaW5nID0gaGFyLnF1ZXJ5U3RyaW5nIHx8IFtdXG4gIGhhci5oZWFkZXJzID0gaGFyLmhlYWRlcnMgfHwgW11cbiAgaGFyLmNvb2tpZXMgPSBoYXIuY29va2llcyB8fCBbXVxuICBoYXIucG9zdERhdGEgPSBoYXIucG9zdERhdGEgfHwge31cbiAgaGFyLnBvc3REYXRhLm1pbWVUeXBlID0gaGFyLnBvc3REYXRhLm1pbWVUeXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG5cbiAgaGFyLmJvZHlTaXplID0gMFxuICBoYXIuaGVhZGVyc1NpemUgPSAwXG4gIGhhci5wb3N0RGF0YS5zaXplID0gMFxuXG4gIGlmICghdmFsaWRhdGUucmVxdWVzdChoYXIpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfVxuXG4gIC8vIGNsZWFuIHVwIGFuZCBnZXQgc29tZSB1dGlsaXR5IHByb3BlcnRpZXNcbiAgdmFyIHJlcSA9IHRoaXMucHJlcChoYXIpXG5cbiAgLy8gY29uc3RydWN0IG5ldyBvcHRpb25zXG4gIGlmIChyZXEudXJsKSB7XG4gICAgb3B0aW9ucy51cmwgPSByZXEudXJsXG4gIH1cblxuICBpZiAocmVxLm1ldGhvZCkge1xuICAgIG9wdGlvbnMubWV0aG9kID0gcmVxLm1ldGhvZFxuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHJlcS5xdWVyeU9iaikubGVuZ3RoKSB7XG4gICAgb3B0aW9ucy5xcyA9IHJlcS5xdWVyeU9ialxuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHJlcS5oZWFkZXJzT2JqKS5sZW5ndGgpIHtcbiAgICBvcHRpb25zLmhlYWRlcnMgPSByZXEuaGVhZGVyc09ialxuICB9XG5cbiAgZnVuY3Rpb24gdGVzdCAodHlwZSkge1xuICAgIHJldHVybiByZXEucG9zdERhdGEubWltZVR5cGUuaW5kZXhPZih0eXBlKSA9PT0gMFxuICB9XG4gIGlmICh0ZXN0KCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSkge1xuICAgIG9wdGlvbnMuZm9ybSA9IHJlcS5wb3N0RGF0YS5wYXJhbXNPYmpcbiAgfVxuICBlbHNlIGlmICh0ZXN0KCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICBpZiAocmVxLnBvc3REYXRhLmpzb25PYmopIHtcbiAgICAgIG9wdGlvbnMuYm9keSA9IHJlcS5wb3N0RGF0YS5qc29uT2JqXG4gICAgICBvcHRpb25zLmpzb24gPSB0cnVlXG4gICAgfVxuICB9XG4gIGVsc2UgaWYgKHRlc3QoJ211bHRpcGFydC9mb3JtLWRhdGEnKSkge1xuICAgIG9wdGlvbnMuZm9ybURhdGEgPSB7fVxuXG4gICAgcmVxLnBvc3REYXRhLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgdmFyIGF0dGFjaG1lbnQgPSB7fVxuXG4gICAgICBpZiAoIXBhcmFtLmZpbGVOYW1lICYmICFwYXJhbS5maWxlTmFtZSAmJiAhcGFyYW0uY29udGVudFR5cGUpIHtcbiAgICAgICAgb3B0aW9ucy5mb3JtRGF0YVtwYXJhbS5uYW1lXSA9IHBhcmFtLnZhbHVlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBhdHRlbXB0IHRvIHJlYWQgZnJvbSBkaXNrIVxuICAgICAgaWYgKHBhcmFtLmZpbGVOYW1lICYmICFwYXJhbS52YWx1ZSkge1xuICAgICAgICBhdHRhY2htZW50LnZhbHVlID0gZnMuY3JlYXRlUmVhZFN0cmVhbShwYXJhbS5maWxlTmFtZSlcbiAgICAgIH0gZWxzZSBpZiAocGFyYW0udmFsdWUpIHtcbiAgICAgICAgYXR0YWNobWVudC52YWx1ZSA9IHBhcmFtLnZhbHVlXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbS5maWxlTmFtZSkge1xuICAgICAgICBhdHRhY2htZW50Lm9wdGlvbnMgPSB7XG4gICAgICAgICAgZmlsZW5hbWU6IHBhcmFtLmZpbGVOYW1lLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBwYXJhbS5jb250ZW50VHlwZSA/IHBhcmFtLmNvbnRlbnRUeXBlIDogbnVsbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMuZm9ybURhdGFbcGFyYW0ubmFtZV0gPSBhdHRhY2htZW50XG4gICAgfSlcbiAgfVxuICBlbHNlIHtcbiAgICBpZiAocmVxLnBvc3REYXRhLnRleHQpIHtcbiAgICAgIG9wdGlvbnMuYm9keSA9IHJlcS5wb3N0RGF0YS50ZXh0XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZXhwb3J0cy5IYXIgPSBIYXJcbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIganNvblNhZmVTdHJpbmdpZnkgPSByZXF1aXJlKCdqc29uLXN0cmluZ2lmeS1zYWZlJylcbiAgLCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxuICAsIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbnZhciBkZWZlciA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICd1bmRlZmluZWQnXG4gID8gcHJvY2Vzcy5uZXh0VGlja1xuICA6IHNldEltbWVkaWF0ZVxuXG5mdW5jdGlvbiBwYXJhbXNIYXZlUmVxdWVzdEJvZHkocGFyYW1zKSB7XG4gIHJldHVybiAoXG4gICAgcGFyYW1zLmJvZHkgfHxcbiAgICBwYXJhbXMucmVxdWVzdEJvZHlTdHJlYW0gfHxcbiAgICAocGFyYW1zLmpzb24gJiYgdHlwZW9mIHBhcmFtcy5qc29uICE9PSAnYm9vbGVhbicpIHx8XG4gICAgcGFyYW1zLm11bHRpcGFydFxuICApXG59XG5cbmZ1bmN0aW9uIHNhZmVTdHJpbmdpZnkgKG9iaiwgcmVwbGFjZXIpIHtcbiAgdmFyIHJldFxuICB0cnkge1xuICAgIHJldCA9IEpTT04uc3RyaW5naWZ5KG9iaiwgcmVwbGFjZXIpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXQgPSBqc29uU2FmZVN0cmluZ2lmeShvYmosIHJlcGxhY2VyKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbWQ1IChzdHIpIHtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUoc3RyKS5kaWdlc3QoJ2hleCcpXG59XG5cbmZ1bmN0aW9uIGlzUmVhZFN0cmVhbSAocnMpIHtcbiAgcmV0dXJuIHJzLnJlYWRhYmxlICYmIHJzLnBhdGggJiYgcnMubW9kZVxufVxuXG5mdW5jdGlvbiB0b0Jhc2U2NCAoc3RyKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShzdHIgfHwgJycsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpXG59XG5cbmZ1bmN0aW9uIGNvcHkgKG9iaikge1xuICB2YXIgbyA9IHt9XG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoaSkge1xuICAgIG9baV0gPSBvYmpbaV1cbiAgfSlcbiAgcmV0dXJuIG9cbn1cblxuZnVuY3Rpb24gdmVyc2lvbiAoKSB7XG4gIHZhciBudW1iZXJzID0gcHJvY2Vzcy52ZXJzaW9uLnJlcGxhY2UoJ3YnLCAnJykuc3BsaXQoJy4nKVxuICByZXR1cm4ge1xuICAgIG1ham9yOiBwYXJzZUludChudW1iZXJzWzBdLCAxMCksXG4gICAgbWlub3I6IHBhcnNlSW50KG51bWJlcnNbMV0sIDEwKSxcbiAgICBwYXRjaDogcGFyc2VJbnQobnVtYmVyc1syXSwgMTApXG4gIH1cbn1cblxuZXhwb3J0cy5wYXJhbXNIYXZlUmVxdWVzdEJvZHkgPSBwYXJhbXNIYXZlUmVxdWVzdEJvZHlcbmV4cG9ydHMuc2FmZVN0cmluZ2lmeSAgICAgICAgID0gc2FmZVN0cmluZ2lmeVxuZXhwb3J0cy5tZDUgICAgICAgICAgICAgICAgICAgPSBtZDVcbmV4cG9ydHMuaXNSZWFkU3RyZWFtICAgICAgICAgID0gaXNSZWFkU3RyZWFtXG5leHBvcnRzLnRvQmFzZTY0ICAgICAgICAgICAgICA9IHRvQmFzZTY0XG5leHBvcnRzLmNvcHkgICAgICAgICAgICAgICAgICA9IGNvcHlcbmV4cG9ydHMudmVyc2lvbiAgICAgICAgICAgICAgID0gdmVyc2lvblxuZXhwb3J0cy5kZWZlciAgICAgICAgICAgICAgICAgPSBkZWZlclxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciB1dWlkID0gcmVxdWlyZSgndXVpZCcpXG4gICwgQ29tYmluZWRTdHJlYW0gPSByZXF1aXJlKCdjb21iaW5lZC1zdHJlYW0nKVxuICAsIGlzc3RyZWFtID0gcmVxdWlyZSgnaXNzdHJlYW0nKVxuICAsIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cblxuZnVuY3Rpb24gTXVsdGlwYXJ0IChyZXF1ZXN0KSB7XG4gIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RcbiAgdGhpcy5ib3VuZGFyeSA9IHV1aWQoKVxuICB0aGlzLmNodW5rZWQgPSBmYWxzZVxuICB0aGlzLmJvZHkgPSBudWxsXG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUuaXNDaHVua2VkID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCBjaHVua2VkID0gZmFsc2VcbiAgICAsIHBhcnRzID0gb3B0aW9ucy5kYXRhIHx8IG9wdGlvbnNcblxuICBpZiAoIXBhcnRzLmZvckVhY2gpIHtcbiAgICBzZWxmLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ0FyZ3VtZW50IGVycm9yLCBvcHRpb25zLm11bHRpcGFydC4nKSlcbiAgfVxuXG4gIGlmIChvcHRpb25zLmNodW5rZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNodW5rZWQgPSBvcHRpb25zLmNodW5rZWRcbiAgfVxuXG4gIGlmIChzZWxmLnJlcXVlc3QuZ2V0SGVhZGVyKCd0cmFuc2Zlci1lbmNvZGluZycpID09PSAnY2h1bmtlZCcpIHtcbiAgICBjaHVua2VkID0gdHJ1ZVxuICB9XG5cbiAgaWYgKCFjaHVua2VkKSB7XG4gICAgcGFydHMuZm9yRWFjaChmdW5jdGlvbiAocGFydCkge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0LmJvZHkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNlbGYucmVxdWVzdC5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignQm9keSBhdHRyaWJ1dGUgbWlzc2luZyBpbiBtdWx0aXBhcnQuJykpXG4gICAgICB9XG4gICAgICBpZiAoaXNzdHJlYW0ocGFydC5ib2R5KSkge1xuICAgICAgICBjaHVua2VkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gY2h1bmtlZFxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLnNldEhlYWRlcnMgPSBmdW5jdGlvbiAoY2h1bmtlZCkge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICBpZiAoY2h1bmtlZCAmJiAhc2VsZi5yZXF1ZXN0Lmhhc0hlYWRlcigndHJhbnNmZXItZW5jb2RpbmcnKSkge1xuICAgIHNlbGYucmVxdWVzdC5zZXRIZWFkZXIoJ3RyYW5zZmVyLWVuY29kaW5nJywgJ2NodW5rZWQnKVxuICB9XG5cbiAgdmFyIGhlYWRlciA9IHNlbGYucmVxdWVzdC5nZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScpXG5cbiAgaWYgKCFoZWFkZXIgfHwgaGVhZGVyLmluZGV4T2YoJ211bHRpcGFydCcpID09PSAtMSkge1xuICAgIHNlbGYucmVxdWVzdC5zZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScsICdtdWx0aXBhcnQvcmVsYXRlZDsgYm91bmRhcnk9JyArIHNlbGYuYm91bmRhcnkpXG4gIH0gZWxzZSB7XG4gICAgaWYgKGhlYWRlci5pbmRleE9mKCdib3VuZGFyeScpICE9PSAtMSkge1xuICAgICAgc2VsZi5ib3VuZGFyeSA9IGhlYWRlci5yZXBsYWNlKC8uKmJvdW5kYXJ5PShbXlxccztdKykuKi8sICckMScpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYucmVxdWVzdC5zZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScsIGhlYWRlciArICc7IGJvdW5kYXJ5PScgKyBzZWxmLmJvdW5kYXJ5KVxuICAgIH1cbiAgfVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24gKHBhcnRzLCBjaHVua2VkKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICB2YXIgYm9keSA9IGNodW5rZWQgPyBuZXcgQ29tYmluZWRTdHJlYW0oKSA6IFtdXG5cbiAgZnVuY3Rpb24gYWRkIChwYXJ0KSB7XG4gICAgaWYgKHR5cGVvZiBwYXJ0ID09PSAnbnVtYmVyJykge1xuICAgICAgcGFydCA9IHBhcnQudG9TdHJpbmcoKVxuICAgIH1cbiAgICByZXR1cm4gY2h1bmtlZCA/IGJvZHkuYXBwZW5kKHBhcnQpIDogYm9keS5wdXNoKEJ1ZmZlci5mcm9tKHBhcnQpKVxuICB9XG5cbiAgaWYgKHNlbGYucmVxdWVzdC5wcmVhbWJsZUNSTEYpIHtcbiAgICBhZGQoJ1xcclxcbicpXG4gIH1cblxuICBwYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgdmFyIHByZWFtYmxlID0gJy0tJyArIHNlbGYuYm91bmRhcnkgKyAnXFxyXFxuJ1xuICAgIE9iamVjdC5rZXlzKHBhcnQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKGtleSA9PT0gJ2JvZHknKSB7IHJldHVybiB9XG4gICAgICBwcmVhbWJsZSArPSBrZXkgKyAnOiAnICsgcGFydFtrZXldICsgJ1xcclxcbidcbiAgICB9KVxuICAgIHByZWFtYmxlICs9ICdcXHJcXG4nXG4gICAgYWRkKHByZWFtYmxlKVxuICAgIGFkZChwYXJ0LmJvZHkpXG4gICAgYWRkKCdcXHJcXG4nKVxuICB9KVxuICBhZGQoJy0tJyArIHNlbGYuYm91bmRhcnkgKyAnLS0nKVxuXG4gIGlmIChzZWxmLnJlcXVlc3QucG9zdGFtYmxlQ1JMRikge1xuICAgIGFkZCgnXFxyXFxuJylcbiAgfVxuXG4gIHJldHVybiBib2R5XG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUub25SZXF1ZXN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgdmFyIGNodW5rZWQgPSBzZWxmLmlzQ2h1bmtlZChvcHRpb25zKVxuICAgICwgcGFydHMgPSBvcHRpb25zLmRhdGEgfHwgb3B0aW9uc1xuXG4gIHNlbGYuc2V0SGVhZGVycyhjaHVua2VkKVxuICBzZWxmLmNodW5rZWQgPSBjaHVua2VkXG4gIHNlbGYuYm9keSA9IHNlbGYuYnVpbGQocGFydHMsIGNodW5rZWQpXG59XG5cbmV4cG9ydHMuTXVsdGlwYXJ0ID0gTXVsdGlwYXJ0XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpXG4gICwgcXMgPSByZXF1aXJlKCdxcycpXG4gICwgY2FzZWxlc3MgPSByZXF1aXJlKCdjYXNlbGVzcycpXG4gICwgdXVpZCA9IHJlcXVpcmUoJ3V1aWQnKVxuICAsIG9hdXRoID0gcmVxdWlyZSgnb2F1dGgtc2lnbicpXG4gICwgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbiAgLCBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG5cbmZ1bmN0aW9uIE9BdXRoIChyZXF1ZXN0KSB7XG4gIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RcbiAgdGhpcy5wYXJhbXMgPSBudWxsXG59XG5cbk9BdXRoLnByb3RvdHlwZS5idWlsZFBhcmFtcyA9IGZ1bmN0aW9uIChfb2F1dGgsIHVyaSwgbWV0aG9kLCBxdWVyeSwgZm9ybSwgcXNMaWIpIHtcbiAgdmFyIG9hID0ge31cbiAgZm9yICh2YXIgaSBpbiBfb2F1dGgpIHtcbiAgICBvYVsnb2F1dGhfJyArIGldID0gX29hdXRoW2ldXG4gIH1cbiAgaWYgKCFvYS5vYXV0aF92ZXJzaW9uKSB7XG4gICAgb2Eub2F1dGhfdmVyc2lvbiA9ICcxLjAnXG4gIH1cbiAgaWYgKCFvYS5vYXV0aF90aW1lc3RhbXApIHtcbiAgICBvYS5vYXV0aF90aW1lc3RhbXAgPSBNYXRoLmZsb29yKCBEYXRlLm5vdygpIC8gMTAwMCApLnRvU3RyaW5nKClcbiAgfVxuICBpZiAoIW9hLm9hdXRoX25vbmNlKSB7XG4gICAgb2Eub2F1dGhfbm9uY2UgPSB1dWlkKCkucmVwbGFjZSgvLS9nLCAnJylcbiAgfVxuICBpZiAoIW9hLm9hdXRoX3NpZ25hdHVyZV9tZXRob2QpIHtcbiAgICBvYS5vYXV0aF9zaWduYXR1cmVfbWV0aG9kID0gJ0hNQUMtU0hBMSdcbiAgfVxuXG4gIHZhciBjb25zdW1lcl9zZWNyZXRfb3JfcHJpdmF0ZV9rZXkgPSBvYS5vYXV0aF9jb25zdW1lcl9zZWNyZXQgfHwgb2Eub2F1dGhfcHJpdmF0ZV9rZXlcbiAgZGVsZXRlIG9hLm9hdXRoX2NvbnN1bWVyX3NlY3JldFxuICBkZWxldGUgb2Eub2F1dGhfcHJpdmF0ZV9rZXlcblxuICB2YXIgdG9rZW5fc2VjcmV0ID0gb2Eub2F1dGhfdG9rZW5fc2VjcmV0XG4gIGRlbGV0ZSBvYS5vYXV0aF90b2tlbl9zZWNyZXRcblxuICB2YXIgcmVhbG0gPSBvYS5vYXV0aF9yZWFsbVxuICBkZWxldGUgb2Eub2F1dGhfcmVhbG1cbiAgZGVsZXRlIG9hLm9hdXRoX3RyYW5zcG9ydF9tZXRob2RcblxuICB2YXIgYmFzZXVybCA9IHVyaS5wcm90b2NvbCArICcvLycgKyB1cmkuaG9zdCArIHVyaS5wYXRobmFtZVxuICB2YXIgcGFyYW1zID0gcXNMaWIucGFyc2UoW10uY29uY2F0KHF1ZXJ5LCBmb3JtLCBxc0xpYi5zdHJpbmdpZnkob2EpKS5qb2luKCcmJykpXG5cbiAgb2Eub2F1dGhfc2lnbmF0dXJlID0gb2F1dGguc2lnbihcbiAgICBvYS5vYXV0aF9zaWduYXR1cmVfbWV0aG9kLFxuICAgIG1ldGhvZCxcbiAgICBiYXNldXJsLFxuICAgIHBhcmFtcyxcbiAgICBjb25zdW1lcl9zZWNyZXRfb3JfcHJpdmF0ZV9rZXksXG4gICAgdG9rZW5fc2VjcmV0KVxuXG4gIGlmIChyZWFsbSkge1xuICAgIG9hLnJlYWxtID0gcmVhbG1cbiAgfVxuXG4gIHJldHVybiBvYVxufVxuXG5PQXV0aC5wcm90b3R5cGUuYnVpbGRCb2R5SGFzaCA9IGZ1bmN0aW9uKF9vYXV0aCwgYm9keSkge1xuICBpZiAoWydITUFDLVNIQTEnLCAnUlNBLVNIQTEnXS5pbmRleE9mKF9vYXV0aC5zaWduYXR1cmVfbWV0aG9kIHx8ICdITUFDLVNIQTEnKSA8IDApIHtcbiAgICB0aGlzLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ29hdXRoOiAnICsgX29hdXRoLnNpZ25hdHVyZV9tZXRob2QgK1xuICAgICAgJyBzaWduYXR1cmVfbWV0aG9kIG5vdCBzdXBwb3J0ZWQgd2l0aCBib2R5X2hhc2ggc2lnbmluZy4nKSlcbiAgfVxuXG4gIHZhciBzaGFzdW0gPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpXG4gIHNoYXN1bS51cGRhdGUoYm9keSB8fCAnJylcbiAgdmFyIHNoYTEgPSBzaGFzdW0uZGlnZXN0KCdoZXgnKVxuXG4gIHJldHVybiBCdWZmZXIuZnJvbShzaGExKS50b1N0cmluZygnYmFzZTY0Jylcbn1cblxuT0F1dGgucHJvdG90eXBlLmNvbmNhdFBhcmFtcyA9IGZ1bmN0aW9uIChvYSwgc2VwLCB3cmFwKSB7XG4gIHdyYXAgPSB3cmFwIHx8ICcnXG5cbiAgdmFyIHBhcmFtcyA9IE9iamVjdC5rZXlzKG9hKS5maWx0ZXIoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gaSAhPT0gJ3JlYWxtJyAmJiBpICE9PSAnb2F1dGhfc2lnbmF0dXJlJ1xuICB9KS5zb3J0KClcblxuICBpZiAob2EucmVhbG0pIHtcbiAgICBwYXJhbXMuc3BsaWNlKDAsIDAsICdyZWFsbScpXG4gIH1cbiAgcGFyYW1zLnB1c2goJ29hdXRoX3NpZ25hdHVyZScpXG5cbiAgcmV0dXJuIHBhcmFtcy5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gaSArICc9JyArIHdyYXAgKyBvYXV0aC5yZmMzOTg2KG9hW2ldKSArIHdyYXBcbiAgfSkuam9pbihzZXApXG59XG5cbk9BdXRoLnByb3RvdHlwZS5vblJlcXVlc3QgPSBmdW5jdGlvbiAoX29hdXRoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBzZWxmLnBhcmFtcyA9IF9vYXV0aFxuXG4gIHZhciB1cmkgPSBzZWxmLnJlcXVlc3QudXJpIHx8IHt9XG4gICAgLCBtZXRob2QgPSBzZWxmLnJlcXVlc3QubWV0aG9kIHx8ICcnXG4gICAgLCBoZWFkZXJzID0gY2FzZWxlc3Moc2VsZi5yZXF1ZXN0LmhlYWRlcnMpXG4gICAgLCBib2R5ID0gc2VsZi5yZXF1ZXN0LmJvZHkgfHwgJydcbiAgICAsIHFzTGliID0gc2VsZi5yZXF1ZXN0LnFzTGliIHx8IHFzXG5cbiAgdmFyIGZvcm1cbiAgICAsIHF1ZXJ5XG4gICAgLCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSB8fCAnJ1xuICAgICwgZm9ybUNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbiAgICAsIHRyYW5zcG9ydCA9IF9vYXV0aC50cmFuc3BvcnRfbWV0aG9kIHx8ICdoZWFkZXInXG5cbiAgaWYgKGNvbnRlbnRUeXBlLnNsaWNlKDAsIGZvcm1Db250ZW50VHlwZS5sZW5ndGgpID09PSBmb3JtQ29udGVudFR5cGUpIHtcbiAgICBjb250ZW50VHlwZSA9IGZvcm1Db250ZW50VHlwZVxuICAgIGZvcm0gPSBib2R5XG4gIH1cbiAgaWYgKHVyaS5xdWVyeSkge1xuICAgIHF1ZXJ5ID0gdXJpLnF1ZXJ5XG4gIH1cbiAgaWYgKHRyYW5zcG9ydCA9PT0gJ2JvZHknICYmIChtZXRob2QgIT09ICdQT1NUJyB8fCBjb250ZW50VHlwZSAhPT0gZm9ybUNvbnRlbnRUeXBlKSkge1xuICAgIHNlbGYucmVxdWVzdC5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignb2F1dGg6IHRyYW5zcG9ydF9tZXRob2Qgb2YgYm9keSByZXF1aXJlcyBQT1NUICcgK1xuICAgICAgJ2FuZCBjb250ZW50LXR5cGUgJyArIGZvcm1Db250ZW50VHlwZSkpXG4gIH1cblxuICBpZiAoIWZvcm0gJiYgdHlwZW9mIF9vYXV0aC5ib2R5X2hhc2ggPT09ICdib29sZWFuJykge1xuICAgIF9vYXV0aC5ib2R5X2hhc2ggPSBzZWxmLmJ1aWxkQm9keUhhc2goX29hdXRoLCBzZWxmLnJlcXVlc3QuYm9keS50b1N0cmluZygpKVxuICB9XG5cbiAgdmFyIG9hID0gc2VsZi5idWlsZFBhcmFtcyhfb2F1dGgsIHVyaSwgbWV0aG9kLCBxdWVyeSwgZm9ybSwgcXNMaWIpXG5cbiAgc3dpdGNoICh0cmFuc3BvcnQpIHtcbiAgICBjYXNlICdoZWFkZXInOlxuICAgICAgc2VsZi5yZXF1ZXN0LnNldEhlYWRlcignQXV0aG9yaXphdGlvbicsICdPQXV0aCAnICsgc2VsZi5jb25jYXRQYXJhbXMob2EsICcsJywgJ1wiJykpXG4gICAgICBicmVha1xuXG4gICAgY2FzZSAncXVlcnknOlxuICAgICAgdmFyIGhyZWYgPSBzZWxmLnJlcXVlc3QudXJpLmhyZWYgKz0gKHF1ZXJ5ID8gJyYnIDogJz8nKSArIHNlbGYuY29uY2F0UGFyYW1zKG9hLCAnJicpXG4gICAgICBzZWxmLnJlcXVlc3QudXJpID0gdXJsLnBhcnNlKGhyZWYpXG4gICAgICBzZWxmLnJlcXVlc3QucGF0aCA9IHNlbGYucmVxdWVzdC51cmkucGF0aFxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgJ2JvZHknOlxuICAgICAgc2VsZi5yZXF1ZXN0LmJvZHkgPSAoZm9ybSA/IGZvcm0gKyAnJicgOiAnJykgKyBzZWxmLmNvbmNhdFBhcmFtcyhvYSwgJyYnKVxuICAgICAgYnJlYWtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBzZWxmLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ29hdXRoOiB0cmFuc3BvcnRfbWV0aG9kIGludmFsaWQnKSlcbiAgfVxufVxuXG5leHBvcnRzLk9BdXRoID0gT0F1dGhcbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgcXMgPSByZXF1aXJlKCdxcycpXG4gICwgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG5cblxuZnVuY3Rpb24gUXVlcnlzdHJpbmcgKHJlcXVlc3QpIHtcbiAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICB0aGlzLmxpYiA9IG51bGxcbiAgdGhpcy51c2VRdWVyeXN0cmluZyA9IG51bGxcbiAgdGhpcy5wYXJzZU9wdGlvbnMgPSBudWxsXG4gIHRoaXMuc3RyaW5naWZ5T3B0aW9ucyA9IG51bGxcbn1cblxuUXVlcnlzdHJpbmcucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAodGhpcy5saWIpIHtyZXR1cm59XG5cbiAgdGhpcy51c2VRdWVyeXN0cmluZyA9IG9wdGlvbnMudXNlUXVlcnlzdHJpbmdcbiAgdGhpcy5saWIgPSAodGhpcy51c2VRdWVyeXN0cmluZyA/IHF1ZXJ5c3RyaW5nIDogcXMpXG5cbiAgdGhpcy5wYXJzZU9wdGlvbnMgPSBvcHRpb25zLnFzUGFyc2VPcHRpb25zIHx8IHt9XG4gIHRoaXMuc3RyaW5naWZ5T3B0aW9ucyA9IG9wdGlvbnMucXNTdHJpbmdpZnlPcHRpb25zIHx8IHt9XG59XG5cblF1ZXJ5c3RyaW5nLnByb3RvdHlwZS5zdHJpbmdpZnkgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiAodGhpcy51c2VRdWVyeXN0cmluZylcbiAgICA/IHRoaXMucmZjMzk4Nih0aGlzLmxpYi5zdHJpbmdpZnkob2JqLFxuICAgICAgdGhpcy5zdHJpbmdpZnlPcHRpb25zLnNlcCB8fCBudWxsLFxuICAgICAgdGhpcy5zdHJpbmdpZnlPcHRpb25zLmVxIHx8IG51bGwsXG4gICAgICB0aGlzLnN0cmluZ2lmeU9wdGlvbnMpKVxuICAgIDogdGhpcy5saWIuc3RyaW5naWZ5KG9iaiwgdGhpcy5zdHJpbmdpZnlPcHRpb25zKVxufVxuXG5RdWVyeXN0cmluZy5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiAodGhpcy51c2VRdWVyeXN0cmluZylcbiAgICA/IHRoaXMubGliLnBhcnNlKHN0cixcbiAgICAgIHRoaXMucGFyc2VPcHRpb25zLnNlcCB8fCBudWxsLFxuICAgICAgdGhpcy5wYXJzZU9wdGlvbnMuZXEgfHwgbnVsbCxcbiAgICAgIHRoaXMucGFyc2VPcHRpb25zKVxuICAgIDogdGhpcy5saWIucGFyc2Uoc3RyLCB0aGlzLnBhcnNlT3B0aW9ucylcbn1cblxuUXVlcnlzdHJpbmcucHJvdG90eXBlLnJmYzM5ODYgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuUXVlcnlzdHJpbmcucHJvdG90eXBlLnVuZXNjYXBlID0gcXVlcnlzdHJpbmcudW5lc2NhcGVcblxuZXhwb3J0cy5RdWVyeXN0cmluZyA9IFF1ZXJ5c3RyaW5nXG4iLCIndXNlIHN0cmljdCdcblxudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpXG52YXIgaXNVcmwgPSAvXmh0dHBzPzovXG5cbmZ1bmN0aW9uIFJlZGlyZWN0IChyZXF1ZXN0KSB7XG4gIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RcbiAgdGhpcy5mb2xsb3dSZWRpcmVjdCA9IHRydWVcbiAgdGhpcy5mb2xsb3dSZWRpcmVjdHMgPSB0cnVlXG4gIHRoaXMuZm9sbG93QWxsUmVkaXJlY3RzID0gZmFsc2VcbiAgdGhpcy5mb2xsb3dPcmlnaW5hbEh0dHBNZXRob2QgPSBmYWxzZVxuICB0aGlzLmFsbG93UmVkaXJlY3QgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRydWV9XG4gIHRoaXMubWF4UmVkaXJlY3RzID0gMTBcbiAgdGhpcy5yZWRpcmVjdHMgPSBbXVxuICB0aGlzLnJlZGlyZWN0c0ZvbGxvd2VkID0gMFxuICB0aGlzLnJlbW92ZVJlZmVyZXJIZWFkZXIgPSBmYWxzZVxufVxuXG5SZWRpcmVjdC5wcm90b3R5cGUub25SZXF1ZXN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgaWYgKG9wdGlvbnMubWF4UmVkaXJlY3RzICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZWxmLm1heFJlZGlyZWN0cyA9IG9wdGlvbnMubWF4UmVkaXJlY3RzXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmZvbGxvd1JlZGlyZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2VsZi5hbGxvd1JlZGlyZWN0ID0gb3B0aW9ucy5mb2xsb3dSZWRpcmVjdFxuICB9XG4gIGlmIChvcHRpb25zLmZvbGxvd1JlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZWxmLmZvbGxvd1JlZGlyZWN0cyA9ICEhb3B0aW9ucy5mb2xsb3dSZWRpcmVjdFxuICB9XG4gIGlmIChvcHRpb25zLmZvbGxvd0FsbFJlZGlyZWN0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc2VsZi5mb2xsb3dBbGxSZWRpcmVjdHMgPSBvcHRpb25zLmZvbGxvd0FsbFJlZGlyZWN0c1xuICB9XG4gIGlmIChzZWxmLmZvbGxvd1JlZGlyZWN0cyB8fCBzZWxmLmZvbGxvd0FsbFJlZGlyZWN0cykge1xuICAgIHNlbGYucmVkaXJlY3RzID0gc2VsZi5yZWRpcmVjdHMgfHwgW11cbiAgfVxuICBpZiAob3B0aW9ucy5yZW1vdmVSZWZlcmVySGVhZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZWxmLnJlbW92ZVJlZmVyZXJIZWFkZXIgPSBvcHRpb25zLnJlbW92ZVJlZmVyZXJIZWFkZXJcbiAgfVxuICBpZiAob3B0aW9ucy5mb2xsb3dPcmlnaW5hbEh0dHBNZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgIHNlbGYuZm9sbG93T3JpZ2luYWxIdHRwTWV0aG9kID0gb3B0aW9ucy5mb2xsb3dPcmlnaW5hbEh0dHBNZXRob2RcbiAgfVxufVxuXG5SZWRpcmVjdC5wcm90b3R5cGUucmVkaXJlY3RUbyA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgICAsIHJlcXVlc3QgPSBzZWxmLnJlcXVlc3RcblxuICB2YXIgcmVkaXJlY3RUbyA9IG51bGxcbiAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gMzAwICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgPCA0MDAgJiYgcmVzcG9uc2UuY2FzZWxlc3MuaGFzKCdsb2NhdGlvbicpKSB7XG4gICAgdmFyIGxvY2F0aW9uID0gcmVzcG9uc2UuY2FzZWxlc3MuZ2V0KCdsb2NhdGlvbicpXG4gICAgcmVxdWVzdC5kZWJ1ZygncmVkaXJlY3QnLCBsb2NhdGlvbilcblxuICAgIGlmIChzZWxmLmZvbGxvd0FsbFJlZGlyZWN0cykge1xuICAgICAgcmVkaXJlY3RUbyA9IGxvY2F0aW9uXG4gICAgfSBlbHNlIGlmIChzZWxmLmZvbGxvd1JlZGlyZWN0cykge1xuICAgICAgc3dpdGNoIChyZXF1ZXN0Lm1ldGhvZCkge1xuICAgICAgICBjYXNlICdQQVRDSCc6XG4gICAgICAgIGNhc2UgJ1BVVCc6XG4gICAgICAgIGNhc2UgJ1BPU1QnOlxuICAgICAgICBjYXNlICdERUxFVEUnOlxuICAgICAgICAgIC8vIERvIG5vdCBmb2xsb3cgcmVkaXJlY3RzXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWRpcmVjdFRvID0gbG9jYXRpb25cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDEpIHtcbiAgICB2YXIgYXV0aEhlYWRlciA9IHJlcXVlc3QuX2F1dGgub25SZXNwb25zZShyZXNwb25zZSlcbiAgICBpZiAoYXV0aEhlYWRlcikge1xuICAgICAgcmVxdWVzdC5zZXRIZWFkZXIoJ2F1dGhvcml6YXRpb24nLCBhdXRoSGVhZGVyKVxuICAgICAgcmVkaXJlY3RUbyA9IHJlcXVlc3QudXJpXG4gICAgfVxuICB9XG4gIHJldHVybiByZWRpcmVjdFRvXG59XG5cblJlZGlyZWN0LnByb3RvdHlwZS5vblJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwgcmVxdWVzdCA9IHNlbGYucmVxdWVzdFxuXG4gIHZhciByZWRpcmVjdFRvID0gc2VsZi5yZWRpcmVjdFRvKHJlc3BvbnNlKVxuICBpZiAoIXJlZGlyZWN0VG8gfHwgIXNlbGYuYWxsb3dSZWRpcmVjdC5jYWxsKHJlcXVlc3QsIHJlc3BvbnNlKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmVxdWVzdC5kZWJ1ZygncmVkaXJlY3QgdG8nLCByZWRpcmVjdFRvKVxuXG4gIC8vIGlnbm9yZSBhbnkgcG90ZW50aWFsIHJlc3BvbnNlIGJvZHkuICBpdCBjYW5ub3QgcG9zc2libHkgYmUgdXNlZnVsXG4gIC8vIHRvIHVzIGF0IHRoaXMgcG9pbnQuXG4gIC8vIHJlc3BvbnNlLnJlc3VtZSBzaG91bGQgYmUgZGVmaW5lZCwgYnV0IGNoZWNrIGFueXdheSBiZWZvcmUgY2FsbGluZy4gV29ya2Fyb3VuZCBmb3IgYnJvd3NlcmlmeS5cbiAgaWYgKHJlc3BvbnNlLnJlc3VtZSkge1xuICAgIHJlc3BvbnNlLnJlc3VtZSgpXG4gIH1cblxuICBpZiAoc2VsZi5yZWRpcmVjdHNGb2xsb3dlZCA+PSBzZWxmLm1heFJlZGlyZWN0cykge1xuICAgIHJlcXVlc3QuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ0V4Y2VlZGVkIG1heFJlZGlyZWN0cy4gUHJvYmFibHkgc3R1Y2sgaW4gYSByZWRpcmVjdCBsb29wICcgKyByZXF1ZXN0LnVyaS5ocmVmKSlcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBzZWxmLnJlZGlyZWN0c0ZvbGxvd2VkICs9IDFcblxuICBpZiAoIWlzVXJsLnRlc3QocmVkaXJlY3RUbykpIHtcbiAgICByZWRpcmVjdFRvID0gdXJsLnJlc29sdmUocmVxdWVzdC51cmkuaHJlZiwgcmVkaXJlY3RUbylcbiAgfVxuXG4gIHZhciB1cmlQcmV2ID0gcmVxdWVzdC51cmlcbiAgcmVxdWVzdC51cmkgPSB1cmwucGFyc2UocmVkaXJlY3RUbylcblxuICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgY2hhbmdlIHByb3RvY29sIGZyb20gaHR0cHMgdG8gaHR0cCBvciB2aWNlIHZlcnNhXG4gIGlmIChyZXF1ZXN0LnVyaS5wcm90b2NvbCAhPT0gdXJpUHJldi5wcm90b2NvbCkge1xuICAgIGRlbGV0ZSByZXF1ZXN0LmFnZW50XG4gIH1cblxuICBzZWxmLnJlZGlyZWN0cy5wdXNoKFxuICAgIHsgc3RhdHVzQ29kZSA6IHJlc3BvbnNlLnN0YXR1c0NvZGVcbiAgICAsIHJlZGlyZWN0VXJpOiByZWRpcmVjdFRvXG4gICAgfVxuICApXG4gIGlmIChzZWxmLmZvbGxvd0FsbFJlZGlyZWN0cyAmJiByZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnXG4gICAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gNDAxICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDMwNykge1xuICAgIHJlcXVlc3QubWV0aG9kID0gc2VsZi5mb2xsb3dPcmlnaW5hbEh0dHBNZXRob2QgPyByZXF1ZXN0Lm1ldGhvZCA6ICdHRVQnXG4gIH1cbiAgLy8gcmVxdWVzdC5tZXRob2QgPSAnR0VUJyAvLyBGb3JjZSBhbGwgcmVkaXJlY3RzIHRvIHVzZSBHRVQgfHwgY29tbWVudGVkIG91dCBmaXhlcyAjMjE1XG4gIGRlbGV0ZSByZXF1ZXN0LnNyY1xuICBkZWxldGUgcmVxdWVzdC5yZXFcbiAgZGVsZXRlIHJlcXVlc3QuX3N0YXJ0ZWRcbiAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDQwMSAmJiByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAzMDcpIHtcbiAgICAvLyBSZW1vdmUgcGFyYW1ldGVycyBmcm9tIHRoZSBwcmV2aW91cyByZXNwb25zZSwgdW5sZXNzIHRoaXMgaXMgdGhlIHNlY29uZCByZXF1ZXN0XG4gICAgLy8gZm9yIGEgc2VydmVyIHRoYXQgcmVxdWlyZXMgZGlnZXN0IGF1dGhlbnRpY2F0aW9uLlxuICAgIGRlbGV0ZSByZXF1ZXN0LmJvZHlcbiAgICBkZWxldGUgcmVxdWVzdC5fZm9ybVxuICAgIGlmIChyZXF1ZXN0LmhlYWRlcnMpIHtcbiAgICAgIHJlcXVlc3QucmVtb3ZlSGVhZGVyKCdob3N0JylcbiAgICAgIHJlcXVlc3QucmVtb3ZlSGVhZGVyKCdjb250ZW50LXR5cGUnKVxuICAgICAgcmVxdWVzdC5yZW1vdmVIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJylcbiAgICAgIGlmIChyZXF1ZXN0LnVyaS5ob3N0bmFtZSAhPT0gcmVxdWVzdC5vcmlnaW5hbEhvc3Quc3BsaXQoJzonKVswXSkge1xuICAgICAgICAvLyBSZW1vdmUgYXV0aG9yaXphdGlvbiBpZiBjaGFuZ2luZyBob3N0bmFtZXMgKGJ1dCBub3QgaWYganVzdFxuICAgICAgICAvLyBjaGFuZ2luZyBwb3J0cyBvciBwcm90b2NvbHMpLiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiBjdXJsOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmFnZGVyL2N1cmwvYmxvYi82YmViMGVlZS9saWIvaHR0cC5jI0w3MTBcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVIZWFkZXIoJ2F1dGhvcml6YXRpb24nKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghc2VsZi5yZW1vdmVSZWZlcmVySGVhZGVyKSB7XG4gICAgcmVxdWVzdC5zZXRIZWFkZXIoJ3JlZmVyZXInLCB1cmlQcmV2LmhyZWYpXG4gIH1cblxuICByZXF1ZXN0LmVtaXQoJ3JlZGlyZWN0JylcblxuICByZXF1ZXN0LmluaXQoKVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydHMuUmVkaXJlY3QgPSBSZWRpcmVjdFxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKVxuICAsIHR1bm5lbCA9IHJlcXVpcmUoJ3R1bm5lbC1hZ2VudCcpXG5cbnZhciBkZWZhdWx0UHJveHlIZWFkZXJXaGl0ZUxpc3QgPSBbXG4gICdhY2NlcHQnLFxuICAnYWNjZXB0LWNoYXJzZXQnLFxuICAnYWNjZXB0LWVuY29kaW5nJyxcbiAgJ2FjY2VwdC1sYW5ndWFnZScsXG4gICdhY2NlcHQtcmFuZ2VzJyxcbiAgJ2NhY2hlLWNvbnRyb2wnLFxuICAnY29udGVudC1lbmNvZGluZycsXG4gICdjb250ZW50LWxhbmd1YWdlJyxcbiAgJ2NvbnRlbnQtbG9jYXRpb24nLFxuICAnY29udGVudC1tZDUnLFxuICAnY29udGVudC1yYW5nZScsXG4gICdjb250ZW50LXR5cGUnLFxuICAnY29ubmVjdGlvbicsXG4gICdkYXRlJyxcbiAgJ2V4cGVjdCcsXG4gICdtYXgtZm9yd2FyZHMnLFxuICAncHJhZ21hJyxcbiAgJ3JlZmVyZXInLFxuICAndGUnLFxuICAndXNlci1hZ2VudCcsXG4gICd2aWEnXG5dXG5cbnZhciBkZWZhdWx0UHJveHlIZWFkZXJFeGNsdXNpdmVMaXN0ID0gW1xuICAncHJveHktYXV0aG9yaXphdGlvbidcbl1cblxuZnVuY3Rpb24gY29uc3RydWN0UHJveHlIb3N0KHVyaU9iamVjdCkge1xuICB2YXIgcG9ydCA9IHVyaU9iamVjdC5wb3J0XG4gICAgLCBwcm90b2NvbCA9IHVyaU9iamVjdC5wcm90b2NvbFxuICAgICwgcHJveHlIb3N0ID0gdXJpT2JqZWN0Lmhvc3RuYW1lICsgJzonXG5cbiAgaWYgKHBvcnQpIHtcbiAgICBwcm94eUhvc3QgKz0gcG9ydFxuICB9IGVsc2UgaWYgKHByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgIHByb3h5SG9zdCArPSAnNDQzJ1xuICB9IGVsc2Uge1xuICAgIHByb3h5SG9zdCArPSAnODAnXG4gIH1cblxuICByZXR1cm4gcHJveHlIb3N0XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFByb3h5SGVhZGVyV2hpdGVMaXN0KGhlYWRlcnMsIHByb3h5SGVhZGVyV2hpdGVMaXN0KSB7XG4gIHZhciB3aGl0ZUxpc3QgPSBwcm94eUhlYWRlcldoaXRlTGlzdFxuICAgIC5yZWR1Y2UoZnVuY3Rpb24gKHNldCwgaGVhZGVyKSB7XG4gICAgICBzZXRbaGVhZGVyLnRvTG93ZXJDYXNlKCldID0gdHJ1ZVxuICAgICAgcmV0dXJuIHNldFxuICAgIH0sIHt9KVxuXG4gIHJldHVybiBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgIC5maWx0ZXIoZnVuY3Rpb24gKGhlYWRlcikge1xuICAgICAgcmV0dXJuIHdoaXRlTGlzdFtoZWFkZXIudG9Mb3dlckNhc2UoKV1cbiAgICB9KVxuICAgIC5yZWR1Y2UoZnVuY3Rpb24gKHNldCwgaGVhZGVyKSB7XG4gICAgICBzZXRbaGVhZGVyXSA9IGhlYWRlcnNbaGVhZGVyXVxuICAgICAgcmV0dXJuIHNldFxuICAgIH0sIHt9KVxufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RUdW5uZWxPcHRpb25zIChyZXF1ZXN0LCBwcm94eUhlYWRlcnMpIHtcbiAgdmFyIHByb3h5ID0gcmVxdWVzdC5wcm94eVxuXG4gIHZhciB0dW5uZWxPcHRpb25zID0ge1xuICAgIHByb3h5IDoge1xuICAgICAgaG9zdCAgICAgIDogcHJveHkuaG9zdG5hbWUsXG4gICAgICBwb3J0ICAgICAgOiArcHJveHkucG9ydCxcbiAgICAgIHByb3h5QXV0aCA6IHByb3h5LmF1dGgsXG4gICAgICBoZWFkZXJzICAgOiBwcm94eUhlYWRlcnNcbiAgICB9LFxuICAgIGhlYWRlcnMgICAgICAgICAgICA6IHJlcXVlc3QuaGVhZGVycyxcbiAgICBjYSAgICAgICAgICAgICAgICAgOiByZXF1ZXN0LmNhLFxuICAgIGNlcnQgICAgICAgICAgICAgICA6IHJlcXVlc3QuY2VydCxcbiAgICBrZXkgICAgICAgICAgICAgICAgOiByZXF1ZXN0LmtleSxcbiAgICBwYXNzcGhyYXNlICAgICAgICAgOiByZXF1ZXN0LnBhc3NwaHJhc2UsXG4gICAgcGZ4ICAgICAgICAgICAgICAgIDogcmVxdWVzdC5wZngsXG4gICAgY2lwaGVycyAgICAgICAgICAgIDogcmVxdWVzdC5jaXBoZXJzLFxuICAgIHJlamVjdFVuYXV0aG9yaXplZCA6IHJlcXVlc3QucmVqZWN0VW5hdXRob3JpemVkLFxuICAgIHNlY3VyZU9wdGlvbnMgICAgICA6IHJlcXVlc3Quc2VjdXJlT3B0aW9ucyxcbiAgICBzZWN1cmVQcm90b2NvbCAgICAgOiByZXF1ZXN0LnNlY3VyZVByb3RvY29sXG4gIH1cblxuICByZXR1cm4gdHVubmVsT3B0aW9uc1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RUdW5uZWxGbk5hbWUodXJpLCBwcm94eSkge1xuICB2YXIgdXJpUHJvdG9jb2wgPSAodXJpLnByb3RvY29sID09PSAnaHR0cHM6JyA/ICdodHRwcycgOiAnaHR0cCcpXG4gIHZhciBwcm94eVByb3RvY29sID0gKHByb3h5LnByb3RvY29sID09PSAnaHR0cHM6JyA/ICdIdHRwcycgOiAnSHR0cCcpXG4gIHJldHVybiBbdXJpUHJvdG9jb2wsIHByb3h5UHJvdG9jb2xdLmpvaW4oJ092ZXInKVxufVxuXG5mdW5jdGlvbiBnZXRUdW5uZWxGbihyZXF1ZXN0KSB7XG4gIHZhciB1cmkgPSByZXF1ZXN0LnVyaVxuICB2YXIgcHJveHkgPSByZXF1ZXN0LnByb3h5XG4gIHZhciB0dW5uZWxGbk5hbWUgPSBjb25zdHJ1Y3RUdW5uZWxGbk5hbWUodXJpLCBwcm94eSlcbiAgcmV0dXJuIHR1bm5lbFt0dW5uZWxGbk5hbWVdXG59XG5cblxuZnVuY3Rpb24gVHVubmVsIChyZXF1ZXN0KSB7XG4gIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RcbiAgdGhpcy5wcm94eUhlYWRlcldoaXRlTGlzdCA9IGRlZmF1bHRQcm94eUhlYWRlcldoaXRlTGlzdFxuICB0aGlzLnByb3h5SGVhZGVyRXhjbHVzaXZlTGlzdCA9IFtdXG4gIGlmICh0eXBlb2YgcmVxdWVzdC50dW5uZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy50dW5uZWxPdmVycmlkZSA9IHJlcXVlc3QudHVubmVsXG4gIH1cbn1cblxuVHVubmVsLnByb3RvdHlwZS5pc0VuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwgcmVxdWVzdCA9IHNlbGYucmVxdWVzdFxuICAvLyBUdW5uZWwgSFRUUFMgYnkgZGVmYXVsdC4gQWxsb3cgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgdGhpcyBzZXR0aW5nLlxuXG4gIC8vIElmIHNlbGYudHVubmVsT3ZlcnJpZGUgaXMgc2V0ICh0aGUgdXNlciBzcGVjaWZpZWQgYSB2YWx1ZSksIHVzZSBpdC5cbiAgaWYgKHR5cGVvZiBzZWxmLnR1bm5lbE92ZXJyaWRlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBzZWxmLnR1bm5lbE92ZXJyaWRlXG4gIH1cblxuICAvLyBJZiB0aGUgZGVzdGluYXRpb24gaXMgSFRUUFMsIHR1bm5lbC5cbiAgaWYgKHJlcXVlc3QudXJpLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBPdGhlcndpc2UsIGRvIG5vdCB1c2UgdHVubmVsLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuVHVubmVsLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwgcmVxdWVzdCA9IHNlbGYucmVxdWVzdFxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgaWYgKHR5cGVvZiByZXF1ZXN0LnByb3h5ID09PSAnc3RyaW5nJykge1xuICAgIHJlcXVlc3QucHJveHkgPSB1cmwucGFyc2UocmVxdWVzdC5wcm94eSlcbiAgfVxuXG4gIGlmICghcmVxdWVzdC5wcm94eSB8fCAhcmVxdWVzdC50dW5uZWwpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFNldHVwIFByb3h5IEhlYWRlciBFeGNsdXNpdmUgTGlzdCBhbmQgV2hpdGUgTGlzdFxuICBpZiAob3B0aW9ucy5wcm94eUhlYWRlcldoaXRlTGlzdCkge1xuICAgIHNlbGYucHJveHlIZWFkZXJXaGl0ZUxpc3QgPSBvcHRpb25zLnByb3h5SGVhZGVyV2hpdGVMaXN0XG4gIH1cbiAgaWYgKG9wdGlvbnMucHJveHlIZWFkZXJFeGNsdXNpdmVMaXN0KSB7XG4gICAgc2VsZi5wcm94eUhlYWRlckV4Y2x1c2l2ZUxpc3QgPSBvcHRpb25zLnByb3h5SGVhZGVyRXhjbHVzaXZlTGlzdFxuICB9XG5cbiAgdmFyIHByb3h5SGVhZGVyRXhjbHVzaXZlTGlzdCA9IHNlbGYucHJveHlIZWFkZXJFeGNsdXNpdmVMaXN0LmNvbmNhdChkZWZhdWx0UHJveHlIZWFkZXJFeGNsdXNpdmVMaXN0KVxuICB2YXIgcHJveHlIZWFkZXJXaGl0ZUxpc3QgPSBzZWxmLnByb3h5SGVhZGVyV2hpdGVMaXN0LmNvbmNhdChwcm94eUhlYWRlckV4Y2x1c2l2ZUxpc3QpXG5cbiAgLy8gU2V0dXAgUHJveHkgSGVhZGVycyBhbmQgUHJveHkgSGVhZGVycyBIb3N0XG4gIC8vIE9ubHkgc2VuZCB0aGUgUHJveHkgV2hpdGUgTGlzdGVkIEhlYWRlciBuYW1lc1xuICB2YXIgcHJveHlIZWFkZXJzID0gY29uc3RydWN0UHJveHlIZWFkZXJXaGl0ZUxpc3QocmVxdWVzdC5oZWFkZXJzLCBwcm94eUhlYWRlcldoaXRlTGlzdClcbiAgcHJveHlIZWFkZXJzLmhvc3QgPSBjb25zdHJ1Y3RQcm94eUhvc3QocmVxdWVzdC51cmkpXG5cbiAgcHJveHlIZWFkZXJFeGNsdXNpdmVMaXN0LmZvckVhY2gocmVxdWVzdC5yZW1vdmVIZWFkZXIsIHJlcXVlc3QpXG5cbiAgLy8gU2V0IEFnZW50IGZyb20gVHVubmVsIERhdGFcbiAgdmFyIHR1bm5lbEZuID0gZ2V0VHVubmVsRm4ocmVxdWVzdClcbiAgdmFyIHR1bm5lbE9wdGlvbnMgPSBjb25zdHJ1Y3RUdW5uZWxPcHRpb25zKHJlcXVlc3QsIHByb3h5SGVhZGVycylcbiAgcmVxdWVzdC5hZ2VudCA9IHR1bm5lbEZuKHR1bm5lbE9wdGlvbnMpXG5cbiAgcmV0dXJuIHRydWVcbn1cblxuVHVubmVsLmRlZmF1bHRQcm94eUhlYWRlcldoaXRlTGlzdCA9IGRlZmF1bHRQcm94eUhlYWRlcldoaXRlTGlzdFxuVHVubmVsLmRlZmF1bHRQcm94eUhlYWRlckV4Y2x1c2l2ZUxpc3QgPSBkZWZhdWx0UHJveHlIZWFkZXJFeGNsdXNpdmVMaXN0XG5leHBvcnRzLlR1bm5lbCA9IFR1bm5lbFxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpXG4gICwgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpXG4gICwgdXJsID0gcmVxdWlyZSgndXJsJylcbiAgLCB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG4gICwgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbiAgLCB6bGliID0gcmVxdWlyZSgnemxpYicpXG4gICwgaGF3ayA9IHJlcXVpcmUoJ2hhd2snKVxuICAsIGF3czIgPSByZXF1aXJlKCdhd3Mtc2lnbjInKVxuICAsIGF3czQgPSByZXF1aXJlKCdhd3M0JylcbiAgLCBodHRwU2lnbmF0dXJlID0gcmVxdWlyZSgnaHR0cC1zaWduYXR1cmUnKVxuICAsIG1pbWUgPSByZXF1aXJlKCdtaW1lLXR5cGVzJylcbiAgLCBzdHJpbmdzdHJlYW0gPSByZXF1aXJlKCdzdHJpbmdzdHJlYW0nKVxuICAsIGNhc2VsZXNzID0gcmVxdWlyZSgnY2FzZWxlc3MnKVxuICAsIEZvcmV2ZXJBZ2VudCA9IHJlcXVpcmUoJ2ZvcmV2ZXItYWdlbnQnKVxuICAsIEZvcm1EYXRhID0gcmVxdWlyZSgnZm9ybS1kYXRhJylcbiAgLCBleHRlbmQgPSByZXF1aXJlKCdleHRlbmQnKVxuICAsIGlzc3RyZWFtID0gcmVxdWlyZSgnaXNzdHJlYW0nKVxuICAsIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJ2lzLXR5cGVkYXJyYXknKS5zdHJpY3RcbiAgLCBoZWxwZXJzID0gcmVxdWlyZSgnLi9saWIvaGVscGVycycpXG4gICwgY29va2llcyA9IHJlcXVpcmUoJy4vbGliL2Nvb2tpZXMnKVxuICAsIGdldFByb3h5RnJvbVVSSSA9IHJlcXVpcmUoJy4vbGliL2dldFByb3h5RnJvbVVSSScpXG4gICwgUXVlcnlzdHJpbmcgPSByZXF1aXJlKCcuL2xpYi9xdWVyeXN0cmluZycpLlF1ZXJ5c3RyaW5nXG4gICwgSGFyID0gcmVxdWlyZSgnLi9saWIvaGFyJykuSGFyXG4gICwgQXV0aCA9IHJlcXVpcmUoJy4vbGliL2F1dGgnKS5BdXRoXG4gICwgT0F1dGggPSByZXF1aXJlKCcuL2xpYi9vYXV0aCcpLk9BdXRoXG4gICwgTXVsdGlwYXJ0ID0gcmVxdWlyZSgnLi9saWIvbXVsdGlwYXJ0JykuTXVsdGlwYXJ0XG4gICwgUmVkaXJlY3QgPSByZXF1aXJlKCcuL2xpYi9yZWRpcmVjdCcpLlJlZGlyZWN0XG4gICwgVHVubmVsID0gcmVxdWlyZSgnLi9saWIvdHVubmVsJykuVHVubmVsXG4gICwgbm93ID0gcmVxdWlyZSgncGVyZm9ybWFuY2Utbm93JylcbiAgLCBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG52YXIgc2FmZVN0cmluZ2lmeSA9IGhlbHBlcnMuc2FmZVN0cmluZ2lmeVxuICAsIGlzUmVhZFN0cmVhbSA9IGhlbHBlcnMuaXNSZWFkU3RyZWFtXG4gICwgdG9CYXNlNjQgPSBoZWxwZXJzLnRvQmFzZTY0XG4gICwgZGVmZXIgPSBoZWxwZXJzLmRlZmVyXG4gICwgY29weSA9IGhlbHBlcnMuY29weVxuICAsIHZlcnNpb24gPSBoZWxwZXJzLnZlcnNpb25cbiAgLCBnbG9iYWxDb29raWVKYXIgPSBjb29raWVzLmphcigpXG5cblxudmFyIGdsb2JhbFBvb2wgPSB7fVxuXG5mdW5jdGlvbiBmaWx0ZXJGb3JOb25SZXNlcnZlZChyZXNlcnZlZCwgb3B0aW9ucykge1xuICAvLyBGaWx0ZXIgb3V0IHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHJlc2VydmVkLlxuICAvLyBSZXNlcnZlZCB2YWx1ZXMgYXJlIHBhc3NlZCBpbiBhdCBjYWxsIHNpdGUuXG5cbiAgdmFyIG9iamVjdCA9IHt9XG4gIGZvciAodmFyIGkgaW4gb3B0aW9ucykge1xuICAgIHZhciBub3RSZXNlcnZlZCA9IChyZXNlcnZlZC5pbmRleE9mKGkpID09PSAtMSlcbiAgICBpZiAobm90UmVzZXJ2ZWQpIHtcbiAgICAgIG9iamVjdFtpXSA9IG9wdGlvbnNbaV1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdFxufVxuXG5mdW5jdGlvbiBmaWx0ZXJPdXRSZXNlcnZlZEZ1bmN0aW9ucyhyZXNlcnZlZCwgb3B0aW9ucykge1xuICAvLyBGaWx0ZXIgb3V0IHByb3BlcnRpZXMgdGhhdCBhcmUgZnVuY3Rpb25zIGFuZCBhcmUgcmVzZXJ2ZWQuXG4gIC8vIFJlc2VydmVkIHZhbHVlcyBhcmUgcGFzc2VkIGluIGF0IGNhbGwgc2l0ZS5cblxuICB2YXIgb2JqZWN0ID0ge31cbiAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgdmFyIGlzUmVzZXJ2ZWQgPSAhKHJlc2VydmVkLmluZGV4T2YoaSkgPT09IC0xKVxuICAgIHZhciBpc0Z1bmN0aW9uID0gKHR5cGVvZiBvcHRpb25zW2ldID09PSAnZnVuY3Rpb24nKVxuICAgIGlmICghKGlzUmVzZXJ2ZWQgJiYgaXNGdW5jdGlvbikpIHtcbiAgICAgIG9iamVjdFtpXSA9IG9wdGlvbnNbaV1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iamVjdFxuXG59XG5cbi8vIFJldHVybiBhIHNpbXBsZXIgcmVxdWVzdCBvYmplY3QgdG8gYWxsb3cgc2VyaWFsaXphdGlvblxuZnVuY3Rpb24gcmVxdWVzdFRvSlNPTigpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHJldHVybiB7XG4gICAgdXJpOiBzZWxmLnVyaSxcbiAgICBtZXRob2Q6IHNlbGYubWV0aG9kLFxuICAgIGhlYWRlcnM6IHNlbGYuaGVhZGVyc1xuICB9XG59XG5cbi8vIFJldHVybiBhIHNpbXBsZXIgcmVzcG9uc2Ugb2JqZWN0IHRvIGFsbG93IHNlcmlhbGl6YXRpb25cbmZ1bmN0aW9uIHJlc3BvbnNlVG9KU09OKCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXNDb2RlOiBzZWxmLnN0YXR1c0NvZGUsXG4gICAgYm9keTogc2VsZi5ib2R5LFxuICAgIGhlYWRlcnM6IHNlbGYuaGVhZGVycyxcbiAgICByZXF1ZXN0OiByZXF1ZXN0VG9KU09OLmNhbGwoc2VsZi5yZXF1ZXN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIFJlcXVlc3QgKG9wdGlvbnMpIHtcbiAgLy8gaWYgZ2l2ZW4gdGhlIG1ldGhvZCBwcm9wZXJ0eSBpbiBvcHRpb25zLCBzZXQgcHJvcGVydHkgZXhwbGljaXRNZXRob2QgdG8gdHJ1ZVxuXG4gIC8vIGV4dGVuZCB0aGUgUmVxdWVzdCBpbnN0YW5jZSB3aXRoIGFueSBub24tcmVzZXJ2ZWQgcHJvcGVydGllc1xuICAvLyByZW1vdmUgYW55IHJlc2VydmVkIGZ1bmN0aW9ucyBmcm9tIHRoZSBvcHRpb25zIG9iamVjdFxuICAvLyBzZXQgUmVxdWVzdCBpbnN0YW5jZSB0byBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGVcbiAgLy8gY2FsbCBpbml0XG5cbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgLy8gc3RhcnQgd2l0aCBIQVIsIHRoZW4gb3ZlcnJpZGUgd2l0aCBhZGRpdGlvbmFsIG9wdGlvbnNcbiAgaWYgKG9wdGlvbnMuaGFyKSB7XG4gICAgc2VsZi5faGFyID0gbmV3IEhhcihzZWxmKVxuICAgIG9wdGlvbnMgPSBzZWxmLl9oYXIub3B0aW9ucyhvcHRpb25zKVxuICB9XG5cbiAgc3RyZWFtLlN0cmVhbS5jYWxsKHNlbGYpXG4gIHZhciByZXNlcnZlZCA9IE9iamVjdC5rZXlzKFJlcXVlc3QucHJvdG90eXBlKVxuICB2YXIgbm9uUmVzZXJ2ZWQgPSBmaWx0ZXJGb3JOb25SZXNlcnZlZChyZXNlcnZlZCwgb3B0aW9ucylcblxuICBleHRlbmQoc2VsZiwgbm9uUmVzZXJ2ZWQpXG4gIG9wdGlvbnMgPSBmaWx0ZXJPdXRSZXNlcnZlZEZ1bmN0aW9ucyhyZXNlcnZlZCwgb3B0aW9ucylcblxuICBzZWxmLnJlYWRhYmxlID0gdHJ1ZVxuICBzZWxmLndyaXRhYmxlID0gdHJ1ZVxuICBpZiAob3B0aW9ucy5tZXRob2QpIHtcbiAgICBzZWxmLmV4cGxpY2l0TWV0aG9kID0gdHJ1ZVxuICB9XG4gIHNlbGYuX3FzID0gbmV3IFF1ZXJ5c3RyaW5nKHNlbGYpXG4gIHNlbGYuX2F1dGggPSBuZXcgQXV0aChzZWxmKVxuICBzZWxmLl9vYXV0aCA9IG5ldyBPQXV0aChzZWxmKVxuICBzZWxmLl9tdWx0aXBhcnQgPSBuZXcgTXVsdGlwYXJ0KHNlbGYpXG4gIHNlbGYuX3JlZGlyZWN0ID0gbmV3IFJlZGlyZWN0KHNlbGYpXG4gIHNlbGYuX3R1bm5lbCA9IG5ldyBUdW5uZWwoc2VsZilcbiAgc2VsZi5pbml0KG9wdGlvbnMpXG59XG5cbnV0aWwuaW5oZXJpdHMoUmVxdWVzdCwgc3RyZWFtLlN0cmVhbSlcblxuLy8gRGVidWdnaW5nXG5SZXF1ZXN0LmRlYnVnID0gcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxicmVxdWVzdFxcYi8udGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHKVxuZnVuY3Rpb24gZGVidWcoKSB7XG4gIGlmIChSZXF1ZXN0LmRlYnVnKSB7XG4gICAgY29uc29sZS5lcnJvcignUkVRVUVTVCAlcycsIHV0aWwuZm9ybWF0LmFwcGx5KHV0aWwsIGFyZ3VtZW50cykpXG4gIH1cbn1cblJlcXVlc3QucHJvdG90eXBlLmRlYnVnID0gZGVidWdcblxuUmVxdWVzdC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIC8vIGluaXQoKSBjb250YWlucyBhbGwgdGhlIGNvZGUgdG8gc2V0dXAgdGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAvLyB0aGUgYWN0dWFsIG91dGdvaW5nIHJlcXVlc3QgaXMgbm90IHN0YXJ0ZWQgdW50aWwgc3RhcnQoKSBpcyBjYWxsZWRcbiAgLy8gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBib3RoIHRoZSBjb25zdHJ1Y3RvciBhbmQgb24gcmVkaXJlY3QuXG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuICBzZWxmLmhlYWRlcnMgPSBzZWxmLmhlYWRlcnMgPyBjb3B5KHNlbGYuaGVhZGVycykgOiB7fVxuXG4gIC8vIERlbGV0ZSBoZWFkZXJzIHdpdGggdmFsdWUgdW5kZWZpbmVkIHNpbmNlIHRoZXkgYnJlYWtcbiAgLy8gQ2xpZW50UmVxdWVzdC5PdXRnb2luZ01lc3NhZ2Uuc2V0SGVhZGVyIGluIG5vZGUgMC4xMlxuICBmb3IgKHZhciBoZWFkZXJOYW1lIGluIHNlbGYuaGVhZGVycykge1xuICAgIGlmICh0eXBlb2Ygc2VsZi5oZWFkZXJzW2hlYWRlck5hbWVdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVsZXRlIHNlbGYuaGVhZGVyc1toZWFkZXJOYW1lXVxuICAgIH1cbiAgfVxuXG4gIGNhc2VsZXNzLmh0dHBpZnkoc2VsZiwgc2VsZi5oZWFkZXJzKVxuXG4gIGlmICghc2VsZi5tZXRob2QpIHtcbiAgICBzZWxmLm1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8ICdHRVQnXG4gIH1cbiAgaWYgKCFzZWxmLmxvY2FsQWRkcmVzcykge1xuICAgIHNlbGYubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3NcbiAgfVxuXG4gIHNlbGYuX3FzLmluaXQob3B0aW9ucylcblxuICBkZWJ1ZyhvcHRpb25zKVxuICBpZiAoIXNlbGYucG9vbCAmJiBzZWxmLnBvb2wgIT09IGZhbHNlKSB7XG4gICAgc2VsZi5wb29sID0gZ2xvYmFsUG9vbFxuICB9XG4gIHNlbGYuZGVzdHMgPSBzZWxmLmRlc3RzIHx8IFtdXG4gIHNlbGYuX19pc1JlcXVlc3RSZXF1ZXN0ID0gdHJ1ZVxuXG4gIC8vIFByb3RlY3QgYWdhaW5zdCBkb3VibGUgY2FsbGJhY2tcbiAgaWYgKCFzZWxmLl9jYWxsYmFjayAmJiBzZWxmLmNhbGxiYWNrKSB7XG4gICAgc2VsZi5fY2FsbGJhY2sgPSBzZWxmLmNhbGxiYWNrXG4gICAgc2VsZi5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzZWxmLl9jYWxsYmFja0NhbGxlZCkge1xuICAgICAgICByZXR1cm4gLy8gUHJpbnQgYSB3YXJuaW5nIG1heWJlP1xuICAgICAgfVxuICAgICAgc2VsZi5fY2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICBzZWxmLl9jYWxsYmFjay5hcHBseShzZWxmLCBhcmd1bWVudHMpXG4gICAgfVxuICAgIHNlbGYub24oJ2Vycm9yJywgc2VsZi5jYWxsYmFjay5iaW5kKCkpXG4gICAgc2VsZi5vbignY29tcGxldGUnLCBzZWxmLmNhbGxiYWNrLmJpbmQoc2VsZiwgbnVsbCkpXG4gIH1cblxuICAvLyBQZW9wbGUgdXNlIHRoaXMgcHJvcGVydHkgaW5zdGVhZCBhbGwgdGhlIHRpbWUsIHNvIHN1cHBvcnQgaXRcbiAgaWYgKCFzZWxmLnVyaSAmJiBzZWxmLnVybCkge1xuICAgIHNlbGYudXJpID0gc2VsZi51cmxcbiAgICBkZWxldGUgc2VsZi51cmxcbiAgfVxuXG4gIC8vIElmIHRoZXJlJ3MgYSBiYXNlVXJsLCB0aGVuIHVzZSBpdCBhcyB0aGUgYmFzZSBVUkwgKGkuZS4gdXJpIG11c3QgYmVcbiAgLy8gc3BlY2lmaWVkIGFzIGEgcmVsYXRpdmUgcGF0aCBhbmQgaXMgYXBwZW5kZWQgdG8gYmFzZVVybCkuXG4gIGlmIChzZWxmLmJhc2VVcmwpIHtcbiAgICBpZiAodHlwZW9mIHNlbGYuYmFzZVVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdvcHRpb25zLmJhc2VVcmwgbXVzdCBiZSBhIHN0cmluZycpKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2VsZi51cmkgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignb3B0aW9ucy51cmkgbXVzdCBiZSBhIHN0cmluZyB3aGVuIHVzaW5nIG9wdGlvbnMuYmFzZVVybCcpKVxuICAgIH1cblxuICAgIGlmIChzZWxmLnVyaS5pbmRleE9mKCcvLycpID09PSAwIHx8IHNlbGYudXJpLmluZGV4T2YoJzovLycpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ29wdGlvbnMudXJpIG11c3QgYmUgYSBwYXRoIHdoZW4gdXNpbmcgb3B0aW9ucy5iYXNlVXJsJykpXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGFsbCBjYXNlcyB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSdzIG9ubHkgb25lIHNsYXNoIGJldHdlZW5cbiAgICAvLyBiYXNlVXJsIGFuZCB1cmkuXG4gICAgdmFyIGJhc2VVcmxFbmRzV2l0aFNsYXNoID0gc2VsZi5iYXNlVXJsLmxhc3RJbmRleE9mKCcvJykgPT09IHNlbGYuYmFzZVVybC5sZW5ndGggLSAxXG4gICAgdmFyIHVyaVN0YXJ0c1dpdGhTbGFzaCA9IHNlbGYudXJpLmluZGV4T2YoJy8nKSA9PT0gMFxuXG4gICAgaWYgKGJhc2VVcmxFbmRzV2l0aFNsYXNoICYmIHVyaVN0YXJ0c1dpdGhTbGFzaCkge1xuICAgICAgc2VsZi51cmkgPSBzZWxmLmJhc2VVcmwgKyBzZWxmLnVyaS5zbGljZSgxKVxuICAgIH0gZWxzZSBpZiAoYmFzZVVybEVuZHNXaXRoU2xhc2ggfHwgdXJpU3RhcnRzV2l0aFNsYXNoKSB7XG4gICAgICBzZWxmLnVyaSA9IHNlbGYuYmFzZVVybCArIHNlbGYudXJpXG4gICAgfSBlbHNlIGlmIChzZWxmLnVyaSA9PT0gJycpIHtcbiAgICAgIHNlbGYudXJpID0gc2VsZi5iYXNlVXJsXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYudXJpID0gc2VsZi5iYXNlVXJsICsgJy8nICsgc2VsZi51cmlcbiAgICB9XG4gICAgZGVsZXRlIHNlbGYuYmFzZVVybFxuICB9XG5cbiAgLy8gQSBVUkkgaXMgbmVlZGVkIGJ5IHRoaXMgcG9pbnQsIGVtaXQgZXJyb3IgaWYgd2UgaGF2ZW4ndCBiZWVuIGFibGUgdG8gZ2V0IG9uZVxuICBpZiAoIXNlbGYudXJpKSB7XG4gICAgcmV0dXJuIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ29wdGlvbnMudXJpIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQnKSlcbiAgfVxuXG4gIC8vIElmIGEgc3RyaW5nIFVSSS9VUkwgd2FzIGdpdmVuLCBwYXJzZSBpdCBpbnRvIGEgVVJMIG9iamVjdFxuICBpZiAodHlwZW9mIHNlbGYudXJpID09PSAnc3RyaW5nJykge1xuICAgIHNlbGYudXJpID0gdXJsLnBhcnNlKHNlbGYudXJpKVxuICB9XG5cbiAgLy8gU29tZSBVUkwgb2JqZWN0cyBhcmUgbm90IGZyb20gYSBVUkwgcGFyc2VkIHN0cmluZyBhbmQgbmVlZCBocmVmIGFkZGVkXG4gIGlmICghc2VsZi51cmkuaHJlZikge1xuICAgIHNlbGYudXJpLmhyZWYgPSB1cmwuZm9ybWF0KHNlbGYudXJpKVxuICB9XG5cbiAgLy8gREVQUkVDQVRFRDogV2FybmluZyBmb3IgdXNlcnMgb2YgdGhlIG9sZCBVbml4IFNvY2tldHMgVVJMIFNjaGVtZVxuICBpZiAoc2VsZi51cmkucHJvdG9jb2wgPT09ICd1bml4OicpIHtcbiAgICByZXR1cm4gc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignYHVuaXg6Ly9gIFVSTCBzY2hlbWUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHVzZSB0aGUgZm9ybWF0IGBodHRwOi8vdW5peDpTT0NLRVQ6UEFUSGAnKSlcbiAgfVxuXG4gIC8vIFN1cHBvcnQgVW5peCBTb2NrZXRzXG4gIGlmIChzZWxmLnVyaS5ob3N0ID09PSAndW5peCcpIHtcbiAgICBzZWxmLmVuYWJsZVVuaXhTb2NrZXQoKVxuICB9XG5cbiAgaWYgKHNlbGYuc3RyaWN0U1NMID09PSBmYWxzZSkge1xuICAgIHNlbGYucmVqZWN0VW5hdXRob3JpemVkID0gZmFsc2VcbiAgfVxuXG4gIGlmICghc2VsZi51cmkucGF0aG5hbWUpIHtzZWxmLnVyaS5wYXRobmFtZSA9ICcvJ31cblxuICBpZiAoIShzZWxmLnVyaS5ob3N0IHx8IChzZWxmLnVyaS5ob3N0bmFtZSAmJiBzZWxmLnVyaS5wb3J0KSkgJiYgIXNlbGYudXJpLmlzVW5peCkge1xuICAgIC8vIEludmFsaWQgVVJJOiBpdCBtYXkgZ2VuZXJhdGUgbG90IG9mIGJhZCBlcnJvcnMsIGxpa2UgJ1R5cGVFcnJvcjogQ2Fubm90IGNhbGwgbWV0aG9kIGBpbmRleE9mYCBvZiB1bmRlZmluZWQnIGluIENvb2tpZUphclxuICAgIC8vIERldGVjdCBhbmQgcmVqZWN0IGl0IGFzIHNvb24gYXMgcG9zc2libGVcbiAgICB2YXIgZmF1bHR5VXJpID0gdXJsLmZvcm1hdChzZWxmLnVyaSlcbiAgICB2YXIgbWVzc2FnZSA9ICdJbnZhbGlkIFVSSSBcIicgKyBmYXVsdHlVcmkgKyAnXCInXG4gICAgaWYgKE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gTm8gb3B0aW9uID8gVGhpcyBjYW4gYmUgdGhlIHNpZ24gb2YgYSByZWRpcmVjdFxuICAgICAgLy8gQXMgdGhpcyBpcyBhIGNhc2Ugd2hlcmUgdGhlIHVzZXIgY2Fubm90IGRvIGFueXRoaW5nICh0aGV5IGRpZG4ndCBjYWxsIHJlcXVlc3QgZGlyZWN0bHkgd2l0aCB0aGlzIFVSTClcbiAgICAgIC8vIHRoZXkgc2hvdWxkIGJlIHdhcm5lZCB0aGF0IGl0IGNhbiBiZSBjYXVzZWQgYnkgYSByZWRpcmVjdGlvbiAoY2FuIHNhdmUgc29tZSBoYWlyKVxuICAgICAgbWVzc2FnZSArPSAnLiBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSBjcmFwcHkgcmVkaXJlY3Rpb24uJ1xuICAgIH1cbiAgICAvLyBUaGlzIGVycm9yIHdhcyBmYXRhbFxuICAgIHNlbGYuYWJvcnQoKVxuICAgIHJldHVybiBzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKG1lc3NhZ2UpKVxuICB9XG5cbiAgaWYgKCFzZWxmLmhhc093blByb3BlcnR5KCdwcm94eScpKSB7XG4gICAgc2VsZi5wcm94eSA9IGdldFByb3h5RnJvbVVSSShzZWxmLnVyaSlcbiAgfVxuXG4gIHNlbGYudHVubmVsID0gc2VsZi5fdHVubmVsLmlzRW5hYmxlZCgpXG4gIGlmIChzZWxmLnByb3h5KSB7XG4gICAgc2VsZi5fdHVubmVsLnNldHVwKG9wdGlvbnMpXG4gIH1cblxuICBzZWxmLl9yZWRpcmVjdC5vblJlcXVlc3Qob3B0aW9ucylcblxuICBzZWxmLnNldEhvc3QgPSBmYWxzZVxuICBpZiAoIXNlbGYuaGFzSGVhZGVyKCdob3N0JykpIHtcbiAgICB2YXIgaG9zdEhlYWRlck5hbWUgPSBzZWxmLm9yaWdpbmFsSG9zdEhlYWRlck5hbWUgfHwgJ2hvc3QnXG4gICAgLy8gV2hlbiB1c2VkIHdpdGggYW4gSVB2NiBhZGRyZXNzLCBgaG9zdGAgd2lsbCBwcm92aWRlXG4gICAgLy8gdGhlIGNvcnJlY3QgYnJhY2tldGVkIGZvcm1hdCwgdW5saWtlIHVzaW5nIGBob3N0bmFtZWAgYW5kXG4gICAgLy8gb3B0aW9uYWxseSBhZGRpbmcgdGhlIGBwb3J0YCB3aGVuIG5lY2Vzc2FyeS5cbiAgICBzZWxmLnNldEhlYWRlcihob3N0SGVhZGVyTmFtZSwgc2VsZi51cmkuaG9zdClcbiAgICBzZWxmLnNldEhvc3QgPSB0cnVlXG4gIH1cblxuICBzZWxmLmphcihzZWxmLl9qYXIgfHwgb3B0aW9ucy5qYXIpXG5cbiAgaWYgKCFzZWxmLnVyaS5wb3J0KSB7XG4gICAgaWYgKHNlbGYudXJpLnByb3RvY29sID09PSAnaHR0cDonKSB7c2VsZi51cmkucG9ydCA9IDgwfVxuICAgIGVsc2UgaWYgKHNlbGYudXJpLnByb3RvY29sID09PSAnaHR0cHM6Jykge3NlbGYudXJpLnBvcnQgPSA0NDN9XG4gIH1cblxuICBpZiAoc2VsZi5wcm94eSAmJiAhc2VsZi50dW5uZWwpIHtcbiAgICBzZWxmLnBvcnQgPSBzZWxmLnByb3h5LnBvcnRcbiAgICBzZWxmLmhvc3QgPSBzZWxmLnByb3h5Lmhvc3RuYW1lXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5wb3J0ID0gc2VsZi51cmkucG9ydFxuICAgIHNlbGYuaG9zdCA9IHNlbGYudXJpLmhvc3RuYW1lXG4gIH1cblxuICBpZiAob3B0aW9ucy5mb3JtKSB7XG4gICAgc2VsZi5mb3JtKG9wdGlvbnMuZm9ybSlcbiAgfVxuXG4gIGlmIChvcHRpb25zLmZvcm1EYXRhKSB7XG4gICAgdmFyIGZvcm1EYXRhID0gb3B0aW9ucy5mb3JtRGF0YVxuICAgIHZhciByZXF1ZXN0Rm9ybSA9IHNlbGYuZm9ybSgpXG4gICAgdmFyIGFwcGVuZEZvcm1WYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ29wdGlvbnMnKSkge1xuICAgICAgICByZXF1ZXN0Rm9ybS5hcHBlbmQoa2V5LCB2YWx1ZS52YWx1ZSwgdmFsdWUub3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RGb3JtLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBmb3JtS2V5IGluIGZvcm1EYXRhKSB7XG4gICAgICBpZiAoZm9ybURhdGEuaGFzT3duUHJvcGVydHkoZm9ybUtleSkpIHtcbiAgICAgICAgdmFyIGZvcm1WYWx1ZSA9IGZvcm1EYXRhW2Zvcm1LZXldXG4gICAgICAgIGlmIChmb3JtVmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZm9ybVZhbHVlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBhcHBlbmRGb3JtVmFsdWUoZm9ybUtleSwgZm9ybVZhbHVlW2pdKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBlbmRGb3JtVmFsdWUoZm9ybUtleSwgZm9ybVZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMucXMpIHtcbiAgICBzZWxmLnFzKG9wdGlvbnMucXMpXG4gIH1cblxuICBpZiAoc2VsZi51cmkucGF0aCkge1xuICAgIHNlbGYucGF0aCA9IHNlbGYudXJpLnBhdGhcbiAgfSBlbHNlIHtcbiAgICBzZWxmLnBhdGggPSBzZWxmLnVyaS5wYXRobmFtZSArIChzZWxmLnVyaS5zZWFyY2ggfHwgJycpXG4gIH1cblxuICBpZiAoc2VsZi5wYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHNlbGYucGF0aCA9ICcvJ1xuICB9XG5cbiAgLy8gQXV0aCBtdXN0IGhhcHBlbiBsYXN0IGluIGNhc2Ugc2lnbmluZyBpcyBkZXBlbmRlbnQgb24gb3RoZXIgaGVhZGVyc1xuICBpZiAob3B0aW9ucy5hd3MpIHtcbiAgICBzZWxmLmF3cyhvcHRpb25zLmF3cylcbiAgfVxuXG4gIGlmIChvcHRpb25zLmhhd2spIHtcbiAgICBzZWxmLmhhd2sob3B0aW9ucy5oYXdrKVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuaHR0cFNpZ25hdHVyZSkge1xuICAgIHNlbGYuaHR0cFNpZ25hdHVyZShvcHRpb25zLmh0dHBTaWduYXR1cmUpXG4gIH1cblxuICBpZiAob3B0aW9ucy5hdXRoKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLmF1dGgsICd1c2VybmFtZScpKSB7XG4gICAgICBvcHRpb25zLmF1dGgudXNlciA9IG9wdGlvbnMuYXV0aC51c2VybmFtZVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMuYXV0aCwgJ3Bhc3N3b3JkJykpIHtcbiAgICAgIG9wdGlvbnMuYXV0aC5wYXNzID0gb3B0aW9ucy5hdXRoLnBhc3N3b3JkXG4gICAgfVxuXG4gICAgc2VsZi5hdXRoKFxuICAgICAgb3B0aW9ucy5hdXRoLnVzZXIsXG4gICAgICBvcHRpb25zLmF1dGgucGFzcyxcbiAgICAgIG9wdGlvbnMuYXV0aC5zZW5kSW1tZWRpYXRlbHksXG4gICAgICBvcHRpb25zLmF1dGguYmVhcmVyXG4gICAgKVxuICB9XG5cbiAgaWYgKHNlbGYuZ3ppcCAmJiAhc2VsZi5oYXNIZWFkZXIoJ2FjY2VwdC1lbmNvZGluZycpKSB7XG4gICAgc2VsZi5zZXRIZWFkZXIoJ2FjY2VwdC1lbmNvZGluZycsICdnemlwLCBkZWZsYXRlJylcbiAgfVxuXG4gIGlmIChzZWxmLnVyaS5hdXRoICYmICFzZWxmLmhhc0hlYWRlcignYXV0aG9yaXphdGlvbicpKSB7XG4gICAgdmFyIHVyaUF1dGhQaWVjZXMgPSBzZWxmLnVyaS5hdXRoLnNwbGl0KCc6JykubWFwKGZ1bmN0aW9uKGl0ZW0pIHtyZXR1cm4gc2VsZi5fcXMudW5lc2NhcGUoaXRlbSl9KVxuICAgIHNlbGYuYXV0aCh1cmlBdXRoUGllY2VzWzBdLCB1cmlBdXRoUGllY2VzLnNsaWNlKDEpLmpvaW4oJzonKSwgdHJ1ZSlcbiAgfVxuXG4gIGlmICghc2VsZi50dW5uZWwgJiYgc2VsZi5wcm94eSAmJiBzZWxmLnByb3h5LmF1dGggJiYgIXNlbGYuaGFzSGVhZGVyKCdwcm94eS1hdXRob3JpemF0aW9uJykpIHtcbiAgICB2YXIgcHJveHlBdXRoUGllY2VzID0gc2VsZi5wcm94eS5hdXRoLnNwbGl0KCc6JykubWFwKGZ1bmN0aW9uKGl0ZW0pIHtyZXR1cm4gc2VsZi5fcXMudW5lc2NhcGUoaXRlbSl9KVxuICAgIHZhciBhdXRoSGVhZGVyID0gJ0Jhc2ljICcgKyB0b0Jhc2U2NChwcm94eUF1dGhQaWVjZXMuam9pbignOicpKVxuICAgIHNlbGYuc2V0SGVhZGVyKCdwcm94eS1hdXRob3JpemF0aW9uJywgYXV0aEhlYWRlcilcbiAgfVxuXG4gIGlmIChzZWxmLnByb3h5ICYmICFzZWxmLnR1bm5lbCkge1xuICAgIHNlbGYucGF0aCA9IChzZWxmLnVyaS5wcm90b2NvbCArICcvLycgKyBzZWxmLnVyaS5ob3N0ICsgc2VsZi5wYXRoKVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgIHNlbGYuanNvbihvcHRpb25zLmpzb24pXG4gIH1cbiAgaWYgKG9wdGlvbnMubXVsdGlwYXJ0KSB7XG4gICAgc2VsZi5tdWx0aXBhcnQob3B0aW9ucy5tdWx0aXBhcnQpXG4gIH1cblxuICBpZiAob3B0aW9ucy50aW1lKSB7XG4gICAgc2VsZi50aW1pbmcgPSB0cnVlXG5cbiAgICAvLyBOT1RFOiBlbGFwc2VkVGltZSBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIC50aW1pbmdzXG4gICAgc2VsZi5lbGFwc2VkVGltZSA9IHNlbGYuZWxhcHNlZFRpbWUgfHwgMFxuICB9XG5cbiAgZnVuY3Rpb24gc2V0Q29udGVudExlbmd0aCAoKSB7XG4gICAgaWYgKGlzVHlwZWRBcnJheShzZWxmLmJvZHkpKSB7XG4gICAgICBzZWxmLmJvZHkgPSBCdWZmZXIuZnJvbShzZWxmLmJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCFzZWxmLmhhc0hlYWRlcignY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgdmFyIGxlbmd0aFxuICAgICAgaWYgKHR5cGVvZiBzZWxmLmJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHNlbGYuYm9keSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc2VsZi5ib2R5KSkge1xuICAgICAgICBsZW5ndGggPSBzZWxmLmJvZHkucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7cmV0dXJuIGEgKyBiLmxlbmd0aH0sIDApXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbGVuZ3RoID0gc2VsZi5ib2R5Lmxlbmd0aFxuICAgICAgfVxuXG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIHNlbGYuc2V0SGVhZGVyKCdjb250ZW50LWxlbmd0aCcsIGxlbmd0aClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ0FyZ3VtZW50IGVycm9yLCBvcHRpb25zLmJvZHkuJykpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzZWxmLmJvZHkgJiYgIWlzc3RyZWFtKHNlbGYuYm9keSkpIHtcbiAgICBzZXRDb250ZW50TGVuZ3RoKClcbiAgfVxuXG4gIGlmIChvcHRpb25zLm9hdXRoKSB7XG4gICAgc2VsZi5vYXV0aChvcHRpb25zLm9hdXRoKVxuICB9IGVsc2UgaWYgKHNlbGYuX29hdXRoLnBhcmFtcyAmJiBzZWxmLmhhc0hlYWRlcignYXV0aG9yaXphdGlvbicpKSB7XG4gICAgc2VsZi5vYXV0aChzZWxmLl9vYXV0aC5wYXJhbXMpXG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSBzZWxmLnByb3h5ICYmICFzZWxmLnR1bm5lbCA/IHNlbGYucHJveHkucHJvdG9jb2wgOiBzZWxmLnVyaS5wcm90b2NvbFxuICAgICwgZGVmYXVsdE1vZHVsZXMgPSB7J2h0dHA6JzpodHRwLCAnaHR0cHM6JzpodHRwc31cbiAgICAsIGh0dHBNb2R1bGVzID0gc2VsZi5odHRwTW9kdWxlcyB8fCB7fVxuXG4gIHNlbGYuaHR0cE1vZHVsZSA9IGh0dHBNb2R1bGVzW3Byb3RvY29sXSB8fCBkZWZhdWx0TW9kdWxlc1twcm90b2NvbF1cblxuICBpZiAoIXNlbGYuaHR0cE1vZHVsZSkge1xuICAgIHJldHVybiBzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdJbnZhbGlkIHByb3RvY29sOiAnICsgcHJvdG9jb2wpKVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuY2EpIHtcbiAgICBzZWxmLmNhID0gb3B0aW9ucy5jYVxuICB9XG5cbiAgaWYgKCFzZWxmLmFnZW50KSB7XG4gICAgaWYgKG9wdGlvbnMuYWdlbnRPcHRpb25zKSB7XG4gICAgICBzZWxmLmFnZW50T3B0aW9ucyA9IG9wdGlvbnMuYWdlbnRPcHRpb25zXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYWdlbnRDbGFzcykge1xuICAgICAgc2VsZi5hZ2VudENsYXNzID0gb3B0aW9ucy5hZ2VudENsYXNzXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmZvcmV2ZXIpIHtcbiAgICAgIHZhciB2ID0gdmVyc2lvbigpXG4gICAgICAvLyB1c2UgRm9yZXZlckFnZW50IGluIG5vZGUgMC4xMC0gb25seVxuICAgICAgaWYgKHYubWFqb3IgPT09IDAgJiYgdi5taW5vciA8PSAxMCkge1xuICAgICAgICBzZWxmLmFnZW50Q2xhc3MgPSBwcm90b2NvbCA9PT0gJ2h0dHA6JyA/IEZvcmV2ZXJBZ2VudCA6IEZvcmV2ZXJBZ2VudC5TU0xcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuYWdlbnRDbGFzcyA9IHNlbGYuaHR0cE1vZHVsZS5BZ2VudFxuICAgICAgICBzZWxmLmFnZW50T3B0aW9ucyA9IHNlbGYuYWdlbnRPcHRpb25zIHx8IHt9XG4gICAgICAgIHNlbGYuYWdlbnRPcHRpb25zLmtlZXBBbGl2ZSA9IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5hZ2VudENsYXNzID0gc2VsZi5odHRwTW9kdWxlLkFnZW50XG4gICAgfVxuICB9XG5cbiAgaWYgKHNlbGYucG9vbCA9PT0gZmFsc2UpIHtcbiAgICBzZWxmLmFnZW50ID0gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICBzZWxmLmFnZW50ID0gc2VsZi5hZ2VudCB8fCBzZWxmLmdldE5ld0FnZW50KClcbiAgfVxuXG4gIHNlbGYub24oJ3BpcGUnLCBmdW5jdGlvbiAoc3JjKSB7XG4gICAgaWYgKHNlbGYubnRpY2sgJiYgc2VsZi5fc3RhcnRlZCkge1xuICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignWW91IGNhbm5vdCBwaXBlIHRvIHRoaXMgc3RyZWFtIGFmdGVyIHRoZSBvdXRib3VuZCByZXF1ZXN0IGhhcyBzdGFydGVkLicpKVxuICAgIH1cbiAgICBzZWxmLnNyYyA9IHNyY1xuICAgIGlmIChpc1JlYWRTdHJlYW0oc3JjKSkge1xuICAgICAgaWYgKCFzZWxmLmhhc0hlYWRlcignY29udGVudC10eXBlJykpIHtcbiAgICAgICAgc2VsZi5zZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScsIG1pbWUubG9va3VwKHNyYy5wYXRoKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNyYy5oZWFkZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gc3JjLmhlYWRlcnMpIHtcbiAgICAgICAgICBpZiAoIXNlbGYuaGFzSGVhZGVyKGkpKSB7XG4gICAgICAgICAgICBzZWxmLnNldEhlYWRlcihpLCBzcmMuaGVhZGVyc1tpXSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzZWxmLl9qc29uICYmICFzZWxmLmhhc0hlYWRlcignY29udGVudC10eXBlJykpIHtcbiAgICAgICAgc2VsZi5zZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi9qc29uJylcbiAgICAgIH1cbiAgICAgIGlmIChzcmMubWV0aG9kICYmICFzZWxmLmV4cGxpY2l0TWV0aG9kKSB7XG4gICAgICAgIHNlbGYubWV0aG9kID0gc3JjLm1ldGhvZFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNlbGYub24oJ3BpcGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gICBjb25zb2xlLmVycm9yKCdZb3UgaGF2ZSBhbHJlYWR5IHBpcGVkIHRvIHRoaXMgc3RyZWFtLiBQaXBlaW5nIHR3aWNlIGlzIGxpa2VseSB0byBicmVhayB0aGUgcmVxdWVzdC4nKVxuICAgIC8vIH0pXG4gIH0pXG5cbiAgZGVmZXIoZnVuY3Rpb24gKCkge1xuICAgIGlmIChzZWxmLl9hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHNlbGYuX2Zvcm0pIHtcbiAgICAgICAgaWYgKCFzZWxmLl9hdXRoLmhhc0F1dGgpIHtcbiAgICAgICAgICBzZWxmLl9mb3JtLnBpcGUoc2VsZilcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWxmLl9hdXRoLmhhc0F1dGggJiYgc2VsZi5fYXV0aC5zZW50QXV0aCkge1xuICAgICAgICAgIHNlbGYuX2Zvcm0ucGlwZShzZWxmKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc2VsZi5fbXVsdGlwYXJ0ICYmIHNlbGYuX211bHRpcGFydC5jaHVua2VkKSB7XG4gICAgICAgIHNlbGYuX211bHRpcGFydC5ib2R5LnBpcGUoc2VsZilcbiAgICAgIH1cbiAgICAgIGlmIChzZWxmLmJvZHkpIHtcbiAgICAgICAgaWYgKGlzc3RyZWFtKHNlbGYuYm9keSkpIHtcbiAgICAgICAgICBzZWxmLmJvZHkucGlwZShzZWxmKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldENvbnRlbnRMZW5ndGgoKVxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGYuYm9keSkpIHtcbiAgICAgICAgICAgIHNlbGYuYm9keS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgICAgICAgICAgIHNlbGYud3JpdGUocGFydClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYud3JpdGUoc2VsZi5ib2R5KVxuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLmVuZCgpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2VsZi5yZXF1ZXN0Qm9keVN0cmVhbSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ29wdGlvbnMucmVxdWVzdEJvZHlTdHJlYW0gaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHBhc3MgdGhlIHJlcXVlc3Qgb2JqZWN0IHRvIHN0cmVhbS5waXBlLicpXG4gICAgICAgIHNlbGYucmVxdWVzdEJvZHlTdHJlYW0ucGlwZShzZWxmKVxuICAgICAgfSBlbHNlIGlmICghc2VsZi5zcmMpIHtcbiAgICAgICAgaWYgKHNlbGYuX2F1dGguaGFzQXV0aCAmJiAhc2VsZi5fYXV0aC5zZW50QXV0aCkge1xuICAgICAgICAgIHNlbGYuZW5kKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5tZXRob2QgIT09ICdHRVQnICYmIHR5cGVvZiBzZWxmLm1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBzZWxmLnNldEhlYWRlcignY29udGVudC1sZW5ndGgnLCAwKVxuICAgICAgICB9XG4gICAgICAgIHNlbGYuZW5kKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VsZi5fZm9ybSAmJiAhc2VsZi5oYXNIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJykpIHtcbiAgICAgIC8vIEJlZm9yZSBlbmRpbmcgdGhlIHJlcXVlc3QsIHdlIGhhZCB0byBjb21wdXRlIHRoZSBsZW5ndGggb2YgdGhlIHdob2xlIGZvcm0sIGFzeW5jbHlcbiAgICAgIHNlbGYuc2V0SGVhZGVyKHNlbGYuX2Zvcm0uZ2V0SGVhZGVycygpLCB0cnVlKVxuICAgICAgc2VsZi5fZm9ybS5nZXRMZW5ndGgoZnVuY3Rpb24gKGVyciwgbGVuZ3RoKSB7XG4gICAgICAgIGlmICghZXJyICYmICFpc05hTihsZW5ndGgpKSB7XG4gICAgICAgICAgc2VsZi5zZXRIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgbGVuZ3RoKVxuICAgICAgICB9XG4gICAgICAgIGVuZCgpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBlbmQoKVxuICAgIH1cblxuICAgIHNlbGYubnRpY2sgPSB0cnVlXG4gIH0pXG5cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuZ2V0TmV3QWdlbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICB2YXIgQWdlbnQgPSBzZWxmLmFnZW50Q2xhc3NcbiAgdmFyIG9wdGlvbnMgPSB7fVxuICBpZiAoc2VsZi5hZ2VudE9wdGlvbnMpIHtcbiAgICBmb3IgKHZhciBpIGluIHNlbGYuYWdlbnRPcHRpb25zKSB7XG4gICAgICBvcHRpb25zW2ldID0gc2VsZi5hZ2VudE9wdGlvbnNbaV1cbiAgICB9XG4gIH1cbiAgaWYgKHNlbGYuY2EpIHtcbiAgICBvcHRpb25zLmNhID0gc2VsZi5jYVxuICB9XG4gIGlmIChzZWxmLmNpcGhlcnMpIHtcbiAgICBvcHRpb25zLmNpcGhlcnMgPSBzZWxmLmNpcGhlcnNcbiAgfVxuICBpZiAoc2VsZi5zZWN1cmVQcm90b2NvbCkge1xuICAgIG9wdGlvbnMuc2VjdXJlUHJvdG9jb2wgPSBzZWxmLnNlY3VyZVByb3RvY29sXG4gIH1cbiAgaWYgKHNlbGYuc2VjdXJlT3B0aW9ucykge1xuICAgIG9wdGlvbnMuc2VjdXJlT3B0aW9ucyA9IHNlbGYuc2VjdXJlT3B0aW9uc1xuICB9XG4gIGlmICh0eXBlb2Ygc2VsZi5yZWplY3RVbmF1dGhvcml6ZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWQgPSBzZWxmLnJlamVjdFVuYXV0aG9yaXplZFxuICB9XG5cbiAgaWYgKHNlbGYuY2VydCAmJiBzZWxmLmtleSkge1xuICAgIG9wdGlvbnMua2V5ID0gc2VsZi5rZXlcbiAgICBvcHRpb25zLmNlcnQgPSBzZWxmLmNlcnRcbiAgfVxuXG4gIGlmIChzZWxmLnBmeCkge1xuICAgIG9wdGlvbnMucGZ4ID0gc2VsZi5wZnhcbiAgfVxuXG4gIGlmIChzZWxmLnBhc3NwaHJhc2UpIHtcbiAgICBvcHRpb25zLnBhc3NwaHJhc2UgPSBzZWxmLnBhc3NwaHJhc2VcbiAgfVxuXG4gIHZhciBwb29sS2V5ID0gJydcblxuICAvLyBkaWZmZXJlbnQgdHlwZXMgb2YgYWdlbnRzIGFyZSBpbiBkaWZmZXJlbnQgcG9vbHNcbiAgaWYgKEFnZW50ICE9PSBzZWxmLmh0dHBNb2R1bGUuQWdlbnQpIHtcbiAgICBwb29sS2V5ICs9IEFnZW50Lm5hbWVcbiAgfVxuXG4gIC8vIGNhIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IGlmIHByb3h5IG9yIGRlc3RpbmF0aW9uIGFyZSBodHRwc1xuICB2YXIgcHJveHkgPSBzZWxmLnByb3h5XG4gIGlmICh0eXBlb2YgcHJveHkgPT09ICdzdHJpbmcnKSB7XG4gICAgcHJveHkgPSB1cmwucGFyc2UocHJveHkpXG4gIH1cbiAgdmFyIGlzSHR0cHMgPSAocHJveHkgJiYgcHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB8fCB0aGlzLnVyaS5wcm90b2NvbCA9PT0gJ2h0dHBzOidcblxuICBpZiAoaXNIdHRwcykge1xuICAgIGlmIChvcHRpb25zLmNhKSB7XG4gICAgICBpZiAocG9vbEtleSkge1xuICAgICAgICBwb29sS2V5ICs9ICc6J1xuICAgICAgfVxuICAgICAgcG9vbEtleSArPSBvcHRpb25zLmNhXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChwb29sS2V5KSB7XG4gICAgICAgIHBvb2xLZXkgKz0gJzonXG4gICAgICB9XG4gICAgICBwb29sS2V5ICs9IG9wdGlvbnMucmVqZWN0VW5hdXRob3JpemVkXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY2VydCkge1xuICAgICAgaWYgKHBvb2xLZXkpIHtcbiAgICAgICAgcG9vbEtleSArPSAnOidcbiAgICAgIH1cbiAgICAgIHBvb2xLZXkgKz0gb3B0aW9ucy5jZXJ0LnRvU3RyaW5nKCdhc2NpaScpICsgb3B0aW9ucy5rZXkudG9TdHJpbmcoJ2FzY2lpJylcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wZngpIHtcbiAgICAgIGlmIChwb29sS2V5KSB7XG4gICAgICAgIHBvb2xLZXkgKz0gJzonXG4gICAgICB9XG4gICAgICBwb29sS2V5ICs9IG9wdGlvbnMucGZ4LnRvU3RyaW5nKCdhc2NpaScpXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY2lwaGVycykge1xuICAgICAgaWYgKHBvb2xLZXkpIHtcbiAgICAgICAgcG9vbEtleSArPSAnOidcbiAgICAgIH1cbiAgICAgIHBvb2xLZXkgKz0gb3B0aW9ucy5jaXBoZXJzXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2VjdXJlUHJvdG9jb2wpIHtcbiAgICAgIGlmIChwb29sS2V5KSB7XG4gICAgICAgIHBvb2xLZXkgKz0gJzonXG4gICAgICB9XG4gICAgICBwb29sS2V5ICs9IG9wdGlvbnMuc2VjdXJlUHJvdG9jb2xcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zZWN1cmVPcHRpb25zKSB7XG4gICAgICBpZiAocG9vbEtleSkge1xuICAgICAgICBwb29sS2V5ICs9ICc6J1xuICAgICAgfVxuICAgICAgcG9vbEtleSArPSBvcHRpb25zLnNlY3VyZU9wdGlvbnNcbiAgICB9XG4gIH1cblxuICBpZiAoc2VsZi5wb29sID09PSBnbG9iYWxQb29sICYmICFwb29sS2V5ICYmIE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA9PT0gMCAmJiBzZWxmLmh0dHBNb2R1bGUuZ2xvYmFsQWdlbnQpIHtcbiAgICAvLyBub3QgZG9pbmcgYW55dGhpbmcgc3BlY2lhbC4gIFVzZSB0aGUgZ2xvYmFsQWdlbnRcbiAgICByZXR1cm4gc2VsZi5odHRwTW9kdWxlLmdsb2JhbEFnZW50XG4gIH1cblxuICAvLyB3ZSdyZSB1c2luZyBhIHN0b3JlZCBhZ2VudC4gIE1ha2Ugc3VyZSBpdCdzIHByb3RvY29sLXNwZWNpZmljXG4gIHBvb2xLZXkgPSBzZWxmLnVyaS5wcm90b2NvbCArIHBvb2xLZXlcblxuICAvLyBnZW5lcmF0ZSBhIG5ldyBhZ2VudCBmb3IgdGhpcyBzZXR0aW5nIGlmIG5vbmUgeWV0IGV4aXN0c1xuICBpZiAoIXNlbGYucG9vbFtwb29sS2V5XSkge1xuICAgIHNlbGYucG9vbFtwb29sS2V5XSA9IG5ldyBBZ2VudChvcHRpb25zKVxuICAgIC8vIHByb3Blcmx5IHNldCBtYXhTb2NrZXRzIG9uIG5ldyBhZ2VudHNcbiAgICBpZiAoc2VsZi5wb29sLm1heFNvY2tldHMpIHtcbiAgICAgIHNlbGYucG9vbFtwb29sS2V5XS5tYXhTb2NrZXRzID0gc2VsZi5wb29sLm1heFNvY2tldHNcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2VsZi5wb29sW3Bvb2xLZXldXG59XG5cblJlcXVlc3QucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBzdGFydCgpIGlzIGNhbGxlZCBvbmNlIHdlIGFyZSByZWFkeSB0byBzZW5kIHRoZSBvdXRnb2luZyBIVFRQIHJlcXVlc3QuXG4gIC8vIHRoaXMgaXMgdXN1YWxseSBjYWxsZWQgb24gdGhlIGZpcnN0IHdyaXRlKCksIGVuZCgpIG9yIG9uIG5leHRUaWNrKClcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgaWYgKHNlbGYudGltaW5nKSB7XG4gICAgLy8gQWxsIHRpbWluZ3Mgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzIHJlcXVlc3QncyBzdGFydFRpbWUuICBJbiBvcmRlciB0byBkbyB0aGlzLFxuICAgIC8vIHdlIG5lZWQgdG8gY2FwdHVyZSB0aGUgd2FsbC1jbG9jayBzdGFydCB0aW1lICh2aWEgRGF0ZSksIGltbWVkaWF0ZWx5IGZvbGxvd2VkXG4gICAgLy8gYnkgdGhlIGhpZ2gtcmVzb2x1dGlvbiB0aW1lciAodmlhIG5vdygpKS4gIFdoaWxlIHRoZXNlIHR3byB3b24ndCBiZSBzZXRcbiAgICAvLyBhdCB0aGUgX2V4YWN0XyBzYW1lIHRpbWUsIHRoZXkgc2hvdWxkIGJlIGNsb3NlIGVub3VnaCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZVxuICAgIC8vIGhpZ2gtcmVzb2x1dGlvbiwgbW9ub3RvbmljYWxseSBub24tZGVjcmVhc2luZyB0aW1lc3RhbXBzIHJlbGF0aXZlIHRvIHN0YXJ0VGltZS5cbiAgICB2YXIgc3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICB2YXIgc3RhcnRUaW1lTm93ID0gbm93KClcbiAgfVxuXG4gIGlmIChzZWxmLl9hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBzZWxmLl9zdGFydGVkID0gdHJ1ZVxuICBzZWxmLm1ldGhvZCA9IHNlbGYubWV0aG9kIHx8ICdHRVQnXG4gIHNlbGYuaHJlZiA9IHNlbGYudXJpLmhyZWZcblxuICBpZiAoc2VsZi5zcmMgJiYgc2VsZi5zcmMuc3RhdCAmJiBzZWxmLnNyYy5zdGF0LnNpemUgJiYgIXNlbGYuaGFzSGVhZGVyKCdjb250ZW50LWxlbmd0aCcpKSB7XG4gICAgc2VsZi5zZXRIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgc2VsZi5zcmMuc3RhdC5zaXplKVxuICB9XG4gIGlmIChzZWxmLl9hd3MpIHtcbiAgICBzZWxmLmF3cyhzZWxmLl9hd3MsIHRydWUpXG4gIH1cblxuICAvLyBXZSBoYXZlIGEgbWV0aG9kIG5hbWVkIGF1dGgsIHdoaWNoIGlzIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZyb20gdGhlIGh0dHAucmVxdWVzdFxuICAvLyBhdXRoIG9wdGlvbi4gIElmIHdlIGRvbid0IHJlbW92ZSBpdCwgd2UncmUgZ29ubmEgaGF2ZSBhIGJhZCB0aW1lLlxuICB2YXIgcmVxT3B0aW9ucyA9IGNvcHkoc2VsZilcbiAgZGVsZXRlIHJlcU9wdGlvbnMuYXV0aFxuXG4gIGRlYnVnKCdtYWtlIHJlcXVlc3QnLCBzZWxmLnVyaS5ocmVmKVxuXG4gIC8vIG5vZGUgdjYuOC4wIG5vdyBzdXBwb3J0cyBhIGB0aW1lb3V0YCB2YWx1ZSBpbiBgaHR0cC5yZXF1ZXN0KClgLCBidXQgd2VcbiAgLy8gc2hvdWxkIGRlbGV0ZSBpdCBmb3Igbm93IHNpbmNlIHdlIGhhbmRsZSB0aW1lb3V0cyBtYW51YWxseSBmb3IgYmV0dGVyXG4gIC8vIGNvbnNpc3RlbmN5IHdpdGggbm9kZSB2ZXJzaW9ucyBiZWZvcmUgdjYuOC4wXG4gIGRlbGV0ZSByZXFPcHRpb25zLnRpbWVvdXRcblxuICB0cnkge1xuICAgIHNlbGYucmVxID0gc2VsZi5odHRwTW9kdWxlLnJlcXVlc3QocmVxT3B0aW9ucylcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycilcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChzZWxmLnRpbWluZykge1xuICAgIHNlbGYuc3RhcnRUaW1lID0gc3RhcnRUaW1lXG4gICAgc2VsZi5zdGFydFRpbWVOb3cgPSBzdGFydFRpbWVOb3dcblxuICAgIC8vIFRpbWluZyB2YWx1ZXMgd2lsbCBhbGwgYmUgcmVsYXRpdmUgdG8gc3RhcnRUaW1lIChieSBjb21wYXJpbmcgdG8gc3RhcnRUaW1lTm93XG4gICAgLy8gc28gd2UgaGF2ZSBhbiBhY2N1cmF0ZSBjbG9jaylcbiAgICBzZWxmLnRpbWluZ3MgPSB7fVxuICB9XG5cbiAgdmFyIHRpbWVvdXRcbiAgaWYgKHNlbGYudGltZW91dCAmJiAhc2VsZi50aW1lb3V0VGltZXIpIHtcbiAgICBpZiAoc2VsZi50aW1lb3V0IDwgMCkge1xuICAgICAgdGltZW91dCA9IDBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmLnRpbWVvdXQgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNlbGYudGltZW91dCkpIHtcbiAgICAgIHRpbWVvdXQgPSBzZWxmLnRpbWVvdXRcbiAgICB9XG4gIH1cblxuICBzZWxmLnJlcS5vbigncmVzcG9uc2UnLCBzZWxmLm9uUmVxdWVzdFJlc3BvbnNlLmJpbmQoc2VsZikpXG4gIHNlbGYucmVxLm9uKCdlcnJvcicsIHNlbGYub25SZXF1ZXN0RXJyb3IuYmluZChzZWxmKSlcbiAgc2VsZi5yZXEub24oJ2RyYWluJywgZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5lbWl0KCdkcmFpbicpXG4gIH0pXG4gIHNlbGYucmVxLm9uKCdzb2NrZXQnLCBmdW5jdGlvbihzb2NrZXQpIHtcbiAgICAvLyBgLl9jb25uZWN0aW5nYCB3YXMgdGhlIG9sZCBwcm9wZXJ0eSB3aGljaCB3YXMgbWFkZSBwdWJsaWMgaW4gbm9kZSB2Ni4xLjBcbiAgICB2YXIgaXNDb25uZWN0aW5nID0gc29ja2V0Ll9jb25uZWN0aW5nIHx8IHNvY2tldC5jb25uZWN0aW5nXG4gICAgaWYgKHNlbGYudGltaW5nKSB7XG4gICAgICBzZWxmLnRpbWluZ3Muc29ja2V0ID0gbm93KCkgLSBzZWxmLnN0YXJ0VGltZU5vd1xuXG4gICAgICBpZiAoaXNDb25uZWN0aW5nKSB7XG4gICAgICAgIHZhciBvbkxvb2t1cFRpbWluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHNlbGYudGltaW5ncy5sb29rdXAgPSBub3coKSAtIHNlbGYuc3RhcnRUaW1lTm93XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb25Db25uZWN0VGltaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgc2VsZi50aW1pbmdzLmNvbm5lY3QgPSBub3coKSAtIHNlbGYuc3RhcnRUaW1lTm93XG4gICAgICAgIH1cblxuICAgICAgICBzb2NrZXQub25jZSgnbG9va3VwJywgb25Mb29rdXBUaW1pbmcpXG4gICAgICAgIHNvY2tldC5vbmNlKCdjb25uZWN0Jywgb25Db25uZWN0VGltaW5nKVxuXG4gICAgICAgIC8vIGNsZWFuIHVwIHRpbWluZyBldmVudCBsaXN0ZW5lcnMgaWYgbmVlZGVkIG9uIGVycm9yXG4gICAgICAgIHNlbGYucmVxLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdsb29rdXAnLCBvbkxvb2t1cFRpbWluZylcbiAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Nvbm5lY3QnLCBvbkNvbm5lY3RUaW1pbmcpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNldFJlcVRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIC8vIFRoaXMgdGltZW91dCBzZXRzIHRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0ICpiZXR3ZWVuKiBieXRlcyBzZW50XG4gICAgICAvLyBmcm9tIHRoZSBzZXJ2ZXIgb25jZSBjb25uZWN0ZWQuXG4gICAgICAvL1xuICAgICAgLy8gSW4gcGFydGljdWxhciwgaXQncyB1c2VmdWwgZm9yIGVycm9yaW5nIGlmIHRoZSBzZXJ2ZXIgZmFpbHMgdG8gc2VuZFxuICAgICAgLy8gZGF0YSBoYWxmd2F5IHRocm91Z2ggc3RyZWFtaW5nIGEgcmVzcG9uc2UuXG4gICAgICBzZWxmLnJlcS5zZXRUaW1lb3V0KHRpbWVvdXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlbGYucmVxKSB7XG4gICAgICAgICAgc2VsZi5hYm9ydCgpXG4gICAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoJ0VTT0NLRVRUSU1FRE9VVCcpXG4gICAgICAgICAgZS5jb2RlID0gJ0VTT0NLRVRUSU1FRE9VVCdcbiAgICAgICAgICBlLmNvbm5lY3QgPSBmYWxzZVxuICAgICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAodGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBPbmx5IHN0YXJ0IHRoZSBjb25uZWN0aW9uIHRpbWVyIGlmIHdlJ3JlIGFjdHVhbGx5IGNvbm5lY3RpbmcgYSBuZXdcbiAgICAgIC8vIHNvY2tldCwgb3RoZXJ3aXNlIGlmIHdlJ3JlIGFscmVhZHkgY29ubmVjdGVkIChiZWNhdXNlIHRoaXMgaXMgYVxuICAgICAgLy8ga2VlcC1hbGl2ZSBjb25uZWN0aW9uKSBkbyBub3QgYm90aGVyLiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSB3ZSB3b24ndFxuICAgICAgLy8gZ2V0IGEgJ2Nvbm5lY3QnIGV2ZW50IGZvciBhbiBhbHJlYWR5IGNvbm5lY3RlZCBzb2NrZXQuXG4gICAgICBpZiAoaXNDb25uZWN0aW5nKSB7XG4gICAgICAgIHZhciBvblJlcVNvY2tDb25uZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjb25uZWN0Jywgb25SZXFTb2NrQ29ubmVjdClcbiAgICAgICAgICBjbGVhclRpbWVvdXQoc2VsZi50aW1lb3V0VGltZXIpXG4gICAgICAgICAgc2VsZi50aW1lb3V0VGltZXIgPSBudWxsXG4gICAgICAgICAgc2V0UmVxVGltZW91dCgpXG4gICAgICAgIH1cblxuICAgICAgICBzb2NrZXQub24oJ2Nvbm5lY3QnLCBvblJlcVNvY2tDb25uZWN0KVxuXG4gICAgICAgIHNlbGYucmVxLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY29ubmVjdCcsIG9uUmVxU29ja0Nvbm5lY3QpXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU2V0IGEgdGltZW91dCBpbiBtZW1vcnkgLSB0aGlzIGJsb2NrIHdpbGwgdGhyb3cgaWYgdGhlIHNlcnZlciB0YWtlcyBtb3JlXG4gICAgICAgIC8vIHRoYW4gYHRpbWVvdXRgIHRvIHdyaXRlIHRoZSBIVFRQIHN0YXR1cyBhbmQgaGVhZGVycyAoY29ycmVzcG9uZGluZyB0b1xuICAgICAgICAvLyB0aGUgb24oJ3Jlc3BvbnNlJykgZXZlbnQgb24gdGhlIGNsaWVudCkuIE5COiB0aGlzIG1lYXN1cmVzIHdhbGwtY2xvY2tcbiAgICAgICAgLy8gdGltZSwgbm90IHRoZSB0aW1lIGJldHdlZW4gYnl0ZXMgc2VudCBieSB0aGUgc2VydmVyLlxuICAgICAgICBzZWxmLnRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY29ubmVjdCcsIG9uUmVxU29ja0Nvbm5lY3QpXG4gICAgICAgICAgc2VsZi5hYm9ydCgpXG4gICAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoJ0VUSU1FRE9VVCcpXG4gICAgICAgICAgZS5jb2RlID0gJ0VUSU1FRE9VVCdcbiAgICAgICAgICBlLmNvbm5lY3QgPSB0cnVlXG4gICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGUpXG4gICAgICAgIH0sIHRpbWVvdXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IGNvbm5lY3RlZFxuICAgICAgICBzZXRSZXFUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9XG4gICAgc2VsZi5lbWl0KCdzb2NrZXQnLCBzb2NrZXQpXG4gIH0pXG5cbiAgc2VsZi5lbWl0KCdyZXF1ZXN0Jywgc2VsZi5yZXEpXG59XG5cblJlcXVlc3QucHJvdG90eXBlLm9uUmVxdWVzdEVycm9yID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoc2VsZi5fYWJvcnRlZCkge1xuICAgIHJldHVyblxuICB9XG4gIGlmIChzZWxmLnJlcSAmJiBzZWxmLnJlcS5fcmV1c2VkU29ja2V0ICYmIGVycm9yLmNvZGUgPT09ICdFQ09OTlJFU0VUJ1xuICAgICAgJiYgc2VsZi5hZ2VudC5hZGRSZXF1ZXN0Tm9yZXVzZSkge1xuICAgIHNlbGYuYWdlbnQgPSB7IGFkZFJlcXVlc3Q6IHNlbGYuYWdlbnQuYWRkUmVxdWVzdE5vcmV1c2UuYmluZChzZWxmLmFnZW50KSB9XG4gICAgc2VsZi5zdGFydCgpXG4gICAgc2VsZi5yZXEuZW5kKClcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc2VsZi50aW1lb3V0ICYmIHNlbGYudGltZW91dFRpbWVyKSB7XG4gICAgY2xlYXJUaW1lb3V0KHNlbGYudGltZW91dFRpbWVyKVxuICAgIHNlbGYudGltZW91dFRpbWVyID0gbnVsbFxuICB9XG4gIHNlbGYuZW1pdCgnZXJyb3InLCBlcnJvcilcbn1cblxuUmVxdWVzdC5wcm90b3R5cGUub25SZXF1ZXN0UmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgaWYgKHNlbGYudGltaW5nKSB7XG4gICAgc2VsZi50aW1pbmdzLnJlc3BvbnNlID0gbm93KCkgLSBzZWxmLnN0YXJ0VGltZU5vd1xuICB9XG5cbiAgZGVidWcoJ29uUmVxdWVzdFJlc3BvbnNlJywgc2VsZi51cmkuaHJlZiwgcmVzcG9uc2Uuc3RhdHVzQ29kZSwgcmVzcG9uc2UuaGVhZGVycylcbiAgcmVzcG9uc2Uub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgIGlmIChzZWxmLnRpbWluZykge1xuICAgICAgc2VsZi50aW1pbmdzLmVuZCA9IG5vdygpIC0gc2VsZi5zdGFydFRpbWVOb3dcbiAgICAgIHJlc3BvbnNlLnRpbWluZ1N0YXJ0ID0gc2VsZi5zdGFydFRpbWVcblxuICAgICAgLy8gZmlsbCBpbiB0aGUgYmxhbmtzIGZvciBhbnkgcGVyaW9kcyB0aGF0IGRpZG4ndCB0cmlnZ2VyLCBzdWNoIGFzXG4gICAgICAvLyBubyBsb29rdXAgb3IgY29ubmVjdCBkdWUgdG8ga2VlcCBhbGl2ZVxuICAgICAgaWYgKCFzZWxmLnRpbWluZ3Muc29ja2V0KSB7XG4gICAgICAgIHNlbGYudGltaW5ncy5zb2NrZXQgPSAwXG4gICAgICB9XG4gICAgICBpZiAoIXNlbGYudGltaW5ncy5sb29rdXApIHtcbiAgICAgICAgc2VsZi50aW1pbmdzLmxvb2t1cCA9IHNlbGYudGltaW5ncy5zb2NrZXRcbiAgICAgIH1cbiAgICAgIGlmICghc2VsZi50aW1pbmdzLmNvbm5lY3QpIHtcbiAgICAgICAgc2VsZi50aW1pbmdzLmNvbm5lY3QgPSBzZWxmLnRpbWluZ3MubG9va3VwXG4gICAgICB9XG4gICAgICBpZiAoIXNlbGYudGltaW5ncy5yZXNwb25zZSkge1xuICAgICAgICBzZWxmLnRpbWluZ3MucmVzcG9uc2UgPSBzZWxmLnRpbWluZ3MuY29ubmVjdFxuICAgICAgfVxuXG4gICAgICBkZWJ1ZygnZWxhcHNlZCB0aW1lJywgc2VsZi50aW1pbmdzLmVuZClcblxuICAgICAgLy8gZWxhcHNlZFRpbWUgaW5jbHVkZXMgYWxsIHJlZGlyZWN0c1xuICAgICAgc2VsZi5lbGFwc2VkVGltZSArPSBNYXRoLnJvdW5kKHNlbGYudGltaW5ncy5lbmQpXG5cbiAgICAgIC8vIE5PVEU6IGVsYXBzZWRUaW1lIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgLnRpbWluZ3NcbiAgICAgIHJlc3BvbnNlLmVsYXBzZWRUaW1lID0gc2VsZi5lbGFwc2VkVGltZVxuXG4gICAgICAvLyB0aW1pbmdzIGlzIGp1c3QgZm9yIHRoZSBmaW5hbCBmZXRjaFxuICAgICAgcmVzcG9uc2UudGltaW5ncyA9IHNlbGYudGltaW5nc1xuXG4gICAgICAvLyBwcmUtY2FsY3VsYXRlIHBoYXNlIHRpbWluZ3MgYXMgd2VsbFxuICAgICAgcmVzcG9uc2UudGltaW5nUGhhc2VzID0ge1xuICAgICAgICB3YWl0OiBzZWxmLnRpbWluZ3Muc29ja2V0LFxuICAgICAgICBkbnM6IHNlbGYudGltaW5ncy5sb29rdXAgLSBzZWxmLnRpbWluZ3Muc29ja2V0LFxuICAgICAgICB0Y3A6IHNlbGYudGltaW5ncy5jb25uZWN0IC0gc2VsZi50aW1pbmdzLmxvb2t1cCxcbiAgICAgICAgZmlyc3RCeXRlOiBzZWxmLnRpbWluZ3MucmVzcG9uc2UgLSBzZWxmLnRpbWluZ3MuY29ubmVjdCxcbiAgICAgICAgZG93bmxvYWQ6IHNlbGYudGltaW5ncy5lbmQgLSBzZWxmLnRpbWluZ3MucmVzcG9uc2UsXG4gICAgICAgIHRvdGFsOiBzZWxmLnRpbWluZ3MuZW5kXG4gICAgICB9XG4gICAgfVxuICAgIGRlYnVnKCdyZXNwb25zZSBlbmQnLCBzZWxmLnVyaS5ocmVmLCByZXNwb25zZS5zdGF0dXNDb2RlLCByZXNwb25zZS5oZWFkZXJzKVxuICB9KVxuXG4gIGlmIChzZWxmLl9hYm9ydGVkKSB7XG4gICAgZGVidWcoJ2Fib3J0ZWQnLCBzZWxmLnVyaS5ocmVmKVxuICAgIHJlc3BvbnNlLnJlc3VtZSgpXG4gICAgcmV0dXJuXG4gIH1cblxuICBzZWxmLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgcmVzcG9uc2UucmVxdWVzdCA9IHNlbGZcbiAgcmVzcG9uc2UudG9KU09OID0gcmVzcG9uc2VUb0pTT05cblxuICAvLyBYWFggVGhpcyBpcyBkaWZmZXJlbnQgb24gMC4xMCwgYmVjYXVzZSBTU0wgaXMgc3RyaWN0IGJ5IGRlZmF1bHRcbiAgaWYgKHNlbGYuaHR0cE1vZHVsZSA9PT0gaHR0cHMgJiZcbiAgICAgIHNlbGYuc3RyaWN0U1NMICYmICghcmVzcG9uc2UuaGFzT3duUHJvcGVydHkoJ3NvY2tldCcpIHx8XG4gICAgICAhcmVzcG9uc2Uuc29ja2V0LmF1dGhvcml6ZWQpKSB7XG4gICAgZGVidWcoJ3N0cmljdCBzc2wgZXJyb3InLCBzZWxmLnVyaS5ocmVmKVxuICAgIHZhciBzc2xFcnIgPSByZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnc29ja2V0JykgPyByZXNwb25zZS5zb2NrZXQuYXV0aG9yaXphdGlvbkVycm9yIDogc2VsZi51cmkuaHJlZiArICcgZG9lcyBub3Qgc3VwcG9ydCBTU0wnXG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignU1NMIEVycm9yOiAnICsgc3NsRXJyKSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIFNhdmUgdGhlIG9yaWdpbmFsIGhvc3QgYmVmb3JlIGFueSByZWRpcmVjdCAoaWYgaXQgY2hhbmdlcywgd2UgbmVlZCB0b1xuICAvLyByZW1vdmUgYW55IGF1dGhvcml6YXRpb24gaGVhZGVycykuICBBbHNvIHJlbWVtYmVyIHRoZSBjYXNlIG9mIHRoZSBoZWFkZXJcbiAgLy8gbmFtZSBiZWNhdXNlIGxvdHMgb2YgYnJva2VuIHNlcnZlcnMgZXhwZWN0IEhvc3QgaW5zdGVhZCBvZiBob3N0IGFuZCB3ZVxuICAvLyB3YW50IHRoZSBjYWxsZXIgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IHRoaXMuXG4gIHNlbGYub3JpZ2luYWxIb3N0ID0gc2VsZi5nZXRIZWFkZXIoJ2hvc3QnKVxuICBpZiAoIXNlbGYub3JpZ2luYWxIb3N0SGVhZGVyTmFtZSkge1xuICAgIHNlbGYub3JpZ2luYWxIb3N0SGVhZGVyTmFtZSA9IHNlbGYuaGFzSGVhZGVyKCdob3N0JylcbiAgfVxuICBpZiAoc2VsZi5zZXRIb3N0KSB7XG4gICAgc2VsZi5yZW1vdmVIZWFkZXIoJ2hvc3QnKVxuICB9XG4gIGlmIChzZWxmLnRpbWVvdXQgJiYgc2VsZi50aW1lb3V0VGltZXIpIHtcbiAgICBjbGVhclRpbWVvdXQoc2VsZi50aW1lb3V0VGltZXIpXG4gICAgc2VsZi50aW1lb3V0VGltZXIgPSBudWxsXG4gIH1cblxuICB2YXIgdGFyZ2V0Q29va2llSmFyID0gKHNlbGYuX2phciAmJiBzZWxmLl9qYXIuc2V0Q29va2llKSA/IHNlbGYuX2phciA6IGdsb2JhbENvb2tpZUphclxuICB2YXIgYWRkQ29va2llID0gZnVuY3Rpb24gKGNvb2tpZSkge1xuICAgIC8vc2V0IHRoZSBjb29raWUgaWYgaXQncyBkb21haW4gaW4gdGhlIGhyZWYncyBkb21haW4uXG4gICAgdHJ5IHtcbiAgICAgIHRhcmdldENvb2tpZUphci5zZXRDb29raWUoY29va2llLCBzZWxmLnVyaS5ocmVmLCB7aWdub3JlRXJyb3I6IHRydWV9KVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlKVxuICAgIH1cbiAgfVxuXG4gIHJlc3BvbnNlLmNhc2VsZXNzID0gY2FzZWxlc3MocmVzcG9uc2UuaGVhZGVycylcblxuICBpZiAocmVzcG9uc2UuY2FzZWxlc3MuaGFzKCdzZXQtY29va2llJykgJiYgKCFzZWxmLl9kaXNhYmxlQ29va2llcykpIHtcbiAgICB2YXIgaGVhZGVyTmFtZSA9IHJlc3BvbnNlLmNhc2VsZXNzLmhhcygnc2V0LWNvb2tpZScpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuaGVhZGVyc1toZWFkZXJOYW1lXSkpIHtcbiAgICAgIHJlc3BvbnNlLmhlYWRlcnNbaGVhZGVyTmFtZV0uZm9yRWFjaChhZGRDb29raWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZENvb2tpZShyZXNwb25zZS5oZWFkZXJzW2hlYWRlck5hbWVdKVxuICAgIH1cbiAgfVxuXG4gIGlmIChzZWxmLl9yZWRpcmVjdC5vblJlc3BvbnNlKHJlc3BvbnNlKSkge1xuICAgIHJldHVybiAvLyBJZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIHJlc3BvbnNlXG4gIH0gZWxzZSB7XG4gICAgLy8gQmUgYSBnb29kIHN0cmVhbSBhbmQgZW1pdCBlbmQgd2hlbiB0aGUgcmVzcG9uc2UgaXMgZmluaXNoZWQuXG4gICAgLy8gSGFjayB0byBlbWl0IGVuZCBvbiBjbG9zZSBiZWNhdXNlIG9mIGEgY29yZSBidWcgdGhhdCBuZXZlciBmaXJlcyBlbmRcbiAgICByZXNwb25zZS5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNlbGYuX2VuZGVkKSB7XG4gICAgICAgIHNlbGYucmVzcG9uc2UuZW1pdCgnZW5kJylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmVzcG9uc2Uub25jZSgnZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fZW5kZWQgPSB0cnVlXG4gICAgfSlcblxuICAgIHZhciBub0JvZHkgPSBmdW5jdGlvbiAoY29kZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc2VsZi5tZXRob2QgPT09ICdIRUFEJ1xuICAgICAgICAvLyBJbmZvcm1hdGlvbmFsXG4gICAgICAgIHx8IChjb2RlID49IDEwMCAmJiBjb2RlIDwgMjAwKVxuICAgICAgICAvLyBObyBDb250ZW50XG4gICAgICAgIHx8IGNvZGUgPT09IDIwNFxuICAgICAgICAvLyBOb3QgTW9kaWZpZWRcbiAgICAgICAgfHwgY29kZSA9PT0gMzA0XG4gICAgICApXG4gICAgfVxuXG4gICAgdmFyIHJlc3BvbnNlQ29udGVudFxuICAgIGlmIChzZWxmLmd6aXAgJiYgIW5vQm9keShyZXNwb25zZS5zdGF0dXNDb2RlKSkge1xuICAgICAgdmFyIGNvbnRlbnRFbmNvZGluZyA9IHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSB8fCAnaWRlbnRpdHknXG4gICAgICBjb250ZW50RW5jb2RpbmcgPSBjb250ZW50RW5jb2RpbmcudHJpbSgpLnRvTG93ZXJDYXNlKClcblxuICAgICAgLy8gQmUgbW9yZSBsZW5pZW50IHdpdGggZGVjb2RpbmcgY29tcHJlc3NlZCByZXNwb25zZXMsIHNpbmNlICh2ZXJ5IHJhcmVseSlcbiAgICAgIC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIGd6aXAgcmVzcG9uc2VzIHRoYXQgYXJlIHN0aWxsIGFjY2VwdGVkXG4gICAgICAvLyBieSBjb21tb24gYnJvd3NlcnMuXG4gICAgICAvLyBBbHdheXMgdXNpbmcgWl9TWU5DX0ZMVVNIIGlzIHdoYXQgY1VSTCBkb2VzLlxuICAgICAgdmFyIHpsaWJPcHRpb25zID0ge1xuICAgICAgICBmbHVzaDogemxpYi5aX1NZTkNfRkxVU0hcbiAgICAgICwgZmluaXNoRmx1c2g6IHpsaWIuWl9TWU5DX0ZMVVNIXG4gICAgICB9XG5cbiAgICAgIGlmIChjb250ZW50RW5jb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICByZXNwb25zZUNvbnRlbnQgPSB6bGliLmNyZWF0ZUd1bnppcCh6bGliT3B0aW9ucylcbiAgICAgICAgcmVzcG9uc2UucGlwZShyZXNwb25zZUNvbnRlbnQpXG4gICAgICB9IGVsc2UgaWYgKGNvbnRlbnRFbmNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgIHJlc3BvbnNlQ29udGVudCA9IHpsaWIuY3JlYXRlSW5mbGF0ZSh6bGliT3B0aW9ucylcbiAgICAgICAgcmVzcG9uc2UucGlwZShyZXNwb25zZUNvbnRlbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaW5jZSBwcmV2aW91cyB2ZXJzaW9ucyBkaWRuJ3QgY2hlY2sgZm9yIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVyLFxuICAgICAgICAvLyBpZ25vcmUgYW55IGludmFsaWQgdmFsdWVzIHRvIHByZXNlcnZlIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5XG4gICAgICAgIGlmIChjb250ZW50RW5jb2RpbmcgIT09ICdpZGVudGl0eScpIHtcbiAgICAgICAgICBkZWJ1ZygnaWdub3JpbmcgdW5yZWNvZ25pemVkIENvbnRlbnQtRW5jb2RpbmcgJyArIGNvbnRlbnRFbmNvZGluZylcbiAgICAgICAgfVxuICAgICAgICByZXNwb25zZUNvbnRlbnQgPSByZXNwb25zZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZUNvbnRlbnQgPSByZXNwb25zZVxuICAgIH1cblxuICAgIGlmIChzZWxmLmVuY29kaW5nKSB7XG4gICAgICBpZiAoc2VsZi5kZXN0cy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSWdub3JpbmcgZW5jb2RpbmcgcGFyYW1ldGVyIGFzIHRoaXMgc3RyZWFtIGlzIGJlaW5nIHBpcGVkIHRvIGFub3RoZXIgc3RyZWFtIHdoaWNoIG1ha2VzIHRoZSBlbmNvZGluZyBvcHRpb24gaW52YWxpZC4nKVxuICAgICAgfSBlbHNlIGlmIChyZXNwb25zZUNvbnRlbnQuc2V0RW5jb2RpbmcpIHtcbiAgICAgICAgcmVzcG9uc2VDb250ZW50LnNldEVuY29kaW5nKHNlbGYuZW5jb2RpbmcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTaG91bGQgb25seSBvY2N1ciBvbiBub2RlIHByZS12MC45LjQgKGpveWVudC9ub2RlQDliNWFiZTUpIHdpdGhcbiAgICAgICAgLy8gemxpYiBzdHJlYW1zLlxuICAgICAgICAvLyBJZi9XaGVuIHN1cHBvcnQgZm9yIDAuOS40IGlzIGRyb3BwZWQsIHRoaXMgc2hvdWxkIGJlIHVubmVjZXNzYXJ5LlxuICAgICAgICByZXNwb25zZUNvbnRlbnQgPSByZXNwb25zZUNvbnRlbnQucGlwZShzdHJpbmdzdHJlYW0oc2VsZi5lbmNvZGluZykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNlbGYuX3BhdXNlZCkge1xuICAgICAgcmVzcG9uc2VDb250ZW50LnBhdXNlKClcbiAgICB9XG5cbiAgICBzZWxmLnJlc3BvbnNlQ29udGVudCA9IHJlc3BvbnNlQ29udGVudFxuXG4gICAgc2VsZi5lbWl0KCdyZXNwb25zZScsIHJlc3BvbnNlKVxuXG4gICAgc2VsZi5kZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChkZXN0KSB7XG4gICAgICBzZWxmLnBpcGVEZXN0KGRlc3QpXG4gICAgfSlcblxuICAgIHJlc3BvbnNlQ29udGVudC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgaWYgKHNlbGYudGltaW5nICYmICFzZWxmLnJlc3BvbnNlU3RhcnRlZCkge1xuICAgICAgICBzZWxmLnJlc3BvbnNlU3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKVxuXG4gICAgICAgIC8vIE5PVEU6IHJlc3BvbnNlU3RhcnRUaW1lIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgLnRpbWluZ3NcbiAgICAgICAgcmVzcG9uc2UucmVzcG9uc2VTdGFydFRpbWUgPSBzZWxmLnJlc3BvbnNlU3RhcnRUaW1lXG4gICAgICB9XG4gICAgICBzZWxmLl9kZXN0ZGF0YSA9IHRydWVcbiAgICAgIHNlbGYuZW1pdCgnZGF0YScsIGNodW5rKVxuICAgIH0pXG4gICAgcmVzcG9uc2VDb250ZW50Lm9uY2UoJ2VuZCcsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgc2VsZi5lbWl0KCdlbmQnLCBjaHVuaylcbiAgICB9KVxuICAgIHJlc3BvbnNlQ29udGVudC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnJvcilcbiAgICB9KVxuICAgIHJlc3BvbnNlQ29udGVudC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7c2VsZi5lbWl0KCdjbG9zZScpfSlcblxuICAgIGlmIChzZWxmLmNhbGxiYWNrKSB7XG4gICAgICBzZWxmLnJlYWRSZXNwb25zZUJvZHkocmVzcG9uc2UpXG4gICAgfVxuICAgIC8vaWYgbm8gY2FsbGJhY2tcbiAgICBlbHNlIHtcbiAgICAgIHNlbGYub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlbGYuX2Fib3J0ZWQpIHtcbiAgICAgICAgICBkZWJ1ZygnYWJvcnRlZCcsIHNlbGYudXJpLmhyZWYpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5lbWl0KCdjb21wbGV0ZScsIHJlc3BvbnNlKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgZGVidWcoJ2ZpbmlzaCBpbml0IGZ1bmN0aW9uJywgc2VsZi51cmkuaHJlZilcbn1cblxuUmVxdWVzdC5wcm90b3R5cGUucmVhZFJlc3BvbnNlQm9keSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgZGVidWcoJ3JlYWRpbmcgcmVzcG9uc2VcXCdzIGJvZHknKVxuICB2YXIgYnVmZmVycyA9IFtdXG4gICAgLCBidWZmZXJMZW5ndGggPSAwXG4gICAgLCBzdHJpbmdzID0gW11cblxuICBzZWxmLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICBzdHJpbmdzLnB1c2goY2h1bmspXG4gICAgfSBlbHNlIGlmIChjaHVuay5sZW5ndGgpIHtcbiAgICAgIGJ1ZmZlckxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgICAgIGJ1ZmZlcnMucHVzaChjaHVuaylcbiAgICB9XG4gIH0pXG4gIHNlbGYub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZWJ1ZygnZW5kIGV2ZW50Jywgc2VsZi51cmkuaHJlZilcbiAgICBpZiAoc2VsZi5fYWJvcnRlZCkge1xuICAgICAgZGVidWcoJ2Fib3J0ZWQnLCBzZWxmLnVyaS5ocmVmKVxuICAgICAgLy8gYGJ1ZmZlcmAgaXMgZGVmaW5lZCBpbiB0aGUgcGFyZW50IHNjb3BlIGFuZCB1c2VkIGluIGEgY2xvc3VyZSBpdCBleGlzdHMgZm9yIHRoZSBsaWZlIG9mIHRoZSByZXF1ZXN0LlxuICAgICAgLy8gVGhpcyBjYW4gbGVhZCB0byBsZWFreSBiZWhhdmlvciBpZiB0aGUgdXNlciByZXRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0IG9iamVjdC5cbiAgICAgIGJ1ZmZlcnMgPSBbXVxuICAgICAgYnVmZmVyTGVuZ3RoID0gMFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJ1ZmZlckxlbmd0aCkge1xuICAgICAgZGVidWcoJ2hhcyBib2R5Jywgc2VsZi51cmkuaHJlZiwgYnVmZmVyTGVuZ3RoKVxuICAgICAgcmVzcG9uc2UuYm9keSA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgYnVmZmVyTGVuZ3RoKVxuICAgICAgaWYgKHNlbGYuZW5jb2RpbmcgIT09IG51bGwpIHtcbiAgICAgICAgcmVzcG9uc2UuYm9keSA9IHJlc3BvbnNlLmJvZHkudG9TdHJpbmcoc2VsZi5lbmNvZGluZylcbiAgICAgIH1cbiAgICAgIC8vIGBidWZmZXJgIGlzIGRlZmluZWQgaW4gdGhlIHBhcmVudCBzY29wZSBhbmQgdXNlZCBpbiBhIGNsb3N1cmUgaXQgZXhpc3RzIGZvciB0aGUgbGlmZSBvZiB0aGUgUmVxdWVzdC5cbiAgICAgIC8vIFRoaXMgY2FuIGxlYWQgdG8gbGVha3kgYmVoYXZpb3IgaWYgdGhlIHVzZXIgcmV0YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdCBvYmplY3QuXG4gICAgICBidWZmZXJzID0gW11cbiAgICAgIGJ1ZmZlckxlbmd0aCA9IDBcbiAgICB9IGVsc2UgaWYgKHN0cmluZ3MubGVuZ3RoKSB7XG4gICAgICAvLyBUaGUgVVRGOCBCT00gWzB4RUYsMHhCQiwweEJGXSBpcyBjb252ZXJ0ZWQgdG8gWzB4RkUsMHhGRl0gaW4gdGhlIEpTIFVUQzE2L1VDUzIgcmVwcmVzZW50YXRpb24uXG4gICAgICAvLyBTdHJpcCB0aGlzIHZhbHVlIG91dCB3aGVuIHRoZSBlbmNvZGluZyBpcyBzZXQgdG8gJ3V0ZjgnLCBhcyB1cHN0cmVhbSBjb25zdW1lcnMgd29uJ3QgZXhwZWN0IGl0IGFuZCBpdCBicmVha3MgSlNPTi5wYXJzZSgpLlxuICAgICAgaWYgKHNlbGYuZW5jb2RpbmcgPT09ICd1dGY4JyAmJiBzdHJpbmdzWzBdLmxlbmd0aCA+IDAgJiYgc3RyaW5nc1swXVswXSA9PT0gJ1xcdUZFRkYnKSB7XG4gICAgICAgIHN0cmluZ3NbMF0gPSBzdHJpbmdzWzBdLnN1YnN0cmluZygxKVxuICAgICAgfVxuICAgICAgcmVzcG9uc2UuYm9keSA9IHN0cmluZ3Muam9pbignJylcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5fanNvbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzcG9uc2UuYm9keSA9IEpTT04ucGFyc2UocmVzcG9uc2UuYm9keSwgc2VsZi5fanNvblJldml2ZXIpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlYnVnKCdpbnZhbGlkIEpTT04gcmVjZWl2ZWQnLCBzZWxmLnVyaS5ocmVmKVxuICAgICAgfVxuICAgIH1cbiAgICBkZWJ1ZygnZW1pdHRpbmcgY29tcGxldGUnLCBzZWxmLnVyaS5ocmVmKVxuICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuYm9keSA9PT0gJ3VuZGVmaW5lZCcgJiYgIXNlbGYuX2pzb24pIHtcbiAgICAgIHJlc3BvbnNlLmJvZHkgPSBzZWxmLmVuY29kaW5nID09PSBudWxsID8gQnVmZmVyLmFsbG9jKDApIDogJydcbiAgICB9XG4gICAgc2VsZi5lbWl0KCdjb21wbGV0ZScsIHJlc3BvbnNlLCByZXNwb25zZS5ib2R5KVxuICB9KVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHNlbGYuX2Fib3J0ZWQgPSB0cnVlXG5cbiAgaWYgKHNlbGYucmVxKSB7XG4gICAgc2VsZi5yZXEuYWJvcnQoKVxuICB9XG4gIGVsc2UgaWYgKHNlbGYucmVzcG9uc2UpIHtcbiAgICBzZWxmLnJlc3BvbnNlLmRlc3Ryb3koKVxuICB9XG5cbiAgc2VsZi5lbWl0KCdhYm9ydCcpXG59XG5cblJlcXVlc3QucHJvdG90eXBlLnBpcGVEZXN0ID0gZnVuY3Rpb24gKGRlc3QpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHZhciByZXNwb25zZSA9IHNlbGYucmVzcG9uc2VcbiAgLy8gQ2FsbGVkIGFmdGVyIHRoZSByZXNwb25zZSBpcyByZWNlaXZlZFxuICBpZiAoZGVzdC5oZWFkZXJzICYmICFkZXN0LmhlYWRlcnNTZW50KSB7XG4gICAgaWYgKHJlc3BvbnNlLmNhc2VsZXNzLmhhcygnY29udGVudC10eXBlJykpIHtcbiAgICAgIHZhciBjdG5hbWUgPSByZXNwb25zZS5jYXNlbGVzcy5oYXMoJ2NvbnRlbnQtdHlwZScpXG4gICAgICBpZiAoZGVzdC5zZXRIZWFkZXIpIHtcbiAgICAgICAgZGVzdC5zZXRIZWFkZXIoY3RuYW1lLCByZXNwb25zZS5oZWFkZXJzW2N0bmFtZV0pXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZGVzdC5oZWFkZXJzW2N0bmFtZV0gPSByZXNwb25zZS5oZWFkZXJzW2N0bmFtZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuY2FzZWxlc3MuaGFzKCdjb250ZW50LWxlbmd0aCcpKSB7XG4gICAgICB2YXIgY2xuYW1lID0gcmVzcG9uc2UuY2FzZWxlc3MuaGFzKCdjb250ZW50LWxlbmd0aCcpXG4gICAgICBpZiAoZGVzdC5zZXRIZWFkZXIpIHtcbiAgICAgICAgZGVzdC5zZXRIZWFkZXIoY2xuYW1lLCByZXNwb25zZS5oZWFkZXJzW2NsbmFtZV0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXN0LmhlYWRlcnNbY2xuYW1lXSA9IHJlc3BvbnNlLmhlYWRlcnNbY2xuYW1lXVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoZGVzdC5zZXRIZWFkZXIgJiYgIWRlc3QuaGVhZGVyc1NlbnQpIHtcbiAgICBmb3IgKHZhciBpIGluIHJlc3BvbnNlLmhlYWRlcnMpIHtcbiAgICAgIC8vIElmIHRoZSByZXNwb25zZSBjb250ZW50IGlzIGJlaW5nIGRlY29kZWQsIHRoZSBDb250ZW50LUVuY29kaW5nIGhlYWRlclxuICAgICAgLy8gb2YgdGhlIHJlc3BvbnNlIGRvZXNuJ3QgcmVwcmVzZW50IHRoZSBwaXBlZCBjb250ZW50LCBzbyBkb24ndCBwYXNzIGl0LlxuICAgICAgaWYgKCFzZWxmLmd6aXAgfHwgaSAhPT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgIGRlc3Quc2V0SGVhZGVyKGksIHJlc3BvbnNlLmhlYWRlcnNbaV0pXG4gICAgICB9XG4gICAgfVxuICAgIGRlc3Quc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c0NvZGVcbiAgfVxuICBpZiAoc2VsZi5waXBlZmlsdGVyKSB7XG4gICAgc2VsZi5waXBlZmlsdGVyKHJlc3BvbnNlLCBkZXN0KVxuICB9XG59XG5cblJlcXVlc3QucHJvdG90eXBlLnFzID0gZnVuY3Rpb24gKHEsIGNsb2JiZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHZhciBiYXNlXG4gIGlmICghY2xvYmJlciAmJiBzZWxmLnVyaS5xdWVyeSkge1xuICAgIGJhc2UgPSBzZWxmLl9xcy5wYXJzZShzZWxmLnVyaS5xdWVyeSlcbiAgfSBlbHNlIHtcbiAgICBiYXNlID0ge31cbiAgfVxuXG4gIGZvciAodmFyIGkgaW4gcSkge1xuICAgIGJhc2VbaV0gPSBxW2ldXG4gIH1cblxuICB2YXIgcXMgPSBzZWxmLl9xcy5zdHJpbmdpZnkoYmFzZSlcblxuICBpZiAocXMgPT09ICcnKSB7XG4gICAgcmV0dXJuIHNlbGZcbiAgfVxuXG4gIHNlbGYudXJpID0gdXJsLnBhcnNlKHNlbGYudXJpLmhyZWYuc3BsaXQoJz8nKVswXSArICc/JyArIHFzKVxuICBzZWxmLnVybCA9IHNlbGYudXJpXG4gIHNlbGYucGF0aCA9IHNlbGYudXJpLnBhdGhcblxuICBpZiAoc2VsZi51cmkuaG9zdCA9PT0gJ3VuaXgnKSB7XG4gICAgc2VsZi5lbmFibGVVbml4U29ja2V0KClcbiAgfVxuXG4gIHJldHVybiBzZWxmXG59XG5SZXF1ZXN0LnByb3RvdHlwZS5mb3JtID0gZnVuY3Rpb24gKGZvcm0pIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmIChmb3JtKSB7XG4gICAgaWYgKCEvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkXFxiLy50ZXN0KHNlbGYuZ2V0SGVhZGVyKCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgIHNlbGYuc2V0SGVhZGVyKCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJylcbiAgICB9XG4gICAgc2VsZi5ib2R5ID0gKHR5cGVvZiBmb3JtID09PSAnc3RyaW5nJylcbiAgICAgID8gc2VsZi5fcXMucmZjMzk4Nihmb3JtLnRvU3RyaW5nKCd1dGY4JykpXG4gICAgICA6IHNlbGYuX3FzLnN0cmluZ2lmeShmb3JtKS50b1N0cmluZygndXRmOCcpXG4gICAgcmV0dXJuIHNlbGZcbiAgfVxuICAvLyBjcmVhdGUgZm9ybS1kYXRhIG9iamVjdFxuICBzZWxmLl9mb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgc2VsZi5fZm9ybS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9ICdmb3JtLWRhdGE6ICcgKyBlcnIubWVzc2FnZVxuICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgc2VsZi5hYm9ydCgpXG4gIH0pXG4gIHJldHVybiBzZWxmLl9mb3JtXG59XG5SZXF1ZXN0LnByb3RvdHlwZS5tdWx0aXBhcnQgPSBmdW5jdGlvbiAobXVsdGlwYXJ0KSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIHNlbGYuX211bHRpcGFydC5vblJlcXVlc3QobXVsdGlwYXJ0KVxuXG4gIGlmICghc2VsZi5fbXVsdGlwYXJ0LmNodW5rZWQpIHtcbiAgICBzZWxmLmJvZHkgPSBzZWxmLl9tdWx0aXBhcnQuYm9keVxuICB9XG5cbiAgcmV0dXJuIHNlbGZcbn1cblJlcXVlc3QucHJvdG90eXBlLmpzb24gPSBmdW5jdGlvbiAodmFsKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIGlmICghc2VsZi5oYXNIZWFkZXIoJ2FjY2VwdCcpKSB7XG4gICAgc2VsZi5zZXRIZWFkZXIoJ2FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJylcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2VsZi5qc29uUmVwbGFjZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzZWxmLl9qc29uUmVwbGFjZXIgPSBzZWxmLmpzb25SZXBsYWNlclxuICB9XG5cbiAgc2VsZi5fanNvbiA9IHRydWVcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykge1xuICAgIGlmIChzZWxmLmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCEvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkXFxiLy50ZXN0KHNlbGYuZ2V0SGVhZGVyKCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgc2VsZi5ib2R5ID0gc2FmZVN0cmluZ2lmeShzZWxmLmJvZHksIHNlbGYuX2pzb25SZXBsYWNlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuYm9keSA9IHNlbGYuX3FzLnJmYzM5ODYoc2VsZi5ib2R5KVxuICAgICAgfVxuICAgICAgaWYgKCFzZWxmLmhhc0hlYWRlcignY29udGVudC10eXBlJykpIHtcbiAgICAgICAgc2VsZi5zZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi9qc29uJylcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5ib2R5ID0gc2FmZVN0cmluZ2lmeSh2YWwsIHNlbGYuX2pzb25SZXBsYWNlcilcbiAgICBpZiAoIXNlbGYuaGFzSGVhZGVyKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgc2VsZi5zZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi9qc29uJylcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHNlbGYuanNvblJldml2ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzZWxmLl9qc29uUmV2aXZlciA9IHNlbGYuanNvblJldml2ZXJcbiAgfVxuXG4gIHJldHVybiBzZWxmXG59XG5SZXF1ZXN0LnByb3RvdHlwZS5nZXRIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSwgaGVhZGVycykge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgdmFyIHJlc3VsdCwgcmUsIG1hdGNoXG4gIGlmICghaGVhZGVycykge1xuICAgIGhlYWRlcnMgPSBzZWxmLmhlYWRlcnNcbiAgfVxuICBPYmplY3Qua2V5cyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gbmFtZS5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZSA9IG5ldyBSZWdFeHAobmFtZSwgJ2knKVxuICAgIG1hdGNoID0ga2V5Lm1hdGNoKHJlKVxuICAgIGlmIChtYXRjaCkge1xuICAgICAgcmVzdWx0ID0gaGVhZGVyc1trZXldXG4gICAgfVxuICB9KVxuICByZXR1cm4gcmVzdWx0XG59XG5SZXF1ZXN0LnByb3RvdHlwZS5lbmFibGVVbml4U29ja2V0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBHZXQgdGhlIHNvY2tldCAmIHJlcXVlc3QgcGF0aHMgZnJvbSB0aGUgVVJMXG4gIHZhciB1bml4UGFydHMgPSB0aGlzLnVyaS5wYXRoLnNwbGl0KCc6JylcbiAgICAsIGhvc3QgPSB1bml4UGFydHNbMF1cbiAgICAsIHBhdGggPSB1bml4UGFydHNbMV1cbiAgLy8gQXBwbHkgdW5peCBwcm9wZXJ0aWVzIHRvIHJlcXVlc3RcbiAgdGhpcy5zb2NrZXRQYXRoID0gaG9zdFxuICB0aGlzLnVyaS5wYXRobmFtZSA9IHBhdGhcbiAgdGhpcy51cmkucGF0aCA9IHBhdGhcbiAgdGhpcy51cmkuaG9zdCA9IGhvc3RcbiAgdGhpcy51cmkuaG9zdG5hbWUgPSBob3N0XG4gIHRoaXMudXJpLmlzVW5peCA9IHRydWVcbn1cblxuXG5SZXF1ZXN0LnByb3RvdHlwZS5hdXRoID0gZnVuY3Rpb24gKHVzZXIsIHBhc3MsIHNlbmRJbW1lZGlhdGVseSwgYmVhcmVyKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIHNlbGYuX2F1dGgub25SZXF1ZXN0KHVzZXIsIHBhc3MsIHNlbmRJbW1lZGlhdGVseSwgYmVhcmVyKVxuXG4gIHJldHVybiBzZWxmXG59XG5SZXF1ZXN0LnByb3RvdHlwZS5hd3MgPSBmdW5jdGlvbiAob3B0cywgbm93KSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIGlmICghbm93KSB7XG4gICAgc2VsZi5fYXdzID0gb3B0c1xuICAgIHJldHVybiBzZWxmXG4gIH1cblxuICBpZiAob3B0cy5zaWduX3ZlcnNpb24gPT0gNCB8fCBvcHRzLnNpZ25fdmVyc2lvbiA9PSAnNCcpIHtcbiAgICAvLyB1c2UgYXdzNFxuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgaG9zdDogc2VsZi51cmkuaG9zdCxcbiAgICAgIHBhdGg6IHNlbGYudXJpLnBhdGgsXG4gICAgICBtZXRob2Q6IHNlbGYubWV0aG9kLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnY29udGVudC10eXBlJzogc2VsZi5nZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScpIHx8ICcnXG4gICAgICB9LFxuICAgICAgYm9keTogc2VsZi5ib2R5XG4gICAgfVxuICAgIHZhciBzaWduUmVzID0gYXdzNC5zaWduKG9wdGlvbnMsIHtcbiAgICAgIGFjY2Vzc0tleUlkOiBvcHRzLmtleSxcbiAgICAgIHNlY3JldEFjY2Vzc0tleTogb3B0cy5zZWNyZXQsXG4gICAgICBzZXNzaW9uVG9rZW46IG9wdHMuc2Vzc2lvblxuICAgIH0pXG4gICAgc2VsZi5zZXRIZWFkZXIoJ2F1dGhvcml6YXRpb24nLCBzaWduUmVzLmhlYWRlcnMuQXV0aG9yaXphdGlvbilcbiAgICBzZWxmLnNldEhlYWRlcigneC1hbXotZGF0ZScsIHNpZ25SZXMuaGVhZGVyc1snWC1BbXotRGF0ZSddKVxuICAgIGlmIChzaWduUmVzLmhlYWRlcnNbJ1gtQW16LVNlY3VyaXR5LVRva2VuJ10pIHtcbiAgICAgIHNlbGYuc2V0SGVhZGVyKCd4LWFtei1zZWN1cml0eS10b2tlbicsIHNpZ25SZXMuaGVhZGVyc1snWC1BbXotU2VjdXJpdHktVG9rZW4nXSlcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gZGVmYXVsdDogdXNlIGF3cy1zaWduMlxuICAgIHZhciBkYXRlID0gbmV3IERhdGUoKVxuICAgIHNlbGYuc2V0SGVhZGVyKCdkYXRlJywgZGF0ZS50b1VUQ1N0cmluZygpKVxuICAgIHZhciBhdXRoID1cbiAgICAgIHsga2V5OiBvcHRzLmtleVxuICAgICAgLCBzZWNyZXQ6IG9wdHMuc2VjcmV0XG4gICAgICAsIHZlcmI6IHNlbGYubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICwgZGF0ZTogZGF0ZVxuICAgICAgLCBjb250ZW50VHlwZTogc2VsZi5nZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScpIHx8ICcnXG4gICAgICAsIG1kNTogc2VsZi5nZXRIZWFkZXIoJ2NvbnRlbnQtbWQ1JykgfHwgJydcbiAgICAgICwgYW1hem9uSGVhZGVyczogYXdzMi5jYW5vbmljYWxpemVIZWFkZXJzKHNlbGYuaGVhZGVycylcbiAgICAgIH1cbiAgICB2YXIgcGF0aCA9IHNlbGYudXJpLnBhdGhcbiAgICBpZiAob3B0cy5idWNrZXQgJiYgcGF0aCkge1xuICAgICAgYXV0aC5yZXNvdXJjZSA9ICcvJyArIG9wdHMuYnVja2V0ICsgcGF0aFxuICAgIH0gZWxzZSBpZiAob3B0cy5idWNrZXQgJiYgIXBhdGgpIHtcbiAgICAgIGF1dGgucmVzb3VyY2UgPSAnLycgKyBvcHRzLmJ1Y2tldFxuICAgIH0gZWxzZSBpZiAoIW9wdHMuYnVja2V0ICYmIHBhdGgpIHtcbiAgICAgIGF1dGgucmVzb3VyY2UgPSBwYXRoXG4gICAgfSBlbHNlIGlmICghb3B0cy5idWNrZXQgJiYgIXBhdGgpIHtcbiAgICAgIGF1dGgucmVzb3VyY2UgPSAnLydcbiAgICB9XG4gICAgYXV0aC5yZXNvdXJjZSA9IGF3czIuY2Fub25pY2FsaXplUmVzb3VyY2UoYXV0aC5yZXNvdXJjZSlcbiAgICBzZWxmLnNldEhlYWRlcignYXV0aG9yaXphdGlvbicsIGF3czIuYXV0aG9yaXphdGlvbihhdXRoKSlcbiAgfVxuXG4gIHJldHVybiBzZWxmXG59XG5SZXF1ZXN0LnByb3RvdHlwZS5odHRwU2lnbmF0dXJlID0gZnVuY3Rpb24gKG9wdHMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGh0dHBTaWduYXR1cmUuc2lnblJlcXVlc3Qoe1xuICAgIGdldEhlYWRlcjogZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRIZWFkZXIoaGVhZGVyLCBzZWxmLmhlYWRlcnMpXG4gICAgfSxcbiAgICBzZXRIZWFkZXI6IGZ1bmN0aW9uKGhlYWRlciwgdmFsdWUpIHtcbiAgICAgIHNlbGYuc2V0SGVhZGVyKGhlYWRlciwgdmFsdWUpXG4gICAgfSxcbiAgICBtZXRob2Q6IHNlbGYubWV0aG9kLFxuICAgIHBhdGg6IHNlbGYucGF0aFxuICB9LCBvcHRzKVxuICBkZWJ1ZygnaHR0cFNpZ25hdHVyZSBhdXRob3JpemF0aW9uJywgc2VsZi5nZXRIZWFkZXIoJ2F1dGhvcml6YXRpb24nKSlcblxuICByZXR1cm4gc2VsZlxufVxuUmVxdWVzdC5wcm90b3R5cGUuaGF3ayA9IGZ1bmN0aW9uIChvcHRzKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBzZWxmLnNldEhlYWRlcignQXV0aG9yaXphdGlvbicsIGhhd2suY2xpZW50LmhlYWRlcihzZWxmLnVyaSwgc2VsZi5tZXRob2QsIG9wdHMpLmZpZWxkKVxufVxuUmVxdWVzdC5wcm90b3R5cGUub2F1dGggPSBmdW5jdGlvbiAoX29hdXRoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIHNlbGYuX29hdXRoLm9uUmVxdWVzdChfb2F1dGgpXG5cbiAgcmV0dXJuIHNlbGZcbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuamFyID0gZnVuY3Rpb24gKGphcikge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgdmFyIGNvb2tpZXNcblxuICBpZiAoc2VsZi5fcmVkaXJlY3QucmVkaXJlY3RzRm9sbG93ZWQgPT09IDApIHtcbiAgICBzZWxmLm9yaWdpbmFsQ29va2llSGVhZGVyID0gc2VsZi5nZXRIZWFkZXIoJ2Nvb2tpZScpXG4gIH1cblxuICBpZiAoIWphcikge1xuICAgIC8vIGRpc2FibGUgY29va2llc1xuICAgIGNvb2tpZXMgPSBmYWxzZVxuICAgIHNlbGYuX2Rpc2FibGVDb29raWVzID0gdHJ1ZVxuICB9IGVsc2Uge1xuICAgIHZhciB0YXJnZXRDb29raWVKYXIgPSAoamFyICYmIGphci5nZXRDb29raWVTdHJpbmcpID8gamFyIDogZ2xvYmFsQ29va2llSmFyXG4gICAgdmFyIHVyaWhyZWYgPSBzZWxmLnVyaS5ocmVmXG4gICAgLy9mZXRjaCBjb29raWUgaW4gdGhlIFNwZWNpZmllZCBob3N0XG4gICAgaWYgKHRhcmdldENvb2tpZUphcikge1xuICAgICAgY29va2llcyA9IHRhcmdldENvb2tpZUphci5nZXRDb29raWVTdHJpbmcodXJpaHJlZilcbiAgICB9XG4gIH1cblxuICAvL2lmIG5lZWQgY29va2llIGFuZCBjb29raWUgaXMgbm90IGVtcHR5XG4gIGlmIChjb29raWVzICYmIGNvb2tpZXMubGVuZ3RoKSB7XG4gICAgaWYgKHNlbGYub3JpZ2luYWxDb29raWVIZWFkZXIpIHtcbiAgICAgIC8vIERvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBDb29raWUgaGVhZGVyXG4gICAgICBzZWxmLnNldEhlYWRlcignY29va2llJywgc2VsZi5vcmlnaW5hbENvb2tpZUhlYWRlciArICc7ICcgKyBjb29raWVzKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLnNldEhlYWRlcignY29va2llJywgY29va2llcylcbiAgICB9XG4gIH1cbiAgc2VsZi5famFyID0gamFyXG4gIHJldHVybiBzZWxmXG59XG5cblxuLy8gU3RyZWFtIEFQSVxuUmVxdWVzdC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBvcHRzKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIGlmIChzZWxmLnJlc3BvbnNlKSB7XG4gICAgaWYgKHNlbGYuX2Rlc3RkYXRhKSB7XG4gICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdZb3UgY2Fubm90IHBpcGUgYWZ0ZXIgZGF0YSBoYXMgYmVlbiBlbWl0dGVkIGZyb20gdGhlIHJlc3BvbnNlLicpKVxuICAgIH0gZWxzZSBpZiAoc2VsZi5fZW5kZWQpIHtcbiAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgcGlwZSBhZnRlciB0aGUgcmVzcG9uc2UgaGFzIGJlZW4gZW5kZWQuJykpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5TdHJlYW0ucHJvdG90eXBlLnBpcGUuY2FsbChzZWxmLCBkZXN0LCBvcHRzKVxuICAgICAgc2VsZi5waXBlRGVzdChkZXN0KVxuICAgICAgcmV0dXJuIGRlc3RcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5kZXN0cy5wdXNoKGRlc3QpXG4gICAgc3RyZWFtLlN0cmVhbS5wcm90b3R5cGUucGlwZS5jYWxsKHNlbGYsIGRlc3QsIG9wdHMpXG4gICAgcmV0dXJuIGRlc3RcbiAgfVxufVxuUmVxdWVzdC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoc2VsZi5fYWJvcnRlZCkge3JldHVybn1cblxuICBpZiAoIXNlbGYuX3N0YXJ0ZWQpIHtcbiAgICBzZWxmLnN0YXJ0KClcbiAgfVxuICBpZiAoc2VsZi5yZXEpIHtcbiAgICByZXR1cm4gc2VsZi5yZXEud3JpdGUuYXBwbHkoc2VsZi5yZXEsIGFyZ3VtZW50cylcbiAgfVxufVxuUmVxdWVzdC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoc2VsZi5fYWJvcnRlZCkge3JldHVybn1cblxuICBpZiAoY2h1bmspIHtcbiAgICBzZWxmLndyaXRlKGNodW5rKVxuICB9XG4gIGlmICghc2VsZi5fc3RhcnRlZCkge1xuICAgIHNlbGYuc3RhcnQoKVxuICB9XG4gIGlmIChzZWxmLnJlcSkge1xuICAgIHNlbGYucmVxLmVuZCgpXG4gIH1cbn1cblJlcXVlc3QucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKCFzZWxmLnJlc3BvbnNlQ29udGVudCkge1xuICAgIHNlbGYuX3BhdXNlZCA9IHRydWVcbiAgfSBlbHNlIHtcbiAgICBzZWxmLnJlc3BvbnNlQ29udGVudC5wYXVzZS5hcHBseShzZWxmLnJlc3BvbnNlQ29udGVudCwgYXJndW1lbnRzKVxuICB9XG59XG5SZXF1ZXN0LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoIXNlbGYucmVzcG9uc2VDb250ZW50KSB7XG4gICAgc2VsZi5fcGF1c2VkID0gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICBzZWxmLnJlc3BvbnNlQ29udGVudC5yZXN1bWUuYXBwbHkoc2VsZi5yZXNwb25zZUNvbnRlbnQsIGFyZ3VtZW50cylcbiAgfVxufVxuUmVxdWVzdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmICghc2VsZi5fZW5kZWQpIHtcbiAgICBzZWxmLmVuZCgpXG4gIH0gZWxzZSBpZiAoc2VsZi5yZXNwb25zZSkge1xuICAgIHNlbGYucmVzcG9uc2UuZGVzdHJveSgpXG4gIH1cbn1cblxuUmVxdWVzdC5kZWZhdWx0UHJveHlIZWFkZXJXaGl0ZUxpc3QgPVxuICBUdW5uZWwuZGVmYXVsdFByb3h5SGVhZGVyV2hpdGVMaXN0LnNsaWNlKClcblxuUmVxdWVzdC5kZWZhdWx0UHJveHlIZWFkZXJFeGNsdXNpdmVMaXN0ID1cbiAgVHVubmVsLmRlZmF1bHRQcm94eUhlYWRlckV4Y2x1c2l2ZUxpc3Quc2xpY2UoKVxuXG4vLyBFeHBvcnRzXG5cblJlcXVlc3QucHJvdG90eXBlLnRvSlNPTiA9IHJlcXVlc3RUb0pTT05cbm1vZHVsZS5leHBvcnRzID0gUmVxdWVzdFxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaEJhc2UgPSByZXF1aXJlKCdoYXNoLWJhc2UnKVxuXG5mdW5jdGlvbiBSSVBFTUQxNjAgKCkge1xuICBIYXNoQmFzZS5jYWxsKHRoaXMsIDY0KVxuXG4gIC8vIHN0YXRlXG4gIHRoaXMuX2EgPSAweDY3NDUyMzAxXG4gIHRoaXMuX2IgPSAweGVmY2RhYjg5XG4gIHRoaXMuX2MgPSAweDk4YmFkY2ZlXG4gIHRoaXMuX2QgPSAweDEwMzI1NDc2XG4gIHRoaXMuX2UgPSAweGMzZDJlMWYwXG59XG5cbmluaGVyaXRzKFJJUEVNRDE2MCwgSGFzaEJhc2UpXG5cblJJUEVNRDE2MC5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG0gPSBuZXcgQXJyYXkoMTYpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkgbVtpXSA9IHRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKGkgKiA0KVxuXG4gIHZhciBhbCA9IHRoaXMuX2FcbiAgdmFyIGJsID0gdGhpcy5fYlxuICB2YXIgY2wgPSB0aGlzLl9jXG4gIHZhciBkbCA9IHRoaXMuX2RcbiAgdmFyIGVsID0gdGhpcy5fZVxuXG4gIC8vIE1qID0gMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNVxuICAvLyBLID0gMHgwMDAwMDAwMFxuICAvLyBTaiA9IDExLCAxNCwgMTUsIDEyLCA1LCA4LCA3LCA5LCAxMSwgMTMsIDE0LCAxNSwgNiwgNywgOSwgOFxuICBhbCA9IGZuMShhbCwgYmwsIGNsLCBkbCwgZWwsIG1bMF0sIDB4MDAwMDAwMDAsIDExKTsgY2wgPSByb3RsKGNsLCAxMClcbiAgZWwgPSBmbjEoZWwsIGFsLCBibCwgY2wsIGRsLCBtWzFdLCAweDAwMDAwMDAwLCAxNCk7IGJsID0gcm90bChibCwgMTApXG4gIGRsID0gZm4xKGRsLCBlbCwgYWwsIGJsLCBjbCwgbVsyXSwgMHgwMDAwMDAwMCwgMTUpOyBhbCA9IHJvdGwoYWwsIDEwKVxuICBjbCA9IGZuMShjbCwgZGwsIGVsLCBhbCwgYmwsIG1bM10sIDB4MDAwMDAwMDAsIDEyKTsgZWwgPSByb3RsKGVsLCAxMClcbiAgYmwgPSBmbjEoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzRdLCAweDAwMDAwMDAwLCA1KTsgZGwgPSByb3RsKGRsLCAxMClcbiAgYWwgPSBmbjEoYWwsIGJsLCBjbCwgZGwsIGVsLCBtWzVdLCAweDAwMDAwMDAwLCA4KTsgY2wgPSByb3RsKGNsLCAxMClcbiAgZWwgPSBmbjEoZWwsIGFsLCBibCwgY2wsIGRsLCBtWzZdLCAweDAwMDAwMDAwLCA3KTsgYmwgPSByb3RsKGJsLCAxMClcbiAgZGwgPSBmbjEoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzddLCAweDAwMDAwMDAwLCA5KTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjEoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzhdLCAweDAwMDAwMDAwLCAxMSk7IGVsID0gcm90bChlbCwgMTApXG4gIGJsID0gZm4xKGJsLCBjbCwgZGwsIGVsLCBhbCwgbVs5XSwgMHgwMDAwMDAwMCwgMTMpOyBkbCA9IHJvdGwoZGwsIDEwKVxuICBhbCA9IGZuMShhbCwgYmwsIGNsLCBkbCwgZWwsIG1bMTBdLCAweDAwMDAwMDAwLCAxNCk7IGNsID0gcm90bChjbCwgMTApXG4gIGVsID0gZm4xKGVsLCBhbCwgYmwsIGNsLCBkbCwgbVsxMV0sIDB4MDAwMDAwMDAsIDE1KTsgYmwgPSByb3RsKGJsLCAxMClcbiAgZGwgPSBmbjEoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzEyXSwgMHgwMDAwMDAwMCwgNik7IGFsID0gcm90bChhbCwgMTApXG4gIGNsID0gZm4xKGNsLCBkbCwgZWwsIGFsLCBibCwgbVsxM10sIDB4MDAwMDAwMDAsIDcpOyBlbCA9IHJvdGwoZWwsIDEwKVxuICBibCA9IGZuMShibCwgY2wsIGRsLCBlbCwgYWwsIG1bMTRdLCAweDAwMDAwMDAwLCA5KTsgZGwgPSByb3RsKGRsLCAxMClcbiAgYWwgPSBmbjEoYWwsIGJsLCBjbCwgZGwsIGVsLCBtWzE1XSwgMHgwMDAwMDAwMCwgOCk7IGNsID0gcm90bChjbCwgMTApXG5cbiAgLy8gTWogPSA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4XG4gIC8vIEsgPSAweDVhODI3OTk5XG4gIC8vIFNqID0gNywgNiwgOCwgMTMsIDExLCA5LCA3LCAxNSwgNywgMTIsIDE1LCA5LCAxMSwgNywgMTMsIDEyXG4gIGVsID0gZm4yKGVsLCBhbCwgYmwsIGNsLCBkbCwgbVs3XSwgMHg1YTgyNzk5OSwgNyk7IGJsID0gcm90bChibCwgMTApXG4gIGRsID0gZm4yKGRsLCBlbCwgYWwsIGJsLCBjbCwgbVs0XSwgMHg1YTgyNzk5OSwgNik7IGFsID0gcm90bChhbCwgMTApXG4gIGNsID0gZm4yKGNsLCBkbCwgZWwsIGFsLCBibCwgbVsxM10sIDB4NWE4Mjc5OTksIDgpOyBlbCA9IHJvdGwoZWwsIDEwKVxuICBibCA9IGZuMihibCwgY2wsIGRsLCBlbCwgYWwsIG1bMV0sIDB4NWE4Mjc5OTksIDEzKTsgZGwgPSByb3RsKGRsLCAxMClcbiAgYWwgPSBmbjIoYWwsIGJsLCBjbCwgZGwsIGVsLCBtWzEwXSwgMHg1YTgyNzk5OSwgMTEpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuMihlbCwgYWwsIGJsLCBjbCwgZGwsIG1bNl0sIDB4NWE4Mjc5OTksIDkpOyBibCA9IHJvdGwoYmwsIDEwKVxuICBkbCA9IGZuMihkbCwgZWwsIGFsLCBibCwgY2wsIG1bMTVdLCAweDVhODI3OTk5LCA3KTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjIoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzNdLCAweDVhODI3OTk5LCAxNSk7IGVsID0gcm90bChlbCwgMTApXG4gIGJsID0gZm4yKGJsLCBjbCwgZGwsIGVsLCBhbCwgbVsxMl0sIDB4NWE4Mjc5OTksIDcpOyBkbCA9IHJvdGwoZGwsIDEwKVxuICBhbCA9IGZuMihhbCwgYmwsIGNsLCBkbCwgZWwsIG1bMF0sIDB4NWE4Mjc5OTksIDEyKTsgY2wgPSByb3RsKGNsLCAxMClcbiAgZWwgPSBmbjIoZWwsIGFsLCBibCwgY2wsIGRsLCBtWzldLCAweDVhODI3OTk5LCAxNSk7IGJsID0gcm90bChibCwgMTApXG4gIGRsID0gZm4yKGRsLCBlbCwgYWwsIGJsLCBjbCwgbVs1XSwgMHg1YTgyNzk5OSwgOSk7IGFsID0gcm90bChhbCwgMTApXG4gIGNsID0gZm4yKGNsLCBkbCwgZWwsIGFsLCBibCwgbVsyXSwgMHg1YTgyNzk5OSwgMTEpOyBlbCA9IHJvdGwoZWwsIDEwKVxuICBibCA9IGZuMihibCwgY2wsIGRsLCBlbCwgYWwsIG1bMTRdLCAweDVhODI3OTk5LCA3KTsgZGwgPSByb3RsKGRsLCAxMClcbiAgYWwgPSBmbjIoYWwsIGJsLCBjbCwgZGwsIGVsLCBtWzExXSwgMHg1YTgyNzk5OSwgMTMpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuMihlbCwgYWwsIGJsLCBjbCwgZGwsIG1bOF0sIDB4NWE4Mjc5OTksIDEyKTsgYmwgPSByb3RsKGJsLCAxMClcblxuICAvLyBNaiA9IDMsIDEwLCAxNCwgNCwgOSwgMTUsIDgsIDEsIDIsIDcsIDAsIDYsIDEzLCAxMSwgNSwgMTJcbiAgLy8gSyA9IDB4NmVkOWViYTFcbiAgLy8gU2ogPSAxMSwgMTMsIDYsIDcsIDE0LCA5LCAxMywgMTUsIDE0LCA4LCAxMywgNiwgNSwgMTIsIDcsIDVcbiAgZGwgPSBmbjMoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzNdLCAweDZlZDllYmExLCAxMSk7IGFsID0gcm90bChhbCwgMTApXG4gIGNsID0gZm4zKGNsLCBkbCwgZWwsIGFsLCBibCwgbVsxMF0sIDB4NmVkOWViYTEsIDEzKTsgZWwgPSByb3RsKGVsLCAxMClcbiAgYmwgPSBmbjMoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzE0XSwgMHg2ZWQ5ZWJhMSwgNik7IGRsID0gcm90bChkbCwgMTApXG4gIGFsID0gZm4zKGFsLCBibCwgY2wsIGRsLCBlbCwgbVs0XSwgMHg2ZWQ5ZWJhMSwgNyk7IGNsID0gcm90bChjbCwgMTApXG4gIGVsID0gZm4zKGVsLCBhbCwgYmwsIGNsLCBkbCwgbVs5XSwgMHg2ZWQ5ZWJhMSwgMTQpOyBibCA9IHJvdGwoYmwsIDEwKVxuICBkbCA9IGZuMyhkbCwgZWwsIGFsLCBibCwgY2wsIG1bMTVdLCAweDZlZDllYmExLCA5KTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjMoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzhdLCAweDZlZDllYmExLCAxMyk7IGVsID0gcm90bChlbCwgMTApXG4gIGJsID0gZm4zKGJsLCBjbCwgZGwsIGVsLCBhbCwgbVsxXSwgMHg2ZWQ5ZWJhMSwgMTUpOyBkbCA9IHJvdGwoZGwsIDEwKVxuICBhbCA9IGZuMyhhbCwgYmwsIGNsLCBkbCwgZWwsIG1bMl0sIDB4NmVkOWViYTEsIDE0KTsgY2wgPSByb3RsKGNsLCAxMClcbiAgZWwgPSBmbjMoZWwsIGFsLCBibCwgY2wsIGRsLCBtWzddLCAweDZlZDllYmExLCA4KTsgYmwgPSByb3RsKGJsLCAxMClcbiAgZGwgPSBmbjMoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzBdLCAweDZlZDllYmExLCAxMyk7IGFsID0gcm90bChhbCwgMTApXG4gIGNsID0gZm4zKGNsLCBkbCwgZWwsIGFsLCBibCwgbVs2XSwgMHg2ZWQ5ZWJhMSwgNik7IGVsID0gcm90bChlbCwgMTApXG4gIGJsID0gZm4zKGJsLCBjbCwgZGwsIGVsLCBhbCwgbVsxM10sIDB4NmVkOWViYTEsIDUpOyBkbCA9IHJvdGwoZGwsIDEwKVxuICBhbCA9IGZuMyhhbCwgYmwsIGNsLCBkbCwgZWwsIG1bMTFdLCAweDZlZDllYmExLCAxMik7IGNsID0gcm90bChjbCwgMTApXG4gIGVsID0gZm4zKGVsLCBhbCwgYmwsIGNsLCBkbCwgbVs1XSwgMHg2ZWQ5ZWJhMSwgNyk7IGJsID0gcm90bChibCwgMTApXG4gIGRsID0gZm4zKGRsLCBlbCwgYWwsIGJsLCBjbCwgbVsxMl0sIDB4NmVkOWViYTEsIDUpOyBhbCA9IHJvdGwoYWwsIDEwKVxuXG4gIC8vIE1qID0gMSwgOSwgMTEsIDEwLCAwLCA4LCAxMiwgNCwgMTMsIDMsIDcsIDE1LCAxNCwgNSwgNiwgMlxuICAvLyBLID0gMHg4ZjFiYmNkY1xuICAvLyBTaiA9IDExLCAxMiwgMTQsIDE1LCAxNCwgMTUsIDksIDgsIDksIDE0LCA1LCA2LCA4LCA2LCA1LCAxMlxuICBjbCA9IGZuNChjbCwgZGwsIGVsLCBhbCwgYmwsIG1bMV0sIDB4OGYxYmJjZGMsIDExKTsgZWwgPSByb3RsKGVsLCAxMClcbiAgYmwgPSBmbjQoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzldLCAweDhmMWJiY2RjLCAxMik7IGRsID0gcm90bChkbCwgMTApXG4gIGFsID0gZm40KGFsLCBibCwgY2wsIGRsLCBlbCwgbVsxMV0sIDB4OGYxYmJjZGMsIDE0KTsgY2wgPSByb3RsKGNsLCAxMClcbiAgZWwgPSBmbjQoZWwsIGFsLCBibCwgY2wsIGRsLCBtWzEwXSwgMHg4ZjFiYmNkYywgMTUpOyBibCA9IHJvdGwoYmwsIDEwKVxuICBkbCA9IGZuNChkbCwgZWwsIGFsLCBibCwgY2wsIG1bMF0sIDB4OGYxYmJjZGMsIDE0KTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjQoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzhdLCAweDhmMWJiY2RjLCAxNSk7IGVsID0gcm90bChlbCwgMTApXG4gIGJsID0gZm40KGJsLCBjbCwgZGwsIGVsLCBhbCwgbVsxMl0sIDB4OGYxYmJjZGMsIDkpOyBkbCA9IHJvdGwoZGwsIDEwKVxuICBhbCA9IGZuNChhbCwgYmwsIGNsLCBkbCwgZWwsIG1bNF0sIDB4OGYxYmJjZGMsIDgpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuNChlbCwgYWwsIGJsLCBjbCwgZGwsIG1bMTNdLCAweDhmMWJiY2RjLCA5KTsgYmwgPSByb3RsKGJsLCAxMClcbiAgZGwgPSBmbjQoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzNdLCAweDhmMWJiY2RjLCAxNCk7IGFsID0gcm90bChhbCwgMTApXG4gIGNsID0gZm40KGNsLCBkbCwgZWwsIGFsLCBibCwgbVs3XSwgMHg4ZjFiYmNkYywgNSk7IGVsID0gcm90bChlbCwgMTApXG4gIGJsID0gZm40KGJsLCBjbCwgZGwsIGVsLCBhbCwgbVsxNV0sIDB4OGYxYmJjZGMsIDYpOyBkbCA9IHJvdGwoZGwsIDEwKVxuICBhbCA9IGZuNChhbCwgYmwsIGNsLCBkbCwgZWwsIG1bMTRdLCAweDhmMWJiY2RjLCA4KTsgY2wgPSByb3RsKGNsLCAxMClcbiAgZWwgPSBmbjQoZWwsIGFsLCBibCwgY2wsIGRsLCBtWzVdLCAweDhmMWJiY2RjLCA2KTsgYmwgPSByb3RsKGJsLCAxMClcbiAgZGwgPSBmbjQoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzZdLCAweDhmMWJiY2RjLCA1KTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjQoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzJdLCAweDhmMWJiY2RjLCAxMik7IGVsID0gcm90bChlbCwgMTApXG5cbiAgLy8gTWogPSA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG4gIC8vIEsgPSAweGE5NTNmZDRlXG4gIC8vIFNqID0gOSwgMTUsIDUsIDExLCA2LCA4LCAxMywgMTIsIDUsIDEyLCAxMywgMTQsIDExLCA4LCA1LCA2XG4gIGJsID0gZm41KGJsLCBjbCwgZGwsIGVsLCBhbCwgbVs0XSwgMHhhOTUzZmQ0ZSwgOSk7IGRsID0gcm90bChkbCwgMTApXG4gIGFsID0gZm41KGFsLCBibCwgY2wsIGRsLCBlbCwgbVswXSwgMHhhOTUzZmQ0ZSwgMTUpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuNShlbCwgYWwsIGJsLCBjbCwgZGwsIG1bNV0sIDB4YTk1M2ZkNGUsIDUpOyBibCA9IHJvdGwoYmwsIDEwKVxuICBkbCA9IGZuNShkbCwgZWwsIGFsLCBibCwgY2wsIG1bOV0sIDB4YTk1M2ZkNGUsIDExKTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjUoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzddLCAweGE5NTNmZDRlLCA2KTsgZWwgPSByb3RsKGVsLCAxMClcbiAgYmwgPSBmbjUoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzEyXSwgMHhhOTUzZmQ0ZSwgOCk7IGRsID0gcm90bChkbCwgMTApXG4gIGFsID0gZm41KGFsLCBibCwgY2wsIGRsLCBlbCwgbVsyXSwgMHhhOTUzZmQ0ZSwgMTMpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuNShlbCwgYWwsIGJsLCBjbCwgZGwsIG1bMTBdLCAweGE5NTNmZDRlLCAxMik7IGJsID0gcm90bChibCwgMTApXG4gIGRsID0gZm41KGRsLCBlbCwgYWwsIGJsLCBjbCwgbVsxNF0sIDB4YTk1M2ZkNGUsIDUpOyBhbCA9IHJvdGwoYWwsIDEwKVxuICBjbCA9IGZuNShjbCwgZGwsIGVsLCBhbCwgYmwsIG1bMV0sIDB4YTk1M2ZkNGUsIDEyKTsgZWwgPSByb3RsKGVsLCAxMClcbiAgYmwgPSBmbjUoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzNdLCAweGE5NTNmZDRlLCAxMyk7IGRsID0gcm90bChkbCwgMTApXG4gIGFsID0gZm41KGFsLCBibCwgY2wsIGRsLCBlbCwgbVs4XSwgMHhhOTUzZmQ0ZSwgMTQpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuNShlbCwgYWwsIGJsLCBjbCwgZGwsIG1bMTFdLCAweGE5NTNmZDRlLCAxMSk7IGJsID0gcm90bChibCwgMTApXG4gIGRsID0gZm41KGRsLCBlbCwgYWwsIGJsLCBjbCwgbVs2XSwgMHhhOTUzZmQ0ZSwgOCk7IGFsID0gcm90bChhbCwgMTApXG4gIGNsID0gZm41KGNsLCBkbCwgZWwsIGFsLCBibCwgbVsxNV0sIDB4YTk1M2ZkNGUsIDUpOyBlbCA9IHJvdGwoZWwsIDEwKVxuICBibCA9IGZuNShibCwgY2wsIGRsLCBlbCwgYWwsIG1bMTNdLCAweGE5NTNmZDRlLCA2KTsgZGwgPSByb3RsKGRsLCAxMClcblxuICB2YXIgYXIgPSB0aGlzLl9hXG4gIHZhciBiciA9IHRoaXMuX2JcbiAgdmFyIGNyID0gdGhpcy5fY1xuICB2YXIgZHIgPSB0aGlzLl9kXG4gIHZhciBlciA9IHRoaXMuX2VcblxuICAvLyBNJ2ogPSA1LCAxNCwgNywgMCwgOSwgMiwgMTEsIDQsIDEzLCA2LCAxNSwgOCwgMSwgMTAsIDMsIDEyXG4gIC8vIEsnID0gMHg1MGEyOGJlNlxuICAvLyBTJ2ogPSA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDZcbiAgYXIgPSBmbjUoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzVdLCAweDUwYTI4YmU2LCA4KTsgY3IgPSByb3RsKGNyLCAxMClcbiAgZXIgPSBmbjUoZXIsIGFyLCBiciwgY3IsIGRyLCBtWzE0XSwgMHg1MGEyOGJlNiwgOSk7IGJyID0gcm90bChiciwgMTApXG4gIGRyID0gZm41KGRyLCBlciwgYXIsIGJyLCBjciwgbVs3XSwgMHg1MGEyOGJlNiwgOSk7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm41KGNyLCBkciwgZXIsIGFyLCBiciwgbVswXSwgMHg1MGEyOGJlNiwgMTEpOyBlciA9IHJvdGwoZXIsIDEwKVxuICBiciA9IGZuNShiciwgY3IsIGRyLCBlciwgYXIsIG1bOV0sIDB4NTBhMjhiZTYsIDEzKTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjUoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzJdLCAweDUwYTI4YmU2LCAxNSk7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm41KGVyLCBhciwgYnIsIGNyLCBkciwgbVsxMV0sIDB4NTBhMjhiZTYsIDE1KTsgYnIgPSByb3RsKGJyLCAxMClcbiAgZHIgPSBmbjUoZHIsIGVyLCBhciwgYnIsIGNyLCBtWzRdLCAweDUwYTI4YmU2LCA1KTsgYXIgPSByb3RsKGFyLCAxMClcbiAgY3IgPSBmbjUoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzEzXSwgMHg1MGEyOGJlNiwgNyk7IGVyID0gcm90bChlciwgMTApXG4gIGJyID0gZm41KGJyLCBjciwgZHIsIGVyLCBhciwgbVs2XSwgMHg1MGEyOGJlNiwgNyk7IGRyID0gcm90bChkciwgMTApXG4gIGFyID0gZm41KGFyLCBiciwgY3IsIGRyLCBlciwgbVsxNV0sIDB4NTBhMjhiZTYsIDgpOyBjciA9IHJvdGwoY3IsIDEwKVxuICBlciA9IGZuNShlciwgYXIsIGJyLCBjciwgZHIsIG1bOF0sIDB4NTBhMjhiZTYsIDExKTsgYnIgPSByb3RsKGJyLCAxMClcbiAgZHIgPSBmbjUoZHIsIGVyLCBhciwgYnIsIGNyLCBtWzFdLCAweDUwYTI4YmU2LCAxNCk7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm41KGNyLCBkciwgZXIsIGFyLCBiciwgbVsxMF0sIDB4NTBhMjhiZTYsIDE0KTsgZXIgPSByb3RsKGVyLCAxMClcbiAgYnIgPSBmbjUoYnIsIGNyLCBkciwgZXIsIGFyLCBtWzNdLCAweDUwYTI4YmU2LCAxMik7IGRyID0gcm90bChkciwgMTApXG4gIGFyID0gZm41KGFyLCBiciwgY3IsIGRyLCBlciwgbVsxMl0sIDB4NTBhMjhiZTYsIDYpOyBjciA9IHJvdGwoY3IsIDEwKVxuXG4gIC8vIE0naiA9IDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDJcbiAgLy8gSycgPSAweDVjNGRkMTI0XG4gIC8vIFMnaiA9IDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMVxuICBlciA9IGZuNChlciwgYXIsIGJyLCBjciwgZHIsIG1bNl0sIDB4NWM0ZGQxMjQsIDkpOyBiciA9IHJvdGwoYnIsIDEwKVxuICBkciA9IGZuNChkciwgZXIsIGFyLCBiciwgY3IsIG1bMTFdLCAweDVjNGRkMTI0LCAxMyk7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm40KGNyLCBkciwgZXIsIGFyLCBiciwgbVszXSwgMHg1YzRkZDEyNCwgMTUpOyBlciA9IHJvdGwoZXIsIDEwKVxuICBiciA9IGZuNChiciwgY3IsIGRyLCBlciwgYXIsIG1bN10sIDB4NWM0ZGQxMjQsIDcpOyBkciA9IHJvdGwoZHIsIDEwKVxuICBhciA9IGZuNChhciwgYnIsIGNyLCBkciwgZXIsIG1bMF0sIDB4NWM0ZGQxMjQsIDEyKTsgY3IgPSByb3RsKGNyLCAxMClcbiAgZXIgPSBmbjQoZXIsIGFyLCBiciwgY3IsIGRyLCBtWzEzXSwgMHg1YzRkZDEyNCwgOCk7IGJyID0gcm90bChiciwgMTApXG4gIGRyID0gZm40KGRyLCBlciwgYXIsIGJyLCBjciwgbVs1XSwgMHg1YzRkZDEyNCwgOSk7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm40KGNyLCBkciwgZXIsIGFyLCBiciwgbVsxMF0sIDB4NWM0ZGQxMjQsIDExKTsgZXIgPSByb3RsKGVyLCAxMClcbiAgYnIgPSBmbjQoYnIsIGNyLCBkciwgZXIsIGFyLCBtWzE0XSwgMHg1YzRkZDEyNCwgNyk7IGRyID0gcm90bChkciwgMTApXG4gIGFyID0gZm40KGFyLCBiciwgY3IsIGRyLCBlciwgbVsxNV0sIDB4NWM0ZGQxMjQsIDcpOyBjciA9IHJvdGwoY3IsIDEwKVxuICBlciA9IGZuNChlciwgYXIsIGJyLCBjciwgZHIsIG1bOF0sIDB4NWM0ZGQxMjQsIDEyKTsgYnIgPSByb3RsKGJyLCAxMClcbiAgZHIgPSBmbjQoZHIsIGVyLCBhciwgYnIsIGNyLCBtWzEyXSwgMHg1YzRkZDEyNCwgNyk7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm40KGNyLCBkciwgZXIsIGFyLCBiciwgbVs0XSwgMHg1YzRkZDEyNCwgNik7IGVyID0gcm90bChlciwgMTApXG4gIGJyID0gZm40KGJyLCBjciwgZHIsIGVyLCBhciwgbVs5XSwgMHg1YzRkZDEyNCwgMTUpOyBkciA9IHJvdGwoZHIsIDEwKVxuICBhciA9IGZuNChhciwgYnIsIGNyLCBkciwgZXIsIG1bMV0sIDB4NWM0ZGQxMjQsIDEzKTsgY3IgPSByb3RsKGNyLCAxMClcbiAgZXIgPSBmbjQoZXIsIGFyLCBiciwgY3IsIGRyLCBtWzJdLCAweDVjNGRkMTI0LCAxMSk7IGJyID0gcm90bChiciwgMTApXG5cbiAgLy8gTSdqID0gMTUsIDUsIDEsIDMsIDcsIDE0LCA2LCA5LCAxMSwgOCwgMTIsIDIsIDEwLCAwLCA0LCAxM1xuICAvLyBLJyA9IDB4NmQ3MDNlZjNcbiAgLy8gUydqID0gOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1XG4gIGRyID0gZm4zKGRyLCBlciwgYXIsIGJyLCBjciwgbVsxNV0sIDB4NmQ3MDNlZjMsIDkpOyBhciA9IHJvdGwoYXIsIDEwKVxuICBjciA9IGZuMyhjciwgZHIsIGVyLCBhciwgYnIsIG1bNV0sIDB4NmQ3MDNlZjMsIDcpOyBlciA9IHJvdGwoZXIsIDEwKVxuICBiciA9IGZuMyhiciwgY3IsIGRyLCBlciwgYXIsIG1bMV0sIDB4NmQ3MDNlZjMsIDE1KTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjMoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzNdLCAweDZkNzAzZWYzLCAxMSk7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm4zKGVyLCBhciwgYnIsIGNyLCBkciwgbVs3XSwgMHg2ZDcwM2VmMywgOCk7IGJyID0gcm90bChiciwgMTApXG4gIGRyID0gZm4zKGRyLCBlciwgYXIsIGJyLCBjciwgbVsxNF0sIDB4NmQ3MDNlZjMsIDYpOyBhciA9IHJvdGwoYXIsIDEwKVxuICBjciA9IGZuMyhjciwgZHIsIGVyLCBhciwgYnIsIG1bNl0sIDB4NmQ3MDNlZjMsIDYpOyBlciA9IHJvdGwoZXIsIDEwKVxuICBiciA9IGZuMyhiciwgY3IsIGRyLCBlciwgYXIsIG1bOV0sIDB4NmQ3MDNlZjMsIDE0KTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjMoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzExXSwgMHg2ZDcwM2VmMywgMTIpOyBjciA9IHJvdGwoY3IsIDEwKVxuICBlciA9IGZuMyhlciwgYXIsIGJyLCBjciwgZHIsIG1bOF0sIDB4NmQ3MDNlZjMsIDEzKTsgYnIgPSByb3RsKGJyLCAxMClcbiAgZHIgPSBmbjMoZHIsIGVyLCBhciwgYnIsIGNyLCBtWzEyXSwgMHg2ZDcwM2VmMywgNSk7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm4zKGNyLCBkciwgZXIsIGFyLCBiciwgbVsyXSwgMHg2ZDcwM2VmMywgMTQpOyBlciA9IHJvdGwoZXIsIDEwKVxuICBiciA9IGZuMyhiciwgY3IsIGRyLCBlciwgYXIsIG1bMTBdLCAweDZkNzAzZWYzLCAxMyk7IGRyID0gcm90bChkciwgMTApXG4gIGFyID0gZm4zKGFyLCBiciwgY3IsIGRyLCBlciwgbVswXSwgMHg2ZDcwM2VmMywgMTMpOyBjciA9IHJvdGwoY3IsIDEwKVxuICBlciA9IGZuMyhlciwgYXIsIGJyLCBjciwgZHIsIG1bNF0sIDB4NmQ3MDNlZjMsIDcpOyBiciA9IHJvdGwoYnIsIDEwKVxuICBkciA9IGZuMyhkciwgZXIsIGFyLCBiciwgY3IsIG1bMTNdLCAweDZkNzAzZWYzLCA1KTsgYXIgPSByb3RsKGFyLCAxMClcblxuICAvLyBNJ2ogPSA4LCA2LCA0LCAxLCAzLCAxMSwgMTUsIDAsIDUsIDEyLCAyLCAxMywgOSwgNywgMTAsIDE0XG4gIC8vIEsnID0gMHg3YTZkNzZlOVxuICAvLyBTJ2ogPSAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDhcbiAgY3IgPSBmbjIoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzhdLCAweDdhNmQ3NmU5LCAxNSk7IGVyID0gcm90bChlciwgMTApXG4gIGJyID0gZm4yKGJyLCBjciwgZHIsIGVyLCBhciwgbVs2XSwgMHg3YTZkNzZlOSwgNSk7IGRyID0gcm90bChkciwgMTApXG4gIGFyID0gZm4yKGFyLCBiciwgY3IsIGRyLCBlciwgbVs0XSwgMHg3YTZkNzZlOSwgOCk7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm4yKGVyLCBhciwgYnIsIGNyLCBkciwgbVsxXSwgMHg3YTZkNzZlOSwgMTEpOyBiciA9IHJvdGwoYnIsIDEwKVxuICBkciA9IGZuMihkciwgZXIsIGFyLCBiciwgY3IsIG1bM10sIDB4N2E2ZDc2ZTksIDE0KTsgYXIgPSByb3RsKGFyLCAxMClcbiAgY3IgPSBmbjIoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzExXSwgMHg3YTZkNzZlOSwgMTQpOyBlciA9IHJvdGwoZXIsIDEwKVxuICBiciA9IGZuMihiciwgY3IsIGRyLCBlciwgYXIsIG1bMTVdLCAweDdhNmQ3NmU5LCA2KTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjIoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzBdLCAweDdhNmQ3NmU5LCAxNCk7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm4yKGVyLCBhciwgYnIsIGNyLCBkciwgbVs1XSwgMHg3YTZkNzZlOSwgNik7IGJyID0gcm90bChiciwgMTApXG4gIGRyID0gZm4yKGRyLCBlciwgYXIsIGJyLCBjciwgbVsxMl0sIDB4N2E2ZDc2ZTksIDkpOyBhciA9IHJvdGwoYXIsIDEwKVxuICBjciA9IGZuMihjciwgZHIsIGVyLCBhciwgYnIsIG1bMl0sIDB4N2E2ZDc2ZTksIDEyKTsgZXIgPSByb3RsKGVyLCAxMClcbiAgYnIgPSBmbjIoYnIsIGNyLCBkciwgZXIsIGFyLCBtWzEzXSwgMHg3YTZkNzZlOSwgOSk7IGRyID0gcm90bChkciwgMTApXG4gIGFyID0gZm4yKGFyLCBiciwgY3IsIGRyLCBlciwgbVs5XSwgMHg3YTZkNzZlOSwgMTIpOyBjciA9IHJvdGwoY3IsIDEwKVxuICBlciA9IGZuMihlciwgYXIsIGJyLCBjciwgZHIsIG1bN10sIDB4N2E2ZDc2ZTksIDUpOyBiciA9IHJvdGwoYnIsIDEwKVxuICBkciA9IGZuMihkciwgZXIsIGFyLCBiciwgY3IsIG1bMTBdLCAweDdhNmQ3NmU5LCAxNSk7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm4yKGNyLCBkciwgZXIsIGFyLCBiciwgbVsxNF0sIDB4N2E2ZDc2ZTksIDgpOyBlciA9IHJvdGwoZXIsIDEwKVxuXG4gIC8vIE0naiA9IDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbiAgLy8gSycgPSAweDAwMDAwMDAwXG4gIC8vIFMnaiA9IDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuICBiciA9IGZuMShiciwgY3IsIGRyLCBlciwgYXIsIG1bMTJdLCAweDAwMDAwMDAwLCA4KTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjEoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzE1XSwgMHgwMDAwMDAwMCwgNSk7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm4xKGVyLCBhciwgYnIsIGNyLCBkciwgbVsxMF0sIDB4MDAwMDAwMDAsIDEyKTsgYnIgPSByb3RsKGJyLCAxMClcbiAgZHIgPSBmbjEoZHIsIGVyLCBhciwgYnIsIGNyLCBtWzRdLCAweDAwMDAwMDAwLCA5KTsgYXIgPSByb3RsKGFyLCAxMClcbiAgY3IgPSBmbjEoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzFdLCAweDAwMDAwMDAwLCAxMik7IGVyID0gcm90bChlciwgMTApXG4gIGJyID0gZm4xKGJyLCBjciwgZHIsIGVyLCBhciwgbVs1XSwgMHgwMDAwMDAwMCwgNSk7IGRyID0gcm90bChkciwgMTApXG4gIGFyID0gZm4xKGFyLCBiciwgY3IsIGRyLCBlciwgbVs4XSwgMHgwMDAwMDAwMCwgMTQpOyBjciA9IHJvdGwoY3IsIDEwKVxuICBlciA9IGZuMShlciwgYXIsIGJyLCBjciwgZHIsIG1bN10sIDB4MDAwMDAwMDAsIDYpOyBiciA9IHJvdGwoYnIsIDEwKVxuICBkciA9IGZuMShkciwgZXIsIGFyLCBiciwgY3IsIG1bNl0sIDB4MDAwMDAwMDAsIDgpOyBhciA9IHJvdGwoYXIsIDEwKVxuICBjciA9IGZuMShjciwgZHIsIGVyLCBhciwgYnIsIG1bMl0sIDB4MDAwMDAwMDAsIDEzKTsgZXIgPSByb3RsKGVyLCAxMClcbiAgYnIgPSBmbjEoYnIsIGNyLCBkciwgZXIsIGFyLCBtWzEzXSwgMHgwMDAwMDAwMCwgNik7IGRyID0gcm90bChkciwgMTApXG4gIGFyID0gZm4xKGFyLCBiciwgY3IsIGRyLCBlciwgbVsxNF0sIDB4MDAwMDAwMDAsIDUpOyBjciA9IHJvdGwoY3IsIDEwKVxuICBlciA9IGZuMShlciwgYXIsIGJyLCBjciwgZHIsIG1bMF0sIDB4MDAwMDAwMDAsIDE1KTsgYnIgPSByb3RsKGJyLCAxMClcbiAgZHIgPSBmbjEoZHIsIGVyLCBhciwgYnIsIGNyLCBtWzNdLCAweDAwMDAwMDAwLCAxMyk7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm4xKGNyLCBkciwgZXIsIGFyLCBiciwgbVs5XSwgMHgwMDAwMDAwMCwgMTEpOyBlciA9IHJvdGwoZXIsIDEwKVxuICBiciA9IGZuMShiciwgY3IsIGRyLCBlciwgYXIsIG1bMTFdLCAweDAwMDAwMDAwLCAxMSk7IGRyID0gcm90bChkciwgMTApXG5cbiAgLy8gY2hhbmdlIHN0YXRlXG4gIHZhciB0ID0gKHRoaXMuX2IgKyBjbCArIGRyKSB8IDBcbiAgdGhpcy5fYiA9ICh0aGlzLl9jICsgZGwgKyBlcikgfCAwXG4gIHRoaXMuX2MgPSAodGhpcy5fZCArIGVsICsgYXIpIHwgMFxuICB0aGlzLl9kID0gKHRoaXMuX2UgKyBhbCArIGJyKSB8IDBcbiAgdGhpcy5fZSA9ICh0aGlzLl9hICsgYmwgKyBjcikgfCAwXG4gIHRoaXMuX2EgPSB0XG59XG5cblJJUEVNRDE2MC5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gY3JlYXRlIHBhZGRpbmcgYW5kIGhhbmRsZSBibG9ja3NcbiAgdGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK10gPSAweDgwXG4gIGlmICh0aGlzLl9ibG9ja09mZnNldCA+IDU2KSB7XG4gICAgdGhpcy5fYmxvY2suZmlsbCgwLCB0aGlzLl9ibG9ja09mZnNldCwgNjQpXG4gICAgdGhpcy5fdXBkYXRlKClcbiAgICB0aGlzLl9ibG9ja09mZnNldCA9IDBcbiAgfVxuXG4gIHRoaXMuX2Jsb2NrLmZpbGwoMCwgdGhpcy5fYmxvY2tPZmZzZXQsIDU2KVxuICB0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSwgNTYpXG4gIHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLCA2MClcbiAgdGhpcy5fdXBkYXRlKClcblxuICAvLyBwcm9kdWNlIHJlc3VsdFxuICB2YXIgYnVmZmVyID0gbmV3IEJ1ZmZlcigyMClcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9hLCAwKVxuICBidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2IsIDQpXG4gIGJ1ZmZlci53cml0ZUludDMyTEUodGhpcy5fYywgOClcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9kLCAxMilcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9lLCAxNilcbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiByb3RsICh4LCBuKSB7XG4gIHJldHVybiAoeCA8PCBuKSB8ICh4ID4+PiAoMzIgLSBuKSlcbn1cblxuZnVuY3Rpb24gZm4xIChhLCBiLCBjLCBkLCBlLCBtLCBrLCBzKSB7XG4gIHJldHVybiAocm90bCgoYSArIChiIF4gYyBeIGQpICsgbSArIGspIHwgMCwgcykgKyBlKSB8IDBcbn1cblxuZnVuY3Rpb24gZm4yIChhLCBiLCBjLCBkLCBlLCBtLCBrLCBzKSB7XG4gIHJldHVybiAocm90bCgoYSArICgoYiAmIGMpIHwgKCh+YikgJiBkKSkgKyBtICsgaykgfCAwLCBzKSArIGUpIHwgMFxufVxuXG5mdW5jdGlvbiBmbjMgKGEsIGIsIGMsIGQsIGUsIG0sIGssIHMpIHtcbiAgcmV0dXJuIChyb3RsKChhICsgKChiIHwgKH5jKSkgXiBkKSArIG0gKyBrKSB8IDAsIHMpICsgZSkgfCAwXG59XG5cbmZ1bmN0aW9uIGZuNCAoYSwgYiwgYywgZCwgZSwgbSwgaywgcykge1xuICByZXR1cm4gKHJvdGwoKGEgKyAoKGIgJiBkKSB8IChjICYgKH5kKSkpICsgbSArIGspIHwgMCwgcykgKyBlKSB8IDBcbn1cblxuZnVuY3Rpb24gZm41IChhLCBiLCBjLCBkLCBlLCBtLCBrLCBzKSB7XG4gIHJldHVybiAocm90bCgoYSArIChiIF4gKGMgfCAofmQpKSkgKyBtICsgaykgfCAwLCBzKSArIGUpIHwgMFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJJUEVNRDE2MFxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdidWZmZXInKVxuIiwiOyhmdW5jdGlvbiAoc2F4KSB7IC8vIHdyYXBwZXIgZm9yIG5vbi1ub2RlIGVudnNcbiAgc2F4LnBhcnNlciA9IGZ1bmN0aW9uIChzdHJpY3QsIG9wdCkgeyByZXR1cm4gbmV3IFNBWFBhcnNlcihzdHJpY3QsIG9wdCkgfVxuICBzYXguU0FYUGFyc2VyID0gU0FYUGFyc2VyXG4gIHNheC5TQVhTdHJlYW0gPSBTQVhTdHJlYW1cbiAgc2F4LmNyZWF0ZVN0cmVhbSA9IGNyZWF0ZVN0cmVhbVxuXG4gIC8vIFdoZW4gd2UgcGFzcyB0aGUgTUFYX0JVRkZFUl9MRU5HVEggcG9zaXRpb24sIHN0YXJ0IGNoZWNraW5nIGZvciBidWZmZXIgb3ZlcnJ1bnMuXG4gIC8vIFdoZW4gd2UgY2hlY2ssIHNjaGVkdWxlIHRoZSBuZXh0IGNoZWNrIGZvciBNQVhfQlVGRkVSX0xFTkdUSCAtIChtYXgoYnVmZmVyIGxlbmd0aHMpKSxcbiAgLy8gc2luY2UgdGhhdCdzIHRoZSBlYXJsaWVzdCB0aGF0IGEgYnVmZmVyIG92ZXJydW4gY291bGQgb2NjdXIuICBUaGlzIHdheSwgY2hlY2tzIGFyZVxuICAvLyBhcyByYXJlIGFzIHJlcXVpcmVkLCBidXQgYXMgb2Z0ZW4gYXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBuZXZlciBjcm9zc2luZyB0aGlzIGJvdW5kLlxuICAvLyBGdXJ0aGVybW9yZSwgYnVmZmVycyBhcmUgb25seSB0ZXN0ZWQgYXQgbW9zdCBvbmNlIHBlciB3cml0ZSgpLCBzbyBwYXNzaW5nIGEgdmVyeVxuICAvLyBsYXJnZSBzdHJpbmcgaW50byB3cml0ZSgpIG1pZ2h0IGhhdmUgdW5kZXNpcmFibGUgZWZmZWN0cywgYnV0IHRoaXMgaXMgbWFuYWdlYWJsZSBieVxuICAvLyB0aGUgY2FsbGVyLCBzbyBpdCBpcyBhc3N1bWVkIHRvIGJlIHNhZmUuICBUaHVzLCBhIGNhbGwgdG8gd3JpdGUoKSBtYXksIGluIHRoZSBleHRyZW1lXG4gIC8vIGVkZ2UgY2FzZSwgcmVzdWx0IGluIGNyZWF0aW5nIGF0IG1vc3Qgb25lIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHN0cmluZyBwYXNzZWQgaW4uXG4gIC8vIFNldCB0byBJbmZpbml0eSB0byBoYXZlIHVubGltaXRlZCBidWZmZXJzLlxuICBzYXguTUFYX0JVRkZFUl9MRU5HVEggPSA2NCAqIDEwMjRcblxuICB2YXIgYnVmZmVycyA9IFtcbiAgICAnY29tbWVudCcsICdzZ21sRGVjbCcsICd0ZXh0Tm9kZScsICd0YWdOYW1lJywgJ2RvY3R5cGUnLFxuICAgICdwcm9jSW5zdE5hbWUnLCAncHJvY0luc3RCb2R5JywgJ2VudGl0eScsICdhdHRyaWJOYW1lJyxcbiAgICAnYXR0cmliVmFsdWUnLCAnY2RhdGEnLCAnc2NyaXB0J1xuICBdXG5cbiAgc2F4LkVWRU5UUyA9IFtcbiAgICAndGV4dCcsXG4gICAgJ3Byb2Nlc3NpbmdpbnN0cnVjdGlvbicsXG4gICAgJ3NnbWxkZWNsYXJhdGlvbicsXG4gICAgJ2RvY3R5cGUnLFxuICAgICdjb21tZW50JyxcbiAgICAnb3BlbnRhZ3N0YXJ0JyxcbiAgICAnYXR0cmlidXRlJyxcbiAgICAnb3BlbnRhZycsXG4gICAgJ2Nsb3NldGFnJyxcbiAgICAnb3BlbmNkYXRhJyxcbiAgICAnY2RhdGEnLFxuICAgICdjbG9zZWNkYXRhJyxcbiAgICAnZXJyb3InLFxuICAgICdlbmQnLFxuICAgICdyZWFkeScsXG4gICAgJ3NjcmlwdCcsXG4gICAgJ29wZW5uYW1lc3BhY2UnLFxuICAgICdjbG9zZW5hbWVzcGFjZSdcbiAgXVxuXG4gIGZ1bmN0aW9uIFNBWFBhcnNlciAoc3RyaWN0LCBvcHQpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0FYUGFyc2VyKSkge1xuICAgICAgcmV0dXJuIG5ldyBTQVhQYXJzZXIoc3RyaWN0LCBvcHQpXG4gICAgfVxuXG4gICAgdmFyIHBhcnNlciA9IHRoaXNcbiAgICBjbGVhckJ1ZmZlcnMocGFyc2VyKVxuICAgIHBhcnNlci5xID0gcGFyc2VyLmMgPSAnJ1xuICAgIHBhcnNlci5idWZmZXJDaGVja1Bvc2l0aW9uID0gc2F4Lk1BWF9CVUZGRVJfTEVOR1RIXG4gICAgcGFyc2VyLm9wdCA9IG9wdCB8fCB7fVxuICAgIHBhcnNlci5vcHQubG93ZXJjYXNlID0gcGFyc2VyLm9wdC5sb3dlcmNhc2UgfHwgcGFyc2VyLm9wdC5sb3dlcmNhc2V0YWdzXG4gICAgcGFyc2VyLmxvb3NlQ2FzZSA9IHBhcnNlci5vcHQubG93ZXJjYXNlID8gJ3RvTG93ZXJDYXNlJyA6ICd0b1VwcGVyQ2FzZSdcbiAgICBwYXJzZXIudGFncyA9IFtdXG4gICAgcGFyc2VyLmNsb3NlZCA9IHBhcnNlci5jbG9zZWRSb290ID0gcGFyc2VyLnNhd1Jvb3QgPSBmYWxzZVxuICAgIHBhcnNlci50YWcgPSBwYXJzZXIuZXJyb3IgPSBudWxsXG4gICAgcGFyc2VyLnN0cmljdCA9ICEhc3RyaWN0XG4gICAgcGFyc2VyLm5vc2NyaXB0ID0gISEoc3RyaWN0IHx8IHBhcnNlci5vcHQubm9zY3JpcHQpXG4gICAgcGFyc2VyLnN0YXRlID0gUy5CRUdJTlxuICAgIHBhcnNlci5zdHJpY3RFbnRpdGllcyA9IHBhcnNlci5vcHQuc3RyaWN0RW50aXRpZXNcbiAgICBwYXJzZXIuRU5USVRJRVMgPSBwYXJzZXIuc3RyaWN0RW50aXRpZXMgPyBPYmplY3QuY3JlYXRlKHNheC5YTUxfRU5USVRJRVMpIDogT2JqZWN0LmNyZWF0ZShzYXguRU5USVRJRVMpXG4gICAgcGFyc2VyLmF0dHJpYkxpc3QgPSBbXVxuXG4gICAgLy8gbmFtZXNwYWNlcyBmb3JtIGEgcHJvdG90eXBlIGNoYWluLlxuICAgIC8vIGl0IGFsd2F5cyBwb2ludHMgYXQgdGhlIGN1cnJlbnQgdGFnLFxuICAgIC8vIHdoaWNoIHByb3RvcyB0byBpdHMgcGFyZW50IHRhZy5cbiAgICBpZiAocGFyc2VyLm9wdC54bWxucykge1xuICAgICAgcGFyc2VyLm5zID0gT2JqZWN0LmNyZWF0ZShyb290TlMpXG4gICAgfVxuXG4gICAgLy8gbW9zdGx5IGp1c3QgZm9yIGVycm9yIHJlcG9ydGluZ1xuICAgIHBhcnNlci50cmFja1Bvc2l0aW9uID0gcGFyc2VyLm9wdC5wb3NpdGlvbiAhPT0gZmFsc2VcbiAgICBpZiAocGFyc2VyLnRyYWNrUG9zaXRpb24pIHtcbiAgICAgIHBhcnNlci5wb3NpdGlvbiA9IHBhcnNlci5saW5lID0gcGFyc2VyLmNvbHVtbiA9IDBcbiAgICB9XG4gICAgZW1pdChwYXJzZXIsICdvbnJlYWR5JylcbiAgfVxuXG4gIGlmICghT2JqZWN0LmNyZWF0ZSkge1xuICAgIE9iamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAobykge1xuICAgICAgZnVuY3Rpb24gRiAoKSB7fVxuICAgICAgRi5wcm90b3R5cGUgPSBvXG4gICAgICB2YXIgbmV3ZiA9IG5ldyBGKClcbiAgICAgIHJldHVybiBuZXdmXG4gICAgfVxuICB9XG5cbiAgaWYgKCFPYmplY3Qua2V5cykge1xuICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgIHZhciBhID0gW11cbiAgICAgIGZvciAodmFyIGkgaW4gbykgaWYgKG8uaGFzT3duUHJvcGVydHkoaSkpIGEucHVzaChpKVxuICAgICAgcmV0dXJuIGFcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0J1ZmZlckxlbmd0aCAocGFyc2VyKSB7XG4gICAgdmFyIG1heEFsbG93ZWQgPSBNYXRoLm1heChzYXguTUFYX0JVRkZFUl9MRU5HVEgsIDEwKVxuICAgIHZhciBtYXhBY3R1YWwgPSAwXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBidWZmZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGxlbiA9IHBhcnNlcltidWZmZXJzW2ldXS5sZW5ndGhcbiAgICAgIGlmIChsZW4gPiBtYXhBbGxvd2VkKSB7XG4gICAgICAgIC8vIFRleHQvY2RhdGEgbm9kZXMgY2FuIGdldCBiaWcsIGFuZCBzaW5jZSB0aGV5J3JlIGJ1ZmZlcmVkLFxuICAgICAgICAvLyB3ZSBjYW4gZ2V0IGhlcmUgdW5kZXIgbm9ybWFsIGNvbmRpdGlvbnMuXG4gICAgICAgIC8vIEF2b2lkIGlzc3VlcyBieSBlbWl0dGluZyB0aGUgdGV4dCBub2RlIG5vdyxcbiAgICAgICAgLy8gc28gYXQgbGVhc3QgaXQgd29uJ3QgZ2V0IGFueSBiaWdnZXIuXG4gICAgICAgIHN3aXRjaCAoYnVmZmVyc1tpXSkge1xuICAgICAgICAgIGNhc2UgJ3RleHROb2RlJzpcbiAgICAgICAgICAgIGNsb3NlVGV4dChwYXJzZXIpXG4gICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgY2FzZSAnY2RhdGEnOlxuICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25jZGF0YScsIHBhcnNlci5jZGF0YSlcbiAgICAgICAgICAgIHBhcnNlci5jZGF0YSA9ICcnXG4gICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgY2FzZSAnc2NyaXB0JzpcbiAgICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uc2NyaXB0JywgcGFyc2VyLnNjcmlwdClcbiAgICAgICAgICAgIHBhcnNlci5zY3JpcHQgPSAnJ1xuICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBlcnJvcihwYXJzZXIsICdNYXggYnVmZmVyIGxlbmd0aCBleGNlZWRlZDogJyArIGJ1ZmZlcnNbaV0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG1heEFjdHVhbCA9IE1hdGgubWF4KG1heEFjdHVhbCwgbGVuKVxuICAgIH1cbiAgICAvLyBzY2hlZHVsZSB0aGUgbmV4dCBjaGVjayBmb3IgdGhlIGVhcmxpZXN0IHBvc3NpYmxlIGJ1ZmZlciBvdmVycnVuLlxuICAgIHZhciBtID0gc2F4Lk1BWF9CVUZGRVJfTEVOR1RIIC0gbWF4QWN0dWFsXG4gICAgcGFyc2VyLmJ1ZmZlckNoZWNrUG9zaXRpb24gPSBtICsgcGFyc2VyLnBvc2l0aW9uXG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckJ1ZmZlcnMgKHBhcnNlcikge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYnVmZmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHBhcnNlcltidWZmZXJzW2ldXSA9ICcnXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2hCdWZmZXJzIChwYXJzZXIpIHtcbiAgICBjbG9zZVRleHQocGFyc2VyKVxuICAgIGlmIChwYXJzZXIuY2RhdGEgIT09ICcnKSB7XG4gICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbmNkYXRhJywgcGFyc2VyLmNkYXRhKVxuICAgICAgcGFyc2VyLmNkYXRhID0gJydcbiAgICB9XG4gICAgaWYgKHBhcnNlci5zY3JpcHQgIT09ICcnKSB7XG4gICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbnNjcmlwdCcsIHBhcnNlci5zY3JpcHQpXG4gICAgICBwYXJzZXIuc2NyaXB0ID0gJydcbiAgICB9XG4gIH1cblxuICBTQVhQYXJzZXIucHJvdG90eXBlID0ge1xuICAgIGVuZDogZnVuY3Rpb24gKCkgeyBlbmQodGhpcykgfSxcbiAgICB3cml0ZTogd3JpdGUsXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7IHRoaXMuZXJyb3IgPSBudWxsOyByZXR1cm4gdGhpcyB9LFxuICAgIGNsb3NlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLndyaXRlKG51bGwpIH0sXG4gICAgZmx1c2g6IGZ1bmN0aW9uICgpIHsgZmx1c2hCdWZmZXJzKHRoaXMpIH1cbiAgfVxuXG4gIHZhciBTdHJlYW1cbiAgdHJ5IHtcbiAgICBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW1cbiAgfSBjYXRjaCAoZXgpIHtcbiAgICBTdHJlYW0gPSBmdW5jdGlvbiAoKSB7fVxuICB9XG5cbiAgdmFyIHN0cmVhbVdyYXBzID0gc2F4LkVWRU5UUy5maWx0ZXIoZnVuY3Rpb24gKGV2KSB7XG4gICAgcmV0dXJuIGV2ICE9PSAnZXJyb3InICYmIGV2ICE9PSAnZW5kJ1xuICB9KVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmVhbSAoc3RyaWN0LCBvcHQpIHtcbiAgICByZXR1cm4gbmV3IFNBWFN0cmVhbShzdHJpY3QsIG9wdClcbiAgfVxuXG4gIGZ1bmN0aW9uIFNBWFN0cmVhbSAoc3RyaWN0LCBvcHQpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0FYU3RyZWFtKSkge1xuICAgICAgcmV0dXJuIG5ldyBTQVhTdHJlYW0oc3RyaWN0LCBvcHQpXG4gICAgfVxuXG4gICAgU3RyZWFtLmFwcGx5KHRoaXMpXG5cbiAgICB0aGlzLl9wYXJzZXIgPSBuZXcgU0FYUGFyc2VyKHN0cmljdCwgb3B0KVxuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlXG4gICAgdGhpcy5yZWFkYWJsZSA9IHRydWVcblxuICAgIHZhciBtZSA9IHRoaXNcblxuICAgIHRoaXMuX3BhcnNlci5vbmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLmVtaXQoJ2VuZCcpXG4gICAgfVxuXG4gICAgdGhpcy5fcGFyc2VyLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICAgIG1lLmVtaXQoJ2Vycm9yJywgZXIpXG5cbiAgICAgIC8vIGlmIGRpZG4ndCB0aHJvdywgdGhlbiBtZWFucyBlcnJvciB3YXMgaGFuZGxlZC5cbiAgICAgIC8vIGdvIGFoZWFkIGFuZCBjbGVhciBlcnJvciwgc28gd2UgY2FuIHdyaXRlIGFnYWluLlxuICAgICAgbWUuX3BhcnNlci5lcnJvciA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzLl9kZWNvZGVyID0gbnVsbFxuXG4gICAgc3RyZWFtV3JhcHMuZm9yRWFjaChmdW5jdGlvbiAoZXYpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZSwgJ29uJyArIGV2LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBtZS5fcGFyc2VyWydvbicgKyBldl1cbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoaCkge1xuICAgICAgICAgIGlmICghaCkge1xuICAgICAgICAgICAgbWUucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KVxuICAgICAgICAgICAgbWUuX3BhcnNlclsnb24nICsgZXZdID0gaFxuICAgICAgICAgICAgcmV0dXJuIGhcbiAgICAgICAgICB9XG4gICAgICAgICAgbWUub24oZXYsIGgpXG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIFNBWFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN0cmVhbS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IFNBWFN0cmVhbVxuICAgIH1cbiAgfSlcblxuICBTQVhTdHJlYW0ucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIEJ1ZmZlci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICBpZiAoIXRoaXMuX2RlY29kZXIpIHtcbiAgICAgICAgdmFyIFNEID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKS5TdHJpbmdEZWNvZGVyXG4gICAgICAgIHRoaXMuX2RlY29kZXIgPSBuZXcgU0QoJ3V0ZjgnKVxuICAgICAgfVxuICAgICAgZGF0YSA9IHRoaXMuX2RlY29kZXIud3JpdGUoZGF0YSlcbiAgICB9XG5cbiAgICB0aGlzLl9wYXJzZXIud3JpdGUoZGF0YS50b1N0cmluZygpKVxuICAgIHRoaXMuZW1pdCgnZGF0YScsIGRhdGEpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIFNBWFN0cmVhbS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkge1xuICAgICAgdGhpcy53cml0ZShjaHVuaylcbiAgICB9XG4gICAgdGhpcy5fcGFyc2VyLmVuZCgpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIFNBWFN0cmVhbS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGhhbmRsZXIpIHtcbiAgICB2YXIgbWUgPSB0aGlzXG4gICAgaWYgKCFtZS5fcGFyc2VyWydvbicgKyBldl0gJiYgc3RyZWFtV3JhcHMuaW5kZXhPZihldikgIT09IC0xKSB7XG4gICAgICBtZS5fcGFyc2VyWydvbicgKyBldl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IFthcmd1bWVudHNbMF1dIDogQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICAgICAgICBhcmdzLnNwbGljZSgwLCAwLCBldilcbiAgICAgICAgbWUuZW1pdC5hcHBseShtZSwgYXJncylcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKG1lLCBldiwgaGFuZGxlcilcbiAgfVxuXG4gIC8vIGNoYXJhY3RlciBjbGFzc2VzIGFuZCB0b2tlbnNcbiAgdmFyIHdoaXRlc3BhY2UgPSAnXFxyXFxuXFx0ICdcblxuICAvLyB0aGlzIHJlYWxseSBuZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoIGNoYXJhY3RlciBjbGFzc2VzLlxuICAvLyBYTUwgYWxsb3dzIGFsbCBtYW5uZXIgb2YgcmlkaWN1bG91cyBudW1iZXJzIGFuZCBkaWdpdHMuXG5cbiAgLy8gKExldHRlciB8IFwiX1wiIHwgXCI6XCIpXG4gIHZhciBxdW90ZSA9ICdcXCdcIidcbiAgdmFyIGF0dHJpYkVuZCA9IHdoaXRlc3BhY2UgKyAnPidcbiAgdmFyIENEQVRBID0gJ1tDREFUQVsnXG4gIHZhciBET0NUWVBFID0gJ0RPQ1RZUEUnXG4gIHZhciBYTUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSdcbiAgdmFyIFhNTE5TX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLydcbiAgdmFyIHJvb3ROUyA9IHsgeG1sOiBYTUxfTkFNRVNQQUNFLCB4bWxuczogWE1MTlNfTkFNRVNQQUNFIH1cblxuICAvLyB0dXJuIGFsbCB0aGUgc3RyaW5nIGNoYXJhY3RlciBzZXRzIGludG8gY2hhcmFjdGVyIGNsYXNzIG9iamVjdHMuXG4gIHdoaXRlc3BhY2UgPSBjaGFyQ2xhc3Mod2hpdGVzcGFjZSlcblxuICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLyNOVC1OYW1lU3RhcnRDaGFyXG4gIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gd29ya3Mgb24gc3RyaW5ncywgYSBzaW5nbGUgY2hhcmFjdGVyIGF0IGEgdGltZVxuICAvLyBhcyBzdWNoLCBpdCBjYW5ub3QgZXZlciBzdXBwb3J0IGFzdHJhbC1wbGFuZSBjaGFyYWN0ZXJzICgxMDAwMC1FRkZGRilcbiAgLy8gd2l0aG91dCBhIHNpZ25pZmljYW50IGJyZWFraW5nIGNoYW5nZSB0byBlaXRoZXIgdGhpcyAgcGFyc2VyLCBvciB0aGVcbiAgLy8gSmF2YVNjcmlwdCBsYW5ndWFnZS4gIEltcGxlbWVudGF0aW9uIG9mIGFuIGVtb2ppLWNhcGFibGUgeG1sIHBhcnNlclxuICAvLyBpcyBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxuICB2YXIgbmFtZVN0YXJ0ID0gL1s6X0EtWmEtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRF0vXG5cbiAgdmFyIG5hbWVCb2R5ID0gL1s6X0EtWmEtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDAuXFxkLV0vXG5cbiAgdmFyIGVudGl0eVN0YXJ0ID0gL1sjOl9BLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdL1xuICB2YXIgZW50aXR5Qm9keSA9IC9bIzpfQS1aYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFx1MDBCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MC5cXGQtXS9cblxuICBxdW90ZSA9IGNoYXJDbGFzcyhxdW90ZSlcbiAgYXR0cmliRW5kID0gY2hhckNsYXNzKGF0dHJpYkVuZClcblxuICBmdW5jdGlvbiBjaGFyQ2xhc3MgKHN0cikge1xuICAgIHJldHVybiBzdHIuc3BsaXQoJycpLnJlZHVjZShmdW5jdGlvbiAocywgYykge1xuICAgICAgc1tjXSA9IHRydWVcbiAgICAgIHJldHVybiBzXG4gICAgfSwge30pXG4gIH1cblxuICBmdW5jdGlvbiBpc01hdGNoIChyZWdleCwgYykge1xuICAgIHJldHVybiByZWdleC50ZXN0KGMpXG4gIH1cblxuICBmdW5jdGlvbiBpcyAoY2hhcmNsYXNzLCBjKSB7XG4gICAgcmV0dXJuIGNoYXJjbGFzc1tjXVxuICB9XG5cbiAgZnVuY3Rpb24gbm90TWF0Y2ggKHJlZ2V4LCBjKSB7XG4gICAgcmV0dXJuICFpc01hdGNoKHJlZ2V4LCBjKVxuICB9XG5cbiAgZnVuY3Rpb24gbm90IChjaGFyY2xhc3MsIGMpIHtcbiAgICByZXR1cm4gIWlzKGNoYXJjbGFzcywgYylcbiAgfVxuXG4gIHZhciBTID0gMFxuICBzYXguU1RBVEUgPSB7XG4gICAgQkVHSU46IFMrKywgLy8gbGVhZGluZyBieXRlIG9yZGVyIG1hcmsgb3Igd2hpdGVzcGFjZVxuICAgIEJFR0lOX1dISVRFU1BBQ0U6IFMrKywgLy8gbGVhZGluZyB3aGl0ZXNwYWNlXG4gICAgVEVYVDogUysrLCAvLyBnZW5lcmFsIHN0dWZmXG4gICAgVEVYVF9FTlRJVFk6IFMrKywgLy8gJmFtcCBhbmQgc3VjaC5cbiAgICBPUEVOX1dBS0E6IFMrKywgLy8gPFxuICAgIFNHTUxfREVDTDogUysrLCAvLyA8IUJMQVJHXG4gICAgU0dNTF9ERUNMX1FVT1RFRDogUysrLCAvLyA8IUJMQVJHIGZvbyBcImJhclxuICAgIERPQ1RZUEU6IFMrKywgLy8gPCFET0NUWVBFXG4gICAgRE9DVFlQRV9RVU9URUQ6IFMrKywgLy8gPCFET0NUWVBFIFwiLy9ibGFoXG4gICAgRE9DVFlQRV9EVEQ6IFMrKywgLy8gPCFET0NUWVBFIFwiLy9ibGFoXCIgWyAuLi5cbiAgICBET0NUWVBFX0RURF9RVU9URUQ6IFMrKywgLy8gPCFET0NUWVBFIFwiLy9ibGFoXCIgWyBcImZvb1xuICAgIENPTU1FTlRfU1RBUlRJTkc6IFMrKywgLy8gPCEtXG4gICAgQ09NTUVOVDogUysrLCAvLyA8IS0tXG4gICAgQ09NTUVOVF9FTkRJTkc6IFMrKywgLy8gPCEtLSBibGFoIC1cbiAgICBDT01NRU5UX0VOREVEOiBTKyssIC8vIDwhLS0gYmxhaCAtLVxuICAgIENEQVRBOiBTKyssIC8vIDwhW0NEQVRBWyBzb21ldGhpbmdcbiAgICBDREFUQV9FTkRJTkc6IFMrKywgLy8gXVxuICAgIENEQVRBX0VORElOR18yOiBTKyssIC8vIF1dXG4gICAgUFJPQ19JTlNUOiBTKyssIC8vIDw/aGlcbiAgICBQUk9DX0lOU1RfQk9EWTogUysrLCAvLyA8P2hpIHRoZXJlXG4gICAgUFJPQ19JTlNUX0VORElORzogUysrLCAvLyA8P2hpIFwidGhlcmVcIiA/XG4gICAgT1BFTl9UQUc6IFMrKywgLy8gPHN0cm9uZ1xuICAgIE9QRU5fVEFHX1NMQVNIOiBTKyssIC8vIDxzdHJvbmcgL1xuICAgIEFUVFJJQjogUysrLCAvLyA8YVxuICAgIEFUVFJJQl9OQU1FOiBTKyssIC8vIDxhIGZvb1xuICAgIEFUVFJJQl9OQU1FX1NBV19XSElURTogUysrLCAvLyA8YSBmb28gX1xuICAgIEFUVFJJQl9WQUxVRTogUysrLCAvLyA8YSBmb289XG4gICAgQVRUUklCX1ZBTFVFX1FVT1RFRDogUysrLCAvLyA8YSBmb289XCJiYXJcbiAgICBBVFRSSUJfVkFMVUVfQ0xPU0VEOiBTKyssIC8vIDxhIGZvbz1cImJhclwiXG4gICAgQVRUUklCX1ZBTFVFX1VOUVVPVEVEOiBTKyssIC8vIDxhIGZvbz1iYXJcbiAgICBBVFRSSUJfVkFMVUVfRU5USVRZX1E6IFMrKywgLy8gPGZvbyBiYXI9XCImcXVvdDtcIlxuICAgIEFUVFJJQl9WQUxVRV9FTlRJVFlfVTogUysrLCAvLyA8Zm9vIGJhcj0mcXVvdFxuICAgIENMT1NFX1RBRzogUysrLCAvLyA8L2FcbiAgICBDTE9TRV9UQUdfU0FXX1dISVRFOiBTKyssIC8vIDwvYSAgID5cbiAgICBTQ1JJUFQ6IFMrKywgLy8gPHNjcmlwdD4gLi4uXG4gICAgU0NSSVBUX0VORElORzogUysrIC8vIDxzY3JpcHQ+IC4uLiA8XG4gIH1cblxuICBzYXguWE1MX0VOVElUSUVTID0ge1xuICAgICdhbXAnOiAnJicsXG4gICAgJ2d0JzogJz4nLFxuICAgICdsdCc6ICc8JyxcbiAgICAncXVvdCc6ICdcIicsXG4gICAgJ2Fwb3MnOiBcIidcIlxuICB9XG5cbiAgc2F4LkVOVElUSUVTID0ge1xuICAgICdhbXAnOiAnJicsXG4gICAgJ2d0JzogJz4nLFxuICAgICdsdCc6ICc8JyxcbiAgICAncXVvdCc6ICdcIicsXG4gICAgJ2Fwb3MnOiBcIidcIixcbiAgICAnQUVsaWcnOiAxOTgsXG4gICAgJ0FhY3V0ZSc6IDE5MyxcbiAgICAnQWNpcmMnOiAxOTQsXG4gICAgJ0FncmF2ZSc6IDE5MixcbiAgICAnQXJpbmcnOiAxOTcsXG4gICAgJ0F0aWxkZSc6IDE5NSxcbiAgICAnQXVtbCc6IDE5NixcbiAgICAnQ2NlZGlsJzogMTk5LFxuICAgICdFVEgnOiAyMDgsXG4gICAgJ0VhY3V0ZSc6IDIwMSxcbiAgICAnRWNpcmMnOiAyMDIsXG4gICAgJ0VncmF2ZSc6IDIwMCxcbiAgICAnRXVtbCc6IDIwMyxcbiAgICAnSWFjdXRlJzogMjA1LFxuICAgICdJY2lyYyc6IDIwNixcbiAgICAnSWdyYXZlJzogMjA0LFxuICAgICdJdW1sJzogMjA3LFxuICAgICdOdGlsZGUnOiAyMDksXG4gICAgJ09hY3V0ZSc6IDIxMSxcbiAgICAnT2NpcmMnOiAyMTIsXG4gICAgJ09ncmF2ZSc6IDIxMCxcbiAgICAnT3NsYXNoJzogMjE2LFxuICAgICdPdGlsZGUnOiAyMTMsXG4gICAgJ091bWwnOiAyMTQsXG4gICAgJ1RIT1JOJzogMjIyLFxuICAgICdVYWN1dGUnOiAyMTgsXG4gICAgJ1VjaXJjJzogMjE5LFxuICAgICdVZ3JhdmUnOiAyMTcsXG4gICAgJ1V1bWwnOiAyMjAsXG4gICAgJ1lhY3V0ZSc6IDIyMSxcbiAgICAnYWFjdXRlJzogMjI1LFxuICAgICdhY2lyYyc6IDIyNixcbiAgICAnYWVsaWcnOiAyMzAsXG4gICAgJ2FncmF2ZSc6IDIyNCxcbiAgICAnYXJpbmcnOiAyMjksXG4gICAgJ2F0aWxkZSc6IDIyNyxcbiAgICAnYXVtbCc6IDIyOCxcbiAgICAnY2NlZGlsJzogMjMxLFxuICAgICdlYWN1dGUnOiAyMzMsXG4gICAgJ2VjaXJjJzogMjM0LFxuICAgICdlZ3JhdmUnOiAyMzIsXG4gICAgJ2V0aCc6IDI0MCxcbiAgICAnZXVtbCc6IDIzNSxcbiAgICAnaWFjdXRlJzogMjM3LFxuICAgICdpY2lyYyc6IDIzOCxcbiAgICAnaWdyYXZlJzogMjM2LFxuICAgICdpdW1sJzogMjM5LFxuICAgICdudGlsZGUnOiAyNDEsXG4gICAgJ29hY3V0ZSc6IDI0MyxcbiAgICAnb2NpcmMnOiAyNDQsXG4gICAgJ29ncmF2ZSc6IDI0MixcbiAgICAnb3NsYXNoJzogMjQ4LFxuICAgICdvdGlsZGUnOiAyNDUsXG4gICAgJ291bWwnOiAyNDYsXG4gICAgJ3N6bGlnJzogMjIzLFxuICAgICd0aG9ybic6IDI1NCxcbiAgICAndWFjdXRlJzogMjUwLFxuICAgICd1Y2lyYyc6IDI1MSxcbiAgICAndWdyYXZlJzogMjQ5LFxuICAgICd1dW1sJzogMjUyLFxuICAgICd5YWN1dGUnOiAyNTMsXG4gICAgJ3l1bWwnOiAyNTUsXG4gICAgJ2NvcHknOiAxNjksXG4gICAgJ3JlZyc6IDE3NCxcbiAgICAnbmJzcCc6IDE2MCxcbiAgICAnaWV4Y2wnOiAxNjEsXG4gICAgJ2NlbnQnOiAxNjIsXG4gICAgJ3BvdW5kJzogMTYzLFxuICAgICdjdXJyZW4nOiAxNjQsXG4gICAgJ3llbic6IDE2NSxcbiAgICAnYnJ2YmFyJzogMTY2LFxuICAgICdzZWN0JzogMTY3LFxuICAgICd1bWwnOiAxNjgsXG4gICAgJ29yZGYnOiAxNzAsXG4gICAgJ2xhcXVvJzogMTcxLFxuICAgICdub3QnOiAxNzIsXG4gICAgJ3NoeSc6IDE3MyxcbiAgICAnbWFjcic6IDE3NSxcbiAgICAnZGVnJzogMTc2LFxuICAgICdwbHVzbW4nOiAxNzcsXG4gICAgJ3N1cDEnOiAxODUsXG4gICAgJ3N1cDInOiAxNzgsXG4gICAgJ3N1cDMnOiAxNzksXG4gICAgJ2FjdXRlJzogMTgwLFxuICAgICdtaWNybyc6IDE4MSxcbiAgICAncGFyYSc6IDE4MixcbiAgICAnbWlkZG90JzogMTgzLFxuICAgICdjZWRpbCc6IDE4NCxcbiAgICAnb3JkbSc6IDE4NixcbiAgICAncmFxdW8nOiAxODcsXG4gICAgJ2ZyYWMxNCc6IDE4OCxcbiAgICAnZnJhYzEyJzogMTg5LFxuICAgICdmcmFjMzQnOiAxOTAsXG4gICAgJ2lxdWVzdCc6IDE5MSxcbiAgICAndGltZXMnOiAyMTUsXG4gICAgJ2RpdmlkZSc6IDI0NyxcbiAgICAnT0VsaWcnOiAzMzgsXG4gICAgJ29lbGlnJzogMzM5LFxuICAgICdTY2Fyb24nOiAzNTIsXG4gICAgJ3NjYXJvbic6IDM1MyxcbiAgICAnWXVtbCc6IDM3NixcbiAgICAnZm5vZic6IDQwMixcbiAgICAnY2lyYyc6IDcxMCxcbiAgICAndGlsZGUnOiA3MzIsXG4gICAgJ0FscGhhJzogOTEzLFxuICAgICdCZXRhJzogOTE0LFxuICAgICdHYW1tYSc6IDkxNSxcbiAgICAnRGVsdGEnOiA5MTYsXG4gICAgJ0Vwc2lsb24nOiA5MTcsXG4gICAgJ1pldGEnOiA5MTgsXG4gICAgJ0V0YSc6IDkxOSxcbiAgICAnVGhldGEnOiA5MjAsXG4gICAgJ0lvdGEnOiA5MjEsXG4gICAgJ0thcHBhJzogOTIyLFxuICAgICdMYW1iZGEnOiA5MjMsXG4gICAgJ011JzogOTI0LFxuICAgICdOdSc6IDkyNSxcbiAgICAnWGknOiA5MjYsXG4gICAgJ09taWNyb24nOiA5MjcsXG4gICAgJ1BpJzogOTI4LFxuICAgICdSaG8nOiA5MjksXG4gICAgJ1NpZ21hJzogOTMxLFxuICAgICdUYXUnOiA5MzIsXG4gICAgJ1Vwc2lsb24nOiA5MzMsXG4gICAgJ1BoaSc6IDkzNCxcbiAgICAnQ2hpJzogOTM1LFxuICAgICdQc2knOiA5MzYsXG4gICAgJ09tZWdhJzogOTM3LFxuICAgICdhbHBoYSc6IDk0NSxcbiAgICAnYmV0YSc6IDk0NixcbiAgICAnZ2FtbWEnOiA5NDcsXG4gICAgJ2RlbHRhJzogOTQ4LFxuICAgICdlcHNpbG9uJzogOTQ5LFxuICAgICd6ZXRhJzogOTUwLFxuICAgICdldGEnOiA5NTEsXG4gICAgJ3RoZXRhJzogOTUyLFxuICAgICdpb3RhJzogOTUzLFxuICAgICdrYXBwYSc6IDk1NCxcbiAgICAnbGFtYmRhJzogOTU1LFxuICAgICdtdSc6IDk1NixcbiAgICAnbnUnOiA5NTcsXG4gICAgJ3hpJzogOTU4LFxuICAgICdvbWljcm9uJzogOTU5LFxuICAgICdwaSc6IDk2MCxcbiAgICAncmhvJzogOTYxLFxuICAgICdzaWdtYWYnOiA5NjIsXG4gICAgJ3NpZ21hJzogOTYzLFxuICAgICd0YXUnOiA5NjQsXG4gICAgJ3Vwc2lsb24nOiA5NjUsXG4gICAgJ3BoaSc6IDk2NixcbiAgICAnY2hpJzogOTY3LFxuICAgICdwc2knOiA5NjgsXG4gICAgJ29tZWdhJzogOTY5LFxuICAgICd0aGV0YXN5bSc6IDk3NyxcbiAgICAndXBzaWgnOiA5NzgsXG4gICAgJ3Bpdic6IDk4MixcbiAgICAnZW5zcCc6IDgxOTQsXG4gICAgJ2Vtc3AnOiA4MTk1LFxuICAgICd0aGluc3AnOiA4MjAxLFxuICAgICd6d25qJzogODIwNCxcbiAgICAnendqJzogODIwNSxcbiAgICAnbHJtJzogODIwNixcbiAgICAncmxtJzogODIwNyxcbiAgICAnbmRhc2gnOiA4MjExLFxuICAgICdtZGFzaCc6IDgyMTIsXG4gICAgJ2xzcXVvJzogODIxNixcbiAgICAncnNxdW8nOiA4MjE3LFxuICAgICdzYnF1byc6IDgyMTgsXG4gICAgJ2xkcXVvJzogODIyMCxcbiAgICAncmRxdW8nOiA4MjIxLFxuICAgICdiZHF1byc6IDgyMjIsXG4gICAgJ2RhZ2dlcic6IDgyMjQsXG4gICAgJ0RhZ2dlcic6IDgyMjUsXG4gICAgJ2J1bGwnOiA4MjI2LFxuICAgICdoZWxsaXAnOiA4MjMwLFxuICAgICdwZXJtaWwnOiA4MjQwLFxuICAgICdwcmltZSc6IDgyNDIsXG4gICAgJ1ByaW1lJzogODI0MyxcbiAgICAnbHNhcXVvJzogODI0OSxcbiAgICAncnNhcXVvJzogODI1MCxcbiAgICAnb2xpbmUnOiA4MjU0LFxuICAgICdmcmFzbCc6IDgyNjAsXG4gICAgJ2V1cm8nOiA4MzY0LFxuICAgICdpbWFnZSc6IDg0NjUsXG4gICAgJ3dlaWVycCc6IDg0NzIsXG4gICAgJ3JlYWwnOiA4NDc2LFxuICAgICd0cmFkZSc6IDg0ODIsXG4gICAgJ2FsZWZzeW0nOiA4NTAxLFxuICAgICdsYXJyJzogODU5MixcbiAgICAndWFycic6IDg1OTMsXG4gICAgJ3JhcnInOiA4NTk0LFxuICAgICdkYXJyJzogODU5NSxcbiAgICAnaGFycic6IDg1OTYsXG4gICAgJ2NyYXJyJzogODYyOSxcbiAgICAnbEFycic6IDg2NTYsXG4gICAgJ3VBcnInOiA4NjU3LFxuICAgICdyQXJyJzogODY1OCxcbiAgICAnZEFycic6IDg2NTksXG4gICAgJ2hBcnInOiA4NjYwLFxuICAgICdmb3JhbGwnOiA4NzA0LFxuICAgICdwYXJ0JzogODcwNixcbiAgICAnZXhpc3QnOiA4NzA3LFxuICAgICdlbXB0eSc6IDg3MDksXG4gICAgJ25hYmxhJzogODcxMSxcbiAgICAnaXNpbic6IDg3MTIsXG4gICAgJ25vdGluJzogODcxMyxcbiAgICAnbmknOiA4NzE1LFxuICAgICdwcm9kJzogODcxOSxcbiAgICAnc3VtJzogODcyMSxcbiAgICAnbWludXMnOiA4NzIyLFxuICAgICdsb3dhc3QnOiA4NzI3LFxuICAgICdyYWRpYyc6IDg3MzAsXG4gICAgJ3Byb3AnOiA4NzMzLFxuICAgICdpbmZpbic6IDg3MzQsXG4gICAgJ2FuZyc6IDg3MzYsXG4gICAgJ2FuZCc6IDg3NDMsXG4gICAgJ29yJzogODc0NCxcbiAgICAnY2FwJzogODc0NSxcbiAgICAnY3VwJzogODc0NixcbiAgICAnaW50JzogODc0NyxcbiAgICAndGhlcmU0JzogODc1NixcbiAgICAnc2ltJzogODc2NCxcbiAgICAnY29uZyc6IDg3NzMsXG4gICAgJ2FzeW1wJzogODc3NixcbiAgICAnbmUnOiA4ODAwLFxuICAgICdlcXVpdic6IDg4MDEsXG4gICAgJ2xlJzogODgwNCxcbiAgICAnZ2UnOiA4ODA1LFxuICAgICdzdWInOiA4ODM0LFxuICAgICdzdXAnOiA4ODM1LFxuICAgICduc3ViJzogODgzNixcbiAgICAnc3ViZSc6IDg4MzgsXG4gICAgJ3N1cGUnOiA4ODM5LFxuICAgICdvcGx1cyc6IDg4NTMsXG4gICAgJ290aW1lcyc6IDg4NTUsXG4gICAgJ3BlcnAnOiA4ODY5LFxuICAgICdzZG90JzogODkwMSxcbiAgICAnbGNlaWwnOiA4OTY4LFxuICAgICdyY2VpbCc6IDg5NjksXG4gICAgJ2xmbG9vcic6IDg5NzAsXG4gICAgJ3JmbG9vcic6IDg5NzEsXG4gICAgJ2xhbmcnOiA5MDAxLFxuICAgICdyYW5nJzogOTAwMixcbiAgICAnbG96JzogOTY3NCxcbiAgICAnc3BhZGVzJzogOTgyNCxcbiAgICAnY2x1YnMnOiA5ODI3LFxuICAgICdoZWFydHMnOiA5ODI5LFxuICAgICdkaWFtcyc6IDk4MzBcbiAgfVxuXG4gIE9iamVjdC5rZXlzKHNheC5FTlRJVElFUykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGUgPSBzYXguRU5USVRJRVNba2V5XVxuICAgIHZhciBzID0gdHlwZW9mIGUgPT09ICdudW1iZXInID8gU3RyaW5nLmZyb21DaGFyQ29kZShlKSA6IGVcbiAgICBzYXguRU5USVRJRVNba2V5XSA9IHNcbiAgfSlcblxuICBmb3IgKHZhciBzIGluIHNheC5TVEFURSkge1xuICAgIHNheC5TVEFURVtzYXguU1RBVEVbc11dID0gc1xuICB9XG5cbiAgLy8gc2hvcnRoYW5kXG4gIFMgPSBzYXguU1RBVEVcblxuICBmdW5jdGlvbiBlbWl0IChwYXJzZXIsIGV2ZW50LCBkYXRhKSB7XG4gICAgcGFyc2VyW2V2ZW50XSAmJiBwYXJzZXJbZXZlbnRdKGRhdGEpXG4gIH1cblxuICBmdW5jdGlvbiBlbWl0Tm9kZSAocGFyc2VyLCBub2RlVHlwZSwgZGF0YSkge1xuICAgIGlmIChwYXJzZXIudGV4dE5vZGUpIGNsb3NlVGV4dChwYXJzZXIpXG4gICAgZW1pdChwYXJzZXIsIG5vZGVUeXBlLCBkYXRhKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VUZXh0IChwYXJzZXIpIHtcbiAgICBwYXJzZXIudGV4dE5vZGUgPSB0ZXh0b3B0cyhwYXJzZXIub3B0LCBwYXJzZXIudGV4dE5vZGUpXG4gICAgaWYgKHBhcnNlci50ZXh0Tm9kZSkgZW1pdChwYXJzZXIsICdvbnRleHQnLCBwYXJzZXIudGV4dE5vZGUpXG4gICAgcGFyc2VyLnRleHROb2RlID0gJydcbiAgfVxuXG4gIGZ1bmN0aW9uIHRleHRvcHRzIChvcHQsIHRleHQpIHtcbiAgICBpZiAob3B0LnRyaW0pIHRleHQgPSB0ZXh0LnRyaW0oKVxuICAgIGlmIChvcHQubm9ybWFsaXplKSB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXHMrL2csICcgJylcbiAgICByZXR1cm4gdGV4dFxuICB9XG5cbiAgZnVuY3Rpb24gZXJyb3IgKHBhcnNlciwgZXIpIHtcbiAgICBjbG9zZVRleHQocGFyc2VyKVxuICAgIGlmIChwYXJzZXIudHJhY2tQb3NpdGlvbikge1xuICAgICAgZXIgKz0gJ1xcbkxpbmU6ICcgKyBwYXJzZXIubGluZSArXG4gICAgICAgICdcXG5Db2x1bW46ICcgKyBwYXJzZXIuY29sdW1uICtcbiAgICAgICAgJ1xcbkNoYXI6ICcgKyBwYXJzZXIuY1xuICAgIH1cbiAgICBlciA9IG5ldyBFcnJvcihlcilcbiAgICBwYXJzZXIuZXJyb3IgPSBlclxuICAgIGVtaXQocGFyc2VyLCAnb25lcnJvcicsIGVyKVxuICAgIHJldHVybiBwYXJzZXJcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZCAocGFyc2VyKSB7XG4gICAgaWYgKHBhcnNlci5zYXdSb290ICYmICFwYXJzZXIuY2xvc2VkUm9vdCkgc3RyaWN0RmFpbChwYXJzZXIsICdVbmNsb3NlZCByb290IHRhZycpXG4gICAgaWYgKChwYXJzZXIuc3RhdGUgIT09IFMuQkVHSU4pICYmXG4gICAgICAocGFyc2VyLnN0YXRlICE9PSBTLkJFR0lOX1dISVRFU1BBQ0UpICYmXG4gICAgICAocGFyc2VyLnN0YXRlICE9PSBTLlRFWFQpKSB7XG4gICAgICBlcnJvcihwYXJzZXIsICdVbmV4cGVjdGVkIGVuZCcpXG4gICAgfVxuICAgIGNsb3NlVGV4dChwYXJzZXIpXG4gICAgcGFyc2VyLmMgPSAnJ1xuICAgIHBhcnNlci5jbG9zZWQgPSB0cnVlXG4gICAgZW1pdChwYXJzZXIsICdvbmVuZCcpXG4gICAgU0FYUGFyc2VyLmNhbGwocGFyc2VyLCBwYXJzZXIuc3RyaWN0LCBwYXJzZXIub3B0KVxuICAgIHJldHVybiBwYXJzZXJcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmljdEZhaWwgKHBhcnNlciwgbWVzc2FnZSkge1xuICAgIGlmICh0eXBlb2YgcGFyc2VyICE9PSAnb2JqZWN0JyB8fCAhKHBhcnNlciBpbnN0YW5jZW9mIFNBWFBhcnNlcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIGNhbGwgdG8gc3RyaWN0RmFpbCcpXG4gICAgfVxuICAgIGlmIChwYXJzZXIuc3RyaWN0KSB7XG4gICAgICBlcnJvcihwYXJzZXIsIG1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbmV3VGFnIChwYXJzZXIpIHtcbiAgICBpZiAoIXBhcnNlci5zdHJpY3QpIHBhcnNlci50YWdOYW1lID0gcGFyc2VyLnRhZ05hbWVbcGFyc2VyLmxvb3NlQ2FzZV0oKVxuICAgIHZhciBwYXJlbnQgPSBwYXJzZXIudGFnc1twYXJzZXIudGFncy5sZW5ndGggLSAxXSB8fCBwYXJzZXJcbiAgICB2YXIgdGFnID0gcGFyc2VyLnRhZyA9IHsgbmFtZTogcGFyc2VyLnRhZ05hbWUsIGF0dHJpYnV0ZXM6IHt9IH1cblxuICAgIC8vIHdpbGwgYmUgb3ZlcnJpZGRlbiBpZiB0YWcgY29udGFpbHMgYW4geG1sbnM9XCJmb29cIiBvciB4bWxuczpmb289XCJiYXJcIlxuICAgIGlmIChwYXJzZXIub3B0LnhtbG5zKSB7XG4gICAgICB0YWcubnMgPSBwYXJlbnQubnNcbiAgICB9XG4gICAgcGFyc2VyLmF0dHJpYkxpc3QubGVuZ3RoID0gMFxuICAgIGVtaXROb2RlKHBhcnNlciwgJ29ub3BlbnRhZ3N0YXJ0JywgdGFnKVxuICB9XG5cbiAgZnVuY3Rpb24gcW5hbWUgKG5hbWUsIGF0dHJpYnV0ZSkge1xuICAgIHZhciBpID0gbmFtZS5pbmRleE9mKCc6JylcbiAgICB2YXIgcXVhbE5hbWUgPSBpIDwgMCA/IFsgJycsIG5hbWUgXSA6IG5hbWUuc3BsaXQoJzonKVxuICAgIHZhciBwcmVmaXggPSBxdWFsTmFtZVswXVxuICAgIHZhciBsb2NhbCA9IHF1YWxOYW1lWzFdXG5cbiAgICAvLyA8eCBcInhtbG5zXCI9XCJodHRwOi8vZm9vXCI+XG4gICAgaWYgKGF0dHJpYnV0ZSAmJiBuYW1lID09PSAneG1sbnMnKSB7XG4gICAgICBwcmVmaXggPSAneG1sbnMnXG4gICAgICBsb2NhbCA9ICcnXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcHJlZml4OiBwcmVmaXgsIGxvY2FsOiBsb2NhbCB9XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyaWIgKHBhcnNlcikge1xuICAgIGlmICghcGFyc2VyLnN0cmljdCkge1xuICAgICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBwYXJzZXIuYXR0cmliTmFtZVtwYXJzZXIubG9vc2VDYXNlXSgpXG4gICAgfVxuXG4gICAgaWYgKHBhcnNlci5hdHRyaWJMaXN0LmluZGV4T2YocGFyc2VyLmF0dHJpYk5hbWUpICE9PSAtMSB8fFxuICAgICAgcGFyc2VyLnRhZy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHBhcnNlci5hdHRyaWJOYW1lKSkge1xuICAgICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBwYXJzZXIuYXR0cmliVmFsdWUgPSAnJ1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHBhcnNlci5vcHQueG1sbnMpIHtcbiAgICAgIHZhciBxbiA9IHFuYW1lKHBhcnNlci5hdHRyaWJOYW1lLCB0cnVlKVxuICAgICAgdmFyIHByZWZpeCA9IHFuLnByZWZpeFxuICAgICAgdmFyIGxvY2FsID0gcW4ubG9jYWxcblxuICAgICAgaWYgKHByZWZpeCA9PT0gJ3htbG5zJykge1xuICAgICAgICAvLyBuYW1lc3BhY2UgYmluZGluZyBhdHRyaWJ1dGUuIHB1c2ggdGhlIGJpbmRpbmcgaW50byBzY29wZVxuICAgICAgICBpZiAobG9jYWwgPT09ICd4bWwnICYmIHBhcnNlci5hdHRyaWJWYWx1ZSAhPT0gWE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLFxuICAgICAgICAgICAgJ3htbDogcHJlZml4IG11c3QgYmUgYm91bmQgdG8gJyArIFhNTF9OQU1FU1BBQ0UgKyAnXFxuJyArXG4gICAgICAgICAgICAnQWN0dWFsOiAnICsgcGFyc2VyLmF0dHJpYlZhbHVlKVxuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsID09PSAneG1sbnMnICYmIHBhcnNlci5hdHRyaWJWYWx1ZSAhPT0gWE1MTlNfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsXG4gICAgICAgICAgICAneG1sbnM6IHByZWZpeCBtdXN0IGJlIGJvdW5kIHRvICcgKyBYTUxOU19OQU1FU1BBQ0UgKyAnXFxuJyArXG4gICAgICAgICAgICAnQWN0dWFsOiAnICsgcGFyc2VyLmF0dHJpYlZhbHVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0YWcgPSBwYXJzZXIudGFnXG4gICAgICAgICAgdmFyIHBhcmVudCA9IHBhcnNlci50YWdzW3BhcnNlci50YWdzLmxlbmd0aCAtIDFdIHx8IHBhcnNlclxuICAgICAgICAgIGlmICh0YWcubnMgPT09IHBhcmVudC5ucykge1xuICAgICAgICAgICAgdGFnLm5zID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQubnMpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRhZy5uc1tsb2NhbF0gPSBwYXJzZXIuYXR0cmliVmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBkZWZlciBvbmF0dHJpYnV0ZSBldmVudHMgdW50aWwgYWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHNlZW5cbiAgICAgIC8vIHNvIGFueSBuZXcgYmluZGluZ3MgY2FuIHRha2UgZWZmZWN0LiBwcmVzZXJ2ZSBhdHRyaWJ1dGUgb3JkZXJcbiAgICAgIC8vIHNvIGRlZmVycmVkIGV2ZW50cyBjYW4gYmUgZW1pdHRlZCBpbiBkb2N1bWVudCBvcmRlclxuICAgICAgcGFyc2VyLmF0dHJpYkxpc3QucHVzaChbcGFyc2VyLmF0dHJpYk5hbWUsIHBhcnNlci5hdHRyaWJWYWx1ZV0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluIG5vbi14bWxucyBtb2RlLCB3ZSBjYW4gZW1pdCB0aGUgZXZlbnQgcmlnaHQgYXdheVxuICAgICAgcGFyc2VyLnRhZy5hdHRyaWJ1dGVzW3BhcnNlci5hdHRyaWJOYW1lXSA9IHBhcnNlci5hdHRyaWJWYWx1ZVxuICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25hdHRyaWJ1dGUnLCB7XG4gICAgICAgIG5hbWU6IHBhcnNlci5hdHRyaWJOYW1lLFxuICAgICAgICB2YWx1ZTogcGFyc2VyLmF0dHJpYlZhbHVlXG4gICAgICB9KVxuICAgIH1cblxuICAgIHBhcnNlci5hdHRyaWJOYW1lID0gcGFyc2VyLmF0dHJpYlZhbHVlID0gJydcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5UYWcgKHBhcnNlciwgc2VsZkNsb3NpbmcpIHtcbiAgICBpZiAocGFyc2VyLm9wdC54bWxucykge1xuICAgICAgLy8gZW1pdCBuYW1lc3BhY2UgYmluZGluZyBldmVudHNcbiAgICAgIHZhciB0YWcgPSBwYXJzZXIudGFnXG5cbiAgICAgIC8vIGFkZCBuYW1lc3BhY2UgaW5mbyB0byB0YWdcbiAgICAgIHZhciBxbiA9IHFuYW1lKHBhcnNlci50YWdOYW1lKVxuICAgICAgdGFnLnByZWZpeCA9IHFuLnByZWZpeFxuICAgICAgdGFnLmxvY2FsID0gcW4ubG9jYWxcbiAgICAgIHRhZy51cmkgPSB0YWcubnNbcW4ucHJlZml4XSB8fCAnJ1xuXG4gICAgICBpZiAodGFnLnByZWZpeCAmJiAhdGFnLnVyaSkge1xuICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ1VuYm91bmQgbmFtZXNwYWNlIHByZWZpeDogJyArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkocGFyc2VyLnRhZ05hbWUpKVxuICAgICAgICB0YWcudXJpID0gcW4ucHJlZml4XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnQgPSBwYXJzZXIudGFnc1twYXJzZXIudGFncy5sZW5ndGggLSAxXSB8fCBwYXJzZXJcbiAgICAgIGlmICh0YWcubnMgJiYgcGFyZW50Lm5zICE9PSB0YWcubnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXModGFnLm5zKS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25vcGVubmFtZXNwYWNlJywge1xuICAgICAgICAgICAgcHJlZml4OiBwLFxuICAgICAgICAgICAgdXJpOiB0YWcubnNbcF1cbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBoYW5kbGUgZGVmZXJyZWQgb25hdHRyaWJ1dGUgZXZlbnRzXG4gICAgICAvLyBOb3RlOiBkbyBub3QgYXBwbHkgZGVmYXVsdCBucyB0byBhdHRyaWJ1dGVzOlxuICAgICAgLy8gICBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLyNkZWZhdWx0aW5nXG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcnNlci5hdHRyaWJMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgbnYgPSBwYXJzZXIuYXR0cmliTGlzdFtpXVxuICAgICAgICB2YXIgbmFtZSA9IG52WzBdXG4gICAgICAgIHZhciB2YWx1ZSA9IG52WzFdXG4gICAgICAgIHZhciBxdWFsTmFtZSA9IHFuYW1lKG5hbWUsIHRydWUpXG4gICAgICAgIHZhciBwcmVmaXggPSBxdWFsTmFtZS5wcmVmaXhcbiAgICAgICAgdmFyIGxvY2FsID0gcXVhbE5hbWUubG9jYWxcbiAgICAgICAgdmFyIHVyaSA9IHByZWZpeCA9PT0gJycgPyAnJyA6ICh0YWcubnNbcHJlZml4XSB8fCAnJylcbiAgICAgICAgdmFyIGEgPSB7XG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgcHJlZml4OiBwcmVmaXgsXG4gICAgICAgICAgbG9jYWw6IGxvY2FsLFxuICAgICAgICAgIHVyaTogdXJpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGVyZSdzIGFueSBhdHRyaWJ1dGVzIHdpdGggYW4gdW5kZWZpbmVkIG5hbWVzcGFjZSxcbiAgICAgICAgLy8gdGhlbiBmYWlsIG9uIHRoZW0gbm93LlxuICAgICAgICBpZiAocHJlZml4ICYmIHByZWZpeCAhPT0gJ3htbG5zJyAmJiAhdXJpKSB7XG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdVbmJvdW5kIG5hbWVzcGFjZSBwcmVmaXg6ICcgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkocHJlZml4KSlcbiAgICAgICAgICBhLnVyaSA9IHByZWZpeFxuICAgICAgICB9XG4gICAgICAgIHBhcnNlci50YWcuYXR0cmlidXRlc1tuYW1lXSA9IGFcbiAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25hdHRyaWJ1dGUnLCBhKVxuICAgICAgfVxuICAgICAgcGFyc2VyLmF0dHJpYkxpc3QubGVuZ3RoID0gMFxuICAgIH1cblxuICAgIHBhcnNlci50YWcuaXNTZWxmQ2xvc2luZyA9ICEhc2VsZkNsb3NpbmdcblxuICAgIC8vIHByb2Nlc3MgdGhlIHRhZ1xuICAgIHBhcnNlci5zYXdSb290ID0gdHJ1ZVxuICAgIHBhcnNlci50YWdzLnB1c2gocGFyc2VyLnRhZylcbiAgICBlbWl0Tm9kZShwYXJzZXIsICdvbm9wZW50YWcnLCBwYXJzZXIudGFnKVxuICAgIGlmICghc2VsZkNsb3NpbmcpIHtcbiAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgPHNjcmlwdD4gaW4gbm9uLXN0cmljdCBtb2RlLlxuICAgICAgaWYgKCFwYXJzZXIubm9zY3JpcHQgJiYgcGFyc2VyLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgfVxuICAgICAgcGFyc2VyLnRhZyA9IG51bGxcbiAgICAgIHBhcnNlci50YWdOYW1lID0gJydcbiAgICB9XG4gICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBwYXJzZXIuYXR0cmliVmFsdWUgPSAnJ1xuICAgIHBhcnNlci5hdHRyaWJMaXN0Lmxlbmd0aCA9IDBcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlVGFnIChwYXJzZXIpIHtcbiAgICBpZiAoIXBhcnNlci50YWdOYW1lKSB7XG4gICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ1dlaXJkIGVtcHR5IGNsb3NlIHRhZy4nKVxuICAgICAgcGFyc2VyLnRleHROb2RlICs9ICc8Lz4nXG4gICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChwYXJzZXIuc2NyaXB0KSB7XG4gICAgICBpZiAocGFyc2VyLnRhZ05hbWUgIT09ICdzY3JpcHQnKSB7XG4gICAgICAgIHBhcnNlci5zY3JpcHQgKz0gJzwvJyArIHBhcnNlci50YWdOYW1lICsgJz4nXG4gICAgICAgIHBhcnNlci50YWdOYW1lID0gJydcbiAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbnNjcmlwdCcsIHBhcnNlci5zY3JpcHQpXG4gICAgICBwYXJzZXIuc2NyaXB0ID0gJydcbiAgICB9XG5cbiAgICAvLyBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgY2xvc2luZyB0YWcgYWN0dWFsbHkgZXhpc3RzLlxuICAgIC8vIDxhPjxiPjwvYz48L2I+PC9hPiB3aWxsIGNsb3NlIGV2ZXJ5dGhpbmcsIG90aGVyd2lzZS5cbiAgICB2YXIgdCA9IHBhcnNlci50YWdzLmxlbmd0aFxuICAgIHZhciB0YWdOYW1lID0gcGFyc2VyLnRhZ05hbWVcbiAgICBpZiAoIXBhcnNlci5zdHJpY3QpIHtcbiAgICAgIHRhZ05hbWUgPSB0YWdOYW1lW3BhcnNlci5sb29zZUNhc2VdKClcbiAgICB9XG4gICAgdmFyIGNsb3NlVG8gPSB0YWdOYW1lXG4gICAgd2hpbGUgKHQtLSkge1xuICAgICAgdmFyIGNsb3NlID0gcGFyc2VyLnRhZ3NbdF1cbiAgICAgIGlmIChjbG9zZS5uYW1lICE9PSBjbG9zZVRvKSB7XG4gICAgICAgIC8vIGZhaWwgdGhlIGZpcnN0IHRpbWUgaW4gc3RyaWN0IG1vZGVcbiAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdVbmV4cGVjdGVkIGNsb3NlIHRhZycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRpZG4ndCBmaW5kIGl0LiAgd2UgYWxyZWFkeSBmYWlsZWQgZm9yIHN0cmljdCwgc28ganVzdCBhYm9ydC5cbiAgICBpZiAodCA8IDApIHtcbiAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnVW5tYXRjaGVkIGNsb3NpbmcgdGFnOiAnICsgcGFyc2VyLnRhZ05hbWUpXG4gICAgICBwYXJzZXIudGV4dE5vZGUgKz0gJzwvJyArIHBhcnNlci50YWdOYW1lICsgJz4nXG4gICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBwYXJzZXIudGFnTmFtZSA9IHRhZ05hbWVcbiAgICB2YXIgcyA9IHBhcnNlci50YWdzLmxlbmd0aFxuICAgIHdoaWxlIChzLS0gPiB0KSB7XG4gICAgICB2YXIgdGFnID0gcGFyc2VyLnRhZyA9IHBhcnNlci50YWdzLnBvcCgpXG4gICAgICBwYXJzZXIudGFnTmFtZSA9IHBhcnNlci50YWcubmFtZVxuICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25jbG9zZXRhZycsIHBhcnNlci50YWdOYW1lKVxuXG4gICAgICB2YXIgeCA9IHt9XG4gICAgICBmb3IgKHZhciBpIGluIHRhZy5ucykge1xuICAgICAgICB4W2ldID0gdGFnLm5zW2ldXG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnQgPSBwYXJzZXIudGFnc1twYXJzZXIudGFncy5sZW5ndGggLSAxXSB8fCBwYXJzZXJcbiAgICAgIGlmIChwYXJzZXIub3B0LnhtbG5zICYmIHRhZy5ucyAhPT0gcGFyZW50Lm5zKSB7XG4gICAgICAgIC8vIHJlbW92ZSBuYW1lc3BhY2UgYmluZGluZ3MgaW50cm9kdWNlZCBieSB0YWdcbiAgICAgICAgT2JqZWN0LmtleXModGFnLm5zKS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgdmFyIG4gPSB0YWcubnNbcF1cbiAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbmNsb3NlbmFtZXNwYWNlJywgeyBwcmVmaXg6IHAsIHVyaTogbiB9KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodCA9PT0gMCkgcGFyc2VyLmNsb3NlZFJvb3QgPSB0cnVlXG4gICAgcGFyc2VyLnRhZ05hbWUgPSBwYXJzZXIuYXR0cmliVmFsdWUgPSBwYXJzZXIuYXR0cmliTmFtZSA9ICcnXG4gICAgcGFyc2VyLmF0dHJpYkxpc3QubGVuZ3RoID0gMFxuICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VFbnRpdHkgKHBhcnNlcikge1xuICAgIHZhciBlbnRpdHkgPSBwYXJzZXIuZW50aXR5XG4gICAgdmFyIGVudGl0eUxDID0gZW50aXR5LnRvTG93ZXJDYXNlKClcbiAgICB2YXIgbnVtXG4gICAgdmFyIG51bVN0ciA9ICcnXG5cbiAgICBpZiAocGFyc2VyLkVOVElUSUVTW2VudGl0eV0pIHtcbiAgICAgIHJldHVybiBwYXJzZXIuRU5USVRJRVNbZW50aXR5XVxuICAgIH1cbiAgICBpZiAocGFyc2VyLkVOVElUSUVTW2VudGl0eUxDXSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5FTlRJVElFU1tlbnRpdHlMQ11cbiAgICB9XG4gICAgZW50aXR5ID0gZW50aXR5TENcbiAgICBpZiAoZW50aXR5LmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICBpZiAoZW50aXR5LmNoYXJBdCgxKSA9PT0gJ3gnKSB7XG4gICAgICAgIGVudGl0eSA9IGVudGl0eS5zbGljZSgyKVxuICAgICAgICBudW0gPSBwYXJzZUludChlbnRpdHksIDE2KVxuICAgICAgICBudW1TdHIgPSBudW0udG9TdHJpbmcoMTYpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRpdHkgPSBlbnRpdHkuc2xpY2UoMSlcbiAgICAgICAgbnVtID0gcGFyc2VJbnQoZW50aXR5LCAxMClcbiAgICAgICAgbnVtU3RyID0gbnVtLnRvU3RyaW5nKDEwKVxuICAgICAgfVxuICAgIH1cbiAgICBlbnRpdHkgPSBlbnRpdHkucmVwbGFjZSgvXjArLywgJycpXG4gICAgaWYgKG51bVN0ci50b0xvd2VyQ2FzZSgpICE9PSBlbnRpdHkpIHtcbiAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCBjaGFyYWN0ZXIgZW50aXR5JylcbiAgICAgIHJldHVybiAnJicgKyBwYXJzZXIuZW50aXR5ICsgJzsnXG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KG51bSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGJlZ2luV2hpdGVTcGFjZSAocGFyc2VyLCBjKSB7XG4gICAgaWYgKGMgPT09ICc8Jykge1xuICAgICAgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1dBS0FcbiAgICAgIHBhcnNlci5zdGFydFRhZ1Bvc2l0aW9uID0gcGFyc2VyLnBvc2l0aW9uXG4gICAgfSBlbHNlIGlmIChub3Qod2hpdGVzcGFjZSwgYykpIHtcbiAgICAgIC8vIGhhdmUgdG8gcHJvY2VzcyB0aGlzIGFzIGEgdGV4dCBub2RlLlxuICAgICAgLy8gd2VpcmQsIGJ1dCBoYXBwZW5zLlxuICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdOb24td2hpdGVzcGFjZSBiZWZvcmUgZmlyc3QgdGFnLicpXG4gICAgICBwYXJzZXIudGV4dE5vZGUgPSBjXG4gICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGFyQXQgKGNodW5rLCBpKSB7XG4gICAgdmFyIHJlc3VsdCA9ICcnXG4gICAgaWYgKGkgPCBjaHVuay5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IGNodW5rLmNoYXJBdChpKVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmdW5jdGlvbiB3cml0ZSAoY2h1bmspIHtcbiAgICB2YXIgcGFyc2VyID0gdGhpc1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aHJvdyB0aGlzLmVycm9yXG4gICAgfVxuICAgIGlmIChwYXJzZXIuY2xvc2VkKSB7XG4gICAgICByZXR1cm4gZXJyb3IocGFyc2VyLFxuICAgICAgICAnQ2Fubm90IHdyaXRlIGFmdGVyIGNsb3NlLiBBc3NpZ24gYW4gb25yZWFkeSBoYW5kbGVyLicpXG4gICAgfVxuICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGVuZChwYXJzZXIpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdvYmplY3QnKSB7XG4gICAgICBjaHVuayA9IGNodW5rLnRvU3RyaW5nKClcbiAgICB9XG4gICAgdmFyIGkgPSAwXG4gICAgdmFyIGMgPSAnJ1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjID0gY2hhckF0KGNodW5rLCBpKyspXG4gICAgICBwYXJzZXIuYyA9IGNcblxuICAgICAgaWYgKCFjKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJzZXIudHJhY2tQb3NpdGlvbikge1xuICAgICAgICBwYXJzZXIucG9zaXRpb24rK1xuICAgICAgICBpZiAoYyA9PT0gJ1xcbicpIHtcbiAgICAgICAgICBwYXJzZXIubGluZSsrXG4gICAgICAgICAgcGFyc2VyLmNvbHVtbiA9IDBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZXIuY29sdW1uKytcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHBhcnNlci5zdGF0ZSkge1xuICAgICAgICBjYXNlIFMuQkVHSU46XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5CRUdJTl9XSElURVNQQUNFXG4gICAgICAgICAgaWYgKGMgPT09ICdcXHVGRUZGJykge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgYmVnaW5XaGl0ZVNwYWNlKHBhcnNlciwgYylcbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5CRUdJTl9XSElURVNQQUNFOlxuICAgICAgICAgIGJlZ2luV2hpdGVTcGFjZShwYXJzZXIsIGMpXG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuVEVYVDpcbiAgICAgICAgICBpZiAocGFyc2VyLnNhd1Jvb3QgJiYgIXBhcnNlci5jbG9zZWRSb290KSB7XG4gICAgICAgICAgICB2YXIgc3RhcnRpID0gaSAtIDFcbiAgICAgICAgICAgIHdoaWxlIChjICYmIGMgIT09ICc8JyAmJiBjICE9PSAnJicpIHtcbiAgICAgICAgICAgICAgYyA9IGNoYXJBdChjaHVuaywgaSsrKVxuICAgICAgICAgICAgICBpZiAoYyAmJiBwYXJzZXIudHJhY2tQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHBhcnNlci5wb3NpdGlvbisrXG4gICAgICAgICAgICAgICAgaWYgKGMgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgICBwYXJzZXIubGluZSsrXG4gICAgICAgICAgICAgICAgICBwYXJzZXIuY29sdW1uID0gMFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwYXJzZXIuY29sdW1uKytcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlci50ZXh0Tm9kZSArPSBjaHVuay5zdWJzdHJpbmcoc3RhcnRpLCBpIC0gMSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGMgPT09ICc8JyAmJiAhKHBhcnNlci5zYXdSb290ICYmIHBhcnNlci5jbG9zZWRSb290ICYmICFwYXJzZXIuc3RyaWN0KSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1dBS0FcbiAgICAgICAgICAgIHBhcnNlci5zdGFydFRhZ1Bvc2l0aW9uID0gcGFyc2VyLnBvc2l0aW9uXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChub3Qod2hpdGVzcGFjZSwgYykgJiYgKCFwYXJzZXIuc2F3Um9vdCB8fCBwYXJzZXIuY2xvc2VkUm9vdCkpIHtcbiAgICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdUZXh0IGRhdGEgb3V0c2lkZSBvZiByb290IG5vZGUuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnJicpIHtcbiAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUX0VOVElUWVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyc2VyLnRleHROb2RlICs9IGNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuU0NSSVBUOlxuICAgICAgICAgIC8vIG9ubHkgbm9uLXN0cmljdFxuICAgICAgICAgIGlmIChjID09PSAnPCcpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0NSSVBUX0VORElOR1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXIuc2NyaXB0ICs9IGNcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuU0NSSVBUX0VORElORzpcbiAgICAgICAgICBpZiAoYyA9PT0gJy8nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNMT1NFX1RBR1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXIuc2NyaXB0ICs9ICc8JyArIGNcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0NSSVBUXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLk9QRU5fV0FLQTpcbiAgICAgICAgICAvLyBlaXRoZXIgYSAvLCA/LCAhLCBvciB0ZXh0IGlzIGNvbWluZyBuZXh0LlxuICAgICAgICAgIGlmIChjID09PSAnIScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0dNTF9ERUNMXG4gICAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgPSAnJ1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXMod2hpdGVzcGFjZSwgYykpIHtcbiAgICAgICAgICAgIC8vIHdhaXQgZm9yIGl0Li4uXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01hdGNoKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuT1BFTl9UQUdcbiAgICAgICAgICAgIHBhcnNlci50YWdOYW1lID0gY1xuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJy8nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNMT1NFX1RBR1xuICAgICAgICAgICAgcGFyc2VyLnRhZ05hbWUgPSAnJ1xuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlBST0NfSU5TVFxuICAgICAgICAgICAgcGFyc2VyLnByb2NJbnN0TmFtZSA9IHBhcnNlci5wcm9jSW5zdEJvZHkgPSAnJ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ1VuZW5jb2RlZCA8JylcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBzb21lIHdoaXRlc3BhY2UsIHRoZW4gYWRkIHRoYXQgaW4uXG4gICAgICAgICAgICBpZiAocGFyc2VyLnN0YXJ0VGFnUG9zaXRpb24gKyAxIDwgcGFyc2VyLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgIHZhciBwYWQgPSBwYXJzZXIucG9zaXRpb24gLSBwYXJzZXIuc3RhcnRUYWdQb3NpdGlvblxuICAgICAgICAgICAgICBjID0gbmV3IEFycmF5KHBhZCkuam9pbignICcpICsgY1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyc2VyLnRleHROb2RlICs9ICc8JyArIGNcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5TR01MX0RFQ0w6XG4gICAgICAgICAgaWYgKChwYXJzZXIuc2dtbERlY2wgKyBjKS50b1VwcGVyQ2FzZSgpID09PSBDREFUQSkge1xuICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25vcGVuY2RhdGEnKVxuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DREFUQVxuICAgICAgICAgICAgcGFyc2VyLnNnbWxEZWNsID0gJydcbiAgICAgICAgICAgIHBhcnNlci5jZGF0YSA9ICcnXG4gICAgICAgICAgfSBlbHNlIGlmIChwYXJzZXIuc2dtbERlY2wgKyBjID09PSAnLS0nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNPTU1FTlRcbiAgICAgICAgICAgIHBhcnNlci5jb21tZW50ID0gJydcbiAgICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCA9ICcnXG4gICAgICAgICAgfSBlbHNlIGlmICgocGFyc2VyLnNnbWxEZWNsICsgYykudG9VcHBlckNhc2UoKSA9PT0gRE9DVFlQRSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFXG4gICAgICAgICAgICBpZiAocGFyc2VyLmRvY3R5cGUgfHwgcGFyc2VyLnNhd1Jvb3QpIHtcbiAgICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsXG4gICAgICAgICAgICAgICAgJ0luYXBwcm9wcmlhdGVseSBsb2NhdGVkIGRvY3R5cGUgZGVjbGFyYXRpb24nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyc2VyLmRvY3R5cGUgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnNnbWxEZWNsID0gJydcbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25zZ21sZGVjbGFyYXRpb24nLCBwYXJzZXIuc2dtbERlY2wpXG4gICAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgICAgfSBlbHNlIGlmIChpcyhxdW90ZSwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0dNTF9ERUNMX1FVT1RFRFxuICAgICAgICAgICAgcGFyc2VyLnNnbWxEZWNsICs9IGNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLnNnbWxEZWNsICs9IGNcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuU0dNTF9ERUNMX1FVT1RFRDpcbiAgICAgICAgICBpZiAoYyA9PT0gcGFyc2VyLnEpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0dNTF9ERUNMXG4gICAgICAgICAgICBwYXJzZXIucSA9ICcnXG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCArPSBjXG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuRE9DVFlQRTpcbiAgICAgICAgICBpZiAoYyA9PT0gJz4nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uZG9jdHlwZScsIHBhcnNlci5kb2N0eXBlKVxuICAgICAgICAgICAgcGFyc2VyLmRvY3R5cGUgPSB0cnVlIC8vIGp1c3QgcmVtZW1iZXIgdGhhdCB3ZSBzYXcgaXQuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5kb2N0eXBlICs9IGNcbiAgICAgICAgICAgIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFX0RURFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpcyhxdW90ZSwgYykpIHtcbiAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFX1FVT1RFRFxuICAgICAgICAgICAgICBwYXJzZXIucSA9IGNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuRE9DVFlQRV9RVU9URUQ6XG4gICAgICAgICAgcGFyc2VyLmRvY3R5cGUgKz0gY1xuICAgICAgICAgIGlmIChjID09PSBwYXJzZXIucSkge1xuICAgICAgICAgICAgcGFyc2VyLnEgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkRPQ1RZUEVfRFREOlxuICAgICAgICAgIHBhcnNlci5kb2N0eXBlICs9IGNcbiAgICAgICAgICBpZiAoYyA9PT0gJ10nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzKHF1b3RlLCBjKSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFX0RURF9RVU9URURcbiAgICAgICAgICAgIHBhcnNlci5xID0gY1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5ET0NUWVBFX0RURF9RVU9URUQ6XG4gICAgICAgICAgcGFyc2VyLmRvY3R5cGUgKz0gY1xuICAgICAgICAgIGlmIChjID09PSBwYXJzZXIucSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFX0RURFxuICAgICAgICAgICAgcGFyc2VyLnEgPSAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5DT01NRU5UOlxuICAgICAgICAgIGlmIChjID09PSAnLScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVF9FTkRJTkdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLmNvbW1lbnQgKz0gY1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5DT01NRU5UX0VORElORzpcbiAgICAgICAgICBpZiAoYyA9PT0gJy0nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNPTU1FTlRfRU5ERURcbiAgICAgICAgICAgIHBhcnNlci5jb21tZW50ID0gdGV4dG9wdHMocGFyc2VyLm9wdCwgcGFyc2VyLmNvbW1lbnQpXG4gICAgICAgICAgICBpZiAocGFyc2VyLmNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25jb21tZW50JywgcGFyc2VyLmNvbW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZXIuY29tbWVudCA9ICcnXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5jb21tZW50ICs9ICctJyArIGNcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVFxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5DT01NRU5UX0VOREVEOlxuICAgICAgICAgIGlmIChjICE9PSAnPicpIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnTWFsZm9ybWVkIGNvbW1lbnQnKVxuICAgICAgICAgICAgLy8gYWxsb3cgPCEtLSBibGFoIC0tIGJsb28gLS0+IGluIG5vbi1zdHJpY3QgbW9kZSxcbiAgICAgICAgICAgIC8vIHdoaWNoIGlzIGEgY29tbWVudCBvZiBcIiBibGFoIC0tIGJsb28gXCJcbiAgICAgICAgICAgIHBhcnNlci5jb21tZW50ICs9ICctLScgKyBjXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNPTU1FTlRcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkNEQVRBOlxuICAgICAgICAgIGlmIChjID09PSAnXScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0RBVEFfRU5ESU5HXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5jZGF0YSArPSBjXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkNEQVRBX0VORElORzpcbiAgICAgICAgICBpZiAoYyA9PT0gJ10nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBX0VORElOR18yXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5jZGF0YSArPSAnXScgKyBjXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkNEQVRBX0VORElOR18yOlxuICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIGlmIChwYXJzZXIuY2RhdGEpIHtcbiAgICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25jZGF0YScsIHBhcnNlci5jZGF0YSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uY2xvc2VjZGF0YScpXG4gICAgICAgICAgICBwYXJzZXIuY2RhdGEgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnXScpIHtcbiAgICAgICAgICAgIHBhcnNlci5jZGF0YSArPSAnXSdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLmNkYXRhICs9ICddXScgKyBjXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLlBST0NfSU5TVDpcbiAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlBST0NfSU5TVF9FTkRJTkdcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlBST0NfSU5TVF9CT0RZXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5wcm9jSW5zdE5hbWUgKz0gY1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5QUk9DX0lOU1RfQk9EWTpcbiAgICAgICAgICBpZiAoIXBhcnNlci5wcm9jSW5zdEJvZHkgJiYgaXMod2hpdGVzcGFjZSwgYykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnPycpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuUFJPQ19JTlNUX0VORElOR1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXIucHJvY0luc3RCb2R5ICs9IGNcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuUFJPQ19JTlNUX0VORElORzpcbiAgICAgICAgICBpZiAoYyA9PT0gJz4nKSB7XG4gICAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbnByb2Nlc3NpbmdpbnN0cnVjdGlvbicsIHtcbiAgICAgICAgICAgICAgbmFtZTogcGFyc2VyLnByb2NJbnN0TmFtZSxcbiAgICAgICAgICAgICAgYm9keTogcGFyc2VyLnByb2NJbnN0Qm9keVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHBhcnNlci5wcm9jSW5zdE5hbWUgPSBwYXJzZXIucHJvY0luc3RCb2R5ID0gJydcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXIucHJvY0luc3RCb2R5ICs9ICc/JyArIGNcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuUFJPQ19JTlNUX0JPRFlcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuT1BFTl9UQUc6XG4gICAgICAgICAgaWYgKGlzTWF0Y2gobmFtZUJvZHksIGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIudGFnTmFtZSArPSBjXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1RhZyhwYXJzZXIpXG4gICAgICAgICAgICBpZiAoYyA9PT0gJz4nKSB7XG4gICAgICAgICAgICAgIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnLycpIHtcbiAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1RBR19TTEFTSFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKG5vdCh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCBjaGFyYWN0ZXIgaW4gdGFnIG5hbWUnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLk9QRU5fVEFHX1NMQVNIOlxuICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIG9wZW5UYWcocGFyc2VyLCB0cnVlKVxuICAgICAgICAgICAgY2xvc2VUYWcocGFyc2VyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0ZvcndhcmQtc2xhc2ggaW4gb3BlbmluZyB0YWcgbm90IGZvbGxvd2VkIGJ5ID4nKVxuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQVRUUklCOlxuICAgICAgICAgIC8vIGhhdmVuJ3QgcmVhZCB0aGUgYXR0cmlidXRlIG5hbWUgeWV0LlxuICAgICAgICAgIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnLycpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuT1BFTl9UQUdfU0xBU0hcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2gobmFtZVN0YXJ0LCBjKSkge1xuICAgICAgICAgICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBjXG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfTkFNRVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0ludmFsaWQgYXR0cmlidXRlIG5hbWUnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5BVFRSSUJfTkFNRTpcbiAgICAgICAgICBpZiAoYyA9PT0gJz0nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRVxuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJz4nKSB7XG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0F0dHJpYnV0ZSB3aXRob3V0IHZhbHVlJylcbiAgICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSA9IHBhcnNlci5hdHRyaWJOYW1lXG4gICAgICAgICAgICBhdHRyaWIocGFyc2VyKVxuICAgICAgICAgICAgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgICAgfSBlbHNlIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfTkFNRV9TQVdfV0hJVEVcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2gobmFtZUJvZHksIGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliTmFtZSArPSBjXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCBhdHRyaWJ1dGUgbmFtZScpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkFUVFJJQl9OQU1FX1NBV19XSElURTpcbiAgICAgICAgICBpZiAoYyA9PT0gJz0nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXMod2hpdGVzcGFjZSwgYykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnQXR0cmlidXRlIHdpdGhvdXQgdmFsdWUnKVxuICAgICAgICAgICAgcGFyc2VyLnRhZy5hdHRyaWJ1dGVzW3BhcnNlci5hdHRyaWJOYW1lXSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSAnJ1xuICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25hdHRyaWJ1dGUnLCB7XG4gICAgICAgICAgICAgIG5hbWU6IHBhcnNlci5hdHRyaWJOYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliTmFtZSA9ICcnXG4gICAgICAgICAgICBpZiAoYyA9PT0gJz4nKSB7XG4gICAgICAgICAgICAgIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc01hdGNoKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICAgICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBjXG4gICAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX05BTUVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCBhdHRyaWJ1dGUgbmFtZScpXG4gICAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRTpcbiAgICAgICAgICBpZiAoaXMod2hpdGVzcGFjZSwgYykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIGlmIChpcyhxdW90ZSwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5xID0gY1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfUVVPVEVEXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnVW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlJylcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX1VOUVVPVEVEXG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSBjXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9RVU9URUQ6XG4gICAgICAgICAgaWYgKGMgIT09IHBhcnNlci5xKSB7XG4gICAgICAgICAgICBpZiAoYyA9PT0gJyYnKSB7XG4gICAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX0VOVElUWV9RXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgKz0gY1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgYXR0cmliKHBhcnNlcilcbiAgICAgICAgICBwYXJzZXIucSA9ICcnXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfQ0xPU0VEXG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX0NMT1NFRDpcbiAgICAgICAgICBpZiAoaXMod2hpdGVzcGFjZSwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJy8nKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fVEFHX1NMQVNIXG4gICAgICAgICAgfSBlbHNlIGlmIChpc01hdGNoKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnTm8gd2hpdGVzcGFjZSBiZXR3ZWVuIGF0dHJpYnV0ZXMnKVxuICAgICAgICAgICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBjXG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfTkFNRVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0ludmFsaWQgYXR0cmlidXRlIG5hbWUnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfVU5RVU9URUQ6XG4gICAgICAgICAgaWYgKG5vdChhdHRyaWJFbmQsIGMpKSB7XG4gICAgICAgICAgICBpZiAoYyA9PT0gJyYnKSB7XG4gICAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX0VOVElUWV9VXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgKz0gY1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgYXR0cmliKHBhcnNlcilcbiAgICAgICAgICBpZiAoYyA9PT0gJz4nKSB7XG4gICAgICAgICAgICBvcGVuVGFnKHBhcnNlcilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQ0xPU0VfVEFHOlxuICAgICAgICAgIGlmICghcGFyc2VyLnRhZ05hbWUpIHtcbiAgICAgICAgICAgIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfSBlbHNlIGlmIChub3RNYXRjaChuYW1lU3RhcnQsIGMpKSB7XG4gICAgICAgICAgICAgIGlmIChwYXJzZXIuc2NyaXB0KSB7XG4gICAgICAgICAgICAgICAgcGFyc2VyLnNjcmlwdCArPSAnPC8nICsgY1xuICAgICAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0NSSVBUXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdJbnZhbGlkIHRhZ25hbWUgaW4gY2xvc2luZyB0YWcuJylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGFyc2VyLnRhZ05hbWUgPSBjXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIGNsb3NlVGFnKHBhcnNlcilcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2gobmFtZUJvZHksIGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIudGFnTmFtZSArPSBjXG4gICAgICAgICAgfSBlbHNlIGlmIChwYXJzZXIuc2NyaXB0KSB7XG4gICAgICAgICAgICBwYXJzZXIuc2NyaXB0ICs9ICc8LycgKyBwYXJzZXIudGFnTmFtZVxuICAgICAgICAgICAgcGFyc2VyLnRhZ05hbWUgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5vdCh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0ludmFsaWQgdGFnbmFtZSBpbiBjbG9zaW5nIHRhZycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNMT1NFX1RBR19TQVdfV0hJVEVcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQ0xPU0VfVEFHX1NBV19XSElURTpcbiAgICAgICAgICBpZiAoaXMod2hpdGVzcGFjZSwgYykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIGNsb3NlVGFnKHBhcnNlcilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gY2xvc2luZyB0YWcnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5URVhUX0VOVElUWTpcbiAgICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9FTlRJVFlfUTpcbiAgICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9FTlRJVFlfVTpcbiAgICAgICAgICB2YXIgcmV0dXJuU3RhdGVcbiAgICAgICAgICB2YXIgYnVmZmVyXG4gICAgICAgICAgc3dpdGNoIChwYXJzZXIuc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgUy5URVhUX0VOVElUWTpcbiAgICAgICAgICAgICAgcmV0dXJuU3RhdGUgPSBTLlRFWFRcbiAgICAgICAgICAgICAgYnVmZmVyID0gJ3RleHROb2RlJ1xuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX0VOVElUWV9ROlxuICAgICAgICAgICAgICByZXR1cm5TdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX1FVT1RFRFxuICAgICAgICAgICAgICBidWZmZXIgPSAnYXR0cmliVmFsdWUnXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfRU5USVRZX1U6XG4gICAgICAgICAgICAgIHJldHVyblN0YXRlID0gUy5BVFRSSUJfVkFMVUVfVU5RVU9URURcbiAgICAgICAgICAgICAgYnVmZmVyID0gJ2F0dHJpYlZhbHVlJ1xuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjID09PSAnOycpIHtcbiAgICAgICAgICAgIHBhcnNlcltidWZmZXJdICs9IHBhcnNlRW50aXR5KHBhcnNlcilcbiAgICAgICAgICAgIHBhcnNlci5lbnRpdHkgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gcmV0dXJuU3RhdGVcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2gocGFyc2VyLmVudGl0eS5sZW5ndGggPyBlbnRpdHlCb2R5IDogZW50aXR5U3RhcnQsIGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIuZW50aXR5ICs9IGNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdJbnZhbGlkIGNoYXJhY3RlciBpbiBlbnRpdHkgbmFtZScpXG4gICAgICAgICAgICBwYXJzZXJbYnVmZmVyXSArPSAnJicgKyBwYXJzZXIuZW50aXR5ICsgY1xuICAgICAgICAgICAgcGFyc2VyLmVudGl0eSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSByZXR1cm5TdGF0ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocGFyc2VyLCAnVW5rbm93biBzdGF0ZTogJyArIHBhcnNlci5zdGF0ZSlcbiAgICAgIH1cbiAgICB9IC8vIHdoaWxlXG5cbiAgICBpZiAocGFyc2VyLnBvc2l0aW9uID49IHBhcnNlci5idWZmZXJDaGVja1Bvc2l0aW9uKSB7XG4gICAgICBjaGVja0J1ZmZlckxlbmd0aChwYXJzZXIpXG4gICAgfVxuICAgIHJldHVybiBwYXJzZXJcbiAgfVxuXG4gIC8qISBodHRwOi8vbXRocy5iZS9mcm9tY29kZXBvaW50IHYwLjEuMCBieSBAbWF0aGlhcyAqL1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIVN0cmluZy5mcm9tQ29kZVBvaW50KSB7XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlXG4gICAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yXG4gICAgICB2YXIgZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIE1BWF9TSVpFID0gMHg0MDAwXG4gICAgICAgIHZhciBjb2RlVW5pdHMgPSBbXVxuICAgICAgICB2YXIgaGlnaFN1cnJvZ2F0ZVxuICAgICAgICB2YXIgbG93U3Vycm9nYXRlXG4gICAgICAgIHZhciBpbmRleCA9IC0xXG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuICcnXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGNvZGVQb2ludCA9IE51bWJlcihhcmd1bWVudHNbaW5kZXhdKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc0Zpbml0ZShjb2RlUG9pbnQpIHx8IC8vIGBOYU5gLCBgK0luZmluaXR5YCwgb3IgYC1JbmZpbml0eWBcbiAgICAgICAgICAgIGNvZGVQb2ludCA8IDAgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG4gICAgICAgICAgICBjb2RlUG9pbnQgPiAweDEwRkZGRiB8fCAvLyBub3QgYSB2YWxpZCBVbmljb2RlIGNvZGUgcG9pbnRcbiAgICAgICAgICAgIGZsb29yKGNvZGVQb2ludCkgIT09IGNvZGVQb2ludCAvLyBub3QgYW4gaW50ZWdlclxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCBjb2RlIHBvaW50OiAnICsgY29kZVBvaW50KVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29kZVBvaW50IDw9IDB4RkZGRikgeyAvLyBCTVAgY29kZSBwb2ludFxuICAgICAgICAgICAgY29kZVVuaXRzLnB1c2goY29kZVBvaW50KVxuICAgICAgICAgIH0gZWxzZSB7IC8vIEFzdHJhbCBjb2RlIHBvaW50OyBzcGxpdCBpbiBzdXJyb2dhdGUgaGFsdmVzXG4gICAgICAgICAgICAvLyBodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuICAgICAgICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgICAgICAgIGhpZ2hTdXJyb2dhdGUgPSAoY29kZVBvaW50ID4+IDEwKSArIDB4RDgwMFxuICAgICAgICAgICAgbG93U3Vycm9nYXRlID0gKGNvZGVQb2ludCAlIDB4NDAwKSArIDB4REMwMFxuICAgICAgICAgICAgY29kZVVuaXRzLnB1c2goaGlnaFN1cnJvZ2F0ZSwgbG93U3Vycm9nYXRlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kZXggKyAxID09PSBsZW5ndGggfHwgY29kZVVuaXRzLmxlbmd0aCA+IE1BWF9TSVpFKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cylcbiAgICAgICAgICAgIGNvZGVVbml0cy5sZW5ndGggPSAwXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJpbmcsICdmcm9tQ29kZVBvaW50Jywge1xuICAgICAgICAgIHZhbHVlOiBmcm9tQ29kZVBvaW50LFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgU3RyaW5nLmZyb21Db2RlUG9pbnQgPSBmcm9tQ29kZVBvaW50XG4gICAgICB9XG4gICAgfSgpKVxuICB9XG59KSh0eXBlb2YgZXhwb3J0cyA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLnNheCA9IHt9IDogZXhwb3J0cylcbiIsIi8vIHByb3RvdHlwZSBjbGFzcyBmb3IgaGFzaCBmdW5jdGlvbnNcbmZ1bmN0aW9uIEhhc2ggKGJsb2NrU2l6ZSwgZmluYWxTaXplKSB7XG4gIHRoaXMuX2Jsb2NrID0gbmV3IEJ1ZmZlcihibG9ja1NpemUpXG4gIHRoaXMuX2ZpbmFsU2l6ZSA9IGZpbmFsU2l6ZVxuICB0aGlzLl9ibG9ja1NpemUgPSBibG9ja1NpemVcbiAgdGhpcy5fbGVuID0gMFxuICB0aGlzLl9zID0gMFxufVxuXG5IYXNoLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jKSB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmMgPSBlbmMgfHwgJ3V0ZjgnXG4gICAgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgZW5jKVxuICB9XG5cbiAgdmFyIGwgPSB0aGlzLl9sZW4gKz0gZGF0YS5sZW5ndGhcbiAgdmFyIHMgPSB0aGlzLl9zIHx8IDBcbiAgdmFyIGYgPSAwXG4gIHZhciBidWZmZXIgPSB0aGlzLl9ibG9ja1xuXG4gIHdoaWxlIChzIDwgbCkge1xuICAgIHZhciB0ID0gTWF0aC5taW4oZGF0YS5sZW5ndGgsIGYgKyB0aGlzLl9ibG9ja1NpemUgLSAocyAlIHRoaXMuX2Jsb2NrU2l6ZSkpXG4gICAgdmFyIGNoID0gKHQgLSBmKVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaDsgaSsrKSB7XG4gICAgICBidWZmZXJbKHMgJSB0aGlzLl9ibG9ja1NpemUpICsgaV0gPSBkYXRhW2kgKyBmXVxuICAgIH1cblxuICAgIHMgKz0gY2hcbiAgICBmICs9IGNoXG5cbiAgICBpZiAoKHMgJSB0aGlzLl9ibG9ja1NpemUpID09PSAwKSB7XG4gICAgICB0aGlzLl91cGRhdGUoYnVmZmVyKVxuICAgIH1cbiAgfVxuICB0aGlzLl9zID0gc1xuXG4gIHJldHVybiB0aGlzXG59XG5cbkhhc2gucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgLy8gU3VwcG9zZSB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIE0sIGluIGJpdHMsIGlzIGxcbiAgdmFyIGwgPSB0aGlzLl9sZW4gKiA4XG5cbiAgLy8gQXBwZW5kIHRoZSBiaXQgMSB0byB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlXG4gIHRoaXMuX2Jsb2NrW3RoaXMuX2xlbiAlIHRoaXMuX2Jsb2NrU2l6ZV0gPSAweDgwXG5cbiAgLy8gYW5kIHRoZW4gayB6ZXJvIGJpdHMsIHdoZXJlIGsgaXMgdGhlIHNtYWxsZXN0IG5vbi1uZWdhdGl2ZSBzb2x1dGlvbiB0byB0aGUgZXF1YXRpb24gKGwgKyAxICsgaykgPT09IGZpbmFsU2l6ZSBtb2QgYmxvY2tTaXplXG4gIHRoaXMuX2Jsb2NrLmZpbGwoMCwgdGhpcy5fbGVuICUgdGhpcy5fYmxvY2tTaXplICsgMSlcblxuICBpZiAobCAlICh0aGlzLl9ibG9ja1NpemUgKiA4KSA+PSB0aGlzLl9maW5hbFNpemUgKiA4KSB7XG4gICAgdGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKVxuICAgIHRoaXMuX2Jsb2NrLmZpbGwoMClcbiAgfVxuXG4gIC8vIHRvIHRoaXMgYXBwZW5kIHRoZSBibG9jayB3aGljaCBpcyBlcXVhbCB0byB0aGUgbnVtYmVyIGwgd3JpdHRlbiBpbiBiaW5hcnlcbiAgLy8gVE9ETzogaGFuZGxlIGNhc2Ugd2hlcmUgbCBpcyA+IE1hdGgucG93KDIsIDI5KVxuICB0aGlzLl9ibG9jay53cml0ZUludDMyQkUobCwgdGhpcy5fYmxvY2tTaXplIC0gNClcblxuICB2YXIgaGFzaCA9IHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jaykgfHwgdGhpcy5faGFzaCgpXG5cbiAgcmV0dXJuIGVuYyA/IGhhc2gudG9TdHJpbmcoZW5jKSA6IGhhc2hcbn1cblxuSGFzaC5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2hcbiIsInZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTSEEgKGFsZ29yaXRobSkge1xuICBhbGdvcml0aG0gPSBhbGdvcml0aG0udG9Mb3dlckNhc2UoKVxuXG4gIHZhciBBbGdvcml0aG0gPSBleHBvcnRzW2FsZ29yaXRobV1cbiAgaWYgKCFBbGdvcml0aG0pIHRocm93IG5ldyBFcnJvcihhbGdvcml0aG0gKyAnIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKScpXG5cbiAgcmV0dXJuIG5ldyBBbGdvcml0aG0oKVxufVxuXG5leHBvcnRzLnNoYSA9IHJlcXVpcmUoJy4vc2hhJylcbmV4cG9ydHMuc2hhMSA9IHJlcXVpcmUoJy4vc2hhMScpXG5leHBvcnRzLnNoYTIyNCA9IHJlcXVpcmUoJy4vc2hhMjI0JylcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEyNTYnKVxuZXhwb3J0cy5zaGEzODQgPSByZXF1aXJlKCcuL3NoYTM4NCcpXG5leHBvcnRzLnNoYTUxMiA9IHJlcXVpcmUoJy4vc2hhNTEyJylcbiIsIi8qXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY3VyZSBIYXNoIEFsZ29yaXRobSwgU0hBLTAsIGFzIGRlZmluZWRcbiAqIGluIEZJUFMgUFVCIDE4MC0xXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzaGExLmpzIG9mIHRoZSBzYW1lIHJlcG9zaXRvcnkuXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFNIQS0wIGFuZCBTSEEtMSBpcyBqdXN0IGEgYml0d2lzZSByb3RhdGUgbGVmdFxuICogb3BlcmF0aW9uIHdhcyBhZGRlZC5cbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBLID0gW1xuICAweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjIHwgMCwgMHhjYTYyYzFkNiB8IDBcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoODApXG5cbmZ1bmN0aW9uIFNoYSAoKSB7XG4gIHRoaXMuaW5pdCgpXG4gIHRoaXMuX3cgPSBXXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDY0LCA1Nilcbn1cblxuaW5oZXJpdHMoU2hhLCBIYXNoKVxuXG5TaGEucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2EgPSAweDY3NDUyMzAxXG4gIHRoaXMuX2IgPSAweGVmY2RhYjg5XG4gIHRoaXMuX2MgPSAweDk4YmFkY2ZlXG4gIHRoaXMuX2QgPSAweDEwMzI1NDc2XG4gIHRoaXMuX2UgPSAweGMzZDJlMWYwXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gcm90bDUgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCA1KSB8IChudW0gPj4+IDI3KVxufVxuXG5mdW5jdGlvbiByb3RsMzAgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAzMCkgfCAobnVtID4+PiAyKVxufVxuXG5mdW5jdGlvbiBmdCAocywgYiwgYywgZCkge1xuICBpZiAocyA9PT0gMCkgcmV0dXJuIChiICYgYykgfCAoKH5iKSAmIGQpXG4gIGlmIChzID09PSAyKSByZXR1cm4gKGIgJiBjKSB8IChiICYgZCkgfCAoYyAmIGQpXG4gIHJldHVybiBiIF4gYyBeIGRcbn1cblxuU2hhLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGEgPSB0aGlzLl9hIHwgMFxuICB2YXIgYiA9IHRoaXMuX2IgfCAwXG4gIHZhciBjID0gdGhpcy5fYyB8IDBcbiAgdmFyIGQgPSB0aGlzLl9kIHwgMFxuICB2YXIgZSA9IHRoaXMuX2UgfCAwXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgZm9yICg7IGkgPCA4MDsgKytpKSBXW2ldID0gV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XVxuXG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7ICsraikge1xuICAgIHZhciBzID0gfn4oaiAvIDIwKVxuICAgIHZhciB0ID0gKHJvdGw1KGEpICsgZnQocywgYiwgYywgZCkgKyBlICsgV1tqXSArIEtbc10pIHwgMFxuXG4gICAgZSA9IGRcbiAgICBkID0gY1xuICAgIGMgPSByb3RsMzAoYilcbiAgICBiID0gYVxuICAgIGEgPSB0XG4gIH1cblxuICB0aGlzLl9hID0gKGEgKyB0aGlzLl9hKSB8IDBcbiAgdGhpcy5fYiA9IChiICsgdGhpcy5fYikgfCAwXG4gIHRoaXMuX2MgPSAoYyArIHRoaXMuX2MpIHwgMFxuICB0aGlzLl9kID0gKGQgKyB0aGlzLl9kKSB8IDBcbiAgdGhpcy5fZSA9IChlICsgdGhpcy5fZSkgfCAwXG59XG5cblNoYS5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcigyMClcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hIHwgMCwgMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYiB8IDAsIDQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2MgfCAwLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kIHwgMCwgMTIpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2UgfCAwLCAxNilcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYVxuIiwiLypcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2VjdXJlIEhhc2ggQWxnb3JpdGhtLCBTSEEtMSwgYXMgZGVmaW5lZFxuICogaW4gRklQUyBQVUIgMTgwLTFcbiAqIFZlcnNpb24gMi4xYSBDb3B5cmlnaHQgUGF1bCBKb2huc3RvbiAyMDAwIC0gMjAwMi5cbiAqIE90aGVyIGNvbnRyaWJ1dG9yczogR3JlZyBIb2x0LCBBbmRyZXcgS2VwZXJ0LCBZZG5hciwgTG9zdGluZXRcbiAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgTGljZW5zZVxuICogU2VlIGh0dHA6Ly9wYWpob21lLm9yZy51ay9jcnlwdC9tZDUgZm9yIGRldGFpbHMuXG4gKi9cblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxuXG52YXIgSyA9IFtcbiAgMHg1YTgyNzk5OSwgMHg2ZWQ5ZWJhMSwgMHg4ZjFiYmNkYyB8IDAsIDB4Y2E2MmMxZDYgfCAwXG5dXG5cbnZhciBXID0gbmV3IEFycmF5KDgwKVxuXG5mdW5jdGlvbiBTaGExICgpIHtcbiAgdGhpcy5pbml0KClcbiAgdGhpcy5fdyA9IFdcblxuICBIYXNoLmNhbGwodGhpcywgNjQsIDU2KVxufVxuXG5pbmhlcml0cyhTaGExLCBIYXNoKVxuXG5TaGExLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHg2NzQ1MjMwMVxuICB0aGlzLl9iID0gMHhlZmNkYWI4OVxuICB0aGlzLl9jID0gMHg5OGJhZGNmZVxuICB0aGlzLl9kID0gMHgxMDMyNTQ3NlxuICB0aGlzLl9lID0gMHhjM2QyZTFmMFxuXG4gIHJldHVybiB0aGlzXG59XG5cbmZ1bmN0aW9uIHJvdGwxIChudW0pIHtcbiAgcmV0dXJuIChudW0gPDwgMSkgfCAobnVtID4+PiAzMSlcbn1cblxuZnVuY3Rpb24gcm90bDUgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCA1KSB8IChudW0gPj4+IDI3KVxufVxuXG5mdW5jdGlvbiByb3RsMzAgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAzMCkgfCAobnVtID4+PiAyKVxufVxuXG5mdW5jdGlvbiBmdCAocywgYiwgYywgZCkge1xuICBpZiAocyA9PT0gMCkgcmV0dXJuIChiICYgYykgfCAoKH5iKSAmIGQpXG4gIGlmIChzID09PSAyKSByZXR1cm4gKGIgJiBjKSB8IChiICYgZCkgfCAoYyAmIGQpXG4gIHJldHVybiBiIF4gYyBeIGRcbn1cblxuU2hhMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChNKSB7XG4gIHZhciBXID0gdGhpcy5fd1xuXG4gIHZhciBhID0gdGhpcy5fYSB8IDBcbiAgdmFyIGIgPSB0aGlzLl9iIHwgMFxuICB2YXIgYyA9IHRoaXMuX2MgfCAwXG4gIHZhciBkID0gdGhpcy5fZCB8IDBcbiAgdmFyIGUgPSB0aGlzLl9lIHwgMFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkgV1tpXSA9IE0ucmVhZEludDMyQkUoaSAqIDQpXG4gIGZvciAoOyBpIDwgODA7ICsraSkgV1tpXSA9IHJvdGwxKFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl0pXG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4MDsgKytqKSB7XG4gICAgdmFyIHMgPSB+fihqIC8gMjApXG4gICAgdmFyIHQgPSAocm90bDUoYSkgKyBmdChzLCBiLCBjLCBkKSArIGUgKyBXW2pdICsgS1tzXSkgfCAwXG5cbiAgICBlID0gZFxuICAgIGQgPSBjXG4gICAgYyA9IHJvdGwzMChiKVxuICAgIGIgPSBhXG4gICAgYSA9IHRcbiAgfVxuXG4gIHRoaXMuX2EgPSAoYSArIHRoaXMuX2EpIHwgMFxuICB0aGlzLl9iID0gKGIgKyB0aGlzLl9iKSB8IDBcbiAgdGhpcy5fYyA9IChjICsgdGhpcy5fYykgfCAwXG4gIHRoaXMuX2QgPSAoZCArIHRoaXMuX2QpIHwgMFxuICB0aGlzLl9lID0gKGUgKyB0aGlzLl9lKSB8IDBcbn1cblxuU2hhMS5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcigyMClcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hIHwgMCwgMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYiB8IDAsIDQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2MgfCAwLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kIHwgMCwgMTIpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2UgfCAwLCAxNilcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTFcbiIsIi8qKlxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0yNTYsIGFzIGRlZmluZWRcbiAqIGluIEZJUFMgMTgwLTJcbiAqIFZlcnNpb24gMi4yLWJldGEgQ29weXJpZ2h0IEFuZ2VsIE1hcmluLCBQYXVsIEpvaG5zdG9uIDIwMDAgLSAyMDA5LlxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICpcbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgU2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEyNTYnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxuXG52YXIgVyA9IG5ldyBBcnJheSg2NClcblxuZnVuY3Rpb24gU2hhMjI0ICgpIHtcbiAgdGhpcy5pbml0KClcblxuICB0aGlzLl93ID0gVyAvLyBuZXcgQXJyYXkoNjQpXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDY0LCA1Nilcbn1cblxuaW5oZXJpdHMoU2hhMjI0LCBTaGEyNTYpXG5cblNoYTIyNC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fYSA9IDB4YzEwNTllZDhcbiAgdGhpcy5fYiA9IDB4MzY3Y2Q1MDdcbiAgdGhpcy5fYyA9IDB4MzA3MGRkMTdcbiAgdGhpcy5fZCA9IDB4ZjcwZTU5MzlcbiAgdGhpcy5fZSA9IDB4ZmZjMDBiMzFcbiAgdGhpcy5fZiA9IDB4Njg1ODE1MTFcbiAgdGhpcy5fZyA9IDB4NjRmOThmYTdcbiAgdGhpcy5faCA9IDB4YmVmYTRmYTRcblxuICByZXR1cm4gdGhpc1xufVxuXG5TaGEyMjQucHJvdG90eXBlLl9oYXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgSCA9IG5ldyBCdWZmZXIoMjgpXG5cbiAgSC53cml0ZUludDMyQkUodGhpcy5fYSwgMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYiwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYywgOClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZCwgMTIpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2UsIDE2KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9mLCAyMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZywgMjQpXG5cbiAgcmV0dXJuIEhcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGEyMjRcbiIsIi8qKlxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0yNTYsIGFzIGRlZmluZWRcbiAqIGluIEZJUFMgMTgwLTJcbiAqIFZlcnNpb24gMi4yLWJldGEgQ29weXJpZ2h0IEFuZ2VsIE1hcmluLCBQYXVsIEpvaG5zdG9uIDIwMDAgLSAyMDA5LlxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICpcbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBLID0gW1xuICAweDQyOEEyRjk4LCAweDcxMzc0NDkxLCAweEI1QzBGQkNGLCAweEU5QjVEQkE1LFxuICAweDM5NTZDMjVCLCAweDU5RjExMUYxLCAweDkyM0Y4MkE0LCAweEFCMUM1RUQ1LFxuICAweEQ4MDdBQTk4LCAweDEyODM1QjAxLCAweDI0MzE4NUJFLCAweDU1MEM3REMzLFxuICAweDcyQkU1RDc0LCAweDgwREVCMUZFLCAweDlCREMwNkE3LCAweEMxOUJGMTc0LFxuICAweEU0OUI2OUMxLCAweEVGQkU0Nzg2LCAweDBGQzE5REM2LCAweDI0MENBMUNDLFxuICAweDJERTkyQzZGLCAweDRBNzQ4NEFBLCAweDVDQjBBOURDLCAweDc2Rjk4OERBLFxuICAweDk4M0U1MTUyLCAweEE4MzFDNjZELCAweEIwMDMyN0M4LCAweEJGNTk3RkM3LFxuICAweEM2RTAwQkYzLCAweEQ1QTc5MTQ3LCAweDA2Q0E2MzUxLCAweDE0MjkyOTY3LFxuICAweDI3QjcwQTg1LCAweDJFMUIyMTM4LCAweDREMkM2REZDLCAweDUzMzgwRDEzLFxuICAweDY1MEE3MzU0LCAweDc2NkEwQUJCLCAweDgxQzJDOTJFLCAweDkyNzIyQzg1LFxuICAweEEyQkZFOEExLCAweEE4MUE2NjRCLCAweEMyNEI4QjcwLCAweEM3NkM1MUEzLFxuICAweEQxOTJFODE5LCAweEQ2OTkwNjI0LCAweEY0MEUzNTg1LCAweDEwNkFBMDcwLFxuICAweDE5QTRDMTE2LCAweDFFMzc2QzA4LCAweDI3NDg3NzRDLCAweDM0QjBCQ0I1LFxuICAweDM5MUMwQ0IzLCAweDRFRDhBQTRBLCAweDVCOUNDQTRGLCAweDY4MkU2RkYzLFxuICAweDc0OEY4MkVFLCAweDc4QTU2MzZGLCAweDg0Qzg3ODE0LCAweDhDQzcwMjA4LFxuICAweDkwQkVGRkZBLCAweEE0NTA2Q0VCLCAweEJFRjlBM0Y3LCAweEM2NzE3OEYyXG5dXG5cbnZhciBXID0gbmV3IEFycmF5KDY0KVxuXG5mdW5jdGlvbiBTaGEyNTYgKCkge1xuICB0aGlzLmluaXQoKVxuXG4gIHRoaXMuX3cgPSBXIC8vIG5ldyBBcnJheSg2NClcblxuICBIYXNoLmNhbGwodGhpcywgNjQsIDU2KVxufVxuXG5pbmhlcml0cyhTaGEyNTYsIEhhc2gpXG5cblNoYTI1Ni5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fYSA9IDB4NmEwOWU2NjdcbiAgdGhpcy5fYiA9IDB4YmI2N2FlODVcbiAgdGhpcy5fYyA9IDB4M2M2ZWYzNzJcbiAgdGhpcy5fZCA9IDB4YTU0ZmY1M2FcbiAgdGhpcy5fZSA9IDB4NTEwZTUyN2ZcbiAgdGhpcy5fZiA9IDB4OWIwNTY4OGNcbiAgdGhpcy5fZyA9IDB4MWY4M2Q5YWJcbiAgdGhpcy5faCA9IDB4NWJlMGNkMTlcblxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiBjaCAoeCwgeSwgeikge1xuICByZXR1cm4geiBeICh4ICYgKHkgXiB6KSlcbn1cblxuZnVuY3Rpb24gbWFqICh4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIHwgKHogJiAoeCB8IHkpKVxufVxuXG5mdW5jdGlvbiBzaWdtYTAgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiAyIHwgeCA8PCAzMCkgXiAoeCA+Pj4gMTMgfCB4IDw8IDE5KSBeICh4ID4+PiAyMiB8IHggPDwgMTApXG59XG5cbmZ1bmN0aW9uIHNpZ21hMSAoeCkge1xuICByZXR1cm4gKHggPj4+IDYgfCB4IDw8IDI2KSBeICh4ID4+PiAxMSB8IHggPDwgMjEpIF4gKHggPj4+IDI1IHwgeCA8PCA3KVxufVxuXG5mdW5jdGlvbiBnYW1tYTAgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiA3IHwgeCA8PCAyNSkgXiAoeCA+Pj4gMTggfCB4IDw8IDE0KSBeICh4ID4+PiAzKVxufVxuXG5mdW5jdGlvbiBnYW1tYTEgKHgpIHtcbiAgcmV0dXJuICh4ID4+PiAxNyB8IHggPDwgMTUpIF4gKHggPj4+IDE5IHwgeCA8PCAxMykgXiAoeCA+Pj4gMTApXG59XG5cblNoYTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChNKSB7XG4gIHZhciBXID0gdGhpcy5fd1xuXG4gIHZhciBhID0gdGhpcy5fYSB8IDBcbiAgdmFyIGIgPSB0aGlzLl9iIHwgMFxuICB2YXIgYyA9IHRoaXMuX2MgfCAwXG4gIHZhciBkID0gdGhpcy5fZCB8IDBcbiAgdmFyIGUgPSB0aGlzLl9lIHwgMFxuICB2YXIgZiA9IHRoaXMuX2YgfCAwXG4gIHZhciBnID0gdGhpcy5fZyB8IDBcbiAgdmFyIGggPSB0aGlzLl9oIHwgMFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkgV1tpXSA9IE0ucmVhZEludDMyQkUoaSAqIDQpXG4gIGZvciAoOyBpIDwgNjQ7ICsraSkgV1tpXSA9IChnYW1tYTEoV1tpIC0gMl0pICsgV1tpIC0gN10gKyBnYW1tYTAoV1tpIC0gMTVdKSArIFdbaSAtIDE2XSkgfCAwXG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCA2NDsgKytqKSB7XG4gICAgdmFyIFQxID0gKGggKyBzaWdtYTEoZSkgKyBjaChlLCBmLCBnKSArIEtbal0gKyBXW2pdKSB8IDBcbiAgICB2YXIgVDIgPSAoc2lnbWEwKGEpICsgbWFqKGEsIGIsIGMpKSB8IDBcblxuICAgIGggPSBnXG4gICAgZyA9IGZcbiAgICBmID0gZVxuICAgIGUgPSAoZCArIFQxKSB8IDBcbiAgICBkID0gY1xuICAgIGMgPSBiXG4gICAgYiA9IGFcbiAgICBhID0gKFQxICsgVDIpIHwgMFxuICB9XG5cbiAgdGhpcy5fYSA9IChhICsgdGhpcy5fYSkgfCAwXG4gIHRoaXMuX2IgPSAoYiArIHRoaXMuX2IpIHwgMFxuICB0aGlzLl9jID0gKGMgKyB0aGlzLl9jKSB8IDBcbiAgdGhpcy5fZCA9IChkICsgdGhpcy5fZCkgfCAwXG4gIHRoaXMuX2UgPSAoZSArIHRoaXMuX2UpIHwgMFxuICB0aGlzLl9mID0gKGYgKyB0aGlzLl9mKSB8IDBcbiAgdGhpcy5fZyA9IChnICsgdGhpcy5fZykgfCAwXG4gIHRoaXMuX2ggPSAoaCArIHRoaXMuX2gpIHwgMFxufVxuXG5TaGEyNTYucHJvdG90eXBlLl9oYXNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgSCA9IG5ldyBCdWZmZXIoMzIpXG5cbiAgSC53cml0ZUludDMyQkUodGhpcy5fYSwgMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYiwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYywgOClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZCwgMTIpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2UsIDE2KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9mLCAyMClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZywgMjQpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2gsIDI4KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhMjU2XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi9zaGE1MTInKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxuXG52YXIgVyA9IG5ldyBBcnJheSgxNjApXG5cbmZ1bmN0aW9uIFNoYTM4NCAoKSB7XG4gIHRoaXMuaW5pdCgpXG4gIHRoaXMuX3cgPSBXXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDEyOCwgMTEyKVxufVxuXG5pbmhlcml0cyhTaGEzODQsIFNIQTUxMilcblxuU2hhMzg0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9haCA9IDB4Y2JiYjlkNWRcbiAgdGhpcy5fYmggPSAweDYyOWEyOTJhXG4gIHRoaXMuX2NoID0gMHg5MTU5MDE1YVxuICB0aGlzLl9kaCA9IDB4MTUyZmVjZDhcbiAgdGhpcy5fZWggPSAweDY3MzMyNjY3XG4gIHRoaXMuX2ZoID0gMHg4ZWI0NGE4N1xuICB0aGlzLl9naCA9IDB4ZGIwYzJlMGRcbiAgdGhpcy5faGggPSAweDQ3YjU0ODFkXG5cbiAgdGhpcy5fYWwgPSAweGMxMDU5ZWQ4XG4gIHRoaXMuX2JsID0gMHgzNjdjZDUwN1xuICB0aGlzLl9jbCA9IDB4MzA3MGRkMTdcbiAgdGhpcy5fZGwgPSAweGY3MGU1OTM5XG4gIHRoaXMuX2VsID0gMHhmZmMwMGIzMVxuICB0aGlzLl9mbCA9IDB4Njg1ODE1MTFcbiAgdGhpcy5fZ2wgPSAweDY0Zjk4ZmE3XG4gIHRoaXMuX2hsID0gMHhiZWZhNGZhNFxuXG4gIHJldHVybiB0aGlzXG59XG5cblNoYTM4NC5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcig0OClcblxuICBmdW5jdGlvbiB3cml0ZUludDY0QkUgKGgsIGwsIG9mZnNldCkge1xuICAgIEgud3JpdGVJbnQzMkJFKGgsIG9mZnNldClcbiAgICBILndyaXRlSW50MzJCRShsLCBvZmZzZXQgKyA0KVxuICB9XG5cbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2FoLCB0aGlzLl9hbCwgMClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2JoLCB0aGlzLl9ibCwgOClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2NoLCB0aGlzLl9jbCwgMTYpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9kaCwgdGhpcy5fZGwsIDI0KVxuICB3cml0ZUludDY0QkUodGhpcy5fZWgsIHRoaXMuX2VsLCAzMilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2ZoLCB0aGlzLl9mbCwgNDApXG5cbiAgcmV0dXJuIEhcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGEzODRcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9oYXNoJylcblxudmFyIEsgPSBbXG4gIDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QsXG4gIDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMsXG4gIDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsIDB4YjYwNWQwMTksXG4gIDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgsXG4gIDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsIDB4NDU3MDZmYmUsXG4gIDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIsXG4gIDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEsXG4gIDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQsXG4gIDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMsXG4gIDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsIDB4NzdhYzljNjUsXG4gIDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMsXG4gIDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUsXG4gIDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsIDB4MmRiNDMyMTAsXG4gIDB4YjAwMzI3YzgsIDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQsXG4gIDB4YzZlMDBiZjMsIDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUsXG4gIDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsIDB4MGEwZTZlNzAsXG4gIDB4MjdiNzBhODUsIDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYsXG4gIDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYsXG4gIDB4NjUwYTczNTQsIDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgsXG4gIDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IsXG4gIDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEsXG4gIDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzAsXG4gIDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTAsXG4gIDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgsXG4gIDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMsXG4gIDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgsXG4gIDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IsXG4gIDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMsXG4gIDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsIDB4NDMxNzJmNjAsXG4gIDB4ODRjODc4MTQsIDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMsXG4gIDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTksXG4gIDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIsXG4gIDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcsXG4gIDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgsXG4gIDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsIDB4YTJjODk4YTYsXG4gIDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIsXG4gIDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMsXG4gIDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMsXG4gIDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEsXG4gIDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsIDB4NGE0NzU4MTdcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoMTYwKVxuXG5mdW5jdGlvbiBTaGE1MTIgKCkge1xuICB0aGlzLmluaXQoKVxuICB0aGlzLl93ID0gV1xuXG4gIEhhc2guY2FsbCh0aGlzLCAxMjgsIDExMilcbn1cblxuaW5oZXJpdHMoU2hhNTEyLCBIYXNoKVxuXG5TaGE1MTIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2FoID0gMHg2YTA5ZTY2N1xuICB0aGlzLl9iaCA9IDB4YmI2N2FlODVcbiAgdGhpcy5fY2ggPSAweDNjNmVmMzcyXG4gIHRoaXMuX2RoID0gMHhhNTRmZjUzYVxuICB0aGlzLl9laCA9IDB4NTEwZTUyN2ZcbiAgdGhpcy5fZmggPSAweDliMDU2ODhjXG4gIHRoaXMuX2doID0gMHgxZjgzZDlhYlxuICB0aGlzLl9oaCA9IDB4NWJlMGNkMTlcblxuICB0aGlzLl9hbCA9IDB4ZjNiY2M5MDhcbiAgdGhpcy5fYmwgPSAweDg0Y2FhNzNiXG4gIHRoaXMuX2NsID0gMHhmZTk0ZjgyYlxuICB0aGlzLl9kbCA9IDB4NWYxZDM2ZjFcbiAgdGhpcy5fZWwgPSAweGFkZTY4MmQxXG4gIHRoaXMuX2ZsID0gMHgyYjNlNmMxZlxuICB0aGlzLl9nbCA9IDB4ZmI0MWJkNmJcbiAgdGhpcy5faGwgPSAweDEzN2UyMTc5XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gQ2ggKHgsIHksIHopIHtcbiAgcmV0dXJuIHogXiAoeCAmICh5IF4geikpXG59XG5cbmZ1bmN0aW9uIG1haiAoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSB8ICh6ICYgKHggfCB5KSlcbn1cblxuZnVuY3Rpb24gc2lnbWEwICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDI4IHwgeGwgPDwgNCkgXiAoeGwgPj4+IDIgfCB4IDw8IDMwKSBeICh4bCA+Pj4gNyB8IHggPDwgMjUpXG59XG5cbmZ1bmN0aW9uIHNpZ21hMSAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxNCB8IHhsIDw8IDE4KSBeICh4ID4+PiAxOCB8IHhsIDw8IDE0KSBeICh4bCA+Pj4gOSB8IHggPDwgMjMpXG59XG5cbmZ1bmN0aW9uIEdhbW1hMCAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxIHwgeGwgPDwgMzEpIF4gKHggPj4+IDggfCB4bCA8PCAyNCkgXiAoeCA+Pj4gNylcbn1cblxuZnVuY3Rpb24gR2FtbWEwbCAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxIHwgeGwgPDwgMzEpIF4gKHggPj4+IDggfCB4bCA8PCAyNCkgXiAoeCA+Pj4gNyB8IHhsIDw8IDI1KVxufVxuXG5mdW5jdGlvbiBHYW1tYTEgKHgsIHhsKSB7XG4gIHJldHVybiAoeCA+Pj4gMTkgfCB4bCA8PCAxMykgXiAoeGwgPj4+IDI5IHwgeCA8PCAzKSBeICh4ID4+PiA2KVxufVxuXG5mdW5jdGlvbiBHYW1tYTFsICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDE5IHwgeGwgPDwgMTMpIF4gKHhsID4+PiAyOSB8IHggPDwgMykgXiAoeCA+Pj4gNiB8IHhsIDw8IDI2KVxufVxuXG5mdW5jdGlvbiBnZXRDYXJyeSAoYSwgYikge1xuICByZXR1cm4gKGEgPj4+IDApIDwgKGIgPj4+IDApID8gMSA6IDBcbn1cblxuU2hhNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGFoID0gdGhpcy5fYWggfCAwXG4gIHZhciBiaCA9IHRoaXMuX2JoIHwgMFxuICB2YXIgY2ggPSB0aGlzLl9jaCB8IDBcbiAgdmFyIGRoID0gdGhpcy5fZGggfCAwXG4gIHZhciBlaCA9IHRoaXMuX2VoIHwgMFxuICB2YXIgZmggPSB0aGlzLl9maCB8IDBcbiAgdmFyIGdoID0gdGhpcy5fZ2ggfCAwXG4gIHZhciBoaCA9IHRoaXMuX2hoIHwgMFxuXG4gIHZhciBhbCA9IHRoaXMuX2FsIHwgMFxuICB2YXIgYmwgPSB0aGlzLl9ibCB8IDBcbiAgdmFyIGNsID0gdGhpcy5fY2wgfCAwXG4gIHZhciBkbCA9IHRoaXMuX2RsIHwgMFxuICB2YXIgZWwgPSB0aGlzLl9lbCB8IDBcbiAgdmFyIGZsID0gdGhpcy5fZmwgfCAwXG4gIHZhciBnbCA9IHRoaXMuX2dsIHwgMFxuICB2YXIgaGwgPSB0aGlzLl9obCB8IDBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDMyOyBpICs9IDIpIHtcbiAgICBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgICBXW2kgKyAxXSA9IE0ucmVhZEludDMyQkUoaSAqIDQgKyA0KVxuICB9XG4gIGZvciAoOyBpIDwgMTYwOyBpICs9IDIpIHtcbiAgICB2YXIgeGggPSBXW2kgLSAxNSAqIDJdXG4gICAgdmFyIHhsID0gV1tpIC0gMTUgKiAyICsgMV1cbiAgICB2YXIgZ2FtbWEwID0gR2FtbWEwKHhoLCB4bClcbiAgICB2YXIgZ2FtbWEwbCA9IEdhbW1hMGwoeGwsIHhoKVxuXG4gICAgeGggPSBXW2kgLSAyICogMl1cbiAgICB4bCA9IFdbaSAtIDIgKiAyICsgMV1cbiAgICB2YXIgZ2FtbWExID0gR2FtbWExKHhoLCB4bClcbiAgICB2YXIgZ2FtbWExbCA9IEdhbW1hMWwoeGwsIHhoKVxuXG4gICAgLy8gV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdXG4gICAgdmFyIFdpN2ggPSBXW2kgLSA3ICogMl1cbiAgICB2YXIgV2k3bCA9IFdbaSAtIDcgKiAyICsgMV1cblxuICAgIHZhciBXaTE2aCA9IFdbaSAtIDE2ICogMl1cbiAgICB2YXIgV2kxNmwgPSBXW2kgLSAxNiAqIDIgKyAxXVxuXG4gICAgdmFyIFdpbCA9IChnYW1tYTBsICsgV2k3bCkgfCAwXG4gICAgdmFyIFdpaCA9IChnYW1tYTAgKyBXaTdoICsgZ2V0Q2FycnkoV2lsLCBnYW1tYTBsKSkgfCAwXG4gICAgV2lsID0gKFdpbCArIGdhbW1hMWwpIHwgMFxuICAgIFdpaCA9IChXaWggKyBnYW1tYTEgKyBnZXRDYXJyeShXaWwsIGdhbW1hMWwpKSB8IDBcbiAgICBXaWwgPSAoV2lsICsgV2kxNmwpIHwgMFxuICAgIFdpaCA9IChXaWggKyBXaTE2aCArIGdldENhcnJ5KFdpbCwgV2kxNmwpKSB8IDBcblxuICAgIFdbaV0gPSBXaWhcbiAgICBXW2kgKyAxXSA9IFdpbFxuICB9XG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjA7IGogKz0gMikge1xuICAgIFdpaCA9IFdbal1cbiAgICBXaWwgPSBXW2ogKyAxXVxuXG4gICAgdmFyIG1hamggPSBtYWooYWgsIGJoLCBjaClcbiAgICB2YXIgbWFqbCA9IG1haihhbCwgYmwsIGNsKVxuXG4gICAgdmFyIHNpZ21hMGggPSBzaWdtYTAoYWgsIGFsKVxuICAgIHZhciBzaWdtYTBsID0gc2lnbWEwKGFsLCBhaClcbiAgICB2YXIgc2lnbWExaCA9IHNpZ21hMShlaCwgZWwpXG4gICAgdmFyIHNpZ21hMWwgPSBzaWdtYTEoZWwsIGVoKVxuXG4gICAgLy8gdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2pdICsgV1tqXVxuICAgIHZhciBLaWggPSBLW2pdXG4gICAgdmFyIEtpbCA9IEtbaiArIDFdXG5cbiAgICB2YXIgY2hoID0gQ2goZWgsIGZoLCBnaClcbiAgICB2YXIgY2hsID0gQ2goZWwsIGZsLCBnbClcblxuICAgIHZhciB0MWwgPSAoaGwgKyBzaWdtYTFsKSB8IDBcbiAgICB2YXIgdDFoID0gKGhoICsgc2lnbWExaCArIGdldENhcnJ5KHQxbCwgaGwpKSB8IDBcbiAgICB0MWwgPSAodDFsICsgY2hsKSB8IDBcbiAgICB0MWggPSAodDFoICsgY2hoICsgZ2V0Q2FycnkodDFsLCBjaGwpKSB8IDBcbiAgICB0MWwgPSAodDFsICsgS2lsKSB8IDBcbiAgICB0MWggPSAodDFoICsgS2loICsgZ2V0Q2FycnkodDFsLCBLaWwpKSB8IDBcbiAgICB0MWwgPSAodDFsICsgV2lsKSB8IDBcbiAgICB0MWggPSAodDFoICsgV2loICsgZ2V0Q2FycnkodDFsLCBXaWwpKSB8IDBcblxuICAgIC8vIHQyID0gc2lnbWEwICsgbWFqXG4gICAgdmFyIHQybCA9IChzaWdtYTBsICsgbWFqbCkgfCAwXG4gICAgdmFyIHQyaCA9IChzaWdtYTBoICsgbWFqaCArIGdldENhcnJ5KHQybCwgc2lnbWEwbCkpIHwgMFxuXG4gICAgaGggPSBnaFxuICAgIGhsID0gZ2xcbiAgICBnaCA9IGZoXG4gICAgZ2wgPSBmbFxuICAgIGZoID0gZWhcbiAgICBmbCA9IGVsXG4gICAgZWwgPSAoZGwgKyB0MWwpIHwgMFxuICAgIGVoID0gKGRoICsgdDFoICsgZ2V0Q2FycnkoZWwsIGRsKSkgfCAwXG4gICAgZGggPSBjaFxuICAgIGRsID0gY2xcbiAgICBjaCA9IGJoXG4gICAgY2wgPSBibFxuICAgIGJoID0gYWhcbiAgICBibCA9IGFsXG4gICAgYWwgPSAodDFsICsgdDJsKSB8IDBcbiAgICBhaCA9ICh0MWggKyB0MmggKyBnZXRDYXJyeShhbCwgdDFsKSkgfCAwXG4gIH1cblxuICB0aGlzLl9hbCA9ICh0aGlzLl9hbCArIGFsKSB8IDBcbiAgdGhpcy5fYmwgPSAodGhpcy5fYmwgKyBibCkgfCAwXG4gIHRoaXMuX2NsID0gKHRoaXMuX2NsICsgY2wpIHwgMFxuICB0aGlzLl9kbCA9ICh0aGlzLl9kbCArIGRsKSB8IDBcbiAgdGhpcy5fZWwgPSAodGhpcy5fZWwgKyBlbCkgfCAwXG4gIHRoaXMuX2ZsID0gKHRoaXMuX2ZsICsgZmwpIHwgMFxuICB0aGlzLl9nbCA9ICh0aGlzLl9nbCArIGdsKSB8IDBcbiAgdGhpcy5faGwgPSAodGhpcy5faGwgKyBobCkgfCAwXG5cbiAgdGhpcy5fYWggPSAodGhpcy5fYWggKyBhaCArIGdldENhcnJ5KHRoaXMuX2FsLCBhbCkpIHwgMFxuICB0aGlzLl9iaCA9ICh0aGlzLl9iaCArIGJoICsgZ2V0Q2FycnkodGhpcy5fYmwsIGJsKSkgfCAwXG4gIHRoaXMuX2NoID0gKHRoaXMuX2NoICsgY2ggKyBnZXRDYXJyeSh0aGlzLl9jbCwgY2wpKSB8IDBcbiAgdGhpcy5fZGggPSAodGhpcy5fZGggKyBkaCArIGdldENhcnJ5KHRoaXMuX2RsLCBkbCkpIHwgMFxuICB0aGlzLl9laCA9ICh0aGlzLl9laCArIGVoICsgZ2V0Q2FycnkodGhpcy5fZWwsIGVsKSkgfCAwXG4gIHRoaXMuX2ZoID0gKHRoaXMuX2ZoICsgZmggKyBnZXRDYXJyeSh0aGlzLl9mbCwgZmwpKSB8IDBcbiAgdGhpcy5fZ2ggPSAodGhpcy5fZ2ggKyBnaCArIGdldENhcnJ5KHRoaXMuX2dsLCBnbCkpIHwgMFxuICB0aGlzLl9oaCA9ICh0aGlzLl9oaCArIGhoICsgZ2V0Q2FycnkodGhpcy5faGwsIGhsKSkgfCAwXG59XG5cblNoYTUxMi5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcig2NClcblxuICBmdW5jdGlvbiB3cml0ZUludDY0QkUgKGgsIGwsIG9mZnNldCkge1xuICAgIEgud3JpdGVJbnQzMkJFKGgsIG9mZnNldClcbiAgICBILndyaXRlSW50MzJCRShsLCBvZmZzZXQgKyA0KVxuICB9XG5cbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2FoLCB0aGlzLl9hbCwgMClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2JoLCB0aGlzLl9ibCwgOClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2NoLCB0aGlzLl9jbCwgMTYpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9kaCwgdGhpcy5fZGwsIDI0KVxuICB3cml0ZUludDY0QkUodGhpcy5fZWgsIHRoaXMuX2VsLCAzMilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2ZoLCB0aGlzLl9mbCwgNDApXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9naCwgdGhpcy5fZ2wsIDQ4KVxuICB3cml0ZUludDY0QkUodGhpcy5faGgsIHRoaXMuX2hsLCA1NilcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTUxMlxuIiwiLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbnZhciBhbGdJbmZvID0ge1xuXHQnZHNhJzoge1xuXHRcdHBhcnRzOiBbJ3AnLCAncScsICdnJywgJ3knXSxcblx0XHRzaXplUGFydDogJ3AnXG5cdH0sXG5cdCdyc2EnOiB7XG5cdFx0cGFydHM6IFsnZScsICduJ10sXG5cdFx0c2l6ZVBhcnQ6ICduJ1xuXHR9LFxuXHQnZWNkc2EnOiB7XG5cdFx0cGFydHM6IFsnY3VydmUnLCAnUSddLFxuXHRcdHNpemVQYXJ0OiAnUSdcblx0fSxcblx0J2VkMjU1MTknOiB7XG5cdFx0cGFydHM6IFsnUiddLFxuXHRcdG5vcm1hbGl6ZTogZmFsc2UsXG5cdFx0c2l6ZVBhcnQ6ICdSJ1xuXHR9XG59O1xuYWxnSW5mb1snY3VydmUyNTUxOSddID0gYWxnSW5mb1snZWQyNTUxOSddO1xuXG52YXIgYWxnUHJpdkluZm8gPSB7XG5cdCdkc2EnOiB7XG5cdFx0cGFydHM6IFsncCcsICdxJywgJ2cnLCAneScsICd4J11cblx0fSxcblx0J3JzYSc6IHtcblx0XHRwYXJ0czogWyduJywgJ2UnLCAnZCcsICdpcW1wJywgJ3AnLCAncSddXG5cdH0sXG5cdCdlY2RzYSc6IHtcblx0XHRwYXJ0czogWydjdXJ2ZScsICdRJywgJ2QnXVxuXHR9LFxuXHQnZWQyNTUxOSc6IHtcblx0XHRwYXJ0czogWydSJywgJ3InXSxcblx0XHRub3JtYWxpemU6IGZhbHNlXG5cdH1cbn07XG5hbGdQcml2SW5mb1snY3VydmUyNTUxOSddID0gYWxnUHJpdkluZm9bJ2VkMjU1MTknXTtcblxudmFyIGhhc2hBbGdzID0ge1xuXHQnbWQ1JzogdHJ1ZSxcblx0J3NoYTEnOiB0cnVlLFxuXHQnc2hhMjU2JzogdHJ1ZSxcblx0J3NoYTM4NCc6IHRydWUsXG5cdCdzaGE1MTInOiB0cnVlXG59O1xuXG4vKlxuICogVGFrZW4gZnJvbVxuICogaHR0cDovL2NzcmMubmlzdC5nb3YvZ3JvdXBzL1NUL3Rvb2xraXQvZG9jdW1lbnRzL2Rzcy9OSVNUUmVDdXIucGRmXG4gKi9cbnZhciBjdXJ2ZXMgPSB7XG5cdCduaXN0cDI1Nic6IHtcblx0XHRzaXplOiAyNTYsXG5cdFx0cGtjczhvaWQ6ICcxLjIuODQwLjEwMDQ1LjMuMS43Jyxcblx0XHRwOiBuZXcgQnVmZmVyKCgnMDAnICtcblx0XHQgICAgJ2ZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwJyArXG5cdFx0ICAgICcwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicpLlxuXHRcdCAgICByZXBsYWNlKC8gL2csICcnKSwgJ2hleCcpLFxuXHRcdGE6IG5ldyBCdWZmZXIoKCcwMCcgK1xuXHRcdCAgICAnRkZGRkZGRkYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAnICtcblx0XHQgICAgJzAwMDAwMDAwIEZGRkZGRkZGIEZGRkZGRkZGIEZGRkZGRkZDJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0YjogbmV3IEJ1ZmZlcigoXG5cdFx0ICAgICc1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYycgK1xuXHRcdCAgICAnNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGInKS5cblx0XHQgICAgcmVwbGFjZSgvIC9nLCAnJyksICdoZXgnKSxcblx0XHRzOiBuZXcgQnVmZmVyKCgnMDAnICtcblx0XHQgICAgJ2M0OWQzNjA4IDg2ZTcwNDkzIDZhNjY3OGUxIDEzOWQyNmI3JyArXG5cdFx0ICAgICc4MTlmN2U5MCcpLlxuXHRcdCAgICByZXBsYWNlKC8gL2csICcnKSwgJ2hleCcpLFxuXHRcdG46IG5ldyBCdWZmZXIoKCcwMCcgK1xuXHRcdCAgICAnZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYnICtcblx0XHQgICAgJ2JjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0RzogbmV3IEJ1ZmZlcigoJzA0JyArXG5cdFx0ICAgICc2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMicgK1xuXHRcdCAgICAnNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTYnICtcblx0XHQgICAgJzRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2JyArXG5cdFx0ICAgICcyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNScpLlxuXHRcdCAgICByZXBsYWNlKC8gL2csICcnKSwgJ2hleCcpXG5cdH0sXG5cdCduaXN0cDM4NCc6IHtcblx0XHRzaXplOiAzODQsXG5cdFx0cGtjczhvaWQ6ICcxLjMuMTMyLjAuMzQnLFxuXHRcdHA6IG5ldyBCdWZmZXIoKCcwMCcgK1xuXHRcdCAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYnICtcblx0XHQgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlJyArXG5cdFx0ICAgICdmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZicpLlxuXHRcdCAgICByZXBsYWNlKC8gL2csICcnKSwgJ2hleCcpLFxuXHRcdGE6IG5ldyBCdWZmZXIoKCcwMCcgK1xuXHRcdCAgICAnRkZGRkZGRkYgRkZGRkZGRkYgRkZGRkZGRkYgRkZGRkZGRkYnICtcblx0XHQgICAgJ0ZGRkZGRkZGIEZGRkZGRkZGIEZGRkZGRkZGIEZGRkZGRkZFJyArXG5cdFx0ICAgICdGRkZGRkZGRiAwMDAwMDAwMCAwMDAwMDAwMCBGRkZGRkZGQycpLlxuXHRcdCAgICByZXBsYWNlKC8gL2csICcnKSwgJ2hleCcpLFxuXHRcdGI6IG5ldyBCdWZmZXIoKFxuXHRcdCAgICAnYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTknICtcblx0XHQgICAgJzE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhJyArXG5cdFx0ICAgICdjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZicpLlxuXHRcdCAgICByZXBsYWNlKC8gL2csICcnKSwgJ2hleCcpLFxuXHRcdHM6IG5ldyBCdWZmZXIoKCcwMCcgK1xuXHRcdCAgICAnYTMzNTkyNmEgYTMxOWEyN2EgMWQwMDg5NmEgNjc3M2E0ODInICtcblx0XHQgICAgJzdhY2RhYzczJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0bjogbmV3IEJ1ZmZlcigoJzAwJyArXG5cdFx0ICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicgK1xuXHRcdCAgICAnZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYnICtcblx0XHQgICAgJzU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0RzogbmV3IEJ1ZmZlcigoJzA0JyArXG5cdFx0ICAgICdhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCcgK1xuXHRcdCAgICAnNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzgnICtcblx0XHQgICAgJzU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3JyArXG5cdFx0ICAgICczNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOScgK1xuXHRcdCAgICAnZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAnICtcblx0XHQgICAgJzBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4Jylcblx0fSxcblx0J25pc3RwNTIxJzoge1xuXHRcdHNpemU6IDUyMSxcblx0XHRwa2NzOG9pZDogJzEuMy4xMzIuMC4zNScsXG5cdFx0cDogbmV3IEJ1ZmZlcigoXG5cdFx0ICAgICcwMWZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicgK1xuXHRcdCAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYnICtcblx0XHQgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmJyArXG5cdFx0ICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicgK1xuXHRcdCAgICAnZmZmZicpLnJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0YTogbmV3IEJ1ZmZlcigoJzAxRkYnICtcblx0XHQgICAgJ0ZGRkZGRkZGIEZGRkZGRkZGIEZGRkZGRkZGIEZGRkZGRkZGJyArXG5cdFx0ICAgICdGRkZGRkZGRiBGRkZGRkZGRiBGRkZGRkZGRiBGRkZGRkZGRicgK1xuXHRcdCAgICAnRkZGRkZGRkYgRkZGRkZGRkYgRkZGRkZGRkYgRkZGRkZGRkYnICtcblx0XHQgICAgJ0ZGRkZGRkZGIEZGRkZGRkZGIEZGRkZGRkZGIEZGRkZGRkZDJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0YjogbmV3IEJ1ZmZlcigoJzUxJyArXG5cdFx0ICAgICc5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZScgK1xuXHRcdCAgICAnYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEnICtcblx0XHQgICAgJzU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3JyArXG5cdFx0ICAgICczNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCcpLlxuXHRcdCAgICByZXBsYWNlKC8gL2csICcnKSwgJ2hleCcpLFxuXHRcdHM6IG5ldyBCdWZmZXIoKCcwMCcgK1xuXHRcdCAgICAnZDA5ZTg4MDAgMjkxY2I4NTMgOTZjYzY3MTcgMzkzMjg0YWEnICtcblx0XHQgICAgJ2EwZGE2NGJhJykucmVwbGFjZSgvIC9nLCAnJyksICdoZXgnKSxcblx0XHRuOiBuZXcgQnVmZmVyKCgnMDFmZicgK1xuXHRcdCAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYnICtcblx0XHQgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhJyArXG5cdFx0ICAgICc1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCcgK1xuXHRcdCAgICAnM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDknKS5cblx0XHQgICAgcmVwbGFjZSgvIC9nLCAnJyksICdoZXgnKSxcblx0XHRHOiBuZXcgQnVmZmVyKCgnMDQnICtcblx0XHQgICAgJzAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDInICtcblx0XHQgICAgICAgICAnOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEnICtcblx0XHQgICAgICAgICAnYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUnICtcblx0XHQgICAgICAgICAnMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYnICtcblx0XHQgICAgJzAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDknICtcblx0XHQgICAgICAgICAnOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMnICtcblx0XHQgICAgICAgICAnOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEnICtcblx0XHQgICAgICAgICAnMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAnKS5cblx0XHQgICAgcmVwbGFjZSgvIC9nLCAnJyksICdoZXgnKVxuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0aW5mbzogYWxnSW5mbyxcblx0cHJpdkluZm86IGFsZ1ByaXZJbmZvLFxuXHRoYXNoQWxnczogaGFzaEFsZ3MsXG5cdGN1cnZlczogY3VydmVzXG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTYgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0gQ2VydGlmaWNhdGU7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIGFsZ3MgPSByZXF1aXJlKCcuL2FsZ3MnKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBGaW5nZXJwcmludCA9IHJlcXVpcmUoJy4vZmluZ2VycHJpbnQnKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuL3NpZ25hdHVyZScpO1xudmFyIGVycnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgS2V5ID0gcmVxdWlyZSgnLi9rZXknKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi9wcml2YXRlLWtleScpO1xudmFyIElkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG52YXIgZm9ybWF0cyA9IHt9O1xuZm9ybWF0c1snb3BlbnNzaCddID0gcmVxdWlyZSgnLi9mb3JtYXRzL29wZW5zc2gtY2VydCcpO1xuZm9ybWF0c1sneDUwOSddID0gcmVxdWlyZSgnLi9mb3JtYXRzL3g1MDknKTtcbmZvcm1hdHNbJ3BlbSddID0gcmVxdWlyZSgnLi9mb3JtYXRzL3g1MDktcGVtJyk7XG5cbnZhciBDZXJ0aWZpY2F0ZVBhcnNlRXJyb3IgPSBlcnJzLkNlcnRpZmljYXRlUGFyc2VFcnJvcjtcbnZhciBJbnZhbGlkQWxnb3JpdGhtRXJyb3IgPSBlcnJzLkludmFsaWRBbGdvcml0aG1FcnJvcjtcblxuZnVuY3Rpb24gQ2VydGlmaWNhdGUob3B0cykge1xuXHRhc3NlcnQub2JqZWN0KG9wdHMsICdvcHRpb25zJyk7XG5cdGFzc2VydC5hcnJheU9mT2JqZWN0KG9wdHMuc3ViamVjdHMsICdvcHRpb25zLnN1YmplY3RzJyk7XG5cdHV0aWxzLmFzc2VydENvbXBhdGlibGUob3B0cy5zdWJqZWN0c1swXSwgSWRlbnRpdHksIFsxLCAwXSxcblx0ICAgICdvcHRpb25zLnN1YmplY3RzJyk7XG5cdHV0aWxzLmFzc2VydENvbXBhdGlibGUob3B0cy5zdWJqZWN0S2V5LCBLZXksIFsxLCAwXSxcblx0ICAgICdvcHRpb25zLnN1YmplY3RLZXknKTtcblx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShvcHRzLmlzc3VlciwgSWRlbnRpdHksIFsxLCAwXSwgJ29wdGlvbnMuaXNzdWVyJyk7XG5cdGlmIChvcHRzLmlzc3VlcktleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShvcHRzLmlzc3VlcktleSwgS2V5LCBbMSwgMF0sXG5cdFx0ICAgICdvcHRpb25zLmlzc3VlcktleScpO1xuXHR9XG5cdGFzc2VydC5vYmplY3Qob3B0cy5zaWduYXR1cmVzLCAnb3B0aW9ucy5zaWduYXR1cmVzJyk7XG5cdGFzc2VydC5idWZmZXIob3B0cy5zZXJpYWwsICdvcHRpb25zLnNlcmlhbCcpO1xuXHRhc3NlcnQuZGF0ZShvcHRzLnZhbGlkRnJvbSwgJ29wdGlvbnMudmFsaWRGcm9tJyk7XG5cdGFzc2VydC5kYXRlKG9wdHMudmFsaWRVbnRpbCwgJ29wdG9ucy52YWxpZFVudGlsJyk7XG5cblx0YXNzZXJ0Lm9wdGlvbmFsQXJyYXlPZlN0cmluZyhvcHRzLnB1cnBvc2VzLCAnb3B0aW9ucy5wdXJwb3NlcycpO1xuXG5cdHRoaXMuX2hhc2hDYWNoZSA9IHt9O1xuXG5cdHRoaXMuc3ViamVjdHMgPSBvcHRzLnN1YmplY3RzO1xuXHR0aGlzLmlzc3VlciA9IG9wdHMuaXNzdWVyO1xuXHR0aGlzLnN1YmplY3RLZXkgPSBvcHRzLnN1YmplY3RLZXk7XG5cdHRoaXMuaXNzdWVyS2V5ID0gb3B0cy5pc3N1ZXJLZXk7XG5cdHRoaXMuc2lnbmF0dXJlcyA9IG9wdHMuc2lnbmF0dXJlcztcblx0dGhpcy5zZXJpYWwgPSBvcHRzLnNlcmlhbDtcblx0dGhpcy52YWxpZEZyb20gPSBvcHRzLnZhbGlkRnJvbTtcblx0dGhpcy52YWxpZFVudGlsID0gb3B0cy52YWxpZFVudGlsO1xuXHR0aGlzLnB1cnBvc2VzID0gb3B0cy5wdXJwb3Nlcztcbn1cblxuQ2VydGlmaWNhdGUuZm9ybWF0cyA9IGZvcm1hdHM7XG5cbkNlcnRpZmljYXRlLnByb3RvdHlwZS50b0J1ZmZlciA9IGZ1bmN0aW9uIChmb3JtYXQsIG9wdGlvbnMpIHtcblx0aWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKVxuXHRcdGZvcm1hdCA9ICd4NTA5Jztcblx0YXNzZXJ0LnN0cmluZyhmb3JtYXQsICdmb3JtYXQnKTtcblx0YXNzZXJ0Lm9iamVjdChmb3JtYXRzW2Zvcm1hdF0sICdmb3JtYXRzW2Zvcm1hdF0nKTtcblx0YXNzZXJ0Lm9wdGlvbmFsT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJyk7XG5cblx0cmV0dXJuIChmb3JtYXRzW2Zvcm1hdF0ud3JpdGUodGhpcywgb3B0aW9ucykpO1xufTtcblxuQ2VydGlmaWNhdGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGZvcm1hdCwgb3B0aW9ucykge1xuXHRpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpXG5cdFx0Zm9ybWF0ID0gJ3BlbSc7XG5cdHJldHVybiAodGhpcy50b0J1ZmZlcihmb3JtYXQsIG9wdGlvbnMpLnRvU3RyaW5nKCkpO1xufTtcblxuQ2VydGlmaWNhdGUucHJvdG90eXBlLmZpbmdlcnByaW50ID0gZnVuY3Rpb24gKGFsZ28pIHtcblx0aWYgKGFsZ28gPT09IHVuZGVmaW5lZClcblx0XHRhbGdvID0gJ3NoYTI1Nic7XG5cdGFzc2VydC5zdHJpbmcoYWxnbywgJ2FsZ29yaXRobScpO1xuXHR2YXIgb3B0cyA9IHtcblx0XHR0eXBlOiAnY2VydGlmaWNhdGUnLFxuXHRcdGhhc2g6IHRoaXMuaGFzaChhbGdvKSxcblx0XHRhbGdvcml0aG06IGFsZ29cblx0fTtcblx0cmV0dXJuIChuZXcgRmluZ2VycHJpbnQob3B0cykpO1xufTtcblxuQ2VydGlmaWNhdGUucHJvdG90eXBlLmhhc2ggPSBmdW5jdGlvbiAoYWxnbykge1xuXHRhc3NlcnQuc3RyaW5nKGFsZ28sICdhbGdvcml0aG0nKTtcblx0YWxnbyA9IGFsZ28udG9Mb3dlckNhc2UoKTtcblx0aWYgKGFsZ3MuaGFzaEFsZ3NbYWxnb10gPT09IHVuZGVmaW5lZClcblx0XHR0aHJvdyAobmV3IEludmFsaWRBbGdvcml0aG1FcnJvcihhbGdvKSk7XG5cblx0aWYgKHRoaXMuX2hhc2hDYWNoZVthbGdvXSlcblx0XHRyZXR1cm4gKHRoaXMuX2hhc2hDYWNoZVthbGdvXSk7XG5cblx0dmFyIGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChhbGdvKS5cblx0ICAgIHVwZGF0ZSh0aGlzLnRvQnVmZmVyKCd4NTA5JykpLmRpZ2VzdCgpO1xuXHR0aGlzLl9oYXNoQ2FjaGVbYWxnb10gPSBoYXNoO1xuXHRyZXR1cm4gKGhhc2gpO1xufTtcblxuQ2VydGlmaWNhdGUucHJvdG90eXBlLmlzRXhwaXJlZCA9IGZ1bmN0aW9uICh3aGVuKSB7XG5cdGlmICh3aGVuID09PSB1bmRlZmluZWQpXG5cdFx0d2hlbiA9IG5ldyBEYXRlKCk7XG5cdHJldHVybiAoISgod2hlbi5nZXRUaW1lKCkgPj0gdGhpcy52YWxpZEZyb20uZ2V0VGltZSgpKSAmJlxuXHRcdCh3aGVuLmdldFRpbWUoKSA8IHRoaXMudmFsaWRVbnRpbC5nZXRUaW1lKCkpKSk7XG59O1xuXG5DZXJ0aWZpY2F0ZS5wcm90b3R5cGUuaXNTaWduZWRCeSA9IGZ1bmN0aW9uIChpc3N1ZXJDZXJ0KSB7XG5cdHV0aWxzLmFzc2VydENvbXBhdGlibGUoaXNzdWVyQ2VydCwgQ2VydGlmaWNhdGUsIFsxLCAwXSwgJ2lzc3VlcicpO1xuXG5cdGlmICghdGhpcy5pc3N1ZXIuZXF1YWxzKGlzc3VlckNlcnQuc3ViamVjdHNbMF0pKVxuXHRcdHJldHVybiAoZmFsc2UpO1xuXHRpZiAodGhpcy5pc3N1ZXIucHVycG9zZXMgJiYgdGhpcy5pc3N1ZXIucHVycG9zZXMubGVuZ3RoID4gMCAmJlxuXHQgICAgdGhpcy5pc3N1ZXIucHVycG9zZXMuaW5kZXhPZignY2EnKSA9PT0gLTEpIHtcblx0XHRyZXR1cm4gKGZhbHNlKTtcblx0fVxuXG5cdHJldHVybiAodGhpcy5pc1NpZ25lZEJ5S2V5KGlzc3VlckNlcnQuc3ViamVjdEtleSkpO1xufTtcblxuQ2VydGlmaWNhdGUucHJvdG90eXBlLmlzU2lnbmVkQnlLZXkgPSBmdW5jdGlvbiAoaXNzdWVyS2V5KSB7XG5cdHV0aWxzLmFzc2VydENvbXBhdGlibGUoaXNzdWVyS2V5LCBLZXksIFsxLCAyXSwgJ2lzc3VlcktleScpO1xuXG5cdGlmICh0aGlzLmlzc3VlcktleSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuICh0aGlzLmlzc3VlcktleS5cblx0XHQgICAgZmluZ2VycHJpbnQoJ3NoYTUxMicpLm1hdGNoZXMoaXNzdWVyS2V5KSk7XG5cdH1cblxuXHR2YXIgZm10ID0gT2JqZWN0LmtleXModGhpcy5zaWduYXR1cmVzKVswXTtcblx0dmFyIHZhbGlkID0gZm9ybWF0c1tmbXRdLnZlcmlmeSh0aGlzLCBpc3N1ZXJLZXkpO1xuXHRpZiAodmFsaWQpXG5cdFx0dGhpcy5pc3N1ZXJLZXkgPSBpc3N1ZXJLZXk7XG5cdHJldHVybiAodmFsaWQpO1xufTtcblxuQ2VydGlmaWNhdGUucHJvdG90eXBlLnNpZ25XaXRoID0gZnVuY3Rpb24gKGtleSkge1xuXHR1dGlscy5hc3NlcnRDb21wYXRpYmxlKGtleSwgUHJpdmF0ZUtleSwgWzEsIDJdLCAna2V5Jyk7XG5cdHZhciBmbXRzID0gT2JqZWN0LmtleXMoZm9ybWF0cyk7XG5cdHZhciBkaWRPbmUgPSBmYWxzZTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBmbXRzLmxlbmd0aDsgKytpKSB7XG5cdFx0aWYgKGZtdHNbaV0gIT09ICdwZW0nKSB7XG5cdFx0XHR2YXIgcmV0ID0gZm9ybWF0c1tmbXRzW2ldXS5zaWduKHRoaXMsIGtleSk7XG5cdFx0XHRpZiAocmV0ID09PSB0cnVlKVxuXHRcdFx0XHRkaWRPbmUgPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRpZiAoIWRpZE9uZSkge1xuXHRcdHRocm93IChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBzaWduIHRoZSBjZXJ0aWZpY2F0ZSBmb3IgYW55ICcgK1xuXHRcdCAgICAnYXZhaWxhYmxlIGNlcnRpZmljYXRlIGZvcm1hdHMnKSk7XG5cdH1cbn07XG5cbkNlcnRpZmljYXRlLmNyZWF0ZVNlbGZTaWduZWQgPSBmdW5jdGlvbiAoc3ViamVjdE9yU3ViamVjdHMsIGtleSwgb3B0aW9ucykge1xuXHR2YXIgc3ViamVjdHM7XG5cdGlmIChBcnJheS5pc0FycmF5KHN1YmplY3RPclN1YmplY3RzKSlcblx0XHRzdWJqZWN0cyA9IHN1YmplY3RPclN1YmplY3RzO1xuXHRlbHNlXG5cdFx0c3ViamVjdHMgPSBbc3ViamVjdE9yU3ViamVjdHNdO1xuXG5cdGFzc2VydC5hcnJheU9mT2JqZWN0KHN1YmplY3RzKTtcblx0c3ViamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoc3ViamVjdCkge1xuXHRcdHV0aWxzLmFzc2VydENvbXBhdGlibGUoc3ViamVjdCwgSWRlbnRpdHksIFsxLCAwXSwgJ3N1YmplY3QnKTtcblx0fSk7XG5cblx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShrZXksIFByaXZhdGVLZXksIFsxLCAyXSwgJ3ByaXZhdGUga2V5Jyk7XG5cblx0YXNzZXJ0Lm9wdGlvbmFsT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJyk7XG5cdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0b3B0aW9ucyA9IHt9O1xuXHRhc3NlcnQub3B0aW9uYWxPYmplY3Qob3B0aW9ucy52YWxpZEZyb20sICdvcHRpb25zLnZhbGlkRnJvbScpO1xuXHRhc3NlcnQub3B0aW9uYWxPYmplY3Qob3B0aW9ucy52YWxpZFVudGlsLCAnb3B0aW9ucy52YWxpZFVudGlsJyk7XG5cdHZhciB2YWxpZEZyb20gPSBvcHRpb25zLnZhbGlkRnJvbTtcblx0dmFyIHZhbGlkVW50aWwgPSBvcHRpb25zLnZhbGlkVW50aWw7XG5cdGlmICh2YWxpZEZyb20gPT09IHVuZGVmaW5lZClcblx0XHR2YWxpZEZyb20gPSBuZXcgRGF0ZSgpO1xuXHRpZiAodmFsaWRVbnRpbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0YXNzZXJ0Lm9wdGlvbmFsTnVtYmVyKG9wdGlvbnMubGlmZXRpbWUsICdvcHRpb25zLmxpZmV0aW1lJyk7XG5cdFx0dmFyIGxpZmV0aW1lID0gb3B0aW9ucy5saWZldGltZTtcblx0XHRpZiAobGlmZXRpbWUgPT09IHVuZGVmaW5lZClcblx0XHRcdGxpZmV0aW1lID0gMTAqMzY1KjI0KjM2MDA7XG5cdFx0dmFsaWRVbnRpbCA9IG5ldyBEYXRlKCk7XG5cdFx0dmFsaWRVbnRpbC5zZXRUaW1lKHZhbGlkVW50aWwuZ2V0VGltZSgpICsgbGlmZXRpbWUqMTAwMCk7XG5cdH1cblx0YXNzZXJ0Lm9wdGlvbmFsQnVmZmVyKG9wdGlvbnMuc2VyaWFsLCAnb3B0aW9ucy5zZXJpYWwnKTtcblx0dmFyIHNlcmlhbCA9IG9wdGlvbnMuc2VyaWFsO1xuXHRpZiAoc2VyaWFsID09PSB1bmRlZmluZWQpXG5cdFx0c2VyaWFsID0gbmV3IEJ1ZmZlcignMDAwMDAwMDAwMDAwMDAwMScsICdoZXgnKTtcblxuXHR2YXIgcHVycG9zZXMgPSBvcHRpb25zLnB1cnBvc2VzO1xuXHRpZiAocHVycG9zZXMgPT09IHVuZGVmaW5lZClcblx0XHRwdXJwb3NlcyA9IFtdO1xuXG5cdGlmIChwdXJwb3Nlcy5pbmRleE9mKCdzaWduYXR1cmUnKSA9PT0gLTEpXG5cdFx0cHVycG9zZXMucHVzaCgnc2lnbmF0dXJlJyk7XG5cblx0LyogU2VsZi1zaWduZWQgY2VydHMgYXJlIGFsd2F5cyBDQXMuICovXG5cdGlmIChwdXJwb3Nlcy5pbmRleE9mKCdjYScpID09PSAtMSlcblx0XHRwdXJwb3Nlcy5wdXNoKCdjYScpO1xuXHRpZiAocHVycG9zZXMuaW5kZXhPZignY3JsJykgPT09IC0xKVxuXHRcdHB1cnBvc2VzLnB1c2goJ2NybCcpO1xuXG5cdC8qXG5cdCAqIElmIHdlIHdlcmVuJ3QgZXhwbGljaXRseSBnaXZlbiBhbnkgb3RoZXIgcHVycG9zZXMsIGRvIHRoZSBzZW5zaWJsZVxuXHQgKiB0aGluZyBhbmQgYWRkIHNvbWUgYmFzaWMgb25lcyBkZXBlbmRpbmcgb24gdGhlIHN1YmplY3QgdHlwZS5cblx0ICovXG5cdGlmIChwdXJwb3Nlcy5sZW5ndGggPD0gMykge1xuXHRcdHZhciBob3N0U3ViamVjdHMgPSBzdWJqZWN0cy5maWx0ZXIoZnVuY3Rpb24gKHN1YmplY3QpIHtcblx0XHRcdHJldHVybiAoc3ViamVjdC50eXBlID09PSAnaG9zdCcpO1xuXHRcdH0pO1xuXHRcdHZhciB1c2VyU3ViamVjdHMgPSBzdWJqZWN0cy5maWx0ZXIoZnVuY3Rpb24gKHN1YmplY3QpIHtcblx0XHRcdHJldHVybiAoc3ViamVjdC50eXBlID09PSAndXNlcicpO1xuXHRcdH0pO1xuXHRcdGlmIChob3N0U3ViamVjdHMubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKHB1cnBvc2VzLmluZGV4T2YoJ3NlcnZlckF1dGgnKSA9PT0gLTEpXG5cdFx0XHRcdHB1cnBvc2VzLnB1c2goJ3NlcnZlckF1dGgnKTtcblx0XHR9XG5cdFx0aWYgKHVzZXJTdWJqZWN0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAocHVycG9zZXMuaW5kZXhPZignY2xpZW50QXV0aCcpID09PSAtMSlcblx0XHRcdFx0cHVycG9zZXMucHVzaCgnY2xpZW50QXV0aCcpO1xuXHRcdH1cblx0XHRpZiAodXNlclN1YmplY3RzLmxlbmd0aCA+IDAgfHwgaG9zdFN1YmplY3RzLmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChwdXJwb3Nlcy5pbmRleE9mKCdrZXlBZ3JlZW1lbnQnKSA9PT0gLTEpXG5cdFx0XHRcdHB1cnBvc2VzLnB1c2goJ2tleUFncmVlbWVudCcpO1xuXHRcdFx0aWYgKGtleS50eXBlID09PSAncnNhJyAmJlxuXHRcdFx0ICAgIHB1cnBvc2VzLmluZGV4T2YoJ2VuY3J5cHRpb24nKSA9PT0gLTEpXG5cdFx0XHRcdHB1cnBvc2VzLnB1c2goJ2VuY3J5cHRpb24nKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgY2VydCA9IG5ldyBDZXJ0aWZpY2F0ZSh7XG5cdFx0c3ViamVjdHM6IHN1YmplY3RzLFxuXHRcdGlzc3Vlcjogc3ViamVjdHNbMF0sXG5cdFx0c3ViamVjdEtleToga2V5LnRvUHVibGljKCksXG5cdFx0aXNzdWVyS2V5OiBrZXkudG9QdWJsaWMoKSxcblx0XHRzaWduYXR1cmVzOiB7fSxcblx0XHRzZXJpYWw6IHNlcmlhbCxcblx0XHR2YWxpZEZyb206IHZhbGlkRnJvbSxcblx0XHR2YWxpZFVudGlsOiB2YWxpZFVudGlsLFxuXHRcdHB1cnBvc2VzOiBwdXJwb3Nlc1xuXHR9KTtcblx0Y2VydC5zaWduV2l0aChrZXkpO1xuXG5cdHJldHVybiAoY2VydCk7XG59O1xuXG5DZXJ0aWZpY2F0ZS5jcmVhdGUgPVxuICAgIGZ1bmN0aW9uIChzdWJqZWN0T3JTdWJqZWN0cywga2V5LCBpc3N1ZXIsIGlzc3VlcktleSwgb3B0aW9ucykge1xuXHR2YXIgc3ViamVjdHM7XG5cdGlmIChBcnJheS5pc0FycmF5KHN1YmplY3RPclN1YmplY3RzKSlcblx0XHRzdWJqZWN0cyA9IHN1YmplY3RPclN1YmplY3RzO1xuXHRlbHNlXG5cdFx0c3ViamVjdHMgPSBbc3ViamVjdE9yU3ViamVjdHNdO1xuXG5cdGFzc2VydC5hcnJheU9mT2JqZWN0KHN1YmplY3RzKTtcblx0c3ViamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoc3ViamVjdCkge1xuXHRcdHV0aWxzLmFzc2VydENvbXBhdGlibGUoc3ViamVjdCwgSWRlbnRpdHksIFsxLCAwXSwgJ3N1YmplY3QnKTtcblx0fSk7XG5cblx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShrZXksIEtleSwgWzEsIDBdLCAna2V5Jyk7XG5cdGlmIChQcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXkpKVxuXHRcdGtleSA9IGtleS50b1B1YmxpYygpO1xuXHR1dGlscy5hc3NlcnRDb21wYXRpYmxlKGlzc3VlciwgSWRlbnRpdHksIFsxLCAwXSwgJ2lzc3VlcicpO1xuXHR1dGlscy5hc3NlcnRDb21wYXRpYmxlKGlzc3VlcktleSwgUHJpdmF0ZUtleSwgWzEsIDJdLCAnaXNzdWVyIGtleScpO1xuXG5cdGFzc2VydC5vcHRpb25hbE9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpO1xuXHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdG9wdGlvbnMgPSB7fTtcblx0YXNzZXJ0Lm9wdGlvbmFsT2JqZWN0KG9wdGlvbnMudmFsaWRGcm9tLCAnb3B0aW9ucy52YWxpZEZyb20nKTtcblx0YXNzZXJ0Lm9wdGlvbmFsT2JqZWN0KG9wdGlvbnMudmFsaWRVbnRpbCwgJ29wdGlvbnMudmFsaWRVbnRpbCcpO1xuXHR2YXIgdmFsaWRGcm9tID0gb3B0aW9ucy52YWxpZEZyb207XG5cdHZhciB2YWxpZFVudGlsID0gb3B0aW9ucy52YWxpZFVudGlsO1xuXHRpZiAodmFsaWRGcm9tID09PSB1bmRlZmluZWQpXG5cdFx0dmFsaWRGcm9tID0gbmV3IERhdGUoKTtcblx0aWYgKHZhbGlkVW50aWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdGFzc2VydC5vcHRpb25hbE51bWJlcihvcHRpb25zLmxpZmV0aW1lLCAnb3B0aW9ucy5saWZldGltZScpO1xuXHRcdHZhciBsaWZldGltZSA9IG9wdGlvbnMubGlmZXRpbWU7XG5cdFx0aWYgKGxpZmV0aW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRsaWZldGltZSA9IDEwKjM2NSoyNCozNjAwO1xuXHRcdHZhbGlkVW50aWwgPSBuZXcgRGF0ZSgpO1xuXHRcdHZhbGlkVW50aWwuc2V0VGltZSh2YWxpZFVudGlsLmdldFRpbWUoKSArIGxpZmV0aW1lKjEwMDApO1xuXHR9XG5cdGFzc2VydC5vcHRpb25hbEJ1ZmZlcihvcHRpb25zLnNlcmlhbCwgJ29wdGlvbnMuc2VyaWFsJyk7XG5cdHZhciBzZXJpYWwgPSBvcHRpb25zLnNlcmlhbDtcblx0aWYgKHNlcmlhbCA9PT0gdW5kZWZpbmVkKVxuXHRcdHNlcmlhbCA9IG5ldyBCdWZmZXIoJzAwMDAwMDAwMDAwMDAwMDEnLCAnaGV4Jyk7XG5cblx0dmFyIHB1cnBvc2VzID0gb3B0aW9ucy5wdXJwb3Nlcztcblx0aWYgKHB1cnBvc2VzID09PSB1bmRlZmluZWQpXG5cdFx0cHVycG9zZXMgPSBbXTtcblxuXHRpZiAocHVycG9zZXMuaW5kZXhPZignc2lnbmF0dXJlJykgPT09IC0xKVxuXHRcdHB1cnBvc2VzLnB1c2goJ3NpZ25hdHVyZScpO1xuXG5cdGlmIChvcHRpb25zLmNhID09PSB0cnVlKSB7XG5cdFx0aWYgKHB1cnBvc2VzLmluZGV4T2YoJ2NhJykgPT09IC0xKVxuXHRcdFx0cHVycG9zZXMucHVzaCgnY2EnKTtcblx0XHRpZiAocHVycG9zZXMuaW5kZXhPZignY3JsJykgPT09IC0xKVxuXHRcdFx0cHVycG9zZXMucHVzaCgnY3JsJyk7XG5cdH1cblxuXHR2YXIgaG9zdFN1YmplY3RzID0gc3ViamVjdHMuZmlsdGVyKGZ1bmN0aW9uIChzdWJqZWN0KSB7XG5cdFx0cmV0dXJuIChzdWJqZWN0LnR5cGUgPT09ICdob3N0Jyk7XG5cdH0pO1xuXHR2YXIgdXNlclN1YmplY3RzID0gc3ViamVjdHMuZmlsdGVyKGZ1bmN0aW9uIChzdWJqZWN0KSB7XG5cdFx0cmV0dXJuIChzdWJqZWN0LnR5cGUgPT09ICd1c2VyJyk7XG5cdH0pO1xuXHRpZiAoaG9zdFN1YmplY3RzLmxlbmd0aCA+IDApIHtcblx0XHRpZiAocHVycG9zZXMuaW5kZXhPZignc2VydmVyQXV0aCcpID09PSAtMSlcblx0XHRcdHB1cnBvc2VzLnB1c2goJ3NlcnZlckF1dGgnKTtcblx0fVxuXHRpZiAodXNlclN1YmplY3RzLmxlbmd0aCA+IDApIHtcblx0XHRpZiAocHVycG9zZXMuaW5kZXhPZignY2xpZW50QXV0aCcpID09PSAtMSlcblx0XHRcdHB1cnBvc2VzLnB1c2goJ2NsaWVudEF1dGgnKTtcblx0fVxuXHRpZiAodXNlclN1YmplY3RzLmxlbmd0aCA+IDAgfHwgaG9zdFN1YmplY3RzLmxlbmd0aCA+IDApIHtcblx0XHRpZiAocHVycG9zZXMuaW5kZXhPZigna2V5QWdyZWVtZW50JykgPT09IC0xKVxuXHRcdFx0cHVycG9zZXMucHVzaCgna2V5QWdyZWVtZW50Jyk7XG5cdFx0aWYgKGtleS50eXBlID09PSAncnNhJyAmJlxuXHRcdCAgICBwdXJwb3Nlcy5pbmRleE9mKCdlbmNyeXB0aW9uJykgPT09IC0xKVxuXHRcdFx0cHVycG9zZXMucHVzaCgnZW5jcnlwdGlvbicpO1xuXHR9XG5cblx0dmFyIGNlcnQgPSBuZXcgQ2VydGlmaWNhdGUoe1xuXHRcdHN1YmplY3RzOiBzdWJqZWN0cyxcblx0XHRpc3N1ZXI6IGlzc3Vlcixcblx0XHRzdWJqZWN0S2V5OiBrZXksXG5cdFx0aXNzdWVyS2V5OiBpc3N1ZXJLZXkudG9QdWJsaWMoKSxcblx0XHRzaWduYXR1cmVzOiB7fSxcblx0XHRzZXJpYWw6IHNlcmlhbCxcblx0XHR2YWxpZEZyb206IHZhbGlkRnJvbSxcblx0XHR2YWxpZFVudGlsOiB2YWxpZFVudGlsLFxuXHRcdHB1cnBvc2VzOiBwdXJwb3Nlc1xuXHR9KTtcblx0Y2VydC5zaWduV2l0aChpc3N1ZXJLZXkpO1xuXG5cdHJldHVybiAoY2VydCk7XG59O1xuXG5DZXJ0aWZpY2F0ZS5wYXJzZSA9IGZ1bmN0aW9uIChkYXRhLCBmb3JtYXQsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiAoZGF0YSkgIT09ICdzdHJpbmcnKVxuXHRcdGFzc2VydC5idWZmZXIoZGF0YSwgJ2RhdGEnKTtcblx0aWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKVxuXHRcdGZvcm1hdCA9ICdhdXRvJztcblx0YXNzZXJ0LnN0cmluZyhmb3JtYXQsICdmb3JtYXQnKTtcblx0aWYgKHR5cGVvZiAob3B0aW9ucykgPT09ICdzdHJpbmcnKVxuXHRcdG9wdGlvbnMgPSB7IGZpbGVuYW1lOiBvcHRpb25zIH07XG5cdGFzc2VydC5vcHRpb25hbE9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpO1xuXHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdG9wdGlvbnMgPSB7fTtcblx0YXNzZXJ0Lm9wdGlvbmFsU3RyaW5nKG9wdGlvbnMuZmlsZW5hbWUsICdvcHRpb25zLmZpbGVuYW1lJyk7XG5cdGlmIChvcHRpb25zLmZpbGVuYW1lID09PSB1bmRlZmluZWQpXG5cdFx0b3B0aW9ucy5maWxlbmFtZSA9ICcodW5uYW1lZCknO1xuXG5cdGFzc2VydC5vYmplY3QoZm9ybWF0c1tmb3JtYXRdLCAnZm9ybWF0c1tmb3JtYXRdJyk7XG5cblx0dHJ5IHtcblx0XHR2YXIgayA9IGZvcm1hdHNbZm9ybWF0XS5yZWFkKGRhdGEsIG9wdGlvbnMpO1xuXHRcdHJldHVybiAoayk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHR0aHJvdyAobmV3IENlcnRpZmljYXRlUGFyc2VFcnJvcihvcHRpb25zLmZpbGVuYW1lLCBmb3JtYXQsIGUpKTtcblx0fVxufTtcblxuQ2VydGlmaWNhdGUuaXNDZXJ0aWZpY2F0ZSA9IGZ1bmN0aW9uIChvYmosIHZlcikge1xuXHRyZXR1cm4gKHV0aWxzLmlzQ29tcGF0aWJsZShvYmosIENlcnRpZmljYXRlLCB2ZXIpKTtcbn07XG5cbi8qXG4gKiBBUEkgdmVyc2lvbnMgZm9yIENlcnRpZmljYXRlOlxuICogWzEsMF0gLS0gaW5pdGlhbCB2ZXJcbiAqL1xuQ2VydGlmaWNhdGUucHJvdG90eXBlLl9zc2hwa0FwaVZlcnNpb24gPSBbMSwgMF07XG5cbkNlcnRpZmljYXRlLl9vbGRWZXJzaW9uRGV0ZWN0ID0gZnVuY3Rpb24gKG9iaikge1xuXHRyZXR1cm4gKFsxLCAwXSk7XG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTcgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHREaWZmaWVIZWxsbWFuOiBEaWZmaWVIZWxsbWFuLFxuXHRnZW5lcmF0ZUVDRFNBOiBnZW5lcmF0ZUVDRFNBLFxuXHRnZW5lcmF0ZUVEMjU1MTk6IGdlbmVyYXRlRUQyNTUxOVxufTtcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgYWxncyA9IHJlcXVpcmUoJy4vYWxncycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGVkO1xudmFyIG5hY2w7XG5cbnZhciBLZXkgPSByZXF1aXJlKCcuL2tleScpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuL3ByaXZhdGUta2V5Jyk7XG5cbnZhciBDUllQVE9fSEFWRV9FQ0RIID0gKGNyeXB0by5jcmVhdGVFQ0RIICE9PSB1bmRlZmluZWQpO1xuXG52YXIgZWNkaCwgZWMsIGpzYm47XG5cbmZ1bmN0aW9uIERpZmZpZUhlbGxtYW4oa2V5KSB7XG5cdHV0aWxzLmFzc2VydENvbXBhdGlibGUoa2V5LCBLZXksIFsxLCA0XSwgJ2tleScpO1xuXHR0aGlzLl9pc1ByaXYgPSBQcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXksIFsxLCAzXSk7XG5cdHRoaXMuX2FsZ28gPSBrZXkudHlwZTtcblx0dGhpcy5fY3VydmUgPSBrZXkuY3VydmU7XG5cdHRoaXMuX2tleSA9IGtleTtcblx0aWYgKGtleS50eXBlID09PSAnZHNhJykge1xuXHRcdGlmICghQ1JZUFRPX0hBVkVfRUNESCkge1xuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcignRHVlIHRvIGJ1Z3MgaW4gdGhlIG5vZGUgMC4xMCAnICtcblx0XHRcdCAgICAnY3J5cHRvIEFQSSwgbm9kZSAwLjEyLnggb3IgbGF0ZXIgaXMgcmVxdWlyZWQgJyArXG5cdFx0XHQgICAgJ3RvIHVzZSBESCcpKTtcblx0XHR9XG5cdFx0dGhpcy5fZGggPSBjcnlwdG8uY3JlYXRlRGlmZmllSGVsbG1hbihcblx0XHQgICAga2V5LnBhcnQucC5kYXRhLCB1bmRlZmluZWQsXG5cdFx0ICAgIGtleS5wYXJ0LmcuZGF0YSwgdW5kZWZpbmVkKTtcblx0XHR0aGlzLl9wID0ga2V5LnBhcnQucDtcblx0XHR0aGlzLl9nID0ga2V5LnBhcnQuZztcblx0XHRpZiAodGhpcy5faXNQcml2KVxuXHRcdFx0dGhpcy5fZGguc2V0UHJpdmF0ZUtleShrZXkucGFydC54LmRhdGEpO1xuXHRcdHRoaXMuX2RoLnNldFB1YmxpY0tleShrZXkucGFydC55LmRhdGEpO1xuXG5cdH0gZWxzZSBpZiAoa2V5LnR5cGUgPT09ICdlY2RzYScpIHtcblx0XHRpZiAoIUNSWVBUT19IQVZFX0VDREgpIHtcblx0XHRcdGlmIChlY2RoID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGVjZGggPSByZXF1aXJlKCdlY2MtanNibicpO1xuXHRcdFx0aWYgKGVjID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGVjID0gcmVxdWlyZSgnZWNjLWpzYm4vbGliL2VjJyk7XG5cdFx0XHRpZiAoanNibiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRqc2JuID0gcmVxdWlyZSgnanNibicpLkJpZ0ludGVnZXI7XG5cblx0XHRcdHRoaXMuX2VjUGFyYW1zID0gbmV3IFg5RUNQYXJhbWV0ZXJzKHRoaXMuX2N1cnZlKTtcblxuXHRcdFx0aWYgKHRoaXMuX2lzUHJpdikge1xuXHRcdFx0XHR0aGlzLl9wcml2ID0gbmV3IEVDUHJpdmF0ZShcblx0XHRcdFx0ICAgIHRoaXMuX2VjUGFyYW1zLCBrZXkucGFydC5kLmRhdGEpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBjdXJ2ZSA9IHtcblx0XHRcdCduaXN0cDI1Nic6ICdwcmltZTI1NnYxJyxcblx0XHRcdCduaXN0cDM4NCc6ICdzZWNwMzg0cjEnLFxuXHRcdFx0J25pc3RwNTIxJzogJ3NlY3A1MjFyMSdcblx0XHR9W2tleS5jdXJ2ZV07XG5cdFx0dGhpcy5fZGggPSBjcnlwdG8uY3JlYXRlRUNESChjdXJ2ZSk7XG5cdFx0aWYgKHR5cGVvZiAodGhpcy5fZGgpICE9PSAnb2JqZWN0JyB8fFxuXHRcdCAgICB0eXBlb2YgKHRoaXMuX2RoLnNldFByaXZhdGVLZXkpICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRDUllQVE9fSEFWRV9FQ0RIID0gZmFsc2U7XG5cdFx0XHREaWZmaWVIZWxsbWFuLmNhbGwodGhpcywga2V5KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMuX2lzUHJpdilcblx0XHRcdHRoaXMuX2RoLnNldFByaXZhdGVLZXkoa2V5LnBhcnQuZC5kYXRhKTtcblx0XHR0aGlzLl9kaC5zZXRQdWJsaWNLZXkoa2V5LnBhcnQuUS5kYXRhKTtcblxuXHR9IGVsc2UgaWYgKGtleS50eXBlID09PSAnY3VydmUyNTUxOScpIHtcblx0XHRpZiAoZWQgPT09IHVuZGVmaW5lZClcblx0XHRcdGVkID0gcmVxdWlyZSgnam9kaWQyNTUxOScpO1xuXG5cdFx0aWYgKHRoaXMuX2lzUHJpdikge1xuXHRcdFx0dGhpcy5fcHJpdiA9IGtleS5wYXJ0LnIuZGF0YTtcblx0XHRcdGlmICh0aGlzLl9wcml2WzBdID09PSAweDAwKVxuXHRcdFx0XHR0aGlzLl9wcml2ID0gdGhpcy5fcHJpdi5zbGljZSgxKTtcblx0XHRcdHRoaXMuX3ByaXYgPSB0aGlzLl9wcml2LnNsaWNlKDAsIDMyKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdESCBub3Qgc3VwcG9ydGVkIGZvciAnICsga2V5LnR5cGUgKyAnIGtleXMnKSk7XG5cdH1cbn1cblxuRGlmZmllSGVsbG1hbi5wcm90b3R5cGUuZ2V0UHVibGljS2V5ID0gZnVuY3Rpb24gKCkge1xuXHRpZiAodGhpcy5faXNQcml2KVxuXHRcdHJldHVybiAodGhpcy5fa2V5LnRvUHVibGljKCkpO1xuXHRyZXR1cm4gKHRoaXMuX2tleSk7XG59O1xuXG5EaWZmaWVIZWxsbWFuLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5ID0gZnVuY3Rpb24gKCkge1xuXHRpZiAodGhpcy5faXNQcml2KVxuXHRcdHJldHVybiAodGhpcy5fa2V5KTtcblx0ZWxzZVxuXHRcdHJldHVybiAodW5kZWZpbmVkKTtcbn07XG5EaWZmaWVIZWxsbWFuLnByb3RvdHlwZS5nZXRLZXkgPSBEaWZmaWVIZWxsbWFuLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5O1xuXG5EaWZmaWVIZWxsbWFuLnByb3RvdHlwZS5fa2V5Q2hlY2sgPSBmdW5jdGlvbiAocGssIGlzUHViKSB7XG5cdGFzc2VydC5vYmplY3QocGssICdrZXknKTtcblx0aWYgKCFpc1B1Yilcblx0XHR1dGlscy5hc3NlcnRDb21wYXRpYmxlKHBrLCBQcml2YXRlS2V5LCBbMSwgM10sICdrZXknKTtcblx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShwaywgS2V5LCBbMSwgNF0sICdrZXknKTtcblxuXHRpZiAocGsudHlwZSAhPT0gdGhpcy5fYWxnbykge1xuXHRcdHRocm93IChuZXcgRXJyb3IoJ0EgJyArIHBrLnR5cGUgKyAnIGtleSBjYW5ub3QgYmUgdXNlZCBpbiAnICtcblx0XHQgICAgdGhpcy5fYWxnbyArICcgRGlmZmllLUhlbGxtYW4nKSk7XG5cdH1cblxuXHRpZiAocGsuY3VydmUgIT09IHRoaXMuX2N1cnZlKSB7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignQSBrZXkgZnJvbSB0aGUgJyArIHBrLmN1cnZlICsgJyBjdXJ2ZSAnICtcblx0XHQgICAgJ2Nhbm5vdCBiZSB1c2VkIHdpdGggYSAnICsgdGhpcy5fY3VydmUgK1xuXHRcdCAgICAnIERpZmZpZS1IZWxsbWFuJykpO1xuXHR9XG5cblx0aWYgKHBrLnR5cGUgPT09ICdkc2EnKSB7XG5cdFx0YXNzZXJ0LmRlZXBFcXVhbChway5wYXJ0LnAsIHRoaXMuX3AsXG5cdFx0ICAgICdEU0Ega2V5IHByaW1lIGRvZXMgbm90IG1hdGNoJyk7XG5cdFx0YXNzZXJ0LmRlZXBFcXVhbChway5wYXJ0LmcsIHRoaXMuX2csXG5cdFx0ICAgICdEU0Ega2V5IGdlbmVyYXRvciBkb2VzIG5vdCBtYXRjaCcpO1xuXHR9XG59O1xuXG5EaWZmaWVIZWxsbWFuLnByb3RvdHlwZS5zZXRLZXkgPSBmdW5jdGlvbiAocGspIHtcblx0dGhpcy5fa2V5Q2hlY2socGspO1xuXG5cdGlmIChway50eXBlID09PSAnZHNhJykge1xuXHRcdHRoaXMuX2RoLnNldFByaXZhdGVLZXkocGsucGFydC54LmRhdGEpO1xuXHRcdHRoaXMuX2RoLnNldFB1YmxpY0tleShway5wYXJ0LnkuZGF0YSk7XG5cblx0fSBlbHNlIGlmIChway50eXBlID09PSAnZWNkc2EnKSB7XG5cdFx0aWYgKENSWVBUT19IQVZFX0VDREgpIHtcblx0XHRcdHRoaXMuX2RoLnNldFByaXZhdGVLZXkocGsucGFydC5kLmRhdGEpO1xuXHRcdFx0dGhpcy5fZGguc2V0UHVibGljS2V5KHBrLnBhcnQuUS5kYXRhKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fcHJpdiA9IG5ldyBFQ1ByaXZhdGUoXG5cdFx0XHQgICAgdGhpcy5fZWNQYXJhbXMsIHBrLnBhcnQuZC5kYXRhKTtcblx0XHR9XG5cblx0fSBlbHNlIGlmIChway50eXBlID09PSAnY3VydmUyNTUxOScpIHtcblx0XHR0aGlzLl9wcml2ID0gcGsucGFydC5yLmRhdGE7XG5cdFx0aWYgKHRoaXMuX3ByaXZbMF0gPT09IDB4MDApXG5cdFx0XHR0aGlzLl9wcml2ID0gdGhpcy5fcHJpdi5zbGljZSgxKTtcblx0XHR0aGlzLl9wcml2ID0gdGhpcy5fcHJpdi5zbGljZSgwLCAzMik7XG5cdH1cblx0dGhpcy5fa2V5ID0gcGs7XG5cdHRoaXMuX2lzUHJpdiA9IHRydWU7XG59O1xuRGlmZmllSGVsbG1hbi5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleSA9IERpZmZpZUhlbGxtYW4ucHJvdG90eXBlLnNldEtleTtcblxuRGlmZmllSGVsbG1hbi5wcm90b3R5cGUuY29tcHV0ZVNlY3JldCA9IGZ1bmN0aW9uIChvdGhlcnBrKSB7XG5cdHRoaXMuX2tleUNoZWNrKG90aGVycGssIHRydWUpO1xuXHRpZiAoIXRoaXMuX2lzUHJpdilcblx0XHR0aHJvdyAobmV3IEVycm9yKCdESCBleGNoYW5nZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCAnICtcblx0XHQgICAgJ2EgcHJpdmF0ZSBrZXkgeWV0JykpO1xuXG5cdHZhciBwdWI7XG5cdGlmICh0aGlzLl9hbGdvID09PSAnZHNhJykge1xuXHRcdHJldHVybiAodGhpcy5fZGguY29tcHV0ZVNlY3JldChcblx0XHQgICAgb3RoZXJway5wYXJ0LnkuZGF0YSkpO1xuXG5cdH0gZWxzZSBpZiAodGhpcy5fYWxnbyA9PT0gJ2VjZHNhJykge1xuXHRcdGlmIChDUllQVE9fSEFWRV9FQ0RIKSB7XG5cdFx0XHRyZXR1cm4gKHRoaXMuX2RoLmNvbXB1dGVTZWNyZXQoXG5cdFx0XHQgICAgb3RoZXJway5wYXJ0LlEuZGF0YSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwdWIgPSBuZXcgRUNQdWJsaWMoXG5cdFx0XHQgICAgdGhpcy5fZWNQYXJhbXMsIG90aGVycGsucGFydC5RLmRhdGEpO1xuXHRcdFx0cmV0dXJuICh0aGlzLl9wcml2LmRlcml2ZVNoYXJlZFNlY3JldChwdWIpKTtcblx0XHR9XG5cblx0fSBlbHNlIGlmICh0aGlzLl9hbGdvID09PSAnY3VydmUyNTUxOScpIHtcblx0XHRwdWIgPSBvdGhlcnBrLnBhcnQuUi5kYXRhO1xuXHRcdGlmIChwdWJbMF0gPT09IDB4MDApXG5cdFx0XHRwdWIgPSBwdWIuc2xpY2UoMSk7XG5cblx0XHR2YXIgc2VjcmV0ID0gZWQuZGguY29tcHV0ZUtleShcblx0XHQgICAgdGhpcy5fcHJpdi50b1N0cmluZygnYmluYXJ5JyksXG5cdFx0ICAgIHB1Yi50b1N0cmluZygnYmluYXJ5JykpO1xuXG5cdFx0cmV0dXJuIChuZXcgQnVmZmVyKHNlY3JldCwgJ2JpbmFyeScpKTtcblx0fVxuXG5cdHRocm93IChuZXcgRXJyb3IoJ0ludmFsaWQgYWxnb3JpdGhtOiAnICsgdGhpcy5fYWxnbykpO1xufTtcblxuRGlmZmllSGVsbG1hbi5wcm90b3R5cGUuZ2VuZXJhdGVLZXkgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBwYXJ0cyA9IFtdO1xuXHR2YXIgcHJpdiwgcHViO1xuXHRpZiAodGhpcy5fYWxnbyA9PT0gJ2RzYScpIHtcblx0XHR0aGlzLl9kaC5nZW5lcmF0ZUtleXMoKTtcblxuXHRcdHBhcnRzLnB1c2goe25hbWU6ICdwJywgZGF0YTogdGhpcy5fcC5kYXRhfSk7XG5cdFx0cGFydHMucHVzaCh7bmFtZTogJ3EnLCBkYXRhOiB0aGlzLl9rZXkucGFydC5xLmRhdGF9KTtcblx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAnZycsIGRhdGE6IHRoaXMuX2cuZGF0YX0pO1xuXHRcdHBhcnRzLnB1c2goe25hbWU6ICd5JywgZGF0YTogdGhpcy5fZGguZ2V0UHVibGljS2V5KCl9KTtcblx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAneCcsIGRhdGE6IHRoaXMuX2RoLmdldFByaXZhdGVLZXkoKX0pO1xuXHRcdHRoaXMuX2tleSA9IG5ldyBQcml2YXRlS2V5KHtcblx0XHRcdHR5cGU6ICdkc2EnLFxuXHRcdFx0cGFydHM6IHBhcnRzXG5cdFx0fSk7XG5cdFx0dGhpcy5faXNQcml2ID0gdHJ1ZTtcblx0XHRyZXR1cm4gKHRoaXMuX2tleSk7XG5cblx0fSBlbHNlIGlmICh0aGlzLl9hbGdvID09PSAnZWNkc2EnKSB7XG5cdFx0aWYgKENSWVBUT19IQVZFX0VDREgpIHtcblx0XHRcdHRoaXMuX2RoLmdlbmVyYXRlS2V5cygpO1xuXG5cdFx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAnY3VydmUnLFxuXHRcdFx0ICAgIGRhdGE6IG5ldyBCdWZmZXIodGhpcy5fY3VydmUpfSk7XG5cdFx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAnUScsIGRhdGE6IHRoaXMuX2RoLmdldFB1YmxpY0tleSgpfSk7XG5cdFx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAnZCcsIGRhdGE6IHRoaXMuX2RoLmdldFByaXZhdGVLZXkoKX0pO1xuXHRcdFx0dGhpcy5fa2V5ID0gbmV3IFByaXZhdGVLZXkoe1xuXHRcdFx0XHR0eXBlOiAnZWNkc2EnLFxuXHRcdFx0XHRjdXJ2ZTogdGhpcy5fY3VydmUsXG5cdFx0XHRcdHBhcnRzOiBwYXJ0c1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLl9pc1ByaXYgPSB0cnVlO1xuXHRcdFx0cmV0dXJuICh0aGlzLl9rZXkpO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBuID0gdGhpcy5fZWNQYXJhbXMuZ2V0TigpO1xuXHRcdFx0dmFyIHIgPSBuZXcganNibihjcnlwdG8ucmFuZG9tQnl0ZXMobi5iaXRMZW5ndGgoKSkpO1xuXHRcdFx0dmFyIG4xID0gbi5zdWJ0cmFjdChqc2JuLk9ORSk7XG5cdFx0XHRwcml2ID0gci5tb2QobjEpLmFkZChqc2JuLk9ORSk7XG5cdFx0XHRwdWIgPSB0aGlzLl9lY1BhcmFtcy5nZXRHKCkubXVsdGlwbHkocHJpdik7XG5cblx0XHRcdHByaXYgPSBuZXcgQnVmZmVyKHByaXYudG9CeXRlQXJyYXkoKSk7XG5cdFx0XHRwdWIgPSBuZXcgQnVmZmVyKHRoaXMuX2VjUGFyYW1zLmdldEN1cnZlKCkuXG5cdFx0XHQgICAgZW5jb2RlUG9pbnRIZXgocHViKSwgJ2hleCcpO1xuXG5cdFx0XHR0aGlzLl9wcml2ID0gbmV3IEVDUHJpdmF0ZSh0aGlzLl9lY1BhcmFtcywgcHJpdik7XG5cblx0XHRcdHBhcnRzLnB1c2goe25hbWU6ICdjdXJ2ZScsXG5cdFx0XHQgICAgZGF0YTogbmV3IEJ1ZmZlcih0aGlzLl9jdXJ2ZSl9KTtcblx0XHRcdHBhcnRzLnB1c2goe25hbWU6ICdRJywgZGF0YTogcHVifSk7XG5cdFx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAnZCcsIGRhdGE6IHByaXZ9KTtcblxuXHRcdFx0dGhpcy5fa2V5ID0gbmV3IFByaXZhdGVLZXkoe1xuXHRcdFx0XHR0eXBlOiAnZWNkc2EnLFxuXHRcdFx0XHRjdXJ2ZTogdGhpcy5fY3VydmUsXG5cdFx0XHRcdHBhcnRzOiBwYXJ0c1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLl9pc1ByaXYgPSB0cnVlO1xuXHRcdFx0cmV0dXJuICh0aGlzLl9rZXkpO1xuXHRcdH1cblxuXHR9IGVsc2UgaWYgKHRoaXMuX2FsZ28gPT09ICdjdXJ2ZTI1NTE5Jykge1xuXHRcdHByaXYgPSBlZC5kaC5nZW5lcmF0ZUtleSgpO1xuXHRcdHB1YiA9IGVkLmRoLnB1YmxpY0tleShwcml2KTtcblx0XHR0aGlzLl9wcml2ID0gcHJpdiA9IG5ldyBCdWZmZXIocHJpdiwgJ2JpbmFyeScpO1xuXHRcdHB1YiA9IG5ldyBCdWZmZXIocHViLCAnYmluYXJ5Jyk7XG5cblx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAnUicsIGRhdGE6IHB1Yn0pO1xuXHRcdHBhcnRzLnB1c2goe25hbWU6ICdyJywgZGF0YTogQnVmZmVyLmNvbmNhdChbcHJpdiwgcHViXSl9KTtcblx0XHR0aGlzLl9rZXkgPSBuZXcgUHJpdmF0ZUtleSh7XG5cdFx0XHR0eXBlOiAnY3VydmUyNTUxOScsXG5cdFx0XHRwYXJ0czogcGFydHNcblx0XHR9KTtcblx0XHR0aGlzLl9pc1ByaXYgPSB0cnVlO1xuXHRcdHJldHVybiAodGhpcy5fa2V5KTtcblx0fVxuXG5cdHRocm93IChuZXcgRXJyb3IoJ0ludmFsaWQgYWxnb3JpdGhtOiAnICsgdGhpcy5fYWxnbykpO1xufTtcbkRpZmZpZUhlbGxtYW4ucHJvdG90eXBlLmdlbmVyYXRlS2V5cyA9IERpZmZpZUhlbGxtYW4ucHJvdG90eXBlLmdlbmVyYXRlS2V5O1xuXG4vKiBUaGVzZSBhcmUgaGVscGVycyBmb3IgdXNpbmcgZWNjLWpzYm4gKGZvciBub2RlIDAuMTAgY29tcGF0aWJpbGl0eSkuICovXG5cbmZ1bmN0aW9uIFg5RUNQYXJhbWV0ZXJzKG5hbWUpIHtcblx0dmFyIHBhcmFtcyA9IGFsZ3MuY3VydmVzW25hbWVdO1xuXHRhc3NlcnQub2JqZWN0KHBhcmFtcyk7XG5cblx0dmFyIHAgPSBuZXcganNibihwYXJhbXMucCk7XG5cdHZhciBhID0gbmV3IGpzYm4ocGFyYW1zLmEpO1xuXHR2YXIgYiA9IG5ldyBqc2JuKHBhcmFtcy5iKTtcblx0dmFyIG4gPSBuZXcganNibihwYXJhbXMubik7XG5cdHZhciBoID0ganNibi5PTkU7XG5cdHZhciBjdXJ2ZSA9IG5ldyBlYy5FQ0N1cnZlRnAocCwgYSwgYik7XG5cdHZhciBHID0gY3VydmUuZGVjb2RlUG9pbnRIZXgocGFyYW1zLkcudG9TdHJpbmcoJ2hleCcpKTtcblxuXHR0aGlzLmN1cnZlID0gY3VydmU7XG5cdHRoaXMuZyA9IEc7XG5cdHRoaXMubiA9IG47XG5cdHRoaXMuaCA9IGg7XG59XG5YOUVDUGFyYW1ldGVycy5wcm90b3R5cGUuZ2V0Q3VydmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5jdXJ2ZSk7IH07XG5YOUVDUGFyYW1ldGVycy5wcm90b3R5cGUuZ2V0RyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLmcpOyB9O1xuWDlFQ1BhcmFtZXRlcnMucHJvdG90eXBlLmdldE4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5uKTsgfTtcblg5RUNQYXJhbWV0ZXJzLnByb3RvdHlwZS5nZXRIID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuaCk7IH07XG5cbmZ1bmN0aW9uIEVDUHVibGljKHBhcmFtcywgYnVmZmVyKSB7XG5cdHRoaXMuX3BhcmFtcyA9IHBhcmFtcztcblx0aWYgKGJ1ZmZlclswXSA9PT0gMHgwMClcblx0XHRidWZmZXIgPSBidWZmZXIuc2xpY2UoMSk7XG5cdHRoaXMuX3B1YiA9IHBhcmFtcy5nZXRDdXJ2ZSgpLmRlY29kZVBvaW50SGV4KGJ1ZmZlci50b1N0cmluZygnaGV4JykpO1xufVxuXG5mdW5jdGlvbiBFQ1ByaXZhdGUocGFyYW1zLCBidWZmZXIpIHtcblx0dGhpcy5fcGFyYW1zID0gcGFyYW1zO1xuXHR0aGlzLl9wcml2ID0gbmV3IGpzYm4odXRpbHMubXBOb3JtYWxpemUoYnVmZmVyKSk7XG59XG5FQ1ByaXZhdGUucHJvdG90eXBlLmRlcml2ZVNoYXJlZFNlY3JldCA9IGZ1bmN0aW9uIChwdWJLZXkpIHtcblx0YXNzZXJ0Lm9rKHB1YktleSBpbnN0YW5jZW9mIEVDUHVibGljKTtcblx0dmFyIFMgPSBwdWJLZXkuX3B1Yi5tdWx0aXBseSh0aGlzLl9wcml2KTtcblx0cmV0dXJuIChuZXcgQnVmZmVyKFMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpLnRvQnl0ZUFycmF5KCkpKTtcbn07XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRUQyNTUxOSgpIHtcblx0aWYgKG5hY2wgPT09IHVuZGVmaW5lZClcblx0XHRuYWNsID0gcmVxdWlyZSgndHdlZXRuYWNsJyk7XG5cblx0dmFyIHBhaXIgPSBuYWNsLnNpZ24ua2V5UGFpcigpO1xuXHR2YXIgcHJpdiA9IG5ldyBCdWZmZXIocGFpci5zZWNyZXRLZXkpO1xuXHR2YXIgcHViID0gbmV3IEJ1ZmZlcihwYWlyLnB1YmxpY0tleSk7XG5cdGFzc2VydC5zdHJpY3RFcXVhbChwcml2Lmxlbmd0aCwgNjQpO1xuXHRhc3NlcnQuc3RyaWN0RXF1YWwocHViLmxlbmd0aCwgMzIpO1xuXG5cdHZhciBwYXJ0cyA9IFtdO1xuXHRwYXJ0cy5wdXNoKHtuYW1lOiAnUicsIGRhdGE6IHB1Yn0pO1xuXHRwYXJ0cy5wdXNoKHtuYW1lOiAncicsIGRhdGE6IHByaXZ9KTtcblx0dmFyIGtleSA9IG5ldyBQcml2YXRlS2V5KHtcblx0XHR0eXBlOiAnZWQyNTUxOScsXG5cdFx0cGFydHM6IHBhcnRzXG5cdH0pO1xuXHRyZXR1cm4gKGtleSk7XG59XG5cbi8qIEdlbmVyYXRlcyBhIG5ldyBFQ0RTQSBwcml2YXRlIGtleSBvbiBhIGdpdmVuIGN1cnZlLiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVFQ0RTQShjdXJ2ZSkge1xuXHR2YXIgcGFydHMgPSBbXTtcblx0dmFyIGtleTtcblxuXHRpZiAoQ1JZUFRPX0hBVkVfRUNESCkge1xuXHRcdC8qXG5cdFx0ICogTm9kZSBjcnlwdG8gZG9lc24ndCBleHBvc2Uga2V5IGdlbmVyYXRpb24gZGlyZWN0bHksIGJ1dCB0aGVcblx0XHQgKiBFQ0RIIGluc3RhbmNlcyBjYW4gZ2VuZXJhdGUga2V5cy4gSXQgdHVybnMgb3V0IHRoaXMganVzdFxuXHRcdCAqIGNhbGxzIGludG8gdGhlIE9wZW5TU0wgZ2VuZXJpYyBrZXkgZ2VuZXJhdG9yLCBhbmQgd2UgY2FuXG5cdFx0ICogcmVhZCBpdHMgb3V0cHV0IGhhcHBpbHkgd2l0aG91dCBkb2luZyBhbiBhY3R1YWwgREguIFNvIHdlXG5cdFx0ICogdXNlIHRoYXQgaGVyZS5cblx0XHQgKi9cblx0XHR2YXIgb3NDdXJ2ZSA9IHtcblx0XHRcdCduaXN0cDI1Nic6ICdwcmltZTI1NnYxJyxcblx0XHRcdCduaXN0cDM4NCc6ICdzZWNwMzg0cjEnLFxuXHRcdFx0J25pc3RwNTIxJzogJ3NlY3A1MjFyMSdcblx0XHR9W2N1cnZlXTtcblxuXHRcdHZhciBkaCA9IGNyeXB0by5jcmVhdGVFQ0RIKG9zQ3VydmUpO1xuXHRcdGRoLmdlbmVyYXRlS2V5cygpO1xuXG5cdFx0cGFydHMucHVzaCh7bmFtZTogJ2N1cnZlJyxcblx0XHQgICAgZGF0YTogbmV3IEJ1ZmZlcihjdXJ2ZSl9KTtcblx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAnUScsIGRhdGE6IGRoLmdldFB1YmxpY0tleSgpfSk7XG5cdFx0cGFydHMucHVzaCh7bmFtZTogJ2QnLCBkYXRhOiBkaC5nZXRQcml2YXRlS2V5KCl9KTtcblxuXHRcdGtleSA9IG5ldyBQcml2YXRlS2V5KHtcblx0XHRcdHR5cGU6ICdlY2RzYScsXG5cdFx0XHRjdXJ2ZTogY3VydmUsXG5cdFx0XHRwYXJ0czogcGFydHNcblx0XHR9KTtcblx0XHRyZXR1cm4gKGtleSk7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoZWNkaCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZWNkaCA9IHJlcXVpcmUoJ2VjYy1qc2JuJyk7XG5cdFx0aWYgKGVjID09PSB1bmRlZmluZWQpXG5cdFx0XHRlYyA9IHJlcXVpcmUoJ2VjYy1qc2JuL2xpYi9lYycpO1xuXHRcdGlmIChqc2JuID09PSB1bmRlZmluZWQpXG5cdFx0XHRqc2JuID0gcmVxdWlyZSgnanNibicpLkJpZ0ludGVnZXI7XG5cblx0XHR2YXIgZWNQYXJhbXMgPSBuZXcgWDlFQ1BhcmFtZXRlcnMoY3VydmUpO1xuXG5cdFx0LyogVGhpcyBhbGdvcml0aG0gdGFrZW4gZnJvbSBGSVBTIFBVQiAxODYtNCAoc2VjdGlvbiBCLjQuMSkgKi9cblx0XHR2YXIgbiA9IGVjUGFyYW1zLmdldE4oKTtcblx0XHQvKlxuXHRcdCAqIFRoZSBjcnlwdG8ucmFuZG9tQnl0ZXMoKSBmdW5jdGlvbiBjYW4gb25seSBnaXZlIHVzIHdob2xlXG5cdFx0ICogYnl0ZXMsIHNvIHRha2luZyBhIG5vZCBmcm9tIFg5LjYyLCB3ZSByb3VuZCB1cC5cblx0XHQgKi9cblx0XHR2YXIgY0J5dGVMZW4gPSBNYXRoLmNlaWwoKG4uYml0TGVuZ3RoKCkgKyA2NCkgLyA4KTtcblx0XHR2YXIgYyA9IG5ldyBqc2JuKGNyeXB0by5yYW5kb21CeXRlcyhjQnl0ZUxlbikpO1xuXG5cdFx0dmFyIG4xID0gbi5zdWJ0cmFjdChqc2JuLk9ORSk7XG5cdFx0dmFyIHByaXYgPSBjLm1vZChuMSkuYWRkKGpzYm4uT05FKTtcblx0XHR2YXIgcHViID0gZWNQYXJhbXMuZ2V0RygpLm11bHRpcGx5KHByaXYpO1xuXG5cdFx0cHJpdiA9IG5ldyBCdWZmZXIocHJpdi50b0J5dGVBcnJheSgpKTtcblx0XHRwdWIgPSBuZXcgQnVmZmVyKGVjUGFyYW1zLmdldEN1cnZlKCkuXG5cdFx0ICAgIGVuY29kZVBvaW50SGV4KHB1YiksICdoZXgnKTtcblxuXHRcdHBhcnRzLnB1c2goe25hbWU6ICdjdXJ2ZScsIGRhdGE6IG5ldyBCdWZmZXIoY3VydmUpfSk7XG5cdFx0cGFydHMucHVzaCh7bmFtZTogJ1EnLCBkYXRhOiBwdWJ9KTtcblx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAnZCcsIGRhdGE6IHByaXZ9KTtcblxuXHRcdGtleSA9IG5ldyBQcml2YXRlS2V5KHtcblx0XHRcdHR5cGU6ICdlY2RzYScsXG5cdFx0XHRjdXJ2ZTogY3VydmUsXG5cdFx0XHRwYXJ0czogcGFydHNcblx0XHR9KTtcblx0XHRyZXR1cm4gKGtleSk7XG5cdH1cbn1cbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0VmVyaWZpZXI6IFZlcmlmaWVyLFxuXHRTaWduZXI6IFNpZ25lclxufTtcblxudmFyIG5hY2w7XG52YXIgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vc2lnbmF0dXJlJyk7XG5cbmZ1bmN0aW9uIFZlcmlmaWVyKGtleSwgaGFzaEFsZ28pIHtcblx0aWYgKG5hY2wgPT09IHVuZGVmaW5lZClcblx0XHRuYWNsID0gcmVxdWlyZSgndHdlZXRuYWNsJyk7XG5cblx0aWYgKGhhc2hBbGdvLnRvTG93ZXJDYXNlKCkgIT09ICdzaGE1MTInKVxuXHRcdHRocm93IChuZXcgRXJyb3IoJ0VEMjU1MTkgb25seSBzdXBwb3J0cyB0aGUgdXNlIG9mICcgK1xuXHRcdCAgICAnU0hBLTUxMiBoYXNoZXMnKSk7XG5cblx0dGhpcy5rZXkgPSBrZXk7XG5cdHRoaXMuY2h1bmtzID0gW107XG5cblx0c3RyZWFtLldyaXRhYmxlLmNhbGwodGhpcywge30pO1xufVxudXRpbC5pbmhlcml0cyhWZXJpZmllciwgc3RyZWFtLldyaXRhYmxlKTtcblxuVmVyaWZpZXIucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jLCBjYikge1xuXHR0aGlzLmNodW5rcy5wdXNoKGNodW5rKTtcblx0Y2IoKTtcbn07XG5cblZlcmlmaWVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoY2h1bmspIHtcblx0aWYgKHR5cGVvZiAoY2h1bmspID09PSAnc3RyaW5nJylcblx0XHRjaHVuayA9IG5ldyBCdWZmZXIoY2h1bmssICdiaW5hcnknKTtcblx0dGhpcy5jaHVua3MucHVzaChjaHVuayk7XG59O1xuXG5WZXJpZmllci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gKHNpZ25hdHVyZSwgZm10KSB7XG5cdHZhciBzaWc7XG5cdGlmIChTaWduYXR1cmUuaXNTaWduYXR1cmUoc2lnbmF0dXJlLCBbMiwgMF0pKSB7XG5cdFx0aWYgKHNpZ25hdHVyZS50eXBlICE9PSAnZWQyNTUxOScpXG5cdFx0XHRyZXR1cm4gKGZhbHNlKTtcblx0XHRzaWcgPSBzaWduYXR1cmUudG9CdWZmZXIoJ3JhdycpO1xuXG5cdH0gZWxzZSBpZiAodHlwZW9mIChzaWduYXR1cmUpID09PSAnc3RyaW5nJykge1xuXHRcdHNpZyA9IG5ldyBCdWZmZXIoc2lnbmF0dXJlLCAnYmFzZTY0Jyk7XG5cblx0fSBlbHNlIGlmIChTaWduYXR1cmUuaXNTaWduYXR1cmUoc2lnbmF0dXJlLCBbMSwgMF0pKSB7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignc2lnbmF0dXJlIHdhcyBjcmVhdGVkIGJ5IHRvbyBvbGQgJyArXG5cdFx0ICAgICdhIHZlcnNpb24gb2Ygc3NocGsgYW5kIGNhbm5vdCBiZSB2ZXJpZmllZCcpKTtcblx0fVxuXG5cdGFzc2VydC5idWZmZXIoc2lnKTtcblx0cmV0dXJuIChuYWNsLnNpZ24uZGV0YWNoZWQudmVyaWZ5KFxuXHQgICAgbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmNvbmNhdCh0aGlzLmNodW5rcykpLFxuXHQgICAgbmV3IFVpbnQ4QXJyYXkoc2lnKSxcblx0ICAgIG5ldyBVaW50OEFycmF5KHRoaXMua2V5LnBhcnQuUi5kYXRhKSkpO1xufTtcblxuZnVuY3Rpb24gU2lnbmVyKGtleSwgaGFzaEFsZ28pIHtcblx0aWYgKG5hY2wgPT09IHVuZGVmaW5lZClcblx0XHRuYWNsID0gcmVxdWlyZSgndHdlZXRuYWNsJyk7XG5cblx0aWYgKGhhc2hBbGdvLnRvTG93ZXJDYXNlKCkgIT09ICdzaGE1MTInKVxuXHRcdHRocm93IChuZXcgRXJyb3IoJ0VEMjU1MTkgb25seSBzdXBwb3J0cyB0aGUgdXNlIG9mICcgK1xuXHRcdCAgICAnU0hBLTUxMiBoYXNoZXMnKSk7XG5cblx0dGhpcy5rZXkgPSBrZXk7XG5cdHRoaXMuY2h1bmtzID0gW107XG5cblx0c3RyZWFtLldyaXRhYmxlLmNhbGwodGhpcywge30pO1xufVxudXRpbC5pbmhlcml0cyhTaWduZXIsIHN0cmVhbS5Xcml0YWJsZSk7XG5cblNpZ25lci5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmMsIGNiKSB7XG5cdHRoaXMuY2h1bmtzLnB1c2goY2h1bmspO1xuXHRjYigpO1xufTtcblxuU2lnbmVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoY2h1bmspIHtcblx0aWYgKHR5cGVvZiAoY2h1bmspID09PSAnc3RyaW5nJylcblx0XHRjaHVuayA9IG5ldyBCdWZmZXIoY2h1bmssICdiaW5hcnknKTtcblx0dGhpcy5jaHVua3MucHVzaChjaHVuayk7XG59O1xuXG5TaWduZXIucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBzaWcgPSBuYWNsLnNpZ24uZGV0YWNoZWQoXG5cdCAgICBuZXcgVWludDhBcnJheShCdWZmZXIuY29uY2F0KHRoaXMuY2h1bmtzKSksXG5cdCAgICBuZXcgVWludDhBcnJheSh0aGlzLmtleS5wYXJ0LnIuZGF0YSkpO1xuXHR2YXIgc2lnQnVmID0gbmV3IEJ1ZmZlcihzaWcpO1xuXHR2YXIgc2lnT2JqID0gU2lnbmF0dXJlLnBhcnNlKHNpZ0J1ZiwgJ2VkMjU1MTknLCAncmF3Jyk7XG5cdHNpZ09iai5oYXNoQWxnb3JpdGhtID0gJ3NoYTUxMic7XG5cdHJldHVybiAoc2lnT2JqKTtcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxNSBKb3llbnQsIEluYy5cblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuZnVuY3Rpb24gRmluZ2VycHJpbnRGb3JtYXRFcnJvcihmcCwgZm9ybWF0KSB7XG5cdGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcblx0XHRFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBGaW5nZXJwcmludEZvcm1hdEVycm9yKTtcblx0dGhpcy5uYW1lID0gJ0ZpbmdlcnByaW50Rm9ybWF0RXJyb3InO1xuXHR0aGlzLmZpbmdlcnByaW50ID0gZnA7XG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuXHR0aGlzLm1lc3NhZ2UgPSAnRmluZ2VycHJpbnQgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQsIG9yIGlzIGludmFsaWQ6ICc7XG5cdGlmIChmcCAhPT0gdW5kZWZpbmVkKVxuXHRcdHRoaXMubWVzc2FnZSArPSAnIGZpbmdlcnByaW50ID0gJyArIGZwO1xuXHRpZiAoZm9ybWF0ICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5tZXNzYWdlICs9ICcgZm9ybWF0ID0gJyArIGZvcm1hdDtcbn1cbnV0aWwuaW5oZXJpdHMoRmluZ2VycHJpbnRGb3JtYXRFcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiBJbnZhbGlkQWxnb3JpdGhtRXJyb3IoYWxnKSB7XG5cdGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcblx0XHRFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkQWxnb3JpdGhtRXJyb3IpO1xuXHR0aGlzLm5hbWUgPSAnSW52YWxpZEFsZ29yaXRobUVycm9yJztcblx0dGhpcy5hbGdvcml0aG0gPSBhbGc7XG5cdHRoaXMubWVzc2FnZSA9ICdBbGdvcml0aG0gXCInICsgYWxnICsgJ1wiIGlzIG5vdCBzdXBwb3J0ZWQnO1xufVxudXRpbC5pbmhlcml0cyhJbnZhbGlkQWxnb3JpdGhtRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gS2V5UGFyc2VFcnJvcihuYW1lLCBmb3JtYXQsIGlubmVyRXJyKSB7XG5cdGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcblx0XHRFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBLZXlQYXJzZUVycm9yKTtcblx0dGhpcy5uYW1lID0gJ0tleVBhcnNlRXJyb3InO1xuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdDtcblx0dGhpcy5rZXlOYW1lID0gbmFtZTtcblx0dGhpcy5pbm5lckVyciA9IGlubmVyRXJyO1xuXHR0aGlzLm1lc3NhZ2UgPSAnRmFpbGVkIHRvIHBhcnNlICcgKyBuYW1lICsgJyBhcyBhIHZhbGlkICcgKyBmb3JtYXQgK1xuXHQgICAgJyBmb3JtYXQga2V5OiAnICsgaW5uZXJFcnIubWVzc2FnZTtcbn1cbnV0aWwuaW5oZXJpdHMoS2V5UGFyc2VFcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiBTaWduYXR1cmVQYXJzZUVycm9yKHR5cGUsIGZvcm1hdCwgaW5uZXJFcnIpIHtcblx0aWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuXHRcdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNpZ25hdHVyZVBhcnNlRXJyb3IpO1xuXHR0aGlzLm5hbWUgPSAnU2lnbmF0dXJlUGFyc2VFcnJvcic7XG5cdHRoaXMudHlwZSA9IHR5cGU7XG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuXHR0aGlzLmlubmVyRXJyID0gaW5uZXJFcnI7XG5cdHRoaXMubWVzc2FnZSA9ICdGYWlsZWQgdG8gcGFyc2UgdGhlIGdpdmVuIGRhdGEgYXMgYSAnICsgdHlwZSArXG5cdCAgICAnIHNpZ25hdHVyZSBpbiAnICsgZm9ybWF0ICsgJyBmb3JtYXQ6ICcgKyBpbm5lckVyci5tZXNzYWdlO1xufVxudXRpbC5pbmhlcml0cyhTaWduYXR1cmVQYXJzZUVycm9yLCBFcnJvcik7XG5cbmZ1bmN0aW9uIENlcnRpZmljYXRlUGFyc2VFcnJvcihuYW1lLCBmb3JtYXQsIGlubmVyRXJyKSB7XG5cdGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcblx0XHRFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDZXJ0aWZpY2F0ZVBhcnNlRXJyb3IpO1xuXHR0aGlzLm5hbWUgPSAnQ2VydGlmaWNhdGVQYXJzZUVycm9yJztcblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG5cdHRoaXMuY2VydE5hbWUgPSBuYW1lO1xuXHR0aGlzLmlubmVyRXJyID0gaW5uZXJFcnI7XG5cdHRoaXMubWVzc2FnZSA9ICdGYWlsZWQgdG8gcGFyc2UgJyArIG5hbWUgKyAnIGFzIGEgdmFsaWQgJyArIGZvcm1hdCArXG5cdCAgICAnIGZvcm1hdCBjZXJ0aWZpY2F0ZTogJyArIGlubmVyRXJyLm1lc3NhZ2U7XG59XG51dGlsLmluaGVyaXRzKENlcnRpZmljYXRlUGFyc2VFcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiBLZXlFbmNyeXB0ZWRFcnJvcihuYW1lLCBmb3JtYXQpIHtcblx0aWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuXHRcdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEtleUVuY3J5cHRlZEVycm9yKTtcblx0dGhpcy5uYW1lID0gJ0tleUVuY3J5cHRlZEVycm9yJztcblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG5cdHRoaXMua2V5TmFtZSA9IG5hbWU7XG5cdHRoaXMubWVzc2FnZSA9ICdUaGUgJyArIGZvcm1hdCArICcgZm9ybWF0IGtleSAnICsgbmFtZSArICcgaXMgJyArXG5cdCAgICAnZW5jcnlwdGVkIChwYXNzd29yZC1wcm90ZWN0ZWQpLCBhbmQgbm8gcGFzc3BocmFzZSB3YXMgJyArXG5cdCAgICAncHJvdmlkZWQgaW4gYG9wdGlvbnNgJztcbn1cbnV0aWwuaW5oZXJpdHMoS2V5RW5jcnlwdGVkRXJyb3IsIEVycm9yKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdEZpbmdlcnByaW50Rm9ybWF0RXJyb3I6IEZpbmdlcnByaW50Rm9ybWF0RXJyb3IsXG5cdEludmFsaWRBbGdvcml0aG1FcnJvcjogSW52YWxpZEFsZ29yaXRobUVycm9yLFxuXHRLZXlQYXJzZUVycm9yOiBLZXlQYXJzZUVycm9yLFxuXHRTaWduYXR1cmVQYXJzZUVycm9yOiBTaWduYXR1cmVQYXJzZUVycm9yLFxuXHRLZXlFbmNyeXB0ZWRFcnJvcjogS2V5RW5jcnlwdGVkRXJyb3IsXG5cdENlcnRpZmljYXRlUGFyc2VFcnJvcjogQ2VydGlmaWNhdGVQYXJzZUVycm9yXG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0gRmluZ2VycHJpbnQ7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIGFsZ3MgPSByZXF1aXJlKCcuL2FsZ3MnKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBlcnJzID0gcmVxdWlyZSgnLi9lcnJvcnMnKTtcbnZhciBLZXkgPSByZXF1aXJlKCcuL2tleScpO1xudmFyIENlcnRpZmljYXRlID0gcmVxdWlyZSgnLi9jZXJ0aWZpY2F0ZScpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgRmluZ2VycHJpbnRGb3JtYXRFcnJvciA9IGVycnMuRmluZ2VycHJpbnRGb3JtYXRFcnJvcjtcbnZhciBJbnZhbGlkQWxnb3JpdGhtRXJyb3IgPSBlcnJzLkludmFsaWRBbGdvcml0aG1FcnJvcjtcblxuZnVuY3Rpb24gRmluZ2VycHJpbnQob3B0cykge1xuXHRhc3NlcnQub2JqZWN0KG9wdHMsICdvcHRpb25zJyk7XG5cdGFzc2VydC5zdHJpbmcob3B0cy50eXBlLCAnb3B0aW9ucy50eXBlJyk7XG5cdGFzc2VydC5idWZmZXIob3B0cy5oYXNoLCAnb3B0aW9ucy5oYXNoJyk7XG5cdGFzc2VydC5zdHJpbmcob3B0cy5hbGdvcml0aG0sICdvcHRpb25zLmFsZ29yaXRobScpO1xuXG5cdHRoaXMuYWxnb3JpdGhtID0gb3B0cy5hbGdvcml0aG0udG9Mb3dlckNhc2UoKTtcblx0aWYgKGFsZ3MuaGFzaEFsZ3NbdGhpcy5hbGdvcml0aG1dICE9PSB0cnVlKVxuXHRcdHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKHRoaXMuYWxnb3JpdGhtKSk7XG5cblx0dGhpcy5oYXNoID0gb3B0cy5oYXNoO1xuXHR0aGlzLnR5cGUgPSBvcHRzLnR5cGU7XG59XG5cbkZpbmdlcnByaW50LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcblx0aWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKHRoaXMuYWxnb3JpdGhtID09PSAnbWQ1Jylcblx0XHRcdGZvcm1hdCA9ICdoZXgnO1xuXHRcdGVsc2Vcblx0XHRcdGZvcm1hdCA9ICdiYXNlNjQnO1xuXHR9XG5cdGFzc2VydC5zdHJpbmcoZm9ybWF0KTtcblxuXHRzd2l0Y2ggKGZvcm1hdCkge1xuXHRjYXNlICdoZXgnOlxuXHRcdHJldHVybiAoYWRkQ29sb25zKHRoaXMuaGFzaC50b1N0cmluZygnaGV4JykpKTtcblx0Y2FzZSAnYmFzZTY0Jzpcblx0XHRyZXR1cm4gKHNzaEJhc2U2NEZvcm1hdCh0aGlzLmFsZ29yaXRobSxcblx0XHQgICAgdGhpcy5oYXNoLnRvU3RyaW5nKCdiYXNlNjQnKSkpO1xuXHRkZWZhdWx0OlxuXHRcdHRocm93IChuZXcgRmluZ2VycHJpbnRGb3JtYXRFcnJvcih1bmRlZmluZWQsIGZvcm1hdCkpO1xuXHR9XG59O1xuXG5GaW5nZXJwcmludC5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uIChvdGhlcikge1xuXHRhc3NlcnQub2JqZWN0KG90aGVyLCAna2V5IG9yIGNlcnRpZmljYXRlJyk7XG5cdGlmICh0aGlzLnR5cGUgPT09ICdrZXknKSB7XG5cdFx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShvdGhlciwgS2V5LCBbMSwgMF0sICdrZXknKTtcblx0fSBlbHNlIHtcblx0XHR1dGlscy5hc3NlcnRDb21wYXRpYmxlKG90aGVyLCBDZXJ0aWZpY2F0ZSwgWzEsIDBdLFxuXHRcdCAgICAnY2VydGlmaWNhdGUnKTtcblx0fVxuXG5cdHZhciB0aGVpckhhc2ggPSBvdGhlci5oYXNoKHRoaXMuYWxnb3JpdGhtKTtcblx0dmFyIHRoZWlySGFzaDIgPSBjcnlwdG8uY3JlYXRlSGFzaCh0aGlzLmFsZ29yaXRobSkuXG5cdCAgICB1cGRhdGUodGhlaXJIYXNoKS5kaWdlc3QoJ2Jhc2U2NCcpO1xuXG5cdGlmICh0aGlzLmhhc2gyID09PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5oYXNoMiA9IGNyeXB0by5jcmVhdGVIYXNoKHRoaXMuYWxnb3JpdGhtKS5cblx0XHQgICAgdXBkYXRlKHRoaXMuaGFzaCkuZGlnZXN0KCdiYXNlNjQnKTtcblxuXHRyZXR1cm4gKHRoaXMuaGFzaDIgPT09IHRoZWlySGFzaDIpO1xufTtcblxuRmluZ2VycHJpbnQucGFyc2UgPSBmdW5jdGlvbiAoZnAsIG9wdGlvbnMpIHtcblx0YXNzZXJ0LnN0cmluZyhmcCwgJ2ZpbmdlcnByaW50Jyk7XG5cblx0dmFyIGFsZywgaGFzaCwgZW5BbGdzO1xuXHRpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuXHRcdGVuQWxncyA9IG9wdGlvbnM7XG5cdFx0b3B0aW9ucyA9IHt9O1xuXHR9XG5cdGFzc2VydC5vcHRpb25hbE9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpO1xuXHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdG9wdGlvbnMgPSB7fTtcblx0aWYgKG9wdGlvbnMuZW5BbGdzICE9PSB1bmRlZmluZWQpXG5cdFx0ZW5BbGdzID0gb3B0aW9ucy5lbkFsZ3M7XG5cdGFzc2VydC5vcHRpb25hbEFycmF5T2ZTdHJpbmcoZW5BbGdzLCAnYWxnb3JpdGhtcycpO1xuXG5cdHZhciBwYXJ0cyA9IGZwLnNwbGl0KCc6Jyk7XG5cdGlmIChwYXJ0cy5sZW5ndGggPT0gMikge1xuXHRcdGFsZyA9IHBhcnRzWzBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0LypKU1NUWUxFRCovXG5cdFx0dmFyIGJhc2U2NFJFID0gL15bQS1aYS16MC05K1xcLz1dKyQvO1xuXHRcdGlmICghYmFzZTY0UkUudGVzdChwYXJ0c1sxXSkpXG5cdFx0XHR0aHJvdyAobmV3IEZpbmdlcnByaW50Rm9ybWF0RXJyb3IoZnApKTtcblx0XHR0cnkge1xuXHRcdFx0aGFzaCA9IG5ldyBCdWZmZXIocGFydHNbMV0sICdiYXNlNjQnKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aHJvdyAobmV3IEZpbmdlcnByaW50Rm9ybWF0RXJyb3IoZnApKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAocGFydHMubGVuZ3RoID4gMikge1xuXHRcdGFsZyA9ICdtZDUnO1xuXHRcdGlmIChwYXJ0c1swXS50b0xvd2VyQ2FzZSgpID09PSAnbWQ1Jylcblx0XHRcdHBhcnRzID0gcGFydHMuc2xpY2UoMSk7XG5cdFx0cGFydHMgPSBwYXJ0cy5qb2luKCcnKTtcblx0XHQvKkpTU1RZTEVEKi9cblx0XHR2YXIgbWQ1UkUgPSAvXlthLWZBLUYwLTldKyQvO1xuXHRcdGlmICghbWQ1UkUudGVzdChwYXJ0cykpXG5cdFx0XHR0aHJvdyAobmV3IEZpbmdlcnByaW50Rm9ybWF0RXJyb3IoZnApKTtcblx0XHR0cnkge1xuXHRcdFx0aGFzaCA9IG5ldyBCdWZmZXIocGFydHMsICdoZXgnKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aHJvdyAobmV3IEZpbmdlcnByaW50Rm9ybWF0RXJyb3IoZnApKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoYWxnID09PSB1bmRlZmluZWQpXG5cdFx0dGhyb3cgKG5ldyBGaW5nZXJwcmludEZvcm1hdEVycm9yKGZwKSk7XG5cblx0aWYgKGFsZ3MuaGFzaEFsZ3NbYWxnXSA9PT0gdW5kZWZpbmVkKVxuXHRcdHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKGFsZykpO1xuXG5cdGlmIChlbkFsZ3MgIT09IHVuZGVmaW5lZCkge1xuXHRcdGVuQWxncyA9IGVuQWxncy5tYXAoZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEudG9Mb3dlckNhc2UoKTsgfSk7XG5cdFx0aWYgKGVuQWxncy5pbmRleE9mKGFsZykgPT09IC0xKVxuXHRcdFx0dGhyb3cgKG5ldyBJbnZhbGlkQWxnb3JpdGhtRXJyb3IoYWxnKSk7XG5cdH1cblxuXHRyZXR1cm4gKG5ldyBGaW5nZXJwcmludCh7XG5cdFx0YWxnb3JpdGhtOiBhbGcsXG5cdFx0aGFzaDogaGFzaCxcblx0XHR0eXBlOiBvcHRpb25zLnR5cGUgfHwgJ2tleSdcblx0fSkpO1xufTtcblxuZnVuY3Rpb24gYWRkQ29sb25zKHMpIHtcblx0LypKU1NUWUxFRCovXG5cdHJldHVybiAocy5yZXBsYWNlKC8oLnsyfSkoPz0uKS9nLCAnJDE6JykpO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRTdHJpcChzKSB7XG5cdC8qSlNTVFlMRUQqL1xuXHRyZXR1cm4gKHMucmVwbGFjZSgvPSokLywgJycpKTtcbn1cblxuZnVuY3Rpb24gc3NoQmFzZTY0Rm9ybWF0KGFsZywgaCkge1xuXHRyZXR1cm4gKGFsZy50b1VwcGVyQ2FzZSgpICsgJzonICsgYmFzZTY0U3RyaXAoaCkpO1xufVxuXG5GaW5nZXJwcmludC5pc0ZpbmdlcnByaW50ID0gZnVuY3Rpb24gKG9iaiwgdmVyKSB7XG5cdHJldHVybiAodXRpbHMuaXNDb21wYXRpYmxlKG9iaiwgRmluZ2VycHJpbnQsIHZlcikpO1xufTtcblxuLypcbiAqIEFQSSB2ZXJzaW9ucyBmb3IgRmluZ2VycHJpbnQ6XG4gKiBbMSwwXSAtLSBpbml0aWFsIHZlclxuICogWzEsMV0gLS0gZmlyc3QgdGFnZ2VkIHZlclxuICovXG5GaW5nZXJwcmludC5wcm90b3R5cGUuX3NzaHBrQXBpVmVyc2lvbiA9IFsxLCAxXTtcblxuRmluZ2VycHJpbnQuX29sZFZlcnNpb25EZXRlY3QgPSBmdW5jdGlvbiAob2JqKSB7XG5cdGFzc2VydC5mdW5jKG9iai50b1N0cmluZyk7XG5cdGFzc2VydC5mdW5jKG9iai5tYXRjaGVzKTtcblx0cmV0dXJuIChbMSwgMF0pO1xufTtcbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0cmVhZDogcmVhZCxcblx0d3JpdGU6IHdyaXRlXG59O1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgS2V5ID0gcmVxdWlyZSgnLi4va2V5Jyk7XG52YXIgUHJpdmF0ZUtleSA9IHJlcXVpcmUoJy4uL3ByaXZhdGUta2V5Jyk7XG5cbnZhciBwZW0gPSByZXF1aXJlKCcuL3BlbScpO1xudmFyIHNzaCA9IHJlcXVpcmUoJy4vc3NoJyk7XG52YXIgcmZjNDI1MyA9IHJlcXVpcmUoJy4vcmZjNDI1MycpO1xuXG5mdW5jdGlvbiByZWFkKGJ1Ziwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIChidWYpID09PSAnc3RyaW5nJykge1xuXHRcdGlmIChidWYudHJpbSgpLm1hdGNoKC9eWy1dK1sgXSpCRUdJTi8pKVxuXHRcdFx0cmV0dXJuIChwZW0ucmVhZChidWYsIG9wdGlvbnMpKTtcblx0XHRpZiAoYnVmLm1hdGNoKC9eXFxzKnNzaC1bYS16XS8pKVxuXHRcdFx0cmV0dXJuIChzc2gucmVhZChidWYsIG9wdGlvbnMpKTtcblx0XHRpZiAoYnVmLm1hdGNoKC9eXFxzKmVjZHNhLS8pKVxuXHRcdFx0cmV0dXJuIChzc2gucmVhZChidWYsIG9wdGlvbnMpKTtcblx0XHRidWYgPSBuZXcgQnVmZmVyKGJ1ZiwgJ2JpbmFyeScpO1xuXHR9IGVsc2Uge1xuXHRcdGFzc2VydC5idWZmZXIoYnVmKTtcblx0XHRpZiAoZmluZFBFTUhlYWRlcihidWYpKVxuXHRcdFx0cmV0dXJuIChwZW0ucmVhZChidWYsIG9wdGlvbnMpKTtcblx0XHRpZiAoZmluZFNTSEhlYWRlcihidWYpKVxuXHRcdFx0cmV0dXJuIChzc2gucmVhZChidWYsIG9wdGlvbnMpKTtcblx0fVxuXHRpZiAoYnVmLnJlYWRVSW50MzJCRSgwKSA8IGJ1Zi5sZW5ndGgpXG5cdFx0cmV0dXJuIChyZmM0MjUzLnJlYWQoYnVmLCBvcHRpb25zKSk7XG5cdHRocm93IChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBhdXRvLWRldGVjdCBmb3JtYXQgb2Yga2V5JykpO1xufVxuXG5mdW5jdGlvbiBmaW5kU1NISGVhZGVyKGJ1Zikge1xuXHR2YXIgb2Zmc2V0ID0gMDtcblx0d2hpbGUgKG9mZnNldCA8IGJ1Zi5sZW5ndGggJiZcblx0ICAgIChidWZbb2Zmc2V0XSA9PT0gMzIgfHwgYnVmW29mZnNldF0gPT09IDEwIHx8IGJ1ZltvZmZzZXRdID09PSA5KSlcblx0XHQrK29mZnNldDtcblx0aWYgKG9mZnNldCArIDQgPD0gYnVmLmxlbmd0aCAmJlxuXHQgICAgYnVmLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgNCkudG9TdHJpbmcoJ2FzY2lpJykgPT09ICdzc2gtJylcblx0XHRyZXR1cm4gKHRydWUpO1xuXHRpZiAob2Zmc2V0ICsgNiA8PSBidWYubGVuZ3RoICYmXG5cdCAgICBidWYuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyA2KS50b1N0cmluZygnYXNjaWknKSA9PT0gJ2VjZHNhLScpXG5cdFx0cmV0dXJuICh0cnVlKTtcblx0cmV0dXJuIChmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRQRU1IZWFkZXIoYnVmKSB7XG5cdHZhciBvZmZzZXQgPSAwO1xuXHR3aGlsZSAob2Zmc2V0IDwgYnVmLmxlbmd0aCAmJlxuXHQgICAgKGJ1ZltvZmZzZXRdID09PSAzMiB8fCBidWZbb2Zmc2V0XSA9PT0gMTApKVxuXHRcdCsrb2Zmc2V0O1xuXHRpZiAoYnVmW29mZnNldF0gIT09IDQ1KVxuXHRcdHJldHVybiAoZmFsc2UpO1xuXHR3aGlsZSAob2Zmc2V0IDwgYnVmLmxlbmd0aCAmJlxuXHQgICAgKGJ1ZltvZmZzZXRdID09PSA0NSkpXG5cdFx0KytvZmZzZXQ7XG5cdHdoaWxlIChvZmZzZXQgPCBidWYubGVuZ3RoICYmXG5cdCAgICAoYnVmW29mZnNldF0gPT09IDMyKSlcblx0XHQrK29mZnNldDtcblx0aWYgKG9mZnNldCArIDUgPiBidWYubGVuZ3RoIHx8XG5cdCAgICBidWYuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyA1KS50b1N0cmluZygnYXNjaWknKSAhPT0gJ0JFR0lOJylcblx0XHRyZXR1cm4gKGZhbHNlKTtcblx0cmV0dXJuICh0cnVlKTtcbn1cblxuZnVuY3Rpb24gd3JpdGUoa2V5LCBvcHRpb25zKSB7XG5cdHRocm93IChuZXcgRXJyb3IoJ1wiYXV0b1wiIGZvcm1hdCBjYW5ub3QgYmUgdXNlZCBmb3Igd3JpdGluZycpKTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDE3IEpveWVudCwgSW5jLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0cmVhZDogcmVhZCxcblx0dmVyaWZ5OiB2ZXJpZnksXG5cdHNpZ246IHNpZ24sXG5cdHNpZ25Bc3luYzogc2lnbkFzeW5jLFxuXHR3cml0ZTogd3JpdGUsXG5cblx0LyogSW50ZXJuYWwgcHJpdmF0ZSBBUEkgKi9cblx0ZnJvbUJ1ZmZlcjogZnJvbUJ1ZmZlcixcblx0dG9CdWZmZXI6IHRvQnVmZmVyXG59O1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBTU0hCdWZmZXIgPSByZXF1aXJlKCcuLi9zc2gtYnVmZmVyJyk7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgYWxncyA9IHJlcXVpcmUoJy4uL2FsZ3MnKTtcbnZhciBLZXkgPSByZXF1aXJlKCcuLi9rZXknKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi4vcHJpdmF0ZS1rZXknKTtcbnZhciBJZGVudGl0eSA9IHJlcXVpcmUoJy4uL2lkZW50aXR5Jyk7XG52YXIgcmZjNDI1MyA9IHJlcXVpcmUoJy4vcmZjNDI1MycpO1xudmFyIFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4uL3NpZ25hdHVyZScpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBDZXJ0aWZpY2F0ZSA9IHJlcXVpcmUoJy4uL2NlcnRpZmljYXRlJyk7XG5cbmZ1bmN0aW9uIHZlcmlmeShjZXJ0LCBrZXkpIHtcblx0Lypcblx0ICogV2UgYWx3YXlzIGdpdmUgYW4gaXNzdWVyS2V5LCBzbyBpZiBvdXIgdmVyaWZ5KCkgaXMgYmVpbmcgY2FsbGVkIHRoZW5cblx0ICogdGhlcmUgd2FzIG5vIHNpZ25hdHVyZS4gUmV0dXJuIGZhbHNlLlxuXHQgKi9cblx0cmV0dXJuIChmYWxzZSk7XG59XG5cbnZhciBUWVBFUyA9IHtcblx0J3VzZXInOiAxLFxuXHQnaG9zdCc6IDJcbn07XG5PYmplY3Qua2V5cyhUWVBFUykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBUWVBFU1tUWVBFU1trXV0gPSBrOyB9KTtcblxudmFyIEVDRFNBX0FMR08gPSAvXmVjZHNhLXNoYTItKFteQC1dKyktY2VydC12MDFAb3BlbnNzaC5jb20kLztcblxuZnVuY3Rpb24gcmVhZChidWYsIG9wdGlvbnMpIHtcblx0aWYgKEJ1ZmZlci5pc0J1ZmZlcihidWYpKVxuXHRcdGJ1ZiA9IGJ1Zi50b1N0cmluZygnYXNjaWknKTtcblx0dmFyIHBhcnRzID0gYnVmLnRyaW0oKS5zcGxpdCgvWyBcXHRcXG5dKy9nKTtcblx0aWYgKHBhcnRzLmxlbmd0aCA8IDIgfHwgcGFydHMubGVuZ3RoID4gMylcblx0XHR0aHJvdyAobmV3IEVycm9yKCdOb3QgYSB2YWxpZCBTU0ggY2VydGlmaWNhdGUgbGluZScpKTtcblxuXHR2YXIgYWxnbyA9IHBhcnRzWzBdO1xuXHR2YXIgZGF0YSA9IHBhcnRzWzFdO1xuXG5cdGRhdGEgPSBuZXcgQnVmZmVyKGRhdGEsICdiYXNlNjQnKTtcblx0cmV0dXJuIChmcm9tQnVmZmVyKGRhdGEsIGFsZ28pKTtcbn1cblxuZnVuY3Rpb24gZnJvbUJ1ZmZlcihkYXRhLCBhbGdvLCBwYXJ0aWFsKSB7XG5cdHZhciBzc2hidWYgPSBuZXcgU1NIQnVmZmVyKHsgYnVmZmVyOiBkYXRhIH0pO1xuXHR2YXIgaW5uZXJBbGdvID0gc3NoYnVmLnJlYWRTdHJpbmcoKTtcblx0aWYgKGFsZ28gIT09IHVuZGVmaW5lZCAmJiBpbm5lckFsZ28gIT09IGFsZ28pXG5cdFx0dGhyb3cgKG5ldyBFcnJvcignU1NIIGNlcnRpZmljYXRlIGFsZ29yaXRobSBtaXNtYXRjaCcpKTtcblx0aWYgKGFsZ28gPT09IHVuZGVmaW5lZClcblx0XHRhbGdvID0gaW5uZXJBbGdvO1xuXG5cdHZhciBjZXJ0ID0ge307XG5cdGNlcnQuc2lnbmF0dXJlcyA9IHt9O1xuXHRjZXJ0LnNpZ25hdHVyZXMub3BlbnNzaCA9IHt9O1xuXG5cdGNlcnQuc2lnbmF0dXJlcy5vcGVuc3NoLm5vbmNlID0gc3NoYnVmLnJlYWRCdWZmZXIoKTtcblxuXHR2YXIga2V5ID0ge307XG5cdHZhciBwYXJ0cyA9IChrZXkucGFydHMgPSBbXSk7XG5cdGtleS50eXBlID0gZ2V0QWxnKGFsZ28pO1xuXG5cdHZhciBwYXJ0Q291bnQgPSBhbGdzLmluZm9ba2V5LnR5cGVdLnBhcnRzLmxlbmd0aDtcblx0d2hpbGUgKHBhcnRzLmxlbmd0aCA8IHBhcnRDb3VudClcblx0XHRwYXJ0cy5wdXNoKHNzaGJ1Zi5yZWFkUGFydCgpKTtcblx0YXNzZXJ0Lm9rKHBhcnRzLmxlbmd0aCA+PSAxLCAna2V5IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgcGFydCcpO1xuXG5cdHZhciBhbGdJbmZvID0gYWxncy5pbmZvW2tleS50eXBlXTtcblx0aWYgKGtleS50eXBlID09PSAnZWNkc2EnKSB7XG5cdFx0dmFyIHJlcyA9IEVDRFNBX0FMR08uZXhlYyhhbGdvKTtcblx0XHRhc3NlcnQub2socmVzICE9PSBudWxsKTtcblx0XHRhc3NlcnQuc3RyaWN0RXF1YWwocmVzWzFdLCBwYXJ0c1swXS5kYXRhLnRvU3RyaW5nKCkpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhbGdJbmZvLnBhcnRzLmxlbmd0aDsgKytpKSB7XG5cdFx0cGFydHNbaV0ubmFtZSA9IGFsZ0luZm8ucGFydHNbaV07XG5cdFx0aWYgKHBhcnRzW2ldLm5hbWUgIT09ICdjdXJ2ZScgJiZcblx0XHQgICAgYWxnSW5mby5ub3JtYWxpemUgIT09IGZhbHNlKSB7XG5cdFx0XHR2YXIgcCA9IHBhcnRzW2ldO1xuXHRcdFx0cC5kYXRhID0gdXRpbHMubXBOb3JtYWxpemUocC5kYXRhKTtcblx0XHR9XG5cdH1cblxuXHRjZXJ0LnN1YmplY3RLZXkgPSBuZXcgS2V5KGtleSk7XG5cblx0Y2VydC5zZXJpYWwgPSBzc2hidWYucmVhZEludDY0KCk7XG5cblx0dmFyIHR5cGUgPSBUWVBFU1tzc2hidWYucmVhZEludCgpXTtcblx0YXNzZXJ0LnN0cmluZyh0eXBlLCAndmFsaWQgY2VydCB0eXBlJyk7XG5cblx0Y2VydC5zaWduYXR1cmVzLm9wZW5zc2gua2V5SWQgPSBzc2hidWYucmVhZFN0cmluZygpO1xuXG5cdHZhciBwcmluY2lwYWxzID0gW107XG5cdHZhciBwYnVmID0gc3NoYnVmLnJlYWRCdWZmZXIoKTtcblx0dmFyIHBzc2hidWYgPSBuZXcgU1NIQnVmZmVyKHsgYnVmZmVyOiBwYnVmIH0pO1xuXHR3aGlsZSAoIXBzc2hidWYuYXRFbmQoKSlcblx0XHRwcmluY2lwYWxzLnB1c2gocHNzaGJ1Zi5yZWFkU3RyaW5nKCkpO1xuXHRpZiAocHJpbmNpcGFscy5sZW5ndGggPT09IDApXG5cdFx0cHJpbmNpcGFscyA9IFsnKiddO1xuXG5cdGNlcnQuc3ViamVjdHMgPSBwcmluY2lwYWxzLm1hcChmdW5jdGlvbiAocHIpIHtcblx0XHRpZiAodHlwZSA9PT0gJ3VzZXInKVxuXHRcdFx0cmV0dXJuIChJZGVudGl0eS5mb3JVc2VyKHByKSk7XG5cdFx0ZWxzZSBpZiAodHlwZSA9PT0gJ2hvc3QnKVxuXHRcdFx0cmV0dXJuIChJZGVudGl0eS5mb3JIb3N0KHByKSk7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignVW5rbm93biBpZGVudGl0eSB0eXBlICcgKyB0eXBlKSk7XG5cdH0pO1xuXG5cdGNlcnQudmFsaWRGcm9tID0gaW50NjRUb0RhdGUoc3NoYnVmLnJlYWRJbnQ2NCgpKTtcblx0Y2VydC52YWxpZFVudGlsID0gaW50NjRUb0RhdGUoc3NoYnVmLnJlYWRJbnQ2NCgpKTtcblxuXHRjZXJ0LnNpZ25hdHVyZXMub3BlbnNzaC5jcml0aWNhbCA9IHNzaGJ1Zi5yZWFkQnVmZmVyKCk7XG5cdGNlcnQuc2lnbmF0dXJlcy5vcGVuc3NoLmV4dHMgPSBzc2hidWYucmVhZEJ1ZmZlcigpO1xuXG5cdC8qIHJlc2VydmVkICovXG5cdHNzaGJ1Zi5yZWFkQnVmZmVyKCk7XG5cblx0dmFyIHNpZ25pbmdLZXlCdWYgPSBzc2hidWYucmVhZEJ1ZmZlcigpO1xuXHRjZXJ0Lmlzc3VlcktleSA9IHJmYzQyNTMucmVhZChzaWduaW5nS2V5QnVmKTtcblxuXHQvKlxuXHQgKiBPcGVuU1NIIGNlcnRzIGRvbid0IGdpdmUgdGhlIGlkZW50aXR5IG9mIHRoZSBpc3N1ZXIsIGp1c3QgdGhlaXJcblx0ICogcHVibGljIGtleS4gU28sIHdlIHVzZSBhbiBJZGVudGl0eSB0aGF0IG1hdGNoZXMgYW55dGhpbmcuIFRoZVxuXHQgKiBpc1NpZ25lZEJ5KCkgZnVuY3Rpb24gd2lsbCBsYXRlciB0ZWxsIHlvdSBpZiB0aGUga2V5IG1hdGNoZXMuXG5cdCAqL1xuXHRjZXJ0Lmlzc3VlciA9IElkZW50aXR5LmZvckhvc3QoJyoqJyk7XG5cblx0dmFyIHNpZ0J1ZiA9IHNzaGJ1Zi5yZWFkQnVmZmVyKCk7XG5cdGNlcnQuc2lnbmF0dXJlcy5vcGVuc3NoLnNpZ25hdHVyZSA9XG5cdCAgICBTaWduYXR1cmUucGFyc2Uoc2lnQnVmLCBjZXJ0Lmlzc3VlcktleS50eXBlLCAnc3NoJyk7XG5cblx0aWYgKHBhcnRpYWwgIT09IHVuZGVmaW5lZCkge1xuXHRcdHBhcnRpYWwucmVtYWluZGVyID0gc3NoYnVmLnJlbWFpbmRlcigpO1xuXHRcdHBhcnRpYWwuY29uc3VtZWQgPSBzc2hidWYuX29mZnNldDtcblx0fVxuXG5cdHJldHVybiAobmV3IENlcnRpZmljYXRlKGNlcnQpKTtcbn1cblxuZnVuY3Rpb24gaW50NjRUb0RhdGUoYnVmKSB7XG5cdHZhciBpID0gYnVmLnJlYWRVSW50MzJCRSgwKSAqIDQyOTQ5NjcyOTY7XG5cdGkgKz0gYnVmLnJlYWRVSW50MzJCRSg0KTtcblx0dmFyIGQgPSBuZXcgRGF0ZSgpO1xuXHRkLnNldFRpbWUoaSAqIDEwMDApO1xuXHRkLnNvdXJjZUludDY0ID0gYnVmO1xuXHRyZXR1cm4gKGQpO1xufVxuXG5mdW5jdGlvbiBkYXRlVG9JbnQ2NChkYXRlKSB7XG5cdGlmIChkYXRlLnNvdXJjZUludDY0ICE9PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIChkYXRlLnNvdXJjZUludDY0KTtcblx0dmFyIGkgPSBNYXRoLnJvdW5kKGRhdGUuZ2V0VGltZSgpIC8gMTAwMCk7XG5cdHZhciB1cHBlciA9IE1hdGguZmxvb3IoaSAvIDQyOTQ5NjcyOTYpO1xuXHR2YXIgbG93ZXIgPSBNYXRoLmZsb29yKGkgJSA0Mjk0OTY3Mjk2KTtcblx0dmFyIGJ1ZiA9IG5ldyBCdWZmZXIoOCk7XG5cdGJ1Zi53cml0ZVVJbnQzMkJFKHVwcGVyLCAwKTtcblx0YnVmLndyaXRlVUludDMyQkUobG93ZXIsIDQpO1xuXHRyZXR1cm4gKGJ1Zik7XG59XG5cbmZ1bmN0aW9uIHNpZ24oY2VydCwga2V5KSB7XG5cdGlmIChjZXJ0LnNpZ25hdHVyZXMub3BlbnNzaCA9PT0gdW5kZWZpbmVkKVxuXHRcdGNlcnQuc2lnbmF0dXJlcy5vcGVuc3NoID0ge307XG5cdHRyeSB7XG5cdFx0dmFyIGJsb2IgPSB0b0J1ZmZlcihjZXJ0LCB0cnVlKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGRlbGV0ZSAoY2VydC5zaWduYXR1cmVzLm9wZW5zc2gpO1xuXHRcdHJldHVybiAoZmFsc2UpO1xuXHR9XG5cdHZhciBzaWcgPSBjZXJ0LnNpZ25hdHVyZXMub3BlbnNzaDtcblx0dmFyIGhhc2hBbGdvID0gdW5kZWZpbmVkO1xuXHRpZiAoa2V5LnR5cGUgPT09ICdyc2EnIHx8IGtleS50eXBlID09PSAnZHNhJylcblx0XHRoYXNoQWxnbyA9ICdzaGExJztcblx0dmFyIHNpZ25lciA9IGtleS5jcmVhdGVTaWduKGhhc2hBbGdvKTtcblx0c2lnbmVyLndyaXRlKGJsb2IpO1xuXHRzaWcuc2lnbmF0dXJlID0gc2lnbmVyLnNpZ24oKTtcblx0cmV0dXJuICh0cnVlKTtcbn1cblxuZnVuY3Rpb24gc2lnbkFzeW5jKGNlcnQsIHNpZ25lciwgZG9uZSkge1xuXHRpZiAoY2VydC5zaWduYXR1cmVzLm9wZW5zc2ggPT09IHVuZGVmaW5lZClcblx0XHRjZXJ0LnNpZ25hdHVyZXMub3BlbnNzaCA9IHt9O1xuXHR0cnkge1xuXHRcdHZhciBibG9iID0gdG9CdWZmZXIoY2VydCwgdHJ1ZSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRkZWxldGUgKGNlcnQuc2lnbmF0dXJlcy5vcGVuc3NoKTtcblx0XHRkb25lKGUpO1xuXHRcdHJldHVybjtcblx0fVxuXHR2YXIgc2lnID0gY2VydC5zaWduYXR1cmVzLm9wZW5zc2g7XG5cblx0c2lnbmVyKGJsb2IsIGZ1bmN0aW9uIChlcnIsIHNpZ25hdHVyZSkge1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdGRvbmUoZXJyKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdC8qXG5cdFx0XHQgKiBUaGlzIHdpbGwgdGhyb3cgaWYgdGhlIHNpZ25hdHVyZSBpc24ndCBvZiBhXG5cdFx0XHQgKiB0eXBlL2FsZ28gdGhhdCBjYW4gYmUgdXNlZCBmb3IgU1NILlxuXHRcdFx0ICovXG5cdFx0XHRzaWduYXR1cmUudG9CdWZmZXIoJ3NzaCcpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGRvbmUoZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHNpZy5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG5cdFx0ZG9uZSgpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gd3JpdGUoY2VydCwgb3B0aW9ucykge1xuXHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdG9wdGlvbnMgPSB7fTtcblxuXHR2YXIgYmxvYiA9IHRvQnVmZmVyKGNlcnQpO1xuXHR2YXIgb3V0ID0gZ2V0Q2VydFR5cGUoY2VydC5zdWJqZWN0S2V5KSArICcgJyArIGJsb2IudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXHRpZiAob3B0aW9ucy5jb21tZW50KVxuXHRcdG91dCA9IG91dCArICcgJyArIG9wdGlvbnMuY29tbWVudDtcblx0cmV0dXJuIChvdXQpO1xufVxuXG5cbmZ1bmN0aW9uIHRvQnVmZmVyKGNlcnQsIG5vU2lnKSB7XG5cdGFzc2VydC5vYmplY3QoY2VydC5zaWduYXR1cmVzLm9wZW5zc2gsICdzaWduYXR1cmUgZm9yIG9wZW5zc2ggZm9ybWF0Jyk7XG5cdHZhciBzaWcgPSBjZXJ0LnNpZ25hdHVyZXMub3BlbnNzaDtcblxuXHRpZiAoc2lnLm5vbmNlID09PSB1bmRlZmluZWQpXG5cdFx0c2lnLm5vbmNlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KTtcblx0dmFyIGJ1ZiA9IG5ldyBTU0hCdWZmZXIoe30pO1xuXHRidWYud3JpdGVTdHJpbmcoZ2V0Q2VydFR5cGUoY2VydC5zdWJqZWN0S2V5KSk7XG5cdGJ1Zi53cml0ZUJ1ZmZlcihzaWcubm9uY2UpO1xuXG5cdHZhciBrZXkgPSBjZXJ0LnN1YmplY3RLZXk7XG5cdHZhciBhbGdJbmZvID0gYWxncy5pbmZvW2tleS50eXBlXTtcblx0YWxnSW5mby5wYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XG5cdFx0YnVmLndyaXRlUGFydChrZXkucGFydFtwYXJ0XSk7XG5cdH0pO1xuXG5cdGJ1Zi53cml0ZUludDY0KGNlcnQuc2VyaWFsKTtcblxuXHR2YXIgdHlwZSA9IGNlcnQuc3ViamVjdHNbMF0udHlwZTtcblx0YXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHR5cGUsICd1bmtub3duJyk7XG5cdGNlcnQuc3ViamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcblx0XHRhc3NlcnQuc3RyaWN0RXF1YWwoaWQudHlwZSwgdHlwZSk7XG5cdH0pO1xuXHR0eXBlID0gVFlQRVNbdHlwZV07XG5cdGJ1Zi53cml0ZUludCh0eXBlKTtcblxuXHRpZiAoc2lnLmtleUlkID09PSB1bmRlZmluZWQpIHtcblx0XHRzaWcua2V5SWQgPSBjZXJ0LnN1YmplY3RzWzBdLnR5cGUgKyAnXycgK1xuXHRcdCAgICAoY2VydC5zdWJqZWN0c1swXS51aWQgfHwgY2VydC5zdWJqZWN0c1swXS5ob3N0bmFtZSk7XG5cdH1cblx0YnVmLndyaXRlU3RyaW5nKHNpZy5rZXlJZCk7XG5cblx0dmFyIHN1YiA9IG5ldyBTU0hCdWZmZXIoe30pO1xuXHRjZXJ0LnN1YmplY3RzLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG5cdFx0aWYgKHR5cGUgPT09IFRZUEVTLmhvc3QpXG5cdFx0XHRzdWIud3JpdGVTdHJpbmcoaWQuaG9zdG5hbWUpO1xuXHRcdGVsc2UgaWYgKHR5cGUgPT09IFRZUEVTLnVzZXIpXG5cdFx0XHRzdWIud3JpdGVTdHJpbmcoaWQudWlkKTtcblx0fSk7XG5cdGJ1Zi53cml0ZUJ1ZmZlcihzdWIudG9CdWZmZXIoKSk7XG5cblx0YnVmLndyaXRlSW50NjQoZGF0ZVRvSW50NjQoY2VydC52YWxpZEZyb20pKTtcblx0YnVmLndyaXRlSW50NjQoZGF0ZVRvSW50NjQoY2VydC52YWxpZFVudGlsKSk7XG5cblx0aWYgKHNpZy5jcml0aWNhbCA9PT0gdW5kZWZpbmVkKVxuXHRcdHNpZy5jcml0aWNhbCA9IG5ldyBCdWZmZXIoMCk7XG5cdGJ1Zi53cml0ZUJ1ZmZlcihzaWcuY3JpdGljYWwpO1xuXG5cdGlmIChzaWcuZXh0cyA9PT0gdW5kZWZpbmVkKVxuXHRcdHNpZy5leHRzID0gbmV3IEJ1ZmZlcigwKTtcblx0YnVmLndyaXRlQnVmZmVyKHNpZy5leHRzKTtcblxuXHQvKiByZXNlcnZlZCAqL1xuXHRidWYud3JpdGVCdWZmZXIobmV3IEJ1ZmZlcigwKSk7XG5cblx0c3ViID0gcmZjNDI1My53cml0ZShjZXJ0Lmlzc3VlcktleSk7XG5cdGJ1Zi53cml0ZUJ1ZmZlcihzdWIpO1xuXG5cdGlmICghbm9TaWcpXG5cdFx0YnVmLndyaXRlQnVmZmVyKHNpZy5zaWduYXR1cmUudG9CdWZmZXIoJ3NzaCcpKTtcblxuXHRyZXR1cm4gKGJ1Zi50b0J1ZmZlcigpKTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxnKGNlcnRUeXBlKSB7XG5cdGlmIChjZXJ0VHlwZSA9PT0gJ3NzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20nKVxuXHRcdHJldHVybiAoJ3JzYScpO1xuXHRpZiAoY2VydFR5cGUgPT09ICdzc2gtZHNzLWNlcnQtdjAxQG9wZW5zc2guY29tJylcblx0XHRyZXR1cm4gKCdkc2EnKTtcblx0aWYgKGNlcnRUeXBlLm1hdGNoKEVDRFNBX0FMR08pKVxuXHRcdHJldHVybiAoJ2VjZHNhJyk7XG5cdGlmIChjZXJ0VHlwZSA9PT0gJ3NzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tJylcblx0XHRyZXR1cm4gKCdlZDI1NTE5Jyk7XG5cdHRocm93IChuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNlcnQgdHlwZSAnICsgY2VydFR5cGUpKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2VydFR5cGUoa2V5KSB7XG5cdGlmIChrZXkudHlwZSA9PT0gJ3JzYScpXG5cdFx0cmV0dXJuICgnc3NoLXJzYS1jZXJ0LXYwMUBvcGVuc3NoLmNvbScpO1xuXHRpZiAoa2V5LnR5cGUgPT09ICdkc2EnKVxuXHRcdHJldHVybiAoJ3NzaC1kc3MtY2VydC12MDFAb3BlbnNzaC5jb20nKTtcblx0aWYgKGtleS50eXBlID09PSAnZWNkc2EnKVxuXHRcdHJldHVybiAoJ2VjZHNhLXNoYTItJyArIGtleS5jdXJ2ZSArICctY2VydC12MDFAb3BlbnNzaC5jb20nKTtcblx0aWYgKGtleS50eXBlID09PSAnZWQyNTUxOScpXG5cdFx0cmV0dXJuICgnc3NoLWVkMjU1MTktY2VydC12MDFAb3BlbnNzaC5jb20nKTtcblx0dGhyb3cgKG5ldyBFcnJvcignVW5zdXBwb3J0ZWQga2V5IHR5cGUgJyArIGtleS50eXBlKSk7XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAxNSBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHJlYWQ6IHJlYWQsXG5cdHdyaXRlOiB3cml0ZVxufTtcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgYXNuMSA9IHJlcXVpcmUoJ2FzbjEnKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi4vYWxncycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBLZXkgPSByZXF1aXJlKCcuLi9rZXknKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi4vcHJpdmF0ZS1rZXknKTtcblxudmFyIHBrY3MxID0gcmVxdWlyZSgnLi9wa2NzMScpO1xudmFyIHBrY3M4ID0gcmVxdWlyZSgnLi9wa2NzOCcpO1xudmFyIHNzaHByaXYgPSByZXF1aXJlKCcuL3NzaC1wcml2YXRlJyk7XG52YXIgcmZjNDI1MyA9IHJlcXVpcmUoJy4vcmZjNDI1MycpO1xuXG52YXIgZXJyb3JzID0gcmVxdWlyZSgnLi4vZXJyb3JzJyk7XG5cbi8qXG4gKiBGb3IgcmVhZGluZyB3ZSBzdXBwb3J0IGJvdGggUEtDUyMxIGFuZCBQS0NTIzguIElmIHdlIGZpbmQgYSBwcml2YXRlIGtleSxcbiAqIHdlIGp1c3QgdGFrZSB0aGUgcHVibGljIGNvbXBvbmVudCBvZiBpdCBhbmQgdXNlIHRoYXQuXG4gKi9cbmZ1bmN0aW9uIHJlYWQoYnVmLCBvcHRpb25zLCBmb3JjZVR5cGUpIHtcblx0dmFyIGlucHV0ID0gYnVmO1xuXHRpZiAodHlwZW9mIChidWYpICE9PSAnc3RyaW5nJykge1xuXHRcdGFzc2VydC5idWZmZXIoYnVmLCAnYnVmJyk7XG5cdFx0YnVmID0gYnVmLnRvU3RyaW5nKCdhc2NpaScpO1xuXHR9XG5cblx0dmFyIGxpbmVzID0gYnVmLnRyaW0oKS5zcGxpdCgnXFxuJyk7XG5cblx0dmFyIG0gPSBsaW5lc1swXS5tYXRjaCgvKkpTU1RZTEVEKi9cblx0ICAgIC9bLV0rWyBdKkJFR0lOIChbQS1aMC05XSsgKT8oUFVCTElDfFBSSVZBVEUpIEtFWVsgXSpbLV0rLyk7XG5cdGFzc2VydC5vayhtLCAnaW52YWxpZCBQRU0gaGVhZGVyJyk7XG5cblx0dmFyIG0yID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubWF0Y2goLypKU1NUWUxFRCovXG5cdCAgICAvWy1dK1sgXSpFTkQgKFtBLVowLTldKyApPyhQVUJMSUN8UFJJVkFURSkgS0VZWyBdKlstXSsvKTtcblx0YXNzZXJ0Lm9rKG0yLCAnaW52YWxpZCBQRU0gZm9vdGVyJyk7XG5cblx0LyogQmVnaW4gYW5kIGVuZCBiYW5uZXJzIG11c3QgbWF0Y2gga2V5IHR5cGUgKi9cblx0YXNzZXJ0LmVxdWFsKG1bMl0sIG0yWzJdKTtcblx0dmFyIHR5cGUgPSBtWzJdLnRvTG93ZXJDYXNlKCk7XG5cblx0dmFyIGFsZztcblx0aWYgKG1bMV0pIHtcblx0XHQvKiBUaGV5IGFsc28gbXVzdCBtYXRjaCBhbGdvcml0aG1zLCBpZiBnaXZlbiAqL1xuXHRcdGFzc2VydC5lcXVhbChtWzFdLCBtMlsxXSwgJ1BFTSBoZWFkZXIgYW5kIGZvb3RlciBtaXNtYXRjaCcpO1xuXHRcdGFsZyA9IG1bMV0udHJpbSgpO1xuXHR9XG5cblx0dmFyIGhlYWRlcnMgPSB7fTtcblx0d2hpbGUgKHRydWUpIHtcblx0XHRsaW5lcyA9IGxpbmVzLnNsaWNlKDEpO1xuXHRcdG0gPSBsaW5lc1swXS5tYXRjaCgvKkpTU1RZTEVEKi9cblx0XHQgICAgL14oW0EtWmEtejAtOS1dKyk6ICguKykkLyk7XG5cdFx0aWYgKCFtKVxuXHRcdFx0YnJlYWs7XG5cdFx0aGVhZGVyc1ttWzFdLnRvTG93ZXJDYXNlKCldID0gbVsyXTtcblx0fVxuXG5cdHZhciBjaXBoZXIsIGtleSwgaXY7XG5cdGlmIChoZWFkZXJzWydwcm9jLXR5cGUnXSkge1xuXHRcdHZhciBwYXJ0cyA9IGhlYWRlcnNbJ3Byb2MtdHlwZSddLnNwbGl0KCcsJyk7XG5cdFx0aWYgKHBhcnRzWzBdID09PSAnNCcgJiYgcGFydHNbMV0gPT09ICdFTkNSWVBURUQnKSB7XG5cdFx0XHRpZiAodHlwZW9mIChvcHRpb25zLnBhc3NwaHJhc2UpID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRvcHRpb25zLnBhc3NwaHJhc2UgPSBuZXcgQnVmZmVyKFxuXHRcdFx0XHQgICAgb3B0aW9ucy5wYXNzcGhyYXNlLCAndXRmLTgnKTtcblx0XHRcdH1cblx0XHRcdGlmICghQnVmZmVyLmlzQnVmZmVyKG9wdGlvbnMucGFzc3BocmFzZSkpIHtcblx0XHRcdFx0dGhyb3cgKG5ldyBlcnJvcnMuS2V5RW5jcnlwdGVkRXJyb3IoXG5cdFx0XHRcdCAgICBvcHRpb25zLmZpbGVuYW1lLCAnUEVNJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFydHMgPSBoZWFkZXJzWydkZWstaW5mbyddLnNwbGl0KCcsJyk7XG5cdFx0XHRcdGFzc2VydC5vayhwYXJ0cy5sZW5ndGggPT09IDIpO1xuXHRcdFx0XHRjaXBoZXIgPSBwYXJ0c1swXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRpdiA9IG5ldyBCdWZmZXIocGFydHNbMV0sICdoZXgnKTtcblx0XHRcdFx0a2V5ID0gdXRpbHMub3BlbnNzbEtleURlcml2KGNpcGhlciwgaXYsXG5cdFx0XHRcdCAgICBvcHRpb25zLnBhc3NwaHJhc2UsIDEpLmtleTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKiBDaG9wIG9mZiB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZXMgKi9cblx0bGluZXMgPSBsaW5lcy5zbGljZSgwLCAtMSkuam9pbignJyk7XG5cdGJ1ZiA9IG5ldyBCdWZmZXIobGluZXMsICdiYXNlNjQnKTtcblxuXHRpZiAoY2lwaGVyICYmIGtleSAmJiBpdikge1xuXHRcdHZhciBjaXBoZXJTdHJlYW0gPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihjaXBoZXIsIGtleSwgaXYpO1xuXHRcdHZhciBjaHVuaywgY2h1bmtzID0gW107XG5cdFx0Y2lwaGVyU3RyZWFtLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdGlmIChlLnRvU3RyaW5nKCkuaW5kZXhPZignYmFkIGRlY3J5cHQnKSAhPT0gLTEpIHtcblx0XHRcdFx0dGhyb3cgKG5ldyBFcnJvcignSW5jb3JyZWN0IHBhc3NwaHJhc2UgJyArXG5cdFx0XHRcdCAgICAnc3VwcGxpZWQsIGNvdWxkIG5vdCBkZWNyeXB0IGtleScpKTtcblx0XHRcdH1cblx0XHRcdHRocm93IChlKTtcblx0XHR9KTtcblx0XHRjaXBoZXJTdHJlYW0ud3JpdGUoYnVmKTtcblx0XHRjaXBoZXJTdHJlYW0uZW5kKCk7XG5cdFx0d2hpbGUgKChjaHVuayA9IGNpcGhlclN0cmVhbS5yZWFkKCkpICE9PSBudWxsKVxuXHRcdFx0Y2h1bmtzLnB1c2goY2h1bmspO1xuXHRcdGJ1ZiA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcblx0fVxuXG5cdC8qIFRoZSBuZXcgT3BlblNTSCBpbnRlcm5hbCBmb3JtYXQgYWJ1c2VzIFBFTSBoZWFkZXJzICovXG5cdGlmIChhbGcgJiYgYWxnLnRvTG93ZXJDYXNlKCkgPT09ICdvcGVuc3NoJylcblx0XHRyZXR1cm4gKHNzaHByaXYucmVhZFNTSFByaXZhdGUodHlwZSwgYnVmLCBvcHRpb25zKSk7XG5cdGlmIChhbGcgJiYgYWxnLnRvTG93ZXJDYXNlKCkgPT09ICdzc2gyJylcblx0XHRyZXR1cm4gKHJmYzQyNTMucmVhZFR5cGUodHlwZSwgYnVmLCBvcHRpb25zKSk7XG5cblx0dmFyIGRlciA9IG5ldyBhc24xLkJlclJlYWRlcihidWYpO1xuXHRkZXIub3JpZ2luYWxJbnB1dCA9IGlucHV0O1xuXG5cdC8qXG5cdCAqIEFsbCBvZiB0aGUgUEVNIGZpbGUgdHlwZXMgc3RhcnQgd2l0aCBhIHNlcXVlbmNlIHRhZywgc28gY2hvcCBpdFxuXHQgKiBvZmYgaGVyZVxuXHQgKi9cblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXG5cdC8qIFBLQ1MjMSB0eXBlIGtleXMgbmFtZSBhbiBhbGdvcml0aG0gaW4gdGhlIGJhbm5lciBleHBsaWNpdGx5ICovXG5cdGlmIChhbGcpIHtcblx0XHRpZiAoZm9yY2VUeXBlKVxuXHRcdFx0YXNzZXJ0LnN0cmljdEVxdWFsKGZvcmNlVHlwZSwgJ3BrY3MxJyk7XG5cdFx0cmV0dXJuIChwa2NzMS5yZWFkUGtjczEoYWxnLCB0eXBlLCBkZXIpKTtcblx0fSBlbHNlIHtcblx0XHRpZiAoZm9yY2VUeXBlKVxuXHRcdFx0YXNzZXJ0LnN0cmljdEVxdWFsKGZvcmNlVHlwZSwgJ3BrY3M4Jyk7XG5cdFx0cmV0dXJuIChwa2NzOC5yZWFkUGtjczgoYWxnLCB0eXBlLCBkZXIpKTtcblx0fVxufVxuXG5mdW5jdGlvbiB3cml0ZShrZXksIG9wdGlvbnMsIHR5cGUpIHtcblx0YXNzZXJ0Lm9iamVjdChrZXkpO1xuXG5cdHZhciBhbGcgPSB7J2VjZHNhJzogJ0VDJywgJ3JzYSc6ICdSU0EnLCAnZHNhJzogJ0RTQSd9W2tleS50eXBlXTtcblx0dmFyIGhlYWRlcjtcblxuXHR2YXIgZGVyID0gbmV3IGFzbjEuQmVyV3JpdGVyKCk7XG5cblx0aWYgKFByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSkpIHtcblx0XHRpZiAodHlwZSAmJiB0eXBlID09PSAncGtjczgnKSB7XG5cdFx0XHRoZWFkZXIgPSAnUFJJVkFURSBLRVknO1xuXHRcdFx0cGtjczgud3JpdGVQa2NzOChkZXIsIGtleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlKVxuXHRcdFx0XHRhc3NlcnQuc3RyaWN0RXF1YWwodHlwZSwgJ3BrY3MxJyk7XG5cdFx0XHRoZWFkZXIgPSBhbGcgKyAnIFBSSVZBVEUgS0VZJztcblx0XHRcdHBrY3MxLndyaXRlUGtjczEoZGVyLCBrZXkpO1xuXHRcdH1cblxuXHR9IGVsc2UgaWYgKEtleS5pc0tleShrZXkpKSB7XG5cdFx0aWYgKHR5cGUgJiYgdHlwZSA9PT0gJ3BrY3MxJykge1xuXHRcdFx0aGVhZGVyID0gYWxnICsgJyBQVUJMSUMgS0VZJztcblx0XHRcdHBrY3MxLndyaXRlUGtjczEoZGVyLCBrZXkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodHlwZSlcblx0XHRcdFx0YXNzZXJ0LnN0cmljdEVxdWFsKHR5cGUsICdwa2NzOCcpO1xuXHRcdFx0aGVhZGVyID0gJ1BVQkxJQyBLRVknO1xuXHRcdFx0cGtjczgud3JpdGVQa2NzOChkZXIsIGtleSk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcigna2V5IGlzIG5vdCBhIEtleSBvciBQcml2YXRlS2V5JykpO1xuXHR9XG5cblx0dmFyIHRtcCA9IGRlci5idWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXHR2YXIgbGVuID0gdG1wLmxlbmd0aCArICh0bXAubGVuZ3RoIC8gNjQpICtcblx0ICAgIDE4ICsgMTYgKyBoZWFkZXIubGVuZ3RoKjIgKyAxMDtcblx0dmFyIGJ1ZiA9IG5ldyBCdWZmZXIobGVuKTtcblx0dmFyIG8gPSAwO1xuXHRvICs9IGJ1Zi53cml0ZSgnLS0tLS1CRUdJTiAnICsgaGVhZGVyICsgJy0tLS0tXFxuJywgbyk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdG1wLmxlbmd0aDsgKSB7XG5cdFx0dmFyIGxpbWl0ID0gaSArIDY0O1xuXHRcdGlmIChsaW1pdCA+IHRtcC5sZW5ndGgpXG5cdFx0XHRsaW1pdCA9IHRtcC5sZW5ndGg7XG5cdFx0byArPSBidWYud3JpdGUodG1wLnNsaWNlKGksIGxpbWl0KSwgbyk7XG5cdFx0YnVmW28rK10gPSAxMDtcblx0XHRpID0gbGltaXQ7XG5cdH1cblx0byArPSBidWYud3JpdGUoJy0tLS0tRU5EICcgKyBoZWFkZXIgKyAnLS0tLS1cXG4nLCBvKTtcblxuXHRyZXR1cm4gKGJ1Zi5zbGljZSgwLCBvKSk7XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAxNSBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHJlYWQ6IHJlYWQsXG5cdHJlYWRQa2NzMTogcmVhZFBrY3MxLFxuXHR3cml0ZTogd3JpdGUsXG5cdHdyaXRlUGtjczE6IHdyaXRlUGtjczFcbn07XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIGFzbjEgPSByZXF1aXJlKCdhc24xJyk7XG52YXIgYWxncyA9IHJlcXVpcmUoJy4uL2FsZ3MnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbnZhciBLZXkgPSByZXF1aXJlKCcuLi9rZXknKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi4vcHJpdmF0ZS1rZXknKTtcbnZhciBwZW0gPSByZXF1aXJlKCcuL3BlbScpO1xuXG52YXIgcGtjczggPSByZXF1aXJlKCcuL3BrY3M4Jyk7XG52YXIgcmVhZEVDRFNBQ3VydmUgPSBwa2NzOC5yZWFkRUNEU0FDdXJ2ZTtcblxuZnVuY3Rpb24gcmVhZChidWYsIG9wdGlvbnMpIHtcblx0cmV0dXJuIChwZW0ucmVhZChidWYsIG9wdGlvbnMsICdwa2NzMScpKTtcbn1cblxuZnVuY3Rpb24gd3JpdGUoa2V5LCBvcHRpb25zKSB7XG5cdHJldHVybiAocGVtLndyaXRlKGtleSwgb3B0aW9ucywgJ3BrY3MxJykpO1xufVxuXG4vKiBIZWxwZXIgdG8gcmVhZCBpbiBhIHNpbmdsZSBtcGludCAqL1xuZnVuY3Rpb24gcmVhZE1QSW50KGRlciwgbm0pIHtcblx0YXNzZXJ0LnN0cmljdEVxdWFsKGRlci5wZWVrKCksIGFzbjEuQmVyLkludGVnZXIsXG5cdCAgICBubSArICcgaXMgbm90IGFuIEludGVnZXInKTtcblx0cmV0dXJuICh1dGlscy5tcE5vcm1hbGl6ZShkZXIucmVhZFN0cmluZyhhc24xLkJlci5JbnRlZ2VyLCB0cnVlKSkpO1xufVxuXG5mdW5jdGlvbiByZWFkUGtjczEoYWxnLCB0eXBlLCBkZXIpIHtcblx0c3dpdGNoIChhbGcpIHtcblx0Y2FzZSAnUlNBJzpcblx0XHRpZiAodHlwZSA9PT0gJ3B1YmxpYycpXG5cdFx0XHRyZXR1cm4gKHJlYWRQa2NzMVJTQVB1YmxpYyhkZXIpKTtcblx0XHRlbHNlIGlmICh0eXBlID09PSAncHJpdmF0ZScpXG5cdFx0XHRyZXR1cm4gKHJlYWRQa2NzMVJTQVByaXZhdGUoZGVyKSk7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignVW5rbm93biBrZXkgdHlwZTogJyArIHR5cGUpKTtcblx0Y2FzZSAnRFNBJzpcblx0XHRpZiAodHlwZSA9PT0gJ3B1YmxpYycpXG5cdFx0XHRyZXR1cm4gKHJlYWRQa2NzMURTQVB1YmxpYyhkZXIpKTtcblx0XHRlbHNlIGlmICh0eXBlID09PSAncHJpdmF0ZScpXG5cdFx0XHRyZXR1cm4gKHJlYWRQa2NzMURTQVByaXZhdGUoZGVyKSk7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignVW5rbm93biBrZXkgdHlwZTogJyArIHR5cGUpKTtcblx0Y2FzZSAnRUMnOlxuXHRjYXNlICdFQ0RTQSc6XG5cdFx0aWYgKHR5cGUgPT09ICdwcml2YXRlJylcblx0XHRcdHJldHVybiAocmVhZFBrY3MxRUNEU0FQcml2YXRlKGRlcikpO1xuXHRcdGVsc2UgaWYgKHR5cGUgPT09ICdwdWJsaWMnKVxuXHRcdFx0cmV0dXJuIChyZWFkUGtjczFFQ0RTQVB1YmxpYyhkZXIpKTtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdVbmtub3duIGtleSB0eXBlOiAnICsgdHlwZSkpO1xuXHRkZWZhdWx0OlxuXHRcdHRocm93IChuZXcgRXJyb3IoJ1Vua25vd24ga2V5IGFsZ286ICcgKyBhbGcpKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWFkUGtjczFSU0FQdWJsaWMoZGVyKSB7XG5cdC8vIG1vZHVsdXMgYW5kIGV4cG9uZW50XG5cdHZhciBuID0gcmVhZE1QSW50KGRlciwgJ21vZHVsdXMnKTtcblx0dmFyIGUgPSByZWFkTVBJbnQoZGVyLCAnZXhwb25lbnQnKTtcblxuXHQvLyBub3csIG1ha2UgdGhlIGtleVxuXHR2YXIga2V5ID0ge1xuXHRcdHR5cGU6ICdyc2EnLFxuXHRcdHBhcnRzOiBbXG5cdFx0XHR7IG5hbWU6ICdlJywgZGF0YTogZSB9LFxuXHRcdFx0eyBuYW1lOiAnbicsIGRhdGE6IG4gfVxuXHRcdF1cblx0fTtcblxuXHRyZXR1cm4gKG5ldyBLZXkoa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzMVJTQVByaXZhdGUoZGVyKSB7XG5cdHZhciB2ZXJzaW9uID0gcmVhZE1QSW50KGRlciwgJ3ZlcnNpb24nKTtcblx0YXNzZXJ0LnN0cmljdEVxdWFsKHZlcnNpb25bMF0sIDApO1xuXG5cdC8vIG1vZHVsdXMgdGhlbiBwdWJsaWMgZXhwb25lbnRcblx0dmFyIG4gPSByZWFkTVBJbnQoZGVyLCAnbW9kdWx1cycpO1xuXHR2YXIgZSA9IHJlYWRNUEludChkZXIsICdwdWJsaWMgZXhwb25lbnQnKTtcblx0dmFyIGQgPSByZWFkTVBJbnQoZGVyLCAncHJpdmF0ZSBleHBvbmVudCcpO1xuXHR2YXIgcCA9IHJlYWRNUEludChkZXIsICdwcmltZTEnKTtcblx0dmFyIHEgPSByZWFkTVBJbnQoZGVyLCAncHJpbWUyJyk7XG5cdHZhciBkbW9kcCA9IHJlYWRNUEludChkZXIsICdleHBvbmVudDEnKTtcblx0dmFyIGRtb2RxID0gcmVhZE1QSW50KGRlciwgJ2V4cG9uZW50MicpO1xuXHR2YXIgaXFtcCA9IHJlYWRNUEludChkZXIsICdpcW1wJyk7XG5cblx0Ly8gbm93LCBtYWtlIHRoZSBrZXlcblx0dmFyIGtleSA9IHtcblx0XHR0eXBlOiAncnNhJyxcblx0XHRwYXJ0czogW1xuXHRcdFx0eyBuYW1lOiAnbicsIGRhdGE6IG4gfSxcblx0XHRcdHsgbmFtZTogJ2UnLCBkYXRhOiBlIH0sXG5cdFx0XHR7IG5hbWU6ICdkJywgZGF0YTogZCB9LFxuXHRcdFx0eyBuYW1lOiAnaXFtcCcsIGRhdGE6IGlxbXAgfSxcblx0XHRcdHsgbmFtZTogJ3AnLCBkYXRhOiBwIH0sXG5cdFx0XHR7IG5hbWU6ICdxJywgZGF0YTogcSB9LFxuXHRcdFx0eyBuYW1lOiAnZG1vZHAnLCBkYXRhOiBkbW9kcCB9LFxuXHRcdFx0eyBuYW1lOiAnZG1vZHEnLCBkYXRhOiBkbW9kcSB9XG5cdFx0XVxuXHR9O1xuXG5cdHJldHVybiAobmV3IFByaXZhdGVLZXkoa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzMURTQVByaXZhdGUoZGVyKSB7XG5cdHZhciB2ZXJzaW9uID0gcmVhZE1QSW50KGRlciwgJ3ZlcnNpb24nKTtcblx0YXNzZXJ0LnN0cmljdEVxdWFsKHZlcnNpb24ucmVhZFVJbnQ4KDApLCAwKTtcblxuXHR2YXIgcCA9IHJlYWRNUEludChkZXIsICdwJyk7XG5cdHZhciBxID0gcmVhZE1QSW50KGRlciwgJ3EnKTtcblx0dmFyIGcgPSByZWFkTVBJbnQoZGVyLCAnZycpO1xuXHR2YXIgeSA9IHJlYWRNUEludChkZXIsICd5Jyk7XG5cdHZhciB4ID0gcmVhZE1QSW50KGRlciwgJ3gnKTtcblxuXHQvLyBub3csIG1ha2UgdGhlIGtleVxuXHR2YXIga2V5ID0ge1xuXHRcdHR5cGU6ICdkc2EnLFxuXHRcdHBhcnRzOiBbXG5cdFx0XHR7IG5hbWU6ICdwJywgZGF0YTogcCB9LFxuXHRcdFx0eyBuYW1lOiAncScsIGRhdGE6IHEgfSxcblx0XHRcdHsgbmFtZTogJ2cnLCBkYXRhOiBnIH0sXG5cdFx0XHR7IG5hbWU6ICd5JywgZGF0YTogeSB9LFxuXHRcdFx0eyBuYW1lOiAneCcsIGRhdGE6IHggfVxuXHRcdF1cblx0fTtcblxuXHRyZXR1cm4gKG5ldyBQcml2YXRlS2V5KGtleSkpO1xufVxuXG5mdW5jdGlvbiByZWFkUGtjczFEU0FQdWJsaWMoZGVyKSB7XG5cdHZhciB5ID0gcmVhZE1QSW50KGRlciwgJ3knKTtcblx0dmFyIHAgPSByZWFkTVBJbnQoZGVyLCAncCcpO1xuXHR2YXIgcSA9IHJlYWRNUEludChkZXIsICdxJyk7XG5cdHZhciBnID0gcmVhZE1QSW50KGRlciwgJ2cnKTtcblxuXHR2YXIga2V5ID0ge1xuXHRcdHR5cGU6ICdkc2EnLFxuXHRcdHBhcnRzOiBbXG5cdFx0XHR7IG5hbWU6ICd5JywgZGF0YTogeSB9LFxuXHRcdFx0eyBuYW1lOiAncCcsIGRhdGE6IHAgfSxcblx0XHRcdHsgbmFtZTogJ3EnLCBkYXRhOiBxIH0sXG5cdFx0XHR7IG5hbWU6ICdnJywgZGF0YTogZyB9XG5cdFx0XVxuXHR9O1xuXG5cdHJldHVybiAobmV3IEtleShrZXkpKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBrY3MxRUNEU0FQdWJsaWMoZGVyKSB7XG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblxuXHR2YXIgb2lkID0gZGVyLnJlYWRPSUQoKTtcblx0YXNzZXJ0LnN0cmljdEVxdWFsKG9pZCwgJzEuMi44NDAuMTAwNDUuMi4xJywgJ211c3QgYmUgZWNQdWJsaWNLZXknKTtcblxuXHR2YXIgY3VydmVPaWQgPSBkZXIucmVhZE9JRCgpO1xuXG5cdHZhciBjdXJ2ZTtcblx0dmFyIGN1cnZlcyA9IE9iamVjdC5rZXlzKGFsZ3MuY3VydmVzKTtcblx0Zm9yICh2YXIgaiA9IDA7IGogPCBjdXJ2ZXMubGVuZ3RoOyArK2opIHtcblx0XHR2YXIgYyA9IGN1cnZlc1tqXTtcblx0XHR2YXIgY2QgPSBhbGdzLmN1cnZlc1tjXTtcblx0XHRpZiAoY2QucGtjczhvaWQgPT09IGN1cnZlT2lkKSB7XG5cdFx0XHRjdXJ2ZSA9IGM7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0YXNzZXJ0LnN0cmluZyhjdXJ2ZSwgJ2Ega25vd24gRUNEU0EgbmFtZWQgY3VydmUnKTtcblxuXHR2YXIgUSA9IGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkJpdFN0cmluZywgdHJ1ZSk7XG5cdFEgPSB1dGlscy5lY05vcm1hbGl6ZShRKTtcblxuXHR2YXIga2V5ID0ge1xuXHRcdHR5cGU6ICdlY2RzYScsXG5cdFx0cGFydHM6IFtcblx0XHRcdHsgbmFtZTogJ2N1cnZlJywgZGF0YTogbmV3IEJ1ZmZlcihjdXJ2ZSkgfSxcblx0XHRcdHsgbmFtZTogJ1EnLCBkYXRhOiBRIH1cblx0XHRdXG5cdH07XG5cblx0cmV0dXJuIChuZXcgS2V5KGtleSkpO1xufVxuXG5mdW5jdGlvbiByZWFkUGtjczFFQ0RTQVByaXZhdGUoZGVyKSB7XG5cdHZhciB2ZXJzaW9uID0gcmVhZE1QSW50KGRlciwgJ3ZlcnNpb24nKTtcblx0YXNzZXJ0LnN0cmljdEVxdWFsKHZlcnNpb24ucmVhZFVJbnQ4KDApLCAxKTtcblxuXHQvLyBwcml2YXRlIGtleVxuXHR2YXIgZCA9IGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLk9jdGV0U3RyaW5nLCB0cnVlKTtcblxuXHRkZXIucmVhZFNlcXVlbmNlKDB4YTApO1xuXHR2YXIgY3VydmUgPSByZWFkRUNEU0FDdXJ2ZShkZXIpO1xuXHRhc3NlcnQuc3RyaW5nKGN1cnZlLCAnYSBrbm93biBlbGxpcHRpYyBjdXJ2ZScpO1xuXG5cdGRlci5yZWFkU2VxdWVuY2UoMHhhMSk7XG5cdHZhciBRID0gZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuQml0U3RyaW5nLCB0cnVlKTtcblx0USA9IHV0aWxzLmVjTm9ybWFsaXplKFEpO1xuXG5cdHZhciBrZXkgPSB7XG5cdFx0dHlwZTogJ2VjZHNhJyxcblx0XHRwYXJ0czogW1xuXHRcdFx0eyBuYW1lOiAnY3VydmUnLCBkYXRhOiBuZXcgQnVmZmVyKGN1cnZlKSB9LFxuXHRcdFx0eyBuYW1lOiAnUScsIGRhdGE6IFEgfSxcblx0XHRcdHsgbmFtZTogJ2QnLCBkYXRhOiBkIH1cblx0XHRdXG5cdH07XG5cblx0cmV0dXJuIChuZXcgUHJpdmF0ZUtleShrZXkpKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQa2NzMShkZXIsIGtleSkge1xuXHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXG5cdHN3aXRjaCAoa2V5LnR5cGUpIHtcblx0Y2FzZSAncnNhJzpcblx0XHRpZiAoUHJpdmF0ZUtleS5pc1ByaXZhdGVLZXkoa2V5KSlcblx0XHRcdHdyaXRlUGtjczFSU0FQcml2YXRlKGRlciwga2V5KTtcblx0XHRlbHNlXG5cdFx0XHR3cml0ZVBrY3MxUlNBUHVibGljKGRlciwga2V5KTtcblx0XHRicmVhaztcblx0Y2FzZSAnZHNhJzpcblx0XHRpZiAoUHJpdmF0ZUtleS5pc1ByaXZhdGVLZXkoa2V5KSlcblx0XHRcdHdyaXRlUGtjczFEU0FQcml2YXRlKGRlciwga2V5KTtcblx0XHRlbHNlXG5cdFx0XHR3cml0ZVBrY3MxRFNBUHVibGljKGRlciwga2V5KTtcblx0XHRicmVhaztcblx0Y2FzZSAnZWNkc2EnOlxuXHRcdGlmIChQcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXkpKVxuXHRcdFx0d3JpdGVQa2NzMUVDRFNBUHJpdmF0ZShkZXIsIGtleSk7XG5cdFx0ZWxzZVxuXHRcdFx0d3JpdGVQa2NzMUVDRFNBUHVibGljKGRlciwga2V5KTtcblx0XHRicmVhaztcblx0ZGVmYXVsdDpcblx0XHR0aHJvdyAobmV3IEVycm9yKCdVbmtub3duIGtleSBhbGdvOiAnICsga2V5LnR5cGUpKTtcblx0fVxuXG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVBrY3MxUlNBUHVibGljKGRlciwga2V5KSB7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5uLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuZS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQa2NzMVJTQVByaXZhdGUoZGVyLCBrZXkpIHtcblx0dmFyIHZlciA9IG5ldyBCdWZmZXIoMSk7XG5cdHZlclswXSA9IDA7XG5cdGRlci53cml0ZUJ1ZmZlcih2ZXIsIGFzbjEuQmVyLkludGVnZXIpO1xuXG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5uLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuZS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmQuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5wLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQucS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0aWYgKCFrZXkucGFydC5kbW9kcCB8fCAha2V5LnBhcnQuZG1vZHEpXG5cdFx0dXRpbHMuYWRkUlNBTWlzc2luZyhrZXkpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuZG1vZHAuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5kbW9kcS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmlxbXAuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGtjczFEU0FQcml2YXRlKGRlciwga2V5KSB7XG5cdHZhciB2ZXIgPSBuZXcgQnVmZmVyKDEpO1xuXHR2ZXJbMF0gPSAwO1xuXHRkZXIud3JpdGVCdWZmZXIodmVyLCBhc24xLkJlci5JbnRlZ2VyKTtcblxuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQucC5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LnEuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5nLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQueS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LnguZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGtjczFEU0FQdWJsaWMoZGVyLCBrZXkpIHtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LnkuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5wLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQucS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmcuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGtjczFFQ0RTQVB1YmxpYyhkZXIsIGtleSkge1xuXHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXG5cdGRlci53cml0ZU9JRCgnMS4yLjg0MC4xMDA0NS4yLjEnKTsgLyogZWNQdWJsaWNLZXkgKi9cblx0dmFyIGN1cnZlID0ga2V5LnBhcnQuY3VydmUuZGF0YS50b1N0cmluZygpO1xuXHR2YXIgY3VydmVPaWQgPSBhbGdzLmN1cnZlc1tjdXJ2ZV0ucGtjczhvaWQ7XG5cdGFzc2VydC5zdHJpbmcoY3VydmVPaWQsICdhIGtub3duIEVDRFNBIG5hbWVkIGN1cnZlJyk7XG5cdGRlci53cml0ZU9JRChjdXJ2ZU9pZCk7XG5cblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0dmFyIFEgPSB1dGlscy5lY05vcm1hbGl6ZShrZXkucGFydC5RLmRhdGEsIHRydWUpO1xuXHRkZXIud3JpdGVCdWZmZXIoUSwgYXNuMS5CZXIuQml0U3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQa2NzMUVDRFNBUHJpdmF0ZShkZXIsIGtleSkge1xuXHR2YXIgdmVyID0gbmV3IEJ1ZmZlcigxKTtcblx0dmVyWzBdID0gMTtcblx0ZGVyLndyaXRlQnVmZmVyKHZlciwgYXNuMS5CZXIuSW50ZWdlcik7XG5cblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmQuZGF0YSwgYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXG5cdGRlci5zdGFydFNlcXVlbmNlKDB4YTApO1xuXHR2YXIgY3VydmUgPSBrZXkucGFydC5jdXJ2ZS5kYXRhLnRvU3RyaW5nKCk7XG5cdHZhciBjdXJ2ZU9pZCA9IGFsZ3MuY3VydmVzW2N1cnZlXS5wa2NzOG9pZDtcblx0YXNzZXJ0LnN0cmluZyhjdXJ2ZU9pZCwgJ2Ega25vd24gRUNEU0EgbmFtZWQgY3VydmUnKTtcblx0ZGVyLndyaXRlT0lEKGN1cnZlT2lkKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoMHhhMSk7XG5cdHZhciBRID0gdXRpbHMuZWNOb3JtYWxpemUoa2V5LnBhcnQuUS5kYXRhLCB0cnVlKTtcblx0ZGVyLndyaXRlQnVmZmVyKFEsIGFzbjEuQmVyLkJpdFN0cmluZyk7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRyZWFkOiByZWFkLFxuXHRyZWFkUGtjczg6IHJlYWRQa2NzOCxcblx0d3JpdGU6IHdyaXRlLFxuXHR3cml0ZVBrY3M4OiB3cml0ZVBrY3M4LFxuXG5cdHJlYWRFQ0RTQUN1cnZlOiByZWFkRUNEU0FDdXJ2ZSxcblx0d3JpdGVFQ0RTQUN1cnZlOiB3cml0ZUVDRFNBQ3VydmVcbn07XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIGFzbjEgPSByZXF1aXJlKCdhc24xJyk7XG52YXIgYWxncyA9IHJlcXVpcmUoJy4uL2FsZ3MnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgS2V5ID0gcmVxdWlyZSgnLi4va2V5Jyk7XG52YXIgUHJpdmF0ZUtleSA9IHJlcXVpcmUoJy4uL3ByaXZhdGUta2V5Jyk7XG52YXIgcGVtID0gcmVxdWlyZSgnLi9wZW0nKTtcblxuZnVuY3Rpb24gcmVhZChidWYsIG9wdGlvbnMpIHtcblx0cmV0dXJuIChwZW0ucmVhZChidWYsIG9wdGlvbnMsICdwa2NzOCcpKTtcbn1cblxuZnVuY3Rpb24gd3JpdGUoa2V5LCBvcHRpb25zKSB7XG5cdHJldHVybiAocGVtLndyaXRlKGtleSwgb3B0aW9ucywgJ3BrY3M4JykpO1xufVxuXG4vKiBIZWxwZXIgdG8gcmVhZCBpbiBhIHNpbmdsZSBtcGludCAqL1xuZnVuY3Rpb24gcmVhZE1QSW50KGRlciwgbm0pIHtcblx0YXNzZXJ0LnN0cmljdEVxdWFsKGRlci5wZWVrKCksIGFzbjEuQmVyLkludGVnZXIsXG5cdCAgICBubSArICcgaXMgbm90IGFuIEludGVnZXInKTtcblx0cmV0dXJuICh1dGlscy5tcE5vcm1hbGl6ZShkZXIucmVhZFN0cmluZyhhc24xLkJlci5JbnRlZ2VyLCB0cnVlKSkpO1xufVxuXG5mdW5jdGlvbiByZWFkUGtjczgoYWxnLCB0eXBlLCBkZXIpIHtcblx0LyogUHJpdmF0ZSBrZXlzIGluIHBrY3MjOCBmb3JtYXQgaGF2ZSBhIHdlaXJkIGV4dHJhIGludCAqL1xuXHRpZiAoZGVyLnBlZWsoKSA9PT0gYXNuMS5CZXIuSW50ZWdlcikge1xuXHRcdGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlLCAncHJpdmF0ZScsXG5cdFx0ICAgICd1bmV4cGVjdGVkIEludGVnZXIgYXQgc3RhcnQgb2YgcHVibGljIGtleScpO1xuXHRcdGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkludGVnZXIsIHRydWUpO1xuXHR9XG5cblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHR2YXIgbmV4dCA9IGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoO1xuXG5cdHZhciBvaWQgPSBkZXIucmVhZE9JRCgpO1xuXHRzd2l0Y2ggKG9pZCkge1xuXHRjYXNlICcxLjIuODQwLjExMzU0OS4xLjEuMSc6XG5cdFx0ZGVyLl9vZmZzZXQgPSBuZXh0O1xuXHRcdGlmICh0eXBlID09PSAncHVibGljJylcblx0XHRcdHJldHVybiAocmVhZFBrY3M4UlNBUHVibGljKGRlcikpO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiAocmVhZFBrY3M4UlNBUHJpdmF0ZShkZXIpKTtcblx0Y2FzZSAnMS4yLjg0MC4xMDA0MC40LjEnOlxuXHRcdGlmICh0eXBlID09PSAncHVibGljJylcblx0XHRcdHJldHVybiAocmVhZFBrY3M4RFNBUHVibGljKGRlcikpO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiAocmVhZFBrY3M4RFNBUHJpdmF0ZShkZXIpKTtcblx0Y2FzZSAnMS4yLjg0MC4xMDA0NS4yLjEnOlxuXHRcdGlmICh0eXBlID09PSAncHVibGljJylcblx0XHRcdHJldHVybiAocmVhZFBrY3M4RUNEU0FQdWJsaWMoZGVyKSk7XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIChyZWFkUGtjczhFQ0RTQVByaXZhdGUoZGVyKSk7XG5cdGRlZmF1bHQ6XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignVW5rbm93biBrZXkgdHlwZSBPSUQgJyArIG9pZCkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzOFJTQVB1YmxpYyhkZXIpIHtcblx0Ly8gYml0IHN0cmluZyBzZXF1ZW5jZVxuXHRkZXIucmVhZFNlcXVlbmNlKGFzbjEuQmVyLkJpdFN0cmluZyk7XG5cdGRlci5yZWFkQnl0ZSgpO1xuXHRkZXIucmVhZFNlcXVlbmNlKCk7XG5cblx0Ly8gbW9kdWx1c1xuXHR2YXIgbiA9IHJlYWRNUEludChkZXIsICdtb2R1bHVzJyk7XG5cdHZhciBlID0gcmVhZE1QSW50KGRlciwgJ2V4cG9uZW50Jyk7XG5cblx0Ly8gbm93LCBtYWtlIHRoZSBrZXlcblx0dmFyIGtleSA9IHtcblx0XHR0eXBlOiAncnNhJyxcblx0XHRzb3VyY2U6IGRlci5vcmlnaW5hbElucHV0LFxuXHRcdHBhcnRzOiBbXG5cdFx0XHR7IG5hbWU6ICdlJywgZGF0YTogZSB9LFxuXHRcdFx0eyBuYW1lOiAnbicsIGRhdGE6IG4gfVxuXHRcdF1cblx0fTtcblxuXHRyZXR1cm4gKG5ldyBLZXkoa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzOFJTQVByaXZhdGUoZGVyKSB7XG5cdGRlci5yZWFkU2VxdWVuY2UoYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRkZXIucmVhZFNlcXVlbmNlKCk7XG5cblx0dmFyIHZlciA9IHJlYWRNUEludChkZXIsICd2ZXJzaW9uJyk7XG5cdGFzc2VydC5lcXVhbCh2ZXJbMF0sIDB4MCwgJ3Vua25vd24gUlNBIHByaXZhdGUga2V5IHZlcnNpb24nKTtcblxuXHQvLyBtb2R1bHVzIHRoZW4gcHVibGljIGV4cG9uZW50XG5cdHZhciBuID0gcmVhZE1QSW50KGRlciwgJ21vZHVsdXMnKTtcblx0dmFyIGUgPSByZWFkTVBJbnQoZGVyLCAncHVibGljIGV4cG9uZW50Jyk7XG5cdHZhciBkID0gcmVhZE1QSW50KGRlciwgJ3ByaXZhdGUgZXhwb25lbnQnKTtcblx0dmFyIHAgPSByZWFkTVBJbnQoZGVyLCAncHJpbWUxJyk7XG5cdHZhciBxID0gcmVhZE1QSW50KGRlciwgJ3ByaW1lMicpO1xuXHR2YXIgZG1vZHAgPSByZWFkTVBJbnQoZGVyLCAnZXhwb25lbnQxJyk7XG5cdHZhciBkbW9kcSA9IHJlYWRNUEludChkZXIsICdleHBvbmVudDInKTtcblx0dmFyIGlxbXAgPSByZWFkTVBJbnQoZGVyLCAnaXFtcCcpO1xuXG5cdC8vIG5vdywgbWFrZSB0aGUga2V5XG5cdHZhciBrZXkgPSB7XG5cdFx0dHlwZTogJ3JzYScsXG5cdFx0cGFydHM6IFtcblx0XHRcdHsgbmFtZTogJ24nLCBkYXRhOiBuIH0sXG5cdFx0XHR7IG5hbWU6ICdlJywgZGF0YTogZSB9LFxuXHRcdFx0eyBuYW1lOiAnZCcsIGRhdGE6IGQgfSxcblx0XHRcdHsgbmFtZTogJ2lxbXAnLCBkYXRhOiBpcW1wIH0sXG5cdFx0XHR7IG5hbWU6ICdwJywgZGF0YTogcCB9LFxuXHRcdFx0eyBuYW1lOiAncScsIGRhdGE6IHEgfSxcblx0XHRcdHsgbmFtZTogJ2Rtb2RwJywgZGF0YTogZG1vZHAgfSxcblx0XHRcdHsgbmFtZTogJ2Rtb2RxJywgZGF0YTogZG1vZHEgfVxuXHRcdF1cblx0fTtcblxuXHRyZXR1cm4gKG5ldyBQcml2YXRlS2V5KGtleSkpO1xufVxuXG5mdW5jdGlvbiByZWFkUGtjczhEU0FQdWJsaWMoZGVyKSB7XG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblxuXHR2YXIgcCA9IHJlYWRNUEludChkZXIsICdwJyk7XG5cdHZhciBxID0gcmVhZE1QSW50KGRlciwgJ3EnKTtcblx0dmFyIGcgPSByZWFkTVBJbnQoZGVyLCAnZycpO1xuXG5cdC8vIGJpdCBzdHJpbmcgc2VxdWVuY2Vcblx0ZGVyLnJlYWRTZXF1ZW5jZShhc24xLkJlci5CaXRTdHJpbmcpO1xuXHRkZXIucmVhZEJ5dGUoKTtcblxuXHR2YXIgeSA9IHJlYWRNUEludChkZXIsICd5Jyk7XG5cblx0Ly8gbm93LCBtYWtlIHRoZSBrZXlcblx0dmFyIGtleSA9IHtcblx0XHR0eXBlOiAnZHNhJyxcblx0XHRwYXJ0czogW1xuXHRcdFx0eyBuYW1lOiAncCcsIGRhdGE6IHAgfSxcblx0XHRcdHsgbmFtZTogJ3EnLCBkYXRhOiBxIH0sXG5cdFx0XHR7IG5hbWU6ICdnJywgZGF0YTogZyB9LFxuXHRcdFx0eyBuYW1lOiAneScsIGRhdGE6IHkgfVxuXHRcdF1cblx0fTtcblxuXHRyZXR1cm4gKG5ldyBLZXkoa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzOERTQVByaXZhdGUoZGVyKSB7XG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblxuXHR2YXIgcCA9IHJlYWRNUEludChkZXIsICdwJyk7XG5cdHZhciBxID0gcmVhZE1QSW50KGRlciwgJ3EnKTtcblx0dmFyIGcgPSByZWFkTVBJbnQoZGVyLCAnZycpO1xuXG5cdGRlci5yZWFkU2VxdWVuY2UoYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHR2YXIgeCA9IHJlYWRNUEludChkZXIsICd4Jyk7XG5cblx0LyogVGhlIHBrY3MjOCBmb3JtYXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgcHVibGljIGtleSAqL1xuXHR2YXIgeSA9IHV0aWxzLmNhbGN1bGF0ZURTQVB1YmxpYyhnLCBwLCB4KTtcblxuXHR2YXIga2V5ID0ge1xuXHRcdHR5cGU6ICdkc2EnLFxuXHRcdHBhcnRzOiBbXG5cdFx0XHR7IG5hbWU6ICdwJywgZGF0YTogcCB9LFxuXHRcdFx0eyBuYW1lOiAncScsIGRhdGE6IHEgfSxcblx0XHRcdHsgbmFtZTogJ2cnLCBkYXRhOiBnIH0sXG5cdFx0XHR7IG5hbWU6ICd5JywgZGF0YTogeSB9LFxuXHRcdFx0eyBuYW1lOiAneCcsIGRhdGE6IHggfVxuXHRcdF1cblx0fTtcblxuXHRyZXR1cm4gKG5ldyBQcml2YXRlS2V5KGtleSkpO1xufVxuXG5mdW5jdGlvbiByZWFkRUNEU0FDdXJ2ZShkZXIpIHtcblx0dmFyIGN1cnZlTmFtZSwgY3VydmVOYW1lcztcblx0dmFyIGosIGMsIGNkO1xuXG5cdGlmIChkZXIucGVlaygpID09PSBhc24xLkJlci5PSUQpIHtcblx0XHR2YXIgb2lkID0gZGVyLnJlYWRPSUQoKTtcblxuXHRcdGN1cnZlTmFtZXMgPSBPYmplY3Qua2V5cyhhbGdzLmN1cnZlcyk7XG5cdFx0Zm9yIChqID0gMDsgaiA8IGN1cnZlTmFtZXMubGVuZ3RoOyArK2opIHtcblx0XHRcdGMgPSBjdXJ2ZU5hbWVzW2pdO1xuXHRcdFx0Y2QgPSBhbGdzLmN1cnZlc1tjXTtcblx0XHRcdGlmIChjZC5wa2NzOG9pZCA9PT0gb2lkKSB7XG5cdFx0XHRcdGN1cnZlTmFtZSA9IGM7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHR9IGVsc2Uge1xuXHRcdC8vIEVDUGFyYW1ldGVycyBzZXF1ZW5jZVxuXHRcdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0XHR2YXIgdmVyc2lvbiA9IGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkludGVnZXIsIHRydWUpO1xuXHRcdGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJzaW9uWzBdLCAxLCAnRUNEU0Ega2V5IG5vdCB2ZXJzaW9uIDEnKTtcblxuXHRcdHZhciBjdXJ2ZSA9IHt9O1xuXG5cdFx0Ly8gRmllbGRJRCBzZXF1ZW5jZVxuXHRcdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0XHR2YXIgZmllbGRUeXBlT2lkID0gZGVyLnJlYWRPSUQoKTtcblx0XHRhc3NlcnQuc3RyaWN0RXF1YWwoZmllbGRUeXBlT2lkLCAnMS4yLjg0MC4xMDA0NS4xLjEnLFxuXHRcdCAgICAnRUNEU0Ega2V5IGlzIG5vdCBmcm9tIGEgcHJpbWUtZmllbGQnKTtcblx0XHR2YXIgcCA9IGN1cnZlLnAgPSB1dGlscy5tcE5vcm1hbGl6ZShcblx0XHQgICAgZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuSW50ZWdlciwgdHJ1ZSkpO1xuXHRcdC8qXG5cdFx0ICogcCBhbHdheXMgc3RhcnRzIHdpdGggYSAxIGJpdCwgc28gY291bnQgdGhlIHplcm9zIHRvIGdldCBpdHNcblx0XHQgKiByZWFsIHNpemUuXG5cdFx0ICovXG5cdFx0Y3VydmUuc2l6ZSA9IHAubGVuZ3RoICogOCAtIHV0aWxzLmNvdW50WmVyb3MocCk7XG5cblx0XHQvLyBDdXJ2ZSBzZXF1ZW5jZVxuXHRcdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0XHRjdXJ2ZS5hID0gdXRpbHMubXBOb3JtYWxpemUoXG5cdFx0ICAgIGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLk9jdGV0U3RyaW5nLCB0cnVlKSk7XG5cdFx0Y3VydmUuYiA9IHV0aWxzLm1wTm9ybWFsaXplKFxuXHRcdCAgICBkZXIucmVhZFN0cmluZyhhc24xLkJlci5PY3RldFN0cmluZywgdHJ1ZSkpO1xuXHRcdGlmIChkZXIucGVlaygpID09PSBhc24xLkJlci5CaXRTdHJpbmcpXG5cdFx0XHRjdXJ2ZS5zID0gZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuQml0U3RyaW5nLCB0cnVlKTtcblxuXHRcdC8vIENvbWJpbmVkIEd4IGFuZCBHeVxuXHRcdGN1cnZlLkcgPSBkZXIucmVhZFN0cmluZyhhc24xLkJlci5PY3RldFN0cmluZywgdHJ1ZSk7XG5cdFx0YXNzZXJ0LnN0cmljdEVxdWFsKGN1cnZlLkdbMF0sIDB4NCxcblx0XHQgICAgJ3VuY29tcHJlc3NlZCBHIGlzIHJlcXVpcmVkJyk7XG5cblx0XHRjdXJ2ZS5uID0gdXRpbHMubXBOb3JtYWxpemUoXG5cdFx0ICAgIGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkludGVnZXIsIHRydWUpKTtcblx0XHRjdXJ2ZS5oID0gdXRpbHMubXBOb3JtYWxpemUoXG5cdFx0ICAgIGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkludGVnZXIsIHRydWUpKTtcblx0XHRhc3NlcnQuc3RyaWN0RXF1YWwoY3VydmUuaFswXSwgMHgxLCAnYSBjb2ZhY3Rvcj0xIGN1cnZlIGlzICcgK1xuXHRcdCAgICAncmVxdWlyZWQnKTtcblxuXHRcdGN1cnZlTmFtZXMgPSBPYmplY3Qua2V5cyhhbGdzLmN1cnZlcyk7XG5cdFx0dmFyIGtzID0gT2JqZWN0LmtleXMoY3VydmUpO1xuXHRcdGZvciAoaiA9IDA7IGogPCBjdXJ2ZU5hbWVzLmxlbmd0aDsgKytqKSB7XG5cdFx0XHRjID0gY3VydmVOYW1lc1tqXTtcblx0XHRcdGNkID0gYWxncy5jdXJ2ZXNbY107XG5cdFx0XHR2YXIgZXF1YWwgPSB0cnVlO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBrcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR2YXIgayA9IGtzW2ldO1xuXHRcdFx0XHRpZiAoY2Rba10gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0aWYgKHR5cGVvZiAoY2Rba10pID09PSAnb2JqZWN0JyAmJlxuXHRcdFx0XHQgICAgY2Rba10uZXF1YWxzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZiAoIWNkW2tdLmVxdWFscyhjdXJ2ZVtrXSkpIHtcblx0XHRcdFx0XHRcdGVxdWFsID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKGNkW2tdKSkge1xuXHRcdFx0XHRcdGlmIChjZFtrXS50b1N0cmluZygnYmluYXJ5Jylcblx0XHRcdFx0XHQgICAgIT09IGN1cnZlW2tdLnRvU3RyaW5nKCdiaW5hcnknKSkge1xuXHRcdFx0XHRcdFx0ZXF1YWwgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoY2Rba10gIT09IGN1cnZlW2tdKSB7XG5cdFx0XHRcdFx0XHRlcXVhbCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZXF1YWwpIHtcblx0XHRcdFx0Y3VydmVOYW1lID0gYztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiAoY3VydmVOYW1lKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBrY3M4RUNEU0FQcml2YXRlKGRlcikge1xuXHR2YXIgY3VydmVOYW1lID0gcmVhZEVDRFNBQ3VydmUoZGVyKTtcblx0YXNzZXJ0LnN0cmluZyhjdXJ2ZU5hbWUsICdhIGtub3duIGVsbGlwdGljIGN1cnZlJyk7XG5cblx0ZGVyLnJlYWRTZXF1ZW5jZShhc24xLkJlci5PY3RldFN0cmluZyk7XG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblxuXHR2YXIgdmVyc2lvbiA9IHJlYWRNUEludChkZXIsICd2ZXJzaW9uJyk7XG5cdGFzc2VydC5lcXVhbCh2ZXJzaW9uWzBdLCAxLCAndW5rbm93biB2ZXJzaW9uIG9mIEVDRFNBIGtleScpO1xuXG5cdHZhciBkID0gZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuT2N0ZXRTdHJpbmcsIHRydWUpO1xuXHRkZXIucmVhZFNlcXVlbmNlKDB4YTEpO1xuXG5cdHZhciBRID0gZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuQml0U3RyaW5nLCB0cnVlKTtcblx0USA9IHV0aWxzLmVjTm9ybWFsaXplKFEpO1xuXG5cdHZhciBrZXkgPSB7XG5cdFx0dHlwZTogJ2VjZHNhJyxcblx0XHRwYXJ0czogW1xuXHRcdFx0eyBuYW1lOiAnY3VydmUnLCBkYXRhOiBuZXcgQnVmZmVyKGN1cnZlTmFtZSkgfSxcblx0XHRcdHsgbmFtZTogJ1EnLCBkYXRhOiBRIH0sXG5cdFx0XHR7IG5hbWU6ICdkJywgZGF0YTogZCB9XG5cdFx0XVxuXHR9O1xuXG5cdHJldHVybiAobmV3IFByaXZhdGVLZXkoa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzOEVDRFNBUHVibGljKGRlcikge1xuXHR2YXIgY3VydmVOYW1lID0gcmVhZEVDRFNBQ3VydmUoZGVyKTtcblx0YXNzZXJ0LnN0cmluZyhjdXJ2ZU5hbWUsICdhIGtub3duIGVsbGlwdGljIGN1cnZlJyk7XG5cblx0dmFyIFEgPSBkZXIucmVhZFN0cmluZyhhc24xLkJlci5CaXRTdHJpbmcsIHRydWUpO1xuXHRRID0gdXRpbHMuZWNOb3JtYWxpemUoUSk7XG5cblx0dmFyIGtleSA9IHtcblx0XHR0eXBlOiAnZWNkc2EnLFxuXHRcdHBhcnRzOiBbXG5cdFx0XHR7IG5hbWU6ICdjdXJ2ZScsIGRhdGE6IG5ldyBCdWZmZXIoY3VydmVOYW1lKSB9LFxuXHRcdFx0eyBuYW1lOiAnUScsIGRhdGE6IFEgfVxuXHRcdF1cblx0fTtcblxuXHRyZXR1cm4gKG5ldyBLZXkoa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGtjczgoZGVyLCBrZXkpIHtcblx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblxuXHRpZiAoUHJpdmF0ZUtleS5pc1ByaXZhdGVLZXkoa2V5KSkge1xuXHRcdHZhciBzaWxseUludCA9IG5ldyBCdWZmZXIoMSk7XG5cdFx0c2lsbHlJbnRbMF0gPSAweDA7XG5cdFx0ZGVyLndyaXRlQnVmZmVyKHNpbGx5SW50LCBhc24xLkJlci5JbnRlZ2VyKTtcblx0fVxuXG5cdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cdHN3aXRjaCAoa2V5LnR5cGUpIHtcblx0Y2FzZSAncnNhJzpcblx0XHRkZXIud3JpdGVPSUQoJzEuMi44NDAuMTEzNTQ5LjEuMS4xJyk7XG5cdFx0aWYgKFByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSkpXG5cdFx0XHR3cml0ZVBrY3M4UlNBUHJpdmF0ZShrZXksIGRlcik7XG5cdFx0ZWxzZVxuXHRcdFx0d3JpdGVQa2NzOFJTQVB1YmxpYyhrZXksIGRlcik7XG5cdFx0YnJlYWs7XG5cdGNhc2UgJ2RzYSc6XG5cdFx0ZGVyLndyaXRlT0lEKCcxLjIuODQwLjEwMDQwLjQuMScpO1xuXHRcdGlmIChQcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXkpKVxuXHRcdFx0d3JpdGVQa2NzOERTQVByaXZhdGUoa2V5LCBkZXIpO1xuXHRcdGVsc2Vcblx0XHRcdHdyaXRlUGtjczhEU0FQdWJsaWMoa2V5LCBkZXIpO1xuXHRcdGJyZWFrO1xuXHRjYXNlICdlY2RzYSc6XG5cdFx0ZGVyLndyaXRlT0lEKCcxLjIuODQwLjEwMDQ1LjIuMScpO1xuXHRcdGlmIChQcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXkpKVxuXHRcdFx0d3JpdGVQa2NzOEVDRFNBUHJpdmF0ZShrZXksIGRlcik7XG5cdFx0ZWxzZVxuXHRcdFx0d3JpdGVQa2NzOEVDRFNBUHVibGljKGtleSwgZGVyKTtcblx0XHRicmVhaztcblx0ZGVmYXVsdDpcblx0XHR0aHJvdyAobmV3IEVycm9yKCdVbnN1cHBvcnRlZCBrZXkgdHlwZTogJyArIGtleS50eXBlKSk7XG5cdH1cblxuXHRkZXIuZW5kU2VxdWVuY2UoKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQa2NzOFJTQVByaXZhdGUoa2V5LCBkZXIpIHtcblx0ZGVyLndyaXRlTnVsbCgpO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblxuXHRkZXIuc3RhcnRTZXF1ZW5jZShhc24xLkJlci5PY3RldFN0cmluZyk7XG5cdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cblx0dmFyIHZlcnNpb24gPSBuZXcgQnVmZmVyKDEpO1xuXHR2ZXJzaW9uWzBdID0gMDtcblx0ZGVyLndyaXRlQnVmZmVyKHZlcnNpb24sIGFzbjEuQmVyLkludGVnZXIpO1xuXG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5uLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuZS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmQuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5wLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQucS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0aWYgKCFrZXkucGFydC5kbW9kcCB8fCAha2V5LnBhcnQuZG1vZHEpXG5cdFx0dXRpbHMuYWRkUlNBTWlzc2luZyhrZXkpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuZG1vZHAuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5kbW9kcS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmlxbXAuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVBrY3M4UlNBUHVibGljKGtleSwgZGVyKSB7XG5cdGRlci53cml0ZU51bGwoKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoYXNuMS5CZXIuQml0U3RyaW5nKTtcblx0ZGVyLndyaXRlQnl0ZSgweDAwKTtcblxuXHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQubi5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmUuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVBrY3M4RFNBUHJpdmF0ZShrZXksIGRlcikge1xuXHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQucC5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LnEuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5nLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblxuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblxuXHRkZXIuc3RhcnRTZXF1ZW5jZShhc24xLkJlci5PY3RldFN0cmluZyk7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC54LmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQa2NzOERTQVB1YmxpYyhrZXksIGRlcikge1xuXHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQucC5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LnEuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5nLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoYXNuMS5CZXIuQml0U3RyaW5nKTtcblx0ZGVyLndyaXRlQnl0ZSgweDAwKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LnkuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xufVxuXG5mdW5jdGlvbiB3cml0ZUVDRFNBQ3VydmUoa2V5LCBkZXIpIHtcblx0dmFyIGN1cnZlID0gYWxncy5jdXJ2ZXNba2V5LmN1cnZlXTtcblx0aWYgKGN1cnZlLnBrY3M4b2lkKSB7XG5cdFx0LyogVGhpcyBvbmUgaGFzIGEgbmFtZSBpbiBwa2NzIzgsIHNvIGp1c3Qgd3JpdGUgdGhlIG9pZCAqL1xuXHRcdGRlci53cml0ZU9JRChjdXJ2ZS5wa2NzOG9pZCk7XG5cblx0fSBlbHNlIHtcblx0XHQvLyBFQ1BhcmFtZXRlcnMgc2VxdWVuY2Vcblx0XHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXG5cdFx0dmFyIHZlcnNpb24gPSBuZXcgQnVmZmVyKDEpO1xuXHRcdHZlcnNpb24ud3JpdGVVSW50OCgxLCAwKTtcblx0XHRkZXIud3JpdGVCdWZmZXIodmVyc2lvbiwgYXNuMS5CZXIuSW50ZWdlcik7XG5cblx0XHQvLyBGaWVsZElEIHNlcXVlbmNlXG5cdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblx0XHRkZXIud3JpdGVPSUQoJzEuMi44NDAuMTAwNDUuMS4xJyk7IC8vIHByaW1lLWZpZWxkXG5cdFx0ZGVyLndyaXRlQnVmZmVyKGN1cnZlLnAsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRcdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdFx0Ly8gQ3VydmUgc2VxdWVuY2Vcblx0XHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRcdHZhciBhID0gY3VydmUucDtcblx0XHRpZiAoYVswXSA9PT0gMHgwKVxuXHRcdFx0YSA9IGEuc2xpY2UoMSk7XG5cdFx0ZGVyLndyaXRlQnVmZmVyKGEsIGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblx0XHRkZXIud3JpdGVCdWZmZXIoY3VydmUuYiwgYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRcdGRlci53cml0ZUJ1ZmZlcihjdXJ2ZS5zLCBhc24xLkJlci5CaXRTdHJpbmcpO1xuXHRcdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdFx0ZGVyLndyaXRlQnVmZmVyKGN1cnZlLkcsIGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblx0XHRkZXIud3JpdGVCdWZmZXIoY3VydmUubiwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdFx0dmFyIGggPSBjdXJ2ZS5oO1xuXHRcdGlmICghaCkge1xuXHRcdFx0aCA9IG5ldyBCdWZmZXIoMSk7XG5cdFx0XHRoWzBdID0gMTtcblx0XHR9XG5cdFx0ZGVyLndyaXRlQnVmZmVyKGgsIGFzbjEuQmVyLkludGVnZXIpO1xuXG5cdFx0Ly8gRUNQYXJhbWV0ZXJzXG5cdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gd3JpdGVQa2NzOEVDRFNBUHVibGljKGtleSwgZGVyKSB7XG5cdHdyaXRlRUNEU0FDdXJ2ZShrZXksIGRlcik7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdHZhciBRID0gdXRpbHMuZWNOb3JtYWxpemUoa2V5LnBhcnQuUS5kYXRhLCB0cnVlKTtcblx0ZGVyLndyaXRlQnVmZmVyKFEsIGFzbjEuQmVyLkJpdFN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGtjczhFQ0RTQVByaXZhdGUoa2V5LCBkZXIpIHtcblx0d3JpdGVFQ0RTQUN1cnZlKGtleSwgZGVyKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXG5cdHZhciB2ZXJzaW9uID0gbmV3IEJ1ZmZlcigxKTtcblx0dmVyc2lvblswXSA9IDE7XG5cdGRlci53cml0ZUJ1ZmZlcih2ZXJzaW9uLCBhc24xLkJlci5JbnRlZ2VyKTtcblxuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuZC5kYXRhLCBhc24xLkJlci5PY3RldFN0cmluZyk7XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoMHhhMSk7XG5cdHZhciBRID0gdXRpbHMuZWNOb3JtYWxpemUoa2V5LnBhcnQuUS5kYXRhLCB0cnVlKTtcblx0ZGVyLndyaXRlQnVmZmVyKFEsIGFzbjEuQmVyLkJpdFN0cmluZyk7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0cmVhZDogcmVhZC5iaW5kKHVuZGVmaW5lZCwgZmFsc2UsIHVuZGVmaW5lZCksXG5cdHJlYWRUeXBlOiByZWFkLmJpbmQodW5kZWZpbmVkLCBmYWxzZSksXG5cdHdyaXRlOiB3cml0ZSxcblx0Lyogc2VtaS1wcml2YXRlIGFwaSwgdXNlZCBieSBzc2hway1hZ2VudCAqL1xuXHRyZWFkUGFydGlhbDogcmVhZC5iaW5kKHVuZGVmaW5lZCwgdHJ1ZSksXG5cblx0Lyogc2hhcmVkIHdpdGggc3NoIGZvcm1hdCAqL1xuXHRyZWFkSW50ZXJuYWw6IHJlYWQsXG5cdGtleVR5cGVUb0FsZzoga2V5VHlwZVRvQWxnLFxuXHRhbGdUb0tleVR5cGU6IGFsZ1RvS2V5VHlwZVxufTtcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgYWxncyA9IHJlcXVpcmUoJy4uL2FsZ3MnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgS2V5ID0gcmVxdWlyZSgnLi4va2V5Jyk7XG52YXIgUHJpdmF0ZUtleSA9IHJlcXVpcmUoJy4uL3ByaXZhdGUta2V5Jyk7XG52YXIgU1NIQnVmZmVyID0gcmVxdWlyZSgnLi4vc3NoLWJ1ZmZlcicpO1xuXG5mdW5jdGlvbiBhbGdUb0tleVR5cGUoYWxnKSB7XG5cdGFzc2VydC5zdHJpbmcoYWxnKTtcblx0aWYgKGFsZyA9PT0gJ3NzaC1kc3MnKVxuXHRcdHJldHVybiAoJ2RzYScpO1xuXHRlbHNlIGlmIChhbGcgPT09ICdzc2gtcnNhJylcblx0XHRyZXR1cm4gKCdyc2EnKTtcblx0ZWxzZSBpZiAoYWxnID09PSAnc3NoLWVkMjU1MTknKVxuXHRcdHJldHVybiAoJ2VkMjU1MTknKTtcblx0ZWxzZSBpZiAoYWxnID09PSAnc3NoLWN1cnZlMjU1MTknKVxuXHRcdHJldHVybiAoJ2N1cnZlMjU1MTknKTtcblx0ZWxzZSBpZiAoYWxnLm1hdGNoKC9eZWNkc2Etc2hhMi0vKSlcblx0XHRyZXR1cm4gKCdlY2RzYScpO1xuXHRlbHNlXG5cdFx0dGhyb3cgKG5ldyBFcnJvcignVW5rbm93biBhbGdvcml0aG0gJyArIGFsZykpO1xufVxuXG5mdW5jdGlvbiBrZXlUeXBlVG9BbGcoa2V5KSB7XG5cdGFzc2VydC5vYmplY3Qoa2V5KTtcblx0aWYgKGtleS50eXBlID09PSAnZHNhJylcblx0XHRyZXR1cm4gKCdzc2gtZHNzJyk7XG5cdGVsc2UgaWYgKGtleS50eXBlID09PSAncnNhJylcblx0XHRyZXR1cm4gKCdzc2gtcnNhJyk7XG5cdGVsc2UgaWYgKGtleS50eXBlID09PSAnZWQyNTUxOScpXG5cdFx0cmV0dXJuICgnc3NoLWVkMjU1MTknKTtcblx0ZWxzZSBpZiAoa2V5LnR5cGUgPT09ICdjdXJ2ZTI1NTE5Jylcblx0XHRyZXR1cm4gKCdzc2gtY3VydmUyNTUxOScpO1xuXHRlbHNlIGlmIChrZXkudHlwZSA9PT0gJ2VjZHNhJylcblx0XHRyZXR1cm4gKCdlY2RzYS1zaGEyLScgKyBrZXkucGFydC5jdXJ2ZS5kYXRhLnRvU3RyaW5nKCkpO1xuXHRlbHNlXG5cdFx0dGhyb3cgKG5ldyBFcnJvcignVW5rbm93biBrZXkgdHlwZSAnICsga2V5LnR5cGUpKTtcbn1cblxuZnVuY3Rpb24gcmVhZChwYXJ0aWFsLCB0eXBlLCBidWYsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiAoYnVmKSA9PT0gJ3N0cmluZycpXG5cdFx0YnVmID0gbmV3IEJ1ZmZlcihidWYpO1xuXHRhc3NlcnQuYnVmZmVyKGJ1ZiwgJ2J1ZicpO1xuXG5cdHZhciBrZXkgPSB7fTtcblxuXHR2YXIgcGFydHMgPSBrZXkucGFydHMgPSBbXTtcblx0dmFyIHNzaGJ1ZiA9IG5ldyBTU0hCdWZmZXIoe2J1ZmZlcjogYnVmfSk7XG5cblx0dmFyIGFsZyA9IHNzaGJ1Zi5yZWFkU3RyaW5nKCk7XG5cdGFzc2VydC5vayghc3NoYnVmLmF0RW5kKCksICdrZXkgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBwYXJ0Jyk7XG5cblx0a2V5LnR5cGUgPSBhbGdUb0tleVR5cGUoYWxnKTtcblxuXHR2YXIgcGFydENvdW50ID0gYWxncy5pbmZvW2tleS50eXBlXS5wYXJ0cy5sZW5ndGg7XG5cdGlmICh0eXBlICYmIHR5cGUgPT09ICdwcml2YXRlJylcblx0XHRwYXJ0Q291bnQgPSBhbGdzLnByaXZJbmZvW2tleS50eXBlXS5wYXJ0cy5sZW5ndGg7XG5cblx0d2hpbGUgKCFzc2hidWYuYXRFbmQoKSAmJiBwYXJ0cy5sZW5ndGggPCBwYXJ0Q291bnQpXG5cdFx0cGFydHMucHVzaChzc2hidWYucmVhZFBhcnQoKSk7XG5cdHdoaWxlICghcGFydGlhbCAmJiAhc3NoYnVmLmF0RW5kKCkpXG5cdFx0cGFydHMucHVzaChzc2hidWYucmVhZFBhcnQoKSk7XG5cblx0YXNzZXJ0Lm9rKHBhcnRzLmxlbmd0aCA+PSAxLFxuXHQgICAgJ2tleSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHBhcnQnKTtcblx0YXNzZXJ0Lm9rKHBhcnRpYWwgfHwgc3NoYnVmLmF0RW5kKCksXG5cdCAgICAnbGVmdG92ZXIgYnl0ZXMgYXQgZW5kIG9mIGtleScpO1xuXG5cdHZhciBDb25zdHJ1Y3RvciA9IEtleTtcblx0dmFyIGFsZ0luZm8gPSBhbGdzLmluZm9ba2V5LnR5cGVdO1xuXHRpZiAodHlwZSA9PT0gJ3ByaXZhdGUnIHx8IGFsZ0luZm8ucGFydHMubGVuZ3RoICE9PSBwYXJ0cy5sZW5ndGgpIHtcblx0XHRhbGdJbmZvID0gYWxncy5wcml2SW5mb1trZXkudHlwZV07XG5cdFx0Q29uc3RydWN0b3IgPSBQcml2YXRlS2V5O1xuXHR9XG5cdGFzc2VydC5zdHJpY3RFcXVhbChhbGdJbmZvLnBhcnRzLmxlbmd0aCwgcGFydHMubGVuZ3RoKTtcblxuXHRpZiAoa2V5LnR5cGUgPT09ICdlY2RzYScpIHtcblx0XHR2YXIgcmVzID0gL15lY2RzYS1zaGEyLSguKykkLy5leGVjKGFsZyk7XG5cdFx0YXNzZXJ0Lm9rKHJlcyAhPT0gbnVsbCk7XG5cdFx0YXNzZXJ0LnN0cmljdEVxdWFsKHJlc1sxXSwgcGFydHNbMF0uZGF0YS50b1N0cmluZygpKTtcblx0fVxuXG5cdHZhciBub3JtYWxpemVkID0gdHJ1ZTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhbGdJbmZvLnBhcnRzLmxlbmd0aDsgKytpKSB7XG5cdFx0cGFydHNbaV0ubmFtZSA9IGFsZ0luZm8ucGFydHNbaV07XG5cdFx0aWYgKHBhcnRzW2ldLm5hbWUgIT09ICdjdXJ2ZScgJiZcblx0XHQgICAgYWxnSW5mby5ub3JtYWxpemUgIT09IGZhbHNlKSB7XG5cdFx0XHR2YXIgcCA9IHBhcnRzW2ldO1xuXHRcdFx0dmFyIG5kID0gdXRpbHMubXBOb3JtYWxpemUocC5kYXRhKTtcblx0XHRcdGlmIChuZCAhPT0gcC5kYXRhKSB7XG5cdFx0XHRcdHAuZGF0YSA9IG5kO1xuXHRcdFx0XHRub3JtYWxpemVkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG5vcm1hbGl6ZWQpXG5cdFx0a2V5Ll9yZmM0MjUzQ2FjaGUgPSBzc2hidWYudG9CdWZmZXIoKTtcblxuXHRpZiAocGFydGlhbCAmJiB0eXBlb2YgKHBhcnRpYWwpID09PSAnb2JqZWN0Jykge1xuXHRcdHBhcnRpYWwucmVtYWluZGVyID0gc3NoYnVmLnJlbWFpbmRlcigpO1xuXHRcdHBhcnRpYWwuY29uc3VtZWQgPSBzc2hidWYuX29mZnNldDtcblx0fVxuXG5cdHJldHVybiAobmV3IENvbnN0cnVjdG9yKGtleSkpO1xufVxuXG5mdW5jdGlvbiB3cml0ZShrZXksIG9wdGlvbnMpIHtcblx0YXNzZXJ0Lm9iamVjdChrZXkpO1xuXG5cdHZhciBhbGcgPSBrZXlUeXBlVG9BbGcoa2V5KTtcblx0dmFyIGk7XG5cblx0dmFyIGFsZ0luZm8gPSBhbGdzLmluZm9ba2V5LnR5cGVdO1xuXHRpZiAoUHJpdmF0ZUtleS5pc1ByaXZhdGVLZXkoa2V5KSlcblx0XHRhbGdJbmZvID0gYWxncy5wcml2SW5mb1trZXkudHlwZV07XG5cdHZhciBwYXJ0cyA9IGFsZ0luZm8ucGFydHM7XG5cblx0dmFyIGJ1ZiA9IG5ldyBTU0hCdWZmZXIoe30pO1xuXG5cdGJ1Zi53cml0ZVN0cmluZyhhbGcpO1xuXG5cdGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuXHRcdHZhciBkYXRhID0ga2V5LnBhcnRbcGFydHNbaV1dLmRhdGE7XG5cdFx0aWYgKGFsZ0luZm8ubm9ybWFsaXplICE9PSBmYWxzZSlcblx0XHRcdGRhdGEgPSB1dGlscy5tcE5vcm1hbGl6ZShkYXRhKTtcblx0XHRidWYud3JpdGVCdWZmZXIoZGF0YSk7XG5cdH1cblxuXHRyZXR1cm4gKGJ1Zi50b0J1ZmZlcigpKTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0cmVhZDogcmVhZCxcblx0cmVhZFNTSFByaXZhdGU6IHJlYWRTU0hQcml2YXRlLFxuXHR3cml0ZTogd3JpdGVcbn07XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIGFzbjEgPSByZXF1aXJlKCdhc24xJyk7XG52YXIgYWxncyA9IHJlcXVpcmUoJy4uL2FsZ3MnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbnZhciBLZXkgPSByZXF1aXJlKCcuLi9rZXknKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi4vcHJpdmF0ZS1rZXknKTtcbnZhciBwZW0gPSByZXF1aXJlKCcuL3BlbScpO1xudmFyIHJmYzQyNTMgPSByZXF1aXJlKCcuL3JmYzQyNTMnKTtcbnZhciBTU0hCdWZmZXIgPSByZXF1aXJlKCcuLi9zc2gtYnVmZmVyJyk7XG52YXIgZXJyb3JzID0gcmVxdWlyZSgnLi4vZXJyb3JzJyk7XG5cbnZhciBiY3J5cHQ7XG5cbmZ1bmN0aW9uIHJlYWQoYnVmLCBvcHRpb25zKSB7XG5cdHJldHVybiAocGVtLnJlYWQoYnVmLCBvcHRpb25zKSk7XG59XG5cbnZhciBNQUdJQyA9ICdvcGVuc3NoLWtleS12MSc7XG5cbmZ1bmN0aW9uIHJlYWRTU0hQcml2YXRlKHR5cGUsIGJ1Ziwgb3B0aW9ucykge1xuXHRidWYgPSBuZXcgU1NIQnVmZmVyKHtidWZmZXI6IGJ1Zn0pO1xuXG5cdHZhciBtYWdpYyA9IGJ1Zi5yZWFkQ1N0cmluZygpO1xuXHRhc3NlcnQuc3RyaWN0RXF1YWwobWFnaWMsIE1BR0lDLCAnYmFkIG1hZ2ljIHN0cmluZycpO1xuXG5cdHZhciBjaXBoZXIgPSBidWYucmVhZFN0cmluZygpO1xuXHR2YXIga2RmID0gYnVmLnJlYWRTdHJpbmcoKTtcblx0dmFyIGtkZk9wdHMgPSBidWYucmVhZEJ1ZmZlcigpO1xuXG5cdHZhciBua2V5cyA9IGJ1Zi5yZWFkSW50KCk7XG5cdGlmIChua2V5cyAhPT0gMSkge1xuXHRcdHRocm93IChuZXcgRXJyb3IoJ09wZW5TU0gtZm9ybWF0IGtleSBmaWxlIGNvbnRhaW5zICcgK1xuXHRcdCAgICAnbXVsdGlwbGUga2V5czogdGhpcyBpcyB1bnN1cHBvcnRlZC4nKSk7XG5cdH1cblxuXHR2YXIgcHViS2V5ID0gYnVmLnJlYWRCdWZmZXIoKTtcblxuXHRpZiAodHlwZSA9PT0gJ3B1YmxpYycpIHtcblx0XHRhc3NlcnQub2soYnVmLmF0RW5kKCksICdleGNlc3MgYnl0ZXMgbGVmdCBhZnRlciBrZXknKTtcblx0XHRyZXR1cm4gKHJmYzQyNTMucmVhZChwdWJLZXkpKTtcblx0fVxuXG5cdHZhciBwcml2S2V5QmxvYiA9IGJ1Zi5yZWFkQnVmZmVyKCk7XG5cdGFzc2VydC5vayhidWYuYXRFbmQoKSwgJ2V4Y2VzcyBieXRlcyBsZWZ0IGFmdGVyIGtleScpO1xuXG5cdHZhciBrZGZPcHRzQnVmID0gbmV3IFNTSEJ1ZmZlcih7IGJ1ZmZlcjoga2RmT3B0cyB9KTtcblx0c3dpdGNoIChrZGYpIHtcblx0Y2FzZSAnbm9uZSc6XG5cdFx0aWYgKGNpcGhlciAhPT0gJ25vbmUnKSB7XG5cdFx0XHR0aHJvdyAobmV3IEVycm9yKCdPcGVuU1NILWZvcm1hdCBrZXkgdXNlcyBLREYgXCJub25lXCIgJyArXG5cdFx0XHQgICAgICdidXQgc3BlY2lmaWVzIGEgY2lwaGVyIG90aGVyIHRoYW4gXCJub25lXCInKSk7XG5cdFx0fVxuXHRcdGJyZWFrO1xuXHRjYXNlICdiY3J5cHQnOlxuXHRcdHZhciBzYWx0ID0ga2RmT3B0c0J1Zi5yZWFkQnVmZmVyKCk7XG5cdFx0dmFyIHJvdW5kcyA9IGtkZk9wdHNCdWYucmVhZEludCgpO1xuXHRcdHZhciBjaW5mID0gdXRpbHMub3BlbnNzaENpcGhlckluZm8oY2lwaGVyKTtcblx0XHRpZiAoYmNyeXB0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGJjcnlwdCA9IHJlcXVpcmUoJ2JjcnlwdC1wYmtkZicpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgKG9wdGlvbnMucGFzc3BocmFzZSkgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRvcHRpb25zLnBhc3NwaHJhc2UgPSBuZXcgQnVmZmVyKG9wdGlvbnMucGFzc3BocmFzZSxcblx0XHRcdCAgICAndXRmLTgnKTtcblx0XHR9XG5cdFx0aWYgKCFCdWZmZXIuaXNCdWZmZXIob3B0aW9ucy5wYXNzcGhyYXNlKSkge1xuXHRcdFx0dGhyb3cgKG5ldyBlcnJvcnMuS2V5RW5jcnlwdGVkRXJyb3IoXG5cdFx0XHQgICAgb3B0aW9ucy5maWxlbmFtZSwgJ09wZW5TU0gnKSk7XG5cdFx0fVxuXG5cdFx0dmFyIHBhc3MgPSBuZXcgVWludDhBcnJheShvcHRpb25zLnBhc3NwaHJhc2UpO1xuXHRcdHZhciBzYWx0aSA9IG5ldyBVaW50OEFycmF5KHNhbHQpO1xuXHRcdC8qIFVzZSB0aGUgcGJrZGYgdG8gZGVyaXZlIGJvdGggdGhlIGtleSBhbmQgdGhlIElWLiAqL1xuXHRcdHZhciBvdXQgPSBuZXcgVWludDhBcnJheShjaW5mLmtleVNpemUgKyBjaW5mLmJsb2NrU2l6ZSk7XG5cdFx0dmFyIHJlcyA9IGJjcnlwdC5wYmtkZihwYXNzLCBwYXNzLmxlbmd0aCwgc2FsdGksIHNhbHRpLmxlbmd0aCxcblx0XHQgICAgb3V0LCBvdXQubGVuZ3RoLCByb3VuZHMpO1xuXHRcdGlmIChyZXMgIT09IDApIHtcblx0XHRcdHRocm93IChuZXcgRXJyb3IoJ2JjcnlwdF9wYmtkZiBmdW5jdGlvbiByZXR1cm5lZCAnICtcblx0XHRcdCAgICAnZmFpbHVyZSwgcGFyYW1ldGVycyBpbnZhbGlkJykpO1xuXHRcdH1cblx0XHRvdXQgPSBuZXcgQnVmZmVyKG91dCk7XG5cdFx0dmFyIGNrZXkgPSBvdXQuc2xpY2UoMCwgY2luZi5rZXlTaXplKTtcblx0XHR2YXIgaXYgPSBvdXQuc2xpY2UoY2luZi5rZXlTaXplLCBjaW5mLmtleVNpemUgKyBjaW5mLmJsb2NrU2l6ZSk7XG5cdFx0dmFyIGNpcGhlclN0cmVhbSA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGNpbmYub3BlbnNzbE5hbWUsXG5cdFx0ICAgIGNrZXksIGl2KTtcblx0XHRjaXBoZXJTdHJlYW0uc2V0QXV0b1BhZGRpbmcoZmFsc2UpO1xuXHRcdHZhciBjaHVuaywgY2h1bmtzID0gW107XG5cdFx0Y2lwaGVyU3RyZWFtLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdGlmIChlLnRvU3RyaW5nKCkuaW5kZXhPZignYmFkIGRlY3J5cHQnKSAhPT0gLTEpIHtcblx0XHRcdFx0dGhyb3cgKG5ldyBFcnJvcignSW5jb3JyZWN0IHBhc3NwaHJhc2UgJyArXG5cdFx0XHRcdCAgICAnc3VwcGxpZWQsIGNvdWxkIG5vdCBkZWNyeXB0IGtleScpKTtcblx0XHRcdH1cblx0XHRcdHRocm93IChlKTtcblx0XHR9KTtcblx0XHRjaXBoZXJTdHJlYW0ud3JpdGUocHJpdktleUJsb2IpO1xuXHRcdGNpcGhlclN0cmVhbS5lbmQoKTtcblx0XHR3aGlsZSAoKGNodW5rID0gY2lwaGVyU3RyZWFtLnJlYWQoKSkgIT09IG51bGwpXG5cdFx0XHRjaHVua3MucHVzaChjaHVuayk7XG5cdFx0cHJpdktleUJsb2IgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG5cdFx0YnJlYWs7XG5cdGRlZmF1bHQ6XG5cdFx0dGhyb3cgKG5ldyBFcnJvcihcblx0XHQgICAgJ09wZW5TU0gtZm9ybWF0IGtleSB1c2VzIHVua25vd24gS0RGIFwiJyArIGtkZiArICdcIicpKTtcblx0fVxuXG5cdGJ1ZiA9IG5ldyBTU0hCdWZmZXIoe2J1ZmZlcjogcHJpdktleUJsb2J9KTtcblxuXHR2YXIgY2hlY2tJbnQxID0gYnVmLnJlYWRJbnQoKTtcblx0dmFyIGNoZWNrSW50MiA9IGJ1Zi5yZWFkSW50KCk7XG5cdGlmIChjaGVja0ludDEgIT09IGNoZWNrSW50Mikge1xuXHRcdHRocm93IChuZXcgRXJyb3IoJ0luY29ycmVjdCBwYXNzcGhyYXNlIHN1cHBsaWVkLCBjb3VsZCBub3QgJyArXG5cdFx0ICAgICdkZWNyeXB0IGtleScpKTtcblx0fVxuXG5cdHZhciByZXQgPSB7fTtcblx0dmFyIGtleSA9IHJmYzQyNTMucmVhZEludGVybmFsKHJldCwgJ3ByaXZhdGUnLCBidWYucmVtYWluZGVyKCkpO1xuXG5cdGJ1Zi5za2lwKHJldC5jb25zdW1lZCk7XG5cblx0dmFyIGNvbW1lbnQgPSBidWYucmVhZFN0cmluZygpO1xuXHRrZXkuY29tbWVudCA9IGNvbW1lbnQ7XG5cblx0cmV0dXJuIChrZXkpO1xufVxuXG5mdW5jdGlvbiB3cml0ZShrZXksIG9wdGlvbnMpIHtcblx0dmFyIHB1YktleTtcblx0aWYgKFByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSkpXG5cdFx0cHViS2V5ID0ga2V5LnRvUHVibGljKCk7XG5cdGVsc2Vcblx0XHRwdWJLZXkgPSBrZXk7XG5cblx0dmFyIGNpcGhlciA9ICdub25lJztcblx0dmFyIGtkZiA9ICdub25lJztcblx0dmFyIGtkZm9wdHMgPSBuZXcgQnVmZmVyKDApO1xuXHR2YXIgY2luZiA9IHsgYmxvY2tTaXplOiA4IH07XG5cdHZhciBwYXNzcGhyYXNlO1xuXHRpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFzc3BocmFzZSA9IG9wdGlvbnMucGFzc3BocmFzZTtcblx0XHRpZiAodHlwZW9mIChwYXNzcGhyYXNlKSA9PT0gJ3N0cmluZycpXG5cdFx0XHRwYXNzcGhyYXNlID0gbmV3IEJ1ZmZlcihwYXNzcGhyYXNlLCAndXRmLTgnKTtcblx0XHRpZiAocGFzc3BocmFzZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRhc3NlcnQuYnVmZmVyKHBhc3NwaHJhc2UsICdvcHRpb25zLnBhc3NwaHJhc2UnKTtcblx0XHRcdGFzc2VydC5vcHRpb25hbFN0cmluZyhvcHRpb25zLmNpcGhlciwgJ29wdGlvbnMuY2lwaGVyJyk7XG5cdFx0XHRjaXBoZXIgPSBvcHRpb25zLmNpcGhlcjtcblx0XHRcdGlmIChjaXBoZXIgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y2lwaGVyID0gJ2FlczEyOC1jdHInO1xuXHRcdFx0Y2luZiA9IHV0aWxzLm9wZW5zc2hDaXBoZXJJbmZvKGNpcGhlcik7XG5cdFx0XHRrZGYgPSAnYmNyeXB0Jztcblx0XHR9XG5cdH1cblxuXHR2YXIgcHJpdkJ1Zjtcblx0aWYgKFByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSkpIHtcblx0XHRwcml2QnVmID0gbmV3IFNTSEJ1ZmZlcih7fSk7XG5cdFx0dmFyIGNoZWNrSW50ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpLnJlYWRVSW50MzJCRSgwKTtcblx0XHRwcml2QnVmLndyaXRlSW50KGNoZWNrSW50KTtcblx0XHRwcml2QnVmLndyaXRlSW50KGNoZWNrSW50KTtcblx0XHRwcml2QnVmLndyaXRlKGtleS50b0J1ZmZlcigncmZjNDI1MycpKTtcblx0XHRwcml2QnVmLndyaXRlU3RyaW5nKGtleS5jb21tZW50IHx8ICcnKTtcblxuXHRcdHZhciBuID0gMTtcblx0XHR3aGlsZSAocHJpdkJ1Zi5fb2Zmc2V0ICUgY2luZi5ibG9ja1NpemUgIT09IDApXG5cdFx0XHRwcml2QnVmLndyaXRlQ2hhcihuKyspO1xuXHRcdHByaXZCdWYgPSBwcml2QnVmLnRvQnVmZmVyKCk7XG5cdH1cblxuXHRzd2l0Y2ggKGtkZikge1xuXHRjYXNlICdub25lJzpcblx0XHRicmVhaztcblx0Y2FzZSAnYmNyeXB0Jzpcblx0XHR2YXIgc2FsdCA9IGNyeXB0by5yYW5kb21CeXRlcygxNik7XG5cdFx0dmFyIHJvdW5kcyA9IDE2O1xuXHRcdHZhciBrZGZzc2ggPSBuZXcgU1NIQnVmZmVyKHt9KTtcblx0XHRrZGZzc2gud3JpdGVCdWZmZXIoc2FsdCk7XG5cdFx0a2Rmc3NoLndyaXRlSW50KHJvdW5kcyk7XG5cdFx0a2Rmb3B0cyA9IGtkZnNzaC50b0J1ZmZlcigpO1xuXG5cdFx0aWYgKGJjcnlwdCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRiY3J5cHQgPSByZXF1aXJlKCdiY3J5cHQtcGJrZGYnKTtcblx0XHR9XG5cdFx0dmFyIHBhc3MgPSBuZXcgVWludDhBcnJheShwYXNzcGhyYXNlKTtcblx0XHR2YXIgc2FsdGkgPSBuZXcgVWludDhBcnJheShzYWx0KTtcblx0XHQvKiBVc2UgdGhlIHBia2RmIHRvIGRlcml2ZSBib3RoIHRoZSBrZXkgYW5kIHRoZSBJVi4gKi9cblx0XHR2YXIgb3V0ID0gbmV3IFVpbnQ4QXJyYXkoY2luZi5rZXlTaXplICsgY2luZi5ibG9ja1NpemUpO1xuXHRcdHZhciByZXMgPSBiY3J5cHQucGJrZGYocGFzcywgcGFzcy5sZW5ndGgsIHNhbHRpLCBzYWx0aS5sZW5ndGgsXG5cdFx0ICAgIG91dCwgb3V0Lmxlbmd0aCwgcm91bmRzKTtcblx0XHRpZiAocmVzICE9PSAwKSB7XG5cdFx0XHR0aHJvdyAobmV3IEVycm9yKCdiY3J5cHRfcGJrZGYgZnVuY3Rpb24gcmV0dXJuZWQgJyArXG5cdFx0XHQgICAgJ2ZhaWx1cmUsIHBhcmFtZXRlcnMgaW52YWxpZCcpKTtcblx0XHR9XG5cdFx0b3V0ID0gbmV3IEJ1ZmZlcihvdXQpO1xuXHRcdHZhciBja2V5ID0gb3V0LnNsaWNlKDAsIGNpbmYua2V5U2l6ZSk7XG5cdFx0dmFyIGl2ID0gb3V0LnNsaWNlKGNpbmYua2V5U2l6ZSwgY2luZi5rZXlTaXplICsgY2luZi5ibG9ja1NpemUpO1xuXG5cdFx0dmFyIGNpcGhlclN0cmVhbSA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihjaW5mLm9wZW5zc2xOYW1lLFxuXHRcdCAgICBja2V5LCBpdik7XG5cdFx0Y2lwaGVyU3RyZWFtLnNldEF1dG9QYWRkaW5nKGZhbHNlKTtcblx0XHR2YXIgY2h1bmssIGNodW5rcyA9IFtdO1xuXHRcdGNpcGhlclN0cmVhbS5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHR0aHJvdyAoZSk7XG5cdFx0fSk7XG5cdFx0Y2lwaGVyU3RyZWFtLndyaXRlKHByaXZCdWYpO1xuXHRcdGNpcGhlclN0cmVhbS5lbmQoKTtcblx0XHR3aGlsZSAoKGNodW5rID0gY2lwaGVyU3RyZWFtLnJlYWQoKSkgIT09IG51bGwpXG5cdFx0XHRjaHVua3MucHVzaChjaHVuayk7XG5cdFx0cHJpdkJ1ZiA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcblx0XHRicmVhaztcblx0ZGVmYXVsdDpcblx0XHR0aHJvdyAobmV3IEVycm9yKCdVbnN1cHBvcnRlZCBrZGYgJyArIGtkZikpO1xuXHR9XG5cblx0dmFyIGJ1ZiA9IG5ldyBTU0hCdWZmZXIoe30pO1xuXG5cdGJ1Zi53cml0ZUNTdHJpbmcoTUFHSUMpO1xuXHRidWYud3JpdGVTdHJpbmcoY2lwaGVyKTtcdC8qIGNpcGhlciAqL1xuXHRidWYud3JpdGVTdHJpbmcoa2RmKTtcdFx0Lyoga2RmICovXG5cdGJ1Zi53cml0ZUJ1ZmZlcihrZGZvcHRzKTtcdC8qIGtkZm9wdGlvbnMgKi9cblxuXHRidWYud3JpdGVJbnQoMSk7XHRcdC8qIG5rZXlzICovXG5cdGJ1Zi53cml0ZUJ1ZmZlcihwdWJLZXkudG9CdWZmZXIoJ3JmYzQyNTMnKSk7XG5cblx0aWYgKHByaXZCdWYpXG5cdFx0YnVmLndyaXRlQnVmZmVyKHByaXZCdWYpO1xuXG5cdGJ1ZiA9IGJ1Zi50b0J1ZmZlcigpO1xuXG5cdHZhciBoZWFkZXI7XG5cdGlmIChQcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXkpKVxuXHRcdGhlYWRlciA9ICdPUEVOU1NIIFBSSVZBVEUgS0VZJztcblx0ZWxzZVxuXHRcdGhlYWRlciA9ICdPUEVOU1NIIFBVQkxJQyBLRVknO1xuXG5cdHZhciB0bXAgPSBidWYudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXHR2YXIgbGVuID0gdG1wLmxlbmd0aCArICh0bXAubGVuZ3RoIC8gNzApICtcblx0ICAgIDE4ICsgMTYgKyBoZWFkZXIubGVuZ3RoKjIgKyAxMDtcblx0YnVmID0gbmV3IEJ1ZmZlcihsZW4pO1xuXHR2YXIgbyA9IDA7XG5cdG8gKz0gYnVmLndyaXRlKCctLS0tLUJFR0lOICcgKyBoZWFkZXIgKyAnLS0tLS1cXG4nLCBvKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0bXAubGVuZ3RoOyApIHtcblx0XHR2YXIgbGltaXQgPSBpICsgNzA7XG5cdFx0aWYgKGxpbWl0ID4gdG1wLmxlbmd0aClcblx0XHRcdGxpbWl0ID0gdG1wLmxlbmd0aDtcblx0XHRvICs9IGJ1Zi53cml0ZSh0bXAuc2xpY2UoaSwgbGltaXQpLCBvKTtcblx0XHRidWZbbysrXSA9IDEwO1xuXHRcdGkgPSBsaW1pdDtcblx0fVxuXHRvICs9IGJ1Zi53cml0ZSgnLS0tLS1FTkQgJyArIGhlYWRlciArICctLS0tLVxcbicsIG8pO1xuXG5cdHJldHVybiAoYnVmLnNsaWNlKDAsIG8pKTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0cmVhZDogcmVhZCxcblx0d3JpdGU6IHdyaXRlXG59O1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciByZmM0MjUzID0gcmVxdWlyZSgnLi9yZmM0MjUzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIEtleSA9IHJlcXVpcmUoJy4uL2tleScpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuLi9wcml2YXRlLWtleScpO1xuXG52YXIgc3NocHJpdiA9IHJlcXVpcmUoJy4vc3NoLXByaXZhdGUnKTtcblxuLypKU1NUWUxFRCovXG52YXIgU1NIS0VZX1JFID0gL14oW2EtejAtOS1dKylbIFxcdF0rKFthLXpBLVowLTkrXFwvXStbPV0qKShbXFxuIFxcdF0rKFteXFxuXSspKT8kLztcbi8qSlNTVFlMRUQqL1xudmFyIFNTSEtFWV9SRTIgPSAvXihbYS16MC05LV0rKVsgXFx0XSsoW2EtekEtWjAtOStcXC8gXFx0XFxuXStbPV0qKSguKikkLztcblxuZnVuY3Rpb24gcmVhZChidWYsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiAoYnVmKSAhPT0gJ3N0cmluZycpIHtcblx0XHRhc3NlcnQuYnVmZmVyKGJ1ZiwgJ2J1ZicpO1xuXHRcdGJ1ZiA9IGJ1Zi50b1N0cmluZygnYXNjaWknKTtcblx0fVxuXG5cdHZhciB0cmltbWVkID0gYnVmLnRyaW0oKS5yZXBsYWNlKC9bXFxcXFxccl0vZywgJycpO1xuXHR2YXIgbSA9IHRyaW1tZWQubWF0Y2goU1NIS0VZX1JFKTtcblx0aWYgKCFtKVxuXHRcdG0gPSB0cmltbWVkLm1hdGNoKFNTSEtFWV9SRTIpO1xuXHRhc3NlcnQub2sobSwgJ2tleSBtdXN0IG1hdGNoIHJlZ2V4Jyk7XG5cblx0dmFyIHR5cGUgPSByZmM0MjUzLmFsZ1RvS2V5VHlwZShtWzFdKTtcblx0dmFyIGtidWYgPSBuZXcgQnVmZmVyKG1bMl0sICdiYXNlNjQnKTtcblxuXHQvKlxuXHQgKiBUaGlzIGlzIGEgYml0IHRyaWNreS4gSWYgd2UgbWFuYWdlZCB0byBwYXJzZSB0aGUga2V5IGFuZCBsb2NhdGUgdGhlXG5cdCAqIGtleSBjb21tZW50IHdpdGggdGhlIHJlZ2V4LCB0aGVuIGRvIGEgbm9uLXBhcnRpYWwgcmVhZCBhbmQgYXNzZXJ0XG5cdCAqIHRoYXQgd2UgaGF2ZSBjb25zdW1lZCBhbGwgYnl0ZXMuIElmIHdlIGNvdWxkbid0IGxvY2F0ZSB0aGUga2V5XG5cdCAqIGNvbW1lbnQsIHRob3VnaCwgdGhlcmUgbWF5IGJlIHdoaXRlc3BhY2Ugc2hlbmFuaWdhbnMgZ29pbmcgb24gdGhhdFxuXHQgKiBoYXZlIGNvbmpvaW5lZCB0aGUgY29tbWVudCB0byB0aGUgcmVzdCBvZiB0aGUga2V5LiBXZSBkbyBhIHBhcnRpYWxcblx0ICogcmVhZCBpbiB0aGlzIGNhc2UgdG8gdHJ5IHRvIG1ha2UgdGhlIGJlc3Qgb3V0IG9mIGEgc29ycnkgc2l0dWF0aW9uLlxuXHQgKi9cblx0dmFyIGtleTtcblx0dmFyIHJldCA9IHt9O1xuXHRpZiAobVs0XSkge1xuXHRcdHRyeSB7XG5cdFx0XHRrZXkgPSByZmM0MjUzLnJlYWQoa2J1Zik7XG5cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRtID0gdHJpbW1lZC5tYXRjaChTU0hLRVlfUkUyKTtcblx0XHRcdGFzc2VydC5vayhtLCAna2V5IG11c3QgbWF0Y2ggcmVnZXgnKTtcblx0XHRcdGtidWYgPSBuZXcgQnVmZmVyKG1bMl0sICdiYXNlNjQnKTtcblx0XHRcdGtleSA9IHJmYzQyNTMucmVhZEludGVybmFsKHJldCwgJ3B1YmxpYycsIGtidWYpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRrZXkgPSByZmM0MjUzLnJlYWRJbnRlcm5hbChyZXQsICdwdWJsaWMnLCBrYnVmKTtcblx0fVxuXG5cdGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlLCBrZXkudHlwZSk7XG5cblx0aWYgKG1bNF0gJiYgbVs0XS5sZW5ndGggPiAwKSB7XG5cdFx0a2V5LmNvbW1lbnQgPSBtWzRdO1xuXG5cdH0gZWxzZSBpZiAocmV0LmNvbnN1bWVkKSB7XG5cdFx0Lypcblx0XHQgKiBOb3cgdGhlIG1hZ2ljOiB0cnlpbmcgdG8gcmVjb3ZlciB0aGUga2V5IGNvbW1lbnQgd2hlbiBpdCdzXG5cdFx0ICogZ290dGVuIGNvbmpvaW5lZCB0byB0aGUga2V5IG9yIG90aGVyd2lzZSBzaGVuYW5pZ2FuJ2QuXG5cdFx0ICpcblx0XHQgKiBXb3JrIG91dCBob3cgbXVjaCBiYXNlNjQgd2UgdXNlZCwgdGhlbiBkcm9wIGFsbCBub24tYmFzZTY0XG5cdFx0ICogY2hhcnMgZnJvbSB0aGUgYmVnaW5uaW5nIHVwIHRvIHRoaXMgcG9pbnQgaW4gdGhlIHRoZSBzdHJpbmcuXG5cdFx0ICogVGhlbiBvZmZzZXQgaW4gdGhpcyBhbmQgdHJ5IHRvIG1ha2UgdXAgZm9yIG1pc3NpbmcgPSBjaGFycy5cblx0XHQgKi9cblx0XHR2YXIgZGF0YSA9IG1bMl0gKyBtWzNdO1xuXHRcdHZhciByZWFsT2Zmc2V0ID0gTWF0aC5jZWlsKHJldC5jb25zdW1lZCAvIDMpICogNDtcblx0XHRkYXRhID0gZGF0YS5zbGljZSgwLCByZWFsT2Zmc2V0IC0gMikuIC8qSlNTVFlMRUQqL1xuXHRcdCAgICByZXBsYWNlKC9bXmEtekEtWjAtOStcXC89XS9nLCAnJykgK1xuXHRcdCAgICBkYXRhLnNsaWNlKHJlYWxPZmZzZXQgLSAyKTtcblxuXHRcdHZhciBwYWRkaW5nID0gcmV0LmNvbnN1bWVkICUgMztcblx0XHRpZiAocGFkZGluZyA+IDAgJiZcblx0XHQgICAgZGF0YS5zbGljZShyZWFsT2Zmc2V0IC0gMSwgcmVhbE9mZnNldCkgIT09ICc9Jylcblx0XHRcdHJlYWxPZmZzZXQtLTtcblx0XHR3aGlsZSAoZGF0YS5zbGljZShyZWFsT2Zmc2V0LCByZWFsT2Zmc2V0ICsgMSkgPT09ICc9Jylcblx0XHRcdHJlYWxPZmZzZXQrKztcblxuXHRcdC8qIEZpbmFsbHksIGdyYWIgd2hhdCB3ZSB0aGluayBpcyB0aGUgY29tbWVudCAmIGNsZWFuIGl0IHVwLiAqL1xuXHRcdHZhciB0cmFpbGVyID0gZGF0YS5zbGljZShyZWFsT2Zmc2V0KTtcblx0XHR0cmFpbGVyID0gdHJhaWxlci5yZXBsYWNlKC9bXFxyXFxuXS9nLCAnICcpLlxuXHRcdCAgICByZXBsYWNlKC9eXFxzKy8sICcnKTtcblx0XHRpZiAodHJhaWxlci5tYXRjaCgvXlthLXpBLVowLTldLykpXG5cdFx0XHRrZXkuY29tbWVudCA9IHRyYWlsZXI7XG5cdH1cblxuXHRyZXR1cm4gKGtleSk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlKGtleSwgb3B0aW9ucykge1xuXHRhc3NlcnQub2JqZWN0KGtleSk7XG5cdGlmICghS2V5LmlzS2V5KGtleSkpXG5cdFx0dGhyb3cgKG5ldyBFcnJvcignTXVzdCBiZSBhIHB1YmxpYyBrZXknKSk7XG5cblx0dmFyIHBhcnRzID0gW107XG5cdHZhciBhbGcgPSByZmM0MjUzLmtleVR5cGVUb0FsZyhrZXkpO1xuXHRwYXJ0cy5wdXNoKGFsZyk7XG5cblx0dmFyIGJ1ZiA9IHJmYzQyNTMud3JpdGUoa2V5KTtcblx0cGFydHMucHVzaChidWYudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcblxuXHRpZiAoa2V5LmNvbW1lbnQpXG5cdFx0cGFydHMucHVzaChrZXkuY29tbWVudCk7XG5cblx0cmV0dXJuIChuZXcgQnVmZmVyKHBhcnRzLmpvaW4oJyAnKSkpO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTYgSm95ZW50LCBJbmMuXG5cbnZhciB4NTA5ID0gcmVxdWlyZSgnLi94NTA5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRyZWFkOiByZWFkLFxuXHR2ZXJpZnk6IHg1MDkudmVyaWZ5LFxuXHRzaWduOiB4NTA5LnNpZ24sXG5cdHdyaXRlOiB3cml0ZVxufTtcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgYXNuMSA9IHJlcXVpcmUoJ2FzbjEnKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi4vYWxncycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBLZXkgPSByZXF1aXJlKCcuLi9rZXknKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi4vcHJpdmF0ZS1rZXknKTtcbnZhciBwZW0gPSByZXF1aXJlKCcuL3BlbScpO1xudmFyIElkZW50aXR5ID0gcmVxdWlyZSgnLi4vaWRlbnRpdHknKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuLi9zaWduYXR1cmUnKTtcbnZhciBDZXJ0aWZpY2F0ZSA9IHJlcXVpcmUoJy4uL2NlcnRpZmljYXRlJyk7XG5cbmZ1bmN0aW9uIHJlYWQoYnVmLCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgKGJ1ZikgIT09ICdzdHJpbmcnKSB7XG5cdFx0YXNzZXJ0LmJ1ZmZlcihidWYsICdidWYnKTtcblx0XHRidWYgPSBidWYudG9TdHJpbmcoJ2FzY2lpJyk7XG5cdH1cblxuXHR2YXIgbGluZXMgPSBidWYudHJpbSgpLnNwbGl0KC9bXFxyXFxuXSsvZyk7XG5cblx0dmFyIG0gPSBsaW5lc1swXS5tYXRjaCgvKkpTU1RZTEVEKi9cblx0ICAgIC9bLV0rWyBdKkJFR0lOIENFUlRJRklDQVRFWyBdKlstXSsvKTtcblx0YXNzZXJ0Lm9rKG0sICdpbnZhbGlkIFBFTSBoZWFkZXInKTtcblxuXHR2YXIgbTIgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvKkpTU1RZTEVEKi9cblx0ICAgIC9bLV0rWyBdKkVORCBDRVJUSUZJQ0FURVsgXSpbLV0rLyk7XG5cdGFzc2VydC5vayhtMiwgJ2ludmFsaWQgUEVNIGZvb3RlcicpO1xuXG5cdHZhciBoZWFkZXJzID0ge307XG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0bGluZXMgPSBsaW5lcy5zbGljZSgxKTtcblx0XHRtID0gbGluZXNbMF0ubWF0Y2goLypKU1NUWUxFRCovXG5cdFx0ICAgIC9eKFtBLVphLXowLTktXSspOiAoLispJC8pO1xuXHRcdGlmICghbSlcblx0XHRcdGJyZWFrO1xuXHRcdGhlYWRlcnNbbVsxXS50b0xvd2VyQ2FzZSgpXSA9IG1bMl07XG5cdH1cblxuXHQvKiBDaG9wIG9mZiB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZXMgKi9cblx0bGluZXMgPSBsaW5lcy5zbGljZSgwLCAtMSkuam9pbignJyk7XG5cdGJ1ZiA9IG5ldyBCdWZmZXIobGluZXMsICdiYXNlNjQnKTtcblxuXHRyZXR1cm4gKHg1MDkucmVhZChidWYsIG9wdGlvbnMpKTtcbn1cblxuZnVuY3Rpb24gd3JpdGUoY2VydCwgb3B0aW9ucykge1xuXHR2YXIgZGJ1ZiA9IHg1MDkud3JpdGUoY2VydCwgb3B0aW9ucyk7XG5cblx0dmFyIGhlYWRlciA9ICdDRVJUSUZJQ0FURSc7XG5cdHZhciB0bXAgPSBkYnVmLnRvU3RyaW5nKCdiYXNlNjQnKTtcblx0dmFyIGxlbiA9IHRtcC5sZW5ndGggKyAodG1wLmxlbmd0aCAvIDY0KSArXG5cdCAgICAxOCArIDE2ICsgaGVhZGVyLmxlbmd0aCoyICsgMTA7XG5cdHZhciBidWYgPSBuZXcgQnVmZmVyKGxlbik7XG5cdHZhciBvID0gMDtcblx0byArPSBidWYud3JpdGUoJy0tLS0tQkVHSU4gJyArIGhlYWRlciArICctLS0tLVxcbicsIG8pO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRtcC5sZW5ndGg7ICkge1xuXHRcdHZhciBsaW1pdCA9IGkgKyA2NDtcblx0XHRpZiAobGltaXQgPiB0bXAubGVuZ3RoKVxuXHRcdFx0bGltaXQgPSB0bXAubGVuZ3RoO1xuXHRcdG8gKz0gYnVmLndyaXRlKHRtcC5zbGljZShpLCBsaW1pdCksIG8pO1xuXHRcdGJ1ZltvKytdID0gMTA7XG5cdFx0aSA9IGxpbWl0O1xuXHR9XG5cdG8gKz0gYnVmLndyaXRlKCctLS0tLUVORCAnICsgaGVhZGVyICsgJy0tLS0tXFxuJywgbyk7XG5cblx0cmV0dXJuIChidWYuc2xpY2UoMCwgbykpO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTcgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRyZWFkOiByZWFkLFxuXHR2ZXJpZnk6IHZlcmlmeSxcblx0c2lnbjogc2lnbixcblx0c2lnbkFzeW5jOiBzaWduQXN5bmMsXG5cdHdyaXRlOiB3cml0ZVxufTtcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgYXNuMSA9IHJlcXVpcmUoJ2FzbjEnKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi4vYWxncycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBLZXkgPSByZXF1aXJlKCcuLi9rZXknKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi4vcHJpdmF0ZS1rZXknKTtcbnZhciBwZW0gPSByZXF1aXJlKCcuL3BlbScpO1xudmFyIElkZW50aXR5ID0gcmVxdWlyZSgnLi4vaWRlbnRpdHknKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuLi9zaWduYXR1cmUnKTtcbnZhciBDZXJ0aWZpY2F0ZSA9IHJlcXVpcmUoJy4uL2NlcnRpZmljYXRlJyk7XG52YXIgcGtjczggPSByZXF1aXJlKCcuL3BrY3M4Jyk7XG5cbi8qXG4gKiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gUkZDNTI4MCAoWC41MDkpLlxuICovXG5cbi8qIEhlbHBlciB0byByZWFkIGluIGEgc2luZ2xlIG1waW50ICovXG5mdW5jdGlvbiByZWFkTVBJbnQoZGVyLCBubSkge1xuXHRhc3NlcnQuc3RyaWN0RXF1YWwoZGVyLnBlZWsoKSwgYXNuMS5CZXIuSW50ZWdlcixcblx0ICAgIG5tICsgJyBpcyBub3QgYW4gSW50ZWdlcicpO1xuXHRyZXR1cm4gKHV0aWxzLm1wTm9ybWFsaXplKGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkludGVnZXIsIHRydWUpKSk7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeShjZXJ0LCBrZXkpIHtcblx0dmFyIHNpZyA9IGNlcnQuc2lnbmF0dXJlcy54NTA5O1xuXHRhc3NlcnQub2JqZWN0KHNpZywgJ3g1MDkgc2lnbmF0dXJlJyk7XG5cblx0dmFyIGFsZ1BhcnRzID0gc2lnLmFsZ28uc3BsaXQoJy0nKTtcblx0aWYgKGFsZ1BhcnRzWzBdICE9PSBrZXkudHlwZSlcblx0XHRyZXR1cm4gKGZhbHNlKTtcblxuXHR2YXIgYmxvYiA9IHNpZy5jYWNoZTtcblx0aWYgKGJsb2IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHZhciBkZXIgPSBuZXcgYXNuMS5CZXJXcml0ZXIoKTtcblx0XHR3cml0ZVRCU0NlcnQoY2VydCwgZGVyKTtcblx0XHRibG9iID0gZGVyLmJ1ZmZlcjtcblx0fVxuXG5cdHZhciB2ZXJpZmllciA9IGtleS5jcmVhdGVWZXJpZnkoYWxnUGFydHNbMV0pO1xuXHR2ZXJpZmllci53cml0ZShibG9iKTtcblx0cmV0dXJuICh2ZXJpZmllci52ZXJpZnkoc2lnLnNpZ25hdHVyZSkpO1xufVxuXG5mdW5jdGlvbiBMb2NhbChpKSB7XG5cdHJldHVybiAoYXNuMS5CZXIuQ29udGV4dCB8IGFzbjEuQmVyLkNvbnN0cnVjdG9yIHwgaSk7XG59XG5cbmZ1bmN0aW9uIENvbnRleHQoaSkge1xuXHRyZXR1cm4gKGFzbjEuQmVyLkNvbnRleHQgfCBpKTtcbn1cblxudmFyIFNJR05fQUxHUyA9IHtcblx0J3JzYS1tZDUnOiAnMS4yLjg0MC4xMTM1NDkuMS4xLjQnLFxuXHQncnNhLXNoYTEnOiAnMS4yLjg0MC4xMTM1NDkuMS4xLjUnLFxuXHQncnNhLXNoYTI1Nic6ICcxLjIuODQwLjExMzU0OS4xLjEuMTEnLFxuXHQncnNhLXNoYTM4NCc6ICcxLjIuODQwLjExMzU0OS4xLjEuMTInLFxuXHQncnNhLXNoYTUxMic6ICcxLjIuODQwLjExMzU0OS4xLjEuMTMnLFxuXHQnZHNhLXNoYTEnOiAnMS4yLjg0MC4xMDA0MC40LjMnLFxuXHQnZHNhLXNoYTI1Nic6ICcyLjE2Ljg0MC4xLjEwMS4zLjQuMy4yJyxcblx0J2VjZHNhLXNoYTEnOiAnMS4yLjg0MC4xMDA0NS40LjEnLFxuXHQnZWNkc2Etc2hhMjU2JzogJzEuMi44NDAuMTAwNDUuNC4zLjInLFxuXHQnZWNkc2Etc2hhMzg0JzogJzEuMi44NDAuMTAwNDUuNC4zLjMnLFxuXHQnZWNkc2Etc2hhNTEyJzogJzEuMi44NDAuMTAwNDUuNC4zLjQnXG59O1xuT2JqZWN0LmtleXMoU0lHTl9BTEdTKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG5cdFNJR05fQUxHU1tTSUdOX0FMR1Nba11dID0gaztcbn0pO1xuU0lHTl9BTEdTWycxLjMuMTQuMy4yLjMnXSA9ICdyc2EtbWQ1JztcblNJR05fQUxHU1snMS4zLjE0LjMuMi4yOSddID0gJ3JzYS1zaGExJztcblxudmFyIEVYVFMgPSB7XG5cdCdpc3N1ZXJLZXlJZCc6ICcyLjUuMjkuMzUnLFxuXHQnYWx0TmFtZSc6ICcyLjUuMjkuMTcnLFxuXHQnYmFzaWNDb25zdHJhaW50cyc6ICcyLjUuMjkuMTknLFxuXHQna2V5VXNhZ2UnOiAnMi41LjI5LjE1Jyxcblx0J2V4dEtleVVzYWdlJzogJzIuNS4yOS4zNydcbn07XG5cbmZ1bmN0aW9uIHJlYWQoYnVmLCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgKGJ1ZikgPT09ICdzdHJpbmcnKSB7XG5cdFx0YnVmID0gbmV3IEJ1ZmZlcihidWYsICdiaW5hcnknKTtcblx0fVxuXHRhc3NlcnQuYnVmZmVyKGJ1ZiwgJ2J1ZicpO1xuXG5cdHZhciBkZXIgPSBuZXcgYXNuMS5CZXJSZWFkZXIoYnVmKTtcblxuXHRkZXIucmVhZFNlcXVlbmNlKCk7XG5cdGlmIChNYXRoLmFicyhkZXIubGVuZ3RoIC0gZGVyLnJlbWFpbikgPiAxKSB7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignREVSIHNlcXVlbmNlIGRvZXMgbm90IGNvbnRhaW4gd2hvbGUgYnl0ZSAnICtcblx0XHQgICAgJ3N0cmVhbScpKTtcblx0fVxuXG5cdHZhciB0YnNTdGFydCA9IGRlci5vZmZzZXQ7XG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0dmFyIHNpZ09mZnNldCA9IGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoO1xuXHR2YXIgdGJzRW5kID0gc2lnT2Zmc2V0O1xuXG5cdGlmIChkZXIucGVlaygpID09PSBMb2NhbCgwKSkge1xuXHRcdGRlci5yZWFkU2VxdWVuY2UoTG9jYWwoMCkpO1xuXHRcdHZhciB2ZXJzaW9uID0gZGVyLnJlYWRJbnQoKTtcblx0XHRhc3NlcnQub2sodmVyc2lvbiA8PSAzLFxuXHRcdCAgICAnb25seSB4LjUwOSB2ZXJzaW9ucyB1cCB0byB2MyBzdXBwb3J0ZWQnKTtcblx0fVxuXG5cdHZhciBjZXJ0ID0ge307XG5cdGNlcnQuc2lnbmF0dXJlcyA9IHt9O1xuXHR2YXIgc2lnID0gKGNlcnQuc2lnbmF0dXJlcy54NTA5ID0ge30pO1xuXHRzaWcuZXh0cmFzID0ge307XG5cblx0Y2VydC5zZXJpYWwgPSByZWFkTVBJbnQoZGVyLCAnc2VyaWFsJyk7XG5cblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHR2YXIgYWZ0ZXIgPSBkZXIub2Zmc2V0ICsgZGVyLmxlbmd0aDtcblx0dmFyIGNlcnRBbGdPaWQgPSBkZXIucmVhZE9JRCgpO1xuXHR2YXIgY2VydEFsZyA9IFNJR05fQUxHU1tjZXJ0QWxnT2lkXTtcblx0aWYgKGNlcnRBbGcgPT09IHVuZGVmaW5lZClcblx0XHR0aHJvdyAobmV3IEVycm9yKCd1bmtub3duIHNpZ25hdHVyZSBhbGdvcml0aG0gJyArIGNlcnRBbGdPaWQpKTtcblxuXHRkZXIuX29mZnNldCA9IGFmdGVyO1xuXHRjZXJ0Lmlzc3VlciA9IElkZW50aXR5LnBhcnNlQXNuMShkZXIpO1xuXG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0Y2VydC52YWxpZEZyb20gPSByZWFkRGF0ZShkZXIpO1xuXHRjZXJ0LnZhbGlkVW50aWwgPSByZWFkRGF0ZShkZXIpO1xuXG5cdGNlcnQuc3ViamVjdHMgPSBbSWRlbnRpdHkucGFyc2VBc24xKGRlcildO1xuXG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0YWZ0ZXIgPSBkZXIub2Zmc2V0ICsgZGVyLmxlbmd0aDtcblx0Y2VydC5zdWJqZWN0S2V5ID0gcGtjczgucmVhZFBrY3M4KHVuZGVmaW5lZCwgJ3B1YmxpYycsIGRlcik7XG5cdGRlci5fb2Zmc2V0ID0gYWZ0ZXI7XG5cblx0LyogaXNzdWVyVW5pcXVlSUQgKi9cblx0aWYgKGRlci5wZWVrKCkgPT09IExvY2FsKDEpKSB7XG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZShMb2NhbCgxKSk7XG5cdFx0c2lnLmV4dHJhcy5pc3N1ZXJVbmlxdWVJRCA9XG5cdFx0ICAgIGJ1Zi5zbGljZShkZXIub2Zmc2V0LCBkZXIub2Zmc2V0ICsgZGVyLmxlbmd0aCk7XG5cdFx0ZGVyLl9vZmZzZXQgKz0gZGVyLmxlbmd0aDtcblx0fVxuXG5cdC8qIHN1YmplY3RVbmlxdWVJRCAqL1xuXHRpZiAoZGVyLnBlZWsoKSA9PT0gTG9jYWwoMikpIHtcblx0XHRkZXIucmVhZFNlcXVlbmNlKExvY2FsKDIpKTtcblx0XHRzaWcuZXh0cmFzLnN1YmplY3RVbmlxdWVJRCA9XG5cdFx0ICAgIGJ1Zi5zbGljZShkZXIub2Zmc2V0LCBkZXIub2Zmc2V0ICsgZGVyLmxlbmd0aCk7XG5cdFx0ZGVyLl9vZmZzZXQgKz0gZGVyLmxlbmd0aDtcblx0fVxuXG5cdC8qIGV4dGVuc2lvbnMgKi9cblx0aWYgKGRlci5wZWVrKCkgPT09IExvY2FsKDMpKSB7XG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZShMb2NhbCgzKSk7XG5cdFx0dmFyIGV4dEVuZCA9IGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoO1xuXHRcdGRlci5yZWFkU2VxdWVuY2UoKTtcblxuXHRcdHdoaWxlIChkZXIub2Zmc2V0IDwgZXh0RW5kKVxuXHRcdFx0cmVhZEV4dGVuc2lvbihjZXJ0LCBidWYsIGRlcik7XG5cblx0XHRhc3NlcnQuc3RyaWN0RXF1YWwoZGVyLm9mZnNldCwgZXh0RW5kKTtcblx0fVxuXG5cdGFzc2VydC5zdHJpY3RFcXVhbChkZXIub2Zmc2V0LCBzaWdPZmZzZXQpO1xuXG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0YWZ0ZXIgPSBkZXIub2Zmc2V0ICsgZGVyLmxlbmd0aDtcblx0dmFyIHNpZ0FsZ09pZCA9IGRlci5yZWFkT0lEKCk7XG5cdHZhciBzaWdBbGcgPSBTSUdOX0FMR1Nbc2lnQWxnT2lkXTtcblx0aWYgKHNpZ0FsZyA9PT0gdW5kZWZpbmVkKVxuXHRcdHRocm93IChuZXcgRXJyb3IoJ3Vua25vd24gc2lnbmF0dXJlIGFsZ29yaXRobSAnICsgc2lnQWxnT2lkKSk7XG5cdGRlci5fb2Zmc2V0ID0gYWZ0ZXI7XG5cblx0dmFyIHNpZ0RhdGEgPSBkZXIucmVhZFN0cmluZyhhc24xLkJlci5CaXRTdHJpbmcsIHRydWUpO1xuXHRpZiAoc2lnRGF0YVswXSA9PT0gMClcblx0XHRzaWdEYXRhID0gc2lnRGF0YS5zbGljZSgxKTtcblx0dmFyIGFsZ1BhcnRzID0gc2lnQWxnLnNwbGl0KCctJyk7XG5cblx0c2lnLnNpZ25hdHVyZSA9IFNpZ25hdHVyZS5wYXJzZShzaWdEYXRhLCBhbGdQYXJ0c1swXSwgJ2FzbjEnKTtcblx0c2lnLnNpZ25hdHVyZS5oYXNoQWxnb3JpdGhtID0gYWxnUGFydHNbMV07XG5cdHNpZy5hbGdvID0gc2lnQWxnO1xuXHRzaWcuY2FjaGUgPSBidWYuc2xpY2UodGJzU3RhcnQsIHRic0VuZCk7XG5cblx0cmV0dXJuIChuZXcgQ2VydGlmaWNhdGUoY2VydCkpO1xufVxuXG5mdW5jdGlvbiByZWFkRGF0ZShkZXIpIHtcblx0aWYgKGRlci5wZWVrKCkgPT09IGFzbjEuQmVyLlVUQ1RpbWUpIHtcblx0XHRyZXR1cm4gKHV0Y1RpbWVUb0RhdGUoZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuVVRDVGltZSkpKTtcblx0fSBlbHNlIGlmIChkZXIucGVlaygpID09PSBhc24xLkJlci5HZW5lcmFsaXplZFRpbWUpIHtcblx0XHRyZXR1cm4gKGdUaW1lVG9EYXRlKGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkdlbmVyYWxpemVkVGltZSkpKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdVbnN1cHBvcnRlZCBkYXRlIGZvcm1hdCcpKTtcblx0fVxufVxuXG4vKiBSRkM1MjgwLCBzZWN0aW9uIDQuMi4xLjYgKEdlbmVyYWxOYW1lIHR5cGUpICovXG52YXIgQUxUTkFNRSA9IHtcblx0T3RoZXJOYW1lOiBMb2NhbCgwKSxcblx0UkZDODIyTmFtZTogQ29udGV4dCgxKSxcblx0RE5TTmFtZTogQ29udGV4dCgyKSxcblx0WDQwMEFkZHJlc3M6IExvY2FsKDMpLFxuXHREaXJlY3RvcnlOYW1lOiBMb2NhbCg0KSxcblx0RURJUGFydHlOYW1lOiBMb2NhbCg1KSxcblx0VVJJOiBDb250ZXh0KDYpLFxuXHRJUEFkZHJlc3M6IENvbnRleHQoNyksXG5cdE9JRDogQ29udGV4dCg4KVxufTtcblxuLyogUkZDNTI4MCwgc2VjdGlvbiA0LjIuMS4xMiAoS2V5UHVycG9zZUlkKSAqL1xudmFyIEVYVFBVUlBPU0UgPSB7XG5cdCdzZXJ2ZXJBdXRoJzogJzEuMy42LjEuNS41LjcuMy4xJyxcblx0J2NsaWVudEF1dGgnOiAnMS4zLjYuMS41LjUuNy4zLjInLFxuXHQnY29kZVNpZ25pbmcnOiAnMS4zLjYuMS41LjUuNy4zLjMnLFxuXG5cdC8qIFNlZSBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L29pZC1kb2NzL2Jsb2IvbWFzdGVyL3Jvb3QubWQgKi9cblx0J2pveWVudERvY2tlcic6ICcxLjMuNi4xLjQuMS4zODY3OC4xLjQuMScsXG5cdCdqb3llbnRDbW9uJzogJzEuMy42LjEuNC4xLjM4Njc4LjEuNC4yJ1xufTtcbnZhciBFWFRQVVJQT1NFX1JFViA9IHt9O1xuT2JqZWN0LmtleXMoRVhUUFVSUE9TRSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuXHRFWFRQVVJQT1NFX1JFVltFWFRQVVJQT1NFW2tdXSA9IGs7XG59KTtcblxudmFyIEtFWVVTRUJJVFMgPSBbXG5cdCdzaWduYXR1cmUnLCAnaWRlbnRpdHknLCAna2V5RW5jcnlwdGlvbicsXG5cdCdlbmNyeXB0aW9uJywgJ2tleUFncmVlbWVudCcsICdjYScsICdjcmwnXG5dO1xuXG5mdW5jdGlvbiByZWFkRXh0ZW5zaW9uKGNlcnQsIGJ1ZiwgZGVyKSB7XG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0dmFyIGFmdGVyID0gZGVyLm9mZnNldCArIGRlci5sZW5ndGg7XG5cdHZhciBleHRJZCA9IGRlci5yZWFkT0lEKCk7XG5cdHZhciBpZDtcblx0dmFyIHNpZyA9IGNlcnQuc2lnbmF0dXJlcy54NTA5O1xuXHRzaWcuZXh0cmFzLmV4dHMgPSBbXTtcblxuXHR2YXIgY3JpdGljYWw7XG5cdGlmIChkZXIucGVlaygpID09PSBhc24xLkJlci5Cb29sZWFuKVxuXHRcdGNyaXRpY2FsID0gZGVyLnJlYWRCb29sZWFuKCk7XG5cblx0c3dpdGNoIChleHRJZCkge1xuXHRjYXNlIChFWFRTLmJhc2ljQ29uc3RyYWludHMpOlxuXHRcdGRlci5yZWFkU2VxdWVuY2UoYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRcdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0XHR2YXIgYmNFbmQgPSBkZXIub2Zmc2V0ICsgZGVyLmxlbmd0aDtcblx0XHR2YXIgY2EgPSBmYWxzZTtcblx0XHRpZiAoZGVyLnBlZWsoKSA9PT0gYXNuMS5CZXIuQm9vbGVhbilcblx0XHRcdGNhID0gZGVyLnJlYWRCb29sZWFuKCk7XG5cdFx0aWYgKGNlcnQucHVycG9zZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdGNlcnQucHVycG9zZXMgPSBbXTtcblx0XHRpZiAoY2EgPT09IHRydWUpXG5cdFx0XHRjZXJ0LnB1cnBvc2VzLnB1c2goJ2NhJyk7XG5cdFx0dmFyIGJjID0geyBvaWQ6IGV4dElkLCBjcml0aWNhbDogY3JpdGljYWwgfTtcblx0XHRpZiAoZGVyLm9mZnNldCA8IGJjRW5kICYmIGRlci5wZWVrKCkgPT09IGFzbjEuQmVyLkludGVnZXIpXG5cdFx0XHRiYy5wYXRoTGVuID0gZGVyLnJlYWRJbnQoKTtcblx0XHRzaWcuZXh0cmFzLmV4dHMucHVzaChiYyk7XG5cdFx0YnJlYWs7XG5cdGNhc2UgKEVYVFMuZXh0S2V5VXNhZ2UpOlxuXHRcdGRlci5yZWFkU2VxdWVuY2UoYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRcdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0XHRpZiAoY2VydC5wdXJwb3NlcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y2VydC5wdXJwb3NlcyA9IFtdO1xuXHRcdHZhciBla0VuZCA9IGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoO1xuXHRcdHdoaWxlIChkZXIub2Zmc2V0IDwgZWtFbmQpIHtcblx0XHRcdHZhciBvaWQgPSBkZXIucmVhZE9JRCgpO1xuXHRcdFx0Y2VydC5wdXJwb3Nlcy5wdXNoKEVYVFBVUlBPU0VfUkVWW29pZF0gfHwgb2lkKTtcblx0XHR9XG5cdFx0Lypcblx0XHQgKiBUaGlzIGlzIGEgYml0IG9mIGEgaGFjazogaW4gdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBhIGNlcnRcblx0XHQgKiB0aGF0J3Mgb25seSBhbGxvd2VkIHRvIGRvIHNlcnZlckF1dGggb3IgY2xpZW50QXV0aCAoYW5kIG5vdFxuXHRcdCAqIHRoZSBvdGhlciksIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGFsbCBvdXIgU3ViamVjdHMgYXJlIG9mXG5cdFx0ICogdGhlIHJpZ2h0IHR5cGUuIEJ1dCB3ZSBhbHJlYWR5IHBhcnNlZCBvdXIgU3ViamVjdHMgYW5kXG5cdFx0ICogZGVjaWRlZCBpZiB0aGV5IHdlcmUgaG9zdHMgb3IgdXNlcnMgZWFybGllciAoc2luY2UgaXQgYXBwZWFyc1xuXHRcdCAqIGZpcnN0IGluIHRoZSBjZXJ0KS5cblx0XHQgKlxuXHRcdCAqIFNvIHdlIGdvIHRocm91Z2ggYW5kIG11dGF0ZSB0aGVtIGludG8gdGhlIHJpZ2h0IGtpbmQgaGVyZSBpZlxuXHRcdCAqIGl0IGRvZXNuJ3QgbWF0Y2guIFRoaXMgbWlnaHQgbm90IGJlIGh1Z2VseSBiZW5lZmljaWFsLCBhcyBpdFxuXHRcdCAqIHNlZW1zIHRoYXQgc2luZ2xlLXB1cnBvc2UgY2VydHMgYXJlIG5vdCBvZnRlbiBzZWVuIGluIHRoZVxuXHRcdCAqIHdpbGQuXG5cdFx0ICovXG5cdFx0aWYgKGNlcnQucHVycG9zZXMuaW5kZXhPZignc2VydmVyQXV0aCcpICE9PSAtMSAmJlxuXHRcdCAgICBjZXJ0LnB1cnBvc2VzLmluZGV4T2YoJ2NsaWVudEF1dGgnKSA9PT0gLTEpIHtcblx0XHRcdGNlcnQuc3ViamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoaWRlKSB7XG5cdFx0XHRcdGlmIChpZGUudHlwZSAhPT0gJ2hvc3QnKSB7XG5cdFx0XHRcdFx0aWRlLnR5cGUgPSAnaG9zdCc7XG5cdFx0XHRcdFx0aWRlLmhvc3RuYW1lID0gaWRlLnVpZCB8fFxuXHRcdFx0XHRcdCAgICBpZGUuZW1haWwgfHxcblx0XHRcdFx0XHQgICAgaWRlLmNvbXBvbmVudHNbMF0udmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoY2VydC5wdXJwb3Nlcy5pbmRleE9mKCdjbGllbnRBdXRoJykgIT09IC0xICYmXG5cdFx0ICAgIGNlcnQucHVycG9zZXMuaW5kZXhPZignc2VydmVyQXV0aCcpID09PSAtMSkge1xuXHRcdFx0Y2VydC5zdWJqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChpZGUpIHtcblx0XHRcdFx0aWYgKGlkZS50eXBlICE9PSAndXNlcicpIHtcblx0XHRcdFx0XHRpZGUudHlwZSA9ICd1c2VyJztcblx0XHRcdFx0XHRpZGUudWlkID0gaWRlLmhvc3RuYW1lIHx8XG5cdFx0XHRcdFx0ICAgIGlkZS5lbWFpbCB8fFxuXHRcdFx0XHRcdCAgICBpZGUuY29tcG9uZW50c1swXS52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHNpZy5leHRyYXMuZXh0cy5wdXNoKHsgb2lkOiBleHRJZCwgY3JpdGljYWw6IGNyaXRpY2FsIH0pO1xuXHRcdGJyZWFrO1xuXHRjYXNlIChFWFRTLmtleVVzYWdlKTpcblx0XHRkZXIucmVhZFNlcXVlbmNlKGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblx0XHR2YXIgYml0cyA9IGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkJpdFN0cmluZywgdHJ1ZSk7XG5cdFx0dmFyIHNldEJpdHMgPSByZWFkQml0RmllbGQoYml0cywgS0VZVVNFQklUUyk7XG5cdFx0c2V0Qml0cy5mb3JFYWNoKGZ1bmN0aW9uIChiaXQpIHtcblx0XHRcdGlmIChjZXJ0LnB1cnBvc2VzID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGNlcnQucHVycG9zZXMgPSBbXTtcblx0XHRcdGlmIChjZXJ0LnB1cnBvc2VzLmluZGV4T2YoYml0KSA9PT0gLTEpXG5cdFx0XHRcdGNlcnQucHVycG9zZXMucHVzaChiaXQpO1xuXHRcdH0pO1xuXHRcdHNpZy5leHRyYXMuZXh0cy5wdXNoKHsgb2lkOiBleHRJZCwgY3JpdGljYWw6IGNyaXRpY2FsLFxuXHRcdCAgICBiaXRzOiBiaXRzIH0pO1xuXHRcdGJyZWFrO1xuXHRjYXNlIChFWFRTLmFsdE5hbWUpOlxuXHRcdGRlci5yZWFkU2VxdWVuY2UoYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRcdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0XHR2YXIgYWVFbmQgPSBkZXIub2Zmc2V0ICsgZGVyLmxlbmd0aDtcblx0XHR3aGlsZSAoZGVyLm9mZnNldCA8IGFlRW5kKSB7XG5cdFx0XHRzd2l0Y2ggKGRlci5wZWVrKCkpIHtcblx0XHRcdGNhc2UgQUxUTkFNRS5PdGhlck5hbWU6XG5cdFx0XHRjYXNlIEFMVE5BTUUuRURJUGFydHlOYW1lOlxuXHRcdFx0XHRkZXIucmVhZFNlcXVlbmNlKCk7XG5cdFx0XHRcdGRlci5fb2Zmc2V0ICs9IGRlci5sZW5ndGg7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBBTFROQU1FLk9JRDpcblx0XHRcdFx0ZGVyLnJlYWRPSUQoQUxUTkFNRS5PSUQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgQUxUTkFNRS5SRkM4MjJOYW1lOlxuXHRcdFx0XHQvKiBSRkM4MjIgc3BlY2lmaWVzIGVtYWlsIGFkZHJlc3NlcyAqL1xuXHRcdFx0XHR2YXIgZW1haWwgPSBkZXIucmVhZFN0cmluZyhBTFROQU1FLlJGQzgyMk5hbWUpO1xuXHRcdFx0XHRpZCA9IElkZW50aXR5LmZvckVtYWlsKGVtYWlsKTtcblx0XHRcdFx0aWYgKCFjZXJ0LnN1YmplY3RzWzBdLmVxdWFscyhpZCkpXG5cdFx0XHRcdFx0Y2VydC5zdWJqZWN0cy5wdXNoKGlkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIEFMVE5BTUUuRGlyZWN0b3J5TmFtZTpcblx0XHRcdFx0ZGVyLnJlYWRTZXF1ZW5jZShBTFROQU1FLkRpcmVjdG9yeU5hbWUpO1xuXHRcdFx0XHRpZCA9IElkZW50aXR5LnBhcnNlQXNuMShkZXIpO1xuXHRcdFx0XHRpZiAoIWNlcnQuc3ViamVjdHNbMF0uZXF1YWxzKGlkKSlcblx0XHRcdFx0XHRjZXJ0LnN1YmplY3RzLnB1c2goaWQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgQUxUTkFNRS5ETlNOYW1lOlxuXHRcdFx0XHR2YXIgaG9zdCA9IGRlci5yZWFkU3RyaW5nKFxuXHRcdFx0XHQgICAgQUxUTkFNRS5ETlNOYW1lKTtcblx0XHRcdFx0aWQgPSBJZGVudGl0eS5mb3JIb3N0KGhvc3QpO1xuXHRcdFx0XHRpZiAoIWNlcnQuc3ViamVjdHNbMF0uZXF1YWxzKGlkKSlcblx0XHRcdFx0XHRjZXJ0LnN1YmplY3RzLnB1c2goaWQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGRlci5yZWFkU3RyaW5nKGRlci5wZWVrKCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0c2lnLmV4dHJhcy5leHRzLnB1c2goeyBvaWQ6IGV4dElkLCBjcml0aWNhbDogY3JpdGljYWwgfSk7XG5cdFx0YnJlYWs7XG5cdGRlZmF1bHQ6XG5cdFx0c2lnLmV4dHJhcy5leHRzLnB1c2goe1xuXHRcdFx0b2lkOiBleHRJZCxcblx0XHRcdGNyaXRpY2FsOiBjcml0aWNhbCxcblx0XHRcdGRhdGE6IGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLk9jdGV0U3RyaW5nLCB0cnVlKVxuXHRcdH0pO1xuXHRcdGJyZWFrO1xuXHR9XG5cblx0ZGVyLl9vZmZzZXQgPSBhZnRlcjtcbn1cblxudmFyIFVUQ1RJTUVfUkUgPVxuICAgIC9eKFswLTldezJ9KShbMC05XXsyfSkoWzAtOV17Mn0pKFswLTldezJ9KShbMC05XXsyfSkoWzAtOV17Mn0pP1okLztcbmZ1bmN0aW9uIHV0Y1RpbWVUb0RhdGUodCkge1xuXHR2YXIgbSA9IHQubWF0Y2goVVRDVElNRV9SRSk7XG5cdGFzc2VydC5vayhtLCAndGltZXN0YW1wcyBtdXN0IGJlIGluIFVUQycpO1xuXHR2YXIgZCA9IG5ldyBEYXRlKCk7XG5cblx0dmFyIHRoaXNZZWFyID0gZC5nZXRVVENGdWxsWWVhcigpO1xuXHR2YXIgY2VudHVyeSA9IE1hdGguZmxvb3IodGhpc1llYXIgLyAxMDApICogMTAwO1xuXG5cdHZhciB5ZWFyID0gcGFyc2VJbnQobVsxXSwgMTApO1xuXHRpZiAodGhpc1llYXIgJSAxMDAgPCA1MCAmJiB5ZWFyID49IDYwKVxuXHRcdHllYXIgKz0gKGNlbnR1cnkgLSAxKTtcblx0ZWxzZVxuXHRcdHllYXIgKz0gY2VudHVyeTtcblx0ZC5zZXRVVENGdWxsWWVhcih5ZWFyLCBwYXJzZUludChtWzJdLCAxMCkgLSAxLCBwYXJzZUludChtWzNdLCAxMCkpO1xuXHRkLnNldFVUQ0hvdXJzKHBhcnNlSW50KG1bNF0sIDEwKSwgcGFyc2VJbnQobVs1XSwgMTApKTtcblx0aWYgKG1bNl0gJiYgbVs2XS5sZW5ndGggPiAwKVxuXHRcdGQuc2V0VVRDU2Vjb25kcyhwYXJzZUludChtWzZdLCAxMCkpO1xuXHRyZXR1cm4gKGQpO1xufVxuXG52YXIgR1RJTUVfUkUgPVxuICAgIC9eKFswLTldezR9KShbMC05XXsyfSkoWzAtOV17Mn0pKFswLTldezJ9KShbMC05XXsyfSkoWzAtOV17Mn0pP1okLztcbmZ1bmN0aW9uIGdUaW1lVG9EYXRlKHQpIHtcblx0dmFyIG0gPSB0Lm1hdGNoKEdUSU1FX1JFKTtcblx0YXNzZXJ0Lm9rKG0pO1xuXHR2YXIgZCA9IG5ldyBEYXRlKCk7XG5cblx0ZC5zZXRVVENGdWxsWWVhcihwYXJzZUludChtWzFdLCAxMCksIHBhcnNlSW50KG1bMl0sIDEwKSAtIDEsXG5cdCAgICBwYXJzZUludChtWzNdLCAxMCkpO1xuXHRkLnNldFVUQ0hvdXJzKHBhcnNlSW50KG1bNF0sIDEwKSwgcGFyc2VJbnQobVs1XSwgMTApKTtcblx0aWYgKG1bNl0gJiYgbVs2XS5sZW5ndGggPiAwKVxuXHRcdGQuc2V0VVRDU2Vjb25kcyhwYXJzZUludChtWzZdLCAxMCkpO1xuXHRyZXR1cm4gKGQpO1xufVxuXG5mdW5jdGlvbiB6ZXJvUGFkKG4pIHtcblx0dmFyIHMgPSAnJyArIG47XG5cdHdoaWxlIChzLmxlbmd0aCA8IDIpXG5cdFx0cyA9ICcwJyArIHM7XG5cdHJldHVybiAocyk7XG59XG5cbmZ1bmN0aW9uIGRhdGVUb1VUQ1RpbWUoZCkge1xuXHR2YXIgcyA9ICcnO1xuXHRzICs9IHplcm9QYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwKTtcblx0cyArPSB6ZXJvUGFkKGQuZ2V0VVRDTW9udGgoKSArIDEpO1xuXHRzICs9IHplcm9QYWQoZC5nZXRVVENEYXRlKCkpO1xuXHRzICs9IHplcm9QYWQoZC5nZXRVVENIb3VycygpKTtcblx0cyArPSB6ZXJvUGFkKGQuZ2V0VVRDTWludXRlcygpKTtcblx0cyArPSB6ZXJvUGFkKGQuZ2V0VVRDU2Vjb25kcygpKTtcblx0cyArPSAnWic7XG5cdHJldHVybiAocyk7XG59XG5cbmZ1bmN0aW9uIHNpZ24oY2VydCwga2V5KSB7XG5cdGlmIChjZXJ0LnNpZ25hdHVyZXMueDUwOSA9PT0gdW5kZWZpbmVkKVxuXHRcdGNlcnQuc2lnbmF0dXJlcy54NTA5ID0ge307XG5cdHZhciBzaWcgPSBjZXJ0LnNpZ25hdHVyZXMueDUwOTtcblxuXHRzaWcuYWxnbyA9IGtleS50eXBlICsgJy0nICsga2V5LmRlZmF1bHRIYXNoQWxnb3JpdGhtKCk7XG5cdGlmIChTSUdOX0FMR1Nbc2lnLmFsZ29dID09PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIChmYWxzZSk7XG5cblx0dmFyIGRlciA9IG5ldyBhc24xLkJlcldyaXRlcigpO1xuXHR3cml0ZVRCU0NlcnQoY2VydCwgZGVyKTtcblx0dmFyIGJsb2IgPSBkZXIuYnVmZmVyO1xuXHRzaWcuY2FjaGUgPSBibG9iO1xuXG5cdHZhciBzaWduZXIgPSBrZXkuY3JlYXRlU2lnbigpO1xuXHRzaWduZXIud3JpdGUoYmxvYik7XG5cdGNlcnQuc2lnbmF0dXJlcy54NTA5LnNpZ25hdHVyZSA9IHNpZ25lci5zaWduKCk7XG5cblx0cmV0dXJuICh0cnVlKTtcbn1cblxuZnVuY3Rpb24gc2lnbkFzeW5jKGNlcnQsIHNpZ25lciwgZG9uZSkge1xuXHRpZiAoY2VydC5zaWduYXR1cmVzLng1MDkgPT09IHVuZGVmaW5lZClcblx0XHRjZXJ0LnNpZ25hdHVyZXMueDUwOSA9IHt9O1xuXHR2YXIgc2lnID0gY2VydC5zaWduYXR1cmVzLng1MDk7XG5cblx0dmFyIGRlciA9IG5ldyBhc24xLkJlcldyaXRlcigpO1xuXHR3cml0ZVRCU0NlcnQoY2VydCwgZGVyKTtcblx0dmFyIGJsb2IgPSBkZXIuYnVmZmVyO1xuXHRzaWcuY2FjaGUgPSBibG9iO1xuXG5cdHNpZ25lcihibG9iLCBmdW5jdGlvbiAoZXJyLCBzaWduYXR1cmUpIHtcblx0XHRpZiAoZXJyKSB7XG5cdFx0XHRkb25lKGVycik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHNpZy5hbGdvID0gc2lnbmF0dXJlLnR5cGUgKyAnLScgKyBzaWduYXR1cmUuaGFzaEFsZ29yaXRobTtcblx0XHRpZiAoU0lHTl9BTEdTW3NpZy5hbGdvXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkb25lKG5ldyBFcnJvcignSW52YWxpZCBzaWduaW5nIGFsZ29yaXRobSBcIicgK1xuXHRcdFx0ICAgIHNpZy5hbGdvICsgJ1wiJykpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRzaWcuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuXHRcdGRvbmUoKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlKGNlcnQsIG9wdGlvbnMpIHtcblx0dmFyIHNpZyA9IGNlcnQuc2lnbmF0dXJlcy54NTA5O1xuXHRhc3NlcnQub2JqZWN0KHNpZywgJ3g1MDkgc2lnbmF0dXJlJyk7XG5cblx0dmFyIGRlciA9IG5ldyBhc24xLkJlcldyaXRlcigpO1xuXHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRpZiAoc2lnLmNhY2hlKSB7XG5cdFx0ZGVyLl9lbnN1cmUoc2lnLmNhY2hlLmxlbmd0aCk7XG5cdFx0c2lnLmNhY2hlLmNvcHkoZGVyLl9idWYsIGRlci5fb2Zmc2V0KTtcblx0XHRkZXIuX29mZnNldCArPSBzaWcuY2FjaGUubGVuZ3RoO1xuXHR9IGVsc2Uge1xuXHRcdHdyaXRlVEJTQ2VydChjZXJ0LCBkZXIpO1xuXHR9XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblx0ZGVyLndyaXRlT0lEKFNJR05fQUxHU1tzaWcuYWxnb10pO1xuXHRpZiAoc2lnLmFsZ28ubWF0Y2goL15yc2EtLykpXG5cdFx0ZGVyLndyaXRlTnVsbCgpO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblxuXHR2YXIgc2lnRGF0YSA9IHNpZy5zaWduYXR1cmUudG9CdWZmZXIoJ2FzbjEnKTtcblx0dmFyIGRhdGEgPSBuZXcgQnVmZmVyKHNpZ0RhdGEubGVuZ3RoICsgMSk7XG5cdGRhdGFbMF0gPSAwO1xuXHRzaWdEYXRhLmNvcHkoZGF0YSwgMSk7XG5cdGRlci53cml0ZUJ1ZmZlcihkYXRhLCBhc24xLkJlci5CaXRTdHJpbmcpO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblxuXHRyZXR1cm4gKGRlci5idWZmZXIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVRCU0NlcnQoY2VydCwgZGVyKSB7XG5cdHZhciBzaWcgPSBjZXJ0LnNpZ25hdHVyZXMueDUwOTtcblx0YXNzZXJ0Lm9iamVjdChzaWcsICd4NTA5IHNpZ25hdHVyZScpO1xuXG5cdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoTG9jYWwoMCkpO1xuXHRkZXIud3JpdGVJbnQoMik7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdGRlci53cml0ZUJ1ZmZlcih1dGlscy5tcE5vcm1hbGl6ZShjZXJ0LnNlcmlhbCksIGFzbjEuQmVyLkludGVnZXIpO1xuXG5cdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cdGRlci53cml0ZU9JRChTSUdOX0FMR1Nbc2lnLmFsZ29dKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0Y2VydC5pc3N1ZXIudG9Bc24xKGRlcik7XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblx0ZGVyLndyaXRlU3RyaW5nKGRhdGVUb1VUQ1RpbWUoY2VydC52YWxpZEZyb20pLCBhc24xLkJlci5VVENUaW1lKTtcblx0ZGVyLndyaXRlU3RyaW5nKGRhdGVUb1VUQ1RpbWUoY2VydC52YWxpZFVudGlsKSwgYXNuMS5CZXIuVVRDVGltZSk7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdHZhciBzdWJqZWN0ID0gY2VydC5zdWJqZWN0c1swXTtcblx0dmFyIGFsdE5hbWVzID0gY2VydC5zdWJqZWN0cy5zbGljZSgxKTtcblx0c3ViamVjdC50b0FzbjEoZGVyKTtcblxuXHRwa2NzOC53cml0ZVBrY3M4KGRlciwgY2VydC5zdWJqZWN0S2V5KTtcblxuXHRpZiAoc2lnLmV4dHJhcyAmJiBzaWcuZXh0cmFzLmlzc3VlclVuaXF1ZUlEKSB7XG5cdFx0ZGVyLndyaXRlQnVmZmVyKHNpZy5leHRyYXMuaXNzdWVyVW5pcXVlSUQsIExvY2FsKDEpKTtcblx0fVxuXG5cdGlmIChzaWcuZXh0cmFzICYmIHNpZy5leHRyYXMuc3ViamVjdFVuaXF1ZUlEKSB7XG5cdFx0ZGVyLndyaXRlQnVmZmVyKHNpZy5leHRyYXMuc3ViamVjdFVuaXF1ZUlELCBMb2NhbCgyKSk7XG5cdH1cblxuXHRpZiAoYWx0TmFtZXMubGVuZ3RoID4gMCB8fCBzdWJqZWN0LnR5cGUgPT09ICdob3N0JyB8fFxuXHQgICAgKGNlcnQucHVycG9zZXMgIT09IHVuZGVmaW5lZCAmJiBjZXJ0LnB1cnBvc2VzLmxlbmd0aCA+IDApIHx8XG5cdCAgICAoc2lnLmV4dHJhcyAmJiBzaWcuZXh0cmFzLmV4dHMpKSB7XG5cdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoTG9jYWwoMykpO1xuXHRcdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cblx0XHR2YXIgZXh0cyA9IFtdO1xuXHRcdGlmIChjZXJ0LnB1cnBvc2VzICE9PSB1bmRlZmluZWQgJiYgY2VydC5wdXJwb3Nlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRleHRzLnB1c2goe1xuXHRcdFx0XHRvaWQ6IEVYVFMuYmFzaWNDb25zdHJhaW50cyxcblx0XHRcdFx0Y3JpdGljYWw6IHRydWVcblx0XHRcdH0pO1xuXHRcdFx0ZXh0cy5wdXNoKHtcblx0XHRcdFx0b2lkOiBFWFRTLmtleVVzYWdlLFxuXHRcdFx0XHRjcml0aWNhbDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0XHRleHRzLnB1c2goe1xuXHRcdFx0XHRvaWQ6IEVYVFMuZXh0S2V5VXNhZ2UsXG5cdFx0XHRcdGNyaXRpY2FsOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0ZXh0cy5wdXNoKHsgb2lkOiBFWFRTLmFsdE5hbWUgfSk7XG5cdFx0aWYgKHNpZy5leHRyYXMgJiYgc2lnLmV4dHJhcy5leHRzKVxuXHRcdFx0ZXh0cyA9IHNpZy5leHRyYXMuZXh0cztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7ICsraSkge1xuXHRcdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblx0XHRcdGRlci53cml0ZU9JRChleHRzW2ldLm9pZCk7XG5cblx0XHRcdGlmIChleHRzW2ldLmNyaXRpY2FsICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdGRlci53cml0ZUJvb2xlYW4oZXh0c1tpXS5jcml0aWNhbCk7XG5cblx0XHRcdGlmIChleHRzW2ldLm9pZCA9PT0gRVhUUy5hbHROYW1lKSB7XG5cdFx0XHRcdGRlci5zdGFydFNlcXVlbmNlKGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblx0XHRcdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblx0XHRcdFx0aWYgKHN1YmplY3QudHlwZSA9PT0gJ2hvc3QnKSB7XG5cdFx0XHRcdFx0ZGVyLndyaXRlU3RyaW5nKHN1YmplY3QuaG9zdG5hbWUsXG5cdFx0XHRcdFx0ICAgIENvbnRleHQoMikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgYWx0TmFtZXMubGVuZ3RoOyArK2opIHtcblx0XHRcdFx0XHRpZiAoYWx0TmFtZXNbal0udHlwZSA9PT0gJ2hvc3QnKSB7XG5cdFx0XHRcdFx0XHRkZXIud3JpdGVTdHJpbmcoXG5cdFx0XHRcdFx0XHQgICAgYWx0TmFtZXNbal0uaG9zdG5hbWUsXG5cdFx0XHRcdFx0XHQgICAgQUxUTkFNRS5ETlNOYW1lKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFsdE5hbWVzW2pdLnR5cGUgPT09XG5cdFx0XHRcdFx0ICAgICdlbWFpbCcpIHtcblx0XHRcdFx0XHRcdGRlci53cml0ZVN0cmluZyhcblx0XHRcdFx0XHRcdCAgICBhbHROYW1lc1tqXS5lbWFpbCxcblx0XHRcdFx0XHRcdCAgICBBTFROQU1FLlJGQzgyMk5hbWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvKlxuXHRcdFx0XHRcdFx0ICogRW5jb2RlIGFueXRoaW5nIGVsc2UgYXMgYVxuXHRcdFx0XHRcdFx0ICogRE4gc3R5bGUgbmFtZSBmb3Igbm93LlxuXHRcdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0XHRkZXIuc3RhcnRTZXF1ZW5jZShcblx0XHRcdFx0XHRcdCAgICBBTFROQU1FLkRpcmVjdG9yeU5hbWUpO1xuXHRcdFx0XHRcdFx0YWx0TmFtZXNbal0udG9Bc24xKGRlcik7XG5cdFx0XHRcdFx0XHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdFx0XHRcdGRlci5lbmRTZXF1ZW5jZSgpO1xuXHRcdFx0fSBlbHNlIGlmIChleHRzW2ldLm9pZCA9PT0gRVhUUy5iYXNpY0NvbnN0cmFpbnRzKSB7XG5cdFx0XHRcdGRlci5zdGFydFNlcXVlbmNlKGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblx0XHRcdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblx0XHRcdFx0dmFyIGNhID0gKGNlcnQucHVycG9zZXMuaW5kZXhPZignY2EnKSAhPT0gLTEpO1xuXHRcdFx0XHR2YXIgcGF0aExlbiA9IGV4dHNbaV0ucGF0aExlbjtcblx0XHRcdFx0ZGVyLndyaXRlQm9vbGVhbihjYSk7XG5cdFx0XHRcdGlmIChwYXRoTGVuICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0ZGVyLndyaXRlSW50KHBhdGhMZW4pO1xuXHRcdFx0XHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0XHRcdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGV4dHNbaV0ub2lkID09PSBFWFRTLmV4dEtleVVzYWdlKSB7XG5cdFx0XHRcdGRlci5zdGFydFNlcXVlbmNlKGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblx0XHRcdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblx0XHRcdFx0Y2VydC5wdXJwb3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChwdXJwb3NlKSB7XG5cdFx0XHRcdFx0aWYgKHB1cnBvc2UgPT09ICdjYScpXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0aWYgKEtFWVVTRUJJVFMuaW5kZXhPZihwdXJwb3NlKSAhPT0gLTEpXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0dmFyIG9pZCA9IHB1cnBvc2U7XG5cdFx0XHRcdFx0aWYgKEVYVFBVUlBPU0VbcHVycG9zZV0gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdG9pZCA9IEVYVFBVUlBPU0VbcHVycG9zZV07XG5cdFx0XHRcdFx0ZGVyLndyaXRlT0lEKG9pZCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0XHRcdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGV4dHNbaV0ub2lkID09PSBFWFRTLmtleVVzYWdlKSB7XG5cdFx0XHRcdGRlci5zdGFydFNlcXVlbmNlKGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblx0XHRcdFx0Lypcblx0XHRcdFx0ICogSWYgd2UgcGFyc2VkIHRoaXMgY2VydGlmaWNhdGUgZnJvbSBhIGJ5dGVcblx0XHRcdFx0ICogc3RyZWFtIChpLmUuIHdlIGRpZG4ndCBnZW5lcmF0ZSBpdCBpbiBzc2hwaylcblx0XHRcdFx0ICogdGhlbiB3ZSdsbCBoYXZlIGEgXCIuYml0c1wiIHByb3BlcnR5IG9uIHRoZVxuXHRcdFx0XHQgKiBleHQgd2l0aCB0aGUgb3JpZ2luYWwgcmF3IGJ5dGUgY29udGVudHMuXG5cdFx0XHRcdCAqXG5cdFx0XHRcdCAqIElmIHdlIGhhdmUgdGhpcywgdXNlIGl0IGhlcmUgaW5zdGVhZCBvZlxuXHRcdFx0XHQgKiByZWdlbmVyYXRpbmcgaXQuIFRoaXMgZ3VhcmFudGVlcyB3ZSBvdXRwdXRcblx0XHRcdFx0ICogdGhlIHNhbWUgZGF0YSB3ZSBwYXJzZWQsIHNvIHNpZ25hdHVyZXMgc3RpbGxcblx0XHRcdFx0ICogdmFsaWRhdGUuXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRpZiAoZXh0c1tpXS5iaXRzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRkZXIud3JpdGVCdWZmZXIoZXh0c1tpXS5iaXRzLFxuXHRcdFx0XHRcdCAgICBhc24xLkJlci5CaXRTdHJpbmcpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBiaXRzID0gd3JpdGVCaXRGaWVsZChjZXJ0LnB1cnBvc2VzLFxuXHRcdFx0XHRcdCAgICBLRVlVU0VCSVRTKTtcblx0XHRcdFx0XHRkZXIud3JpdGVCdWZmZXIoYml0cyxcblx0XHRcdFx0XHQgICAgYXNuMS5CZXIuQml0U3RyaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlci53cml0ZUJ1ZmZlcihleHRzW2ldLmRhdGEsXG5cdFx0XHRcdCAgICBhc24xLkJlci5PY3RldFN0cmluZyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlci5lbmRTZXF1ZW5jZSgpO1xuXHRcdH1cblxuXHRcdGRlci5lbmRTZXF1ZW5jZSgpO1xuXHRcdGRlci5lbmRTZXF1ZW5jZSgpO1xuXHR9XG5cblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG59XG5cbi8qXG4gKiBSZWFkcyBhbiBBU04uMSBCRVIgYml0ZmllbGQgb3V0IG9mIHRoZSBCdWZmZXIgcHJvZHVjZWQgYnkgZG9pbmdcbiAqIGBCZXJSZWFkZXIjcmVhZFN0cmluZyhhc24xLkJlci5CaXRTdHJpbmcpYC4gVGhhdCBmdW5jdGlvbiBnaXZlcyB1cyB0aGUgcmF3XG4gKiBjb250ZW50cyBvZiB0aGUgQml0U3RyaW5nIHRhZywgd2hpY2ggaXMgYSBjb3VudCBvZiB1bnVzZWQgYml0cyBmb2xsb3dlZCBieVxuICogdGhlIGJpdHMgYXMgYSByaWdodC1wYWRkZWQgYnl0ZSBzdHJpbmcuXG4gKlxuICogYGJpdHNgIGlzIHRoZSBCdWZmZXIsIGBiaXRJbmRleGAgc2hvdWxkIGNvbnRhaW4gYW4gYXJyYXkgb2Ygc3RyaW5nIG5hbWVzXG4gKiBmb3IgdGhlIGJpdHMgaW4gdGhlIHN0cmluZywgb3JkZXJlZCBzdGFydGluZyB3aXRoIGJpdCAjMCBpbiB0aGUgQVNOLjEgc3BlYy5cbiAqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIFN0cmluZ3MsIHRoZSBuYW1lcyBvZiB0aGUgYml0cyB0aGF0IHdlcmUgc2V0IHRvIDEuXG4gKi9cbmZ1bmN0aW9uIHJlYWRCaXRGaWVsZChiaXRzLCBiaXRJbmRleCkge1xuXHR2YXIgYml0TGVuID0gOCAqIChiaXRzLmxlbmd0aCAtIDEpIC0gYml0c1swXTtcblx0dmFyIHNldEJpdHMgPSB7fTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBiaXRMZW47ICsraSkge1xuXHRcdHZhciBieXRlTiA9IDEgKyBNYXRoLmZsb29yKGkgLyA4KTtcblx0XHR2YXIgYml0ID0gNyAtIChpICUgOCk7XG5cdFx0dmFyIG1hc2sgPSAxIDw8IGJpdDtcblx0XHR2YXIgYml0VmFsID0gKChiaXRzW2J5dGVOXSAmIG1hc2spICE9PSAwKTtcblx0XHR2YXIgbmFtZSA9IGJpdEluZGV4W2ldO1xuXHRcdGlmIChiaXRWYWwgJiYgdHlwZW9mIChuYW1lKSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHNldEJpdHNbbmFtZV0gPSB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gKE9iamVjdC5rZXlzKHNldEJpdHMpKTtcbn1cblxuLypcbiAqIGBzZXRCaXRzYCBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCBjb250YWluaW5nIHRoZSBuYW1lcyBmb3IgZWFjaCBiaXQgdGhhdFxuICogc291bGQgYmUgc2V0IHRvIDEuIGBiaXRJbmRleGAgaXMgc2FtZSBhcyBpbiBgcmVhZEJpdEZpZWxkKClgLlxuICpcbiAqIFJldHVybnMgYSBCdWZmZXIsIHJlYWR5IHRvIGJlIHdyaXR0ZW4gb3V0IHdpdGggYEJlcldyaXRlciN3cml0ZVN0cmluZygpYC5cbiAqL1xuZnVuY3Rpb24gd3JpdGVCaXRGaWVsZChzZXRCaXRzLCBiaXRJbmRleCkge1xuXHR2YXIgYml0TGVuID0gYml0SW5kZXgubGVuZ3RoO1xuXHR2YXIgYmxlbiA9IE1hdGguY2VpbChiaXRMZW4gLyA4KTtcblx0dmFyIHVudXNlZCA9IGJsZW4gKiA4IC0gYml0TGVuO1xuXHR2YXIgYml0cyA9IG5ldyBCdWZmZXIoMSArIGJsZW4pO1xuXHRiaXRzLmZpbGwoMCk7XG5cdGJpdHNbMF0gPSB1bnVzZWQ7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYml0TGVuOyArK2kpIHtcblx0XHR2YXIgYnl0ZU4gPSAxICsgTWF0aC5mbG9vcihpIC8gOCk7XG5cdFx0dmFyIGJpdCA9IDcgLSAoaSAlIDgpO1xuXHRcdHZhciBtYXNrID0gMSA8PCBiaXQ7XG5cdFx0dmFyIG5hbWUgPSBiaXRJbmRleFtpXTtcblx0XHRpZiAobmFtZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y29udGludWU7XG5cdFx0dmFyIGJpdFZhbCA9IChzZXRCaXRzLmluZGV4T2YobmFtZSkgIT09IC0xKTtcblx0XHRpZiAoYml0VmFsKSB7XG5cdFx0XHRiaXRzW2J5dGVOXSB8PSBtYXNrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gKGJpdHMpO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTcgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0gSWRlbnRpdHk7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIGFsZ3MgPSByZXF1aXJlKCcuL2FsZ3MnKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBGaW5nZXJwcmludCA9IHJlcXVpcmUoJy4vZmluZ2VycHJpbnQnKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuL3NpZ25hdHVyZScpO1xudmFyIGVycnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNuMSA9IHJlcXVpcmUoJ2FzbjEnKTtcblxuLypKU1NUWUxFRCovXG52YXIgRE5TX05BTUVfUkUgPSAvXihbKl18W2EtejAtOV1bYS16MC05XFwtXXswLDYyfSkoPzpcXC4oWypdfFthLXowLTldW2EtejAtOVxcLV17MCw2Mn0pKSokL2k7XG5cbnZhciBvaWRzID0ge307XG5vaWRzLmNuID0gJzIuNS40LjMnO1xub2lkcy5vID0gJzIuNS40LjEwJztcbm9pZHMub3UgPSAnMi41LjQuMTEnO1xub2lkcy5sID0gJzIuNS40LjcnO1xub2lkcy5zID0gJzIuNS40LjgnO1xub2lkcy5jID0gJzIuNS40LjYnO1xub2lkcy5zbiA9ICcyLjUuNC40Jztcbm9pZHMuZGMgPSAnMC45LjIzNDIuMTkyMDAzMDAuMTAwLjEuMjUnO1xub2lkcy51aWQgPSAnMC45LjIzNDIuMTkyMDAzMDAuMTAwLjEuMSc7XG5vaWRzLm1haWwgPSAnMC45LjIzNDIuMTkyMDAzMDAuMTAwLjEuMyc7XG5cbnZhciB1bm9pZHMgPSB7fTtcbk9iamVjdC5rZXlzKG9pZHMpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcblx0dW5vaWRzW29pZHNba11dID0gaztcbn0pO1xuXG5mdW5jdGlvbiBJZGVudGl0eShvcHRzKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblx0YXNzZXJ0Lm9iamVjdChvcHRzLCAnb3B0aW9ucycpO1xuXHRhc3NlcnQuYXJyYXlPZk9iamVjdChvcHRzLmNvbXBvbmVudHMsICdvcHRpb25zLmNvbXBvbmVudHMnKTtcblx0dGhpcy5jb21wb25lbnRzID0gb3B0cy5jb21wb25lbnRzO1xuXHR0aGlzLmNvbXBvbmVudExvb2t1cCA9IHt9O1xuXHR0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuXHRcdGlmIChjLm5hbWUgJiYgIWMub2lkKVxuXHRcdFx0Yy5vaWQgPSBvaWRzW2MubmFtZV07XG5cdFx0aWYgKGMub2lkICYmICFjLm5hbWUpXG5cdFx0XHRjLm5hbWUgPSB1bm9pZHNbYy5vaWRdO1xuXHRcdGlmIChzZWxmLmNvbXBvbmVudExvb2t1cFtjLm5hbWVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRzZWxmLmNvbXBvbmVudExvb2t1cFtjLm5hbWVdID0gW107XG5cdFx0c2VsZi5jb21wb25lbnRMb29rdXBbYy5uYW1lXS5wdXNoKGMpO1xuXHR9KTtcblx0aWYgKHRoaXMuY29tcG9uZW50TG9va3VwLmNuICYmIHRoaXMuY29tcG9uZW50TG9va3VwLmNuLmxlbmd0aCA+IDApIHtcblx0XHR0aGlzLmNuID0gdGhpcy5jb21wb25lbnRMb29rdXAuY25bMF0udmFsdWU7XG5cdH1cblx0YXNzZXJ0Lm9wdGlvbmFsU3RyaW5nKG9wdHMudHlwZSwgJ29wdGlvbnMudHlwZScpO1xuXHRpZiAob3B0cy50eXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRpZiAodGhpcy5jb21wb25lbnRzLmxlbmd0aCA9PT0gMSAmJlxuXHRcdCAgICB0aGlzLmNvbXBvbmVudExvb2t1cC5jbiAmJlxuXHRcdCAgICB0aGlzLmNvbXBvbmVudExvb2t1cC5jbi5sZW5ndGggPT09IDEgJiZcblx0XHQgICAgdGhpcy5jb21wb25lbnRMb29rdXAuY25bMF0udmFsdWUubWF0Y2goRE5TX05BTUVfUkUpKSB7XG5cdFx0XHR0aGlzLnR5cGUgPSAnaG9zdCc7XG5cdFx0XHR0aGlzLmhvc3RuYW1lID0gdGhpcy5jb21wb25lbnRMb29rdXAuY25bMF0udmFsdWU7XG5cblx0XHR9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50TG9va3VwLmRjICYmXG5cdFx0ICAgIHRoaXMuY29tcG9uZW50cy5sZW5ndGggPT09IHRoaXMuY29tcG9uZW50TG9va3VwLmRjLmxlbmd0aCkge1xuXHRcdFx0dGhpcy50eXBlID0gJ2hvc3QnO1xuXHRcdFx0dGhpcy5ob3N0bmFtZSA9IHRoaXMuY29tcG9uZW50TG9va3VwLmRjLm1hcChcblx0XHRcdCAgICBmdW5jdGlvbiAoYykge1xuXHRcdFx0XHRyZXR1cm4gKGMudmFsdWUpO1xuXHRcdFx0fSkuam9pbignLicpO1xuXG5cdFx0fSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudExvb2t1cC51aWQgJiZcblx0XHQgICAgdGhpcy5jb21wb25lbnRzLmxlbmd0aCA9PT1cblx0XHQgICAgdGhpcy5jb21wb25lbnRMb29rdXAudWlkLmxlbmd0aCkge1xuXHRcdFx0dGhpcy50eXBlID0gJ3VzZXInO1xuXHRcdFx0dGhpcy51aWQgPSB0aGlzLmNvbXBvbmVudExvb2t1cC51aWRbMF0udmFsdWU7XG5cblx0XHR9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50TG9va3VwLmNuICYmXG5cdFx0ICAgIHRoaXMuY29tcG9uZW50TG9va3VwLmNuLmxlbmd0aCA9PT0gMSAmJlxuXHRcdCAgICB0aGlzLmNvbXBvbmVudExvb2t1cC5jblswXS52YWx1ZS5tYXRjaChETlNfTkFNRV9SRSkpIHtcblx0XHRcdHRoaXMudHlwZSA9ICdob3N0Jztcblx0XHRcdHRoaXMuaG9zdG5hbWUgPSB0aGlzLmNvbXBvbmVudExvb2t1cC5jblswXS52YWx1ZTtcblxuXHRcdH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRMb29rdXAudWlkICYmXG5cdFx0ICAgIHRoaXMuY29tcG9uZW50TG9va3VwLnVpZC5sZW5ndGggPT09IDEpIHtcblx0XHRcdHRoaXMudHlwZSA9ICd1c2VyJztcblx0XHRcdHRoaXMudWlkID0gdGhpcy5jb21wb25lbnRMb29rdXAudWlkWzBdLnZhbHVlO1xuXG5cdFx0fSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudExvb2t1cC5tYWlsICYmXG5cdFx0ICAgIHRoaXMuY29tcG9uZW50TG9va3VwLm1haWwubGVuZ3RoID09PSAxKSB7XG5cdFx0XHR0aGlzLnR5cGUgPSAnZW1haWwnO1xuXHRcdFx0dGhpcy5lbWFpbCA9IHRoaXMuY29tcG9uZW50TG9va3VwLm1haWxbMF0udmFsdWU7XG5cblx0XHR9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50TG9va3VwLmNuICYmXG5cdFx0ICAgIHRoaXMuY29tcG9uZW50TG9va3VwLmNuLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0dGhpcy50eXBlID0gJ3VzZXInO1xuXHRcdFx0dGhpcy51aWQgPSB0aGlzLmNvbXBvbmVudExvb2t1cC5jblswXS52YWx1ZTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnR5cGUgPSAndW5rbm93bic7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IG9wdHMudHlwZTtcblx0XHRpZiAodGhpcy50eXBlID09PSAnaG9zdCcpXG5cdFx0XHR0aGlzLmhvc3RuYW1lID0gb3B0cy5ob3N0bmFtZTtcblx0XHRlbHNlIGlmICh0aGlzLnR5cGUgPT09ICd1c2VyJylcblx0XHRcdHRoaXMudWlkID0gb3B0cy51aWQ7XG5cdFx0ZWxzZSBpZiAodGhpcy50eXBlID09PSAnZW1haWwnKVxuXHRcdFx0dGhpcy5lbWFpbCA9IG9wdHMuZW1haWw7XG5cdFx0ZWxzZVxuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcignVW5rbm93biB0eXBlICcgKyB0aGlzLnR5cGUpKTtcblx0fVxufVxuXG5JZGVudGl0eS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiAodGhpcy5jb21wb25lbnRzLm1hcChmdW5jdGlvbiAoYykge1xuXHRcdHJldHVybiAoYy5uYW1lLnRvVXBwZXJDYXNlKCkgKyAnPScgKyBjLnZhbHVlKTtcblx0fSkuam9pbignLCAnKSk7XG59O1xuXG4vKlxuICogVGhlc2UgYXJlIGZyb20gWC42ODAgLS0gUHJpbnRhYmxlU3RyaW5nIGFsbG93ZWQgY2hhcnMgYXJlIGluIHNlY3Rpb24gMzcuNFxuICogdGFibGUgOC4gU3BlYyBmb3IgSUE1U3RyaW5ncyBpcyBcIjEsNiArIFNQQUNFICsgREVMXCIgd2hlcmUgMSByZWZlcnMgdG9cbiAqIElTTyBJUiAjMDAxIChzdGFuZGFyZCBBU0NJSSBjb250cm9sIGNoYXJhY3RlcnMpIGFuZCA2IHJlZmVycyB0byBJU08gSVIgIzAwNlxuICogKHRoZSBiYXNpYyBBU0NJSSBjaGFyYWN0ZXIgc2V0KS5cbiAqL1xuLyogSlNTVFlMRUQgKi9cbnZhciBOT1RfUFJJTlRBQkxFID0gL1teYS16QS1aMC05ICcoKSwrLlxcLzo9Py1dLztcbi8qIEpTU1RZTEVEICovXG52YXIgTk9UX0lBNSA9IC9bXlxceDAwLVxceDdmXS87XG5cbklkZW50aXR5LnByb3RvdHlwZS50b0FzbjEgPSBmdW5jdGlvbiAoZGVyLCB0YWcpIHtcblx0ZGVyLnN0YXJ0U2VxdWVuY2UodGFnKTtcblx0dGhpcy5jb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcblx0XHRkZXIuc3RhcnRTZXF1ZW5jZShhc24xLkJlci5Db25zdHJ1Y3RvciB8IGFzbjEuQmVyLlNldCk7XG5cdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblx0XHRkZXIud3JpdGVPSUQoYy5vaWQpO1xuXHRcdC8qXG5cdFx0ICogSWYgd2UgZml0IGluIGEgUHJpbnRhYmxlU3RyaW5nLCB1c2UgdGhhdC4gT3RoZXJ3aXNlIHVzZSBhblxuXHRcdCAqIElBNVN0cmluZyBvciBVVEY4U3RyaW5nLlxuXHRcdCAqL1xuXHRcdGlmIChjLnZhbHVlLm1hdGNoKE5PVF9JQTUpKSB7XG5cdFx0XHR2YXIgdiA9IG5ldyBCdWZmZXIoYy52YWx1ZSwgJ3V0ZjgnKTtcblx0XHRcdGRlci53cml0ZUJ1ZmZlcih2LCBhc24xLkJlci5VdGY4U3RyaW5nKTtcblx0XHR9IGVsc2UgaWYgKGMudmFsdWUubWF0Y2goTk9UX1BSSU5UQUJMRSkpIHtcblx0XHRcdGRlci53cml0ZVN0cmluZyhjLnZhbHVlLCBhc24xLkJlci5JQTVTdHJpbmcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZXIud3JpdGVTdHJpbmcoYy52YWx1ZSwgYXNuMS5CZXIuUHJpbnRhYmxlU3RyaW5nKTtcblx0XHR9XG5cdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdH0pO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcbn07XG5cbmZ1bmN0aW9uIGdsb2JNYXRjaChhLCBiKSB7XG5cdGlmIChhID09PSAnKionIHx8IGIgPT09ICcqKicpXG5cdFx0cmV0dXJuICh0cnVlKTtcblx0dmFyIGFQYXJ0cyA9IGEuc3BsaXQoJy4nKTtcblx0dmFyIGJQYXJ0cyA9IGIuc3BsaXQoJy4nKTtcblx0aWYgKGFQYXJ0cy5sZW5ndGggIT09IGJQYXJ0cy5sZW5ndGgpXG5cdFx0cmV0dXJuIChmYWxzZSk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYVBhcnRzLmxlbmd0aDsgKytpKSB7XG5cdFx0aWYgKGFQYXJ0c1tpXSA9PT0gJyonIHx8IGJQYXJ0c1tpXSA9PT0gJyonKVxuXHRcdFx0Y29udGludWU7XG5cdFx0aWYgKGFQYXJ0c1tpXSAhPT0gYlBhcnRzW2ldKVxuXHRcdFx0cmV0dXJuIChmYWxzZSk7XG5cdH1cblx0cmV0dXJuICh0cnVlKTtcbn1cblxuSWRlbnRpdHkucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuXHRpZiAoIUlkZW50aXR5LmlzSWRlbnRpdHkob3RoZXIsIFsxLCAwXSkpXG5cdFx0cmV0dXJuIChmYWxzZSk7XG5cdGlmIChvdGhlci5jb21wb25lbnRzLmxlbmd0aCAhPT0gdGhpcy5jb21wb25lbnRzLmxlbmd0aClcblx0XHRyZXR1cm4gKGZhbHNlKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbXBvbmVudHMubGVuZ3RoOyArK2kpIHtcblx0XHRpZiAodGhpcy5jb21wb25lbnRzW2ldLm9pZCAhPT0gb3RoZXIuY29tcG9uZW50c1tpXS5vaWQpXG5cdFx0XHRyZXR1cm4gKGZhbHNlKTtcblx0XHRpZiAoIWdsb2JNYXRjaCh0aGlzLmNvbXBvbmVudHNbaV0udmFsdWUsXG5cdFx0ICAgIG90aGVyLmNvbXBvbmVudHNbaV0udmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gKGZhbHNlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuICh0cnVlKTtcbn07XG5cbklkZW50aXR5LmZvckhvc3QgPSBmdW5jdGlvbiAoaG9zdG5hbWUpIHtcblx0YXNzZXJ0LnN0cmluZyhob3N0bmFtZSwgJ2hvc3RuYW1lJyk7XG5cdHJldHVybiAobmV3IElkZW50aXR5KHtcblx0XHR0eXBlOiAnaG9zdCcsXG5cdFx0aG9zdG5hbWU6IGhvc3RuYW1lLFxuXHRcdGNvbXBvbmVudHM6IFsgeyBuYW1lOiAnY24nLCB2YWx1ZTogaG9zdG5hbWUgfSBdXG5cdH0pKTtcbn07XG5cbklkZW50aXR5LmZvclVzZXIgPSBmdW5jdGlvbiAodWlkKSB7XG5cdGFzc2VydC5zdHJpbmcodWlkLCAndWlkJyk7XG5cdHJldHVybiAobmV3IElkZW50aXR5KHtcblx0XHR0eXBlOiAndXNlcicsXG5cdFx0dWlkOiB1aWQsXG5cdFx0Y29tcG9uZW50czogWyB7IG5hbWU6ICd1aWQnLCB2YWx1ZTogdWlkIH0gXVxuXHR9KSk7XG59O1xuXG5JZGVudGl0eS5mb3JFbWFpbCA9IGZ1bmN0aW9uIChlbWFpbCkge1xuXHRhc3NlcnQuc3RyaW5nKGVtYWlsLCAnZW1haWwnKTtcblx0cmV0dXJuIChuZXcgSWRlbnRpdHkoe1xuXHRcdHR5cGU6ICdlbWFpbCcsXG5cdFx0ZW1haWw6IGVtYWlsLFxuXHRcdGNvbXBvbmVudHM6IFsgeyBuYW1lOiAnbWFpbCcsIHZhbHVlOiBlbWFpbCB9IF1cblx0fSkpO1xufTtcblxuSWRlbnRpdHkucGFyc2VETiA9IGZ1bmN0aW9uIChkbikge1xuXHRhc3NlcnQuc3RyaW5nKGRuLCAnZG4nKTtcblx0dmFyIHBhcnRzID0gZG4uc3BsaXQoJywnKTtcblx0dmFyIGNtcHMgPSBwYXJ0cy5tYXAoZnVuY3Rpb24gKGMpIHtcblx0XHRjID0gYy50cmltKCk7XG5cdFx0dmFyIGVxUG9zID0gYy5pbmRleE9mKCc9Jyk7XG5cdFx0dmFyIG5hbWUgPSBjLnNsaWNlKDAsIGVxUG9zKS50b0xvd2VyQ2FzZSgpO1xuXHRcdHZhciB2YWx1ZSA9IGMuc2xpY2UoZXFQb3MgKyAxKTtcblx0XHRyZXR1cm4gKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pO1xuXHR9KTtcblx0cmV0dXJuIChuZXcgSWRlbnRpdHkoeyBjb21wb25lbnRzOiBjbXBzIH0pKTtcbn07XG5cbklkZW50aXR5LnBhcnNlQXNuMSA9IGZ1bmN0aW9uIChkZXIsIHRvcCkge1xuXHR2YXIgY29tcG9uZW50cyA9IFtdO1xuXHRkZXIucmVhZFNlcXVlbmNlKHRvcCk7XG5cdHZhciBlbmQgPSBkZXIub2Zmc2V0ICsgZGVyLmxlbmd0aDtcblx0d2hpbGUgKGRlci5vZmZzZXQgPCBlbmQpIHtcblx0XHRkZXIucmVhZFNlcXVlbmNlKGFzbjEuQmVyLkNvbnN0cnVjdG9yIHwgYXNuMS5CZXIuU2V0KTtcblx0XHR2YXIgYWZ0ZXIgPSBkZXIub2Zmc2V0ICsgZGVyLmxlbmd0aDtcblx0XHRkZXIucmVhZFNlcXVlbmNlKCk7XG5cdFx0dmFyIG9pZCA9IGRlci5yZWFkT0lEKCk7XG5cdFx0dmFyIHR5cGUgPSBkZXIucGVlaygpO1xuXHRcdHZhciB2YWx1ZTtcblx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRjYXNlIGFzbjEuQmVyLlByaW50YWJsZVN0cmluZzpcblx0XHRjYXNlIGFzbjEuQmVyLklBNVN0cmluZzpcblx0XHRjYXNlIGFzbjEuQmVyLk9jdGV0U3RyaW5nOlxuXHRcdGNhc2UgYXNuMS5CZXIuVDYxU3RyaW5nOlxuXHRcdFx0dmFsdWUgPSBkZXIucmVhZFN0cmluZyh0eXBlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgYXNuMS5CZXIuVXRmOFN0cmluZzpcblx0XHRcdHZhbHVlID0gZGVyLnJlYWRTdHJpbmcodHlwZSwgdHJ1ZSk7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCd1dGY4Jyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIGFzbjEuQmVyLkNoYXJhY3RlclN0cmluZzpcblx0XHRjYXNlIGFzbjEuQmVyLkJNUFN0cmluZzpcblx0XHRcdHZhbHVlID0gZGVyLnJlYWRTdHJpbmcodHlwZSwgdHJ1ZSk7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCd1dGYxNmxlJyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcignVW5rbm93biBhc24xIHR5cGUgJyArIHR5cGUpKTtcblx0XHR9XG5cdFx0Y29tcG9uZW50cy5wdXNoKHsgb2lkOiBvaWQsIHZhbHVlOiB2YWx1ZSB9KTtcblx0XHRkZXIuX29mZnNldCA9IGFmdGVyO1xuXHR9XG5cdGRlci5fb2Zmc2V0ID0gZW5kO1xuXHRyZXR1cm4gKG5ldyBJZGVudGl0eSh7XG5cdFx0Y29tcG9uZW50czogY29tcG9uZW50c1xuXHR9KSk7XG59O1xuXG5JZGVudGl0eS5pc0lkZW50aXR5ID0gZnVuY3Rpb24gKG9iaiwgdmVyKSB7XG5cdHJldHVybiAodXRpbHMuaXNDb21wYXRpYmxlKG9iaiwgSWRlbnRpdHksIHZlcikpO1xufTtcblxuLypcbiAqIEFQSSB2ZXJzaW9ucyBmb3IgSWRlbnRpdHk6XG4gKiBbMSwwXSAtLSBpbml0aWFsIHZlclxuICovXG5JZGVudGl0eS5wcm90b3R5cGUuX3NzaHBrQXBpVmVyc2lvbiA9IFsxLCAwXTtcblxuSWRlbnRpdHkuX29sZFZlcnNpb25EZXRlY3QgPSBmdW5jdGlvbiAob2JqKSB7XG5cdHJldHVybiAoWzEsIDBdKTtcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxNSBKb3llbnQsIEluYy5cblxudmFyIEtleSA9IHJlcXVpcmUoJy4va2V5Jyk7XG52YXIgRmluZ2VycHJpbnQgPSByZXF1aXJlKCcuL2ZpbmdlcnByaW50Jyk7XG52YXIgU2lnbmF0dXJlID0gcmVxdWlyZSgnLi9zaWduYXR1cmUnKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi9wcml2YXRlLWtleScpO1xudmFyIENlcnRpZmljYXRlID0gcmVxdWlyZSgnLi9jZXJ0aWZpY2F0ZScpO1xudmFyIElkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xudmFyIGVycnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0LyogdG9wLWxldmVsIGNsYXNzZXMgKi9cblx0S2V5OiBLZXksXG5cdHBhcnNlS2V5OiBLZXkucGFyc2UsXG5cdEZpbmdlcnByaW50OiBGaW5nZXJwcmludCxcblx0cGFyc2VGaW5nZXJwcmludDogRmluZ2VycHJpbnQucGFyc2UsXG5cdFNpZ25hdHVyZTogU2lnbmF0dXJlLFxuXHRwYXJzZVNpZ25hdHVyZTogU2lnbmF0dXJlLnBhcnNlLFxuXHRQcml2YXRlS2V5OiBQcml2YXRlS2V5LFxuXHRwYXJzZVByaXZhdGVLZXk6IFByaXZhdGVLZXkucGFyc2UsXG5cdGdlbmVyYXRlUHJpdmF0ZUtleTogUHJpdmF0ZUtleS5nZW5lcmF0ZSxcblx0Q2VydGlmaWNhdGU6IENlcnRpZmljYXRlLFxuXHRwYXJzZUNlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZS5wYXJzZSxcblx0Y3JlYXRlU2VsZlNpZ25lZENlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZS5jcmVhdGVTZWxmU2lnbmVkLFxuXHRjcmVhdGVDZXJ0aWZpY2F0ZTogQ2VydGlmaWNhdGUuY3JlYXRlLFxuXHRJZGVudGl0eTogSWRlbnRpdHksXG5cdGlkZW50aXR5RnJvbUROOiBJZGVudGl0eS5wYXJzZUROLFxuXHRpZGVudGl0eUZvckhvc3Q6IElkZW50aXR5LmZvckhvc3QsXG5cdGlkZW50aXR5Rm9yVXNlcjogSWRlbnRpdHkuZm9yVXNlcixcblx0aWRlbnRpdHlGb3JFbWFpbDogSWRlbnRpdHkuZm9yRW1haWwsXG5cblx0LyogZXJyb3JzICovXG5cdEZpbmdlcnByaW50Rm9ybWF0RXJyb3I6IGVycnMuRmluZ2VycHJpbnRGb3JtYXRFcnJvcixcblx0SW52YWxpZEFsZ29yaXRobUVycm9yOiBlcnJzLkludmFsaWRBbGdvcml0aG1FcnJvcixcblx0S2V5UGFyc2VFcnJvcjogZXJycy5LZXlQYXJzZUVycm9yLFxuXHRTaWduYXR1cmVQYXJzZUVycm9yOiBlcnJzLlNpZ25hdHVyZVBhcnNlRXJyb3IsXG5cdEtleUVuY3J5cHRlZEVycm9yOiBlcnJzLktleUVuY3J5cHRlZEVycm9yLFxuXHRDZXJ0aWZpY2F0ZVBhcnNlRXJyb3I6IGVycnMuQ2VydGlmaWNhdGVQYXJzZUVycm9yXG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTcgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0gS2V5O1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi9hbGdzJyk7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgRmluZ2VycHJpbnQgPSByZXF1aXJlKCcuL2ZpbmdlcnByaW50Jyk7XG52YXIgU2lnbmF0dXJlID0gcmVxdWlyZSgnLi9zaWduYXR1cmUnKTtcbnZhciBEaWZmaWVIZWxsbWFuID0gcmVxdWlyZSgnLi9kaGUnKS5EaWZmaWVIZWxsbWFuO1xudmFyIGVycnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuL3ByaXZhdGUta2V5Jyk7XG52YXIgZWRDb21wYXQ7XG5cbnRyeSB7XG5cdGVkQ29tcGF0ID0gcmVxdWlyZSgnLi9lZC1jb21wYXQnKTtcbn0gY2F0Y2ggKGUpIHtcblx0LyogSnVzdCBjb250aW51ZSB0aHJvdWdoLCBhbmQgYmFpbCBvdXQgaWYgd2UgdHJ5IHRvIHVzZSBpdC4gKi9cbn1cblxudmFyIEludmFsaWRBbGdvcml0aG1FcnJvciA9IGVycnMuSW52YWxpZEFsZ29yaXRobUVycm9yO1xudmFyIEtleVBhcnNlRXJyb3IgPSBlcnJzLktleVBhcnNlRXJyb3I7XG5cbnZhciBmb3JtYXRzID0ge307XG5mb3JtYXRzWydhdXRvJ10gPSByZXF1aXJlKCcuL2Zvcm1hdHMvYXV0bycpO1xuZm9ybWF0c1sncGVtJ10gPSByZXF1aXJlKCcuL2Zvcm1hdHMvcGVtJyk7XG5mb3JtYXRzWydwa2NzMSddID0gcmVxdWlyZSgnLi9mb3JtYXRzL3BrY3MxJyk7XG5mb3JtYXRzWydwa2NzOCddID0gcmVxdWlyZSgnLi9mb3JtYXRzL3BrY3M4Jyk7XG5mb3JtYXRzWydyZmM0MjUzJ10gPSByZXF1aXJlKCcuL2Zvcm1hdHMvcmZjNDI1MycpO1xuZm9ybWF0c1snc3NoJ10gPSByZXF1aXJlKCcuL2Zvcm1hdHMvc3NoJyk7XG5mb3JtYXRzWydzc2gtcHJpdmF0ZSddID0gcmVxdWlyZSgnLi9mb3JtYXRzL3NzaC1wcml2YXRlJyk7XG5mb3JtYXRzWydvcGVuc3NoJ10gPSBmb3JtYXRzWydzc2gtcHJpdmF0ZSddO1xuXG5mdW5jdGlvbiBLZXkob3B0cykge1xuXHRhc3NlcnQub2JqZWN0KG9wdHMsICdvcHRpb25zJyk7XG5cdGFzc2VydC5hcnJheU9mT2JqZWN0KG9wdHMucGFydHMsICdvcHRpb25zLnBhcnRzJyk7XG5cdGFzc2VydC5zdHJpbmcob3B0cy50eXBlLCAnb3B0aW9ucy50eXBlJyk7XG5cdGFzc2VydC5vcHRpb25hbFN0cmluZyhvcHRzLmNvbW1lbnQsICdvcHRpb25zLmNvbW1lbnQnKTtcblxuXHR2YXIgYWxnSW5mbyA9IGFsZ3MuaW5mb1tvcHRzLnR5cGVdO1xuXHRpZiAodHlwZW9mIChhbGdJbmZvKSAhPT0gJ29iamVjdCcpXG5cdFx0dGhyb3cgKG5ldyBJbnZhbGlkQWxnb3JpdGhtRXJyb3Iob3B0cy50eXBlKSk7XG5cblx0dmFyIHBhcnRMb29rdXAgPSB7fTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvcHRzLnBhcnRzLmxlbmd0aDsgKytpKSB7XG5cdFx0dmFyIHBhcnQgPSBvcHRzLnBhcnRzW2ldO1xuXHRcdHBhcnRMb29rdXBbcGFydC5uYW1lXSA9IHBhcnQ7XG5cdH1cblxuXHR0aGlzLnR5cGUgPSBvcHRzLnR5cGU7XG5cdHRoaXMucGFydHMgPSBvcHRzLnBhcnRzO1xuXHR0aGlzLnBhcnQgPSBwYXJ0TG9va3VwO1xuXHR0aGlzLmNvbW1lbnQgPSB1bmRlZmluZWQ7XG5cdHRoaXMuc291cmNlID0gb3B0cy5zb3VyY2U7XG5cblx0LyogZm9yIHNwZWVkaW5nIHVwIGhhc2hpbmcvZmluZ2VycHJpbnQgb3BlcmF0aW9ucyAqL1xuXHR0aGlzLl9yZmM0MjUzQ2FjaGUgPSBvcHRzLl9yZmM0MjUzQ2FjaGU7XG5cdHRoaXMuX2hhc2hDYWNoZSA9IHt9O1xuXG5cdHZhciBzejtcblx0dGhpcy5jdXJ2ZSA9IHVuZGVmaW5lZDtcblx0aWYgKHRoaXMudHlwZSA9PT0gJ2VjZHNhJykge1xuXHRcdHZhciBjdXJ2ZSA9IHRoaXMucGFydC5jdXJ2ZS5kYXRhLnRvU3RyaW5nKCk7XG5cdFx0dGhpcy5jdXJ2ZSA9IGN1cnZlO1xuXHRcdHN6ID0gYWxncy5jdXJ2ZXNbY3VydmVdLnNpemU7XG5cdH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnZWQyNTUxOScpIHtcblx0XHRzeiA9IDI1Njtcblx0XHR0aGlzLmN1cnZlID0gJ2N1cnZlMjU1MTknO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzelBhcnQgPSB0aGlzLnBhcnRbYWxnSW5mby5zaXplUGFydF07XG5cdFx0c3ogPSBzelBhcnQuZGF0YS5sZW5ndGg7XG5cdFx0c3ogPSBzeiAqIDggLSB1dGlscy5jb3VudFplcm9zKHN6UGFydC5kYXRhKTtcblx0fVxuXHR0aGlzLnNpemUgPSBzejtcbn1cblxuS2V5LmZvcm1hdHMgPSBmb3JtYXRzO1xuXG5LZXkucHJvdG90eXBlLnRvQnVmZmVyID0gZnVuY3Rpb24gKGZvcm1hdCwgb3B0aW9ucykge1xuXHRpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpXG5cdFx0Zm9ybWF0ID0gJ3NzaCc7XG5cdGFzc2VydC5zdHJpbmcoZm9ybWF0LCAnZm9ybWF0Jyk7XG5cdGFzc2VydC5vYmplY3QoZm9ybWF0c1tmb3JtYXRdLCAnZm9ybWF0c1tmb3JtYXRdJyk7XG5cdGFzc2VydC5vcHRpb25hbE9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpO1xuXG5cdGlmIChmb3JtYXQgPT09ICdyZmM0MjUzJykge1xuXHRcdGlmICh0aGlzLl9yZmM0MjUzQ2FjaGUgPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuX3JmYzQyNTNDYWNoZSA9IGZvcm1hdHNbJ3JmYzQyNTMnXS53cml0ZSh0aGlzKTtcblx0XHRyZXR1cm4gKHRoaXMuX3JmYzQyNTNDYWNoZSk7XG5cdH1cblxuXHRyZXR1cm4gKGZvcm1hdHNbZm9ybWF0XS53cml0ZSh0aGlzLCBvcHRpb25zKSk7XG59O1xuXG5LZXkucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGZvcm1hdCwgb3B0aW9ucykge1xuXHRyZXR1cm4gKHRoaXMudG9CdWZmZXIoZm9ybWF0LCBvcHRpb25zKS50b1N0cmluZygpKTtcbn07XG5cbktleS5wcm90b3R5cGUuaGFzaCA9IGZ1bmN0aW9uIChhbGdvKSB7XG5cdGFzc2VydC5zdHJpbmcoYWxnbywgJ2FsZ29yaXRobScpO1xuXHRhbGdvID0gYWxnby50b0xvd2VyQ2FzZSgpO1xuXHRpZiAoYWxncy5oYXNoQWxnc1thbGdvXSA9PT0gdW5kZWZpbmVkKVxuXHRcdHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKGFsZ28pKTtcblxuXHRpZiAodGhpcy5faGFzaENhY2hlW2FsZ29dKVxuXHRcdHJldHVybiAodGhpcy5faGFzaENhY2hlW2FsZ29dKTtcblxuXHR2YXIgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ28pLlxuXHQgICAgdXBkYXRlKHRoaXMudG9CdWZmZXIoJ3JmYzQyNTMnKSkuZGlnZXN0KCk7XG5cdHRoaXMuX2hhc2hDYWNoZVthbGdvXSA9IGhhc2g7XG5cdHJldHVybiAoaGFzaCk7XG59O1xuXG5LZXkucHJvdG90eXBlLmZpbmdlcnByaW50ID0gZnVuY3Rpb24gKGFsZ28pIHtcblx0aWYgKGFsZ28gPT09IHVuZGVmaW5lZClcblx0XHRhbGdvID0gJ3NoYTI1Nic7XG5cdGFzc2VydC5zdHJpbmcoYWxnbywgJ2FsZ29yaXRobScpO1xuXHR2YXIgb3B0cyA9IHtcblx0XHR0eXBlOiAna2V5Jyxcblx0XHRoYXNoOiB0aGlzLmhhc2goYWxnbyksXG5cdFx0YWxnb3JpdGhtOiBhbGdvXG5cdH07XG5cdHJldHVybiAobmV3IEZpbmdlcnByaW50KG9wdHMpKTtcbn07XG5cbktleS5wcm90b3R5cGUuZGVmYXVsdEhhc2hBbGdvcml0aG0gPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBoYXNoQWxnbyA9ICdzaGExJztcblx0aWYgKHRoaXMudHlwZSA9PT0gJ3JzYScpXG5cdFx0aGFzaEFsZ28gPSAnc2hhMjU2Jztcblx0aWYgKHRoaXMudHlwZSA9PT0gJ2RzYScgJiYgdGhpcy5zaXplID4gMTAyNClcblx0XHRoYXNoQWxnbyA9ICdzaGEyNTYnO1xuXHRpZiAodGhpcy50eXBlID09PSAnZWQyNTUxOScpXG5cdFx0aGFzaEFsZ28gPSAnc2hhNTEyJztcblx0aWYgKHRoaXMudHlwZSA9PT0gJ2VjZHNhJykge1xuXHRcdGlmICh0aGlzLnNpemUgPD0gMjU2KVxuXHRcdFx0aGFzaEFsZ28gPSAnc2hhMjU2Jztcblx0XHRlbHNlIGlmICh0aGlzLnNpemUgPD0gMzg0KVxuXHRcdFx0aGFzaEFsZ28gPSAnc2hhMzg0Jztcblx0XHRlbHNlXG5cdFx0XHRoYXNoQWxnbyA9ICdzaGE1MTInO1xuXHR9XG5cdHJldHVybiAoaGFzaEFsZ28pO1xufTtcblxuS2V5LnByb3RvdHlwZS5jcmVhdGVWZXJpZnkgPSBmdW5jdGlvbiAoaGFzaEFsZ28pIHtcblx0aWYgKGhhc2hBbGdvID09PSB1bmRlZmluZWQpXG5cdFx0aGFzaEFsZ28gPSB0aGlzLmRlZmF1bHRIYXNoQWxnb3JpdGhtKCk7XG5cdGFzc2VydC5zdHJpbmcoaGFzaEFsZ28sICdoYXNoIGFsZ29yaXRobScpO1xuXG5cdC8qIEVEMjU1MTkgaXMgbm90IHN1cHBvcnRlZCBieSBPcGVuU1NMLCB1c2UgYSBqYXZhc2NyaXB0IGltcGwuICovXG5cdGlmICh0aGlzLnR5cGUgPT09ICdlZDI1NTE5JyAmJiBlZENvbXBhdCAhPT0gdW5kZWZpbmVkKVxuXHRcdHJldHVybiAobmV3IGVkQ29tcGF0LlZlcmlmaWVyKHRoaXMsIGhhc2hBbGdvKSk7XG5cdGlmICh0aGlzLnR5cGUgPT09ICdjdXJ2ZTI1NTE5Jylcblx0XHR0aHJvdyAobmV3IEVycm9yKCdDdXJ2ZTI1NTE5IGtleXMgYXJlIG5vdCBzdWl0YWJsZSBmb3IgJyArXG5cdFx0ICAgICdzaWduaW5nIG9yIHZlcmlmaWNhdGlvbicpKTtcblxuXHR2YXIgdiwgbm0sIGVycjtcblx0dHJ5IHtcblx0XHRubSA9IGhhc2hBbGdvLnRvVXBwZXJDYXNlKCk7XG5cdFx0diA9IGNyeXB0by5jcmVhdGVWZXJpZnkobm0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0ZXJyID0gZTtcblx0fVxuXHRpZiAodiA9PT0gdW5kZWZpbmVkIHx8IChlcnIgaW5zdGFuY2VvZiBFcnJvciAmJlxuXHQgICAgZXJyLm1lc3NhZ2UubWF0Y2goL1Vua25vd24gbWVzc2FnZSBkaWdlc3QvKSkpIHtcblx0XHRubSA9ICdSU0EtJztcblx0XHRubSArPSBoYXNoQWxnby50b1VwcGVyQ2FzZSgpO1xuXHRcdHYgPSBjcnlwdG8uY3JlYXRlVmVyaWZ5KG5tKTtcblx0fVxuXHRhc3NlcnQub2sodiwgJ2ZhaWxlZCB0byBjcmVhdGUgdmVyaWZpZXInKTtcblx0dmFyIG9sZFZlcmlmeSA9IHYudmVyaWZ5LmJpbmQodik7XG5cdHZhciBrZXkgPSB0aGlzLnRvQnVmZmVyKCdwa2NzOCcpO1xuXHR2YXIgY3VydmUgPSB0aGlzLmN1cnZlO1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHYudmVyaWZ5ID0gZnVuY3Rpb24gKHNpZ25hdHVyZSwgZm10KSB7XG5cdFx0aWYgKFNpZ25hdHVyZS5pc1NpZ25hdHVyZShzaWduYXR1cmUsIFsyLCAwXSkpIHtcblx0XHRcdGlmIChzaWduYXR1cmUudHlwZSAhPT0gc2VsZi50eXBlKVxuXHRcdFx0XHRyZXR1cm4gKGZhbHNlKTtcblx0XHRcdGlmIChzaWduYXR1cmUuaGFzaEFsZ29yaXRobSAmJlxuXHRcdFx0ICAgIHNpZ25hdHVyZS5oYXNoQWxnb3JpdGhtICE9PSBoYXNoQWxnbylcblx0XHRcdFx0cmV0dXJuIChmYWxzZSk7XG5cdFx0XHRpZiAoc2lnbmF0dXJlLmN1cnZlICYmIHNlbGYudHlwZSA9PT0gJ2VjZHNhJyAmJlxuXHRcdFx0ICAgIHNpZ25hdHVyZS5jdXJ2ZSAhPT0gY3VydmUpXG5cdFx0XHRcdHJldHVybiAoZmFsc2UpO1xuXHRcdFx0cmV0dXJuIChvbGRWZXJpZnkoa2V5LCBzaWduYXR1cmUudG9CdWZmZXIoJ2FzbjEnKSkpO1xuXG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgKHNpZ25hdHVyZSkgPT09ICdzdHJpbmcnIHx8XG5cdFx0ICAgIEJ1ZmZlci5pc0J1ZmZlcihzaWduYXR1cmUpKSB7XG5cdFx0XHRyZXR1cm4gKG9sZFZlcmlmeShrZXksIHNpZ25hdHVyZSwgZm10KSk7XG5cblx0XHQvKlxuXHRcdCAqIEF2b2lkIGRvaW5nIHRoaXMgb24gdmFsaWQgYXJndW1lbnRzLCB3YWxraW5nIHRoZSBwcm90b3R5cGVcblx0XHQgKiBjaGFpbiBjYW4gYmUgcXVpdGUgc2xvdy5cblx0XHQgKi9cblx0XHR9IGVsc2UgaWYgKFNpZ25hdHVyZS5pc1NpZ25hdHVyZShzaWduYXR1cmUsIFsxLCAwXSkpIHtcblx0XHRcdHRocm93IChuZXcgRXJyb3IoJ3NpZ25hdHVyZSB3YXMgY3JlYXRlZCBieSB0b28gb2xkICcgK1xuXHRcdFx0ICAgICdhIHZlcnNpb24gb2Ygc3NocGsgYW5kIGNhbm5vdCBiZSB2ZXJpZmllZCcpKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyAobmV3IFR5cGVFcnJvcignc2lnbmF0dXJlIG11c3QgYmUgYSBzdHJpbmcsICcgK1xuXHRcdFx0ICAgICdCdWZmZXIsIG9yIFNpZ25hdHVyZSBvYmplY3QnKSk7XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gKHYpO1xufTtcblxuS2V5LnByb3RvdHlwZS5jcmVhdGVEaWZmaWVIZWxsbWFuID0gZnVuY3Rpb24gKCkge1xuXHRpZiAodGhpcy50eXBlID09PSAncnNhJylcblx0XHR0aHJvdyAobmV3IEVycm9yKCdSU0Ega2V5cyBkbyBub3Qgc3VwcG9ydCBEaWZmaWUtSGVsbG1hbicpKTtcblxuXHRyZXR1cm4gKG5ldyBEaWZmaWVIZWxsbWFuKHRoaXMpKTtcbn07XG5LZXkucHJvdG90eXBlLmNyZWF0ZURIID0gS2V5LnByb3RvdHlwZS5jcmVhdGVEaWZmaWVIZWxsbWFuO1xuXG5LZXkucGFyc2UgPSBmdW5jdGlvbiAoZGF0YSwgZm9ybWF0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgKGRhdGEpICE9PSAnc3RyaW5nJylcblx0XHRhc3NlcnQuYnVmZmVyKGRhdGEsICdkYXRhJyk7XG5cdGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZClcblx0XHRmb3JtYXQgPSAnYXV0byc7XG5cdGFzc2VydC5zdHJpbmcoZm9ybWF0LCAnZm9ybWF0Jyk7XG5cdGlmICh0eXBlb2YgKG9wdGlvbnMpID09PSAnc3RyaW5nJylcblx0XHRvcHRpb25zID0geyBmaWxlbmFtZTogb3B0aW9ucyB9O1xuXHRhc3NlcnQub3B0aW9uYWxPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKTtcblx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRvcHRpb25zID0ge307XG5cdGFzc2VydC5vcHRpb25hbFN0cmluZyhvcHRpb25zLmZpbGVuYW1lLCAnb3B0aW9ucy5maWxlbmFtZScpO1xuXHRpZiAob3B0aW9ucy5maWxlbmFtZSA9PT0gdW5kZWZpbmVkKVxuXHRcdG9wdGlvbnMuZmlsZW5hbWUgPSAnKHVubmFtZWQpJztcblxuXHRhc3NlcnQub2JqZWN0KGZvcm1hdHNbZm9ybWF0XSwgJ2Zvcm1hdHNbZm9ybWF0XScpO1xuXG5cdHRyeSB7XG5cdFx0dmFyIGsgPSBmb3JtYXRzW2Zvcm1hdF0ucmVhZChkYXRhLCBvcHRpb25zKTtcblx0XHRpZiAoayBpbnN0YW5jZW9mIFByaXZhdGVLZXkpXG5cdFx0XHRrID0gay50b1B1YmxpYygpO1xuXHRcdGlmICghay5jb21tZW50KVxuXHRcdFx0ay5jb21tZW50ID0gb3B0aW9ucy5maWxlbmFtZTtcblx0XHRyZXR1cm4gKGspO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKGUubmFtZSA9PT0gJ0tleUVuY3J5cHRlZEVycm9yJylcblx0XHRcdHRocm93IChlKTtcblx0XHR0aHJvdyAobmV3IEtleVBhcnNlRXJyb3Iob3B0aW9ucy5maWxlbmFtZSwgZm9ybWF0LCBlKSk7XG5cdH1cbn07XG5cbktleS5pc0tleSA9IGZ1bmN0aW9uIChvYmosIHZlcikge1xuXHRyZXR1cm4gKHV0aWxzLmlzQ29tcGF0aWJsZShvYmosIEtleSwgdmVyKSk7XG59O1xuXG4vKlxuICogQVBJIHZlcnNpb25zIGZvciBLZXk6XG4gKiBbMSwwXSAtLSBpbml0aWFsIHZlciwgbWF5IHRha2UgU2lnbmF0dXJlIGZvciBjcmVhdGVWZXJpZnkgb3IgbWF5IG5vdFxuICogWzEsMV0gLS0gYWRkZWQgcGtjczEsIHBrY3M4IGZvcm1hdHNcbiAqIFsxLDJdIC0tIGFkZGVkIGF1dG8sIHNzaC1wcml2YXRlLCBvcGVuc3NoIGZvcm1hdHNcbiAqIFsxLDNdIC0tIGFkZGVkIGRlZmF1bHRIYXNoQWxnb3JpdGhtXG4gKiBbMSw0XSAtLSBhZGRlZCBlZCBzdXBwb3J0LCBjcmVhdGVESFxuICogWzEsNV0gLS0gZmlyc3QgZXhwbGljaXRseSB0YWdnZWQgdmVyc2lvblxuICovXG5LZXkucHJvdG90eXBlLl9zc2hwa0FwaVZlcnNpb24gPSBbMSwgNV07XG5cbktleS5fb2xkVmVyc2lvbkRldGVjdCA9IGZ1bmN0aW9uIChvYmopIHtcblx0YXNzZXJ0LmZ1bmMob2JqLnRvQnVmZmVyKTtcblx0YXNzZXJ0LmZ1bmMob2JqLmZpbmdlcnByaW50KTtcblx0aWYgKG9iai5jcmVhdGVESClcblx0XHRyZXR1cm4gKFsxLCA0XSk7XG5cdGlmIChvYmouZGVmYXVsdEhhc2hBbGdvcml0aG0pXG5cdFx0cmV0dXJuIChbMSwgM10pO1xuXHRpZiAob2JqLmZvcm1hdHNbJ2F1dG8nXSlcblx0XHRyZXR1cm4gKFsxLCAyXSk7XG5cdGlmIChvYmouZm9ybWF0c1sncGtjczEnXSlcblx0XHRyZXR1cm4gKFsxLCAxXSk7XG5cdHJldHVybiAoWzEsIDBdKTtcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxNyBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSBQcml2YXRlS2V5O1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi9hbGdzJyk7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgRmluZ2VycHJpbnQgPSByZXF1aXJlKCcuL2ZpbmdlcnByaW50Jyk7XG52YXIgU2lnbmF0dXJlID0gcmVxdWlyZSgnLi9zaWduYXR1cmUnKTtcbnZhciBlcnJzID0gcmVxdWlyZSgnLi9lcnJvcnMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGRoZSA9IHJlcXVpcmUoJy4vZGhlJyk7XG52YXIgZ2VuZXJhdGVFQ0RTQSA9IGRoZS5nZW5lcmF0ZUVDRFNBO1xudmFyIGdlbmVyYXRlRUQyNTUxOSA9IGRoZS5nZW5lcmF0ZUVEMjU1MTk7XG52YXIgZWRDb21wYXQ7XG52YXIgZWQ7XG5cbnRyeSB7XG5cdGVkQ29tcGF0ID0gcmVxdWlyZSgnLi9lZC1jb21wYXQnKTtcbn0gY2F0Y2ggKGUpIHtcblx0LyogSnVzdCBjb250aW51ZSB0aHJvdWdoLCBhbmQgYmFpbCBvdXQgaWYgd2UgdHJ5IHRvIHVzZSBpdC4gKi9cbn1cblxudmFyIEtleSA9IHJlcXVpcmUoJy4va2V5Jyk7XG5cbnZhciBJbnZhbGlkQWxnb3JpdGhtRXJyb3IgPSBlcnJzLkludmFsaWRBbGdvcml0aG1FcnJvcjtcbnZhciBLZXlQYXJzZUVycm9yID0gZXJycy5LZXlQYXJzZUVycm9yO1xudmFyIEtleUVuY3J5cHRlZEVycm9yID0gZXJycy5LZXlFbmNyeXB0ZWRFcnJvcjtcblxudmFyIGZvcm1hdHMgPSB7fTtcbmZvcm1hdHNbJ2F1dG8nXSA9IHJlcXVpcmUoJy4vZm9ybWF0cy9hdXRvJyk7XG5mb3JtYXRzWydwZW0nXSA9IHJlcXVpcmUoJy4vZm9ybWF0cy9wZW0nKTtcbmZvcm1hdHNbJ3BrY3MxJ10gPSByZXF1aXJlKCcuL2Zvcm1hdHMvcGtjczEnKTtcbmZvcm1hdHNbJ3BrY3M4J10gPSByZXF1aXJlKCcuL2Zvcm1hdHMvcGtjczgnKTtcbmZvcm1hdHNbJ3JmYzQyNTMnXSA9IHJlcXVpcmUoJy4vZm9ybWF0cy9yZmM0MjUzJyk7XG5mb3JtYXRzWydzc2gtcHJpdmF0ZSddID0gcmVxdWlyZSgnLi9mb3JtYXRzL3NzaC1wcml2YXRlJyk7XG5mb3JtYXRzWydvcGVuc3NoJ10gPSBmb3JtYXRzWydzc2gtcHJpdmF0ZSddO1xuZm9ybWF0c1snc3NoJ10gPSBmb3JtYXRzWydzc2gtcHJpdmF0ZSddO1xuXG5mdW5jdGlvbiBQcml2YXRlS2V5KG9wdHMpIHtcblx0YXNzZXJ0Lm9iamVjdChvcHRzLCAnb3B0aW9ucycpO1xuXHRLZXkuY2FsbCh0aGlzLCBvcHRzKTtcblxuXHR0aGlzLl9wdWJDYWNoZSA9IHVuZGVmaW5lZDtcbn1cbnV0aWwuaW5oZXJpdHMoUHJpdmF0ZUtleSwgS2V5KTtcblxuUHJpdmF0ZUtleS5mb3JtYXRzID0gZm9ybWF0cztcblxuUHJpdmF0ZUtleS5wcm90b3R5cGUudG9CdWZmZXIgPSBmdW5jdGlvbiAoZm9ybWF0LCBvcHRpb25zKSB7XG5cdGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZClcblx0XHRmb3JtYXQgPSAncGtjczEnO1xuXHRhc3NlcnQuc3RyaW5nKGZvcm1hdCwgJ2Zvcm1hdCcpO1xuXHRhc3NlcnQub2JqZWN0KGZvcm1hdHNbZm9ybWF0XSwgJ2Zvcm1hdHNbZm9ybWF0XScpO1xuXHRhc3NlcnQub3B0aW9uYWxPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKTtcblxuXHRyZXR1cm4gKGZvcm1hdHNbZm9ybWF0XS53cml0ZSh0aGlzLCBvcHRpb25zKSk7XG59O1xuXG5Qcml2YXRlS2V5LnByb3RvdHlwZS5oYXNoID0gZnVuY3Rpb24gKGFsZ28pIHtcblx0cmV0dXJuICh0aGlzLnRvUHVibGljKCkuaGFzaChhbGdvKSk7XG59O1xuXG5Qcml2YXRlS2V5LnByb3RvdHlwZS50b1B1YmxpYyA9IGZ1bmN0aW9uICgpIHtcblx0aWYgKHRoaXMuX3B1YkNhY2hlKVxuXHRcdHJldHVybiAodGhpcy5fcHViQ2FjaGUpO1xuXG5cdHZhciBhbGdJbmZvID0gYWxncy5pbmZvW3RoaXMudHlwZV07XG5cdHZhciBwdWJQYXJ0cyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGFsZ0luZm8ucGFydHMubGVuZ3RoOyArK2kpIHtcblx0XHR2YXIgcCA9IGFsZ0luZm8ucGFydHNbaV07XG5cdFx0cHViUGFydHMucHVzaCh0aGlzLnBhcnRbcF0pO1xuXHR9XG5cblx0dGhpcy5fcHViQ2FjaGUgPSBuZXcgS2V5KHtcblx0XHR0eXBlOiB0aGlzLnR5cGUsXG5cdFx0c291cmNlOiB0aGlzLFxuXHRcdHBhcnRzOiBwdWJQYXJ0c1xuXHR9KTtcblx0aWYgKHRoaXMuY29tbWVudClcblx0XHR0aGlzLl9wdWJDYWNoZS5jb21tZW50ID0gdGhpcy5jb21tZW50O1xuXHRyZXR1cm4gKHRoaXMuX3B1YkNhY2hlKTtcbn07XG5cblByaXZhdGVLZXkucHJvdG90eXBlLmRlcml2ZSA9IGZ1bmN0aW9uIChuZXdUeXBlLCBuZXdTaXplKSB7XG5cdGFzc2VydC5zdHJpbmcobmV3VHlwZSwgJ3R5cGUnKTtcblx0YXNzZXJ0Lm9wdGlvbmFsTnVtYmVyKG5ld1NpemUsICdzaXplJyk7XG5cdHZhciBwcml2LCBwdWI7XG5cblx0aWYgKHRoaXMudHlwZSA9PT0gJ2VkMjU1MTknICYmIG5ld1R5cGUgPT09ICdjdXJ2ZTI1NTE5Jykge1xuXHRcdGlmIChlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZWQgPSByZXF1aXJlKCdqb2RpZDI1NTE5Jyk7XG5cblx0XHRwcml2ID0gdGhpcy5wYXJ0LnIuZGF0YTtcblx0XHRpZiAocHJpdlswXSA9PT0gMHgwMClcblx0XHRcdHByaXYgPSBwcml2LnNsaWNlKDEpO1xuXHRcdHByaXYgPSBwcml2LnNsaWNlKDAsIDMyKTtcblxuXHRcdHB1YiA9IGVkLmRoLnB1YmxpY0tleShwcml2KTtcblx0XHRwcml2ID0gdXRpbHMubXBOb3JtYWxpemUoQnVmZmVyLmNvbmNhdChbcHJpdiwgcHViXSkpO1xuXG5cdFx0cmV0dXJuIChuZXcgUHJpdmF0ZUtleSh7XG5cdFx0XHR0eXBlOiAnY3VydmUyNTUxOScsXG5cdFx0XHRwYXJ0czogW1xuXHRcdFx0XHR7IG5hbWU6ICdSJywgZGF0YTogdXRpbHMubXBOb3JtYWxpemUocHViKSB9LFxuXHRcdFx0XHR7IG5hbWU6ICdyJywgZGF0YTogcHJpdiB9XG5cdFx0XHRdXG5cdFx0fSkpO1xuXHR9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2N1cnZlMjU1MTknICYmIG5ld1R5cGUgPT09ICdlZDI1NTE5Jykge1xuXHRcdGlmIChlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZWQgPSByZXF1aXJlKCdqb2RpZDI1NTE5Jyk7XG5cblx0XHRwcml2ID0gdGhpcy5wYXJ0LnIuZGF0YTtcblx0XHRpZiAocHJpdlswXSA9PT0gMHgwMClcblx0XHRcdHByaXYgPSBwcml2LnNsaWNlKDEpO1xuXHRcdHByaXYgPSBwcml2LnNsaWNlKDAsIDMyKTtcblxuXHRcdHB1YiA9IGVkLmVkZHNhLnB1YmxpY0tleShwcml2LnRvU3RyaW5nKCdiaW5hcnknKSk7XG5cdFx0cHViID0gbmV3IEJ1ZmZlcihwdWIsICdiaW5hcnknKTtcblxuXHRcdHByaXYgPSB1dGlscy5tcE5vcm1hbGl6ZShCdWZmZXIuY29uY2F0KFtwcml2LCBwdWJdKSk7XG5cblx0XHRyZXR1cm4gKG5ldyBQcml2YXRlS2V5KHtcblx0XHRcdHR5cGU6ICdlZDI1NTE5Jyxcblx0XHRcdHBhcnRzOiBbXG5cdFx0XHRcdHsgbmFtZTogJ1InLCBkYXRhOiB1dGlscy5tcE5vcm1hbGl6ZShwdWIpIH0sXG5cdFx0XHRcdHsgbmFtZTogJ3InLCBkYXRhOiBwcml2IH1cblx0XHRcdF1cblx0XHR9KSk7XG5cdH1cblx0dGhyb3cgKG5ldyBFcnJvcignS2V5IGRlcml2YXRpb24gbm90IHN1cHBvcnRlZCBmcm9tICcgKyB0aGlzLnR5cGUgK1xuXHQgICAgJyB0byAnICsgbmV3VHlwZSkpO1xufTtcblxuUHJpdmF0ZUtleS5wcm90b3R5cGUuY3JlYXRlVmVyaWZ5ID0gZnVuY3Rpb24gKGhhc2hBbGdvKSB7XG5cdHJldHVybiAodGhpcy50b1B1YmxpYygpLmNyZWF0ZVZlcmlmeShoYXNoQWxnbykpO1xufTtcblxuUHJpdmF0ZUtleS5wcm90b3R5cGUuY3JlYXRlU2lnbiA9IGZ1bmN0aW9uIChoYXNoQWxnbykge1xuXHRpZiAoaGFzaEFsZ28gPT09IHVuZGVmaW5lZClcblx0XHRoYXNoQWxnbyA9IHRoaXMuZGVmYXVsdEhhc2hBbGdvcml0aG0oKTtcblx0YXNzZXJ0LnN0cmluZyhoYXNoQWxnbywgJ2hhc2ggYWxnb3JpdGhtJyk7XG5cblx0LyogRUQyNTUxOSBpcyBub3Qgc3VwcG9ydGVkIGJ5IE9wZW5TU0wsIHVzZSBhIGphdmFzY3JpcHQgaW1wbC4gKi9cblx0aWYgKHRoaXMudHlwZSA9PT0gJ2VkMjU1MTknICYmIGVkQ29tcGF0ICE9PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIChuZXcgZWRDb21wYXQuU2lnbmVyKHRoaXMsIGhhc2hBbGdvKSk7XG5cdGlmICh0aGlzLnR5cGUgPT09ICdjdXJ2ZTI1NTE5Jylcblx0XHR0aHJvdyAobmV3IEVycm9yKCdDdXJ2ZTI1NTE5IGtleXMgYXJlIG5vdCBzdWl0YWJsZSBmb3IgJyArXG5cdFx0ICAgICdzaWduaW5nIG9yIHZlcmlmaWNhdGlvbicpKTtcblxuXHR2YXIgdiwgbm0sIGVycjtcblx0dHJ5IHtcblx0XHRubSA9IGhhc2hBbGdvLnRvVXBwZXJDYXNlKCk7XG5cdFx0diA9IGNyeXB0by5jcmVhdGVTaWduKG5tKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGVyciA9IGU7XG5cdH1cblx0aWYgKHYgPT09IHVuZGVmaW5lZCB8fCAoZXJyIGluc3RhbmNlb2YgRXJyb3IgJiZcblx0ICAgIGVyci5tZXNzYWdlLm1hdGNoKC9Vbmtub3duIG1lc3NhZ2UgZGlnZXN0LykpKSB7XG5cdFx0bm0gPSAnUlNBLSc7XG5cdFx0bm0gKz0gaGFzaEFsZ28udG9VcHBlckNhc2UoKTtcblx0XHR2ID0gY3J5cHRvLmNyZWF0ZVNpZ24obm0pO1xuXHR9XG5cdGFzc2VydC5vayh2LCAnZmFpbGVkIHRvIGNyZWF0ZSB2ZXJpZmllcicpO1xuXHR2YXIgb2xkU2lnbiA9IHYuc2lnbi5iaW5kKHYpO1xuXHR2YXIga2V5ID0gdGhpcy50b0J1ZmZlcigncGtjczEnKTtcblx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdHZhciBjdXJ2ZSA9IHRoaXMuY3VydmU7XG5cdHYuc2lnbiA9IGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgc2lnID0gb2xkU2lnbihrZXkpO1xuXHRcdGlmICh0eXBlb2YgKHNpZykgPT09ICdzdHJpbmcnKVxuXHRcdFx0c2lnID0gbmV3IEJ1ZmZlcihzaWcsICdiaW5hcnknKTtcblx0XHRzaWcgPSBTaWduYXR1cmUucGFyc2Uoc2lnLCB0eXBlLCAnYXNuMScpO1xuXHRcdHNpZy5oYXNoQWxnb3JpdGhtID0gaGFzaEFsZ287XG5cdFx0c2lnLmN1cnZlID0gY3VydmU7XG5cdFx0cmV0dXJuIChzaWcpO1xuXHR9O1xuXHRyZXR1cm4gKHYpO1xufTtcblxuUHJpdmF0ZUtleS5wYXJzZSA9IGZ1bmN0aW9uIChkYXRhLCBmb3JtYXQsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiAoZGF0YSkgIT09ICdzdHJpbmcnKVxuXHRcdGFzc2VydC5idWZmZXIoZGF0YSwgJ2RhdGEnKTtcblx0aWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKVxuXHRcdGZvcm1hdCA9ICdhdXRvJztcblx0YXNzZXJ0LnN0cmluZyhmb3JtYXQsICdmb3JtYXQnKTtcblx0aWYgKHR5cGVvZiAob3B0aW9ucykgPT09ICdzdHJpbmcnKVxuXHRcdG9wdGlvbnMgPSB7IGZpbGVuYW1lOiBvcHRpb25zIH07XG5cdGFzc2VydC5vcHRpb25hbE9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpO1xuXHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdG9wdGlvbnMgPSB7fTtcblx0YXNzZXJ0Lm9wdGlvbmFsU3RyaW5nKG9wdGlvbnMuZmlsZW5hbWUsICdvcHRpb25zLmZpbGVuYW1lJyk7XG5cdGlmIChvcHRpb25zLmZpbGVuYW1lID09PSB1bmRlZmluZWQpXG5cdFx0b3B0aW9ucy5maWxlbmFtZSA9ICcodW5uYW1lZCknO1xuXG5cdGFzc2VydC5vYmplY3QoZm9ybWF0c1tmb3JtYXRdLCAnZm9ybWF0c1tmb3JtYXRdJyk7XG5cblx0dHJ5IHtcblx0XHR2YXIgayA9IGZvcm1hdHNbZm9ybWF0XS5yZWFkKGRhdGEsIG9wdGlvbnMpO1xuXHRcdGFzc2VydC5vayhrIGluc3RhbmNlb2YgUHJpdmF0ZUtleSwgJ2tleSBpcyBub3QgYSBwcml2YXRlIGtleScpO1xuXHRcdGlmICghay5jb21tZW50KVxuXHRcdFx0ay5jb21tZW50ID0gb3B0aW9ucy5maWxlbmFtZTtcblx0XHRyZXR1cm4gKGspO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKGUubmFtZSA9PT0gJ0tleUVuY3J5cHRlZEVycm9yJylcblx0XHRcdHRocm93IChlKTtcblx0XHR0aHJvdyAobmV3IEtleVBhcnNlRXJyb3Iob3B0aW9ucy5maWxlbmFtZSwgZm9ybWF0LCBlKSk7XG5cdH1cbn07XG5cblByaXZhdGVLZXkuaXNQcml2YXRlS2V5ID0gZnVuY3Rpb24gKG9iaiwgdmVyKSB7XG5cdHJldHVybiAodXRpbHMuaXNDb21wYXRpYmxlKG9iaiwgUHJpdmF0ZUtleSwgdmVyKSk7XG59O1xuXG5Qcml2YXRlS2V5LmdlbmVyYXRlID0gZnVuY3Rpb24gKHR5cGUsIG9wdGlvbnMpIHtcblx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRvcHRpb25zID0ge307XG5cdGFzc2VydC5vYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKTtcblxuXHRzd2l0Y2ggKHR5cGUpIHtcblx0Y2FzZSAnZWNkc2EnOlxuXHRcdGlmIChvcHRpb25zLmN1cnZlID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zLmN1cnZlID0gJ25pc3RwMjU2Jztcblx0XHRhc3NlcnQuc3RyaW5nKG9wdGlvbnMuY3VydmUsICdvcHRpb25zLmN1cnZlJyk7XG5cdFx0cmV0dXJuIChnZW5lcmF0ZUVDRFNBKG9wdGlvbnMuY3VydmUpKTtcblx0Y2FzZSAnZWQyNTUxOSc6XG5cdFx0cmV0dXJuIChnZW5lcmF0ZUVEMjU1MTkoKSk7XG5cdGRlZmF1bHQ6XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignS2V5IGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCB3aXRoIGtleSAnICtcblx0XHQgICAgJ3R5cGUgXCInICsgdHlwZSArICdcIicpKTtcblx0fVxufTtcblxuLypcbiAqIEFQSSB2ZXJzaW9ucyBmb3IgUHJpdmF0ZUtleTpcbiAqIFsxLDBdIC0tIGluaXRpYWwgdmVyXG4gKiBbMSwxXSAtLSBhZGRlZCBhdXRvLCBwa2NzWzE4XSwgb3BlbnNzaC9zc2gtcHJpdmF0ZSBmb3JtYXRzXG4gKiBbMSwyXSAtLSBhZGRlZCBkZWZhdWx0SGFzaEFsZ29yaXRobVxuICogWzEsM10gLS0gYWRkZWQgZGVyaXZlLCBlZCwgY3JlYXRlREhcbiAqIFsxLDRdIC0tIGZpcnN0IHRhZ2dlZCB2ZXJzaW9uXG4gKi9cblByaXZhdGVLZXkucHJvdG90eXBlLl9zc2hwa0FwaVZlcnNpb24gPSBbMSwgNF07XG5cblByaXZhdGVLZXkuX29sZFZlcnNpb25EZXRlY3QgPSBmdW5jdGlvbiAob2JqKSB7XG5cdGFzc2VydC5mdW5jKG9iai50b1B1YmxpYyk7XG5cdGFzc2VydC5mdW5jKG9iai5jcmVhdGVTaWduKTtcblx0aWYgKG9iai5kZXJpdmUpXG5cdFx0cmV0dXJuIChbMSwgM10pO1xuXHRpZiAob2JqLmRlZmF1bHRIYXNoQWxnb3JpdGhtKVxuXHRcdHJldHVybiAoWzEsIDJdKTtcblx0aWYgKG9iai5mb3JtYXRzWydhdXRvJ10pXG5cdFx0cmV0dXJuIChbMSwgMV0pO1xuXHRyZXR1cm4gKFsxLCAwXSk7XG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0gU2lnbmF0dXJlO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi9hbGdzJyk7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG52YXIgZXJycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNuMSA9IHJlcXVpcmUoJ2FzbjEnKTtcbnZhciBTU0hCdWZmZXIgPSByZXF1aXJlKCcuL3NzaC1idWZmZXInKTtcblxudmFyIEludmFsaWRBbGdvcml0aG1FcnJvciA9IGVycnMuSW52YWxpZEFsZ29yaXRobUVycm9yO1xudmFyIFNpZ25hdHVyZVBhcnNlRXJyb3IgPSBlcnJzLlNpZ25hdHVyZVBhcnNlRXJyb3I7XG5cbmZ1bmN0aW9uIFNpZ25hdHVyZShvcHRzKSB7XG5cdGFzc2VydC5vYmplY3Qob3B0cywgJ29wdGlvbnMnKTtcblx0YXNzZXJ0LmFycmF5T2ZPYmplY3Qob3B0cy5wYXJ0cywgJ29wdGlvbnMucGFydHMnKTtcblx0YXNzZXJ0LnN0cmluZyhvcHRzLnR5cGUsICdvcHRpb25zLnR5cGUnKTtcblxuXHR2YXIgcGFydExvb2t1cCA9IHt9O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IG9wdHMucGFydHMubGVuZ3RoOyArK2kpIHtcblx0XHR2YXIgcGFydCA9IG9wdHMucGFydHNbaV07XG5cdFx0cGFydExvb2t1cFtwYXJ0Lm5hbWVdID0gcGFydDtcblx0fVxuXG5cdHRoaXMudHlwZSA9IG9wdHMudHlwZTtcblx0dGhpcy5oYXNoQWxnb3JpdGhtID0gb3B0cy5oYXNoQWxnbztcblx0dGhpcy5jdXJ2ZSA9IG9wdHMuY3VydmU7XG5cdHRoaXMucGFydHMgPSBvcHRzLnBhcnRzO1xuXHR0aGlzLnBhcnQgPSBwYXJ0TG9va3VwO1xufVxuXG5TaWduYXR1cmUucHJvdG90eXBlLnRvQnVmZmVyID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuXHRpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpXG5cdFx0Zm9ybWF0ID0gJ2FzbjEnO1xuXHRhc3NlcnQuc3RyaW5nKGZvcm1hdCwgJ2Zvcm1hdCcpO1xuXG5cdHZhciBidWY7XG5cdHZhciBzdHlwZSA9ICdzc2gtJyArIHRoaXMudHlwZTtcblxuXHRzd2l0Y2ggKHRoaXMudHlwZSkge1xuXHRjYXNlICdyc2EnOlxuXHRcdHN3aXRjaCAodGhpcy5oYXNoQWxnb3JpdGhtKSB7XG5cdFx0Y2FzZSAnc2hhMjU2Jzpcblx0XHRcdHN0eXBlID0gJ3JzYS1zaGEyLTI1Nic7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdzaGE1MTInOlxuXHRcdFx0c3R5cGUgPSAncnNhLXNoYTItNTEyJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ3NoYTEnOlxuXHRcdGNhc2UgdW5kZWZpbmVkOlxuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IChuZXcgRXJyb3IoJ1NTSCBzaWduYXR1cmUgJyArXG5cdFx0XHQgICAgJ2Zvcm1hdCBkb2VzIG5vdCBzdXBwb3J0IGhhc2ggJyArXG5cdFx0XHQgICAgJ2FsZ29yaXRobSAnICsgdGhpcy5oYXNoQWxnb3JpdGhtKSk7XG5cdFx0fVxuXHRcdGlmIChmb3JtYXQgPT09ICdzc2gnKSB7XG5cdFx0XHRidWYgPSBuZXcgU1NIQnVmZmVyKHt9KTtcblx0XHRcdGJ1Zi53cml0ZVN0cmluZyhzdHlwZSk7XG5cdFx0XHRidWYud3JpdGVQYXJ0KHRoaXMucGFydC5zaWcpO1xuXHRcdFx0cmV0dXJuIChidWYudG9CdWZmZXIoKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAodGhpcy5wYXJ0LnNpZy5kYXRhKTtcblx0XHR9XG5cdFx0YnJlYWs7XG5cblx0Y2FzZSAnZWQyNTUxOSc6XG5cdFx0aWYgKGZvcm1hdCA9PT0gJ3NzaCcpIHtcblx0XHRcdGJ1ZiA9IG5ldyBTU0hCdWZmZXIoe30pO1xuXHRcdFx0YnVmLndyaXRlU3RyaW5nKHN0eXBlKTtcblx0XHRcdGJ1Zi53cml0ZVBhcnQodGhpcy5wYXJ0LnNpZyk7XG5cdFx0XHRyZXR1cm4gKGJ1Zi50b0J1ZmZlcigpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuICh0aGlzLnBhcnQuc2lnLmRhdGEpO1xuXHRcdH1cblx0XHRicmVhaztcblxuXHRjYXNlICdkc2EnOlxuXHRjYXNlICdlY2RzYSc6XG5cdFx0dmFyIHIsIHM7XG5cdFx0aWYgKGZvcm1hdCA9PT0gJ2FzbjEnKSB7XG5cdFx0XHR2YXIgZGVyID0gbmV3IGFzbjEuQmVyV3JpdGVyKCk7XG5cdFx0XHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRcdFx0ciA9IHV0aWxzLm1wTm9ybWFsaXplKHRoaXMucGFydC5yLmRhdGEpO1xuXHRcdFx0cyA9IHV0aWxzLm1wTm9ybWFsaXplKHRoaXMucGFydC5zLmRhdGEpO1xuXHRcdFx0ZGVyLndyaXRlQnVmZmVyKHIsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRcdFx0ZGVyLndyaXRlQnVmZmVyKHMsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRcdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdFx0XHRyZXR1cm4gKGRlci5idWZmZXIpO1xuXHRcdH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnc3NoJyAmJiB0aGlzLnR5cGUgPT09ICdkc2EnKSB7XG5cdFx0XHRidWYgPSBuZXcgU1NIQnVmZmVyKHt9KTtcblx0XHRcdGJ1Zi53cml0ZVN0cmluZygnc3NoLWRzcycpO1xuXHRcdFx0ciA9IHRoaXMucGFydC5yLmRhdGE7XG5cdFx0XHRpZiAoci5sZW5ndGggPiAyMCAmJiByWzBdID09PSAweDAwKVxuXHRcdFx0XHRyID0gci5zbGljZSgxKTtcblx0XHRcdHMgPSB0aGlzLnBhcnQucy5kYXRhO1xuXHRcdFx0aWYgKHMubGVuZ3RoID4gMjAgJiYgc1swXSA9PT0gMHgwMClcblx0XHRcdFx0cyA9IHMuc2xpY2UoMSk7XG5cdFx0XHRpZiAoKHRoaXMuaGFzaEFsZ29yaXRobSAmJlxuXHRcdFx0ICAgIHRoaXMuaGFzaEFsZ29yaXRobSAhPT0gJ3NoYTEnKSB8fFxuXHRcdFx0ICAgIHIubGVuZ3RoICsgcy5sZW5ndGggIT09IDQwKSB7XG5cdFx0XHRcdHRocm93IChuZXcgRXJyb3IoJ09wZW5TU0ggb25seSBzdXBwb3J0cyAnICtcblx0XHRcdFx0ICAgICdEU0Egc2lnbmF0dXJlcyB3aXRoIFNIQTEgaGFzaCcpKTtcblx0XHRcdH1cblx0XHRcdGJ1Zi53cml0ZUJ1ZmZlcihCdWZmZXIuY29uY2F0KFtyLCBzXSkpO1xuXHRcdFx0cmV0dXJuIChidWYudG9CdWZmZXIoKSk7XG5cdFx0fSBlbHNlIGlmIChmb3JtYXQgPT09ICdzc2gnICYmIHRoaXMudHlwZSA9PT0gJ2VjZHNhJykge1xuXHRcdFx0dmFyIGlubmVyID0gbmV3IFNTSEJ1ZmZlcih7fSk7XG5cdFx0XHRyID0gdGhpcy5wYXJ0LnIuZGF0YTtcblx0XHRcdGlubmVyLndyaXRlQnVmZmVyKHIpO1xuXHRcdFx0aW5uZXIud3JpdGVQYXJ0KHRoaXMucGFydC5zKTtcblxuXHRcdFx0YnVmID0gbmV3IFNTSEJ1ZmZlcih7fSk7XG5cdFx0XHQvKiBYWFg6IGZpbmQgYSBtb3JlIHByb3BlciB3YXkgdG8gZG8gdGhpcz8gKi9cblx0XHRcdHZhciBjdXJ2ZTtcblx0XHRcdGlmIChyWzBdID09PSAweDAwKVxuXHRcdFx0XHRyID0gci5zbGljZSgxKTtcblx0XHRcdHZhciBzeiA9IHIubGVuZ3RoICogODtcblx0XHRcdGlmIChzeiA9PT0gMjU2KVxuXHRcdFx0XHRjdXJ2ZSA9ICduaXN0cDI1Nic7XG5cdFx0XHRlbHNlIGlmIChzeiA9PT0gMzg0KVxuXHRcdFx0XHRjdXJ2ZSA9ICduaXN0cDM4NCc7XG5cdFx0XHRlbHNlIGlmIChzeiA9PT0gNTI4KVxuXHRcdFx0XHRjdXJ2ZSA9ICduaXN0cDUyMSc7XG5cdFx0XHRidWYud3JpdGVTdHJpbmcoJ2VjZHNhLXNoYTItJyArIGN1cnZlKTtcblx0XHRcdGJ1Zi53cml0ZUJ1ZmZlcihpbm5lci50b0J1ZmZlcigpKTtcblx0XHRcdHJldHVybiAoYnVmLnRvQnVmZmVyKCkpO1xuXHRcdH1cblx0XHR0aHJvdyAobmV3IEVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSBmb3JtYXQnKSk7XG5cdGRlZmF1bHQ6XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignSW52YWxpZCBzaWduYXR1cmUgZGF0YScpKTtcblx0fVxufTtcblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcblx0YXNzZXJ0Lm9wdGlvbmFsU3RyaW5nKGZvcm1hdCwgJ2Zvcm1hdCcpO1xuXHRyZXR1cm4gKHRoaXMudG9CdWZmZXIoZm9ybWF0KS50b1N0cmluZygnYmFzZTY0JykpO1xufTtcblxuU2lnbmF0dXJlLnBhcnNlID0gZnVuY3Rpb24gKGRhdGEsIHR5cGUsIGZvcm1hdCkge1xuXHRpZiAodHlwZW9mIChkYXRhKSA9PT0gJ3N0cmluZycpXG5cdFx0ZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgJ2Jhc2U2NCcpO1xuXHRhc3NlcnQuYnVmZmVyKGRhdGEsICdkYXRhJyk7XG5cdGFzc2VydC5zdHJpbmcoZm9ybWF0LCAnZm9ybWF0Jyk7XG5cdGFzc2VydC5zdHJpbmcodHlwZSwgJ3R5cGUnKTtcblxuXHR2YXIgb3B0cyA9IHt9O1xuXHRvcHRzLnR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG5cdG9wdHMucGFydHMgPSBbXTtcblxuXHR0cnkge1xuXHRcdGFzc2VydC5vayhkYXRhLmxlbmd0aCA+IDAsICdzaWduYXR1cmUgbXVzdCBub3QgYmUgZW1wdHknKTtcblx0XHRzd2l0Y2ggKG9wdHMudHlwZSkge1xuXHRcdGNhc2UgJ3JzYSc6XG5cdFx0XHRyZXR1cm4gKHBhcnNlT25lTnVtKGRhdGEsIHR5cGUsIGZvcm1hdCwgb3B0cykpO1xuXHRcdGNhc2UgJ2VkMjU1MTknOlxuXHRcdFx0cmV0dXJuIChwYXJzZU9uZU51bShkYXRhLCB0eXBlLCBmb3JtYXQsIG9wdHMpKTtcblxuXHRcdGNhc2UgJ2RzYSc6XG5cdFx0Y2FzZSAnZWNkc2EnOlxuXHRcdFx0aWYgKGZvcm1hdCA9PT0gJ2FzbjEnKVxuXHRcdFx0XHRyZXR1cm4gKHBhcnNlRFNBYXNuMShkYXRhLCB0eXBlLCBmb3JtYXQsIG9wdHMpKTtcblx0XHRcdGVsc2UgaWYgKG9wdHMudHlwZSA9PT0gJ2RzYScpXG5cdFx0XHRcdHJldHVybiAocGFyc2VEU0EoZGF0YSwgdHlwZSwgZm9ybWF0LCBvcHRzKSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJldHVybiAocGFyc2VFQ0RTQShkYXRhLCB0eXBlLCBmb3JtYXQsIG9wdHMpKTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyAobmV3IEludmFsaWRBbGdvcml0aG1FcnJvcih0eXBlKSk7XG5cdFx0fVxuXG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAoZSBpbnN0YW5jZW9mIEludmFsaWRBbGdvcml0aG1FcnJvcilcblx0XHRcdHRocm93IChlKTtcblx0XHR0aHJvdyAobmV3IFNpZ25hdHVyZVBhcnNlRXJyb3IodHlwZSwgZm9ybWF0LCBlKSk7XG5cdH1cbn07XG5cbmZ1bmN0aW9uIHBhcnNlT25lTnVtKGRhdGEsIHR5cGUsIGZvcm1hdCwgb3B0cykge1xuXHRpZiAoZm9ybWF0ID09PSAnc3NoJykge1xuXHRcdHRyeSB7XG5cdFx0XHR2YXIgYnVmID0gbmV3IFNTSEJ1ZmZlcih7YnVmZmVyOiBkYXRhfSk7XG5cdFx0XHR2YXIgaGVhZCA9IGJ1Zi5yZWFkU3RyaW5nKCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0LyogZmFsbCB0aHJvdWdoICovXG5cdFx0fVxuXHRcdGlmIChidWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFyIG1zZyA9ICdTU0ggc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkICcgK1xuXHRcdFx0ICAgICd0eXBlIChleHBlY3RlZCAnICsgdHlwZSArICcsIGdvdCAnICsgaGVhZCArICcpJztcblx0XHRcdHN3aXRjaCAoaGVhZCkge1xuXHRcdFx0Y2FzZSAnc3NoLXJzYSc6XG5cdFx0XHRcdGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlLCAncnNhJywgbXNnKTtcblx0XHRcdFx0b3B0cy5oYXNoQWxnbyA9ICdzaGExJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdyc2Etc2hhMi0yNTYnOlxuXHRcdFx0XHRhc3NlcnQuc3RyaWN0RXF1YWwodHlwZSwgJ3JzYScsIG1zZyk7XG5cdFx0XHRcdG9wdHMuaGFzaEFsZ28gPSAnc2hhMjU2Jztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdyc2Etc2hhMi01MTInOlxuXHRcdFx0XHRhc3NlcnQuc3RyaWN0RXF1YWwodHlwZSwgJ3JzYScsIG1zZyk7XG5cdFx0XHRcdG9wdHMuaGFzaEFsZ28gPSAnc2hhNTEyJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdzc2gtZWQyNTUxOSc6XG5cdFx0XHRcdGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlLCAnZWQyNTUxOScsIG1zZyk7XG5cdFx0XHRcdG9wdHMuaGFzaEFsZ28gPSAnc2hhNTEyJztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyAobmV3IEVycm9yKCdVbmtub3duIFNTSCBzaWduYXR1cmUgJyArXG5cdFx0XHRcdCAgICAndHlwZTogJyArIGhlYWQpKTtcblx0XHRcdH1cblx0XHRcdHZhciBzaWcgPSBidWYucmVhZFBhcnQoKTtcblx0XHRcdGFzc2VydC5vayhidWYuYXRFbmQoKSwgJ2V4dHJhIHRyYWlsaW5nIGJ5dGVzJyk7XG5cdFx0XHRzaWcubmFtZSA9ICdzaWcnO1xuXHRcdFx0b3B0cy5wYXJ0cy5wdXNoKHNpZyk7XG5cdFx0XHRyZXR1cm4gKG5ldyBTaWduYXR1cmUob3B0cykpO1xuXHRcdH1cblx0fVxuXHRvcHRzLnBhcnRzLnB1c2goe25hbWU6ICdzaWcnLCBkYXRhOiBkYXRhfSk7XG5cdHJldHVybiAobmV3IFNpZ25hdHVyZShvcHRzKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRFNBYXNuMShkYXRhLCB0eXBlLCBmb3JtYXQsIG9wdHMpIHtcblx0dmFyIGRlciA9IG5ldyBhc24xLkJlclJlYWRlcihkYXRhKTtcblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHR2YXIgciA9IGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkludGVnZXIsIHRydWUpO1xuXHR2YXIgcyA9IGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkludGVnZXIsIHRydWUpO1xuXG5cdG9wdHMucGFydHMucHVzaCh7bmFtZTogJ3InLCBkYXRhOiB1dGlscy5tcE5vcm1hbGl6ZShyKX0pO1xuXHRvcHRzLnBhcnRzLnB1c2goe25hbWU6ICdzJywgZGF0YTogdXRpbHMubXBOb3JtYWxpemUocyl9KTtcblxuXHRyZXR1cm4gKG5ldyBTaWduYXR1cmUob3B0cykpO1xufVxuXG5mdW5jdGlvbiBwYXJzZURTQShkYXRhLCB0eXBlLCBmb3JtYXQsIG9wdHMpIHtcblx0aWYgKGRhdGEubGVuZ3RoICE9IDQwKSB7XG5cdFx0dmFyIGJ1ZiA9IG5ldyBTU0hCdWZmZXIoe2J1ZmZlcjogZGF0YX0pO1xuXHRcdHZhciBkID0gYnVmLnJlYWRCdWZmZXIoKTtcblx0XHRpZiAoZC50b1N0cmluZygnYXNjaWknKSA9PT0gJ3NzaC1kc3MnKVxuXHRcdFx0ZCA9IGJ1Zi5yZWFkQnVmZmVyKCk7XG5cdFx0YXNzZXJ0Lm9rKGJ1Zi5hdEVuZCgpLCAnZXh0cmEgdHJhaWxpbmcgYnl0ZXMnKTtcblx0XHRhc3NlcnQuc3RyaWN0RXF1YWwoZC5sZW5ndGgsIDQwLCAnaW52YWxpZCBpbm5lciBsZW5ndGgnKTtcblx0XHRkYXRhID0gZDtcblx0fVxuXHRvcHRzLnBhcnRzLnB1c2goe25hbWU6ICdyJywgZGF0YTogZGF0YS5zbGljZSgwLCAyMCl9KTtcblx0b3B0cy5wYXJ0cy5wdXNoKHtuYW1lOiAncycsIGRhdGE6IGRhdGEuc2xpY2UoMjAsIDQwKX0pO1xuXHRyZXR1cm4gKG5ldyBTaWduYXR1cmUob3B0cykpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUVDRFNBKGRhdGEsIHR5cGUsIGZvcm1hdCwgb3B0cykge1xuXHR2YXIgYnVmID0gbmV3IFNTSEJ1ZmZlcih7YnVmZmVyOiBkYXRhfSk7XG5cblx0dmFyIHIsIHM7XG5cdHZhciBpbm5lciA9IGJ1Zi5yZWFkQnVmZmVyKCk7XG5cdHZhciBzdHlwZSA9IGlubmVyLnRvU3RyaW5nKCdhc2NpaScpO1xuXHRpZiAoc3R5cGUuc2xpY2UoMCwgNikgPT09ICdlY2RzYS0nKSB7XG5cdFx0dmFyIHBhcnRzID0gc3R5cGUuc3BsaXQoJy0nKTtcblx0XHRhc3NlcnQuc3RyaWN0RXF1YWwocGFydHNbMF0sICdlY2RzYScpO1xuXHRcdGFzc2VydC5zdHJpY3RFcXVhbChwYXJ0c1sxXSwgJ3NoYTInKTtcblx0XHRvcHRzLmN1cnZlID0gcGFydHNbMl07XG5cdFx0c3dpdGNoIChvcHRzLmN1cnZlKSB7XG5cdFx0Y2FzZSAnbmlzdHAyNTYnOlxuXHRcdFx0b3B0cy5oYXNoQWxnbyA9ICdzaGEyNTYnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnbmlzdHAzODQnOlxuXHRcdFx0b3B0cy5oYXNoQWxnbyA9ICdzaGEzODQnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnbmlzdHA1MjEnOlxuXHRcdFx0b3B0cy5oYXNoQWxnbyA9ICdzaGE1MTInO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IChuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIEVDRFNBIGN1cnZlOiAnICtcblx0XHRcdCAgICBvcHRzLmN1cnZlKSk7XG5cdFx0fVxuXHRcdGlubmVyID0gYnVmLnJlYWRCdWZmZXIoKTtcblx0XHRhc3NlcnQub2soYnVmLmF0RW5kKCksICdleHRyYSB0cmFpbGluZyBieXRlcyBvbiBvdXRlcicpO1xuXHRcdGJ1ZiA9IG5ldyBTU0hCdWZmZXIoe2J1ZmZlcjogaW5uZXJ9KTtcblx0XHRyID0gYnVmLnJlYWRQYXJ0KCk7XG5cdH0gZWxzZSB7XG5cdFx0ciA9IHtkYXRhOiBpbm5lcn07XG5cdH1cblxuXHRzID0gYnVmLnJlYWRQYXJ0KCk7XG5cdGFzc2VydC5vayhidWYuYXRFbmQoKSwgJ2V4dHJhIHRyYWlsaW5nIGJ5dGVzJyk7XG5cblx0ci5uYW1lID0gJ3InO1xuXHRzLm5hbWUgPSAncyc7XG5cblx0b3B0cy5wYXJ0cy5wdXNoKHIpO1xuXHRvcHRzLnBhcnRzLnB1c2gocyk7XG5cdHJldHVybiAobmV3IFNpZ25hdHVyZShvcHRzKSk7XG59XG5cblNpZ25hdHVyZS5pc1NpZ25hdHVyZSA9IGZ1bmN0aW9uIChvYmosIHZlcikge1xuXHRyZXR1cm4gKHV0aWxzLmlzQ29tcGF0aWJsZShvYmosIFNpZ25hdHVyZSwgdmVyKSk7XG59O1xuXG4vKlxuICogQVBJIHZlcnNpb25zIGZvciBTaWduYXR1cmU6XG4gKiBbMSwwXSAtLSBpbml0aWFsIHZlclxuICogWzIsMF0gLS0gc3VwcG9ydCBmb3IgcnNhIGluIGZ1bGwgc3NoIGZvcm1hdCwgY29tcGF0IHdpdGggc3NocGstYWdlbnRcbiAqICAgICAgICAgIGhhc2hBbGdvcml0aG0gcHJvcGVydHlcbiAqIFsyLDFdIC0tIGZpcnN0IHRhZ2dlZCB2ZXJzaW9uXG4gKi9cblNpZ25hdHVyZS5wcm90b3R5cGUuX3NzaHBrQXBpVmVyc2lvbiA9IFsyLCAxXTtcblxuU2lnbmF0dXJlLl9vbGRWZXJzaW9uRGV0ZWN0ID0gZnVuY3Rpb24gKG9iaikge1xuXHRhc3NlcnQuZnVuYyhvYmoudG9CdWZmZXIpO1xuXHRpZiAob2JqLmhhc093blByb3BlcnR5KCdoYXNoQWxnb3JpdGhtJykpXG5cdFx0cmV0dXJuIChbMiwgMF0pO1xuXHRyZXR1cm4gKFsxLCAwXSk7XG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0gU1NIQnVmZmVyO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcblxuZnVuY3Rpb24gU1NIQnVmZmVyKG9wdHMpIHtcblx0YXNzZXJ0Lm9iamVjdChvcHRzLCAnb3B0aW9ucycpO1xuXHRpZiAob3B0cy5idWZmZXIgIT09IHVuZGVmaW5lZClcblx0XHRhc3NlcnQuYnVmZmVyKG9wdHMuYnVmZmVyLCAnb3B0aW9ucy5idWZmZXInKTtcblxuXHR0aGlzLl9zaXplID0gb3B0cy5idWZmZXIgPyBvcHRzLmJ1ZmZlci5sZW5ndGggOiAxMDI0O1xuXHR0aGlzLl9idWZmZXIgPSBvcHRzLmJ1ZmZlciB8fCAobmV3IEJ1ZmZlcih0aGlzLl9zaXplKSk7XG5cdHRoaXMuX29mZnNldCA9IDA7XG59XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUudG9CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiAodGhpcy5fYnVmZmVyLnNsaWNlKDAsIHRoaXMuX29mZnNldCkpO1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS5hdEVuZCA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICh0aGlzLl9vZmZzZXQgPj0gdGhpcy5fYnVmZmVyLmxlbmd0aCk7XG59O1xuXG5TU0hCdWZmZXIucHJvdG90eXBlLnJlbWFpbmRlciA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICh0aGlzLl9idWZmZXIuc2xpY2UodGhpcy5fb2Zmc2V0KSk7XG59O1xuXG5TU0hCdWZmZXIucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbiAobikge1xuXHR0aGlzLl9vZmZzZXQgKz0gbjtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUuZXhwYW5kID0gZnVuY3Rpb24gKCkge1xuXHR0aGlzLl9zaXplICo9IDI7XG5cdHZhciBidWYgPSBuZXcgQnVmZmVyKHRoaXMuX3NpemUpO1xuXHR0aGlzLl9idWZmZXIuY29weShidWYsIDApO1xuXHR0aGlzLl9idWZmZXIgPSBidWY7XG59O1xuXG5TU0hCdWZmZXIucHJvdG90eXBlLnJlYWRQYXJ0ID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gKHtkYXRhOiB0aGlzLnJlYWRCdWZmZXIoKX0pO1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS5yZWFkQnVmZmVyID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgbGVuID0gdGhpcy5fYnVmZmVyLnJlYWRVSW50MzJCRSh0aGlzLl9vZmZzZXQpO1xuXHR0aGlzLl9vZmZzZXQgKz0gNDtcblx0YXNzZXJ0Lm9rKHRoaXMuX29mZnNldCArIGxlbiA8PSB0aGlzLl9idWZmZXIubGVuZ3RoLFxuXHQgICAgJ2xlbmd0aCBvdXQgb2YgYm91bmRzIGF0ICsweCcgKyB0aGlzLl9vZmZzZXQudG9TdHJpbmcoMTYpICtcblx0ICAgICcgKGRhdGEgdHJ1bmNhdGVkPyknKTtcblx0dmFyIGJ1ZiA9IHRoaXMuX2J1ZmZlci5zbGljZSh0aGlzLl9vZmZzZXQsIHRoaXMuX29mZnNldCArIGxlbik7XG5cdHRoaXMuX29mZnNldCArPSBsZW47XG5cdHJldHVybiAoYnVmKTtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUucmVhZFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICh0aGlzLnJlYWRCdWZmZXIoKS50b1N0cmluZygpKTtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUucmVhZENTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQ7XG5cdHdoaWxlIChvZmZzZXQgPCB0aGlzLl9idWZmZXIubGVuZ3RoICYmXG5cdCAgICB0aGlzLl9idWZmZXJbb2Zmc2V0XSAhPT0gMHgwMClcblx0XHRvZmZzZXQrKztcblx0YXNzZXJ0Lm9rKG9mZnNldCA8IHRoaXMuX2J1ZmZlci5sZW5ndGgsICdjIHN0cmluZyBkb2VzIG5vdCB0ZXJtaW5hdGUnKTtcblx0dmFyIHN0ciA9IHRoaXMuX2J1ZmZlci5zbGljZSh0aGlzLl9vZmZzZXQsIG9mZnNldCkudG9TdHJpbmcoKTtcblx0dGhpcy5fb2Zmc2V0ID0gb2Zmc2V0ICsgMTtcblx0cmV0dXJuIChzdHIpO1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50ID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgdiA9IHRoaXMuX2J1ZmZlci5yZWFkVUludDMyQkUodGhpcy5fb2Zmc2V0KTtcblx0dGhpcy5fb2Zmc2V0ICs9IDQ7XG5cdHJldHVybiAodik7XG59O1xuXG5TU0hCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ2NCA9IGZ1bmN0aW9uICgpIHtcblx0YXNzZXJ0Lm9rKHRoaXMuX29mZnNldCArIDggPCB0aGlzLl9idWZmZXIubGVuZ3RoLFxuXHQgICAgJ2J1ZmZlciBub3QgbG9uZyBlbm91Z2ggdG8gcmVhZCBJbnQ2NCcpO1xuXHR2YXIgdiA9IHRoaXMuX2J1ZmZlci5zbGljZSh0aGlzLl9vZmZzZXQsIHRoaXMuX29mZnNldCArIDgpO1xuXHR0aGlzLl9vZmZzZXQgKz0gODtcblx0cmV0dXJuICh2KTtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUucmVhZENoYXIgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciB2ID0gdGhpcy5fYnVmZmVyW3RoaXMuX29mZnNldCsrXTtcblx0cmV0dXJuICh2KTtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUud3JpdGVCdWZmZXIgPSBmdW5jdGlvbiAoYnVmKSB7XG5cdHdoaWxlICh0aGlzLl9vZmZzZXQgKyA0ICsgYnVmLmxlbmd0aCA+IHRoaXMuX3NpemUpXG5cdFx0dGhpcy5leHBhbmQoKTtcblx0dGhpcy5fYnVmZmVyLndyaXRlVUludDMyQkUoYnVmLmxlbmd0aCwgdGhpcy5fb2Zmc2V0KTtcblx0dGhpcy5fb2Zmc2V0ICs9IDQ7XG5cdGJ1Zi5jb3B5KHRoaXMuX2J1ZmZlciwgdGhpcy5fb2Zmc2V0KTtcblx0dGhpcy5fb2Zmc2V0ICs9IGJ1Zi5sZW5ndGg7XG59O1xuXG5TU0hCdWZmZXIucHJvdG90eXBlLndyaXRlU3RyaW5nID0gZnVuY3Rpb24gKHN0cikge1xuXHR0aGlzLndyaXRlQnVmZmVyKG5ldyBCdWZmZXIoc3RyLCAndXRmOCcpKTtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUud3JpdGVDU3RyaW5nID0gZnVuY3Rpb24gKHN0cikge1xuXHR3aGlsZSAodGhpcy5fb2Zmc2V0ICsgMSArIHN0ci5sZW5ndGggPiB0aGlzLl9zaXplKVxuXHRcdHRoaXMuZXhwYW5kKCk7XG5cdHRoaXMuX2J1ZmZlci53cml0ZShzdHIsIHRoaXMuX29mZnNldCk7XG5cdHRoaXMuX29mZnNldCArPSBzdHIubGVuZ3RoO1xuXHR0aGlzLl9idWZmZXJbdGhpcy5fb2Zmc2V0KytdID0gMDtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQgPSBmdW5jdGlvbiAodikge1xuXHR3aGlsZSAodGhpcy5fb2Zmc2V0ICsgNCA+IHRoaXMuX3NpemUpXG5cdFx0dGhpcy5leHBhbmQoKTtcblx0dGhpcy5fYnVmZmVyLndyaXRlVUludDMyQkUodiwgdGhpcy5fb2Zmc2V0KTtcblx0dGhpcy5fb2Zmc2V0ICs9IDQ7XG59O1xuXG5TU0hCdWZmZXIucHJvdG90eXBlLndyaXRlSW50NjQgPSBmdW5jdGlvbiAodikge1xuXHRhc3NlcnQuYnVmZmVyKHYsICd2YWx1ZScpO1xuXHRpZiAodi5sZW5ndGggPiA4KSB7XG5cdFx0dmFyIGxlYWQgPSB2LnNsaWNlKDAsIHYubGVuZ3RoIC0gOCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZWFkLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRhc3NlcnQuc3RyaWN0RXF1YWwobGVhZFtpXSwgMCxcblx0XHRcdCAgICAnbXVzdCBmaXQgaW4gNjQgYml0cyBvZiBwcmVjaXNpb24nKTtcblx0XHR9XG5cdFx0diA9IHYuc2xpY2Uodi5sZW5ndGggLSA4LCB2Lmxlbmd0aCk7XG5cdH1cblx0d2hpbGUgKHRoaXMuX29mZnNldCArIDggPiB0aGlzLl9zaXplKVxuXHRcdHRoaXMuZXhwYW5kKCk7XG5cdHYuY29weSh0aGlzLl9idWZmZXIsIHRoaXMuX29mZnNldCk7XG5cdHRoaXMuX29mZnNldCArPSA4O1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS53cml0ZUNoYXIgPSBmdW5jdGlvbiAodikge1xuXHR3aGlsZSAodGhpcy5fb2Zmc2V0ICsgMSA+IHRoaXMuX3NpemUpXG5cdFx0dGhpcy5leHBhbmQoKTtcblx0dGhpcy5fYnVmZmVyW3RoaXMuX29mZnNldCsrXSA9IHY7XG59O1xuXG5TU0hCdWZmZXIucHJvdG90eXBlLndyaXRlUGFydCA9IGZ1bmN0aW9uIChwKSB7XG5cdHRoaXMud3JpdGVCdWZmZXIocC5kYXRhKTtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoYnVmKSB7XG5cdHdoaWxlICh0aGlzLl9vZmZzZXQgKyBidWYubGVuZ3RoID4gdGhpcy5fc2l6ZSlcblx0XHR0aGlzLmV4cGFuZCgpO1xuXHRidWYuY29weSh0aGlzLl9idWZmZXIsIHRoaXMuX29mZnNldCk7XG5cdHRoaXMuX29mZnNldCArPSBidWYubGVuZ3RoO1xufTtcbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0YnVmZmVyU3BsaXQ6IGJ1ZmZlclNwbGl0LFxuXHRhZGRSU0FNaXNzaW5nOiBhZGRSU0FNaXNzaW5nLFxuXHRjYWxjdWxhdGVEU0FQdWJsaWM6IGNhbGN1bGF0ZURTQVB1YmxpYyxcblx0bXBOb3JtYWxpemU6IG1wTm9ybWFsaXplLFxuXHRlY05vcm1hbGl6ZTogZWNOb3JtYWxpemUsXG5cdGNvdW50WmVyb3M6IGNvdW50WmVyb3MsXG5cdGFzc2VydENvbXBhdGlibGU6IGFzc2VydENvbXBhdGlibGUsXG5cdGlzQ29tcGF0aWJsZTogaXNDb21wYXRpYmxlLFxuXHRvcGVuc3NsS2V5RGVyaXY6IG9wZW5zc2xLZXlEZXJpdixcblx0b3BlbnNzaENpcGhlckluZm86IG9wZW5zc2hDaXBoZXJJbmZvXG59O1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi9wcml2YXRlLWtleScpO1xudmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuXG52YXIgTUFYX0NMQVNTX0RFUFRIID0gMztcblxuZnVuY3Rpb24gaXNDb21wYXRpYmxlKG9iaiwga2xhc3MsIG5lZWRWZXIpIHtcblx0aWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2YgKG9iaikgIT09ICdvYmplY3QnKVxuXHRcdHJldHVybiAoZmFsc2UpO1xuXHRpZiAobmVlZFZlciA9PT0gdW5kZWZpbmVkKVxuXHRcdG5lZWRWZXIgPSBrbGFzcy5wcm90b3R5cGUuX3NzaHBrQXBpVmVyc2lvbjtcblx0aWYgKG9iaiBpbnN0YW5jZW9mIGtsYXNzICYmXG5cdCAgICBrbGFzcy5wcm90b3R5cGUuX3NzaHBrQXBpVmVyc2lvblswXSA9PSBuZWVkVmVyWzBdKVxuXHRcdHJldHVybiAodHJ1ZSk7XG5cdHZhciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuXHR2YXIgZGVwdGggPSAwO1xuXHR3aGlsZSAocHJvdG8uY29uc3RydWN0b3IubmFtZSAhPT0ga2xhc3MubmFtZSkge1xuXHRcdHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcblx0XHRpZiAoIXByb3RvIHx8ICsrZGVwdGggPiBNQVhfQ0xBU1NfREVQVEgpXG5cdFx0XHRyZXR1cm4gKGZhbHNlKTtcblx0fVxuXHRpZiAocHJvdG8uY29uc3RydWN0b3IubmFtZSAhPT0ga2xhc3MubmFtZSlcblx0XHRyZXR1cm4gKGZhbHNlKTtcblx0dmFyIHZlciA9IHByb3RvLl9zc2hwa0FwaVZlcnNpb247XG5cdGlmICh2ZXIgPT09IHVuZGVmaW5lZClcblx0XHR2ZXIgPSBrbGFzcy5fb2xkVmVyc2lvbkRldGVjdChvYmopO1xuXHRpZiAodmVyWzBdICE9IG5lZWRWZXJbMF0gfHwgdmVyWzFdIDwgbmVlZFZlclsxXSlcblx0XHRyZXR1cm4gKGZhbHNlKTtcblx0cmV0dXJuICh0cnVlKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0Q29tcGF0aWJsZShvYmosIGtsYXNzLCBuZWVkVmVyLCBuYW1lKSB7XG5cdGlmIChuYW1lID09PSB1bmRlZmluZWQpXG5cdFx0bmFtZSA9ICdvYmplY3QnO1xuXHRhc3NlcnQub2sob2JqLCBuYW1lICsgJyBtdXN0IG5vdCBiZSBudWxsJyk7XG5cdGFzc2VydC5vYmplY3Qob2JqLCBuYW1lICsgJyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHRpZiAobmVlZFZlciA9PT0gdW5kZWZpbmVkKVxuXHRcdG5lZWRWZXIgPSBrbGFzcy5wcm90b3R5cGUuX3NzaHBrQXBpVmVyc2lvbjtcblx0aWYgKG9iaiBpbnN0YW5jZW9mIGtsYXNzICYmXG5cdCAgICBrbGFzcy5wcm90b3R5cGUuX3NzaHBrQXBpVmVyc2lvblswXSA9PSBuZWVkVmVyWzBdKVxuXHRcdHJldHVybjtcblx0dmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG5cdHZhciBkZXB0aCA9IDA7XG5cdHdoaWxlIChwcm90by5jb25zdHJ1Y3Rvci5uYW1lICE9PSBrbGFzcy5uYW1lKSB7XG5cdFx0cHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuXHRcdGFzc2VydC5vayhwcm90byAmJiArK2RlcHRoIDw9IE1BWF9DTEFTU19ERVBUSCxcblx0XHQgICAgbmFtZSArICcgbXVzdCBiZSBhICcgKyBrbGFzcy5uYW1lICsgJyBpbnN0YW5jZScpO1xuXHR9XG5cdGFzc2VydC5zdHJpY3RFcXVhbChwcm90by5jb25zdHJ1Y3Rvci5uYW1lLCBrbGFzcy5uYW1lLFxuXHQgICAgbmFtZSArICcgbXVzdCBiZSBhICcgKyBrbGFzcy5uYW1lICsgJyBpbnN0YW5jZScpO1xuXHR2YXIgdmVyID0gcHJvdG8uX3NzaHBrQXBpVmVyc2lvbjtcblx0aWYgKHZlciA9PT0gdW5kZWZpbmVkKVxuXHRcdHZlciA9IGtsYXNzLl9vbGRWZXJzaW9uRGV0ZWN0KG9iaik7XG5cdGFzc2VydC5vayh2ZXJbMF0gPT0gbmVlZFZlclswXSAmJiB2ZXJbMV0gPj0gbmVlZFZlclsxXSxcblx0ICAgIG5hbWUgKyAnIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoICcgKyBrbGFzcy5uYW1lICsgJyBrbGFzcyAnICtcblx0ICAgICd2ZXJzaW9uICcgKyBuZWVkVmVyWzBdICsgJy4nICsgbmVlZFZlclsxXSk7XG59XG5cbnZhciBDSVBIRVJfTEVOID0ge1xuXHQnZGVzLWVkZTMtY2JjJzogeyBrZXk6IDcsIGl2OiA4IH0sXG5cdCdhZXMtMTI4LWNiYyc6IHsga2V5OiAxNiwgaXY6IDE2IH1cbn07XG52YXIgUEtDUzVfU0FMVF9MRU4gPSA4O1xuXG5mdW5jdGlvbiBvcGVuc3NsS2V5RGVyaXYoY2lwaGVyLCBzYWx0LCBwYXNzcGhyYXNlLCBjb3VudCkge1xuXHRhc3NlcnQuYnVmZmVyKHNhbHQsICdzYWx0Jyk7XG5cdGFzc2VydC5idWZmZXIocGFzc3BocmFzZSwgJ3Bhc3NwaHJhc2UnKTtcblx0YXNzZXJ0Lm51bWJlcihjb3VudCwgJ2l0ZXJhdGlvbiBjb3VudCcpO1xuXG5cdHZhciBjbGVuID0gQ0lQSEVSX0xFTltjaXBoZXJdO1xuXHRhc3NlcnQub2JqZWN0KGNsZW4sICdzdXBwb3J0ZWQgY2lwaGVyJyk7XG5cblx0c2FsdCA9IHNhbHQuc2xpY2UoMCwgUEtDUzVfU0FMVF9MRU4pO1xuXG5cdHZhciBELCBEX3ByZXYsIGJ1ZnM7XG5cdHZhciBtYXRlcmlhbCA9IG5ldyBCdWZmZXIoMCk7XG5cdHdoaWxlIChtYXRlcmlhbC5sZW5ndGggPCBjbGVuLmtleSArIGNsZW4uaXYpIHtcblx0XHRidWZzID0gW107XG5cdFx0aWYgKERfcHJldilcblx0XHRcdGJ1ZnMucHVzaChEX3ByZXYpO1xuXHRcdGJ1ZnMucHVzaChwYXNzcGhyYXNlKTtcblx0XHRidWZzLnB1c2goc2FsdCk7XG5cdFx0RCA9IEJ1ZmZlci5jb25jYXQoYnVmcyk7XG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBjb3VudDsgKytqKVxuXHRcdFx0RCA9IGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUoRCkuZGlnZXN0KCk7XG5cdFx0bWF0ZXJpYWwgPSBCdWZmZXIuY29uY2F0KFttYXRlcmlhbCwgRF0pO1xuXHRcdERfcHJldiA9IEQ7XG5cdH1cblxuXHRyZXR1cm4gKHtcblx0ICAgIGtleTogbWF0ZXJpYWwuc2xpY2UoMCwgY2xlbi5rZXkpLFxuXHQgICAgaXY6IG1hdGVyaWFsLnNsaWNlKGNsZW4ua2V5LCBjbGVuLmtleSArIGNsZW4uaXYpXG5cdH0pO1xufVxuXG4vKiBDb3VudCBsZWFkaW5nIHplcm8gYml0cyBvbiBhIGJ1ZmZlciAqL1xuZnVuY3Rpb24gY291bnRaZXJvcyhidWYpIHtcblx0dmFyIG8gPSAwLCBvYml0ID0gODtcblx0d2hpbGUgKG8gPCBidWYubGVuZ3RoKSB7XG5cdFx0dmFyIG1hc2sgPSAoMSA8PCBvYml0KTtcblx0XHRpZiAoKGJ1ZltvXSAmIG1hc2spID09PSBtYXNrKVxuXHRcdFx0YnJlYWs7XG5cdFx0b2JpdC0tO1xuXHRcdGlmIChvYml0IDwgMCkge1xuXHRcdFx0bysrO1xuXHRcdFx0b2JpdCA9IDg7XG5cdFx0fVxuXHR9XG5cdHJldHVybiAobyo4ICsgKDggLSBvYml0KSAtIDEpO1xufVxuXG5mdW5jdGlvbiBidWZmZXJTcGxpdChidWYsIGNocikge1xuXHRhc3NlcnQuYnVmZmVyKGJ1Zik7XG5cdGFzc2VydC5zdHJpbmcoY2hyKTtcblxuXHR2YXIgcGFydHMgPSBbXTtcblx0dmFyIGxhc3RQYXJ0ID0gMDtcblx0dmFyIG1hdGNoZXMgPSAwO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7ICsraSkge1xuXHRcdGlmIChidWZbaV0gPT09IGNoci5jaGFyQ29kZUF0KG1hdGNoZXMpKVxuXHRcdFx0KyttYXRjaGVzO1xuXHRcdGVsc2UgaWYgKGJ1ZltpXSA9PT0gY2hyLmNoYXJDb2RlQXQoMCkpXG5cdFx0XHRtYXRjaGVzID0gMTtcblx0XHRlbHNlXG5cdFx0XHRtYXRjaGVzID0gMDtcblxuXHRcdGlmIChtYXRjaGVzID49IGNoci5sZW5ndGgpIHtcblx0XHRcdHZhciBuZXdQYXJ0ID0gaSArIDE7XG5cdFx0XHRwYXJ0cy5wdXNoKGJ1Zi5zbGljZShsYXN0UGFydCwgbmV3UGFydCAtIG1hdGNoZXMpKTtcblx0XHRcdGxhc3RQYXJ0ID0gbmV3UGFydDtcblx0XHRcdG1hdGNoZXMgPSAwO1xuXHRcdH1cblx0fVxuXHRpZiAobGFzdFBhcnQgPD0gYnVmLmxlbmd0aClcblx0XHRwYXJ0cy5wdXNoKGJ1Zi5zbGljZShsYXN0UGFydCwgYnVmLmxlbmd0aCkpO1xuXG5cdHJldHVybiAocGFydHMpO1xufVxuXG5mdW5jdGlvbiBlY05vcm1hbGl6ZShidWYsIGFkZFplcm8pIHtcblx0YXNzZXJ0LmJ1ZmZlcihidWYpO1xuXHRpZiAoYnVmWzBdID09PSAweDAwICYmIGJ1ZlsxXSA9PT0gMHgwNCkge1xuXHRcdGlmIChhZGRaZXJvKVxuXHRcdFx0cmV0dXJuIChidWYpO1xuXHRcdHJldHVybiAoYnVmLnNsaWNlKDEpKTtcblx0fSBlbHNlIGlmIChidWZbMF0gPT09IDB4MDQpIHtcblx0XHRpZiAoIWFkZFplcm8pXG5cdFx0XHRyZXR1cm4gKGJ1Zik7XG5cdH0gZWxzZSB7XG5cdFx0d2hpbGUgKGJ1ZlswXSA9PT0gMHgwMClcblx0XHRcdGJ1ZiA9IGJ1Zi5zbGljZSgxKTtcblx0XHRpZiAoYnVmWzBdID09PSAweDAyIHx8IGJ1ZlswXSA9PT0gMHgwMylcblx0XHRcdHRocm93IChuZXcgRXJyb3IoJ0NvbXByZXNzZWQgZWxsaXB0aWMgY3VydmUgcG9pbnRzICcgK1xuXHRcdFx0ICAgICdhcmUgbm90IHN1cHBvcnRlZCcpKTtcblx0XHRpZiAoYnVmWzBdICE9PSAweDA0KVxuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcignTm90IGEgdmFsaWQgZWxsaXB0aWMgY3VydmUgcG9pbnQnKSk7XG5cdFx0aWYgKCFhZGRaZXJvKVxuXHRcdFx0cmV0dXJuIChidWYpO1xuXHR9XG5cdHZhciBiID0gbmV3IEJ1ZmZlcihidWYubGVuZ3RoICsgMSk7XG5cdGJbMF0gPSAweDA7XG5cdGJ1Zi5jb3B5KGIsIDEpO1xuXHRyZXR1cm4gKGIpO1xufVxuXG5mdW5jdGlvbiBtcE5vcm1hbGl6ZShidWYpIHtcblx0YXNzZXJ0LmJ1ZmZlcihidWYpO1xuXHR3aGlsZSAoYnVmLmxlbmd0aCA+IDEgJiYgYnVmWzBdID09PSAweDAwICYmIChidWZbMV0gJiAweDgwKSA9PT0gMHgwMClcblx0XHRidWYgPSBidWYuc2xpY2UoMSk7XG5cdGlmICgoYnVmWzBdICYgMHg4MCkgPT09IDB4ODApIHtcblx0XHR2YXIgYiA9IG5ldyBCdWZmZXIoYnVmLmxlbmd0aCArIDEpO1xuXHRcdGJbMF0gPSAweDAwO1xuXHRcdGJ1Zi5jb3B5KGIsIDEpO1xuXHRcdGJ1ZiA9IGI7XG5cdH1cblx0cmV0dXJuIChidWYpO1xufVxuXG5mdW5jdGlvbiBiaWdpbnRUb01wQnVmKGJpZ2ludCkge1xuXHR2YXIgYnVmID0gbmV3IEJ1ZmZlcihiaWdpbnQudG9CeXRlQXJyYXkoKSk7XG5cdGJ1ZiA9IG1wTm9ybWFsaXplKGJ1Zik7XG5cdHJldHVybiAoYnVmKTtcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlRFNBUHVibGljKGcsIHAsIHgpIHtcblx0YXNzZXJ0LmJ1ZmZlcihnKTtcblx0YXNzZXJ0LmJ1ZmZlcihwKTtcblx0YXNzZXJ0LmJ1ZmZlcih4KTtcblx0dHJ5IHtcblx0XHR2YXIgYmlnSW50ID0gcmVxdWlyZSgnanNibicpLkJpZ0ludGVnZXI7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdUbyBsb2FkIGEgUEtDUyM4IGZvcm1hdCBEU0EgcHJpdmF0ZSBrZXksICcgK1xuXHRcdCAgICAndGhlIG5vZGUganNibiBsaWJyYXJ5IGlzIHJlcXVpcmVkLicpKTtcblx0fVxuXHRnID0gbmV3IGJpZ0ludChnKTtcblx0cCA9IG5ldyBiaWdJbnQocCk7XG5cdHggPSBuZXcgYmlnSW50KHgpO1xuXHR2YXIgeSA9IGcubW9kUG93KHgsIHApO1xuXHR2YXIgeWJ1ZiA9IGJpZ2ludFRvTXBCdWYoeSk7XG5cdHJldHVybiAoeWJ1Zik7XG59XG5cbmZ1bmN0aW9uIGFkZFJTQU1pc3Npbmcoa2V5KSB7XG5cdGFzc2VydC5vYmplY3Qoa2V5KTtcblx0YXNzZXJ0Q29tcGF0aWJsZShrZXksIFByaXZhdGVLZXksIFsxLCAxXSk7XG5cdHRyeSB7XG5cdFx0dmFyIGJpZ0ludCA9IHJlcXVpcmUoJ2pzYm4nKS5CaWdJbnRlZ2VyO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignVG8gd3JpdGUgYSBQRU0gcHJpdmF0ZSBrZXkgZnJvbSAnICtcblx0XHQgICAgJ3RoaXMgc291cmNlLCB0aGUgbm9kZSBqc2JuIGxpYiBpcyByZXF1aXJlZC4nKSk7XG5cdH1cblxuXHR2YXIgZCA9IG5ldyBiaWdJbnQoa2V5LnBhcnQuZC5kYXRhKTtcblx0dmFyIGJ1ZjtcblxuXHRpZiAoIWtleS5wYXJ0LmRtb2RwKSB7XG5cdFx0dmFyIHAgPSBuZXcgYmlnSW50KGtleS5wYXJ0LnAuZGF0YSk7XG5cdFx0dmFyIGRtb2RwID0gZC5tb2QocC5zdWJ0cmFjdCgxKSk7XG5cblx0XHRidWYgPSBiaWdpbnRUb01wQnVmKGRtb2RwKTtcblx0XHRrZXkucGFydC5kbW9kcCA9IHtuYW1lOiAnZG1vZHAnLCBkYXRhOiBidWZ9O1xuXHRcdGtleS5wYXJ0cy5wdXNoKGtleS5wYXJ0LmRtb2RwKTtcblx0fVxuXHRpZiAoIWtleS5wYXJ0LmRtb2RxKSB7XG5cdFx0dmFyIHEgPSBuZXcgYmlnSW50KGtleS5wYXJ0LnEuZGF0YSk7XG5cdFx0dmFyIGRtb2RxID0gZC5tb2QocS5zdWJ0cmFjdCgxKSk7XG5cblx0XHRidWYgPSBiaWdpbnRUb01wQnVmKGRtb2RxKTtcblx0XHRrZXkucGFydC5kbW9kcSA9IHtuYW1lOiAnZG1vZHEnLCBkYXRhOiBidWZ9O1xuXHRcdGtleS5wYXJ0cy5wdXNoKGtleS5wYXJ0LmRtb2RxKTtcblx0fVxufVxuXG5mdW5jdGlvbiBvcGVuc3NoQ2lwaGVySW5mbyhjaXBoZXIpIHtcblx0dmFyIGluZiA9IHt9O1xuXHRzd2l0Y2ggKGNpcGhlcikge1xuXHRjYXNlICczZGVzLWNiYyc6XG5cdFx0aW5mLmtleVNpemUgPSAyNDtcblx0XHRpbmYuYmxvY2tTaXplID0gODtcblx0XHRpbmYub3BlbnNzbE5hbWUgPSAnZGVzLWVkZTMtY2JjJztcblx0XHRicmVhaztcblx0Y2FzZSAnYmxvd2Zpc2gtY2JjJzpcblx0XHRpbmYua2V5U2l6ZSA9IDE2O1xuXHRcdGluZi5ibG9ja1NpemUgPSA4O1xuXHRcdGluZi5vcGVuc3NsTmFtZSA9ICdiZi1jYmMnO1xuXHRcdGJyZWFrO1xuXHRjYXNlICdhZXMxMjgtY2JjJzpcblx0Y2FzZSAnYWVzMTI4LWN0cic6XG5cdGNhc2UgJ2FlczEyOC1nY21Ab3BlbnNzaC5jb20nOlxuXHRcdGluZi5rZXlTaXplID0gMTY7XG5cdFx0aW5mLmJsb2NrU2l6ZSA9IDE2O1xuXHRcdGluZi5vcGVuc3NsTmFtZSA9ICdhZXMtMTI4LScgKyBjaXBoZXIuc2xpY2UoNywgMTApO1xuXHRcdGJyZWFrO1xuXHRjYXNlICdhZXMxOTItY2JjJzpcblx0Y2FzZSAnYWVzMTkyLWN0cic6XG5cdGNhc2UgJ2FlczE5Mi1nY21Ab3BlbnNzaC5jb20nOlxuXHRcdGluZi5rZXlTaXplID0gMjQ7XG5cdFx0aW5mLmJsb2NrU2l6ZSA9IDE2O1xuXHRcdGluZi5vcGVuc3NsTmFtZSA9ICdhZXMtMTkyLScgKyBjaXBoZXIuc2xpY2UoNywgMTApO1xuXHRcdGJyZWFrO1xuXHRjYXNlICdhZXMyNTYtY2JjJzpcblx0Y2FzZSAnYWVzMjU2LWN0cic6XG5cdGNhc2UgJ2FlczI1Ni1nY21Ab3BlbnNzaC5jb20nOlxuXHRcdGluZi5rZXlTaXplID0gMzI7XG5cdFx0aW5mLmJsb2NrU2l6ZSA9IDE2O1xuXHRcdGluZi5vcGVuc3NsTmFtZSA9ICdhZXMtMjU2LScgKyBjaXBoZXIuc2xpY2UoNywgMTApO1xuXHRcdGJyZWFrO1xuXHRkZWZhdWx0OlxuXHRcdHRocm93IChuZXcgRXJyb3IoXG5cdFx0ICAgICdVbnN1cHBvcnRlZCBvcGVuc3NsIGNpcGhlciBcIicgKyBjaXBoZXIgKyAnXCInKSk7XG5cdH1cblx0cmV0dXJuIChpbmYpO1xufVxuIiwiLy8gQ29weXJpZ2h0IChjKSAyMDEyLCBNYXJrIENhdmFnZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cblxuLy8vLS0tIEdsb2JhbHNcblxuLyogSlNTVFlMRUQgKi9cbnZhciBVVUlEX1JFR0VYUCA9IC9eW2EtZkEtRjAtOV17OH0tW2EtZkEtRjAtOV17NH0tW2EtZkEtRjAtOV17NH0tW2EtZkEtRjAtOV17NH0tW2EtZkEtRjAtOV17MTJ9JC87XG5cblxuLy8vLS0tIEludGVybmFsXG5cbmZ1bmN0aW9uIF9jYXBpdGFsaXplKHN0cikge1xuICAgIHJldHVybiAoc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpKTtcbn1cblxuZnVuY3Rpb24gX3Rvc3MobmFtZSwgZXhwZWN0ZWQsIG9wZXIsIGFyZywgYWN0dWFsKSB7XG4gICAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6IHV0aWwuZm9ybWF0KCclcyAoJXMpIGlzIHJlcXVpcmVkJywgbmFtZSwgZXhwZWN0ZWQpLFxuICAgICAgICBhY3R1YWw6IChhY3R1YWwgPT09IHVuZGVmaW5lZCkgPyB0eXBlb2YgKGFyZykgOiBhY3R1YWwoYXJnKSxcbiAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgICAgICBvcGVyYXRvcjogb3BlciB8fCAnPT09JyxcbiAgICAgICAgc3RhY2tTdGFydEZ1bmN0aW9uOiBfdG9zcy5jYWxsZXJcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2dldENsYXNzKGFyZykge1xuICAgIHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykuc2xpY2UoOCwgLTEpKTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHtcbiAgICAvLyBXaHkgZXZlbiBib3RoZXIgd2l0aCBhc3NlcnRzP1xufVxuXG5cbi8vLy0tLSBFeHBvcnRzXG5cbnZhciB0eXBlcyA9IHtcbiAgICBib29sOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdib29sZWFuJzsgfVxuICAgIH0sXG4gICAgZnVuYzoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnZnVuY3Rpb24nOyB9XG4gICAgfSxcbiAgICBzdHJpbmc6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ3N0cmluZyc7IH1cbiAgICB9LFxuICAgIG9iamVjdDoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBudW1iZXI6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdudW1iZXInICYmICFpc05hTihhcmcpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBmaW5pdGU6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdudW1iZXInICYmICFpc05hTihhcmcpICYmIGlzRmluaXRlKGFyZyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGJ1ZmZlcjoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGFyZyk7IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnQnVmZmVyLmlzQnVmZmVyJ1xuICAgIH0sXG4gICAgYXJyYXk6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKTsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdBcnJheS5pc0FycmF5J1xuICAgIH0sXG4gICAgc3RyZWFtOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBhcmcgaW5zdGFuY2VvZiBTdHJlYW07IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaW5zdGFuY2VvZicsXG4gICAgICAgIGFjdHVhbDogX2dldENsYXNzXG4gICAgfSxcbiAgICBkYXRlOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBhcmcgaW5zdGFuY2VvZiBEYXRlOyB9LFxuICAgICAgICBvcGVyYXRvcjogJ2luc3RhbmNlb2YnLFxuICAgICAgICBhY3R1YWw6IF9nZXRDbGFzc1xuICAgIH0sXG4gICAgcmVnZXhwOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBhcmcgaW5zdGFuY2VvZiBSZWdFeHA7IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaW5zdGFuY2VvZicsXG4gICAgICAgIGFjdHVhbDogX2dldENsYXNzXG4gICAgfSxcbiAgICB1dWlkOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnc3RyaW5nJyAmJiBVVUlEX1JFR0VYUC50ZXN0KGFyZyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaXNVVUlEJ1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIF9zZXRFeHBvcnRzKG5kZWJ1Zykge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModHlwZXMpO1xuICAgIHZhciBvdXQ7XG5cbiAgICAvKiByZS1leHBvcnQgc3RhbmRhcmQgYXNzZXJ0ICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfTkRFQlVHKSB7XG4gICAgICAgIG91dCA9IG5vb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoIWFyZykge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgJ3RydWUnLCBhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qIHN0YW5kYXJkIGNoZWNrcyAqL1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICBpZiAobmRlYnVnKSB7XG4gICAgICAgICAgICBvdXRba10gPSBub29wO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0eXBlID0gdHlwZXNba107XG4gICAgICAgIG91dFtrXSA9IGZ1bmN0aW9uIChhcmcsIG1zZykge1xuICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZykpIHtcbiAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGssIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogb3B0aW9uYWwgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBuYW1lID0gJ29wdGlvbmFsJyArIF9jYXBpdGFsaXplKGspO1xuICAgICAgICBpZiAobmRlYnVnKSB7XG4gICAgICAgICAgICBvdXRbbmFtZV0gPSBub29wO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0eXBlID0gdHlwZXNba107XG4gICAgICAgIG91dFtuYW1lXSA9IGZ1bmN0aW9uIChhcmcsIG1zZykge1xuICAgICAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdHlwZS5jaGVjayhhcmcpKSB7XG4gICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBrLCB0eXBlLm9wZXJhdG9yLCBhcmcsIHR5cGUuYWN0dWFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qIGFycmF5T2YgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBuYW1lID0gJ2FycmF5T2YnICsgX2NhcGl0YWxpemUoayk7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtuYW1lXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgdmFyIGV4cGVjdGVkID0gJ1snICsgayArICddJztcbiAgICAgICAgb3V0W25hbWVdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgZXhwZWN0ZWQsIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZ1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBleHBlY3RlZCwgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogb3B0aW9uYWxBcnJheU9mIGNoZWNrcyAqL1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICB2YXIgbmFtZSA9ICdvcHRpb25hbEFycmF5T2YnICsgX2NhcGl0YWxpemUoayk7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtuYW1lXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgdmFyIGV4cGVjdGVkID0gJ1snICsgayArICddJztcbiAgICAgICAgb3V0W25hbWVdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGV4cGVjdGVkLCB0eXBlLm9wZXJhdG9yLCBhcmcsIHR5cGUuYWN0dWFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdHlwZS5jaGVjayhhcmdbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIF90b3NzKG1zZywgZXhwZWN0ZWQsIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qIHJlLWV4cG9ydCBidWlsdC1pbiBhc3NlcnRpb25zICovXG4gICAgT2JqZWN0LmtleXMoYXNzZXJ0KS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChrID09PSAnQXNzZXJ0aW9uRXJyb3InKSB7XG4gICAgICAgICAgICBvdXRba10gPSBhc3NlcnRba107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5kZWJ1Zykge1xuICAgICAgICAgICAgb3V0W2tdID0gbm9vcDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBvdXRba10gPSBhc3NlcnRba107XG4gICAgfSk7XG5cbiAgICAvKiBleHBvcnQgb3Vyc2VsdmVzIChmb3IgdW5pdCB0ZXN0cyBfb25seV8pICovXG4gICAgb3V0Ll9zZXRFeHBvcnRzID0gX3NldEV4cG9ydHM7XG5cbiAgICByZXR1cm4gb3V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRFeHBvcnRzKHByb2Nlc3MuZW52Lk5PREVfTkRFQlVHKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzTmF0aXZlID0gL1xcLm5vZGUkLztcblxuZnVuY3Rpb24gZm9yRWFjaChvYmosIGNhbGxiYWNrKSB7XG4gICAgZm9yICggdmFyIGtleSBpbiBvYmogKSB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soa2V5KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkge1xuICAgIGZvckVhY2goc291cmNlLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gY2xlYXJDYWNoZShyZXF1aXJlQ2FjaGUpIHtcbiAgICBmb3JFYWNoKHJlcXVpcmVDYWNoZSwgZnVuY3Rpb24gKHJlc29sdmVkUGF0aCkge1xuICAgICAgICBpZiAoIWlzTmF0aXZlLnRlc3QocmVzb2x2ZWRQYXRoKSkge1xuICAgICAgICAgICAgZGVsZXRlIHJlcXVpcmVDYWNoZVtyZXNvbHZlZFBhdGhdO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcXVpcmVDYWNoZSwgY2FsbGJhY2ssIGNhbGxiYWNrRm9yTW9kdWxlc1RvS2VlcCwgbW9kdWxlKSB7XG5cbiAgICB2YXIgb3JpZ2luYWxDYWNoZSA9IGFzc2lnbih7fSwgcmVxdWlyZUNhY2hlKTtcbiAgICBjbGVhckNhY2hlKHJlcXVpcmVDYWNoZSk7XG5cbiAgICBpZiAoY2FsbGJhY2tGb3JNb2R1bGVzVG9LZWVwKSB7XG5cbiAgICAgICAgdmFyIG9yaWdpbmFsTW9kdWxlQ2hpbGRyZW4gPSBtb2R1bGUuY2hpbGRyZW4gPyBtb2R1bGUuY2hpbGRyZW4uc2xpY2UoKSA6IGZhbHNlOyAvLyBDcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIG1vZHVsZS5jaGlsZHJlblxuXG4gICAgICAgIGNhbGxiYWNrRm9yTW9kdWxlc1RvS2VlcCgpO1xuXG4gICAgICAgIC8vIExpc3RzIHRoZSBjYWNoZSBlbnRyaWVzIG1hZGUgYnkgY2FsbGJhY2tGb3JNb2R1bGVzVG9LZWVwKClcbiAgICAgICAgdmFyIG1vZHVsZXNUb0tlZXAgPSBbXTtcbiAgICAgICAgZm9yRWFjaChyZXF1aXJlQ2FjaGUsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIG1vZHVsZXNUb0tlZXAucHVzaChrZXkpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBEaXNjYXJkcyB0aGUgbW9kdWxlcyByZXF1aXJlZCBpbiBjYWxsYmFja0Zvck1vZHVsZXNUb0tlZXAoKVxuICAgICAgICBjbGVhckNhY2hlKHJlcXVpcmVDYWNoZSk7XG5cbiAgICAgICAgaWYgKG1vZHVsZS5jaGlsZHJlbikgeyAvLyBPbmx5IHRydWUgZm9yIG5vZGUuanNcbiAgICAgICAgICAgIG1vZHVsZS5jaGlsZHJlbiA9IG9yaWdpbmFsTW9kdWxlQ2hpbGRyZW47IC8vIFJlbW92ZXMgbGFzdCByZWZlcmVuY2VzIHRvIG1vZHVsZXMgcmVxdWlyZWQgaW4gY2FsbGJhY2tGb3JNb2R1bGVzVG9LZWVwKCkgLT4gTm8gbWVtb3J5IGxlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRha2VzIHRoZSBjYWNoZSBlbnRyaWVzIG9mIHRoZSBvcmlnaW5hbCBjYWNoZSBpbiBjYXNlIHRoZSBtb2R1bGVzIHdoZXJlIHJlcXVpcmVkIGJlZm9yZVxuICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBtb2R1bGVzVG9LZWVwLmxlbmd0aDsgaSs9MSApIHtcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbENhY2hlW21vZHVsZXNUb0tlZXBbaV1dKSB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZUNhY2hlW21vZHVsZXNUb0tlZXBbaV1dID0gb3JpZ2luYWxDYWNoZVttb2R1bGVzVG9LZWVwW2ldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgdmFyIGZyZXNoTW9kdWxlID0gY2FsbGJhY2soKTtcblxuICAgIHZhciBzdGVhbHRoQ2FjaGUgPSBjYWxsYmFja0Zvck1vZHVsZXNUb0tlZXAgPyBhc3NpZ24oe30sIHJlcXVpcmVDYWNoZSkgOiBmYWxzZTtcblxuICAgIGNsZWFyQ2FjaGUocmVxdWlyZUNhY2hlKTtcblxuICAgIGlmIChjYWxsYmFja0Zvck1vZHVsZXNUb0tlZXApIHtcbiAgICAgICAgLy8gSW4gY2FzZSBtb2R1bGVzIHRvIGtlZXAgd2VyZSByZXF1aXJlZCBpbnNpZGUgdGhlIHN0ZWFsdGh5IHJlcXVpcmUgZm9yIHRoZSBmaXJzdCB0aW1lLCBjb3B5IHRoZW0gdG8gdGhlIHJlc3RvcmVkIGNhY2hlXG4gICAgICAgIGZvciAoIHZhciBrID0gMDsgayA8IG1vZHVsZXNUb0tlZXAubGVuZ3RoOyBrKz0xICkge1xuICAgICAgICAgICAgaWYgKHN0ZWFsdGhDYWNoZVttb2R1bGVzVG9LZWVwW2tdXSkge1xuICAgICAgICAgICAgICAgIHJlcXVpcmVDYWNoZVttb2R1bGVzVG9LZWVwW2tdXSA9IHN0ZWFsdGhDYWNoZVttb2R1bGVzVG9LZWVwW2tdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzc2lnbihyZXF1aXJlQ2FjaGUsIG9yaWdpbmFsQ2FjaGUpO1xuXG4gICAgcmV0dXJuIGZyZXNoTW9kdWxlO1xuXG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbm1vZHVsZS5leHBvcnRzID0gU3RyZWFtO1xuXG52YXIgRUUgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5pbmhlcml0cyhTdHJlYW0sIEVFKTtcblN0cmVhbS5SZWFkYWJsZSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS5qcycpO1xuU3RyZWFtLldyaXRhYmxlID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3dyaXRhYmxlLmpzJyk7XG5TdHJlYW0uRHVwbGV4ID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL2R1cGxleC5qcycpO1xuU3RyZWFtLlRyYW5zZm9ybSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS90cmFuc2Zvcm0uanMnKTtcblN0cmVhbS5QYXNzVGhyb3VnaCA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qcycpO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjQueFxuU3RyZWFtLlN0cmVhbSA9IFN0cmVhbTtcblxuXG5cbi8vIG9sZC1zdHlsZSBzdHJlYW1zLiAgTm90ZSB0aGF0IHRoZSBwaXBlIG1ldGhvZCAodGhlIG9ubHkgcmVsZXZhbnRcbi8vIHBhcnQgb2YgdGhpcyBjbGFzcykgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgUmVhZGFibGUgY2xhc3MuXG5cbmZ1bmN0aW9uIFN0cmVhbSgpIHtcbiAgRUUuY2FsbCh0aGlzKTtcbn1cblxuU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgb3B0aW9ucykge1xuICB2YXIgc291cmNlID0gdGhpcztcblxuICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHtcbiAgICBpZiAoZGVzdC53cml0YWJsZSkge1xuICAgICAgaWYgKGZhbHNlID09PSBkZXN0LndyaXRlKGNodW5rKSAmJiBzb3VyY2UucGF1c2UpIHtcbiAgICAgICAgc291cmNlLnBhdXNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc291cmNlLm9uKCdkYXRhJywgb25kYXRhKTtcblxuICBmdW5jdGlvbiBvbmRyYWluKCkge1xuICAgIGlmIChzb3VyY2UucmVhZGFibGUgJiYgc291cmNlLnJlc3VtZSkge1xuICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Qub24oJ2RyYWluJywgb25kcmFpbik7XG5cbiAgLy8gSWYgdGhlICdlbmQnIG9wdGlvbiBpcyBub3Qgc3VwcGxpZWQsIGRlc3QuZW5kKCkgd2lsbCBiZSBjYWxsZWQgd2hlblxuICAvLyBzb3VyY2UgZ2V0cyB0aGUgJ2VuZCcgb3IgJ2Nsb3NlJyBldmVudHMuICBPbmx5IGRlc3QuZW5kKCkgb25jZS5cbiAgaWYgKCFkZXN0Ll9pc1N0ZGlvICYmICghb3B0aW9ucyB8fCBvcHRpb25zLmVuZCAhPT0gZmFsc2UpKSB7XG4gICAgc291cmNlLm9uKCdlbmQnLCBvbmVuZCk7XG4gICAgc291cmNlLm9uKCdjbG9zZScsIG9uY2xvc2UpO1xuICB9XG5cbiAgdmFyIGRpZE9uRW5kID0gZmFsc2U7XG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGlmIChkaWRPbkVuZCkgcmV0dXJuO1xuICAgIGRpZE9uRW5kID0gdHJ1ZTtcblxuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm47XG4gICAgZGlkT25FbmQgPSB0cnVlO1xuXG4gICAgaWYgKHR5cGVvZiBkZXN0LmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIGRlc3QuZGVzdHJveSgpO1xuICB9XG5cbiAgLy8gZG9uJ3QgbGVhdmUgZGFuZ2xpbmcgcGlwZXMgd2hlbiB0aGVyZSBhcmUgZXJyb3JzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgY2xlYW51cCgpO1xuICAgIGlmIChFRS5saXN0ZW5lckNvdW50KHRoaXMsICdlcnJvcicpID09PSAwKSB7XG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkIHN0cmVhbSBlcnJvciBpbiBwaXBlLlxuICAgIH1cbiAgfVxuXG4gIHNvdXJjZS5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgZGVzdC5vbignZXJyb3InLCBvbmVycm9yKTtcblxuICAvLyByZW1vdmUgYWxsIHRoZSBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGFkZGVkLlxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcblxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpO1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcblxuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBjbGVhbnVwKTtcbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIGNsZWFudXApO1xuICB9XG5cbiAgc291cmNlLm9uKCdlbmQnLCBjbGVhbnVwKTtcbiAgc291cmNlLm9uKCdjbG9zZScsIGNsZWFudXApO1xuXG4gIGRlc3Qub24oJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgZGVzdC5lbWl0KCdwaXBlJywgc291cmNlKTtcblxuICAvLyBBbGxvdyBmb3IgdW5peC1saWtlIHVzYWdlOiBBLnBpcGUoQikucGlwZShDKVxuICByZXR1cm4gZGVzdDtcbn07XG4iLCJ2YXIgQ2xpZW50UmVxdWVzdCA9IHJlcXVpcmUoJy4vbGliL3JlcXVlc3QnKVxudmFyIGV4dGVuZCA9IHJlcXVpcmUoJ3h0ZW5kJylcbnZhciBzdGF0dXNDb2RlcyA9IHJlcXVpcmUoJ2J1aWx0aW4tc3RhdHVzLWNvZGVzJylcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKVxuXG52YXIgaHR0cCA9IGV4cG9ydHNcblxuaHR0cC5yZXF1ZXN0ID0gZnVuY3Rpb24gKG9wdHMsIGNiKSB7XG5cdGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpXG5cdFx0b3B0cyA9IHVybC5wYXJzZShvcHRzKVxuXHRlbHNlXG5cdFx0b3B0cyA9IGV4dGVuZChvcHRzKVxuXG5cdC8vIE5vcm1hbGx5LCB0aGUgcGFnZSBpcyBsb2FkZWQgZnJvbSBodHRwIG9yIGh0dHBzLCBzbyBub3Qgc3BlY2lmeWluZyBhIHByb3RvY29sXG5cdC8vIHdpbGwgcmVzdWx0IGluIGEgKHZhbGlkKSBwcm90b2NvbC1yZWxhdGl2ZSB1cmwuIEhvd2V2ZXIsIHRoaXMgd29uJ3Qgd29yayBpZlxuXHQvLyB0aGUgcHJvdG9jb2wgaXMgc29tZXRoaW5nIGVsc2UsIGxpa2UgJ2ZpbGU6J1xuXHR2YXIgZGVmYXVsdFByb3RvY29sID0gZ2xvYmFsLmxvY2F0aW9uLnByb3RvY29sLnNlYXJjaCgvXmh0dHBzPzokLykgPT09IC0xID8gJ2h0dHA6JyA6ICcnXG5cblx0dmFyIHByb3RvY29sID0gb3B0cy5wcm90b2NvbCB8fCBkZWZhdWx0UHJvdG9jb2xcblx0dmFyIGhvc3QgPSBvcHRzLmhvc3RuYW1lIHx8IG9wdHMuaG9zdFxuXHR2YXIgcG9ydCA9IG9wdHMucG9ydFxuXHR2YXIgcGF0aCA9IG9wdHMucGF0aCB8fCAnLydcblxuXHQvLyBOZWNlc3NhcnkgZm9yIElQdjYgYWRkcmVzc2VzXG5cdGlmIChob3N0ICYmIGhvc3QuaW5kZXhPZignOicpICE9PSAtMSlcblx0XHRob3N0ID0gJ1snICsgaG9zdCArICddJ1xuXG5cdC8vIFRoaXMgbWF5IGJlIGEgcmVsYXRpdmUgdXJsLiBUaGUgYnJvd3NlciBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gaW50ZXJwcmV0IGl0IGNvcnJlY3RseS5cblx0b3B0cy51cmwgPSAoaG9zdCA/IChwcm90b2NvbCArICcvLycgKyBob3N0KSA6ICcnKSArIChwb3J0ID8gJzonICsgcG9ydCA6ICcnKSArIHBhdGhcblx0b3B0cy5tZXRob2QgPSAob3B0cy5tZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKClcblx0b3B0cy5oZWFkZXJzID0gb3B0cy5oZWFkZXJzIHx8IHt9XG5cblx0Ly8gQWxzbyB2YWxpZCBvcHRzLmF1dGgsIG9wdHMubW9kZVxuXG5cdHZhciByZXEgPSBuZXcgQ2xpZW50UmVxdWVzdChvcHRzKVxuXHRpZiAoY2IpXG5cdFx0cmVxLm9uKCdyZXNwb25zZScsIGNiKVxuXHRyZXR1cm4gcmVxXG59XG5cbmh0dHAuZ2V0ID0gZnVuY3Rpb24gZ2V0IChvcHRzLCBjYikge1xuXHR2YXIgcmVxID0gaHR0cC5yZXF1ZXN0KG9wdHMsIGNiKVxuXHRyZXEuZW5kKClcblx0cmV0dXJuIHJlcVxufVxuXG5odHRwLkFnZW50ID0gZnVuY3Rpb24gKCkge31cbmh0dHAuQWdlbnQuZGVmYXVsdE1heFNvY2tldHMgPSA0XG5cbmh0dHAuU1RBVFVTX0NPREVTID0gc3RhdHVzQ29kZXNcblxuaHR0cC5NRVRIT0RTID0gW1xuXHQnQ0hFQ0tPVVQnLFxuXHQnQ09OTkVDVCcsXG5cdCdDT1BZJyxcblx0J0RFTEVURScsXG5cdCdHRVQnLFxuXHQnSEVBRCcsXG5cdCdMT0NLJyxcblx0J00tU0VBUkNIJyxcblx0J01FUkdFJyxcblx0J01LQUNUSVZJVFknLFxuXHQnTUtDT0wnLFxuXHQnTU9WRScsXG5cdCdOT1RJRlknLFxuXHQnT1BUSU9OUycsXG5cdCdQQVRDSCcsXG5cdCdQT1NUJyxcblx0J1BST1BGSU5EJyxcblx0J1BST1BQQVRDSCcsXG5cdCdQVVJHRScsXG5cdCdQVVQnLFxuXHQnUkVQT1JUJyxcblx0J1NFQVJDSCcsXG5cdCdTVUJTQ1JJQkUnLFxuXHQnVFJBQ0UnLFxuXHQnVU5MT0NLJyxcblx0J1VOU1VCU0NSSUJFJ1xuXSIsImV4cG9ydHMuZmV0Y2ggPSBpc0Z1bmN0aW9uKGdsb2JhbC5mZXRjaCkgJiYgaXNGdW5jdGlvbihnbG9iYWwuUmVhZGFibGVTdHJlYW0pXG5cbmV4cG9ydHMuYmxvYkNvbnN0cnVjdG9yID0gZmFsc2VcbnRyeSB7XG5cdG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIoMSldKVxuXHRleHBvcnRzLmJsb2JDb25zdHJ1Y3RvciA9IHRydWVcbn0gY2F0Y2ggKGUpIHt9XG5cbi8vIFRoZSB4aHIgcmVxdWVzdCB0byBleGFtcGxlLmNvbSBtYXkgdmlvbGF0ZSBzb21lIHJlc3RyaWN0aXZlIENTUCBjb25maWd1cmF0aW9ucyxcbi8vIHNvIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgYGZldGNoYCwgYXZvaWQgY2FsbGluZyBnZXRYSFIoKVxuLy8gYW5kIGFzc3VtZSBzdXBwb3J0IGZvciBjZXJ0YWluIGZlYXR1cmVzIGJlbG93LlxudmFyIHhoclxuZnVuY3Rpb24gZ2V0WEhSICgpIHtcblx0Ly8gQ2FjaGUgdGhlIHhociB2YWx1ZVxuXHRpZiAoeGhyICE9PSB1bmRlZmluZWQpIHJldHVybiB4aHJcblxuXHRpZiAoZ2xvYmFsLlhNTEh0dHBSZXF1ZXN0KSB7XG5cdFx0eGhyID0gbmV3IGdsb2JhbC5YTUxIdHRwUmVxdWVzdCgpXG5cdFx0Ly8gSWYgWERvbWFpblJlcXVlc3QgaXMgYXZhaWxhYmxlIChpZSBvbmx5LCB3aGVyZSB4aHIgbWlnaHQgbm90IHdvcmtcblx0XHQvLyBjcm9zcyBkb21haW4pLCB1c2UgdGhlIHBhZ2UgbG9jYXRpb24uIE90aGVyd2lzZSB1c2UgZXhhbXBsZS5jb21cblx0XHQvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgbWFrZSBhbiBodHRwIHJlcXVlc3QuXG5cdFx0dHJ5IHtcblx0XHRcdHhoci5vcGVuKCdHRVQnLCBnbG9iYWwuWERvbWFpblJlcXVlc3QgPyAnLycgOiAnaHR0cHM6Ly9leGFtcGxlLmNvbScpXG5cdFx0fSBjYXRjaChlKSB7XG5cdFx0XHR4aHIgPSBudWxsXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIFNlcnZpY2Ugd29ya2VycyBkb24ndCBoYXZlIFhIUlxuXHRcdHhociA9IG51bGxcblx0fVxuXHRyZXR1cm4geGhyXG59XG5cbmZ1bmN0aW9uIGNoZWNrVHlwZVN1cHBvcnQgKHR5cGUpIHtcblx0dmFyIHhociA9IGdldFhIUigpXG5cdGlmICgheGhyKSByZXR1cm4gZmFsc2Vcblx0dHJ5IHtcblx0XHR4aHIucmVzcG9uc2VUeXBlID0gdHlwZVxuXHRcdHJldHVybiB4aHIucmVzcG9uc2VUeXBlID09PSB0eXBlXG5cdH0gY2F0Y2ggKGUpIHt9XG5cdHJldHVybiBmYWxzZVxufVxuXG4vLyBGb3Igc29tZSBzdHJhbmdlIHJlYXNvbiwgU2FmYXJpIDcuMCByZXBvcnRzIHR5cGVvZiBnbG9iYWwuQXJyYXlCdWZmZXIgPT09ICdvYmplY3QnLlxuLy8gU2FmYXJpIDcuMSBhcHBlYXJzIHRvIGhhdmUgZml4ZWQgdGhpcyBidWcuXG52YXIgaGF2ZUFycmF5QnVmZmVyID0gdHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCdcbnZhciBoYXZlU2xpY2UgPSBoYXZlQXJyYXlCdWZmZXIgJiYgaXNGdW5jdGlvbihnbG9iYWwuQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKVxuXG4vLyBJZiBmZXRjaCBpcyBzdXBwb3J0ZWQsIHRoZW4gYXJyYXlidWZmZXIgd2lsbCBiZSBzdXBwb3J0ZWQgdG9vLiBTa2lwIGNhbGxpbmdcbi8vIGNoZWNrVHlwZVN1cHBvcnQoKSwgc2luY2UgdGhhdCBjYWxscyBnZXRYSFIoKS5cbmV4cG9ydHMuYXJyYXlidWZmZXIgPSBleHBvcnRzLmZldGNoIHx8IChoYXZlQXJyYXlCdWZmZXIgJiYgY2hlY2tUeXBlU3VwcG9ydCgnYXJyYXlidWZmZXInKSlcblxuLy8gVGhlc2UgbmV4dCB0d28gdGVzdHMgdW5hdm9pZGFibHkgc2hvdyB3YXJuaW5ncyBpbiBDaHJvbWUuIFNpbmNlIGZldGNoIHdpbGwgYWx3YXlzXG4vLyBiZSB1c2VkIGlmIGl0J3MgYXZhaWxhYmxlLCBqdXN0IHJldHVybiBmYWxzZSBmb3IgdGhlc2UgdG8gYXZvaWQgdGhlIHdhcm5pbmdzLlxuZXhwb3J0cy5tc3N0cmVhbSA9ICFleHBvcnRzLmZldGNoICYmIGhhdmVTbGljZSAmJiBjaGVja1R5cGVTdXBwb3J0KCdtcy1zdHJlYW0nKVxuZXhwb3J0cy5tb3pjaHVua2VkYXJyYXlidWZmZXIgPSAhZXhwb3J0cy5mZXRjaCAmJiBoYXZlQXJyYXlCdWZmZXIgJiZcblx0Y2hlY2tUeXBlU3VwcG9ydCgnbW96LWNodW5rZWQtYXJyYXlidWZmZXInKVxuXG4vLyBJZiBmZXRjaCBpcyBzdXBwb3J0ZWQsIHRoZW4gb3ZlcnJpZGVNaW1lVHlwZSB3aWxsIGJlIHN1cHBvcnRlZCB0b28uIFNraXAgY2FsbGluZ1xuLy8gZ2V0WEhSKCkuXG5leHBvcnRzLm92ZXJyaWRlTWltZVR5cGUgPSBleHBvcnRzLmZldGNoIHx8IChnZXRYSFIoKSA/IGlzRnVuY3Rpb24oZ2V0WEhSKCkub3ZlcnJpZGVNaW1lVHlwZSkgOiBmYWxzZSlcblxuZXhwb3J0cy52YkFycmF5ID0gaXNGdW5jdGlvbihnbG9iYWwuVkJBcnJheSlcblxuZnVuY3Rpb24gaXNGdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG54aHIgPSBudWxsIC8vIEhlbHAgZ2NcbiIsInZhciBjYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9jYXBhYmlsaXR5JylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciByZXNwb25zZSA9IHJlcXVpcmUoJy4vcmVzcG9uc2UnKVxudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpXG52YXIgdG9BcnJheUJ1ZmZlciA9IHJlcXVpcmUoJ3RvLWFycmF5YnVmZmVyJylcblxudmFyIEluY29taW5nTWVzc2FnZSA9IHJlc3BvbnNlLkluY29taW5nTWVzc2FnZVxudmFyIHJTdGF0ZXMgPSByZXNwb25zZS5yZWFkeVN0YXRlc1xuXG5mdW5jdGlvbiBkZWNpZGVNb2RlIChwcmVmZXJCaW5hcnksIHVzZUZldGNoKSB7XG5cdGlmIChjYXBhYmlsaXR5LmZldGNoICYmIHVzZUZldGNoKSB7XG5cdFx0cmV0dXJuICdmZXRjaCdcblx0fSBlbHNlIGlmIChjYXBhYmlsaXR5Lm1vemNodW5rZWRhcnJheWJ1ZmZlcikge1xuXHRcdHJldHVybiAnbW96LWNodW5rZWQtYXJyYXlidWZmZXInXG5cdH0gZWxzZSBpZiAoY2FwYWJpbGl0eS5tc3N0cmVhbSkge1xuXHRcdHJldHVybiAnbXMtc3RyZWFtJ1xuXHR9IGVsc2UgaWYgKGNhcGFiaWxpdHkuYXJyYXlidWZmZXIgJiYgcHJlZmVyQmluYXJ5KSB7XG5cdFx0cmV0dXJuICdhcnJheWJ1ZmZlcidcblx0fSBlbHNlIGlmIChjYXBhYmlsaXR5LnZiQXJyYXkgJiYgcHJlZmVyQmluYXJ5KSB7XG5cdFx0cmV0dXJuICd0ZXh0OnZiYXJyYXknXG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuICd0ZXh0J1xuXHR9XG59XG5cbnZhciBDbGllbnRSZXF1ZXN0ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0cykge1xuXHR2YXIgc2VsZiA9IHRoaXNcblx0c3RyZWFtLldyaXRhYmxlLmNhbGwoc2VsZilcblxuXHRzZWxmLl9vcHRzID0gb3B0c1xuXHRzZWxmLl9ib2R5ID0gW11cblx0c2VsZi5faGVhZGVycyA9IHt9XG5cdGlmIChvcHRzLmF1dGgpXG5cdFx0c2VsZi5zZXRIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArIG5ldyBCdWZmZXIob3B0cy5hdXRoKS50b1N0cmluZygnYmFzZTY0JykpXG5cdE9iamVjdC5rZXlzKG9wdHMuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuXHRcdHNlbGYuc2V0SGVhZGVyKG5hbWUsIG9wdHMuaGVhZGVyc1tuYW1lXSlcblx0fSlcblxuXHR2YXIgcHJlZmVyQmluYXJ5XG5cdHZhciB1c2VGZXRjaCA9IHRydWVcblx0aWYgKG9wdHMubW9kZSA9PT0gJ2Rpc2FibGUtZmV0Y2gnIHx8ICd0aW1lb3V0JyBpbiBvcHRzKSB7XG5cdFx0Ly8gSWYgdGhlIHVzZSBvZiBYSFIgc2hvdWxkIGJlIHByZWZlcnJlZCBhbmQgaW5jbHVkZXMgcHJlc2VydmluZyB0aGUgJ2NvbnRlbnQtdHlwZScgaGVhZGVyLlxuXHRcdC8vIEZvcmNlIFhIUiB0byBiZSB1c2VkIHNpbmNlIHRoZSBGZXRjaCBBUEkgZG9lcyBub3QgeWV0IHN1cHBvcnQgdGltZW91dHMuXG5cdFx0dXNlRmV0Y2ggPSBmYWxzZVxuXHRcdHByZWZlckJpbmFyeSA9IHRydWVcblx0fSBlbHNlIGlmIChvcHRzLm1vZGUgPT09ICdwcmVmZXItc3RyZWFtaW5nJykge1xuXHRcdC8vIElmIHN0cmVhbWluZyBpcyBhIGhpZ2ggcHJpb3JpdHkgYnV0IGJpbmFyeSBjb21wYXRpYmlsaXR5IGFuZFxuXHRcdC8vIHRoZSBhY2N1cmFjeSBvZiB0aGUgJ2NvbnRlbnQtdHlwZScgaGVhZGVyIGFyZW4ndFxuXHRcdHByZWZlckJpbmFyeSA9IGZhbHNlXG5cdH0gZWxzZSBpZiAob3B0cy5tb2RlID09PSAnYWxsb3ctd3JvbmctY29udGVudC10eXBlJykge1xuXHRcdC8vIElmIHN0cmVhbWluZyBpcyBtb3JlIGltcG9ydGFudCB0aGFuIHByZXNlcnZpbmcgdGhlICdjb250ZW50LXR5cGUnIGhlYWRlclxuXHRcdHByZWZlckJpbmFyeSA9ICFjYXBhYmlsaXR5Lm92ZXJyaWRlTWltZVR5cGVcblx0fSBlbHNlIGlmICghb3B0cy5tb2RlIHx8IG9wdHMubW9kZSA9PT0gJ2RlZmF1bHQnIHx8IG9wdHMubW9kZSA9PT0gJ3ByZWZlci1mYXN0Jykge1xuXHRcdC8vIFVzZSBiaW5hcnkgaWYgdGV4dCBzdHJlYW1pbmcgbWF5IGNvcnJ1cHQgZGF0YSBvciB0aGUgY29udGVudC10eXBlIGhlYWRlciwgb3IgZm9yIHNwZWVkXG5cdFx0cHJlZmVyQmluYXJ5ID0gdHJ1ZVxuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSBmb3Igb3B0cy5tb2RlJylcblx0fVxuXHRzZWxmLl9tb2RlID0gZGVjaWRlTW9kZShwcmVmZXJCaW5hcnksIHVzZUZldGNoKVxuXG5cdHNlbGYub24oJ2ZpbmlzaCcsIGZ1bmN0aW9uICgpIHtcblx0XHRzZWxmLl9vbkZpbmlzaCgpXG5cdH0pXG59XG5cbmluaGVyaXRzKENsaWVudFJlcXVlc3QsIHN0cmVhbS5Xcml0YWJsZSlcblxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuc2V0SGVhZGVyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG5cdHZhciBzZWxmID0gdGhpc1xuXHR2YXIgbG93ZXJOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cdC8vIFRoaXMgY2hlY2sgaXMgbm90IG5lY2Vzc2FyeSwgYnV0IGl0IHByZXZlbnRzIHdhcm5pbmdzIGZyb20gYnJvd3NlcnMgYWJvdXQgc2V0dGluZyB1bnNhZmVcblx0Ly8gaGVhZGVycy4gVG8gYmUgaG9uZXN0IEknbSBub3QgZW50aXJlbHkgc3VyZSBoaWRpbmcgdGhlc2Ugd2FybmluZ3MgaXMgYSBnb29kIHRoaW5nLCBidXRcblx0Ly8gaHR0cC1icm93c2VyaWZ5IGRpZCBpdCwgc28gSSB3aWxsIHRvby5cblx0aWYgKHVuc2FmZUhlYWRlcnMuaW5kZXhPZihsb3dlck5hbWUpICE9PSAtMSlcblx0XHRyZXR1cm5cblxuXHRzZWxmLl9oZWFkZXJzW2xvd2VyTmFtZV0gPSB7XG5cdFx0bmFtZTogbmFtZSxcblx0XHR2YWx1ZTogdmFsdWVcblx0fVxufVxuXG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5nZXRIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuXHR2YXIgaGVhZGVyID0gdGhpcy5faGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldXG5cdGlmIChoZWFkZXIpXG5cdFx0cmV0dXJuIGhlYWRlci52YWx1ZVxuXHRyZXR1cm4gbnVsbFxufVxuXG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5yZW1vdmVIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuXHR2YXIgc2VsZiA9IHRoaXNcblx0ZGVsZXRlIHNlbGYuX2hlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXVxufVxuXG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5fb25GaW5pc2ggPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBzZWxmID0gdGhpc1xuXG5cdGlmIChzZWxmLl9kZXN0cm95ZWQpXG5cdFx0cmV0dXJuXG5cdHZhciBvcHRzID0gc2VsZi5fb3B0c1xuXG5cdHZhciBoZWFkZXJzT2JqID0gc2VsZi5faGVhZGVyc1xuXHR2YXIgYm9keSA9IG51bGxcblx0aWYgKG9wdHMubWV0aG9kICE9PSAnR0VUJyAmJiBvcHRzLm1ldGhvZCAhPT0gJ0hFQUQnKSB7XG5cdFx0aWYgKGNhcGFiaWxpdHkuYmxvYkNvbnN0cnVjdG9yKSB7XG5cdFx0XHRib2R5ID0gbmV3IGdsb2JhbC5CbG9iKHNlbGYuX2JvZHkubWFwKGZ1bmN0aW9uIChidWZmZXIpIHtcblx0XHRcdFx0cmV0dXJuIHRvQXJyYXlCdWZmZXIoYnVmZmVyKVxuXHRcdFx0fSksIHtcblx0XHRcdFx0dHlwZTogKGhlYWRlcnNPYmpbJ2NvbnRlbnQtdHlwZSddIHx8IHt9KS52YWx1ZSB8fCAnJ1xuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZ2V0IHV0Zjggc3RyaW5nXG5cdFx0XHRib2R5ID0gQnVmZmVyLmNvbmNhdChzZWxmLl9ib2R5KS50b1N0cmluZygpXG5cdFx0fVxuXHR9XG5cblx0Ly8gY3JlYXRlIGZsYXR0ZW5lZCBsaXN0IG9mIGhlYWRlcnNcblx0dmFyIGhlYWRlcnNMaXN0ID0gW11cblx0T2JqZWN0LmtleXMoaGVhZGVyc09iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5TmFtZSkge1xuXHRcdHZhciBuYW1lID0gaGVhZGVyc09ialtrZXlOYW1lXS5uYW1lXG5cdFx0dmFyIHZhbHVlID0gaGVhZGVyc09ialtrZXlOYW1lXS52YWx1ZVxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodikge1xuXHRcdFx0XHRoZWFkZXJzTGlzdC5wdXNoKFtuYW1lLCB2XSlcblx0XHRcdH0pXG5cdFx0fSBlbHNlIHtcblx0XHRcdGhlYWRlcnNMaXN0LnB1c2goW25hbWUsIHZhbHVlXSlcblx0XHR9XG5cdH0pXG5cblx0aWYgKHNlbGYuX21vZGUgPT09ICdmZXRjaCcpIHtcblx0XHRnbG9iYWwuZmV0Y2goc2VsZi5fb3B0cy51cmwsIHtcblx0XHRcdG1ldGhvZDogc2VsZi5fb3B0cy5tZXRob2QsXG5cdFx0XHRoZWFkZXJzOiBoZWFkZXJzTGlzdCxcblx0XHRcdGJvZHk6IGJvZHkgfHwgdW5kZWZpbmVkLFxuXHRcdFx0bW9kZTogJ2NvcnMnLFxuXHRcdFx0Y3JlZGVudGlhbHM6IG9wdHMud2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ3NhbWUtb3JpZ2luJ1xuXHRcdH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cdFx0XHRzZWxmLl9mZXRjaFJlc3BvbnNlID0gcmVzcG9uc2Vcblx0XHRcdHNlbGYuX2Nvbm5lY3QoKVxuXHRcdH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcblx0XHRcdHNlbGYuZW1pdCgnZXJyb3InLCByZWFzb24pXG5cdFx0fSlcblx0fSBlbHNlIHtcblx0XHR2YXIgeGhyID0gc2VsZi5feGhyID0gbmV3IGdsb2JhbC5YTUxIdHRwUmVxdWVzdCgpXG5cdFx0dHJ5IHtcblx0XHRcdHhoci5vcGVuKHNlbGYuX29wdHMubWV0aG9kLCBzZWxmLl9vcHRzLnVybCwgdHJ1ZSlcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKVxuXHRcdFx0fSlcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdC8vIENhbid0IHNldCByZXNwb25zZVR5cGUgb24gcmVhbGx5IG9sZCBicm93c2Vyc1xuXHRcdGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpXG5cdFx0XHR4aHIucmVzcG9uc2VUeXBlID0gc2VsZi5fbW9kZS5zcGxpdCgnOicpWzBdXG5cblx0XHRpZiAoJ3dpdGhDcmVkZW50aWFscycgaW4geGhyKVxuXHRcdFx0eGhyLndpdGhDcmVkZW50aWFscyA9ICEhb3B0cy53aXRoQ3JlZGVudGlhbHNcblxuXHRcdGlmIChzZWxmLl9tb2RlID09PSAndGV4dCcgJiYgJ292ZXJyaWRlTWltZVR5cGUnIGluIHhocilcblx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCd0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkJylcblxuXHRcdGlmICgndGltZW91dCcgaW4gb3B0cykge1xuXHRcdFx0eGhyLnRpbWVvdXQgPSBvcHRzLnRpbWVvdXRcblx0XHRcdHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGYuZW1pdCgndGltZW91dCcpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGVhZGVyc0xpc3QuZm9yRWFjaChmdW5jdGlvbiAoaGVhZGVyKSB7XG5cdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXJbMF0sIGhlYWRlclsxXSlcblx0XHR9KVxuXG5cdFx0c2VsZi5fcmVzcG9uc2UgPSBudWxsXG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHN3aXRjaCAoeGhyLnJlYWR5U3RhdGUpIHtcblx0XHRcdFx0Y2FzZSByU3RhdGVzLkxPQURJTkc6XG5cdFx0XHRcdGNhc2UgclN0YXRlcy5ET05FOlxuXHRcdFx0XHRcdHNlbGYuX29uWEhSUHJvZ3Jlc3MoKVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIE5lY2Vzc2FyeSBmb3Igc3RyZWFtaW5nIGluIEZpcmVmb3gsIHNpbmNlIHhoci5yZXNwb25zZSBpcyBPTkxZIGRlZmluZWRcblx0XHQvLyBpbiBvbnByb2dyZXNzLCBub3QgaW4gb25yZWFkeXN0YXRlY2hhbmdlIHdpdGggeGhyLnJlYWR5U3RhdGUgPSAzXG5cdFx0aWYgKHNlbGYuX21vZGUgPT09ICdtb3otY2h1bmtlZC1hcnJheWJ1ZmZlcicpIHtcblx0XHRcdHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRzZWxmLl9vblhIUlByb2dyZXNzKClcblx0XHRcdH1cblx0XHR9XG5cblx0XHR4aHIub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChzZWxmLl9kZXN0cm95ZWQpXG5cdFx0XHRcdHJldHVyblxuXHRcdFx0c2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignWEhSIGVycm9yJykpXG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHhoci5zZW5kKGJvZHkpXG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2VsZi5lbWl0KCdlcnJvcicsIGVycilcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgeGhyLnN0YXR1cyBpcyByZWFkYWJsZSBhbmQgbm9uLXplcm8sIGluZGljYXRpbmcgbm8gZXJyb3IuXG4gKiBFdmVuIHRob3VnaCB0aGUgc3BlYyBzYXlzIGl0IHNob3VsZCBiZSBhdmFpbGFibGUgaW4gcmVhZHlTdGF0ZSAzLFxuICogYWNjZXNzaW5nIGl0IHRocm93cyBhbiBleGNlcHRpb24gaW4gSUU4XG4gKi9cbmZ1bmN0aW9uIHN0YXR1c1ZhbGlkICh4aHIpIHtcblx0dHJ5IHtcblx0XHR2YXIgc3RhdHVzID0geGhyLnN0YXR1c1xuXHRcdHJldHVybiAoc3RhdHVzICE9PSBudWxsICYmIHN0YXR1cyAhPT0gMClcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG59XG5cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLl9vblhIUlByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgc2VsZiA9IHRoaXNcblxuXHRpZiAoIXN0YXR1c1ZhbGlkKHNlbGYuX3hocikgfHwgc2VsZi5fZGVzdHJveWVkKVxuXHRcdHJldHVyblxuXG5cdGlmICghc2VsZi5fcmVzcG9uc2UpXG5cdFx0c2VsZi5fY29ubmVjdCgpXG5cblx0c2VsZi5fcmVzcG9uc2UuX29uWEhSUHJvZ3Jlc3MoKVxufVxuXG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5fY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHNlbGYgPSB0aGlzXG5cblx0aWYgKHNlbGYuX2Rlc3Ryb3llZClcblx0XHRyZXR1cm5cblxuXHRzZWxmLl9yZXNwb25zZSA9IG5ldyBJbmNvbWluZ01lc3NhZ2Uoc2VsZi5feGhyLCBzZWxmLl9mZXRjaFJlc3BvbnNlLCBzZWxmLl9tb2RlKVxuXHRzZWxmLl9yZXNwb25zZS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcblx0XHRzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKVxuXHR9KVxuXG5cdHNlbGYuZW1pdCgncmVzcG9uc2UnLCBzZWxmLl9yZXNwb25zZSlcbn1cblxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcblx0dmFyIHNlbGYgPSB0aGlzXG5cblx0c2VsZi5fYm9keS5wdXNoKGNodW5rKVxuXHRjYigpXG59XG5cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLmFib3J0ID0gQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHNlbGYgPSB0aGlzXG5cdHNlbGYuX2Rlc3Ryb3llZCA9IHRydWVcblx0aWYgKHNlbGYuX3Jlc3BvbnNlKVxuXHRcdHNlbGYuX3Jlc3BvbnNlLl9kZXN0cm95ZWQgPSB0cnVlXG5cdGlmIChzZWxmLl94aHIpXG5cdFx0c2VsZi5feGhyLmFib3J0KClcblx0Ly8gQ3VycmVudGx5LCB0aGVyZSBpc24ndCBhIHdheSB0byB0cnVseSBhYm9ydCBhIGZldGNoLlxuXHQvLyBJZiB5b3UgbGlrZSBiaWtlc2hlZGRpbmcsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2ZldGNoL2lzc3Vlcy8yN1xufVxuXG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG5cdHZhciBzZWxmID0gdGhpc1xuXHRpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcblx0XHRjYiA9IGRhdGFcblx0XHRkYXRhID0gdW5kZWZpbmVkXG5cdH1cblxuXHRzdHJlYW0uV3JpdGFibGUucHJvdG90eXBlLmVuZC5jYWxsKHNlbGYsIGRhdGEsIGVuY29kaW5nLCBjYilcbn1cblxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuZmx1c2hIZWFkZXJzID0gZnVuY3Rpb24gKCkge31cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7fVxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuc2V0Tm9EZWxheSA9IGZ1bmN0aW9uICgpIHt9XG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5zZXRTb2NrZXRLZWVwQWxpdmUgPSBmdW5jdGlvbiAoKSB7fVxuXG4vLyBUYWtlbiBmcm9tIGh0dHA6Ly93d3cudzMub3JnL1RSL1hNTEh0dHBSZXF1ZXN0LyN0aGUtc2V0cmVxdWVzdGhlYWRlciUyOCUyOS1tZXRob2RcbnZhciB1bnNhZmVIZWFkZXJzID0gW1xuXHQnYWNjZXB0LWNoYXJzZXQnLFxuXHQnYWNjZXB0LWVuY29kaW5nJyxcblx0J2FjY2Vzcy1jb250cm9sLXJlcXVlc3QtaGVhZGVycycsXG5cdCdhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZCcsXG5cdCdjb25uZWN0aW9uJyxcblx0J2NvbnRlbnQtbGVuZ3RoJyxcblx0J2Nvb2tpZScsXG5cdCdjb29raWUyJyxcblx0J2RhdGUnLFxuXHQnZG50Jyxcblx0J2V4cGVjdCcsXG5cdCdob3N0Jyxcblx0J2tlZXAtYWxpdmUnLFxuXHQnb3JpZ2luJyxcblx0J3JlZmVyZXInLFxuXHQndGUnLFxuXHQndHJhaWxlcicsXG5cdCd0cmFuc2Zlci1lbmNvZGluZycsXG5cdCd1cGdyYWRlJyxcblx0J3VzZXItYWdlbnQnLFxuXHQndmlhJ1xuXVxuIiwidmFyIGNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL2NhcGFiaWxpdHknKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpXG5cbnZhciByU3RhdGVzID0gZXhwb3J0cy5yZWFkeVN0YXRlcyA9IHtcblx0VU5TRU5UOiAwLFxuXHRPUEVORUQ6IDEsXG5cdEhFQURFUlNfUkVDRUlWRUQ6IDIsXG5cdExPQURJTkc6IDMsXG5cdERPTkU6IDRcbn1cblxudmFyIEluY29taW5nTWVzc2FnZSA9IGV4cG9ydHMuSW5jb21pbmdNZXNzYWdlID0gZnVuY3Rpb24gKHhociwgcmVzcG9uc2UsIG1vZGUpIHtcblx0dmFyIHNlbGYgPSB0aGlzXG5cdHN0cmVhbS5SZWFkYWJsZS5jYWxsKHNlbGYpXG5cblx0c2VsZi5fbW9kZSA9IG1vZGVcblx0c2VsZi5oZWFkZXJzID0ge31cblx0c2VsZi5yYXdIZWFkZXJzID0gW11cblx0c2VsZi50cmFpbGVycyA9IHt9XG5cdHNlbGYucmF3VHJhaWxlcnMgPSBbXVxuXG5cdC8vIEZha2UgdGhlICdjbG9zZScgZXZlbnQsIGJ1dCBvbmx5IG9uY2UgJ2VuZCcgZmlyZXNcblx0c2VsZi5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuXHRcdC8vIFRoZSBuZXh0VGljayBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCB0aGUgJ3JlcXVlc3QnIG1vZHVsZSBmcm9tIGNhdXNpbmcgYW4gaW5maW5pdGUgbG9vcFxuXHRcdHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHRcdFx0c2VsZi5lbWl0KCdjbG9zZScpXG5cdFx0fSlcblx0fSlcblxuXHRpZiAobW9kZSA9PT0gJ2ZldGNoJykge1xuXHRcdHNlbGYuX2ZldGNoUmVzcG9uc2UgPSByZXNwb25zZVxuXG5cdFx0c2VsZi51cmwgPSByZXNwb25zZS51cmxcblx0XHRzZWxmLnN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXNcblx0XHRzZWxmLnN0YXR1c01lc3NhZ2UgPSByZXNwb25zZS5zdGF0dXNUZXh0XG5cdFx0XG5cdFx0cmVzcG9uc2UuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlciwga2V5KXtcblx0XHRcdHNlbGYuaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSBoZWFkZXJcblx0XHRcdHNlbGYucmF3SGVhZGVycy5wdXNoKGtleSwgaGVhZGVyKVxuXHRcdH0pXG5cblxuXHRcdC8vIFRPRE86IHRoaXMgZG9lc24ndCByZXNwZWN0IGJhY2twcmVzc3VyZS4gT25jZSBXcml0YWJsZVN0cmVhbSBpcyBhdmFpbGFibGUsIHRoaXMgY2FuIGJlIGZpeGVkXG5cdFx0dmFyIHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKClcblx0XHRmdW5jdGlvbiByZWFkICgpIHtcblx0XHRcdHJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG5cdFx0XHRcdGlmIChzZWxmLl9kZXN0cm95ZWQpXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGlmIChyZXN1bHQuZG9uZSkge1xuXHRcdFx0XHRcdHNlbGYucHVzaChudWxsKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR9XG5cdFx0XHRcdHNlbGYucHVzaChuZXcgQnVmZmVyKHJlc3VsdC52YWx1ZSkpXG5cdFx0XHRcdHJlYWQoKVxuXHRcdFx0fSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG5cdFx0XHRcdHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpXG5cdFx0XHR9KVxuXHRcdH1cblx0XHRyZWFkKClcblxuXHR9IGVsc2Uge1xuXHRcdHNlbGYuX3hociA9IHhoclxuXHRcdHNlbGYuX3BvcyA9IDBcblxuXHRcdHNlbGYudXJsID0geGhyLnJlc3BvbnNlVVJMXG5cdFx0c2VsZi5zdGF0dXNDb2RlID0geGhyLnN0YXR1c1xuXHRcdHNlbGYuc3RhdHVzTWVzc2FnZSA9IHhoci5zdGF0dXNUZXh0XG5cdFx0dmFyIGhlYWRlcnMgPSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkuc3BsaXQoL1xccj9cXG4vKVxuXHRcdGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAoaGVhZGVyKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyA9IGhlYWRlci5tYXRjaCgvXihbXjpdKyk6XFxzKiguKikvKVxuXHRcdFx0aWYgKG1hdGNoZXMpIHtcblx0XHRcdFx0dmFyIGtleSA9IG1hdGNoZXNbMV0udG9Mb3dlckNhc2UoKVxuXHRcdFx0XHRpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcblx0XHRcdFx0XHRpZiAoc2VsZi5oZWFkZXJzW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0c2VsZi5oZWFkZXJzW2tleV0gPSBbXVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzZWxmLmhlYWRlcnNba2V5XS5wdXNoKG1hdGNoZXNbMl0pXG5cdFx0XHRcdH0gZWxzZSBpZiAoc2VsZi5oZWFkZXJzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHNlbGYuaGVhZGVyc1trZXldICs9ICcsICcgKyBtYXRjaGVzWzJdXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2VsZi5oZWFkZXJzW2tleV0gPSBtYXRjaGVzWzJdXG5cdFx0XHRcdH1cblx0XHRcdFx0c2VsZi5yYXdIZWFkZXJzLnB1c2gobWF0Y2hlc1sxXSwgbWF0Y2hlc1syXSlcblx0XHRcdH1cblx0XHR9KVxuXG5cdFx0c2VsZi5fY2hhcnNldCA9ICd4LXVzZXItZGVmaW5lZCdcblx0XHRpZiAoIWNhcGFiaWxpdHkub3ZlcnJpZGVNaW1lVHlwZSkge1xuXHRcdFx0dmFyIG1pbWVUeXBlID0gc2VsZi5yYXdIZWFkZXJzWydtaW1lLXR5cGUnXVxuXHRcdFx0aWYgKG1pbWVUeXBlKSB7XG5cdFx0XHRcdHZhciBjaGFyc2V0TWF0Y2ggPSBtaW1lVHlwZS5tYXRjaCgvO1xccypjaGFyc2V0PShbXjtdKSg7fCQpLylcblx0XHRcdFx0aWYgKGNoYXJzZXRNYXRjaCkge1xuXHRcdFx0XHRcdHNlbGYuX2NoYXJzZXQgPSBjaGFyc2V0TWF0Y2hbMV0udG9Mb3dlckNhc2UoKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXNlbGYuX2NoYXJzZXQpXG5cdFx0XHRcdHNlbGYuX2NoYXJzZXQgPSAndXRmLTgnIC8vIGJlc3QgZ3Vlc3Ncblx0XHR9XG5cdH1cbn1cblxuaW5oZXJpdHMoSW5jb21pbmdNZXNzYWdlLCBzdHJlYW0uUmVhZGFibGUpXG5cbkluY29taW5nTWVzc2FnZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAoKSB7fVxuXG5JbmNvbWluZ01lc3NhZ2UucHJvdG90eXBlLl9vblhIUlByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgc2VsZiA9IHRoaXNcblxuXHR2YXIgeGhyID0gc2VsZi5feGhyXG5cblx0dmFyIHJlc3BvbnNlID0gbnVsbFxuXHRzd2l0Y2ggKHNlbGYuX21vZGUpIHtcblx0XHRjYXNlICd0ZXh0OnZiYXJyYXknOiAvLyBGb3IgSUU5XG5cdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT09IHJTdGF0ZXMuRE9ORSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIFRoaXMgZmFpbHMgaW4gSUU4XG5cdFx0XHRcdHJlc3BvbnNlID0gbmV3IGdsb2JhbC5WQkFycmF5KHhoci5yZXNwb25zZUJvZHkpLnRvQXJyYXkoKVxuXHRcdFx0fSBjYXRjaCAoZSkge31cblx0XHRcdGlmIChyZXNwb25zZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRzZWxmLnB1c2gobmV3IEJ1ZmZlcihyZXNwb25zZSkpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0XHQvLyBGYWxscyB0aHJvdWdoIGluIElFOFx0XG5cdFx0Y2FzZSAndGV4dCc6XG5cdFx0XHR0cnkgeyAvLyBUaGlzIHdpbGwgZmFpbCB3aGVuIHJlYWR5U3RhdGUgPSAzIGluIElFOS4gU3dpdGNoIG1vZGUgYW5kIHdhaXQgZm9yIHJlYWR5U3RhdGUgPSA0XG5cdFx0XHRcdHJlc3BvbnNlID0geGhyLnJlc3BvbnNlVGV4dFxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzZWxmLl9tb2RlID0gJ3RleHQ6dmJhcnJheSdcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHRcdGlmIChyZXNwb25zZS5sZW5ndGggPiBzZWxmLl9wb3MpIHtcblx0XHRcdFx0dmFyIG5ld0RhdGEgPSByZXNwb25zZS5zdWJzdHIoc2VsZi5fcG9zKVxuXHRcdFx0XHRpZiAoc2VsZi5fY2hhcnNldCA9PT0gJ3gtdXNlci1kZWZpbmVkJykge1xuXHRcdFx0XHRcdHZhciBidWZmZXIgPSBuZXcgQnVmZmVyKG5ld0RhdGEubGVuZ3RoKVxuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbmV3RGF0YS5sZW5ndGg7IGkrKylcblx0XHRcdFx0XHRcdGJ1ZmZlcltpXSA9IG5ld0RhdGEuY2hhckNvZGVBdChpKSAmIDB4ZmZcblxuXHRcdFx0XHRcdHNlbGYucHVzaChidWZmZXIpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2VsZi5wdXNoKG5ld0RhdGEsIHNlbGYuX2NoYXJzZXQpXG5cdFx0XHRcdH1cblx0XHRcdFx0c2VsZi5fcG9zID0gcmVzcG9uc2UubGVuZ3RoXG5cdFx0XHR9XG5cdFx0XHRicmVha1xuXHRcdGNhc2UgJ2FycmF5YnVmZmVyJzpcblx0XHRcdGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gclN0YXRlcy5ET05FIHx8ICF4aHIucmVzcG9uc2UpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRyZXNwb25zZSA9IHhoci5yZXNwb25zZVxuXHRcdFx0c2VsZi5wdXNoKG5ldyBCdWZmZXIobmV3IFVpbnQ4QXJyYXkocmVzcG9uc2UpKSlcblx0XHRcdGJyZWFrXG5cdFx0Y2FzZSAnbW96LWNodW5rZWQtYXJyYXlidWZmZXInOiAvLyB0YWtlIHdob2xlXG5cdFx0XHRyZXNwb25zZSA9IHhoci5yZXNwb25zZVxuXHRcdFx0aWYgKHhoci5yZWFkeVN0YXRlICE9PSByU3RhdGVzLkxPQURJTkcgfHwgIXJlc3BvbnNlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0c2VsZi5wdXNoKG5ldyBCdWZmZXIobmV3IFVpbnQ4QXJyYXkocmVzcG9uc2UpKSlcblx0XHRcdGJyZWFrXG5cdFx0Y2FzZSAnbXMtc3RyZWFtJzpcblx0XHRcdHJlc3BvbnNlID0geGhyLnJlc3BvbnNlXG5cdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT09IHJTdGF0ZXMuTE9BRElORylcblx0XHRcdFx0YnJlYWtcblx0XHRcdHZhciByZWFkZXIgPSBuZXcgZ2xvYmFsLk1TU3RyZWFtUmVhZGVyKClcblx0XHRcdHJlYWRlci5vbnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAocmVhZGVyLnJlc3VsdC5ieXRlTGVuZ3RoID4gc2VsZi5fcG9zKSB7XG5cdFx0XHRcdFx0c2VsZi5wdXNoKG5ldyBCdWZmZXIobmV3IFVpbnQ4QXJyYXkocmVhZGVyLnJlc3VsdC5zbGljZShzZWxmLl9wb3MpKSkpXG5cdFx0XHRcdFx0c2VsZi5fcG9zID0gcmVhZGVyLnJlc3VsdC5ieXRlTGVuZ3RoXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGYucHVzaChudWxsKVxuXHRcdFx0fVxuXHRcdFx0Ly8gcmVhZGVyLm9uZXJyb3IgPSA/Pz8gLy8gVE9ETzogdGhpc1xuXHRcdFx0cmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKHJlc3BvbnNlKVxuXHRcdFx0YnJlYWtcblx0fVxuXG5cdC8vIFRoZSBtcy1zdHJlYW0gY2FzZSBoYW5kbGVzIGVuZCBzZXBhcmF0ZWx5IGluIHJlYWRlci5vbmxvYWQoKVxuXHRpZiAoc2VsZi5feGhyLnJlYWR5U3RhdGUgPT09IHJTdGF0ZXMuRE9ORSAmJiBzZWxmLl9tb2RlICE9PSAnbXMtc3RyZWFtJykge1xuXHRcdHNlbGYucHVzaChudWxsKVxuXHR9XG59XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxudmFyIGlzQnVmZmVyRW5jb2RpbmcgPSBCdWZmZXIuaXNFbmNvZGluZ1xuICB8fCBmdW5jdGlvbihlbmNvZGluZykge1xuICAgICAgIHN3aXRjaCAoZW5jb2RpbmcgJiYgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgY2FzZSAnaGV4JzogY2FzZSAndXRmOCc6IGNhc2UgJ3V0Zi04JzogY2FzZSAnYXNjaWknOiBjYXNlICdiaW5hcnknOiBjYXNlICdiYXNlNjQnOiBjYXNlICd1Y3MyJzogY2FzZSAndWNzLTInOiBjYXNlICd1dGYxNmxlJzogY2FzZSAndXRmLTE2bGUnOiBjYXNlICdyYXcnOiByZXR1cm4gdHJ1ZTtcbiAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcbiAgICAgICB9XG4gICAgIH1cblxuXG5mdW5jdGlvbiBhc3NlcnRFbmNvZGluZyhlbmNvZGluZykge1xuICBpZiAoZW5jb2RpbmcgJiYgIWlzQnVmZmVyRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICB9XG59XG5cbi8vIFN0cmluZ0RlY29kZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBlZmZpY2llbnRseSBzcGxpdHRpbmcgYSBzZXJpZXMgb2Zcbi8vIGJ1ZmZlcnMgaW50byBhIHNlcmllcyBvZiBKUyBzdHJpbmdzIHdpdGhvdXQgYnJlYWtpbmcgYXBhcnQgbXVsdGktYnl0ZVxuLy8gY2hhcmFjdGVycy4gQ0VTVS04IGlzIGhhbmRsZWQgYXMgcGFydCBvZiB0aGUgVVRGLTggZW5jb2RpbmcuXG4vL1xuLy8gQFRPRE8gSGFuZGxpbmcgYWxsIGVuY29kaW5ncyBpbnNpZGUgYSBzaW5nbGUgb2JqZWN0IG1ha2VzIGl0IHZlcnkgZGlmZmljdWx0XG4vLyB0byByZWFzb24gYWJvdXQgdGhpcyBjb2RlLCBzbyBpdCBzaG91bGQgYmUgc3BsaXQgdXAgaW4gdGhlIGZ1dHVyZS5cbi8vIEBUT0RPIFRoZXJlIHNob3VsZCBiZSBhIHV0Zjgtc3RyaWN0IGVuY29kaW5nIHRoYXQgcmVqZWN0cyBpbnZhbGlkIFVURi04IGNvZGVcbi8vIHBvaW50cyBhcyB1c2VkIGJ5IENFU1UtOC5cbnZhciBTdHJpbmdEZWNvZGVyID0gZXhwb3J0cy5TdHJpbmdEZWNvZGVyID0gZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgdGhpcy5lbmNvZGluZyA9IChlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXS8sICcnKTtcbiAgYXNzZXJ0RW5jb2RpbmcoZW5jb2RpbmcpO1xuICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGY4JzpcbiAgICAgIC8vIENFU1UtOCByZXByZXNlbnRzIGVhY2ggb2YgU3Vycm9nYXRlIFBhaXIgYnkgMy1ieXRlc1xuICAgICAgdGhpcy5zdXJyb2dhdGVTaXplID0gMztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgLy8gVVRGLTE2IHJlcHJlc2VudHMgZWFjaCBvZiBTdXJyb2dhdGUgUGFpciBieSAyLWJ5dGVzXG4gICAgICB0aGlzLnN1cnJvZ2F0ZVNpemUgPSAyO1xuICAgICAgdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhciA9IHV0ZjE2RGV0ZWN0SW5jb21wbGV0ZUNoYXI7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgLy8gQmFzZS02NCBzdG9yZXMgMyBieXRlcyBpbiA0IGNoYXJzLCBhbmQgcGFkcyB0aGUgcmVtYWluZGVyLlxuICAgICAgdGhpcy5zdXJyb2dhdGVTaXplID0gMztcbiAgICAgIHRoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXIgPSBiYXNlNjREZXRlY3RJbmNvbXBsZXRlQ2hhcjtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLndyaXRlID0gcGFzc1Rocm91Z2hXcml0ZTtcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEVub3VnaCBzcGFjZSB0byBzdG9yZSBhbGwgYnl0ZXMgb2YgYSBzaW5nbGUgY2hhcmFjdGVyLiBVVEYtOCBuZWVkcyA0XG4gIC8vIGJ5dGVzLCBidXQgQ0VTVS04IG1heSByZXF1aXJlIHVwIHRvIDYgKDMgYnl0ZXMgcGVyIHN1cnJvZ2F0ZSkuXG4gIHRoaXMuY2hhckJ1ZmZlciA9IG5ldyBCdWZmZXIoNik7XG4gIC8vIE51bWJlciBvZiBieXRlcyByZWNlaXZlZCBmb3IgdGhlIGN1cnJlbnQgaW5jb21wbGV0ZSBtdWx0aS1ieXRlIGNoYXJhY3Rlci5cbiAgdGhpcy5jaGFyUmVjZWl2ZWQgPSAwO1xuICAvLyBOdW1iZXIgb2YgYnl0ZXMgZXhwZWN0ZWQgZm9yIHRoZSBjdXJyZW50IGluY29tcGxldGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuXG4gIHRoaXMuY2hhckxlbmd0aCA9IDA7XG59O1xuXG5cbi8vIHdyaXRlIGRlY29kZXMgdGhlIGdpdmVuIGJ1ZmZlciBhbmQgcmV0dXJucyBpdCBhcyBKUyBzdHJpbmcgdGhhdCBpc1xuLy8gZ3VhcmFudGVlZCB0byBub3QgY29udGFpbiBhbnkgcGFydGlhbCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMuIEFueSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIgZm91bmQgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGlzIGJ1ZmZlcmVkIHVwLCBhbmQgd2lsbCBiZVxuLy8gcmV0dXJuZWQgd2hlbiBjYWxsaW5nIHdyaXRlIGFnYWluIHdpdGggdGhlIHJlbWFpbmluZyBieXRlcy5cbi8vXG4vLyBOb3RlOiBDb252ZXJ0aW5nIGEgQnVmZmVyIGNvbnRhaW5pbmcgYW4gb3JwaGFuIHN1cnJvZ2F0ZSB0byBhIFN0cmluZ1xuLy8gY3VycmVudGx5IHdvcmtzLCBidXQgY29udmVydGluZyBhIFN0cmluZyB0byBhIEJ1ZmZlciAodmlhIGBuZXcgQnVmZmVyYCwgb3Jcbi8vIEJ1ZmZlciN3cml0ZSkgd2lsbCByZXBsYWNlIGluY29tcGxldGUgc3Vycm9nYXRlcyB3aXRoIHRoZSB1bmljb2RlXG4vLyByZXBsYWNlbWVudCBjaGFyYWN0ZXIuIFNlZSBodHRwczovL2NvZGVyZXZpZXcuY2hyb21pdW0ub3JnLzEyMTE3MzAwOS8gLlxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWZmZXIpIHtcbiAgdmFyIGNoYXJTdHIgPSAnJztcbiAgLy8gaWYgb3VyIGxhc3Qgd3JpdGUgZW5kZWQgd2l0aCBhbiBpbmNvbXBsZXRlIG11bHRpYnl0ZSBjaGFyYWN0ZXJcbiAgd2hpbGUgKHRoaXMuY2hhckxlbmd0aCkge1xuICAgIC8vIGRldGVybWluZSBob3cgbWFueSByZW1haW5pbmcgYnl0ZXMgdGhpcyBidWZmZXIgaGFzIHRvIG9mZmVyIGZvciB0aGlzIGNoYXJcbiAgICB2YXIgYXZhaWxhYmxlID0gKGJ1ZmZlci5sZW5ndGggPj0gdGhpcy5jaGFyTGVuZ3RoIC0gdGhpcy5jaGFyUmVjZWl2ZWQpID9cbiAgICAgICAgdGhpcy5jaGFyTGVuZ3RoIC0gdGhpcy5jaGFyUmVjZWl2ZWQgOlxuICAgICAgICBidWZmZXIubGVuZ3RoO1xuXG4gICAgLy8gYWRkIHRoZSBuZXcgYnl0ZXMgdG8gdGhlIGNoYXIgYnVmZmVyXG4gICAgYnVmZmVyLmNvcHkodGhpcy5jaGFyQnVmZmVyLCB0aGlzLmNoYXJSZWNlaXZlZCwgMCwgYXZhaWxhYmxlKTtcbiAgICB0aGlzLmNoYXJSZWNlaXZlZCArPSBhdmFpbGFibGU7XG5cbiAgICBpZiAodGhpcy5jaGFyUmVjZWl2ZWQgPCB0aGlzLmNoYXJMZW5ndGgpIHtcbiAgICAgIC8vIHN0aWxsIG5vdCBlbm91Z2ggY2hhcnMgaW4gdGhpcyBidWZmZXI/IHdhaXQgZm9yIG1vcmUgLi4uXG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGJ5dGVzIGJlbG9uZ2luZyB0byB0aGUgY3VycmVudCBjaGFyYWN0ZXIgZnJvbSB0aGUgYnVmZmVyXG4gICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKGF2YWlsYWJsZSwgYnVmZmVyLmxlbmd0aCk7XG5cbiAgICAvLyBnZXQgdGhlIGNoYXJhY3RlciB0aGF0IHdhcyBzcGxpdFxuICAgIGNoYXJTdHIgPSB0aGlzLmNoYXJCdWZmZXIuc2xpY2UoMCwgdGhpcy5jaGFyTGVuZ3RoKS50b1N0cmluZyh0aGlzLmVuY29kaW5nKTtcblxuICAgIC8vIENFU1UtODogbGVhZCBzdXJyb2dhdGUgKEQ4MDAtREJGRikgaXMgYWxzbyB0aGUgaW5jb21wbGV0ZSBjaGFyYWN0ZXJcbiAgICB2YXIgY2hhckNvZGUgPSBjaGFyU3RyLmNoYXJDb2RlQXQoY2hhclN0ci5sZW5ndGggLSAxKTtcbiAgICBpZiAoY2hhckNvZGUgPj0gMHhEODAwICYmIGNoYXJDb2RlIDw9IDB4REJGRikge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoICs9IHRoaXMuc3Vycm9nYXRlU2l6ZTtcbiAgICAgIGNoYXJTdHIgPSAnJztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0aGlzLmNoYXJSZWNlaXZlZCA9IHRoaXMuY2hhckxlbmd0aCA9IDA7XG5cbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gbW9yZSBieXRlcyBpbiB0aGlzIGJ1ZmZlciwganVzdCBlbWl0IG91ciBjaGFyXG4gICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBjaGFyU3RyO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuXG4gIC8vIGRldGVybWluZSBhbmQgc2V0IGNoYXJMZW5ndGggLyBjaGFyUmVjZWl2ZWRcbiAgdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhcihidWZmZXIpO1xuXG4gIHZhciBlbmQgPSBidWZmZXIubGVuZ3RoO1xuICBpZiAodGhpcy5jaGFyTGVuZ3RoKSB7XG4gICAgLy8gYnVmZmVyIHRoZSBpbmNvbXBsZXRlIGNoYXJhY3RlciBieXRlcyB3ZSBnb3RcbiAgICBidWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGggLSB0aGlzLmNoYXJSZWNlaXZlZCwgZW5kKTtcbiAgICBlbmQgLT0gdGhpcy5jaGFyUmVjZWl2ZWQ7XG4gIH1cblxuICBjaGFyU3RyICs9IGJ1ZmZlci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCBlbmQpO1xuXG4gIHZhciBlbmQgPSBjaGFyU3RyLmxlbmd0aCAtIDE7XG4gIHZhciBjaGFyQ29kZSA9IGNoYXJTdHIuY2hhckNvZGVBdChlbmQpO1xuICAvLyBDRVNVLTg6IGxlYWQgc3Vycm9nYXRlIChEODAwLURCRkYpIGlzIGFsc28gdGhlIGluY29tcGxldGUgY2hhcmFjdGVyXG4gIGlmIChjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLnN1cnJvZ2F0ZVNpemU7XG4gICAgdGhpcy5jaGFyTGVuZ3RoICs9IHNpemU7XG4gICAgdGhpcy5jaGFyUmVjZWl2ZWQgKz0gc2l6ZTtcbiAgICB0aGlzLmNoYXJCdWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsIHNpemUsIDAsIHNpemUpO1xuICAgIGJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgMCwgMCwgc2l6ZSk7XG4gICAgcmV0dXJuIGNoYXJTdHIuc3Vic3RyaW5nKDAsIGVuZCk7XG4gIH1cblxuICAvLyBvciBqdXN0IGVtaXQgdGhlIGNoYXJTdHJcbiAgcmV0dXJuIGNoYXJTdHI7XG59O1xuXG4vLyBkZXRlY3RJbmNvbXBsZXRlQ2hhciBkZXRlcm1pbmVzIGlmIHRoZXJlIGlzIGFuIGluY29tcGxldGUgVVRGLTggY2hhcmFjdGVyIGF0XG4vLyB0aGUgZW5kIG9mIHRoZSBnaXZlbiBidWZmZXIuIElmIHNvLCBpdCBzZXRzIHRoaXMuY2hhckxlbmd0aCB0byB0aGUgYnl0ZVxuLy8gbGVuZ3RoIHRoYXQgY2hhcmFjdGVyLCBhbmQgc2V0cyB0aGlzLmNoYXJSZWNlaXZlZCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzXG4vLyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgY2hhcmFjdGVyLlxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZGV0ZWN0SW5jb21wbGV0ZUNoYXIgPSBmdW5jdGlvbihidWZmZXIpIHtcbiAgLy8gZGV0ZXJtaW5lIGhvdyBtYW55IGJ5dGVzIHdlIGhhdmUgdG8gY2hlY2sgYXQgdGhlIGVuZCBvZiB0aGlzIGJ1ZmZlclxuICB2YXIgaSA9IChidWZmZXIubGVuZ3RoID49IDMpID8gMyA6IGJ1ZmZlci5sZW5ndGg7XG5cbiAgLy8gRmlndXJlIG91dCBpZiBvbmUgb2YgdGhlIGxhc3QgaSBieXRlcyBvZiBvdXIgYnVmZmVyIGFubm91bmNlcyBhblxuICAvLyBpbmNvbXBsZXRlIGNoYXIuXG4gIGZvciAoOyBpID4gMDsgaS0tKSB7XG4gICAgdmFyIGMgPSBidWZmZXJbYnVmZmVyLmxlbmd0aCAtIGldO1xuXG4gICAgLy8gU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgjRGVzY3JpcHRpb25cblxuICAgIC8vIDExMFhYWFhYXG4gICAgaWYgKGkgPT0gMSAmJiBjID4+IDUgPT0gMHgwNikge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoID0gMjtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIDExMTBYWFhYXG4gICAgaWYgKGkgPD0gMiAmJiBjID4+IDQgPT0gMHgwRSkge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoID0gMztcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIDExMTEwWFhYXG4gICAgaWYgKGkgPD0gMyAmJiBjID4+IDMgPT0gMHgxRSkge1xuICAgICAgdGhpcy5jaGFyTGVuZ3RoID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB0aGlzLmNoYXJSZWNlaXZlZCA9IGk7XG59O1xuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbihidWZmZXIpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBpZiAoYnVmZmVyICYmIGJ1ZmZlci5sZW5ndGgpXG4gICAgcmVzID0gdGhpcy53cml0ZShidWZmZXIpO1xuXG4gIGlmICh0aGlzLmNoYXJSZWNlaXZlZCkge1xuICAgIHZhciBjciA9IHRoaXMuY2hhclJlY2VpdmVkO1xuICAgIHZhciBidWYgPSB0aGlzLmNoYXJCdWZmZXI7XG4gICAgdmFyIGVuYyA9IHRoaXMuZW5jb2Rpbmc7XG4gICAgcmVzICs9IGJ1Zi5zbGljZSgwLCBjcikudG9TdHJpbmcoZW5jKTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiBwYXNzVGhyb3VnaFdyaXRlKGJ1ZmZlcikge1xuICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xufVxuXG5mdW5jdGlvbiB1dGYxNkRldGVjdEluY29tcGxldGVDaGFyKGJ1ZmZlcikge1xuICB0aGlzLmNoYXJSZWNlaXZlZCA9IGJ1ZmZlci5sZW5ndGggJSAyO1xuICB0aGlzLmNoYXJMZW5ndGggPSB0aGlzLmNoYXJSZWNlaXZlZCA/IDIgOiAwO1xufVxuXG5mdW5jdGlvbiBiYXNlNjREZXRlY3RJbmNvbXBsZXRlQ2hhcihidWZmZXIpIHtcbiAgdGhpcy5jaGFyUmVjZWl2ZWQgPSBidWZmZXIubGVuZ3RoICUgMztcbiAgdGhpcy5jaGFyTGVuZ3RoID0gdGhpcy5jaGFyUmVjZWl2ZWQgPyAzIDogMDtcbn1cbiIsInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbnZhciBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKS5TdHJpbmdEZWNvZGVyXG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nU3RyZWFtXG5tb2R1bGUuZXhwb3J0cy5BbGlnbmVkU3RyaW5nRGVjb2RlciA9IEFsaWduZWRTdHJpbmdEZWNvZGVyXG5cbmZ1bmN0aW9uIFN0cmluZ1N0cmVhbShmcm9tLCB0bykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RyaW5nU3RyZWFtKSkgcmV0dXJuIG5ldyBTdHJpbmdTdHJlYW0oZnJvbSwgdG8pXG5cbiAgU3RyZWFtLmNhbGwodGhpcylcblxuICBpZiAoZnJvbSA9PSBudWxsKSBmcm9tID0gJ3V0ZjgnXG5cbiAgdGhpcy5yZWFkYWJsZSA9IHRoaXMud3JpdGFibGUgPSB0cnVlXG4gIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgdGhpcy50b0VuY29kaW5nID0gKHRvID09IG51bGwgPyBmcm9tIDogdG8pXG4gIHRoaXMuZnJvbUVuY29kaW5nID0gKHRvID09IG51bGwgPyAnJyA6IGZyb20pXG4gIHRoaXMuZGVjb2RlciA9IG5ldyBBbGlnbmVkU3RyaW5nRGVjb2Rlcih0aGlzLnRvRW5jb2RpbmcpXG59XG51dGlsLmluaGVyaXRzKFN0cmluZ1N0cmVhbSwgU3RyZWFtKVxuXG5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICBpZiAoIXRoaXMud3JpdGFibGUpIHtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdzdHJlYW0gbm90IHdyaXRhYmxlJylcbiAgICBlcnIuY29kZSA9ICdFUElQRSdcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmICh0aGlzLmZyb21FbmNvZGluZykge1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIGRhdGEgPSBkYXRhLnRvU3RyaW5nKClcbiAgICBkYXRhID0gbmV3IEJ1ZmZlcihkYXRhLCB0aGlzLmZyb21FbmNvZGluZylcbiAgfVxuICB2YXIgc3RyaW5nID0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEpXG4gIGlmIChzdHJpbmcubGVuZ3RoKSB0aGlzLmVtaXQoJ2RhdGEnLCBzdHJpbmcpXG4gIHJldHVybiAhdGhpcy5wYXVzZWRcbn1cblxuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5kZWNvZGVyLmZsdXNoKSB7XG4gICAgdmFyIHN0cmluZyA9IHRoaXMuZGVjb2Rlci5mbHVzaCgpXG4gICAgaWYgKHN0cmluZy5sZW5ndGgpIHRoaXMuZW1pdCgnZGF0YScsIHN0cmluZylcbiAgfVxufVxuXG5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMud3JpdGFibGUgJiYgIXRoaXMucmVhZGFibGUpIHJldHVyblxuICB0aGlzLmZsdXNoKClcbiAgdGhpcy5lbWl0KCdlbmQnKVxuICB0aGlzLndyaXRhYmxlID0gdGhpcy5yZWFkYWJsZSA9IGZhbHNlXG4gIHRoaXMuZGVzdHJveSgpXG59XG5cblN0cmluZ1N0cmVhbS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRlY29kZXIgPSBudWxsXG4gIHRoaXMud3JpdGFibGUgPSB0aGlzLnJlYWRhYmxlID0gZmFsc2VcbiAgdGhpcy5lbWl0KCdjbG9zZScpXG59XG5cblN0cmluZ1N0cmVhbS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5wYXVzZWQgPSB0cnVlXG59XG5cblN0cmluZ1N0cmVhbS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5wYXVzZWQpIHRoaXMuZW1pdCgnZHJhaW4nKVxuICB0aGlzLnBhdXNlZCA9IGZhbHNlXG59XG5cbmZ1bmN0aW9uIEFsaWduZWRTdHJpbmdEZWNvZGVyKGVuY29kaW5nKSB7XG4gIFN0cmluZ0RlY29kZXIuY2FsbCh0aGlzLCBlbmNvZGluZylcblxuICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgdGhpcy53cml0ZSA9IGFsaWduZWRXcml0ZVxuICAgICAgdGhpcy5hbGlnbmVkQnVmZmVyID0gbmV3IEJ1ZmZlcigzKVxuICAgICAgdGhpcy5hbGlnbmVkQnl0ZXMgPSAwXG4gICAgICBicmVha1xuICB9XG59XG51dGlsLmluaGVyaXRzKEFsaWduZWRTdHJpbmdEZWNvZGVyLCBTdHJpbmdEZWNvZGVyKVxuXG5BbGlnbmVkU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLmFsaWduZWRCdWZmZXIgfHwgIXRoaXMuYWxpZ25lZEJ5dGVzKSByZXR1cm4gJydcbiAgdmFyIGxlZnRvdmVyID0gdGhpcy5hbGlnbmVkQnVmZmVyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMuYWxpZ25lZEJ5dGVzKVxuICB0aGlzLmFsaWduZWRCeXRlcyA9IDBcbiAgcmV0dXJuIGxlZnRvdmVyXG59XG5cbmZ1bmN0aW9uIGFsaWduZWRXcml0ZShidWZmZXIpIHtcbiAgdmFyIHJlbSA9ICh0aGlzLmFsaWduZWRCeXRlcyArIGJ1ZmZlci5sZW5ndGgpICUgdGhpcy5hbGlnbmVkQnVmZmVyLmxlbmd0aFxuICBpZiAoIXJlbSAmJiAhdGhpcy5hbGlnbmVkQnl0ZXMpIHJldHVybiBidWZmZXIudG9TdHJpbmcodGhpcy5lbmNvZGluZylcblxuICB2YXIgcmV0dXJuQnVmZmVyID0gbmV3IEJ1ZmZlcih0aGlzLmFsaWduZWRCeXRlcyArIGJ1ZmZlci5sZW5ndGggLSByZW0pXG5cbiAgdGhpcy5hbGlnbmVkQnVmZmVyLmNvcHkocmV0dXJuQnVmZmVyLCAwLCAwLCB0aGlzLmFsaWduZWRCeXRlcylcbiAgYnVmZmVyLmNvcHkocmV0dXJuQnVmZmVyLCB0aGlzLmFsaWduZWRCeXRlcywgMCwgYnVmZmVyLmxlbmd0aCAtIHJlbSlcblxuICBidWZmZXIuY29weSh0aGlzLmFsaWduZWRCdWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGggLSByZW0sIGJ1ZmZlci5sZW5ndGgpXG4gIHRoaXMuYWxpZ25lZEJ5dGVzID0gcmVtXG5cbiAgcmV0dXJuIHJldHVybkJ1ZmZlci50b1N0cmluZyh0aGlzLmVuY29kaW5nKVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBtb2R1bGUgc3ltYm9sLXRyZWVcbiAqIEBhdXRob3IgSm9yaXMgdmFuIGRlciBXZWwgPGpvcmlzQGpvcmlzdmFuZGVyd2VsLmNvbT5cbiAqL1xuXG5jb25zdCBTeW1ib2xUcmVlTm9kZSA9IHJlcXVpcmUoJy4vU3ltYm9sVHJlZU5vZGUnKTtcbmNvbnN0IFRyZWVQb3NpdGlvbiA9IHJlcXVpcmUoJy4vVHJlZVBvc2l0aW9uJyk7XG5jb25zdCBUcmVlSXRlcmF0b3IgPSByZXF1aXJlKCcuL1RyZWVJdGVyYXRvcicpO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV2ZXJzZUFycmF5SW5kZXgoYXJyYXksIHJldmVyc2VJbmRleCkge1xuICAgICAgICByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMSAtIHJldmVyc2VJbmRleF07IC8vIG5vIG5lZWQgdG8gY2hlY2sgYGluZGV4ID49IDBgXG59XG5cbmNsYXNzIFN5bWJvbFRyZWUge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgICAgICogQGFsaWFzIG1vZHVsZTpzeW1ib2wtdHJlZVxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uPSdTeW1ib2xUcmVlIGRhdGEnXSBEZXNjcmlwdGlvbiB1c2VkIGZvciB0aGUgU3ltYm9sXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3RvcihkZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ltYm9sID0gU3ltYm9sKGRlc2NyaXB0aW9uIHx8ICdTeW1ib2xUcmVlIGRhdGEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIChvcHRpb25hbGx5KSBpbml0aWFsaXplIGFuIG9iamVjdCByaWdodCBhZnRlciBpdHMgY3JlYXRpb24sXG4gICAgICAgICAqIHRvIHRha2UgYWR2YW50YWdlIG9mIFY4J3MgZmFzdCBwcm9wZXJ0aWVzLiBBbHNvIHVzZWZ1bCBpZiB5b3Ugd291bGQgbGlrZSB0b1xuICAgICAgICAgKiBmcmVlemUgeW91ciBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBhbGlhcyBtb2R1bGU6c3ltYm9sLXRyZWUjaW5pdGlhbGl6ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBpbml0aWFsaXplKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBfbm9kZShvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG9iamVjdFt0aGlzLnN5bWJvbF07XG5cbiAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChvYmplY3RbdGhpcy5zeW1ib2xdID0gbmV3IFN5bWJvbFRyZWVOb2RlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgaGFzIGFueSBjaGlsZHJlbi4gT3RoZXJ3aXNlIGl0IHJldHVybnMgYGZhbHNlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBoYXNDaGlsZHJlblxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBoYXNDaGlsZHJlbihvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLmhhc0NoaWxkcmVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBnaXZlbiBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgZmlyc3RDaGlsZFxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIGZpcnN0Q2hpbGQob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5maXJzdENoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGdpdmVuIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBsYXN0Q2hpbGRcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICBsYXN0Q2hpbGQob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5sYXN0Q2hpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgcHJldmlvdXMgc2libGluZyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHByZXZpb3VzU2libGluZ1xuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIHByZXZpb3VzU2libGluZyhvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLnByZXZpb3VzU2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBuZXh0IHNpYmxpbmcgb2YgdGhlIGdpdmVuIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBuZXh0U2libGluZ1xuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIG5leHRTaWJsaW5nKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub2RlKG9iamVjdCkubmV4dFNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJuIHRoZSBwYXJlbnQgb2YgdGhlIGdpdmVuIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBwYXJlbnRcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICBwYXJlbnQob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogRmluZCB0aGUgaW5jbHVzaXZlIGRlc2NlbmRhbnQgdGhhdCBpcyBsYXN0IGluIHRyZWUgb3JkZXIgb2YgdGhlIGdpdmVuIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTyhuKWAgKHdvcnN0IGNhc2UpIHdoZXJlIGBuYCBpcyB0aGUgZGVwdGggb2YgdGhlIHN1YnRyZWUgb2YgYG9iamVjdGBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBsYXN0SW5jbHVzaXZlRGVzY2VuZGFudFxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIGxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGxldCBsYXN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSBvYmplY3Q7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAoKGxhc3RDaGlsZCA9IHRoaXMuX25vZGUoY3VycmVudCkubGFzdENoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGxhc3RDaGlsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaW5kIHRoZSBwcmVjZWRpbmcgb2JqZWN0IChBKSBvZiB0aGUgZ2l2ZW4gb2JqZWN0IChCKS5cbiAgICAgICAgICogQW4gb2JqZWN0IEEgaXMgcHJlY2VkaW5nIGFuIG9iamVjdCBCIGlmIEEgYW5kIEIgYXJlIGluIHRoZSBzYW1lIHRyZWVcbiAgICAgICAgICogYW5kIEEgY29tZXMgYmVmb3JlIEIgaW4gdHJlZSBvcmRlci5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTyhuKWAgKHdvcnN0IGNhc2UpXG4gICAgICAgICAqICogYE8oMSlgIChhbW9ydGl6ZWQgd2hlbiB3YWxraW5nIHRoZSBlbnRpcmUgdHJlZSlcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBwcmVjZWRpbmdcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5yb290XSBJZiBzZXQsIGByb290YCBtdXN0IGJlIGFuIGluY2x1c2l2ZSBhbmNlc3RvclxuICAgICAgICAgKiAgICAgICAgb2YgdGhlIHJldHVybiB2YWx1ZSAob3IgZWxzZSBudWxsIGlzIHJldHVybmVkKS4gVGhpcyBjaGVjayBfYXNzdW1lc19cbiAgICAgICAgICogICAgICAgIHRoYXQgYHJvb3RgIGlzIGFsc28gYW4gaW5jbHVzaXZlIGFuY2VzdG9yIG9mIHRoZSBnaXZlbiBgb2JqZWN0YFxuICAgICAgICAgKiBAcmV0dXJuIHs/T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgcHJlY2VkaW5nKG9iamVjdCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVSb290ID0gb3B0aW9ucyAmJiBvcHRpb25zLnJvb3Q7XG5cbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0ID09PSB0cmVlUm9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNTaWJsaW5nID0gdGhpcy5fbm9kZShvYmplY3QpLnByZXZpb3VzU2libGluZztcblxuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KHByZXZpb3VzU2libGluZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgc2libGluZyByZXR1cm4gdGhlIHBhcmVudCAobWlnaHQgYmUgbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLnBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaW5kIHRoZSBmb2xsb3dpbmcgb2JqZWN0IChBKSBvZiB0aGUgZ2l2ZW4gb2JqZWN0IChCKS5cbiAgICAgICAgICogQW4gb2JqZWN0IEEgaXMgZm9sbG93aW5nIGFuIG9iamVjdCBCIGlmIEEgYW5kIEIgYXJlIGluIHRoZSBzYW1lIHRyZWVcbiAgICAgICAgICogYW5kIEEgY29tZXMgYWZ0ZXIgQiBpbiB0cmVlIG9yZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCAod29yc3QgY2FzZSkgd2hlcmUgYG5gIGlzIHRoZSBhbW91bnQgb2Ygb2JqZWN0cyBpbiB0aGUgZW50aXJlIHRyZWVcbiAgICAgICAgICogKiBgTygxKWAgKGFtb3J0aXplZCB3aGVuIHdhbGtpbmcgdGhlIGVudGlyZSB0cmVlKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGZvbGxvd2luZ1xuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0geyFPYmplY3R9IG9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5yb290XSBJZiBzZXQsIGByb290YCBtdXN0IGJlIGFuIGluY2x1c2l2ZSBhbmNlc3RvclxuICAgICAgICAgKiAgICAgICAgb2YgdGhlIHJldHVybiB2YWx1ZSAob3IgZWxzZSBudWxsIGlzIHJldHVybmVkKS4gVGhpcyBjaGVjayBfYXNzdW1lc19cbiAgICAgICAgICogICAgICAgIHRoYXQgYHJvb3RgIGlzIGFsc28gYW4gaW5jbHVzaXZlIGFuY2VzdG9yIG9mIHRoZSBnaXZlbiBgb2JqZWN0YFxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNraXBDaGlsZHJlbj1mYWxzZV0gSWYgc2V0LCBpZ25vcmUgdGhlIGNoaWxkcmVuIG9mIGBvYmplY3RgXG4gICAgICAgICAqIEByZXR1cm4gez9PYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICBmb2xsb3dpbmcob2JqZWN0LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJlZVJvb3QgPSBvcHRpb25zICYmIG9wdGlvbnMucm9vdDtcbiAgICAgICAgICAgICAgICBjb25zdCBza2lwQ2hpbGRyZW4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2tpcENoaWxkcmVuO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9ICFza2lwQ2hpbGRyZW4gJiYgdGhpcy5fbm9kZShvYmplY3QpLmZpcnN0Q2hpbGQ7XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSBvYmplY3Q7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PT0gdHJlZVJvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gdGhpcy5fbm9kZShjdXJyZW50KS5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRoaXMuX25vZGUoY3VycmVudCkucGFyZW50O1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQXBwZW5kIGFsbCBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIGFuIGFycmF5LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gYHBhcmVudGBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBjaGlsZHJlblRvQXJyYXlcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmVudFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0W119IFtvcHRpb25zLmFycmF5PVtdXVxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIEZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBvYmplY3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBhcnJheS5cbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aXRoIGFyZ3VtZW50cyAob2JqZWN0KS4gU2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgYW4gb2JqZWN0XG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGluY2x1ZGVkLlxuICAgICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zLnRoaXNBcmddIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgYGZpbHRlcmAuXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdFtdfVxuICAgICAgICAgKi9cbiAgICAgICAgY2hpbGRyZW5Ub0FycmF5KHBhcmVudCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5ICAgPSAob3B0aW9ucyAmJiBvcHRpb25zLmFycmF5KSB8fCBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXIpIHx8IHJldHVyblRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdGhpc0FyZyA9IChvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZykgfHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocGFyZW50KTtcbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0ID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fbm9kZShvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRDYWNoZWRJbmRleChwYXJlbnROb2RlLCBpbmRleCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuY2FsbCh0aGlzQXJnLCBvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2gob2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFwcGVuZCBhbGwgaW5jbHVzaXZlIGFuY2VzdG9ycyBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIGFuIGFycmF5LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBhbmNlc3RvcnMgb2YgdGhlIGdpdmVuIGBvYmplY3RgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgYW5jZXN0b3JzVG9BcnJheVxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuYXJyYXk9W11dXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gRnVuY3Rpb24gdG8gdGVzdCBlYWNoIG9iamVjdCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFycmF5LlxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VkIHdpdGggYXJndW1lbnRzIChvYmplY3QpLiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhbiBvYmplY3RcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgaW5jbHVkZWQuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnMudGhpc0FyZ10gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgZmlsdGVyYC5cbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0W119XG4gICAgICAgICAqL1xuICAgICAgICBhbmNlc3RvcnNUb0FycmF5KG9iamVjdCwgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5ICAgPSAob3B0aW9ucyAmJiBvcHRpb25zLmFycmF5KSB8fCBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXIpIHx8IHJldHVyblRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdGhpc0FyZyA9IChvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZykgfHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgbGV0IGFuY2VzdG9yID0gb2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmNhbGwodGhpc0FyZywgYW5jZXN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2goYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSB0aGlzLl9ub2RlKGFuY2VzdG9yKS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFwcGVuZCBhbGwgZGVzY2VuZGFudHMgb2YgdGhlIGdpdmVuIG9iamVjdCB0byBhbiBhcnJheSAoaW4gdHJlZSBvcmRlcikuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIG9iamVjdHMgaW4gdGhlIHN1Yi10cmVlIG9mIHRoZSBnaXZlbiBgb2JqZWN0YFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHRyZWVUb0FycmF5XG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByb290XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuYXJyYXk9W11dXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gRnVuY3Rpb24gdG8gdGVzdCBlYWNoIG9iamVjdCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFycmF5LlxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VkIHdpdGggYXJndW1lbnRzIChvYmplY3QpLiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhbiBvYmplY3RcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgaW5jbHVkZWQuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnMudGhpc0FyZ10gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgZmlsdGVyYC5cbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0W119XG4gICAgICAgICAqL1xuICAgICAgICB0cmVlVG9BcnJheShyb290LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXkgICA9IChvcHRpb25zICYmIG9wdGlvbnMuYXJyYXkpIHx8IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlciAgPSAob3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcikgfHwgcmV0dXJuVHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGlzQXJnID0gKG9wdGlvbnMgJiYgb3B0aW9ucy50aGlzQXJnKSB8fCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0ID0gcm9vdDtcblxuICAgICAgICAgICAgICAgIHdoaWxlIChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuY2FsbCh0aGlzQXJnLCBvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2gob2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IHRoaXMuZm9sbG93aW5nKG9iamVjdCwge3Jvb3Q6IHJvb3R9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBjaGlsZHJlbkl0ZXJhdG9yXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnRcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJldmVyc2U9ZmFsc2VdXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNilcbiAgICAgICAgICovXG4gICAgICAgIGNoaWxkcmVuSXRlcmF0b3IocGFyZW50LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHBhcmVudCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRyZWVJdGVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlID8gcGFyZW50Tm9kZS5sYXN0Q2hpbGQgOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlID8gVHJlZUl0ZXJhdG9yLlBSRVYgOiBUcmVlSXRlcmF0b3IuTkVYVFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcHJldmlvdXMgc2libGluZ3Mgb2YgdGhlIGdpdmVuIG9iamVjdC4gKGluIHJldmVyc2UgdHJlZSBvcmRlcilcbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWAgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvblxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHByZXZpb3VzU2libGluZ3NJdGVyYXRvclxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNilcbiAgICAgICAgICovXG4gICAgICAgIHByZXZpb3VzU2libGluZ3NJdGVyYXRvcihvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRyZWVJdGVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub2RlKG9iamVjdCkucHJldmlvdXNTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUl0ZXJhdG9yLlBSRVZcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIG5leHQgc2libGluZ3Mgb2YgdGhlIGdpdmVuIG9iamVjdC4gKGluIHRyZWUgb3JkZXIpXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBuZXh0U2libGluZ3NJdGVyYXRvclxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNilcbiAgICAgICAgICovXG4gICAgICAgIG5leHRTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KS5uZXh0U2libGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVJdGVyYXRvci5ORVhUXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIGluY2x1c2l2ZSBhbmNlc3RvcnMgb2YgdGhlIGdpdmVuIG9iamVjdFxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYCBmb3IgYSBzaW5nbGUgaXRlcmF0aW9uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgYW5jZXN0b3JzSXRlcmF0b3JcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIGl0ZXJhYmxlIGl0ZXJhdG9yIChFUzYpXG4gICAgICAgICAqL1xuICAgICAgICBhbmNlc3RvcnNJdGVyYXRvcihvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRyZWVJdGVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBUcmVlSXRlcmF0b3IuUEFSRU5UXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIGRlc2NlbmRhbnRzIG9mIHRoZSBnaXZlbiBvYmplY3QgKGluIHRyZWUgb3JkZXIpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBXaGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBvYmplY3RzIGluIHRoZSBzdWItdHJlZSBvZiB0aGUgZ2l2ZW4gYHJvb3RgOlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCAod29yc3QgY2FzZSBmb3IgYSBzaW5nbGUgaXRlcmF0aW9uKVxuICAgICAgICAgKiAqIGBPKG4pYCAoYW1vcnRpemVkLCB3aGVuIGNvbXBsZXRpbmcgdGhlIGl0ZXJhdG9yKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHRyZWVJdGVyYXRvclxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcm9vdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJldmVyc2U9ZmFsc2VdXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNilcbiAgICAgICAgICovXG4gICAgICAgIHRyZWVJdGVyYXRvcihyb290LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2UgPyB0aGlzLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KHJvb3QpIDogcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2UgPyBUcmVlSXRlcmF0b3IuUFJFQ0VESU5HIDogVHJlZUl0ZXJhdG9yLkZPTExPV0lOR1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogRmluZCB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIG9iamVjdCAodGhlIG51bWJlciBvZiBwcmVjZWRpbmcgc2libGluZ3MpLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBwcmVjZWRpbmcgc2libGluZ3NcbiAgICAgICAgICogKiBgTygxKWAgKGFtb3J0aXplZCwgaWYgdGhlIHRyZWUgaXMgbm90IG1vZGlmaWVkKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGluZGV4XG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjaGlsZFxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgcHJlY2VkaW5nIHNpYmxpbmdzLCBvciAtMSBpZiB0aGUgb2JqZWN0IGhhcyBubyBwYXJlbnRcbiAgICAgICAgICovXG4gICAgICAgIGluZGV4KGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gdGhpcy5fbm9kZShjaGlsZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUoY2hpbGROb2RlLnBhcmVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHByaW5jaXBhbCwgeW91IGNvdWxkIGFsc28gZmluZCBvdXQgdGhlIG51bWJlciBvZiBwcmVjZWRpbmcgc2libGluZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBvYmplY3RzIHRoYXQgZG8gbm90IGhhdmUgYSBwYXJlbnQuIFRoaXMgbWV0aG9kIGxpbWl0cyBpdHNlbGYgb25seSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB0aGF0IGhhdmUgYSBwYXJlbnQgYmVjYXVzZSB0aGF0IGxldHMgdXMgb3B0aW1pemUgbW9yZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gY2hpbGROb2RlLmdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IG9iamVjdCA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDtcblxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLmNoaWxkSW5kZXhDYWNoZWRVcFRvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZWRVcFRvTm9kZSA9IHRoaXMuX25vZGUocGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBjYWNoZWRVcFRvTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGNhY2hlZFVwVG9Ob2RlLmdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpICsgMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fbm9kZShvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRDYWNoZWRJbmRleChwYXJlbnROb2RlLCBjdXJyZW50SW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0ID09PSBjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgKytjdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBjaGlsZDtcblxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIGNoaWxkcmVuXG4gICAgICAgICAqICogYE8oMSlgIChhbW9ydGl6ZWQsIGlmIHRoZSB0cmVlIGlzIG5vdCBtb2RpZmllZClcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBjaGlsZHJlbkNvdW50XG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnRcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgY2hpbGRyZW5Db3VudChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShwYXJlbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnROb2RlLmxhc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXgocGFyZW50Tm9kZS5sYXN0Q2hpbGQpICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDb21wYXJlIHRoZSBwb3NpdGlvbiBvZiBhbiBvYmplY3QgcmVsYXRpdmUgdG8gYW5vdGhlciBvYmplY3QuIEEgYml0IHNldCBpcyByZXR1cm5lZDpcbiAgICAgICAgICpcbiAgICAgICAgICogPHVsPlxuICAgICAgICAgKiAgICAgPGxpPkRJU0NPTk5FQ1RFRCA6IDE8L2xpPlxuICAgICAgICAgKiAgICAgPGxpPlBSRUNFRElORyA6IDI8L2xpPlxuICAgICAgICAgKiAgICAgPGxpPkZPTExPV0lORyA6IDQ8L2xpPlxuICAgICAgICAgKiAgICAgPGxpPkNPTlRBSU5TIDogODwvbGk+XG4gICAgICAgICAqICAgICA8bGk+Q09OVEFJTkVEX0JZIDogMTY8L2xpPlxuICAgICAgICAgKiA8L3VsPlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiBpbiBET00sIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0XG4gICAgICAgICAqIERJU0NPTk5FQ1RFRCBuZXZlciBvY2N1cnMgd2l0aCBhbnkgb3RoZXIgYml0LlxuICAgICAgICAgKlxuICAgICAgICAgKiB3aGVyZSBgbmAgYW5kIGBtYCBhcmUgdGhlIGFtb3VudCBvZiBhbmNlc3RvcnMgb2YgYGxlZnRgIGFuZCBgcmlnaHRgO1xuICAgICAgICAgKiB3aGVyZSBgb2AgaXMgdGhlIGFtb3VudCBvZiBjaGlsZHJlbiBvZiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBgbGVmdGAgYW5kIGByaWdodGA6XG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8obiArIG0gKyBvKWAgKHdvcnN0IGNhc2UpXG4gICAgICAgICAqICogYE8obiArIG0pYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgY29tcGFyZVRyZWVQb3NpdGlvblxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbGVmdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmlnaHRcbiAgICAgICAgICogQHJldHVybiB7TnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgY29tcGFyZVRyZWVQb3NpdGlvbihsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgIC8vIEluIERPTSB0ZXJtczpcbiAgICAgICAgICAgICAgICAvLyBsZWZ0ID0gcmVmZXJlbmNlIC8gY29udGV4dCBvYmplY3RcbiAgICAgICAgICAgICAgICAvLyByaWdodCA9IG90aGVyXG5cbiAgICAgICAgICAgICAgICBpZiAobGVmdCA9PT0gcmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qIGpzaGludCAtVzAxNiAqL1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdEFuY2VzdG9ycyA9IFtdOyB7IC8vIGluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxlZnRBbmNlc3RvciA9IGxlZnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZWZ0QW5jZXN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRBbmNlc3RvciA9PT0gcmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJlZVBvc2l0aW9uLkNPTlRBSU5TIHwgVHJlZVBvc2l0aW9uLlBSRUNFRElORztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlciBpcyBhbmNlc3RvciBvZiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRBbmNlc3RvcnMucHVzaChsZWZ0QW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0QW5jZXN0b3IgPSB0aGlzLnBhcmVudChsZWZ0QW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHRBbmNlc3RvcnMgPSBbXTsge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJpZ2h0QW5jZXN0b3IgPSByaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJpZ2h0QW5jZXN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0QW5jZXN0b3IgPT09IGxlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJlZVBvc2l0aW9uLkNPTlRBSU5FRF9CWSB8IFRyZWVQb3NpdGlvbi5GT0xMT1dJTkc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodEFuY2VzdG9ycy5wdXNoKHJpZ2h0QW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodEFuY2VzdG9yID0gdGhpcy5wYXJlbnQocmlnaHRBbmNlc3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBjb25zdCByb290ID0gcmV2ZXJzZUFycmF5SW5kZXgobGVmdEFuY2VzdG9ycywgMCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXJvb3QgfHwgcm9vdCAhPT0gcmV2ZXJzZUFycmF5SW5kZXgocmlnaHRBbmNlc3RvcnMsIDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3RlOiB1bmxpa2UgRE9NLCBwcmVjZWRpbmcgLyBmb2xsb3dpbmcgaXMgbm90IHNldCBoZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJlZVBvc2l0aW9uLkRJU0NPTk5FQ1RFRDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBmaW5kIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yXG4gICAgICAgICAgICAgICAgbGV0IGNvbW1vbkFuY2VzdG9ySW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yc01pbkxlbmd0aCA9IE1hdGgubWluKGxlZnRBbmNlc3RvcnMubGVuZ3RoLCByaWdodEFuY2VzdG9ycy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmNlc3RvcnNNaW5MZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdEFuY2VzdG9yICA9IHJldmVyc2VBcnJheUluZGV4KGxlZnRBbmNlc3RvcnMsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmlnaHRBbmNlc3RvciA9IHJldmVyc2VBcnJheUluZGV4KHJpZ2h0QW5jZXN0b3JzLCBpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRBbmNlc3RvciAhPT0gcmlnaHRBbmNlc3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uQW5jZXN0b3JJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gaW5kZXhlcyB3aXRoaW4gdGhlIGNvbW1vbiBhbmNlc3RvclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRJbmRleCAgPSB0aGlzLmluZGV4KHJldmVyc2VBcnJheUluZGV4KGxlZnRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHRJbmRleCA9IHRoaXMuaW5kZXgocmV2ZXJzZUFycmF5SW5kZXgocmlnaHRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmlnaHRJbmRleCA8IGxlZnRJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBUcmVlUG9zaXRpb24uUFJFQ0VESU5HXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFRyZWVQb3NpdGlvbi5GT0xMT1dJTkc7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGlzIHRyZWUuXG4gICAgICAgICAqIEhhcyBubyBlZmZlY3QgaWYgYWxyZWFkeSByZW1vdmVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHJlbW92ZVxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlT2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gcmVtb3ZlT2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICByZW1vdmUocmVtb3ZlT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlTm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlT2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShyZW1vdmVOb2RlLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldk5vZGUgPSB0aGlzLl9ub2RlKHJlbW92ZU5vZGUucHJldmlvdXNTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlTm9kZS5uZXh0U2libGluZyk7XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUuZmlyc3RDaGlsZCA9PT0gcmVtb3ZlT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuZmlyc3RDaGlsZCA9IHJlbW92ZU5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLmxhc3RDaGlsZCA9PT0gcmVtb3ZlT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUubGFzdENoaWxkID0gcmVtb3ZlTm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS5uZXh0U2libGluZyA9IHJlbW92ZU5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG5leHROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZS5wcmV2aW91c1NpYmxpbmcgPSByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZW1vdmVOb2RlLnBhcmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZS5wcmV2aW91c1NpYmxpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUubmV4dFNpYmxpbmcgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRyZW5DaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbW92ZU9iamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBiZWZvcmUgdGhlIHJlZmVyZW5jZSBvYmplY3QuXG4gICAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBgcmVmZXJlbmNlT2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBpbnNlcnRCZWZvcmVcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0XG4gICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWVcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGluc2VydEJlZm9yZShyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldk5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUucHJldmlvdXNTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUucGFyZW50KTtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV3Tm9kZS5wYXJlbnQgPSByZWZlcmVuY2VOb2RlLnBhcmVudDtcbiAgICAgICAgICAgICAgICBuZXdOb2RlLnByZXZpb3VzU2libGluZyA9IHJlZmVyZW5jZU5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICAgIG5ld05vZGUubmV4dFNpYmxpbmcgPSByZWZlcmVuY2VPYmplY3Q7XG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5wcmV2aW91c1NpYmxpbmcgPSBuZXdPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLm5leHRTaWJsaW5nID0gbmV3T2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZmlyc3RDaGlsZCA9PT0gcmVmZXJlbmNlT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPSBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRyZW5DaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld09iamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBhZnRlciB0aGUgcmVmZXJlbmNlIG9iamVjdC5cbiAgICAgICAgICogYG5ld09iamVjdGAgaXMgbm93IHRoZSBuZXh0IHNpYmxpbmcgb2YgYHJlZmVyZW5jZU9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgaW5zZXJ0QWZ0ZXJcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0XG4gICAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWVcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGluc2VydEFmdGVyKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlT2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlTm9kZS5uZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuX25vZGUobmV3T2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VOb2RlLnBhcmVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZS5pc0F0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5ld05vZGUucGFyZW50ID0gcmVmZXJlbmNlTm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgbmV3Tm9kZS5wcmV2aW91c1NpYmxpbmcgPSByZWZlcmVuY2VPYmplY3Q7XG4gICAgICAgICAgICAgICAgbmV3Tm9kZS5uZXh0U2libGluZyA9IHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5uZXh0U2libGluZyA9IG5ld09iamVjdDtcblxuICAgICAgICAgICAgICAgIGlmIChuZXh0Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUucHJldmlvdXNTaWJsaW5nID0gbmV3T2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUubGFzdENoaWxkID09PSByZWZlcmVuY2VPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUubGFzdENoaWxkID0gbmV3T2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdPYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5zZXJ0IHRoZSBnaXZlbiBvYmplY3QgYXMgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBnaXZlbiByZWZlcmVuY2Ugb2JqZWN0LlxuICAgICAgICAgKiBgbmV3T2JqZWN0YCBpcyBub3cgdGhlIGZpcnN0IGNoaWxkIG9mIGByZWZlcmVuY2VPYmplY3RgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHByZXBlbmRDaGlsZFxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdPYmplY3RcbiAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBuZXdPYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZVxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IG5ld09iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgcHJlcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlT2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5ld05vZGUuaXNBdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0dpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlTm9kZS5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRCZWZvcmUocmVmZXJlbmNlTm9kZS5maXJzdENoaWxkLCBuZXdPYmplY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUucGFyZW50ID0gcmVmZXJlbmNlT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5maXJzdENoaWxkID0gbmV3T2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5sYXN0Q2hpbGQgPSBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLmNoaWxkcmVuQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdPYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5zZXJ0IHRoZSBnaXZlbiBvYmplY3QgYXMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGdpdmVuIHJlZmVyZW5jZSBvYmplY3QuXG4gICAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgbGFzdCBjaGlsZCBvZiBgcmVmZXJlbmNlT2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBhcHBlbmRDaGlsZFxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdPYmplY3RcbiAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBuZXdPYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZVxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IG5ld09iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgYXBwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0LCBuZXdPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VPYmplY3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZS5pc0F0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VOb2RlLmhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydEFmdGVyKHJlZmVyZW5jZU5vZGUubGFzdENoaWxkLCBuZXdPYmplY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUucGFyZW50ID0gcmVmZXJlbmNlT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5maXJzdENoaWxkID0gbmV3T2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5sYXN0Q2hpbGQgPSBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLmNoaWxkcmVuQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdPYmplY3Q7XG4gICAgICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2xUcmVlO1xuU3ltYm9sVHJlZS5UcmVlUG9zaXRpb24gPSBUcmVlUG9zaXRpb247XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgU3ltYm9sVHJlZU5vZGUge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1NpYmxpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dFNpYmxpbmcgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdENoaWxkID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RDaGlsZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAvKiogVGhpcyB2YWx1ZSBpcyBpbmNyZW1lbnRlZCBhbnl0aW1lIGEgY2hpbGRyZW4gaXMgYWRkZWQgb3IgcmVtb3ZlZCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5WZXJzaW9uID0gMDtcbiAgICAgICAgICAgICAgICAvKiogVGhlIGxhc3QgY2hpbGQgb2JqZWN0IHdoaWNoIGhhcyBhIGNhY2hlZCBpbmRleCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgLyoqIFRoaXMgdmFsdWUgcmVwcmVzZW50cyB0aGUgY2FjaGVkIG5vZGUgaW5kZXgsIGFzIGxvbmcgYXNcbiAgICAgICAgICAgICAgICAgKiBjYWNoZWRJbmRleFZlcnNpb24gbWF0Y2hlcyB3aXRoIHRoZSBjaGlsZHJlblZlcnNpb24gb2YgdGhlIHBhcmVudCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjsgLy8gTmFOIGlzIG5ldmVyIGVxdWFsIHRvIGFueXRoaW5nXG4gICAgICAgIH1cblxuICAgICAgICBnZXQgaXNBdHRhY2hlZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcmVudCB8fCB0aGlzLnByZXZpb3VzU2libGluZyB8fCB0aGlzLm5leHRTaWJsaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldCBoYXNDaGlsZHJlbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLmZpcnN0Q2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRyZW5DaGFuZ2VkKCkge1xuICAgICAgICAgICAgICAgIC8qIGpzaGludCAtVzAxNiAqL1xuICAgICAgICAgICAgICAgIC8vIGludGVnZXIgd3JhcCBhcm91bmRcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuVmVyc2lvbiA9ICh0aGlzLmNoaWxkcmVuVmVyc2lvbiArIDEpICYgMHhGRkZGRkZGRjtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkSW5kZXhDYWNoZWRVcFRvID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyAoYXNzdW1lcyBwYXJlbnROb2RlIGlzIGFjdHVhbGx5IHRoZSBwYXJlbnQpXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXhWZXJzaW9uICE9PSBwYXJlbnROb2RlLmNoaWxkcmVuVmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRJbmRleFZlcnNpb24gPSBOYU47XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWNoZWRJbmRleCBpcyBubyBsb25nZXIgdmFsaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRJbmRleDsgLy8gLTEgaWYgbm90IGNhY2hlZFxuICAgICAgICB9XG5cbiAgICAgICAgc2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAvLyAoYXNzdW1lcyBwYXJlbnROb2RlIGlzIGFjdHVhbGx5IHRoZSBwYXJlbnQpXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRJbmRleFZlcnNpb24gPSBwYXJlbnROb2RlLmNoaWxkcmVuVmVyc2lvbjtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFRSRUUgPSBTeW1ib2woKTtcbmNvbnN0IFJPT1QgPSBTeW1ib2woKTtcbmNvbnN0IE5FWFQgPSBTeW1ib2woKTtcbmNvbnN0IElURVJBVEVfRlVOQyA9IFN5bWJvbCgpO1xuXG5jbGFzcyBUcmVlSXRlcmF0b3Ige1xuICAgICAgICBjb25zdHJ1Y3Rvcih0cmVlLCByb290LCBmaXJzdFJlc3VsdCwgaXRlcmF0ZUZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tUUkVFXSA9IHRyZWU7XG4gICAgICAgICAgICAgICAgdGhpc1tST09UXSA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgdGhpc1tORVhUXSA9IGZpcnN0UmVzdWx0O1xuICAgICAgICAgICAgICAgIHRoaXNbSVRFUkFURV9GVU5DXSA9IGl0ZXJhdGVGdW5jdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJlZSA9IHRoaXNbVFJFRV07XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlcmF0ZUZ1bmMgPSB0aGlzW0lURVJBVEVfRlVOQ107XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXNbUk9PVF07XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNbTkVYVF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByb290LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbTkVYVF07XG5cbiAgICAgICAgICAgICAgICBpZiAoaXRlcmF0ZUZ1bmMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlKS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZXJhdGVGdW5jID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW05FWFRdID0gdHJlZS5fbm9kZSh2YWx1ZSkubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZXJhdGVGdW5jID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW05FWFRdID0gdHJlZS5fbm9kZSh2YWx1ZSkucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpdGVyYXRlRnVuYyA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUucHJlY2VkaW5nKHZhbHVlLCB7cm9vdDogcm9vdH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIC8qIGlmIChpdGVyYXRlRnVuYyA9PT0gNSkqLyB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW05FWFRdID0gdHJlZS5mb2xsb3dpbmcodmFsdWUsIHtyb290OiByb290fSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRyZWVJdGVyYXRvci5wcm90b3R5cGUsIFN5bWJvbC5pdGVyYXRvciwge1xuICAgICAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbn0pO1xuXG5UcmVlSXRlcmF0b3IuUFJFViA9IDE7XG5UcmVlSXRlcmF0b3IuTkVYVCA9IDI7XG5UcmVlSXRlcmF0b3IuUEFSRU5UID0gMztcblRyZWVJdGVyYXRvci5QUkVDRURJTkcgPSA0O1xuVHJlZUl0ZXJhdG9yLkZPTExPV0lORyA9IDU7XG5cbk9iamVjdC5mcmVlemUoVHJlZUl0ZXJhdG9yKTtcbk9iamVjdC5mcmVlemUoVHJlZUl0ZXJhdG9yLnByb3RvdHlwZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gVHJlZUl0ZXJhdG9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWtleXMgKi9cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIC8vIHNhbWUgYXMgRE9NIERPQ1VNRU5UX1BPU0lUSU9OX1xuICAgICAgICBESVNDT05ORUNURUQ6IDEsXG4gICAgICAgIFBSRUNFRElORzogMixcbiAgICAgICAgRk9MTE9XSU5HOiA0LFxuICAgICAgICBDT05UQUlOUzogOCxcbiAgICAgICAgQ09OVEFJTkVEX0JZOiAxNixcbn0pO1xuIiwidmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChidWYpIHtcblx0Ly8gSWYgdGhlIGJ1ZmZlciBpcyBiYWNrZWQgYnkgYSBVaW50OEFycmF5LCBhIGZhc3RlciB2ZXJzaW9uIHdpbGwgd29ya1xuXHRpZiAoYnVmIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuXHRcdC8vIElmIHRoZSBidWZmZXIgaXNuJ3QgYSBzdWJhcnJheSwgcmV0dXJuIHRoZSB1bmRlcmx5aW5nIEFycmF5QnVmZmVyXG5cdFx0aWYgKGJ1Zi5ieXRlT2Zmc2V0ID09PSAwICYmIGJ1Zi5ieXRlTGVuZ3RoID09PSBidWYuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcblx0XHRcdHJldHVybiBidWYuYnVmZmVyXG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgYnVmLmJ1ZmZlci5zbGljZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gZ2V0IGEgcHJvcGVyIGNvcHlcblx0XHRcdHJldHVybiBidWYuYnVmZmVyLnNsaWNlKGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZU9mZnNldCArIGJ1Zi5ieXRlTGVuZ3RoKVxuXHRcdH1cblx0fVxuXG5cdGlmIChCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuXHRcdC8vIFRoaXMgaXMgdGhlIHNsb3cgdmVyc2lvbiB0aGF0IHdpbGwgd29yayB3aXRoIGFueSBCdWZmZXJcblx0XHQvLyBpbXBsZW1lbnRhdGlvbiAoZXZlbiBpbiBvbGQgYnJvd3NlcnMpXG5cdFx0dmFyIGFycmF5Q29weSA9IG5ldyBVaW50OEFycmF5KGJ1Zi5sZW5ndGgpXG5cdFx0dmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRhcnJheUNvcHlbaV0gPSBidWZbaV1cblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5Q29weS5idWZmZXJcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuXHR9XG59XG4iLCIvKiFcbiAqIENvcHlyaWdodCAoYykgMjAxNSwgU2FsZXNmb3JjZS5jb20sIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgU2FsZXNmb3JjZS5jb20gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heVxuICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dFxuICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRVxuICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUlxuICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0ZcbiAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTU1xuICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU5cbiAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpXG4gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRVxuICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cbid1c2Ugc3RyaWN0JztcbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB1cmxQYXJzZSA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlO1xudmFyIHB1YnN1ZmZpeCA9IHJlcXVpcmUoJy4vcHVic3VmZml4Jyk7XG52YXIgU3RvcmUgPSByZXF1aXJlKCcuL3N0b3JlJykuU3RvcmU7XG52YXIgTWVtb3J5Q29va2llU3RvcmUgPSByZXF1aXJlKCcuL21lbXN0b3JlJykuTWVtb3J5Q29va2llU3RvcmU7XG52YXIgcGF0aE1hdGNoID0gcmVxdWlyZSgnLi9wYXRoTWF0Y2gnKS5wYXRoTWF0Y2g7XG52YXIgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG5cbnZhciBwdW55Y29kZTtcbnRyeSB7XG4gIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcbn0gY2F0Y2goZSkge1xuICBjb25zb2xlLndhcm4oXCJjb29raWU6IGNhbid0IGxvYWQgcHVueWNvZGU7IHdvbid0IHVzZSBwdW55Y29kZSBmb3IgZG9tYWluIG5vcm1hbGl6YXRpb25cIik7XG59XG5cbnZhciBEQVRFX0RFTElNID0gL1tcXHgwOVxceDIwLVxceDJGXFx4M0ItXFx4NDBcXHg1Qi1cXHg2MFxceDdCLVxceDdFXS87XG5cbi8vIEZyb20gUkZDNjI2NSBTNC4xLjFcbi8vIG5vdGUgdGhhdCBpdCBleGNsdWRlcyBcXHgzQiBcIjtcIlxudmFyIENPT0tJRV9PQ1RFVCAgPSAvW1xceDIxXFx4MjMtXFx4MkJcXHgyRC1cXHgzQVxceDNDLVxceDVCXFx4NUQtXFx4N0VdLztcbnZhciBDT09LSUVfT0NURVRTID0gbmV3IFJlZ0V4cCgnXicrQ09PS0lFX09DVEVULnNvdXJjZSsnKyQnKTtcblxudmFyIENPTlRST0xfQ0hBUlMgPSAvW1xceDAwLVxceDFGXS87XG5cbi8vIERvdWJsZSBxdW90ZXMgYXJlIHBhcnQgb2YgdGhlIHZhbHVlIChzZWU6IFM0LjEuMSkuXG4vLyAnXFxyJywgJ1xcbicgYW5kICdcXDAnIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgdGVybWluYXRvciBpbiB0aGUgXCJyZWxheGVkXCIgbW9kZVxuLy8gKHNlZTogaHR0cHM6Ly9naXRodWIuY29tL0Nocm9taXVtV2ViQXBwcy9jaHJvbWl1bS9ibG9iL2IzZDNiNGRhOGJiOTRjMWIyZTA2MTYwMGRmMTA2ZDU5MGZkYTM2MjAvbmV0L2Nvb2tpZXMvcGFyc2VkX2Nvb2tpZS5jYyNMNjApXG4vLyAnPScgYW5kICc7JyBhcmUgYXR0cmlidXRlL3ZhbHVlcyBzZXBhcmF0b3JzXG4vLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vQ2hyb21pdW1XZWJBcHBzL2Nocm9taXVtL2Jsb2IvYjNkM2I0ZGE4YmI5NGMxYjJlMDYxNjAwZGYxMDZkNTkwZmRhMzYyMC9uZXQvY29va2llcy9wYXJzZWRfY29va2llLmNjI0w2NClcbnZhciBDT09LSUVfUEFJUiA9IC9eKChbXj07XSspKVxccyo9XFxzKihbXlxcblxcclxcMF0qKS87XG5cbi8vIFVzZWQgdG8gcGFyc2Ugbm9uLVJGQy1jb21wbGlhbnQgY29va2llcyBsaWtlICc9YWJjJyB3aGVuIGdpdmVuIHRoZSBgbG9vc2VgXG4vLyBvcHRpb24gaW4gQ29va2llLnBhcnNlOlxudmFyIExPT1NFX0NPT0tJRV9QQUlSID0gL14oKD86PSk/KFtePTtdKilcXHMqPVxccyopPyhbXlxcblxcclxcMF0qKS87XG5cbi8vIFJGQzYyNjUgUzQuMS4xIGRlZmluZXMgcGF0aCB2YWx1ZSBhcyAnYW55IENIQVIgZXhjZXB0IENUTHMgb3IgXCI7XCInXG4vLyBOb3RlICc7JyBpcyBcXHgzQlxudmFyIFBBVEhfVkFMVUUgPSAvW1xceDIwLVxceDNBXFx4M0MtXFx4N0VdKy87XG5cbnZhciBEQVlfT0ZfTU9OVEggPSAvXihcXGR7MSwyfSlbXlxcZF0qJC87XG52YXIgVElNRSA9IC9eKFxcZHsxLDJ9KVteXFxkXSo6KFxcZHsxLDJ9KVteXFxkXSo6KFxcZHsxLDJ9KVteXFxkXSokLztcbnZhciBNT05USCA9IC9eKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS9pO1xuXG52YXIgTU9OVEhfVE9fTlVNID0ge1xuICBqYW46MCwgZmViOjEsIG1hcjoyLCBhcHI6MywgbWF5OjQsIGp1bjo1LFxuICBqdWw6NiwgYXVnOjcsIHNlcDo4LCBvY3Q6OSwgbm92OjEwLCBkZWM6MTFcbn07XG52YXIgTlVNX1RPX01PTlRIID0gW1xuICAnSmFuJywnRmViJywnTWFyJywnQXByJywnTWF5JywnSnVuJywnSnVsJywnQXVnJywnU2VwJywnT2N0JywnTm92JywnRGVjJ1xuXTtcbnZhciBOVU1fVE9fREFZID0gW1xuICAnU3VuJywnTW9uJywnVHVlJywnV2VkJywnVGh1JywnRnJpJywnU2F0J1xuXTtcblxudmFyIFlFQVIgPSAvXihcXGR7Mn18XFxkezR9KSQvOyAvLyAyIHRvIDQgZGlnaXRzXG5cbnZhciBNQVhfVElNRSA9IDIxNDc0ODM2NDcwMDA7IC8vIDMxLWJpdCBtYXhcbnZhciBNSU5fVElNRSA9IDA7IC8vIDMxLWJpdCBtaW5cblxuXG4vLyBSRkM2MjY1IFM1LjEuMSBkYXRlIHBhcnNlcjpcbmZ1bmN0aW9uIHBhcnNlRGF0ZShzdHIpIHtcbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKiBSRkM2MjY1IFM1LjEuMTpcbiAgICogMi4gUHJvY2VzcyBlYWNoIGRhdGUtdG9rZW4gc2VxdWVudGlhbGx5IGluIHRoZSBvcmRlciB0aGUgZGF0ZS10b2tlbnNcbiAgICogYXBwZWFyIGluIHRoZSBjb29raWUtZGF0ZVxuICAgKi9cbiAgdmFyIHRva2VucyA9IHN0ci5zcGxpdChEQVRFX0RFTElNKTtcbiAgaWYgKCF0b2tlbnMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgaG91ciA9IG51bGw7XG4gIHZhciBtaW51dGVzID0gbnVsbDtcbiAgdmFyIHNlY29uZHMgPSBudWxsO1xuICB2YXIgZGF5ID0gbnVsbDtcbiAgdmFyIG1vbnRoID0gbnVsbDtcbiAgdmFyIHllYXIgPSBudWxsO1xuXG4gIGZvciAodmFyIGk9MDsgaTx0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV0udHJpbSgpO1xuICAgIGlmICghdG9rZW4ubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0O1xuXG4gICAgLyogMi4xLiBJZiB0aGUgZm91bmQtdGltZSBmbGFnIGlzIG5vdCBzZXQgYW5kIHRoZSB0b2tlbiBtYXRjaGVzIHRoZSB0aW1lXG4gICAgICogcHJvZHVjdGlvbiwgc2V0IHRoZSBmb3VuZC10aW1lIGZsYWcgYW5kIHNldCB0aGUgaG91ci0gdmFsdWUsXG4gICAgICogbWludXRlLXZhbHVlLCBhbmQgc2Vjb25kLXZhbHVlIHRvIHRoZSBudW1iZXJzIGRlbm90ZWQgYnkgdGhlIGRpZ2l0cyBpblxuICAgICAqIHRoZSBkYXRlLXRva2VuLCByZXNwZWN0aXZlbHkuICBTa2lwIHRoZSByZW1haW5pbmcgc3ViLXN0ZXBzIGFuZCBjb250aW51ZVxuICAgICAqIHRvIHRoZSBuZXh0IGRhdGUtdG9rZW4uXG4gICAgICovXG4gICAgaWYgKHNlY29uZHMgPT09IG51bGwpIHtcbiAgICAgIHJlc3VsdCA9IFRJTUUuZXhlYyh0b2tlbik7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGhvdXIgPSBwYXJzZUludChyZXN1bHRbMV0sIDEwKTtcbiAgICAgICAgbWludXRlcyA9IHBhcnNlSW50KHJlc3VsdFsyXSwgMTApO1xuICAgICAgICBzZWNvbmRzID0gcGFyc2VJbnQocmVzdWx0WzNdLCAxMCk7XG4gICAgICAgIC8qIFJGQzYyNjUgUzUuMS4xLjU6XG4gICAgICAgICAqIFtmYWlsIGlmXVxuICAgICAgICAgKiAqICB0aGUgaG91ci12YWx1ZSBpcyBncmVhdGVyIHRoYW4gMjMsXG4gICAgICAgICAqICogIHRoZSBtaW51dGUtdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDU5LCBvclxuICAgICAgICAgKiAqICB0aGUgc2Vjb25kLXZhbHVlIGlzIGdyZWF0ZXIgdGhhbiA1OS5cbiAgICAgICAgICovXG4gICAgICAgIGlmKGhvdXIgPiAyMyB8fCBtaW51dGVzID4gNTkgfHwgc2Vjb25kcyA+IDU5KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogMi4yLiBJZiB0aGUgZm91bmQtZGF5LW9mLW1vbnRoIGZsYWcgaXMgbm90IHNldCBhbmQgdGhlIGRhdGUtdG9rZW4gbWF0Y2hlc1xuICAgICAqIHRoZSBkYXktb2YtbW9udGggcHJvZHVjdGlvbiwgc2V0IHRoZSBmb3VuZC1kYXktb2YtIG1vbnRoIGZsYWcgYW5kIHNldFxuICAgICAqIHRoZSBkYXktb2YtbW9udGgtdmFsdWUgdG8gdGhlIG51bWJlciBkZW5vdGVkIGJ5IHRoZSBkYXRlLXRva2VuLiAgU2tpcFxuICAgICAqIHRoZSByZW1haW5pbmcgc3ViLXN0ZXBzIGFuZCBjb250aW51ZSB0byB0aGUgbmV4dCBkYXRlLXRva2VuLlxuICAgICAqL1xuICAgIGlmIChkYXkgPT09IG51bGwpIHtcbiAgICAgIHJlc3VsdCA9IERBWV9PRl9NT05USC5leGVjKHRva2VuKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgZGF5ID0gcGFyc2VJbnQocmVzdWx0LCAxMCk7XG4gICAgICAgIC8qIFJGQzYyNjUgUzUuMS4xLjU6XG4gICAgICAgICAqIFtmYWlsIGlmXSB0aGUgZGF5LW9mLW1vbnRoLXZhbHVlIGlzIGxlc3MgdGhhbiAxIG9yIGdyZWF0ZXIgdGhhbiAzMVxuICAgICAgICAgKi9cbiAgICAgICAgaWYoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiAyLjMuIElmIHRoZSBmb3VuZC1tb250aCBmbGFnIGlzIG5vdCBzZXQgYW5kIHRoZSBkYXRlLXRva2VuIG1hdGNoZXMgdGhlXG4gICAgICogbW9udGggcHJvZHVjdGlvbiwgc2V0IHRoZSBmb3VuZC1tb250aCBmbGFnIGFuZCBzZXQgdGhlIG1vbnRoLXZhbHVlIHRvXG4gICAgICogdGhlIG1vbnRoIGRlbm90ZWQgYnkgdGhlIGRhdGUtdG9rZW4uICBTa2lwIHRoZSByZW1haW5pbmcgc3ViLXN0ZXBzIGFuZFxuICAgICAqIGNvbnRpbnVlIHRvIHRoZSBuZXh0IGRhdGUtdG9rZW4uXG4gICAgICovXG4gICAgaWYgKG1vbnRoID09PSBudWxsKSB7XG4gICAgICByZXN1bHQgPSBNT05USC5leGVjKHRva2VuKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgbW9udGggPSBNT05USF9UT19OVU1bcmVzdWx0WzFdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiAyLjQuIElmIHRoZSBmb3VuZC15ZWFyIGZsYWcgaXMgbm90IHNldCBhbmQgdGhlIGRhdGUtdG9rZW4gbWF0Y2hlcyB0aGUgeWVhclxuICAgICAqIHByb2R1Y3Rpb24sIHNldCB0aGUgZm91bmQteWVhciBmbGFnIGFuZCBzZXQgdGhlIHllYXItdmFsdWUgdG8gdGhlIG51bWJlclxuICAgICAqIGRlbm90ZWQgYnkgdGhlIGRhdGUtdG9rZW4uICBTa2lwIHRoZSByZW1haW5pbmcgc3ViLXN0ZXBzIGFuZCBjb250aW51ZSB0b1xuICAgICAqIHRoZSBuZXh0IGRhdGUtdG9rZW4uXG4gICAgICovXG4gICAgaWYgKHllYXIgPT09IG51bGwpIHtcbiAgICAgIHJlc3VsdCA9IFlFQVIuZXhlYyh0b2tlbik7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHllYXIgPSBwYXJzZUludChyZXN1bHRbMF0sIDEwKTtcbiAgICAgICAgLyogRnJvbSBTNS4xLjE6XG4gICAgICAgICAqIDMuICBJZiB0aGUgeWVhci12YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gNzAgYW5kIGxlc3NcbiAgICAgICAgICogdGhhbiBvciBlcXVhbCB0byA5OSwgaW5jcmVtZW50IHRoZSB5ZWFyLXZhbHVlIGJ5IDE5MDAuXG4gICAgICAgICAqIDQuICBJZiB0aGUgeWVhci12YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCBhbmQgbGVzc1xuICAgICAgICAgKiB0aGFuIG9yIGVxdWFsIHRvIDY5LCBpbmNyZW1lbnQgdGhlIHllYXItdmFsdWUgYnkgMjAwMC5cbiAgICAgICAgICovXG4gICAgICAgIGlmICg3MCA8PSB5ZWFyICYmIHllYXIgPD0gOTkpIHtcbiAgICAgICAgICB5ZWFyICs9IDE5MDA7XG4gICAgICAgIH0gZWxzZSBpZiAoMCA8PSB5ZWFyICYmIHllYXIgPD0gNjkpIHtcbiAgICAgICAgICB5ZWFyICs9IDIwMDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeWVhciA8IDE2MDEpIHtcbiAgICAgICAgICByZXR1cm47IC8vIDUuIC4uLiB0aGUgeWVhci12YWx1ZSBpcyBsZXNzIHRoYW4gMTYwMVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHNlY29uZHMgPT09IG51bGwgfHwgZGF5ID09PSBudWxsIHx8IG1vbnRoID09PSBudWxsIHx8IHllYXIgPT09IG51bGwpIHtcbiAgICByZXR1cm47IC8vIDUuIC4uLiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvdW5kLWRheS1vZi1tb250aCwgZm91bmQtbW9udGgsIGZvdW5kLVxuICAgICAgICAgICAgLy8geWVhciwgb3IgZm91bmQtdGltZSBmbGFncyBpcyBub3Qgc2V0LFxuICB9XG5cbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZXMsIHNlY29uZHMpKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlKSB7XG4gIHZhciBkID0gZGF0ZS5nZXRVVENEYXRlKCk7IGQgPSBkID49IDEwID8gZCA6ICcwJytkO1xuICB2YXIgaCA9IGRhdGUuZ2V0VVRDSG91cnMoKTsgaCA9IGggPj0gMTAgPyBoIDogJzAnK2g7XG4gIHZhciBtID0gZGF0ZS5nZXRVVENNaW51dGVzKCk7IG0gPSBtID49IDEwID8gbSA6ICcwJyttO1xuICB2YXIgcyA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpOyBzID0gcyA+PSAxMCA/IHMgOiAnMCcrcztcbiAgcmV0dXJuIE5VTV9UT19EQVlbZGF0ZS5nZXRVVENEYXkoKV0gKyAnLCAnICtcbiAgICBkKycgJysgTlVNX1RPX01PTlRIW2RhdGUuZ2V0VVRDTW9udGgoKV0gKycgJysgZGF0ZS5nZXRVVENGdWxsWWVhcigpICsnICcrXG4gICAgaCsnOicrbSsnOicrcysnIEdNVCc7XG59XG5cbi8vIFM1LjEuMiBDYW5vbmljYWxpemVkIEhvc3QgTmFtZXNcbmZ1bmN0aW9uIGNhbm9uaWNhbERvbWFpbihzdHIpIHtcbiAgaWYgKHN0ciA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKC9eXFwuLywnJyk7IC8vIFM0LjEuMi4zICYgUzUuMi4zOiBpZ25vcmUgbGVhZGluZyAuXG5cbiAgLy8gY29udmVydCB0byBJRE4gaWYgYW55IG5vbi1BU0NJSSBjaGFyYWN0ZXJzXG4gIGlmIChwdW55Y29kZSAmJiAvW15cXHUwMDAxLVxcdTAwN2ZdLy50ZXN0KHN0cikpIHtcbiAgICBzdHIgPSBwdW55Y29kZS50b0FTQ0lJKHN0cik7XG4gIH1cblxuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8vIFM1LjEuMyBEb21haW4gTWF0Y2hpbmdcbmZ1bmN0aW9uIGRvbWFpbk1hdGNoKHN0ciwgZG9tU3RyLCBjYW5vbmljYWxpemUpIHtcbiAgaWYgKHN0ciA9PSBudWxsIHx8IGRvbVN0ciA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGNhbm9uaWNhbGl6ZSAhPT0gZmFsc2UpIHtcbiAgICBzdHIgPSBjYW5vbmljYWxEb21haW4oc3RyKTtcbiAgICBkb21TdHIgPSBjYW5vbmljYWxEb21haW4oZG9tU3RyKTtcbiAgfVxuXG4gIC8qXG4gICAqIFwiVGhlIGRvbWFpbiBzdHJpbmcgYW5kIHRoZSBzdHJpbmcgYXJlIGlkZW50aWNhbC4gKE5vdGUgdGhhdCBib3RoIHRoZVxuICAgKiBkb21haW4gc3RyaW5nIGFuZCB0aGUgc3RyaW5nIHdpbGwgaGF2ZSBiZWVuIGNhbm9uaWNhbGl6ZWQgdG8gbG93ZXIgY2FzZSBhdFxuICAgKiB0aGlzIHBvaW50KVwiXG4gICAqL1xuICBpZiAoc3RyID09IGRvbVN0cikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyogXCJBbGwgb2YgdGhlIGZvbGxvd2luZyBbdGhyZWVdIGNvbmRpdGlvbnMgaG9sZDpcIiAob3JkZXIgYWRqdXN0ZWQgZnJvbSB0aGUgUkZDKSAqL1xuXG4gIC8qIFwiKiBUaGUgc3RyaW5nIGlzIGEgaG9zdCBuYW1lIChpLmUuLCBub3QgYW4gSVAgYWRkcmVzcykuXCIgKi9cbiAgaWYgKG5ldC5pc0lQKHN0cikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiBcIiogVGhlIGRvbWFpbiBzdHJpbmcgaXMgYSBzdWZmaXggb2YgdGhlIHN0cmluZ1wiICovXG4gIHZhciBpZHggPSBzdHIuaW5kZXhPZihkb21TdHIpO1xuICBpZiAoaWR4IDw9IDApIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIGl0J3MgYSBub24tbWF0Y2ggKC0xKSBvciBwcmVmaXggKDApXG4gIH1cblxuICAvLyBlLmcgXCJhLmIuY1wiLmluZGV4T2YoXCJiLmNcIikgPT09IDJcbiAgLy8gNSA9PT0gMysyXG4gIGlmIChzdHIubGVuZ3RoICE9PSBkb21TdHIubGVuZ3RoICsgaWR4KSB7IC8vIGl0J3Mgbm90IGEgc3VmZml4XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyogXCIqIFRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIHRoYXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBkb21haW5cbiAgKiBzdHJpbmcgaXMgYSAleDJFIChcIi5cIikgY2hhcmFjdGVyLlwiICovXG4gIGlmIChzdHIuc3Vic3RyKGlkeC0xLDEpICE9PSAnLicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuXG4vLyBSRkM2MjY1IFM1LjEuNCBQYXRocyBhbmQgUGF0aC1NYXRjaFxuXG4vKlxuICogXCJUaGUgdXNlciBhZ2VudCBNVVNUIHVzZSBhbiBhbGdvcml0aG0gZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIGFsZ29yaXRobVxuICogdG8gY29tcHV0ZSB0aGUgZGVmYXVsdC1wYXRoIG9mIGEgY29va2llOlwiXG4gKlxuICogQXNzdW1wdGlvbjogdGhlIHBhdGggKGFuZCBub3QgcXVlcnkgcGFydCBvciBhYnNvbHV0ZSB1cmkpIGlzIHBhc3NlZCBpbi5cbiAqL1xuZnVuY3Rpb24gZGVmYXVsdFBhdGgocGF0aCkge1xuICAvLyBcIjIuIElmIHRoZSB1cmktcGF0aCBpcyBlbXB0eSBvciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSB1cmktcGF0aCBpcyBub3RcbiAgLy8gYSAleDJGIChcIi9cIikgY2hhcmFjdGVyLCBvdXRwdXQgJXgyRiAoXCIvXCIpIGFuZCBza2lwIHRoZSByZW1haW5pbmcgc3RlcHMuXG4gIGlmICghcGF0aCB8fCBwYXRoLnN1YnN0cigwLDEpICE9PSBcIi9cIikge1xuICAgIHJldHVybiBcIi9cIjtcbiAgfVxuXG4gIC8vIFwiMy4gSWYgdGhlIHVyaS1wYXRoIGNvbnRhaW5zIG5vIG1vcmUgdGhhbiBvbmUgJXgyRiAoXCIvXCIpIGNoYXJhY3Rlciwgb3V0cHV0XG4gIC8vICV4MkYgKFwiL1wiKSBhbmQgc2tpcCB0aGUgcmVtYWluaW5nIHN0ZXAuXCJcbiAgaWYgKHBhdGggPT09IFwiL1wiKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICB2YXIgcmlnaHRTbGFzaCA9IHBhdGgubGFzdEluZGV4T2YoXCIvXCIpO1xuICBpZiAocmlnaHRTbGFzaCA9PT0gMCkge1xuICAgIHJldHVybiBcIi9cIjtcbiAgfVxuXG4gIC8vIFwiNC4gT3V0cHV0IHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSB1cmktcGF0aCBmcm9tIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdXAgdG8sXG4gIC8vIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgcmlnaHQtbW9zdCAleDJGIChcIi9cIikuXCJcbiAgcmV0dXJuIHBhdGguc2xpY2UoMCwgcmlnaHRTbGFzaCk7XG59XG5cblxuZnVuY3Rpb24gcGFyc2Uoc3RyLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgc3RyID0gc3RyLnRyaW0oKTtcblxuICAvLyBXZSB1c2UgYSByZWdleCB0byBwYXJzZSB0aGUgXCJuYW1lLXZhbHVlLXBhaXJcIiBwYXJ0IG9mIFM1LjJcbiAgdmFyIGZpcnN0U2VtaSA9IHN0ci5pbmRleE9mKCc7Jyk7IC8vIFM1LjIgc3RlcCAxXG4gIHZhciBwYWlyUmUgPSBvcHRpb25zLmxvb3NlID8gTE9PU0VfQ09PS0lFX1BBSVIgOiBDT09LSUVfUEFJUjtcbiAgdmFyIHJlc3VsdCA9IHBhaXJSZS5leGVjKGZpcnN0U2VtaSA9PT0gLTEgPyBzdHIgOiBzdHIuc3Vic3RyKDAsZmlyc3RTZW1pKSk7XG5cbiAgLy8gUnggc2F0aXNmaWVzIHRoZSBcInRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eVwiIGFuZCBcImxhY2tzIGEgJXgzRCAoXCI9XCIpXCJcbiAgLy8gY29uc3RyYWludHMgYXMgd2VsbCBhcyB0cmltbWluZyBhbnkgd2hpdGVzcGFjZS5cbiAgaWYgKCFyZXN1bHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYyA9IG5ldyBDb29raWUoKTtcbiAgaWYgKHJlc3VsdFsxXSkge1xuICAgIGMua2V5ID0gcmVzdWx0WzJdLnRyaW0oKTtcbiAgfSBlbHNlIHtcbiAgICBjLmtleSA9ICcnO1xuICB9XG4gIGMudmFsdWUgPSByZXN1bHRbM10udHJpbSgpO1xuICBpZiAoQ09OVFJPTF9DSEFSUy50ZXN0KGMua2V5KSB8fCBDT05UUk9MX0NIQVJTLnRlc3QoYy52YWx1ZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZmlyc3RTZW1pID09PSAtMSkge1xuICAgIHJldHVybiBjO1xuICB9XG5cbiAgLy8gUzUuMi4zIFwidW5wYXJzZWQtYXR0cmlidXRlcyBjb25zaXN0IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHNldC1jb29raWUtc3RyaW5nXG4gIC8vIChpbmNsdWRpbmcgdGhlICV4M0IgKFwiO1wiKSBpbiBxdWVzdGlvbikuXCIgcGx1cyBsYXRlciBvbiBpbiB0aGUgc2FtZSBzZWN0aW9uXG4gIC8vIFwiZGlzY2FyZCB0aGUgZmlyc3QgXCI7XCIgYW5kIHRyaW1cIi5cbiAgdmFyIHVucGFyc2VkID0gc3RyLnNsaWNlKGZpcnN0U2VtaSArIDEpLnRyaW0oKTtcblxuICAvLyBcIklmIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzIHN0cmluZyBpcyBlbXB0eSwgc2tpcCB0aGUgcmVzdCBvZiB0aGVzZVxuICAvLyBzdGVwcy5cIlxuICBpZiAodW5wYXJzZWQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGM7XG4gIH1cblxuICAvKlxuICAgKiBTNS4yIHNheXMgdGhhdCB3aGVuIGxvb3Bpbmcgb3ZlciB0aGUgaXRlbXMgXCJbcF1yb2Nlc3MgdGhlIGF0dHJpYnV0ZS1uYW1lXG4gICAqIGFuZCBhdHRyaWJ1dGUtdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSByZXF1aXJlbWVudHMgaW4gdGhlIGZvbGxvd2luZ1xuICAgKiBzdWJzZWN0aW9uc1wiIGZvciBldmVyeSBpdGVtLiAgUGx1cywgZm9yIG1hbnkgb2YgdGhlIGluZGl2aWR1YWwgYXR0cmlidXRlc1xuICAgKiBpbiBTNS4zIGl0IHNheXMgdG8gdXNlIHRoZSBcImF0dHJpYnV0ZS12YWx1ZSBvZiB0aGUgbGFzdCBhdHRyaWJ1dGUgaW4gdGhlXG4gICAqIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdFwiLiAgVGhlcmVmb3JlLCBpbiB0aGlzIGltcGxlbWVudGF0aW9uLCB3ZSBvdmVyd3JpdGVcbiAgICogdGhlIHByZXZpb3VzIHZhbHVlLlxuICAgKi9cbiAgdmFyIGNvb2tpZV9hdnMgPSB1bnBhcnNlZC5zcGxpdCgnOycpO1xuICB3aGlsZSAoY29va2llX2F2cy5sZW5ndGgpIHtcbiAgICB2YXIgYXYgPSBjb29raWVfYXZzLnNoaWZ0KCkudHJpbSgpO1xuICAgIGlmIChhdi5sZW5ndGggPT09IDApIHsgLy8gaGFwcGVucyBpZiBcIjs7XCIgYXBwZWFyc1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBhdl9zZXAgPSBhdi5pbmRleE9mKCc9Jyk7XG4gICAgdmFyIGF2X2tleSwgYXZfdmFsdWU7XG5cbiAgICBpZiAoYXZfc2VwID09PSAtMSkge1xuICAgICAgYXZfa2V5ID0gYXY7XG4gICAgICBhdl92YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF2X2tleSA9IGF2LnN1YnN0cigwLGF2X3NlcCk7XG4gICAgICBhdl92YWx1ZSA9IGF2LnN1YnN0cihhdl9zZXArMSk7XG4gICAgfVxuXG4gICAgYXZfa2V5ID0gYXZfa2V5LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGF2X3ZhbHVlKSB7XG4gICAgICBhdl92YWx1ZSA9IGF2X3ZhbHVlLnRyaW0oKTtcbiAgICB9XG5cbiAgICBzd2l0Y2goYXZfa2V5KSB7XG4gICAgY2FzZSAnZXhwaXJlcyc6IC8vIFM1LjIuMVxuICAgICAgaWYgKGF2X3ZhbHVlKSB7XG4gICAgICAgIHZhciBleHAgPSBwYXJzZURhdGUoYXZfdmFsdWUpO1xuICAgICAgICAvLyBcIklmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgZmFpbGVkIHRvIHBhcnNlIGFzIGEgY29va2llIGRhdGUsIGlnbm9yZSB0aGVcbiAgICAgICAgLy8gY29va2llLWF2LlwiXG4gICAgICAgIGlmIChleHApIHtcbiAgICAgICAgICAvLyBvdmVyIGFuZCB1bmRlcmZsb3cgbm90IHJlYWxpc3RpY2FsbHkgYSBjb25jZXJuOiBWOCdzIGdldFRpbWUoKSBzZWVtcyB0b1xuICAgICAgICAgIC8vIHN0b3JlIHNvbWV0aGluZyBsYXJnZXIgdGhhbiBhIDMyLWJpdCB0aW1lX3QgKGV2ZW4gd2l0aCAzMi1iaXQgbm9kZSlcbiAgICAgICAgICBjLmV4cGlyZXMgPSBleHA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnbWF4LWFnZSc6IC8vIFM1LjIuMlxuICAgICAgaWYgKGF2X3ZhbHVlKSB7XG4gICAgICAgIC8vIFwiSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCBhIERJR0lUIG9yIGEgXCItXCJcbiAgICAgICAgLy8gY2hhcmFjdGVyIC4uLltvcl0uLi4gSWYgdGhlIHJlbWFpbmRlciBvZiBhdHRyaWJ1dGUtdmFsdWUgY29udGFpbnMgYVxuICAgICAgICAvLyBub24tRElHSVQgY2hhcmFjdGVyLCBpZ25vcmUgdGhlIGNvb2tpZS1hdi5cIlxuICAgICAgICBpZiAoL14tP1swLTldKyQvLnRlc3QoYXZfdmFsdWUpKSB7XG4gICAgICAgICAgdmFyIGRlbHRhID0gcGFyc2VJbnQoYXZfdmFsdWUsIDEwKTtcbiAgICAgICAgICAvLyBcIklmIGRlbHRhLXNlY29uZHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gKDApLCBsZXQgZXhwaXJ5LXRpbWVcbiAgICAgICAgICAvLyBiZSB0aGUgZWFybGllc3QgcmVwcmVzZW50YWJsZSBkYXRlIGFuZCB0aW1lLlwiXG4gICAgICAgICAgYy5zZXRNYXhBZ2UoZGVsdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RvbWFpbic6IC8vIFM1LjIuM1xuICAgICAgLy8gXCJJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGVtcHR5LCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLiAgSG93ZXZlcixcbiAgICAgIC8vIHRoZSB1c2VyIGFnZW50IFNIT1VMRCBpZ25vcmUgdGhlIGNvb2tpZS1hdiBlbnRpcmVseS5cIlxuICAgICAgaWYgKGF2X3ZhbHVlKSB7XG4gICAgICAgIC8vIFM1LjIuMyBcIkxldCBjb29raWUtZG9tYWluIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUgd2l0aG91dCB0aGUgbGVhZGluZyAleDJFXG4gICAgICAgIC8vIChcIi5cIikgY2hhcmFjdGVyLlwiXG4gICAgICAgIHZhciBkb21haW4gPSBhdl92YWx1ZS50cmltKCkucmVwbGFjZSgvXlxcLi8sICcnKTtcbiAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgIC8vIFwiQ29udmVydCB0aGUgY29va2llLWRvbWFpbiB0byBsb3dlciBjYXNlLlwiXG4gICAgICAgICAgYy5kb21haW4gPSBkb21haW4udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwYXRoJzogLy8gUzUuMi40XG4gICAgICAvKlxuICAgICAgICogXCJJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGVtcHR5IG9yIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlXG4gICAgICAgKiBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKFwiL1wiKTpcbiAgICAgICAqICAgTGV0IGNvb2tpZS1wYXRoIGJlIHRoZSBkZWZhdWx0LXBhdGguXG4gICAgICAgKiBPdGhlcndpc2U6XG4gICAgICAgKiAgIExldCBjb29raWUtcGF0aCBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlwiXG4gICAgICAgKlxuICAgICAgICogV2UnbGwgcmVwcmVzZW50IHRoZSBkZWZhdWx0LXBhdGggYXMgbnVsbCBzaW5jZSBpdCBkZXBlbmRzIG9uIHRoZVxuICAgICAgICogY29udGV4dCBvZiB0aGUgcGFyc2luZy5cbiAgICAgICAqL1xuICAgICAgYy5wYXRoID0gYXZfdmFsdWUgJiYgYXZfdmFsdWVbMF0gPT09IFwiL1wiID8gYXZfdmFsdWUgOiBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWN1cmUnOiAvLyBTNS4yLjVcbiAgICAgIC8qXG4gICAgICAgKiBcIklmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiU2VjdXJlXCIsXG4gICAgICAgKiB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdFxuICAgICAgICogd2l0aCBhbiBhdHRyaWJ1dGUtbmFtZSBvZiBTZWN1cmUgYW5kIGFuIGVtcHR5IGF0dHJpYnV0ZS12YWx1ZS5cIlxuICAgICAgICovXG4gICAgICBjLnNlY3VyZSA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2h0dHBvbmx5JzogLy8gUzUuMi42IC0tIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIGFzICdzZWN1cmUnXG4gICAgICBjLmh0dHBPbmx5ID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGMuZXh0ZW5zaW9ucyA9IGMuZXh0ZW5zaW9ucyB8fCBbXTtcbiAgICAgIGMuZXh0ZW5zaW9ucy5wdXNoKGF2KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjO1xufVxuXG4vLyBhdm9pZCB0aGUgVjggZGVvcHRpbWl6YXRpb24gbW9uc3RlciFcbmZ1bmN0aW9uIGpzb25QYXJzZShzdHIpIHtcbiAgdmFyIG9iajtcbiAgdHJ5IHtcbiAgICBvYmogPSBKU09OLnBhcnNlKHN0cik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBmcm9tSlNPTihzdHIpIHtcbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBvYmo7XG4gIGlmICh0eXBlb2Ygc3RyID09PSAnc3RyaW5nJykge1xuICAgIG9iaiA9IGpzb25QYXJzZShzdHIpO1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGFzc3VtZSBpdCdzIGFuIE9iamVjdFxuICAgIG9iaiA9IHN0cjtcbiAgfVxuXG4gIHZhciBjID0gbmV3IENvb2tpZSgpO1xuICBmb3IgKHZhciBpPTA7IGk8Q29va2llLnNlcmlhbGl6YWJsZVByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHJvcCA9IENvb2tpZS5zZXJpYWxpemFibGVQcm9wZXJ0aWVzW2ldO1xuICAgIGlmIChvYmpbcHJvcF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICBvYmpbcHJvcF0gPT09IENvb2tpZS5wcm90b3R5cGVbcHJvcF0pXG4gICAge1xuICAgICAgY29udGludWU7IC8vIGxlYXZlIGFzIHByb3RvdHlwZSBkZWZhdWx0XG4gICAgfVxuXG4gICAgaWYgKHByb3AgPT09ICdleHBpcmVzJyB8fFxuICAgICAgICBwcm9wID09PSAnY3JlYXRpb24nIHx8XG4gICAgICAgIHByb3AgPT09ICdsYXN0QWNjZXNzZWQnKVxuICAgIHtcbiAgICAgIGlmIChvYmpbcHJvcF0gPT09IG51bGwpIHtcbiAgICAgICAgY1twcm9wXSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjW3Byb3BdID0gb2JqW3Byb3BdID09IFwiSW5maW5pdHlcIiA/XG4gICAgICAgICAgXCJJbmZpbml0eVwiIDogbmV3IERhdGUob2JqW3Byb3BdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY1twcm9wXSA9IG9ialtwcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYztcbn1cblxuLyogU2VjdGlvbiA1LjQgcGFydCAyOlxuICogXCIqICBDb29raWVzIHdpdGggbG9uZ2VyIHBhdGhzIGFyZSBsaXN0ZWQgYmVmb3JlIGNvb2tpZXMgd2l0aFxuICogICAgIHNob3J0ZXIgcGF0aHMuXG4gKlxuICogICogIEFtb25nIGNvb2tpZXMgdGhhdCBoYXZlIGVxdWFsLWxlbmd0aCBwYXRoIGZpZWxkcywgY29va2llcyB3aXRoXG4gKiAgICAgZWFybGllciBjcmVhdGlvbi10aW1lcyBhcmUgbGlzdGVkIGJlZm9yZSBjb29raWVzIHdpdGggbGF0ZXJcbiAqICAgICBjcmVhdGlvbi10aW1lcy5cIlxuICovXG5cbmZ1bmN0aW9uIGNvb2tpZUNvbXBhcmUoYSxiKSB7XG4gIHZhciBjbXAgPSAwO1xuXG4gIC8vIGRlc2NlbmRpbmcgZm9yIGxlbmd0aDogYiBDTVAgYVxuICB2YXIgYVBhdGhMZW4gPSBhLnBhdGggPyBhLnBhdGgubGVuZ3RoIDogMDtcbiAgdmFyIGJQYXRoTGVuID0gYi5wYXRoID8gYi5wYXRoLmxlbmd0aCA6IDA7XG4gIGNtcCA9IGJQYXRoTGVuIC0gYVBhdGhMZW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgLy8gYXNjZW5kaW5nIGZvciB0aW1lOiBhIENNUCBiXG4gIHZhciBhVGltZSA9IGEuY3JlYXRpb24gPyBhLmNyZWF0aW9uLmdldFRpbWUoKSA6IE1BWF9USU1FO1xuICB2YXIgYlRpbWUgPSBiLmNyZWF0aW9uID8gYi5jcmVhdGlvbi5nZXRUaW1lKCkgOiBNQVhfVElNRTtcbiAgY21wID0gYVRpbWUgLSBiVGltZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICAvLyBicmVhayB0aWVzIGZvciB0aGUgc2FtZSBtaWxsaXNlY29uZCAocHJlY2lzaW9uIG9mIEphdmFTY3JpcHQncyBjbG9jaylcbiAgY21wID0gYS5jcmVhdGlvbkluZGV4IC0gYi5jcmVhdGlvbkluZGV4O1xuXG4gIHJldHVybiBjbXA7XG59XG5cbi8vIEdpdmVzIHRoZSBwZXJtdXRhdGlvbiBvZiBhbGwgcG9zc2libGUgcGF0aE1hdGNoKCllcyBvZiBhIGdpdmVuIHBhdGguIFRoZVxuLy8gYXJyYXkgaXMgaW4gbG9uZ2VzdC10by1zaG9ydGVzdCBvcmRlci4gIEhhbmR5IGZvciBpbmRleGluZy5cbmZ1bmN0aW9uIHBlcm11dGVQYXRoKHBhdGgpIHtcbiAgaWYgKHBhdGggPT09ICcvJykge1xuICAgIHJldHVybiBbJy8nXTtcbiAgfVxuICBpZiAocGF0aC5sYXN0SW5kZXhPZignLycpID09PSBwYXRoLmxlbmd0aC0xKSB7XG4gICAgcGF0aCA9IHBhdGguc3Vic3RyKDAscGF0aC5sZW5ndGgtMSk7XG4gIH1cbiAgdmFyIHBlcm11dGF0aW9ucyA9IFtwYXRoXTtcbiAgd2hpbGUgKHBhdGgubGVuZ3RoID4gMSkge1xuICAgIHZhciBsaW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgaWYgKGxpbmRleCA9PT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHBhdGggPSBwYXRoLnN1YnN0cigwLGxpbmRleCk7XG4gICAgcGVybXV0YXRpb25zLnB1c2gocGF0aCk7XG4gIH1cbiAgcGVybXV0YXRpb25zLnB1c2goJy8nKTtcbiAgcmV0dXJuIHBlcm11dGF0aW9ucztcbn1cblxuZnVuY3Rpb24gZ2V0Q29va2llQ29udGV4dCh1cmwpIHtcbiAgaWYgKHVybCBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgLy8gTk9URTogZGVjb2RlVVJJIHdpbGwgdGhyb3cgb24gbWFsZm9ybWVkIFVSSXMgKHNlZSBHSC0zMikuXG4gIC8vIFRoZXJlZm9yZSwgd2Ugd2lsbCBqdXN0IHNraXAgZGVjb2RpbmcgZm9yIHN1Y2ggVVJJcy5cbiAgdHJ5IHtcbiAgICB1cmwgPSBkZWNvZGVVUkkodXJsKTtcbiAgfVxuICBjYXRjaChlcnIpIHtcbiAgICAvLyBTaWxlbnRseSBzd2FsbG93IGVycm9yXG4gIH1cblxuICByZXR1cm4gdXJsUGFyc2UodXJsKTtcbn1cblxuZnVuY3Rpb24gQ29va2llKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgaWYgKENvb2tpZS5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocHJvcCkgJiZcbiAgICAgICAgQ29va2llLnByb3RvdHlwZVtwcm9wXSAhPT0gb3B0aW9uc1twcm9wXSAmJlxuICAgICAgICBwcm9wLnN1YnN0cigwLDEpICE9PSAnXycpXG4gICAge1xuICAgICAgdGhpc1twcm9wXSA9IG9wdGlvbnNbcHJvcF07XG4gICAgfVxuICB9LCB0aGlzKTtcblxuICB0aGlzLmNyZWF0aW9uID0gdGhpcy5jcmVhdGlvbiB8fCBuZXcgRGF0ZSgpO1xuXG4gIC8vIHVzZWQgdG8gYnJlYWsgY3JlYXRpb24gdGllcyBpbiBjb29raWVDb21wYXJlKCk6XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY3JlYXRpb25JbmRleCcsIHtcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLCAvLyBpbXBvcnRhbnQgZm9yIGFzc2VydC5kZWVwRXF1YWwgY2hlY2tzXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgdmFsdWU6ICsrQ29va2llLmNvb2tpZXNDcmVhdGVkXG4gIH0pO1xufVxuXG5Db29raWUuY29va2llc0NyZWF0ZWQgPSAwOyAvLyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYSBjb29raWUgaXMgY3JlYXRlZFxuXG5Db29raWUucGFyc2UgPSBwYXJzZTtcbkNvb2tpZS5mcm9tSlNPTiA9IGZyb21KU09OO1xuXG5Db29raWUucHJvdG90eXBlLmtleSA9IFwiXCI7XG5Db29raWUucHJvdG90eXBlLnZhbHVlID0gXCJcIjtcblxuLy8gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBSRkMgaGFzIHRoZW06XG5Db29raWUucHJvdG90eXBlLmV4cGlyZXMgPSBcIkluZmluaXR5XCI7IC8vIGNvZXJjZXMgdG8gbGl0ZXJhbCBJbmZpbml0eVxuQ29va2llLnByb3RvdHlwZS5tYXhBZ2UgPSBudWxsOyAvLyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZXhwaXJlcyBmb3IgVFRMXG5Db29raWUucHJvdG90eXBlLmRvbWFpbiA9IG51bGw7XG5Db29raWUucHJvdG90eXBlLnBhdGggPSBudWxsO1xuQ29va2llLnByb3RvdHlwZS5zZWN1cmUgPSBmYWxzZTtcbkNvb2tpZS5wcm90b3R5cGUuaHR0cE9ubHkgPSBmYWxzZTtcbkNvb2tpZS5wcm90b3R5cGUuZXh0ZW5zaW9ucyA9IG51bGw7XG5cbi8vIHNldCBieSB0aGUgQ29va2llSmFyOlxuQ29va2llLnByb3RvdHlwZS5ob3N0T25seSA9IG51bGw7IC8vIGJvb2xlYW4gd2hlbiBzZXRcbkNvb2tpZS5wcm90b3R5cGUucGF0aElzRGVmYXVsdCA9IG51bGw7IC8vIGJvb2xlYW4gd2hlbiBzZXRcbkNvb2tpZS5wcm90b3R5cGUuY3JlYXRpb24gPSBudWxsOyAvLyBEYXRlIHdoZW4gc2V0OyBkZWZhdWx0ZWQgYnkgQ29va2llLnBhcnNlXG5Db29raWUucHJvdG90eXBlLmxhc3RBY2Nlc3NlZCA9IG51bGw7IC8vIERhdGUgd2hlbiBzZXRcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb29raWUucHJvdG90eXBlLCAnY3JlYXRpb25JbmRleCcsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgd3JpdGFibGU6IHRydWUsXG4gIHZhbHVlOiAwXG59KTtcblxuQ29va2llLnNlcmlhbGl6YWJsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhDb29raWUucHJvdG90eXBlKVxuICAuZmlsdGVyKGZ1bmN0aW9uKHByb3ApIHtcbiAgICByZXR1cm4gIShcbiAgICAgIENvb2tpZS5wcm90b3R5cGVbcHJvcF0gaW5zdGFuY2VvZiBGdW5jdGlvbiB8fFxuICAgICAgcHJvcCA9PT0gJ2NyZWF0aW9uSW5kZXgnIHx8XG4gICAgICBwcm9wLnN1YnN0cigwLDEpID09PSAnXydcbiAgICApO1xuICB9KTtcblxuQ29va2llLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gIHJldHVybiAnQ29va2llPVwiJyt0aGlzLnRvU3RyaW5nKCkgK1xuICAgICc7IGhvc3RPbmx5PScrKHRoaXMuaG9zdE9ubHkgIT0gbnVsbCA/IHRoaXMuaG9zdE9ubHkgOiAnPycpICtcbiAgICAnOyBhQWdlPScrKHRoaXMubGFzdEFjY2Vzc2VkID8gKG5vdy10aGlzLmxhc3RBY2Nlc3NlZC5nZXRUaW1lKCkpKydtcycgOiAnPycpICtcbiAgICAnOyBjQWdlPScrKHRoaXMuY3JlYXRpb24gPyAobm93LXRoaXMuY3JlYXRpb24uZ2V0VGltZSgpKSsnbXMnIDogJz8nKSArXG4gICAgJ1wiJztcbn07XG5cbkNvb2tpZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvYmogPSB7fTtcblxuICB2YXIgcHJvcHMgPSBDb29raWUuc2VyaWFsaXphYmxlUHJvcGVydGllcztcbiAgZm9yICh2YXIgaT0wOyBpPHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICBpZiAodGhpc1twcm9wXSA9PT0gQ29va2llLnByb3RvdHlwZVtwcm9wXSkge1xuICAgICAgY29udGludWU7IC8vIGxlYXZlIGFzIHByb3RvdHlwZSBkZWZhdWx0XG4gICAgfVxuXG4gICAgaWYgKHByb3AgPT09ICdleHBpcmVzJyB8fFxuICAgICAgICBwcm9wID09PSAnY3JlYXRpb24nIHx8XG4gICAgICAgIHByb3AgPT09ICdsYXN0QWNjZXNzZWQnKVxuICAgIHtcbiAgICAgIGlmICh0aGlzW3Byb3BdID09PSBudWxsKSB7XG4gICAgICAgIG9ialtwcm9wXSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpbcHJvcF0gPSB0aGlzW3Byb3BdID09IFwiSW5maW5pdHlcIiA/IC8vIGludGVudGlvbmFsbHkgbm90ID09PVxuICAgICAgICAgIFwiSW5maW5pdHlcIiA6IHRoaXNbcHJvcF0udG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICdtYXhBZ2UnKSB7XG4gICAgICBpZiAodGhpc1twcm9wXSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBhZ2FpbiwgaW50ZW50aW9uYWxseSBub3QgPT09XG4gICAgICAgIG9ialtwcm9wXSA9ICh0aGlzW3Byb3BdID09IEluZmluaXR5IHx8IHRoaXNbcHJvcF0gPT0gLUluZmluaXR5KSA/XG4gICAgICAgICAgdGhpc1twcm9wXS50b1N0cmluZygpIDogdGhpc1twcm9wXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXNbcHJvcF0gIT09IENvb2tpZS5wcm90b3R5cGVbcHJvcF0pIHtcbiAgICAgICAgb2JqW3Byb3BdID0gdGhpc1twcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxuQ29va2llLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZnJvbUpTT04odGhpcy50b0pTT04oKSk7XG59O1xuXG5Db29raWUucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUoKSB7XG4gIGlmICghQ09PS0lFX09DVEVUUy50ZXN0KHRoaXMudmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0aGlzLmV4cGlyZXMgIT0gSW5maW5pdHkgJiYgISh0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlKSAmJiAhcGFyc2VEYXRlKHRoaXMuZXhwaXJlcykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMubWF4QWdlICE9IG51bGwgJiYgdGhpcy5tYXhBZ2UgPD0gMCkge1xuICAgIHJldHVybiBmYWxzZTsgLy8gXCJNYXgtQWdlPVwiIG5vbi16ZXJvLWRpZ2l0ICpESUdJVFxuICB9XG4gIGlmICh0aGlzLnBhdGggIT0gbnVsbCAmJiAhUEFUSF9WQUxVRS50ZXN0KHRoaXMucGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgY2RvbWFpbiA9IHRoaXMuY2RvbWFpbigpO1xuICBpZiAoY2RvbWFpbikge1xuICAgIGlmIChjZG9tYWluLm1hdGNoKC9cXC4kLykpIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gUzQuMS4yLjMgc3VnZ2VzdHMgdGhhdCB0aGlzIGlzIGJhZC4gZG9tYWluTWF0Y2goKSB0ZXN0cyBjb25maXJtIHRoaXNcbiAgICB9XG4gICAgdmFyIHN1ZmZpeCA9IHB1YnN1ZmZpeC5nZXRQdWJsaWNTdWZmaXgoY2RvbWFpbik7XG4gICAgaWYgKHN1ZmZpeCA9PSBudWxsKSB7IC8vIGl0J3MgYSBwdWJsaWMgc3VmZml4XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuQ29va2llLnByb3RvdHlwZS5zZXRFeHBpcmVzID0gZnVuY3Rpb24gc2V0RXhwaXJlcyhleHApIHtcbiAgaWYgKGV4cCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICB0aGlzLmV4cGlyZXMgPSBleHA7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5leHBpcmVzID0gcGFyc2VEYXRlKGV4cCkgfHwgXCJJbmZpbml0eVwiO1xuICB9XG59O1xuXG5Db29raWUucHJvdG90eXBlLnNldE1heEFnZSA9IGZ1bmN0aW9uIHNldE1heEFnZShhZ2UpIHtcbiAgaWYgKGFnZSA9PT0gSW5maW5pdHkgfHwgYWdlID09PSAtSW5maW5pdHkpIHtcbiAgICB0aGlzLm1heEFnZSA9IGFnZS50b1N0cmluZygpOyAvLyBzbyBKU09OLnN0cmluZ2lmeSgpIHdvcmtzXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5tYXhBZ2UgPSBhZ2U7XG4gIH1cbn07XG5cbi8vIGdpdmVzIENvb2tpZSBoZWFkZXIgZm9ybWF0XG5Db29raWUucHJvdG90eXBlLmNvb2tpZVN0cmluZyA9IGZ1bmN0aW9uIGNvb2tpZVN0cmluZygpIHtcbiAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gIGlmICh2YWwgPT0gbnVsbCkge1xuICAgIHZhbCA9ICcnO1xuICB9XG4gIGlmICh0aGlzLmtleSA9PT0gJycpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHJldHVybiB0aGlzLmtleSsnPScrdmFsO1xufTtcblxuLy8gZ2l2ZXMgU2V0LUNvb2tpZSBoZWFkZXIgZm9ybWF0XG5Db29raWUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHZhciBzdHIgPSB0aGlzLmNvb2tpZVN0cmluZygpO1xuXG4gIGlmICh0aGlzLmV4cGlyZXMgIT0gSW5maW5pdHkpIHtcbiAgICBpZiAodGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgc3RyICs9ICc7IEV4cGlyZXM9Jytmb3JtYXREYXRlKHRoaXMuZXhwaXJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnOyBFeHBpcmVzPScrdGhpcy5leHBpcmVzO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLm1heEFnZSAhPSBudWxsICYmIHRoaXMubWF4QWdlICE9IEluZmluaXR5KSB7XG4gICAgc3RyICs9ICc7IE1heC1BZ2U9Jyt0aGlzLm1heEFnZTtcbiAgfVxuXG4gIGlmICh0aGlzLmRvbWFpbiAmJiAhdGhpcy5ob3N0T25seSkge1xuICAgIHN0ciArPSAnOyBEb21haW49Jyt0aGlzLmRvbWFpbjtcbiAgfVxuICBpZiAodGhpcy5wYXRoKSB7XG4gICAgc3RyICs9ICc7IFBhdGg9Jyt0aGlzLnBhdGg7XG4gIH1cblxuICBpZiAodGhpcy5zZWN1cmUpIHtcbiAgICBzdHIgKz0gJzsgU2VjdXJlJztcbiAgfVxuICBpZiAodGhpcy5odHRwT25seSkge1xuICAgIHN0ciArPSAnOyBIdHRwT25seSc7XG4gIH1cbiAgaWYgKHRoaXMuZXh0ZW5zaW9ucykge1xuICAgIHRoaXMuZXh0ZW5zaW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGV4dCkge1xuICAgICAgc3RyICs9ICc7ICcrZXh0O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn07XG5cbi8vIFRUTCgpIHBhcnRpYWxseSByZXBsYWNlcyB0aGUgXCJleHBpcnktdGltZVwiIHBhcnRzIG9mIFM1LjMgc3RlcCAzIChzZXRDb29raWUoKVxuLy8gZWxzZXdoZXJlKVxuLy8gUzUuMyBzYXlzIHRvIGdpdmUgdGhlIFwibGF0ZXN0IHJlcHJlc2VudGFibGUgZGF0ZVwiIGZvciB3aGljaCB3ZSB1c2UgSW5maW5pdHlcbi8vIEZvciBcImV4cGlyZWRcIiB3ZSB1c2UgMFxuQ29va2llLnByb3RvdHlwZS5UVEwgPSBmdW5jdGlvbiBUVEwobm93KSB7XG4gIC8qIFJGQzYyNjUgUzQuMS4yLjIgSWYgYSBjb29raWUgaGFzIGJvdGggdGhlIE1heC1BZ2UgYW5kIHRoZSBFeHBpcmVzXG4gICAqIGF0dHJpYnV0ZSwgdGhlIE1heC1BZ2UgYXR0cmlidXRlIGhhcyBwcmVjZWRlbmNlIGFuZCBjb250cm9scyB0aGVcbiAgICogZXhwaXJhdGlvbiBkYXRlIG9mIHRoZSBjb29raWUuXG4gICAqIChDb25jdXJzIHdpdGggUzUuMyBzdGVwIDMpXG4gICAqL1xuICBpZiAodGhpcy5tYXhBZ2UgIT0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLm1heEFnZTw9MCA/IDAgOiB0aGlzLm1heEFnZSoxMDAwO1xuICB9XG5cbiAgdmFyIGV4cGlyZXMgPSB0aGlzLmV4cGlyZXM7XG4gIGlmIChleHBpcmVzICE9IEluZmluaXR5KSB7XG4gICAgaWYgKCEoZXhwaXJlcyBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICBleHBpcmVzID0gcGFyc2VEYXRlKGV4cGlyZXMpIHx8IEluZmluaXR5O1xuICAgIH1cblxuICAgIGlmIChleHBpcmVzID09IEluZmluaXR5KSB7XG4gICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGlyZXMuZ2V0VGltZSgpIC0gKG5vdyB8fCBEYXRlLm5vdygpKTtcbiAgfVxuXG4gIHJldHVybiBJbmZpbml0eTtcbn07XG5cbi8vIGV4cGlyeVRpbWUoKSByZXBsYWNlcyB0aGUgXCJleHBpcnktdGltZVwiIHBhcnRzIG9mIFM1LjMgc3RlcCAzIChzZXRDb29raWUoKVxuLy8gZWxzZXdoZXJlKVxuQ29va2llLnByb3RvdHlwZS5leHBpcnlUaW1lID0gZnVuY3Rpb24gZXhwaXJ5VGltZShub3cpIHtcbiAgaWYgKHRoaXMubWF4QWdlICE9IG51bGwpIHtcbiAgICB2YXIgcmVsYXRpdmVUbyA9IG5vdyB8fCB0aGlzLmNyZWF0aW9uIHx8IG5ldyBEYXRlKCk7XG4gICAgdmFyIGFnZSA9ICh0aGlzLm1heEFnZSA8PSAwKSA/IC1JbmZpbml0eSA6IHRoaXMubWF4QWdlKjEwMDA7XG4gICAgcmV0dXJuIHJlbGF0aXZlVG8uZ2V0VGltZSgpICsgYWdlO1xuICB9XG5cbiAgaWYgKHRoaXMuZXhwaXJlcyA9PSBJbmZpbml0eSkge1xuICAgIHJldHVybiBJbmZpbml0eTtcbiAgfVxuICByZXR1cm4gdGhpcy5leHBpcmVzLmdldFRpbWUoKTtcbn07XG5cbi8vIGV4cGlyeURhdGUoKSByZXBsYWNlcyB0aGUgXCJleHBpcnktdGltZVwiIHBhcnRzIG9mIFM1LjMgc3RlcCAzIChzZXRDb29raWUoKVxuLy8gZWxzZXdoZXJlKSwgZXhjZXB0IGl0IHJldHVybnMgYSBEYXRlXG5Db29raWUucHJvdG90eXBlLmV4cGlyeURhdGUgPSBmdW5jdGlvbiBleHBpcnlEYXRlKG5vdykge1xuICB2YXIgbWlsbGlzZWMgPSB0aGlzLmV4cGlyeVRpbWUobm93KTtcbiAgaWYgKG1pbGxpc2VjID09IEluZmluaXR5KSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE1BWF9USU1FKTtcbiAgfSBlbHNlIGlmIChtaWxsaXNlYyA9PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTUlOX1RJTUUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRGF0ZShtaWxsaXNlYyk7XG4gIH1cbn07XG5cbi8vIFRoaXMgcmVwbGFjZXMgdGhlIFwicGVyc2lzdGVudC1mbGFnXCIgcGFydHMgb2YgUzUuMyBzdGVwIDNcbkNvb2tpZS5wcm90b3R5cGUuaXNQZXJzaXN0ZW50ID0gZnVuY3Rpb24gaXNQZXJzaXN0ZW50KCkge1xuICByZXR1cm4gKHRoaXMubWF4QWdlICE9IG51bGwgfHwgdGhpcy5leHBpcmVzICE9IEluZmluaXR5KTtcbn07XG5cbi8vIE1vc3RseSBTNS4xLjIgYW5kIFM1LjIuMzpcbkNvb2tpZS5wcm90b3R5cGUuY2RvbWFpbiA9XG5Db29raWUucHJvdG90eXBlLmNhbm9uaWNhbGl6ZWREb21haW4gPSBmdW5jdGlvbiBjYW5vbmljYWxpemVkRG9tYWluKCkge1xuICBpZiAodGhpcy5kb21haW4gPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjYW5vbmljYWxEb21haW4odGhpcy5kb21haW4pO1xufTtcblxuZnVuY3Rpb24gQ29va2llSmFyKHN0b3JlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICBvcHRpb25zID0ge3JlamVjdFB1YmxpY1N1ZmZpeGVzOiBvcHRpb25zfTtcbiAgfSBlbHNlIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgaWYgKG9wdGlvbnMucmVqZWN0UHVibGljU3VmZml4ZXMgIT0gbnVsbCkge1xuICAgIHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMgPSBvcHRpb25zLnJlamVjdFB1YmxpY1N1ZmZpeGVzO1xuICB9XG4gIGlmIChvcHRpb25zLmxvb3NlTW9kZSAhPSBudWxsKSB7XG4gICAgdGhpcy5lbmFibGVMb29zZU1vZGUgPSBvcHRpb25zLmxvb3NlTW9kZTtcbiAgfVxuXG4gIGlmICghc3RvcmUpIHtcbiAgICBzdG9yZSA9IG5ldyBNZW1vcnlDb29raWVTdG9yZSgpO1xuICB9XG4gIHRoaXMuc3RvcmUgPSBzdG9yZTtcbn1cbkNvb2tpZUphci5wcm90b3R5cGUuc3RvcmUgPSBudWxsO1xuQ29va2llSmFyLnByb3RvdHlwZS5yZWplY3RQdWJsaWNTdWZmaXhlcyA9IHRydWU7XG5Db29raWVKYXIucHJvdG90eXBlLmVuYWJsZUxvb3NlTW9kZSA9IGZhbHNlO1xudmFyIENBTl9CRV9TWU5DID0gW107XG5cbkNBTl9CRV9TWU5DLnB1c2goJ3NldENvb2tpZScpO1xuQ29va2llSmFyLnByb3RvdHlwZS5zZXRDb29raWUgPSBmdW5jdGlvbihjb29raWUsIHVybCwgb3B0aW9ucywgY2IpIHtcbiAgdmFyIGVycjtcbiAgdmFyIGNvbnRleHQgPSBnZXRDb29raWVDb250ZXh0KHVybCk7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICBjYiA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIGhvc3QgPSBjYW5vbmljYWxEb21haW4oY29udGV4dC5ob3N0bmFtZSk7XG4gIHZhciBsb29zZSA9IHRoaXMuZW5hYmxlTG9vc2VNb2RlO1xuICBpZiAob3B0aW9ucy5sb29zZSAhPSBudWxsKSB7XG4gICAgbG9vc2UgPSBvcHRpb25zLmxvb3NlO1xuICB9XG5cbiAgLy8gUzUuMyBzdGVwIDFcbiAgaWYgKCEoY29va2llIGluc3RhbmNlb2YgQ29va2llKSkge1xuICAgIGNvb2tpZSA9IENvb2tpZS5wYXJzZShjb29raWUsIHsgbG9vc2U6IGxvb3NlIH0pO1xuICB9XG4gIGlmICghY29va2llKSB7XG4gICAgZXJyID0gbmV3IEVycm9yKFwiQ29va2llIGZhaWxlZCB0byBwYXJzZVwiKTtcbiAgICByZXR1cm4gY2Iob3B0aW9ucy5pZ25vcmVFcnJvciA/IG51bGwgOiBlcnIpO1xuICB9XG5cbiAgLy8gUzUuMyBzdGVwIDJcbiAgdmFyIG5vdyA9IG9wdGlvbnMubm93IHx8IG5ldyBEYXRlKCk7IC8vIHdpbGwgYXNzaWduIGxhdGVyIHRvIHNhdmUgZWZmb3J0IGluIHRoZSBmYWNlIG9mIGVycm9yc1xuXG4gIC8vIFM1LjMgc3RlcCAzOiBOT09QOyBwZXJzaXN0ZW50LWZsYWcgYW5kIGV4cGlyeS10aW1lIGlzIGhhbmRsZWQgYnkgZ2V0Q29va2llKClcblxuICAvLyBTNS4zIHN0ZXAgNDogTk9PUDsgZG9tYWluIGlzIG51bGwgYnkgZGVmYXVsdFxuXG4gIC8vIFM1LjMgc3RlcCA1OiBwdWJsaWMgc3VmZml4ZXNcbiAgaWYgKHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMgJiYgY29va2llLmRvbWFpbikge1xuICAgIHZhciBzdWZmaXggPSBwdWJzdWZmaXguZ2V0UHVibGljU3VmZml4KGNvb2tpZS5jZG9tYWluKCkpO1xuICAgIGlmIChzdWZmaXggPT0gbnVsbCkgeyAvLyBlLmcuIFwiY29tXCJcbiAgICAgIGVyciA9IG5ldyBFcnJvcihcIkNvb2tpZSBoYXMgZG9tYWluIHNldCB0byBhIHB1YmxpYyBzdWZmaXhcIik7XG4gICAgICByZXR1cm4gY2Iob3B0aW9ucy5pZ25vcmVFcnJvciA/IG51bGwgOiBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFM1LjMgc3RlcCA2OlxuICBpZiAoY29va2llLmRvbWFpbikge1xuICAgIGlmICghZG9tYWluTWF0Y2goaG9zdCwgY29va2llLmNkb21haW4oKSwgZmFsc2UpKSB7XG4gICAgICBlcnIgPSBuZXcgRXJyb3IoXCJDb29raWUgbm90IGluIHRoaXMgaG9zdCdzIGRvbWFpbi4gQ29va2llOlwiK2Nvb2tpZS5jZG9tYWluKCkrXCIgUmVxdWVzdDpcIitob3N0KTtcbiAgICAgIHJldHVybiBjYihvcHRpb25zLmlnbm9yZUVycm9yID8gbnVsbCA6IGVycik7XG4gICAgfVxuXG4gICAgaWYgKGNvb2tpZS5ob3N0T25seSA9PSBudWxsKSB7IC8vIGRvbid0IHJlc2V0IGlmIGFscmVhZHkgc2V0XG4gICAgICBjb29raWUuaG9zdE9ubHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgfSBlbHNlIHtcbiAgICBjb29raWUuaG9zdE9ubHkgPSB0cnVlO1xuICAgIGNvb2tpZS5kb21haW4gPSBob3N0O1xuICB9XG5cbiAgLy9TNS4yLjQgSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBlbXB0eSBvciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuICAvL2F0dHJpYnV0ZS12YWx1ZSBpcyBub3QgJXgyRiAoXCIvXCIpOlxuICAvL0xldCBjb29raWUtcGF0aCBiZSB0aGUgZGVmYXVsdC1wYXRoLlxuICBpZiAoIWNvb2tpZS5wYXRoIHx8IGNvb2tpZS5wYXRoWzBdICE9PSAnLycpIHtcbiAgICBjb29raWUucGF0aCA9IGRlZmF1bHRQYXRoKGNvbnRleHQucGF0aG5hbWUpO1xuICAgIGNvb2tpZS5wYXRoSXNEZWZhdWx0ID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFM1LjMgc3RlcCA4OiBOT09QOyBzZWN1cmUgYXR0cmlidXRlXG4gIC8vIFM1LjMgc3RlcCA5OiBOT09QOyBodHRwT25seSBhdHRyaWJ1dGVcblxuICAvLyBTNS4zIHN0ZXAgMTBcbiAgaWYgKG9wdGlvbnMuaHR0cCA9PT0gZmFsc2UgJiYgY29va2llLmh0dHBPbmx5KSB7XG4gICAgZXJyID0gbmV3IEVycm9yKFwiQ29va2llIGlzIEh0dHBPbmx5IGFuZCB0aGlzIGlzbid0IGFuIEhUVFAgQVBJXCIpO1xuICAgIHJldHVybiBjYihvcHRpb25zLmlnbm9yZUVycm9yID8gbnVsbCA6IGVycik7XG4gIH1cblxuICB2YXIgc3RvcmUgPSB0aGlzLnN0b3JlO1xuXG4gIGlmICghc3RvcmUudXBkYXRlQ29va2llKSB7XG4gICAgc3RvcmUudXBkYXRlQ29va2llID0gZnVuY3Rpb24ob2xkQ29va2llLCBuZXdDb29raWUsIGNiKSB7XG4gICAgICB0aGlzLnB1dENvb2tpZShuZXdDb29raWUsIGNiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gd2l0aENvb2tpZShlcnIsIG9sZENvb2tpZSkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJldHVybiBjYihlcnIpO1xuICAgIH1cblxuICAgIHZhciBuZXh0ID0gZnVuY3Rpb24oZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2IobnVsbCwgY29va2llKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKG9sZENvb2tpZSkge1xuICAgICAgLy8gUzUuMyBzdGVwIDExIC0gXCJJZiB0aGUgY29va2llIHN0b3JlIGNvbnRhaW5zIGEgY29va2llIHdpdGggdGhlIHNhbWUgbmFtZSxcbiAgICAgIC8vIGRvbWFpbiwgYW5kIHBhdGggYXMgdGhlIG5ld2x5IGNyZWF0ZWQgY29va2llOlwiXG4gICAgICBpZiAob3B0aW9ucy5odHRwID09PSBmYWxzZSAmJiBvbGRDb29raWUuaHR0cE9ubHkpIHsgLy8gc3RlcCAxMS4yXG4gICAgICAgIGVyciA9IG5ldyBFcnJvcihcIm9sZCBDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUElcIik7XG4gICAgICAgIHJldHVybiBjYihvcHRpb25zLmlnbm9yZUVycm9yID8gbnVsbCA6IGVycik7XG4gICAgICB9XG4gICAgICBjb29raWUuY3JlYXRpb24gPSBvbGRDb29raWUuY3JlYXRpb247IC8vIHN0ZXAgMTEuM1xuICAgICAgY29va2llLmNyZWF0aW9uSW5kZXggPSBvbGRDb29raWUuY3JlYXRpb25JbmRleDsgLy8gcHJlc2VydmUgdGllLWJyZWFrZXJcbiAgICAgIGNvb2tpZS5sYXN0QWNjZXNzZWQgPSBub3c7XG4gICAgICAvLyBTdGVwIDExLjQgKGRlbGV0ZSBjb29raWUpIGlzIGltcGxpZWQgYnkganVzdCBzZXR0aW5nIHRoZSBuZXcgb25lOlxuICAgICAgc3RvcmUudXBkYXRlQ29va2llKG9sZENvb2tpZSwgY29va2llLCBuZXh0KTsgLy8gc3RlcCAxMlxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvb2tpZS5jcmVhdGlvbiA9IGNvb2tpZS5sYXN0QWNjZXNzZWQgPSBub3c7XG4gICAgICBzdG9yZS5wdXRDb29raWUoY29va2llLCBuZXh0KTsgLy8gc3RlcCAxMlxuICAgIH1cbiAgfVxuXG4gIHN0b3JlLmZpbmRDb29raWUoY29va2llLmRvbWFpbiwgY29va2llLnBhdGgsIGNvb2tpZS5rZXksIHdpdGhDb29raWUpO1xufTtcblxuLy8gUkZDNjM2NSBTNS40XG5DQU5fQkVfU1lOQy5wdXNoKCdnZXRDb29raWVzJyk7XG5Db29raWVKYXIucHJvdG90eXBlLmdldENvb2tpZXMgPSBmdW5jdGlvbih1cmwsIG9wdGlvbnMsIGNiKSB7XG4gIHZhciBjb250ZXh0ID0gZ2V0Q29va2llQ29udGV4dCh1cmwpO1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgY2IgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBob3N0ID0gY2Fub25pY2FsRG9tYWluKGNvbnRleHQuaG9zdG5hbWUpO1xuICB2YXIgcGF0aCA9IGNvbnRleHQucGF0aG5hbWUgfHwgJy8nO1xuXG4gIHZhciBzZWN1cmUgPSBvcHRpb25zLnNlY3VyZTtcbiAgaWYgKHNlY3VyZSA9PSBudWxsICYmIGNvbnRleHQucHJvdG9jb2wgJiZcbiAgICAgIChjb250ZXh0LnByb3RvY29sID09ICdodHRwczonIHx8IGNvbnRleHQucHJvdG9jb2wgPT0gJ3dzczonKSlcbiAge1xuICAgIHNlY3VyZSA9IHRydWU7XG4gIH1cblxuICB2YXIgaHR0cCA9IG9wdGlvbnMuaHR0cDtcbiAgaWYgKGh0dHAgPT0gbnVsbCkge1xuICAgIGh0dHAgPSB0cnVlO1xuICB9XG5cbiAgdmFyIG5vdyA9IG9wdGlvbnMubm93IHx8IERhdGUubm93KCk7XG4gIHZhciBleHBpcmVDaGVjayA9IG9wdGlvbnMuZXhwaXJlICE9PSBmYWxzZTtcbiAgdmFyIGFsbFBhdGhzID0gISFvcHRpb25zLmFsbFBhdGhzO1xuICB2YXIgc3RvcmUgPSB0aGlzLnN0b3JlO1xuXG4gIGZ1bmN0aW9uIG1hdGNoaW5nQ29va2llKGMpIHtcbiAgICAvLyBcIkVpdGhlcjpcbiAgICAvLyAgIFRoZSBjb29raWUncyBob3N0LW9ubHktZmxhZyBpcyB0cnVlIGFuZCB0aGUgY2Fub25pY2FsaXplZFxuICAgIC8vICAgcmVxdWVzdC1ob3N0IGlzIGlkZW50aWNhbCB0byB0aGUgY29va2llJ3MgZG9tYWluLlxuICAgIC8vIE9yOlxuICAgIC8vICAgVGhlIGNvb2tpZSdzIGhvc3Qtb25seS1mbGFnIGlzIGZhbHNlIGFuZCB0aGUgY2Fub25pY2FsaXplZFxuICAgIC8vICAgcmVxdWVzdC1ob3N0IGRvbWFpbi1tYXRjaGVzIHRoZSBjb29raWUncyBkb21haW4uXCJcbiAgICBpZiAoYy5ob3N0T25seSkge1xuICAgICAgaWYgKGMuZG9tYWluICE9IGhvc3QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWRvbWFpbk1hdGNoKGhvc3QsIGMuZG9tYWluLCBmYWxzZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFwiVGhlIHJlcXVlc3QtdXJpJ3MgcGF0aCBwYXRoLW1hdGNoZXMgdGhlIGNvb2tpZSdzIHBhdGguXCJcbiAgICBpZiAoIWFsbFBhdGhzICYmICFwYXRoTWF0Y2gocGF0aCwgYy5wYXRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFwiSWYgdGhlIGNvb2tpZSdzIHNlY3VyZS1vbmx5LWZsYWcgaXMgdHJ1ZSwgdGhlbiB0aGUgcmVxdWVzdC11cmknc1xuICAgIC8vIHNjaGVtZSBtdXN0IGRlbm90ZSBhIFwic2VjdXJlXCIgcHJvdG9jb2xcIlxuICAgIGlmIChjLnNlY3VyZSAmJiAhc2VjdXJlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gXCJJZiB0aGUgY29va2llJ3MgaHR0cC1vbmx5LWZsYWcgaXMgdHJ1ZSwgdGhlbiBleGNsdWRlIHRoZSBjb29raWUgaWYgdGhlXG4gICAgLy8gY29va2llLXN0cmluZyBpcyBiZWluZyBnZW5lcmF0ZWQgZm9yIGEgXCJub24tSFRUUFwiIEFQSVwiXG4gICAgaWYgKGMuaHR0cE9ubHkgJiYgIWh0dHApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBkZWZlcnJlZCBmcm9tIFM1LjNcbiAgICAvLyBub24tUkZDOiBhbGxvdyByZXRlbnRpb24gb2YgZXhwaXJlZCBjb29raWVzIGJ5IGNob2ljZVxuICAgIGlmIChleHBpcmVDaGVjayAmJiBjLmV4cGlyeVRpbWUoKSA8PSBub3cpIHtcbiAgICAgIHN0b3JlLnJlbW92ZUNvb2tpZShjLmRvbWFpbiwgYy5wYXRoLCBjLmtleSwgZnVuY3Rpb24oKXt9KTsgLy8gcmVzdWx0IGlnbm9yZWRcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0b3JlLmZpbmRDb29raWVzKGhvc3QsIGFsbFBhdGhzID8gbnVsbCA6IHBhdGgsIGZ1bmN0aW9uKGVycixjb29raWVzKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgfVxuXG4gICAgY29va2llcyA9IGNvb2tpZXMuZmlsdGVyKG1hdGNoaW5nQ29va2llKTtcblxuICAgIC8vIHNvcnRpbmcgb2YgUzUuNCBwYXJ0IDJcbiAgICBpZiAob3B0aW9ucy5zb3J0ICE9PSBmYWxzZSkge1xuICAgICAgY29va2llcyA9IGNvb2tpZXMuc29ydChjb29raWVDb21wYXJlKTtcbiAgICB9XG5cbiAgICAvLyBTNS40IHBhcnQgM1xuICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvb2tpZXMuZm9yRWFjaChmdW5jdGlvbihjKSB7XG4gICAgICBjLmxhc3RBY2Nlc3NlZCA9IG5vdztcbiAgICB9KTtcbiAgICAvLyBUT0RPIHBlcnNpc3QgbGFzdEFjY2Vzc2VkXG5cbiAgICBjYihudWxsLGNvb2tpZXMpO1xuICB9KTtcbn07XG5cbkNBTl9CRV9TWU5DLnB1c2goJ2dldENvb2tpZVN0cmluZycpO1xuQ29va2llSmFyLnByb3RvdHlwZS5nZXRDb29raWVTdHJpbmcgPSBmdW5jdGlvbigvKi4uLiwgY2IqLykge1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtcbiAgdmFyIGNiID0gYXJncy5wb3AoKTtcbiAgdmFyIG5leHQgPSBmdW5jdGlvbihlcnIsY29va2llcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKG51bGwsIGNvb2tpZXNcbiAgICAgICAgLnNvcnQoY29va2llQ29tcGFyZSlcbiAgICAgICAgLm1hcChmdW5jdGlvbihjKXtcbiAgICAgICAgICByZXR1cm4gYy5jb29raWVTdHJpbmcoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJzsgJykpO1xuICAgIH1cbiAgfTtcbiAgYXJncy5wdXNoKG5leHQpO1xuICB0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxhcmdzKTtcbn07XG5cbkNBTl9CRV9TWU5DLnB1c2goJ2dldFNldENvb2tpZVN0cmluZ3MnKTtcbkNvb2tpZUphci5wcm90b3R5cGUuZ2V0U2V0Q29va2llU3RyaW5ncyA9IGZ1bmN0aW9uKC8qLi4uLCBjYiovKSB7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO1xuICB2YXIgY2IgPSBhcmdzLnBvcCgpO1xuICB2YXIgbmV4dCA9IGZ1bmN0aW9uKGVycixjb29raWVzKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2IoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2IobnVsbCwgY29va2llcy5tYXAoZnVuY3Rpb24oYyl7XG4gICAgICAgIHJldHVybiBjLnRvU3RyaW5nKCk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9O1xuICBhcmdzLnB1c2gobmV4dCk7XG4gIHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLGFyZ3MpO1xufTtcblxuQ0FOX0JFX1NZTkMucHVzaCgnc2VyaWFsaXplJyk7XG5Db29raWVKYXIucHJvdG90eXBlLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uKGNiKSB7XG4gIHZhciB0eXBlID0gdGhpcy5zdG9yZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAodHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICB0eXBlID0gbnVsbDtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBSRUFETUUubWQgXCJTZXJpYWxpemF0aW9uIEZvcm1hdFwiIGlmIHlvdSBjaGFuZ2UgdGhpcywgcGxlYXNlIVxuICB2YXIgc2VyaWFsaXplZCA9IHtcbiAgICAvLyBUaGUgdmVyc2lvbiBvZiB0b3VnaC1jb29raWUgdGhhdCBzZXJpYWxpemVkIHRoaXMgamFyLiBHZW5lcmFsbHkgYSBnb29kXG4gICAgLy8gcHJhY3RpY2Ugc2luY2UgZnV0dXJlIHZlcnNpb25zIGNhbiBtYWtlIGRhdGEgaW1wb3J0IGRlY2lzaW9ucyBiYXNlZCBvblxuICAgIC8vIGtub3duIHBhc3QgYmVoYXZpb3IuIFdoZW4vaWYgdGhpcyBtYXR0ZXJzLCB1c2UgYHNlbXZlcmAuXG4gICAgdmVyc2lvbjogJ3RvdWdoLWNvb2tpZUAnK1ZFUlNJT04sXG5cbiAgICAvLyBhZGQgdGhlIHN0b3JlIHR5cGUsIHRvIG1ha2UgaHVtYW5zIGhhcHB5OlxuICAgIHN0b3JlVHlwZTogdHlwZSxcblxuICAgIC8vIENvb2tpZUphciBjb25maWd1cmF0aW9uOlxuICAgIHJlamVjdFB1YmxpY1N1ZmZpeGVzOiAhIXRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMsXG5cbiAgICAvLyB0aGlzIGdldHMgZmlsbGVkIGZyb20gZ2V0QWxsQ29va2llczpcbiAgICBjb29raWVzOiBbXVxuICB9O1xuXG4gIGlmICghKHRoaXMuc3RvcmUuZ2V0QWxsQ29va2llcyAmJlxuICAgICAgICB0eXBlb2YgdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzID09PSAnZnVuY3Rpb24nKSlcbiAge1xuICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ3N0b3JlIGRvZXMgbm90IHN1cHBvcnQgZ2V0QWxsQ29va2llcyBhbmQgY2Fubm90IGJlIHNlcmlhbGl6ZWQnKSk7XG4gIH1cblxuICB0aGlzLnN0b3JlLmdldEFsbENvb2tpZXMoZnVuY3Rpb24oZXJyLGNvb2tpZXMpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemVkLmNvb2tpZXMgPSBjb29raWVzLm1hcChmdW5jdGlvbihjb29raWUpIHtcbiAgICAgIC8vIGNvbnZlcnQgdG8gc2VyaWFsaXplZCAncmF3JyBjb29raWVzXG4gICAgICBjb29raWUgPSAoY29va2llIGluc3RhbmNlb2YgQ29va2llKSA/IGNvb2tpZS50b0pTT04oKSA6IGNvb2tpZTtcblxuICAgICAgLy8gUmVtb3ZlIHRoZSBpbmRleCBzbyBuZXcgb25lcyBnZXQgYXNzaWduZWQgZHVyaW5nIGRlc2VyaWFsaXphdGlvblxuICAgICAgZGVsZXRlIGNvb2tpZS5jcmVhdGlvbkluZGV4O1xuXG4gICAgICByZXR1cm4gY29va2llO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNiKG51bGwsIHNlcmlhbGl6ZWQpO1xuICB9KTtcbn07XG5cbi8vIHdlbGwta25vd24gbmFtZSB0aGF0IEpTT04uc3RyaW5naWZ5IGNhbGxzXG5Db29raWVKYXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zZXJpYWxpemVTeW5jKCk7XG59O1xuXG4vLyB1c2UgdGhlIGNsYXNzIG1ldGhvZCBDb29raWVKYXIuZGVzZXJpYWxpemUgaW5zdGVhZCBvZiBjYWxsaW5nIHRoaXMgZGlyZWN0bHlcbkNBTl9CRV9TWU5DLnB1c2goJ19pbXBvcnRDb29raWVzJyk7XG5Db29raWVKYXIucHJvdG90eXBlLl9pbXBvcnRDb29raWVzID0gZnVuY3Rpb24oc2VyaWFsaXplZCwgY2IpIHtcbiAgdmFyIGphciA9IHRoaXM7XG4gIHZhciBjb29raWVzID0gc2VyaWFsaXplZC5jb29raWVzO1xuICBpZiAoIWNvb2tpZXMgfHwgIUFycmF5LmlzQXJyYXkoY29va2llcykpIHtcbiAgICByZXR1cm4gY2IobmV3IEVycm9yKCdzZXJpYWxpemVkIGphciBoYXMgbm8gY29va2llcyBhcnJheScpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1dE5leHQoZXJyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgfVxuXG4gICAgaWYgKCFjb29raWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNiKGVyciwgamFyKTtcbiAgICB9XG5cbiAgICB2YXIgY29va2llO1xuICAgIHRyeSB7XG4gICAgICBjb29raWUgPSBmcm9tSlNPTihjb29raWVzLnNoaWZ0KCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBjYihlKTtcbiAgICB9XG5cbiAgICBpZiAoY29va2llID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gcHV0TmV4dChudWxsKTsgLy8gc2tpcCB0aGlzIGNvb2tpZVxuICAgIH1cblxuICAgIGphci5zdG9yZS5wdXRDb29raWUoY29va2llLCBwdXROZXh0KTtcbiAgfVxuXG4gIHB1dE5leHQoKTtcbn07XG5cbkNvb2tpZUphci5kZXNlcmlhbGl6ZSA9IGZ1bmN0aW9uKHN0ck9yT2JqLCBzdG9yZSwgY2IpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDMpIHtcbiAgICAvLyBzdG9yZSBpcyBvcHRpb25hbFxuICAgIGNiID0gc3RvcmU7XG4gICAgc3RvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWQ7XG4gIGlmICh0eXBlb2Ygc3RyT3JPYmogPT09ICdzdHJpbmcnKSB7XG4gICAgc2VyaWFsaXplZCA9IGpzb25QYXJzZShzdHJPck9iaik7XG4gICAgaWYgKHNlcmlhbGl6ZWQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgcmV0dXJuIGNiKHNlcmlhbGl6ZWQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkID0gc3RyT3JPYmo7XG4gIH1cblxuICB2YXIgamFyID0gbmV3IENvb2tpZUphcihzdG9yZSwgc2VyaWFsaXplZC5yZWplY3RQdWJsaWNTdWZmaXhlcyk7XG4gIGphci5faW1wb3J0Q29va2llcyhzZXJpYWxpemVkLCBmdW5jdGlvbihlcnIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICB9XG4gICAgY2IobnVsbCwgamFyKTtcbiAgfSk7XG59O1xuXG5Db29raWVKYXIuZGVzZXJpYWxpemVTeW5jID0gZnVuY3Rpb24oc3RyT3JPYmosIHN0b3JlKSB7XG4gIHZhciBzZXJpYWxpemVkID0gdHlwZW9mIHN0ck9yT2JqID09PSAnc3RyaW5nJyA/XG4gICAgSlNPTi5wYXJzZShzdHJPck9iaikgOiBzdHJPck9iajtcbiAgdmFyIGphciA9IG5ldyBDb29raWVKYXIoc3RvcmUsIHNlcmlhbGl6ZWQucmVqZWN0UHVibGljU3VmZml4ZXMpO1xuXG4gIC8vIGNhdGNoIHRoaXMgbWlzdGFrZSBlYXJseTpcbiAgaWYgKCFqYXIuc3RvcmUuc3luY2hyb25vdXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4nKTtcbiAgfVxuXG4gIGphci5faW1wb3J0Q29va2llc1N5bmMoc2VyaWFsaXplZCk7XG4gIHJldHVybiBqYXI7XG59O1xuQ29va2llSmFyLmZyb21KU09OID0gQ29va2llSmFyLmRlc2VyaWFsaXplU3luYztcblxuQ0FOX0JFX1NZTkMucHVzaCgnY2xvbmUnKTtcbkNvb2tpZUphci5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbihuZXdTdG9yZSwgY2IpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICBjYiA9IG5ld1N0b3JlO1xuICAgIG5ld1N0b3JlID0gbnVsbDtcbiAgfVxuXG4gIHRoaXMuc2VyaWFsaXplKGZ1bmN0aW9uKGVycixzZXJpYWxpemVkKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgfVxuICAgIENvb2tpZUphci5kZXNlcmlhbGl6ZShuZXdTdG9yZSwgc2VyaWFsaXplZCwgY2IpO1xuICB9KTtcbn07XG5cbi8vIFVzZSBhIGNsb3N1cmUgdG8gcHJvdmlkZSBhIHRydWUgaW1wZXJhdGl2ZSBBUEkgZm9yIHN5bmNocm9ub3VzIHN0b3Jlcy5cbmZ1bmN0aW9uIHN5bmNXcmFwKG1ldGhvZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLnN0b3JlLnN5bmNocm9ub3VzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgdmFyIHN5bmNFcnIsIHN5bmNSZXN1bHQ7XG4gICAgYXJncy5wdXNoKGZ1bmN0aW9uIHN5bmNDYihlcnIsIHJlc3VsdCkge1xuICAgICAgc3luY0VyciA9IGVycjtcbiAgICAgIHN5bmNSZXN1bHQgPSByZXN1bHQ7XG4gICAgfSk7XG4gICAgdGhpc1ttZXRob2RdLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgaWYgKHN5bmNFcnIpIHtcbiAgICAgIHRocm93IHN5bmNFcnI7XG4gICAgfVxuICAgIHJldHVybiBzeW5jUmVzdWx0O1xuICB9O1xufVxuXG4vLyB3cmFwIGFsbCBkZWNsYXJlZCBDQU5fQkVfU1lOQyBtZXRob2RzIGluIHRoZSBzeW5jIHdyYXBwZXJcbkNBTl9CRV9TWU5DLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gIENvb2tpZUphci5wcm90b3R5cGVbbWV0aG9kKydTeW5jJ10gPSBzeW5jV3JhcChtZXRob2QpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDb29raWVKYXI6IENvb2tpZUphcixcbiAgQ29va2llOiBDb29raWUsXG4gIFN0b3JlOiBTdG9yZSxcbiAgTWVtb3J5Q29va2llU3RvcmU6IE1lbW9yeUNvb2tpZVN0b3JlLFxuICBwYXJzZURhdGU6IHBhcnNlRGF0ZSxcbiAgZm9ybWF0RGF0ZTogZm9ybWF0RGF0ZSxcbiAgcGFyc2U6IHBhcnNlLFxuICBmcm9tSlNPTjogZnJvbUpTT04sXG4gIGRvbWFpbk1hdGNoOiBkb21haW5NYXRjaCxcbiAgZGVmYXVsdFBhdGg6IGRlZmF1bHRQYXRoLFxuICBwYXRoTWF0Y2g6IHBhdGhNYXRjaCxcbiAgZ2V0UHVibGljU3VmZml4OiBwdWJzdWZmaXguZ2V0UHVibGljU3VmZml4LFxuICBjb29raWVDb21wYXJlOiBjb29raWVDb21wYXJlLFxuICBwZXJtdXRlRG9tYWluOiByZXF1aXJlKCcuL3Blcm11dGVEb21haW4nKS5wZXJtdXRlRG9tYWluLFxuICBwZXJtdXRlUGF0aDogcGVybXV0ZVBhdGgsXG4gIGNhbm9uaWNhbERvbWFpbjogY2Fub25pY2FsRG9tYWluXG59O1xuIiwiLyohXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFNhbGVzZm9yY2UuY29tLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNhbGVzZm9yY2UuY29tIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXlcbiAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXRcbiAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkVcbiAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JcbiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GXG4gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1NcbiAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOXG4gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKVxuICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEVcbiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG4ndXNlIHN0cmljdCc7XG52YXIgU3RvcmUgPSByZXF1aXJlKCcuL3N0b3JlJykuU3RvcmU7XG52YXIgcGVybXV0ZURvbWFpbiA9IHJlcXVpcmUoJy4vcGVybXV0ZURvbWFpbicpLnBlcm11dGVEb21haW47XG52YXIgcGF0aE1hdGNoID0gcmVxdWlyZSgnLi9wYXRoTWF0Y2gnKS5wYXRoTWF0Y2g7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuZnVuY3Rpb24gTWVtb3J5Q29va2llU3RvcmUoKSB7XG4gIFN0b3JlLmNhbGwodGhpcyk7XG4gIHRoaXMuaWR4ID0ge307XG59XG51dGlsLmluaGVyaXRzKE1lbW9yeUNvb2tpZVN0b3JlLCBTdG9yZSk7XG5leHBvcnRzLk1lbW9yeUNvb2tpZVN0b3JlID0gTWVtb3J5Q29va2llU3RvcmU7XG5NZW1vcnlDb29raWVTdG9yZS5wcm90b3R5cGUuaWR4ID0gbnVsbDtcblxuLy8gU2luY2UgaXQncyBqdXN0IGEgc3RydWN0IGluIFJBTSwgdGhpcyBTdG9yZSBpcyBzeW5jaHJvbm91c1xuTWVtb3J5Q29va2llU3RvcmUucHJvdG90eXBlLnN5bmNocm9ub3VzID0gdHJ1ZTtcblxuLy8gZm9yY2UgYSBkZWZhdWx0IGRlcHRoOlxuTWVtb3J5Q29va2llU3RvcmUucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFwieyBpZHg6IFwiK3V0aWwuaW5zcGVjdCh0aGlzLmlkeCwgZmFsc2UsIDIpKycgfSc7XG59O1xuXG5NZW1vcnlDb29raWVTdG9yZS5wcm90b3R5cGUuZmluZENvb2tpZSA9IGZ1bmN0aW9uKGRvbWFpbiwgcGF0aCwga2V5LCBjYikge1xuICBpZiAoIXRoaXMuaWR4W2RvbWFpbl0pIHtcbiAgICByZXR1cm4gY2IobnVsbCx1bmRlZmluZWQpO1xuICB9XG4gIGlmICghdGhpcy5pZHhbZG9tYWluXVtwYXRoXSkge1xuICAgIHJldHVybiBjYihudWxsLHVuZGVmaW5lZCk7XG4gIH1cbiAgcmV0dXJuIGNiKG51bGwsdGhpcy5pZHhbZG9tYWluXVtwYXRoXVtrZXldfHxudWxsKTtcbn07XG5cbk1lbW9yeUNvb2tpZVN0b3JlLnByb3RvdHlwZS5maW5kQ29va2llcyA9IGZ1bmN0aW9uKGRvbWFpbiwgcGF0aCwgY2IpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgaWYgKCFkb21haW4pIHtcbiAgICByZXR1cm4gY2IobnVsbCxbXSk7XG4gIH1cblxuICB2YXIgcGF0aE1hdGNoZXI7XG4gIGlmICghcGF0aCkge1xuICAgIC8vIG51bGwgbWVhbnMgXCJhbGwgcGF0aHNcIlxuICAgIHBhdGhNYXRjaGVyID0gZnVuY3Rpb24gbWF0Y2hBbGwoZG9tYWluSW5kZXgpIHtcbiAgICAgIGZvciAodmFyIGN1clBhdGggaW4gZG9tYWluSW5kZXgpIHtcbiAgICAgICAgdmFyIHBhdGhJbmRleCA9IGRvbWFpbkluZGV4W2N1clBhdGhdO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGF0aEluZGV4KSB7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKHBhdGhJbmRleFtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgfSBlbHNlIHtcbiAgICBwYXRoTWF0Y2hlciA9IGZ1bmN0aW9uIG1hdGNoUkZDKGRvbWFpbkluZGV4KSB7XG4gICAgICAgLy9OT1RFOiB3ZSBzaG91bGQgdXNlIHBhdGgtbWF0Y2ggYWxnb3JpdGhtIGZyb20gUzUuMS40IGhlcmVcbiAgICAgICAvLyhzZWUgOiBodHRwczovL2dpdGh1Yi5jb20vQ2hyb21pdW1XZWJBcHBzL2Nocm9taXVtL2Jsb2IvYjNkM2I0ZGE4YmI5NGMxYjJlMDYxNjAwZGYxMDZkNTkwZmRhMzYyMC9uZXQvY29va2llcy9jYW5vbmljYWxfY29va2llLmNjI0wyOTkpXG4gICAgICAgT2JqZWN0LmtleXMoZG9tYWluSW5kZXgpLmZvckVhY2goZnVuY3Rpb24gKGNvb2tpZVBhdGgpIHtcbiAgICAgICAgIGlmIChwYXRoTWF0Y2gocGF0aCwgY29va2llUGF0aCkpIHtcbiAgICAgICAgICAgdmFyIHBhdGhJbmRleCA9IGRvbWFpbkluZGV4W2Nvb2tpZVBhdGhdO1xuXG4gICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXRoSW5kZXgpIHtcbiAgICAgICAgICAgICByZXN1bHRzLnB1c2gocGF0aEluZGV4W2tleV0pO1xuICAgICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICAgfSk7XG4gICAgIH07XG4gIH1cblxuICB2YXIgZG9tYWlucyA9IHBlcm11dGVEb21haW4oZG9tYWluKSB8fCBbZG9tYWluXTtcbiAgdmFyIGlkeCA9IHRoaXMuaWR4O1xuICBkb21haW5zLmZvckVhY2goZnVuY3Rpb24oY3VyRG9tYWluKSB7XG4gICAgdmFyIGRvbWFpbkluZGV4ID0gaWR4W2N1ckRvbWFpbl07XG4gICAgaWYgKCFkb21haW5JbmRleCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwYXRoTWF0Y2hlcihkb21haW5JbmRleCk7XG4gIH0pO1xuXG4gIGNiKG51bGwscmVzdWx0cyk7XG59O1xuXG5NZW1vcnlDb29raWVTdG9yZS5wcm90b3R5cGUucHV0Q29va2llID0gZnVuY3Rpb24oY29va2llLCBjYikge1xuICBpZiAoIXRoaXMuaWR4W2Nvb2tpZS5kb21haW5dKSB7XG4gICAgdGhpcy5pZHhbY29va2llLmRvbWFpbl0gPSB7fTtcbiAgfVxuICBpZiAoIXRoaXMuaWR4W2Nvb2tpZS5kb21haW5dW2Nvb2tpZS5wYXRoXSkge1xuICAgIHRoaXMuaWR4W2Nvb2tpZS5kb21haW5dW2Nvb2tpZS5wYXRoXSA9IHt9O1xuICB9XG4gIHRoaXMuaWR4W2Nvb2tpZS5kb21haW5dW2Nvb2tpZS5wYXRoXVtjb29raWUua2V5XSA9IGNvb2tpZTtcbiAgY2IobnVsbCk7XG59O1xuXG5NZW1vcnlDb29raWVTdG9yZS5wcm90b3R5cGUudXBkYXRlQ29va2llID0gZnVuY3Rpb24ob2xkQ29va2llLCBuZXdDb29raWUsIGNiKSB7XG4gIC8vIHVwZGF0ZUNvb2tpZSgpIG1heSBhdm9pZCB1cGRhdGluZyBjb29raWVzIHRoYXQgYXJlIGlkZW50aWNhbC4gIEZvciBleGFtcGxlLFxuICAvLyBsYXN0QWNjZXNzZWQgbWF5IG5vdCBiZSBpbXBvcnRhbnQgdG8gc29tZSBzdG9yZXMgYW5kIGFuIGVxdWFsaXR5XG4gIC8vIGNvbXBhcmlzb24gY291bGQgZXhjbHVkZSB0aGF0IGZpZWxkLlxuICB0aGlzLnB1dENvb2tpZShuZXdDb29raWUsY2IpO1xufTtcblxuTWVtb3J5Q29va2llU3RvcmUucHJvdG90eXBlLnJlbW92ZUNvb2tpZSA9IGZ1bmN0aW9uKGRvbWFpbiwgcGF0aCwga2V5LCBjYikge1xuICBpZiAodGhpcy5pZHhbZG9tYWluXSAmJiB0aGlzLmlkeFtkb21haW5dW3BhdGhdICYmIHRoaXMuaWR4W2RvbWFpbl1bcGF0aF1ba2V5XSkge1xuICAgIGRlbGV0ZSB0aGlzLmlkeFtkb21haW5dW3BhdGhdW2tleV07XG4gIH1cbiAgY2IobnVsbCk7XG59O1xuXG5NZW1vcnlDb29raWVTdG9yZS5wcm90b3R5cGUucmVtb3ZlQ29va2llcyA9IGZ1bmN0aW9uKGRvbWFpbiwgcGF0aCwgY2IpIHtcbiAgaWYgKHRoaXMuaWR4W2RvbWFpbl0pIHtcbiAgICBpZiAocGF0aCkge1xuICAgICAgZGVsZXRlIHRoaXMuaWR4W2RvbWFpbl1bcGF0aF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmlkeFtkb21haW5dO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2IobnVsbCk7XG59O1xuXG5NZW1vcnlDb29raWVTdG9yZS5wcm90b3R5cGUuZ2V0QWxsQ29va2llcyA9IGZ1bmN0aW9uKGNiKSB7XG4gIHZhciBjb29raWVzID0gW107XG4gIHZhciBpZHggPSB0aGlzLmlkeDtcblxuICB2YXIgZG9tYWlucyA9IE9iamVjdC5rZXlzKGlkeCk7XG4gIGRvbWFpbnMuZm9yRWFjaChmdW5jdGlvbihkb21haW4pIHtcbiAgICB2YXIgcGF0aHMgPSBPYmplY3Qua2V5cyhpZHhbZG9tYWluXSk7XG4gICAgcGF0aHMuZm9yRWFjaChmdW5jdGlvbihwYXRoKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGlkeFtkb21haW5dW3BhdGhdKTtcbiAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvb2tpZXMucHVzaChpZHhbZG9tYWluXVtwYXRoXVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFNvcnQgYnkgY3JlYXRpb25JbmRleCBzbyBkZXNlcmlhbGl6aW5nIHJldGFpbnMgdGhlIGNyZWF0aW9uIG9yZGVyLlxuICAvLyBXaGVuIGltcGxlbWVudGluZyB5b3VyIG93biBzdG9yZSwgdGhpcyBTSE9VTEQgcmV0YWluIHRoZSBvcmRlciB0b29cbiAgY29va2llcy5zb3J0KGZ1bmN0aW9uKGEsYikge1xuICAgIHJldHVybiAoYS5jcmVhdGlvbkluZGV4fHwwKSAtIChiLmNyZWF0aW9uSW5kZXh8fDApO1xuICB9KTtcblxuICBjYihudWxsLCBjb29raWVzKTtcbn07XG4iLCIvKiFcbiAqIENvcHlyaWdodCAoYykgMjAxNSwgU2FsZXNmb3JjZS5jb20sIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgU2FsZXNmb3JjZS5jb20gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heVxuICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dFxuICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRVxuICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUlxuICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0ZcbiAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTU1xuICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU5cbiAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpXG4gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRVxuICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuLypcbiAqIFwiQSByZXF1ZXN0LXBhdGggcGF0aC1tYXRjaGVzIGEgZ2l2ZW4gY29va2llLXBhdGggaWYgYXQgbGVhc3Qgb25lIG9mIHRoZVxuICogZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZHM6XCJcbiAqL1xuZnVuY3Rpb24gcGF0aE1hdGNoIChyZXFQYXRoLCBjb29raWVQYXRoKSB7XG4gIC8vIFwibyAgVGhlIGNvb2tpZS1wYXRoIGFuZCB0aGUgcmVxdWVzdC1wYXRoIGFyZSBpZGVudGljYWwuXCJcbiAgaWYgKGNvb2tpZVBhdGggPT09IHJlcVBhdGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciBpZHggPSByZXFQYXRoLmluZGV4T2YoY29va2llUGF0aCk7XG4gIGlmIChpZHggPT09IDApIHtcbiAgICAvLyBcIm8gIFRoZSBjb29raWUtcGF0aCBpcyBhIHByZWZpeCBvZiB0aGUgcmVxdWVzdC1wYXRoLCBhbmQgdGhlIGxhc3RcbiAgICAvLyBjaGFyYWN0ZXIgb2YgdGhlIGNvb2tpZS1wYXRoIGlzICV4MkYgKFwiL1wiKS5cIlxuICAgIGlmIChjb29raWVQYXRoLnN1YnN0cigtMSkgPT09IFwiL1wiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBcIiBvICBUaGUgY29va2llLXBhdGggaXMgYSBwcmVmaXggb2YgdGhlIHJlcXVlc3QtcGF0aCwgYW5kIHRoZSBmaXJzdFxuICAgIC8vIGNoYXJhY3RlciBvZiB0aGUgcmVxdWVzdC1wYXRoIHRoYXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBjb29raWUtIHBhdGhcbiAgICAvLyBpcyBhICV4MkYgKFwiL1wiKSBjaGFyYWN0ZXIuXCJcbiAgICBpZiAocmVxUGF0aC5zdWJzdHIoY29va2llUGF0aC5sZW5ndGgsIDEpID09PSBcIi9cIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnRzLnBhdGhNYXRjaCA9IHBhdGhNYXRjaDtcbiIsIi8qIVxuICogQ29weXJpZ2h0IChjKSAyMDE1LCBTYWxlc2ZvcmNlLmNvbSwgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTYWxlc2ZvcmNlLmNvbSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5XG4gKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0XG4gKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFXG4gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SXG4gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRlxuICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTXG4gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTlxuICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSlcbiAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFXG4gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcHVic3VmZml4ID0gcmVxdWlyZSgnLi9wdWJzdWZmaXgnKTtcblxuLy8gR2l2ZXMgdGhlIHBlcm11dGF0aW9uIG9mIGFsbCBwb3NzaWJsZSBkb21haW5NYXRjaCgpZXMgb2YgYSBnaXZlbiBkb21haW4uIFRoZVxuLy8gYXJyYXkgaXMgaW4gc2hvcnRlc3QtdG8tbG9uZ2VzdCBvcmRlci4gIEhhbmR5IGZvciBpbmRleGluZy5cbmZ1bmN0aW9uIHBlcm11dGVEb21haW4gKGRvbWFpbikge1xuICB2YXIgcHViU3VmID0gcHVic3VmZml4LmdldFB1YmxpY1N1ZmZpeChkb21haW4pO1xuICBpZiAoIXB1YlN1Zikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChwdWJTdWYgPT0gZG9tYWluKSB7XG4gICAgcmV0dXJuIFtkb21haW5dO1xuICB9XG5cbiAgdmFyIHByZWZpeCA9IGRvbWFpbi5zbGljZSgwLCAtKHB1YlN1Zi5sZW5ndGggKyAxKSk7IC8vIFwiLmV4YW1wbGUuY29tXCJcbiAgdmFyIHBhcnRzID0gcHJlZml4LnNwbGl0KCcuJykucmV2ZXJzZSgpO1xuICB2YXIgY3VyID0gcHViU3VmO1xuICB2YXIgcGVybXV0YXRpb25zID0gW2N1cl07XG4gIHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcbiAgICBjdXIgPSBwYXJ0cy5zaGlmdCgpICsgJy4nICsgY3VyO1xuICAgIHBlcm11dGF0aW9ucy5wdXNoKGN1cik7XG4gIH1cbiAgcmV0dXJuIHBlcm11dGF0aW9ucztcbn1cblxuZXhwb3J0cy5wZXJtdXRlRG9tYWluID0gcGVybXV0ZURvbWFpbjtcbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBBVVRPTUFUSUNBTExZIEdFTkVSQVRFRCBieSBnZW5lcmF0ZS1wdWJzdWZmaXguanMgKlxuICogICAgICAgICAgICAgICAgICBETyBOT1QgRURJVCEgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxubW9kdWxlLmV4cG9ydHMuZ2V0UHVibGljU3VmZml4ID0gZnVuY3Rpb24gZ2V0UHVibGljU3VmZml4KGRvbWFpbikge1xuICAvKiFcbiAgICogQ29weXJpZ2h0IChjKSAyMDE1LCBTYWxlc2ZvcmNlLmNvbSwgSW5jLlxuICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICAgKlxuICAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gICAqXG4gICAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICpcbiAgICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNhbGVzZm9yY2UuY29tIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXlcbiAgICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dFxuICAgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gICAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRVxuICAgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SXG4gICAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GXG4gICAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTU1xuICAgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTlxuICAgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKVxuICAgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRVxuICAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAgICovXG4gIGlmICghZG9tYWluKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGRvbWFpbi5tYXRjaCgvXlxcLi8pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIGFzY2lpRG9tYWluID0gcHVueWNvZGUudG9BU0NJSShkb21haW4pO1xuICB2YXIgY29udmVydGVkID0gZmFsc2U7XG4gIGlmIChhc2NpaURvbWFpbiAhPT0gZG9tYWluKSB7XG4gICAgZG9tYWluID0gYXNjaWlEb21haW47XG4gICAgY29udmVydGVkID0gdHJ1ZTtcbiAgfVxuICBpZiAoaW5kZXhbZG9tYWluXSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZG9tYWluID0gZG9tYWluLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBwYXJ0cyA9IGRvbWFpbi5zcGxpdCgnLicpLnJldmVyc2UoKTtcblxuICB2YXIgc3VmZml4ID0gJyc7XG4gIHZhciBzdWZmaXhMZW4gPSAwO1xuICBmb3IgKHZhciBpPTA7IGk8cGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGFydCA9IHBhcnRzW2ldO1xuICAgIHZhciBzdGFyc3RyID0gJyonK3N1ZmZpeDtcbiAgICB2YXIgcGFydHN0ciA9IHBhcnQrc3VmZml4O1xuXG4gICAgaWYgKGluZGV4W3N0YXJzdHJdKSB7IC8vIHN0YXIgcnVsZSBtYXRjaGVzXG4gICAgICBzdWZmaXhMZW4gPSBpKzE7XG4gICAgICBpZiAoaW5kZXhbcGFydHN0cl0gPT09IGZhbHNlKSB7IC8vIGV4Y2VwdGlvbiBydWxlIG1hdGNoZXMgKE5COiBmYWxzZSwgbm90IHVuZGVmaW5lZClcbiAgICAgICAgc3VmZml4TGVuLS07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpbmRleFtwYXJ0c3RyXSkgeyAvLyBleGFjdCBtYXRjaCwgbm90IGV4Y2VwdGlvblxuICAgICAgc3VmZml4TGVuID0gaSsxO1xuICAgIH1cblxuICAgIHN1ZmZpeCA9ICcuJytwYXJ0c3RyO1xuICB9XG5cbiAgaWYgKGluZGV4WycqJytzdWZmaXhdKSB7IC8vICouZG9tYWluIGV4aXN0cyAoZS5nLiAqLmt5b3RvLmpwIGZvciBkb21haW49J2t5b3RvLmpwJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdWZmaXhMZW4gPSBzdWZmaXhMZW4gfHwgMTtcbiAgaWYgKHBhcnRzLmxlbmd0aCA+IHN1ZmZpeExlbikge1xuICAgIHZhciBwdWJsaWNTdWZmaXggPSBwYXJ0cy5zbGljZSgwLHN1ZmZpeExlbisxKS5yZXZlcnNlKCkuam9pbignLicpO1xuICAgIHJldHVybiBjb252ZXJ0ZWQgPyBwdW55Y29kZS50b1VuaWNvZGUocHVibGljU3VmZml4KSA6IHB1YmxpY1N1ZmZpeDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuLy8gVGhlIGZvbGxvd2luZyBnZW5lcmF0ZWQgc3RydWN0dXJlIGlzIHVzZWQgdW5kZXIgdGhlIE1QTCB2ZXJzaW9uIDIuMFxuLy8gU2VlIHB1YmxpYy1zdWZmaXgudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uXG5cbnZhciBpbmRleCA9IG1vZHVsZS5leHBvcnRzLmluZGV4ID0gT2JqZWN0LmZyZWV6ZShcbntcImFjXCI6dHJ1ZSxcImNvbS5hY1wiOnRydWUsXCJlZHUuYWNcIjp0cnVlLFwiZ292LmFjXCI6dHJ1ZSxcIm5ldC5hY1wiOnRydWUsXCJtaWwuYWNcIjp0cnVlLFwib3JnLmFjXCI6dHJ1ZSxcImFkXCI6dHJ1ZSxcIm5vbS5hZFwiOnRydWUsXCJhZVwiOnRydWUsXCJjby5hZVwiOnRydWUsXCJuZXQuYWVcIjp0cnVlLFwib3JnLmFlXCI6dHJ1ZSxcInNjaC5hZVwiOnRydWUsXCJhYy5hZVwiOnRydWUsXCJnb3YuYWVcIjp0cnVlLFwibWlsLmFlXCI6dHJ1ZSxcImFlcm9cIjp0cnVlLFwiYWNjaWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJvXCI6dHJ1ZSxcImFjY2lkZW50LXByZXZlbnRpb24uYWVyb1wiOnRydWUsXCJhZXJvYmF0aWMuYWVyb1wiOnRydWUsXCJhZXJvY2x1Yi5hZXJvXCI6dHJ1ZSxcImFlcm9kcm9tZS5hZXJvXCI6dHJ1ZSxcImFnZW50cy5hZXJvXCI6dHJ1ZSxcImFpcmNyYWZ0LmFlcm9cIjp0cnVlLFwiYWlybGluZS5hZXJvXCI6dHJ1ZSxcImFpcnBvcnQuYWVyb1wiOnRydWUsXCJhaXItc3VydmVpbGxhbmNlLmFlcm9cIjp0cnVlLFwiYWlydHJhZmZpYy5hZXJvXCI6dHJ1ZSxcImFpci10cmFmZmljLWNvbnRyb2wuYWVyb1wiOnRydWUsXCJhbWJ1bGFuY2UuYWVyb1wiOnRydWUsXCJhbXVzZW1lbnQuYWVyb1wiOnRydWUsXCJhc3NvY2lhdGlvbi5hZXJvXCI6dHJ1ZSxcImF1dGhvci5hZXJvXCI6dHJ1ZSxcImJhbGxvb25pbmcuYWVyb1wiOnRydWUsXCJicm9rZXIuYWVyb1wiOnRydWUsXCJjYWEuYWVyb1wiOnRydWUsXCJjYXJnby5hZXJvXCI6dHJ1ZSxcImNhdGVyaW5nLmFlcm9cIjp0cnVlLFwiY2VydGlmaWNhdGlvbi5hZXJvXCI6dHJ1ZSxcImNoYW1waW9uc2hpcC5hZXJvXCI6dHJ1ZSxcImNoYXJ0ZXIuYWVyb1wiOnRydWUsXCJjaXZpbGF2aWF0aW9uLmFlcm9cIjp0cnVlLFwiY2x1Yi5hZXJvXCI6dHJ1ZSxcImNvbmZlcmVuY2UuYWVyb1wiOnRydWUsXCJjb25zdWx0YW50LmFlcm9cIjp0cnVlLFwiY29uc3VsdGluZy5hZXJvXCI6dHJ1ZSxcImNvbnRyb2wuYWVyb1wiOnRydWUsXCJjb3VuY2lsLmFlcm9cIjp0cnVlLFwiY3Jldy5hZXJvXCI6dHJ1ZSxcImRlc2lnbi5hZXJvXCI6dHJ1ZSxcImRnY2EuYWVyb1wiOnRydWUsXCJlZHVjYXRvci5hZXJvXCI6dHJ1ZSxcImVtZXJnZW5jeS5hZXJvXCI6dHJ1ZSxcImVuZ2luZS5hZXJvXCI6dHJ1ZSxcImVuZ2luZWVyLmFlcm9cIjp0cnVlLFwiZW50ZXJ0YWlubWVudC5hZXJvXCI6dHJ1ZSxcImVxdWlwbWVudC5hZXJvXCI6dHJ1ZSxcImV4Y2hhbmdlLmFlcm9cIjp0cnVlLFwiZXhwcmVzcy5hZXJvXCI6dHJ1ZSxcImZlZGVyYXRpb24uYWVyb1wiOnRydWUsXCJmbGlnaHQuYWVyb1wiOnRydWUsXCJmcmVpZ2h0LmFlcm9cIjp0cnVlLFwiZnVlbC5hZXJvXCI6dHJ1ZSxcImdsaWRpbmcuYWVyb1wiOnRydWUsXCJnb3Zlcm5tZW50LmFlcm9cIjp0cnVlLFwiZ3JvdW5kaGFuZGxpbmcuYWVyb1wiOnRydWUsXCJncm91cC5hZXJvXCI6dHJ1ZSxcImhhbmdnbGlkaW5nLmFlcm9cIjp0cnVlLFwiaG9tZWJ1aWx0LmFlcm9cIjp0cnVlLFwiaW5zdXJhbmNlLmFlcm9cIjp0cnVlLFwiam91cm5hbC5hZXJvXCI6dHJ1ZSxcImpvdXJuYWxpc3QuYWVyb1wiOnRydWUsXCJsZWFzaW5nLmFlcm9cIjp0cnVlLFwibG9naXN0aWNzLmFlcm9cIjp0cnVlLFwibWFnYXppbmUuYWVyb1wiOnRydWUsXCJtYWludGVuYW5jZS5hZXJvXCI6dHJ1ZSxcIm1hcmtldHBsYWNlLmFlcm9cIjp0cnVlLFwibWVkaWEuYWVyb1wiOnRydWUsXCJtaWNyb2xpZ2h0LmFlcm9cIjp0cnVlLFwibW9kZWxsaW5nLmFlcm9cIjp0cnVlLFwibmF2aWdhdGlvbi5hZXJvXCI6dHJ1ZSxcInBhcmFjaHV0aW5nLmFlcm9cIjp0cnVlLFwicGFyYWdsaWRpbmcuYWVyb1wiOnRydWUsXCJwYXNzZW5nZXItYXNzb2NpYXRpb24uYWVyb1wiOnRydWUsXCJwaWxvdC5hZXJvXCI6dHJ1ZSxcInByZXNzLmFlcm9cIjp0cnVlLFwicHJvZHVjdGlvbi5hZXJvXCI6dHJ1ZSxcInJlY3JlYXRpb24uYWVyb1wiOnRydWUsXCJyZXBib2R5LmFlcm9cIjp0cnVlLFwicmVzLmFlcm9cIjp0cnVlLFwicmVzZWFyY2guYWVyb1wiOnRydWUsXCJyb3RvcmNyYWZ0LmFlcm9cIjp0cnVlLFwic2FmZXR5LmFlcm9cIjp0cnVlLFwic2NpZW50aXN0LmFlcm9cIjp0cnVlLFwic2VydmljZXMuYWVyb1wiOnRydWUsXCJzaG93LmFlcm9cIjp0cnVlLFwic2t5ZGl2aW5nLmFlcm9cIjp0cnVlLFwic29mdHdhcmUuYWVyb1wiOnRydWUsXCJzdHVkZW50LmFlcm9cIjp0cnVlLFwidGF4aS5hZXJvXCI6dHJ1ZSxcInRyYWRlci5hZXJvXCI6dHJ1ZSxcInRyYWRpbmcuYWVyb1wiOnRydWUsXCJ0cmFpbmVyLmFlcm9cIjp0cnVlLFwidW5pb24uYWVyb1wiOnRydWUsXCJ3b3JraW5nZ3JvdXAuYWVyb1wiOnRydWUsXCJ3b3Jrcy5hZXJvXCI6dHJ1ZSxcImFmXCI6dHJ1ZSxcImdvdi5hZlwiOnRydWUsXCJjb20uYWZcIjp0cnVlLFwib3JnLmFmXCI6dHJ1ZSxcIm5ldC5hZlwiOnRydWUsXCJlZHUuYWZcIjp0cnVlLFwiYWdcIjp0cnVlLFwiY29tLmFnXCI6dHJ1ZSxcIm9yZy5hZ1wiOnRydWUsXCJuZXQuYWdcIjp0cnVlLFwiY28uYWdcIjp0cnVlLFwibm9tLmFnXCI6dHJ1ZSxcImFpXCI6dHJ1ZSxcIm9mZi5haVwiOnRydWUsXCJjb20uYWlcIjp0cnVlLFwibmV0LmFpXCI6dHJ1ZSxcIm9yZy5haVwiOnRydWUsXCJhbFwiOnRydWUsXCJjb20uYWxcIjp0cnVlLFwiZWR1LmFsXCI6dHJ1ZSxcImdvdi5hbFwiOnRydWUsXCJtaWwuYWxcIjp0cnVlLFwibmV0LmFsXCI6dHJ1ZSxcIm9yZy5hbFwiOnRydWUsXCJhbVwiOnRydWUsXCJhblwiOnRydWUsXCJjb20uYW5cIjp0cnVlLFwibmV0LmFuXCI6dHJ1ZSxcIm9yZy5hblwiOnRydWUsXCJlZHUuYW5cIjp0cnVlLFwiYW9cIjp0cnVlLFwiZWQuYW9cIjp0cnVlLFwiZ3YuYW9cIjp0cnVlLFwib2cuYW9cIjp0cnVlLFwiY28uYW9cIjp0cnVlLFwicGIuYW9cIjp0cnVlLFwiaXQuYW9cIjp0cnVlLFwiYXFcIjp0cnVlLFwiYXJcIjp0cnVlLFwiY29tLmFyXCI6dHJ1ZSxcImVkdS5hclwiOnRydWUsXCJnb2IuYXJcIjp0cnVlLFwiZ292LmFyXCI6dHJ1ZSxcImludC5hclwiOnRydWUsXCJtaWwuYXJcIjp0cnVlLFwibmV0LmFyXCI6dHJ1ZSxcIm9yZy5hclwiOnRydWUsXCJ0dXIuYXJcIjp0cnVlLFwiYXJwYVwiOnRydWUsXCJlMTY0LmFycGFcIjp0cnVlLFwiaW4tYWRkci5hcnBhXCI6dHJ1ZSxcImlwNi5hcnBhXCI6dHJ1ZSxcImlyaXMuYXJwYVwiOnRydWUsXCJ1cmkuYXJwYVwiOnRydWUsXCJ1cm4uYXJwYVwiOnRydWUsXCJhc1wiOnRydWUsXCJnb3YuYXNcIjp0cnVlLFwiYXNpYVwiOnRydWUsXCJhdFwiOnRydWUsXCJhYy5hdFwiOnRydWUsXCJjby5hdFwiOnRydWUsXCJndi5hdFwiOnRydWUsXCJvci5hdFwiOnRydWUsXCJhdVwiOnRydWUsXCJjb20uYXVcIjp0cnVlLFwibmV0LmF1XCI6dHJ1ZSxcIm9yZy5hdVwiOnRydWUsXCJlZHUuYXVcIjp0cnVlLFwiZ292LmF1XCI6dHJ1ZSxcImFzbi5hdVwiOnRydWUsXCJpZC5hdVwiOnRydWUsXCJpbmZvLmF1XCI6dHJ1ZSxcImNvbmYuYXVcIjp0cnVlLFwib3ouYXVcIjp0cnVlLFwiYWN0LmF1XCI6dHJ1ZSxcIm5zdy5hdVwiOnRydWUsXCJudC5hdVwiOnRydWUsXCJxbGQuYXVcIjp0cnVlLFwic2EuYXVcIjp0cnVlLFwidGFzLmF1XCI6dHJ1ZSxcInZpYy5hdVwiOnRydWUsXCJ3YS5hdVwiOnRydWUsXCJhY3QuZWR1LmF1XCI6dHJ1ZSxcIm5zdy5lZHUuYXVcIjp0cnVlLFwibnQuZWR1LmF1XCI6dHJ1ZSxcInFsZC5lZHUuYXVcIjp0cnVlLFwic2EuZWR1LmF1XCI6dHJ1ZSxcInRhcy5lZHUuYXVcIjp0cnVlLFwidmljLmVkdS5hdVwiOnRydWUsXCJ3YS5lZHUuYXVcIjp0cnVlLFwicWxkLmdvdi5hdVwiOnRydWUsXCJzYS5nb3YuYXVcIjp0cnVlLFwidGFzLmdvdi5hdVwiOnRydWUsXCJ2aWMuZ292LmF1XCI6dHJ1ZSxcIndhLmdvdi5hdVwiOnRydWUsXCJhd1wiOnRydWUsXCJjb20uYXdcIjp0cnVlLFwiYXhcIjp0cnVlLFwiYXpcIjp0cnVlLFwiY29tLmF6XCI6dHJ1ZSxcIm5ldC5helwiOnRydWUsXCJpbnQuYXpcIjp0cnVlLFwiZ292LmF6XCI6dHJ1ZSxcIm9yZy5helwiOnRydWUsXCJlZHUuYXpcIjp0cnVlLFwiaW5mby5helwiOnRydWUsXCJwcC5helwiOnRydWUsXCJtaWwuYXpcIjp0cnVlLFwibmFtZS5helwiOnRydWUsXCJwcm8uYXpcIjp0cnVlLFwiYml6LmF6XCI6dHJ1ZSxcImJhXCI6dHJ1ZSxcIm9yZy5iYVwiOnRydWUsXCJuZXQuYmFcIjp0cnVlLFwiZWR1LmJhXCI6dHJ1ZSxcImdvdi5iYVwiOnRydWUsXCJtaWwuYmFcIjp0cnVlLFwidW5zYS5iYVwiOnRydWUsXCJ1bmJpLmJhXCI6dHJ1ZSxcImNvLmJhXCI6dHJ1ZSxcImNvbS5iYVwiOnRydWUsXCJycy5iYVwiOnRydWUsXCJiYlwiOnRydWUsXCJiaXouYmJcIjp0cnVlLFwiY28uYmJcIjp0cnVlLFwiY29tLmJiXCI6dHJ1ZSxcImVkdS5iYlwiOnRydWUsXCJnb3YuYmJcIjp0cnVlLFwiaW5mby5iYlwiOnRydWUsXCJuZXQuYmJcIjp0cnVlLFwib3JnLmJiXCI6dHJ1ZSxcInN0b3JlLmJiXCI6dHJ1ZSxcInR2LmJiXCI6dHJ1ZSxcIiouYmRcIjp0cnVlLFwiYmVcIjp0cnVlLFwiYWMuYmVcIjp0cnVlLFwiYmZcIjp0cnVlLFwiZ292LmJmXCI6dHJ1ZSxcImJnXCI6dHJ1ZSxcImEuYmdcIjp0cnVlLFwiYi5iZ1wiOnRydWUsXCJjLmJnXCI6dHJ1ZSxcImQuYmdcIjp0cnVlLFwiZS5iZ1wiOnRydWUsXCJmLmJnXCI6dHJ1ZSxcImcuYmdcIjp0cnVlLFwiaC5iZ1wiOnRydWUsXCJpLmJnXCI6dHJ1ZSxcImouYmdcIjp0cnVlLFwiay5iZ1wiOnRydWUsXCJsLmJnXCI6dHJ1ZSxcIm0uYmdcIjp0cnVlLFwibi5iZ1wiOnRydWUsXCJvLmJnXCI6dHJ1ZSxcInAuYmdcIjp0cnVlLFwicS5iZ1wiOnRydWUsXCJyLmJnXCI6dHJ1ZSxcInMuYmdcIjp0cnVlLFwidC5iZ1wiOnRydWUsXCJ1LmJnXCI6dHJ1ZSxcInYuYmdcIjp0cnVlLFwidy5iZ1wiOnRydWUsXCJ4LmJnXCI6dHJ1ZSxcInkuYmdcIjp0cnVlLFwiei5iZ1wiOnRydWUsXCIwLmJnXCI6dHJ1ZSxcIjEuYmdcIjp0cnVlLFwiMi5iZ1wiOnRydWUsXCIzLmJnXCI6dHJ1ZSxcIjQuYmdcIjp0cnVlLFwiNS5iZ1wiOnRydWUsXCI2LmJnXCI6dHJ1ZSxcIjcuYmdcIjp0cnVlLFwiOC5iZ1wiOnRydWUsXCI5LmJnXCI6dHJ1ZSxcImJoXCI6dHJ1ZSxcImNvbS5iaFwiOnRydWUsXCJlZHUuYmhcIjp0cnVlLFwibmV0LmJoXCI6dHJ1ZSxcIm9yZy5iaFwiOnRydWUsXCJnb3YuYmhcIjp0cnVlLFwiYmlcIjp0cnVlLFwiY28uYmlcIjp0cnVlLFwiY29tLmJpXCI6dHJ1ZSxcImVkdS5iaVwiOnRydWUsXCJvci5iaVwiOnRydWUsXCJvcmcuYmlcIjp0cnVlLFwiYml6XCI6dHJ1ZSxcImJqXCI6dHJ1ZSxcImFzc28uYmpcIjp0cnVlLFwiYmFycmVhdS5ialwiOnRydWUsXCJnb3V2LmJqXCI6dHJ1ZSxcImJtXCI6dHJ1ZSxcImNvbS5ibVwiOnRydWUsXCJlZHUuYm1cIjp0cnVlLFwiZ292LmJtXCI6dHJ1ZSxcIm5ldC5ibVwiOnRydWUsXCJvcmcuYm1cIjp0cnVlLFwiKi5iblwiOnRydWUsXCJib1wiOnRydWUsXCJjb20uYm9cIjp0cnVlLFwiZWR1LmJvXCI6dHJ1ZSxcImdvdi5ib1wiOnRydWUsXCJnb2IuYm9cIjp0cnVlLFwiaW50LmJvXCI6dHJ1ZSxcIm9yZy5ib1wiOnRydWUsXCJuZXQuYm9cIjp0cnVlLFwibWlsLmJvXCI6dHJ1ZSxcInR2LmJvXCI6dHJ1ZSxcImJyXCI6dHJ1ZSxcImFkbS5iclwiOnRydWUsXCJhZHYuYnJcIjp0cnVlLFwiYWdyLmJyXCI6dHJ1ZSxcImFtLmJyXCI6dHJ1ZSxcImFycS5iclwiOnRydWUsXCJhcnQuYnJcIjp0cnVlLFwiYXRvLmJyXCI6dHJ1ZSxcImIuYnJcIjp0cnVlLFwiYmlvLmJyXCI6dHJ1ZSxcImJsb2cuYnJcIjp0cnVlLFwiYm1kLmJyXCI6dHJ1ZSxcImNpbS5iclwiOnRydWUsXCJjbmcuYnJcIjp0cnVlLFwiY250LmJyXCI6dHJ1ZSxcImNvbS5iclwiOnRydWUsXCJjb29wLmJyXCI6dHJ1ZSxcImVjbi5iclwiOnRydWUsXCJlY28uYnJcIjp0cnVlLFwiZWR1LmJyXCI6dHJ1ZSxcImVtcC5iclwiOnRydWUsXCJlbmcuYnJcIjp0cnVlLFwiZXNwLmJyXCI6dHJ1ZSxcImV0Yy5iclwiOnRydWUsXCJldGkuYnJcIjp0cnVlLFwiZmFyLmJyXCI6dHJ1ZSxcImZsb2cuYnJcIjp0cnVlLFwiZm0uYnJcIjp0cnVlLFwiZm5kLmJyXCI6dHJ1ZSxcImZvdC5iclwiOnRydWUsXCJmc3QuYnJcIjp0cnVlLFwiZzEyLmJyXCI6dHJ1ZSxcImdnZi5iclwiOnRydWUsXCJnb3YuYnJcIjp0cnVlLFwiaW1iLmJyXCI6dHJ1ZSxcImluZC5iclwiOnRydWUsXCJpbmYuYnJcIjp0cnVlLFwiam9yLmJyXCI6dHJ1ZSxcImp1cy5iclwiOnRydWUsXCJsZWcuYnJcIjp0cnVlLFwibGVsLmJyXCI6dHJ1ZSxcIm1hdC5iclwiOnRydWUsXCJtZWQuYnJcIjp0cnVlLFwibWlsLmJyXCI6dHJ1ZSxcIm1wLmJyXCI6dHJ1ZSxcIm11cy5iclwiOnRydWUsXCJuZXQuYnJcIjp0cnVlLFwiKi5ub20uYnJcIjp0cnVlLFwibm90LmJyXCI6dHJ1ZSxcIm50ci5iclwiOnRydWUsXCJvZG8uYnJcIjp0cnVlLFwib3JnLmJyXCI6dHJ1ZSxcInBwZy5iclwiOnRydWUsXCJwcm8uYnJcIjp0cnVlLFwicHNjLmJyXCI6dHJ1ZSxcInBzaS5iclwiOnRydWUsXCJxc2wuYnJcIjp0cnVlLFwicmFkaW8uYnJcIjp0cnVlLFwicmVjLmJyXCI6dHJ1ZSxcInNsZy5iclwiOnRydWUsXCJzcnYuYnJcIjp0cnVlLFwidGF4aS5iclwiOnRydWUsXCJ0ZW8uYnJcIjp0cnVlLFwidG1wLmJyXCI6dHJ1ZSxcInRyZC5iclwiOnRydWUsXCJ0dXIuYnJcIjp0cnVlLFwidHYuYnJcIjp0cnVlLFwidmV0LmJyXCI6dHJ1ZSxcInZsb2cuYnJcIjp0cnVlLFwid2lraS5iclwiOnRydWUsXCJ6bGcuYnJcIjp0cnVlLFwiYnNcIjp0cnVlLFwiY29tLmJzXCI6dHJ1ZSxcIm5ldC5ic1wiOnRydWUsXCJvcmcuYnNcIjp0cnVlLFwiZWR1LmJzXCI6dHJ1ZSxcImdvdi5ic1wiOnRydWUsXCJidFwiOnRydWUsXCJjb20uYnRcIjp0cnVlLFwiZWR1LmJ0XCI6dHJ1ZSxcImdvdi5idFwiOnRydWUsXCJuZXQuYnRcIjp0cnVlLFwib3JnLmJ0XCI6dHJ1ZSxcImJ2XCI6dHJ1ZSxcImJ3XCI6dHJ1ZSxcImNvLmJ3XCI6dHJ1ZSxcIm9yZy5id1wiOnRydWUsXCJieVwiOnRydWUsXCJnb3YuYnlcIjp0cnVlLFwibWlsLmJ5XCI6dHJ1ZSxcImNvbS5ieVwiOnRydWUsXCJvZi5ieVwiOnRydWUsXCJielwiOnRydWUsXCJjb20uYnpcIjp0cnVlLFwibmV0LmJ6XCI6dHJ1ZSxcIm9yZy5ielwiOnRydWUsXCJlZHUuYnpcIjp0cnVlLFwiZ292LmJ6XCI6dHJ1ZSxcImNhXCI6dHJ1ZSxcImFiLmNhXCI6dHJ1ZSxcImJjLmNhXCI6dHJ1ZSxcIm1iLmNhXCI6dHJ1ZSxcIm5iLmNhXCI6dHJ1ZSxcIm5mLmNhXCI6dHJ1ZSxcIm5sLmNhXCI6dHJ1ZSxcIm5zLmNhXCI6dHJ1ZSxcIm50LmNhXCI6dHJ1ZSxcIm51LmNhXCI6dHJ1ZSxcIm9uLmNhXCI6dHJ1ZSxcInBlLmNhXCI6dHJ1ZSxcInFjLmNhXCI6dHJ1ZSxcInNrLmNhXCI6dHJ1ZSxcInlrLmNhXCI6dHJ1ZSxcImdjLmNhXCI6dHJ1ZSxcImNhdFwiOnRydWUsXCJjY1wiOnRydWUsXCJjZFwiOnRydWUsXCJnb3YuY2RcIjp0cnVlLFwiY2ZcIjp0cnVlLFwiY2dcIjp0cnVlLFwiY2hcIjp0cnVlLFwiY2lcIjp0cnVlLFwib3JnLmNpXCI6dHJ1ZSxcIm9yLmNpXCI6dHJ1ZSxcImNvbS5jaVwiOnRydWUsXCJjby5jaVwiOnRydWUsXCJlZHUuY2lcIjp0cnVlLFwiZWQuY2lcIjp0cnVlLFwiYWMuY2lcIjp0cnVlLFwibmV0LmNpXCI6dHJ1ZSxcImdvLmNpXCI6dHJ1ZSxcImFzc28uY2lcIjp0cnVlLFwieG4tLWFyb3BvcnQtYnlhLmNpXCI6dHJ1ZSxcImludC5jaVwiOnRydWUsXCJwcmVzc2UuY2lcIjp0cnVlLFwibWQuY2lcIjp0cnVlLFwiZ291di5jaVwiOnRydWUsXCIqLmNrXCI6dHJ1ZSxcInd3dy5ja1wiOmZhbHNlLFwiY2xcIjp0cnVlLFwiZ292LmNsXCI6dHJ1ZSxcImdvYi5jbFwiOnRydWUsXCJjby5jbFwiOnRydWUsXCJtaWwuY2xcIjp0cnVlLFwiY21cIjp0cnVlLFwiY28uY21cIjp0cnVlLFwiY29tLmNtXCI6dHJ1ZSxcImdvdi5jbVwiOnRydWUsXCJuZXQuY21cIjp0cnVlLFwiY25cIjp0cnVlLFwiYWMuY25cIjp0cnVlLFwiY29tLmNuXCI6dHJ1ZSxcImVkdS5jblwiOnRydWUsXCJnb3YuY25cIjp0cnVlLFwibmV0LmNuXCI6dHJ1ZSxcIm9yZy5jblwiOnRydWUsXCJtaWwuY25cIjp0cnVlLFwieG4tLTU1cXg1ZC5jblwiOnRydWUsXCJ4bi0taW8wYTdpLmNuXCI6dHJ1ZSxcInhuLS1vZDBhbGcuY25cIjp0cnVlLFwiYWguY25cIjp0cnVlLFwiYmouY25cIjp0cnVlLFwiY3EuY25cIjp0cnVlLFwiZmouY25cIjp0cnVlLFwiZ2QuY25cIjp0cnVlLFwiZ3MuY25cIjp0cnVlLFwiZ3ouY25cIjp0cnVlLFwiZ3guY25cIjp0cnVlLFwiaGEuY25cIjp0cnVlLFwiaGIuY25cIjp0cnVlLFwiaGUuY25cIjp0cnVlLFwiaGkuY25cIjp0cnVlLFwiaGwuY25cIjp0cnVlLFwiaG4uY25cIjp0cnVlLFwiamwuY25cIjp0cnVlLFwianMuY25cIjp0cnVlLFwianguY25cIjp0cnVlLFwibG4uY25cIjp0cnVlLFwibm0uY25cIjp0cnVlLFwibnguY25cIjp0cnVlLFwicWguY25cIjp0cnVlLFwic2MuY25cIjp0cnVlLFwic2QuY25cIjp0cnVlLFwic2guY25cIjp0cnVlLFwic24uY25cIjp0cnVlLFwic3guY25cIjp0cnVlLFwidGouY25cIjp0cnVlLFwieGouY25cIjp0cnVlLFwieHouY25cIjp0cnVlLFwieW4uY25cIjp0cnVlLFwiemouY25cIjp0cnVlLFwiaGsuY25cIjp0cnVlLFwibW8uY25cIjp0cnVlLFwidHcuY25cIjp0cnVlLFwiY29cIjp0cnVlLFwiYXJ0cy5jb1wiOnRydWUsXCJjb20uY29cIjp0cnVlLFwiZWR1LmNvXCI6dHJ1ZSxcImZpcm0uY29cIjp0cnVlLFwiZ292LmNvXCI6dHJ1ZSxcImluZm8uY29cIjp0cnVlLFwiaW50LmNvXCI6dHJ1ZSxcIm1pbC5jb1wiOnRydWUsXCJuZXQuY29cIjp0cnVlLFwibm9tLmNvXCI6dHJ1ZSxcIm9yZy5jb1wiOnRydWUsXCJyZWMuY29cIjp0cnVlLFwid2ViLmNvXCI6dHJ1ZSxcImNvbVwiOnRydWUsXCJjb29wXCI6dHJ1ZSxcImNyXCI6dHJ1ZSxcImFjLmNyXCI6dHJ1ZSxcImNvLmNyXCI6dHJ1ZSxcImVkLmNyXCI6dHJ1ZSxcImZpLmNyXCI6dHJ1ZSxcImdvLmNyXCI6dHJ1ZSxcIm9yLmNyXCI6dHJ1ZSxcInNhLmNyXCI6dHJ1ZSxcImN1XCI6dHJ1ZSxcImNvbS5jdVwiOnRydWUsXCJlZHUuY3VcIjp0cnVlLFwib3JnLmN1XCI6dHJ1ZSxcIm5ldC5jdVwiOnRydWUsXCJnb3YuY3VcIjp0cnVlLFwiaW5mLmN1XCI6dHJ1ZSxcImN2XCI6dHJ1ZSxcImN3XCI6dHJ1ZSxcImNvbS5jd1wiOnRydWUsXCJlZHUuY3dcIjp0cnVlLFwibmV0LmN3XCI6dHJ1ZSxcIm9yZy5jd1wiOnRydWUsXCJjeFwiOnRydWUsXCJnb3YuY3hcIjp0cnVlLFwiYWMuY3lcIjp0cnVlLFwiYml6LmN5XCI6dHJ1ZSxcImNvbS5jeVwiOnRydWUsXCJla2xvZ2VzLmN5XCI6dHJ1ZSxcImdvdi5jeVwiOnRydWUsXCJsdGQuY3lcIjp0cnVlLFwibmFtZS5jeVwiOnRydWUsXCJuZXQuY3lcIjp0cnVlLFwib3JnLmN5XCI6dHJ1ZSxcInBhcmxpYW1lbnQuY3lcIjp0cnVlLFwicHJlc3MuY3lcIjp0cnVlLFwicHJvLmN5XCI6dHJ1ZSxcInRtLmN5XCI6dHJ1ZSxcImN6XCI6dHJ1ZSxcImRlXCI6dHJ1ZSxcImRqXCI6dHJ1ZSxcImRrXCI6dHJ1ZSxcImRtXCI6dHJ1ZSxcImNvbS5kbVwiOnRydWUsXCJuZXQuZG1cIjp0cnVlLFwib3JnLmRtXCI6dHJ1ZSxcImVkdS5kbVwiOnRydWUsXCJnb3YuZG1cIjp0cnVlLFwiZG9cIjp0cnVlLFwiYXJ0LmRvXCI6dHJ1ZSxcImNvbS5kb1wiOnRydWUsXCJlZHUuZG9cIjp0cnVlLFwiZ29iLmRvXCI6dHJ1ZSxcImdvdi5kb1wiOnRydWUsXCJtaWwuZG9cIjp0cnVlLFwibmV0LmRvXCI6dHJ1ZSxcIm9yZy5kb1wiOnRydWUsXCJzbGQuZG9cIjp0cnVlLFwid2ViLmRvXCI6dHJ1ZSxcImR6XCI6dHJ1ZSxcImNvbS5kelwiOnRydWUsXCJvcmcuZHpcIjp0cnVlLFwibmV0LmR6XCI6dHJ1ZSxcImdvdi5kelwiOnRydWUsXCJlZHUuZHpcIjp0cnVlLFwiYXNzby5kelwiOnRydWUsXCJwb2wuZHpcIjp0cnVlLFwiYXJ0LmR6XCI6dHJ1ZSxcImVjXCI6dHJ1ZSxcImNvbS5lY1wiOnRydWUsXCJpbmZvLmVjXCI6dHJ1ZSxcIm5ldC5lY1wiOnRydWUsXCJmaW4uZWNcIjp0cnVlLFwiazEyLmVjXCI6dHJ1ZSxcIm1lZC5lY1wiOnRydWUsXCJwcm8uZWNcIjp0cnVlLFwib3JnLmVjXCI6dHJ1ZSxcImVkdS5lY1wiOnRydWUsXCJnb3YuZWNcIjp0cnVlLFwiZ29iLmVjXCI6dHJ1ZSxcIm1pbC5lY1wiOnRydWUsXCJlZHVcIjp0cnVlLFwiZWVcIjp0cnVlLFwiZWR1LmVlXCI6dHJ1ZSxcImdvdi5lZVwiOnRydWUsXCJyaWlrLmVlXCI6dHJ1ZSxcImxpYi5lZVwiOnRydWUsXCJtZWQuZWVcIjp0cnVlLFwiY29tLmVlXCI6dHJ1ZSxcInByaS5lZVwiOnRydWUsXCJhaXAuZWVcIjp0cnVlLFwib3JnLmVlXCI6dHJ1ZSxcImZpZS5lZVwiOnRydWUsXCJlZ1wiOnRydWUsXCJjb20uZWdcIjp0cnVlLFwiZWR1LmVnXCI6dHJ1ZSxcImV1bi5lZ1wiOnRydWUsXCJnb3YuZWdcIjp0cnVlLFwibWlsLmVnXCI6dHJ1ZSxcIm5hbWUuZWdcIjp0cnVlLFwibmV0LmVnXCI6dHJ1ZSxcIm9yZy5lZ1wiOnRydWUsXCJzY2kuZWdcIjp0cnVlLFwiKi5lclwiOnRydWUsXCJlc1wiOnRydWUsXCJjb20uZXNcIjp0cnVlLFwibm9tLmVzXCI6dHJ1ZSxcIm9yZy5lc1wiOnRydWUsXCJnb2IuZXNcIjp0cnVlLFwiZWR1LmVzXCI6dHJ1ZSxcImV0XCI6dHJ1ZSxcImNvbS5ldFwiOnRydWUsXCJnb3YuZXRcIjp0cnVlLFwib3JnLmV0XCI6dHJ1ZSxcImVkdS5ldFwiOnRydWUsXCJiaXouZXRcIjp0cnVlLFwibmFtZS5ldFwiOnRydWUsXCJpbmZvLmV0XCI6dHJ1ZSxcIm5ldC5ldFwiOnRydWUsXCJldVwiOnRydWUsXCJmaVwiOnRydWUsXCJhbGFuZC5maVwiOnRydWUsXCIqLmZqXCI6dHJ1ZSxcIiouZmtcIjp0cnVlLFwiZm1cIjp0cnVlLFwiZm9cIjp0cnVlLFwiZnJcIjp0cnVlLFwiY29tLmZyXCI6dHJ1ZSxcImFzc28uZnJcIjp0cnVlLFwibm9tLmZyXCI6dHJ1ZSxcInByZC5mclwiOnRydWUsXCJwcmVzc2UuZnJcIjp0cnVlLFwidG0uZnJcIjp0cnVlLFwiYWVyb3BvcnQuZnJcIjp0cnVlLFwiYXNzZWRpYy5mclwiOnRydWUsXCJhdm9jYXQuZnJcIjp0cnVlLFwiYXZvdWVzLmZyXCI6dHJ1ZSxcImNjaS5mclwiOnRydWUsXCJjaGFtYmFncmkuZnJcIjp0cnVlLFwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLmZyXCI6dHJ1ZSxcImV4cGVydHMtY29tcHRhYmxlcy5mclwiOnRydWUsXCJnZW9tZXRyZS1leHBlcnQuZnJcIjp0cnVlLFwiZ291di5mclwiOnRydWUsXCJncmV0YS5mclwiOnRydWUsXCJodWlzc2llci1qdXN0aWNlLmZyXCI6dHJ1ZSxcIm1lZGVjaW4uZnJcIjp0cnVlLFwibm90YWlyZXMuZnJcIjp0cnVlLFwicGhhcm1hY2llbi5mclwiOnRydWUsXCJwb3J0LmZyXCI6dHJ1ZSxcInZldGVyaW5haXJlLmZyXCI6dHJ1ZSxcImdhXCI6dHJ1ZSxcImdiXCI6dHJ1ZSxcImdkXCI6dHJ1ZSxcImdlXCI6dHJ1ZSxcImNvbS5nZVwiOnRydWUsXCJlZHUuZ2VcIjp0cnVlLFwiZ292LmdlXCI6dHJ1ZSxcIm9yZy5nZVwiOnRydWUsXCJtaWwuZ2VcIjp0cnVlLFwibmV0LmdlXCI6dHJ1ZSxcInB2dC5nZVwiOnRydWUsXCJnZlwiOnRydWUsXCJnZ1wiOnRydWUsXCJjby5nZ1wiOnRydWUsXCJuZXQuZ2dcIjp0cnVlLFwib3JnLmdnXCI6dHJ1ZSxcImdoXCI6dHJ1ZSxcImNvbS5naFwiOnRydWUsXCJlZHUuZ2hcIjp0cnVlLFwiZ292LmdoXCI6dHJ1ZSxcIm9yZy5naFwiOnRydWUsXCJtaWwuZ2hcIjp0cnVlLFwiZ2lcIjp0cnVlLFwiY29tLmdpXCI6dHJ1ZSxcImx0ZC5naVwiOnRydWUsXCJnb3YuZ2lcIjp0cnVlLFwibW9kLmdpXCI6dHJ1ZSxcImVkdS5naVwiOnRydWUsXCJvcmcuZ2lcIjp0cnVlLFwiZ2xcIjp0cnVlLFwiY28uZ2xcIjp0cnVlLFwiY29tLmdsXCI6dHJ1ZSxcImVkdS5nbFwiOnRydWUsXCJuZXQuZ2xcIjp0cnVlLFwib3JnLmdsXCI6dHJ1ZSxcImdtXCI6dHJ1ZSxcImduXCI6dHJ1ZSxcImFjLmduXCI6dHJ1ZSxcImNvbS5nblwiOnRydWUsXCJlZHUuZ25cIjp0cnVlLFwiZ292LmduXCI6dHJ1ZSxcIm9yZy5nblwiOnRydWUsXCJuZXQuZ25cIjp0cnVlLFwiZ292XCI6dHJ1ZSxcImdwXCI6dHJ1ZSxcImNvbS5ncFwiOnRydWUsXCJuZXQuZ3BcIjp0cnVlLFwibW9iaS5ncFwiOnRydWUsXCJlZHUuZ3BcIjp0cnVlLFwib3JnLmdwXCI6dHJ1ZSxcImFzc28uZ3BcIjp0cnVlLFwiZ3FcIjp0cnVlLFwiZ3JcIjp0cnVlLFwiY29tLmdyXCI6dHJ1ZSxcImVkdS5nclwiOnRydWUsXCJuZXQuZ3JcIjp0cnVlLFwib3JnLmdyXCI6dHJ1ZSxcImdvdi5nclwiOnRydWUsXCJnc1wiOnRydWUsXCJndFwiOnRydWUsXCJjb20uZ3RcIjp0cnVlLFwiZWR1Lmd0XCI6dHJ1ZSxcImdvYi5ndFwiOnRydWUsXCJpbmQuZ3RcIjp0cnVlLFwibWlsLmd0XCI6dHJ1ZSxcIm5ldC5ndFwiOnRydWUsXCJvcmcuZ3RcIjp0cnVlLFwiKi5ndVwiOnRydWUsXCJnd1wiOnRydWUsXCJneVwiOnRydWUsXCJjby5neVwiOnRydWUsXCJjb20uZ3lcIjp0cnVlLFwibmV0Lmd5XCI6dHJ1ZSxcImhrXCI6dHJ1ZSxcImNvbS5oa1wiOnRydWUsXCJlZHUuaGtcIjp0cnVlLFwiZ292LmhrXCI6dHJ1ZSxcImlkdi5oa1wiOnRydWUsXCJuZXQuaGtcIjp0cnVlLFwib3JnLmhrXCI6dHJ1ZSxcInhuLS01NXF4NWQuaGtcIjp0cnVlLFwieG4tLXdjdnMyMmQuaGtcIjp0cnVlLFwieG4tLWxjdnIzMmQuaGtcIjp0cnVlLFwieG4tLW14dHExbS5oa1wiOnRydWUsXCJ4bi0tZ21xdzVhLmhrXCI6dHJ1ZSxcInhuLS1jaXFwbi5oa1wiOnRydWUsXCJ4bi0tZ21xMDUwaS5oa1wiOnRydWUsXCJ4bi0temYwYXZ4LmhrXCI6dHJ1ZSxcInhuLS1pbzBhN2kuaGtcIjp0cnVlLFwieG4tLW1rMGF4aS5oa1wiOnRydWUsXCJ4bi0tb2QwYWxnLmhrXCI6dHJ1ZSxcInhuLS1vZDBhcTNiLmhrXCI6dHJ1ZSxcInhuLS10bjBhZy5oa1wiOnRydWUsXCJ4bi0tdWMwYXR2LmhrXCI6dHJ1ZSxcInhuLS11YzBheTRhLmhrXCI6dHJ1ZSxcImhtXCI6dHJ1ZSxcImhuXCI6dHJ1ZSxcImNvbS5oblwiOnRydWUsXCJlZHUuaG5cIjp0cnVlLFwib3JnLmhuXCI6dHJ1ZSxcIm5ldC5oblwiOnRydWUsXCJtaWwuaG5cIjp0cnVlLFwiZ29iLmhuXCI6dHJ1ZSxcImhyXCI6dHJ1ZSxcIml6LmhyXCI6dHJ1ZSxcImZyb20uaHJcIjp0cnVlLFwibmFtZS5oclwiOnRydWUsXCJjb20uaHJcIjp0cnVlLFwiaHRcIjp0cnVlLFwiY29tLmh0XCI6dHJ1ZSxcInNob3AuaHRcIjp0cnVlLFwiZmlybS5odFwiOnRydWUsXCJpbmZvLmh0XCI6dHJ1ZSxcImFkdWx0Lmh0XCI6dHJ1ZSxcIm5ldC5odFwiOnRydWUsXCJwcm8uaHRcIjp0cnVlLFwib3JnLmh0XCI6dHJ1ZSxcIm1lZC5odFwiOnRydWUsXCJhcnQuaHRcIjp0cnVlLFwiY29vcC5odFwiOnRydWUsXCJwb2wuaHRcIjp0cnVlLFwiYXNzby5odFwiOnRydWUsXCJlZHUuaHRcIjp0cnVlLFwicmVsLmh0XCI6dHJ1ZSxcImdvdXYuaHRcIjp0cnVlLFwicGVyc28uaHRcIjp0cnVlLFwiaHVcIjp0cnVlLFwiY28uaHVcIjp0cnVlLFwiaW5mby5odVwiOnRydWUsXCJvcmcuaHVcIjp0cnVlLFwicHJpdi5odVwiOnRydWUsXCJzcG9ydC5odVwiOnRydWUsXCJ0bS5odVwiOnRydWUsXCIyMDAwLmh1XCI6dHJ1ZSxcImFncmFyLmh1XCI6dHJ1ZSxcImJvbHQuaHVcIjp0cnVlLFwiY2FzaW5vLmh1XCI6dHJ1ZSxcImNpdHkuaHVcIjp0cnVlLFwiZXJvdGljYS5odVwiOnRydWUsXCJlcm90aWthLmh1XCI6dHJ1ZSxcImZpbG0uaHVcIjp0cnVlLFwiZm9ydW0uaHVcIjp0cnVlLFwiZ2FtZXMuaHVcIjp0cnVlLFwiaG90ZWwuaHVcIjp0cnVlLFwiaW5nYXRsYW4uaHVcIjp0cnVlLFwiam9nYXN6Lmh1XCI6dHJ1ZSxcImtvbnl2ZWxvLmh1XCI6dHJ1ZSxcImxha2FzLmh1XCI6dHJ1ZSxcIm1lZGlhLmh1XCI6dHJ1ZSxcIm5ld3MuaHVcIjp0cnVlLFwicmVrbGFtLmh1XCI6dHJ1ZSxcInNleC5odVwiOnRydWUsXCJzaG9wLmh1XCI6dHJ1ZSxcInN1bGkuaHVcIjp0cnVlLFwic3pleC5odVwiOnRydWUsXCJ0b3pzZGUuaHVcIjp0cnVlLFwidXRhemFzLmh1XCI6dHJ1ZSxcInZpZGVvLmh1XCI6dHJ1ZSxcImlkXCI6dHJ1ZSxcImFjLmlkXCI6dHJ1ZSxcImJpei5pZFwiOnRydWUsXCJjby5pZFwiOnRydWUsXCJkZXNhLmlkXCI6dHJ1ZSxcImdvLmlkXCI6dHJ1ZSxcIm1pbC5pZFwiOnRydWUsXCJteS5pZFwiOnRydWUsXCJuZXQuaWRcIjp0cnVlLFwib3IuaWRcIjp0cnVlLFwic2NoLmlkXCI6dHJ1ZSxcIndlYi5pZFwiOnRydWUsXCJpZVwiOnRydWUsXCJnb3YuaWVcIjp0cnVlLFwiaWxcIjp0cnVlLFwiYWMuaWxcIjp0cnVlLFwiY28uaWxcIjp0cnVlLFwiZ292LmlsXCI6dHJ1ZSxcImlkZi5pbFwiOnRydWUsXCJrMTIuaWxcIjp0cnVlLFwibXVuaS5pbFwiOnRydWUsXCJuZXQuaWxcIjp0cnVlLFwib3JnLmlsXCI6dHJ1ZSxcImltXCI6dHJ1ZSxcImFjLmltXCI6dHJ1ZSxcImNvLmltXCI6dHJ1ZSxcImNvbS5pbVwiOnRydWUsXCJsdGQuY28uaW1cIjp0cnVlLFwibmV0LmltXCI6dHJ1ZSxcIm9yZy5pbVwiOnRydWUsXCJwbGMuY28uaW1cIjp0cnVlLFwidHQuaW1cIjp0cnVlLFwidHYuaW1cIjp0cnVlLFwiaW5cIjp0cnVlLFwiY28uaW5cIjp0cnVlLFwiZmlybS5pblwiOnRydWUsXCJuZXQuaW5cIjp0cnVlLFwib3JnLmluXCI6dHJ1ZSxcImdlbi5pblwiOnRydWUsXCJpbmQuaW5cIjp0cnVlLFwibmljLmluXCI6dHJ1ZSxcImFjLmluXCI6dHJ1ZSxcImVkdS5pblwiOnRydWUsXCJyZXMuaW5cIjp0cnVlLFwiZ292LmluXCI6dHJ1ZSxcIm1pbC5pblwiOnRydWUsXCJpbmZvXCI6dHJ1ZSxcImludFwiOnRydWUsXCJldS5pbnRcIjp0cnVlLFwiaW9cIjp0cnVlLFwiY29tLmlvXCI6dHJ1ZSxcImlxXCI6dHJ1ZSxcImdvdi5pcVwiOnRydWUsXCJlZHUuaXFcIjp0cnVlLFwibWlsLmlxXCI6dHJ1ZSxcImNvbS5pcVwiOnRydWUsXCJvcmcuaXFcIjp0cnVlLFwibmV0LmlxXCI6dHJ1ZSxcImlyXCI6dHJ1ZSxcImFjLmlyXCI6dHJ1ZSxcImNvLmlyXCI6dHJ1ZSxcImdvdi5pclwiOnRydWUsXCJpZC5pclwiOnRydWUsXCJuZXQuaXJcIjp0cnVlLFwib3JnLmlyXCI6dHJ1ZSxcInNjaC5pclwiOnRydWUsXCJ4bi0tbWdiYTNhNGYxNmEuaXJcIjp0cnVlLFwieG4tLW1nYmEzYTRmcmEuaXJcIjp0cnVlLFwiaXNcIjp0cnVlLFwibmV0LmlzXCI6dHJ1ZSxcImNvbS5pc1wiOnRydWUsXCJlZHUuaXNcIjp0cnVlLFwiZ292LmlzXCI6dHJ1ZSxcIm9yZy5pc1wiOnRydWUsXCJpbnQuaXNcIjp0cnVlLFwiaXRcIjp0cnVlLFwiZ292Lml0XCI6dHJ1ZSxcImVkdS5pdFwiOnRydWUsXCJhYnIuaXRcIjp0cnVlLFwiYWJydXp6by5pdFwiOnRydWUsXCJhb3N0YS12YWxsZXkuaXRcIjp0cnVlLFwiYW9zdGF2YWxsZXkuaXRcIjp0cnVlLFwiYmFzLml0XCI6dHJ1ZSxcImJhc2lsaWNhdGEuaXRcIjp0cnVlLFwiY2FsLml0XCI6dHJ1ZSxcImNhbGFicmlhLml0XCI6dHJ1ZSxcImNhbS5pdFwiOnRydWUsXCJjYW1wYW5pYS5pdFwiOnRydWUsXCJlbWlsaWEtcm9tYWduYS5pdFwiOnRydWUsXCJlbWlsaWFyb21hZ25hLml0XCI6dHJ1ZSxcImVtci5pdFwiOnRydWUsXCJmcml1bGktdi1naXVsaWEuaXRcIjp0cnVlLFwiZnJpdWxpLXZlLWdpdWxpYS5pdFwiOnRydWUsXCJmcml1bGktdmVnaXVsaWEuaXRcIjp0cnVlLFwiZnJpdWxpLXZlbmV6aWEtZ2l1bGlhLml0XCI6dHJ1ZSxcImZyaXVsaS12ZW5lemlhZ2l1bGlhLml0XCI6dHJ1ZSxcImZyaXVsaS12Z2l1bGlhLml0XCI6dHJ1ZSxcImZyaXVsaXYtZ2l1bGlhLml0XCI6dHJ1ZSxcImZyaXVsaXZlLWdpdWxpYS5pdFwiOnRydWUsXCJmcml1bGl2ZWdpdWxpYS5pdFwiOnRydWUsXCJmcml1bGl2ZW5lemlhLWdpdWxpYS5pdFwiOnRydWUsXCJmcml1bGl2ZW5lemlhZ2l1bGlhLml0XCI6dHJ1ZSxcImZyaXVsaXZnaXVsaWEuaXRcIjp0cnVlLFwiZnZnLml0XCI6dHJ1ZSxcImxhei5pdFwiOnRydWUsXCJsYXppby5pdFwiOnRydWUsXCJsaWcuaXRcIjp0cnVlLFwibGlndXJpYS5pdFwiOnRydWUsXCJsb20uaXRcIjp0cnVlLFwibG9tYmFyZGlhLml0XCI6dHJ1ZSxcImxvbWJhcmR5Lml0XCI6dHJ1ZSxcImx1Y2FuaWEuaXRcIjp0cnVlLFwibWFyLml0XCI6dHJ1ZSxcIm1hcmNoZS5pdFwiOnRydWUsXCJtb2wuaXRcIjp0cnVlLFwibW9saXNlLml0XCI6dHJ1ZSxcInBpZWRtb250Lml0XCI6dHJ1ZSxcInBpZW1vbnRlLml0XCI6dHJ1ZSxcInBtbi5pdFwiOnRydWUsXCJwdWcuaXRcIjp0cnVlLFwicHVnbGlhLml0XCI6dHJ1ZSxcInNhci5pdFwiOnRydWUsXCJzYXJkZWduYS5pdFwiOnRydWUsXCJzYXJkaW5pYS5pdFwiOnRydWUsXCJzaWMuaXRcIjp0cnVlLFwic2ljaWxpYS5pdFwiOnRydWUsXCJzaWNpbHkuaXRcIjp0cnVlLFwidGFhLml0XCI6dHJ1ZSxcInRvcy5pdFwiOnRydWUsXCJ0b3NjYW5hLml0XCI6dHJ1ZSxcInRyZW50aW5vLWEtYWRpZ2UuaXRcIjp0cnVlLFwidHJlbnRpbm8tYWFkaWdlLml0XCI6dHJ1ZSxcInRyZW50aW5vLWFsdG8tYWRpZ2UuaXRcIjp0cnVlLFwidHJlbnRpbm8tYWx0b2FkaWdlLml0XCI6dHJ1ZSxcInRyZW50aW5vLXMtdGlyb2wuaXRcIjp0cnVlLFwidHJlbnRpbm8tc3Rpcm9sLml0XCI6dHJ1ZSxcInRyZW50aW5vLXN1ZC10aXJvbC5pdFwiOnRydWUsXCJ0cmVudGluby1zdWR0aXJvbC5pdFwiOnRydWUsXCJ0cmVudGluby1zdWVkLXRpcm9sLml0XCI6dHJ1ZSxcInRyZW50aW5vLXN1ZWR0aXJvbC5pdFwiOnRydWUsXCJ0cmVudGlub2EtYWRpZ2UuaXRcIjp0cnVlLFwidHJlbnRpbm9hYWRpZ2UuaXRcIjp0cnVlLFwidHJlbnRpbm9hbHRvLWFkaWdlLml0XCI6dHJ1ZSxcInRyZW50aW5vYWx0b2FkaWdlLml0XCI6dHJ1ZSxcInRyZW50aW5vcy10aXJvbC5pdFwiOnRydWUsXCJ0cmVudGlub3N0aXJvbC5pdFwiOnRydWUsXCJ0cmVudGlub3N1ZC10aXJvbC5pdFwiOnRydWUsXCJ0cmVudGlub3N1ZHRpcm9sLml0XCI6dHJ1ZSxcInRyZW50aW5vc3VlZC10aXJvbC5pdFwiOnRydWUsXCJ0cmVudGlub3N1ZWR0aXJvbC5pdFwiOnRydWUsXCJ0dXNjYW55Lml0XCI6dHJ1ZSxcInVtYi5pdFwiOnRydWUsXCJ1bWJyaWEuaXRcIjp0cnVlLFwidmFsLWQtYW9zdGEuaXRcIjp0cnVlLFwidmFsLWRhb3N0YS5pdFwiOnRydWUsXCJ2YWxkLWFvc3RhLml0XCI6dHJ1ZSxcInZhbGRhb3N0YS5pdFwiOnRydWUsXCJ2YWxsZS1hb3N0YS5pdFwiOnRydWUsXCJ2YWxsZS1kLWFvc3RhLml0XCI6dHJ1ZSxcInZhbGxlLWRhb3N0YS5pdFwiOnRydWUsXCJ2YWxsZWFvc3RhLml0XCI6dHJ1ZSxcInZhbGxlZC1hb3N0YS5pdFwiOnRydWUsXCJ2YWxsZWRhb3N0YS5pdFwiOnRydWUsXCJ2YWxsZWUtYW9zdGUuaXRcIjp0cnVlLFwidmFsbGVlYW9zdGUuaXRcIjp0cnVlLFwidmFvLml0XCI6dHJ1ZSxcInZkYS5pdFwiOnRydWUsXCJ2ZW4uaXRcIjp0cnVlLFwidmVuZXRvLml0XCI6dHJ1ZSxcImFnLml0XCI6dHJ1ZSxcImFncmlnZW50by5pdFwiOnRydWUsXCJhbC5pdFwiOnRydWUsXCJhbGVzc2FuZHJpYS5pdFwiOnRydWUsXCJhbHRvLWFkaWdlLml0XCI6dHJ1ZSxcImFsdG9hZGlnZS5pdFwiOnRydWUsXCJhbi5pdFwiOnRydWUsXCJhbmNvbmEuaXRcIjp0cnVlLFwiYW5kcmlhLWJhcmxldHRhLXRyYW5pLml0XCI6dHJ1ZSxcImFuZHJpYS10cmFuaS1iYXJsZXR0YS5pdFwiOnRydWUsXCJhbmRyaWFiYXJsZXR0YXRyYW5pLml0XCI6dHJ1ZSxcImFuZHJpYXRyYW5pYmFybGV0dGEuaXRcIjp0cnVlLFwiYW8uaXRcIjp0cnVlLFwiYW9zdGEuaXRcIjp0cnVlLFwiYW9zdGUuaXRcIjp0cnVlLFwiYXAuaXRcIjp0cnVlLFwiYXEuaXRcIjp0cnVlLFwiYXF1aWxhLml0XCI6dHJ1ZSxcImFyLml0XCI6dHJ1ZSxcImFyZXp6by5pdFwiOnRydWUsXCJhc2NvbGktcGljZW5vLml0XCI6dHJ1ZSxcImFzY29saXBpY2Vuby5pdFwiOnRydWUsXCJhc3RpLml0XCI6dHJ1ZSxcImF0Lml0XCI6dHJ1ZSxcImF2Lml0XCI6dHJ1ZSxcImF2ZWxsaW5vLml0XCI6dHJ1ZSxcImJhLml0XCI6dHJ1ZSxcImJhbHNhbi5pdFwiOnRydWUsXCJiYXJpLml0XCI6dHJ1ZSxcImJhcmxldHRhLXRyYW5pLWFuZHJpYS5pdFwiOnRydWUsXCJiYXJsZXR0YXRyYW5pYW5kcmlhLml0XCI6dHJ1ZSxcImJlbGx1bm8uaXRcIjp0cnVlLFwiYmVuZXZlbnRvLml0XCI6dHJ1ZSxcImJlcmdhbW8uaXRcIjp0cnVlLFwiYmcuaXRcIjp0cnVlLFwiYmkuaXRcIjp0cnVlLFwiYmllbGxhLml0XCI6dHJ1ZSxcImJsLml0XCI6dHJ1ZSxcImJuLml0XCI6dHJ1ZSxcImJvLml0XCI6dHJ1ZSxcImJvbG9nbmEuaXRcIjp0cnVlLFwiYm9semFuby5pdFwiOnRydWUsXCJib3plbi5pdFwiOnRydWUsXCJici5pdFwiOnRydWUsXCJicmVzY2lhLml0XCI6dHJ1ZSxcImJyaW5kaXNpLml0XCI6dHJ1ZSxcImJzLml0XCI6dHJ1ZSxcImJ0Lml0XCI6dHJ1ZSxcImJ6Lml0XCI6dHJ1ZSxcImNhLml0XCI6dHJ1ZSxcImNhZ2xpYXJpLml0XCI6dHJ1ZSxcImNhbHRhbmlzc2V0dGEuaXRcIjp0cnVlLFwiY2FtcGlkYW5vLW1lZGlvLml0XCI6dHJ1ZSxcImNhbXBpZGFub21lZGlvLml0XCI6dHJ1ZSxcImNhbXBvYmFzc28uaXRcIjp0cnVlLFwiY2FyYm9uaWEtaWdsZXNpYXMuaXRcIjp0cnVlLFwiY2FyYm9uaWFpZ2xlc2lhcy5pdFwiOnRydWUsXCJjYXJyYXJhLW1hc3NhLml0XCI6dHJ1ZSxcImNhcnJhcmFtYXNzYS5pdFwiOnRydWUsXCJjYXNlcnRhLml0XCI6dHJ1ZSxcImNhdGFuaWEuaXRcIjp0cnVlLFwiY2F0YW56YXJvLml0XCI6dHJ1ZSxcImNiLml0XCI6dHJ1ZSxcImNlLml0XCI6dHJ1ZSxcImNlc2VuYS1mb3JsaS5pdFwiOnRydWUsXCJjZXNlbmFmb3JsaS5pdFwiOnRydWUsXCJjaC5pdFwiOnRydWUsXCJjaGlldGkuaXRcIjp0cnVlLFwiY2kuaXRcIjp0cnVlLFwiY2wuaXRcIjp0cnVlLFwiY24uaXRcIjp0cnVlLFwiY28uaXRcIjp0cnVlLFwiY29tby5pdFwiOnRydWUsXCJjb3NlbnphLml0XCI6dHJ1ZSxcImNyLml0XCI6dHJ1ZSxcImNyZW1vbmEuaXRcIjp0cnVlLFwiY3JvdG9uZS5pdFwiOnRydWUsXCJjcy5pdFwiOnRydWUsXCJjdC5pdFwiOnRydWUsXCJjdW5lby5pdFwiOnRydWUsXCJjei5pdFwiOnRydWUsXCJkZWxsLW9nbGlhc3RyYS5pdFwiOnRydWUsXCJkZWxsb2dsaWFzdHJhLml0XCI6dHJ1ZSxcImVuLml0XCI6dHJ1ZSxcImVubmEuaXRcIjp0cnVlLFwiZmMuaXRcIjp0cnVlLFwiZmUuaXRcIjp0cnVlLFwiZmVybW8uaXRcIjp0cnVlLFwiZmVycmFyYS5pdFwiOnRydWUsXCJmZy5pdFwiOnRydWUsXCJmaS5pdFwiOnRydWUsXCJmaXJlbnplLml0XCI6dHJ1ZSxcImZsb3JlbmNlLml0XCI6dHJ1ZSxcImZtLml0XCI6dHJ1ZSxcImZvZ2dpYS5pdFwiOnRydWUsXCJmb3JsaS1jZXNlbmEuaXRcIjp0cnVlLFwiZm9ybGljZXNlbmEuaXRcIjp0cnVlLFwiZnIuaXRcIjp0cnVlLFwiZnJvc2lub25lLml0XCI6dHJ1ZSxcImdlLml0XCI6dHJ1ZSxcImdlbm9hLml0XCI6dHJ1ZSxcImdlbm92YS5pdFwiOnRydWUsXCJnby5pdFwiOnRydWUsXCJnb3JpemlhLml0XCI6dHJ1ZSxcImdyLml0XCI6dHJ1ZSxcImdyb3NzZXRvLml0XCI6dHJ1ZSxcImlnbGVzaWFzLWNhcmJvbmlhLml0XCI6dHJ1ZSxcImlnbGVzaWFzY2FyYm9uaWEuaXRcIjp0cnVlLFwiaW0uaXRcIjp0cnVlLFwiaW1wZXJpYS5pdFwiOnRydWUsXCJpcy5pdFwiOnRydWUsXCJpc2VybmlhLml0XCI6dHJ1ZSxcImtyLml0XCI6dHJ1ZSxcImxhLXNwZXppYS5pdFwiOnRydWUsXCJsYXF1aWxhLml0XCI6dHJ1ZSxcImxhc3BlemlhLml0XCI6dHJ1ZSxcImxhdGluYS5pdFwiOnRydWUsXCJsYy5pdFwiOnRydWUsXCJsZS5pdFwiOnRydWUsXCJsZWNjZS5pdFwiOnRydWUsXCJsZWNjby5pdFwiOnRydWUsXCJsaS5pdFwiOnRydWUsXCJsaXZvcm5vLml0XCI6dHJ1ZSxcImxvLml0XCI6dHJ1ZSxcImxvZGkuaXRcIjp0cnVlLFwibHQuaXRcIjp0cnVlLFwibHUuaXRcIjp0cnVlLFwibHVjY2EuaXRcIjp0cnVlLFwibWFjZXJhdGEuaXRcIjp0cnVlLFwibWFudG92YS5pdFwiOnRydWUsXCJtYXNzYS1jYXJyYXJhLml0XCI6dHJ1ZSxcIm1hc3NhY2FycmFyYS5pdFwiOnRydWUsXCJtYXRlcmEuaXRcIjp0cnVlLFwibWIuaXRcIjp0cnVlLFwibWMuaXRcIjp0cnVlLFwibWUuaXRcIjp0cnVlLFwibWVkaW8tY2FtcGlkYW5vLml0XCI6dHJ1ZSxcIm1lZGlvY2FtcGlkYW5vLml0XCI6dHJ1ZSxcIm1lc3NpbmEuaXRcIjp0cnVlLFwibWkuaXRcIjp0cnVlLFwibWlsYW4uaXRcIjp0cnVlLFwibWlsYW5vLml0XCI6dHJ1ZSxcIm1uLml0XCI6dHJ1ZSxcIm1vLml0XCI6dHJ1ZSxcIm1vZGVuYS5pdFwiOnRydWUsXCJtb256YS1icmlhbnphLml0XCI6dHJ1ZSxcIm1vbnphLWUtZGVsbGEtYnJpYW56YS5pdFwiOnRydWUsXCJtb256YS5pdFwiOnRydWUsXCJtb256YWJyaWFuemEuaXRcIjp0cnVlLFwibW9uemFlYnJpYW56YS5pdFwiOnRydWUsXCJtb256YWVkZWxsYWJyaWFuemEuaXRcIjp0cnVlLFwibXMuaXRcIjp0cnVlLFwibXQuaXRcIjp0cnVlLFwibmEuaXRcIjp0cnVlLFwibmFwbGVzLml0XCI6dHJ1ZSxcIm5hcG9saS5pdFwiOnRydWUsXCJuby5pdFwiOnRydWUsXCJub3ZhcmEuaXRcIjp0cnVlLFwibnUuaXRcIjp0cnVlLFwibnVvcm8uaXRcIjp0cnVlLFwib2cuaXRcIjp0cnVlLFwib2dsaWFzdHJhLml0XCI6dHJ1ZSxcIm9sYmlhLXRlbXBpby5pdFwiOnRydWUsXCJvbGJpYXRlbXBpby5pdFwiOnRydWUsXCJvci5pdFwiOnRydWUsXCJvcmlzdGFuby5pdFwiOnRydWUsXCJvdC5pdFwiOnRydWUsXCJwYS5pdFwiOnRydWUsXCJwYWRvdmEuaXRcIjp0cnVlLFwicGFkdWEuaXRcIjp0cnVlLFwicGFsZXJtby5pdFwiOnRydWUsXCJwYXJtYS5pdFwiOnRydWUsXCJwYXZpYS5pdFwiOnRydWUsXCJwYy5pdFwiOnRydWUsXCJwZC5pdFwiOnRydWUsXCJwZS5pdFwiOnRydWUsXCJwZXJ1Z2lhLml0XCI6dHJ1ZSxcInBlc2Fyby11cmJpbm8uaXRcIjp0cnVlLFwicGVzYXJvdXJiaW5vLml0XCI6dHJ1ZSxcInBlc2NhcmEuaXRcIjp0cnVlLFwicGcuaXRcIjp0cnVlLFwicGkuaXRcIjp0cnVlLFwicGlhY2VuemEuaXRcIjp0cnVlLFwicGlzYS5pdFwiOnRydWUsXCJwaXN0b2lhLml0XCI6dHJ1ZSxcInBuLml0XCI6dHJ1ZSxcInBvLml0XCI6dHJ1ZSxcInBvcmRlbm9uZS5pdFwiOnRydWUsXCJwb3RlbnphLml0XCI6dHJ1ZSxcInByLml0XCI6dHJ1ZSxcInByYXRvLml0XCI6dHJ1ZSxcInB0Lml0XCI6dHJ1ZSxcInB1Lml0XCI6dHJ1ZSxcInB2Lml0XCI6dHJ1ZSxcInB6Lml0XCI6dHJ1ZSxcInJhLml0XCI6dHJ1ZSxcInJhZ3VzYS5pdFwiOnRydWUsXCJyYXZlbm5hLml0XCI6dHJ1ZSxcInJjLml0XCI6dHJ1ZSxcInJlLml0XCI6dHJ1ZSxcInJlZ2dpby1jYWxhYnJpYS5pdFwiOnRydWUsXCJyZWdnaW8tZW1pbGlhLml0XCI6dHJ1ZSxcInJlZ2dpb2NhbGFicmlhLml0XCI6dHJ1ZSxcInJlZ2dpb2VtaWxpYS5pdFwiOnRydWUsXCJyZy5pdFwiOnRydWUsXCJyaS5pdFwiOnRydWUsXCJyaWV0aS5pdFwiOnRydWUsXCJyaW1pbmkuaXRcIjp0cnVlLFwicm0uaXRcIjp0cnVlLFwicm4uaXRcIjp0cnVlLFwicm8uaXRcIjp0cnVlLFwicm9tYS5pdFwiOnRydWUsXCJyb21lLml0XCI6dHJ1ZSxcInJvdmlnby5pdFwiOnRydWUsXCJzYS5pdFwiOnRydWUsXCJzYWxlcm5vLml0XCI6dHJ1ZSxcInNhc3NhcmkuaXRcIjp0cnVlLFwic2F2b25hLml0XCI6dHJ1ZSxcInNpLml0XCI6dHJ1ZSxcInNpZW5hLml0XCI6dHJ1ZSxcInNpcmFjdXNhLml0XCI6dHJ1ZSxcInNvLml0XCI6dHJ1ZSxcInNvbmRyaW8uaXRcIjp0cnVlLFwic3AuaXRcIjp0cnVlLFwic3IuaXRcIjp0cnVlLFwic3MuaXRcIjp0cnVlLFwic3VlZHRpcm9sLml0XCI6dHJ1ZSxcInN2Lml0XCI6dHJ1ZSxcInRhLml0XCI6dHJ1ZSxcInRhcmFudG8uaXRcIjp0cnVlLFwidGUuaXRcIjp0cnVlLFwidGVtcGlvLW9sYmlhLml0XCI6dHJ1ZSxcInRlbXBpb29sYmlhLml0XCI6dHJ1ZSxcInRlcmFtby5pdFwiOnRydWUsXCJ0ZXJuaS5pdFwiOnRydWUsXCJ0bi5pdFwiOnRydWUsXCJ0by5pdFwiOnRydWUsXCJ0b3Jpbm8uaXRcIjp0cnVlLFwidHAuaXRcIjp0cnVlLFwidHIuaXRcIjp0cnVlLFwidHJhbmktYW5kcmlhLWJhcmxldHRhLml0XCI6dHJ1ZSxcInRyYW5pLWJhcmxldHRhLWFuZHJpYS5pdFwiOnRydWUsXCJ0cmFuaWFuZHJpYWJhcmxldHRhLml0XCI6dHJ1ZSxcInRyYW5pYmFybGV0dGFhbmRyaWEuaXRcIjp0cnVlLFwidHJhcGFuaS5pdFwiOnRydWUsXCJ0cmVudGluby5pdFwiOnRydWUsXCJ0cmVudG8uaXRcIjp0cnVlLFwidHJldmlzby5pdFwiOnRydWUsXCJ0cmllc3RlLml0XCI6dHJ1ZSxcInRzLml0XCI6dHJ1ZSxcInR1cmluLml0XCI6dHJ1ZSxcInR2Lml0XCI6dHJ1ZSxcInVkLml0XCI6dHJ1ZSxcInVkaW5lLml0XCI6dHJ1ZSxcInVyYmluby1wZXNhcm8uaXRcIjp0cnVlLFwidXJiaW5vcGVzYXJvLml0XCI6dHJ1ZSxcInZhLml0XCI6dHJ1ZSxcInZhcmVzZS5pdFwiOnRydWUsXCJ2Yi5pdFwiOnRydWUsXCJ2Yy5pdFwiOnRydWUsXCJ2ZS5pdFwiOnRydWUsXCJ2ZW5lemlhLml0XCI6dHJ1ZSxcInZlbmljZS5pdFwiOnRydWUsXCJ2ZXJiYW5pYS5pdFwiOnRydWUsXCJ2ZXJjZWxsaS5pdFwiOnRydWUsXCJ2ZXJvbmEuaXRcIjp0cnVlLFwidmkuaXRcIjp0cnVlLFwidmliby12YWxlbnRpYS5pdFwiOnRydWUsXCJ2aWJvdmFsZW50aWEuaXRcIjp0cnVlLFwidmljZW56YS5pdFwiOnRydWUsXCJ2aXRlcmJvLml0XCI6dHJ1ZSxcInZyLml0XCI6dHJ1ZSxcInZzLml0XCI6dHJ1ZSxcInZ0Lml0XCI6dHJ1ZSxcInZ2Lml0XCI6dHJ1ZSxcImplXCI6dHJ1ZSxcImNvLmplXCI6dHJ1ZSxcIm5ldC5qZVwiOnRydWUsXCJvcmcuamVcIjp0cnVlLFwiKi5qbVwiOnRydWUsXCJqb1wiOnRydWUsXCJjb20uam9cIjp0cnVlLFwib3JnLmpvXCI6dHJ1ZSxcIm5ldC5qb1wiOnRydWUsXCJlZHUuam9cIjp0cnVlLFwic2NoLmpvXCI6dHJ1ZSxcImdvdi5qb1wiOnRydWUsXCJtaWwuam9cIjp0cnVlLFwibmFtZS5qb1wiOnRydWUsXCJqb2JzXCI6dHJ1ZSxcImpwXCI6dHJ1ZSxcImFjLmpwXCI6dHJ1ZSxcImFkLmpwXCI6dHJ1ZSxcImNvLmpwXCI6dHJ1ZSxcImVkLmpwXCI6dHJ1ZSxcImdvLmpwXCI6dHJ1ZSxcImdyLmpwXCI6dHJ1ZSxcImxnLmpwXCI6dHJ1ZSxcIm5lLmpwXCI6dHJ1ZSxcIm9yLmpwXCI6dHJ1ZSxcImFpY2hpLmpwXCI6dHJ1ZSxcImFraXRhLmpwXCI6dHJ1ZSxcImFvbW9yaS5qcFwiOnRydWUsXCJjaGliYS5qcFwiOnRydWUsXCJlaGltZS5qcFwiOnRydWUsXCJmdWt1aS5qcFwiOnRydWUsXCJmdWt1b2thLmpwXCI6dHJ1ZSxcImZ1a3VzaGltYS5qcFwiOnRydWUsXCJnaWZ1LmpwXCI6dHJ1ZSxcImd1bm1hLmpwXCI6dHJ1ZSxcImhpcm9zaGltYS5qcFwiOnRydWUsXCJob2trYWlkby5qcFwiOnRydWUsXCJoeW9nby5qcFwiOnRydWUsXCJpYmFyYWtpLmpwXCI6dHJ1ZSxcImlzaGlrYXdhLmpwXCI6dHJ1ZSxcIml3YXRlLmpwXCI6dHJ1ZSxcImthZ2F3YS5qcFwiOnRydWUsXCJrYWdvc2hpbWEuanBcIjp0cnVlLFwia2FuYWdhd2EuanBcIjp0cnVlLFwia29jaGkuanBcIjp0cnVlLFwia3VtYW1vdG8uanBcIjp0cnVlLFwia3lvdG8uanBcIjp0cnVlLFwibWllLmpwXCI6dHJ1ZSxcIm1peWFnaS5qcFwiOnRydWUsXCJtaXlhemFraS5qcFwiOnRydWUsXCJuYWdhbm8uanBcIjp0cnVlLFwibmFnYXNha2kuanBcIjp0cnVlLFwibmFyYS5qcFwiOnRydWUsXCJuaWlnYXRhLmpwXCI6dHJ1ZSxcIm9pdGEuanBcIjp0cnVlLFwib2theWFtYS5qcFwiOnRydWUsXCJva2luYXdhLmpwXCI6dHJ1ZSxcIm9zYWthLmpwXCI6dHJ1ZSxcInNhZ2EuanBcIjp0cnVlLFwic2FpdGFtYS5qcFwiOnRydWUsXCJzaGlnYS5qcFwiOnRydWUsXCJzaGltYW5lLmpwXCI6dHJ1ZSxcInNoaXp1b2thLmpwXCI6dHJ1ZSxcInRvY2hpZ2kuanBcIjp0cnVlLFwidG9rdXNoaW1hLmpwXCI6dHJ1ZSxcInRva3lvLmpwXCI6dHJ1ZSxcInRvdHRvcmkuanBcIjp0cnVlLFwidG95YW1hLmpwXCI6dHJ1ZSxcIndha2F5YW1hLmpwXCI6dHJ1ZSxcInlhbWFnYXRhLmpwXCI6dHJ1ZSxcInlhbWFndWNoaS5qcFwiOnRydWUsXCJ5YW1hbmFzaGkuanBcIjp0cnVlLFwieG4tLTRwdnhzLmpwXCI6dHJ1ZSxcInhuLS12Z3U0MDJjLmpwXCI6dHJ1ZSxcInhuLS1jM3MxNG0uanBcIjp0cnVlLFwieG4tLWY2cXg1M2EuanBcIjp0cnVlLFwieG4tLThwdnI0dS5qcFwiOnRydWUsXCJ4bi0tdWlzdDIyaC5qcFwiOnRydWUsXCJ4bi0tZGpyczcyZDZ1eS5qcFwiOnRydWUsXCJ4bi0tbWtydTQ1aS5qcFwiOnRydWUsXCJ4bi0tMHRycTdwN25uLmpwXCI6dHJ1ZSxcInhuLS04bHRyNjJrLmpwXCI6dHJ1ZSxcInhuLS0ybTRhMTVlLmpwXCI6dHJ1ZSxcInhuLS1lZnZuOXMuanBcIjp0cnVlLFwieG4tLTMydnAzMGguanBcIjp0cnVlLFwieG4tLTRpdDc5N2suanBcIjp0cnVlLFwieG4tLTFscXM3MWQuanBcIjp0cnVlLFwieG4tLTVydHA0OWMuanBcIjp0cnVlLFwieG4tLTVqczA0NWQuanBcIjp0cnVlLFwieG4tLWVocXo1Nm4uanBcIjp0cnVlLFwieG4tLTFscXMwM24uanBcIjp0cnVlLFwieG4tLXFxcXQxMW0uanBcIjp0cnVlLFwieG4tLWticnE3by5qcFwiOnRydWUsXCJ4bi0tcHNzdTMzbC5qcFwiOnRydWUsXCJ4bi0tbnRzcTE3Zy5qcFwiOnRydWUsXCJ4bi0tdWlzejNnLmpwXCI6dHJ1ZSxcInhuLS02YnR3NWEuanBcIjp0cnVlLFwieG4tLTFjdHdvLmpwXCI6dHJ1ZSxcInhuLS02b3J4MnIuanBcIjp0cnVlLFwieG4tLXJodDYxZS5qcFwiOnRydWUsXCJ4bi0tcmh0Mjd6LmpwXCI6dHJ1ZSxcInhuLS1kanR5NGsuanBcIjp0cnVlLFwieG4tLW5pdDIyNWsuanBcIjp0cnVlLFwieG4tLXJodDNkLmpwXCI6dHJ1ZSxcInhuLS1rbHR5NXguanBcIjp0cnVlLFwieG4tLWtsdHg5YS5qcFwiOnRydWUsXCJ4bi0ta2x0cDdkLmpwXCI6dHJ1ZSxcInhuLS11dXd1NThhLmpwXCI6dHJ1ZSxcInhuLS16YngwMjVkLmpwXCI6dHJ1ZSxcInhuLS1udHNvMGlxeDNhLmpwXCI6dHJ1ZSxcInhuLS1lbHFxMTZoLmpwXCI6dHJ1ZSxcInhuLS00aXQxNjhkLmpwXCI6dHJ1ZSxcInhuLS1rbHQ3ODdkLmpwXCI6dHJ1ZSxcInhuLS1ybnkzMWguanBcIjp0cnVlLFwieG4tLTd0MGEyNjRjLmpwXCI6dHJ1ZSxcInhuLS01cnRxMzRrLmpwXCI6dHJ1ZSxcInhuLS1rN3luOTVlLmpwXCI6dHJ1ZSxcInhuLS10b3IxMzFvLmpwXCI6dHJ1ZSxcInhuLS1kNXF2N3o4NzZjLmpwXCI6dHJ1ZSxcIioua2F3YXNha2kuanBcIjp0cnVlLFwiKi5raXRha3l1c2h1LmpwXCI6dHJ1ZSxcIioua29iZS5qcFwiOnRydWUsXCIqLm5hZ295YS5qcFwiOnRydWUsXCIqLnNhcHBvcm8uanBcIjp0cnVlLFwiKi5zZW5kYWkuanBcIjp0cnVlLFwiKi55b2tvaGFtYS5qcFwiOnRydWUsXCJjaXR5Lmthd2FzYWtpLmpwXCI6ZmFsc2UsXCJjaXR5LmtpdGFreXVzaHUuanBcIjpmYWxzZSxcImNpdHkua29iZS5qcFwiOmZhbHNlLFwiY2l0eS5uYWdveWEuanBcIjpmYWxzZSxcImNpdHkuc2FwcG9yby5qcFwiOmZhbHNlLFwiY2l0eS5zZW5kYWkuanBcIjpmYWxzZSxcImNpdHkueW9rb2hhbWEuanBcIjpmYWxzZSxcImFpc2FpLmFpY2hpLmpwXCI6dHJ1ZSxcImFtYS5haWNoaS5qcFwiOnRydWUsXCJhbmpvLmFpY2hpLmpwXCI6dHJ1ZSxcImFzdWtlLmFpY2hpLmpwXCI6dHJ1ZSxcImNoaXJ5dS5haWNoaS5qcFwiOnRydWUsXCJjaGl0YS5haWNoaS5qcFwiOnRydWUsXCJmdXNvLmFpY2hpLmpwXCI6dHJ1ZSxcImdhbWFnb3JpLmFpY2hpLmpwXCI6dHJ1ZSxcImhhbmRhLmFpY2hpLmpwXCI6dHJ1ZSxcImhhenUuYWljaGkuanBcIjp0cnVlLFwiaGVraW5hbi5haWNoaS5qcFwiOnRydWUsXCJoaWdhc2hpdXJhLmFpY2hpLmpwXCI6dHJ1ZSxcImljaGlub21peWEuYWljaGkuanBcIjp0cnVlLFwiaW5hemF3YS5haWNoaS5qcFwiOnRydWUsXCJpbnV5YW1hLmFpY2hpLmpwXCI6dHJ1ZSxcImlzc2hpa2kuYWljaGkuanBcIjp0cnVlLFwiaXdha3VyYS5haWNoaS5qcFwiOnRydWUsXCJrYW5pZS5haWNoaS5qcFwiOnRydWUsXCJrYXJpeWEuYWljaGkuanBcIjp0cnVlLFwia2FzdWdhaS5haWNoaS5qcFwiOnRydWUsXCJraXJhLmFpY2hpLmpwXCI6dHJ1ZSxcImtpeW9zdS5haWNoaS5qcFwiOnRydWUsXCJrb21ha2kuYWljaGkuanBcIjp0cnVlLFwia29uYW4uYWljaGkuanBcIjp0cnVlLFwia290YS5haWNoaS5qcFwiOnRydWUsXCJtaWhhbWEuYWljaGkuanBcIjp0cnVlLFwibWl5b3NoaS5haWNoaS5qcFwiOnRydWUsXCJuaXNoaW8uYWljaGkuanBcIjp0cnVlLFwibmlzc2hpbi5haWNoaS5qcFwiOnRydWUsXCJvYnUuYWljaGkuanBcIjp0cnVlLFwib2d1Y2hpLmFpY2hpLmpwXCI6dHJ1ZSxcIm9oYXJ1LmFpY2hpLmpwXCI6dHJ1ZSxcIm9rYXpha2kuYWljaGkuanBcIjp0cnVlLFwib3dhcmlhc2FoaS5haWNoaS5qcFwiOnRydWUsXCJzZXRvLmFpY2hpLmpwXCI6dHJ1ZSxcInNoaWthdHN1LmFpY2hpLmpwXCI6dHJ1ZSxcInNoaW5zaGlyby5haWNoaS5qcFwiOnRydWUsXCJzaGl0YXJhLmFpY2hpLmpwXCI6dHJ1ZSxcInRhaGFyYS5haWNoaS5qcFwiOnRydWUsXCJ0YWthaGFtYS5haWNoaS5qcFwiOnRydWUsXCJ0b2Jpc2hpbWEuYWljaGkuanBcIjp0cnVlLFwidG9laS5haWNoaS5qcFwiOnRydWUsXCJ0b2dvLmFpY2hpLmpwXCI6dHJ1ZSxcInRva2FpLmFpY2hpLmpwXCI6dHJ1ZSxcInRva29uYW1lLmFpY2hpLmpwXCI6dHJ1ZSxcInRveW9ha2UuYWljaGkuanBcIjp0cnVlLFwidG95b2hhc2hpLmFpY2hpLmpwXCI6dHJ1ZSxcInRveW9rYXdhLmFpY2hpLmpwXCI6dHJ1ZSxcInRveW9uZS5haWNoaS5qcFwiOnRydWUsXCJ0b3lvdGEuYWljaGkuanBcIjp0cnVlLFwidHN1c2hpbWEuYWljaGkuanBcIjp0cnVlLFwieWF0b21pLmFpY2hpLmpwXCI6dHJ1ZSxcImFraXRhLmFraXRhLmpwXCI6dHJ1ZSxcImRhaXNlbi5ha2l0YS5qcFwiOnRydWUsXCJmdWppc2F0by5ha2l0YS5qcFwiOnRydWUsXCJnb2pvbWUuYWtpdGEuanBcIjp0cnVlLFwiaGFjaGlyb2dhdGEuYWtpdGEuanBcIjp0cnVlLFwiaGFwcG91LmFraXRhLmpwXCI6dHJ1ZSxcImhpZ2FzaGluYXJ1c2UuYWtpdGEuanBcIjp0cnVlLFwiaG9uam8uYWtpdGEuanBcIjp0cnVlLFwiaG9uanlvLmFraXRhLmpwXCI6dHJ1ZSxcImlrYXdhLmFraXRhLmpwXCI6dHJ1ZSxcImthbWlrb2FuaS5ha2l0YS5qcFwiOnRydWUsXCJrYW1pb2thLmFraXRhLmpwXCI6dHJ1ZSxcImthdGFnYW1pLmFraXRhLmpwXCI6dHJ1ZSxcImthenVuby5ha2l0YS5qcFwiOnRydWUsXCJraXRhYWtpdGEuYWtpdGEuanBcIjp0cnVlLFwia29zYWthLmFraXRhLmpwXCI6dHJ1ZSxcImt5b3dhLmFraXRhLmpwXCI6dHJ1ZSxcIm1pc2F0by5ha2l0YS5qcFwiOnRydWUsXCJtaXRhbmUuYWtpdGEuanBcIjp0cnVlLFwibW9yaXlvc2hpLmFraXRhLmpwXCI6dHJ1ZSxcIm5pa2Foby5ha2l0YS5qcFwiOnRydWUsXCJub3NoaXJvLmFraXRhLmpwXCI6dHJ1ZSxcIm9kYXRlLmFraXRhLmpwXCI6dHJ1ZSxcIm9nYS5ha2l0YS5qcFwiOnRydWUsXCJvZ2F0YS5ha2l0YS5qcFwiOnRydWUsXCJzZW1ib2t1LmFraXRhLmpwXCI6dHJ1ZSxcInlva290ZS5ha2l0YS5qcFwiOnRydWUsXCJ5dXJpaG9uam8uYWtpdGEuanBcIjp0cnVlLFwiYW9tb3JpLmFvbW9yaS5qcFwiOnRydWUsXCJnb25vaGUuYW9tb3JpLmpwXCI6dHJ1ZSxcImhhY2hpbm9oZS5hb21vcmkuanBcIjp0cnVlLFwiaGFzaGlrYW1pLmFvbW9yaS5qcFwiOnRydWUsXCJoaXJhbmFpLmFvbW9yaS5qcFwiOnRydWUsXCJoaXJvc2FraS5hb21vcmkuanBcIjp0cnVlLFwiaXRheWFuYWdpLmFvbW9yaS5qcFwiOnRydWUsXCJrdXJvaXNoaS5hb21vcmkuanBcIjp0cnVlLFwibWlzYXdhLmFvbW9yaS5qcFwiOnRydWUsXCJtdXRzdS5hb21vcmkuanBcIjp0cnVlLFwibmFrYWRvbWFyaS5hb21vcmkuanBcIjp0cnVlLFwibm9oZWppLmFvbW9yaS5qcFwiOnRydWUsXCJvaXJhc2UuYW9tb3JpLmpwXCI6dHJ1ZSxcIm93YW5pLmFvbW9yaS5qcFwiOnRydWUsXCJyb2t1bm9oZS5hb21vcmkuanBcIjp0cnVlLFwic2Fubm9oZS5hb21vcmkuanBcIjp0cnVlLFwic2hpY2hpbm9oZS5hb21vcmkuanBcIjp0cnVlLFwic2hpbmdvLmFvbW9yaS5qcFwiOnRydWUsXCJ0YWtrby5hb21vcmkuanBcIjp0cnVlLFwidG93YWRhLmFvbW9yaS5qcFwiOnRydWUsXCJ0c3VnYXJ1LmFvbW9yaS5qcFwiOnRydWUsXCJ0c3VydXRhLmFvbW9yaS5qcFwiOnRydWUsXCJhYmlrby5jaGliYS5qcFwiOnRydWUsXCJhc2FoaS5jaGliYS5qcFwiOnRydWUsXCJjaG9uYW4uY2hpYmEuanBcIjp0cnVlLFwiY2hvc2VpLmNoaWJhLmpwXCI6dHJ1ZSxcImNob3NoaS5jaGliYS5qcFwiOnRydWUsXCJjaHVvLmNoaWJhLmpwXCI6dHJ1ZSxcImZ1bmFiYXNoaS5jaGliYS5qcFwiOnRydWUsXCJmdXR0c3UuY2hpYmEuanBcIjp0cnVlLFwiaGFuYW1pZ2F3YS5jaGliYS5qcFwiOnRydWUsXCJpY2hpaGFyYS5jaGliYS5qcFwiOnRydWUsXCJpY2hpa2F3YS5jaGliYS5qcFwiOnRydWUsXCJpY2hpbm9taXlhLmNoaWJhLmpwXCI6dHJ1ZSxcImluemFpLmNoaWJhLmpwXCI6dHJ1ZSxcImlzdW1pLmNoaWJhLmpwXCI6dHJ1ZSxcImthbWFnYXlhLmNoaWJhLmpwXCI6dHJ1ZSxcImthbW9nYXdhLmNoaWJhLmpwXCI6dHJ1ZSxcImthc2hpd2EuY2hpYmEuanBcIjp0cnVlLFwia2F0b3JpLmNoaWJhLmpwXCI6dHJ1ZSxcImthdHN1dXJhLmNoaWJhLmpwXCI6dHJ1ZSxcImtpbWl0c3UuY2hpYmEuanBcIjp0cnVlLFwia2lzYXJhenUuY2hpYmEuanBcIjp0cnVlLFwia296YWtpLmNoaWJhLmpwXCI6dHJ1ZSxcImt1anVrdXJpLmNoaWJhLmpwXCI6dHJ1ZSxcImt5b25hbi5jaGliYS5qcFwiOnRydWUsXCJtYXRzdWRvLmNoaWJhLmpwXCI6dHJ1ZSxcIm1pZG9yaS5jaGliYS5qcFwiOnRydWUsXCJtaWhhbWEuY2hpYmEuanBcIjp0cnVlLFwibWluYW1pYm9zby5jaGliYS5qcFwiOnRydWUsXCJtb2JhcmEuY2hpYmEuanBcIjp0cnVlLFwibXV0c3V6YXdhLmNoaWJhLmpwXCI6dHJ1ZSxcIm5hZ2FyYS5jaGliYS5qcFwiOnRydWUsXCJuYWdhcmV5YW1hLmNoaWJhLmpwXCI6dHJ1ZSxcIm5hcmFzaGluby5jaGliYS5qcFwiOnRydWUsXCJuYXJpdGEuY2hpYmEuanBcIjp0cnVlLFwibm9kYS5jaGliYS5qcFwiOnRydWUsXCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwXCI6dHJ1ZSxcIm9taWdhd2EuY2hpYmEuanBcIjp0cnVlLFwib25qdWt1LmNoaWJhLmpwXCI6dHJ1ZSxcIm90YWtpLmNoaWJhLmpwXCI6dHJ1ZSxcInNha2FlLmNoaWJhLmpwXCI6dHJ1ZSxcInNha3VyYS5jaGliYS5qcFwiOnRydWUsXCJzaGltb2Z1c2EuY2hpYmEuanBcIjp0cnVlLFwic2hpcmFrby5jaGliYS5qcFwiOnRydWUsXCJzaGlyb2kuY2hpYmEuanBcIjp0cnVlLFwic2hpc3VpLmNoaWJhLmpwXCI6dHJ1ZSxcInNvZGVnYXVyYS5jaGliYS5qcFwiOnRydWUsXCJzb3NhLmNoaWJhLmpwXCI6dHJ1ZSxcInRha28uY2hpYmEuanBcIjp0cnVlLFwidGF0ZXlhbWEuY2hpYmEuanBcIjp0cnVlLFwidG9nYW5lLmNoaWJhLmpwXCI6dHJ1ZSxcInRvaG5vc2hvLmNoaWJhLmpwXCI6dHJ1ZSxcInRvbWlzYXRvLmNoaWJhLmpwXCI6dHJ1ZSxcInVyYXlhc3UuY2hpYmEuanBcIjp0cnVlLFwieWFjaGltYXRhLmNoaWJhLmpwXCI6dHJ1ZSxcInlhY2hpeW8uY2hpYmEuanBcIjp0cnVlLFwieW9rYWljaGliYS5jaGliYS5qcFwiOnRydWUsXCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEuanBcIjp0cnVlLFwieW90c3VrYWlkby5jaGliYS5qcFwiOnRydWUsXCJhaW5hbi5laGltZS5qcFwiOnRydWUsXCJob25haS5laGltZS5qcFwiOnRydWUsXCJpa2F0YS5laGltZS5qcFwiOnRydWUsXCJpbWFiYXJpLmVoaW1lLmpwXCI6dHJ1ZSxcIml5by5laGltZS5qcFwiOnRydWUsXCJrYW1pamltYS5laGltZS5qcFwiOnRydWUsXCJraWhva3UuZWhpbWUuanBcIjp0cnVlLFwia3VtYWtvZ2VuLmVoaW1lLmpwXCI6dHJ1ZSxcIm1hc2FraS5laGltZS5qcFwiOnRydWUsXCJtYXRzdW5vLmVoaW1lLmpwXCI6dHJ1ZSxcIm1hdHN1eWFtYS5laGltZS5qcFwiOnRydWUsXCJuYW1pa2F0YS5laGltZS5qcFwiOnRydWUsXCJuaWloYW1hLmVoaW1lLmpwXCI6dHJ1ZSxcIm96dS5laGltZS5qcFwiOnRydWUsXCJzYWlqby5laGltZS5qcFwiOnRydWUsXCJzZWl5by5laGltZS5qcFwiOnRydWUsXCJzaGlrb2t1Y2h1by5laGltZS5qcFwiOnRydWUsXCJ0b2JlLmVoaW1lLmpwXCI6dHJ1ZSxcInRvb24uZWhpbWUuanBcIjp0cnVlLFwidWNoaWtvLmVoaW1lLmpwXCI6dHJ1ZSxcInV3YWppbWEuZWhpbWUuanBcIjp0cnVlLFwieWF3YXRhaGFtYS5laGltZS5qcFwiOnRydWUsXCJlY2hpemVuLmZ1a3VpLmpwXCI6dHJ1ZSxcImVpaGVpamkuZnVrdWkuanBcIjp0cnVlLFwiZnVrdWkuZnVrdWkuanBcIjp0cnVlLFwiaWtlZGEuZnVrdWkuanBcIjp0cnVlLFwia2F0c3V5YW1hLmZ1a3VpLmpwXCI6dHJ1ZSxcIm1paGFtYS5mdWt1aS5qcFwiOnRydWUsXCJtaW5hbWllY2hpemVuLmZ1a3VpLmpwXCI6dHJ1ZSxcIm9iYW1hLmZ1a3VpLmpwXCI6dHJ1ZSxcIm9oaS5mdWt1aS5qcFwiOnRydWUsXCJvbm8uZnVrdWkuanBcIjp0cnVlLFwic2FiYWUuZnVrdWkuanBcIjp0cnVlLFwic2FrYWkuZnVrdWkuanBcIjp0cnVlLFwidGFrYWhhbWEuZnVrdWkuanBcIjp0cnVlLFwidHN1cnVnYS5mdWt1aS5qcFwiOnRydWUsXCJ3YWthc2EuZnVrdWkuanBcIjp0cnVlLFwiYXNoaXlhLmZ1a3Vva2EuanBcIjp0cnVlLFwiYnV6ZW4uZnVrdW9rYS5qcFwiOnRydWUsXCJjaGlrdWdvLmZ1a3Vva2EuanBcIjp0cnVlLFwiY2hpa3Voby5mdWt1b2thLmpwXCI6dHJ1ZSxcImNoaWt1am8uZnVrdW9rYS5qcFwiOnRydWUsXCJjaGlrdXNoaW5vLmZ1a3Vva2EuanBcIjp0cnVlLFwiY2hpa3V6ZW4uZnVrdW9rYS5qcFwiOnRydWUsXCJjaHVvLmZ1a3Vva2EuanBcIjp0cnVlLFwiZGF6YWlmdS5mdWt1b2thLmpwXCI6dHJ1ZSxcImZ1a3VjaGkuZnVrdW9rYS5qcFwiOnRydWUsXCJoYWthdGEuZnVrdW9rYS5qcFwiOnRydWUsXCJoaWdhc2hpLmZ1a3Vva2EuanBcIjp0cnVlLFwiaGlyb2thd2EuZnVrdW9rYS5qcFwiOnRydWUsXCJoaXNheWFtYS5mdWt1b2thLmpwXCI6dHJ1ZSxcImlpenVrYS5mdWt1b2thLmpwXCI6dHJ1ZSxcImluYXRzdWtpLmZ1a3Vva2EuanBcIjp0cnVlLFwia2Foby5mdWt1b2thLmpwXCI6dHJ1ZSxcImthc3VnYS5mdWt1b2thLmpwXCI6dHJ1ZSxcImthc3V5YS5mdWt1b2thLmpwXCI6dHJ1ZSxcImthd2FyYS5mdWt1b2thLmpwXCI6dHJ1ZSxcImtlaXNlbi5mdWt1b2thLmpwXCI6dHJ1ZSxcImtvZ2EuZnVrdW9rYS5qcFwiOnRydWUsXCJrdXJhdGUuZnVrdW9rYS5qcFwiOnRydWUsXCJrdXJvZ2kuZnVrdW9rYS5qcFwiOnRydWUsXCJrdXJ1bWUuZnVrdW9rYS5qcFwiOnRydWUsXCJtaW5hbWkuZnVrdW9rYS5qcFwiOnRydWUsXCJtaXlha28uZnVrdW9rYS5qcFwiOnRydWUsXCJtaXlhbWEuZnVrdW9rYS5qcFwiOnRydWUsXCJtaXlhd2FrYS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm1penVtYWtpLmZ1a3Vva2EuanBcIjp0cnVlLFwibXVuYWthdGEuZnVrdW9rYS5qcFwiOnRydWUsXCJuYWthZ2F3YS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm5ha2FtYS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm5pc2hpLmZ1a3Vva2EuanBcIjp0cnVlLFwibm9nYXRhLmZ1a3Vva2EuanBcIjp0cnVlLFwib2dvcmkuZnVrdW9rYS5qcFwiOnRydWUsXCJva2FnYWtpLmZ1a3Vva2EuanBcIjp0cnVlLFwib2thd2EuZnVrdW9rYS5qcFwiOnRydWUsXCJva2kuZnVrdW9rYS5qcFwiOnRydWUsXCJvbXV0YS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm9uZ2EuZnVrdW9rYS5qcFwiOnRydWUsXCJvbm9qby5mdWt1b2thLmpwXCI6dHJ1ZSxcIm90by5mdWt1b2thLmpwXCI6dHJ1ZSxcInNhaWdhd2EuZnVrdW9rYS5qcFwiOnRydWUsXCJzYXNhZ3VyaS5mdWt1b2thLmpwXCI6dHJ1ZSxcInNoaW5ndS5mdWt1b2thLmpwXCI6dHJ1ZSxcInNoaW55b3NoaXRvbWkuZnVrdW9rYS5qcFwiOnRydWUsXCJzaG9uYWkuZnVrdW9rYS5qcFwiOnRydWUsXCJzb2VkYS5mdWt1b2thLmpwXCI6dHJ1ZSxcInN1ZS5mdWt1b2thLmpwXCI6dHJ1ZSxcInRhY2hpYXJhaS5mdWt1b2thLmpwXCI6dHJ1ZSxcInRhZ2F3YS5mdWt1b2thLmpwXCI6dHJ1ZSxcInRha2F0YS5mdWt1b2thLmpwXCI6dHJ1ZSxcInRvaG8uZnVrdW9rYS5qcFwiOnRydWUsXCJ0b3lvdHN1LmZ1a3Vva2EuanBcIjp0cnVlLFwidHN1aWtpLmZ1a3Vva2EuanBcIjp0cnVlLFwidWtpaGEuZnVrdW9rYS5qcFwiOnRydWUsXCJ1bWkuZnVrdW9rYS5qcFwiOnRydWUsXCJ1c3VpLmZ1a3Vva2EuanBcIjp0cnVlLFwieWFtYWRhLmZ1a3Vva2EuanBcIjp0cnVlLFwieWFtZS5mdWt1b2thLmpwXCI6dHJ1ZSxcInlhbmFnYXdhLmZ1a3Vva2EuanBcIjp0cnVlLFwieXVrdWhhc2hpLmZ1a3Vva2EuanBcIjp0cnVlLFwiYWl6dWJhbmdlLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJhaXp1bWlzYXRvLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJhaXp1d2FrYW1hdHN1LmZ1a3VzaGltYS5qcFwiOnRydWUsXCJhc2FrYXdhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJiYW5kYWkuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImRhdGUuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImZ1a3VzaGltYS5mdWt1c2hpbWEuanBcIjp0cnVlLFwiZnVydWRvbm8uZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImZ1dGFiYS5mdWt1c2hpbWEuanBcIjp0cnVlLFwiaGFuYXdhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJoaWdhc2hpLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJoaXJhdGEuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImhpcm9uby5mdWt1c2hpbWEuanBcIjp0cnVlLFwiaWl0YXRlLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJpbmF3YXNoaXJvLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJpc2hpa2F3YS5mdWt1c2hpbWEuanBcIjp0cnVlLFwiaXdha2kuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcIml6dW1pemFraS5mdWt1c2hpbWEuanBcIjp0cnVlLFwia2FnYW1paXNoaS5mdWt1c2hpbWEuanBcIjp0cnVlLFwia2FuZXlhbWEuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImthd2FtYXRhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJraXRha2F0YS5mdWt1c2hpbWEuanBcIjp0cnVlLFwia2l0YXNoaW9iYXJhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJrb29yaS5mdWt1c2hpbWEuanBcIjp0cnVlLFwia29yaXlhbWEuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImt1bmltaS5mdWt1c2hpbWEuanBcIjp0cnVlLFwibWloYXJ1LmZ1a3VzaGltYS5qcFwiOnRydWUsXCJtaXNoaW1hLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJuYW1pZS5mdWt1c2hpbWEuanBcIjp0cnVlLFwibmFuZ28uZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcIm5pc2hpYWl6dS5mdWt1c2hpbWEuanBcIjp0cnVlLFwibmlzaGlnby5mdWt1c2hpbWEuanBcIjp0cnVlLFwib2t1bWEuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcIm9tb3RlZ28uZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcIm9uby5mdWt1c2hpbWEuanBcIjp0cnVlLFwib3RhbWEuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcInNhbWVnYXdhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJzaGltb2dvLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJzaGlyYWthd2EuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcInNob3dhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJzb21hLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJzdWthZ2F3YS5mdWt1c2hpbWEuanBcIjp0cnVlLFwidGFpc2hpbi5mdWt1c2hpbWEuanBcIjp0cnVlLFwidGFtYWthd2EuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcInRhbmFndXJhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJ0ZW5laS5mdWt1c2hpbWEuanBcIjp0cnVlLFwieWFidWtpLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJ5YW1hdG8uZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcInlhbWF0c3VyaS5mdWt1c2hpbWEuanBcIjp0cnVlLFwieWFuYWl6dS5mdWt1c2hpbWEuanBcIjp0cnVlLFwieXVnYXdhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJhbnBhY2hpLmdpZnUuanBcIjp0cnVlLFwiZW5hLmdpZnUuanBcIjp0cnVlLFwiZ2lmdS5naWZ1LmpwXCI6dHJ1ZSxcImdpbmFuLmdpZnUuanBcIjp0cnVlLFwiZ29kby5naWZ1LmpwXCI6dHJ1ZSxcImd1am8uZ2lmdS5qcFwiOnRydWUsXCJoYXNoaW1hLmdpZnUuanBcIjp0cnVlLFwiaGljaGlzby5naWZ1LmpwXCI6dHJ1ZSxcImhpZGEuZ2lmdS5qcFwiOnRydWUsXCJoaWdhc2hpc2hpcmFrYXdhLmdpZnUuanBcIjp0cnVlLFwiaWJpZ2F3YS5naWZ1LmpwXCI6dHJ1ZSxcImlrZWRhLmdpZnUuanBcIjp0cnVlLFwia2FrYW1pZ2FoYXJhLmdpZnUuanBcIjp0cnVlLFwia2FuaS5naWZ1LmpwXCI6dHJ1ZSxcImthc2FoYXJhLmdpZnUuanBcIjp0cnVlLFwia2FzYW1hdHN1LmdpZnUuanBcIjp0cnVlLFwia2F3YXVlLmdpZnUuanBcIjp0cnVlLFwia2l0YWdhdGEuZ2lmdS5qcFwiOnRydWUsXCJtaW5vLmdpZnUuanBcIjp0cnVlLFwibWlub2thbW8uZ2lmdS5qcFwiOnRydWUsXCJtaXRha2UuZ2lmdS5qcFwiOnRydWUsXCJtaXp1bmFtaS5naWZ1LmpwXCI6dHJ1ZSxcIm1vdG9zdS5naWZ1LmpwXCI6dHJ1ZSxcIm5ha2F0c3VnYXdhLmdpZnUuanBcIjp0cnVlLFwib2dha2kuZ2lmdS5qcFwiOnRydWUsXCJzYWthaG9naS5naWZ1LmpwXCI6dHJ1ZSxcInNla2kuZ2lmdS5qcFwiOnRydWUsXCJzZWtpZ2FoYXJhLmdpZnUuanBcIjp0cnVlLFwic2hpcmFrYXdhLmdpZnUuanBcIjp0cnVlLFwidGFqaW1pLmdpZnUuanBcIjp0cnVlLFwidGFrYXlhbWEuZ2lmdS5qcFwiOnRydWUsXCJ0YXJ1aS5naWZ1LmpwXCI6dHJ1ZSxcInRva2kuZ2lmdS5qcFwiOnRydWUsXCJ0b21pa2EuZ2lmdS5qcFwiOnRydWUsXCJ3YW5vdWNoaS5naWZ1LmpwXCI6dHJ1ZSxcInlhbWFnYXRhLmdpZnUuanBcIjp0cnVlLFwieWFvdHN1LmdpZnUuanBcIjp0cnVlLFwieW9yby5naWZ1LmpwXCI6dHJ1ZSxcImFubmFrYS5ndW5tYS5qcFwiOnRydWUsXCJjaGl5b2RhLmd1bm1hLmpwXCI6dHJ1ZSxcImZ1amlva2EuZ3VubWEuanBcIjp0cnVlLFwiaGlnYXNoaWFnYXRzdW1hLmd1bm1hLmpwXCI6dHJ1ZSxcImlzZXNha2kuZ3VubWEuanBcIjp0cnVlLFwiaXRha3VyYS5ndW5tYS5qcFwiOnRydWUsXCJrYW5uYS5ndW5tYS5qcFwiOnRydWUsXCJrYW5yYS5ndW5tYS5qcFwiOnRydWUsXCJrYXRhc2hpbmEuZ3VubWEuanBcIjp0cnVlLFwia2F3YWJhLmd1bm1hLmpwXCI6dHJ1ZSxcImtpcnl1Lmd1bm1hLmpwXCI6dHJ1ZSxcImt1c2F0c3UuZ3VubWEuanBcIjp0cnVlLFwibWFlYmFzaGkuZ3VubWEuanBcIjp0cnVlLFwibWVpd2EuZ3VubWEuanBcIjp0cnVlLFwibWlkb3JpLmd1bm1hLmpwXCI6dHJ1ZSxcIm1pbmFrYW1pLmd1bm1hLmpwXCI6dHJ1ZSxcIm5hZ2Fub2hhcmEuZ3VubWEuanBcIjp0cnVlLFwibmFrYW5vam8uZ3VubWEuanBcIjp0cnVlLFwibmFubW9rdS5ndW5tYS5qcFwiOnRydWUsXCJudW1hdGEuZ3VubWEuanBcIjp0cnVlLFwib2l6dW1pLmd1bm1hLmpwXCI6dHJ1ZSxcIm9yYS5ndW5tYS5qcFwiOnRydWUsXCJvdGEuZ3VubWEuanBcIjp0cnVlLFwic2hpYnVrYXdhLmd1bm1hLmpwXCI6dHJ1ZSxcInNoaW1vbml0YS5ndW5tYS5qcFwiOnRydWUsXCJzaGludG8uZ3VubWEuanBcIjp0cnVlLFwic2hvd2EuZ3VubWEuanBcIjp0cnVlLFwidGFrYXNha2kuZ3VubWEuanBcIjp0cnVlLFwidGFrYXlhbWEuZ3VubWEuanBcIjp0cnVlLFwidGFtYW11cmEuZ3VubWEuanBcIjp0cnVlLFwidGF0ZWJheWFzaGkuZ3VubWEuanBcIjp0cnVlLFwidG9taW9rYS5ndW5tYS5qcFwiOnRydWUsXCJ0c3VraXlvbm8uZ3VubWEuanBcIjp0cnVlLFwidHN1bWFnb2kuZ3VubWEuanBcIjp0cnVlLFwidWVuby5ndW5tYS5qcFwiOnRydWUsXCJ5b3NoaW9rYS5ndW5tYS5qcFwiOnRydWUsXCJhc2FtaW5hbWkuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcImRhaXdhLmhpcm9zaGltYS5qcFwiOnRydWUsXCJldGFqaW1hLmhpcm9zaGltYS5qcFwiOnRydWUsXCJmdWNodS5oaXJvc2hpbWEuanBcIjp0cnVlLFwiZnVrdXlhbWEuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcImhhdHN1a2FpY2hpLmhpcm9zaGltYS5qcFwiOnRydWUsXCJoaWdhc2hpaGlyb3NoaW1hLmhpcm9zaGltYS5qcFwiOnRydWUsXCJob25nby5oaXJvc2hpbWEuanBcIjp0cnVlLFwiamluc2VraWtvZ2VuLmhpcm9zaGltYS5qcFwiOnRydWUsXCJrYWl0YS5oaXJvc2hpbWEuanBcIjp0cnVlLFwia3VpLmhpcm9zaGltYS5qcFwiOnRydWUsXCJrdW1hbm8uaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcImt1cmUuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcIm1paGFyYS5oaXJvc2hpbWEuanBcIjp0cnVlLFwibWl5b3NoaS5oaXJvc2hpbWEuanBcIjp0cnVlLFwibmFrYS5oaXJvc2hpbWEuanBcIjp0cnVlLFwib25vbWljaGkuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcIm9zYWtpa2FtaWppbWEuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcIm90YWtlLmhpcm9zaGltYS5qcFwiOnRydWUsXCJzYWthLmhpcm9zaGltYS5qcFwiOnRydWUsXCJzZXJhLmhpcm9zaGltYS5qcFwiOnRydWUsXCJzZXJhbmlzaGkuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcInNoaW5pY2hpLmhpcm9zaGltYS5qcFwiOnRydWUsXCJzaG9iYXJhLmhpcm9zaGltYS5qcFwiOnRydWUsXCJ0YWtlaGFyYS5oaXJvc2hpbWEuanBcIjp0cnVlLFwiYWJhc2hpcmkuaG9ra2FpZG8uanBcIjp0cnVlLFwiYWJpcmEuaG9ra2FpZG8uanBcIjp0cnVlLFwiYWliZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJha2FiaXJhLmhva2thaWRvLmpwXCI6dHJ1ZSxcImFra2VzaGkuaG9ra2FpZG8uanBcIjp0cnVlLFwiYXNhaGlrYXdhLmhva2thaWRvLmpwXCI6dHJ1ZSxcImFzaGliZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJhc2hvcm8uaG9ra2FpZG8uanBcIjp0cnVlLFwiYXNzYWJ1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcImF0c3VtYS5ob2trYWlkby5qcFwiOnRydWUsXCJiaWJhaS5ob2trYWlkby5qcFwiOnRydWUsXCJiaWVpLmhva2thaWRvLmpwXCI6dHJ1ZSxcImJpZnVrYS5ob2trYWlkby5qcFwiOnRydWUsXCJiaWhvcm8uaG9ra2FpZG8uanBcIjp0cnVlLFwiYmlyYXRvcmkuaG9ra2FpZG8uanBcIjp0cnVlLFwiY2hpcHB1YmV0c3UuaG9ra2FpZG8uanBcIjp0cnVlLFwiY2hpdG9zZS5ob2trYWlkby5qcFwiOnRydWUsXCJkYXRlLmhva2thaWRvLmpwXCI6dHJ1ZSxcImViZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJlbWJldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcImVuaXdhLmhva2thaWRvLmpwXCI6dHJ1ZSxcImVyaW1vLmhva2thaWRvLmpwXCI6dHJ1ZSxcImVzYW4uaG9ra2FpZG8uanBcIjp0cnVlLFwiZXNhc2hpLmhva2thaWRvLmpwXCI6dHJ1ZSxcImZ1a2FnYXdhLmhva2thaWRvLmpwXCI6dHJ1ZSxcImZ1a3VzaGltYS5ob2trYWlkby5qcFwiOnRydWUsXCJmdXJhbm8uaG9ra2FpZG8uanBcIjp0cnVlLFwiZnVydWJpcmEuaG9ra2FpZG8uanBcIjp0cnVlLFwiaGFib3JvLmhva2thaWRvLmpwXCI6dHJ1ZSxcImhha29kYXRlLmhva2thaWRvLmpwXCI6dHJ1ZSxcImhhbWF0b25iZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJoaWRha2EuaG9ra2FpZG8uanBcIjp0cnVlLFwiaGlnYXNoaWthZ3VyYS5ob2trYWlkby5qcFwiOnRydWUsXCJoaWdhc2hpa2F3YS5ob2trYWlkby5qcFwiOnRydWUsXCJoaXJvby5ob2trYWlkby5qcFwiOnRydWUsXCJob2t1cnl1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcImhva3V0by5ob2trYWlkby5qcFwiOnRydWUsXCJob25iZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJob3Jva2FuYWkuaG9ra2FpZG8uanBcIjp0cnVlLFwiaG9yb25vYmUuaG9ra2FpZG8uanBcIjp0cnVlLFwiaWtlZGEuaG9ra2FpZG8uanBcIjp0cnVlLFwiaW1ha2FuZS5ob2trYWlkby5qcFwiOnRydWUsXCJpc2hpa2FyaS5ob2trYWlkby5qcFwiOnRydWUsXCJpd2FtaXphd2EuaG9ra2FpZG8uanBcIjp0cnVlLFwiaXdhbmFpLmhva2thaWRvLmpwXCI6dHJ1ZSxcImthbWlmdXJhbm8uaG9ra2FpZG8uanBcIjp0cnVlLFwia2FtaWthd2EuaG9ra2FpZG8uanBcIjp0cnVlLFwia2FtaXNoaWhvcm8uaG9ra2FpZG8uanBcIjp0cnVlLFwia2FtaXN1bmFnYXdhLmhva2thaWRvLmpwXCI6dHJ1ZSxcImthbW9lbmFpLmhva2thaWRvLmpwXCI6dHJ1ZSxcImtheWFiZS5ob2trYWlkby5qcFwiOnRydWUsXCJrZW1idWNoaS5ob2trYWlkby5qcFwiOnRydWUsXCJraWtvbmFpLmhva2thaWRvLmpwXCI6dHJ1ZSxcImtpbW9iZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJraXRhaGlyb3NoaW1hLmhva2thaWRvLmpwXCI6dHJ1ZSxcImtpdGFtaS5ob2trYWlkby5qcFwiOnRydWUsXCJraXlvc2F0by5ob2trYWlkby5qcFwiOnRydWUsXCJrb3NoaW1penUuaG9ra2FpZG8uanBcIjp0cnVlLFwia3VubmVwcHUuaG9ra2FpZG8uanBcIjp0cnVlLFwia3VyaXlhbWEuaG9ra2FpZG8uanBcIjp0cnVlLFwia3Vyb21hdHN1bmFpLmhva2thaWRvLmpwXCI6dHJ1ZSxcImt1c2hpcm8uaG9ra2FpZG8uanBcIjp0cnVlLFwia3V0Y2hhbi5ob2trYWlkby5qcFwiOnRydWUsXCJreW93YS5ob2trYWlkby5qcFwiOnRydWUsXCJtYXNoaWtlLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm1hdHN1bWFlLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm1pa2FzYS5ob2trYWlkby5qcFwiOnRydWUsXCJtaW5hbWlmdXJhbm8uaG9ra2FpZG8uanBcIjp0cnVlLFwibW9tYmV0c3UuaG9ra2FpZG8uanBcIjp0cnVlLFwibW9zZXVzaGkuaG9ra2FpZG8uanBcIjp0cnVlLFwibXVrYXdhLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm11cm9yYW4uaG9ra2FpZG8uanBcIjp0cnVlLFwibmFpZS5ob2trYWlkby5qcFwiOnRydWUsXCJuYWthZ2F3YS5ob2trYWlkby5qcFwiOnRydWUsXCJuYWthc2F0c3VuYWkuaG9ra2FpZG8uanBcIjp0cnVlLFwibmFrYXRvbWJldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcIm5hbmFlLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm5hbnBvcm8uaG9ra2FpZG8uanBcIjp0cnVlLFwibmF5b3JvLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm5lbXVyby5ob2trYWlkby5qcFwiOnRydWUsXCJuaWlrYXBwdS5ob2trYWlkby5qcFwiOnRydWUsXCJuaWtpLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm5pc2hpb2tvcHBlLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm5vYm9yaWJldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcIm51bWF0YS5ob2trYWlkby5qcFwiOnRydWUsXCJvYmloaXJvLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm9iaXJhLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm9rZXRvLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm9rb3BwZS5ob2trYWlkby5qcFwiOnRydWUsXCJvdGFydS5ob2trYWlkby5qcFwiOnRydWUsXCJvdG9iZS5ob2trYWlkby5qcFwiOnRydWUsXCJvdG9mdWtlLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm90b2luZXBwdS5ob2trYWlkby5qcFwiOnRydWUsXCJvdW11Lmhva2thaWRvLmpwXCI6dHJ1ZSxcIm96b3JhLmhva2thaWRvLmpwXCI6dHJ1ZSxcInBpcHB1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcInJhbmtvc2hpLmhva2thaWRvLmpwXCI6dHJ1ZSxcInJlYnVuLmhva2thaWRvLmpwXCI6dHJ1ZSxcInJpa3ViZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJyaXNoaXJpLmhva2thaWRvLmpwXCI6dHJ1ZSxcInJpc2hpcmlmdWppLmhva2thaWRvLmpwXCI6dHJ1ZSxcInNhcm9tYS5ob2trYWlkby5qcFwiOnRydWUsXCJzYXJ1ZnV0c3UuaG9ra2FpZG8uanBcIjp0cnVlLFwic2hha290YW4uaG9ra2FpZG8uanBcIjp0cnVlLFwic2hhcmkuaG9ra2FpZG8uanBcIjp0cnVlLFwic2hpYmVjaGEuaG9ra2FpZG8uanBcIjp0cnVlLFwic2hpYmV0c3UuaG9ra2FpZG8uanBcIjp0cnVlLFwic2hpa2FiZS5ob2trYWlkby5qcFwiOnRydWUsXCJzaGlrYW9pLmhva2thaWRvLmpwXCI6dHJ1ZSxcInNoaW1hbWFraS5ob2trYWlkby5qcFwiOnRydWUsXCJzaGltaXp1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcInNoaW1va2F3YS5ob2trYWlkby5qcFwiOnRydWUsXCJzaGluc2hpbm90c3UuaG9ra2FpZG8uanBcIjp0cnVlLFwic2hpbnRva3UuaG9ra2FpZG8uanBcIjp0cnVlLFwic2hpcmFudWthLmhva2thaWRvLmpwXCI6dHJ1ZSxcInNoaXJhb2kuaG9ra2FpZG8uanBcIjp0cnVlLFwic2hpcml1Y2hpLmhva2thaWRvLmpwXCI6dHJ1ZSxcInNvYmV0c3UuaG9ra2FpZG8uanBcIjp0cnVlLFwic3VuYWdhd2EuaG9ra2FpZG8uanBcIjp0cnVlLFwidGFpa2kuaG9ra2FpZG8uanBcIjp0cnVlLFwidGFrYXN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcInRha2lrYXdhLmhva2thaWRvLmpwXCI6dHJ1ZSxcInRha2lub3VlLmhva2thaWRvLmpwXCI6dHJ1ZSxcInRlc2hpa2FnYS5ob2trYWlkby5qcFwiOnRydWUsXCJ0b2JldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcInRvaG1hLmhva2thaWRvLmpwXCI6dHJ1ZSxcInRvbWFrb21haS5ob2trYWlkby5qcFwiOnRydWUsXCJ0b21hcmkuaG9ra2FpZG8uanBcIjp0cnVlLFwidG95YS5ob2trYWlkby5qcFwiOnRydWUsXCJ0b3lha28uaG9ra2FpZG8uanBcIjp0cnVlLFwidG95b3RvbWkuaG9ra2FpZG8uanBcIjp0cnVlLFwidG95b3VyYS5ob2trYWlkby5qcFwiOnRydWUsXCJ0c3ViZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJ0c3VraWdhdGEuaG9ra2FpZG8uanBcIjp0cnVlLFwidXJha2F3YS5ob2trYWlkby5qcFwiOnRydWUsXCJ1cmF1c3UuaG9ra2FpZG8uanBcIjp0cnVlLFwidXJ5dS5ob2trYWlkby5qcFwiOnRydWUsXCJ1dGFzaGluYWkuaG9ra2FpZG8uanBcIjp0cnVlLFwid2Fra2FuYWkuaG9ra2FpZG8uanBcIjp0cnVlLFwid2Fzc2FtdS5ob2trYWlkby5qcFwiOnRydWUsXCJ5YWt1bW8uaG9ra2FpZG8uanBcIjp0cnVlLFwieW9pY2hpLmhva2thaWRvLmpwXCI6dHJ1ZSxcImFpb2kuaHlvZ28uanBcIjp0cnVlLFwiYWthc2hpLmh5b2dvLmpwXCI6dHJ1ZSxcImFrby5oeW9nby5qcFwiOnRydWUsXCJhbWFnYXNha2kuaHlvZ28uanBcIjp0cnVlLFwiYW9nYWtpLmh5b2dvLmpwXCI6dHJ1ZSxcImFzYWdvLmh5b2dvLmpwXCI6dHJ1ZSxcImFzaGl5YS5oeW9nby5qcFwiOnRydWUsXCJhd2FqaS5oeW9nby5qcFwiOnRydWUsXCJmdWt1c2FraS5oeW9nby5qcFwiOnRydWUsXCJnb3NoaWtpLmh5b2dvLmpwXCI6dHJ1ZSxcImhhcmltYS5oeW9nby5qcFwiOnRydWUsXCJoaW1lamkuaHlvZ28uanBcIjp0cnVlLFwiaWNoaWthd2EuaHlvZ28uanBcIjp0cnVlLFwiaW5hZ2F3YS5oeW9nby5qcFwiOnRydWUsXCJpdGFtaS5oeW9nby5qcFwiOnRydWUsXCJrYWtvZ2F3YS5oeW9nby5qcFwiOnRydWUsXCJrYW1pZ29yaS5oeW9nby5qcFwiOnRydWUsXCJrYW1pa2F3YS5oeW9nby5qcFwiOnRydWUsXCJrYXNhaS5oeW9nby5qcFwiOnRydWUsXCJrYXN1Z2EuaHlvZ28uanBcIjp0cnVlLFwia2F3YW5pc2hpLmh5b2dvLmpwXCI6dHJ1ZSxcIm1pa2kuaHlvZ28uanBcIjp0cnVlLFwibWluYW1pYXdhamkuaHlvZ28uanBcIjp0cnVlLFwibmlzaGlub21peWEuaHlvZ28uanBcIjp0cnVlLFwibmlzaGl3YWtpLmh5b2dvLmpwXCI6dHJ1ZSxcIm9uby5oeW9nby5qcFwiOnRydWUsXCJzYW5kYS5oeW9nby5qcFwiOnRydWUsXCJzYW5uYW4uaHlvZ28uanBcIjp0cnVlLFwic2FzYXlhbWEuaHlvZ28uanBcIjp0cnVlLFwic2F5by5oeW9nby5qcFwiOnRydWUsXCJzaGluZ3UuaHlvZ28uanBcIjp0cnVlLFwic2hpbm9uc2VuLmh5b2dvLmpwXCI6dHJ1ZSxcInNoaXNvLmh5b2dvLmpwXCI6dHJ1ZSxcInN1bW90by5oeW9nby5qcFwiOnRydWUsXCJ0YWlzaGkuaHlvZ28uanBcIjp0cnVlLFwidGFrYS5oeW9nby5qcFwiOnRydWUsXCJ0YWthcmF6dWthLmh5b2dvLmpwXCI6dHJ1ZSxcInRha2FzYWdvLmh5b2dvLmpwXCI6dHJ1ZSxcInRha2luby5oeW9nby5qcFwiOnRydWUsXCJ0YW1iYS5oeW9nby5qcFwiOnRydWUsXCJ0YXRzdW5vLmh5b2dvLmpwXCI6dHJ1ZSxcInRveW9va2EuaHlvZ28uanBcIjp0cnVlLFwieWFidS5oeW9nby5qcFwiOnRydWUsXCJ5YXNoaXJvLmh5b2dvLmpwXCI6dHJ1ZSxcInlva2EuaHlvZ28uanBcIjp0cnVlLFwieW9rYXdhLmh5b2dvLmpwXCI6dHJ1ZSxcImFtaS5pYmFyYWtpLmpwXCI6dHJ1ZSxcImFzYWhpLmliYXJha2kuanBcIjp0cnVlLFwiYmFuZG8uaWJhcmFraS5qcFwiOnRydWUsXCJjaGlrdXNlaS5pYmFyYWtpLmpwXCI6dHJ1ZSxcImRhaWdvLmliYXJha2kuanBcIjp0cnVlLFwiZnVqaXNoaXJvLmliYXJha2kuanBcIjp0cnVlLFwiaGl0YWNoaS5pYmFyYWtpLmpwXCI6dHJ1ZSxcImhpdGFjaGluYWthLmliYXJha2kuanBcIjp0cnVlLFwiaGl0YWNoaW9taXlhLmliYXJha2kuanBcIjp0cnVlLFwiaGl0YWNoaW90YS5pYmFyYWtpLmpwXCI6dHJ1ZSxcImliYXJha2kuaWJhcmFraS5qcFwiOnRydWUsXCJpbmEuaWJhcmFraS5qcFwiOnRydWUsXCJpbmFzaGlraS5pYmFyYWtpLmpwXCI6dHJ1ZSxcIml0YWtvLmliYXJha2kuanBcIjp0cnVlLFwiaXdhbWEuaWJhcmFraS5qcFwiOnRydWUsXCJqb3NvLmliYXJha2kuanBcIjp0cnVlLFwia2FtaXN1LmliYXJha2kuanBcIjp0cnVlLFwia2FzYW1hLmliYXJha2kuanBcIjp0cnVlLFwia2FzaGltYS5pYmFyYWtpLmpwXCI6dHJ1ZSxcImthc3VtaWdhdXJhLmliYXJha2kuanBcIjp0cnVlLFwia29nYS5pYmFyYWtpLmpwXCI6dHJ1ZSxcIm1paG8uaWJhcmFraS5qcFwiOnRydWUsXCJtaXRvLmliYXJha2kuanBcIjp0cnVlLFwibW9yaXlhLmliYXJha2kuanBcIjp0cnVlLFwibmFrYS5pYmFyYWtpLmpwXCI6dHJ1ZSxcIm5hbWVnYXRhLmliYXJha2kuanBcIjp0cnVlLFwib2FyYWkuaWJhcmFraS5qcFwiOnRydWUsXCJvZ2F3YS5pYmFyYWtpLmpwXCI6dHJ1ZSxcIm9taXRhbWEuaWJhcmFraS5qcFwiOnRydWUsXCJyeXVnYXNha2kuaWJhcmFraS5qcFwiOnRydWUsXCJzYWthaS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInNha3VyYWdhd2EuaWJhcmFraS5qcFwiOnRydWUsXCJzaGltb2RhdGUuaWJhcmFraS5qcFwiOnRydWUsXCJzaGltb3RzdW1hLmliYXJha2kuanBcIjp0cnVlLFwic2hpcm9zYXRvLmliYXJha2kuanBcIjp0cnVlLFwic293YS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInN1aWZ1LmliYXJha2kuanBcIjp0cnVlLFwidGFrYWhhZ2kuaWJhcmFraS5qcFwiOnRydWUsXCJ0YW1hdHN1a3VyaS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInRva2FpLmliYXJha2kuanBcIjp0cnVlLFwidG9tb2JlLmliYXJha2kuanBcIjp0cnVlLFwidG9uZS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInRvcmlkZS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInRzdWNoaXVyYS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInRzdWt1YmEuaWJhcmFraS5qcFwiOnRydWUsXCJ1Y2hpaGFyYS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInVzaGlrdS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInlhY2hpeW8uaWJhcmFraS5qcFwiOnRydWUsXCJ5YW1hZ2F0YS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInlhd2FyYS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInl1a2kuaWJhcmFraS5qcFwiOnRydWUsXCJhbmFtaXp1LmlzaGlrYXdhLmpwXCI6dHJ1ZSxcImhha3VpLmlzaGlrYXdhLmpwXCI6dHJ1ZSxcImhha3VzYW4uaXNoaWthd2EuanBcIjp0cnVlLFwia2FnYS5pc2hpa2F3YS5qcFwiOnRydWUsXCJrYWhva3UuaXNoaWthd2EuanBcIjp0cnVlLFwia2FuYXphd2EuaXNoaWthd2EuanBcIjp0cnVlLFwia2F3YWtpdGEuaXNoaWthd2EuanBcIjp0cnVlLFwia29tYXRzdS5pc2hpa2F3YS5qcFwiOnRydWUsXCJuYWthbm90by5pc2hpa2F3YS5qcFwiOnRydWUsXCJuYW5hby5pc2hpa2F3YS5qcFwiOnRydWUsXCJub21pLmlzaGlrYXdhLmpwXCI6dHJ1ZSxcIm5vbm9pY2hpLmlzaGlrYXdhLmpwXCI6dHJ1ZSxcIm5vdG8uaXNoaWthd2EuanBcIjp0cnVlLFwic2hpa2EuaXNoaWthd2EuanBcIjp0cnVlLFwic3V6dS5pc2hpa2F3YS5qcFwiOnRydWUsXCJ0c3ViYXRhLmlzaGlrYXdhLmpwXCI6dHJ1ZSxcInRzdXJ1Z2kuaXNoaWthd2EuanBcIjp0cnVlLFwidWNoaW5hZGEuaXNoaWthd2EuanBcIjp0cnVlLFwid2FqaW1hLmlzaGlrYXdhLmpwXCI6dHJ1ZSxcImZ1ZGFpLml3YXRlLmpwXCI6dHJ1ZSxcImZ1amlzYXdhLml3YXRlLmpwXCI6dHJ1ZSxcImhhbmFtYWtpLml3YXRlLmpwXCI6dHJ1ZSxcImhpcmFpenVtaS5pd2F0ZS5qcFwiOnRydWUsXCJoaXJvbm8uaXdhdGUuanBcIjp0cnVlLFwiaWNoaW5vaGUuaXdhdGUuanBcIjp0cnVlLFwiaWNoaW5vc2VraS5pd2F0ZS5qcFwiOnRydWUsXCJpd2FpenVtaS5pd2F0ZS5qcFwiOnRydWUsXCJpd2F0ZS5pd2F0ZS5qcFwiOnRydWUsXCJqb2JvamkuaXdhdGUuanBcIjp0cnVlLFwia2FtYWlzaGkuaXdhdGUuanBcIjp0cnVlLFwia2FuZWdhc2FraS5pd2F0ZS5qcFwiOnRydWUsXCJrYXJ1bWFpLml3YXRlLmpwXCI6dHJ1ZSxcImthd2FpLml3YXRlLmpwXCI6dHJ1ZSxcImtpdGFrYW1pLml3YXRlLmpwXCI6dHJ1ZSxcImt1amkuaXdhdGUuanBcIjp0cnVlLFwia3Vub2hlLml3YXRlLmpwXCI6dHJ1ZSxcImt1enVtYWtpLml3YXRlLmpwXCI6dHJ1ZSxcIm1peWFrby5pd2F0ZS5qcFwiOnRydWUsXCJtaXp1c2F3YS5pd2F0ZS5qcFwiOnRydWUsXCJtb3Jpb2thLml3YXRlLmpwXCI6dHJ1ZSxcIm5pbm9oZS5pd2F0ZS5qcFwiOnRydWUsXCJub2RhLml3YXRlLmpwXCI6dHJ1ZSxcIm9mdW5hdG8uaXdhdGUuanBcIjp0cnVlLFwib3NodS5pd2F0ZS5qcFwiOnRydWUsXCJvdHN1Y2hpLml3YXRlLmpwXCI6dHJ1ZSxcInJpa3V6ZW50YWthdGEuaXdhdGUuanBcIjp0cnVlLFwic2hpd2EuaXdhdGUuanBcIjp0cnVlLFwic2hpenVrdWlzaGkuaXdhdGUuanBcIjp0cnVlLFwic3VtaXRhLml3YXRlLmpwXCI6dHJ1ZSxcInRhbm9oYXRhLml3YXRlLmpwXCI6dHJ1ZSxcInRvbm8uaXdhdGUuanBcIjp0cnVlLFwieWFoYWJhLml3YXRlLmpwXCI6dHJ1ZSxcInlhbWFkYS5pd2F0ZS5qcFwiOnRydWUsXCJheWFnYXdhLmthZ2F3YS5qcFwiOnRydWUsXCJoaWdhc2hpa2FnYXdhLmthZ2F3YS5qcFwiOnRydWUsXCJrYW5vbmppLmthZ2F3YS5qcFwiOnRydWUsXCJrb3RvaGlyYS5rYWdhd2EuanBcIjp0cnVlLFwibWFubm8ua2FnYXdhLmpwXCI6dHJ1ZSxcIm1hcnVnYW1lLmthZ2F3YS5qcFwiOnRydWUsXCJtaXRveW8ua2FnYXdhLmpwXCI6dHJ1ZSxcIm5hb3NoaW1hLmthZ2F3YS5qcFwiOnRydWUsXCJzYW51a2kua2FnYXdhLmpwXCI6dHJ1ZSxcInRhZG90c3Uua2FnYXdhLmpwXCI6dHJ1ZSxcInRha2FtYXRzdS5rYWdhd2EuanBcIjp0cnVlLFwidG9ub3Noby5rYWdhd2EuanBcIjp0cnVlLFwidWNoaW5vbWkua2FnYXdhLmpwXCI6dHJ1ZSxcInV0YXp1LmthZ2F3YS5qcFwiOnRydWUsXCJ6ZW50c3VqaS5rYWdhd2EuanBcIjp0cnVlLFwiYWt1bmUua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcImFtYW1pLmthZ29zaGltYS5qcFwiOnRydWUsXCJoaW9raS5rYWdvc2hpbWEuanBcIjp0cnVlLFwiaXNhLmthZ29zaGltYS5qcFwiOnRydWUsXCJpc2VuLmthZ29zaGltYS5qcFwiOnRydWUsXCJpenVtaS5rYWdvc2hpbWEuanBcIjp0cnVlLFwia2Fnb3NoaW1hLmthZ29zaGltYS5qcFwiOnRydWUsXCJrYW5veWEua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcImthd2FuYWJlLmthZ29zaGltYS5qcFwiOnRydWUsXCJraW5rby5rYWdvc2hpbWEuanBcIjp0cnVlLFwia291eWFtYS5rYWdvc2hpbWEuanBcIjp0cnVlLFwibWFrdXJhemFraS5rYWdvc2hpbWEuanBcIjp0cnVlLFwibWF0c3Vtb3RvLmthZ29zaGltYS5qcFwiOnRydWUsXCJtaW5hbWl0YW5lLmthZ29zaGltYS5qcFwiOnRydWUsXCJuYWthdGFuZS5rYWdvc2hpbWEuanBcIjp0cnVlLFwibmlzaGlub29tb3RlLmthZ29zaGltYS5qcFwiOnRydWUsXCJzYXRzdW1hc2VuZGFpLmthZ29zaGltYS5qcFwiOnRydWUsXCJzb28ua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcInRhcnVtaXp1LmthZ29zaGltYS5qcFwiOnRydWUsXCJ5dXN1aS5rYWdvc2hpbWEuanBcIjp0cnVlLFwiYWlrYXdhLmthbmFnYXdhLmpwXCI6dHJ1ZSxcImF0c3VnaS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJheWFzZS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJjaGlnYXNha2kua2FuYWdhd2EuanBcIjp0cnVlLFwiZWJpbmEua2FuYWdhd2EuanBcIjp0cnVlLFwiZnVqaXNhd2Eua2FuYWdhd2EuanBcIjp0cnVlLFwiaGFkYW5vLmthbmFnYXdhLmpwXCI6dHJ1ZSxcImhha29uZS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJoaXJhdHN1a2Eua2FuYWdhd2EuanBcIjp0cnVlLFwiaXNlaGFyYS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJrYWlzZWkua2FuYWdhd2EuanBcIjp0cnVlLFwia2FtYWt1cmEua2FuYWdhd2EuanBcIjp0cnVlLFwia2l5b2thd2Eua2FuYWdhd2EuanBcIjp0cnVlLFwibWF0c3VkYS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJtaW5hbWlhc2hpZ2FyYS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJtaXVyYS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJuYWthaS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJuaW5vbWl5YS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJvZGF3YXJhLmthbmFnYXdhLmpwXCI6dHJ1ZSxcIm9pLmthbmFnYXdhLmpwXCI6dHJ1ZSxcIm9pc28ua2FuYWdhd2EuanBcIjp0cnVlLFwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJzYW11a2F3YS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJ0c3VrdWkua2FuYWdhd2EuanBcIjp0cnVlLFwieWFtYWtpdGEua2FuYWdhd2EuanBcIjp0cnVlLFwieWFtYXRvLmthbmFnYXdhLmpwXCI6dHJ1ZSxcInlva29zdWthLmthbmFnYXdhLmpwXCI6dHJ1ZSxcInl1Z2F3YXJhLmthbmFnYXdhLmpwXCI6dHJ1ZSxcInphbWEua2FuYWdhd2EuanBcIjp0cnVlLFwienVzaGkua2FuYWdhd2EuanBcIjp0cnVlLFwiYWtpLmtvY2hpLmpwXCI6dHJ1ZSxcImdlaXNlaS5rb2NoaS5qcFwiOnRydWUsXCJoaWRha2Eua29jaGkuanBcIjp0cnVlLFwiaGlnYXNoaXRzdW5vLmtvY2hpLmpwXCI6dHJ1ZSxcImluby5rb2NoaS5qcFwiOnRydWUsXCJrYWdhbWkua29jaGkuanBcIjp0cnVlLFwia2FtaS5rb2NoaS5qcFwiOnRydWUsXCJraXRhZ2F3YS5rb2NoaS5qcFwiOnRydWUsXCJrb2NoaS5rb2NoaS5qcFwiOnRydWUsXCJtaWhhcmEua29jaGkuanBcIjp0cnVlLFwibW90b3lhbWEua29jaGkuanBcIjp0cnVlLFwibXVyb3RvLmtvY2hpLmpwXCI6dHJ1ZSxcIm5haGFyaS5rb2NoaS5qcFwiOnRydWUsXCJuYWthbXVyYS5rb2NoaS5qcFwiOnRydWUsXCJuYW5rb2t1LmtvY2hpLmpwXCI6dHJ1ZSxcIm5pc2hpdG9zYS5rb2NoaS5qcFwiOnRydWUsXCJuaXlvZG9nYXdhLmtvY2hpLmpwXCI6dHJ1ZSxcIm9jaGkua29jaGkuanBcIjp0cnVlLFwib2thd2Eua29jaGkuanBcIjp0cnVlLFwib3RveW8ua29jaGkuanBcIjp0cnVlLFwib3RzdWtpLmtvY2hpLmpwXCI6dHJ1ZSxcInNha2F3YS5rb2NoaS5qcFwiOnRydWUsXCJzdWt1bW8ua29jaGkuanBcIjp0cnVlLFwic3VzYWtpLmtvY2hpLmpwXCI6dHJ1ZSxcInRvc2Eua29jaGkuanBcIjp0cnVlLFwidG9zYXNoaW1penUua29jaGkuanBcIjp0cnVlLFwidG95by5rb2NoaS5qcFwiOnRydWUsXCJ0c3Vuby5rb2NoaS5qcFwiOnRydWUsXCJ1bWFqaS5rb2NoaS5qcFwiOnRydWUsXCJ5YXN1ZGEua29jaGkuanBcIjp0cnVlLFwieXVzdWhhcmEua29jaGkuanBcIjp0cnVlLFwiYW1ha3VzYS5rdW1hbW90by5qcFwiOnRydWUsXCJhcmFvLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcImFzby5rdW1hbW90by5qcFwiOnRydWUsXCJjaG95by5rdW1hbW90by5qcFwiOnRydWUsXCJneW9rdXRvLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcImhpdG95b3NoaS5rdW1hbW90by5qcFwiOnRydWUsXCJrYW1pYW1ha3VzYS5rdW1hbW90by5qcFwiOnRydWUsXCJrYXNoaW1hLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcImtpa3VjaGkua3VtYW1vdG8uanBcIjp0cnVlLFwia29zYS5rdW1hbW90by5qcFwiOnRydWUsXCJrdW1hbW90by5rdW1hbW90by5qcFwiOnRydWUsXCJtYXNoaWtpLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcIm1pZnVuZS5rdW1hbW90by5qcFwiOnRydWUsXCJtaW5hbWF0YS5rdW1hbW90by5qcFwiOnRydWUsXCJtaW5hbWlvZ3VuaS5rdW1hbW90by5qcFwiOnRydWUsXCJuYWdhc3Uua3VtYW1vdG8uanBcIjp0cnVlLFwibmlzaGloYXJhLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcIm9ndW5pLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcIm96dS5rdW1hbW90by5qcFwiOnRydWUsXCJzdW1vdG8ua3VtYW1vdG8uanBcIjp0cnVlLFwidGFrYW1vcmkua3VtYW1vdG8uanBcIjp0cnVlLFwidWtpLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcInV0by5rdW1hbW90by5qcFwiOnRydWUsXCJ5YW1hZ2Eua3VtYW1vdG8uanBcIjp0cnVlLFwieWFtYXRvLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcInlhdHN1c2hpcm8ua3VtYW1vdG8uanBcIjp0cnVlLFwiYXlhYmUua3lvdG8uanBcIjp0cnVlLFwiZnVrdWNoaXlhbWEua3lvdG8uanBcIjp0cnVlLFwiaGlnYXNoaXlhbWEua3lvdG8uanBcIjp0cnVlLFwiaWRlLmt5b3RvLmpwXCI6dHJ1ZSxcImluZS5reW90by5qcFwiOnRydWUsXCJqb3lvLmt5b3RvLmpwXCI6dHJ1ZSxcImthbWVva2Eua3lvdG8uanBcIjp0cnVlLFwia2Ftby5reW90by5qcFwiOnRydWUsXCJraXRhLmt5b3RvLmpwXCI6dHJ1ZSxcImtpenUua3lvdG8uanBcIjp0cnVlLFwia3VtaXlhbWEua3lvdG8uanBcIjp0cnVlLFwia3lvdGFtYmEua3lvdG8uanBcIjp0cnVlLFwia3lvdGFuYWJlLmt5b3RvLmpwXCI6dHJ1ZSxcImt5b3RhbmdvLmt5b3RvLmpwXCI6dHJ1ZSxcIm1haXp1cnUua3lvdG8uanBcIjp0cnVlLFwibWluYW1pLmt5b3RvLmpwXCI6dHJ1ZSxcIm1pbmFtaXlhbWFzaGlyby5reW90by5qcFwiOnRydWUsXCJtaXlhenUua3lvdG8uanBcIjp0cnVlLFwibXVrby5reW90by5qcFwiOnRydWUsXCJuYWdhb2tha3lvLmt5b3RvLmpwXCI6dHJ1ZSxcIm5ha2FneW8ua3lvdG8uanBcIjp0cnVlLFwibmFudGFuLmt5b3RvLmpwXCI6dHJ1ZSxcIm95YW1hemFraS5reW90by5qcFwiOnRydWUsXCJzYWt5by5reW90by5qcFwiOnRydWUsXCJzZWlrYS5reW90by5qcFwiOnRydWUsXCJ0YW5hYmUua3lvdG8uanBcIjp0cnVlLFwidWppLmt5b3RvLmpwXCI6dHJ1ZSxcInVqaXRhd2FyYS5reW90by5qcFwiOnRydWUsXCJ3YXp1a2Eua3lvdG8uanBcIjp0cnVlLFwieWFtYXNoaW5hLmt5b3RvLmpwXCI6dHJ1ZSxcInlhd2F0YS5reW90by5qcFwiOnRydWUsXCJhc2FoaS5taWUuanBcIjp0cnVlLFwiaW5hYmUubWllLmpwXCI6dHJ1ZSxcImlzZS5taWUuanBcIjp0cnVlLFwia2FtZXlhbWEubWllLmpwXCI6dHJ1ZSxcImthd2Fnb2UubWllLmpwXCI6dHJ1ZSxcImtpaG8ubWllLmpwXCI6dHJ1ZSxcImtpc29zYWtpLm1pZS5qcFwiOnRydWUsXCJraXdhLm1pZS5qcFwiOnRydWUsXCJrb21vbm8ubWllLmpwXCI6dHJ1ZSxcImt1bWFuby5taWUuanBcIjp0cnVlLFwia3V3YW5hLm1pZS5qcFwiOnRydWUsXCJtYXRzdXNha2EubWllLmpwXCI6dHJ1ZSxcIm1laXdhLm1pZS5qcFwiOnRydWUsXCJtaWhhbWEubWllLmpwXCI6dHJ1ZSxcIm1pbmFtaWlzZS5taWUuanBcIjp0cnVlLFwibWlzdWdpLm1pZS5qcFwiOnRydWUsXCJtaXlhbWEubWllLmpwXCI6dHJ1ZSxcIm5hYmFyaS5taWUuanBcIjp0cnVlLFwic2hpbWEubWllLmpwXCI6dHJ1ZSxcInN1enVrYS5taWUuanBcIjp0cnVlLFwidGFkby5taWUuanBcIjp0cnVlLFwidGFpa2kubWllLmpwXCI6dHJ1ZSxcInRha2kubWllLmpwXCI6dHJ1ZSxcInRhbWFraS5taWUuanBcIjp0cnVlLFwidG9iYS5taWUuanBcIjp0cnVlLFwidHN1Lm1pZS5qcFwiOnRydWUsXCJ1ZG9uby5taWUuanBcIjp0cnVlLFwidXJlc2hpbm8ubWllLmpwXCI6dHJ1ZSxcIndhdGFyYWkubWllLmpwXCI6dHJ1ZSxcInlva2thaWNoaS5taWUuanBcIjp0cnVlLFwiZnVydWthd2EubWl5YWdpLmpwXCI6dHJ1ZSxcImhpZ2FzaGltYXRzdXNoaW1hLm1peWFnaS5qcFwiOnRydWUsXCJpc2hpbm9tYWtpLm1peWFnaS5qcFwiOnRydWUsXCJpd2FudW1hLm1peWFnaS5qcFwiOnRydWUsXCJrYWt1ZGEubWl5YWdpLmpwXCI6dHJ1ZSxcImthbWkubWl5YWdpLmpwXCI6dHJ1ZSxcImthd2FzYWtpLm1peWFnaS5qcFwiOnRydWUsXCJrZXNlbm51bWEubWl5YWdpLmpwXCI6dHJ1ZSxcIm1hcnVtb3JpLm1peWFnaS5qcFwiOnRydWUsXCJtYXRzdXNoaW1hLm1peWFnaS5qcFwiOnRydWUsXCJtaW5hbWlzYW5yaWt1Lm1peWFnaS5qcFwiOnRydWUsXCJtaXNhdG8ubWl5YWdpLmpwXCI6dHJ1ZSxcIm11cmF0YS5taXlhZ2kuanBcIjp0cnVlLFwibmF0b3JpLm1peWFnaS5qcFwiOnRydWUsXCJvZ2F3YXJhLm1peWFnaS5qcFwiOnRydWUsXCJvaGlyYS5taXlhZ2kuanBcIjp0cnVlLFwib25hZ2F3YS5taXlhZ2kuanBcIjp0cnVlLFwib3Nha2kubWl5YWdpLmpwXCI6dHJ1ZSxcInJpZnUubWl5YWdpLmpwXCI6dHJ1ZSxcInNlbWluZS5taXlhZ2kuanBcIjp0cnVlLFwic2hpYmF0YS5taXlhZ2kuanBcIjp0cnVlLFwic2hpY2hpa2FzaHVrdS5taXlhZ2kuanBcIjp0cnVlLFwic2hpa2FtYS5taXlhZ2kuanBcIjp0cnVlLFwic2hpb2dhbWEubWl5YWdpLmpwXCI6dHJ1ZSxcInNoaXJvaXNoaS5taXlhZ2kuanBcIjp0cnVlLFwidGFnYWpvLm1peWFnaS5qcFwiOnRydWUsXCJ0YWl3YS5taXlhZ2kuanBcIjp0cnVlLFwidG9tZS5taXlhZ2kuanBcIjp0cnVlLFwidG9taXlhLm1peWFnaS5qcFwiOnRydWUsXCJ3YWt1eWEubWl5YWdpLmpwXCI6dHJ1ZSxcIndhdGFyaS5taXlhZ2kuanBcIjp0cnVlLFwieWFtYW1vdG8ubWl5YWdpLmpwXCI6dHJ1ZSxcInphby5taXlhZ2kuanBcIjp0cnVlLFwiYXlhLm1peWF6YWtpLmpwXCI6dHJ1ZSxcImViaW5vLm1peWF6YWtpLmpwXCI6dHJ1ZSxcImdva2FzZS5taXlhemFraS5qcFwiOnRydWUsXCJoeXVnYS5taXlhemFraS5qcFwiOnRydWUsXCJrYWRvZ2F3YS5taXlhemFraS5qcFwiOnRydWUsXCJrYXdhbWluYW1pLm1peWF6YWtpLmpwXCI6dHJ1ZSxcImtpam8ubWl5YXpha2kuanBcIjp0cnVlLFwia2l0YWdhd2EubWl5YXpha2kuanBcIjp0cnVlLFwia2l0YWthdGEubWl5YXpha2kuanBcIjp0cnVlLFwia2l0YXVyYS5taXlhemFraS5qcFwiOnRydWUsXCJrb2JheWFzaGkubWl5YXpha2kuanBcIjp0cnVlLFwia3VuaXRvbWkubWl5YXpha2kuanBcIjp0cnVlLFwia3VzaGltYS5taXlhemFraS5qcFwiOnRydWUsXCJtaW1hdGEubWl5YXpha2kuanBcIjp0cnVlLFwibWl5YWtvbm9qby5taXlhemFraS5qcFwiOnRydWUsXCJtaXlhemFraS5taXlhemFraS5qcFwiOnRydWUsXCJtb3JvdHN1a2EubWl5YXpha2kuanBcIjp0cnVlLFwibmljaGluYW4ubWl5YXpha2kuanBcIjp0cnVlLFwibmlzaGltZXJhLm1peWF6YWtpLmpwXCI6dHJ1ZSxcIm5vYmVva2EubWl5YXpha2kuanBcIjp0cnVlLFwic2FpdG8ubWl5YXpha2kuanBcIjp0cnVlLFwic2hpaWJhLm1peWF6YWtpLmpwXCI6dHJ1ZSxcInNoaW50b21pLm1peWF6YWtpLmpwXCI6dHJ1ZSxcInRha2FoYXJ1Lm1peWF6YWtpLmpwXCI6dHJ1ZSxcInRha2FuYWJlLm1peWF6YWtpLmpwXCI6dHJ1ZSxcInRha2F6YWtpLm1peWF6YWtpLmpwXCI6dHJ1ZSxcInRzdW5vLm1peWF6YWtpLmpwXCI6dHJ1ZSxcImFjaGkubmFnYW5vLmpwXCI6dHJ1ZSxcImFnZW1hdHN1Lm5hZ2Fuby5qcFwiOnRydWUsXCJhbmFuLm5hZ2Fuby5qcFwiOnRydWUsXCJhb2tpLm5hZ2Fuby5qcFwiOnRydWUsXCJhc2FoaS5uYWdhbm8uanBcIjp0cnVlLFwiYXp1bWluby5uYWdhbm8uanBcIjp0cnVlLFwiY2hpa3Vob2t1Lm5hZ2Fuby5qcFwiOnRydWUsXCJjaGlrdW1hLm5hZ2Fuby5qcFwiOnRydWUsXCJjaGluby5uYWdhbm8uanBcIjp0cnVlLFwiZnVqaW1pLm5hZ2Fuby5qcFwiOnRydWUsXCJoYWt1YmEubmFnYW5vLmpwXCI6dHJ1ZSxcImhhcmEubmFnYW5vLmpwXCI6dHJ1ZSxcImhpcmF5YS5uYWdhbm8uanBcIjp0cnVlLFwiaWlkYS5uYWdhbm8uanBcIjp0cnVlLFwiaWlqaW1hLm5hZ2Fuby5qcFwiOnRydWUsXCJpaXlhbWEubmFnYW5vLmpwXCI6dHJ1ZSxcImlpenVuYS5uYWdhbm8uanBcIjp0cnVlLFwiaWtlZGEubmFnYW5vLmpwXCI6dHJ1ZSxcImlrdXNha2EubmFnYW5vLmpwXCI6dHJ1ZSxcImluYS5uYWdhbm8uanBcIjp0cnVlLFwia2FydWl6YXdhLm5hZ2Fuby5qcFwiOnRydWUsXCJrYXdha2FtaS5uYWdhbm8uanBcIjp0cnVlLFwia2lzby5uYWdhbm8uanBcIjp0cnVlLFwia2lzb2Z1a3VzaGltYS5uYWdhbm8uanBcIjp0cnVlLFwia2l0YWFpa2kubmFnYW5vLmpwXCI6dHJ1ZSxcImtvbWFnYW5lLm5hZ2Fuby5qcFwiOnRydWUsXCJrb21vcm8ubmFnYW5vLmpwXCI6dHJ1ZSxcIm1hdHN1a2F3YS5uYWdhbm8uanBcIjp0cnVlLFwibWF0c3Vtb3RvLm5hZ2Fuby5qcFwiOnRydWUsXCJtaWFzYS5uYWdhbm8uanBcIjp0cnVlLFwibWluYW1pYWlraS5uYWdhbm8uanBcIjp0cnVlLFwibWluYW1pbWFraS5uYWdhbm8uanBcIjp0cnVlLFwibWluYW1pbWlub3dhLm5hZ2Fuby5qcFwiOnRydWUsXCJtaW5vd2EubmFnYW5vLmpwXCI6dHJ1ZSxcIm1peWFkYS5uYWdhbm8uanBcIjp0cnVlLFwibWl5b3RhLm5hZ2Fuby5qcFwiOnRydWUsXCJtb2NoaXp1a2kubmFnYW5vLmpwXCI6dHJ1ZSxcIm5hZ2Fuby5uYWdhbm8uanBcIjp0cnVlLFwibmFnYXdhLm5hZ2Fuby5qcFwiOnRydWUsXCJuYWdpc28ubmFnYW5vLmpwXCI6dHJ1ZSxcIm5ha2FnYXdhLm5hZ2Fuby5qcFwiOnRydWUsXCJuYWthbm8ubmFnYW5vLmpwXCI6dHJ1ZSxcIm5vemF3YW9uc2VuLm5hZ2Fuby5qcFwiOnRydWUsXCJvYnVzZS5uYWdhbm8uanBcIjp0cnVlLFwib2dhd2EubmFnYW5vLmpwXCI6dHJ1ZSxcIm9rYXlhLm5hZ2Fuby5qcFwiOnRydWUsXCJvbWFjaGkubmFnYW5vLmpwXCI6dHJ1ZSxcIm9taS5uYWdhbm8uanBcIjp0cnVlLFwib29rdXdhLm5hZ2Fuby5qcFwiOnRydWUsXCJvb3NoaWthLm5hZ2Fuby5qcFwiOnRydWUsXCJvdGFraS5uYWdhbm8uanBcIjp0cnVlLFwib3RhcmkubmFnYW5vLmpwXCI6dHJ1ZSxcInNha2FlLm5hZ2Fuby5qcFwiOnRydWUsXCJzYWtha2kubmFnYW5vLmpwXCI6dHJ1ZSxcInNha3UubmFnYW5vLmpwXCI6dHJ1ZSxcInNha3Voby5uYWdhbm8uanBcIjp0cnVlLFwic2hpbW9zdXdhLm5hZ2Fuby5qcFwiOnRydWUsXCJzaGluYW5vbWFjaGkubmFnYW5vLmpwXCI6dHJ1ZSxcInNoaW9qaXJpLm5hZ2Fuby5qcFwiOnRydWUsXCJzdXdhLm5hZ2Fuby5qcFwiOnRydWUsXCJzdXpha2EubmFnYW5vLmpwXCI6dHJ1ZSxcInRha2FnaS5uYWdhbm8uanBcIjp0cnVlLFwidGFrYW1vcmkubmFnYW5vLmpwXCI6dHJ1ZSxcInRha2F5YW1hLm5hZ2Fuby5qcFwiOnRydWUsXCJ0YXRlc2hpbmEubmFnYW5vLmpwXCI6dHJ1ZSxcInRhdHN1bm8ubmFnYW5vLmpwXCI6dHJ1ZSxcInRvZ2FrdXNoaS5uYWdhbm8uanBcIjp0cnVlLFwidG9ndXJhLm5hZ2Fuby5qcFwiOnRydWUsXCJ0b21pLm5hZ2Fuby5qcFwiOnRydWUsXCJ1ZWRhLm5hZ2Fuby5qcFwiOnRydWUsXCJ3YWRhLm5hZ2Fuby5qcFwiOnRydWUsXCJ5YW1hZ2F0YS5uYWdhbm8uanBcIjp0cnVlLFwieWFtYW5vdWNoaS5uYWdhbm8uanBcIjp0cnVlLFwieWFzYWthLm5hZ2Fuby5qcFwiOnRydWUsXCJ5YXN1b2thLm5hZ2Fuby5qcFwiOnRydWUsXCJjaGlqaXdhLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcImZ1dHN1Lm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcImdvdG8ubmFnYXNha2kuanBcIjp0cnVlLFwiaGFzYW1pLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcImhpcmFkby5uYWdhc2FraS5qcFwiOnRydWUsXCJpa2kubmFnYXNha2kuanBcIjp0cnVlLFwiaXNhaGF5YS5uYWdhc2FraS5qcFwiOnRydWUsXCJrYXdhdGFuYS5uYWdhc2FraS5qcFwiOnRydWUsXCJrdWNoaW5vdHN1Lm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcIm1hdHN1dXJhLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcIm5hZ2FzYWtpLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcIm9iYW1hLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcIm9tdXJhLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcIm9zZXRvLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcInNhaWthaS5uYWdhc2FraS5qcFwiOnRydWUsXCJzYXNlYm8ubmFnYXNha2kuanBcIjp0cnVlLFwic2VpaGkubmFnYXNha2kuanBcIjp0cnVlLFwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcInNoaW5rYW1pZ290by5uYWdhc2FraS5qcFwiOnRydWUsXCJ0b2dpdHN1Lm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcInRzdXNoaW1hLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcInVuemVuLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcImFuZG8ubmFyYS5qcFwiOnRydWUsXCJnb3NlLm5hcmEuanBcIjp0cnVlLFwiaGVndXJpLm5hcmEuanBcIjp0cnVlLFwiaGlnYXNoaXlvc2hpbm8ubmFyYS5qcFwiOnRydWUsXCJpa2FydWdhLm5hcmEuanBcIjp0cnVlLFwiaWtvbWEubmFyYS5qcFwiOnRydWUsXCJrYW1pa2l0YXlhbWEubmFyYS5qcFwiOnRydWUsXCJrYW5tYWtpLm5hcmEuanBcIjp0cnVlLFwia2FzaGliYS5uYXJhLmpwXCI6dHJ1ZSxcImthc2hpaGFyYS5uYXJhLmpwXCI6dHJ1ZSxcImthdHN1cmFnaS5uYXJhLmpwXCI6dHJ1ZSxcImthd2FpLm5hcmEuanBcIjp0cnVlLFwia2F3YWthbWkubmFyYS5qcFwiOnRydWUsXCJrYXdhbmlzaGkubmFyYS5qcFwiOnRydWUsXCJrb3J5by5uYXJhLmpwXCI6dHJ1ZSxcImt1cm90YWtpLm5hcmEuanBcIjp0cnVlLFwibWl0c3VlLm5hcmEuanBcIjp0cnVlLFwibWl5YWtlLm5hcmEuanBcIjp0cnVlLFwibmFyYS5uYXJhLmpwXCI6dHJ1ZSxcIm5vc2VnYXdhLm5hcmEuanBcIjp0cnVlLFwib2ppLm5hcmEuanBcIjp0cnVlLFwib3VkYS5uYXJhLmpwXCI6dHJ1ZSxcIm95b2RvLm5hcmEuanBcIjp0cnVlLFwic2FrdXJhaS5uYXJhLmpwXCI6dHJ1ZSxcInNhbmdvLm5hcmEuanBcIjp0cnVlLFwic2hpbW9pY2hpLm5hcmEuanBcIjp0cnVlLFwic2hpbW9raXRheWFtYS5uYXJhLmpwXCI6dHJ1ZSxcInNoaW5qby5uYXJhLmpwXCI6dHJ1ZSxcInNvbmkubmFyYS5qcFwiOnRydWUsXCJ0YWthdG9yaS5uYXJhLmpwXCI6dHJ1ZSxcInRhd2FyYW1vdG8ubmFyYS5qcFwiOnRydWUsXCJ0ZW5rYXdhLm5hcmEuanBcIjp0cnVlLFwidGVucmkubmFyYS5qcFwiOnRydWUsXCJ1ZGEubmFyYS5qcFwiOnRydWUsXCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwXCI6dHJ1ZSxcInlhbWF0b3Rha2FkYS5uYXJhLmpwXCI6dHJ1ZSxcInlhbWF6b2UubmFyYS5qcFwiOnRydWUsXCJ5b3NoaW5vLm5hcmEuanBcIjp0cnVlLFwiYWdhLm5paWdhdGEuanBcIjp0cnVlLFwiYWdhbm8ubmlpZ2F0YS5qcFwiOnRydWUsXCJnb3Nlbi5uaWlnYXRhLmpwXCI6dHJ1ZSxcIml0b2lnYXdhLm5paWdhdGEuanBcIjp0cnVlLFwiaXp1bW96YWtpLm5paWdhdGEuanBcIjp0cnVlLFwiam9ldHN1Lm5paWdhdGEuanBcIjp0cnVlLFwia2Ftby5uaWlnYXRhLmpwXCI6dHJ1ZSxcImthcml3YS5uaWlnYXRhLmpwXCI6dHJ1ZSxcImthc2hpd2F6YWtpLm5paWdhdGEuanBcIjp0cnVlLFwibWluYW1pdW9udW1hLm5paWdhdGEuanBcIjp0cnVlLFwibWl0c3VrZS5uaWlnYXRhLmpwXCI6dHJ1ZSxcIm11aWthLm5paWdhdGEuanBcIjp0cnVlLFwibXVyYWthbWkubmlpZ2F0YS5qcFwiOnRydWUsXCJteW9rby5uaWlnYXRhLmpwXCI6dHJ1ZSxcIm5hZ2Fva2EubmlpZ2F0YS5qcFwiOnRydWUsXCJuaWlnYXRhLm5paWdhdGEuanBcIjp0cnVlLFwib2ppeWEubmlpZ2F0YS5qcFwiOnRydWUsXCJvbWkubmlpZ2F0YS5qcFwiOnRydWUsXCJzYWRvLm5paWdhdGEuanBcIjp0cnVlLFwic2Fuam8ubmlpZ2F0YS5qcFwiOnRydWUsXCJzZWlyby5uaWlnYXRhLmpwXCI6dHJ1ZSxcInNlaXJvdS5uaWlnYXRhLmpwXCI6dHJ1ZSxcInNla2lrYXdhLm5paWdhdGEuanBcIjp0cnVlLFwic2hpYmF0YS5uaWlnYXRhLmpwXCI6dHJ1ZSxcInRhZ2FtaS5uaWlnYXRhLmpwXCI6dHJ1ZSxcInRhaW5haS5uaWlnYXRhLmpwXCI6dHJ1ZSxcInRvY2hpby5uaWlnYXRhLmpwXCI6dHJ1ZSxcInRva2FtYWNoaS5uaWlnYXRhLmpwXCI6dHJ1ZSxcInRzdWJhbWUubmlpZ2F0YS5qcFwiOnRydWUsXCJ0c3VuYW4ubmlpZ2F0YS5qcFwiOnRydWUsXCJ1b251bWEubmlpZ2F0YS5qcFwiOnRydWUsXCJ5YWhpa28ubmlpZ2F0YS5qcFwiOnRydWUsXCJ5b2l0YS5uaWlnYXRhLmpwXCI6dHJ1ZSxcInl1emF3YS5uaWlnYXRhLmpwXCI6dHJ1ZSxcImJlcHB1Lm9pdGEuanBcIjp0cnVlLFwiYnVuZ29vbm8ub2l0YS5qcFwiOnRydWUsXCJidW5nb3Rha2FkYS5vaXRhLmpwXCI6dHJ1ZSxcImhhc2FtYS5vaXRhLmpwXCI6dHJ1ZSxcImhpamkub2l0YS5qcFwiOnRydWUsXCJoaW1lc2hpbWEub2l0YS5qcFwiOnRydWUsXCJoaXRhLm9pdGEuanBcIjp0cnVlLFwia2FtaXRzdWUub2l0YS5qcFwiOnRydWUsXCJrb2tvbm9lLm9pdGEuanBcIjp0cnVlLFwia3VqdS5vaXRhLmpwXCI6dHJ1ZSxcImt1bmlzYWtpLm9pdGEuanBcIjp0cnVlLFwia3VzdS5vaXRhLmpwXCI6dHJ1ZSxcIm9pdGEub2l0YS5qcFwiOnRydWUsXCJzYWlraS5vaXRhLmpwXCI6dHJ1ZSxcInRha2V0YS5vaXRhLmpwXCI6dHJ1ZSxcInRzdWt1bWkub2l0YS5qcFwiOnRydWUsXCJ1c2Eub2l0YS5qcFwiOnRydWUsXCJ1c3VraS5vaXRhLmpwXCI6dHJ1ZSxcInl1ZnUub2l0YS5qcFwiOnRydWUsXCJha2Fpd2Eub2theWFtYS5qcFwiOnRydWUsXCJhc2FrdWNoaS5va2F5YW1hLmpwXCI6dHJ1ZSxcImJpemVuLm9rYXlhbWEuanBcIjp0cnVlLFwiaGF5YXNoaW1hLm9rYXlhbWEuanBcIjp0cnVlLFwiaWJhcmEub2theWFtYS5qcFwiOnRydWUsXCJrYWdhbWluby5va2F5YW1hLmpwXCI6dHJ1ZSxcImthc2Fva2Eub2theWFtYS5qcFwiOnRydWUsXCJraWJpY2h1by5va2F5YW1hLmpwXCI6dHJ1ZSxcImt1bWVuYW4ub2theWFtYS5qcFwiOnRydWUsXCJrdXJhc2hpa2kub2theWFtYS5qcFwiOnRydWUsXCJtYW5pd2Eub2theWFtYS5qcFwiOnRydWUsXCJtaXNha2kub2theWFtYS5qcFwiOnRydWUsXCJuYWdpLm9rYXlhbWEuanBcIjp0cnVlLFwibmlpbWkub2theWFtYS5qcFwiOnRydWUsXCJuaXNoaWF3YWt1cmEub2theWFtYS5qcFwiOnRydWUsXCJva2F5YW1hLm9rYXlhbWEuanBcIjp0cnVlLFwic2F0b3Noby5va2F5YW1hLmpwXCI6dHJ1ZSxcInNldG91Y2hpLm9rYXlhbWEuanBcIjp0cnVlLFwic2hpbmpvLm9rYXlhbWEuanBcIjp0cnVlLFwic2hvby5va2F5YW1hLmpwXCI6dHJ1ZSxcInNvamEub2theWFtYS5qcFwiOnRydWUsXCJ0YWthaGFzaGkub2theWFtYS5qcFwiOnRydWUsXCJ0YW1hbm8ub2theWFtYS5qcFwiOnRydWUsXCJ0c3V5YW1hLm9rYXlhbWEuanBcIjp0cnVlLFwid2FrZS5va2F5YW1hLmpwXCI6dHJ1ZSxcInlha2FnZS5va2F5YW1hLmpwXCI6dHJ1ZSxcImFndW5pLm9raW5hd2EuanBcIjp0cnVlLFwiZ2lub3dhbi5va2luYXdhLmpwXCI6dHJ1ZSxcImdpbm96YS5va2luYXdhLmpwXCI6dHJ1ZSxcImd1c2hpa2FtaS5va2luYXdhLmpwXCI6dHJ1ZSxcImhhZWJhcnUub2tpbmF3YS5qcFwiOnRydWUsXCJoaWdhc2hpLm9raW5hd2EuanBcIjp0cnVlLFwiaGlyYXJhLm9raW5hd2EuanBcIjp0cnVlLFwiaWhleWEub2tpbmF3YS5qcFwiOnRydWUsXCJpc2hpZ2FraS5va2luYXdhLmpwXCI6dHJ1ZSxcImlzaGlrYXdhLm9raW5hd2EuanBcIjp0cnVlLFwiaXRvbWFuLm9raW5hd2EuanBcIjp0cnVlLFwiaXplbmEub2tpbmF3YS5qcFwiOnRydWUsXCJrYWRlbmEub2tpbmF3YS5qcFwiOnRydWUsXCJraW4ub2tpbmF3YS5qcFwiOnRydWUsXCJraXRhZGFpdG8ub2tpbmF3YS5qcFwiOnRydWUsXCJraXRhbmFrYWd1c3VrdS5va2luYXdhLmpwXCI6dHJ1ZSxcImt1bWVqaW1hLm9raW5hd2EuanBcIjp0cnVlLFwia3VuaWdhbWkub2tpbmF3YS5qcFwiOnRydWUsXCJtaW5hbWlkYWl0by5va2luYXdhLmpwXCI6dHJ1ZSxcIm1vdG9idS5va2luYXdhLmpwXCI6dHJ1ZSxcIm5hZ28ub2tpbmF3YS5qcFwiOnRydWUsXCJuYWhhLm9raW5hd2EuanBcIjp0cnVlLFwibmFrYWd1c3VrdS5va2luYXdhLmpwXCI6dHJ1ZSxcIm5ha2lqaW4ub2tpbmF3YS5qcFwiOnRydWUsXCJuYW5qby5va2luYXdhLmpwXCI6dHJ1ZSxcIm5pc2hpaGFyYS5va2luYXdhLmpwXCI6dHJ1ZSxcIm9naW1pLm9raW5hd2EuanBcIjp0cnVlLFwib2tpbmF3YS5va2luYXdhLmpwXCI6dHJ1ZSxcIm9ubmEub2tpbmF3YS5qcFwiOnRydWUsXCJzaGltb2ppLm9raW5hd2EuanBcIjp0cnVlLFwidGFrZXRvbWkub2tpbmF3YS5qcFwiOnRydWUsXCJ0YXJhbWEub2tpbmF3YS5qcFwiOnRydWUsXCJ0b2thc2hpa2kub2tpbmF3YS5qcFwiOnRydWUsXCJ0b21pZ3VzdWt1Lm9raW5hd2EuanBcIjp0cnVlLFwidG9uYWtpLm9raW5hd2EuanBcIjp0cnVlLFwidXJhc29lLm9raW5hd2EuanBcIjp0cnVlLFwidXJ1bWEub2tpbmF3YS5qcFwiOnRydWUsXCJ5YWVzZS5va2luYXdhLmpwXCI6dHJ1ZSxcInlvbWl0YW4ub2tpbmF3YS5qcFwiOnRydWUsXCJ5b25hYmFydS5va2luYXdhLmpwXCI6dHJ1ZSxcInlvbmFndW5pLm9raW5hd2EuanBcIjp0cnVlLFwiemFtYW1pLm9raW5hd2EuanBcIjp0cnVlLFwiYWJlbm8ub3Nha2EuanBcIjp0cnVlLFwiY2hpaGF5YWFrYXNha2Eub3Nha2EuanBcIjp0cnVlLFwiY2h1by5vc2FrYS5qcFwiOnRydWUsXCJkYWl0by5vc2FrYS5qcFwiOnRydWUsXCJmdWppaWRlcmEub3Nha2EuanBcIjp0cnVlLFwiaGFiaWtpbm8ub3Nha2EuanBcIjp0cnVlLFwiaGFubmFuLm9zYWthLmpwXCI6dHJ1ZSxcImhpZ2FzaGlvc2FrYS5vc2FrYS5qcFwiOnRydWUsXCJoaWdhc2hpc3VtaXlvc2hpLm9zYWthLmpwXCI6dHJ1ZSxcImhpZ2FzaGl5b2RvZ2F3YS5vc2FrYS5qcFwiOnRydWUsXCJoaXJha2F0YS5vc2FrYS5qcFwiOnRydWUsXCJpYmFyYWtpLm9zYWthLmpwXCI6dHJ1ZSxcImlrZWRhLm9zYWthLmpwXCI6dHJ1ZSxcIml6dW1pLm9zYWthLmpwXCI6dHJ1ZSxcIml6dW1pb3RzdS5vc2FrYS5qcFwiOnRydWUsXCJpenVtaXNhbm8ub3Nha2EuanBcIjp0cnVlLFwia2Fkb21hLm9zYWthLmpwXCI6dHJ1ZSxcImthaXp1a2Eub3Nha2EuanBcIjp0cnVlLFwia2FuYW4ub3Nha2EuanBcIjp0cnVlLFwia2FzaGl3YXJhLm9zYWthLmpwXCI6dHJ1ZSxcImthdGFuby5vc2FrYS5qcFwiOnRydWUsXCJrYXdhY2hpbmFnYW5vLm9zYWthLmpwXCI6dHJ1ZSxcImtpc2hpd2FkYS5vc2FrYS5qcFwiOnRydWUsXCJraXRhLm9zYWthLmpwXCI6dHJ1ZSxcImt1bWF0b3JpLm9zYWthLmpwXCI6dHJ1ZSxcIm1hdHN1YmFyYS5vc2FrYS5qcFwiOnRydWUsXCJtaW5hdG8ub3Nha2EuanBcIjp0cnVlLFwibWlub2gub3Nha2EuanBcIjp0cnVlLFwibWlzYWtpLm9zYWthLmpwXCI6dHJ1ZSxcIm1vcmlndWNoaS5vc2FrYS5qcFwiOnRydWUsXCJuZXlhZ2F3YS5vc2FrYS5qcFwiOnRydWUsXCJuaXNoaS5vc2FrYS5qcFwiOnRydWUsXCJub3NlLm9zYWthLmpwXCI6dHJ1ZSxcIm9zYWthc2F5YW1hLm9zYWthLmpwXCI6dHJ1ZSxcInNha2FpLm9zYWthLmpwXCI6dHJ1ZSxcInNheWFtYS5vc2FrYS5qcFwiOnRydWUsXCJzZW5uYW4ub3Nha2EuanBcIjp0cnVlLFwic2V0dHN1Lm9zYWthLmpwXCI6dHJ1ZSxcInNoaWpvbmF3YXRlLm9zYWthLmpwXCI6dHJ1ZSxcInNoaW1hbW90by5vc2FrYS5qcFwiOnRydWUsXCJzdWl0YS5vc2FrYS5qcFwiOnRydWUsXCJ0YWRhb2thLm9zYWthLmpwXCI6dHJ1ZSxcInRhaXNoaS5vc2FrYS5qcFwiOnRydWUsXCJ0YWppcmkub3Nha2EuanBcIjp0cnVlLFwidGFrYWlzaGkub3Nha2EuanBcIjp0cnVlLFwidGFrYXRzdWtpLm9zYWthLmpwXCI6dHJ1ZSxcInRvbmRhYmF5YXNoaS5vc2FrYS5qcFwiOnRydWUsXCJ0b3lvbmFrYS5vc2FrYS5qcFwiOnRydWUsXCJ0b3lvbm8ub3Nha2EuanBcIjp0cnVlLFwieWFvLm9zYWthLmpwXCI6dHJ1ZSxcImFyaWFrZS5zYWdhLmpwXCI6dHJ1ZSxcImFyaXRhLnNhZ2EuanBcIjp0cnVlLFwiZnVrdWRvbWkuc2FnYS5qcFwiOnRydWUsXCJnZW5rYWkuc2FnYS5qcFwiOnRydWUsXCJoYW1hdGFtYS5zYWdhLmpwXCI6dHJ1ZSxcImhpemVuLnNhZ2EuanBcIjp0cnVlLFwiaW1hcmkuc2FnYS5qcFwiOnRydWUsXCJrYW1pbWluZS5zYWdhLmpwXCI6dHJ1ZSxcImthbnpha2kuc2FnYS5qcFwiOnRydWUsXCJrYXJhdHN1LnNhZ2EuanBcIjp0cnVlLFwia2FzaGltYS5zYWdhLmpwXCI6dHJ1ZSxcImtpdGFnYXRhLnNhZ2EuanBcIjp0cnVlLFwia2l0YWhhdGEuc2FnYS5qcFwiOnRydWUsXCJraXlhbWEuc2FnYS5qcFwiOnRydWUsXCJrb3Vob2t1LnNhZ2EuanBcIjp0cnVlLFwia3l1cmFnaS5zYWdhLmpwXCI6dHJ1ZSxcIm5pc2hpYXJpdGEuc2FnYS5qcFwiOnRydWUsXCJvZ2kuc2FnYS5qcFwiOnRydWUsXCJvbWFjaGkuc2FnYS5qcFwiOnRydWUsXCJvdWNoaS5zYWdhLmpwXCI6dHJ1ZSxcInNhZ2Euc2FnYS5qcFwiOnRydWUsXCJzaGlyb2lzaGkuc2FnYS5qcFwiOnRydWUsXCJ0YWt1LnNhZ2EuanBcIjp0cnVlLFwidGFyYS5zYWdhLmpwXCI6dHJ1ZSxcInRvc3Uuc2FnYS5qcFwiOnRydWUsXCJ5b3NoaW5vZ2FyaS5zYWdhLmpwXCI6dHJ1ZSxcImFyYWthd2Euc2FpdGFtYS5qcFwiOnRydWUsXCJhc2FrYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImNoaWNoaWJ1LnNhaXRhbWEuanBcIjp0cnVlLFwiZnVqaW1pLnNhaXRhbWEuanBcIjp0cnVlLFwiZnVqaW1pbm8uc2FpdGFtYS5qcFwiOnRydWUsXCJmdWtheWEuc2FpdGFtYS5qcFwiOnRydWUsXCJoYW5uby5zYWl0YW1hLmpwXCI6dHJ1ZSxcImhhbnl1LnNhaXRhbWEuanBcIjp0cnVlLFwiaGFzdWRhLnNhaXRhbWEuanBcIjp0cnVlLFwiaGF0b2dheWEuc2FpdGFtYS5qcFwiOnRydWUsXCJoYXRveWFtYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImhpZGFrYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImhpZ2FzaGltYXRzdXlhbWEuc2FpdGFtYS5qcFwiOnRydWUsXCJob25qby5zYWl0YW1hLmpwXCI6dHJ1ZSxcImluYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImlydW1hLnNhaXRhbWEuanBcIjp0cnVlLFwiaXdhdHN1a2kuc2FpdGFtYS5qcFwiOnRydWUsXCJrYW1paXp1bWkuc2FpdGFtYS5qcFwiOnRydWUsXCJrYW1pa2F3YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImthbWlzYXRvLnNhaXRhbWEuanBcIjp0cnVlLFwia2FzdWthYmUuc2FpdGFtYS5qcFwiOnRydWUsXCJrYXdhZ29lLnNhaXRhbWEuanBcIjp0cnVlLFwia2F3YWd1Y2hpLnNhaXRhbWEuanBcIjp0cnVlLFwia2F3YWppbWEuc2FpdGFtYS5qcFwiOnRydWUsXCJrYXpvLnNhaXRhbWEuanBcIjp0cnVlLFwia2l0YW1vdG8uc2FpdGFtYS5qcFwiOnRydWUsXCJrb3NoaWdheWEuc2FpdGFtYS5qcFwiOnRydWUsXCJrb3Vub3N1LnNhaXRhbWEuanBcIjp0cnVlLFwia3VraS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImt1bWFnYXlhLnNhaXRhbWEuanBcIjp0cnVlLFwibWF0c3VidXNoaS5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm1pbmFuby5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm1pc2F0by5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm1peWFzaGlyby5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm1peW9zaGkuc2FpdGFtYS5qcFwiOnRydWUsXCJtb3JveWFtYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm5hZ2F0b3JvLnNhaXRhbWEuanBcIjp0cnVlLFwibmFtZWdhd2Euc2FpdGFtYS5qcFwiOnRydWUsXCJuaWl6YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm9nYW5vLnNhaXRhbWEuanBcIjp0cnVlLFwib2dhd2Euc2FpdGFtYS5qcFwiOnRydWUsXCJvZ29zZS5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm9rZWdhd2Euc2FpdGFtYS5qcFwiOnRydWUsXCJvbWl5YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm90YWtpLnNhaXRhbWEuanBcIjp0cnVlLFwicmFuemFuLnNhaXRhbWEuanBcIjp0cnVlLFwicnlva2FtaS5zYWl0YW1hLmpwXCI6dHJ1ZSxcInNhaXRhbWEuc2FpdGFtYS5qcFwiOnRydWUsXCJzYWthZG8uc2FpdGFtYS5qcFwiOnRydWUsXCJzYXR0ZS5zYWl0YW1hLmpwXCI6dHJ1ZSxcInNheWFtYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcInNoaWtpLnNhaXRhbWEuanBcIjp0cnVlLFwic2hpcmFva2Euc2FpdGFtYS5qcFwiOnRydWUsXCJzb2thLnNhaXRhbWEuanBcIjp0cnVlLFwic3VnaXRvLnNhaXRhbWEuanBcIjp0cnVlLFwidG9kYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcInRva2lnYXdhLnNhaXRhbWEuanBcIjp0cnVlLFwidG9rb3JvemF3YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcInRzdXJ1Z2FzaGltYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcInVyYXdhLnNhaXRhbWEuanBcIjp0cnVlLFwid2FyYWJpLnNhaXRhbWEuanBcIjp0cnVlLFwieWFzaGlvLnNhaXRhbWEuanBcIjp0cnVlLFwieW9rb3plLnNhaXRhbWEuanBcIjp0cnVlLFwieW9uby5zYWl0YW1hLmpwXCI6dHJ1ZSxcInlvcmlpLnNhaXRhbWEuanBcIjp0cnVlLFwieW9zaGlkYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcInlvc2hpa2F3YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcInlvc2hpbWkuc2FpdGFtYS5qcFwiOnRydWUsXCJhaXNoby5zaGlnYS5qcFwiOnRydWUsXCJnYW1vLnNoaWdhLmpwXCI6dHJ1ZSxcImhpZ2FzaGlvbWkuc2hpZ2EuanBcIjp0cnVlLFwiaGlrb25lLnNoaWdhLmpwXCI6dHJ1ZSxcImtva2Euc2hpZ2EuanBcIjp0cnVlLFwia29uYW4uc2hpZ2EuanBcIjp0cnVlLFwia29zZWkuc2hpZ2EuanBcIjp0cnVlLFwia290by5zaGlnYS5qcFwiOnRydWUsXCJrdXNhdHN1LnNoaWdhLmpwXCI6dHJ1ZSxcIm1haWJhcmEuc2hpZ2EuanBcIjp0cnVlLFwibW9yaXlhbWEuc2hpZ2EuanBcIjp0cnVlLFwibmFnYWhhbWEuc2hpZ2EuanBcIjp0cnVlLFwibmlzaGlhemFpLnNoaWdhLmpwXCI6dHJ1ZSxcIm5vdG9nYXdhLnNoaWdhLmpwXCI6dHJ1ZSxcIm9taWhhY2hpbWFuLnNoaWdhLmpwXCI6dHJ1ZSxcIm90c3Uuc2hpZ2EuanBcIjp0cnVlLFwicml0dG8uc2hpZ2EuanBcIjp0cnVlLFwicnl1b2guc2hpZ2EuanBcIjp0cnVlLFwidGFrYXNoaW1hLnNoaWdhLmpwXCI6dHJ1ZSxcInRha2F0c3VraS5zaGlnYS5qcFwiOnRydWUsXCJ0b3JhaGltZS5zaGlnYS5qcFwiOnRydWUsXCJ0b3lvc2F0by5zaGlnYS5qcFwiOnRydWUsXCJ5YXN1LnNoaWdhLmpwXCI6dHJ1ZSxcImFrYWdpLnNoaW1hbmUuanBcIjp0cnVlLFwiYW1hLnNoaW1hbmUuanBcIjp0cnVlLFwiZ290c3Uuc2hpbWFuZS5qcFwiOnRydWUsXCJoYW1hZGEuc2hpbWFuZS5qcFwiOnRydWUsXCJoaWdhc2hpaXp1bW8uc2hpbWFuZS5qcFwiOnRydWUsXCJoaWthd2Euc2hpbWFuZS5qcFwiOnRydWUsXCJoaWtpbWkuc2hpbWFuZS5qcFwiOnRydWUsXCJpenVtby5zaGltYW5lLmpwXCI6dHJ1ZSxcImtha2lub2tpLnNoaW1hbmUuanBcIjp0cnVlLFwibWFzdWRhLnNoaW1hbmUuanBcIjp0cnVlLFwibWF0c3VlLnNoaW1hbmUuanBcIjp0cnVlLFwibWlzYXRvLnNoaW1hbmUuanBcIjp0cnVlLFwibmlzaGlub3NoaW1hLnNoaW1hbmUuanBcIjp0cnVlLFwib2hkYS5zaGltYW5lLmpwXCI6dHJ1ZSxcIm9raW5vc2hpbWEuc2hpbWFuZS5qcFwiOnRydWUsXCJva3VpenVtby5zaGltYW5lLmpwXCI6dHJ1ZSxcInNoaW1hbmUuc2hpbWFuZS5qcFwiOnRydWUsXCJ0YW1heXUuc2hpbWFuZS5qcFwiOnRydWUsXCJ0c3V3YW5vLnNoaW1hbmUuanBcIjp0cnVlLFwidW5uYW4uc2hpbWFuZS5qcFwiOnRydWUsXCJ5YWt1bW8uc2hpbWFuZS5qcFwiOnRydWUsXCJ5YXN1Z2kuc2hpbWFuZS5qcFwiOnRydWUsXCJ5YXRzdWthLnNoaW1hbmUuanBcIjp0cnVlLFwiYXJhaS5zaGl6dW9rYS5qcFwiOnRydWUsXCJhdGFtaS5zaGl6dW9rYS5qcFwiOnRydWUsXCJmdWppLnNoaXp1b2thLmpwXCI6dHJ1ZSxcImZ1amllZGEuc2hpenVva2EuanBcIjp0cnVlLFwiZnVqaWthd2Euc2hpenVva2EuanBcIjp0cnVlLFwiZnVqaW5vbWl5YS5zaGl6dW9rYS5qcFwiOnRydWUsXCJmdWt1cm9pLnNoaXp1b2thLmpwXCI6dHJ1ZSxcImdvdGVtYmEuc2hpenVva2EuanBcIjp0cnVlLFwiaGFpYmFyYS5zaGl6dW9rYS5qcFwiOnRydWUsXCJoYW1hbWF0c3Uuc2hpenVva2EuanBcIjp0cnVlLFwiaGlnYXNoaWl6dS5zaGl6dW9rYS5qcFwiOnRydWUsXCJpdG8uc2hpenVva2EuanBcIjp0cnVlLFwiaXdhdGEuc2hpenVva2EuanBcIjp0cnVlLFwiaXp1LnNoaXp1b2thLmpwXCI6dHJ1ZSxcIml6dW5va3VuaS5zaGl6dW9rYS5qcFwiOnRydWUsXCJrYWtlZ2F3YS5zaGl6dW9rYS5qcFwiOnRydWUsXCJrYW5uYW1pLnNoaXp1b2thLmpwXCI6dHJ1ZSxcImthd2FuZWhvbi5zaGl6dW9rYS5qcFwiOnRydWUsXCJrYXdhenUuc2hpenVva2EuanBcIjp0cnVlLFwia2lrdWdhd2Euc2hpenVva2EuanBcIjp0cnVlLFwia29zYWkuc2hpenVva2EuanBcIjp0cnVlLFwibWFraW5vaGFyYS5zaGl6dW9rYS5qcFwiOnRydWUsXCJtYXRzdXpha2kuc2hpenVva2EuanBcIjp0cnVlLFwibWluYW1paXp1LnNoaXp1b2thLmpwXCI6dHJ1ZSxcIm1pc2hpbWEuc2hpenVva2EuanBcIjp0cnVlLFwibW9yaW1hY2hpLnNoaXp1b2thLmpwXCI6dHJ1ZSxcIm5pc2hpaXp1LnNoaXp1b2thLmpwXCI6dHJ1ZSxcIm51bWF6dS5zaGl6dW9rYS5qcFwiOnRydWUsXCJvbWFlemFraS5zaGl6dW9rYS5qcFwiOnRydWUsXCJzaGltYWRhLnNoaXp1b2thLmpwXCI6dHJ1ZSxcInNoaW1penUuc2hpenVva2EuanBcIjp0cnVlLFwic2hpbW9kYS5zaGl6dW9rYS5qcFwiOnRydWUsXCJzaGl6dW9rYS5zaGl6dW9rYS5qcFwiOnRydWUsXCJzdXNvbm8uc2hpenVva2EuanBcIjp0cnVlLFwieWFpenUuc2hpenVva2EuanBcIjp0cnVlLFwieW9zaGlkYS5zaGl6dW9rYS5qcFwiOnRydWUsXCJhc2hpa2FnYS50b2NoaWdpLmpwXCI6dHJ1ZSxcImJhdG8udG9jaGlnaS5qcFwiOnRydWUsXCJoYWdhLnRvY2hpZ2kuanBcIjp0cnVlLFwiaWNoaWthaS50b2NoaWdpLmpwXCI6dHJ1ZSxcIml3YWZ1bmUudG9jaGlnaS5qcFwiOnRydWUsXCJrYW1pbm9rYXdhLnRvY2hpZ2kuanBcIjp0cnVlLFwia2FudW1hLnRvY2hpZ2kuanBcIjp0cnVlLFwia2FyYXN1eWFtYS50b2NoaWdpLmpwXCI6dHJ1ZSxcImt1cm9pc28udG9jaGlnaS5qcFwiOnRydWUsXCJtYXNoaWtvLnRvY2hpZ2kuanBcIjp0cnVlLFwibWlidS50b2NoaWdpLmpwXCI6dHJ1ZSxcIm1va2EudG9jaGlnaS5qcFwiOnRydWUsXCJtb3RlZ2kudG9jaGlnaS5qcFwiOnRydWUsXCJuYXN1LnRvY2hpZ2kuanBcIjp0cnVlLFwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanBcIjp0cnVlLFwibmlra28udG9jaGlnaS5qcFwiOnRydWUsXCJuaXNoaWthdGEudG9jaGlnaS5qcFwiOnRydWUsXCJub2dpLnRvY2hpZ2kuanBcIjp0cnVlLFwib2hpcmEudG9jaGlnaS5qcFwiOnRydWUsXCJvaHRhd2FyYS50b2NoaWdpLmpwXCI6dHJ1ZSxcIm95YW1hLnRvY2hpZ2kuanBcIjp0cnVlLFwic2FrdXJhLnRvY2hpZ2kuanBcIjp0cnVlLFwic2Fuby50b2NoaWdpLmpwXCI6dHJ1ZSxcInNoaW1vdHN1a2UudG9jaGlnaS5qcFwiOnRydWUsXCJzaGlveWEudG9jaGlnaS5qcFwiOnRydWUsXCJ0YWthbmV6YXdhLnRvY2hpZ2kuanBcIjp0cnVlLFwidG9jaGlnaS50b2NoaWdpLmpwXCI6dHJ1ZSxcInRzdWdhLnRvY2hpZ2kuanBcIjp0cnVlLFwidWppaWUudG9jaGlnaS5qcFwiOnRydWUsXCJ1dHN1bm9taXlhLnRvY2hpZ2kuanBcIjp0cnVlLFwieWFpdGEudG9jaGlnaS5qcFwiOnRydWUsXCJhaXp1bWkudG9rdXNoaW1hLmpwXCI6dHJ1ZSxcImFuYW4udG9rdXNoaW1hLmpwXCI6dHJ1ZSxcImljaGliYS50b2t1c2hpbWEuanBcIjp0cnVlLFwiaXRhbm8udG9rdXNoaW1hLmpwXCI6dHJ1ZSxcImthaW5hbi50b2t1c2hpbWEuanBcIjp0cnVlLFwia29tYXRzdXNoaW1hLnRva3VzaGltYS5qcFwiOnRydWUsXCJtYXRzdXNoaWdlLnRva3VzaGltYS5qcFwiOnRydWUsXCJtaW1hLnRva3VzaGltYS5qcFwiOnRydWUsXCJtaW5hbWkudG9rdXNoaW1hLmpwXCI6dHJ1ZSxcIm1peW9zaGkudG9rdXNoaW1hLmpwXCI6dHJ1ZSxcIm11Z2kudG9rdXNoaW1hLmpwXCI6dHJ1ZSxcIm5ha2FnYXdhLnRva3VzaGltYS5qcFwiOnRydWUsXCJuYXJ1dG8udG9rdXNoaW1hLmpwXCI6dHJ1ZSxcInNhbmFnb2NoaS50b2t1c2hpbWEuanBcIjp0cnVlLFwic2hpc2hpa3VpLnRva3VzaGltYS5qcFwiOnRydWUsXCJ0b2t1c2hpbWEudG9rdXNoaW1hLmpwXCI6dHJ1ZSxcIndhamlraS50b2t1c2hpbWEuanBcIjp0cnVlLFwiYWRhY2hpLnRva3lvLmpwXCI6dHJ1ZSxcImFraXJ1bm8udG9reW8uanBcIjp0cnVlLFwiYWtpc2hpbWEudG9reW8uanBcIjp0cnVlLFwiYW9nYXNoaW1hLnRva3lvLmpwXCI6dHJ1ZSxcImFyYWthd2EudG9reW8uanBcIjp0cnVlLFwiYnVua3lvLnRva3lvLmpwXCI6dHJ1ZSxcImNoaXlvZGEudG9reW8uanBcIjp0cnVlLFwiY2hvZnUudG9reW8uanBcIjp0cnVlLFwiY2h1by50b2t5by5qcFwiOnRydWUsXCJlZG9nYXdhLnRva3lvLmpwXCI6dHJ1ZSxcImZ1Y2h1LnRva3lvLmpwXCI6dHJ1ZSxcImZ1c3NhLnRva3lvLmpwXCI6dHJ1ZSxcImhhY2hpam8udG9reW8uanBcIjp0cnVlLFwiaGFjaGlvamkudG9reW8uanBcIjp0cnVlLFwiaGFtdXJhLnRva3lvLmpwXCI6dHJ1ZSxcImhpZ2FzaGlrdXJ1bWUudG9reW8uanBcIjp0cnVlLFwiaGlnYXNoaW11cmF5YW1hLnRva3lvLmpwXCI6dHJ1ZSxcImhpZ2FzaGl5YW1hdG8udG9reW8uanBcIjp0cnVlLFwiaGluby50b2t5by5qcFwiOnRydWUsXCJoaW5vZGUudG9reW8uanBcIjp0cnVlLFwiaGlub2hhcmEudG9reW8uanBcIjp0cnVlLFwiaW5hZ2kudG9reW8uanBcIjp0cnVlLFwiaXRhYmFzaGkudG9reW8uanBcIjp0cnVlLFwia2F0c3VzaGlrYS50b2t5by5qcFwiOnRydWUsXCJraXRhLnRva3lvLmpwXCI6dHJ1ZSxcImtpeW9zZS50b2t5by5qcFwiOnRydWUsXCJrb2RhaXJhLnRva3lvLmpwXCI6dHJ1ZSxcImtvZ2FuZWkudG9reW8uanBcIjp0cnVlLFwia29rdWJ1bmppLnRva3lvLmpwXCI6dHJ1ZSxcImtvbWFlLnRva3lvLmpwXCI6dHJ1ZSxcImtvdG8udG9reW8uanBcIjp0cnVlLFwia291enVzaGltYS50b2t5by5qcFwiOnRydWUsXCJrdW5pdGFjaGkudG9reW8uanBcIjp0cnVlLFwibWFjaGlkYS50b2t5by5qcFwiOnRydWUsXCJtZWd1cm8udG9reW8uanBcIjp0cnVlLFwibWluYXRvLnRva3lvLmpwXCI6dHJ1ZSxcIm1pdGFrYS50b2t5by5qcFwiOnRydWUsXCJtaXp1aG8udG9reW8uanBcIjp0cnVlLFwibXVzYXNoaW11cmF5YW1hLnRva3lvLmpwXCI6dHJ1ZSxcIm11c2FzaGluby50b2t5by5qcFwiOnRydWUsXCJuYWthbm8udG9reW8uanBcIjp0cnVlLFwibmVyaW1hLnRva3lvLmpwXCI6dHJ1ZSxcIm9nYXNhd2FyYS50b2t5by5qcFwiOnRydWUsXCJva3V0YW1hLnRva3lvLmpwXCI6dHJ1ZSxcIm9tZS50b2t5by5qcFwiOnRydWUsXCJvc2hpbWEudG9reW8uanBcIjp0cnVlLFwib3RhLnRva3lvLmpwXCI6dHJ1ZSxcInNldGFnYXlhLnRva3lvLmpwXCI6dHJ1ZSxcInNoaWJ1eWEudG9reW8uanBcIjp0cnVlLFwic2hpbmFnYXdhLnRva3lvLmpwXCI6dHJ1ZSxcInNoaW5qdWt1LnRva3lvLmpwXCI6dHJ1ZSxcInN1Z2luYW1pLnRva3lvLmpwXCI6dHJ1ZSxcInN1bWlkYS50b2t5by5qcFwiOnRydWUsXCJ0YWNoaWthd2EudG9reW8uanBcIjp0cnVlLFwidGFpdG8udG9reW8uanBcIjp0cnVlLFwidGFtYS50b2t5by5qcFwiOnRydWUsXCJ0b3NoaW1hLnRva3lvLmpwXCI6dHJ1ZSxcImNoaXp1LnRvdHRvcmkuanBcIjp0cnVlLFwiaGluby50b3R0b3JpLmpwXCI6dHJ1ZSxcImthd2FoYXJhLnRvdHRvcmkuanBcIjp0cnVlLFwia29nZS50b3R0b3JpLmpwXCI6dHJ1ZSxcImtvdG91cmEudG90dG9yaS5qcFwiOnRydWUsXCJtaXNhc2EudG90dG9yaS5qcFwiOnRydWUsXCJuYW5idS50b3R0b3JpLmpwXCI6dHJ1ZSxcIm5pY2hpbmFuLnRvdHRvcmkuanBcIjp0cnVlLFwic2FrYWltaW5hdG8udG90dG9yaS5qcFwiOnRydWUsXCJ0b3R0b3JpLnRvdHRvcmkuanBcIjp0cnVlLFwid2FrYXNhLnRvdHRvcmkuanBcIjp0cnVlLFwieWF6dS50b3R0b3JpLmpwXCI6dHJ1ZSxcInlvbmFnby50b3R0b3JpLmpwXCI6dHJ1ZSxcImFzYWhpLnRveWFtYS5qcFwiOnRydWUsXCJmdWNodS50b3lhbWEuanBcIjp0cnVlLFwiZnVrdW1pdHN1LnRveWFtYS5qcFwiOnRydWUsXCJmdW5haGFzaGkudG95YW1hLmpwXCI6dHJ1ZSxcImhpbWkudG95YW1hLmpwXCI6dHJ1ZSxcImltaXp1LnRveWFtYS5qcFwiOnRydWUsXCJpbmFtaS50b3lhbWEuanBcIjp0cnVlLFwiam9oYW5hLnRveWFtYS5qcFwiOnRydWUsXCJrYW1paWNoaS50b3lhbWEuanBcIjp0cnVlLFwia3Vyb2JlLnRveWFtYS5qcFwiOnRydWUsXCJuYWthbmlpa2F3YS50b3lhbWEuanBcIjp0cnVlLFwibmFtZXJpa2F3YS50b3lhbWEuanBcIjp0cnVlLFwibmFudG8udG95YW1hLmpwXCI6dHJ1ZSxcIm55dXplbi50b3lhbWEuanBcIjp0cnVlLFwib3lhYmUudG95YW1hLmpwXCI6dHJ1ZSxcInRhaXJhLnRveWFtYS5qcFwiOnRydWUsXCJ0YWthb2thLnRveWFtYS5qcFwiOnRydWUsXCJ0YXRleWFtYS50b3lhbWEuanBcIjp0cnVlLFwidG9nYS50b3lhbWEuanBcIjp0cnVlLFwidG9uYW1pLnRveWFtYS5qcFwiOnRydWUsXCJ0b3lhbWEudG95YW1hLmpwXCI6dHJ1ZSxcInVuYXp1a2kudG95YW1hLmpwXCI6dHJ1ZSxcInVvenUudG95YW1hLmpwXCI6dHJ1ZSxcInlhbWFkYS50b3lhbWEuanBcIjp0cnVlLFwiYXJpZGEud2FrYXlhbWEuanBcIjp0cnVlLFwiYXJpZGFnYXdhLndha2F5YW1hLmpwXCI6dHJ1ZSxcImdvYm8ud2FrYXlhbWEuanBcIjp0cnVlLFwiaGFzaGltb3RvLndha2F5YW1hLmpwXCI6dHJ1ZSxcImhpZGFrYS53YWtheWFtYS5qcFwiOnRydWUsXCJoaXJvZ2F3YS53YWtheWFtYS5qcFwiOnRydWUsXCJpbmFtaS53YWtheWFtYS5qcFwiOnRydWUsXCJpd2FkZS53YWtheWFtYS5qcFwiOnRydWUsXCJrYWluYW4ud2FrYXlhbWEuanBcIjp0cnVlLFwia2FtaXRvbmRhLndha2F5YW1hLmpwXCI6dHJ1ZSxcImthdHN1cmFnaS53YWtheWFtYS5qcFwiOnRydWUsXCJraW1pbm8ud2FrYXlhbWEuanBcIjp0cnVlLFwia2lub2thd2Eud2FrYXlhbWEuanBcIjp0cnVlLFwia2l0YXlhbWEud2FrYXlhbWEuanBcIjp0cnVlLFwia295YS53YWtheWFtYS5qcFwiOnRydWUsXCJrb3phLndha2F5YW1hLmpwXCI6dHJ1ZSxcImtvemFnYXdhLndha2F5YW1hLmpwXCI6dHJ1ZSxcImt1ZG95YW1hLndha2F5YW1hLmpwXCI6dHJ1ZSxcImt1c2hpbW90by53YWtheWFtYS5qcFwiOnRydWUsXCJtaWhhbWEud2FrYXlhbWEuanBcIjp0cnVlLFwibWlzYXRvLndha2F5YW1hLmpwXCI6dHJ1ZSxcIm5hY2hpa2F0c3V1cmEud2FrYXlhbWEuanBcIjp0cnVlLFwic2hpbmd1Lndha2F5YW1hLmpwXCI6dHJ1ZSxcInNoaXJhaGFtYS53YWtheWFtYS5qcFwiOnRydWUsXCJ0YWlqaS53YWtheWFtYS5qcFwiOnRydWUsXCJ0YW5hYmUud2FrYXlhbWEuanBcIjp0cnVlLFwid2FrYXlhbWEud2FrYXlhbWEuanBcIjp0cnVlLFwieXVhc2Eud2FrYXlhbWEuanBcIjp0cnVlLFwieXVyYS53YWtheWFtYS5qcFwiOnRydWUsXCJhc2FoaS55YW1hZ2F0YS5qcFwiOnRydWUsXCJmdW5hZ2F0YS55YW1hZ2F0YS5qcFwiOnRydWUsXCJoaWdhc2hpbmUueWFtYWdhdGEuanBcIjp0cnVlLFwiaWlkZS55YW1hZ2F0YS5qcFwiOnRydWUsXCJrYWhva3UueWFtYWdhdGEuanBcIjp0cnVlLFwia2FtaW5veWFtYS55YW1hZ2F0YS5qcFwiOnRydWUsXCJrYW5leWFtYS55YW1hZ2F0YS5qcFwiOnRydWUsXCJrYXdhbmlzaGkueWFtYWdhdGEuanBcIjp0cnVlLFwibWFtdXJvZ2F3YS55YW1hZ2F0YS5qcFwiOnRydWUsXCJtaWthd2EueWFtYWdhdGEuanBcIjp0cnVlLFwibXVyYXlhbWEueWFtYWdhdGEuanBcIjp0cnVlLFwibmFnYWkueWFtYWdhdGEuanBcIjp0cnVlLFwibmFrYXlhbWEueWFtYWdhdGEuanBcIjp0cnVlLFwibmFueW8ueWFtYWdhdGEuanBcIjp0cnVlLFwibmlzaGlrYXdhLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcIm9iYW5hemF3YS55YW1hZ2F0YS5qcFwiOnRydWUsXCJvZS55YW1hZ2F0YS5qcFwiOnRydWUsXCJvZ3VuaS55YW1hZ2F0YS5qcFwiOnRydWUsXCJvaGt1cmEueWFtYWdhdGEuanBcIjp0cnVlLFwib2lzaGlkYS55YW1hZ2F0YS5qcFwiOnRydWUsXCJzYWdhZS55YW1hZ2F0YS5qcFwiOnRydWUsXCJzYWthdGEueWFtYWdhdGEuanBcIjp0cnVlLFwic2FrZWdhd2EueWFtYWdhdGEuanBcIjp0cnVlLFwic2hpbmpvLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcInNoaXJhdGFrYS55YW1hZ2F0YS5qcFwiOnRydWUsXCJzaG9uYWkueWFtYWdhdGEuanBcIjp0cnVlLFwidGFrYWhhdGEueWFtYWdhdGEuanBcIjp0cnVlLFwidGVuZG8ueWFtYWdhdGEuanBcIjp0cnVlLFwidG96YXdhLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcInRzdXJ1b2thLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcInlhbWFnYXRhLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcInlhbWFub2JlLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcInlvbmV6YXdhLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcInl1emEueWFtYWdhdGEuanBcIjp0cnVlLFwiYWJ1LnlhbWFndWNoaS5qcFwiOnRydWUsXCJoYWdpLnlhbWFndWNoaS5qcFwiOnRydWUsXCJoaWthcmkueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcImhvZnUueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcIml3YWt1bmkueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcImt1ZGFtYXRzdS55YW1hZ3VjaGkuanBcIjp0cnVlLFwibWl0b3UueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcIm5hZ2F0by55YW1hZ3VjaGkuanBcIjp0cnVlLFwib3NoaW1hLnlhbWFndWNoaS5qcFwiOnRydWUsXCJzaGltb25vc2VraS55YW1hZ3VjaGkuanBcIjp0cnVlLFwic2h1bmFuLnlhbWFndWNoaS5qcFwiOnRydWUsXCJ0YWJ1c2UueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcInRva3V5YW1hLnlhbWFndWNoaS5qcFwiOnRydWUsXCJ0b3lvdGEueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcInViZS55YW1hZ3VjaGkuanBcIjp0cnVlLFwieXV1LnlhbWFndWNoaS5qcFwiOnRydWUsXCJjaHVvLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJkb3NoaS55YW1hbmFzaGkuanBcIjp0cnVlLFwiZnVlZnVraS55YW1hbmFzaGkuanBcIjp0cnVlLFwiZnVqaWthd2EueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcImZ1amlrYXdhZ3VjaGlrby55YW1hbmFzaGkuanBcIjp0cnVlLFwiZnVqaXlvc2hpZGEueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcImhheWFrYXdhLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJob2t1dG8ueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcImljaGlrYXdhbWlzYXRvLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJrYWkueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcImtvZnUueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcImtvc2h1LnlhbWFuYXNoaS5qcFwiOnRydWUsXCJrb3N1Z2UueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcIm1pbmFtaS1hbHBzLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJtaW5vYnUueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcIm5ha2FtaWNoaS55YW1hbmFzaGkuanBcIjp0cnVlLFwibmFuYnUueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcIm5hcnVzYXdhLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJuaXJhc2FraS55YW1hbmFzaGkuanBcIjp0cnVlLFwibmlzaGlrYXRzdXJhLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJvc2hpbm8ueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcIm90c3VraS55YW1hbmFzaGkuanBcIjp0cnVlLFwic2hvd2EueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcInRhYmF5YW1hLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJ0c3VydS55YW1hbmFzaGkuanBcIjp0cnVlLFwidWVub2hhcmEueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcInlhbWFuYWtha28ueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcInlhbWFuYXNoaS55YW1hbmFzaGkuanBcIjp0cnVlLFwiKi5rZVwiOnRydWUsXCJrZ1wiOnRydWUsXCJvcmcua2dcIjp0cnVlLFwibmV0LmtnXCI6dHJ1ZSxcImNvbS5rZ1wiOnRydWUsXCJlZHUua2dcIjp0cnVlLFwiZ292LmtnXCI6dHJ1ZSxcIm1pbC5rZ1wiOnRydWUsXCIqLmtoXCI6dHJ1ZSxcImtpXCI6dHJ1ZSxcImVkdS5raVwiOnRydWUsXCJiaXoua2lcIjp0cnVlLFwibmV0LmtpXCI6dHJ1ZSxcIm9yZy5raVwiOnRydWUsXCJnb3Yua2lcIjp0cnVlLFwiaW5mby5raVwiOnRydWUsXCJjb20ua2lcIjp0cnVlLFwia21cIjp0cnVlLFwib3JnLmttXCI6dHJ1ZSxcIm5vbS5rbVwiOnRydWUsXCJnb3Yua21cIjp0cnVlLFwicHJkLmttXCI6dHJ1ZSxcInRtLmttXCI6dHJ1ZSxcImVkdS5rbVwiOnRydWUsXCJtaWwua21cIjp0cnVlLFwiYXNzLmttXCI6dHJ1ZSxcImNvbS5rbVwiOnRydWUsXCJjb29wLmttXCI6dHJ1ZSxcImFzc28ua21cIjp0cnVlLFwicHJlc3NlLmttXCI6dHJ1ZSxcIm1lZGVjaW4ua21cIjp0cnVlLFwibm90YWlyZXMua21cIjp0cnVlLFwicGhhcm1hY2llbnMua21cIjp0cnVlLFwidmV0ZXJpbmFpcmUua21cIjp0cnVlLFwiZ291di5rbVwiOnRydWUsXCJrblwiOnRydWUsXCJuZXQua25cIjp0cnVlLFwib3JnLmtuXCI6dHJ1ZSxcImVkdS5rblwiOnRydWUsXCJnb3Yua25cIjp0cnVlLFwia3BcIjp0cnVlLFwiY29tLmtwXCI6dHJ1ZSxcImVkdS5rcFwiOnRydWUsXCJnb3Yua3BcIjp0cnVlLFwib3JnLmtwXCI6dHJ1ZSxcInJlcC5rcFwiOnRydWUsXCJ0cmEua3BcIjp0cnVlLFwia3JcIjp0cnVlLFwiYWMua3JcIjp0cnVlLFwiY28ua3JcIjp0cnVlLFwiZXMua3JcIjp0cnVlLFwiZ28ua3JcIjp0cnVlLFwiaHMua3JcIjp0cnVlLFwia2cua3JcIjp0cnVlLFwibWlsLmtyXCI6dHJ1ZSxcIm1zLmtyXCI6dHJ1ZSxcIm5lLmtyXCI6dHJ1ZSxcIm9yLmtyXCI6dHJ1ZSxcInBlLmtyXCI6dHJ1ZSxcInJlLmtyXCI6dHJ1ZSxcInNjLmtyXCI6dHJ1ZSxcImJ1c2FuLmtyXCI6dHJ1ZSxcImNodW5nYnVrLmtyXCI6dHJ1ZSxcImNodW5nbmFtLmtyXCI6dHJ1ZSxcImRhZWd1LmtyXCI6dHJ1ZSxcImRhZWplb24ua3JcIjp0cnVlLFwiZ2FuZ3dvbi5rclwiOnRydWUsXCJnd2FuZ2p1LmtyXCI6dHJ1ZSxcImd5ZW9uZ2J1ay5rclwiOnRydWUsXCJneWVvbmdnaS5rclwiOnRydWUsXCJneWVvbmduYW0ua3JcIjp0cnVlLFwiaW5jaGVvbi5rclwiOnRydWUsXCJqZWp1LmtyXCI6dHJ1ZSxcImplb25idWsua3JcIjp0cnVlLFwiamVvbm5hbS5rclwiOnRydWUsXCJzZW91bC5rclwiOnRydWUsXCJ1bHNhbi5rclwiOnRydWUsXCIqLmt3XCI6dHJ1ZSxcImt5XCI6dHJ1ZSxcImVkdS5reVwiOnRydWUsXCJnb3Yua3lcIjp0cnVlLFwiY29tLmt5XCI6dHJ1ZSxcIm9yZy5reVwiOnRydWUsXCJuZXQua3lcIjp0cnVlLFwia3pcIjp0cnVlLFwib3JnLmt6XCI6dHJ1ZSxcImVkdS5relwiOnRydWUsXCJuZXQua3pcIjp0cnVlLFwiZ292Lmt6XCI6dHJ1ZSxcIm1pbC5relwiOnRydWUsXCJjb20ua3pcIjp0cnVlLFwibGFcIjp0cnVlLFwiaW50LmxhXCI6dHJ1ZSxcIm5ldC5sYVwiOnRydWUsXCJpbmZvLmxhXCI6dHJ1ZSxcImVkdS5sYVwiOnRydWUsXCJnb3YubGFcIjp0cnVlLFwicGVyLmxhXCI6dHJ1ZSxcImNvbS5sYVwiOnRydWUsXCJvcmcubGFcIjp0cnVlLFwibGJcIjp0cnVlLFwiY29tLmxiXCI6dHJ1ZSxcImVkdS5sYlwiOnRydWUsXCJnb3YubGJcIjp0cnVlLFwibmV0LmxiXCI6dHJ1ZSxcIm9yZy5sYlwiOnRydWUsXCJsY1wiOnRydWUsXCJjb20ubGNcIjp0cnVlLFwibmV0LmxjXCI6dHJ1ZSxcImNvLmxjXCI6dHJ1ZSxcIm9yZy5sY1wiOnRydWUsXCJlZHUubGNcIjp0cnVlLFwiZ292LmxjXCI6dHJ1ZSxcImxpXCI6dHJ1ZSxcImxrXCI6dHJ1ZSxcImdvdi5sa1wiOnRydWUsXCJzY2gubGtcIjp0cnVlLFwibmV0LmxrXCI6dHJ1ZSxcImludC5sa1wiOnRydWUsXCJjb20ubGtcIjp0cnVlLFwib3JnLmxrXCI6dHJ1ZSxcImVkdS5sa1wiOnRydWUsXCJuZ28ubGtcIjp0cnVlLFwic29jLmxrXCI6dHJ1ZSxcIndlYi5sa1wiOnRydWUsXCJsdGQubGtcIjp0cnVlLFwiYXNzbi5sa1wiOnRydWUsXCJncnAubGtcIjp0cnVlLFwiaG90ZWwubGtcIjp0cnVlLFwiYWMubGtcIjp0cnVlLFwibHJcIjp0cnVlLFwiY29tLmxyXCI6dHJ1ZSxcImVkdS5sclwiOnRydWUsXCJnb3YubHJcIjp0cnVlLFwib3JnLmxyXCI6dHJ1ZSxcIm5ldC5sclwiOnRydWUsXCJsc1wiOnRydWUsXCJjby5sc1wiOnRydWUsXCJvcmcubHNcIjp0cnVlLFwibHRcIjp0cnVlLFwiZ292Lmx0XCI6dHJ1ZSxcImx1XCI6dHJ1ZSxcImx2XCI6dHJ1ZSxcImNvbS5sdlwiOnRydWUsXCJlZHUubHZcIjp0cnVlLFwiZ292Lmx2XCI6dHJ1ZSxcIm9yZy5sdlwiOnRydWUsXCJtaWwubHZcIjp0cnVlLFwiaWQubHZcIjp0cnVlLFwibmV0Lmx2XCI6dHJ1ZSxcImFzbi5sdlwiOnRydWUsXCJjb25mLmx2XCI6dHJ1ZSxcImx5XCI6dHJ1ZSxcImNvbS5seVwiOnRydWUsXCJuZXQubHlcIjp0cnVlLFwiZ292Lmx5XCI6dHJ1ZSxcInBsYy5seVwiOnRydWUsXCJlZHUubHlcIjp0cnVlLFwic2NoLmx5XCI6dHJ1ZSxcIm1lZC5seVwiOnRydWUsXCJvcmcubHlcIjp0cnVlLFwiaWQubHlcIjp0cnVlLFwibWFcIjp0cnVlLFwiY28ubWFcIjp0cnVlLFwibmV0Lm1hXCI6dHJ1ZSxcImdvdi5tYVwiOnRydWUsXCJvcmcubWFcIjp0cnVlLFwiYWMubWFcIjp0cnVlLFwicHJlc3MubWFcIjp0cnVlLFwibWNcIjp0cnVlLFwidG0ubWNcIjp0cnVlLFwiYXNzby5tY1wiOnRydWUsXCJtZFwiOnRydWUsXCJtZVwiOnRydWUsXCJjby5tZVwiOnRydWUsXCJuZXQubWVcIjp0cnVlLFwib3JnLm1lXCI6dHJ1ZSxcImVkdS5tZVwiOnRydWUsXCJhYy5tZVwiOnRydWUsXCJnb3YubWVcIjp0cnVlLFwiaXRzLm1lXCI6dHJ1ZSxcInByaXYubWVcIjp0cnVlLFwibWdcIjp0cnVlLFwib3JnLm1nXCI6dHJ1ZSxcIm5vbS5tZ1wiOnRydWUsXCJnb3YubWdcIjp0cnVlLFwicHJkLm1nXCI6dHJ1ZSxcInRtLm1nXCI6dHJ1ZSxcImVkdS5tZ1wiOnRydWUsXCJtaWwubWdcIjp0cnVlLFwiY29tLm1nXCI6dHJ1ZSxcImNvLm1nXCI6dHJ1ZSxcIm1oXCI6dHJ1ZSxcIm1pbFwiOnRydWUsXCJta1wiOnRydWUsXCJjb20ubWtcIjp0cnVlLFwib3JnLm1rXCI6dHJ1ZSxcIm5ldC5ta1wiOnRydWUsXCJlZHUubWtcIjp0cnVlLFwiZ292Lm1rXCI6dHJ1ZSxcImluZi5ta1wiOnRydWUsXCJuYW1lLm1rXCI6dHJ1ZSxcIm1sXCI6dHJ1ZSxcImNvbS5tbFwiOnRydWUsXCJlZHUubWxcIjp0cnVlLFwiZ291di5tbFwiOnRydWUsXCJnb3YubWxcIjp0cnVlLFwibmV0Lm1sXCI6dHJ1ZSxcIm9yZy5tbFwiOnRydWUsXCJwcmVzc2UubWxcIjp0cnVlLFwiKi5tbVwiOnRydWUsXCJtblwiOnRydWUsXCJnb3YubW5cIjp0cnVlLFwiZWR1Lm1uXCI6dHJ1ZSxcIm9yZy5tblwiOnRydWUsXCJtb1wiOnRydWUsXCJjb20ubW9cIjp0cnVlLFwibmV0Lm1vXCI6dHJ1ZSxcIm9yZy5tb1wiOnRydWUsXCJlZHUubW9cIjp0cnVlLFwiZ292Lm1vXCI6dHJ1ZSxcIm1vYmlcIjp0cnVlLFwibXBcIjp0cnVlLFwibXFcIjp0cnVlLFwibXJcIjp0cnVlLFwiZ292Lm1yXCI6dHJ1ZSxcIm1zXCI6dHJ1ZSxcImNvbS5tc1wiOnRydWUsXCJlZHUubXNcIjp0cnVlLFwiZ292Lm1zXCI6dHJ1ZSxcIm5ldC5tc1wiOnRydWUsXCJvcmcubXNcIjp0cnVlLFwibXRcIjp0cnVlLFwiY29tLm10XCI6dHJ1ZSxcImVkdS5tdFwiOnRydWUsXCJuZXQubXRcIjp0cnVlLFwib3JnLm10XCI6dHJ1ZSxcIm11XCI6dHJ1ZSxcImNvbS5tdVwiOnRydWUsXCJuZXQubXVcIjp0cnVlLFwib3JnLm11XCI6dHJ1ZSxcImdvdi5tdVwiOnRydWUsXCJhYy5tdVwiOnRydWUsXCJjby5tdVwiOnRydWUsXCJvci5tdVwiOnRydWUsXCJtdXNldW1cIjp0cnVlLFwiYWNhZGVteS5tdXNldW1cIjp0cnVlLFwiYWdyaWN1bHR1cmUubXVzZXVtXCI6dHJ1ZSxcImFpci5tdXNldW1cIjp0cnVlLFwiYWlyZ3VhcmQubXVzZXVtXCI6dHJ1ZSxcImFsYWJhbWEubXVzZXVtXCI6dHJ1ZSxcImFsYXNrYS5tdXNldW1cIjp0cnVlLFwiYW1iZXIubXVzZXVtXCI6dHJ1ZSxcImFtYnVsYW5jZS5tdXNldW1cIjp0cnVlLFwiYW1lcmljYW4ubXVzZXVtXCI6dHJ1ZSxcImFtZXJpY2FuYS5tdXNldW1cIjp0cnVlLFwiYW1lcmljYW5hbnRpcXVlcy5tdXNldW1cIjp0cnVlLFwiYW1lcmljYW5hcnQubXVzZXVtXCI6dHJ1ZSxcImFtc3RlcmRhbS5tdXNldW1cIjp0cnVlLFwiYW5kLm11c2V1bVwiOnRydWUsXCJhbm5lZnJhbmsubXVzZXVtXCI6dHJ1ZSxcImFudGhyby5tdXNldW1cIjp0cnVlLFwiYW50aHJvcG9sb2d5Lm11c2V1bVwiOnRydWUsXCJhbnRpcXVlcy5tdXNldW1cIjp0cnVlLFwiYXF1YXJpdW0ubXVzZXVtXCI6dHJ1ZSxcImFyYm9yZXR1bS5tdXNldW1cIjp0cnVlLFwiYXJjaGFlb2xvZ2ljYWwubXVzZXVtXCI6dHJ1ZSxcImFyY2hhZW9sb2d5Lm11c2V1bVwiOnRydWUsXCJhcmNoaXRlY3R1cmUubXVzZXVtXCI6dHJ1ZSxcImFydC5tdXNldW1cIjp0cnVlLFwiYXJ0YW5kZGVzaWduLm11c2V1bVwiOnRydWUsXCJhcnRjZW50ZXIubXVzZXVtXCI6dHJ1ZSxcImFydGRlY28ubXVzZXVtXCI6dHJ1ZSxcImFydGVkdWNhdGlvbi5tdXNldW1cIjp0cnVlLFwiYXJ0Z2FsbGVyeS5tdXNldW1cIjp0cnVlLFwiYXJ0cy5tdXNldW1cIjp0cnVlLFwiYXJ0c2FuZGNyYWZ0cy5tdXNldW1cIjp0cnVlLFwiYXNtYXRhcnQubXVzZXVtXCI6dHJ1ZSxcImFzc2Fzc2luYXRpb24ubXVzZXVtXCI6dHJ1ZSxcImFzc2lzaS5tdXNldW1cIjp0cnVlLFwiYXNzb2NpYXRpb24ubXVzZXVtXCI6dHJ1ZSxcImFzdHJvbm9teS5tdXNldW1cIjp0cnVlLFwiYXRsYW50YS5tdXNldW1cIjp0cnVlLFwiYXVzdGluLm11c2V1bVwiOnRydWUsXCJhdXN0cmFsaWEubXVzZXVtXCI6dHJ1ZSxcImF1dG9tb3RpdmUubXVzZXVtXCI6dHJ1ZSxcImF2aWF0aW9uLm11c2V1bVwiOnRydWUsXCJheGlzLm11c2V1bVwiOnRydWUsXCJiYWRham96Lm11c2V1bVwiOnRydWUsXCJiYWdoZGFkLm11c2V1bVwiOnRydWUsXCJiYWhuLm11c2V1bVwiOnRydWUsXCJiYWxlLm11c2V1bVwiOnRydWUsXCJiYWx0aW1vcmUubXVzZXVtXCI6dHJ1ZSxcImJhcmNlbG9uYS5tdXNldW1cIjp0cnVlLFwiYmFzZWJhbGwubXVzZXVtXCI6dHJ1ZSxcImJhc2VsLm11c2V1bVwiOnRydWUsXCJiYXRocy5tdXNldW1cIjp0cnVlLFwiYmF1ZXJuLm11c2V1bVwiOnRydWUsXCJiZWF1eGFydHMubXVzZXVtXCI6dHJ1ZSxcImJlZWxkZW5nZWx1aWQubXVzZXVtXCI6dHJ1ZSxcImJlbGxldnVlLm11c2V1bVwiOnRydWUsXCJiZXJnYmF1Lm11c2V1bVwiOnRydWUsXCJiZXJrZWxleS5tdXNldW1cIjp0cnVlLFwiYmVybGluLm11c2V1bVwiOnRydWUsXCJiZXJuLm11c2V1bVwiOnRydWUsXCJiaWJsZS5tdXNldW1cIjp0cnVlLFwiYmlsYmFvLm11c2V1bVwiOnRydWUsXCJiaWxsLm11c2V1bVwiOnRydWUsXCJiaXJkYXJ0Lm11c2V1bVwiOnRydWUsXCJiaXJ0aHBsYWNlLm11c2V1bVwiOnRydWUsXCJib25uLm11c2V1bVwiOnRydWUsXCJib3N0b24ubXVzZXVtXCI6dHJ1ZSxcImJvdGFuaWNhbC5tdXNldW1cIjp0cnVlLFwiYm90YW5pY2FsZ2FyZGVuLm11c2V1bVwiOnRydWUsXCJib3RhbmljZ2FyZGVuLm11c2V1bVwiOnRydWUsXCJib3RhbnkubXVzZXVtXCI6dHJ1ZSxcImJyYW5keXdpbmV2YWxsZXkubXVzZXVtXCI6dHJ1ZSxcImJyYXNpbC5tdXNldW1cIjp0cnVlLFwiYnJpc3RvbC5tdXNldW1cIjp0cnVlLFwiYnJpdGlzaC5tdXNldW1cIjp0cnVlLFwiYnJpdGlzaGNvbHVtYmlhLm11c2V1bVwiOnRydWUsXCJicm9hZGNhc3QubXVzZXVtXCI6dHJ1ZSxcImJydW5lbC5tdXNldW1cIjp0cnVlLFwiYnJ1c3NlbC5tdXNldW1cIjp0cnVlLFwiYnJ1c3NlbHMubXVzZXVtXCI6dHJ1ZSxcImJydXhlbGxlcy5tdXNldW1cIjp0cnVlLFwiYnVpbGRpbmcubXVzZXVtXCI6dHJ1ZSxcImJ1cmdob2YubXVzZXVtXCI6dHJ1ZSxcImJ1cy5tdXNldW1cIjp0cnVlLFwiYnVzaGV5Lm11c2V1bVwiOnRydWUsXCJjYWRhcXVlcy5tdXNldW1cIjp0cnVlLFwiY2FsaWZvcm5pYS5tdXNldW1cIjp0cnVlLFwiY2FtYnJpZGdlLm11c2V1bVwiOnRydWUsXCJjYW4ubXVzZXVtXCI6dHJ1ZSxcImNhbmFkYS5tdXNldW1cIjp0cnVlLFwiY2FwZWJyZXRvbi5tdXNldW1cIjp0cnVlLFwiY2Fycmllci5tdXNldW1cIjp0cnVlLFwiY2FydG9vbmFydC5tdXNldW1cIjp0cnVlLFwiY2FzYWRlbGFtb25lZGEubXVzZXVtXCI6dHJ1ZSxcImNhc3RsZS5tdXNldW1cIjp0cnVlLFwiY2FzdHJlcy5tdXNldW1cIjp0cnVlLFwiY2VsdGljLm11c2V1bVwiOnRydWUsXCJjZW50ZXIubXVzZXVtXCI6dHJ1ZSxcImNoYXR0YW5vb2dhLm11c2V1bVwiOnRydWUsXCJjaGVsdGVuaGFtLm11c2V1bVwiOnRydWUsXCJjaGVzYXBlYWtlYmF5Lm11c2V1bVwiOnRydWUsXCJjaGljYWdvLm11c2V1bVwiOnRydWUsXCJjaGlsZHJlbi5tdXNldW1cIjp0cnVlLFwiY2hpbGRyZW5zLm11c2V1bVwiOnRydWUsXCJjaGlsZHJlbnNnYXJkZW4ubXVzZXVtXCI6dHJ1ZSxcImNoaXJvcHJhY3RpYy5tdXNldW1cIjp0cnVlLFwiY2hvY29sYXRlLm11c2V1bVwiOnRydWUsXCJjaHJpc3RpYW5zYnVyZy5tdXNldW1cIjp0cnVlLFwiY2luY2lubmF0aS5tdXNldW1cIjp0cnVlLFwiY2luZW1hLm11c2V1bVwiOnRydWUsXCJjaXJjdXMubXVzZXVtXCI6dHJ1ZSxcImNpdmlsaXNhdGlvbi5tdXNldW1cIjp0cnVlLFwiY2l2aWxpemF0aW9uLm11c2V1bVwiOnRydWUsXCJjaXZpbHdhci5tdXNldW1cIjp0cnVlLFwiY2xpbnRvbi5tdXNldW1cIjp0cnVlLFwiY2xvY2subXVzZXVtXCI6dHJ1ZSxcImNvYWwubXVzZXVtXCI6dHJ1ZSxcImNvYXN0YWxkZWZlbmNlLm11c2V1bVwiOnRydWUsXCJjb2R5Lm11c2V1bVwiOnRydWUsXCJjb2xkd2FyLm11c2V1bVwiOnRydWUsXCJjb2xsZWN0aW9uLm11c2V1bVwiOnRydWUsXCJjb2xvbmlhbHdpbGxpYW1zYnVyZy5tdXNldW1cIjp0cnVlLFwiY29sb3JhZG9wbGF0ZWF1Lm11c2V1bVwiOnRydWUsXCJjb2x1bWJpYS5tdXNldW1cIjp0cnVlLFwiY29sdW1idXMubXVzZXVtXCI6dHJ1ZSxcImNvbW11bmljYXRpb24ubXVzZXVtXCI6dHJ1ZSxcImNvbW11bmljYXRpb25zLm11c2V1bVwiOnRydWUsXCJjb21tdW5pdHkubXVzZXVtXCI6dHJ1ZSxcImNvbXB1dGVyLm11c2V1bVwiOnRydWUsXCJjb21wdXRlcmhpc3RvcnkubXVzZXVtXCI6dHJ1ZSxcInhuLS1jb211bmljYWVzLXY2YTJvLm11c2V1bVwiOnRydWUsXCJjb250ZW1wb3JhcnkubXVzZXVtXCI6dHJ1ZSxcImNvbnRlbXBvcmFyeWFydC5tdXNldW1cIjp0cnVlLFwiY29udmVudC5tdXNldW1cIjp0cnVlLFwiY29wZW5oYWdlbi5tdXNldW1cIjp0cnVlLFwiY29ycG9yYXRpb24ubXVzZXVtXCI6dHJ1ZSxcInhuLS1jb3JyZWlvcy1lLXRlbGVjb211bmljYWVzLWdoYzI5YS5tdXNldW1cIjp0cnVlLFwiY29ydmV0dGUubXVzZXVtXCI6dHJ1ZSxcImNvc3R1bWUubXVzZXVtXCI6dHJ1ZSxcImNvdW50cnllc3RhdGUubXVzZXVtXCI6dHJ1ZSxcImNvdW50eS5tdXNldW1cIjp0cnVlLFwiY3JhZnRzLm11c2V1bVwiOnRydWUsXCJjcmFuYnJvb2subXVzZXVtXCI6dHJ1ZSxcImNyZWF0aW9uLm11c2V1bVwiOnRydWUsXCJjdWx0dXJhbC5tdXNldW1cIjp0cnVlLFwiY3VsdHVyYWxjZW50ZXIubXVzZXVtXCI6dHJ1ZSxcImN1bHR1cmUubXVzZXVtXCI6dHJ1ZSxcImN5YmVyLm11c2V1bVwiOnRydWUsXCJjeW1ydS5tdXNldW1cIjp0cnVlLFwiZGFsaS5tdXNldW1cIjp0cnVlLFwiZGFsbGFzLm11c2V1bVwiOnRydWUsXCJkYXRhYmFzZS5tdXNldW1cIjp0cnVlLFwiZGRyLm11c2V1bVwiOnRydWUsXCJkZWNvcmF0aXZlYXJ0cy5tdXNldW1cIjp0cnVlLFwiZGVsYXdhcmUubXVzZXVtXCI6dHJ1ZSxcImRlbG1lbmhvcnN0Lm11c2V1bVwiOnRydWUsXCJkZW5tYXJrLm11c2V1bVwiOnRydWUsXCJkZXBvdC5tdXNldW1cIjp0cnVlLFwiZGVzaWduLm11c2V1bVwiOnRydWUsXCJkZXRyb2l0Lm11c2V1bVwiOnRydWUsXCJkaW5vc2F1ci5tdXNldW1cIjp0cnVlLFwiZGlzY292ZXJ5Lm11c2V1bVwiOnRydWUsXCJkb2xscy5tdXNldW1cIjp0cnVlLFwiZG9ub3N0aWEubXVzZXVtXCI6dHJ1ZSxcImR1cmhhbS5tdXNldW1cIjp0cnVlLFwiZWFzdGFmcmljYS5tdXNldW1cIjp0cnVlLFwiZWFzdGNvYXN0Lm11c2V1bVwiOnRydWUsXCJlZHVjYXRpb24ubXVzZXVtXCI6dHJ1ZSxcImVkdWNhdGlvbmFsLm11c2V1bVwiOnRydWUsXCJlZ3lwdGlhbi5tdXNldW1cIjp0cnVlLFwiZWlzZW5iYWhuLm11c2V1bVwiOnRydWUsXCJlbGJ1cmcubXVzZXVtXCI6dHJ1ZSxcImVsdmVuZHJlbGwubXVzZXVtXCI6dHJ1ZSxcImVtYnJvaWRlcnkubXVzZXVtXCI6dHJ1ZSxcImVuY3ljbG9wZWRpYy5tdXNldW1cIjp0cnVlLFwiZW5nbGFuZC5tdXNldW1cIjp0cnVlLFwiZW50b21vbG9neS5tdXNldW1cIjp0cnVlLFwiZW52aXJvbm1lbnQubXVzZXVtXCI6dHJ1ZSxcImVudmlyb25tZW50YWxjb25zZXJ2YXRpb24ubXVzZXVtXCI6dHJ1ZSxcImVwaWxlcHN5Lm11c2V1bVwiOnRydWUsXCJlc3NleC5tdXNldW1cIjp0cnVlLFwiZXN0YXRlLm11c2V1bVwiOnRydWUsXCJldGhub2xvZ3kubXVzZXVtXCI6dHJ1ZSxcImV4ZXRlci5tdXNldW1cIjp0cnVlLFwiZXhoaWJpdGlvbi5tdXNldW1cIjp0cnVlLFwiZmFtaWx5Lm11c2V1bVwiOnRydWUsXCJmYXJtLm11c2V1bVwiOnRydWUsXCJmYXJtZXF1aXBtZW50Lm11c2V1bVwiOnRydWUsXCJmYXJtZXJzLm11c2V1bVwiOnRydWUsXCJmYXJtc3RlYWQubXVzZXVtXCI6dHJ1ZSxcImZpZWxkLm11c2V1bVwiOnRydWUsXCJmaWd1ZXJlcy5tdXNldW1cIjp0cnVlLFwiZmlsYXRlbGlhLm11c2V1bVwiOnRydWUsXCJmaWxtLm11c2V1bVwiOnRydWUsXCJmaW5lYXJ0Lm11c2V1bVwiOnRydWUsXCJmaW5lYXJ0cy5tdXNldW1cIjp0cnVlLFwiZmlubGFuZC5tdXNldW1cIjp0cnVlLFwiZmxhbmRlcnMubXVzZXVtXCI6dHJ1ZSxcImZsb3JpZGEubXVzZXVtXCI6dHJ1ZSxcImZvcmNlLm11c2V1bVwiOnRydWUsXCJmb3J0bWlzc291bGEubXVzZXVtXCI6dHJ1ZSxcImZvcnR3b3J0aC5tdXNldW1cIjp0cnVlLFwiZm91bmRhdGlvbi5tdXNldW1cIjp0cnVlLFwiZnJhbmNhaXNlLm11c2V1bVwiOnRydWUsXCJmcmFua2Z1cnQubXVzZXVtXCI6dHJ1ZSxcImZyYW56aXNrYW5lci5tdXNldW1cIjp0cnVlLFwiZnJlZW1hc29ucnkubXVzZXVtXCI6dHJ1ZSxcImZyZWlidXJnLm11c2V1bVwiOnRydWUsXCJmcmlib3VyZy5tdXNldW1cIjp0cnVlLFwiZnJvZy5tdXNldW1cIjp0cnVlLFwiZnVuZGFjaW8ubXVzZXVtXCI6dHJ1ZSxcImZ1cm5pdHVyZS5tdXNldW1cIjp0cnVlLFwiZ2FsbGVyeS5tdXNldW1cIjp0cnVlLFwiZ2FyZGVuLm11c2V1bVwiOnRydWUsXCJnYXRld2F5Lm11c2V1bVwiOnRydWUsXCJnZWVsdmluY2subXVzZXVtXCI6dHJ1ZSxcImdlbW9sb2dpY2FsLm11c2V1bVwiOnRydWUsXCJnZW9sb2d5Lm11c2V1bVwiOnRydWUsXCJnZW9yZ2lhLm11c2V1bVwiOnRydWUsXCJnaWVzc2VuLm11c2V1bVwiOnRydWUsXCJnbGFzLm11c2V1bVwiOnRydWUsXCJnbGFzcy5tdXNldW1cIjp0cnVlLFwiZ29yZ2UubXVzZXVtXCI6dHJ1ZSxcImdyYW5kcmFwaWRzLm11c2V1bVwiOnRydWUsXCJncmF6Lm11c2V1bVwiOnRydWUsXCJndWVybnNleS5tdXNldW1cIjp0cnVlLFwiaGFsbG9mZmFtZS5tdXNldW1cIjp0cnVlLFwiaGFtYnVyZy5tdXNldW1cIjp0cnVlLFwiaGFuZHNvbi5tdXNldW1cIjp0cnVlLFwiaGFydmVzdGNlbGVicmF0aW9uLm11c2V1bVwiOnRydWUsXCJoYXdhaWkubXVzZXVtXCI6dHJ1ZSxcImhlYWx0aC5tdXNldW1cIjp0cnVlLFwiaGVpbWF0dW5kdWhyZW4ubXVzZXVtXCI6dHJ1ZSxcImhlbGxhcy5tdXNldW1cIjp0cnVlLFwiaGVsc2lua2kubXVzZXVtXCI6dHJ1ZSxcImhlbWJ5Z2RzZm9yYnVuZC5tdXNldW1cIjp0cnVlLFwiaGVyaXRhZ2UubXVzZXVtXCI6dHJ1ZSxcImhpc3RvaXJlLm11c2V1bVwiOnRydWUsXCJoaXN0b3JpY2FsLm11c2V1bVwiOnRydWUsXCJoaXN0b3JpY2Fsc29jaWV0eS5tdXNldW1cIjp0cnVlLFwiaGlzdG9yaWNob3VzZXMubXVzZXVtXCI6dHJ1ZSxcImhpc3RvcmlzY2gubXVzZXVtXCI6dHJ1ZSxcImhpc3RvcmlzY2hlcy5tdXNldW1cIjp0cnVlLFwiaGlzdG9yeS5tdXNldW1cIjp0cnVlLFwiaGlzdG9yeW9mc2NpZW5jZS5tdXNldW1cIjp0cnVlLFwiaG9yb2xvZ3kubXVzZXVtXCI6dHJ1ZSxcImhvdXNlLm11c2V1bVwiOnRydWUsXCJodW1hbml0aWVzLm11c2V1bVwiOnRydWUsXCJpbGx1c3RyYXRpb24ubXVzZXVtXCI6dHJ1ZSxcImltYWdlYW5kc291bmQubXVzZXVtXCI6dHJ1ZSxcImluZGlhbi5tdXNldW1cIjp0cnVlLFwiaW5kaWFuYS5tdXNldW1cIjp0cnVlLFwiaW5kaWFuYXBvbGlzLm11c2V1bVwiOnRydWUsXCJpbmRpYW5tYXJrZXQubXVzZXVtXCI6dHJ1ZSxcImludGVsbGlnZW5jZS5tdXNldW1cIjp0cnVlLFwiaW50ZXJhY3RpdmUubXVzZXVtXCI6dHJ1ZSxcImlyYXEubXVzZXVtXCI6dHJ1ZSxcImlyb24ubXVzZXVtXCI6dHJ1ZSxcImlzbGVvZm1hbi5tdXNldW1cIjp0cnVlLFwiamFtaXNvbi5tdXNldW1cIjp0cnVlLFwiamVmZmVyc29uLm11c2V1bVwiOnRydWUsXCJqZXJ1c2FsZW0ubXVzZXVtXCI6dHJ1ZSxcImpld2VscnkubXVzZXVtXCI6dHJ1ZSxcImpld2lzaC5tdXNldW1cIjp0cnVlLFwiamV3aXNoYXJ0Lm11c2V1bVwiOnRydWUsXCJqZmsubXVzZXVtXCI6dHJ1ZSxcImpvdXJuYWxpc20ubXVzZXVtXCI6dHJ1ZSxcImp1ZGFpY2EubXVzZXVtXCI6dHJ1ZSxcImp1ZHlnYXJsYW5kLm11c2V1bVwiOnRydWUsXCJqdWVkaXNjaGVzLm11c2V1bVwiOnRydWUsXCJqdWlmLm11c2V1bVwiOnRydWUsXCJrYXJhdGUubXVzZXVtXCI6dHJ1ZSxcImthcmlrYXR1ci5tdXNldW1cIjp0cnVlLFwia2lkcy5tdXNldW1cIjp0cnVlLFwia29lYmVuaGF2bi5tdXNldW1cIjp0cnVlLFwia29lbG4ubXVzZXVtXCI6dHJ1ZSxcImt1bnN0Lm11c2V1bVwiOnRydWUsXCJrdW5zdHNhbW1sdW5nLm11c2V1bVwiOnRydWUsXCJrdW5zdHVuZGRlc2lnbi5tdXNldW1cIjp0cnVlLFwibGFib3IubXVzZXVtXCI6dHJ1ZSxcImxhYm91ci5tdXNldW1cIjp0cnVlLFwibGFqb2xsYS5tdXNldW1cIjp0cnVlLFwibGFuY2FzaGlyZS5tdXNldW1cIjp0cnVlLFwibGFuZGVzLm11c2V1bVwiOnRydWUsXCJsYW5zLm11c2V1bVwiOnRydWUsXCJ4bi0tbG5zLXFsYS5tdXNldW1cIjp0cnVlLFwibGFyc3Nvbi5tdXNldW1cIjp0cnVlLFwibGV3aXNtaWxsZXIubXVzZXVtXCI6dHJ1ZSxcImxpbmNvbG4ubXVzZXVtXCI6dHJ1ZSxcImxpbnoubXVzZXVtXCI6dHJ1ZSxcImxpdmluZy5tdXNldW1cIjp0cnVlLFwibGl2aW5naGlzdG9yeS5tdXNldW1cIjp0cnVlLFwibG9jYWxoaXN0b3J5Lm11c2V1bVwiOnRydWUsXCJsb25kb24ubXVzZXVtXCI6dHJ1ZSxcImxvc2FuZ2VsZXMubXVzZXVtXCI6dHJ1ZSxcImxvdXZyZS5tdXNldW1cIjp0cnVlLFwibG95YWxpc3QubXVzZXVtXCI6dHJ1ZSxcImx1Y2VybmUubXVzZXVtXCI6dHJ1ZSxcImx1eGVtYm91cmcubXVzZXVtXCI6dHJ1ZSxcImx1emVybi5tdXNldW1cIjp0cnVlLFwibWFkLm11c2V1bVwiOnRydWUsXCJtYWRyaWQubXVzZXVtXCI6dHJ1ZSxcIm1hbGxvcmNhLm11c2V1bVwiOnRydWUsXCJtYW5jaGVzdGVyLm11c2V1bVwiOnRydWUsXCJtYW5zaW9uLm11c2V1bVwiOnRydWUsXCJtYW5zaW9ucy5tdXNldW1cIjp0cnVlLFwibWFueC5tdXNldW1cIjp0cnVlLFwibWFyYnVyZy5tdXNldW1cIjp0cnVlLFwibWFyaXRpbWUubXVzZXVtXCI6dHJ1ZSxcIm1hcml0aW1vLm11c2V1bVwiOnRydWUsXCJtYXJ5bGFuZC5tdXNldW1cIjp0cnVlLFwibWFyeWxodXJzdC5tdXNldW1cIjp0cnVlLFwibWVkaWEubXVzZXVtXCI6dHJ1ZSxcIm1lZGljYWwubXVzZXVtXCI6dHJ1ZSxcIm1lZGl6aW5oaXN0b3Jpc2NoZXMubXVzZXVtXCI6dHJ1ZSxcIm1lZXJlcy5tdXNldW1cIjp0cnVlLFwibWVtb3JpYWwubXVzZXVtXCI6dHJ1ZSxcIm1lc2F2ZXJkZS5tdXNldW1cIjp0cnVlLFwibWljaGlnYW4ubXVzZXVtXCI6dHJ1ZSxcIm1pZGF0bGFudGljLm11c2V1bVwiOnRydWUsXCJtaWxpdGFyeS5tdXNldW1cIjp0cnVlLFwibWlsbC5tdXNldW1cIjp0cnVlLFwibWluZXJzLm11c2V1bVwiOnRydWUsXCJtaW5pbmcubXVzZXVtXCI6dHJ1ZSxcIm1pbm5lc290YS5tdXNldW1cIjp0cnVlLFwibWlzc2lsZS5tdXNldW1cIjp0cnVlLFwibWlzc291bGEubXVzZXVtXCI6dHJ1ZSxcIm1vZGVybi5tdXNldW1cIjp0cnVlLFwibW9tYS5tdXNldW1cIjp0cnVlLFwibW9uZXkubXVzZXVtXCI6dHJ1ZSxcIm1vbm1vdXRoLm11c2V1bVwiOnRydWUsXCJtb250aWNlbGxvLm11c2V1bVwiOnRydWUsXCJtb250cmVhbC5tdXNldW1cIjp0cnVlLFwibW9zY293Lm11c2V1bVwiOnRydWUsXCJtb3RvcmN5Y2xlLm11c2V1bVwiOnRydWUsXCJtdWVuY2hlbi5tdXNldW1cIjp0cnVlLFwibXVlbnN0ZXIubXVzZXVtXCI6dHJ1ZSxcIm11bGhvdXNlLm11c2V1bVwiOnRydWUsXCJtdW5jaWUubXVzZXVtXCI6dHJ1ZSxcIm11c2VldC5tdXNldW1cIjp0cnVlLFwibXVzZXVtY2VudGVyLm11c2V1bVwiOnRydWUsXCJtdXNldW12ZXJlbmlnaW5nLm11c2V1bVwiOnRydWUsXCJtdXNpYy5tdXNldW1cIjp0cnVlLFwibmF0aW9uYWwubXVzZXVtXCI6dHJ1ZSxcIm5hdGlvbmFsZmlyZWFybXMubXVzZXVtXCI6dHJ1ZSxcIm5hdGlvbmFsaGVyaXRhZ2UubXVzZXVtXCI6dHJ1ZSxcIm5hdGl2ZWFtZXJpY2FuLm11c2V1bVwiOnRydWUsXCJuYXR1cmFsaGlzdG9yeS5tdXNldW1cIjp0cnVlLFwibmF0dXJhbGhpc3RvcnltdXNldW0ubXVzZXVtXCI6dHJ1ZSxcIm5hdHVyYWxzY2llbmNlcy5tdXNldW1cIjp0cnVlLFwibmF0dXJlLm11c2V1bVwiOnRydWUsXCJuYXR1cmhpc3RvcmlzY2hlcy5tdXNldW1cIjp0cnVlLFwibmF0dXVyd2V0ZW5zY2hhcHBlbi5tdXNldW1cIjp0cnVlLFwibmF1bWJ1cmcubXVzZXVtXCI6dHJ1ZSxcIm5hdmFsLm11c2V1bVwiOnRydWUsXCJuZWJyYXNrYS5tdXNldW1cIjp0cnVlLFwibmV1ZXMubXVzZXVtXCI6dHJ1ZSxcIm5ld2hhbXBzaGlyZS5tdXNldW1cIjp0cnVlLFwibmV3amVyc2V5Lm11c2V1bVwiOnRydWUsXCJuZXdtZXhpY28ubXVzZXVtXCI6dHJ1ZSxcIm5ld3BvcnQubXVzZXVtXCI6dHJ1ZSxcIm5ld3NwYXBlci5tdXNldW1cIjp0cnVlLFwibmV3eW9yay5tdXNldW1cIjp0cnVlLFwibmllcGNlLm11c2V1bVwiOnRydWUsXCJub3Jmb2xrLm11c2V1bVwiOnRydWUsXCJub3J0aC5tdXNldW1cIjp0cnVlLFwibnJ3Lm11c2V1bVwiOnRydWUsXCJudWVybmJlcmcubXVzZXVtXCI6dHJ1ZSxcIm51cmVtYmVyZy5tdXNldW1cIjp0cnVlLFwibnljLm11c2V1bVwiOnRydWUsXCJueW55Lm11c2V1bVwiOnRydWUsXCJvY2Vhbm9ncmFwaGljLm11c2V1bVwiOnRydWUsXCJvY2Vhbm9ncmFwaGlxdWUubXVzZXVtXCI6dHJ1ZSxcIm9tYWhhLm11c2V1bVwiOnRydWUsXCJvbmxpbmUubXVzZXVtXCI6dHJ1ZSxcIm9udGFyaW8ubXVzZXVtXCI6dHJ1ZSxcIm9wZW5haXIubXVzZXVtXCI6dHJ1ZSxcIm9yZWdvbi5tdXNldW1cIjp0cnVlLFwib3JlZ29udHJhaWwubXVzZXVtXCI6dHJ1ZSxcIm90YWdvLm11c2V1bVwiOnRydWUsXCJveGZvcmQubXVzZXVtXCI6dHJ1ZSxcInBhY2lmaWMubXVzZXVtXCI6dHJ1ZSxcInBhZGVyYm9ybi5tdXNldW1cIjp0cnVlLFwicGFsYWNlLm11c2V1bVwiOnRydWUsXCJwYWxlby5tdXNldW1cIjp0cnVlLFwicGFsbXNwcmluZ3MubXVzZXVtXCI6dHJ1ZSxcInBhbmFtYS5tdXNldW1cIjp0cnVlLFwicGFyaXMubXVzZXVtXCI6dHJ1ZSxcInBhc2FkZW5hLm11c2V1bVwiOnRydWUsXCJwaGFybWFjeS5tdXNldW1cIjp0cnVlLFwicGhpbGFkZWxwaGlhLm11c2V1bVwiOnRydWUsXCJwaGlsYWRlbHBoaWFhcmVhLm11c2V1bVwiOnRydWUsXCJwaGlsYXRlbHkubXVzZXVtXCI6dHJ1ZSxcInBob2VuaXgubXVzZXVtXCI6dHJ1ZSxcInBob3RvZ3JhcGh5Lm11c2V1bVwiOnRydWUsXCJwaWxvdHMubXVzZXVtXCI6dHJ1ZSxcInBpdHRzYnVyZ2gubXVzZXVtXCI6dHJ1ZSxcInBsYW5ldGFyaXVtLm11c2V1bVwiOnRydWUsXCJwbGFudGF0aW9uLm11c2V1bVwiOnRydWUsXCJwbGFudHMubXVzZXVtXCI6dHJ1ZSxcInBsYXphLm11c2V1bVwiOnRydWUsXCJwb3J0YWwubXVzZXVtXCI6dHJ1ZSxcInBvcnRsYW5kLm11c2V1bVwiOnRydWUsXCJwb3J0bGxpZ2F0Lm11c2V1bVwiOnRydWUsXCJwb3N0cy1hbmQtdGVsZWNvbW11bmljYXRpb25zLm11c2V1bVwiOnRydWUsXCJwcmVzZXJ2YXRpb24ubXVzZXVtXCI6dHJ1ZSxcInByZXNpZGlvLm11c2V1bVwiOnRydWUsXCJwcmVzcy5tdXNldW1cIjp0cnVlLFwicHJvamVjdC5tdXNldW1cIjp0cnVlLFwicHVibGljLm11c2V1bVwiOnRydWUsXCJwdWJvbC5tdXNldW1cIjp0cnVlLFwicXVlYmVjLm11c2V1bVwiOnRydWUsXCJyYWlscm9hZC5tdXNldW1cIjp0cnVlLFwicmFpbHdheS5tdXNldW1cIjp0cnVlLFwicmVzZWFyY2gubXVzZXVtXCI6dHJ1ZSxcInJlc2lzdGFuY2UubXVzZXVtXCI6dHJ1ZSxcInJpb2RlamFuZWlyby5tdXNldW1cIjp0cnVlLFwicm9jaGVzdGVyLm11c2V1bVwiOnRydWUsXCJyb2NrYXJ0Lm11c2V1bVwiOnRydWUsXCJyb21hLm11c2V1bVwiOnRydWUsXCJydXNzaWEubXVzZXVtXCI6dHJ1ZSxcInNhaW50bG91aXMubXVzZXVtXCI6dHJ1ZSxcInNhbGVtLm11c2V1bVwiOnRydWUsXCJzYWx2YWRvcmRhbGkubXVzZXVtXCI6dHJ1ZSxcInNhbHpidXJnLm11c2V1bVwiOnRydWUsXCJzYW5kaWVnby5tdXNldW1cIjp0cnVlLFwic2FuZnJhbmNpc2NvLm11c2V1bVwiOnRydWUsXCJzYW50YWJhcmJhcmEubXVzZXVtXCI6dHJ1ZSxcInNhbnRhY3J1ei5tdXNldW1cIjp0cnVlLFwic2FudGFmZS5tdXNldW1cIjp0cnVlLFwic2Fza2F0Y2hld2FuLm11c2V1bVwiOnRydWUsXCJzYXR4Lm11c2V1bVwiOnRydWUsXCJzYXZhbm5haGdhLm11c2V1bVwiOnRydWUsXCJzY2hsZXNpc2NoZXMubXVzZXVtXCI6dHJ1ZSxcInNjaG9lbmJydW5uLm11c2V1bVwiOnRydWUsXCJzY2hva29sYWRlbi5tdXNldW1cIjp0cnVlLFwic2Nob29sLm11c2V1bVwiOnRydWUsXCJzY2h3ZWl6Lm11c2V1bVwiOnRydWUsXCJzY2llbmNlLm11c2V1bVwiOnRydWUsXCJzY2llbmNlYW5kaGlzdG9yeS5tdXNldW1cIjp0cnVlLFwic2NpZW5jZWFuZGluZHVzdHJ5Lm11c2V1bVwiOnRydWUsXCJzY2llbmNlY2VudGVyLm11c2V1bVwiOnRydWUsXCJzY2llbmNlY2VudGVycy5tdXNldW1cIjp0cnVlLFwic2NpZW5jZS1maWN0aW9uLm11c2V1bVwiOnRydWUsXCJzY2llbmNlaGlzdG9yeS5tdXNldW1cIjp0cnVlLFwic2NpZW5jZXMubXVzZXVtXCI6dHJ1ZSxcInNjaWVuY2VzbmF0dXJlbGxlcy5tdXNldW1cIjp0cnVlLFwic2NvdGxhbmQubXVzZXVtXCI6dHJ1ZSxcInNlYXBvcnQubXVzZXVtXCI6dHJ1ZSxcInNldHRsZW1lbnQubXVzZXVtXCI6dHJ1ZSxcInNldHRsZXJzLm11c2V1bVwiOnRydWUsXCJzaGVsbC5tdXNldW1cIjp0cnVlLFwic2hlcmJyb29rZS5tdXNldW1cIjp0cnVlLFwic2liZW5pay5tdXNldW1cIjp0cnVlLFwic2lsay5tdXNldW1cIjp0cnVlLFwic2tpLm11c2V1bVwiOnRydWUsXCJza29sZS5tdXNldW1cIjp0cnVlLFwic29jaWV0eS5tdXNldW1cIjp0cnVlLFwic29sb2duZS5tdXNldW1cIjp0cnVlLFwic291bmRhbmR2aXNpb24ubXVzZXVtXCI6dHJ1ZSxcInNvdXRoY2Fyb2xpbmEubXVzZXVtXCI6dHJ1ZSxcInNvdXRod2VzdC5tdXNldW1cIjp0cnVlLFwic3BhY2UubXVzZXVtXCI6dHJ1ZSxcInNweS5tdXNldW1cIjp0cnVlLFwic3F1YXJlLm11c2V1bVwiOnRydWUsXCJzdGFkdC5tdXNldW1cIjp0cnVlLFwic3RhbGJhbnMubXVzZXVtXCI6dHJ1ZSxcInN0YXJuYmVyZy5tdXNldW1cIjp0cnVlLFwic3RhdGUubXVzZXVtXCI6dHJ1ZSxcInN0YXRlb2ZkZWxhd2FyZS5tdXNldW1cIjp0cnVlLFwic3RhdGlvbi5tdXNldW1cIjp0cnVlLFwic3RlYW0ubXVzZXVtXCI6dHJ1ZSxcInN0ZWllcm1hcmsubXVzZXVtXCI6dHJ1ZSxcInN0am9obi5tdXNldW1cIjp0cnVlLFwic3RvY2tob2xtLm11c2V1bVwiOnRydWUsXCJzdHBldGVyc2J1cmcubXVzZXVtXCI6dHJ1ZSxcInN0dXR0Z2FydC5tdXNldW1cIjp0cnVlLFwic3Vpc3NlLm11c2V1bVwiOnRydWUsXCJzdXJnZW9uc2hhbGwubXVzZXVtXCI6dHJ1ZSxcInN1cnJleS5tdXNldW1cIjp0cnVlLFwic3ZpenplcmEubXVzZXVtXCI6dHJ1ZSxcInN3ZWRlbi5tdXNldW1cIjp0cnVlLFwic3lkbmV5Lm11c2V1bVwiOnRydWUsXCJ0YW5rLm11c2V1bVwiOnRydWUsXCJ0Y20ubXVzZXVtXCI6dHJ1ZSxcInRlY2hub2xvZ3kubXVzZXVtXCI6dHJ1ZSxcInRlbGVrb21tdW5pa2F0aW9uLm11c2V1bVwiOnRydWUsXCJ0ZWxldmlzaW9uLm11c2V1bVwiOnRydWUsXCJ0ZXhhcy5tdXNldW1cIjp0cnVlLFwidGV4dGlsZS5tdXNldW1cIjp0cnVlLFwidGhlYXRlci5tdXNldW1cIjp0cnVlLFwidGltZS5tdXNldW1cIjp0cnVlLFwidGltZWtlZXBpbmcubXVzZXVtXCI6dHJ1ZSxcInRvcG9sb2d5Lm11c2V1bVwiOnRydWUsXCJ0b3Jpbm8ubXVzZXVtXCI6dHJ1ZSxcInRvdWNoLm11c2V1bVwiOnRydWUsXCJ0b3duLm11c2V1bVwiOnRydWUsXCJ0cmFuc3BvcnQubXVzZXVtXCI6dHJ1ZSxcInRyZWUubXVzZXVtXCI6dHJ1ZSxcInRyb2xsZXkubXVzZXVtXCI6dHJ1ZSxcInRydXN0Lm11c2V1bVwiOnRydWUsXCJ0cnVzdGVlLm11c2V1bVwiOnRydWUsXCJ1aHJlbi5tdXNldW1cIjp0cnVlLFwidWxtLm11c2V1bVwiOnRydWUsXCJ1bmRlcnNlYS5tdXNldW1cIjp0cnVlLFwidW5pdmVyc2l0eS5tdXNldW1cIjp0cnVlLFwidXNhLm11c2V1bVwiOnRydWUsXCJ1c2FudGlxdWVzLm11c2V1bVwiOnRydWUsXCJ1c2FydHMubXVzZXVtXCI6dHJ1ZSxcInVzY291bnRyeWVzdGF0ZS5tdXNldW1cIjp0cnVlLFwidXNjdWx0dXJlLm11c2V1bVwiOnRydWUsXCJ1c2RlY29yYXRpdmVhcnRzLm11c2V1bVwiOnRydWUsXCJ1c2dhcmRlbi5tdXNldW1cIjp0cnVlLFwidXNoaXN0b3J5Lm11c2V1bVwiOnRydWUsXCJ1c2h1YWlhLm11c2V1bVwiOnRydWUsXCJ1c2xpdmluZ2hpc3RvcnkubXVzZXVtXCI6dHJ1ZSxcInV0YWgubXVzZXVtXCI6dHJ1ZSxcInV2aWMubXVzZXVtXCI6dHJ1ZSxcInZhbGxleS5tdXNldW1cIjp0cnVlLFwidmFudGFhLm11c2V1bVwiOnRydWUsXCJ2ZXJzYWlsbGVzLm11c2V1bVwiOnRydWUsXCJ2aWtpbmcubXVzZXVtXCI6dHJ1ZSxcInZpbGxhZ2UubXVzZXVtXCI6dHJ1ZSxcInZpcmdpbmlhLm11c2V1bVwiOnRydWUsXCJ2aXJ0dWFsLm11c2V1bVwiOnRydWUsXCJ2aXJ0dWVsLm11c2V1bVwiOnRydWUsXCJ2bGFhbmRlcmVuLm11c2V1bVwiOnRydWUsXCJ2b2xrZW5rdW5kZS5tdXNldW1cIjp0cnVlLFwid2FsZXMubXVzZXVtXCI6dHJ1ZSxcIndhbGxvbmllLm11c2V1bVwiOnRydWUsXCJ3YXIubXVzZXVtXCI6dHJ1ZSxcIndhc2hpbmd0b25kYy5tdXNldW1cIjp0cnVlLFwid2F0Y2hhbmRjbG9jay5tdXNldW1cIjp0cnVlLFwid2F0Y2gtYW5kLWNsb2NrLm11c2V1bVwiOnRydWUsXCJ3ZXN0ZXJuLm11c2V1bVwiOnRydWUsXCJ3ZXN0ZmFsZW4ubXVzZXVtXCI6dHJ1ZSxcIndoYWxpbmcubXVzZXVtXCI6dHJ1ZSxcIndpbGRsaWZlLm11c2V1bVwiOnRydWUsXCJ3aWxsaWFtc2J1cmcubXVzZXVtXCI6dHJ1ZSxcIndpbmRtaWxsLm11c2V1bVwiOnRydWUsXCJ3b3Jrc2hvcC5tdXNldW1cIjp0cnVlLFwieW9yay5tdXNldW1cIjp0cnVlLFwieW9ya3NoaXJlLm11c2V1bVwiOnRydWUsXCJ5b3NlbWl0ZS5tdXNldW1cIjp0cnVlLFwieW91dGgubXVzZXVtXCI6dHJ1ZSxcInpvb2xvZ2ljYWwubXVzZXVtXCI6dHJ1ZSxcInpvb2xvZ3kubXVzZXVtXCI6dHJ1ZSxcInhuLS05ZGJoYmxnNmRpLm11c2V1bVwiOnRydWUsXCJ4bi0taDFhZWdoLm11c2V1bVwiOnRydWUsXCJtdlwiOnRydWUsXCJhZXJvLm12XCI6dHJ1ZSxcImJpei5tdlwiOnRydWUsXCJjb20ubXZcIjp0cnVlLFwiY29vcC5tdlwiOnRydWUsXCJlZHUubXZcIjp0cnVlLFwiZ292Lm12XCI6dHJ1ZSxcImluZm8ubXZcIjp0cnVlLFwiaW50Lm12XCI6dHJ1ZSxcIm1pbC5tdlwiOnRydWUsXCJtdXNldW0ubXZcIjp0cnVlLFwibmFtZS5tdlwiOnRydWUsXCJuZXQubXZcIjp0cnVlLFwib3JnLm12XCI6dHJ1ZSxcInByby5tdlwiOnRydWUsXCJtd1wiOnRydWUsXCJhYy5td1wiOnRydWUsXCJiaXoubXdcIjp0cnVlLFwiY28ubXdcIjp0cnVlLFwiY29tLm13XCI6dHJ1ZSxcImNvb3AubXdcIjp0cnVlLFwiZWR1Lm13XCI6dHJ1ZSxcImdvdi5td1wiOnRydWUsXCJpbnQubXdcIjp0cnVlLFwibXVzZXVtLm13XCI6dHJ1ZSxcIm5ldC5td1wiOnRydWUsXCJvcmcubXdcIjp0cnVlLFwibXhcIjp0cnVlLFwiY29tLm14XCI6dHJ1ZSxcIm9yZy5teFwiOnRydWUsXCJnb2IubXhcIjp0cnVlLFwiZWR1Lm14XCI6dHJ1ZSxcIm5ldC5teFwiOnRydWUsXCJteVwiOnRydWUsXCJjb20ubXlcIjp0cnVlLFwibmV0Lm15XCI6dHJ1ZSxcIm9yZy5teVwiOnRydWUsXCJnb3YubXlcIjp0cnVlLFwiZWR1Lm15XCI6dHJ1ZSxcIm1pbC5teVwiOnRydWUsXCJuYW1lLm15XCI6dHJ1ZSxcIioubXpcIjp0cnVlLFwidGVsZWRhdGEubXpcIjpmYWxzZSxcIm5hXCI6dHJ1ZSxcImluZm8ubmFcIjp0cnVlLFwicHJvLm5hXCI6dHJ1ZSxcIm5hbWUubmFcIjp0cnVlLFwic2Nob29sLm5hXCI6dHJ1ZSxcIm9yLm5hXCI6dHJ1ZSxcImRyLm5hXCI6dHJ1ZSxcInVzLm5hXCI6dHJ1ZSxcIm14Lm5hXCI6dHJ1ZSxcImNhLm5hXCI6dHJ1ZSxcImluLm5hXCI6dHJ1ZSxcImNjLm5hXCI6dHJ1ZSxcInR2Lm5hXCI6dHJ1ZSxcIndzLm5hXCI6dHJ1ZSxcIm1vYmkubmFcIjp0cnVlLFwiY28ubmFcIjp0cnVlLFwiY29tLm5hXCI6dHJ1ZSxcIm9yZy5uYVwiOnRydWUsXCJuYW1lXCI6dHJ1ZSxcIm5jXCI6dHJ1ZSxcImFzc28ubmNcIjp0cnVlLFwibmVcIjp0cnVlLFwibmV0XCI6dHJ1ZSxcIm5mXCI6dHJ1ZSxcImNvbS5uZlwiOnRydWUsXCJuZXQubmZcIjp0cnVlLFwicGVyLm5mXCI6dHJ1ZSxcInJlYy5uZlwiOnRydWUsXCJ3ZWIubmZcIjp0cnVlLFwiYXJ0cy5uZlwiOnRydWUsXCJmaXJtLm5mXCI6dHJ1ZSxcImluZm8ubmZcIjp0cnVlLFwib3RoZXIubmZcIjp0cnVlLFwic3RvcmUubmZcIjp0cnVlLFwibmdcIjp0cnVlLFwiY29tLm5nXCI6dHJ1ZSxcImVkdS5uZ1wiOnRydWUsXCJuYW1lLm5nXCI6dHJ1ZSxcIm5ldC5uZ1wiOnRydWUsXCJvcmcubmdcIjp0cnVlLFwic2NoLm5nXCI6dHJ1ZSxcImdvdi5uZ1wiOnRydWUsXCJtaWwubmdcIjp0cnVlLFwibW9iaS5uZ1wiOnRydWUsXCIqLm5pXCI6dHJ1ZSxcIm5sXCI6dHJ1ZSxcImJ2Lm5sXCI6dHJ1ZSxcIm5vXCI6dHJ1ZSxcImZocy5ub1wiOnRydWUsXCJ2Z3Mubm9cIjp0cnVlLFwiZnlsa2VzYmlibC5ub1wiOnRydWUsXCJmb2xrZWJpYmwubm9cIjp0cnVlLFwibXVzZXVtLm5vXCI6dHJ1ZSxcImlkcmV0dC5ub1wiOnRydWUsXCJwcml2Lm5vXCI6dHJ1ZSxcIm1pbC5ub1wiOnRydWUsXCJzdGF0Lm5vXCI6dHJ1ZSxcImRlcC5ub1wiOnRydWUsXCJrb21tdW5lLm5vXCI6dHJ1ZSxcImhlcmFkLm5vXCI6dHJ1ZSxcImFhLm5vXCI6dHJ1ZSxcImFoLm5vXCI6dHJ1ZSxcImJ1Lm5vXCI6dHJ1ZSxcImZtLm5vXCI6dHJ1ZSxcImhsLm5vXCI6dHJ1ZSxcImhtLm5vXCI6dHJ1ZSxcImphbi1tYXllbi5ub1wiOnRydWUsXCJtci5ub1wiOnRydWUsXCJubC5ub1wiOnRydWUsXCJudC5ub1wiOnRydWUsXCJvZi5ub1wiOnRydWUsXCJvbC5ub1wiOnRydWUsXCJvc2xvLm5vXCI6dHJ1ZSxcInJsLm5vXCI6dHJ1ZSxcInNmLm5vXCI6dHJ1ZSxcInN0Lm5vXCI6dHJ1ZSxcInN2YWxiYXJkLm5vXCI6dHJ1ZSxcInRtLm5vXCI6dHJ1ZSxcInRyLm5vXCI6dHJ1ZSxcInZhLm5vXCI6dHJ1ZSxcInZmLm5vXCI6dHJ1ZSxcImdzLmFhLm5vXCI6dHJ1ZSxcImdzLmFoLm5vXCI6dHJ1ZSxcImdzLmJ1Lm5vXCI6dHJ1ZSxcImdzLmZtLm5vXCI6dHJ1ZSxcImdzLmhsLm5vXCI6dHJ1ZSxcImdzLmhtLm5vXCI6dHJ1ZSxcImdzLmphbi1tYXllbi5ub1wiOnRydWUsXCJncy5tci5ub1wiOnRydWUsXCJncy5ubC5ub1wiOnRydWUsXCJncy5udC5ub1wiOnRydWUsXCJncy5vZi5ub1wiOnRydWUsXCJncy5vbC5ub1wiOnRydWUsXCJncy5vc2xvLm5vXCI6dHJ1ZSxcImdzLnJsLm5vXCI6dHJ1ZSxcImdzLnNmLm5vXCI6dHJ1ZSxcImdzLnN0Lm5vXCI6dHJ1ZSxcImdzLnN2YWxiYXJkLm5vXCI6dHJ1ZSxcImdzLnRtLm5vXCI6dHJ1ZSxcImdzLnRyLm5vXCI6dHJ1ZSxcImdzLnZhLm5vXCI6dHJ1ZSxcImdzLnZmLm5vXCI6dHJ1ZSxcImFrcmVoYW1uLm5vXCI6dHJ1ZSxcInhuLS1rcmVoYW1uLWR4YS5ub1wiOnRydWUsXCJhbGdhcmQubm9cIjp0cnVlLFwieG4tLWxncmQtcG9hYy5ub1wiOnRydWUsXCJhcm5hLm5vXCI6dHJ1ZSxcImJydW11bmRkYWwubm9cIjp0cnVlLFwiYnJ5bmUubm9cIjp0cnVlLFwiYnJvbm5veXN1bmQubm9cIjp0cnVlLFwieG4tLWJybm55c3VuZC1tOGFjLm5vXCI6dHJ1ZSxcImRyb2Jhay5ub1wiOnRydWUsXCJ4bi0tZHJiYWstd3VhLm5vXCI6dHJ1ZSxcImVnZXJzdW5kLm5vXCI6dHJ1ZSxcImZldHN1bmQubm9cIjp0cnVlLFwiZmxvcm8ubm9cIjp0cnVlLFwieG4tLWZsb3ItanJhLm5vXCI6dHJ1ZSxcImZyZWRyaWtzdGFkLm5vXCI6dHJ1ZSxcImhva2tzdW5kLm5vXCI6dHJ1ZSxcImhvbmVmb3NzLm5vXCI6dHJ1ZSxcInhuLS1obmVmb3NzLXExYS5ub1wiOnRydWUsXCJqZXNzaGVpbS5ub1wiOnRydWUsXCJqb3JwZWxhbmQubm9cIjp0cnVlLFwieG4tLWpycGVsYW5kLTU0YS5ub1wiOnRydWUsXCJraXJrZW5lcy5ub1wiOnRydWUsXCJrb3BlcnZpay5ub1wiOnRydWUsXCJrcm9rc3RhZGVsdmEubm9cIjp0cnVlLFwibGFuZ2V2YWcubm9cIjp0cnVlLFwieG4tLWxhbmdldmctanhhLm5vXCI6dHJ1ZSxcImxlaXJ2aWsubm9cIjp0cnVlLFwibWpvbmRhbGVuLm5vXCI6dHJ1ZSxcInhuLS1tam5kYWxlbi02NGEubm9cIjp0cnVlLFwibW8taS1yYW5hLm5vXCI6dHJ1ZSxcIm1vc2pvZW4ubm9cIjp0cnVlLFwieG4tLW1vc2plbi1leWEubm9cIjp0cnVlLFwibmVzb2RkdGFuZ2VuLm5vXCI6dHJ1ZSxcIm9ya2FuZ2VyLm5vXCI6dHJ1ZSxcIm9zb3lyby5ub1wiOnRydWUsXCJ4bi0tb3N5cm8td3VhLm5vXCI6dHJ1ZSxcInJhaG9sdC5ub1wiOnRydWUsXCJ4bi0tcmhvbHQtbXJhLm5vXCI6dHJ1ZSxcInNhbmRuZXNzam9lbi5ub1wiOnRydWUsXCJ4bi0tc2FuZG5lc3NqZW4tb2diLm5vXCI6dHJ1ZSxcInNrZWRzbW9rb3JzZXQubm9cIjp0cnVlLFwic2xhdHR1bS5ub1wiOnRydWUsXCJzcGplbGthdmlrLm5vXCI6dHJ1ZSxcInN0YXRoZWxsZS5ub1wiOnRydWUsXCJzdGF2ZXJuLm5vXCI6dHJ1ZSxcInN0am9yZGFsc2hhbHNlbi5ub1wiOnRydWUsXCJ4bi0tc3RqcmRhbHNoYWxzZW4tc3FiLm5vXCI6dHJ1ZSxcInRhbmFuZ2VyLm5vXCI6dHJ1ZSxcInRyYW5ieS5ub1wiOnRydWUsXCJ2b3NzZXZhbmdlbi5ub1wiOnRydWUsXCJhZmpvcmQubm9cIjp0cnVlLFwieG4tLWZqb3JkLWxyYS5ub1wiOnRydWUsXCJhZ2RlbmVzLm5vXCI6dHJ1ZSxcImFsLm5vXCI6dHJ1ZSxcInhuLS1sLTFmYS5ub1wiOnRydWUsXCJhbGVzdW5kLm5vXCI6dHJ1ZSxcInhuLS1sZXN1bmQtaHVhLm5vXCI6dHJ1ZSxcImFsc3RhaGF1Zy5ub1wiOnRydWUsXCJhbHRhLm5vXCI6dHJ1ZSxcInhuLS1sdC1saWFjLm5vXCI6dHJ1ZSxcImFsYWhlYWRqdS5ub1wiOnRydWUsXCJ4bi0tbGFoZWFkanUtN3lhLm5vXCI6dHJ1ZSxcImFsdmRhbC5ub1wiOnRydWUsXCJhbWxpLm5vXCI6dHJ1ZSxcInhuLS1tbGktdGxhLm5vXCI6dHJ1ZSxcImFtb3Qubm9cIjp0cnVlLFwieG4tLW1vdC10bGEubm9cIjp0cnVlLFwiYW5kZWJ1Lm5vXCI6dHJ1ZSxcImFuZG95Lm5vXCI6dHJ1ZSxcInhuLS1hbmR5LWlyYS5ub1wiOnRydWUsXCJhbmRhc3VvbG8ubm9cIjp0cnVlLFwiYXJkYWwubm9cIjp0cnVlLFwieG4tLXJkYWwtcG9hLm5vXCI6dHJ1ZSxcImFyZW1hcmsubm9cIjp0cnVlLFwiYXJlbmRhbC5ub1wiOnRydWUsXCJ4bi0tcy0xZmEubm9cIjp0cnVlLFwiYXNlcmFsLm5vXCI6dHJ1ZSxcInhuLS1zZXJhbC1scmEubm9cIjp0cnVlLFwiYXNrZXIubm9cIjp0cnVlLFwiYXNraW0ubm9cIjp0cnVlLFwiYXNrdm9sbC5ub1wiOnRydWUsXCJhc2tveS5ub1wiOnRydWUsXCJ4bi0tYXNreS1pcmEubm9cIjp0cnVlLFwiYXNuZXMubm9cIjp0cnVlLFwieG4tLXNuZXMtcG9hLm5vXCI6dHJ1ZSxcImF1ZG5lZGFsbi5ub1wiOnRydWUsXCJhdWtyYS5ub1wiOnRydWUsXCJhdXJlLm5vXCI6dHJ1ZSxcImF1cmxhbmQubm9cIjp0cnVlLFwiYXVyc2tvZy1ob2xhbmQubm9cIjp0cnVlLFwieG4tLWF1cnNrb2ctaGxhbmQtam5iLm5vXCI6dHJ1ZSxcImF1c3Rldm9sbC5ub1wiOnRydWUsXCJhdXN0cmhlaW0ubm9cIjp0cnVlLFwiYXZlcm95Lm5vXCI6dHJ1ZSxcInhuLS1hdmVyeS15dWEubm9cIjp0cnVlLFwiYmFsZXN0cmFuZC5ub1wiOnRydWUsXCJiYWxsYW5nZW4ubm9cIjp0cnVlLFwiYmFsYXQubm9cIjp0cnVlLFwieG4tLWJsdC1lbGFiLm5vXCI6dHJ1ZSxcImJhbHNmam9yZC5ub1wiOnRydWUsXCJiYWhjY2F2dW90bmEubm9cIjp0cnVlLFwieG4tLWJoY2NhdnVvdG5hLWs3YS5ub1wiOnRydWUsXCJiYW1ibGUubm9cIjp0cnVlLFwiYmFyZHUubm9cIjp0cnVlLFwiYmVhcmR1Lm5vXCI6dHJ1ZSxcImJlaWFybi5ub1wiOnRydWUsXCJiYWpkZGFyLm5vXCI6dHJ1ZSxcInhuLS1iamRkYXItcHRhLm5vXCI6dHJ1ZSxcImJhaWRhci5ub1wiOnRydWUsXCJ4bi0tYmlkci01bmFjLm5vXCI6dHJ1ZSxcImJlcmcubm9cIjp0cnVlLFwiYmVyZ2VuLm5vXCI6dHJ1ZSxcImJlcmxldmFnLm5vXCI6dHJ1ZSxcInhuLS1iZXJsZXZnLWp4YS5ub1wiOnRydWUsXCJiZWFyYWx2YWhraS5ub1wiOnRydWUsXCJ4bi0tYmVhcmFsdmhraS15NGEubm9cIjp0cnVlLFwiYmluZGFsLm5vXCI6dHJ1ZSxcImJpcmtlbmVzLm5vXCI6dHJ1ZSxcImJqYXJrb3kubm9cIjp0cnVlLFwieG4tLWJqYXJreS1meWEubm9cIjp0cnVlLFwiYmplcmtyZWltLm5vXCI6dHJ1ZSxcImJqdWduLm5vXCI6dHJ1ZSxcImJvZG8ubm9cIjp0cnVlLFwieG4tLWJvZC0ybmEubm9cIjp0cnVlLFwiYmFkYWRkamEubm9cIjp0cnVlLFwieG4tLWJkZGRqLW1yYWJkLm5vXCI6dHJ1ZSxcImJ1ZGVqanUubm9cIjp0cnVlLFwiYm9rbi5ub1wiOnRydWUsXCJicmVtYW5nZXIubm9cIjp0cnVlLFwiYnJvbm5veS5ub1wiOnRydWUsXCJ4bi0tYnJubnktd3VhYy5ub1wiOnRydWUsXCJieWdsYW5kLm5vXCI6dHJ1ZSxcImJ5a2xlLm5vXCI6dHJ1ZSxcImJhcnVtLm5vXCI6dHJ1ZSxcInhuLS1icnVtLXZvYS5ub1wiOnRydWUsXCJiby50ZWxlbWFyay5ub1wiOnRydWUsXCJ4bi0tYi01Z2EudGVsZW1hcmsubm9cIjp0cnVlLFwiYm8ubm9yZGxhbmQubm9cIjp0cnVlLFwieG4tLWItNWdhLm5vcmRsYW5kLm5vXCI6dHJ1ZSxcImJpZXZhdC5ub1wiOnRydWUsXCJ4bi0tYmlldnQtMHFhLm5vXCI6dHJ1ZSxcImJvbWxvLm5vXCI6dHJ1ZSxcInhuLS1ibWxvLWdyYS5ub1wiOnRydWUsXCJiYXRzZmpvcmQubm9cIjp0cnVlLFwieG4tLWJ0c2Zqb3JkLTl6YS5ub1wiOnRydWUsXCJiYWhjYXZ1b3RuYS5ub1wiOnRydWUsXCJ4bi0tYmhjYXZ1b3RuYS1zNGEubm9cIjp0cnVlLFwiZG92cmUubm9cIjp0cnVlLFwiZHJhbW1lbi5ub1wiOnRydWUsXCJkcmFuZ2VkYWwubm9cIjp0cnVlLFwiZHlyb3kubm9cIjp0cnVlLFwieG4tLWR5cnktaXJhLm5vXCI6dHJ1ZSxcImRvbm5hLm5vXCI6dHJ1ZSxcInhuLS1kbm5hLWdyYS5ub1wiOnRydWUsXCJlaWQubm9cIjp0cnVlLFwiZWlkZmpvcmQubm9cIjp0cnVlLFwiZWlkc2Jlcmcubm9cIjp0cnVlLFwiZWlkc2tvZy5ub1wiOnRydWUsXCJlaWRzdm9sbC5ub1wiOnRydWUsXCJlaWdlcnN1bmQubm9cIjp0cnVlLFwiZWx2ZXJ1bS5ub1wiOnRydWUsXCJlbmViYWtrLm5vXCI6dHJ1ZSxcImVuZ2VyZGFsLm5vXCI6dHJ1ZSxcImV0bmUubm9cIjp0cnVlLFwiZXRuZWRhbC5ub1wiOnRydWUsXCJldmVuZXMubm9cIjp0cnVlLFwiZXZlbmFzc2kubm9cIjp0cnVlLFwieG4tLWV2ZW5pLTBxYTAxZ2Eubm9cIjp0cnVlLFwiZXZqZS1vZy1ob3JubmVzLm5vXCI6dHJ1ZSxcImZhcnN1bmQubm9cIjp0cnVlLFwiZmF1c2tlLm5vXCI6dHJ1ZSxcImZ1b3Nza28ubm9cIjp0cnVlLFwiZnVvaXNrdS5ub1wiOnRydWUsXCJmZWRqZS5ub1wiOnRydWUsXCJmZXQubm9cIjp0cnVlLFwiZmlubm95Lm5vXCI6dHJ1ZSxcInhuLS1maW5ueS15dWEubm9cIjp0cnVlLFwiZml0amFyLm5vXCI6dHJ1ZSxcImZqYWxlci5ub1wiOnRydWUsXCJmamVsbC5ub1wiOnRydWUsXCJmbGFrc3RhZC5ub1wiOnRydWUsXCJmbGF0YW5nZXIubm9cIjp0cnVlLFwiZmxla2tlZmpvcmQubm9cIjp0cnVlLFwiZmxlc2Jlcmcubm9cIjp0cnVlLFwiZmxvcmEubm9cIjp0cnVlLFwiZmxhLm5vXCI6dHJ1ZSxcInhuLS1mbC16aWEubm9cIjp0cnVlLFwiZm9sbGRhbC5ub1wiOnRydWUsXCJmb3JzYW5kLm5vXCI6dHJ1ZSxcImZvc25lcy5ub1wiOnRydWUsXCJmcmVpLm5vXCI6dHJ1ZSxcImZyb2duLm5vXCI6dHJ1ZSxcImZyb2xhbmQubm9cIjp0cnVlLFwiZnJvc3RhLm5vXCI6dHJ1ZSxcImZyYW5hLm5vXCI6dHJ1ZSxcInhuLS1mcm5hLXdvYS5ub1wiOnRydWUsXCJmcm95YS5ub1wiOnRydWUsXCJ4bi0tZnJ5YS1ocmEubm9cIjp0cnVlLFwiZnVzYS5ub1wiOnRydWUsXCJmeXJlc2RhbC5ub1wiOnRydWUsXCJmb3JkZS5ub1wiOnRydWUsXCJ4bi0tZnJkZS1ncmEubm9cIjp0cnVlLFwiZ2FtdmlrLm5vXCI6dHJ1ZSxcImdhbmdhdmlpa2Eubm9cIjp0cnVlLFwieG4tLWdnYXZpaWthLTh5YTQ3aC5ub1wiOnRydWUsXCJnYXVsYXIubm9cIjp0cnVlLFwiZ2F1c2RhbC5ub1wiOnRydWUsXCJnaWxkZXNrYWwubm9cIjp0cnVlLFwieG4tLWdpbGRlc2tsLWcwYS5ub1wiOnRydWUsXCJnaXNrZS5ub1wiOnRydWUsXCJnamVtbmVzLm5vXCI6dHJ1ZSxcImdqZXJkcnVtLm5vXCI6dHJ1ZSxcImdqZXJzdGFkLm5vXCI6dHJ1ZSxcImdqZXNkYWwubm9cIjp0cnVlLFwiZ2pvdmlrLm5vXCI6dHJ1ZSxcInhuLS1nanZpay13dWEubm9cIjp0cnVlLFwiZ2xvcHBlbi5ub1wiOnRydWUsXCJnb2wubm9cIjp0cnVlLFwiZ3Jhbi5ub1wiOnRydWUsXCJncmFuZS5ub1wiOnRydWUsXCJncmFudmluLm5vXCI6dHJ1ZSxcImdyYXRhbmdlbi5ub1wiOnRydWUsXCJncmltc3RhZC5ub1wiOnRydWUsXCJncm9uZy5ub1wiOnRydWUsXCJrcmFhbmdoa2Uubm9cIjp0cnVlLFwieG4tLWtyYW5naGtlLWIwYS5ub1wiOnRydWUsXCJncnVlLm5vXCI6dHJ1ZSxcImd1bGVuLm5vXCI6dHJ1ZSxcImhhZHNlbC5ub1wiOnRydWUsXCJoYWxkZW4ubm9cIjp0cnVlLFwiaGFsc2Eubm9cIjp0cnVlLFwiaGFtYXIubm9cIjp0cnVlLFwiaGFtYXJveS5ub1wiOnRydWUsXCJoYWJtZXIubm9cIjp0cnVlLFwieG4tLWhibWVyLXhxYS5ub1wiOnRydWUsXCJoYXBtaXIubm9cIjp0cnVlLFwieG4tLWhwbWlyLXhxYS5ub1wiOnRydWUsXCJoYW1tZXJmZXN0Lm5vXCI6dHJ1ZSxcImhhbW1hcmZlYXN0YS5ub1wiOnRydWUsXCJ4bi0taG1tcmZlYXN0YS1zNGFjLm5vXCI6dHJ1ZSxcImhhcmFtLm5vXCI6dHJ1ZSxcImhhcmVpZC5ub1wiOnRydWUsXCJoYXJzdGFkLm5vXCI6dHJ1ZSxcImhhc3Zpay5ub1wiOnRydWUsXCJha25vbHVva3RhLm5vXCI6dHJ1ZSxcInhuLS1rb2x1b2t0YS03eWE1N2gubm9cIjp0cnVlLFwiaGF0dGZqZWxsZGFsLm5vXCI6dHJ1ZSxcImFhcmJvcnRlLm5vXCI6dHJ1ZSxcImhhdWdlc3VuZC5ub1wiOnRydWUsXCJoZW1uZS5ub1wiOnRydWUsXCJoZW1uZXMubm9cIjp0cnVlLFwiaGVtc2VkYWwubm9cIjp0cnVlLFwiaGVyb3kubW9yZS1vZy1yb21zZGFsLm5vXCI6dHJ1ZSxcInhuLS1oZXJ5LWlyYS54bi0tbXJlLW9nLXJvbXNkYWwtcXFiLm5vXCI6dHJ1ZSxcImhlcm95Lm5vcmRsYW5kLm5vXCI6dHJ1ZSxcInhuLS1oZXJ5LWlyYS5ub3JkbGFuZC5ub1wiOnRydWUsXCJoaXRyYS5ub1wiOnRydWUsXCJoamFydGRhbC5ub1wiOnRydWUsXCJoamVsbWVsYW5kLm5vXCI6dHJ1ZSxcImhvYm9sLm5vXCI6dHJ1ZSxcInhuLS1ob2JsLWlyYS5ub1wiOnRydWUsXCJob2Yubm9cIjp0cnVlLFwiaG9sLm5vXCI6dHJ1ZSxcImhvbGUubm9cIjp0cnVlLFwiaG9sbWVzdHJhbmQubm9cIjp0cnVlLFwiaG9sdGFsZW4ubm9cIjp0cnVlLFwieG4tLWhvbHRsZW4taHhhLm5vXCI6dHJ1ZSxcImhvcm5pbmRhbC5ub1wiOnRydWUsXCJob3J0ZW4ubm9cIjp0cnVlLFwiaHVyZGFsLm5vXCI6dHJ1ZSxcImh1cnVtLm5vXCI6dHJ1ZSxcImh2YWxlci5ub1wiOnRydWUsXCJoeWxsZXN0YWQubm9cIjp0cnVlLFwiaGFnZWJvc3RhZC5ub1wiOnRydWUsXCJ4bi0taGdlYm9zdGFkLWczYS5ub1wiOnRydWUsXCJob3lhbmdlci5ub1wiOnRydWUsXCJ4bi0taHlhbmdlci1xMWEubm9cIjp0cnVlLFwiaG95bGFuZGV0Lm5vXCI6dHJ1ZSxcInhuLS1oeWxhbmRldC01NGEubm9cIjp0cnVlLFwiaGEubm9cIjp0cnVlLFwieG4tLWgtMmZhLm5vXCI6dHJ1ZSxcImliZXN0YWQubm9cIjp0cnVlLFwiaW5kZXJveS5ub1wiOnRydWUsXCJ4bi0taW5kZXJ5LWZ5YS5ub1wiOnRydWUsXCJpdmVsYW5kLm5vXCI6dHJ1ZSxcImpldm5ha2VyLm5vXCI6dHJ1ZSxcImpvbmRhbC5ub1wiOnRydWUsXCJqb2xzdGVyLm5vXCI6dHJ1ZSxcInhuLS1qbHN0ZXItYnlhLm5vXCI6dHJ1ZSxcImthcmFzam9rLm5vXCI6dHJ1ZSxcImthcmFzam9oa2Eubm9cIjp0cnVlLFwieG4tLWtyam9oa2EtaHdhYjQ5ai5ub1wiOnRydWUsXCJrYXJsc295Lm5vXCI6dHJ1ZSxcImdhbHNhLm5vXCI6dHJ1ZSxcInhuLS1nbHMtZWxhYy5ub1wiOnRydWUsXCJrYXJtb3kubm9cIjp0cnVlLFwieG4tLWthcm15LXl1YS5ub1wiOnRydWUsXCJrYXV0b2tlaW5vLm5vXCI6dHJ1ZSxcImd1b3ZkYWdlYWlkbnUubm9cIjp0cnVlLFwia2xlcHAubm9cIjp0cnVlLFwia2xhYnUubm9cIjp0cnVlLFwieG4tLWtsYnUtd29hLm5vXCI6dHJ1ZSxcImtvbmdzYmVyZy5ub1wiOnRydWUsXCJrb25nc3Zpbmdlci5ub1wiOnRydWUsXCJrcmFnZXJvLm5vXCI6dHJ1ZSxcInhuLS1rcmFnZXItZ3lhLm5vXCI6dHJ1ZSxcImtyaXN0aWFuc2FuZC5ub1wiOnRydWUsXCJrcmlzdGlhbnN1bmQubm9cIjp0cnVlLFwia3JvZHNoZXJhZC5ub1wiOnRydWUsXCJ4bi0ta3Jkc2hlcmFkLW04YS5ub1wiOnRydWUsXCJrdmFsc3VuZC5ub1wiOnRydWUsXCJyYWhra2VyYXZqdS5ub1wiOnRydWUsXCJ4bi0tcmhra2Vydmp1LTAxYWYubm9cIjp0cnVlLFwia3ZhbS5ub1wiOnRydWUsXCJrdmluZXNkYWwubm9cIjp0cnVlLFwia3Zpbm5oZXJhZC5ub1wiOnRydWUsXCJrdml0ZXNlaWQubm9cIjp0cnVlLFwia3ZpdHNveS5ub1wiOnRydWUsXCJ4bi0ta3ZpdHN5LWZ5YS5ub1wiOnRydWUsXCJrdmFmam9yZC5ub1wiOnRydWUsXCJ4bi0ta3Zmam9yZC1ueGEubm9cIjp0cnVlLFwiZ2llaHRhdnVvYXRuYS5ub1wiOnRydWUsXCJrdmFuYW5nZW4ubm9cIjp0cnVlLFwieG4tLWt2bmFuZ2VuLWswYS5ub1wiOnRydWUsXCJuYXZ1b3RuYS5ub1wiOnRydWUsXCJ4bi0tbnZ1b3RuYS1od2Eubm9cIjp0cnVlLFwia2Fmam9yZC5ub1wiOnRydWUsXCJ4bi0ta2Zqb3JkLWl1YS5ub1wiOnRydWUsXCJnYWl2dW90bmEubm9cIjp0cnVlLFwieG4tLWdpdnVvdG5hLTh5YS5ub1wiOnRydWUsXCJsYXJ2aWsubm9cIjp0cnVlLFwibGF2YW5nZW4ubm9cIjp0cnVlLFwibGF2YWdpcy5ub1wiOnRydWUsXCJsb2FiYXQubm9cIjp0cnVlLFwieG4tLWxvYWJ0LTBxYS5ub1wiOnRydWUsXCJsZWJlc2J5Lm5vXCI6dHJ1ZSxcImRhdnZlc2lpZGEubm9cIjp0cnVlLFwibGVpa2FuZ2VyLm5vXCI6dHJ1ZSxcImxlaXJmam9yZC5ub1wiOnRydWUsXCJsZWthLm5vXCI6dHJ1ZSxcImxla3N2aWsubm9cIjp0cnVlLFwibGVudmlrLm5vXCI6dHJ1ZSxcImxlYW5nYXZpaWthLm5vXCI6dHJ1ZSxcInhuLS1sZWFnYXZpaWthLTUyYi5ub1wiOnRydWUsXCJsZXNqYS5ub1wiOnRydWUsXCJsZXZhbmdlci5ub1wiOnRydWUsXCJsaWVyLm5vXCI6dHJ1ZSxcImxpZXJuZS5ub1wiOnRydWUsXCJsaWxsZWhhbW1lci5ub1wiOnRydWUsXCJsaWxsZXNhbmQubm9cIjp0cnVlLFwibGluZGVzbmVzLm5vXCI6dHJ1ZSxcImxpbmRhcy5ub1wiOnRydWUsXCJ4bi0tbGluZHMtcHJhLm5vXCI6dHJ1ZSxcImxvbS5ub1wiOnRydWUsXCJsb3BwYS5ub1wiOnRydWUsXCJsYWhwcGkubm9cIjp0cnVlLFwieG4tLWxocHBpLXhxYS5ub1wiOnRydWUsXCJsdW5kLm5vXCI6dHJ1ZSxcImx1bm5lci5ub1wiOnRydWUsXCJsdXJveS5ub1wiOnRydWUsXCJ4bi0tbHVyeS1pcmEubm9cIjp0cnVlLFwibHVzdGVyLm5vXCI6dHJ1ZSxcImx5bmdkYWwubm9cIjp0cnVlLFwibHluZ2VuLm5vXCI6dHJ1ZSxcIml2Z3Uubm9cIjp0cnVlLFwibGFyZGFsLm5vXCI6dHJ1ZSxcImxlcmRhbC5ub1wiOnRydWUsXCJ4bi0tbHJkYWwtc3JhLm5vXCI6dHJ1ZSxcImxvZGluZ2VuLm5vXCI6dHJ1ZSxcInhuLS1sZGluZ2VuLXExYS5ub1wiOnRydWUsXCJsb3JlbnNrb2cubm9cIjp0cnVlLFwieG4tLWxyZW5za29nLTU0YS5ub1wiOnRydWUsXCJsb3Rlbi5ub1wiOnRydWUsXCJ4bi0tbHRlbi1ncmEubm9cIjp0cnVlLFwibWFsdmlrLm5vXCI6dHJ1ZSxcIm1hc295Lm5vXCI6dHJ1ZSxcInhuLS1tc3ktdWxhMGgubm9cIjp0cnVlLFwibXVvc2F0Lm5vXCI6dHJ1ZSxcInhuLS1tdW9zdC0wcWEubm9cIjp0cnVlLFwibWFuZGFsLm5vXCI6dHJ1ZSxcIm1hcmtlci5ub1wiOnRydWUsXCJtYXJuYXJkYWwubm9cIjp0cnVlLFwibWFzZmpvcmRlbi5ub1wiOnRydWUsXCJtZWxhbmQubm9cIjp0cnVlLFwibWVsZGFsLm5vXCI6dHJ1ZSxcIm1lbGh1cy5ub1wiOnRydWUsXCJtZWxveS5ub1wiOnRydWUsXCJ4bi0tbWVseS1pcmEubm9cIjp0cnVlLFwibWVyYWtlci5ub1wiOnRydWUsXCJ4bi0tbWVya2VyLWt1YS5ub1wiOnRydWUsXCJtb2FyZWtlLm5vXCI6dHJ1ZSxcInhuLS1tb3Jla2UtanVhLm5vXCI6dHJ1ZSxcIm1pZHN1bmQubm9cIjp0cnVlLFwibWlkdHJlLWdhdWxkYWwubm9cIjp0cnVlLFwibW9kYWxlbi5ub1wiOnRydWUsXCJtb2R1bS5ub1wiOnRydWUsXCJtb2xkZS5ub1wiOnRydWUsXCJtb3NrZW5lcy5ub1wiOnRydWUsXCJtb3NzLm5vXCI6dHJ1ZSxcIm1vc3Zpay5ub1wiOnRydWUsXCJtYWxzZWx2Lm5vXCI6dHJ1ZSxcInhuLS1tbHNlbHYtaXVhLm5vXCI6dHJ1ZSxcIm1hbGF0dnVvcG1pLm5vXCI6dHJ1ZSxcInhuLS1tbGF0dnVvcG1pLXM0YS5ub1wiOnRydWUsXCJuYW1kYWxzZWlkLm5vXCI6dHJ1ZSxcImFlanJpZS5ub1wiOnRydWUsXCJuYW1zb3Mubm9cIjp0cnVlLFwibmFtc3Nrb2dhbi5ub1wiOnRydWUsXCJuYWFtZXNqZXZ1ZW1pZS5ub1wiOnRydWUsXCJ4bi0tbm1lc2pldnVlbWllLXRjYmEubm9cIjp0cnVlLFwibGFha2VzdnVlbWllLm5vXCI6dHJ1ZSxcIm5hbm5lc3RhZC5ub1wiOnRydWUsXCJuYXJ2aWsubm9cIjp0cnVlLFwibmFydmlpa2Eubm9cIjp0cnVlLFwibmF1c3RkYWwubm9cIjp0cnVlLFwibmVkcmUtZWlrZXIubm9cIjp0cnVlLFwibmVzLmFrZXJzaHVzLm5vXCI6dHJ1ZSxcIm5lcy5idXNrZXJ1ZC5ub1wiOnRydWUsXCJuZXNuYS5ub1wiOnRydWUsXCJuZXNvZGRlbi5ub1wiOnRydWUsXCJuZXNzZWJ5Lm5vXCI6dHJ1ZSxcInVuamFyZ2Eubm9cIjp0cnVlLFwieG4tLXVuanJnYS1ydGEubm9cIjp0cnVlLFwibmVzc2V0Lm5vXCI6dHJ1ZSxcIm5pc3NlZGFsLm5vXCI6dHJ1ZSxcIm5pdHRlZGFsLm5vXCI6dHJ1ZSxcIm5vcmQtYXVyZGFsLm5vXCI6dHJ1ZSxcIm5vcmQtZnJvbi5ub1wiOnRydWUsXCJub3JkLW9kYWwubm9cIjp0cnVlLFwibm9yZGRhbC5ub1wiOnRydWUsXCJub3Jka2FwcC5ub1wiOnRydWUsXCJkYXZ2ZW5qYXJnYS5ub1wiOnRydWUsXCJ4bi0tZGF2dmVuanJnYS15NGEubm9cIjp0cnVlLFwibm9yZHJlLWxhbmQubm9cIjp0cnVlLFwibm9yZHJlaXNhLm5vXCI6dHJ1ZSxcInJhaXNhLm5vXCI6dHJ1ZSxcInhuLS1yaXNhLTVuYS5ub1wiOnRydWUsXCJub3JlLW9nLXV2ZGFsLm5vXCI6dHJ1ZSxcIm5vdG9kZGVuLm5vXCI6dHJ1ZSxcIm5hcm95Lm5vXCI6dHJ1ZSxcInhuLS1ucnkteWxhNWcubm9cIjp0cnVlLFwibm90dGVyb3kubm9cIjp0cnVlLFwieG4tLW50dGVyeS1ieWFlLm5vXCI6dHJ1ZSxcIm9kZGEubm9cIjp0cnVlLFwib2tzbmVzLm5vXCI6dHJ1ZSxcInhuLS1rc25lcy11dWEubm9cIjp0cnVlLFwib3BwZGFsLm5vXCI6dHJ1ZSxcIm9wcGVnYXJkLm5vXCI6dHJ1ZSxcInhuLS1vcHBlZ3JkLWl4YS5ub1wiOnRydWUsXCJvcmtkYWwubm9cIjp0cnVlLFwib3JsYW5kLm5vXCI6dHJ1ZSxcInhuLS1ybGFuZC11dWEubm9cIjp0cnVlLFwib3Jza29nLm5vXCI6dHJ1ZSxcInhuLS1yc2tvZy11dWEubm9cIjp0cnVlLFwib3JzdGEubm9cIjp0cnVlLFwieG4tLXJzdGEtZnJhLm5vXCI6dHJ1ZSxcIm9zLmhlZG1hcmsubm9cIjp0cnVlLFwib3MuaG9yZGFsYW5kLm5vXCI6dHJ1ZSxcIm9zZW4ubm9cIjp0cnVlLFwib3N0ZXJveS5ub1wiOnRydWUsXCJ4bi0tb3N0ZXJ5LWZ5YS5ub1wiOnRydWUsXCJvc3RyZS10b3Rlbi5ub1wiOnRydWUsXCJ4bi0tc3RyZS10b3Rlbi16Y2Iubm9cIjp0cnVlLFwib3ZlcmhhbGxhLm5vXCI6dHJ1ZSxcIm92cmUtZWlrZXIubm9cIjp0cnVlLFwieG4tLXZyZS1laWtlci1rOGEubm9cIjp0cnVlLFwib3llci5ub1wiOnRydWUsXCJ4bi0teWVyLXpuYS5ub1wiOnRydWUsXCJveWdhcmRlbi5ub1wiOnRydWUsXCJ4bi0teWdhcmRlbi1wMWEubm9cIjp0cnVlLFwib3lzdHJlLXNsaWRyZS5ub1wiOnRydWUsXCJ4bi0teXN0cmUtc2xpZHJlLXVqYi5ub1wiOnRydWUsXCJwb3JzYW5nZXIubm9cIjp0cnVlLFwicG9yc2FuZ3Uubm9cIjp0cnVlLFwieG4tLXBvcnNndS1zdGEyNmYubm9cIjp0cnVlLFwicG9yc2dydW5uLm5vXCI6dHJ1ZSxcInJhZG95Lm5vXCI6dHJ1ZSxcInhuLS1yYWR5LWlyYS5ub1wiOnRydWUsXCJyYWtrZXN0YWQubm9cIjp0cnVlLFwicmFuYS5ub1wiOnRydWUsXCJydW92YXQubm9cIjp0cnVlLFwicmFuZGFiZXJnLm5vXCI6dHJ1ZSxcInJhdW1hLm5vXCI6dHJ1ZSxcInJlbmRhbGVuLm5vXCI6dHJ1ZSxcInJlbm5lYnUubm9cIjp0cnVlLFwicmVubmVzb3kubm9cIjp0cnVlLFwieG4tLXJlbm5lc3ktdjFhLm5vXCI6dHJ1ZSxcInJpbmRhbC5ub1wiOnRydWUsXCJyaW5nZWJ1Lm5vXCI6dHJ1ZSxcInJpbmdlcmlrZS5ub1wiOnRydWUsXCJyaW5nc2FrZXIubm9cIjp0cnVlLFwicmlzc2Eubm9cIjp0cnVlLFwicmlzb3Iubm9cIjp0cnVlLFwieG4tLXJpc3ItaXJhLm5vXCI6dHJ1ZSxcInJvYW4ubm9cIjp0cnVlLFwicm9sbGFnLm5vXCI6dHJ1ZSxcInJ5Z2dlLm5vXCI6dHJ1ZSxcInJhbGluZ2VuLm5vXCI6dHJ1ZSxcInhuLS1ybGluZ2VuLW14YS5ub1wiOnRydWUsXCJyb2RveS5ub1wiOnRydWUsXCJ4bi0tcmR5LTBuYWIubm9cIjp0cnVlLFwicm9tc2tvZy5ub1wiOnRydWUsXCJ4bi0tcm1za29nLWJ5YS5ub1wiOnRydWUsXCJyb3Jvcy5ub1wiOnRydWUsXCJ4bi0tcnJvcy1ncmEubm9cIjp0cnVlLFwicm9zdC5ub1wiOnRydWUsXCJ4bi0tcnN0LTBuYS5ub1wiOnRydWUsXCJyb3lrZW4ubm9cIjp0cnVlLFwieG4tLXJ5a2VuLXZ1YS5ub1wiOnRydWUsXCJyb3lydmlrLm5vXCI6dHJ1ZSxcInhuLS1yeXJ2aWstYnlhLm5vXCI6dHJ1ZSxcInJhZGUubm9cIjp0cnVlLFwieG4tLXJkZS11bGEubm9cIjp0cnVlLFwic2FsYW5nZW4ubm9cIjp0cnVlLFwic2llbGxhay5ub1wiOnRydWUsXCJzYWx0ZGFsLm5vXCI6dHJ1ZSxcInNhbGF0Lm5vXCI6dHJ1ZSxcInhuLS1zbHQtZWxhYi5ub1wiOnRydWUsXCJ4bi0tc2xhdC01bmEubm9cIjp0cnVlLFwic2FtbmFuZ2VyLm5vXCI6dHJ1ZSxcInNhbmRlLm1vcmUtb2ctcm9tc2RhbC5ub1wiOnRydWUsXCJzYW5kZS54bi0tbXJlLW9nLXJvbXNkYWwtcXFiLm5vXCI6dHJ1ZSxcInNhbmRlLnZlc3Rmb2xkLm5vXCI6dHJ1ZSxcInNhbmRlZmpvcmQubm9cIjp0cnVlLFwic2FuZG5lcy5ub1wiOnRydWUsXCJzYW5kb3kubm9cIjp0cnVlLFwieG4tLXNhbmR5LXl1YS5ub1wiOnRydWUsXCJzYXJwc2Jvcmcubm9cIjp0cnVlLFwic2F1ZGEubm9cIjp0cnVlLFwic2F1aGVyYWQubm9cIjp0cnVlLFwic2VsLm5vXCI6dHJ1ZSxcInNlbGJ1Lm5vXCI6dHJ1ZSxcInNlbGplLm5vXCI6dHJ1ZSxcInNlbGpvcmQubm9cIjp0cnVlLFwic2lnZGFsLm5vXCI6dHJ1ZSxcInNpbGphbi5ub1wiOnRydWUsXCJzaXJkYWwubm9cIjp0cnVlLFwic2thdW4ubm9cIjp0cnVlLFwic2tlZHNtby5ub1wiOnRydWUsXCJza2kubm9cIjp0cnVlLFwic2tpZW4ubm9cIjp0cnVlLFwic2tpcHR2ZXQubm9cIjp0cnVlLFwic2tqZXJ2b3kubm9cIjp0cnVlLFwieG4tLXNramVydnktdjFhLm5vXCI6dHJ1ZSxcInNraWVydmEubm9cIjp0cnVlLFwieG4tLXNraWVydi11dGEubm9cIjp0cnVlLFwic2tqYWsubm9cIjp0cnVlLFwieG4tLXNramstc29hLm5vXCI6dHJ1ZSxcInNrb2RqZS5ub1wiOnRydWUsXCJza2FubGFuZC5ub1wiOnRydWUsXCJ4bi0tc2tubGFuZC1meGEubm9cIjp0cnVlLFwic2thbml0Lm5vXCI6dHJ1ZSxcInhuLS1za25pdC15cWEubm9cIjp0cnVlLFwic21vbGEubm9cIjp0cnVlLFwieG4tLXNtbGEtaHJhLm5vXCI6dHJ1ZSxcInNuaWxsZmpvcmQubm9cIjp0cnVlLFwic25hc2Eubm9cIjp0cnVlLFwieG4tLXNuc2Etcm9hLm5vXCI6dHJ1ZSxcInNub2FzYS5ub1wiOnRydWUsXCJzbmFhc2Uubm9cIjp0cnVlLFwieG4tLXNuYXNlLW5yYS5ub1wiOnRydWUsXCJzb2duZGFsLm5vXCI6dHJ1ZSxcInNva25kYWwubm9cIjp0cnVlLFwic29sYS5ub1wiOnRydWUsXCJzb2x1bmQubm9cIjp0cnVlLFwic29uZ2RhbGVuLm5vXCI6dHJ1ZSxcInNvcnRsYW5kLm5vXCI6dHJ1ZSxcInNweWRlYmVyZy5ub1wiOnRydWUsXCJzdGFuZ2Uubm9cIjp0cnVlLFwic3RhdmFuZ2VyLm5vXCI6dHJ1ZSxcInN0ZWlnZW4ubm9cIjp0cnVlLFwic3RlaW5ramVyLm5vXCI6dHJ1ZSxcInN0am9yZGFsLm5vXCI6dHJ1ZSxcInhuLS1zdGpyZGFsLXMxYS5ub1wiOnRydWUsXCJzdG9ra2Uubm9cIjp0cnVlLFwic3Rvci1lbHZkYWwubm9cIjp0cnVlLFwic3RvcmQubm9cIjp0cnVlLFwic3RvcmRhbC5ub1wiOnRydWUsXCJzdG9yZmpvcmQubm9cIjp0cnVlLFwib21hc3Z1b3RuYS5ub1wiOnRydWUsXCJzdHJhbmQubm9cIjp0cnVlLFwic3RyYW5kYS5ub1wiOnRydWUsXCJzdHJ5bi5ub1wiOnRydWUsXCJzdWxhLm5vXCI6dHJ1ZSxcInN1bGRhbC5ub1wiOnRydWUsXCJzdW5kLm5vXCI6dHJ1ZSxcInN1bm5kYWwubm9cIjp0cnVlLFwic3VybmFkYWwubm9cIjp0cnVlLFwic3ZlaW8ubm9cIjp0cnVlLFwic3ZlbHZpay5ub1wiOnRydWUsXCJzeWtreWx2ZW4ubm9cIjp0cnVlLFwic29nbmUubm9cIjp0cnVlLFwieG4tLXNnbmUtZ3JhLm5vXCI6dHJ1ZSxcInNvbW5hLm5vXCI6dHJ1ZSxcInhuLS1zbW5hLWdyYS5ub1wiOnRydWUsXCJzb25kcmUtbGFuZC5ub1wiOnRydWUsXCJ4bi0tc25kcmUtbGFuZC0wY2Iubm9cIjp0cnVlLFwic29yLWF1cmRhbC5ub1wiOnRydWUsXCJ4bi0tc3ItYXVyZGFsLWw4YS5ub1wiOnRydWUsXCJzb3ItZnJvbi5ub1wiOnRydWUsXCJ4bi0tc3ItZnJvbi1xMWEubm9cIjp0cnVlLFwic29yLW9kYWwubm9cIjp0cnVlLFwieG4tLXNyLW9kYWwtcTFhLm5vXCI6dHJ1ZSxcInNvci12YXJhbmdlci5ub1wiOnRydWUsXCJ4bi0tc3ItdmFyYW5nZXItZ2diLm5vXCI6dHJ1ZSxcIm1hdHRhLXZhcmpqYXQubm9cIjp0cnVlLFwieG4tLW10dGEtdnJqamF0LWs3YWYubm9cIjp0cnVlLFwic29yZm9sZC5ub1wiOnRydWUsXCJ4bi0tc3Jmb2xkLWJ5YS5ub1wiOnRydWUsXCJzb3JyZWlzYS5ub1wiOnRydWUsXCJ4bi0tc3JyZWlzYS1xMWEubm9cIjp0cnVlLFwic29ydW0ubm9cIjp0cnVlLFwieG4tLXNydW0tZ3JhLm5vXCI6dHJ1ZSxcInRhbmEubm9cIjp0cnVlLFwiZGVhdG51Lm5vXCI6dHJ1ZSxcInRpbWUubm9cIjp0cnVlLFwidGluZ3ZvbGwubm9cIjp0cnVlLFwidGlubi5ub1wiOnRydWUsXCJ0amVsZHN1bmQubm9cIjp0cnVlLFwiZGllbGRkYW51b3JyaS5ub1wiOnRydWUsXCJ0am9tZS5ub1wiOnRydWUsXCJ4bi0tdGptZS1ocmEubm9cIjp0cnVlLFwidG9ra2Uubm9cIjp0cnVlLFwidG9sZ2Eubm9cIjp0cnVlLFwidG9yc2tlbi5ub1wiOnRydWUsXCJ0cmFub3kubm9cIjp0cnVlLFwieG4tLXRyYW55LXl1YS5ub1wiOnRydWUsXCJ0cm9tc28ubm9cIjp0cnVlLFwieG4tLXRyb21zLXp1YS5ub1wiOnRydWUsXCJ0cm9tc2Eubm9cIjp0cnVlLFwicm9tc2Eubm9cIjp0cnVlLFwidHJvbmRoZWltLm5vXCI6dHJ1ZSxcInRyb2FuZGluLm5vXCI6dHJ1ZSxcInRyeXNpbC5ub1wiOnRydWUsXCJ0cmFuYS5ub1wiOnRydWUsXCJ4bi0tdHJuYS13b2Eubm9cIjp0cnVlLFwidHJvZ3N0YWQubm9cIjp0cnVlLFwieG4tLXRyZ3N0YWQtcjFhLm5vXCI6dHJ1ZSxcInR2ZWRlc3RyYW5kLm5vXCI6dHJ1ZSxcInR5ZGFsLm5vXCI6dHJ1ZSxcInR5bnNldC5ub1wiOnRydWUsXCJ0eXNmam9yZC5ub1wiOnRydWUsXCJkaXZ0YXN2dW9kbmEubm9cIjp0cnVlLFwiZGl2dHRhc3Z1b3RuYS5ub1wiOnRydWUsXCJ0eXNuZXMubm9cIjp0cnVlLFwidHlzdmFyLm5vXCI6dHJ1ZSxcInhuLS10eXN2ci12cmEubm9cIjp0cnVlLFwidG9uc2Jlcmcubm9cIjp0cnVlLFwieG4tLXRuc2JlcmctcTFhLm5vXCI6dHJ1ZSxcInVsbGVuc2FrZXIubm9cIjp0cnVlLFwidWxsZW5zdmFuZy5ub1wiOnRydWUsXCJ1bHZpay5ub1wiOnRydWUsXCJ1dHNpcmEubm9cIjp0cnVlLFwidmFkc28ubm9cIjp0cnVlLFwieG4tLXZhZHMtanJhLm5vXCI6dHJ1ZSxcImNhaGNlc3VvbG8ubm9cIjp0cnVlLFwieG4tLWhjZXN1b2xvLTd5YTM1Yi5ub1wiOnRydWUsXCJ2YWtzZGFsLm5vXCI6dHJ1ZSxcInZhbGxlLm5vXCI6dHJ1ZSxcInZhbmcubm9cIjp0cnVlLFwidmFueWx2ZW4ubm9cIjp0cnVlLFwidmFyZG8ubm9cIjp0cnVlLFwieG4tLXZhcmQtanJhLm5vXCI6dHJ1ZSxcInZhcmdnYXQubm9cIjp0cnVlLFwieG4tLXZyZ2d0LXhxYWQubm9cIjp0cnVlLFwidmVmc24ubm9cIjp0cnVlLFwidmFhcHN0ZS5ub1wiOnRydWUsXCJ2ZWdhLm5vXCI6dHJ1ZSxcInZlZ2Fyc2hlaS5ub1wiOnRydWUsXCJ4bi0tdmVncnNoZWktYzBhLm5vXCI6dHJ1ZSxcInZlbm5lc2xhLm5vXCI6dHJ1ZSxcInZlcmRhbC5ub1wiOnRydWUsXCJ2ZXJyYW4ubm9cIjp0cnVlLFwidmVzdGJ5Lm5vXCI6dHJ1ZSxcInZlc3RuZXMubm9cIjp0cnVlLFwidmVzdHJlLXNsaWRyZS5ub1wiOnRydWUsXCJ2ZXN0cmUtdG90ZW4ubm9cIjp0cnVlLFwidmVzdHZhZ295Lm5vXCI6dHJ1ZSxcInhuLS12ZXN0dmd5LWl4YTZvLm5vXCI6dHJ1ZSxcInZldmVsc3RhZC5ub1wiOnRydWUsXCJ2aWsubm9cIjp0cnVlLFwidmlrbmEubm9cIjp0cnVlLFwidmluZGFmam9yZC5ub1wiOnRydWUsXCJ2b2xkYS5ub1wiOnRydWUsXCJ2b3NzLm5vXCI6dHJ1ZSxcInZhcm95Lm5vXCI6dHJ1ZSxcInhuLS12cnkteWxhNWcubm9cIjp0cnVlLFwidmFnYW4ubm9cIjp0cnVlLFwieG4tLXZnYW4tcW9hLm5vXCI6dHJ1ZSxcInZvYWdhdC5ub1wiOnRydWUsXCJ2YWdzb3kubm9cIjp0cnVlLFwieG4tLXZnc3ktcW9hMGoubm9cIjp0cnVlLFwidmFnYS5ub1wiOnRydWUsXCJ4bi0tdmcteWlhYi5ub1wiOnRydWUsXCJ2YWxlci5vc3Rmb2xkLm5vXCI6dHJ1ZSxcInhuLS12bGVyLXFvYS54bi0tc3Rmb2xkLTl4YS5ub1wiOnRydWUsXCJ2YWxlci5oZWRtYXJrLm5vXCI6dHJ1ZSxcInhuLS12bGVyLXFvYS5oZWRtYXJrLm5vXCI6dHJ1ZSxcIioubnBcIjp0cnVlLFwibnJcIjp0cnVlLFwiYml6Lm5yXCI6dHJ1ZSxcImluZm8ubnJcIjp0cnVlLFwiZ292Lm5yXCI6dHJ1ZSxcImVkdS5uclwiOnRydWUsXCJvcmcubnJcIjp0cnVlLFwibmV0Lm5yXCI6dHJ1ZSxcImNvbS5uclwiOnRydWUsXCJudVwiOnRydWUsXCJuelwiOnRydWUsXCJhYy5uelwiOnRydWUsXCJjby5uelwiOnRydWUsXCJjcmkubnpcIjp0cnVlLFwiZ2Vlay5uelwiOnRydWUsXCJnZW4ubnpcIjp0cnVlLFwiZ292dC5uelwiOnRydWUsXCJoZWFsdGgubnpcIjp0cnVlLFwiaXdpLm56XCI6dHJ1ZSxcImtpd2kubnpcIjp0cnVlLFwibWFvcmkubnpcIjp0cnVlLFwibWlsLm56XCI6dHJ1ZSxcInhuLS1tb3JpLXFzYS5uelwiOnRydWUsXCJuZXQubnpcIjp0cnVlLFwib3JnLm56XCI6dHJ1ZSxcInBhcmxpYW1lbnQubnpcIjp0cnVlLFwic2Nob29sLm56XCI6dHJ1ZSxcIm9tXCI6dHJ1ZSxcImNvLm9tXCI6dHJ1ZSxcImNvbS5vbVwiOnRydWUsXCJlZHUub21cIjp0cnVlLFwiZ292Lm9tXCI6dHJ1ZSxcIm1lZC5vbVwiOnRydWUsXCJtdXNldW0ub21cIjp0cnVlLFwibmV0Lm9tXCI6dHJ1ZSxcIm9yZy5vbVwiOnRydWUsXCJwcm8ub21cIjp0cnVlLFwib3JnXCI6dHJ1ZSxcInBhXCI6dHJ1ZSxcImFjLnBhXCI6dHJ1ZSxcImdvYi5wYVwiOnRydWUsXCJjb20ucGFcIjp0cnVlLFwib3JnLnBhXCI6dHJ1ZSxcInNsZC5wYVwiOnRydWUsXCJlZHUucGFcIjp0cnVlLFwibmV0LnBhXCI6dHJ1ZSxcImluZy5wYVwiOnRydWUsXCJhYm8ucGFcIjp0cnVlLFwibWVkLnBhXCI6dHJ1ZSxcIm5vbS5wYVwiOnRydWUsXCJwZVwiOnRydWUsXCJlZHUucGVcIjp0cnVlLFwiZ29iLnBlXCI6dHJ1ZSxcIm5vbS5wZVwiOnRydWUsXCJtaWwucGVcIjp0cnVlLFwib3JnLnBlXCI6dHJ1ZSxcImNvbS5wZVwiOnRydWUsXCJuZXQucGVcIjp0cnVlLFwicGZcIjp0cnVlLFwiY29tLnBmXCI6dHJ1ZSxcIm9yZy5wZlwiOnRydWUsXCJlZHUucGZcIjp0cnVlLFwiKi5wZ1wiOnRydWUsXCJwaFwiOnRydWUsXCJjb20ucGhcIjp0cnVlLFwibmV0LnBoXCI6dHJ1ZSxcIm9yZy5waFwiOnRydWUsXCJnb3YucGhcIjp0cnVlLFwiZWR1LnBoXCI6dHJ1ZSxcIm5nby5waFwiOnRydWUsXCJtaWwucGhcIjp0cnVlLFwiaS5waFwiOnRydWUsXCJwa1wiOnRydWUsXCJjb20ucGtcIjp0cnVlLFwibmV0LnBrXCI6dHJ1ZSxcImVkdS5wa1wiOnRydWUsXCJvcmcucGtcIjp0cnVlLFwiZmFtLnBrXCI6dHJ1ZSxcImJpei5wa1wiOnRydWUsXCJ3ZWIucGtcIjp0cnVlLFwiZ292LnBrXCI6dHJ1ZSxcImdvYi5wa1wiOnRydWUsXCJnb2sucGtcIjp0cnVlLFwiZ29uLnBrXCI6dHJ1ZSxcImdvcC5wa1wiOnRydWUsXCJnb3MucGtcIjp0cnVlLFwiaW5mby5wa1wiOnRydWUsXCJwbFwiOnRydWUsXCJjb20ucGxcIjp0cnVlLFwibmV0LnBsXCI6dHJ1ZSxcIm9yZy5wbFwiOnRydWUsXCJhaWQucGxcIjp0cnVlLFwiYWdyby5wbFwiOnRydWUsXCJhdG0ucGxcIjp0cnVlLFwiYXV0by5wbFwiOnRydWUsXCJiaXoucGxcIjp0cnVlLFwiZWR1LnBsXCI6dHJ1ZSxcImdtaW5hLnBsXCI6dHJ1ZSxcImdzbS5wbFwiOnRydWUsXCJpbmZvLnBsXCI6dHJ1ZSxcIm1haWwucGxcIjp0cnVlLFwibWlhc3RhLnBsXCI6dHJ1ZSxcIm1lZGlhLnBsXCI6dHJ1ZSxcIm1pbC5wbFwiOnRydWUsXCJuaWVydWNob21vc2NpLnBsXCI6dHJ1ZSxcIm5vbS5wbFwiOnRydWUsXCJwYy5wbFwiOnRydWUsXCJwb3dpYXQucGxcIjp0cnVlLFwicHJpdi5wbFwiOnRydWUsXCJyZWFsZXN0YXRlLnBsXCI6dHJ1ZSxcInJlbC5wbFwiOnRydWUsXCJzZXgucGxcIjp0cnVlLFwic2hvcC5wbFwiOnRydWUsXCJza2xlcC5wbFwiOnRydWUsXCJzb3MucGxcIjp0cnVlLFwic3prb2xhLnBsXCI6dHJ1ZSxcInRhcmdpLnBsXCI6dHJ1ZSxcInRtLnBsXCI6dHJ1ZSxcInRvdXJpc20ucGxcIjp0cnVlLFwidHJhdmVsLnBsXCI6dHJ1ZSxcInR1cnlzdHlrYS5wbFwiOnRydWUsXCJnb3YucGxcIjp0cnVlLFwiYXAuZ292LnBsXCI6dHJ1ZSxcImljLmdvdi5wbFwiOnRydWUsXCJpcy5nb3YucGxcIjp0cnVlLFwidXMuZ292LnBsXCI6dHJ1ZSxcImttcHNwLmdvdi5wbFwiOnRydWUsXCJrcHBzcC5nb3YucGxcIjp0cnVlLFwia3dwc3AuZ292LnBsXCI6dHJ1ZSxcInBzcC5nb3YucGxcIjp0cnVlLFwid3Nrci5nb3YucGxcIjp0cnVlLFwia3dwLmdvdi5wbFwiOnRydWUsXCJtdy5nb3YucGxcIjp0cnVlLFwidWcuZ292LnBsXCI6dHJ1ZSxcInVtLmdvdi5wbFwiOnRydWUsXCJ1bWlnLmdvdi5wbFwiOnRydWUsXCJ1Z2ltLmdvdi5wbFwiOnRydWUsXCJ1cG93Lmdvdi5wbFwiOnRydWUsXCJ1dy5nb3YucGxcIjp0cnVlLFwic3Rhcm9zdHdvLmdvdi5wbFwiOnRydWUsXCJwYS5nb3YucGxcIjp0cnVlLFwicG8uZ292LnBsXCI6dHJ1ZSxcInBzc2UuZ292LnBsXCI6dHJ1ZSxcInB1cC5nb3YucGxcIjp0cnVlLFwicnpndy5nb3YucGxcIjp0cnVlLFwic2EuZ292LnBsXCI6dHJ1ZSxcInNvLmdvdi5wbFwiOnRydWUsXCJzci5nb3YucGxcIjp0cnVlLFwid3NhLmdvdi5wbFwiOnRydWUsXCJza28uZ292LnBsXCI6dHJ1ZSxcInV6cy5nb3YucGxcIjp0cnVlLFwid2lpaC5nb3YucGxcIjp0cnVlLFwid2luYi5nb3YucGxcIjp0cnVlLFwicGluYi5nb3YucGxcIjp0cnVlLFwid2lvcy5nb3YucGxcIjp0cnVlLFwid2l0ZC5nb3YucGxcIjp0cnVlLFwid3ptaXV3Lmdvdi5wbFwiOnRydWUsXCJwaXcuZ292LnBsXCI6dHJ1ZSxcIndpdy5nb3YucGxcIjp0cnVlLFwiZ3Jpdy5nb3YucGxcIjp0cnVlLFwid2lmLmdvdi5wbFwiOnRydWUsXCJvdW0uZ292LnBsXCI6dHJ1ZSxcInNkbi5nb3YucGxcIjp0cnVlLFwienAuZ292LnBsXCI6dHJ1ZSxcInVwcG8uZ292LnBsXCI6dHJ1ZSxcIm11cC5nb3YucGxcIjp0cnVlLFwid3Vvei5nb3YucGxcIjp0cnVlLFwia29uc3VsYXQuZ292LnBsXCI6dHJ1ZSxcIm9pcm0uZ292LnBsXCI6dHJ1ZSxcImF1Z3VzdG93LnBsXCI6dHJ1ZSxcImJhYmlhLWdvcmEucGxcIjp0cnVlLFwiYmVkemluLnBsXCI6dHJ1ZSxcImJlc2tpZHkucGxcIjp0cnVlLFwiYmlhbG93aWV6YS5wbFwiOnRydWUsXCJiaWFseXN0b2sucGxcIjp0cnVlLFwiYmllbGF3YS5wbFwiOnRydWUsXCJiaWVzemN6YWR5LnBsXCI6dHJ1ZSxcImJvbGVzbGF3aWVjLnBsXCI6dHJ1ZSxcImJ5ZGdvc3pjei5wbFwiOnRydWUsXCJieXRvbS5wbFwiOnRydWUsXCJjaWVzenluLnBsXCI6dHJ1ZSxcImN6ZWxhZHoucGxcIjp0cnVlLFwiY3plc3QucGxcIjp0cnVlLFwiZGx1Z29sZWthLnBsXCI6dHJ1ZSxcImVsYmxhZy5wbFwiOnRydWUsXCJlbGsucGxcIjp0cnVlLFwiZ2xvZ293LnBsXCI6dHJ1ZSxcImduaWV6bm8ucGxcIjp0cnVlLFwiZ29ybGljZS5wbFwiOnRydWUsXCJncmFqZXdvLnBsXCI6dHJ1ZSxcImlsYXdhLnBsXCI6dHJ1ZSxcImphd29yem5vLnBsXCI6dHJ1ZSxcImplbGVuaWEtZ29yYS5wbFwiOnRydWUsXCJqZ29yYS5wbFwiOnRydWUsXCJrYWxpc3oucGxcIjp0cnVlLFwia2F6aW1pZXJ6LWRvbG55LnBsXCI6dHJ1ZSxcImthcnBhY3oucGxcIjp0cnVlLFwia2FydHV6eS5wbFwiOnRydWUsXCJrYXN6dWJ5LnBsXCI6dHJ1ZSxcImthdG93aWNlLnBsXCI6dHJ1ZSxcImtlcG5vLnBsXCI6dHJ1ZSxcImtldHJ6eW4ucGxcIjp0cnVlLFwia2xvZHprby5wbFwiOnRydWUsXCJrb2JpZXJ6eWNlLnBsXCI6dHJ1ZSxcImtvbG9icnplZy5wbFwiOnRydWUsXCJrb25pbi5wbFwiOnRydWUsXCJrb25za293b2xhLnBsXCI6dHJ1ZSxcImt1dG5vLnBsXCI6dHJ1ZSxcImxhcHkucGxcIjp0cnVlLFwibGVib3JrLnBsXCI6dHJ1ZSxcImxlZ25pY2EucGxcIjp0cnVlLFwibGV6YWpzay5wbFwiOnRydWUsXCJsaW1hbm93YS5wbFwiOnRydWUsXCJsb216YS5wbFwiOnRydWUsXCJsb3dpY3oucGxcIjp0cnVlLFwibHViaW4ucGxcIjp0cnVlLFwibHVrb3cucGxcIjp0cnVlLFwibWFsYm9yay5wbFwiOnRydWUsXCJtYWxvcG9sc2thLnBsXCI6dHJ1ZSxcIm1hem93c3plLnBsXCI6dHJ1ZSxcIm1henVyeS5wbFwiOnRydWUsXCJtaWVsZWMucGxcIjp0cnVlLFwibWllbG5vLnBsXCI6dHJ1ZSxcIm1yYWdvd28ucGxcIjp0cnVlLFwibmFrbG8ucGxcIjp0cnVlLFwibm93YXJ1ZGEucGxcIjp0cnVlLFwibnlzYS5wbFwiOnRydWUsXCJvbGF3YS5wbFwiOnRydWUsXCJvbGVja28ucGxcIjp0cnVlLFwib2xrdXN6LnBsXCI6dHJ1ZSxcIm9sc3p0eW4ucGxcIjp0cnVlLFwib3BvY3puby5wbFwiOnRydWUsXCJvcG9sZS5wbFwiOnRydWUsXCJvc3Ryb2RhLnBsXCI6dHJ1ZSxcIm9zdHJvbGVrYS5wbFwiOnRydWUsXCJvc3Ryb3dpZWMucGxcIjp0cnVlLFwib3N0cm93d2xrcC5wbFwiOnRydWUsXCJwaWxhLnBsXCI6dHJ1ZSxcInBpc3oucGxcIjp0cnVlLFwicG9kaGFsZS5wbFwiOnRydWUsXCJwb2RsYXNpZS5wbFwiOnRydWUsXCJwb2xrb3dpY2UucGxcIjp0cnVlLFwicG9tb3J6ZS5wbFwiOnRydWUsXCJwb21vcnNraWUucGxcIjp0cnVlLFwicHJvY2hvd2ljZS5wbFwiOnRydWUsXCJwcnVzemtvdy5wbFwiOnRydWUsXCJwcnpld29yc2sucGxcIjp0cnVlLFwicHVsYXd5LnBsXCI6dHJ1ZSxcInJhZG9tLnBsXCI6dHJ1ZSxcInJhd2EtbWF6LnBsXCI6dHJ1ZSxcInJ5Ym5pay5wbFwiOnRydWUsXCJyemVzem93LnBsXCI6dHJ1ZSxcInNhbm9rLnBsXCI6dHJ1ZSxcInNlam55LnBsXCI6dHJ1ZSxcInNsYXNrLnBsXCI6dHJ1ZSxcInNsdXBzay5wbFwiOnRydWUsXCJzb3Nub3dpZWMucGxcIjp0cnVlLFwic3RhbG93YS13b2xhLnBsXCI6dHJ1ZSxcInNrb2N6b3cucGxcIjp0cnVlLFwic3RhcmFjaG93aWNlLnBsXCI6dHJ1ZSxcInN0YXJnYXJkLnBsXCI6dHJ1ZSxcInN1d2Fsa2kucGxcIjp0cnVlLFwic3dpZG5pY2EucGxcIjp0cnVlLFwic3dpZWJvZHppbi5wbFwiOnRydWUsXCJzd2lub3Vqc2NpZS5wbFwiOnRydWUsXCJzemN6ZWNpbi5wbFwiOnRydWUsXCJzemN6eXRuby5wbFwiOnRydWUsXCJ0YXJub2JyemVnLnBsXCI6dHJ1ZSxcInRnb3J5LnBsXCI6dHJ1ZSxcInR1cmVrLnBsXCI6dHJ1ZSxcInR5Y2h5LnBsXCI6dHJ1ZSxcInVzdGthLnBsXCI6dHJ1ZSxcIndhbGJyenljaC5wbFwiOnRydWUsXCJ3YXJtaWEucGxcIjp0cnVlLFwid2Fyc3phd2EucGxcIjp0cnVlLFwid2F3LnBsXCI6dHJ1ZSxcIndlZ3Jvdy5wbFwiOnRydWUsXCJ3aWVsdW4ucGxcIjp0cnVlLFwid2xvY2wucGxcIjp0cnVlLFwid2xvY2xhd2VrLnBsXCI6dHJ1ZSxcIndvZHppc2xhdy5wbFwiOnRydWUsXCJ3b2xvbWluLnBsXCI6dHJ1ZSxcIndyb2NsYXcucGxcIjp0cnVlLFwiemFjaHBvbW9yLnBsXCI6dHJ1ZSxcInphZ2FuLnBsXCI6dHJ1ZSxcInphcm93LnBsXCI6dHJ1ZSxcInpnb3JhLnBsXCI6dHJ1ZSxcInpnb3J6ZWxlYy5wbFwiOnRydWUsXCJwbVwiOnRydWUsXCJwblwiOnRydWUsXCJnb3YucG5cIjp0cnVlLFwiY28ucG5cIjp0cnVlLFwib3JnLnBuXCI6dHJ1ZSxcImVkdS5wblwiOnRydWUsXCJuZXQucG5cIjp0cnVlLFwicG9zdFwiOnRydWUsXCJwclwiOnRydWUsXCJjb20ucHJcIjp0cnVlLFwibmV0LnByXCI6dHJ1ZSxcIm9yZy5wclwiOnRydWUsXCJnb3YucHJcIjp0cnVlLFwiZWR1LnByXCI6dHJ1ZSxcImlzbGEucHJcIjp0cnVlLFwicHJvLnByXCI6dHJ1ZSxcImJpei5wclwiOnRydWUsXCJpbmZvLnByXCI6dHJ1ZSxcIm5hbWUucHJcIjp0cnVlLFwiZXN0LnByXCI6dHJ1ZSxcInByb2YucHJcIjp0cnVlLFwiYWMucHJcIjp0cnVlLFwicHJvXCI6dHJ1ZSxcImFjYS5wcm9cIjp0cnVlLFwiYmFyLnByb1wiOnRydWUsXCJjcGEucHJvXCI6dHJ1ZSxcImp1ci5wcm9cIjp0cnVlLFwibGF3LnByb1wiOnRydWUsXCJtZWQucHJvXCI6dHJ1ZSxcImVuZy5wcm9cIjp0cnVlLFwicHNcIjp0cnVlLFwiZWR1LnBzXCI6dHJ1ZSxcImdvdi5wc1wiOnRydWUsXCJzZWMucHNcIjp0cnVlLFwicGxvLnBzXCI6dHJ1ZSxcImNvbS5wc1wiOnRydWUsXCJvcmcucHNcIjp0cnVlLFwibmV0LnBzXCI6dHJ1ZSxcInB0XCI6dHJ1ZSxcIm5ldC5wdFwiOnRydWUsXCJnb3YucHRcIjp0cnVlLFwib3JnLnB0XCI6dHJ1ZSxcImVkdS5wdFwiOnRydWUsXCJpbnQucHRcIjp0cnVlLFwicHVibC5wdFwiOnRydWUsXCJjb20ucHRcIjp0cnVlLFwibm9tZS5wdFwiOnRydWUsXCJwd1wiOnRydWUsXCJjby5wd1wiOnRydWUsXCJuZS5wd1wiOnRydWUsXCJvci5wd1wiOnRydWUsXCJlZC5wd1wiOnRydWUsXCJnby5wd1wiOnRydWUsXCJiZWxhdS5wd1wiOnRydWUsXCJweVwiOnRydWUsXCJjb20ucHlcIjp0cnVlLFwiY29vcC5weVwiOnRydWUsXCJlZHUucHlcIjp0cnVlLFwiZ292LnB5XCI6dHJ1ZSxcIm1pbC5weVwiOnRydWUsXCJuZXQucHlcIjp0cnVlLFwib3JnLnB5XCI6dHJ1ZSxcInFhXCI6dHJ1ZSxcImNvbS5xYVwiOnRydWUsXCJlZHUucWFcIjp0cnVlLFwiZ292LnFhXCI6dHJ1ZSxcIm1pbC5xYVwiOnRydWUsXCJuYW1lLnFhXCI6dHJ1ZSxcIm5ldC5xYVwiOnRydWUsXCJvcmcucWFcIjp0cnVlLFwic2NoLnFhXCI6dHJ1ZSxcInJlXCI6dHJ1ZSxcImNvbS5yZVwiOnRydWUsXCJhc3NvLnJlXCI6dHJ1ZSxcIm5vbS5yZVwiOnRydWUsXCJyb1wiOnRydWUsXCJjb20ucm9cIjp0cnVlLFwib3JnLnJvXCI6dHJ1ZSxcInRtLnJvXCI6dHJ1ZSxcIm50LnJvXCI6dHJ1ZSxcIm5vbS5yb1wiOnRydWUsXCJpbmZvLnJvXCI6dHJ1ZSxcInJlYy5yb1wiOnRydWUsXCJhcnRzLnJvXCI6dHJ1ZSxcImZpcm0ucm9cIjp0cnVlLFwic3RvcmUucm9cIjp0cnVlLFwid3d3LnJvXCI6dHJ1ZSxcInJzXCI6dHJ1ZSxcImNvLnJzXCI6dHJ1ZSxcIm9yZy5yc1wiOnRydWUsXCJlZHUucnNcIjp0cnVlLFwiYWMucnNcIjp0cnVlLFwiZ292LnJzXCI6dHJ1ZSxcImluLnJzXCI6dHJ1ZSxcInJ1XCI6dHJ1ZSxcImFjLnJ1XCI6dHJ1ZSxcImNvbS5ydVwiOnRydWUsXCJlZHUucnVcIjp0cnVlLFwiaW50LnJ1XCI6dHJ1ZSxcIm5ldC5ydVwiOnRydWUsXCJvcmcucnVcIjp0cnVlLFwicHAucnVcIjp0cnVlLFwiYWR5Z2V5YS5ydVwiOnRydWUsXCJhbHRhaS5ydVwiOnRydWUsXCJhbXVyLnJ1XCI6dHJ1ZSxcImFya2hhbmdlbHNrLnJ1XCI6dHJ1ZSxcImFzdHJha2hhbi5ydVwiOnRydWUsXCJiYXNoa2lyaWEucnVcIjp0cnVlLFwiYmVsZ29yb2QucnVcIjp0cnVlLFwiYmlyLnJ1XCI6dHJ1ZSxcImJyeWFuc2sucnVcIjp0cnVlLFwiYnVyeWF0aWEucnVcIjp0cnVlLFwiY2JnLnJ1XCI6dHJ1ZSxcImNoZWwucnVcIjp0cnVlLFwiY2hlbHlhYmluc2sucnVcIjp0cnVlLFwiY2hpdGEucnVcIjp0cnVlLFwiY2h1a290a2EucnVcIjp0cnVlLFwiY2h1dmFzaGlhLnJ1XCI6dHJ1ZSxcImRhZ2VzdGFuLnJ1XCI6dHJ1ZSxcImR1ZGlua2EucnVcIjp0cnVlLFwiZS1idXJnLnJ1XCI6dHJ1ZSxcImdyb3pueS5ydVwiOnRydWUsXCJpcmt1dHNrLnJ1XCI6dHJ1ZSxcIml2YW5vdm8ucnVcIjp0cnVlLFwiaXpoZXZzay5ydVwiOnRydWUsXCJqYXIucnVcIjp0cnVlLFwiam9zaGthci1vbGEucnVcIjp0cnVlLFwia2FsbXlraWEucnVcIjp0cnVlLFwia2FsdWdhLnJ1XCI6dHJ1ZSxcImthbWNoYXRrYS5ydVwiOnRydWUsXCJrYXJlbGlhLnJ1XCI6dHJ1ZSxcImthemFuLnJ1XCI6dHJ1ZSxcImtjaHIucnVcIjp0cnVlLFwia2VtZXJvdm8ucnVcIjp0cnVlLFwia2hhYmFyb3Zzay5ydVwiOnRydWUsXCJraGFrYXNzaWEucnVcIjp0cnVlLFwia2h2LnJ1XCI6dHJ1ZSxcImtpcm92LnJ1XCI6dHJ1ZSxcImtvZW5pZy5ydVwiOnRydWUsXCJrb21pLnJ1XCI6dHJ1ZSxcImtvc3Ryb21hLnJ1XCI6dHJ1ZSxcImtyYXNub3lhcnNrLnJ1XCI6dHJ1ZSxcImt1YmFuLnJ1XCI6dHJ1ZSxcImt1cmdhbi5ydVwiOnRydWUsXCJrdXJzay5ydVwiOnRydWUsXCJsaXBldHNrLnJ1XCI6dHJ1ZSxcIm1hZ2FkYW4ucnVcIjp0cnVlLFwibWFyaS5ydVwiOnRydWUsXCJtYXJpLWVsLnJ1XCI6dHJ1ZSxcIm1hcmluZS5ydVwiOnRydWUsXCJtb3Jkb3ZpYS5ydVwiOnRydWUsXCJtc2sucnVcIjp0cnVlLFwibXVybWFuc2sucnVcIjp0cnVlLFwibmFsY2hpay5ydVwiOnRydWUsXCJubm92LnJ1XCI6dHJ1ZSxcIm5vdi5ydVwiOnRydWUsXCJub3Zvc2liaXJzay5ydVwiOnRydWUsXCJuc2sucnVcIjp0cnVlLFwib21zay5ydVwiOnRydWUsXCJvcmVuYnVyZy5ydVwiOnRydWUsXCJvcnlvbC5ydVwiOnRydWUsXCJwYWxhbmEucnVcIjp0cnVlLFwicGVuemEucnVcIjp0cnVlLFwicGVybS5ydVwiOnRydWUsXCJwdHoucnVcIjp0cnVlLFwicm5kLnJ1XCI6dHJ1ZSxcInJ5YXphbi5ydVwiOnRydWUsXCJzYWtoYWxpbi5ydVwiOnRydWUsXCJzYW1hcmEucnVcIjp0cnVlLFwic2FyYXRvdi5ydVwiOnRydWUsXCJzaW1iaXJzay5ydVwiOnRydWUsXCJzbW9sZW5zay5ydVwiOnRydWUsXCJzcGIucnVcIjp0cnVlLFwic3RhdnJvcG9sLnJ1XCI6dHJ1ZSxcInN0di5ydVwiOnRydWUsXCJzdXJndXQucnVcIjp0cnVlLFwidGFtYm92LnJ1XCI6dHJ1ZSxcInRhdGFyc3Rhbi5ydVwiOnRydWUsXCJ0b20ucnVcIjp0cnVlLFwidG9tc2sucnVcIjp0cnVlLFwidHNhcml0c3luLnJ1XCI6dHJ1ZSxcInRzay5ydVwiOnRydWUsXCJ0dWxhLnJ1XCI6dHJ1ZSxcInR1dmEucnVcIjp0cnVlLFwidHZlci5ydVwiOnRydWUsXCJ0eXVtZW4ucnVcIjp0cnVlLFwidWRtLnJ1XCI6dHJ1ZSxcInVkbXVydGlhLnJ1XCI6dHJ1ZSxcInVsYW4tdWRlLnJ1XCI6dHJ1ZSxcInZsYWRpa2F2a2F6LnJ1XCI6dHJ1ZSxcInZsYWRpbWlyLnJ1XCI6dHJ1ZSxcInZsYWRpdm9zdG9rLnJ1XCI6dHJ1ZSxcInZvbGdvZ3JhZC5ydVwiOnRydWUsXCJ2b2xvZ2RhLnJ1XCI6dHJ1ZSxcInZvcm9uZXpoLnJ1XCI6dHJ1ZSxcInZybi5ydVwiOnRydWUsXCJ2eWF0a2EucnVcIjp0cnVlLFwieWFrdXRpYS5ydVwiOnRydWUsXCJ5YW1hbC5ydVwiOnRydWUsXCJ5YXJvc2xhdmwucnVcIjp0cnVlLFwieWVrYXRlcmluYnVyZy5ydVwiOnRydWUsXCJ5dXpobm8tc2FraGFsaW5zay5ydVwiOnRydWUsXCJhbXVyc2sucnVcIjp0cnVlLFwiYmFpa2FsLnJ1XCI6dHJ1ZSxcImNtdy5ydVwiOnRydWUsXCJmYXJlYXN0LnJ1XCI6dHJ1ZSxcImphbWFsLnJ1XCI6dHJ1ZSxcImttcy5ydVwiOnRydWUsXCJrLXVyYWxzay5ydVwiOnRydWUsXCJrdXN0YW5haS5ydVwiOnRydWUsXCJrdXpiYXNzLnJ1XCI6dHJ1ZSxcIm1hZ25pdGthLnJ1XCI6dHJ1ZSxcIm15dGlzLnJ1XCI6dHJ1ZSxcIm5ha2hvZGthLnJ1XCI6dHJ1ZSxcIm5rei5ydVwiOnRydWUsXCJub3JpbHNrLnJ1XCI6dHJ1ZSxcIm9za29sLnJ1XCI6dHJ1ZSxcInB5YXRpZ29yc2sucnVcIjp0cnVlLFwicnVidHNvdnNrLnJ1XCI6dHJ1ZSxcInNuei5ydVwiOnRydWUsXCJzeXpyYW4ucnVcIjp0cnVlLFwidmRvbnNrLnJ1XCI6dHJ1ZSxcInpncmFkLnJ1XCI6dHJ1ZSxcImdvdi5ydVwiOnRydWUsXCJtaWwucnVcIjp0cnVlLFwidGVzdC5ydVwiOnRydWUsXCJyd1wiOnRydWUsXCJnb3YucndcIjp0cnVlLFwibmV0LnJ3XCI6dHJ1ZSxcImVkdS5yd1wiOnRydWUsXCJhYy5yd1wiOnRydWUsXCJjb20ucndcIjp0cnVlLFwiY28ucndcIjp0cnVlLFwiaW50LnJ3XCI6dHJ1ZSxcIm1pbC5yd1wiOnRydWUsXCJnb3V2LnJ3XCI6dHJ1ZSxcInNhXCI6dHJ1ZSxcImNvbS5zYVwiOnRydWUsXCJuZXQuc2FcIjp0cnVlLFwib3JnLnNhXCI6dHJ1ZSxcImdvdi5zYVwiOnRydWUsXCJtZWQuc2FcIjp0cnVlLFwicHViLnNhXCI6dHJ1ZSxcImVkdS5zYVwiOnRydWUsXCJzY2guc2FcIjp0cnVlLFwic2JcIjp0cnVlLFwiY29tLnNiXCI6dHJ1ZSxcImVkdS5zYlwiOnRydWUsXCJnb3Yuc2JcIjp0cnVlLFwibmV0LnNiXCI6dHJ1ZSxcIm9yZy5zYlwiOnRydWUsXCJzY1wiOnRydWUsXCJjb20uc2NcIjp0cnVlLFwiZ292LnNjXCI6dHJ1ZSxcIm5ldC5zY1wiOnRydWUsXCJvcmcuc2NcIjp0cnVlLFwiZWR1LnNjXCI6dHJ1ZSxcInNkXCI6dHJ1ZSxcImNvbS5zZFwiOnRydWUsXCJuZXQuc2RcIjp0cnVlLFwib3JnLnNkXCI6dHJ1ZSxcImVkdS5zZFwiOnRydWUsXCJtZWQuc2RcIjp0cnVlLFwidHYuc2RcIjp0cnVlLFwiZ292LnNkXCI6dHJ1ZSxcImluZm8uc2RcIjp0cnVlLFwic2VcIjp0cnVlLFwiYS5zZVwiOnRydWUsXCJhYy5zZVwiOnRydWUsXCJiLnNlXCI6dHJ1ZSxcImJkLnNlXCI6dHJ1ZSxcImJyYW5kLnNlXCI6dHJ1ZSxcImMuc2VcIjp0cnVlLFwiZC5zZVwiOnRydWUsXCJlLnNlXCI6dHJ1ZSxcImYuc2VcIjp0cnVlLFwiZmguc2VcIjp0cnVlLFwiZmhzay5zZVwiOnRydWUsXCJmaHYuc2VcIjp0cnVlLFwiZy5zZVwiOnRydWUsXCJoLnNlXCI6dHJ1ZSxcImkuc2VcIjp0cnVlLFwiay5zZVwiOnRydWUsXCJrb21mb3JiLnNlXCI6dHJ1ZSxcImtvbW11bmFsZm9yYnVuZC5zZVwiOnRydWUsXCJrb212dXguc2VcIjp0cnVlLFwibC5zZVwiOnRydWUsXCJsYW5iaWIuc2VcIjp0cnVlLFwibS5zZVwiOnRydWUsXCJuLnNlXCI6dHJ1ZSxcIm5hdHVyYnJ1a3NneW1uLnNlXCI6dHJ1ZSxcIm8uc2VcIjp0cnVlLFwib3JnLnNlXCI6dHJ1ZSxcInAuc2VcIjp0cnVlLFwicGFydGkuc2VcIjp0cnVlLFwicHAuc2VcIjp0cnVlLFwicHJlc3Muc2VcIjp0cnVlLFwici5zZVwiOnRydWUsXCJzLnNlXCI6dHJ1ZSxcInQuc2VcIjp0cnVlLFwidG0uc2VcIjp0cnVlLFwidS5zZVwiOnRydWUsXCJ3LnNlXCI6dHJ1ZSxcInguc2VcIjp0cnVlLFwieS5zZVwiOnRydWUsXCJ6LnNlXCI6dHJ1ZSxcInNnXCI6dHJ1ZSxcImNvbS5zZ1wiOnRydWUsXCJuZXQuc2dcIjp0cnVlLFwib3JnLnNnXCI6dHJ1ZSxcImdvdi5zZ1wiOnRydWUsXCJlZHUuc2dcIjp0cnVlLFwicGVyLnNnXCI6dHJ1ZSxcInNoXCI6dHJ1ZSxcImNvbS5zaFwiOnRydWUsXCJuZXQuc2hcIjp0cnVlLFwiZ292LnNoXCI6dHJ1ZSxcIm9yZy5zaFwiOnRydWUsXCJtaWwuc2hcIjp0cnVlLFwic2lcIjp0cnVlLFwic2pcIjp0cnVlLFwic2tcIjp0cnVlLFwic2xcIjp0cnVlLFwiY29tLnNsXCI6dHJ1ZSxcIm5ldC5zbFwiOnRydWUsXCJlZHUuc2xcIjp0cnVlLFwiZ292LnNsXCI6dHJ1ZSxcIm9yZy5zbFwiOnRydWUsXCJzbVwiOnRydWUsXCJzblwiOnRydWUsXCJhcnQuc25cIjp0cnVlLFwiY29tLnNuXCI6dHJ1ZSxcImVkdS5zblwiOnRydWUsXCJnb3V2LnNuXCI6dHJ1ZSxcIm9yZy5zblwiOnRydWUsXCJwZXJzby5zblwiOnRydWUsXCJ1bml2LnNuXCI6dHJ1ZSxcInNvXCI6dHJ1ZSxcImNvbS5zb1wiOnRydWUsXCJuZXQuc29cIjp0cnVlLFwib3JnLnNvXCI6dHJ1ZSxcInNyXCI6dHJ1ZSxcInN0XCI6dHJ1ZSxcImNvLnN0XCI6dHJ1ZSxcImNvbS5zdFwiOnRydWUsXCJjb25zdWxhZG8uc3RcIjp0cnVlLFwiZWR1LnN0XCI6dHJ1ZSxcImVtYmFpeGFkYS5zdFwiOnRydWUsXCJnb3Yuc3RcIjp0cnVlLFwibWlsLnN0XCI6dHJ1ZSxcIm5ldC5zdFwiOnRydWUsXCJvcmcuc3RcIjp0cnVlLFwicHJpbmNpcGUuc3RcIjp0cnVlLFwic2FvdG9tZS5zdFwiOnRydWUsXCJzdG9yZS5zdFwiOnRydWUsXCJzdVwiOnRydWUsXCJhZHlnZXlhLnN1XCI6dHJ1ZSxcImFya2hhbmdlbHNrLnN1XCI6dHJ1ZSxcImJhbGFzaG92LnN1XCI6dHJ1ZSxcImJhc2hraXJpYS5zdVwiOnRydWUsXCJicnlhbnNrLnN1XCI6dHJ1ZSxcImRhZ2VzdGFuLnN1XCI6dHJ1ZSxcImdyb3pueS5zdVwiOnRydWUsXCJpdmFub3ZvLnN1XCI6dHJ1ZSxcImthbG15a2lhLnN1XCI6dHJ1ZSxcImthbHVnYS5zdVwiOnRydWUsXCJrYXJlbGlhLnN1XCI6dHJ1ZSxcImtoYWthc3NpYS5zdVwiOnRydWUsXCJrcmFzbm9kYXIuc3VcIjp0cnVlLFwia3VyZ2FuLnN1XCI6dHJ1ZSxcImxlbnVnLnN1XCI6dHJ1ZSxcIm1vcmRvdmlhLnN1XCI6dHJ1ZSxcIm1zay5zdVwiOnRydWUsXCJtdXJtYW5zay5zdVwiOnRydWUsXCJuYWxjaGlrLnN1XCI6dHJ1ZSxcIm5vdi5zdVwiOnRydWUsXCJvYm5pbnNrLnN1XCI6dHJ1ZSxcInBlbnphLnN1XCI6dHJ1ZSxcInBva3JvdnNrLnN1XCI6dHJ1ZSxcInNvY2hpLnN1XCI6dHJ1ZSxcInNwYi5zdVwiOnRydWUsXCJ0b2dsaWF0dGkuc3VcIjp0cnVlLFwidHJvaXRzay5zdVwiOnRydWUsXCJ0dWxhLnN1XCI6dHJ1ZSxcInR1dmEuc3VcIjp0cnVlLFwidmxhZGlrYXZrYXouc3VcIjp0cnVlLFwidmxhZGltaXIuc3VcIjp0cnVlLFwidm9sb2dkYS5zdVwiOnRydWUsXCJzdlwiOnRydWUsXCJjb20uc3ZcIjp0cnVlLFwiZWR1LnN2XCI6dHJ1ZSxcImdvYi5zdlwiOnRydWUsXCJvcmcuc3ZcIjp0cnVlLFwicmVkLnN2XCI6dHJ1ZSxcInN4XCI6dHJ1ZSxcImdvdi5zeFwiOnRydWUsXCJzeVwiOnRydWUsXCJlZHUuc3lcIjp0cnVlLFwiZ292LnN5XCI6dHJ1ZSxcIm5ldC5zeVwiOnRydWUsXCJtaWwuc3lcIjp0cnVlLFwiY29tLnN5XCI6dHJ1ZSxcIm9yZy5zeVwiOnRydWUsXCJzelwiOnRydWUsXCJjby5zelwiOnRydWUsXCJhYy5zelwiOnRydWUsXCJvcmcuc3pcIjp0cnVlLFwidGNcIjp0cnVlLFwidGRcIjp0cnVlLFwidGVsXCI6dHJ1ZSxcInRmXCI6dHJ1ZSxcInRnXCI6dHJ1ZSxcInRoXCI6dHJ1ZSxcImFjLnRoXCI6dHJ1ZSxcImNvLnRoXCI6dHJ1ZSxcImdvLnRoXCI6dHJ1ZSxcImluLnRoXCI6dHJ1ZSxcIm1pLnRoXCI6dHJ1ZSxcIm5ldC50aFwiOnRydWUsXCJvci50aFwiOnRydWUsXCJ0alwiOnRydWUsXCJhYy50alwiOnRydWUsXCJiaXoudGpcIjp0cnVlLFwiY28udGpcIjp0cnVlLFwiY29tLnRqXCI6dHJ1ZSxcImVkdS50alwiOnRydWUsXCJnby50alwiOnRydWUsXCJnb3YudGpcIjp0cnVlLFwiaW50LnRqXCI6dHJ1ZSxcIm1pbC50alwiOnRydWUsXCJuYW1lLnRqXCI6dHJ1ZSxcIm5ldC50alwiOnRydWUsXCJuaWMudGpcIjp0cnVlLFwib3JnLnRqXCI6dHJ1ZSxcInRlc3QudGpcIjp0cnVlLFwid2ViLnRqXCI6dHJ1ZSxcInRrXCI6dHJ1ZSxcInRsXCI6dHJ1ZSxcImdvdi50bFwiOnRydWUsXCJ0bVwiOnRydWUsXCJjb20udG1cIjp0cnVlLFwiY28udG1cIjp0cnVlLFwib3JnLnRtXCI6dHJ1ZSxcIm5ldC50bVwiOnRydWUsXCJub20udG1cIjp0cnVlLFwiZ292LnRtXCI6dHJ1ZSxcIm1pbC50bVwiOnRydWUsXCJlZHUudG1cIjp0cnVlLFwidG5cIjp0cnVlLFwiY29tLnRuXCI6dHJ1ZSxcImVucy50blwiOnRydWUsXCJmaW4udG5cIjp0cnVlLFwiZ292LnRuXCI6dHJ1ZSxcImluZC50blwiOnRydWUsXCJpbnRsLnRuXCI6dHJ1ZSxcIm5hdC50blwiOnRydWUsXCJuZXQudG5cIjp0cnVlLFwib3JnLnRuXCI6dHJ1ZSxcImluZm8udG5cIjp0cnVlLFwicGVyc28udG5cIjp0cnVlLFwidG91cmlzbS50blwiOnRydWUsXCJlZHVuZXQudG5cIjp0cnVlLFwicm5ydC50blwiOnRydWUsXCJybnMudG5cIjp0cnVlLFwicm51LnRuXCI6dHJ1ZSxcIm1pbmNvbS50blwiOnRydWUsXCJhZ3JpbmV0LnRuXCI6dHJ1ZSxcImRlZmVuc2UudG5cIjp0cnVlLFwidHVyZW4udG5cIjp0cnVlLFwidG9cIjp0cnVlLFwiY29tLnRvXCI6dHJ1ZSxcImdvdi50b1wiOnRydWUsXCJuZXQudG9cIjp0cnVlLFwib3JnLnRvXCI6dHJ1ZSxcImVkdS50b1wiOnRydWUsXCJtaWwudG9cIjp0cnVlLFwidHBcIjp0cnVlLFwidHJcIjp0cnVlLFwiY29tLnRyXCI6dHJ1ZSxcImluZm8udHJcIjp0cnVlLFwiYml6LnRyXCI6dHJ1ZSxcIm5ldC50clwiOnRydWUsXCJvcmcudHJcIjp0cnVlLFwid2ViLnRyXCI6dHJ1ZSxcImdlbi50clwiOnRydWUsXCJ0di50clwiOnRydWUsXCJhdi50clwiOnRydWUsXCJkci50clwiOnRydWUsXCJiYnMudHJcIjp0cnVlLFwibmFtZS50clwiOnRydWUsXCJ0ZWwudHJcIjp0cnVlLFwiZ292LnRyXCI6dHJ1ZSxcImJlbC50clwiOnRydWUsXCJwb2wudHJcIjp0cnVlLFwibWlsLnRyXCI6dHJ1ZSxcImsxMi50clwiOnRydWUsXCJlZHUudHJcIjp0cnVlLFwia2VwLnRyXCI6dHJ1ZSxcIm5jLnRyXCI6dHJ1ZSxcImdvdi5uYy50clwiOnRydWUsXCJ0cmF2ZWxcIjp0cnVlLFwidHRcIjp0cnVlLFwiY28udHRcIjp0cnVlLFwiY29tLnR0XCI6dHJ1ZSxcIm9yZy50dFwiOnRydWUsXCJuZXQudHRcIjp0cnVlLFwiYml6LnR0XCI6dHJ1ZSxcImluZm8udHRcIjp0cnVlLFwicHJvLnR0XCI6dHJ1ZSxcImludC50dFwiOnRydWUsXCJjb29wLnR0XCI6dHJ1ZSxcImpvYnMudHRcIjp0cnVlLFwibW9iaS50dFwiOnRydWUsXCJ0cmF2ZWwudHRcIjp0cnVlLFwibXVzZXVtLnR0XCI6dHJ1ZSxcImFlcm8udHRcIjp0cnVlLFwibmFtZS50dFwiOnRydWUsXCJnb3YudHRcIjp0cnVlLFwiZWR1LnR0XCI6dHJ1ZSxcInR2XCI6dHJ1ZSxcInR3XCI6dHJ1ZSxcImVkdS50d1wiOnRydWUsXCJnb3YudHdcIjp0cnVlLFwibWlsLnR3XCI6dHJ1ZSxcImNvbS50d1wiOnRydWUsXCJuZXQudHdcIjp0cnVlLFwib3JnLnR3XCI6dHJ1ZSxcImlkdi50d1wiOnRydWUsXCJnYW1lLnR3XCI6dHJ1ZSxcImViaXoudHdcIjp0cnVlLFwiY2x1Yi50d1wiOnRydWUsXCJ4bi0temYwYW82NGEudHdcIjp0cnVlLFwieG4tLXVjMGF0di50d1wiOnRydWUsXCJ4bi0tY3pydzI4Yi50d1wiOnRydWUsXCJ0elwiOnRydWUsXCJhYy50elwiOnRydWUsXCJjby50elwiOnRydWUsXCJnby50elwiOnRydWUsXCJob3RlbC50elwiOnRydWUsXCJpbmZvLnR6XCI6dHJ1ZSxcIm1lLnR6XCI6dHJ1ZSxcIm1pbC50elwiOnRydWUsXCJtb2JpLnR6XCI6dHJ1ZSxcIm5lLnR6XCI6dHJ1ZSxcIm9yLnR6XCI6dHJ1ZSxcInNjLnR6XCI6dHJ1ZSxcInR2LnR6XCI6dHJ1ZSxcInVhXCI6dHJ1ZSxcImNvbS51YVwiOnRydWUsXCJlZHUudWFcIjp0cnVlLFwiZ292LnVhXCI6dHJ1ZSxcImluLnVhXCI6dHJ1ZSxcIm5ldC51YVwiOnRydWUsXCJvcmcudWFcIjp0cnVlLFwiY2hlcmthc3N5LnVhXCI6dHJ1ZSxcImNoZXJrYXN5LnVhXCI6dHJ1ZSxcImNoZXJuaWdvdi51YVwiOnRydWUsXCJjaGVybmloaXYudWFcIjp0cnVlLFwiY2hlcm5pdnRzaS51YVwiOnRydWUsXCJjaGVybm92dHN5LnVhXCI6dHJ1ZSxcImNrLnVhXCI6dHJ1ZSxcImNuLnVhXCI6dHJ1ZSxcImNyLnVhXCI6dHJ1ZSxcImNyaW1lYS51YVwiOnRydWUsXCJjdi51YVwiOnRydWUsXCJkbi51YVwiOnRydWUsXCJkbmVwcm9wZXRyb3Zzay51YVwiOnRydWUsXCJkbmlwcm9wZXRyb3Zzay51YVwiOnRydWUsXCJkb21pbmljLnVhXCI6dHJ1ZSxcImRvbmV0c2sudWFcIjp0cnVlLFwiZHAudWFcIjp0cnVlLFwiaWYudWFcIjp0cnVlLFwiaXZhbm8tZnJhbmtpdnNrLnVhXCI6dHJ1ZSxcImtoLnVhXCI6dHJ1ZSxcImtoYXJraXYudWFcIjp0cnVlLFwia2hhcmtvdi51YVwiOnRydWUsXCJraGVyc29uLnVhXCI6dHJ1ZSxcImtobWVsbml0c2tpeS51YVwiOnRydWUsXCJraG1lbG55dHNreWkudWFcIjp0cnVlLFwia2lldi51YVwiOnRydWUsXCJraXJvdm9ncmFkLnVhXCI6dHJ1ZSxcImttLnVhXCI6dHJ1ZSxcImtyLnVhXCI6dHJ1ZSxcImtyeW0udWFcIjp0cnVlLFwia3MudWFcIjp0cnVlLFwia3YudWFcIjp0cnVlLFwia3lpdi51YVwiOnRydWUsXCJsZy51YVwiOnRydWUsXCJsdC51YVwiOnRydWUsXCJsdWdhbnNrLnVhXCI6dHJ1ZSxcImx1dHNrLnVhXCI6dHJ1ZSxcImx2LnVhXCI6dHJ1ZSxcImx2aXYudWFcIjp0cnVlLFwibWsudWFcIjp0cnVlLFwibXlrb2xhaXYudWFcIjp0cnVlLFwibmlrb2xhZXYudWFcIjp0cnVlLFwib2QudWFcIjp0cnVlLFwib2Rlc2EudWFcIjp0cnVlLFwib2Rlc3NhLnVhXCI6dHJ1ZSxcInBsLnVhXCI6dHJ1ZSxcInBvbHRhdmEudWFcIjp0cnVlLFwicml2bmUudWFcIjp0cnVlLFwicm92bm8udWFcIjp0cnVlLFwicnYudWFcIjp0cnVlLFwic2IudWFcIjp0cnVlLFwic2ViYXN0b3BvbC51YVwiOnRydWUsXCJzZXZhc3RvcG9sLnVhXCI6dHJ1ZSxcInNtLnVhXCI6dHJ1ZSxcInN1bXkudWFcIjp0cnVlLFwidGUudWFcIjp0cnVlLFwidGVybm9waWwudWFcIjp0cnVlLFwidXoudWFcIjp0cnVlLFwidXpoZ29yb2QudWFcIjp0cnVlLFwidmlubmljYS51YVwiOnRydWUsXCJ2aW5ueXRzaWEudWFcIjp0cnVlLFwidm4udWFcIjp0cnVlLFwidm9seW4udWFcIjp0cnVlLFwieWFsdGEudWFcIjp0cnVlLFwiemFwb3Jpemh6aGUudWFcIjp0cnVlLFwiemFwb3Jpemh6aGlhLnVhXCI6dHJ1ZSxcInpoaXRvbWlyLnVhXCI6dHJ1ZSxcInpoeXRvbXlyLnVhXCI6dHJ1ZSxcInpwLnVhXCI6dHJ1ZSxcInp0LnVhXCI6dHJ1ZSxcInVnXCI6dHJ1ZSxcImNvLnVnXCI6dHJ1ZSxcIm9yLnVnXCI6dHJ1ZSxcImFjLnVnXCI6dHJ1ZSxcInNjLnVnXCI6dHJ1ZSxcImdvLnVnXCI6dHJ1ZSxcIm5lLnVnXCI6dHJ1ZSxcImNvbS51Z1wiOnRydWUsXCJvcmcudWdcIjp0cnVlLFwidWtcIjp0cnVlLFwiYWMudWtcIjp0cnVlLFwiY28udWtcIjp0cnVlLFwiZ292LnVrXCI6dHJ1ZSxcImx0ZC51a1wiOnRydWUsXCJtZS51a1wiOnRydWUsXCJuZXQudWtcIjp0cnVlLFwibmhzLnVrXCI6dHJ1ZSxcIm9yZy51a1wiOnRydWUsXCJwbGMudWtcIjp0cnVlLFwicG9saWNlLnVrXCI6dHJ1ZSxcIiouc2NoLnVrXCI6dHJ1ZSxcInVzXCI6dHJ1ZSxcImRuaS51c1wiOnRydWUsXCJmZWQudXNcIjp0cnVlLFwiaXNhLnVzXCI6dHJ1ZSxcImtpZHMudXNcIjp0cnVlLFwibnNuLnVzXCI6dHJ1ZSxcImFrLnVzXCI6dHJ1ZSxcImFsLnVzXCI6dHJ1ZSxcImFyLnVzXCI6dHJ1ZSxcImFzLnVzXCI6dHJ1ZSxcImF6LnVzXCI6dHJ1ZSxcImNhLnVzXCI6dHJ1ZSxcImNvLnVzXCI6dHJ1ZSxcImN0LnVzXCI6dHJ1ZSxcImRjLnVzXCI6dHJ1ZSxcImRlLnVzXCI6dHJ1ZSxcImZsLnVzXCI6dHJ1ZSxcImdhLnVzXCI6dHJ1ZSxcImd1LnVzXCI6dHJ1ZSxcImhpLnVzXCI6dHJ1ZSxcImlhLnVzXCI6dHJ1ZSxcImlkLnVzXCI6dHJ1ZSxcImlsLnVzXCI6dHJ1ZSxcImluLnVzXCI6dHJ1ZSxcImtzLnVzXCI6dHJ1ZSxcImt5LnVzXCI6dHJ1ZSxcImxhLnVzXCI6dHJ1ZSxcIm1hLnVzXCI6dHJ1ZSxcIm1kLnVzXCI6dHJ1ZSxcIm1lLnVzXCI6dHJ1ZSxcIm1pLnVzXCI6dHJ1ZSxcIm1uLnVzXCI6dHJ1ZSxcIm1vLnVzXCI6dHJ1ZSxcIm1zLnVzXCI6dHJ1ZSxcIm10LnVzXCI6dHJ1ZSxcIm5jLnVzXCI6dHJ1ZSxcIm5kLnVzXCI6dHJ1ZSxcIm5lLnVzXCI6dHJ1ZSxcIm5oLnVzXCI6dHJ1ZSxcIm5qLnVzXCI6dHJ1ZSxcIm5tLnVzXCI6dHJ1ZSxcIm52LnVzXCI6dHJ1ZSxcIm55LnVzXCI6dHJ1ZSxcIm9oLnVzXCI6dHJ1ZSxcIm9rLnVzXCI6dHJ1ZSxcIm9yLnVzXCI6dHJ1ZSxcInBhLnVzXCI6dHJ1ZSxcInByLnVzXCI6dHJ1ZSxcInJpLnVzXCI6dHJ1ZSxcInNjLnVzXCI6dHJ1ZSxcInNkLnVzXCI6dHJ1ZSxcInRuLnVzXCI6dHJ1ZSxcInR4LnVzXCI6dHJ1ZSxcInV0LnVzXCI6dHJ1ZSxcInZpLnVzXCI6dHJ1ZSxcInZ0LnVzXCI6dHJ1ZSxcInZhLnVzXCI6dHJ1ZSxcIndhLnVzXCI6dHJ1ZSxcIndpLnVzXCI6dHJ1ZSxcInd2LnVzXCI6dHJ1ZSxcInd5LnVzXCI6dHJ1ZSxcImsxMi5hay51c1wiOnRydWUsXCJrMTIuYWwudXNcIjp0cnVlLFwiazEyLmFyLnVzXCI6dHJ1ZSxcImsxMi5hcy51c1wiOnRydWUsXCJrMTIuYXoudXNcIjp0cnVlLFwiazEyLmNhLnVzXCI6dHJ1ZSxcImsxMi5jby51c1wiOnRydWUsXCJrMTIuY3QudXNcIjp0cnVlLFwiazEyLmRjLnVzXCI6dHJ1ZSxcImsxMi5kZS51c1wiOnRydWUsXCJrMTIuZmwudXNcIjp0cnVlLFwiazEyLmdhLnVzXCI6dHJ1ZSxcImsxMi5ndS51c1wiOnRydWUsXCJrMTIuaWEudXNcIjp0cnVlLFwiazEyLmlkLnVzXCI6dHJ1ZSxcImsxMi5pbC51c1wiOnRydWUsXCJrMTIuaW4udXNcIjp0cnVlLFwiazEyLmtzLnVzXCI6dHJ1ZSxcImsxMi5reS51c1wiOnRydWUsXCJrMTIubGEudXNcIjp0cnVlLFwiazEyLm1hLnVzXCI6dHJ1ZSxcImsxMi5tZC51c1wiOnRydWUsXCJrMTIubWUudXNcIjp0cnVlLFwiazEyLm1pLnVzXCI6dHJ1ZSxcImsxMi5tbi51c1wiOnRydWUsXCJrMTIubW8udXNcIjp0cnVlLFwiazEyLm1zLnVzXCI6dHJ1ZSxcImsxMi5tdC51c1wiOnRydWUsXCJrMTIubmMudXNcIjp0cnVlLFwiazEyLm5lLnVzXCI6dHJ1ZSxcImsxMi5uaC51c1wiOnRydWUsXCJrMTIubmoudXNcIjp0cnVlLFwiazEyLm5tLnVzXCI6dHJ1ZSxcImsxMi5udi51c1wiOnRydWUsXCJrMTIubnkudXNcIjp0cnVlLFwiazEyLm9oLnVzXCI6dHJ1ZSxcImsxMi5vay51c1wiOnRydWUsXCJrMTIub3IudXNcIjp0cnVlLFwiazEyLnBhLnVzXCI6dHJ1ZSxcImsxMi5wci51c1wiOnRydWUsXCJrMTIucmkudXNcIjp0cnVlLFwiazEyLnNjLnVzXCI6dHJ1ZSxcImsxMi50bi51c1wiOnRydWUsXCJrMTIudHgudXNcIjp0cnVlLFwiazEyLnV0LnVzXCI6dHJ1ZSxcImsxMi52aS51c1wiOnRydWUsXCJrMTIudnQudXNcIjp0cnVlLFwiazEyLnZhLnVzXCI6dHJ1ZSxcImsxMi53YS51c1wiOnRydWUsXCJrMTIud2kudXNcIjp0cnVlLFwiazEyLnd5LnVzXCI6dHJ1ZSxcImNjLmFrLnVzXCI6dHJ1ZSxcImNjLmFsLnVzXCI6dHJ1ZSxcImNjLmFyLnVzXCI6dHJ1ZSxcImNjLmFzLnVzXCI6dHJ1ZSxcImNjLmF6LnVzXCI6dHJ1ZSxcImNjLmNhLnVzXCI6dHJ1ZSxcImNjLmNvLnVzXCI6dHJ1ZSxcImNjLmN0LnVzXCI6dHJ1ZSxcImNjLmRjLnVzXCI6dHJ1ZSxcImNjLmRlLnVzXCI6dHJ1ZSxcImNjLmZsLnVzXCI6dHJ1ZSxcImNjLmdhLnVzXCI6dHJ1ZSxcImNjLmd1LnVzXCI6dHJ1ZSxcImNjLmhpLnVzXCI6dHJ1ZSxcImNjLmlhLnVzXCI6dHJ1ZSxcImNjLmlkLnVzXCI6dHJ1ZSxcImNjLmlsLnVzXCI6dHJ1ZSxcImNjLmluLnVzXCI6dHJ1ZSxcImNjLmtzLnVzXCI6dHJ1ZSxcImNjLmt5LnVzXCI6dHJ1ZSxcImNjLmxhLnVzXCI6dHJ1ZSxcImNjLm1hLnVzXCI6dHJ1ZSxcImNjLm1kLnVzXCI6dHJ1ZSxcImNjLm1lLnVzXCI6dHJ1ZSxcImNjLm1pLnVzXCI6dHJ1ZSxcImNjLm1uLnVzXCI6dHJ1ZSxcImNjLm1vLnVzXCI6dHJ1ZSxcImNjLm1zLnVzXCI6dHJ1ZSxcImNjLm10LnVzXCI6dHJ1ZSxcImNjLm5jLnVzXCI6dHJ1ZSxcImNjLm5kLnVzXCI6dHJ1ZSxcImNjLm5lLnVzXCI6dHJ1ZSxcImNjLm5oLnVzXCI6dHJ1ZSxcImNjLm5qLnVzXCI6dHJ1ZSxcImNjLm5tLnVzXCI6dHJ1ZSxcImNjLm52LnVzXCI6dHJ1ZSxcImNjLm55LnVzXCI6dHJ1ZSxcImNjLm9oLnVzXCI6dHJ1ZSxcImNjLm9rLnVzXCI6dHJ1ZSxcImNjLm9yLnVzXCI6dHJ1ZSxcImNjLnBhLnVzXCI6dHJ1ZSxcImNjLnByLnVzXCI6dHJ1ZSxcImNjLnJpLnVzXCI6dHJ1ZSxcImNjLnNjLnVzXCI6dHJ1ZSxcImNjLnNkLnVzXCI6dHJ1ZSxcImNjLnRuLnVzXCI6dHJ1ZSxcImNjLnR4LnVzXCI6dHJ1ZSxcImNjLnV0LnVzXCI6dHJ1ZSxcImNjLnZpLnVzXCI6dHJ1ZSxcImNjLnZ0LnVzXCI6dHJ1ZSxcImNjLnZhLnVzXCI6dHJ1ZSxcImNjLndhLnVzXCI6dHJ1ZSxcImNjLndpLnVzXCI6dHJ1ZSxcImNjLnd2LnVzXCI6dHJ1ZSxcImNjLnd5LnVzXCI6dHJ1ZSxcImxpYi5hay51c1wiOnRydWUsXCJsaWIuYWwudXNcIjp0cnVlLFwibGliLmFyLnVzXCI6dHJ1ZSxcImxpYi5hcy51c1wiOnRydWUsXCJsaWIuYXoudXNcIjp0cnVlLFwibGliLmNhLnVzXCI6dHJ1ZSxcImxpYi5jby51c1wiOnRydWUsXCJsaWIuY3QudXNcIjp0cnVlLFwibGliLmRjLnVzXCI6dHJ1ZSxcImxpYi5kZS51c1wiOnRydWUsXCJsaWIuZmwudXNcIjp0cnVlLFwibGliLmdhLnVzXCI6dHJ1ZSxcImxpYi5ndS51c1wiOnRydWUsXCJsaWIuaGkudXNcIjp0cnVlLFwibGliLmlhLnVzXCI6dHJ1ZSxcImxpYi5pZC51c1wiOnRydWUsXCJsaWIuaWwudXNcIjp0cnVlLFwibGliLmluLnVzXCI6dHJ1ZSxcImxpYi5rcy51c1wiOnRydWUsXCJsaWIua3kudXNcIjp0cnVlLFwibGliLmxhLnVzXCI6dHJ1ZSxcImxpYi5tYS51c1wiOnRydWUsXCJsaWIubWQudXNcIjp0cnVlLFwibGliLm1lLnVzXCI6dHJ1ZSxcImxpYi5taS51c1wiOnRydWUsXCJsaWIubW4udXNcIjp0cnVlLFwibGliLm1vLnVzXCI6dHJ1ZSxcImxpYi5tcy51c1wiOnRydWUsXCJsaWIubXQudXNcIjp0cnVlLFwibGliLm5jLnVzXCI6dHJ1ZSxcImxpYi5uZC51c1wiOnRydWUsXCJsaWIubmUudXNcIjp0cnVlLFwibGliLm5oLnVzXCI6dHJ1ZSxcImxpYi5uai51c1wiOnRydWUsXCJsaWIubm0udXNcIjp0cnVlLFwibGliLm52LnVzXCI6dHJ1ZSxcImxpYi5ueS51c1wiOnRydWUsXCJsaWIub2gudXNcIjp0cnVlLFwibGliLm9rLnVzXCI6dHJ1ZSxcImxpYi5vci51c1wiOnRydWUsXCJsaWIucGEudXNcIjp0cnVlLFwibGliLnByLnVzXCI6dHJ1ZSxcImxpYi5yaS51c1wiOnRydWUsXCJsaWIuc2MudXNcIjp0cnVlLFwibGliLnNkLnVzXCI6dHJ1ZSxcImxpYi50bi51c1wiOnRydWUsXCJsaWIudHgudXNcIjp0cnVlLFwibGliLnV0LnVzXCI6dHJ1ZSxcImxpYi52aS51c1wiOnRydWUsXCJsaWIudnQudXNcIjp0cnVlLFwibGliLnZhLnVzXCI6dHJ1ZSxcImxpYi53YS51c1wiOnRydWUsXCJsaWIud2kudXNcIjp0cnVlLFwibGliLnd5LnVzXCI6dHJ1ZSxcInB2dC5rMTIubWEudXNcIjp0cnVlLFwiY2h0ci5rMTIubWEudXNcIjp0cnVlLFwicGFyb2NoLmsxMi5tYS51c1wiOnRydWUsXCJ1eVwiOnRydWUsXCJjb20udXlcIjp0cnVlLFwiZWR1LnV5XCI6dHJ1ZSxcImd1Yi51eVwiOnRydWUsXCJtaWwudXlcIjp0cnVlLFwibmV0LnV5XCI6dHJ1ZSxcIm9yZy51eVwiOnRydWUsXCJ1elwiOnRydWUsXCJjby51elwiOnRydWUsXCJjb20udXpcIjp0cnVlLFwibmV0LnV6XCI6dHJ1ZSxcIm9yZy51elwiOnRydWUsXCJ2YVwiOnRydWUsXCJ2Y1wiOnRydWUsXCJjb20udmNcIjp0cnVlLFwibmV0LnZjXCI6dHJ1ZSxcIm9yZy52Y1wiOnRydWUsXCJnb3YudmNcIjp0cnVlLFwibWlsLnZjXCI6dHJ1ZSxcImVkdS52Y1wiOnRydWUsXCJ2ZVwiOnRydWUsXCJhcnRzLnZlXCI6dHJ1ZSxcImNvLnZlXCI6dHJ1ZSxcImNvbS52ZVwiOnRydWUsXCJlMTIudmVcIjp0cnVlLFwiZWR1LnZlXCI6dHJ1ZSxcImZpcm0udmVcIjp0cnVlLFwiZ29iLnZlXCI6dHJ1ZSxcImdvdi52ZVwiOnRydWUsXCJpbmZvLnZlXCI6dHJ1ZSxcImludC52ZVwiOnRydWUsXCJtaWwudmVcIjp0cnVlLFwibmV0LnZlXCI6dHJ1ZSxcIm9yZy52ZVwiOnRydWUsXCJyZWMudmVcIjp0cnVlLFwic3RvcmUudmVcIjp0cnVlLFwidGVjLnZlXCI6dHJ1ZSxcIndlYi52ZVwiOnRydWUsXCJ2Z1wiOnRydWUsXCJ2aVwiOnRydWUsXCJjby52aVwiOnRydWUsXCJjb20udmlcIjp0cnVlLFwiazEyLnZpXCI6dHJ1ZSxcIm5ldC52aVwiOnRydWUsXCJvcmcudmlcIjp0cnVlLFwidm5cIjp0cnVlLFwiY29tLnZuXCI6dHJ1ZSxcIm5ldC52blwiOnRydWUsXCJvcmcudm5cIjp0cnVlLFwiZWR1LnZuXCI6dHJ1ZSxcImdvdi52blwiOnRydWUsXCJpbnQudm5cIjp0cnVlLFwiYWMudm5cIjp0cnVlLFwiYml6LnZuXCI6dHJ1ZSxcImluZm8udm5cIjp0cnVlLFwibmFtZS52blwiOnRydWUsXCJwcm8udm5cIjp0cnVlLFwiaGVhbHRoLnZuXCI6dHJ1ZSxcInZ1XCI6dHJ1ZSxcImNvbS52dVwiOnRydWUsXCJlZHUudnVcIjp0cnVlLFwibmV0LnZ1XCI6dHJ1ZSxcIm9yZy52dVwiOnRydWUsXCJ3ZlwiOnRydWUsXCJ3c1wiOnRydWUsXCJjb20ud3NcIjp0cnVlLFwibmV0LndzXCI6dHJ1ZSxcIm9yZy53c1wiOnRydWUsXCJnb3Yud3NcIjp0cnVlLFwiZWR1LndzXCI6dHJ1ZSxcInl0XCI6dHJ1ZSxcInhuLS1tZ2JhYW03YThoXCI6dHJ1ZSxcInhuLS15OWEzYXFcIjp0cnVlLFwieG4tLTU0YjdmdGEwY2NcIjp0cnVlLFwieG4tLTkwYWlzXCI6dHJ1ZSxcInhuLS1maXFzOHNcIjp0cnVlLFwieG4tLWZpcXo5c1wiOnRydWUsXCJ4bi0tbGdiYmF0MWFkOGpcIjp0cnVlLFwieG4tLXdnYmgxY1wiOnRydWUsXCJ4bi0tbm9kZVwiOnRydWUsXCJ4bi0tcXhhbVwiOnRydWUsXCJ4bi0tajZ3MTkzZ1wiOnRydWUsXCJ4bi0taDJicmo5Y1wiOnRydWUsXCJ4bi0tbWdiYmgxYTcxZVwiOnRydWUsXCJ4bi0tZnBjcmo5YzNkXCI6dHJ1ZSxcInhuLS1nZWNyajljXCI6dHJ1ZSxcInhuLS1zOWJyajljXCI6dHJ1ZSxcInhuLS00NWJyajljXCI6dHJ1ZSxcInhuLS14a2MyZGwzYTVlZTBoXCI6dHJ1ZSxcInhuLS1tZ2JhM2E0ZjE2YVwiOnRydWUsXCJ4bi0tbWdiYTNhNGZyYVwiOnRydWUsXCJ4bi0tbWdidHgyYlwiOnRydWUsXCJ4bi0tbWdiYXloN2dwYVwiOnRydWUsXCJ4bi0tM2UwYjcwN2VcIjp0cnVlLFwieG4tLTgwYW8yMWFcIjp0cnVlLFwieG4tLWZ6YzJjOWUyY1wiOnRydWUsXCJ4bi0teGtjMmFsM2h5ZTJhXCI6dHJ1ZSxcInhuLS1tZ2JjMGE5YXpjZ1wiOnRydWUsXCJ4bi0tZDFhbGZcIjp0cnVlLFwieG4tLWwxYWNjXCI6dHJ1ZSxcInhuLS1taXg4OTFmXCI6dHJ1ZSxcInhuLS1taXgwODJmXCI6dHJ1ZSxcInhuLS1tZ2J4NGNkMGFiXCI6dHJ1ZSxcInhuLS1tZ2I5YXdiZlwiOnRydWUsXCJ4bi0tbWdiYWk5YXpncXA2alwiOnRydWUsXCJ4bi0tbWdiYWk5YTVldmEwMGJcIjp0cnVlLFwieG4tLXlnYmkyYW1teFwiOnRydWUsXCJ4bi0tOTBhM2FjXCI6dHJ1ZSxcInhuLS1vMWFjLnhuLS05MGEzYWNcIjp0cnVlLFwieG4tLWMxYXZnLnhuLS05MGEzYWNcIjp0cnVlLFwieG4tLTkwYXpoLnhuLS05MGEzYWNcIjp0cnVlLFwieG4tLWQxYXQueG4tLTkwYTNhY1wiOnRydWUsXCJ4bi0tbzFhY2gueG4tLTkwYTNhY1wiOnRydWUsXCJ4bi0tODBhdS54bi0tOTBhM2FjXCI6dHJ1ZSxcInhuLS1wMWFpXCI6dHJ1ZSxcInhuLS13Z2JsNmFcIjp0cnVlLFwieG4tLW1nYmVycDRhNWQ0YXJcIjp0cnVlLFwieG4tLW1nYmVycDRhNWQ0YTg3Z1wiOnRydWUsXCJ4bi0tbWdicWx5N2MwYTY3ZmJjXCI6dHJ1ZSxcInhuLS1tZ2JxbHk3Y3ZhZnJcIjp0cnVlLFwieG4tLW1nYnBsMmZoXCI6dHJ1ZSxcInhuLS15ZnJvNGk2N29cIjp0cnVlLFwieG4tLWNsY2hjMGVhMGIyZzJhOWdjZFwiOnRydWUsXCJ4bi0tb2dicGY4ZmxcIjp0cnVlLFwieG4tLW1nYnRmOGZsXCI6dHJ1ZSxcInhuLS1vM2N3NGhcIjp0cnVlLFwieG4tLXBnYnMwZGhcIjp0cnVlLFwieG4tLWtwcnk1N2RcIjp0cnVlLFwieG4tLWtwcncxM2RcIjp0cnVlLFwieG4tLW5ueDM4OGFcIjp0cnVlLFwieG4tLWoxYW1oXCI6dHJ1ZSxcInhuLS1tZ2IyZGRlc1wiOnRydWUsXCJ4eHhcIjp0cnVlLFwiKi55ZVwiOnRydWUsXCJhYy56YVwiOnRydWUsXCJhZ3JpY2EuemFcIjp0cnVlLFwiYWx0LnphXCI6dHJ1ZSxcImNvLnphXCI6dHJ1ZSxcImVkdS56YVwiOnRydWUsXCJnb3YuemFcIjp0cnVlLFwiZ3JvbmRhci56YVwiOnRydWUsXCJsYXcuemFcIjp0cnVlLFwibWlsLnphXCI6dHJ1ZSxcIm5ldC56YVwiOnRydWUsXCJuZ28uemFcIjp0cnVlLFwibmlzLnphXCI6dHJ1ZSxcIm5vbS56YVwiOnRydWUsXCJvcmcuemFcIjp0cnVlLFwic2Nob29sLnphXCI6dHJ1ZSxcInRtLnphXCI6dHJ1ZSxcIndlYi56YVwiOnRydWUsXCIqLnptXCI6dHJ1ZSxcIiouendcIjp0cnVlLFwiYWFhXCI6dHJ1ZSxcImFhcnBcIjp0cnVlLFwiYWJhcnRoXCI6dHJ1ZSxcImFiYlwiOnRydWUsXCJhYmJvdHRcIjp0cnVlLFwiYWJidmllXCI6dHJ1ZSxcImFiY1wiOnRydWUsXCJhYmxlXCI6dHJ1ZSxcImFib2dhZG9cIjp0cnVlLFwiYWJ1ZGhhYmlcIjp0cnVlLFwiYWNhZGVteVwiOnRydWUsXCJhY2NlbnR1cmVcIjp0cnVlLFwiYWNjb3VudGFudFwiOnRydWUsXCJhY2NvdW50YW50c1wiOnRydWUsXCJhY29cIjp0cnVlLFwiYWN0aXZlXCI6dHJ1ZSxcImFjdG9yXCI6dHJ1ZSxcImFkYWNcIjp0cnVlLFwiYWRzXCI6dHJ1ZSxcImFkdWx0XCI6dHJ1ZSxcImFlZ1wiOnRydWUsXCJhZXRuYVwiOnRydWUsXCJhZmFtaWx5Y29tcGFueVwiOnRydWUsXCJhZmxcIjp0cnVlLFwiYWZyaWNhXCI6dHJ1ZSxcImFmcmljYW1hZ2ljXCI6dHJ1ZSxcImFnYWtoYW5cIjp0cnVlLFwiYWdlbmN5XCI6dHJ1ZSxcImFpZ1wiOnRydWUsXCJhaWdvXCI6dHJ1ZSxcImFpcmJ1c1wiOnRydWUsXCJhaXJmb3JjZVwiOnRydWUsXCJhaXJ0ZWxcIjp0cnVlLFwiYWtkblwiOnRydWUsXCJhbGZhcm9tZW9cIjp0cnVlLFwiYWxpYmFiYVwiOnRydWUsXCJhbGlwYXlcIjp0cnVlLFwiYWxsZmluYW56XCI6dHJ1ZSxcImFsbHN0YXRlXCI6dHJ1ZSxcImFsbHlcIjp0cnVlLFwiYWxzYWNlXCI6dHJ1ZSxcImFsc3RvbVwiOnRydWUsXCJhbWVyaWNhbmV4cHJlc3NcIjp0cnVlLFwiYW1lcmljYW5mYW1pbHlcIjp0cnVlLFwiYW1leFwiOnRydWUsXCJhbWZhbVwiOnRydWUsXCJhbWljYVwiOnRydWUsXCJhbXN0ZXJkYW1cIjp0cnVlLFwiYW5hbHl0aWNzXCI6dHJ1ZSxcImFuZHJvaWRcIjp0cnVlLFwiYW5xdWFuXCI6dHJ1ZSxcImFuelwiOnRydWUsXCJhb2xcIjp0cnVlLFwiYXBhcnRtZW50c1wiOnRydWUsXCJhcHBcIjp0cnVlLFwiYXBwbGVcIjp0cnVlLFwiYXF1YXJlbGxlXCI6dHJ1ZSxcImFyYW1jb1wiOnRydWUsXCJhcmNoaVwiOnRydWUsXCJhcm15XCI6dHJ1ZSxcImFydGVcIjp0cnVlLFwiYXNkYVwiOnRydWUsXCJhc3NvY2lhdGVzXCI6dHJ1ZSxcImF0aGxldGFcIjp0cnVlLFwiYXR0b3JuZXlcIjp0cnVlLFwiYXVjdGlvblwiOnRydWUsXCJhdWRpXCI6dHJ1ZSxcImF1ZGlibGVcIjp0cnVlLFwiYXVkaW9cIjp0cnVlLFwiYXVzcG9zdFwiOnRydWUsXCJhdXRob3JcIjp0cnVlLFwiYXV0b1wiOnRydWUsXCJhdXRvc1wiOnRydWUsXCJhdmlhbmNhXCI6dHJ1ZSxcImF3c1wiOnRydWUsXCJheGFcIjp0cnVlLFwiYXp1cmVcIjp0cnVlLFwiYmFieVwiOnRydWUsXCJiYWlkdVwiOnRydWUsXCJiYW5hbWV4XCI6dHJ1ZSxcImJhbmFuYXJlcHVibGljXCI6dHJ1ZSxcImJhbmRcIjp0cnVlLFwiYmFua1wiOnRydWUsXCJiYXJcIjp0cnVlLFwiYmFyY2Vsb25hXCI6dHJ1ZSxcImJhcmNsYXljYXJkXCI6dHJ1ZSxcImJhcmNsYXlzXCI6dHJ1ZSxcImJhcmVmb290XCI6dHJ1ZSxcImJhcmdhaW5zXCI6dHJ1ZSxcImJhc2tldGJhbGxcIjp0cnVlLFwiYmF1aGF1c1wiOnRydWUsXCJiYXllcm5cIjp0cnVlLFwiYmJjXCI6dHJ1ZSxcImJidFwiOnRydWUsXCJiYnZhXCI6dHJ1ZSxcImJjZ1wiOnRydWUsXCJiY25cIjp0cnVlLFwiYmVhdHNcIjp0cnVlLFwiYmVlclwiOnRydWUsXCJiZW50bGV5XCI6dHJ1ZSxcImJlcmxpblwiOnRydWUsXCJiZXN0XCI6dHJ1ZSxcImJlc3RidXlcIjp0cnVlLFwiYmV0XCI6dHJ1ZSxcImJoYXJ0aVwiOnRydWUsXCJiaWJsZVwiOnRydWUsXCJiaWRcIjp0cnVlLFwiYmlrZVwiOnRydWUsXCJiaW5nXCI6dHJ1ZSxcImJpbmdvXCI6dHJ1ZSxcImJpb1wiOnRydWUsXCJibGFja1wiOnRydWUsXCJibGFja2ZyaWRheVwiOnRydWUsXCJibGFuY29cIjp0cnVlLFwiYmxvY2tidXN0ZXJcIjp0cnVlLFwiYmxvZ1wiOnRydWUsXCJibG9vbWJlcmdcIjp0cnVlLFwiYmx1ZVwiOnRydWUsXCJibXNcIjp0cnVlLFwiYm13XCI6dHJ1ZSxcImJubFwiOnRydWUsXCJibnBwYXJpYmFzXCI6dHJ1ZSxcImJvYXRzXCI6dHJ1ZSxcImJvZWhyaW5nZXJcIjp0cnVlLFwiYm9mYVwiOnRydWUsXCJib21cIjp0cnVlLFwiYm9uZFwiOnRydWUsXCJib29cIjp0cnVlLFwiYm9va1wiOnRydWUsXCJib29raW5nXCI6dHJ1ZSxcImJvb3RzXCI6dHJ1ZSxcImJvc2NoXCI6dHJ1ZSxcImJvc3Rpa1wiOnRydWUsXCJib3RcIjp0cnVlLFwiYm91dGlxdWVcIjp0cnVlLFwiYnJhZGVzY29cIjp0cnVlLFwiYnJpZGdlc3RvbmVcIjp0cnVlLFwiYnJvYWR3YXlcIjp0cnVlLFwiYnJva2VyXCI6dHJ1ZSxcImJyb3RoZXJcIjp0cnVlLFwiYnJ1c3NlbHNcIjp0cnVlLFwiYnVkYXBlc3RcIjp0cnVlLFwiYnVnYXR0aVwiOnRydWUsXCJidWlsZFwiOnRydWUsXCJidWlsZGVyc1wiOnRydWUsXCJidXNpbmVzc1wiOnRydWUsXCJidXlcIjp0cnVlLFwiYnV6elwiOnRydWUsXCJiemhcIjp0cnVlLFwiY2FiXCI6dHJ1ZSxcImNhZmVcIjp0cnVlLFwiY2FsXCI6dHJ1ZSxcImNhbGxcIjp0cnVlLFwiY2Fsdmlua2xlaW5cIjp0cnVlLFwiY2FtZXJhXCI6dHJ1ZSxcImNhbXBcIjp0cnVlLFwiY2FuY2VycmVzZWFyY2hcIjp0cnVlLFwiY2Fub25cIjp0cnVlLFwiY2FwZXRvd25cIjp0cnVlLFwiY2FwaXRhbFwiOnRydWUsXCJjYXBpdGFsb25lXCI6dHJ1ZSxcImNhclwiOnRydWUsXCJjYXJhdmFuXCI6dHJ1ZSxcImNhcmRzXCI6dHJ1ZSxcImNhcmVcIjp0cnVlLFwiY2FyZWVyXCI6dHJ1ZSxcImNhcmVlcnNcIjp0cnVlLFwiY2Fyc1wiOnRydWUsXCJjYXJ0aWVyXCI6dHJ1ZSxcImNhc2FcIjp0cnVlLFwiY2FzZVwiOnRydWUsXCJjYXNlaWhcIjp0cnVlLFwiY2FzaFwiOnRydWUsXCJjYXNpbm9cIjp0cnVlLFwiY2F0ZXJpbmdcIjp0cnVlLFwiY2JhXCI6dHJ1ZSxcImNiblwiOnRydWUsXCJjYnJlXCI6dHJ1ZSxcImNic1wiOnRydWUsXCJjZWJcIjp0cnVlLFwiY2VudGVyXCI6dHJ1ZSxcImNlb1wiOnRydWUsXCJjZXJuXCI6dHJ1ZSxcImNmYVwiOnRydWUsXCJjZmRcIjp0cnVlLFwiY2hhbmVsXCI6dHJ1ZSxcImNoYW5uZWxcIjp0cnVlLFwiY2hhc2VcIjp0cnVlLFwiY2hhdFwiOnRydWUsXCJjaGVhcFwiOnRydWUsXCJjaGludGFpXCI6dHJ1ZSxcImNobG9lXCI6dHJ1ZSxcImNocmlzdG1hc1wiOnRydWUsXCJjaHJvbWVcIjp0cnVlLFwiY2hyeXNsZXJcIjp0cnVlLFwiY2h1cmNoXCI6dHJ1ZSxcImNpcHJpYW5pXCI6dHJ1ZSxcImNpcmNsZVwiOnRydWUsXCJjaXNjb1wiOnRydWUsXCJjaXRhZGVsXCI6dHJ1ZSxcImNpdGlcIjp0cnVlLFwiY2l0aWNcIjp0cnVlLFwiY2l0eVwiOnRydWUsXCJjaXR5ZWF0c1wiOnRydWUsXCJjbGFpbXNcIjp0cnVlLFwiY2xlYW5pbmdcIjp0cnVlLFwiY2xpY2tcIjp0cnVlLFwiY2xpbmljXCI6dHJ1ZSxcImNsb3RoaW5nXCI6dHJ1ZSxcImNsb3VkXCI6dHJ1ZSxcImNsdWJcIjp0cnVlLFwiY2x1Ym1lZFwiOnRydWUsXCJjb2FjaFwiOnRydWUsXCJjb2Rlc1wiOnRydWUsXCJjb2ZmZWVcIjp0cnVlLFwiY29sbGVnZVwiOnRydWUsXCJjb2xvZ25lXCI6dHJ1ZSxcImNvbWNhc3RcIjp0cnVlLFwiY29tbWJhbmtcIjp0cnVlLFwiY29tbXVuaXR5XCI6dHJ1ZSxcImNvbXBhbnlcIjp0cnVlLFwiY29tcHV0ZXJcIjp0cnVlLFwiY29tc2VjXCI6dHJ1ZSxcImNvbmRvc1wiOnRydWUsXCJjb25zdHJ1Y3Rpb25cIjp0cnVlLFwiY29uc3VsdGluZ1wiOnRydWUsXCJjb250YWN0XCI6dHJ1ZSxcImNvbnRyYWN0b3JzXCI6dHJ1ZSxcImNvb2tpbmdcIjp0cnVlLFwiY29va2luZ2NoYW5uZWxcIjp0cnVlLFwiY29vbFwiOnRydWUsXCJjb3JzaWNhXCI6dHJ1ZSxcImNvdW50cnlcIjp0cnVlLFwiY291cG9uXCI6dHJ1ZSxcImNvdXBvbnNcIjp0cnVlLFwiY291cnNlc1wiOnRydWUsXCJjcmVkaXRcIjp0cnVlLFwiY3JlZGl0Y2FyZFwiOnRydWUsXCJjcmVkaXR1bmlvblwiOnRydWUsXCJjcmlja2V0XCI6dHJ1ZSxcImNyb3duXCI6dHJ1ZSxcImNyc1wiOnRydWUsXCJjcnVpc2VzXCI6dHJ1ZSxcImNzY1wiOnRydWUsXCJjdWlzaW5lbGxhXCI6dHJ1ZSxcImN5bXJ1XCI6dHJ1ZSxcImN5b3VcIjp0cnVlLFwiZGFidXJcIjp0cnVlLFwiZGFkXCI6dHJ1ZSxcImRhbmNlXCI6dHJ1ZSxcImRhdGVcIjp0cnVlLFwiZGF0aW5nXCI6dHJ1ZSxcImRhdHN1blwiOnRydWUsXCJkYXlcIjp0cnVlLFwiZGNsa1wiOnRydWUsXCJkZHNcIjp0cnVlLFwiZGVhbFwiOnRydWUsXCJkZWFsZXJcIjp0cnVlLFwiZGVhbHNcIjp0cnVlLFwiZGVncmVlXCI6dHJ1ZSxcImRlbGl2ZXJ5XCI6dHJ1ZSxcImRlbGxcIjp0cnVlLFwiZGVsb2l0dGVcIjp0cnVlLFwiZGVsdGFcIjp0cnVlLFwiZGVtb2NyYXRcIjp0cnVlLFwiZGVudGFsXCI6dHJ1ZSxcImRlbnRpc3RcIjp0cnVlLFwiZGVzaVwiOnRydWUsXCJkZXNpZ25cIjp0cnVlLFwiZGV2XCI6dHJ1ZSxcImRobFwiOnRydWUsXCJkaWFtb25kc1wiOnRydWUsXCJkaWV0XCI6dHJ1ZSxcImRpZ2l0YWxcIjp0cnVlLFwiZGlyZWN0XCI6dHJ1ZSxcImRpcmVjdG9yeVwiOnRydWUsXCJkaXNjb3VudFwiOnRydWUsXCJkaXNjb3ZlclwiOnRydWUsXCJkaXNoXCI6dHJ1ZSxcImRucFwiOnRydWUsXCJkb2NzXCI6dHJ1ZSxcImRvZGdlXCI6dHJ1ZSxcImRvZ1wiOnRydWUsXCJkb2hhXCI6dHJ1ZSxcImRvbWFpbnNcIjp0cnVlLFwiZG9vc2FuXCI6dHJ1ZSxcImRvdFwiOnRydWUsXCJkb3dubG9hZFwiOnRydWUsXCJkcml2ZVwiOnRydWUsXCJkc3R2XCI6dHJ1ZSxcImR0dlwiOnRydWUsXCJkdWJhaVwiOnRydWUsXCJkdWNrXCI6dHJ1ZSxcImR1bmxvcFwiOnRydWUsXCJkdW5zXCI6dHJ1ZSxcImR1cG9udFwiOnRydWUsXCJkdXJiYW5cIjp0cnVlLFwiZHZhZ1wiOnRydWUsXCJkd2dcIjp0cnVlLFwiZWFydGhcIjp0cnVlLFwiZWF0XCI6dHJ1ZSxcImVkZWthXCI6dHJ1ZSxcImVkdWNhdGlvblwiOnRydWUsXCJlbWFpbFwiOnRydWUsXCJlbWVyY2tcIjp0cnVlLFwiZW1lcnNvblwiOnRydWUsXCJlbmVyZ3lcIjp0cnVlLFwiZW5naW5lZXJcIjp0cnVlLFwiZW5naW5lZXJpbmdcIjp0cnVlLFwiZW50ZXJwcmlzZXNcIjp0cnVlLFwiZXBvc3RcIjp0cnVlLFwiZXBzb25cIjp0cnVlLFwiZXF1aXBtZW50XCI6dHJ1ZSxcImVyaWNzc29uXCI6dHJ1ZSxcImVybmlcIjp0cnVlLFwiZXNxXCI6dHJ1ZSxcImVzdGF0ZVwiOnRydWUsXCJlc3VyYW5jZVwiOnRydWUsXCJldGlzYWxhdFwiOnRydWUsXCJldXJvdmlzaW9uXCI6dHJ1ZSxcImV1c1wiOnRydWUsXCJldmVudHNcIjp0cnVlLFwiZXZlcmJhbmtcIjp0cnVlLFwiZXhjaGFuZ2VcIjp0cnVlLFwiZXhwZXJ0XCI6dHJ1ZSxcImV4cG9zZWRcIjp0cnVlLFwiZXhwcmVzc1wiOnRydWUsXCJleHRyYXNwYWNlXCI6dHJ1ZSxcImZhZ2VcIjp0cnVlLFwiZmFpbFwiOnRydWUsXCJmYWlyd2luZHNcIjp0cnVlLFwiZmFpdGhcIjp0cnVlLFwiZmFtaWx5XCI6dHJ1ZSxcImZhblwiOnRydWUsXCJmYW5zXCI6dHJ1ZSxcImZhcm1cIjp0cnVlLFwiZmFybWVyc1wiOnRydWUsXCJmYXNoaW9uXCI6dHJ1ZSxcImZhc3RcIjp0cnVlLFwiZmVkZXhcIjp0cnVlLFwiZmVlZGJhY2tcIjp0cnVlLFwiZmVycmFyaVwiOnRydWUsXCJmZXJyZXJvXCI6dHJ1ZSxcImZpYXRcIjp0cnVlLFwiZmlkZWxpdHlcIjp0cnVlLFwiZmlkb1wiOnRydWUsXCJmaWxtXCI6dHJ1ZSxcImZpbmFsXCI6dHJ1ZSxcImZpbmFuY2VcIjp0cnVlLFwiZmluYW5jaWFsXCI6dHJ1ZSxcImZpcmVcIjp0cnVlLFwiZmlyZXN0b25lXCI6dHJ1ZSxcImZpcm1kYWxlXCI6dHJ1ZSxcImZpc2hcIjp0cnVlLFwiZmlzaGluZ1wiOnRydWUsXCJmaXRcIjp0cnVlLFwiZml0bmVzc1wiOnRydWUsXCJmbGlja3JcIjp0cnVlLFwiZmxpZ2h0c1wiOnRydWUsXCJmbGlyXCI6dHJ1ZSxcImZsb3Jpc3RcIjp0cnVlLFwiZmxvd2Vyc1wiOnRydWUsXCJmbHNtaWR0aFwiOnRydWUsXCJmbHlcIjp0cnVlLFwiZm9vXCI6dHJ1ZSxcImZvb2RuZXR3b3JrXCI6dHJ1ZSxcImZvb3RiYWxsXCI6dHJ1ZSxcImZvcmRcIjp0cnVlLFwiZm9yZXhcIjp0cnVlLFwiZm9yc2FsZVwiOnRydWUsXCJmb3J1bVwiOnRydWUsXCJmb3VuZGF0aW9uXCI6dHJ1ZSxcImZveFwiOnRydWUsXCJmcmVzZW5pdXNcIjp0cnVlLFwiZnJsXCI6dHJ1ZSxcImZyb2dhbnNcIjp0cnVlLFwiZnJvbnRkb29yXCI6dHJ1ZSxcImZyb250aWVyXCI6dHJ1ZSxcImZ0clwiOnRydWUsXCJmdWppdHN1XCI6dHJ1ZSxcImZ1aml4ZXJveFwiOnRydWUsXCJmdW5kXCI6dHJ1ZSxcImZ1cm5pdHVyZVwiOnRydWUsXCJmdXRib2xcIjp0cnVlLFwiZnlpXCI6dHJ1ZSxcImdhbFwiOnRydWUsXCJnYWxsZXJ5XCI6dHJ1ZSxcImdhbGxvXCI6dHJ1ZSxcImdhbGx1cFwiOnRydWUsXCJnYW1lXCI6dHJ1ZSxcImdhbWVzXCI6dHJ1ZSxcImdhcFwiOnRydWUsXCJnYXJkZW5cIjp0cnVlLFwiZ2JpelwiOnRydWUsXCJnZG5cIjp0cnVlLFwiZ2VhXCI6dHJ1ZSxcImdlbnRcIjp0cnVlLFwiZ2VudGluZ1wiOnRydWUsXCJnZW9yZ2VcIjp0cnVlLFwiZ2dlZVwiOnRydWUsXCJnaWZ0XCI6dHJ1ZSxcImdpZnRzXCI6dHJ1ZSxcImdpdmVzXCI6dHJ1ZSxcImdpdmluZ1wiOnRydWUsXCJnbGFkZVwiOnRydWUsXCJnbGFzc1wiOnRydWUsXCJnbGVcIjp0cnVlLFwiZ2xvYmFsXCI6dHJ1ZSxcImdsb2JvXCI6dHJ1ZSxcImdtYWlsXCI6dHJ1ZSxcImdtb1wiOnRydWUsXCJnbXhcIjp0cnVlLFwiZ29kYWRkeVwiOnRydWUsXCJnb2xkXCI6dHJ1ZSxcImdvbGRwb2ludFwiOnRydWUsXCJnb2xmXCI6dHJ1ZSxcImdvb1wiOnRydWUsXCJnb29kaGFuZHNcIjp0cnVlLFwiZ29vZHllYXJcIjp0cnVlLFwiZ29vZ1wiOnRydWUsXCJnb29nbGVcIjp0cnVlLFwiZ29wXCI6dHJ1ZSxcImdvdFwiOnRydWUsXCJnb3R2XCI6dHJ1ZSxcImdyYWluZ2VyXCI6dHJ1ZSxcImdyYXBoaWNzXCI6dHJ1ZSxcImdyYXRpc1wiOnRydWUsXCJncmVlblwiOnRydWUsXCJncmlwZVwiOnRydWUsXCJncm91cFwiOnRydWUsXCJndWFyZGlhblwiOnRydWUsXCJndWNjaVwiOnRydWUsXCJndWdlXCI6dHJ1ZSxcImd1aWRlXCI6dHJ1ZSxcImd1aXRhcnNcIjp0cnVlLFwiZ3VydVwiOnRydWUsXCJoYW1idXJnXCI6dHJ1ZSxcImhhbmdvdXRcIjp0cnVlLFwiaGF1c1wiOnRydWUsXCJoYm9cIjp0cnVlLFwiaGRmY1wiOnRydWUsXCJoZGZjYmFua1wiOnRydWUsXCJoZWFsdGhcIjp0cnVlLFwiaGVhbHRoY2FyZVwiOnRydWUsXCJoZWxwXCI6dHJ1ZSxcImhlbHNpbmtpXCI6dHJ1ZSxcImhlcmVcIjp0cnVlLFwiaGVybWVzXCI6dHJ1ZSxcImhndHZcIjp0cnVlLFwiaGlwaG9wXCI6dHJ1ZSxcImhpc2FtaXRzdVwiOnRydWUsXCJoaXRhY2hpXCI6dHJ1ZSxcImhpdlwiOnRydWUsXCJoa3RcIjp0cnVlLFwiaG9ja2V5XCI6dHJ1ZSxcImhvbGRpbmdzXCI6dHJ1ZSxcImhvbGlkYXlcIjp0cnVlLFwiaG9tZWRlcG90XCI6dHJ1ZSxcImhvbWVnb29kc1wiOnRydWUsXCJob21lc1wiOnRydWUsXCJob21lc2Vuc2VcIjp0cnVlLFwiaG9uZGFcIjp0cnVlLFwiaG9uZXl3ZWxsXCI6dHJ1ZSxcImhvcnNlXCI6dHJ1ZSxcImhvc3RcIjp0cnVlLFwiaG9zdGluZ1wiOnRydWUsXCJob3RcIjp0cnVlLFwiaG90ZWxlc1wiOnRydWUsXCJob3RtYWlsXCI6dHJ1ZSxcImhvdXNlXCI6dHJ1ZSxcImhvd1wiOnRydWUsXCJoc2JjXCI6dHJ1ZSxcImh0Y1wiOnRydWUsXCJodWdoZXNcIjp0cnVlLFwiaHlhdHRcIjp0cnVlLFwiaHl1bmRhaVwiOnRydWUsXCJpYm1cIjp0cnVlLFwiaWNiY1wiOnRydWUsXCJpY2VcIjp0cnVlLFwiaWN1XCI6dHJ1ZSxcImllZWVcIjp0cnVlLFwiaWZtXCI6dHJ1ZSxcImlpbmV0XCI6dHJ1ZSxcImlrYW5vXCI6dHJ1ZSxcImltYW1hdFwiOnRydWUsXCJpbWRiXCI6dHJ1ZSxcImltbW9cIjp0cnVlLFwiaW1tb2JpbGllblwiOnRydWUsXCJpbmR1c3RyaWVzXCI6dHJ1ZSxcImluZmluaXRpXCI6dHJ1ZSxcImluZ1wiOnRydWUsXCJpbmtcIjp0cnVlLFwiaW5zdGl0dXRlXCI6dHJ1ZSxcImluc3VyYW5jZVwiOnRydWUsXCJpbnN1cmVcIjp0cnVlLFwiaW50ZWxcIjp0cnVlLFwiaW50ZXJuYXRpb25hbFwiOnRydWUsXCJpbnR1aXRcIjp0cnVlLFwiaW52ZXN0bWVudHNcIjp0cnVlLFwiaXBpcmFuZ2FcIjp0cnVlLFwiaXJpc2hcIjp0cnVlLFwiaXNlbGVjdFwiOnRydWUsXCJpc21haWxpXCI6dHJ1ZSxcImlzdFwiOnRydWUsXCJpc3RhbmJ1bFwiOnRydWUsXCJpdGF1XCI6dHJ1ZSxcIml0dlwiOnRydWUsXCJpdmVjb1wiOnRydWUsXCJpd2NcIjp0cnVlLFwiamFndWFyXCI6dHJ1ZSxcImphdmFcIjp0cnVlLFwiamNiXCI6dHJ1ZSxcImpjcFwiOnRydWUsXCJqZWVwXCI6dHJ1ZSxcImpldHp0XCI6dHJ1ZSxcImpld2VscnlcIjp0cnVlLFwiamlvXCI6dHJ1ZSxcImpsY1wiOnRydWUsXCJqbGxcIjp0cnVlLFwiam1wXCI6dHJ1ZSxcImpualwiOnRydWUsXCJqb2J1cmdcIjp0cnVlLFwiam90XCI6dHJ1ZSxcImpveVwiOnRydWUsXCJqcG1vcmdhblwiOnRydWUsXCJqcHJzXCI6dHJ1ZSxcImp1ZWdvc1wiOnRydWUsXCJqdW5pcGVyXCI6dHJ1ZSxcImthdWZlblwiOnRydWUsXCJrZGRpXCI6dHJ1ZSxcImtlcnJ5aG90ZWxzXCI6dHJ1ZSxcImtlcnJ5bG9naXN0aWNzXCI6dHJ1ZSxcImtlcnJ5cHJvcGVydGllc1wiOnRydWUsXCJrZmhcIjp0cnVlLFwia2lhXCI6dHJ1ZSxcImtpbVwiOnRydWUsXCJraW5kZXJcIjp0cnVlLFwia2luZGxlXCI6dHJ1ZSxcImtpdGNoZW5cIjp0cnVlLFwia2l3aVwiOnRydWUsXCJrb2VsblwiOnRydWUsXCJrb21hdHN1XCI6dHJ1ZSxcImtvc2hlclwiOnRydWUsXCJrcG1nXCI6dHJ1ZSxcImtwblwiOnRydWUsXCJrcmRcIjp0cnVlLFwia3JlZFwiOnRydWUsXCJrdW9rZ3JvdXBcIjp0cnVlLFwia3lrbmV0XCI6dHJ1ZSxcImt5b3RvXCI6dHJ1ZSxcImxhY2FpeGFcIjp0cnVlLFwibGFkYnJva2VzXCI6dHJ1ZSxcImxhbWJvcmdoaW5pXCI6dHJ1ZSxcImxhbmNhc3RlclwiOnRydWUsXCJsYW5jaWFcIjp0cnVlLFwibGFuY29tZVwiOnRydWUsXCJsYW5kXCI6dHJ1ZSxcImxhbmRyb3ZlclwiOnRydWUsXCJsYW54ZXNzXCI6dHJ1ZSxcImxhc2FsbGVcIjp0cnVlLFwibGF0XCI6dHJ1ZSxcImxhdGlub1wiOnRydWUsXCJsYXRyb2JlXCI6dHJ1ZSxcImxhd1wiOnRydWUsXCJsYXd5ZXJcIjp0cnVlLFwibGRzXCI6dHJ1ZSxcImxlYXNlXCI6dHJ1ZSxcImxlY2xlcmNcIjp0cnVlLFwibGVmcmFrXCI6dHJ1ZSxcImxlZ2FsXCI6dHJ1ZSxcImxlZ29cIjp0cnVlLFwibGV4dXNcIjp0cnVlLFwibGdidFwiOnRydWUsXCJsaWFpc29uXCI6dHJ1ZSxcImxpZGxcIjp0cnVlLFwibGlmZVwiOnRydWUsXCJsaWZlaW5zdXJhbmNlXCI6dHJ1ZSxcImxpZmVzdHlsZVwiOnRydWUsXCJsaWdodGluZ1wiOnRydWUsXCJsaWtlXCI6dHJ1ZSxcImxpbGx5XCI6dHJ1ZSxcImxpbWl0ZWRcIjp0cnVlLFwibGltb1wiOnRydWUsXCJsaW5jb2xuXCI6dHJ1ZSxcImxpbmRlXCI6dHJ1ZSxcImxpbmtcIjp0cnVlLFwibGlwc3lcIjp0cnVlLFwibGl2ZVwiOnRydWUsXCJsaXZpbmdcIjp0cnVlLFwibGl4aWxcIjp0cnVlLFwibG9hblwiOnRydWUsXCJsb2Fuc1wiOnRydWUsXCJsb2NrZXJcIjp0cnVlLFwibG9jdXNcIjp0cnVlLFwibG9mdFwiOnRydWUsXCJsb2xcIjp0cnVlLFwibG9uZG9uXCI6dHJ1ZSxcImxvdHRlXCI6dHJ1ZSxcImxvdHRvXCI6dHJ1ZSxcImxvdmVcIjp0cnVlLFwibHBsXCI6dHJ1ZSxcImxwbGZpbmFuY2lhbFwiOnRydWUsXCJsdGRcIjp0cnVlLFwibHRkYVwiOnRydWUsXCJsdW5kYmVja1wiOnRydWUsXCJsdXBpblwiOnRydWUsXCJsdXhlXCI6dHJ1ZSxcImx1eHVyeVwiOnRydWUsXCJtYWN5c1wiOnRydWUsXCJtYWRyaWRcIjp0cnVlLFwibWFpZlwiOnRydWUsXCJtYWlzb25cIjp0cnVlLFwibWFrZXVwXCI6dHJ1ZSxcIm1hblwiOnRydWUsXCJtYW5hZ2VtZW50XCI6dHJ1ZSxcIm1hbmdvXCI6dHJ1ZSxcIm1hcmtldFwiOnRydWUsXCJtYXJrZXRpbmdcIjp0cnVlLFwibWFya2V0c1wiOnRydWUsXCJtYXJyaW90dFwiOnRydWUsXCJtYXJzaGFsbHNcIjp0cnVlLFwibWFzZXJhdGlcIjp0cnVlLFwibWF0dGVsXCI6dHJ1ZSxcIm1iYVwiOnRydWUsXCJtY2RcIjp0cnVlLFwibWNkb25hbGRzXCI6dHJ1ZSxcIm1ja2luc2V5XCI6dHJ1ZSxcIm1lZFwiOnRydWUsXCJtZWRpYVwiOnRydWUsXCJtZWV0XCI6dHJ1ZSxcIm1lbGJvdXJuZVwiOnRydWUsXCJtZW1lXCI6dHJ1ZSxcIm1lbW9yaWFsXCI6dHJ1ZSxcIm1lblwiOnRydWUsXCJtZW51XCI6dHJ1ZSxcIm1lb1wiOnRydWUsXCJtZXRsaWZlXCI6dHJ1ZSxcIm1pYW1pXCI6dHJ1ZSxcIm1pY3Jvc29mdFwiOnRydWUsXCJtaW5pXCI6dHJ1ZSxcIm1pbnRcIjp0cnVlLFwibWl0XCI6dHJ1ZSxcIm1pdHN1YmlzaGlcIjp0cnVlLFwibWxiXCI6dHJ1ZSxcIm1sc1wiOnRydWUsXCJtbWFcIjp0cnVlLFwibW5ldFwiOnRydWUsXCJtb2JpbHlcIjp0cnVlLFwibW9kYVwiOnRydWUsXCJtb2VcIjp0cnVlLFwibW9pXCI6dHJ1ZSxcIm1vbVwiOnRydWUsXCJtb25hc2hcIjp0cnVlLFwibW9uZXlcIjp0cnVlLFwibW9uc3RlclwiOnRydWUsXCJtb250YmxhbmNcIjp0cnVlLFwibW9wYXJcIjp0cnVlLFwibW9ybW9uXCI6dHJ1ZSxcIm1vcnRnYWdlXCI6dHJ1ZSxcIm1vc2Nvd1wiOnRydWUsXCJtb3RvXCI6dHJ1ZSxcIm1vdG9yY3ljbGVzXCI6dHJ1ZSxcIm1vdlwiOnRydWUsXCJtb3ZpZVwiOnRydWUsXCJtb3Zpc3RhclwiOnRydWUsXCJtc2RcIjp0cnVlLFwibXRuXCI6dHJ1ZSxcIm10cGNcIjp0cnVlLFwibXRyXCI6dHJ1ZSxcIm11bHRpY2hvaWNlXCI6dHJ1ZSxcIm11dHVhbFwiOnRydWUsXCJtdXR1ZWxsZVwiOnRydWUsXCJtemFuc2ltYWdpY1wiOnRydWUsXCJuYWJcIjp0cnVlLFwibmFkZXhcIjp0cnVlLFwibmFnb3lhXCI6dHJ1ZSxcIm5hc3BlcnNcIjp0cnVlLFwibmF0aW9ud2lkZVwiOnRydWUsXCJuYXR1cmFcIjp0cnVlLFwibmF2eVwiOnRydWUsXCJuYmFcIjp0cnVlLFwibmVjXCI6dHJ1ZSxcIm5ldGJhbmtcIjp0cnVlLFwibmV0ZmxpeFwiOnRydWUsXCJuZXR3b3JrXCI6dHJ1ZSxcIm5ldXN0YXJcIjp0cnVlLFwibmV3XCI6dHJ1ZSxcIm5ld2hvbGxhbmRcIjp0cnVlLFwibmV3c1wiOnRydWUsXCJuZXh0XCI6dHJ1ZSxcIm5leHRkaXJlY3RcIjp0cnVlLFwibmV4dXNcIjp0cnVlLFwibmZsXCI6dHJ1ZSxcIm5nb1wiOnRydWUsXCJuaGtcIjp0cnVlLFwibmljb1wiOnRydWUsXCJuaWtlXCI6dHJ1ZSxcIm5pa29uXCI6dHJ1ZSxcIm5pbmphXCI6dHJ1ZSxcIm5pc3NhblwiOnRydWUsXCJub2tpYVwiOnRydWUsXCJub3J0aHdlc3Rlcm5tdXR1YWxcIjp0cnVlLFwibm9ydG9uXCI6dHJ1ZSxcIm5vd1wiOnRydWUsXCJub3dydXpcIjp0cnVlLFwibm93dHZcIjp0cnVlLFwibnJhXCI6dHJ1ZSxcIm5yd1wiOnRydWUsXCJudHRcIjp0cnVlLFwibnljXCI6dHJ1ZSxcIm9iaVwiOnRydWUsXCJvYnNlcnZlclwiOnRydWUsXCJvZmZcIjp0cnVlLFwib2ZmaWNlXCI6dHJ1ZSxcIm9raW5hd2FcIjp0cnVlLFwib2xheWFuXCI6dHJ1ZSxcIm9sYXlhbmdyb3VwXCI6dHJ1ZSxcIm9sZG5hdnlcIjp0cnVlLFwib2xsb1wiOnRydWUsXCJvbWVnYVwiOnRydWUsXCJvbmVcIjp0cnVlLFwib25nXCI6dHJ1ZSxcIm9ubFwiOnRydWUsXCJvbmxpbmVcIjp0cnVlLFwib255b3Vyc2lkZVwiOnRydWUsXCJvb29cIjp0cnVlLFwib3BlblwiOnRydWUsXCJvcmFjbGVcIjp0cnVlLFwib3JhbmdlXCI6dHJ1ZSxcIm9yZ2FuaWNcIjp0cnVlLFwib3JpZW50ZXhwcmVzc1wiOnRydWUsXCJvc2FrYVwiOnRydWUsXCJvdHN1a2FcIjp0cnVlLFwib3R0XCI6dHJ1ZSxcIm92aFwiOnRydWUsXCJwYWdlXCI6dHJ1ZSxcInBhbXBlcmVkY2hlZlwiOnRydWUsXCJwYW5hc29uaWNcIjp0cnVlLFwicGFuZXJhaVwiOnRydWUsXCJwYXJpc1wiOnRydWUsXCJwYXJzXCI6dHJ1ZSxcInBhcnRuZXJzXCI6dHJ1ZSxcInBhcnRzXCI6dHJ1ZSxcInBhcnR5XCI6dHJ1ZSxcInBhc3NhZ2Vuc1wiOnRydWUsXCJwYXlcIjp0cnVlLFwicGF5dVwiOnRydWUsXCJwY2N3XCI6dHJ1ZSxcInBldFwiOnRydWUsXCJwZml6ZXJcIjp0cnVlLFwicGhhcm1hY3lcIjp0cnVlLFwicGhpbGlwc1wiOnRydWUsXCJwaG90b1wiOnRydWUsXCJwaG90b2dyYXBoeVwiOnRydWUsXCJwaG90b3NcIjp0cnVlLFwicGh5c2lvXCI6dHJ1ZSxcInBpYWdldFwiOnRydWUsXCJwaWNzXCI6dHJ1ZSxcInBpY3RldFwiOnRydWUsXCJwaWN0dXJlc1wiOnRydWUsXCJwaWRcIjp0cnVlLFwicGluXCI6dHJ1ZSxcInBpbmdcIjp0cnVlLFwicGlua1wiOnRydWUsXCJwaW9uZWVyXCI6dHJ1ZSxcInBpenphXCI6dHJ1ZSxcInBsYWNlXCI6dHJ1ZSxcInBsYXlcIjp0cnVlLFwicGxheXN0YXRpb25cIjp0cnVlLFwicGx1bWJpbmdcIjp0cnVlLFwicGx1c1wiOnRydWUsXCJwbmNcIjp0cnVlLFwicG9obFwiOnRydWUsXCJwb2tlclwiOnRydWUsXCJwb2xpdGllXCI6dHJ1ZSxcInBvcm5cIjp0cnVlLFwicHJhbWVyaWNhXCI6dHJ1ZSxcInByYXhpXCI6dHJ1ZSxcInByZXNzXCI6dHJ1ZSxcInByaW1lXCI6dHJ1ZSxcInByb2RcIjp0cnVlLFwicHJvZHVjdGlvbnNcIjp0cnVlLFwicHJvZlwiOnRydWUsXCJwcm9ncmVzc2l2ZVwiOnRydWUsXCJwcm9tb1wiOnRydWUsXCJwcm9wZXJ0aWVzXCI6dHJ1ZSxcInByb3BlcnR5XCI6dHJ1ZSxcInByb3RlY3Rpb25cIjp0cnVlLFwicHJ1XCI6dHJ1ZSxcInBydWRlbnRpYWxcIjp0cnVlLFwicHViXCI6dHJ1ZSxcInFwb25cIjp0cnVlLFwicXVlYmVjXCI6dHJ1ZSxcInF1ZXN0XCI6dHJ1ZSxcInF2Y1wiOnRydWUsXCJyYWNpbmdcIjp0cnVlLFwicmFpZFwiOnRydWUsXCJyZWFkXCI6dHJ1ZSxcInJlYWxlc3RhdGVcIjp0cnVlLFwicmVhbHRvclwiOnRydWUsXCJyZWFsdHlcIjp0cnVlLFwicmVjaXBlc1wiOnRydWUsXCJyZWRcIjp0cnVlLFwicmVkc3RvbmVcIjp0cnVlLFwicmVkdW1icmVsbGFcIjp0cnVlLFwicmVoYWJcIjp0cnVlLFwicmVpc2VcIjp0cnVlLFwicmVpc2VuXCI6dHJ1ZSxcInJlaXRcIjp0cnVlLFwicmVsaWFuY2VcIjp0cnVlLFwicmVuXCI6dHJ1ZSxcInJlbnRcIjp0cnVlLFwicmVudGFsc1wiOnRydWUsXCJyZXBhaXJcIjp0cnVlLFwicmVwb3J0XCI6dHJ1ZSxcInJlcHVibGljYW5cIjp0cnVlLFwicmVzdFwiOnRydWUsXCJyZXN0YXVyYW50XCI6dHJ1ZSxcInJldmlld1wiOnRydWUsXCJyZXZpZXdzXCI6dHJ1ZSxcInJleHJvdGhcIjp0cnVlLFwicmljaFwiOnRydWUsXCJyaWNoYXJkbGlcIjp0cnVlLFwicmljb2hcIjp0cnVlLFwicmlnaHRhdGhvbWVcIjp0cnVlLFwicmlsXCI6dHJ1ZSxcInJpb1wiOnRydWUsXCJyaXBcIjp0cnVlLFwicm9jaGVyXCI6dHJ1ZSxcInJvY2tzXCI6dHJ1ZSxcInJvZGVvXCI6dHJ1ZSxcInJvZ2Vyc1wiOnRydWUsXCJyb29tXCI6dHJ1ZSxcInJzdnBcIjp0cnVlLFwicnVoclwiOnRydWUsXCJydW5cIjp0cnVlLFwicndlXCI6dHJ1ZSxcInJ5dWt5dVwiOnRydWUsXCJzYWFybGFuZFwiOnRydWUsXCJzYWZlXCI6dHJ1ZSxcInNhZmV0eVwiOnRydWUsXCJzYWt1cmFcIjp0cnVlLFwic2FsZVwiOnRydWUsXCJzYWxvblwiOnRydWUsXCJzYW1zY2x1YlwiOnRydWUsXCJzYW1zdW5nXCI6dHJ1ZSxcInNhbmR2aWtcIjp0cnVlLFwic2FuZHZpa2Nvcm9tYW50XCI6dHJ1ZSxcInNhbm9maVwiOnRydWUsXCJzYXBcIjp0cnVlLFwic2Fwb1wiOnRydWUsXCJzYXJsXCI6dHJ1ZSxcInNhc1wiOnRydWUsXCJzYXZlXCI6dHJ1ZSxcInNheG9cIjp0cnVlLFwic2JpXCI6dHJ1ZSxcInNic1wiOnRydWUsXCJzY2FcIjp0cnVlLFwic2NiXCI6dHJ1ZSxcInNjaGFlZmZsZXJcIjp0cnVlLFwic2NobWlkdFwiOnRydWUsXCJzY2hvbGFyc2hpcHNcIjp0cnVlLFwic2Nob29sXCI6dHJ1ZSxcInNjaHVsZVwiOnRydWUsXCJzY2h3YXJ6XCI6dHJ1ZSxcInNjaWVuY2VcIjp0cnVlLFwic2Nqb2huc29uXCI6dHJ1ZSxcInNjb3JcIjp0cnVlLFwic2NvdFwiOnRydWUsXCJzZWF0XCI6dHJ1ZSxcInNlY3VyZVwiOnRydWUsXCJzZWN1cml0eVwiOnRydWUsXCJzZWVrXCI6dHJ1ZSxcInNlbmVyXCI6dHJ1ZSxcInNlcnZpY2VzXCI6dHJ1ZSxcInNlc1wiOnRydWUsXCJzZXZlblwiOnRydWUsXCJzZXdcIjp0cnVlLFwic2V4XCI6dHJ1ZSxcInNleHlcIjp0cnVlLFwic2ZyXCI6dHJ1ZSxcInNoYW5ncmlsYVwiOnRydWUsXCJzaGFycFwiOnRydWUsXCJzaGF3XCI6dHJ1ZSxcInNoZWxsXCI6dHJ1ZSxcInNoaWFcIjp0cnVlLFwic2hpa3NoYVwiOnRydWUsXCJzaG9lc1wiOnRydWUsXCJzaG91amlcIjp0cnVlLFwic2hvd1wiOnRydWUsXCJzaG93dGltZVwiOnRydWUsXCJzaHJpcmFtXCI6dHJ1ZSxcInNpbGtcIjp0cnVlLFwic2luYVwiOnRydWUsXCJzaW5nbGVzXCI6dHJ1ZSxcInNpdGVcIjp0cnVlLFwic2tpXCI6dHJ1ZSxcInNraW5cIjp0cnVlLFwic2t5XCI6dHJ1ZSxcInNreXBlXCI6dHJ1ZSxcInNsaW5nXCI6dHJ1ZSxcInNtYXJ0XCI6dHJ1ZSxcInNtaWxlXCI6dHJ1ZSxcInNuY2ZcIjp0cnVlLFwic29jY2VyXCI6dHJ1ZSxcInNvY2lhbFwiOnRydWUsXCJzb2Z0YmFua1wiOnRydWUsXCJzb2Z0d2FyZVwiOnRydWUsXCJzb2h1XCI6dHJ1ZSxcInNvbGFyXCI6dHJ1ZSxcInNvbHV0aW9uc1wiOnRydWUsXCJzb25nXCI6dHJ1ZSxcInNvbnlcIjp0cnVlLFwic295XCI6dHJ1ZSxcInNwYWNlXCI6dHJ1ZSxcInNwaWVnZWxcIjp0cnVlLFwic3BvdFwiOnRydWUsXCJzcHJlYWRiZXR0aW5nXCI6dHJ1ZSxcInNybFwiOnRydWUsXCJzcnRcIjp0cnVlLFwic3RhZGFcIjp0cnVlLFwic3RhcGxlc1wiOnRydWUsXCJzdGFyXCI6dHJ1ZSxcInN0YXJodWJcIjp0cnVlLFwic3RhdGViYW5rXCI6dHJ1ZSxcInN0YXRlZmFybVwiOnRydWUsXCJzdGF0b2lsXCI6dHJ1ZSxcInN0Y1wiOnRydWUsXCJzdGNncm91cFwiOnRydWUsXCJzdG9ja2hvbG1cIjp0cnVlLFwic3RvcmFnZVwiOnRydWUsXCJzdG9yZVwiOnRydWUsXCJzdHVkaW9cIjp0cnVlLFwic3R1ZHlcIjp0cnVlLFwic3R5bGVcIjp0cnVlLFwic3Vja3NcIjp0cnVlLFwic3VwZXJzcG9ydFwiOnRydWUsXCJzdXBwbGllc1wiOnRydWUsXCJzdXBwbHlcIjp0cnVlLFwic3VwcG9ydFwiOnRydWUsXCJzdXJmXCI6dHJ1ZSxcInN1cmdlcnlcIjp0cnVlLFwic3V6dWtpXCI6dHJ1ZSxcInN3YXRjaFwiOnRydWUsXCJzd2lmdGNvdmVyXCI6dHJ1ZSxcInN3aXNzXCI6dHJ1ZSxcInN5ZG5leVwiOnRydWUsXCJzeW1hbnRlY1wiOnRydWUsXCJzeXN0ZW1zXCI6dHJ1ZSxcInRhYlwiOnRydWUsXCJ0YWlwZWlcIjp0cnVlLFwidGFsa1wiOnRydWUsXCJ0YW9iYW9cIjp0cnVlLFwidGFyZ2V0XCI6dHJ1ZSxcInRhdGFtb3RvcnNcIjp0cnVlLFwidGF0YXJcIjp0cnVlLFwidGF0dG9vXCI6dHJ1ZSxcInRheFwiOnRydWUsXCJ0YXhpXCI6dHJ1ZSxcInRjaVwiOnRydWUsXCJ0ZGtcIjp0cnVlLFwidGVhbVwiOnRydWUsXCJ0ZWNoXCI6dHJ1ZSxcInRlY2hub2xvZ3lcIjp0cnVlLFwidGVsZWNpdHlcIjp0cnVlLFwidGVsZWZvbmljYVwiOnRydWUsXCJ0ZW1hc2VrXCI6dHJ1ZSxcInRlbm5pc1wiOnRydWUsXCJ0ZXZhXCI6dHJ1ZSxcInRoZFwiOnRydWUsXCJ0aGVhdGVyXCI6dHJ1ZSxcInRoZWF0cmVcIjp0cnVlLFwidGhlZ3VhcmRpYW5cIjp0cnVlLFwidGlhYVwiOnRydWUsXCJ0aWNrZXRzXCI6dHJ1ZSxcInRpZW5kYVwiOnRydWUsXCJ0aWZmYW55XCI6dHJ1ZSxcInRpcHNcIjp0cnVlLFwidGlyZXNcIjp0cnVlLFwidGlyb2xcIjp0cnVlLFwidGptYXh4XCI6dHJ1ZSxcInRqeFwiOnRydWUsXCJ0a21heHhcIjp0cnVlLFwidG1hbGxcIjp0cnVlLFwidG9kYXlcIjp0cnVlLFwidG9reW9cIjp0cnVlLFwidG9vbHNcIjp0cnVlLFwidG9wXCI6dHJ1ZSxcInRvcmF5XCI6dHJ1ZSxcInRvc2hpYmFcIjp0cnVlLFwidG90YWxcIjp0cnVlLFwidG91cnNcIjp0cnVlLFwidG93blwiOnRydWUsXCJ0b3lvdGFcIjp0cnVlLFwidG95c1wiOnRydWUsXCJ0cmFkZVwiOnRydWUsXCJ0cmFkaW5nXCI6dHJ1ZSxcInRyYWluaW5nXCI6dHJ1ZSxcInRyYXZlbGNoYW5uZWxcIjp0cnVlLFwidHJhdmVsZXJzXCI6dHJ1ZSxcInRyYXZlbGVyc2luc3VyYW5jZVwiOnRydWUsXCJ0cnVzdFwiOnRydWUsXCJ0cnZcIjp0cnVlLFwidHViZVwiOnRydWUsXCJ0dWlcIjp0cnVlLFwidHVuZXNcIjp0cnVlLFwidHVzaHVcIjp0cnVlLFwidHZzXCI6dHJ1ZSxcInViYW5rXCI6dHJ1ZSxcInVic1wiOnRydWUsXCJ1Y29ubmVjdFwiOnRydWUsXCJ1bml2ZXJzaXR5XCI6dHJ1ZSxcInVub1wiOnRydWUsXCJ1b2xcIjp0cnVlLFwidXBzXCI6dHJ1ZSxcInZhY2F0aW9uc1wiOnRydWUsXCJ2YW5hXCI6dHJ1ZSxcInZhbmd1YXJkXCI6dHJ1ZSxcInZlZ2FzXCI6dHJ1ZSxcInZlbnR1cmVzXCI6dHJ1ZSxcInZlcmlzaWduXCI6dHJ1ZSxcInZlcnNpY2hlcnVuZ1wiOnRydWUsXCJ2ZXRcIjp0cnVlLFwidmlhamVzXCI6dHJ1ZSxcInZpZGVvXCI6dHJ1ZSxcInZpZ1wiOnRydWUsXCJ2aWtpbmdcIjp0cnVlLFwidmlsbGFzXCI6dHJ1ZSxcInZpblwiOnRydWUsXCJ2aXBcIjp0cnVlLFwidmlyZ2luXCI6dHJ1ZSxcInZpc2FcIjp0cnVlLFwidmlzaW9uXCI6dHJ1ZSxcInZpc3RhXCI6dHJ1ZSxcInZpc3RhcHJpbnRcIjp0cnVlLFwidml2YVwiOnRydWUsXCJ2aXZvXCI6dHJ1ZSxcInZsYWFuZGVyZW5cIjp0cnVlLFwidm9ka2FcIjp0cnVlLFwidm9sa3N3YWdlblwiOnRydWUsXCJ2b3RlXCI6dHJ1ZSxcInZvdGluZ1wiOnRydWUsXCJ2b3RvXCI6dHJ1ZSxcInZveWFnZVwiOnRydWUsXCJ2dWVsb3NcIjp0cnVlLFwid2FsZXNcIjp0cnVlLFwid2FsbWFydFwiOnRydWUsXCJ3YWx0ZXJcIjp0cnVlLFwid2FuZ1wiOnRydWUsXCJ3YW5nZ291XCI6dHJ1ZSxcIndhcm1hblwiOnRydWUsXCJ3YXRjaFwiOnRydWUsXCJ3YXRjaGVzXCI6dHJ1ZSxcIndlYXRoZXJcIjp0cnVlLFwid2VhdGhlcmNoYW5uZWxcIjp0cnVlLFwid2ViY2FtXCI6dHJ1ZSxcIndlYmVyXCI6dHJ1ZSxcIndlYnNpdGVcIjp0cnVlLFwid2VkXCI6dHJ1ZSxcIndlZGRpbmdcIjp0cnVlLFwid2VpYm9cIjp0cnVlLFwid2VpclwiOnRydWUsXCJ3aG9zd2hvXCI6dHJ1ZSxcIndpZW5cIjp0cnVlLFwid2lraVwiOnRydWUsXCJ3aWxsaWFtaGlsbFwiOnRydWUsXCJ3aW5cIjp0cnVlLFwid2luZG93c1wiOnRydWUsXCJ3aW5lXCI6dHJ1ZSxcIndpbm5lcnNcIjp0cnVlLFwid21lXCI6dHJ1ZSxcIndvbHRlcnNrbHV3ZXJcIjp0cnVlLFwid29vZHNpZGVcIjp0cnVlLFwid29ya1wiOnRydWUsXCJ3b3Jrc1wiOnRydWUsXCJ3b3JsZFwiOnRydWUsXCJ3dGNcIjp0cnVlLFwid3RmXCI6dHJ1ZSxcInhib3hcIjp0cnVlLFwieGVyb3hcIjp0cnVlLFwieGZpbml0eVwiOnRydWUsXCJ4aWh1YW5cIjp0cnVlLFwieGluXCI6dHJ1ZSxcInhuLS0xMWI0YzNkXCI6dHJ1ZSxcInhuLS0xY2syZTFiXCI6dHJ1ZSxcInhuLS0xcXF3MjNhXCI6dHJ1ZSxcInhuLS0zMHJyN3lcIjp0cnVlLFwieG4tLTNic3QwMG1cIjp0cnVlLFwieG4tLTNkczQ0M2dcIjp0cnVlLFwieG4tLTNvcTE4dmw4cG4zNmFcIjp0cnVlLFwieG4tLTNweHU4a1wiOnRydWUsXCJ4bi0tNDJjMmQ5YVwiOnRydWUsXCJ4bi0tNDVxMTFjXCI6dHJ1ZSxcInhuLS00Z2JyaW1cIjp0cnVlLFwieG4tLTRncTQ4bGY5alwiOnRydWUsXCJ4bi0tNTVxdzQyZ1wiOnRydWUsXCJ4bi0tNTVxeDVkXCI6dHJ1ZSxcInhuLS01c3UzNGo5MzZiZ3NnXCI6dHJ1ZSxcInhuLS01dHptNWdcIjp0cnVlLFwieG4tLTZmcno4MmdcIjp0cnVlLFwieG4tLTZxcTk4NmIzeGxcIjp0cnVlLFwieG4tLTgwYWR4aGtzXCI6dHJ1ZSxcInhuLS04MGFzZWhkYlwiOnRydWUsXCJ4bi0tODBhc3dnXCI6dHJ1ZSxcInhuLS04eTBhMDYzYVwiOnRydWUsXCJ4bi0tOWRicTJhXCI6dHJ1ZSxcInhuLS05ZXQ1MnVcIjp0cnVlLFwieG4tLTlrcnQwMGFcIjp0cnVlLFwieG4tLWI0dzYwNWZlcmRcIjp0cnVlLFwieG4tLWJjazFiOWE1ZHJlNGNcIjp0cnVlLFwieG4tLWMxYXZnXCI6dHJ1ZSxcInhuLS1jMmJyN2dcIjp0cnVlLFwieG4tLWNjazJiM2JcIjp0cnVlLFwieG4tLWNnNGJraVwiOnRydWUsXCJ4bi0tY3pyNjk0YlwiOnRydWUsXCJ4bi0tY3pyczB0XCI6dHJ1ZSxcInhuLS1jenJ1MmRcIjp0cnVlLFwieG4tLWQxYWNqM2JcIjp0cnVlLFwieG4tLWVja3ZkdGM5ZFwiOnRydWUsXCJ4bi0tZWZ2eTg4aFwiOnRydWUsXCJ4bi0tZXN0djc1Z1wiOnRydWUsXCJ4bi0tZmN0NDI5a1wiOnRydWUsXCJ4bi0tZmhiZWlcIjp0cnVlLFwieG4tLWZpcTIyOGM1aHNcIjp0cnVlLFwieG4tLWZpcTY0YlwiOnRydWUsXCJ4bi0tZmpxNzIwYVwiOnRydWUsXCJ4bi0tZmx3MzUxZVwiOnRydWUsXCJ4bi0tZnp5czhkNjl1dmdtXCI6dHJ1ZSxcInhuLS1nMnh4NDhjXCI6dHJ1ZSxcInhuLS1nY2tyM2YwZlwiOnRydWUsXCJ4bi0taHh0ODE0ZVwiOnRydWUsXCJ4bi0taTFiNmIxYTZhMmVcIjp0cnVlLFwieG4tLWltcjUxM25cIjp0cnVlLFwieG4tLWlvMGE3aVwiOnRydWUsXCJ4bi0tajFhZWZcIjp0cnVlLFwieG4tLWpscTYxdTl3N2JcIjp0cnVlLFwieG4tLWp2cjE4OW1cIjp0cnVlLFwieG4tLWtjcng3N2QxeDRhXCI6dHJ1ZSxcInhuLS1rcHU3MTZmXCI6dHJ1ZSxcInhuLS1rcHV0M2lcIjp0cnVlLFwieG4tLW1nYmEzYTNlanRcIjp0cnVlLFwieG4tLW1nYmE3YzBiYm4wYVwiOnRydWUsXCJ4bi0tbWdiYWFrYzdkdmZcIjp0cnVlLFwieG4tLW1nYmFiMmJkXCI6dHJ1ZSxcInhuLS1tZ2JiOWZicG9iXCI6dHJ1ZSxcInhuLS1tZ2JjYTdkemRvXCI6dHJ1ZSxcInhuLS1tZ2J0M2RoZFwiOnRydWUsXCJ4bi0tbWsxYnU0NGNcIjp0cnVlLFwieG4tLW14dHExbVwiOnRydWUsXCJ4bi0tbmdiYzVhemRcIjp0cnVlLFwieG4tLW5nYmU5ZTBhXCI6dHJ1ZSxcInhuLS1ucXY3ZlwiOnRydWUsXCJ4bi0tbnF2N2ZzMDBlbWFcIjp0cnVlLFwieG4tLW55cXkyNmFcIjp0cnVlLFwieG4tLXAxYWNmXCI6dHJ1ZSxcInhuLS1wYnQ5NzdjXCI6dHJ1ZSxcInhuLS1wc3N5MnVcIjp0cnVlLFwieG4tLXE5anliNGNcIjp0cnVlLFwieG4tLXFja2ExcG1jXCI6dHJ1ZSxcInhuLS1yaHF2OTZnXCI6dHJ1ZSxcInhuLS1yb3Z1ODhiXCI6dHJ1ZSxcInhuLS1zZXM1NTRnXCI6dHJ1ZSxcInhuLS10NjBiNTZhXCI6dHJ1ZSxcInhuLS10Y2t3ZVwiOnRydWUsXCJ4bi0tdW51cDR5XCI6dHJ1ZSxcInhuLS12ZXJtZ2Vuc2JlcmF0ZXItY3RiXCI6dHJ1ZSxcInhuLS12ZXJtZ2Vuc2JlcmF0dW5nLXB3YlwiOnRydWUsXCJ4bi0tdmhxdXZcIjp0cnVlLFwieG4tLXZ1cTg2MWJcIjp0cnVlLFwieG4tLXc0cjg1ZWw4Zmh1NWRucmFcIjp0cnVlLFwieG4tLXc0cnM0MGxcIjp0cnVlLFwieG4tLXhocTUyMWJcIjp0cnVlLFwieG4tLXpmcjE2NGJcIjp0cnVlLFwieHBlcmlhXCI6dHJ1ZSxcInh5elwiOnRydWUsXCJ5YWNodHNcIjp0cnVlLFwieWFob29cIjp0cnVlLFwieWFtYXh1blwiOnRydWUsXCJ5YW5kZXhcIjp0cnVlLFwieW9kb2Jhc2hpXCI6dHJ1ZSxcInlvZ2FcIjp0cnVlLFwieW9rb2hhbWFcIjp0cnVlLFwieW91XCI6dHJ1ZSxcInlvdXR1YmVcIjp0cnVlLFwieXVuXCI6dHJ1ZSxcInphcHBvc1wiOnRydWUsXCJ6YXJhXCI6dHJ1ZSxcInplcm9cIjp0cnVlLFwiemlwXCI6dHJ1ZSxcInppcHBvXCI6dHJ1ZSxcInpvbmVcIjp0cnVlLFwienVlcmljaFwiOnRydWUsXCJjbG91ZGZyb250Lm5ldFwiOnRydWUsXCJhcC1ub3J0aGVhc3QtMS5jb21wdXRlLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiYXAtc291dGhlYXN0LTEuY29tcHV0ZS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcImFwLXNvdXRoZWFzdC0yLmNvbXB1dGUuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJjbi1ub3J0aC0xLmNvbXB1dGUuYW1hem9uYXdzLmNuXCI6dHJ1ZSxcImNvbXB1dGUuYW1hem9uYXdzLmNuXCI6dHJ1ZSxcImNvbXB1dGUuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJjb21wdXRlLTEuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJldS13ZXN0LTEuY29tcHV0ZS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcImV1LWNlbnRyYWwtMS5jb21wdXRlLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwic2EtZWFzdC0xLmNvbXB1dGUuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJ1cy1lYXN0LTEuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJ1cy1nb3Ytd2VzdC0xLmNvbXB1dGUuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJ1cy13ZXN0LTEuY29tcHV0ZS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInVzLXdlc3QtMi5jb21wdXRlLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiei0xLmNvbXB1dGUtMS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInotMi5jb21wdXRlLTEuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJlbGFzdGljYmVhbnN0YWxrLmNvbVwiOnRydWUsXCJlbGIuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJzMy5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiczMtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJzMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInMzLWV4dGVybmFsLTEuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJzMy1leHRlcm5hbC0yLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiczMtZmlwcy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiczMtZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiczMtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiczMtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiczMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInMzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInMzLXVzLXdlc3QtMi5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInMzLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jblwiOnRydWUsXCJzMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJiZXRhaW5hYm94LmNvbVwiOnRydWUsXCJhZS5vcmdcIjp0cnVlLFwiYXIuY29tXCI6dHJ1ZSxcImJyLmNvbVwiOnRydWUsXCJjbi5jb21cIjp0cnVlLFwiY29tLmRlXCI6dHJ1ZSxcImNvbS5zZVwiOnRydWUsXCJkZS5jb21cIjp0cnVlLFwiZXUuY29tXCI6dHJ1ZSxcImdiLmNvbVwiOnRydWUsXCJnYi5uZXRcIjp0cnVlLFwiaHUuY29tXCI6dHJ1ZSxcImh1Lm5ldFwiOnRydWUsXCJqcC5uZXRcIjp0cnVlLFwianBuLmNvbVwiOnRydWUsXCJrci5jb21cIjp0cnVlLFwibWV4LmNvbVwiOnRydWUsXCJuby5jb21cIjp0cnVlLFwicWMuY29tXCI6dHJ1ZSxcInJ1LmNvbVwiOnRydWUsXCJzYS5jb21cIjp0cnVlLFwic2UuY29tXCI6dHJ1ZSxcInNlLm5ldFwiOnRydWUsXCJ1ay5jb21cIjp0cnVlLFwidWsubmV0XCI6dHJ1ZSxcInVzLmNvbVwiOnRydWUsXCJ1eS5jb21cIjp0cnVlLFwiemEuYnpcIjp0cnVlLFwiemEuY29tXCI6dHJ1ZSxcImFmcmljYS5jb21cIjp0cnVlLFwiZ3IuY29tXCI6dHJ1ZSxcImluLm5ldFwiOnRydWUsXCJ1cy5vcmdcIjp0cnVlLFwiY28uY29tXCI6dHJ1ZSxcImMubGFcIjp0cnVlLFwiY2xvdWRjb250cm9sbGVkLmNvbVwiOnRydWUsXCJjbG91ZGNvbnRyb2xhcHAuY29tXCI6dHJ1ZSxcImNvLmNhXCI6dHJ1ZSxcImMuY2RuNzcub3JnXCI6dHJ1ZSxcImNkbjc3LXNzbC5uZXRcIjp0cnVlLFwici5jZG43Ny5uZXRcIjp0cnVlLFwicnNjLmNkbjc3Lm9yZ1wiOnRydWUsXCJzc2wub3JpZ2luLmNkbjc3LXNlY3VyZS5vcmdcIjp0cnVlLFwiY28ubmxcIjp0cnVlLFwiY28ubm9cIjp0cnVlLFwiKi5wbGF0Zm9ybS5zaFwiOnRydWUsXCJjdXBjYWtlLmlzXCI6dHJ1ZSxcImRyZWFtaG9zdGVycy5jb21cIjp0cnVlLFwiZHVja2Rucy5vcmdcIjp0cnVlLFwiZHluZG5zLWF0LWhvbWUuY29tXCI6dHJ1ZSxcImR5bmRucy1hdC13b3JrLmNvbVwiOnRydWUsXCJkeW5kbnMtYmxvZy5jb21cIjp0cnVlLFwiZHluZG5zLWZyZWUuY29tXCI6dHJ1ZSxcImR5bmRucy1ob21lLmNvbVwiOnRydWUsXCJkeW5kbnMtaXAuY29tXCI6dHJ1ZSxcImR5bmRucy1tYWlsLmNvbVwiOnRydWUsXCJkeW5kbnMtb2ZmaWNlLmNvbVwiOnRydWUsXCJkeW5kbnMtcGljcy5jb21cIjp0cnVlLFwiZHluZG5zLXJlbW90ZS5jb21cIjp0cnVlLFwiZHluZG5zLXNlcnZlci5jb21cIjp0cnVlLFwiZHluZG5zLXdlYi5jb21cIjp0cnVlLFwiZHluZG5zLXdpa2kuY29tXCI6dHJ1ZSxcImR5bmRucy13b3JrLmNvbVwiOnRydWUsXCJkeW5kbnMuYml6XCI6dHJ1ZSxcImR5bmRucy5pbmZvXCI6dHJ1ZSxcImR5bmRucy5vcmdcIjp0cnVlLFwiZHluZG5zLnR2XCI6dHJ1ZSxcImF0LWJhbmQtY2FtcC5uZXRcIjp0cnVlLFwiYXRoLmN4XCI6dHJ1ZSxcImJhcnJlbC1vZi1rbm93bGVkZ2UuaW5mb1wiOnRydWUsXCJiYXJyZWxsLW9mLWtub3dsZWRnZS5pbmZvXCI6dHJ1ZSxcImJldHRlci10aGFuLnR2XCI6dHJ1ZSxcImJsb2dkbnMuY29tXCI6dHJ1ZSxcImJsb2dkbnMubmV0XCI6dHJ1ZSxcImJsb2dkbnMub3JnXCI6dHJ1ZSxcImJsb2dzaXRlLm9yZ1wiOnRydWUsXCJib2xkbHlnb2luZ25vd2hlcmUub3JnXCI6dHJ1ZSxcImJyb2tlLWl0Lm5ldFwiOnRydWUsXCJidXlzaG91c2VzLm5ldFwiOnRydWUsXCJjZWNoaXJlLmNvbVwiOnRydWUsXCJkbnNhbGlhcy5jb21cIjp0cnVlLFwiZG5zYWxpYXMubmV0XCI6dHJ1ZSxcImRuc2FsaWFzLm9yZ1wiOnRydWUsXCJkbnNkb2pvLmNvbVwiOnRydWUsXCJkbnNkb2pvLm5ldFwiOnRydWUsXCJkbnNkb2pvLm9yZ1wiOnRydWUsXCJkb2VzLWl0Lm5ldFwiOnRydWUsXCJkb2VzbnRleGlzdC5jb21cIjp0cnVlLFwiZG9lc250ZXhpc3Qub3JnXCI6dHJ1ZSxcImRvbnRleGlzdC5jb21cIjp0cnVlLFwiZG9udGV4aXN0Lm5ldFwiOnRydWUsXCJkb250ZXhpc3Qub3JnXCI6dHJ1ZSxcImRvb21kbnMuY29tXCI6dHJ1ZSxcImRvb21kbnMub3JnXCI6dHJ1ZSxcImR2cmRucy5vcmdcIjp0cnVlLFwiZHluLW8tc2F1ci5jb21cIjp0cnVlLFwiZHluYWxpYXMuY29tXCI6dHJ1ZSxcImR5bmFsaWFzLm5ldFwiOnRydWUsXCJkeW5hbGlhcy5vcmdcIjp0cnVlLFwiZHluYXRob21lLm5ldFwiOnRydWUsXCJkeW5kbnMud3NcIjp0cnVlLFwiZW5kb2ZpbnRlcm5ldC5uZXRcIjp0cnVlLFwiZW5kb2ZpbnRlcm5ldC5vcmdcIjp0cnVlLFwiZW5kb2Z0aGVpbnRlcm5ldC5vcmdcIjp0cnVlLFwiZXN0LWEtbGEtbWFpc29uLmNvbVwiOnRydWUsXCJlc3QtYS1sYS1tYXNpb24uY29tXCI6dHJ1ZSxcImVzdC1sZS1wYXRyb24uY29tXCI6dHJ1ZSxcImVzdC1tb24tYmxvZ3VldXIuY29tXCI6dHJ1ZSxcImZvci1iZXR0ZXIuYml6XCI6dHJ1ZSxcImZvci1tb3JlLmJpelwiOnRydWUsXCJmb3Itb3VyLmluZm9cIjp0cnVlLFwiZm9yLXNvbWUuYml6XCI6dHJ1ZSxcImZvci10aGUuYml6XCI6dHJ1ZSxcImZvcmdvdC5oZXIubmFtZVwiOnRydWUsXCJmb3Jnb3QuaGlzLm5hbWVcIjp0cnVlLFwiZnJvbS1hay5jb21cIjp0cnVlLFwiZnJvbS1hbC5jb21cIjp0cnVlLFwiZnJvbS1hci5jb21cIjp0cnVlLFwiZnJvbS1hei5uZXRcIjp0cnVlLFwiZnJvbS1jYS5jb21cIjp0cnVlLFwiZnJvbS1jby5uZXRcIjp0cnVlLFwiZnJvbS1jdC5jb21cIjp0cnVlLFwiZnJvbS1kYy5jb21cIjp0cnVlLFwiZnJvbS1kZS5jb21cIjp0cnVlLFwiZnJvbS1mbC5jb21cIjp0cnVlLFwiZnJvbS1nYS5jb21cIjp0cnVlLFwiZnJvbS1oaS5jb21cIjp0cnVlLFwiZnJvbS1pYS5jb21cIjp0cnVlLFwiZnJvbS1pZC5jb21cIjp0cnVlLFwiZnJvbS1pbC5jb21cIjp0cnVlLFwiZnJvbS1pbi5jb21cIjp0cnVlLFwiZnJvbS1rcy5jb21cIjp0cnVlLFwiZnJvbS1reS5jb21cIjp0cnVlLFwiZnJvbS1sYS5uZXRcIjp0cnVlLFwiZnJvbS1tYS5jb21cIjp0cnVlLFwiZnJvbS1tZC5jb21cIjp0cnVlLFwiZnJvbS1tZS5vcmdcIjp0cnVlLFwiZnJvbS1taS5jb21cIjp0cnVlLFwiZnJvbS1tbi5jb21cIjp0cnVlLFwiZnJvbS1tby5jb21cIjp0cnVlLFwiZnJvbS1tcy5jb21cIjp0cnVlLFwiZnJvbS1tdC5jb21cIjp0cnVlLFwiZnJvbS1uYy5jb21cIjp0cnVlLFwiZnJvbS1uZC5jb21cIjp0cnVlLFwiZnJvbS1uZS5jb21cIjp0cnVlLFwiZnJvbS1uaC5jb21cIjp0cnVlLFwiZnJvbS1uai5jb21cIjp0cnVlLFwiZnJvbS1ubS5jb21cIjp0cnVlLFwiZnJvbS1udi5jb21cIjp0cnVlLFwiZnJvbS1ueS5uZXRcIjp0cnVlLFwiZnJvbS1vaC5jb21cIjp0cnVlLFwiZnJvbS1vay5jb21cIjp0cnVlLFwiZnJvbS1vci5jb21cIjp0cnVlLFwiZnJvbS1wYS5jb21cIjp0cnVlLFwiZnJvbS1wci5jb21cIjp0cnVlLFwiZnJvbS1yaS5jb21cIjp0cnVlLFwiZnJvbS1zYy5jb21cIjp0cnVlLFwiZnJvbS1zZC5jb21cIjp0cnVlLFwiZnJvbS10bi5jb21cIjp0cnVlLFwiZnJvbS10eC5jb21cIjp0cnVlLFwiZnJvbS11dC5jb21cIjp0cnVlLFwiZnJvbS12YS5jb21cIjp0cnVlLFwiZnJvbS12dC5jb21cIjp0cnVlLFwiZnJvbS13YS5jb21cIjp0cnVlLFwiZnJvbS13aS5jb21cIjp0cnVlLFwiZnJvbS13di5jb21cIjp0cnVlLFwiZnJvbS13eS5jb21cIjp0cnVlLFwiZnRwYWNjZXNzLmNjXCI6dHJ1ZSxcImZ1ZXR0ZXJ0ZGFzbmV0ei5kZVwiOnRydWUsXCJnYW1lLWhvc3Qub3JnXCI6dHJ1ZSxcImdhbWUtc2VydmVyLmNjXCI6dHJ1ZSxcImdldG15aXAuY29tXCI6dHJ1ZSxcImdldHMtaXQubmV0XCI6dHJ1ZSxcImdvLmR5bmRucy5vcmdcIjp0cnVlLFwiZ290ZG5zLmNvbVwiOnRydWUsXCJnb3RkbnMub3JnXCI6dHJ1ZSxcImdyb2tzLXRoZS5pbmZvXCI6dHJ1ZSxcImdyb2tzLXRoaXMuaW5mb1wiOnRydWUsXCJoYW0tcmFkaW8tb3AubmV0XCI6dHJ1ZSxcImhlcmUtZm9yLW1vcmUuaW5mb1wiOnRydWUsXCJob2JieS1zaXRlLmNvbVwiOnRydWUsXCJob2JieS1zaXRlLm9yZ1wiOnRydWUsXCJob21lLmR5bmRucy5vcmdcIjp0cnVlLFwiaG9tZWRucy5vcmdcIjp0cnVlLFwiaG9tZWZ0cC5uZXRcIjp0cnVlLFwiaG9tZWZ0cC5vcmdcIjp0cnVlLFwiaG9tZWlwLm5ldFwiOnRydWUsXCJob21lbGludXguY29tXCI6dHJ1ZSxcImhvbWVsaW51eC5uZXRcIjp0cnVlLFwiaG9tZWxpbnV4Lm9yZ1wiOnRydWUsXCJob21ldW5peC5jb21cIjp0cnVlLFwiaG9tZXVuaXgubmV0XCI6dHJ1ZSxcImhvbWV1bml4Lm9yZ1wiOnRydWUsXCJpYW1hbGxhbWEuY29tXCI6dHJ1ZSxcImluLXRoZS1iYW5kLm5ldFwiOnRydWUsXCJpcy1hLWFuYXJjaGlzdC5jb21cIjp0cnVlLFwiaXMtYS1ibG9nZ2VyLmNvbVwiOnRydWUsXCJpcy1hLWJvb2trZWVwZXIuY29tXCI6dHJ1ZSxcImlzLWEtYnJ1aW5zZmFuLm9yZ1wiOnRydWUsXCJpcy1hLWJ1bGxzLWZhbi5jb21cIjp0cnVlLFwiaXMtYS1jYW5kaWRhdGUub3JnXCI6dHJ1ZSxcImlzLWEtY2F0ZXJlci5jb21cIjp0cnVlLFwiaXMtYS1jZWx0aWNzZmFuLm9yZ1wiOnRydWUsXCJpcy1hLWNoZWYuY29tXCI6dHJ1ZSxcImlzLWEtY2hlZi5uZXRcIjp0cnVlLFwiaXMtYS1jaGVmLm9yZ1wiOnRydWUsXCJpcy1hLWNvbnNlcnZhdGl2ZS5jb21cIjp0cnVlLFwiaXMtYS1jcGEuY29tXCI6dHJ1ZSxcImlzLWEtY3ViaWNsZS1zbGF2ZS5jb21cIjp0cnVlLFwiaXMtYS1kZW1vY3JhdC5jb21cIjp0cnVlLFwiaXMtYS1kZXNpZ25lci5jb21cIjp0cnVlLFwiaXMtYS1kb2N0b3IuY29tXCI6dHJ1ZSxcImlzLWEtZmluYW5jaWFsYWR2aXNvci5jb21cIjp0cnVlLFwiaXMtYS1nZWVrLmNvbVwiOnRydWUsXCJpcy1hLWdlZWsubmV0XCI6dHJ1ZSxcImlzLWEtZ2Vlay5vcmdcIjp0cnVlLFwiaXMtYS1ncmVlbi5jb21cIjp0cnVlLFwiaXMtYS1ndXJ1LmNvbVwiOnRydWUsXCJpcy1hLWhhcmQtd29ya2VyLmNvbVwiOnRydWUsXCJpcy1hLWh1bnRlci5jb21cIjp0cnVlLFwiaXMtYS1rbmlnaHQub3JnXCI6dHJ1ZSxcImlzLWEtbGFuZHNjYXBlci5jb21cIjp0cnVlLFwiaXMtYS1sYXd5ZXIuY29tXCI6dHJ1ZSxcImlzLWEtbGliZXJhbC5jb21cIjp0cnVlLFwiaXMtYS1saWJlcnRhcmlhbi5jb21cIjp0cnVlLFwiaXMtYS1saW51eC11c2VyLm9yZ1wiOnRydWUsXCJpcy1hLWxsYW1hLmNvbVwiOnRydWUsXCJpcy1hLW11c2ljaWFuLmNvbVwiOnRydWUsXCJpcy1hLW5hc2NhcmZhbi5jb21cIjp0cnVlLFwiaXMtYS1udXJzZS5jb21cIjp0cnVlLFwiaXMtYS1wYWludGVyLmNvbVwiOnRydWUsXCJpcy1hLXBhdHNmYW4ub3JnXCI6dHJ1ZSxcImlzLWEtcGVyc29uYWx0cmFpbmVyLmNvbVwiOnRydWUsXCJpcy1hLXBob3RvZ3JhcGhlci5jb21cIjp0cnVlLFwiaXMtYS1wbGF5ZXIuY29tXCI6dHJ1ZSxcImlzLWEtcmVwdWJsaWNhbi5jb21cIjp0cnVlLFwiaXMtYS1yb2Nrc3Rhci5jb21cIjp0cnVlLFwiaXMtYS1zb2NpYWxpc3QuY29tXCI6dHJ1ZSxcImlzLWEtc294ZmFuLm9yZ1wiOnRydWUsXCJpcy1hLXN0dWRlbnQuY29tXCI6dHJ1ZSxcImlzLWEtdGVhY2hlci5jb21cIjp0cnVlLFwiaXMtYS10ZWNoaWUuY29tXCI6dHJ1ZSxcImlzLWEtdGhlcmFwaXN0LmNvbVwiOnRydWUsXCJpcy1hbi1hY2NvdW50YW50LmNvbVwiOnRydWUsXCJpcy1hbi1hY3Rvci5jb21cIjp0cnVlLFwiaXMtYW4tYWN0cmVzcy5jb21cIjp0cnVlLFwiaXMtYW4tYW5hcmNoaXN0LmNvbVwiOnRydWUsXCJpcy1hbi1hcnRpc3QuY29tXCI6dHJ1ZSxcImlzLWFuLWVuZ2luZWVyLmNvbVwiOnRydWUsXCJpcy1hbi1lbnRlcnRhaW5lci5jb21cIjp0cnVlLFwiaXMtYnkudXNcIjp0cnVlLFwiaXMtY2VydGlmaWVkLmNvbVwiOnRydWUsXCJpcy1mb3VuZC5vcmdcIjp0cnVlLFwiaXMtZ29uZS5jb21cIjp0cnVlLFwiaXMtaW50by1hbmltZS5jb21cIjp0cnVlLFwiaXMtaW50by1jYXJzLmNvbVwiOnRydWUsXCJpcy1pbnRvLWNhcnRvb25zLmNvbVwiOnRydWUsXCJpcy1pbnRvLWdhbWVzLmNvbVwiOnRydWUsXCJpcy1sZWV0LmNvbVwiOnRydWUsXCJpcy1sb3N0Lm9yZ1wiOnRydWUsXCJpcy1ub3QtY2VydGlmaWVkLmNvbVwiOnRydWUsXCJpcy1zYXZlZC5vcmdcIjp0cnVlLFwiaXMtc2xpY2suY29tXCI6dHJ1ZSxcImlzLXViZXJsZWV0LmNvbVwiOnRydWUsXCJpcy12ZXJ5LWJhZC5vcmdcIjp0cnVlLFwiaXMtdmVyeS1ldmlsLm9yZ1wiOnRydWUsXCJpcy12ZXJ5LWdvb2Qub3JnXCI6dHJ1ZSxcImlzLXZlcnktbmljZS5vcmdcIjp0cnVlLFwiaXMtdmVyeS1zd2VldC5vcmdcIjp0cnVlLFwiaXMtd2l0aC10aGViYW5kLmNvbVwiOnRydWUsXCJpc2EtZ2Vlay5jb21cIjp0cnVlLFwiaXNhLWdlZWsubmV0XCI6dHJ1ZSxcImlzYS1nZWVrLm9yZ1wiOnRydWUsXCJpc2EtaG9ja2V5bnV0LmNvbVwiOnRydWUsXCJpc3NtYXJ0ZXJ0aGFueW91LmNvbVwiOnRydWUsXCJpc3RlaW5nZWVrLmRlXCI6dHJ1ZSxcImlzdG1laW4uZGVcIjp0cnVlLFwia2lja3MtYXNzLm5ldFwiOnRydWUsXCJraWNrcy1hc3Mub3JnXCI6dHJ1ZSxcImtub3dzaXRhbGwuaW5mb1wiOnRydWUsXCJsYW5kLTQtc2FsZS51c1wiOnRydWUsXCJsZWJ0aW1uZXR6LmRlXCI6dHJ1ZSxcImxlaXR1bmdzZW4uZGVcIjp0cnVlLFwibGlrZXMtcGllLmNvbVwiOnRydWUsXCJsaWtlc2NhbmR5LmNvbVwiOnRydWUsXCJtZXJzZWluZS5udVwiOnRydWUsXCJtaW5lLm51XCI6dHJ1ZSxcIm1pc2NvbmZ1c2VkLm9yZ1wiOnRydWUsXCJteXBldHMud3NcIjp0cnVlLFwibXlwaG90b3MuY2NcIjp0cnVlLFwibmVhdC11cmwuY29tXCI6dHJ1ZSxcIm9mZmljZS1vbi10aGUubmV0XCI6dHJ1ZSxcIm9uLXRoZS13ZWIudHZcIjp0cnVlLFwicG9kem9uZS5uZXRcIjp0cnVlLFwicG9kem9uZS5vcmdcIjp0cnVlLFwicmVhZG15YmxvZy5vcmdcIjp0cnVlLFwic2F2ZXMtdGhlLXdoYWxlcy5jb21cIjp0cnVlLFwic2NyYXBwZXItc2l0ZS5uZXRcIjp0cnVlLFwic2NyYXBwaW5nLmNjXCI6dHJ1ZSxcInNlbGZpcC5iaXpcIjp0cnVlLFwic2VsZmlwLmNvbVwiOnRydWUsXCJzZWxmaXAuaW5mb1wiOnRydWUsXCJzZWxmaXAubmV0XCI6dHJ1ZSxcInNlbGZpcC5vcmdcIjp0cnVlLFwic2VsbHMtZm9yLWxlc3MuY29tXCI6dHJ1ZSxcInNlbGxzLWZvci11LmNvbVwiOnRydWUsXCJzZWxscy1pdC5uZXRcIjp0cnVlLFwic2VsbHN5b3VyaG9tZS5vcmdcIjp0cnVlLFwic2VydmViYnMuY29tXCI6dHJ1ZSxcInNlcnZlYmJzLm5ldFwiOnRydWUsXCJzZXJ2ZWJicy5vcmdcIjp0cnVlLFwic2VydmVmdHAubmV0XCI6dHJ1ZSxcInNlcnZlZnRwLm9yZ1wiOnRydWUsXCJzZXJ2ZWdhbWUub3JnXCI6dHJ1ZSxcInNoYWNrbmV0Lm51XCI6dHJ1ZSxcInNpbXBsZS11cmwuY29tXCI6dHJ1ZSxcInNwYWNlLXRvLXJlbnQuY29tXCI6dHJ1ZSxcInN0dWZmLTQtc2FsZS5vcmdcIjp0cnVlLFwic3R1ZmYtNC1zYWxlLnVzXCI6dHJ1ZSxcInRlYWNoZXMteW9nYS5jb21cIjp0cnVlLFwidGhydWhlcmUubmV0XCI6dHJ1ZSxcInRyYWV1bXRnZXJhZGUuZGVcIjp0cnVlLFwid2ViaG9wLmJpelwiOnRydWUsXCJ3ZWJob3AuaW5mb1wiOnRydWUsXCJ3ZWJob3AubmV0XCI6dHJ1ZSxcIndlYmhvcC5vcmdcIjp0cnVlLFwid29yc2UtdGhhbi50dlwiOnRydWUsXCJ3cml0ZXN0aGlzYmxvZy5jb21cIjp0cnVlLFwiZXUub3JnXCI6dHJ1ZSxcImFsLmV1Lm9yZ1wiOnRydWUsXCJhc3NvLmV1Lm9yZ1wiOnRydWUsXCJhdC5ldS5vcmdcIjp0cnVlLFwiYXUuZXUub3JnXCI6dHJ1ZSxcImJlLmV1Lm9yZ1wiOnRydWUsXCJiZy5ldS5vcmdcIjp0cnVlLFwiY2EuZXUub3JnXCI6dHJ1ZSxcImNkLmV1Lm9yZ1wiOnRydWUsXCJjaC5ldS5vcmdcIjp0cnVlLFwiY24uZXUub3JnXCI6dHJ1ZSxcImN5LmV1Lm9yZ1wiOnRydWUsXCJjei5ldS5vcmdcIjp0cnVlLFwiZGUuZXUub3JnXCI6dHJ1ZSxcImRrLmV1Lm9yZ1wiOnRydWUsXCJlZHUuZXUub3JnXCI6dHJ1ZSxcImVlLmV1Lm9yZ1wiOnRydWUsXCJlcy5ldS5vcmdcIjp0cnVlLFwiZmkuZXUub3JnXCI6dHJ1ZSxcImZyLmV1Lm9yZ1wiOnRydWUsXCJnci5ldS5vcmdcIjp0cnVlLFwiaHIuZXUub3JnXCI6dHJ1ZSxcImh1LmV1Lm9yZ1wiOnRydWUsXCJpZS5ldS5vcmdcIjp0cnVlLFwiaWwuZXUub3JnXCI6dHJ1ZSxcImluLmV1Lm9yZ1wiOnRydWUsXCJpbnQuZXUub3JnXCI6dHJ1ZSxcImlzLmV1Lm9yZ1wiOnRydWUsXCJpdC5ldS5vcmdcIjp0cnVlLFwianAuZXUub3JnXCI6dHJ1ZSxcImtyLmV1Lm9yZ1wiOnRydWUsXCJsdC5ldS5vcmdcIjp0cnVlLFwibHUuZXUub3JnXCI6dHJ1ZSxcImx2LmV1Lm9yZ1wiOnRydWUsXCJtYy5ldS5vcmdcIjp0cnVlLFwibWUuZXUub3JnXCI6dHJ1ZSxcIm1rLmV1Lm9yZ1wiOnRydWUsXCJtdC5ldS5vcmdcIjp0cnVlLFwibXkuZXUub3JnXCI6dHJ1ZSxcIm5ldC5ldS5vcmdcIjp0cnVlLFwibmcuZXUub3JnXCI6dHJ1ZSxcIm5sLmV1Lm9yZ1wiOnRydWUsXCJuby5ldS5vcmdcIjp0cnVlLFwibnouZXUub3JnXCI6dHJ1ZSxcInBhcmlzLmV1Lm9yZ1wiOnRydWUsXCJwbC5ldS5vcmdcIjp0cnVlLFwicHQuZXUub3JnXCI6dHJ1ZSxcInEtYS5ldS5vcmdcIjp0cnVlLFwicm8uZXUub3JnXCI6dHJ1ZSxcInJ1LmV1Lm9yZ1wiOnRydWUsXCJzZS5ldS5vcmdcIjp0cnVlLFwic2kuZXUub3JnXCI6dHJ1ZSxcInNrLmV1Lm9yZ1wiOnRydWUsXCJ0ci5ldS5vcmdcIjp0cnVlLFwidWsuZXUub3JnXCI6dHJ1ZSxcInVzLmV1Lm9yZ1wiOnRydWUsXCJhLnNzbC5mYXN0bHkubmV0XCI6dHJ1ZSxcImIuc3NsLmZhc3RseS5uZXRcIjp0cnVlLFwiZ2xvYmFsLnNzbC5mYXN0bHkubmV0XCI6dHJ1ZSxcImEucHJvZC5mYXN0bHkubmV0XCI6dHJ1ZSxcImdsb2JhbC5wcm9kLmZhc3RseS5uZXRcIjp0cnVlLFwiZmlyZWJhc2VhcHAuY29tXCI6dHJ1ZSxcImZseW5uaHViLmNvbVwiOnRydWUsXCJzZXJ2aWNlLmdvdi51a1wiOnRydWUsXCJnaXRodWIuaW9cIjp0cnVlLFwiZ2l0aHVidXNlcmNvbnRlbnQuY29tXCI6dHJ1ZSxcInJvLmNvbVwiOnRydWUsXCJhcHBzcG90LmNvbVwiOnRydWUsXCJibG9nc3BvdC5hZVwiOnRydWUsXCJibG9nc3BvdC5hbFwiOnRydWUsXCJibG9nc3BvdC5hbVwiOnRydWUsXCJibG9nc3BvdC5iYVwiOnRydWUsXCJibG9nc3BvdC5iZVwiOnRydWUsXCJibG9nc3BvdC5iZ1wiOnRydWUsXCJibG9nc3BvdC5ialwiOnRydWUsXCJibG9nc3BvdC5jYVwiOnRydWUsXCJibG9nc3BvdC5jZlwiOnRydWUsXCJibG9nc3BvdC5jaFwiOnRydWUsXCJibG9nc3BvdC5jbFwiOnRydWUsXCJibG9nc3BvdC5jby5hdFwiOnRydWUsXCJibG9nc3BvdC5jby5pZFwiOnRydWUsXCJibG9nc3BvdC5jby5pbFwiOnRydWUsXCJibG9nc3BvdC5jby5rZVwiOnRydWUsXCJibG9nc3BvdC5jby5uelwiOnRydWUsXCJibG9nc3BvdC5jby51a1wiOnRydWUsXCJibG9nc3BvdC5jby56YVwiOnRydWUsXCJibG9nc3BvdC5jb21cIjp0cnVlLFwiYmxvZ3Nwb3QuY29tLmFyXCI6dHJ1ZSxcImJsb2dzcG90LmNvbS5hdVwiOnRydWUsXCJibG9nc3BvdC5jb20uYnJcIjp0cnVlLFwiYmxvZ3Nwb3QuY29tLmJ5XCI6dHJ1ZSxcImJsb2dzcG90LmNvbS5jb1wiOnRydWUsXCJibG9nc3BvdC5jb20uY3lcIjp0cnVlLFwiYmxvZ3Nwb3QuY29tLmVlXCI6dHJ1ZSxcImJsb2dzcG90LmNvbS5lZ1wiOnRydWUsXCJibG9nc3BvdC5jb20uZXNcIjp0cnVlLFwiYmxvZ3Nwb3QuY29tLm10XCI6dHJ1ZSxcImJsb2dzcG90LmNvbS5uZ1wiOnRydWUsXCJibG9nc3BvdC5jb20udHJcIjp0cnVlLFwiYmxvZ3Nwb3QuY29tLnV5XCI6dHJ1ZSxcImJsb2dzcG90LmN2XCI6dHJ1ZSxcImJsb2dzcG90LmN6XCI6dHJ1ZSxcImJsb2dzcG90LmRlXCI6dHJ1ZSxcImJsb2dzcG90LmRrXCI6dHJ1ZSxcImJsb2dzcG90LmZpXCI6dHJ1ZSxcImJsb2dzcG90LmZyXCI6dHJ1ZSxcImJsb2dzcG90LmdyXCI6dHJ1ZSxcImJsb2dzcG90LmhrXCI6dHJ1ZSxcImJsb2dzcG90LmhyXCI6dHJ1ZSxcImJsb2dzcG90Lmh1XCI6dHJ1ZSxcImJsb2dzcG90LmllXCI6dHJ1ZSxcImJsb2dzcG90LmluXCI6dHJ1ZSxcImJsb2dzcG90LmlzXCI6dHJ1ZSxcImJsb2dzcG90Lml0XCI6dHJ1ZSxcImJsb2dzcG90LmpwXCI6dHJ1ZSxcImJsb2dzcG90LmtyXCI6dHJ1ZSxcImJsb2dzcG90LmxpXCI6dHJ1ZSxcImJsb2dzcG90Lmx0XCI6dHJ1ZSxcImJsb2dzcG90Lmx1XCI6dHJ1ZSxcImJsb2dzcG90Lm1kXCI6dHJ1ZSxcImJsb2dzcG90Lm1rXCI6dHJ1ZSxcImJsb2dzcG90Lm1yXCI6dHJ1ZSxcImJsb2dzcG90Lm14XCI6dHJ1ZSxcImJsb2dzcG90Lm15XCI6dHJ1ZSxcImJsb2dzcG90Lm5sXCI6dHJ1ZSxcImJsb2dzcG90Lm5vXCI6dHJ1ZSxcImJsb2dzcG90LnBlXCI6dHJ1ZSxcImJsb2dzcG90LnB0XCI6dHJ1ZSxcImJsb2dzcG90LnFhXCI6dHJ1ZSxcImJsb2dzcG90LnJlXCI6dHJ1ZSxcImJsb2dzcG90LnJvXCI6dHJ1ZSxcImJsb2dzcG90LnJzXCI6dHJ1ZSxcImJsb2dzcG90LnJ1XCI6dHJ1ZSxcImJsb2dzcG90LnNlXCI6dHJ1ZSxcImJsb2dzcG90LnNnXCI6dHJ1ZSxcImJsb2dzcG90LnNpXCI6dHJ1ZSxcImJsb2dzcG90LnNrXCI6dHJ1ZSxcImJsb2dzcG90LnNuXCI6dHJ1ZSxcImJsb2dzcG90LnRkXCI6dHJ1ZSxcImJsb2dzcG90LnR3XCI6dHJ1ZSxcImJsb2dzcG90LnVnXCI6dHJ1ZSxcImJsb2dzcG90LnZuXCI6dHJ1ZSxcImNvZGVzcG90LmNvbVwiOnRydWUsXCJnb29nbGVhcGlzLmNvbVwiOnRydWUsXCJnb29nbGVjb2RlLmNvbVwiOnRydWUsXCJwYWdlc3BlZWRtb2JpbGl6ZXIuY29tXCI6dHJ1ZSxcIndpdGhnb29nbGUuY29tXCI6dHJ1ZSxcIndpdGh5b3V0dWJlLmNvbVwiOnRydWUsXCJoZXJva3VhcHAuY29tXCI6dHJ1ZSxcImhlcm9rdXNzbC5jb21cIjp0cnVlLFwiaWtpLmZpXCI6dHJ1ZSxcImJpei5hdFwiOnRydWUsXCJpbmZvLmF0XCI6dHJ1ZSxcImNvLnBsXCI6dHJ1ZSxcImF6dXJld2Vic2l0ZXMubmV0XCI6dHJ1ZSxcImF6dXJlLW1vYmlsZS5uZXRcIjp0cnVlLFwiY2xvdWRhcHAubmV0XCI6dHJ1ZSxcImJtb2F0dGFjaG1lbnRzLm9yZ1wiOnRydWUsXCI0dS5jb21cIjp0cnVlLFwibmZzaG9zdC5jb21cIjp0cnVlLFwibnljLm1uXCI6dHJ1ZSxcIm5pZC5pb1wiOnRydWUsXCJvcGVyYXVuaXRlLmNvbVwiOnRydWUsXCJvdXRzeXN0ZW1zY2xvdWQuY29tXCI6dHJ1ZSxcImFydC5wbFwiOnRydWUsXCJnbGl3aWNlLnBsXCI6dHJ1ZSxcImtyYWtvdy5wbFwiOnRydWUsXCJwb3puYW4ucGxcIjp0cnVlLFwid3JvYy5wbFwiOnRydWUsXCJ6YWtvcGFuZS5wbFwiOnRydWUsXCJwYW50aGVvbi5pb1wiOnRydWUsXCJnb3RwYW50aGVvbi5jb21cIjp0cnVlLFwicHJpdi5hdFwiOnRydWUsXCJxYTIuY29tXCI6dHJ1ZSxcInJoY2xvdWQuY29tXCI6dHJ1ZSxcInNhbmRjYXRzLmlvXCI6dHJ1ZSxcImJpei51YVwiOnRydWUsXCJjby51YVwiOnRydWUsXCJwcC51YVwiOnRydWUsXCJzaW5hYXBwLmNvbVwiOnRydWUsXCJ2aXBzaW5hYXBwLmNvbVwiOnRydWUsXCIxa2FwcC5jb21cIjp0cnVlLFwiZ2RhLnBsXCI6dHJ1ZSxcImdkYW5zay5wbFwiOnRydWUsXCJnZHluaWEucGxcIjp0cnVlLFwibWVkLnBsXCI6dHJ1ZSxcInNvcG90LnBsXCI6dHJ1ZSxcImhrLmNvbVwiOnRydWUsXCJoay5vcmdcIjp0cnVlLFwibHRkLmhrXCI6dHJ1ZSxcImluYy5oa1wiOnRydWUsXCJ5b2xhc2l0ZS5jb21cIjp0cnVlLFwiemEubmV0XCI6dHJ1ZSxcInphLm9yZ1wiOnRydWV9KTtcblxuLy8gRU5EIG9mIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGVcbiIsIi8qIVxuICogQ29weXJpZ2h0IChjKSAyMDE1LCBTYWxlc2ZvcmNlLmNvbSwgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTYWxlc2ZvcmNlLmNvbSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5XG4gKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0XG4gKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFXG4gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SXG4gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRlxuICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTXG4gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTlxuICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSlcbiAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFXG4gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuLypqc2hpbnQgdW51c2VkOmZhbHNlICovXG5cbmZ1bmN0aW9uIFN0b3JlKCkge1xufVxuZXhwb3J0cy5TdG9yZSA9IFN0b3JlO1xuXG4vLyBTdG9yZXMgbWF5IGJlIHN5bmNocm9ub3VzLCBidXQgYXJlIHN0aWxsIHJlcXVpcmVkIHRvIHVzZSBhXG4vLyBDb250aW51YXRpb24tUGFzc2luZyBTdHlsZSBBUEkuICBUaGUgQ29va2llSmFyIGl0c2VsZiB3aWxsIGV4cG9zZSBhIFwiKlN5bmNcIlxuLy8gQVBJIHRoYXQgY29udmVydHMgZnJvbSBzeW5jaHJvbm91cy1jYWxsYmFja3MgdG8gaW1wZXJhdGl2ZSBzdHlsZS5cblN0b3JlLnByb3RvdHlwZS5zeW5jaHJvbm91cyA9IGZhbHNlO1xuXG5TdG9yZS5wcm90b3R5cGUuZmluZENvb2tpZSA9IGZ1bmN0aW9uKGRvbWFpbiwgcGF0aCwga2V5LCBjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ2ZpbmRDb29raWUgaXMgbm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUuZmluZENvb2tpZXMgPSBmdW5jdGlvbihkb21haW4sIHBhdGgsIGNiKSB7XG4gIHRocm93IG5ldyBFcnJvcignZmluZENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUucHV0Q29va2llID0gZnVuY3Rpb24oY29va2llLCBjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3B1dENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS51cGRhdGVDb29raWUgPSBmdW5jdGlvbihvbGRDb29raWUsIG5ld0Nvb2tpZSwgY2IpIHtcbiAgLy8gcmVjb21tZW5kZWQgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbjpcbiAgLy8gcmV0dXJuIHRoaXMucHV0Q29va2llKG5ld0Nvb2tpZSwgY2IpO1xuICB0aHJvdyBuZXcgRXJyb3IoJ3VwZGF0ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5yZW1vdmVDb29raWUgPSBmdW5jdGlvbihkb21haW4sIHBhdGgsIGtleSwgY2IpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdyZW1vdmVDb29raWUgaXMgbm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUucmVtb3ZlQ29va2llcyA9IGZ1bmN0aW9uKGRvbWFpbiwgcGF0aCwgY2IpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdyZW1vdmVDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLmdldEFsbENvb2tpZXMgPSBmdW5jdGlvbihjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ2dldEFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkICh0aGVyZWZvcmUgamFyIGNhbm5vdCBiZSBzZXJpYWxpemVkKScpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJfYXJnc1wiOiBbXG4gICAgW1xuICAgICAge1xuICAgICAgICBcInJhd1wiOiBcInRvdWdoLWNvb2tpZUBeMi4zLjJcIixcbiAgICAgICAgXCJzY29wZVwiOiBudWxsLFxuICAgICAgICBcImVzY2FwZWROYW1lXCI6IFwidG91Z2gtY29va2llXCIsXG4gICAgICAgIFwibmFtZVwiOiBcInRvdWdoLWNvb2tpZVwiLFxuICAgICAgICBcInJhd1NwZWNcIjogXCJeMi4zLjJcIixcbiAgICAgICAgXCJzcGVjXCI6IFwiPj0yLjMuMiA8My4wLjBcIixcbiAgICAgICAgXCJ0eXBlXCI6IFwicmFuZ2VcIlxuICAgICAgfSxcbiAgICAgIFwiL2hvbWUvZ2FicmllbC9Eb2N1bWVudHMvd2ViLXNjcmFwZXItY2hyb21lLWV4dGVuc2lvbi9ub2RlX21vZHVsZXMvanNkb21cIlxuICAgIF1cbiAgXSxcbiAgXCJfZnJvbVwiOiBcInRvdWdoLWNvb2tpZUA+PTIuMy4yIDwzLjAuMFwiLFxuICBcIl9pZFwiOiBcInRvdWdoLWNvb2tpZUAyLjMuMlwiLFxuICBcIl9pbkNhY2hlXCI6IHRydWUsXG4gIFwiX2xvY2F0aW9uXCI6IFwiL3RvdWdoLWNvb2tpZVwiLFxuICBcIl9ub2RlVmVyc2lvblwiOiBcIjcuMC4wXCIsXG4gIFwiX25wbU9wZXJhdGlvbmFsSW50ZXJuYWxcIjoge1xuICAgIFwiaG9zdFwiOiBcInBhY2thZ2VzLTEyLXdlc3QuaW50ZXJuYWwubnBtanMuY29tXCIsXG4gICAgXCJ0bXBcIjogXCJ0bXAvdG91Z2gtY29va2llLTIuMy4yLnRnel8xNDc3NDE1MjMyOTEyXzAuNjEzMzYwOTQzMDM5ODc5MlwiXG4gIH0sXG4gIFwiX25wbVVzZXJcIjoge1xuICAgIFwibmFtZVwiOiBcImpzdGFzaFwiLFxuICAgIFwiZW1haWxcIjogXCJqc3Rhc2hAZ21haWwuY29tXCJcbiAgfSxcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjMuMTAuOFwiLFxuICBcIl9waGFudG9tQ2hpbGRyZW5cIjoge30sXG4gIFwiX3JlcXVlc3RlZFwiOiB7XG4gICAgXCJyYXdcIjogXCJ0b3VnaC1jb29raWVAXjIuMy4yXCIsXG4gICAgXCJzY29wZVwiOiBudWxsLFxuICAgIFwiZXNjYXBlZE5hbWVcIjogXCJ0b3VnaC1jb29raWVcIixcbiAgICBcIm5hbWVcIjogXCJ0b3VnaC1jb29raWVcIixcbiAgICBcInJhd1NwZWNcIjogXCJeMi4zLjJcIixcbiAgICBcInNwZWNcIjogXCI+PTIuMy4yIDwzLjAuMFwiLFxuICAgIFwidHlwZVwiOiBcInJhbmdlXCJcbiAgfSxcbiAgXCJfcmVxdWlyZWRCeVwiOiBbXG4gICAgXCIvanNkb21cIixcbiAgICBcIi9yZXF1ZXN0XCIsXG4gICAgXCIvcmVxdWVzdC1wcm9taXNlLW5hdGl2ZVwiXG4gIF0sXG4gIFwiX3Jlc29sdmVkXCI6IFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG91Z2gtY29va2llLy0vdG91Z2gtY29va2llLTIuMy4yLnRnelwiLFxuICBcIl9zaGFzdW1cIjogXCJmMDgxZjc2ZTRjODU3MjBlNmMzN2E1ZmFjZWQ3MzcxNTBkODQwNzJhXCIsXG4gIFwiX3Nocmlua3dyYXBcIjogbnVsbCxcbiAgXCJfc3BlY1wiOiBcInRvdWdoLWNvb2tpZUBeMi4zLjJcIixcbiAgXCJfd2hlcmVcIjogXCIvaG9tZS9nYWJyaWVsL0RvY3VtZW50cy93ZWItc2NyYXBlci1jaHJvbWUtZXh0ZW5zaW9uL25vZGVfbW9kdWxlcy9qc2RvbVwiLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiSmVyZW15IFN0YXNoZXdza3lcIixcbiAgICBcImVtYWlsXCI6IFwianN0YXNoZXdza3lAc2FsZXNmb3JjZS5jb21cIlxuICB9LFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3NhbGVzZm9yY2UvdG91Z2gtY29va2llL2lzc3Vlc1wiXG4gIH0sXG4gIFwiY29udHJpYnV0b3JzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJBbGV4YW5kZXIgU2F2aW5cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiSWFuIExpdmluZ3N0b25lXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIkl2YW4gTmlrdWxpblwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJMYWxpdCBLYXBvb3JcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiU2FtIFRob21wc29uXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIlNlYmFzdGlhbiBNYXlyXCJcbiAgICB9XG4gIF0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcInB1bnljb2RlXCI6IFwiXjEuNC4xXCJcbiAgfSxcbiAgXCJkZXNjcmlwdGlvblwiOiBcIlJGQzYyNjUgQ29va2llcyBhbmQgQ29va2llIEphciBmb3Igbm9kZS5qc1wiLFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJhc3luY1wiOiBcIl4xLjQuMlwiLFxuICAgIFwic3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcIjogXCJeMC4yLjBcIixcbiAgICBcInZvd3NcIjogXCJeMC44LjFcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHt9LFxuICBcImRpc3RcIjoge1xuICAgIFwic2hhc3VtXCI6IFwiZjA4MWY3NmU0Yzg1NzIwZTZjMzdhNWZhY2VkNzM3MTUwZDg0MDcyYVwiLFxuICAgIFwidGFyYmFsbFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvdWdoLWNvb2tpZS8tL3RvdWdoLWNvb2tpZS0yLjMuMi50Z3pcIlxuICB9LFxuICBcImVuZ2luZXNcIjoge1xuICAgIFwibm9kZVwiOiBcIj49MC44XCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJsaWJcIlxuICBdLFxuICBcImdpdEhlYWRcIjogXCIyNjEwZGY1ZGM4ZWY3MzczYTQ4M2Q1MDkwMDZlNTg4NzU3MmE0MDc2XCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwczovL2dpdGh1Yi5jb20vc2FsZXNmb3JjZS90b3VnaC1jb29raWVcIixcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJIVFRQXCIsXG4gICAgXCJjb29raWVcIixcbiAgICBcImNvb2tpZXNcIixcbiAgICBcInNldC1jb29raWVcIixcbiAgICBcImNvb2tpZWphclwiLFxuICAgIFwiamFyXCIsXG4gICAgXCJSRkM2MjY1XCIsXG4gICAgXCJSRkMyOTY1XCJcbiAgXSxcbiAgXCJsaWNlbnNlXCI6IFwiQlNELTMtQ2xhdXNlXCIsXG4gIFwibWFpblwiOiBcIi4vbGliL2Nvb2tpZVwiLFxuICBcIm1haW50YWluZXJzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJhd2F0ZXJtYVwiLFxuICAgICAgXCJlbWFpbFwiOiBcImF3YXRlcm1hQGF3YXRlcm1hLm5ldFwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJqc3Rhc2hcIixcbiAgICAgIFwiZW1haWxcIjogXCJqc3Rhc2hAZ21haWwuY29tXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIm5leHh5XCIsXG4gICAgICBcImVtYWlsXCI6IFwiZW1pbHlAY29udGFjdHZpYmUuY29tXCJcbiAgICB9XG4gIF0sXG4gIFwibmFtZVwiOiBcInRvdWdoLWNvb2tpZVwiLFxuICBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCI6IHt9LFxuICBcInJlYWRtZVwiOiBcIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCFcIixcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImdpdDovL2dpdGh1Yi5jb20vc2FsZXNmb3JjZS90b3VnaC1jb29raWUuZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN1ZmZpeHVwXCI6IFwiY3VybCAtbyBwdWJsaWNfc3VmZml4X2xpc3QuZGF0IGh0dHBzOi8vcHVibGljc3VmZml4Lm9yZy9saXN0L3B1YmxpY19zdWZmaXhfbGlzdC5kYXQgJiYgLi9nZW5lcmF0ZS1wdWJzdWZmaXguanNcIixcbiAgICBcInRlc3RcIjogXCJ2b3dzIHRlc3QvKl90ZXN0LmpzXCJcbiAgfSxcbiAgXCJ2ZXJzaW9uXCI6IFwiMi4zLjJcIlxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBwdW55Y29kZSA9IHJlcXVpcmUoXCJwdW55Y29kZVwiKTtcbnZhciBtYXBwaW5nVGFibGUgPSByZXF1aXJlKFwiLi9saWIvbWFwcGluZ1RhYmxlLmpzb25cIik7XG5cbnZhciBQUk9DRVNTSU5HX09QVElPTlMgPSB7XG4gIFRSQU5TSVRJT05BTDogMCxcbiAgTk9OVFJBTlNJVElPTkFMOiAxXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemUoc3RyKSB7IC8vIGZpeCBidWcgaW4gdjhcbiAgcmV0dXJuIHN0ci5zcGxpdCgnXFx1MDAwMCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy5ub3JtYWxpemUoJ05GQycpOyB9KS5qb2luKCdcXHUwMDAwJyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRTdGF0dXModmFsKSB7XG4gIHZhciBzdGFydCA9IDA7XG4gIHZhciBlbmQgPSBtYXBwaW5nVGFibGUubGVuZ3RoIC0gMTtcblxuICB3aGlsZSAoc3RhcnQgPD0gZW5kKSB7XG4gICAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKHN0YXJ0ICsgZW5kKSAvIDIpO1xuXG4gICAgdmFyIHRhcmdldCA9IG1hcHBpbmdUYWJsZVttaWRdO1xuICAgIGlmICh0YXJnZXRbMF1bMF0gPD0gdmFsICYmIHRhcmdldFswXVsxXSA+PSB2YWwpIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSBlbHNlIGlmICh0YXJnZXRbMF1bMF0gPiB2YWwpIHtcbiAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gbWlkICsgMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIHJlZ2V4QXN0cmFsU3ltYm9scyA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdL2c7XG5cbmZ1bmN0aW9uIGNvdW50U3ltYm9scyhzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZ1xuICAgIC8vIHJlcGxhY2UgZXZlcnkgc3Vycm9nYXRlIHBhaXIgd2l0aCBhIEJNUCBzeW1ib2xcbiAgICAucmVwbGFjZShyZWdleEFzdHJhbFN5bWJvbHMsICdfJylcbiAgICAvLyB0aGVuIGdldCB0aGUgbGVuZ3RoXG4gICAgLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gbWFwQ2hhcnMoZG9tYWluX25hbWUsIHVzZVNURDMsIHByb2Nlc3Npbmdfb3B0aW9uKSB7XG4gIHZhciBoYXNFcnJvciA9IGZhbHNlO1xuICB2YXIgcHJvY2Vzc2VkID0gXCJcIjtcblxuICB2YXIgbGVuID0gY291bnRTeW1ib2xzKGRvbWFpbl9uYW1lKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBjb2RlUG9pbnQgPSBkb21haW5fbmFtZS5jb2RlUG9pbnRBdChpKTtcbiAgICB2YXIgc3RhdHVzID0gZmluZFN0YXR1cyhjb2RlUG9pbnQpO1xuXG4gICAgc3dpdGNoIChzdGF0dXNbMV0pIHtcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkXCI6XG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImlnbm9yZWRcIjpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWFwcGVkXCI6XG4gICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRldmlhdGlvblwiOlxuICAgICAgICBpZiAocHJvY2Vzc2luZ19vcHRpb24gPT09IFBST0NFU1NJTkdfT1BUSU9OUy5UUkFOU0lUSU9OQUwpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLCBzdGF0dXNbMl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInZhbGlkXCI6XG4gICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCI6XG4gICAgICAgIGlmICh1c2VTVEQzKSB7XG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGlzYWxsb3dlZF9TVEQzX3ZhbGlkXCI6XG4gICAgICAgIGlmICh1c2VTVEQzKSB7XG4gICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RyaW5nOiBwcm9jZXNzZWQsXG4gICAgZXJyb3I6IGhhc0Vycm9yXG4gIH07XG59XG5cbnZhciBjb21iaW5pbmdNYXJrc1JlZ2V4ID0gL1tcXHUwMzAwLVxcdTAzNkZcXHUwNDgzLVxcdTA0ODlcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNjEwLVxcdTA2MUFcXHUwNjRCLVxcdTA2NUZcXHUwNjcwXFx1MDZENi1cXHUwNkRDXFx1MDZERi1cXHUwNkU0XFx1MDZFN1xcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExXFx1MDczMC1cXHUwNzRBXFx1MDdBNi1cXHUwN0IwXFx1MDdFQi1cXHUwN0YzXFx1MDgxNi1cXHUwODE5XFx1MDgxQi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJEXFx1MDg1OS1cXHUwODVCXFx1MDhFNC1cXHUwOTAzXFx1MDkzQS1cXHUwOTNDXFx1MDkzRS1cXHUwOTRGXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTgxLVxcdTA5ODNcXHUwOUJDXFx1MDlCRS1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0RcXHUwOUQ3XFx1MDlFMlxcdTA5RTNcXHUwQTAxLVxcdTBBMDNcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE3MFxcdTBBNzFcXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEFCQ1xcdTBBQkUtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRTJcXHUwQUUzXFx1MEIwMS1cXHUwQjAzXFx1MEIzQ1xcdTBCM0UtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjYyXFx1MEI2M1xcdTBCODJcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQ3XFx1MEMwMC1cXHUwQzAzXFx1MEMzRS1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzYyXFx1MEM2M1xcdTBDODEtXFx1MEM4M1xcdTBDQkNcXHUwQ0JFLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDRTJcXHUwQ0UzXFx1MEQwMS1cXHUwRDAzXFx1MEQzRS1cXHUwRDQ0XFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDREXFx1MEQ1N1xcdTBENjJcXHUwRDYzXFx1MEQ4MlxcdTBEODNcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEUzMVxcdTBFMzQtXFx1MEUzQVxcdTBFNDctXFx1MEU0RVxcdTBFQjFcXHUwRUI0LVxcdTBFQjlcXHUwRUJCXFx1MEVCQ1xcdTBFQzgtXFx1MEVDRFxcdTBGMThcXHUwRjE5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRVxcdTBGM0ZcXHUwRjcxLVxcdTBGODRcXHUwRjg2XFx1MEY4N1xcdTBGOEQtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDJCLVxcdTEwM0VcXHUxMDU2LVxcdTEwNTlcXHUxMDVFLVxcdTEwNjBcXHUxMDYyLVxcdTEwNjRcXHUxMDY3LVxcdTEwNkRcXHUxMDcxLVxcdTEwNzRcXHUxMDgyLVxcdTEwOERcXHUxMDhGXFx1MTA5QS1cXHUxMDlEXFx1MTM1RC1cXHUxMzVGXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3QjQtXFx1MTdEM1xcdTE3RERcXHUxODBCLVxcdTE4MERcXHUxOEE5XFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MTlCMC1cXHUxOUMwXFx1MTlDOFxcdTE5QzlcXHUxQTE3LVxcdTFBMUJcXHUxQTU1LVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGXFx1MUFCMC1cXHUxQUJFXFx1MUIwMC1cXHUxQjA0XFx1MUIzNC1cXHUxQjQ0XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQjgyXFx1MUJBMS1cXHUxQkFEXFx1MUJFNi1cXHUxQkYzXFx1MUMyNC1cXHUxQzM3XFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0U4XFx1MUNFRFxcdTFDRjItXFx1MUNGNFxcdTFDRjhcXHUxQ0Y5XFx1MURDMC1cXHUxREY1XFx1MURGQy1cXHUxREZGXFx1MjBEMC1cXHUyMEYwXFx1MkNFRi1cXHUyQ0YxXFx1MkQ3RlxcdTJERTAtXFx1MkRGRlxcdTMwMkEtXFx1MzAyRlxcdTMwOTlcXHUzMDlBXFx1QTY2Ri1cXHVBNjcyXFx1QTY3NC1cXHVBNjdEXFx1QTY5RlxcdUE2RjBcXHVBNkYxXFx1QTgwMlxcdUE4MDZcXHVBODBCXFx1QTgyMy1cXHVBODI3XFx1QTg4MFxcdUE4ODFcXHVBOEI0LVxcdUE4QzRcXHVBOEUwLVxcdUE4RjFcXHVBOTI2LVxcdUE5MkRcXHVBOTQ3LVxcdUE5NTNcXHVBOTgwLVxcdUE5ODNcXHVBOUIzLVxcdUE5QzBcXHVBOUU1XFx1QUEyOS1cXHVBQTM2XFx1QUE0M1xcdUFBNENcXHVBQTREXFx1QUE3Qi1cXHVBQTdEXFx1QUFCMFxcdUFBQjItXFx1QUFCNFxcdUFBQjdcXHVBQUI4XFx1QUFCRVxcdUFBQkZcXHVBQUMxXFx1QUFFQi1cXHVBQUVGXFx1QUFGNVxcdUFBRjZcXHVBQkUzLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUZCMUVcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkRdfFxcdUQ4MDBbXFx1RERGRFxcdURFRTBcXHVERjc2LVxcdURGN0FdfFxcdUQ4MDJbXFx1REUwMS1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMEZcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REVFNVxcdURFRTZdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzAyXFx1REMzOC1cXHVEQzQ2XFx1REM3Ri1cXHVEQzgyXFx1RENCMC1cXHVEQ0JBXFx1REQwMC1cXHVERDAyXFx1REQyNy1cXHVERDM0XFx1REQ3M1xcdUREODAtXFx1REQ4MlxcdUREQjMtXFx1RERDMFxcdURFMkMtXFx1REUzN1xcdURFREYtXFx1REVFQVxcdURGMDEtXFx1REYwM1xcdURGM0NcXHVERjNFLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjYyXFx1REY2M1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQ0IwLVxcdURDQzNcXHVEREFGLVxcdUREQjVcXHVEREI4LVxcdUREQzBcXHVERTMwLVxcdURFNDBcXHVERUFCLVxcdURFQjddfFxcdUQ4MUFbXFx1REVGMC1cXHVERUY0XFx1REYzMC1cXHVERjM2XXxcXHVEODFCW1xcdURGNTEtXFx1REY3RVxcdURGOEYtXFx1REY5Ml18XFx1RDgyRltcXHVEQzlEXFx1REM5RV18XFx1RDgzNFtcXHVERDY1LVxcdURENjlcXHVERDZELVxcdURENzJcXHVERDdCLVxcdUREODJcXHVERDg1LVxcdUREOEJcXHVEREFBLVxcdUREQURcXHVERTQyLVxcdURFNDRdfFxcdUQ4M0FbXFx1RENEMC1cXHVEQ0Q2XXxcXHVEQjQwW1xcdUREMDAtXFx1RERFRl0vO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUxhYmVsKGxhYmVsLCBwcm9jZXNzaW5nX29wdGlvbikge1xuICBpZiAobGFiZWwuc3Vic3RyKDAsIDQpID09PSBcInhuLS1cIikge1xuICAgIGxhYmVsID0gcHVueWNvZGUudG9Vbmljb2RlKGxhYmVsKTtcbiAgICBwcm9jZXNzaW5nX29wdGlvbiA9IFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUw7XG4gIH1cblxuICB2YXIgZXJyb3IgPSBmYWxzZTtcblxuICBpZiAobm9ybWFsaXplKGxhYmVsKSAhPT0gbGFiZWwgfHxcbiAgICAgIChsYWJlbFszXSA9PT0gXCItXCIgJiYgbGFiZWxbNF0gPT09IFwiLVwiKSB8fFxuICAgICAgbGFiZWxbMF0gPT09IFwiLVwiIHx8IGxhYmVsW2xhYmVsLmxlbmd0aCAtIDFdID09PSBcIi1cIiB8fFxuICAgICAgbGFiZWwuaW5kZXhPZihcIi5cIikgIT09IC0xIHx8XG4gICAgICBsYWJlbC5zZWFyY2goY29tYmluaW5nTWFya3NSZWdleCkgPT09IDApIHtcbiAgICBlcnJvciA9IHRydWU7XG4gIH1cblxuICB2YXIgbGVuID0gY291bnRTeW1ib2xzKGxhYmVsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBzdGF0dXMgPSBmaW5kU3RhdHVzKGxhYmVsLmNvZGVQb2ludEF0KGkpKTtcbiAgICBpZiAoKHByb2Nlc3NpbmcgPT09IFBST0NFU1NJTkdfT1BUSU9OUy5UUkFOU0lUSU9OQUwgJiYgc3RhdHVzWzFdICE9PSBcInZhbGlkXCIpIHx8XG4gICAgICAgIChwcm9jZXNzaW5nID09PSBQUk9DRVNTSU5HX09QVElPTlMuTk9OVFJBTlNJVElPTkFMICYmXG4gICAgICAgICBzdGF0dXNbMV0gIT09IFwidmFsaWRcIiAmJiBzdGF0dXNbMV0gIT09IFwiZGV2aWF0aW9uXCIpKSB7XG4gICAgICBlcnJvciA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxhYmVsOiBsYWJlbCxcbiAgICBlcnJvcjogZXJyb3JcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc2luZyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pIHtcbiAgdmFyIHJlc3VsdCA9IG1hcENoYXJzKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbik7XG4gIHJlc3VsdC5zdHJpbmcgPSBub3JtYWxpemUocmVzdWx0LnN0cmluZyk7XG5cbiAgdmFyIGxhYmVscyA9IHJlc3VsdC5zdHJpbmcuc3BsaXQoXCIuXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgdmFsaWRhdGlvbiA9IHZhbGlkYXRlTGFiZWwobGFiZWxzW2ldKTtcbiAgICAgIGxhYmVsc1tpXSA9IHZhbGlkYXRpb24ubGFiZWw7XG4gICAgICByZXN1bHQuZXJyb3IgPSByZXN1bHQuZXJyb3IgfHwgdmFsaWRhdGlvbi5lcnJvcjtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdHJpbmc6IGxhYmVscy5qb2luKFwiLlwiKSxcbiAgICBlcnJvcjogcmVzdWx0LmVycm9yXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzLnRvQVNDSUkgPSBmdW5jdGlvbihkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24sIHZlcmlmeURuc0xlbmd0aCkge1xuICB2YXIgcmVzdWx0ID0gcHJvY2Vzc2luZyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pO1xuICB2YXIgbGFiZWxzID0gcmVzdWx0LnN0cmluZy5zcGxpdChcIi5cIik7XG4gIGxhYmVscyA9IGxhYmVscy5tYXAoZnVuY3Rpb24obCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcHVueWNvZGUudG9BU0NJSShsKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgICByZXR1cm4gbDtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh2ZXJpZnlEbnNMZW5ndGgpIHtcbiAgICB2YXIgdG90YWwgPSBsYWJlbHMuc2xpY2UoMCwgbGFiZWxzLmxlbmd0aCAtIDEpLmpvaW4oXCIuXCIpLmxlbmd0aDtcbiAgICBpZiAodG90YWwubGVuZ3RoID4gMjUzIHx8IHRvdGFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpPTA7IGkgPCBsYWJlbHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChsYWJlbHMubGVuZ3RoID4gNjMgfHwgbGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXN1bHQuZXJyb3IgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmVzdWx0LmVycm9yKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGxhYmVscy5qb2luKFwiLlwiKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLnRvVW5pY29kZSA9IGZ1bmN0aW9uKGRvbWFpbl9uYW1lLCB1c2VTVEQzKSB7XG4gIHZhciByZXN1bHQgPSBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBQUk9DRVNTSU5HX09QVElPTlMuTk9OVFJBTlNJVElPTkFMKTtcblxuICByZXR1cm4ge1xuICAgIGRvbWFpbjogcmVzdWx0LnN0cmluZyxcbiAgICBlcnJvcjogcmVzdWx0LmVycm9yXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5QUk9DRVNTSU5HX09QVElPTlMgPSBQUk9DRVNTSU5HX09QVElPTlM7XG4iLCJtb2R1bGUuZXhwb3J0cz1bW1swLDQ0XSxcImRpc2FsbG93ZWRfU1REM192YWxpZFwiXSxbWzQ1LDQ2XSxcInZhbGlkXCJdLFtbNDcsNDddLFwiZGlzYWxsb3dlZF9TVEQzX3ZhbGlkXCJdLFtbNDgsNTddLFwidmFsaWRcIl0sW1s1OCw2NF0sXCJkaXNhbGxvd2VkX1NURDNfdmFsaWRcIl0sW1s2NSw2NV0sXCJtYXBwZWRcIixbOTddXSxbWzY2LDY2XSxcIm1hcHBlZFwiLFs5OF1dLFtbNjcsNjddLFwibWFwcGVkXCIsWzk5XV0sW1s2OCw2OF0sXCJtYXBwZWRcIixbMTAwXV0sW1s2OSw2OV0sXCJtYXBwZWRcIixbMTAxXV0sW1s3MCw3MF0sXCJtYXBwZWRcIixbMTAyXV0sW1s3MSw3MV0sXCJtYXBwZWRcIixbMTAzXV0sW1s3Miw3Ml0sXCJtYXBwZWRcIixbMTA0XV0sW1s3Myw3M10sXCJtYXBwZWRcIixbMTA1XV0sW1s3NCw3NF0sXCJtYXBwZWRcIixbMTA2XV0sW1s3NSw3NV0sXCJtYXBwZWRcIixbMTA3XV0sW1s3Niw3Nl0sXCJtYXBwZWRcIixbMTA4XV0sW1s3Nyw3N10sXCJtYXBwZWRcIixbMTA5XV0sW1s3OCw3OF0sXCJtYXBwZWRcIixbMTEwXV0sW1s3OSw3OV0sXCJtYXBwZWRcIixbMTExXV0sW1s4MCw4MF0sXCJtYXBwZWRcIixbMTEyXV0sW1s4MSw4MV0sXCJtYXBwZWRcIixbMTEzXV0sW1s4Miw4Ml0sXCJtYXBwZWRcIixbMTE0XV0sW1s4Myw4M10sXCJtYXBwZWRcIixbMTE1XV0sW1s4NCw4NF0sXCJtYXBwZWRcIixbMTE2XV0sW1s4NSw4NV0sXCJtYXBwZWRcIixbMTE3XV0sW1s4Niw4Nl0sXCJtYXBwZWRcIixbMTE4XV0sW1s4Nyw4N10sXCJtYXBwZWRcIixbMTE5XV0sW1s4OCw4OF0sXCJtYXBwZWRcIixbMTIwXV0sW1s4OSw4OV0sXCJtYXBwZWRcIixbMTIxXV0sW1s5MCw5MF0sXCJtYXBwZWRcIixbMTIyXV0sW1s5MSw5Nl0sXCJkaXNhbGxvd2VkX1NURDNfdmFsaWRcIl0sW1s5NywxMjJdLFwidmFsaWRcIl0sW1sxMjMsMTI3XSxcImRpc2FsbG93ZWRfU1REM192YWxpZFwiXSxbWzEyOCwxNTldLFwiZGlzYWxsb3dlZFwiXSxbWzE2MCwxNjBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMl1dLFtbMTYxLDE2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTY4LDE2OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Nl1dLFtbMTY5LDE2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTcwLDE3MF0sXCJtYXBwZWRcIixbOTddXSxbWzE3MSwxNzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE3MywxNzNdLFwiaWdub3JlZFwiXSxbWzE3NCwxNzRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE3NSwxNzVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzJdXSxbWzE3NiwxNzddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE3OCwxNzhdLFwibWFwcGVkXCIsWzUwXV0sW1sxNzksMTc5XSxcIm1hcHBlZFwiLFs1MV1dLFtbMTgwLDE4MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc2OV1dLFtbMTgxLDE4MV0sXCJtYXBwZWRcIixbOTU2XV0sW1sxODIsMTgyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxODMsMTgzXSxcInZhbGlkXCJdLFtbMTg0LDE4NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDgwN11dLFtbMTg1LDE4NV0sXCJtYXBwZWRcIixbNDldXSxbWzE4NiwxODZdLFwibWFwcGVkXCIsWzExMV1dLFtbMTg3LDE4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTg4LDE4OF0sXCJtYXBwZWRcIixbNDksODI2MCw1Ml1dLFtbMTg5LDE4OV0sXCJtYXBwZWRcIixbNDksODI2MCw1MF1dLFtbMTkwLDE5MF0sXCJtYXBwZWRcIixbNTEsODI2MCw1Ml1dLFtbMTkxLDE5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTkyLDE5Ml0sXCJtYXBwZWRcIixbMjI0XV0sW1sxOTMsMTkzXSxcIm1hcHBlZFwiLFsyMjVdXSxbWzE5NCwxOTRdLFwibWFwcGVkXCIsWzIyNl1dLFtbMTk1LDE5NV0sXCJtYXBwZWRcIixbMjI3XV0sW1sxOTYsMTk2XSxcIm1hcHBlZFwiLFsyMjhdXSxbWzE5NywxOTddLFwibWFwcGVkXCIsWzIyOV1dLFtbMTk4LDE5OF0sXCJtYXBwZWRcIixbMjMwXV0sW1sxOTksMTk5XSxcIm1hcHBlZFwiLFsyMzFdXSxbWzIwMCwyMDBdLFwibWFwcGVkXCIsWzIzMl1dLFtbMjAxLDIwMV0sXCJtYXBwZWRcIixbMjMzXV0sW1syMDIsMjAyXSxcIm1hcHBlZFwiLFsyMzRdXSxbWzIwMywyMDNdLFwibWFwcGVkXCIsWzIzNV1dLFtbMjA0LDIwNF0sXCJtYXBwZWRcIixbMjM2XV0sW1syMDUsMjA1XSxcIm1hcHBlZFwiLFsyMzddXSxbWzIwNiwyMDZdLFwibWFwcGVkXCIsWzIzOF1dLFtbMjA3LDIwN10sXCJtYXBwZWRcIixbMjM5XV0sW1syMDgsMjA4XSxcIm1hcHBlZFwiLFsyNDBdXSxbWzIwOSwyMDldLFwibWFwcGVkXCIsWzI0MV1dLFtbMjEwLDIxMF0sXCJtYXBwZWRcIixbMjQyXV0sW1syMTEsMjExXSxcIm1hcHBlZFwiLFsyNDNdXSxbWzIxMiwyMTJdLFwibWFwcGVkXCIsWzI0NF1dLFtbMjEzLDIxM10sXCJtYXBwZWRcIixbMjQ1XV0sW1syMTQsMjE0XSxcIm1hcHBlZFwiLFsyNDZdXSxbWzIxNSwyMTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzIxNiwyMTZdLFwibWFwcGVkXCIsWzI0OF1dLFtbMjE3LDIxN10sXCJtYXBwZWRcIixbMjQ5XV0sW1syMTgsMjE4XSxcIm1hcHBlZFwiLFsyNTBdXSxbWzIxOSwyMTldLFwibWFwcGVkXCIsWzI1MV1dLFtbMjIwLDIyMF0sXCJtYXBwZWRcIixbMjUyXV0sW1syMjEsMjIxXSxcIm1hcHBlZFwiLFsyNTNdXSxbWzIyMiwyMjJdLFwibWFwcGVkXCIsWzI1NF1dLFtbMjIzLDIyM10sXCJkZXZpYXRpb25cIixbMTE1LDExNV1dLFtbMjI0LDI0Nl0sXCJ2YWxpZFwiXSxbWzI0NywyNDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI0OCwyNTVdLFwidmFsaWRcIl0sW1syNTYsMjU2XSxcIm1hcHBlZFwiLFsyNTddXSxbWzI1NywyNTddLFwidmFsaWRcIl0sW1syNTgsMjU4XSxcIm1hcHBlZFwiLFsyNTldXSxbWzI1OSwyNTldLFwidmFsaWRcIl0sW1syNjAsMjYwXSxcIm1hcHBlZFwiLFsyNjFdXSxbWzI2MSwyNjFdLFwidmFsaWRcIl0sW1syNjIsMjYyXSxcIm1hcHBlZFwiLFsyNjNdXSxbWzI2MywyNjNdLFwidmFsaWRcIl0sW1syNjQsMjY0XSxcIm1hcHBlZFwiLFsyNjVdXSxbWzI2NSwyNjVdLFwidmFsaWRcIl0sW1syNjYsMjY2XSxcIm1hcHBlZFwiLFsyNjddXSxbWzI2NywyNjddLFwidmFsaWRcIl0sW1syNjgsMjY4XSxcIm1hcHBlZFwiLFsyNjldXSxbWzI2OSwyNjldLFwidmFsaWRcIl0sW1syNzAsMjcwXSxcIm1hcHBlZFwiLFsyNzFdXSxbWzI3MSwyNzFdLFwidmFsaWRcIl0sW1syNzIsMjcyXSxcIm1hcHBlZFwiLFsyNzNdXSxbWzI3MywyNzNdLFwidmFsaWRcIl0sW1syNzQsMjc0XSxcIm1hcHBlZFwiLFsyNzVdXSxbWzI3NSwyNzVdLFwidmFsaWRcIl0sW1syNzYsMjc2XSxcIm1hcHBlZFwiLFsyNzddXSxbWzI3NywyNzddLFwidmFsaWRcIl0sW1syNzgsMjc4XSxcIm1hcHBlZFwiLFsyNzldXSxbWzI3OSwyNzldLFwidmFsaWRcIl0sW1syODAsMjgwXSxcIm1hcHBlZFwiLFsyODFdXSxbWzI4MSwyODFdLFwidmFsaWRcIl0sW1syODIsMjgyXSxcIm1hcHBlZFwiLFsyODNdXSxbWzI4MywyODNdLFwidmFsaWRcIl0sW1syODQsMjg0XSxcIm1hcHBlZFwiLFsyODVdXSxbWzI4NSwyODVdLFwidmFsaWRcIl0sW1syODYsMjg2XSxcIm1hcHBlZFwiLFsyODddXSxbWzI4NywyODddLFwidmFsaWRcIl0sW1syODgsMjg4XSxcIm1hcHBlZFwiLFsyODldXSxbWzI4OSwyODldLFwidmFsaWRcIl0sW1syOTAsMjkwXSxcIm1hcHBlZFwiLFsyOTFdXSxbWzI5MSwyOTFdLFwidmFsaWRcIl0sW1syOTIsMjkyXSxcIm1hcHBlZFwiLFsyOTNdXSxbWzI5MywyOTNdLFwidmFsaWRcIl0sW1syOTQsMjk0XSxcIm1hcHBlZFwiLFsyOTVdXSxbWzI5NSwyOTVdLFwidmFsaWRcIl0sW1syOTYsMjk2XSxcIm1hcHBlZFwiLFsyOTddXSxbWzI5NywyOTddLFwidmFsaWRcIl0sW1syOTgsMjk4XSxcIm1hcHBlZFwiLFsyOTldXSxbWzI5OSwyOTldLFwidmFsaWRcIl0sW1szMDAsMzAwXSxcIm1hcHBlZFwiLFszMDFdXSxbWzMwMSwzMDFdLFwidmFsaWRcIl0sW1szMDIsMzAyXSxcIm1hcHBlZFwiLFszMDNdXSxbWzMwMywzMDNdLFwidmFsaWRcIl0sW1szMDQsMzA0XSxcIm1hcHBlZFwiLFsxMDUsNzc1XV0sW1szMDUsMzA1XSxcInZhbGlkXCJdLFtbMzA2LDMwN10sXCJtYXBwZWRcIixbMTA1LDEwNl1dLFtbMzA4LDMwOF0sXCJtYXBwZWRcIixbMzA5XV0sW1szMDksMzA5XSxcInZhbGlkXCJdLFtbMzEwLDMxMF0sXCJtYXBwZWRcIixbMzExXV0sW1szMTEsMzEyXSxcInZhbGlkXCJdLFtbMzEzLDMxM10sXCJtYXBwZWRcIixbMzE0XV0sW1szMTQsMzE0XSxcInZhbGlkXCJdLFtbMzE1LDMxNV0sXCJtYXBwZWRcIixbMzE2XV0sW1szMTYsMzE2XSxcInZhbGlkXCJdLFtbMzE3LDMxN10sXCJtYXBwZWRcIixbMzE4XV0sW1szMTgsMzE4XSxcInZhbGlkXCJdLFtbMzE5LDMyMF0sXCJtYXBwZWRcIixbMTA4LDE4M11dLFtbMzIxLDMyMV0sXCJtYXBwZWRcIixbMzIyXV0sW1szMjIsMzIyXSxcInZhbGlkXCJdLFtbMzIzLDMyM10sXCJtYXBwZWRcIixbMzI0XV0sW1szMjQsMzI0XSxcInZhbGlkXCJdLFtbMzI1LDMyNV0sXCJtYXBwZWRcIixbMzI2XV0sW1szMjYsMzI2XSxcInZhbGlkXCJdLFtbMzI3LDMyN10sXCJtYXBwZWRcIixbMzI4XV0sW1szMjgsMzI4XSxcInZhbGlkXCJdLFtbMzI5LDMyOV0sXCJtYXBwZWRcIixbNzAwLDExMF1dLFtbMzMwLDMzMF0sXCJtYXBwZWRcIixbMzMxXV0sW1szMzEsMzMxXSxcInZhbGlkXCJdLFtbMzMyLDMzMl0sXCJtYXBwZWRcIixbMzMzXV0sW1szMzMsMzMzXSxcInZhbGlkXCJdLFtbMzM0LDMzNF0sXCJtYXBwZWRcIixbMzM1XV0sW1szMzUsMzM1XSxcInZhbGlkXCJdLFtbMzM2LDMzNl0sXCJtYXBwZWRcIixbMzM3XV0sW1szMzcsMzM3XSxcInZhbGlkXCJdLFtbMzM4LDMzOF0sXCJtYXBwZWRcIixbMzM5XV0sW1szMzksMzM5XSxcInZhbGlkXCJdLFtbMzQwLDM0MF0sXCJtYXBwZWRcIixbMzQxXV0sW1szNDEsMzQxXSxcInZhbGlkXCJdLFtbMzQyLDM0Ml0sXCJtYXBwZWRcIixbMzQzXV0sW1szNDMsMzQzXSxcInZhbGlkXCJdLFtbMzQ0LDM0NF0sXCJtYXBwZWRcIixbMzQ1XV0sW1szNDUsMzQ1XSxcInZhbGlkXCJdLFtbMzQ2LDM0Nl0sXCJtYXBwZWRcIixbMzQ3XV0sW1szNDcsMzQ3XSxcInZhbGlkXCJdLFtbMzQ4LDM0OF0sXCJtYXBwZWRcIixbMzQ5XV0sW1szNDksMzQ5XSxcInZhbGlkXCJdLFtbMzUwLDM1MF0sXCJtYXBwZWRcIixbMzUxXV0sW1szNTEsMzUxXSxcInZhbGlkXCJdLFtbMzUyLDM1Ml0sXCJtYXBwZWRcIixbMzUzXV0sW1szNTMsMzUzXSxcInZhbGlkXCJdLFtbMzU0LDM1NF0sXCJtYXBwZWRcIixbMzU1XV0sW1szNTUsMzU1XSxcInZhbGlkXCJdLFtbMzU2LDM1Nl0sXCJtYXBwZWRcIixbMzU3XV0sW1szNTcsMzU3XSxcInZhbGlkXCJdLFtbMzU4LDM1OF0sXCJtYXBwZWRcIixbMzU5XV0sW1szNTksMzU5XSxcInZhbGlkXCJdLFtbMzYwLDM2MF0sXCJtYXBwZWRcIixbMzYxXV0sW1szNjEsMzYxXSxcInZhbGlkXCJdLFtbMzYyLDM2Ml0sXCJtYXBwZWRcIixbMzYzXV0sW1szNjMsMzYzXSxcInZhbGlkXCJdLFtbMzY0LDM2NF0sXCJtYXBwZWRcIixbMzY1XV0sW1szNjUsMzY1XSxcInZhbGlkXCJdLFtbMzY2LDM2Nl0sXCJtYXBwZWRcIixbMzY3XV0sW1szNjcsMzY3XSxcInZhbGlkXCJdLFtbMzY4LDM2OF0sXCJtYXBwZWRcIixbMzY5XV0sW1szNjksMzY5XSxcInZhbGlkXCJdLFtbMzcwLDM3MF0sXCJtYXBwZWRcIixbMzcxXV0sW1szNzEsMzcxXSxcInZhbGlkXCJdLFtbMzcyLDM3Ml0sXCJtYXBwZWRcIixbMzczXV0sW1szNzMsMzczXSxcInZhbGlkXCJdLFtbMzc0LDM3NF0sXCJtYXBwZWRcIixbMzc1XV0sW1szNzUsMzc1XSxcInZhbGlkXCJdLFtbMzc2LDM3Nl0sXCJtYXBwZWRcIixbMjU1XV0sW1szNzcsMzc3XSxcIm1hcHBlZFwiLFszNzhdXSxbWzM3OCwzNzhdLFwidmFsaWRcIl0sW1szNzksMzc5XSxcIm1hcHBlZFwiLFszODBdXSxbWzM4MCwzODBdLFwidmFsaWRcIl0sW1szODEsMzgxXSxcIm1hcHBlZFwiLFszODJdXSxbWzM4MiwzODJdLFwidmFsaWRcIl0sW1szODMsMzgzXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzM4NCwzODRdLFwidmFsaWRcIl0sW1szODUsMzg1XSxcIm1hcHBlZFwiLFs1OTVdXSxbWzM4NiwzODZdLFwibWFwcGVkXCIsWzM4N11dLFtbMzg3LDM4N10sXCJ2YWxpZFwiXSxbWzM4OCwzODhdLFwibWFwcGVkXCIsWzM4OV1dLFtbMzg5LDM4OV0sXCJ2YWxpZFwiXSxbWzM5MCwzOTBdLFwibWFwcGVkXCIsWzU5Nl1dLFtbMzkxLDM5MV0sXCJtYXBwZWRcIixbMzkyXV0sW1szOTIsMzkyXSxcInZhbGlkXCJdLFtbMzkzLDM5M10sXCJtYXBwZWRcIixbNTk4XV0sW1szOTQsMzk0XSxcIm1hcHBlZFwiLFs1OTldXSxbWzM5NSwzOTVdLFwibWFwcGVkXCIsWzM5Nl1dLFtbMzk2LDM5N10sXCJ2YWxpZFwiXSxbWzM5OCwzOThdLFwibWFwcGVkXCIsWzQ3N11dLFtbMzk5LDM5OV0sXCJtYXBwZWRcIixbNjAxXV0sW1s0MDAsNDAwXSxcIm1hcHBlZFwiLFs2MDNdXSxbWzQwMSw0MDFdLFwibWFwcGVkXCIsWzQwMl1dLFtbNDAyLDQwMl0sXCJ2YWxpZFwiXSxbWzQwMyw0MDNdLFwibWFwcGVkXCIsWzYwOF1dLFtbNDA0LDQwNF0sXCJtYXBwZWRcIixbNjExXV0sW1s0MDUsNDA1XSxcInZhbGlkXCJdLFtbNDA2LDQwNl0sXCJtYXBwZWRcIixbNjE3XV0sW1s0MDcsNDA3XSxcIm1hcHBlZFwiLFs2MTZdXSxbWzQwOCw0MDhdLFwibWFwcGVkXCIsWzQwOV1dLFtbNDA5LDQxMV0sXCJ2YWxpZFwiXSxbWzQxMiw0MTJdLFwibWFwcGVkXCIsWzYyM11dLFtbNDEzLDQxM10sXCJtYXBwZWRcIixbNjI2XV0sW1s0MTQsNDE0XSxcInZhbGlkXCJdLFtbNDE1LDQxNV0sXCJtYXBwZWRcIixbNjI5XV0sW1s0MTYsNDE2XSxcIm1hcHBlZFwiLFs0MTddXSxbWzQxNyw0MTddLFwidmFsaWRcIl0sW1s0MTgsNDE4XSxcIm1hcHBlZFwiLFs0MTldXSxbWzQxOSw0MTldLFwidmFsaWRcIl0sW1s0MjAsNDIwXSxcIm1hcHBlZFwiLFs0MjFdXSxbWzQyMSw0MjFdLFwidmFsaWRcIl0sW1s0MjIsNDIyXSxcIm1hcHBlZFwiLFs2NDBdXSxbWzQyMyw0MjNdLFwibWFwcGVkXCIsWzQyNF1dLFtbNDI0LDQyNF0sXCJ2YWxpZFwiXSxbWzQyNSw0MjVdLFwibWFwcGVkXCIsWzY0M11dLFtbNDI2LDQyN10sXCJ2YWxpZFwiXSxbWzQyOCw0MjhdLFwibWFwcGVkXCIsWzQyOV1dLFtbNDI5LDQyOV0sXCJ2YWxpZFwiXSxbWzQzMCw0MzBdLFwibWFwcGVkXCIsWzY0OF1dLFtbNDMxLDQzMV0sXCJtYXBwZWRcIixbNDMyXV0sW1s0MzIsNDMyXSxcInZhbGlkXCJdLFtbNDMzLDQzM10sXCJtYXBwZWRcIixbNjUwXV0sW1s0MzQsNDM0XSxcIm1hcHBlZFwiLFs2NTFdXSxbWzQzNSw0MzVdLFwibWFwcGVkXCIsWzQzNl1dLFtbNDM2LDQzNl0sXCJ2YWxpZFwiXSxbWzQzNyw0MzddLFwibWFwcGVkXCIsWzQzOF1dLFtbNDM4LDQzOF0sXCJ2YWxpZFwiXSxbWzQzOSw0MzldLFwibWFwcGVkXCIsWzY1OF1dLFtbNDQwLDQ0MF0sXCJtYXBwZWRcIixbNDQxXV0sW1s0NDEsNDQzXSxcInZhbGlkXCJdLFtbNDQ0LDQ0NF0sXCJtYXBwZWRcIixbNDQ1XV0sW1s0NDUsNDUxXSxcInZhbGlkXCJdLFtbNDUyLDQ1NF0sXCJtYXBwZWRcIixbMTAwLDM4Ml1dLFtbNDU1LDQ1N10sXCJtYXBwZWRcIixbMTA4LDEwNl1dLFtbNDU4LDQ2MF0sXCJtYXBwZWRcIixbMTEwLDEwNl1dLFtbNDYxLDQ2MV0sXCJtYXBwZWRcIixbNDYyXV0sW1s0NjIsNDYyXSxcInZhbGlkXCJdLFtbNDYzLDQ2M10sXCJtYXBwZWRcIixbNDY0XV0sW1s0NjQsNDY0XSxcInZhbGlkXCJdLFtbNDY1LDQ2NV0sXCJtYXBwZWRcIixbNDY2XV0sW1s0NjYsNDY2XSxcInZhbGlkXCJdLFtbNDY3LDQ2N10sXCJtYXBwZWRcIixbNDY4XV0sW1s0NjgsNDY4XSxcInZhbGlkXCJdLFtbNDY5LDQ2OV0sXCJtYXBwZWRcIixbNDcwXV0sW1s0NzAsNDcwXSxcInZhbGlkXCJdLFtbNDcxLDQ3MV0sXCJtYXBwZWRcIixbNDcyXV0sW1s0NzIsNDcyXSxcInZhbGlkXCJdLFtbNDczLDQ3M10sXCJtYXBwZWRcIixbNDc0XV0sW1s0NzQsNDc0XSxcInZhbGlkXCJdLFtbNDc1LDQ3NV0sXCJtYXBwZWRcIixbNDc2XV0sW1s0NzYsNDc3XSxcInZhbGlkXCJdLFtbNDc4LDQ3OF0sXCJtYXBwZWRcIixbNDc5XV0sW1s0NzksNDc5XSxcInZhbGlkXCJdLFtbNDgwLDQ4MF0sXCJtYXBwZWRcIixbNDgxXV0sW1s0ODEsNDgxXSxcInZhbGlkXCJdLFtbNDgyLDQ4Ml0sXCJtYXBwZWRcIixbNDgzXV0sW1s0ODMsNDgzXSxcInZhbGlkXCJdLFtbNDg0LDQ4NF0sXCJtYXBwZWRcIixbNDg1XV0sW1s0ODUsNDg1XSxcInZhbGlkXCJdLFtbNDg2LDQ4Nl0sXCJtYXBwZWRcIixbNDg3XV0sW1s0ODcsNDg3XSxcInZhbGlkXCJdLFtbNDg4LDQ4OF0sXCJtYXBwZWRcIixbNDg5XV0sW1s0ODksNDg5XSxcInZhbGlkXCJdLFtbNDkwLDQ5MF0sXCJtYXBwZWRcIixbNDkxXV0sW1s0OTEsNDkxXSxcInZhbGlkXCJdLFtbNDkyLDQ5Ml0sXCJtYXBwZWRcIixbNDkzXV0sW1s0OTMsNDkzXSxcInZhbGlkXCJdLFtbNDk0LDQ5NF0sXCJtYXBwZWRcIixbNDk1XV0sW1s0OTUsNDk2XSxcInZhbGlkXCJdLFtbNDk3LDQ5OV0sXCJtYXBwZWRcIixbMTAwLDEyMl1dLFtbNTAwLDUwMF0sXCJtYXBwZWRcIixbNTAxXV0sW1s1MDEsNTAxXSxcInZhbGlkXCJdLFtbNTAyLDUwMl0sXCJtYXBwZWRcIixbNDA1XV0sW1s1MDMsNTAzXSxcIm1hcHBlZFwiLFs0NDddXSxbWzUwNCw1MDRdLFwibWFwcGVkXCIsWzUwNV1dLFtbNTA1LDUwNV0sXCJ2YWxpZFwiXSxbWzUwNiw1MDZdLFwibWFwcGVkXCIsWzUwN11dLFtbNTA3LDUwN10sXCJ2YWxpZFwiXSxbWzUwOCw1MDhdLFwibWFwcGVkXCIsWzUwOV1dLFtbNTA5LDUwOV0sXCJ2YWxpZFwiXSxbWzUxMCw1MTBdLFwibWFwcGVkXCIsWzUxMV1dLFtbNTExLDUxMV0sXCJ2YWxpZFwiXSxbWzUxMiw1MTJdLFwibWFwcGVkXCIsWzUxM11dLFtbNTEzLDUxM10sXCJ2YWxpZFwiXSxbWzUxNCw1MTRdLFwibWFwcGVkXCIsWzUxNV1dLFtbNTE1LDUxNV0sXCJ2YWxpZFwiXSxbWzUxNiw1MTZdLFwibWFwcGVkXCIsWzUxN11dLFtbNTE3LDUxN10sXCJ2YWxpZFwiXSxbWzUxOCw1MThdLFwibWFwcGVkXCIsWzUxOV1dLFtbNTE5LDUxOV0sXCJ2YWxpZFwiXSxbWzUyMCw1MjBdLFwibWFwcGVkXCIsWzUyMV1dLFtbNTIxLDUyMV0sXCJ2YWxpZFwiXSxbWzUyMiw1MjJdLFwibWFwcGVkXCIsWzUyM11dLFtbNTIzLDUyM10sXCJ2YWxpZFwiXSxbWzUyNCw1MjRdLFwibWFwcGVkXCIsWzUyNV1dLFtbNTI1LDUyNV0sXCJ2YWxpZFwiXSxbWzUyNiw1MjZdLFwibWFwcGVkXCIsWzUyN11dLFtbNTI3LDUyN10sXCJ2YWxpZFwiXSxbWzUyOCw1MjhdLFwibWFwcGVkXCIsWzUyOV1dLFtbNTI5LDUyOV0sXCJ2YWxpZFwiXSxbWzUzMCw1MzBdLFwibWFwcGVkXCIsWzUzMV1dLFtbNTMxLDUzMV0sXCJ2YWxpZFwiXSxbWzUzMiw1MzJdLFwibWFwcGVkXCIsWzUzM11dLFtbNTMzLDUzM10sXCJ2YWxpZFwiXSxbWzUzNCw1MzRdLFwibWFwcGVkXCIsWzUzNV1dLFtbNTM1LDUzNV0sXCJ2YWxpZFwiXSxbWzUzNiw1MzZdLFwibWFwcGVkXCIsWzUzN11dLFtbNTM3LDUzN10sXCJ2YWxpZFwiXSxbWzUzOCw1MzhdLFwibWFwcGVkXCIsWzUzOV1dLFtbNTM5LDUzOV0sXCJ2YWxpZFwiXSxbWzU0MCw1NDBdLFwibWFwcGVkXCIsWzU0MV1dLFtbNTQxLDU0MV0sXCJ2YWxpZFwiXSxbWzU0Miw1NDJdLFwibWFwcGVkXCIsWzU0M11dLFtbNTQzLDU0M10sXCJ2YWxpZFwiXSxbWzU0NCw1NDRdLFwibWFwcGVkXCIsWzQxNF1dLFtbNTQ1LDU0NV0sXCJ2YWxpZFwiXSxbWzU0Niw1NDZdLFwibWFwcGVkXCIsWzU0N11dLFtbNTQ3LDU0N10sXCJ2YWxpZFwiXSxbWzU0OCw1NDhdLFwibWFwcGVkXCIsWzU0OV1dLFtbNTQ5LDU0OV0sXCJ2YWxpZFwiXSxbWzU1MCw1NTBdLFwibWFwcGVkXCIsWzU1MV1dLFtbNTUxLDU1MV0sXCJ2YWxpZFwiXSxbWzU1Miw1NTJdLFwibWFwcGVkXCIsWzU1M11dLFtbNTUzLDU1M10sXCJ2YWxpZFwiXSxbWzU1NCw1NTRdLFwibWFwcGVkXCIsWzU1NV1dLFtbNTU1LDU1NV0sXCJ2YWxpZFwiXSxbWzU1Niw1NTZdLFwibWFwcGVkXCIsWzU1N11dLFtbNTU3LDU1N10sXCJ2YWxpZFwiXSxbWzU1OCw1NThdLFwibWFwcGVkXCIsWzU1OV1dLFtbNTU5LDU1OV0sXCJ2YWxpZFwiXSxbWzU2MCw1NjBdLFwibWFwcGVkXCIsWzU2MV1dLFtbNTYxLDU2MV0sXCJ2YWxpZFwiXSxbWzU2Miw1NjJdLFwibWFwcGVkXCIsWzU2M11dLFtbNTYzLDU2M10sXCJ2YWxpZFwiXSxbWzU2NCw1NjZdLFwidmFsaWRcIl0sW1s1NjcsNTY5XSxcInZhbGlkXCJdLFtbNTcwLDU3MF0sXCJtYXBwZWRcIixbMTEzNjVdXSxbWzU3MSw1NzFdLFwibWFwcGVkXCIsWzU3Ml1dLFtbNTcyLDU3Ml0sXCJ2YWxpZFwiXSxbWzU3Myw1NzNdLFwibWFwcGVkXCIsWzQxMF1dLFtbNTc0LDU3NF0sXCJtYXBwZWRcIixbMTEzNjZdXSxbWzU3NSw1NzZdLFwidmFsaWRcIl0sW1s1NzcsNTc3XSxcIm1hcHBlZFwiLFs1NzhdXSxbWzU3OCw1NzhdLFwidmFsaWRcIl0sW1s1NzksNTc5XSxcIm1hcHBlZFwiLFszODRdXSxbWzU4MCw1ODBdLFwibWFwcGVkXCIsWzY0OV1dLFtbNTgxLDU4MV0sXCJtYXBwZWRcIixbNjUyXV0sW1s1ODIsNTgyXSxcIm1hcHBlZFwiLFs1ODNdXSxbWzU4Myw1ODNdLFwidmFsaWRcIl0sW1s1ODQsNTg0XSxcIm1hcHBlZFwiLFs1ODVdXSxbWzU4NSw1ODVdLFwidmFsaWRcIl0sW1s1ODYsNTg2XSxcIm1hcHBlZFwiLFs1ODddXSxbWzU4Nyw1ODddLFwidmFsaWRcIl0sW1s1ODgsNTg4XSxcIm1hcHBlZFwiLFs1ODldXSxbWzU4OSw1ODldLFwidmFsaWRcIl0sW1s1OTAsNTkwXSxcIm1hcHBlZFwiLFs1OTFdXSxbWzU5MSw1OTFdLFwidmFsaWRcIl0sW1s1OTIsNjgwXSxcInZhbGlkXCJdLFtbNjgxLDY4NV0sXCJ2YWxpZFwiXSxbWzY4Niw2ODddLFwidmFsaWRcIl0sW1s2ODgsNjg4XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzY4OSw2ODldLFwibWFwcGVkXCIsWzYxNF1dLFtbNjkwLDY5MF0sXCJtYXBwZWRcIixbMTA2XV0sW1s2OTEsNjkxXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzY5Miw2OTJdLFwibWFwcGVkXCIsWzYzM11dLFtbNjkzLDY5M10sXCJtYXBwZWRcIixbNjM1XV0sW1s2OTQsNjk0XSxcIm1hcHBlZFwiLFs2NDFdXSxbWzY5NSw2OTVdLFwibWFwcGVkXCIsWzExOV1dLFtbNjk2LDY5Nl0sXCJtYXBwZWRcIixbMTIxXV0sW1s2OTcsNzA1XSxcInZhbGlkXCJdLFtbNzA2LDcwOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzEwLDcyMV0sXCJ2YWxpZFwiXSxbWzcyMiw3MjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcyOCw3MjhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzRdXSxbWzcyOSw3MjldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzVdXSxbWzczMCw3MzBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzhdXSxbWzczMSw3MzFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw4MDhdXSxbWzczMiw3MzJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzFdXSxbWzczMyw3MzNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzldXSxbWzczNCw3MzRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzczNSw3MzVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzczNiw3MzZdLFwibWFwcGVkXCIsWzYxMV1dLFtbNzM3LDczN10sXCJtYXBwZWRcIixbMTA4XV0sW1s3MzgsNzM4XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzczOSw3MzldLFwibWFwcGVkXCIsWzEyMF1dLFtbNzQwLDc0MF0sXCJtYXBwZWRcIixbNjYxXV0sW1s3NDEsNzQ1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3NDYsNzQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3NDgsNzQ4XSxcInZhbGlkXCJdLFtbNzQ5LDc0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzUwLDc1MF0sXCJ2YWxpZFwiXSxbWzc1MSw3NjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzc2OCw4MzFdLFwidmFsaWRcIl0sW1s4MzIsODMyXSxcIm1hcHBlZFwiLFs3NjhdXSxbWzgzMyw4MzNdLFwibWFwcGVkXCIsWzc2OV1dLFtbODM0LDgzNF0sXCJ2YWxpZFwiXSxbWzgzNSw4MzVdLFwibWFwcGVkXCIsWzc4N11dLFtbODM2LDgzNl0sXCJtYXBwZWRcIixbNzc2LDc2OV1dLFtbODM3LDgzN10sXCJtYXBwZWRcIixbOTUzXV0sW1s4MzgsODQ2XSxcInZhbGlkXCJdLFtbODQ3LDg0N10sXCJpZ25vcmVkXCJdLFtbODQ4LDg1NV0sXCJ2YWxpZFwiXSxbWzg1Niw4NjBdLFwidmFsaWRcIl0sW1s4NjEsODYzXSxcInZhbGlkXCJdLFtbODY0LDg2NV0sXCJ2YWxpZFwiXSxbWzg2Niw4NjZdLFwidmFsaWRcIl0sW1s4NjcsODc5XSxcInZhbGlkXCJdLFtbODgwLDg4MF0sXCJtYXBwZWRcIixbODgxXV0sW1s4ODEsODgxXSxcInZhbGlkXCJdLFtbODgyLDg4Ml0sXCJtYXBwZWRcIixbODgzXV0sW1s4ODMsODgzXSxcInZhbGlkXCJdLFtbODg0LDg4NF0sXCJtYXBwZWRcIixbNjk3XV0sW1s4ODUsODg1XSxcInZhbGlkXCJdLFtbODg2LDg4Nl0sXCJtYXBwZWRcIixbODg3XV0sW1s4ODcsODg3XSxcInZhbGlkXCJdLFtbODg4LDg4OV0sXCJkaXNhbGxvd2VkXCJdLFtbODkwLDg5MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDk1M11dLFtbODkxLDg5M10sXCJ2YWxpZFwiXSxbWzg5NCw4OTRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1OV1dLFtbODk1LDg5NV0sXCJtYXBwZWRcIixbMTAxMV1dLFtbODk2LDg5OV0sXCJkaXNhbGxvd2VkXCJdLFtbOTAwLDkwMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc2OV1dLFtbOTAxLDkwMV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Niw3NjldXSxbWzkwMiw5MDJdLFwibWFwcGVkXCIsWzk0MF1dLFtbOTAzLDkwM10sXCJtYXBwZWRcIixbMTgzXV0sW1s5MDQsOTA0XSxcIm1hcHBlZFwiLFs5NDFdXSxbWzkwNSw5MDVdLFwibWFwcGVkXCIsWzk0Ml1dLFtbOTA2LDkwNl0sXCJtYXBwZWRcIixbOTQzXV0sW1s5MDcsOTA3XSxcImRpc2FsbG93ZWRcIl0sW1s5MDgsOTA4XSxcIm1hcHBlZFwiLFs5NzJdXSxbWzkwOSw5MDldLFwiZGlzYWxsb3dlZFwiXSxbWzkxMCw5MTBdLFwibWFwcGVkXCIsWzk3M11dLFtbOTExLDkxMV0sXCJtYXBwZWRcIixbOTc0XV0sW1s5MTIsOTEyXSxcInZhbGlkXCJdLFtbOTEzLDkxM10sXCJtYXBwZWRcIixbOTQ1XV0sW1s5MTQsOTE0XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzkxNSw5MTVdLFwibWFwcGVkXCIsWzk0N11dLFtbOTE2LDkxNl0sXCJtYXBwZWRcIixbOTQ4XV0sW1s5MTcsOTE3XSxcIm1hcHBlZFwiLFs5NDldXSxbWzkxOCw5MThdLFwibWFwcGVkXCIsWzk1MF1dLFtbOTE5LDkxOV0sXCJtYXBwZWRcIixbOTUxXV0sW1s5MjAsOTIwXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzkyMSw5MjFdLFwibWFwcGVkXCIsWzk1M11dLFtbOTIyLDkyMl0sXCJtYXBwZWRcIixbOTU0XV0sW1s5MjMsOTIzXSxcIm1hcHBlZFwiLFs5NTVdXSxbWzkyNCw5MjRdLFwibWFwcGVkXCIsWzk1Nl1dLFtbOTI1LDkyNV0sXCJtYXBwZWRcIixbOTU3XV0sW1s5MjYsOTI2XSxcIm1hcHBlZFwiLFs5NThdXSxbWzkyNyw5MjddLFwibWFwcGVkXCIsWzk1OV1dLFtbOTI4LDkyOF0sXCJtYXBwZWRcIixbOTYwXV0sW1s5MjksOTI5XSxcIm1hcHBlZFwiLFs5NjFdXSxbWzkzMCw5MzBdLFwiZGlzYWxsb3dlZFwiXSxbWzkzMSw5MzFdLFwibWFwcGVkXCIsWzk2M11dLFtbOTMyLDkzMl0sXCJtYXBwZWRcIixbOTY0XV0sW1s5MzMsOTMzXSxcIm1hcHBlZFwiLFs5NjVdXSxbWzkzNCw5MzRdLFwibWFwcGVkXCIsWzk2Nl1dLFtbOTM1LDkzNV0sXCJtYXBwZWRcIixbOTY3XV0sW1s5MzYsOTM2XSxcIm1hcHBlZFwiLFs5NjhdXSxbWzkzNyw5MzddLFwibWFwcGVkXCIsWzk2OV1dLFtbOTM4LDkzOF0sXCJtYXBwZWRcIixbOTcwXV0sW1s5MzksOTM5XSxcIm1hcHBlZFwiLFs5NzFdXSxbWzk0MCw5NjFdLFwidmFsaWRcIl0sW1s5NjIsOTYyXSxcImRldmlhdGlvblwiLFs5NjNdXSxbWzk2Myw5NzRdLFwidmFsaWRcIl0sW1s5NzUsOTc1XSxcIm1hcHBlZFwiLFs5ODNdXSxbWzk3Niw5NzZdLFwibWFwcGVkXCIsWzk0Nl1dLFtbOTc3LDk3N10sXCJtYXBwZWRcIixbOTUyXV0sW1s5NzgsOTc4XSxcIm1hcHBlZFwiLFs5NjVdXSxbWzk3OSw5NzldLFwibWFwcGVkXCIsWzk3M11dLFtbOTgwLDk4MF0sXCJtYXBwZWRcIixbOTcxXV0sW1s5ODEsOTgxXSxcIm1hcHBlZFwiLFs5NjZdXSxbWzk4Miw5ODJdLFwibWFwcGVkXCIsWzk2MF1dLFtbOTgzLDk4M10sXCJ2YWxpZFwiXSxbWzk4NCw5ODRdLFwibWFwcGVkXCIsWzk4NV1dLFtbOTg1LDk4NV0sXCJ2YWxpZFwiXSxbWzk4Niw5ODZdLFwibWFwcGVkXCIsWzk4N11dLFtbOTg3LDk4N10sXCJ2YWxpZFwiXSxbWzk4OCw5ODhdLFwibWFwcGVkXCIsWzk4OV1dLFtbOTg5LDk4OV0sXCJ2YWxpZFwiXSxbWzk5MCw5OTBdLFwibWFwcGVkXCIsWzk5MV1dLFtbOTkxLDk5MV0sXCJ2YWxpZFwiXSxbWzk5Miw5OTJdLFwibWFwcGVkXCIsWzk5M11dLFtbOTkzLDk5M10sXCJ2YWxpZFwiXSxbWzk5NCw5OTRdLFwibWFwcGVkXCIsWzk5NV1dLFtbOTk1LDk5NV0sXCJ2YWxpZFwiXSxbWzk5Niw5OTZdLFwibWFwcGVkXCIsWzk5N11dLFtbOTk3LDk5N10sXCJ2YWxpZFwiXSxbWzk5OCw5OThdLFwibWFwcGVkXCIsWzk5OV1dLFtbOTk5LDk5OV0sXCJ2YWxpZFwiXSxbWzEwMDAsMTAwMF0sXCJtYXBwZWRcIixbMTAwMV1dLFtbMTAwMSwxMDAxXSxcInZhbGlkXCJdLFtbMTAwMiwxMDAyXSxcIm1hcHBlZFwiLFsxMDAzXV0sW1sxMDAzLDEwMDNdLFwidmFsaWRcIl0sW1sxMDA0LDEwMDRdLFwibWFwcGVkXCIsWzEwMDVdXSxbWzEwMDUsMTAwNV0sXCJ2YWxpZFwiXSxbWzEwMDYsMTAwNl0sXCJtYXBwZWRcIixbMTAwN11dLFtbMTAwNywxMDA3XSxcInZhbGlkXCJdLFtbMTAwOCwxMDA4XSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEwMDksMTAwOV0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMDEwLDEwMTBdLFwibWFwcGVkXCIsWzk2M11dLFtbMTAxMSwxMDExXSxcInZhbGlkXCJdLFtbMTAxMiwxMDEyXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEwMTMsMTAxM10sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMDE0LDEwMTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTUsMTAxNV0sXCJtYXBwZWRcIixbMTAxNl1dLFtbMTAxNiwxMDE2XSxcInZhbGlkXCJdLFtbMTAxNywxMDE3XSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEwMTgsMTAxOF0sXCJtYXBwZWRcIixbMTAxOV1dLFtbMTAxOSwxMDE5XSxcInZhbGlkXCJdLFtbMTAyMCwxMDIwXSxcInZhbGlkXCJdLFtbMTAyMSwxMDIxXSxcIm1hcHBlZFwiLFs4OTFdXSxbWzEwMjIsMTAyMl0sXCJtYXBwZWRcIixbODkyXV0sW1sxMDIzLDEwMjNdLFwibWFwcGVkXCIsWzg5M11dLFtbMTAyNCwxMDI0XSxcIm1hcHBlZFwiLFsxMTA0XV0sW1sxMDI1LDEwMjVdLFwibWFwcGVkXCIsWzExMDVdXSxbWzEwMjYsMTAyNl0sXCJtYXBwZWRcIixbMTEwNl1dLFtbMTAyNywxMDI3XSxcIm1hcHBlZFwiLFsxMTA3XV0sW1sxMDI4LDEwMjhdLFwibWFwcGVkXCIsWzExMDhdXSxbWzEwMjksMTAyOV0sXCJtYXBwZWRcIixbMTEwOV1dLFtbMTAzMCwxMDMwXSxcIm1hcHBlZFwiLFsxMTEwXV0sW1sxMDMxLDEwMzFdLFwibWFwcGVkXCIsWzExMTFdXSxbWzEwMzIsMTAzMl0sXCJtYXBwZWRcIixbMTExMl1dLFtbMTAzMywxMDMzXSxcIm1hcHBlZFwiLFsxMTEzXV0sW1sxMDM0LDEwMzRdLFwibWFwcGVkXCIsWzExMTRdXSxbWzEwMzUsMTAzNV0sXCJtYXBwZWRcIixbMTExNV1dLFtbMTAzNiwxMDM2XSxcIm1hcHBlZFwiLFsxMTE2XV0sW1sxMDM3LDEwMzddLFwibWFwcGVkXCIsWzExMTddXSxbWzEwMzgsMTAzOF0sXCJtYXBwZWRcIixbMTExOF1dLFtbMTAzOSwxMDM5XSxcIm1hcHBlZFwiLFsxMTE5XV0sW1sxMDQwLDEwNDBdLFwibWFwcGVkXCIsWzEwNzJdXSxbWzEwNDEsMTA0MV0sXCJtYXBwZWRcIixbMTA3M11dLFtbMTA0MiwxMDQyXSxcIm1hcHBlZFwiLFsxMDc0XV0sW1sxMDQzLDEwNDNdLFwibWFwcGVkXCIsWzEwNzVdXSxbWzEwNDQsMTA0NF0sXCJtYXBwZWRcIixbMTA3Nl1dLFtbMTA0NSwxMDQ1XSxcIm1hcHBlZFwiLFsxMDc3XV0sW1sxMDQ2LDEwNDZdLFwibWFwcGVkXCIsWzEwNzhdXSxbWzEwNDcsMTA0N10sXCJtYXBwZWRcIixbMTA3OV1dLFtbMTA0OCwxMDQ4XSxcIm1hcHBlZFwiLFsxMDgwXV0sW1sxMDQ5LDEwNDldLFwibWFwcGVkXCIsWzEwODFdXSxbWzEwNTAsMTA1MF0sXCJtYXBwZWRcIixbMTA4Ml1dLFtbMTA1MSwxMDUxXSxcIm1hcHBlZFwiLFsxMDgzXV0sW1sxMDUyLDEwNTJdLFwibWFwcGVkXCIsWzEwODRdXSxbWzEwNTMsMTA1M10sXCJtYXBwZWRcIixbMTA4NV1dLFtbMTA1NCwxMDU0XSxcIm1hcHBlZFwiLFsxMDg2XV0sW1sxMDU1LDEwNTVdLFwibWFwcGVkXCIsWzEwODddXSxbWzEwNTYsMTA1Nl0sXCJtYXBwZWRcIixbMTA4OF1dLFtbMTA1NywxMDU3XSxcIm1hcHBlZFwiLFsxMDg5XV0sW1sxMDU4LDEwNThdLFwibWFwcGVkXCIsWzEwOTBdXSxbWzEwNTksMTA1OV0sXCJtYXBwZWRcIixbMTA5MV1dLFtbMTA2MCwxMDYwXSxcIm1hcHBlZFwiLFsxMDkyXV0sW1sxMDYxLDEwNjFdLFwibWFwcGVkXCIsWzEwOTNdXSxbWzEwNjIsMTA2Ml0sXCJtYXBwZWRcIixbMTA5NF1dLFtbMTA2MywxMDYzXSxcIm1hcHBlZFwiLFsxMDk1XV0sW1sxMDY0LDEwNjRdLFwibWFwcGVkXCIsWzEwOTZdXSxbWzEwNjUsMTA2NV0sXCJtYXBwZWRcIixbMTA5N11dLFtbMTA2NiwxMDY2XSxcIm1hcHBlZFwiLFsxMDk4XV0sW1sxMDY3LDEwNjddLFwibWFwcGVkXCIsWzEwOTldXSxbWzEwNjgsMTA2OF0sXCJtYXBwZWRcIixbMTEwMF1dLFtbMTA2OSwxMDY5XSxcIm1hcHBlZFwiLFsxMTAxXV0sW1sxMDcwLDEwNzBdLFwibWFwcGVkXCIsWzExMDJdXSxbWzEwNzEsMTA3MV0sXCJtYXBwZWRcIixbMTEwM11dLFtbMTA3MiwxMTAzXSxcInZhbGlkXCJdLFtbMTEwNCwxMTA0XSxcInZhbGlkXCJdLFtbMTEwNSwxMTE2XSxcInZhbGlkXCJdLFtbMTExNywxMTE3XSxcInZhbGlkXCJdLFtbMTExOCwxMTE5XSxcInZhbGlkXCJdLFtbMTEyMCwxMTIwXSxcIm1hcHBlZFwiLFsxMTIxXV0sW1sxMTIxLDExMjFdLFwidmFsaWRcIl0sW1sxMTIyLDExMjJdLFwibWFwcGVkXCIsWzExMjNdXSxbWzExMjMsMTEyM10sXCJ2YWxpZFwiXSxbWzExMjQsMTEyNF0sXCJtYXBwZWRcIixbMTEyNV1dLFtbMTEyNSwxMTI1XSxcInZhbGlkXCJdLFtbMTEyNiwxMTI2XSxcIm1hcHBlZFwiLFsxMTI3XV0sW1sxMTI3LDExMjddLFwidmFsaWRcIl0sW1sxMTI4LDExMjhdLFwibWFwcGVkXCIsWzExMjldXSxbWzExMjksMTEyOV0sXCJ2YWxpZFwiXSxbWzExMzAsMTEzMF0sXCJtYXBwZWRcIixbMTEzMV1dLFtbMTEzMSwxMTMxXSxcInZhbGlkXCJdLFtbMTEzMiwxMTMyXSxcIm1hcHBlZFwiLFsxMTMzXV0sW1sxMTMzLDExMzNdLFwidmFsaWRcIl0sW1sxMTM0LDExMzRdLFwibWFwcGVkXCIsWzExMzVdXSxbWzExMzUsMTEzNV0sXCJ2YWxpZFwiXSxbWzExMzYsMTEzNl0sXCJtYXBwZWRcIixbMTEzN11dLFtbMTEzNywxMTM3XSxcInZhbGlkXCJdLFtbMTEzOCwxMTM4XSxcIm1hcHBlZFwiLFsxMTM5XV0sW1sxMTM5LDExMzldLFwidmFsaWRcIl0sW1sxMTQwLDExNDBdLFwibWFwcGVkXCIsWzExNDFdXSxbWzExNDEsMTE0MV0sXCJ2YWxpZFwiXSxbWzExNDIsMTE0Ml0sXCJtYXBwZWRcIixbMTE0M11dLFtbMTE0MywxMTQzXSxcInZhbGlkXCJdLFtbMTE0NCwxMTQ0XSxcIm1hcHBlZFwiLFsxMTQ1XV0sW1sxMTQ1LDExNDVdLFwidmFsaWRcIl0sW1sxMTQ2LDExNDZdLFwibWFwcGVkXCIsWzExNDddXSxbWzExNDcsMTE0N10sXCJ2YWxpZFwiXSxbWzExNDgsMTE0OF0sXCJtYXBwZWRcIixbMTE0OV1dLFtbMTE0OSwxMTQ5XSxcInZhbGlkXCJdLFtbMTE1MCwxMTUwXSxcIm1hcHBlZFwiLFsxMTUxXV0sW1sxMTUxLDExNTFdLFwidmFsaWRcIl0sW1sxMTUyLDExNTJdLFwibWFwcGVkXCIsWzExNTNdXSxbWzExNTMsMTE1M10sXCJ2YWxpZFwiXSxbWzExNTQsMTE1NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE1NSwxMTU4XSxcInZhbGlkXCJdLFtbMTE1OSwxMTU5XSxcInZhbGlkXCJdLFtbMTE2MCwxMTYxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTYyLDExNjJdLFwibWFwcGVkXCIsWzExNjNdXSxbWzExNjMsMTE2M10sXCJ2YWxpZFwiXSxbWzExNjQsMTE2NF0sXCJtYXBwZWRcIixbMTE2NV1dLFtbMTE2NSwxMTY1XSxcInZhbGlkXCJdLFtbMTE2NiwxMTY2XSxcIm1hcHBlZFwiLFsxMTY3XV0sW1sxMTY3LDExNjddLFwidmFsaWRcIl0sW1sxMTY4LDExNjhdLFwibWFwcGVkXCIsWzExNjldXSxbWzExNjksMTE2OV0sXCJ2YWxpZFwiXSxbWzExNzAsMTE3MF0sXCJtYXBwZWRcIixbMTE3MV1dLFtbMTE3MSwxMTcxXSxcInZhbGlkXCJdLFtbMTE3MiwxMTcyXSxcIm1hcHBlZFwiLFsxMTczXV0sW1sxMTczLDExNzNdLFwidmFsaWRcIl0sW1sxMTc0LDExNzRdLFwibWFwcGVkXCIsWzExNzVdXSxbWzExNzUsMTE3NV0sXCJ2YWxpZFwiXSxbWzExNzYsMTE3Nl0sXCJtYXBwZWRcIixbMTE3N11dLFtbMTE3NywxMTc3XSxcInZhbGlkXCJdLFtbMTE3OCwxMTc4XSxcIm1hcHBlZFwiLFsxMTc5XV0sW1sxMTc5LDExNzldLFwidmFsaWRcIl0sW1sxMTgwLDExODBdLFwibWFwcGVkXCIsWzExODFdXSxbWzExODEsMTE4MV0sXCJ2YWxpZFwiXSxbWzExODIsMTE4Ml0sXCJtYXBwZWRcIixbMTE4M11dLFtbMTE4MywxMTgzXSxcInZhbGlkXCJdLFtbMTE4NCwxMTg0XSxcIm1hcHBlZFwiLFsxMTg1XV0sW1sxMTg1LDExODVdLFwidmFsaWRcIl0sW1sxMTg2LDExODZdLFwibWFwcGVkXCIsWzExODddXSxbWzExODcsMTE4N10sXCJ2YWxpZFwiXSxbWzExODgsMTE4OF0sXCJtYXBwZWRcIixbMTE4OV1dLFtbMTE4OSwxMTg5XSxcInZhbGlkXCJdLFtbMTE5MCwxMTkwXSxcIm1hcHBlZFwiLFsxMTkxXV0sW1sxMTkxLDExOTFdLFwidmFsaWRcIl0sW1sxMTkyLDExOTJdLFwibWFwcGVkXCIsWzExOTNdXSxbWzExOTMsMTE5M10sXCJ2YWxpZFwiXSxbWzExOTQsMTE5NF0sXCJtYXBwZWRcIixbMTE5NV1dLFtbMTE5NSwxMTk1XSxcInZhbGlkXCJdLFtbMTE5NiwxMTk2XSxcIm1hcHBlZFwiLFsxMTk3XV0sW1sxMTk3LDExOTddLFwidmFsaWRcIl0sW1sxMTk4LDExOThdLFwibWFwcGVkXCIsWzExOTldXSxbWzExOTksMTE5OV0sXCJ2YWxpZFwiXSxbWzEyMDAsMTIwMF0sXCJtYXBwZWRcIixbMTIwMV1dLFtbMTIwMSwxMjAxXSxcInZhbGlkXCJdLFtbMTIwMiwxMjAyXSxcIm1hcHBlZFwiLFsxMjAzXV0sW1sxMjAzLDEyMDNdLFwidmFsaWRcIl0sW1sxMjA0LDEyMDRdLFwibWFwcGVkXCIsWzEyMDVdXSxbWzEyMDUsMTIwNV0sXCJ2YWxpZFwiXSxbWzEyMDYsMTIwNl0sXCJtYXBwZWRcIixbMTIwN11dLFtbMTIwNywxMjA3XSxcInZhbGlkXCJdLFtbMTIwOCwxMjA4XSxcIm1hcHBlZFwiLFsxMjA5XV0sW1sxMjA5LDEyMDldLFwidmFsaWRcIl0sW1sxMjEwLDEyMTBdLFwibWFwcGVkXCIsWzEyMTFdXSxbWzEyMTEsMTIxMV0sXCJ2YWxpZFwiXSxbWzEyMTIsMTIxMl0sXCJtYXBwZWRcIixbMTIxM11dLFtbMTIxMywxMjEzXSxcInZhbGlkXCJdLFtbMTIxNCwxMjE0XSxcIm1hcHBlZFwiLFsxMjE1XV0sW1sxMjE1LDEyMTVdLFwidmFsaWRcIl0sW1sxMjE2LDEyMTZdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMTcsMTIxN10sXCJtYXBwZWRcIixbMTIxOF1dLFtbMTIxOCwxMjE4XSxcInZhbGlkXCJdLFtbMTIxOSwxMjE5XSxcIm1hcHBlZFwiLFsxMjIwXV0sW1sxMjIwLDEyMjBdLFwidmFsaWRcIl0sW1sxMjIxLDEyMjFdLFwibWFwcGVkXCIsWzEyMjJdXSxbWzEyMjIsMTIyMl0sXCJ2YWxpZFwiXSxbWzEyMjMsMTIyM10sXCJtYXBwZWRcIixbMTIyNF1dLFtbMTIyNCwxMjI0XSxcInZhbGlkXCJdLFtbMTIyNSwxMjI1XSxcIm1hcHBlZFwiLFsxMjI2XV0sW1sxMjI2LDEyMjZdLFwidmFsaWRcIl0sW1sxMjI3LDEyMjddLFwibWFwcGVkXCIsWzEyMjhdXSxbWzEyMjgsMTIyOF0sXCJ2YWxpZFwiXSxbWzEyMjksMTIyOV0sXCJtYXBwZWRcIixbMTIzMF1dLFtbMTIzMCwxMjMwXSxcInZhbGlkXCJdLFtbMTIzMSwxMjMxXSxcInZhbGlkXCJdLFtbMTIzMiwxMjMyXSxcIm1hcHBlZFwiLFsxMjMzXV0sW1sxMjMzLDEyMzNdLFwidmFsaWRcIl0sW1sxMjM0LDEyMzRdLFwibWFwcGVkXCIsWzEyMzVdXSxbWzEyMzUsMTIzNV0sXCJ2YWxpZFwiXSxbWzEyMzYsMTIzNl0sXCJtYXBwZWRcIixbMTIzN11dLFtbMTIzNywxMjM3XSxcInZhbGlkXCJdLFtbMTIzOCwxMjM4XSxcIm1hcHBlZFwiLFsxMjM5XV0sW1sxMjM5LDEyMzldLFwidmFsaWRcIl0sW1sxMjQwLDEyNDBdLFwibWFwcGVkXCIsWzEyNDFdXSxbWzEyNDEsMTI0MV0sXCJ2YWxpZFwiXSxbWzEyNDIsMTI0Ml0sXCJtYXBwZWRcIixbMTI0M11dLFtbMTI0MywxMjQzXSxcInZhbGlkXCJdLFtbMTI0NCwxMjQ0XSxcIm1hcHBlZFwiLFsxMjQ1XV0sW1sxMjQ1LDEyNDVdLFwidmFsaWRcIl0sW1sxMjQ2LDEyNDZdLFwibWFwcGVkXCIsWzEyNDddXSxbWzEyNDcsMTI0N10sXCJ2YWxpZFwiXSxbWzEyNDgsMTI0OF0sXCJtYXBwZWRcIixbMTI0OV1dLFtbMTI0OSwxMjQ5XSxcInZhbGlkXCJdLFtbMTI1MCwxMjUwXSxcIm1hcHBlZFwiLFsxMjUxXV0sW1sxMjUxLDEyNTFdLFwidmFsaWRcIl0sW1sxMjUyLDEyNTJdLFwibWFwcGVkXCIsWzEyNTNdXSxbWzEyNTMsMTI1M10sXCJ2YWxpZFwiXSxbWzEyNTQsMTI1NF0sXCJtYXBwZWRcIixbMTI1NV1dLFtbMTI1NSwxMjU1XSxcInZhbGlkXCJdLFtbMTI1NiwxMjU2XSxcIm1hcHBlZFwiLFsxMjU3XV0sW1sxMjU3LDEyNTddLFwidmFsaWRcIl0sW1sxMjU4LDEyNThdLFwibWFwcGVkXCIsWzEyNTldXSxbWzEyNTksMTI1OV0sXCJ2YWxpZFwiXSxbWzEyNjAsMTI2MF0sXCJtYXBwZWRcIixbMTI2MV1dLFtbMTI2MSwxMjYxXSxcInZhbGlkXCJdLFtbMTI2MiwxMjYyXSxcIm1hcHBlZFwiLFsxMjYzXV0sW1sxMjYzLDEyNjNdLFwidmFsaWRcIl0sW1sxMjY0LDEyNjRdLFwibWFwcGVkXCIsWzEyNjVdXSxbWzEyNjUsMTI2NV0sXCJ2YWxpZFwiXSxbWzEyNjYsMTI2Nl0sXCJtYXBwZWRcIixbMTI2N11dLFtbMTI2NywxMjY3XSxcInZhbGlkXCJdLFtbMTI2OCwxMjY4XSxcIm1hcHBlZFwiLFsxMjY5XV0sW1sxMjY5LDEyNjldLFwidmFsaWRcIl0sW1sxMjcwLDEyNzBdLFwibWFwcGVkXCIsWzEyNzFdXSxbWzEyNzEsMTI3MV0sXCJ2YWxpZFwiXSxbWzEyNzIsMTI3Ml0sXCJtYXBwZWRcIixbMTI3M11dLFtbMTI3MywxMjczXSxcInZhbGlkXCJdLFtbMTI3NCwxMjc0XSxcIm1hcHBlZFwiLFsxMjc1XV0sW1sxMjc1LDEyNzVdLFwidmFsaWRcIl0sW1sxMjc2LDEyNzZdLFwibWFwcGVkXCIsWzEyNzddXSxbWzEyNzcsMTI3N10sXCJ2YWxpZFwiXSxbWzEyNzgsMTI3OF0sXCJtYXBwZWRcIixbMTI3OV1dLFtbMTI3OSwxMjc5XSxcInZhbGlkXCJdLFtbMTI4MCwxMjgwXSxcIm1hcHBlZFwiLFsxMjgxXV0sW1sxMjgxLDEyODFdLFwidmFsaWRcIl0sW1sxMjgyLDEyODJdLFwibWFwcGVkXCIsWzEyODNdXSxbWzEyODMsMTI4M10sXCJ2YWxpZFwiXSxbWzEyODQsMTI4NF0sXCJtYXBwZWRcIixbMTI4NV1dLFtbMTI4NSwxMjg1XSxcInZhbGlkXCJdLFtbMTI4NiwxMjg2XSxcIm1hcHBlZFwiLFsxMjg3XV0sW1sxMjg3LDEyODddLFwidmFsaWRcIl0sW1sxMjg4LDEyODhdLFwibWFwcGVkXCIsWzEyODldXSxbWzEyODksMTI4OV0sXCJ2YWxpZFwiXSxbWzEyOTAsMTI5MF0sXCJtYXBwZWRcIixbMTI5MV1dLFtbMTI5MSwxMjkxXSxcInZhbGlkXCJdLFtbMTI5MiwxMjkyXSxcIm1hcHBlZFwiLFsxMjkzXV0sW1sxMjkzLDEyOTNdLFwidmFsaWRcIl0sW1sxMjk0LDEyOTRdLFwibWFwcGVkXCIsWzEyOTVdXSxbWzEyOTUsMTI5NV0sXCJ2YWxpZFwiXSxbWzEyOTYsMTI5Nl0sXCJtYXBwZWRcIixbMTI5N11dLFtbMTI5NywxMjk3XSxcInZhbGlkXCJdLFtbMTI5OCwxMjk4XSxcIm1hcHBlZFwiLFsxMjk5XV0sW1sxMjk5LDEyOTldLFwidmFsaWRcIl0sW1sxMzAwLDEzMDBdLFwibWFwcGVkXCIsWzEzMDFdXSxbWzEzMDEsMTMwMV0sXCJ2YWxpZFwiXSxbWzEzMDIsMTMwMl0sXCJtYXBwZWRcIixbMTMwM11dLFtbMTMwMywxMzAzXSxcInZhbGlkXCJdLFtbMTMwNCwxMzA0XSxcIm1hcHBlZFwiLFsxMzA1XV0sW1sxMzA1LDEzMDVdLFwidmFsaWRcIl0sW1sxMzA2LDEzMDZdLFwibWFwcGVkXCIsWzEzMDddXSxbWzEzMDcsMTMwN10sXCJ2YWxpZFwiXSxbWzEzMDgsMTMwOF0sXCJtYXBwZWRcIixbMTMwOV1dLFtbMTMwOSwxMzA5XSxcInZhbGlkXCJdLFtbMTMxMCwxMzEwXSxcIm1hcHBlZFwiLFsxMzExXV0sW1sxMzExLDEzMTFdLFwidmFsaWRcIl0sW1sxMzEyLDEzMTJdLFwibWFwcGVkXCIsWzEzMTNdXSxbWzEzMTMsMTMxM10sXCJ2YWxpZFwiXSxbWzEzMTQsMTMxNF0sXCJtYXBwZWRcIixbMTMxNV1dLFtbMTMxNSwxMzE1XSxcInZhbGlkXCJdLFtbMTMxNiwxMzE2XSxcIm1hcHBlZFwiLFsxMzE3XV0sW1sxMzE3LDEzMTddLFwidmFsaWRcIl0sW1sxMzE4LDEzMThdLFwibWFwcGVkXCIsWzEzMTldXSxbWzEzMTksMTMxOV0sXCJ2YWxpZFwiXSxbWzEzMjAsMTMyMF0sXCJtYXBwZWRcIixbMTMyMV1dLFtbMTMyMSwxMzIxXSxcInZhbGlkXCJdLFtbMTMyMiwxMzIyXSxcIm1hcHBlZFwiLFsxMzIzXV0sW1sxMzIzLDEzMjNdLFwidmFsaWRcIl0sW1sxMzI0LDEzMjRdLFwibWFwcGVkXCIsWzEzMjVdXSxbWzEzMjUsMTMyNV0sXCJ2YWxpZFwiXSxbWzEzMjYsMTMyNl0sXCJtYXBwZWRcIixbMTMyN11dLFtbMTMyNywxMzI3XSxcInZhbGlkXCJdLFtbMTMyOCwxMzI4XSxcImRpc2FsbG93ZWRcIl0sW1sxMzI5LDEzMjldLFwibWFwcGVkXCIsWzEzNzddXSxbWzEzMzAsMTMzMF0sXCJtYXBwZWRcIixbMTM3OF1dLFtbMTMzMSwxMzMxXSxcIm1hcHBlZFwiLFsxMzc5XV0sW1sxMzMyLDEzMzJdLFwibWFwcGVkXCIsWzEzODBdXSxbWzEzMzMsMTMzM10sXCJtYXBwZWRcIixbMTM4MV1dLFtbMTMzNCwxMzM0XSxcIm1hcHBlZFwiLFsxMzgyXV0sW1sxMzM1LDEzMzVdLFwibWFwcGVkXCIsWzEzODNdXSxbWzEzMzYsMTMzNl0sXCJtYXBwZWRcIixbMTM4NF1dLFtbMTMzNywxMzM3XSxcIm1hcHBlZFwiLFsxMzg1XV0sW1sxMzM4LDEzMzhdLFwibWFwcGVkXCIsWzEzODZdXSxbWzEzMzksMTMzOV0sXCJtYXBwZWRcIixbMTM4N11dLFtbMTM0MCwxMzQwXSxcIm1hcHBlZFwiLFsxMzg4XV0sW1sxMzQxLDEzNDFdLFwibWFwcGVkXCIsWzEzODldXSxbWzEzNDIsMTM0Ml0sXCJtYXBwZWRcIixbMTM5MF1dLFtbMTM0MywxMzQzXSxcIm1hcHBlZFwiLFsxMzkxXV0sW1sxMzQ0LDEzNDRdLFwibWFwcGVkXCIsWzEzOTJdXSxbWzEzNDUsMTM0NV0sXCJtYXBwZWRcIixbMTM5M11dLFtbMTM0NiwxMzQ2XSxcIm1hcHBlZFwiLFsxMzk0XV0sW1sxMzQ3LDEzNDddLFwibWFwcGVkXCIsWzEzOTVdXSxbWzEzNDgsMTM0OF0sXCJtYXBwZWRcIixbMTM5Nl1dLFtbMTM0OSwxMzQ5XSxcIm1hcHBlZFwiLFsxMzk3XV0sW1sxMzUwLDEzNTBdLFwibWFwcGVkXCIsWzEzOThdXSxbWzEzNTEsMTM1MV0sXCJtYXBwZWRcIixbMTM5OV1dLFtbMTM1MiwxMzUyXSxcIm1hcHBlZFwiLFsxNDAwXV0sW1sxMzUzLDEzNTNdLFwibWFwcGVkXCIsWzE0MDFdXSxbWzEzNTQsMTM1NF0sXCJtYXBwZWRcIixbMTQwMl1dLFtbMTM1NSwxMzU1XSxcIm1hcHBlZFwiLFsxNDAzXV0sW1sxMzU2LDEzNTZdLFwibWFwcGVkXCIsWzE0MDRdXSxbWzEzNTcsMTM1N10sXCJtYXBwZWRcIixbMTQwNV1dLFtbMTM1OCwxMzU4XSxcIm1hcHBlZFwiLFsxNDA2XV0sW1sxMzU5LDEzNTldLFwibWFwcGVkXCIsWzE0MDddXSxbWzEzNjAsMTM2MF0sXCJtYXBwZWRcIixbMTQwOF1dLFtbMTM2MSwxMzYxXSxcIm1hcHBlZFwiLFsxNDA5XV0sW1sxMzYyLDEzNjJdLFwibWFwcGVkXCIsWzE0MTBdXSxbWzEzNjMsMTM2M10sXCJtYXBwZWRcIixbMTQxMV1dLFtbMTM2NCwxMzY0XSxcIm1hcHBlZFwiLFsxNDEyXV0sW1sxMzY1LDEzNjVdLFwibWFwcGVkXCIsWzE0MTNdXSxbWzEzNjYsMTM2Nl0sXCJtYXBwZWRcIixbMTQxNF1dLFtbMTM2NywxMzY4XSxcImRpc2FsbG93ZWRcIl0sW1sxMzY5LDEzNjldLFwidmFsaWRcIl0sW1sxMzcwLDEzNzVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEzNzYsMTM3Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMTM3NywxNDE0XSxcInZhbGlkXCJdLFtbMTQxNSwxNDE1XSxcIm1hcHBlZFwiLFsxMzgxLDE0MTBdXSxbWzE0MTYsMTQxNl0sXCJkaXNhbGxvd2VkXCJdLFtbMTQxNywxNDE3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNDE4LDE0MThdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE0MTksMTQyMF0sXCJkaXNhbGxvd2VkXCJdLFtbMTQyMSwxNDIyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNDIzLDE0MjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE0MjQsMTQyNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTQyNSwxNDQxXSxcInZhbGlkXCJdLFtbMTQ0MiwxNDQyXSxcInZhbGlkXCJdLFtbMTQ0MywxNDU1XSxcInZhbGlkXCJdLFtbMTQ1NiwxNDY1XSxcInZhbGlkXCJdLFtbMTQ2NiwxNDY2XSxcInZhbGlkXCJdLFtbMTQ2NywxNDY5XSxcInZhbGlkXCJdLFtbMTQ3MCwxNDcwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNDcxLDE0NzFdLFwidmFsaWRcIl0sW1sxNDcyLDE0NzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE0NzMsMTQ3NF0sXCJ2YWxpZFwiXSxbWzE0NzUsMTQ3NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTQ3NiwxNDc2XSxcInZhbGlkXCJdLFtbMTQ3NywxNDc3XSxcInZhbGlkXCJdLFtbMTQ3OCwxNDc4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNDc5LDE0NzldLFwidmFsaWRcIl0sW1sxNDgwLDE0ODddLFwiZGlzYWxsb3dlZFwiXSxbWzE0ODgsMTUxNF0sXCJ2YWxpZFwiXSxbWzE1MTUsMTUxOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTUyMCwxNTI0XSxcInZhbGlkXCJdLFtbMTUyNSwxNTM1XSxcImRpc2FsbG93ZWRcIl0sW1sxNTM2LDE1MzldLFwiZGlzYWxsb3dlZFwiXSxbWzE1NDAsMTU0MF0sXCJkaXNhbGxvd2VkXCJdLFtbMTU0MSwxNTQxXSxcImRpc2FsbG93ZWRcIl0sW1sxNTQyLDE1NDZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE1NDcsMTU0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTU0OCwxNTQ4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNTQ5LDE1NTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE1NTIsMTU1N10sXCJ2YWxpZFwiXSxbWzE1NTgsMTU2Ml0sXCJ2YWxpZFwiXSxbWzE1NjMsMTU2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTU2NCwxNTY0XSxcImRpc2FsbG93ZWRcIl0sW1sxNTY1LDE1NjVdLFwiZGlzYWxsb3dlZFwiXSxbWzE1NjYsMTU2Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTU2NywxNTY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNTY4LDE1NjhdLFwidmFsaWRcIl0sW1sxNTY5LDE1OTRdLFwidmFsaWRcIl0sW1sxNTk1LDE1OTldLFwidmFsaWRcIl0sW1sxNjAwLDE2MDBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE2MDEsMTYxOF0sXCJ2YWxpZFwiXSxbWzE2MTksMTYyMV0sXCJ2YWxpZFwiXSxbWzE2MjIsMTYyNF0sXCJ2YWxpZFwiXSxbWzE2MjUsMTYzMF0sXCJ2YWxpZFwiXSxbWzE2MzEsMTYzMV0sXCJ2YWxpZFwiXSxbWzE2MzIsMTY0MV0sXCJ2YWxpZFwiXSxbWzE2NDIsMTY0NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTY0NiwxNjQ3XSxcInZhbGlkXCJdLFtbMTY0OCwxNjUyXSxcInZhbGlkXCJdLFtbMTY1MywxNjUzXSxcIm1hcHBlZFwiLFsxNTc1LDE2NTJdXSxbWzE2NTQsMTY1NF0sXCJtYXBwZWRcIixbMTYwOCwxNjUyXV0sW1sxNjU1LDE2NTVdLFwibWFwcGVkXCIsWzE3MzUsMTY1Ml1dLFtbMTY1NiwxNjU2XSxcIm1hcHBlZFwiLFsxNjEwLDE2NTJdXSxbWzE2NTcsMTcxOV0sXCJ2YWxpZFwiXSxbWzE3MjAsMTcyMV0sXCJ2YWxpZFwiXSxbWzE3MjIsMTcyNl0sXCJ2YWxpZFwiXSxbWzE3MjcsMTcyN10sXCJ2YWxpZFwiXSxbWzE3MjgsMTc0Ml0sXCJ2YWxpZFwiXSxbWzE3NDMsMTc0M10sXCJ2YWxpZFwiXSxbWzE3NDQsMTc0N10sXCJ2YWxpZFwiXSxbWzE3NDgsMTc0OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTc0OSwxNzU2XSxcInZhbGlkXCJdLFtbMTc1NywxNzU3XSxcImRpc2FsbG93ZWRcIl0sW1sxNzU4LDE3NThdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE3NTksMTc2OF0sXCJ2YWxpZFwiXSxbWzE3NjksMTc2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTc3MCwxNzczXSxcInZhbGlkXCJdLFtbMTc3NCwxNzc1XSxcInZhbGlkXCJdLFtbMTc3NiwxNzg1XSxcInZhbGlkXCJdLFtbMTc4NiwxNzkwXSxcInZhbGlkXCJdLFtbMTc5MSwxNzkxXSxcInZhbGlkXCJdLFtbMTc5MiwxODA1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxODA2LDE4MDZdLFwiZGlzYWxsb3dlZFwiXSxbWzE4MDcsMTgwN10sXCJkaXNhbGxvd2VkXCJdLFtbMTgwOCwxODM2XSxcInZhbGlkXCJdLFtbMTgzNywxODM5XSxcInZhbGlkXCJdLFtbMTg0MCwxODY2XSxcInZhbGlkXCJdLFtbMTg2NywxODY4XSxcImRpc2FsbG93ZWRcIl0sW1sxODY5LDE4NzFdLFwidmFsaWRcIl0sW1sxODcyLDE5MDFdLFwidmFsaWRcIl0sW1sxOTAyLDE5MTldLFwidmFsaWRcIl0sW1sxOTIwLDE5NjhdLFwidmFsaWRcIl0sW1sxOTY5LDE5NjldLFwidmFsaWRcIl0sW1sxOTcwLDE5ODNdLFwiZGlzYWxsb3dlZFwiXSxbWzE5ODQsMjAzN10sXCJ2YWxpZFwiXSxbWzIwMzgsMjA0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjA0MywyMDQ3XSxcImRpc2FsbG93ZWRcIl0sW1syMDQ4LDIwOTNdLFwidmFsaWRcIl0sW1syMDk0LDIwOTVdLFwiZGlzYWxsb3dlZFwiXSxbWzIwOTYsMjExMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjExMSwyMTExXSxcImRpc2FsbG93ZWRcIl0sW1syMTEyLDIxMzldLFwidmFsaWRcIl0sW1syMTQwLDIxNDFdLFwiZGlzYWxsb3dlZFwiXSxbWzIxNDIsMjE0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjE0MywyMjA3XSxcImRpc2FsbG93ZWRcIl0sW1syMjA4LDIyMDhdLFwidmFsaWRcIl0sW1syMjA5LDIyMDldLFwidmFsaWRcIl0sW1syMjEwLDIyMjBdLFwidmFsaWRcIl0sW1syMjIxLDIyMjZdLFwidmFsaWRcIl0sW1syMjI3LDIyMjhdLFwidmFsaWRcIl0sW1syMjI5LDIyNzRdLFwiZGlzYWxsb3dlZFwiXSxbWzIyNzUsMjI3NV0sXCJ2YWxpZFwiXSxbWzIyNzYsMjMwMl0sXCJ2YWxpZFwiXSxbWzIzMDMsMjMwM10sXCJ2YWxpZFwiXSxbWzIzMDQsMjMwNF0sXCJ2YWxpZFwiXSxbWzIzMDUsMjMwN10sXCJ2YWxpZFwiXSxbWzIzMDgsMjMwOF0sXCJ2YWxpZFwiXSxbWzIzMDksMjM2MV0sXCJ2YWxpZFwiXSxbWzIzNjIsMjM2M10sXCJ2YWxpZFwiXSxbWzIzNjQsMjM4MV0sXCJ2YWxpZFwiXSxbWzIzODIsMjM4Ml0sXCJ2YWxpZFwiXSxbWzIzODMsMjM4M10sXCJ2YWxpZFwiXSxbWzIzODQsMjM4OF0sXCJ2YWxpZFwiXSxbWzIzODksMjM4OV0sXCJ2YWxpZFwiXSxbWzIzOTAsMjM5MV0sXCJ2YWxpZFwiXSxbWzIzOTIsMjM5Ml0sXCJtYXBwZWRcIixbMjMyNSwyMzY0XV0sW1syMzkzLDIzOTNdLFwibWFwcGVkXCIsWzIzMjYsMjM2NF1dLFtbMjM5NCwyMzk0XSxcIm1hcHBlZFwiLFsyMzI3LDIzNjRdXSxbWzIzOTUsMjM5NV0sXCJtYXBwZWRcIixbMjMzMiwyMzY0XV0sW1syMzk2LDIzOTZdLFwibWFwcGVkXCIsWzIzMzcsMjM2NF1dLFtbMjM5NywyMzk3XSxcIm1hcHBlZFwiLFsyMzM4LDIzNjRdXSxbWzIzOTgsMjM5OF0sXCJtYXBwZWRcIixbMjM0NywyMzY0XV0sW1syMzk5LDIzOTldLFwibWFwcGVkXCIsWzIzNTEsMjM2NF1dLFtbMjQwMCwyNDAzXSxcInZhbGlkXCJdLFtbMjQwNCwyNDA1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1syNDA2LDI0MTVdLFwidmFsaWRcIl0sW1syNDE2LDI0MTZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI0MTcsMjQxOF0sXCJ2YWxpZFwiXSxbWzI0MTksMjQyM10sXCJ2YWxpZFwiXSxbWzI0MjQsMjQyNF0sXCJ2YWxpZFwiXSxbWzI0MjUsMjQyNl0sXCJ2YWxpZFwiXSxbWzI0MjcsMjQyOF0sXCJ2YWxpZFwiXSxbWzI0MjksMjQyOV0sXCJ2YWxpZFwiXSxbWzI0MzAsMjQzMV0sXCJ2YWxpZFwiXSxbWzI0MzIsMjQzMl0sXCJ2YWxpZFwiXSxbWzI0MzMsMjQzNV0sXCJ2YWxpZFwiXSxbWzI0MzYsMjQzNl0sXCJkaXNhbGxvd2VkXCJdLFtbMjQzNywyNDQ0XSxcInZhbGlkXCJdLFtbMjQ0NSwyNDQ2XSxcImRpc2FsbG93ZWRcIl0sW1syNDQ3LDI0NDhdLFwidmFsaWRcIl0sW1syNDQ5LDI0NTBdLFwiZGlzYWxsb3dlZFwiXSxbWzI0NTEsMjQ3Ml0sXCJ2YWxpZFwiXSxbWzI0NzMsMjQ3M10sXCJkaXNhbGxvd2VkXCJdLFtbMjQ3NCwyNDgwXSxcInZhbGlkXCJdLFtbMjQ4MSwyNDgxXSxcImRpc2FsbG93ZWRcIl0sW1syNDgyLDI0ODJdLFwidmFsaWRcIl0sW1syNDgzLDI0ODVdLFwiZGlzYWxsb3dlZFwiXSxbWzI0ODYsMjQ4OV0sXCJ2YWxpZFwiXSxbWzI0OTAsMjQ5MV0sXCJkaXNhbGxvd2VkXCJdLFtbMjQ5MiwyNDkyXSxcInZhbGlkXCJdLFtbMjQ5MywyNDkzXSxcInZhbGlkXCJdLFtbMjQ5NCwyNTAwXSxcInZhbGlkXCJdLFtbMjUwMSwyNTAyXSxcImRpc2FsbG93ZWRcIl0sW1syNTAzLDI1MDRdLFwidmFsaWRcIl0sW1syNTA1LDI1MDZdLFwiZGlzYWxsb3dlZFwiXSxbWzI1MDcsMjUwOV0sXCJ2YWxpZFwiXSxbWzI1MTAsMjUxMF0sXCJ2YWxpZFwiXSxbWzI1MTEsMjUxOF0sXCJkaXNhbGxvd2VkXCJdLFtbMjUxOSwyNTE5XSxcInZhbGlkXCJdLFtbMjUyMCwyNTIzXSxcImRpc2FsbG93ZWRcIl0sW1syNTI0LDI1MjRdLFwibWFwcGVkXCIsWzI0NjUsMjQ5Ml1dLFtbMjUyNSwyNTI1XSxcIm1hcHBlZFwiLFsyNDY2LDI0OTJdXSxbWzI1MjYsMjUyNl0sXCJkaXNhbGxvd2VkXCJdLFtbMjUyNywyNTI3XSxcIm1hcHBlZFwiLFsyNDc5LDI0OTJdXSxbWzI1MjgsMjUzMV0sXCJ2YWxpZFwiXSxbWzI1MzIsMjUzM10sXCJkaXNhbGxvd2VkXCJdLFtbMjUzNCwyNTQ1XSxcInZhbGlkXCJdLFtbMjU0NiwyNTU0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1syNTU1LDI1NTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI1NTYsMjU2MF0sXCJkaXNhbGxvd2VkXCJdLFtbMjU2MSwyNTYxXSxcInZhbGlkXCJdLFtbMjU2MiwyNTYyXSxcInZhbGlkXCJdLFtbMjU2MywyNTYzXSxcInZhbGlkXCJdLFtbMjU2NCwyNTY0XSxcImRpc2FsbG93ZWRcIl0sW1syNTY1LDI1NzBdLFwidmFsaWRcIl0sW1syNTcxLDI1NzRdLFwiZGlzYWxsb3dlZFwiXSxbWzI1NzUsMjU3Nl0sXCJ2YWxpZFwiXSxbWzI1NzcsMjU3OF0sXCJkaXNhbGxvd2VkXCJdLFtbMjU3OSwyNjAwXSxcInZhbGlkXCJdLFtbMjYwMSwyNjAxXSxcImRpc2FsbG93ZWRcIl0sW1syNjAyLDI2MDhdLFwidmFsaWRcIl0sW1syNjA5LDI2MDldLFwiZGlzYWxsb3dlZFwiXSxbWzI2MTAsMjYxMF0sXCJ2YWxpZFwiXSxbWzI2MTEsMjYxMV0sXCJtYXBwZWRcIixbMjYxMCwyNjIwXV0sW1syNjEyLDI2MTJdLFwiZGlzYWxsb3dlZFwiXSxbWzI2MTMsMjYxM10sXCJ2YWxpZFwiXSxbWzI2MTQsMjYxNF0sXCJtYXBwZWRcIixbMjYxNiwyNjIwXV0sW1syNjE1LDI2MTVdLFwiZGlzYWxsb3dlZFwiXSxbWzI2MTYsMjYxN10sXCJ2YWxpZFwiXSxbWzI2MTgsMjYxOV0sXCJkaXNhbGxvd2VkXCJdLFtbMjYyMCwyNjIwXSxcInZhbGlkXCJdLFtbMjYyMSwyNjIxXSxcImRpc2FsbG93ZWRcIl0sW1syNjIyLDI2MjZdLFwidmFsaWRcIl0sW1syNjI3LDI2MzBdLFwiZGlzYWxsb3dlZFwiXSxbWzI2MzEsMjYzMl0sXCJ2YWxpZFwiXSxbWzI2MzMsMjYzNF0sXCJkaXNhbGxvd2VkXCJdLFtbMjYzNSwyNjM3XSxcInZhbGlkXCJdLFtbMjYzOCwyNjQwXSxcImRpc2FsbG93ZWRcIl0sW1syNjQxLDI2NDFdLFwidmFsaWRcIl0sW1syNjQyLDI2NDhdLFwiZGlzYWxsb3dlZFwiXSxbWzI2NDksMjY0OV0sXCJtYXBwZWRcIixbMjU4MiwyNjIwXV0sW1syNjUwLDI2NTBdLFwibWFwcGVkXCIsWzI1ODMsMjYyMF1dLFtbMjY1MSwyNjUxXSxcIm1hcHBlZFwiLFsyNTg4LDI2MjBdXSxbWzI2NTIsMjY1Ml0sXCJ2YWxpZFwiXSxbWzI2NTMsMjY1M10sXCJkaXNhbGxvd2VkXCJdLFtbMjY1NCwyNjU0XSxcIm1hcHBlZFwiLFsyNjAzLDI2MjBdXSxbWzI2NTUsMjY2MV0sXCJkaXNhbGxvd2VkXCJdLFtbMjY2MiwyNjc2XSxcInZhbGlkXCJdLFtbMjY3NywyNjc3XSxcInZhbGlkXCJdLFtbMjY3OCwyNjg4XSxcImRpc2FsbG93ZWRcIl0sW1syNjg5LDI2OTFdLFwidmFsaWRcIl0sW1syNjkyLDI2OTJdLFwiZGlzYWxsb3dlZFwiXSxbWzI2OTMsMjY5OV0sXCJ2YWxpZFwiXSxbWzI3MDAsMjcwMF0sXCJ2YWxpZFwiXSxbWzI3MDEsMjcwMV0sXCJ2YWxpZFwiXSxbWzI3MDIsMjcwMl0sXCJkaXNhbGxvd2VkXCJdLFtbMjcwMywyNzA1XSxcInZhbGlkXCJdLFtbMjcwNiwyNzA2XSxcImRpc2FsbG93ZWRcIl0sW1syNzA3LDI3MjhdLFwidmFsaWRcIl0sW1syNzI5LDI3MjldLFwiZGlzYWxsb3dlZFwiXSxbWzI3MzAsMjczNl0sXCJ2YWxpZFwiXSxbWzI3MzcsMjczN10sXCJkaXNhbGxvd2VkXCJdLFtbMjczOCwyNzM5XSxcInZhbGlkXCJdLFtbMjc0MCwyNzQwXSxcImRpc2FsbG93ZWRcIl0sW1syNzQxLDI3NDVdLFwidmFsaWRcIl0sW1syNzQ2LDI3NDddLFwiZGlzYWxsb3dlZFwiXSxbWzI3NDgsMjc1N10sXCJ2YWxpZFwiXSxbWzI3NTgsMjc1OF0sXCJkaXNhbGxvd2VkXCJdLFtbMjc1OSwyNzYxXSxcInZhbGlkXCJdLFtbMjc2MiwyNzYyXSxcImRpc2FsbG93ZWRcIl0sW1syNzYzLDI3NjVdLFwidmFsaWRcIl0sW1syNzY2LDI3NjddLFwiZGlzYWxsb3dlZFwiXSxbWzI3NjgsMjc2OF0sXCJ2YWxpZFwiXSxbWzI3NjksMjc4M10sXCJkaXNhbGxvd2VkXCJdLFtbMjc4NCwyNzg0XSxcInZhbGlkXCJdLFtbMjc4NSwyNzg3XSxcInZhbGlkXCJdLFtbMjc4OCwyNzg5XSxcImRpc2FsbG93ZWRcIl0sW1syNzkwLDI3OTldLFwidmFsaWRcIl0sW1syODAwLDI4MDBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI4MDEsMjgwMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjgwMiwyODA4XSxcImRpc2FsbG93ZWRcIl0sW1syODA5LDI4MDldLFwidmFsaWRcIl0sW1syODEwLDI4MTZdLFwiZGlzYWxsb3dlZFwiXSxbWzI4MTcsMjgxOV0sXCJ2YWxpZFwiXSxbWzI4MjAsMjgyMF0sXCJkaXNhbGxvd2VkXCJdLFtbMjgyMSwyODI4XSxcInZhbGlkXCJdLFtbMjgyOSwyODMwXSxcImRpc2FsbG93ZWRcIl0sW1syODMxLDI4MzJdLFwidmFsaWRcIl0sW1syODMzLDI4MzRdLFwiZGlzYWxsb3dlZFwiXSxbWzI4MzUsMjg1Nl0sXCJ2YWxpZFwiXSxbWzI4NTcsMjg1N10sXCJkaXNhbGxvd2VkXCJdLFtbMjg1OCwyODY0XSxcInZhbGlkXCJdLFtbMjg2NSwyODY1XSxcImRpc2FsbG93ZWRcIl0sW1syODY2LDI4NjddLFwidmFsaWRcIl0sW1syODY4LDI4NjhdLFwiZGlzYWxsb3dlZFwiXSxbWzI4NjksMjg2OV0sXCJ2YWxpZFwiXSxbWzI4NzAsMjg3M10sXCJ2YWxpZFwiXSxbWzI4NzQsMjg3NV0sXCJkaXNhbGxvd2VkXCJdLFtbMjg3NiwyODgzXSxcInZhbGlkXCJdLFtbMjg4NCwyODg0XSxcInZhbGlkXCJdLFtbMjg4NSwyODg2XSxcImRpc2FsbG93ZWRcIl0sW1syODg3LDI4ODhdLFwidmFsaWRcIl0sW1syODg5LDI4OTBdLFwiZGlzYWxsb3dlZFwiXSxbWzI4OTEsMjg5M10sXCJ2YWxpZFwiXSxbWzI4OTQsMjkwMV0sXCJkaXNhbGxvd2VkXCJdLFtbMjkwMiwyOTAzXSxcInZhbGlkXCJdLFtbMjkwNCwyOTA3XSxcImRpc2FsbG93ZWRcIl0sW1syOTA4LDI5MDhdLFwibWFwcGVkXCIsWzI4NDksMjg3Nl1dLFtbMjkwOSwyOTA5XSxcIm1hcHBlZFwiLFsyODUwLDI4NzZdXSxbWzI5MTAsMjkxMF0sXCJkaXNhbGxvd2VkXCJdLFtbMjkxMSwyOTEzXSxcInZhbGlkXCJdLFtbMjkxNCwyOTE1XSxcInZhbGlkXCJdLFtbMjkxNiwyOTE3XSxcImRpc2FsbG93ZWRcIl0sW1syOTE4LDI5MjddLFwidmFsaWRcIl0sW1syOTI4LDI5MjhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI5MjksMjkyOV0sXCJ2YWxpZFwiXSxbWzI5MzAsMjkzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjkzNiwyOTQ1XSxcImRpc2FsbG93ZWRcIl0sW1syOTQ2LDI5NDddLFwidmFsaWRcIl0sW1syOTQ4LDI5NDhdLFwiZGlzYWxsb3dlZFwiXSxbWzI5NDksMjk1NF0sXCJ2YWxpZFwiXSxbWzI5NTUsMjk1N10sXCJkaXNhbGxvd2VkXCJdLFtbMjk1OCwyOTYwXSxcInZhbGlkXCJdLFtbMjk2MSwyOTYxXSxcImRpc2FsbG93ZWRcIl0sW1syOTYyLDI5NjVdLFwidmFsaWRcIl0sW1syOTY2LDI5NjhdLFwiZGlzYWxsb3dlZFwiXSxbWzI5NjksMjk3MF0sXCJ2YWxpZFwiXSxbWzI5NzEsMjk3MV0sXCJkaXNhbGxvd2VkXCJdLFtbMjk3MiwyOTcyXSxcInZhbGlkXCJdLFtbMjk3MywyOTczXSxcImRpc2FsbG93ZWRcIl0sW1syOTc0LDI5NzVdLFwidmFsaWRcIl0sW1syOTc2LDI5NzhdLFwiZGlzYWxsb3dlZFwiXSxbWzI5NzksMjk4MF0sXCJ2YWxpZFwiXSxbWzI5ODEsMjk4M10sXCJkaXNhbGxvd2VkXCJdLFtbMjk4NCwyOTg2XSxcInZhbGlkXCJdLFtbMjk4NywyOTg5XSxcImRpc2FsbG93ZWRcIl0sW1syOTkwLDI5OTddLFwidmFsaWRcIl0sW1syOTk4LDI5OThdLFwidmFsaWRcIl0sW1syOTk5LDMwMDFdLFwidmFsaWRcIl0sW1szMDAyLDMwMDVdLFwiZGlzYWxsb3dlZFwiXSxbWzMwMDYsMzAxMF0sXCJ2YWxpZFwiXSxbWzMwMTEsMzAxM10sXCJkaXNhbGxvd2VkXCJdLFtbMzAxNCwzMDE2XSxcInZhbGlkXCJdLFtbMzAxNywzMDE3XSxcImRpc2FsbG93ZWRcIl0sW1szMDE4LDMwMjFdLFwidmFsaWRcIl0sW1szMDIyLDMwMjNdLFwiZGlzYWxsb3dlZFwiXSxbWzMwMjQsMzAyNF0sXCJ2YWxpZFwiXSxbWzMwMjUsMzAzMF0sXCJkaXNhbGxvd2VkXCJdLFtbMzAzMSwzMDMxXSxcInZhbGlkXCJdLFtbMzAzMiwzMDQ1XSxcImRpc2FsbG93ZWRcIl0sW1szMDQ2LDMwNDZdLFwidmFsaWRcIl0sW1szMDQ3LDMwNTVdLFwidmFsaWRcIl0sW1szMDU2LDMwNThdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzMwNTksMzA2Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzA2NywzMDcxXSxcImRpc2FsbG93ZWRcIl0sW1szMDcyLDMwNzJdLFwidmFsaWRcIl0sW1szMDczLDMwNzVdLFwidmFsaWRcIl0sW1szMDc2LDMwNzZdLFwiZGlzYWxsb3dlZFwiXSxbWzMwNzcsMzA4NF0sXCJ2YWxpZFwiXSxbWzMwODUsMzA4NV0sXCJkaXNhbGxvd2VkXCJdLFtbMzA4NiwzMDg4XSxcInZhbGlkXCJdLFtbMzA4OSwzMDg5XSxcImRpc2FsbG93ZWRcIl0sW1szMDkwLDMxMTJdLFwidmFsaWRcIl0sW1szMTEzLDMxMTNdLFwiZGlzYWxsb3dlZFwiXSxbWzMxMTQsMzEyM10sXCJ2YWxpZFwiXSxbWzMxMjQsMzEyNF0sXCJ2YWxpZFwiXSxbWzMxMjUsMzEyOV0sXCJ2YWxpZFwiXSxbWzMxMzAsMzEzMl0sXCJkaXNhbGxvd2VkXCJdLFtbMzEzMywzMTMzXSxcInZhbGlkXCJdLFtbMzEzNCwzMTQwXSxcInZhbGlkXCJdLFtbMzE0MSwzMTQxXSxcImRpc2FsbG93ZWRcIl0sW1szMTQyLDMxNDRdLFwidmFsaWRcIl0sW1szMTQ1LDMxNDVdLFwiZGlzYWxsb3dlZFwiXSxbWzMxNDYsMzE0OV0sXCJ2YWxpZFwiXSxbWzMxNTAsMzE1Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMzE1NywzMTU4XSxcInZhbGlkXCJdLFtbMzE1OSwzMTU5XSxcImRpc2FsbG93ZWRcIl0sW1szMTYwLDMxNjFdLFwidmFsaWRcIl0sW1szMTYyLDMxNjJdLFwidmFsaWRcIl0sW1szMTYzLDMxNjddLFwiZGlzYWxsb3dlZFwiXSxbWzMxNjgsMzE2OV0sXCJ2YWxpZFwiXSxbWzMxNzAsMzE3MV0sXCJ2YWxpZFwiXSxbWzMxNzIsMzE3M10sXCJkaXNhbGxvd2VkXCJdLFtbMzE3NCwzMTgzXSxcInZhbGlkXCJdLFtbMzE4NCwzMTkxXSxcImRpc2FsbG93ZWRcIl0sW1szMTkyLDMxOTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzMyMDAsMzIwMF0sXCJkaXNhbGxvd2VkXCJdLFtbMzIwMSwzMjAxXSxcInZhbGlkXCJdLFtbMzIwMiwzMjAzXSxcInZhbGlkXCJdLFtbMzIwNCwzMjA0XSxcImRpc2FsbG93ZWRcIl0sW1szMjA1LDMyMTJdLFwidmFsaWRcIl0sW1szMjEzLDMyMTNdLFwiZGlzYWxsb3dlZFwiXSxbWzMyMTQsMzIxNl0sXCJ2YWxpZFwiXSxbWzMyMTcsMzIxN10sXCJkaXNhbGxvd2VkXCJdLFtbMzIxOCwzMjQwXSxcInZhbGlkXCJdLFtbMzI0MSwzMjQxXSxcImRpc2FsbG93ZWRcIl0sW1szMjQyLDMyNTFdLFwidmFsaWRcIl0sW1szMjUyLDMyNTJdLFwiZGlzYWxsb3dlZFwiXSxbWzMyNTMsMzI1N10sXCJ2YWxpZFwiXSxbWzMyNTgsMzI1OV0sXCJkaXNhbGxvd2VkXCJdLFtbMzI2MCwzMjYxXSxcInZhbGlkXCJdLFtbMzI2MiwzMjY4XSxcInZhbGlkXCJdLFtbMzI2OSwzMjY5XSxcImRpc2FsbG93ZWRcIl0sW1szMjcwLDMyNzJdLFwidmFsaWRcIl0sW1szMjczLDMyNzNdLFwiZGlzYWxsb3dlZFwiXSxbWzMyNzQsMzI3N10sXCJ2YWxpZFwiXSxbWzMyNzgsMzI4NF0sXCJkaXNhbGxvd2VkXCJdLFtbMzI4NSwzMjg2XSxcInZhbGlkXCJdLFtbMzI4NywzMjkzXSxcImRpc2FsbG93ZWRcIl0sW1szMjk0LDMyOTRdLFwidmFsaWRcIl0sW1szMjk1LDMyOTVdLFwiZGlzYWxsb3dlZFwiXSxbWzMyOTYsMzI5N10sXCJ2YWxpZFwiXSxbWzMyOTgsMzI5OV0sXCJ2YWxpZFwiXSxbWzMzMDAsMzMwMV0sXCJkaXNhbGxvd2VkXCJdLFtbMzMwMiwzMzExXSxcInZhbGlkXCJdLFtbMzMxMiwzMzEyXSxcImRpc2FsbG93ZWRcIl0sW1szMzEzLDMzMTRdLFwidmFsaWRcIl0sW1szMzE1LDMzMjhdLFwiZGlzYWxsb3dlZFwiXSxbWzMzMjksMzMyOV0sXCJ2YWxpZFwiXSxbWzMzMzAsMzMzMV0sXCJ2YWxpZFwiXSxbWzMzMzIsMzMzMl0sXCJkaXNhbGxvd2VkXCJdLFtbMzMzMywzMzQwXSxcInZhbGlkXCJdLFtbMzM0MSwzMzQxXSxcImRpc2FsbG93ZWRcIl0sW1szMzQyLDMzNDRdLFwidmFsaWRcIl0sW1szMzQ1LDMzNDVdLFwiZGlzYWxsb3dlZFwiXSxbWzMzNDYsMzM2OF0sXCJ2YWxpZFwiXSxbWzMzNjksMzM2OV0sXCJ2YWxpZFwiXSxbWzMzNzAsMzM4NV0sXCJ2YWxpZFwiXSxbWzMzODYsMzM4Nl0sXCJ2YWxpZFwiXSxbWzMzODcsMzM4OF0sXCJkaXNhbGxvd2VkXCJdLFtbMzM4OSwzMzg5XSxcInZhbGlkXCJdLFtbMzM5MCwzMzk1XSxcInZhbGlkXCJdLFtbMzM5NiwzMzk2XSxcInZhbGlkXCJdLFtbMzM5NywzMzk3XSxcImRpc2FsbG93ZWRcIl0sW1szMzk4LDM0MDBdLFwidmFsaWRcIl0sW1szNDAxLDM0MDFdLFwiZGlzYWxsb3dlZFwiXSxbWzM0MDIsMzQwNV0sXCJ2YWxpZFwiXSxbWzM0MDYsMzQwNl0sXCJ2YWxpZFwiXSxbWzM0MDcsMzQxNF0sXCJkaXNhbGxvd2VkXCJdLFtbMzQxNSwzNDE1XSxcInZhbGlkXCJdLFtbMzQxNiwzNDIyXSxcImRpc2FsbG93ZWRcIl0sW1szNDIzLDM0MjNdLFwidmFsaWRcIl0sW1szNDI0LDM0MjVdLFwidmFsaWRcIl0sW1szNDI2LDM0MjddLFwidmFsaWRcIl0sW1szNDI4LDM0MjldLFwiZGlzYWxsb3dlZFwiXSxbWzM0MzAsMzQzOV0sXCJ2YWxpZFwiXSxbWzM0NDAsMzQ0NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzQ0NiwzNDQ4XSxcImRpc2FsbG93ZWRcIl0sW1szNDQ5LDM0NDldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM0NTAsMzQ1NV0sXCJ2YWxpZFwiXSxbWzM0NTYsMzQ1N10sXCJkaXNhbGxvd2VkXCJdLFtbMzQ1OCwzNDU5XSxcInZhbGlkXCJdLFtbMzQ2MCwzNDYwXSxcImRpc2FsbG93ZWRcIl0sW1szNDYxLDM0NzhdLFwidmFsaWRcIl0sW1szNDc5LDM0ODFdLFwiZGlzYWxsb3dlZFwiXSxbWzM0ODIsMzUwNV0sXCJ2YWxpZFwiXSxbWzM1MDYsMzUwNl0sXCJkaXNhbGxvd2VkXCJdLFtbMzUwNywzNTE1XSxcInZhbGlkXCJdLFtbMzUxNiwzNTE2XSxcImRpc2FsbG93ZWRcIl0sW1szNTE3LDM1MTddLFwidmFsaWRcIl0sW1szNTE4LDM1MTldLFwiZGlzYWxsb3dlZFwiXSxbWzM1MjAsMzUyNl0sXCJ2YWxpZFwiXSxbWzM1MjcsMzUyOV0sXCJkaXNhbGxvd2VkXCJdLFtbMzUzMCwzNTMwXSxcInZhbGlkXCJdLFtbMzUzMSwzNTM0XSxcImRpc2FsbG93ZWRcIl0sW1szNTM1LDM1NDBdLFwidmFsaWRcIl0sW1szNTQxLDM1NDFdLFwiZGlzYWxsb3dlZFwiXSxbWzM1NDIsMzU0Ml0sXCJ2YWxpZFwiXSxbWzM1NDMsMzU0M10sXCJkaXNhbGxvd2VkXCJdLFtbMzU0NCwzNTUxXSxcInZhbGlkXCJdLFtbMzU1MiwzNTU3XSxcImRpc2FsbG93ZWRcIl0sW1szNTU4LDM1NjddLFwidmFsaWRcIl0sW1szNTY4LDM1NjldLFwiZGlzYWxsb3dlZFwiXSxbWzM1NzAsMzU3MV0sXCJ2YWxpZFwiXSxbWzM1NzIsMzU3Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzU3MywzNTg0XSxcImRpc2FsbG93ZWRcIl0sW1szNTg1LDM2MzRdLFwidmFsaWRcIl0sW1szNjM1LDM2MzVdLFwibWFwcGVkXCIsWzM2NjEsMzYzNF1dLFtbMzYzNiwzNjQyXSxcInZhbGlkXCJdLFtbMzY0MywzNjQ2XSxcImRpc2FsbG93ZWRcIl0sW1szNjQ3LDM2NDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM2NDgsMzY2Ml0sXCJ2YWxpZFwiXSxbWzM2NjMsMzY2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzY2NCwzNjczXSxcInZhbGlkXCJdLFtbMzY3NCwzNjc1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szNjc2LDM3MTJdLFwiZGlzYWxsb3dlZFwiXSxbWzM3MTMsMzcxNF0sXCJ2YWxpZFwiXSxbWzM3MTUsMzcxNV0sXCJkaXNhbGxvd2VkXCJdLFtbMzcxNiwzNzE2XSxcInZhbGlkXCJdLFtbMzcxNywzNzE4XSxcImRpc2FsbG93ZWRcIl0sW1szNzE5LDM3MjBdLFwidmFsaWRcIl0sW1szNzIxLDM3MjFdLFwiZGlzYWxsb3dlZFwiXSxbWzM3MjIsMzcyMl0sXCJ2YWxpZFwiXSxbWzM3MjMsMzcyNF0sXCJkaXNhbGxvd2VkXCJdLFtbMzcyNSwzNzI1XSxcInZhbGlkXCJdLFtbMzcyNiwzNzMxXSxcImRpc2FsbG93ZWRcIl0sW1szNzMyLDM3MzVdLFwidmFsaWRcIl0sW1szNzM2LDM3MzZdLFwiZGlzYWxsb3dlZFwiXSxbWzM3MzcsMzc0M10sXCJ2YWxpZFwiXSxbWzM3NDQsMzc0NF0sXCJkaXNhbGxvd2VkXCJdLFtbMzc0NSwzNzQ3XSxcInZhbGlkXCJdLFtbMzc0OCwzNzQ4XSxcImRpc2FsbG93ZWRcIl0sW1szNzQ5LDM3NDldLFwidmFsaWRcIl0sW1szNzUwLDM3NTBdLFwiZGlzYWxsb3dlZFwiXSxbWzM3NTEsMzc1MV0sXCJ2YWxpZFwiXSxbWzM3NTIsMzc1M10sXCJkaXNhbGxvd2VkXCJdLFtbMzc1NCwzNzU1XSxcInZhbGlkXCJdLFtbMzc1NiwzNzU2XSxcImRpc2FsbG93ZWRcIl0sW1szNzU3LDM3NjJdLFwidmFsaWRcIl0sW1szNzYzLDM3NjNdLFwibWFwcGVkXCIsWzM3ODksMzc2Ml1dLFtbMzc2NCwzNzY5XSxcInZhbGlkXCJdLFtbMzc3MCwzNzcwXSxcImRpc2FsbG93ZWRcIl0sW1szNzcxLDM3NzNdLFwidmFsaWRcIl0sW1szNzc0LDM3NzVdLFwiZGlzYWxsb3dlZFwiXSxbWzM3NzYsMzc4MF0sXCJ2YWxpZFwiXSxbWzM3ODEsMzc4MV0sXCJkaXNhbGxvd2VkXCJdLFtbMzc4MiwzNzgyXSxcInZhbGlkXCJdLFtbMzc4MywzNzgzXSxcImRpc2FsbG93ZWRcIl0sW1szNzg0LDM3ODldLFwidmFsaWRcIl0sW1szNzkwLDM3OTFdLFwiZGlzYWxsb3dlZFwiXSxbWzM3OTIsMzgwMV0sXCJ2YWxpZFwiXSxbWzM4MDIsMzgwM10sXCJkaXNhbGxvd2VkXCJdLFtbMzgwNCwzODA0XSxcIm1hcHBlZFwiLFszNzU1LDM3MzddXSxbWzM4MDUsMzgwNV0sXCJtYXBwZWRcIixbMzc1NSwzNzQ1XV0sW1szODA2LDM4MDddLFwidmFsaWRcIl0sW1szODA4LDM4MzldLFwiZGlzYWxsb3dlZFwiXSxbWzM4NDAsMzg0MF0sXCJ2YWxpZFwiXSxbWzM4NDEsMzg1MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzg1MSwzODUxXSxcInZhbGlkXCJdLFtbMzg1MiwzODUyXSxcIm1hcHBlZFwiLFszODUxXV0sW1szODUzLDM4NjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM4NjQsMzg2NV0sXCJ2YWxpZFwiXSxbWzM4NjYsMzg3MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzg3MiwzODgxXSxcInZhbGlkXCJdLFtbMzg4MiwzODkyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szODkzLDM4OTNdLFwidmFsaWRcIl0sW1szODk0LDM4OTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM4OTUsMzg5NV0sXCJ2YWxpZFwiXSxbWzM4OTYsMzg5Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzg5NywzODk3XSxcInZhbGlkXCJdLFtbMzg5OCwzOTAxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szOTAyLDM5MDZdLFwidmFsaWRcIl0sW1szOTA3LDM5MDddLFwibWFwcGVkXCIsWzM5MDYsNDAyM11dLFtbMzkwOCwzOTExXSxcInZhbGlkXCJdLFtbMzkxMiwzOTEyXSxcImRpc2FsbG93ZWRcIl0sW1szOTEzLDM5MTZdLFwidmFsaWRcIl0sW1szOTE3LDM5MTddLFwibWFwcGVkXCIsWzM5MTYsNDAyM11dLFtbMzkxOCwzOTIxXSxcInZhbGlkXCJdLFtbMzkyMiwzOTIyXSxcIm1hcHBlZFwiLFszOTIxLDQwMjNdXSxbWzM5MjMsMzkyNl0sXCJ2YWxpZFwiXSxbWzM5MjcsMzkyN10sXCJtYXBwZWRcIixbMzkyNiw0MDIzXV0sW1szOTI4LDM5MzFdLFwidmFsaWRcIl0sW1szOTMyLDM5MzJdLFwibWFwcGVkXCIsWzM5MzEsNDAyM11dLFtbMzkzMywzOTQ0XSxcInZhbGlkXCJdLFtbMzk0NSwzOTQ1XSxcIm1hcHBlZFwiLFszOTA0LDQwMjFdXSxbWzM5NDYsMzk0Nl0sXCJ2YWxpZFwiXSxbWzM5NDcsMzk0OF0sXCJ2YWxpZFwiXSxbWzM5NDksMzk1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMzk1MywzOTU0XSxcInZhbGlkXCJdLFtbMzk1NSwzOTU1XSxcIm1hcHBlZFwiLFszOTUzLDM5NTRdXSxbWzM5NTYsMzk1Nl0sXCJ2YWxpZFwiXSxbWzM5NTcsMzk1N10sXCJtYXBwZWRcIixbMzk1MywzOTU2XV0sW1szOTU4LDM5NThdLFwibWFwcGVkXCIsWzQwMTgsMzk2OF1dLFtbMzk1OSwzOTU5XSxcIm1hcHBlZFwiLFs0MDE4LDM5NTMsMzk2OF1dLFtbMzk2MCwzOTYwXSxcIm1hcHBlZFwiLFs0MDE5LDM5NjhdXSxbWzM5NjEsMzk2MV0sXCJtYXBwZWRcIixbNDAxOSwzOTUzLDM5NjhdXSxbWzM5NjIsMzk2OF0sXCJ2YWxpZFwiXSxbWzM5NjksMzk2OV0sXCJtYXBwZWRcIixbMzk1MywzOTY4XV0sW1szOTcwLDM5NzJdLFwidmFsaWRcIl0sW1szOTczLDM5NzNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM5NzQsMzk3OV0sXCJ2YWxpZFwiXSxbWzM5ODAsMzk4M10sXCJ2YWxpZFwiXSxbWzM5ODQsMzk4Nl0sXCJ2YWxpZFwiXSxbWzM5ODcsMzk4N10sXCJtYXBwZWRcIixbMzk4Niw0MDIzXV0sW1szOTg4LDM5ODldLFwidmFsaWRcIl0sW1szOTkwLDM5OTBdLFwidmFsaWRcIl0sW1szOTkxLDM5OTFdLFwidmFsaWRcIl0sW1szOTkyLDM5OTJdLFwiZGlzYWxsb3dlZFwiXSxbWzM5OTMsMzk5Nl0sXCJ2YWxpZFwiXSxbWzM5OTcsMzk5N10sXCJtYXBwZWRcIixbMzk5Niw0MDIzXV0sW1szOTk4LDQwMDFdLFwidmFsaWRcIl0sW1s0MDAyLDQwMDJdLFwibWFwcGVkXCIsWzQwMDEsNDAyM11dLFtbNDAwMyw0MDA2XSxcInZhbGlkXCJdLFtbNDAwNyw0MDA3XSxcIm1hcHBlZFwiLFs0MDA2LDQwMjNdXSxbWzQwMDgsNDAxMV0sXCJ2YWxpZFwiXSxbWzQwMTIsNDAxMl0sXCJtYXBwZWRcIixbNDAxMSw0MDIzXV0sW1s0MDEzLDQwMTNdLFwidmFsaWRcIl0sW1s0MDE0LDQwMTZdLFwidmFsaWRcIl0sW1s0MDE3LDQwMjNdLFwidmFsaWRcIl0sW1s0MDI0LDQwMjRdLFwidmFsaWRcIl0sW1s0MDI1LDQwMjVdLFwibWFwcGVkXCIsWzM5ODQsNDAyMV1dLFtbNDAyNiw0MDI4XSxcInZhbGlkXCJdLFtbNDAyOSw0MDI5XSxcImRpc2FsbG93ZWRcIl0sW1s0MDMwLDQwMzddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQwMzgsNDAzOF0sXCJ2YWxpZFwiXSxbWzQwMzksNDA0NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDA0NSw0MDQ1XSxcImRpc2FsbG93ZWRcIl0sW1s0MDQ2LDQwNDZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQwNDcsNDA0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDA0OCw0MDQ5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MDUwLDQwNTJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQwNTMsNDA1Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDA1Nyw0MDU4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MDU5LDQwOTVdLFwiZGlzYWxsb3dlZFwiXSxbWzQwOTYsNDEyOV0sXCJ2YWxpZFwiXSxbWzQxMzAsNDEzMF0sXCJ2YWxpZFwiXSxbWzQxMzEsNDEzNV0sXCJ2YWxpZFwiXSxbWzQxMzYsNDEzNl0sXCJ2YWxpZFwiXSxbWzQxMzcsNDEzOF0sXCJ2YWxpZFwiXSxbWzQxMzksNDEzOV0sXCJ2YWxpZFwiXSxbWzQxNDAsNDE0Nl0sXCJ2YWxpZFwiXSxbWzQxNDcsNDE0OV0sXCJ2YWxpZFwiXSxbWzQxNTAsNDE1M10sXCJ2YWxpZFwiXSxbWzQxNTQsNDE1OV0sXCJ2YWxpZFwiXSxbWzQxNjAsNDE2OV0sXCJ2YWxpZFwiXSxbWzQxNzAsNDE3NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDE3Niw0MTg1XSxcInZhbGlkXCJdLFtbNDE4Niw0MjQ5XSxcInZhbGlkXCJdLFtbNDI1MCw0MjUzXSxcInZhbGlkXCJdLFtbNDI1NCw0MjU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjU2LDQyOTNdLFwiZGlzYWxsb3dlZFwiXSxbWzQyOTQsNDI5NF0sXCJkaXNhbGxvd2VkXCJdLFtbNDI5NSw0Mjk1XSxcIm1hcHBlZFwiLFsxMTU1OV1dLFtbNDI5Niw0MzAwXSxcImRpc2FsbG93ZWRcIl0sW1s0MzAxLDQzMDFdLFwibWFwcGVkXCIsWzExNTY1XV0sW1s0MzAyLDQzMDNdLFwiZGlzYWxsb3dlZFwiXSxbWzQzMDQsNDM0Ml0sXCJ2YWxpZFwiXSxbWzQzNDMsNDM0NF0sXCJ2YWxpZFwiXSxbWzQzNDUsNDM0Nl0sXCJ2YWxpZFwiXSxbWzQzNDcsNDM0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDM0OCw0MzQ4XSxcIm1hcHBlZFwiLFs0MzE2XV0sW1s0MzQ5LDQzNTFdLFwidmFsaWRcIl0sW1s0MzUyLDQ0NDFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQ0NDIsNDQ0Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDQ0Nyw0NDQ4XSxcImRpc2FsbG93ZWRcIl0sW1s0NDQ5LDQ1MTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQ1MTUsNDUxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDUyMCw0NjAxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0NjAyLDQ2MDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQ2MDgsNDYxNF0sXCJ2YWxpZFwiXSxbWzQ2MTUsNDYxNV0sXCJ2YWxpZFwiXSxbWzQ2MTYsNDY3OF0sXCJ2YWxpZFwiXSxbWzQ2NzksNDY3OV0sXCJ2YWxpZFwiXSxbWzQ2ODAsNDY4MF0sXCJ2YWxpZFwiXSxbWzQ2ODEsNDY4MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDY4Miw0Njg1XSxcInZhbGlkXCJdLFtbNDY4Niw0Njg3XSxcImRpc2FsbG93ZWRcIl0sW1s0Njg4LDQ2OTRdLFwidmFsaWRcIl0sW1s0Njk1LDQ2OTVdLFwiZGlzYWxsb3dlZFwiXSxbWzQ2OTYsNDY5Nl0sXCJ2YWxpZFwiXSxbWzQ2OTcsNDY5N10sXCJkaXNhbGxvd2VkXCJdLFtbNDY5OCw0NzAxXSxcInZhbGlkXCJdLFtbNDcwMiw0NzAzXSxcImRpc2FsbG93ZWRcIl0sW1s0NzA0LDQ3NDJdLFwidmFsaWRcIl0sW1s0NzQzLDQ3NDNdLFwidmFsaWRcIl0sW1s0NzQ0LDQ3NDRdLFwidmFsaWRcIl0sW1s0NzQ1LDQ3NDVdLFwiZGlzYWxsb3dlZFwiXSxbWzQ3NDYsNDc0OV0sXCJ2YWxpZFwiXSxbWzQ3NTAsNDc1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDc1Miw0NzgyXSxcInZhbGlkXCJdLFtbNDc4Myw0NzgzXSxcInZhbGlkXCJdLFtbNDc4NCw0Nzg0XSxcInZhbGlkXCJdLFtbNDc4NSw0Nzg1XSxcImRpc2FsbG93ZWRcIl0sW1s0Nzg2LDQ3ODldLFwidmFsaWRcIl0sW1s0NzkwLDQ3OTFdLFwiZGlzYWxsb3dlZFwiXSxbWzQ3OTIsNDc5OF0sXCJ2YWxpZFwiXSxbWzQ3OTksNDc5OV0sXCJkaXNhbGxvd2VkXCJdLFtbNDgwMCw0ODAwXSxcInZhbGlkXCJdLFtbNDgwMSw0ODAxXSxcImRpc2FsbG93ZWRcIl0sW1s0ODAyLDQ4MDVdLFwidmFsaWRcIl0sW1s0ODA2LDQ4MDddLFwiZGlzYWxsb3dlZFwiXSxbWzQ4MDgsNDgxNF0sXCJ2YWxpZFwiXSxbWzQ4MTUsNDgxNV0sXCJ2YWxpZFwiXSxbWzQ4MTYsNDgyMl0sXCJ2YWxpZFwiXSxbWzQ4MjMsNDgyM10sXCJkaXNhbGxvd2VkXCJdLFtbNDgyNCw0ODQ2XSxcInZhbGlkXCJdLFtbNDg0Nyw0ODQ3XSxcInZhbGlkXCJdLFtbNDg0OCw0ODc4XSxcInZhbGlkXCJdLFtbNDg3OSw0ODc5XSxcInZhbGlkXCJdLFtbNDg4MCw0ODgwXSxcInZhbGlkXCJdLFtbNDg4MSw0ODgxXSxcImRpc2FsbG93ZWRcIl0sW1s0ODgyLDQ4ODVdLFwidmFsaWRcIl0sW1s0ODg2LDQ4ODddLFwiZGlzYWxsb3dlZFwiXSxbWzQ4ODgsNDg5NF0sXCJ2YWxpZFwiXSxbWzQ4OTUsNDg5NV0sXCJ2YWxpZFwiXSxbWzQ4OTYsNDkzNF0sXCJ2YWxpZFwiXSxbWzQ5MzUsNDkzNV0sXCJ2YWxpZFwiXSxbWzQ5MzYsNDk1NF0sXCJ2YWxpZFwiXSxbWzQ5NTUsNDk1Nl0sXCJkaXNhbGxvd2VkXCJdLFtbNDk1Nyw0OTU4XSxcInZhbGlkXCJdLFtbNDk1OSw0OTU5XSxcInZhbGlkXCJdLFtbNDk2MCw0OTYwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0OTYxLDQ5ODhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQ5ODksNDk5MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDk5Miw1MDA3XSxcInZhbGlkXCJdLFtbNTAwOCw1MDE3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s1MDE4LDUwMjNdLFwiZGlzYWxsb3dlZFwiXSxbWzUwMjQsNTEwOF0sXCJ2YWxpZFwiXSxbWzUxMDksNTEwOV0sXCJ2YWxpZFwiXSxbWzUxMTAsNTExMV0sXCJkaXNhbGxvd2VkXCJdLFtbNTExMiw1MTEyXSxcIm1hcHBlZFwiLFs1MTA0XV0sW1s1MTEzLDUxMTNdLFwibWFwcGVkXCIsWzUxMDVdXSxbWzUxMTQsNTExNF0sXCJtYXBwZWRcIixbNTEwNl1dLFtbNTExNSw1MTE1XSxcIm1hcHBlZFwiLFs1MTA3XV0sW1s1MTE2LDUxMTZdLFwibWFwcGVkXCIsWzUxMDhdXSxbWzUxMTcsNTExN10sXCJtYXBwZWRcIixbNTEwOV1dLFtbNTExOCw1MTE5XSxcImRpc2FsbG93ZWRcIl0sW1s1MTIwLDUxMjBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzUxMjEsNTc0MF0sXCJ2YWxpZFwiXSxbWzU3NDEsNTc0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNTc0Myw1NzUwXSxcInZhbGlkXCJdLFtbNTc1MSw1NzU5XSxcInZhbGlkXCJdLFtbNTc2MCw1NzYwXSxcImRpc2FsbG93ZWRcIl0sW1s1NzYxLDU3ODZdLFwidmFsaWRcIl0sW1s1Nzg3LDU3ODhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzU3ODksNTc5MV0sXCJkaXNhbGxvd2VkXCJdLFtbNTc5Miw1ODY2XSxcInZhbGlkXCJdLFtbNTg2Nyw1ODcyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s1ODczLDU4ODBdLFwidmFsaWRcIl0sW1s1ODgxLDU4ODddLFwiZGlzYWxsb3dlZFwiXSxbWzU4ODgsNTkwMF0sXCJ2YWxpZFwiXSxbWzU5MDEsNTkwMV0sXCJkaXNhbGxvd2VkXCJdLFtbNTkwMiw1OTA4XSxcInZhbGlkXCJdLFtbNTkwOSw1OTE5XSxcImRpc2FsbG93ZWRcIl0sW1s1OTIwLDU5NDBdLFwidmFsaWRcIl0sW1s1OTQxLDU5NDJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzU5NDMsNTk1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNTk1Miw1OTcxXSxcInZhbGlkXCJdLFtbNTk3Miw1OTgzXSxcImRpc2FsbG93ZWRcIl0sW1s1OTg0LDU5OTZdLFwidmFsaWRcIl0sW1s1OTk3LDU5OTddLFwiZGlzYWxsb3dlZFwiXSxbWzU5OTgsNjAwMF0sXCJ2YWxpZFwiXSxbWzYwMDEsNjAwMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjAwMiw2MDAzXSxcInZhbGlkXCJdLFtbNjAwNCw2MDE1XSxcImRpc2FsbG93ZWRcIl0sW1s2MDE2LDYwNjddLFwidmFsaWRcIl0sW1s2MDY4LDYwNjldLFwiZGlzYWxsb3dlZFwiXSxbWzYwNzAsNjA5OV0sXCJ2YWxpZFwiXSxbWzYxMDAsNjEwMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjEwMyw2MTAzXSxcInZhbGlkXCJdLFtbNjEwNCw2MTA3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2MTA4LDYxMDhdLFwidmFsaWRcIl0sW1s2MTA5LDYxMDldLFwidmFsaWRcIl0sW1s2MTEwLDYxMTFdLFwiZGlzYWxsb3dlZFwiXSxbWzYxMTIsNjEyMV0sXCJ2YWxpZFwiXSxbWzYxMjIsNjEyN10sXCJkaXNhbGxvd2VkXCJdLFtbNjEyOCw2MTM3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2MTM4LDYxNDNdLFwiZGlzYWxsb3dlZFwiXSxbWzYxNDQsNjE0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjE1MCw2MTUwXSxcImRpc2FsbG93ZWRcIl0sW1s2MTUxLDYxNTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzYxNTUsNjE1N10sXCJpZ25vcmVkXCJdLFtbNjE1OCw2MTU4XSxcImRpc2FsbG93ZWRcIl0sW1s2MTU5LDYxNTldLFwiZGlzYWxsb3dlZFwiXSxbWzYxNjAsNjE2OV0sXCJ2YWxpZFwiXSxbWzYxNzAsNjE3NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjE3Niw2MjYzXSxcInZhbGlkXCJdLFtbNjI2NCw2MjcxXSxcImRpc2FsbG93ZWRcIl0sW1s2MjcyLDYzMTNdLFwidmFsaWRcIl0sW1s2MzE0LDYzMTRdLFwidmFsaWRcIl0sW1s2MzE1LDYzMTldLFwiZGlzYWxsb3dlZFwiXSxbWzYzMjAsNjM4OV0sXCJ2YWxpZFwiXSxbWzYzOTAsNjM5OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjQwMCw2NDI4XSxcInZhbGlkXCJdLFtbNjQyOSw2NDMwXSxcInZhbGlkXCJdLFtbNjQzMSw2NDMxXSxcImRpc2FsbG93ZWRcIl0sW1s2NDMyLDY0NDNdLFwidmFsaWRcIl0sW1s2NDQ0LDY0NDddLFwiZGlzYWxsb3dlZFwiXSxbWzY0NDgsNjQ1OV0sXCJ2YWxpZFwiXSxbWzY0NjAsNjQ2M10sXCJkaXNhbGxvd2VkXCJdLFtbNjQ2NCw2NDY0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NDY1LDY0NjddLFwiZGlzYWxsb3dlZFwiXSxbWzY0NjgsNjQ2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjQ3MCw2NTA5XSxcInZhbGlkXCJdLFtbNjUxMCw2NTExXSxcImRpc2FsbG93ZWRcIl0sW1s2NTEyLDY1MTZdLFwidmFsaWRcIl0sW1s2NTE3LDY1MjddLFwiZGlzYWxsb3dlZFwiXSxbWzY1MjgsNjU2OV0sXCJ2YWxpZFwiXSxbWzY1NzAsNjU3MV0sXCJ2YWxpZFwiXSxbWzY1NzIsNjU3NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU3Niw2NjAxXSxcInZhbGlkXCJdLFtbNjYwMiw2NjA3XSxcImRpc2FsbG93ZWRcIl0sW1s2NjA4LDY2MTddLFwidmFsaWRcIl0sW1s2NjE4LDY2MThdLFwidmFsaWRcIixbXSxcIlhWOFwiXSxbWzY2MTksNjYyMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjYyMiw2NjIzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NjI0LDY2NTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2NTYsNjY4M10sXCJ2YWxpZFwiXSxbWzY2ODQsNjY4NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjY4Niw2Njg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2Njg4LDY3NTBdLFwidmFsaWRcIl0sW1s2NzUxLDY3NTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NTIsNjc4MF0sXCJ2YWxpZFwiXSxbWzY3ODEsNjc4Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNjc4Myw2NzkzXSxcInZhbGlkXCJdLFtbNjc5NCw2Nzk5XSxcImRpc2FsbG93ZWRcIl0sW1s2ODAwLDY4MDldLFwidmFsaWRcIl0sW1s2ODEwLDY4MTVdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTYsNjgyMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjgyMyw2ODIzXSxcInZhbGlkXCJdLFtbNjgyNCw2ODI5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODMwLDY4MzFdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MzIsNjg0NV0sXCJ2YWxpZFwiXSxbWzY4NDYsNjg0Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjg0Nyw2OTExXSxcImRpc2FsbG93ZWRcIl0sW1s2OTEyLDY5ODddLFwidmFsaWRcIl0sW1s2OTg4LDY5OTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY5OTIsNzAwMV0sXCJ2YWxpZFwiXSxbWzcwMDIsNzAxOF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAxOSw3MDI3XSxcInZhbGlkXCJdLFtbNzAyOCw3MDM2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MDM3LDcwMzldLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDAsNzA4Ml0sXCJ2YWxpZFwiXSxbWzcwODMsNzA4NV0sXCJ2YWxpZFwiXSxbWzcwODYsNzA5N10sXCJ2YWxpZFwiXSxbWzcwOTgsNzEwM10sXCJ2YWxpZFwiXSxbWzcxMDQsNzE1NV0sXCJ2YWxpZFwiXSxbWzcxNTYsNzE2M10sXCJkaXNhbGxvd2VkXCJdLFtbNzE2NCw3MTY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MTY4LDcyMjNdLFwidmFsaWRcIl0sW1s3MjI0LDcyMjZdLFwiZGlzYWxsb3dlZFwiXSxbWzcyMjcsNzIzMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzIzMiw3MjQxXSxcInZhbGlkXCJdLFtbNzI0Miw3MjQ0XSxcImRpc2FsbG93ZWRcIl0sW1s3MjQ1LDcyOTNdLFwidmFsaWRcIl0sW1s3Mjk0LDcyOTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcyOTYsNzM1OV0sXCJkaXNhbGxvd2VkXCJdLFtbNzM2MCw3MzY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MzY4LDczNzVdLFwiZGlzYWxsb3dlZFwiXSxbWzczNzYsNzM3OF0sXCJ2YWxpZFwiXSxbWzczNzksNzM3OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzM4MCw3NDEwXSxcInZhbGlkXCJdLFtbNzQxMSw3NDE0XSxcInZhbGlkXCJdLFtbNzQxNSw3NDE1XSxcImRpc2FsbG93ZWRcIl0sW1s3NDE2LDc0MTddLFwidmFsaWRcIl0sW1s3NDE4LDc0MjNdLFwiZGlzYWxsb3dlZFwiXSxbWzc0MjQsNzQ2N10sXCJ2YWxpZFwiXSxbWzc0NjgsNzQ2OF0sXCJtYXBwZWRcIixbOTddXSxbWzc0NjksNzQ2OV0sXCJtYXBwZWRcIixbMjMwXV0sW1s3NDcwLDc0NzBdLFwibWFwcGVkXCIsWzk4XV0sW1s3NDcxLDc0NzFdLFwidmFsaWRcIl0sW1s3NDcyLDc0NzJdLFwibWFwcGVkXCIsWzEwMF1dLFtbNzQ3Myw3NDczXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzc0NzQsNzQ3NF0sXCJtYXBwZWRcIixbNDc3XV0sW1s3NDc1LDc0NzVdLFwibWFwcGVkXCIsWzEwM11dLFtbNzQ3Niw3NDc2XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzc0NzcsNzQ3N10sXCJtYXBwZWRcIixbMTA1XV0sW1s3NDc4LDc0NzhdLFwibWFwcGVkXCIsWzEwNl1dLFtbNzQ3OSw3NDc5XSxcIm1hcHBlZFwiLFsxMDddXSxbWzc0ODAsNzQ4MF0sXCJtYXBwZWRcIixbMTA4XV0sW1s3NDgxLDc0ODFdLFwibWFwcGVkXCIsWzEwOV1dLFtbNzQ4Miw3NDgyXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzc0ODMsNzQ4M10sXCJ2YWxpZFwiXSxbWzc0ODQsNzQ4NF0sXCJtYXBwZWRcIixbMTExXV0sW1s3NDg1LDc0ODVdLFwibWFwcGVkXCIsWzU0N11dLFtbNzQ4Niw3NDg2XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzc0ODcsNzQ4N10sXCJtYXBwZWRcIixbMTE0XV0sW1s3NDg4LDc0ODhdLFwibWFwcGVkXCIsWzExNl1dLFtbNzQ4OSw3NDg5XSxcIm1hcHBlZFwiLFsxMTddXSxbWzc0OTAsNzQ5MF0sXCJtYXBwZWRcIixbMTE5XV0sW1s3NDkxLDc0OTFdLFwibWFwcGVkXCIsWzk3XV0sW1s3NDkyLDc0OTJdLFwibWFwcGVkXCIsWzU5Ml1dLFtbNzQ5Myw3NDkzXSxcIm1hcHBlZFwiLFs1OTNdXSxbWzc0OTQsNzQ5NF0sXCJtYXBwZWRcIixbNzQyNl1dLFtbNzQ5NSw3NDk1XSxcIm1hcHBlZFwiLFs5OF1dLFtbNzQ5Niw3NDk2XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzc0OTcsNzQ5N10sXCJtYXBwZWRcIixbMTAxXV0sW1s3NDk4LDc0OThdLFwibWFwcGVkXCIsWzYwMV1dLFtbNzQ5OSw3NDk5XSxcIm1hcHBlZFwiLFs2MDNdXSxbWzc1MDAsNzUwMF0sXCJtYXBwZWRcIixbNjA0XV0sW1s3NTAxLDc1MDFdLFwibWFwcGVkXCIsWzEwM11dLFtbNzUwMiw3NTAyXSxcInZhbGlkXCJdLFtbNzUwMyw3NTAzXSxcIm1hcHBlZFwiLFsxMDddXSxbWzc1MDQsNzUwNF0sXCJtYXBwZWRcIixbMTA5XV0sW1s3NTA1LDc1MDVdLFwibWFwcGVkXCIsWzMzMV1dLFtbNzUwNiw3NTA2XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzc1MDcsNzUwN10sXCJtYXBwZWRcIixbNTk2XV0sW1s3NTA4LDc1MDhdLFwibWFwcGVkXCIsWzc0NDZdXSxbWzc1MDksNzUwOV0sXCJtYXBwZWRcIixbNzQ0N11dLFtbNzUxMCw3NTEwXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzc1MTEsNzUxMV0sXCJtYXBwZWRcIixbMTE2XV0sW1s3NTEyLDc1MTJdLFwibWFwcGVkXCIsWzExN11dLFtbNzUxMyw3NTEzXSxcIm1hcHBlZFwiLFs3NDUzXV0sW1s3NTE0LDc1MTRdLFwibWFwcGVkXCIsWzYyM11dLFtbNzUxNSw3NTE1XSxcIm1hcHBlZFwiLFsxMThdXSxbWzc1MTYsNzUxNl0sXCJtYXBwZWRcIixbNzQ2MV1dLFtbNzUxNyw3NTE3XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzc1MTgsNzUxOF0sXCJtYXBwZWRcIixbOTQ3XV0sW1s3NTE5LDc1MTldLFwibWFwcGVkXCIsWzk0OF1dLFtbNzUyMCw3NTIwXSxcIm1hcHBlZFwiLFs5NjZdXSxbWzc1MjEsNzUyMV0sXCJtYXBwZWRcIixbOTY3XV0sW1s3NTIyLDc1MjJdLFwibWFwcGVkXCIsWzEwNV1dLFtbNzUyMyw3NTIzXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzc1MjQsNzUyNF0sXCJtYXBwZWRcIixbMTE3XV0sW1s3NTI1LDc1MjVdLFwibWFwcGVkXCIsWzExOF1dLFtbNzUyNiw3NTI2XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzc1MjcsNzUyN10sXCJtYXBwZWRcIixbOTQ3XV0sW1s3NTI4LDc1MjhdLFwibWFwcGVkXCIsWzk2MV1dLFtbNzUyOSw3NTI5XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzc1MzAsNzUzMF0sXCJtYXBwZWRcIixbOTY3XV0sW1s3NTMxLDc1MzFdLFwidmFsaWRcIl0sW1s3NTMyLDc1NDNdLFwidmFsaWRcIl0sW1s3NTQ0LDc1NDRdLFwibWFwcGVkXCIsWzEwODVdXSxbWzc1NDUsNzU3OF0sXCJ2YWxpZFwiXSxbWzc1NzksNzU3OV0sXCJtYXBwZWRcIixbNTk0XV0sW1s3NTgwLDc1ODBdLFwibWFwcGVkXCIsWzk5XV0sW1s3NTgxLDc1ODFdLFwibWFwcGVkXCIsWzU5N11dLFtbNzU4Miw3NTgyXSxcIm1hcHBlZFwiLFsyNDBdXSxbWzc1ODMsNzU4M10sXCJtYXBwZWRcIixbNjA0XV0sW1s3NTg0LDc1ODRdLFwibWFwcGVkXCIsWzEwMl1dLFtbNzU4NSw3NTg1XSxcIm1hcHBlZFwiLFs2MDddXSxbWzc1ODYsNzU4Nl0sXCJtYXBwZWRcIixbNjA5XV0sW1s3NTg3LDc1ODddLFwibWFwcGVkXCIsWzYxM11dLFtbNzU4OCw3NTg4XSxcIm1hcHBlZFwiLFs2MTZdXSxbWzc1ODksNzU4OV0sXCJtYXBwZWRcIixbNjE3XV0sW1s3NTkwLDc1OTBdLFwibWFwcGVkXCIsWzYxOF1dLFtbNzU5MSw3NTkxXSxcIm1hcHBlZFwiLFs3NTQ3XV0sW1s3NTkyLDc1OTJdLFwibWFwcGVkXCIsWzY2OV1dLFtbNzU5Myw3NTkzXSxcIm1hcHBlZFwiLFs2MjFdXSxbWzc1OTQsNzU5NF0sXCJtYXBwZWRcIixbNzU1N11dLFtbNzU5NSw3NTk1XSxcIm1hcHBlZFwiLFs2NzFdXSxbWzc1OTYsNzU5Nl0sXCJtYXBwZWRcIixbNjI1XV0sW1s3NTk3LDc1OTddLFwibWFwcGVkXCIsWzYyNF1dLFtbNzU5OCw3NTk4XSxcIm1hcHBlZFwiLFs2MjZdXSxbWzc1OTksNzU5OV0sXCJtYXBwZWRcIixbNjI3XV0sW1s3NjAwLDc2MDBdLFwibWFwcGVkXCIsWzYyOF1dLFtbNzYwMSw3NjAxXSxcIm1hcHBlZFwiLFs2MjldXSxbWzc2MDIsNzYwMl0sXCJtYXBwZWRcIixbNjMyXV0sW1s3NjAzLDc2MDNdLFwibWFwcGVkXCIsWzY0Ml1dLFtbNzYwNCw3NjA0XSxcIm1hcHBlZFwiLFs2NDNdXSxbWzc2MDUsNzYwNV0sXCJtYXBwZWRcIixbNDI3XV0sW1s3NjA2LDc2MDZdLFwibWFwcGVkXCIsWzY0OV1dLFtbNzYwNyw3NjA3XSxcIm1hcHBlZFwiLFs2NTBdXSxbWzc2MDgsNzYwOF0sXCJtYXBwZWRcIixbNzQ1Ml1dLFtbNzYwOSw3NjA5XSxcIm1hcHBlZFwiLFs2NTFdXSxbWzc2MTAsNzYxMF0sXCJtYXBwZWRcIixbNjUyXV0sW1s3NjExLDc2MTFdLFwibWFwcGVkXCIsWzEyMl1dLFtbNzYxMiw3NjEyXSxcIm1hcHBlZFwiLFs2NTZdXSxbWzc2MTMsNzYxM10sXCJtYXBwZWRcIixbNjU3XV0sW1s3NjE0LDc2MTRdLFwibWFwcGVkXCIsWzY1OF1dLFtbNzYxNSw3NjE1XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzc2MTYsNzYxOV0sXCJ2YWxpZFwiXSxbWzc2MjAsNzYyNl0sXCJ2YWxpZFwiXSxbWzc2MjcsNzY1NF0sXCJ2YWxpZFwiXSxbWzc2NTUsNzY2OV0sXCJ2YWxpZFwiXSxbWzc2NzAsNzY3NV0sXCJkaXNhbGxvd2VkXCJdLFtbNzY3Niw3Njc2XSxcInZhbGlkXCJdLFtbNzY3Nyw3Njc3XSxcInZhbGlkXCJdLFtbNzY3OCw3Njc5XSxcInZhbGlkXCJdLFtbNzY4MCw3NjgwXSxcIm1hcHBlZFwiLFs3NjgxXV0sW1s3NjgxLDc2ODFdLFwidmFsaWRcIl0sW1s3NjgyLDc2ODJdLFwibWFwcGVkXCIsWzc2ODNdXSxbWzc2ODMsNzY4M10sXCJ2YWxpZFwiXSxbWzc2ODQsNzY4NF0sXCJtYXBwZWRcIixbNzY4NV1dLFtbNzY4NSw3Njg1XSxcInZhbGlkXCJdLFtbNzY4Niw3Njg2XSxcIm1hcHBlZFwiLFs3Njg3XV0sW1s3Njg3LDc2ODddLFwidmFsaWRcIl0sW1s3Njg4LDc2ODhdLFwibWFwcGVkXCIsWzc2ODldXSxbWzc2ODksNzY4OV0sXCJ2YWxpZFwiXSxbWzc2OTAsNzY5MF0sXCJtYXBwZWRcIixbNzY5MV1dLFtbNzY5MSw3NjkxXSxcInZhbGlkXCJdLFtbNzY5Miw3NjkyXSxcIm1hcHBlZFwiLFs3NjkzXV0sW1s3NjkzLDc2OTNdLFwidmFsaWRcIl0sW1s3Njk0LDc2OTRdLFwibWFwcGVkXCIsWzc2OTVdXSxbWzc2OTUsNzY5NV0sXCJ2YWxpZFwiXSxbWzc2OTYsNzY5Nl0sXCJtYXBwZWRcIixbNzY5N11dLFtbNzY5Nyw3Njk3XSxcInZhbGlkXCJdLFtbNzY5OCw3Njk4XSxcIm1hcHBlZFwiLFs3Njk5XV0sW1s3Njk5LDc2OTldLFwidmFsaWRcIl0sW1s3NzAwLDc3MDBdLFwibWFwcGVkXCIsWzc3MDFdXSxbWzc3MDEsNzcwMV0sXCJ2YWxpZFwiXSxbWzc3MDIsNzcwMl0sXCJtYXBwZWRcIixbNzcwM11dLFtbNzcwMyw3NzAzXSxcInZhbGlkXCJdLFtbNzcwNCw3NzA0XSxcIm1hcHBlZFwiLFs3NzA1XV0sW1s3NzA1LDc3MDVdLFwidmFsaWRcIl0sW1s3NzA2LDc3MDZdLFwibWFwcGVkXCIsWzc3MDddXSxbWzc3MDcsNzcwN10sXCJ2YWxpZFwiXSxbWzc3MDgsNzcwOF0sXCJtYXBwZWRcIixbNzcwOV1dLFtbNzcwOSw3NzA5XSxcInZhbGlkXCJdLFtbNzcxMCw3NzEwXSxcIm1hcHBlZFwiLFs3NzExXV0sW1s3NzExLDc3MTFdLFwidmFsaWRcIl0sW1s3NzEyLDc3MTJdLFwibWFwcGVkXCIsWzc3MTNdXSxbWzc3MTMsNzcxM10sXCJ2YWxpZFwiXSxbWzc3MTQsNzcxNF0sXCJtYXBwZWRcIixbNzcxNV1dLFtbNzcxNSw3NzE1XSxcInZhbGlkXCJdLFtbNzcxNiw3NzE2XSxcIm1hcHBlZFwiLFs3NzE3XV0sW1s3NzE3LDc3MTddLFwidmFsaWRcIl0sW1s3NzE4LDc3MThdLFwibWFwcGVkXCIsWzc3MTldXSxbWzc3MTksNzcxOV0sXCJ2YWxpZFwiXSxbWzc3MjAsNzcyMF0sXCJtYXBwZWRcIixbNzcyMV1dLFtbNzcyMSw3NzIxXSxcInZhbGlkXCJdLFtbNzcyMiw3NzIyXSxcIm1hcHBlZFwiLFs3NzIzXV0sW1s3NzIzLDc3MjNdLFwidmFsaWRcIl0sW1s3NzI0LDc3MjRdLFwibWFwcGVkXCIsWzc3MjVdXSxbWzc3MjUsNzcyNV0sXCJ2YWxpZFwiXSxbWzc3MjYsNzcyNl0sXCJtYXBwZWRcIixbNzcyN11dLFtbNzcyNyw3NzI3XSxcInZhbGlkXCJdLFtbNzcyOCw3NzI4XSxcIm1hcHBlZFwiLFs3NzI5XV0sW1s3NzI5LDc3MjldLFwidmFsaWRcIl0sW1s3NzMwLDc3MzBdLFwibWFwcGVkXCIsWzc3MzFdXSxbWzc3MzEsNzczMV0sXCJ2YWxpZFwiXSxbWzc3MzIsNzczMl0sXCJtYXBwZWRcIixbNzczM11dLFtbNzczMyw3NzMzXSxcInZhbGlkXCJdLFtbNzczNCw3NzM0XSxcIm1hcHBlZFwiLFs3NzM1XV0sW1s3NzM1LDc3MzVdLFwidmFsaWRcIl0sW1s3NzM2LDc3MzZdLFwibWFwcGVkXCIsWzc3MzddXSxbWzc3MzcsNzczN10sXCJ2YWxpZFwiXSxbWzc3MzgsNzczOF0sXCJtYXBwZWRcIixbNzczOV1dLFtbNzczOSw3NzM5XSxcInZhbGlkXCJdLFtbNzc0MCw3NzQwXSxcIm1hcHBlZFwiLFs3NzQxXV0sW1s3NzQxLDc3NDFdLFwidmFsaWRcIl0sW1s3NzQyLDc3NDJdLFwibWFwcGVkXCIsWzc3NDNdXSxbWzc3NDMsNzc0M10sXCJ2YWxpZFwiXSxbWzc3NDQsNzc0NF0sXCJtYXBwZWRcIixbNzc0NV1dLFtbNzc0NSw3NzQ1XSxcInZhbGlkXCJdLFtbNzc0Niw3NzQ2XSxcIm1hcHBlZFwiLFs3NzQ3XV0sW1s3NzQ3LDc3NDddLFwidmFsaWRcIl0sW1s3NzQ4LDc3NDhdLFwibWFwcGVkXCIsWzc3NDldXSxbWzc3NDksNzc0OV0sXCJ2YWxpZFwiXSxbWzc3NTAsNzc1MF0sXCJtYXBwZWRcIixbNzc1MV1dLFtbNzc1MSw3NzUxXSxcInZhbGlkXCJdLFtbNzc1Miw3NzUyXSxcIm1hcHBlZFwiLFs3NzUzXV0sW1s3NzUzLDc3NTNdLFwidmFsaWRcIl0sW1s3NzU0LDc3NTRdLFwibWFwcGVkXCIsWzc3NTVdXSxbWzc3NTUsNzc1NV0sXCJ2YWxpZFwiXSxbWzc3NTYsNzc1Nl0sXCJtYXBwZWRcIixbNzc1N11dLFtbNzc1Nyw3NzU3XSxcInZhbGlkXCJdLFtbNzc1OCw3NzU4XSxcIm1hcHBlZFwiLFs3NzU5XV0sW1s3NzU5LDc3NTldLFwidmFsaWRcIl0sW1s3NzYwLDc3NjBdLFwibWFwcGVkXCIsWzc3NjFdXSxbWzc3NjEsNzc2MV0sXCJ2YWxpZFwiXSxbWzc3NjIsNzc2Ml0sXCJtYXBwZWRcIixbNzc2M11dLFtbNzc2Myw3NzYzXSxcInZhbGlkXCJdLFtbNzc2NCw3NzY0XSxcIm1hcHBlZFwiLFs3NzY1XV0sW1s3NzY1LDc3NjVdLFwidmFsaWRcIl0sW1s3NzY2LDc3NjZdLFwibWFwcGVkXCIsWzc3NjddXSxbWzc3NjcsNzc2N10sXCJ2YWxpZFwiXSxbWzc3NjgsNzc2OF0sXCJtYXBwZWRcIixbNzc2OV1dLFtbNzc2OSw3NzY5XSxcInZhbGlkXCJdLFtbNzc3MCw3NzcwXSxcIm1hcHBlZFwiLFs3NzcxXV0sW1s3NzcxLDc3NzFdLFwidmFsaWRcIl0sW1s3NzcyLDc3NzJdLFwibWFwcGVkXCIsWzc3NzNdXSxbWzc3NzMsNzc3M10sXCJ2YWxpZFwiXSxbWzc3NzQsNzc3NF0sXCJtYXBwZWRcIixbNzc3NV1dLFtbNzc3NSw3Nzc1XSxcInZhbGlkXCJdLFtbNzc3Niw3Nzc2XSxcIm1hcHBlZFwiLFs3Nzc3XV0sW1s3Nzc3LDc3NzddLFwidmFsaWRcIl0sW1s3Nzc4LDc3NzhdLFwibWFwcGVkXCIsWzc3NzldXSxbWzc3NzksNzc3OV0sXCJ2YWxpZFwiXSxbWzc3ODAsNzc4MF0sXCJtYXBwZWRcIixbNzc4MV1dLFtbNzc4MSw3NzgxXSxcInZhbGlkXCJdLFtbNzc4Miw3NzgyXSxcIm1hcHBlZFwiLFs3NzgzXV0sW1s3NzgzLDc3ODNdLFwidmFsaWRcIl0sW1s3Nzg0LDc3ODRdLFwibWFwcGVkXCIsWzc3ODVdXSxbWzc3ODUsNzc4NV0sXCJ2YWxpZFwiXSxbWzc3ODYsNzc4Nl0sXCJtYXBwZWRcIixbNzc4N11dLFtbNzc4Nyw3Nzg3XSxcInZhbGlkXCJdLFtbNzc4OCw3Nzg4XSxcIm1hcHBlZFwiLFs3Nzg5XV0sW1s3Nzg5LDc3ODldLFwidmFsaWRcIl0sW1s3NzkwLDc3OTBdLFwibWFwcGVkXCIsWzc3OTFdXSxbWzc3OTEsNzc5MV0sXCJ2YWxpZFwiXSxbWzc3OTIsNzc5Ml0sXCJtYXBwZWRcIixbNzc5M11dLFtbNzc5Myw3NzkzXSxcInZhbGlkXCJdLFtbNzc5NCw3Nzk0XSxcIm1hcHBlZFwiLFs3Nzk1XV0sW1s3Nzk1LDc3OTVdLFwidmFsaWRcIl0sW1s3Nzk2LDc3OTZdLFwibWFwcGVkXCIsWzc3OTddXSxbWzc3OTcsNzc5N10sXCJ2YWxpZFwiXSxbWzc3OTgsNzc5OF0sXCJtYXBwZWRcIixbNzc5OV1dLFtbNzc5OSw3Nzk5XSxcInZhbGlkXCJdLFtbNzgwMCw3ODAwXSxcIm1hcHBlZFwiLFs3ODAxXV0sW1s3ODAxLDc4MDFdLFwidmFsaWRcIl0sW1s3ODAyLDc4MDJdLFwibWFwcGVkXCIsWzc4MDNdXSxbWzc4MDMsNzgwM10sXCJ2YWxpZFwiXSxbWzc4MDQsNzgwNF0sXCJtYXBwZWRcIixbNzgwNV1dLFtbNzgwNSw3ODA1XSxcInZhbGlkXCJdLFtbNzgwNiw3ODA2XSxcIm1hcHBlZFwiLFs3ODA3XV0sW1s3ODA3LDc4MDddLFwidmFsaWRcIl0sW1s3ODA4LDc4MDhdLFwibWFwcGVkXCIsWzc4MDldXSxbWzc4MDksNzgwOV0sXCJ2YWxpZFwiXSxbWzc4MTAsNzgxMF0sXCJtYXBwZWRcIixbNzgxMV1dLFtbNzgxMSw3ODExXSxcInZhbGlkXCJdLFtbNzgxMiw3ODEyXSxcIm1hcHBlZFwiLFs3ODEzXV0sW1s3ODEzLDc4MTNdLFwidmFsaWRcIl0sW1s3ODE0LDc4MTRdLFwibWFwcGVkXCIsWzc4MTVdXSxbWzc4MTUsNzgxNV0sXCJ2YWxpZFwiXSxbWzc4MTYsNzgxNl0sXCJtYXBwZWRcIixbNzgxN11dLFtbNzgxNyw3ODE3XSxcInZhbGlkXCJdLFtbNzgxOCw3ODE4XSxcIm1hcHBlZFwiLFs3ODE5XV0sW1s3ODE5LDc4MTldLFwidmFsaWRcIl0sW1s3ODIwLDc4MjBdLFwibWFwcGVkXCIsWzc4MjFdXSxbWzc4MjEsNzgyMV0sXCJ2YWxpZFwiXSxbWzc4MjIsNzgyMl0sXCJtYXBwZWRcIixbNzgyM11dLFtbNzgyMyw3ODIzXSxcInZhbGlkXCJdLFtbNzgyNCw3ODI0XSxcIm1hcHBlZFwiLFs3ODI1XV0sW1s3ODI1LDc4MjVdLFwidmFsaWRcIl0sW1s3ODI2LDc4MjZdLFwibWFwcGVkXCIsWzc4MjddXSxbWzc4MjcsNzgyN10sXCJ2YWxpZFwiXSxbWzc4MjgsNzgyOF0sXCJtYXBwZWRcIixbNzgyOV1dLFtbNzgyOSw3ODMzXSxcInZhbGlkXCJdLFtbNzgzNCw3ODM0XSxcIm1hcHBlZFwiLFs5Nyw3MDJdXSxbWzc4MzUsNzgzNV0sXCJtYXBwZWRcIixbNzc3N11dLFtbNzgzNiw3ODM3XSxcInZhbGlkXCJdLFtbNzgzOCw3ODM4XSxcIm1hcHBlZFwiLFsxMTUsMTE1XV0sW1s3ODM5LDc4MzldLFwidmFsaWRcIl0sW1s3ODQwLDc4NDBdLFwibWFwcGVkXCIsWzc4NDFdXSxbWzc4NDEsNzg0MV0sXCJ2YWxpZFwiXSxbWzc4NDIsNzg0Ml0sXCJtYXBwZWRcIixbNzg0M11dLFtbNzg0Myw3ODQzXSxcInZhbGlkXCJdLFtbNzg0NCw3ODQ0XSxcIm1hcHBlZFwiLFs3ODQ1XV0sW1s3ODQ1LDc4NDVdLFwidmFsaWRcIl0sW1s3ODQ2LDc4NDZdLFwibWFwcGVkXCIsWzc4NDddXSxbWzc4NDcsNzg0N10sXCJ2YWxpZFwiXSxbWzc4NDgsNzg0OF0sXCJtYXBwZWRcIixbNzg0OV1dLFtbNzg0OSw3ODQ5XSxcInZhbGlkXCJdLFtbNzg1MCw3ODUwXSxcIm1hcHBlZFwiLFs3ODUxXV0sW1s3ODUxLDc4NTFdLFwidmFsaWRcIl0sW1s3ODUyLDc4NTJdLFwibWFwcGVkXCIsWzc4NTNdXSxbWzc4NTMsNzg1M10sXCJ2YWxpZFwiXSxbWzc4NTQsNzg1NF0sXCJtYXBwZWRcIixbNzg1NV1dLFtbNzg1NSw3ODU1XSxcInZhbGlkXCJdLFtbNzg1Niw3ODU2XSxcIm1hcHBlZFwiLFs3ODU3XV0sW1s3ODU3LDc4NTddLFwidmFsaWRcIl0sW1s3ODU4LDc4NThdLFwibWFwcGVkXCIsWzc4NTldXSxbWzc4NTksNzg1OV0sXCJ2YWxpZFwiXSxbWzc4NjAsNzg2MF0sXCJtYXBwZWRcIixbNzg2MV1dLFtbNzg2MSw3ODYxXSxcInZhbGlkXCJdLFtbNzg2Miw3ODYyXSxcIm1hcHBlZFwiLFs3ODYzXV0sW1s3ODYzLDc4NjNdLFwidmFsaWRcIl0sW1s3ODY0LDc4NjRdLFwibWFwcGVkXCIsWzc4NjVdXSxbWzc4NjUsNzg2NV0sXCJ2YWxpZFwiXSxbWzc4NjYsNzg2Nl0sXCJtYXBwZWRcIixbNzg2N11dLFtbNzg2Nyw3ODY3XSxcInZhbGlkXCJdLFtbNzg2OCw3ODY4XSxcIm1hcHBlZFwiLFs3ODY5XV0sW1s3ODY5LDc4NjldLFwidmFsaWRcIl0sW1s3ODcwLDc4NzBdLFwibWFwcGVkXCIsWzc4NzFdXSxbWzc4NzEsNzg3MV0sXCJ2YWxpZFwiXSxbWzc4NzIsNzg3Ml0sXCJtYXBwZWRcIixbNzg3M11dLFtbNzg3Myw3ODczXSxcInZhbGlkXCJdLFtbNzg3NCw3ODc0XSxcIm1hcHBlZFwiLFs3ODc1XV0sW1s3ODc1LDc4NzVdLFwidmFsaWRcIl0sW1s3ODc2LDc4NzZdLFwibWFwcGVkXCIsWzc4NzddXSxbWzc4NzcsNzg3N10sXCJ2YWxpZFwiXSxbWzc4NzgsNzg3OF0sXCJtYXBwZWRcIixbNzg3OV1dLFtbNzg3OSw3ODc5XSxcInZhbGlkXCJdLFtbNzg4MCw3ODgwXSxcIm1hcHBlZFwiLFs3ODgxXV0sW1s3ODgxLDc4ODFdLFwidmFsaWRcIl0sW1s3ODgyLDc4ODJdLFwibWFwcGVkXCIsWzc4ODNdXSxbWzc4ODMsNzg4M10sXCJ2YWxpZFwiXSxbWzc4ODQsNzg4NF0sXCJtYXBwZWRcIixbNzg4NV1dLFtbNzg4NSw3ODg1XSxcInZhbGlkXCJdLFtbNzg4Niw3ODg2XSxcIm1hcHBlZFwiLFs3ODg3XV0sW1s3ODg3LDc4ODddLFwidmFsaWRcIl0sW1s3ODg4LDc4ODhdLFwibWFwcGVkXCIsWzc4ODldXSxbWzc4ODksNzg4OV0sXCJ2YWxpZFwiXSxbWzc4OTAsNzg5MF0sXCJtYXBwZWRcIixbNzg5MV1dLFtbNzg5MSw3ODkxXSxcInZhbGlkXCJdLFtbNzg5Miw3ODkyXSxcIm1hcHBlZFwiLFs3ODkzXV0sW1s3ODkzLDc4OTNdLFwidmFsaWRcIl0sW1s3ODk0LDc4OTRdLFwibWFwcGVkXCIsWzc4OTVdXSxbWzc4OTUsNzg5NV0sXCJ2YWxpZFwiXSxbWzc4OTYsNzg5Nl0sXCJtYXBwZWRcIixbNzg5N11dLFtbNzg5Nyw3ODk3XSxcInZhbGlkXCJdLFtbNzg5OCw3ODk4XSxcIm1hcHBlZFwiLFs3ODk5XV0sW1s3ODk5LDc4OTldLFwidmFsaWRcIl0sW1s3OTAwLDc5MDBdLFwibWFwcGVkXCIsWzc5MDFdXSxbWzc5MDEsNzkwMV0sXCJ2YWxpZFwiXSxbWzc5MDIsNzkwMl0sXCJtYXBwZWRcIixbNzkwM11dLFtbNzkwMyw3OTAzXSxcInZhbGlkXCJdLFtbNzkwNCw3OTA0XSxcIm1hcHBlZFwiLFs3OTA1XV0sW1s3OTA1LDc5MDVdLFwidmFsaWRcIl0sW1s3OTA2LDc5MDZdLFwibWFwcGVkXCIsWzc5MDddXSxbWzc5MDcsNzkwN10sXCJ2YWxpZFwiXSxbWzc5MDgsNzkwOF0sXCJtYXBwZWRcIixbNzkwOV1dLFtbNzkwOSw3OTA5XSxcInZhbGlkXCJdLFtbNzkxMCw3OTEwXSxcIm1hcHBlZFwiLFs3OTExXV0sW1s3OTExLDc5MTFdLFwidmFsaWRcIl0sW1s3OTEyLDc5MTJdLFwibWFwcGVkXCIsWzc5MTNdXSxbWzc5MTMsNzkxM10sXCJ2YWxpZFwiXSxbWzc5MTQsNzkxNF0sXCJtYXBwZWRcIixbNzkxNV1dLFtbNzkxNSw3OTE1XSxcInZhbGlkXCJdLFtbNzkxNiw3OTE2XSxcIm1hcHBlZFwiLFs3OTE3XV0sW1s3OTE3LDc5MTddLFwidmFsaWRcIl0sW1s3OTE4LDc5MThdLFwibWFwcGVkXCIsWzc5MTldXSxbWzc5MTksNzkxOV0sXCJ2YWxpZFwiXSxbWzc5MjAsNzkyMF0sXCJtYXBwZWRcIixbNzkyMV1dLFtbNzkyMSw3OTIxXSxcInZhbGlkXCJdLFtbNzkyMiw3OTIyXSxcIm1hcHBlZFwiLFs3OTIzXV0sW1s3OTIzLDc5MjNdLFwidmFsaWRcIl0sW1s3OTI0LDc5MjRdLFwibWFwcGVkXCIsWzc5MjVdXSxbWzc5MjUsNzkyNV0sXCJ2YWxpZFwiXSxbWzc5MjYsNzkyNl0sXCJtYXBwZWRcIixbNzkyN11dLFtbNzkyNyw3OTI3XSxcInZhbGlkXCJdLFtbNzkyOCw3OTI4XSxcIm1hcHBlZFwiLFs3OTI5XV0sW1s3OTI5LDc5MjldLFwidmFsaWRcIl0sW1s3OTMwLDc5MzBdLFwibWFwcGVkXCIsWzc5MzFdXSxbWzc5MzEsNzkzMV0sXCJ2YWxpZFwiXSxbWzc5MzIsNzkzMl0sXCJtYXBwZWRcIixbNzkzM11dLFtbNzkzMyw3OTMzXSxcInZhbGlkXCJdLFtbNzkzNCw3OTM0XSxcIm1hcHBlZFwiLFs3OTM1XV0sW1s3OTM1LDc5MzVdLFwidmFsaWRcIl0sW1s3OTM2LDc5NDNdLFwidmFsaWRcIl0sW1s3OTQ0LDc5NDRdLFwibWFwcGVkXCIsWzc5MzZdXSxbWzc5NDUsNzk0NV0sXCJtYXBwZWRcIixbNzkzN11dLFtbNzk0Niw3OTQ2XSxcIm1hcHBlZFwiLFs3OTM4XV0sW1s3OTQ3LDc5NDddLFwibWFwcGVkXCIsWzc5MzldXSxbWzc5NDgsNzk0OF0sXCJtYXBwZWRcIixbNzk0MF1dLFtbNzk0OSw3OTQ5XSxcIm1hcHBlZFwiLFs3OTQxXV0sW1s3OTUwLDc5NTBdLFwibWFwcGVkXCIsWzc5NDJdXSxbWzc5NTEsNzk1MV0sXCJtYXBwZWRcIixbNzk0M11dLFtbNzk1Miw3OTU3XSxcInZhbGlkXCJdLFtbNzk1OCw3OTU5XSxcImRpc2FsbG93ZWRcIl0sW1s3OTYwLDc5NjBdLFwibWFwcGVkXCIsWzc5NTJdXSxbWzc5NjEsNzk2MV0sXCJtYXBwZWRcIixbNzk1M11dLFtbNzk2Miw3OTYyXSxcIm1hcHBlZFwiLFs3OTU0XV0sW1s3OTYzLDc5NjNdLFwibWFwcGVkXCIsWzc5NTVdXSxbWzc5NjQsNzk2NF0sXCJtYXBwZWRcIixbNzk1Nl1dLFtbNzk2NSw3OTY1XSxcIm1hcHBlZFwiLFs3OTU3XV0sW1s3OTY2LDc5NjddLFwiZGlzYWxsb3dlZFwiXSxbWzc5NjgsNzk3NV0sXCJ2YWxpZFwiXSxbWzc5NzYsNzk3Nl0sXCJtYXBwZWRcIixbNzk2OF1dLFtbNzk3Nyw3OTc3XSxcIm1hcHBlZFwiLFs3OTY5XV0sW1s3OTc4LDc5NzhdLFwibWFwcGVkXCIsWzc5NzBdXSxbWzc5NzksNzk3OV0sXCJtYXBwZWRcIixbNzk3MV1dLFtbNzk4MCw3OTgwXSxcIm1hcHBlZFwiLFs3OTcyXV0sW1s3OTgxLDc5ODFdLFwibWFwcGVkXCIsWzc5NzNdXSxbWzc5ODIsNzk4Ml0sXCJtYXBwZWRcIixbNzk3NF1dLFtbNzk4Myw3OTgzXSxcIm1hcHBlZFwiLFs3OTc1XV0sW1s3OTg0LDc5OTFdLFwidmFsaWRcIl0sW1s3OTkyLDc5OTJdLFwibWFwcGVkXCIsWzc5ODRdXSxbWzc5OTMsNzk5M10sXCJtYXBwZWRcIixbNzk4NV1dLFtbNzk5NCw3OTk0XSxcIm1hcHBlZFwiLFs3OTg2XV0sW1s3OTk1LDc5OTVdLFwibWFwcGVkXCIsWzc5ODddXSxbWzc5OTYsNzk5Nl0sXCJtYXBwZWRcIixbNzk4OF1dLFtbNzk5Nyw3OTk3XSxcIm1hcHBlZFwiLFs3OTg5XV0sW1s3OTk4LDc5OThdLFwibWFwcGVkXCIsWzc5OTBdXSxbWzc5OTksNzk5OV0sXCJtYXBwZWRcIixbNzk5MV1dLFtbODAwMCw4MDA1XSxcInZhbGlkXCJdLFtbODAwNiw4MDA3XSxcImRpc2FsbG93ZWRcIl0sW1s4MDA4LDgwMDhdLFwibWFwcGVkXCIsWzgwMDBdXSxbWzgwMDksODAwOV0sXCJtYXBwZWRcIixbODAwMV1dLFtbODAxMCw4MDEwXSxcIm1hcHBlZFwiLFs4MDAyXV0sW1s4MDExLDgwMTFdLFwibWFwcGVkXCIsWzgwMDNdXSxbWzgwMTIsODAxMl0sXCJtYXBwZWRcIixbODAwNF1dLFtbODAxMyw4MDEzXSxcIm1hcHBlZFwiLFs4MDA1XV0sW1s4MDE0LDgwMTVdLFwiZGlzYWxsb3dlZFwiXSxbWzgwMTYsODAyM10sXCJ2YWxpZFwiXSxbWzgwMjQsODAyNF0sXCJkaXNhbGxvd2VkXCJdLFtbODAyNSw4MDI1XSxcIm1hcHBlZFwiLFs4MDE3XV0sW1s4MDI2LDgwMjZdLFwiZGlzYWxsb3dlZFwiXSxbWzgwMjcsODAyN10sXCJtYXBwZWRcIixbODAxOV1dLFtbODAyOCw4MDI4XSxcImRpc2FsbG93ZWRcIl0sW1s4MDI5LDgwMjldLFwibWFwcGVkXCIsWzgwMjFdXSxbWzgwMzAsODAzMF0sXCJkaXNhbGxvd2VkXCJdLFtbODAzMSw4MDMxXSxcIm1hcHBlZFwiLFs4MDIzXV0sW1s4MDMyLDgwMzldLFwidmFsaWRcIl0sW1s4MDQwLDgwNDBdLFwibWFwcGVkXCIsWzgwMzJdXSxbWzgwNDEsODA0MV0sXCJtYXBwZWRcIixbODAzM11dLFtbODA0Miw4MDQyXSxcIm1hcHBlZFwiLFs4MDM0XV0sW1s4MDQzLDgwNDNdLFwibWFwcGVkXCIsWzgwMzVdXSxbWzgwNDQsODA0NF0sXCJtYXBwZWRcIixbODAzNl1dLFtbODA0NSw4MDQ1XSxcIm1hcHBlZFwiLFs4MDM3XV0sW1s4MDQ2LDgwNDZdLFwibWFwcGVkXCIsWzgwMzhdXSxbWzgwNDcsODA0N10sXCJtYXBwZWRcIixbODAzOV1dLFtbODA0OCw4MDQ4XSxcInZhbGlkXCJdLFtbODA0OSw4MDQ5XSxcIm1hcHBlZFwiLFs5NDBdXSxbWzgwNTAsODA1MF0sXCJ2YWxpZFwiXSxbWzgwNTEsODA1MV0sXCJtYXBwZWRcIixbOTQxXV0sW1s4MDUyLDgwNTJdLFwidmFsaWRcIl0sW1s4MDUzLDgwNTNdLFwibWFwcGVkXCIsWzk0Ml1dLFtbODA1NCw4MDU0XSxcInZhbGlkXCJdLFtbODA1NSw4MDU1XSxcIm1hcHBlZFwiLFs5NDNdXSxbWzgwNTYsODA1Nl0sXCJ2YWxpZFwiXSxbWzgwNTcsODA1N10sXCJtYXBwZWRcIixbOTcyXV0sW1s4MDU4LDgwNThdLFwidmFsaWRcIl0sW1s4MDU5LDgwNTldLFwibWFwcGVkXCIsWzk3M11dLFtbODA2MCw4MDYwXSxcInZhbGlkXCJdLFtbODA2MSw4MDYxXSxcIm1hcHBlZFwiLFs5NzRdXSxbWzgwNjIsODA2M10sXCJkaXNhbGxvd2VkXCJdLFtbODA2NCw4MDY0XSxcIm1hcHBlZFwiLFs3OTM2LDk1M11dLFtbODA2NSw4MDY1XSxcIm1hcHBlZFwiLFs3OTM3LDk1M11dLFtbODA2Niw4MDY2XSxcIm1hcHBlZFwiLFs3OTM4LDk1M11dLFtbODA2Nyw4MDY3XSxcIm1hcHBlZFwiLFs3OTM5LDk1M11dLFtbODA2OCw4MDY4XSxcIm1hcHBlZFwiLFs3OTQwLDk1M11dLFtbODA2OSw4MDY5XSxcIm1hcHBlZFwiLFs3OTQxLDk1M11dLFtbODA3MCw4MDcwXSxcIm1hcHBlZFwiLFs3OTQyLDk1M11dLFtbODA3MSw4MDcxXSxcIm1hcHBlZFwiLFs3OTQzLDk1M11dLFtbODA3Miw4MDcyXSxcIm1hcHBlZFwiLFs3OTM2LDk1M11dLFtbODA3Myw4MDczXSxcIm1hcHBlZFwiLFs3OTM3LDk1M11dLFtbODA3NCw4MDc0XSxcIm1hcHBlZFwiLFs3OTM4LDk1M11dLFtbODA3NSw4MDc1XSxcIm1hcHBlZFwiLFs3OTM5LDk1M11dLFtbODA3Niw4MDc2XSxcIm1hcHBlZFwiLFs3OTQwLDk1M11dLFtbODA3Nyw4MDc3XSxcIm1hcHBlZFwiLFs3OTQxLDk1M11dLFtbODA3OCw4MDc4XSxcIm1hcHBlZFwiLFs3OTQyLDk1M11dLFtbODA3OSw4MDc5XSxcIm1hcHBlZFwiLFs3OTQzLDk1M11dLFtbODA4MCw4MDgwXSxcIm1hcHBlZFwiLFs3OTY4LDk1M11dLFtbODA4MSw4MDgxXSxcIm1hcHBlZFwiLFs3OTY5LDk1M11dLFtbODA4Miw4MDgyXSxcIm1hcHBlZFwiLFs3OTcwLDk1M11dLFtbODA4Myw4MDgzXSxcIm1hcHBlZFwiLFs3OTcxLDk1M11dLFtbODA4NCw4MDg0XSxcIm1hcHBlZFwiLFs3OTcyLDk1M11dLFtbODA4NSw4MDg1XSxcIm1hcHBlZFwiLFs3OTczLDk1M11dLFtbODA4Niw4MDg2XSxcIm1hcHBlZFwiLFs3OTc0LDk1M11dLFtbODA4Nyw4MDg3XSxcIm1hcHBlZFwiLFs3OTc1LDk1M11dLFtbODA4OCw4MDg4XSxcIm1hcHBlZFwiLFs3OTY4LDk1M11dLFtbODA4OSw4MDg5XSxcIm1hcHBlZFwiLFs3OTY5LDk1M11dLFtbODA5MCw4MDkwXSxcIm1hcHBlZFwiLFs3OTcwLDk1M11dLFtbODA5MSw4MDkxXSxcIm1hcHBlZFwiLFs3OTcxLDk1M11dLFtbODA5Miw4MDkyXSxcIm1hcHBlZFwiLFs3OTcyLDk1M11dLFtbODA5Myw4MDkzXSxcIm1hcHBlZFwiLFs3OTczLDk1M11dLFtbODA5NCw4MDk0XSxcIm1hcHBlZFwiLFs3OTc0LDk1M11dLFtbODA5NSw4MDk1XSxcIm1hcHBlZFwiLFs3OTc1LDk1M11dLFtbODA5Niw4MDk2XSxcIm1hcHBlZFwiLFs4MDMyLDk1M11dLFtbODA5Nyw4MDk3XSxcIm1hcHBlZFwiLFs4MDMzLDk1M11dLFtbODA5OCw4MDk4XSxcIm1hcHBlZFwiLFs4MDM0LDk1M11dLFtbODA5OSw4MDk5XSxcIm1hcHBlZFwiLFs4MDM1LDk1M11dLFtbODEwMCw4MTAwXSxcIm1hcHBlZFwiLFs4MDM2LDk1M11dLFtbODEwMSw4MTAxXSxcIm1hcHBlZFwiLFs4MDM3LDk1M11dLFtbODEwMiw4MTAyXSxcIm1hcHBlZFwiLFs4MDM4LDk1M11dLFtbODEwMyw4MTAzXSxcIm1hcHBlZFwiLFs4MDM5LDk1M11dLFtbODEwNCw4MTA0XSxcIm1hcHBlZFwiLFs4MDMyLDk1M11dLFtbODEwNSw4MTA1XSxcIm1hcHBlZFwiLFs4MDMzLDk1M11dLFtbODEwNiw4MTA2XSxcIm1hcHBlZFwiLFs4MDM0LDk1M11dLFtbODEwNyw4MTA3XSxcIm1hcHBlZFwiLFs4MDM1LDk1M11dLFtbODEwOCw4MTA4XSxcIm1hcHBlZFwiLFs4MDM2LDk1M11dLFtbODEwOSw4MTA5XSxcIm1hcHBlZFwiLFs4MDM3LDk1M11dLFtbODExMCw4MTEwXSxcIm1hcHBlZFwiLFs4MDM4LDk1M11dLFtbODExMSw4MTExXSxcIm1hcHBlZFwiLFs4MDM5LDk1M11dLFtbODExMiw4MTEzXSxcInZhbGlkXCJdLFtbODExNCw4MTE0XSxcIm1hcHBlZFwiLFs4MDQ4LDk1M11dLFtbODExNSw4MTE1XSxcIm1hcHBlZFwiLFs5NDUsOTUzXV0sW1s4MTE2LDgxMTZdLFwibWFwcGVkXCIsWzk0MCw5NTNdXSxbWzgxMTcsODExN10sXCJkaXNhbGxvd2VkXCJdLFtbODExOCw4MTE4XSxcInZhbGlkXCJdLFtbODExOSw4MTE5XSxcIm1hcHBlZFwiLFs4MTE4LDk1M11dLFtbODEyMCw4MTIwXSxcIm1hcHBlZFwiLFs4MTEyXV0sW1s4MTIxLDgxMjFdLFwibWFwcGVkXCIsWzgxMTNdXSxbWzgxMjIsODEyMl0sXCJtYXBwZWRcIixbODA0OF1dLFtbODEyMyw4MTIzXSxcIm1hcHBlZFwiLFs5NDBdXSxbWzgxMjQsODEyNF0sXCJtYXBwZWRcIixbOTQ1LDk1M11dLFtbODEyNSw4MTI1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg3XV0sW1s4MTI2LDgxMjZdLFwibWFwcGVkXCIsWzk1M11dLFtbODEyNyw4MTI3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg3XV0sW1s4MTI4LDgxMjhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw4MzRdXSxbWzgxMjksODEyOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Niw4MzRdXSxbWzgxMzAsODEzMF0sXCJtYXBwZWRcIixbODA1Miw5NTNdXSxbWzgxMzEsODEzMV0sXCJtYXBwZWRcIixbOTUxLDk1M11dLFtbODEzMiw4MTMyXSxcIm1hcHBlZFwiLFs5NDIsOTUzXV0sW1s4MTMzLDgxMzNdLFwiZGlzYWxsb3dlZFwiXSxbWzgxMzQsODEzNF0sXCJ2YWxpZFwiXSxbWzgxMzUsODEzNV0sXCJtYXBwZWRcIixbODEzNCw5NTNdXSxbWzgxMzYsODEzNl0sXCJtYXBwZWRcIixbODA1MF1dLFtbODEzNyw4MTM3XSxcIm1hcHBlZFwiLFs5NDFdXSxbWzgxMzgsODEzOF0sXCJtYXBwZWRcIixbODA1Ml1dLFtbODEzOSw4MTM5XSxcIm1hcHBlZFwiLFs5NDJdXSxbWzgxNDAsODE0MF0sXCJtYXBwZWRcIixbOTUxLDk1M11dLFtbODE0MSw4MTQxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg3LDc2OF1dLFtbODE0Miw4MTQyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg3LDc2OV1dLFtbODE0Myw4MTQzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg3LDgzNF1dLFtbODE0NCw4MTQ2XSxcInZhbGlkXCJdLFtbODE0Nyw4MTQ3XSxcIm1hcHBlZFwiLFs5MTJdXSxbWzgxNDgsODE0OV0sXCJkaXNhbGxvd2VkXCJdLFtbODE1MCw4MTUxXSxcInZhbGlkXCJdLFtbODE1Miw4MTUyXSxcIm1hcHBlZFwiLFs4MTQ0XV0sW1s4MTUzLDgxNTNdLFwibWFwcGVkXCIsWzgxNDVdXSxbWzgxNTQsODE1NF0sXCJtYXBwZWRcIixbODA1NF1dLFtbODE1NSw4MTU1XSxcIm1hcHBlZFwiLFs5NDNdXSxbWzgxNTYsODE1Nl0sXCJkaXNhbGxvd2VkXCJdLFtbODE1Nyw4MTU3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg4LDc2OF1dLFtbODE1OCw4MTU4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg4LDc2OV1dLFtbODE1OSw4MTU5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzg4LDgzNF1dLFtbODE2MCw4MTYyXSxcInZhbGlkXCJdLFtbODE2Myw4MTYzXSxcIm1hcHBlZFwiLFs5NDRdXSxbWzgxNjQsODE2N10sXCJ2YWxpZFwiXSxbWzgxNjgsODE2OF0sXCJtYXBwZWRcIixbODE2MF1dLFtbODE2OSw4MTY5XSxcIm1hcHBlZFwiLFs4MTYxXV0sW1s4MTcwLDgxNzBdLFwibWFwcGVkXCIsWzgwNThdXSxbWzgxNzEsODE3MV0sXCJtYXBwZWRcIixbOTczXV0sW1s4MTcyLDgxNzJdLFwibWFwcGVkXCIsWzgxNjVdXSxbWzgxNzMsODE3M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Niw3NjhdXSxbWzgxNzQsODE3NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Niw3NjldXSxbWzgxNzUsODE3NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzk2XV0sW1s4MTc2LDgxNzddLFwiZGlzYWxsb3dlZFwiXSxbWzgxNzgsODE3OF0sXCJtYXBwZWRcIixbODA2MCw5NTNdXSxbWzgxNzksODE3OV0sXCJtYXBwZWRcIixbOTY5LDk1M11dLFtbODE4MCw4MTgwXSxcIm1hcHBlZFwiLFs5NzQsOTUzXV0sW1s4MTgxLDgxODFdLFwiZGlzYWxsb3dlZFwiXSxbWzgxODIsODE4Ml0sXCJ2YWxpZFwiXSxbWzgxODMsODE4M10sXCJtYXBwZWRcIixbODE4Miw5NTNdXSxbWzgxODQsODE4NF0sXCJtYXBwZWRcIixbODA1Nl1dLFtbODE4NSw4MTg1XSxcIm1hcHBlZFwiLFs5NzJdXSxbWzgxODYsODE4Nl0sXCJtYXBwZWRcIixbODA2MF1dLFtbODE4Nyw4MTg3XSxcIm1hcHBlZFwiLFs5NzRdXSxbWzgxODgsODE4OF0sXCJtYXBwZWRcIixbOTY5LDk1M11dLFtbODE4OSw4MTg5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzY5XV0sW1s4MTkwLDgxOTBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3ODhdXSxbWzgxOTEsODE5MV0sXCJkaXNhbGxvd2VkXCJdLFtbODE5Miw4MjAyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzJdXSxbWzgyMDMsODIwM10sXCJpZ25vcmVkXCJdLFtbODIwNCw4MjA1XSxcImRldmlhdGlvblwiLFtdXSxbWzgyMDYsODIwN10sXCJkaXNhbGxvd2VkXCJdLFtbODIwOCw4MjA4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MjA5LDgyMDldLFwibWFwcGVkXCIsWzgyMDhdXSxbWzgyMTAsODIxNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODIxNSw4MjE1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsODE5XV0sW1s4MjE2LDgyMjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyMjgsODIzMF0sXCJkaXNhbGxvd2VkXCJdLFtbODIzMSw4MjMxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MjMyLDgyMzhdLFwiZGlzYWxsb3dlZFwiXSxbWzgyMzksODIzOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyXV0sW1s4MjQwLDgyNDJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNDMsODI0M10sXCJtYXBwZWRcIixbODI0Miw4MjQyXV0sW1s4MjQ0LDgyNDRdLFwibWFwcGVkXCIsWzgyNDIsODI0Miw4MjQyXV0sW1s4MjQ1LDgyNDVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNDYsODI0Nl0sXCJtYXBwZWRcIixbODI0NSw4MjQ1XV0sW1s4MjQ3LDgyNDddLFwibWFwcGVkXCIsWzgyNDUsODI0NSw4MjQ1XV0sW1s4MjQ4LDgyNTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNTIsODI1Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMzLDMzXV0sW1s4MjUzLDgyNTNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNTQsODI1NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3M11dLFtbODI1NSw4MjYyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MjYzLDgyNjNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2Myw2M11dLFtbODI2NCw4MjY0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjMsMzNdXSxbWzgyNjUsODI2NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMzLDYzXV0sW1s4MjY2LDgyNjldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNzAsODI3NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODI3NSw4Mjc2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4Mjc3LDgyNzhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNzksODI3OV0sXCJtYXBwZWRcIixbODI0Miw4MjQyLDgyNDIsODI0Ml1dLFtbODI4MCw4Mjg2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4Mjg3LDgyODddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMl1dLFtbODI4OCw4Mjg4XSxcImlnbm9yZWRcIl0sW1s4Mjg5LDgyOTFdLFwiZGlzYWxsb3dlZFwiXSxbWzgyOTIsODI5Ml0sXCJpZ25vcmVkXCJdLFtbODI5Myw4MjkzXSxcImRpc2FsbG93ZWRcIl0sW1s4Mjk0LDgyOTddLFwiZGlzYWxsb3dlZFwiXSxbWzgyOTgsODMwM10sXCJkaXNhbGxvd2VkXCJdLFtbODMwNCw4MzA0XSxcIm1hcHBlZFwiLFs0OF1dLFtbODMwNSw4MzA1XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzgzMDYsODMwN10sXCJkaXNhbGxvd2VkXCJdLFtbODMwOCw4MzA4XSxcIm1hcHBlZFwiLFs1Ml1dLFtbODMwOSw4MzA5XSxcIm1hcHBlZFwiLFs1M11dLFtbODMxMCw4MzEwXSxcIm1hcHBlZFwiLFs1NF1dLFtbODMxMSw4MzExXSxcIm1hcHBlZFwiLFs1NV1dLFtbODMxMiw4MzEyXSxcIm1hcHBlZFwiLFs1Nl1dLFtbODMxMyw4MzEzXSxcIm1hcHBlZFwiLFs1N11dLFtbODMxNCw4MzE0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDNdXSxbWzgzMTUsODMxNV0sXCJtYXBwZWRcIixbODcyMl1dLFtbODMxNiw4MzE2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjFdXSxbWzgzMTcsODMxN10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwXV0sW1s4MzE4LDgzMThdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MV1dLFtbODMxOSw4MzE5XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzgzMjAsODMyMF0sXCJtYXBwZWRcIixbNDhdXSxbWzgzMjEsODMyMV0sXCJtYXBwZWRcIixbNDldXSxbWzgzMjIsODMyMl0sXCJtYXBwZWRcIixbNTBdXSxbWzgzMjMsODMyM10sXCJtYXBwZWRcIixbNTFdXSxbWzgzMjQsODMyNF0sXCJtYXBwZWRcIixbNTJdXSxbWzgzMjUsODMyNV0sXCJtYXBwZWRcIixbNTNdXSxbWzgzMjYsODMyNl0sXCJtYXBwZWRcIixbNTRdXSxbWzgzMjcsODMyN10sXCJtYXBwZWRcIixbNTVdXSxbWzgzMjgsODMyOF0sXCJtYXBwZWRcIixbNTZdXSxbWzgzMjksODMyOV0sXCJtYXBwZWRcIixbNTddXSxbWzgzMzAsODMzMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQzXV0sW1s4MzMxLDgzMzFdLFwibWFwcGVkXCIsWzg3MjJdXSxbWzgzMzIsODMzMl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzYxXV0sW1s4MzMzLDgzMzNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MF1dLFtbODMzNCw4MzM0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDFdXSxbWzgzMzUsODMzNV0sXCJkaXNhbGxvd2VkXCJdLFtbODMzNiw4MzM2XSxcIm1hcHBlZFwiLFs5N11dLFtbODMzNyw4MzM3XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzgzMzgsODMzOF0sXCJtYXBwZWRcIixbMTExXV0sW1s4MzM5LDgzMzldLFwibWFwcGVkXCIsWzEyMF1dLFtbODM0MCw4MzQwXSxcIm1hcHBlZFwiLFs2MDFdXSxbWzgzNDEsODM0MV0sXCJtYXBwZWRcIixbMTA0XV0sW1s4MzQyLDgzNDJdLFwibWFwcGVkXCIsWzEwN11dLFtbODM0Myw4MzQzXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzgzNDQsODM0NF0sXCJtYXBwZWRcIixbMTA5XV0sW1s4MzQ1LDgzNDVdLFwibWFwcGVkXCIsWzExMF1dLFtbODM0Niw4MzQ2XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzgzNDcsODM0N10sXCJtYXBwZWRcIixbMTE1XV0sW1s4MzQ4LDgzNDhdLFwibWFwcGVkXCIsWzExNl1dLFtbODM0OSw4MzUxXSxcImRpc2FsbG93ZWRcIl0sW1s4MzUyLDgzNTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzNjAsODM2MF0sXCJtYXBwZWRcIixbMTE0LDExNV1dLFtbODM2MSw4MzYyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MzYzLDgzNjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzNjQsODM2NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODM2NSw4MzY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MzY4LDgzNjldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzNzAsODM3M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODM3NCw4Mzc2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4Mzc3LDgzNzddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzNzgsODM3OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODM3OSw4MzgxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MzgyLDgzODJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzODMsODM5OV0sXCJkaXNhbGxvd2VkXCJdLFtbODQwMCw4NDE3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDE4LDg0MTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0MjAsODQyNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQyNyw4NDI3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDI4LDg0MzFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0MzIsODQzMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQzMyw4NDQ3XSxcImRpc2FsbG93ZWRcIl0sW1s4NDQ4LDg0NDhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5Nyw0Nyw5OV1dLFtbODQ0OSw4NDQ5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTcsNDcsMTE1XV0sW1s4NDUwLDg0NTBdLFwibWFwcGVkXCIsWzk5XV0sW1s4NDUxLDg0NTFdLFwibWFwcGVkXCIsWzE3Niw5OV1dLFtbODQ1Miw4NDUyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDUzLDg0NTNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5OSw0NywxMTFdXSxbWzg0NTQsODQ1NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzk5LDQ3LDExN11dLFtbODQ1NSw4NDU1XSxcIm1hcHBlZFwiLFs2MDNdXSxbWzg0NTYsODQ1Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQ1Nyw4NDU3XSxcIm1hcHBlZFwiLFsxNzYsMTAyXV0sW1s4NDU4LDg0NThdLFwibWFwcGVkXCIsWzEwM11dLFtbODQ1OSw4NDYyXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzg0NjMsODQ2M10sXCJtYXBwZWRcIixbMjk1XV0sW1s4NDY0LDg0NjVdLFwibWFwcGVkXCIsWzEwNV1dLFtbODQ2Niw4NDY3XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzg0NjgsODQ2OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQ2OSw4NDY5XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzg0NzAsODQ3MF0sXCJtYXBwZWRcIixbMTEwLDExMV1dLFtbODQ3MSw4NDcyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDczLDg0NzNdLFwibWFwcGVkXCIsWzExMl1dLFtbODQ3NCw4NDc0XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzg0NzUsODQ3N10sXCJtYXBwZWRcIixbMTE0XV0sW1s4NDc4LDg0NzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0ODAsODQ4MF0sXCJtYXBwZWRcIixbMTE1LDEwOV1dLFtbODQ4MSw4NDgxXSxcIm1hcHBlZFwiLFsxMTYsMTAxLDEwOF1dLFtbODQ4Miw4NDgyXSxcIm1hcHBlZFwiLFsxMTYsMTA5XV0sW1s4NDgzLDg0ODNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0ODQsODQ4NF0sXCJtYXBwZWRcIixbMTIyXV0sW1s4NDg1LDg0ODVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0ODYsODQ4Nl0sXCJtYXBwZWRcIixbOTY5XV0sW1s4NDg3LDg0ODddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0ODgsODQ4OF0sXCJtYXBwZWRcIixbMTIyXV0sW1s4NDg5LDg0ODldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0OTAsODQ5MF0sXCJtYXBwZWRcIixbMTA3XV0sW1s4NDkxLDg0OTFdLFwibWFwcGVkXCIsWzIyOV1dLFtbODQ5Miw4NDkyXSxcIm1hcHBlZFwiLFs5OF1dLFtbODQ5Myw4NDkzXSxcIm1hcHBlZFwiLFs5OV1dLFtbODQ5NCw4NDk0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDk1LDg0OTZdLFwibWFwcGVkXCIsWzEwMV1dLFtbODQ5Nyw4NDk3XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzg0OTgsODQ5OF0sXCJkaXNhbGxvd2VkXCJdLFtbODQ5OSw4NDk5XSxcIm1hcHBlZFwiLFsxMDldXSxbWzg1MDAsODUwMF0sXCJtYXBwZWRcIixbMTExXV0sW1s4NTAxLDg1MDFdLFwibWFwcGVkXCIsWzE0ODhdXSxbWzg1MDIsODUwMl0sXCJtYXBwZWRcIixbMTQ4OV1dLFtbODUwMyw4NTAzXSxcIm1hcHBlZFwiLFsxNDkwXV0sW1s4NTA0LDg1MDRdLFwibWFwcGVkXCIsWzE0OTFdXSxbWzg1MDUsODUwNV0sXCJtYXBwZWRcIixbMTA1XV0sW1s4NTA2LDg1MDZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1MDcsODUwN10sXCJtYXBwZWRcIixbMTAyLDk3LDEyMF1dLFtbODUwOCw4NTA4XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzg1MDksODUxMF0sXCJtYXBwZWRcIixbOTQ3XV0sW1s4NTExLDg1MTFdLFwibWFwcGVkXCIsWzk2MF1dLFtbODUxMiw4NTEyXSxcIm1hcHBlZFwiLFs4NzIxXV0sW1s4NTEzLDg1MTZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1MTcsODUxOF0sXCJtYXBwZWRcIixbMTAwXV0sW1s4NTE5LDg1MTldLFwibWFwcGVkXCIsWzEwMV1dLFtbODUyMCw4NTIwXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzg1MjEsODUyMV0sXCJtYXBwZWRcIixbMTA2XV0sW1s4NTIyLDg1MjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1MjQsODUyNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODUyNSw4NTI1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NTI2LDg1MjZdLFwidmFsaWRcIl0sW1s4NTI3LDg1MjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1MjgsODUyOF0sXCJtYXBwZWRcIixbNDksODI2MCw1NV1dLFtbODUyOSw4NTI5XSxcIm1hcHBlZFwiLFs0OSw4MjYwLDU3XV0sW1s4NTMwLDg1MzBdLFwibWFwcGVkXCIsWzQ5LDgyNjAsNDksNDhdXSxbWzg1MzEsODUzMV0sXCJtYXBwZWRcIixbNDksODI2MCw1MV1dLFtbODUzMiw4NTMyXSxcIm1hcHBlZFwiLFs1MCw4MjYwLDUxXV0sW1s4NTMzLDg1MzNdLFwibWFwcGVkXCIsWzQ5LDgyNjAsNTNdXSxbWzg1MzQsODUzNF0sXCJtYXBwZWRcIixbNTAsODI2MCw1M11dLFtbODUzNSw4NTM1XSxcIm1hcHBlZFwiLFs1MSw4MjYwLDUzXV0sW1s4NTM2LDg1MzZdLFwibWFwcGVkXCIsWzUyLDgyNjAsNTNdXSxbWzg1MzcsODUzN10sXCJtYXBwZWRcIixbNDksODI2MCw1NF1dLFtbODUzOCw4NTM4XSxcIm1hcHBlZFwiLFs1Myw4MjYwLDU0XV0sW1s4NTM5LDg1MzldLFwibWFwcGVkXCIsWzQ5LDgyNjAsNTZdXSxbWzg1NDAsODU0MF0sXCJtYXBwZWRcIixbNTEsODI2MCw1Nl1dLFtbODU0MSw4NTQxXSxcIm1hcHBlZFwiLFs1Myw4MjYwLDU2XV0sW1s4NTQyLDg1NDJdLFwibWFwcGVkXCIsWzU1LDgyNjAsNTZdXSxbWzg1NDMsODU0M10sXCJtYXBwZWRcIixbNDksODI2MF1dLFtbODU0NCw4NTQ0XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzg1NDUsODU0NV0sXCJtYXBwZWRcIixbMTA1LDEwNV1dLFtbODU0Niw4NTQ2XSxcIm1hcHBlZFwiLFsxMDUsMTA1LDEwNV1dLFtbODU0Nyw4NTQ3XSxcIm1hcHBlZFwiLFsxMDUsMTE4XV0sW1s4NTQ4LDg1NDhdLFwibWFwcGVkXCIsWzExOF1dLFtbODU0OSw4NTQ5XSxcIm1hcHBlZFwiLFsxMTgsMTA1XV0sW1s4NTUwLDg1NTBdLFwibWFwcGVkXCIsWzExOCwxMDUsMTA1XV0sW1s4NTUxLDg1NTFdLFwibWFwcGVkXCIsWzExOCwxMDUsMTA1LDEwNV1dLFtbODU1Miw4NTUyXSxcIm1hcHBlZFwiLFsxMDUsMTIwXV0sW1s4NTUzLDg1NTNdLFwibWFwcGVkXCIsWzEyMF1dLFtbODU1NCw4NTU0XSxcIm1hcHBlZFwiLFsxMjAsMTA1XV0sW1s4NTU1LDg1NTVdLFwibWFwcGVkXCIsWzEyMCwxMDUsMTA1XV0sW1s4NTU2LDg1NTZdLFwibWFwcGVkXCIsWzEwOF1dLFtbODU1Nyw4NTU3XSxcIm1hcHBlZFwiLFs5OV1dLFtbODU1OCw4NTU4XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzg1NTksODU1OV0sXCJtYXBwZWRcIixbMTA5XV0sW1s4NTYwLDg1NjBdLFwibWFwcGVkXCIsWzEwNV1dLFtbODU2MSw4NTYxXSxcIm1hcHBlZFwiLFsxMDUsMTA1XV0sW1s4NTYyLDg1NjJdLFwibWFwcGVkXCIsWzEwNSwxMDUsMTA1XV0sW1s4NTYzLDg1NjNdLFwibWFwcGVkXCIsWzEwNSwxMThdXSxbWzg1NjQsODU2NF0sXCJtYXBwZWRcIixbMTE4XV0sW1s4NTY1LDg1NjVdLFwibWFwcGVkXCIsWzExOCwxMDVdXSxbWzg1NjYsODU2Nl0sXCJtYXBwZWRcIixbMTE4LDEwNSwxMDVdXSxbWzg1NjcsODU2N10sXCJtYXBwZWRcIixbMTE4LDEwNSwxMDUsMTA1XV0sW1s4NTY4LDg1NjhdLFwibWFwcGVkXCIsWzEwNSwxMjBdXSxbWzg1NjksODU2OV0sXCJtYXBwZWRcIixbMTIwXV0sW1s4NTcwLDg1NzBdLFwibWFwcGVkXCIsWzEyMCwxMDVdXSxbWzg1NzEsODU3MV0sXCJtYXBwZWRcIixbMTIwLDEwNSwxMDVdXSxbWzg1NzIsODU3Ml0sXCJtYXBwZWRcIixbMTA4XV0sW1s4NTczLDg1NzNdLFwibWFwcGVkXCIsWzk5XV0sW1s4NTc0LDg1NzRdLFwibWFwcGVkXCIsWzEwMF1dLFtbODU3NSw4NTc1XSxcIm1hcHBlZFwiLFsxMDldXSxbWzg1NzYsODU3OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODU3OSw4NTc5XSxcImRpc2FsbG93ZWRcIl0sW1s4NTgwLDg1ODBdLFwidmFsaWRcIl0sW1s4NTgxLDg1ODRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1ODUsODU4NV0sXCJtYXBwZWRcIixbNDgsODI2MCw1MV1dLFtbODU4Niw4NTg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NTg4LDg1OTFdLFwiZGlzYWxsb3dlZFwiXSxbWzg1OTIsODY4Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODY4Myw4NjkxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NjkyLDg3MDNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg3MDQsODc0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODc0OCw4NzQ4XSxcIm1hcHBlZFwiLFs4NzQ3LDg3NDddXSxbWzg3NDksODc0OV0sXCJtYXBwZWRcIixbODc0Nyw4NzQ3LDg3NDddXSxbWzg3NTAsODc1MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODc1MSw4NzUxXSxcIm1hcHBlZFwiLFs4NzUwLDg3NTBdXSxbWzg3NTIsODc1Ml0sXCJtYXBwZWRcIixbODc1MCw4NzUwLDg3NTBdXSxbWzg3NTMsODc5OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODgwMCw4ODAwXSxcImRpc2FsbG93ZWRfU1REM192YWxpZFwiXSxbWzg4MDEsODgxM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODgxNCw4ODE1XSxcImRpc2FsbG93ZWRfU1REM192YWxpZFwiXSxbWzg4MTYsODk0NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODk0Niw4OTU5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4OTYwLDg5NjBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg5NjEsODk2MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODk2Miw5MDAwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MDAxLDkwMDFdLFwibWFwcGVkXCIsWzEyMjk2XV0sW1s5MDAyLDkwMDJdLFwibWFwcGVkXCIsWzEyMjk3XV0sW1s5MDAzLDkwODJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkwODMsOTA4M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTA4NCw5MDg0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MDg1LDkxMTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkxMTUsOTE2Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTE2Nyw5MTY4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MTY5LDkxNzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkxODAsOTE5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTE5Miw5MTkyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MTkzLDkyMDNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkyMDQsOTIxMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTIxMSw5MjE1XSxcImRpc2FsbG93ZWRcIl0sW1s5MjE2LDkyNTJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkyNTMsOTI1NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTI1NSw5Mjc5XSxcImRpc2FsbG93ZWRcIl0sW1s5MjgwLDkyOTBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkyOTEsOTMxMV0sXCJkaXNhbGxvd2VkXCJdLFtbOTMxMiw5MzEyXSxcIm1hcHBlZFwiLFs0OV1dLFtbOTMxMyw5MzEzXSxcIm1hcHBlZFwiLFs1MF1dLFtbOTMxNCw5MzE0XSxcIm1hcHBlZFwiLFs1MV1dLFtbOTMxNSw5MzE1XSxcIm1hcHBlZFwiLFs1Ml1dLFtbOTMxNiw5MzE2XSxcIm1hcHBlZFwiLFs1M11dLFtbOTMxNyw5MzE3XSxcIm1hcHBlZFwiLFs1NF1dLFtbOTMxOCw5MzE4XSxcIm1hcHBlZFwiLFs1NV1dLFtbOTMxOSw5MzE5XSxcIm1hcHBlZFwiLFs1Nl1dLFtbOTMyMCw5MzIwXSxcIm1hcHBlZFwiLFs1N11dLFtbOTMyMSw5MzIxXSxcIm1hcHBlZFwiLFs0OSw0OF1dLFtbOTMyMiw5MzIyXSxcIm1hcHBlZFwiLFs0OSw0OV1dLFtbOTMyMyw5MzIzXSxcIm1hcHBlZFwiLFs0OSw1MF1dLFtbOTMyNCw5MzI0XSxcIm1hcHBlZFwiLFs0OSw1MV1dLFtbOTMyNSw5MzI1XSxcIm1hcHBlZFwiLFs0OSw1Ml1dLFtbOTMyNiw5MzI2XSxcIm1hcHBlZFwiLFs0OSw1M11dLFtbOTMyNyw5MzI3XSxcIm1hcHBlZFwiLFs0OSw1NF1dLFtbOTMyOCw5MzI4XSxcIm1hcHBlZFwiLFs0OSw1NV1dLFtbOTMyOSw5MzI5XSxcIm1hcHBlZFwiLFs0OSw1Nl1dLFtbOTMzMCw5MzMwXSxcIm1hcHBlZFwiLFs0OSw1N11dLFtbOTMzMSw5MzMxXSxcIm1hcHBlZFwiLFs1MCw0OF1dLFtbOTMzMiw5MzMyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNDFdXSxbWzkzMzMsOTMzM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDUwLDQxXV0sW1s5MzM0LDkzMzRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1MSw0MV1dLFtbOTMzNSw5MzM1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTIsNDFdXSxbWzkzMzYsOTMzNl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDUzLDQxXV0sW1s5MzM3LDkzMzddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1NCw0MV1dLFtbOTMzOCw5MzM4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTUsNDFdXSxbWzkzMzksOTMzOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDU2LDQxXV0sW1s5MzQwLDkzNDBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1Nyw0MV1dLFtbOTM0MSw5MzQxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNDgsNDFdXSxbWzkzNDIsOTM0Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQ5LDQ5LDQxXV0sW1s5MzQzLDkzNDNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OSw1MCw0MV1dLFtbOTM0NCw5MzQ0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNTEsNDFdXSxbWzkzNDUsOTM0NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQ5LDUyLDQxXV0sW1s5MzQ2LDkzNDZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OSw1Myw0MV1dLFtbOTM0Nyw5MzQ3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNTQsNDFdXSxbWzkzNDgsOTM0OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQ5LDU1LDQxXV0sW1s5MzQ5LDkzNDldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OSw1Niw0MV1dLFtbOTM1MCw5MzUwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNTcsNDFdXSxbWzkzNTEsOTM1MV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDUwLDQ4LDQxXV0sW1s5MzUyLDkzNzFdLFwiZGlzYWxsb3dlZFwiXSxbWzkzNzIsOTM3Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDk3LDQxXV0sW1s5MzczLDkzNzNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw5OCw0MV1dLFtbOTM3NCw5Mzc0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsOTksNDFdXSxbWzkzNzUsOTM3NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEwMCw0MV1dLFtbOTM3Niw5Mzc2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAxLDQxXV0sW1s5Mzc3LDkzNzddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDIsNDFdXSxbWzkzNzgsOTM3OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEwMyw0MV1dLFtbOTM3OSw5Mzc5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA0LDQxXV0sW1s5MzgwLDkzODBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDUsNDFdXSxbWzkzODEsOTM4MV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEwNiw0MV1dLFtbOTM4Miw5MzgyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA3LDQxXV0sW1s5MzgzLDkzODNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDgsNDFdXSxbWzkzODQsOTM4NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEwOSw0MV1dLFtbOTM4NSw5Mzg1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTEwLDQxXV0sW1s5Mzg2LDkzODZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTEsNDFdXSxbWzkzODcsOTM4N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDExMiw0MV1dLFtbOTM4OCw5Mzg4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTEzLDQxXV0sW1s5Mzg5LDkzODldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTQsNDFdXSxbWzkzOTAsOTM5MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDExNSw0MV1dLFtbOTM5MSw5MzkxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE2LDQxXV0sW1s5MzkyLDkzOTJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTcsNDFdXSxbWzkzOTMsOTM5M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDExOCw0MV1dLFtbOTM5NCw5Mzk0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE5LDQxXV0sW1s5Mzk1LDkzOTVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMjAsNDFdXSxbWzkzOTYsOTM5Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEyMSw0MV1dLFtbOTM5Nyw5Mzk3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTIyLDQxXV0sW1s5Mzk4LDkzOThdLFwibWFwcGVkXCIsWzk3XV0sW1s5Mzk5LDkzOTldLFwibWFwcGVkXCIsWzk4XV0sW1s5NDAwLDk0MDBdLFwibWFwcGVkXCIsWzk5XV0sW1s5NDAxLDk0MDFdLFwibWFwcGVkXCIsWzEwMF1dLFtbOTQwMiw5NDAyXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzk0MDMsOTQwM10sXCJtYXBwZWRcIixbMTAyXV0sW1s5NDA0LDk0MDRdLFwibWFwcGVkXCIsWzEwM11dLFtbOTQwNSw5NDA1XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzk0MDYsOTQwNl0sXCJtYXBwZWRcIixbMTA1XV0sW1s5NDA3LDk0MDddLFwibWFwcGVkXCIsWzEwNl1dLFtbOTQwOCw5NDA4XSxcIm1hcHBlZFwiLFsxMDddXSxbWzk0MDksOTQwOV0sXCJtYXBwZWRcIixbMTA4XV0sW1s5NDEwLDk0MTBdLFwibWFwcGVkXCIsWzEwOV1dLFtbOTQxMSw5NDExXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzk0MTIsOTQxMl0sXCJtYXBwZWRcIixbMTExXV0sW1s5NDEzLDk0MTNdLFwibWFwcGVkXCIsWzExMl1dLFtbOTQxNCw5NDE0XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzk0MTUsOTQxNV0sXCJtYXBwZWRcIixbMTE0XV0sW1s5NDE2LDk0MTZdLFwibWFwcGVkXCIsWzExNV1dLFtbOTQxNyw5NDE3XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzk0MTgsOTQxOF0sXCJtYXBwZWRcIixbMTE3XV0sW1s5NDE5LDk0MTldLFwibWFwcGVkXCIsWzExOF1dLFtbOTQyMCw5NDIwXSxcIm1hcHBlZFwiLFsxMTldXSxbWzk0MjEsOTQyMV0sXCJtYXBwZWRcIixbMTIwXV0sW1s5NDIyLDk0MjJdLFwibWFwcGVkXCIsWzEyMV1dLFtbOTQyMyw5NDIzXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzk0MjQsOTQyNF0sXCJtYXBwZWRcIixbOTddXSxbWzk0MjUsOTQyNV0sXCJtYXBwZWRcIixbOThdXSxbWzk0MjYsOTQyNl0sXCJtYXBwZWRcIixbOTldXSxbWzk0MjcsOTQyN10sXCJtYXBwZWRcIixbMTAwXV0sW1s5NDI4LDk0MjhdLFwibWFwcGVkXCIsWzEwMV1dLFtbOTQyOSw5NDI5XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzk0MzAsOTQzMF0sXCJtYXBwZWRcIixbMTAzXV0sW1s5NDMxLDk0MzFdLFwibWFwcGVkXCIsWzEwNF1dLFtbOTQzMiw5NDMyXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzk0MzMsOTQzM10sXCJtYXBwZWRcIixbMTA2XV0sW1s5NDM0LDk0MzRdLFwibWFwcGVkXCIsWzEwN11dLFtbOTQzNSw5NDM1XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzk0MzYsOTQzNl0sXCJtYXBwZWRcIixbMTA5XV0sW1s5NDM3LDk0MzddLFwibWFwcGVkXCIsWzExMF1dLFtbOTQzOCw5NDM4XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzk0MzksOTQzOV0sXCJtYXBwZWRcIixbMTEyXV0sW1s5NDQwLDk0NDBdLFwibWFwcGVkXCIsWzExM11dLFtbOTQ0MSw5NDQxXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzk0NDIsOTQ0Ml0sXCJtYXBwZWRcIixbMTE1XV0sW1s5NDQzLDk0NDNdLFwibWFwcGVkXCIsWzExNl1dLFtbOTQ0NCw5NDQ0XSxcIm1hcHBlZFwiLFsxMTddXSxbWzk0NDUsOTQ0NV0sXCJtYXBwZWRcIixbMTE4XV0sW1s5NDQ2LDk0NDZdLFwibWFwcGVkXCIsWzExOV1dLFtbOTQ0Nyw5NDQ3XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzk0NDgsOTQ0OF0sXCJtYXBwZWRcIixbMTIxXV0sW1s5NDQ5LDk0NDldLFwibWFwcGVkXCIsWzEyMl1dLFtbOTQ1MCw5NDUwXSxcIm1hcHBlZFwiLFs0OF1dLFtbOTQ1MSw5NDcwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NDcxLDk0NzFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk0NzIsOTYyMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTYyMiw5NjMxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NjMyLDk3MTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk3MTIsOTcxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTcyMCw5NzI3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NzI4LDk3NDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk3NDgsOTc0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTc1MCw5NzUxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NzUyLDk3NTJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk3NTMsOTc1M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTc1NCw5ODM5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5ODQwLDk4NDFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk4NDIsOTg1M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTg1NCw5ODU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5ODU2LDk4NjVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk4NjYsOTg3M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTg3NCw5ODg0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5ODg1LDk4ODVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk4ODYsOTg4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTg4OCw5ODg5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5ODkwLDk5MDVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5MDYsOTkwNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTkwNyw5OTE2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTE3LDk5MTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5MjAsOTkyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTkyNCw5OTMzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTM0LDk5MzRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5MzUsOTk1M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTk1NCw5OTU0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTU1LDk5NTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5NTYsOTk1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTk2MCw5OTgzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTg0LDk5ODRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5ODUsOTk4OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTk4OSw5OTg5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTkwLDk5OTNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5OTQsOTk5NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTk5NiwxMDAyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwMjQsMTAwMjRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDI1LDEwMDU5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA2MCwxMDA2MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwNjEsMTAwNjFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDYyLDEwMDYyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA2MywxMDA2Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwNjcsMTAwNjldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDcwLDEwMDcwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA3MSwxMDA3MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwNzIsMTAwNzhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDc5LDEwMDgwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA4MSwxMDA4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwODgsMTAxMDFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTAyLDEwMTMyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDEzMywxMDEzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxMzYsMTAxNTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTYwLDEwMTYwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDE2MSwxMDE3NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxNzUsMTAxNzVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTc2LDEwMTgyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDE4MywxMDE4Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxODcsMTAxODddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTg4LDEwMTg4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDE4OSwxMDE4OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxOTAsMTAxOTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTkyLDEwMjE5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDIyMCwxMDIyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAyMjQsMTAyMzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMjQwLDEwNDk1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDQ5NiwxMDc2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTA3NjQsMTA3NjRdLFwibWFwcGVkXCIsWzg3NDcsODc0Nyw4NzQ3LDg3NDddXSxbWzEwNzY1LDEwODY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDg2OCwxMDg2OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzU4LDU4LDYxXV0sW1sxMDg2OSwxMDg2OV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzYxLDYxXV0sW1sxMDg3MCwxMDg3MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzYxLDYxLDYxXV0sW1sxMDg3MSwxMDk3MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTA5NzIsMTA5NzJdLFwibWFwcGVkXCIsWzEwOTczLDgyNF1dLFtbMTA5NzMsMTEwMDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMDA4LDExMDIxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTAyMiwxMTAyN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEwMjgsMTEwMzRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMDM1LDExMDM5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTA0MCwxMTA0M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEwNDQsMTEwODRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMDg1LDExMDg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTA4OCwxMTA5Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEwOTMsMTEwOTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMDk4LDExMTIzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTEyNCwxMTEyNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTExMjYsMTExNTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMTU4LDExMTU5XSxcImRpc2FsbG93ZWRcIl0sW1sxMTE2MCwxMTE5M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTExOTQsMTExOTZdLFwiZGlzYWxsb3dlZFwiXSxbWzExMTk3LDExMjA4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTIwOSwxMTIwOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTEyMTAsMTEyMTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMjE4LDExMjQzXSxcImRpc2FsbG93ZWRcIl0sW1sxMTI0NCwxMTI0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEyNDgsMTEyNjNdLFwiZGlzYWxsb3dlZFwiXSxbWzExMjY0LDExMjY0XSxcIm1hcHBlZFwiLFsxMTMxMl1dLFtbMTEyNjUsMTEyNjVdLFwibWFwcGVkXCIsWzExMzEzXV0sW1sxMTI2NiwxMTI2Nl0sXCJtYXBwZWRcIixbMTEzMTRdXSxbWzExMjY3LDExMjY3XSxcIm1hcHBlZFwiLFsxMTMxNV1dLFtbMTEyNjgsMTEyNjhdLFwibWFwcGVkXCIsWzExMzE2XV0sW1sxMTI2OSwxMTI2OV0sXCJtYXBwZWRcIixbMTEzMTddXSxbWzExMjcwLDExMjcwXSxcIm1hcHBlZFwiLFsxMTMxOF1dLFtbMTEyNzEsMTEyNzFdLFwibWFwcGVkXCIsWzExMzE5XV0sW1sxMTI3MiwxMTI3Ml0sXCJtYXBwZWRcIixbMTEzMjBdXSxbWzExMjczLDExMjczXSxcIm1hcHBlZFwiLFsxMTMyMV1dLFtbMTEyNzQsMTEyNzRdLFwibWFwcGVkXCIsWzExMzIyXV0sW1sxMTI3NSwxMTI3NV0sXCJtYXBwZWRcIixbMTEzMjNdXSxbWzExMjc2LDExMjc2XSxcIm1hcHBlZFwiLFsxMTMyNF1dLFtbMTEyNzcsMTEyNzddLFwibWFwcGVkXCIsWzExMzI1XV0sW1sxMTI3OCwxMTI3OF0sXCJtYXBwZWRcIixbMTEzMjZdXSxbWzExMjc5LDExMjc5XSxcIm1hcHBlZFwiLFsxMTMyN11dLFtbMTEyODAsMTEyODBdLFwibWFwcGVkXCIsWzExMzI4XV0sW1sxMTI4MSwxMTI4MV0sXCJtYXBwZWRcIixbMTEzMjldXSxbWzExMjgyLDExMjgyXSxcIm1hcHBlZFwiLFsxMTMzMF1dLFtbMTEyODMsMTEyODNdLFwibWFwcGVkXCIsWzExMzMxXV0sW1sxMTI4NCwxMTI4NF0sXCJtYXBwZWRcIixbMTEzMzJdXSxbWzExMjg1LDExMjg1XSxcIm1hcHBlZFwiLFsxMTMzM11dLFtbMTEyODYsMTEyODZdLFwibWFwcGVkXCIsWzExMzM0XV0sW1sxMTI4NywxMTI4N10sXCJtYXBwZWRcIixbMTEzMzVdXSxbWzExMjg4LDExMjg4XSxcIm1hcHBlZFwiLFsxMTMzNl1dLFtbMTEyODksMTEyODldLFwibWFwcGVkXCIsWzExMzM3XV0sW1sxMTI5MCwxMTI5MF0sXCJtYXBwZWRcIixbMTEzMzhdXSxbWzExMjkxLDExMjkxXSxcIm1hcHBlZFwiLFsxMTMzOV1dLFtbMTEyOTIsMTEyOTJdLFwibWFwcGVkXCIsWzExMzQwXV0sW1sxMTI5MywxMTI5M10sXCJtYXBwZWRcIixbMTEzNDFdXSxbWzExMjk0LDExMjk0XSxcIm1hcHBlZFwiLFsxMTM0Ml1dLFtbMTEyOTUsMTEyOTVdLFwibWFwcGVkXCIsWzExMzQzXV0sW1sxMTI5NiwxMTI5Nl0sXCJtYXBwZWRcIixbMTEzNDRdXSxbWzExMjk3LDExMjk3XSxcIm1hcHBlZFwiLFsxMTM0NV1dLFtbMTEyOTgsMTEyOThdLFwibWFwcGVkXCIsWzExMzQ2XV0sW1sxMTI5OSwxMTI5OV0sXCJtYXBwZWRcIixbMTEzNDddXSxbWzExMzAwLDExMzAwXSxcIm1hcHBlZFwiLFsxMTM0OF1dLFtbMTEzMDEsMTEzMDFdLFwibWFwcGVkXCIsWzExMzQ5XV0sW1sxMTMwMiwxMTMwMl0sXCJtYXBwZWRcIixbMTEzNTBdXSxbWzExMzAzLDExMzAzXSxcIm1hcHBlZFwiLFsxMTM1MV1dLFtbMTEzMDQsMTEzMDRdLFwibWFwcGVkXCIsWzExMzUyXV0sW1sxMTMwNSwxMTMwNV0sXCJtYXBwZWRcIixbMTEzNTNdXSxbWzExMzA2LDExMzA2XSxcIm1hcHBlZFwiLFsxMTM1NF1dLFtbMTEzMDcsMTEzMDddLFwibWFwcGVkXCIsWzExMzU1XV0sW1sxMTMwOCwxMTMwOF0sXCJtYXBwZWRcIixbMTEzNTZdXSxbWzExMzA5LDExMzA5XSxcIm1hcHBlZFwiLFsxMTM1N11dLFtbMTEzMTAsMTEzMTBdLFwibWFwcGVkXCIsWzExMzU4XV0sW1sxMTMxMSwxMTMxMV0sXCJkaXNhbGxvd2VkXCJdLFtbMTEzMTIsMTEzNThdLFwidmFsaWRcIl0sW1sxMTM1OSwxMTM1OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTEzNjAsMTEzNjBdLFwibWFwcGVkXCIsWzExMzYxXV0sW1sxMTM2MSwxMTM2MV0sXCJ2YWxpZFwiXSxbWzExMzYyLDExMzYyXSxcIm1hcHBlZFwiLFs2MTldXSxbWzExMzYzLDExMzYzXSxcIm1hcHBlZFwiLFs3NTQ5XV0sW1sxMTM2NCwxMTM2NF0sXCJtYXBwZWRcIixbNjM3XV0sW1sxMTM2NSwxMTM2Nl0sXCJ2YWxpZFwiXSxbWzExMzY3LDExMzY3XSxcIm1hcHBlZFwiLFsxMTM2OF1dLFtbMTEzNjgsMTEzNjhdLFwidmFsaWRcIl0sW1sxMTM2OSwxMTM2OV0sXCJtYXBwZWRcIixbMTEzNzBdXSxbWzExMzcwLDExMzcwXSxcInZhbGlkXCJdLFtbMTEzNzEsMTEzNzFdLFwibWFwcGVkXCIsWzExMzcyXV0sW1sxMTM3MiwxMTM3Ml0sXCJ2YWxpZFwiXSxbWzExMzczLDExMzczXSxcIm1hcHBlZFwiLFs1OTNdXSxbWzExMzc0LDExMzc0XSxcIm1hcHBlZFwiLFs2MjVdXSxbWzExMzc1LDExMzc1XSxcIm1hcHBlZFwiLFs1OTJdXSxbWzExMzc2LDExMzc2XSxcIm1hcHBlZFwiLFs1OTRdXSxbWzExMzc3LDExMzc3XSxcInZhbGlkXCJdLFtbMTEzNzgsMTEzNzhdLFwibWFwcGVkXCIsWzExMzc5XV0sW1sxMTM3OSwxMTM3OV0sXCJ2YWxpZFwiXSxbWzExMzgwLDExMzgwXSxcInZhbGlkXCJdLFtbMTEzODEsMTEzODFdLFwibWFwcGVkXCIsWzExMzgyXV0sW1sxMTM4MiwxMTM4M10sXCJ2YWxpZFwiXSxbWzExMzg0LDExMzg3XSxcInZhbGlkXCJdLFtbMTEzODgsMTEzODhdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTEzODksMTEzODldLFwibWFwcGVkXCIsWzExOF1dLFtbMTEzOTAsMTEzOTBdLFwibWFwcGVkXCIsWzU3NV1dLFtbMTEzOTEsMTEzOTFdLFwibWFwcGVkXCIsWzU3Nl1dLFtbMTEzOTIsMTEzOTJdLFwibWFwcGVkXCIsWzExMzkzXV0sW1sxMTM5MywxMTM5M10sXCJ2YWxpZFwiXSxbWzExMzk0LDExMzk0XSxcIm1hcHBlZFwiLFsxMTM5NV1dLFtbMTEzOTUsMTEzOTVdLFwidmFsaWRcIl0sW1sxMTM5NiwxMTM5Nl0sXCJtYXBwZWRcIixbMTEzOTddXSxbWzExMzk3LDExMzk3XSxcInZhbGlkXCJdLFtbMTEzOTgsMTEzOThdLFwibWFwcGVkXCIsWzExMzk5XV0sW1sxMTM5OSwxMTM5OV0sXCJ2YWxpZFwiXSxbWzExNDAwLDExNDAwXSxcIm1hcHBlZFwiLFsxMTQwMV1dLFtbMTE0MDEsMTE0MDFdLFwidmFsaWRcIl0sW1sxMTQwMiwxMTQwMl0sXCJtYXBwZWRcIixbMTE0MDNdXSxbWzExNDAzLDExNDAzXSxcInZhbGlkXCJdLFtbMTE0MDQsMTE0MDRdLFwibWFwcGVkXCIsWzExNDA1XV0sW1sxMTQwNSwxMTQwNV0sXCJ2YWxpZFwiXSxbWzExNDA2LDExNDA2XSxcIm1hcHBlZFwiLFsxMTQwN11dLFtbMTE0MDcsMTE0MDddLFwidmFsaWRcIl0sW1sxMTQwOCwxMTQwOF0sXCJtYXBwZWRcIixbMTE0MDldXSxbWzExNDA5LDExNDA5XSxcInZhbGlkXCJdLFtbMTE0MTAsMTE0MTBdLFwibWFwcGVkXCIsWzExNDExXV0sW1sxMTQxMSwxMTQxMV0sXCJ2YWxpZFwiXSxbWzExNDEyLDExNDEyXSxcIm1hcHBlZFwiLFsxMTQxM11dLFtbMTE0MTMsMTE0MTNdLFwidmFsaWRcIl0sW1sxMTQxNCwxMTQxNF0sXCJtYXBwZWRcIixbMTE0MTVdXSxbWzExNDE1LDExNDE1XSxcInZhbGlkXCJdLFtbMTE0MTYsMTE0MTZdLFwibWFwcGVkXCIsWzExNDE3XV0sW1sxMTQxNywxMTQxN10sXCJ2YWxpZFwiXSxbWzExNDE4LDExNDE4XSxcIm1hcHBlZFwiLFsxMTQxOV1dLFtbMTE0MTksMTE0MTldLFwidmFsaWRcIl0sW1sxMTQyMCwxMTQyMF0sXCJtYXBwZWRcIixbMTE0MjFdXSxbWzExNDIxLDExNDIxXSxcInZhbGlkXCJdLFtbMTE0MjIsMTE0MjJdLFwibWFwcGVkXCIsWzExNDIzXV0sW1sxMTQyMywxMTQyM10sXCJ2YWxpZFwiXSxbWzExNDI0LDExNDI0XSxcIm1hcHBlZFwiLFsxMTQyNV1dLFtbMTE0MjUsMTE0MjVdLFwidmFsaWRcIl0sW1sxMTQyNiwxMTQyNl0sXCJtYXBwZWRcIixbMTE0MjddXSxbWzExNDI3LDExNDI3XSxcInZhbGlkXCJdLFtbMTE0MjgsMTE0MjhdLFwibWFwcGVkXCIsWzExNDI5XV0sW1sxMTQyOSwxMTQyOV0sXCJ2YWxpZFwiXSxbWzExNDMwLDExNDMwXSxcIm1hcHBlZFwiLFsxMTQzMV1dLFtbMTE0MzEsMTE0MzFdLFwidmFsaWRcIl0sW1sxMTQzMiwxMTQzMl0sXCJtYXBwZWRcIixbMTE0MzNdXSxbWzExNDMzLDExNDMzXSxcInZhbGlkXCJdLFtbMTE0MzQsMTE0MzRdLFwibWFwcGVkXCIsWzExNDM1XV0sW1sxMTQzNSwxMTQzNV0sXCJ2YWxpZFwiXSxbWzExNDM2LDExNDM2XSxcIm1hcHBlZFwiLFsxMTQzN11dLFtbMTE0MzcsMTE0MzddLFwidmFsaWRcIl0sW1sxMTQzOCwxMTQzOF0sXCJtYXBwZWRcIixbMTE0MzldXSxbWzExNDM5LDExNDM5XSxcInZhbGlkXCJdLFtbMTE0NDAsMTE0NDBdLFwibWFwcGVkXCIsWzExNDQxXV0sW1sxMTQ0MSwxMTQ0MV0sXCJ2YWxpZFwiXSxbWzExNDQyLDExNDQyXSxcIm1hcHBlZFwiLFsxMTQ0M11dLFtbMTE0NDMsMTE0NDNdLFwidmFsaWRcIl0sW1sxMTQ0NCwxMTQ0NF0sXCJtYXBwZWRcIixbMTE0NDVdXSxbWzExNDQ1LDExNDQ1XSxcInZhbGlkXCJdLFtbMTE0NDYsMTE0NDZdLFwibWFwcGVkXCIsWzExNDQ3XV0sW1sxMTQ0NywxMTQ0N10sXCJ2YWxpZFwiXSxbWzExNDQ4LDExNDQ4XSxcIm1hcHBlZFwiLFsxMTQ0OV1dLFtbMTE0NDksMTE0NDldLFwidmFsaWRcIl0sW1sxMTQ1MCwxMTQ1MF0sXCJtYXBwZWRcIixbMTE0NTFdXSxbWzExNDUxLDExNDUxXSxcInZhbGlkXCJdLFtbMTE0NTIsMTE0NTJdLFwibWFwcGVkXCIsWzExNDUzXV0sW1sxMTQ1MywxMTQ1M10sXCJ2YWxpZFwiXSxbWzExNDU0LDExNDU0XSxcIm1hcHBlZFwiLFsxMTQ1NV1dLFtbMTE0NTUsMTE0NTVdLFwidmFsaWRcIl0sW1sxMTQ1NiwxMTQ1Nl0sXCJtYXBwZWRcIixbMTE0NTddXSxbWzExNDU3LDExNDU3XSxcInZhbGlkXCJdLFtbMTE0NTgsMTE0NThdLFwibWFwcGVkXCIsWzExNDU5XV0sW1sxMTQ1OSwxMTQ1OV0sXCJ2YWxpZFwiXSxbWzExNDYwLDExNDYwXSxcIm1hcHBlZFwiLFsxMTQ2MV1dLFtbMTE0NjEsMTE0NjFdLFwidmFsaWRcIl0sW1sxMTQ2MiwxMTQ2Ml0sXCJtYXBwZWRcIixbMTE0NjNdXSxbWzExNDYzLDExNDYzXSxcInZhbGlkXCJdLFtbMTE0NjQsMTE0NjRdLFwibWFwcGVkXCIsWzExNDY1XV0sW1sxMTQ2NSwxMTQ2NV0sXCJ2YWxpZFwiXSxbWzExNDY2LDExNDY2XSxcIm1hcHBlZFwiLFsxMTQ2N11dLFtbMTE0NjcsMTE0NjddLFwidmFsaWRcIl0sW1sxMTQ2OCwxMTQ2OF0sXCJtYXBwZWRcIixbMTE0NjldXSxbWzExNDY5LDExNDY5XSxcInZhbGlkXCJdLFtbMTE0NzAsMTE0NzBdLFwibWFwcGVkXCIsWzExNDcxXV0sW1sxMTQ3MSwxMTQ3MV0sXCJ2YWxpZFwiXSxbWzExNDcyLDExNDcyXSxcIm1hcHBlZFwiLFsxMTQ3M11dLFtbMTE0NzMsMTE0NzNdLFwidmFsaWRcIl0sW1sxMTQ3NCwxMTQ3NF0sXCJtYXBwZWRcIixbMTE0NzVdXSxbWzExNDc1LDExNDc1XSxcInZhbGlkXCJdLFtbMTE0NzYsMTE0NzZdLFwibWFwcGVkXCIsWzExNDc3XV0sW1sxMTQ3NywxMTQ3N10sXCJ2YWxpZFwiXSxbWzExNDc4LDExNDc4XSxcIm1hcHBlZFwiLFsxMTQ3OV1dLFtbMTE0NzksMTE0NzldLFwidmFsaWRcIl0sW1sxMTQ4MCwxMTQ4MF0sXCJtYXBwZWRcIixbMTE0ODFdXSxbWzExNDgxLDExNDgxXSxcInZhbGlkXCJdLFtbMTE0ODIsMTE0ODJdLFwibWFwcGVkXCIsWzExNDgzXV0sW1sxMTQ4MywxMTQ4M10sXCJ2YWxpZFwiXSxbWzExNDg0LDExNDg0XSxcIm1hcHBlZFwiLFsxMTQ4NV1dLFtbMTE0ODUsMTE0ODVdLFwidmFsaWRcIl0sW1sxMTQ4NiwxMTQ4Nl0sXCJtYXBwZWRcIixbMTE0ODddXSxbWzExNDg3LDExNDg3XSxcInZhbGlkXCJdLFtbMTE0ODgsMTE0ODhdLFwibWFwcGVkXCIsWzExNDg5XV0sW1sxMTQ4OSwxMTQ4OV0sXCJ2YWxpZFwiXSxbWzExNDkwLDExNDkwXSxcIm1hcHBlZFwiLFsxMTQ5MV1dLFtbMTE0OTEsMTE0OTJdLFwidmFsaWRcIl0sW1sxMTQ5MywxMTQ5OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE0OTksMTE0OTldLFwibWFwcGVkXCIsWzExNTAwXV0sW1sxMTUwMCwxMTUwMF0sXCJ2YWxpZFwiXSxbWzExNTAxLDExNTAxXSxcIm1hcHBlZFwiLFsxMTUwMl1dLFtbMTE1MDIsMTE1MDVdLFwidmFsaWRcIl0sW1sxMTUwNiwxMTUwNl0sXCJtYXBwZWRcIixbMTE1MDddXSxbWzExNTA3LDExNTA3XSxcInZhbGlkXCJdLFtbMTE1MDgsMTE1MTJdLFwiZGlzYWxsb3dlZFwiXSxbWzExNTEzLDExNTE5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTUyMCwxMTU1N10sXCJ2YWxpZFwiXSxbWzExNTU4LDExNTU4XSxcImRpc2FsbG93ZWRcIl0sW1sxMTU1OSwxMTU1OV0sXCJ2YWxpZFwiXSxbWzExNTYwLDExNTY0XSxcImRpc2FsbG93ZWRcIl0sW1sxMTU2NSwxMTU2NV0sXCJ2YWxpZFwiXSxbWzExNTY2LDExNTY3XSxcImRpc2FsbG93ZWRcIl0sW1sxMTU2OCwxMTYyMV0sXCJ2YWxpZFwiXSxbWzExNjIyLDExNjIzXSxcInZhbGlkXCJdLFtbMTE2MjQsMTE2MzBdLFwiZGlzYWxsb3dlZFwiXSxbWzExNjMxLDExNjMxXSxcIm1hcHBlZFwiLFsxMTYxN11dLFtbMTE2MzIsMTE2MzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExNjMzLDExNjQ2XSxcImRpc2FsbG93ZWRcIl0sW1sxMTY0NywxMTY0N10sXCJ2YWxpZFwiXSxbWzExNjQ4LDExNjcwXSxcInZhbGlkXCJdLFtbMTE2NzEsMTE2NzldLFwiZGlzYWxsb3dlZFwiXSxbWzExNjgwLDExNjg2XSxcInZhbGlkXCJdLFtbMTE2ODcsMTE2ODddLFwiZGlzYWxsb3dlZFwiXSxbWzExNjg4LDExNjk0XSxcInZhbGlkXCJdLFtbMTE2OTUsMTE2OTVdLFwiZGlzYWxsb3dlZFwiXSxbWzExNjk2LDExNzAyXSxcInZhbGlkXCJdLFtbMTE3MDMsMTE3MDNdLFwiZGlzYWxsb3dlZFwiXSxbWzExNzA0LDExNzEwXSxcInZhbGlkXCJdLFtbMTE3MTEsMTE3MTFdLFwiZGlzYWxsb3dlZFwiXSxbWzExNzEyLDExNzE4XSxcInZhbGlkXCJdLFtbMTE3MTksMTE3MTldLFwiZGlzYWxsb3dlZFwiXSxbWzExNzIwLDExNzI2XSxcInZhbGlkXCJdLFtbMTE3MjcsMTE3MjddLFwiZGlzYWxsb3dlZFwiXSxbWzExNzI4LDExNzM0XSxcInZhbGlkXCJdLFtbMTE3MzUsMTE3MzVdLFwiZGlzYWxsb3dlZFwiXSxbWzExNzM2LDExNzQyXSxcInZhbGlkXCJdLFtbMTE3NDMsMTE3NDNdLFwiZGlzYWxsb3dlZFwiXSxbWzExNzQ0LDExNzc1XSxcInZhbGlkXCJdLFtbMTE3NzYsMTE3OTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExODAwLDExODAzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTgwNCwxMTgwNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE4MDYsMTE4MjJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExODIzLDExODIzXSxcInZhbGlkXCJdLFtbMTE4MjQsMTE4MjRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExODI1LDExODI1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTgyNiwxMTgzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE4MzYsMTE4NDJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExODQzLDExOTAzXSxcImRpc2FsbG93ZWRcIl0sW1sxMTkwNCwxMTkyOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE5MzAsMTE5MzBdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTMxLDExOTM0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkzNSwxMTkzNV0sXCJtYXBwZWRcIixbMjc1OTddXSxbWzExOTM2LDEyMDE4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjAxOSwxMjAxOV0sXCJtYXBwZWRcIixbNDA4NjNdXSxbWzEyMDIwLDEyMDMxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjAzMiwxMjAzMl0sXCJtYXBwZWRcIixbMTk5NjhdXSxbWzEyMDMzLDEyMDMzXSxcIm1hcHBlZFwiLFsyMDAwOF1dLFtbMTIwMzQsMTIwMzRdLFwibWFwcGVkXCIsWzIwMDIyXV0sW1sxMjAzNSwxMjAzNV0sXCJtYXBwZWRcIixbMjAwMzFdXSxbWzEyMDM2LDEyMDM2XSxcIm1hcHBlZFwiLFsyMDA1N11dLFtbMTIwMzcsMTIwMzddLFwibWFwcGVkXCIsWzIwMTAxXV0sW1sxMjAzOCwxMjAzOF0sXCJtYXBwZWRcIixbMjAxMDhdXSxbWzEyMDM5LDEyMDM5XSxcIm1hcHBlZFwiLFsyMDEyOF1dLFtbMTIwNDAsMTIwNDBdLFwibWFwcGVkXCIsWzIwMTU0XV0sW1sxMjA0MSwxMjA0MV0sXCJtYXBwZWRcIixbMjA3OTldXSxbWzEyMDQyLDEyMDQyXSxcIm1hcHBlZFwiLFsyMDgzN11dLFtbMTIwNDMsMTIwNDNdLFwibWFwcGVkXCIsWzIwODQzXV0sW1sxMjA0NCwxMjA0NF0sXCJtYXBwZWRcIixbMjA4NjZdXSxbWzEyMDQ1LDEyMDQ1XSxcIm1hcHBlZFwiLFsyMDg4Nl1dLFtbMTIwNDYsMTIwNDZdLFwibWFwcGVkXCIsWzIwOTA3XV0sW1sxMjA0NywxMjA0N10sXCJtYXBwZWRcIixbMjA5NjBdXSxbWzEyMDQ4LDEyMDQ4XSxcIm1hcHBlZFwiLFsyMDk4MV1dLFtbMTIwNDksMTIwNDldLFwibWFwcGVkXCIsWzIwOTkyXV0sW1sxMjA1MCwxMjA1MF0sXCJtYXBwZWRcIixbMjExNDddXSxbWzEyMDUxLDEyMDUxXSxcIm1hcHBlZFwiLFsyMTI0MV1dLFtbMTIwNTIsMTIwNTJdLFwibWFwcGVkXCIsWzIxMjY5XV0sW1sxMjA1MywxMjA1M10sXCJtYXBwZWRcIixbMjEyNzRdXSxbWzEyMDU0LDEyMDU0XSxcIm1hcHBlZFwiLFsyMTMwNF1dLFtbMTIwNTUsMTIwNTVdLFwibWFwcGVkXCIsWzIxMzEzXV0sW1sxMjA1NiwxMjA1Nl0sXCJtYXBwZWRcIixbMjEzNDBdXSxbWzEyMDU3LDEyMDU3XSxcIm1hcHBlZFwiLFsyMTM1M11dLFtbMTIwNTgsMTIwNThdLFwibWFwcGVkXCIsWzIxMzc4XV0sW1sxMjA1OSwxMjA1OV0sXCJtYXBwZWRcIixbMjE0MzBdXSxbWzEyMDYwLDEyMDYwXSxcIm1hcHBlZFwiLFsyMTQ0OF1dLFtbMTIwNjEsMTIwNjFdLFwibWFwcGVkXCIsWzIxNDc1XV0sW1sxMjA2MiwxMjA2Ml0sXCJtYXBwZWRcIixbMjIyMzFdXSxbWzEyMDYzLDEyMDYzXSxcIm1hcHBlZFwiLFsyMjMwM11dLFtbMTIwNjQsMTIwNjRdLFwibWFwcGVkXCIsWzIyNzYzXV0sW1sxMjA2NSwxMjA2NV0sXCJtYXBwZWRcIixbMjI3ODZdXSxbWzEyMDY2LDEyMDY2XSxcIm1hcHBlZFwiLFsyMjc5NF1dLFtbMTIwNjcsMTIwNjddLFwibWFwcGVkXCIsWzIyODA1XV0sW1sxMjA2OCwxMjA2OF0sXCJtYXBwZWRcIixbMjI4MjNdXSxbWzEyMDY5LDEyMDY5XSxcIm1hcHBlZFwiLFsyMjg5OV1dLFtbMTIwNzAsMTIwNzBdLFwibWFwcGVkXCIsWzIzMzc2XV0sW1sxMjA3MSwxMjA3MV0sXCJtYXBwZWRcIixbMjM0MjRdXSxbWzEyMDcyLDEyMDcyXSxcIm1hcHBlZFwiLFsyMzU0NF1dLFtbMTIwNzMsMTIwNzNdLFwibWFwcGVkXCIsWzIzNTY3XV0sW1sxMjA3NCwxMjA3NF0sXCJtYXBwZWRcIixbMjM1ODZdXSxbWzEyMDc1LDEyMDc1XSxcIm1hcHBlZFwiLFsyMzYwOF1dLFtbMTIwNzYsMTIwNzZdLFwibWFwcGVkXCIsWzIzNjYyXV0sW1sxMjA3NywxMjA3N10sXCJtYXBwZWRcIixbMjM2NjVdXSxbWzEyMDc4LDEyMDc4XSxcIm1hcHBlZFwiLFsyNDAyN11dLFtbMTIwNzksMTIwNzldLFwibWFwcGVkXCIsWzI0MDM3XV0sW1sxMjA4MCwxMjA4MF0sXCJtYXBwZWRcIixbMjQwNDldXSxbWzEyMDgxLDEyMDgxXSxcIm1hcHBlZFwiLFsyNDA2Ml1dLFtbMTIwODIsMTIwODJdLFwibWFwcGVkXCIsWzI0MTc4XV0sW1sxMjA4MywxMjA4M10sXCJtYXBwZWRcIixbMjQxODZdXSxbWzEyMDg0LDEyMDg0XSxcIm1hcHBlZFwiLFsyNDE5MV1dLFtbMTIwODUsMTIwODVdLFwibWFwcGVkXCIsWzI0MzA4XV0sW1sxMjA4NiwxMjA4Nl0sXCJtYXBwZWRcIixbMjQzMThdXSxbWzEyMDg3LDEyMDg3XSxcIm1hcHBlZFwiLFsyNDMzMV1dLFtbMTIwODgsMTIwODhdLFwibWFwcGVkXCIsWzI0MzM5XV0sW1sxMjA4OSwxMjA4OV0sXCJtYXBwZWRcIixbMjQ0MDBdXSxbWzEyMDkwLDEyMDkwXSxcIm1hcHBlZFwiLFsyNDQxN11dLFtbMTIwOTEsMTIwOTFdLFwibWFwcGVkXCIsWzI0NDM1XV0sW1sxMjA5MiwxMjA5Ml0sXCJtYXBwZWRcIixbMjQ1MTVdXSxbWzEyMDkzLDEyMDkzXSxcIm1hcHBlZFwiLFsyNTA5Nl1dLFtbMTIwOTQsMTIwOTRdLFwibWFwcGVkXCIsWzI1MTQyXV0sW1sxMjA5NSwxMjA5NV0sXCJtYXBwZWRcIixbMjUxNjNdXSxbWzEyMDk2LDEyMDk2XSxcIm1hcHBlZFwiLFsyNTkwM11dLFtbMTIwOTcsMTIwOTddLFwibWFwcGVkXCIsWzI1OTA4XV0sW1sxMjA5OCwxMjA5OF0sXCJtYXBwZWRcIixbMjU5OTFdXSxbWzEyMDk5LDEyMDk5XSxcIm1hcHBlZFwiLFsyNjAwN11dLFtbMTIxMDAsMTIxMDBdLFwibWFwcGVkXCIsWzI2MDIwXV0sW1sxMjEwMSwxMjEwMV0sXCJtYXBwZWRcIixbMjYwNDFdXSxbWzEyMTAyLDEyMTAyXSxcIm1hcHBlZFwiLFsyNjA4MF1dLFtbMTIxMDMsMTIxMDNdLFwibWFwcGVkXCIsWzI2MDg1XV0sW1sxMjEwNCwxMjEwNF0sXCJtYXBwZWRcIixbMjYzNTJdXSxbWzEyMTA1LDEyMTA1XSxcIm1hcHBlZFwiLFsyNjM3Nl1dLFtbMTIxMDYsMTIxMDZdLFwibWFwcGVkXCIsWzI2NDA4XV0sW1sxMjEwNywxMjEwN10sXCJtYXBwZWRcIixbMjc0MjRdXSxbWzEyMTA4LDEyMTA4XSxcIm1hcHBlZFwiLFsyNzQ5MF1dLFtbMTIxMDksMTIxMDldLFwibWFwcGVkXCIsWzI3NTEzXV0sW1sxMjExMCwxMjExMF0sXCJtYXBwZWRcIixbMjc1NzFdXSxbWzEyMTExLDEyMTExXSxcIm1hcHBlZFwiLFsyNzU5NV1dLFtbMTIxMTIsMTIxMTJdLFwibWFwcGVkXCIsWzI3NjA0XV0sW1sxMjExMywxMjExM10sXCJtYXBwZWRcIixbMjc2MTFdXSxbWzEyMTE0LDEyMTE0XSxcIm1hcHBlZFwiLFsyNzY2M11dLFtbMTIxMTUsMTIxMTVdLFwibWFwcGVkXCIsWzI3NjY4XV0sW1sxMjExNiwxMjExNl0sXCJtYXBwZWRcIixbMjc3MDBdXSxbWzEyMTE3LDEyMTE3XSxcIm1hcHBlZFwiLFsyODc3OV1dLFtbMTIxMTgsMTIxMThdLFwibWFwcGVkXCIsWzI5MjI2XV0sW1sxMjExOSwxMjExOV0sXCJtYXBwZWRcIixbMjkyMzhdXSxbWzEyMTIwLDEyMTIwXSxcIm1hcHBlZFwiLFsyOTI0M11dLFtbMTIxMjEsMTIxMjFdLFwibWFwcGVkXCIsWzI5MjQ3XV0sW1sxMjEyMiwxMjEyMl0sXCJtYXBwZWRcIixbMjkyNTVdXSxbWzEyMTIzLDEyMTIzXSxcIm1hcHBlZFwiLFsyOTI3M11dLFtbMTIxMjQsMTIxMjRdLFwibWFwcGVkXCIsWzI5Mjc1XV0sW1sxMjEyNSwxMjEyNV0sXCJtYXBwZWRcIixbMjkzNTZdXSxbWzEyMTI2LDEyMTI2XSxcIm1hcHBlZFwiLFsyOTU3Ml1dLFtbMTIxMjcsMTIxMjddLFwibWFwcGVkXCIsWzI5NTc3XV0sW1sxMjEyOCwxMjEyOF0sXCJtYXBwZWRcIixbMjk5MTZdXSxbWzEyMTI5LDEyMTI5XSxcIm1hcHBlZFwiLFsyOTkyNl1dLFtbMTIxMzAsMTIxMzBdLFwibWFwcGVkXCIsWzI5OTc2XV0sW1sxMjEzMSwxMjEzMV0sXCJtYXBwZWRcIixbMjk5ODNdXSxbWzEyMTMyLDEyMTMyXSxcIm1hcHBlZFwiLFsyOTk5Ml1dLFtbMTIxMzMsMTIxMzNdLFwibWFwcGVkXCIsWzMwMDAwXV0sW1sxMjEzNCwxMjEzNF0sXCJtYXBwZWRcIixbMzAwOTFdXSxbWzEyMTM1LDEyMTM1XSxcIm1hcHBlZFwiLFszMDA5OF1dLFtbMTIxMzYsMTIxMzZdLFwibWFwcGVkXCIsWzMwMzI2XV0sW1sxMjEzNywxMjEzN10sXCJtYXBwZWRcIixbMzAzMzNdXSxbWzEyMTM4LDEyMTM4XSxcIm1hcHBlZFwiLFszMDM4Ml1dLFtbMTIxMzksMTIxMzldLFwibWFwcGVkXCIsWzMwMzk5XV0sW1sxMjE0MCwxMjE0MF0sXCJtYXBwZWRcIixbMzA0NDZdXSxbWzEyMTQxLDEyMTQxXSxcIm1hcHBlZFwiLFszMDY4M11dLFtbMTIxNDIsMTIxNDJdLFwibWFwcGVkXCIsWzMwNjkwXV0sW1sxMjE0MywxMjE0M10sXCJtYXBwZWRcIixbMzA3MDddXSxbWzEyMTQ0LDEyMTQ0XSxcIm1hcHBlZFwiLFszMTAzNF1dLFtbMTIxNDUsMTIxNDVdLFwibWFwcGVkXCIsWzMxMTYwXV0sW1sxMjE0NiwxMjE0Nl0sXCJtYXBwZWRcIixbMzExNjZdXSxbWzEyMTQ3LDEyMTQ3XSxcIm1hcHBlZFwiLFszMTM0OF1dLFtbMTIxNDgsMTIxNDhdLFwibWFwcGVkXCIsWzMxNDM1XV0sW1sxMjE0OSwxMjE0OV0sXCJtYXBwZWRcIixbMzE0ODFdXSxbWzEyMTUwLDEyMTUwXSxcIm1hcHBlZFwiLFszMTg1OV1dLFtbMTIxNTEsMTIxNTFdLFwibWFwcGVkXCIsWzMxOTkyXV0sW1sxMjE1MiwxMjE1Ml0sXCJtYXBwZWRcIixbMzI1NjZdXSxbWzEyMTUzLDEyMTUzXSxcIm1hcHBlZFwiLFszMjU5M11dLFtbMTIxNTQsMTIxNTRdLFwibWFwcGVkXCIsWzMyNjUwXV0sW1sxMjE1NSwxMjE1NV0sXCJtYXBwZWRcIixbMzI3MDFdXSxbWzEyMTU2LDEyMTU2XSxcIm1hcHBlZFwiLFszMjc2OV1dLFtbMTIxNTcsMTIxNTddLFwibWFwcGVkXCIsWzMyNzgwXV0sW1sxMjE1OCwxMjE1OF0sXCJtYXBwZWRcIixbMzI3ODZdXSxbWzEyMTU5LDEyMTU5XSxcIm1hcHBlZFwiLFszMjgxOV1dLFtbMTIxNjAsMTIxNjBdLFwibWFwcGVkXCIsWzMyODk1XV0sW1sxMjE2MSwxMjE2MV0sXCJtYXBwZWRcIixbMzI5MDVdXSxbWzEyMTYyLDEyMTYyXSxcIm1hcHBlZFwiLFszMzI1MV1dLFtbMTIxNjMsMTIxNjNdLFwibWFwcGVkXCIsWzMzMjU4XV0sW1sxMjE2NCwxMjE2NF0sXCJtYXBwZWRcIixbMzMyNjddXSxbWzEyMTY1LDEyMTY1XSxcIm1hcHBlZFwiLFszMzI3Nl1dLFtbMTIxNjYsMTIxNjZdLFwibWFwcGVkXCIsWzMzMjkyXV0sW1sxMjE2NywxMjE2N10sXCJtYXBwZWRcIixbMzMzMDddXSxbWzEyMTY4LDEyMTY4XSxcIm1hcHBlZFwiLFszMzMxMV1dLFtbMTIxNjksMTIxNjldLFwibWFwcGVkXCIsWzMzMzkwXV0sW1sxMjE3MCwxMjE3MF0sXCJtYXBwZWRcIixbMzMzOTRdXSxbWzEyMTcxLDEyMTcxXSxcIm1hcHBlZFwiLFszMzQwMF1dLFtbMTIxNzIsMTIxNzJdLFwibWFwcGVkXCIsWzM0MzgxXV0sW1sxMjE3MywxMjE3M10sXCJtYXBwZWRcIixbMzQ0MTFdXSxbWzEyMTc0LDEyMTc0XSxcIm1hcHBlZFwiLFszNDg4MF1dLFtbMTIxNzUsMTIxNzVdLFwibWFwcGVkXCIsWzM0ODkyXV0sW1sxMjE3NiwxMjE3Nl0sXCJtYXBwZWRcIixbMzQ5MTVdXSxbWzEyMTc3LDEyMTc3XSxcIm1hcHBlZFwiLFszNTE5OF1dLFtbMTIxNzgsMTIxNzhdLFwibWFwcGVkXCIsWzM1MjExXV0sW1sxMjE3OSwxMjE3OV0sXCJtYXBwZWRcIixbMzUyODJdXSxbWzEyMTgwLDEyMTgwXSxcIm1hcHBlZFwiLFszNTMyOF1dLFtbMTIxODEsMTIxODFdLFwibWFwcGVkXCIsWzM1ODk1XV0sW1sxMjE4MiwxMjE4Ml0sXCJtYXBwZWRcIixbMzU5MTBdXSxbWzEyMTgzLDEyMTgzXSxcIm1hcHBlZFwiLFszNTkyNV1dLFtbMTIxODQsMTIxODRdLFwibWFwcGVkXCIsWzM1OTYwXV0sW1sxMjE4NSwxMjE4NV0sXCJtYXBwZWRcIixbMzU5OTddXSxbWzEyMTg2LDEyMTg2XSxcIm1hcHBlZFwiLFszNjE5Nl1dLFtbMTIxODcsMTIxODddLFwibWFwcGVkXCIsWzM2MjA4XV0sW1sxMjE4OCwxMjE4OF0sXCJtYXBwZWRcIixbMzYyNzVdXSxbWzEyMTg5LDEyMTg5XSxcIm1hcHBlZFwiLFszNjUyM11dLFtbMTIxOTAsMTIxOTBdLFwibWFwcGVkXCIsWzM2NTU0XV0sW1sxMjE5MSwxMjE5MV0sXCJtYXBwZWRcIixbMzY3NjNdXSxbWzEyMTkyLDEyMTkyXSxcIm1hcHBlZFwiLFszNjc4NF1dLFtbMTIxOTMsMTIxOTNdLFwibWFwcGVkXCIsWzM2Nzg5XV0sW1sxMjE5NCwxMjE5NF0sXCJtYXBwZWRcIixbMzcwMDldXSxbWzEyMTk1LDEyMTk1XSxcIm1hcHBlZFwiLFszNzE5M11dLFtbMTIxOTYsMTIxOTZdLFwibWFwcGVkXCIsWzM3MzE4XV0sW1sxMjE5NywxMjE5N10sXCJtYXBwZWRcIixbMzczMjRdXSxbWzEyMTk4LDEyMTk4XSxcIm1hcHBlZFwiLFszNzMyOV1dLFtbMTIxOTksMTIxOTldLFwibWFwcGVkXCIsWzM4MjYzXV0sW1sxMjIwMCwxMjIwMF0sXCJtYXBwZWRcIixbMzgyNzJdXSxbWzEyMjAxLDEyMjAxXSxcIm1hcHBlZFwiLFszODQyOF1dLFtbMTIyMDIsMTIyMDJdLFwibWFwcGVkXCIsWzM4NTgyXV0sW1sxMjIwMywxMjIwM10sXCJtYXBwZWRcIixbMzg1ODVdXSxbWzEyMjA0LDEyMjA0XSxcIm1hcHBlZFwiLFszODYzMl1dLFtbMTIyMDUsMTIyMDVdLFwibWFwcGVkXCIsWzM4NzM3XV0sW1sxMjIwNiwxMjIwNl0sXCJtYXBwZWRcIixbMzg3NTBdXSxbWzEyMjA3LDEyMjA3XSxcIm1hcHBlZFwiLFszODc1NF1dLFtbMTIyMDgsMTIyMDhdLFwibWFwcGVkXCIsWzM4NzYxXV0sW1sxMjIwOSwxMjIwOV0sXCJtYXBwZWRcIixbMzg4NTldXSxbWzEyMjEwLDEyMjEwXSxcIm1hcHBlZFwiLFszODg5M11dLFtbMTIyMTEsMTIyMTFdLFwibWFwcGVkXCIsWzM4ODk5XV0sW1sxMjIxMiwxMjIxMl0sXCJtYXBwZWRcIixbMzg5MTNdXSxbWzEyMjEzLDEyMjEzXSxcIm1hcHBlZFwiLFszOTA4MF1dLFtbMTIyMTQsMTIyMTRdLFwibWFwcGVkXCIsWzM5MTMxXV0sW1sxMjIxNSwxMjIxNV0sXCJtYXBwZWRcIixbMzkxMzVdXSxbWzEyMjE2LDEyMjE2XSxcIm1hcHBlZFwiLFszOTMxOF1dLFtbMTIyMTcsMTIyMTddLFwibWFwcGVkXCIsWzM5MzIxXV0sW1sxMjIxOCwxMjIxOF0sXCJtYXBwZWRcIixbMzkzNDBdXSxbWzEyMjE5LDEyMjE5XSxcIm1hcHBlZFwiLFszOTU5Ml1dLFtbMTIyMjAsMTIyMjBdLFwibWFwcGVkXCIsWzM5NjQwXV0sW1sxMjIyMSwxMjIyMV0sXCJtYXBwZWRcIixbMzk2NDddXSxbWzEyMjIyLDEyMjIyXSxcIm1hcHBlZFwiLFszOTcxN11dLFtbMTIyMjMsMTIyMjNdLFwibWFwcGVkXCIsWzM5NzI3XV0sW1sxMjIyNCwxMjIyNF0sXCJtYXBwZWRcIixbMzk3MzBdXSxbWzEyMjI1LDEyMjI1XSxcIm1hcHBlZFwiLFszOTc0MF1dLFtbMTIyMjYsMTIyMjZdLFwibWFwcGVkXCIsWzM5NzcwXV0sW1sxMjIyNywxMjIyN10sXCJtYXBwZWRcIixbNDAxNjVdXSxbWzEyMjI4LDEyMjI4XSxcIm1hcHBlZFwiLFs0MDU2NV1dLFtbMTIyMjksMTIyMjldLFwibWFwcGVkXCIsWzQwNTc1XV0sW1sxMjIzMCwxMjIzMF0sXCJtYXBwZWRcIixbNDA2MTNdXSxbWzEyMjMxLDEyMjMxXSxcIm1hcHBlZFwiLFs0MDYzNV1dLFtbMTIyMzIsMTIyMzJdLFwibWFwcGVkXCIsWzQwNjQzXV0sW1sxMjIzMywxMjIzM10sXCJtYXBwZWRcIixbNDA2NTNdXSxbWzEyMjM0LDEyMjM0XSxcIm1hcHBlZFwiLFs0MDY1N11dLFtbMTIyMzUsMTIyMzVdLFwibWFwcGVkXCIsWzQwNjk3XV0sW1sxMjIzNiwxMjIzNl0sXCJtYXBwZWRcIixbNDA3MDFdXSxbWzEyMjM3LDEyMjM3XSxcIm1hcHBlZFwiLFs0MDcxOF1dLFtbMTIyMzgsMTIyMzhdLFwibWFwcGVkXCIsWzQwNzIzXV0sW1sxMjIzOSwxMjIzOV0sXCJtYXBwZWRcIixbNDA3MzZdXSxbWzEyMjQwLDEyMjQwXSxcIm1hcHBlZFwiLFs0MDc2M11dLFtbMTIyNDEsMTIyNDFdLFwibWFwcGVkXCIsWzQwNzc4XV0sW1sxMjI0MiwxMjI0Ml0sXCJtYXBwZWRcIixbNDA3ODZdXSxbWzEyMjQzLDEyMjQzXSxcIm1hcHBlZFwiLFs0MDg0NV1dLFtbMTIyNDQsMTIyNDRdLFwibWFwcGVkXCIsWzQwODYwXV0sW1sxMjI0NSwxMjI0NV0sXCJtYXBwZWRcIixbNDA4NjRdXSxbWzEyMjQ2LDEyMjcxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjI3MiwxMjI4M10sXCJkaXNhbGxvd2VkXCJdLFtbMTIyODQsMTIyODddLFwiZGlzYWxsb3dlZFwiXSxbWzEyMjg4LDEyMjg4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzJdXSxbWzEyMjg5LDEyMjg5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjI5MCwxMjI5MF0sXCJtYXBwZWRcIixbNDZdXSxbWzEyMjkxLDEyMjkyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjI5MywxMjI5NV0sXCJ2YWxpZFwiXSxbWzEyMjk2LDEyMzI5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjMzMCwxMjMzM10sXCJ2YWxpZFwiXSxbWzEyMzM0LDEyMzQxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjM0MiwxMjM0Ml0sXCJtYXBwZWRcIixbMTIzMDZdXSxbWzEyMzQzLDEyMzQzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjM0NCwxMjM0NF0sXCJtYXBwZWRcIixbMjEzMTNdXSxbWzEyMzQ1LDEyMzQ1XSxcIm1hcHBlZFwiLFsyMTMxNl1dLFtbMTIzNDYsMTIzNDZdLFwibWFwcGVkXCIsWzIxMzE3XV0sW1sxMjM0NywxMjM0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTIzNDgsMTIzNDhdLFwidmFsaWRcIl0sW1sxMjM0OSwxMjM0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTIzNTAsMTIzNTBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMzUxLDEyMzUxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjM1MiwxMjM1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMTIzNTMsMTI0MzZdLFwidmFsaWRcIl0sW1sxMjQzNywxMjQzOF0sXCJ2YWxpZFwiXSxbWzEyNDM5LDEyNDQwXSxcImRpc2FsbG93ZWRcIl0sW1sxMjQ0MSwxMjQ0Ml0sXCJ2YWxpZFwiXSxbWzEyNDQzLDEyNDQzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTI0NDFdXSxbWzEyNDQ0LDEyNDQ0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTI0NDJdXSxbWzEyNDQ1LDEyNDQ2XSxcInZhbGlkXCJdLFtbMTI0NDcsMTI0NDddLFwibWFwcGVkXCIsWzEyNDI0LDEyNDI2XV0sW1sxMjQ0OCwxMjQ0OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI0NDksMTI1NDJdLFwidmFsaWRcIl0sW1sxMjU0MywxMjU0M10sXCJtYXBwZWRcIixbMTI0NjcsMTI0ODhdXSxbWzEyNTQ0LDEyNTQ4XSxcImRpc2FsbG93ZWRcIl0sW1sxMjU0OSwxMjU4OF0sXCJ2YWxpZFwiXSxbWzEyNTg5LDEyNTg5XSxcInZhbGlkXCJdLFtbMTI1OTAsMTI1OTJdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNTkzLDEyNTkzXSxcIm1hcHBlZFwiLFs0MzUyXV0sW1sxMjU5NCwxMjU5NF0sXCJtYXBwZWRcIixbNDM1M11dLFtbMTI1OTUsMTI1OTVdLFwibWFwcGVkXCIsWzQ1MjJdXSxbWzEyNTk2LDEyNTk2XSxcIm1hcHBlZFwiLFs0MzU0XV0sW1sxMjU5NywxMjU5N10sXCJtYXBwZWRcIixbNDUyNF1dLFtbMTI1OTgsMTI1OThdLFwibWFwcGVkXCIsWzQ1MjVdXSxbWzEyNTk5LDEyNTk5XSxcIm1hcHBlZFwiLFs0MzU1XV0sW1sxMjYwMCwxMjYwMF0sXCJtYXBwZWRcIixbNDM1Nl1dLFtbMTI2MDEsMTI2MDFdLFwibWFwcGVkXCIsWzQzNTddXSxbWzEyNjAyLDEyNjAyXSxcIm1hcHBlZFwiLFs0NTI4XV0sW1sxMjYwMywxMjYwM10sXCJtYXBwZWRcIixbNDUyOV1dLFtbMTI2MDQsMTI2MDRdLFwibWFwcGVkXCIsWzQ1MzBdXSxbWzEyNjA1LDEyNjA1XSxcIm1hcHBlZFwiLFs0NTMxXV0sW1sxMjYwNiwxMjYwNl0sXCJtYXBwZWRcIixbNDUzMl1dLFtbMTI2MDcsMTI2MDddLFwibWFwcGVkXCIsWzQ1MzNdXSxbWzEyNjA4LDEyNjA4XSxcIm1hcHBlZFwiLFs0Mzc4XV0sW1sxMjYwOSwxMjYwOV0sXCJtYXBwZWRcIixbNDM1OF1dLFtbMTI2MTAsMTI2MTBdLFwibWFwcGVkXCIsWzQzNTldXSxbWzEyNjExLDEyNjExXSxcIm1hcHBlZFwiLFs0MzYwXV0sW1sxMjYxMiwxMjYxMl0sXCJtYXBwZWRcIixbNDM4NV1dLFtbMTI2MTMsMTI2MTNdLFwibWFwcGVkXCIsWzQzNjFdXSxbWzEyNjE0LDEyNjE0XSxcIm1hcHBlZFwiLFs0MzYyXV0sW1sxMjYxNSwxMjYxNV0sXCJtYXBwZWRcIixbNDM2M11dLFtbMTI2MTYsMTI2MTZdLFwibWFwcGVkXCIsWzQzNjRdXSxbWzEyNjE3LDEyNjE3XSxcIm1hcHBlZFwiLFs0MzY1XV0sW1sxMjYxOCwxMjYxOF0sXCJtYXBwZWRcIixbNDM2Nl1dLFtbMTI2MTksMTI2MTldLFwibWFwcGVkXCIsWzQzNjddXSxbWzEyNjIwLDEyNjIwXSxcIm1hcHBlZFwiLFs0MzY4XV0sW1sxMjYyMSwxMjYyMV0sXCJtYXBwZWRcIixbNDM2OV1dLFtbMTI2MjIsMTI2MjJdLFwibWFwcGVkXCIsWzQzNzBdXSxbWzEyNjIzLDEyNjIzXSxcIm1hcHBlZFwiLFs0NDQ5XV0sW1sxMjYyNCwxMjYyNF0sXCJtYXBwZWRcIixbNDQ1MF1dLFtbMTI2MjUsMTI2MjVdLFwibWFwcGVkXCIsWzQ0NTFdXSxbWzEyNjI2LDEyNjI2XSxcIm1hcHBlZFwiLFs0NDUyXV0sW1sxMjYyNywxMjYyN10sXCJtYXBwZWRcIixbNDQ1M11dLFtbMTI2MjgsMTI2MjhdLFwibWFwcGVkXCIsWzQ0NTRdXSxbWzEyNjI5LDEyNjI5XSxcIm1hcHBlZFwiLFs0NDU1XV0sW1sxMjYzMCwxMjYzMF0sXCJtYXBwZWRcIixbNDQ1Nl1dLFtbMTI2MzEsMTI2MzFdLFwibWFwcGVkXCIsWzQ0NTddXSxbWzEyNjMyLDEyNjMyXSxcIm1hcHBlZFwiLFs0NDU4XV0sW1sxMjYzMywxMjYzM10sXCJtYXBwZWRcIixbNDQ1OV1dLFtbMTI2MzQsMTI2MzRdLFwibWFwcGVkXCIsWzQ0NjBdXSxbWzEyNjM1LDEyNjM1XSxcIm1hcHBlZFwiLFs0NDYxXV0sW1sxMjYzNiwxMjYzNl0sXCJtYXBwZWRcIixbNDQ2Ml1dLFtbMTI2MzcsMTI2MzddLFwibWFwcGVkXCIsWzQ0NjNdXSxbWzEyNjM4LDEyNjM4XSxcIm1hcHBlZFwiLFs0NDY0XV0sW1sxMjYzOSwxMjYzOV0sXCJtYXBwZWRcIixbNDQ2NV1dLFtbMTI2NDAsMTI2NDBdLFwibWFwcGVkXCIsWzQ0NjZdXSxbWzEyNjQxLDEyNjQxXSxcIm1hcHBlZFwiLFs0NDY3XV0sW1sxMjY0MiwxMjY0Ml0sXCJtYXBwZWRcIixbNDQ2OF1dLFtbMTI2NDMsMTI2NDNdLFwibWFwcGVkXCIsWzQ0NjldXSxbWzEyNjQ0LDEyNjQ0XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY0NSwxMjY0NV0sXCJtYXBwZWRcIixbNDM3Ml1dLFtbMTI2NDYsMTI2NDZdLFwibWFwcGVkXCIsWzQzNzNdXSxbWzEyNjQ3LDEyNjQ3XSxcIm1hcHBlZFwiLFs0NTUxXV0sW1sxMjY0OCwxMjY0OF0sXCJtYXBwZWRcIixbNDU1Ml1dLFtbMTI2NDksMTI2NDldLFwibWFwcGVkXCIsWzQ1NTZdXSxbWzEyNjUwLDEyNjUwXSxcIm1hcHBlZFwiLFs0NTU4XV0sW1sxMjY1MSwxMjY1MV0sXCJtYXBwZWRcIixbNDU2M11dLFtbMTI2NTIsMTI2NTJdLFwibWFwcGVkXCIsWzQ1NjddXSxbWzEyNjUzLDEyNjUzXSxcIm1hcHBlZFwiLFs0NTY5XV0sW1sxMjY1NCwxMjY1NF0sXCJtYXBwZWRcIixbNDM4MF1dLFtbMTI2NTUsMTI2NTVdLFwibWFwcGVkXCIsWzQ1NzNdXSxbWzEyNjU2LDEyNjU2XSxcIm1hcHBlZFwiLFs0NTc1XV0sW1sxMjY1NywxMjY1N10sXCJtYXBwZWRcIixbNDM4MV1dLFtbMTI2NTgsMTI2NThdLFwibWFwcGVkXCIsWzQzODJdXSxbWzEyNjU5LDEyNjU5XSxcIm1hcHBlZFwiLFs0Mzg0XV0sW1sxMjY2MCwxMjY2MF0sXCJtYXBwZWRcIixbNDM4Nl1dLFtbMTI2NjEsMTI2NjFdLFwibWFwcGVkXCIsWzQzODddXSxbWzEyNjYyLDEyNjYyXSxcIm1hcHBlZFwiLFs0MzkxXV0sW1sxMjY2MywxMjY2M10sXCJtYXBwZWRcIixbNDM5M11dLFtbMTI2NjQsMTI2NjRdLFwibWFwcGVkXCIsWzQzOTVdXSxbWzEyNjY1LDEyNjY1XSxcIm1hcHBlZFwiLFs0Mzk2XV0sW1sxMjY2NiwxMjY2Nl0sXCJtYXBwZWRcIixbNDM5N11dLFtbMTI2NjcsMTI2NjddLFwibWFwcGVkXCIsWzQzOThdXSxbWzEyNjY4LDEyNjY4XSxcIm1hcHBlZFwiLFs0Mzk5XV0sW1sxMjY2OSwxMjY2OV0sXCJtYXBwZWRcIixbNDQwMl1dLFtbMTI2NzAsMTI2NzBdLFwibWFwcGVkXCIsWzQ0MDZdXSxbWzEyNjcxLDEyNjcxXSxcIm1hcHBlZFwiLFs0NDE2XV0sW1sxMjY3MiwxMjY3Ml0sXCJtYXBwZWRcIixbNDQyM11dLFtbMTI2NzMsMTI2NzNdLFwibWFwcGVkXCIsWzQ0MjhdXSxbWzEyNjc0LDEyNjc0XSxcIm1hcHBlZFwiLFs0NTkzXV0sW1sxMjY3NSwxMjY3NV0sXCJtYXBwZWRcIixbNDU5NF1dLFtbMTI2NzYsMTI2NzZdLFwibWFwcGVkXCIsWzQ0MzldXSxbWzEyNjc3LDEyNjc3XSxcIm1hcHBlZFwiLFs0NDQwXV0sW1sxMjY3OCwxMjY3OF0sXCJtYXBwZWRcIixbNDQ0MV1dLFtbMTI2NzksMTI2NzldLFwibWFwcGVkXCIsWzQ0ODRdXSxbWzEyNjgwLDEyNjgwXSxcIm1hcHBlZFwiLFs0NDg1XV0sW1sxMjY4MSwxMjY4MV0sXCJtYXBwZWRcIixbNDQ4OF1dLFtbMTI2ODIsMTI2ODJdLFwibWFwcGVkXCIsWzQ0OTddXSxbWzEyNjgzLDEyNjgzXSxcIm1hcHBlZFwiLFs0NDk4XV0sW1sxMjY4NCwxMjY4NF0sXCJtYXBwZWRcIixbNDUwMF1dLFtbMTI2ODUsMTI2ODVdLFwibWFwcGVkXCIsWzQ1MTBdXSxbWzEyNjg2LDEyNjg2XSxcIm1hcHBlZFwiLFs0NTEzXV0sW1sxMjY4NywxMjY4N10sXCJkaXNhbGxvd2VkXCJdLFtbMTI2ODgsMTI2ODldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNjkwLDEyNjkwXSxcIm1hcHBlZFwiLFsxOTk2OF1dLFtbMTI2OTEsMTI2OTFdLFwibWFwcGVkXCIsWzIwMTA4XV0sW1sxMjY5MiwxMjY5Ml0sXCJtYXBwZWRcIixbMTk5NzddXSxbWzEyNjkzLDEyNjkzXSxcIm1hcHBlZFwiLFsyMjIzNV1dLFtbMTI2OTQsMTI2OTRdLFwibWFwcGVkXCIsWzE5OTc4XV0sW1sxMjY5NSwxMjY5NV0sXCJtYXBwZWRcIixbMjAwMTNdXSxbWzEyNjk2LDEyNjk2XSxcIm1hcHBlZFwiLFsxOTk3OV1dLFtbMTI2OTcsMTI2OTddLFwibWFwcGVkXCIsWzMwMDAyXV0sW1sxMjY5OCwxMjY5OF0sXCJtYXBwZWRcIixbMjAwNTddXSxbWzEyNjk5LDEyNjk5XSxcIm1hcHBlZFwiLFsxOTk5M11dLFtbMTI3MDAsMTI3MDBdLFwibWFwcGVkXCIsWzE5OTY5XV0sW1sxMjcwMSwxMjcwMV0sXCJtYXBwZWRcIixbMjI4MjVdXSxbWzEyNzAyLDEyNzAyXSxcIm1hcHBlZFwiLFsyMjMyMF1dLFtbMTI3MDMsMTI3MDNdLFwibWFwcGVkXCIsWzIwMTU0XV0sW1sxMjcwNCwxMjcyN10sXCJ2YWxpZFwiXSxbWzEyNzI4LDEyNzMwXSxcInZhbGlkXCJdLFtbMTI3MzEsMTI3MzVdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNzM2LDEyNzUxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc1MiwxMjc3MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3NzIsMTI3ODNdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNzg0LDEyNzk5XSxcInZhbGlkXCJdLFtbMTI4MDAsMTI4MDBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzUyLDQxXV0sW1sxMjgwMSwxMjgwMV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNTQsNDFdXSxbWzEyODAyLDEyODAyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM1NSw0MV1dLFtbMTI4MDMsMTI4MDNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzU3LDQxXV0sW1sxMjgwNCwxMjgwNF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNTgsNDFdXSxbWzEyODA1LDEyODA1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM1OSw0MV1dLFtbMTI4MDYsMTI4MDZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzYxLDQxXV0sW1sxMjgwNywxMjgwN10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNjMsNDFdXSxbWzEyODA4LDEyODA4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM2NCw0MV1dLFtbMTI4MDksMTI4MDldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzY2LDQxXV0sW1sxMjgxMCwxMjgxMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNjcsNDFdXSxbWzEyODExLDEyODExXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM2OCw0MV1dLFtbMTI4MTIsMTI4MTJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzY5LDQxXV0sW1sxMjgxMywxMjgxM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNzAsNDFdXSxbWzEyODE0LDEyODE0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDQwMzIsNDFdXSxbWzEyODE1LDEyODE1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDUyMDgsNDFdXSxbWzEyODE2LDEyODE2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDU3OTYsNDFdXSxbWzEyODE3LDEyODE3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDY5NzIsNDFdXSxbWzEyODE4LDEyODE4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDc1NjAsNDFdXSxbWzEyODE5LDEyODE5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDgxNDgsNDFdXSxbWzEyODIwLDEyODIwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDkzMjQsNDFdXSxbWzEyODIxLDEyODIxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTA1MDAsNDFdXSxbWzEyODIyLDEyODIyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTEwODgsNDFdXSxbWzEyODIzLDEyODIzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTIyNjQsNDFdXSxbWzEyODI0LDEyODI0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTI4NTIsNDFdXSxbWzEyODI1LDEyODI1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTM0NDAsNDFdXSxbWzEyODI2LDEyODI2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTQwMjgsNDFdXSxbWzEyODI3LDEyODI3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTQ2MTYsNDFdXSxbWzEyODI4LDEyODI4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTE0NTIsNDFdXSxbWzEyODI5LDEyODI5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTA3MjQsNTEyMDQsNDFdXSxbWzEyODMwLDEyODMwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTA3MjQsNTQ5ODAsNDFdXSxbWzEyODMxLDEyODMxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjgzMiwxMjgzMl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDE5OTY4LDQxXV0sW1sxMjgzMywxMjgzM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMTA4LDQxXV0sW1sxMjgzNCwxMjgzNF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDE5OTc3LDQxXV0sW1sxMjgzNSwxMjgzNV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIyMjM1LDQxXV0sW1sxMjgzNiwxMjgzNl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMTE2LDQxXV0sW1sxMjgzNywxMjgzN10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwODQ1LDQxXV0sW1sxMjgzOCwxMjgzOF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDE5OTcxLDQxXV0sW1sxMjgzOSwxMjgzOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwODQzLDQxXV0sW1sxMjg0MCwxMjg0MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMDYxLDQxXV0sW1sxMjg0MSwxMjg0MV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIxMzEzLDQxXV0sW1sxMjg0MiwxMjg0Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI2Mzc2LDQxXV0sW1sxMjg0MywxMjg0M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI4Nzc5LDQxXV0sW1sxMjg0NCwxMjg0NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI3NzAwLDQxXV0sW1sxMjg0NSwxMjg0NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI2NDA4LDQxXV0sW1sxMjg0NiwxMjg0Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDM3MzI5LDQxXV0sW1sxMjg0NywxMjg0N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIyMzAzLDQxXV0sW1sxMjg0OCwxMjg0OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI2MDg1LDQxXV0sW1sxMjg0OSwxMjg0OV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI2NjY2LDQxXV0sW1sxMjg1MCwxMjg1MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI2Mzc3LDQxXV0sW1sxMjg1MSwxMjg1MV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMxMDM4LDQxXV0sW1sxMjg1MiwxMjg1Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIxNTE3LDQxXV0sW1sxMjg1MywxMjg1M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDI5MzA1LDQxXV0sW1sxMjg1NCwxMjg1NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDM2MDAxLDQxXV0sW1sxMjg1NSwxMjg1NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMxMDY5LDQxXV0sW1sxMjg1NiwxMjg1Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIxMTcyLDQxXV0sW1sxMjg1NywxMjg1N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMTk1LDQxXV0sW1sxMjg1OCwxMjg1OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIxNjI4LDQxXV0sW1sxMjg1OSwxMjg1OV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIzMzk4LDQxXV0sW1sxMjg2MCwxMjg2MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMwNDM1LDQxXV0sW1sxMjg2MSwxMjg2MV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMjI1LDQxXV0sW1sxMjg2MiwxMjg2Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDM2MDM5LDQxXV0sW1sxMjg2MywxMjg2M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIxMzMyLDQxXV0sW1sxMjg2NCwxMjg2NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMxMDg1LDQxXV0sW1sxMjg2NSwxMjg2NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDIwMjQxLDQxXV0sW1sxMjg2NiwxMjg2Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMzMjU4LDQxXV0sW1sxMjg2NywxMjg2N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDMzMjY3LDQxXV0sW1sxMjg2OCwxMjg2OF0sXCJtYXBwZWRcIixbMjE4MzldXSxbWzEyODY5LDEyODY5XSxcIm1hcHBlZFwiLFsyNDE4OF1dLFtbMTI4NzAsMTI4NzBdLFwibWFwcGVkXCIsWzI1OTkxXV0sW1sxMjg3MSwxMjg3MV0sXCJtYXBwZWRcIixbMzE2MzFdXSxbWzEyODcyLDEyODc5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg4MCwxMjg4MF0sXCJtYXBwZWRcIixbMTEyLDExNiwxMDFdXSxbWzEyODgxLDEyODgxXSxcIm1hcHBlZFwiLFs1MCw0OV1dLFtbMTI4ODIsMTI4ODJdLFwibWFwcGVkXCIsWzUwLDUwXV0sW1sxMjg4MywxMjg4M10sXCJtYXBwZWRcIixbNTAsNTFdXSxbWzEyODg0LDEyODg0XSxcIm1hcHBlZFwiLFs1MCw1Ml1dLFtbMTI4ODUsMTI4ODVdLFwibWFwcGVkXCIsWzUwLDUzXV0sW1sxMjg4NiwxMjg4Nl0sXCJtYXBwZWRcIixbNTAsNTRdXSxbWzEyODg3LDEyODg3XSxcIm1hcHBlZFwiLFs1MCw1NV1dLFtbMTI4ODgsMTI4ODhdLFwibWFwcGVkXCIsWzUwLDU2XV0sW1sxMjg4OSwxMjg4OV0sXCJtYXBwZWRcIixbNTAsNTddXSxbWzEyODkwLDEyODkwXSxcIm1hcHBlZFwiLFs1MSw0OF1dLFtbMTI4OTEsMTI4OTFdLFwibWFwcGVkXCIsWzUxLDQ5XV0sW1sxMjg5MiwxMjg5Ml0sXCJtYXBwZWRcIixbNTEsNTBdXSxbWzEyODkzLDEyODkzXSxcIm1hcHBlZFwiLFs1MSw1MV1dLFtbMTI4OTQsMTI4OTRdLFwibWFwcGVkXCIsWzUxLDUyXV0sW1sxMjg5NSwxMjg5NV0sXCJtYXBwZWRcIixbNTEsNTNdXSxbWzEyODk2LDEyODk2XSxcIm1hcHBlZFwiLFs0MzUyXV0sW1sxMjg5NywxMjg5N10sXCJtYXBwZWRcIixbNDM1NF1dLFtbMTI4OTgsMTI4OThdLFwibWFwcGVkXCIsWzQzNTVdXSxbWzEyODk5LDEyODk5XSxcIm1hcHBlZFwiLFs0MzU3XV0sW1sxMjkwMCwxMjkwMF0sXCJtYXBwZWRcIixbNDM1OF1dLFtbMTI5MDEsMTI5MDFdLFwibWFwcGVkXCIsWzQzNTldXSxbWzEyOTAyLDEyOTAyXSxcIm1hcHBlZFwiLFs0MzYxXV0sW1sxMjkwMywxMjkwM10sXCJtYXBwZWRcIixbNDM2M11dLFtbMTI5MDQsMTI5MDRdLFwibWFwcGVkXCIsWzQzNjRdXSxbWzEyOTA1LDEyOTA1XSxcIm1hcHBlZFwiLFs0MzY2XV0sW1sxMjkwNiwxMjkwNl0sXCJtYXBwZWRcIixbNDM2N11dLFtbMTI5MDcsMTI5MDddLFwibWFwcGVkXCIsWzQzNjhdXSxbWzEyOTA4LDEyOTA4XSxcIm1hcHBlZFwiLFs0MzY5XV0sW1sxMjkwOSwxMjkwOV0sXCJtYXBwZWRcIixbNDM3MF1dLFtbMTI5MTAsMTI5MTBdLFwibWFwcGVkXCIsWzQ0MDMyXV0sW1sxMjkxMSwxMjkxMV0sXCJtYXBwZWRcIixbNDUyMDhdXSxbWzEyOTEyLDEyOTEyXSxcIm1hcHBlZFwiLFs0NTc5Nl1dLFtbMTI5MTMsMTI5MTNdLFwibWFwcGVkXCIsWzQ2OTcyXV0sW1sxMjkxNCwxMjkxNF0sXCJtYXBwZWRcIixbNDc1NjBdXSxbWzEyOTE1LDEyOTE1XSxcIm1hcHBlZFwiLFs0ODE0OF1dLFtbMTI5MTYsMTI5MTZdLFwibWFwcGVkXCIsWzQ5MzI0XV0sW1sxMjkxNywxMjkxN10sXCJtYXBwZWRcIixbNTA1MDBdXSxbWzEyOTE4LDEyOTE4XSxcIm1hcHBlZFwiLFs1MTA4OF1dLFtbMTI5MTksMTI5MTldLFwibWFwcGVkXCIsWzUyMjY0XV0sW1sxMjkyMCwxMjkyMF0sXCJtYXBwZWRcIixbNTI4NTJdXSxbWzEyOTIxLDEyOTIxXSxcIm1hcHBlZFwiLFs1MzQ0MF1dLFtbMTI5MjIsMTI5MjJdLFwibWFwcGVkXCIsWzU0MDI4XV0sW1sxMjkyMywxMjkyM10sXCJtYXBwZWRcIixbNTQ2MTZdXSxbWzEyOTI0LDEyOTI0XSxcIm1hcHBlZFwiLFs1MjI4MCw0NDI1Nl1dLFtbMTI5MjUsMTI5MjVdLFwibWFwcGVkXCIsWzUxNDUyLDUxMDMyXV0sW1sxMjkyNiwxMjkyNl0sXCJtYXBwZWRcIixbNTA4NjRdXSxbWzEyOTI3LDEyOTI3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjkyOCwxMjkyOF0sXCJtYXBwZWRcIixbMTk5NjhdXSxbWzEyOTI5LDEyOTI5XSxcIm1hcHBlZFwiLFsyMDEwOF1dLFtbMTI5MzAsMTI5MzBdLFwibWFwcGVkXCIsWzE5OTc3XV0sW1sxMjkzMSwxMjkzMV0sXCJtYXBwZWRcIixbMjIyMzVdXSxbWzEyOTMyLDEyOTMyXSxcIm1hcHBlZFwiLFsyMDExNl1dLFtbMTI5MzMsMTI5MzNdLFwibWFwcGVkXCIsWzIwODQ1XV0sW1sxMjkzNCwxMjkzNF0sXCJtYXBwZWRcIixbMTk5NzFdXSxbWzEyOTM1LDEyOTM1XSxcIm1hcHBlZFwiLFsyMDg0M11dLFtbMTI5MzYsMTI5MzZdLFwibWFwcGVkXCIsWzIwMDYxXV0sW1sxMjkzNywxMjkzN10sXCJtYXBwZWRcIixbMjEzMTNdXSxbWzEyOTM4LDEyOTM4XSxcIm1hcHBlZFwiLFsyNjM3Nl1dLFtbMTI5MzksMTI5MzldLFwibWFwcGVkXCIsWzI4Nzc5XV0sW1sxMjk0MCwxMjk0MF0sXCJtYXBwZWRcIixbMjc3MDBdXSxbWzEyOTQxLDEyOTQxXSxcIm1hcHBlZFwiLFsyNjQwOF1dLFtbMTI5NDIsMTI5NDJdLFwibWFwcGVkXCIsWzM3MzI5XV0sW1sxMjk0MywxMjk0M10sXCJtYXBwZWRcIixbMjIzMDNdXSxbWzEyOTQ0LDEyOTQ0XSxcIm1hcHBlZFwiLFsyNjA4NV1dLFtbMTI5NDUsMTI5NDVdLFwibWFwcGVkXCIsWzI2NjY2XV0sW1sxMjk0NiwxMjk0Nl0sXCJtYXBwZWRcIixbMjYzNzddXSxbWzEyOTQ3LDEyOTQ3XSxcIm1hcHBlZFwiLFszMTAzOF1dLFtbMTI5NDgsMTI5NDhdLFwibWFwcGVkXCIsWzIxNTE3XV0sW1sxMjk0OSwxMjk0OV0sXCJtYXBwZWRcIixbMjkzMDVdXSxbWzEyOTUwLDEyOTUwXSxcIm1hcHBlZFwiLFszNjAwMV1dLFtbMTI5NTEsMTI5NTFdLFwibWFwcGVkXCIsWzMxMDY5XV0sW1sxMjk1MiwxMjk1Ml0sXCJtYXBwZWRcIixbMjExNzJdXSxbWzEyOTUzLDEyOTUzXSxcIm1hcHBlZFwiLFszMTE5Ml1dLFtbMTI5NTQsMTI5NTRdLFwibWFwcGVkXCIsWzMwMDA3XV0sW1sxMjk1NSwxMjk1NV0sXCJtYXBwZWRcIixbMjI4OTldXSxbWzEyOTU2LDEyOTU2XSxcIm1hcHBlZFwiLFszNjk2OV1dLFtbMTI5NTcsMTI5NTddLFwibWFwcGVkXCIsWzIwNzc4XV0sW1sxMjk1OCwxMjk1OF0sXCJtYXBwZWRcIixbMjEzNjBdXSxbWzEyOTU5LDEyOTU5XSxcIm1hcHBlZFwiLFsyNzg4MF1dLFtbMTI5NjAsMTI5NjBdLFwibWFwcGVkXCIsWzM4OTE3XV0sW1sxMjk2MSwxMjk2MV0sXCJtYXBwZWRcIixbMjAyNDFdXSxbWzEyOTYyLDEyOTYyXSxcIm1hcHBlZFwiLFsyMDg4OV1dLFtbMTI5NjMsMTI5NjNdLFwibWFwcGVkXCIsWzI3NDkxXV0sW1sxMjk2NCwxMjk2NF0sXCJtYXBwZWRcIixbMTk5NzhdXSxbWzEyOTY1LDEyOTY1XSxcIm1hcHBlZFwiLFsyMDAxM11dLFtbMTI5NjYsMTI5NjZdLFwibWFwcGVkXCIsWzE5OTc5XV0sW1sxMjk2NywxMjk2N10sXCJtYXBwZWRcIixbMjQwMzhdXSxbWzEyOTY4LDEyOTY4XSxcIm1hcHBlZFwiLFsyMTQ5MV1dLFtbMTI5NjksMTI5NjldLFwibWFwcGVkXCIsWzIxMzA3XV0sW1sxMjk3MCwxMjk3MF0sXCJtYXBwZWRcIixbMjM0NDddXSxbWzEyOTcxLDEyOTcxXSxcIm1hcHBlZFwiLFsyMzM5OF1dLFtbMTI5NzIsMTI5NzJdLFwibWFwcGVkXCIsWzMwNDM1XV0sW1sxMjk3MywxMjk3M10sXCJtYXBwZWRcIixbMjAyMjVdXSxbWzEyOTc0LDEyOTc0XSxcIm1hcHBlZFwiLFszNjAzOV1dLFtbMTI5NzUsMTI5NzVdLFwibWFwcGVkXCIsWzIxMzMyXV0sW1sxMjk3NiwxMjk3Nl0sXCJtYXBwZWRcIixbMjI4MTJdXSxbWzEyOTc3LDEyOTc3XSxcIm1hcHBlZFwiLFs1MSw1NF1dLFtbMTI5NzgsMTI5NzhdLFwibWFwcGVkXCIsWzUxLDU1XV0sW1sxMjk3OSwxMjk3OV0sXCJtYXBwZWRcIixbNTEsNTZdXSxbWzEyOTgwLDEyOTgwXSxcIm1hcHBlZFwiLFs1MSw1N11dLFtbMTI5ODEsMTI5ODFdLFwibWFwcGVkXCIsWzUyLDQ4XV0sW1sxMjk4MiwxMjk4Ml0sXCJtYXBwZWRcIixbNTIsNDldXSxbWzEyOTgzLDEyOTgzXSxcIm1hcHBlZFwiLFs1Miw1MF1dLFtbMTI5ODQsMTI5ODRdLFwibWFwcGVkXCIsWzUyLDUxXV0sW1sxMjk4NSwxMjk4NV0sXCJtYXBwZWRcIixbNTIsNTJdXSxbWzEyOTg2LDEyOTg2XSxcIm1hcHBlZFwiLFs1Miw1M11dLFtbMTI5ODcsMTI5ODddLFwibWFwcGVkXCIsWzUyLDU0XV0sW1sxMjk4OCwxMjk4OF0sXCJtYXBwZWRcIixbNTIsNTVdXSxbWzEyOTg5LDEyOTg5XSxcIm1hcHBlZFwiLFs1Miw1Nl1dLFtbMTI5OTAsMTI5OTBdLFwibWFwcGVkXCIsWzUyLDU3XV0sW1sxMjk5MSwxMjk5MV0sXCJtYXBwZWRcIixbNTMsNDhdXSxbWzEyOTkyLDEyOTkyXSxcIm1hcHBlZFwiLFs0OSwyNjM3Nl1dLFtbMTI5OTMsMTI5OTNdLFwibWFwcGVkXCIsWzUwLDI2Mzc2XV0sW1sxMjk5NCwxMjk5NF0sXCJtYXBwZWRcIixbNTEsMjYzNzZdXSxbWzEyOTk1LDEyOTk1XSxcIm1hcHBlZFwiLFs1MiwyNjM3Nl1dLFtbMTI5OTYsMTI5OTZdLFwibWFwcGVkXCIsWzUzLDI2Mzc2XV0sW1sxMjk5NywxMjk5N10sXCJtYXBwZWRcIixbNTQsMjYzNzZdXSxbWzEyOTk4LDEyOTk4XSxcIm1hcHBlZFwiLFs1NSwyNjM3Nl1dLFtbMTI5OTksMTI5OTldLFwibWFwcGVkXCIsWzU2LDI2Mzc2XV0sW1sxMzAwMCwxMzAwMF0sXCJtYXBwZWRcIixbNTcsMjYzNzZdXSxbWzEzMDAxLDEzMDAxXSxcIm1hcHBlZFwiLFs0OSw0OCwyNjM3Nl1dLFtbMTMwMDIsMTMwMDJdLFwibWFwcGVkXCIsWzQ5LDQ5LDI2Mzc2XV0sW1sxMzAwMywxMzAwM10sXCJtYXBwZWRcIixbNDksNTAsMjYzNzZdXSxbWzEzMDA0LDEzMDA0XSxcIm1hcHBlZFwiLFsxMDQsMTAzXV0sW1sxMzAwNSwxMzAwNV0sXCJtYXBwZWRcIixbMTAxLDExNCwxMDNdXSxbWzEzMDA2LDEzMDA2XSxcIm1hcHBlZFwiLFsxMDEsMTE4XV0sW1sxMzAwNywxMzAwN10sXCJtYXBwZWRcIixbMTA4LDExNiwxMDBdXSxbWzEzMDA4LDEzMDA4XSxcIm1hcHBlZFwiLFsxMjQ1MF1dLFtbMTMwMDksMTMwMDldLFwibWFwcGVkXCIsWzEyNDUyXV0sW1sxMzAxMCwxMzAxMF0sXCJtYXBwZWRcIixbMTI0NTRdXSxbWzEzMDExLDEzMDExXSxcIm1hcHBlZFwiLFsxMjQ1Nl1dLFtbMTMwMTIsMTMwMTJdLFwibWFwcGVkXCIsWzEyNDU4XV0sW1sxMzAxMywxMzAxM10sXCJtYXBwZWRcIixbMTI0NTldXSxbWzEzMDE0LDEzMDE0XSxcIm1hcHBlZFwiLFsxMjQ2MV1dLFtbMTMwMTUsMTMwMTVdLFwibWFwcGVkXCIsWzEyNDYzXV0sW1sxMzAxNiwxMzAxNl0sXCJtYXBwZWRcIixbMTI0NjVdXSxbWzEzMDE3LDEzMDE3XSxcIm1hcHBlZFwiLFsxMjQ2N11dLFtbMTMwMTgsMTMwMThdLFwibWFwcGVkXCIsWzEyNDY5XV0sW1sxMzAxOSwxMzAxOV0sXCJtYXBwZWRcIixbMTI0NzFdXSxbWzEzMDIwLDEzMDIwXSxcIm1hcHBlZFwiLFsxMjQ3M11dLFtbMTMwMjEsMTMwMjFdLFwibWFwcGVkXCIsWzEyNDc1XV0sW1sxMzAyMiwxMzAyMl0sXCJtYXBwZWRcIixbMTI0NzddXSxbWzEzMDIzLDEzMDIzXSxcIm1hcHBlZFwiLFsxMjQ3OV1dLFtbMTMwMjQsMTMwMjRdLFwibWFwcGVkXCIsWzEyNDgxXV0sW1sxMzAyNSwxMzAyNV0sXCJtYXBwZWRcIixbMTI0ODRdXSxbWzEzMDI2LDEzMDI2XSxcIm1hcHBlZFwiLFsxMjQ4Nl1dLFtbMTMwMjcsMTMwMjddLFwibWFwcGVkXCIsWzEyNDg4XV0sW1sxMzAyOCwxMzAyOF0sXCJtYXBwZWRcIixbMTI0OTBdXSxbWzEzMDI5LDEzMDI5XSxcIm1hcHBlZFwiLFsxMjQ5MV1dLFtbMTMwMzAsMTMwMzBdLFwibWFwcGVkXCIsWzEyNDkyXV0sW1sxMzAzMSwxMzAzMV0sXCJtYXBwZWRcIixbMTI0OTNdXSxbWzEzMDMyLDEzMDMyXSxcIm1hcHBlZFwiLFsxMjQ5NF1dLFtbMTMwMzMsMTMwMzNdLFwibWFwcGVkXCIsWzEyNDk1XV0sW1sxMzAzNCwxMzAzNF0sXCJtYXBwZWRcIixbMTI0OThdXSxbWzEzMDM1LDEzMDM1XSxcIm1hcHBlZFwiLFsxMjUwMV1dLFtbMTMwMzYsMTMwMzZdLFwibWFwcGVkXCIsWzEyNTA0XV0sW1sxMzAzNywxMzAzN10sXCJtYXBwZWRcIixbMTI1MDddXSxbWzEzMDM4LDEzMDM4XSxcIm1hcHBlZFwiLFsxMjUxMF1dLFtbMTMwMzksMTMwMzldLFwibWFwcGVkXCIsWzEyNTExXV0sW1sxMzA0MCwxMzA0MF0sXCJtYXBwZWRcIixbMTI1MTJdXSxbWzEzMDQxLDEzMDQxXSxcIm1hcHBlZFwiLFsxMjUxM11dLFtbMTMwNDIsMTMwNDJdLFwibWFwcGVkXCIsWzEyNTE0XV0sW1sxMzA0MywxMzA0M10sXCJtYXBwZWRcIixbMTI1MTZdXSxbWzEzMDQ0LDEzMDQ0XSxcIm1hcHBlZFwiLFsxMjUxOF1dLFtbMTMwNDUsMTMwNDVdLFwibWFwcGVkXCIsWzEyNTIwXV0sW1sxMzA0NiwxMzA0Nl0sXCJtYXBwZWRcIixbMTI1MjFdXSxbWzEzMDQ3LDEzMDQ3XSxcIm1hcHBlZFwiLFsxMjUyMl1dLFtbMTMwNDgsMTMwNDhdLFwibWFwcGVkXCIsWzEyNTIzXV0sW1sxMzA0OSwxMzA0OV0sXCJtYXBwZWRcIixbMTI1MjRdXSxbWzEzMDUwLDEzMDUwXSxcIm1hcHBlZFwiLFsxMjUyNV1dLFtbMTMwNTEsMTMwNTFdLFwibWFwcGVkXCIsWzEyNTI3XV0sW1sxMzA1MiwxMzA1Ml0sXCJtYXBwZWRcIixbMTI1MjhdXSxbWzEzMDUzLDEzMDUzXSxcIm1hcHBlZFwiLFsxMjUyOV1dLFtbMTMwNTQsMTMwNTRdLFwibWFwcGVkXCIsWzEyNTMwXV0sW1sxMzA1NSwxMzA1NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTMwNTYsMTMwNTZdLFwibWFwcGVkXCIsWzEyNDUwLDEyNDk3LDEyNTQwLDEyNDg4XV0sW1sxMzA1NywxMzA1N10sXCJtYXBwZWRcIixbMTI0NTAsMTI1MjMsMTI1MDEsMTI0NDldXSxbWzEzMDU4LDEzMDU4XSxcIm1hcHBlZFwiLFsxMjQ1MCwxMjUzMSwxMjUwNiwxMjQ1MF1dLFtbMTMwNTksMTMwNTldLFwibWFwcGVkXCIsWzEyNDUwLDEyNTQwLDEyNTIzXV0sW1sxMzA2MCwxMzA2MF0sXCJtYXBwZWRcIixbMTI0NTIsMTI0OTEsMTI1MzEsMTI0NjRdXSxbWzEzMDYxLDEzMDYxXSxcIm1hcHBlZFwiLFsxMjQ1MiwxMjUzMSwxMjQ4MV1dLFtbMTMwNjIsMTMwNjJdLFwibWFwcGVkXCIsWzEyNDU0LDEyNDU3LDEyNTMxXV0sW1sxMzA2MywxMzA2M10sXCJtYXBwZWRcIixbMTI0NTYsMTI0NzMsMTI0NjMsMTI1NDAsMTI0ODldXSxbWzEzMDY0LDEzMDY0XSxcIm1hcHBlZFwiLFsxMjQ1NiwxMjU0MCwxMjQ1OSwxMjU0MF1dLFtbMTMwNjUsMTMwNjVdLFwibWFwcGVkXCIsWzEyNDU4LDEyNTMxLDEyNDczXV0sW1sxMzA2NiwxMzA2Nl0sXCJtYXBwZWRcIixbMTI0NTgsMTI1NDAsMTI1MTJdXSxbWzEzMDY3LDEzMDY3XSxcIm1hcHBlZFwiLFsxMjQ1OSwxMjQ1MiwxMjUyMl1dLFtbMTMwNjgsMTMwNjhdLFwibWFwcGVkXCIsWzEyNDU5LDEyNTIxLDEyNDgzLDEyNDg4XV0sW1sxMzA2OSwxMzA2OV0sXCJtYXBwZWRcIixbMTI0NTksMTI1MjUsMTI1MjIsMTI1NDBdXSxbWzEzMDcwLDEzMDcwXSxcIm1hcHBlZFwiLFsxMjQ2MCwxMjUyNSwxMjUzMV1dLFtbMTMwNzEsMTMwNzFdLFwibWFwcGVkXCIsWzEyNDYwLDEyNTMxLDEyNTEwXV0sW1sxMzA3MiwxMzA3Ml0sXCJtYXBwZWRcIixbMTI0NjIsMTI0NjBdXSxbWzEzMDczLDEzMDczXSxcIm1hcHBlZFwiLFsxMjQ2MiwxMjQ5MSwxMjU0MF1dLFtbMTMwNzQsMTMwNzRdLFwibWFwcGVkXCIsWzEyNDYxLDEyNTE3LDEyNTIyLDEyNTQwXV0sW1sxMzA3NSwxMzA3NV0sXCJtYXBwZWRcIixbMTI0NjIsMTI1MjMsMTI0ODAsMTI1NDBdXSxbWzEzMDc2LDEzMDc2XSxcIm1hcHBlZFwiLFsxMjQ2MSwxMjUyNV1dLFtbMTMwNzcsMTMwNzddLFwibWFwcGVkXCIsWzEyNDYxLDEyNTI1LDEyNDY0LDEyNTIxLDEyNTEyXV0sW1sxMzA3OCwxMzA3OF0sXCJtYXBwZWRcIixbMTI0NjEsMTI1MjUsMTI1MTMsMTI1NDAsMTI0ODgsMTI1MjNdXSxbWzEzMDc5LDEzMDc5XSxcIm1hcHBlZFwiLFsxMjQ2MSwxMjUyNSwxMjUyNywxMjQ4MywxMjQ4OF1dLFtbMTMwODAsMTMwODBdLFwibWFwcGVkXCIsWzEyNDY0LDEyNTIxLDEyNTEyXV0sW1sxMzA4MSwxMzA4MV0sXCJtYXBwZWRcIixbMTI0NjQsMTI1MjEsMTI1MTIsMTI0ODgsMTI1MzFdXSxbWzEzMDgyLDEzMDgyXSxcIm1hcHBlZFwiLFsxMjQ2MywxMjUyMywxMjQ3NiwxMjQ1MiwxMjUyNV1dLFtbMTMwODMsMTMwODNdLFwibWFwcGVkXCIsWzEyNDYzLDEyNTI1LDEyNTQwLDEyNDkzXV0sW1sxMzA4NCwxMzA4NF0sXCJtYXBwZWRcIixbMTI0NjUsMTI1NDAsMTI0NzNdXSxbWzEzMDg1LDEzMDg1XSxcIm1hcHBlZFwiLFsxMjQ2NywxMjUyMywxMjQ5MF1dLFtbMTMwODYsMTMwODZdLFwibWFwcGVkXCIsWzEyNDY3LDEyNTQwLDEyNTA5XV0sW1sxMzA4NywxMzA4N10sXCJtYXBwZWRcIixbMTI0NjksMTI0NTIsMTI0NjMsMTI1MjNdXSxbWzEzMDg4LDEzMDg4XSxcIm1hcHBlZFwiLFsxMjQ2OSwxMjUzMSwxMjQ4MSwxMjU0MCwxMjUxMl1dLFtbMTMwODksMTMwODldLFwibWFwcGVkXCIsWzEyNDcxLDEyNTIyLDEyNTMxLDEyNDY0XV0sW1sxMzA5MCwxMzA5MF0sXCJtYXBwZWRcIixbMTI0NzUsMTI1MzEsMTI0ODFdXSxbWzEzMDkxLDEzMDkxXSxcIm1hcHBlZFwiLFsxMjQ3NSwxMjUzMSwxMjQ4OF1dLFtbMTMwOTIsMTMwOTJdLFwibWFwcGVkXCIsWzEyNDgwLDEyNTQwLDEyNDczXV0sW1sxMzA5MywxMzA5M10sXCJtYXBwZWRcIixbMTI0ODcsMTI0NzFdXSxbWzEzMDk0LDEzMDk0XSxcIm1hcHBlZFwiLFsxMjQ4OSwxMjUyM11dLFtbMTMwOTUsMTMwOTVdLFwibWFwcGVkXCIsWzEyNDg4LDEyNTMxXV0sW1sxMzA5NiwxMzA5Nl0sXCJtYXBwZWRcIixbMTI0OTAsMTI0OTRdXSxbWzEzMDk3LDEzMDk3XSxcIm1hcHBlZFwiLFsxMjQ5NCwxMjQ4MywxMjQ4OF1dLFtbMTMwOTgsMTMwOThdLFwibWFwcGVkXCIsWzEyNDk1LDEyNDUyLDEyNDg0XV0sW1sxMzA5OSwxMzA5OV0sXCJtYXBwZWRcIixbMTI0OTcsMTI1NDAsMTI0NzUsMTI1MzEsMTI0ODhdXSxbWzEzMTAwLDEzMTAwXSxcIm1hcHBlZFwiLFsxMjQ5NywxMjU0MCwxMjQ4NF1dLFtbMTMxMDEsMTMxMDFdLFwibWFwcGVkXCIsWzEyNDk2LDEyNTQwLDEyNTI0LDEyNTIzXV0sW1sxMzEwMiwxMzEwMl0sXCJtYXBwZWRcIixbMTI1MDAsMTI0NTAsMTI0NzMsMTI0ODgsMTI1MjNdXSxbWzEzMTAzLDEzMTAzXSxcIm1hcHBlZFwiLFsxMjUwMCwxMjQ2MywxMjUyM11dLFtbMTMxMDQsMTMxMDRdLFwibWFwcGVkXCIsWzEyNTAwLDEyNDY3XV0sW1sxMzEwNSwxMzEwNV0sXCJtYXBwZWRcIixbMTI0OTksMTI1MjNdXSxbWzEzMTA2LDEzMTA2XSxcIm1hcHBlZFwiLFsxMjUwMSwxMjQ0OSwxMjUyMSwxMjQ4MywxMjQ4OV1dLFtbMTMxMDcsMTMxMDddLFwibWFwcGVkXCIsWzEyNTAxLDEyNDUxLDEyNTQwLDEyNDg4XV0sW1sxMzEwOCwxMzEwOF0sXCJtYXBwZWRcIixbMTI1MDIsMTI0ODMsMTI0NzEsMTI0NTUsMTI1MjNdXSxbWzEzMTA5LDEzMTA5XSxcIm1hcHBlZFwiLFsxMjUwMSwxMjUyMSwxMjUzMV1dLFtbMTMxMTAsMTMxMTBdLFwibWFwcGVkXCIsWzEyNTA0LDEyNDYzLDEyNDc5LDEyNTQwLDEyNTIzXV0sW1sxMzExMSwxMzExMV0sXCJtYXBwZWRcIixbMTI1MDYsMTI0NzddXSxbWzEzMTEyLDEzMTEyXSxcIm1hcHBlZFwiLFsxMjUwNiwxMjQ5MSwxMjQ5OF1dLFtbMTMxMTMsMTMxMTNdLFwibWFwcGVkXCIsWzEyNTA0LDEyNTIzLDEyNDg0XV0sW1sxMzExNCwxMzExNF0sXCJtYXBwZWRcIixbMTI1MDYsMTI1MzEsMTI0NzNdXSxbWzEzMTE1LDEzMTE1XSxcIm1hcHBlZFwiLFsxMjUwNiwxMjU0MCwxMjQ3Ml1dLFtbMTMxMTYsMTMxMTZdLFwibWFwcGVkXCIsWzEyNTA1LDEyNTQwLDEyNDc5XV0sW1sxMzExNywxMzExN10sXCJtYXBwZWRcIixbMTI1MDksMTI0NTIsMTI1MzEsMTI0ODhdXSxbWzEzMTE4LDEzMTE4XSxcIm1hcHBlZFwiLFsxMjUwOCwxMjUyMywxMjQ4OF1dLFtbMTMxMTksMTMxMTldLFwibWFwcGVkXCIsWzEyNTA3LDEyNTMxXV0sW1sxMzEyMCwxMzEyMF0sXCJtYXBwZWRcIixbMTI1MDksMTI1MzEsMTI0ODldXSxbWzEzMTIxLDEzMTIxXSxcIm1hcHBlZFwiLFsxMjUwNywxMjU0MCwxMjUyM11dLFtbMTMxMjIsMTMxMjJdLFwibWFwcGVkXCIsWzEyNTA3LDEyNTQwLDEyNTMxXV0sW1sxMzEyMywxMzEyM10sXCJtYXBwZWRcIixbMTI1MTAsMTI0NTIsMTI0NjMsMTI1MjVdXSxbWzEzMTI0LDEzMTI0XSxcIm1hcHBlZFwiLFsxMjUxMCwxMjQ1MiwxMjUyM11dLFtbMTMxMjUsMTMxMjVdLFwibWFwcGVkXCIsWzEyNTEwLDEyNDgzLDEyNDk1XV0sW1sxMzEyNiwxMzEyNl0sXCJtYXBwZWRcIixbMTI1MTAsMTI1MjMsMTI0NjNdXSxbWzEzMTI3LDEzMTI3XSxcIm1hcHBlZFwiLFsxMjUxMCwxMjUzMSwxMjQ3MSwxMjUxOSwxMjUzMV1dLFtbMTMxMjgsMTMxMjhdLFwibWFwcGVkXCIsWzEyNTExLDEyNDYzLDEyNTI1LDEyNTMxXV0sW1sxMzEyOSwxMzEyOV0sXCJtYXBwZWRcIixbMTI1MTEsMTI1MjJdXSxbWzEzMTMwLDEzMTMwXSxcIm1hcHBlZFwiLFsxMjUxMSwxMjUyMiwxMjQ5NiwxMjU0MCwxMjUyM11dLFtbMTMxMzEsMTMxMzFdLFwibWFwcGVkXCIsWzEyNTEzLDEyNDYwXV0sW1sxMzEzMiwxMzEzMl0sXCJtYXBwZWRcIixbMTI1MTMsMTI0NjAsMTI0ODgsMTI1MzFdXSxbWzEzMTMzLDEzMTMzXSxcIm1hcHBlZFwiLFsxMjUxMywxMjU0MCwxMjQ4OCwxMjUyM11dLFtbMTMxMzQsMTMxMzRdLFwibWFwcGVkXCIsWzEyNTE2LDEyNTQwLDEyNDg5XV0sW1sxMzEzNSwxMzEzNV0sXCJtYXBwZWRcIixbMTI1MTYsMTI1NDAsMTI1MjNdXSxbWzEzMTM2LDEzMTM2XSxcIm1hcHBlZFwiLFsxMjUxOCwxMjQ1MCwxMjUzMV1dLFtbMTMxMzcsMTMxMzddLFwibWFwcGVkXCIsWzEyNTIyLDEyNDgzLDEyNDg4LDEyNTIzXV0sW1sxMzEzOCwxMzEzOF0sXCJtYXBwZWRcIixbMTI1MjIsMTI1MjFdXSxbWzEzMTM5LDEzMTM5XSxcIm1hcHBlZFwiLFsxMjUyMywxMjUwMCwxMjU0MF1dLFtbMTMxNDAsMTMxNDBdLFwibWFwcGVkXCIsWzEyNTIzLDEyNTQwLDEyNTAyLDEyNTIzXV0sW1sxMzE0MSwxMzE0MV0sXCJtYXBwZWRcIixbMTI1MjQsMTI1MTJdXSxbWzEzMTQyLDEzMTQyXSxcIm1hcHBlZFwiLFsxMjUyNCwxMjUzMSwxMjQ4OCwxMjQ2NiwxMjUzMV1dLFtbMTMxNDMsMTMxNDNdLFwibWFwcGVkXCIsWzEyNTI3LDEyNDgzLDEyNDg4XV0sW1sxMzE0NCwxMzE0NF0sXCJtYXBwZWRcIixbNDgsMjg4NTddXSxbWzEzMTQ1LDEzMTQ1XSxcIm1hcHBlZFwiLFs0OSwyODg1N11dLFtbMTMxNDYsMTMxNDZdLFwibWFwcGVkXCIsWzUwLDI4ODU3XV0sW1sxMzE0NywxMzE0N10sXCJtYXBwZWRcIixbNTEsMjg4NTddXSxbWzEzMTQ4LDEzMTQ4XSxcIm1hcHBlZFwiLFs1MiwyODg1N11dLFtbMTMxNDksMTMxNDldLFwibWFwcGVkXCIsWzUzLDI4ODU3XV0sW1sxMzE1MCwxMzE1MF0sXCJtYXBwZWRcIixbNTQsMjg4NTddXSxbWzEzMTUxLDEzMTUxXSxcIm1hcHBlZFwiLFs1NSwyODg1N11dLFtbMTMxNTIsMTMxNTJdLFwibWFwcGVkXCIsWzU2LDI4ODU3XV0sW1sxMzE1MywxMzE1M10sXCJtYXBwZWRcIixbNTcsMjg4NTddXSxbWzEzMTU0LDEzMTU0XSxcIm1hcHBlZFwiLFs0OSw0OCwyODg1N11dLFtbMTMxNTUsMTMxNTVdLFwibWFwcGVkXCIsWzQ5LDQ5LDI4ODU3XV0sW1sxMzE1NiwxMzE1Nl0sXCJtYXBwZWRcIixbNDksNTAsMjg4NTddXSxbWzEzMTU3LDEzMTU3XSxcIm1hcHBlZFwiLFs0OSw1MSwyODg1N11dLFtbMTMxNTgsMTMxNThdLFwibWFwcGVkXCIsWzQ5LDUyLDI4ODU3XV0sW1sxMzE1OSwxMzE1OV0sXCJtYXBwZWRcIixbNDksNTMsMjg4NTddXSxbWzEzMTYwLDEzMTYwXSxcIm1hcHBlZFwiLFs0OSw1NCwyODg1N11dLFtbMTMxNjEsMTMxNjFdLFwibWFwcGVkXCIsWzQ5LDU1LDI4ODU3XV0sW1sxMzE2MiwxMzE2Ml0sXCJtYXBwZWRcIixbNDksNTYsMjg4NTddXSxbWzEzMTYzLDEzMTYzXSxcIm1hcHBlZFwiLFs0OSw1NywyODg1N11dLFtbMTMxNjQsMTMxNjRdLFwibWFwcGVkXCIsWzUwLDQ4LDI4ODU3XV0sW1sxMzE2NSwxMzE2NV0sXCJtYXBwZWRcIixbNTAsNDksMjg4NTddXSxbWzEzMTY2LDEzMTY2XSxcIm1hcHBlZFwiLFs1MCw1MCwyODg1N11dLFtbMTMxNjcsMTMxNjddLFwibWFwcGVkXCIsWzUwLDUxLDI4ODU3XV0sW1sxMzE2OCwxMzE2OF0sXCJtYXBwZWRcIixbNTAsNTIsMjg4NTddXSxbWzEzMTY5LDEzMTY5XSxcIm1hcHBlZFwiLFsxMDQsMTEyLDk3XV0sW1sxMzE3MCwxMzE3MF0sXCJtYXBwZWRcIixbMTAwLDk3XV0sW1sxMzE3MSwxMzE3MV0sXCJtYXBwZWRcIixbOTcsMTE3XV0sW1sxMzE3MiwxMzE3Ml0sXCJtYXBwZWRcIixbOTgsOTcsMTE0XV0sW1sxMzE3MywxMzE3M10sXCJtYXBwZWRcIixbMTExLDExOF1dLFtbMTMxNzQsMTMxNzRdLFwibWFwcGVkXCIsWzExMiw5OV1dLFtbMTMxNzUsMTMxNzVdLFwibWFwcGVkXCIsWzEwMCwxMDldXSxbWzEzMTc2LDEzMTc2XSxcIm1hcHBlZFwiLFsxMDAsMTA5LDUwXV0sW1sxMzE3NywxMzE3N10sXCJtYXBwZWRcIixbMTAwLDEwOSw1MV1dLFtbMTMxNzgsMTMxNzhdLFwibWFwcGVkXCIsWzEwNSwxMTddXSxbWzEzMTc5LDEzMTc5XSxcIm1hcHBlZFwiLFsyNDE3OSwyNTEwNF1dLFtbMTMxODAsMTMxODBdLFwibWFwcGVkXCIsWzI2MTU3LDIxNjQ0XV0sW1sxMzE4MSwxMzE4MV0sXCJtYXBwZWRcIixbMjI4MjMsMjc0OTFdXSxbWzEzMTgyLDEzMTgyXSxcIm1hcHBlZFwiLFsyNjEyNiwyNzgzNV1dLFtbMTMxODMsMTMxODNdLFwibWFwcGVkXCIsWzI2NjY2LDI0MzM1LDIwMjUwLDMxMDM4XV0sW1sxMzE4NCwxMzE4NF0sXCJtYXBwZWRcIixbMTEyLDk3XV0sW1sxMzE4NSwxMzE4NV0sXCJtYXBwZWRcIixbMTEwLDk3XV0sW1sxMzE4NiwxMzE4Nl0sXCJtYXBwZWRcIixbOTU2LDk3XV0sW1sxMzE4NywxMzE4N10sXCJtYXBwZWRcIixbMTA5LDk3XV0sW1sxMzE4OCwxMzE4OF0sXCJtYXBwZWRcIixbMTA3LDk3XV0sW1sxMzE4OSwxMzE4OV0sXCJtYXBwZWRcIixbMTA3LDk4XV0sW1sxMzE5MCwxMzE5MF0sXCJtYXBwZWRcIixbMTA5LDk4XV0sW1sxMzE5MSwxMzE5MV0sXCJtYXBwZWRcIixbMTAzLDk4XV0sW1sxMzE5MiwxMzE5Ml0sXCJtYXBwZWRcIixbOTksOTcsMTA4XV0sW1sxMzE5MywxMzE5M10sXCJtYXBwZWRcIixbMTA3LDk5LDk3LDEwOF1dLFtbMTMxOTQsMTMxOTRdLFwibWFwcGVkXCIsWzExMiwxMDJdXSxbWzEzMTk1LDEzMTk1XSxcIm1hcHBlZFwiLFsxMTAsMTAyXV0sW1sxMzE5NiwxMzE5Nl0sXCJtYXBwZWRcIixbOTU2LDEwMl1dLFtbMTMxOTcsMTMxOTddLFwibWFwcGVkXCIsWzk1NiwxMDNdXSxbWzEzMTk4LDEzMTk4XSxcIm1hcHBlZFwiLFsxMDksMTAzXV0sW1sxMzE5OSwxMzE5OV0sXCJtYXBwZWRcIixbMTA3LDEwM11dLFtbMTMyMDAsMTMyMDBdLFwibWFwcGVkXCIsWzEwNCwxMjJdXSxbWzEzMjAxLDEzMjAxXSxcIm1hcHBlZFwiLFsxMDcsMTA0LDEyMl1dLFtbMTMyMDIsMTMyMDJdLFwibWFwcGVkXCIsWzEwOSwxMDQsMTIyXV0sW1sxMzIwMywxMzIwM10sXCJtYXBwZWRcIixbMTAzLDEwNCwxMjJdXSxbWzEzMjA0LDEzMjA0XSxcIm1hcHBlZFwiLFsxMTYsMTA0LDEyMl1dLFtbMTMyMDUsMTMyMDVdLFwibWFwcGVkXCIsWzk1NiwxMDhdXSxbWzEzMjA2LDEzMjA2XSxcIm1hcHBlZFwiLFsxMDksMTA4XV0sW1sxMzIwNywxMzIwN10sXCJtYXBwZWRcIixbMTAwLDEwOF1dLFtbMTMyMDgsMTMyMDhdLFwibWFwcGVkXCIsWzEwNywxMDhdXSxbWzEzMjA5LDEzMjA5XSxcIm1hcHBlZFwiLFsxMDIsMTA5XV0sW1sxMzIxMCwxMzIxMF0sXCJtYXBwZWRcIixbMTEwLDEwOV1dLFtbMTMyMTEsMTMyMTFdLFwibWFwcGVkXCIsWzk1NiwxMDldXSxbWzEzMjEyLDEzMjEyXSxcIm1hcHBlZFwiLFsxMDksMTA5XV0sW1sxMzIxMywxMzIxM10sXCJtYXBwZWRcIixbOTksMTA5XV0sW1sxMzIxNCwxMzIxNF0sXCJtYXBwZWRcIixbMTA3LDEwOV1dLFtbMTMyMTUsMTMyMTVdLFwibWFwcGVkXCIsWzEwOSwxMDksNTBdXSxbWzEzMjE2LDEzMjE2XSxcIm1hcHBlZFwiLFs5OSwxMDksNTBdXSxbWzEzMjE3LDEzMjE3XSxcIm1hcHBlZFwiLFsxMDksNTBdXSxbWzEzMjE4LDEzMjE4XSxcIm1hcHBlZFwiLFsxMDcsMTA5LDUwXV0sW1sxMzIxOSwxMzIxOV0sXCJtYXBwZWRcIixbMTA5LDEwOSw1MV1dLFtbMTMyMjAsMTMyMjBdLFwibWFwcGVkXCIsWzk5LDEwOSw1MV1dLFtbMTMyMjEsMTMyMjFdLFwibWFwcGVkXCIsWzEwOSw1MV1dLFtbMTMyMjIsMTMyMjJdLFwibWFwcGVkXCIsWzEwNywxMDksNTFdXSxbWzEzMjIzLDEzMjIzXSxcIm1hcHBlZFwiLFsxMDksODcyNSwxMTVdXSxbWzEzMjI0LDEzMjI0XSxcIm1hcHBlZFwiLFsxMDksODcyNSwxMTUsNTBdXSxbWzEzMjI1LDEzMjI1XSxcIm1hcHBlZFwiLFsxMTIsOTddXSxbWzEzMjI2LDEzMjI2XSxcIm1hcHBlZFwiLFsxMDcsMTEyLDk3XV0sW1sxMzIyNywxMzIyN10sXCJtYXBwZWRcIixbMTA5LDExMiw5N11dLFtbMTMyMjgsMTMyMjhdLFwibWFwcGVkXCIsWzEwMywxMTIsOTddXSxbWzEzMjI5LDEzMjI5XSxcIm1hcHBlZFwiLFsxMTQsOTcsMTAwXV0sW1sxMzIzMCwxMzIzMF0sXCJtYXBwZWRcIixbMTE0LDk3LDEwMCw4NzI1LDExNV1dLFtbMTMyMzEsMTMyMzFdLFwibWFwcGVkXCIsWzExNCw5NywxMDAsODcyNSwxMTUsNTBdXSxbWzEzMjMyLDEzMjMyXSxcIm1hcHBlZFwiLFsxMTIsMTE1XV0sW1sxMzIzMywxMzIzM10sXCJtYXBwZWRcIixbMTEwLDExNV1dLFtbMTMyMzQsMTMyMzRdLFwibWFwcGVkXCIsWzk1NiwxMTVdXSxbWzEzMjM1LDEzMjM1XSxcIm1hcHBlZFwiLFsxMDksMTE1XV0sW1sxMzIzNiwxMzIzNl0sXCJtYXBwZWRcIixbMTEyLDExOF1dLFtbMTMyMzcsMTMyMzddLFwibWFwcGVkXCIsWzExMCwxMThdXSxbWzEzMjM4LDEzMjM4XSxcIm1hcHBlZFwiLFs5NTYsMTE4XV0sW1sxMzIzOSwxMzIzOV0sXCJtYXBwZWRcIixbMTA5LDExOF1dLFtbMTMyNDAsMTMyNDBdLFwibWFwcGVkXCIsWzEwNywxMThdXSxbWzEzMjQxLDEzMjQxXSxcIm1hcHBlZFwiLFsxMDksMTE4XV0sW1sxMzI0MiwxMzI0Ml0sXCJtYXBwZWRcIixbMTEyLDExOV1dLFtbMTMyNDMsMTMyNDNdLFwibWFwcGVkXCIsWzExMCwxMTldXSxbWzEzMjQ0LDEzMjQ0XSxcIm1hcHBlZFwiLFs5NTYsMTE5XV0sW1sxMzI0NSwxMzI0NV0sXCJtYXBwZWRcIixbMTA5LDExOV1dLFtbMTMyNDYsMTMyNDZdLFwibWFwcGVkXCIsWzEwNywxMTldXSxbWzEzMjQ3LDEzMjQ3XSxcIm1hcHBlZFwiLFsxMDksMTE5XV0sW1sxMzI0OCwxMzI0OF0sXCJtYXBwZWRcIixbMTA3LDk2OV1dLFtbMTMyNDksMTMyNDldLFwibWFwcGVkXCIsWzEwOSw5NjldXSxbWzEzMjUwLDEzMjUwXSxcImRpc2FsbG93ZWRcIl0sW1sxMzI1MSwxMzI1MV0sXCJtYXBwZWRcIixbOTgsMTEzXV0sW1sxMzI1MiwxMzI1Ml0sXCJtYXBwZWRcIixbOTksOTldXSxbWzEzMjUzLDEzMjUzXSxcIm1hcHBlZFwiLFs5OSwxMDBdXSxbWzEzMjU0LDEzMjU0XSxcIm1hcHBlZFwiLFs5OSw4NzI1LDEwNywxMDNdXSxbWzEzMjU1LDEzMjU1XSxcImRpc2FsbG93ZWRcIl0sW1sxMzI1NiwxMzI1Nl0sXCJtYXBwZWRcIixbMTAwLDk4XV0sW1sxMzI1NywxMzI1N10sXCJtYXBwZWRcIixbMTAzLDEyMV1dLFtbMTMyNTgsMTMyNThdLFwibWFwcGVkXCIsWzEwNCw5N11dLFtbMTMyNTksMTMyNTldLFwibWFwcGVkXCIsWzEwNCwxMTJdXSxbWzEzMjYwLDEzMjYwXSxcIm1hcHBlZFwiLFsxMDUsMTEwXV0sW1sxMzI2MSwxMzI2MV0sXCJtYXBwZWRcIixbMTA3LDEwN11dLFtbMTMyNjIsMTMyNjJdLFwibWFwcGVkXCIsWzEwNywxMDldXSxbWzEzMjYzLDEzMjYzXSxcIm1hcHBlZFwiLFsxMDcsMTE2XV0sW1sxMzI2NCwxMzI2NF0sXCJtYXBwZWRcIixbMTA4LDEwOV1dLFtbMTMyNjUsMTMyNjVdLFwibWFwcGVkXCIsWzEwOCwxMTBdXSxbWzEzMjY2LDEzMjY2XSxcIm1hcHBlZFwiLFsxMDgsMTExLDEwM11dLFtbMTMyNjcsMTMyNjddLFwibWFwcGVkXCIsWzEwOCwxMjBdXSxbWzEzMjY4LDEzMjY4XSxcIm1hcHBlZFwiLFsxMDksOThdXSxbWzEzMjY5LDEzMjY5XSxcIm1hcHBlZFwiLFsxMDksMTA1LDEwOF1dLFtbMTMyNzAsMTMyNzBdLFwibWFwcGVkXCIsWzEwOSwxMTEsMTA4XV0sW1sxMzI3MSwxMzI3MV0sXCJtYXBwZWRcIixbMTEyLDEwNF1dLFtbMTMyNzIsMTMyNzJdLFwiZGlzYWxsb3dlZFwiXSxbWzEzMjczLDEzMjczXSxcIm1hcHBlZFwiLFsxMTIsMTEyLDEwOV1dLFtbMTMyNzQsMTMyNzRdLFwibWFwcGVkXCIsWzExMiwxMTRdXSxbWzEzMjc1LDEzMjc1XSxcIm1hcHBlZFwiLFsxMTUsMTE0XV0sW1sxMzI3NiwxMzI3Nl0sXCJtYXBwZWRcIixbMTE1LDExOF1dLFtbMTMyNzcsMTMyNzddLFwibWFwcGVkXCIsWzExOSw5OF1dLFtbMTMyNzgsMTMyNzhdLFwibWFwcGVkXCIsWzExOCw4NzI1LDEwOV1dLFtbMTMyNzksMTMyNzldLFwibWFwcGVkXCIsWzk3LDg3MjUsMTA5XV0sW1sxMzI4MCwxMzI4MF0sXCJtYXBwZWRcIixbNDksMjYwODVdXSxbWzEzMjgxLDEzMjgxXSxcIm1hcHBlZFwiLFs1MCwyNjA4NV1dLFtbMTMyODIsMTMyODJdLFwibWFwcGVkXCIsWzUxLDI2MDg1XV0sW1sxMzI4MywxMzI4M10sXCJtYXBwZWRcIixbNTIsMjYwODVdXSxbWzEzMjg0LDEzMjg0XSxcIm1hcHBlZFwiLFs1MywyNjA4NV1dLFtbMTMyODUsMTMyODVdLFwibWFwcGVkXCIsWzU0LDI2MDg1XV0sW1sxMzI4NiwxMzI4Nl0sXCJtYXBwZWRcIixbNTUsMjYwODVdXSxbWzEzMjg3LDEzMjg3XSxcIm1hcHBlZFwiLFs1NiwyNjA4NV1dLFtbMTMyODgsMTMyODhdLFwibWFwcGVkXCIsWzU3LDI2MDg1XV0sW1sxMzI4OSwxMzI4OV0sXCJtYXBwZWRcIixbNDksNDgsMjYwODVdXSxbWzEzMjkwLDEzMjkwXSxcIm1hcHBlZFwiLFs0OSw0OSwyNjA4NV1dLFtbMTMyOTEsMTMyOTFdLFwibWFwcGVkXCIsWzQ5LDUwLDI2MDg1XV0sW1sxMzI5MiwxMzI5Ml0sXCJtYXBwZWRcIixbNDksNTEsMjYwODVdXSxbWzEzMjkzLDEzMjkzXSxcIm1hcHBlZFwiLFs0OSw1MiwyNjA4NV1dLFtbMTMyOTQsMTMyOTRdLFwibWFwcGVkXCIsWzQ5LDUzLDI2MDg1XV0sW1sxMzI5NSwxMzI5NV0sXCJtYXBwZWRcIixbNDksNTQsMjYwODVdXSxbWzEzMjk2LDEzMjk2XSxcIm1hcHBlZFwiLFs0OSw1NSwyNjA4NV1dLFtbMTMyOTcsMTMyOTddLFwibWFwcGVkXCIsWzQ5LDU2LDI2MDg1XV0sW1sxMzI5OCwxMzI5OF0sXCJtYXBwZWRcIixbNDksNTcsMjYwODVdXSxbWzEzMjk5LDEzMjk5XSxcIm1hcHBlZFwiLFs1MCw0OCwyNjA4NV1dLFtbMTMzMDAsMTMzMDBdLFwibWFwcGVkXCIsWzUwLDQ5LDI2MDg1XV0sW1sxMzMwMSwxMzMwMV0sXCJtYXBwZWRcIixbNTAsNTAsMjYwODVdXSxbWzEzMzAyLDEzMzAyXSxcIm1hcHBlZFwiLFs1MCw1MSwyNjA4NV1dLFtbMTMzMDMsMTMzMDNdLFwibWFwcGVkXCIsWzUwLDUyLDI2MDg1XV0sW1sxMzMwNCwxMzMwNF0sXCJtYXBwZWRcIixbNTAsNTMsMjYwODVdXSxbWzEzMzA1LDEzMzA1XSxcIm1hcHBlZFwiLFs1MCw1NCwyNjA4NV1dLFtbMTMzMDYsMTMzMDZdLFwibWFwcGVkXCIsWzUwLDU1LDI2MDg1XV0sW1sxMzMwNywxMzMwN10sXCJtYXBwZWRcIixbNTAsNTYsMjYwODVdXSxbWzEzMzA4LDEzMzA4XSxcIm1hcHBlZFwiLFs1MCw1NywyNjA4NV1dLFtbMTMzMDksMTMzMDldLFwibWFwcGVkXCIsWzUxLDQ4LDI2MDg1XV0sW1sxMzMxMCwxMzMxMF0sXCJtYXBwZWRcIixbNTEsNDksMjYwODVdXSxbWzEzMzExLDEzMzExXSxcIm1hcHBlZFwiLFsxMDMsOTcsMTA4XV0sW1sxMzMxMiwxOTg5M10sXCJ2YWxpZFwiXSxbWzE5ODk0LDE5OTAzXSxcImRpc2FsbG93ZWRcIl0sW1sxOTkwNCwxOTk2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTk5NjgsNDA4NjldLFwidmFsaWRcIl0sW1s0MDg3MCw0MDg5MV0sXCJ2YWxpZFwiXSxbWzQwODkyLDQwODk5XSxcInZhbGlkXCJdLFtbNDA5MDAsNDA5MDddLFwidmFsaWRcIl0sW1s0MDkwOCw0MDkwOF0sXCJ2YWxpZFwiXSxbWzQwOTA5LDQwOTE3XSxcInZhbGlkXCJdLFtbNDA5MTgsNDA5NTldLFwiZGlzYWxsb3dlZFwiXSxbWzQwOTYwLDQyMTI0XSxcInZhbGlkXCJdLFtbNDIxMjUsNDIxMjddLFwiZGlzYWxsb3dlZFwiXSxbWzQyMTI4LDQyMTQ1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjE0Niw0MjE0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDIxNDgsNDIxNjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyMTY0LDQyMTY0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjE2NSw0MjE3Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDIxNzcsNDIxNzddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyMTc4LDQyMTgwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjE4MSw0MjE4MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDIxODIsNDIxODJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyMTgzLDQyMTkxXSxcImRpc2FsbG93ZWRcIl0sW1s0MjE5Miw0MjIzN10sXCJ2YWxpZFwiXSxbWzQyMjM4LDQyMjM5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjI0MCw0MjUwOF0sXCJ2YWxpZFwiXSxbWzQyNTA5LDQyNTExXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjUxMiw0MjUzOV0sXCJ2YWxpZFwiXSxbWzQyNTQwLDQyNTU5XSxcImRpc2FsbG93ZWRcIl0sW1s0MjU2MCw0MjU2MF0sXCJtYXBwZWRcIixbNDI1NjFdXSxbWzQyNTYxLDQyNTYxXSxcInZhbGlkXCJdLFtbNDI1NjIsNDI1NjJdLFwibWFwcGVkXCIsWzQyNTYzXV0sW1s0MjU2Myw0MjU2M10sXCJ2YWxpZFwiXSxbWzQyNTY0LDQyNTY0XSxcIm1hcHBlZFwiLFs0MjU2NV1dLFtbNDI1NjUsNDI1NjVdLFwidmFsaWRcIl0sW1s0MjU2Niw0MjU2Nl0sXCJtYXBwZWRcIixbNDI1NjddXSxbWzQyNTY3LDQyNTY3XSxcInZhbGlkXCJdLFtbNDI1NjgsNDI1NjhdLFwibWFwcGVkXCIsWzQyNTY5XV0sW1s0MjU2OSw0MjU2OV0sXCJ2YWxpZFwiXSxbWzQyNTcwLDQyNTcwXSxcIm1hcHBlZFwiLFs0MjU3MV1dLFtbNDI1NzEsNDI1NzFdLFwidmFsaWRcIl0sW1s0MjU3Miw0MjU3Ml0sXCJtYXBwZWRcIixbNDI1NzNdXSxbWzQyNTczLDQyNTczXSxcInZhbGlkXCJdLFtbNDI1NzQsNDI1NzRdLFwibWFwcGVkXCIsWzQyNTc1XV0sW1s0MjU3NSw0MjU3NV0sXCJ2YWxpZFwiXSxbWzQyNTc2LDQyNTc2XSxcIm1hcHBlZFwiLFs0MjU3N11dLFtbNDI1NzcsNDI1NzddLFwidmFsaWRcIl0sW1s0MjU3OCw0MjU3OF0sXCJtYXBwZWRcIixbNDI1NzldXSxbWzQyNTc5LDQyNTc5XSxcInZhbGlkXCJdLFtbNDI1ODAsNDI1ODBdLFwibWFwcGVkXCIsWzQyNTgxXV0sW1s0MjU4MSw0MjU4MV0sXCJ2YWxpZFwiXSxbWzQyNTgyLDQyNTgyXSxcIm1hcHBlZFwiLFs0MjU4M11dLFtbNDI1ODMsNDI1ODNdLFwidmFsaWRcIl0sW1s0MjU4NCw0MjU4NF0sXCJtYXBwZWRcIixbNDI1ODVdXSxbWzQyNTg1LDQyNTg1XSxcInZhbGlkXCJdLFtbNDI1ODYsNDI1ODZdLFwibWFwcGVkXCIsWzQyNTg3XV0sW1s0MjU4Nyw0MjU4N10sXCJ2YWxpZFwiXSxbWzQyNTg4LDQyNTg4XSxcIm1hcHBlZFwiLFs0MjU4OV1dLFtbNDI1ODksNDI1ODldLFwidmFsaWRcIl0sW1s0MjU5MCw0MjU5MF0sXCJtYXBwZWRcIixbNDI1OTFdXSxbWzQyNTkxLDQyNTkxXSxcInZhbGlkXCJdLFtbNDI1OTIsNDI1OTJdLFwibWFwcGVkXCIsWzQyNTkzXV0sW1s0MjU5Myw0MjU5M10sXCJ2YWxpZFwiXSxbWzQyNTk0LDQyNTk0XSxcIm1hcHBlZFwiLFs0MjU5NV1dLFtbNDI1OTUsNDI1OTVdLFwidmFsaWRcIl0sW1s0MjU5Niw0MjU5Nl0sXCJtYXBwZWRcIixbNDI1OTddXSxbWzQyNTk3LDQyNTk3XSxcInZhbGlkXCJdLFtbNDI1OTgsNDI1OThdLFwibWFwcGVkXCIsWzQyNTk5XV0sW1s0MjU5OSw0MjU5OV0sXCJ2YWxpZFwiXSxbWzQyNjAwLDQyNjAwXSxcIm1hcHBlZFwiLFs0MjYwMV1dLFtbNDI2MDEsNDI2MDFdLFwidmFsaWRcIl0sW1s0MjYwMiw0MjYwMl0sXCJtYXBwZWRcIixbNDI2MDNdXSxbWzQyNjAzLDQyNjAzXSxcInZhbGlkXCJdLFtbNDI2MDQsNDI2MDRdLFwibWFwcGVkXCIsWzQyNjA1XV0sW1s0MjYwNSw0MjYwN10sXCJ2YWxpZFwiXSxbWzQyNjA4LDQyNjExXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjYxMiw0MjYxOV0sXCJ2YWxpZFwiXSxbWzQyNjIwLDQyNjIxXSxcInZhbGlkXCJdLFtbNDI2MjIsNDI2MjJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyNjIzLDQyNjIzXSxcInZhbGlkXCJdLFtbNDI2MjQsNDI2MjRdLFwibWFwcGVkXCIsWzQyNjI1XV0sW1s0MjYyNSw0MjYyNV0sXCJ2YWxpZFwiXSxbWzQyNjI2LDQyNjI2XSxcIm1hcHBlZFwiLFs0MjYyN11dLFtbNDI2MjcsNDI2MjddLFwidmFsaWRcIl0sW1s0MjYyOCw0MjYyOF0sXCJtYXBwZWRcIixbNDI2MjldXSxbWzQyNjI5LDQyNjI5XSxcInZhbGlkXCJdLFtbNDI2MzAsNDI2MzBdLFwibWFwcGVkXCIsWzQyNjMxXV0sW1s0MjYzMSw0MjYzMV0sXCJ2YWxpZFwiXSxbWzQyNjMyLDQyNjMyXSxcIm1hcHBlZFwiLFs0MjYzM11dLFtbNDI2MzMsNDI2MzNdLFwidmFsaWRcIl0sW1s0MjYzNCw0MjYzNF0sXCJtYXBwZWRcIixbNDI2MzVdXSxbWzQyNjM1LDQyNjM1XSxcInZhbGlkXCJdLFtbNDI2MzYsNDI2MzZdLFwibWFwcGVkXCIsWzQyNjM3XV0sW1s0MjYzNyw0MjYzN10sXCJ2YWxpZFwiXSxbWzQyNjM4LDQyNjM4XSxcIm1hcHBlZFwiLFs0MjYzOV1dLFtbNDI2MzksNDI2MzldLFwidmFsaWRcIl0sW1s0MjY0MCw0MjY0MF0sXCJtYXBwZWRcIixbNDI2NDFdXSxbWzQyNjQxLDQyNjQxXSxcInZhbGlkXCJdLFtbNDI2NDIsNDI2NDJdLFwibWFwcGVkXCIsWzQyNjQzXV0sW1s0MjY0Myw0MjY0M10sXCJ2YWxpZFwiXSxbWzQyNjQ0LDQyNjQ0XSxcIm1hcHBlZFwiLFs0MjY0NV1dLFtbNDI2NDUsNDI2NDVdLFwidmFsaWRcIl0sW1s0MjY0Niw0MjY0Nl0sXCJtYXBwZWRcIixbNDI2NDddXSxbWzQyNjQ3LDQyNjQ3XSxcInZhbGlkXCJdLFtbNDI2NDgsNDI2NDhdLFwibWFwcGVkXCIsWzQyNjQ5XV0sW1s0MjY0OSw0MjY0OV0sXCJ2YWxpZFwiXSxbWzQyNjUwLDQyNjUwXSxcIm1hcHBlZFwiLFs0MjY1MV1dLFtbNDI2NTEsNDI2NTFdLFwidmFsaWRcIl0sW1s0MjY1Miw0MjY1Ml0sXCJtYXBwZWRcIixbMTA5OF1dLFtbNDI2NTMsNDI2NTNdLFwibWFwcGVkXCIsWzExMDBdXSxbWzQyNjU0LDQyNjU0XSxcInZhbGlkXCJdLFtbNDI2NTUsNDI2NTVdLFwidmFsaWRcIl0sW1s0MjY1Niw0MjcyNV0sXCJ2YWxpZFwiXSxbWzQyNzI2LDQyNzM1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjczNiw0MjczN10sXCJ2YWxpZFwiXSxbWzQyNzM4LDQyNzQzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0Mjc0NCw0Mjc1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDI3NTIsNDI3NzRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyNzc1LDQyNzc4XSxcInZhbGlkXCJdLFtbNDI3NzksNDI3ODNdLFwidmFsaWRcIl0sW1s0Mjc4NCw0Mjc4NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDI3ODYsNDI3ODZdLFwibWFwcGVkXCIsWzQyNzg3XV0sW1s0Mjc4Nyw0Mjc4N10sXCJ2YWxpZFwiXSxbWzQyNzg4LDQyNzg4XSxcIm1hcHBlZFwiLFs0Mjc4OV1dLFtbNDI3ODksNDI3ODldLFwidmFsaWRcIl0sW1s0Mjc5MCw0Mjc5MF0sXCJtYXBwZWRcIixbNDI3OTFdXSxbWzQyNzkxLDQyNzkxXSxcInZhbGlkXCJdLFtbNDI3OTIsNDI3OTJdLFwibWFwcGVkXCIsWzQyNzkzXV0sW1s0Mjc5Myw0Mjc5M10sXCJ2YWxpZFwiXSxbWzQyNzk0LDQyNzk0XSxcIm1hcHBlZFwiLFs0Mjc5NV1dLFtbNDI3OTUsNDI3OTVdLFwidmFsaWRcIl0sW1s0Mjc5Niw0Mjc5Nl0sXCJtYXBwZWRcIixbNDI3OTddXSxbWzQyNzk3LDQyNzk3XSxcInZhbGlkXCJdLFtbNDI3OTgsNDI3OThdLFwibWFwcGVkXCIsWzQyNzk5XV0sW1s0Mjc5OSw0MjgwMV0sXCJ2YWxpZFwiXSxbWzQyODAyLDQyODAyXSxcIm1hcHBlZFwiLFs0MjgwM11dLFtbNDI4MDMsNDI4MDNdLFwidmFsaWRcIl0sW1s0MjgwNCw0MjgwNF0sXCJtYXBwZWRcIixbNDI4MDVdXSxbWzQyODA1LDQyODA1XSxcInZhbGlkXCJdLFtbNDI4MDYsNDI4MDZdLFwibWFwcGVkXCIsWzQyODA3XV0sW1s0MjgwNyw0MjgwN10sXCJ2YWxpZFwiXSxbWzQyODA4LDQyODA4XSxcIm1hcHBlZFwiLFs0MjgwOV1dLFtbNDI4MDksNDI4MDldLFwidmFsaWRcIl0sW1s0MjgxMCw0MjgxMF0sXCJtYXBwZWRcIixbNDI4MTFdXSxbWzQyODExLDQyODExXSxcInZhbGlkXCJdLFtbNDI4MTIsNDI4MTJdLFwibWFwcGVkXCIsWzQyODEzXV0sW1s0MjgxMyw0MjgxM10sXCJ2YWxpZFwiXSxbWzQyODE0LDQyODE0XSxcIm1hcHBlZFwiLFs0MjgxNV1dLFtbNDI4MTUsNDI4MTVdLFwidmFsaWRcIl0sW1s0MjgxNiw0MjgxNl0sXCJtYXBwZWRcIixbNDI4MTddXSxbWzQyODE3LDQyODE3XSxcInZhbGlkXCJdLFtbNDI4MTgsNDI4MThdLFwibWFwcGVkXCIsWzQyODE5XV0sW1s0MjgxOSw0MjgxOV0sXCJ2YWxpZFwiXSxbWzQyODIwLDQyODIwXSxcIm1hcHBlZFwiLFs0MjgyMV1dLFtbNDI4MjEsNDI4MjFdLFwidmFsaWRcIl0sW1s0MjgyMiw0MjgyMl0sXCJtYXBwZWRcIixbNDI4MjNdXSxbWzQyODIzLDQyODIzXSxcInZhbGlkXCJdLFtbNDI4MjQsNDI4MjRdLFwibWFwcGVkXCIsWzQyODI1XV0sW1s0MjgyNSw0MjgyNV0sXCJ2YWxpZFwiXSxbWzQyODI2LDQyODI2XSxcIm1hcHBlZFwiLFs0MjgyN11dLFtbNDI4MjcsNDI4MjddLFwidmFsaWRcIl0sW1s0MjgyOCw0MjgyOF0sXCJtYXBwZWRcIixbNDI4MjldXSxbWzQyODI5LDQyODI5XSxcInZhbGlkXCJdLFtbNDI4MzAsNDI4MzBdLFwibWFwcGVkXCIsWzQyODMxXV0sW1s0MjgzMSw0MjgzMV0sXCJ2YWxpZFwiXSxbWzQyODMyLDQyODMyXSxcIm1hcHBlZFwiLFs0MjgzM11dLFtbNDI4MzMsNDI4MzNdLFwidmFsaWRcIl0sW1s0MjgzNCw0MjgzNF0sXCJtYXBwZWRcIixbNDI4MzVdXSxbWzQyODM1LDQyODM1XSxcInZhbGlkXCJdLFtbNDI4MzYsNDI4MzZdLFwibWFwcGVkXCIsWzQyODM3XV0sW1s0MjgzNyw0MjgzN10sXCJ2YWxpZFwiXSxbWzQyODM4LDQyODM4XSxcIm1hcHBlZFwiLFs0MjgzOV1dLFtbNDI4MzksNDI4MzldLFwidmFsaWRcIl0sW1s0Mjg0MCw0Mjg0MF0sXCJtYXBwZWRcIixbNDI4NDFdXSxbWzQyODQxLDQyODQxXSxcInZhbGlkXCJdLFtbNDI4NDIsNDI4NDJdLFwibWFwcGVkXCIsWzQyODQzXV0sW1s0Mjg0Myw0Mjg0M10sXCJ2YWxpZFwiXSxbWzQyODQ0LDQyODQ0XSxcIm1hcHBlZFwiLFs0Mjg0NV1dLFtbNDI4NDUsNDI4NDVdLFwidmFsaWRcIl0sW1s0Mjg0Niw0Mjg0Nl0sXCJtYXBwZWRcIixbNDI4NDddXSxbWzQyODQ3LDQyODQ3XSxcInZhbGlkXCJdLFtbNDI4NDgsNDI4NDhdLFwibWFwcGVkXCIsWzQyODQ5XV0sW1s0Mjg0OSw0Mjg0OV0sXCJ2YWxpZFwiXSxbWzQyODUwLDQyODUwXSxcIm1hcHBlZFwiLFs0Mjg1MV1dLFtbNDI4NTEsNDI4NTFdLFwidmFsaWRcIl0sW1s0Mjg1Miw0Mjg1Ml0sXCJtYXBwZWRcIixbNDI4NTNdXSxbWzQyODUzLDQyODUzXSxcInZhbGlkXCJdLFtbNDI4NTQsNDI4NTRdLFwibWFwcGVkXCIsWzQyODU1XV0sW1s0Mjg1NSw0Mjg1NV0sXCJ2YWxpZFwiXSxbWzQyODU2LDQyODU2XSxcIm1hcHBlZFwiLFs0Mjg1N11dLFtbNDI4NTcsNDI4NTddLFwidmFsaWRcIl0sW1s0Mjg1OCw0Mjg1OF0sXCJtYXBwZWRcIixbNDI4NTldXSxbWzQyODU5LDQyODU5XSxcInZhbGlkXCJdLFtbNDI4NjAsNDI4NjBdLFwibWFwcGVkXCIsWzQyODYxXV0sW1s0Mjg2MSw0Mjg2MV0sXCJ2YWxpZFwiXSxbWzQyODYyLDQyODYyXSxcIm1hcHBlZFwiLFs0Mjg2M11dLFtbNDI4NjMsNDI4NjNdLFwidmFsaWRcIl0sW1s0Mjg2NCw0Mjg2NF0sXCJtYXBwZWRcIixbNDI4NjNdXSxbWzQyODY1LDQyODcyXSxcInZhbGlkXCJdLFtbNDI4NzMsNDI4NzNdLFwibWFwcGVkXCIsWzQyODc0XV0sW1s0Mjg3NCw0Mjg3NF0sXCJ2YWxpZFwiXSxbWzQyODc1LDQyODc1XSxcIm1hcHBlZFwiLFs0Mjg3Nl1dLFtbNDI4NzYsNDI4NzZdLFwidmFsaWRcIl0sW1s0Mjg3Nyw0Mjg3N10sXCJtYXBwZWRcIixbNzU0NV1dLFtbNDI4NzgsNDI4NzhdLFwibWFwcGVkXCIsWzQyODc5XV0sW1s0Mjg3OSw0Mjg3OV0sXCJ2YWxpZFwiXSxbWzQyODgwLDQyODgwXSxcIm1hcHBlZFwiLFs0Mjg4MV1dLFtbNDI4ODEsNDI4ODFdLFwidmFsaWRcIl0sW1s0Mjg4Miw0Mjg4Ml0sXCJtYXBwZWRcIixbNDI4ODNdXSxbWzQyODgzLDQyODgzXSxcInZhbGlkXCJdLFtbNDI4ODQsNDI4ODRdLFwibWFwcGVkXCIsWzQyODg1XV0sW1s0Mjg4NSw0Mjg4NV0sXCJ2YWxpZFwiXSxbWzQyODg2LDQyODg2XSxcIm1hcHBlZFwiLFs0Mjg4N11dLFtbNDI4ODcsNDI4ODhdLFwidmFsaWRcIl0sW1s0Mjg4OSw0Mjg5MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDI4OTEsNDI4OTFdLFwibWFwcGVkXCIsWzQyODkyXV0sW1s0Mjg5Miw0Mjg5Ml0sXCJ2YWxpZFwiXSxbWzQyODkzLDQyODkzXSxcIm1hcHBlZFwiLFs2MTNdXSxbWzQyODk0LDQyODk0XSxcInZhbGlkXCJdLFtbNDI4OTUsNDI4OTVdLFwidmFsaWRcIl0sW1s0Mjg5Niw0Mjg5Nl0sXCJtYXBwZWRcIixbNDI4OTddXSxbWzQyODk3LDQyODk3XSxcInZhbGlkXCJdLFtbNDI4OTgsNDI4OThdLFwibWFwcGVkXCIsWzQyODk5XV0sW1s0Mjg5OSw0Mjg5OV0sXCJ2YWxpZFwiXSxbWzQyOTAwLDQyOTAxXSxcInZhbGlkXCJdLFtbNDI5MDIsNDI5MDJdLFwibWFwcGVkXCIsWzQyOTAzXV0sW1s0MjkwMyw0MjkwM10sXCJ2YWxpZFwiXSxbWzQyOTA0LDQyOTA0XSxcIm1hcHBlZFwiLFs0MjkwNV1dLFtbNDI5MDUsNDI5MDVdLFwidmFsaWRcIl0sW1s0MjkwNiw0MjkwNl0sXCJtYXBwZWRcIixbNDI5MDddXSxbWzQyOTA3LDQyOTA3XSxcInZhbGlkXCJdLFtbNDI5MDgsNDI5MDhdLFwibWFwcGVkXCIsWzQyOTA5XV0sW1s0MjkwOSw0MjkwOV0sXCJ2YWxpZFwiXSxbWzQyOTEwLDQyOTEwXSxcIm1hcHBlZFwiLFs0MjkxMV1dLFtbNDI5MTEsNDI5MTFdLFwidmFsaWRcIl0sW1s0MjkxMiw0MjkxMl0sXCJtYXBwZWRcIixbNDI5MTNdXSxbWzQyOTEzLDQyOTEzXSxcInZhbGlkXCJdLFtbNDI5MTQsNDI5MTRdLFwibWFwcGVkXCIsWzQyOTE1XV0sW1s0MjkxNSw0MjkxNV0sXCJ2YWxpZFwiXSxbWzQyOTE2LDQyOTE2XSxcIm1hcHBlZFwiLFs0MjkxN11dLFtbNDI5MTcsNDI5MTddLFwidmFsaWRcIl0sW1s0MjkxOCw0MjkxOF0sXCJtYXBwZWRcIixbNDI5MTldXSxbWzQyOTE5LDQyOTE5XSxcInZhbGlkXCJdLFtbNDI5MjAsNDI5MjBdLFwibWFwcGVkXCIsWzQyOTIxXV0sW1s0MjkyMSw0MjkyMV0sXCJ2YWxpZFwiXSxbWzQyOTIyLDQyOTIyXSxcIm1hcHBlZFwiLFs2MTRdXSxbWzQyOTIzLDQyOTIzXSxcIm1hcHBlZFwiLFs2MDRdXSxbWzQyOTI0LDQyOTI0XSxcIm1hcHBlZFwiLFs2MDldXSxbWzQyOTI1LDQyOTI1XSxcIm1hcHBlZFwiLFs2MjBdXSxbWzQyOTI2LDQyOTI3XSxcImRpc2FsbG93ZWRcIl0sW1s0MjkyOCw0MjkyOF0sXCJtYXBwZWRcIixbNjcwXV0sW1s0MjkyOSw0MjkyOV0sXCJtYXBwZWRcIixbNjQ3XV0sW1s0MjkzMCw0MjkzMF0sXCJtYXBwZWRcIixbNjY5XV0sW1s0MjkzMSw0MjkzMV0sXCJtYXBwZWRcIixbNDM4NTldXSxbWzQyOTMyLDQyOTMyXSxcIm1hcHBlZFwiLFs0MjkzM11dLFtbNDI5MzMsNDI5MzNdLFwidmFsaWRcIl0sW1s0MjkzNCw0MjkzNF0sXCJtYXBwZWRcIixbNDI5MzVdXSxbWzQyOTM1LDQyOTM1XSxcInZhbGlkXCJdLFtbNDI5MzYsNDI5OThdLFwiZGlzYWxsb3dlZFwiXSxbWzQyOTk5LDQyOTk5XSxcInZhbGlkXCJdLFtbNDMwMDAsNDMwMDBdLFwibWFwcGVkXCIsWzI5NV1dLFtbNDMwMDEsNDMwMDFdLFwibWFwcGVkXCIsWzMzOV1dLFtbNDMwMDIsNDMwMDJdLFwidmFsaWRcIl0sW1s0MzAwMyw0MzAwN10sXCJ2YWxpZFwiXSxbWzQzMDA4LDQzMDQ3XSxcInZhbGlkXCJdLFtbNDMwNDgsNDMwNTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzMDUyLDQzMDU1XSxcImRpc2FsbG93ZWRcIl0sW1s0MzA1Niw0MzA2NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMwNjYsNDMwNzFdLFwiZGlzYWxsb3dlZFwiXSxbWzQzMDcyLDQzMTIzXSxcInZhbGlkXCJdLFtbNDMxMjQsNDMxMjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzMTI4LDQzMTM1XSxcImRpc2FsbG93ZWRcIl0sW1s0MzEzNiw0MzIwNF0sXCJ2YWxpZFwiXSxbWzQzMjA1LDQzMjEzXSxcImRpc2FsbG93ZWRcIl0sW1s0MzIxNCw0MzIxNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMyMTYsNDMyMjVdLFwidmFsaWRcIl0sW1s0MzIyNiw0MzIzMV0sXCJkaXNhbGxvd2VkXCJdLFtbNDMyMzIsNDMyNTVdLFwidmFsaWRcIl0sW1s0MzI1Niw0MzI1OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMyNTksNDMyNTldLFwidmFsaWRcIl0sW1s0MzI2MCw0MzI2MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMyNjEsNDMyNjFdLFwidmFsaWRcIl0sW1s0MzI2Miw0MzI2M10sXCJkaXNhbGxvd2VkXCJdLFtbNDMyNjQsNDMzMDldLFwidmFsaWRcIl0sW1s0MzMxMCw0MzMxMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMzMTIsNDMzNDddLFwidmFsaWRcIl0sW1s0MzM0OCw0MzM1OF0sXCJkaXNhbGxvd2VkXCJdLFtbNDMzNTksNDMzNTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzMzYwLDQzMzg4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzM4OSw0MzM5MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDMzOTIsNDM0NTZdLFwidmFsaWRcIl0sW1s0MzQ1Nyw0MzQ2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDM0NzAsNDM0NzBdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNDcxLDQzNDgxXSxcInZhbGlkXCJdLFtbNDM0ODIsNDM0ODVdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNDg2LDQzNDg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzQ4OCw0MzUxOF0sXCJ2YWxpZFwiXSxbWzQzNTE5LDQzNTE5XSxcImRpc2FsbG93ZWRcIl0sW1s0MzUyMCw0MzU3NF0sXCJ2YWxpZFwiXSxbWzQzNTc1LDQzNTgzXSxcImRpc2FsbG93ZWRcIl0sW1s0MzU4NCw0MzU5N10sXCJ2YWxpZFwiXSxbWzQzNTk4LDQzNTk5XSxcImRpc2FsbG93ZWRcIl0sW1s0MzYwMCw0MzYwOV0sXCJ2YWxpZFwiXSxbWzQzNjEwLDQzNjExXSxcImRpc2FsbG93ZWRcIl0sW1s0MzYxMiw0MzYxNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDM2MTYsNDM2MzhdLFwidmFsaWRcIl0sW1s0MzYzOSw0MzY0MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDM2NDIsNDM2NDNdLFwidmFsaWRcIl0sW1s0MzY0NCw0MzY0N10sXCJ2YWxpZFwiXSxbWzQzNjQ4LDQzNzE0XSxcInZhbGlkXCJdLFtbNDM3MTUsNDM3MzhdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNzM5LDQzNzQxXSxcInZhbGlkXCJdLFtbNDM3NDIsNDM3NDNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzNzQ0LDQzNzU5XSxcInZhbGlkXCJdLFtbNDM3NjAsNDM3NjFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzNzYyLDQzNzY2XSxcInZhbGlkXCJdLFtbNDM3NjcsNDM3NzZdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNzc3LDQzNzgyXSxcInZhbGlkXCJdLFtbNDM3ODMsNDM3ODRdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNzg1LDQzNzkwXSxcInZhbGlkXCJdLFtbNDM3OTEsNDM3OTJdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNzkzLDQzNzk4XSxcInZhbGlkXCJdLFtbNDM3OTksNDM4MDddLFwiZGlzYWxsb3dlZFwiXSxbWzQzODA4LDQzODE0XSxcInZhbGlkXCJdLFtbNDM4MTUsNDM4MTVdLFwiZGlzYWxsb3dlZFwiXSxbWzQzODE2LDQzODIyXSxcInZhbGlkXCJdLFtbNDM4MjMsNDM4MjNdLFwiZGlzYWxsb3dlZFwiXSxbWzQzODI0LDQzODY2XSxcInZhbGlkXCJdLFtbNDM4NjcsNDM4NjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzODY4LDQzODY4XSxcIm1hcHBlZFwiLFs0Mjc5MV1dLFtbNDM4NjksNDM4NjldLFwibWFwcGVkXCIsWzQzODMxXV0sW1s0Mzg3MCw0Mzg3MF0sXCJtYXBwZWRcIixbNjE5XV0sW1s0Mzg3MSw0Mzg3MV0sXCJtYXBwZWRcIixbNDM4NThdXSxbWzQzODcyLDQzODc1XSxcInZhbGlkXCJdLFtbNDM4NzYsNDM4NzddLFwidmFsaWRcIl0sW1s0Mzg3OCw0Mzg4N10sXCJkaXNhbGxvd2VkXCJdLFtbNDM4ODgsNDM4ODhdLFwibWFwcGVkXCIsWzUwMjRdXSxbWzQzODg5LDQzODg5XSxcIm1hcHBlZFwiLFs1MDI1XV0sW1s0Mzg5MCw0Mzg5MF0sXCJtYXBwZWRcIixbNTAyNl1dLFtbNDM4OTEsNDM4OTFdLFwibWFwcGVkXCIsWzUwMjddXSxbWzQzODkyLDQzODkyXSxcIm1hcHBlZFwiLFs1MDI4XV0sW1s0Mzg5Myw0Mzg5M10sXCJtYXBwZWRcIixbNTAyOV1dLFtbNDM4OTQsNDM4OTRdLFwibWFwcGVkXCIsWzUwMzBdXSxbWzQzODk1LDQzODk1XSxcIm1hcHBlZFwiLFs1MDMxXV0sW1s0Mzg5Niw0Mzg5Nl0sXCJtYXBwZWRcIixbNTAzMl1dLFtbNDM4OTcsNDM4OTddLFwibWFwcGVkXCIsWzUwMzNdXSxbWzQzODk4LDQzODk4XSxcIm1hcHBlZFwiLFs1MDM0XV0sW1s0Mzg5OSw0Mzg5OV0sXCJtYXBwZWRcIixbNTAzNV1dLFtbNDM5MDAsNDM5MDBdLFwibWFwcGVkXCIsWzUwMzZdXSxbWzQzOTAxLDQzOTAxXSxcIm1hcHBlZFwiLFs1MDM3XV0sW1s0MzkwMiw0MzkwMl0sXCJtYXBwZWRcIixbNTAzOF1dLFtbNDM5MDMsNDM5MDNdLFwibWFwcGVkXCIsWzUwMzldXSxbWzQzOTA0LDQzOTA0XSxcIm1hcHBlZFwiLFs1MDQwXV0sW1s0MzkwNSw0MzkwNV0sXCJtYXBwZWRcIixbNTA0MV1dLFtbNDM5MDYsNDM5MDZdLFwibWFwcGVkXCIsWzUwNDJdXSxbWzQzOTA3LDQzOTA3XSxcIm1hcHBlZFwiLFs1MDQzXV0sW1s0MzkwOCw0MzkwOF0sXCJtYXBwZWRcIixbNTA0NF1dLFtbNDM5MDksNDM5MDldLFwibWFwcGVkXCIsWzUwNDVdXSxbWzQzOTEwLDQzOTEwXSxcIm1hcHBlZFwiLFs1MDQ2XV0sW1s0MzkxMSw0MzkxMV0sXCJtYXBwZWRcIixbNTA0N11dLFtbNDM5MTIsNDM5MTJdLFwibWFwcGVkXCIsWzUwNDhdXSxbWzQzOTEzLDQzOTEzXSxcIm1hcHBlZFwiLFs1MDQ5XV0sW1s0MzkxNCw0MzkxNF0sXCJtYXBwZWRcIixbNTA1MF1dLFtbNDM5MTUsNDM5MTVdLFwibWFwcGVkXCIsWzUwNTFdXSxbWzQzOTE2LDQzOTE2XSxcIm1hcHBlZFwiLFs1MDUyXV0sW1s0MzkxNyw0MzkxN10sXCJtYXBwZWRcIixbNTA1M11dLFtbNDM5MTgsNDM5MThdLFwibWFwcGVkXCIsWzUwNTRdXSxbWzQzOTE5LDQzOTE5XSxcIm1hcHBlZFwiLFs1MDU1XV0sW1s0MzkyMCw0MzkyMF0sXCJtYXBwZWRcIixbNTA1Nl1dLFtbNDM5MjEsNDM5MjFdLFwibWFwcGVkXCIsWzUwNTddXSxbWzQzOTIyLDQzOTIyXSxcIm1hcHBlZFwiLFs1MDU4XV0sW1s0MzkyMyw0MzkyM10sXCJtYXBwZWRcIixbNTA1OV1dLFtbNDM5MjQsNDM5MjRdLFwibWFwcGVkXCIsWzUwNjBdXSxbWzQzOTI1LDQzOTI1XSxcIm1hcHBlZFwiLFs1MDYxXV0sW1s0MzkyNiw0MzkyNl0sXCJtYXBwZWRcIixbNTA2Ml1dLFtbNDM5MjcsNDM5MjddLFwibWFwcGVkXCIsWzUwNjNdXSxbWzQzOTI4LDQzOTI4XSxcIm1hcHBlZFwiLFs1MDY0XV0sW1s0MzkyOSw0MzkyOV0sXCJtYXBwZWRcIixbNTA2NV1dLFtbNDM5MzAsNDM5MzBdLFwibWFwcGVkXCIsWzUwNjZdXSxbWzQzOTMxLDQzOTMxXSxcIm1hcHBlZFwiLFs1MDY3XV0sW1s0MzkzMiw0MzkzMl0sXCJtYXBwZWRcIixbNTA2OF1dLFtbNDM5MzMsNDM5MzNdLFwibWFwcGVkXCIsWzUwNjldXSxbWzQzOTM0LDQzOTM0XSxcIm1hcHBlZFwiLFs1MDcwXV0sW1s0MzkzNSw0MzkzNV0sXCJtYXBwZWRcIixbNTA3MV1dLFtbNDM5MzYsNDM5MzZdLFwibWFwcGVkXCIsWzUwNzJdXSxbWzQzOTM3LDQzOTM3XSxcIm1hcHBlZFwiLFs1MDczXV0sW1s0MzkzOCw0MzkzOF0sXCJtYXBwZWRcIixbNTA3NF1dLFtbNDM5MzksNDM5MzldLFwibWFwcGVkXCIsWzUwNzVdXSxbWzQzOTQwLDQzOTQwXSxcIm1hcHBlZFwiLFs1MDc2XV0sW1s0Mzk0MSw0Mzk0MV0sXCJtYXBwZWRcIixbNTA3N11dLFtbNDM5NDIsNDM5NDJdLFwibWFwcGVkXCIsWzUwNzhdXSxbWzQzOTQzLDQzOTQzXSxcIm1hcHBlZFwiLFs1MDc5XV0sW1s0Mzk0NCw0Mzk0NF0sXCJtYXBwZWRcIixbNTA4MF1dLFtbNDM5NDUsNDM5NDVdLFwibWFwcGVkXCIsWzUwODFdXSxbWzQzOTQ2LDQzOTQ2XSxcIm1hcHBlZFwiLFs1MDgyXV0sW1s0Mzk0Nyw0Mzk0N10sXCJtYXBwZWRcIixbNTA4M11dLFtbNDM5NDgsNDM5NDhdLFwibWFwcGVkXCIsWzUwODRdXSxbWzQzOTQ5LDQzOTQ5XSxcIm1hcHBlZFwiLFs1MDg1XV0sW1s0Mzk1MCw0Mzk1MF0sXCJtYXBwZWRcIixbNTA4Nl1dLFtbNDM5NTEsNDM5NTFdLFwibWFwcGVkXCIsWzUwODddXSxbWzQzOTUyLDQzOTUyXSxcIm1hcHBlZFwiLFs1MDg4XV0sW1s0Mzk1Myw0Mzk1M10sXCJtYXBwZWRcIixbNTA4OV1dLFtbNDM5NTQsNDM5NTRdLFwibWFwcGVkXCIsWzUwOTBdXSxbWzQzOTU1LDQzOTU1XSxcIm1hcHBlZFwiLFs1MDkxXV0sW1s0Mzk1Niw0Mzk1Nl0sXCJtYXBwZWRcIixbNTA5Ml1dLFtbNDM5NTcsNDM5NTddLFwibWFwcGVkXCIsWzUwOTNdXSxbWzQzOTU4LDQzOTU4XSxcIm1hcHBlZFwiLFs1MDk0XV0sW1s0Mzk1OSw0Mzk1OV0sXCJtYXBwZWRcIixbNTA5NV1dLFtbNDM5NjAsNDM5NjBdLFwibWFwcGVkXCIsWzUwOTZdXSxbWzQzOTYxLDQzOTYxXSxcIm1hcHBlZFwiLFs1MDk3XV0sW1s0Mzk2Miw0Mzk2Ml0sXCJtYXBwZWRcIixbNTA5OF1dLFtbNDM5NjMsNDM5NjNdLFwibWFwcGVkXCIsWzUwOTldXSxbWzQzOTY0LDQzOTY0XSxcIm1hcHBlZFwiLFs1MTAwXV0sW1s0Mzk2NSw0Mzk2NV0sXCJtYXBwZWRcIixbNTEwMV1dLFtbNDM5NjYsNDM5NjZdLFwibWFwcGVkXCIsWzUxMDJdXSxbWzQzOTY3LDQzOTY3XSxcIm1hcHBlZFwiLFs1MTAzXV0sW1s0Mzk2OCw0NDAxMF0sXCJ2YWxpZFwiXSxbWzQ0MDExLDQ0MDExXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0NDAxMiw0NDAxM10sXCJ2YWxpZFwiXSxbWzQ0MDE0LDQ0MDE1XSxcImRpc2FsbG93ZWRcIl0sW1s0NDAxNiw0NDAyNV0sXCJ2YWxpZFwiXSxbWzQ0MDI2LDQ0MDMxXSxcImRpc2FsbG93ZWRcIl0sW1s0NDAzMiw1NTIwM10sXCJ2YWxpZFwiXSxbWzU1MjA0LDU1MjE1XSxcImRpc2FsbG93ZWRcIl0sW1s1NTIxNiw1NTIzOF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNTUyMzksNTUyNDJdLFwiZGlzYWxsb3dlZFwiXSxbWzU1MjQzLDU1MjkxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s1NTI5Miw1NTI5NV0sXCJkaXNhbGxvd2VkXCJdLFtbNTUyOTYsNTczNDNdLFwiZGlzYWxsb3dlZFwiXSxbWzU3MzQ0LDYzNzQzXSxcImRpc2FsbG93ZWRcIl0sW1s2Mzc0NCw2Mzc0NF0sXCJtYXBwZWRcIixbMzU5MTJdXSxbWzYzNzQ1LDYzNzQ1XSxcIm1hcHBlZFwiLFsyNjM1Nl1dLFtbNjM3NDYsNjM3NDZdLFwibWFwcGVkXCIsWzM2NTU0XV0sW1s2Mzc0Nyw2Mzc0N10sXCJtYXBwZWRcIixbMzYwNDBdXSxbWzYzNzQ4LDYzNzQ4XSxcIm1hcHBlZFwiLFsyODM2OV1dLFtbNjM3NDksNjM3NDldLFwibWFwcGVkXCIsWzIwMDE4XV0sW1s2Mzc1MCw2Mzc1MF0sXCJtYXBwZWRcIixbMjE0NzddXSxbWzYzNzUxLDYzNzUyXSxcIm1hcHBlZFwiLFs0MDg2MF1dLFtbNjM3NTMsNjM3NTNdLFwibWFwcGVkXCIsWzIyODY1XV0sW1s2Mzc1NCw2Mzc1NF0sXCJtYXBwZWRcIixbMzczMjldXSxbWzYzNzU1LDYzNzU1XSxcIm1hcHBlZFwiLFsyMTg5NV1dLFtbNjM3NTYsNjM3NTZdLFwibWFwcGVkXCIsWzIyODU2XV0sW1s2Mzc1Nyw2Mzc1N10sXCJtYXBwZWRcIixbMjUwNzhdXSxbWzYzNzU4LDYzNzU4XSxcIm1hcHBlZFwiLFszMDMxM11dLFtbNjM3NTksNjM3NTldLFwibWFwcGVkXCIsWzMyNjQ1XV0sW1s2Mzc2MCw2Mzc2MF0sXCJtYXBwZWRcIixbMzQzNjddXSxbWzYzNzYxLDYzNzYxXSxcIm1hcHBlZFwiLFszNDc0Nl1dLFtbNjM3NjIsNjM3NjJdLFwibWFwcGVkXCIsWzM1MDY0XV0sW1s2Mzc2Myw2Mzc2M10sXCJtYXBwZWRcIixbMzcwMDddXSxbWzYzNzY0LDYzNzY0XSxcIm1hcHBlZFwiLFsyNzEzOF1dLFtbNjM3NjUsNjM3NjVdLFwibWFwcGVkXCIsWzI3OTMxXV0sW1s2Mzc2Niw2Mzc2Nl0sXCJtYXBwZWRcIixbMjg4ODldXSxbWzYzNzY3LDYzNzY3XSxcIm1hcHBlZFwiLFsyOTY2Ml1dLFtbNjM3NjgsNjM3NjhdLFwibWFwcGVkXCIsWzMzODUzXV0sW1s2Mzc2OSw2Mzc2OV0sXCJtYXBwZWRcIixbMzcyMjZdXSxbWzYzNzcwLDYzNzcwXSxcIm1hcHBlZFwiLFszOTQwOV1dLFtbNjM3NzEsNjM3NzFdLFwibWFwcGVkXCIsWzIwMDk4XV0sW1s2Mzc3Miw2Mzc3Ml0sXCJtYXBwZWRcIixbMjEzNjVdXSxbWzYzNzczLDYzNzczXSxcIm1hcHBlZFwiLFsyNzM5Nl1dLFtbNjM3NzQsNjM3NzRdLFwibWFwcGVkXCIsWzI5MjExXV0sW1s2Mzc3NSw2Mzc3NV0sXCJtYXBwZWRcIixbMzQzNDldXSxbWzYzNzc2LDYzNzc2XSxcIm1hcHBlZFwiLFs0MDQ3OF1dLFtbNjM3NzcsNjM3NzddLFwibWFwcGVkXCIsWzIzODg4XV0sW1s2Mzc3OCw2Mzc3OF0sXCJtYXBwZWRcIixbMjg2NTFdXSxbWzYzNzc5LDYzNzc5XSxcIm1hcHBlZFwiLFszNDI1M11dLFtbNjM3ODAsNjM3ODBdLFwibWFwcGVkXCIsWzM1MTcyXV0sW1s2Mzc4MSw2Mzc4MV0sXCJtYXBwZWRcIixbMjUyODldXSxbWzYzNzgyLDYzNzgyXSxcIm1hcHBlZFwiLFszMzI0MF1dLFtbNjM3ODMsNjM3ODNdLFwibWFwcGVkXCIsWzM0ODQ3XV0sW1s2Mzc4NCw2Mzc4NF0sXCJtYXBwZWRcIixbMjQyNjZdXSxbWzYzNzg1LDYzNzg1XSxcIm1hcHBlZFwiLFsyNjM5MV1dLFtbNjM3ODYsNjM3ODZdLFwibWFwcGVkXCIsWzI4MDEwXV0sW1s2Mzc4Nyw2Mzc4N10sXCJtYXBwZWRcIixbMjk0MzZdXSxbWzYzNzg4LDYzNzg4XSxcIm1hcHBlZFwiLFszNzA3MF1dLFtbNjM3ODksNjM3ODldLFwibWFwcGVkXCIsWzIwMzU4XV0sW1s2Mzc5MCw2Mzc5MF0sXCJtYXBwZWRcIixbMjA5MTldXSxbWzYzNzkxLDYzNzkxXSxcIm1hcHBlZFwiLFsyMTIxNF1dLFtbNjM3OTIsNjM3OTJdLFwibWFwcGVkXCIsWzI1Nzk2XV0sW1s2Mzc5Myw2Mzc5M10sXCJtYXBwZWRcIixbMjczNDddXSxbWzYzNzk0LDYzNzk0XSxcIm1hcHBlZFwiLFsyOTIwMF1dLFtbNjM3OTUsNjM3OTVdLFwibWFwcGVkXCIsWzMwNDM5XV0sW1s2Mzc5Niw2Mzc5Nl0sXCJtYXBwZWRcIixbMzI3NjldXSxbWzYzNzk3LDYzNzk3XSxcIm1hcHBlZFwiLFszNDMxMF1dLFtbNjM3OTgsNjM3OThdLFwibWFwcGVkXCIsWzM0Mzk2XV0sW1s2Mzc5OSw2Mzc5OV0sXCJtYXBwZWRcIixbMzYzMzVdXSxbWzYzODAwLDYzODAwXSxcIm1hcHBlZFwiLFszODcwNl1dLFtbNjM4MDEsNjM4MDFdLFwibWFwcGVkXCIsWzM5NzkxXV0sW1s2MzgwMiw2MzgwMl0sXCJtYXBwZWRcIixbNDA0NDJdXSxbWzYzODAzLDYzODAzXSxcIm1hcHBlZFwiLFszMDg2MF1dLFtbNjM4MDQsNjM4MDRdLFwibWFwcGVkXCIsWzMxMTAzXV0sW1s2MzgwNSw2MzgwNV0sXCJtYXBwZWRcIixbMzIxNjBdXSxbWzYzODA2LDYzODA2XSxcIm1hcHBlZFwiLFszMzczN11dLFtbNjM4MDcsNjM4MDddLFwibWFwcGVkXCIsWzM3NjM2XV0sW1s2MzgwOCw2MzgwOF0sXCJtYXBwZWRcIixbNDA1NzVdXSxbWzYzODA5LDYzODA5XSxcIm1hcHBlZFwiLFszNTU0Ml1dLFtbNjM4MTAsNjM4MTBdLFwibWFwcGVkXCIsWzIyNzUxXV0sW1s2MzgxMSw2MzgxMV0sXCJtYXBwZWRcIixbMjQzMjRdXSxbWzYzODEyLDYzODEyXSxcIm1hcHBlZFwiLFszMTg0MF1dLFtbNjM4MTMsNjM4MTNdLFwibWFwcGVkXCIsWzMyODk0XV0sW1s2MzgxNCw2MzgxNF0sXCJtYXBwZWRcIixbMjkyODJdXSxbWzYzODE1LDYzODE1XSxcIm1hcHBlZFwiLFszMDkyMl1dLFtbNjM4MTYsNjM4MTZdLFwibWFwcGVkXCIsWzM2MDM0XV0sW1s2MzgxNyw2MzgxN10sXCJtYXBwZWRcIixbMzg2NDddXSxbWzYzODE4LDYzODE4XSxcIm1hcHBlZFwiLFsyMjc0NF1dLFtbNjM4MTksNjM4MTldLFwibWFwcGVkXCIsWzIzNjUwXV0sW1s2MzgyMCw2MzgyMF0sXCJtYXBwZWRcIixbMjcxNTVdXSxbWzYzODIxLDYzODIxXSxcIm1hcHBlZFwiLFsyODEyMl1dLFtbNjM4MjIsNjM4MjJdLFwibWFwcGVkXCIsWzI4NDMxXV0sW1s2MzgyMyw2MzgyM10sXCJtYXBwZWRcIixbMzIwNDddXSxbWzYzODI0LDYzODI0XSxcIm1hcHBlZFwiLFszMjMxMV1dLFtbNjM4MjUsNjM4MjVdLFwibWFwcGVkXCIsWzM4NDc1XV0sW1s2MzgyNiw2MzgyNl0sXCJtYXBwZWRcIixbMjEyMDJdXSxbWzYzODI3LDYzODI3XSxcIm1hcHBlZFwiLFszMjkwN11dLFtbNjM4MjgsNjM4MjhdLFwibWFwcGVkXCIsWzIwOTU2XV0sW1s2MzgyOSw2MzgyOV0sXCJtYXBwZWRcIixbMjA5NDBdXSxbWzYzODMwLDYzODMwXSxcIm1hcHBlZFwiLFszMTI2MF1dLFtbNjM4MzEsNjM4MzFdLFwibWFwcGVkXCIsWzMyMTkwXV0sW1s2MzgzMiw2MzgzMl0sXCJtYXBwZWRcIixbMzM3NzddXSxbWzYzODMzLDYzODMzXSxcIm1hcHBlZFwiLFszODUxN11dLFtbNjM4MzQsNjM4MzRdLFwibWFwcGVkXCIsWzM1NzEyXV0sW1s2MzgzNSw2MzgzNV0sXCJtYXBwZWRcIixbMjUyOTVdXSxbWzYzODM2LDYzODM2XSxcIm1hcHBlZFwiLFsyNzEzOF1dLFtbNjM4MzcsNjM4MzddLFwibWFwcGVkXCIsWzM1NTgyXV0sW1s2MzgzOCw2MzgzOF0sXCJtYXBwZWRcIixbMjAwMjVdXSxbWzYzODM5LDYzODM5XSxcIm1hcHBlZFwiLFsyMzUyN11dLFtbNjM4NDAsNjM4NDBdLFwibWFwcGVkXCIsWzI0NTk0XV0sW1s2Mzg0MSw2Mzg0MV0sXCJtYXBwZWRcIixbMjk1NzVdXSxbWzYzODQyLDYzODQyXSxcIm1hcHBlZFwiLFszMDA2NF1dLFtbNjM4NDMsNjM4NDNdLFwibWFwcGVkXCIsWzIxMjcxXV0sW1s2Mzg0NCw2Mzg0NF0sXCJtYXBwZWRcIixbMzA5NzFdXSxbWzYzODQ1LDYzODQ1XSxcIm1hcHBlZFwiLFsyMDQxNV1dLFtbNjM4NDYsNjM4NDZdLFwibWFwcGVkXCIsWzI0NDg5XV0sW1s2Mzg0Nyw2Mzg0N10sXCJtYXBwZWRcIixbMTk5ODFdXSxbWzYzODQ4LDYzODQ4XSxcIm1hcHBlZFwiLFsyNzg1Ml1dLFtbNjM4NDksNjM4NDldLFwibWFwcGVkXCIsWzI1OTc2XV0sW1s2Mzg1MCw2Mzg1MF0sXCJtYXBwZWRcIixbMzIwMzRdXSxbWzYzODUxLDYzODUxXSxcIm1hcHBlZFwiLFsyMTQ0M11dLFtbNjM4NTIsNjM4NTJdLFwibWFwcGVkXCIsWzIyNjIyXV0sW1s2Mzg1Myw2Mzg1M10sXCJtYXBwZWRcIixbMzA0NjVdXSxbWzYzODU0LDYzODU0XSxcIm1hcHBlZFwiLFszMzg2NV1dLFtbNjM4NTUsNjM4NTVdLFwibWFwcGVkXCIsWzM1NDk4XV0sW1s2Mzg1Niw2Mzg1Nl0sXCJtYXBwZWRcIixbMjc1NzhdXSxbWzYzODU3LDYzODU3XSxcIm1hcHBlZFwiLFszNjc4NF1dLFtbNjM4NTgsNjM4NThdLFwibWFwcGVkXCIsWzI3Nzg0XV0sW1s2Mzg1OSw2Mzg1OV0sXCJtYXBwZWRcIixbMjUzNDJdXSxbWzYzODYwLDYzODYwXSxcIm1hcHBlZFwiLFszMzUwOV1dLFtbNjM4NjEsNjM4NjFdLFwibWFwcGVkXCIsWzI1NTA0XV0sW1s2Mzg2Miw2Mzg2Ml0sXCJtYXBwZWRcIixbMzAwNTNdXSxbWzYzODYzLDYzODYzXSxcIm1hcHBlZFwiLFsyMDE0Ml1dLFtbNjM4NjQsNjM4NjRdLFwibWFwcGVkXCIsWzIwODQxXV0sW1s2Mzg2NSw2Mzg2NV0sXCJtYXBwZWRcIixbMjA5MzddXSxbWzYzODY2LDYzODY2XSxcIm1hcHBlZFwiLFsyNjc1M11dLFtbNjM4NjcsNjM4NjddLFwibWFwcGVkXCIsWzMxOTc1XV0sW1s2Mzg2OCw2Mzg2OF0sXCJtYXBwZWRcIixbMzMzOTFdXSxbWzYzODY5LDYzODY5XSxcIm1hcHBlZFwiLFszNTUzOF1dLFtbNjM4NzAsNjM4NzBdLFwibWFwcGVkXCIsWzM3MzI3XV0sW1s2Mzg3MSw2Mzg3MV0sXCJtYXBwZWRcIixbMjEyMzddXSxbWzYzODcyLDYzODcyXSxcIm1hcHBlZFwiLFsyMTU3MF1dLFtbNjM4NzMsNjM4NzNdLFwibWFwcGVkXCIsWzIyODk5XV0sW1s2Mzg3NCw2Mzg3NF0sXCJtYXBwZWRcIixbMjQzMDBdXSxbWzYzODc1LDYzODc1XSxcIm1hcHBlZFwiLFsyNjA1M11dLFtbNjM4NzYsNjM4NzZdLFwibWFwcGVkXCIsWzI4NjcwXV0sW1s2Mzg3Nyw2Mzg3N10sXCJtYXBwZWRcIixbMzEwMThdXSxbWzYzODc4LDYzODc4XSxcIm1hcHBlZFwiLFszODMxN11dLFtbNjM4NzksNjM4NzldLFwibWFwcGVkXCIsWzM5NTMwXV0sW1s2Mzg4MCw2Mzg4MF0sXCJtYXBwZWRcIixbNDA1OTldXSxbWzYzODgxLDYzODgxXSxcIm1hcHBlZFwiLFs0MDY1NF1dLFtbNjM4ODIsNjM4ODJdLFwibWFwcGVkXCIsWzIxMTQ3XV0sW1s2Mzg4Myw2Mzg4M10sXCJtYXBwZWRcIixbMjYzMTBdXSxbWzYzODg0LDYzODg0XSxcIm1hcHBlZFwiLFsyNzUxMV1dLFtbNjM4ODUsNjM4ODVdLFwibWFwcGVkXCIsWzM2NzA2XV0sW1s2Mzg4Niw2Mzg4Nl0sXCJtYXBwZWRcIixbMjQxODBdXSxbWzYzODg3LDYzODg3XSxcIm1hcHBlZFwiLFsyNDk3Nl1dLFtbNjM4ODgsNjM4ODhdLFwibWFwcGVkXCIsWzI1MDg4XV0sW1s2Mzg4OSw2Mzg4OV0sXCJtYXBwZWRcIixbMjU3NTRdXSxbWzYzODkwLDYzODkwXSxcIm1hcHBlZFwiLFsyODQ1MV1dLFtbNjM4OTEsNjM4OTFdLFwibWFwcGVkXCIsWzI5MDAxXV0sW1s2Mzg5Miw2Mzg5Ml0sXCJtYXBwZWRcIixbMjk4MzNdXSxbWzYzODkzLDYzODkzXSxcIm1hcHBlZFwiLFszMTE3OF1dLFtbNjM4OTQsNjM4OTRdLFwibWFwcGVkXCIsWzMyMjQ0XV0sW1s2Mzg5NSw2Mzg5NV0sXCJtYXBwZWRcIixbMzI4NzldXSxbWzYzODk2LDYzODk2XSxcIm1hcHBlZFwiLFszNjY0Nl1dLFtbNjM4OTcsNjM4OTddLFwibWFwcGVkXCIsWzM0MDMwXV0sW1s2Mzg5OCw2Mzg5OF0sXCJtYXBwZWRcIixbMzY4OTldXSxbWzYzODk5LDYzODk5XSxcIm1hcHBlZFwiLFszNzcwNl1dLFtbNjM5MDAsNjM5MDBdLFwibWFwcGVkXCIsWzIxMDE1XV0sW1s2MzkwMSw2MzkwMV0sXCJtYXBwZWRcIixbMjExNTVdXSxbWzYzOTAyLDYzOTAyXSxcIm1hcHBlZFwiLFsyMTY5M11dLFtbNjM5MDMsNjM5MDNdLFwibWFwcGVkXCIsWzI4ODcyXV0sW1s2MzkwNCw2MzkwNF0sXCJtYXBwZWRcIixbMzUwMTBdXSxbWzYzOTA1LDYzOTA1XSxcIm1hcHBlZFwiLFszNTQ5OF1dLFtbNjM5MDYsNjM5MDZdLFwibWFwcGVkXCIsWzI0MjY1XV0sW1s2MzkwNyw2MzkwN10sXCJtYXBwZWRcIixbMjQ1NjVdXSxbWzYzOTA4LDYzOTA4XSxcIm1hcHBlZFwiLFsyNTQ2N11dLFtbNjM5MDksNjM5MDldLFwibWFwcGVkXCIsWzI3NTY2XV0sW1s2MzkxMCw2MzkxMF0sXCJtYXBwZWRcIixbMzE4MDZdXSxbWzYzOTExLDYzOTExXSxcIm1hcHBlZFwiLFsyOTU1N11dLFtbNjM5MTIsNjM5MTJdLFwibWFwcGVkXCIsWzIwMTk2XV0sW1s2MzkxMyw2MzkxM10sXCJtYXBwZWRcIixbMjIyNjVdXSxbWzYzOTE0LDYzOTE0XSxcIm1hcHBlZFwiLFsyMzUyN11dLFtbNjM5MTUsNjM5MTVdLFwibWFwcGVkXCIsWzIzOTk0XV0sW1s2MzkxNiw2MzkxNl0sXCJtYXBwZWRcIixbMjQ2MDRdXSxbWzYzOTE3LDYzOTE3XSxcIm1hcHBlZFwiLFsyOTYxOF1dLFtbNjM5MTgsNjM5MThdLFwibWFwcGVkXCIsWzI5ODAxXV0sW1s2MzkxOSw2MzkxOV0sXCJtYXBwZWRcIixbMzI2NjZdXSxbWzYzOTIwLDYzOTIwXSxcIm1hcHBlZFwiLFszMjgzOF1dLFtbNjM5MjEsNjM5MjFdLFwibWFwcGVkXCIsWzM3NDI4XV0sW1s2MzkyMiw2MzkyMl0sXCJtYXBwZWRcIixbMzg2NDZdXSxbWzYzOTIzLDYzOTIzXSxcIm1hcHBlZFwiLFszODcyOF1dLFtbNjM5MjQsNjM5MjRdLFwibWFwcGVkXCIsWzM4OTM2XV0sW1s2MzkyNSw2MzkyNV0sXCJtYXBwZWRcIixbMjAzNjNdXSxbWzYzOTI2LDYzOTI2XSxcIm1hcHBlZFwiLFszMTE1MF1dLFtbNjM5MjcsNjM5MjddLFwibWFwcGVkXCIsWzM3MzAwXV0sW1s2MzkyOCw2MzkyOF0sXCJtYXBwZWRcIixbMzg1ODRdXSxbWzYzOTI5LDYzOTI5XSxcIm1hcHBlZFwiLFsyNDgwMV1dLFtbNjM5MzAsNjM5MzBdLFwibWFwcGVkXCIsWzIwMTAyXV0sW1s2MzkzMSw2MzkzMV0sXCJtYXBwZWRcIixbMjA2OThdXSxbWzYzOTMyLDYzOTMyXSxcIm1hcHBlZFwiLFsyMzUzNF1dLFtbNjM5MzMsNjM5MzNdLFwibWFwcGVkXCIsWzIzNjE1XV0sW1s2MzkzNCw2MzkzNF0sXCJtYXBwZWRcIixbMjYwMDldXSxbWzYzOTM1LDYzOTM1XSxcIm1hcHBlZFwiLFsyNzEzOF1dLFtbNjM5MzYsNjM5MzZdLFwibWFwcGVkXCIsWzI5MTM0XV0sW1s2MzkzNyw2MzkzN10sXCJtYXBwZWRcIixbMzAyNzRdXSxbWzYzOTM4LDYzOTM4XSxcIm1hcHBlZFwiLFszNDA0NF1dLFtbNjM5MzksNjM5MzldLFwibWFwcGVkXCIsWzM2OTg4XV0sW1s2Mzk0MCw2Mzk0MF0sXCJtYXBwZWRcIixbNDA4NDVdXSxbWzYzOTQxLDYzOTQxXSxcIm1hcHBlZFwiLFsyNjI0OF1dLFtbNjM5NDIsNjM5NDJdLFwibWFwcGVkXCIsWzM4NDQ2XV0sW1s2Mzk0Myw2Mzk0M10sXCJtYXBwZWRcIixbMjExMjldXSxbWzYzOTQ0LDYzOTQ0XSxcIm1hcHBlZFwiLFsyNjQ5MV1dLFtbNjM5NDUsNjM5NDVdLFwibWFwcGVkXCIsWzI2NjExXV0sW1s2Mzk0Niw2Mzk0Nl0sXCJtYXBwZWRcIixbMjc5NjldXSxbWzYzOTQ3LDYzOTQ3XSxcIm1hcHBlZFwiLFsyODMxNl1dLFtbNjM5NDgsNjM5NDhdLFwibWFwcGVkXCIsWzI5NzA1XV0sW1s2Mzk0OSw2Mzk0OV0sXCJtYXBwZWRcIixbMzAwNDFdXSxbWzYzOTUwLDYzOTUwXSxcIm1hcHBlZFwiLFszMDgyN11dLFtbNjM5NTEsNjM5NTFdLFwibWFwcGVkXCIsWzMyMDE2XV0sW1s2Mzk1Miw2Mzk1Ml0sXCJtYXBwZWRcIixbMzkwMDZdXSxbWzYzOTUzLDYzOTUzXSxcIm1hcHBlZFwiLFsyMDg0NV1dLFtbNjM5NTQsNjM5NTRdLFwibWFwcGVkXCIsWzI1MTM0XV0sW1s2Mzk1NSw2Mzk1NV0sXCJtYXBwZWRcIixbMzg1MjBdXSxbWzYzOTU2LDYzOTU2XSxcIm1hcHBlZFwiLFsyMDUyM11dLFtbNjM5NTcsNjM5NTddLFwibWFwcGVkXCIsWzIzODMzXV0sW1s2Mzk1OCw2Mzk1OF0sXCJtYXBwZWRcIixbMjgxMzhdXSxbWzYzOTU5LDYzOTU5XSxcIm1hcHBlZFwiLFszNjY1MF1dLFtbNjM5NjAsNjM5NjBdLFwibWFwcGVkXCIsWzI0NDU5XV0sW1s2Mzk2MSw2Mzk2MV0sXCJtYXBwZWRcIixbMjQ5MDBdXSxbWzYzOTYyLDYzOTYyXSxcIm1hcHBlZFwiLFsyNjY0N11dLFtbNjM5NjMsNjM5NjNdLFwibWFwcGVkXCIsWzI5NTc1XV0sW1s2Mzk2NCw2Mzk2NF0sXCJtYXBwZWRcIixbMzg1MzRdXSxbWzYzOTY1LDYzOTY1XSxcIm1hcHBlZFwiLFsyMTAzM11dLFtbNjM5NjYsNjM5NjZdLFwibWFwcGVkXCIsWzIxNTE5XV0sW1s2Mzk2Nyw2Mzk2N10sXCJtYXBwZWRcIixbMjM2NTNdXSxbWzYzOTY4LDYzOTY4XSxcIm1hcHBlZFwiLFsyNjEzMV1dLFtbNjM5NjksNjM5NjldLFwibWFwcGVkXCIsWzI2NDQ2XV0sW1s2Mzk3MCw2Mzk3MF0sXCJtYXBwZWRcIixbMjY3OTJdXSxbWzYzOTcxLDYzOTcxXSxcIm1hcHBlZFwiLFsyNzg3N11dLFtbNjM5NzIsNjM5NzJdLFwibWFwcGVkXCIsWzI5NzAyXV0sW1s2Mzk3Myw2Mzk3M10sXCJtYXBwZWRcIixbMzAxNzhdXSxbWzYzOTc0LDYzOTc0XSxcIm1hcHBlZFwiLFszMjYzM11dLFtbNjM5NzUsNjM5NzVdLFwibWFwcGVkXCIsWzM1MDIzXV0sW1s2Mzk3Niw2Mzk3Nl0sXCJtYXBwZWRcIixbMzUwNDFdXSxbWzYzOTc3LDYzOTc3XSxcIm1hcHBlZFwiLFszNzMyNF1dLFtbNjM5NzgsNjM5NzhdLFwibWFwcGVkXCIsWzM4NjI2XV0sW1s2Mzk3OSw2Mzk3OV0sXCJtYXBwZWRcIixbMjEzMTFdXSxbWzYzOTgwLDYzOTgwXSxcIm1hcHBlZFwiLFsyODM0Nl1dLFtbNjM5ODEsNjM5ODFdLFwibWFwcGVkXCIsWzIxNTMzXV0sW1s2Mzk4Miw2Mzk4Ml0sXCJtYXBwZWRcIixbMjkxMzZdXSxbWzYzOTgzLDYzOTgzXSxcIm1hcHBlZFwiLFsyOTg0OF1dLFtbNjM5ODQsNjM5ODRdLFwibWFwcGVkXCIsWzM0Mjk4XV0sW1s2Mzk4NSw2Mzk4NV0sXCJtYXBwZWRcIixbMzg1NjNdXSxbWzYzOTg2LDYzOTg2XSxcIm1hcHBlZFwiLFs0MDAyM11dLFtbNjM5ODcsNjM5ODddLFwibWFwcGVkXCIsWzQwNjA3XV0sW1s2Mzk4OCw2Mzk4OF0sXCJtYXBwZWRcIixbMjY1MTldXSxbWzYzOTg5LDYzOTg5XSxcIm1hcHBlZFwiLFsyODEwN11dLFtbNjM5OTAsNjM5OTBdLFwibWFwcGVkXCIsWzMzMjU2XV0sW1s2Mzk5MSw2Mzk5MV0sXCJtYXBwZWRcIixbMzE0MzVdXSxbWzYzOTkyLDYzOTkyXSxcIm1hcHBlZFwiLFszMTUyMF1dLFtbNjM5OTMsNjM5OTNdLFwibWFwcGVkXCIsWzMxODkwXV0sW1s2Mzk5NCw2Mzk5NF0sXCJtYXBwZWRcIixbMjkzNzZdXSxbWzYzOTk1LDYzOTk1XSxcIm1hcHBlZFwiLFsyODgyNV1dLFtbNjM5OTYsNjM5OTZdLFwibWFwcGVkXCIsWzM1NjcyXV0sW1s2Mzk5Nyw2Mzk5N10sXCJtYXBwZWRcIixbMjAxNjBdXSxbWzYzOTk4LDYzOTk4XSxcIm1hcHBlZFwiLFszMzU5MF1dLFtbNjM5OTksNjM5OTldLFwibWFwcGVkXCIsWzIxMDUwXV0sW1s2NDAwMCw2NDAwMF0sXCJtYXBwZWRcIixbMjA5OTldXSxbWzY0MDAxLDY0MDAxXSxcIm1hcHBlZFwiLFsyNDIzMF1dLFtbNjQwMDIsNjQwMDJdLFwibWFwcGVkXCIsWzI1Mjk5XV0sW1s2NDAwMyw2NDAwM10sXCJtYXBwZWRcIixbMzE5NThdXSxbWzY0MDA0LDY0MDA0XSxcIm1hcHBlZFwiLFsyMzQyOV1dLFtbNjQwMDUsNjQwMDVdLFwibWFwcGVkXCIsWzI3OTM0XV0sW1s2NDAwNiw2NDAwNl0sXCJtYXBwZWRcIixbMjYyOTJdXSxbWzY0MDA3LDY0MDA3XSxcIm1hcHBlZFwiLFszNjY2N11dLFtbNjQwMDgsNjQwMDhdLFwibWFwcGVkXCIsWzM0ODkyXV0sW1s2NDAwOSw2NDAwOV0sXCJtYXBwZWRcIixbMzg0NzddXSxbWzY0MDEwLDY0MDEwXSxcIm1hcHBlZFwiLFszNTIxMV1dLFtbNjQwMTEsNjQwMTFdLFwibWFwcGVkXCIsWzI0Mjc1XV0sW1s2NDAxMiw2NDAxMl0sXCJtYXBwZWRcIixbMjA4MDBdXSxbWzY0MDEzLDY0MDEzXSxcIm1hcHBlZFwiLFsyMTk1Ml1dLFtbNjQwMTQsNjQwMTVdLFwidmFsaWRcIl0sW1s2NDAxNiw2NDAxNl0sXCJtYXBwZWRcIixbMjI2MThdXSxbWzY0MDE3LDY0MDE3XSxcInZhbGlkXCJdLFtbNjQwMTgsNjQwMThdLFwibWFwcGVkXCIsWzI2MjI4XV0sW1s2NDAxOSw2NDAyMF0sXCJ2YWxpZFwiXSxbWzY0MDIxLDY0MDIxXSxcIm1hcHBlZFwiLFsyMDk1OF1dLFtbNjQwMjIsNjQwMjJdLFwibWFwcGVkXCIsWzI5NDgyXV0sW1s2NDAyMyw2NDAyM10sXCJtYXBwZWRcIixbMzA0MTBdXSxbWzY0MDI0LDY0MDI0XSxcIm1hcHBlZFwiLFszMTAzNl1dLFtbNjQwMjUsNjQwMjVdLFwibWFwcGVkXCIsWzMxMDcwXV0sW1s2NDAyNiw2NDAyNl0sXCJtYXBwZWRcIixbMzEwNzddXSxbWzY0MDI3LDY0MDI3XSxcIm1hcHBlZFwiLFszMTExOV1dLFtbNjQwMjgsNjQwMjhdLFwibWFwcGVkXCIsWzM4NzQyXV0sW1s2NDAyOSw2NDAyOV0sXCJtYXBwZWRcIixbMzE5MzRdXSxbWzY0MDMwLDY0MDMwXSxcIm1hcHBlZFwiLFszMjcwMV1dLFtbNjQwMzEsNjQwMzFdLFwidmFsaWRcIl0sW1s2NDAzMiw2NDAzMl0sXCJtYXBwZWRcIixbMzQzMjJdXSxbWzY0MDMzLDY0MDMzXSxcInZhbGlkXCJdLFtbNjQwMzQsNjQwMzRdLFwibWFwcGVkXCIsWzM1NTc2XV0sW1s2NDAzNSw2NDAzNl0sXCJ2YWxpZFwiXSxbWzY0MDM3LDY0MDM3XSxcIm1hcHBlZFwiLFszNjkyMF1dLFtbNjQwMzgsNjQwMzhdLFwibWFwcGVkXCIsWzM3MTE3XV0sW1s2NDAzOSw2NDA0MV0sXCJ2YWxpZFwiXSxbWzY0MDQyLDY0MDQyXSxcIm1hcHBlZFwiLFszOTE1MV1dLFtbNjQwNDMsNjQwNDNdLFwibWFwcGVkXCIsWzM5MTY0XV0sW1s2NDA0NCw2NDA0NF0sXCJtYXBwZWRcIixbMzkyMDhdXSxbWzY0MDQ1LDY0MDQ1XSxcIm1hcHBlZFwiLFs0MDM3Ml1dLFtbNjQwNDYsNjQwNDZdLFwibWFwcGVkXCIsWzM3MDg2XV0sW1s2NDA0Nyw2NDA0N10sXCJtYXBwZWRcIixbMzg1ODNdXSxbWzY0MDQ4LDY0MDQ4XSxcIm1hcHBlZFwiLFsyMDM5OF1dLFtbNjQwNDksNjQwNDldLFwibWFwcGVkXCIsWzIwNzExXV0sW1s2NDA1MCw2NDA1MF0sXCJtYXBwZWRcIixbMjA4MTNdXSxbWzY0MDUxLDY0MDUxXSxcIm1hcHBlZFwiLFsyMTE5M11dLFtbNjQwNTIsNjQwNTJdLFwibWFwcGVkXCIsWzIxMjIwXV0sW1s2NDA1Myw2NDA1M10sXCJtYXBwZWRcIixbMjEzMjldXSxbWzY0MDU0LDY0MDU0XSxcIm1hcHBlZFwiLFsyMTkxN11dLFtbNjQwNTUsNjQwNTVdLFwibWFwcGVkXCIsWzIyMDIyXV0sW1s2NDA1Niw2NDA1Nl0sXCJtYXBwZWRcIixbMjIxMjBdXSxbWzY0MDU3LDY0MDU3XSxcIm1hcHBlZFwiLFsyMjU5Ml1dLFtbNjQwNTgsNjQwNThdLFwibWFwcGVkXCIsWzIyNjk2XV0sW1s2NDA1OSw2NDA1OV0sXCJtYXBwZWRcIixbMjM2NTJdXSxbWzY0MDYwLDY0MDYwXSxcIm1hcHBlZFwiLFsyMzY2Ml1dLFtbNjQwNjEsNjQwNjFdLFwibWFwcGVkXCIsWzI0NzI0XV0sW1s2NDA2Miw2NDA2Ml0sXCJtYXBwZWRcIixbMjQ5MzZdXSxbWzY0MDYzLDY0MDYzXSxcIm1hcHBlZFwiLFsyNDk3NF1dLFtbNjQwNjQsNjQwNjRdLFwibWFwcGVkXCIsWzI1MDc0XV0sW1s2NDA2NSw2NDA2NV0sXCJtYXBwZWRcIixbMjU5MzVdXSxbWzY0MDY2LDY0MDY2XSxcIm1hcHBlZFwiLFsyNjA4Ml1dLFtbNjQwNjcsNjQwNjddLFwibWFwcGVkXCIsWzI2MjU3XV0sW1s2NDA2OCw2NDA2OF0sXCJtYXBwZWRcIixbMjY3NTddXSxbWzY0MDY5LDY0MDY5XSxcIm1hcHBlZFwiLFsyODAyM11dLFtbNjQwNzAsNjQwNzBdLFwibWFwcGVkXCIsWzI4MTg2XV0sW1s2NDA3MSw2NDA3MV0sXCJtYXBwZWRcIixbMjg0NTBdXSxbWzY0MDcyLDY0MDcyXSxcIm1hcHBlZFwiLFsyOTAzOF1dLFtbNjQwNzMsNjQwNzNdLFwibWFwcGVkXCIsWzI5MjI3XV0sW1s2NDA3NCw2NDA3NF0sXCJtYXBwZWRcIixbMjk3MzBdXSxbWzY0MDc1LDY0MDc1XSxcIm1hcHBlZFwiLFszMDg2NV1dLFtbNjQwNzYsNjQwNzZdLFwibWFwcGVkXCIsWzMxMDM4XV0sW1s2NDA3Nyw2NDA3N10sXCJtYXBwZWRcIixbMzEwNDldXSxbWzY0MDc4LDY0MDc4XSxcIm1hcHBlZFwiLFszMTA0OF1dLFtbNjQwNzksNjQwNzldLFwibWFwcGVkXCIsWzMxMDU2XV0sW1s2NDA4MCw2NDA4MF0sXCJtYXBwZWRcIixbMzEwNjJdXSxbWzY0MDgxLDY0MDgxXSxcIm1hcHBlZFwiLFszMTA2OV1dLFtbNjQwODIsNjQwODJdLFwibWFwcGVkXCIsWzMxMTE3XV0sW1s2NDA4Myw2NDA4M10sXCJtYXBwZWRcIixbMzExMThdXSxbWzY0MDg0LDY0MDg0XSxcIm1hcHBlZFwiLFszMTI5Nl1dLFtbNjQwODUsNjQwODVdLFwibWFwcGVkXCIsWzMxMzYxXV0sW1s2NDA4Niw2NDA4Nl0sXCJtYXBwZWRcIixbMzE2ODBdXSxbWzY0MDg3LDY0MDg3XSxcIm1hcHBlZFwiLFszMjI0NF1dLFtbNjQwODgsNjQwODhdLFwibWFwcGVkXCIsWzMyMjY1XV0sW1s2NDA4OSw2NDA4OV0sXCJtYXBwZWRcIixbMzIzMjFdXSxbWzY0MDkwLDY0MDkwXSxcIm1hcHBlZFwiLFszMjYyNl1dLFtbNjQwOTEsNjQwOTFdLFwibWFwcGVkXCIsWzMyNzczXV0sW1s2NDA5Miw2NDA5Ml0sXCJtYXBwZWRcIixbMzMyNjFdXSxbWzY0MDkzLDY0MDk0XSxcIm1hcHBlZFwiLFszMzQwMV1dLFtbNjQwOTUsNjQwOTVdLFwibWFwcGVkXCIsWzMzODc5XV0sW1s2NDA5Niw2NDA5Nl0sXCJtYXBwZWRcIixbMzUwODhdXSxbWzY0MDk3LDY0MDk3XSxcIm1hcHBlZFwiLFszNTIyMl1dLFtbNjQwOTgsNjQwOThdLFwibWFwcGVkXCIsWzM1NTg1XV0sW1s2NDA5OSw2NDA5OV0sXCJtYXBwZWRcIixbMzU2NDFdXSxbWzY0MTAwLDY0MTAwXSxcIm1hcHBlZFwiLFszNjA1MV1dLFtbNjQxMDEsNjQxMDFdLFwibWFwcGVkXCIsWzM2MTA0XV0sW1s2NDEwMiw2NDEwMl0sXCJtYXBwZWRcIixbMzY3OTBdXSxbWzY0MTAzLDY0MTAzXSxcIm1hcHBlZFwiLFszNjkyMF1dLFtbNjQxMDQsNjQxMDRdLFwibWFwcGVkXCIsWzM4NjI3XV0sW1s2NDEwNSw2NDEwNV0sXCJtYXBwZWRcIixbMzg5MTFdXSxbWzY0MTA2LDY0MTA2XSxcIm1hcHBlZFwiLFszODk3MV1dLFtbNjQxMDcsNjQxMDddLFwibWFwcGVkXCIsWzI0NjkzXV0sW1s2NDEwOCw2NDEwOF0sXCJtYXBwZWRcIixbMTQ4MjA2XV0sW1s2NDEwOSw2NDEwOV0sXCJtYXBwZWRcIixbMzMzMDRdXSxbWzY0MTEwLDY0MTExXSxcImRpc2FsbG93ZWRcIl0sW1s2NDExMiw2NDExMl0sXCJtYXBwZWRcIixbMjAwMDZdXSxbWzY0MTEzLDY0MTEzXSxcIm1hcHBlZFwiLFsyMDkxN11dLFtbNjQxMTQsNjQxMTRdLFwibWFwcGVkXCIsWzIwODQwXV0sW1s2NDExNSw2NDExNV0sXCJtYXBwZWRcIixbMjAzNTJdXSxbWzY0MTE2LDY0MTE2XSxcIm1hcHBlZFwiLFsyMDgwNV1dLFtbNjQxMTcsNjQxMTddLFwibWFwcGVkXCIsWzIwODY0XV0sW1s2NDExOCw2NDExOF0sXCJtYXBwZWRcIixbMjExOTFdXSxbWzY0MTE5LDY0MTE5XSxcIm1hcHBlZFwiLFsyMTI0Ml1dLFtbNjQxMjAsNjQxMjBdLFwibWFwcGVkXCIsWzIxOTE3XV0sW1s2NDEyMSw2NDEyMV0sXCJtYXBwZWRcIixbMjE4NDVdXSxbWzY0MTIyLDY0MTIyXSxcIm1hcHBlZFwiLFsyMTkxM11dLFtbNjQxMjMsNjQxMjNdLFwibWFwcGVkXCIsWzIxOTg2XV0sW1s2NDEyNCw2NDEyNF0sXCJtYXBwZWRcIixbMjI2MThdXSxbWzY0MTI1LDY0MTI1XSxcIm1hcHBlZFwiLFsyMjcwN11dLFtbNjQxMjYsNjQxMjZdLFwibWFwcGVkXCIsWzIyODUyXV0sW1s2NDEyNyw2NDEyN10sXCJtYXBwZWRcIixbMjI4NjhdXSxbWzY0MTI4LDY0MTI4XSxcIm1hcHBlZFwiLFsyMzEzOF1dLFtbNjQxMjksNjQxMjldLFwibWFwcGVkXCIsWzIzMzM2XV0sW1s2NDEzMCw2NDEzMF0sXCJtYXBwZWRcIixbMjQyNzRdXSxbWzY0MTMxLDY0MTMxXSxcIm1hcHBlZFwiLFsyNDI4MV1dLFtbNjQxMzIsNjQxMzJdLFwibWFwcGVkXCIsWzI0NDI1XV0sW1s2NDEzMyw2NDEzM10sXCJtYXBwZWRcIixbMjQ0OTNdXSxbWzY0MTM0LDY0MTM0XSxcIm1hcHBlZFwiLFsyNDc5Ml1dLFtbNjQxMzUsNjQxMzVdLFwibWFwcGVkXCIsWzI0OTEwXV0sW1s2NDEzNiw2NDEzNl0sXCJtYXBwZWRcIixbMjQ4NDBdXSxbWzY0MTM3LDY0MTM3XSxcIm1hcHBlZFwiLFsyNDk3NF1dLFtbNjQxMzgsNjQxMzhdLFwibWFwcGVkXCIsWzI0OTI4XV0sW1s2NDEzOSw2NDEzOV0sXCJtYXBwZWRcIixbMjUwNzRdXSxbWzY0MTQwLDY0MTQwXSxcIm1hcHBlZFwiLFsyNTE0MF1dLFtbNjQxNDEsNjQxNDFdLFwibWFwcGVkXCIsWzI1NTQwXV0sW1s2NDE0Miw2NDE0Ml0sXCJtYXBwZWRcIixbMjU2MjhdXSxbWzY0MTQzLDY0MTQzXSxcIm1hcHBlZFwiLFsyNTY4Ml1dLFtbNjQxNDQsNjQxNDRdLFwibWFwcGVkXCIsWzI1OTQyXV0sW1s2NDE0NSw2NDE0NV0sXCJtYXBwZWRcIixbMjYyMjhdXSxbWzY0MTQ2LDY0MTQ2XSxcIm1hcHBlZFwiLFsyNjM5MV1dLFtbNjQxNDcsNjQxNDddLFwibWFwcGVkXCIsWzI2Mzk1XV0sW1s2NDE0OCw2NDE0OF0sXCJtYXBwZWRcIixbMjY0NTRdXSxbWzY0MTQ5LDY0MTQ5XSxcIm1hcHBlZFwiLFsyNzUxM11dLFtbNjQxNTAsNjQxNTBdLFwibWFwcGVkXCIsWzI3NTc4XV0sW1s2NDE1MSw2NDE1MV0sXCJtYXBwZWRcIixbMjc5NjldXSxbWzY0MTUyLDY0MTUyXSxcIm1hcHBlZFwiLFsyODM3OV1dLFtbNjQxNTMsNjQxNTNdLFwibWFwcGVkXCIsWzI4MzYzXV0sW1s2NDE1NCw2NDE1NF0sXCJtYXBwZWRcIixbMjg0NTBdXSxbWzY0MTU1LDY0MTU1XSxcIm1hcHBlZFwiLFsyODcwMl1dLFtbNjQxNTYsNjQxNTZdLFwibWFwcGVkXCIsWzI5MDM4XV0sW1s2NDE1Nyw2NDE1N10sXCJtYXBwZWRcIixbMzA2MzFdXSxbWzY0MTU4LDY0MTU4XSxcIm1hcHBlZFwiLFsyOTIzN11dLFtbNjQxNTksNjQxNTldLFwibWFwcGVkXCIsWzI5MzU5XV0sW1s2NDE2MCw2NDE2MF0sXCJtYXBwZWRcIixbMjk0ODJdXSxbWzY0MTYxLDY0MTYxXSxcIm1hcHBlZFwiLFsyOTgwOV1dLFtbNjQxNjIsNjQxNjJdLFwibWFwcGVkXCIsWzI5OTU4XV0sW1s2NDE2Myw2NDE2M10sXCJtYXBwZWRcIixbMzAwMTFdXSxbWzY0MTY0LDY0MTY0XSxcIm1hcHBlZFwiLFszMDIzN11dLFtbNjQxNjUsNjQxNjVdLFwibWFwcGVkXCIsWzMwMjM5XV0sW1s2NDE2Niw2NDE2Nl0sXCJtYXBwZWRcIixbMzA0MTBdXSxbWzY0MTY3LDY0MTY3XSxcIm1hcHBlZFwiLFszMDQyN11dLFtbNjQxNjgsNjQxNjhdLFwibWFwcGVkXCIsWzMwNDUyXV0sW1s2NDE2OSw2NDE2OV0sXCJtYXBwZWRcIixbMzA1MzhdXSxbWzY0MTcwLDY0MTcwXSxcIm1hcHBlZFwiLFszMDUyOF1dLFtbNjQxNzEsNjQxNzFdLFwibWFwcGVkXCIsWzMwOTI0XV0sW1s2NDE3Miw2NDE3Ml0sXCJtYXBwZWRcIixbMzE0MDldXSxbWzY0MTczLDY0MTczXSxcIm1hcHBlZFwiLFszMTY4MF1dLFtbNjQxNzQsNjQxNzRdLFwibWFwcGVkXCIsWzMxODY3XV0sW1s2NDE3NSw2NDE3NV0sXCJtYXBwZWRcIixbMzIwOTFdXSxbWzY0MTc2LDY0MTc2XSxcIm1hcHBlZFwiLFszMjI0NF1dLFtbNjQxNzcsNjQxNzddLFwibWFwcGVkXCIsWzMyNTc0XV0sW1s2NDE3OCw2NDE3OF0sXCJtYXBwZWRcIixbMzI3NzNdXSxbWzY0MTc5LDY0MTc5XSxcIm1hcHBlZFwiLFszMzYxOF1dLFtbNjQxODAsNjQxODBdLFwibWFwcGVkXCIsWzMzNzc1XV0sW1s2NDE4MSw2NDE4MV0sXCJtYXBwZWRcIixbMzQ2ODFdXSxbWzY0MTgyLDY0MTgyXSxcIm1hcHBlZFwiLFszNTEzN11dLFtbNjQxODMsNjQxODNdLFwibWFwcGVkXCIsWzM1MjA2XV0sW1s2NDE4NCw2NDE4NF0sXCJtYXBwZWRcIixbMzUyMjJdXSxbWzY0MTg1LDY0MTg1XSxcIm1hcHBlZFwiLFszNTUxOV1dLFtbNjQxODYsNjQxODZdLFwibWFwcGVkXCIsWzM1NTc2XV0sW1s2NDE4Nyw2NDE4N10sXCJtYXBwZWRcIixbMzU1MzFdXSxbWzY0MTg4LDY0MTg4XSxcIm1hcHBlZFwiLFszNTU4NV1dLFtbNjQxODksNjQxODldLFwibWFwcGVkXCIsWzM1NTgyXV0sW1s2NDE5MCw2NDE5MF0sXCJtYXBwZWRcIixbMzU1NjVdXSxbWzY0MTkxLDY0MTkxXSxcIm1hcHBlZFwiLFszNTY0MV1dLFtbNjQxOTIsNjQxOTJdLFwibWFwcGVkXCIsWzM1NzIyXV0sW1s2NDE5Myw2NDE5M10sXCJtYXBwZWRcIixbMzYxMDRdXSxbWzY0MTk0LDY0MTk0XSxcIm1hcHBlZFwiLFszNjY2NF1dLFtbNjQxOTUsNjQxOTVdLFwibWFwcGVkXCIsWzM2OTc4XV0sW1s2NDE5Niw2NDE5Nl0sXCJtYXBwZWRcIixbMzcyNzNdXSxbWzY0MTk3LDY0MTk3XSxcIm1hcHBlZFwiLFszNzQ5NF1dLFtbNjQxOTgsNjQxOThdLFwibWFwcGVkXCIsWzM4NTI0XV0sW1s2NDE5OSw2NDE5OV0sXCJtYXBwZWRcIixbMzg2MjddXSxbWzY0MjAwLDY0MjAwXSxcIm1hcHBlZFwiLFszODc0Ml1dLFtbNjQyMDEsNjQyMDFdLFwibWFwcGVkXCIsWzM4ODc1XV0sW1s2NDIwMiw2NDIwMl0sXCJtYXBwZWRcIixbMzg5MTFdXSxbWzY0MjAzLDY0MjAzXSxcIm1hcHBlZFwiLFszODkyM11dLFtbNjQyMDQsNjQyMDRdLFwibWFwcGVkXCIsWzM4OTcxXV0sW1s2NDIwNSw2NDIwNV0sXCJtYXBwZWRcIixbMzk2OThdXSxbWzY0MjA2LDY0MjA2XSxcIm1hcHBlZFwiLFs0MDg2MF1dLFtbNjQyMDcsNjQyMDddLFwibWFwcGVkXCIsWzE0MTM4Nl1dLFtbNjQyMDgsNjQyMDhdLFwibWFwcGVkXCIsWzE0MTM4MF1dLFtbNjQyMDksNjQyMDldLFwibWFwcGVkXCIsWzE0NDM0MV1dLFtbNjQyMTAsNjQyMTBdLFwibWFwcGVkXCIsWzE1MjYxXV0sW1s2NDIxMSw2NDIxMV0sXCJtYXBwZWRcIixbMTY0MDhdXSxbWzY0MjEyLDY0MjEyXSxcIm1hcHBlZFwiLFsxNjQ0MV1dLFtbNjQyMTMsNjQyMTNdLFwibWFwcGVkXCIsWzE1MjEzN11dLFtbNjQyMTQsNjQyMTRdLFwibWFwcGVkXCIsWzE1NDgzMl1dLFtbNjQyMTUsNjQyMTVdLFwibWFwcGVkXCIsWzE2MzUzOV1dLFtbNjQyMTYsNjQyMTZdLFwibWFwcGVkXCIsWzQwNzcxXV0sW1s2NDIxNyw2NDIxN10sXCJtYXBwZWRcIixbNDA4NDZdXSxbWzY0MjE4LDY0MjU1XSxcImRpc2FsbG93ZWRcIl0sW1s2NDI1Niw2NDI1Nl0sXCJtYXBwZWRcIixbMTAyLDEwMl1dLFtbNjQyNTcsNjQyNTddLFwibWFwcGVkXCIsWzEwMiwxMDVdXSxbWzY0MjU4LDY0MjU4XSxcIm1hcHBlZFwiLFsxMDIsMTA4XV0sW1s2NDI1OSw2NDI1OV0sXCJtYXBwZWRcIixbMTAyLDEwMiwxMDVdXSxbWzY0MjYwLDY0MjYwXSxcIm1hcHBlZFwiLFsxMDIsMTAyLDEwOF1dLFtbNjQyNjEsNjQyNjJdLFwibWFwcGVkXCIsWzExNSwxMTZdXSxbWzY0MjYzLDY0Mjc0XSxcImRpc2FsbG93ZWRcIl0sW1s2NDI3NSw2NDI3NV0sXCJtYXBwZWRcIixbMTM5NiwxMzk4XV0sW1s2NDI3Niw2NDI3Nl0sXCJtYXBwZWRcIixbMTM5NiwxMzgxXV0sW1s2NDI3Nyw2NDI3N10sXCJtYXBwZWRcIixbMTM5NiwxMzg3XV0sW1s2NDI3OCw2NDI3OF0sXCJtYXBwZWRcIixbMTQwNiwxMzk4XV0sW1s2NDI3OSw2NDI3OV0sXCJtYXBwZWRcIixbMTM5NiwxMzg5XV0sW1s2NDI4MCw2NDI4NF0sXCJkaXNhbGxvd2VkXCJdLFtbNjQyODUsNjQyODVdLFwibWFwcGVkXCIsWzE0OTcsMTQ2MF1dLFtbNjQyODYsNjQyODZdLFwidmFsaWRcIl0sW1s2NDI4Nyw2NDI4N10sXCJtYXBwZWRcIixbMTUyMiwxNDYzXV0sW1s2NDI4OCw2NDI4OF0sXCJtYXBwZWRcIixbMTUwNl1dLFtbNjQyODksNjQyODldLFwibWFwcGVkXCIsWzE0ODhdXSxbWzY0MjkwLDY0MjkwXSxcIm1hcHBlZFwiLFsxNDkxXV0sW1s2NDI5MSw2NDI5MV0sXCJtYXBwZWRcIixbMTQ5Ml1dLFtbNjQyOTIsNjQyOTJdLFwibWFwcGVkXCIsWzE0OTldXSxbWzY0MjkzLDY0MjkzXSxcIm1hcHBlZFwiLFsxNTAwXV0sW1s2NDI5NCw2NDI5NF0sXCJtYXBwZWRcIixbMTUwMV1dLFtbNjQyOTUsNjQyOTVdLFwibWFwcGVkXCIsWzE1MTJdXSxbWzY0Mjk2LDY0Mjk2XSxcIm1hcHBlZFwiLFsxNTE0XV0sW1s2NDI5Nyw2NDI5N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQzXV0sW1s2NDI5OCw2NDI5OF0sXCJtYXBwZWRcIixbMTUxMywxNDczXV0sW1s2NDI5OSw2NDI5OV0sXCJtYXBwZWRcIixbMTUxMywxNDc0XV0sW1s2NDMwMCw2NDMwMF0sXCJtYXBwZWRcIixbMTUxMywxNDY4LDE0NzNdXSxbWzY0MzAxLDY0MzAxXSxcIm1hcHBlZFwiLFsxNTEzLDE0NjgsMTQ3NF1dLFtbNjQzMDIsNjQzMDJdLFwibWFwcGVkXCIsWzE0ODgsMTQ2M11dLFtbNjQzMDMsNjQzMDNdLFwibWFwcGVkXCIsWzE0ODgsMTQ2NF1dLFtbNjQzMDQsNjQzMDRdLFwibWFwcGVkXCIsWzE0ODgsMTQ2OF1dLFtbNjQzMDUsNjQzMDVdLFwibWFwcGVkXCIsWzE0ODksMTQ2OF1dLFtbNjQzMDYsNjQzMDZdLFwibWFwcGVkXCIsWzE0OTAsMTQ2OF1dLFtbNjQzMDcsNjQzMDddLFwibWFwcGVkXCIsWzE0OTEsMTQ2OF1dLFtbNjQzMDgsNjQzMDhdLFwibWFwcGVkXCIsWzE0OTIsMTQ2OF1dLFtbNjQzMDksNjQzMDldLFwibWFwcGVkXCIsWzE0OTMsMTQ2OF1dLFtbNjQzMTAsNjQzMTBdLFwibWFwcGVkXCIsWzE0OTQsMTQ2OF1dLFtbNjQzMTEsNjQzMTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY0MzEyLDY0MzEyXSxcIm1hcHBlZFwiLFsxNDk2LDE0NjhdXSxbWzY0MzEzLDY0MzEzXSxcIm1hcHBlZFwiLFsxNDk3LDE0NjhdXSxbWzY0MzE0LDY0MzE0XSxcIm1hcHBlZFwiLFsxNDk4LDE0NjhdXSxbWzY0MzE1LDY0MzE1XSxcIm1hcHBlZFwiLFsxNDk5LDE0NjhdXSxbWzY0MzE2LDY0MzE2XSxcIm1hcHBlZFwiLFsxNTAwLDE0NjhdXSxbWzY0MzE3LDY0MzE3XSxcImRpc2FsbG93ZWRcIl0sW1s2NDMxOCw2NDMxOF0sXCJtYXBwZWRcIixbMTUwMiwxNDY4XV0sW1s2NDMxOSw2NDMxOV0sXCJkaXNhbGxvd2VkXCJdLFtbNjQzMjAsNjQzMjBdLFwibWFwcGVkXCIsWzE1MDQsMTQ2OF1dLFtbNjQzMjEsNjQzMjFdLFwibWFwcGVkXCIsWzE1MDUsMTQ2OF1dLFtbNjQzMjIsNjQzMjJdLFwiZGlzYWxsb3dlZFwiXSxbWzY0MzIzLDY0MzIzXSxcIm1hcHBlZFwiLFsxNTA3LDE0NjhdXSxbWzY0MzI0LDY0MzI0XSxcIm1hcHBlZFwiLFsxNTA4LDE0NjhdXSxbWzY0MzI1LDY0MzI1XSxcImRpc2FsbG93ZWRcIl0sW1s2NDMyNiw2NDMyNl0sXCJtYXBwZWRcIixbMTUxMCwxNDY4XV0sW1s2NDMyNyw2NDMyN10sXCJtYXBwZWRcIixbMTUxMSwxNDY4XV0sW1s2NDMyOCw2NDMyOF0sXCJtYXBwZWRcIixbMTUxMiwxNDY4XV0sW1s2NDMyOSw2NDMyOV0sXCJtYXBwZWRcIixbMTUxMywxNDY4XV0sW1s2NDMzMCw2NDMzMF0sXCJtYXBwZWRcIixbMTUxNCwxNDY4XV0sW1s2NDMzMSw2NDMzMV0sXCJtYXBwZWRcIixbMTQ5MywxNDY1XV0sW1s2NDMzMiw2NDMzMl0sXCJtYXBwZWRcIixbMTQ4OSwxNDcxXV0sW1s2NDMzMyw2NDMzM10sXCJtYXBwZWRcIixbMTQ5OSwxNDcxXV0sW1s2NDMzNCw2NDMzNF0sXCJtYXBwZWRcIixbMTUwOCwxNDcxXV0sW1s2NDMzNSw2NDMzNV0sXCJtYXBwZWRcIixbMTQ4OCwxNTAwXV0sW1s2NDMzNiw2NDMzN10sXCJtYXBwZWRcIixbMTY0OV1dLFtbNjQzMzgsNjQzNDFdLFwibWFwcGVkXCIsWzE2NTldXSxbWzY0MzQyLDY0MzQ1XSxcIm1hcHBlZFwiLFsxNjYyXV0sW1s2NDM0Niw2NDM0OV0sXCJtYXBwZWRcIixbMTY2NF1dLFtbNjQzNTAsNjQzNTNdLFwibWFwcGVkXCIsWzE2NThdXSxbWzY0MzU0LDY0MzU3XSxcIm1hcHBlZFwiLFsxNjYzXV0sW1s2NDM1OCw2NDM2MV0sXCJtYXBwZWRcIixbMTY1N11dLFtbNjQzNjIsNjQzNjVdLFwibWFwcGVkXCIsWzE3MDBdXSxbWzY0MzY2LDY0MzY5XSxcIm1hcHBlZFwiLFsxNzAyXV0sW1s2NDM3MCw2NDM3M10sXCJtYXBwZWRcIixbMTY2OF1dLFtbNjQzNzQsNjQzNzddLFwibWFwcGVkXCIsWzE2NjddXSxbWzY0Mzc4LDY0MzgxXSxcIm1hcHBlZFwiLFsxNjcwXV0sW1s2NDM4Miw2NDM4NV0sXCJtYXBwZWRcIixbMTY3MV1dLFtbNjQzODYsNjQzODddLFwibWFwcGVkXCIsWzE2NzddXSxbWzY0Mzg4LDY0Mzg5XSxcIm1hcHBlZFwiLFsxNjc2XV0sW1s2NDM5MCw2NDM5MV0sXCJtYXBwZWRcIixbMTY3OF1dLFtbNjQzOTIsNjQzOTNdLFwibWFwcGVkXCIsWzE2NzJdXSxbWzY0Mzk0LDY0Mzk1XSxcIm1hcHBlZFwiLFsxNjg4XV0sW1s2NDM5Niw2NDM5N10sXCJtYXBwZWRcIixbMTY4MV1dLFtbNjQzOTgsNjQ0MDFdLFwibWFwcGVkXCIsWzE3MDVdXSxbWzY0NDAyLDY0NDA1XSxcIm1hcHBlZFwiLFsxNzExXV0sW1s2NDQwNiw2NDQwOV0sXCJtYXBwZWRcIixbMTcxNV1dLFtbNjQ0MTAsNjQ0MTNdLFwibWFwcGVkXCIsWzE3MTNdXSxbWzY0NDE0LDY0NDE1XSxcIm1hcHBlZFwiLFsxNzIyXV0sW1s2NDQxNiw2NDQxOV0sXCJtYXBwZWRcIixbMTcyM11dLFtbNjQ0MjAsNjQ0MjFdLFwibWFwcGVkXCIsWzE3MjhdXSxbWzY0NDIyLDY0NDI1XSxcIm1hcHBlZFwiLFsxNzI5XV0sW1s2NDQyNiw2NDQyOV0sXCJtYXBwZWRcIixbMTcyNl1dLFtbNjQ0MzAsNjQ0MzFdLFwibWFwcGVkXCIsWzE3NDZdXSxbWzY0NDMyLDY0NDMzXSxcIm1hcHBlZFwiLFsxNzQ3XV0sW1s2NDQzNCw2NDQ0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjQ0NTAsNjQ0NjZdLFwiZGlzYWxsb3dlZFwiXSxbWzY0NDY3LDY0NDcwXSxcIm1hcHBlZFwiLFsxNzA5XV0sW1s2NDQ3MSw2NDQ3Ml0sXCJtYXBwZWRcIixbMTczNV1dLFtbNjQ0NzMsNjQ0NzRdLFwibWFwcGVkXCIsWzE3MzRdXSxbWzY0NDc1LDY0NDc2XSxcIm1hcHBlZFwiLFsxNzM2XV0sW1s2NDQ3Nyw2NDQ3N10sXCJtYXBwZWRcIixbMTczNSwxNjUyXV0sW1s2NDQ3OCw2NDQ3OV0sXCJtYXBwZWRcIixbMTczOV1dLFtbNjQ0ODAsNjQ0ODFdLFwibWFwcGVkXCIsWzE3MzNdXSxbWzY0NDgyLDY0NDgzXSxcIm1hcHBlZFwiLFsxNzM3XV0sW1s2NDQ4NCw2NDQ4N10sXCJtYXBwZWRcIixbMTc0NF1dLFtbNjQ0ODgsNjQ0ODldLFwibWFwcGVkXCIsWzE2MDldXSxbWzY0NDkwLDY0NDkxXSxcIm1hcHBlZFwiLFsxNTc0LDE1NzVdXSxbWzY0NDkyLDY0NDkzXSxcIm1hcHBlZFwiLFsxNTc0LDE3NDldXSxbWzY0NDk0LDY0NDk1XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDhdXSxbWzY0NDk2LDY0NDk3XSxcIm1hcHBlZFwiLFsxNTc0LDE3MzVdXSxbWzY0NDk4LDY0NDk5XSxcIm1hcHBlZFwiLFsxNTc0LDE3MzRdXSxbWzY0NTAwLDY0NTAxXSxcIm1hcHBlZFwiLFsxNTc0LDE3MzZdXSxbWzY0NTAyLDY0NTA0XSxcIm1hcHBlZFwiLFsxNTc0LDE3NDRdXSxbWzY0NTA1LDY0NTA3XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDldXSxbWzY0NTA4LDY0NTExXSxcIm1hcHBlZFwiLFsxNzQwXV0sW1s2NDUxMiw2NDUxMl0sXCJtYXBwZWRcIixbMTU3NCwxNTgwXV0sW1s2NDUxMyw2NDUxM10sXCJtYXBwZWRcIixbMTU3NCwxNTgxXV0sW1s2NDUxNCw2NDUxNF0sXCJtYXBwZWRcIixbMTU3NCwxNjA1XV0sW1s2NDUxNSw2NDUxNV0sXCJtYXBwZWRcIixbMTU3NCwxNjA5XV0sW1s2NDUxNiw2NDUxNl0sXCJtYXBwZWRcIixbMTU3NCwxNjEwXV0sW1s2NDUxNyw2NDUxN10sXCJtYXBwZWRcIixbMTU3NiwxNTgwXV0sW1s2NDUxOCw2NDUxOF0sXCJtYXBwZWRcIixbMTU3NiwxNTgxXV0sW1s2NDUxOSw2NDUxOV0sXCJtYXBwZWRcIixbMTU3NiwxNTgyXV0sW1s2NDUyMCw2NDUyMF0sXCJtYXBwZWRcIixbMTU3NiwxNjA1XV0sW1s2NDUyMSw2NDUyMV0sXCJtYXBwZWRcIixbMTU3NiwxNjA5XV0sW1s2NDUyMiw2NDUyMl0sXCJtYXBwZWRcIixbMTU3NiwxNjEwXV0sW1s2NDUyMyw2NDUyM10sXCJtYXBwZWRcIixbMTU3OCwxNTgwXV0sW1s2NDUyNCw2NDUyNF0sXCJtYXBwZWRcIixbMTU3OCwxNTgxXV0sW1s2NDUyNSw2NDUyNV0sXCJtYXBwZWRcIixbMTU3OCwxNTgyXV0sW1s2NDUyNiw2NDUyNl0sXCJtYXBwZWRcIixbMTU3OCwxNjA1XV0sW1s2NDUyNyw2NDUyN10sXCJtYXBwZWRcIixbMTU3OCwxNjA5XV0sW1s2NDUyOCw2NDUyOF0sXCJtYXBwZWRcIixbMTU3OCwxNjEwXV0sW1s2NDUyOSw2NDUyOV0sXCJtYXBwZWRcIixbMTU3OSwxNTgwXV0sW1s2NDUzMCw2NDUzMF0sXCJtYXBwZWRcIixbMTU3OSwxNjA1XV0sW1s2NDUzMSw2NDUzMV0sXCJtYXBwZWRcIixbMTU3OSwxNjA5XV0sW1s2NDUzMiw2NDUzMl0sXCJtYXBwZWRcIixbMTU3OSwxNjEwXV0sW1s2NDUzMyw2NDUzM10sXCJtYXBwZWRcIixbMTU4MCwxNTgxXV0sW1s2NDUzNCw2NDUzNF0sXCJtYXBwZWRcIixbMTU4MCwxNjA1XV0sW1s2NDUzNSw2NDUzNV0sXCJtYXBwZWRcIixbMTU4MSwxNTgwXV0sW1s2NDUzNiw2NDUzNl0sXCJtYXBwZWRcIixbMTU4MSwxNjA1XV0sW1s2NDUzNyw2NDUzN10sXCJtYXBwZWRcIixbMTU4MiwxNTgwXV0sW1s2NDUzOCw2NDUzOF0sXCJtYXBwZWRcIixbMTU4MiwxNTgxXV0sW1s2NDUzOSw2NDUzOV0sXCJtYXBwZWRcIixbMTU4MiwxNjA1XV0sW1s2NDU0MCw2NDU0MF0sXCJtYXBwZWRcIixbMTU4NywxNTgwXV0sW1s2NDU0MSw2NDU0MV0sXCJtYXBwZWRcIixbMTU4NywxNTgxXV0sW1s2NDU0Miw2NDU0Ml0sXCJtYXBwZWRcIixbMTU4NywxNTgyXV0sW1s2NDU0Myw2NDU0M10sXCJtYXBwZWRcIixbMTU4NywxNjA1XV0sW1s2NDU0NCw2NDU0NF0sXCJtYXBwZWRcIixbMTU4OSwxNTgxXV0sW1s2NDU0NSw2NDU0NV0sXCJtYXBwZWRcIixbMTU4OSwxNjA1XV0sW1s2NDU0Niw2NDU0Nl0sXCJtYXBwZWRcIixbMTU5MCwxNTgwXV0sW1s2NDU0Nyw2NDU0N10sXCJtYXBwZWRcIixbMTU5MCwxNTgxXV0sW1s2NDU0OCw2NDU0OF0sXCJtYXBwZWRcIixbMTU5MCwxNTgyXV0sW1s2NDU0OSw2NDU0OV0sXCJtYXBwZWRcIixbMTU5MCwxNjA1XV0sW1s2NDU1MCw2NDU1MF0sXCJtYXBwZWRcIixbMTU5MSwxNTgxXV0sW1s2NDU1MSw2NDU1MV0sXCJtYXBwZWRcIixbMTU5MSwxNjA1XV0sW1s2NDU1Miw2NDU1Ml0sXCJtYXBwZWRcIixbMTU5MiwxNjA1XV0sW1s2NDU1Myw2NDU1M10sXCJtYXBwZWRcIixbMTU5MywxNTgwXV0sW1s2NDU1NCw2NDU1NF0sXCJtYXBwZWRcIixbMTU5MywxNjA1XV0sW1s2NDU1NSw2NDU1NV0sXCJtYXBwZWRcIixbMTU5NCwxNTgwXV0sW1s2NDU1Niw2NDU1Nl0sXCJtYXBwZWRcIixbMTU5NCwxNjA1XV0sW1s2NDU1Nyw2NDU1N10sXCJtYXBwZWRcIixbMTYwMSwxNTgwXV0sW1s2NDU1OCw2NDU1OF0sXCJtYXBwZWRcIixbMTYwMSwxNTgxXV0sW1s2NDU1OSw2NDU1OV0sXCJtYXBwZWRcIixbMTYwMSwxNTgyXV0sW1s2NDU2MCw2NDU2MF0sXCJtYXBwZWRcIixbMTYwMSwxNjA1XV0sW1s2NDU2MSw2NDU2MV0sXCJtYXBwZWRcIixbMTYwMSwxNjA5XV0sW1s2NDU2Miw2NDU2Ml0sXCJtYXBwZWRcIixbMTYwMSwxNjEwXV0sW1s2NDU2Myw2NDU2M10sXCJtYXBwZWRcIixbMTYwMiwxNTgxXV0sW1s2NDU2NCw2NDU2NF0sXCJtYXBwZWRcIixbMTYwMiwxNjA1XV0sW1s2NDU2NSw2NDU2NV0sXCJtYXBwZWRcIixbMTYwMiwxNjA5XV0sW1s2NDU2Niw2NDU2Nl0sXCJtYXBwZWRcIixbMTYwMiwxNjEwXV0sW1s2NDU2Nyw2NDU2N10sXCJtYXBwZWRcIixbMTYwMywxNTc1XV0sW1s2NDU2OCw2NDU2OF0sXCJtYXBwZWRcIixbMTYwMywxNTgwXV0sW1s2NDU2OSw2NDU2OV0sXCJtYXBwZWRcIixbMTYwMywxNTgxXV0sW1s2NDU3MCw2NDU3MF0sXCJtYXBwZWRcIixbMTYwMywxNTgyXV0sW1s2NDU3MSw2NDU3MV0sXCJtYXBwZWRcIixbMTYwMywxNjA0XV0sW1s2NDU3Miw2NDU3Ml0sXCJtYXBwZWRcIixbMTYwMywxNjA1XV0sW1s2NDU3Myw2NDU3M10sXCJtYXBwZWRcIixbMTYwMywxNjA5XV0sW1s2NDU3NCw2NDU3NF0sXCJtYXBwZWRcIixbMTYwMywxNjEwXV0sW1s2NDU3NSw2NDU3NV0sXCJtYXBwZWRcIixbMTYwNCwxNTgwXV0sW1s2NDU3Niw2NDU3Nl0sXCJtYXBwZWRcIixbMTYwNCwxNTgxXV0sW1s2NDU3Nyw2NDU3N10sXCJtYXBwZWRcIixbMTYwNCwxNTgyXV0sW1s2NDU3OCw2NDU3OF0sXCJtYXBwZWRcIixbMTYwNCwxNjA1XV0sW1s2NDU3OSw2NDU3OV0sXCJtYXBwZWRcIixbMTYwNCwxNjA5XV0sW1s2NDU4MCw2NDU4MF0sXCJtYXBwZWRcIixbMTYwNCwxNjEwXV0sW1s2NDU4MSw2NDU4MV0sXCJtYXBwZWRcIixbMTYwNSwxNTgwXV0sW1s2NDU4Miw2NDU4Ml0sXCJtYXBwZWRcIixbMTYwNSwxNTgxXV0sW1s2NDU4Myw2NDU4M10sXCJtYXBwZWRcIixbMTYwNSwxNTgyXV0sW1s2NDU4NCw2NDU4NF0sXCJtYXBwZWRcIixbMTYwNSwxNjA1XV0sW1s2NDU4NSw2NDU4NV0sXCJtYXBwZWRcIixbMTYwNSwxNjA5XV0sW1s2NDU4Niw2NDU4Nl0sXCJtYXBwZWRcIixbMTYwNSwxNjEwXV0sW1s2NDU4Nyw2NDU4N10sXCJtYXBwZWRcIixbMTYwNiwxNTgwXV0sW1s2NDU4OCw2NDU4OF0sXCJtYXBwZWRcIixbMTYwNiwxNTgxXV0sW1s2NDU4OSw2NDU4OV0sXCJtYXBwZWRcIixbMTYwNiwxNTgyXV0sW1s2NDU5MCw2NDU5MF0sXCJtYXBwZWRcIixbMTYwNiwxNjA1XV0sW1s2NDU5MSw2NDU5MV0sXCJtYXBwZWRcIixbMTYwNiwxNjA5XV0sW1s2NDU5Miw2NDU5Ml0sXCJtYXBwZWRcIixbMTYwNiwxNjEwXV0sW1s2NDU5Myw2NDU5M10sXCJtYXBwZWRcIixbMTYwNywxNTgwXV0sW1s2NDU5NCw2NDU5NF0sXCJtYXBwZWRcIixbMTYwNywxNjA1XV0sW1s2NDU5NSw2NDU5NV0sXCJtYXBwZWRcIixbMTYwNywxNjA5XV0sW1s2NDU5Niw2NDU5Nl0sXCJtYXBwZWRcIixbMTYwNywxNjEwXV0sW1s2NDU5Nyw2NDU5N10sXCJtYXBwZWRcIixbMTYxMCwxNTgwXV0sW1s2NDU5OCw2NDU5OF0sXCJtYXBwZWRcIixbMTYxMCwxNTgxXV0sW1s2NDU5OSw2NDU5OV0sXCJtYXBwZWRcIixbMTYxMCwxNTgyXV0sW1s2NDYwMCw2NDYwMF0sXCJtYXBwZWRcIixbMTYxMCwxNjA1XV0sW1s2NDYwMSw2NDYwMV0sXCJtYXBwZWRcIixbMTYxMCwxNjA5XV0sW1s2NDYwMiw2NDYwMl0sXCJtYXBwZWRcIixbMTYxMCwxNjEwXV0sW1s2NDYwMyw2NDYwM10sXCJtYXBwZWRcIixbMTU4NCwxNjQ4XV0sW1s2NDYwNCw2NDYwNF0sXCJtYXBwZWRcIixbMTU4NSwxNjQ4XV0sW1s2NDYwNSw2NDYwNV0sXCJtYXBwZWRcIixbMTYwOSwxNjQ4XV0sW1s2NDYwNiw2NDYwNl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTIsMTYxN11dLFtbNjQ2MDcsNjQ2MDddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjEzLDE2MTddXSxbWzY0NjA4LDY0NjA4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTYxNCwxNjE3XV0sW1s2NDYwOSw2NDYwOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTUsMTYxN11dLFtbNjQ2MTAsNjQ2MTBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjE2LDE2MTddXSxbWzY0NjExLDY0NjExXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTYxNywxNjQ4XV0sW1s2NDYxMiw2NDYxMl0sXCJtYXBwZWRcIixbMTU3NCwxNTg1XV0sW1s2NDYxMyw2NDYxM10sXCJtYXBwZWRcIixbMTU3NCwxNTg2XV0sW1s2NDYxNCw2NDYxNF0sXCJtYXBwZWRcIixbMTU3NCwxNjA1XV0sW1s2NDYxNSw2NDYxNV0sXCJtYXBwZWRcIixbMTU3NCwxNjA2XV0sW1s2NDYxNiw2NDYxNl0sXCJtYXBwZWRcIixbMTU3NCwxNjA5XV0sW1s2NDYxNyw2NDYxN10sXCJtYXBwZWRcIixbMTU3NCwxNjEwXV0sW1s2NDYxOCw2NDYxOF0sXCJtYXBwZWRcIixbMTU3NiwxNTg1XV0sW1s2NDYxOSw2NDYxOV0sXCJtYXBwZWRcIixbMTU3NiwxNTg2XV0sW1s2NDYyMCw2NDYyMF0sXCJtYXBwZWRcIixbMTU3NiwxNjA1XV0sW1s2NDYyMSw2NDYyMV0sXCJtYXBwZWRcIixbMTU3NiwxNjA2XV0sW1s2NDYyMiw2NDYyMl0sXCJtYXBwZWRcIixbMTU3NiwxNjA5XV0sW1s2NDYyMyw2NDYyM10sXCJtYXBwZWRcIixbMTU3NiwxNjEwXV0sW1s2NDYyNCw2NDYyNF0sXCJtYXBwZWRcIixbMTU3OCwxNTg1XV0sW1s2NDYyNSw2NDYyNV0sXCJtYXBwZWRcIixbMTU3OCwxNTg2XV0sW1s2NDYyNiw2NDYyNl0sXCJtYXBwZWRcIixbMTU3OCwxNjA1XV0sW1s2NDYyNyw2NDYyN10sXCJtYXBwZWRcIixbMTU3OCwxNjA2XV0sW1s2NDYyOCw2NDYyOF0sXCJtYXBwZWRcIixbMTU3OCwxNjA5XV0sW1s2NDYyOSw2NDYyOV0sXCJtYXBwZWRcIixbMTU3OCwxNjEwXV0sW1s2NDYzMCw2NDYzMF0sXCJtYXBwZWRcIixbMTU3OSwxNTg1XV0sW1s2NDYzMSw2NDYzMV0sXCJtYXBwZWRcIixbMTU3OSwxNTg2XV0sW1s2NDYzMiw2NDYzMl0sXCJtYXBwZWRcIixbMTU3OSwxNjA1XV0sW1s2NDYzMyw2NDYzM10sXCJtYXBwZWRcIixbMTU3OSwxNjA2XV0sW1s2NDYzNCw2NDYzNF0sXCJtYXBwZWRcIixbMTU3OSwxNjA5XV0sW1s2NDYzNSw2NDYzNV0sXCJtYXBwZWRcIixbMTU3OSwxNjEwXV0sW1s2NDYzNiw2NDYzNl0sXCJtYXBwZWRcIixbMTYwMSwxNjA5XV0sW1s2NDYzNyw2NDYzN10sXCJtYXBwZWRcIixbMTYwMSwxNjEwXV0sW1s2NDYzOCw2NDYzOF0sXCJtYXBwZWRcIixbMTYwMiwxNjA5XV0sW1s2NDYzOSw2NDYzOV0sXCJtYXBwZWRcIixbMTYwMiwxNjEwXV0sW1s2NDY0MCw2NDY0MF0sXCJtYXBwZWRcIixbMTYwMywxNTc1XV0sW1s2NDY0MSw2NDY0MV0sXCJtYXBwZWRcIixbMTYwMywxNjA0XV0sW1s2NDY0Miw2NDY0Ml0sXCJtYXBwZWRcIixbMTYwMywxNjA1XV0sW1s2NDY0Myw2NDY0M10sXCJtYXBwZWRcIixbMTYwMywxNjA5XV0sW1s2NDY0NCw2NDY0NF0sXCJtYXBwZWRcIixbMTYwMywxNjEwXV0sW1s2NDY0NSw2NDY0NV0sXCJtYXBwZWRcIixbMTYwNCwxNjA1XV0sW1s2NDY0Niw2NDY0Nl0sXCJtYXBwZWRcIixbMTYwNCwxNjA5XV0sW1s2NDY0Nyw2NDY0N10sXCJtYXBwZWRcIixbMTYwNCwxNjEwXV0sW1s2NDY0OCw2NDY0OF0sXCJtYXBwZWRcIixbMTYwNSwxNTc1XV0sW1s2NDY0OSw2NDY0OV0sXCJtYXBwZWRcIixbMTYwNSwxNjA1XV0sW1s2NDY1MCw2NDY1MF0sXCJtYXBwZWRcIixbMTYwNiwxNTg1XV0sW1s2NDY1MSw2NDY1MV0sXCJtYXBwZWRcIixbMTYwNiwxNTg2XV0sW1s2NDY1Miw2NDY1Ml0sXCJtYXBwZWRcIixbMTYwNiwxNjA1XV0sW1s2NDY1Myw2NDY1M10sXCJtYXBwZWRcIixbMTYwNiwxNjA2XV0sW1s2NDY1NCw2NDY1NF0sXCJtYXBwZWRcIixbMTYwNiwxNjA5XV0sW1s2NDY1NSw2NDY1NV0sXCJtYXBwZWRcIixbMTYwNiwxNjEwXV0sW1s2NDY1Niw2NDY1Nl0sXCJtYXBwZWRcIixbMTYwOSwxNjQ4XV0sW1s2NDY1Nyw2NDY1N10sXCJtYXBwZWRcIixbMTYxMCwxNTg1XV0sW1s2NDY1OCw2NDY1OF0sXCJtYXBwZWRcIixbMTYxMCwxNTg2XV0sW1s2NDY1OSw2NDY1OV0sXCJtYXBwZWRcIixbMTYxMCwxNjA1XV0sW1s2NDY2MCw2NDY2MF0sXCJtYXBwZWRcIixbMTYxMCwxNjA2XV0sW1s2NDY2MSw2NDY2MV0sXCJtYXBwZWRcIixbMTYxMCwxNjA5XV0sW1s2NDY2Miw2NDY2Ml0sXCJtYXBwZWRcIixbMTYxMCwxNjEwXV0sW1s2NDY2Myw2NDY2M10sXCJtYXBwZWRcIixbMTU3NCwxNTgwXV0sW1s2NDY2NCw2NDY2NF0sXCJtYXBwZWRcIixbMTU3NCwxNTgxXV0sW1s2NDY2NSw2NDY2NV0sXCJtYXBwZWRcIixbMTU3NCwxNTgyXV0sW1s2NDY2Niw2NDY2Nl0sXCJtYXBwZWRcIixbMTU3NCwxNjA1XV0sW1s2NDY2Nyw2NDY2N10sXCJtYXBwZWRcIixbMTU3NCwxNjA3XV0sW1s2NDY2OCw2NDY2OF0sXCJtYXBwZWRcIixbMTU3NiwxNTgwXV0sW1s2NDY2OSw2NDY2OV0sXCJtYXBwZWRcIixbMTU3NiwxNTgxXV0sW1s2NDY3MCw2NDY3MF0sXCJtYXBwZWRcIixbMTU3NiwxNTgyXV0sW1s2NDY3MSw2NDY3MV0sXCJtYXBwZWRcIixbMTU3NiwxNjA1XV0sW1s2NDY3Miw2NDY3Ml0sXCJtYXBwZWRcIixbMTU3NiwxNjA3XV0sW1s2NDY3Myw2NDY3M10sXCJtYXBwZWRcIixbMTU3OCwxNTgwXV0sW1s2NDY3NCw2NDY3NF0sXCJtYXBwZWRcIixbMTU3OCwxNTgxXV0sW1s2NDY3NSw2NDY3NV0sXCJtYXBwZWRcIixbMTU3OCwxNTgyXV0sW1s2NDY3Niw2NDY3Nl0sXCJtYXBwZWRcIixbMTU3OCwxNjA1XV0sW1s2NDY3Nyw2NDY3N10sXCJtYXBwZWRcIixbMTU3OCwxNjA3XV0sW1s2NDY3OCw2NDY3OF0sXCJtYXBwZWRcIixbMTU3OSwxNjA1XV0sW1s2NDY3OSw2NDY3OV0sXCJtYXBwZWRcIixbMTU4MCwxNTgxXV0sW1s2NDY4MCw2NDY4MF0sXCJtYXBwZWRcIixbMTU4MCwxNjA1XV0sW1s2NDY4MSw2NDY4MV0sXCJtYXBwZWRcIixbMTU4MSwxNTgwXV0sW1s2NDY4Miw2NDY4Ml0sXCJtYXBwZWRcIixbMTU4MSwxNjA1XV0sW1s2NDY4Myw2NDY4M10sXCJtYXBwZWRcIixbMTU4MiwxNTgwXV0sW1s2NDY4NCw2NDY4NF0sXCJtYXBwZWRcIixbMTU4MiwxNjA1XV0sW1s2NDY4NSw2NDY4NV0sXCJtYXBwZWRcIixbMTU4NywxNTgwXV0sW1s2NDY4Niw2NDY4Nl0sXCJtYXBwZWRcIixbMTU4NywxNTgxXV0sW1s2NDY4Nyw2NDY4N10sXCJtYXBwZWRcIixbMTU4NywxNTgyXV0sW1s2NDY4OCw2NDY4OF0sXCJtYXBwZWRcIixbMTU4NywxNjA1XV0sW1s2NDY4OSw2NDY4OV0sXCJtYXBwZWRcIixbMTU4OSwxNTgxXV0sW1s2NDY5MCw2NDY5MF0sXCJtYXBwZWRcIixbMTU4OSwxNTgyXV0sW1s2NDY5MSw2NDY5MV0sXCJtYXBwZWRcIixbMTU4OSwxNjA1XV0sW1s2NDY5Miw2NDY5Ml0sXCJtYXBwZWRcIixbMTU5MCwxNTgwXV0sW1s2NDY5Myw2NDY5M10sXCJtYXBwZWRcIixbMTU5MCwxNTgxXV0sW1s2NDY5NCw2NDY5NF0sXCJtYXBwZWRcIixbMTU5MCwxNTgyXV0sW1s2NDY5NSw2NDY5NV0sXCJtYXBwZWRcIixbMTU5MCwxNjA1XV0sW1s2NDY5Niw2NDY5Nl0sXCJtYXBwZWRcIixbMTU5MSwxNTgxXV0sW1s2NDY5Nyw2NDY5N10sXCJtYXBwZWRcIixbMTU5MiwxNjA1XV0sW1s2NDY5OCw2NDY5OF0sXCJtYXBwZWRcIixbMTU5MywxNTgwXV0sW1s2NDY5OSw2NDY5OV0sXCJtYXBwZWRcIixbMTU5MywxNjA1XV0sW1s2NDcwMCw2NDcwMF0sXCJtYXBwZWRcIixbMTU5NCwxNTgwXV0sW1s2NDcwMSw2NDcwMV0sXCJtYXBwZWRcIixbMTU5NCwxNjA1XV0sW1s2NDcwMiw2NDcwMl0sXCJtYXBwZWRcIixbMTYwMSwxNTgwXV0sW1s2NDcwMyw2NDcwM10sXCJtYXBwZWRcIixbMTYwMSwxNTgxXV0sW1s2NDcwNCw2NDcwNF0sXCJtYXBwZWRcIixbMTYwMSwxNTgyXV0sW1s2NDcwNSw2NDcwNV0sXCJtYXBwZWRcIixbMTYwMSwxNjA1XV0sW1s2NDcwNiw2NDcwNl0sXCJtYXBwZWRcIixbMTYwMiwxNTgxXV0sW1s2NDcwNyw2NDcwN10sXCJtYXBwZWRcIixbMTYwMiwxNjA1XV0sW1s2NDcwOCw2NDcwOF0sXCJtYXBwZWRcIixbMTYwMywxNTgwXV0sW1s2NDcwOSw2NDcwOV0sXCJtYXBwZWRcIixbMTYwMywxNTgxXV0sW1s2NDcxMCw2NDcxMF0sXCJtYXBwZWRcIixbMTYwMywxNTgyXV0sW1s2NDcxMSw2NDcxMV0sXCJtYXBwZWRcIixbMTYwMywxNjA0XV0sW1s2NDcxMiw2NDcxMl0sXCJtYXBwZWRcIixbMTYwMywxNjA1XV0sW1s2NDcxMyw2NDcxM10sXCJtYXBwZWRcIixbMTYwNCwxNTgwXV0sW1s2NDcxNCw2NDcxNF0sXCJtYXBwZWRcIixbMTYwNCwxNTgxXV0sW1s2NDcxNSw2NDcxNV0sXCJtYXBwZWRcIixbMTYwNCwxNTgyXV0sW1s2NDcxNiw2NDcxNl0sXCJtYXBwZWRcIixbMTYwNCwxNjA1XV0sW1s2NDcxNyw2NDcxN10sXCJtYXBwZWRcIixbMTYwNCwxNjA3XV0sW1s2NDcxOCw2NDcxOF0sXCJtYXBwZWRcIixbMTYwNSwxNTgwXV0sW1s2NDcxOSw2NDcxOV0sXCJtYXBwZWRcIixbMTYwNSwxNTgxXV0sW1s2NDcyMCw2NDcyMF0sXCJtYXBwZWRcIixbMTYwNSwxNTgyXV0sW1s2NDcyMSw2NDcyMV0sXCJtYXBwZWRcIixbMTYwNSwxNjA1XV0sW1s2NDcyMiw2NDcyMl0sXCJtYXBwZWRcIixbMTYwNiwxNTgwXV0sW1s2NDcyMyw2NDcyM10sXCJtYXBwZWRcIixbMTYwNiwxNTgxXV0sW1s2NDcyNCw2NDcyNF0sXCJtYXBwZWRcIixbMTYwNiwxNTgyXV0sW1s2NDcyNSw2NDcyNV0sXCJtYXBwZWRcIixbMTYwNiwxNjA1XV0sW1s2NDcyNiw2NDcyNl0sXCJtYXBwZWRcIixbMTYwNiwxNjA3XV0sW1s2NDcyNyw2NDcyN10sXCJtYXBwZWRcIixbMTYwNywxNTgwXV0sW1s2NDcyOCw2NDcyOF0sXCJtYXBwZWRcIixbMTYwNywxNjA1XV0sW1s2NDcyOSw2NDcyOV0sXCJtYXBwZWRcIixbMTYwNywxNjQ4XV0sW1s2NDczMCw2NDczMF0sXCJtYXBwZWRcIixbMTYxMCwxNTgwXV0sW1s2NDczMSw2NDczMV0sXCJtYXBwZWRcIixbMTYxMCwxNTgxXV0sW1s2NDczMiw2NDczMl0sXCJtYXBwZWRcIixbMTYxMCwxNTgyXV0sW1s2NDczMyw2NDczM10sXCJtYXBwZWRcIixbMTYxMCwxNjA1XV0sW1s2NDczNCw2NDczNF0sXCJtYXBwZWRcIixbMTYxMCwxNjA3XV0sW1s2NDczNSw2NDczNV0sXCJtYXBwZWRcIixbMTU3NCwxNjA1XV0sW1s2NDczNiw2NDczNl0sXCJtYXBwZWRcIixbMTU3NCwxNjA3XV0sW1s2NDczNyw2NDczN10sXCJtYXBwZWRcIixbMTU3NiwxNjA1XV0sW1s2NDczOCw2NDczOF0sXCJtYXBwZWRcIixbMTU3NiwxNjA3XV0sW1s2NDczOSw2NDczOV0sXCJtYXBwZWRcIixbMTU3OCwxNjA1XV0sW1s2NDc0MCw2NDc0MF0sXCJtYXBwZWRcIixbMTU3OCwxNjA3XV0sW1s2NDc0MSw2NDc0MV0sXCJtYXBwZWRcIixbMTU3OSwxNjA1XV0sW1s2NDc0Miw2NDc0Ml0sXCJtYXBwZWRcIixbMTU3OSwxNjA3XV0sW1s2NDc0Myw2NDc0M10sXCJtYXBwZWRcIixbMTU4NywxNjA1XV0sW1s2NDc0NCw2NDc0NF0sXCJtYXBwZWRcIixbMTU4NywxNjA3XV0sW1s2NDc0NSw2NDc0NV0sXCJtYXBwZWRcIixbMTU4OCwxNjA1XV0sW1s2NDc0Niw2NDc0Nl0sXCJtYXBwZWRcIixbMTU4OCwxNjA3XV0sW1s2NDc0Nyw2NDc0N10sXCJtYXBwZWRcIixbMTYwMywxNjA0XV0sW1s2NDc0OCw2NDc0OF0sXCJtYXBwZWRcIixbMTYwMywxNjA1XV0sW1s2NDc0OSw2NDc0OV0sXCJtYXBwZWRcIixbMTYwNCwxNjA1XV0sW1s2NDc1MCw2NDc1MF0sXCJtYXBwZWRcIixbMTYwNiwxNjA1XV0sW1s2NDc1MSw2NDc1MV0sXCJtYXBwZWRcIixbMTYwNiwxNjA3XV0sW1s2NDc1Miw2NDc1Ml0sXCJtYXBwZWRcIixbMTYxMCwxNjA1XV0sW1s2NDc1Myw2NDc1M10sXCJtYXBwZWRcIixbMTYxMCwxNjA3XV0sW1s2NDc1NCw2NDc1NF0sXCJtYXBwZWRcIixbMTYwMCwxNjE0LDE2MTddXSxbWzY0NzU1LDY0NzU1XSxcIm1hcHBlZFwiLFsxNjAwLDE2MTUsMTYxN11dLFtbNjQ3NTYsNjQ3NTZdLFwibWFwcGVkXCIsWzE2MDAsMTYxNiwxNjE3XV0sW1s2NDc1Nyw2NDc1N10sXCJtYXBwZWRcIixbMTU5MSwxNjA5XV0sW1s2NDc1OCw2NDc1OF0sXCJtYXBwZWRcIixbMTU5MSwxNjEwXV0sW1s2NDc1OSw2NDc1OV0sXCJtYXBwZWRcIixbMTU5MywxNjA5XV0sW1s2NDc2MCw2NDc2MF0sXCJtYXBwZWRcIixbMTU5MywxNjEwXV0sW1s2NDc2MSw2NDc2MV0sXCJtYXBwZWRcIixbMTU5NCwxNjA5XV0sW1s2NDc2Miw2NDc2Ml0sXCJtYXBwZWRcIixbMTU5NCwxNjEwXV0sW1s2NDc2Myw2NDc2M10sXCJtYXBwZWRcIixbMTU4NywxNjA5XV0sW1s2NDc2NCw2NDc2NF0sXCJtYXBwZWRcIixbMTU4NywxNjEwXV0sW1s2NDc2NSw2NDc2NV0sXCJtYXBwZWRcIixbMTU4OCwxNjA5XV0sW1s2NDc2Niw2NDc2Nl0sXCJtYXBwZWRcIixbMTU4OCwxNjEwXV0sW1s2NDc2Nyw2NDc2N10sXCJtYXBwZWRcIixbMTU4MSwxNjA5XV0sW1s2NDc2OCw2NDc2OF0sXCJtYXBwZWRcIixbMTU4MSwxNjEwXV0sW1s2NDc2OSw2NDc2OV0sXCJtYXBwZWRcIixbMTU4MCwxNjA5XV0sW1s2NDc3MCw2NDc3MF0sXCJtYXBwZWRcIixbMTU4MCwxNjEwXV0sW1s2NDc3MSw2NDc3MV0sXCJtYXBwZWRcIixbMTU4MiwxNjA5XV0sW1s2NDc3Miw2NDc3Ml0sXCJtYXBwZWRcIixbMTU4MiwxNjEwXV0sW1s2NDc3Myw2NDc3M10sXCJtYXBwZWRcIixbMTU4OSwxNjA5XV0sW1s2NDc3NCw2NDc3NF0sXCJtYXBwZWRcIixbMTU4OSwxNjEwXV0sW1s2NDc3NSw2NDc3NV0sXCJtYXBwZWRcIixbMTU5MCwxNjA5XV0sW1s2NDc3Niw2NDc3Nl0sXCJtYXBwZWRcIixbMTU5MCwxNjEwXV0sW1s2NDc3Nyw2NDc3N10sXCJtYXBwZWRcIixbMTU4OCwxNTgwXV0sW1s2NDc3OCw2NDc3OF0sXCJtYXBwZWRcIixbMTU4OCwxNTgxXV0sW1s2NDc3OSw2NDc3OV0sXCJtYXBwZWRcIixbMTU4OCwxNTgyXV0sW1s2NDc4MCw2NDc4MF0sXCJtYXBwZWRcIixbMTU4OCwxNjA1XV0sW1s2NDc4MSw2NDc4MV0sXCJtYXBwZWRcIixbMTU4OCwxNTg1XV0sW1s2NDc4Miw2NDc4Ml0sXCJtYXBwZWRcIixbMTU4NywxNTg1XV0sW1s2NDc4Myw2NDc4M10sXCJtYXBwZWRcIixbMTU4OSwxNTg1XV0sW1s2NDc4NCw2NDc4NF0sXCJtYXBwZWRcIixbMTU5MCwxNTg1XV0sW1s2NDc4NSw2NDc4NV0sXCJtYXBwZWRcIixbMTU5MSwxNjA5XV0sW1s2NDc4Niw2NDc4Nl0sXCJtYXBwZWRcIixbMTU5MSwxNjEwXV0sW1s2NDc4Nyw2NDc4N10sXCJtYXBwZWRcIixbMTU5MywxNjA5XV0sW1s2NDc4OCw2NDc4OF0sXCJtYXBwZWRcIixbMTU5MywxNjEwXV0sW1s2NDc4OSw2NDc4OV0sXCJtYXBwZWRcIixbMTU5NCwxNjA5XV0sW1s2NDc5MCw2NDc5MF0sXCJtYXBwZWRcIixbMTU5NCwxNjEwXV0sW1s2NDc5MSw2NDc5MV0sXCJtYXBwZWRcIixbMTU4NywxNjA5XV0sW1s2NDc5Miw2NDc5Ml0sXCJtYXBwZWRcIixbMTU4NywxNjEwXV0sW1s2NDc5Myw2NDc5M10sXCJtYXBwZWRcIixbMTU4OCwxNjA5XV0sW1s2NDc5NCw2NDc5NF0sXCJtYXBwZWRcIixbMTU4OCwxNjEwXV0sW1s2NDc5NSw2NDc5NV0sXCJtYXBwZWRcIixbMTU4MSwxNjA5XV0sW1s2NDc5Niw2NDc5Nl0sXCJtYXBwZWRcIixbMTU4MSwxNjEwXV0sW1s2NDc5Nyw2NDc5N10sXCJtYXBwZWRcIixbMTU4MCwxNjA5XV0sW1s2NDc5OCw2NDc5OF0sXCJtYXBwZWRcIixbMTU4MCwxNjEwXV0sW1s2NDc5OSw2NDc5OV0sXCJtYXBwZWRcIixbMTU4MiwxNjA5XV0sW1s2NDgwMCw2NDgwMF0sXCJtYXBwZWRcIixbMTU4MiwxNjEwXV0sW1s2NDgwMSw2NDgwMV0sXCJtYXBwZWRcIixbMTU4OSwxNjA5XV0sW1s2NDgwMiw2NDgwMl0sXCJtYXBwZWRcIixbMTU4OSwxNjEwXV0sW1s2NDgwMyw2NDgwM10sXCJtYXBwZWRcIixbMTU5MCwxNjA5XV0sW1s2NDgwNCw2NDgwNF0sXCJtYXBwZWRcIixbMTU5MCwxNjEwXV0sW1s2NDgwNSw2NDgwNV0sXCJtYXBwZWRcIixbMTU4OCwxNTgwXV0sW1s2NDgwNiw2NDgwNl0sXCJtYXBwZWRcIixbMTU4OCwxNTgxXV0sW1s2NDgwNyw2NDgwN10sXCJtYXBwZWRcIixbMTU4OCwxNTgyXV0sW1s2NDgwOCw2NDgwOF0sXCJtYXBwZWRcIixbMTU4OCwxNjA1XV0sW1s2NDgwOSw2NDgwOV0sXCJtYXBwZWRcIixbMTU4OCwxNTg1XV0sW1s2NDgxMCw2NDgxMF0sXCJtYXBwZWRcIixbMTU4NywxNTg1XV0sW1s2NDgxMSw2NDgxMV0sXCJtYXBwZWRcIixbMTU4OSwxNTg1XV0sW1s2NDgxMiw2NDgxMl0sXCJtYXBwZWRcIixbMTU5MCwxNTg1XV0sW1s2NDgxMyw2NDgxM10sXCJtYXBwZWRcIixbMTU4OCwxNTgwXV0sW1s2NDgxNCw2NDgxNF0sXCJtYXBwZWRcIixbMTU4OCwxNTgxXV0sW1s2NDgxNSw2NDgxNV0sXCJtYXBwZWRcIixbMTU4OCwxNTgyXV0sW1s2NDgxNiw2NDgxNl0sXCJtYXBwZWRcIixbMTU4OCwxNjA1XV0sW1s2NDgxNyw2NDgxN10sXCJtYXBwZWRcIixbMTU4NywxNjA3XV0sW1s2NDgxOCw2NDgxOF0sXCJtYXBwZWRcIixbMTU4OCwxNjA3XV0sW1s2NDgxOSw2NDgxOV0sXCJtYXBwZWRcIixbMTU5MSwxNjA1XV0sW1s2NDgyMCw2NDgyMF0sXCJtYXBwZWRcIixbMTU4NywxNTgwXV0sW1s2NDgyMSw2NDgyMV0sXCJtYXBwZWRcIixbMTU4NywxNTgxXV0sW1s2NDgyMiw2NDgyMl0sXCJtYXBwZWRcIixbMTU4NywxNTgyXV0sW1s2NDgyMyw2NDgyM10sXCJtYXBwZWRcIixbMTU4OCwxNTgwXV0sW1s2NDgyNCw2NDgyNF0sXCJtYXBwZWRcIixbMTU4OCwxNTgxXV0sW1s2NDgyNSw2NDgyNV0sXCJtYXBwZWRcIixbMTU4OCwxNTgyXV0sW1s2NDgyNiw2NDgyNl0sXCJtYXBwZWRcIixbMTU5MSwxNjA1XV0sW1s2NDgyNyw2NDgyN10sXCJtYXBwZWRcIixbMTU5MiwxNjA1XV0sW1s2NDgyOCw2NDgyOV0sXCJtYXBwZWRcIixbMTU3NSwxNjExXV0sW1s2NDgzMCw2NDgzMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjQ4MzIsNjQ4NDddLFwiZGlzYWxsb3dlZFwiXSxbWzY0ODQ4LDY0ODQ4XSxcIm1hcHBlZFwiLFsxNTc4LDE1ODAsMTYwNV1dLFtbNjQ4NDksNjQ4NTBdLFwibWFwcGVkXCIsWzE1NzgsMTU4MSwxNTgwXV0sW1s2NDg1MSw2NDg1MV0sXCJtYXBwZWRcIixbMTU3OCwxNTgxLDE2MDVdXSxbWzY0ODUyLDY0ODUyXSxcIm1hcHBlZFwiLFsxNTc4LDE1ODIsMTYwNV1dLFtbNjQ4NTMsNjQ4NTNdLFwibWFwcGVkXCIsWzE1NzgsMTYwNSwxNTgwXV0sW1s2NDg1NCw2NDg1NF0sXCJtYXBwZWRcIixbMTU3OCwxNjA1LDE1ODFdXSxbWzY0ODU1LDY0ODU1XSxcIm1hcHBlZFwiLFsxNTc4LDE2MDUsMTU4Ml1dLFtbNjQ4NTYsNjQ4NTddLFwibWFwcGVkXCIsWzE1ODAsMTYwNSwxNTgxXV0sW1s2NDg1OCw2NDg1OF0sXCJtYXBwZWRcIixbMTU4MSwxNjA1LDE2MTBdXSxbWzY0ODU5LDY0ODU5XSxcIm1hcHBlZFwiLFsxNTgxLDE2MDUsMTYwOV1dLFtbNjQ4NjAsNjQ4NjBdLFwibWFwcGVkXCIsWzE1ODcsMTU4MSwxNTgwXV0sW1s2NDg2MSw2NDg2MV0sXCJtYXBwZWRcIixbMTU4NywxNTgwLDE1ODFdXSxbWzY0ODYyLDY0ODYyXSxcIm1hcHBlZFwiLFsxNTg3LDE1ODAsMTYwOV1dLFtbNjQ4NjMsNjQ4NjRdLFwibWFwcGVkXCIsWzE1ODcsMTYwNSwxNTgxXV0sW1s2NDg2NSw2NDg2NV0sXCJtYXBwZWRcIixbMTU4NywxNjA1LDE1ODBdXSxbWzY0ODY2LDY0ODY3XSxcIm1hcHBlZFwiLFsxNTg3LDE2MDUsMTYwNV1dLFtbNjQ4NjgsNjQ4NjldLFwibWFwcGVkXCIsWzE1ODksMTU4MSwxNTgxXV0sW1s2NDg3MCw2NDg3MF0sXCJtYXBwZWRcIixbMTU4OSwxNjA1LDE2MDVdXSxbWzY0ODcxLDY0ODcyXSxcIm1hcHBlZFwiLFsxNTg4LDE1ODEsMTYwNV1dLFtbNjQ4NzMsNjQ4NzNdLFwibWFwcGVkXCIsWzE1ODgsMTU4MCwxNjEwXV0sW1s2NDg3NCw2NDg3NV0sXCJtYXBwZWRcIixbMTU4OCwxNjA1LDE1ODJdXSxbWzY0ODc2LDY0ODc3XSxcIm1hcHBlZFwiLFsxNTg4LDE2MDUsMTYwNV1dLFtbNjQ4NzgsNjQ4NzhdLFwibWFwcGVkXCIsWzE1OTAsMTU4MSwxNjA5XV0sW1s2NDg3OSw2NDg4MF0sXCJtYXBwZWRcIixbMTU5MCwxNTgyLDE2MDVdXSxbWzY0ODgxLDY0ODgyXSxcIm1hcHBlZFwiLFsxNTkxLDE2MDUsMTU4MV1dLFtbNjQ4ODMsNjQ4ODNdLFwibWFwcGVkXCIsWzE1OTEsMTYwNSwxNjA1XV0sW1s2NDg4NCw2NDg4NF0sXCJtYXBwZWRcIixbMTU5MSwxNjA1LDE2MTBdXSxbWzY0ODg1LDY0ODg1XSxcIm1hcHBlZFwiLFsxNTkzLDE1ODAsMTYwNV1dLFtbNjQ4ODYsNjQ4ODddLFwibWFwcGVkXCIsWzE1OTMsMTYwNSwxNjA1XV0sW1s2NDg4OCw2NDg4OF0sXCJtYXBwZWRcIixbMTU5MywxNjA1LDE2MDldXSxbWzY0ODg5LDY0ODg5XSxcIm1hcHBlZFwiLFsxNTk0LDE2MDUsMTYwNV1dLFtbNjQ4OTAsNjQ4OTBdLFwibWFwcGVkXCIsWzE1OTQsMTYwNSwxNjEwXV0sW1s2NDg5MSw2NDg5MV0sXCJtYXBwZWRcIixbMTU5NCwxNjA1LDE2MDldXSxbWzY0ODkyLDY0ODkzXSxcIm1hcHBlZFwiLFsxNjAxLDE1ODIsMTYwNV1dLFtbNjQ4OTQsNjQ4OTRdLFwibWFwcGVkXCIsWzE2MDIsMTYwNSwxNTgxXV0sW1s2NDg5NSw2NDg5NV0sXCJtYXBwZWRcIixbMTYwMiwxNjA1LDE2MDVdXSxbWzY0ODk2LDY0ODk2XSxcIm1hcHBlZFwiLFsxNjA0LDE1ODEsMTYwNV1dLFtbNjQ4OTcsNjQ4OTddLFwibWFwcGVkXCIsWzE2MDQsMTU4MSwxNjEwXV0sW1s2NDg5OCw2NDg5OF0sXCJtYXBwZWRcIixbMTYwNCwxNTgxLDE2MDldXSxbWzY0ODk5LDY0OTAwXSxcIm1hcHBlZFwiLFsxNjA0LDE1ODAsMTU4MF1dLFtbNjQ5MDEsNjQ5MDJdLFwibWFwcGVkXCIsWzE2MDQsMTU4MiwxNjA1XV0sW1s2NDkwMyw2NDkwNF0sXCJtYXBwZWRcIixbMTYwNCwxNjA1LDE1ODFdXSxbWzY0OTA1LDY0OTA1XSxcIm1hcHBlZFwiLFsxNjA1LDE1ODEsMTU4MF1dLFtbNjQ5MDYsNjQ5MDZdLFwibWFwcGVkXCIsWzE2MDUsMTU4MSwxNjA1XV0sW1s2NDkwNyw2NDkwN10sXCJtYXBwZWRcIixbMTYwNSwxNTgxLDE2MTBdXSxbWzY0OTA4LDY0OTA4XSxcIm1hcHBlZFwiLFsxNjA1LDE1ODAsMTU4MV1dLFtbNjQ5MDksNjQ5MDldLFwibWFwcGVkXCIsWzE2MDUsMTU4MCwxNjA1XV0sW1s2NDkxMCw2NDkxMF0sXCJtYXBwZWRcIixbMTYwNSwxNTgyLDE1ODBdXSxbWzY0OTExLDY0OTExXSxcIm1hcHBlZFwiLFsxNjA1LDE1ODIsMTYwNV1dLFtbNjQ5MTIsNjQ5MTNdLFwiZGlzYWxsb3dlZFwiXSxbWzY0OTE0LDY0OTE0XSxcIm1hcHBlZFwiLFsxNjA1LDE1ODAsMTU4Ml1dLFtbNjQ5MTUsNjQ5MTVdLFwibWFwcGVkXCIsWzE2MDcsMTYwNSwxNTgwXV0sW1s2NDkxNiw2NDkxNl0sXCJtYXBwZWRcIixbMTYwNywxNjA1LDE2MDVdXSxbWzY0OTE3LDY0OTE3XSxcIm1hcHBlZFwiLFsxNjA2LDE1ODEsMTYwNV1dLFtbNjQ5MTgsNjQ5MThdLFwibWFwcGVkXCIsWzE2MDYsMTU4MSwxNjA5XV0sW1s2NDkxOSw2NDkyMF0sXCJtYXBwZWRcIixbMTYwNiwxNTgwLDE2MDVdXSxbWzY0OTIxLDY0OTIxXSxcIm1hcHBlZFwiLFsxNjA2LDE1ODAsMTYwOV1dLFtbNjQ5MjIsNjQ5MjJdLFwibWFwcGVkXCIsWzE2MDYsMTYwNSwxNjEwXV0sW1s2NDkyMyw2NDkyM10sXCJtYXBwZWRcIixbMTYwNiwxNjA1LDE2MDldXSxbWzY0OTI0LDY0OTI1XSxcIm1hcHBlZFwiLFsxNjEwLDE2MDUsMTYwNV1dLFtbNjQ5MjYsNjQ5MjZdLFwibWFwcGVkXCIsWzE1NzYsMTU4MiwxNjEwXV0sW1s2NDkyNyw2NDkyN10sXCJtYXBwZWRcIixbMTU3OCwxNTgwLDE2MTBdXSxbWzY0OTI4LDY0OTI4XSxcIm1hcHBlZFwiLFsxNTc4LDE1ODAsMTYwOV1dLFtbNjQ5MjksNjQ5MjldLFwibWFwcGVkXCIsWzE1NzgsMTU4MiwxNjEwXV0sW1s2NDkzMCw2NDkzMF0sXCJtYXBwZWRcIixbMTU3OCwxNTgyLDE2MDldXSxbWzY0OTMxLDY0OTMxXSxcIm1hcHBlZFwiLFsxNTc4LDE2MDUsMTYxMF1dLFtbNjQ5MzIsNjQ5MzJdLFwibWFwcGVkXCIsWzE1NzgsMTYwNSwxNjA5XV0sW1s2NDkzMyw2NDkzM10sXCJtYXBwZWRcIixbMTU4MCwxNjA1LDE2MTBdXSxbWzY0OTM0LDY0OTM0XSxcIm1hcHBlZFwiLFsxNTgwLDE1ODEsMTYwOV1dLFtbNjQ5MzUsNjQ5MzVdLFwibWFwcGVkXCIsWzE1ODAsMTYwNSwxNjA5XV0sW1s2NDkzNiw2NDkzNl0sXCJtYXBwZWRcIixbMTU4NywxNTgyLDE2MDldXSxbWzY0OTM3LDY0OTM3XSxcIm1hcHBlZFwiLFsxNTg5LDE1ODEsMTYxMF1dLFtbNjQ5MzgsNjQ5MzhdLFwibWFwcGVkXCIsWzE1ODgsMTU4MSwxNjEwXV0sW1s2NDkzOSw2NDkzOV0sXCJtYXBwZWRcIixbMTU5MCwxNTgxLDE2MTBdXSxbWzY0OTQwLDY0OTQwXSxcIm1hcHBlZFwiLFsxNjA0LDE1ODAsMTYxMF1dLFtbNjQ5NDEsNjQ5NDFdLFwibWFwcGVkXCIsWzE2MDQsMTYwNSwxNjEwXV0sW1s2NDk0Miw2NDk0Ml0sXCJtYXBwZWRcIixbMTYxMCwxNTgxLDE2MTBdXSxbWzY0OTQzLDY0OTQzXSxcIm1hcHBlZFwiLFsxNjEwLDE1ODAsMTYxMF1dLFtbNjQ5NDQsNjQ5NDRdLFwibWFwcGVkXCIsWzE2MTAsMTYwNSwxNjEwXV0sW1s2NDk0NSw2NDk0NV0sXCJtYXBwZWRcIixbMTYwNSwxNjA1LDE2MTBdXSxbWzY0OTQ2LDY0OTQ2XSxcIm1hcHBlZFwiLFsxNjAyLDE2MDUsMTYxMF1dLFtbNjQ5NDcsNjQ5NDddLFwibWFwcGVkXCIsWzE2MDYsMTU4MSwxNjEwXV0sW1s2NDk0OCw2NDk0OF0sXCJtYXBwZWRcIixbMTYwMiwxNjA1LDE1ODFdXSxbWzY0OTQ5LDY0OTQ5XSxcIm1hcHBlZFwiLFsxNjA0LDE1ODEsMTYwNV1dLFtbNjQ5NTAsNjQ5NTBdLFwibWFwcGVkXCIsWzE1OTMsMTYwNSwxNjEwXV0sW1s2NDk1MSw2NDk1MV0sXCJtYXBwZWRcIixbMTYwMywxNjA1LDE2MTBdXSxbWzY0OTUyLDY0OTUyXSxcIm1hcHBlZFwiLFsxNjA2LDE1ODAsMTU4MV1dLFtbNjQ5NTMsNjQ5NTNdLFwibWFwcGVkXCIsWzE2MDUsMTU4MiwxNjEwXV0sW1s2NDk1NCw2NDk1NF0sXCJtYXBwZWRcIixbMTYwNCwxNTgwLDE2MDVdXSxbWzY0OTU1LDY0OTU1XSxcIm1hcHBlZFwiLFsxNjAzLDE2MDUsMTYwNV1dLFtbNjQ5NTYsNjQ5NTZdLFwibWFwcGVkXCIsWzE2MDQsMTU4MCwxNjA1XV0sW1s2NDk1Nyw2NDk1N10sXCJtYXBwZWRcIixbMTYwNiwxNTgwLDE1ODFdXSxbWzY0OTU4LDY0OTU4XSxcIm1hcHBlZFwiLFsxNTgwLDE1ODEsMTYxMF1dLFtbNjQ5NTksNjQ5NTldLFwibWFwcGVkXCIsWzE1ODEsMTU4MCwxNjEwXV0sW1s2NDk2MCw2NDk2MF0sXCJtYXBwZWRcIixbMTYwNSwxNTgwLDE2MTBdXSxbWzY0OTYxLDY0OTYxXSxcIm1hcHBlZFwiLFsxNjAxLDE2MDUsMTYxMF1dLFtbNjQ5NjIsNjQ5NjJdLFwibWFwcGVkXCIsWzE1NzYsMTU4MSwxNjEwXV0sW1s2NDk2Myw2NDk2M10sXCJtYXBwZWRcIixbMTYwMywxNjA1LDE2MDVdXSxbWzY0OTY0LDY0OTY0XSxcIm1hcHBlZFwiLFsxNTkzLDE1ODAsMTYwNV1dLFtbNjQ5NjUsNjQ5NjVdLFwibWFwcGVkXCIsWzE1ODksMTYwNSwxNjA1XV0sW1s2NDk2Niw2NDk2Nl0sXCJtYXBwZWRcIixbMTU4NywxNTgyLDE2MTBdXSxbWzY0OTY3LDY0OTY3XSxcIm1hcHBlZFwiLFsxNjA2LDE1ODAsMTYxMF1dLFtbNjQ5NjgsNjQ5NzVdLFwiZGlzYWxsb3dlZFwiXSxbWzY0OTc2LDY1MDA3XSxcImRpc2FsbG93ZWRcIl0sW1s2NTAwOCw2NTAwOF0sXCJtYXBwZWRcIixbMTU4OSwxNjA0LDE3NDZdXSxbWzY1MDA5LDY1MDA5XSxcIm1hcHBlZFwiLFsxNjAyLDE2MDQsMTc0Nl1dLFtbNjUwMTAsNjUwMTBdLFwibWFwcGVkXCIsWzE1NzUsMTYwNCwxNjA0LDE2MDddXSxbWzY1MDExLDY1MDExXSxcIm1hcHBlZFwiLFsxNTc1LDE2MDMsMTU3NiwxNTg1XV0sW1s2NTAxMiw2NTAxMl0sXCJtYXBwZWRcIixbMTYwNSwxNTgxLDE2MDUsMTU4M11dLFtbNjUwMTMsNjUwMTNdLFwibWFwcGVkXCIsWzE1ODksMTYwNCwxNTkzLDE2MDVdXSxbWzY1MDE0LDY1MDE0XSxcIm1hcHBlZFwiLFsxNTg1LDE1ODcsMTYwOCwxNjA0XV0sW1s2NTAxNSw2NTAxNV0sXCJtYXBwZWRcIixbMTU5MywxNjA0LDE2MTAsMTYwN11dLFtbNjUwMTYsNjUwMTZdLFwibWFwcGVkXCIsWzE2MDgsMTU4NywxNjA0LDE2MDVdXSxbWzY1MDE3LDY1MDE3XSxcIm1hcHBlZFwiLFsxNTg5LDE2MDQsMTYwOV1dLFtbNjUwMTgsNjUwMThdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxNTg5LDE2MDQsMTYwOSwzMiwxNTc1LDE2MDQsMTYwNCwxNjA3LDMyLDE1OTMsMTYwNCwxNjEwLDE2MDcsMzIsMTYwOCwxNTg3LDE2MDQsMTYwNV1dLFtbNjUwMTksNjUwMTldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxNTgwLDE2MDQsMzIsMTU4MCwxNjA0LDE1NzUsMTYwNCwxNjA3XV0sW1s2NTAyMCw2NTAyMF0sXCJtYXBwZWRcIixbMTU4NSwxNzQwLDE1NzUsMTYwNF1dLFtbNjUwMjEsNjUwMjFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY1MDIyLDY1MDIzXSxcImRpc2FsbG93ZWRcIl0sW1s2NTAyNCw2NTAzOV0sXCJpZ25vcmVkXCJdLFtbNjUwNDAsNjUwNDBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0NF1dLFtbNjUwNDEsNjUwNDFdLFwibWFwcGVkXCIsWzEyMjg5XV0sW1s2NTA0Miw2NTA0Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNjUwNDMsNjUwNDNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1OF1dLFtbNjUwNDQsNjUwNDRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1OV1dLFtbNjUwNDUsNjUwNDVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszM11dLFtbNjUwNDYsNjUwNDZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2M11dLFtbNjUwNDcsNjUwNDddLFwibWFwcGVkXCIsWzEyMzEwXV0sW1s2NTA0OCw2NTA0OF0sXCJtYXBwZWRcIixbMTIzMTFdXSxbWzY1MDQ5LDY1MDQ5XSxcImRpc2FsbG93ZWRcIl0sW1s2NTA1MCw2NTA1NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjUwNTYsNjUwNTldLFwidmFsaWRcIl0sW1s2NTA2MCw2NTA2Ml0sXCJ2YWxpZFwiXSxbWzY1MDYzLDY1MDY5XSxcInZhbGlkXCJdLFtbNjUwNzAsNjUwNzFdLFwidmFsaWRcIl0sW1s2NTA3Miw2NTA3Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNjUwNzMsNjUwNzNdLFwibWFwcGVkXCIsWzgyMTJdXSxbWzY1MDc0LDY1MDc0XSxcIm1hcHBlZFwiLFs4MjExXV0sW1s2NTA3NSw2NTA3Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzk1XV0sW1s2NTA3Nyw2NTA3N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwXV0sW1s2NTA3OCw2NTA3OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQxXV0sW1s2NTA3OSw2NTA3OV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzEyM11dLFtbNjUwODAsNjUwODBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxMjVdXSxbWzY1MDgxLDY1MDgxXSxcIm1hcHBlZFwiLFsxMjMwOF1dLFtbNjUwODIsNjUwODJdLFwibWFwcGVkXCIsWzEyMzA5XV0sW1s2NTA4Myw2NTA4M10sXCJtYXBwZWRcIixbMTIzMDRdXSxbWzY1MDg0LDY1MDg0XSxcIm1hcHBlZFwiLFsxMjMwNV1dLFtbNjUwODUsNjUwODVdLFwibWFwcGVkXCIsWzEyMjk4XV0sW1s2NTA4Niw2NTA4Nl0sXCJtYXBwZWRcIixbMTIyOTldXSxbWzY1MDg3LDY1MDg3XSxcIm1hcHBlZFwiLFsxMjI5Nl1dLFtbNjUwODgsNjUwODhdLFwibWFwcGVkXCIsWzEyMjk3XV0sW1s2NTA4OSw2NTA4OV0sXCJtYXBwZWRcIixbMTIzMDBdXSxbWzY1MDkwLDY1MDkwXSxcIm1hcHBlZFwiLFsxMjMwMV1dLFtbNjUwOTEsNjUwOTFdLFwibWFwcGVkXCIsWzEyMzAyXV0sW1s2NTA5Miw2NTA5Ml0sXCJtYXBwZWRcIixbMTIzMDNdXSxbWzY1MDkzLDY1MDk0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NTA5NSw2NTA5NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzkxXV0sW1s2NTA5Niw2NTA5Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzkzXV0sW1s2NTA5Nyw2NTEwMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3M11dLFtbNjUxMDEsNjUxMDNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5NV1dLFtbNjUxMDQsNjUxMDRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0NF1dLFtbNjUxMDUsNjUxMDVdLFwibWFwcGVkXCIsWzEyMjg5XV0sW1s2NTEwNiw2NTEwNl0sXCJkaXNhbGxvd2VkXCJdLFtbNjUxMDcsNjUxMDddLFwiZGlzYWxsb3dlZFwiXSxbWzY1MTA4LDY1MTA4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTldXSxbWzY1MTA5LDY1MTA5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNThdXSxbWzY1MTEwLDY1MTEwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjNdXSxbWzY1MTExLDY1MTExXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzNdXSxbWzY1MTEyLDY1MTEyXSxcIm1hcHBlZFwiLFs4MjEyXV0sW1s2NTExMyw2NTExM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwXV0sW1s2NTExNCw2NTExNF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQxXV0sW1s2NTExNSw2NTExNV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzEyM11dLFtbNjUxMTYsNjUxMTZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxMjVdXSxbWzY1MTE3LDY1MTE3XSxcIm1hcHBlZFwiLFsxMjMwOF1dLFtbNjUxMTgsNjUxMThdLFwibWFwcGVkXCIsWzEyMzA5XV0sW1s2NTExOSw2NTExOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzM1XV0sW1s2NTEyMCw2NTEyMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzM4XV0sW1s2NTEyMSw2NTEyMV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQyXV0sW1s2NTEyMiw2NTEyMl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQzXV0sW1s2NTEyMyw2NTEyM10sXCJtYXBwZWRcIixbNDVdXSxbWzY1MTI0LDY1MTI0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjBdXSxbWzY1MTI1LDY1MTI1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjJdXSxbWzY1MTI2LDY1MTI2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjFdXSxbWzY1MTI3LDY1MTI3XSxcImRpc2FsbG93ZWRcIl0sW1s2NTEyOCw2NTEyOF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzkyXV0sW1s2NTEyOSw2NTEyOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzM2XV0sW1s2NTEzMCw2NTEzMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzM3XV0sW1s2NTEzMSw2NTEzMV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzY0XV0sW1s2NTEzMiw2NTEzNV0sXCJkaXNhbGxvd2VkXCJdLFtbNjUxMzYsNjUxMzZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjExXV0sW1s2NTEzNyw2NTEzN10sXCJtYXBwZWRcIixbMTYwMCwxNjExXV0sW1s2NTEzOCw2NTEzOF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTJdXSxbWzY1MTM5LDY1MTM5XSxcInZhbGlkXCJdLFtbNjUxNDAsNjUxNDBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjEzXV0sW1s2NTE0MSw2NTE0MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjUxNDIsNjUxNDJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjE0XV0sW1s2NTE0Myw2NTE0M10sXCJtYXBwZWRcIixbMTYwMCwxNjE0XV0sW1s2NTE0NCw2NTE0NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTVdXSxbWzY1MTQ1LDY1MTQ1XSxcIm1hcHBlZFwiLFsxNjAwLDE2MTVdXSxbWzY1MTQ2LDY1MTQ2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTYxNl1dLFtbNjUxNDcsNjUxNDddLFwibWFwcGVkXCIsWzE2MDAsMTYxNl1dLFtbNjUxNDgsNjUxNDhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjE3XV0sW1s2NTE0OSw2NTE0OV0sXCJtYXBwZWRcIixbMTYwMCwxNjE3XV0sW1s2NTE1MCw2NTE1MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MThdXSxbWzY1MTUxLDY1MTUxXSxcIm1hcHBlZFwiLFsxNjAwLDE2MThdXSxbWzY1MTUyLDY1MTUyXSxcIm1hcHBlZFwiLFsxNTY5XV0sW1s2NTE1Myw2NTE1NF0sXCJtYXBwZWRcIixbMTU3MF1dLFtbNjUxNTUsNjUxNTZdLFwibWFwcGVkXCIsWzE1NzFdXSxbWzY1MTU3LDY1MTU4XSxcIm1hcHBlZFwiLFsxNTcyXV0sW1s2NTE1OSw2NTE2MF0sXCJtYXBwZWRcIixbMTU3M11dLFtbNjUxNjEsNjUxNjRdLFwibWFwcGVkXCIsWzE1NzRdXSxbWzY1MTY1LDY1MTY2XSxcIm1hcHBlZFwiLFsxNTc1XV0sW1s2NTE2Nyw2NTE3MF0sXCJtYXBwZWRcIixbMTU3Nl1dLFtbNjUxNzEsNjUxNzJdLFwibWFwcGVkXCIsWzE1NzddXSxbWzY1MTczLDY1MTc2XSxcIm1hcHBlZFwiLFsxNTc4XV0sW1s2NTE3Nyw2NTE4MF0sXCJtYXBwZWRcIixbMTU3OV1dLFtbNjUxODEsNjUxODRdLFwibWFwcGVkXCIsWzE1ODBdXSxbWzY1MTg1LDY1MTg4XSxcIm1hcHBlZFwiLFsxNTgxXV0sW1s2NTE4OSw2NTE5Ml0sXCJtYXBwZWRcIixbMTU4Ml1dLFtbNjUxOTMsNjUxOTRdLFwibWFwcGVkXCIsWzE1ODNdXSxbWzY1MTk1LDY1MTk2XSxcIm1hcHBlZFwiLFsxNTg0XV0sW1s2NTE5Nyw2NTE5OF0sXCJtYXBwZWRcIixbMTU4NV1dLFtbNjUxOTksNjUyMDBdLFwibWFwcGVkXCIsWzE1ODZdXSxbWzY1MjAxLDY1MjA0XSxcIm1hcHBlZFwiLFsxNTg3XV0sW1s2NTIwNSw2NTIwOF0sXCJtYXBwZWRcIixbMTU4OF1dLFtbNjUyMDksNjUyMTJdLFwibWFwcGVkXCIsWzE1ODldXSxbWzY1MjEzLDY1MjE2XSxcIm1hcHBlZFwiLFsxNTkwXV0sW1s2NTIxNyw2NTIyMF0sXCJtYXBwZWRcIixbMTU5MV1dLFtbNjUyMjEsNjUyMjRdLFwibWFwcGVkXCIsWzE1OTJdXSxbWzY1MjI1LDY1MjI4XSxcIm1hcHBlZFwiLFsxNTkzXV0sW1s2NTIyOSw2NTIzMl0sXCJtYXBwZWRcIixbMTU5NF1dLFtbNjUyMzMsNjUyMzZdLFwibWFwcGVkXCIsWzE2MDFdXSxbWzY1MjM3LDY1MjQwXSxcIm1hcHBlZFwiLFsxNjAyXV0sW1s2NTI0MSw2NTI0NF0sXCJtYXBwZWRcIixbMTYwM11dLFtbNjUyNDUsNjUyNDhdLFwibWFwcGVkXCIsWzE2MDRdXSxbWzY1MjQ5LDY1MjUyXSxcIm1hcHBlZFwiLFsxNjA1XV0sW1s2NTI1Myw2NTI1Nl0sXCJtYXBwZWRcIixbMTYwNl1dLFtbNjUyNTcsNjUyNjBdLFwibWFwcGVkXCIsWzE2MDddXSxbWzY1MjYxLDY1MjYyXSxcIm1hcHBlZFwiLFsxNjA4XV0sW1s2NTI2Myw2NTI2NF0sXCJtYXBwZWRcIixbMTYwOV1dLFtbNjUyNjUsNjUyNjhdLFwibWFwcGVkXCIsWzE2MTBdXSxbWzY1MjY5LDY1MjcwXSxcIm1hcHBlZFwiLFsxNjA0LDE1NzBdXSxbWzY1MjcxLDY1MjcyXSxcIm1hcHBlZFwiLFsxNjA0LDE1NzFdXSxbWzY1MjczLDY1Mjc0XSxcIm1hcHBlZFwiLFsxNjA0LDE1NzNdXSxbWzY1Mjc1LDY1Mjc2XSxcIm1hcHBlZFwiLFsxNjA0LDE1NzVdXSxbWzY1Mjc3LDY1Mjc4XSxcImRpc2FsbG93ZWRcIl0sW1s2NTI3OSw2NTI3OV0sXCJpZ25vcmVkXCJdLFtbNjUyODAsNjUyODBdLFwiZGlzYWxsb3dlZFwiXSxbWzY1MjgxLDY1MjgxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzNdXSxbWzY1MjgyLDY1MjgyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzRdXSxbWzY1MjgzLDY1MjgzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzVdXSxbWzY1Mjg0LDY1Mjg0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzZdXSxbWzY1Mjg1LDY1Mjg1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzddXSxbWzY1Mjg2LDY1Mjg2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzhdXSxbWzY1Mjg3LDY1Mjg3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzldXSxbWzY1Mjg4LDY1Mjg4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDBdXSxbWzY1Mjg5LDY1Mjg5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDFdXSxbWzY1MjkwLDY1MjkwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDJdXSxbWzY1MjkxLDY1MjkxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDNdXSxbWzY1MjkyLDY1MjkyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDRdXSxbWzY1MjkzLDY1MjkzXSxcIm1hcHBlZFwiLFs0NV1dLFtbNjUyOTQsNjUyOTRdLFwibWFwcGVkXCIsWzQ2XV0sW1s2NTI5NSw2NTI5NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQ3XV0sW1s2NTI5Niw2NTI5Nl0sXCJtYXBwZWRcIixbNDhdXSxbWzY1Mjk3LDY1Mjk3XSxcIm1hcHBlZFwiLFs0OV1dLFtbNjUyOTgsNjUyOThdLFwibWFwcGVkXCIsWzUwXV0sW1s2NTI5OSw2NTI5OV0sXCJtYXBwZWRcIixbNTFdXSxbWzY1MzAwLDY1MzAwXSxcIm1hcHBlZFwiLFs1Ml1dLFtbNjUzMDEsNjUzMDFdLFwibWFwcGVkXCIsWzUzXV0sW1s2NTMwMiw2NTMwMl0sXCJtYXBwZWRcIixbNTRdXSxbWzY1MzAzLDY1MzAzXSxcIm1hcHBlZFwiLFs1NV1dLFtbNjUzMDQsNjUzMDRdLFwibWFwcGVkXCIsWzU2XV0sW1s2NTMwNSw2NTMwNV0sXCJtYXBwZWRcIixbNTddXSxbWzY1MzA2LDY1MzA2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNThdXSxbWzY1MzA3LDY1MzA3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTldXSxbWzY1MzA4LDY1MzA4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjBdXSxbWzY1MzA5LDY1MzA5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjFdXSxbWzY1MzEwLDY1MzEwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjJdXSxbWzY1MzExLDY1MzExXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjNdXSxbWzY1MzEyLDY1MzEyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjRdXSxbWzY1MzEzLDY1MzEzXSxcIm1hcHBlZFwiLFs5N11dLFtbNjUzMTQsNjUzMTRdLFwibWFwcGVkXCIsWzk4XV0sW1s2NTMxNSw2NTMxNV0sXCJtYXBwZWRcIixbOTldXSxbWzY1MzE2LDY1MzE2XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzY1MzE3LDY1MzE3XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzY1MzE4LDY1MzE4XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzY1MzE5LDY1MzE5XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzY1MzIwLDY1MzIwXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzY1MzIxLDY1MzIxXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzY1MzIyLDY1MzIyXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzY1MzIzLDY1MzIzXSxcIm1hcHBlZFwiLFsxMDddXSxbWzY1MzI0LDY1MzI0XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzY1MzI1LDY1MzI1XSxcIm1hcHBlZFwiLFsxMDldXSxbWzY1MzI2LDY1MzI2XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzY1MzI3LDY1MzI3XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzY1MzI4LDY1MzI4XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzY1MzI5LDY1MzI5XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzY1MzMwLDY1MzMwXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzY1MzMxLDY1MzMxXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzY1MzMyLDY1MzMyXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzY1MzMzLDY1MzMzXSxcIm1hcHBlZFwiLFsxMTddXSxbWzY1MzM0LDY1MzM0XSxcIm1hcHBlZFwiLFsxMThdXSxbWzY1MzM1LDY1MzM1XSxcIm1hcHBlZFwiLFsxMTldXSxbWzY1MzM2LDY1MzM2XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzY1MzM3LDY1MzM3XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzY1MzM4LDY1MzM4XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzY1MzM5LDY1MzM5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTFdXSxbWzY1MzQwLDY1MzQwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTJdXSxbWzY1MzQxLDY1MzQxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTNdXSxbWzY1MzQyLDY1MzQyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTRdXSxbWzY1MzQzLDY1MzQzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTVdXSxbWzY1MzQ0LDY1MzQ0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTZdXSxbWzY1MzQ1LDY1MzQ1XSxcIm1hcHBlZFwiLFs5N11dLFtbNjUzNDYsNjUzNDZdLFwibWFwcGVkXCIsWzk4XV0sW1s2NTM0Nyw2NTM0N10sXCJtYXBwZWRcIixbOTldXSxbWzY1MzQ4LDY1MzQ4XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzY1MzQ5LDY1MzQ5XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzY1MzUwLDY1MzUwXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzY1MzUxLDY1MzUxXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzY1MzUyLDY1MzUyXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzY1MzUzLDY1MzUzXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzY1MzU0LDY1MzU0XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzY1MzU1LDY1MzU1XSxcIm1hcHBlZFwiLFsxMDddXSxbWzY1MzU2LDY1MzU2XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzY1MzU3LDY1MzU3XSxcIm1hcHBlZFwiLFsxMDldXSxbWzY1MzU4LDY1MzU4XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzY1MzU5LDY1MzU5XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzY1MzYwLDY1MzYwXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzY1MzYxLDY1MzYxXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzY1MzYyLDY1MzYyXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzY1MzYzLDY1MzYzXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzY1MzY0LDY1MzY0XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzY1MzY1LDY1MzY1XSxcIm1hcHBlZFwiLFsxMTddXSxbWzY1MzY2LDY1MzY2XSxcIm1hcHBlZFwiLFsxMThdXSxbWzY1MzY3LDY1MzY3XSxcIm1hcHBlZFwiLFsxMTldXSxbWzY1MzY4LDY1MzY4XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzY1MzY5LDY1MzY5XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzY1MzcwLDY1MzcwXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzY1MzcxLDY1MzcxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMTIzXV0sW1s2NTM3Miw2NTM3Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzEyNF1dLFtbNjUzNzMsNjUzNzNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxMjVdXSxbWzY1Mzc0LDY1Mzc0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMTI2XV0sW1s2NTM3NSw2NTM3NV0sXCJtYXBwZWRcIixbMTA2MjldXSxbWzY1Mzc2LDY1Mzc2XSxcIm1hcHBlZFwiLFsxMDYzMF1dLFtbNjUzNzcsNjUzNzddLFwibWFwcGVkXCIsWzQ2XV0sW1s2NTM3OCw2NTM3OF0sXCJtYXBwZWRcIixbMTIzMDBdXSxbWzY1Mzc5LDY1Mzc5XSxcIm1hcHBlZFwiLFsxMjMwMV1dLFtbNjUzODAsNjUzODBdLFwibWFwcGVkXCIsWzEyMjg5XV0sW1s2NTM4MSw2NTM4MV0sXCJtYXBwZWRcIixbMTI1MzldXSxbWzY1MzgyLDY1MzgyXSxcIm1hcHBlZFwiLFsxMjUzMF1dLFtbNjUzODMsNjUzODNdLFwibWFwcGVkXCIsWzEyNDQ5XV0sW1s2NTM4NCw2NTM4NF0sXCJtYXBwZWRcIixbMTI0NTFdXSxbWzY1Mzg1LDY1Mzg1XSxcIm1hcHBlZFwiLFsxMjQ1M11dLFtbNjUzODYsNjUzODZdLFwibWFwcGVkXCIsWzEyNDU1XV0sW1s2NTM4Nyw2NTM4N10sXCJtYXBwZWRcIixbMTI0NTddXSxbWzY1Mzg4LDY1Mzg4XSxcIm1hcHBlZFwiLFsxMjUxNV1dLFtbNjUzODksNjUzODldLFwibWFwcGVkXCIsWzEyNTE3XV0sW1s2NTM5MCw2NTM5MF0sXCJtYXBwZWRcIixbMTI1MTldXSxbWzY1MzkxLDY1MzkxXSxcIm1hcHBlZFwiLFsxMjQ4M11dLFtbNjUzOTIsNjUzOTJdLFwibWFwcGVkXCIsWzEyNTQwXV0sW1s2NTM5Myw2NTM5M10sXCJtYXBwZWRcIixbMTI0NTBdXSxbWzY1Mzk0LDY1Mzk0XSxcIm1hcHBlZFwiLFsxMjQ1Ml1dLFtbNjUzOTUsNjUzOTVdLFwibWFwcGVkXCIsWzEyNDU0XV0sW1s2NTM5Niw2NTM5Nl0sXCJtYXBwZWRcIixbMTI0NTZdXSxbWzY1Mzk3LDY1Mzk3XSxcIm1hcHBlZFwiLFsxMjQ1OF1dLFtbNjUzOTgsNjUzOThdLFwibWFwcGVkXCIsWzEyNDU5XV0sW1s2NTM5OSw2NTM5OV0sXCJtYXBwZWRcIixbMTI0NjFdXSxbWzY1NDAwLDY1NDAwXSxcIm1hcHBlZFwiLFsxMjQ2M11dLFtbNjU0MDEsNjU0MDFdLFwibWFwcGVkXCIsWzEyNDY1XV0sW1s2NTQwMiw2NTQwMl0sXCJtYXBwZWRcIixbMTI0NjddXSxbWzY1NDAzLDY1NDAzXSxcIm1hcHBlZFwiLFsxMjQ2OV1dLFtbNjU0MDQsNjU0MDRdLFwibWFwcGVkXCIsWzEyNDcxXV0sW1s2NTQwNSw2NTQwNV0sXCJtYXBwZWRcIixbMTI0NzNdXSxbWzY1NDA2LDY1NDA2XSxcIm1hcHBlZFwiLFsxMjQ3NV1dLFtbNjU0MDcsNjU0MDddLFwibWFwcGVkXCIsWzEyNDc3XV0sW1s2NTQwOCw2NTQwOF0sXCJtYXBwZWRcIixbMTI0NzldXSxbWzY1NDA5LDY1NDA5XSxcIm1hcHBlZFwiLFsxMjQ4MV1dLFtbNjU0MTAsNjU0MTBdLFwibWFwcGVkXCIsWzEyNDg0XV0sW1s2NTQxMSw2NTQxMV0sXCJtYXBwZWRcIixbMTI0ODZdXSxbWzY1NDEyLDY1NDEyXSxcIm1hcHBlZFwiLFsxMjQ4OF1dLFtbNjU0MTMsNjU0MTNdLFwibWFwcGVkXCIsWzEyNDkwXV0sW1s2NTQxNCw2NTQxNF0sXCJtYXBwZWRcIixbMTI0OTFdXSxbWzY1NDE1LDY1NDE1XSxcIm1hcHBlZFwiLFsxMjQ5Ml1dLFtbNjU0MTYsNjU0MTZdLFwibWFwcGVkXCIsWzEyNDkzXV0sW1s2NTQxNyw2NTQxN10sXCJtYXBwZWRcIixbMTI0OTRdXSxbWzY1NDE4LDY1NDE4XSxcIm1hcHBlZFwiLFsxMjQ5NV1dLFtbNjU0MTksNjU0MTldLFwibWFwcGVkXCIsWzEyNDk4XV0sW1s2NTQyMCw2NTQyMF0sXCJtYXBwZWRcIixbMTI1MDFdXSxbWzY1NDIxLDY1NDIxXSxcIm1hcHBlZFwiLFsxMjUwNF1dLFtbNjU0MjIsNjU0MjJdLFwibWFwcGVkXCIsWzEyNTA3XV0sW1s2NTQyMyw2NTQyM10sXCJtYXBwZWRcIixbMTI1MTBdXSxbWzY1NDI0LDY1NDI0XSxcIm1hcHBlZFwiLFsxMjUxMV1dLFtbNjU0MjUsNjU0MjVdLFwibWFwcGVkXCIsWzEyNTEyXV0sW1s2NTQyNiw2NTQyNl0sXCJtYXBwZWRcIixbMTI1MTNdXSxbWzY1NDI3LDY1NDI3XSxcIm1hcHBlZFwiLFsxMjUxNF1dLFtbNjU0MjgsNjU0MjhdLFwibWFwcGVkXCIsWzEyNTE2XV0sW1s2NTQyOSw2NTQyOV0sXCJtYXBwZWRcIixbMTI1MThdXSxbWzY1NDMwLDY1NDMwXSxcIm1hcHBlZFwiLFsxMjUyMF1dLFtbNjU0MzEsNjU0MzFdLFwibWFwcGVkXCIsWzEyNTIxXV0sW1s2NTQzMiw2NTQzMl0sXCJtYXBwZWRcIixbMTI1MjJdXSxbWzY1NDMzLDY1NDMzXSxcIm1hcHBlZFwiLFsxMjUyM11dLFtbNjU0MzQsNjU0MzRdLFwibWFwcGVkXCIsWzEyNTI0XV0sW1s2NTQzNSw2NTQzNV0sXCJtYXBwZWRcIixbMTI1MjVdXSxbWzY1NDM2LDY1NDM2XSxcIm1hcHBlZFwiLFsxMjUyN11dLFtbNjU0MzcsNjU0MzddLFwibWFwcGVkXCIsWzEyNTMxXV0sW1s2NTQzOCw2NTQzOF0sXCJtYXBwZWRcIixbMTI0NDFdXSxbWzY1NDM5LDY1NDM5XSxcIm1hcHBlZFwiLFsxMjQ0Ml1dLFtbNjU0NDAsNjU0NDBdLFwiZGlzYWxsb3dlZFwiXSxbWzY1NDQxLDY1NDQxXSxcIm1hcHBlZFwiLFs0MzUyXV0sW1s2NTQ0Miw2NTQ0Ml0sXCJtYXBwZWRcIixbNDM1M11dLFtbNjU0NDMsNjU0NDNdLFwibWFwcGVkXCIsWzQ1MjJdXSxbWzY1NDQ0LDY1NDQ0XSxcIm1hcHBlZFwiLFs0MzU0XV0sW1s2NTQ0NSw2NTQ0NV0sXCJtYXBwZWRcIixbNDUyNF1dLFtbNjU0NDYsNjU0NDZdLFwibWFwcGVkXCIsWzQ1MjVdXSxbWzY1NDQ3LDY1NDQ3XSxcIm1hcHBlZFwiLFs0MzU1XV0sW1s2NTQ0OCw2NTQ0OF0sXCJtYXBwZWRcIixbNDM1Nl1dLFtbNjU0NDksNjU0NDldLFwibWFwcGVkXCIsWzQzNTddXSxbWzY1NDUwLDY1NDUwXSxcIm1hcHBlZFwiLFs0NTI4XV0sW1s2NTQ1MSw2NTQ1MV0sXCJtYXBwZWRcIixbNDUyOV1dLFtbNjU0NTIsNjU0NTJdLFwibWFwcGVkXCIsWzQ1MzBdXSxbWzY1NDUzLDY1NDUzXSxcIm1hcHBlZFwiLFs0NTMxXV0sW1s2NTQ1NCw2NTQ1NF0sXCJtYXBwZWRcIixbNDUzMl1dLFtbNjU0NTUsNjU0NTVdLFwibWFwcGVkXCIsWzQ1MzNdXSxbWzY1NDU2LDY1NDU2XSxcIm1hcHBlZFwiLFs0Mzc4XV0sW1s2NTQ1Nyw2NTQ1N10sXCJtYXBwZWRcIixbNDM1OF1dLFtbNjU0NTgsNjU0NThdLFwibWFwcGVkXCIsWzQzNTldXSxbWzY1NDU5LDY1NDU5XSxcIm1hcHBlZFwiLFs0MzYwXV0sW1s2NTQ2MCw2NTQ2MF0sXCJtYXBwZWRcIixbNDM4NV1dLFtbNjU0NjEsNjU0NjFdLFwibWFwcGVkXCIsWzQzNjFdXSxbWzY1NDYyLDY1NDYyXSxcIm1hcHBlZFwiLFs0MzYyXV0sW1s2NTQ2Myw2NTQ2M10sXCJtYXBwZWRcIixbNDM2M11dLFtbNjU0NjQsNjU0NjRdLFwibWFwcGVkXCIsWzQzNjRdXSxbWzY1NDY1LDY1NDY1XSxcIm1hcHBlZFwiLFs0MzY1XV0sW1s2NTQ2Niw2NTQ2Nl0sXCJtYXBwZWRcIixbNDM2Nl1dLFtbNjU0NjcsNjU0NjddLFwibWFwcGVkXCIsWzQzNjddXSxbWzY1NDY4LDY1NDY4XSxcIm1hcHBlZFwiLFs0MzY4XV0sW1s2NTQ2OSw2NTQ2OV0sXCJtYXBwZWRcIixbNDM2OV1dLFtbNjU0NzAsNjU0NzBdLFwibWFwcGVkXCIsWzQzNzBdXSxbWzY1NDcxLDY1NDczXSxcImRpc2FsbG93ZWRcIl0sW1s2NTQ3NCw2NTQ3NF0sXCJtYXBwZWRcIixbNDQ0OV1dLFtbNjU0NzUsNjU0NzVdLFwibWFwcGVkXCIsWzQ0NTBdXSxbWzY1NDc2LDY1NDc2XSxcIm1hcHBlZFwiLFs0NDUxXV0sW1s2NTQ3Nyw2NTQ3N10sXCJtYXBwZWRcIixbNDQ1Ml1dLFtbNjU0NzgsNjU0NzhdLFwibWFwcGVkXCIsWzQ0NTNdXSxbWzY1NDc5LDY1NDc5XSxcIm1hcHBlZFwiLFs0NDU0XV0sW1s2NTQ4MCw2NTQ4MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU0ODIsNjU0ODJdLFwibWFwcGVkXCIsWzQ0NTVdXSxbWzY1NDgzLDY1NDgzXSxcIm1hcHBlZFwiLFs0NDU2XV0sW1s2NTQ4NCw2NTQ4NF0sXCJtYXBwZWRcIixbNDQ1N11dLFtbNjU0ODUsNjU0ODVdLFwibWFwcGVkXCIsWzQ0NThdXSxbWzY1NDg2LDY1NDg2XSxcIm1hcHBlZFwiLFs0NDU5XV0sW1s2NTQ4Nyw2NTQ4N10sXCJtYXBwZWRcIixbNDQ2MF1dLFtbNjU0ODgsNjU0ODldLFwiZGlzYWxsb3dlZFwiXSxbWzY1NDkwLDY1NDkwXSxcIm1hcHBlZFwiLFs0NDYxXV0sW1s2NTQ5MSw2NTQ5MV0sXCJtYXBwZWRcIixbNDQ2Ml1dLFtbNjU0OTIsNjU0OTJdLFwibWFwcGVkXCIsWzQ0NjNdXSxbWzY1NDkzLDY1NDkzXSxcIm1hcHBlZFwiLFs0NDY0XV0sW1s2NTQ5NCw2NTQ5NF0sXCJtYXBwZWRcIixbNDQ2NV1dLFtbNjU0OTUsNjU0OTVdLFwibWFwcGVkXCIsWzQ0NjZdXSxbWzY1NDk2LDY1NDk3XSxcImRpc2FsbG93ZWRcIl0sW1s2NTQ5OCw2NTQ5OF0sXCJtYXBwZWRcIixbNDQ2N11dLFtbNjU0OTksNjU0OTldLFwibWFwcGVkXCIsWzQ0NjhdXSxbWzY1NTAwLDY1NTAwXSxcIm1hcHBlZFwiLFs0NDY5XV0sW1s2NTUwMSw2NTUwM10sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MDQsNjU1MDRdLFwibWFwcGVkXCIsWzE2Ml1dLFtbNjU1MDUsNjU1MDVdLFwibWFwcGVkXCIsWzE2M11dLFtbNjU1MDYsNjU1MDZdLFwibWFwcGVkXCIsWzE3Ml1dLFtbNjU1MDcsNjU1MDddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NzJdXSxbWzY1NTA4LDY1NTA4XSxcIm1hcHBlZFwiLFsxNjZdXSxbWzY1NTA5LDY1NTA5XSxcIm1hcHBlZFwiLFsxNjVdXSxbWzY1NTEwLDY1NTEwXSxcIm1hcHBlZFwiLFs4MzYxXV0sW1s2NTUxMSw2NTUxMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MTIsNjU1MTJdLFwibWFwcGVkXCIsWzk0NzRdXSxbWzY1NTEzLDY1NTEzXSxcIm1hcHBlZFwiLFs4NTkyXV0sW1s2NTUxNCw2NTUxNF0sXCJtYXBwZWRcIixbODU5M11dLFtbNjU1MTUsNjU1MTVdLFwibWFwcGVkXCIsWzg1OTRdXSxbWzY1NTE2LDY1NTE2XSxcIm1hcHBlZFwiLFs4NTk1XV0sW1s2NTUxNyw2NTUxN10sXCJtYXBwZWRcIixbOTYzMl1dLFtbNjU1MTgsNjU1MThdLFwibWFwcGVkXCIsWzk2NzVdXSxbWzY1NTE5LDY1NTI4XSxcImRpc2FsbG93ZWRcIl0sW1s2NTUyOSw2NTUzMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MzIsNjU1MzJdLFwiZGlzYWxsb3dlZFwiXSxbWzY1NTMzLDY1NTMzXSxcImRpc2FsbG93ZWRcIl0sW1s2NTUzNCw2NTUzNV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MzYsNjU1NDddLFwidmFsaWRcIl0sW1s2NTU0OCw2NTU0OF0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1NDksNjU1NzRdLFwidmFsaWRcIl0sW1s2NTU3NSw2NTU3NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1NzYsNjU1OTRdLFwidmFsaWRcIl0sW1s2NTU5NSw2NTU5NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1OTYsNjU1OTddLFwidmFsaWRcIl0sW1s2NTU5OCw2NTU5OF0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1OTksNjU2MTNdLFwidmFsaWRcIl0sW1s2NTYxNCw2NTYxNV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU2MTYsNjU2MjldLFwidmFsaWRcIl0sW1s2NTYzMCw2NTY2M10sXCJkaXNhbGxvd2VkXCJdLFtbNjU2NjQsNjU3ODZdLFwidmFsaWRcIl0sW1s2NTc4Nyw2NTc5MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU3OTIsNjU3OTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY1Nzk1LDY1Nzk4XSxcImRpc2FsbG93ZWRcIl0sW1s2NTc5OSw2NTg0M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjU4NDQsNjU4NDZdLFwiZGlzYWxsb3dlZFwiXSxbWzY1ODQ3LDY1ODU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NTg1Niw2NTkzMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjU5MzEsNjU5MzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY1OTMzLDY1OTM1XSxcImRpc2FsbG93ZWRcIl0sW1s2NTkzNiw2NTk0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjU5NDgsNjU5NTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY1OTUyLDY1OTUyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NTk1Myw2NTk5OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjYwMDAsNjYwNDRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2MDQ1LDY2MDQ1XSxcInZhbGlkXCJdLFtbNjYwNDYsNjYxNzVdLFwiZGlzYWxsb3dlZFwiXSxbWzY2MTc2LDY2MjA0XSxcInZhbGlkXCJdLFtbNjYyMDUsNjYyMDddLFwiZGlzYWxsb3dlZFwiXSxbWzY2MjA4LDY2MjU2XSxcInZhbGlkXCJdLFtbNjYyNTcsNjYyNzFdLFwiZGlzYWxsb3dlZFwiXSxbWzY2MjcyLDY2MjcyXSxcInZhbGlkXCJdLFtbNjYyNzMsNjYyOTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2MzAwLDY2MzAzXSxcImRpc2FsbG93ZWRcIl0sW1s2NjMwNCw2NjMzNF0sXCJ2YWxpZFwiXSxbWzY2MzM1LDY2MzM1XSxcInZhbGlkXCJdLFtbNjYzMzYsNjYzMzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2MzQwLDY2MzUxXSxcImRpc2FsbG93ZWRcIl0sW1s2NjM1Miw2NjM2OF0sXCJ2YWxpZFwiXSxbWzY2MzY5LDY2MzY5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NjM3MCw2NjM3N10sXCJ2YWxpZFwiXSxbWzY2Mzc4LDY2Mzc4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NjM3OSw2NjM4M10sXCJkaXNhbGxvd2VkXCJdLFtbNjYzODQsNjY0MjZdLFwidmFsaWRcIl0sW1s2NjQyNyw2NjQzMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjY0MzIsNjY0NjFdLFwidmFsaWRcIl0sW1s2NjQ2Miw2NjQ2Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNjY0NjMsNjY0NjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2NDY0LDY2NDk5XSxcInZhbGlkXCJdLFtbNjY1MDAsNjY1MDNdLFwiZGlzYWxsb3dlZFwiXSxbWzY2NTA0LDY2NTExXSxcInZhbGlkXCJdLFtbNjY1MTIsNjY1MTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2NTE4LDY2NTU5XSxcImRpc2FsbG93ZWRcIl0sW1s2NjU2MCw2NjU2MF0sXCJtYXBwZWRcIixbNjY2MDBdXSxbWzY2NTYxLDY2NTYxXSxcIm1hcHBlZFwiLFs2NjYwMV1dLFtbNjY1NjIsNjY1NjJdLFwibWFwcGVkXCIsWzY2NjAyXV0sW1s2NjU2Myw2NjU2M10sXCJtYXBwZWRcIixbNjY2MDNdXSxbWzY2NTY0LDY2NTY0XSxcIm1hcHBlZFwiLFs2NjYwNF1dLFtbNjY1NjUsNjY1NjVdLFwibWFwcGVkXCIsWzY2NjA1XV0sW1s2NjU2Niw2NjU2Nl0sXCJtYXBwZWRcIixbNjY2MDZdXSxbWzY2NTY3LDY2NTY3XSxcIm1hcHBlZFwiLFs2NjYwN11dLFtbNjY1NjgsNjY1NjhdLFwibWFwcGVkXCIsWzY2NjA4XV0sW1s2NjU2OSw2NjU2OV0sXCJtYXBwZWRcIixbNjY2MDldXSxbWzY2NTcwLDY2NTcwXSxcIm1hcHBlZFwiLFs2NjYxMF1dLFtbNjY1NzEsNjY1NzFdLFwibWFwcGVkXCIsWzY2NjExXV0sW1s2NjU3Miw2NjU3Ml0sXCJtYXBwZWRcIixbNjY2MTJdXSxbWzY2NTczLDY2NTczXSxcIm1hcHBlZFwiLFs2NjYxM11dLFtbNjY1NzQsNjY1NzRdLFwibWFwcGVkXCIsWzY2NjE0XV0sW1s2NjU3NSw2NjU3NV0sXCJtYXBwZWRcIixbNjY2MTVdXSxbWzY2NTc2LDY2NTc2XSxcIm1hcHBlZFwiLFs2NjYxNl1dLFtbNjY1NzcsNjY1NzddLFwibWFwcGVkXCIsWzY2NjE3XV0sW1s2NjU3OCw2NjU3OF0sXCJtYXBwZWRcIixbNjY2MThdXSxbWzY2NTc5LDY2NTc5XSxcIm1hcHBlZFwiLFs2NjYxOV1dLFtbNjY1ODAsNjY1ODBdLFwibWFwcGVkXCIsWzY2NjIwXV0sW1s2NjU4MSw2NjU4MV0sXCJtYXBwZWRcIixbNjY2MjFdXSxbWzY2NTgyLDY2NTgyXSxcIm1hcHBlZFwiLFs2NjYyMl1dLFtbNjY1ODMsNjY1ODNdLFwibWFwcGVkXCIsWzY2NjIzXV0sW1s2NjU4NCw2NjU4NF0sXCJtYXBwZWRcIixbNjY2MjRdXSxbWzY2NTg1LDY2NTg1XSxcIm1hcHBlZFwiLFs2NjYyNV1dLFtbNjY1ODYsNjY1ODZdLFwibWFwcGVkXCIsWzY2NjI2XV0sW1s2NjU4Nyw2NjU4N10sXCJtYXBwZWRcIixbNjY2MjddXSxbWzY2NTg4LDY2NTg4XSxcIm1hcHBlZFwiLFs2NjYyOF1dLFtbNjY1ODksNjY1ODldLFwibWFwcGVkXCIsWzY2NjI5XV0sW1s2NjU5MCw2NjU5MF0sXCJtYXBwZWRcIixbNjY2MzBdXSxbWzY2NTkxLDY2NTkxXSxcIm1hcHBlZFwiLFs2NjYzMV1dLFtbNjY1OTIsNjY1OTJdLFwibWFwcGVkXCIsWzY2NjMyXV0sW1s2NjU5Myw2NjU5M10sXCJtYXBwZWRcIixbNjY2MzNdXSxbWzY2NTk0LDY2NTk0XSxcIm1hcHBlZFwiLFs2NjYzNF1dLFtbNjY1OTUsNjY1OTVdLFwibWFwcGVkXCIsWzY2NjM1XV0sW1s2NjU5Niw2NjU5Nl0sXCJtYXBwZWRcIixbNjY2MzZdXSxbWzY2NTk3LDY2NTk3XSxcIm1hcHBlZFwiLFs2NjYzN11dLFtbNjY1OTgsNjY1OThdLFwibWFwcGVkXCIsWzY2NjM4XV0sW1s2NjU5OSw2NjU5OV0sXCJtYXBwZWRcIixbNjY2MzldXSxbWzY2NjAwLDY2NjM3XSxcInZhbGlkXCJdLFtbNjY2MzgsNjY3MTddLFwidmFsaWRcIl0sW1s2NjcxOCw2NjcxOV0sXCJkaXNhbGxvd2VkXCJdLFtbNjY3MjAsNjY3MjldLFwidmFsaWRcIl0sW1s2NjczMCw2NjgxNV0sXCJkaXNhbGxvd2VkXCJdLFtbNjY4MTYsNjY4NTVdLFwidmFsaWRcIl0sW1s2Njg1Niw2Njg2M10sXCJkaXNhbGxvd2VkXCJdLFtbNjY4NjQsNjY5MTVdLFwidmFsaWRcIl0sW1s2NjkxNiw2NjkyNl0sXCJkaXNhbGxvd2VkXCJdLFtbNjY5MjcsNjY5MjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2OTI4LDY3MDcxXSxcImRpc2FsbG93ZWRcIl0sW1s2NzA3Miw2NzM4Ml0sXCJ2YWxpZFwiXSxbWzY3MzgzLDY3MzkxXSxcImRpc2FsbG93ZWRcIl0sW1s2NzM5Miw2NzQxM10sXCJ2YWxpZFwiXSxbWzY3NDE0LDY3NDIzXSxcImRpc2FsbG93ZWRcIl0sW1s2NzQyNCw2NzQzMV0sXCJ2YWxpZFwiXSxbWzY3NDMyLDY3NTgzXSxcImRpc2FsbG93ZWRcIl0sW1s2NzU4NCw2NzU4OV0sXCJ2YWxpZFwiXSxbWzY3NTkwLDY3NTkxXSxcImRpc2FsbG93ZWRcIl0sW1s2NzU5Miw2NzU5Ml0sXCJ2YWxpZFwiXSxbWzY3NTkzLDY3NTkzXSxcImRpc2FsbG93ZWRcIl0sW1s2NzU5NCw2NzYzN10sXCJ2YWxpZFwiXSxbWzY3NjM4LDY3NjM4XSxcImRpc2FsbG93ZWRcIl0sW1s2NzYzOSw2NzY0MF0sXCJ2YWxpZFwiXSxbWzY3NjQxLDY3NjQzXSxcImRpc2FsbG93ZWRcIl0sW1s2NzY0NCw2NzY0NF0sXCJ2YWxpZFwiXSxbWzY3NjQ1LDY3NjQ2XSxcImRpc2FsbG93ZWRcIl0sW1s2NzY0Nyw2NzY0N10sXCJ2YWxpZFwiXSxbWzY3NjQ4LDY3NjY5XSxcInZhbGlkXCJdLFtbNjc2NzAsNjc2NzBdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NjcxLDY3Njc5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NzY4MCw2NzcwMl0sXCJ2YWxpZFwiXSxbWzY3NzAzLDY3NzExXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NzcxMiw2Nzc0Ml0sXCJ2YWxpZFwiXSxbWzY3NzQzLDY3NzUwXSxcImRpc2FsbG93ZWRcIl0sW1s2Nzc1MSw2Nzc1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjc3NjAsNjc4MDddLFwiZGlzYWxsb3dlZFwiXSxbWzY3ODA4LDY3ODI2XSxcInZhbGlkXCJdLFtbNjc4MjcsNjc4MjddLFwiZGlzYWxsb3dlZFwiXSxbWzY3ODI4LDY3ODI5XSxcInZhbGlkXCJdLFtbNjc4MzAsNjc4MzRdLFwiZGlzYWxsb3dlZFwiXSxbWzY3ODM1LDY3ODM5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2Nzg0MCw2Nzg2MV0sXCJ2YWxpZFwiXSxbWzY3ODYyLDY3ODY1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2Nzg2Niw2Nzg2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjc4NjgsNjc4NzBdLFwiZGlzYWxsb3dlZFwiXSxbWzY3ODcxLDY3ODcxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2Nzg3Miw2Nzg5N10sXCJ2YWxpZFwiXSxbWzY3ODk4LDY3OTAyXSxcImRpc2FsbG93ZWRcIl0sW1s2NzkwMyw2NzkwM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjc5MDQsNjc5NjddLFwiZGlzYWxsb3dlZFwiXSxbWzY3OTY4LDY4MDIzXSxcInZhbGlkXCJdLFtbNjgwMjQsNjgwMjddLFwiZGlzYWxsb3dlZFwiXSxbWzY4MDI4LDY4MDI5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODAzMCw2ODAzMV0sXCJ2YWxpZFwiXSxbWzY4MDMyLDY4MDQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODA0OCw2ODA0OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjgwNTAsNjgwOTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4MDk2LDY4MDk5XSxcInZhbGlkXCJdLFtbNjgxMDAsNjgxMDBdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTAxLDY4MTAyXSxcInZhbGlkXCJdLFtbNjgxMDMsNjgxMDddLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTA4LDY4MTE1XSxcInZhbGlkXCJdLFtbNjgxMTYsNjgxMTZdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTE3LDY4MTE5XSxcInZhbGlkXCJdLFtbNjgxMjAsNjgxMjBdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTIxLDY4MTQ3XSxcInZhbGlkXCJdLFtbNjgxNDgsNjgxNTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTUyLDY4MTU0XSxcInZhbGlkXCJdLFtbNjgxNTUsNjgxNThdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTU5LDY4MTU5XSxcInZhbGlkXCJdLFtbNjgxNjAsNjgxNjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4MTY4LDY4MTc1XSxcImRpc2FsbG93ZWRcIl0sW1s2ODE3Niw2ODE4NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjgxODUsNjgxOTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTkyLDY4MjIwXSxcInZhbGlkXCJdLFtbNjgyMjEsNjgyMjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4MjI0LDY4MjUyXSxcInZhbGlkXCJdLFtbNjgyNTMsNjgyNTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4MjU2LDY4Mjg3XSxcImRpc2FsbG93ZWRcIl0sW1s2ODI4OCw2ODI5NV0sXCJ2YWxpZFwiXSxbWzY4Mjk2LDY4Mjk2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODI5Nyw2ODMyNl0sXCJ2YWxpZFwiXSxbWzY4MzI3LDY4MzMwXSxcImRpc2FsbG93ZWRcIl0sW1s2ODMzMSw2ODM0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjgzNDMsNjgzNTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MzUyLDY4NDA1XSxcInZhbGlkXCJdLFtbNjg0MDYsNjg0MDhdLFwiZGlzYWxsb3dlZFwiXSxbWzY4NDA5LDY4NDE1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODQxNiw2ODQzN10sXCJ2YWxpZFwiXSxbWzY4NDM4LDY4NDM5XSxcImRpc2FsbG93ZWRcIl0sW1s2ODQ0MCw2ODQ0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjg0NDgsNjg0NjZdLFwidmFsaWRcIl0sW1s2ODQ2Nyw2ODQ3MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjg0NzIsNjg0NzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4NDgwLDY4NDk3XSxcInZhbGlkXCJdLFtbNjg0OTgsNjg1MDRdLFwiZGlzYWxsb3dlZFwiXSxbWzY4NTA1LDY4NTA4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODUwOSw2ODUyMF0sXCJkaXNhbGxvd2VkXCJdLFtbNjg1MjEsNjg1MjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4NTI4LDY4NjA3XSxcImRpc2FsbG93ZWRcIl0sW1s2ODYwOCw2ODY4MF0sXCJ2YWxpZFwiXSxbWzY4NjgxLDY4NzM1XSxcImRpc2FsbG93ZWRcIl0sW1s2ODczNiw2ODczNl0sXCJtYXBwZWRcIixbNjg4MDBdXSxbWzY4NzM3LDY4NzM3XSxcIm1hcHBlZFwiLFs2ODgwMV1dLFtbNjg3MzgsNjg3MzhdLFwibWFwcGVkXCIsWzY4ODAyXV0sW1s2ODczOSw2ODczOV0sXCJtYXBwZWRcIixbNjg4MDNdXSxbWzY4NzQwLDY4NzQwXSxcIm1hcHBlZFwiLFs2ODgwNF1dLFtbNjg3NDEsNjg3NDFdLFwibWFwcGVkXCIsWzY4ODA1XV0sW1s2ODc0Miw2ODc0Ml0sXCJtYXBwZWRcIixbNjg4MDZdXSxbWzY4NzQzLDY4NzQzXSxcIm1hcHBlZFwiLFs2ODgwN11dLFtbNjg3NDQsNjg3NDRdLFwibWFwcGVkXCIsWzY4ODA4XV0sW1s2ODc0NSw2ODc0NV0sXCJtYXBwZWRcIixbNjg4MDldXSxbWzY4NzQ2LDY4NzQ2XSxcIm1hcHBlZFwiLFs2ODgxMF1dLFtbNjg3NDcsNjg3NDddLFwibWFwcGVkXCIsWzY4ODExXV0sW1s2ODc0OCw2ODc0OF0sXCJtYXBwZWRcIixbNjg4MTJdXSxbWzY4NzQ5LDY4NzQ5XSxcIm1hcHBlZFwiLFs2ODgxM11dLFtbNjg3NTAsNjg3NTBdLFwibWFwcGVkXCIsWzY4ODE0XV0sW1s2ODc1MSw2ODc1MV0sXCJtYXBwZWRcIixbNjg4MTVdXSxbWzY4NzUyLDY4NzUyXSxcIm1hcHBlZFwiLFs2ODgxNl1dLFtbNjg3NTMsNjg3NTNdLFwibWFwcGVkXCIsWzY4ODE3XV0sW1s2ODc1NCw2ODc1NF0sXCJtYXBwZWRcIixbNjg4MThdXSxbWzY4NzU1LDY4NzU1XSxcIm1hcHBlZFwiLFs2ODgxOV1dLFtbNjg3NTYsNjg3NTZdLFwibWFwcGVkXCIsWzY4ODIwXV0sW1s2ODc1Nyw2ODc1N10sXCJtYXBwZWRcIixbNjg4MjFdXSxbWzY4NzU4LDY4NzU4XSxcIm1hcHBlZFwiLFs2ODgyMl1dLFtbNjg3NTksNjg3NTldLFwibWFwcGVkXCIsWzY4ODIzXV0sW1s2ODc2MCw2ODc2MF0sXCJtYXBwZWRcIixbNjg4MjRdXSxbWzY4NzYxLDY4NzYxXSxcIm1hcHBlZFwiLFs2ODgyNV1dLFtbNjg3NjIsNjg3NjJdLFwibWFwcGVkXCIsWzY4ODI2XV0sW1s2ODc2Myw2ODc2M10sXCJtYXBwZWRcIixbNjg4MjddXSxbWzY4NzY0LDY4NzY0XSxcIm1hcHBlZFwiLFs2ODgyOF1dLFtbNjg3NjUsNjg3NjVdLFwibWFwcGVkXCIsWzY4ODI5XV0sW1s2ODc2Niw2ODc2Nl0sXCJtYXBwZWRcIixbNjg4MzBdXSxbWzY4NzY3LDY4NzY3XSxcIm1hcHBlZFwiLFs2ODgzMV1dLFtbNjg3NjgsNjg3NjhdLFwibWFwcGVkXCIsWzY4ODMyXV0sW1s2ODc2OSw2ODc2OV0sXCJtYXBwZWRcIixbNjg4MzNdXSxbWzY4NzcwLDY4NzcwXSxcIm1hcHBlZFwiLFs2ODgzNF1dLFtbNjg3NzEsNjg3NzFdLFwibWFwcGVkXCIsWzY4ODM1XV0sW1s2ODc3Miw2ODc3Ml0sXCJtYXBwZWRcIixbNjg4MzZdXSxbWzY4NzczLDY4NzczXSxcIm1hcHBlZFwiLFs2ODgzN11dLFtbNjg3NzQsNjg3NzRdLFwibWFwcGVkXCIsWzY4ODM4XV0sW1s2ODc3NSw2ODc3NV0sXCJtYXBwZWRcIixbNjg4MzldXSxbWzY4Nzc2LDY4Nzc2XSxcIm1hcHBlZFwiLFs2ODg0MF1dLFtbNjg3NzcsNjg3NzddLFwibWFwcGVkXCIsWzY4ODQxXV0sW1s2ODc3OCw2ODc3OF0sXCJtYXBwZWRcIixbNjg4NDJdXSxbWzY4Nzc5LDY4Nzc5XSxcIm1hcHBlZFwiLFs2ODg0M11dLFtbNjg3ODAsNjg3ODBdLFwibWFwcGVkXCIsWzY4ODQ0XV0sW1s2ODc4MSw2ODc4MV0sXCJtYXBwZWRcIixbNjg4NDVdXSxbWzY4NzgyLDY4NzgyXSxcIm1hcHBlZFwiLFs2ODg0Nl1dLFtbNjg3ODMsNjg3ODNdLFwibWFwcGVkXCIsWzY4ODQ3XV0sW1s2ODc4NCw2ODc4NF0sXCJtYXBwZWRcIixbNjg4NDhdXSxbWzY4Nzg1LDY4Nzg1XSxcIm1hcHBlZFwiLFs2ODg0OV1dLFtbNjg3ODYsNjg3ODZdLFwibWFwcGVkXCIsWzY4ODUwXV0sW1s2ODc4Nyw2ODc5OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjg4MDAsNjg4NTBdLFwidmFsaWRcIl0sW1s2ODg1MSw2ODg1N10sXCJkaXNhbGxvd2VkXCJdLFtbNjg4NTgsNjg4NjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4ODY0LDY5MjE1XSxcImRpc2FsbG93ZWRcIl0sW1s2OTIxNiw2OTI0Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjkyNDcsNjk2MzFdLFwiZGlzYWxsb3dlZFwiXSxbWzY5NjMyLDY5NzAyXSxcInZhbGlkXCJdLFtbNjk3MDMsNjk3MDldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY5NzEwLDY5NzEzXSxcImRpc2FsbG93ZWRcIl0sW1s2OTcxNCw2OTczM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjk3MzQsNjk3NDNdLFwidmFsaWRcIl0sW1s2OTc0NCw2OTc1OF0sXCJkaXNhbGxvd2VkXCJdLFtbNjk3NTksNjk3NTldLFwidmFsaWRcIl0sW1s2OTc2MCw2OTgxOF0sXCJ2YWxpZFwiXSxbWzY5ODE5LDY5ODIwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2OTgyMSw2OTgyMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjk4MjIsNjk4MjVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY5ODI2LDY5ODM5XSxcImRpc2FsbG93ZWRcIl0sW1s2OTg0MCw2OTg2NF0sXCJ2YWxpZFwiXSxbWzY5ODY1LDY5ODcxXSxcImRpc2FsbG93ZWRcIl0sW1s2OTg3Miw2OTg4MV0sXCJ2YWxpZFwiXSxbWzY5ODgyLDY5ODg3XSxcImRpc2FsbG93ZWRcIl0sW1s2OTg4OCw2OTk0MF0sXCJ2YWxpZFwiXSxbWzY5OTQxLDY5OTQxXSxcImRpc2FsbG93ZWRcIl0sW1s2OTk0Miw2OTk1MV0sXCJ2YWxpZFwiXSxbWzY5OTUyLDY5OTU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2OTk1Niw2OTk2N10sXCJkaXNhbGxvd2VkXCJdLFtbNjk5NjgsNzAwMDNdLFwidmFsaWRcIl0sW1s3MDAwNCw3MDAwNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAwMDYsNzAwMDZdLFwidmFsaWRcIl0sW1s3MDAwNyw3MDAxNV0sXCJkaXNhbGxvd2VkXCJdLFtbNzAwMTYsNzAwODRdLFwidmFsaWRcIl0sW1s3MDA4NSw3MDA4OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAwODksNzAwODldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMDkwLDcwMDkyXSxcInZhbGlkXCJdLFtbNzAwOTMsNzAwOTNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMDk0LDcwMDk1XSxcImRpc2FsbG93ZWRcIl0sW1s3MDA5Niw3MDEwNV0sXCJ2YWxpZFwiXSxbWzcwMTA2LDcwMTA2XSxcInZhbGlkXCJdLFtbNzAxMDcsNzAxMDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMTA4LDcwMTA4XSxcInZhbGlkXCJdLFtbNzAxMDksNzAxMTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMTEyLDcwMTEyXSxcImRpc2FsbG93ZWRcIl0sW1s3MDExMyw3MDEzMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAxMzMsNzAxNDNdLFwiZGlzYWxsb3dlZFwiXSxbWzcwMTQ0LDcwMTYxXSxcInZhbGlkXCJdLFtbNzAxNjIsNzAxNjJdLFwiZGlzYWxsb3dlZFwiXSxbWzcwMTYzLDcwMTk5XSxcInZhbGlkXCJdLFtbNzAyMDAsNzAyMDVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMjA2LDcwMjcxXSxcImRpc2FsbG93ZWRcIl0sW1s3MDI3Miw3MDI3OF0sXCJ2YWxpZFwiXSxbWzcwMjc5LDcwMjc5XSxcImRpc2FsbG93ZWRcIl0sW1s3MDI4MCw3MDI4MF0sXCJ2YWxpZFwiXSxbWzcwMjgxLDcwMjgxXSxcImRpc2FsbG93ZWRcIl0sW1s3MDI4Miw3MDI4NV0sXCJ2YWxpZFwiXSxbWzcwMjg2LDcwMjg2XSxcImRpc2FsbG93ZWRcIl0sW1s3MDI4Nyw3MDMwMV0sXCJ2YWxpZFwiXSxbWzcwMzAyLDcwMzAyXSxcImRpc2FsbG93ZWRcIl0sW1s3MDMwMyw3MDMxMl0sXCJ2YWxpZFwiXSxbWzcwMzEzLDcwMzEzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MDMxNCw3MDMxOV0sXCJkaXNhbGxvd2VkXCJdLFtbNzAzMjAsNzAzNzhdLFwidmFsaWRcIl0sW1s3MDM3OSw3MDM4M10sXCJkaXNhbGxvd2VkXCJdLFtbNzAzODQsNzAzOTNdLFwidmFsaWRcIl0sW1s3MDM5NCw3MDM5OV0sXCJkaXNhbGxvd2VkXCJdLFtbNzA0MDAsNzA0MDBdLFwidmFsaWRcIl0sW1s3MDQwMSw3MDQwM10sXCJ2YWxpZFwiXSxbWzcwNDA0LDcwNDA0XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQwNSw3MDQxMl0sXCJ2YWxpZFwiXSxbWzcwNDEzLDcwNDE0XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQxNSw3MDQxNl0sXCJ2YWxpZFwiXSxbWzcwNDE3LDcwNDE4XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQxOSw3MDQ0MF0sXCJ2YWxpZFwiXSxbWzcwNDQxLDcwNDQxXSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ0Miw3MDQ0OF0sXCJ2YWxpZFwiXSxbWzcwNDQ5LDcwNDQ5XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ1MCw3MDQ1MV0sXCJ2YWxpZFwiXSxbWzcwNDUyLDcwNDUyXSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ1Myw3MDQ1N10sXCJ2YWxpZFwiXSxbWzcwNDU4LDcwNDU5XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ2MCw3MDQ2OF0sXCJ2YWxpZFwiXSxbWzcwNDY5LDcwNDcwXSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ3MSw3MDQ3Ml0sXCJ2YWxpZFwiXSxbWzcwNDczLDcwNDc0XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ3NSw3MDQ3N10sXCJ2YWxpZFwiXSxbWzcwNDc4LDcwNDc5XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ4MCw3MDQ4MF0sXCJ2YWxpZFwiXSxbWzcwNDgxLDcwNDg2XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ4Nyw3MDQ4N10sXCJ2YWxpZFwiXSxbWzcwNDg4LDcwNDkyXSxcImRpc2FsbG93ZWRcIl0sW1s3MDQ5Myw3MDQ5OV0sXCJ2YWxpZFwiXSxbWzcwNTAwLDcwNTAxXSxcImRpc2FsbG93ZWRcIl0sW1s3MDUwMiw3MDUwOF0sXCJ2YWxpZFwiXSxbWzcwNTA5LDcwNTExXSxcImRpc2FsbG93ZWRcIl0sW1s3MDUxMiw3MDUxNl0sXCJ2YWxpZFwiXSxbWzcwNTE3LDcwNzgzXSxcImRpc2FsbG93ZWRcIl0sW1s3MDc4NCw3MDg1M10sXCJ2YWxpZFwiXSxbWzcwODU0LDcwODU0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MDg1NSw3MDg1NV0sXCJ2YWxpZFwiXSxbWzcwODU2LDcwODYzXSxcImRpc2FsbG93ZWRcIl0sW1s3MDg2NCw3MDg3M10sXCJ2YWxpZFwiXSxbWzcwODc0LDcxMDM5XSxcImRpc2FsbG93ZWRcIl0sW1s3MTA0MCw3MTA5M10sXCJ2YWxpZFwiXSxbWzcxMDk0LDcxMDk1XSxcImRpc2FsbG93ZWRcIl0sW1s3MTA5Niw3MTEwNF0sXCJ2YWxpZFwiXSxbWzcxMTA1LDcxMTEzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MTExNCw3MTEyN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzExMjgsNzExMzNdLFwidmFsaWRcIl0sW1s3MTEzNCw3MTE2N10sXCJkaXNhbGxvd2VkXCJdLFtbNzExNjgsNzEyMzJdLFwidmFsaWRcIl0sW1s3MTIzMyw3MTIzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzEyMzYsNzEyMzZdLFwidmFsaWRcIl0sW1s3MTIzNyw3MTI0N10sXCJkaXNhbGxvd2VkXCJdLFtbNzEyNDgsNzEyNTddLFwidmFsaWRcIl0sW1s3MTI1OCw3MTI5NV0sXCJkaXNhbGxvd2VkXCJdLFtbNzEyOTYsNzEzNTFdLFwidmFsaWRcIl0sW1s3MTM1Miw3MTM1OV0sXCJkaXNhbGxvd2VkXCJdLFtbNzEzNjAsNzEzNjldLFwidmFsaWRcIl0sW1s3MTM3MCw3MTQyM10sXCJkaXNhbGxvd2VkXCJdLFtbNzE0MjQsNzE0NDldLFwidmFsaWRcIl0sW1s3MTQ1MCw3MTQ1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNzE0NTMsNzE0NjddLFwidmFsaWRcIl0sW1s3MTQ2OCw3MTQ3MV0sXCJkaXNhbGxvd2VkXCJdLFtbNzE0NzIsNzE0ODFdLFwidmFsaWRcIl0sW1s3MTQ4Miw3MTQ4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzE0ODgsNzE4MzldLFwiZGlzYWxsb3dlZFwiXSxbWzcxODQwLDcxODQwXSxcIm1hcHBlZFwiLFs3MTg3Ml1dLFtbNzE4NDEsNzE4NDFdLFwibWFwcGVkXCIsWzcxODczXV0sW1s3MTg0Miw3MTg0Ml0sXCJtYXBwZWRcIixbNzE4NzRdXSxbWzcxODQzLDcxODQzXSxcIm1hcHBlZFwiLFs3MTg3NV1dLFtbNzE4NDQsNzE4NDRdLFwibWFwcGVkXCIsWzcxODc2XV0sW1s3MTg0NSw3MTg0NV0sXCJtYXBwZWRcIixbNzE4NzddXSxbWzcxODQ2LDcxODQ2XSxcIm1hcHBlZFwiLFs3MTg3OF1dLFtbNzE4NDcsNzE4NDddLFwibWFwcGVkXCIsWzcxODc5XV0sW1s3MTg0OCw3MTg0OF0sXCJtYXBwZWRcIixbNzE4ODBdXSxbWzcxODQ5LDcxODQ5XSxcIm1hcHBlZFwiLFs3MTg4MV1dLFtbNzE4NTAsNzE4NTBdLFwibWFwcGVkXCIsWzcxODgyXV0sW1s3MTg1MSw3MTg1MV0sXCJtYXBwZWRcIixbNzE4ODNdXSxbWzcxODUyLDcxODUyXSxcIm1hcHBlZFwiLFs3MTg4NF1dLFtbNzE4NTMsNzE4NTNdLFwibWFwcGVkXCIsWzcxODg1XV0sW1s3MTg1NCw3MTg1NF0sXCJtYXBwZWRcIixbNzE4ODZdXSxbWzcxODU1LDcxODU1XSxcIm1hcHBlZFwiLFs3MTg4N11dLFtbNzE4NTYsNzE4NTZdLFwibWFwcGVkXCIsWzcxODg4XV0sW1s3MTg1Nyw3MTg1N10sXCJtYXBwZWRcIixbNzE4ODldXSxbWzcxODU4LDcxODU4XSxcIm1hcHBlZFwiLFs3MTg5MF1dLFtbNzE4NTksNzE4NTldLFwibWFwcGVkXCIsWzcxODkxXV0sW1s3MTg2MCw3MTg2MF0sXCJtYXBwZWRcIixbNzE4OTJdXSxbWzcxODYxLDcxODYxXSxcIm1hcHBlZFwiLFs3MTg5M11dLFtbNzE4NjIsNzE4NjJdLFwibWFwcGVkXCIsWzcxODk0XV0sW1s3MTg2Myw3MTg2M10sXCJtYXBwZWRcIixbNzE4OTVdXSxbWzcxODY0LDcxODY0XSxcIm1hcHBlZFwiLFs3MTg5Nl1dLFtbNzE4NjUsNzE4NjVdLFwibWFwcGVkXCIsWzcxODk3XV0sW1s3MTg2Niw3MTg2Nl0sXCJtYXBwZWRcIixbNzE4OThdXSxbWzcxODY3LDcxODY3XSxcIm1hcHBlZFwiLFs3MTg5OV1dLFtbNzE4NjgsNzE4NjhdLFwibWFwcGVkXCIsWzcxOTAwXV0sW1s3MTg2OSw3MTg2OV0sXCJtYXBwZWRcIixbNzE5MDFdXSxbWzcxODcwLDcxODcwXSxcIm1hcHBlZFwiLFs3MTkwMl1dLFtbNzE4NzEsNzE4NzFdLFwibWFwcGVkXCIsWzcxOTAzXV0sW1s3MTg3Miw3MTkxM10sXCJ2YWxpZFwiXSxbWzcxOTE0LDcxOTIyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MTkyMyw3MTkzNF0sXCJkaXNhbGxvd2VkXCJdLFtbNzE5MzUsNzE5MzVdLFwidmFsaWRcIl0sW1s3MTkzNiw3MjM4M10sXCJkaXNhbGxvd2VkXCJdLFtbNzIzODQsNzI0NDBdLFwidmFsaWRcIl0sW1s3MjQ0MSw3MzcyN10sXCJkaXNhbGxvd2VkXCJdLFtbNzM3MjgsNzQ2MDZdLFwidmFsaWRcIl0sW1s3NDYwNyw3NDY0OF0sXCJ2YWxpZFwiXSxbWzc0NjQ5LDc0NjQ5XSxcInZhbGlkXCJdLFtbNzQ2NTAsNzQ3NTFdLFwiZGlzYWxsb3dlZFwiXSxbWzc0NzUyLDc0ODUwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3NDg1MSw3NDg2Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzQ4NjMsNzQ4NjNdLFwiZGlzYWxsb3dlZFwiXSxbWzc0ODY0LDc0ODY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3NDg2OCw3NDg2OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzQ4NjksNzQ4NzldLFwiZGlzYWxsb3dlZFwiXSxbWzc0ODgwLDc1MDc1XSxcInZhbGlkXCJdLFtbNzUwNzYsNzc4MjNdLFwiZGlzYWxsb3dlZFwiXSxbWzc3ODI0LDc4ODk0XSxcInZhbGlkXCJdLFtbNzg4OTUsODI5NDNdLFwiZGlzYWxsb3dlZFwiXSxbWzgyOTQ0LDgzNTI2XSxcInZhbGlkXCJdLFtbODM1MjcsOTIxNTldLFwiZGlzYWxsb3dlZFwiXSxbWzkyMTYwLDkyNzI4XSxcInZhbGlkXCJdLFtbOTI3MjksOTI3MzVdLFwiZGlzYWxsb3dlZFwiXSxbWzkyNzM2LDkyNzY2XSxcInZhbGlkXCJdLFtbOTI3NjcsOTI3NjddLFwiZGlzYWxsb3dlZFwiXSxbWzkyNzY4LDkyNzc3XSxcInZhbGlkXCJdLFtbOTI3NzgsOTI3ODFdLFwiZGlzYWxsb3dlZFwiXSxbWzkyNzgyLDkyNzgzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5Mjc4NCw5Mjg3OV0sXCJkaXNhbGxvd2VkXCJdLFtbOTI4ODAsOTI5MDldLFwidmFsaWRcIl0sW1s5MjkxMCw5MjkxMV0sXCJkaXNhbGxvd2VkXCJdLFtbOTI5MTIsOTI5MTZdLFwidmFsaWRcIl0sW1s5MjkxNyw5MjkxN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTI5MTgsOTI5MjddLFwiZGlzYWxsb3dlZFwiXSxbWzkyOTI4LDkyOTgyXSxcInZhbGlkXCJdLFtbOTI5ODMsOTI5OTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkyOTkyLDkyOTk1XSxcInZhbGlkXCJdLFtbOTI5OTYsOTI5OTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkyOTk4LDkzMDA3XSxcImRpc2FsbG93ZWRcIl0sW1s5MzAwOCw5MzAxN10sXCJ2YWxpZFwiXSxbWzkzMDE4LDkzMDE4XSxcImRpc2FsbG93ZWRcIl0sW1s5MzAxOSw5MzAyNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTMwMjYsOTMwMjZdLFwiZGlzYWxsb3dlZFwiXSxbWzkzMDI3LDkzMDQ3XSxcInZhbGlkXCJdLFtbOTMwNDgsOTMwNTJdLFwiZGlzYWxsb3dlZFwiXSxbWzkzMDUzLDkzMDcxXSxcInZhbGlkXCJdLFtbOTMwNzIsOTM5NTFdLFwiZGlzYWxsb3dlZFwiXSxbWzkzOTUyLDk0MDIwXSxcInZhbGlkXCJdLFtbOTQwMjEsOTQwMzFdLFwiZGlzYWxsb3dlZFwiXSxbWzk0MDMyLDk0MDc4XSxcInZhbGlkXCJdLFtbOTQwNzksOTQwOTRdLFwiZGlzYWxsb3dlZFwiXSxbWzk0MDk1LDk0MTExXSxcInZhbGlkXCJdLFtbOTQxMTIsMTEwNTkxXSxcImRpc2FsbG93ZWRcIl0sW1sxMTA1OTIsMTEwNTkzXSxcInZhbGlkXCJdLFtbMTEwNTk0LDExMzY2M10sXCJkaXNhbGxvd2VkXCJdLFtbMTEzNjY0LDExMzc3MF0sXCJ2YWxpZFwiXSxbWzExMzc3MSwxMTM3NzVdLFwiZGlzYWxsb3dlZFwiXSxbWzExMzc3NiwxMTM3ODhdLFwidmFsaWRcIl0sW1sxMTM3ODksMTEzNzkxXSxcImRpc2FsbG93ZWRcIl0sW1sxMTM3OTIsMTEzODAwXSxcInZhbGlkXCJdLFtbMTEzODAxLDExMzgwN10sXCJkaXNhbGxvd2VkXCJdLFtbMTEzODA4LDExMzgxN10sXCJ2YWxpZFwiXSxbWzExMzgxOCwxMTM4MTldLFwiZGlzYWxsb3dlZFwiXSxbWzExMzgyMCwxMTM4MjBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMzgyMSwxMTM4MjJdLFwidmFsaWRcIl0sW1sxMTM4MjMsMTEzODIzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTM4MjQsMTEzODI3XSxcImlnbm9yZWRcIl0sW1sxMTM4MjgsMTE4NzgzXSxcImRpc2FsbG93ZWRcIl0sW1sxMTg3ODQsMTE5MDI5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkwMzAsMTE5MDM5XSxcImRpc2FsbG93ZWRcIl0sW1sxMTkwNDAsMTE5MDc4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkwNzksMTE5MDgwXSxcImRpc2FsbG93ZWRcIl0sW1sxMTkwODEsMTE5MDgxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkwODIsMTE5MTMzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkxMzQsMTE5MTM0XSxcIm1hcHBlZFwiLFsxMTkxMjcsMTE5MTQxXV0sW1sxMTkxMzUsMTE5MTM1XSxcIm1hcHBlZFwiLFsxMTkxMjgsMTE5MTQxXV0sW1sxMTkxMzYsMTE5MTM2XSxcIm1hcHBlZFwiLFsxMTkxMjgsMTE5MTQxLDExOTE1MF1dLFtbMTE5MTM3LDExOTEzN10sXCJtYXBwZWRcIixbMTE5MTI4LDExOTE0MSwxMTkxNTFdXSxbWzExOTEzOCwxMTkxMzhdLFwibWFwcGVkXCIsWzExOTEyOCwxMTkxNDEsMTE5MTUyXV0sW1sxMTkxMzksMTE5MTM5XSxcIm1hcHBlZFwiLFsxMTkxMjgsMTE5MTQxLDExOTE1M11dLFtbMTE5MTQwLDExOTE0MF0sXCJtYXBwZWRcIixbMTE5MTI4LDExOTE0MSwxMTkxNTRdXSxbWzExOTE0MSwxMTkxNTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTE1NSwxMTkxNjJdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTE2MywxMTkyMjZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTIyNywxMTkyMjddLFwibWFwcGVkXCIsWzExOTIyNSwxMTkxNDFdXSxbWzExOTIyOCwxMTkyMjhdLFwibWFwcGVkXCIsWzExOTIyNiwxMTkxNDFdXSxbWzExOTIyOSwxMTkyMjldLFwibWFwcGVkXCIsWzExOTIyNSwxMTkxNDEsMTE5MTUwXV0sW1sxMTkyMzAsMTE5MjMwXSxcIm1hcHBlZFwiLFsxMTkyMjYsMTE5MTQxLDExOTE1MF1dLFtbMTE5MjMxLDExOTIzMV0sXCJtYXBwZWRcIixbMTE5MjI1LDExOTE0MSwxMTkxNTFdXSxbWzExOTIzMiwxMTkyMzJdLFwibWFwcGVkXCIsWzExOTIyNiwxMTkxNDEsMTE5MTUxXV0sW1sxMTkyMzMsMTE5MjYxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkyNjIsMTE5MjcyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkyNzMsMTE5Mjk1XSxcImRpc2FsbG93ZWRcIl0sW1sxMTkyOTYsMTE5MzY1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkzNjYsMTE5NTUxXSxcImRpc2FsbG93ZWRcIl0sW1sxMTk1NTIsMTE5NjM4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTk2MzksMTE5NjQ3XSxcImRpc2FsbG93ZWRcIl0sW1sxMTk2NDgsMTE5NjY1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTk2NjYsMTE5ODA3XSxcImRpc2FsbG93ZWRcIl0sW1sxMTk4MDgsMTE5ODA4XSxcIm1hcHBlZFwiLFs5N11dLFtbMTE5ODA5LDExOTgwOV0sXCJtYXBwZWRcIixbOThdXSxbWzExOTgxMCwxMTk4MTBdLFwibWFwcGVkXCIsWzk5XV0sW1sxMTk4MTEsMTE5ODExXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzExOTgxMiwxMTk4MTJdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTE5ODEzLDExOTgxM10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMTk4MTQsMTE5ODE0XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzExOTgxNSwxMTk4MTVdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTE5ODE2LDExOTgxNl0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMTk4MTcsMTE5ODE3XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzExOTgxOCwxMTk4MThdLFwibWFwcGVkXCIsWzEwN11dLFtbMTE5ODE5LDExOTgxOV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMTk4MjAsMTE5ODIwXSxcIm1hcHBlZFwiLFsxMDldXSxbWzExOTgyMSwxMTk4MjFdLFwibWFwcGVkXCIsWzExMF1dLFtbMTE5ODIyLDExOTgyMl0sXCJtYXBwZWRcIixbMTExXV0sW1sxMTk4MjMsMTE5ODIzXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzExOTgyNCwxMTk4MjRdLFwibWFwcGVkXCIsWzExM11dLFtbMTE5ODI1LDExOTgyNV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMTk4MjYsMTE5ODI2XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzExOTgyNywxMTk4MjddLFwibWFwcGVkXCIsWzExNl1dLFtbMTE5ODI4LDExOTgyOF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMTk4MjksMTE5ODI5XSxcIm1hcHBlZFwiLFsxMThdXSxbWzExOTgzMCwxMTk4MzBdLFwibWFwcGVkXCIsWzExOV1dLFtbMTE5ODMxLDExOTgzMV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMTk4MzIsMTE5ODMyXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzExOTgzMywxMTk4MzNdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTE5ODM0LDExOTgzNF0sXCJtYXBwZWRcIixbOTddXSxbWzExOTgzNSwxMTk4MzVdLFwibWFwcGVkXCIsWzk4XV0sW1sxMTk4MzYsMTE5ODM2XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTE5ODM3LDExOTgzN10sXCJtYXBwZWRcIixbMTAwXV0sW1sxMTk4MzgsMTE5ODM4XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzExOTgzOSwxMTk4MzldLFwibWFwcGVkXCIsWzEwMl1dLFtbMTE5ODQwLDExOTg0MF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMTk4NDEsMTE5ODQxXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzExOTg0MiwxMTk4NDJdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTE5ODQzLDExOTg0M10sXCJtYXBwZWRcIixbMTA2XV0sW1sxMTk4NDQsMTE5ODQ0XSxcIm1hcHBlZFwiLFsxMDddXSxbWzExOTg0NSwxMTk4NDVdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTE5ODQ2LDExOTg0Nl0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMTk4NDcsMTE5ODQ3XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzExOTg0OCwxMTk4NDhdLFwibWFwcGVkXCIsWzExMV1dLFtbMTE5ODQ5LDExOTg0OV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMTk4NTAsMTE5ODUwXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzExOTg1MSwxMTk4NTFdLFwibWFwcGVkXCIsWzExNF1dLFtbMTE5ODUyLDExOTg1Ml0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMTk4NTMsMTE5ODUzXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzExOTg1NCwxMTk4NTRdLFwibWFwcGVkXCIsWzExN11dLFtbMTE5ODU1LDExOTg1NV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMTk4NTYsMTE5ODU2XSxcIm1hcHBlZFwiLFsxMTldXSxbWzExOTg1NywxMTk4NTddLFwibWFwcGVkXCIsWzEyMF1dLFtbMTE5ODU4LDExOTg1OF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMTk4NTksMTE5ODU5XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzExOTg2MCwxMTk4NjBdLFwibWFwcGVkXCIsWzk3XV0sW1sxMTk4NjEsMTE5ODYxXSxcIm1hcHBlZFwiLFs5OF1dLFtbMTE5ODYyLDExOTg2Ml0sXCJtYXBwZWRcIixbOTldXSxbWzExOTg2MywxMTk4NjNdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTE5ODY0LDExOTg2NF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMTk4NjUsMTE5ODY1XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzExOTg2NiwxMTk4NjZdLFwibWFwcGVkXCIsWzEwM11dLFtbMTE5ODY3LDExOTg2N10sXCJtYXBwZWRcIixbMTA0XV0sW1sxMTk4NjgsMTE5ODY4XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzExOTg2OSwxMTk4NjldLFwibWFwcGVkXCIsWzEwNl1dLFtbMTE5ODcwLDExOTg3MF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMTk4NzEsMTE5ODcxXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzExOTg3MiwxMTk4NzJdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTE5ODczLDExOTg3M10sXCJtYXBwZWRcIixbMTEwXV0sW1sxMTk4NzQsMTE5ODc0XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzExOTg3NSwxMTk4NzVdLFwibWFwcGVkXCIsWzExMl1dLFtbMTE5ODc2LDExOTg3Nl0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMTk4NzcsMTE5ODc3XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzExOTg3OCwxMTk4NzhdLFwibWFwcGVkXCIsWzExNV1dLFtbMTE5ODc5LDExOTg3OV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMTk4ODAsMTE5ODgwXSxcIm1hcHBlZFwiLFsxMTddXSxbWzExOTg4MSwxMTk4ODFdLFwibWFwcGVkXCIsWzExOF1dLFtbMTE5ODgyLDExOTg4Ml0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMTk4ODMsMTE5ODgzXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzExOTg4NCwxMTk4ODRdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTE5ODg1LDExOTg4NV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMTk4ODYsMTE5ODg2XSxcIm1hcHBlZFwiLFs5N11dLFtbMTE5ODg3LDExOTg4N10sXCJtYXBwZWRcIixbOThdXSxbWzExOTg4OCwxMTk4ODhdLFwibWFwcGVkXCIsWzk5XV0sW1sxMTk4ODksMTE5ODg5XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzExOTg5MCwxMTk4OTBdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTE5ODkxLDExOTg5MV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMTk4OTIsMTE5ODkyXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzExOTg5MywxMTk4OTNdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTg5NCwxMTk4OTRdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTE5ODk1LDExOTg5NV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMTk4OTYsMTE5ODk2XSxcIm1hcHBlZFwiLFsxMDddXSxbWzExOTg5NywxMTk4OTddLFwibWFwcGVkXCIsWzEwOF1dLFtbMTE5ODk4LDExOTg5OF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMTk4OTksMTE5ODk5XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzExOTkwMCwxMTk5MDBdLFwibWFwcGVkXCIsWzExMV1dLFtbMTE5OTAxLDExOTkwMV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMTk5MDIsMTE5OTAyXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzExOTkwMywxMTk5MDNdLFwibWFwcGVkXCIsWzExNF1dLFtbMTE5OTA0LDExOTkwNF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMTk5MDUsMTE5OTA1XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzExOTkwNiwxMTk5MDZdLFwibWFwcGVkXCIsWzExN11dLFtbMTE5OTA3LDExOTkwN10sXCJtYXBwZWRcIixbMTE4XV0sW1sxMTk5MDgsMTE5OTA4XSxcIm1hcHBlZFwiLFsxMTldXSxbWzExOTkwOSwxMTk5MDldLFwibWFwcGVkXCIsWzEyMF1dLFtbMTE5OTEwLDExOTkxMF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMTk5MTEsMTE5OTExXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzExOTkxMiwxMTk5MTJdLFwibWFwcGVkXCIsWzk3XV0sW1sxMTk5MTMsMTE5OTEzXSxcIm1hcHBlZFwiLFs5OF1dLFtbMTE5OTE0LDExOTkxNF0sXCJtYXBwZWRcIixbOTldXSxbWzExOTkxNSwxMTk5MTVdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTE5OTE2LDExOTkxNl0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMTk5MTcsMTE5OTE3XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzExOTkxOCwxMTk5MThdLFwibWFwcGVkXCIsWzEwM11dLFtbMTE5OTE5LDExOTkxOV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMTk5MjAsMTE5OTIwXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzExOTkyMSwxMTk5MjFdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTE5OTIyLDExOTkyMl0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMTk5MjMsMTE5OTIzXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzExOTkyNCwxMTk5MjRdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTE5OTI1LDExOTkyNV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMTk5MjYsMTE5OTI2XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzExOTkyNywxMTk5MjddLFwibWFwcGVkXCIsWzExMl1dLFtbMTE5OTI4LDExOTkyOF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMTk5MjksMTE5OTI5XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzExOTkzMCwxMTk5MzBdLFwibWFwcGVkXCIsWzExNV1dLFtbMTE5OTMxLDExOTkzMV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMTk5MzIsMTE5OTMyXSxcIm1hcHBlZFwiLFsxMTddXSxbWzExOTkzMywxMTk5MzNdLFwibWFwcGVkXCIsWzExOF1dLFtbMTE5OTM0LDExOTkzNF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMTk5MzUsMTE5OTM1XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzExOTkzNiwxMTk5MzZdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTE5OTM3LDExOTkzN10sXCJtYXBwZWRcIixbMTIyXV0sW1sxMTk5MzgsMTE5OTM4XSxcIm1hcHBlZFwiLFs5N11dLFtbMTE5OTM5LDExOTkzOV0sXCJtYXBwZWRcIixbOThdXSxbWzExOTk0MCwxMTk5NDBdLFwibWFwcGVkXCIsWzk5XV0sW1sxMTk5NDEsMTE5OTQxXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzExOTk0MiwxMTk5NDJdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTE5OTQzLDExOTk0M10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMTk5NDQsMTE5OTQ0XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzExOTk0NSwxMTk5NDVdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTE5OTQ2LDExOTk0Nl0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMTk5NDcsMTE5OTQ3XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzExOTk0OCwxMTk5NDhdLFwibWFwcGVkXCIsWzEwN11dLFtbMTE5OTQ5LDExOTk0OV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMTk5NTAsMTE5OTUwXSxcIm1hcHBlZFwiLFsxMDldXSxbWzExOTk1MSwxMTk5NTFdLFwibWFwcGVkXCIsWzExMF1dLFtbMTE5OTUyLDExOTk1Ml0sXCJtYXBwZWRcIixbMTExXV0sW1sxMTk5NTMsMTE5OTUzXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzExOTk1NCwxMTk5NTRdLFwibWFwcGVkXCIsWzExM11dLFtbMTE5OTU1LDExOTk1NV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMTk5NTYsMTE5OTU2XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzExOTk1NywxMTk5NTddLFwibWFwcGVkXCIsWzExNl1dLFtbMTE5OTU4LDExOTk1OF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMTk5NTksMTE5OTU5XSxcIm1hcHBlZFwiLFsxMThdXSxbWzExOTk2MCwxMTk5NjBdLFwibWFwcGVkXCIsWzExOV1dLFtbMTE5OTYxLDExOTk2MV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMTk5NjIsMTE5OTYyXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzExOTk2MywxMTk5NjNdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTE5OTY0LDExOTk2NF0sXCJtYXBwZWRcIixbOTddXSxbWzExOTk2NSwxMTk5NjVdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTk2NiwxMTk5NjZdLFwibWFwcGVkXCIsWzk5XV0sW1sxMTk5NjcsMTE5OTY3XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzExOTk2OCwxMTk5NjldLFwiZGlzYWxsb3dlZFwiXSxbWzExOTk3MCwxMTk5NzBdLFwibWFwcGVkXCIsWzEwM11dLFtbMTE5OTcxLDExOTk3Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMTE5OTczLDExOTk3M10sXCJtYXBwZWRcIixbMTA2XV0sW1sxMTk5NzQsMTE5OTc0XSxcIm1hcHBlZFwiLFsxMDddXSxbWzExOTk3NSwxMTk5NzZdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTk3NywxMTk5NzddLFwibWFwcGVkXCIsWzExMF1dLFtbMTE5OTc4LDExOTk3OF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMTk5NzksMTE5OTc5XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzExOTk4MCwxMTk5ODBdLFwibWFwcGVkXCIsWzExM11dLFtbMTE5OTgxLDExOTk4MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTE5OTgyLDExOTk4Ml0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMTk5ODMsMTE5OTgzXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzExOTk4NCwxMTk5ODRdLFwibWFwcGVkXCIsWzExN11dLFtbMTE5OTg1LDExOTk4NV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMTk5ODYsMTE5OTg2XSxcIm1hcHBlZFwiLFsxMTldXSxbWzExOTk4NywxMTk5ODddLFwibWFwcGVkXCIsWzEyMF1dLFtbMTE5OTg4LDExOTk4OF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMTk5ODksMTE5OTg5XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzExOTk5MCwxMTk5OTBdLFwibWFwcGVkXCIsWzk3XV0sW1sxMTk5OTEsMTE5OTkxXSxcIm1hcHBlZFwiLFs5OF1dLFtbMTE5OTkyLDExOTk5Ml0sXCJtYXBwZWRcIixbOTldXSxbWzExOTk5MywxMTk5OTNdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTE5OTk0LDExOTk5NF0sXCJkaXNhbGxvd2VkXCJdLFtbMTE5OTk1LDExOTk5NV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMTk5OTYsMTE5OTk2XSxcImRpc2FsbG93ZWRcIl0sW1sxMTk5OTcsMTE5OTk3XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzExOTk5OCwxMTk5OThdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTE5OTk5LDExOTk5OV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAwMDAsMTIwMDAwXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDAwMSwxMjAwMDFdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMDAyLDEyMDAwMl0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAwMDMsMTIwMDAzXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDAwNCwxMjAwMDRdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDAwNSwxMjAwMDVdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMDA2LDEyMDAwNl0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAwMDcsMTIwMDA3XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDAwOCwxMjAwMDhdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMDA5LDEyMDAwOV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAwMTAsMTIwMDEwXSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDAxMSwxMjAwMTFdLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMDEyLDEyMDAxMl0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAwMTMsMTIwMDEzXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDAxNCwxMjAwMTRdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMDE1LDEyMDAxNV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAwMTYsMTIwMDE2XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMDE3LDEyMDAxN10sXCJtYXBwZWRcIixbOThdXSxbWzEyMDAxOCwxMjAwMThdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAwMTksMTIwMDE5XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDAyMCwxMjAwMjBdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMDIxLDEyMDAyMV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAwMjIsMTIwMDIyXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDAyMywxMjAwMjNdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMDI0LDEyMDAyNF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAwMjUsMTIwMDI1XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDAyNiwxMjAwMjZdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMDI3LDEyMDAyN10sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAwMjgsMTIwMDI4XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDAyOSwxMjAwMjldLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMDMwLDEyMDAzMF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAwMzEsMTIwMDMxXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDAzMiwxMjAwMzJdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMDMzLDEyMDAzM10sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAwMzQsMTIwMDM0XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDAzNSwxMjAwMzVdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMDM2LDEyMDAzNl0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAwMzcsMTIwMDM3XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDAzOCwxMjAwMzhdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMDM5LDEyMDAzOV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAwNDAsMTIwMDQwXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDA0MSwxMjAwNDFdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMDQyLDEyMDA0Ml0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDA0MywxMjAwNDNdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAwNDQsMTIwMDQ0XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMDQ1LDEyMDA0NV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAwNDYsMTIwMDQ2XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDA0NywxMjAwNDddLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMDQ4LDEyMDA0OF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAwNDksMTIwMDQ5XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDA1MCwxMjAwNTBdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMDUxLDEyMDA1MV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAwNTIsMTIwMDUyXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDA1MywxMjAwNTNdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMDU0LDEyMDA1NF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAwNTUsMTIwMDU1XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDA1NiwxMjAwNTZdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMDU3LDEyMDA1N10sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAwNTgsMTIwMDU4XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDA1OSwxMjAwNTldLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMDYwLDEyMDA2MF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAwNjEsMTIwMDYxXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDA2MiwxMjAwNjJdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMDYzLDEyMDA2M10sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAwNjQsMTIwMDY0XSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDA2NSwxMjAwNjVdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMDY2LDEyMDA2Nl0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAwNjcsMTIwMDY3XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDA2OCwxMjAwNjhdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAwNjksMTIwMDY5XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMDcwLDEyMDA3MF0sXCJkaXNhbGxvd2VkXCJdLFtbMTIwMDcxLDEyMDA3MV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAwNzIsMTIwMDcyXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDA3MywxMjAwNzNdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMDc0LDEyMDA3NF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAwNzUsMTIwMDc2XSxcImRpc2FsbG93ZWRcIl0sW1sxMjAwNzcsMTIwMDc3XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDA3OCwxMjAwNzhdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMDc5LDEyMDA3OV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAwODAsMTIwMDgwXSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDA4MSwxMjAwODFdLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMDgyLDEyMDA4Ml0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAwODMsMTIwMDgzXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDA4NCwxMjAwODRdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMDg1LDEyMDA4NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTIwMDg2LDEyMDA4Nl0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAwODcsMTIwMDg3XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDA4OCwxMjAwODhdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMDg5LDEyMDA4OV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAwOTAsMTIwMDkwXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDA5MSwxMjAwOTFdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMDkyLDEyMDA5Ml0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAwOTMsMTIwMDkzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjAwOTQsMTIwMDk0XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMDk1LDEyMDA5NV0sXCJtYXBwZWRcIixbOThdXSxbWzEyMDA5NiwxMjAwOTZdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAwOTcsMTIwMDk3XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDA5OCwxMjAwOThdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMDk5LDEyMDA5OV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAxMDAsMTIwMTAwXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDEwMSwxMjAxMDFdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMTAyLDEyMDEwMl0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAxMDMsMTIwMTAzXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDEwNCwxMjAxMDRdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMTA1LDEyMDEwNV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAxMDYsMTIwMTA2XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDEwNywxMjAxMDddLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMTA4LDEyMDEwOF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAxMDksMTIwMTA5XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDExMCwxMjAxMTBdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMTExLDEyMDExMV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAxMTIsMTIwMTEyXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDExMywxMjAxMTNdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMTE0LDEyMDExNF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAxMTUsMTIwMTE1XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDExNiwxMjAxMTZdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMTE3LDEyMDExN10sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAxMTgsMTIwMTE4XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDExOSwxMjAxMTldLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMTIwLDEyMDEyMF0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDEyMSwxMjAxMjFdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAxMjIsMTIwMTIyXSxcImRpc2FsbG93ZWRcIl0sW1sxMjAxMjMsMTIwMTIzXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDEyNCwxMjAxMjRdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMTI1LDEyMDEyNV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAxMjYsMTIwMTI2XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDEyNywxMjAxMjddLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDEyOCwxMjAxMjhdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMTI5LDEyMDEyOV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAxMzAsMTIwMTMwXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDEzMSwxMjAxMzFdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMTMyLDEyMDEzMl0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAxMzMsMTIwMTMzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjAxMzQsMTIwMTM0XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDEzNSwxMjAxMzddLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDEzOCwxMjAxMzhdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMTM5LDEyMDEzOV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAxNDAsMTIwMTQwXSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDE0MSwxMjAxNDFdLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMTQyLDEyMDE0Ml0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAxNDMsMTIwMTQzXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDE0NCwxMjAxNDRdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMTQ1LDEyMDE0NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTIwMTQ2LDEyMDE0Nl0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDE0NywxMjAxNDddLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAxNDgsMTIwMTQ4XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMTQ5LDEyMDE0OV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAxNTAsMTIwMTUwXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDE1MSwxMjAxNTFdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMTUyLDEyMDE1Ml0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAxNTMsMTIwMTUzXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDE1NCwxMjAxNTRdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMTU1LDEyMDE1NV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAxNTYsMTIwMTU2XSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDE1NywxMjAxNTddLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMTU4LDEyMDE1OF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAxNTksMTIwMTU5XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDE2MCwxMjAxNjBdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMTYxLDEyMDE2MV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAxNjIsMTIwMTYyXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDE2MywxMjAxNjNdLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMTY0LDEyMDE2NF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAxNjUsMTIwMTY1XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDE2NiwxMjAxNjZdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMTY3LDEyMDE2N10sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAxNjgsMTIwMTY4XSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDE2OSwxMjAxNjldLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMTcwLDEyMDE3MF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAxNzEsMTIwMTcxXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDE3MiwxMjAxNzJdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAxNzMsMTIwMTczXSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMTc0LDEyMDE3NF0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDE3NSwxMjAxNzVdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMTc2LDEyMDE3Nl0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAxNzcsMTIwMTc3XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDE3OCwxMjAxNzhdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMTc5LDEyMDE3OV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjAxODAsMTIwMTgwXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDE4MSwxMjAxODFdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMTgyLDEyMDE4Ml0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAxODMsMTIwMTgzXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDE4NCwxMjAxODRdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMTg1LDEyMDE4NV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAxODYsMTIwMTg2XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDE4NywxMjAxODddLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMTg4LDEyMDE4OF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAxODksMTIwMTg5XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDE5MCwxMjAxOTBdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMTkxLDEyMDE5MV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAxOTIsMTIwMTkyXSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDE5MywxMjAxOTNdLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMTk0LDEyMDE5NF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAxOTUsMTIwMTk1XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDE5NiwxMjAxOTZdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMTk3LDEyMDE5N10sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAxOTgsMTIwMTk4XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMTk5LDEyMDE5OV0sXCJtYXBwZWRcIixbOThdXSxbWzEyMDIwMCwxMjAyMDBdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAyMDEsMTIwMjAxXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDIwMiwxMjAyMDJdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMjAzLDEyMDIwM10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAyMDQsMTIwMjA0XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDIwNSwxMjAyMDVdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMjA2LDEyMDIwNl0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAyMDcsMTIwMjA3XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDIwOCwxMjAyMDhdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMjA5LDEyMDIwOV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAyMTAsMTIwMjEwXSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDIxMSwxMjAyMTFdLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMjEyLDEyMDIxMl0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAyMTMsMTIwMjEzXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDIxNCwxMjAyMTRdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMjE1LDEyMDIxNV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAyMTYsMTIwMjE2XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDIxNywxMjAyMTddLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMjE4LDEyMDIxOF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAyMTksMTIwMjE5XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDIyMCwxMjAyMjBdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMjIxLDEyMDIyMV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAyMjIsMTIwMjIyXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDIyMywxMjAyMjNdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMjI0LDEyMDIyNF0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDIyNSwxMjAyMjVdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAyMjYsMTIwMjI2XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMjI3LDEyMDIyN10sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAyMjgsMTIwMjI4XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDIyOSwxMjAyMjldLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMjMwLDEyMDIzMF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAyMzEsMTIwMjMxXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDIzMiwxMjAyMzJdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMjMzLDEyMDIzM10sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAyMzQsMTIwMjM0XSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDIzNSwxMjAyMzVdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMjM2LDEyMDIzNl0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAyMzcsMTIwMjM3XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDIzOCwxMjAyMzhdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMjM5LDEyMDIzOV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAyNDAsMTIwMjQwXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDI0MSwxMjAyNDFdLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMjQyLDEyMDI0Ml0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAyNDMsMTIwMjQzXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDI0NCwxMjAyNDRdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMjQ1LDEyMDI0NV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAyNDYsMTIwMjQ2XSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDI0NywxMjAyNDddLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMjQ4LDEyMDI0OF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAyNDksMTIwMjQ5XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDI1MCwxMjAyNTBdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAyNTEsMTIwMjUxXSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMjUyLDEyMDI1Ml0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDI1MywxMjAyNTNdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMjU0LDEyMDI1NF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAyNTUsMTIwMjU1XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDI1NiwxMjAyNTZdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMjU3LDEyMDI1N10sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjAyNTgsMTIwMjU4XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDI1OSwxMjAyNTldLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMjYwLDEyMDI2MF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAyNjEsMTIwMjYxXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDI2MiwxMjAyNjJdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMjYzLDEyMDI2M10sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAyNjQsMTIwMjY0XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDI2NSwxMjAyNjVdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMjY2LDEyMDI2Nl0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAyNjcsMTIwMjY3XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDI2OCwxMjAyNjhdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMjY5LDEyMDI2OV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAyNzAsMTIwMjcwXSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDI3MSwxMjAyNzFdLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMjcyLDEyMDI3Ml0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAyNzMsMTIwMjczXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDI3NCwxMjAyNzRdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMjc1LDEyMDI3NV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAyNzYsMTIwMjc2XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMjc3LDEyMDI3N10sXCJtYXBwZWRcIixbOThdXSxbWzEyMDI3OCwxMjAyNzhdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAyNzksMTIwMjc5XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDI4MCwxMjAyODBdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMjgxLDEyMDI4MV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAyODIsMTIwMjgyXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDI4MywxMjAyODNdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMjg0LDEyMDI4NF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAyODUsMTIwMjg1XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDI4NiwxMjAyODZdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMjg3LDEyMDI4N10sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAyODgsMTIwMjg4XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDI4OSwxMjAyODldLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMjkwLDEyMDI5MF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAyOTEsMTIwMjkxXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDI5MiwxMjAyOTJdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMjkzLDEyMDI5M10sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAyOTQsMTIwMjk0XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDI5NSwxMjAyOTVdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMjk2LDEyMDI5Nl0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAyOTcsMTIwMjk3XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDI5OCwxMjAyOThdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMjk5LDEyMDI5OV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAzMDAsMTIwMzAwXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDMwMSwxMjAzMDFdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMzAyLDEyMDMwMl0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDMwMywxMjAzMDNdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAzMDQsMTIwMzA0XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMzA1LDEyMDMwNV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAzMDYsMTIwMzA2XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDMwNywxMjAzMDddLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMzA4LDEyMDMwOF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAzMDksMTIwMzA5XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDMxMCwxMjAzMTBdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMzExLDEyMDMxMV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAzMTIsMTIwMzEyXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDMxMywxMjAzMTNdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMzE0LDEyMDMxNF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAzMTUsMTIwMzE1XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDMxNiwxMjAzMTZdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMzE3LDEyMDMxN10sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAzMTgsMTIwMzE4XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDMxOSwxMjAzMTldLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMzIwLDEyMDMyMF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAzMjEsMTIwMzIxXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDMyMiwxMjAzMjJdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMzIzLDEyMDMyM10sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAzMjQsMTIwMzI0XSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDMyNSwxMjAzMjVdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMzI2LDEyMDMyNl0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAzMjcsMTIwMzI3XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDMyOCwxMjAzMjhdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAzMjksMTIwMzI5XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMzMwLDEyMDMzMF0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDMzMSwxMjAzMzFdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMzMyLDEyMDMzMl0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAzMzMsMTIwMzMzXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDMzNCwxMjAzMzRdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMzM1LDEyMDMzNV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjAzMzYsMTIwMzM2XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDMzNywxMjAzMzddLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMzM4LDEyMDMzOF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAzMzksMTIwMzM5XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDM0MCwxMjAzNDBdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMzQxLDEyMDM0MV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAzNDIsMTIwMzQyXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDM0MywxMjAzNDNdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMzQ0LDEyMDM0NF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAzNDUsMTIwMzQ1XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDM0NiwxMjAzNDZdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMzQ3LDEyMDM0N10sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAzNDgsMTIwMzQ4XSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDM0OSwxMjAzNDldLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMzUwLDEyMDM1MF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAzNTEsMTIwMzUxXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDM1MiwxMjAzNTJdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMzUzLDEyMDM1M10sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAzNTQsMTIwMzU0XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMzU1LDEyMDM1NV0sXCJtYXBwZWRcIixbOThdXSxbWzEyMDM1NiwxMjAzNTZdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAzNTcsMTIwMzU3XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDM1OCwxMjAzNThdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMzU5LDEyMDM1OV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAzNjAsMTIwMzYwXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDM2MSwxMjAzNjFdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMzYyLDEyMDM2Ml0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAzNjMsMTIwMzYzXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDM2NCwxMjAzNjRdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMzY1LDEyMDM2NV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAzNjYsMTIwMzY2XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDM2NywxMjAzNjddLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMzY4LDEyMDM2OF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAzNjksMTIwMzY5XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDM3MCwxMjAzNzBdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMzcxLDEyMDM3MV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAzNzIsMTIwMzcyXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDM3MywxMjAzNzNdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMzc0LDEyMDM3NF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAzNzUsMTIwMzc1XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDM3NiwxMjAzNzZdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMzc3LDEyMDM3N10sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAzNzgsMTIwMzc4XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDM3OSwxMjAzNzldLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMzgwLDEyMDM4MF0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDM4MSwxMjAzODFdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAzODIsMTIwMzgyXSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMzgzLDEyMDM4M10sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAzODQsMTIwMzg0XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDM4NSwxMjAzODVdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMzg2LDEyMDM4Nl0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAzODcsMTIwMzg3XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDM4OCwxMjAzODhdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMzg5LDEyMDM4OV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAzOTAsMTIwMzkwXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDM5MSwxMjAzOTFdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMzkyLDEyMDM5Ml0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAzOTMsMTIwMzkzXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDM5NCwxMjAzOTRdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMzk1LDEyMDM5NV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAzOTYsMTIwMzk2XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDM5NywxMjAzOTddLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMzk4LDEyMDM5OF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAzOTksMTIwMzk5XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDQwMCwxMjA0MDBdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwNDAxLDEyMDQwMV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjA0MDIsMTIwNDAyXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDQwMywxMjA0MDNdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwNDA0LDEyMDQwNF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjA0MDUsMTIwNDA1XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDQwNiwxMjA0MDZdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjA0MDcsMTIwNDA3XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwNDA4LDEyMDQwOF0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDQwOSwxMjA0MDldLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwNDEwLDEyMDQxMF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjA0MTEsMTIwNDExXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDQxMiwxMjA0MTJdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwNDEzLDEyMDQxM10sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjA0MTQsMTIwNDE0XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDQxNSwxMjA0MTVdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwNDE2LDEyMDQxNl0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjA0MTcsMTIwNDE3XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDQxOCwxMjA0MThdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwNDE5LDEyMDQxOV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjA0MjAsMTIwNDIwXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDQyMSwxMjA0MjFdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwNDIyLDEyMDQyMl0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjA0MjMsMTIwNDIzXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDQyNCwxMjA0MjRdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwNDI1LDEyMDQyNV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjA0MjYsMTIwNDI2XSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDQyNywxMjA0MjddLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwNDI4LDEyMDQyOF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjA0MjksMTIwNDI5XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDQzMCwxMjA0MzBdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwNDMxLDEyMDQzMV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjA0MzIsMTIwNDMyXSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwNDMzLDEyMDQzM10sXCJtYXBwZWRcIixbOThdXSxbWzEyMDQzNCwxMjA0MzRdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjA0MzUsMTIwNDM1XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDQzNiwxMjA0MzZdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwNDM3LDEyMDQzN10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjA0MzgsMTIwNDM4XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDQzOSwxMjA0MzldLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwNDQwLDEyMDQ0MF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjA0NDEsMTIwNDQxXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDQ0MiwxMjA0NDJdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwNDQzLDEyMDQ0M10sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjA0NDQsMTIwNDQ0XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDQ0NSwxMjA0NDVdLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwNDQ2LDEyMDQ0Nl0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjA0NDcsMTIwNDQ3XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDQ0OCwxMjA0NDhdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwNDQ5LDEyMDQ0OV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjA0NTAsMTIwNDUwXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDQ1MSwxMjA0NTFdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwNDUyLDEyMDQ1Ml0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjA0NTMsMTIwNDUzXSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDQ1NCwxMjA0NTRdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwNDU1LDEyMDQ1NV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjA0NTYsMTIwNDU2XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDQ1NywxMjA0NTddLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwNDU4LDEyMDQ1OF0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDQ1OSwxMjA0NTldLFwibWFwcGVkXCIsWzk4XV0sW1sxMjA0NjAsMTIwNDYwXSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwNDYxLDEyMDQ2MV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjA0NjIsMTIwNDYyXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDQ2MywxMjA0NjNdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwNDY0LDEyMDQ2NF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjA0NjUsMTIwNDY1XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDQ2NiwxMjA0NjZdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwNDY3LDEyMDQ2N10sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjA0NjgsMTIwNDY4XSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDQ2OSwxMjA0NjldLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwNDcwLDEyMDQ3MF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjA0NzEsMTIwNDcxXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDQ3MiwxMjA0NzJdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwNDczLDEyMDQ3M10sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjA0NzQsMTIwNDc0XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDQ3NSwxMjA0NzVdLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwNDc2LDEyMDQ3Nl0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjA0NzcsMTIwNDc3XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDQ3OCwxMjA0NzhdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwNDc5LDEyMDQ3OV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjA0ODAsMTIwNDgwXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDQ4MSwxMjA0ODFdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwNDgyLDEyMDQ4Ml0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjA0ODMsMTIwNDgzXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDQ4NCwxMjA0ODRdLFwibWFwcGVkXCIsWzMwNV1dLFtbMTIwNDg1LDEyMDQ4NV0sXCJtYXBwZWRcIixbNTY3XV0sW1sxMjA0ODYsMTIwNDg3XSxcImRpc2FsbG93ZWRcIl0sW1sxMjA0ODgsMTIwNDg4XSxcIm1hcHBlZFwiLFs5NDVdXSxbWzEyMDQ4OSwxMjA0ODldLFwibWFwcGVkXCIsWzk0Nl1dLFtbMTIwNDkwLDEyMDQ5MF0sXCJtYXBwZWRcIixbOTQ3XV0sW1sxMjA0OTEsMTIwNDkxXSxcIm1hcHBlZFwiLFs5NDhdXSxbWzEyMDQ5MiwxMjA0OTJdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNDkzLDEyMDQ5M10sXCJtYXBwZWRcIixbOTUwXV0sW1sxMjA0OTQsMTIwNDk0XSxcIm1hcHBlZFwiLFs5NTFdXSxbWzEyMDQ5NSwxMjA0OTVdLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNDk2LDEyMDQ5Nl0sXCJtYXBwZWRcIixbOTUzXV0sW1sxMjA0OTcsMTIwNDk3XSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDQ5OCwxMjA0OThdLFwibWFwcGVkXCIsWzk1NV1dLFtbMTIwNDk5LDEyMDQ5OV0sXCJtYXBwZWRcIixbOTU2XV0sW1sxMjA1MDAsMTIwNTAwXSxcIm1hcHBlZFwiLFs5NTddXSxbWzEyMDUwMSwxMjA1MDFdLFwibWFwcGVkXCIsWzk1OF1dLFtbMTIwNTAyLDEyMDUwMl0sXCJtYXBwZWRcIixbOTU5XV0sW1sxMjA1MDMsMTIwNTAzXSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDUwNCwxMjA1MDRdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNTA1LDEyMDUwNV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA1MDYsMTIwNTA2XSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEyMDUwNywxMjA1MDddLFwibWFwcGVkXCIsWzk2NF1dLFtbMTIwNTA4LDEyMDUwOF0sXCJtYXBwZWRcIixbOTY1XV0sW1sxMjA1MDksMTIwNTA5XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDUxMCwxMjA1MTBdLFwibWFwcGVkXCIsWzk2N11dLFtbMTIwNTExLDEyMDUxMV0sXCJtYXBwZWRcIixbOTY4XV0sW1sxMjA1MTIsMTIwNTEyXSxcIm1hcHBlZFwiLFs5NjldXSxbWzEyMDUxMywxMjA1MTNdLFwibWFwcGVkXCIsWzg3MTFdXSxbWzEyMDUxNCwxMjA1MTRdLFwibWFwcGVkXCIsWzk0NV1dLFtbMTIwNTE1LDEyMDUxNV0sXCJtYXBwZWRcIixbOTQ2XV0sW1sxMjA1MTYsMTIwNTE2XSxcIm1hcHBlZFwiLFs5NDddXSxbWzEyMDUxNywxMjA1MTddLFwibWFwcGVkXCIsWzk0OF1dLFtbMTIwNTE4LDEyMDUxOF0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA1MTksMTIwNTE5XSxcIm1hcHBlZFwiLFs5NTBdXSxbWzEyMDUyMCwxMjA1MjBdLFwibWFwcGVkXCIsWzk1MV1dLFtbMTIwNTIxLDEyMDUyMV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA1MjIsMTIwNTIyXSxcIm1hcHBlZFwiLFs5NTNdXSxbWzEyMDUyMywxMjA1MjNdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNTI0LDEyMDUyNF0sXCJtYXBwZWRcIixbOTU1XV0sW1sxMjA1MjUsMTIwNTI1XSxcIm1hcHBlZFwiLFs5NTZdXSxbWzEyMDUyNiwxMjA1MjZdLFwibWFwcGVkXCIsWzk1N11dLFtbMTIwNTI3LDEyMDUyN10sXCJtYXBwZWRcIixbOTU4XV0sW1sxMjA1MjgsMTIwNTI4XSxcIm1hcHBlZFwiLFs5NTldXSxbWzEyMDUyOSwxMjA1MjldLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNTMwLDEyMDUzMF0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA1MzEsMTIwNTMyXSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEyMDUzMywxMjA1MzNdLFwibWFwcGVkXCIsWzk2NF1dLFtbMTIwNTM0LDEyMDUzNF0sXCJtYXBwZWRcIixbOTY1XV0sW1sxMjA1MzUsMTIwNTM1XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDUzNiwxMjA1MzZdLFwibWFwcGVkXCIsWzk2N11dLFtbMTIwNTM3LDEyMDUzN10sXCJtYXBwZWRcIixbOTY4XV0sW1sxMjA1MzgsMTIwNTM4XSxcIm1hcHBlZFwiLFs5NjldXSxbWzEyMDUzOSwxMjA1MzldLFwibWFwcGVkXCIsWzg3MDZdXSxbWzEyMDU0MCwxMjA1NDBdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNTQxLDEyMDU0MV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA1NDIsMTIwNTQyXSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDU0MywxMjA1NDNdLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNTQ0LDEyMDU0NF0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA1NDUsMTIwNTQ1XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDU0NiwxMjA1NDZdLFwibWFwcGVkXCIsWzk0NV1dLFtbMTIwNTQ3LDEyMDU0N10sXCJtYXBwZWRcIixbOTQ2XV0sW1sxMjA1NDgsMTIwNTQ4XSxcIm1hcHBlZFwiLFs5NDddXSxbWzEyMDU0OSwxMjA1NDldLFwibWFwcGVkXCIsWzk0OF1dLFtbMTIwNTUwLDEyMDU1MF0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA1NTEsMTIwNTUxXSxcIm1hcHBlZFwiLFs5NTBdXSxbWzEyMDU1MiwxMjA1NTJdLFwibWFwcGVkXCIsWzk1MV1dLFtbMTIwNTUzLDEyMDU1M10sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA1NTQsMTIwNTU0XSxcIm1hcHBlZFwiLFs5NTNdXSxbWzEyMDU1NSwxMjA1NTVdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNTU2LDEyMDU1Nl0sXCJtYXBwZWRcIixbOTU1XV0sW1sxMjA1NTcsMTIwNTU3XSxcIm1hcHBlZFwiLFs5NTZdXSxbWzEyMDU1OCwxMjA1NThdLFwibWFwcGVkXCIsWzk1N11dLFtbMTIwNTU5LDEyMDU1OV0sXCJtYXBwZWRcIixbOTU4XV0sW1sxMjA1NjAsMTIwNTYwXSxcIm1hcHBlZFwiLFs5NTldXSxbWzEyMDU2MSwxMjA1NjFdLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNTYyLDEyMDU2Ml0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA1NjMsMTIwNTYzXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDU2NCwxMjA1NjRdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNTY1LDEyMDU2NV0sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA1NjYsMTIwNTY2XSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDU2NywxMjA1NjddLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNTY4LDEyMDU2OF0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA1NjksMTIwNTY5XSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDU3MCwxMjA1NzBdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNTcxLDEyMDU3MV0sXCJtYXBwZWRcIixbODcxMV1dLFtbMTIwNTcyLDEyMDU3Ml0sXCJtYXBwZWRcIixbOTQ1XV0sW1sxMjA1NzMsMTIwNTczXSxcIm1hcHBlZFwiLFs5NDZdXSxbWzEyMDU3NCwxMjA1NzRdLFwibWFwcGVkXCIsWzk0N11dLFtbMTIwNTc1LDEyMDU3NV0sXCJtYXBwZWRcIixbOTQ4XV0sW1sxMjA1NzYsMTIwNTc2XSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDU3NywxMjA1NzddLFwibWFwcGVkXCIsWzk1MF1dLFtbMTIwNTc4LDEyMDU3OF0sXCJtYXBwZWRcIixbOTUxXV0sW1sxMjA1NzksMTIwNTc5XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDU4MCwxMjA1ODBdLFwibWFwcGVkXCIsWzk1M11dLFtbMTIwNTgxLDEyMDU4MV0sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA1ODIsMTIwNTgyXSxcIm1hcHBlZFwiLFs5NTVdXSxbWzEyMDU4MywxMjA1ODNdLFwibWFwcGVkXCIsWzk1Nl1dLFtbMTIwNTg0LDEyMDU4NF0sXCJtYXBwZWRcIixbOTU3XV0sW1sxMjA1ODUsMTIwNTg1XSxcIm1hcHBlZFwiLFs5NThdXSxbWzEyMDU4NiwxMjA1ODZdLFwibWFwcGVkXCIsWzk1OV1dLFtbMTIwNTg3LDEyMDU4N10sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA1ODgsMTIwNTg4XSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDU4OSwxMjA1OTBdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNTkxLDEyMDU5MV0sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA1OTIsMTIwNTkyXSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDU5MywxMjA1OTNdLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNTk0LDEyMDU5NF0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA1OTUsMTIwNTk1XSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDU5NiwxMjA1OTZdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNTk3LDEyMDU5N10sXCJtYXBwZWRcIixbODcwNl1dLFtbMTIwNTk4LDEyMDU5OF0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA1OTksMTIwNTk5XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDYwMCwxMjA2MDBdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNjAxLDEyMDYwMV0sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA2MDIsMTIwNjAyXSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDYwMywxMjA2MDNdLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNjA0LDEyMDYwNF0sXCJtYXBwZWRcIixbOTQ1XV0sW1sxMjA2MDUsMTIwNjA1XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzEyMDYwNiwxMjA2MDZdLFwibWFwcGVkXCIsWzk0N11dLFtbMTIwNjA3LDEyMDYwN10sXCJtYXBwZWRcIixbOTQ4XV0sW1sxMjA2MDgsMTIwNjA4XSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDYwOSwxMjA2MDldLFwibWFwcGVkXCIsWzk1MF1dLFtbMTIwNjEwLDEyMDYxMF0sXCJtYXBwZWRcIixbOTUxXV0sW1sxMjA2MTEsMTIwNjExXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDYxMiwxMjA2MTJdLFwibWFwcGVkXCIsWzk1M11dLFtbMTIwNjEzLDEyMDYxM10sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA2MTQsMTIwNjE0XSxcIm1hcHBlZFwiLFs5NTVdXSxbWzEyMDYxNSwxMjA2MTVdLFwibWFwcGVkXCIsWzk1Nl1dLFtbMTIwNjE2LDEyMDYxNl0sXCJtYXBwZWRcIixbOTU3XV0sW1sxMjA2MTcsMTIwNjE3XSxcIm1hcHBlZFwiLFs5NThdXSxbWzEyMDYxOCwxMjA2MThdLFwibWFwcGVkXCIsWzk1OV1dLFtbMTIwNjE5LDEyMDYxOV0sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA2MjAsMTIwNjIwXSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDYyMSwxMjA2MjFdLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNjIyLDEyMDYyMl0sXCJtYXBwZWRcIixbOTYzXV0sW1sxMjA2MjMsMTIwNjIzXSxcIm1hcHBlZFwiLFs5NjRdXSxbWzEyMDYyNCwxMjA2MjRdLFwibWFwcGVkXCIsWzk2NV1dLFtbMTIwNjI1LDEyMDYyNV0sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA2MjYsMTIwNjI2XSxcIm1hcHBlZFwiLFs5NjddXSxbWzEyMDYyNywxMjA2MjddLFwibWFwcGVkXCIsWzk2OF1dLFtbMTIwNjI4LDEyMDYyOF0sXCJtYXBwZWRcIixbOTY5XV0sW1sxMjA2MjksMTIwNjI5XSxcIm1hcHBlZFwiLFs4NzExXV0sW1sxMjA2MzAsMTIwNjMwXSxcIm1hcHBlZFwiLFs5NDVdXSxbWzEyMDYzMSwxMjA2MzFdLFwibWFwcGVkXCIsWzk0Nl1dLFtbMTIwNjMyLDEyMDYzMl0sXCJtYXBwZWRcIixbOTQ3XV0sW1sxMjA2MzMsMTIwNjMzXSxcIm1hcHBlZFwiLFs5NDhdXSxbWzEyMDYzNCwxMjA2MzRdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNjM1LDEyMDYzNV0sXCJtYXBwZWRcIixbOTUwXV0sW1sxMjA2MzYsMTIwNjM2XSxcIm1hcHBlZFwiLFs5NTFdXSxbWzEyMDYzNywxMjA2MzddLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNjM4LDEyMDYzOF0sXCJtYXBwZWRcIixbOTUzXV0sW1sxMjA2MzksMTIwNjM5XSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDY0MCwxMjA2NDBdLFwibWFwcGVkXCIsWzk1NV1dLFtbMTIwNjQxLDEyMDY0MV0sXCJtYXBwZWRcIixbOTU2XV0sW1sxMjA2NDIsMTIwNjQyXSxcIm1hcHBlZFwiLFs5NTddXSxbWzEyMDY0MywxMjA2NDNdLFwibWFwcGVkXCIsWzk1OF1dLFtbMTIwNjQ0LDEyMDY0NF0sXCJtYXBwZWRcIixbOTU5XV0sW1sxMjA2NDUsMTIwNjQ1XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDY0NiwxMjA2NDZdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNjQ3LDEyMDY0OF0sXCJtYXBwZWRcIixbOTYzXV0sW1sxMjA2NDksMTIwNjQ5XSxcIm1hcHBlZFwiLFs5NjRdXSxbWzEyMDY1MCwxMjA2NTBdLFwibWFwcGVkXCIsWzk2NV1dLFtbMTIwNjUxLDEyMDY1MV0sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA2NTIsMTIwNjUyXSxcIm1hcHBlZFwiLFs5NjddXSxbWzEyMDY1MywxMjA2NTNdLFwibWFwcGVkXCIsWzk2OF1dLFtbMTIwNjU0LDEyMDY1NF0sXCJtYXBwZWRcIixbOTY5XV0sW1sxMjA2NTUsMTIwNjU1XSxcIm1hcHBlZFwiLFs4NzA2XV0sW1sxMjA2NTYsMTIwNjU2XSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDY1NywxMjA2NTddLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNjU4LDEyMDY1OF0sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA2NTksMTIwNjU5XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDY2MCwxMjA2NjBdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNjYxLDEyMDY2MV0sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA2NjIsMTIwNjYyXSxcIm1hcHBlZFwiLFs5NDVdXSxbWzEyMDY2MywxMjA2NjNdLFwibWFwcGVkXCIsWzk0Nl1dLFtbMTIwNjY0LDEyMDY2NF0sXCJtYXBwZWRcIixbOTQ3XV0sW1sxMjA2NjUsMTIwNjY1XSxcIm1hcHBlZFwiLFs5NDhdXSxbWzEyMDY2NiwxMjA2NjZdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNjY3LDEyMDY2N10sXCJtYXBwZWRcIixbOTUwXV0sW1sxMjA2NjgsMTIwNjY4XSxcIm1hcHBlZFwiLFs5NTFdXSxbWzEyMDY2OSwxMjA2NjldLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNjcwLDEyMDY3MF0sXCJtYXBwZWRcIixbOTUzXV0sW1sxMjA2NzEsMTIwNjcxXSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDY3MiwxMjA2NzJdLFwibWFwcGVkXCIsWzk1NV1dLFtbMTIwNjczLDEyMDY3M10sXCJtYXBwZWRcIixbOTU2XV0sW1sxMjA2NzQsMTIwNjc0XSxcIm1hcHBlZFwiLFs5NTddXSxbWzEyMDY3NSwxMjA2NzVdLFwibWFwcGVkXCIsWzk1OF1dLFtbMTIwNjc2LDEyMDY3Nl0sXCJtYXBwZWRcIixbOTU5XV0sW1sxMjA2NzcsMTIwNjc3XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDY3OCwxMjA2NzhdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNjc5LDEyMDY3OV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA2ODAsMTIwNjgwXSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEyMDY4MSwxMjA2ODFdLFwibWFwcGVkXCIsWzk2NF1dLFtbMTIwNjgyLDEyMDY4Ml0sXCJtYXBwZWRcIixbOTY1XV0sW1sxMjA2ODMsMTIwNjgzXSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDY4NCwxMjA2ODRdLFwibWFwcGVkXCIsWzk2N11dLFtbMTIwNjg1LDEyMDY4NV0sXCJtYXBwZWRcIixbOTY4XV0sW1sxMjA2ODYsMTIwNjg2XSxcIm1hcHBlZFwiLFs5NjldXSxbWzEyMDY4NywxMjA2ODddLFwibWFwcGVkXCIsWzg3MTFdXSxbWzEyMDY4OCwxMjA2ODhdLFwibWFwcGVkXCIsWzk0NV1dLFtbMTIwNjg5LDEyMDY4OV0sXCJtYXBwZWRcIixbOTQ2XV0sW1sxMjA2OTAsMTIwNjkwXSxcIm1hcHBlZFwiLFs5NDddXSxbWzEyMDY5MSwxMjA2OTFdLFwibWFwcGVkXCIsWzk0OF1dLFtbMTIwNjkyLDEyMDY5Ml0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA2OTMsMTIwNjkzXSxcIm1hcHBlZFwiLFs5NTBdXSxbWzEyMDY5NCwxMjA2OTRdLFwibWFwcGVkXCIsWzk1MV1dLFtbMTIwNjk1LDEyMDY5NV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA2OTYsMTIwNjk2XSxcIm1hcHBlZFwiLFs5NTNdXSxbWzEyMDY5NywxMjA2OTddLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNjk4LDEyMDY5OF0sXCJtYXBwZWRcIixbOTU1XV0sW1sxMjA2OTksMTIwNjk5XSxcIm1hcHBlZFwiLFs5NTZdXSxbWzEyMDcwMCwxMjA3MDBdLFwibWFwcGVkXCIsWzk1N11dLFtbMTIwNzAxLDEyMDcwMV0sXCJtYXBwZWRcIixbOTU4XV0sW1sxMjA3MDIsMTIwNzAyXSxcIm1hcHBlZFwiLFs5NTldXSxbWzEyMDcwMywxMjA3MDNdLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNzA0LDEyMDcwNF0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA3MDUsMTIwNzA2XSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEyMDcwNywxMjA3MDddLFwibWFwcGVkXCIsWzk2NF1dLFtbMTIwNzA4LDEyMDcwOF0sXCJtYXBwZWRcIixbOTY1XV0sW1sxMjA3MDksMTIwNzA5XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDcxMCwxMjA3MTBdLFwibWFwcGVkXCIsWzk2N11dLFtbMTIwNzExLDEyMDcxMV0sXCJtYXBwZWRcIixbOTY4XV0sW1sxMjA3MTIsMTIwNzEyXSxcIm1hcHBlZFwiLFs5NjldXSxbWzEyMDcxMywxMjA3MTNdLFwibWFwcGVkXCIsWzg3MDZdXSxbWzEyMDcxNCwxMjA3MTRdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNzE1LDEyMDcxNV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA3MTYsMTIwNzE2XSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDcxNywxMjA3MTddLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNzE4LDEyMDcxOF0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA3MTksMTIwNzE5XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDcyMCwxMjA3MjBdLFwibWFwcGVkXCIsWzk0NV1dLFtbMTIwNzIxLDEyMDcyMV0sXCJtYXBwZWRcIixbOTQ2XV0sW1sxMjA3MjIsMTIwNzIyXSxcIm1hcHBlZFwiLFs5NDddXSxbWzEyMDcyMywxMjA3MjNdLFwibWFwcGVkXCIsWzk0OF1dLFtbMTIwNzI0LDEyMDcyNF0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA3MjUsMTIwNzI1XSxcIm1hcHBlZFwiLFs5NTBdXSxbWzEyMDcyNiwxMjA3MjZdLFwibWFwcGVkXCIsWzk1MV1dLFtbMTIwNzI3LDEyMDcyN10sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA3MjgsMTIwNzI4XSxcIm1hcHBlZFwiLFs5NTNdXSxbWzEyMDcyOSwxMjA3MjldLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNzMwLDEyMDczMF0sXCJtYXBwZWRcIixbOTU1XV0sW1sxMjA3MzEsMTIwNzMxXSxcIm1hcHBlZFwiLFs5NTZdXSxbWzEyMDczMiwxMjA3MzJdLFwibWFwcGVkXCIsWzk1N11dLFtbMTIwNzMzLDEyMDczM10sXCJtYXBwZWRcIixbOTU4XV0sW1sxMjA3MzQsMTIwNzM0XSxcIm1hcHBlZFwiLFs5NTldXSxbWzEyMDczNSwxMjA3MzVdLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNzM2LDEyMDczNl0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA3MzcsMTIwNzM3XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDczOCwxMjA3MzhdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNzM5LDEyMDczOV0sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA3NDAsMTIwNzQwXSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDc0MSwxMjA3NDFdLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNzQyLDEyMDc0Ml0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA3NDMsMTIwNzQzXSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDc0NCwxMjA3NDRdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNzQ1LDEyMDc0NV0sXCJtYXBwZWRcIixbODcxMV1dLFtbMTIwNzQ2LDEyMDc0Nl0sXCJtYXBwZWRcIixbOTQ1XV0sW1sxMjA3NDcsMTIwNzQ3XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzEyMDc0OCwxMjA3NDhdLFwibWFwcGVkXCIsWzk0N11dLFtbMTIwNzQ5LDEyMDc0OV0sXCJtYXBwZWRcIixbOTQ4XV0sW1sxMjA3NTAsMTIwNzUwXSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDc1MSwxMjA3NTFdLFwibWFwcGVkXCIsWzk1MF1dLFtbMTIwNzUyLDEyMDc1Ml0sXCJtYXBwZWRcIixbOTUxXV0sW1sxMjA3NTMsMTIwNzUzXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDc1NCwxMjA3NTRdLFwibWFwcGVkXCIsWzk1M11dLFtbMTIwNzU1LDEyMDc1NV0sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA3NTYsMTIwNzU2XSxcIm1hcHBlZFwiLFs5NTVdXSxbWzEyMDc1NywxMjA3NTddLFwibWFwcGVkXCIsWzk1Nl1dLFtbMTIwNzU4LDEyMDc1OF0sXCJtYXBwZWRcIixbOTU3XV0sW1sxMjA3NTksMTIwNzU5XSxcIm1hcHBlZFwiLFs5NThdXSxbWzEyMDc2MCwxMjA3NjBdLFwibWFwcGVkXCIsWzk1OV1dLFtbMTIwNzYxLDEyMDc2MV0sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA3NjIsMTIwNzYyXSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDc2MywxMjA3NjRdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNzY1LDEyMDc2NV0sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA3NjYsMTIwNzY2XSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDc2NywxMjA3NjddLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNzY4LDEyMDc2OF0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA3NjksMTIwNzY5XSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDc3MCwxMjA3NzBdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNzcxLDEyMDc3MV0sXCJtYXBwZWRcIixbODcwNl1dLFtbMTIwNzcyLDEyMDc3Ml0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA3NzMsMTIwNzczXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDc3NCwxMjA3NzRdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNzc1LDEyMDc3NV0sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA3NzYsMTIwNzc2XSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDc3NywxMjA3NzddLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNzc4LDEyMDc3OV0sXCJtYXBwZWRcIixbOTg5XV0sW1sxMjA3ODAsMTIwNzgxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjA3ODIsMTIwNzgyXSxcIm1hcHBlZFwiLFs0OF1dLFtbMTIwNzgzLDEyMDc4M10sXCJtYXBwZWRcIixbNDldXSxbWzEyMDc4NCwxMjA3ODRdLFwibWFwcGVkXCIsWzUwXV0sW1sxMjA3ODUsMTIwNzg1XSxcIm1hcHBlZFwiLFs1MV1dLFtbMTIwNzg2LDEyMDc4Nl0sXCJtYXBwZWRcIixbNTJdXSxbWzEyMDc4NywxMjA3ODddLFwibWFwcGVkXCIsWzUzXV0sW1sxMjA3ODgsMTIwNzg4XSxcIm1hcHBlZFwiLFs1NF1dLFtbMTIwNzg5LDEyMDc4OV0sXCJtYXBwZWRcIixbNTVdXSxbWzEyMDc5MCwxMjA3OTBdLFwibWFwcGVkXCIsWzU2XV0sW1sxMjA3OTEsMTIwNzkxXSxcIm1hcHBlZFwiLFs1N11dLFtbMTIwNzkyLDEyMDc5Ml0sXCJtYXBwZWRcIixbNDhdXSxbWzEyMDc5MywxMjA3OTNdLFwibWFwcGVkXCIsWzQ5XV0sW1sxMjA3OTQsMTIwNzk0XSxcIm1hcHBlZFwiLFs1MF1dLFtbMTIwNzk1LDEyMDc5NV0sXCJtYXBwZWRcIixbNTFdXSxbWzEyMDc5NiwxMjA3OTZdLFwibWFwcGVkXCIsWzUyXV0sW1sxMjA3OTcsMTIwNzk3XSxcIm1hcHBlZFwiLFs1M11dLFtbMTIwNzk4LDEyMDc5OF0sXCJtYXBwZWRcIixbNTRdXSxbWzEyMDc5OSwxMjA3OTldLFwibWFwcGVkXCIsWzU1XV0sW1sxMjA4MDAsMTIwODAwXSxcIm1hcHBlZFwiLFs1Nl1dLFtbMTIwODAxLDEyMDgwMV0sXCJtYXBwZWRcIixbNTddXSxbWzEyMDgwMiwxMjA4MDJdLFwibWFwcGVkXCIsWzQ4XV0sW1sxMjA4MDMsMTIwODAzXSxcIm1hcHBlZFwiLFs0OV1dLFtbMTIwODA0LDEyMDgwNF0sXCJtYXBwZWRcIixbNTBdXSxbWzEyMDgwNSwxMjA4MDVdLFwibWFwcGVkXCIsWzUxXV0sW1sxMjA4MDYsMTIwODA2XSxcIm1hcHBlZFwiLFs1Ml1dLFtbMTIwODA3LDEyMDgwN10sXCJtYXBwZWRcIixbNTNdXSxbWzEyMDgwOCwxMjA4MDhdLFwibWFwcGVkXCIsWzU0XV0sW1sxMjA4MDksMTIwODA5XSxcIm1hcHBlZFwiLFs1NV1dLFtbMTIwODEwLDEyMDgxMF0sXCJtYXBwZWRcIixbNTZdXSxbWzEyMDgxMSwxMjA4MTFdLFwibWFwcGVkXCIsWzU3XV0sW1sxMjA4MTIsMTIwODEyXSxcIm1hcHBlZFwiLFs0OF1dLFtbMTIwODEzLDEyMDgxM10sXCJtYXBwZWRcIixbNDldXSxbWzEyMDgxNCwxMjA4MTRdLFwibWFwcGVkXCIsWzUwXV0sW1sxMjA4MTUsMTIwODE1XSxcIm1hcHBlZFwiLFs1MV1dLFtbMTIwODE2LDEyMDgxNl0sXCJtYXBwZWRcIixbNTJdXSxbWzEyMDgxNywxMjA4MTddLFwibWFwcGVkXCIsWzUzXV0sW1sxMjA4MTgsMTIwODE4XSxcIm1hcHBlZFwiLFs1NF1dLFtbMTIwODE5LDEyMDgxOV0sXCJtYXBwZWRcIixbNTVdXSxbWzEyMDgyMCwxMjA4MjBdLFwibWFwcGVkXCIsWzU2XV0sW1sxMjA4MjEsMTIwODIxXSxcIm1hcHBlZFwiLFs1N11dLFtbMTIwODIyLDEyMDgyMl0sXCJtYXBwZWRcIixbNDhdXSxbWzEyMDgyMywxMjA4MjNdLFwibWFwcGVkXCIsWzQ5XV0sW1sxMjA4MjQsMTIwODI0XSxcIm1hcHBlZFwiLFs1MF1dLFtbMTIwODI1LDEyMDgyNV0sXCJtYXBwZWRcIixbNTFdXSxbWzEyMDgyNiwxMjA4MjZdLFwibWFwcGVkXCIsWzUyXV0sW1sxMjA4MjcsMTIwODI3XSxcIm1hcHBlZFwiLFs1M11dLFtbMTIwODI4LDEyMDgyOF0sXCJtYXBwZWRcIixbNTRdXSxbWzEyMDgyOSwxMjA4MjldLFwibWFwcGVkXCIsWzU1XV0sW1sxMjA4MzAsMTIwODMwXSxcIm1hcHBlZFwiLFs1Nl1dLFtbMTIwODMxLDEyMDgzMV0sXCJtYXBwZWRcIixbNTddXSxbWzEyMDgzMiwxMjEzNDNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMTM0NCwxMjEzOThdLFwidmFsaWRcIl0sW1sxMjEzOTksMTIxNDAyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjE0MDMsMTIxNDUyXSxcInZhbGlkXCJdLFtbMTIxNDUzLDEyMTQ2MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTIxNDYxLDEyMTQ2MV0sXCJ2YWxpZFwiXSxbWzEyMTQ2MiwxMjE0NzVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMTQ3NiwxMjE0NzZdLFwidmFsaWRcIl0sW1sxMjE0NzcsMTIxNDgzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjE0ODQsMTIxNDk4XSxcImRpc2FsbG93ZWRcIl0sW1sxMjE0OTksMTIxNTAzXSxcInZhbGlkXCJdLFtbMTIxNTA0LDEyMTUwNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTIxNTA1LDEyMTUxOV0sXCJ2YWxpZFwiXSxbWzEyMTUyMCwxMjQ5MjddLFwiZGlzYWxsb3dlZFwiXSxbWzEyNDkyOCwxMjUxMjRdLFwidmFsaWRcIl0sW1sxMjUxMjUsMTI1MTI2XSxcImRpc2FsbG93ZWRcIl0sW1sxMjUxMjcsMTI1MTM1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjUxMzYsMTI1MTQyXSxcInZhbGlkXCJdLFtbMTI1MTQzLDEyNjQ2M10sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NDY0LDEyNjQ2NF0sXCJtYXBwZWRcIixbMTU3NV1dLFtbMTI2NDY1LDEyNjQ2NV0sXCJtYXBwZWRcIixbMTU3Nl1dLFtbMTI2NDY2LDEyNjQ2Nl0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NDY3LDEyNjQ2N10sXCJtYXBwZWRcIixbMTU4M11dLFtbMTI2NDY4LDEyNjQ2OF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NDY5LDEyNjQ2OV0sXCJtYXBwZWRcIixbMTYwOF1dLFtbMTI2NDcwLDEyNjQ3MF0sXCJtYXBwZWRcIixbMTU4Nl1dLFtbMTI2NDcxLDEyNjQ3MV0sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NDcyLDEyNjQ3Ml0sXCJtYXBwZWRcIixbMTU5MV1dLFtbMTI2NDczLDEyNjQ3M10sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NDc0LDEyNjQ3NF0sXCJtYXBwZWRcIixbMTYwM11dLFtbMTI2NDc1LDEyNjQ3NV0sXCJtYXBwZWRcIixbMTYwNF1dLFtbMTI2NDc2LDEyNjQ3Nl0sXCJtYXBwZWRcIixbMTYwNV1dLFtbMTI2NDc3LDEyNjQ3N10sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NDc4LDEyNjQ3OF0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NDc5LDEyNjQ3OV0sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NDgwLDEyNjQ4MF0sXCJtYXBwZWRcIixbMTYwMV1dLFtbMTI2NDgxLDEyNjQ4MV0sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NDgyLDEyNjQ4Ml0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NDgzLDEyNjQ4M10sXCJtYXBwZWRcIixbMTU4NV1dLFtbMTI2NDg0LDEyNjQ4NF0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NDg1LDEyNjQ4NV0sXCJtYXBwZWRcIixbMTU3OF1dLFtbMTI2NDg2LDEyNjQ4Nl0sXCJtYXBwZWRcIixbMTU3OV1dLFtbMTI2NDg3LDEyNjQ4N10sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NDg4LDEyNjQ4OF0sXCJtYXBwZWRcIixbMTU4NF1dLFtbMTI2NDg5LDEyNjQ4OV0sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NDkwLDEyNjQ5MF0sXCJtYXBwZWRcIixbMTU5Ml1dLFtbMTI2NDkxLDEyNjQ5MV0sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NDkyLDEyNjQ5Ml0sXCJtYXBwZWRcIixbMTY0Nl1dLFtbMTI2NDkzLDEyNjQ5M10sXCJtYXBwZWRcIixbMTcyMl1dLFtbMTI2NDk0LDEyNjQ5NF0sXCJtYXBwZWRcIixbMTY5N11dLFtbMTI2NDk1LDEyNjQ5NV0sXCJtYXBwZWRcIixbMTY0N11dLFtbMTI2NDk2LDEyNjQ5Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NDk3LDEyNjQ5N10sXCJtYXBwZWRcIixbMTU3Nl1dLFtbMTI2NDk4LDEyNjQ5OF0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NDk5LDEyNjQ5OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTAwLDEyNjUwMF0sXCJtYXBwZWRcIixbMTYwN11dLFtbMTI2NTAxLDEyNjUwMl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTAzLDEyNjUwM10sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NTA0LDEyNjUwNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTA1LDEyNjUwNV0sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NTA2LDEyNjUwNl0sXCJtYXBwZWRcIixbMTYwM11dLFtbMTI2NTA3LDEyNjUwN10sXCJtYXBwZWRcIixbMTYwNF1dLFtbMTI2NTA4LDEyNjUwOF0sXCJtYXBwZWRcIixbMTYwNV1dLFtbMTI2NTA5LDEyNjUwOV0sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NTEwLDEyNjUxMF0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NTExLDEyNjUxMV0sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NTEyLDEyNjUxMl0sXCJtYXBwZWRcIixbMTYwMV1dLFtbMTI2NTEzLDEyNjUxM10sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NTE0LDEyNjUxNF0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NTE1LDEyNjUxNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTE2LDEyNjUxNl0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NTE3LDEyNjUxN10sXCJtYXBwZWRcIixbMTU3OF1dLFtbMTI2NTE4LDEyNjUxOF0sXCJtYXBwZWRcIixbMTU3OV1dLFtbMTI2NTE5LDEyNjUxOV0sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NTIwLDEyNjUyMF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTIxLDEyNjUyMV0sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NTIyLDEyNjUyMl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTIzLDEyNjUyM10sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NTI0LDEyNjUyOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTMwLDEyNjUzMF0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NTMxLDEyNjUzNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTM1LDEyNjUzNV0sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NTM2LDEyNjUzNl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTM3LDEyNjUzN10sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NTM4LDEyNjUzOF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTM5LDEyNjUzOV0sXCJtYXBwZWRcIixbMTYwNF1dLFtbMTI2NTQwLDEyNjU0MF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTQxLDEyNjU0MV0sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NTQyLDEyNjU0Ml0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NTQzLDEyNjU0M10sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NTQ0LDEyNjU0NF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTQ1LDEyNjU0NV0sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NTQ2LDEyNjU0Nl0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NTQ3LDEyNjU0N10sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTQ4LDEyNjU0OF0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NTQ5LDEyNjU1MF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTUxLDEyNjU1MV0sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NTUyLDEyNjU1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTUzLDEyNjU1M10sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NTU0LDEyNjU1NF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTU1LDEyNjU1NV0sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NTU2LDEyNjU1Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTU3LDEyNjU1N10sXCJtYXBwZWRcIixbMTcyMl1dLFtbMTI2NTU4LDEyNjU1OF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTU5LDEyNjU1OV0sXCJtYXBwZWRcIixbMTY0N11dLFtbMTI2NTYwLDEyNjU2MF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTYxLDEyNjU2MV0sXCJtYXBwZWRcIixbMTU3Nl1dLFtbMTI2NTYyLDEyNjU2Ml0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NTYzLDEyNjU2M10sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTY0LDEyNjU2NF0sXCJtYXBwZWRcIixbMTYwN11dLFtbMTI2NTY1LDEyNjU2Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTY3LDEyNjU2N10sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NTY4LDEyNjU2OF0sXCJtYXBwZWRcIixbMTU5MV1dLFtbMTI2NTY5LDEyNjU2OV0sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NTcwLDEyNjU3MF0sXCJtYXBwZWRcIixbMTYwM11dLFtbMTI2NTcxLDEyNjU3MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTcyLDEyNjU3Ml0sXCJtYXBwZWRcIixbMTYwNV1dLFtbMTI2NTczLDEyNjU3M10sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NTc0LDEyNjU3NF0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NTc1LDEyNjU3NV0sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NTc2LDEyNjU3Nl0sXCJtYXBwZWRcIixbMTYwMV1dLFtbMTI2NTc3LDEyNjU3N10sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NTc4LDEyNjU3OF0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NTc5LDEyNjU3OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTgwLDEyNjU4MF0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NTgxLDEyNjU4MV0sXCJtYXBwZWRcIixbMTU3OF1dLFtbMTI2NTgyLDEyNjU4Ml0sXCJtYXBwZWRcIixbMTU3OV1dLFtbMTI2NTgzLDEyNjU4M10sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NTg0LDEyNjU4NF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTg1LDEyNjU4NV0sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NTg2LDEyNjU4Nl0sXCJtYXBwZWRcIixbMTU5Ml1dLFtbMTI2NTg3LDEyNjU4N10sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NTg4LDEyNjU4OF0sXCJtYXBwZWRcIixbMTY0Nl1dLFtbMTI2NTg5LDEyNjU4OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTkwLDEyNjU5MF0sXCJtYXBwZWRcIixbMTY5N11dLFtbMTI2NTkxLDEyNjU5MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NTkyLDEyNjU5Ml0sXCJtYXBwZWRcIixbMTU3NV1dLFtbMTI2NTkzLDEyNjU5M10sXCJtYXBwZWRcIixbMTU3Nl1dLFtbMTI2NTk0LDEyNjU5NF0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NTk1LDEyNjU5NV0sXCJtYXBwZWRcIixbMTU4M11dLFtbMTI2NTk2LDEyNjU5Nl0sXCJtYXBwZWRcIixbMTYwN11dLFtbMTI2NTk3LDEyNjU5N10sXCJtYXBwZWRcIixbMTYwOF1dLFtbMTI2NTk4LDEyNjU5OF0sXCJtYXBwZWRcIixbMTU4Nl1dLFtbMTI2NTk5LDEyNjU5OV0sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NjAwLDEyNjYwMF0sXCJtYXBwZWRcIixbMTU5MV1dLFtbMTI2NjAxLDEyNjYwMV0sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NjAyLDEyNjYwMl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NjAzLDEyNjYwM10sXCJtYXBwZWRcIixbMTYwNF1dLFtbMTI2NjA0LDEyNjYwNF0sXCJtYXBwZWRcIixbMTYwNV1dLFtbMTI2NjA1LDEyNjYwNV0sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NjA2LDEyNjYwNl0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NjA3LDEyNjYwN10sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NjA4LDEyNjYwOF0sXCJtYXBwZWRcIixbMTYwMV1dLFtbMTI2NjA5LDEyNjYwOV0sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NjEwLDEyNjYxMF0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NjExLDEyNjYxMV0sXCJtYXBwZWRcIixbMTU4NV1dLFtbMTI2NjEyLDEyNjYxMl0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NjEzLDEyNjYxM10sXCJtYXBwZWRcIixbMTU3OF1dLFtbMTI2NjE0LDEyNjYxNF0sXCJtYXBwZWRcIixbMTU3OV1dLFtbMTI2NjE1LDEyNjYxNV0sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NjE2LDEyNjYxNl0sXCJtYXBwZWRcIixbMTU4NF1dLFtbMTI2NjE3LDEyNjYxN10sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NjE4LDEyNjYxOF0sXCJtYXBwZWRcIixbMTU5Ml1dLFtbMTI2NjE5LDEyNjYxOV0sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NjIwLDEyNjYyNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NjI1LDEyNjYyNV0sXCJtYXBwZWRcIixbMTU3Nl1dLFtbMTI2NjI2LDEyNjYyNl0sXCJtYXBwZWRcIixbMTU4MF1dLFtbMTI2NjI3LDEyNjYyN10sXCJtYXBwZWRcIixbMTU4M11dLFtbMTI2NjI4LDEyNjYyOF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NjI5LDEyNjYyOV0sXCJtYXBwZWRcIixbMTYwOF1dLFtbMTI2NjMwLDEyNjYzMF0sXCJtYXBwZWRcIixbMTU4Nl1dLFtbMTI2NjMxLDEyNjYzMV0sXCJtYXBwZWRcIixbMTU4MV1dLFtbMTI2NjMyLDEyNjYzMl0sXCJtYXBwZWRcIixbMTU5MV1dLFtbMTI2NjMzLDEyNjYzM10sXCJtYXBwZWRcIixbMTYxMF1dLFtbMTI2NjM0LDEyNjYzNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NjM1LDEyNjYzNV0sXCJtYXBwZWRcIixbMTYwNF1dLFtbMTI2NjM2LDEyNjYzNl0sXCJtYXBwZWRcIixbMTYwNV1dLFtbMTI2NjM3LDEyNjYzN10sXCJtYXBwZWRcIixbMTYwNl1dLFtbMTI2NjM4LDEyNjYzOF0sXCJtYXBwZWRcIixbMTU4N11dLFtbMTI2NjM5LDEyNjYzOV0sXCJtYXBwZWRcIixbMTU5M11dLFtbMTI2NjQwLDEyNjY0MF0sXCJtYXBwZWRcIixbMTYwMV1dLFtbMTI2NjQxLDEyNjY0MV0sXCJtYXBwZWRcIixbMTU4OV1dLFtbMTI2NjQyLDEyNjY0Ml0sXCJtYXBwZWRcIixbMTYwMl1dLFtbMTI2NjQzLDEyNjY0M10sXCJtYXBwZWRcIixbMTU4NV1dLFtbMTI2NjQ0LDEyNjY0NF0sXCJtYXBwZWRcIixbMTU4OF1dLFtbMTI2NjQ1LDEyNjY0NV0sXCJtYXBwZWRcIixbMTU3OF1dLFtbMTI2NjQ2LDEyNjY0Nl0sXCJtYXBwZWRcIixbMTU3OV1dLFtbMTI2NjQ3LDEyNjY0N10sXCJtYXBwZWRcIixbMTU4Ml1dLFtbMTI2NjQ4LDEyNjY0OF0sXCJtYXBwZWRcIixbMTU4NF1dLFtbMTI2NjQ5LDEyNjY0OV0sXCJtYXBwZWRcIixbMTU5MF1dLFtbMTI2NjUwLDEyNjY1MF0sXCJtYXBwZWRcIixbMTU5Ml1dLFtbMTI2NjUxLDEyNjY1MV0sXCJtYXBwZWRcIixbMTU5NF1dLFtbMTI2NjUyLDEyNjcwM10sXCJkaXNhbGxvd2VkXCJdLFtbMTI2NzA0LDEyNjcwNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI2NzA2LDEyNjk3NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI2OTc2LDEyNzAxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MDIwLDEyNzAyM10sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MDI0LDEyNzEyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MTI0LDEyNzEzNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MTM2LDEyNzE1MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MTUxLDEyNzE1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MTUzLDEyNzE2Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MTY3LDEyNzE2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MTY4LDEyNzE2OF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MTY5LDEyNzE4M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MTg0LDEyNzE4NF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MTg1LDEyNzE5OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MjAwLDEyNzIyMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MjIyLDEyNzIzMV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MjMyLDEyNzIzMl0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MjMzLDEyNzIzM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQ4LDQ0XV0sW1sxMjcyMzQsMTI3MjM0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDksNDRdXSxbWzEyNzIzNSwxMjcyMzVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1MCw0NF1dLFtbMTI3MjM2LDEyNzIzNl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzUxLDQ0XV0sW1sxMjcyMzcsMTI3MjM3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTIsNDRdXSxbWzEyNzIzOCwxMjcyMzhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1Myw0NF1dLFtbMTI3MjM5LDEyNzIzOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzU0LDQ0XV0sW1sxMjcyNDAsMTI3MjQwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTUsNDRdXSxbWzEyNzI0MSwxMjcyNDFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1Niw0NF1dLFtbMTI3MjQyLDEyNzI0Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzU3LDQ0XV0sW1sxMjcyNDMsMTI3MjQ0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjcyNDUsMTI3MjQ3XSxcImRpc2FsbG93ZWRcIl0sW1sxMjcyNDgsMTI3MjQ4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsOTcsNDFdXSxbWzEyNzI0OSwxMjcyNDldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw5OCw0MV1dLFtbMTI3MjUwLDEyNzI1MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDk5LDQxXV0sW1sxMjcyNTEsMTI3MjUxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAwLDQxXV0sW1sxMjcyNTIsMTI3MjUyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAxLDQxXV0sW1sxMjcyNTMsMTI3MjUzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAyLDQxXV0sW1sxMjcyNTQsMTI3MjU0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAzLDQxXV0sW1sxMjcyNTUsMTI3MjU1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA0LDQxXV0sW1sxMjcyNTYsMTI3MjU2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA1LDQxXV0sW1sxMjcyNTcsMTI3MjU3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA2LDQxXV0sW1sxMjcyNTgsMTI3MjU4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA3LDQxXV0sW1sxMjcyNTksMTI3MjU5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA4LDQxXV0sW1sxMjcyNjAsMTI3MjYwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA5LDQxXV0sW1sxMjcyNjEsMTI3MjYxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTEwLDQxXV0sW1sxMjcyNjIsMTI3MjYyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTExLDQxXV0sW1sxMjcyNjMsMTI3MjYzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTEyLDQxXV0sW1sxMjcyNjQsMTI3MjY0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTEzLDQxXV0sW1sxMjcyNjUsMTI3MjY1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE0LDQxXV0sW1sxMjcyNjYsMTI3MjY2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE1LDQxXV0sW1sxMjcyNjcsMTI3MjY3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE2LDQxXV0sW1sxMjcyNjgsMTI3MjY4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE3LDQxXV0sW1sxMjcyNjksMTI3MjY5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE4LDQxXV0sW1sxMjcyNzAsMTI3MjcwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE5LDQxXV0sW1sxMjcyNzEsMTI3MjcxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTIwLDQxXV0sW1sxMjcyNzIsMTI3MjcyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTIxLDQxXV0sW1sxMjcyNzMsMTI3MjczXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTIyLDQxXV0sW1sxMjcyNzQsMTI3Mjc0XSxcIm1hcHBlZFwiLFsxMjMwOCwxMTUsMTIzMDldXSxbWzEyNzI3NSwxMjcyNzVdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjcyNzYsMTI3Mjc2XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyNzI3NywxMjcyNzddLFwibWFwcGVkXCIsWzk5LDEwMF1dLFtbMTI3Mjc4LDEyNzI3OF0sXCJtYXBwZWRcIixbMTE5LDEyMl1dLFtbMTI3Mjc5LDEyNzI3OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MjgwLDEyNzI4MF0sXCJtYXBwZWRcIixbOTddXSxbWzEyNzI4MSwxMjcyODFdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjcyODIsMTI3MjgyXSxcIm1hcHBlZFwiLFs5OV1dLFtbMTI3MjgzLDEyNzI4M10sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjcyODQsMTI3Mjg0XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyNzI4NSwxMjcyODVdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTI3Mjg2LDEyNzI4Nl0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjcyODcsMTI3Mjg3XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyNzI4OCwxMjcyODhdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTI3Mjg5LDEyNzI4OV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjcyOTAsMTI3MjkwXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyNzI5MSwxMjcyOTFdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTI3MjkyLDEyNzI5Ml0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjcyOTMsMTI3MjkzXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyNzI5NCwxMjcyOTRdLFwibWFwcGVkXCIsWzExMV1dLFtbMTI3Mjk1LDEyNzI5NV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjcyOTYsMTI3Mjk2XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyNzI5NywxMjcyOTddLFwibWFwcGVkXCIsWzExNF1dLFtbMTI3Mjk4LDEyNzI5OF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjcyOTksMTI3Mjk5XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyNzMwMCwxMjczMDBdLFwibWFwcGVkXCIsWzExN11dLFtbMTI3MzAxLDEyNzMwMV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjczMDIsMTI3MzAyXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyNzMwMywxMjczMDNdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTI3MzA0LDEyNzMwNF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjczMDUsMTI3MzA1XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyNzMwNiwxMjczMDZdLFwibWFwcGVkXCIsWzEwNCwxMThdXSxbWzEyNzMwNywxMjczMDddLFwibWFwcGVkXCIsWzEwOSwxMThdXSxbWzEyNzMwOCwxMjczMDhdLFwibWFwcGVkXCIsWzExNSwxMDBdXSxbWzEyNzMwOSwxMjczMDldLFwibWFwcGVkXCIsWzExNSwxMTVdXSxbWzEyNzMxMCwxMjczMTBdLFwibWFwcGVkXCIsWzExMiwxMTIsMTE4XV0sW1sxMjczMTEsMTI3MzExXSxcIm1hcHBlZFwiLFsxMTksOTldXSxbWzEyNzMxMiwxMjczMThdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzMxOSwxMjczMTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzMyMCwxMjczMjZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzMyNywxMjczMjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzMyOCwxMjczMzddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzMzOCwxMjczMzhdLFwibWFwcGVkXCIsWzEwOSw5OV1dLFtbMTI3MzM5LDEyNzMzOV0sXCJtYXBwZWRcIixbMTA5LDEwMF1dLFtbMTI3MzQwLDEyNzM0M10sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MzQ0LDEyNzM1Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzUzLDEyNzM1M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzU0LDEyNzM1NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzU1LDEyNzM1Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzU3LDEyNzM1OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzU5LDEyNzM1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzYwLDEyNzM2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzcwLDEyNzM3M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Mzc0LDEyNzM3NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Mzc2LDEyNzM3Nl0sXCJtYXBwZWRcIixbMTAwLDEwNl1dLFtbMTI3Mzc3LDEyNzM4Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Mzg3LDEyNzQ2MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3NDYyLDEyNzQ4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3NDg4LDEyNzQ4OF0sXCJtYXBwZWRcIixbMTI0MTEsMTIzNjNdXSxbWzEyNzQ4OSwxMjc0ODldLFwibWFwcGVkXCIsWzEyNDY3LDEyNDY3XV0sW1sxMjc0OTAsMTI3NDkwXSxcIm1hcHBlZFwiLFsxMjQ2OV1dLFtbMTI3NDkxLDEyNzUwM10sXCJkaXNhbGxvd2VkXCJdLFtbMTI3NTA0LDEyNzUwNF0sXCJtYXBwZWRcIixbMjUxNjNdXSxbWzEyNzUwNSwxMjc1MDVdLFwibWFwcGVkXCIsWzIzMzgzXV0sW1sxMjc1MDYsMTI3NTA2XSxcIm1hcHBlZFwiLFsyMTQ1Ml1dLFtbMTI3NTA3LDEyNzUwN10sXCJtYXBwZWRcIixbMTI0ODddXSxbWzEyNzUwOCwxMjc1MDhdLFwibWFwcGVkXCIsWzIwMTA4XV0sW1sxMjc1MDksMTI3NTA5XSxcIm1hcHBlZFwiLFsyMjgxMF1dLFtbMTI3NTEwLDEyNzUxMF0sXCJtYXBwZWRcIixbMzUyOTldXSxbWzEyNzUxMSwxMjc1MTFdLFwibWFwcGVkXCIsWzIyODI1XV0sW1sxMjc1MTIsMTI3NTEyXSxcIm1hcHBlZFwiLFsyMDEzMl1dLFtbMTI3NTEzLDEyNzUxM10sXCJtYXBwZWRcIixbMjYxNDRdXSxbWzEyNzUxNCwxMjc1MTRdLFwibWFwcGVkXCIsWzI4OTYxXV0sW1sxMjc1MTUsMTI3NTE1XSxcIm1hcHBlZFwiLFsyNjAwOV1dLFtbMTI3NTE2LDEyNzUxNl0sXCJtYXBwZWRcIixbMjEwNjldXSxbWzEyNzUxNywxMjc1MTddLFwibWFwcGVkXCIsWzI0NDYwXV0sW1sxMjc1MTgsMTI3NTE4XSxcIm1hcHBlZFwiLFsyMDg3N11dLFtbMTI3NTE5LDEyNzUxOV0sXCJtYXBwZWRcIixbMjYwMzJdXSxbWzEyNzUyMCwxMjc1MjBdLFwibWFwcGVkXCIsWzIxMDIxXV0sW1sxMjc1MjEsMTI3NTIxXSxcIm1hcHBlZFwiLFszMjA2Nl1dLFtbMTI3NTIyLDEyNzUyMl0sXCJtYXBwZWRcIixbMjk5ODNdXSxbWzEyNzUyMywxMjc1MjNdLFwibWFwcGVkXCIsWzM2MDA5XV0sW1sxMjc1MjQsMTI3NTI0XSxcIm1hcHBlZFwiLFsyMjc2OF1dLFtbMTI3NTI1LDEyNzUyNV0sXCJtYXBwZWRcIixbMjE1NjFdXSxbWzEyNzUyNiwxMjc1MjZdLFwibWFwcGVkXCIsWzI4NDM2XV0sW1sxMjc1MjcsMTI3NTI3XSxcIm1hcHBlZFwiLFsyNTIzN11dLFtbMTI3NTI4LDEyNzUyOF0sXCJtYXBwZWRcIixbMjU0MjldXSxbWzEyNzUyOSwxMjc1MjldLFwibWFwcGVkXCIsWzE5OTY4XV0sW1sxMjc1MzAsMTI3NTMwXSxcIm1hcHBlZFwiLFsxOTk3N11dLFtbMTI3NTMxLDEyNzUzMV0sXCJtYXBwZWRcIixbMzY5MzhdXSxbWzEyNzUzMiwxMjc1MzJdLFwibWFwcGVkXCIsWzI0MDM4XV0sW1sxMjc1MzMsMTI3NTMzXSxcIm1hcHBlZFwiLFsyMDAxM11dLFtbMTI3NTM0LDEyNzUzNF0sXCJtYXBwZWRcIixbMjE0OTFdXSxbWzEyNzUzNSwxMjc1MzVdLFwibWFwcGVkXCIsWzI1MzUxXV0sW1sxMjc1MzYsMTI3NTM2XSxcIm1hcHBlZFwiLFszNjIwOF1dLFtbMTI3NTM3LDEyNzUzN10sXCJtYXBwZWRcIixbMjUxNzFdXSxbWzEyNzUzOCwxMjc1MzhdLFwibWFwcGVkXCIsWzMxMTA1XV0sW1sxMjc1MzksMTI3NTM5XSxcIm1hcHBlZFwiLFszMTM1NF1dLFtbMTI3NTQwLDEyNzU0MF0sXCJtYXBwZWRcIixbMjE1MTJdXSxbWzEyNzU0MSwxMjc1NDFdLFwibWFwcGVkXCIsWzI4Mjg4XV0sW1sxMjc1NDIsMTI3NTQyXSxcIm1hcHBlZFwiLFsyNjM3N11dLFtbMTI3NTQzLDEyNzU0M10sXCJtYXBwZWRcIixbMjYzNzZdXSxbWzEyNzU0NCwxMjc1NDRdLFwibWFwcGVkXCIsWzMwMDAzXV0sW1sxMjc1NDUsMTI3NTQ1XSxcIm1hcHBlZFwiLFsyMTEwNl1dLFtbMTI3NTQ2LDEyNzU0Nl0sXCJtYXBwZWRcIixbMjE5NDJdXSxbWzEyNzU0NywxMjc1NTFdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNzU1MiwxMjc1NTJdLFwibWFwcGVkXCIsWzEyMzA4LDI2NDEyLDEyMzA5XV0sW1sxMjc1NTMsMTI3NTUzXSxcIm1hcHBlZFwiLFsxMjMwOCwxOTk3NywxMjMwOV1dLFtbMTI3NTU0LDEyNzU1NF0sXCJtYXBwZWRcIixbMTIzMDgsMjAxMDgsMTIzMDldXSxbWzEyNzU1NSwxMjc1NTVdLFwibWFwcGVkXCIsWzEyMzA4LDIzNDMzLDEyMzA5XV0sW1sxMjc1NTYsMTI3NTU2XSxcIm1hcHBlZFwiLFsxMjMwOCwyODg1NywxMjMwOV1dLFtbMTI3NTU3LDEyNzU1N10sXCJtYXBwZWRcIixbMTIzMDgsMjUxNzEsMTIzMDldXSxbWzEyNzU1OCwxMjc1NThdLFwibWFwcGVkXCIsWzEyMzA4LDMwNDIzLDEyMzA5XV0sW1sxMjc1NTksMTI3NTU5XSxcIm1hcHBlZFwiLFsxMjMwOCwyMTIxMywxMjMwOV1dLFtbMTI3NTYwLDEyNzU2MF0sXCJtYXBwZWRcIixbMTIzMDgsMjU5NDMsMTIzMDldXSxbWzEyNzU2MSwxMjc1NjddLFwiZGlzYWxsb3dlZFwiXSxbWzEyNzU2OCwxMjc1NjhdLFwibWFwcGVkXCIsWzI0NDcxXV0sW1sxMjc1NjksMTI3NTY5XSxcIm1hcHBlZFwiLFsyMTQ4N11dLFtbMTI3NTcwLDEyNzc0M10sXCJkaXNhbGxvd2VkXCJdLFtbMTI3NzQ0LDEyNzc3Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Nzc3LDEyNzc4OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Nzg5LDEyNzc5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3NzkyLDEyNzc5N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Nzk4LDEyNzc5OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3Nzk5LDEyNzg2OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3ODY5LDEyNzg2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3ODcwLDEyNzg3MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3ODcyLDEyNzg5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3ODkyLDEyNzkwM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTA0LDEyNzk0MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTQxLDEyNzk0MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTQyLDEyNzk0Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTQ3LDEyNzk1MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTUxLDEyNzk1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTU2LDEyNzk2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTY4LDEyNzk4NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTg1LDEyNzk5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3OTkyLDEyNzk5OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MDAwLDEyODA2Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MDYzLDEyODA2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MDY0LDEyODA2NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MDY1LDEyODA2NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MDY2LDEyODI0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MjQ4LDEyODI0OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MjQ5LDEyODI1Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MjUzLDEyODI1NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MjU1LDEyODI1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MjU2LDEyODMxN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzE4LDEyODMxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzIwLDEyODMyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzI0LDEyODMzMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzMxLDEyODMzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzM2LDEyODM1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4MzYwLDEyODM3N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4Mzc4LDEyODM3OF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI4Mzc5LDEyODQxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NDIwLDEyODQyMF0sXCJkaXNhbGxvd2VkXCJdLFtbMTI4NDIxLDEyODUwNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTA3LDEyODUxMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTEyLDEyODUxMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTEzLDEyODUyOF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTI5LDEyODUyOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTMwLDEyODUzMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTMzLDEyODUzM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM0LDEyODUzNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM1LDEyODUzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM2LDEyODUzNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM3LDEyODUzN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM4LDEyODUzOF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTM5LDEyODUzOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTQwLDEyODU0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTQzLDEyODU0M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTQ0LDEyODU0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTUwLDEyODU1MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTUyLDEyODU1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTU2LDEyODU1Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTU3LDEyODU1N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTU4LDEyODU1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTYwLDEyODU2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTY0LDEyODU2NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTY1LDEyODU3Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTc3LDEyODU3OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTc5LDEyODU4MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTgxLDEyODU5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NTkyLDEyODYzOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NjQwLDEyODcwOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NzEwLDEyODcxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NzIwLDEyODcyMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NzIxLDEyODczNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI4NzM2LDEyODc0OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NzQ5LDEyODc1MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI4NzUyLDEyODc1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4NzU2LDEyODc2N10sXCJkaXNhbGxvd2VkXCJdLFtbMTI4NzY4LDEyODg4M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4ODg0LDEyODg5NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI4ODk2LDEyODk4MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI4OTgxLDEyOTAyM10sXCJkaXNhbGxvd2VkXCJdLFtbMTI5MDI0LDEyOTAzNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MDM2LDEyOTAzOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI5MDQwLDEyOTA5NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MDk2LDEyOTEwM10sXCJkaXNhbGxvd2VkXCJdLFtbMTI5MTA0LDEyOTExM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MTE0LDEyOTExOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI5MTIwLDEyOTE1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MTYwLDEyOTE2N10sXCJkaXNhbGxvd2VkXCJdLFtbMTI5MTY4LDEyOTE5N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MTk4LDEyOTI5NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI5Mjk2LDEyOTMwNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5MzA1LDEyOTQwN10sXCJkaXNhbGxvd2VkXCJdLFtbMTI5NDA4LDEyOTQxMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5NDEzLDEyOTQ3MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI5NDcyLDEyOTQ3Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI5NDczLDEzMTA2OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTMxMDcwLDEzMTA3MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTMxMDcyLDE3Mzc4Ml0sXCJ2YWxpZFwiXSxbWzE3Mzc4MywxNzM4MjNdLFwiZGlzYWxsb3dlZFwiXSxbWzE3MzgyNCwxNzc5NzJdLFwidmFsaWRcIl0sW1sxNzc5NzMsMTc3OTgzXSxcImRpc2FsbG93ZWRcIl0sW1sxNzc5ODQsMTc4MjA1XSxcInZhbGlkXCJdLFtbMTc4MjA2LDE3ODIwN10sXCJkaXNhbGxvd2VkXCJdLFtbMTc4MjA4LDE4Mzk2OV0sXCJ2YWxpZFwiXSxbWzE4Mzk3MCwxOTQ1NTldLFwiZGlzYWxsb3dlZFwiXSxbWzE5NDU2MCwxOTQ1NjBdLFwibWFwcGVkXCIsWzIwMDI5XV0sW1sxOTQ1NjEsMTk0NTYxXSxcIm1hcHBlZFwiLFsyMDAyNF1dLFtbMTk0NTYyLDE5NDU2Ml0sXCJtYXBwZWRcIixbMjAwMzNdXSxbWzE5NDU2MywxOTQ1NjNdLFwibWFwcGVkXCIsWzEzMTM2Ml1dLFtbMTk0NTY0LDE5NDU2NF0sXCJtYXBwZWRcIixbMjAzMjBdXSxbWzE5NDU2NSwxOTQ1NjVdLFwibWFwcGVkXCIsWzIwMzk4XV0sW1sxOTQ1NjYsMTk0NTY2XSxcIm1hcHBlZFwiLFsyMDQxMV1dLFtbMTk0NTY3LDE5NDU2N10sXCJtYXBwZWRcIixbMjA0ODJdXSxbWzE5NDU2OCwxOTQ1NjhdLFwibWFwcGVkXCIsWzIwNjAyXV0sW1sxOTQ1NjksMTk0NTY5XSxcIm1hcHBlZFwiLFsyMDYzM11dLFtbMTk0NTcwLDE5NDU3MF0sXCJtYXBwZWRcIixbMjA3MTFdXSxbWzE5NDU3MSwxOTQ1NzFdLFwibWFwcGVkXCIsWzIwNjg3XV0sW1sxOTQ1NzIsMTk0NTcyXSxcIm1hcHBlZFwiLFsxMzQ3MF1dLFtbMTk0NTczLDE5NDU3M10sXCJtYXBwZWRcIixbMTMyNjY2XV0sW1sxOTQ1NzQsMTk0NTc0XSxcIm1hcHBlZFwiLFsyMDgxM11dLFtbMTk0NTc1LDE5NDU3NV0sXCJtYXBwZWRcIixbMjA4MjBdXSxbWzE5NDU3NiwxOTQ1NzZdLFwibWFwcGVkXCIsWzIwODM2XV0sW1sxOTQ1NzcsMTk0NTc3XSxcIm1hcHBlZFwiLFsyMDg1NV1dLFtbMTk0NTc4LDE5NDU3OF0sXCJtYXBwZWRcIixbMTMyMzgwXV0sW1sxOTQ1NzksMTk0NTc5XSxcIm1hcHBlZFwiLFsxMzQ5N11dLFtbMTk0NTgwLDE5NDU4MF0sXCJtYXBwZWRcIixbMjA4MzldXSxbWzE5NDU4MSwxOTQ1ODFdLFwibWFwcGVkXCIsWzIwODc3XV0sW1sxOTQ1ODIsMTk0NTgyXSxcIm1hcHBlZFwiLFsxMzI0MjddXSxbWzE5NDU4MywxOTQ1ODNdLFwibWFwcGVkXCIsWzIwODg3XV0sW1sxOTQ1ODQsMTk0NTg0XSxcIm1hcHBlZFwiLFsyMDkwMF1dLFtbMTk0NTg1LDE5NDU4NV0sXCJtYXBwZWRcIixbMjAxNzJdXSxbWzE5NDU4NiwxOTQ1ODZdLFwibWFwcGVkXCIsWzIwOTA4XV0sW1sxOTQ1ODcsMTk0NTg3XSxcIm1hcHBlZFwiLFsyMDkxN11dLFtbMTk0NTg4LDE5NDU4OF0sXCJtYXBwZWRcIixbMTY4NDE1XV0sW1sxOTQ1ODksMTk0NTg5XSxcIm1hcHBlZFwiLFsyMDk4MV1dLFtbMTk0NTkwLDE5NDU5MF0sXCJtYXBwZWRcIixbMjA5OTVdXSxbWzE5NDU5MSwxOTQ1OTFdLFwibWFwcGVkXCIsWzEzNTM1XV0sW1sxOTQ1OTIsMTk0NTkyXSxcIm1hcHBlZFwiLFsyMTA1MV1dLFtbMTk0NTkzLDE5NDU5M10sXCJtYXBwZWRcIixbMjEwNjJdXSxbWzE5NDU5NCwxOTQ1OTRdLFwibWFwcGVkXCIsWzIxMTA2XV0sW1sxOTQ1OTUsMTk0NTk1XSxcIm1hcHBlZFwiLFsyMTExMV1dLFtbMTk0NTk2LDE5NDU5Nl0sXCJtYXBwZWRcIixbMTM1ODldXSxbWzE5NDU5NywxOTQ1OTddLFwibWFwcGVkXCIsWzIxMTkxXV0sW1sxOTQ1OTgsMTk0NTk4XSxcIm1hcHBlZFwiLFsyMTE5M11dLFtbMTk0NTk5LDE5NDU5OV0sXCJtYXBwZWRcIixbMjEyMjBdXSxbWzE5NDYwMCwxOTQ2MDBdLFwibWFwcGVkXCIsWzIxMjQyXV0sW1sxOTQ2MDEsMTk0NjAxXSxcIm1hcHBlZFwiLFsyMTI1M11dLFtbMTk0NjAyLDE5NDYwMl0sXCJtYXBwZWRcIixbMjEyNTRdXSxbWzE5NDYwMywxOTQ2MDNdLFwibWFwcGVkXCIsWzIxMjcxXV0sW1sxOTQ2MDQsMTk0NjA0XSxcIm1hcHBlZFwiLFsyMTMyMV1dLFtbMTk0NjA1LDE5NDYwNV0sXCJtYXBwZWRcIixbMjEzMjldXSxbWzE5NDYwNiwxOTQ2MDZdLFwibWFwcGVkXCIsWzIxMzM4XV0sW1sxOTQ2MDcsMTk0NjA3XSxcIm1hcHBlZFwiLFsyMTM2M11dLFtbMTk0NjA4LDE5NDYwOF0sXCJtYXBwZWRcIixbMjEzNzNdXSxbWzE5NDYwOSwxOTQ2MTFdLFwibWFwcGVkXCIsWzIxMzc1XV0sW1sxOTQ2MTIsMTk0NjEyXSxcIm1hcHBlZFwiLFsxMzM2NzZdXSxbWzE5NDYxMywxOTQ2MTNdLFwibWFwcGVkXCIsWzI4Nzg0XV0sW1sxOTQ2MTQsMTk0NjE0XSxcIm1hcHBlZFwiLFsyMTQ1MF1dLFtbMTk0NjE1LDE5NDYxNV0sXCJtYXBwZWRcIixbMjE0NzFdXSxbWzE5NDYxNiwxOTQ2MTZdLFwibWFwcGVkXCIsWzEzMzk4N11dLFtbMTk0NjE3LDE5NDYxN10sXCJtYXBwZWRcIixbMjE0ODNdXSxbWzE5NDYxOCwxOTQ2MThdLFwibWFwcGVkXCIsWzIxNDg5XV0sW1sxOTQ2MTksMTk0NjE5XSxcIm1hcHBlZFwiLFsyMTUxMF1dLFtbMTk0NjIwLDE5NDYyMF0sXCJtYXBwZWRcIixbMjE2NjJdXSxbWzE5NDYyMSwxOTQ2MjFdLFwibWFwcGVkXCIsWzIxNTYwXV0sW1sxOTQ2MjIsMTk0NjIyXSxcIm1hcHBlZFwiLFsyMTU3Nl1dLFtbMTk0NjIzLDE5NDYyM10sXCJtYXBwZWRcIixbMjE2MDhdXSxbWzE5NDYyNCwxOTQ2MjRdLFwibWFwcGVkXCIsWzIxNjY2XV0sW1sxOTQ2MjUsMTk0NjI1XSxcIm1hcHBlZFwiLFsyMTc1MF1dLFtbMTk0NjI2LDE5NDYyNl0sXCJtYXBwZWRcIixbMjE3NzZdXSxbWzE5NDYyNywxOTQ2MjddLFwibWFwcGVkXCIsWzIxODQzXV0sW1sxOTQ2MjgsMTk0NjI4XSxcIm1hcHBlZFwiLFsyMTg1OV1dLFtbMTk0NjI5LDE5NDYzMF0sXCJtYXBwZWRcIixbMjE4OTJdXSxbWzE5NDYzMSwxOTQ2MzFdLFwibWFwcGVkXCIsWzIxOTEzXV0sW1sxOTQ2MzIsMTk0NjMyXSxcIm1hcHBlZFwiLFsyMTkzMV1dLFtbMTk0NjMzLDE5NDYzM10sXCJtYXBwZWRcIixbMjE5MzldXSxbWzE5NDYzNCwxOTQ2MzRdLFwibWFwcGVkXCIsWzIxOTU0XV0sW1sxOTQ2MzUsMTk0NjM1XSxcIm1hcHBlZFwiLFsyMjI5NF1dLFtbMTk0NjM2LDE5NDYzNl0sXCJtYXBwZWRcIixbMjIwMjJdXSxbWzE5NDYzNywxOTQ2MzddLFwibWFwcGVkXCIsWzIyMjk1XV0sW1sxOTQ2MzgsMTk0NjM4XSxcIm1hcHBlZFwiLFsyMjA5N11dLFtbMTk0NjM5LDE5NDYzOV0sXCJtYXBwZWRcIixbMjIxMzJdXSxbWzE5NDY0MCwxOTQ2NDBdLFwibWFwcGVkXCIsWzIwOTk5XV0sW1sxOTQ2NDEsMTk0NjQxXSxcIm1hcHBlZFwiLFsyMjc2Nl1dLFtbMTk0NjQyLDE5NDY0Ml0sXCJtYXBwZWRcIixbMjI0NzhdXSxbWzE5NDY0MywxOTQ2NDNdLFwibWFwcGVkXCIsWzIyNTE2XV0sW1sxOTQ2NDQsMTk0NjQ0XSxcIm1hcHBlZFwiLFsyMjU0MV1dLFtbMTk0NjQ1LDE5NDY0NV0sXCJtYXBwZWRcIixbMjI0MTFdXSxbWzE5NDY0NiwxOTQ2NDZdLFwibWFwcGVkXCIsWzIyNTc4XV0sW1sxOTQ2NDcsMTk0NjQ3XSxcIm1hcHBlZFwiLFsyMjU3N11dLFtbMTk0NjQ4LDE5NDY0OF0sXCJtYXBwZWRcIixbMjI3MDBdXSxbWzE5NDY0OSwxOTQ2NDldLFwibWFwcGVkXCIsWzEzNjQyMF1dLFtbMTk0NjUwLDE5NDY1MF0sXCJtYXBwZWRcIixbMjI3NzBdXSxbWzE5NDY1MSwxOTQ2NTFdLFwibWFwcGVkXCIsWzIyNzc1XV0sW1sxOTQ2NTIsMTk0NjUyXSxcIm1hcHBlZFwiLFsyMjc5MF1dLFtbMTk0NjUzLDE5NDY1M10sXCJtYXBwZWRcIixbMjI4MTBdXSxbWzE5NDY1NCwxOTQ2NTRdLFwibWFwcGVkXCIsWzIyODE4XV0sW1sxOTQ2NTUsMTk0NjU1XSxcIm1hcHBlZFwiLFsyMjg4Ml1dLFtbMTk0NjU2LDE5NDY1Nl0sXCJtYXBwZWRcIixbMTM2ODcyXV0sW1sxOTQ2NTcsMTk0NjU3XSxcIm1hcHBlZFwiLFsxMzY5MzhdXSxbWzE5NDY1OCwxOTQ2NThdLFwibWFwcGVkXCIsWzIzMDIwXV0sW1sxOTQ2NTksMTk0NjU5XSxcIm1hcHBlZFwiLFsyMzA2N11dLFtbMTk0NjYwLDE5NDY2MF0sXCJtYXBwZWRcIixbMjMwNzldXSxbWzE5NDY2MSwxOTQ2NjFdLFwibWFwcGVkXCIsWzIzMDAwXV0sW1sxOTQ2NjIsMTk0NjYyXSxcIm1hcHBlZFwiLFsyMzE0Ml1dLFtbMTk0NjYzLDE5NDY2M10sXCJtYXBwZWRcIixbMTQwNjJdXSxbWzE5NDY2NCwxOTQ2NjRdLFwiZGlzYWxsb3dlZFwiXSxbWzE5NDY2NSwxOTQ2NjVdLFwibWFwcGVkXCIsWzIzMzA0XV0sW1sxOTQ2NjYsMTk0NjY3XSxcIm1hcHBlZFwiLFsyMzM1OF1dLFtbMTk0NjY4LDE5NDY2OF0sXCJtYXBwZWRcIixbMTM3NjcyXV0sW1sxOTQ2NjksMTk0NjY5XSxcIm1hcHBlZFwiLFsyMzQ5MV1dLFtbMTk0NjcwLDE5NDY3MF0sXCJtYXBwZWRcIixbMjM1MTJdXSxbWzE5NDY3MSwxOTQ2NzFdLFwibWFwcGVkXCIsWzIzNTI3XV0sW1sxOTQ2NzIsMTk0NjcyXSxcIm1hcHBlZFwiLFsyMzUzOV1dLFtbMTk0NjczLDE5NDY3M10sXCJtYXBwZWRcIixbMTM4MDA4XV0sW1sxOTQ2NzQsMTk0Njc0XSxcIm1hcHBlZFwiLFsyMzU1MV1dLFtbMTk0Njc1LDE5NDY3NV0sXCJtYXBwZWRcIixbMjM1NThdXSxbWzE5NDY3NiwxOTQ2NzZdLFwiZGlzYWxsb3dlZFwiXSxbWzE5NDY3NywxOTQ2NzddLFwibWFwcGVkXCIsWzIzNTg2XV0sW1sxOTQ2NzgsMTk0Njc4XSxcIm1hcHBlZFwiLFsxNDIwOV1dLFtbMTk0Njc5LDE5NDY3OV0sXCJtYXBwZWRcIixbMjM2NDhdXSxbWzE5NDY4MCwxOTQ2ODBdLFwibWFwcGVkXCIsWzIzNjYyXV0sW1sxOTQ2ODEsMTk0NjgxXSxcIm1hcHBlZFwiLFsyMzc0NF1dLFtbMTk0NjgyLDE5NDY4Ml0sXCJtYXBwZWRcIixbMjM2OTNdXSxbWzE5NDY4MywxOTQ2ODNdLFwibWFwcGVkXCIsWzEzODcyNF1dLFtbMTk0Njg0LDE5NDY4NF0sXCJtYXBwZWRcIixbMjM4NzVdXSxbWzE5NDY4NSwxOTQ2ODVdLFwibWFwcGVkXCIsWzEzODcyNl1dLFtbMTk0Njg2LDE5NDY4Nl0sXCJtYXBwZWRcIixbMjM5MThdXSxbWzE5NDY4NywxOTQ2ODddLFwibWFwcGVkXCIsWzIzOTE1XV0sW1sxOTQ2ODgsMTk0Njg4XSxcIm1hcHBlZFwiLFsyMzkzMl1dLFtbMTk0Njg5LDE5NDY4OV0sXCJtYXBwZWRcIixbMjQwMzNdXSxbWzE5NDY5MCwxOTQ2OTBdLFwibWFwcGVkXCIsWzI0MDM0XV0sW1sxOTQ2OTEsMTk0NjkxXSxcIm1hcHBlZFwiLFsxNDM4M11dLFtbMTk0NjkyLDE5NDY5Ml0sXCJtYXBwZWRcIixbMjQwNjFdXSxbWzE5NDY5MywxOTQ2OTNdLFwibWFwcGVkXCIsWzI0MTA0XV0sW1sxOTQ2OTQsMTk0Njk0XSxcIm1hcHBlZFwiLFsyNDEyNV1dLFtbMTk0Njk1LDE5NDY5NV0sXCJtYXBwZWRcIixbMjQxNjldXSxbWzE5NDY5NiwxOTQ2OTZdLFwibWFwcGVkXCIsWzE0NDM0XV0sW1sxOTQ2OTcsMTk0Njk3XSxcIm1hcHBlZFwiLFsxMzk2NTFdXSxbWzE5NDY5OCwxOTQ2OThdLFwibWFwcGVkXCIsWzE0NDYwXV0sW1sxOTQ2OTksMTk0Njk5XSxcIm1hcHBlZFwiLFsyNDI0MF1dLFtbMTk0NzAwLDE5NDcwMF0sXCJtYXBwZWRcIixbMjQyNDNdXSxbWzE5NDcwMSwxOTQ3MDFdLFwibWFwcGVkXCIsWzI0MjQ2XV0sW1sxOTQ3MDIsMTk0NzAyXSxcIm1hcHBlZFwiLFsyNDI2Nl1dLFtbMTk0NzAzLDE5NDcwM10sXCJtYXBwZWRcIixbMTcyOTQ2XV0sW1sxOTQ3MDQsMTk0NzA0XSxcIm1hcHBlZFwiLFsyNDMxOF1dLFtbMTk0NzA1LDE5NDcwNl0sXCJtYXBwZWRcIixbMTQwMDgxXV0sW1sxOTQ3MDcsMTk0NzA3XSxcIm1hcHBlZFwiLFszMzI4MV1dLFtbMTk0NzA4LDE5NDcwOV0sXCJtYXBwZWRcIixbMjQzNTRdXSxbWzE5NDcxMCwxOTQ3MTBdLFwibWFwcGVkXCIsWzE0NTM1XV0sW1sxOTQ3MTEsMTk0NzExXSxcIm1hcHBlZFwiLFsxNDQwNTZdXSxbWzE5NDcxMiwxOTQ3MTJdLFwibWFwcGVkXCIsWzE1NjEyMl1dLFtbMTk0NzEzLDE5NDcxM10sXCJtYXBwZWRcIixbMjQ0MThdXSxbWzE5NDcxNCwxOTQ3MTRdLFwibWFwcGVkXCIsWzI0NDI3XV0sW1sxOTQ3MTUsMTk0NzE1XSxcIm1hcHBlZFwiLFsxNDU2M11dLFtbMTk0NzE2LDE5NDcxNl0sXCJtYXBwZWRcIixbMjQ0NzRdXSxbWzE5NDcxNywxOTQ3MTddLFwibWFwcGVkXCIsWzI0NTI1XV0sW1sxOTQ3MTgsMTk0NzE4XSxcIm1hcHBlZFwiLFsyNDUzNV1dLFtbMTk0NzE5LDE5NDcxOV0sXCJtYXBwZWRcIixbMjQ1NjldXSxbWzE5NDcyMCwxOTQ3MjBdLFwibWFwcGVkXCIsWzI0NzA1XV0sW1sxOTQ3MjEsMTk0NzIxXSxcIm1hcHBlZFwiLFsxNDY1MF1dLFtbMTk0NzIyLDE5NDcyMl0sXCJtYXBwZWRcIixbMTQ2MjBdXSxbWzE5NDcyMywxOTQ3MjNdLFwibWFwcGVkXCIsWzI0NzI0XV0sW1sxOTQ3MjQsMTk0NzI0XSxcIm1hcHBlZFwiLFsxNDEwMTJdXSxbWzE5NDcyNSwxOTQ3MjVdLFwibWFwcGVkXCIsWzI0Nzc1XV0sW1sxOTQ3MjYsMTk0NzI2XSxcIm1hcHBlZFwiLFsyNDkwNF1dLFtbMTk0NzI3LDE5NDcyN10sXCJtYXBwZWRcIixbMjQ5MDhdXSxbWzE5NDcyOCwxOTQ3MjhdLFwibWFwcGVkXCIsWzI0OTEwXV0sW1sxOTQ3MjksMTk0NzI5XSxcIm1hcHBlZFwiLFsyNDkwOF1dLFtbMTk0NzMwLDE5NDczMF0sXCJtYXBwZWRcIixbMjQ5NTRdXSxbWzE5NDczMSwxOTQ3MzFdLFwibWFwcGVkXCIsWzI0OTc0XV0sW1sxOTQ3MzIsMTk0NzMyXSxcIm1hcHBlZFwiLFsyNTAxMF1dLFtbMTk0NzMzLDE5NDczM10sXCJtYXBwZWRcIixbMjQ5OTZdXSxbWzE5NDczNCwxOTQ3MzRdLFwibWFwcGVkXCIsWzI1MDA3XV0sW1sxOTQ3MzUsMTk0NzM1XSxcIm1hcHBlZFwiLFsyNTA1NF1dLFtbMTk0NzM2LDE5NDczNl0sXCJtYXBwZWRcIixbMjUwNzRdXSxbWzE5NDczNywxOTQ3MzddLFwibWFwcGVkXCIsWzI1MDc4XV0sW1sxOTQ3MzgsMTk0NzM4XSxcIm1hcHBlZFwiLFsyNTEwNF1dLFtbMTk0NzM5LDE5NDczOV0sXCJtYXBwZWRcIixbMjUxMTVdXSxbWzE5NDc0MCwxOTQ3NDBdLFwibWFwcGVkXCIsWzI1MTgxXV0sW1sxOTQ3NDEsMTk0NzQxXSxcIm1hcHBlZFwiLFsyNTI2NV1dLFtbMTk0NzQyLDE5NDc0Ml0sXCJtYXBwZWRcIixbMjUzMDBdXSxbWzE5NDc0MywxOTQ3NDNdLFwibWFwcGVkXCIsWzI1NDI0XV0sW1sxOTQ3NDQsMTk0NzQ0XSxcIm1hcHBlZFwiLFsxNDIwOTJdXSxbWzE5NDc0NSwxOTQ3NDVdLFwibWFwcGVkXCIsWzI1NDA1XV0sW1sxOTQ3NDYsMTk0NzQ2XSxcIm1hcHBlZFwiLFsyNTM0MF1dLFtbMTk0NzQ3LDE5NDc0N10sXCJtYXBwZWRcIixbMjU0NDhdXSxbWzE5NDc0OCwxOTQ3NDhdLFwibWFwcGVkXCIsWzI1NDc1XV0sW1sxOTQ3NDksMTk0NzQ5XSxcIm1hcHBlZFwiLFsyNTU3Ml1dLFtbMTk0NzUwLDE5NDc1MF0sXCJtYXBwZWRcIixbMTQyMzIxXV0sW1sxOTQ3NTEsMTk0NzUxXSxcIm1hcHBlZFwiLFsyNTYzNF1dLFtbMTk0NzUyLDE5NDc1Ml0sXCJtYXBwZWRcIixbMjU1NDFdXSxbWzE5NDc1MywxOTQ3NTNdLFwibWFwcGVkXCIsWzI1NTEzXV0sW1sxOTQ3NTQsMTk0NzU0XSxcIm1hcHBlZFwiLFsxNDg5NF1dLFtbMTk0NzU1LDE5NDc1NV0sXCJtYXBwZWRcIixbMjU3MDVdXSxbWzE5NDc1NiwxOTQ3NTZdLFwibWFwcGVkXCIsWzI1NzI2XV0sW1sxOTQ3NTcsMTk0NzU3XSxcIm1hcHBlZFwiLFsyNTc1N11dLFtbMTk0NzU4LDE5NDc1OF0sXCJtYXBwZWRcIixbMjU3MTldXSxbWzE5NDc1OSwxOTQ3NTldLFwibWFwcGVkXCIsWzE0OTU2XV0sW1sxOTQ3NjAsMTk0NzYwXSxcIm1hcHBlZFwiLFsyNTkzNV1dLFtbMTk0NzYxLDE5NDc2MV0sXCJtYXBwZWRcIixbMjU5NjRdXSxbWzE5NDc2MiwxOTQ3NjJdLFwibWFwcGVkXCIsWzE0MzM3MF1dLFtbMTk0NzYzLDE5NDc2M10sXCJtYXBwZWRcIixbMjYwODNdXSxbWzE5NDc2NCwxOTQ3NjRdLFwibWFwcGVkXCIsWzI2MzYwXV0sW1sxOTQ3NjUsMTk0NzY1XSxcIm1hcHBlZFwiLFsyNjE4NV1dLFtbMTk0NzY2LDE5NDc2Nl0sXCJtYXBwZWRcIixbMTUxMjldXSxbWzE5NDc2NywxOTQ3NjddLFwibWFwcGVkXCIsWzI2MjU3XV0sW1sxOTQ3NjgsMTk0NzY4XSxcIm1hcHBlZFwiLFsxNTExMl1dLFtbMTk0NzY5LDE5NDc2OV0sXCJtYXBwZWRcIixbMTUwNzZdXSxbWzE5NDc3MCwxOTQ3NzBdLFwibWFwcGVkXCIsWzIwODgyXV0sW1sxOTQ3NzEsMTk0NzcxXSxcIm1hcHBlZFwiLFsyMDg4NV1dLFtbMTk0NzcyLDE5NDc3Ml0sXCJtYXBwZWRcIixbMjYzNjhdXSxbWzE5NDc3MywxOTQ3NzNdLFwibWFwcGVkXCIsWzI2MjY4XV0sW1sxOTQ3NzQsMTk0Nzc0XSxcIm1hcHBlZFwiLFszMjk0MV1dLFtbMTk0Nzc1LDE5NDc3NV0sXCJtYXBwZWRcIixbMTczNjldXSxbWzE5NDc3NiwxOTQ3NzZdLFwibWFwcGVkXCIsWzI2MzkxXV0sW1sxOTQ3NzcsMTk0Nzc3XSxcIm1hcHBlZFwiLFsyNjM5NV1dLFtbMTk0Nzc4LDE5NDc3OF0sXCJtYXBwZWRcIixbMjY0MDFdXSxbWzE5NDc3OSwxOTQ3NzldLFwibWFwcGVkXCIsWzI2NDYyXV0sW1sxOTQ3ODAsMTk0NzgwXSxcIm1hcHBlZFwiLFsyNjQ1MV1dLFtbMTk0NzgxLDE5NDc4MV0sXCJtYXBwZWRcIixbMTQ0MzIzXV0sW1sxOTQ3ODIsMTk0NzgyXSxcIm1hcHBlZFwiLFsxNTE3N11dLFtbMTk0NzgzLDE5NDc4M10sXCJtYXBwZWRcIixbMjY2MThdXSxbWzE5NDc4NCwxOTQ3ODRdLFwibWFwcGVkXCIsWzI2NTAxXV0sW1sxOTQ3ODUsMTk0Nzg1XSxcIm1hcHBlZFwiLFsyNjcwNl1dLFtbMTk0Nzg2LDE5NDc4Nl0sXCJtYXBwZWRcIixbMjY3NTddXSxbWzE5NDc4NywxOTQ3ODddLFwibWFwcGVkXCIsWzE0NDQ5M11dLFtbMTk0Nzg4LDE5NDc4OF0sXCJtYXBwZWRcIixbMjY3NjZdXSxbWzE5NDc4OSwxOTQ3ODldLFwibWFwcGVkXCIsWzI2NjU1XV0sW1sxOTQ3OTAsMTk0NzkwXSxcIm1hcHBlZFwiLFsyNjkwMF1dLFtbMTk0NzkxLDE5NDc5MV0sXCJtYXBwZWRcIixbMTUyNjFdXSxbWzE5NDc5MiwxOTQ3OTJdLFwibWFwcGVkXCIsWzI2OTQ2XV0sW1sxOTQ3OTMsMTk0NzkzXSxcIm1hcHBlZFwiLFsyNzA0M11dLFtbMTk0Nzk0LDE5NDc5NF0sXCJtYXBwZWRcIixbMjcxMTRdXSxbWzE5NDc5NSwxOTQ3OTVdLFwibWFwcGVkXCIsWzI3MzA0XV0sW1sxOTQ3OTYsMTk0Nzk2XSxcIm1hcHBlZFwiLFsxNDUwNTldXSxbWzE5NDc5NywxOTQ3OTddLFwibWFwcGVkXCIsWzI3MzU1XV0sW1sxOTQ3OTgsMTk0Nzk4XSxcIm1hcHBlZFwiLFsxNTM4NF1dLFtbMTk0Nzk5LDE5NDc5OV0sXCJtYXBwZWRcIixbMjc0MjVdXSxbWzE5NDgwMCwxOTQ4MDBdLFwibWFwcGVkXCIsWzE0NTU3NV1dLFtbMTk0ODAxLDE5NDgwMV0sXCJtYXBwZWRcIixbMjc0NzZdXSxbWzE5NDgwMiwxOTQ4MDJdLFwibWFwcGVkXCIsWzE1NDM4XV0sW1sxOTQ4MDMsMTk0ODAzXSxcIm1hcHBlZFwiLFsyNzUwNl1dLFtbMTk0ODA0LDE5NDgwNF0sXCJtYXBwZWRcIixbMjc1NTFdXSxbWzE5NDgwNSwxOTQ4MDVdLFwibWFwcGVkXCIsWzI3NTc4XV0sW1sxOTQ4MDYsMTk0ODA2XSxcIm1hcHBlZFwiLFsyNzU3OV1dLFtbMTk0ODA3LDE5NDgwN10sXCJtYXBwZWRcIixbMTQ2MDYxXV0sW1sxOTQ4MDgsMTk0ODA4XSxcIm1hcHBlZFwiLFsxMzg1MDddXSxbWzE5NDgwOSwxOTQ4MDldLFwibWFwcGVkXCIsWzE0NjE3MF1dLFtbMTk0ODEwLDE5NDgxMF0sXCJtYXBwZWRcIixbMjc3MjZdXSxbWzE5NDgxMSwxOTQ4MTFdLFwibWFwcGVkXCIsWzE0NjYyMF1dLFtbMTk0ODEyLDE5NDgxMl0sXCJtYXBwZWRcIixbMjc4MzldXSxbWzE5NDgxMywxOTQ4MTNdLFwibWFwcGVkXCIsWzI3ODUzXV0sW1sxOTQ4MTQsMTk0ODE0XSxcIm1hcHBlZFwiLFsyNzc1MV1dLFtbMTk0ODE1LDE5NDgxNV0sXCJtYXBwZWRcIixbMjc5MjZdXSxbWzE5NDgxNiwxOTQ4MTZdLFwibWFwcGVkXCIsWzI3OTY2XV0sW1sxOTQ4MTcsMTk0ODE3XSxcIm1hcHBlZFwiLFsyODAyM11dLFtbMTk0ODE4LDE5NDgxOF0sXCJtYXBwZWRcIixbMjc5NjldXSxbWzE5NDgxOSwxOTQ4MTldLFwibWFwcGVkXCIsWzI4MDA5XV0sW1sxOTQ4MjAsMTk0ODIwXSxcIm1hcHBlZFwiLFsyODAyNF1dLFtbMTk0ODIxLDE5NDgyMV0sXCJtYXBwZWRcIixbMjgwMzddXSxbWzE5NDgyMiwxOTQ4MjJdLFwibWFwcGVkXCIsWzE0NjcxOF1dLFtbMTk0ODIzLDE5NDgyM10sXCJtYXBwZWRcIixbMjc5NTZdXSxbWzE5NDgyNCwxOTQ4MjRdLFwibWFwcGVkXCIsWzI4MjA3XV0sW1sxOTQ4MjUsMTk0ODI1XSxcIm1hcHBlZFwiLFsyODI3MF1dLFtbMTk0ODI2LDE5NDgyNl0sXCJtYXBwZWRcIixbMTU2NjddXSxbWzE5NDgyNywxOTQ4MjddLFwibWFwcGVkXCIsWzI4MzYzXV0sW1sxOTQ4MjgsMTk0ODI4XSxcIm1hcHBlZFwiLFsyODM1OV1dLFtbMTk0ODI5LDE5NDgyOV0sXCJtYXBwZWRcIixbMTQ3MTUzXV0sW1sxOTQ4MzAsMTk0ODMwXSxcIm1hcHBlZFwiLFsyODE1M11dLFtbMTk0ODMxLDE5NDgzMV0sXCJtYXBwZWRcIixbMjg1MjZdXSxbWzE5NDgzMiwxOTQ4MzJdLFwibWFwcGVkXCIsWzE0NzI5NF1dLFtbMTk0ODMzLDE5NDgzM10sXCJtYXBwZWRcIixbMTQ3MzQyXV0sW1sxOTQ4MzQsMTk0ODM0XSxcIm1hcHBlZFwiLFsyODYxNF1dLFtbMTk0ODM1LDE5NDgzNV0sXCJtYXBwZWRcIixbMjg3MjldXSxbWzE5NDgzNiwxOTQ4MzZdLFwibWFwcGVkXCIsWzI4NzAyXV0sW1sxOTQ4MzcsMTk0ODM3XSxcIm1hcHBlZFwiLFsyODY5OV1dLFtbMTk0ODM4LDE5NDgzOF0sXCJtYXBwZWRcIixbMTU3NjZdXSxbWzE5NDgzOSwxOTQ4MzldLFwibWFwcGVkXCIsWzI4NzQ2XV0sW1sxOTQ4NDAsMTk0ODQwXSxcIm1hcHBlZFwiLFsyODc5N11dLFtbMTk0ODQxLDE5NDg0MV0sXCJtYXBwZWRcIixbMjg3OTFdXSxbWzE5NDg0MiwxOTQ4NDJdLFwibWFwcGVkXCIsWzI4ODQ1XV0sW1sxOTQ4NDMsMTk0ODQzXSxcIm1hcHBlZFwiLFsxMzIzODldXSxbWzE5NDg0NCwxOTQ4NDRdLFwibWFwcGVkXCIsWzI4OTk3XV0sW1sxOTQ4NDUsMTk0ODQ1XSxcIm1hcHBlZFwiLFsxNDgwNjddXSxbWzE5NDg0NiwxOTQ4NDZdLFwibWFwcGVkXCIsWzI5MDg0XV0sW1sxOTQ4NDcsMTk0ODQ3XSxcImRpc2FsbG93ZWRcIl0sW1sxOTQ4NDgsMTk0ODQ4XSxcIm1hcHBlZFwiLFsyOTIyNF1dLFtbMTk0ODQ5LDE5NDg0OV0sXCJtYXBwZWRcIixbMjkyMzddXSxbWzE5NDg1MCwxOTQ4NTBdLFwibWFwcGVkXCIsWzI5MjY0XV0sW1sxOTQ4NTEsMTk0ODUxXSxcIm1hcHBlZFwiLFsxNDkwMDBdXSxbWzE5NDg1MiwxOTQ4NTJdLFwibWFwcGVkXCIsWzI5MzEyXV0sW1sxOTQ4NTMsMTk0ODUzXSxcIm1hcHBlZFwiLFsyOTMzM11dLFtbMTk0ODU0LDE5NDg1NF0sXCJtYXBwZWRcIixbMTQ5MzAxXV0sW1sxOTQ4NTUsMTk0ODU1XSxcIm1hcHBlZFwiLFsxNDk1MjRdXSxbWzE5NDg1NiwxOTQ4NTZdLFwibWFwcGVkXCIsWzI5NTYyXV0sW1sxOTQ4NTcsMTk0ODU3XSxcIm1hcHBlZFwiLFsyOTU3OV1dLFtbMTk0ODU4LDE5NDg1OF0sXCJtYXBwZWRcIixbMTYwNDRdXSxbWzE5NDg1OSwxOTQ4NTldLFwibWFwcGVkXCIsWzI5NjA1XV0sW1sxOTQ4NjAsMTk0ODYxXSxcIm1hcHBlZFwiLFsxNjA1Nl1dLFtbMTk0ODYyLDE5NDg2Ml0sXCJtYXBwZWRcIixbMjk3NjddXSxbWzE5NDg2MywxOTQ4NjNdLFwibWFwcGVkXCIsWzI5Nzg4XV0sW1sxOTQ4NjQsMTk0ODY0XSxcIm1hcHBlZFwiLFsyOTgwOV1dLFtbMTk0ODY1LDE5NDg2NV0sXCJtYXBwZWRcIixbMjk4MjldXSxbWzE5NDg2NiwxOTQ4NjZdLFwibWFwcGVkXCIsWzI5ODk4XV0sW1sxOTQ4NjcsMTk0ODY3XSxcIm1hcHBlZFwiLFsxNjE1NV1dLFtbMTk0ODY4LDE5NDg2OF0sXCJtYXBwZWRcIixbMjk5ODhdXSxbWzE5NDg2OSwxOTQ4NjldLFwibWFwcGVkXCIsWzE1MDU4Ml1dLFtbMTk0ODcwLDE5NDg3MF0sXCJtYXBwZWRcIixbMzAwMTRdXSxbWzE5NDg3MSwxOTQ4NzFdLFwibWFwcGVkXCIsWzE1MDY3NF1dLFtbMTk0ODcyLDE5NDg3Ml0sXCJtYXBwZWRcIixbMzAwNjRdXSxbWzE5NDg3MywxOTQ4NzNdLFwibWFwcGVkXCIsWzEzOTY3OV1dLFtbMTk0ODc0LDE5NDg3NF0sXCJtYXBwZWRcIixbMzAyMjRdXSxbWzE5NDg3NSwxOTQ4NzVdLFwibWFwcGVkXCIsWzE1MTQ1N11dLFtbMTk0ODc2LDE5NDg3Nl0sXCJtYXBwZWRcIixbMTUxNDgwXV0sW1sxOTQ4NzcsMTk0ODc3XSxcIm1hcHBlZFwiLFsxNTE2MjBdXSxbWzE5NDg3OCwxOTQ4NzhdLFwibWFwcGVkXCIsWzE2MzgwXV0sW1sxOTQ4NzksMTk0ODc5XSxcIm1hcHBlZFwiLFsxNjM5Ml1dLFtbMTk0ODgwLDE5NDg4MF0sXCJtYXBwZWRcIixbMzA0NTJdXSxbWzE5NDg4MSwxOTQ4ODFdLFwibWFwcGVkXCIsWzE1MTc5NV1dLFtbMTk0ODgyLDE5NDg4Ml0sXCJtYXBwZWRcIixbMTUxNzk0XV0sW1sxOTQ4ODMsMTk0ODgzXSxcIm1hcHBlZFwiLFsxNTE4MzNdXSxbWzE5NDg4NCwxOTQ4ODRdLFwibWFwcGVkXCIsWzE1MTg1OV1dLFtbMTk0ODg1LDE5NDg4NV0sXCJtYXBwZWRcIixbMzA0OTRdXSxbWzE5NDg4NiwxOTQ4ODddLFwibWFwcGVkXCIsWzMwNDk1XV0sW1sxOTQ4ODgsMTk0ODg4XSxcIm1hcHBlZFwiLFszMDUzOF1dLFtbMTk0ODg5LDE5NDg4OV0sXCJtYXBwZWRcIixbMTY0NDFdXSxbWzE5NDg5MCwxOTQ4OTBdLFwibWFwcGVkXCIsWzMwNjAzXV0sW1sxOTQ4OTEsMTk0ODkxXSxcIm1hcHBlZFwiLFsxNjQ1NF1dLFtbMTk0ODkyLDE5NDg5Ml0sXCJtYXBwZWRcIixbMTY1MzRdXSxbWzE5NDg5MywxOTQ4OTNdLFwibWFwcGVkXCIsWzE1MjYwNV1dLFtbMTk0ODk0LDE5NDg5NF0sXCJtYXBwZWRcIixbMzA3OThdXSxbWzE5NDg5NSwxOTQ4OTVdLFwibWFwcGVkXCIsWzMwODYwXV0sW1sxOTQ4OTYsMTk0ODk2XSxcIm1hcHBlZFwiLFszMDkyNF1dLFtbMTk0ODk3LDE5NDg5N10sXCJtYXBwZWRcIixbMTY2MTFdXSxbWzE5NDg5OCwxOTQ4OThdLFwibWFwcGVkXCIsWzE1MzEyNl1dLFtbMTk0ODk5LDE5NDg5OV0sXCJtYXBwZWRcIixbMzEwNjJdXSxbWzE5NDkwMCwxOTQ5MDBdLFwibWFwcGVkXCIsWzE1MzI0Ml1dLFtbMTk0OTAxLDE5NDkwMV0sXCJtYXBwZWRcIixbMTUzMjg1XV0sW1sxOTQ5MDIsMTk0OTAyXSxcIm1hcHBlZFwiLFszMTExOV1dLFtbMTk0OTAzLDE5NDkwM10sXCJtYXBwZWRcIixbMzEyMTFdXSxbWzE5NDkwNCwxOTQ5MDRdLFwibWFwcGVkXCIsWzE2Njg3XV0sW1sxOTQ5MDUsMTk0OTA1XSxcIm1hcHBlZFwiLFszMTI5Nl1dLFtbMTk0OTA2LDE5NDkwNl0sXCJtYXBwZWRcIixbMzEzMDZdXSxbWzE5NDkwNywxOTQ5MDddLFwibWFwcGVkXCIsWzMxMzExXV0sW1sxOTQ5MDgsMTk0OTA4XSxcIm1hcHBlZFwiLFsxNTM5ODBdXSxbWzE5NDkwOSwxOTQ5MTBdLFwibWFwcGVkXCIsWzE1NDI3OV1dLFtbMTk0OTExLDE5NDkxMV0sXCJkaXNhbGxvd2VkXCJdLFtbMTk0OTEyLDE5NDkxMl0sXCJtYXBwZWRcIixbMTY4OThdXSxbWzE5NDkxMywxOTQ5MTNdLFwibWFwcGVkXCIsWzE1NDUzOV1dLFtbMTk0OTE0LDE5NDkxNF0sXCJtYXBwZWRcIixbMzE2ODZdXSxbWzE5NDkxNSwxOTQ5MTVdLFwibWFwcGVkXCIsWzMxNjg5XV0sW1sxOTQ5MTYsMTk0OTE2XSxcIm1hcHBlZFwiLFsxNjkzNV1dLFtbMTk0OTE3LDE5NDkxN10sXCJtYXBwZWRcIixbMTU0NzUyXV0sW1sxOTQ5MTgsMTk0OTE4XSxcIm1hcHBlZFwiLFszMTk1NF1dLFtbMTk0OTE5LDE5NDkxOV0sXCJtYXBwZWRcIixbMTcwNTZdXSxbWzE5NDkyMCwxOTQ5MjBdLFwibWFwcGVkXCIsWzMxOTc2XV0sW1sxOTQ5MjEsMTk0OTIxXSxcIm1hcHBlZFwiLFszMTk3MV1dLFtbMTk0OTIyLDE5NDkyMl0sXCJtYXBwZWRcIixbMzIwMDBdXSxbWzE5NDkyMywxOTQ5MjNdLFwibWFwcGVkXCIsWzE1NTUyNl1dLFtbMTk0OTI0LDE5NDkyNF0sXCJtYXBwZWRcIixbMzIwOTldXSxbWzE5NDkyNSwxOTQ5MjVdLFwibWFwcGVkXCIsWzE3MTUzXV0sW1sxOTQ5MjYsMTk0OTI2XSxcIm1hcHBlZFwiLFszMjE5OV1dLFtbMTk0OTI3LDE5NDkyN10sXCJtYXBwZWRcIixbMzIyNThdXSxbWzE5NDkyOCwxOTQ5MjhdLFwibWFwcGVkXCIsWzMyMzI1XV0sW1sxOTQ5MjksMTk0OTI5XSxcIm1hcHBlZFwiLFsxNzIwNF1dLFtbMTk0OTMwLDE5NDkzMF0sXCJtYXBwZWRcIixbMTU2MjAwXV0sW1sxOTQ5MzEsMTk0OTMxXSxcIm1hcHBlZFwiLFsxNTYyMzFdXSxbWzE5NDkzMiwxOTQ5MzJdLFwibWFwcGVkXCIsWzE3MjQxXV0sW1sxOTQ5MzMsMTk0OTMzXSxcIm1hcHBlZFwiLFsxNTYzNzddXSxbWzE5NDkzNCwxOTQ5MzRdLFwibWFwcGVkXCIsWzMyNjM0XV0sW1sxOTQ5MzUsMTk0OTM1XSxcIm1hcHBlZFwiLFsxNTY0NzhdXSxbWzE5NDkzNiwxOTQ5MzZdLFwibWFwcGVkXCIsWzMyNjYxXV0sW1sxOTQ5MzcsMTk0OTM3XSxcIm1hcHBlZFwiLFszMjc2Ml1dLFtbMTk0OTM4LDE5NDkzOF0sXCJtYXBwZWRcIixbMzI3NzNdXSxbWzE5NDkzOSwxOTQ5MzldLFwibWFwcGVkXCIsWzE1Njg5MF1dLFtbMTk0OTQwLDE5NDk0MF0sXCJtYXBwZWRcIixbMTU2OTYzXV0sW1sxOTQ5NDEsMTk0OTQxXSxcIm1hcHBlZFwiLFszMjg2NF1dLFtbMTk0OTQyLDE5NDk0Ml0sXCJtYXBwZWRcIixbMTU3MDk2XV0sW1sxOTQ5NDMsMTk0OTQzXSxcIm1hcHBlZFwiLFszMjg4MF1dLFtbMTk0OTQ0LDE5NDk0NF0sXCJtYXBwZWRcIixbMTQ0MjIzXV0sW1sxOTQ5NDUsMTk0OTQ1XSxcIm1hcHBlZFwiLFsxNzM2NV1dLFtbMTk0OTQ2LDE5NDk0Nl0sXCJtYXBwZWRcIixbMzI5NDZdXSxbWzE5NDk0NywxOTQ5NDddLFwibWFwcGVkXCIsWzMzMDI3XV0sW1sxOTQ5NDgsMTk0OTQ4XSxcIm1hcHBlZFwiLFsxNzQxOV1dLFtbMTk0OTQ5LDE5NDk0OV0sXCJtYXBwZWRcIixbMzMwODZdXSxbWzE5NDk1MCwxOTQ5NTBdLFwibWFwcGVkXCIsWzIzMjIxXV0sW1sxOTQ5NTEsMTk0OTUxXSxcIm1hcHBlZFwiLFsxNTc2MDddXSxbWzE5NDk1MiwxOTQ5NTJdLFwibWFwcGVkXCIsWzE1NzYyMV1dLFtbMTk0OTUzLDE5NDk1M10sXCJtYXBwZWRcIixbMTQ0Mjc1XV0sW1sxOTQ5NTQsMTk0OTU0XSxcIm1hcHBlZFwiLFsxNDQyODRdXSxbWzE5NDk1NSwxOTQ5NTVdLFwibWFwcGVkXCIsWzMzMjgxXV0sW1sxOTQ5NTYsMTk0OTU2XSxcIm1hcHBlZFwiLFszMzI4NF1dLFtbMTk0OTU3LDE5NDk1N10sXCJtYXBwZWRcIixbMzY3NjZdXSxbWzE5NDk1OCwxOTQ5NThdLFwibWFwcGVkXCIsWzE3NTE1XV0sW1sxOTQ5NTksMTk0OTU5XSxcIm1hcHBlZFwiLFszMzQyNV1dLFtbMTk0OTYwLDE5NDk2MF0sXCJtYXBwZWRcIixbMzM0MTldXSxbWzE5NDk2MSwxOTQ5NjFdLFwibWFwcGVkXCIsWzMzNDM3XV0sW1sxOTQ5NjIsMTk0OTYyXSxcIm1hcHBlZFwiLFsyMTE3MV1dLFtbMTk0OTYzLDE5NDk2M10sXCJtYXBwZWRcIixbMzM0NTddXSxbWzE5NDk2NCwxOTQ5NjRdLFwibWFwcGVkXCIsWzMzNDU5XV0sW1sxOTQ5NjUsMTk0OTY1XSxcIm1hcHBlZFwiLFszMzQ2OV1dLFtbMTk0OTY2LDE5NDk2Nl0sXCJtYXBwZWRcIixbMzM1MTBdXSxbWzE5NDk2NywxOTQ5NjddLFwibWFwcGVkXCIsWzE1ODUyNF1dLFtbMTk0OTY4LDE5NDk2OF0sXCJtYXBwZWRcIixbMzM1MDldXSxbWzE5NDk2OSwxOTQ5NjldLFwibWFwcGVkXCIsWzMzNTY1XV0sW1sxOTQ5NzAsMTk0OTcwXSxcIm1hcHBlZFwiLFszMzYzNV1dLFtbMTk0OTcxLDE5NDk3MV0sXCJtYXBwZWRcIixbMzM3MDldXSxbWzE5NDk3MiwxOTQ5NzJdLFwibWFwcGVkXCIsWzMzNTcxXV0sW1sxOTQ5NzMsMTk0OTczXSxcIm1hcHBlZFwiLFszMzcyNV1dLFtbMTk0OTc0LDE5NDk3NF0sXCJtYXBwZWRcIixbMzM3NjddXSxbWzE5NDk3NSwxOTQ5NzVdLFwibWFwcGVkXCIsWzMzODc5XV0sW1sxOTQ5NzYsMTk0OTc2XSxcIm1hcHBlZFwiLFszMzYxOV1dLFtbMTk0OTc3LDE5NDk3N10sXCJtYXBwZWRcIixbMzM3MzhdXSxbWzE5NDk3OCwxOTQ5NzhdLFwibWFwcGVkXCIsWzMzNzQwXV0sW1sxOTQ5NzksMTk0OTc5XSxcIm1hcHBlZFwiLFszMzc1Nl1dLFtbMTk0OTgwLDE5NDk4MF0sXCJtYXBwZWRcIixbMTU4Nzc0XV0sW1sxOTQ5ODEsMTk0OTgxXSxcIm1hcHBlZFwiLFsxNTkwODNdXSxbWzE5NDk4MiwxOTQ5ODJdLFwibWFwcGVkXCIsWzE1ODkzM11dLFtbMTk0OTgzLDE5NDk4M10sXCJtYXBwZWRcIixbMTc3MDddXSxbWzE5NDk4NCwxOTQ5ODRdLFwibWFwcGVkXCIsWzM0MDMzXV0sW1sxOTQ5ODUsMTk0OTg1XSxcIm1hcHBlZFwiLFszNDAzNV1dLFtbMTk0OTg2LDE5NDk4Nl0sXCJtYXBwZWRcIixbMzQwNzBdXSxbWzE5NDk4NywxOTQ5ODddLFwibWFwcGVkXCIsWzE2MDcxNF1dLFtbMTk0OTg4LDE5NDk4OF0sXCJtYXBwZWRcIixbMzQxNDhdXSxbWzE5NDk4OSwxOTQ5ODldLFwibWFwcGVkXCIsWzE1OTUzMl1dLFtbMTk0OTkwLDE5NDk5MF0sXCJtYXBwZWRcIixbMTc3NTddXSxbWzE5NDk5MSwxOTQ5OTFdLFwibWFwcGVkXCIsWzE3NzYxXV0sW1sxOTQ5OTIsMTk0OTkyXSxcIm1hcHBlZFwiLFsxNTk2NjVdXSxbWzE5NDk5MywxOTQ5OTNdLFwibWFwcGVkXCIsWzE1OTk1NF1dLFtbMTk0OTk0LDE5NDk5NF0sXCJtYXBwZWRcIixbMTc3NzFdXSxbWzE5NDk5NSwxOTQ5OTVdLFwibWFwcGVkXCIsWzM0Mzg0XV0sW1sxOTQ5OTYsMTk0OTk2XSxcIm1hcHBlZFwiLFszNDM5Nl1dLFtbMTk0OTk3LDE5NDk5N10sXCJtYXBwZWRcIixbMzQ0MDddXSxbWzE5NDk5OCwxOTQ5OThdLFwibWFwcGVkXCIsWzM0NDA5XV0sW1sxOTQ5OTksMTk0OTk5XSxcIm1hcHBlZFwiLFszNDQ3M11dLFtbMTk1MDAwLDE5NTAwMF0sXCJtYXBwZWRcIixbMzQ0NDBdXSxbWzE5NTAwMSwxOTUwMDFdLFwibWFwcGVkXCIsWzM0NTc0XV0sW1sxOTUwMDIsMTk1MDAyXSxcIm1hcHBlZFwiLFszNDUzMF1dLFtbMTk1MDAzLDE5NTAwM10sXCJtYXBwZWRcIixbMzQ2ODFdXSxbWzE5NTAwNCwxOTUwMDRdLFwibWFwcGVkXCIsWzM0NjAwXV0sW1sxOTUwMDUsMTk1MDA1XSxcIm1hcHBlZFwiLFszNDY2N11dLFtbMTk1MDA2LDE5NTAwNl0sXCJtYXBwZWRcIixbMzQ2OTRdXSxbWzE5NTAwNywxOTUwMDddLFwiZGlzYWxsb3dlZFwiXSxbWzE5NTAwOCwxOTUwMDhdLFwibWFwcGVkXCIsWzM0Nzg1XV0sW1sxOTUwMDksMTk1MDA5XSxcIm1hcHBlZFwiLFszNDgxN11dLFtbMTk1MDEwLDE5NTAxMF0sXCJtYXBwZWRcIixbMTc5MTNdXSxbWzE5NTAxMSwxOTUwMTFdLFwibWFwcGVkXCIsWzM0OTEyXV0sW1sxOTUwMTIsMTk1MDEyXSxcIm1hcHBlZFwiLFszNDkxNV1dLFtbMTk1MDEzLDE5NTAxM10sXCJtYXBwZWRcIixbMTYxMzgzXV0sW1sxOTUwMTQsMTk1MDE0XSxcIm1hcHBlZFwiLFszNTAzMV1dLFtbMTk1MDE1LDE5NTAxNV0sXCJtYXBwZWRcIixbMzUwMzhdXSxbWzE5NTAxNiwxOTUwMTZdLFwibWFwcGVkXCIsWzE3OTczXV0sW1sxOTUwMTcsMTk1MDE3XSxcIm1hcHBlZFwiLFszNTA2Nl1dLFtbMTk1MDE4LDE5NTAxOF0sXCJtYXBwZWRcIixbMTM0OTldXSxbWzE5NTAxOSwxOTUwMTldLFwibWFwcGVkXCIsWzE2MTk2Nl1dLFtbMTk1MDIwLDE5NTAyMF0sXCJtYXBwZWRcIixbMTYyMTUwXV0sW1sxOTUwMjEsMTk1MDIxXSxcIm1hcHBlZFwiLFsxODExMF1dLFtbMTk1MDIyLDE5NTAyMl0sXCJtYXBwZWRcIixbMTgxMTldXSxbWzE5NTAyMywxOTUwMjNdLFwibWFwcGVkXCIsWzM1NDg4XV0sW1sxOTUwMjQsMTk1MDI0XSxcIm1hcHBlZFwiLFszNTU2NV1dLFtbMTk1MDI1LDE5NTAyNV0sXCJtYXBwZWRcIixbMzU3MjJdXSxbWzE5NTAyNiwxOTUwMjZdLFwibWFwcGVkXCIsWzM1OTI1XV0sW1sxOTUwMjcsMTk1MDI3XSxcIm1hcHBlZFwiLFsxNjI5ODRdXSxbWzE5NTAyOCwxOTUwMjhdLFwibWFwcGVkXCIsWzM2MDExXV0sW1sxOTUwMjksMTk1MDI5XSxcIm1hcHBlZFwiLFszNjAzM11dLFtbMTk1MDMwLDE5NTAzMF0sXCJtYXBwZWRcIixbMzYxMjNdXSxbWzE5NTAzMSwxOTUwMzFdLFwibWFwcGVkXCIsWzM2MjE1XV0sW1sxOTUwMzIsMTk1MDMyXSxcIm1hcHBlZFwiLFsxNjM2MzFdXSxbWzE5NTAzMywxOTUwMzNdLFwibWFwcGVkXCIsWzEzMzEyNF1dLFtbMTk1MDM0LDE5NTAzNF0sXCJtYXBwZWRcIixbMzYyOTldXSxbWzE5NTAzNSwxOTUwMzVdLFwibWFwcGVkXCIsWzM2Mjg0XV0sW1sxOTUwMzYsMTk1MDM2XSxcIm1hcHBlZFwiLFszNjMzNl1dLFtbMTk1MDM3LDE5NTAzN10sXCJtYXBwZWRcIixbMTMzMzQyXV0sW1sxOTUwMzgsMTk1MDM4XSxcIm1hcHBlZFwiLFszNjU2NF1dLFtbMTk1MDM5LDE5NTAzOV0sXCJtYXBwZWRcIixbMzY2NjRdXSxbWzE5NTA0MCwxOTUwNDBdLFwibWFwcGVkXCIsWzE2NTMzMF1dLFtbMTk1MDQxLDE5NTA0MV0sXCJtYXBwZWRcIixbMTY1MzU3XV0sW1sxOTUwNDIsMTk1MDQyXSxcIm1hcHBlZFwiLFszNzAxMl1dLFtbMTk1MDQzLDE5NTA0M10sXCJtYXBwZWRcIixbMzcxMDVdXSxbWzE5NTA0NCwxOTUwNDRdLFwibWFwcGVkXCIsWzM3MTM3XV0sW1sxOTUwNDUsMTk1MDQ1XSxcIm1hcHBlZFwiLFsxNjU2NzhdXSxbWzE5NTA0NiwxOTUwNDZdLFwibWFwcGVkXCIsWzM3MTQ3XV0sW1sxOTUwNDcsMTk1MDQ3XSxcIm1hcHBlZFwiLFszNzQzMl1dLFtbMTk1MDQ4LDE5NTA0OF0sXCJtYXBwZWRcIixbMzc1OTFdXSxbWzE5NTA0OSwxOTUwNDldLFwibWFwcGVkXCIsWzM3NTkyXV0sW1sxOTUwNTAsMTk1MDUwXSxcIm1hcHBlZFwiLFszNzUwMF1dLFtbMTk1MDUxLDE5NTA1MV0sXCJtYXBwZWRcIixbMzc4ODFdXSxbWzE5NTA1MiwxOTUwNTJdLFwibWFwcGVkXCIsWzM3OTA5XV0sW1sxOTUwNTMsMTk1MDUzXSxcIm1hcHBlZFwiLFsxNjY5MDZdXSxbWzE5NTA1NCwxOTUwNTRdLFwibWFwcGVkXCIsWzM4MjgzXV0sW1sxOTUwNTUsMTk1MDU1XSxcIm1hcHBlZFwiLFsxODgzN11dLFtbMTk1MDU2LDE5NTA1Nl0sXCJtYXBwZWRcIixbMzgzMjddXSxbWzE5NTA1NywxOTUwNTddLFwibWFwcGVkXCIsWzE2NzI4N11dLFtbMTk1MDU4LDE5NTA1OF0sXCJtYXBwZWRcIixbMTg5MThdXSxbWzE5NTA1OSwxOTUwNTldLFwibWFwcGVkXCIsWzM4NTk1XV0sW1sxOTUwNjAsMTk1MDYwXSxcIm1hcHBlZFwiLFsyMzk4Nl1dLFtbMTk1MDYxLDE5NTA2MV0sXCJtYXBwZWRcIixbMzg2OTFdXSxbWzE5NTA2MiwxOTUwNjJdLFwibWFwcGVkXCIsWzE2ODI2MV1dLFtbMTk1MDYzLDE5NTA2M10sXCJtYXBwZWRcIixbMTY4NDc0XV0sW1sxOTUwNjQsMTk1MDY0XSxcIm1hcHBlZFwiLFsxOTA1NF1dLFtbMTk1MDY1LDE5NTA2NV0sXCJtYXBwZWRcIixbMTkwNjJdXSxbWzE5NTA2NiwxOTUwNjZdLFwibWFwcGVkXCIsWzM4ODgwXV0sW1sxOTUwNjcsMTk1MDY3XSxcIm1hcHBlZFwiLFsxNjg5NzBdXSxbWzE5NTA2OCwxOTUwNjhdLFwibWFwcGVkXCIsWzE5MTIyXV0sW1sxOTUwNjksMTk1MDY5XSxcIm1hcHBlZFwiLFsxNjkxMTBdXSxbWzE5NTA3MCwxOTUwNzFdLFwibWFwcGVkXCIsWzM4OTIzXV0sW1sxOTUwNzIsMTk1MDcyXSxcIm1hcHBlZFwiLFszODk1M11dLFtbMTk1MDczLDE5NTA3M10sXCJtYXBwZWRcIixbMTY5Mzk4XV0sW1sxOTUwNzQsMTk1MDc0XSxcIm1hcHBlZFwiLFszOTEzOF1dLFtbMTk1MDc1LDE5NTA3NV0sXCJtYXBwZWRcIixbMTkyNTFdXSxbWzE5NTA3NiwxOTUwNzZdLFwibWFwcGVkXCIsWzM5MjA5XV0sW1sxOTUwNzcsMTk1MDc3XSxcIm1hcHBlZFwiLFszOTMzNV1dLFtbMTk1MDc4LDE5NTA3OF0sXCJtYXBwZWRcIixbMzkzNjJdXSxbWzE5NTA3OSwxOTUwNzldLFwibWFwcGVkXCIsWzM5NDIyXV0sW1sxOTUwODAsMTk1MDgwXSxcIm1hcHBlZFwiLFsxOTQwNl1dLFtbMTk1MDgxLDE5NTA4MV0sXCJtYXBwZWRcIixbMTcwODAwXV0sW1sxOTUwODIsMTk1MDgyXSxcIm1hcHBlZFwiLFszOTY5OF1dLFtbMTk1MDgzLDE5NTA4M10sXCJtYXBwZWRcIixbNDAwMDBdXSxbWzE5NTA4NCwxOTUwODRdLFwibWFwcGVkXCIsWzQwMTg5XV0sW1sxOTUwODUsMTk1MDg1XSxcIm1hcHBlZFwiLFsxOTY2Ml1dLFtbMTk1MDg2LDE5NTA4Nl0sXCJtYXBwZWRcIixbMTk2OTNdXSxbWzE5NTA4NywxOTUwODddLFwibWFwcGVkXCIsWzQwMjk1XV0sW1sxOTUwODgsMTk1MDg4XSxcIm1hcHBlZFwiLFsxNzIyMzhdXSxbWzE5NTA4OSwxOTUwODldLFwibWFwcGVkXCIsWzE5NzA0XV0sW1sxOTUwOTAsMTk1MDkwXSxcIm1hcHBlZFwiLFsxNzIyOTNdXSxbWzE5NTA5MSwxOTUwOTFdLFwibWFwcGVkXCIsWzE3MjU1OF1dLFtbMTk1MDkyLDE5NTA5Ml0sXCJtYXBwZWRcIixbMTcyNjg5XV0sW1sxOTUwOTMsMTk1MDkzXSxcIm1hcHBlZFwiLFs0MDYzNV1dLFtbMTk1MDk0LDE5NTA5NF0sXCJtYXBwZWRcIixbMTk3OThdXSxbWzE5NTA5NSwxOTUwOTVdLFwibWFwcGVkXCIsWzQwNjk3XV0sW1sxOTUwOTYsMTk1MDk2XSxcIm1hcHBlZFwiLFs0MDcwMl1dLFtbMTk1MDk3LDE5NTA5N10sXCJtYXBwZWRcIixbNDA3MDldXSxbWzE5NTA5OCwxOTUwOThdLFwibWFwcGVkXCIsWzQwNzE5XV0sW1sxOTUwOTksMTk1MDk5XSxcIm1hcHBlZFwiLFs0MDcyNl1dLFtbMTk1MTAwLDE5NTEwMF0sXCJtYXBwZWRcIixbNDA3NjNdXSxbWzE5NTEwMSwxOTUxMDFdLFwibWFwcGVkXCIsWzE3MzU2OF1dLFtbMTk1MTAyLDE5NjYwNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTk2NjA2LDE5NjYwN10sXCJkaXNhbGxvd2VkXCJdLFtbMTk2NjA4LDI2MjE0MV0sXCJkaXNhbGxvd2VkXCJdLFtbMjYyMTQyLDI2MjE0M10sXCJkaXNhbGxvd2VkXCJdLFtbMjYyMTQ0LDMyNzY3N10sXCJkaXNhbGxvd2VkXCJdLFtbMzI3Njc4LDMyNzY3OV0sXCJkaXNhbGxvd2VkXCJdLFtbMzI3NjgwLDM5MzIxM10sXCJkaXNhbGxvd2VkXCJdLFtbMzkzMjE0LDM5MzIxNV0sXCJkaXNhbGxvd2VkXCJdLFtbMzkzMjE2LDQ1ODc0OV0sXCJkaXNhbGxvd2VkXCJdLFtbNDU4NzUwLDQ1ODc1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDU4NzUyLDUyNDI4NV0sXCJkaXNhbGxvd2VkXCJdLFtbNTI0Mjg2LDUyNDI4N10sXCJkaXNhbGxvd2VkXCJdLFtbNTI0Mjg4LDU4OTgyMV0sXCJkaXNhbGxvd2VkXCJdLFtbNTg5ODIyLDU4OTgyM10sXCJkaXNhbGxvd2VkXCJdLFtbNTg5ODI0LDY1NTM1N10sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MzU4LDY1NTM1OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MzYwLDcyMDg5M10sXCJkaXNhbGxvd2VkXCJdLFtbNzIwODk0LDcyMDg5NV0sXCJkaXNhbGxvd2VkXCJdLFtbNzIwODk2LDc4NjQyOV0sXCJkaXNhbGxvd2VkXCJdLFtbNzg2NDMwLDc4NjQzMV0sXCJkaXNhbGxvd2VkXCJdLFtbNzg2NDMyLDg1MTk2NV0sXCJkaXNhbGxvd2VkXCJdLFtbODUxOTY2LDg1MTk2N10sXCJkaXNhbGxvd2VkXCJdLFtbODUxOTY4LDkxNzUwMV0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NTAyLDkxNzUwM10sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NTA0LDkxNzUwNF0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NTA1LDkxNzUwNV0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NTA2LDkxNzUzNV0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NTM2LDkxNzYzMV0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NjMyLDkxNzc1OV0sXCJkaXNhbGxvd2VkXCJdLFtbOTE3NzYwLDkxNzk5OV0sXCJpZ25vcmVkXCJdLFtbOTE4MDAwLDk4MzAzN10sXCJkaXNhbGxvd2VkXCJdLFtbOTgzMDM4LDk4MzAzOV0sXCJkaXNhbGxvd2VkXCJdLFtbOTgzMDQwLDEwNDg1NzNdLFwiZGlzYWxsb3dlZFwiXSxbWzEwNDg1NzQsMTA0ODU3NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTA0ODU3NiwxMTE0MTA5XSxcImRpc2FsbG93ZWRcIl0sW1sxMTE0MTEwLDExMTQxMTFdLFwiZGlzYWxsb3dlZFwiXV0iLCIndXNlIHN0cmljdCdcblxudmFyIG5ldCA9IHJlcXVpcmUoJ25ldCcpXG4gICwgdGxzID0gcmVxdWlyZSgndGxzJylcbiAgLCBodHRwID0gcmVxdWlyZSgnaHR0cCcpXG4gICwgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpXG4gICwgZXZlbnRzID0gcmVxdWlyZSgnZXZlbnRzJylcbiAgLCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuICAsIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcbiAgLCBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuICA7XG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwXG5leHBvcnRzLmh0dHBzT3Zlckh0dHAgPSBodHRwc092ZXJIdHRwXG5leHBvcnRzLmh0dHBPdmVySHR0cHMgPSBodHRwT3Zlckh0dHBzXG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHNcblxuXG5mdW5jdGlvbiBodHRwT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucylcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHAucmVxdWVzdFxuICByZXR1cm4gYWdlbnRcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cChvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKVxuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldFxuICBhZ2VudC5kZWZhdWx0UG9ydCA9IDQ0M1xuICByZXR1cm4gYWdlbnRcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKVxuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cHMucmVxdWVzdFxuICByZXR1cm4gYWdlbnRcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucylcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3RcbiAgYWdlbnQuY3JlYXRlU29ja2V0ID0gY3JlYXRlU2VjdXJlU29ja2V0XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzXG4gIHJldHVybiBhZ2VudFxufVxuXG5cbmZ1bmN0aW9uIFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgc2VsZi5wcm94eU9wdGlvbnMgPSBzZWxmLm9wdGlvbnMucHJveHkgfHwge31cbiAgc2VsZi5tYXhTb2NrZXRzID0gc2VsZi5vcHRpb25zLm1heFNvY2tldHMgfHwgaHR0cC5BZ2VudC5kZWZhdWx0TWF4U29ja2V0c1xuICBzZWxmLnJlcXVlc3RzID0gW11cbiAgc2VsZi5zb2NrZXRzID0gW11cblxuICBzZWxmLm9uKCdmcmVlJywgZnVuY3Rpb24gb25GcmVlKHNvY2tldCwgaG9zdCwgcG9ydCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV1cbiAgICAgIGlmIChwZW5kaW5nLmhvc3QgPT09IGhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBwb3J0KSB7XG4gICAgICAgIC8vIERldGVjdCB0aGUgcmVxdWVzdCB0byBjb25uZWN0IHNhbWUgb3JpZ2luIHNlcnZlcixcbiAgICAgICAgLy8gcmV1c2UgdGhlIGNvbm5lY3Rpb24uXG4gICAgICAgIHNlbGYucmVxdWVzdHMuc3BsaWNlKGksIDEpXG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBzb2NrZXQuZGVzdHJveSgpXG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KVxuICB9KVxufVxudXRpbC5pbmhlcml0cyhUdW5uZWxpbmdBZ2VudCwgZXZlbnRzLkV2ZW50RW1pdHRlcilcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgb3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICAgLy8gTGVnYWN5IEFQSTogYWRkUmVxdWVzdChyZXEsIGhvc3QsIHBvcnQsIHBhdGgpXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgaG9zdDogb3B0aW9ucyxcbiAgICAgIHBvcnQ6IGFyZ3VtZW50c1syXSxcbiAgICAgIHBhdGg6IGFyZ3VtZW50c1szXVxuICAgIH07XG4gIH1cblxuICBpZiAoc2VsZi5zb2NrZXRzLmxlbmd0aCA+PSB0aGlzLm1heFNvY2tldHMpIHtcbiAgICAvLyBXZSBhcmUgb3ZlciBsaW1pdCBzbyB3ZSdsbCBhZGQgaXQgdG8gdGhlIHF1ZXVlLlxuICAgIHNlbGYucmVxdWVzdHMucHVzaCh7aG9zdDogb3B0aW9ucy5ob3N0LCBwb3J0OiBvcHRpb25zLnBvcnQsIHJlcXVlc3Q6IHJlcX0pXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBJZiB3ZSBhcmUgdW5kZXIgbWF4U29ja2V0cyBjcmVhdGUgYSBuZXcgb25lLlxuICBzZWxmLmNyZWF0ZUNvbm5lY3Rpb24oe2hvc3Q6IG9wdGlvbnMuaG9zdCwgcG9ydDogb3B0aW9ucy5wb3J0LCByZXF1ZXN0OiByZXF9KVxufVxuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuY3JlYXRlQ29ubmVjdGlvbiA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3Rpb24ocGVuZGluZykge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICBzZWxmLmNyZWF0ZVNvY2tldChwZW5kaW5nLCBmdW5jdGlvbihzb2NrZXQpIHtcbiAgICBzb2NrZXQub24oJ2ZyZWUnLCBvbkZyZWUpXG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSlcbiAgICBzb2NrZXQub24oJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKVxuICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpXG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIHBlbmRpbmcuaG9zdCwgcGVuZGluZy5wb3J0KVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldClcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZnJlZScsIG9uRnJlZSlcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbkNsb3NlT3JSZW1vdmUpXG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKVxuICAgIH1cbiAgfSlcbn1cblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgdmFyIHBsYWNlaG9sZGVyID0ge31cbiAgc2VsZi5zb2NrZXRzLnB1c2gocGxhY2Vob2xkZXIpXG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucyxcbiAgICB7IG1ldGhvZDogJ0NPTk5FQ1QnXG4gICAgLCBwYXRoOiBvcHRpb25zLmhvc3QgKyAnOicgKyBvcHRpb25zLnBvcnRcbiAgICAsIGFnZW50OiBmYWxzZVxuICAgIH1cbiAgKVxuICBpZiAoY29ubmVjdE9wdGlvbnMucHJveHlBdXRoKSB7XG4gICAgY29ubmVjdE9wdGlvbnMuaGVhZGVycyA9IGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgfHwge31cbiAgICBjb25uZWN0T3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArXG4gICAgICAgIEJ1ZmZlci5mcm9tKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gIH1cblxuICBkZWJ1ZygnbWFraW5nIENPTk5FQ1QgcmVxdWVzdCcpXG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKVxuICBjb25uZWN0UmVxLnVzZUNodW5rZWRFbmNvZGluZ0J5RGVmYXVsdCA9IGZhbHNlIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgncmVzcG9uc2UnLCBvblJlc3BvbnNlKSAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpICAgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdjb25uZWN0Jywgb25Db25uZWN0KSAgIC8vIGZvciB2MC43IG9yIGxhdGVyXG4gIGNvbm5lY3RSZXEub25jZSgnZXJyb3InLCBvbkVycm9yKVxuICBjb25uZWN0UmVxLmVuZCgpXG5cbiAgZnVuY3Rpb24gb25SZXNwb25zZShyZXMpIHtcbiAgICAvLyBWZXJ5IGhhY2t5LiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBodHRwLXBhcnNlciBsZWFrcy5cbiAgICByZXMudXBncmFkZSA9IHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVXBncmFkZShyZXMsIHNvY2tldCwgaGVhZCkge1xuICAgIC8vIEhhY2t5LlxuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCkge1xuICAgIGNvbm5lY3RSZXEucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICBzb2NrZXQucmVtb3ZlQWxsTGlzdGVuZXJzKClcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICBhc3NlcnQuZXF1YWwoaGVhZC5sZW5ndGgsIDApXG4gICAgICBkZWJ1ZygndHVubmVsaW5nIGNvbm5lY3Rpb24gaGFzIGVzdGFibGlzaGVkJylcbiAgICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihwbGFjZWhvbGRlcildID0gc29ja2V0XG4gICAgICBjYihzb2NrZXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgc3RhdHVzQ29kZT0lZCcsIHJlcy5zdGF0dXNDb2RlKVxuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSlcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCdcbiAgICAgIG9wdGlvbnMucmVxdWVzdC5lbWl0KCdlcnJvcicsIGVycm9yKVxuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25FcnJvcihjYXVzZSkge1xuICAgIGNvbm5lY3RSZXEucmVtb3ZlQWxsTGlzdGVuZXJzKClcblxuICAgIGRlYnVnKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgY2F1c2U9JXNcXG4nLCBjYXVzZS5tZXNzYWdlLCBjYXVzZS5zdGFjaylcbiAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCAnICsgJ2NhdXNlPScgKyBjYXVzZS5tZXNzYWdlKVxuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCdcbiAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcilcbiAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcilcbiAgfVxufVxuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUucmVtb3ZlU29ja2V0ID0gZnVuY3Rpb24gcmVtb3ZlU29ja2V0KHNvY2tldCkge1xuICB2YXIgcG9zID0gdGhpcy5zb2NrZXRzLmluZGV4T2Yoc29ja2V0KVxuICBpZiAocG9zID09PSAtMSkgcmV0dXJuXG5cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpXG5cbiAgdmFyIHBlbmRpbmcgPSB0aGlzLnJlcXVlc3RzLnNoaWZ0KClcbiAgaWYgKHBlbmRpbmcpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIHBlbmRpbmcgcmVxdWVzdHMgYW5kIGEgc29ja2V0IGdldHMgY2xvc2VkIGEgbmV3IG9uZVxuICAgIC8vIG5lZWRzIHRvIGJlIGNyZWF0ZWQgdG8gdGFrZSBvdmVyIGluIHRoZSBwb29sIGZvciB0aGUgb25lIHRoYXQgY2xvc2VkLlxuICAgIHRoaXMuY3JlYXRlQ29ubmVjdGlvbihwZW5kaW5nKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlY3VyZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIC8vIDAgaXMgZHVtbXkgcG9ydCBmb3IgdjAuNlxuICAgIHZhciBzZWN1cmVTb2NrZXQgPSB0bHMuY29ubmVjdCgwLCBtZXJnZU9wdGlvbnMoe30sIHNlbGYub3B0aW9ucyxcbiAgICAgIHsgc2VydmVybmFtZTogb3B0aW9ucy5ob3N0XG4gICAgICAsIHNvY2tldDogc29ja2V0XG4gICAgICB9XG4gICAgKSlcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2Yoc29ja2V0KV0gPSBzZWN1cmVTb2NrZXRcbiAgICBjYihzZWN1cmVTb2NrZXQpXG4gIH0pXG59XG5cblxuZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIG92ZXJyaWRlcyA9IGFyZ3VtZW50c1tpXVxuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpXG4gICAgICBmb3IgKHZhciBqID0gMCwga2V5TGVuID0ga2V5cy5sZW5ndGg7IGogPCBrZXlMZW47ICsraikge1xuICAgICAgICB2YXIgayA9IGtleXNbal1cbiAgICAgICAgaWYgKG92ZXJyaWRlc1trXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGFyZ2V0W2tdID0gb3ZlcnJpZGVzW2tdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldFxufVxuXG5cbnZhciBkZWJ1Z1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfREVCVUcgJiYgL1xcYnR1bm5lbFxcYi8udGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHKSkge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKVxuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXVxuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzLnVuc2hpZnQoJ1RVTk5FTDonKVxuICAgIH1cbiAgICBjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUsIGFyZ3MpXG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fVxufVxuZXhwb3J0cy5kZWJ1ZyA9IGRlYnVnIC8vIGZvciB0ZXN0XG4iLCIoZnVuY3Rpb24obmFjbCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBQb3J0ZWQgaW4gMjAxNCBieSBEbWl0cnkgQ2hlc3RueWtoIGFuZCBEZXZpIE1hbmRpcmkuXG4vLyBQdWJsaWMgZG9tYWluLlxuLy9cbi8vIEltcGxlbWVudGF0aW9uIGRlcml2ZWQgZnJvbSBUd2VldE5hQ2wgdmVyc2lvbiAyMDE0MDQyNy5cbi8vIFNlZSBmb3IgZGV0YWlsczogaHR0cDovL3R3ZWV0bmFjbC5jci55cC50by9cblxudmFyIGdmID0gZnVuY3Rpb24oaW5pdCkge1xuICB2YXIgaSwgciA9IG5ldyBGbG9hdDY0QXJyYXkoMTYpO1xuICBpZiAoaW5pdCkgZm9yIChpID0gMDsgaSA8IGluaXQubGVuZ3RoOyBpKyspIHJbaV0gPSBpbml0W2ldO1xuICByZXR1cm4gcjtcbn07XG5cbi8vICBQbHVnZ2FibGUsIGluaXRpYWxpemVkIGluIGhpZ2gtbGV2ZWwgQVBJIGJlbG93LlxudmFyIHJhbmRvbWJ5dGVzID0gZnVuY3Rpb24oLyogeCwgbiAqLykgeyB0aHJvdyBuZXcgRXJyb3IoJ25vIFBSTkcnKTsgfTtcblxudmFyIF8wID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xudmFyIF85ID0gbmV3IFVpbnQ4QXJyYXkoMzIpOyBfOVswXSA9IDk7XG5cbnZhciBnZjAgPSBnZigpLFxuICAgIGdmMSA9IGdmKFsxXSksXG4gICAgXzEyMTY2NSA9IGdmKFsweGRiNDEsIDFdKSxcbiAgICBEID0gZ2YoWzB4NzhhMywgMHgxMzU5LCAweDRkY2EsIDB4NzVlYiwgMHhkOGFiLCAweDQxNDEsIDB4MGE0ZCwgMHgwMDcwLCAweGU4OTgsIDB4Nzc3OSwgMHg0MDc5LCAweDhjYzcsIDB4ZmU3MywgMHgyYjZmLCAweDZjZWUsIDB4NTIwM10pLFxuICAgIEQyID0gZ2YoWzB4ZjE1OSwgMHgyNmIyLCAweDliOTQsIDB4ZWJkNiwgMHhiMTU2LCAweDgyODMsIDB4MTQ5YSwgMHgwMGUwLCAweGQxMzAsIDB4ZWVmMywgMHg4MGYyLCAweDE5OGUsIDB4ZmNlNywgMHg1NmRmLCAweGQ5ZGMsIDB4MjQwNl0pLFxuICAgIFggPSBnZihbMHhkNTFhLCAweDhmMjUsIDB4MmQ2MCwgMHhjOTU2LCAweGE3YjIsIDB4OTUyNSwgMHhjNzYwLCAweDY5MmMsIDB4ZGM1YywgMHhmZGQ2LCAweGUyMzEsIDB4YzBhNCwgMHg1M2ZlLCAweGNkNmUsIDB4MzZkMywgMHgyMTY5XSksXG4gICAgWSA9IGdmKFsweDY2NTgsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjZdKSxcbiAgICBJID0gZ2YoWzB4YTBiMCwgMHg0YTBlLCAweDFiMjcsIDB4YzRlZSwgMHhlNDc4LCAweGFkMmYsIDB4MTgwNiwgMHgyZjQzLCAweGQ3YTcsIDB4M2RmYiwgMHgwMDk5LCAweDJiNGQsIDB4ZGYwYiwgMHg0ZmMxLCAweDI0ODAsIDB4MmI4M10pO1xuXG5mdW5jdGlvbiB0czY0KHgsIGksIGgsIGwpIHtcbiAgeFtpXSAgID0gKGggPj4gMjQpICYgMHhmZjtcbiAgeFtpKzFdID0gKGggPj4gMTYpICYgMHhmZjtcbiAgeFtpKzJdID0gKGggPj4gIDgpICYgMHhmZjtcbiAgeFtpKzNdID0gaCAmIDB4ZmY7XG4gIHhbaSs0XSA9IChsID4+IDI0KSAgJiAweGZmO1xuICB4W2krNV0gPSAobCA+PiAxNikgICYgMHhmZjtcbiAgeFtpKzZdID0gKGwgPj4gIDgpICAmIDB4ZmY7XG4gIHhbaSs3XSA9IGwgJiAweGZmO1xufVxuXG5mdW5jdGlvbiB2bih4LCB4aSwgeSwgeWksIG4pIHtcbiAgdmFyIGksZCA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIGQgfD0geFt4aStpXV55W3lpK2ldO1xuICByZXR1cm4gKDEgJiAoKGQgLSAxKSA+Pj4gOCkpIC0gMTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3ZlcmlmeV8xNih4LCB4aSwgeSwgeWkpIHtcbiAgcmV0dXJuIHZuKHgseGkseSx5aSwxNik7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b192ZXJpZnlfMzIoeCwgeGksIHksIHlpKSB7XG4gIHJldHVybiB2bih4LHhpLHkseWksMzIpO1xufVxuXG5mdW5jdGlvbiBjb3JlX3NhbHNhMjAobywgcCwgaywgYykge1xuICB2YXIgajAgID0gY1sgMF0gJiAweGZmIHwgKGNbIDFdICYgMHhmZik8PDggfCAoY1sgMl0gJiAweGZmKTw8MTYgfCAoY1sgM10gJiAweGZmKTw8MjQsXG4gICAgICBqMSAgPSBrWyAwXSAmIDB4ZmYgfCAoa1sgMV0gJiAweGZmKTw8OCB8IChrWyAyXSAmIDB4ZmYpPDwxNiB8IChrWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoyICA9IGtbIDRdICYgMHhmZiB8IChrWyA1XSAmIDB4ZmYpPDw4IHwgKGtbIDZdICYgMHhmZik8PDE2IHwgKGtbIDddICYgMHhmZik8PDI0LFxuICAgICAgajMgID0ga1sgOF0gJiAweGZmIHwgKGtbIDldICYgMHhmZik8PDggfCAoa1sxMF0gJiAweGZmKTw8MTYgfCAoa1sxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqNCAgPSBrWzEyXSAmIDB4ZmYgfCAoa1sxM10gJiAweGZmKTw8OCB8IChrWzE0XSAmIDB4ZmYpPDwxNiB8IChrWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo1ICA9IGNbIDRdICYgMHhmZiB8IChjWyA1XSAmIDB4ZmYpPDw4IHwgKGNbIDZdICYgMHhmZik8PDE2IHwgKGNbIDddICYgMHhmZik8PDI0LFxuICAgICAgajYgID0gcFsgMF0gJiAweGZmIHwgKHBbIDFdICYgMHhmZik8PDggfCAocFsgMl0gJiAweGZmKTw8MTYgfCAocFsgM10gJiAweGZmKTw8MjQsXG4gICAgICBqNyAgPSBwWyA0XSAmIDB4ZmYgfCAocFsgNV0gJiAweGZmKTw8OCB8IChwWyA2XSAmIDB4ZmYpPDwxNiB8IChwWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo4ICA9IHBbIDhdICYgMHhmZiB8IChwWyA5XSAmIDB4ZmYpPDw4IHwgKHBbMTBdICYgMHhmZik8PDE2IHwgKHBbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajkgID0gcFsxMl0gJiAweGZmIHwgKHBbMTNdICYgMHhmZik8PDggfCAocFsxNF0gJiAweGZmKTw8MTYgfCAocFsxNV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTAgPSBjWyA4XSAmIDB4ZmYgfCAoY1sgOV0gJiAweGZmKTw8OCB8IChjWzEwXSAmIDB4ZmYpPDwxNiB8IChjWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMSA9IGtbMTZdICYgMHhmZiB8IChrWzE3XSAmIDB4ZmYpPDw4IHwgKGtbMThdICYgMHhmZik8PDE2IHwgKGtbMTldICYgMHhmZik8PDI0LFxuICAgICAgajEyID0ga1syMF0gJiAweGZmIHwgKGtbMjFdICYgMHhmZik8PDggfCAoa1syMl0gJiAweGZmKTw8MTYgfCAoa1syM10gJiAweGZmKTw8MjQsXG4gICAgICBqMTMgPSBrWzI0XSAmIDB4ZmYgfCAoa1syNV0gJiAweGZmKTw8OCB8IChrWzI2XSAmIDB4ZmYpPDwxNiB8IChrWzI3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxNCA9IGtbMjhdICYgMHhmZiB8IChrWzI5XSAmIDB4ZmYpPDw4IHwgKGtbMzBdICYgMHhmZik8PDE2IHwgKGtbMzFdICYgMHhmZik8PDI0LFxuICAgICAgajE1ID0gY1sxMl0gJiAweGZmIHwgKGNbMTNdICYgMHhmZik8PDggfCAoY1sxNF0gJiAweGZmKTw8MTYgfCAoY1sxNV0gJiAweGZmKTw8MjQ7XG5cbiAgdmFyIHgwID0gajAsIHgxID0gajEsIHgyID0gajIsIHgzID0gajMsIHg0ID0gajQsIHg1ID0gajUsIHg2ID0gajYsIHg3ID0gajcsXG4gICAgICB4OCA9IGo4LCB4OSA9IGo5LCB4MTAgPSBqMTAsIHgxMSA9IGoxMSwgeDEyID0gajEyLCB4MTMgPSBqMTMsIHgxNCA9IGoxNCxcbiAgICAgIHgxNSA9IGoxNSwgdTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpICs9IDIpIHtcbiAgICB1ID0geDAgKyB4MTIgfCAwO1xuICAgIHg0IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NCArIHgwIHwgMDtcbiAgICB4OCBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDggKyB4NCB8IDA7XG4gICAgeDEyIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxMiArIHg4IHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDEgfCAwO1xuICAgIHg5IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4OSArIHg1IHwgMDtcbiAgICB4MTMgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgxMyArIHg5IHwgMDtcbiAgICB4MSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MSArIHgxMyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4NiB8IDA7XG4gICAgeDE0IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTQgKyB4MTAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxNCB8IDA7XG4gICAgeDYgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDYgKyB4MiB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDExIHwgMDtcbiAgICB4MyBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDMgKyB4MTUgfCAwO1xuICAgIHg3IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4NyArIHgzIHwgMDtcbiAgICB4MTEgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDExICsgeDcgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgwICsgeDMgfCAwO1xuICAgIHgxIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MSArIHgwIHwgMDtcbiAgICB4MiBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDIgKyB4MSB8IDA7XG4gICAgeDMgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDMgKyB4MiB8IDA7XG4gICAgeDAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4NSArIHg0IHwgMDtcbiAgICB4NiBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDYgKyB4NSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDYgfCAwO1xuICAgIHg0IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg0ICsgeDcgfCAwO1xuICAgIHg1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDEwICsgeDkgfCAwO1xuICAgIHgxMSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDExICsgeDEwIHwgMDtcbiAgICB4OCBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDggKyB4MTEgfCAwO1xuICAgIHg5IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg5ICsgeDggfCAwO1xuICAgIHgxMCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxNSArIHgxNCB8IDA7XG4gICAgeDEyIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTIgKyB4MTUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDEyIHwgMDtcbiAgICB4MTQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDE0ICsgeDEzIHwgMDtcbiAgICB4MTUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcbiAgfVxuICAgeDAgPSAgeDAgKyAgajAgfCAwO1xuICAgeDEgPSAgeDEgKyAgajEgfCAwO1xuICAgeDIgPSAgeDIgKyAgajIgfCAwO1xuICAgeDMgPSAgeDMgKyAgajMgfCAwO1xuICAgeDQgPSAgeDQgKyAgajQgfCAwO1xuICAgeDUgPSAgeDUgKyAgajUgfCAwO1xuICAgeDYgPSAgeDYgKyAgajYgfCAwO1xuICAgeDcgPSAgeDcgKyAgajcgfCAwO1xuICAgeDggPSAgeDggKyAgajggfCAwO1xuICAgeDkgPSAgeDkgKyAgajkgfCAwO1xuICB4MTAgPSB4MTAgKyBqMTAgfCAwO1xuICB4MTEgPSB4MTEgKyBqMTEgfCAwO1xuICB4MTIgPSB4MTIgKyBqMTIgfCAwO1xuICB4MTMgPSB4MTMgKyBqMTMgfCAwO1xuICB4MTQgPSB4MTQgKyBqMTQgfCAwO1xuICB4MTUgPSB4MTUgKyBqMTUgfCAwO1xuXG4gIG9bIDBdID0geDAgPj4+ICAwICYgMHhmZjtcbiAgb1sgMV0gPSB4MCA+Pj4gIDggJiAweGZmO1xuICBvWyAyXSA9IHgwID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDNdID0geDAgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA0XSA9IHgxID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDVdID0geDEgPj4+ICA4ICYgMHhmZjtcbiAgb1sgNl0gPSB4MSA+Pj4gMTYgJiAweGZmO1xuICBvWyA3XSA9IHgxID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sgOF0gPSB4MiA+Pj4gIDAgJiAweGZmO1xuICBvWyA5XSA9IHgyID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTBdID0geDIgPj4+IDE2ICYgMHhmZjtcbiAgb1sxMV0gPSB4MiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTJdID0geDMgPj4+ICAwICYgMHhmZjtcbiAgb1sxM10gPSB4MyA+Pj4gIDggJiAweGZmO1xuICBvWzE0XSA9IHgzID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTVdID0geDMgPj4+IDI0ICYgMHhmZjtcblxuICBvWzE2XSA9IHg0ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTddID0geDQgPj4+ICA4ICYgMHhmZjtcbiAgb1sxOF0gPSB4NCA+Pj4gMTYgJiAweGZmO1xuICBvWzE5XSA9IHg0ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syMF0gPSB4NSA+Pj4gIDAgJiAweGZmO1xuICBvWzIxXSA9IHg1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjJdID0geDUgPj4+IDE2ICYgMHhmZjtcbiAgb1syM10gPSB4NSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjRdID0geDYgPj4+ICAwICYgMHhmZjtcbiAgb1syNV0gPSB4NiA+Pj4gIDggJiAweGZmO1xuICBvWzI2XSA9IHg2ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjddID0geDYgPj4+IDI0ICYgMHhmZjtcblxuICBvWzI4XSA9IHg3ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjldID0geDcgPj4+ICA4ICYgMHhmZjtcbiAgb1szMF0gPSB4NyA+Pj4gMTYgJiAweGZmO1xuICBvWzMxXSA9IHg3ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1szMl0gPSB4OCA+Pj4gIDAgJiAweGZmO1xuICBvWzMzXSA9IHg4ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzRdID0geDggPj4+IDE2ICYgMHhmZjtcbiAgb1szNV0gPSB4OCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMzZdID0geDkgPj4+ICAwICYgMHhmZjtcbiAgb1szN10gPSB4OSA+Pj4gIDggJiAweGZmO1xuICBvWzM4XSA9IHg5ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMzldID0geDkgPj4+IDI0ICYgMHhmZjtcblxuICBvWzQwXSA9IHgxMCA+Pj4gIDAgJiAweGZmO1xuICBvWzQxXSA9IHgxMCA+Pj4gIDggJiAweGZmO1xuICBvWzQyXSA9IHgxMCA+Pj4gMTYgJiAweGZmO1xuICBvWzQzXSA9IHgxMCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNDRdID0geDExID4+PiAgMCAmIDB4ZmY7XG4gIG9bNDVdID0geDExID4+PiAgOCAmIDB4ZmY7XG4gIG9bNDZdID0geDExID4+PiAxNiAmIDB4ZmY7XG4gIG9bNDddID0geDExID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s0OF0gPSB4MTIgPj4+ICAwICYgMHhmZjtcbiAgb1s0OV0gPSB4MTIgPj4+ICA4ICYgMHhmZjtcbiAgb1s1MF0gPSB4MTIgPj4+IDE2ICYgMHhmZjtcbiAgb1s1MV0gPSB4MTIgPj4+IDI0ICYgMHhmZjtcblxuICBvWzUyXSA9IHgxMyA+Pj4gIDAgJiAweGZmO1xuICBvWzUzXSA9IHgxMyA+Pj4gIDggJiAweGZmO1xuICBvWzU0XSA9IHgxMyA+Pj4gMTYgJiAweGZmO1xuICBvWzU1XSA9IHgxMyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNTZdID0geDE0ID4+PiAgMCAmIDB4ZmY7XG4gIG9bNTddID0geDE0ID4+PiAgOCAmIDB4ZmY7XG4gIG9bNThdID0geDE0ID4+PiAxNiAmIDB4ZmY7XG4gIG9bNTldID0geDE0ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s2MF0gPSB4MTUgPj4+ICAwICYgMHhmZjtcbiAgb1s2MV0gPSB4MTUgPj4+ICA4ICYgMHhmZjtcbiAgb1s2Ml0gPSB4MTUgPj4+IDE2ICYgMHhmZjtcbiAgb1s2M10gPSB4MTUgPj4+IDI0ICYgMHhmZjtcbn1cblxuZnVuY3Rpb24gY29yZV9oc2Fsc2EyMChvLHAsayxjKSB7XG4gIHZhciBqMCAgPSBjWyAwXSAmIDB4ZmYgfCAoY1sgMV0gJiAweGZmKTw8OCB8IChjWyAyXSAmIDB4ZmYpPDwxNiB8IChjWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxICA9IGtbIDBdICYgMHhmZiB8IChrWyAxXSAmIDB4ZmYpPDw4IHwgKGtbIDJdICYgMHhmZik8PDE2IHwgKGtbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajIgID0ga1sgNF0gJiAweGZmIHwgKGtbIDVdICYgMHhmZik8PDggfCAoa1sgNl0gJiAweGZmKTw8MTYgfCAoa1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqMyAgPSBrWyA4XSAmIDB4ZmYgfCAoa1sgOV0gJiAweGZmKTw8OCB8IChrWzEwXSAmIDB4ZmYpPDwxNiB8IChrWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo0ICA9IGtbMTJdICYgMHhmZiB8IChrWzEzXSAmIDB4ZmYpPDw4IHwgKGtbMTRdICYgMHhmZik8PDE2IHwgKGtbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajUgID0gY1sgNF0gJiAweGZmIHwgKGNbIDVdICYgMHhmZik8PDggfCAoY1sgNl0gJiAweGZmKTw8MTYgfCAoY1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqNiAgPSBwWyAwXSAmIDB4ZmYgfCAocFsgMV0gJiAweGZmKTw8OCB8IChwWyAyXSAmIDB4ZmYpPDwxNiB8IChwWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo3ICA9IHBbIDRdICYgMHhmZiB8IChwWyA1XSAmIDB4ZmYpPDw4IHwgKHBbIDZdICYgMHhmZik8PDE2IHwgKHBbIDddICYgMHhmZik8PDI0LFxuICAgICAgajggID0gcFsgOF0gJiAweGZmIHwgKHBbIDldICYgMHhmZik8PDggfCAocFsxMF0gJiAweGZmKTw8MTYgfCAocFsxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqOSAgPSBwWzEyXSAmIDB4ZmYgfCAocFsxM10gJiAweGZmKTw8OCB8IChwWzE0XSAmIDB4ZmYpPDwxNiB8IChwWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMCA9IGNbIDhdICYgMHhmZiB8IChjWyA5XSAmIDB4ZmYpPDw4IHwgKGNbMTBdICYgMHhmZik8PDE2IHwgKGNbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajExID0ga1sxNl0gJiAweGZmIHwgKGtbMTddICYgMHhmZik8PDggfCAoa1sxOF0gJiAweGZmKTw8MTYgfCAoa1sxOV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTIgPSBrWzIwXSAmIDB4ZmYgfCAoa1syMV0gJiAweGZmKTw8OCB8IChrWzIyXSAmIDB4ZmYpPDwxNiB8IChrWzIzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMyA9IGtbMjRdICYgMHhmZiB8IChrWzI1XSAmIDB4ZmYpPDw4IHwgKGtbMjZdICYgMHhmZik8PDE2IHwgKGtbMjddICYgMHhmZik8PDI0LFxuICAgICAgajE0ID0ga1syOF0gJiAweGZmIHwgKGtbMjldICYgMHhmZik8PDggfCAoa1szMF0gJiAweGZmKTw8MTYgfCAoa1szMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTUgPSBjWzEyXSAmIDB4ZmYgfCAoY1sxM10gJiAweGZmKTw8OCB8IChjWzE0XSAmIDB4ZmYpPDwxNiB8IChjWzE1XSAmIDB4ZmYpPDwyNDtcblxuICB2YXIgeDAgPSBqMCwgeDEgPSBqMSwgeDIgPSBqMiwgeDMgPSBqMywgeDQgPSBqNCwgeDUgPSBqNSwgeDYgPSBqNiwgeDcgPSBqNyxcbiAgICAgIHg4ID0gajgsIHg5ID0gajksIHgxMCA9IGoxMCwgeDExID0gajExLCB4MTIgPSBqMTIsIHgxMyA9IGoxMywgeDE0ID0gajE0LFxuICAgICAgeDE1ID0gajE1LCB1O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkgKz0gMikge1xuICAgIHUgPSB4MCArIHgxMiB8IDA7XG4gICAgeDQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg0ICsgeDAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHg0IHwgMDtcbiAgICB4MTIgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEyICsgeDggfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4MSB8IDA7XG4gICAgeDkgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg5ICsgeDUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDkgfCAwO1xuICAgIHgxIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxICsgeDEzIHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg2IHwgMDtcbiAgICB4MTQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxNCArIHgxMCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDE0IHwgMDtcbiAgICB4NiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NiArIHgyIHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTEgfCAwO1xuICAgIHgzIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MyArIHgxNSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDMgfCAwO1xuICAgIHgxMSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTEgKyB4NyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDAgKyB4MyB8IDA7XG4gICAgeDEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxICsgeDAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxIHwgMDtcbiAgICB4MyBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MyArIHgyIHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDQgfCAwO1xuICAgIHg2IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NiArIHg1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4NiB8IDA7XG4gICAgeDQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDQgKyB4NyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4OSB8IDA7XG4gICAgeDExIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTEgKyB4MTAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHgxMSB8IDA7XG4gICAgeDkgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDkgKyB4OCB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDE0IHwgMDtcbiAgICB4MTIgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMiArIHgxNSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4MTIgfCAwO1xuICAgIHgxNCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTQgKyB4MTMgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuICB9XG5cbiAgb1sgMF0gPSB4MCA+Pj4gIDAgJiAweGZmO1xuICBvWyAxXSA9IHgwID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDJdID0geDAgPj4+IDE2ICYgMHhmZjtcbiAgb1sgM10gPSB4MCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDRdID0geDUgPj4+ICAwICYgMHhmZjtcbiAgb1sgNV0gPSB4NSA+Pj4gIDggJiAweGZmO1xuICBvWyA2XSA9IHg1ID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDddID0geDUgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA4XSA9IHgxMCA+Pj4gIDAgJiAweGZmO1xuICBvWyA5XSA9IHgxMCA+Pj4gIDggJiAweGZmO1xuICBvWzEwXSA9IHgxMCA+Pj4gMTYgJiAweGZmO1xuICBvWzExXSA9IHgxMCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTJdID0geDE1ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTNdID0geDE1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTRdID0geDE1ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTVdID0geDE1ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxNl0gPSB4NiA+Pj4gIDAgJiAweGZmO1xuICBvWzE3XSA9IHg2ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMThdID0geDYgPj4+IDE2ICYgMHhmZjtcbiAgb1sxOV0gPSB4NiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjBdID0geDcgPj4+ICAwICYgMHhmZjtcbiAgb1syMV0gPSB4NyA+Pj4gIDggJiAweGZmO1xuICBvWzIyXSA9IHg3ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjNdID0geDcgPj4+IDI0ICYgMHhmZjtcblxuICBvWzI0XSA9IHg4ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjVdID0geDggPj4+ICA4ICYgMHhmZjtcbiAgb1syNl0gPSB4OCA+Pj4gMTYgJiAweGZmO1xuICBvWzI3XSA9IHg4ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syOF0gPSB4OSA+Pj4gIDAgJiAweGZmO1xuICBvWzI5XSA9IHg5ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzBdID0geDkgPj4+IDE2ICYgMHhmZjtcbiAgb1szMV0gPSB4OSA+Pj4gMjQgJiAweGZmO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fY29yZV9zYWxzYTIwKG91dCxpbnAsayxjKSB7XG4gIGNvcmVfc2Fsc2EyMChvdXQsaW5wLGssYyk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19jb3JlX2hzYWxzYTIwKG91dCxpbnAsayxjKSB7XG4gIGNvcmVfaHNhbHNhMjAob3V0LGlucCxrLGMpO1xufVxuXG52YXIgc2lnbWEgPSBuZXcgVWludDhBcnJheShbMTAxLCAxMjAsIDExMiwgOTcsIDExMCwgMTAwLCAzMiwgNTEsIDUwLCA0NSwgOTgsIDEyMSwgMTE2LCAxMDEsIDMyLCAxMDddKTtcbiAgICAgICAgICAgIC8vIFwiZXhwYW5kIDMyLWJ5dGUga1wiXG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3IoYyxjcG9zLG0sbXBvcyxiLG4saykge1xuICB2YXIgeiA9IG5ldyBVaW50OEFycmF5KDE2KSwgeCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHUsIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB6W2ldID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeltpXSA9IG5baV07XG4gIHdoaWxlIChiID49IDY0KSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIGNbY3BvcytpXSA9IG1bbXBvcytpXSBeIHhbaV07XG4gICAgdSA9IDE7XG4gICAgZm9yIChpID0gODsgaSA8IDE2OyBpKyspIHtcbiAgICAgIHUgPSB1ICsgKHpbaV0gJiAweGZmKSB8IDA7XG4gICAgICB6W2ldID0gdSAmIDB4ZmY7XG4gICAgICB1ID4+Pj0gODtcbiAgICB9XG4gICAgYiAtPSA2NDtcbiAgICBjcG9zICs9IDY0O1xuICAgIG1wb3MgKz0gNjQ7XG4gIH1cbiAgaWYgKGIgPiAwKSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IGI7IGkrKykgY1tjcG9zK2ldID0gbVttcG9zK2ldIF4geFtpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbV9zYWxzYTIwKGMsY3BvcyxiLG4saykge1xuICB2YXIgeiA9IG5ldyBVaW50OEFycmF5KDE2KSwgeCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHUsIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB6W2ldID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeltpXSA9IG5baV07XG4gIHdoaWxlIChiID49IDY0KSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIGNbY3BvcytpXSA9IHhbaV07XG4gICAgdSA9IDE7XG4gICAgZm9yIChpID0gODsgaSA8IDE2OyBpKyspIHtcbiAgICAgIHUgPSB1ICsgKHpbaV0gJiAweGZmKSB8IDA7XG4gICAgICB6W2ldID0gdSAmIDB4ZmY7XG4gICAgICB1ID4+Pj0gODtcbiAgICB9XG4gICAgYiAtPSA2NDtcbiAgICBjcG9zICs9IDY0O1xuICB9XG4gIGlmIChiID4gMCkge1xuICAgIGNyeXB0b19jb3JlX3NhbHNhMjAoeCx6LGssc2lnbWEpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBiOyBpKyspIGNbY3BvcytpXSA9IHhbaV07XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW0oYyxjcG9zLGQsbixrKSB7XG4gIHZhciBzID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fY29yZV9oc2Fsc2EyMChzLG4sayxzaWdtYSk7XG4gIHZhciBzbiA9IG5ldyBVaW50OEFycmF5KDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgc25baV0gPSBuW2krMTZdO1xuICByZXR1cm4gY3J5cHRvX3N0cmVhbV9zYWxzYTIwKGMsY3BvcyxkLHNuLHMpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc3RyZWFtX3hvcihjLGNwb3MsbSxtcG9zLGQsbixrKSB7XG4gIHZhciBzID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fY29yZV9oc2Fsc2EyMChzLG4sayxzaWdtYSk7XG4gIHZhciBzbiA9IG5ldyBVaW50OEFycmF5KDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgc25baV0gPSBuW2krMTZdO1xuICByZXR1cm4gY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcihjLGNwb3MsbSxtcG9zLGQsc24scyk7XG59XG5cbi8qXG4qIFBvcnQgb2YgQW5kcmV3IE1vb24ncyBQb2x5MTMwNS1kb25uYS0xNi4gUHVibGljIGRvbWFpbi5cbiogaHR0cHM6Ly9naXRodWIuY29tL2Zsb29keWJlcnJ5L3BvbHkxMzA1LWRvbm5hXG4qL1xuXG52YXIgcG9seTEzMDUgPSBmdW5jdGlvbihrZXkpIHtcbiAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIHRoaXMuciA9IG5ldyBVaW50MTZBcnJheSgxMCk7XG4gIHRoaXMuaCA9IG5ldyBVaW50MTZBcnJheSgxMCk7XG4gIHRoaXMucGFkID0gbmV3IFVpbnQxNkFycmF5KDgpO1xuICB0aGlzLmxlZnRvdmVyID0gMDtcbiAgdGhpcy5maW4gPSAwO1xuXG4gIHZhciB0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDc7XG5cbiAgdDAgPSBrZXlbIDBdICYgMHhmZiB8IChrZXlbIDFdICYgMHhmZikgPDwgODsgdGhpcy5yWzBdID0gKCB0MCAgICAgICAgICAgICAgICAgICAgICkgJiAweDFmZmY7XG4gIHQxID0ga2V5WyAyXSAmIDB4ZmYgfCAoa2V5WyAzXSAmIDB4ZmYpIDw8IDg7IHRoaXMuclsxXSA9ICgodDAgPj4+IDEzKSB8ICh0MSA8PCAgMykpICYgMHgxZmZmO1xuICB0MiA9IGtleVsgNF0gJiAweGZmIHwgKGtleVsgNV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbMl0gPSAoKHQxID4+PiAxMCkgfCAodDIgPDwgIDYpKSAmIDB4MWYwMztcbiAgdDMgPSBrZXlbIDZdICYgMHhmZiB8IChrZXlbIDddICYgMHhmZikgPDwgODsgdGhpcy5yWzNdID0gKCh0MiA+Pj4gIDcpIHwgKHQzIDw8ICA5KSkgJiAweDFmZmY7XG4gIHQ0ID0ga2V5WyA4XSAmIDB4ZmYgfCAoa2V5WyA5XSAmIDB4ZmYpIDw8IDg7IHRoaXMucls0XSA9ICgodDMgPj4+ICA0KSB8ICh0NCA8PCAxMikpICYgMHgwMGZmO1xuICB0aGlzLnJbNV0gPSAoKHQ0ID4+PiAgMSkpICYgMHgxZmZlO1xuICB0NSA9IGtleVsxMF0gJiAweGZmIHwgKGtleVsxMV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbNl0gPSAoKHQ0ID4+PiAxNCkgfCAodDUgPDwgIDIpKSAmIDB4MWZmZjtcbiAgdDYgPSBrZXlbMTJdICYgMHhmZiB8IChrZXlbMTNdICYgMHhmZikgPDwgODsgdGhpcy5yWzddID0gKCh0NSA+Pj4gMTEpIHwgKHQ2IDw8ICA1KSkgJiAweDFmODE7XG4gIHQ3ID0ga2V5WzE0XSAmIDB4ZmYgfCAoa2V5WzE1XSAmIDB4ZmYpIDw8IDg7IHRoaXMucls4XSA9ICgodDYgPj4+ICA4KSB8ICh0NyA8PCAgOCkpICYgMHgxZmZmO1xuICB0aGlzLnJbOV0gPSAoKHQ3ID4+PiAgNSkpICYgMHgwMDdmO1xuXG4gIHRoaXMucGFkWzBdID0ga2V5WzE2XSAmIDB4ZmYgfCAoa2V5WzE3XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzFdID0ga2V5WzE4XSAmIDB4ZmYgfCAoa2V5WzE5XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzJdID0ga2V5WzIwXSAmIDB4ZmYgfCAoa2V5WzIxXSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzNdID0ga2V5WzIyXSAmIDB4ZmYgfCAoa2V5WzIzXSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzRdID0ga2V5WzI0XSAmIDB4ZmYgfCAoa2V5WzI1XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzVdID0ga2V5WzI2XSAmIDB4ZmYgfCAoa2V5WzI3XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzZdID0ga2V5WzI4XSAmIDB4ZmYgfCAoa2V5WzI5XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzddID0ga2V5WzMwXSAmIDB4ZmYgfCAoa2V5WzMxXSAmIDB4ZmYpIDw8IDg7XG59O1xuXG5wb2x5MTMwNS5wcm90b3R5cGUuYmxvY2tzID0gZnVuY3Rpb24obSwgbXBvcywgYnl0ZXMpIHtcbiAgdmFyIGhpYml0ID0gdGhpcy5maW4gPyAwIDogKDEgPDwgMTEpO1xuICB2YXIgdDAsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCBjO1xuICB2YXIgZDAsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3LCBkOCwgZDk7XG5cbiAgdmFyIGgwID0gdGhpcy5oWzBdLFxuICAgICAgaDEgPSB0aGlzLmhbMV0sXG4gICAgICBoMiA9IHRoaXMuaFsyXSxcbiAgICAgIGgzID0gdGhpcy5oWzNdLFxuICAgICAgaDQgPSB0aGlzLmhbNF0sXG4gICAgICBoNSA9IHRoaXMuaFs1XSxcbiAgICAgIGg2ID0gdGhpcy5oWzZdLFxuICAgICAgaDcgPSB0aGlzLmhbN10sXG4gICAgICBoOCA9IHRoaXMuaFs4XSxcbiAgICAgIGg5ID0gdGhpcy5oWzldO1xuXG4gIHZhciByMCA9IHRoaXMuclswXSxcbiAgICAgIHIxID0gdGhpcy5yWzFdLFxuICAgICAgcjIgPSB0aGlzLnJbMl0sXG4gICAgICByMyA9IHRoaXMuclszXSxcbiAgICAgIHI0ID0gdGhpcy5yWzRdLFxuICAgICAgcjUgPSB0aGlzLnJbNV0sXG4gICAgICByNiA9IHRoaXMucls2XSxcbiAgICAgIHI3ID0gdGhpcy5yWzddLFxuICAgICAgcjggPSB0aGlzLnJbOF0sXG4gICAgICByOSA9IHRoaXMucls5XTtcblxuICB3aGlsZSAoYnl0ZXMgPj0gMTYpIHtcbiAgICB0MCA9IG1bbXBvcysgMF0gJiAweGZmIHwgKG1bbXBvcysgMV0gJiAweGZmKSA8PCA4OyBoMCArPSAoIHQwICAgICAgICAgICAgICAgICAgICAgKSAmIDB4MWZmZjtcbiAgICB0MSA9IG1bbXBvcysgMl0gJiAweGZmIHwgKG1bbXBvcysgM10gJiAweGZmKSA8PCA4OyBoMSArPSAoKHQwID4+PiAxMykgfCAodDEgPDwgIDMpKSAmIDB4MWZmZjtcbiAgICB0MiA9IG1bbXBvcysgNF0gJiAweGZmIHwgKG1bbXBvcysgNV0gJiAweGZmKSA8PCA4OyBoMiArPSAoKHQxID4+PiAxMCkgfCAodDIgPDwgIDYpKSAmIDB4MWZmZjtcbiAgICB0MyA9IG1bbXBvcysgNl0gJiAweGZmIHwgKG1bbXBvcysgN10gJiAweGZmKSA8PCA4OyBoMyArPSAoKHQyID4+PiAgNykgfCAodDMgPDwgIDkpKSAmIDB4MWZmZjtcbiAgICB0NCA9IG1bbXBvcysgOF0gJiAweGZmIHwgKG1bbXBvcysgOV0gJiAweGZmKSA8PCA4OyBoNCArPSAoKHQzID4+PiAgNCkgfCAodDQgPDwgMTIpKSAmIDB4MWZmZjtcbiAgICBoNSArPSAoKHQ0ID4+PiAgMSkpICYgMHgxZmZmO1xuICAgIHQ1ID0gbVttcG9zKzEwXSAmIDB4ZmYgfCAobVttcG9zKzExXSAmIDB4ZmYpIDw8IDg7IGg2ICs9ICgodDQgPj4+IDE0KSB8ICh0NSA8PCAgMikpICYgMHgxZmZmO1xuICAgIHQ2ID0gbVttcG9zKzEyXSAmIDB4ZmYgfCAobVttcG9zKzEzXSAmIDB4ZmYpIDw8IDg7IGg3ICs9ICgodDUgPj4+IDExKSB8ICh0NiA8PCAgNSkpICYgMHgxZmZmO1xuICAgIHQ3ID0gbVttcG9zKzE0XSAmIDB4ZmYgfCAobVttcG9zKzE1XSAmIDB4ZmYpIDw8IDg7IGg4ICs9ICgodDYgPj4+ICA4KSB8ICh0NyA8PCAgOCkpICYgMHgxZmZmO1xuICAgIGg5ICs9ICgodDcgPj4+IDUpKSB8IGhpYml0O1xuXG4gICAgYyA9IDA7XG5cbiAgICBkMCA9IGM7XG4gICAgZDAgKz0gaDAgKiByMDtcbiAgICBkMCArPSBoMSAqICg1ICogcjkpO1xuICAgIGQwICs9IGgyICogKDUgKiByOCk7XG4gICAgZDAgKz0gaDMgKiAoNSAqIHI3KTtcbiAgICBkMCArPSBoNCAqICg1ICogcjYpO1xuICAgIGMgPSAoZDAgPj4+IDEzKTsgZDAgJj0gMHgxZmZmO1xuICAgIGQwICs9IGg1ICogKDUgKiByNSk7XG4gICAgZDAgKz0gaDYgKiAoNSAqIHI0KTtcbiAgICBkMCArPSBoNyAqICg1ICogcjMpO1xuICAgIGQwICs9IGg4ICogKDUgKiByMik7XG4gICAgZDAgKz0gaDkgKiAoNSAqIHIxKTtcbiAgICBjICs9IChkMCA+Pj4gMTMpOyBkMCAmPSAweDFmZmY7XG5cbiAgICBkMSA9IGM7XG4gICAgZDEgKz0gaDAgKiByMTtcbiAgICBkMSArPSBoMSAqIHIwO1xuICAgIGQxICs9IGgyICogKDUgKiByOSk7XG4gICAgZDEgKz0gaDMgKiAoNSAqIHI4KTtcbiAgICBkMSArPSBoNCAqICg1ICogcjcpO1xuICAgIGMgPSAoZDEgPj4+IDEzKTsgZDEgJj0gMHgxZmZmO1xuICAgIGQxICs9IGg1ICogKDUgKiByNik7XG4gICAgZDEgKz0gaDYgKiAoNSAqIHI1KTtcbiAgICBkMSArPSBoNyAqICg1ICogcjQpO1xuICAgIGQxICs9IGg4ICogKDUgKiByMyk7XG4gICAgZDEgKz0gaDkgKiAoNSAqIHIyKTtcbiAgICBjICs9IChkMSA+Pj4gMTMpOyBkMSAmPSAweDFmZmY7XG5cbiAgICBkMiA9IGM7XG4gICAgZDIgKz0gaDAgKiByMjtcbiAgICBkMiArPSBoMSAqIHIxO1xuICAgIGQyICs9IGgyICogcjA7XG4gICAgZDIgKz0gaDMgKiAoNSAqIHI5KTtcbiAgICBkMiArPSBoNCAqICg1ICogcjgpO1xuICAgIGMgPSAoZDIgPj4+IDEzKTsgZDIgJj0gMHgxZmZmO1xuICAgIGQyICs9IGg1ICogKDUgKiByNyk7XG4gICAgZDIgKz0gaDYgKiAoNSAqIHI2KTtcbiAgICBkMiArPSBoNyAqICg1ICogcjUpO1xuICAgIGQyICs9IGg4ICogKDUgKiByNCk7XG4gICAgZDIgKz0gaDkgKiAoNSAqIHIzKTtcbiAgICBjICs9IChkMiA+Pj4gMTMpOyBkMiAmPSAweDFmZmY7XG5cbiAgICBkMyA9IGM7XG4gICAgZDMgKz0gaDAgKiByMztcbiAgICBkMyArPSBoMSAqIHIyO1xuICAgIGQzICs9IGgyICogcjE7XG4gICAgZDMgKz0gaDMgKiByMDtcbiAgICBkMyArPSBoNCAqICg1ICogcjkpO1xuICAgIGMgPSAoZDMgPj4+IDEzKTsgZDMgJj0gMHgxZmZmO1xuICAgIGQzICs9IGg1ICogKDUgKiByOCk7XG4gICAgZDMgKz0gaDYgKiAoNSAqIHI3KTtcbiAgICBkMyArPSBoNyAqICg1ICogcjYpO1xuICAgIGQzICs9IGg4ICogKDUgKiByNSk7XG4gICAgZDMgKz0gaDkgKiAoNSAqIHI0KTtcbiAgICBjICs9IChkMyA+Pj4gMTMpOyBkMyAmPSAweDFmZmY7XG5cbiAgICBkNCA9IGM7XG4gICAgZDQgKz0gaDAgKiByNDtcbiAgICBkNCArPSBoMSAqIHIzO1xuICAgIGQ0ICs9IGgyICogcjI7XG4gICAgZDQgKz0gaDMgKiByMTtcbiAgICBkNCArPSBoNCAqIHIwO1xuICAgIGMgPSAoZDQgPj4+IDEzKTsgZDQgJj0gMHgxZmZmO1xuICAgIGQ0ICs9IGg1ICogKDUgKiByOSk7XG4gICAgZDQgKz0gaDYgKiAoNSAqIHI4KTtcbiAgICBkNCArPSBoNyAqICg1ICogcjcpO1xuICAgIGQ0ICs9IGg4ICogKDUgKiByNik7XG4gICAgZDQgKz0gaDkgKiAoNSAqIHI1KTtcbiAgICBjICs9IChkNCA+Pj4gMTMpOyBkNCAmPSAweDFmZmY7XG5cbiAgICBkNSA9IGM7XG4gICAgZDUgKz0gaDAgKiByNTtcbiAgICBkNSArPSBoMSAqIHI0O1xuICAgIGQ1ICs9IGgyICogcjM7XG4gICAgZDUgKz0gaDMgKiByMjtcbiAgICBkNSArPSBoNCAqIHIxO1xuICAgIGMgPSAoZDUgPj4+IDEzKTsgZDUgJj0gMHgxZmZmO1xuICAgIGQ1ICs9IGg1ICogcjA7XG4gICAgZDUgKz0gaDYgKiAoNSAqIHI5KTtcbiAgICBkNSArPSBoNyAqICg1ICogcjgpO1xuICAgIGQ1ICs9IGg4ICogKDUgKiByNyk7XG4gICAgZDUgKz0gaDkgKiAoNSAqIHI2KTtcbiAgICBjICs9IChkNSA+Pj4gMTMpOyBkNSAmPSAweDFmZmY7XG5cbiAgICBkNiA9IGM7XG4gICAgZDYgKz0gaDAgKiByNjtcbiAgICBkNiArPSBoMSAqIHI1O1xuICAgIGQ2ICs9IGgyICogcjQ7XG4gICAgZDYgKz0gaDMgKiByMztcbiAgICBkNiArPSBoNCAqIHIyO1xuICAgIGMgPSAoZDYgPj4+IDEzKTsgZDYgJj0gMHgxZmZmO1xuICAgIGQ2ICs9IGg1ICogcjE7XG4gICAgZDYgKz0gaDYgKiByMDtcbiAgICBkNiArPSBoNyAqICg1ICogcjkpO1xuICAgIGQ2ICs9IGg4ICogKDUgKiByOCk7XG4gICAgZDYgKz0gaDkgKiAoNSAqIHI3KTtcbiAgICBjICs9IChkNiA+Pj4gMTMpOyBkNiAmPSAweDFmZmY7XG5cbiAgICBkNyA9IGM7XG4gICAgZDcgKz0gaDAgKiByNztcbiAgICBkNyArPSBoMSAqIHI2O1xuICAgIGQ3ICs9IGgyICogcjU7XG4gICAgZDcgKz0gaDMgKiByNDtcbiAgICBkNyArPSBoNCAqIHIzO1xuICAgIGMgPSAoZDcgPj4+IDEzKTsgZDcgJj0gMHgxZmZmO1xuICAgIGQ3ICs9IGg1ICogcjI7XG4gICAgZDcgKz0gaDYgKiByMTtcbiAgICBkNyArPSBoNyAqIHIwO1xuICAgIGQ3ICs9IGg4ICogKDUgKiByOSk7XG4gICAgZDcgKz0gaDkgKiAoNSAqIHI4KTtcbiAgICBjICs9IChkNyA+Pj4gMTMpOyBkNyAmPSAweDFmZmY7XG5cbiAgICBkOCA9IGM7XG4gICAgZDggKz0gaDAgKiByODtcbiAgICBkOCArPSBoMSAqIHI3O1xuICAgIGQ4ICs9IGgyICogcjY7XG4gICAgZDggKz0gaDMgKiByNTtcbiAgICBkOCArPSBoNCAqIHI0O1xuICAgIGMgPSAoZDggPj4+IDEzKTsgZDggJj0gMHgxZmZmO1xuICAgIGQ4ICs9IGg1ICogcjM7XG4gICAgZDggKz0gaDYgKiByMjtcbiAgICBkOCArPSBoNyAqIHIxO1xuICAgIGQ4ICs9IGg4ICogcjA7XG4gICAgZDggKz0gaDkgKiAoNSAqIHI5KTtcbiAgICBjICs9IChkOCA+Pj4gMTMpOyBkOCAmPSAweDFmZmY7XG5cbiAgICBkOSA9IGM7XG4gICAgZDkgKz0gaDAgKiByOTtcbiAgICBkOSArPSBoMSAqIHI4O1xuICAgIGQ5ICs9IGgyICogcjc7XG4gICAgZDkgKz0gaDMgKiByNjtcbiAgICBkOSArPSBoNCAqIHI1O1xuICAgIGMgPSAoZDkgPj4+IDEzKTsgZDkgJj0gMHgxZmZmO1xuICAgIGQ5ICs9IGg1ICogcjQ7XG4gICAgZDkgKz0gaDYgKiByMztcbiAgICBkOSArPSBoNyAqIHIyO1xuICAgIGQ5ICs9IGg4ICogcjE7XG4gICAgZDkgKz0gaDkgKiByMDtcbiAgICBjICs9IChkOSA+Pj4gMTMpOyBkOSAmPSAweDFmZmY7XG5cbiAgICBjID0gKCgoYyA8PCAyKSArIGMpKSB8IDA7XG4gICAgYyA9IChjICsgZDApIHwgMDtcbiAgICBkMCA9IGMgJiAweDFmZmY7XG4gICAgYyA9IChjID4+PiAxMyk7XG4gICAgZDEgKz0gYztcblxuICAgIGgwID0gZDA7XG4gICAgaDEgPSBkMTtcbiAgICBoMiA9IGQyO1xuICAgIGgzID0gZDM7XG4gICAgaDQgPSBkNDtcbiAgICBoNSA9IGQ1O1xuICAgIGg2ID0gZDY7XG4gICAgaDcgPSBkNztcbiAgICBoOCA9IGQ4O1xuICAgIGg5ID0gZDk7XG5cbiAgICBtcG9zICs9IDE2O1xuICAgIGJ5dGVzIC09IDE2O1xuICB9XG4gIHRoaXMuaFswXSA9IGgwO1xuICB0aGlzLmhbMV0gPSBoMTtcbiAgdGhpcy5oWzJdID0gaDI7XG4gIHRoaXMuaFszXSA9IGgzO1xuICB0aGlzLmhbNF0gPSBoNDtcbiAgdGhpcy5oWzVdID0gaDU7XG4gIHRoaXMuaFs2XSA9IGg2O1xuICB0aGlzLmhbN10gPSBoNztcbiAgdGhpcy5oWzhdID0gaDg7XG4gIHRoaXMuaFs5XSA9IGg5O1xufTtcblxucG9seTEzMDUucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uKG1hYywgbWFjcG9zKSB7XG4gIHZhciBnID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdmFyIGMsIG1hc2ssIGYsIGk7XG5cbiAgaWYgKHRoaXMubGVmdG92ZXIpIHtcbiAgICBpID0gdGhpcy5sZWZ0b3ZlcjtcbiAgICB0aGlzLmJ1ZmZlcltpKytdID0gMTtcbiAgICBmb3IgKDsgaSA8IDE2OyBpKyspIHRoaXMuYnVmZmVyW2ldID0gMDtcbiAgICB0aGlzLmZpbiA9IDE7XG4gICAgdGhpcy5ibG9ja3ModGhpcy5idWZmZXIsIDAsIDE2KTtcbiAgfVxuXG4gIGMgPSB0aGlzLmhbMV0gPj4+IDEzO1xuICB0aGlzLmhbMV0gJj0gMHgxZmZmO1xuICBmb3IgKGkgPSAyOyBpIDwgMTA7IGkrKykge1xuICAgIHRoaXMuaFtpXSArPSBjO1xuICAgIGMgPSB0aGlzLmhbaV0gPj4+IDEzO1xuICAgIHRoaXMuaFtpXSAmPSAweDFmZmY7XG4gIH1cbiAgdGhpcy5oWzBdICs9IChjICogNSk7XG4gIGMgPSB0aGlzLmhbMF0gPj4+IDEzO1xuICB0aGlzLmhbMF0gJj0gMHgxZmZmO1xuICB0aGlzLmhbMV0gKz0gYztcbiAgYyA9IHRoaXMuaFsxXSA+Pj4gMTM7XG4gIHRoaXMuaFsxXSAmPSAweDFmZmY7XG4gIHRoaXMuaFsyXSArPSBjO1xuXG4gIGdbMF0gPSB0aGlzLmhbMF0gKyA1O1xuICBjID0gZ1swXSA+Pj4gMTM7XG4gIGdbMF0gJj0gMHgxZmZmO1xuICBmb3IgKGkgPSAxOyBpIDwgMTA7IGkrKykge1xuICAgIGdbaV0gPSB0aGlzLmhbaV0gKyBjO1xuICAgIGMgPSBnW2ldID4+PiAxMztcbiAgICBnW2ldICY9IDB4MWZmZjtcbiAgfVxuICBnWzldIC09ICgxIDw8IDEzKTtcblxuICBtYXNrID0gKGMgXiAxKSAtIDE7XG4gIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSBnW2ldICY9IG1hc2s7XG4gIG1hc2sgPSB+bWFzaztcbiAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHRoaXMuaFtpXSA9ICh0aGlzLmhbaV0gJiBtYXNrKSB8IGdbaV07XG5cbiAgdGhpcy5oWzBdID0gKCh0aGlzLmhbMF0gICAgICAgKSB8ICh0aGlzLmhbMV0gPDwgMTMpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbMV0gPSAoKHRoaXMuaFsxXSA+Pj4gIDMpIHwgKHRoaXMuaFsyXSA8PCAxMCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFsyXSA9ICgodGhpcy5oWzJdID4+PiAgNikgfCAodGhpcy5oWzNdIDw8ICA3KSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzNdID0gKCh0aGlzLmhbM10gPj4+ICA5KSB8ICh0aGlzLmhbNF0gPDwgIDQpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbNF0gPSAoKHRoaXMuaFs0XSA+Pj4gMTIpIHwgKHRoaXMuaFs1XSA8PCAgMSkgfCAodGhpcy5oWzZdIDw8IDE0KSkgJiAweGZmZmY7XG4gIHRoaXMuaFs1XSA9ICgodGhpcy5oWzZdID4+PiAgMikgfCAodGhpcy5oWzddIDw8IDExKSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzZdID0gKCh0aGlzLmhbN10gPj4+ICA1KSB8ICh0aGlzLmhbOF0gPDwgIDgpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbN10gPSAoKHRoaXMuaFs4XSA+Pj4gIDgpIHwgKHRoaXMuaFs5XSA8PCAgNSkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG5cbiAgZiA9IHRoaXMuaFswXSArIHRoaXMucGFkWzBdO1xuICB0aGlzLmhbMF0gPSBmICYgMHhmZmZmO1xuICBmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgZiA9ICgoKHRoaXMuaFtpXSArIHRoaXMucGFkW2ldKSB8IDApICsgKGYgPj4+IDE2KSkgfCAwO1xuICAgIHRoaXMuaFtpXSA9IGYgJiAweGZmZmY7XG4gIH1cblxuICBtYWNbbWFjcG9zKyAwXSA9ICh0aGlzLmhbMF0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgMV0gPSAodGhpcy5oWzBdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDJdID0gKHRoaXMuaFsxXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyAzXSA9ICh0aGlzLmhbMV0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgNF0gPSAodGhpcy5oWzJdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDVdID0gKHRoaXMuaFsyXSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA2XSA9ICh0aGlzLmhbM10gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgN10gPSAodGhpcy5oWzNdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDhdID0gKHRoaXMuaFs0XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA5XSA9ICh0aGlzLmhbNF0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysxMF0gPSAodGhpcy5oWzVdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTFdID0gKHRoaXMuaFs1XSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEyXSA9ICh0aGlzLmhbNl0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysxM10gPSAodGhpcy5oWzZdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTRdID0gKHRoaXMuaFs3XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzE1XSA9ICh0aGlzLmhbN10gPj4+IDgpICYgMHhmZjtcbn07XG5cbnBvbHkxMzA1LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihtLCBtcG9zLCBieXRlcykge1xuICB2YXIgaSwgd2FudDtcblxuICBpZiAodGhpcy5sZWZ0b3Zlcikge1xuICAgIHdhbnQgPSAoMTYgLSB0aGlzLmxlZnRvdmVyKTtcbiAgICBpZiAod2FudCA+IGJ5dGVzKVxuICAgICAgd2FudCA9IGJ5dGVzO1xuICAgIGZvciAoaSA9IDA7IGkgPCB3YW50OyBpKyspXG4gICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyICsgaV0gPSBtW21wb3MraV07XG4gICAgYnl0ZXMgLT0gd2FudDtcbiAgICBtcG9zICs9IHdhbnQ7XG4gICAgdGhpcy5sZWZ0b3ZlciArPSB3YW50O1xuICAgIGlmICh0aGlzLmxlZnRvdmVyIDwgMTYpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5ibG9ja3ModGhpcy5idWZmZXIsIDAsIDE2KTtcbiAgICB0aGlzLmxlZnRvdmVyID0gMDtcbiAgfVxuXG4gIGlmIChieXRlcyA+PSAxNikge1xuICAgIHdhbnQgPSBieXRlcyAtIChieXRlcyAlIDE2KTtcbiAgICB0aGlzLmJsb2NrcyhtLCBtcG9zLCB3YW50KTtcbiAgICBtcG9zICs9IHdhbnQ7XG4gICAgYnl0ZXMgLT0gd2FudDtcbiAgfVxuXG4gIGlmIChieXRlcykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBieXRlczsgaSsrKVxuICAgICAgdGhpcy5idWZmZXJbdGhpcy5sZWZ0b3ZlciArIGldID0gbVttcG9zK2ldO1xuICAgIHRoaXMubGVmdG92ZXIgKz0gYnl0ZXM7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNyeXB0b19vbmV0aW1lYXV0aChvdXQsIG91dHBvcywgbSwgbXBvcywgbiwgaykge1xuICB2YXIgcyA9IG5ldyBwb2x5MTMwNShrKTtcbiAgcy51cGRhdGUobSwgbXBvcywgbik7XG4gIHMuZmluaXNoKG91dCwgb3V0cG9zKTtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19vbmV0aW1lYXV0aF92ZXJpZnkoaCwgaHBvcywgbSwgbXBvcywgbiwgaykge1xuICB2YXIgeCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgY3J5cHRvX29uZXRpbWVhdXRoKHgsMCxtLG1wb3MsbixrKTtcbiAgcmV0dXJuIGNyeXB0b192ZXJpZnlfMTYoaCxocG9zLHgsMCk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3goYyxtLGQsbixrKSB7XG4gIHZhciBpO1xuICBpZiAoZCA8IDMyKSByZXR1cm4gLTE7XG4gIGNyeXB0b19zdHJlYW1feG9yKGMsMCxtLDAsZCxuLGspO1xuICBjcnlwdG9fb25ldGltZWF1dGgoYywgMTYsIGMsIDMyLCBkIC0gMzIsIGMpO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgY1tpXSA9IDA7XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2VjcmV0Ym94X29wZW4obSxjLGQsbixrKSB7XG4gIHZhciBpO1xuICB2YXIgeCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgaWYgKGQgPCAzMikgcmV0dXJuIC0xO1xuICBjcnlwdG9fc3RyZWFtKHgsMCwzMixuLGspO1xuICBpZiAoY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeShjLCAxNixjLCAzMixkIC0gMzIseCkgIT09IDApIHJldHVybiAtMTtcbiAgY3J5cHRvX3N0cmVhbV94b3IobSwwLGMsMCxkLG4sayk7XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBtW2ldID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIHNldDI1NTE5KHIsIGEpIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSByW2ldID0gYVtpXXwwO1xufVxuXG5mdW5jdGlvbiBjYXIyNTUxOShvKSB7XG4gIHZhciBpLCB2LCBjID0gMTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB2ID0gb1tpXSArIGMgKyA2NTUzNTtcbiAgICBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpO1xuICAgIG9baV0gPSB2IC0gYyAqIDY1NTM2O1xuICB9XG4gIG9bMF0gKz0gYy0xICsgMzcgKiAoYy0xKTtcbn1cblxuZnVuY3Rpb24gc2VsMjU1MTkocCwgcSwgYikge1xuICB2YXIgdCwgYyA9IH4oYi0xKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgdCA9IGMgJiAocFtpXSBeIHFbaV0pO1xuICAgIHBbaV0gXj0gdDtcbiAgICBxW2ldIF49IHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFjazI1NTE5KG8sIG4pIHtcbiAgdmFyIGksIGosIGI7XG4gIHZhciBtID0gZ2YoKSwgdCA9IGdmKCk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB0W2ldID0gbltpXTtcbiAgY2FyMjU1MTkodCk7XG4gIGNhcjI1NTE5KHQpO1xuICBjYXIyNTUxOSh0KTtcbiAgZm9yIChqID0gMDsgaiA8IDI7IGorKykge1xuICAgIG1bMF0gPSB0WzBdIC0gMHhmZmVkO1xuICAgIGZvciAoaSA9IDE7IGkgPCAxNTsgaSsrKSB7XG4gICAgICBtW2ldID0gdFtpXSAtIDB4ZmZmZiAtICgobVtpLTFdPj4xNikgJiAxKTtcbiAgICAgIG1baS0xXSAmPSAweGZmZmY7XG4gICAgfVxuICAgIG1bMTVdID0gdFsxNV0gLSAweDdmZmYgLSAoKG1bMTRdPj4xNikgJiAxKTtcbiAgICBiID0gKG1bMTVdPj4xNikgJiAxO1xuICAgIG1bMTRdICY9IDB4ZmZmZjtcbiAgICBzZWwyNTUxOSh0LCBtLCAxLWIpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgb1syKmldID0gdFtpXSAmIDB4ZmY7XG4gICAgb1syKmkrMV0gPSB0W2ldPj44O1xuICB9XG59XG5cbmZ1bmN0aW9uIG5lcTI1NTE5KGEsIGIpIHtcbiAgdmFyIGMgPSBuZXcgVWludDhBcnJheSgzMiksIGQgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIHBhY2syNTUxOShjLCBhKTtcbiAgcGFjazI1NTE5KGQsIGIpO1xuICByZXR1cm4gY3J5cHRvX3ZlcmlmeV8zMihjLCAwLCBkLCAwKTtcbn1cblxuZnVuY3Rpb24gcGFyMjU1MTkoYSkge1xuICB2YXIgZCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgcGFjazI1NTE5KGQsIGEpO1xuICByZXR1cm4gZFswXSAmIDE7XG59XG5cbmZ1bmN0aW9uIHVucGFjazI1NTE5KG8sIG4pIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSBvW2ldID0gblsyKmldICsgKG5bMippKzFdIDw8IDgpO1xuICBvWzE1XSAmPSAweDdmZmY7XG59XG5cbmZ1bmN0aW9uIEEobywgYSwgYikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIG9baV0gPSBhW2ldICsgYltpXTtcbn1cblxuZnVuY3Rpb24gWihvLCBhLCBiKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykgb1tpXSA9IGFbaV0gLSBiW2ldO1xufVxuXG5mdW5jdGlvbiBNKG8sIGEsIGIpIHtcbiAgdmFyIHYsIGMsXG4gICAgIHQwID0gMCwgIHQxID0gMCwgIHQyID0gMCwgIHQzID0gMCwgIHQ0ID0gMCwgIHQ1ID0gMCwgIHQ2ID0gMCwgIHQ3ID0gMCxcbiAgICAgdDggPSAwLCAgdDkgPSAwLCB0MTAgPSAwLCB0MTEgPSAwLCB0MTIgPSAwLCB0MTMgPSAwLCB0MTQgPSAwLCB0MTUgPSAwLFxuICAgIHQxNiA9IDAsIHQxNyA9IDAsIHQxOCA9IDAsIHQxOSA9IDAsIHQyMCA9IDAsIHQyMSA9IDAsIHQyMiA9IDAsIHQyMyA9IDAsXG4gICAgdDI0ID0gMCwgdDI1ID0gMCwgdDI2ID0gMCwgdDI3ID0gMCwgdDI4ID0gMCwgdDI5ID0gMCwgdDMwID0gMCxcbiAgICBiMCA9IGJbMF0sXG4gICAgYjEgPSBiWzFdLFxuICAgIGIyID0gYlsyXSxcbiAgICBiMyA9IGJbM10sXG4gICAgYjQgPSBiWzRdLFxuICAgIGI1ID0gYls1XSxcbiAgICBiNiA9IGJbNl0sXG4gICAgYjcgPSBiWzddLFxuICAgIGI4ID0gYls4XSxcbiAgICBiOSA9IGJbOV0sXG4gICAgYjEwID0gYlsxMF0sXG4gICAgYjExID0gYlsxMV0sXG4gICAgYjEyID0gYlsxMl0sXG4gICAgYjEzID0gYlsxM10sXG4gICAgYjE0ID0gYlsxNF0sXG4gICAgYjE1ID0gYlsxNV07XG5cbiAgdiA9IGFbMF07XG4gIHQwICs9IHYgKiBiMDtcbiAgdDEgKz0gdiAqIGIxO1xuICB0MiArPSB2ICogYjI7XG4gIHQzICs9IHYgKiBiMztcbiAgdDQgKz0gdiAqIGI0O1xuICB0NSArPSB2ICogYjU7XG4gIHQ2ICs9IHYgKiBiNjtcbiAgdDcgKz0gdiAqIGI3O1xuICB0OCArPSB2ICogYjg7XG4gIHQ5ICs9IHYgKiBiOTtcbiAgdDEwICs9IHYgKiBiMTA7XG4gIHQxMSArPSB2ICogYjExO1xuICB0MTIgKz0gdiAqIGIxMjtcbiAgdDEzICs9IHYgKiBiMTM7XG4gIHQxNCArPSB2ICogYjE0O1xuICB0MTUgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMV07XG4gIHQxICs9IHYgKiBiMDtcbiAgdDIgKz0gdiAqIGIxO1xuICB0MyArPSB2ICogYjI7XG4gIHQ0ICs9IHYgKiBiMztcbiAgdDUgKz0gdiAqIGI0O1xuICB0NiArPSB2ICogYjU7XG4gIHQ3ICs9IHYgKiBiNjtcbiAgdDggKz0gdiAqIGI3O1xuICB0OSArPSB2ICogYjg7XG4gIHQxMCArPSB2ICogYjk7XG4gIHQxMSArPSB2ICogYjEwO1xuICB0MTIgKz0gdiAqIGIxMTtcbiAgdDEzICs9IHYgKiBiMTI7XG4gIHQxNCArPSB2ICogYjEzO1xuICB0MTUgKz0gdiAqIGIxNDtcbiAgdDE2ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzJdO1xuICB0MiArPSB2ICogYjA7XG4gIHQzICs9IHYgKiBiMTtcbiAgdDQgKz0gdiAqIGIyO1xuICB0NSArPSB2ICogYjM7XG4gIHQ2ICs9IHYgKiBiNDtcbiAgdDcgKz0gdiAqIGI1O1xuICB0OCArPSB2ICogYjY7XG4gIHQ5ICs9IHYgKiBiNztcbiAgdDEwICs9IHYgKiBiODtcbiAgdDExICs9IHYgKiBiOTtcbiAgdDEyICs9IHYgKiBiMTA7XG4gIHQxMyArPSB2ICogYjExO1xuICB0MTQgKz0gdiAqIGIxMjtcbiAgdDE1ICs9IHYgKiBiMTM7XG4gIHQxNiArPSB2ICogYjE0O1xuICB0MTcgKz0gdiAqIGIxNTtcbiAgdiA9IGFbM107XG4gIHQzICs9IHYgKiBiMDtcbiAgdDQgKz0gdiAqIGIxO1xuICB0NSArPSB2ICogYjI7XG4gIHQ2ICs9IHYgKiBiMztcbiAgdDcgKz0gdiAqIGI0O1xuICB0OCArPSB2ICogYjU7XG4gIHQ5ICs9IHYgKiBiNjtcbiAgdDEwICs9IHYgKiBiNztcbiAgdDExICs9IHYgKiBiODtcbiAgdDEyICs9IHYgKiBiOTtcbiAgdDEzICs9IHYgKiBiMTA7XG4gIHQxNCArPSB2ICogYjExO1xuICB0MTUgKz0gdiAqIGIxMjtcbiAgdDE2ICs9IHYgKiBiMTM7XG4gIHQxNyArPSB2ICogYjE0O1xuICB0MTggKz0gdiAqIGIxNTtcbiAgdiA9IGFbNF07XG4gIHQ0ICs9IHYgKiBiMDtcbiAgdDUgKz0gdiAqIGIxO1xuICB0NiArPSB2ICogYjI7XG4gIHQ3ICs9IHYgKiBiMztcbiAgdDggKz0gdiAqIGI0O1xuICB0OSArPSB2ICogYjU7XG4gIHQxMCArPSB2ICogYjY7XG4gIHQxMSArPSB2ICogYjc7XG4gIHQxMiArPSB2ICogYjg7XG4gIHQxMyArPSB2ICogYjk7XG4gIHQxNCArPSB2ICogYjEwO1xuICB0MTUgKz0gdiAqIGIxMTtcbiAgdDE2ICs9IHYgKiBiMTI7XG4gIHQxNyArPSB2ICogYjEzO1xuICB0MTggKz0gdiAqIGIxNDtcbiAgdDE5ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzVdO1xuICB0NSArPSB2ICogYjA7XG4gIHQ2ICs9IHYgKiBiMTtcbiAgdDcgKz0gdiAqIGIyO1xuICB0OCArPSB2ICogYjM7XG4gIHQ5ICs9IHYgKiBiNDtcbiAgdDEwICs9IHYgKiBiNTtcbiAgdDExICs9IHYgKiBiNjtcbiAgdDEyICs9IHYgKiBiNztcbiAgdDEzICs9IHYgKiBiODtcbiAgdDE0ICs9IHYgKiBiOTtcbiAgdDE1ICs9IHYgKiBiMTA7XG4gIHQxNiArPSB2ICogYjExO1xuICB0MTcgKz0gdiAqIGIxMjtcbiAgdDE4ICs9IHYgKiBiMTM7XG4gIHQxOSArPSB2ICogYjE0O1xuICB0MjAgKz0gdiAqIGIxNTtcbiAgdiA9IGFbNl07XG4gIHQ2ICs9IHYgKiBiMDtcbiAgdDcgKz0gdiAqIGIxO1xuICB0OCArPSB2ICogYjI7XG4gIHQ5ICs9IHYgKiBiMztcbiAgdDEwICs9IHYgKiBiNDtcbiAgdDExICs9IHYgKiBiNTtcbiAgdDEyICs9IHYgKiBiNjtcbiAgdDEzICs9IHYgKiBiNztcbiAgdDE0ICs9IHYgKiBiODtcbiAgdDE1ICs9IHYgKiBiOTtcbiAgdDE2ICs9IHYgKiBiMTA7XG4gIHQxNyArPSB2ICogYjExO1xuICB0MTggKz0gdiAqIGIxMjtcbiAgdDE5ICs9IHYgKiBiMTM7XG4gIHQyMCArPSB2ICogYjE0O1xuICB0MjEgKz0gdiAqIGIxNTtcbiAgdiA9IGFbN107XG4gIHQ3ICs9IHYgKiBiMDtcbiAgdDggKz0gdiAqIGIxO1xuICB0OSArPSB2ICogYjI7XG4gIHQxMCArPSB2ICogYjM7XG4gIHQxMSArPSB2ICogYjQ7XG4gIHQxMiArPSB2ICogYjU7XG4gIHQxMyArPSB2ICogYjY7XG4gIHQxNCArPSB2ICogYjc7XG4gIHQxNSArPSB2ICogYjg7XG4gIHQxNiArPSB2ICogYjk7XG4gIHQxNyArPSB2ICogYjEwO1xuICB0MTggKz0gdiAqIGIxMTtcbiAgdDE5ICs9IHYgKiBiMTI7XG4gIHQyMCArPSB2ICogYjEzO1xuICB0MjEgKz0gdiAqIGIxNDtcbiAgdDIyICs9IHYgKiBiMTU7XG4gIHYgPSBhWzhdO1xuICB0OCArPSB2ICogYjA7XG4gIHQ5ICs9IHYgKiBiMTtcbiAgdDEwICs9IHYgKiBiMjtcbiAgdDExICs9IHYgKiBiMztcbiAgdDEyICs9IHYgKiBiNDtcbiAgdDEzICs9IHYgKiBiNTtcbiAgdDE0ICs9IHYgKiBiNjtcbiAgdDE1ICs9IHYgKiBiNztcbiAgdDE2ICs9IHYgKiBiODtcbiAgdDE3ICs9IHYgKiBiOTtcbiAgdDE4ICs9IHYgKiBiMTA7XG4gIHQxOSArPSB2ICogYjExO1xuICB0MjAgKz0gdiAqIGIxMjtcbiAgdDIxICs9IHYgKiBiMTM7XG4gIHQyMiArPSB2ICogYjE0O1xuICB0MjMgKz0gdiAqIGIxNTtcbiAgdiA9IGFbOV07XG4gIHQ5ICs9IHYgKiBiMDtcbiAgdDEwICs9IHYgKiBiMTtcbiAgdDExICs9IHYgKiBiMjtcbiAgdDEyICs9IHYgKiBiMztcbiAgdDEzICs9IHYgKiBiNDtcbiAgdDE0ICs9IHYgKiBiNTtcbiAgdDE1ICs9IHYgKiBiNjtcbiAgdDE2ICs9IHYgKiBiNztcbiAgdDE3ICs9IHYgKiBiODtcbiAgdDE4ICs9IHYgKiBiOTtcbiAgdDE5ICs9IHYgKiBiMTA7XG4gIHQyMCArPSB2ICogYjExO1xuICB0MjEgKz0gdiAqIGIxMjtcbiAgdDIyICs9IHYgKiBiMTM7XG4gIHQyMyArPSB2ICogYjE0O1xuICB0MjQgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTBdO1xuICB0MTAgKz0gdiAqIGIwO1xuICB0MTEgKz0gdiAqIGIxO1xuICB0MTIgKz0gdiAqIGIyO1xuICB0MTMgKz0gdiAqIGIzO1xuICB0MTQgKz0gdiAqIGI0O1xuICB0MTUgKz0gdiAqIGI1O1xuICB0MTYgKz0gdiAqIGI2O1xuICB0MTcgKz0gdiAqIGI3O1xuICB0MTggKz0gdiAqIGI4O1xuICB0MTkgKz0gdiAqIGI5O1xuICB0MjAgKz0gdiAqIGIxMDtcbiAgdDIxICs9IHYgKiBiMTE7XG4gIHQyMiArPSB2ICogYjEyO1xuICB0MjMgKz0gdiAqIGIxMztcbiAgdDI0ICs9IHYgKiBiMTQ7XG4gIHQyNSArPSB2ICogYjE1O1xuICB2ID0gYVsxMV07XG4gIHQxMSArPSB2ICogYjA7XG4gIHQxMiArPSB2ICogYjE7XG4gIHQxMyArPSB2ICogYjI7XG4gIHQxNCArPSB2ICogYjM7XG4gIHQxNSArPSB2ICogYjQ7XG4gIHQxNiArPSB2ICogYjU7XG4gIHQxNyArPSB2ICogYjY7XG4gIHQxOCArPSB2ICogYjc7XG4gIHQxOSArPSB2ICogYjg7XG4gIHQyMCArPSB2ICogYjk7XG4gIHQyMSArPSB2ICogYjEwO1xuICB0MjIgKz0gdiAqIGIxMTtcbiAgdDIzICs9IHYgKiBiMTI7XG4gIHQyNCArPSB2ICogYjEzO1xuICB0MjUgKz0gdiAqIGIxNDtcbiAgdDI2ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzEyXTtcbiAgdDEyICs9IHYgKiBiMDtcbiAgdDEzICs9IHYgKiBiMTtcbiAgdDE0ICs9IHYgKiBiMjtcbiAgdDE1ICs9IHYgKiBiMztcbiAgdDE2ICs9IHYgKiBiNDtcbiAgdDE3ICs9IHYgKiBiNTtcbiAgdDE4ICs9IHYgKiBiNjtcbiAgdDE5ICs9IHYgKiBiNztcbiAgdDIwICs9IHYgKiBiODtcbiAgdDIxICs9IHYgKiBiOTtcbiAgdDIyICs9IHYgKiBiMTA7XG4gIHQyMyArPSB2ICogYjExO1xuICB0MjQgKz0gdiAqIGIxMjtcbiAgdDI1ICs9IHYgKiBiMTM7XG4gIHQyNiArPSB2ICogYjE0O1xuICB0MjcgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTNdO1xuICB0MTMgKz0gdiAqIGIwO1xuICB0MTQgKz0gdiAqIGIxO1xuICB0MTUgKz0gdiAqIGIyO1xuICB0MTYgKz0gdiAqIGIzO1xuICB0MTcgKz0gdiAqIGI0O1xuICB0MTggKz0gdiAqIGI1O1xuICB0MTkgKz0gdiAqIGI2O1xuICB0MjAgKz0gdiAqIGI3O1xuICB0MjEgKz0gdiAqIGI4O1xuICB0MjIgKz0gdiAqIGI5O1xuICB0MjMgKz0gdiAqIGIxMDtcbiAgdDI0ICs9IHYgKiBiMTE7XG4gIHQyNSArPSB2ICogYjEyO1xuICB0MjYgKz0gdiAqIGIxMztcbiAgdDI3ICs9IHYgKiBiMTQ7XG4gIHQyOCArPSB2ICogYjE1O1xuICB2ID0gYVsxNF07XG4gIHQxNCArPSB2ICogYjA7XG4gIHQxNSArPSB2ICogYjE7XG4gIHQxNiArPSB2ICogYjI7XG4gIHQxNyArPSB2ICogYjM7XG4gIHQxOCArPSB2ICogYjQ7XG4gIHQxOSArPSB2ICogYjU7XG4gIHQyMCArPSB2ICogYjY7XG4gIHQyMSArPSB2ICogYjc7XG4gIHQyMiArPSB2ICogYjg7XG4gIHQyMyArPSB2ICogYjk7XG4gIHQyNCArPSB2ICogYjEwO1xuICB0MjUgKz0gdiAqIGIxMTtcbiAgdDI2ICs9IHYgKiBiMTI7XG4gIHQyNyArPSB2ICogYjEzO1xuICB0MjggKz0gdiAqIGIxNDtcbiAgdDI5ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzE1XTtcbiAgdDE1ICs9IHYgKiBiMDtcbiAgdDE2ICs9IHYgKiBiMTtcbiAgdDE3ICs9IHYgKiBiMjtcbiAgdDE4ICs9IHYgKiBiMztcbiAgdDE5ICs9IHYgKiBiNDtcbiAgdDIwICs9IHYgKiBiNTtcbiAgdDIxICs9IHYgKiBiNjtcbiAgdDIyICs9IHYgKiBiNztcbiAgdDIzICs9IHYgKiBiODtcbiAgdDI0ICs9IHYgKiBiOTtcbiAgdDI1ICs9IHYgKiBiMTA7XG4gIHQyNiArPSB2ICogYjExO1xuICB0MjcgKz0gdiAqIGIxMjtcbiAgdDI4ICs9IHYgKiBiMTM7XG4gIHQyOSArPSB2ICogYjE0O1xuICB0MzAgKz0gdiAqIGIxNTtcblxuICB0MCAgKz0gMzggKiB0MTY7XG4gIHQxICArPSAzOCAqIHQxNztcbiAgdDIgICs9IDM4ICogdDE4O1xuICB0MyAgKz0gMzggKiB0MTk7XG4gIHQ0ICArPSAzOCAqIHQyMDtcbiAgdDUgICs9IDM4ICogdDIxO1xuICB0NiAgKz0gMzggKiB0MjI7XG4gIHQ3ICArPSAzOCAqIHQyMztcbiAgdDggICs9IDM4ICogdDI0O1xuICB0OSAgKz0gMzggKiB0MjU7XG4gIHQxMCArPSAzOCAqIHQyNjtcbiAgdDExICs9IDM4ICogdDI3O1xuICB0MTIgKz0gMzggKiB0Mjg7XG4gIHQxMyArPSAzOCAqIHQyOTtcbiAgdDE0ICs9IDM4ICogdDMwO1xuICAvLyB0MTUgbGVmdCBhcyBpc1xuXG4gIC8vIGZpcnN0IGNhclxuICBjID0gMTtcbiAgdiA9ICB0MCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQwID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQxID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQyID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQzID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ0ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ1ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ2ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ3ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0OCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ4ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0OSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ5ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEwID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDExID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEyID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEzID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxNCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDE0ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxNSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDE1ID0gdiAtIGMgKiA2NTUzNjtcbiAgdDAgKz0gYy0xICsgMzcgKiAoYy0xKTtcblxuICAvLyBzZWNvbmQgY2FyXG4gIGMgPSAxO1xuICB2ID0gIHQwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQxICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDUgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ2ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDYgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ3ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDcgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ4ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDggPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ5ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDkgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDExICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTUgPSB2IC0gYyAqIDY1NTM2O1xuICB0MCArPSBjLTEgKyAzNyAqIChjLTEpO1xuXG4gIG9bIDBdID0gdDA7XG4gIG9bIDFdID0gdDE7XG4gIG9bIDJdID0gdDI7XG4gIG9bIDNdID0gdDM7XG4gIG9bIDRdID0gdDQ7XG4gIG9bIDVdID0gdDU7XG4gIG9bIDZdID0gdDY7XG4gIG9bIDddID0gdDc7XG4gIG9bIDhdID0gdDg7XG4gIG9bIDldID0gdDk7XG4gIG9bMTBdID0gdDEwO1xuICBvWzExXSA9IHQxMTtcbiAgb1sxMl0gPSB0MTI7XG4gIG9bMTNdID0gdDEzO1xuICBvWzE0XSA9IHQxNDtcbiAgb1sxNV0gPSB0MTU7XG59XG5cbmZ1bmN0aW9uIFMobywgYSkge1xuICBNKG8sIGEsIGEpO1xufVxuXG5mdW5jdGlvbiBpbnYyNTUxOShvLCBpKSB7XG4gIHZhciBjID0gZ2YoKTtcbiAgdmFyIGE7XG4gIGZvciAoYSA9IDA7IGEgPCAxNjsgYSsrKSBjW2FdID0gaVthXTtcbiAgZm9yIChhID0gMjUzOyBhID49IDA7IGEtLSkge1xuICAgIFMoYywgYyk7XG4gICAgaWYoYSAhPT0gMiAmJiBhICE9PSA0KSBNKGMsIGMsIGkpO1xuICB9XG4gIGZvciAoYSA9IDA7IGEgPCAxNjsgYSsrKSBvW2FdID0gY1thXTtcbn1cblxuZnVuY3Rpb24gcG93MjUyMyhvLCBpKSB7XG4gIHZhciBjID0gZ2YoKTtcbiAgdmFyIGE7XG4gIGZvciAoYSA9IDA7IGEgPCAxNjsgYSsrKSBjW2FdID0gaVthXTtcbiAgZm9yIChhID0gMjUwOyBhID49IDA7IGEtLSkge1xuICAgICAgUyhjLCBjKTtcbiAgICAgIGlmKGEgIT09IDEpIE0oYywgYywgaSk7XG4gIH1cbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIG9bYV0gPSBjW2FdO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2NhbGFybXVsdChxLCBuLCBwKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICB2YXIgeCA9IG5ldyBGbG9hdDY0QXJyYXkoODApLCByLCBpO1xuICB2YXIgYSA9IGdmKCksIGIgPSBnZigpLCBjID0gZ2YoKSxcbiAgICAgIGQgPSBnZigpLCBlID0gZ2YoKSwgZiA9IGdmKCk7XG4gIGZvciAoaSA9IDA7IGkgPCAzMTsgaSsrKSB6W2ldID0gbltpXTtcbiAgelszMV09KG5bMzFdJjEyNyl8NjQ7XG4gIHpbMF0mPTI0ODtcbiAgdW5wYWNrMjU1MTkoeCxwKTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBiW2ldPXhbaV07XG4gICAgZFtpXT1hW2ldPWNbaV09MDtcbiAgfVxuICBhWzBdPWRbMF09MTtcbiAgZm9yIChpPTI1NDsgaT49MDsgLS1pKSB7XG4gICAgcj0oeltpPj4+M10+Pj4oaSY3KSkmMTtcbiAgICBzZWwyNTUxOShhLGIscik7XG4gICAgc2VsMjU1MTkoYyxkLHIpO1xuICAgIEEoZSxhLGMpO1xuICAgIFooYSxhLGMpO1xuICAgIEEoYyxiLGQpO1xuICAgIFooYixiLGQpO1xuICAgIFMoZCxlKTtcbiAgICBTKGYsYSk7XG4gICAgTShhLGMsYSk7XG4gICAgTShjLGIsZSk7XG4gICAgQShlLGEsYyk7XG4gICAgWihhLGEsYyk7XG4gICAgUyhiLGEpO1xuICAgIFooYyxkLGYpO1xuICAgIE0oYSxjLF8xMjE2NjUpO1xuICAgIEEoYSxhLGQpO1xuICAgIE0oYyxjLGEpO1xuICAgIE0oYSxkLGYpO1xuICAgIE0oZCxiLHgpO1xuICAgIFMoYixlKTtcbiAgICBzZWwyNTUxOShhLGIscik7XG4gICAgc2VsMjU1MTkoYyxkLHIpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgeFtpKzE2XT1hW2ldO1xuICAgIHhbaSszMl09Y1tpXTtcbiAgICB4W2krNDhdPWJbaV07XG4gICAgeFtpKzY0XT1kW2ldO1xuICB9XG4gIHZhciB4MzIgPSB4LnN1YmFycmF5KDMyKTtcbiAgdmFyIHgxNiA9IHguc3ViYXJyYXkoMTYpO1xuICBpbnYyNTUxOSh4MzIseDMyKTtcbiAgTSh4MTYseDE2LHgzMik7XG4gIHBhY2syNTUxOShxLHgxNik7XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHEsIG4pIHtcbiAgcmV0dXJuIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIF85KTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2JveF9rZXlwYWlyKHksIHgpIHtcbiAgcmFuZG9tYnl0ZXMoeCwgMzIpO1xuICByZXR1cm4gY3J5cHRvX3NjYWxhcm11bHRfYmFzZSh5LCB4KTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2JveF9iZWZvcmVubShrLCB5LCB4KSB7XG4gIHZhciBzID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fc2NhbGFybXVsdChzLCB4LCB5KTtcbiAgcmV0dXJuIGNyeXB0b19jb3JlX2hzYWxzYTIwKGssIF8wLCBzLCBzaWdtYSk7XG59XG5cbnZhciBjcnlwdG9fYm94X2FmdGVybm0gPSBjcnlwdG9fc2VjcmV0Ym94O1xudmFyIGNyeXB0b19ib3hfb3Blbl9hZnRlcm5tID0gY3J5cHRvX3NlY3JldGJveF9vcGVuO1xuXG5mdW5jdGlvbiBjcnlwdG9fYm94KGMsIG0sIGQsIG4sIHksIHgpIHtcbiAgdmFyIGsgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgeSwgeCk7XG4gIHJldHVybiBjcnlwdG9fYm94X2FmdGVybm0oYywgbSwgZCwgbiwgayk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19ib3hfb3BlbihtLCBjLCBkLCBuLCB5LCB4KSB7XG4gIHZhciBrID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHksIHgpO1xuICByZXR1cm4gY3J5cHRvX2JveF9vcGVuX2FmdGVybm0obSwgYywgZCwgbiwgayk7XG59XG5cbnZhciBLID0gW1xuICAweDQyOGEyZjk4LCAweGQ3MjhhZTIyLCAweDcxMzc0NDkxLCAweDIzZWY2NWNkLFxuICAweGI1YzBmYmNmLCAweGVjNGQzYjJmLCAweGU5YjVkYmE1LCAweDgxODlkYmJjLFxuICAweDM5NTZjMjViLCAweGYzNDhiNTM4LCAweDU5ZjExMWYxLCAweGI2MDVkMDE5LFxuICAweDkyM2Y4MmE0LCAweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4LFxuICAweGQ4MDdhYTk4LCAweGEzMDMwMjQyLCAweDEyODM1YjAxLCAweDQ1NzA2ZmJlLFxuICAweDI0MzE4NWJlLCAweDRlZTRiMjhjLCAweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyLFxuICAweDcyYmU1ZDc0LCAweGYyN2I4OTZmLCAweDgwZGViMWZlLCAweDNiMTY5NmIxLFxuICAweDliZGMwNmE3LCAweDI1YzcxMjM1LCAweGMxOWJmMTc0LCAweGNmNjkyNjk0LFxuICAweGU0OWI2OWMxLCAweDllZjE0YWQyLCAweGVmYmU0Nzg2LCAweDM4NGYyNWUzLFxuICAweDBmYzE5ZGM2LCAweDhiOGNkNWI1LCAweDI0MGNhMWNjLCAweDc3YWM5YzY1LFxuICAweDJkZTkyYzZmLCAweDU5MmIwMjc1LCAweDRhNzQ4NGFhLCAweDZlYTZlNDgzLFxuICAweDVjYjBhOWRjLCAweGJkNDFmYmQ0LCAweDc2Zjk4OGRhLCAweDgzMTE1M2I1LFxuICAweDk4M2U1MTUyLCAweGVlNjZkZmFiLCAweGE4MzFjNjZkLCAweDJkYjQzMjEwLFxuICAweGIwMDMyN2M4LCAweDk4ZmIyMTNmLCAweGJmNTk3ZmM3LCAweGJlZWYwZWU0LFxuICAweGM2ZTAwYmYzLCAweDNkYTg4ZmMyLCAweGQ1YTc5MTQ3LCAweDkzMGFhNzI1LFxuICAweDA2Y2E2MzUxLCAweGUwMDM4MjZmLCAweDE0MjkyOTY3LCAweDBhMGU2ZTcwLFxuICAweDI3YjcwYTg1LCAweDQ2ZDIyZmZjLCAweDJlMWIyMTM4LCAweDVjMjZjOTI2LFxuICAweDRkMmM2ZGZjLCAweDVhYzQyYWVkLCAweDUzMzgwZDEzLCAweDlkOTViM2RmLFxuICAweDY1MGE3MzU0LCAweDhiYWY2M2RlLCAweDc2NmEwYWJiLCAweDNjNzdiMmE4LFxuICAweDgxYzJjOTJlLCAweDQ3ZWRhZWU2LCAweDkyNzIyYzg1LCAweDE0ODIzNTNiLFxuICAweGEyYmZlOGExLCAweDRjZjEwMzY0LCAweGE4MWE2NjRiLCAweGJjNDIzMDAxLFxuICAweGMyNGI4YjcwLCAweGQwZjg5NzkxLCAweGM3NmM1MWEzLCAweDA2NTRiZTMwLFxuICAweGQxOTJlODE5LCAweGQ2ZWY1MjE4LCAweGQ2OTkwNjI0LCAweDU1NjVhOTEwLFxuICAweGY0MGUzNTg1LCAweDU3NzEyMDJhLCAweDEwNmFhMDcwLCAweDMyYmJkMWI4LFxuICAweDE5YTRjMTE2LCAweGI4ZDJkMGM4LCAweDFlMzc2YzA4LCAweDUxNDFhYjUzLFxuICAweDI3NDg3NzRjLCAweGRmOGVlYjk5LCAweDM0YjBiY2I1LCAweGUxOWI0OGE4LFxuICAweDM5MWMwY2IzLCAweGM1Yzk1YTYzLCAweDRlZDhhYTRhLCAweGUzNDE4YWNiLFxuICAweDViOWNjYTRmLCAweDc3NjNlMzczLCAweDY4MmU2ZmYzLCAweGQ2YjJiOGEzLFxuICAweDc0OGY4MmVlLCAweDVkZWZiMmZjLCAweDc4YTU2MzZmLCAweDQzMTcyZjYwLFxuICAweDg0Yzg3ODE0LCAweGExZjBhYjcyLCAweDhjYzcwMjA4LCAweDFhNjQzOWVjLFxuICAweDkwYmVmZmZhLCAweDIzNjMxZTI4LCAweGE0NTA2Y2ViLCAweGRlODJiZGU5LFxuICAweGJlZjlhM2Y3LCAweGIyYzY3OTE1LCAweGM2NzE3OGYyLCAweGUzNzI1MzJiLFxuICAweGNhMjczZWNlLCAweGVhMjY2MTljLCAweGQxODZiOGM3LCAweDIxYzBjMjA3LFxuICAweGVhZGE3ZGQ2LCAweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLCAweGVlNmVkMTc4LFxuICAweDA2ZjA2N2FhLCAweDcyMTc2ZmJhLCAweDBhNjM3ZGM1LCAweGEyYzg5OGE2LFxuICAweDExM2Y5ODA0LCAweGJlZjkwZGFlLCAweDFiNzEwYjM1LCAweDEzMWM0NzFiLFxuICAweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLCAweDQwYzcyNDkzLFxuICAweDNjOWViZTBhLCAweDE1YzliZWJjLCAweDQzMWQ2N2M0LCAweDljMTAwZDRjLFxuICAweDRjYzVkNGJlLCAweGNiM2U0MmI2LCAweDU5N2YyOTljLCAweGZjNjU3ZTJhLFxuICAweDVmY2I2ZmFiLCAweDNhZDZmYWVjLCAweDZjNDQxOThjLCAweDRhNDc1ODE3XG5dO1xuXG5mdW5jdGlvbiBjcnlwdG9faGFzaGJsb2Nrc19obChoaCwgaGwsIG0sIG4pIHtcbiAgdmFyIHdoID0gbmV3IEludDMyQXJyYXkoMTYpLCB3bCA9IG5ldyBJbnQzMkFycmF5KDE2KSxcbiAgICAgIGJoMCwgYmgxLCBiaDIsIGJoMywgYmg0LCBiaDUsIGJoNiwgYmg3LFxuICAgICAgYmwwLCBibDEsIGJsMiwgYmwzLCBibDQsIGJsNSwgYmw2LCBibDcsXG4gICAgICB0aCwgdGwsIGksIGosIGgsIGwsIGEsIGIsIGMsIGQ7XG5cbiAgdmFyIGFoMCA9IGhoWzBdLFxuICAgICAgYWgxID0gaGhbMV0sXG4gICAgICBhaDIgPSBoaFsyXSxcbiAgICAgIGFoMyA9IGhoWzNdLFxuICAgICAgYWg0ID0gaGhbNF0sXG4gICAgICBhaDUgPSBoaFs1XSxcbiAgICAgIGFoNiA9IGhoWzZdLFxuICAgICAgYWg3ID0gaGhbN10sXG5cbiAgICAgIGFsMCA9IGhsWzBdLFxuICAgICAgYWwxID0gaGxbMV0sXG4gICAgICBhbDIgPSBobFsyXSxcbiAgICAgIGFsMyA9IGhsWzNdLFxuICAgICAgYWw0ID0gaGxbNF0sXG4gICAgICBhbDUgPSBobFs1XSxcbiAgICAgIGFsNiA9IGhsWzZdLFxuICAgICAgYWw3ID0gaGxbN107XG5cbiAgdmFyIHBvcyA9IDA7XG4gIHdoaWxlIChuID49IDEyOCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBqID0gOCAqIGkgKyBwb3M7XG4gICAgICB3aFtpXSA9IChtW2orMF0gPDwgMjQpIHwgKG1baisxXSA8PCAxNikgfCAobVtqKzJdIDw8IDgpIHwgbVtqKzNdO1xuICAgICAgd2xbaV0gPSAobVtqKzRdIDw8IDI0KSB8IChtW2orNV0gPDwgMTYpIHwgKG1bais2XSA8PCA4KSB8IG1bais3XTtcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IDgwOyBpKyspIHtcbiAgICAgIGJoMCA9IGFoMDtcbiAgICAgIGJoMSA9IGFoMTtcbiAgICAgIGJoMiA9IGFoMjtcbiAgICAgIGJoMyA9IGFoMztcbiAgICAgIGJoNCA9IGFoNDtcbiAgICAgIGJoNSA9IGFoNTtcbiAgICAgIGJoNiA9IGFoNjtcbiAgICAgIGJoNyA9IGFoNztcblxuICAgICAgYmwwID0gYWwwO1xuICAgICAgYmwxID0gYWwxO1xuICAgICAgYmwyID0gYWwyO1xuICAgICAgYmwzID0gYWwzO1xuICAgICAgYmw0ID0gYWw0O1xuICAgICAgYmw1ID0gYWw1O1xuICAgICAgYmw2ID0gYWw2O1xuICAgICAgYmw3ID0gYWw3O1xuXG4gICAgICAvLyBhZGRcbiAgICAgIGggPSBhaDc7XG4gICAgICBsID0gYWw3O1xuXG4gICAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgICAgLy8gU2lnbWExXG4gICAgICBoID0gKChhaDQgPj4+IDE0KSB8IChhbDQgPDwgKDMyLTE0KSkpIF4gKChhaDQgPj4+IDE4KSB8IChhbDQgPDwgKDMyLTE4KSkpIF4gKChhbDQgPj4+ICg0MS0zMikpIHwgKGFoNCA8PCAoMzItKDQxLTMyKSkpKTtcbiAgICAgIGwgPSAoKGFsNCA+Pj4gMTQpIHwgKGFoNCA8PCAoMzItMTQpKSkgXiAoKGFsNCA+Pj4gMTgpIHwgKGFoNCA8PCAoMzItMTgpKSkgXiAoKGFoNCA+Pj4gKDQxLTMyKSkgfCAoYWw0IDw8ICgzMi0oNDEtMzIpKSkpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIENoXG4gICAgICBoID0gKGFoNCAmIGFoNSkgXiAofmFoNCAmIGFoNik7XG4gICAgICBsID0gKGFsNCAmIGFsNSkgXiAofmFsNCAmIGFsNik7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgLy8gS1xuICAgICAgaCA9IEtbaSoyXTtcbiAgICAgIGwgPSBLW2kqMisxXTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyB3XG4gICAgICBoID0gd2hbaSUxNl07XG4gICAgICBsID0gd2xbaSUxNl07XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICB0aCA9IGMgJiAweGZmZmYgfCBkIDw8IDE2O1xuICAgICAgdGwgPSBhICYgMHhmZmZmIHwgYiA8PCAxNjtcblxuICAgICAgLy8gYWRkXG4gICAgICBoID0gdGg7XG4gICAgICBsID0gdGw7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAvLyBTaWdtYTBcbiAgICAgIGggPSAoKGFoMCA+Pj4gMjgpIHwgKGFsMCA8PCAoMzItMjgpKSkgXiAoKGFsMCA+Pj4gKDM0LTMyKSkgfCAoYWgwIDw8ICgzMi0oMzQtMzIpKSkpIF4gKChhbDAgPj4+ICgzOS0zMikpIHwgKGFoMCA8PCAoMzItKDM5LTMyKSkpKTtcbiAgICAgIGwgPSAoKGFsMCA+Pj4gMjgpIHwgKGFoMCA8PCAoMzItMjgpKSkgXiAoKGFoMCA+Pj4gKDM0LTMyKSkgfCAoYWwwIDw8ICgzMi0oMzQtMzIpKSkpIF4gKChhaDAgPj4+ICgzOS0zMikpIHwgKGFsMCA8PCAoMzItKDM5LTMyKSkpKTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyBNYWpcbiAgICAgIGggPSAoYWgwICYgYWgxKSBeIChhaDAgJiBhaDIpIF4gKGFoMSAmIGFoMik7XG4gICAgICBsID0gKGFsMCAmIGFsMSkgXiAoYWwwICYgYWwyKSBeIChhbDEgJiBhbDIpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICBjICs9IGIgPj4+IDE2O1xuICAgICAgZCArPSBjID4+PiAxNjtcblxuICAgICAgYmg3ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgICAgYmw3ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgICAvLyBhZGRcbiAgICAgIGggPSBiaDM7XG4gICAgICBsID0gYmwzO1xuXG4gICAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgICAgaCA9IHRoO1xuICAgICAgbCA9IHRsO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICBjICs9IGIgPj4+IDE2O1xuICAgICAgZCArPSBjID4+PiAxNjtcblxuICAgICAgYmgzID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgICAgYmwzID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgICBhaDEgPSBiaDA7XG4gICAgICBhaDIgPSBiaDE7XG4gICAgICBhaDMgPSBiaDI7XG4gICAgICBhaDQgPSBiaDM7XG4gICAgICBhaDUgPSBiaDQ7XG4gICAgICBhaDYgPSBiaDU7XG4gICAgICBhaDcgPSBiaDY7XG4gICAgICBhaDAgPSBiaDc7XG5cbiAgICAgIGFsMSA9IGJsMDtcbiAgICAgIGFsMiA9IGJsMTtcbiAgICAgIGFsMyA9IGJsMjtcbiAgICAgIGFsNCA9IGJsMztcbiAgICAgIGFsNSA9IGJsNDtcbiAgICAgIGFsNiA9IGJsNTtcbiAgICAgIGFsNyA9IGJsNjtcbiAgICAgIGFsMCA9IGJsNztcblxuICAgICAgaWYgKGklMTYgPT09IDE1KSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7XG4gICAgICAgICAgLy8gYWRkXG4gICAgICAgICAgaCA9IHdoW2pdO1xuICAgICAgICAgIGwgPSB3bFtqXTtcblxuICAgICAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICAgICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgICAgICAgIGggPSB3aFsoais5KSUxNl07XG4gICAgICAgICAgbCA9IHdsWyhqKzkpJTE2XTtcblxuICAgICAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgICAgICAvLyBzaWdtYTBcbiAgICAgICAgICB0aCA9IHdoWyhqKzEpJTE2XTtcbiAgICAgICAgICB0bCA9IHdsWyhqKzEpJTE2XTtcbiAgICAgICAgICBoID0gKCh0aCA+Pj4gMSkgfCAodGwgPDwgKDMyLTEpKSkgXiAoKHRoID4+PiA4KSB8ICh0bCA8PCAoMzItOCkpKSBeICh0aCA+Pj4gNyk7XG4gICAgICAgICAgbCA9ICgodGwgPj4+IDEpIHwgKHRoIDw8ICgzMi0xKSkpIF4gKCh0bCA+Pj4gOCkgfCAodGggPDwgKDMyLTgpKSkgXiAoKHRsID4+PiA3KSB8ICh0aCA8PCAoMzItNykpKTtcblxuICAgICAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgICAgICAvLyBzaWdtYTFcbiAgICAgICAgICB0aCA9IHdoWyhqKzE0KSUxNl07XG4gICAgICAgICAgdGwgPSB3bFsoaisxNCklMTZdO1xuICAgICAgICAgIGggPSAoKHRoID4+PiAxOSkgfCAodGwgPDwgKDMyLTE5KSkpIF4gKCh0bCA+Pj4gKDYxLTMyKSkgfCAodGggPDwgKDMyLSg2MS0zMikpKSkgXiAodGggPj4+IDYpO1xuICAgICAgICAgIGwgPSAoKHRsID4+PiAxOSkgfCAodGggPDwgKDMyLTE5KSkpIF4gKCh0aCA+Pj4gKDYxLTMyKSkgfCAodGwgPDwgKDMyLSg2MS0zMikpKSkgXiAoKHRsID4+PiA2KSB8ICh0aCA8PCAoMzItNikpKTtcblxuICAgICAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgICAgICBiICs9IGEgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICAgICAgZCArPSBjID4+PiAxNjtcblxuICAgICAgICAgIHdoW2pdID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgICAgICAgIHdsW2pdID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkXG4gICAgaCA9IGFoMDtcbiAgICBsID0gYWwwO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzBdO1xuICAgIGwgPSBobFswXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzBdID0gYWgwID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzBdID0gYWwwID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoMTtcbiAgICBsID0gYWwxO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzFdO1xuICAgIGwgPSBobFsxXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzFdID0gYWgxID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzFdID0gYWwxID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoMjtcbiAgICBsID0gYWwyO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzJdO1xuICAgIGwgPSBobFsyXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzJdID0gYWgyID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzJdID0gYWwyID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoMztcbiAgICBsID0gYWwzO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzNdO1xuICAgIGwgPSBobFszXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzNdID0gYWgzID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzNdID0gYWwzID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNDtcbiAgICBsID0gYWw0O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzRdO1xuICAgIGwgPSBobFs0XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzRdID0gYWg0ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzRdID0gYWw0ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNTtcbiAgICBsID0gYWw1O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzVdO1xuICAgIGwgPSBobFs1XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzVdID0gYWg1ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzVdID0gYWw1ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNjtcbiAgICBsID0gYWw2O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzZdO1xuICAgIGwgPSBobFs2XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzZdID0gYWg2ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzZdID0gYWw2ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNztcbiAgICBsID0gYWw3O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzddO1xuICAgIGwgPSBobFs3XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzddID0gYWg3ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzddID0gYWw3ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgcG9zICs9IDEyODtcbiAgICBuIC09IDEyODtcbiAgfVxuXG4gIHJldHVybiBuO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9faGFzaChvdXQsIG0sIG4pIHtcbiAgdmFyIGhoID0gbmV3IEludDMyQXJyYXkoOCksXG4gICAgICBobCA9IG5ldyBJbnQzMkFycmF5KDgpLFxuICAgICAgeCA9IG5ldyBVaW50OEFycmF5KDI1NiksXG4gICAgICBpLCBiID0gbjtcblxuICBoaFswXSA9IDB4NmEwOWU2Njc7XG4gIGhoWzFdID0gMHhiYjY3YWU4NTtcbiAgaGhbMl0gPSAweDNjNmVmMzcyO1xuICBoaFszXSA9IDB4YTU0ZmY1M2E7XG4gIGhoWzRdID0gMHg1MTBlNTI3ZjtcbiAgaGhbNV0gPSAweDliMDU2ODhjO1xuICBoaFs2XSA9IDB4MWY4M2Q5YWI7XG4gIGhoWzddID0gMHg1YmUwY2QxOTtcblxuICBobFswXSA9IDB4ZjNiY2M5MDg7XG4gIGhsWzFdID0gMHg4NGNhYTczYjtcbiAgaGxbMl0gPSAweGZlOTRmODJiO1xuICBobFszXSA9IDB4NWYxZDM2ZjE7XG4gIGhsWzRdID0gMHhhZGU2ODJkMTtcbiAgaGxbNV0gPSAweDJiM2U2YzFmO1xuICBobFs2XSA9IDB4ZmI0MWJkNmI7XG4gIGhsWzddID0gMHgxMzdlMjE3OTtcblxuICBjcnlwdG9faGFzaGJsb2Nrc19obChoaCwgaGwsIG0sIG4pO1xuICBuICU9IDEyODtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB4W2ldID0gbVtiLW4raV07XG4gIHhbbl0gPSAxMjg7XG5cbiAgbiA9IDI1Ni0xMjgqKG48MTEyPzE6MCk7XG4gIHhbbi05XSA9IDA7XG4gIHRzNjQoeCwgbi04LCAgKGIgLyAweDIwMDAwMDAwKSB8IDAsIGIgPDwgMyk7XG4gIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgeCwgbik7XG5cbiAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgdHM2NChvdXQsIDgqaSwgaGhbaV0sIGhsW2ldKTtcblxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gYWRkKHAsIHEpIHtcbiAgdmFyIGEgPSBnZigpLCBiID0gZ2YoKSwgYyA9IGdmKCksXG4gICAgICBkID0gZ2YoKSwgZSA9IGdmKCksIGYgPSBnZigpLFxuICAgICAgZyA9IGdmKCksIGggPSBnZigpLCB0ID0gZ2YoKTtcblxuICBaKGEsIHBbMV0sIHBbMF0pO1xuICBaKHQsIHFbMV0sIHFbMF0pO1xuICBNKGEsIGEsIHQpO1xuICBBKGIsIHBbMF0sIHBbMV0pO1xuICBBKHQsIHFbMF0sIHFbMV0pO1xuICBNKGIsIGIsIHQpO1xuICBNKGMsIHBbM10sIHFbM10pO1xuICBNKGMsIGMsIEQyKTtcbiAgTShkLCBwWzJdLCBxWzJdKTtcbiAgQShkLCBkLCBkKTtcbiAgWihlLCBiLCBhKTtcbiAgWihmLCBkLCBjKTtcbiAgQShnLCBkLCBjKTtcbiAgQShoLCBiLCBhKTtcblxuICBNKHBbMF0sIGUsIGYpO1xuICBNKHBbMV0sIGgsIGcpO1xuICBNKHBbMl0sIGcsIGYpO1xuICBNKHBbM10sIGUsIGgpO1xufVxuXG5mdW5jdGlvbiBjc3dhcChwLCBxLCBiKSB7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgc2VsMjU1MTkocFtpXSwgcVtpXSwgYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFjayhyLCBwKSB7XG4gIHZhciB0eCA9IGdmKCksIHR5ID0gZ2YoKSwgemkgPSBnZigpO1xuICBpbnYyNTUxOSh6aSwgcFsyXSk7XG4gIE0odHgsIHBbMF0sIHppKTtcbiAgTSh0eSwgcFsxXSwgemkpO1xuICBwYWNrMjU1MTkociwgdHkpO1xuICByWzMxXSBePSBwYXIyNTUxOSh0eCkgPDwgNztcbn1cblxuZnVuY3Rpb24gc2NhbGFybXVsdChwLCBxLCBzKSB7XG4gIHZhciBiLCBpO1xuICBzZXQyNTUxOShwWzBdLCBnZjApO1xuICBzZXQyNTUxOShwWzFdLCBnZjEpO1xuICBzZXQyNTUxOShwWzJdLCBnZjEpO1xuICBzZXQyNTUxOShwWzNdLCBnZjApO1xuICBmb3IgKGkgPSAyNTU7IGkgPj0gMDsgLS1pKSB7XG4gICAgYiA9IChzWyhpLzgpfDBdID4+IChpJjcpKSAmIDE7XG4gICAgY3N3YXAocCwgcSwgYik7XG4gICAgYWRkKHEsIHApO1xuICAgIGFkZChwLCBwKTtcbiAgICBjc3dhcChwLCBxLCBiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2FsYXJiYXNlKHAsIHMpIHtcbiAgdmFyIHEgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG4gIHNldDI1NTE5KHFbMF0sIFgpO1xuICBzZXQyNTUxOShxWzFdLCBZKTtcbiAgc2V0MjU1MTkocVsyXSwgZ2YxKTtcbiAgTShxWzNdLCBYLCBZKTtcbiAgc2NhbGFybXVsdChwLCBxLCBzKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NpZ25fa2V5cGFpcihwaywgc2ssIHNlZWRlZCkge1xuICB2YXIgZCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHAgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG4gIHZhciBpO1xuXG4gIGlmICghc2VlZGVkKSByYW5kb21ieXRlcyhzaywgMzIpO1xuICBjcnlwdG9faGFzaChkLCBzaywgMzIpO1xuICBkWzBdICY9IDI0ODtcbiAgZFszMV0gJj0gMTI3O1xuICBkWzMxXSB8PSA2NDtcblxuICBzY2FsYXJiYXNlKHAsIGQpO1xuICBwYWNrKHBrLCBwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgc2tbaSszMl0gPSBwa1tpXTtcbiAgcmV0dXJuIDA7XG59XG5cbnZhciBMID0gbmV3IEZsb2F0NjRBcnJheShbMHhlZCwgMHhkMywgMHhmNSwgMHg1YywgMHgxYSwgMHg2MywgMHgxMiwgMHg1OCwgMHhkNiwgMHg5YywgMHhmNywgMHhhMiwgMHhkZSwgMHhmOSwgMHhkZSwgMHgxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHgxMF0pO1xuXG5mdW5jdGlvbiBtb2RMKHIsIHgpIHtcbiAgdmFyIGNhcnJ5LCBpLCBqLCBrO1xuICBmb3IgKGkgPSA2MzsgaSA+PSAzMjsgLS1pKSB7XG4gICAgY2FycnkgPSAwO1xuICAgIGZvciAoaiA9IGkgLSAzMiwgayA9IGkgLSAxMjsgaiA8IGs7ICsraikge1xuICAgICAgeFtqXSArPSBjYXJyeSAtIDE2ICogeFtpXSAqIExbaiAtIChpIC0gMzIpXTtcbiAgICAgIGNhcnJ5ID0gKHhbal0gKyAxMjgpID4+IDg7XG4gICAgICB4W2pdIC09IGNhcnJ5ICogMjU2O1xuICAgIH1cbiAgICB4W2pdICs9IGNhcnJ5O1xuICAgIHhbaV0gPSAwO1xuICB9XG4gIGNhcnJ5ID0gMDtcbiAgZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHtcbiAgICB4W2pdICs9IGNhcnJ5IC0gKHhbMzFdID4+IDQpICogTFtqXTtcbiAgICBjYXJyeSA9IHhbal0gPj4gODtcbiAgICB4W2pdICY9IDI1NTtcbiAgfVxuICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgeFtqXSAtPSBjYXJyeSAqIExbal07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgeFtpKzFdICs9IHhbaV0gPj4gODtcbiAgICByW2ldID0geFtpXSAmIDI1NTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWR1Y2Uocikge1xuICB2YXIgeCA9IG5ldyBGbG9hdDY0QXJyYXkoNjQpLCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeFtpXSA9IHJbaV07XG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSByW2ldID0gMDtcbiAgbW9kTChyLCB4KTtcbn1cblxuLy8gTm90ZTogZGlmZmVyZW5jZSBmcm9tIEMgLSBzbWxlbiByZXR1cm5lZCwgbm90IHBhc3NlZCBhcyBhcmd1bWVudC5cbmZ1bmN0aW9uIGNyeXB0b19zaWduKHNtLCBtLCBuLCBzaykge1xuICB2YXIgZCA9IG5ldyBVaW50OEFycmF5KDY0KSwgaCA9IG5ldyBVaW50OEFycmF5KDY0KSwgciA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIGksIGosIHggPSBuZXcgRmxvYXQ2NEFycmF5KDY0KTtcbiAgdmFyIHAgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG5cbiAgY3J5cHRvX2hhc2goZCwgc2ssIDMyKTtcbiAgZFswXSAmPSAyNDg7XG4gIGRbMzFdICY9IDEyNztcbiAgZFszMV0gfD0gNjQ7XG5cbiAgdmFyIHNtbGVuID0gbiArIDY0O1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBzbVs2NCArIGldID0gbVtpXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHNtWzMyICsgaV0gPSBkWzMyICsgaV07XG5cbiAgY3J5cHRvX2hhc2gociwgc20uc3ViYXJyYXkoMzIpLCBuKzMyKTtcbiAgcmVkdWNlKHIpO1xuICBzY2FsYXJiYXNlKHAsIHIpO1xuICBwYWNrKHNtLCBwKTtcblxuICBmb3IgKGkgPSAzMjsgaSA8IDY0OyBpKyspIHNtW2ldID0gc2tbaV07XG4gIGNyeXB0b19oYXNoKGgsIHNtLCBuICsgNjQpO1xuICByZWR1Y2UoaCk7XG5cbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHhbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeFtpXSA9IHJbaV07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHtcbiAgICAgIHhbaStqXSArPSBoW2ldICogZFtqXTtcbiAgICB9XG4gIH1cblxuICBtb2RMKHNtLnN1YmFycmF5KDMyKSwgeCk7XG4gIHJldHVybiBzbWxlbjtcbn1cblxuZnVuY3Rpb24gdW5wYWNrbmVnKHIsIHApIHtcbiAgdmFyIHQgPSBnZigpLCBjaGsgPSBnZigpLCBudW0gPSBnZigpLFxuICAgICAgZGVuID0gZ2YoKSwgZGVuMiA9IGdmKCksIGRlbjQgPSBnZigpLFxuICAgICAgZGVuNiA9IGdmKCk7XG5cbiAgc2V0MjU1MTkoclsyXSwgZ2YxKTtcbiAgdW5wYWNrMjU1MTkoclsxXSwgcCk7XG4gIFMobnVtLCByWzFdKTtcbiAgTShkZW4sIG51bSwgRCk7XG4gIFoobnVtLCBudW0sIHJbMl0pO1xuICBBKGRlbiwgclsyXSwgZGVuKTtcblxuICBTKGRlbjIsIGRlbik7XG4gIFMoZGVuNCwgZGVuMik7XG4gIE0oZGVuNiwgZGVuNCwgZGVuMik7XG4gIE0odCwgZGVuNiwgbnVtKTtcbiAgTSh0LCB0LCBkZW4pO1xuXG4gIHBvdzI1MjModCwgdCk7XG4gIE0odCwgdCwgbnVtKTtcbiAgTSh0LCB0LCBkZW4pO1xuICBNKHQsIHQsIGRlbik7XG4gIE0oclswXSwgdCwgZGVuKTtcblxuICBTKGNoaywgclswXSk7XG4gIE0oY2hrLCBjaGssIGRlbik7XG4gIGlmIChuZXEyNTUxOShjaGssIG51bSkpIE0oclswXSwgclswXSwgSSk7XG5cbiAgUyhjaGssIHJbMF0pO1xuICBNKGNoaywgY2hrLCBkZW4pO1xuICBpZiAobmVxMjU1MTkoY2hrLCBudW0pKSByZXR1cm4gLTE7XG5cbiAgaWYgKHBhcjI1NTE5KHJbMF0pID09PSAocFszMV0+PjcpKSBaKHJbMF0sIGdmMCwgclswXSk7XG5cbiAgTShyWzNdLCByWzBdLCByWzFdKTtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zaWduX29wZW4obSwgc20sIG4sIHBrKSB7XG4gIHZhciBpLCBtbGVuO1xuICB2YXIgdCA9IG5ldyBVaW50OEFycmF5KDMyKSwgaCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHAgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV0sXG4gICAgICBxID0gW2dmKCksIGdmKCksIGdmKCksIGdmKCldO1xuXG4gIG1sZW4gPSAtMTtcbiAgaWYgKG4gPCA2NCkgcmV0dXJuIC0xO1xuXG4gIGlmICh1bnBhY2tuZWcocSwgcGspKSByZXR1cm4gLTE7XG5cbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IHNtW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgbVtpKzMyXSA9IHBrW2ldO1xuICBjcnlwdG9faGFzaChoLCBtLCBuKTtcbiAgcmVkdWNlKGgpO1xuICBzY2FsYXJtdWx0KHAsIHEsIGgpO1xuXG4gIHNjYWxhcmJhc2UocSwgc20uc3ViYXJyYXkoMzIpKTtcbiAgYWRkKHAsIHEpO1xuICBwYWNrKHQsIHApO1xuXG4gIG4gLT0gNjQ7XG4gIGlmIChjcnlwdG9fdmVyaWZ5XzMyKHNtLCAwLCB0LCAwKSkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIG1baV0gPSAwO1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIG1baV0gPSBzbVtpICsgNjRdO1xuICBtbGVuID0gbjtcbiAgcmV0dXJuIG1sZW47XG59XG5cbnZhciBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTID0gMjQsXG4gICAgY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyA9IDE2LFxuICAgIGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMgPSAzMixcbiAgICBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfTk9OQ0VCWVRFUyA9IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyxcbiAgICBjcnlwdG9fYm94X1pFUk9CWVRFUyA9IGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTLFxuICAgIGNyeXB0b19ib3hfQk9YWkVST0JZVEVTID0gY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMsXG4gICAgY3J5cHRvX3NpZ25fQllURVMgPSA2NCxcbiAgICBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTID0gNjQsXG4gICAgY3J5cHRvX3NpZ25fU0VFREJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2hhc2hfQllURVMgPSA2NDtcblxubmFjbC5sb3dsZXZlbCA9IHtcbiAgY3J5cHRvX2NvcmVfaHNhbHNhMjA6IGNyeXB0b19jb3JlX2hzYWxzYTIwLFxuICBjcnlwdG9fc3RyZWFtX3hvcjogY3J5cHRvX3N0cmVhbV94b3IsXG4gIGNyeXB0b19zdHJlYW06IGNyeXB0b19zdHJlYW0sXG4gIGNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3I6IGNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3IsXG4gIGNyeXB0b19zdHJlYW1fc2Fsc2EyMDogY3J5cHRvX3N0cmVhbV9zYWxzYTIwLFxuICBjcnlwdG9fb25ldGltZWF1dGg6IGNyeXB0b19vbmV0aW1lYXV0aCxcbiAgY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeTogY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeSxcbiAgY3J5cHRvX3ZlcmlmeV8xNjogY3J5cHRvX3ZlcmlmeV8xNixcbiAgY3J5cHRvX3ZlcmlmeV8zMjogY3J5cHRvX3ZlcmlmeV8zMixcbiAgY3J5cHRvX3NlY3JldGJveDogY3J5cHRvX3NlY3JldGJveCxcbiAgY3J5cHRvX3NlY3JldGJveF9vcGVuOiBjcnlwdG9fc2VjcmV0Ym94X29wZW4sXG4gIGNyeXB0b19zY2FsYXJtdWx0OiBjcnlwdG9fc2NhbGFybXVsdCxcbiAgY3J5cHRvX3NjYWxhcm11bHRfYmFzZTogY3J5cHRvX3NjYWxhcm11bHRfYmFzZSxcbiAgY3J5cHRvX2JveF9iZWZvcmVubTogY3J5cHRvX2JveF9iZWZvcmVubSxcbiAgY3J5cHRvX2JveF9hZnRlcm5tOiBjcnlwdG9fYm94X2FmdGVybm0sXG4gIGNyeXB0b19ib3g6IGNyeXB0b19ib3gsXG4gIGNyeXB0b19ib3hfb3BlbjogY3J5cHRvX2JveF9vcGVuLFxuICBjcnlwdG9fYm94X2tleXBhaXI6IGNyeXB0b19ib3hfa2V5cGFpcixcbiAgY3J5cHRvX2hhc2g6IGNyeXB0b19oYXNoLFxuICBjcnlwdG9fc2lnbjogY3J5cHRvX3NpZ24sXG4gIGNyeXB0b19zaWduX2tleXBhaXI6IGNyeXB0b19zaWduX2tleXBhaXIsXG4gIGNyeXB0b19zaWduX29wZW46IGNyeXB0b19zaWduX29wZW4sXG5cbiAgY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUzogY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUyxcbiAgY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVMsXG4gIGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyxcbiAgY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVM6IGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTLFxuICBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUzogY3J5cHRvX3NjYWxhcm11bHRfQllURVMsXG4gIGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTOiBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUyxcbiAgY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUzogY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUyxcbiAgY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUzogY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUyxcbiAgY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTOiBjcnlwdG9fYm94X0JFRk9SRU5NQllURVMsXG4gIGNyeXB0b19ib3hfTk9OQ0VCWVRFUzogY3J5cHRvX2JveF9OT05DRUJZVEVTLFxuICBjcnlwdG9fYm94X1pFUk9CWVRFUzogY3J5cHRvX2JveF9aRVJPQllURVMsXG4gIGNyeXB0b19ib3hfQk9YWkVST0JZVEVTOiBjcnlwdG9fYm94X0JPWFpFUk9CWVRFUyxcbiAgY3J5cHRvX3NpZ25fQllURVM6IGNyeXB0b19zaWduX0JZVEVTLFxuICBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUzogY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVMsXG4gIGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTOiBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUyxcbiAgY3J5cHRvX3NpZ25fU0VFREJZVEVTOiBjcnlwdG9fc2lnbl9TRUVEQllURVMsXG4gIGNyeXB0b19oYXNoX0JZVEVTOiBjcnlwdG9faGFzaF9CWVRFU1xufTtcblxuLyogSGlnaC1sZXZlbCBBUEkgKi9cblxuZnVuY3Rpb24gY2hlY2tMZW5ndGhzKGssIG4pIHtcbiAgaWYgKGsubGVuZ3RoICE9PSBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBrZXkgc2l6ZScpO1xuICBpZiAobi5sZW5ndGggIT09IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgbm9uY2Ugc2l6ZScpO1xufVxuXG5mdW5jdGlvbiBjaGVja0JveExlbmd0aHMocGssIHNrKSB7XG4gIGlmIChway5sZW5ndGggIT09IGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICBpZiAoc2subGVuZ3RoICE9PSBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzZWNyZXQga2V5IHNpemUnKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBcnJheVR5cGVzKCkge1xuICB2YXIgdCwgaTtcbiAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICBpZiAoKHQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzW2ldKSkgIT09ICdbb2JqZWN0IFVpbnQ4QXJyYXldJylcbiAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmV4cGVjdGVkIHR5cGUgJyArIHQgKyAnLCB1c2UgVWludDhBcnJheScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFudXAoYXJyKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnJbaV0gPSAwO1xufVxuXG4vLyBUT0RPOiBDb21wbGV0ZWx5IHJlbW92ZSB0aGlzIGluIHYwLjE1LlxuaWYgKCFuYWNsLnV0aWwpIHtcbiAgbmFjbC51dGlsID0ge307XG4gIG5hY2wudXRpbC5kZWNvZGVVVEY4ID0gbmFjbC51dGlsLmVuY29kZVVURjggPSBuYWNsLnV0aWwuZW5jb2RlQmFzZTY0ID0gbmFjbC51dGlsLmRlY29kZUJhc2U2NCA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbmFjbC51dGlsIG1vdmVkIGludG8gc2VwYXJhdGUgcGFja2FnZTogaHR0cHM6Ly9naXRodWIuY29tL2RjaGVzdC90d2VldG5hY2wtdXRpbC1qcycpO1xuICB9O1xufVxuXG5uYWNsLnJhbmRvbUJ5dGVzID0gZnVuY3Rpb24obikge1xuICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KG4pO1xuICByYW5kb21ieXRlcyhiLCBuKTtcbiAgcmV0dXJuIGI7XG59O1xuXG5uYWNsLnNlY3JldGJveCA9IGZ1bmN0aW9uKG1zZywgbm9uY2UsIGtleSkge1xuICBjaGVja0FycmF5VHlwZXMobXNnLCBub25jZSwga2V5KTtcbiAgY2hlY2tMZW5ndGhzKGtleSwgbm9uY2UpO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTICsgbXNnLmxlbmd0aCk7XG4gIHZhciBjID0gbmV3IFVpbnQ4QXJyYXkobS5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykgbVtpK2NyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTXSA9IG1zZ1tpXTtcbiAgY3J5cHRvX3NlY3JldGJveChjLCBtLCBtLmxlbmd0aCwgbm9uY2UsIGtleSk7XG4gIHJldHVybiBjLnN1YmFycmF5KGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTKTtcbn07XG5cbm5hY2wuc2VjcmV0Ym94Lm9wZW4gPSBmdW5jdGlvbihib3gsIG5vbmNlLCBrZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKGJveCwgbm9uY2UsIGtleSk7XG4gIGNoZWNrTGVuZ3RocyhrZXksIG5vbmNlKTtcbiAgdmFyIGMgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyArIGJveC5sZW5ndGgpO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KGMubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3gubGVuZ3RoOyBpKyspIGNbaStjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFU10gPSBib3hbaV07XG4gIGlmIChjLmxlbmd0aCA8IDMyKSByZXR1cm4gZmFsc2U7XG4gIGlmIChjcnlwdG9fc2VjcmV0Ym94X29wZW4obSwgYywgYy5sZW5ndGgsIG5vbmNlLCBrZXkpICE9PSAwKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBtLnN1YmFycmF5KGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTKTtcbn07XG5cbm5hY2wuc2VjcmV0Ym94LmtleUxlbmd0aCA9IGNyeXB0b19zZWNyZXRib3hfS0VZQllURVM7XG5uYWNsLnNlY3JldGJveC5ub25jZUxlbmd0aCA9IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUztcbm5hY2wuc2VjcmV0Ym94Lm92ZXJoZWFkTGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVM7XG5cbm5hY2wuc2NhbGFyTXVsdCA9IGZ1bmN0aW9uKG4sIHApIHtcbiAgY2hlY2tBcnJheVR5cGVzKG4sIHApO1xuICBpZiAobi5sZW5ndGggIT09IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBuIHNpemUnKTtcbiAgaWYgKHAubGVuZ3RoICE9PSBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgcCBzaXplJyk7XG4gIHZhciBxID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NjYWxhcm11bHRfQllURVMpO1xuICBjcnlwdG9fc2NhbGFybXVsdChxLCBuLCBwKTtcbiAgcmV0dXJuIHE7XG59O1xuXG5uYWNsLnNjYWxhck11bHQuYmFzZSA9IGZ1bmN0aW9uKG4pIHtcbiAgY2hlY2tBcnJheVR5cGVzKG4pO1xuICBpZiAobi5sZW5ndGggIT09IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBuIHNpemUnKTtcbiAgdmFyIHEgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyk7XG4gIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UocSwgbik7XG4gIHJldHVybiBxO1xufTtcblxubmFjbC5zY2FsYXJNdWx0LnNjYWxhckxlbmd0aCA9IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTO1xubmFjbC5zY2FsYXJNdWx0Lmdyb3VwRWxlbWVudExlbmd0aCA9IGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTO1xuXG5uYWNsLmJveCA9IGZ1bmN0aW9uKG1zZywgbm9uY2UsIHB1YmxpY0tleSwgc2VjcmV0S2V5KSB7XG4gIHZhciBrID0gbmFjbC5ib3guYmVmb3JlKHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIG5hY2wuc2VjcmV0Ym94KG1zZywgbm9uY2UsIGspO1xufTtcblxubmFjbC5ib3guYmVmb3JlID0gZnVuY3Rpb24ocHVibGljS2V5LCBzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgY2hlY2tCb3hMZW5ndGhzKHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgdmFyIGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fYm94X0JFRk9SRU5NQllURVMpO1xuICBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIGs7XG59O1xuXG5uYWNsLmJveC5hZnRlciA9IG5hY2wuc2VjcmV0Ym94O1xuXG5uYWNsLmJveC5vcGVuID0gZnVuY3Rpb24obXNnLCBub25jZSwgcHVibGljS2V5LCBzZWNyZXRLZXkpIHtcbiAgdmFyIGsgPSBuYWNsLmJveC5iZWZvcmUocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gbmFjbC5zZWNyZXRib3gub3Blbihtc2csIG5vbmNlLCBrKTtcbn07XG5cbm5hY2wuYm94Lm9wZW4uYWZ0ZXIgPSBuYWNsLnNlY3JldGJveC5vcGVuO1xuXG5uYWNsLmJveC5rZXlQYWlyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMpO1xuICB2YXIgc2sgPSBuZXcgVWludDhBcnJheShjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTKTtcbiAgY3J5cHRvX2JveF9rZXlwYWlyKHBrLCBzayk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBza307XG59O1xuXG5uYWNsLmJveC5rZXlQYWlyLmZyb21TZWNyZXRLZXkgPSBmdW5jdGlvbihzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHNlY3JldEtleSk7XG4gIGlmIChzZWNyZXRLZXkubGVuZ3RoICE9PSBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTKTtcbiAgY3J5cHRvX3NjYWxhcm11bHRfYmFzZShwaywgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IG5ldyBVaW50OEFycmF5KHNlY3JldEtleSl9O1xufTtcblxubmFjbC5ib3gucHVibGljS2V5TGVuZ3RoID0gY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUztcbm5hY2wuYm94LnNlY3JldEtleUxlbmd0aCA9IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVM7XG5uYWNsLmJveC5zaGFyZWRLZXlMZW5ndGggPSBjcnlwdG9fYm94X0JFRk9SRU5NQllURVM7XG5uYWNsLmJveC5ub25jZUxlbmd0aCA9IGNyeXB0b19ib3hfTk9OQ0VCWVRFUztcbm5hY2wuYm94Lm92ZXJoZWFkTGVuZ3RoID0gbmFjbC5zZWNyZXRib3gub3ZlcmhlYWRMZW5ndGg7XG5cbm5hY2wuc2lnbiA9IGZ1bmN0aW9uKG1zZywgc2VjcmV0S2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2csIHNlY3JldEtleSk7XG4gIGlmIChzZWNyZXRLZXkubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzZWNyZXQga2V5IHNpemUnKTtcbiAgdmFyIHNpZ25lZE1zZyA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTK21zZy5sZW5ndGgpO1xuICBjcnlwdG9fc2lnbihzaWduZWRNc2csIG1zZywgbXNnLmxlbmd0aCwgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIHNpZ25lZE1zZztcbn07XG5cbm5hY2wuc2lnbi5vcGVuID0gZnVuY3Rpb24oc2lnbmVkTXNnLCBwdWJsaWNLZXkpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCduYWNsLnNpZ24ub3BlbiBhY2NlcHRzIDIgYXJndW1lbnRzOyBkaWQgeW91IG1lYW4gdG8gdXNlIG5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnk/Jyk7XG4gIGNoZWNrQXJyYXlUeXBlcyhzaWduZWRNc2csIHB1YmxpY0tleSk7XG4gIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwdWJsaWMga2V5IHNpemUnKTtcbiAgdmFyIHRtcCA9IG5ldyBVaW50OEFycmF5KHNpZ25lZE1zZy5sZW5ndGgpO1xuICB2YXIgbWxlbiA9IGNyeXB0b19zaWduX29wZW4odG1wLCBzaWduZWRNc2csIHNpZ25lZE1zZy5sZW5ndGgsIHB1YmxpY0tleSk7XG4gIGlmIChtbGVuIDwgMCkgcmV0dXJuIG51bGw7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkobWxlbik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykgbVtpXSA9IHRtcFtpXTtcbiAgcmV0dXJuIG07XG59O1xuXG5uYWNsLnNpZ24uZGV0YWNoZWQgPSBmdW5jdGlvbihtc2csIHNlY3JldEtleSkge1xuICB2YXIgc2lnbmVkTXNnID0gbmFjbC5zaWduKG1zZywgc2VjcmV0S2V5KTtcbiAgdmFyIHNpZyA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWcubGVuZ3RoOyBpKyspIHNpZ1tpXSA9IHNpZ25lZE1zZ1tpXTtcbiAgcmV0dXJuIHNpZztcbn07XG5cbm5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnkgPSBmdW5jdGlvbihtc2csIHNpZywgcHVibGljS2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2csIHNpZywgcHVibGljS2V5KTtcbiAgaWYgKHNpZy5sZW5ndGggIT09IGNyeXB0b19zaWduX0JZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNpZ25hdHVyZSBzaXplJyk7XG4gIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwdWJsaWMga2V5IHNpemUnKTtcbiAgdmFyIHNtID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMgKyBtc2cubGVuZ3RoKTtcbiAgdmFyIG0gPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9CWVRFUyArIG1zZy5sZW5ndGgpO1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IGNyeXB0b19zaWduX0JZVEVTOyBpKyspIHNtW2ldID0gc2lnW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSBzbVtpK2NyeXB0b19zaWduX0JZVEVTXSA9IG1zZ1tpXTtcbiAgcmV0dXJuIChjcnlwdG9fc2lnbl9vcGVuKG0sIHNtLCBzbS5sZW5ndGgsIHB1YmxpY0tleSkgPj0gMCk7XG59O1xuXG5uYWNsLnNpZ24ua2V5UGFpciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKTtcbiAgY3J5cHRvX3NpZ25fa2V5cGFpcihwaywgc2spO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogc2t9O1xufTtcblxubmFjbC5zaWduLmtleVBhaXIuZnJvbVNlY3JldEtleSA9IGZ1bmN0aW9uKHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMoc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGsubGVuZ3RoOyBpKyspIHBrW2ldID0gc2VjcmV0S2V5WzMyK2ldO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogbmV3IFVpbnQ4QXJyYXkoc2VjcmV0S2V5KX07XG59O1xuXG5uYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZCA9IGZ1bmN0aW9uKHNlZWQpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHNlZWQpO1xuICBpZiAoc2VlZC5sZW5ndGggIT09IGNyeXB0b19zaWduX1NFRURCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzZWVkIHNpemUnKTtcbiAgdmFyIHBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVMpO1xuICB2YXIgc2sgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKykgc2tbaV0gPSBzZWVkW2ldO1xuICBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzaywgdHJ1ZSk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBza307XG59O1xuXG5uYWNsLnNpZ24ucHVibGljS2V5TGVuZ3RoID0gY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVM7XG5uYWNsLnNpZ24uc2VjcmV0S2V5TGVuZ3RoID0gY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVM7XG5uYWNsLnNpZ24uc2VlZExlbmd0aCA9IGNyeXB0b19zaWduX1NFRURCWVRFUztcbm5hY2wuc2lnbi5zaWduYXR1cmVMZW5ndGggPSBjcnlwdG9fc2lnbl9CWVRFUztcblxubmFjbC5oYXNoID0gZnVuY3Rpb24obXNnKSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2cpO1xuICB2YXIgaCA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19oYXNoX0JZVEVTKTtcbiAgY3J5cHRvX2hhc2goaCwgbXNnLCBtc2cubGVuZ3RoKTtcbiAgcmV0dXJuIGg7XG59O1xuXG5uYWNsLmhhc2guaGFzaExlbmd0aCA9IGNyeXB0b19oYXNoX0JZVEVTO1xuXG5uYWNsLnZlcmlmeSA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHgsIHkpO1xuICAvLyBaZXJvIGxlbmd0aCBhcmd1bWVudHMgYXJlIGNvbnNpZGVyZWQgbm90IGVxdWFsLlxuICBpZiAoeC5sZW5ndGggPT09IDAgfHwgeS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gKHZuKHgsIDAsIHksIDAsIHgubGVuZ3RoKSA9PT0gMCkgPyB0cnVlIDogZmFsc2U7XG59O1xuXG5uYWNsLnNldFBSTkcgPSBmdW5jdGlvbihmbikge1xuICByYW5kb21ieXRlcyA9IGZuO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuICAvLyBJbml0aWFsaXplIFBSTkcgaWYgZW52aXJvbm1lbnQgcHJvdmlkZXMgQ1NQUk5HLlxuICAvLyBJZiBub3QsIG1ldGhvZHMgY2FsbGluZyByYW5kb21ieXRlcyB3aWxsIHRocm93LlxuICB2YXIgY3J5cHRvID0gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gKHNlbGYuY3J5cHRvIHx8IHNlbGYubXNDcnlwdG8pIDogbnVsbDtcbiAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gQnJvd3NlcnMuXG4gICAgdmFyIFFVT1RBID0gNjU1MzY7XG4gICAgbmFjbC5zZXRQUk5HKGZ1bmN0aW9uKHgsIG4pIHtcbiAgICAgIHZhciBpLCB2ID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSArPSBRVU9UQSkge1xuICAgICAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHYuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKG4gLSBpLCBRVU9UQSkpKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHhbaV0gPSB2W2ldO1xuICAgICAgY2xlYW51cCh2KTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBOb2RlLmpzLlxuICAgIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuICAgIGlmIChjcnlwdG8gJiYgY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XG4gICAgICBuYWNsLnNldFBSTkcoZnVuY3Rpb24oeCwgbikge1xuICAgICAgICB2YXIgaSwgdiA9IGNyeXB0by5yYW5kb21CeXRlcyhuKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeFtpXSA9IHZbaV07XG4gICAgICAgIGNsZWFudXAodik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pKCk7XG5cbn0pKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzID8gbW9kdWxlLmV4cG9ydHMgOiAoc2VsZi5uYWNsID0gc2VsZi5uYWNsIHx8IHt9KSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgYSBzaW1wbGUgcGF0aCBVUkxcbiAgICBzaW1wbGVQYXRoUGF0dGVybiA9IC9eKFxcL1xcLz8oPyFcXC8pW15cXD9cXHNdKikoXFw/W15cXHNdKik/JC8sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyByZXNlcnZlZCBmb3IgZGVsaW1pdGluZyBVUkxzLlxuICAgIC8vIFdlIGFjdHVhbGx5IGp1c3QgYXV0by1lc2NhcGUgdGhlc2UuXG4gICAgZGVsaW1zID0gWyc8JywgJz4nLCAnXCInLCAnYCcsICcgJywgJ1xccicsICdcXG4nLCAnXFx0J10sXG5cbiAgICAvLyBSRkMgMjM5NjogY2hhcmFjdGVycyBub3QgYWxsb3dlZCBmb3IgdmFyaW91cyByZWFzb25zLlxuICAgIHVud2lzZSA9IFsneycsICd9JywgJ3wnLCAnXFxcXCcsICdeJywgJ2AnXS5jb25jYXQoZGVsaW1zKSxcblxuICAgIC8vIEFsbG93ZWQgYnkgUkZDcywgYnV0IGNhdXNlIG9mIFhTUyBhdHRhY2tzLiAgQWx3YXlzIGVzY2FwZSB0aGVzZS5cbiAgICBhdXRvRXNjYXBlID0gWydcXCcnXS5jb25jYXQodW53aXNlKSxcbiAgICAvLyBDaGFyYWN0ZXJzIHRoYXQgYXJlIG5ldmVyIGV2ZXIgYWxsb3dlZCBpbiBhIGhvc3RuYW1lLlxuICAgIC8vIE5vdGUgdGhhdCBhbnkgaW52YWxpZCBjaGFycyBhcmUgYWxzbyBoYW5kbGVkLCBidXQgdGhlc2VcbiAgICAvLyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgKmV4cGVjdGVkKiB0byBiZSBzZWVuLCBzbyB3ZSBmYXN0LXBhdGhcbiAgICAvLyB0aGVtLlxuICAgIG5vbkhvc3RDaGFycyA9IFsnJScsICcvJywgJz8nLCAnOycsICcjJ10uY29uY2F0KGF1dG9Fc2NhcGUpLFxuICAgIGhvc3RFbmRpbmdDaGFycyA9IFsnLycsICc/JywgJyMnXSxcbiAgICBob3N0bmFtZU1heExlbiA9IDI1NSxcbiAgICBob3N0bmFtZVBhcnRQYXR0ZXJuID0gL15bK2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oWythLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIHV0aWwuaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCF1dGlsLmlzU3RyaW5nKHVybCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICd1cmwnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCBcIiArIHR5cGVvZiB1cmwpO1xuICB9XG5cbiAgLy8gQ29weSBjaHJvbWUsIElFLCBvcGVyYSBiYWNrc2xhc2gtaGFuZGxpbmcgYmVoYXZpb3IuXG4gIC8vIEJhY2sgc2xhc2hlcyBiZWZvcmUgdGhlIHF1ZXJ5IHN0cmluZyBnZXQgY29udmVydGVkIHRvIGZvcndhcmQgc2xhc2hlc1xuICAvLyBTZWU6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yNTkxNlxuICB2YXIgcXVlcnlJbmRleCA9IHVybC5pbmRleE9mKCc/JyksXG4gICAgICBzcGxpdHRlciA9XG4gICAgICAgICAgKHF1ZXJ5SW5kZXggIT09IC0xICYmIHF1ZXJ5SW5kZXggPCB1cmwuaW5kZXhPZignIycpKSA/ICc/JyA6ICcjJyxcbiAgICAgIHVTcGxpdCA9IHVybC5zcGxpdChzcGxpdHRlciksXG4gICAgICBzbGFzaFJlZ2V4ID0gL1xcXFwvZztcbiAgdVNwbGl0WzBdID0gdVNwbGl0WzBdLnJlcGxhY2Uoc2xhc2hSZWdleCwgJy8nKTtcbiAgdXJsID0gdVNwbGl0LmpvaW4oc3BsaXR0ZXIpO1xuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIGlmICghc2xhc2hlc0Rlbm90ZUhvc3QgJiYgdXJsLnNwbGl0KCcjJykubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gVHJ5IGZhc3QgcGF0aCByZWdleHBcbiAgICB2YXIgc2ltcGxlUGF0aCA9IHNpbXBsZVBhdGhQYXR0ZXJuLmV4ZWMocmVzdCk7XG4gICAgaWYgKHNpbXBsZVBhdGgpIHtcbiAgICAgIHRoaXMucGF0aCA9IHJlc3Q7XG4gICAgICB0aGlzLmhyZWYgPSByZXN0O1xuICAgICAgdGhpcy5wYXRobmFtZSA9IHNpbXBsZVBhdGhbMV07XG4gICAgICBpZiAoc2ltcGxlUGF0aFsyXSkge1xuICAgICAgICB0aGlzLnNlYXJjaCA9IHNpbXBsZVBhdGhbMl07XG4gICAgICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMuc2VhcmNoLnN1YnN0cigxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuc2VhcmNoLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55Y29kZWQgcmVwcmVzZW50YXRpb24gb2YgXCJkb21haW5cIi5cbiAgICAgIC8vIEl0IG9ubHkgY29udmVydHMgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHRoYXRcbiAgICAgIC8vIGhhdmUgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIEFTQ0lJLW9ubHkuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gcHVueWNvZGUudG9BU0NJSSh0aGlzLmhvc3RuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICBpZiAocmVzdC5pbmRleE9mKGFlKSA9PT0gLTEpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmICh1dGlsLmlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIHV0aWwuaXNPYmplY3QodGhpcy5xdWVyeSkgJiZcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMucXVlcnkpLmxlbmd0aCkge1xuICAgIHF1ZXJ5ID0gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHRoaXMucXVlcnkpO1xuICB9XG5cbiAgdmFyIHNlYXJjaCA9IHRoaXMuc2VhcmNoIHx8IChxdWVyeSAmJiAoJz8nICsgcXVlcnkpKSB8fCAnJztcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuc3Vic3RyKC0xKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOic7XG5cbiAgLy8gb25seSB0aGUgc2xhc2hlZFByb3RvY29scyBnZXQgdGhlIC8vLiAgTm90IG1haWx0bzosIHhtcHA6LCBldGMuXG4gIC8vIHVubGVzcyB0aGV5IGhhZCB0aGVtIHRvIGJlZ2luIHdpdGguXG4gIGlmICh0aGlzLnNsYXNoZXMgfHxcbiAgICAgICghcHJvdG9jb2wgfHwgc2xhc2hlZFByb3RvY29sW3Byb3RvY29sXSkgJiYgaG9zdCAhPT0gZmFsc2UpIHtcbiAgICBob3N0ID0gJy8vJyArIChob3N0IHx8ICcnKTtcbiAgICBpZiAocGF0aG5hbWUgJiYgcGF0aG5hbWUuY2hhckF0KDApICE9PSAnLycpIHBhdGhuYW1lID0gJy8nICsgcGF0aG5hbWU7XG4gIH0gZWxzZSBpZiAoIWhvc3QpIHtcbiAgICBob3N0ID0gJyc7XG4gIH1cblxuICBpZiAoaGFzaCAmJiBoYXNoLmNoYXJBdCgwKSAhPT0gJyMnKSBoYXNoID0gJyMnICsgaGFzaDtcbiAgaWYgKHNlYXJjaCAmJiBzZWFyY2guY2hhckF0KDApICE9PSAnPycpIHNlYXJjaCA9ICc/JyArIHNlYXJjaDtcblxuICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1s/I10vZywgZnVuY3Rpb24obWF0Y2gpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG1hdGNoKTtcbiAgfSk7XG4gIHNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKCcjJywgJyUyMycpO1xuXG4gIHJldHVybiBwcm90b2NvbCArIGhvc3QgKyBwYXRobmFtZSArIHNlYXJjaCArIGhhc2g7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlKHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmUocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICByZXR1cm4gdGhpcy5yZXNvbHZlT2JqZWN0KHVybFBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSkpLmZvcm1hdCgpO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZU9iamVjdChzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIGlmICghc291cmNlKSByZXR1cm4gcmVsYXRpdmU7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlT2JqZWN0KHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlT2JqZWN0ID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgaWYgKHV0aWwuaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIHZhciB0a2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICBmb3IgKHZhciB0ayA9IDA7IHRrIDwgdGtleXMubGVuZ3RoOyB0aysrKSB7XG4gICAgdmFyIHRrZXkgPSB0a2V5c1t0a107XG4gICAgcmVzdWx0W3RrZXldID0gdGhpc1t0a2V5XTtcbiAgfVxuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgdmFyIHJrZXlzID0gT2JqZWN0LmtleXMocmVsYXRpdmUpO1xuICAgIGZvciAodmFyIHJrID0gMDsgcmsgPCBya2V5cy5sZW5ndGg7IHJrKyspIHtcbiAgICAgIHZhciBya2V5ID0gcmtleXNbcmtdO1xuICAgICAgaWYgKHJrZXkgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtya2V5XSA9IHJlbGF0aXZlW3JrZXldO1xuICAgIH1cblxuICAgIC8vdXJsUGFyc2UgYXBwZW5kcyB0cmFpbGluZyAvIHRvIHVybHMgbGlrZSBodHRwOi8vd3d3LmV4YW1wbGUuY29tXG4gICAgaWYgKHNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdICYmXG4gICAgICAgIHJlc3VsdC5ob3N0bmFtZSAmJiAhcmVzdWx0LnBhdGhuYW1lKSB7XG4gICAgICByZXN1bHQucGF0aCA9IHJlc3VsdC5wYXRobmFtZSA9ICcvJztcbiAgICB9XG5cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKHJlbGF0aXZlLnByb3RvY29sICYmIHJlbGF0aXZlLnByb3RvY29sICE9PSByZXN1bHQucHJvdG9jb2wpIHtcbiAgICAvLyBpZiBpdCdzIGEga25vd24gdXJsIHByb3RvY29sLCB0aGVuIGNoYW5naW5nXG4gICAgLy8gdGhlIHByb3RvY29sIGRvZXMgd2VpcmQgdGhpbmdzXG4gICAgLy8gZmlyc3QsIGlmIGl0J3Mgbm90IGZpbGU6LCB0aGVuIHdlIE1VU1QgaGF2ZSBhIGhvc3QsXG4gICAgLy8gYW5kIGlmIHRoZXJlIHdhcyBhIHBhdGhcbiAgICAvLyB0byBiZWdpbiB3aXRoLCB0aGVuIHdlIE1VU1QgaGF2ZSBhIHBhdGguXG4gICAgLy8gaWYgaXQgaXMgZmlsZTosIHRoZW4gdGhlIGhvc3QgaXMgZHJvcHBlZCxcbiAgICAvLyBiZWNhdXNlIHRoYXQncyBrbm93biB0byBiZSBob3N0bGVzcy5cbiAgICAvLyBhbnl0aGluZyBlbHNlIGlzIGFzc3VtZWQgdG8gYmUgYWJzb2x1dGUuXG4gICAgaWYgKCFzbGFzaGVkUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHJlbGF0aXZlKTtcbiAgICAgIGZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICAgICAgICB2YXIgayA9IGtleXNbdl07XG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghdXRpbC5pc051bGxPclVuZGVmaW5lZChyZWxhdGl2ZS5zZWFyY2gpKSB7XG4gICAgLy8ganVzdCBwdWxsIG91dCB0aGUgc2VhcmNoLlxuICAgIC8vIGxpa2UgaHJlZj0nP2ZvbycuXG4gICAgLy8gUHV0IHRoaXMgYWZ0ZXIgdGhlIG90aGVyIHR3byBjYXNlcyBiZWNhdXNlIGl0IHNpbXBsaWZpZXMgdGhlIGJvb2xlYW5zXG4gICAgaWYgKHBzeWNob3RpYykge1xuICAgICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBzcmNQYXRoLnNoaWZ0KCk7XG4gICAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgICAvL3RoaXMgZXNwZWNpYWxseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghdXRpbC5pc051bGwocmVzdWx0LnBhdGhuYW1lKSB8fCAhdXRpbC5pc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgfHwgc3JjUGF0aC5sZW5ndGggPiAxKSAmJlxuICAgICAgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fCBsYXN0ID09PSAnJyk7XG5cbiAgLy8gc3RyaXAgc2luZ2xlIGRvdHMsIHJlc29sdmUgZG91YmxlIGRvdHMgdG8gcGFyZW50IGRpclxuICAvLyBpZiB0aGUgcGF0aCB0cmllcyB0byBnbyBhYm92ZSB0aGUgcm9vdCwgYHVwYCBlbmRzIHVwID4gMFxuICB2YXIgdXAgPSAwO1xuICBmb3IgKHZhciBpID0gc3JjUGF0aC5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGFzdCA9IHNyY1BhdGhbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFsbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIXV0aWwuaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIXV0aWwuaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgfVxuICByZXN1bHQuYXV0aCA9IHJlbGF0aXZlLmF1dGggfHwgcmVzdWx0LmF1dGg7XG4gIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5VcmwucHJvdG90eXBlLnBhcnNlSG9zdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaG9zdCA9IHRoaXMuaG9zdDtcbiAgdmFyIHBvcnQgPSBwb3J0UGF0dGVybi5leGVjKGhvc3QpO1xuICBpZiAocG9ydCkge1xuICAgIHBvcnQgPSBwb3J0WzBdO1xuICAgIGlmIChwb3J0ICE9PSAnOicpIHtcbiAgICAgIHRoaXMucG9ydCA9IHBvcnQuc3Vic3RyKDEpO1xuICAgIH1cbiAgICBob3N0ID0gaG9zdC5zdWJzdHIoMCwgaG9zdC5sZW5ndGggLSBwb3J0Lmxlbmd0aCk7XG4gIH1cbiAgaWYgKGhvc3QpIHRoaXMuaG9zdG5hbWUgPSBob3N0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzU3RyaW5nOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gdHlwZW9mKGFyZykgPT09ICdzdHJpbmcnO1xuICB9LFxuICBpc09iamVjdDogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZihhcmcpID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG4gIH0sXG4gIGlzTnVsbDogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbiAgfSxcbiAgaXNOdWxsT3JVbmRlZmluZWQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBhcmcgPT0gbnVsbDtcbiAgfVxufTtcbiIsIlxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlcHJlY2F0ZTtcblxuLyoqXG4gKiBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICogUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLm5vRGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbiAqXG4gKiBJZiBgbG9jYWxTdG9yYWdlLnRocm93RGVwcmVjYXRpb24gPSB0cnVlYCBpcyBzZXQsIHRoZW4gZGVwcmVjYXRlZCBmdW5jdGlvbnNcbiAqIHdpbGwgdGhyb3cgYW4gRXJyb3Igd2hlbiBpbnZva2VkLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudHJhY2VEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCBpbnZva2UgYGNvbnNvbGUudHJhY2UoKWAgaW5zdGVhZCBvZiBgY29uc29sZS5lcnJvcigpYC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIHRoZSBmdW5jdGlvbiB0byBkZXByZWNhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtc2cgLSB0aGUgc3RyaW5nIHRvIHByaW50IHRvIHRoZSBjb25zb2xlIHdoZW4gYGZuYCBpcyBpbnZva2VkXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IGEgbmV3IFwiZGVwcmVjYXRlZFwiIHZlcnNpb24gb2YgYGZuYFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBkZXByZWNhdGUgKGZuLCBtc2cpIHtcbiAgaWYgKGNvbmZpZygnbm9EZXByZWNhdGlvbicpKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAoY29uZmlnKCd0aHJvd0RlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZygndHJhY2VEZXByZWNhdGlvbicpKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2Fybihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgYGxvY2FsU3RvcmFnZWAgZm9yIGJvb2xlYW4gdmFsdWVzIGZvciB0aGUgZ2l2ZW4gYG5hbWVgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNvbmZpZyAobmFtZSkge1xuICAvLyBhY2Nlc3NpbmcgZ2xvYmFsLmxvY2FsU3RvcmFnZSBjYW4gdHJpZ2dlciBhIERPTUV4Y2VwdGlvbiBpbiBzYW5kYm94ZWQgaWZyYW1lc1xuICB0cnkge1xuICAgIGlmICghZ2xvYmFsLmxvY2FsU3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB2YWwgPSBnbG9iYWwubG9jYWxTdG9yYWdlW25hbWVdO1xuICBpZiAobnVsbCA9PSB2YWwpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNCdWZmZXIoYXJnKSB7XG4gIHJldHVybiBhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCdcbiAgICAmJiB0eXBlb2YgYXJnLmNvcHkgPT09ICdmdW5jdGlvbidcbiAgICAmJiB0eXBlb2YgYXJnLmZpbGwgPT09ICdmdW5jdGlvbidcbiAgICAmJiB0eXBlb2YgYXJnLnJlYWRVSW50OCA9PT0gJ2Z1bmN0aW9uJztcbn0iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5leHBvcnRzLmZvcm1hdCA9IGZ1bmN0aW9uKGYpIHtcbiAgaWYgKCFpc1N0cmluZyhmKSkge1xuICAgIHZhciBvYmplY3RzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaChpbnNwZWN0KGFyZ3VtZW50c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBzdHIgPSBTdHJpbmcoZikucmVwbGFjZShmb3JtYXRSZWdFeHAsIGZ1bmN0aW9uKHgpIHtcbiAgICBpZiAoeCA9PT0gJyUlJykgcmV0dXJuICclJztcbiAgICBpZiAoaSA+PSBsZW4pIHJldHVybiB4O1xuICAgIHN3aXRjaCAoeCkge1xuICAgICAgY2FzZSAnJXMnOiByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclZCc6IHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVqJzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7XG4gICAgaWYgKGlzTnVsbCh4KSB8fCAhaXNPYmplY3QoeCkpIHtcbiAgICAgIHN0ciArPSAnICcgKyB4O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJyAnICsgaW5zcGVjdCh4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLy8gTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbi8vIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4vLyBJZiAtLW5vLWRlcHJlY2F0aW9uIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuZXhwb3J0cy5kZXByZWNhdGUgPSBmdW5jdGlvbihmbiwgbXNnKSB7XG4gIC8vIEFsbG93IGZvciBkZXByZWNhdGluZyB0aGluZ3MgaW4gdGhlIHByb2Nlc3Mgb2Ygc3RhcnRpbmcgdXAuXG4gIGlmIChpc1VuZGVmaW5lZChnbG9iYWwucHJvY2VzcykpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy5kZXByZWNhdGUoZm4sIG1zZykuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKHByb2Nlc3Mubm9EZXByZWNhdGlvbiA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudGhyb3dEZXByZWNhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy50cmFjZURlcHJlY2F0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59O1xuXG5cbnZhciBkZWJ1Z3MgPSB7fTtcbnZhciBkZWJ1Z0Vudmlyb247XG5leHBvcnRzLmRlYnVnbG9nID0gZnVuY3Rpb24oc2V0KSB7XG4gIGlmIChpc1VuZGVmaW5lZChkZWJ1Z0Vudmlyb24pKVxuICAgIGRlYnVnRW52aXJvbiA9IHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJyc7XG4gIHNldCA9IHNldC50b1VwcGVyQ2FzZSgpO1xuICBpZiAoIWRlYnVnc1tzZXRdKSB7XG4gICAgaWYgKG5ldyBSZWdFeHAoJ1xcXFxiJyArIHNldCArICdcXFxcYicsICdpJykudGVzdChkZWJ1Z0Vudmlyb24pKSB7XG4gICAgICB2YXIgcGlkID0gcHJvY2Vzcy5waWQ7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbXNnID0gZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignJXMgJWQ6ICVzJywgc2V0LCBwaWQsIG1zZyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge307XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWJ1Z3Nbc2V0XTtcbn07XG5cblxuLyoqXG4gKiBFY2hvcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJ5cyB0byBwcmludCB0aGUgdmFsdWUgb3V0XG4gKiBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcHJpbnQgb3V0LlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgb3B0aW9ucyBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIG91dHB1dC5cbiAqL1xuLyogbGVnYWN5OiBvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMqL1xuZnVuY3Rpb24gaW5zcGVjdChvYmosIG9wdHMpIHtcbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIHZhciBjdHggPSB7XG4gICAgc2VlbjogW10sXG4gICAgc3R5bGl6ZTogc3R5bGl6ZU5vQ29sb3JcbiAgfTtcbiAgLy8gbGVnYWN5Li4uXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpIGN0eC5kZXB0aCA9IGFyZ3VtZW50c1syXTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gNCkgY3R4LmNvbG9ycyA9IGFyZ3VtZW50c1szXTtcbiAgaWYgKGlzQm9vbGVhbihvcHRzKSkge1xuICAgIC8vIGxlZ2FjeS4uLlxuICAgIGN0eC5zaG93SGlkZGVuID0gb3B0cztcbiAgfSBlbHNlIGlmIChvcHRzKSB7XG4gICAgLy8gZ290IGFuIFwib3B0aW9uc1wiIG9iamVjdFxuICAgIGV4cG9ydHMuX2V4dGVuZChjdHgsIG9wdHMpO1xuICB9XG4gIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5zaG93SGlkZGVuKSkgY3R4LnNob3dIaWRkZW4gPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5kZXB0aCkpIGN0eC5kZXB0aCA9IDI7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY29sb3JzKSkgY3R4LmNvbG9ycyA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmN1c3RvbUluc3BlY3QpKSBjdHguY3VzdG9tSW5zcGVjdCA9IHRydWU7XG4gIGlmIChjdHguY29sb3JzKSBjdHguc3R5bGl6ZSA9IHN0eWxpemVXaXRoQ29sb3I7XG4gIHJldHVybiBmb3JtYXRWYWx1ZShjdHgsIG9iaiwgY3R4LmRlcHRoKTtcbn1cbmV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7XG5cblxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlI2dyYXBoaWNzXG5pbnNwZWN0LmNvbG9ycyA9IHtcbiAgJ2JvbGQnIDogWzEsIDIyXSxcbiAgJ2l0YWxpYycgOiBbMywgMjNdLFxuICAndW5kZXJsaW5lJyA6IFs0LCAyNF0sXG4gICdpbnZlcnNlJyA6IFs3LCAyN10sXG4gICd3aGl0ZScgOiBbMzcsIDM5XSxcbiAgJ2dyZXknIDogWzkwLCAzOV0sXG4gICdibGFjaycgOiBbMzAsIDM5XSxcbiAgJ2JsdWUnIDogWzM0LCAzOV0sXG4gICdjeWFuJyA6IFszNiwgMzldLFxuICAnZ3JlZW4nIDogWzMyLCAzOV0sXG4gICdtYWdlbnRhJyA6IFszNSwgMzldLFxuICAncmVkJyA6IFszMSwgMzldLFxuICAneWVsbG93JyA6IFszMywgMzldXG59O1xuXG4vLyBEb24ndCB1c2UgJ2JsdWUnIG5vdCB2aXNpYmxlIG9uIGNtZC5leGVcbmluc3BlY3Quc3R5bGVzID0ge1xuICAnc3BlY2lhbCc6ICdjeWFuJyxcbiAgJ251bWJlcic6ICd5ZWxsb3cnLFxuICAnYm9vbGVhbic6ICd5ZWxsb3cnLFxuICAndW5kZWZpbmVkJzogJ2dyZXknLFxuICAnbnVsbCc6ICdib2xkJyxcbiAgJ3N0cmluZyc6ICdncmVlbicsXG4gICdkYXRlJzogJ21hZ2VudGEnLFxuICAvLyBcIm5hbWVcIjogaW50ZW50aW9uYWxseSBub3Qgc3R5bGluZ1xuICAncmVnZXhwJzogJ3JlZCdcbn07XG5cblxuZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICB2YXIgc3R5bGUgPSBpbnNwZWN0LnN0eWxlc1tzdHlsZVR5cGVdO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIHJldHVybiAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzBdICsgJ20nICsgc3RyICtcbiAgICAgICAgICAgJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVsxXSArICdtJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5cblxuZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgcmV0dXJuIHN0cjtcbn1cblxuXG5mdW5jdGlvbiBhcnJheVRvSGFzaChhcnJheSkge1xuICB2YXIgaGFzaCA9IHt9O1xuXG4gIGFycmF5LmZvckVhY2goZnVuY3Rpb24odmFsLCBpZHgpIHtcbiAgICBoYXNoW3ZhbF0gPSB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gaGFzaDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHtcbiAgLy8gUHJvdmlkZSBhIGhvb2sgZm9yIHVzZXItc3BlY2lmaWVkIGluc3BlY3QgZnVuY3Rpb25zLlxuICAvLyBDaGVjayB0aGF0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIGFuIGluc3BlY3QgZnVuY3Rpb24gb24gaXRcbiAgaWYgKGN0eC5jdXN0b21JbnNwZWN0ICYmXG4gICAgICB2YWx1ZSAmJlxuICAgICAgaXNGdW5jdGlvbih2YWx1ZS5pbnNwZWN0KSAmJlxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdXRpbCBtb2R1bGUsIGl0J3MgaW5zcGVjdCBmdW5jdGlvbiBpcyBzcGVjaWFsXG4gICAgICB2YWx1ZS5pbnNwZWN0ICE9PSBleHBvcnRzLmluc3BlY3QgJiZcbiAgICAgIC8vIEFsc28gZmlsdGVyIG91dCBhbnkgcHJvdG90eXBlIG9iamVjdHMgdXNpbmcgdGhlIGNpcmN1bGFyIGNoZWNrLlxuICAgICAgISh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IHZhbHVlKSkge1xuICAgIHZhciByZXQgPSB2YWx1ZS5pbnNwZWN0KHJlY3Vyc2VUaW1lcywgY3R4KTtcbiAgICBpZiAoIWlzU3RyaW5nKHJldCkpIHtcbiAgICAgIHJldCA9IGZvcm1hdFZhbHVlKGN0eCwgcmV0LCByZWN1cnNlVGltZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLy8gUHJpbWl0aXZlIHR5cGVzIGNhbm5vdCBoYXZlIHByb3BlcnRpZXNcbiAgdmFyIHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKTtcbiAgaWYgKHByaW1pdGl2ZSkge1xuICAgIHJldHVybiBwcmltaXRpdmU7XG4gIH1cblxuICAvLyBMb29rIHVwIHRoZSBrZXlzIG9mIHRoZSBvYmplY3QuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICB2YXIgdmlzaWJsZUtleXMgPSBhcnJheVRvSGFzaChrZXlzKTtcblxuICBpZiAoY3R4LnNob3dIaWRkZW4pIHtcbiAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpO1xuICB9XG5cbiAgLy8gSUUgZG9lc24ndCBtYWtlIGVycm9yIGZpZWxkcyBub24tZW51bWVyYWJsZVxuICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvZHd3NTJzYnQodj12cy45NCkuYXNweFxuICBpZiAoaXNFcnJvcih2YWx1ZSlcbiAgICAgICYmIChrZXlzLmluZGV4T2YoJ21lc3NhZ2UnKSA+PSAwIHx8IGtleXMuaW5kZXhPZignZGVzY3JpcHRpb24nKSA+PSAwKSkge1xuICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICAvLyBTb21lIHR5cGUgb2Ygb2JqZWN0IHdpdGhvdXQgcHJvcGVydGllcyBjYW4gYmUgc2hvcnRjdXR0ZWQuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW0Z1bmN0aW9uJyArIG5hbWUgKyAnXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfVxuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdkYXRlJyk7XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYmFzZSA9ICcnLCBhcnJheSA9IGZhbHNlLCBicmFjZXMgPSBbJ3snLCAnfSddO1xuXG4gIC8vIE1ha2UgQXJyYXkgc2F5IHRoYXQgdGhleSBhcmUgQXJyYXlcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgYXJyYXkgPSB0cnVlO1xuICAgIGJyYWNlcyA9IFsnWycsICddJ107XG4gIH1cblxuICAvLyBNYWtlIGZ1bmN0aW9ucyBzYXkgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbnNcbiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgdmFyIG4gPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICBiYXNlID0gJyBbRnVuY3Rpb24nICsgbiArICddJztcbiAgfVxuXG4gIC8vIE1ha2UgUmVnRXhwcyBzYXkgdGhhdCB0aGV5IGFyZSBSZWdFeHBzXG4gIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZGF0ZXMgd2l0aCBwcm9wZXJ0aWVzIGZpcnN0IHNheSB0aGUgZGF0ZVxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZXJyb3Igd2l0aCBtZXNzYWdlIGZpcnN0IHNheSB0aGUgZXJyb3JcbiAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiAoIWFycmF5IHx8IHZhbHVlLmxlbmd0aCA9PSAwKSkge1xuICAgIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgYnJhY2VzWzFdO1xuICB9XG5cbiAgaWYgKHJlY3Vyc2VUaW1lcyA8IDApIHtcbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tPYmplY3RdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cblxuICBjdHguc2Vlbi5wdXNoKHZhbHVlKTtcblxuICB2YXIgb3V0cHV0O1xuICBpZiAoYXJyYXkpIHtcbiAgICBvdXRwdXQgPSBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKTtcbiAgfSBlbHNlIHtcbiAgICBvdXRwdXQgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGN0eC5zZWVuLnBvcCgpO1xuXG4gIHJldHVybiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhciBzaW1wbGUgPSAnXFwnJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKSArICdcXCcnO1xuICAgIHJldHVybiBjdHguc3R5bGl6ZShzaW1wbGUsICdzdHJpbmcnKTtcbiAgfVxuICBpZiAoaXNOdW1iZXIodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnbnVtYmVyJyk7XG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnYm9vbGVhbicpO1xuICAvLyBGb3Igc29tZSByZWFzb24gdHlwZW9mIG51bGwgaXMgXCJvYmplY3RcIiwgc28gc3BlY2lhbCBjYXNlIGhlcmUuXG4gIGlmIChpc051bGwodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnbnVsbCcsICdudWxsJyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0RXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuICdbJyArIEVycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSArICddJztcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkodmFsdWUsIFN0cmluZyhpKSkpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAgU3RyaW5nKGkpLCB0cnVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKCcnKTtcbiAgICB9XG4gIH1cbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmICgha2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBrZXksIHRydWUpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpIHtcbiAgdmFyIG5hbWUsIHN0ciwgZGVzYztcbiAgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIGtleSkgfHwgeyB2YWx1ZTogdmFsdWVba2V5XSB9O1xuICBpZiAoZGVzYy5nZXQpIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyL1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmICghaGFzT3duUHJvcGVydHkodmlzaWJsZUtleXMsIGtleSkpIHtcbiAgICBuYW1lID0gJ1snICsga2V5ICsgJ10nO1xuICB9XG4gIGlmICghc3RyKSB7XG4gICAgaWYgKGN0eC5zZWVuLmluZGV4T2YoZGVzYy52YWx1ZSkgPCAwKSB7XG4gICAgICBpZiAoaXNOdWxsKHJlY3Vyc2VUaW1lcykpIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgcmVjdXJzZVRpbWVzIC0gMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcbiAgICAgICAgaWYgKGFycmF5KSB7XG4gICAgICAgICAgc3RyID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpLnN1YnN0cigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgPSAnXFxuJyArIHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tDaXJjdWxhcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICBpZiAoYXJyYXkgJiYga2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgbmFtZSA9IEpTT04uc3RyaW5naWZ5KCcnICsga2V5KTtcbiAgICBpZiAobmFtZS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLykpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigxLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICduYW1lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICdzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZSArICc6ICcgKyBzdHI7XG59XG5cblxuZnVuY3Rpb24gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpIHtcbiAgdmFyIG51bUxpbmVzRXN0ID0gMDtcbiAgdmFyIGxlbmd0aCA9IG91dHB1dC5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgY3VyKSB7XG4gICAgbnVtTGluZXNFc3QrKztcbiAgICBpZiAoY3VyLmluZGV4T2YoJ1xcbicpID49IDApIG51bUxpbmVzRXN0Kys7XG4gICAgcmV0dXJuIHByZXYgKyBjdXIucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csICcnKS5sZW5ndGggKyAxO1xuICB9LCAwKTtcblxuICBpZiAobGVuZ3RoID4gNjApIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICtcbiAgICAgICAgICAgKGJhc2UgPT09ICcnID8gJycgOiBiYXNlICsgJ1xcbiAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIG91dHB1dC5qb2luKCcsXFxuICAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIGJyYWNlc1sxXTtcbiAgfVxuXG4gIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgJyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnICcgKyBicmFjZXNbMV07XG59XG5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cbmZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gaXNPYmplY3QocmUpICYmIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gaXNPYmplY3QoZCkgJiYgb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGUpICYmXG4gICAgICAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSByZXF1aXJlKCcuL3N1cHBvcnQvaXNCdWZmZXInKTtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuXG5cbmZ1bmN0aW9uIHBhZChuKSB7XG4gIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuLnRvU3RyaW5nKDEwKSA6IG4udG9TdHJpbmcoMTApO1xufVxuXG5cbnZhciBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJyxcbiAgICAgICAgICAgICAgJ09jdCcsICdOb3YnLCAnRGVjJ107XG5cbi8vIDI2IEZlYiAxNjoxOTozNFxuZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKCk7XG4gIHZhciB0aW1lID0gW3BhZChkLmdldEhvdXJzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRNaW51dGVzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRTZWNvbmRzKCkpXS5qb2luKCc6Jyk7XG4gIHJldHVybiBbZC5nZXREYXRlKCksIG1vbnRoc1tkLmdldE1vbnRoKCldLCB0aW1lXS5qb2luKCcgJyk7XG59XG5cblxuLy8gbG9nIGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgdG8gY29uc29sZS5sb2cgdGhhdCBwcmVwZW5kcyBhIHRpbWVzdGFtcFxuZXhwb3J0cy5sb2cgPSBmdW5jdGlvbigpIHtcbiAgY29uc29sZS5sb2coJyVzIC0gJXMnLCB0aW1lc3RhbXAoKSwgZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKSk7XG59O1xuXG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFRoZSBGdW5jdGlvbi5wcm90b3R5cGUuaW5oZXJpdHMgZnJvbSBsYW5nLmpzIHJld3JpdHRlbiBhcyBhIHN0YW5kYWxvbmVcbiAqIGZ1bmN0aW9uIChub3Qgb24gRnVuY3Rpb24ucHJvdG90eXBlKS4gTk9URTogSWYgdGhpcyBmaWxlIGlzIHRvIGJlIGxvYWRlZFxuICogZHVyaW5nIGJvb3RzdHJhcHBpbmcgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXdyaXR0ZW4gdXNpbmcgc29tZSBuYXRpdmVcbiAqIGZ1bmN0aW9ucyBhcyBwcm90b3R5cGUgc2V0dXAgdXNpbmcgbm9ybWFsIEphdmFTY3JpcHQgZG9lcyBub3Qgd29yayBhc1xuICogZXhwZWN0ZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcgKHNlZSBtaXJyb3IuanMgaW4gcjExNDkwMykuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byBpbmhlcml0IHRoZVxuICogICAgIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBpbmhlcml0IHByb3RvdHlwZSBmcm9tLlxuICovXG5leHBvcnRzLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZXhwb3J0cy5fZXh0ZW5kID0gZnVuY3Rpb24ob3JpZ2luLCBhZGQpIHtcbiAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgYWRkIGlzbid0IGFuIG9iamVjdFxuICBpZiAoIWFkZCB8fCAhaXNPYmplY3QoYWRkKSkgcmV0dXJuIG9yaWdpbjtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFkZCk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICBvcmlnaW5ba2V5c1tpXV0gPSBhZGRba2V5c1tpXV07XG4gIH1cbiAgcmV0dXJuIG9yaWdpbjtcbn07XG5cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG4iLCJ2YXIgdjEgPSByZXF1aXJlKCcuL3YxJyk7XG52YXIgdjQgPSByZXF1aXJlKCcuL3Y0Jyk7XG5cbnZhciB1dWlkID0gdjQ7XG51dWlkLnYxID0gdjE7XG51dWlkLnY0ID0gdjQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXVpZDtcbiIsIi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG52YXIgYnl0ZVRvSGV4ID0gW107XG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7XG59XG5cbmZ1bmN0aW9uIGJ5dGVzVG9VdWlkKGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gb2Zmc2V0IHx8IDA7XG4gIHZhciBidGggPSBieXRlVG9IZXg7XG4gIHJldHVybiAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xuIiwiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gIEluIHRoZVxuLy8gYnJvd3NlciB0aGlzIGlzIGEgbGl0dGxlIGNvbXBsaWNhdGVkIGR1ZSB0byB1bmtub3duIHF1YWxpdHkgb2YgTWF0aC5yYW5kb20oKVxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxuLy8gZmVhdHVyZS1kZXRlY3Rpb25cbnZhciBybmc7XG5cbnZhciBjcnlwdG8gPSBnbG9iYWwuY3J5cHRvIHx8IGdsb2JhbC5tc0NyeXB0bzsgLy8gZm9yIElFIDExXG5pZiAoY3J5cHRvICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgLy8gV0hBVFdHIGNyeXB0byBSTkcgLSBodHRwOi8vd2lraS53aGF0d2cub3JnL3dpa2kvQ3J5cHRvXG4gIHZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgcm5nID0gZnVuY3Rpb24gd2hhdHdnUk5HKCkge1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMocm5kczgpO1xuICAgIHJldHVybiBybmRzODtcbiAgfTtcbn1cblxuaWYgKCFybmcpIHtcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxuICAvL1xuICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdXNlIE1hdGgucmFuZG9tKCkuICBJdCdzIGZhc3QsIGJ1dCBpcyBvZiB1bnNwZWNpZmllZFxuICAvLyBxdWFsaXR5LlxuICB2YXIgIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xuICBybmcgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGlmICgoaSAmIDB4MDMpID09PSAwKSByID0gTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMDAwO1xuICAgICAgcm5kc1tpXSA9IHIgPj4+ICgoaSAmIDB4MDMpIDw8IDMpICYgMHhmZjtcbiAgICB9XG5cbiAgICByZXR1cm4gcm5kcztcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBybmc7XG4iLCIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiAgV2UgZmVhdHVyZVxuLy8gZGV0ZWN0IHRvIGRldGVybWluZSB0aGUgYmVzdCBSTkcgc291cmNlLCBub3JtYWxpemluZyB0byBhIGZ1bmN0aW9uIHRoYXRcbi8vIHJldHVybnMgMTI4LWJpdHMgb2YgcmFuZG9tbmVzcywgc2luY2UgdGhhdCdzIHdoYXQncyB1c3VhbGx5IHJlcXVpcmVkXG52YXIgcm5nID0gcmVxdWlyZSgnLi9saWIvcm5nJyk7XG52YXIgYnl0ZXNUb1V1aWQgPSByZXF1aXJlKCcuL2xpYi9ieXRlc1RvVXVpZCcpO1xuXG4vLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5cbi8vIHJhbmRvbSAjJ3Mgd2UgbmVlZCB0byBpbml0IG5vZGUgYW5kIGNsb2Nrc2VxXG52YXIgX3NlZWRCeXRlcyA9IHJuZygpO1xuXG4vLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbnZhciBfbm9kZUlkID0gW1xuICBfc2VlZEJ5dGVzWzBdIHwgMHgwMSxcbiAgX3NlZWRCeXRlc1sxXSwgX3NlZWRCeXRlc1syXSwgX3NlZWRCeXRlc1szXSwgX3NlZWRCeXRlc1s0XSwgX3NlZWRCeXRlc1s1XVxuXTtcblxuLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbnZhciBfY2xvY2tzZXEgPSAoX3NlZWRCeXRlc1s2XSA8PCA4IHwgX3NlZWRCeXRlc1s3XSkgJiAweDNmZmY7XG5cbi8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxudmFyIF9sYXN0TVNlY3MgPSAwLCBfbGFzdE5TZWNzID0gMDtcblxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9icm9vZmEvbm9kZS11dWlkIGZvciBBUEkgZGV0YWlsc1xuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIHZhciBiID0gYnVmIHx8IFtdO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBjbG9ja3NlcSA9IG9wdGlvbnMuY2xvY2tzZXEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuY2xvY2tzZXEgOiBfY2xvY2tzZXE7XG5cbiAgLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG4gIHZhciBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXG4gIC8vIGN5Y2xlIHRvIHNpbXVsYXRlIGhpZ2hlciByZXNvbHV0aW9uIGNsb2NrXG4gIHZhciBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTtcblxuICAvLyBUaW1lIHNpbmNlIGxhc3QgdXVpZCBjcmVhdGlvbiAoaW4gbXNlY3MpXG4gIHZhciBkdCA9IChtc2VjcyAtIF9sYXN0TVNlY3MpICsgKG5zZWNzIC0gX2xhc3ROU2VjcykvMTAwMDA7XG5cbiAgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuICBpZiAoZHQgPCAwICYmIG9wdGlvbnMuY2xvY2tzZXEgPT09IHVuZGVmaW5lZCkge1xuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xuICB9XG5cbiAgLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuICBpZiAoKGR0IDwgMCB8fCBtc2VjcyA+IF9sYXN0TVNlY3MpICYmIG9wdGlvbnMubnNlY3MgPT09IHVuZGVmaW5lZCkge1xuICAgIG5zZWNzID0gMDtcbiAgfVxuXG4gIC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1dWlkLnYxKCk6IENhblxcJ3QgY3JlYXRlIG1vcmUgdGhhbiAxME0gdXVpZHMvc2VjJyk7XG4gIH1cblxuICBfbGFzdE1TZWNzID0gbXNlY3M7XG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7XG5cbiAgLy8gUGVyIDQuMS40IC0gQ29udmVydCBmcm9tIHVuaXggZXBvY2ggdG8gR3JlZ29yaWFuIGVwb2NoXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwO1xuXG4gIC8vIGB0aW1lX2xvd2BcbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xuICBiW2krK10gPSB0bCA+Pj4gMjQgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gMTYgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsICYgMHhmZjtcblxuICAvLyBgdGltZV9taWRgXG4gIHZhciB0bWggPSAobXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwKSAmIDB4ZmZmZmZmZjtcbiAgYltpKytdID0gdG1oID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdG1oICYgMHhmZjtcblxuICAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmO1xuXG4gIC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7XG5cbiAgLy8gYGNsb2NrX3NlcV9sb3dgXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjtcblxuICAvLyBgbm9kZWBcbiAgdmFyIG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgZm9yICh2YXIgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cblxuICByZXR1cm4gYnVmID8gYnVmIDogYnl0ZXNUb1V1aWQoYik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdjE7XG4iLCJ2YXIgcm5nID0gcmVxdWlyZSgnLi9saWIvcm5nJyk7XG52YXIgYnl0ZXNUb1V1aWQgPSByZXF1aXJlKCcuL2xpYi9ieXRlc1RvVXVpZCcpO1xuXG5mdW5jdGlvbiB2NChvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcblxuICBpZiAodHlwZW9mKG9wdGlvbnMpID09ICdzdHJpbmcnKSB7XG4gICAgYnVmID0gb3B0aW9ucyA9PSAnYmluYXJ5JyA/IG5ldyBBcnJheSgxNikgOiBudWxsO1xuICAgIG9wdGlvbnMgPSBudWxsO1xuICB9XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcblxuICAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcbiAgcm5kc1s4XSA9IChybmRzWzhdICYgMHgzZikgfCAweDgwO1xuXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuICBpZiAoYnVmKSB7XG4gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDE2OyArK2lpKSB7XG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWYgfHwgYnl0ZXNUb1V1aWQocm5kcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdjQ7XG4iLCIvKlxuICogdmVycm9yLmpzOiByaWNoZXIgSmF2YVNjcmlwdCBlcnJvcnNcbiAqL1xuXG52YXIgbW9kX2Fzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xudmFyIG1vZF91dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG52YXIgbW9kX2V4dHNwcmludGYgPSByZXF1aXJlKCdleHRzcHJpbnRmJyk7XG5cbi8qXG4gKiBQdWJsaWMgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydHMuVkVycm9yID0gVkVycm9yO1xuZXhwb3J0cy5XRXJyb3IgPSBXRXJyb3I7XG5leHBvcnRzLk11bHRpRXJyb3IgPSBNdWx0aUVycm9yO1xuXG4vKlxuICogTGlrZSBKYXZhU2NyaXB0J3MgYnVpbHQtaW4gRXJyb3IgY2xhc3MsIGJ1dCBzdXBwb3J0cyBhIFwiY2F1c2VcIiBhcmd1bWVudCBhbmQgYVxuICogcHJpbnRmLXN0eWxlIG1lc3NhZ2UuICBUaGUgY2F1c2UgYXJndW1lbnQgY2FuIGJlIG51bGwuXG4gKi9cbmZ1bmN0aW9uIFZFcnJvcihvcHRpb25zKVxue1xuXHR2YXIgYXJncywgY2F1c2VkQnksIGN0b3IsIHRhaWxtc2c7XG5cblx0aWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgKG9wdGlvbnMpID09PSAnb2JqZWN0Jykge1xuXHRcdGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXHR9IGVsc2Uge1xuXHRcdGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXHRcdG9wdGlvbnMgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHR0YWlsbXNnID0gYXJncy5sZW5ndGggPiAwID9cblx0ICAgIG1vZF9leHRzcHJpbnRmLnNwcmludGYuYXBwbHkobnVsbCwgYXJncykgOiAnJztcblx0dGhpcy5qc2Vfc2hvcnRtc2cgPSB0YWlsbXNnO1xuXHR0aGlzLmpzZV9zdW1tYXJ5ID0gdGFpbG1zZztcblxuXHRpZiAob3B0aW9ucykge1xuXHRcdGNhdXNlZEJ5ID0gb3B0aW9ucy5jYXVzZTtcblxuXHRcdGlmICghY2F1c2VkQnkgfHwgIShvcHRpb25zLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpKVxuXHRcdFx0Y2F1c2VkQnkgPSBvcHRpb25zO1xuXG5cdFx0aWYgKGNhdXNlZEJ5ICYmIChjYXVzZWRCeSBpbnN0YW5jZW9mIEVycm9yKSkge1xuXHRcdFx0dGhpcy5qc2VfY2F1c2UgPSBjYXVzZWRCeTtcblx0XHRcdHRoaXMuanNlX3N1bW1hcnkgKz0gJzogJyArIGNhdXNlZEJ5Lm1lc3NhZ2U7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5tZXNzYWdlID0gdGhpcy5qc2Vfc3VtbWFyeTtcblx0RXJyb3IuY2FsbCh0aGlzLCB0aGlzLmpzZV9zdW1tYXJ5KTtcblxuXHRpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcblx0XHRjdG9yID0gb3B0aW9ucyA/IG9wdGlvbnMuY29uc3RydWN0b3JPcHQgOiB1bmRlZmluZWQ7XG5cdFx0Y3RvciA9IGN0b3IgfHwgYXJndW1lbnRzLmNhbGxlZTtcblx0XHRFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBjdG9yKTtcblx0fVxufVxuXG5tb2RfdXRpbC5pbmhlcml0cyhWRXJyb3IsIEVycm9yKTtcblZFcnJvci5wcm90b3R5cGUubmFtZSA9ICdWRXJyb3InO1xuXG5WRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdmVfdG9TdHJpbmcoKVxue1xuXHR2YXIgc3RyID0gKHRoaXMuaGFzT3duUHJvcGVydHkoJ25hbWUnKSAmJiB0aGlzLm5hbWUgfHxcblx0XHR0aGlzLmNvbnN0cnVjdG9yLm5hbWUgfHwgdGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUubmFtZSk7XG5cdGlmICh0aGlzLm1lc3NhZ2UpXG5cdFx0c3RyICs9ICc6ICcgKyB0aGlzLm1lc3NhZ2U7XG5cblx0cmV0dXJuIChzdHIpO1xufTtcblxuVkVycm9yLnByb3RvdHlwZS5jYXVzZSA9IGZ1bmN0aW9uIHZlX2NhdXNlKClcbntcblx0cmV0dXJuICh0aGlzLmpzZV9jYXVzZSk7XG59O1xuXG5cbi8qXG4gKiBSZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBlcnJvcnMgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbnN1bWVycyB0aGF0IGdlbmVyYWxseVxuICogb25seSBkZWFsIHdpdGggb25lIGVycm9yLiAgQ2FsbGVycyBjYW4gZXh0cmFjdCB0aGUgaW5kaXZpZHVhbCBlcnJvcnNcbiAqIGNvbnRhaW5lZCBpbiB0aGlzIG9iamVjdCwgYnV0IG1heSBhbHNvIGp1c3QgdHJlYXQgaXQgYXMgYSBub3JtYWwgc2luZ2xlXG4gKiBlcnJvciwgaW4gd2hpY2ggY2FzZSBhIHN1bW1hcnkgbWVzc2FnZSB3aWxsIGJlIHByaW50ZWQuXG4gKi9cbmZ1bmN0aW9uIE11bHRpRXJyb3IoZXJyb3JzKVxue1xuXHRtb2RfYXNzZXJ0Lm9rKGVycm9ycy5sZW5ndGggPiAwKTtcblx0dGhpcy5hc2VfZXJyb3JzID0gZXJyb3JzO1xuXG5cdFZFcnJvci5jYWxsKHRoaXMsIGVycm9yc1swXSwgJ2ZpcnN0IG9mICVkIGVycm9yJXMnLFxuXHQgICAgZXJyb3JzLmxlbmd0aCwgZXJyb3JzLmxlbmd0aCA9PSAxID8gJycgOiAncycpO1xufVxuXG5tb2RfdXRpbC5pbmhlcml0cyhNdWx0aUVycm9yLCBWRXJyb3IpO1xuXG5cblxuLypcbiAqIExpa2UgSmF2YVNjcmlwdCdzIGJ1aWx0LWluIEVycm9yIGNsYXNzLCBidXQgc3VwcG9ydHMgYSBcImNhdXNlXCIgYXJndW1lbnQgd2hpY2hcbiAqIGlzIHdyYXBwZWQsIG5vdCBcImZvbGRlZCBpblwiIGFzIHdpdGggVkVycm9yLlx0QWNjZXB0cyBhIHByaW50Zi1zdHlsZSBtZXNzYWdlLlxuICogVGhlIGNhdXNlIGFyZ3VtZW50IGNhbiBiZSBudWxsLlxuICovXG5mdW5jdGlvbiBXRXJyb3Iob3B0aW9ucylcbntcblx0RXJyb3IuY2FsbCh0aGlzKTtcblxuXHR2YXIgYXJncywgY2F1c2UsIGN0b3I7XG5cdGlmICh0eXBlb2YgKG9wdGlvbnMpID09PSAnb2JqZWN0Jykge1xuXHRcdGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXHR9IGVsc2Uge1xuXHRcdGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXHRcdG9wdGlvbnMgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0dGhpcy5tZXNzYWdlID0gbW9kX2V4dHNwcmludGYuc3ByaW50Zi5hcHBseShudWxsLCBhcmdzKTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLm1lc3NhZ2UgPSAnJztcblx0fVxuXG5cdGlmIChvcHRpb25zKSB7XG5cdFx0aWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0Y2F1c2UgPSBvcHRpb25zO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjYXVzZSA9IG9wdGlvbnMuY2F1c2U7XG5cdFx0XHRjdG9yID0gb3B0aW9ucy5jb25zdHJ1Y3Rvck9wdDtcblx0XHR9XG5cdH1cblxuXHRFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBjdG9yIHx8IHRoaXMuY29uc3RydWN0b3IpO1xuXHRpZiAoY2F1c2UpXG5cdFx0dGhpcy5jYXVzZShjYXVzZSk7XG5cbn1cblxubW9kX3V0aWwuaW5oZXJpdHMoV0Vycm9yLCBFcnJvcik7XG5XRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnV0Vycm9yJztcblxuXG5XRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gd2VfdG9TdHJpbmcoKVxue1xuXHR2YXIgc3RyID0gKHRoaXMuaGFzT3duUHJvcGVydHkoJ25hbWUnKSAmJiB0aGlzLm5hbWUgfHxcblx0XHR0aGlzLmNvbnN0cnVjdG9yLm5hbWUgfHwgdGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUubmFtZSk7XG5cdGlmICh0aGlzLm1lc3NhZ2UpXG5cdFx0c3RyICs9ICc6ICcgKyB0aGlzLm1lc3NhZ2U7XG5cdGlmICh0aGlzLndlX2NhdXNlICYmIHRoaXMud2VfY2F1c2UubWVzc2FnZSlcblx0XHRzdHIgKz0gJzsgY2F1c2VkIGJ5ICcgKyB0aGlzLndlX2NhdXNlLnRvU3RyaW5nKCk7XG5cblx0cmV0dXJuIChzdHIpO1xufTtcblxuV0Vycm9yLnByb3RvdHlwZS5jYXVzZSA9IGZ1bmN0aW9uIHdlX2NhdXNlKGMpXG57XG5cdGlmIChjIGluc3RhbmNlb2YgRXJyb3IpXG5cdFx0dGhpcy53ZV9jYXVzZSA9IGM7XG5cblx0cmV0dXJuICh0aGlzLndlX2NhdXNlKTtcbn07XG4iLCJ2YXIgaW5kZXhPZiA9IHJlcXVpcmUoJ2luZGV4b2YnKTtcblxudmFyIE9iamVjdF9rZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgIGlmIChPYmplY3Qua2V5cykgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSByZXMucHVzaChrZXkpXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufTtcblxudmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoeHMsIGZuKSB7XG4gICAgaWYgKHhzLmZvckVhY2gpIHJldHVybiB4cy5mb3JFYWNoKGZuKVxuICAgIGVsc2UgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmbih4c1tpXSwgaSwgeHMpO1xuICAgIH1cbn07XG5cbnZhciBkZWZpbmVQcm9wID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ18nLCB7fSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihvYmosIG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIG9ialtuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9O1xuICAgIH1cbn0oKSk7XG5cbnZhciBnbG9iYWxzID0gWydBcnJheScsICdCb29sZWFuJywgJ0RhdGUnLCAnRXJyb3InLCAnRXZhbEVycm9yJywgJ0Z1bmN0aW9uJyxcbidJbmZpbml0eScsICdKU09OJywgJ01hdGgnLCAnTmFOJywgJ051bWJlcicsICdPYmplY3QnLCAnUmFuZ2VFcnJvcicsXG4nUmVmZXJlbmNlRXJyb3InLCAnUmVnRXhwJywgJ1N0cmluZycsICdTeW50YXhFcnJvcicsICdUeXBlRXJyb3InLCAnVVJJRXJyb3InLFxuJ2RlY29kZVVSSScsICdkZWNvZGVVUklDb21wb25lbnQnLCAnZW5jb2RlVVJJJywgJ2VuY29kZVVSSUNvbXBvbmVudCcsICdlc2NhcGUnLFxuJ2V2YWwnLCAnaXNGaW5pdGUnLCAnaXNOYU4nLCAncGFyc2VGbG9hdCcsICdwYXJzZUludCcsICd1bmRlZmluZWQnLCAndW5lc2NhcGUnXTtcblxuZnVuY3Rpb24gQ29udGV4dCgpIHt9XG5Db250ZXh0LnByb3RvdHlwZSA9IHt9O1xuXG52YXIgU2NyaXB0ID0gZXhwb3J0cy5TY3JpcHQgPSBmdW5jdGlvbiBOb2RlU2NyaXB0IChjb2RlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNjcmlwdCkpIHJldHVybiBuZXcgU2NyaXB0KGNvZGUpO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG59O1xuXG5TY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgaWYgKCEoY29udGV4dCBpbnN0YW5jZW9mIENvbnRleHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJuZWVkcyBhICdjb250ZXh0JyBhcmd1bWVudC5cIik7XG4gICAgfVxuICAgIFxuICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICBpZiAoIWlmcmFtZS5zdHlsZSkgaWZyYW1lLnN0eWxlID0ge307XG4gICAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAgIFxuICAgIHZhciB3aW4gPSBpZnJhbWUuY29udGVudFdpbmRvdztcbiAgICB2YXIgd0V2YWwgPSB3aW4uZXZhbCwgd0V4ZWNTY3JpcHQgPSB3aW4uZXhlY1NjcmlwdDtcblxuICAgIGlmICghd0V2YWwgJiYgd0V4ZWNTY3JpcHQpIHtcbiAgICAgICAgLy8gd2luLmV2YWwoKSBtYWdpY2FsbHkgYXBwZWFycyB3aGVuIHRoaXMgaXMgY2FsbGVkIGluIElFOlxuICAgICAgICB3RXhlY1NjcmlwdC5jYWxsKHdpbiwgJ251bGwnKTtcbiAgICAgICAgd0V2YWwgPSB3aW4uZXZhbDtcbiAgICB9XG4gICAgXG4gICAgZm9yRWFjaChPYmplY3Rfa2V5cyhjb250ZXh0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB3aW5ba2V5XSA9IGNvbnRleHRba2V5XTtcbiAgICB9KTtcbiAgICBmb3JFYWNoKGdsb2JhbHMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKGNvbnRleHRba2V5XSkge1xuICAgICAgICAgICAgd2luW2tleV0gPSBjb250ZXh0W2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICB2YXIgd2luS2V5cyA9IE9iamVjdF9rZXlzKHdpbik7XG5cbiAgICB2YXIgcmVzID0gd0V2YWwuY2FsbCh3aW4sIHRoaXMuY29kZSk7XG4gICAgXG4gICAgZm9yRWFjaChPYmplY3Rfa2V5cyh3aW4pLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIC8vIEF2b2lkIGNvcHlpbmcgY2lyY3VsYXIgb2JqZWN0cyBsaWtlIGB0b3BgIGFuZCBgd2luZG93YCBieSBvbmx5XG4gICAgICAgIC8vIHVwZGF0aW5nIGV4aXN0aW5nIGNvbnRleHQgcHJvcGVydGllcyBvciBuZXcgcHJvcGVydGllcyBpbiB0aGUgYHdpbmBcbiAgICAgICAgLy8gdGhhdCB3YXMgb25seSBpbnRyb2R1Y2VkIGFmdGVyIHRoZSBldmFsLlxuICAgICAgICBpZiAoa2V5IGluIGNvbnRleHQgfHwgaW5kZXhPZih3aW5LZXlzLCBrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgY29udGV4dFtrZXldID0gd2luW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvckVhY2goZ2xvYmFscywgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gY29udGV4dCkpIHtcbiAgICAgICAgICAgIGRlZmluZVByb3AoY29udGV4dCwga2V5LCB3aW5ba2V5XSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gICAgXG4gICAgcmV0dXJuIHJlcztcbn07XG5cblNjcmlwdC5wcm90b3R5cGUucnVuSW5UaGlzQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZXZhbCh0aGlzLmNvZGUpOyAvLyBtYXliZS4uLlxufTtcblxuU2NyaXB0LnByb3RvdHlwZS5ydW5Jbk5ld0NvbnRleHQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIHZhciBjdHggPSBTY3JpcHQuY3JlYXRlQ29udGV4dChjb250ZXh0KTtcbiAgICB2YXIgcmVzID0gdGhpcy5ydW5JbkNvbnRleHQoY3R4KTtcblxuICAgIGZvckVhY2goT2JqZWN0X2tleXMoY3R4KSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBjb250ZXh0W2tleV0gPSBjdHhba2V5XTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXM7XG59O1xuXG5mb3JFYWNoKE9iamVjdF9rZXlzKFNjcmlwdC5wcm90b3R5cGUpLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIGV4cG9ydHNbbmFtZV0gPSBTY3JpcHRbbmFtZV0gPSBmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICB2YXIgcyA9IFNjcmlwdChjb2RlKTtcbiAgICAgICAgcmV0dXJuIHNbbmFtZV0uYXBwbHkocywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICB9O1xufSk7XG5cbmV4cG9ydHMuY3JlYXRlU2NyaXB0ID0gZnVuY3Rpb24gKGNvZGUpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5TY3JpcHQoY29kZSk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBTY3JpcHQuY3JlYXRlQ29udGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdmFyIGNvcHkgPSBuZXcgQ29udGV4dCgpO1xuICAgIGlmKHR5cGVvZiBjb250ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3JFYWNoKE9iamVjdF9rZXlzKGNvbnRleHQpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBjb3B5W2tleV0gPSBjb250ZXh0W2tleV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29weTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gXyhtZXNzYWdlLCBvcHRzKSB7XG4gICAgcmV0dXJuIGAke29wdHMgJiYgb3B0cy5jb250ZXh0ID8gb3B0cy5jb250ZXh0IDogXCJWYWx1ZVwifSAke21lc3NhZ2V9LmA7XG59XG5cbmZ1bmN0aW9uIHR5cGUoVikge1xuICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIk51bGxcIjtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlb2YgVikge1xuICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJVbmRlZmluZWRcIjtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiTnVtYmVyXCI7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgIHJldHVybiBcIlN0cmluZ1wiO1xuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJTeW1ib2xcIjtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgLy8gRmFsbHMgdGhyb3VnaFxuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgIC8vIEZhbGxzIHRocm91Z2hcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIFBlciBFUyBzcGVjLCB0eXBlb2YgcmV0dXJucyBhbiBpbXBsZW1lbnRpb24tZGVmaW5lZCB2YWx1ZSB0aGF0IGlzIG5vdCBhbnkgb2YgdGhlIGV4aXN0aW5nIG9uZXMgZm9yXG4gICAgICAgICAgICAvLyB1bmNhbGxhYmxlIG5vbi1zdGFuZGFyZCBleG90aWMgb2JqZWN0cy4gWWV0IFR5cGUoKSB3aGljaCB0aGUgV2ViIElETCBzcGVjIGRlcGVuZHMgb24gcmV0dXJucyBPYmplY3QgZm9yXG4gICAgICAgICAgICAvLyBzdWNoIGNhc2VzLiBTbyB0cmVhdCB0aGUgZGVmYXVsdCBjYXNlIGFzIGFuIG9iamVjdC5cbiAgICAgICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xuICAgIH1cbn1cblxuLy8gUm91bmQgeCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLCBjaG9vc2luZyB0aGUgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3by5cbmZ1bmN0aW9uIGV2ZW5Sb3VuZCh4KSB7XG4gICAgLy8gVGhlcmUgYXJlIGZvdXIgY2FzZXMgZm9yIG51bWJlcnMgd2l0aCBmcmFjdGlvbmFsIHBhcnQgYmVpbmcgLjU6XG4gICAgLy9cbiAgICAvLyBjYXNlIHwgICAgIHggICAgIHwgZmxvb3IoeCkgfCByb3VuZCh4KSB8IGV4cGVjdGVkIHwgeCA8PiAwIHwgeCAlIDEgfCB4ICYgMSB8ICAgZXhhbXBsZVxuICAgIC8vICAgMSAgfCAgMm4gKyAwLjUgfCAgMm4gICAgICB8ICAybiArIDEgIHwgIDJuICAgICAgfCAgID4gICAgfCAgMC41ICB8ICAgMCAgIHwgIDAuNSAtPiAgMFxuICAgIC8vICAgMiAgfCAgMm4gKyAxLjUgfCAgMm4gKyAxICB8ICAybiArIDIgIHwgIDJuICsgMiAgfCAgID4gICAgfCAgMC41ICB8ICAgMSAgIHwgIDEuNSAtPiAgMlxuICAgIC8vICAgMyAgfCAtMm4gLSAwLjUgfCAtMm4gLSAxICB8IC0ybiAgICAgIHwgLTJuICAgICAgfCAgIDwgICAgfCAtMC41ICB8ICAgMCAgIHwgLTAuNSAtPiAgMFxuICAgIC8vICAgNCAgfCAtMm4gLSAxLjUgfCAtMm4gLSAyICB8IC0ybiAtIDEgIHwgLTJuIC0gMiAgfCAgIDwgICAgfCAtMC41ICB8ICAgMSAgIHwgLTEuNSAtPiAtMlxuICAgIC8vICh3aGVyZSBuIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIpXG4gICAgLy9cbiAgICAvLyBCcmFuY2ggaGVyZSBmb3IgY2FzZXMgMSBhbmQgNFxuICAgIGlmICgoeCA+IDAgJiYgKHggJSAxKSA9PT0gKzAuNSAmJiAoeCAmIDEpID09PSAwKSB8fFxuICAgICAgICAoeCA8IDAgJiYgKHggJSAxKSA9PT0gLTAuNSAmJiAoeCAmIDEpID09PSAxKSkge1xuICAgICAgICByZXR1cm4gY2Vuc29yTmVnYXRpdmVaZXJvKE1hdGguZmxvb3IoeCkpO1xuICAgIH1cblxuICAgIHJldHVybiBjZW5zb3JOZWdhdGl2ZVplcm8oTWF0aC5yb3VuZCh4KSk7XG59XG5cbmZ1bmN0aW9uIGludGVnZXJQYXJ0KG4pIHtcbiAgICByZXR1cm4gY2Vuc29yTmVnYXRpdmVaZXJvKE1hdGgudHJ1bmMobikpO1xufVxuXG5mdW5jdGlvbiBzaWduKHgpIHtcbiAgICByZXR1cm4geCA8IDAgPyAtMSA6IDE7XG59XG5cbmZ1bmN0aW9uIG1vZHVsbyh4LCB5KSB7XG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNlcW4tbW9kdWxvXG4gICAgLy8gTm90ZSB0aGF0IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ0Njc1NTkvMzE5MSBkb2VzIE5PVCB3b3JrIGZvciBsYXJnZSBtb2R1bG9zXG4gICAgY29uc3Qgc2lnbk1pZ2h0Tm90TWF0Y2ggPSB4ICUgeTtcbiAgICBpZiAoc2lnbih5KSAhPT0gc2lnbihzaWduTWlnaHROb3RNYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIHNpZ25NaWdodE5vdE1hdGNoICsgeTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25NaWdodE5vdE1hdGNoO1xufVxuXG5mdW5jdGlvbiBjZW5zb3JOZWdhdGl2ZVplcm8oeCkge1xuICAgIHJldHVybiB4ID09PSAwID8gMCA6IHg7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludGVnZXJDb252ZXJzaW9uKGJpdExlbmd0aCwgdHlwZU9wdHMpIHtcbiAgICBjb25zdCBpc1NpZ25lZCA9ICF0eXBlT3B0cy51bnNpZ25lZDtcblxuICAgIGxldCBsb3dlckJvdW5kO1xuICAgIGxldCB1cHBlckJvdW5kO1xuICAgIGlmIChiaXRMZW5ndGggPT09IDY0KSB7XG4gICAgICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuICAgICAgICBsb3dlckJvdW5kID0gIWlzU2lnbmVkID8gMCA6IC1NYXRoLnBvdygyLCA1MykgKyAxO1xuICAgIH0gZWxzZSBpZiAoIWlzU2lnbmVkKSB7XG4gICAgICAgIGxvd2VyQm91bmQgPSAwO1xuICAgICAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbG93ZXJCb3VuZCA9IC1NYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKTtcbiAgICAgICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCAtIDEpIC0gMTtcbiAgICB9XG5cbiAgICBjb25zdCB0d29Ub1RoZUJpdExlbmd0aCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCk7XG4gICAgY29uc3QgdHdvVG9PbmVMZXNzVGhhblRoZUJpdExlbmd0aCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCAtIDEpO1xuXG4gICAgcmV0dXJuIChWLCBvcHRzKSA9PiB7XG4gICAgICAgIGlmIChvcHRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9wdHMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB4ID0gK1Y7XG4gICAgICAgIHggPSBjZW5zb3JOZWdhdGl2ZVplcm8oeCk7IC8vIFNwZWMgZGlzY3Vzc2lvbiBvbmdvaW5nOiBodHRwczovL2dpdGh1Yi5jb20vaGV5Y2FtL3dlYmlkbC9pc3N1ZXMvMzA2XG5cbiAgICAgICAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlKSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXyhcImlzIG5vdCBhIGZpbml0ZSBudW1iZXJcIiwgb3B0cykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4ID0gaW50ZWdlclBhcnQoeCk7XG5cbiAgICAgICAgICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXyhcbiAgICAgICAgICAgICAgICAgICAgYGlzIG91dHNpZGUgdGhlIGFjY2VwdGVkIHJhbmdlIG9mICR7bG93ZXJCb3VuZH0gdG8gJHt1cHBlckJvdW5kfSwgaW5jbHVzaXZlYCwgb3B0cykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHgpICYmIG9wdHMuY2xhbXApIHtcbiAgICAgICAgICAgIHggPSBNYXRoLm1pbihNYXRoLm1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZCk7XG4gICAgICAgICAgICB4ID0gZXZlblJvdW5kKHgpO1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSB8fCB4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICB4ID0gaW50ZWdlclBhcnQoeCk7XG5cbiAgICAgICAgLy8gTWF0aC5wb3coMiwgNjQpIGlzIG5vdCBhY2N1cmF0ZWx5IHJlcHJlc2VudGFibGUgaW4gSmF2YVNjcmlwdCwgc28gdHJ5IHRvIGF2b2lkIHRoZXNlIHBlci1zcGVjIG9wZXJhdGlvbnMgaWZcbiAgICAgICAgLy8gcG9zc2libGUuIEhvcGVmdWxseSBpdCdzIGFuIG9wdGltaXphdGlvbiBmb3IgdGhlIG5vbi02NC1iaXRMZW5ndGggY2FzZXMgdG9vLlxuICAgICAgICBpZiAoeCA+PSBsb3dlckJvdW5kICYmIHggPD0gdXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVzZSB3aWxsIG5vdCB3b3JrIGdyZWF0IGZvciBiaXRMZW5ndGggb2YgNjQsIGJ1dCBvaCB3ZWxsLiBTZWUgdGhlIFJFQURNRSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICB4ID0gbW9kdWxvKHgsIHR3b1RvVGhlQml0TGVuZ3RoKTtcbiAgICAgICAgaWYgKGlzU2lnbmVkICYmIHggPj0gdHdvVG9PbmVMZXNzVGhhblRoZUJpdExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHggLSB0d29Ub1RoZUJpdExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geDtcbiAgICB9O1xufVxuXG5leHBvcnRzLmFueSA9IFYgPT4ge1xuICAgIHJldHVybiBWO1xufTtcblxuZXhwb3J0cy52b2lkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnRzLmJvb2xlYW4gPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuICEhdmFsO1xufTtcblxuZXhwb3J0cy5ieXRlID0gY3JlYXRlSW50ZWdlckNvbnZlcnNpb24oOCwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5leHBvcnRzLm9jdGV0ID0gY3JlYXRlSW50ZWdlckNvbnZlcnNpb24oOCwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuZXhwb3J0cy5zaG9ydCA9IGNyZWF0ZUludGVnZXJDb252ZXJzaW9uKDE2LCB7IHVuc2lnbmVkOiBmYWxzZSB9KTtcbmV4cG9ydHNbXCJ1bnNpZ25lZCBzaG9ydFwiXSA9IGNyZWF0ZUludGVnZXJDb252ZXJzaW9uKDE2LCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5leHBvcnRzLmxvbmcgPSBjcmVhdGVJbnRlZ2VyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5leHBvcnRzW1widW5zaWduZWQgbG9uZ1wiXSA9IGNyZWF0ZUludGVnZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5leHBvcnRzW1wibG9uZyBsb25nXCJdID0gY3JlYXRlSW50ZWdlckNvbnZlcnNpb24oNjQsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuZXhwb3J0c1tcInVuc2lnbmVkIGxvbmcgbG9uZ1wiXSA9IGNyZWF0ZUludGVnZXJDb252ZXJzaW9uKDY0LCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5leHBvcnRzLmRvdWJsZSA9IChWLCBvcHRzKSA9PiB7XG4gICAgY29uc3QgeCA9ICtWO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfKFwiaXMgbm90IGEgZmluaXRlIGZsb2F0aW5nLXBvaW50IHZhbHVlXCIsIG9wdHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4geDtcbn07XG5cbmV4cG9ydHNbXCJ1bnJlc3RyaWN0ZWQgZG91YmxlXCJdID0gViA9PiB7XG4gICAgY29uc3QgeCA9ICtWO1xuXG4gICAgcmV0dXJuIHg7XG59O1xuXG5leHBvcnRzLmZsb2F0ID0gKFYsIG9wdHMpID0+IHtcbiAgICBjb25zdCB4ID0gK1Y7XG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF8oXCJpcyBub3QgYSBmaW5pdGUgZmxvYXRpbmctcG9pbnQgdmFsdWVcIiwgb3B0cykpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QuaXMoeCwgLTApKSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cblxuICAgIGNvbnN0IGFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcbiAgICBhcnJheVswXSA9IHg7XG4gICAgY29uc3QgeSA9IGFycmF5WzBdO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfKFwiaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgYSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IHZhbHVlXCIsIG9wdHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4geTtcbn07XG5cbmV4cG9ydHNbXCJ1bnJlc3RyaWN0ZWQgZmxvYXRcIl0gPSBWID0+IHtcbiAgICBjb25zdCB4ID0gK1Y7XG5cbiAgICBpZiAoaXNOYU4oeCkpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5pcyh4LCAtMCkpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgY29uc3QgYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuICAgIGFycmF5WzBdID0geDtcbiAgICByZXR1cm4gYXJyYXlbMF07XG59O1xuXG5leHBvcnRzLkRPTVN0cmluZyA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgaWYgKG9wdHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRzID0ge307XG4gICAgfVxuXG4gICAgaWYgKG9wdHMudHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiBWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgViA9PT0gXCJzeW1ib2xcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF8oXCJpcyBhIHN5bWJvbCwgd2hpY2ggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZ1wiLCBvcHRzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyhWKTtcbn07XG5cbmV4cG9ydHMuQnl0ZVN0cmluZyA9IChWLCBvcHRzKSA9PiB7XG4gICAgY29uc3QgeCA9IGV4cG9ydHMuRE9NU3RyaW5nKFYsIG9wdHMpO1xuICAgIGxldCBjO1xuICAgIGZvciAobGV0IGkgPSAwOyAoYyA9IHguY29kZVBvaW50QXQoaSkpICE9PSB1bmRlZmluZWQ7ICsraSkge1xuICAgICAgICBpZiAoYyA+IDI1NSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfKFwiaXMgbm90IGEgdmFsaWQgQnl0ZVN0cmluZ1wiLCBvcHRzKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geDtcbn07XG5cbmV4cG9ydHMuVVNWU3RyaW5nID0gKFYsIG9wdHMpID0+IHtcbiAgICBjb25zdCBTID0gZXhwb3J0cy5ET01TdHJpbmcoViwgb3B0cyk7XG4gICAgY29uc3QgbiA9IFMubGVuZ3RoO1xuICAgIGNvbnN0IFUgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBjb25zdCBjID0gUy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID4gMHhERkZGKSB7XG4gICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoYykpO1xuICAgICAgICB9IGVsc2UgaWYgKDB4REMwMCA8PSBjICYmIGMgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gbiAtIDEpIHtcbiAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBTLmNoYXJDb2RlQXQoaSArIDEpO1xuICAgICAgICAgICAgaWYgKDB4REMwMCA8PSBkICYmIGQgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYSA9IGMgJiAweDNGRjtcbiAgICAgICAgICAgICAgICBjb25zdCBiID0gZCAmIDB4M0ZGO1xuICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgoMiA8PCAxNSkgKyAoKDIgPDwgOSkgKiBhKSArIGIpKTtcbiAgICAgICAgICAgICAgICArK2k7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBVLmpvaW4oXCJcIik7XG59O1xuXG5leHBvcnRzLm9iamVjdCA9IChWLCBvcHRzKSA9PiB7XG4gICAgaWYgKHR5cGUoVikgIT09IFwiT2JqZWN0XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfKFwiaXMgbm90IGFuIG9iamVjdFwiLCBvcHRzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFY7XG59O1xuXG4vLyBOb3QgZXhwb3J0ZWQsIGJ1dCB1c2VkIGluIEZ1bmN0aW9uIGFuZCBWb2lkRnVuY3Rpb24uXG5cbi8vIE5laXRoZXIgRnVuY3Rpb24gbm9yIFZvaWRGdW5jdGlvbiBpcyBkZWZpbmVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgc29cbi8vIGhhbmRsaW5nIGZvciB0aGF0IGlzIG9taXR0ZWQuXG5mdW5jdGlvbiBjb252ZXJ0Q2FsbGJhY2tGdW5jdGlvbihWLCBvcHRzKSB7XG4gICAgaWYgKHR5cGVvZiBWICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfKFwiaXMgbm90IGEgZnVuY3Rpb25cIiwgb3B0cykpO1xuICAgIH1cbiAgICByZXR1cm4gVjtcbn1cblxuW1xuICAgIEVycm9yLFxuICAgIEFycmF5QnVmZmVyLCAvLyBUaGUgSXNEZXRhY2hlZEJ1ZmZlciBhYnN0cmFjdCBvcGVyYXRpb24gaXMgbm90IGV4cG9zZWQgaW4gSlNcbiAgICBEYXRhVmlldywgSW50OEFycmF5LCBJbnQxNkFycmF5LCBJbnQzMkFycmF5LCBVaW50OEFycmF5LFxuICAgIFVpbnQxNkFycmF5LCBVaW50MzJBcnJheSwgVWludDhDbGFtcGVkQXJyYXksIEZsb2F0MzJBcnJheSwgRmxvYXQ2NEFycmF5XG5dLmZvckVhY2goZnVuYyA9PiB7XG4gICAgY29uc3QgbmFtZSA9IGZ1bmMubmFtZTtcbiAgICBjb25zdCBhcnRpY2xlID0gL15bQUVJT1VdLy50ZXN0KG5hbWUpID8gXCJhblwiIDogXCJhXCI7XG4gICAgZXhwb3J0c1tuYW1lXSA9IChWLCBvcHRzKSA9PiB7XG4gICAgICAgIGlmICghKFYgaW5zdGFuY2VvZiBmdW5jKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfKGBpcyBub3QgJHthcnRpY2xlfSAke25hbWV9IG9iamVjdGAsIG9wdHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBWO1xuICAgIH07XG59KTtcblxuLy8gQ29tbW9uIGRlZmluaXRpb25zXG5cbmV4cG9ydHMuQXJyYXlCdWZmZXJWaWV3ID0gKFYsIG9wdHMpID0+IHtcbiAgICBpZiAoIUFycmF5QnVmZmVyLmlzVmlldyhWKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF8oXCJpcyBub3QgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyIG9iamVjdFwiLCBvcHRzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFY7XG59O1xuXG5leHBvcnRzLkJ1ZmZlclNvdXJjZSA9IChWLCBvcHRzKSA9PiB7XG4gICAgaWYgKCEoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IFYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfKFwiaXMgbm90IGFuIEFycmF5QnVmZmVyIG9iamVjdCBvciBhIHZpZXcgb24gb25lXCIsIG9wdHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVjtcbn07XG5cbmV4cG9ydHMuRE9NVGltZVN0YW1wID0gZXhwb3J0c1tcInVuc2lnbmVkIGxvbmcgbG9uZ1wiXTtcblxuZXhwb3J0cy5GdW5jdGlvbiA9IGNvbnZlcnRDYWxsYmFja0Z1bmN0aW9uO1xuXG5leHBvcnRzLlZvaWRGdW5jdGlvbiA9IGNvbnZlcnRDYWxsYmFja0Z1bmN0aW9uO1xuIiwidmFyIGJ1bmRsZUZuID0gYXJndW1lbnRzWzNdO1xudmFyIHNvdXJjZXMgPSBhcmd1bWVudHNbNF07XG52YXIgY2FjaGUgPSBhcmd1bWVudHNbNV07XG5cbnZhciBzdHJpbmdpZnkgPSBKU09OLnN0cmluZ2lmeTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIG9wdGlvbnMpIHtcbiAgICB2YXIgd2tleTtcbiAgICB2YXIgY2FjaGVLZXlzID0gT2JqZWN0LmtleXMoY2FjaGUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYWNoZUtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBjYWNoZUtleXNbaV07XG4gICAgICAgIHZhciBleHAgPSBjYWNoZVtrZXldLmV4cG9ydHM7XG4gICAgICAgIC8vIFVzaW5nIGJhYmVsIGFzIGEgdHJhbnNwaWxlciB0byB1c2UgZXNtb2R1bGUsIHRoZSBleHBvcnQgd2lsbCBhbHdheXNcbiAgICAgICAgLy8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgZXhwb3J0IGFzIGEgcHJvcGVydHkgb2YgaXQuIFRvIGVuc3VyZVxuICAgICAgICAvLyB0aGUgZXhpc3RpbmcgYXBpIGFuZCBiYWJlbCBlc21vZHVsZSBleHBvcnRzIGFyZSBib3RoIHN1cHBvcnRlZCB3ZVxuICAgICAgICAvLyBjaGVjayBmb3IgYm90aFxuICAgICAgICBpZiAoZXhwID09PSBmbiB8fCBleHAgJiYgZXhwLmRlZmF1bHQgPT09IGZuKSB7XG4gICAgICAgICAgICB3a2V5ID0ga2V5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXdrZXkpIHtcbiAgICAgICAgd2tleSA9IE1hdGguZmxvb3IoTWF0aC5wb3coMTYsIDgpICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpO1xuICAgICAgICB2YXIgd2NhY2hlID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2FjaGVLZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGNhY2hlS2V5c1tpXTtcbiAgICAgICAgICAgIHdjYWNoZVtrZXldID0ga2V5O1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZXNbd2tleV0gPSBbXG4gICAgICAgICAgICBGdW5jdGlvbihbJ3JlcXVpcmUnLCdtb2R1bGUnLCdleHBvcnRzJ10sICcoJyArIGZuICsgJykoc2VsZiknKSxcbiAgICAgICAgICAgIHdjYWNoZVxuICAgICAgICBdO1xuICAgIH1cbiAgICB2YXIgc2tleSA9IE1hdGguZmxvb3IoTWF0aC5wb3coMTYsIDgpICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpO1xuXG4gICAgdmFyIHNjYWNoZSA9IHt9OyBzY2FjaGVbd2tleV0gPSB3a2V5O1xuICAgIHNvdXJjZXNbc2tleV0gPSBbXG4gICAgICAgIEZ1bmN0aW9uKFsncmVxdWlyZSddLCAoXG4gICAgICAgICAgICAvLyB0cnkgdG8gY2FsbCBkZWZhdWx0IGlmIGRlZmluZWQgdG8gYWxzbyBzdXBwb3J0IGJhYmVsIGVzbW9kdWxlXG4gICAgICAgICAgICAvLyBleHBvcnRzXG4gICAgICAgICAgICAndmFyIGYgPSByZXF1aXJlKCcgKyBzdHJpbmdpZnkod2tleSkgKyAnKTsnICtcbiAgICAgICAgICAgICcoZi5kZWZhdWx0ID8gZi5kZWZhdWx0IDogZikoc2VsZik7J1xuICAgICAgICApKSxcbiAgICAgICAgc2NhY2hlXG4gICAgXTtcblxuICAgIHZhciB3b3JrZXJTb3VyY2VzID0ge307XG4gICAgcmVzb2x2ZVNvdXJjZXMoc2tleSk7XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlU291cmNlcyhrZXkpIHtcbiAgICAgICAgd29ya2VyU291cmNlc1trZXldID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKHZhciBkZXBQYXRoIGluIHNvdXJjZXNba2V5XVsxXSkge1xuICAgICAgICAgICAgdmFyIGRlcEtleSA9IHNvdXJjZXNba2V5XVsxXVtkZXBQYXRoXTtcbiAgICAgICAgICAgIGlmICghd29ya2VyU291cmNlc1tkZXBLZXldKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZVNvdXJjZXMoZGVwS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzcmMgPSAnKCcgKyBidW5kbGVGbiArICcpKHsnXG4gICAgICAgICsgT2JqZWN0LmtleXMod29ya2VyU291cmNlcykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdpZnkoa2V5KSArICc6WydcbiAgICAgICAgICAgICAgICArIHNvdXJjZXNba2V5XVswXVxuICAgICAgICAgICAgICAgICsgJywnICsgc3RyaW5naWZ5KHNvdXJjZXNba2V5XVsxXSkgKyAnXSdcbiAgICAgICAgICAgIDtcbiAgICAgICAgfSkuam9pbignLCcpXG4gICAgICAgICsgJ30se30sWycgKyBzdHJpbmdpZnkoc2tleSkgKyAnXSknXG4gICAgO1xuXG4gICAgdmFyIFVSTCA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTCB8fCB3aW5kb3cubW96VVJMIHx8IHdpbmRvdy5tc1VSTDtcblxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW3NyY10sIHsgdHlwZTogJ3RleHQvamF2YXNjcmlwdCcgfSk7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5iYXJlKSB7IHJldHVybiBibG9iOyB9XG4gICAgdmFyIHdvcmtlclVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIod29ya2VyVXJsKTtcbiAgICB3b3JrZXIub2JqZWN0VVJMID0gd29ya2VyVXJsO1xuICAgIHJldHVybiB3b3JrZXI7XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIjg2NlwiOiBcIklCTTg2NlwiLFxuICBcInVuaWNvZGUtMS0xLXV0Zi04XCI6IFwiVVRGLThcIixcbiAgXCJ1dGYtOFwiOiBcIlVURi04XCIsXG4gIFwidXRmOFwiOiBcIlVURi04XCIsXG4gIFwiY3A4NjZcIjogXCJJQk04NjZcIixcbiAgXCJjc2libTg2NlwiOiBcIklCTTg2NlwiLFxuICBcImlibTg2NlwiOiBcIklCTTg2NlwiLFxuICBcImNzaXNvbGF0aW4yXCI6IFwiSVNPLTg4NTktMlwiLFxuICBcImlzby04ODU5LTJcIjogXCJJU08tODg1OS0yXCIsXG4gIFwiaXNvLWlyLTEwMVwiOiBcIklTTy04ODU5LTJcIixcbiAgXCJpc284ODU5LTJcIjogXCJJU08tODg1OS0yXCIsXG4gIFwiaXNvODg1OTJcIjogXCJJU08tODg1OS0yXCIsXG4gIFwiaXNvXzg4NTktMlwiOiBcIklTTy04ODU5LTJcIixcbiAgXCJpc29fODg1OS0yOjE5ODdcIjogXCJJU08tODg1OS0yXCIsXG4gIFwibDJcIjogXCJJU08tODg1OS0yXCIsXG4gIFwibGF0aW4yXCI6IFwiSVNPLTg4NTktMlwiLFxuICBcImNzaXNvbGF0aW4zXCI6IFwiSVNPLTg4NTktM1wiLFxuICBcImlzby04ODU5LTNcIjogXCJJU08tODg1OS0zXCIsXG4gIFwiaXNvLWlyLTEwOVwiOiBcIklTTy04ODU5LTNcIixcbiAgXCJpc284ODU5LTNcIjogXCJJU08tODg1OS0zXCIsXG4gIFwiaXNvODg1OTNcIjogXCJJU08tODg1OS0zXCIsXG4gIFwiaXNvXzg4NTktM1wiOiBcIklTTy04ODU5LTNcIixcbiAgXCJpc29fODg1OS0zOjE5ODhcIjogXCJJU08tODg1OS0zXCIsXG4gIFwibDNcIjogXCJJU08tODg1OS0zXCIsXG4gIFwibGF0aW4zXCI6IFwiSVNPLTg4NTktM1wiLFxuICBcImNzaXNvbGF0aW40XCI6IFwiSVNPLTg4NTktNFwiLFxuICBcImlzby04ODU5LTRcIjogXCJJU08tODg1OS00XCIsXG4gIFwiaXNvLWlyLTExMFwiOiBcIklTTy04ODU5LTRcIixcbiAgXCJpc284ODU5LTRcIjogXCJJU08tODg1OS00XCIsXG4gIFwiaXNvODg1OTRcIjogXCJJU08tODg1OS00XCIsXG4gIFwiaXNvXzg4NTktNFwiOiBcIklTTy04ODU5LTRcIixcbiAgXCJpc29fODg1OS00OjE5ODhcIjogXCJJU08tODg1OS00XCIsXG4gIFwibDRcIjogXCJJU08tODg1OS00XCIsXG4gIFwibGF0aW40XCI6IFwiSVNPLTg4NTktNFwiLFxuICBcImNzaXNvbGF0aW5jeXJpbGxpY1wiOiBcIklTTy04ODU5LTVcIixcbiAgXCJjeXJpbGxpY1wiOiBcIklTTy04ODU5LTVcIixcbiAgXCJpc28tODg1OS01XCI6IFwiSVNPLTg4NTktNVwiLFxuICBcImlzby1pci0xNDRcIjogXCJJU08tODg1OS01XCIsXG4gIFwiaXNvODg1OS01XCI6IFwiSVNPLTg4NTktNVwiLFxuICBcImlzbzg4NTk1XCI6IFwiSVNPLTg4NTktNVwiLFxuICBcImlzb184ODU5LTVcIjogXCJJU08tODg1OS01XCIsXG4gIFwiaXNvXzg4NTktNToxOTg4XCI6IFwiSVNPLTg4NTktNVwiLFxuICBcImFyYWJpY1wiOiBcIklTTy04ODU5LTZcIixcbiAgXCJhc21vLTcwOFwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJjc2lzbzg4NTk2ZVwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJjc2lzbzg4NTk2aVwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJjc2lzb2xhdGluYXJhYmljXCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImVjbWEtMTE0XCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImlzby04ODU5LTZcIjogXCJJU08tODg1OS02XCIsXG4gIFwiaXNvLTg4NTktNi1lXCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImlzby04ODU5LTYtaVwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJpc28taXItMTI3XCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImlzbzg4NTktNlwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJpc284ODU5NlwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJpc29fODg1OS02XCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImlzb184ODU5LTY6MTk4N1wiOiBcIklTTy04ODU5LTZcIixcbiAgXCJjc2lzb2xhdGluZ3JlZWtcIjogXCJJU08tODg1OS03XCIsXG4gIFwiZWNtYS0xMThcIjogXCJJU08tODg1OS03XCIsXG4gIFwiZWxvdF85MjhcIjogXCJJU08tODg1OS03XCIsXG4gIFwiZ3JlZWtcIjogXCJJU08tODg1OS03XCIsXG4gIFwiZ3JlZWs4XCI6IFwiSVNPLTg4NTktN1wiLFxuICBcImlzby04ODU5LTdcIjogXCJJU08tODg1OS03XCIsXG4gIFwiaXNvLWlyLTEyNlwiOiBcIklTTy04ODU5LTdcIixcbiAgXCJpc284ODU5LTdcIjogXCJJU08tODg1OS03XCIsXG4gIFwiaXNvODg1OTdcIjogXCJJU08tODg1OS03XCIsXG4gIFwiaXNvXzg4NTktN1wiOiBcIklTTy04ODU5LTdcIixcbiAgXCJpc29fODg1OS03OjE5ODdcIjogXCJJU08tODg1OS03XCIsXG4gIFwic3VuX2V1X2dyZWVrXCI6IFwiSVNPLTg4NTktN1wiLFxuICBcImNzaXNvODg1OThlXCI6IFwiSVNPLTg4NTktOFwiLFxuICBcImNzaXNvbGF0aW5oZWJyZXdcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaGVicmV3XCI6IFwiSVNPLTg4NTktOFwiLFxuICBcImlzby04ODU5LThcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaXNvLTg4NTktOC1lXCI6IFwiSVNPLTg4NTktOFwiLFxuICBcImlzby1pci0xMzhcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaXNvODg1OS04XCI6IFwiSVNPLTg4NTktOFwiLFxuICBcImlzbzg4NTk4XCI6IFwiSVNPLTg4NTktOFwiLFxuICBcImlzb184ODU5LThcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaXNvXzg4NTktODoxOTg4XCI6IFwiSVNPLTg4NTktOFwiLFxuICBcInZpc3VhbFwiOiBcIklTTy04ODU5LThcIixcbiAgXCJjc2lzb2xhdGluNlwiOiBcIklTTy04ODU5LTEwXCIsXG4gIFwiaXNvLTg4NTktMTBcIjogXCJJU08tODg1OS0xMFwiLFxuICBcImlzby1pci0xNTdcIjogXCJJU08tODg1OS0xMFwiLFxuICBcImlzbzg4NTktMTBcIjogXCJJU08tODg1OS0xMFwiLFxuICBcImlzbzg4NTkxMFwiOiBcIklTTy04ODU5LTEwXCIsXG4gIFwibDZcIjogXCJJU08tODg1OS0xMFwiLFxuICBcImxhdGluNlwiOiBcIklTTy04ODU5LTEwXCIsXG4gIFwiaXNvLTg4NTktMTNcIjogXCJJU08tODg1OS0xM1wiLFxuICBcImlzbzg4NTktMTNcIjogXCJJU08tODg1OS0xM1wiLFxuICBcImlzbzg4NTkxM1wiOiBcIklTTy04ODU5LTEzXCIsXG4gIFwiaXNvLTg4NTktMTRcIjogXCJJU08tODg1OS0xNFwiLFxuICBcImlzbzg4NTktMTRcIjogXCJJU08tODg1OS0xNFwiLFxuICBcImlzbzg4NTkxNFwiOiBcIklTTy04ODU5LTE0XCIsXG4gIFwiY3Npc29sYXRpbjlcIjogXCJJU08tODg1OS0xNVwiLFxuICBcImlzby04ODU5LTE1XCI6IFwiSVNPLTg4NTktMTVcIixcbiAgXCJpc284ODU5LTE1XCI6IFwiSVNPLTg4NTktMTVcIixcbiAgXCJpc284ODU5MTVcIjogXCJJU08tODg1OS0xNVwiLFxuICBcImlzb184ODU5LTE1XCI6IFwiSVNPLTg4NTktMTVcIixcbiAgXCJsOVwiOiBcIklTTy04ODU5LTE1XCIsXG4gIFwiaXNvLTg4NTktMTZcIjogXCJJU08tODg1OS0xNlwiLFxuICBcImNza29pOHJcIjogXCJLT0k4LVJcIixcbiAgXCJrb2lcIjogXCJLT0k4LVJcIixcbiAgXCJrb2k4XCI6IFwiS09JOC1SXCIsXG4gIFwia29pOC1yXCI6IFwiS09JOC1SXCIsXG4gIFwia29pOF9yXCI6IFwiS09JOC1SXCIsXG4gIFwia29pOC1ydVwiOiBcIktPSTgtVVwiLFxuICBcImtvaTgtdVwiOiBcIktPSTgtVVwiLFxuICBcImNzbWFjaW50b3NoXCI6IFwibWFjaW50b3NoXCIsXG4gIFwibWFjXCI6IFwibWFjaW50b3NoXCIsXG4gIFwibWFjaW50b3NoXCI6IFwibWFjaW50b3NoXCIsXG4gIFwieC1tYWMtcm9tYW5cIjogXCJtYWNpbnRvc2hcIixcbiAgXCJkb3MtODc0XCI6IFwid2luZG93cy04NzRcIixcbiAgXCJpc28tODg1OS0xMVwiOiBcIndpbmRvd3MtODc0XCIsXG4gIFwiaXNvODg1OS0xMVwiOiBcIndpbmRvd3MtODc0XCIsXG4gIFwiaXNvODg1OTExXCI6IFwid2luZG93cy04NzRcIixcbiAgXCJ0aXMtNjIwXCI6IFwid2luZG93cy04NzRcIixcbiAgXCJ3aW5kb3dzLTg3NFwiOiBcIndpbmRvd3MtODc0XCIsXG4gIFwiY3AxMjUwXCI6IFwid2luZG93cy0xMjUwXCIsXG4gIFwid2luZG93cy0xMjUwXCI6IFwid2luZG93cy0xMjUwXCIsXG4gIFwieC1jcDEyNTBcIjogXCJ3aW5kb3dzLTEyNTBcIixcbiAgXCJjcDEyNTFcIjogXCJ3aW5kb3dzLTEyNTFcIixcbiAgXCJ3aW5kb3dzLTEyNTFcIjogXCJ3aW5kb3dzLTEyNTFcIixcbiAgXCJ4LWNwMTI1MVwiOiBcIndpbmRvd3MtMTI1MVwiLFxuICBcImFuc2lfeDMuNC0xOTY4XCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwiYXNjaWlcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJjcDEyNTJcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJjcDgxOVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImNzaXNvbGF0aW4xXCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwiaWJtODE5XCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwiaXNvLTg4NTktMVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImlzby1pci0xMDBcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJpc284ODU5LTFcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJpc284ODU5MVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImlzb184ODU5LTFcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJpc29fODg1OS0xOjE5ODdcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJsMVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImxhdGluMVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcInVzLWFzY2lpXCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwid2luZG93cy0xMjUyXCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwieC1jcDEyNTJcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJjcDEyNTNcIjogXCJ3aW5kb3dzLTEyNTNcIixcbiAgXCJ3aW5kb3dzLTEyNTNcIjogXCJ3aW5kb3dzLTEyNTNcIixcbiAgXCJ4LWNwMTI1M1wiOiBcIndpbmRvd3MtMTI1M1wiLFxuICBcImNwMTI1NFwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImNzaXNvbGF0aW41XCI6IFwid2luZG93cy0xMjU0XCIsXG4gIFwiaXNvLTg4NTktOVwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImlzby1pci0xNDhcIjogXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJpc284ODU5LTlcIjogXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJpc284ODU5OVwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImlzb184ODU5LTlcIjogXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJpc29fODg1OS05OjE5ODlcIjogXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJsNVwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImxhdGluNVwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcIndpbmRvd3MtMTI1NFwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcIngtY3AxMjU0XCI6IFwid2luZG93cy0xMjU0XCIsXG4gIFwiY3AxMjU1XCI6IFwid2luZG93cy0xMjU1XCIsXG4gIFwid2luZG93cy0xMjU1XCI6IFwid2luZG93cy0xMjU1XCIsXG4gIFwieC1jcDEyNTVcIjogXCJ3aW5kb3dzLTEyNTVcIixcbiAgXCJjcDEyNTZcIjogXCJ3aW5kb3dzLTEyNTZcIixcbiAgXCJ3aW5kb3dzLTEyNTZcIjogXCJ3aW5kb3dzLTEyNTZcIixcbiAgXCJ4LWNwMTI1NlwiOiBcIndpbmRvd3MtMTI1NlwiLFxuICBcImNwMTI1N1wiOiBcIndpbmRvd3MtMTI1N1wiLFxuICBcIndpbmRvd3MtMTI1N1wiOiBcIndpbmRvd3MtMTI1N1wiLFxuICBcIngtY3AxMjU3XCI6IFwid2luZG93cy0xMjU3XCIsXG4gIFwiY3AxMjU4XCI6IFwid2luZG93cy0xMjU4XCIsXG4gIFwid2luZG93cy0xMjU4XCI6IFwid2luZG93cy0xMjU4XCIsXG4gIFwieC1jcDEyNThcIjogXCJ3aW5kb3dzLTEyNThcIixcbiAgXCJjaGluZXNlXCI6IFwiR0JLXCIsXG4gIFwiY3NnYjIzMTJcIjogXCJHQktcIixcbiAgXCJjc2lzbzU4Z2IyMzEyODBcIjogXCJHQktcIixcbiAgXCJnYjIzMTJcIjogXCJHQktcIixcbiAgXCJnYl8yMzEyXCI6IFwiR0JLXCIsXG4gIFwiZ2JfMjMxMi04MFwiOiBcIkdCS1wiLFxuICBcImdia1wiOiBcIkdCS1wiLFxuICBcImlzby1pci01OFwiOiBcIkdCS1wiLFxuICBcIngtZ2JrXCI6IFwiR0JLXCIsXG4gIFwiZ2IxODAzMFwiOiBcImdiMTgwMzBcIixcbiAgXCJiaWc1XCI6IFwiQmlnNVwiLFxuICBcImJpZzUtaGtzY3NcIjogXCJCaWc1XCIsXG4gIFwiY24tYmlnNVwiOiBcIkJpZzVcIixcbiAgXCJjc2JpZzVcIjogXCJCaWc1XCIsXG4gIFwieC14LWJpZzVcIjogXCJCaWc1XCIsXG4gIFwiY3NldWNwa2RmbXRqYXBhbmVzZVwiOiBcIkVVQy1KUFwiLFxuICBcImV1Yy1qcFwiOiBcIkVVQy1KUFwiLFxuICBcIngtZXVjLWpwXCI6IFwiRVVDLUpQXCIsXG4gIFwiY3NzaGlmdGppc1wiOiBcIlNoaWZ0X0pJU1wiLFxuICBcIm1zOTMyXCI6IFwiU2hpZnRfSklTXCIsXG4gIFwibXNfa2FuamlcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJzaGlmdC1qaXNcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJzaGlmdF9qaXNcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJzamlzXCI6IFwiU2hpZnRfSklTXCIsXG4gIFwid2luZG93cy0zMWpcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJ4LXNqaXNcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJjc2V1Y2tyXCI6IFwiRVVDLUtSXCIsXG4gIFwiY3Nrc2M1NjAxMTk4N1wiOiBcIkVVQy1LUlwiLFxuICBcImV1Yy1rclwiOiBcIkVVQy1LUlwiLFxuICBcImlzby1pci0xNDlcIjogXCJFVUMtS1JcIixcbiAgXCJrb3JlYW5cIjogXCJFVUMtS1JcIixcbiAgXCJrc19jXzU2MDEtMTk4N1wiOiBcIkVVQy1LUlwiLFxuICBcImtzX2NfNTYwMS0xOTg5XCI6IFwiRVVDLUtSXCIsXG4gIFwia3NjNTYwMVwiOiBcIkVVQy1LUlwiLFxuICBcImtzY181NjAxXCI6IFwiRVVDLUtSXCIsXG4gIFwid2luZG93cy05NDlcIjogXCJFVUMtS1JcIixcbiAgXCJ1dGYtMTZiZVwiOiBcIlVURi0xNkJFXCIsXG4gIFwidXRmLTE2XCI6IFwiVVRGLTE2TEVcIixcbiAgXCJ1dGYtMTZsZVwiOiBcIlVURi0xNkxFXCJcbn0iLCJtb2R1bGUuZXhwb3J0cz1bXG4gIFwiVVRGLThcIixcbiAgXCJJQk04NjZcIixcbiAgXCJJU08tODg1OS0yXCIsXG4gIFwiSVNPLTg4NTktM1wiLFxuICBcIklTTy04ODU5LTRcIixcbiAgXCJJU08tODg1OS01XCIsXG4gIFwiSVNPLTg4NTktNlwiLFxuICBcIklTTy04ODU5LTdcIixcbiAgXCJJU08tODg1OS04XCIsXG4gIFwiSVNPLTg4NTktMTBcIixcbiAgXCJJU08tODg1OS0xM1wiLFxuICBcIklTTy04ODU5LTE0XCIsXG4gIFwiSVNPLTg4NTktMTVcIixcbiAgXCJJU08tODg1OS0xNlwiLFxuICBcIktPSTgtUlwiLFxuICBcIktPSTgtVVwiLFxuICBcIm1hY2ludG9zaFwiLFxuICBcIndpbmRvd3MtODc0XCIsXG4gIFwid2luZG93cy0xMjUwXCIsXG4gIFwid2luZG93cy0xMjUxXCIsXG4gIFwid2luZG93cy0xMjUyXCIsXG4gIFwid2luZG93cy0xMjUzXCIsXG4gIFwid2luZG93cy0xMjU0XCIsXG4gIFwid2luZG93cy0xMjU1XCIsXG4gIFwid2luZG93cy0xMjU2XCIsXG4gIFwid2luZG93cy0xMjU3XCIsXG4gIFwid2luZG93cy0xMjU4XCIsXG4gIFwiR0JLXCIsXG4gIFwiZ2IxODAzMFwiLFxuICBcIkJpZzVcIixcbiAgXCJFVUMtSlBcIixcbiAgXCJTaGlmdF9KSVNcIixcbiAgXCJFVUMtS1JcIixcbiAgXCJVVEYtMTZCRVwiLFxuICBcIlVURi0xNkxFXCJcbl0iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGljb252TGl0ZSA9IHJlcXVpcmUoXCJpY29udi1saXRlXCIpO1xuY29uc3Qgc3VwcG9ydGVkTmFtZXMgPSByZXF1aXJlKFwiLi9zdXBwb3J0ZWQtbmFtZXMuanNvblwiKTtcbmNvbnN0IGxhYmVsc1RvTmFtZXMgPSByZXF1aXJlKFwiLi9sYWJlbHMtdG8tbmFtZXMuanNvblwiKTtcblxuY29uc3Qgc3VwcG9ydGVkTmFtZXNTZXQgPSBuZXcgU2V0KHN1cHBvcnRlZE5hbWVzKTtcblxuLy8gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZW5jb2RpbmctZ2V0XG5leHBvcnRzLmxhYmVsVG9OYW1lID0gbGFiZWwgPT4ge1xuICBsYWJlbCA9IFN0cmluZyhsYWJlbCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgcmV0dXJuIGxhYmVsc1RvTmFtZXNbbGFiZWxdIHx8IG51bGw7XG59O1xuXG4vLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG5leHBvcnRzLmRlY29kZSA9IChidWZmZXIsIGZhbGxiYWNrRW5jb2RpbmdOYW1lKSA9PiB7XG4gIGxldCBlbmNvZGluZyA9IGZhbGxiYWNrRW5jb2RpbmdOYW1lO1xuICBpZiAoIWV4cG9ydHMuaXNTdXBwb3J0ZWQoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFwiJHtlbmNvZGluZ31cIiBpcyBub3QgYSBzdXBwb3J0ZWQgZW5jb2RpbmcgbmFtZWApO1xuICB9XG5cbiAgY29uc3QgYm9tRW5jb2RpbmcgPSBleHBvcnRzLmdldEJPTUVuY29kaW5nKGJ1ZmZlcik7XG4gIGlmIChib21FbmNvZGluZyAhPT0gbnVsbCkge1xuICAgIGVuY29kaW5nID0gYm9tRW5jb2Rpbmc7XG4gIH1cblxuICAvLyBpY29udi1saXRlIHdpbGwgc3RyaXAgQk9NcyBmb3IgdXMsIHNvIG5vIG5lZWQgdG8gZG8gdGhlIHN0dWZmIHRoZSBzcGVjIGRvZXNcblxuICByZXR1cm4gaWNvbnZMaXRlLmRlY29kZShidWZmZXIsIGVuY29kaW5nKTtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvaHRtbC9pc3N1ZXMvMTkxMCNpc3N1ZWNvbW1lbnQtMjU0MDE3MzY5XG5leHBvcnRzLmdldEJPTUVuY29kaW5nID0gYnVmZmVyID0+IHtcbiAgaWYgKGJ1ZmZlclswXSA9PT0gMHhGRSAmJiBidWZmZXJbMV0gPT09IDB4RkYpIHtcbiAgICByZXR1cm4gXCJVVEYtMTZCRVwiO1xuICB9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PT0gMHhGRiAmJiBidWZmZXJbMV0gPT09IDB4RkUpIHtcbiAgICByZXR1cm4gXCJVVEYtMTZMRVwiO1xuICB9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PT0gMHhFRiAmJiBidWZmZXJbMV0gPT09IDB4QkIgJiYgYnVmZmVyWzJdID09PSAweEJGKSB7XG4gICAgcmV0dXJuIFwiVVRGLThcIjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0cy5pc1N1cHBvcnRlZCA9IG5hbWUgPT4ge1xuICByZXR1cm4gc3VwcG9ydGVkTmFtZXNTZXQuaGFzKFN0cmluZyhuYW1lKSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCB1c20gPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKTtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIFVSTEltcGwge1xuICBjb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvckFyZ3MpIHtcbiAgICBjb25zdCB1cmwgPSBjb25zdHJ1Y3RvckFyZ3NbMF07XG4gICAgY29uc3QgYmFzZSA9IGNvbnN0cnVjdG9yQXJnc1sxXTtcblxuICAgIGxldCBwYXJzZWRCYXNlID0gbnVsbDtcbiAgICBpZiAoYmFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJzZWRCYXNlID0gdXNtLmJhc2ljVVJMUGFyc2UoYmFzZSk7XG4gICAgICBpZiAocGFyc2VkQmFzZSA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYmFzZSBVUkxcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVVJMID0gdXNtLmJhc2ljVVJMUGFyc2UodXJsLCB7IGJhc2VVUkw6IHBhcnNlZEJhc2UgfSk7XG4gICAgaWYgKHBhcnNlZFVSTCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIFVSTFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cmwgPSBwYXJzZWRVUkw7XG5cbiAgICAvLyBUT0RPOiBxdWVyeSBzdHVmZlxuICB9XG5cbiAgZ2V0IGhyZWYoKSB7XG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVVUkwodGhpcy5fdXJsKTtcbiAgfVxuXG4gIHNldCBocmVmKHYpIHtcbiAgICBjb25zdCBwYXJzZWRVUkwgPSB1c20uYmFzaWNVUkxQYXJzZSh2KTtcbiAgICBpZiAocGFyc2VkVVJMID09PSBcImZhaWx1cmVcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgVVJMXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX3VybCA9IHBhcnNlZFVSTDtcbiAgfVxuXG4gIGdldCBvcmlnaW4oKSB7XG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVVUkxUb1VuaWNvZGVPcmlnaW4odGhpcy5fdXJsKTtcbiAgfVxuXG4gIGdldCBwcm90b2NvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsLnNjaGVtZSArIFwiOlwiO1xuICB9XG5cbiAgc2V0IHByb3RvY29sKHYpIHtcbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2ICsgXCI6XCIsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwic2NoZW1lIHN0YXJ0XCIgfSk7XG4gIH1cblxuICBnZXQgdXNlcm5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybC51c2VybmFtZTtcbiAgfVxuXG4gIHNldCB1c2VybmFtZSh2KSB7XG4gICAgaWYgKHVzbS5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHRoaXMuX3VybCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uc2V0VGhlVXNlcm5hbWUodGhpcy5fdXJsLCB2KTtcbiAgfVxuXG4gIGdldCBwYXNzd29yZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsLnBhc3N3b3JkO1xuICB9XG5cbiAgc2V0IHBhc3N3b3JkKHYpIHtcbiAgICBpZiAodXNtLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQodGhpcy5fdXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5zZXRUaGVQYXNzd29yZCh0aGlzLl91cmwsIHYpO1xuICB9XG5cbiAgZ2V0IGhvc3QoKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5fdXJsO1xuXG4gICAgaWYgKHVybC5ob3N0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBpZiAodXJsLnBvcnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1c20uc2VyaWFsaXplSG9zdCh1cmwuaG9zdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVIb3N0KHVybC5ob3N0KSArIFwiOlwiICsgdXNtLnNlcmlhbGl6ZUludGVnZXIodXJsLnBvcnQpO1xuICB9XG5cbiAgc2V0IGhvc3Qodikge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwiaG9zdFwiIH0pO1xuICB9XG5cbiAgZ2V0IGhvc3RuYW1lKCkge1xuICAgIGlmICh0aGlzLl91cmwuaG9zdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzbS5zZXJpYWxpemVIb3N0KHRoaXMuX3VybC5ob3N0KTtcbiAgfVxuXG4gIHNldCBob3N0bmFtZSh2KSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJob3N0bmFtZVwiIH0pO1xuICB9XG5cbiAgZ2V0IHBvcnQoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5wb3J0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUludGVnZXIodGhpcy5fdXJsLnBvcnQpO1xuICB9XG5cbiAgc2V0IHBvcnQodikge1xuICAgIGlmICh1c20uY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh0aGlzLl91cmwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIHRoaXMuX3VybC5wb3J0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJwb3J0XCIgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhdGhuYW1lKCkge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3VybC5wYXRoWzBdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl91cmwucGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIi9cIiArIHRoaXMuX3VybC5wYXRoLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgc2V0IHBhdGhuYW1lKHYpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl91cmwucGF0aCA9IFtdO1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwicGF0aCBzdGFydFwiIH0pO1xuICB9XG5cbiAgZ2V0IHNlYXJjaCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLnF1ZXJ5ID09PSBudWxsIHx8IHRoaXMuX3VybC5xdWVyeSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiP1wiICsgdGhpcy5fdXJsLnF1ZXJ5O1xuICB9XG5cbiAgc2V0IHNlYXJjaCh2KSB7XG4gICAgLy8gVE9ETzogcXVlcnkgc3R1ZmZcblxuICAgIGNvbnN0IHVybCA9IHRoaXMuX3VybDtcblxuICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICB1cmwucXVlcnkgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gdlswXSA9PT0gXCI/XCIgPyB2LnN1YnN0cmluZygxKSA6IHY7XG4gICAgdXJsLnF1ZXJ5ID0gXCJcIjtcbiAgICB1c20uYmFzaWNVUkxQYXJzZShpbnB1dCwgeyB1cmwsIHN0YXRlT3ZlcnJpZGU6IFwicXVlcnlcIiB9KTtcbiAgfVxuXG4gIGdldCBoYXNoKCkge1xuICAgIGlmICh0aGlzLl91cmwuZnJhZ21lbnQgPT09IG51bGwgfHwgdGhpcy5fdXJsLmZyYWdtZW50ID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCIjXCIgKyB0aGlzLl91cmwuZnJhZ21lbnQ7XG4gIH1cblxuICBzZXQgaGFzaCh2KSB7XG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIHRoaXMuX3VybC5mcmFnbWVudCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSB2WzBdID09PSBcIiNcIiA/IHYuc3Vic3RyaW5nKDEpIDogdjtcbiAgICB0aGlzLl91cmwuZnJhZ21lbnQgPSBcIlwiO1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImZyYWdtZW50XCIgfSk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMuaHJlZjtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLy9VUkwtaW1wbC5qc1wiKTtcblxuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFVSTCh1cmwpIHtcbiAgaWYgKCF0aGlzIHx8IHRoaXNbaW1wbF0gfHwgISh0aGlzIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdVUkwnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1VSTCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzBdKTtcbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1sxXSk7XG4gIH1cblxuICBtb2R1bGUuZXhwb3J0cy5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cblxuVVJMLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAwOyArK2kpIHtcbiAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnRvSlNPTi5hcHBseSh0aGlzW2ltcGxdLCBhcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJocmVmXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhyZWY7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaHJlZiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblVSTC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzLmhyZWY7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJvcmlnaW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub3JpZ2luO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwcm90b2NvbFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wcm90b2NvbDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wcm90b2NvbCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInVzZXJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnVzZXJuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnVzZXJuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicGFzc3dvcmRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGFzc3dvcmQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGFzc3dvcmQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJob3N0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3Q7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaG9zdCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcImhvc3RuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3RuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3RuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwicG9ydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wb3J0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBvcnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwYXRobmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wYXRobmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wYXRobmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInNlYXJjaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWFyY2g7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc2VhcmNoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaGFzaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5oYXNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhhc2ggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpcyhvYmopIHtcbiAgICByZXR1cm4gISFvYmogJiYgb2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbjtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShVUkwucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IFVSTCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFVSTDogVVJMIH0sXG4gICAgV29ya2VyOiB7IFVSTDogVVJMIH1cbiAgfVxufTtcblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuVVJMID0gcmVxdWlyZShcIi4vVVJMXCIpLmludGVyZmFjZTtcbmV4cG9ydHMuc2VyaWFsaXplVVJMID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplVVJMO1xuZXhwb3J0cy5zZXJpYWxpemVVUkxUb1VuaWNvZGVPcmlnaW4gPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVVUkxUb1VuaWNvZGVPcmlnaW47XG5leHBvcnRzLmJhc2ljVVJMUGFyc2UgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5iYXNpY1VSTFBhcnNlO1xuZXhwb3J0cy5zZXRUaGVVc2VybmFtZSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNldFRoZVVzZXJuYW1lO1xuZXhwb3J0cy5zZXRUaGVQYXNzd29yZCA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNldFRoZVBhc3N3b3JkO1xuZXhwb3J0cy5zZXJpYWxpemVIb3N0ID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplSG9zdDtcbmV4cG9ydHMuc2VyaWFsaXplSW50ZWdlciA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNlcmlhbGl6ZUludGVnZXI7XG5leHBvcnRzLnBhcnNlVVJMID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikucGFyc2VVUkw7XG4iLCJcInVzZSBzdHJpY3RcIjtcclxuY29uc3QgcHVueWNvZGUgPSByZXF1aXJlKFwicHVueWNvZGVcIik7XHJcbmNvbnN0IHRyNDYgPSByZXF1aXJlKFwidHI0NlwiKTtcclxuXHJcbmNvbnN0IHNwZWNpYWxTY2hlbWVzID0ge1xyXG4gIGZ0cDogMjEsXHJcbiAgZmlsZTogbnVsbCxcclxuICBnb3BoZXI6IDcwLFxyXG4gIGh0dHA6IDgwLFxyXG4gIGh0dHBzOiA0NDMsXHJcbiAgd3M6IDgwLFxyXG4gIHdzczogNDQzXHJcbn07XHJcblxyXG5jb25zdCBmYWlsdXJlID0gU3ltYm9sKFwiZmFpbHVyZVwiKTtcclxuXHJcbmZ1bmN0aW9uIGNvdW50U3ltYm9scyhzdHIpIHtcclxuICByZXR1cm4gcHVueWNvZGUudWNzMi5kZWNvZGUoc3RyKS5sZW5ndGg7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGF0KGlucHV0LCBpZHgpIHtcclxuICBjb25zdCBjID0gaW5wdXRbaWR4XTtcclxuICByZXR1cm4gaXNOYU4oYykgPyB1bmRlZmluZWQgOiBTdHJpbmcuZnJvbUNvZGVQb2ludChjKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBU0NJSURpZ2l0KGMpIHtcclxuICByZXR1cm4gYyA+PSAweDMwICYmIGMgPD0gMHgzOTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBU0NJSUFscGhhKGMpIHtcclxuICByZXR1cm4gKGMgPj0gMHg0MSAmJiBjIDw9IDB4NUEpIHx8IChjID49IDB4NjEgJiYgYyA8PSAweDdBKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB7XHJcbiAgcmV0dXJuIGlzQVNDSUlBbHBoYShjKSB8fCBpc0FTQ0lJRGlnaXQoYyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQVNDSUlIZXgoYykge1xyXG4gIHJldHVybiBpc0FTQ0lJRGlnaXQoYykgfHwgKGMgPj0gMHg0MSAmJiBjIDw9IDB4NDYpIHx8IChjID49IDB4NjEgJiYgYyA8PSAweDY2KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTaW5nbGVEb3QoYnVmZmVyKSB7XHJcbiAgcmV0dXJuIGJ1ZmZlciA9PT0gXCIuXCIgfHwgYnVmZmVyLnRvTG93ZXJDYXNlKCkgPT09IFwiJTJlXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRG91YmxlRG90KGJ1ZmZlcikge1xyXG4gIGJ1ZmZlciA9IGJ1ZmZlci50b0xvd2VyQ2FzZSgpO1xyXG4gIHJldHVybiBidWZmZXIgPT09IFwiLi5cIiB8fCBidWZmZXIgPT09IFwiJTJlLlwiIHx8IGJ1ZmZlciA9PT0gXCIuJTJlXCIgfHwgYnVmZmVyID09PSBcIiUyZSUyZVwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1dpbmRvd3NEcml2ZUxldHRlckNvZGVQb2ludHMoY3AxLCBjcDIpIHtcclxuICByZXR1cm4gaXNBU0NJSUFscGhhKGNwMSkgJiYgKGNwMiA9PT0gNTggfHwgY3AyID09PSAxMjQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1dpbmRvd3NEcml2ZUxldHRlclN0cmluZyhzdHJpbmcpIHtcclxuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PT0gMiAmJiBpc0FTQ0lJQWxwaGEoc3RyaW5nLmNvZGVQb2ludEF0KDApKSAmJiAoc3RyaW5nWzFdID09PSBcIjpcIiB8fCBzdHJpbmdbMV0gPT09IFwifFwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID09PSAyICYmIGlzQVNDSUlBbHBoYShzdHJpbmcuY29kZVBvaW50QXQoMCkpICYmIHN0cmluZ1sxXSA9PT0gXCI6XCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnRhaW5zRm9yYmlkZGVuSG9zdENvZGVQb2ludChzdHJpbmcpIHtcclxuICByZXR1cm4gc3RyaW5nLnNlYXJjaCgvXFx1MDAwMHxcXHUwMDA5fFxcdTAwMEF8XFx1MDAwRHxcXHUwMDIwfCN8JXxcXC98OnxcXD98QHxcXFt8XFxcXHxcXF0vKSAhPT0gLTE7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnRhaW5zRm9yYmlkZGVuSG9zdENvZGVQb2ludEV4Y2x1ZGluZ1BlcmNlbnQoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5zZWFyY2goL1xcdTAwMDB8XFx1MDAwOXxcXHUwMDBBfFxcdTAwMER8XFx1MDAyMHwjfFxcL3w6fFxcP3xAfFxcW3xcXFxcfFxcXS8pICE9PSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTcGVjaWFsU2NoZW1lKHNjaGVtZSkge1xyXG4gIHJldHVybiBzcGVjaWFsU2NoZW1lc1tzY2hlbWVdICE9PSB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3BlY2lhbCh1cmwpIHtcclxuICByZXR1cm4gaXNTcGVjaWFsU2NoZW1lKHVybC5zY2hlbWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkZWZhdWx0UG9ydChzY2hlbWUpIHtcclxuICByZXR1cm4gc3BlY2lhbFNjaGVtZXNbc2NoZW1lXTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGVyY2VudEVuY29kZShjKSB7XHJcbiAgbGV0IGhleCA9IGMudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XHJcbiAgaWYgKGhleC5sZW5ndGggPT09IDEpIHtcclxuICAgIGhleCA9IFwiMFwiICsgaGV4O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIFwiJVwiICsgaGV4O1xyXG59XHJcblxyXG5mdW5jdGlvbiB1dGY4UGVyY2VudEVuY29kZShjKSB7XHJcbiAgY29uc3QgYnVmID0gbmV3IEJ1ZmZlcihjKTtcclxuXHJcbiAgbGV0IHN0ciA9IFwiXCI7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgKytpKSB7XHJcbiAgICBzdHIgKz0gcGVyY2VudEVuY29kZShidWZbaV0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHN0cjtcclxufVxyXG5cclxuZnVuY3Rpb24gdXRmOFBlcmNlbnREZWNvZGUoc3RyKSB7XHJcbiAgY29uc3QgaW5wdXQgPSBuZXcgQnVmZmVyKHN0cik7XHJcbiAgY29uc3Qgb3V0cHV0ID0gW107XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7ICsraSkge1xyXG4gICAgaWYgKGlucHV0W2ldICE9PSAzNykge1xyXG4gICAgICBvdXRwdXQucHVzaChpbnB1dFtpXSk7XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0W2ldID09PSAzNyAmJiBpc0FTQ0lJSGV4KGlucHV0W2kgKyAxXSkgJiYgaXNBU0NJSUhleChpbnB1dFtpICsgMl0pKSB7XHJcbiAgICAgIG91dHB1dC5wdXNoKHBhcnNlSW50KGlucHV0LnNsaWNlKGkgKyAxLCBpICsgMykudG9TdHJpbmcoKSwgMTYpKTtcclxuICAgICAgaSArPSAyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3V0cHV0LnB1c2goaW5wdXRbaV0pO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbmV3IEJ1ZmZlcihvdXRwdXQpLnRvU3RyaW5nKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQzBDb250cm9sUGVyY2VudEVuY29kZShjKSB7XHJcbiAgcmV0dXJuIGMgPD0gMHgxRiB8fCBjID4gMHg3RTtcclxufVxyXG5cclxuY29uc3QgZXh0cmFQYXRoUGVyY2VudEVuY29kZVNldCA9IG5ldyBTZXQoWzMyLCAzNCwgMzUsIDYwLCA2MiwgNjMsIDk2LCAxMjMsIDEyNV0pO1xyXG5mdW5jdGlvbiBpc1BhdGhQZXJjZW50RW5jb2RlKGMpIHtcclxuICByZXR1cm4gaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKGMpIHx8IGV4dHJhUGF0aFBlcmNlbnRFbmNvZGVTZXQuaGFzKGMpO1xyXG59XHJcblxyXG5jb25zdCBleHRyYVVzZXJpbmZvUGVyY2VudEVuY29kZVNldCA9XHJcbiAgbmV3IFNldChbNDcsIDU4LCA1OSwgNjEsIDY0LCA5MSwgOTIsIDkzLCA5NCwgMTI0XSk7XHJcbmZ1bmN0aW9uIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKGMpIHtcclxuICByZXR1cm4gaXNQYXRoUGVyY2VudEVuY29kZShjKSB8fCBleHRyYVVzZXJpbmZvUGVyY2VudEVuY29kZVNldC5oYXMoYyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBlcmNlbnRFbmNvZGVDaGFyKGMsIGVuY29kZVNldFByZWRpY2F0ZSkge1xyXG4gIGNvbnN0IGNTdHIgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjKTtcclxuXHJcbiAgaWYgKGVuY29kZVNldFByZWRpY2F0ZShjKSkge1xyXG4gICAgcmV0dXJuIHV0ZjhQZXJjZW50RW5jb2RlKGNTdHIpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNTdHI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlSVB2NE51bWJlcihpbnB1dCkge1xyXG4gIGxldCBSID0gMTA7XHJcblxyXG4gIGlmIChpbnB1dC5sZW5ndGggPj0gMiAmJiBpbnB1dC5jaGFyQXQoMCkgPT09IFwiMFwiICYmIGlucHV0LmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpID09PSBcInhcIikge1xyXG4gICAgaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMik7XHJcbiAgICBSID0gMTY7XHJcbiAgfSBlbHNlIGlmIChpbnB1dC5sZW5ndGggPj0gMiAmJiBpbnB1dC5jaGFyQXQoMCkgPT09IFwiMFwiKSB7XHJcbiAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZygxKTtcclxuICAgIFIgPSA4O1xyXG4gIH1cclxuXHJcbiAgaWYgKGlucHV0ID09PSBcIlwiKSB7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIGNvbnN0IHJlZ2V4ID0gUiA9PT0gMTAgPyAvW14wLTldLyA6IChSID09PSAxNiA/IC9bXjAtOUEtRmEtZl0vIDogL1teMC03XS8pO1xyXG4gIGlmIChyZWdleC50ZXN0KGlucHV0KSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIFIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjQoaW5wdXQpIHtcclxuICBjb25zdCBwYXJ0cyA9IGlucHV0LnNwbGl0KFwiLlwiKTtcclxuICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09IFwiXCIpIHtcclxuICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHBhcnRzLnBvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKHBhcnRzLmxlbmd0aCA+IDQpIHtcclxuICAgIHJldHVybiBpbnB1dDtcclxuICB9XHJcblxyXG4gIGNvbnN0IG51bWJlcnMgPSBbXTtcclxuICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgIGlmIChwYXJ0ID09PSBcIlwiKSB7XHJcbiAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuICAgIGNvbnN0IG4gPSBwYXJzZUlQdjROdW1iZXIocGFydCk7XHJcbiAgICBpZiAobiA9PT0gZmFpbHVyZSkge1xyXG4gICAgICByZXR1cm4gaW5wdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgbnVtYmVycy5wdXNoKG4pO1xyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJzLmxlbmd0aCAtIDE7ICsraSkge1xyXG4gICAgaWYgKG51bWJlcnNbaV0gPiAyNTUpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChudW1iZXJzW251bWJlcnMubGVuZ3RoIC0gMV0gPj0gTWF0aC5wb3coMjU2LCA1IC0gbnVtYmVycy5sZW5ndGgpKSB7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIGxldCBpcHY0ID0gbnVtYmVycy5wb3AoKTtcclxuICBsZXQgY291bnRlciA9IDA7XHJcblxyXG4gIGZvciAoY29uc3QgbiBvZiBudW1iZXJzKSB7XHJcbiAgICBpcHY0ICs9IG4gKiBNYXRoLnBvdygyNTYsIDMgLSBjb3VudGVyKTtcclxuICAgICsrY291bnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiBpcHY0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXJpYWxpemVJUHY0KGFkZHJlc3MpIHtcclxuICBsZXQgb3V0cHV0ID0gXCJcIjtcclxuICBsZXQgbiA9IGFkZHJlc3M7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgKytpKSB7XHJcbiAgICBvdXRwdXQgPSBTdHJpbmcobiAlIDI1NikgKyBvdXRwdXQ7XHJcbiAgICBpZiAoaSAhPT0gMykge1xyXG4gICAgICBvdXRwdXQgPSBcIi5cIiArIG91dHB1dDtcclxuICAgIH1cclxuICAgIG4gPSBNYXRoLmZsb29yKG4gLyAyNTYpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY2KGlucHV0KSB7XHJcbiAgY29uc3QgaXAgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XHJcbiAgbGV0IHBpZWNlUHRyID0gMDtcclxuICBsZXQgY29tcHJlc3NQdHIgPSBudWxsO1xyXG4gIGxldCBwb2ludGVyID0gMDtcclxuXHJcbiAgaW5wdXQgPSBwdW55Y29kZS51Y3MyLmRlY29kZShpbnB1dCk7XHJcblxyXG4gIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNTgpIHtcclxuICAgIGlmIChpbnB1dFtwb2ludGVyICsgMV0gIT09IDU4KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHBvaW50ZXIgKz0gMjtcclxuICAgICsrcGllY2VQdHI7XHJcbiAgICBjb21wcmVzc1B0ciA9IHBpZWNlUHRyO1xyXG4gIH1cclxuXHJcbiAgd2hpbGUgKHBvaW50ZXIgPCBpbnB1dC5sZW5ndGgpIHtcclxuICAgIGlmIChwaWVjZVB0ciA9PT0gOCkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDU4KSB7XHJcbiAgICAgIGlmIChjb21wcmVzc1B0ciAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgICsrcG9pbnRlcjtcclxuICAgICAgKytwaWVjZVB0cjtcclxuICAgICAgY29tcHJlc3NQdHIgPSBwaWVjZVB0cjtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHZhbHVlID0gMDtcclxuICAgIGxldCBsZW5ndGggPSAwO1xyXG5cclxuICAgIHdoaWxlIChsZW5ndGggPCA0ICYmIGlzQVNDSUlIZXgoaW5wdXRbcG9pbnRlcl0pKSB7XHJcbiAgICAgIHZhbHVlID0gdmFsdWUgKiAweDEwICsgcGFyc2VJbnQoYXQoaW5wdXQsIHBvaW50ZXIpLCAxNik7XHJcbiAgICAgICsrcG9pbnRlcjtcclxuICAgICAgKytsZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlucHV0W3BvaW50ZXJdID09PSA0Nikge1xyXG4gICAgICBpZiAobGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBvaW50ZXIgLT0gbGVuZ3RoO1xyXG5cclxuICAgICAgaWYgKHBpZWNlUHRyID4gNikge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbnVtYmVyc1NlZW4gPSAwO1xyXG5cclxuICAgICAgd2hpbGUgKGlucHV0W3BvaW50ZXJdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBsZXQgaXB2NFBpZWNlID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID4gMCkge1xyXG4gICAgICAgICAgaWYgKGlucHV0W3BvaW50ZXJdID09PSA0NiAmJiBudW1iZXJzU2VlbiA8IDQpIHtcclxuICAgICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGlzQVNDSUlEaWdpdChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KGF0KGlucHV0LCBwb2ludGVyKSk7XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlwdjRQaWVjZSA9IG51bWJlcjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXB2NFBpZWNlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXB2NFBpZWNlID0gaXB2NFBpZWNlICogMTAgKyBudW1iZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID4gMjU1KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKytwb2ludGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaXBbcGllY2VQdHJdID0gaXBbcGllY2VQdHJdICogMHgxMDAgKyBpcHY0UGllY2U7XHJcblxyXG4gICAgICAgICsrbnVtYmVyc1NlZW47XHJcblxyXG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA9PT0gMiB8fCBudW1iZXJzU2VlbiA9PT0gNCkge1xyXG4gICAgICAgICAgKytwaWVjZVB0cjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChudW1iZXJzU2VlbiAhPT0gNCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBicmVhaztcclxuICAgIH0gZWxzZSBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDU4KSB7XHJcbiAgICAgICsrcG9pbnRlcjtcclxuICAgICAgaWYgKGlucHV0W3BvaW50ZXJdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpbnB1dFtwb2ludGVyXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIGlwW3BpZWNlUHRyXSA9IHZhbHVlO1xyXG4gICAgKytwaWVjZVB0cjtcclxuICB9XHJcblxyXG4gIGlmIChjb21wcmVzc1B0ciAhPT0gbnVsbCkge1xyXG4gICAgbGV0IHN3YXBzID0gcGllY2VQdHIgLSBjb21wcmVzc1B0cjtcclxuICAgIHBpZWNlUHRyID0gNztcclxuICAgIHdoaWxlIChwaWVjZVB0ciAhPT0gMCAmJiBzd2FwcyA+IDApIHtcclxuICAgICAgY29uc3QgdGVtcCA9IGlwW2NvbXByZXNzUHRyICsgc3dhcHMgLSAxXTsgLy8gcGllY2VcclxuICAgICAgaXBbY29tcHJlc3NQdHIgKyBzd2FwcyAtIDFdID0gaXBbcGllY2VQdHJdO1xyXG4gICAgICBpcFtwaWVjZVB0cl0gPSB0ZW1wO1xyXG4gICAgICAtLXBpZWNlUHRyO1xyXG4gICAgICAtLXN3YXBzO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoY29tcHJlc3NQdHIgPT09IG51bGwgJiYgcGllY2VQdHIgIT09IDgpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGlwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXJpYWxpemVJUHY2KGFkZHJlc3MpIHtcclxuICBsZXQgb3V0cHV0ID0gXCJcIjtcclxuICBjb25zdCBzZXFSZXN1bHQgPSBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShhZGRyZXNzKTtcclxuICBjb25zdCBjb21wcmVzc1B0ciA9IHNlcVJlc3VsdC5pZHg7XHJcbiAgbGV0IGlnbm9yZTAgPSBmYWxzZTtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRyZXNzLmxlbmd0aDsgKytpKSB7XHJcbiAgICBjb25zdCBwaWVjZSA9IGFkZHJlc3NbaV07XHJcblxyXG4gICAgaWYgKGlnbm9yZTAgJiYgcGllY2UgPT09IDApIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9IGVsc2UgaWYgKGlnbm9yZTApIHtcclxuICAgICAgaWdub3JlMCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb21wcmVzc1B0ciA9PT0gaSkge1xyXG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSBpID09PSAwID8gXCI6OlwiIDogXCI6XCI7XHJcbiAgICAgIG91dHB1dCArPSBzZXBhcmF0b3I7XHJcbiAgICAgIGlnbm9yZTAgPSB0cnVlO1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBvdXRwdXQgKz0gcGllY2UudG9TdHJpbmcoMTYpO1xyXG5cclxuICAgIGlmIChpICE9PSBhZGRyZXNzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgb3V0cHV0ICs9IFwiOlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VIb3N0KGlucHV0LCBpc1NwZWNpYWxBcmcpIHtcclxuICBpZiAoaW5wdXRbMF0gPT09IFwiW1wiKSB7XHJcbiAgICBpZiAoaW5wdXRbaW5wdXQubGVuZ3RoIC0gMV0gIT09IFwiXVwiKSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJzZUlQdjYoaW5wdXQuc3Vic3RyaW5nKDEsIGlucHV0Lmxlbmd0aCAtIDEpKTtcclxuICB9XHJcblxyXG4gIGlmICghaXNTcGVjaWFsQXJnKSB7XHJcbiAgICByZXR1cm4gcGFyc2VPcGFxdWVIb3N0KGlucHV0KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGRvbWFpbiA9IHV0ZjhQZXJjZW50RGVjb2RlKGlucHV0KTtcclxuICBjb25zdCBhc2NpaURvbWFpbiA9IHRyNDYudG9BU0NJSShkb21haW4sIGZhbHNlLCB0cjQ2LlBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwsIGZhbHNlKTtcclxuICBpZiAoYXNjaWlEb21haW4gPT09IG51bGwpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbnRhaW5zRm9yYmlkZGVuSG9zdENvZGVQb2ludChhc2NpaURvbWFpbikpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgaXB2NEhvc3QgPSBwYXJzZUlQdjQoYXNjaWlEb21haW4pO1xyXG4gIGlmICh0eXBlb2YgaXB2NEhvc3QgPT09IFwibnVtYmVyXCIgfHwgaXB2NEhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgIHJldHVybiBpcHY0SG9zdDtcclxuICB9XHJcblxyXG4gIHJldHVybiBhc2NpaURvbWFpbjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VPcGFxdWVIb3N0KGlucHV0KSB7XHJcbiAgaWYgKGNvbnRhaW5zRm9yYmlkZGVuSG9zdENvZGVQb2ludEV4Y2x1ZGluZ1BlcmNlbnQoaW5wdXQpKSB7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGNvbnN0IGRlY29kZWQgPSBwdW55Y29kZS51Y3MyLmRlY29kZShpbnB1dCk7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgKytpKSB7XHJcbiAgICBvdXRwdXQgKz0gcGVyY2VudEVuY29kZUNoYXIoZGVjb2RlZFtpXSwgaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKTtcclxuICB9XHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYXJyKSB7XHJcbiAgbGV0IG1heElkeCA9IG51bGw7XHJcbiAgbGV0IG1heExlbiA9IDE7IC8vIG9ubHkgZmluZCBlbGVtZW50cyA+IDFcclxuICBsZXQgY3VyclN0YXJ0ID0gbnVsbDtcclxuICBsZXQgY3VyckxlbiA9IDA7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAoYXJyW2ldICE9PSAwKSB7XHJcbiAgICAgIGlmIChjdXJyTGVuID4gbWF4TGVuKSB7XHJcbiAgICAgICAgbWF4SWR4ID0gY3VyclN0YXJ0O1xyXG4gICAgICAgIG1heExlbiA9IGN1cnJMZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1cnJTdGFydCA9IG51bGw7XHJcbiAgICAgIGN1cnJMZW4gPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGN1cnJTdGFydCA9PT0gbnVsbCkge1xyXG4gICAgICAgIGN1cnJTdGFydCA9IGk7XHJcbiAgICAgIH1cclxuICAgICAgKytjdXJyTGVuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gaWYgdHJhaWxpbmcgemVyb3NcclxuICBpZiAoY3VyckxlbiA+IG1heExlbikge1xyXG4gICAgbWF4SWR4ID0gY3VyclN0YXJ0O1xyXG4gICAgbWF4TGVuID0gY3VyckxlbjtcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBpZHg6IG1heElkeCxcclxuICAgIGxlbjogbWF4TGVuXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplSG9zdChob3N0KSB7XHJcbiAgaWYgKHR5cGVvZiBob3N0ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICByZXR1cm4gc2VyaWFsaXplSVB2NChob3N0KTtcclxuICB9XHJcblxyXG4gIC8vIElQdjYgc2VyaWFsaXplclxyXG4gIGlmIChob3N0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgIHJldHVybiBcIltcIiArIHNlcmlhbGl6ZUlQdjYoaG9zdCkgKyBcIl1cIjtcclxuICB9XHJcblxyXG4gIHJldHVybiBob3N0O1xyXG59XHJcblxyXG5mdW5jdGlvbiB0cmltQ29udHJvbENoYXJzKHVybCkge1xyXG4gIHJldHVybiB1cmwucmVwbGFjZSgvXltcXHUwMDAwLVxcdTAwMUZcXHUwMDIwXSt8W1xcdTAwMDAtXFx1MDAxRlxcdTAwMjBdKyQvZywgXCJcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyaW1UYWJBbmROZXdsaW5lKHVybCkge1xyXG4gIHJldHVybiB1cmwucmVwbGFjZSgvXFx1MDAwOXxcXHUwMDBBfFxcdTAwMEQvZywgXCJcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3J0ZW5QYXRoKHVybCkge1xyXG4gIGNvbnN0IHBhdGggPSB1cmwucGF0aDtcclxuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgaWYgKHVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIHBhdGgubGVuZ3RoID09PSAxICYmIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlcihwYXRoWzBdKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcGF0aC5wb3AoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5jbHVkZXNDcmVkZW50aWFscyh1cmwpIHtcclxuICByZXR1cm4gdXJsLnVzZXJuYW1lICE9PSBcIlwiIHx8IHVybC5wYXNzd29yZCAhPT0gXCJcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh1cmwpIHtcclxuICByZXR1cm4gdXJsLmhvc3QgPT09IG51bGwgfHwgdXJsLmhvc3QgPT09IFwiXCIgfHwgdXJsLmNhbm5vdEJlQUJhc2VVUkwgfHwgdXJsLnNjaGVtZSA9PT0gXCJmaWxlXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlcihzdHJpbmcpIHtcclxuICByZXR1cm4gL15bQS1aYS16XTokLy50ZXN0KHN0cmluZyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFVSTFN0YXRlTWFjaGluZShpbnB1dCwgYmFzZSwgZW5jb2RpbmdPdmVycmlkZSwgdXJsLCBzdGF0ZU92ZXJyaWRlKSB7XHJcbiAgdGhpcy5wb2ludGVyID0gMDtcclxuICB0aGlzLmlucHV0ID0gaW5wdXQ7XHJcbiAgdGhpcy5iYXNlID0gYmFzZSB8fCBudWxsO1xyXG4gIHRoaXMuZW5jb2RpbmdPdmVycmlkZSA9IGVuY29kaW5nT3ZlcnJpZGUgfHwgXCJ1dGYtOFwiO1xyXG4gIHRoaXMuc3RhdGVPdmVycmlkZSA9IHN0YXRlT3ZlcnJpZGU7XHJcbiAgdGhpcy51cmwgPSB1cmw7XHJcbiAgdGhpcy5mYWlsdXJlID0gZmFsc2U7XHJcbiAgdGhpcy5wYXJzZUVycm9yID0gZmFsc2U7XHJcblxyXG4gIGlmICghdGhpcy51cmwpIHtcclxuICAgIHRoaXMudXJsID0ge1xyXG4gICAgICBzY2hlbWU6IFwiXCIsXHJcbiAgICAgIHVzZXJuYW1lOiBcIlwiLFxyXG4gICAgICBwYXNzd29yZDogXCJcIixcclxuICAgICAgaG9zdDogbnVsbCxcclxuICAgICAgcG9ydDogbnVsbCxcclxuICAgICAgcGF0aDogW10sXHJcbiAgICAgIHF1ZXJ5OiBudWxsLFxyXG4gICAgICBmcmFnbWVudDogbnVsbCxcclxuXHJcbiAgICAgIGNhbm5vdEJlQUJhc2VVUkw6IGZhbHNlXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlcyA9IHRyaW1Db250cm9sQ2hhcnModGhpcy5pbnB1dCk7XHJcbiAgICBpZiAocmVzICE9PSB0aGlzLmlucHV0KSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlucHV0ID0gcmVzO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVzID0gdHJpbVRhYkFuZE5ld2xpbmUodGhpcy5pbnB1dCk7XHJcbiAgaWYgKHJlcyAhPT0gdGhpcy5pbnB1dCkge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICB9XHJcbiAgdGhpcy5pbnB1dCA9IHJlcztcclxuXHJcbiAgdGhpcy5zdGF0ZSA9IHN0YXRlT3ZlcnJpZGUgfHwgXCJzY2hlbWUgc3RhcnRcIjtcclxuXHJcbiAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gIHRoaXMuYXRGbGFnID0gZmFsc2U7XHJcbiAgdGhpcy5hcnJGbGFnID0gZmFsc2U7XHJcbiAgdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcgPSBmYWxzZTtcclxuXHJcbiAgdGhpcy5pbnB1dCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHRoaXMuaW5wdXQpO1xyXG5cclxuICBmb3IgKDsgdGhpcy5wb2ludGVyIDw9IHRoaXMuaW5wdXQubGVuZ3RoOyArK3RoaXMucG9pbnRlcikge1xyXG4gICAgY29uc3QgYyA9IHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyXTtcclxuICAgIGNvbnN0IGNTdHIgPSBpc05hTihjKSA/IHVuZGVmaW5lZCA6IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG5cclxuICAgIC8vIGV4ZWMgc3RhdGUgbWFjaGluZVxyXG4gICAgY29uc3QgcmV0ID0gdGhpc1tcInBhcnNlIFwiICsgdGhpcy5zdGF0ZV0oYywgY1N0cik7XHJcbiAgICBpZiAoIXJldCkge1xyXG4gICAgICBicmVhazsgLy8gdGVybWluYXRlIGFsZ29yaXRobVxyXG4gICAgfSBlbHNlIGlmIChyZXQgPT09IGZhaWx1cmUpIHtcclxuICAgICAgdGhpcy5mYWlsdXJlID0gdHJ1ZTtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2Ugc2NoZW1lIHN0YXJ0XCJdID0gZnVuY3Rpb24gcGFyc2VTY2hlbWVTdGFydChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlBbHBoYShjKSkge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwic2NoZW1lXCI7XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJubyBzY2hlbWVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzY2hlbWVcIl0gPSBmdW5jdGlvbiBwYXJzZVNjaGVtZShjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PT0gNDMgfHwgYyA9PT0gNDUgfHwgYyA9PT0gNDYpIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHIudG9Mb3dlckNhc2UoKTtcclxuICB9IGVsc2UgaWYgKGMgPT09IDU4KSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmICFpc1NwZWNpYWxTY2hlbWUodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWlzU3BlY2lhbCh0aGlzLnVybCkgJiYgaXNTcGVjaWFsU2NoZW1lKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKChpbmNsdWRlc0NyZWRlbnRpYWxzKHRoaXMudXJsKSB8fCB0aGlzLnVybC5wb3J0ICE9PSBudWxsKSAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmICh0aGlzLnVybC5ob3N0ID09PSBcIlwiIHx8IHRoaXMudXJsLmhvc3QgPT09IG51bGwpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnVybC5zY2hlbWUgPSB0aGlzLmJ1ZmZlcjtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gIT09IDQ3IHx8IHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0gIT09IDQ3KSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmaWxlXCI7XHJcbiAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgdGhpcy5iYXNlICE9PSBudWxsICYmIHRoaXMuYmFzZS5zY2hlbWUgPT09IHRoaXMudXJsLnNjaGVtZSkge1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIHJlbGF0aXZlIG9yIGF1dGhvcml0eVwiO1xyXG4gICAgfSBlbHNlIGlmIChpc1NwZWNpYWwodGhpcy51cmwpKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IHNsYXNoZXNcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSA9PT0gNDcpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBvciBhdXRob3JpdHlcIjtcclxuICAgICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKFwiXCIpO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJjYW5ub3QtYmUtYS1iYXNlLVVSTCBwYXRoXCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJubyBzY2hlbWVcIjtcclxuICAgIHRoaXMucG9pbnRlciA9IC0xO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBubyBzY2hlbWVcIl0gPSBmdW5jdGlvbiBwYXJzZU5vU2NoZW1lKGMpIHtcclxuICBpZiAodGhpcy5iYXNlID09PSBudWxsIHx8ICh0aGlzLmJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjICE9PSAzNSkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH0gZWxzZSBpZiAodGhpcy5iYXNlLmNhbm5vdEJlQUJhc2VVUkwgJiYgYyA9PT0gMzUpIHtcclxuICAgIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYmFzZS5zY2hlbWU7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgdGhpcy51cmwuY2Fubm90QmVBQmFzZVVSTCA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAodGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIHJlbGF0aXZlIG9yIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlU3BlY2lhbFJlbGF0aXZlT3JBdXRob3JpdHkoYykge1xyXG4gIGlmIChjID09PSA0NyAmJiB0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdID09PSA0Nykge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwic3BlY2lhbCBhdXRob3JpdHkgaWdub3JlIHNsYXNoZXNcIjtcclxuICAgICsrdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicmVsYXRpdmVcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcGF0aCBvciBhdXRob3JpdHlcIl0gPSBmdW5jdGlvbiBwYXJzZVBhdGhPckF1dGhvcml0eShjKSB7XHJcbiAgaWYgKGMgPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJhdXRob3JpdHlcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSByZWxhdGl2ZVwiXSA9IGZ1bmN0aW9uIHBhcnNlUmVsYXRpdmUoYykge1xyXG4gIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYmFzZS5zY2hlbWU7XHJcbiAgaWYgKGlzTmFOKGMpKSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICB9IGVsc2UgaWYgKGMgPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZSBzbGFzaFwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNjMpIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSB0aGlzLmJhc2UucXVlcnk7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5Mikge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoMCwgdGhpcy5iYXNlLnBhdGgubGVuZ3RoIC0gMSk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSByZWxhdGl2ZSBzbGFzaFwiXSA9IGZ1bmN0aW9uIHBhcnNlUmVsYXRpdmVTbGFzaChjKSB7XHJcbiAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSkge1xyXG4gICAgaWYgKGMgPT09IDkyKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImF1dGhvcml0eVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIGF1dGhvcml0eSBzbGFzaGVzXCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsQXV0aG9yaXR5U2xhc2hlcyhjKSB7XHJcbiAgaWYgKGMgPT09IDQ3ICYmIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiXSA9IGZ1bmN0aW9uIHBhcnNlU3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXMoYykge1xyXG4gIGlmIChjICE9PSA0NyAmJiBjICE9PSA5Mikge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiYXV0aG9yaXR5XCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlQXV0aG9yaXR5KGMsIGNTdHIpIHtcclxuICBpZiAoYyA9PT0gNjQpIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5hdEZsYWcpIHtcclxuICAgICAgdGhpcy5idWZmZXIgPSBcIiU0MFwiICsgdGhpcy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0RmxhZyA9IHRydWU7XHJcblxyXG4gICAgLy8gY2FyZWZ1bCwgdGhpcyBpcyBiYXNlZCBvbiBidWZmZXIgYW5kIGhhcyBpdHMgb3duIHBvaW50ZXIgKHRoaXMucG9pbnRlciAhPSBwb2ludGVyKSBhbmQgaW5uZXIgY2hhcnNcclxuICAgIGNvbnN0IGxlbiA9IGNvdW50U3ltYm9scyh0aGlzLmJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBwb2ludGVyID0gMDsgcG9pbnRlciA8IGxlbjsgKytwb2ludGVyKSB7XHJcbiAgICAgIGNvbnN0IGNvZGVQb2ludCA9IHRoaXMuYnVmZmVyLmNvZGVQb2ludEF0KHBvaW50ZXIpO1xyXG5cclxuICAgICAgaWYgKGNvZGVQb2ludCA9PT0gNTggJiYgIXRoaXMucGFzc3dvcmRUb2tlblNlZW5GbGFnKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVuY29kZWRDb2RlUG9pbnRzID0gcGVyY2VudEVuY29kZUNoYXIoY29kZVBvaW50LCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgICAgIGlmICh0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZykge1xyXG4gICAgICAgIHRoaXMudXJsLnBhc3N3b3JkICs9IGVuY29kZWRDb2RlUG9pbnRzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLnVzZXJuYW1lICs9IGVuY29kZWRDb2RlUG9pbnRzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgfSBlbHNlIGlmIChpc05hTihjKSB8fCBjID09PSA0NyB8fCBjID09PSA2MyB8fCBjID09PSAzNSB8fFxyXG4gICAgICAgICAgICAgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpKSB7XHJcbiAgICBpZiAodGhpcy5hdEZsYWcgJiYgdGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvaW50ZXIgLT0gY291bnRTeW1ib2xzKHRoaXMuYnVmZmVyKSArIDE7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJob3N0XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBob3N0bmFtZVwiXSA9XHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBob3N0XCJdID0gZnVuY3Rpb24gcGFyc2VIb3N0TmFtZShjLCBjU3RyKSB7XHJcbiAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSAmJiB0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgaG9zdFwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNTggJiYgIXRoaXMuYXJyRmxhZykge1xyXG4gICAgaWYgKHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhvc3QgPSBwYXJzZUhvc3QodGhpcy5idWZmZXIsIGlzU3BlY2lhbCh0aGlzLnVybCkpO1xyXG4gICAgaWYgKGhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cmwuaG9zdCA9IGhvc3Q7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwb3J0XCI7XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlID09PSBcImhvc3RuYW1lXCIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUgfHxcclxuICAgICAgICAgICAgIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlICYmIHRoaXMuYnVmZmVyID09PSBcIlwiICYmXHJcbiAgICAgICAgICAgICAgIChpbmNsdWRlc0NyZWRlbnRpYWxzKHRoaXMudXJsKSB8fCB0aGlzLnVybC5wb3J0ICE9PSBudWxsKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG9zdCA9IHBhcnNlSG9zdCh0aGlzLmJ1ZmZlciwgaXNTcGVjaWFsKHRoaXMudXJsKSk7XHJcbiAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVybC5ob3N0ID0gaG9zdDtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoYyA9PT0gOTEpIHtcclxuICAgICAgdGhpcy5hcnJGbGFnID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoYyA9PT0gOTMpIHtcclxuICAgICAgdGhpcy5hcnJGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcG9ydFwiXSA9IGZ1bmN0aW9uIHBhcnNlUG9ydChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzQVNDSUlEaWdpdChjKSkge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9IGVsc2UgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDYzIHx8IGMgPT09IDM1IHx8XHJcbiAgICAgICAgICAgICAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikgfHxcclxuICAgICAgICAgICAgIHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgaWYgKHRoaXMuYnVmZmVyICE9PSBcIlwiKSB7XHJcbiAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh0aGlzLmJ1ZmZlcik7XHJcbiAgICAgIGlmIChwb3J0ID4gTWF0aC5wb3coMiwgMTYpIC0gMSkge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwucG9ydCA9IHBvcnQgPT09IGRlZmF1bHRQb3J0KHRoaXMudXJsLnNjaGVtZSkgPyBudWxsIDogcG9ydDtcclxuICAgICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoIHN0YXJ0XCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5jb25zdCBmaWxlT3RoZXJ3aXNlQ29kZVBvaW50cyA9IG5ldyBTZXQoWzQ3LCA5MiwgNjMsIDM1XSk7XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZVwiXSA9IGZ1bmN0aW9uIHBhcnNlRmlsZShjKSB7XHJcbiAgdGhpcy51cmwuc2NoZW1lID0gXCJmaWxlXCI7XHJcblxyXG4gIGlmIChjID09PSA0NyB8fCBjID09PSA5Mikge1xyXG4gICAgaWYgKGMgPT09IDkyKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmaWxlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIGlmIChpc05hTihjKSkge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgIH0gZWxzZSBpZiAoYyA9PT0gNjMpIHtcclxuICAgICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gICAgfSBlbHNlIGlmIChjID09PSAzNSkge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaW5wdXQubGVuZ3RoIC0gdGhpcy5wb2ludGVyIC0gMSA9PT0gMCB8fCAvLyByZW1haW5pbmcgY29uc2lzdHMgb2YgMCBjb2RlIHBvaW50c1xyXG4gICAgICAgICAgIWlzV2luZG93c0RyaXZlTGV0dGVyQ29kZVBvaW50cyhjLCB0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICAgKHRoaXMuaW5wdXQubGVuZ3RoIC0gdGhpcy5wb2ludGVyIC0gMSA+PSAyICYmIC8vIHJlbWFpbmluZyBoYXMgYXQgbGVhc3QgMiBjb2RlIHBvaW50c1xyXG4gICAgICAgICAgICFmaWxlT3RoZXJ3aXNlQ29kZVBvaW50cy5oYXModGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICAgIHNob3J0ZW5QYXRoKHRoaXMudXJsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGZpbGUgc2xhc2hcIl0gPSBmdW5jdGlvbiBwYXJzZUZpbGVTbGFzaChjKSB7XHJcbiAgaWYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgaG9zdFwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAodGhpcy5iYXNlICE9PSBudWxsICYmIHRoaXMuYmFzZS5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICAgIGlmIChpc05vcm1hbGl6ZWRXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5iYXNlLnBhdGhbMF0pKSB7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aC5wdXNoKHRoaXMuYmFzZS5wYXRoWzBdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZSBob3N0XCJdID0gZnVuY3Rpb24gcGFyc2VGaWxlSG9zdChjLCBjU3RyKSB7XHJcbiAgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDkyIHx8IGMgPT09IDYzIHx8IGMgPT09IDM1KSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSBcIlwiO1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBob3N0ID0gcGFyc2VIb3N0KHRoaXMuYnVmZmVyLCBpc1NwZWNpYWwodGhpcy51cmwpKTtcclxuICAgICAgaWYgKGhvc3QgPT09IGZhaWx1cmUpIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaG9zdCA9PT0gXCJsb2NhbGhvc3RcIikge1xyXG4gICAgICAgIGhvc3QgPSBcIlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSBob3N0O1xyXG5cclxuICAgICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoIHN0YXJ0XCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoIHN0YXJ0XCJdID0gZnVuY3Rpb24gcGFyc2VQYXRoU3RhcnQoYykge1xyXG4gIGlmIChpc1NwZWNpYWwodGhpcy51cmwpKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuXHJcbiAgICBpZiAoYyAhPT0gNDcgJiYgYyAhPT0gOTIpIHtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGMgPT09IDYzKSB7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gIH0gZWxzZSBpZiAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiBjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICB9IGVsc2UgaWYgKGMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgaWYgKGMgIT09IDQ3KSB7XHJcbiAgICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcGF0aFwiXSA9IGZ1bmN0aW9uIHBhcnNlUGF0aChjKSB7XHJcbiAgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB8fFxyXG4gICAgICAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiAoYyA9PT0gNjMgfHwgYyA9PT0gMzUpKSkge1xyXG4gICAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEb3VibGVEb3QodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIHNob3J0ZW5QYXRoKHRoaXMudXJsKTtcclxuICAgICAgaWYgKGMgIT09IDQ3ICYmICEoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaXNTaW5nbGVEb3QodGhpcy5idWZmZXIpICYmIGMgIT09IDQ3ICYmXHJcbiAgICAgICAgICAgICAgICEoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKFwiXCIpO1xyXG4gICAgfSBlbHNlIGlmICghaXNTaW5nbGVEb3QodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIHRoaXMudXJsLnBhdGgubGVuZ3RoID09PSAwICYmIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHRoaXMuYnVmZmVyKSkge1xyXG4gICAgICAgIGlmICh0aGlzLnVybC5ob3N0ICE9PSBcIlwiICYmIHRoaXMudXJsLmhvc3QgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnVybC5ob3N0ID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlclswXSArIFwiOlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXJsLnBhdGgucHVzaCh0aGlzLmJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICBpZiAodGhpcy51cmwuc2NoZW1lID09PSBcImZpbGVcIiAmJiAoYyA9PT0gdW5kZWZpbmVkIHx8IGMgPT09IDYzIHx8IGMgPT09IDM1KSkge1xyXG4gICAgICB3aGlsZSAodGhpcy51cmwucGF0aC5sZW5ndGggPiAxICYmIHRoaXMudXJsLnBhdGhbMF0gPT09IFwiXCIpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGguc2hpZnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGMgPT09IDYzKSB7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICAgIH1cclxuICAgIGlmIChjID09PSAzNSkge1xyXG4gICAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IElmIGMgaXMgbm90IGEgVVJMIGNvZGUgcG9pbnQgYW5kIG5vdCBcIiVcIiwgcGFyc2UgZXJyb3IuXHJcblxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnVmZmVyICs9IHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzUGF0aFBlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgY2Fubm90LWJlLWEtYmFzZS1VUkwgcGF0aFwiXSA9IGZ1bmN0aW9uIHBhcnNlQ2Fubm90QmVBQmFzZVVSTFBhdGgoYykge1xyXG4gIGlmIChjID09PSA2Mykge1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBBZGQ6IG5vdCBhIFVSTCBjb2RlIHBvaW50XHJcbiAgICBpZiAoIWlzTmFOKGMpICYmIGMgIT09IDM3KSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNOYU4oYykpIHtcclxuICAgICAgdGhpcy51cmwucGF0aFswXSA9IHRoaXMudXJsLnBhdGhbMF0gKyBwZXJjZW50RW5jb2RlQ2hhcihjLCBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgcXVlcnlcIl0gPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5KGMsIGNTdHIpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgYyA9PT0gMzUpKSB7XHJcbiAgICBpZiAoIWlzU3BlY2lhbCh0aGlzLnVybCkgfHwgdGhpcy51cmwuc2NoZW1lID09PSBcIndzXCIgfHwgdGhpcy51cmwuc2NoZW1lID09PSBcIndzc1wiKSB7XHJcbiAgICAgIHRoaXMuZW5jb2RpbmdPdmVycmlkZSA9IFwidXRmLThcIjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgQnVmZmVyKHRoaXMuYnVmZmVyKTsgLy8gVE9ETzogVXNlIGVuY29kaW5nIG92ZXJyaWRlIGluc3RlYWRcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGlmIChidWZmZXJbaV0gPCAweDIxIHx8IGJ1ZmZlcltpXSA+IDB4N0UgfHwgYnVmZmVyW2ldID09PSAweDIyIHx8IGJ1ZmZlcltpXSA9PT0gMHgyMyB8fFxyXG4gICAgICAgICAgYnVmZmVyW2ldID09PSAweDNDIHx8IGJ1ZmZlcltpXSA9PT0gMHgzRSkge1xyXG4gICAgICAgIHRoaXMudXJsLnF1ZXJ5ICs9IHBlcmNlbnRFbmNvZGUoYnVmZmVyW2ldKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVybC5xdWVyeSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChidWZmZXJbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVE9ETzogSWYgYyBpcyBub3QgYSBVUkwgY29kZSBwb2ludCBhbmQgbm90IFwiJVwiLCBwYXJzZSBlcnJvci5cclxuICAgIGlmIChjID09PSAzNyAmJlxyXG4gICAgICAoIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSkgfHxcclxuICAgICAgICAhaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDJdKSkpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZnJhZ21lbnRcIl0gPSBmdW5jdGlvbiBwYXJzZUZyYWdtZW50KGMpIHtcclxuICBpZiAoaXNOYU4oYykpIHsgLy8gZG8gbm90aGluZ1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gMHgwKSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBJZiBjIGlzIG5vdCBhIFVSTCBjb2RlIHBvaW50IGFuZCBub3QgXCIlXCIsIHBhcnNlIGVycm9yLlxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXJsLmZyYWdtZW50ICs9IHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzQzBDb250cm9sUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZVVSTCh1cmwsIGV4Y2x1ZGVGcmFnbWVudCkge1xyXG4gIGxldCBvdXRwdXQgPSB1cmwuc2NoZW1lICsgXCI6XCI7XHJcbiAgaWYgKHVybC5ob3N0ICE9PSBudWxsKSB7XHJcbiAgICBvdXRwdXQgKz0gXCIvL1wiO1xyXG5cclxuICAgIGlmICh1cmwudXNlcm5hbWUgIT09IFwiXCIgfHwgdXJsLnBhc3N3b3JkICE9PSBcIlwiKSB7XHJcbiAgICAgIG91dHB1dCArPSB1cmwudXNlcm5hbWU7XHJcbiAgICAgIGlmICh1cmwucGFzc3dvcmQgIT09IFwiXCIpIHtcclxuICAgICAgICBvdXRwdXQgKz0gXCI6XCIgKyB1cmwucGFzc3dvcmQ7XHJcbiAgICAgIH1cclxuICAgICAgb3V0cHV0ICs9IFwiQFwiO1xyXG4gICAgfVxyXG5cclxuICAgIG91dHB1dCArPSBzZXJpYWxpemVIb3N0KHVybC5ob3N0KTtcclxuXHJcbiAgICBpZiAodXJsLnBvcnQgIT09IG51bGwpIHtcclxuICAgICAgb3V0cHV0ICs9IFwiOlwiICsgdXJsLnBvcnQ7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICh1cmwuaG9zdCA9PT0gbnVsbCAmJiB1cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgb3V0cHV0ICs9IFwiLy9cIjtcclxuICB9XHJcblxyXG4gIGlmICh1cmwuY2Fubm90QmVBQmFzZVVSTCkge1xyXG4gICAgb3V0cHV0ICs9IHVybC5wYXRoWzBdO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBmb3IgKGNvbnN0IHN0cmluZyBvZiB1cmwucGF0aCkge1xyXG4gICAgICBvdXRwdXQgKz0gXCIvXCIgKyBzdHJpbmc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodXJsLnF1ZXJ5ICE9PSBudWxsKSB7XHJcbiAgICBvdXRwdXQgKz0gXCI/XCIgKyB1cmwucXVlcnk7XHJcbiAgfVxyXG5cclxuICBpZiAoIWV4Y2x1ZGVGcmFnbWVudCAmJiB1cmwuZnJhZ21lbnQgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIiNcIiArIHVybC5mcmFnbWVudDtcclxuICB9XHJcblxyXG4gIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZU9yaWdpbih0dXBsZSkge1xyXG4gIGlmICh0dXBsZS5zY2hlbWUgPT09IHVuZGVmaW5lZCB8fCB0dXBsZS5ob3N0ID09PSB1bmRlZmluZWQgfHwgdHVwbGUucG9ydCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgfVxyXG5cclxuICBsZXQgcmVzdWx0ID0gdHVwbGUuc2NoZW1lICsgXCI6Ly9cIjtcclxuICByZXN1bHQgKz0gdHI0Ni50b1VuaWNvZGUodHVwbGUuaG9zdCwgZmFsc2UpLmRvbWFpbjtcclxuXHJcbiAgaWYgKHR1cGxlLnBvcnQgIT09IG51bGwpIHtcclxuICAgIHJlc3VsdCArPSBcIjpcIiArIHR1cGxlLnBvcnQ7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVVUkwgPSBzZXJpYWxpemVVUkw7XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVVUkxUb1VuaWNvZGVPcmlnaW4gPSBmdW5jdGlvbiAodXJsKSB7XHJcbiAgc3dpdGNoICh1cmwuc2NoZW1lKSB7XHJcbiAgICBjYXNlIFwiYmxvYlwiOlxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVVUkxUb1VuaWNvZGVPcmlnaW4obW9kdWxlLmV4cG9ydHMucGFyc2VVUkwodXJsLnBhdGhbMF0pKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIHNlcmlhbGl6aW5nIGFuIG9wYXF1ZSBpZGVudGlmaWVyIHJldHVybnMgXCJudWxsXCJcclxuICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgIH1cclxuICAgIGNhc2UgXCJmdHBcIjpcclxuICAgIGNhc2UgXCJnb3BoZXJcIjpcclxuICAgIGNhc2UgXCJodHRwXCI6XHJcbiAgICBjYXNlIFwiaHR0cHNcIjpcclxuICAgIGNhc2UgXCJ3c1wiOlxyXG4gICAgY2FzZSBcIndzc1wiOlxyXG4gICAgICByZXR1cm4gc2VyaWFsaXplT3JpZ2luKHtcclxuICAgICAgICBzY2hlbWU6IHVybC5zY2hlbWUsXHJcbiAgICAgICAgaG9zdDogc2VyaWFsaXplSG9zdCh1cmwuaG9zdCksXHJcbiAgICAgICAgcG9ydDogdXJsLnBvcnRcclxuICAgICAgfSk7XHJcbiAgICBjYXNlIFwiZmlsZVwiOlxyXG4gICAgICAvLyBzcGVjIHNheXMgXCJleGVyY2lzZSB0byB0aGUgcmVhZGVyXCIsIGNocm9tZSBzYXlzIFwiZmlsZTovL1wiXHJcbiAgICAgIHJldHVybiBcImZpbGU6Ly9cIjtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIC8vIHNlcmlhbGl6aW5nIGFuIG9wYXF1ZSBpZGVudGlmaWVyIHJldHVybnMgXCJudWxsXCJcclxuICAgICAgcmV0dXJuIFwibnVsbFwiO1xyXG4gIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzLmJhc2ljVVJMUGFyc2UgPSBmdW5jdGlvbiAoaW5wdXQsIG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICBvcHRpb25zID0ge307XHJcbiAgfVxyXG5cclxuICBjb25zdCB1c20gPSBuZXcgVVJMU3RhdGVNYWNoaW5lKGlucHV0LCBvcHRpb25zLmJhc2VVUkwsIG9wdGlvbnMuZW5jb2RpbmdPdmVycmlkZSwgb3B0aW9ucy51cmwsIG9wdGlvbnMuc3RhdGVPdmVycmlkZSk7XHJcbiAgaWYgKHVzbS5mYWlsdXJlKSB7XHJcbiAgICByZXR1cm4gXCJmYWlsdXJlXCI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdXNtLnVybDtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnNldFRoZVVzZXJuYW1lID0gZnVuY3Rpb24gKHVybCwgdXNlcm5hbWUpIHtcclxuICB1cmwudXNlcm5hbWUgPSBcIlwiO1xyXG4gIGNvbnN0IGRlY29kZWQgPSBwdW55Y29kZS51Y3MyLmRlY29kZSh1c2VybmFtZSk7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgKytpKSB7XHJcbiAgICB1cmwudXNlcm5hbWUgKz0gcGVyY2VudEVuY29kZUNoYXIoZGVjb2RlZFtpXSwgaXNVc2VyaW5mb1BlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnNldFRoZVBhc3N3b3JkID0gZnVuY3Rpb24gKHVybCwgcGFzc3dvcmQpIHtcclxuICB1cmwucGFzc3dvcmQgPSBcIlwiO1xyXG4gIGNvbnN0IGRlY29kZWQgPSBwdW55Y29kZS51Y3MyLmRlY29kZShwYXNzd29yZCk7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVkLmxlbmd0aDsgKytpKSB7XHJcbiAgICB1cmwucGFzc3dvcmQgKz0gcGVyY2VudEVuY29kZUNoYXIoZGVjb2RlZFtpXSwgaXNVc2VyaW5mb1BlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUhvc3QgPSBzZXJpYWxpemVIb3N0O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCA9IGNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQ7XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVJbnRlZ2VyID0gZnVuY3Rpb24gKGludGVnZXIpIHtcclxuICByZXR1cm4gU3RyaW5nKGludGVnZXIpO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMucGFyc2VVUkwgPSBmdW5jdGlvbiAoaW5wdXQsIG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICBvcHRpb25zID0ge307XHJcbiAgfVxyXG5cclxuICAvLyBXZSBkb24ndCBoYW5kbGUgYmxvYnMsIHNvIHRoaXMganVzdCBkZWxlZ2F0ZXM6XHJcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzLmJhc2ljVVJMUGFyc2UoaW5wdXQsIHsgYmFzZVVSTDogb3B0aW9ucy5iYXNlVVJMLCBlbmNvZGluZ092ZXJyaWRlOiBvcHRpb25zLmVuY29kaW5nT3ZlcnJpZGUgfSk7XHJcbn07XHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXlzW2ldLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5c1tpXSkpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy53cmFwcGVyU3ltYm9sID0gU3ltYm9sKFwid3JhcHBlclwiKTtcbm1vZHVsZS5leHBvcnRzLmltcGxTeW1ib2wgPSBTeW1ib2woXCJpbXBsXCIpO1xuXG5tb2R1bGUuZXhwb3J0cy53cmFwcGVyRm9ySW1wbCA9IGZ1bmN0aW9uIChpbXBsKSB7XG4gIHJldHVybiBpbXBsW21vZHVsZS5leHBvcnRzLndyYXBwZXJTeW1ib2xdO1xufTtcblxubW9kdWxlLmV4cG9ydHMuaW1wbEZvcldyYXBwZXIgPSBmdW5jdGlvbiAod3JhcHBlcikge1xuICByZXR1cm4gd3JhcHBlclttb2R1bGUuZXhwb3J0cy5pbXBsU3ltYm9sXTtcbn07XG5cbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgY29udmVyc2lvbnMgPSB7fTtcbm1vZHVsZS5leHBvcnRzID0gY29udmVyc2lvbnM7XG5cbmZ1bmN0aW9uIHNpZ24oeCkge1xuICAgIHJldHVybiB4IDwgMCA/IC0xIDogMTtcbn1cblxuZnVuY3Rpb24gZXZlblJvdW5kKHgpIHtcbiAgICAvLyBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZSBldmVuIGludGVnZXIgaWYgaXQgbGllcyBoYWxmd2F5IGJldHdlZW4gdHdvLlxuICAgIGlmICgoeCAlIDEpID09PSAwLjUgJiYgKHggJiAxKSA9PT0gMCkgeyAvLyBbZXZlbiBudW1iZXJdLjU7IHJvdW5kIGRvd24gKGkuZS4gZmxvb3IpXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlTnVtYmVyQ29udmVyc2lvbihiaXRMZW5ndGgsIHR5cGVPcHRzKSB7XG4gICAgaWYgKCF0eXBlT3B0cy51bnNpZ25lZCkge1xuICAgICAgICAtLWJpdExlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgbG93ZXJCb3VuZCA9IHR5cGVPcHRzLnVuc2lnbmVkID8gMCA6IC1NYXRoLnBvdygyLCBiaXRMZW5ndGgpO1xuICAgIGNvbnN0IHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMTtcblxuICAgIGNvbnN0IG1vZHVsb1ZhbCA9IHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCA/IE1hdGgucG93KDIsIHR5cGVPcHRzLm1vZHVsb0JpdExlbmd0aCkgOiBNYXRoLnBvdygyLCBiaXRMZW5ndGgpO1xuICAgIGNvbnN0IG1vZHVsb0JvdW5kID0gdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoID8gTWF0aC5wb3coMiwgdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoIC0gMSkgOiBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKTtcblxuICAgIHJldHVybiBmdW5jdGlvbihWLCBvcHRzKSB7XG4gICAgICAgIGlmICghb3B0cykgb3B0cyA9IHt9O1xuXG4gICAgICAgIGxldCB4ID0gK1Y7XG5cbiAgICAgICAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlKSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSBmaW5pdGUgbnVtYmVyXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4ID0gc2lnbih4KSAqIE1hdGguZmxvb3IoTWF0aC5hYnMoeCkpO1xuICAgICAgICAgICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBpbiBieXRlIHJhbmdlXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oeCkgJiYgb3B0cy5jbGFtcCkge1xuICAgICAgICAgICAgeCA9IGV2ZW5Sb3VuZCh4KTtcblxuICAgICAgICAgICAgaWYgKHggPCBsb3dlckJvdW5kKSB4ID0gbG93ZXJCb3VuZDtcbiAgICAgICAgICAgIGlmICh4ID4gdXBwZXJCb3VuZCkgeCA9IHVwcGVyQm91bmQ7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpIHx8IHggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgeCA9IHNpZ24oeCkgKiBNYXRoLmZsb29yKE1hdGguYWJzKHgpKTtcbiAgICAgICAgeCA9IHggJSBtb2R1bG9WYWw7XG5cbiAgICAgICAgaWYgKCF0eXBlT3B0cy51bnNpZ25lZCAmJiB4ID49IG1vZHVsb0JvdW5kKSB7XG4gICAgICAgICAgICByZXR1cm4geCAtIG1vZHVsb1ZhbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlT3B0cy51bnNpZ25lZCkge1xuICAgICAgICAgICAgaWYgKHggPCAwKSB7XG4gICAgICAgICAgICAgIHggKz0gbW9kdWxvVmFsO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh4ID09PSAtMCkgeyAvLyBkb24ndCByZXR1cm4gbmVnYXRpdmUgemVyb1xuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbn1cblxuY29udmVyc2lvbnNbXCJ2b2lkXCJdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb252ZXJzaW9uc1tcImJvb2xlYW5cIl0gPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuICEhdmFsO1xufTtcblxuY29udmVyc2lvbnNbXCJieXRlXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbig4LCB7IHVuc2lnbmVkOiBmYWxzZSB9KTtcbmNvbnZlcnNpb25zW1wib2N0ZXRcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDgsIHsgdW5zaWduZWQ6IHRydWUgfSk7XG5cbmNvbnZlcnNpb25zW1wic2hvcnRcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDE2LCB7IHVuc2lnbmVkOiBmYWxzZSB9KTtcbmNvbnZlcnNpb25zW1widW5zaWduZWQgc2hvcnRcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDE2LCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5jb252ZXJzaW9uc1tcImxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiBmYWxzZSB9KTtcbmNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IHRydWUgfSk7XG5cbmNvbnZlcnNpb25zW1wibG9uZyBsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogZmFsc2UsIG1vZHVsb0JpdExlbmd0aDogNjQgfSk7XG5jb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmcgbG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IHRydWUsIG1vZHVsb0JpdExlbmd0aDogNjQgfSk7XG5cbmNvbnZlcnNpb25zW1wiZG91YmxlXCJdID0gZnVuY3Rpb24gKFYpIHtcbiAgICBjb25zdCB4ID0gK1Y7XG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgZmluaXRlIGZsb2F0aW5nLXBvaW50IHZhbHVlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuY29udmVyc2lvbnNbXCJ1bnJlc3RyaWN0ZWQgZG91YmxlXCJdID0gZnVuY3Rpb24gKFYpIHtcbiAgICBjb25zdCB4ID0gK1Y7XG5cbiAgICBpZiAoaXNOYU4oeCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIE5hTlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4geDtcbn07XG5cbi8vIG5vdCBxdWl0ZSB2YWxpZCwgYnV0IGdvb2QgZW5vdWdoIGZvciBKU1xuY29udmVyc2lvbnNbXCJmbG9hdFwiXSA9IGNvbnZlcnNpb25zW1wiZG91YmxlXCJdO1xuY29udmVyc2lvbnNbXCJ1bnJlc3RyaWN0ZWQgZmxvYXRcIl0gPSBjb252ZXJzaW9uc1tcInVucmVzdHJpY3RlZCBkb3VibGVcIl07XG5cbmNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcblxuICAgIGlmIChvcHRzLnRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgViA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKFYpO1xufTtcblxuY29udmVyc2lvbnNbXCJCeXRlU3RyaW5nXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBjb25zdCB4ID0gU3RyaW5nKFYpO1xuICAgIGxldCBjID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSAwOyAoYyA9IHguY29kZVBvaW50QXQoaSkpICE9PSB1bmRlZmluZWQ7ICsraSkge1xuICAgICAgICBpZiAoYyA+IDI1NSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIGJ5dGVzdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geDtcbn07XG5cbmNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdID0gZnVuY3Rpb24gKFYpIHtcbiAgICBjb25zdCBTID0gU3RyaW5nKFYpO1xuICAgIGNvbnN0IG4gPSBTLmxlbmd0aDtcbiAgICBjb25zdCBVID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgY29uc3QgYyA9IFMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPCAweEQ4MDAgfHwgYyA+IDB4REZGRikge1xuICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KGMpKTtcbiAgICAgICAgfSBlbHNlIGlmICgweERDMDAgPD0gYyAmJiBjIDw9IDB4REZGRikge1xuICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KDB4RkZGRCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGkgPT09IG4gLSAxKSB7XG4gICAgICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KDB4RkZGRCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gUy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAoMHhEQzAwIDw9IGQgJiYgZCA8PSAweERGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IGMgJiAweDNGRjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYiA9IGQgJiAweDNGRjtcbiAgICAgICAgICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KCgyIDw8IDE1KSArICgyIDw8IDkpICogYSArIGIpKTtcbiAgICAgICAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gVS5qb2luKCcnKTtcbn07XG5cbmNvbnZlcnNpb25zW1wiRGF0ZVwiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgaWYgKCEoViBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSBEYXRlIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKGlzTmFOKFYpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFY7XG59O1xuXG5jb252ZXJzaW9uc1tcIlJlZ0V4cFwiXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gICAgaWYgKCEoViBpbnN0YW5jZW9mIFJlZ0V4cCkpIHtcbiAgICAgICAgViA9IG5ldyBSZWdFeHAoVik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFY7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKXtmdW5jdGlvbiBfd2FrYShwYXJzZXIsIHN0YXJ0UnVsZSkge1xuICBpZihzdGFydFJ1bGUgJiYgISBwYXJzZXIucnVsZXNbc3RhcnRSdWxlXSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IHJ1bGUgbWlzc2luZzogJyArIEpTT04uc3RyaW5naWZ5KHN0YXJ0UnVsZSkpXG5cbiAgcmV0dXJuIHtcbiAgICBnZXRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLnN0YXRlXG4gICAgfSxcblxuICAgIGdldFRyYWNlOiBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgICByZXR1cm4gKG1lc3NhZ2UgPyBtZXNzYWdlICsgJ1xcbicgOiAnJykgKyBwYXJzZXIuc3RhdGUudHJhY2VMaW5lKClcbiAgICB9LFxuXG4gICAgZXhlYzogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgIGlmKCEgc3RhcnRSdWxlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIHN0YXJ0IHJ1bGUgZ2l2ZW4nKVxuXG4gICAgICBwYXJzZXIuc3RhdGUuc2V0SW5wdXQoaW5wdXQpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnNlci5ydWxlc1tzdGFydFJ1bGVdKClcbiAgICAgIH1cbiAgICAgIGNhdGNoKGVycikge1xuICAgICAgICB2YXIgZXJyb3IgPSBlcnJcbiAgICAgIH1cblxuICAgICAgaWYoZXJyb3IgPT0gbnVsbCkge1xuICAgICAgICBpZighIHBhcnNlci5zdGF0ZS5hZHYgfHwgISBwYXJzZXIuc3RhdGUuaXNFT0YoKSlcbiAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc3ludGF4IGluIHRvcCcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGVycm9yID09IG51bGwsXG4gICAgICAgIHZhbHVlOiAhIGVycm9yID8gdmFsdWUgOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdGFydFdpdGg6IGZ1bmN0aW9uKHJ1bGUpIHtcbiAgICAgIHJldHVybiBfd2FrYShwYXJzZXIsIHJ1bGUpXG4gICAgfSxcbiAgfVxufTtcbnJldHVybiBfd2FrYSgoZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7XG52YXIgX3J1bGVzPXt9O1xuX3J1bGVzLk5hbWVTdGFydENoYXIgPSBmdW5jdGlvbigpIHtcbnZhciBfUj1fUC5tYXRjaChcIjpcIik7XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDA9X1AuY3VyKCk7XG5pZigkMD09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiQVwiPD0kMCYmJDA8PVwiWlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciBfUj1fUC5tYXRjaChcIl9cIik7XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDE9X1AuY3VyKCk7XG5pZigkMT09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiYVwiPD0kMSYmJDE8PVwielwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkMj1fUC5jdXIoKTtcbmlmKCQyPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUwMEMwXCI8PSQyJiYkMjw9XCJcXHUwMEQ2XCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQzPV9QLmN1cigpO1xuaWYoJDM9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTAwRDhcIjw9JDMmJiQzPD1cIlxcdTAwRjZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDQ9X1AuY3VyKCk7XG5pZigkND09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MDBGOFwiPD0kNCYmJDQ8PVwiXFx1MDJGRlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkNT1fUC5jdXIoKTtcbmlmKCQ1PT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUwMzcwXCI8PSQ1JiYkNTw9XCJcXHUwMzdEXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQ2PV9QLmN1cigpO1xuaWYoJDY9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTAzN0ZcIjw9JDYmJiQ2PD1cIlxcdTFGRkZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDc9X1AuY3VyKCk7XG5pZigkNz09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MjAwQ1wiPD0kNyYmJDc8PVwiXFx1MjAwRFwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkOD1fUC5jdXIoKTtcbmlmKCQ4PT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUyMDcwXCI8PSQ4JiYkODw9XCJcXHUyMThGXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQ5PV9QLmN1cigpO1xuaWYoJDk9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTJDMDBcIjw9JDkmJiQ5PD1cIlxcdTJGRUZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJGE9X1AuY3VyKCk7XG5pZigkYT09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MzAwMVwiPD0kYSYmJGE8PVwiXFx1RDdGRlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkYj1fUC5jdXIoKTtcbmlmKCRiPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHVGOTAwXCI8PSRiJiYkYjw9XCJcXHVGRENGXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICRjPV9QLmN1cigpO1xuaWYoJGM9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdUZERjBcIjw9JGMmJiRjPD1cIlxcdUZGRkRcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG4kZDp7dmFyICRlPV9QLnBvcztcbnZhciAkZj1fUC5jdXIoKTtcbmlmKCRmPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG5udWxsO1xufWVsc2V7XG5fUC5zdGVwKFwiXFx1RDgwMFwiPD0kZiYmJGY8PVwiXFx1REI3RlwiKTtcbn1cbmlmKCFfUC5hZHYpIGJyZWFrICRkO1xudmFyICRnPV9QLmN1cigpO1xuaWYoJGc9PW51bGwpe19QLmFkdj1mYWxzZTtcbm51bGw7XG59ZWxzZXtcbl9QLnN0ZXAoXCJcXHVEQzAwXCI8PSRnJiYkZzw9XCJcXHVERkZGXCIpO1xufVxudmFyIF9SPV9QLmRvYy5zdWJzdHJpbmcoJGUsX1AucG9zKTtcbn1cbmlmKCFfUC5hZHYpIF9QLnBvcz0kZTtcbn1cbnJldHVybiBfUjtcbn1cbl9ydWxlcy5OYW1lQ2hhciA9IGZ1bmN0aW9uKCkge1xudmFyIF9SPV9ydWxlcy5OYW1lU3RhcnRDaGFyKCk7XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgX1I9X1AubWF0Y2goXCItXCIpO1xufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyIF9SPV9QLm1hdGNoKFwiLlwiKTtcbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkMD1fUC5jdXIoKTtcbmlmKCQwPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCIwXCI8PSQwJiYkMDw9XCI5XCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyIF9SPV9QLm1hdGNoKFwiXFx1MDBCN1wiKTtcbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkMT1fUC5jdXIoKTtcbmlmKCQxPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUwMzAwXCI8PSQxJiYkMTw9XCJcXHUwMzZGXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQyPV9QLmN1cigpO1xuaWYoJDI9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTIwM0ZcIjw9JDImJiQyPD1cIlxcdTIwNDBcIik7XG59XG59XG5yZXR1cm4gX1I7XG59XG5fcnVsZXMuTmFtZSA9IGZ1bmN0aW9uKCkge1xuJDA6e3ZhciAkMT1fUC5wb3M7XG5fcnVsZXMuTmFtZVN0YXJ0Q2hhcigpO1xuaWYoIV9QLmFkdikgYnJlYWsgJDA7XG52YXIgJDI9ZmFsc2U7XG5mb3IoOzspIHtcbl9ydWxlcy5OYW1lQ2hhcigpO1xuaWYoIV9QLmFkdikgYnJlYWs7XG4kMj10cnVlO1xufTsgX1AuYWR2PXRydWU7XG52YXIgX1I9X1AuZG9jLnN1YnN0cmluZygkMSxfUC5wb3MpO1xufVxuaWYoIV9QLmFkdikgX1AucG9zPSQxO1xucmV0dXJuIF9SO1xufVxuX3J1bGVzLlFOYW1lID0gZnVuY3Rpb24oKSB7XG52YXIgX1I9X3J1bGVzLlByZWZpeGVkTmFtZSgpO1xuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyIF9SPV9ydWxlcy5VbnByZWZpeGVkTmFtZSgpO1xufVxucmV0dXJuIF9SO1xufVxuX3J1bGVzLlByZWZpeGVkTmFtZSA9IGZ1bmN0aW9uKCkge1xuJDA6e3ZhciAkMT1fUC5wb3M7XG5fcnVsZXMuUHJlZml4KCk7XG5pZighX1AuYWR2KSBicmVhayAkMDtcbl9QLm1hdGNoKFwiOlwiKTtcbmlmKCFfUC5hZHYpIGJyZWFrICQwO1xuX3J1bGVzLkxvY2FsUGFydCgpO1xudmFyIF9SPV9QLmRvYy5zdWJzdHJpbmcoJDEsX1AucG9zKTtcbn1cbmlmKCFfUC5hZHYpIF9QLnBvcz0kMTtcbnJldHVybiBfUjtcbn1cbl9ydWxlcy5VbnByZWZpeGVkTmFtZSA9IGZ1bmN0aW9uKCkge1xudmFyIF9SPV9ydWxlcy5Mb2NhbFBhcnQoKTtcbnJldHVybiBfUjtcbn1cbl9ydWxlcy5QcmVmaXggPSBmdW5jdGlvbigpIHtcbnZhciBfUj1fcnVsZXMuTkNOYW1lKCk7XG5yZXR1cm4gX1I7XG59XG5fcnVsZXMuTG9jYWxQYXJ0ID0gZnVuY3Rpb24oKSB7XG52YXIgX1I9X3J1bGVzLk5DTmFtZSgpO1xucmV0dXJuIF9SO1xufVxuX3J1bGVzLk5DTmFtZVN0YXJ0Q2hhciA9IGZ1bmN0aW9uKCkge1xudmFyICQwPV9QLmN1cigpO1xuaWYoJDA9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIkFcIjw9JDAmJiQwPD1cIlpcIik7XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgX1I9X1AubWF0Y2goXCJfXCIpO1xufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQxPV9QLmN1cigpO1xuaWYoJDE9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcImFcIjw9JDEmJiQxPD1cInpcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDI9X1AuY3VyKCk7XG5pZigkMj09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MDBDMFwiPD0kMiYmJDI8PVwiXFx1MDBENlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkMz1fUC5jdXIoKTtcbmlmKCQzPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUwMEQ4XCI8PSQzJiYkMzw9XCJcXHUwMEY2XCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQ0PV9QLmN1cigpO1xuaWYoJDQ9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTAwRjhcIjw9JDQmJiQ0PD1cIlxcdTAyRkZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDU9X1AuY3VyKCk7XG5pZigkNT09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MDM3MFwiPD0kNSYmJDU8PVwiXFx1MDM3RFwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkNj1fUC5jdXIoKTtcbmlmKCQ2PT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUwMzdGXCI8PSQ2JiYkNjw9XCJcXHUxRkZGXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQ3PV9QLmN1cigpO1xuaWYoJDc9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTIwMENcIjw9JDcmJiQ3PD1cIlxcdTIwMERcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDg9X1AuY3VyKCk7XG5pZigkOD09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MjA3MFwiPD0kOCYmJDg8PVwiXFx1MjE4RlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkOT1fUC5jdXIoKTtcbmlmKCQ5PT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUyQzAwXCI8PSQ5JiYkOTw9XCJcXHUyRkVGXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICRhPV9QLmN1cigpO1xuaWYoJGE9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTMwMDFcIjw9JGEmJiRhPD1cIlxcdUQ3RkZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJGI9X1AuY3VyKCk7XG5pZigkYj09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1RjkwMFwiPD0kYiYmJGI8PVwiXFx1RkRDRlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkYz1fUC5jdXIoKTtcbmlmKCRjPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHVGREYwXCI8PSRjJiYkYzw9XCJcXHVGRkZEXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xuJGQ6e3ZhciAkZT1fUC5wb3M7XG52YXIgJGY9X1AuY3VyKCk7XG5pZigkZj09bnVsbCl7X1AuYWR2PWZhbHNlO1xubnVsbDtcbn1lbHNle1xuX1Auc3RlcChcIlxcdUQ4MDBcIjw9JGYmJiRmPD1cIlxcdURCN0ZcIik7XG59XG5pZighX1AuYWR2KSBicmVhayAkZDtcbnZhciAkZz1fUC5jdXIoKTtcbmlmKCRnPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG5udWxsO1xufWVsc2V7XG5fUC5zdGVwKFwiXFx1REMwMFwiPD0kZyYmJGc8PVwiXFx1REZGRlwiKTtcbn1cbnZhciBfUj1fUC5kb2Muc3Vic3RyaW5nKCRlLF9QLnBvcyk7XG59XG5pZighX1AuYWR2KSBfUC5wb3M9JGU7XG59XG5yZXR1cm4gX1I7XG59XG5fcnVsZXMuTkNOYW1lQ2hhciA9IGZ1bmN0aW9uKCkge1xudmFyIF9SPV9ydWxlcy5OQ05hbWVTdGFydENoYXIoKTtcbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciBfUj1fUC5tYXRjaChcIi1cIik7XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgX1I9X1AubWF0Y2goXCIuXCIpO1xufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQwPV9QLmN1cigpO1xuaWYoJDA9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIjBcIjw9JDAmJiQwPD1cIjlcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgX1I9X1AubWF0Y2goXCJcXHUwMEI3XCIpO1xufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQxPV9QLmN1cigpO1xuaWYoJDE9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTAzMDBcIjw9JDEmJiQxPD1cIlxcdTAzNkZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDI9X1AuY3VyKCk7XG5pZigkMj09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MjAzRlwiPD0kMiYmJDI8PVwiXFx1MjA0MFwiKTtcbn1cbn1cbnJldHVybiBfUjtcbn1cbl9ydWxlcy5OQ05hbWUgPSBmdW5jdGlvbigpIHtcbiQwOnt2YXIgJDE9X1AucG9zO1xuX3J1bGVzLk5DTmFtZVN0YXJ0Q2hhcigpO1xuaWYoIV9QLmFkdikgYnJlYWsgJDA7XG52YXIgJDI9ZmFsc2U7XG5mb3IoOzspIHtcbl9ydWxlcy5OQ05hbWVDaGFyKCk7XG5pZighX1AuYWR2KSBicmVhaztcbiQyPXRydWU7XG59OyBfUC5hZHY9dHJ1ZTtcbnZhciBfUj1fUC5kb2Muc3Vic3RyaW5nKCQxLF9QLnBvcyk7XG59XG5pZighX1AuYWR2KSBfUC5wb3M9JDE7XG5yZXR1cm4gX1I7XG59XG5mdW5jdGlvbiBQYXJzZXJTdGF0ZSgpIHtcbiAgdGhpcy5kb2MgPSAnJ1xuICB0aGlzLnBvcyA9IDBcbiAgdGhpcy5hZHYgPSB0cnVlXG5cbiAgdGhpcy5zZXRJbnB1dCA9IGZ1bmN0aW9uKGRvYykge1xuICAgIHRoaXMuZG9jID0gZG9jXG4gICAgdGhpcy5wb3MgPSAwXG4gICAgdGhpcy5hZHYgPSB0cnVlXG4gIH1cblxuICB0aGlzLmlzRU9GID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucG9zID09IHRoaXMuZG9jLmxlbmd0aFxuICB9XG5cbiAgdGhpcy5jdXIgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gX1AuZG9jW19QLnBvc11cbiAgfVxuXG4gIHRoaXMubWF0Y2ggPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZihfUC5hZHYgPSBfUC5kb2Muc3Vic3RyKF9QLnBvcywgc3RyLmxlbmd0aCkgPT0gc3RyKSB7XG4gICAgICBfUC5wb3MgKz0gc3RyLmxlbmd0aFxuICAgICAgcmV0dXJuIHN0clxuICAgIH1cbiAgfVxuXG4gIHRoaXMuc3RlcCA9IGZ1bmN0aW9uKGZsYWcpIHtcbiAgICBpZihfUC5hZHYgPSBmbGFnKSB7XG4gICAgICBfUC5wb3MrK1xuICAgICAgcmV0dXJuIF9QLmRvY1tfUC5wb3MgLSAxXVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudW5leHBlY3RlZCA9IGZ1bmN0aW9uKHJ1bGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc3ludGF4IGluICcgKyBydWxlKVxuICB9XG5cbiAgdGhpcy50cmFjZUxpbmUgPSBmdW5jdGlvbihwb3MpIHtcbiAgICBpZighIHBvcykgcG9zID0gX1AucG9zXG5cbiAgICB2YXIgZnJvbSA9IF9QLmRvYy5sYXN0SW5kZXhPZignXFxuJywgcG9zKSwgdG8gPSBfUC5kb2MuaW5kZXhPZignXFxuJywgcG9zKVxuICAgIFxuICAgIGlmKGZyb20gPT0gLTEpXG4gICAgICBmcm9tID0gMFxuICAgIGVsc2VcbiAgICAgIGZyb20rK1xuICAgIFxuICAgIGlmKHRvID09IC0xKVxuICAgICAgdG8gPSBwb3MubGVuZ3RoXG5cbiAgICB2YXIgbGluZU5vID0gX1AuZG9jLnN1YnN0cmluZygwLCBmcm9tKS5zcGxpdCgnXFxuJykubGVuZ3RoXG4gICAgdmFyIGxpbmUgPSBfUC5kb2Muc3Vic3RyaW5nKGZyb20sIHRvKVxuICAgIHZhciBwb2ludGVyID0gQXJyYXkoMjAwKS5qb2luKCcgJykuc3Vic3RyKDAsIHBvcyAtIGZyb20pICsgJ15eXidcblxuICAgIHJldHVybiAoXG4gICAgICAnTGluZSAnICsgbGluZU5vICsgJzpcXG4nICtcbiAgICAgIGxpbmUgKyAnXFxuJyArXG4gICAgICBwb2ludGVyXG4gICAgKVxuICB9XG59XG52YXIgX1AgPSBuZXcgUGFyc2VyU3RhdGVcbnJldHVybiB7XG4gIHN0YXRlOiBfUCxcbiAgcnVsZXM6IF9ydWxlcyxcbn1cbn0pKCksbnVsbCl9KSgpIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgcGFyc2VyID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkLXBhcnNlci5qc1wiKTtcblxuZXhwb3J0cy5uYW1lID0gZnVuY3Rpb24gKHBvdGVudGlhbE5hbWUpIHtcbiAgICByZXR1cm4gbWFwUmVzdWx0KHBhcnNlci5zdGFydFdpdGgoXCJOYW1lXCIpLmV4ZWMocG90ZW50aWFsTmFtZSkpO1xufTtcblxuZXhwb3J0cy5xbmFtZSA9IGZ1bmN0aW9uIChwb3RlbnRpYWxRbmFtZSkge1xuICAgIHJldHVybiBtYXBSZXN1bHQocGFyc2VyLnN0YXJ0V2l0aChcIlFOYW1lXCIpLmV4ZWMocG90ZW50aWFsUW5hbWUpKTtcbn07XG5cbmZ1bmN0aW9uIG1hcFJlc3VsdChyZXN1bHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiByZXN1bHQuc3VjY2VzcyxcbiAgICAgICAgZXJyb3I6IHJlc3VsdC5lcnJvciAmJiBwYXJzZXIuZ2V0VHJhY2UocmVzdWx0LmVycm9yLm1lc3NhZ2UpXG4gICAgfTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZXh0ZW5kXG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIGV4dGVuZCgpIHtcbiAgICB2YXIgdGFyZ2V0ID0ge31cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV1cblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0XG59XG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJleHRlbnNpb24vYXNzZXRzL2Jhc2U2NC5qcyIsImV4dGVuc2lvbi9hc3NldHMvanF1ZXJ5LndoZW5jYWxsc2VxdWVudGlhbGx5LmpzIiwiZXh0ZW5zaW9uL2JhY2tncm91bmRfcGFnZS9iYWNrZ3JvdW5kX3NjcmlwdC5qcyIsImV4dGVuc2lvbi9jb250ZW50X3NjcmlwdC9jb250ZW50X3NjcmFwZXIuanMiLCJleHRlbnNpb24vc2NyaXB0cy9CYWNrZ3JvdW5kU2NyaXB0LmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvQ2hyb21lUG9wdXBCcm93c2VyLmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvQ29uZmlnLmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvQ29udGVudFNjcmlwdC5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL0NvbnRlbnRTZWxlY3Rvci5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL0RhdGFFeHRyYWN0b3IuanMiLCJleHRlbnNpb24vc2NyaXB0cy9FbGVtZW50UXVlcnkuanMiLCJleHRlbnNpb24vc2NyaXB0cy9KU0RPTUJyb3dzZXIuanMiLCJleHRlbnNpb24vc2NyaXB0cy9KU0RPTUJyb3dzZXJMb2FkZXIuanMiLCJleHRlbnNpb24vc2NyaXB0cy9Kb2IuanMiLCJleHRlbnNpb24vc2NyaXB0cy9RdWV1ZS5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NjcmFwZXIuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3Rvci5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9yRWxlbWVudC5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9yRWxlbWVudEF0dHJpYnV0ZS5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9yRWxlbWVudENsaWNrLmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvU2VsZWN0b3IvU2VsZWN0b3JFbGVtZW50U2Nyb2xsLmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvU2VsZWN0b3IvU2VsZWN0b3JHcm91cC5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9ySFRNTC5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9ySW1hZ2UuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3Rvci9TZWxlY3RvckxpbmsuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3Rvci9TZWxlY3RvclBvcHVwTGluay5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1NlbGVjdG9yL1NlbGVjdG9yVGFibGUuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3Rvci9TZWxlY3RvclRleHQuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3Rvckxpc3QuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TZWxlY3RvcnMuanMiLCJleHRlbnNpb24vc2NyaXB0cy9TaXRlbWFwLmpzIiwiZXh0ZW5zaW9uL3NjcmlwdHMvU3RvcmUuanMiLCJleHRlbnNpb24vc2NyaXB0cy9VbmlxdWVFbGVtZW50TGlzdC5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL1dlYkpTRE9NQnJvd3Nlci5qcyIsImV4dGVuc2lvbi9zY3JpcHRzL2dldEJhY2tncm91bmRTY3JpcHQuanMiLCJleHRlbnNpb24vc2NyaXB0cy9nZXRDb250ZW50U2NyaXB0LmpzIiwibm9kZV9tb2R1bGVzL2FiYWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWJhYi9saWIvYXRvYi5qcyIsIm5vZGVfbW9kdWxlcy9hYmFiL2xpYi9idG9hLmpzIiwibm9kZV9tb2R1bGVzL2Fjb3JuLWdsb2JhbHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYWNvcm4vZGlzdC9hY29ybi5qcyIsIm5vZGVfbW9kdWxlcy9hY29ybi9kaXN0L3dhbGsuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9hanYuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2NhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9fcnVsZXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9mb3JtYXRzLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvcmVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvcnVsZXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3NjaGVtYV9vYmouanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3VjczJsZW5ndGguanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3V0aWwuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3ZhbGlkYXRpb25fZXJyb3IuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fZm9ybWF0TGltaXQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXRJdGVtcy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL19saW1pdExlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL19saW1pdFByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9hbGxPZi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2FueU9mLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9jdXN0b20uanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9kZXBlbmRlbmNpZXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9lbnVtLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvaXRlbXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9tdWx0aXBsZU9mLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvbm90LmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvb25lT2YuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9wYXR0ZXJuLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvcGF0dGVyblJlcXVpcmVkLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvcHJvcGVydGllcy5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL3JlZi5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL3JlcXVpcmVkLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvc3dpdGNoLmpzIiwibm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvdW5pcXVlSXRlbXMuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy92YWxpZGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbGliL2tleXdvcmQuanMiLCJub2RlX21vZHVsZXMvYWp2L2xpYi9yZWZzL2pzb24tc2NoZW1hLWRyYWZ0LTA0Lmpzb24iLCJub2RlX21vZHVsZXMvYWp2L2xpYi9yZWZzL2pzb24tc2NoZW1hLXY1Lmpzb24iLCJub2RlX21vZHVsZXMvYWp2L2xpYi92NS5qcyIsIm5vZGVfbW9kdWxlcy9hanYvbm9kZV9tb2R1bGVzL2pzb24tc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hbWRlZmluZS9hbWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9hcnJheS1lcXVhbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYXBpLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9idWZmZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9ub2RlLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9yZXBvcnRlci5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2NvbnN0YW50cy9kZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9jb25zdGFudHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9kZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2RlY29kZXJzL3BlbS5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2VuY29kZXJzL2Rlci5qcyIsIm5vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2VuY29kZXJzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZW5jb2RlcnMvcGVtLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEvbGliL2Jlci9lcnJvcnMuanMiLCJub2RlX21vZHVsZXMvYXNuMS9saWIvYmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FzbjEvbGliL2Jlci9yZWFkZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS9saWIvYmVyL3R5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2FzbjEvbGliL2Jlci93cml0ZXIuanMiLCJub2RlX21vZHVsZXMvYXNuMS9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYXNzZXJ0LXBsdXMvYXNzZXJ0LmpzIiwibm9kZV9tb2R1bGVzL2Fzc2VydC9hc3NlcnQuanMiLCJub2RlX21vZHVsZXMvYXdzLXNpZ24yL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2F3czQvYXdzNC5qcyIsIm5vZGVfbW9kdWxlcy9hd3M0L2xydS5qcyIsIm5vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYmNyeXB0LXBia2RmL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcyIsIm5vZGVfbW9kdWxlcy9icm9yYW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXItcmVzb2x2ZS9lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9hZXMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYXV0aENpcGhlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL2RlY3J5cHRlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9lbmNyeXB0ZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvZ2hhc2guanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2JjLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NmYi5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9jZmIxLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NmYjguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY3RyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2VjYi5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9tb2Rlcy9vZmIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvc3RyZWFtQ2lwaGVyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktY2lwaGVyL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1kZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1kZXMvbW9kZXMuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1yc2EvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2FsZ29zLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9icm93c2VyL2FsZ29yaXRobXMuanNvbiIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci9jdXJ2ZXMuanNvbiIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci9zaWduLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9icm93c2VyL3ZlcmlmeS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXpsaWIvc3JjL2JpbmRpbmcuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS16bGliL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9idWZmZXItc2hpbXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnVmZmVyLXhvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnVpbHRpbi1zdGF0dXMtY29kZXMvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9jYXNlbGVzcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaXBoZXItYmFzZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jby9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb21iaW5lZC1zdHJlYW0vbGliL2NvbWJpbmVkX3N0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9jb250ZW50LXR5cGUtcGFyc2VyL2xpYi9jb250ZW50LXR5cGUtcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcy9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9jcmVhdGUtZWNkaC9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvY3JlYXRlLWhhc2gvbWFrZS1oYXNoLmpzIiwibm9kZV9tb2R1bGVzL2NyZWF0ZS1oYXNoL21kNS5qcyIsIm5vZGVfbW9kdWxlcy9jcmVhdGUtaG1hYy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NyZWF0ZS1obWFjL2xlZ2FjeS5qcyIsIm5vZGVfbW9kdWxlcy9jcnlwdG8tYnJvd3NlcmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jc3Mtc2VsZWN0b3IvbGliL0Nzc1NlbGVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9DU1NEb2N1bWVudFJ1bGUuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL0NTU0ZvbnRGYWNlUnVsZS5qcyIsIm5vZGVfbW9kdWxlcy9jc3NvbS9saWIvQ1NTSG9zdFJ1bGUuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL0NTU0ltcG9ydFJ1bGUuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL0NTU0tleWZyYW1lUnVsZS5qcyIsIm5vZGVfbW9kdWxlcy9jc3NvbS9saWIvQ1NTS2V5ZnJhbWVzUnVsZS5qcyIsIm5vZGVfbW9kdWxlcy9jc3NvbS9saWIvQ1NTTWVkaWFSdWxlLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9DU1NSdWxlLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9DU1NTdHlsZURlY2xhcmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9DU1NTdHlsZVJ1bGUuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL0NTU1N0eWxlU2hlZXQuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL0NTU1ZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9DU1NWYWx1ZUV4cHJlc3Npb24uanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL01hdGNoZXJMaXN0LmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9NZWRpYUxpc3QuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL1N0eWxlU2hlZXQuanMiLCJub2RlX21vZHVsZXMvY3Nzb20vbGliL2Nsb25lLmpzIiwibm9kZV9tb2R1bGVzL2Nzc29tL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jc3NvbS9saWIvcGFyc2UuanMiLCJub2RlX21vZHVsZXMvY3Nzc3R5bGUvbGliL0NTU1N0eWxlRGVjbGFyYXRpb24uanMiLCJub2RlX21vZHVsZXMvY3Nzc3R5bGUvbGliL3BhcnNlcnMuanMiLCJub2RlX21vZHVsZXMvY3Nzc3R5bGUvbGliL3Byb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvZGVsYXllZC1zdHJlYW0vbGliL2RlbGF5ZWRfc3RyZWFtLmpzIiwibm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzLmpzIiwibm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzL2NiYy5qcyIsIm5vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy9jaXBoZXIuanMiLCJub2RlX21vZHVsZXMvZGVzLmpzL2xpYi9kZXMvZGVzLmpzIiwibm9kZV9tb2R1bGVzL2Rlcy5qcy9saWIvZGVzL2VkZS5qcyIsIm5vZGVfbW9kdWxlcy9kZXMuanMvbGliL2Rlcy91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2RpZmZpZS1oZWxsbWFuL2xpYi9kaC5qcyIsIm5vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9saWIvZ2VuZXJhdGVQcmltZS5qcyIsIm5vZGVfbW9kdWxlcy9kaWZmaWUtaGVsbG1hbi9saWIvcHJpbWVzLmpzb24iLCJub2RlX21vZHVsZXMvZWNjLWpzYm4vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZWNjLWpzYm4vbGliL2VjLmpzIiwibm9kZV9tb2R1bGVzL2VjYy1qc2JuL2xpYi9zZWMuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9iYXNlLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9lZHdhcmRzLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9jdXJ2ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvbW9udC5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvY3VydmUvc2hvcnQuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2N1cnZlcy5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL2VjL2tleS5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWMvc2lnbmF0dXJlLmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lZGRzYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvZWRkc2Eva2V5LmpzIiwibm9kZV9tb2R1bGVzL2VsbGlwdGljL2xpYi9lbGxpcHRpYy9lZGRzYS9zaWduYXR1cmUuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvbGliL2VsbGlwdGljL3ByZWNvbXB1dGVkL3NlY3AyNTZrMS5qcyIsIm5vZGVfbW9kdWxlcy9lbGxpcHRpYy9saWIvZWxsaXB0aWMvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvZWxsaXB0aWMvcGFja2FnZS5qc29uIiwibm9kZV9tb2R1bGVzL2VzY29kZWdlbi9lc2NvZGVnZW4uanMiLCJub2RlX21vZHVsZXMvZXNjb2RlZ2VuL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLmpzIiwibm9kZV9tb2R1bGVzL2VzY29kZWdlbi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvc291cmNlLW1hcC9hcnJheS1zZXQuanMiLCJub2RlX21vZHVsZXMvZXNjb2RlZ2VuL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwL2Jhc2U2NC12bHEuanMiLCJub2RlX21vZHVsZXMvZXNjb2RlZ2VuL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwL2Jhc2U2NC5qcyIsIm5vZGVfbW9kdWxlcy9lc2NvZGVnZW4vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAvYmFzaWMtc291cmNlLW1hcC1jb25zdW1lci5qcyIsIm5vZGVfbW9kdWxlcy9lc2NvZGVnZW4vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAvYmluYXJ5LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy9lc2NvZGVnZW4vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAvaW5kZXhlZC1zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwibm9kZV9tb2R1bGVzL2VzY29kZWdlbi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvc291cmNlLW1hcC9tYXBwaW5nLWxpc3QuanMiLCJub2RlX21vZHVsZXMvZXNjb2RlZ2VuL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvZXNjb2RlZ2VuL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2VzY29kZWdlbi9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvc291cmNlLW1hcC9zb3VyY2Utbm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9lc2NvZGVnZW4vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9lc2NvZGVnZW4vcGFja2FnZS5qc29uIiwibm9kZV9tb2R1bGVzL2VzdHJhdmVyc2UvZXN0cmF2ZXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi9hc3QuanMiLCJub2RlX21vZHVsZXMvZXN1dGlscy9saWIvY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi9rZXl3b3JkLmpzIiwibm9kZV9tb2R1bGVzL2VzdXRpbHMvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJub2RlX21vZHVsZXMvZXZwX2J5dGVzdG9rZXkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2V4dHNwcmludGYvbGliL2V4dHNwcmludGYuanMiLCJub2RlX21vZHVsZXMvZm9yZXZlci1hZ2VudC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9mb3JtLWRhdGEvbGliL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvYWZ0ZXJSZXF1ZXN0Lmpzb24iLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvYmVmb3JlUmVxdWVzdC5qc29uIiwibm9kZV9tb2R1bGVzL2hhci1zY2hlbWEvbGliL2Jyb3dzZXIuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9jYWNoZS5qc29uIiwibm9kZV9tb2R1bGVzL2hhci1zY2hlbWEvbGliL2NvbnRlbnQuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9jb29raWUuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9jcmVhdG9yLmpzb24iLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvZW50cnkuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9oYXIuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9oZWFkZXIuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9sb2cuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9wYWdlLmpzb24iLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvcGFnZVRpbWluZ3MuanNvbiIsIm5vZGVfbW9kdWxlcy9oYXItc2NoZW1hL2xpYi9wb3N0RGF0YS5qc29uIiwibm9kZV9tb2R1bGVzL2hhci1zY2hlbWEvbGliL3F1ZXJ5Lmpzb24iLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvcmVxdWVzdC5qc29uIiwibm9kZV9tb2R1bGVzL2hhci1zY2hlbWEvbGliL3Jlc3BvbnNlLmpzb24iLCJub2RlX21vZHVsZXMvaGFyLXNjaGVtYS9saWIvdGltaW5ncy5qc29uIiwibm9kZV9tb2R1bGVzL2hhci12YWxpZGF0b3IvbGliL25vZGU0L2Vycm9yLmpzIiwibm9kZV9tb2R1bGVzL2hhci12YWxpZGF0b3IvbGliL25vZGU0L3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvaGFzaC1iYXNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanMiLCJub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9jb21tb24uanMiLCJub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9obWFjLmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLmpzIiwibm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvaGF3ay9saWIvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9obWFjLWRyYmcvbGliL2htYWMtZHJiZy5qcyIsIm5vZGVfbW9kdWxlcy9odG1sLWVuY29kaW5nLXNuaWZmZXIvbGliL2h0bWwtZW5jb2Rpbmctc25pZmZlci5qcyIsIm5vZGVfbW9kdWxlcy9odHRwLXNpZ25hdHVyZS9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaHR0cC1zaWduYXR1cmUvbGliL3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9odHRwLXNpZ25hdHVyZS9saWIvc2lnbmVyLmpzIiwibm9kZV9tb2R1bGVzL2h0dHAtc2lnbmF0dXJlL2xpYi91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9odHRwLXNpZ25hdHVyZS9saWIvdmVyaWZ5LmpzIiwibm9kZV9tb2R1bGVzL2h0dHBzLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvZGJjcy1jb2RlYy5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9kYmNzLWRhdGEuanMiLCJub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvaW50ZXJuYWwuanMiLCJub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3Mvc2Jjcy1jb2RlYy5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWRhdGEtZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3NiY3MtZGF0YS5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvYmlnNS1hZGRlZC5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9jcDkzNi5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9jcDk0OS5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9jcDk1MC5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9ldWNqcC5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9nYjE4MDMwLXJhbmdlcy5qc29uIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9nYmstYWRkZWQuanNvbiIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvc2hpZnRqaXMuanNvbiIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy91dGYxNi5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy91dGY3LmpzIiwibm9kZV9tb2R1bGVzL2ljb252LWxpdGUvbGliL2JvbS1oYW5kbGluZy5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9leHRlbmQtbm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9zdHJlYW1zLmpzIiwibm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaW5kZXhvZi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pcy10eXBlZGFycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2lzYXJyYXkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaXNzdHJlYW0vaXNzdHJlYW0uanMiLCJub2RlX21vZHVsZXMvam9kaWQyNTUxOS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qb2RpZDI1NTE5L2xpYi9jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2pvZGlkMjU1MTkvbGliL2N1cnZlMjU1LmpzIiwibm9kZV9tb2R1bGVzL2pvZGlkMjU1MTkvbGliL2RoLmpzIiwibm9kZV9tb2R1bGVzL2pvZGlkMjU1MTkvbGliL2VkZHNhLmpzIiwibm9kZV9tb2R1bGVzL2pvZGlkMjU1MTkvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2pxdWVyeS1kZWZlcnJlZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qcXVlcnktZGVmZXJyZWQvbGliL2pxdWVyeS1jYWxsYmFja3MuanMiLCJub2RlX21vZHVsZXMvanF1ZXJ5LWRlZmVycmVkL2xpYi9qcXVlcnktY29yZS5qcyIsIm5vZGVfbW9kdWxlcy9qcXVlcnktZGVmZXJyZWQvbGliL2pxdWVyeS1kZWZlcnJlZC5qcyIsIm5vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCJub2RlX21vZHVsZXMvanNibi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvYXBpLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9icm93c2VyL1dpbmRvdy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vYnJvd3Nlci9kZWZhdWx0LXN0eWxlc2hlZXQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2Jyb3dzZXIvZG9jdW1lbnRBZGFwdGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9icm93c2VyL2RvY3VtZW50ZmVhdHVyZXMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2Jyb3dzZXIvZG9tdG9odG1sLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9icm93c2VyL2h0bWx0b2RvbS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vYnJvd3Nlci9ub3QtaW1wbGVtZW50ZWQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2Jyb3dzZXIvcmVzb3VyY2UtbG9hZGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9sZXZlbDIvc3R5bGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xldmVsMy94cGF0aC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2F0dHJpYnV0ZXMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9hdHRyaWJ1dGVzL0F0dHItaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2RvbS10b2tlbi1saXN0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZG9tcGFyc2luZy9ET01QYXJzZXItaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2V2ZW50cy9DdXN0b21FdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZXZlbnRzL0Vycm9yRXZlbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2V2ZW50cy9FdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZXZlbnRzL0V2ZW50VGFyZ2V0LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ldmVudHMvRm9jdXNFdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZXZlbnRzL0hhc2hDaGFuZ2VFdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZXZlbnRzL0tleWJvYXJkRXZlbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2V2ZW50cy9NZXNzYWdlRXZlbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2V2ZW50cy9Nb3VzZUV2ZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ldmVudHMvUG9wU3RhdGVFdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZXZlbnRzL1Byb2dyZXNzRXZlbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2V2ZW50cy9Ub3VjaEV2ZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ldmVudHMvVUlFdmVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZmlsZS1hcGkvQmxvYi1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZmlsZS1hcGkvRmlsZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZmlsZS1hcGkvRmlsZUxpc3QtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2ZpbGUtYXBpL0ZpbGVSZWFkZXItaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9BdHRyLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0Jsb2IuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvQmxvYlByb3BlcnR5QmFnLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0NEQVRBU2VjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9DaGFyYWN0ZXJEYXRhLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0NoaWxkTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9Db21tZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0N1c3RvbUV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0N1c3RvbUV2ZW50SW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9ET01JbXBsZW1lbnRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9ET01QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRG9jdW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRG9jdW1lbnRGcmFnbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9Eb2N1bWVudFR5cGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9FbGVtZW50Q1NTSW5saW5lU3R5bGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRWxlbWVudENvbnRlbnRFZGl0YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9FcnJvckV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0Vycm9yRXZlbnRJbml0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0V2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0V2ZW50SW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9FdmVudE1vZGlmaWVySW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9FdmVudFRhcmdldC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9GaWxlLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0ZpbGVMaXN0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0ZpbGVQcm9wZXJ0eUJhZy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9GaWxlUmVhZGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0ZvY3VzRXZlbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRm9jdXNFdmVudEluaXQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvRm9ybURhdGEuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvR2xvYmFsRXZlbnRIYW5kbGVycy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MQW5jaG9yRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MQXBwbGV0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MQXJlYUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTEF1ZGlvRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MQlJFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxCYXNlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MQm9keUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTEJ1dHRvbkVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTENhbnZhc0VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTERMaXN0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRGF0YUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTERhdGFMaXN0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRGlhbG9nRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRGlyZWN0b3J5RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRGl2RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRW1iZWRFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxGaWVsZFNldEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTEZvbnRFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxGb3JtRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MRnJhbWVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxGcmFtZVNldEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTEhSRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MSGVhZEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTEhlYWRpbmdFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxIdG1sRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxJRnJhbWVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxJbWFnZUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTElucHV0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MTElFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxMYWJlbEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTExlZ2VuZEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTExpbmtFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxNYXBFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxNZWRpYUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTE1lbnVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxNZXRhRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MTWV0ZXJFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxNb2RFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxPTGlzdEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTE9iamVjdEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTE9wdEdyb3VwRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MT3B0aW9uRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MT3V0cHV0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MUGFyYWdyYXBoRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MUGFyYW1FbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxQcmVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxQcm9ncmVzc0VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFF1b3RlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MU2NyaXB0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MU2VsZWN0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MU291cmNlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MU3BhbkVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFN0eWxlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGFibGVDZWxsRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGFibGVDb2xFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxUYWJsZURhdGFDZWxsRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGFibGVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxUYWJsZVJvd0VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFRlbXBsYXRlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGV4dEFyZWFFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxUaW1lRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVGl0bGVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0hUTUxUcmFja0VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFVMaXN0RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IVE1MVW5rbm93bkVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSFRNTFZpZGVvRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IYXNoQ2hhbmdlRXZlbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvSGFzaENoYW5nZUV2ZW50SW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9IaXN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0tleWJvYXJkRXZlbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvS2V5Ym9hcmRFdmVudEluaXQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvTGlua1N0eWxlLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL0xvY2F0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL01lc3NhZ2VFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9NZXNzYWdlRXZlbnRJbml0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL01vdXNlRXZlbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvTW91c2VFdmVudEluaXQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvTmF2aWdhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9OYXZpZ2F0b3JDb29raWVzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05hdmlnYXRvcklELmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05hdmlnYXRvckxhbmd1YWdlLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05hdmlnYXRvck9uTGluZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9OYXZpZ2F0b3JQbHVnaW5zLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05vZGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL05vbkVsZW1lbnRQYXJlbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL1BhcmVudE5vZGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvUG9wU3RhdGVFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9Qb3BTdGF0ZUV2ZW50SW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvUHJvZ3Jlc3NFdmVudC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9Qcm9ncmVzc0V2ZW50SW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9UZXh0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL1RvdWNoRXZlbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvVHJlZVdhbGtlci5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2dlbmVyYXRlZC9VSUV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL1VJRXZlbnRJbml0LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvZ2VuZXJhdGVkL1dpbmRvd0V2ZW50SGFuZGxlcnMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvWE1MRG9jdW1lbnQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9nZW5lcmF0ZWQvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvaGVscGVycy9mb2N1c2luZy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2hlbHBlcnMvZm9ybS1jb250cm9scy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvaGVscGVycy9vcmRlcmVkLXNldC1wYXJzZXIuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9oZWxwZXJzL3Byb3hpZWQtd2luZG93LWV2ZW50LWhhbmRsZXJzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvaGVscGVycy9ydW50aW1lLXNjcmlwdC1lcnJvcnMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9oZWxwZXJzL3NlbGVjdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2hlbHBlcnMvc3RyaW5ncy5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2hlbHBlcnMvc3R5bGVzaGVldHMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9oZWxwZXJzL3RyYXZlcnNhbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL2hlbHBlcnMvdmFsaWRhdGUtbmFtZXMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9odG1sLWNvbGxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25hbWVkLXByb3BlcnRpZXMtd2luZG93LmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbmF2aWdhdG9yL05hdmlnYXRvci1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbmF2aWdhdG9yL05hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbmF2aWdhdG9yL05hdmlnYXRvckNvb2tpZXMtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25hdmlnYXRvci9OYXZpZ2F0b3JJRC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbmF2aWdhdG9yL05hdmlnYXRvckxhbmd1YWdlLWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9uYXZpZ2F0b3IvTmF2aWdhdG9yT25MaW5lLWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9uYXZpZ2F0b3IvTmF2aWdhdG9yUGx1Z2lucy1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZS1kb2N1bWVudC1wb3NpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGUtZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZS1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGUtbGlzdC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGUtdHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGUuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9DREFUQVNlY3Rpb24taW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0NoYXJhY3RlckRhdGEtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0NoaWxkTm9kZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvQ29tbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvRE9NSW1wbGVtZW50YXRpb24taW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0RvY3VtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9Eb2N1bWVudEZyYWdtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9Eb2N1bWVudFR5cGUtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0VsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0VsZW1lbnRDU1NJbmxpbmVTdHlsZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvRWxlbWVudENvbnRlbnRFZGl0YWJsZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvR2xvYmFsRXZlbnRIYW5kbGVycy1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEFuY2hvckVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxBcHBsZXRFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MQXJlYUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxBdWRpb0VsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxCUkVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxCYXNlRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEJvZHlFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MQnV0dG9uRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTENhbnZhc0VsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxETGlzdEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxEYXRhRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTERhdGFMaXN0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTERpYWxvZ0VsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxEaXJlY3RvcnlFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MRGl2RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxFbWJlZEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxGaWVsZFNldEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxGb250RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEZvcm1FbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MRnJhbWVFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MRnJhbWVTZXRFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MSFJFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MSGVhZEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxIZWFkaW5nRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEh0bWxFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MSUZyYW1lRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTEltYWdlRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTElucHV0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTExJRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTExhYmVsRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTExlZ2VuZEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxMaW5rRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTE1hcEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxNZWRpYUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxNZW51RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTE1ldGFFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MTWV0ZXJFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MTW9kRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTE9MaXN0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTE9iamVjdEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxPcHRHcm91cEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxPcHRpb25FbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MT3V0cHV0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFBhcmFncmFwaEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxQYXJhbUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxQcmVFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MUHJvZ3Jlc3NFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MUXVvdGVFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MU2NyaXB0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFNlbGVjdEVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxTb3VyY2VFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MU3BhbkVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxTdHlsZUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MVGFibGVDZWxsRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRhYmxlQ29sRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MVGFibGVFbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRhYmxlUm93RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxUZW1wbGF0ZUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxUZXh0QXJlYUVsZW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL0hUTUxUaW1lRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRpdGxlRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFRyYWNrRWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFVMaXN0RWxlbWVudC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvSFRNTFVua25vd25FbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9IVE1MVmlkZW9FbGVtZW50LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy9ub2Rlcy9MaW5rU3R5bGUtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL05vZGUtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL05vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvTm9uRWxlbWVudFBhcmVudE5vZGUtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL1BhcmVudE5vZGUtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL25vZGVzL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvVGV4dC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvV2luZG93RXZlbnRIYW5kbGVycy1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvbm9kZXMvWE1MRG9jdW1lbnQtaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL3Bvc3QtbWVzc2FnZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL3JlZ2lzdGVyLWVsZW1lbnRzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcvdHJhdmVyc2FsL1RyZWVXYWxrZXItaW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL3dpbmRvdy9IaXN0b3J5LWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy93aW5kb3cvTG9jYXRpb24taW1wbC5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vbGl2aW5nL3dpbmRvdy9uYXZpZ2F0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcveGhyLXV0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcveGhyL0Zvcm1EYXRhLWltcGwuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy94bWxodHRwcmVxdWVzdC1ldmVudC10YXJnZXQuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL2xpdmluZy94bWxodHRwcmVxdWVzdC1zeW1ib2xzLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcveG1saHR0cHJlcXVlc3QtdXBsb2FkLmpzIiwibm9kZV9tb2R1bGVzL2pzZG9tL2xpYi9qc2RvbS9saXZpbmcveG1saHR0cHJlcXVlc3QuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL25hbWVkLXByb3BlcnRpZXMtdHJhY2tlci5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vdXRpbHMuanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL3ZpcnR1YWwtY29uc29sZS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vdm0tc2hpbS5qcyIsIm5vZGVfbW9kdWxlcy9qc2RvbS9saWIvanNkb20vd2ViLWlkbC9ET01FeGNlcHRpb24uanMiLCJub2RlX21vZHVsZXMvanNkb20vbGliL2pzZG9tL3dlYi1pZGwvZG9tLWV4Y2VwdGlvbi10YWJsZS5qc29uIiwibm9kZV9tb2R1bGVzL2pzZG9tL3BhY2thZ2UuanNvbiIsIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS9saWIvdmFsaWRhdGUuanMiLCJub2RlX21vZHVsZXMvanNvbi1zdHJpbmdpZnktc2FmZS9zdHJpbmdpZnkuanMiLCJub2RlX21vZHVsZXMvanNvbmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9qc29uaWZ5L2xpYi9wYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9qc29uaWZ5L2xpYi9zdHJpbmdpZnkuanMiLCJub2RlX21vZHVsZXMvanNwcmltL2xpYi9qc3ByaW0uanMiLCJub2RlX21vZHVsZXMvanNwcmltL25vZGVfbW9kdWxlcy9hc3NlcnQtcGx1cy9hc3NlcnQuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIm5vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2lzVW5kZWZpbmVkLmpzIiwibm9kZV9tb2R1bGVzL21pbGxlci1yYWJpbi9saWIvbXIuanMiLCJub2RlX21vZHVsZXMvbWltZS1kYi9kYi5qc29uIiwibm9kZV9tb2R1bGVzL21pbWUtZGIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvbWltZS10eXBlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9taW5pbWFsaXN0aWMtYXNzZXJ0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL253bWF0Y2hlci9zcmMvbndtYXRjaGVyLW5vcXNhLmpzIiwibm9kZV9tb2R1bGVzL29hdXRoLXNpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvb3MtYnJvd3NlcmlmeS9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3Bha28vbGliL3V0aWxzL2NvbW1vbi5qcyIsIm5vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2FkbGVyMzIuanMiLCJub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9jcmMzMi5qcyIsIm5vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2RlZmxhdGUuanMiLCJub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi9pbmZmYXN0LmpzIiwibm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvaW5mbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL2luZnRyZWVzLmpzIiwibm9kZV9tb2R1bGVzL3Bha28vbGliL3psaWIvbWVzc2FnZXMuanMiLCJub2RlX21vZHVsZXMvcGFrby9saWIvemxpYi90cmVlcy5qcyIsIm5vZGVfbW9kdWxlcy9wYWtvL2xpYi96bGliL3pzdHJlYW0uanMiLCJub2RlX21vZHVsZXMvcGFyc2UtYXNuMS9hZXNpZC5qc29uIiwibm9kZV9tb2R1bGVzL3BhcnNlLWFzbjEvYXNuMS5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2NlcnRpZmljYXRlLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLWFzbjEvZml4UHJvYy5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZS1hc24xL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9kb2N0eXBlLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL2ZvcmVpZ25fY29udGVudC5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9odG1sLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL3VuaWNvZGUuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vdXRpbHMuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9qc2RvbS9qc2RvbV9wYXJzZXIuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9qc2RvbS9wYXJzaW5nX3VuaXQuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6ZXIuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9zaW1wbGVfYXBpL3NpbXBsZV9hcGlfcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvc2ltcGxlX2FwaS90b2tlbml6ZXJfcHJveHkuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vbG9jYXRpb25faW5mb19taXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi9uYW1lZF9lbnRpdHlfdHJpZS5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi9wcmVwcm9jZXNzb3IuanMiLCJub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vdG9rZW5pemVyLmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9hZGFwdGVycy9kZWZhdWx0LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9hZGFwdGVycy9odG1scGFyc2VyMi5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL2Zvcm1hdHRpbmdfZWxlbWVudF9saXN0LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vbG9jYXRpb25faW5mb19taXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL29wZW5fZWxlbWVudF9zdGFjay5qcyIsIm5vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9wYXRoLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL2xpYi9hc3luYy5qcyIsIm5vZGVfbW9kdWxlcy9wYmtkZjIvbGliL2RlZmF1bHQtZW5jb2RpbmcuanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL2xpYi9wcmVjb25kaXRpb24uanMiLCJub2RlX21vZHVsZXMvcGJrZGYyL2xpYi9zeW5jLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcGVyZm9ybWFuY2Utbm93L2xpYi9wZXJmb3JtYW5jZS1ub3cuanMiLCJub2RlX21vZHVsZXMvcG4vX3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvcG4vX3Byb21pc2lmeS5qcyIsIm5vZGVfbW9kdWxlcy9wbi9mcy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzLW5leHRpY2stYXJncy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC9tZ2YuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvcHJpdmF0ZURlY3J5cHQuanMiLCJub2RlX21vZHVsZXMvcHVibGljLWVuY3J5cHQvcHVibGljRW5jcnlwdC5qcyIsIm5vZGVfbW9kdWxlcy9wdWJsaWMtZW5jcnlwdC93aXRoUHVibGljLmpzIiwibm9kZV9tb2R1bGVzL3B1YmxpYy1lbmNyeXB0L3hvci5qcyIsIm5vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcyIsIm5vZGVfbW9kdWxlcy9xcy9saWIvZm9ybWF0cy5qcyIsIm5vZGVfbW9kdWxlcy9xcy9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcXMvbGliL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL3FzL2xpYi9zdHJpbmdpZnkuanMiLCJub2RlX21vZHVsZXMvcXMvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9kZWNvZGUuanMiLCJub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcyIsIm5vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmFuZG9tYnl0ZXMvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vZHVwbGV4LWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0LmpzIiwibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0tYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vcGFzc3Rocm91Z2guanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLWJyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUtYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0LXByb21pc2UtY29yZS9jb25maWd1cmUvcmVxdWVzdDIuanMiLCJub2RlX21vZHVsZXMvcmVxdWVzdC1wcm9taXNlLWNvcmUvbGliL2Vycm9ycy5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0LXByb21pc2UtY29yZS9saWIvcGx1bWJpbmcuanMiLCJub2RlX21vZHVsZXMvcmVxdWVzdC1wcm9taXNlLW5hdGl2ZS9saWIvcnAuanMiLCJub2RlX21vZHVsZXMvcmVxdWVzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi9hdXRoLmpzIiwibm9kZV9tb2R1bGVzL3JlcXVlc3QvbGliL2Nvb2tpZXMuanMiLCJub2RlX21vZHVsZXMvcmVxdWVzdC9saWIvZ2V0UHJveHlGcm9tVVJJLmpzIiwibm9kZV9tb2R1bGVzL3JlcXVlc3QvbGliL2hhci5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi9oZWxwZXJzLmpzIiwibm9kZV9tb2R1bGVzL3JlcXVlc3QvbGliL211bHRpcGFydC5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi9vYXV0aC5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi9xdWVyeXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi9yZWRpcmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9yZXF1ZXN0L2xpYi90dW5uZWwuanMiLCJub2RlX21vZHVsZXMvcmVxdWVzdC9yZXF1ZXN0LmpzIiwibm9kZV9tb2R1bGVzL3JpcGVtZDE2MC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL3NheC9saWIvc2F4LmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9oYXNoLmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zaGEuanMvc2hhLmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9zaGExLmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9zaGEyMjQuanMiLCJub2RlX21vZHVsZXMvc2hhLmpzL3NoYTI1Ni5qcyIsIm5vZGVfbW9kdWxlcy9zaGEuanMvc2hhMzg0LmpzIiwibm9kZV9tb2R1bGVzL3NoYS5qcy9zaGE1MTIuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2FsZ3MuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2NlcnRpZmljYXRlLmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL2xpYi9kaGUuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2VkLWNvbXBhdC5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvZXJyb3JzLmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL2xpYi9maW5nZXJwcmludC5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvZm9ybWF0cy9hdXRvLmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL2xpYi9mb3JtYXRzL29wZW5zc2gtY2VydC5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvZm9ybWF0cy9wZW0uanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2Zvcm1hdHMvcGtjczEuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2Zvcm1hdHMvcGtjczguanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2Zvcm1hdHMvcmZjNDI1My5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvZm9ybWF0cy9zc2gtcHJpdmF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvZm9ybWF0cy9zc2guanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2Zvcm1hdHMveDUwOS1wZW0uanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2Zvcm1hdHMveDUwOS5qcyIsIm5vZGVfbW9kdWxlcy9zc2hway9saWIvaWRlbnRpdHkuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL2xpYi9rZXkuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL3ByaXZhdGUta2V5LmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL2xpYi9zaWduYXR1cmUuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL3NzaC1idWZmZXIuanMiLCJub2RlX21vZHVsZXMvc3NocGsvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3NzaHBrL25vZGVfbW9kdWxlcy9hc3NlcnQtcGx1cy9hc3NlcnQuanMiLCJub2RlX21vZHVsZXMvc3RlYWx0aHktcmVxdWlyZS9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3RyZWFtLWJyb3dzZXJpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbGliL2NhcGFiaWxpdHkuanMiLCJub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbGliL3JlcXVlc3QuanMiLCJub2RlX21vZHVsZXMvc3RyZWFtLWh0dHAvbGliL3Jlc3BvbnNlLmpzIiwibm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N0cmluZ3N0cmVhbS9zdHJpbmdzdHJlYW0uanMiLCJub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1N5bWJvbFRyZWUuanMiLCJub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1N5bWJvbFRyZWVOb2RlLmpzIiwibm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9UcmVlSXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVQb3NpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy90by1hcnJheWJ1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90b3VnaC1jb29raWUvbGliL2Nvb2tpZS5qcyIsIm5vZGVfbW9kdWxlcy90b3VnaC1jb29raWUvbGliL21lbXN0b3JlLmpzIiwibm9kZV9tb2R1bGVzL3RvdWdoLWNvb2tpZS9saWIvcGF0aE1hdGNoLmpzIiwibm9kZV9tb2R1bGVzL3RvdWdoLWNvb2tpZS9saWIvcGVybXV0ZURvbWFpbi5qcyIsIm5vZGVfbW9kdWxlcy90b3VnaC1jb29raWUvbGliL3B1YnN1ZmZpeC5qcyIsIm5vZGVfbW9kdWxlcy90b3VnaC1jb29raWUvbGliL3N0b3JlLmpzIiwibm9kZV9tb2R1bGVzL3RvdWdoLWNvb2tpZS9wYWNrYWdlLmpzb24iLCJub2RlX21vZHVsZXMvdHI0Ni9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90cjQ2L2xpYi9tYXBwaW5nVGFibGUuanNvbiIsIm5vZGVfbW9kdWxlcy90dW5uZWwtYWdlbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdHdlZXRuYWNsL25hY2wtZmFzdC5qcyIsIm5vZGVfbW9kdWxlcy91cmwvdXJsLmpzIiwibm9kZV9tb2R1bGVzL3VybC91dGlsLmpzIiwibm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L2lzQnVmZmVyQnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiLCJub2RlX21vZHVsZXMvdXVpZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIm5vZGVfbW9kdWxlcy91dWlkL2xpYi9ybmctYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy91dWlkL3YxLmpzIiwibm9kZV9tb2R1bGVzL3V1aWQvdjQuanMiLCJub2RlX21vZHVsZXMvdmVycm9yL2xpYi92ZXJyb3IuanMiLCJub2RlX21vZHVsZXMvdm0tYnJvd3NlcmlmeS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy93ZWJpZGwtY29udmVyc2lvbnMvbGliL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3dlYndvcmtpZnkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvd2hhdHdnLWVuY29kaW5nL2xpYi9sYWJlbHMtdG8tbmFtZXMuanNvbiIsIm5vZGVfbW9kdWxlcy93aGF0d2ctZW5jb2RpbmcvbGliL3N1cHBvcnRlZC1uYW1lcy5qc29uIiwibm9kZV9tb2R1bGVzL3doYXR3Zy1lbmNvZGluZy9saWIvd2hhdHdnLWVuY29kaW5nLmpzIiwibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC1pbXBsLmpzIiwibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL1VSTC5qcyIsIm5vZGVfbW9kdWxlcy93aGF0d2ctdXJsL2xpYi9wdWJsaWMtYXBpLmpzIiwibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL3VybC1zdGF0ZS1tYWNoaW5lLmpzIiwibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwvbm9kZV9tb2R1bGVzL3dlYmlkbC1jb252ZXJzaW9ucy9saWIvaW5kZXguanMiLCJub2RlX21vZHVsZXMveG1sLW5hbWUtdmFsaWRhdG9yL2xpYi9nZW5lcmF0ZWQtcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL3htbC1uYW1lLXZhbGlkYXRvci9saWIveG1sLW5hbWUtdmFsaWRhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3h0ZW5kL2ltbXV0YWJsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQTs7OztBQUlBLElBQUksU0FBUzs7QUFFWCxnQkFBYyxVQUFVLElBQVYsRUFBZ0I7QUFDNUIsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EsUUFBSSxTQUFTLElBQUksVUFBSixFQUFiO0FBQ0EsV0FBTyxNQUFQLEdBQWdCLFlBQVk7QUFDMUIsVUFBSSxVQUFVLE9BQU8sTUFBckI7QUFDQSxVQUFJLFNBQVMsUUFBUSxLQUFSLENBQWMsR0FBZCxFQUFtQixDQUFuQixDQUFiO0FBQ0EsdUJBQWlCLE9BQWpCLENBQXlCLE1BQXpCO0FBQ0QsS0FKRDtBQUtBLFdBQU8sYUFBUCxDQUFxQixJQUFyQjs7QUFFQSxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0QsR0FiVTs7QUFlWCxnQkFBYyxVQUFVLE1BQVYsRUFBa0IsUUFBbEIsRUFBNEI7QUFDeEMsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBTCxDQUFiO0FBQ0EsUUFBSSxNQUFNLE9BQU8sTUFBakI7QUFDQSxRQUFJLFNBQVMsSUFBSSxXQUFKLENBQWdCLEdBQWhCLENBQWI7QUFDQSxRQUFJLE9BQU8sSUFBSSxVQUFKLENBQWUsTUFBZixDQUFYO0FBQ0EsU0FBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLEdBQXBCLEVBQXlCLEdBQXpCLEVBQThCO0FBQzVCLFdBQUssQ0FBTCxJQUFVLE9BQU8sVUFBUCxDQUFrQixDQUFsQixDQUFWO0FBQ0Q7QUFDRCxRQUFJLE9BQU8sSUFBSSxJQUFKLENBQVMsQ0FBQyxJQUFELENBQVQsRUFBaUIsRUFBQyxNQUFNLFFBQVAsRUFBakIsQ0FBWDtBQUNBLHFCQUFpQixPQUFqQixDQUF5QixJQUF6Qjs7QUFFQSxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0Q7QUE1QlUsQ0FBYjs7QUErQkEsT0FBTyxPQUFQLEdBQWlCLE1BQWpCOzs7QUNwQ0EsSUFBSSxTQUFTLFFBQVEsaUJBQVIsQ0FBYjtBQUNBOzs7Ozs7OztBQVFBLE9BQU8sT0FBUCxHQUFpQixTQUFTLG9CQUFULENBQStCLGFBQS9CLEVBQThDO0FBQzdELE1BQUksa0JBQWtCLE9BQU8sUUFBUCxFQUF0QjtBQUNBLE1BQUksYUFBYSxFQUFqQjs7QUFFRDtBQUNDLE1BQUksY0FBYyxNQUFkLEtBQXlCLENBQTdCLEVBQWdDO0FBQzlCLFdBQU8sZ0JBQWdCLE9BQWhCLENBQXdCLFVBQXhCLEVBQW9DLE9BQXBDLEVBQVA7QUFDRDs7QUFFRCxNQUFJLGtCQUFrQixjQUFjLEtBQWQsSUFBdEI7QUFDRDtBQUNDLFNBQU8sZ0JBQWdCLEtBQWhCLE9BQTRCLFVBQW5DLEVBQStDO0FBQzdDLG9CQUFnQixJQUFoQixDQUFxQixVQUFVLElBQVYsRUFBZ0I7QUFDbkMsaUJBQVcsSUFBWCxDQUFnQixJQUFoQjtBQUNELEtBRkQ7QUFHQSxRQUFJLGNBQWMsTUFBZCxLQUF5QixDQUE3QixFQUFnQztBQUM5QixhQUFPLGdCQUFnQixPQUFoQixDQUF3QixVQUF4QixFQUFvQyxPQUFwQyxFQUFQO0FBQ0Q7QUFDRCxzQkFBa0IsY0FBYyxLQUFkLElBQWxCO0FBQ0Q7O0FBRUY7QUFDQyxNQUFJLFdBQVcsWUFBWSxZQUFZO0FBQ3ZDO0FBQ0UsV0FBTyxnQkFBZ0IsS0FBaEIsT0FBNEIsVUFBbkMsRUFBK0M7QUFDN0Msc0JBQWdCLElBQWhCLENBQXFCLFVBQVUsSUFBVixFQUFnQjtBQUNuQyxtQkFBVyxJQUFYLENBQWdCLElBQWhCO0FBQ0QsT0FGRDtBQUdBLFVBQUksY0FBYyxNQUFkLEtBQXlCLENBQTdCLEVBQWdDO0FBQzlCLHNCQUFjLFFBQWQ7QUFDQSx3QkFBZ0IsT0FBaEIsQ0FBd0IsVUFBeEI7QUFDQTtBQUNEO0FBQ0Qsd0JBQWtCLGNBQWMsS0FBZCxJQUFsQjtBQUNEO0FBQ0YsR0FiYyxFQWFaLEVBYlksQ0FBZjs7QUFlQSxTQUFPLGdCQUFnQixPQUFoQixFQUFQO0FBQ0QsQ0F0Q0Q7OztBQ1RBLElBQUksU0FBUyxRQUFRLG1CQUFSLENBQWI7QUFDQSxJQUFJLFFBQVEsUUFBUSxrQkFBUixDQUFaO0FBQ0EsSUFBSSxVQUFVLFFBQVEsb0JBQVIsQ0FBZDtBQUNBLElBQUksUUFBUSxRQUFRLGtCQUFSLENBQVo7QUFDQSxJQUFJLFVBQVUsUUFBUSxvQkFBUixDQUFkO0FBQ0EsSUFBSSxxQkFBcUIsUUFBUSwrQkFBUixDQUF6QjtBQUNBLE1BQU0sa0JBQWtCLFFBQVEsNEJBQVIsQ0FBeEI7QUFDQSxJQUFJLHNCQUFzQixRQUFRLGdDQUFSLENBQTFCO0FBQ0EsSUFBSSxJQUFJLFFBQVEsUUFBUixDQUFSO0FBQ0EsSUFBSSxTQUFTLElBQUksTUFBSixFQUFiO0FBQ0EsSUFBSSxLQUFKO0FBQ0EsT0FBTyxpQkFBUCxDQUF5QixZQUFZO0FBQ25DLFVBQVEsR0FBUiwwRkFBWSx1QkFBWixFQUFxQyxNQUFyQztBQUNBLFVBQVEsSUFBSSxLQUFKLENBQVUsTUFBVixFQUFrQixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUFsQixDQUFSO0FBQ0QsQ0FIRDs7QUFLQSxPQUFPLE9BQVAsQ0FBZSxTQUFmLENBQXlCLFdBQXpCLENBQXFDLFlBQVk7QUFDL0MsU0FBTyxpQkFBUCxDQUF5QixZQUFZO0FBQ25DLFlBQVEsR0FBUiwwRkFBWSx1QkFBWixFQUFxQyxNQUFyQztBQUNBLFlBQVEsSUFBSSxLQUFKLENBQVUsTUFBVixFQUFrQixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUFsQixDQUFSO0FBQ0QsR0FIRDtBQUlELENBTEQ7O0FBT0EsSUFBSSxrQkFBa0IsVUFBVSxPQUFWLEVBQW1CLFFBQW5CLEVBQTZCO0FBQ2pELFNBQU8sSUFBUCxDQUFZLEtBQVosQ0FBa0I7QUFDaEIsWUFBUSxJQURRO0FBRWhCLG1CQUFlO0FBRkMsR0FBbEIsRUFHRyxVQUFVLElBQVYsRUFBZ0I7QUFDakIsUUFBSSxLQUFLLE1BQUwsR0FBYyxDQUFsQixFQUFxQjtBQUNuQixXQUFLLE9BQUwsQ0FBYSxHQUFiLENBQWlCLDBCQUFqQjtBQUNELEtBRkQsTUFFTztBQUNMLFVBQUksTUFBTSxLQUFLLENBQUwsQ0FBVjtBQUNBLGFBQU8sSUFBUCxDQUFZLFdBQVosQ0FBd0IsSUFBSSxFQUE1QixFQUFnQyxPQUFoQyxFQUF5QyxRQUF6QztBQUNEO0FBQ0YsR0FWRDtBQVdELENBWkQ7O0FBY0EsT0FBTyxPQUFQLENBQWUsU0FBZixDQUF5QixXQUF6QixDQUNDLFVBQVUsT0FBVixFQUFtQixNQUFuQixFQUEyQixZQUEzQixFQUF5QztBQUN4QyxVQUFRLEdBQVIsOEZBQVksMEJBQVosRUFBd0MsT0FBeEM7O0FBRUEsTUFBSSxRQUFRLGFBQVosRUFBMkI7QUFDekIsVUFBTSxhQUFOLENBQW9CLFFBQVEsT0FBNUIsRUFBcUMsWUFBckM7QUFDQSxXQUFPLElBQVA7QUFDRCxHQUhELE1BR08sSUFBSSxRQUFRLFdBQVosRUFBeUI7QUFDOUIsVUFBTSxXQUFOLENBQWtCLFFBQVEsT0FBMUIsRUFBbUMsWUFBbkM7QUFDQSxXQUFPLElBQVA7QUFDRCxHQUhNLE1BR0EsSUFBSSxRQUFRLGFBQVosRUFBMkI7QUFDaEMsVUFBTSxhQUFOLENBQW9CLFFBQVEsT0FBNUIsRUFBcUMsWUFBckM7QUFDQSxXQUFPLElBQVA7QUFDRCxHQUhNLE1BR0EsSUFBSSxRQUFRLGNBQVosRUFBNEI7QUFDakMsVUFBTSxjQUFOLENBQXFCLFlBQXJCO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FITSxNQUdBLElBQUksUUFBUSxhQUFaLEVBQTJCO0FBQ2hDLFVBQU0sYUFBTixDQUFvQixRQUFRLFNBQTVCLEVBQXVDLFlBQXZDO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FITSxNQUdBLElBQUksUUFBUSxjQUFaLEVBQTRCO0FBQ2pDLFVBQU0sY0FBTixDQUFxQixJQUFJLE9BQUosQ0FBWSxRQUFRLE9BQXBCLEVBQTZCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQTdCLENBQXJCLEVBQTBFLFlBQTFFO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FITSxNQUdBLElBQUksUUFBUSxhQUFaLEVBQTJCO0FBQ2hDLFFBQUksVUFBVSxJQUFJLE9BQUosQ0FBWSxRQUFRLE9BQXBCLEVBQTZCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQTdCLENBQWQ7QUFDQSxRQUFJLFFBQVEsSUFBSSxLQUFKLEVBQVo7QUFDQSxRQUFJLFVBQVUsSUFBSSxrQkFBSixDQUF1QjtBQUNuQyxxQkFBZSxRQUFRO0FBRFksS0FBdkIsQ0FBZDs7QUFJQSxRQUFJLFVBQVUsSUFBSSxPQUFKLENBQVk7QUFDeEIsYUFBTyxLQURpQjtBQUV4QixlQUFTLE9BRmU7QUFHeEIsZUFBUyxPQUhlO0FBSXhCLGFBQU8sS0FKaUI7QUFLeEIsdUJBQWlCLFFBQVE7QUFMRCxLQUFaLEVBTVgsRUFBQyxDQUFELEVBQUksTUFBSixFQUFZLFFBQVosRUFOVyxDQUFkOztBQVFBLFFBQUk7QUFDRixjQUFRLEdBQVIsQ0FBWSxZQUFZO0FBQ3RCLGdCQUFRLEtBQVI7QUFDQSxZQUFJLGVBQWUsT0FBTyxhQUFQLENBQXFCLE1BQXJCLENBQTRCLG1CQUE1QixFQUFpRDtBQUNsRSxnQkFBTSxPQUQ0RDtBQUVsRSxtQkFBUywyQkFGeUQ7QUFHbEUsaUJBQU8sb0JBSDJEO0FBSWxFLG1CQUFTLHVCQUF1QixRQUFRO0FBSjBCLFNBQWpELEVBS2hCLFVBQVUsRUFBVixFQUFjO0FBQ25CO0FBQ0csU0FQa0IsQ0FBbkI7QUFRQTtBQUNELE9BWEQ7QUFZRCxLQWJELENBYUksT0FBTyxDQUFQLEVBQVU7QUFDWixjQUFRLEdBQVIsMkZBQVksOEJBQThCLENBQTFDO0FBQ0Q7O0FBRUQsV0FBTyxJQUFQO0FBQ0QsR0FqQ00sTUFpQ0EsSUFBSSxRQUFRLHFCQUFaLEVBQW1DO0FBQ3hDLFVBQU0sVUFBVSxJQUFJLE9BQUosQ0FBWSxRQUFRLE9BQXBCLEVBQTZCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQTdCLENBQWhCO0FBQ0EsVUFBTSxRQUFRLElBQUksS0FBSixFQUFkO0FBQ0EsVUFBTSxVQUFVLElBQUksZUFBSixDQUFvQjtBQUNsQyxxQkFBZSxRQUFRO0FBRFcsS0FBcEIsRUFFYixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUZhLENBQWhCOztBQUlBLFVBQU0sVUFBVSxJQUFJLE9BQUosQ0FBWTtBQUMxQixhQUFPLEtBRG1CO0FBRTFCLGVBQVMsT0FGaUI7QUFHMUIsZUFBUyxPQUhpQjtBQUkxQixhQUFPLEtBSm1CO0FBSzFCLHVCQUFpQixRQUFRO0FBTEMsS0FBWixFQU1iLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBTmEsQ0FBaEI7O0FBUUEsUUFBSTtBQUNGLGNBQVEsR0FBUixDQUFZLFlBQVk7QUFDdEIsZ0JBQVEsS0FBUjtBQUNBLFlBQUksZUFBZSxPQUFPLGFBQVAsQ0FBcUIsTUFBckIsQ0FBNEIsbUJBQTVCLEVBQWlEO0FBQ2xFLGdCQUFNLE9BRDREO0FBRWxFLG1CQUFTLDJCQUZ5RDtBQUdsRSxpQkFBTyxvQkFIMkQ7QUFJbEUsbUJBQVMsdUJBQXVCLFFBQVE7QUFKMEIsU0FBakQsRUFLaEIsVUFBVSxFQUFWLEVBQWM7QUFDZjtBQUNELFNBUGtCLENBQW5CO0FBUUE7QUFDRCxPQVhEO0FBWUQsS0FiRCxDQWFJLE9BQU8sQ0FBUCxFQUFVO0FBQ1osY0FBUSxHQUFSLDRGQUFZLDhCQUE4QixDQUExQztBQUNEO0FBQ0QsV0FBTyxJQUFQO0FBQ0QsR0FoQ00sTUFnQ0EsSUFBSSxRQUFRLG1CQUFaLEVBQWlDO0FBQ3RDLFdBQU8sSUFBUCxDQUFZLEtBQVosQ0FBa0I7QUFDaEIsY0FBUSxJQURRO0FBRWhCLHFCQUFlO0FBRkMsS0FBbEIsRUFHRyxVQUFVLElBQVYsRUFBZ0I7QUFDakIsVUFBSSxLQUFLLE1BQUwsR0FBYyxDQUFsQixFQUFxQjtBQUNuQixhQUFLLE9BQUwsQ0FBYSxHQUFiLENBQWlCLDBCQUFqQjtBQUNELE9BRkQsTUFFTztBQUNMLFlBQUksTUFBTSxLQUFLLENBQUwsQ0FBVjtBQUNBLGVBQU8sSUFBUCxDQUFZLFdBQVosQ0FBd0IsSUFBSSxFQUE1QixFQUFnQyxPQUFoQyxFQUF5QyxZQUF6QztBQUNEO0FBQ0YsS0FWRDtBQVdBLFdBQU8sSUFBUDtBQUNELEdBYk0sTUFhQSxJQUFJLFFBQVEsb0JBQVosRUFBa0M7QUFDdkMsUUFBSSxtQkFBbUIsb0JBQW9CLGtCQUFwQixDQUF2QjtBQUNBLFFBQUksbUJBQW1CLGlCQUFpQixRQUFRLEVBQXpCLEVBQTZCLFFBQVEsT0FBckMsQ0FBdkI7QUFDQSxxQkFBaUIsSUFBakIsQ0FBc0IsVUFBVSxRQUFWLEVBQW9CO0FBQ3hDLG1CQUFhLFFBQWI7QUFDRCxLQUZEOztBQUlBLFdBQU8sSUFBUDtBQUNEO0FBQ0YsQ0E3R0Q7OztBQ3JDQSxJQUFJLGdCQUFnQixRQUFRLDRCQUFSLENBQXBCO0FBQ0EsSUFBSSxtQkFBbUIsUUFBUSwrQkFBUixDQUF2Qjs7QUFFQSxTQUFTLGlCQUFULENBQTRCLE9BQTVCLEVBQXFDLE1BQXJDLEVBQTZDLFlBQTdDLEVBQTJELE9BQTNELEVBQW9FO0FBQ2xFLE1BQUksSUFBSSxRQUFRLENBQWhCO0FBQ0EsTUFBSSxXQUFXLFFBQVEsUUFBdkI7QUFDQSxNQUFJLFNBQVMsUUFBUSxNQUFyQjtBQUNBLFVBQVEsR0FBUiwwRkFBWSwwQkFBWixFQUF3QyxPQUF4Qzs7QUFFQSxNQUFJLFFBQVEsV0FBWixFQUF5QjtBQUN2QixZQUFRLEdBQVIsbUdBQVksa0NBQVosRUFBZ0QsT0FBaEQ7QUFDQSxRQUFJLFlBQVksSUFBSSxhQUFKLENBQWtCLE9BQWxCLEVBQTJCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQTNCLENBQWhCO0FBQ0EsUUFBSSxlQUFlLFVBQVUsT0FBVixFQUFuQjtBQUNBLGlCQUFhLElBQWIsQ0FBa0IsVUFBVSxJQUFWLEVBQWdCO0FBQ2hDLGNBQVEsR0FBUixrRkFBWSxvQkFBWixFQUFrQyxJQUFsQztBQUNBLG1CQUFhLElBQWI7QUFDRCxLQUhEO0FBSUEsV0FBTyxJQUFQO0FBQ0QsR0FURCxNQVNPLElBQUksUUFBUSxtQkFBWixFQUFpQztBQUN0QyxZQUFRLEdBQVIsMkdBQVksMENBQVosRUFBd0QsT0FBeEQ7QUFDQSxRQUFJLFlBQVksSUFBSSxhQUFKLENBQWtCLE9BQWxCLEVBQTJCLEVBQUMsQ0FBRCxFQUFJLFFBQUosRUFBYyxNQUFkLEVBQTNCLENBQWhCO0FBQ0EsUUFBSSxlQUFlLFVBQVUscUJBQVYsQ0FBZ0MsUUFBUSxpQkFBeEMsRUFBMkQsUUFBUSxVQUFuRSxDQUFuQjtBQUNBLGlCQUFhLElBQWIsQ0FBa0IsVUFBVSxJQUFWLEVBQWdCO0FBQ2hDLGNBQVEsR0FBUixrRkFBWSxvQkFBWixFQUFrQyxJQUFsQztBQUNBLG1CQUFhLElBQWI7QUFDRCxLQUhEO0FBSUEsV0FBTyxJQUFQO0FBQ0Q7QUFDRDtBQVZPLE9BV0YsSUFBSSxRQUFRLGlCQUFaLEVBQStCO0FBQ2xDLFVBQUksZ0JBQWdCLGlCQUFpQixlQUFqQixDQUFwQjs7QUFFQSxjQUFRLEdBQVIsaUdBQVksZ0NBQVosRUFBOEMsT0FBOUM7O0FBRUEsVUFBSSxtQkFBbUIsY0FBYyxRQUFRLEVBQXRCLEVBQTBCLFFBQVEsT0FBbEMsRUFBMkMsRUFBQyxDQUFELEVBQUksUUFBSixFQUFjLE1BQWQsRUFBM0MsQ0FBdkI7QUFDQSx1QkFBaUIsSUFBakIsQ0FBc0IsVUFBVSxRQUFWLEVBQW9CO0FBQ3hDLHFCQUFhLFFBQWI7QUFDRCxPQUZEOztBQUlBLGFBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBRUQsT0FBTyxPQUFQLEdBQWlCLGlCQUFqQjs7O0FDM0NBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQTs7O0FBR0EsSUFBSSxtQkFBbUI7O0FBRXJCLFNBQU8sWUFBWTtBQUNqQixXQUFPLE9BQU8sUUFBUCxHQUFrQixPQUFsQixDQUEwQixPQUExQixFQUFtQyxPQUFuQyxFQUFQO0FBQ0QsR0FKb0I7O0FBTXRCOzs7O0FBSUMsa0JBQWdCLFlBQVk7QUFDMUIsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCOztBQUVBLFdBQU8sSUFBUCxDQUFZLEtBQVosQ0FBa0I7QUFDaEIsY0FBUSxJQURRO0FBRWhCLHFCQUFlO0FBRkMsS0FBbEIsRUFHRyxVQUFVLElBQVYsRUFBZ0I7QUFDakIsVUFBSSxLQUFLLE1BQUwsR0FBYyxDQUFsQixFQUFxQjtBQUN2QjtBQUNJLHlCQUFpQixNQUFqQixDQUF3Qiw4QkFBeEI7QUFDRCxPQUhELE1BR087QUFDTCxZQUFJLFFBQVEsS0FBSyxDQUFMLEVBQVEsRUFBcEI7QUFDQSx5QkFBaUIsT0FBakIsQ0FBeUIsS0FBekI7QUFDRDtBQUNGLEtBWEQ7QUFZQSxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0QsR0ExQm9COztBQTRCdEI7Ozs7O0FBS0Msd0JBQXNCLFVBQVUsT0FBVixFQUFtQjtBQUN2QyxRQUFJLHFCQUFxQjtBQUN2Qix5QkFBbUIsSUFESTtBQUV2QixVQUFJLFFBQVEsRUFGVztBQUd2QixlQUFTLFFBQVE7QUFITSxLQUF6QjtBQUtBLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2QjtBQUNBLFFBQUksc0JBQXNCLEtBQUssY0FBTCxFQUExQjtBQUNBLHdCQUFvQixJQUFwQixDQUF5QixVQUFVLEtBQVYsRUFBaUI7QUFDeEMsYUFBTyxJQUFQLENBQVksV0FBWixDQUF3QixLQUF4QixFQUErQixrQkFBL0IsRUFBbUQsVUFBVSxRQUFWLEVBQW9CO0FBQ3JFLHlCQUFpQixPQUFqQixDQUF5QixRQUF6QjtBQUNELE9BRkQ7QUFHRCxLQUpEOztBQU1BLFdBQU8sZ0JBQVA7QUFDRDtBQWhEb0IsQ0FBdkI7O0FBbURBLE9BQU8sT0FBUCxHQUFpQixnQkFBakI7OztBQ3ZEQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiO0FBQ0EsSUFBSSx1QkFBdUIsUUFBUSx1Q0FBUixDQUEzQjs7QUFFQSxJQUFJLHFCQUFxQixVQUFVLE9BQVYsRUFBbUI7QUFDMUMsT0FBSyxhQUFMLEdBQXFCLFFBQVEsYUFBN0I7O0FBRUE7QUFDRDtBQUNBLENBTEQ7O0FBT0EsbUJBQW1CLFNBQW5CLEdBQStCOztBQUU3QixvQkFBa0IsVUFBVSxRQUFWLEVBQW9CLEtBQXBCLEVBQTJCO0FBQzNDLFFBQUksVUFBVSxJQUFkO0FBQ0EsUUFBSSxLQUFLLE1BQUwsS0FBZ0IsU0FBcEIsRUFBK0I7QUFDaEM7QUFDRyxhQUFPLElBQVAsQ0FBWSxHQUFaLENBQWdCLEtBQUssR0FBTCxDQUFTLEVBQXpCLEVBQTZCLFVBQVUsR0FBVixFQUFlO0FBQzFDLFlBQUksQ0FBQyxHQUFMLEVBQVU7QUFDUixnQkFBTSx3QkFBTjtBQUNEO0FBQ0YsT0FKRDs7QUFNQSxlQUFTLElBQVQsQ0FBYyxLQUFkO0FBQ0E7QUFDRDs7QUFFRCxXQUFPLE9BQVAsQ0FBZSxNQUFmLENBQXNCLEVBQUMsUUFBUSxPQUFULEVBQWtCLE9BQU8sSUFBekIsRUFBK0IsUUFBUSxHQUF2QyxFQUE0QyxTQUFTLElBQXJELEVBQTJELEtBQUssaUJBQWhFLEVBQXRCLEVBQTBHLFVBQVUsTUFBVixFQUFrQjtBQUMxSCxjQUFRLE1BQVIsR0FBaUIsTUFBakI7QUFDQSxjQUFRLEdBQVIsR0FBYyxPQUFPLElBQVAsQ0FBWSxDQUFaLENBQWQ7O0FBRUEsZUFBUyxJQUFULENBQWMsS0FBZDtBQUNELEtBTEQ7QUFNRCxHQXRCNEI7O0FBd0I3QixXQUFTLFVBQVUsR0FBVixFQUFlLFFBQWYsRUFBeUI7QUFDaEMsUUFBSSxNQUFNLEtBQUssR0FBZjs7QUFFQSxRQUFJLGtCQUFrQixVQUFVLEtBQVYsRUFBaUIsVUFBakIsRUFBNkIsR0FBN0IsRUFBa0M7QUFDdEQsVUFBSSxVQUFVLEtBQUssR0FBTCxDQUFTLEVBQXZCLEVBQTJCO0FBQ3pCLFlBQUksV0FBVyxNQUFYLEtBQXNCLFVBQTFCLEVBQXNDO0FBQ3pDOztBQUVBO0FBQ0ssaUJBQU8sSUFBUCxDQUFZLFNBQVosQ0FBc0IsY0FBdEIsQ0FBcUMsZUFBckM7O0FBRUw7QUFDSyxxQkFBVyxRQUFYLEVBQXFCLEtBQUssYUFBMUI7QUFDRDtBQUNGO0FBQ0YsS0FacUIsQ0FZcEIsSUFab0IsQ0FZZixJQVplLENBQXRCO0FBYUEsV0FBTyxJQUFQLENBQVksU0FBWixDQUFzQixXQUF0QixDQUFrQyxlQUFsQzs7QUFFQSxXQUFPLElBQVAsQ0FBWSxNQUFaLENBQW1CLElBQUksRUFBdkIsRUFBMkIsRUFBQyxLQUFLLEdBQU4sRUFBM0I7QUFDRCxHQTNDNEI7O0FBNkM3QixTQUFPLFlBQVk7QUFDakIsV0FBTyxPQUFQLENBQWUsTUFBZixDQUFzQixLQUFLLE1BQUwsQ0FBWSxFQUFsQztBQUNELEdBL0M0QjtBQWdEN0I7Ozs7O0FBS0EsY0FBWSxVQUFVLE1BQVYsRUFBa0IsY0FBbEIsRUFBa0M7QUFDNUMsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EsUUFBSSwwQkFBMEIsRUFBOUI7QUFDQSxRQUFJLGVBQWUsZ0JBQWdCLE1BQW5DOztBQUVBLFNBQUssSUFBSSxJQUFULElBQWlCLE1BQWpCLEVBQXlCO0FBQ3ZCLFVBQUksS0FBSyxNQUFMLENBQVksQ0FBWixFQUFlLFlBQWYsTUFBaUMsZUFBckMsRUFBc0Q7QUFDcEQsWUFBSSxhQUFhLEtBQUssU0FBTCxDQUFlLFlBQWYsRUFBNkIsS0FBSyxNQUFsQyxDQUFqQjtBQUNBLGdDQUF3QixJQUF4QixDQUE2QixVQUFVLFVBQVYsRUFBc0I7QUFDakQsY0FBSSxjQUFjLE9BQU8sa0JBQWtCLFVBQXpCLENBQWxCO0FBQ0EsY0FBSSx1QkFBdUIsT0FBTyxRQUFQLEVBQTNCOztBQUVBO0FBQ0EsY0FBSSxPQUFPLFVBQVUsV0FBVixFQUF1QixPQUFPLG9CQUFvQixVQUEzQixDQUF2QixDQUFYOztBQUVBLGlCQUFPLE9BQU8sb0JBQW9CLFVBQTNCLENBQVA7QUFDQSxpQkFBTyxPQUFPLGtCQUFrQixVQUF6QixDQUFQOztBQUVBLGNBQUksY0FBYyxPQUFPLEdBQVAsQ0FBVyxlQUFYLENBQTJCLElBQTNCLENBQWxCO0FBQ0EsY0FBSSxlQUFlLGVBQWUsVUFBZixDQUFuQjs7QUFFQTtBQUNBLGNBQUksa0JBQWtCO0FBQ3BCLGlCQUFLLFdBRGU7QUFFcEIsc0JBQVU7QUFGVSxXQUF0Qjs7QUFLQTtBQUNBLGlCQUFPLFNBQVAsQ0FBaUIsUUFBakIsQ0FBMEIsZUFBMUIsRUFBMkMsVUFBVSxVQUFWLEVBQXNCO0FBQy9ELGdCQUFJLGVBQWUsVUFBVSxZQUFWLEVBQXdCO0FBQ3pDLGtCQUFJLGFBQWEsRUFBYixLQUFvQixVQUFwQixJQUFrQyxhQUFhLEtBQW5ELEVBQTBEO0FBQ3hELG9CQUFJLGFBQWEsS0FBYixDQUFtQixPQUFuQixLQUErQixVQUFuQyxFQUErQztBQUM3Qyx1Q0FBcUIsT0FBckI7QUFDQSx5QkFBTyxTQUFQLENBQWlCLFNBQWpCLENBQTJCLGNBQTNCLENBQTBDLFlBQTFDO0FBQ0QsaUJBSEQsTUFHTyxJQUFJLGFBQWEsS0FBYixDQUFtQixPQUFuQixLQUErQixhQUFuQyxFQUFrRDtBQUN2RCx1Q0FBcUIsTUFBckIsQ0FBNEIsaUJBQTVCO0FBQ0EseUJBQU8sU0FBUCxDQUFpQixTQUFqQixDQUEyQixjQUEzQixDQUEwQyxZQUExQztBQUNEO0FBQ0Y7QUFDRixhQVZEOztBQVlBLG1CQUFPLFNBQVAsQ0FBaUIsU0FBakIsQ0FBMkIsV0FBM0IsQ0FBdUMsWUFBdkM7QUFDRCxXQWREOztBQWdCQSxpQkFBTyxxQkFBcUIsT0FBckIsRUFBUDtBQUNELFNBckM0QixDQXFDM0IsSUFyQzJCLENBcUN0QixJQXJDc0IsRUFxQ2hCLFVBckNnQixDQUE3QjtBQXNDRDtBQUNGOztBQUVELHlCQUFxQix1QkFBckIsRUFBOEMsSUFBOUMsQ0FBbUQsWUFBWTtBQUM3RCx1QkFBaUIsT0FBakI7QUFDRCxLQUZEOztBQUlBLFdBQU8saUJBQWlCLE9BQWpCLEVBQVA7QUFDRCxHQTNHNEI7QUE0RzdCLGFBQVcsVUFBVSxHQUFWLEVBQWUsT0FBZixFQUF3QixnQkFBeEIsRUFBMEMsUUFBMUMsRUFBb0QsS0FBcEQsRUFBMkQ7QUFDcEUsUUFBSSxVQUFVLElBQWQ7O0FBRUEsU0FBSyxnQkFBTCxDQUFzQixZQUFZO0FBQ2hDLFVBQUksTUFBTSxRQUFRLEdBQWxCO0FBQ0EsY0FBUSxHQUFSLHdFQUFZLGtCQUFaO0FBQ0EsY0FBUSxPQUFSLENBQWdCLEdBQWhCLEVBQXFCLFlBQVk7QUFDL0IsWUFBSSxVQUFVO0FBQ1osdUJBQWEsSUFERDtBQUVaLG1CQUFTLEtBQUssS0FBTCxDQUFXLEtBQUssU0FBTCxDQUFlLE9BQWYsQ0FBWCxDQUZHO0FBR1osNEJBQWtCO0FBSE4sU0FBZDs7QUFNQSxlQUFPLElBQVAsQ0FBWSxXQUFaLENBQXdCLElBQUksRUFBNUIsRUFBZ0MsT0FBaEMsRUFBeUMsVUFBVSxJQUFWLEVBQWdCO0FBQ3ZELGtCQUFRLEdBQVIseUZBQVksOEJBQVosRUFBNEMsSUFBNUM7QUFDQSxtQkFBUyxJQUFULENBQWMsS0FBZCxFQUFxQixJQUFyQixFQUEyQixJQUEzQjtBQUNELFNBSEQ7QUFJRCxPQVhEO0FBWUQsS0FmRCxFQWVHLElBZkg7QUFnQkQ7QUEvSDRCLENBQS9COztBQWtJQSxPQUFPLE9BQVAsR0FBaUIsa0JBQWpCOztBQUVBLFNBQVMsU0FBVCxDQUFvQixPQUFwQixFQUE2QixjQUFjLEVBQTNDLEVBQStDLFlBQVksR0FBM0QsRUFBZ0U7QUFDOUQsUUFBTSxpQkFBaUIsT0FBTyxJQUFQLENBQVksT0FBWixDQUF2QjtBQUNBLFFBQU0sYUFBYSxFQUFuQjs7QUFFQSxPQUFLLElBQUksU0FBUyxDQUFsQixFQUFxQixTQUFTLGVBQWUsTUFBN0MsRUFBcUQsVUFBVSxTQUEvRCxFQUEwRTtBQUN4RSxVQUFNLFFBQVEsZUFBZSxLQUFmLENBQXFCLE1BQXJCLEVBQTZCLFNBQVMsU0FBdEMsQ0FBZDs7QUFFQSxVQUFNLGNBQWMsSUFBSSxLQUFKLENBQVUsTUFBTSxNQUFoQixDQUFwQjtBQUNBLFNBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxNQUFNLE1BQTFCLEVBQWtDLEdBQWxDLEVBQXVDO0FBQ3JDLGtCQUFZLENBQVosSUFBaUIsTUFBTSxVQUFOLENBQWlCLENBQWpCLENBQWpCO0FBQ0Q7O0FBRUQsVUFBTSxZQUFZLElBQUksVUFBSixDQUFlLFdBQWYsQ0FBbEI7O0FBRUEsZUFBVyxJQUFYLENBQWdCLFNBQWhCO0FBQ0Q7O0FBRUQsUUFBTSxPQUFPLElBQUksT0FBTyxJQUFYLENBQWdCLFVBQWhCLEVBQTRCLEVBQUMsTUFBTSxXQUFQLEVBQTVCLENBQWI7QUFDQSxTQUFPLElBQVA7QUFDRDs7O0FDaktELElBQUksU0FBUyxZQUFZLENBRXhCLENBRkQ7O0FBSUEsT0FBTyxTQUFQLEdBQW1COztBQUVqQixhQUFXLDJCQUZNO0FBR2pCLFVBQVEsMkJBSFM7O0FBS2pCLFlBQVU7QUFDUixpQkFBYSxPQURMO0FBRVY7QUFDRSxlQUFXLGtCQUhIO0FBSVY7QUFDQTtBQUNFLFlBQVE7QUFOQSxHQUxPOztBQWNsQjs7O0FBR0MscUJBQW1CLFVBQVUsUUFBVixFQUFvQjtBQUNyQyxXQUFPLE9BQVAsQ0FBZSxJQUFmLENBQW9CLEdBQXBCLENBQXdCLENBQUMsV0FBRCxFQUFjLFFBQWQsRUFBd0IsYUFBeEIsQ0FBeEIsRUFBZ0UsVUFBVSxLQUFWLEVBQWlCO0FBQy9FLFdBQUssV0FBTCxHQUFtQixNQUFNLFdBQU4sSUFBcUIsS0FBSyxRQUFMLENBQWMsV0FBdEQ7QUFDQSxVQUFJLEtBQUssV0FBTCxLQUFxQixPQUF6QixFQUFrQztBQUNoQyxhQUFLLFNBQUwsR0FBaUIsS0FBSyxRQUFMLENBQWMsU0FBL0I7QUFDQSxhQUFLLE1BQUwsR0FBYyxLQUFLLFFBQUwsQ0FBYyxNQUE1QjtBQUNELE9BSEQsTUFHTztBQUNMLGFBQUssU0FBTCxHQUFpQixNQUFNLFNBQU4sSUFBbUIsS0FBSyxRQUFMLENBQWMsU0FBbEQ7QUFDQSxhQUFLLE1BQUwsR0FBYyxNQUFNLE1BQU4sSUFBZ0IsS0FBSyxRQUFMLENBQWMsTUFBNUM7QUFDRDs7QUFFRDtBQUNELEtBWCtELENBVzlELElBWDhELENBV3pELElBWHlELENBQWhFO0FBWUQsR0E5QmdCOztBQWdDbEI7Ozs7OztBQU1DLHVCQUFxQixVQUFVLEtBQVYsRUFBaUIsUUFBakIsRUFBMkI7QUFDOUMsV0FBTyxPQUFQLENBQWUsSUFBZixDQUFvQixHQUFwQixDQUF3QixLQUF4QixFQUErQixRQUEvQjtBQUNEO0FBeENnQixDQUFuQjs7QUEyQ0EsT0FBTyxPQUFQLEdBQWlCLE1BQWpCOzs7QUMvQ0EsSUFBSSxrQkFBa0IsUUFBUSxtQkFBUixDQUF0QjtBQUNBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQTs7O0FBR0EsSUFBSSxnQkFBZ0I7O0FBRW5COzs7OztBQUtDLFdBQVMsVUFBVSxPQUFWLEVBQW1CLE9BQW5CLEVBQTRCO0FBQ25DLFFBQUksSUFBSSxRQUFRLENBQWhCO0FBQ0EsUUFBSSxlQUFlLE9BQU8sUUFBUCxFQUFuQjtBQUNBLFFBQUksT0FBTyxFQUFFLFFBQVEsV0FBVixFQUF1QixLQUF2QixHQUErQixJQUEvQixDQUFvQyxLQUFwQyxFQUEyQyxNQUEzQyxHQUFvRCxJQUFwRCxFQUFYO0FBQ0EsaUJBQWEsT0FBYixDQUFxQixJQUFyQjtBQUNBLFdBQU8sYUFBYSxPQUFiLEVBQVA7QUFDRCxHQWJpQjs7QUFlbkI7Ozs7QUFJQyxnQ0FBOEIsWUFBWTtBQUN4QyxRQUFJLG1CQUFtQixPQUFPLFFBQVAsRUFBdkI7QUFDQSxRQUFJLGtCQUFrQixPQUFPLEVBQTdCO0FBQ0EsUUFBSSxvQkFBb0IsU0FBeEIsRUFBbUM7QUFDakMsdUJBQWlCLE9BQWpCO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsc0JBQWdCLFNBQWhCO0FBQ0EsYUFBTyxFQUFQLEdBQVksU0FBWjtBQUNBLHVCQUFpQixPQUFqQjtBQUNEOztBQUVELFdBQU8saUJBQWlCLE9BQWpCLEVBQVA7QUFDRCxHQS9CaUI7O0FBaUNuQjs7Ozs7QUFLQyxrQkFBZ0IsVUFBVSxPQUFWLEVBQW1CLE9BQW5CLEVBQTRCO0FBQzFDLFFBQUksSUFBSSxRQUFRLENBQWhCO0FBQ0EsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCOztBQUVBLFNBQUssNEJBQUwsR0FBb0MsSUFBcEMsQ0FBeUMsWUFBWTtBQUNuRCxVQUFJLGtCQUFrQixJQUFJLGVBQUosQ0FBb0I7QUFDeEMsMkJBQW1CLFFBQVEsaUJBRGE7QUFFeEMseUJBQWlCLFFBQVE7QUFGZSxPQUFwQixFQUduQixFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUhtQixDQUF0QjtBQUlBLGFBQU8sRUFBUCxHQUFZLGVBQVo7O0FBRUEsVUFBSSxzQkFBc0IsZ0JBQWdCLGNBQWhCLEVBQTFCO0FBQ0EsMEJBQW9CLElBQXBCLENBQXlCLFVBQVUsUUFBVixFQUFvQjtBQUMzQyxhQUFLLDRCQUFMLEdBQW9DLElBQXBDLENBQXlDLFlBQVk7QUFDbkQsMkJBQWlCLE9BQWpCLENBQXlCLFFBQXpCO0FBQ0EsaUJBQU8sRUFBUCxHQUFZLFNBQVo7QUFDRCxTQUhEO0FBSUQsT0FMd0IsQ0FLdkIsSUFMdUIsQ0FLbEIsSUFMa0IsQ0FBekIsRUFLYyxJQUxkLENBS21CLFVBQVUsT0FBVixFQUFtQjtBQUNwQyx5QkFBaUIsTUFBakIsQ0FBd0IsT0FBeEI7QUFDQSxlQUFPLEVBQVAsR0FBWSxTQUFaO0FBQ0QsT0FSRDtBQVNELEtBakJ3QyxDQWlCdkMsSUFqQnVDLENBaUJsQyxJQWpCa0MsQ0FBekM7O0FBbUJBLFdBQU8saUJBQWlCLE9BQWpCLEVBQVA7QUFDRCxHQTlEaUI7O0FBZ0VuQjs7Ozs7QUFLQyxtQkFBaUIsVUFBVSxPQUFWLEVBQW1CLE9BQW5CLEVBQTRCO0FBQzNDLFFBQUksSUFBSSxRQUFRLENBQWhCO0FBQ0EsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EsU0FBSyw0QkFBTCxHQUFvQyxJQUFwQyxDQUF5QyxZQUFZO0FBQ25ELFVBQUksa0JBQWtCLElBQUksZUFBSixDQUFvQjtBQUN4QywyQkFBbUIsUUFBUTtBQURhLE9BQXBCLEVBRW5CLEVBQUMsQ0FBRCxFQUFJLFFBQUosRUFBYyxNQUFkLEVBRm1CLENBQXRCO0FBR0EsYUFBTyxFQUFQLEdBQVksZUFBWjs7QUFFQSxVQUFJLDBCQUEwQixnQkFBZ0IsZUFBaEIsQ0FBZ0MsUUFBUSxrQkFBeEMsQ0FBOUI7QUFDQSw4QkFBd0IsSUFBeEIsQ0FBNkIsWUFBWTtBQUN2Qyx5QkFBaUIsT0FBakI7QUFDRCxPQUZELEVBRUcsSUFGSCxDQUVRLFVBQVUsT0FBVixFQUFtQjtBQUN6Qix5QkFBaUIsTUFBakIsQ0FBd0IsT0FBeEI7QUFDQSxlQUFPLEVBQVAsR0FBWSxTQUFaO0FBQ0QsT0FMRDtBQU1ELEtBYkQ7QUFjQSxXQUFPLGdCQUFQO0FBQ0Q7QUF2RmlCLENBQXBCOztBQTBGQSxPQUFPLE9BQVAsR0FBaUIsYUFBakI7OztBQy9GQSxJQUFJLGVBQWUsUUFBUSxnQkFBUixDQUFuQjtBQUNBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQSxJQUFJLGNBQWMsUUFBUSxjQUFSLEVBQXdCLFdBQTFDO0FBQ0E7Ozs7O0FBS0EsSUFBSSxrQkFBa0IsVUFBVSxPQUFWLEVBQW1CLFdBQW5CLEVBQWdDO0FBQ3JEO0FBQ0MsT0FBSywyQkFBTCxHQUFtQyxPQUFPLFFBQVAsRUFBbkM7O0FBRUEsT0FBSyxlQUFMLEdBQXVCLFFBQVEsZUFBL0I7QUFDQSxPQUFLLGlCQUFMLEdBQXlCLFFBQVEsaUJBQVIsQ0FBMEIsSUFBMUIsRUFBekI7QUFDQSxPQUFLLEtBQUwsR0FBYSxRQUFRLEtBQVIsSUFBaUIsVUFBVSxHQUFWLEVBQWU7QUFBRSxVQUFNLEdBQU47QUFBWSxHQUEzRDs7QUFFQSxPQUFLLENBQUwsR0FBUyxZQUFZLENBQXJCO0FBQ0EsT0FBSyxRQUFMLEdBQWdCLFlBQVksUUFBNUI7QUFDQSxPQUFLLE1BQUwsR0FBYyxZQUFZLE1BQTFCO0FBQ0EsTUFBSSxDQUFDLEtBQUssQ0FBVixFQUFhLE1BQU0sSUFBSSxLQUFKLENBQVUsb0NBQVYsQ0FBTjtBQUNiLE1BQUksQ0FBQyxLQUFLLFFBQVYsRUFBb0IsTUFBTSxJQUFJLEtBQUosQ0FBVSxrQkFBVixDQUFOO0FBQ3BCLE1BQUcsQ0FBQyxLQUFLLE1BQVQsRUFBaUIsTUFBTSxJQUFJLEtBQUosQ0FBVSxnQkFBVixDQUFOO0FBQ2pCLE1BQUksS0FBSyxpQkFBVCxFQUE0QjtBQUMxQixTQUFLLE1BQUwsR0FBYyxLQUFLLENBQUwsQ0FBTyxLQUFLLGlCQUFaLEVBQStCLENBQS9CLENBQWQ7O0FBRUY7QUFDRSxRQUFJLEtBQUssTUFBTCxLQUFnQixTQUFwQixFQUErQjtBQUM3QixXQUFLLDJCQUFMLENBQWlDLE1BQWpDLENBQXdDLDJCQUF4QztBQUNBLFdBQUssS0FBTCxDQUFXLDJCQUFYO0FBQ0Q7QUFDRixHQVJELE1BUU87QUFDTCxTQUFLLE1BQUwsR0FBYyxLQUFLLENBQUwsQ0FBTyxNQUFQLEVBQWUsQ0FBZixDQUFkO0FBQ0Q7QUFDRixDQXpCRDs7QUEyQkEsZ0JBQWdCLFNBQWhCLEdBQTRCOztBQUUzQjs7O0FBR0Msa0JBQWdCLFVBQVUsT0FBVixFQUFtQjtBQUNqQyxRQUFJLEtBQUssMkJBQUwsQ0FBaUMsS0FBakMsT0FBNkMsVUFBakQsRUFBNkQ7QUFDOUQ7QUFDRyxXQUFLLGdCQUFMLEdBQXdCLEVBQXhCO0FBQ0g7QUFDRyxXQUFLLEdBQUwsR0FBVyxDQUFYOztBQUVIO0FBQ0csV0FBSyxlQUFMLENBQXFCLEtBQXJCOztBQUVBLFdBQUssT0FBTDtBQUNEOztBQUVELFdBQU8sS0FBSywyQkFBTCxDQUFpQyxPQUFqQyxFQUFQO0FBQ0QsR0FuQnlCOztBQXFCMUIseUJBQXVCLFlBQVk7QUFDakMsUUFBSSxLQUFLLGdCQUFMLElBQXlCLEtBQUssZ0JBQUwsQ0FBc0IsTUFBdEIsR0FBK0IsQ0FBNUQsRUFBK0Q7QUFDN0QsVUFBSSxXQUFKOztBQUVIO0FBQ0csVUFBSSxLQUFLLGdCQUFMLEVBQUosRUFBNkI7QUFDM0IsWUFBSSxLQUFLLGdCQUFMLENBQXNCLE1BQXRCLEtBQWlDLENBQXJDLEVBQXdDO0FBQ3RDLHdCQUFjLFVBQWQ7QUFDRCxTQUZELE1BRU8sSUFBSSxLQUFLLENBQUwsQ0FBTyxvREFBUCxFQUE2RCxJQUE3RCxDQUFrRSxTQUFsRSxDQUFKLEVBQWtGO0FBQ3ZGLGNBQUksbUJBQW1CLEtBQUssZ0JBQUwsQ0FBc0IsS0FBdEIsRUFBdkI7QUFDQSwyQkFBaUIsTUFBakIsQ0FBd0IsaUJBQWlCLE9BQWpCLENBQXlCLEtBQUssTUFBOUIsQ0FBeEIsRUFBK0QsQ0FBL0Q7QUFDQSx3QkFBYyxlQUFlLEtBQUssV0FBTCxDQUFpQixjQUFqQixDQUFnQyxnQkFBaEMsRUFBa0QsS0FBSyxHQUF2RCxDQUE3QjtBQUNELFNBSk0sTUFJQTtBQUNWO0FBQ0ssd0JBQWMsS0FBSyxXQUFMLENBQWlCLGNBQWpCLENBQWdDLEtBQUssZ0JBQXJDLEVBQXVELEtBQUssR0FBNUQsQ0FBZDtBQUNEO0FBQ0YsT0FYRCxNQVdTO0FBQ1Asc0JBQWMsS0FBSyxXQUFMLENBQWlCLGNBQWpCLENBQWdDLEtBQUssZ0JBQXJDLEVBQXVELEtBQUssR0FBNUQsQ0FBZDtBQUNEOztBQUVELGFBQU8sV0FBUDtBQUNEO0FBQ0QsV0FBTyxFQUFQO0FBQ0QsR0E1Q3lCOztBQThDMUIsb0JBQWtCLFlBQVk7QUFDNUIsV0FBTyxLQUFLLGdCQUFMLENBQXNCLE9BQXRCLENBQThCLEtBQUssTUFBbkMsTUFBK0MsQ0FBQyxDQUF2RDtBQUNELEdBaER5Qjs7QUFrRDNCOzs7O0FBSUMsbUJBQWlCLFVBQVUsc0JBQVYsRUFBa0M7QUFDakQsU0FBSyxXQUFMLEdBQW1CLElBQUksV0FBSixDQUFnQjtBQUNqQyxnQ0FBMEIsSUFETztBQUVqQyxjQUFRLEtBQUssTUFGb0I7QUFHakMsOEJBQXdCLHNCQUhTO0FBSWpDLHNCQUFnQixDQUNkLCtCQURjLEVBRWQsNEJBRmMsRUFHZCxpQkFIYyxFQUlkLHlCQUpjLEVBS2QsK0JBTGMsQ0FKaUI7QUFXakMsYUFBTyxLQUFLO0FBWHFCLEtBQWhCLENBQW5CO0FBYUQsR0FwRXlCOztBQXNFMUIsbUJBQWlCLFVBQVUsa0JBQVYsRUFBOEI7QUFDN0MsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDQSxRQUFJLEtBQUssMkJBQUwsQ0FBaUMsS0FBakMsT0FBNkMsVUFBakQsRUFBNkQ7QUFDM0QsV0FBSyxlQUFMO0FBQ0EsUUFBRSxhQUFhLGtCQUFiLEVBQWlDLEtBQUssTUFBdEMsRUFBOEMsRUFBQyxDQUFELEVBQUksUUFBSixFQUFjLE1BQWQsRUFBOUMsQ0FBRixFQUF3RSxRQUF4RSxDQUFpRiwrQkFBakY7QUFDQSxXQUFLLDJCQUFMLENBQWlDLE9BQWpDO0FBQ0Q7O0FBRUQsV0FBTyxLQUFLLDJCQUFMLENBQWlDLE9BQWpDLEVBQVA7QUFDRCxHQWpGeUI7O0FBbUYxQixXQUFTLFlBQVk7QUFDbkIsUUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxTQUFLLGVBQUw7O0FBRUY7QUFDRSxTQUFLLFlBQUwsR0FBb0IsS0FBSyxDQUFMLENBQU8sS0FBSyxlQUFMLEdBQXVCLG9EQUE5QixFQUFvRixLQUFLLE1BQXpGLENBQXBCO0FBQ0Y7QUFDRSxRQUFJLEtBQUssTUFBTCxLQUFnQixTQUFTLElBQTdCLEVBQW1DO0FBQ2pDLFdBQUssWUFBTCxDQUFrQixJQUFsQixDQUF1QixLQUFLLE1BQTVCO0FBQ0Q7O0FBRUQsU0FBSyxvQkFBTDtBQUNBLFNBQUssb0JBQUw7QUFDQSxTQUFLLGtDQUFMO0FBQ0EsU0FBSyxhQUFMO0FBQ0EsU0FBSyx5QkFBTDtBQUNBLFNBQUssMEJBQUw7QUFDQSxTQUFLLG1CQUFMO0FBQ0QsR0FyR3lCOztBQXVHMUIsd0JBQXNCLFlBQVk7QUFDaEMsU0FBSyxZQUFMLENBQWtCLElBQWxCLENBQXVCLHVCQUF2QixFQUFnRCxVQUFVLENBQVYsRUFBYTtBQUMzRCxVQUFJLFVBQVUsRUFBRSxhQUFoQjtBQUNBLFVBQUksS0FBSyxnQkFBTCxDQUFzQixPQUF0QixDQUE4QixPQUE5QixNQUEyQyxDQUFDLENBQWhELEVBQW1EO0FBQ2pELGFBQUssZ0JBQUwsQ0FBc0IsSUFBdEIsQ0FBMkIsT0FBM0I7QUFDRDtBQUNELFdBQUsseUJBQUw7O0FBRUg7QUFDRyxhQUFPLEtBQVA7QUFDRCxLQVQrQyxDQVM5QyxJQVQ4QyxDQVN6QyxJQVR5QyxDQUFoRDtBQVVELEdBbEh5Qjs7QUFvSDNCOzs7QUFHQywwQkFBd0IsWUFBWTtBQUNsQyxRQUFJLFVBQVUsS0FBSyxnQkFBbkI7QUFDQSxRQUFJLE9BQUosRUFBYTtBQUNYLFdBQUssZ0JBQUwsQ0FBc0IsSUFBdEIsQ0FBMkIsT0FBM0I7QUFDQSxXQUFLLHlCQUFMO0FBQ0Q7QUFDRixHQTdIeUI7O0FBK0gxQix3QkFBc0IsWUFBWTtBQUNoQyxRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsTUFBRSxLQUFLLFlBQVAsRUFBcUIsSUFBckIsQ0FBMEIsMkJBQTFCLEVBQXVELFVBQVUsQ0FBVixFQUFhO0FBQ2xFLFVBQUksVUFBVSxFQUFFLGFBQWhCO0FBQ0EsV0FBSyxnQkFBTCxHQUF3QixPQUF4QjtBQUNBLFFBQUUsT0FBRixFQUFXLFFBQVgsQ0FBb0IsNEJBQXBCO0FBQ0EsYUFBTyxLQUFQO0FBQ0QsS0FMc0QsQ0FLckQsSUFMcUQsQ0FLaEQsSUFMZ0QsQ0FBdkQsRUFLYyxJQUxkLENBS21CLDBCQUxuQixFQUsrQyxVQUFVLENBQVYsRUFBYTtBQUMxRCxVQUFJLFVBQVUsRUFBRSxhQUFoQjtBQUNBLFdBQUssZ0JBQUwsR0FBd0IsSUFBeEI7QUFDQSxRQUFFLE9BQUYsRUFBVyxXQUFYLENBQXVCLDRCQUF2QjtBQUNBLGFBQU8sS0FBUDtBQUNELEtBTDhDLENBSzdDLElBTDZDLENBS3hDLElBTHdDLENBTC9DO0FBV0QsR0E1SXlCOztBQThJMUIsdUJBQXFCLFlBQVk7QUFDL0IsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLE1BQUUsTUFBRixFQUFVLFFBQVYsQ0FBbUIsK0JBQW5COztBQUVGO0FBQ0UsUUFBSSxLQUFLLGVBQUwsS0FBeUIsS0FBN0IsRUFBb0M7QUFDbEMsUUFBRSxLQUFGLEVBQVMsTUFBVCxDQUFnQixVQUFVLENBQVYsRUFBYSxPQUFiLEVBQXNCO0FBQ3BDLGVBQU8sRUFBRSxPQUFGLEVBQVcsR0FBWCxDQUFlLFVBQWYsTUFBK0IsUUFBdEM7QUFDRCxPQUZELEVBRUcsUUFGSCxDQUVZLHlCQUZaO0FBR0Q7QUFDRixHQXhKeUI7O0FBMEoxQix5QkFBdUIsWUFBWTtBQUNqQyxTQUFLLENBQUwsQ0FBTyxvQ0FBUCxFQUE2QyxXQUE3QyxDQUF5RCwrQkFBekQ7QUFDQSxTQUFLLENBQUwsQ0FBTyw2QkFBUCxFQUFzQyxXQUF0QyxDQUFrRCx5QkFBbEQ7QUFDRCxHQTdKeUI7O0FBK0oxQixlQUFhLFlBQVk7QUFDdkIsU0FBSyxHQUFMO0FBQ0EsUUFBSSxLQUFLLEdBQUwsR0FBVyxDQUFmLEVBQWtCO0FBQ2hCLFdBQUssR0FBTCxHQUFXLENBQVg7QUFDRDtBQUNGLEdBcEt5QjtBQXFLMUIsZ0JBQWMsWUFBWTtBQUN4QixTQUFLLEdBQUw7QUFDRCxHQXZLeUI7O0FBeUszQjtBQUNDLHNDQUFvQyxZQUFZO0FBQzlDLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDQSxRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNGO0FBQ0UsUUFBSSxlQUFKO0FBQ0EsU0FBSyxxQkFBTCxHQUE2QixZQUFZLFlBQVk7QUFDbkQsVUFBSSxRQUFRLFNBQVMsUUFBVCxFQUFaO0FBQ0EsVUFBSSxVQUFVLGVBQWQsRUFBK0I7QUFDL0Isd0JBQWtCLEtBQWxCOztBQUVBLFFBQUUsZ0NBQUYsRUFBb0MsV0FBcEMsQ0FBZ0QsTUFBaEQsRUFBd0QsQ0FBQyxLQUF6RDtBQUNBLFFBQUUsZ0NBQUYsRUFBb0MsV0FBcEMsQ0FBZ0QsTUFBaEQsRUFBd0QsS0FBeEQ7QUFDRCxLQVA0QixFQU8xQixHQVAwQixDQUE3Qjs7QUFTRjtBQUNBO0FBQ0UsTUFBRSxRQUFGLEVBQVksSUFBWixDQUFpQiwrQkFBakIsRUFBa0QsVUFBVSxLQUFWLEVBQWlCO0FBQ3BFO0FBQ0csVUFBSSxNQUFNLE9BQU4sS0FBa0IsRUFBdEIsRUFBMEI7QUFDeEIsYUFBSyxpQkFBTCxDQUF1QixFQUFFLHNDQUFGLENBQXZCO0FBQ0EsYUFBSyxXQUFMO0FBQ0Q7QUFDSjtBQUpHLFdBS0ssSUFBSSxNQUFNLE9BQU4sS0FBa0IsRUFBdEIsRUFBMEI7QUFDN0IsZUFBSyxpQkFBTCxDQUF1QixFQUFFLHVDQUFGLENBQXZCO0FBQ0EsZUFBSyxZQUFMO0FBQ0Q7QUFDSjtBQUpRLGFBS0EsSUFBSSxNQUFNLE9BQU4sS0FBa0IsRUFBdEIsRUFBMEI7QUFDN0IsaUJBQUssaUJBQUwsQ0FBdUIsRUFBRSx1Q0FBRixDQUF2QjtBQUNBLGlCQUFLLHNCQUFMO0FBQ0Q7O0FBRUQsV0FBSyx5QkFBTDtBQUNELEtBbEJpRCxDQWtCaEQsSUFsQmdELENBa0IzQyxJQWxCMkMsQ0FBbEQ7QUFtQkQsR0E3TXlCOztBQStNMUIscUJBQW1CLFVBQVUsT0FBVixFQUFtQjtBQUNwQyxRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsTUFBRSxPQUFGLEVBQVcsV0FBWCxDQUF1QixTQUF2QixFQUFrQyxXQUFsQyxDQUE4QyxtQkFBOUM7QUFDQSxlQUFXLFlBQVk7QUFDckIsUUFBRSxPQUFGLEVBQVcsUUFBWCxDQUFvQixTQUFwQjtBQUNBLGlCQUFXLFlBQVk7QUFDckIsVUFBRSxPQUFGLEVBQVcsUUFBWCxDQUFvQixtQkFBcEI7QUFDRCxPQUZELEVBRUcsR0FGSDtBQUdELEtBTEQsRUFLRyxDQUxIO0FBTUQsR0F4TnlCOztBQTBOMUIsNkJBQTJCLFlBQVk7QUFDckMsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDQSxRQUFJO0FBQ0YsVUFBSSxvQkFBb0IsS0FBSyxxQkFBTCxFQUF4Qjs7QUFFQSxRQUFFLG1DQUFGLEVBQXVDLElBQXZDLENBQTRDLGlCQUE1QztBQUNIO0FBQ0csUUFBRSxnQ0FBRixFQUFvQyxXQUFwQyxDQUFnRCwrQkFBaEQ7QUFDQSxRQUFFLGFBQWEsaUJBQWIsRUFBZ0MsS0FBSyxNQUFyQyxFQUE2QyxFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUE3QyxDQUFGLEVBQXVFLFFBQXZFLENBQWdGLCtCQUFoRjtBQUNELEtBUEQsQ0FPRSxPQUFPLEdBQVAsRUFBWTtBQUNaLFVBQUksUUFBUSxvRUFBWixFQUFrRjtBQUNoRixnQkFBUSxHQUFSLGtHQUFZLCtDQUFaOztBQUVBLGFBQUssc0JBQUw7QUFDSjtBQUNJLGFBQUssZ0JBQUwsQ0FBc0IsR0FBdEI7QUFDQSxhQUFLLHlCQUFMO0FBQ0Q7QUFDRjtBQUNGLEdBL095Qjs7QUFpUDFCLDBCQUF3QixZQUFZO0FBQ2xDLFNBQUssQ0FBTCxDQUFPLDZCQUFQLEVBQXNDLElBQXRDLENBQTJDLE9BQTNDLEVBQW9ELDJCQUFwRDtBQUNELEdBblB5Qjs7QUFxUDFCLDBCQUF3QixZQUFZO0FBQ2xDLFNBQUssQ0FBTCxDQUFPLDZCQUFQLEVBQXNDLElBQXRDLENBQTJDLE9BQTNDLEVBQW9ELEVBQXBEO0FBQ0QsR0F2UHlCOztBQXlQMUIsOEJBQTRCLFlBQVk7QUFDdEMsU0FBSyxDQUFMLENBQU8sb0NBQVAsRUFBNkMsS0FBN0MsQ0FBbUQsS0FBSyxzQkFBTCxDQUE0QixJQUE1QixDQUFpQyxJQUFqQyxDQUFuRDtBQUNELEdBM1B5Qjs7QUE2UDFCLGdDQUE4QixZQUFZO0FBQ3hDLFNBQUssQ0FBTCxDQUFPLG9DQUFQLEVBQTZDLE1BQTdDLENBQW9ELE9BQXBEO0FBQ0QsR0EvUHlCOztBQWlRMUIsNkJBQTJCLFlBQVk7QUFDckMsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLE1BQUUsb0RBQUYsRUFBd0QsTUFBeEQsQ0FBK0QsVUFBVSxDQUFWLEVBQWE7QUFDMUUsVUFBSSxFQUFFLEVBQUUsYUFBSixFQUFtQixFQUFuQixDQUFzQixVQUF0QixDQUFKLEVBQXVDO0FBQ3JDLGFBQUssZUFBTCxDQUFxQixJQUFyQjtBQUNELE9BRkQsTUFFTztBQUNMLGFBQUssZUFBTCxDQUFxQixLQUFyQjtBQUNEO0FBQ0YsS0FOOEQsQ0FNN0QsSUFONkQsQ0FNeEQsSUFOd0QsQ0FBL0Q7QUFPRCxHQTFReUI7QUEyUTFCLCtCQUE2QixZQUFZO0FBQ3ZDLFNBQUssQ0FBTCxDQUFPLDhDQUFQLEVBQXVELE1BQXZELENBQThELFFBQTlEO0FBQ0QsR0E3UXlCOztBQStRMUIsaUJBQWUsWUFBWTtBQUN6QixRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsUUFBSSxXQUFXLGlDQUNoQixpR0FEZ0IsR0FFaEIsMkNBRmdCLEdBR2YseUdBSGUsR0FJZiwyQkFKZSxHQUtmLDRCQUxlLEdBTWYsMkJBTmUsR0FPZiwrQkFQZSxHQVFmLG1CQVJlLEdBU2YsK0RBVGUsR0FVZiwyREFWZSxHQVdmLHlEQVhlLEdBWWYsUUFaZSxHQWFmLFFBYmUsR0FjZixRQWRlLEdBZWhCLFFBZmdCLEdBZ0JoQixrSUFoQmdCLEdBaUJoQixzR0FqQmdCLEdBa0JoQixxR0FsQmdCLEdBbUJoQixtR0FuQmdCLEdBb0JoQixvRUFwQmdCLEdBcUJoQixRQXJCQztBQXNCQSxNQUFFLE1BQUYsRUFBVSxNQUFWLENBQWlCLFFBQWpCOztBQUVBLE1BQUUsZ0RBQUYsRUFBb0QsS0FBcEQsQ0FBMEQsWUFBWTtBQUNwRSxXQUFLLGlCQUFMO0FBQ0QsS0FGeUQsQ0FFeEQsSUFGd0QsQ0FFbkQsSUFGbUQsQ0FBMUQ7QUFHRCxHQTVTeUI7QUE2UzFCLG1CQUFpQixZQUFZO0FBQzNCLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDRjtBQUNFLFFBQUksQ0FBQyxFQUFFLEtBQUssTUFBUCxFQUFlLEVBQWYsQ0FBa0IsTUFBbEIsQ0FBRCxJQUE4QixDQUFDLEVBQUUsS0FBSyxNQUFQLEVBQWUsRUFBZixDQUFrQixVQUFsQixDQUFuQyxFQUFrRTtBQUNoRSxRQUFFLEtBQUssTUFBUCxFQUFlLFFBQWYsQ0FBd0IsaUJBQXhCO0FBQ0Q7QUFDRixHQW5UeUI7O0FBcVQxQiwwQkFBd0IsWUFBWTtBQUNsQyxRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsTUFBRSxLQUFLLFlBQVAsRUFBcUIsTUFBckIsQ0FBNEIsdUJBQTVCO0FBQ0Y7QUFDRSxTQUFLLCtCQUFMO0FBQ0QsR0ExVHlCO0FBMlQxQixtQ0FBaUMsWUFBWTtBQUMzQyxTQUFLLENBQUwsQ0FBTyxnQ0FBUCxFQUF5QyxXQUF6QyxDQUFxRCwrQkFBckQ7QUFDQSxTQUFLLENBQUwsQ0FBTyxrQkFBUCxFQUEyQixXQUEzQixDQUF1QyxpQkFBdkM7QUFDRCxHQTlUeUI7QUErVDFCLDBCQUF3QixZQUFZO0FBQ2xDLFNBQUssQ0FBTCxDQUFPLEtBQUssWUFBWixFQUEwQixNQUExQixDQUFpQywyQkFBakMsRUFDQSxNQURBLENBQ08sMEJBRFA7QUFFRCxHQWxVeUI7QUFtVTFCLHNDQUFvQyxZQUFZO0FBQzlDLFNBQUssQ0FBTCxDQUFPLFFBQVAsRUFBaUIsTUFBakIsQ0FBd0IsK0JBQXhCO0FBQ0Esa0JBQWMsS0FBSyxxQkFBbkI7QUFDRCxHQXRVeUI7QUF1VTFCLGlCQUFlLFlBQVk7QUFDekIsU0FBSyxDQUFMLENBQU8sMkJBQVAsRUFBb0MsTUFBcEMsQ0FBMkMsT0FBM0M7QUFDQSxTQUFLLENBQUwsQ0FBTyxvQkFBUCxFQUE2QixNQUE3QjtBQUNELEdBMVV5Qjs7QUE0VTNCOzs7QUFHQyxhQUFXLFlBQVk7QUFDckIsU0FBSyxzQkFBTDtBQUNBLFNBQUssc0JBQUw7QUFDQSxTQUFLLGtDQUFMO0FBQ0EsU0FBSyw0QkFBTDtBQUNBLFNBQUssMkJBQUw7QUFDQSxTQUFLLHFCQUFMO0FBQ0EsU0FBSyxhQUFMO0FBQ0QsR0F2VnlCOztBQXlWMUIscUJBQW1CLFlBQVk7QUFDN0IsUUFBSSxvQkFBb0IsS0FBSyxxQkFBTCxFQUF4Qjs7QUFFQSxTQUFLLDJCQUFMLENBQWlDLE9BQWpDLENBQXlDO0FBQ3ZDLG1CQUFhO0FBRDBCLEtBQXpDO0FBR0Q7QUEvVnlCLENBQTVCOztBQWtXQSxPQUFPLE9BQVAsR0FBaUIsZUFBakI7OztBQ3JZQSxJQUFJLGVBQWUsUUFBUSxnQkFBUixDQUFuQjtBQUNBLElBQUksVUFBVSxRQUFRLFdBQVIsQ0FBZDtBQUNBLElBQUksdUJBQXVCLFFBQVEsdUNBQVIsQ0FBM0I7QUFDQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiOztBQUVBLElBQUksZ0JBQWdCLFVBQVUsT0FBVixFQUFtQixXQUFuQixFQUFnQztBQUNsRCxPQUFLLENBQUwsR0FBUyxZQUFZLENBQXJCO0FBQ0YsT0FBSyxRQUFMLEdBQWdCLFlBQVksUUFBNUI7QUFDQSxPQUFLLE1BQUwsR0FBYyxZQUFZLE1BQTFCO0FBQ0UsTUFBSSxDQUFDLFlBQVksQ0FBakIsRUFBb0I7QUFDbEIsVUFBTSxJQUFJLEtBQUosQ0FBVSxrQ0FBVixDQUFOO0FBQ0Q7QUFDRCxNQUFJLENBQUMsWUFBWSxRQUFqQixFQUEyQjtBQUN6QixVQUFNLElBQUksS0FBSixDQUFVLG9DQUFWLENBQU47QUFDRDtBQUNELE1BQUksQ0FBQyxZQUFZLE1BQWpCLEVBQXlCO0FBQ3ZCLFVBQU0sSUFBSSxLQUFKLENBQVUsa0NBQVYsQ0FBTjtBQUNEO0FBQ0QsTUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLE1BQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsTUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDQSxNQUFJLFFBQVEsT0FBUixZQUEyQixPQUEvQixFQUF3QztBQUN0QyxTQUFLLE9BQUwsR0FBZSxRQUFRLE9BQXZCO0FBQ0QsR0FGRCxNQUVPO0FBQ0wsU0FBSyxPQUFMLEdBQWUsSUFBSSxPQUFKLENBQVksUUFBUSxPQUFwQixFQUE2QixFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUE3QixDQUFmO0FBQ0Q7O0FBRUQsT0FBSyxnQkFBTCxHQUF3QixRQUFRLGdCQUFoQztBQUNBLE9BQUssYUFBTCxHQUFxQixRQUFRLGFBQVIsSUFBeUIsRUFBRSxNQUFGLEVBQVUsQ0FBVixDQUE5QztBQUNELENBeEJEOztBQTBCQSxjQUFjLFNBQWQsR0FBMEI7O0FBRXpCOzs7O0FBSUMscUJBQW1CLFlBQVk7QUFDN0IsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDQSxXQUFPLEtBQUssa0JBQUwsQ0FBd0IsS0FBSyxnQkFBN0IsRUFBK0MsSUFBSSxZQUFKLENBQWlCLElBQWpCLEVBQXVCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQXZCLENBQS9DLENBQVA7QUFDRCxHQVh1Qjs7QUFhekI7Ozs7OztBQU1DLDhCQUE0QixVQUFVLFFBQVYsRUFBb0I7QUFDaEQ7QUFDQTtBQUNFLFFBQUksU0FBUyx5QkFBVCxFQUFKLEVBQTBDO0FBQ3hDLGFBQU8sS0FBUDtBQUNEOztBQUVIO0FBQ0E7QUFDRSxRQUFJLFNBQVMsZ0JBQVQsTUFDTCxLQUFLLE9BQUwsQ0FBYSx1QkFBYixDQUFxQyxTQUFTLEVBQTlDLEVBQWtELE1BQWxELEdBQTJELENBRDFELEVBQzZEO0FBQzNELGFBQU8sS0FBUDtBQUNEOztBQUVIO0FBQ0UsUUFBSSxpQkFBaUIsS0FBSyxPQUFMLENBQWEsZUFBYixDQUE2QixTQUFTLEVBQXRDLENBQXJCO0FBQ0EsU0FBSyxJQUFJLENBQVQsSUFBYyxjQUFkLEVBQThCO0FBQzVCLFVBQUksZ0JBQWdCLGVBQWUsQ0FBZixDQUFwQjtBQUNBLFVBQUksQ0FBQyxLQUFLLDBCQUFMLENBQWdDLGFBQWhDLENBQUwsRUFBcUQ7QUFDbkQsZUFBTyxLQUFQO0FBQ0Q7QUFDRjtBQUNELFdBQU8sSUFBUDtBQUNELEdBMUN1Qjs7QUE0Q3hCLGdDQUE4QixVQUFVLGdCQUFWLEVBQTRCO0FBQ3hELFFBQUksa0JBQWtCLEVBQXRCO0FBQ0EsUUFBSSxpQkFBaUIsS0FBSyxPQUFMLENBQWEsdUJBQWIsQ0FBcUMsZ0JBQXJDLENBQXJCOztBQUVBLG1CQUFlLE9BQWYsQ0FBdUIsVUFBVSxhQUFWLEVBQXlCO0FBQzlDLFVBQUksS0FBSywwQkFBTCxDQUFnQyxhQUFoQyxDQUFKLEVBQW9EO0FBQ2xELHdCQUFnQixJQUFoQixDQUFxQixhQUFyQjtBQUNKOztBQUVJLFlBQUkseUJBQXlCLEtBQUssT0FBTCxDQUFhLGVBQWIsQ0FBNkIsY0FBYyxFQUEzQyxDQUE3QjtBQUNBLCtCQUF1QixPQUF2QixDQUErQixVQUFVLFFBQVYsRUFBb0I7QUFDakQsY0FBSSxnQkFBZ0IsT0FBaEIsQ0FBd0IsUUFBeEIsTUFBc0MsQ0FBQyxDQUEzQyxFQUE4QztBQUM1Qyw0QkFBZ0IsSUFBaEIsQ0FBcUIsUUFBckI7QUFDRDtBQUNGLFNBSkQ7QUFLRDtBQUNGLEtBWnNCLENBWXJCLElBWnFCLENBWWhCLElBWmdCLENBQXZCOztBQWNBLFdBQU8sZUFBUDtBQUNELEdBL0R1Qjs7QUFpRXhCLHNCQUFvQixVQUFVLGdCQUFWLEVBQTRCLHlCQUE1QixFQUF1RDtBQUN6RSxRQUFJLGtCQUFrQiwwQkFBMEIsTUFBMUIsQ0FBaUMsS0FBSyw0QkFBTCxDQUFrQyxnQkFBbEMsQ0FBakMsQ0FBdEI7O0FBRUY7QUFDRSxRQUFJLGdCQUFnQixFQUFwQjtBQUNBLFFBQUksaUJBQWlCLEtBQUssT0FBTCxDQUFhLHVCQUFiLENBQXFDLGdCQUFyQyxDQUFyQjtBQUNBLG1CQUFlLE9BQWYsQ0FBdUIsVUFBVSxRQUFWLEVBQW9CO0FBQ3pDLFVBQUksQ0FBQyxLQUFLLDBCQUFMLENBQWdDLFFBQWhDLENBQUwsRUFBZ0Q7QUFDbEQ7QUFDQTtBQUNJLFlBQUksQ0FBQyxTQUFTLDBCQUFULEVBQUwsRUFBNEM7QUFDMUMsY0FBSSxlQUFlLGdCQUFnQixNQUFoQixDQUF1QixDQUFDLFFBQUQsQ0FBdkIsQ0FBbkI7QUFDQSx3QkFBYyxJQUFkLENBQW1CLFlBQW5CO0FBQ0QsU0FIRCxNQUdPO0FBQ1Y7QUFDSyxjQUFJLDRCQUE0QixnQkFBZ0IsTUFBaEIsQ0FBdUIsQ0FBQyxRQUFELENBQXZCLENBQWhDO0FBQ0EsY0FBSSxxQkFBcUIsS0FBSyxrQkFBTCxDQUF3QixTQUFTLEVBQWpDLEVBQXFDLHlCQUFyQyxDQUF6QjtBQUNBLDBCQUFnQixjQUFjLE1BQWQsQ0FBcUIsa0JBQXJCLENBQWhCO0FBQ0Q7QUFDRjtBQUNGLEtBZHNCLENBY3JCLElBZHFCLENBY2hCLElBZGdCLENBQXZCOztBQWdCRjtBQUNFLFFBQUksY0FBYyxNQUFkLEtBQXlCLENBQTdCLEVBQWdDO0FBQzlCLGFBQU8sQ0FBQyxlQUFELENBQVA7QUFDRCxLQUZELE1BRU87QUFDTCxhQUFPLGFBQVA7QUFDRDtBQUNGLEdBN0Z1Qjs7QUErRnhCLDZCQUEyQixVQUFVLFNBQVYsRUFBcUIsZ0JBQXJCLEVBQXVDLGFBQXZDLEVBQXNEO0FBQy9FLFFBQUksaUJBQWlCLFVBQVUsdUJBQVYsQ0FBa0MsZ0JBQWxDLENBQXJCO0FBQ0EsUUFBSSxvQkFBb0IsRUFBeEI7QUFDQSxtQkFBZSxPQUFmLENBQXVCLFVBQVUsUUFBVixFQUFvQjtBQUN6QyxVQUFJLENBQUMsVUFBVSx5QkFBVixDQUFvQyxTQUFTLEVBQTdDLENBQUwsRUFBdUQ7QUFDckQsMEJBQWtCLElBQWxCLENBQXVCLEtBQUsscUJBQUwsQ0FBMkIsSUFBM0IsQ0FBZ0MsSUFBaEMsRUFBc0MsU0FBdEMsRUFBaUQsUUFBakQsRUFBMkQsYUFBM0QsQ0FBdkI7QUFDRDtBQUNGLEtBSnNCLENBSXJCLElBSnFCLENBSWhCLElBSmdCLENBQXZCOztBQU1BLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2QjtBQUNBLHlCQUFxQixpQkFBckIsRUFBd0MsSUFBeEMsQ0FBNkMsVUFBVSxTQUFWLEVBQXFCO0FBQ2hFLFVBQUksYUFBYSxFQUFqQjtBQUNBLGdCQUFVLE9BQVYsQ0FBa0IsVUFBVSxJQUFWLEVBQWdCO0FBQ2hDLHFCQUFhLE9BQU8sTUFBUCxDQUFjLFVBQWQsRUFBMEIsSUFBMUIsQ0FBYjtBQUNELE9BRkQ7QUFHQSx1QkFBaUIsT0FBakIsQ0FBeUIsVUFBekI7QUFDRCxLQU5EOztBQVFBLFdBQU8sZ0JBQVA7QUFDRCxHQWxIdUI7O0FBb0h4Qix5QkFBdUIsVUFBVSxTQUFWLEVBQXFCLFFBQXJCLEVBQStCLGFBQS9CLEVBQThDO0FBQ25FLFFBQUksSUFBSSxPQUFPLFFBQVAsRUFBUjtBQUNBLFFBQUksZUFBZSxTQUFTLE9BQVQsQ0FBaUIsYUFBakIsQ0FBbkI7QUFDQSxpQkFBYSxJQUFiLENBQWtCLFVBQVUsSUFBVixFQUFnQjtBQUNoQyxVQUFJLFNBQVMsa0JBQVQsRUFBSixFQUFtQztBQUNqQyxZQUFJLG1CQUFtQixLQUFLLENBQUwsQ0FBdkI7QUFDQSxZQUFJLDBCQUEwQixLQUFLLHlCQUFMLENBQStCLFNBQS9CLEVBQTBDLFNBQVMsRUFBbkQsRUFBdUQsZ0JBQXZELENBQTlCO0FBQ0EsZ0NBQXdCLElBQXhCLENBQTZCLFVBQVUsSUFBVixFQUFnQjtBQUMzQyxZQUFFLE9BQUYsQ0FBVSxJQUFWO0FBQ0QsU0FGRDtBQUdELE9BTkQsTUFNUztBQUNQLFVBQUUsT0FBRixDQUFVLEtBQUssQ0FBTCxDQUFWO0FBQ0Q7QUFDRixLQVZpQixDQVVoQixJQVZnQixDQVVYLElBVlcsQ0FBbEI7O0FBWUEsV0FBTyxDQUFQO0FBQ0QsR0FwSXVCOztBQXNJekI7OztBQUdDLHdCQUFzQixVQUFVLFNBQVYsRUFBcUIsUUFBckIsRUFBK0IsYUFBL0IsRUFBOEMsVUFBOUMsRUFBMEQ7QUFDOUUsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EsUUFBSSxZQUFKO0FBQ0Y7QUFDRSxRQUFJLENBQUMsU0FBUyxrQkFBVCxFQUFMLEVBQW9DO0FBQ2xDLHFCQUFlLFNBQVMsT0FBVCxDQUFpQixhQUFqQixDQUFmO0FBQ0EsbUJBQWEsSUFBYixDQUFrQixVQUFVLFlBQVYsRUFBd0I7QUFDeEMsWUFBSSxnQkFBZ0IsS0FBSyxLQUFMLENBQVcsS0FBSyxTQUFMLENBQWUsVUFBZixDQUFYLENBQXBCO0FBQ0EsWUFBSSxhQUFhLEVBQWpCOztBQUVBLHFCQUFhLE9BQWIsQ0FBcUIsVUFBVSxNQUFWLEVBQWtCO0FBQ3JDLGlCQUFPLE1BQVAsQ0FBYyxNQUFkLEVBQXNCLGFBQXRCO0FBQ0EscUJBQVcsSUFBWCxDQUFnQixNQUFoQjtBQUNELFNBSEQ7O0FBS0EseUJBQWlCLE9BQWpCLENBQXlCLFVBQXpCO0FBQ0QsT0FWRDtBQVdEOztBQUVIO0FBQ0UsbUJBQWUsU0FBUyxPQUFULENBQWlCLGFBQWpCLENBQWY7QUFDQSxpQkFBYSxJQUFiLENBQWtCLFVBQVUsWUFBVixFQUF3QjtBQUN4QyxVQUFJLG9CQUFvQixFQUF4Qjs7QUFFQSxtQkFBYSxPQUFiLENBQXFCLFVBQVUsT0FBVixFQUFtQjtBQUN0QyxZQUFJLGdCQUFnQixLQUFLLEtBQUwsQ0FBVyxLQUFLLFNBQUwsQ0FBZSxVQUFmLENBQVgsQ0FBcEI7QUFDQSxZQUFJLDBCQUEwQixLQUFLLG1CQUFMLENBQXlCLElBQXpCLENBQThCLElBQTlCLEVBQW9DLFNBQXBDLEVBQStDLFNBQVMsRUFBeEQsRUFBNEQsT0FBNUQsRUFBcUUsYUFBckUsQ0FBOUI7QUFDQSwwQkFBa0IsSUFBbEIsQ0FBdUIsdUJBQXZCO0FBQ0QsT0FKb0IsQ0FJbkIsSUFKbUIsQ0FJZCxJQUpjLENBQXJCOztBQU1BLDJCQUFxQixpQkFBckIsRUFBd0MsSUFBeEMsQ0FBNkMsVUFBVSxTQUFWLEVBQXFCO0FBQ2hFLFlBQUksYUFBYSxFQUFqQjtBQUNBLGtCQUFVLE9BQVYsQ0FBa0IsVUFBVSxlQUFWLEVBQTJCO0FBQzNDLDBCQUFnQixPQUFoQixDQUF3QixVQUFVLFdBQVYsRUFBdUI7QUFDN0MsZ0JBQUksTUFBTSxFQUFWO0FBQ0EsbUJBQU8sTUFBUCxDQUFjLEdBQWQsRUFBbUIsV0FBbkI7QUFDQSx1QkFBVyxJQUFYLENBQWdCLEdBQWhCO0FBQ0QsV0FKRDtBQUtELFNBTkQ7QUFPQSx5QkFBaUIsT0FBakIsQ0FBeUIsVUFBekI7QUFDRCxPQVZEO0FBV0QsS0FwQmlCLENBb0JoQixJQXBCZ0IsQ0FvQlgsSUFwQlcsQ0FBbEI7O0FBc0JBLFdBQU8sZ0JBQVA7QUFDRCxHQXJMdUI7O0FBdUx4Qix1QkFBcUIsVUFBVSxTQUFWLEVBQXFCLGdCQUFyQixFQUF1QyxhQUF2QyxFQUFzRCxVQUF0RCxFQUFrRTtBQUNyRixRQUFJLGlCQUFpQixVQUFVLHVCQUFWLENBQWtDLGdCQUFsQyxDQUFyQjtBQUNBLFFBQUksMEJBQTBCLEtBQUsseUJBQUwsQ0FBK0IsU0FBL0IsRUFBMEMsZ0JBQTFDLEVBQTRELGFBQTVELENBQTlCO0FBQ0EsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCOztBQUVBLDRCQUF3QixJQUF4QixDQUE2QixVQUFVLGVBQVYsRUFBMkI7QUFDdEQsbUJBQWEsT0FBTyxNQUFQLENBQWMsVUFBZCxFQUEwQixlQUExQixDQUFiOztBQUVBLFVBQUksb0JBQW9CLEVBQXhCOztBQUVBLHFCQUFlLE9BQWYsQ0FBdUIsVUFBVSxRQUFWLEVBQW9CO0FBQ3pDLFlBQUksVUFBVSx5QkFBVixDQUFvQyxTQUFTLEVBQTdDLENBQUosRUFBc0Q7QUFDcEQsY0FBSSxnQkFBZ0IsS0FBSyxLQUFMLENBQVcsS0FBSyxTQUFMLENBQWUsVUFBZixDQUFYLENBQXBCO0FBQ0EsY0FBSSxtQkFBbUIsS0FBSyxvQkFBTCxDQUEwQixJQUExQixDQUErQixJQUEvQixFQUFxQyxTQUFyQyxFQUFnRCxRQUFoRCxFQUEwRCxhQUExRCxFQUF5RSxhQUF6RSxDQUF2QjtBQUNBLDRCQUFrQixJQUFsQixDQUF1QixnQkFBdkI7QUFDRDtBQUNGLE9BTnNCLENBTXJCLElBTnFCLENBTWhCLElBTmdCLENBQXZCOztBQVFIO0FBQ0csMkJBQXFCLGlCQUFyQixFQUF3QyxJQUF4QyxDQUE2QyxVQUFVLFNBQVYsRUFBcUI7QUFDaEUsWUFBSSxhQUFhLEVBQWpCO0FBQ0Esa0JBQVUsT0FBVixDQUFrQixVQUFVLFlBQVYsRUFBd0I7QUFDeEMsdUJBQWEsT0FBYixDQUFxQixVQUFVLFdBQVYsRUFBdUI7QUFDMUMsZ0JBQUksTUFBTSxFQUFWO0FBQ0EsbUJBQU8sTUFBUCxDQUFjLEdBQWQsRUFBbUIsV0FBbkI7QUFDQSx1QkFBVyxJQUFYLENBQWdCLEdBQWhCO0FBQ0QsV0FKRDtBQUtELFNBTkQ7O0FBUUEsWUFBSSxXQUFXLE1BQVgsS0FBc0IsQ0FBMUIsRUFBNkI7QUFDaEM7QUFDQTtBQUNLLGNBQUksT0FBTyxJQUFQLENBQVksVUFBWixFQUF3QixNQUF4QixLQUFtQyxDQUF2QyxFQUEwQztBQUN4Qyw2QkFBaUIsT0FBakIsQ0FBeUIsRUFBekI7QUFDRCxXQUZELE1BRU87QUFDTCw2QkFBaUIsT0FBakIsQ0FBeUIsQ0FBQyxVQUFELENBQXpCO0FBQ0Q7QUFDRixTQVJELE1BUVU7QUFDUiwyQkFBaUIsT0FBakIsQ0FBeUIsVUFBekI7QUFDRDtBQUNGLE9BckJEO0FBc0JELEtBcEM0QixDQW9DM0IsSUFwQzJCLENBb0N0QixJQXBDc0IsQ0FBN0I7O0FBc0NBLFdBQU8sZ0JBQVA7QUFDRCxHQW5PdUI7O0FBcU94QixXQUFTLFlBQVk7QUFDbkIsUUFBSSxnQkFBZ0IsS0FBSyxpQkFBTCxFQUFwQjtBQUNBLFFBQUksb0JBQW9CLEVBQXhCOztBQUVBLGtCQUFjLE9BQWQsQ0FBc0IsVUFBVSxZQUFWLEVBQXdCO0FBQzVDLFVBQUksdUJBQXVCLEtBQUssbUJBQUwsQ0FBeUIsSUFBekIsQ0FBOEIsSUFBOUIsRUFBb0MsWUFBcEMsRUFBa0QsS0FBSyxnQkFBdkQsRUFBeUUsS0FBSyxhQUE5RSxFQUE2RixFQUE3RixDQUEzQjtBQUNBLHdCQUFrQixJQUFsQixDQUF1QixvQkFBdkI7QUFDRCxLQUhxQixDQUdwQixJQUhvQixDQUdmLElBSGUsQ0FBdEI7O0FBS0EsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EseUJBQXFCLGlCQUFyQixFQUF3QyxJQUF4QyxDQUE2QyxVQUFVLFNBQVYsRUFBcUI7QUFDaEUsVUFBSSxVQUFVLEVBQWQ7QUFDQSxnQkFBVSxPQUFWLENBQWtCLFVBQVUsV0FBVixFQUF1QjtBQUN2QyxrQkFBVSxRQUFRLE1BQVIsQ0FBZSxXQUFmLENBQVY7QUFDRCxPQUZEO0FBR0EsdUJBQWlCLE9BQWpCLENBQXlCLE9BQXpCO0FBQ0QsS0FORDtBQU9BLFdBQU8sZ0JBQVA7QUFDRCxHQXZQdUI7O0FBeVB4Qix5QkFBdUIsVUFBVSxpQkFBVixFQUE2QixVQUE3QixFQUF5QyxPQUF6QyxFQUFrRDtBQUN2RSxRQUFJLElBQUksS0FBSyxDQUFMLElBQVUsUUFBUSxDQUExQjtBQUNBLFFBQUksV0FBVyxLQUFLLFFBQUwsSUFBaUIsUUFBUSxRQUF4QztBQUNBLFFBQUksU0FBUyxLQUFLLE1BQUwsSUFBZSxRQUFRLE1BQXBDOztBQUVGO0FBQ0E7QUFDRSxRQUFJLFVBQVUsS0FBSyxPQUFuQjtBQUNBLFFBQUksV0FBVyxLQUFLLE9BQUwsQ0FBYSxTQUFiLENBQXVCLFdBQXZCLENBQW1DLFVBQW5DLENBQWY7QUFDQSxRQUFJLGlCQUFpQixRQUFRLFNBQVIsQ0FBa0IsZUFBbEIsQ0FBa0MsVUFBbEMsQ0FBckI7QUFDQSxRQUFJLGtCQUFrQixFQUF0QjtBQUNBLFFBQUksQ0FBSjtBQUNBLFFBQUksRUFBSjtBQUNBLFFBQUksY0FBSjtBQUNBLFNBQUssSUFBSSxrQkFBa0IsTUFBbEIsR0FBMkIsQ0FBcEMsRUFBdUMsS0FBSyxDQUE1QyxFQUErQyxHQUEvQyxFQUFvRDtBQUNsRCxXQUFLLGtCQUFrQixDQUFsQixDQUFMO0FBQ0EsVUFBSSxPQUFPLE9BQVgsRUFBb0I7QUFDcEIsdUJBQWlCLEtBQUssT0FBTCxDQUFhLFNBQWIsQ0FBdUIsV0FBdkIsQ0FBbUMsRUFBbkMsQ0FBakI7QUFDQSxzQkFBZ0IsSUFBaEIsQ0FBcUIsY0FBckI7QUFDRDs7QUFFSDtBQUNFLFFBQUksWUFBWSxnQkFBZ0IsTUFBaEIsQ0FBdUIsY0FBdkIsQ0FBaEI7QUFDQSxjQUFVLElBQVYsQ0FBZSxRQUFmO0FBQ0EsWUFBUSxTQUFSLEdBQW9CLElBQUksWUFBSixDQUFpQixTQUFqQixFQUE0QixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUE1QixDQUFwQjs7QUFFQSxRQUFJLGdCQUFKO0FBQ0Y7QUFDRSxTQUFLLElBQUksa0JBQWtCLE1BQWxCLEdBQTJCLENBQXBDLEVBQXVDLEtBQUssQ0FBNUMsRUFBK0MsR0FBL0MsRUFBb0Q7QUFDbEQsV0FBSyxrQkFBa0IsQ0FBbEIsQ0FBTDtBQUNBLFVBQUksT0FBTyxPQUFYLEVBQW9CO0FBQ2xCLDJCQUFtQixFQUFuQjtBQUNBO0FBQ0Q7QUFDRCx1QkFBaUIsS0FBSyxPQUFMLENBQWEsU0FBYixDQUF1QixXQUF2QixDQUFtQyxrQkFBa0IsQ0FBbEIsQ0FBbkMsQ0FBakI7QUFDQSxVQUFJLENBQUMsZUFBZSxrQkFBZixFQUFMLEVBQTBDO0FBQ3hDLDJCQUFtQixFQUFuQjtBQUNBO0FBQ0Q7QUFDRjtBQUNELFNBQUssZ0JBQUwsR0FBd0IsZ0JBQXhCOztBQUVBLFdBQU8sS0FBSyxPQUFMLEVBQVA7QUFDRDtBQXBTdUIsQ0FBMUI7O0FBdVNBLE9BQU8sT0FBUCxHQUFpQixhQUFqQjs7O0FDdFVBOzs7Ozs7QUFNQSxJQUFJLGVBQWUsVUFBVSxXQUFWLEVBQXVCLGFBQXZCLEVBQXNDLE9BQXRDLEVBQStDO0FBQ2hFLGdCQUFjLGVBQWUsRUFBN0I7QUFDQSxPQUFLLENBQUwsR0FBUyxRQUFRLENBQWpCO0FBQ0YsT0FBSyxRQUFMLEdBQWdCLFFBQVEsUUFBeEI7QUFDQSxPQUFLLE1BQUwsR0FBYyxRQUFRLE1BQXRCO0FBQ0UsTUFBSSxDQUFDLEtBQUssQ0FBVixFQUFhLE1BQU0sSUFBSSxLQUFKLENBQVUsaUNBQVYsQ0FBTjtBQUNmLE1BQUksQ0FBQyxLQUFLLFFBQVYsRUFBb0IsTUFBTSxJQUFJLEtBQUosQ0FBVSxrQkFBVixDQUFOO0FBQ3BCLE1BQUcsQ0FBQyxLQUFLLE1BQVQsRUFBZ0IsTUFBTSxJQUFJLEtBQUosQ0FBVSxnQkFBVixDQUFOO0FBQ2QsTUFBSSxtQkFBbUIsRUFBdkI7O0FBRUEsTUFBSSxhQUFhLFVBQVUsT0FBVixFQUFtQjtBQUNsQyxRQUFJLGlCQUFpQixPQUFqQixDQUF5QixPQUF6QixNQUFzQyxDQUFDLENBQTNDLEVBQThDO0FBQzVDLHVCQUFpQixJQUFqQixDQUFzQixPQUF0QjtBQUNEO0FBQ0YsR0FKRDs7QUFNQSxNQUFJLGdCQUFnQixhQUFhLGdCQUFiLENBQThCLFdBQTlCLENBQXBCO0FBQ0EsTUFBSSxPQUFPLElBQVg7QUFDQSxnQkFBYyxPQUFkLENBQXNCLFVBQVUsUUFBVixFQUFvQjtBQUMxQztBQUNFLFFBQUksYUFBYSxVQUFqQixFQUE2QjtBQUMzQixXQUFLLENBQUwsQ0FBTyxhQUFQLEVBQXNCLElBQXRCLENBQTJCLFVBQVUsQ0FBVixFQUFhLE9BQWIsRUFBc0I7QUFDL0MsbUJBQVcsT0FBWDtBQUNELE9BRkQ7QUFHRCxLQUpELE1BSVE7QUFDTixVQUFJLFdBQVcsS0FBSyxDQUFMLENBQU8sUUFBUCxFQUFpQixLQUFLLENBQUwsQ0FBTyxhQUFQLENBQWpCLENBQWY7QUFDQSxlQUFTLElBQVQsQ0FBYyxVQUFVLENBQVYsRUFBYSxPQUFiLEVBQXNCO0FBQ2xDLG1CQUFXLE9BQVg7QUFDRCxPQUZEO0FBR0Q7QUFDRixHQVpEOztBQWNBLFNBQU8sZ0JBQVA7QUFDRCxDQWpDRDs7QUFtQ0EsYUFBYSxnQkFBYixHQUFnQyxVQUFVLFdBQVYsRUFBdUI7QUFDckQsTUFBSSxZQUFZLFlBQVksS0FBWixDQUFrQix5QkFBbEIsQ0FBaEI7O0FBRUEsTUFBSSxrQkFBa0IsRUFBdEI7QUFDQSxNQUFJLGtCQUFrQixFQUF0QjtBQUNBLFlBQVUsT0FBVixDQUFrQixVQUFVLFFBQVYsRUFBb0I7QUFDcEMsUUFBSSxhQUFhLEdBQWpCLEVBQXNCO0FBQ3BCLFVBQUksZ0JBQWdCLElBQWhCLEdBQXVCLE1BQTNCLEVBQW1DO0FBQ2pDLHdCQUFnQixJQUFoQixDQUFxQixnQkFBZ0IsSUFBaEIsRUFBckI7QUFDRDtBQUNELHdCQUFrQixFQUFsQjtBQUNELEtBTEQsTUFLUTtBQUNOLHlCQUFtQixRQUFuQjtBQUNEO0FBQ0YsR0FURDtBQVVBLE1BQUksZ0JBQWdCLElBQWhCLEdBQXVCLE1BQTNCLEVBQW1DO0FBQ2pDLG9CQUFnQixJQUFoQixDQUFxQixnQkFBZ0IsSUFBaEIsRUFBckI7QUFDRDs7QUFFRCxTQUFPLGVBQVA7QUFDRCxDQXBCRDs7QUFzQkEsT0FBTyxPQUFQLEdBQWlCLFlBQWpCOzs7QUMvREEsTUFBTSxRQUFRLFFBQVEsT0FBUixDQUFkO0FBQ0EsTUFBTSxTQUFTLFFBQVEsUUFBUixDQUFmO0FBQ0EsSUFBSSxpQkFBaUIsUUFBUSxpQkFBUixDQUFyQjs7QUFFQSxNQUFNLGlCQUFpQixRQUFRLG1DQUFSLENBQXZCO0FBQ0EsSUFBSSx1QkFBdUIsUUFBUSx1Q0FBUixDQUEzQjs7QUFFQSxJQUFJLGVBQWUsVUFBVSxPQUFWLEVBQW1CO0FBQ3BDLE9BQUssYUFBTCxHQUFxQixRQUFRLGFBQTdCO0FBQ0QsQ0FGRDs7QUFJQSxhQUFhLFNBQWIsR0FBeUI7QUFDdkIsV0FBUyxVQUFVLEdBQVYsRUFBZSxRQUFmLEVBQXlCO0FBQ2hDLFVBQU0sRUFBQyxLQUFELEtBQVUsS0FBaEI7QUFDQSxVQUFNLFVBQVUsSUFBaEI7QUFDQSxVQUFNLE9BQU4sQ0FBYyxHQUFkLEVBQ0csSUFESCxDQUNRLFVBQVUsR0FBVixFQUFlO0FBQ25CLFlBQU0sU0FBUyxJQUFJLE1BQW5CO0FBQ0EsWUFBTSxXQUFXLE9BQU8sUUFBeEI7QUFDQSxZQUFNLElBQUksT0FBTyxJQUFJLE1BQVgsQ0FBVjtBQUNBLGlCQUFXLFlBQVk7QUFDckIsaUJBQVMsSUFBVCxFQUFlLEVBQUMsQ0FBRCxFQUFJLFFBQUosRUFBYyxNQUFkLEVBQWY7QUFDRCxPQUZELEVBRUcsUUFBUSxhQUZYO0FBR0QsS0FSSCxFQVFLLEtBUkwsQ0FRVyxLQUFLLFNBQVMsQ0FBVCxDQVJoQjtBQVNELEdBYnNCO0FBY3ZCLFNBQU8sWUFBWSxDQUVsQixDQWhCc0I7QUFpQnZCLGNBQVksVUFBVSxNQUFWLEVBQWtCLGNBQWxCLEVBQWtDO0FBQzVDLFFBQUksbUJBQW1CLGVBQWUsUUFBZixFQUF2QjtBQUNBLFFBQUksMEJBQTBCLEVBQTlCO0FBQ0EsUUFBSSxlQUFlLGdCQUFnQixNQUFuQztBQUNBLFNBQUssSUFBSSxJQUFULElBQWlCLE1BQWpCLEVBQXlCO0FBQ3ZCLFVBQUksS0FBSyxNQUFMLENBQVksQ0FBWixFQUFlLFlBQWYsTUFBaUMsZUFBckMsRUFBc0Q7QUFDcEQsY0FBTSxJQUFJLEtBQUosQ0FBVSx5Q0FBVixDQUFOO0FBQ0Q7QUFDRjtBQUNELHlCQUFxQix1QkFBckIsRUFBOEMsSUFBOUMsQ0FBbUQsWUFBWTtBQUM3RCx1QkFBaUIsT0FBakI7QUFDRCxLQUZEOztBQUlBLFdBQU8saUJBQWlCLE9BQWpCLEVBQVA7QUFDRCxHQS9Cc0I7QUFnQ3ZCLGFBQVcsVUFBVSxHQUFWLEVBQWUsT0FBZixFQUF3QixnQkFBeEIsRUFBMEMsUUFBMUMsRUFBb0QsS0FBcEQsRUFBMkQ7QUFDcEUsVUFBTSxVQUFVLElBQWhCO0FBQ0EsWUFBUSxHQUFSLHVFQUFZLHdCQUFaO0FBQ0EsWUFBUSxPQUFSLENBQWdCLEdBQWhCLEVBQXFCLFVBQVUsR0FBVixFQUFlLEVBQUMsQ0FBRCxFQUFJLFFBQUosRUFBYyxNQUFkLEVBQWYsRUFBc0M7QUFDekQsVUFBSSxHQUFKLEVBQVM7QUFDUCxlQUFPLFNBQVMsR0FBVCxDQUFQO0FBQ0Q7O0FBRUQsVUFBSSxVQUFVO0FBQ1oscUJBQWEsSUFERDtBQUVaLGlCQUFTLEtBQUssS0FBTCxDQUFXLEtBQUssU0FBTCxDQUFlLE9BQWYsQ0FBWCxDQUZHO0FBR1osMEJBQWtCO0FBSE4sT0FBZDtBQUtBLGVBQVMsWUFBVCxDQUF1QixJQUF2QixFQUE2QjtBQUMzQixpQkFBUyxJQUFULENBQWMsS0FBZCxFQUFxQixJQUFyQixFQUEyQixJQUEzQjtBQUNEO0FBQ0QscUJBQWUsT0FBZixFQUF3QixJQUF4QixFQUE4QixZQUE5QixFQUE0QyxFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUE1QztBQUNELEtBZEQ7QUFlRDtBQWxEc0IsQ0FBekI7O0FBcURBLE9BQU8sT0FBUCxHQUFpQixZQUFqQjs7O0FDaEVBLE1BQU0sZUFBZSxRQUFRLGdCQUFSLENBQXJCO0FBQ0EsT0FBTyxPQUFQLEdBQWlCLFVBQVUsSUFBVixFQUFnQjtBQUMvQixNQUFJLFVBRUosS0FBSyxPQUFMLEdBQWUsVUFBVSxHQUFWLEVBQWU7QUFDNUIsU0FBSyxXQUFMLENBQWlCO0FBQ2YsV0FBSyxJQUFJLEtBQUosQ0FBVSxHQUFWO0FBRFUsS0FBakI7QUFHQSxTQUFLLEtBQUw7QUFDRCxHQVBEO0FBUUEsT0FBSyxnQkFBTCxDQUFzQixTQUF0QixFQUFpQyxVQUFVLEVBQVYsRUFBYztBQUM3QyxVQUFNLE9BQU8sR0FBRyxJQUFoQjtBQUNBLFVBQU0sT0FBTyxLQUFLLElBQWxCO0FBQ0EsUUFBSSxLQUFLLEtBQUwsS0FBZSxNQUFuQixFQUEyQjtBQUN6QixnQkFBVSxJQUFJLFlBQUosQ0FBaUIsS0FBSyxPQUF0QixDQUFWO0FBQ0EsYUFBTyxLQUFLLFdBQUwsQ0FBaUI7QUFDdEI7QUFEc0IsT0FBakIsQ0FBUDtBQUdELEtBTEQsTUFLTyxJQUFJLEtBQUssS0FBTCxLQUFlLFNBQW5CLEVBQThCO0FBQ25DLGNBQVEsT0FBUixDQUFnQixLQUFLLEdBQXJCLEVBQTBCLFVBQVUsR0FBVixFQUFlLEVBQUMsQ0FBRCxFQUFJLFFBQUosRUFBYyxNQUFkLEVBQWYsRUFBc0M7QUFDOUQsWUFBSSxHQUFKLEVBQVM7QUFDUCxpQkFBTyxLQUFLLFdBQUwsQ0FBaUI7QUFDdEIsZ0JBRHNCO0FBRXRCO0FBRnNCLFdBQWpCLENBQVA7QUFJRDtBQUNELGFBQUssV0FBTCxDQUFpQjtBQUNmO0FBRGUsU0FBakI7QUFHRCxPQVZEO0FBV0QsS0FaTSxNQVlBLElBQUksS0FBSyxLQUFMLEtBQWUsV0FBbkIsRUFBZ0M7QUFDckMsY0FBUSxTQUFSLENBQWtCLEtBQUssR0FBdkIsRUFBNEIsS0FBSyxPQUFqQyxFQUEwQyxLQUFLLGdCQUEvQyxFQUFpRSxVQUFVLEdBQVYsRUFBZSxPQUFmLEVBQXdCO0FBQ3ZGLFlBQUksR0FBSixFQUFTO0FBQ1AsaUJBQU8sS0FBSyxXQUFMLENBQWlCO0FBQ3RCLGdCQURzQjtBQUV0QjtBQUZzQixXQUFqQixDQUFQO0FBSUQ7QUFDRCxhQUFLLFdBQUwsQ0FBaUI7QUFDZixjQURlO0FBRWYsZ0JBQU07QUFDSjtBQURJO0FBRlMsU0FBakI7QUFNRCxPQWJELEVBYUcsSUFiSDtBQWNELEtBZk0sTUFlQTtBQUNMLFdBQUssV0FBTCxDQUFpQjtBQUNmLGFBQUssSUFBSSxLQUFKLENBQVUsb0JBQW9CLEtBQUssS0FBbkM7QUFEVSxPQUFqQjtBQUdEO0FBQ0YsR0F4Q0Q7QUF5Q0QsQ0FsREQ7Ozs7QUNBQSxJQUFJLE1BQU0sVUFBVSxHQUFWLEVBQWUsY0FBZixFQUErQixPQUEvQixFQUF3QyxTQUF4QyxFQUFtRCxRQUFuRCxFQUE2RDtBQUNyRSxNQUFJLGNBQWMsU0FBbEIsRUFBNkI7QUFDM0IsU0FBSyxHQUFMLEdBQVcsS0FBSyxXQUFMLENBQWlCLFVBQVUsR0FBM0IsRUFBZ0MsR0FBaEMsQ0FBWDtBQUNELEdBRkQsTUFFTztBQUNMLFNBQUssR0FBTCxHQUFXLEdBQVg7QUFDRDtBQUNELE9BQUssY0FBTCxHQUFzQixjQUF0QjtBQUNBLE9BQUssT0FBTCxHQUFlLE9BQWY7QUFDQSxPQUFLLFNBQUwsR0FBaUIsRUFBakI7QUFDQSxPQUFLLFFBQUwsR0FBZ0IsWUFBWSxFQUE1QjtBQUNELENBVkQ7O0FBWUEsSUFBSSxTQUFKLEdBQWdCOztBQUVkLGVBQWEsVUFBVSxTQUFWLEVBQXFCLFFBQXJCLEVBQStCO0FBQzFDLFFBQUksYUFBYSxJQUFJLE1BQUosQ0FBVywrSUFBWCxFQUE0SixHQUE1SixDQUFqQjs7QUFFQSxRQUFJLGdCQUFnQixVQUFVLEtBQVYsQ0FBZ0IsVUFBaEIsQ0FBcEI7QUFDQSxRQUFJLGVBQWUsU0FBUyxLQUFULENBQWUsVUFBZixDQUFuQjs7QUFFRjtBQUNFLFFBQUksYUFBYSxDQUFiLE1BQW9CLFNBQXBCLElBQWlDLGFBQWEsQ0FBYixNQUFvQixTQUFyRCxJQUFrRSxhQUFhLENBQWIsTUFBb0IsU0FBdEYsSUFBbUcsYUFBYSxDQUFiLE1BQW9CLFNBQTNILEVBQXNJO0FBQ3BJLFVBQUksTUFBTSxjQUFjLENBQWQsSUFBbUIsY0FBYyxDQUFkLENBQW5CLEdBQXNDLGNBQWMsQ0FBZCxDQUF0QyxHQUF5RCxjQUFjLENBQWQsQ0FBekQsR0FBNEUsYUFBYSxDQUFiLENBQXRGO0FBQ0EsYUFBTyxHQUFQO0FBQ0Q7O0FBRUQsUUFBSSxhQUFhLENBQWIsTUFBb0IsU0FBeEIsRUFBbUM7QUFDakMsbUJBQWEsQ0FBYixJQUFrQixjQUFjLENBQWQsQ0FBbEI7QUFDRDtBQUNELFFBQUksYUFBYSxDQUFiLE1BQW9CLFNBQXhCLEVBQW1DO0FBQ2pDLG1CQUFhLENBQWIsSUFBa0IsY0FBYyxDQUFkLENBQWxCO0FBQ0Q7QUFDRCxRQUFJLGFBQWEsQ0FBYixNQUFvQixTQUF4QixFQUFtQztBQUNqQyxVQUFJLGNBQWMsQ0FBZCxNQUFxQixTQUF6QixFQUFvQztBQUNsQyxxQkFBYSxDQUFiLElBQWtCLEdBQWxCO0FBQ0QsT0FGRCxNQUVPO0FBQ0wscUJBQWEsQ0FBYixJQUFrQixjQUFjLENBQWQsQ0FBbEI7QUFDRDtBQUNGOztBQUVELFFBQUksYUFBYSxDQUFiLE1BQW9CLFNBQXhCLEVBQW1DO0FBQ2pDLG1CQUFhLENBQWIsSUFBa0IsRUFBbEI7QUFDRDtBQUNELFFBQUksYUFBYSxDQUFiLE1BQW9CLFNBQXhCLEVBQW1DO0FBQ2pDLG1CQUFhLENBQWIsSUFBa0IsRUFBbEI7QUFDRDs7QUFFRCxXQUFPLGFBQWEsQ0FBYixJQUFrQixhQUFhLENBQWIsQ0FBbEIsR0FBb0MsYUFBYSxDQUFiLENBQXBDLEdBQXNELGFBQWEsQ0FBYixDQUF0RCxHQUF3RSxhQUFhLENBQWIsQ0FBL0U7QUFDRCxHQXBDYTs7QUFzQ2QsV0FBUyxVQUFVLE9BQVYsRUFBbUIsUUFBbkIsRUFBNkIsS0FBN0IsRUFBb0M7QUFDM0MsUUFBSSxVQUFVLEtBQUssT0FBTCxDQUFhLE9BQTNCO0FBQ0EsUUFBSSxNQUFNLElBQVY7QUFDQSxZQUFRLEdBQVIseURBQVksbUJBQVo7QUFDQSxZQUFRLFNBQVIsQ0FBa0IsS0FBSyxHQUF2QixFQUE0QixPQUE1QixFQUFxQyxLQUFLLGNBQTFDLEVBQTBELFVBQVUsR0FBVixFQUFlLE9BQWYsRUFBd0I7QUFDaEYsVUFBSSxHQUFKLEVBQVM7QUFDUCxlQUFPLFNBQVMsR0FBVCxDQUFQO0FBQ0Q7QUFDRCxjQUFRLEdBQVIseURBQVksbUJBQVo7QUFDSDtBQUNHLFdBQUssSUFBSSxDQUFULElBQWMsT0FBZCxFQUF1QjtBQUNyQixZQUFJLFNBQVMsUUFBUSxDQUFSLENBQWI7QUFDQSxhQUFLLElBQUksR0FBVCxJQUFnQixLQUFLLFFBQXJCLEVBQStCO0FBQzdCLGNBQUksRUFBRSxPQUFPLE1BQVQsQ0FBSixFQUFzQjtBQUNwQixtQkFBTyxHQUFQLElBQWMsS0FBSyxRQUFMLENBQWMsR0FBZCxDQUFkO0FBQ0Q7QUFDRjtBQUNELGFBQUssU0FBTCxDQUFlLElBQWYsQ0FBb0IsTUFBcEI7QUFDRDtBQUNELGVBQVMsSUFBVCxFQUFlLEdBQWY7QUFDRCxLQWhCeUQsQ0FnQnhELElBaEJ3RCxDQWdCbkQsSUFoQm1ELENBQTFELEVBZ0JjLElBaEJkO0FBaUJELEdBM0RhO0FBNERkLGNBQVksWUFBWTtBQUN0QixXQUFPLEtBQUssU0FBWjtBQUNEO0FBOURhLENBQWhCOztBQWlFQSxPQUFPLE9BQVAsR0FBaUIsR0FBakI7Ozs7QUM3RUEsSUFBSSxRQUFRLFlBQVk7QUFDdEIsT0FBSyxJQUFMLEdBQVksRUFBWjtBQUNBLE9BQUssV0FBTCxHQUFtQixFQUFuQjtBQUNELENBSEQ7O0FBS0EsTUFBTSxTQUFOLEdBQWtCOztBQUVqQjs7Ozs7QUFLQyxPQUFLLFVBQVUsR0FBVixFQUFlO0FBQ2xCLFFBQUksS0FBSyxVQUFMLENBQWdCLEdBQWhCLENBQUosRUFBMEI7QUFDeEIsV0FBSyxJQUFMLENBQVUsSUFBVixDQUFlLEdBQWY7QUFDQSxXQUFLLGNBQUwsQ0FBb0IsSUFBSSxHQUF4QjtBQUNBLGFBQU8sSUFBUDtBQUNEO0FBQ0QsV0FBTyxLQUFQO0FBQ0QsR0FkZTs7QUFnQmhCLGNBQVksVUFBVSxHQUFWLEVBQWU7QUFDekIsUUFBSSxLQUFLLFNBQUwsQ0FBZSxJQUFJLEdBQW5CLENBQUosRUFBNkI7QUFDM0IsYUFBTyxLQUFQO0FBQ0Q7O0FBRUg7QUFDRSxRQUFJLElBQUksR0FBSixDQUFRLEtBQVIsQ0FBYyxpQ0FBZCxNQUFxRCxJQUF6RCxFQUErRDtBQUM3RCxhQUFPLEtBQVA7QUFDRDtBQUNELFdBQU8sSUFBUDtBQUNELEdBMUJlOztBQTRCaEIsZ0JBQWMsWUFBWTtBQUN4QixXQUFPLEtBQUssSUFBTCxDQUFVLE1BQWpCO0FBQ0QsR0E5QmU7O0FBZ0NoQixhQUFXLFVBQVUsR0FBVixFQUFlO0FBQ3hCLFdBQVEsS0FBSyxXQUFMLENBQWlCLEdBQWpCLE1BQTBCLFNBQWxDO0FBQ0QsR0FsQ2U7O0FBb0NoQixrQkFBZ0IsVUFBVSxHQUFWLEVBQWU7QUFDN0IsU0FBSyxXQUFMLENBQWlCLEdBQWpCLElBQXdCLElBQXhCO0FBQ0QsR0F0Q2U7O0FBd0NoQixjQUFZLFlBQVk7QUFDeEI7QUFDRSxRQUFJLEtBQUssWUFBTCxLQUFzQixDQUExQixFQUE2QjtBQUMzQixhQUFPLEtBQUssSUFBTCxDQUFVLEdBQVYsRUFBUDtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU8sS0FBUDtBQUNEO0FBQ0Y7QUEvQ2UsQ0FBbEI7O0FBa0RBLE9BQU8sT0FBUCxHQUFpQixLQUFqQjs7O0FDeERBLElBQUksdUJBQXVCLFFBQVEsdUNBQVIsQ0FBM0I7QUFDQSxJQUFJLE1BQU0sUUFBUSxPQUFSLENBQVY7O0FBRUEsSUFBSSxVQUFVLFVBQVUsT0FBVixFQUFtQixXQUFuQixFQUFnQztBQUM1QyxPQUFLLEtBQUwsR0FBYSxRQUFRLEtBQXJCO0FBQ0EsT0FBSyxPQUFMLEdBQWUsUUFBUSxPQUF2QjtBQUNBLE9BQUssS0FBTCxHQUFhLFFBQVEsS0FBckI7QUFDQSxPQUFLLE9BQUwsR0FBZSxRQUFRLE9BQXZCO0FBQ0EsT0FBSyxZQUFMLEdBQW9CLElBQXBCLENBTDRDLENBS25CO0FBQ3pCLE9BQUssZUFBTCxHQUF1QixTQUFTLFFBQVEsZUFBakIsQ0FBdkI7QUFDQSxPQUFLLGFBQUwsR0FBcUIsU0FBUyxRQUFRLGFBQWpCLENBQXJCOztBQUVBO0FBQ0EsT0FBSyxDQUFMLEdBQVMsWUFBWSxDQUFyQjtBQUNBLE9BQUssUUFBTCxHQUFnQixZQUFZLFFBQTVCO0FBQ0EsT0FBSyxNQUFMLEdBQWMsWUFBWSxNQUExQjtBQUNBLE1BQUksQ0FBQyxZQUFZLENBQWpCLEVBQW9CLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0JBQVYsQ0FBTjtBQUNwQixNQUFJLENBQUMsWUFBWSxNQUFqQixFQUF5QixNQUFNLElBQUksS0FBSixDQUFVLGdCQUFWLENBQU47QUFDekIsTUFBSSxDQUFDLFlBQVksUUFBakIsRUFBMkIsTUFBTSxJQUFJLEtBQUosQ0FBVSxrQkFBVixDQUFOO0FBQzVCLENBaEJEOztBQWtCQSxRQUFRLFNBQVIsR0FBb0I7O0FBRW5COzs7QUFHQyxtQkFBaUIsSUFMQztBQU1sQiw0QkFBMEIsQ0FOUjs7QUFRbEIsaUJBQWUsWUFBWTtBQUN6QixRQUFJLE9BQU8sS0FBSyxPQUFMLENBQWEsWUFBYixFQUFYOztBQUVBLFNBQUssT0FBTCxDQUFhLFVBQVUsR0FBVixFQUFlO0FBQzFCLFVBQUksV0FBVyxJQUFJLEdBQUosQ0FBUSxHQUFSLEVBQWEsT0FBYixFQUFzQixJQUF0QixDQUFmO0FBQ0EsV0FBSyxLQUFMLENBQVcsR0FBWCxDQUFlLFFBQWY7QUFDRCxLQUhZLENBR1gsSUFIVyxDQUdOLElBSE0sQ0FBYjtBQUlELEdBZmlCOztBQWlCbEIsT0FBSyxVQUFVLGlCQUFWLEVBQTZCO0FBQ2hDLFFBQUksVUFBVSxJQUFkOztBQUVGO0FBQ0UsU0FBSyxpQkFBTCxHQUF5QixpQkFBekI7O0FBRUEsU0FBSyxhQUFMOztBQUVBLFNBQUssS0FBTCxDQUFXLGlCQUFYLENBQTZCLEtBQUssT0FBTCxDQUFhLEdBQTFDLEVBQStDLFVBQVUsWUFBVixFQUF3QjtBQUNyRSxjQUFRLFlBQVIsR0FBdUIsWUFBdkI7QUFDQSxjQUFRLElBQVI7QUFDRCxLQUhEO0FBSUQsR0E3QmlCOztBQStCbEIsMEJBQXdCLFVBQVUsTUFBVixFQUFrQjtBQUN4QyxRQUFJLE9BQU8sT0FBUCxLQUFtQixTQUF2QixFQUFrQztBQUNoQyxhQUFPLEtBQVA7QUFDRDs7QUFFRCxRQUFJLGFBQWEsT0FBTyxpQkFBeEI7QUFDQSxRQUFJLGlCQUFpQixLQUFLLE9BQUwsQ0FBYSx1QkFBYixDQUFxQyxVQUFyQyxDQUFyQjtBQUNBLFFBQUksZUFBZSxNQUFmLEtBQTBCLENBQTlCLEVBQWlDO0FBQy9CLGFBQU8sS0FBUDtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU8sSUFBUDtBQUNEO0FBQ0YsR0EzQ2lCOztBQTZDbEIsbUJBQWlCLFVBQVUsR0FBVixFQUFlO0FBQzlCLFFBQUksUUFBUSxJQUFJLEtBQUosQ0FBVSxHQUFWLENBQVo7QUFDQSxRQUFJLFdBQVcsTUFBTSxNQUFNLE1BQU4sR0FBZSxDQUFyQixDQUFmO0FBQ0EsZUFBVyxTQUFTLE9BQVQsQ0FBaUIsS0FBakIsRUFBd0IsRUFBeEIsQ0FBWDtBQUNBLFFBQUksU0FBUyxNQUFULEdBQWtCLEdBQXRCLEVBQTJCO0FBQ3pCLGlCQUFXLFNBQVMsTUFBVCxDQUFnQixDQUFoQixFQUFtQixHQUFuQixDQUFYO0FBQ0Q7QUFDRCxXQUFPLFFBQVA7QUFDRCxHQXJEaUI7O0FBdURuQjs7OztBQUlDLGNBQVksVUFBVSxNQUFWLEVBQWtCO0FBQzVCLFFBQUksVUFBVSxLQUFLLE9BQW5CO0FBQ0EsV0FBTyxRQUFRLFVBQVIsQ0FBbUIsTUFBbkIsRUFBMkIsZUFBZSxJQUFmLENBQW9CLElBQXBCLENBQTNCLENBQVA7O0FBRUEsYUFBUyxjQUFULENBQXlCLFVBQXpCLEVBQXFDO0FBQUUsYUFBTyxLQUFLLE9BQUwsQ0FBYSxHQUFiLEdBQW1CLEdBQW5CLEdBQXlCLFVBQXpCLEdBQXNDLEdBQXRDLEdBQTRDLEtBQUssZUFBTCxDQUFxQixPQUFPLGFBQWEsTUFBcEIsQ0FBckIsQ0FBbkQ7QUFBc0c7QUFDOUksR0FoRWlCOztBQWtFbkI7QUFDQyxRQUFNLFlBQVk7QUFDaEIsUUFBSSxNQUFNLEtBQUssS0FBTCxDQUFXLFVBQVgsRUFBVjtBQUNBLFFBQUksUUFBUSxLQUFaLEVBQW1CO0FBQ2pCLGNBQVEsR0FBUix5RUFBWSwrQkFBWjtBQUNBLFdBQUssT0FBTCxDQUFhLEtBQWI7QUFDQSxXQUFLLGlCQUFMO0FBQ0E7QUFDRDtBQUNELFlBQVEsR0FBUiw0REFBWSxrQkFBWjtBQUNBLFFBQUksT0FBSixDQUFZLEtBQUssT0FBakIsRUFBMEIsVUFBVSxHQUFWLEVBQWUsR0FBZixFQUFvQjtBQUM1QyxVQUFJLEdBQUosRUFBUztBQUNQO0FBQ0EsZUFBTyxRQUFRLEtBQVIsNkRBQWMsY0FBZCxFQUE4QixHQUE5QixDQUFQO0FBQ0Q7QUFDRCxjQUFRLEdBQVIsK0RBQVksb0JBQVo7QUFDQSxVQUFJLGlCQUFpQixFQUFyQjtBQUNBLFVBQUksNEJBQTRCLEVBQWhDOztBQUVBLFVBQUksVUFBVSxJQUFJLFVBQUosRUFBZDtBQUNBLGNBQVEsT0FBUixDQUFnQixVQUFVLE1BQVYsRUFBa0I7QUFDcEM7O0FBRUksa0NBQTBCLElBQTFCLENBQStCLEtBQUssVUFBTCxDQUFnQixJQUFoQixDQUFxQixJQUFyQixFQUEyQixNQUEzQixDQUEvQjs7QUFFSjtBQUNJLFlBQUksS0FBSyxzQkFBTCxDQUE0QixNQUE1QixDQUFKLEVBQXlDO0FBQ3ZDLGNBQUksbUJBQW1CLE9BQU8saUJBQTlCO0FBQ0EsY0FBSSxZQUFZLE9BQU8sU0FBUCxDQUFoQjtBQUNBLGlCQUFPLE9BQU8sU0FBUCxDQUFQO0FBQ0EsaUJBQU8sT0FBTyxtQkFBUCxDQUFQO0FBQ0EsY0FBSSxTQUFTLElBQUksR0FBSixDQUFRLFNBQVIsRUFBbUIsZ0JBQW5CLEVBQXFDLElBQXJDLEVBQTJDLEdBQTNDLEVBQWdELE1BQWhELENBQWI7QUFDQSxjQUFJLEtBQUssS0FBTCxDQUFXLFVBQVgsQ0FBc0IsTUFBdEIsQ0FBSixFQUFtQztBQUNqQyxpQkFBSyxLQUFMLENBQVcsR0FBWCxDQUFlLE1BQWY7QUFDRCxXQUZELE1BRU87QUFDTDtBQUNBLG9CQUFRLEdBQVIsMERBQVksZUFBWjtBQUNBLG9CQUFRLEdBQVIsK0NBQVksTUFBWjtBQUNaO0FBQ1c7QUFDRixTQWRELE1BY087QUFDTCxjQUFJLE9BQU8sT0FBUCxLQUFtQixTQUF2QixFQUFrQztBQUNoQyxtQkFBTyxPQUFPLFNBQVAsQ0FBUDtBQUNBLG1CQUFPLE9BQU8sbUJBQVAsQ0FBUDtBQUNEO0FBQ0QseUJBQWUsSUFBZixDQUFvQixNQUFwQjtBQUNEO0FBQ0YsT0EzQmUsQ0EyQmQsSUEzQmMsQ0EyQlQsSUEzQlMsQ0FBaEI7O0FBNkJBLDJCQUFxQix5QkFBckIsRUFBZ0QsSUFBaEQsQ0FBcUQsWUFBWTtBQUMvRCxhQUFLLFlBQUwsQ0FBa0IsU0FBbEIsQ0FBNEIsY0FBNUIsRUFBNEMsWUFBWTtBQUN0RCxjQUFJLE1BQU8sSUFBSSxJQUFKLEVBQUQsQ0FBYSxPQUFiLEVBQVY7QUFDTDtBQUNLLGVBQUssd0JBQUwsR0FBZ0MsTUFBTSxLQUFLLGVBQTNDO0FBQ0EsY0FBSSxPQUFPLEtBQUssd0JBQWhCLEVBQTBDO0FBQ3hDLGlCQUFLLElBQUw7QUFDRCxXQUZELE1BRU87QUFDTCxnQkFBSSxRQUFRLEtBQUssd0JBQUwsR0FBZ0MsR0FBNUM7QUFDQSx1QkFBVyxZQUFZO0FBQ3JCLG1CQUFLLElBQUw7QUFDRCxhQUZVLENBRVQsSUFGUyxDQUVKLElBRkksQ0FBWCxFQUVjLEtBRmQ7QUFHRDtBQUNGLFNBWjJDLENBWTFDLElBWjBDLENBWXJDLElBWnFDLENBQTVDO0FBYUQsT0Fkb0QsQ0FjbkQsSUFkbUQsQ0FjOUMsSUFkOEMsQ0FBckQ7QUFlRCxLQXREeUIsQ0FzRHhCLElBdER3QixDQXNEbkIsSUF0RG1CLENBQTFCO0FBdUREO0FBbklpQixDQUFwQjs7QUFzSUEsT0FBTyxPQUFQLEdBQWlCLE9BQWpCOzs7QUMzSkEsSUFBSSxZQUFZLFFBQVEsYUFBUixDQUFoQjtBQUNBLElBQUksZUFBZSxRQUFRLGdCQUFSLENBQW5CO0FBQ0EsSUFBSSxTQUFTLFFBQVEsaUJBQVIsQ0FBYjs7QUFFQSxJQUFJLFdBQVcsVUFBVSxRQUFWLEVBQW9CLE9BQXBCLEVBQTZCO0FBQzFDLE1BQUksSUFBSSxRQUFRLENBQWhCO0FBQ0EsTUFBSSxXQUFXLFFBQVEsUUFBdkI7QUFDQSxNQUFJLFNBQVMsUUFBUSxNQUFyQjtBQUNBO0FBQ0EsU0FBTyxjQUFQLENBQXNCLElBQXRCLEVBQTRCLEdBQTVCLEVBQWlDO0FBQy9CLFdBQU8sQ0FEd0I7QUFFL0IsZ0JBQVk7QUFGbUIsR0FBakM7QUFJQSxTQUFPLGNBQVAsQ0FBc0IsSUFBdEIsRUFBNEIsUUFBNUIsRUFBc0M7QUFDcEMsV0FBTyxNQUQ2QjtBQUVwQyxnQkFBWTtBQUZ3QixHQUF0QztBQUlBLFNBQU8sY0FBUCxDQUFzQixJQUF0QixFQUE0QixVQUE1QixFQUF3QztBQUN0QyxXQUFPLFFBRCtCO0FBRXRDLGdCQUFZO0FBRjBCLEdBQXhDO0FBSUEsTUFBSSxDQUFDLEtBQUssQ0FBVixFQUFhLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0JBQVYsQ0FBTjtBQUNiLE1BQUksQ0FBQyxLQUFLLFFBQVYsRUFBb0IsTUFBTSxJQUFJLEtBQUosQ0FBVSxrQkFBVixDQUFOO0FBQ3BCLE1BQUcsQ0FBQyxLQUFLLE1BQVQsRUFBZ0IsTUFBTSxJQUFJLEtBQUosQ0FBVSxnQkFBVixDQUFOOztBQUVoQixPQUFLLFVBQUwsQ0FBZ0IsUUFBaEI7QUFDQSxPQUFLLFFBQUw7QUFDRCxDQXZCRDs7QUF5QkEsU0FBUyxTQUFULEdBQXFCOztBQUVwQjs7OztBQUlDLDZCQUEyQixZQUFZO0FBQ3JDLFdBQU8sS0FBSyx3QkFBTCxNQUFtQyxLQUFLLFFBQS9DO0FBQ0QsR0FSa0I7O0FBVXBCOzs7O0FBSUMsY0FBWSxVQUFVLElBQVYsRUFBZ0I7QUFDMUIsUUFBSSxjQUFjLENBQUMsUUFBRCxFQUFXLFVBQVgsRUFBdUIsSUFBdkIsRUFBNkIsTUFBN0IsRUFBcUMsVUFBckMsRUFBaUQsaUJBQWpELENBQWxCO0FBQ0EsWUFBUSxHQUFSLGdFQUFZLFdBQVosRUFBeUIsS0FBSyxJQUE5QjtBQUNBLGtCQUFjLFlBQVksTUFBWixDQUFtQixVQUFVLEtBQUssSUFBZixFQUFxQixXQUFyQixFQUFuQixDQUFkO0FBQ0EsUUFBSSxHQUFKO0FBQ0Y7QUFDRSxTQUFLLEdBQUwsSUFBWSxJQUFaLEVBQWtCO0FBQ2hCLFVBQUksWUFBWSxPQUFaLENBQW9CLEdBQXBCLE1BQTZCLENBQUMsQ0FBOUIsSUFBbUMsT0FBTyxLQUFLLEdBQUwsQ0FBUCxLQUFxQixVQUE1RCxFQUF3RTtBQUN0RSxhQUFLLEdBQUwsSUFBWSxLQUFLLEdBQUwsQ0FBWjtBQUNEO0FBQ0Y7O0FBRUg7QUFDRSxTQUFLLEdBQUwsSUFBWSxJQUFaLEVBQWtCO0FBQ2hCLFVBQUksWUFBWSxPQUFaLENBQW9CLEdBQXBCLE1BQTZCLENBQUMsQ0FBOUIsSUFBbUMsT0FBTyxLQUFLLEdBQUwsQ0FBUCxLQUFxQixVQUE1RCxFQUF3RTtBQUN0RSxlQUFPLEtBQUssR0FBTCxDQUFQO0FBQ0Q7QUFDRjtBQUNGLEdBaENrQjs7QUFrQ3BCOzs7O0FBSUMsc0JBQW9CLFlBQVk7QUFDOUIsV0FBTyxHQUFQO0FBQ0QsR0F4Q2tCOztBQTBDcEI7OztBQUdDLFlBQVUsWUFBWTtBQUNwQixRQUFJLFVBQVUsS0FBSyxJQUFmLE1BQXlCLFNBQTdCLEVBQXdDO0FBQ3RDLFlBQU0sSUFBSSxLQUFKLENBQVUsK0JBQStCLEtBQUssSUFBOUMsQ0FBTjtBQUNEOztBQUVIO0FBQ0UsU0FBSyxJQUFJLENBQVQsSUFBYyxVQUFVLEtBQUssSUFBZixDQUFkLEVBQW9DO0FBQ2xDLFdBQUssQ0FBTCxJQUFVLFVBQVUsS0FBSyxJQUFmLEVBQXFCLENBQXJCLENBQVY7QUFDRDtBQUNGLEdBdERrQjs7QUF3RHBCOzs7OztBQUtDLHFCQUFtQixVQUFVLFVBQVYsRUFBc0I7QUFDdkMsV0FBUSxLQUFLLGVBQUwsQ0FBcUIsT0FBckIsQ0FBNkIsVUFBN0IsTUFBNkMsQ0FBQyxDQUF0RDtBQUNELEdBL0RrQjs7QUFpRW5CLHdCQUFzQixVQUFVLFVBQVYsRUFBc0I7QUFDMUMsUUFBSSxRQUFRLEtBQUssZUFBTCxDQUFxQixPQUFyQixDQUE2QixVQUE3QixDQUFaO0FBQ0EsUUFBSSxVQUFVLENBQUMsQ0FBZixFQUFrQjtBQUNoQixXQUFLLGVBQUwsQ0FBcUIsTUFBckIsQ0FBNEIsS0FBNUIsRUFBbUMsQ0FBbkM7QUFDRDtBQUNGLEdBdEVrQjs7QUF3RW5CLHdCQUFzQixVQUFVLFVBQVYsRUFBc0IsYUFBdEIsRUFBcUM7QUFDekQsUUFBSSxLQUFLLGlCQUFMLENBQXVCLFVBQXZCLENBQUosRUFBd0M7QUFDdEMsVUFBSSxNQUFNLEtBQUssZUFBTCxDQUFxQixPQUFyQixDQUE2QixVQUE3QixDQUFWO0FBQ0EsV0FBSyxlQUFMLENBQXFCLE1BQXJCLENBQTRCLEdBQTVCLEVBQWlDLENBQWpDLEVBQW9DLGFBQXBDO0FBQ0Q7QUFDRixHQTdFa0I7O0FBK0VuQixtQkFBaUIsVUFBVSxhQUFWLEVBQXlCO0FBQ3hDLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDQSxRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0EsUUFBSSxXQUFXLGFBQWEsS0FBSyxRQUFsQixFQUE0QixhQUE1QixFQUEyQyxFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUEzQyxDQUFmO0FBQ0EsUUFBSSxLQUFLLFFBQVQsRUFBbUI7QUFDakIsYUFBTyxRQUFQO0FBQ0QsS0FGRCxNQUVPLElBQUksU0FBUyxNQUFULEdBQWtCLENBQXRCLEVBQXlCO0FBQzlCLGFBQU8sQ0FBQyxTQUFTLENBQVQsQ0FBRCxDQUFQO0FBQ0QsS0FGTSxNQUVBO0FBQ0wsYUFBTyxFQUFQO0FBQ0Q7QUFDRixHQTNGa0I7O0FBNkZuQixXQUFTLFVBQVUsYUFBVixFQUF5QjtBQUNoQyxRQUFJLElBQUksT0FBTyxRQUFQLEVBQVI7QUFDQSxRQUFJLFVBQVUsS0FBSyxLQUFMLElBQWMsQ0FBNUI7O0FBRUY7QUFDRSxRQUFJLFlBQVksQ0FBaEIsRUFBbUI7QUFDakIsVUFBSSxlQUFlLEtBQUssUUFBTCxDQUFjLGFBQWQsQ0FBbkI7QUFDQSxtQkFBYSxJQUFiLENBQWtCLFVBQVUsSUFBVixFQUFnQjtBQUNoQyxVQUFFLE9BQUYsQ0FBVSxJQUFWO0FBQ0QsT0FGRDtBQUdELEtBTEQsTUFLTztBQUNMLGlCQUFXLFlBQVk7QUFDckIsWUFBSSxlQUFlLEtBQUssUUFBTCxDQUFjLGFBQWQsQ0FBbkI7QUFDQSxxQkFBYSxJQUFiLENBQWtCLFVBQVUsSUFBVixFQUFnQjtBQUNoQyxZQUFFLE9BQUYsQ0FBVSxJQUFWO0FBQ0QsU0FGRDtBQUdELE9BTFUsQ0FLVCxJQUxTLENBS0osSUFMSSxDQUFYLEVBS2MsT0FMZDtBQU1EOztBQUVELFdBQU8sRUFBRSxPQUFGLEVBQVA7QUFDRDtBQWpIa0IsQ0FBckI7O0FBb0hBLE9BQU8sT0FBUCxHQUFpQixRQUFqQjs7O0FDakpBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7O0FBRUEsSUFBSSxrQkFBa0I7O0FBRXBCLDRCQUEwQixZQUFZO0FBQ3BDLFdBQU8sSUFBUDtBQUNELEdBSm1COztBQU1wQix5QkFBdUIsWUFBWTtBQUNqQyxXQUFPLElBQVA7QUFDRCxHQVJtQjs7QUFVcEIsOEJBQTRCLFlBQVk7QUFDdEMsV0FBTyxJQUFQO0FBQ0QsR0FabUI7O0FBY3BCLG9CQUFrQixZQUFZO0FBQzVCLFdBQU8sS0FBUDtBQUNELEdBaEJtQjtBQWlCcEIsc0JBQW9CLFlBQVk7QUFDOUIsV0FBTyxJQUFQO0FBQ0QsR0FuQm1CO0FBb0JwQixZQUFVLFVBQVUsYUFBVixFQUF5QjtBQUNqQyxRQUFJLE1BQU0sT0FBTyxRQUFQLEVBQVY7O0FBRUEsUUFBSSxXQUFXLEtBQUssZUFBTCxDQUFxQixhQUFyQixDQUFmO0FBQ0EsUUFBSSxPQUFKLENBQVksS0FBSyxDQUFMLENBQU8sU0FBUCxDQUFpQixRQUFqQixDQUFaOztBQUVBLFdBQU8sSUFBSSxPQUFKLEVBQVA7QUFDRCxHQTNCbUI7O0FBNkJwQixrQkFBZ0IsWUFBWTtBQUMxQixXQUFPLEVBQVA7QUFDRCxHQS9CbUI7O0FBaUNwQixlQUFhLFlBQVk7QUFDdkIsV0FBTyxDQUFDLFVBQUQsRUFBYSxPQUFiLENBQVA7QUFDRDtBQW5DbUIsQ0FBdEI7O0FBc0NBLE9BQU8sT0FBUCxHQUFpQixlQUFqQjs7O0FDeENBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQSxJQUFJLDJCQUEyQjtBQUM3Qiw0QkFBMEIsWUFBWTtBQUNwQyxXQUFPLElBQVA7QUFDRCxHQUg0Qjs7QUFLN0IseUJBQXVCLFlBQVk7QUFDakMsV0FBTyxLQUFQO0FBQ0QsR0FQNEI7O0FBUzdCLDhCQUE0QixZQUFZO0FBQ3RDLFdBQU8sS0FBUDtBQUNELEdBWDRCOztBQWE3QixvQkFBa0IsWUFBWTtBQUM1QixXQUFPLEtBQVA7QUFDRCxHQWY0QjtBQWdCN0Isc0JBQW9CLFlBQVk7QUFDOUIsV0FBTyxLQUFQO0FBQ0QsR0FsQjRCO0FBbUI3QixZQUFVLFVBQVUsYUFBVixFQUF5QjtBQUNqQyxRQUFJLE1BQU0sT0FBTyxRQUFQLEVBQVY7QUFDQSxRQUFJLE9BQU8sSUFBWDtBQUNBLFFBQUksV0FBVyxLQUFLLGVBQUwsQ0FBcUIsYUFBckIsQ0FBZjs7QUFFQSxRQUFJLFNBQVMsRUFBYjtBQUNBLFNBQUssQ0FBTCxDQUFPLFFBQVAsRUFBaUIsSUFBakIsQ0FBc0IsVUFBVSxDQUFWLEVBQWEsT0FBYixFQUFzQjtBQUMxQyxVQUFJLE9BQU8sRUFBWDs7QUFFQSxXQUFLLEtBQUssRUFBVixJQUFnQixLQUFLLENBQUwsQ0FBTyxPQUFQLEVBQWdCLElBQWhCLENBQXFCLEtBQUssZ0JBQTFCLENBQWhCO0FBQ0EsYUFBTyxJQUFQLENBQVksSUFBWjtBQUNELEtBTHFCLENBS3BCLElBTG9CLENBS2YsSUFMZSxDQUF0Qjs7QUFPQSxRQUFJLEtBQUssUUFBTCxLQUFrQixLQUFsQixJQUEyQixTQUFTLE1BQVQsS0FBb0IsQ0FBbkQsRUFBc0Q7QUFDcEQsVUFBSSxPQUFPLEVBQVg7QUFDQSxXQUFLLEtBQUssRUFBTCxHQUFVLE1BQWYsSUFBeUIsSUFBekI7QUFDQSxhQUFPLElBQVAsQ0FBWSxJQUFaO0FBQ0Q7QUFDRCxRQUFJLE9BQUosQ0FBWSxNQUFaOztBQUVBLFdBQU8sSUFBSSxPQUFKLEVBQVA7QUFDRCxHQXhDNEI7O0FBMEM3QixrQkFBZ0IsWUFBWTtBQUMxQixXQUFPLENBQUMsS0FBSyxFQUFOLENBQVA7QUFDRCxHQTVDNEI7O0FBOEM3QixlQUFhLFlBQVk7QUFDdkIsV0FBTyxDQUFDLFVBQUQsRUFBYSxrQkFBYixFQUFpQyxPQUFqQyxDQUFQO0FBQ0Q7QUFoRDRCLENBQS9COztBQW1EQSxPQUFPLE9BQVAsR0FBaUIsd0JBQWpCOzs7QUNwREEsSUFBSSxTQUFTLFFBQVEsaUJBQVIsQ0FBYjtBQUNBLElBQUksb0JBQW9CLFFBQVEsd0JBQVIsQ0FBeEI7QUFDQSxJQUFJLGVBQWUsUUFBUSxtQkFBUixDQUFuQjtBQUNBLElBQUksY0FBYyxRQUFRLGNBQVIsRUFBd0IsV0FBMUM7QUFDQSxJQUFJLHVCQUF1Qjs7QUFFekIsNEJBQTBCLFlBQVk7QUFDcEMsV0FBTyxJQUFQO0FBQ0QsR0FKd0I7O0FBTXpCLHlCQUF1QixZQUFZO0FBQ2pDLFdBQU8sSUFBUDtBQUNELEdBUndCOztBQVV6Qiw4QkFBNEIsWUFBWTtBQUN0QyxXQUFPLElBQVA7QUFDRCxHQVp3Qjs7QUFjekIsb0JBQWtCLFlBQVk7QUFDNUIsV0FBTyxLQUFQO0FBQ0QsR0FoQndCO0FBaUJ6QixzQkFBb0IsWUFBWTtBQUM5QixXQUFPLElBQVA7QUFDRCxHQW5Cd0I7O0FBcUJ6QixvQkFBa0IsVUFBVSxhQUFWLEVBQXlCO0FBQ3pDLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDQSxRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0EsUUFBSSxnQkFBZ0IsYUFBYSxLQUFLLG9CQUFsQixFQUF3QyxhQUF4QyxFQUF1RCxFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUF2RCxDQUFwQjtBQUNBLFdBQU8sYUFBUDtBQUNELEdBM0J3Qjs7QUE2QjFCOzs7O0FBSUMsbUJBQWlCLFVBQVUsT0FBVixFQUFtQjtBQUNsQyxXQUFPLEtBQUssQ0FBTCxDQUFPLE9BQVAsRUFBZ0IsT0FBaEIsQ0FBd0IsTUFBeEIsRUFBZ0MsTUFBaEMsS0FBMkMsQ0FBbEQ7QUFDRCxHQW5Dd0I7O0FBcUN6QixzQkFBb0IsVUFBVSxZQUFWLEVBQXdCO0FBQzFDLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsUUFBSSxLQUFLLElBQUksV0FBSixDQUFnQjtBQUN2QixnQ0FBMEIsS0FESDtBQUV2QixjQUFRLEtBQUssQ0FBTCxDQUFPLE1BQVAsRUFBZSxDQUFmLENBRmU7QUFHdkIsNkJBQXVCO0FBSEEsS0FBaEIsQ0FBVDtBQUtBLFFBQUksY0FBYyxHQUFHLGNBQUgsQ0FBa0IsQ0FBQyxZQUFELENBQWxCLENBQWxCOztBQUVBLGFBQVMsZ0JBQVQsQ0FBMEIsV0FBMUIsRUFBdUMsQ0FBdkMsRUFBMEMsS0FBMUM7QUFDSjs7Ozs7Ozs7O0FBU0csR0F4RHdCOztBQTBEekIsaUNBQStCLFlBQVk7QUFDekMsUUFBSSxLQUFLLDBCQUFMLEtBQW9DLFNBQXhDLEVBQW1EO0FBQ2pELGFBQU8sWUFBUDtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU8sS0FBSywwQkFBWjtBQUNEO0FBQ0YsR0FoRXdCOztBQWtFekIsWUFBVSxVQUFVLGFBQVYsRUFBeUI7QUFDakMsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDQSxRQUFJLFFBQVEsU0FBUyxLQUFLLEtBQWQsS0FBd0IsQ0FBcEM7QUFDQSxRQUFJLG1CQUFtQixPQUFPLFFBQVAsRUFBdkI7QUFDQSxRQUFJLGdCQUFnQixJQUFJLGlCQUFKLENBQXNCLFlBQXRCLEVBQW9DLEVBQUMsQ0FBRCxFQUFJLFFBQUosRUFBYyxNQUFkLEVBQXBDLENBQXBCO0FBQ0EsUUFBSSxnQkFBZ0IsS0FBSyxnQkFBTCxDQUFzQixhQUF0QixDQUFwQjtBQUNBLFFBQUksdUJBQXVCLElBQUksaUJBQUosQ0FBc0IsS0FBSyw2QkFBTCxFQUF0QixFQUE0RCxFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUE1RCxDQUEzQjs7QUFFRjtBQUNFLFFBQUksV0FBVyxLQUFLLGVBQUwsQ0FBcUIsYUFBckIsQ0FBZjtBQUNBLGFBQVMsT0FBVCxDQUFpQixjQUFjLElBQWQsQ0FBbUIsSUFBbkIsQ0FBd0IsYUFBeEIsQ0FBakI7O0FBRUY7QUFDRSxRQUFJLEtBQUssc0JBQVQsRUFBaUM7QUFDL0Isc0JBQWdCLElBQUksaUJBQUosQ0FBc0IsWUFBdEIsRUFBb0MsRUFBQyxDQUFELEVBQUksUUFBSixFQUFjLE1BQWQsRUFBcEMsQ0FBaEI7QUFDRDs7QUFFSDtBQUNFLFFBQUksY0FBYyxNQUFkLEtBQXlCLENBQTdCLEVBQWdDO0FBQzlCLHVCQUFpQixPQUFqQixDQUF5QixhQUF6QjtBQUNBLGFBQU8saUJBQWlCLE9BQWpCLEVBQVA7QUFDRDs7QUFFSDtBQUNFLFFBQUksc0JBQXNCLGNBQWMsQ0FBZCxDQUExQjtBQUNBLFNBQUssa0JBQUwsQ0FBd0IsbUJBQXhCO0FBQ0EsUUFBSSx1QkFBd0IsSUFBSSxJQUFKLEVBQUQsQ0FBYSxPQUFiLEtBQXlCLEtBQXBEOztBQUVGO0FBQ0UsUUFBSSxXQUFXLFlBQVksWUFBWTtBQUN4QztBQUNHLFVBQUksbUJBQW1CLEtBQUssZ0JBQUwsQ0FBc0IsYUFBdEIsQ0FBdkI7QUFDQSxzQkFBZ0IsRUFBaEI7QUFDQSx1QkFBaUIsT0FBakIsQ0FBeUIsVUFBVSxPQUFWLEVBQW1CO0FBQzFDLFlBQUksQ0FBQyxxQkFBcUIsT0FBckIsQ0FBNkIsT0FBN0IsQ0FBTCxFQUE0QztBQUMxQyx3QkFBYyxJQUFkLENBQW1CLE9BQW5CO0FBQ0Q7QUFDRixPQUpEOztBQU1BLFVBQUksTUFBTyxJQUFJLElBQUosRUFBRCxDQUFhLE9BQWIsRUFBVjtBQUNIO0FBQ0csVUFBSSxNQUFNLG9CQUFWLEVBQWdDO0FBQ2xDO0FBQ0k7QUFDRDs7QUFFSjtBQUNHLFVBQUksV0FBVyxLQUFLLGVBQUwsQ0FBcUIsYUFBckIsQ0FBZjtBQUNBLFVBQUksaUJBQWlCLEtBQXJCO0FBQ0EsZUFBUyxPQUFULENBQWlCLFVBQVUsT0FBVixFQUFtQjtBQUNsQyxZQUFJLFFBQVEsY0FBYyxJQUFkLENBQW1CLE9BQW5CLENBQVo7QUFDQSxZQUFJLEtBQUosRUFBVztBQUNULDJCQUFpQixJQUFqQjtBQUNEO0FBQ0YsT0FMRDtBQU1IOztBQUVBO0FBQ0csVUFBSSxDQUFDLGNBQUwsRUFBcUI7QUFDbkIsNkJBQXFCLElBQXJCLENBQTBCLG1CQUExQjtBQUNEOztBQUVKO0FBQ0E7QUFDQTtBQUNHLFVBQUksY0FBYyxNQUFkLEtBQXlCLENBQTdCLEVBQWdDO0FBQzlCLHNCQUFjLFFBQWQ7QUFDQSx5QkFBaUIsT0FBakIsQ0FBeUIsYUFBekI7QUFDRCxPQUhELE1BR087QUFDVDtBQUNJLDhCQUFzQixjQUFjLENBQWQsQ0FBdEI7QUFDSjtBQUNJLFlBQUksS0FBSyxTQUFMLEtBQW1CLFdBQXZCLEVBQW9DO0FBQ2xDLCtCQUFxQixJQUFyQixDQUEwQixtQkFBMUI7QUFDRDtBQUNELGFBQUssa0JBQUwsQ0FBd0IsbUJBQXhCO0FBQ0EsK0JBQXVCLE1BQU0sS0FBN0I7QUFDRDtBQUNGLEtBakQwQixDQWlEekIsSUFqRHlCLENBaURwQixJQWpEb0IsQ0FBWixFQWlERCxFQWpEQyxDQUFmOztBQW1EQSxXQUFPLGlCQUFpQixPQUFqQixFQUFQO0FBQ0QsR0FySndCOztBQXVKekIsa0JBQWdCLFlBQVk7QUFDMUIsV0FBTyxFQUFQO0FBQ0QsR0F6SndCOztBQTJKekIsZUFBYSxZQUFZO0FBQ3ZCLFdBQU8sQ0FBQyxVQUFELEVBQWEsT0FBYixFQUFzQixzQkFBdEIsRUFBOEMsV0FBOUMsRUFBMkQsd0JBQTNELEVBQXFGLDRCQUFyRixDQUFQO0FBQ0Q7QUE3SndCLENBQTNCOztBQWdLQSxPQUFPLE9BQVAsR0FBaUIsb0JBQWpCOzs7QUNwS0EsSUFBSSxTQUFTLFFBQVEsaUJBQVIsQ0FBYjtBQUNBLElBQUksd0JBQXdCOztBQUUxQiw0QkFBMEIsWUFBWTtBQUNwQyxXQUFPLElBQVA7QUFDRCxHQUp5Qjs7QUFNMUIseUJBQXVCLFlBQVk7QUFDakMsV0FBTyxJQUFQO0FBQ0QsR0FSeUI7O0FBVTFCLDhCQUE0QixZQUFZO0FBQ3RDLFdBQU8sSUFBUDtBQUNELEdBWnlCOztBQWMxQixvQkFBa0IsWUFBWTtBQUM1QixXQUFPLEtBQVA7QUFDRCxHQWhCeUI7QUFpQjFCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sSUFBUDtBQUNELEdBbkJ5QjtBQW9CMUIsa0JBQWdCLFlBQVk7QUFDMUIsUUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxXQUFPLFFBQVAsQ0FBZ0IsQ0FBaEIsRUFBbUIsU0FBUyxJQUFULENBQWMsWUFBakM7QUFDRCxHQXZCeUI7QUF3QjFCLFlBQVUsVUFBVSxhQUFWLEVBQXlCO0FBQ2pDLFFBQUksUUFBUSxTQUFTLEtBQUssS0FBZCxLQUF3QixDQUFwQztBQUNBLFFBQUksbUJBQW1CLE9BQU8sUUFBUCxFQUF2QjtBQUNBLFFBQUksZ0JBQWdCLEVBQXBCOztBQUVGO0FBQ0UsU0FBSyxjQUFMO0FBQ0EsUUFBSSx1QkFBd0IsSUFBSSxJQUFKLEVBQUQsQ0FBYSxPQUFiLEtBQXlCLEtBQXBEOztBQUVGO0FBQ0UsUUFBSSxXQUFXLFlBQVksWUFBWTtBQUNyQyxVQUFJLE1BQU8sSUFBSSxJQUFKLEVBQUQsQ0FBYSxPQUFiLEVBQVY7QUFDSDtBQUNHLFVBQUksTUFBTSxvQkFBVixFQUFnQztBQUM5QjtBQUNEOztBQUVELFVBQUksV0FBVyxLQUFLLGVBQUwsQ0FBcUIsYUFBckIsQ0FBZjtBQUNIO0FBQ0csVUFBSSxTQUFTLE1BQVQsS0FBb0IsY0FBYyxNQUF0QyxFQUE4QztBQUM1QyxzQkFBYyxRQUFkO0FBQ0EseUJBQWlCLE9BQWpCLENBQXlCLEtBQUssQ0FBTCxDQUFPLFNBQVAsQ0FBaUIsUUFBakIsQ0FBekI7QUFDRCxPQUhELE1BR087QUFDVDtBQUNJLHdCQUFnQixRQUFoQjtBQUNBLGFBQUssY0FBTDtBQUNBLCtCQUF1QixNQUFNLEtBQTdCO0FBQ0Q7QUFDRixLQWxCMEIsQ0FrQnpCLElBbEJ5QixDQWtCcEIsSUFsQm9CLENBQVosRUFrQkQsRUFsQkMsQ0FBZjs7QUFvQkEsV0FBTyxpQkFBaUIsT0FBakIsRUFBUDtBQUNELEdBdkR5Qjs7QUF5RDFCLGtCQUFnQixZQUFZO0FBQzFCLFdBQU8sRUFBUDtBQUNELEdBM0R5Qjs7QUE2RDFCLGVBQWEsWUFBWTtBQUN2QixXQUFPLENBQUMsVUFBRCxFQUFhLE9BQWIsQ0FBUDtBQUNEO0FBL0R5QixDQUE1Qjs7QUFrRUEsT0FBTyxPQUFQLEdBQWlCLHFCQUFqQjs7O0FDbkVBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQSxJQUFJLGdCQUFnQjs7QUFFbEIsNEJBQTBCLFlBQVk7QUFDcEMsV0FBTyxLQUFQO0FBQ0QsR0FKaUI7O0FBTWxCLHlCQUF1QixZQUFZO0FBQ2pDLFdBQU8sS0FBUDtBQUNELEdBUmlCOztBQVVsQiw4QkFBNEIsWUFBWTtBQUN0QyxXQUFPLEtBQVA7QUFDRCxHQVppQjs7QUFjbEIsb0JBQWtCLFlBQVk7QUFDNUIsV0FBTyxLQUFQO0FBQ0QsR0FoQmlCO0FBaUJsQixzQkFBb0IsWUFBWTtBQUM5QixXQUFPLEtBQVA7QUFDRCxHQW5CaUI7QUFvQmxCLFlBQVUsVUFBVSxhQUFWLEVBQXlCO0FBQ2pDLFFBQUksTUFBTSxPQUFPLFFBQVAsRUFBVjtBQUNBLFFBQUksT0FBTyxJQUFYO0FBQ0Y7QUFDRSxRQUFJLFdBQVcsS0FBSyxDQUFMLENBQU8sS0FBSyxRQUFaLEVBQXNCLGFBQXRCLENBQWY7O0FBRUEsUUFBSSxVQUFVLEVBQWQ7QUFDQSxTQUFLLENBQUwsQ0FBTyxRQUFQLEVBQWlCLElBQWpCLENBQXNCLFVBQVUsQ0FBVixFQUFhLE9BQWIsRUFBc0I7QUFDMUMsVUFBSSxPQUFPLEVBQVg7O0FBRUEsV0FBSyxLQUFLLEVBQVYsSUFBZ0IsS0FBSyxDQUFMLENBQU8sT0FBUCxFQUFnQixJQUFoQixFQUFoQjs7QUFFQSxVQUFJLEtBQUssZ0JBQVQsRUFBMkI7QUFDekIsYUFBSyxLQUFLLEVBQUwsR0FBVSxHQUFWLEdBQWdCLEtBQUssZ0JBQTFCLElBQThDLEtBQUssQ0FBTCxDQUFPLE9BQVAsRUFBZ0IsSUFBaEIsQ0FBcUIsS0FBSyxnQkFBMUIsQ0FBOUM7QUFDRDs7QUFFRCxjQUFRLElBQVIsQ0FBYSxJQUFiO0FBQ0QsS0FWcUIsQ0FVcEIsSUFWb0IsQ0FVZixJQVZlLENBQXRCOztBQVlBLFFBQUksU0FBUyxFQUFiO0FBQ0EsV0FBTyxLQUFLLEVBQVosSUFBa0IsT0FBbEI7O0FBRUEsUUFBSSxPQUFKLENBQVksQ0FBQyxNQUFELENBQVo7QUFDQSxXQUFPLElBQUksT0FBSixFQUFQO0FBQ0QsR0E1Q2lCOztBQThDbEIsa0JBQWdCLFlBQVk7QUFDMUIsV0FBTyxDQUFDLEtBQUssRUFBTixDQUFQO0FBQ0QsR0FoRGlCOztBQWtEbEIsZUFBYSxZQUFZO0FBQ3ZCLFdBQU8sQ0FBQyxPQUFELEVBQVUsa0JBQVYsQ0FBUDtBQUNEO0FBcERpQixDQUFwQjs7QUF1REEsT0FBTyxPQUFQLEdBQWlCLGFBQWpCOzs7QUN4REEsSUFBSSxTQUFTLFFBQVEsaUJBQVIsQ0FBYjtBQUNBLElBQUksZUFBZTs7QUFFakIsNEJBQTBCLFlBQVk7QUFDcEMsV0FBTyxJQUFQO0FBQ0QsR0FKZ0I7O0FBTWpCLHlCQUF1QixZQUFZO0FBQ2pDLFdBQU8sS0FBUDtBQUNELEdBUmdCOztBQVVqQiw4QkFBNEIsWUFBWTtBQUN0QyxXQUFPLEtBQVA7QUFDRCxHQVpnQjs7QUFjakIsb0JBQWtCLFlBQVk7QUFDNUIsV0FBTyxLQUFQO0FBQ0QsR0FoQmdCO0FBaUJqQixzQkFBb0IsWUFBWTtBQUM5QixXQUFPLEtBQVA7QUFDRCxHQW5CZ0I7QUFvQmpCLFlBQVUsVUFBVSxhQUFWLEVBQXlCO0FBQ2pDLFFBQUksTUFBTSxPQUFPLFFBQVAsRUFBVjtBQUNBLFFBQUksT0FBTyxJQUFYO0FBQ0EsUUFBSSxXQUFXLEtBQUssZUFBTCxDQUFxQixhQUFyQixDQUFmOztBQUVBLFFBQUksU0FBUyxFQUFiO0FBQ0EsU0FBSyxDQUFMLENBQU8sUUFBUCxFQUFpQixJQUFqQixDQUFzQixVQUFVLENBQVYsRUFBYSxPQUFiLEVBQXNCO0FBQzFDLFVBQUksT0FBTyxFQUFYO0FBQ0EsVUFBSSxPQUFPLEtBQUssQ0FBTCxDQUFPLE9BQVAsRUFBZ0IsSUFBaEIsRUFBWDs7QUFFQSxVQUFJLEtBQUssS0FBTCxLQUFlLFNBQWYsSUFBNEIsS0FBSyxLQUFMLENBQVcsTUFBM0MsRUFBbUQ7QUFDakQsWUFBSSxVQUFVLEtBQUssS0FBTCxDQUFXLElBQUksTUFBSixDQUFXLEtBQUssS0FBaEIsQ0FBWCxDQUFkO0FBQ0EsWUFBSSxZQUFZLElBQWhCLEVBQXNCO0FBQ3BCLGlCQUFPLFFBQVEsQ0FBUixDQUFQO0FBQ0QsU0FGRCxNQUVPO0FBQ0wsaUJBQU8sSUFBUDtBQUNEO0FBQ0Y7QUFDRCxXQUFLLEtBQUssRUFBVixJQUFnQixJQUFoQjs7QUFFQSxhQUFPLElBQVAsQ0FBWSxJQUFaO0FBQ0QsS0FmcUIsQ0FlcEIsSUFmb0IsQ0FlZixJQWZlLENBQXRCOztBQWlCQSxRQUFJLEtBQUssUUFBTCxLQUFrQixLQUFsQixJQUEyQixTQUFTLE1BQVQsS0FBb0IsQ0FBbkQsRUFBc0Q7QUFDcEQsVUFBSSxPQUFPLEVBQVg7QUFDQSxXQUFLLEtBQUssRUFBVixJQUFnQixJQUFoQjtBQUNBLGFBQU8sSUFBUCxDQUFZLElBQVo7QUFDRDs7QUFFRCxRQUFJLE9BQUosQ0FBWSxNQUFaO0FBQ0EsV0FBTyxJQUFJLE9BQUosRUFBUDtBQUNELEdBbkRnQjs7QUFxRGpCLGtCQUFnQixZQUFZO0FBQzFCLFdBQU8sQ0FBQyxLQUFLLEVBQU4sQ0FBUDtBQUNELEdBdkRnQjs7QUF5RGpCLGVBQWEsWUFBWTtBQUN2QixXQUFPLENBQUMsVUFBRCxFQUFhLE9BQWIsRUFBc0IsT0FBdEIsQ0FBUDtBQUNEO0FBM0RnQixDQUFuQjs7QUE4REEsT0FBTyxPQUFQLEdBQWlCLFlBQWpCOzs7QUMvREEsSUFBSSxTQUFTLFFBQVEsaUJBQVIsQ0FBYjtBQUNBLElBQUksdUJBQXVCLFFBQVEsMENBQVIsQ0FBM0I7QUFDQSxJQUFJLFNBQVMsUUFBUSxxQkFBUixDQUFiO0FBQ0EsSUFBSSxnQkFBZ0I7QUFDbEIsNEJBQTBCLFlBQVk7QUFDcEMsV0FBTyxJQUFQO0FBQ0QsR0FIaUI7O0FBS2xCLHlCQUF1QixZQUFZO0FBQ2pDLFdBQU8sS0FBUDtBQUNELEdBUGlCOztBQVNsQiw4QkFBNEIsWUFBWTtBQUN0QyxXQUFPLEtBQVA7QUFDRCxHQVhpQjs7QUFhbEIsb0JBQWtCLFlBQVk7QUFDNUIsV0FBTyxLQUFQO0FBQ0QsR0FmaUI7QUFnQmxCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sS0FBUDtBQUNELEdBbEJpQjtBQW1CbEIsWUFBVSxVQUFVLGFBQVYsRUFBeUI7QUFDakMsUUFBSSxNQUFNLE9BQU8sUUFBUCxFQUFWOztBQUVBLFFBQUksV0FBVyxLQUFLLGVBQUwsQ0FBcUIsYUFBckIsQ0FBZjs7QUFFQSxRQUFJLG9CQUFvQixFQUF4QjtBQUNBLFNBQUssQ0FBTCxDQUFPLFFBQVAsRUFBaUIsSUFBakIsQ0FBc0IsVUFBVSxDQUFWLEVBQWEsT0FBYixFQUFzQjtBQUMxQyx3QkFBa0IsSUFBbEIsQ0FBdUIsWUFBWTtBQUNqQyxZQUFJLGVBQWUsT0FBTyxRQUFQLEVBQW5COztBQUVBLFlBQUksT0FBTyxFQUFYO0FBQ0EsYUFBSyxLQUFLLEVBQUwsR0FBVSxNQUFmLElBQXlCLFFBQVEsR0FBakM7O0FBRUo7QUFDSSxZQUFJLENBQUMsS0FBSyxhQUFWLEVBQXlCO0FBQ3ZCLHVCQUFhLE9BQWIsQ0FBcUIsSUFBckI7QUFDRCxTQUZELE1BRU87QUFDTCxjQUFJLHNCQUFzQixLQUFLLG1CQUFMLENBQXlCLFFBQVEsR0FBakMsQ0FBMUI7O0FBRUEsOEJBQW9CLElBQXBCLENBQXlCLFVBQVUsYUFBVixFQUF5QjtBQUNoRCxpQkFBSyxrQkFBa0IsS0FBSyxFQUE1QixJQUFrQyxjQUFjLFdBQWhEO0FBQ0EsaUJBQUssb0JBQW9CLEtBQUssRUFBOUIsSUFBb0MsY0FBYyxRQUFsRDs7QUFFQSx5QkFBYSxPQUFiLENBQXFCLElBQXJCO0FBQ0QsV0FMd0IsQ0FLdkIsSUFMdUIsQ0FLbEIsSUFMa0IsQ0FBekIsRUFLYyxJQUxkLENBS21CLFlBQVk7QUFDbkM7QUFDQTtBQUNNLHlCQUFhLE9BQWIsQ0FBcUIsSUFBckI7QUFDRCxXQVREO0FBVUQ7O0FBRUQsZUFBTyxhQUFhLE9BQWIsRUFBUDtBQUNELE9BekJzQixDQXlCckIsSUF6QnFCLENBeUJoQixJQXpCZ0IsQ0FBdkI7QUEwQkQsS0EzQnFCLENBMkJwQixJQTNCb0IsQ0EyQmYsSUEzQmUsQ0FBdEI7O0FBNkJBLHlCQUFxQixpQkFBckIsRUFBd0MsSUFBeEMsQ0FBNkMsVUFBVSxXQUFWLEVBQXVCO0FBQ2xFLFVBQUksS0FBSyxRQUFMLEtBQWtCLEtBQWxCLElBQTJCLFNBQVMsTUFBVCxLQUFvQixDQUFuRCxFQUFzRDtBQUNwRCxZQUFJLE9BQU8sRUFBWDtBQUNBLGFBQUssS0FBSyxFQUFMLEdBQVUsTUFBZixJQUF5QixJQUF6QjtBQUNBLG9CQUFZLElBQVosQ0FBaUIsSUFBakI7QUFDRDs7QUFFRCxVQUFJLE9BQUosQ0FBWSxXQUFaO0FBQ0QsS0FSRDs7QUFVQSxXQUFPLElBQUksT0FBSixFQUFQO0FBQ0QsR0FqRWlCOztBQW1FbEIsc0JBQW9CLFVBQVUsR0FBVixFQUFlO0FBQ2pDLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0EsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EsUUFBSSxNQUFNLElBQUksT0FBTyxjQUFYLEVBQVY7QUFDQSxRQUFJLGtCQUFKLEdBQXlCLFlBQVk7QUFDbkMsVUFBSSxLQUFLLFVBQUwsSUFBbUIsQ0FBdkIsRUFBMEI7QUFDeEIsWUFBSSxLQUFLLE1BQUwsSUFBZSxHQUFuQixFQUF3QjtBQUN0QixjQUFJLE9BQU8sS0FBSyxRQUFoQjtBQUNBLDJCQUFpQixPQUFqQixDQUF5QixJQUF6QjtBQUNELFNBSEQsTUFHTztBQUNMLDJCQUFpQixNQUFqQixDQUF3QixJQUFJLFVBQTVCO0FBQ0Q7QUFDRjtBQUNGLEtBVEQ7QUFVQSxRQUFJLElBQUosQ0FBUyxLQUFULEVBQWdCLEdBQWhCO0FBQ0EsUUFBSSxZQUFKLEdBQW1CLE1BQW5CO0FBQ0EsUUFBSSxJQUFKOztBQUVBLFdBQU8saUJBQWlCLE9BQWpCLEVBQVA7QUFDRCxHQXRGaUI7O0FBd0ZsQix1QkFBcUIsVUFBVSxHQUFWLEVBQWU7QUFDbEMsUUFBSSxtQkFBbUIsT0FBTyxRQUFQLEVBQXZCO0FBQ0EsUUFBSSxtQkFBbUIsS0FBSyxrQkFBTCxDQUF3QixHQUF4QixDQUF2QjtBQUNBLHFCQUFpQixJQUFqQixDQUFzQixVQUFVLElBQVYsRUFBZ0I7QUFDcEMsVUFBSSxXQUFXLEtBQUssSUFBcEI7QUFDQSxVQUFJLGVBQWUsT0FBTyxZQUFQLENBQW9CLElBQXBCLENBQW5CO0FBQ0EsbUJBQWEsSUFBYixDQUFrQixVQUFVLFdBQVYsRUFBdUI7QUFDdkMseUJBQWlCLE9BQWpCLENBQXlCO0FBQ3ZCLG9CQUFVLFFBRGE7QUFFdkIsdUJBQWE7QUFGVSxTQUF6QjtBQUlELE9BTEQ7QUFNRCxLQVRELEVBU0csSUFUSCxDQVNRLGlCQUFpQixJQVR6QjtBQVVBLFdBQU8saUJBQWlCLE9BQWpCLEVBQVA7QUFDRCxHQXRHaUI7O0FBd0dsQixrQkFBZ0IsWUFBWTtBQUMxQixXQUFPLENBQUMsS0FBSyxFQUFMLEdBQVUsTUFBWCxDQUFQO0FBQ0QsR0ExR2lCOztBQTRHbEIsZUFBYSxZQUFZO0FBQ3ZCLFdBQU8sQ0FBQyxVQUFELEVBQWEsT0FBYixFQUFzQixlQUF0QixDQUFQO0FBQ0QsR0E5R2lCOztBQWdIbEIsc0JBQW9CLFlBQVk7QUFDOUIsV0FBTyxLQUFQO0FBQ0Q7QUFsSGlCLENBQXBCOztBQXFIQSxPQUFPLE9BQVAsR0FBaUIsYUFBakI7OztBQ3hIQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiO0FBQ0EsSUFBSSx1QkFBdUIsUUFBUSwwQ0FBUixDQUEzQjs7QUFFQSxJQUFJLGVBQWU7QUFDakIsNEJBQTBCLFlBQVk7QUFDcEMsV0FBTyxJQUFQO0FBQ0QsR0FIZ0I7O0FBS2pCLHlCQUF1QixZQUFZO0FBQ2pDLFdBQU8sSUFBUDtBQUNELEdBUGdCOztBQVNqQiw4QkFBNEIsWUFBWTtBQUN0QyxXQUFPLEtBQVA7QUFDRCxHQVhnQjs7QUFhakIsb0JBQWtCLFlBQVk7QUFDNUIsV0FBTyxJQUFQO0FBQ0QsR0FmZ0I7QUFnQmpCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sS0FBUDtBQUNELEdBbEJnQjtBQW1CakIsWUFBVSxVQUFVLGFBQVYsRUFBeUI7QUFDakMsUUFBSSxXQUFXLEtBQUssZUFBTCxDQUFxQixhQUFyQixDQUFmO0FBQ0EsUUFBSSxPQUFPLElBQVg7O0FBRUEsUUFBSSxNQUFNLE9BQU8sUUFBUCxFQUFWOztBQUVGO0FBQ0UsUUFBSSxLQUFLLFFBQUwsS0FBa0IsS0FBbEIsSUFBMkIsU0FBUyxNQUFULEtBQW9CLENBQW5ELEVBQXNEO0FBQ3BELFVBQUksT0FBTyxFQUFYO0FBQ0EsV0FBSyxLQUFLLEVBQVYsSUFBZ0IsSUFBaEI7QUFDQSxVQUFJLE9BQUosQ0FBWSxDQUFDLElBQUQsQ0FBWjtBQUNBLGFBQU8sR0FBUDtBQUNEOztBQUVIO0FBQ0UsUUFBSSw4QkFBOEIsRUFBbEM7QUFDQSxTQUFLLENBQUwsQ0FBTyxRQUFQLEVBQWlCLElBQWpCLENBQXNCLFVBQVUsQ0FBVixFQUFhLE9BQWIsRUFBc0I7QUFDMUMsa0NBQTRCLElBQTVCLENBQWlDLFVBQVUsT0FBVixFQUFtQjtBQUNsRCxZQUFJLGVBQWUsT0FBTyxRQUFQLEVBQW5COztBQUVBLFlBQUksT0FBTyxFQUFYO0FBQ0EsYUFBSyxLQUFLLEVBQVYsSUFBZ0IsS0FBSyxDQUFMLENBQU8sT0FBUCxFQUFnQixJQUFoQixFQUFoQjtBQUNBLGFBQUssaUJBQUwsR0FBeUIsS0FBSyxFQUE5QjtBQUNBLGFBQUssS0FBSyxFQUFMLEdBQVUsT0FBZixJQUEwQixRQUFRLElBQWxDO0FBQ0EsYUFBSyxPQUFMLEdBQWUsUUFBUSxJQUF2QjtBQUNBLHFCQUFhLE9BQWIsQ0FBcUIsSUFBckI7O0FBRUEsZUFBTyxZQUFQO0FBQ0QsT0FYZ0MsQ0FXL0IsSUFYK0IsQ0FXMUIsSUFYMEIsRUFXcEIsT0FYb0IsQ0FBakM7QUFZRCxLQWJxQixDQWFwQixJQWJvQixDQWFmLElBYmUsQ0FBdEI7O0FBZUEseUJBQXFCLDJCQUFyQixFQUFrRCxJQUFsRCxDQUF1RCxVQUFVLFNBQVYsRUFBcUI7QUFDMUUsVUFBSSxTQUFTLEVBQWI7QUFDQSxnQkFBVSxPQUFWLENBQWtCLFVBQVUsVUFBVixFQUFzQjtBQUN0QyxlQUFPLElBQVAsQ0FBWSxVQUFaO0FBQ0QsT0FGRDtBQUdBLFVBQUksT0FBSixDQUFZLE1BQVo7QUFDRCxLQU5EOztBQVFBLFdBQU8sSUFBSSxPQUFKLEVBQVA7QUFDRCxHQTNEZ0I7O0FBNkRqQixrQkFBZ0IsWUFBWTtBQUMxQixXQUFPLENBQUMsS0FBSyxFQUFOLEVBQVUsS0FBSyxFQUFMLEdBQVUsT0FBcEIsQ0FBUDtBQUNELEdBL0RnQjs7QUFpRWpCLGVBQWEsWUFBWTtBQUN2QixXQUFPLENBQUMsVUFBRCxFQUFhLE9BQWIsQ0FBUDtBQUNELEdBbkVnQjs7QUFxRWpCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sR0FBUDtBQUNEO0FBdkVnQixDQUFuQjs7QUEwRUEsT0FBTyxPQUFQLEdBQWlCLFlBQWpCOzs7QUM3RUEsSUFBSSx1QkFBdUIsUUFBUSwwQ0FBUixDQUEzQjtBQUNBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQSxJQUFJLGNBQWMsUUFBUSxjQUFSLEVBQXdCLFdBQTFDO0FBQ0EsSUFBSSxvQkFBb0I7QUFDdEIsNEJBQTBCLFlBQVk7QUFDcEMsV0FBTyxJQUFQO0FBQ0QsR0FIcUI7O0FBS3RCLHlCQUF1QixZQUFZO0FBQ2pDLFdBQU8sSUFBUDtBQUNELEdBUHFCOztBQVN0Qiw4QkFBNEIsWUFBWTtBQUN0QyxXQUFPLEtBQVA7QUFDRCxHQVhxQjs7QUFhdEIsb0JBQWtCLFlBQVk7QUFDNUIsV0FBTyxJQUFQO0FBQ0QsR0FmcUI7QUFnQnRCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sS0FBUDtBQUNELEdBbEJxQjtBQW1CdEIsWUFBVSxVQUFVLGFBQVYsRUFBeUI7QUFDakMsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNKLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDSSxRQUFJLFdBQVcsS0FBSyxlQUFMLENBQXFCLGFBQXJCLENBQWY7O0FBRUEsUUFBSSxNQUFNLE9BQU8sUUFBUCxFQUFWOztBQUVGO0FBQ0UsUUFBSSxLQUFLLFFBQUwsS0FBa0IsS0FBbEIsSUFBMkIsU0FBUyxNQUFULEtBQW9CLENBQW5ELEVBQXNEO0FBQ3BELFVBQUksT0FBTyxFQUFYO0FBQ0EsV0FBSyxLQUFLLEVBQVYsSUFBZ0IsSUFBaEI7QUFDQSxVQUFJLE9BQUosQ0FBWSxDQUFDLElBQUQsQ0FBWjtBQUNBLGFBQU8sR0FBUDtBQUNEOztBQUVIO0FBQ0UsUUFBSSw4QkFBOEIsRUFBbEM7QUFDQSxNQUFFLFFBQUYsRUFBWSxJQUFaLENBQWlCLFVBQVUsQ0FBVixFQUFhLE9BQWIsRUFBc0I7QUFDckMsa0NBQTRCLElBQTVCLENBQWlDLFVBQVUsT0FBVixFQUFtQjtBQUNsRCxZQUFJLGVBQWUsT0FBTyxRQUFQLEVBQW5COztBQUVBLFlBQUksT0FBTyxFQUFYO0FBQ0EsYUFBSyxLQUFLLEVBQVYsSUFBZ0IsRUFBRSxPQUFGLEVBQVcsSUFBWCxFQUFoQjtBQUNBLGFBQUssaUJBQUwsR0FBeUIsS0FBSyxFQUE5Qjs7QUFFQSxZQUFJLG1CQUFtQixLQUFLLFdBQUwsQ0FBaUIsT0FBakIsQ0FBdkI7QUFDQSx5QkFBaUIsSUFBakIsQ0FBc0IsVUFBVSxHQUFWLEVBQWU7QUFDbkMsZUFBSyxLQUFLLEVBQUwsR0FBVSxPQUFmLElBQTBCLEdBQTFCO0FBQ0EsZUFBSyxPQUFMLEdBQWUsR0FBZjtBQUNBLHVCQUFhLE9BQWIsQ0FBcUIsSUFBckI7QUFDRCxTQUpxQixDQUlwQixJQUpvQixDQUlmLElBSmUsQ0FBdEI7O0FBTUEsZUFBTyxZQUFQO0FBQ0QsT0FmZ0MsQ0FlL0IsSUFmK0IsQ0FlMUIsSUFmMEIsRUFlcEIsT0Fmb0IsQ0FBakM7QUFnQkQsS0FqQmdCLENBaUJmLElBakJlLENBaUJWLElBakJVLENBQWpCOztBQW1CQSx5QkFBcUIsMkJBQXJCLEVBQWtELElBQWxELENBQXVELFVBQVUsU0FBVixFQUFxQjtBQUMxRSxVQUFJLFNBQVMsRUFBYjtBQUNBLGdCQUFVLE9BQVYsQ0FBa0IsVUFBVSxVQUFWLEVBQXNCO0FBQ3RDLGVBQU8sSUFBUCxDQUFZLFVBQVo7QUFDRCxPQUZEO0FBR0EsVUFBSSxPQUFKLENBQVksTUFBWjtBQUNELEtBTkQ7O0FBUUEsV0FBTyxJQUFJLE9BQUosRUFBUDtBQUNELEdBakVxQjs7QUFtRXZCOzs7OztBQUtDLGVBQWEsVUFBVSxPQUFWLEVBQW1CO0FBQzlCLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDQSxRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0E7QUFDRjtBQUNFLFFBQUksS0FBSyxJQUFJLFdBQUosQ0FBZ0I7QUFDdkIsZ0NBQTBCLEtBREg7QUFFdkIsY0FBUSxTQUFTLElBRk07QUFHdkIsNkJBQXVCO0FBSEEsS0FBaEIsQ0FBVDtBQUtBLFFBQUksY0FBYyxHQUFHLGNBQUgsQ0FBa0IsQ0FBQyxPQUFELENBQWxCLENBQWxCO0FBQ0EsWUFBUSxHQUFSLHNFQUFZLFdBQVo7QUFDQSxZQUFRLEdBQVIsc0dBQVksU0FBUyxJQUFULENBQWMsZ0JBQWQsQ0FBK0IsV0FBL0IsQ0FBWjtBQUNGO0FBQ0UsUUFBSSxTQUFTLFNBQVMsYUFBVCxDQUF1QixRQUF2QixDQUFiO0FBQ0EsV0FBTyxJQUFQLEdBQWMsaUJBQWQ7QUFDQSxZQUFRLEdBQVIsc0VBQVksV0FBWjtBQUNBLFlBQVEsR0FBUixpR0FBWSxTQUFTLGdCQUFULENBQTBCLFdBQTFCLENBQVo7QUFDQSxRQUFJLEtBQUssU0FBUyxnQkFBVCxDQUEwQixXQUExQixFQUF1QyxDQUF2QyxDQUFUOztBQUVBLFVBQU0sT0FBTyxPQUFPLElBQXBCO0FBQ0EsV0FBTyxJQUFQLEdBQWMsWUFBWTtBQUN4QixVQUFJLE1BQU0sVUFBVSxDQUFWLENBQVY7QUFDQSxTQUFHLE9BQUgsQ0FBVyxvQkFBWCxHQUFrQyxHQUFsQztBQUNBLGFBQU8sSUFBUCxHQUFjLElBQWQ7QUFDRCxLQUpEO0FBS0EsT0FBRyxLQUFIOztBQUVGO0FBQ0UsUUFBSSxjQUFjLE9BQU8sUUFBUCxFQUFsQjtBQUNBLFFBQUksVUFBVSxLQUFLLEdBQUwsQ0FBUyxPQUFPLEVBQWhCLENBQWQsQ0EvQjhCLENBK0JJO0FBQ2xDLFFBQUksV0FBVyxZQUFZLFlBQVk7QUFDckMsVUFBSSxNQUFNLEVBQUUsT0FBRixFQUFXLElBQVgsQ0FBZ0IseUJBQWhCLENBQVY7QUFDQSxVQUFJLEdBQUosRUFBUztBQUNQLG9CQUFZLE9BQVosQ0FBb0IsR0FBcEI7QUFDQSxzQkFBYyxRQUFkO0FBQ0EsZUFBTyxNQUFQO0FBQ0Q7QUFDSjtBQUNHLFVBQUksYUFBYSxDQUFqQixFQUFvQjtBQUNsQixzQkFBYyxRQUFkO0FBQ0EsZUFBTyxNQUFQO0FBQ0Q7QUFDRixLQVpjLEVBWVosRUFaWSxDQUFmOztBQWNBLFdBQU8sWUFBWSxPQUFaLEVBQVA7QUFDRCxHQXZIcUI7O0FBeUh0QixrQkFBZ0IsWUFBWTtBQUMxQixXQUFPLENBQUMsS0FBSyxFQUFOLEVBQVUsS0FBSyxFQUFMLEdBQVUsT0FBcEIsQ0FBUDtBQUNELEdBM0hxQjs7QUE2SHRCLGVBQWEsWUFBWTtBQUN2QixXQUFPLENBQUMsVUFBRCxFQUFhLE9BQWIsQ0FBUDtBQUNELEdBL0hxQjs7QUFpSXRCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sR0FBUDtBQUNEO0FBbklxQixDQUF4Qjs7QUFzSUEsT0FBTyxPQUFQLEdBQWlCLGlCQUFqQjs7O0FDeklBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7O0FBRUEsSUFBSSxnQkFBZ0I7O0FBRWxCLDRCQUEwQixZQUFZO0FBQ3BDLFdBQU8sSUFBUDtBQUNELEdBSmlCOztBQU1sQix5QkFBdUIsWUFBWTtBQUNqQyxXQUFPLEtBQVA7QUFDRCxHQVJpQjs7QUFVbEIsOEJBQTRCLFlBQVk7QUFDdEMsV0FBTyxLQUFQO0FBQ0QsR0FaaUI7O0FBY2xCLG9CQUFrQixZQUFZO0FBQzVCLFdBQU8sS0FBUDtBQUNELEdBaEJpQjtBQWlCbEIsc0JBQW9CLFlBQVk7QUFDOUIsV0FBTyxLQUFQO0FBQ0QsR0FuQmlCO0FBb0JsQix5QkFBdUIsVUFBVSxNQUFWLEVBQWtCO0FBQ3ZDLFFBQUksVUFBVSxFQUFkO0FBQ0EsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNKLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDSSxRQUFJLG9CQUFvQixLQUFLLHlCQUFMLEVBQXhCO0FBQ0EsUUFBSSxhQUFhLEVBQUUsTUFBRixFQUFVLElBQVYsQ0FBZSxpQkFBZixDQUFqQjtBQUNBLFFBQUksV0FBVyxNQUFYLEdBQW9CLENBQXhCLEVBQTJCO0FBQ3pCLGlCQUFXLElBQVgsQ0FBZ0IsT0FBaEIsRUFBeUIsSUFBekIsQ0FBOEIsVUFBVSxDQUFWLEVBQWE7QUFDekMsWUFBSSxTQUFTLEVBQUUsSUFBRixFQUFRLElBQVIsR0FBZSxJQUFmLEVBQWI7QUFDQSxnQkFBUSxNQUFSLElBQWtCO0FBQ2hCLGlCQUFPLElBQUk7QUFESyxTQUFsQjtBQUdELE9BTEQ7QUFNRDtBQUNELFdBQU8sT0FBUDtBQUNELEdBcENpQjtBQXFDbEIsWUFBVSxVQUFVLGFBQVYsRUFBeUI7QUFDakMsUUFBSSxNQUFNLE9BQU8sUUFBUCxFQUFWO0FBQ0EsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNKLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBbEI7O0FBRUksUUFBSSxTQUFTLEtBQUssZUFBTCxDQUFxQixhQUFyQixDQUFiOztBQUVBLFFBQUksU0FBUyxFQUFiO0FBQ0EsTUFBRSxNQUFGLEVBQVUsSUFBVixDQUFlLFVBQVUsQ0FBVixFQUFhLEtBQWIsRUFBb0I7QUFDakMsVUFBSSxVQUFVLEtBQUsscUJBQUwsQ0FBMkIsRUFBRSxLQUFGLENBQTNCLENBQWQ7O0FBRUEsVUFBSSxrQkFBa0IsS0FBSyx1QkFBTCxFQUF0QjtBQUNBLFFBQUUsS0FBRixFQUFTLElBQVQsQ0FBYyxlQUFkLEVBQStCLElBQS9CLENBQW9DLFVBQVUsQ0FBVixFQUFhLEdBQWIsRUFBa0I7QUFDcEQsWUFBSSxPQUFPLEVBQVg7QUFDQSxhQUFLLE9BQUwsQ0FBYSxPQUFiLENBQXFCLFVBQVUsTUFBVixFQUFrQjtBQUNyQyxjQUFJLE9BQU8sT0FBUCxLQUFtQixJQUF2QixFQUE2QjtBQUMzQixnQkFBSSxRQUFRLE9BQU8sTUFBZixNQUEyQixTQUEvQixFQUEwQztBQUN4QyxtQkFBSyxPQUFPLElBQVosSUFBb0IsSUFBcEI7QUFDRCxhQUZELE1BRU87QUFDTCxrQkFBSSxVQUFVLEVBQUUsR0FBRixFQUFPLElBQVAsQ0FBWSxpQkFBaUIsUUFBUSxPQUFPLE1BQWYsRUFBdUIsS0FBeEMsR0FBZ0QsR0FBNUQsRUFBaUUsSUFBakUsR0FBd0UsSUFBeEUsRUFBZDtBQUNBLG1CQUFLLE9BQU8sSUFBWixJQUFvQixPQUFwQjtBQUNEO0FBQ0Y7QUFDRixTQVREO0FBVUEsZUFBTyxJQUFQLENBQVksSUFBWjtBQUNELE9BYm1DLENBYWxDLElBYmtDLENBYTdCLElBYjZCLENBQXBDO0FBY0QsS0FsQmMsQ0FrQmIsSUFsQmEsQ0FrQlIsSUFsQlEsQ0FBZjs7QUFvQkEsUUFBSSxPQUFKLENBQVksTUFBWjtBQUNBLFdBQU8sSUFBSSxPQUFKLEVBQVA7QUFDRCxHQXBFaUI7O0FBc0VsQixrQkFBZ0IsWUFBWTtBQUMxQixRQUFJLGNBQWMsRUFBbEI7QUFDQSxTQUFLLE9BQUwsQ0FBYSxPQUFiLENBQXFCLFVBQVUsTUFBVixFQUFrQjtBQUNyQyxVQUFJLE9BQU8sT0FBUCxLQUFtQixJQUF2QixFQUE2QjtBQUMzQixvQkFBWSxJQUFaLENBQWlCLE9BQU8sSUFBeEI7QUFDRDtBQUNGLEtBSkQ7QUFLQSxXQUFPLFdBQVA7QUFDRCxHQTlFaUI7O0FBZ0ZsQixlQUFhLFlBQVk7QUFDdkIsV0FBTyxDQUFDLFVBQUQsRUFBYSxTQUFiLEVBQXdCLE9BQXhCLEVBQWlDLHNCQUFqQyxFQUF5RCx3QkFBekQsQ0FBUDtBQUNELEdBbEZpQjs7QUFvRmxCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sT0FBUDtBQUNELEdBdEZpQjs7QUF3RmxCLDBDQUF3QyxVQUFVLElBQVYsRUFBZ0IsVUFBVSxFQUExQixFQUE4QjtBQUNwRSxRQUFJLElBQUksUUFBUSxDQUFSLElBQWEsS0FBSyxDQUExQjtBQUNBLFFBQUksU0FBUyxFQUFFLElBQUYsQ0FBYjtBQUNBLFFBQUksT0FBTyxJQUFQLENBQVksNERBQVosRUFBMEUsTUFBOUUsRUFBc0Y7QUFDcEYsVUFBSSxPQUFPLElBQVAsQ0FBWSxVQUFaLEVBQXdCLE1BQXhCLEtBQW1DLENBQXZDLEVBQTBDO0FBQ3hDLGVBQU8sVUFBUDtBQUNELE9BRkQsTUFFUztBQUNQLFlBQUksUUFBUSxPQUFPLElBQVAsQ0FBWSxVQUFaLENBQVo7QUFDSjtBQUNJLFlBQUksV0FBVyxNQUFNLEtBQU4sQ0FBWSxNQUFNLE1BQU4sQ0FBYSwyQ0FBYixFQUEwRCxDQUExRCxDQUFaLENBQWY7QUFDQSxlQUFPLDJCQUEyQixXQUFXLENBQXRDLElBQTJDLEdBQWxEO0FBQ0Q7QUFDRixLQVRELE1BU1EsSUFBSSxPQUFPLElBQVAsQ0FBWSxzQ0FBWixFQUFvRCxNQUF4RCxFQUFnRTtBQUN0RSxVQUFJLFFBQVEsT0FBTyxJQUFQLENBQVksSUFBWixDQUFaO0FBQ0g7QUFDRyxVQUFJLFdBQVcsTUFBTSxLQUFOLENBQVksTUFBTSxNQUFOLENBQWEsMkNBQWIsRUFBMEQsQ0FBMUQsQ0FBWixDQUFmO0FBQ0EsYUFBTyxxQkFBcUIsV0FBVyxDQUFoQyxJQUFxQyxHQUE1QztBQUNELEtBTE8sTUFLQTtBQUNOLGFBQU8sRUFBUDtBQUNEO0FBQ0YsR0E1R2lCOztBQThHbEIsd0NBQXNDLFVBQVUsSUFBVixFQUFnQixVQUFVLEVBQTFCLEVBQThCO0FBQ2xFLFFBQUksSUFBSSxRQUFRLENBQVIsSUFBYSxLQUFLLENBQTFCO0FBQ0EsUUFBSSxTQUFTLEVBQUUsSUFBRixDQUFiO0FBQ0EsUUFBSSxPQUFPLElBQVAsQ0FBWSw0REFBWixFQUEwRSxNQUE5RSxFQUFzRjtBQUNwRixhQUFPLFVBQVA7QUFDRCxLQUZELE1BRVEsSUFBSSxPQUFPLElBQVAsQ0FBWSxzQ0FBWixFQUFvRCxNQUF4RCxFQUFnRTtBQUN0RSxVQUFJLFFBQVEsT0FBTyxJQUFQLENBQVksSUFBWixDQUFaO0FBQ0g7QUFDRyxVQUFJLFdBQVcsTUFBTSxLQUFOLENBQVksTUFBTSxNQUFOLENBQWEsMkNBQWIsRUFBMEQsQ0FBMUQsQ0FBWixDQUFmO0FBQ0EsYUFBTyx1QkFBdUIsV0FBVyxDQUFsQyxJQUF1QyxHQUE5QztBQUNELEtBTE8sTUFLQTtBQUNOLGFBQU8sRUFBUDtBQUNEO0FBQ0YsR0EzSGlCOztBQTZIbEIsNkJBQTJCLFlBQVk7QUFDdkM7QUFDRSxRQUFJLEtBQUssc0JBQUwsS0FBZ0MsU0FBcEMsRUFBK0M7QUFDN0MsYUFBTyxVQUFQO0FBQ0QsS0FGRCxNQUVRO0FBQ04sYUFBTyxLQUFLLHNCQUFaO0FBQ0Q7QUFDRixHQXBJaUI7O0FBc0lsQiwyQkFBeUIsWUFBWTtBQUNyQztBQUNFLFFBQUksS0FBSyxvQkFBTCxLQUE4QixTQUFsQyxFQUE2QztBQUMzQyxhQUFPLFVBQVA7QUFDRCxLQUZELE1BRVE7QUFDTixhQUFPLEtBQUssb0JBQVo7QUFDRDtBQUNGLEdBN0lpQjs7QUErSW5COzs7O0FBSUMsaUNBQStCLFVBQVUsaUJBQVYsRUFBNkIsSUFBN0IsRUFBbUMsVUFBVSxFQUE3QyxFQUFpRDtBQUM5RSxRQUFJLElBQUksUUFBUSxDQUFSLElBQWEsS0FBSyxDQUExQjtBQUNBLFFBQUksU0FBUyxFQUFFLElBQUYsQ0FBYjtBQUNBLFFBQUksb0JBQW9CLE9BQU8sSUFBUCxDQUFZLGlCQUFaLEVBQStCLElBQS9CLENBQW9DLE9BQXBDLENBQXhCOztBQUVBLFFBQUksVUFBVSxFQUFkOztBQUVBLHNCQUFrQixJQUFsQixDQUF1QixVQUFVLENBQVYsRUFBYSxRQUFiLEVBQXVCO0FBQzVDLFVBQUksU0FBUyxFQUFFLFFBQUYsRUFBWSxJQUFaLEdBQW1CLElBQW5CLEVBQWI7QUFDQSxVQUFJLE9BQU8sTUFBWDtBQUNBLFVBQUksT0FBTyxNQUFQLEtBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCLGdCQUFRLElBQVIsQ0FBYTtBQUNYLGtCQUFRLE1BREc7QUFFWCxnQkFBTSxJQUZLO0FBR1gsbUJBQVM7QUFIRSxTQUFiO0FBS0Q7QUFDRixLQVZEO0FBV0EsV0FBTyxPQUFQO0FBQ0Q7QUF0S2lCLENBQXBCOztBQXlLQSxPQUFPLE9BQVAsR0FBaUIsYUFBakI7OztBQzNLQSxJQUFJLFNBQVMsUUFBUSxpQkFBUixDQUFiO0FBQ0EsSUFBSSxlQUFlOztBQUVqQiw0QkFBMEIsWUFBWTtBQUNwQyxXQUFPLElBQVA7QUFDRCxHQUpnQjs7QUFNakIseUJBQXVCLFlBQVk7QUFDakMsV0FBTyxLQUFQO0FBQ0QsR0FSZ0I7O0FBVWpCLDhCQUE0QixZQUFZO0FBQ3RDLFdBQU8sS0FBUDtBQUNELEdBWmdCOztBQWNqQixvQkFBa0IsWUFBWTtBQUM1QixXQUFPLEtBQVA7QUFDRCxHQWhCZ0I7QUFpQmpCLHNCQUFvQixZQUFZO0FBQzlCLFdBQU8sS0FBUDtBQUNELEdBbkJnQjtBQW9CakIsWUFBVSxVQUFVLGFBQVYsRUFBeUI7QUFDakMsUUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNKLFFBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDSSxRQUFJLE1BQU0sT0FBTyxRQUFQLEVBQVY7O0FBRUEsUUFBSSxXQUFXLEtBQUssZUFBTCxDQUFxQixhQUFyQixDQUFmOztBQUVBLFFBQUksU0FBUyxFQUFiO0FBQ0EsTUFBRSxRQUFGLEVBQVksSUFBWixDQUFpQixVQUFVLENBQVYsRUFBYSxPQUFiLEVBQXNCO0FBQ3JDLFVBQUksT0FBTyxFQUFYOztBQUVIO0FBQ0csVUFBSSxpQkFBaUIsRUFBRSxPQUFGLEVBQVcsS0FBWCxFQUFyQjtBQUNBLHFCQUFlLElBQWYsQ0FBb0IsZUFBcEIsRUFBcUMsTUFBckM7QUFDSDtBQUNHLHFCQUFlLElBQWYsQ0FBb0IsSUFBcEIsRUFBMEIsS0FBMUIsQ0FBZ0MsSUFBaEM7O0FBRUEsVUFBSSxPQUFPLGVBQWUsSUFBZixFQUFYO0FBQ0EsVUFBSSxLQUFLLEtBQUwsS0FBZSxTQUFmLElBQTRCLEtBQUssS0FBTCxDQUFXLE1BQTNDLEVBQW1EO0FBQ2pELFlBQUksVUFBVSxLQUFLLEtBQUwsQ0FBVyxJQUFJLE1BQUosQ0FBVyxLQUFLLEtBQWhCLENBQVgsQ0FBZDtBQUNBLFlBQUksWUFBWSxJQUFoQixFQUFzQjtBQUNwQixpQkFBTyxRQUFRLENBQVIsQ0FBUDtBQUNELFNBRkQsTUFFTztBQUNMLGlCQUFPLElBQVA7QUFDRDtBQUNGO0FBQ0QsV0FBSyxLQUFLLEVBQVYsSUFBZ0IsSUFBaEI7O0FBRUEsYUFBTyxJQUFQLENBQVksSUFBWjtBQUNELEtBckJnQixDQXFCZixJQXJCZSxDQXFCVixJQXJCVSxDQUFqQjs7QUF1QkEsUUFBSSxLQUFLLFFBQUwsS0FBa0IsS0FBbEIsSUFBMkIsU0FBUyxNQUFULEtBQW9CLENBQW5ELEVBQXNEO0FBQ3BELFVBQUksT0FBTyxFQUFYO0FBQ0EsV0FBSyxLQUFLLEVBQVYsSUFBZ0IsSUFBaEI7QUFDQSxhQUFPLElBQVAsQ0FBWSxJQUFaO0FBQ0Q7O0FBRUQsUUFBSSxPQUFKLENBQVksTUFBWjtBQUNBLFdBQU8sSUFBSSxPQUFKLEVBQVA7QUFDRCxHQTVEZ0I7O0FBOERqQixrQkFBZ0IsWUFBWTtBQUMxQixXQUFPLENBQUMsS0FBSyxFQUFOLENBQVA7QUFDRCxHQWhFZ0I7O0FBa0VqQixlQUFhLFlBQVk7QUFDdkIsV0FBTyxDQUFDLFVBQUQsRUFBYSxPQUFiLEVBQXNCLE9BQXRCLENBQVA7QUFDRDtBQXBFZ0IsQ0FBbkI7O0FBdUVBLE9BQU8sT0FBUCxHQUFpQixZQUFqQjs7O0FDeEVBLElBQUksV0FBVyxRQUFRLFlBQVIsQ0FBZjs7QUFFQSxJQUFJLGVBQWUsVUFBVSxTQUFWLEVBQXFCLE9BQXJCLEVBQThCO0FBQy9DLE1BQUksSUFBSSxRQUFRLENBQWhCO0FBQ0EsTUFBSSxXQUFXLFFBQVEsUUFBdkI7QUFDQSxNQUFJLFNBQVMsUUFBUSxNQUFyQjtBQUNBO0FBQ0EsU0FBTyxjQUFQLENBQXNCLElBQXRCLEVBQTRCLEdBQTVCLEVBQWlDO0FBQy9CLFdBQU8sQ0FEd0I7QUFFL0IsZ0JBQVk7QUFGbUIsR0FBakM7QUFJQSxTQUFPLGNBQVAsQ0FBc0IsSUFBdEIsRUFBNEIsUUFBNUIsRUFBc0M7QUFDcEMsV0FBTyxNQUQ2QjtBQUVwQyxnQkFBWTtBQUZ3QixHQUF0QztBQUlBLFNBQU8sY0FBUCxDQUFzQixJQUF0QixFQUE0QixVQUE1QixFQUF3QztBQUN0QyxXQUFPLFFBRCtCO0FBRXRDLGdCQUFZO0FBRjBCLEdBQXhDO0FBSUEsTUFBSSxDQUFDLEtBQUssQ0FBVixFQUFhLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0JBQVYsQ0FBTjtBQUNmLE1BQUksQ0FBQyxLQUFLLFFBQVYsRUFBb0IsTUFBTSxJQUFJLEtBQUosQ0FBVSxrQkFBVixDQUFOO0FBQ3BCLE1BQUcsQ0FBQyxLQUFLLE1BQVQsRUFBZ0IsTUFBTSxJQUFJLEtBQUosQ0FBVSxnQkFBVixDQUFOOztBQUVkLE1BQUksY0FBYyxJQUFkLElBQXNCLGNBQWMsU0FBeEMsRUFBbUQ7QUFDakQ7QUFDRDs7QUFFRCxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksVUFBVSxNQUE5QixFQUFzQyxHQUF0QyxFQUEyQztBQUN6QyxTQUFLLElBQUwsQ0FBVSxVQUFVLENBQVYsQ0FBVjtBQUNEO0FBQ0YsQ0E1QkQ7O0FBOEJBLGFBQWEsU0FBYixHQUF5QixFQUF6Qjs7QUFFQSxhQUFhLFNBQWIsQ0FBdUIsSUFBdkIsR0FBOEIsVUFBVSxRQUFWLEVBQW9CO0FBQ2hELE1BQUksQ0FBQyxLQUFLLFdBQUwsQ0FBaUIsU0FBUyxFQUExQixDQUFMLEVBQW9DO0FBQ2xDLFFBQUksRUFBRSxvQkFBb0IsUUFBdEIsQ0FBSixFQUFxQztBQUN6QyxVQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsVUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxVQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNNLGlCQUFXLElBQUksUUFBSixDQUFhLFFBQWIsRUFBdUIsRUFBQyxDQUFELEVBQUksTUFBSixFQUFZLFFBQVosRUFBdkIsQ0FBWDtBQUNEO0FBQ0QsVUFBTSxTQUFOLENBQWdCLElBQWhCLENBQXFCLElBQXJCLENBQTBCLElBQTFCLEVBQWdDLFFBQWhDO0FBQ0Q7QUFDRixDQVZEOztBQVlBLGFBQWEsU0FBYixDQUF1QixXQUF2QixHQUFxQyxVQUFVLFVBQVYsRUFBc0I7QUFDekQsTUFBSSxzQkFBc0IsTUFBMUIsRUFBa0M7QUFDaEMsaUJBQWEsV0FBVyxFQUF4QjtBQUNEOztBQUVELE9BQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxLQUFLLE1BQXpCLEVBQWlDLEdBQWpDLEVBQXNDO0FBQ3BDLFFBQUksS0FBSyxDQUFMLEVBQVEsRUFBUixLQUFlLFVBQW5CLEVBQStCO0FBQzdCLGFBQU8sSUFBUDtBQUNEO0FBQ0Y7QUFDRCxTQUFPLEtBQVA7QUFDRCxDQVhEOztBQWFBOzs7OztBQUtBLGFBQWEsU0FBYixDQUF1QixlQUF2QixHQUF5QyxVQUFVLGdCQUFWLEVBQTRCO0FBQ25FLE1BQUkscUJBQXFCLFNBQXpCLEVBQW9DO0FBQ2xDLFdBQU8sSUFBUDtBQUNEOztBQUVELE1BQUksdUJBQXVCLFVBQVUsZ0JBQVYsRUFBNEIsZUFBNUIsRUFBNkM7QUFDdEUsU0FBSyxPQUFMLENBQWEsVUFBVSxRQUFWLEVBQW9CO0FBQy9CLFVBQUksU0FBUyxpQkFBVCxDQUEyQixnQkFBM0IsQ0FBSixFQUFrRDtBQUNoRCxZQUFJLGdCQUFnQixPQUFoQixDQUF3QixRQUF4QixNQUFzQyxDQUFDLENBQTNDLEVBQThDO0FBQzVDLDBCQUFnQixJQUFoQixDQUFxQixRQUFyQjtBQUNBLCtCQUFxQixTQUFTLEVBQTlCLEVBQWtDLGVBQWxDO0FBQ0Q7QUFDRjtBQUNGLEtBUEQ7QUFRRCxHQVQwQixDQVN6QixJQVR5QixDQVNwQixJQVRvQixDQUEzQjs7QUFXQSxNQUFJLGtCQUFrQixFQUF0QjtBQUNBLHVCQUFxQixnQkFBckIsRUFBdUMsZUFBdkM7QUFDQSxTQUFPLGVBQVA7QUFDRCxDQW5CRDs7QUFxQkE7Ozs7O0FBS0EsYUFBYSxTQUFiLENBQXVCLHVCQUF2QixHQUFpRCxVQUFVLGdCQUFWLEVBQTRCO0FBQzdFLE1BQUksSUFBSSxLQUFLLENBQWI7QUFDQSxNQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLE1BQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0UsTUFBSSxrQkFBa0IsSUFBSSxZQUFKLENBQWlCLElBQWpCLEVBQXVCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQXZCLENBQXRCO0FBQ0EsT0FBSyxPQUFMLENBQWEsVUFBVSxRQUFWLEVBQW9CO0FBQy9CLFFBQUksU0FBUyxpQkFBVCxDQUEyQixnQkFBM0IsQ0FBSixFQUFrRDtBQUNoRCxzQkFBZ0IsSUFBaEIsQ0FBcUIsUUFBckI7QUFDRDtBQUNGLEdBSkQ7QUFLQSxTQUFPLGVBQVA7QUFDRCxDQVhEOztBQWFBLGFBQWEsU0FBYixDQUF1QixLQUF2QixHQUErQixZQUFZO0FBQzNDLE1BQUksSUFBSSxLQUFLLENBQWI7QUFDQSxNQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLE1BQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0UsTUFBSSxhQUFhLElBQUksWUFBSixDQUFpQixJQUFqQixFQUF1QixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUF2QixDQUFqQjtBQUNBLE9BQUssT0FBTCxDQUFhLFVBQVUsUUFBVixFQUFvQjtBQUMvQixlQUFXLElBQVgsQ0FBZ0IsUUFBaEI7QUFDRCxHQUZEO0FBR0EsU0FBTyxVQUFQO0FBQ0QsQ0FURDs7QUFXQSxhQUFhLFNBQWIsQ0FBdUIsU0FBdkIsR0FBbUMsWUFBWTtBQUMvQyxNQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsTUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxNQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNFLE1BQUksYUFBYSxJQUFJLFlBQUosQ0FBaUIsSUFBakIsRUFBdUIsRUFBQyxDQUFELEVBQUksTUFBSixFQUFZLFFBQVosRUFBdkIsQ0FBakI7QUFDQSxPQUFLLE9BQUwsQ0FBYSxVQUFVLFFBQVYsRUFBb0I7QUFDL0IsZUFBVyxJQUFYLENBQWdCLEtBQUssS0FBTCxDQUFXLEtBQUssU0FBTCxDQUFlLFFBQWYsQ0FBWCxDQUFoQjtBQUNELEdBRkQ7QUFHQSxTQUFPLFVBQVA7QUFDRCxDQVREOztBQVdBLGFBQWEsU0FBYixDQUF1QixNQUF2QixHQUFnQyxZQUFZO0FBQzFDLE1BQUksYUFBYSxLQUFLLEtBQUwsRUFBakI7QUFDQSxPQUFLLElBQUksQ0FBVCxJQUFjLFNBQWQsRUFBeUI7QUFDdkIsY0FBVSxDQUFWLEVBQWEsT0FBYixDQUFxQixVQUFVLFFBQVYsRUFBb0I7QUFDdkMsaUJBQVcsSUFBWCxDQUFnQixRQUFoQjtBQUNELEtBRkQ7QUFHRDtBQUNELFNBQU8sVUFBUDtBQUNELENBUkQ7O0FBVUEsYUFBYSxTQUFiLENBQXVCLFdBQXZCLEdBQXFDLFVBQVUsVUFBVixFQUFzQjtBQUN6RCxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUNwQyxRQUFJLFdBQVcsS0FBSyxDQUFMLENBQWY7QUFDQSxRQUFJLFNBQVMsRUFBVCxLQUFnQixVQUFwQixFQUFnQztBQUM5QixhQUFPLFFBQVA7QUFDRDtBQUNGO0FBQ0YsQ0FQRDs7QUFTQTs7Ozs7O0FBTUEsYUFBYSxTQUFiLENBQXVCLG1CQUF2QixHQUE2QyxVQUFVLFVBQVYsRUFBc0I7QUFDbkUsTUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLE1BQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsTUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDRSxNQUFJLGFBQWEsSUFBSSxZQUFKLENBQWlCLElBQWpCLEVBQXVCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQXZCLENBQWpCO0FBQ0EsTUFBSSxXQUFXLEtBQUssV0FBTCxDQUFpQixVQUFqQixDQUFmO0FBQ0EsYUFBVyxJQUFYLENBQWdCLEtBQUssV0FBTCxDQUFpQixVQUFqQixDQUFoQjs7QUFFRDtBQUNDLE1BQUksc0JBQXNCLFVBQVUsUUFBVixFQUFvQjtBQUM1QyxhQUFTLGVBQVQsQ0FBeUIsT0FBekIsQ0FBaUMsVUFBVSxnQkFBVixFQUE0QjtBQUMzRCxVQUFJLHFCQUFxQixPQUF6QixFQUFrQztBQUNsQyxVQUFJLGlCQUFpQixLQUFLLFdBQUwsQ0FBaUIsZ0JBQWpCLENBQXJCO0FBQ0EsVUFBSSxXQUFXLE9BQVgsQ0FBbUIsY0FBbkIsTUFBdUMsQ0FBQyxDQUE1QyxFQUErQztBQUMvQyxVQUFJLGVBQWUsa0JBQWYsRUFBSixFQUF5QztBQUN2QyxtQkFBVyxJQUFYLENBQWdCLGNBQWhCO0FBQ0EsNEJBQW9CLGNBQXBCO0FBQ0Q7QUFDRixLQVJnQyxDQVEvQixJQVIrQixDQVExQixJQVIwQixDQUFqQztBQVNELEdBVnlCLENBVXhCLElBVndCLENBVW5CLElBVm1CLENBQTFCOztBQVlBLHNCQUFvQixRQUFwQjs7QUFFRDtBQUNDLGVBQWEsV0FBVyxNQUFYLENBQWtCLEtBQUssOEJBQUwsQ0FBb0MsU0FBUyxFQUE3QyxDQUFsQixDQUFiO0FBQ0EsU0FBTyxVQUFQO0FBQ0QsQ0ExQkQ7O0FBNEJBOzs7O0FBSUEsYUFBYSxTQUFiLENBQXVCLDhCQUF2QixHQUF3RCxVQUFVLGdCQUFWLEVBQTRCO0FBQ3BGLE1BQUksSUFBSSxLQUFLLENBQWI7QUFDQSxNQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLE1BQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0UsTUFBSSxhQUFhLElBQUksWUFBSixDQUFpQixJQUFqQixFQUF1QixFQUFDLENBQUQsRUFBSSxNQUFKLEVBQVksUUFBWixFQUF2QixDQUFqQjtBQUNBLE1BQUksb0JBQW9CLFVBQVUsY0FBVixFQUEwQjtBQUNoRCxRQUFJLGVBQWUsa0JBQWYsRUFBSixFQUF5QztBQUN2QyxVQUFJLGlCQUFpQixLQUFLLHVCQUFMLENBQTZCLGVBQWUsRUFBNUMsQ0FBckI7QUFDQSxxQkFBZSxPQUFmLENBQXVCLFVBQVUsYUFBVixFQUF5QjtBQUM5QyxZQUFJLFdBQVcsT0FBWCxDQUFtQixhQUFuQixNQUFzQyxDQUFDLENBQTNDLEVBQThDO0FBQzVDLHFCQUFXLElBQVgsQ0FBZ0IsYUFBaEI7QUFDQSw0QkFBa0IsYUFBbEI7QUFDRDtBQUNGLE9BTEQ7QUFNRDtBQUNGLEdBVnVCLENBVXRCLElBVnNCLENBVWpCLElBVmlCLENBQXhCOztBQVlBLE1BQUksaUJBQWlCLEtBQUssV0FBTCxDQUFpQixnQkFBakIsQ0FBckI7QUFDQSxvQkFBa0IsY0FBbEI7QUFDQSxTQUFPLFVBQVA7QUFDRCxDQXBCRDs7QUFzQkEsYUFBYSxTQUFiLENBQXVCLHlCQUF2QixHQUFtRCxVQUFVLFVBQVYsRUFBc0I7QUFDeEU7QUFDQyxNQUFJLFdBQVcsS0FBSyxXQUFMLENBQWlCLFVBQWpCLENBQWY7QUFDQSxNQUFJLFNBQVMseUJBQVQsT0FBeUMsSUFBN0MsRUFBbUQ7QUFDakQsV0FBTyxJQUFQO0FBQ0Q7O0FBRUY7QUFDQyxNQUFJLGlCQUFpQixLQUFLLGVBQUwsQ0FBcUIsVUFBckIsQ0FBckI7QUFDQSxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksZUFBZSxNQUFuQyxFQUEyQyxHQUEzQyxFQUFnRDtBQUM5QyxRQUFJLFdBQVcsZUFBZSxDQUFmLENBQWY7QUFDQSxRQUFJLFNBQVMseUJBQVQsT0FBeUMsSUFBN0MsRUFBbUQ7QUFDakQsYUFBTyxJQUFQO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPLEtBQVA7QUFDRCxDQWpCRDs7QUFtQkE7Ozs7QUFJQSxhQUFhLFNBQWIsQ0FBdUIsTUFBdkIsR0FBZ0MsWUFBWTtBQUMxQyxNQUFJLFNBQVMsRUFBYjtBQUNBLE9BQUssT0FBTCxDQUFhLFVBQVUsUUFBVixFQUFvQjtBQUMvQixXQUFPLElBQVAsQ0FBWSxRQUFaO0FBQ0QsR0FGRDtBQUdBLFNBQU8sTUFBUDtBQUNELENBTkQ7O0FBUUEsYUFBYSxTQUFiLENBQXVCLGVBQXZCLEdBQXlDLFVBQVUsVUFBVixFQUFzQjtBQUM3RCxPQUFLLElBQUksSUFBSSxDQUFiLEVBQWdCLElBQUksS0FBSyxNQUF6QixFQUFpQyxHQUFqQyxFQUFzQztBQUNwQyxRQUFJLFdBQVcsS0FBSyxDQUFMLENBQWY7QUFDQSxRQUFJLFNBQVMsRUFBVCxLQUFnQixVQUFwQixFQUFnQztBQUM5QixhQUFPLFFBQVA7QUFDRDtBQUNGO0FBQ0YsQ0FQRDs7QUFTQTs7Ozs7O0FBTUEsYUFBYSxTQUFiLENBQXVCLDJCQUF2QixHQUFxRCxVQUFVLFVBQVYsRUFBc0IsaUJBQXRCLEVBQXlDO0FBQzVGLE1BQUksY0FBYyxLQUFLLFdBQUwsQ0FBaUIsVUFBakIsRUFBNkIsUUFBL0M7QUFDQSxNQUFJLG9CQUFvQixLQUFLLGlDQUFMLENBQXVDLGlCQUF2QyxDQUF4QjtBQUNBLGdCQUFjLG9CQUFvQixXQUFsQzs7QUFFQSxTQUFPLFdBQVA7QUFDRCxDQU5EOztBQVFBOzs7OztBQUtBLGFBQWEsU0FBYixDQUF1QixpQ0FBdkIsR0FBMkQsVUFBVSxpQkFBVixFQUE2QjtBQUN0RixNQUFJLGNBQWMsRUFBbEI7O0FBRUEsT0FBSyxJQUFJLElBQUksa0JBQWtCLE1BQWxCLEdBQTJCLENBQXhDLEVBQTJDLElBQUksQ0FBL0MsRUFBa0QsR0FBbEQsRUFBdUQ7QUFDckQsUUFBSSxtQkFBbUIsa0JBQWtCLENBQWxCLENBQXZCO0FBQ0EsUUFBSSxpQkFBaUIsS0FBSyxXQUFMLENBQWlCLGdCQUFqQixDQUFyQjtBQUNBLFFBQUksZUFBZSxrQkFBZixFQUFKLEVBQXlDO0FBQ3ZDLG9CQUFjLGVBQWUsUUFBZixHQUEwQixHQUExQixHQUFnQyxXQUE5QztBQUNELEtBRkQsTUFFTztBQUNMO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPLFdBQVA7QUFDRCxDQWREOztBQWdCQSxhQUFhLFNBQWIsQ0FBdUIsNEJBQXZCLEdBQXNELFlBQVk7QUFDaEUsTUFBSSxpQkFBaUIsS0FBckI7O0FBRUEsT0FBSyxPQUFMLENBQWEsVUFBVSxXQUFWLEVBQXVCO0FBQ2xDLFFBQUksbUJBQW1CLEVBQXZCOztBQUVBLFFBQUksaUJBQWlCLFVBQVUsY0FBVixFQUEwQjtBQUNoRDtBQUNHLFVBQUksaUJBQWlCLE9BQWpCLENBQXlCLGNBQXpCLE1BQTZDLENBQUMsQ0FBbEQsRUFBcUQ7QUFDbkQseUJBQWlCLElBQWpCO0FBQ0E7QUFDRDs7QUFFRCxVQUFJLGVBQWUsa0JBQWYsRUFBSixFQUF5QztBQUN2Qyx5QkFBaUIsSUFBakIsQ0FBc0IsY0FBdEI7QUFDQSxZQUFJLGlCQUFpQixLQUFLLHVCQUFMLENBQTZCLGVBQWUsRUFBNUMsQ0FBckI7QUFDQSx1QkFBZSxPQUFmLENBQXVCLGNBQXZCO0FBQ0EseUJBQWlCLEdBQWpCO0FBQ0Q7QUFDRixLQWJvQixDQWFuQixJQWJtQixDQWFkLElBYmMsQ0FBckI7O0FBZUEsbUJBQWUsV0FBZjtBQUNELEdBbkJZLENBbUJYLElBbkJXLENBbUJOLElBbkJNLENBQWI7O0FBcUJBLFNBQU8sY0FBUDtBQUNELENBekJEOztBQTJCQSxPQUFPLE9BQVAsR0FBaUIsWUFBakI7OztBQ2xUQSxJQUFJLGtCQUFrQixRQUFRLDRCQUFSLENBQXRCO0FBQ0EsSUFBSSwyQkFBMkIsUUFBUSxxQ0FBUixDQUEvQjtBQUNBLElBQUksdUJBQXVCLFFBQVEsaUNBQVIsQ0FBM0I7QUFDQSxJQUFJLHdCQUF3QixRQUFRLGtDQUFSLENBQTVCO0FBQ0EsSUFBSSxnQkFBZ0IsUUFBUSwwQkFBUixDQUFwQjtBQUNBLElBQUksZUFBZSxRQUFRLHlCQUFSLENBQW5CO0FBQ0EsSUFBSSxnQkFBZ0IsUUFBUSwwQkFBUixDQUFwQjtBQUNBLElBQUksZUFBZSxRQUFRLHlCQUFSLENBQW5CO0FBQ0EsSUFBSSxvQkFBb0IsUUFBUSw4QkFBUixDQUF4QjtBQUNBLElBQUksZ0JBQWdCLFFBQVEsMEJBQVIsQ0FBcEI7QUFDQSxJQUFJLGVBQWUsUUFBUSx5QkFBUixDQUFuQjs7QUFFQSxPQUFPLE9BQVAsR0FBaUI7QUFDZixpQkFEZTtBQUVmLDBCQUZlO0FBR2Ysc0JBSGU7QUFJZix1QkFKZTtBQUtmLGVBTGU7QUFNZixjQU5lO0FBT2YsZUFQZTtBQVFmLGNBUmU7QUFTZixtQkFUZTtBQVVmLGVBVmU7QUFXZjtBQVhlLENBQWpCOzs7QUNaQSxJQUFJLFdBQVcsUUFBUSxZQUFSLENBQWY7QUFDQSxJQUFJLGVBQWUsUUFBUSxnQkFBUixDQUFuQjtBQUNBLElBQUksVUFBVSxVQUFVLFVBQVYsRUFBc0IsT0FBdEIsRUFBK0I7QUFDM0MsTUFBSSxJQUFJLFFBQVEsQ0FBaEI7QUFDQSxNQUFJLFdBQVcsUUFBUSxRQUF2QjtBQUNBLE1BQUksU0FBUyxRQUFRLE1BQXJCO0FBQ0E7QUFDQSxTQUFPLGNBQVAsQ0FBc0IsSUFBdEIsRUFBNEIsR0FBNUIsRUFBaUM7QUFDL0IsV0FBTyxDQUR3QjtBQUUvQixnQkFBWTtBQUZtQixHQUFqQztBQUlBLFNBQU8sY0FBUCxDQUFzQixJQUF0QixFQUE0QixRQUE1QixFQUFzQztBQUNwQyxXQUFPLE1BRDZCO0FBRXBDLGdCQUFZO0FBRndCLEdBQXRDO0FBSUEsU0FBTyxjQUFQLENBQXNCLElBQXRCLEVBQTRCLFVBQTVCLEVBQXdDO0FBQ3RDLFdBQU8sUUFEK0I7QUFFdEMsZ0JBQVk7QUFGMEIsR0FBeEM7QUFJQSxNQUFJLENBQUMsS0FBSyxDQUFWLEVBQWEsTUFBTSxJQUFJLEtBQUosQ0FBVSxnQkFBVixDQUFOO0FBQ2YsTUFBSSxDQUFDLEtBQUssUUFBVixFQUFvQjtBQUNsQixZQUFRLEtBQVIsMkRBQWUsSUFBSSxLQUFKLEVBQUQsQ0FBYyxLQUE1Qjs7QUFFQSxVQUFNLElBQUksS0FBSixDQUFVLGtCQUFWLENBQU47QUFDRDtBQUNELE1BQUcsQ0FBQyxLQUFLLE1BQVQsRUFBZ0IsTUFBTSxJQUFJLEtBQUosQ0FBVSxnQkFBVixDQUFOO0FBQ2QsT0FBSyxRQUFMLENBQWMsVUFBZDtBQUNELENBekJEOztBQTJCQSxRQUFRLFNBQVIsR0FBb0I7O0FBRWxCLFlBQVUsVUFBVSxVQUFWLEVBQXNCO0FBQzlCLFlBQVEsR0FBUiw0Q0FBWSxJQUFaO0FBQ0EsU0FBSyxJQUFJLEdBQVQsSUFBZ0IsVUFBaEIsRUFBNEI7QUFDMUIsY0FBUSxHQUFSLDJDQUFZLEdBQVo7QUFDQSxXQUFLLEdBQUwsSUFBWSxXQUFXLEdBQVgsQ0FBWjtBQUNEO0FBQ0QsWUFBUSxHQUFSLDRDQUFZLElBQVo7QUFDQSxRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsUUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDQSxRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksWUFBWSxLQUFLLFNBQXJCO0FBQ0EsU0FBSyxTQUFMLEdBQWlCLElBQUksWUFBSixDQUFpQixLQUFLLFNBQXRCLEVBQWlDLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQWpDLENBQWpCO0FBQ0QsR0FkaUI7O0FBZ0JuQjs7Ozs7QUFLQyxtQkFBaUIsVUFBVSxnQkFBVixFQUE0QjtBQUMzQyxXQUFPLEtBQUssU0FBTCxDQUFlLGVBQWYsQ0FBK0IsZ0JBQS9CLENBQVA7QUFDRCxHQXZCaUI7O0FBeUJuQjs7Ozs7QUFLQywyQkFBeUIsVUFBVSxnQkFBVixFQUE0QjtBQUNuRCxXQUFPLEtBQUssU0FBTCxDQUFlLHVCQUFmLENBQXVDLGdCQUF2QyxDQUFQO0FBQ0QsR0FoQ2lCOztBQWtDbkI7Ozs7QUFJQyxrQkFBZ0IsWUFBWTtBQUMxQixRQUFJLE1BQU0sQ0FBQyxPQUFELENBQVY7QUFDQSxTQUFLLFNBQUwsQ0FBZSxPQUFmLENBQXVCLFVBQVUsUUFBVixFQUFvQjtBQUN6QyxVQUFJLElBQUosQ0FBUyxTQUFTLEVBQWxCO0FBQ0QsS0FGRDtBQUdBLFdBQU8sR0FBUDtBQUNELEdBNUNpQjs7QUE4Q25COzs7O0FBSUMsZ0NBQThCLFlBQVk7QUFDeEMsUUFBSSxNQUFNLENBQUMsT0FBRCxDQUFWO0FBQ0EsU0FBSyxTQUFMLENBQWUsT0FBZixDQUF1QixVQUFVLFFBQVYsRUFBb0I7QUFDekMsVUFBSSxTQUFTLHFCQUFULEVBQUosRUFBc0M7QUFDcEMsWUFBSSxJQUFKLENBQVMsU0FBUyxFQUFsQjtBQUNEO0FBQ0YsS0FKRDtBQUtBLFdBQU8sR0FBUDtBQUNELEdBMURpQjs7QUE0RGxCLGdCQUFjLFlBQVk7QUFDeEIsUUFBSSxZQUFZLEtBQUssUUFBckI7QUFDRjtBQUNFLFFBQUksS0FBSyxRQUFMLENBQWMsSUFBZCxLQUF1QixTQUEzQixFQUFzQztBQUNwQyxrQkFBWSxDQUFDLFNBQUQsQ0FBWjtBQUNEOztBQUVELFFBQUksT0FBTyxFQUFYO0FBQ0EsY0FBVSxPQUFWLENBQWtCLFVBQVUsUUFBVixFQUFvQjtBQUN2QztBQUNHLFVBQUksT0FBTyxVQUFVLEdBQVYsRUFBZSxNQUFmLEVBQXVCO0FBQ2hDLGVBQU8sSUFBSSxNQUFKLEdBQWEsTUFBcEIsRUFBNEI7QUFBRSxnQkFBTSxNQUFNLEdBQVo7QUFBaUI7QUFDL0MsZUFBTyxHQUFQO0FBQ0QsT0FIRDs7QUFLQSxVQUFJLEtBQUssc0NBQVQ7QUFDQSxVQUFJLFVBQVUsU0FBUyxLQUFULENBQWUsRUFBZixDQUFkO0FBQ0EsVUFBSSxPQUFKLEVBQWE7QUFDWCxZQUFJLFdBQVcsUUFBUSxDQUFSLENBQWY7QUFDQSxZQUFJLFNBQVMsUUFBUSxDQUFSLENBQWI7QUFDQSxZQUFJLFFBQVEsU0FBUyxRQUFULENBQVo7QUFDQSxZQUFJLE1BQU0sU0FBUyxNQUFULENBQVY7QUFDQSxZQUFJLGNBQWMsQ0FBbEI7QUFDQSxnQkFBUSxHQUFSLG1EQUFZLFFBQVEsQ0FBUixDQUFaO0FBQ0EsWUFBSSxRQUFRLENBQVIsTUFBZSxTQUFuQixFQUE4QjtBQUM1Qix3QkFBYyxTQUFTLFFBQVEsQ0FBUixDQUFULENBQWQ7QUFDRDtBQUNELGFBQUssSUFBSSxJQUFJLEtBQWIsRUFBb0IsS0FBSyxHQUF6QixFQUE4QixLQUFLLFdBQW5DLEVBQWdEO0FBQ25EO0FBQ0ssY0FBSSxTQUFTLE1BQVQsS0FBb0IsT0FBTyxNQUEvQixFQUF1QztBQUNyQyxpQkFBSyxJQUFMLENBQVUsUUFBUSxDQUFSLElBQWEsS0FBSyxFQUFFLFFBQUYsRUFBTCxFQUFtQixTQUFTLE1BQTVCLENBQWIsR0FBbUQsUUFBUSxDQUFSLENBQTdEO0FBQ0QsV0FGRCxNQUVPO0FBQ0wsaUJBQUssSUFBTCxDQUFVLFFBQVEsQ0FBUixJQUFhLENBQWIsR0FBaUIsUUFBUSxDQUFSLENBQTNCO0FBQ0Q7QUFDRjtBQUNELGVBQU8sSUFBUDtBQUNELE9BbkJELE1BbUJPO0FBQ0wsYUFBSyxJQUFMLENBQVUsUUFBVjtBQUNEO0FBQ0YsS0EvQkQ7O0FBaUNBLFdBQU8sSUFBUDtBQUNELEdBdEdpQjs7QUF3R2xCLGtCQUFnQixVQUFVLFFBQVYsRUFBb0IsWUFBcEIsRUFBa0M7QUFDbEQ7QUFDRSxRQUFJLGFBQWEsU0FBakIsRUFBNEI7QUFDaEMsVUFBSSxJQUFJLEtBQUssQ0FBYjtBQUNBLFVBQUksV0FBVyxLQUFLLFFBQXBCO0FBQ0EsVUFBSSxTQUFTLEtBQUssTUFBbEI7QUFDTSxpQkFBVyxJQUFJLFFBQUosQ0FBYSxZQUFiLEVBQTJCLEVBQUMsQ0FBRCxFQUFJLE1BQUosRUFBWSxRQUFaLEVBQTNCLENBQVg7QUFDRDs7QUFFSDtBQUNFLFFBQUksU0FBUyxFQUFULEtBQWdCLFNBQWhCLElBQTZCLFNBQVMsRUFBVCxLQUFnQixhQUFhLEVBQTlELEVBQWtFO0FBQ2hFLFdBQUssU0FBTCxDQUFlLE9BQWYsQ0FBdUIsVUFBVSxlQUFWLEVBQTJCO0FBQ2hELHdCQUFnQixvQkFBaEIsQ0FBcUMsU0FBUyxFQUE5QyxFQUFrRCxhQUFhLEVBQS9EO0FBQ0QsT0FGRDs7QUFJSDtBQUNHLFVBQUksTUFBTSxhQUFhLGVBQWIsQ0FBNkIsT0FBN0IsQ0FBcUMsU0FBUyxFQUE5QyxDQUFWO0FBQ0EsVUFBSSxRQUFRLENBQUMsQ0FBYixFQUFnQjtBQUNkLHFCQUFhLGVBQWIsQ0FBNkIsTUFBN0IsQ0FBb0MsR0FBcEMsRUFBeUMsQ0FBekMsRUFBNEMsYUFBYSxFQUF6RDtBQUNEO0FBQ0Y7O0FBRUQsYUFBUyxVQUFULENBQW9CLFlBQXBCOztBQUVBLFFBQUksS0FBSyxjQUFMLEdBQXNCLE9BQXRCLENBQThCLFNBQVMsRUFBdkMsTUFBK0MsQ0FBQyxDQUFwRCxFQUF1RDtBQUNyRCxXQUFLLFNBQUwsQ0FBZSxJQUFmLENBQW9CLFFBQXBCO0FBQ0Q7QUFDRixHQW5JaUI7QUFvSWxCLGtCQUFnQixVQUFVLGdCQUFWLEVBQTRCO0FBQzFDLFNBQUssU0FBTCxDQUFlLE9BQWYsQ0FBdUIsVUFBVSxRQUFWLEVBQW9CO0FBQ3pDLFVBQUksU0FBUyxpQkFBVCxDQUEyQixpQkFBaUIsRUFBNUMsQ0FBSixFQUFxRDtBQUNuRCxpQkFBUyxvQkFBVCxDQUE4QixpQkFBaUIsRUFBL0M7QUFDQSxZQUFJLFNBQVMsZUFBVCxDQUF5QixNQUF6QixLQUFvQyxDQUF4QyxFQUEyQztBQUN6QyxlQUFLLGNBQUwsQ0FBb0IsUUFBcEI7QUFDRDtBQUNGO0FBQ0YsS0FQc0IsQ0FPckIsSUFQcUIsQ0FPaEIsSUFQZ0IsQ0FBdkI7O0FBU0EsU0FBSyxJQUFJLENBQVQsSUFBYyxLQUFLLFNBQW5CLEVBQThCO0FBQzVCLFVBQUksS0FBSyxTQUFMLENBQWUsQ0FBZixFQUFrQixFQUFsQixLQUF5QixpQkFBaUIsRUFBOUMsRUFBa0Q7QUFDaEQsYUFBSyxTQUFMLENBQWUsTUFBZixDQUFzQixDQUF0QixFQUF5QixDQUF6QjtBQUNBO0FBQ0Q7QUFDRjtBQUNGLEdBcEppQjtBQXFKbEIsa0JBQWdCLFlBQVk7QUFDMUIsV0FBTyxLQUFLLEdBQUwsQ0FBUyxPQUFULENBQWlCLEtBQWpCLEVBQXdCLEdBQXhCLENBQVA7QUFDRCxHQXZKaUI7QUF3SmxCLGlCQUFlLFlBQVk7QUFDekIsUUFBSSxhQUFhLEtBQUssS0FBTCxDQUFXLEtBQUssU0FBTCxDQUFlLElBQWYsQ0FBWCxDQUFqQjtBQUNBLFdBQU8sV0FBVyxJQUFsQjtBQUNBLFdBQU8sS0FBSyxTQUFMLENBQWUsVUFBZixDQUFQO0FBQ0QsR0E1SmlCO0FBNkpsQixpQkFBZSxVQUFVLFdBQVYsRUFBdUI7QUFDcEMsUUFBSSxhQUFhLEtBQUssS0FBTCxDQUFXLFdBQVgsQ0FBakI7QUFDQSxTQUFLLFFBQUwsQ0FBYyxVQUFkO0FBQ0QsR0FoS2lCO0FBaUtuQjtBQUNDLGtCQUFnQixZQUFZO0FBQzFCLFFBQUksVUFBVSxFQUFkO0FBQ0EsU0FBSyxTQUFMLENBQWUsT0FBZixDQUF1QixVQUFVLFFBQVYsRUFBb0I7QUFDekMsZ0JBQVUsUUFBUSxNQUFSLENBQWUsU0FBUyxjQUFULEVBQWYsQ0FBVjtBQUNELEtBRkQ7O0FBSUEsV0FBTyxPQUFQO0FBQ0QsR0F6S2lCO0FBMEtsQix3QkFBc0IsVUFBVSxJQUFWLEVBQWdCO0FBQ3BDLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0EsUUFBSSxVQUFVLEtBQUssY0FBTCxFQUFkO0FBQUEsUUFDRSxZQUFZLEdBRGQ7QUFBQSxRQUVFLFVBQVUsSUFGWjtBQUFBLFFBR0UsVUFBVSxDQUFDLFFBQUQsQ0FIWixDQUZvQyxDQUtiOztBQUV6QjtBQUNFLFlBQVEsSUFBUixDQUFhLFFBQVEsSUFBUixDQUFhLFNBQWIsSUFBMEIsT0FBdkM7O0FBRUY7QUFDRSxTQUFLLE9BQUwsQ0FBYSxVQUFVLEdBQVYsRUFBZTtBQUMxQixVQUFJLFVBQVUsRUFBZDtBQUNBLGNBQVEsT0FBUixDQUFnQixVQUFVLE1BQVYsRUFBa0I7QUFDaEMsWUFBSSxXQUFXLElBQUksTUFBSixDQUFmO0FBQ0EsWUFBSSxhQUFhLFNBQWpCLEVBQTRCO0FBQzFCLHFCQUFXLEVBQVg7QUFDRCxTQUZELE1BRVUsSUFBSSxPQUFPLFFBQVAsS0FBb0IsUUFBeEIsRUFBa0M7QUFDMUMscUJBQVcsS0FBSyxTQUFMLENBQWUsUUFBZixDQUFYO0FBQ0Q7O0FBRUQsZ0JBQVEsSUFBUixDQUFhLE1BQU0sU0FBUyxPQUFULENBQWlCLElBQWpCLEVBQXVCLElBQXZCLEVBQTZCLElBQTdCLEVBQU4sR0FBNEMsR0FBekQ7QUFDRCxPQVREO0FBVUEsY0FBUSxJQUFSLENBQWEsUUFBUSxJQUFSLENBQWEsU0FBYixJQUEwQixPQUF2QztBQUNELEtBYkQ7O0FBZUEsV0FBTyxJQUFJLE9BQU8sSUFBWCxDQUFnQixPQUFoQixFQUF5QixFQUFDLE1BQU0sVUFBUCxFQUF6QixDQUFQO0FBQ0QsR0FyTWlCO0FBc01sQixtQkFBaUIsVUFBVSxVQUFWLEVBQXNCO0FBQ3JDLFdBQU8sS0FBSyxTQUFMLENBQWUsZUFBZixDQUErQixVQUEvQixDQUFQO0FBQ0QsR0F4TWlCO0FBeU1uQjs7OztBQUlDLFNBQU8sWUFBWTtBQUNqQixRQUFJLElBQUksS0FBSyxDQUFiO0FBQ0EsUUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxRQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNBLFFBQUksYUFBYSxLQUFLLEtBQUwsQ0FBVyxLQUFLLFNBQUwsQ0FBZSxJQUFmLENBQVgsQ0FBakI7QUFDQSxRQUFJLFVBQVUsSUFBSSxPQUFKLENBQVksVUFBWixFQUF3QixFQUFDLENBQUQsRUFBSSxRQUFKLEVBQWMsTUFBZCxFQUF4QixDQUFkO0FBQ0EsV0FBTyxPQUFQO0FBQ0Q7QUFwTmlCLENBQXBCOztBQXVOQSxPQUFPLE9BQVAsR0FBaUIsT0FBakI7OztBQ3BQQSxJQUFJLFVBQVUsUUFBUSxXQUFSLENBQWQ7O0FBRUEsSUFBSSxRQUFRLFVBQVUsTUFBVixFQUFrQixPQUFsQixFQUEyQjtBQUNyQyxPQUFLLE1BQUwsR0FBYyxNQUFkO0FBQ0EsT0FBSyxDQUFMLEdBQVMsUUFBUSxDQUFqQjtBQUNGLE9BQUssUUFBTCxHQUFnQixRQUFRLFFBQXhCO0FBQ0EsT0FBSyxNQUFMLEdBQWMsUUFBUSxNQUF0QjtBQUNFLE1BQUksQ0FBQyxLQUFLLENBQVYsRUFBYSxNQUFNLElBQUksS0FBSixDQUFVLGlCQUFWLENBQU47QUFDZixNQUFJLENBQUMsS0FBSyxRQUFWLEVBQW9CLE1BQU0sSUFBSSxLQUFKLENBQVUsa0JBQVYsQ0FBTjtBQUNwQixNQUFHLENBQUMsS0FBSyxNQUFULEVBQWdCLE1BQU0sSUFBSSxLQUFKLENBQVUsZ0JBQVYsQ0FBTjtBQUNaO0FBQ0YsT0FBSyxTQUFMLEdBQWlCLElBQUksT0FBSixDQUFZLEtBQUssTUFBTCxDQUFZLFNBQXhCLENBQWpCO0FBQ0QsQ0FWRDtBQVdBLElBQUksMEJBQTBCLFVBQVUsRUFBVixFQUFjO0FBQzFDLE9BQUssRUFBTCxHQUFVLEVBQVY7QUFDRCxDQUZEOztBQUlBLHdCQUF3QixTQUF4QixHQUFvQztBQUNsQyxhQUFXLFVBQVUsSUFBVixFQUFnQixRQUFoQixFQUEwQjtBQUNuQyxRQUFJLEtBQUssTUFBTCxLQUFnQixDQUFwQixFQUF1QjtBQUNyQjtBQUNELEtBRkQsTUFFTztBQUNMLFdBQUssRUFBTCxDQUFRLFFBQVIsQ0FBaUIsRUFBQyxNQUFNLElBQVAsRUFBakIsRUFBK0IsVUFBVSxHQUFWLEVBQWUsUUFBZixFQUF5QjtBQUN0RCxZQUFJLFFBQVEsSUFBWixFQUFrQjtBQUNoQixrQkFBUSxHQUFSLHVGQUFZLDJDQUFaLEVBQXlELEdBQXpEO0FBQ0Q7QUFDRDtBQUNELE9BTEQ7QUFNRDtBQUNGO0FBWmlDLENBQXBDOztBQWVBLE1BQU0sU0FBTixHQUFrQjs7QUFFaEIsNkJBQTJCLFVBQVUsTUFBVixFQUFrQjtBQUMzQyxXQUFPLGtCQUFrQixPQUFPLE9BQVAsQ0FBZSx5QkFBZixFQUEwQyxHQUExQyxDQUF6QjtBQUNELEdBSmU7QUFLaEIsNEJBQTBCLFVBQVUsU0FBVixFQUFxQjtBQUM3QyxRQUFJLFNBQVMsS0FBSyx5QkFBTCxDQUErQixTQUEvQixDQUFiO0FBQ0EsV0FBTyxLQUFLLE1BQUwsQ0FBWSxNQUFaLEdBQXFCLE1BQTVCO0FBQ0QsR0FSZTtBQVNoQixvQkFBa0IsVUFBVSxTQUFWLEVBQXFCO0FBQ3JDLFFBQUksYUFBYSxLQUFLLHdCQUFMLENBQThCLFNBQTlCLENBQWpCO0FBQ0EsV0FBTyxJQUFJLE9BQUosQ0FBWSxVQUFaLENBQVA7QUFDRCxHQVplOztBQWNqQjs7Ozs7QUFLQyxxQkFBbUIsVUFBVSxTQUFWLEVBQXFCLFFBQXJCLEVBQStCO0FBQ2hELFFBQUksYUFBYSxLQUFLLHdCQUFMLENBQThCLFNBQTlCLENBQWpCO0FBQ0EsUUFBSSxRQUFRLElBQVo7O0FBRUEsWUFBUSxPQUFSLENBQWdCLFVBQWhCLEVBQTRCLFlBQVk7QUFDdEMsVUFBSSxLQUFLLE1BQU0sZ0JBQU4sQ0FBdUIsU0FBdkIsQ0FBVDtBQUNBLFVBQUksV0FBVyxJQUFJLHVCQUFKLENBQTRCLEVBQTVCLENBQWY7QUFDQSxlQUFTLFFBQVQ7QUFDRCxLQUpEO0FBS0QsR0E1QmU7O0FBOEJoQixpQkFBZSxVQUFVLE9BQVYsRUFBbUIsUUFBbkIsRUFBNkI7QUFDMUMsUUFBSSxjQUFjLEtBQUssS0FBTCxDQUFXLEtBQUssU0FBTCxDQUFlLE9BQWYsQ0FBWCxDQUFsQjs7QUFFQSxRQUFJLENBQUMsUUFBUSxHQUFiLEVBQWtCO0FBQ2hCLGNBQVEsR0FBUixtRkFBWSxtQ0FBWixFQUFpRCxPQUFqRDtBQUNEOztBQUVELFNBQUssU0FBTCxDQUFlLEdBQWYsQ0FBbUIsV0FBbkIsRUFBZ0MsVUFBVSxPQUFWLEVBQW1CLEdBQW5CLEVBQXdCLFFBQXhCLEVBQWtDO0FBQzFEO0FBQ04sY0FBUSxJQUFSLEdBQWUsU0FBUyxHQUF4QjtBQUNBLGVBQVMsT0FBVDtBQUNELEtBSitCLENBSTlCLElBSjhCLENBSXpCLElBSnlCLEVBSW5CLE9BSm1CLENBQWhDO0FBS0QsR0ExQ2U7QUEyQ2hCLGVBQWEsVUFBVSxPQUFWLEVBQW1CLFFBQW5CLEVBQTZCO0FBQ3BDO0FBQ0osU0FBSyxhQUFMLENBQW1CLE9BQW5CLEVBQTRCLFFBQTVCO0FBQ0QsR0E5Q2U7QUErQ2hCLGlCQUFlLFVBQVUsT0FBVixFQUFtQixRQUFuQixFQUE2QjtBQUMxQyxjQUFVLEtBQUssS0FBTCxDQUFXLEtBQUssU0FBTCxDQUFlLE9BQWYsQ0FBWCxDQUFWOztBQUVBLFNBQUssU0FBTCxDQUFlLE1BQWYsQ0FBc0IsT0FBdEIsRUFBK0IsVUFBVSxHQUFWLEVBQWUsUUFBZixFQUF5QjtBQUNoRDs7QUFFVDtBQUNHLFVBQUksYUFBYSxLQUFLLHdCQUFMLENBQThCLFFBQVEsR0FBdEMsQ0FBakI7QUFDQSxjQUFRLE9BQVIsQ0FBZ0IsVUFBaEIsRUFBNEIsWUFBWTtBQUN0QztBQUNELE9BRkQ7QUFHRCxLQVI4QixDQVE3QixJQVI2QixDQVF4QixJQVJ3QixDQUEvQjtBQVNELEdBM0RlO0FBNERoQixrQkFBZ0IsVUFBVSxRQUFWLEVBQW9CO0FBQ2xDLFFBQUksSUFBSSxLQUFLLENBQWI7QUFDSixRQUFJLFdBQVcsS0FBSyxRQUFwQjtBQUNBLFFBQUksU0FBUyxLQUFLLE1BQWxCO0FBQ0ksU0FBSyxTQUFMLENBQWUsT0FBZixDQUF1QixFQUFDLGNBQWMsSUFBZixFQUF2QixFQUE2QyxVQUFVLEdBQVYsRUFBZSxRQUFmLEVBQXlCO0FBQ3BFLFVBQUksV0FBVyxFQUFmO0FBQ0EsV0FBSyxJQUFJLENBQVQsSUFBYyxTQUFTLElBQXZCLEVBQTZCO0FBQzNCLFlBQUksVUFBVSxTQUFTLElBQVQsQ0FBYyxDQUFkLEVBQWlCLEdBQS9CO0FBQ0EsWUFBSSxDQUFDLE9BQU8sU0FBWixFQUF1QjtBQUNyQixvQkFBVSxJQUFJLE9BQUosQ0FBWSxPQUFaLEVBQXFCLEVBQUMsQ0FBRCxFQUFJLFFBQUosRUFBYyxNQUFkLEVBQXJCLENBQVY7QUFDRDs7QUFFRCxpQkFBUyxJQUFULENBQWMsT0FBZDtBQUNEO0FBQ0QsZUFBUyxRQUFUO0FBQ0QsS0FYRDtBQVlELEdBNUVlOztBQThFaEIsa0JBQWdCLFVBQVUsT0FBVixFQUFtQixRQUFuQixFQUE2QjtBQUMzQyxRQUFJLEtBQUssS0FBSyxnQkFBTCxDQUFzQixRQUFRLEdBQTlCLENBQVQ7QUFDQSxPQUFHLE9BQUgsQ0FBVyxFQUFDLGNBQWMsSUFBZixFQUFYLEVBQWlDLFVBQVUsR0FBVixFQUFlLFFBQWYsRUFBeUI7QUFDeEQsVUFBSSxlQUFlLEVBQW5CO0FBQ0EsV0FBSyxJQUFJLENBQVQsSUFBYyxTQUFTLElBQXZCLEVBQTZCO0FBQzNCLFlBQUksTUFBTSxTQUFTLElBQVQsQ0FBYyxDQUFkLEVBQWlCLEdBQTNCO0FBQ0EscUJBQWEsSUFBYixDQUFrQixHQUFsQjtBQUNEO0FBQ0QsZUFBUyxZQUFUO0FBQ0QsS0FQRDtBQVFELEdBeEZlO0FBeUZqQjtBQUNDLGlCQUFlLFVBQVUsU0FBVixFQUFxQixRQUFyQixFQUErQjtBQUM1QyxTQUFLLGNBQUwsQ0FBb0IsVUFBVSxRQUFWLEVBQW9CO0FBQ3RDLFVBQUksZUFBZSxLQUFuQjtBQUNBLFdBQUssSUFBSSxDQUFULElBQWMsUUFBZCxFQUF3QjtBQUN0QixZQUFJLFNBQVMsQ0FBVCxFQUFZLEdBQVosS0FBb0IsU0FBeEIsRUFBbUM7QUFDakMseUJBQWUsSUFBZjtBQUNEO0FBQ0Y7QUFDRCxlQUFTLFlBQVQ7QUFDRCxLQVJEO0FBU0Q7QUFwR2UsQ0FBbEI7O0FBdUdBLE9BQU8sT0FBUCxHQUFpQixLQUFqQjs7O0FDdklBLElBQUksY0FBYyxRQUFRLGNBQVIsRUFBd0IsV0FBMUM7QUFDQTs7QUFFQTs7OztBQUlBLFNBQVMsaUJBQVQsQ0FBNEIsMEJBQTVCLEVBQXdELE9BQXhELEVBQWlFO0FBQy9ELE1BQUksSUFBSSxRQUFRLENBQWhCO0FBQ0EsTUFBSSxTQUFTLFFBQVEsTUFBckI7QUFDQSxNQUFJLFdBQVcsUUFBUSxRQUF2Qjs7QUFFQSxTQUFPLGNBQVAsQ0FBc0IsSUFBdEIsRUFBNEIsR0FBNUIsRUFBaUM7QUFDL0IsV0FBTyxDQUR3QjtBQUUvQixnQkFBWTtBQUZtQixHQUFqQztBQUlBLFNBQU8sY0FBUCxDQUFzQixJQUF0QixFQUE0QixRQUE1QixFQUFzQztBQUNwQyxXQUFPLE1BRDZCO0FBRXBDLGdCQUFZO0FBRndCLEdBQXRDO0FBSUEsU0FBTyxjQUFQLENBQXNCLElBQXRCLEVBQTRCLFVBQTVCLEVBQXdDO0FBQ3RDLFdBQU8sUUFEK0I7QUFFdEMsZ0JBQVk7QUFGMEIsR0FBeEM7QUFJQSxNQUFJLENBQUMsS0FBSyxDQUFWLEVBQWEsTUFBTSxJQUFJLEtBQUosQ0FBVSxpQkFBVixDQUFOO0FBQ2IsTUFBSSxDQUFDLEtBQUssUUFBVixFQUFvQjtBQUNsQixVQUFNLElBQUksS0FBSixDQUFVLGtCQUFWLENBQU47QUFDRDtBQUNELE1BQUcsQ0FBQyxLQUFLLE1BQVQsRUFBaUIsTUFBTSxJQUFJLEtBQUosQ0FBVSxnQkFBVixDQUFOO0FBQ2YsT0FBSywwQkFBTCxHQUFrQywwQkFBbEM7QUFDQSxPQUFLLGFBQUwsR0FBcUIsRUFBckI7QUFDRDs7QUFFSCxrQkFBa0IsU0FBbEIsR0FBOEIsRUFBOUI7O0FBRUEsa0JBQWtCLFNBQWxCLENBQTRCLElBQTVCLEdBQW1DLFVBQVUsT0FBVixFQUFtQjtBQUNwRCxNQUFJLElBQUksS0FBSyxDQUFiO0FBQ0YsTUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxNQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNFLE1BQUksS0FBSyxPQUFMLENBQWEsT0FBYixDQUFKLEVBQTJCO0FBQ3pCLFdBQU8sS0FBUDtBQUNELEdBRkQsTUFFTztBQUNMLFFBQUksa0JBQWtCLEtBQUssa0JBQUwsQ0FBd0IsT0FBeEIsQ0FBdEI7QUFDQSxTQUFLLGFBQUwsQ0FBbUIsZUFBbkIsSUFBc0MsSUFBdEM7QUFDQSxVQUFNLFNBQU4sQ0FBZ0IsSUFBaEIsQ0FBcUIsSUFBckIsQ0FBMEIsSUFBMUIsRUFBZ0MsRUFBRSxPQUFGLEVBQVcsS0FBWCxDQUFpQixJQUFqQixFQUF1QixDQUF2QixDQUFoQztBQUNBLFdBQU8sSUFBUDtBQUNEO0FBQ0YsQ0FaRDs7QUFjQSxrQkFBa0IsU0FBbEIsQ0FBNEIsa0JBQTVCLEdBQWlELFVBQVUsT0FBVixFQUFtQjtBQUNsRSxNQUFJLElBQUksS0FBSyxDQUFiO0FBQ0YsTUFBSSxXQUFXLEtBQUssUUFBcEI7QUFDQSxNQUFJLFNBQVMsS0FBSyxNQUFsQjtBQUNFLE1BQUksS0FBSywwQkFBTCxLQUFvQyxZQUF4QyxFQUFzRDtBQUNwRCxRQUFJLGNBQWMsRUFBRSxPQUFGLEVBQVcsSUFBWCxHQUFrQixJQUFsQixFQUFsQjtBQUNBLFdBQU8sV0FBUDtBQUNELEdBSEQsTUFHTyxJQUFJLEtBQUssMEJBQUwsS0FBb0MsZ0JBQXhDLEVBQTBEO0FBQy9ELFFBQUksY0FBYyxFQUFFLGtEQUFGLEVBQXNELE1BQXRELENBQTZELEVBQUUsT0FBRixFQUFXLEVBQVgsQ0FBYyxDQUFkLEVBQWlCLEtBQWpCLEVBQTdELEVBQXVGLElBQXZGLEVBQWxCO0FBQ0EsV0FBTyxXQUFQO0FBQ0QsR0FITSxNQUdBLElBQUksS0FBSywwQkFBTCxLQUFvQyxZQUF4QyxFQUFzRDtBQUM3RDtBQUNFLFFBQUksV0FBVyxFQUFFLE9BQUYsRUFBVyxFQUFYLENBQWMsQ0FBZCxFQUFpQixLQUFqQixFQUFmOztBQUVBLFFBQUksYUFBYSxVQUFVLFFBQVYsRUFBb0I7QUFDbkMsZUFBUyxRQUFULEdBQ0QsTUFEQyxDQUNNLFlBQVk7QUFDdEIsWUFBSSxLQUFLLFFBQUwsS0FBa0IsQ0FBdEIsRUFBeUI7QUFDdkIscUJBQVcsRUFBRSxJQUFGLENBQVg7QUFDRDtBQUNELGVBQU8sS0FBSyxRQUFMLElBQWlCLENBQXhCLENBSnNCLENBSUk7QUFDM0IsT0FOSyxFQU1ILE1BTkc7QUFPRCxLQVJEO0FBU0EsZUFBVyxRQUFYOztBQUVBLFFBQUksY0FBYyxFQUFFLGtEQUFGLEVBQXNELE1BQXRELENBQTZELFFBQTdELEVBQXVFLElBQXZFLEVBQWxCO0FBQ0EsV0FBTyxXQUFQO0FBQ0QsR0FqQk0sTUFpQkEsSUFBSSxLQUFLLDBCQUFMLEtBQW9DLG1CQUF4QyxFQUE2RDtBQUNsRSxRQUFJLEtBQUssSUFBSSxXQUFKLENBQWdCO0FBQ3ZCLGdDQUEwQixLQURIO0FBRXZCLGNBQVEsRUFBRSxNQUFGLEVBQVUsQ0FBVixDQUZlO0FBR3ZCLDZCQUF1QjtBQUhBLEtBQWhCLENBQVQ7QUFLQSxRQUFJLGNBQWMsR0FBRyxjQUFILENBQWtCLENBQUMsT0FBRCxDQUFsQixDQUFsQjtBQUNBLFdBQU8sV0FBUDtBQUNELEdBUk0sTUFRQTtBQUNMLFVBQU0sd0NBQXdDLEtBQUssMEJBQW5EO0FBQ0Q7QUFDRixDQXRDRDs7QUF3Q0EsT0FBTyxPQUFQLEdBQWlCLGlCQUFqQjs7QUFFQSxrQkFBa0IsU0FBbEIsQ0FBNEIsT0FBNUIsR0FBc0MsVUFBVSxPQUFWLEVBQW1CO0FBQ3ZELE1BQUksa0JBQWtCLEtBQUssa0JBQUwsQ0FBd0IsT0FBeEIsQ0FBdEI7QUFDQSxNQUFJLFVBQVUsbUJBQW1CLEtBQUssYUFBdEM7QUFDQSxTQUFPLE9BQVA7QUFDRCxDQUpEOzs7QUMzRkE7QUFDQSxNQUFNLE9BQU8sUUFBUSxZQUFSLENBQWI7QUFDQSxNQUFNLHFCQUFxQixRQUFRLHNCQUFSLENBQTNCO0FBQ0EsSUFBSSxpQkFBaUIsUUFBUSxpQkFBUixDQUFyQjtBQUNBLElBQUksdUJBQXVCLFFBQVEsdUNBQVIsQ0FBM0I7O0FBRUEsTUFBTSxrQkFBa0IsVUFBVSxPQUFWLEVBQW1CO0FBQ3pDLE9BQUssYUFBTCxHQUFxQixRQUFRLGFBQTdCO0FBQ0EsUUFBTSxXQUFXLEVBQWpCO0FBQ0EsT0FBSyxRQUFMLEdBQWdCLFFBQWhCOztBQUVBLE9BQUssTUFBTCxHQUFjLEtBQUssa0JBQUwsQ0FBZDs7QUFFQSxPQUFLLE1BQUwsQ0FBWSxnQkFBWixDQUE2QixTQUE3QixFQUF3QyxVQUFVLEVBQVYsRUFBYztBQUNwRCxVQUFNLE9BQU8sR0FBRyxJQUFoQjtBQUNBLFFBQUksQ0FBQyxLQUFLLElBQVYsRUFBZ0I7QUFDZCxhQUFPLFFBQVEsS0FBUix3REFBYyxLQUFLLEdBQW5CLENBQVA7QUFDRDtBQUNELFFBQUksS0FBSyxJQUFMLElBQWEsQ0FBQyxTQUFTLEtBQUssSUFBZCxDQUFsQixFQUF1QztBQUNyQyxhQUFPLFFBQVEsS0FBUiwwRUFBYyxjQUFkLEVBQThCLEtBQUssSUFBbkMsQ0FBUDtBQUNEO0FBQ0QsUUFBSSxLQUFLLEdBQVQsRUFBYztBQUNaLGNBQVEsS0FBUix3REFBYyxLQUFLLEdBQW5CO0FBQ0EsZUFBUyxLQUFLLElBQWQsRUFBb0IsTUFBcEIsQ0FBMkIsSUFBSSxLQUFKLENBQVUsS0FBSyxHQUFmLENBQTNCO0FBQ0EsYUFBTyxTQUFTLEtBQUssSUFBZCxDQUFQO0FBQ0E7QUFDRDtBQUNELGFBQVMsS0FBSyxJQUFkLEVBQW9CLE9BQXBCLENBQTRCLEtBQUssSUFBakM7QUFDQSxXQUFPLFNBQVMsS0FBSyxJQUFkLENBQVA7QUFDRCxHQWhCRDtBQWlCQSxPQUFLLE1BQUwsQ0FBWSxXQUFaLENBQXdCO0FBQ3RCLFdBQU8sTUFEZTtBQUV0QixVQUFNLE1BRmdCO0FBR3RCO0FBSHNCLEdBQXhCO0FBS0EsV0FBUyxJQUFULEdBQWdCO0FBQ2QsYUFBUyxZQUFZO0FBQ25CLGNBQVEsR0FBUix3RUFBWSxzQkFBWjtBQUNELEtBSGE7QUFJZCxZQUFRLFVBQVUsR0FBVixFQUFlO0FBQ3JCLGNBQVEsS0FBUixtREFBYyxHQUFkO0FBQ0Q7QUFOYSxHQUFoQjtBQVFELENBckNEOztBQXVDQSxnQkFBZ0IsU0FBaEIsR0FBNEI7QUFDMUIsV0FBUyxVQUFVLEdBQVYsRUFBZSxRQUFmLEVBQXlCO0FBQ2hDLFVBQU0sT0FBTyxTQUFTLEtBQUssTUFBTCxLQUFnQixPQUF6QixFQUFrQyxRQUFsQyxFQUFiO0FBQ0EsUUFBSSxHQUFKLEVBQVMsR0FBVDtBQUNBLFVBQU0sVUFBVSxJQUFJLE9BQUosQ0FBWSxVQUFVLE9BQVYsRUFBbUIsTUFBbkIsRUFBMkI7QUFDckQsWUFBTSxPQUFOO0FBQ0EsWUFBTSxNQUFOO0FBQ0QsS0FIZSxDQUFoQjtBQUlBLFNBQUssUUFBTCxDQUFjLElBQWQsSUFBc0IsRUFBQyxTQUFTLEdBQVYsRUFBZSxRQUFRLEdBQXZCLEVBQXRCO0FBQ0EsU0FBSyxNQUFMLENBQVksV0FBWixDQUF3QjtBQUN0QixhQUFPLFNBRGU7QUFFdEIsU0FGc0I7QUFHdEI7QUFIc0IsS0FBeEI7QUFLQSxZQUFRLElBQVIsQ0FBYSxVQUFVLElBQVYsRUFBZ0I7QUFDM0I7QUFDRCxLQUZELEVBRUcsVUFBVSxHQUFWLEVBQWU7QUFBQyxlQUFTLEdBQVQ7QUFBYyxLQUZqQztBQUdELEdBakJ5QjtBQWtCMUIsY0FBWSxVQUFVLE1BQVYsRUFBa0IsY0FBbEIsRUFBa0M7QUFDNUMsUUFBSSxtQkFBbUIsZUFBZSxRQUFmLEVBQXZCO0FBQ0EsUUFBSSwwQkFBMEIsRUFBOUI7QUFDQSxRQUFJLGVBQWUsZ0JBQWdCLE1BQW5DO0FBQ0EsU0FBSyxJQUFJLElBQVQsSUFBaUIsTUFBakIsRUFBeUI7QUFDdkIsVUFBSSxLQUFLLE1BQUwsQ0FBWSxDQUFaLEVBQWUsWUFBZixNQUFpQyxlQUFyQyxFQUFzRDtBQUNwRCxjQUFNLElBQUksS0FBSixDQUFVLHlDQUFWLENBQU47QUFDRDtBQUNGO0FBQ0QseUJBQXFCLHVCQUFyQixFQUE4QyxJQUE5QyxDQUFtRCxZQUFZO0FBQzdELHVCQUFpQixPQUFqQjtBQUNELEtBRkQ7O0FBSUEsV0FBTyxpQkFBaUIsT0FBakIsRUFBUDtBQUNELEdBaEN5QjtBQWlDMUIsYUFBVyxVQUFVLEdBQVYsRUFBZSxPQUFmLEVBQXdCLGdCQUF4QixFQUEwQyxRQUExQyxFQUFvRCxLQUFwRCxFQUEyRDtBQUNwRSxVQUFNLE9BQU8sU0FBUyxLQUFLLE1BQUwsS0FBZ0IsT0FBekIsRUFBa0MsUUFBbEMsRUFBYjtBQUNBLFFBQUksR0FBSixFQUFTLEdBQVQ7QUFDQSxVQUFNLFVBQVUsSUFBSSxPQUFKLENBQVksVUFBVSxPQUFWLEVBQW1CLE1BQW5CLEVBQTJCO0FBQ3JELFlBQU0sT0FBTjtBQUNBLFlBQU0sTUFBTjtBQUNELEtBSGUsQ0FBaEI7QUFJQSxTQUFLLFFBQUwsQ0FBYyxJQUFkLElBQXNCLEVBQUMsU0FBUyxHQUFWLEVBQWUsUUFBUSxHQUF2QixFQUF0QjtBQUNBLFNBQUssTUFBTCxDQUFZLFdBQVosQ0FBd0I7QUFDdEIsYUFBTyxXQURlO0FBRXRCLFNBRnNCO0FBR3RCLFVBSHNCO0FBSXRCLGVBQVMsS0FBSyxLQUFMLENBQVcsS0FBSyxTQUFMLENBQWUsT0FBZixDQUFYLENBSmE7QUFLdEI7QUFMc0IsS0FBeEI7QUFPQSxZQUFRLElBQVIsQ0FBYSxVQUFVLElBQVYsRUFBZ0I7QUFDM0IsZUFBUyxJQUFULENBQWMsS0FBZCxFQUFxQixJQUFyQixFQUEyQixLQUFLLE9BQWhDO0FBQ0QsS0FGRCxFQUVHLFVBQVUsR0FBVixFQUFlO0FBQ2hCLGVBQVMsR0FBVDtBQUNELEtBSkQ7QUFLRCxHQXJEeUI7QUFzRDFCLFNBQU8sWUFBWTtBQUNqQixZQUFRLEdBQVIsNkVBQVksMEJBQVo7QUFDQSxRQUFJLEtBQUssTUFBVCxFQUFpQixLQUFLLE1BQUwsQ0FBWSxTQUFaO0FBQ2pCLFNBQUssTUFBTCxHQUFjLElBQWQ7QUFDRDtBQTFEeUIsQ0FBNUI7O0FBNkRBLE9BQU8sT0FBUCxHQUFpQixlQUFqQjs7O0FDMUdBLElBQUksU0FBUyxRQUFRLGlCQUFSLENBQWI7QUFDQSxJQUFJLG1CQUFtQixRQUFRLG9CQUFSLENBQXZCO0FBQ0E7Ozs7QUFJQSxJQUFJLHNCQUFzQixVQUFVLFFBQVYsRUFBb0I7QUFDNUM7QUFDQSxNQUFJLGFBQWEsa0JBQWpCLEVBQXFDO0FBQ25DLFdBQU8sZ0JBQVA7QUFDRCxHQUZELE1BRU8sSUFBSSxhQUFhLFVBQWIsSUFBMkIsYUFBYSxlQUE1QyxFQUE2RDtBQUNsRTtBQUNBLFFBQUksbUJBQW1CLEVBQXZCOztBQUVBLFdBQU8sSUFBUCxDQUFZLGdCQUFaLEVBQThCLE9BQTlCLENBQXNDLFVBQVUsSUFBVixFQUFnQjtBQUNwRCxVQUFJLE9BQU8saUJBQWlCLElBQWpCLENBQVAsS0FBa0MsVUFBdEMsRUFBa0Q7QUFDaEQseUJBQWlCLElBQWpCLElBQXlCLFVBQVUsT0FBVixFQUFtQjtBQUMxQyxjQUFJLHdCQUF3QjtBQUMxQixrQ0FBc0IsSUFESTtBQUUxQixnQkFBSSxJQUZzQjtBQUcxQixxQkFBUztBQUhpQixXQUE1Qjs7QUFNQSxjQUFJLG1CQUFtQixPQUFPLFFBQVAsRUFBdkI7O0FBRUEsaUJBQU8sT0FBUCxDQUFlLFdBQWYsQ0FBMkIscUJBQTNCLEVBQWtELFVBQVUsUUFBVixFQUFvQjtBQUNwRSw2QkFBaUIsT0FBakIsQ0FBeUIsUUFBekI7QUFDRCxXQUZEOztBQUlBLGlCQUFPLGdCQUFQO0FBQ0QsU0FkRDtBQWVELE9BaEJELE1BZ0JPO0FBQ0wseUJBQWlCLElBQWpCLElBQXlCLGlCQUFpQixJQUFqQixDQUF6QjtBQUNEO0FBQ0YsS0FwQkQ7O0FBc0JBLFdBQU8sZ0JBQVA7QUFDRCxHQTNCTSxNQTJCQTtBQUNMLFVBQU0sSUFBSSxLQUFKLENBQVUsK0NBQStDLFFBQXpELENBQU47QUFDRDtBQUNGLENBbENEOztBQW9DQSxPQUFPLE9BQVAsR0FBaUIsbUJBQWpCOzs7QUMxQ0EsSUFBSSxzQkFBc0IsUUFBUSx1QkFBUixDQUExQjtBQUNBLElBQUksZ0JBQWdCLFFBQVEsaUJBQVIsQ0FBcEI7QUFDQTs7Ozs7O0FBTUEsSUFBSSxtQkFBbUIsVUFBVSxRQUFWLEVBQW9CO0FBQ3pDLE1BQUksYUFBSjs7QUFFQTtBQUNBLE1BQUksYUFBYSxlQUFqQixFQUFrQztBQUNoQyxvQkFBZ0IsYUFBaEI7QUFDQSxrQkFBYyxnQkFBZCxHQUFpQyxvQkFBb0IsZUFBcEIsQ0FBakM7QUFDQSxXQUFPLGFBQVA7QUFDRCxHQUpELE1BSU8sSUFBSSxhQUFhLGtCQUFiLElBQW1DLGFBQWEsVUFBcEQsRUFBZ0U7QUFDckUsUUFBSSxtQkFBbUIsb0JBQW9CLFFBQXBCLENBQXZCOztBQUVBO0FBQ0Esb0JBQWdCLEVBQWhCO0FBQ0EsV0FBTyxJQUFQLENBQVksYUFBWixFQUEyQixPQUEzQixDQUFtQyxVQUFVLElBQVYsRUFBZ0I7QUFDakQsVUFBSSxPQUFPLGNBQWMsSUFBZCxDQUFQLEtBQStCLFVBQW5DLEVBQStDO0FBQzdDLHNCQUFjLElBQWQsSUFBc0IsVUFBVSxPQUFWLEVBQW1CO0FBQ3ZDLGNBQUkscUJBQXFCO0FBQ3ZCLCtCQUFtQixJQURJO0FBRXZCLGdCQUFJLElBRm1CO0FBR3ZCLHFCQUFTO0FBSGMsV0FBekI7O0FBTUEsaUJBQU8saUJBQWlCLG9CQUFqQixDQUFzQyxrQkFBdEMsQ0FBUDtBQUNELFNBUkQ7QUFTRCxPQVZELE1BVU87QUFDTCxzQkFBYyxJQUFkLElBQXNCLGNBQWMsSUFBZCxDQUF0QjtBQUNEO0FBQ0YsS0FkRDtBQWVBLGtCQUFjLGdCQUFkLEdBQWlDLGdCQUFqQztBQUNBLFdBQU8sYUFBUDtBQUNELEdBdEJNLE1Bc0JBO0FBQ0wsVUFBTSxJQUFJLEtBQUosQ0FBVSw0Q0FBNEMsUUFBdEQsQ0FBTjtBQUNEO0FBQ0YsQ0FqQ0Q7O0FBbUNBLE9BQU8sT0FBUCxHQUFpQixnQkFBakI7OztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3gyR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDN1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDNVRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM5TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3BOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuMkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDakdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN6RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN4Q0E7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ25GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDNU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNsbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM3T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDNUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNwREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2x1TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNwS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDampCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzE2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNXdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMvaUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9UQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNzBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUlBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzduQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzlUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQy9ZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDMWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdExBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzlLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDalNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3BEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3ROQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN4SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDN05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdE1BO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Z1VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzcwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDdFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN6aUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDem1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDekdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3p2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOW1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzd2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDek1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3haQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM1VkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9MQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdmtDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDak9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQy90QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JwTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xnREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN3dFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDck1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQzN3RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMzR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM5RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNwQ0E7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdDZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNyTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUMvaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoUkE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7O0FDREE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDdk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDaExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM3aERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDblNBO0FBQ0E7OztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzdpREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDbEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDcERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ25RQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3pYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDMVpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2pLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2xVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMxTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2hVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3pmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDbEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3JRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN0dEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNyUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2xSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMvUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN6VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNwSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDaFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNuTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUM5RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2xUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN0TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM3TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN0R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3AwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeHpDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqTUE7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNwUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcDFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1dEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDMWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3R4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG4vKipcbiAqIEB1cmwgaHR0cDovL2pzcGVyZi5jb20vYmxvYi1iYXNlNjQtY29udmVyc2lvblxuICogQHR5cGUge3tibG9iVG9CYXNlNjQ6IGJsb2JUb0Jhc2U2NCwgYmFzZTY0VG9CbG9iOiBiYXNlNjRUb0Jsb2J9fVxuICovXG52YXIgQmFzZTY0ID0ge1xuXG4gIGJsb2JUb0Jhc2U2NDogZnVuY3Rpb24gKGJsb2IpIHtcbiAgICB2YXIgZGVmZXJyZWRSZXNwb25zZSA9IGpxdWVyeS5EZWZlcnJlZCgpXG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGRhdGFVcmwgPSByZWFkZXIucmVzdWx0XG4gICAgICB2YXIgYmFzZTY0ID0gZGF0YVVybC5zcGxpdCgnLCcpWzFdXG4gICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoYmFzZTY0KVxuICAgIH1cbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKVxuXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2UucHJvbWlzZSgpXG4gIH0sXG5cbiAgYmFzZTY0VG9CbG9iOiBmdW5jdGlvbiAoYmFzZTY0LCBtaW1lVHlwZSkge1xuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgYmluYXJ5ID0gYXRvYihiYXNlNjQpXG4gICAgdmFyIGxlbiA9IGJpbmFyeS5sZW5ndGhcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGxlbilcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcilcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2aWV3W2ldID0gYmluYXJ5LmNoYXJDb2RlQXQoaSlcbiAgICB9XG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbdmlld10sIHt0eXBlOiBtaW1lVHlwZX0pXG4gICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKGJsb2IpXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZS5wcm9taXNlKClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2U2NFxuIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG4vKipcbiAqIEBhdXRob3IgTWFydGlucyBCYWxvZGlzXG4gKlxuICogQW4gYWx0ZXJuYXRpdmUgdmVyc2lvbiBvZiAkLndoZW4gd2hpY2ggY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSBhc3luY2hyb25vdXNcbiAqIGNhbGxzIHNlcXVlbnRpYWxseSBvbmUgYWZ0ZXIgYW5vdGhlci5cbiAqXG4gKiBAcmV0dXJucyBqcXVlcnlEZWZlcnJlZCgpLnByb21pc2UoKVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoZW5DYWxsU2VxdWVudGlhbGx5IChmdW5jdGlvbkNhbGxzKSB7XG4gIHZhciBkZWZlcnJlZFJlc29uc2UgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICB2YXIgcmVzdWx0RGF0YSA9IFtdXG5cblx0Ly8gbm90aGluZyB0byBkb1xuICBpZiAoZnVuY3Rpb25DYWxscy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZGVmZXJyZWRSZXNvbnNlLnJlc29sdmUocmVzdWx0RGF0YSkucHJvbWlzZSgpXG4gIH1cblxuICB2YXIgY3VycmVudERlZmVycmVkID0gZnVuY3Rpb25DYWxscy5zaGlmdCgpKClcblx0Ly8gZXhlY3V0ZSBzeW5jaHJvbm91cyBjYWxscyBzeW5jaHJvbm91c2x5XG4gIHdoaWxlIChjdXJyZW50RGVmZXJyZWQuc3RhdGUoKSA9PT0gJ3Jlc29sdmVkJykge1xuICAgIGN1cnJlbnREZWZlcnJlZC5kb25lKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXN1bHREYXRhLnB1c2goZGF0YSlcbiAgICB9KVxuICAgIGlmIChmdW5jdGlvbkNhbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGRlZmVycmVkUmVzb25zZS5yZXNvbHZlKHJlc3VsdERhdGEpLnByb21pc2UoKVxuICAgIH1cbiAgICBjdXJyZW50RGVmZXJyZWQgPSBmdW5jdGlvbkNhbGxzLnNoaWZ0KCkoKVxuICB9XG5cblx0Ly8gaGFuZGxlIGFzeW5jIGNhbGxzXG4gIHZhciBpbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcblx0XHQvLyBoYW5kbGUgbWl4ZWQgc3luYyBjYWxsc1xuICAgIHdoaWxlIChjdXJyZW50RGVmZXJyZWQuc3RhdGUoKSA9PT0gJ3Jlc29sdmVkJykge1xuICAgICAgY3VycmVudERlZmVycmVkLmRvbmUoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgcmVzdWx0RGF0YS5wdXNoKGRhdGEpXG4gICAgICB9KVxuICAgICAgaWYgKGZ1bmN0aW9uQ2FsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXG4gICAgICAgIGRlZmVycmVkUmVzb25zZS5yZXNvbHZlKHJlc3VsdERhdGEpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjdXJyZW50RGVmZXJyZWQgPSBmdW5jdGlvbkNhbGxzLnNoaWZ0KCkoKVxuICAgIH1cbiAgfSwgMTApXG5cbiAgcmV0dXJuIGRlZmVycmVkUmVzb25zZS5wcm9taXNlKClcbn1cbiIsInZhciBDb25maWcgPSByZXF1aXJlKCcuLi9zY3JpcHRzL0NvbmZpZycpXG52YXIgU3RvcmUgPSByZXF1aXJlKCcuLi9zY3JpcHRzL1N0b3JlJylcbnZhciBTaXRlbWFwID0gcmVxdWlyZSgnLi4vc2NyaXB0cy9TaXRlbWFwJylcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL3NjcmlwdHMvUXVldWUnKVxudmFyIFNjcmFwZXIgPSByZXF1aXJlKCcuLi9zY3JpcHRzL1NjcmFwZXInKVxudmFyIENocm9tZVBvcHVwQnJvd3NlciA9IHJlcXVpcmUoJy4uL3NjcmlwdHMvQ2hyb21lUG9wdXBCcm93c2VyJylcbmNvbnN0IFdlYkpTRE9NQnJvd3NlciA9IHJlcXVpcmUoJy4uL3NjcmlwdHMvV2ViSlNET01Ccm93c2VyJylcbnZhciBnZXRCYWNrZ3JvdW5kU2NyaXB0ID0gcmVxdWlyZSgnLi4vc2NyaXB0cy9nZXRCYWNrZ3JvdW5kU2NyaXB0JylcbnZhciAkID0gcmVxdWlyZSgnanF1ZXJ5JylcbnZhciBjb25maWcgPSBuZXcgQ29uZmlnKClcbnZhciBzdG9yZVxuY29uZmlnLmxvYWRDb25maWd1cmF0aW9uKGZ1bmN0aW9uICgpIHtcbiAgY29uc29sZS5sb2coJ2luaXRpYWwgY29uZmlndXJhdGlvbicsIGNvbmZpZylcbiAgc3RvcmUgPSBuZXcgU3RvcmUoY29uZmlnLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG59KVxuXG5jaHJvbWUuc3RvcmFnZS5vbkNoYW5nZWQuYWRkTGlzdGVuZXIoZnVuY3Rpb24gKCkge1xuICBjb25maWcubG9hZENvbmZpZ3VyYXRpb24oZnVuY3Rpb24gKCkge1xuICAgIGNvbnNvbGUubG9nKCdjb25maWd1cmF0aW9uIGNoYW5nZWQnLCBjb25maWcpXG4gICAgc3RvcmUgPSBuZXcgU3RvcmUoY29uZmlnLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gIH0pXG59KVxuXG52YXIgc2VuZFRvQWN0aXZlVGFiID0gZnVuY3Rpb24gKHJlcXVlc3QsIGNhbGxiYWNrKSB7XG4gIGNocm9tZS50YWJzLnF1ZXJ5KHtcbiAgICBhY3RpdmU6IHRydWUsXG4gICAgY3VycmVudFdpbmRvdzogdHJ1ZVxuICB9LCBmdW5jdGlvbiAodGFicykge1xuICAgIGlmICh0YWJzLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRoaXMuY29uc29sZS5sb2coXCJjb3VsZG4ndCBmaW5kIGFjdGl2ZSB0YWJcIilcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHRhYiA9IHRhYnNbMF1cbiAgICAgIGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRhYi5pZCwgcmVxdWVzdCwgY2FsbGJhY2spXG4gICAgfVxuICB9KVxufVxuXG5jaHJvbWUucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIoXG5cdGZ1bmN0aW9uIChyZXF1ZXN0LCBzZW5kZXIsIHNlbmRSZXNwb25zZSkge1xuICBjb25zb2xlLmxvZygnY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlJywgcmVxdWVzdClcblxuICBpZiAocmVxdWVzdC5jcmVhdGVTaXRlbWFwKSB7XG4gICAgc3RvcmUuY3JlYXRlU2l0ZW1hcChyZXF1ZXN0LnNpdGVtYXAsIHNlbmRSZXNwb25zZSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHJlcXVlc3Quc2F2ZVNpdGVtYXApIHtcbiAgICBzdG9yZS5zYXZlU2l0ZW1hcChyZXF1ZXN0LnNpdGVtYXAsIHNlbmRSZXNwb25zZSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuZGVsZXRlU2l0ZW1hcCkge1xuICAgIHN0b3JlLmRlbGV0ZVNpdGVtYXAocmVxdWVzdC5zaXRlbWFwLCBzZW5kUmVzcG9uc2UpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LmdldEFsbFNpdGVtYXBzKSB7XG4gICAgc3RvcmUuZ2V0QWxsU2l0ZW1hcHMoc2VuZFJlc3BvbnNlKVxuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5zaXRlbWFwRXhpc3RzKSB7XG4gICAgc3RvcmUuc2l0ZW1hcEV4aXN0cyhyZXF1ZXN0LnNpdGVtYXBJZCwgc2VuZFJlc3BvbnNlKVxuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5nZXRTaXRlbWFwRGF0YSkge1xuICAgIHN0b3JlLmdldFNpdGVtYXBEYXRhKG5ldyBTaXRlbWFwKHJlcXVlc3Quc2l0ZW1hcCwgeyQsIHdpbmRvdywgZG9jdW1lbnR9KSwgc2VuZFJlc3BvbnNlKVxuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5zY3JhcGVTaXRlbWFwKSB7XG4gICAgdmFyIHNpdGVtYXAgPSBuZXcgU2l0ZW1hcChyZXF1ZXN0LnNpdGVtYXAsIHskLCB3aW5kb3csIGRvY3VtZW50fSlcbiAgICB2YXIgcXVldWUgPSBuZXcgUXVldWUoKVxuICAgIHZhciBicm93c2VyID0gbmV3IENocm9tZVBvcHVwQnJvd3Nlcih7XG4gICAgICBwYWdlTG9hZERlbGF5OiByZXF1ZXN0LnBhZ2VMb2FkRGVsYXlcbiAgICB9KVxuXG4gICAgdmFyIHNjcmFwZXIgPSBuZXcgU2NyYXBlcih7XG4gICAgICBxdWV1ZTogcXVldWUsXG4gICAgICBzaXRlbWFwOiBzaXRlbWFwLFxuICAgICAgYnJvd3NlcjogYnJvd3NlcixcbiAgICAgIHN0b3JlOiBzdG9yZSxcbiAgICAgIHJlcXVlc3RJbnRlcnZhbDogcmVxdWVzdC5yZXF1ZXN0SW50ZXJ2YWxcbiAgICB9LCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG5cbiAgICB0cnkge1xuICAgICAgc2NyYXBlci5ydW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBicm93c2VyLmNsb3NlKClcbiAgICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IGNocm9tZS5ub3RpZmljYXRpb25zLmNyZWF0ZSgnc2NyYXBpbmctZmluaXNoZWQnLCB7XG4gICAgICAgICAgdHlwZTogJ2Jhc2ljJyxcbiAgICAgICAgICBpY29uVXJsOiAnYXNzZXRzL2ltYWdlcy9pY29uMTI4LnBuZycsXG4gICAgICAgICAgdGl0bGU6ICdTY3JhcGluZyBmaW5pc2hlZCEnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdGaW5pc2hlZCBzY3JhcGluZyAnICsgc2l0ZW1hcC5faWRcbiAgICAgICAgfSwgZnVuY3Rpb24gKGlkKSB7XG5cdFx0XHRcdFx0XHQvLyBub3RpZmljYXRpb24gc2hvd2VkXG4gICAgICAgIH0pXG4gICAgICAgIHNlbmRSZXNwb25zZSgpXG4gICAgICB9KVxuICAgIH1cdFx0XHRjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coJ1NjcmFwZXIgZXhlY3V0aW9uIGNhbmNlbGxlZCcuZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuaGVhZGxlc3NTY3JhcGVTaXRlbWFwKSB7XG4gICAgY29uc3Qgc2l0ZW1hcCA9IG5ldyBTaXRlbWFwKHJlcXVlc3Quc2l0ZW1hcCwgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxuICAgIGNvbnN0IHF1ZXVlID0gbmV3IFF1ZXVlKClcbiAgICBjb25zdCBicm93c2VyID0gbmV3IFdlYkpTRE9NQnJvd3Nlcih7XG4gICAgICBwYWdlTG9hZERlbGF5OiByZXF1ZXN0LnBhZ2VMb2FkRGVsYXlcbiAgICB9LCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG5cbiAgICBjb25zdCBzY3JhcGVyID0gbmV3IFNjcmFwZXIoe1xuICAgICAgcXVldWU6IHF1ZXVlLFxuICAgICAgc2l0ZW1hcDogc2l0ZW1hcCxcbiAgICAgIGJyb3dzZXI6IGJyb3dzZXIsXG4gICAgICBzdG9yZTogc3RvcmUsXG4gICAgICByZXF1ZXN0SW50ZXJ2YWw6IHJlcXVlc3QucmVxdWVzdEludGVydmFsXG4gICAgfSwgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxuXG4gICAgdHJ5IHtcbiAgICAgIHNjcmFwZXIucnVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYnJvd3Nlci5jbG9zZSgpXG4gICAgICAgIHZhciBub3RpZmljYXRpb24gPSBjaHJvbWUubm90aWZpY2F0aW9ucy5jcmVhdGUoJ3NjcmFwaW5nLWZpbmlzaGVkJywge1xuICAgICAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICAgICAgaWNvblVybDogJ2Fzc2V0cy9pbWFnZXMvaWNvbjEyOC5wbmcnLFxuICAgICAgICAgIHRpdGxlOiAnU2NyYXBpbmcgZmluaXNoZWQhJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRmluaXNoZWQgc2NyYXBpbmcgJyArIHNpdGVtYXAuX2lkXG4gICAgICAgIH0sIGZ1bmN0aW9uIChpZCkge1xuICAgICAgICAgIC8vIG5vdGlmaWNhdGlvbiBzaG93ZWRcbiAgICAgICAgfSlcbiAgICAgICAgc2VuZFJlc3BvbnNlKClcbiAgICAgIH0pXG4gICAgfVx0XHRcdGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZygnU2NyYXBlciBleGVjdXRpb24gY2FuY2VsbGVkJy5lKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucHJldmlld1NlbGVjdG9yRGF0YSkge1xuICAgIGNocm9tZS50YWJzLnF1ZXJ5KHtcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIGN1cnJlbnRXaW5kb3c6IHRydWVcbiAgICB9LCBmdW5jdGlvbiAodGFicykge1xuICAgICAgaWYgKHRhYnMubGVuZ3RoIDwgMSkge1xuICAgICAgICB0aGlzLmNvbnNvbGUubG9nKFwiY291bGRuJ3QgZmluZCBhY3RpdmUgdGFiXCIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGFiID0gdGFic1swXVxuICAgICAgICBjaHJvbWUudGFicy5zZW5kTWVzc2FnZSh0YWIuaWQsIHJlcXVlc3QsIHNlbmRSZXNwb25zZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5iYWNrZ3JvdW5kU2NyaXB0Q2FsbCkge1xuICAgIHZhciBiYWNrZ3JvdW5kU2NyaXB0ID0gZ2V0QmFja2dyb3VuZFNjcmlwdCgnQmFja2dyb3VuZFNjcmlwdCcpXG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBiYWNrZ3JvdW5kU2NyaXB0W3JlcXVlc3QuZm5dKHJlcXVlc3QucmVxdWVzdClcbiAgICBkZWZlcnJlZFJlc3BvbnNlLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBzZW5kUmVzcG9uc2UocmVzcG9uc2UpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cbilcbiIsInZhciBEYXRhRXh0cmFjdG9yID0gcmVxdWlyZSgnLi8uLi9zY3JpcHRzL0RhdGFFeHRyYWN0b3InKVxudmFyIGdldENvbnRlbnRTY3JpcHQgPSByZXF1aXJlKCcuLy4uL3NjcmlwdHMvZ2V0Q29udGVudFNjcmlwdCcpXG5cbmZ1bmN0aW9uIGV4dGVuc2lvbkxpc3RlbmVyIChyZXF1ZXN0LCBzZW5kZXIsIHNlbmRSZXNwb25zZSwgb3B0aW9ucykge1xuICB2YXIgJCA9IG9wdGlvbnMuJFxuICB2YXIgZG9jdW1lbnQgPSBvcHRpb25zLmRvY3VtZW50XG4gIHZhciB3aW5kb3cgPSBvcHRpb25zLndpbmRvd1xuICBjb25zb2xlLmxvZygnY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlJywgcmVxdWVzdClcblxuICBpZiAocmVxdWVzdC5leHRyYWN0RGF0YSkge1xuICAgIGNvbnNvbGUubG9nKCdyZWNlaXZlZCBkYXRhIGV4dHJhY3Rpb24gcmVxdWVzdCcsIHJlcXVlc3QpXG4gICAgdmFyIGV4dHJhY3RvciA9IG5ldyBEYXRhRXh0cmFjdG9yKHJlcXVlc3QsIHskLCB3aW5kb3csIGRvY3VtZW50fSlcbiAgICB2YXIgZGVmZXJyZWREYXRhID0gZXh0cmFjdG9yLmdldERhdGEoKVxuICAgIGRlZmVycmVkRGF0YS5kb25lKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBjb25zb2xlLmxvZygnZGF0YWV4dHJhY3RvciBkYXRhJywgZGF0YSlcbiAgICAgIHNlbmRSZXNwb25zZShkYXRhKVxuICAgIH0pXG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LnByZXZpZXdTZWxlY3RvckRhdGEpIHtcbiAgICBjb25zb2xlLmxvZygncmVjZWl2ZWQgZGF0YS1wcmV2aWV3IGV4dHJhY3Rpb24gcmVxdWVzdCcsIHJlcXVlc3QpXG4gICAgdmFyIGV4dHJhY3RvciA9IG5ldyBEYXRhRXh0cmFjdG9yKHJlcXVlc3QsIHskLCBkb2N1bWVudCwgd2luZG93fSlcbiAgICB2YXIgZGVmZXJyZWREYXRhID0gZXh0cmFjdG9yLmdldFNpbmdsZVNlbGVjdG9yRGF0YShyZXF1ZXN0LnBhcmVudFNlbGVjdG9ySWRzLCByZXF1ZXN0LnNlbGVjdG9ySWQpXG4gICAgZGVmZXJyZWREYXRhLmRvbmUoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdkYXRhZXh0cmFjdG9yIGRhdGEnLCBkYXRhKVxuICAgICAgc2VuZFJlc3BvbnNlKGRhdGEpXG4gICAgfSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIC8vIFVuaXZlcnNhbCBDb250ZW50U2NyaXB0IGNvbW11bmljYXRpb24gaGFuZGxlclxuICBlbHNlIGlmIChyZXF1ZXN0LmNvbnRlbnRTY3JpcHRDYWxsKSB7XG4gICAgdmFyIGNvbnRlbnRTY3JpcHQgPSBnZXRDb250ZW50U2NyaXB0KCdDb250ZW50U2NyaXB0JylcblxuICAgIGNvbnNvbGUubG9nKCdyZWNlaXZlZCBDb250ZW50U2NyaXB0IHJlcXVlc3QnLCByZXF1ZXN0KVxuXG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBjb250ZW50U2NyaXB0W3JlcXVlc3QuZm5dKHJlcXVlc3QucmVxdWVzdCwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICAgIGRlZmVycmVkUmVzcG9uc2UuZG9uZShmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIHNlbmRSZXNwb25zZShyZXNwb25zZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGV4dGVuc2lvbkxpc3RlbmVyXG4iLCJ2YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbi8qKlxuICogQ29udGVudFNjcmlwdCB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSB3aXRoaW4gdGhlIGV4dGVuc2lvblxuICovXG52YXIgQmFja2dyb3VuZFNjcmlwdCA9IHtcblxuICBkdW1teTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBqcXVlcnkuRGVmZXJyZWQoKS5yZXNvbHZlKCdkdW1teScpLnByb21pc2UoKVxuICB9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgdGFiIHRoYXQgaXMgdmlzaWJsZSB0byB1c2VyXG5cdCAqIEByZXR1cm5zIGpxdWVyeS5EZWZlcnJlZCgpIGludGVnZXJcblx0ICovXG4gIGdldEFjdGl2ZVRhYklkOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBqcXVlcnkuRGVmZXJyZWQoKVxuXG4gICAgY2hyb21lLnRhYnMucXVlcnkoe1xuICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgY3VycmVudFdpbmRvdzogdHJ1ZVxuICAgIH0sIGZ1bmN0aW9uICh0YWJzKSB7XG4gICAgICBpZiAodGFicy5sZW5ndGggPCAxKSB7XG5cdFx0XHRcdC8vIEBUT0RPIG11c3QgYmUgcnVubmluZyB3aXRoaW4gcG9wdXAuIG1heWJlIGZpbmQgYW5vdGhlciBhY3RpdmUgd2luZG93P1xuICAgICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlamVjdChcImNvdWxkbid0IGZpbmQgdGhlIGFjdGl2ZSB0YWJcIilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB0YWJJZCA9IHRhYnNbMF0uaWRcbiAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKHRhYklkKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2UucHJvbWlzZSgpXG4gIH0sXG5cblx0LyoqXG5cdCAqIEV4ZWN1dGUgYSBmdW5jdGlvbiB3aXRoaW4gdGhlIGFjdGl2ZSB0YWIgd2l0aGluIGNvbnRlbnQgc2NyaXB0XG5cdCAqIEBwYXJhbSByZXF1ZXN0LmZuXHRmdW5jdGlvbiB0byBjYWxsXG5cdCAqIEBwYXJhbSByZXF1ZXN0LnJlcXVlc3RcdHJlcXVlc3QgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cblx0ICovXG4gIGV4ZWN1dGVDb250ZW50U2NyaXB0OiBmdW5jdGlvbiAocmVxdWVzdCkge1xuICAgIHZhciByZXFUb0NvbnRlbnRTY3JpcHQgPSB7XG4gICAgICBjb250ZW50U2NyaXB0Q2FsbDogdHJ1ZSxcbiAgICAgIGZuOiByZXF1ZXN0LmZuLFxuICAgICAgcmVxdWVzdDogcmVxdWVzdC5yZXF1ZXN0XG4gICAgfVxuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgZGVmZXJyZWRBY3RpdmVUYWJJZCA9IHRoaXMuZ2V0QWN0aXZlVGFiSWQoKVxuICAgIGRlZmVycmVkQWN0aXZlVGFiSWQuZG9uZShmdW5jdGlvbiAodGFiSWQpIHtcbiAgICAgIGNocm9tZS50YWJzLnNlbmRNZXNzYWdlKHRhYklkLCByZXFUb0NvbnRlbnRTY3JpcHQsIGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmFja2dyb3VuZFNjcmlwdFxuIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG52YXIgd2hlbkNhbGxTZXF1ZW50aWFsbHkgPSByZXF1aXJlKCcuLi9hc3NldHMvanF1ZXJ5LndoZW5jYWxsc2VxdWVudGlhbGx5JylcblxudmFyIENocm9tZVBvcHVwQnJvd3NlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHRoaXMucGFnZUxvYWREZWxheSA9IG9wdGlvbnMucGFnZUxvYWREZWxheVxuXG4gIC8vIE5vdCBzZXR0aW5nIHdpbmRvdyBoZXJlIGFzIGl0IGNvbmZsaWN0cyB3aXRoIHRoaXMud2luZG93LiBJbiBhbnkgY2FzZSB3aW5kb3cgbXVzdCBiZSBkZWZpbmVkIGluIHRoaXMgY2FzZVxuXHQvLyBAVE9ETyBzb21laG93IGhhbmRsZSB0aGUgY2xvc2VkIHdpbmRvd1xufVxuXG5DaHJvbWVQb3B1cEJyb3dzZXIucHJvdG90eXBlID0ge1xuXG4gIF9pbml0UG9wdXBXaW5kb3c6IGZ1bmN0aW9uIChjYWxsYmFjaywgc2NvcGUpIHtcbiAgICB2YXIgYnJvd3NlciA9IHRoaXNcbiAgICBpZiAodGhpcy53aW5kb3cgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gY2hlY2sgaWYgdGFiIGV4aXN0c1xuICAgICAgY2hyb21lLnRhYnMuZ2V0KHRoaXMudGFiLmlkLCBmdW5jdGlvbiAodGFiKSB7XG4gICAgICAgIGlmICghdGFiKSB7XG4gICAgICAgICAgdGhyb3cgJ1NjcmFwaW5nIHdpbmRvdyBjbG9zZWQnXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGNhbGxiYWNrLmNhbGwoc2NvcGUpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjaHJvbWUud2luZG93cy5jcmVhdGUoeyd0eXBlJzogJ3BvcHVwJywgd2lkdGg6IDEwNDIsIGhlaWdodDogNzY4LCBmb2N1c2VkOiB0cnVlLCB1cmw6ICdjaHJvbWU6Ly9uZXd0YWInfSwgZnVuY3Rpb24gKHdpbmRvdykge1xuICAgICAgYnJvd3Nlci53aW5kb3cgPSB3aW5kb3dcbiAgICAgIGJyb3dzZXIudGFiID0gd2luZG93LnRhYnNbMF1cblxuICAgICAgY2FsbGJhY2suY2FsbChzY29wZSlcbiAgICB9KVxuICB9LFxuXG4gIGxvYWRVcmw6IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHRhYiA9IHRoaXMudGFiXG5cbiAgICB2YXIgdGFiTG9hZExpc3RlbmVyID0gZnVuY3Rpb24gKHRhYklkLCBjaGFuZ2VJbmZvLCB0YWIpIHtcbiAgICAgIGlmICh0YWJJZCA9PT0gdGhpcy50YWIuaWQpIHtcbiAgICAgICAgaWYgKGNoYW5nZUluZm8uc3RhdHVzID09PSAnY29tcGxldGUnKSB7XG5cdFx0XHRcdFx0Ly8gQFRPRE8gY2hlY2sgdXJsID8gbWF5YmUgaXQgd291bGQgYmUgYmFkIGJlY2F1c2Ugc29tZSBzaXRlcyBtaWdodCB1c2UgcmVkaXJlY3RzXG5cblx0XHRcdFx0XHQvLyByZW1vdmUgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgICBjaHJvbWUudGFicy5vblVwZGF0ZWQucmVtb3ZlTGlzdGVuZXIodGFiTG9hZExpc3RlbmVyKVxuXG5cdFx0XHRcdFx0Ly8gY2FsbGJhY2sgdGFiIGlzIGxvYWRlZCBhZnRlciBwYWdlIGxvYWQgZGVsYXlcbiAgICAgICAgICBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aGlzLnBhZ2VMb2FkRGVsYXkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcylcbiAgICBjaHJvbWUudGFicy5vblVwZGF0ZWQuYWRkTGlzdGVuZXIodGFiTG9hZExpc3RlbmVyKVxuXG4gICAgY2hyb21lLnRhYnMudXBkYXRlKHRhYi5pZCwge3VybDogdXJsfSlcbiAgfSxcblxuICBjbG9zZTogZnVuY3Rpb24gKCkge1xuICAgIGNocm9tZS53aW5kb3dzLnJlbW92ZSh0aGlzLndpbmRvdy5pZClcbiAgfSxcbiAgLyoqXG4gICAqIFNhdmUgaW1hZ2VzIGZvciB1c2VyIGlmIHRoZSByZWNvcmRzIGNvbnRhaW5zIHRoZW1cbiAgICogQHBhcmFtIG5hbWluZ0Z1bmN0aW9uIHtmdW5jdGlvbn0gZ2V0cyBzdHJpbmcgb3V0cHV0cyBuYW1lXG4gICAqIEBwYXJhbSByZWNvcmRcbiAgICovXG4gIHNhdmVJbWFnZXM6IGZ1bmN0aW9uIChyZWNvcmQsIG5hbWluZ0Z1bmN0aW9uKSB7XG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICAgIHZhciBkZWZlcnJlZEltYWdlU3RvcmVDYWxscyA9IFtdXG4gICAgdmFyIHByZWZpeExlbmd0aCA9ICdfaW1hZ2VCYXNlNjQtJy5sZW5ndGhcblxuICAgIGZvciAodmFyIGF0dHIgaW4gcmVjb3JkKSB7XG4gICAgICBpZiAoYXR0ci5zdWJzdHIoMCwgcHJlZml4TGVuZ3RoKSA9PT0gJ19pbWFnZUJhc2U2NC0nKSB7XG4gICAgICAgIHZhciBzZWxlY3RvcklkID0gYXR0ci5zdWJzdHJpbmcocHJlZml4TGVuZ3RoLCBhdHRyLmxlbmd0aClcbiAgICAgICAgZGVmZXJyZWRJbWFnZVN0b3JlQ2FsbHMucHVzaChmdW5jdGlvbiAoc2VsZWN0b3JJZCkge1xuICAgICAgICAgIHZhciBpbWFnZUJhc2U2NCA9IHJlY29yZFsnX2ltYWdlQmFzZTY0LScgKyBzZWxlY3RvcklkXVxuICAgICAgICAgIHZhciBkZWZlcnJlZERvd25sb2FkRG9uZSA9IGpxdWVyeS5EZWZlcnJlZCgpXG5cbiAgICAgICAgICAvLyBUT0RPIGNoZWNrIHRoYXQgYXRvYiBhY3R1YWxseSB3b3Jrc1xuICAgICAgICAgIHZhciBibG9iID0gYjY0dG9CbG9iKGltYWdlQmFzZTY0LCByZWNvcmRbJ19pbWFnZU1pbWVUeXBlLScgKyBzZWxlY3RvcklkXSlcblxuICAgICAgICAgIGRlbGV0ZSByZWNvcmRbJ19pbWFnZU1pbWVUeXBlLScgKyBzZWxlY3RvcklkXVxuICAgICAgICAgIGRlbGV0ZSByZWNvcmRbJ19pbWFnZUJhc2U2NC0nICsgc2VsZWN0b3JJZF1cblxuICAgICAgICAgIHZhciBkb3dubG9hZFVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG4gICAgICAgICAgdmFyIGZpbGVTYXZlUGF0aCA9IG5hbWluZ0Z1bmN0aW9uKHNlbGVjdG9ySWQpXG5cbiAgICAgICAgICAvLyBkb3dubG9hZCBpbWFnZSB1c2luZyBjaHJvbWUgYXBpXG4gICAgICAgICAgdmFyIGRvd25sb2FkUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIHVybDogZG93bmxvYWRVcmwsXG4gICAgICAgICAgICBmaWxlbmFtZTogZmlsZVNhdmVQYXRoXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIGRvd25sb2FkIHRvIGZpbmlzaFxuICAgICAgICAgIGNocm9tZS5kb3dubG9hZHMuZG93bmxvYWQoZG93bmxvYWRSZXF1ZXN0LCBmdW5jdGlvbiAoZG93bmxvYWRJZCkge1xuICAgICAgICAgICAgdmFyIGNiRG93bmxvYWRlZCA9IGZ1bmN0aW9uIChkb3dubG9hZEl0ZW0pIHtcbiAgICAgICAgICAgICAgaWYgKGRvd25sb2FkSXRlbS5pZCA9PT0gZG93bmxvYWRJZCAmJiBkb3dubG9hZEl0ZW0uc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZG93bmxvYWRJdGVtLnN0YXRlLmN1cnJlbnQgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgICAgICAgIGRlZmVycmVkRG93bmxvYWREb25lLnJlc29sdmUoKVxuICAgICAgICAgICAgICAgICAgY2hyb21lLmRvd25sb2Fkcy5vbkNoYW5nZWQucmVtb3ZlTGlzdGVuZXIoY2JEb3dubG9hZGVkKVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZG93bmxvYWRJdGVtLnN0YXRlLmN1cnJlbnQgPT09ICdpbnRlcnJ1cHRlZCcpIHtcbiAgICAgICAgICAgICAgICAgIGRlZmVycmVkRG93bmxvYWREb25lLnJlamVjdCgnZG93bmxvYWQgZmFpbGVkJylcbiAgICAgICAgICAgICAgICAgIGNocm9tZS5kb3dubG9hZHMub25DaGFuZ2VkLnJlbW92ZUxpc3RlbmVyKGNiRG93bmxvYWRlZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hyb21lLmRvd25sb2Fkcy5vbkNoYW5nZWQuYWRkTGlzdGVuZXIoY2JEb3dubG9hZGVkKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gZGVmZXJyZWREb3dubG9hZERvbmUucHJvbWlzZSgpXG4gICAgICAgIH0uYmluZCh0aGlzLCBzZWxlY3RvcklkKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkZWZlcnJlZEltYWdlU3RvcmVDYWxscykuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZS5wcm9taXNlKClcbiAgfSxcbiAgZmV0Y2hEYXRhOiBmdW5jdGlvbiAodXJsLCBzaXRlbWFwLCBwYXJlbnRTZWxlY3RvcklkLCBjYWxsYmFjaywgc2NvcGUpIHtcbiAgICB2YXIgYnJvd3NlciA9IHRoaXNcblxuICAgIHRoaXMuX2luaXRQb3B1cFdpbmRvdyhmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGFiID0gYnJvd3Nlci50YWJcbiAgICAgIGNvbnNvbGUubG9nKCdJbml0IGJyb3dzZXIgYXBwJylcbiAgICAgIGJyb3dzZXIubG9hZFVybCh1cmwsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSB7XG4gICAgICAgICAgZXh0cmFjdERhdGE6IHRydWUsXG4gICAgICAgICAgc2l0ZW1hcDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzaXRlbWFwKSksXG4gICAgICAgICAgcGFyZW50U2VsZWN0b3JJZDogcGFyZW50U2VsZWN0b3JJZFxuICAgICAgICB9XG5cbiAgICAgICAgY2hyb21lLnRhYnMuc2VuZE1lc3NhZ2UodGFiLmlkLCBtZXNzYWdlLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdleHRyYWN0ZWQgZGF0YSBmcm9tIHdlYiBwYWdlJywgZGF0YSlcbiAgICAgICAgICBjYWxsYmFjay5jYWxsKHNjb3BlLCBudWxsLCBkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ2hyb21lUG9wdXBCcm93c2VyXG5cbmZ1bmN0aW9uIGI2NHRvQmxvYiAoYjY0RGF0YSwgY29udGVudFR5cGUgPSAnJywgc2xpY2VTaXplID0gNTEyKSB7XG4gIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gd2luZG93LmF0b2IoYjY0RGF0YSlcbiAgY29uc3QgYnl0ZUFycmF5cyA9IFtdXG5cbiAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBvZmZzZXQgKz0gc2xpY2VTaXplKSB7XG4gICAgY29uc3Qgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSlcblxuICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KHNsaWNlLmxlbmd0aClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBieXRlTnVtYmVyc1tpXSA9IHNsaWNlLmNoYXJDb2RlQXQoaSlcbiAgICB9XG5cbiAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycylcblxuICAgIGJ5dGVBcnJheXMucHVzaChieXRlQXJyYXkpXG4gIH1cblxuICBjb25zdCBibG9iID0gbmV3IHdpbmRvdy5CbG9iKGJ5dGVBcnJheXMsIHt0eXBlOiBjb250ZW50VHlwZX0pXG4gIHJldHVybiBibG9iXG59XG4iLCJ2YXIgQ29uZmlnID0gZnVuY3Rpb24gKCkge1xuXG59XG5cbkNvbmZpZy5wcm90b3R5cGUgPSB7XG5cbiAgc2l0ZW1hcERiOiAnPHVzZSBsb2FkQ29uZmlndXJhdGlvbigpPicsXG4gIGRhdGFEYjogJzx1c2UgbG9hZENvbmZpZ3VyYXRpb24oKT4nLFxuXG4gIGRlZmF1bHRzOiB7XG4gICAgc3RvcmFnZVR5cGU6ICdsb2NhbCcsXG5cdFx0Ly8gdGhpcyBpcyB3aGVyZSBzaXRlbWFwIGRvY3VtZW50cyBhcmUgc3RvcmVkXG4gICAgc2l0ZW1hcERiOiAnc2NyYXBlci1zaXRlbWFwcycsXG5cdFx0Ly8gdGhpcyBpcyB3aGVyZSBzY3JhcGVkIGRhdGEgaXMgc3RvcmVkLlxuXHRcdC8vIGVtcHR5IGZvciBsb2NhbCBzdG9yYWdlXG4gICAgZGF0YURiOiAnJ1xuICB9LFxuXG5cdC8qKlxuXHQgKiBMb2FkcyBjb25maWd1cmF0aW9uIGZyb20gY2hyb21lIGV4dGVuc2lvbiBzeW5jIHN0b3JhZ2Vcblx0ICovXG4gIGxvYWRDb25maWd1cmF0aW9uOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjaHJvbWUuc3RvcmFnZS5zeW5jLmdldChbJ3NpdGVtYXBEYicsICdkYXRhRGInLCAnc3RvcmFnZVR5cGUnXSwgZnVuY3Rpb24gKGl0ZW1zKSB7XG4gICAgICB0aGlzLnN0b3JhZ2VUeXBlID0gaXRlbXMuc3RvcmFnZVR5cGUgfHwgdGhpcy5kZWZhdWx0cy5zdG9yYWdlVHlwZVxuICAgICAgaWYgKHRoaXMuc3RvcmFnZVR5cGUgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgdGhpcy5zaXRlbWFwRGIgPSB0aGlzLmRlZmF1bHRzLnNpdGVtYXBEYlxuICAgICAgICB0aGlzLmRhdGFEYiA9IHRoaXMuZGVmYXVsdHMuZGF0YURiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNpdGVtYXBEYiA9IGl0ZW1zLnNpdGVtYXBEYiB8fCB0aGlzLmRlZmF1bHRzLnNpdGVtYXBEYlxuICAgICAgICB0aGlzLmRhdGFEYiA9IGl0ZW1zLmRhdGFEYiB8fCB0aGlzLmRlZmF1bHRzLmRhdGFEYlxuICAgICAgfVxuXG4gICAgICBjYWxsYmFjaygpXG4gICAgfS5iaW5kKHRoaXMpKVxuICB9LFxuXG5cdC8qKlxuXHQgKiBTYXZlcyBjb25maWd1cmF0aW9uIHRvIGNocm9tZSBleHRlbnNpb24gc3luYyBzdG9yYWdlXG5cdCAqIEBwYXJhbSB7dHlwZX0gaXRlbXNcblx0ICogQHBhcmFtIHt0eXBlfSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuXHQgKi9cbiAgdXBkYXRlQ29uZmlndXJhdGlvbjogZnVuY3Rpb24gKGl0ZW1zLCBjYWxsYmFjaykge1xuICAgIGNocm9tZS5zdG9yYWdlLnN5bmMuc2V0KGl0ZW1zLCBjYWxsYmFjaylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbmZpZ1xuIiwidmFyIENvbnRlbnRTZWxlY3RvciA9IHJlcXVpcmUoJy4vQ29udGVudFNlbGVjdG9yJylcbnZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxuLyoqXG4gKiBDb250ZW50U2NyaXB0IHRoYXQgY2FuIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlIHdpdGhpbiB0aGUgZXh0ZW5zaW9uXG4gKi9cbnZhciBDb250ZW50U2NyaXB0ID0ge1xuXG5cdC8qKlxuXHQgKiBGZXRjaFxuXHQgKiBAcGFyYW0gcmVxdWVzdC5DU1NTZWxlY3Rvclx0Y3NzIHNlbGVjdG9yIGFzIHN0cmluZ1xuXHQgKiBAcmV0dXJucyBqcXVlcnkuRGVmZXJyZWQoKVxuXHQgKi9cbiAgZ2V0SFRNTDogZnVuY3Rpb24gKHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgJCA9IG9wdGlvbnMuJFxuICAgIHZhciBkZWZlcnJlZEhUTUwgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICAgIHZhciBodG1sID0gJChyZXF1ZXN0LkNTU1NlbGVjdG9yKS5jbG9uZSgpLndyYXAoJzxwPicpLnBhcmVudCgpLmh0bWwoKVxuICAgIGRlZmVycmVkSFRNTC5yZXNvbHZlKGh0bWwpXG4gICAgcmV0dXJuIGRlZmVycmVkSFRNTC5wcm9taXNlKClcbiAgfSxcblxuXHQvKipcblx0ICogUmVtb3ZlcyBjdXJyZW50IGNvbnRlbnQgc2VsZWN0b3IgaWYgaXMgaW4gdXNlIHdpdGhpbiB0aGUgcGFnZVxuXHQgKiBAcmV0dXJucyBqcXVlcnkuRGVmZXJyZWQoKVxuXHQgKi9cbiAgcmVtb3ZlQ3VycmVudENvbnRlbnRTZWxlY3RvcjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgY29udGVudFNlbGVjdG9yID0gd2luZG93LmNzXG4gICAgaWYgKGNvbnRlbnRTZWxlY3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50U2VsZWN0b3IucmVtb3ZlR1VJKClcbiAgICAgIHdpbmRvdy5jcyA9IHVuZGVmaW5lZFxuICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZS5wcm9taXNlKClcbiAgfSxcblxuXHQvKipcblx0ICogU2VsZWN0IGVsZW1lbnRzIHdpdGhpbiB0aGUgcGFnZVxuXHQgKiBAcGFyYW0gcmVxdWVzdC5wYXJlbnRDU1NTZWxlY3RvclxuXHQgKiBAcGFyYW0gcmVxdWVzdC5hbGxvd2VkRWxlbWVudHNcblx0ICovXG4gIHNlbGVjdFNlbGVjdG9yOiBmdW5jdGlvbiAocmVxdWVzdCwgb3B0aW9ucykge1xuICAgIHZhciAkID0gb3B0aW9ucy4kXG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBqcXVlcnkuRGVmZXJyZWQoKVxuXG4gICAgdGhpcy5yZW1vdmVDdXJyZW50Q29udGVudFNlbGVjdG9yKCkuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udGVudFNlbGVjdG9yID0gbmV3IENvbnRlbnRTZWxlY3Rvcih7XG4gICAgICAgIHBhcmVudENTU1NlbGVjdG9yOiByZXF1ZXN0LnBhcmVudENTU1NlbGVjdG9yLFxuICAgICAgICBhbGxvd2VkRWxlbWVudHM6IHJlcXVlc3QuYWxsb3dlZEVsZW1lbnRzXG4gICAgICB9LCB7JCwgZG9jdW1lbnQsIHdpbmRvd30pXG4gICAgICB3aW5kb3cuY3MgPSBjb250ZW50U2VsZWN0b3JcblxuICAgICAgdmFyIGRlZmVycmVkQ1NTU2VsZWN0b3IgPSBjb250ZW50U2VsZWN0b3IuZ2V0Q1NTU2VsZWN0b3IoKVxuICAgICAgZGVmZXJyZWRDU1NTZWxlY3Rvci5kb25lKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUN1cnJlbnRDb250ZW50U2VsZWN0b3IoKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICAgICAgd2luZG93LmNzID0gdW5kZWZpbmVkXG4gICAgICAgIH0pXG4gICAgICB9LmJpbmQodGhpcykpLmZhaWwoZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZWplY3QobWVzc2FnZSlcbiAgICAgICAgd2luZG93LmNzID0gdW5kZWZpbmVkXG4gICAgICB9KVxuICAgIH0uYmluZCh0aGlzKSlcblxuICAgIHJldHVybiBkZWZlcnJlZFJlc3BvbnNlLnByb21pc2UoKVxuICB9LFxuXG5cdC8qKlxuXHQgKiBQcmV2aWV3IGVsZW1lbnRzXG5cdCAqIEBwYXJhbSByZXF1ZXN0LnBhcmVudENTU1NlbGVjdG9yXG5cdCAqIEBwYXJhbSByZXF1ZXN0LmVsZW1lbnRDU1NTZWxlY3RvclxuXHQgKi9cbiAgcHJldmlld1NlbGVjdG9yOiBmdW5jdGlvbiAocmVxdWVzdCwgb3B0aW9ucykge1xuICAgIHZhciAkID0gb3B0aW9ucy4kXG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICAgIHRoaXMucmVtb3ZlQ3VycmVudENvbnRlbnRTZWxlY3RvcigpLmRvbmUoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNvbnRlbnRTZWxlY3RvciA9IG5ldyBDb250ZW50U2VsZWN0b3Ioe1xuICAgICAgICBwYXJlbnRDU1NTZWxlY3RvcjogcmVxdWVzdC5wYXJlbnRDU1NTZWxlY3RvclxuICAgICAgfSwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICAgICAgd2luZG93LmNzID0gY29udGVudFNlbGVjdG9yXG5cbiAgICAgIHZhciBkZWZlcnJlZFNlbGVjdG9yUHJldmlldyA9IGNvbnRlbnRTZWxlY3Rvci5wcmV2aWV3U2VsZWN0b3IocmVxdWVzdC5lbGVtZW50Q1NTU2VsZWN0b3IpXG4gICAgICBkZWZlcnJlZFNlbGVjdG9yUHJldmlldy5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKClcbiAgICAgIH0pLmZhaWwoZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZWplY3QobWVzc2FnZSlcbiAgICAgICAgd2luZG93LmNzID0gdW5kZWZpbmVkXG4gICAgICB9KVxuICAgIH0pXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2VcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbnRlbnRTY3JpcHRcbiIsInZhciBFbGVtZW50UXVlcnkgPSByZXF1aXJlKCcuL0VsZW1lbnRRdWVyeScpXG52YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciBDc3NTZWxlY3RvciA9IHJlcXVpcmUoJ2Nzcy1zZWxlY3RvcicpLkNzc1NlbGVjdG9yXG4vKipcbiAqIEBwYXJhbSBvcHRpb25zLnBhcmVudENTU1NlbGVjdG9yXHRFbGVtZW50cyBjYW4gYmUgb25seSBzZWxlY3RlZCB3aXRoaW4gdGhpcyBlbGVtZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5hbGxvd2VkRWxlbWVudHNcdEVsZW1lbnRzIHRoYXQgY2FuIG9ubHkgYmUgc2VsZWN0ZWRcbiAqIEBjb25zdHJ1Y3RvclxuICovXG52YXIgQ29udGVudFNlbGVjdG9yID0gZnVuY3Rpb24gKG9wdGlvbnMsIG1vcmVPcHRpb25zKSB7XG5cdC8vIGRlZmVycmVkIHJlc3BvbnNlXG4gIHRoaXMuZGVmZXJyZWRDU1NTZWxlY3RvclJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcblxuICB0aGlzLmFsbG93ZWRFbGVtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEVsZW1lbnRzXG4gIHRoaXMucGFyZW50Q1NTU2VsZWN0b3IgPSBvcHRpb25zLnBhcmVudENTU1NlbGVjdG9yLnRyaW0oKVxuICB0aGlzLmFsZXJ0ID0gb3B0aW9ucy5hbGVydCB8fCBmdW5jdGlvbiAodHh0KSB7IGFsZXJ0KHR4dCkgfVxuXG4gIHRoaXMuJCA9IG1vcmVPcHRpb25zLiRcbiAgdGhpcy5kb2N1bWVudCA9IG1vcmVPcHRpb25zLmRvY3VtZW50XG4gIHRoaXMud2luZG93ID0gbW9yZU9wdGlvbnMud2luZG93XG4gIGlmICghdGhpcy4kKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcganF1ZXJ5IGluIGNvbnRlbnQgc2VsZWN0b3InKVxuICBpZiAoIXRoaXMuZG9jdW1lbnQpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgZG9jdW1lbnRcIilcbiAgaWYoIXRoaXMud2luZG93KSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHdpbmRvd1wiKVxuICBpZiAodGhpcy5wYXJlbnRDU1NTZWxlY3Rvcikge1xuICAgIHRoaXMucGFyZW50ID0gdGhpcy4kKHRoaXMucGFyZW50Q1NTU2VsZWN0b3IpWzBdXG5cblx0XHQvLyAgaGFuZGxlIHNpdHVhdGlvbiB3aGVuIHBhcmVudCBzZWxlY3RvciBub3QgZm91bmRcbiAgICBpZiAodGhpcy5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kZWZlcnJlZENTU1NlbGVjdG9yUmVzcG9uc2UucmVqZWN0KCdwYXJlbnQgc2VsZWN0b3Igbm90IGZvdW5kJylcbiAgICAgIHRoaXMuYWxlcnQoJ1BhcmVudCBlbGVtZW50IG5vdCBmb3VuZCEnKVxuICAgIH1cbiAgfVx0ZWxzZSB7XG4gICAgdGhpcy5wYXJlbnQgPSB0aGlzLiQoJ2JvZHknKVswXVxuICB9XG59XG5cbkNvbnRlbnRTZWxlY3Rvci5wcm90b3R5cGUgPSB7XG5cblx0LyoqXG5cdCAqIGdldCBjc3Mgc2VsZWN0b3Igc2VsZWN0ZWQgYnkgdGhlIHVzZXJcblx0ICovXG4gIGdldENTU1NlbGVjdG9yOiBmdW5jdGlvbiAocmVxdWVzdCkge1xuICAgIGlmICh0aGlzLmRlZmVycmVkQ1NTU2VsZWN0b3JSZXNwb25zZS5zdGF0ZSgpICE9PSAncmVqZWN0ZWQnKSB7XG5cdFx0XHQvLyBlbGVtZW50cyB0aGF0IGFyZSBzZWxlY3RlZCBieSB0aGUgdXNlclxuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gW11cblx0XHRcdC8vIGVsZW1lbnQgc2VsZWN0ZWQgZnJvbSB0b3BcbiAgICAgIHRoaXMudG9wID0gMFxuXG5cdFx0XHQvLyBpbml0aWFsaXplIGNzcyBzZWxlY3RvclxuICAgICAgdGhpcy5pbml0Q3NzU2VsZWN0b3IoZmFsc2UpXG5cbiAgICAgIHRoaXMuaW5pdEdVSSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmZXJyZWRDU1NTZWxlY3RvclJlc3BvbnNlLnByb21pc2UoKVxuICB9LFxuXG4gIGdldEN1cnJlbnRDU1NTZWxlY3RvcjogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudHMgJiYgdGhpcy5zZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBjc3NTZWxlY3RvclxuXG5cdFx0XHQvLyBoYW5kbGUgc3BlY2lhbCBjYXNlIHdoZW4gcGFyZW50IGlzIHNlbGVjdGVkXG4gICAgICBpZiAodGhpcy5pc1BhcmVudFNlbGVjdGVkKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBjc3NTZWxlY3RvciA9ICdfcGFyZW50XydcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiQoJyMtc2VsZWN0b3ItdG9vbGJhciBbbmFtZT1kaWZlcmVudEVsZW1lbnRTZWxlY3Rpb25dJykucHJvcCgnY2hlY2tlZCcpKSB7XG4gICAgICAgICAgdmFyIHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLnNlbGVjdGVkRWxlbWVudHMuY2xvbmUoKVxuICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHMuc3BsaWNlKHNlbGVjdGVkRWxlbWVudHMuaW5kZXhPZih0aGlzLnBhcmVudCksIDEpXG4gICAgICAgICAgY3NzU2VsZWN0b3IgPSAnX3BhcmVudF8sICcgKyB0aGlzLmNzc1NlbGVjdG9yLmdldENzc1NlbGVjdG9yKHNlbGVjdGVkRWxlbWVudHMsIHRoaXMudG9wKVxuICAgICAgICB9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHdpbGwgdHJpZ2dlciBlcnJvciB3aGVyZSBtdWx0aXBsZSBzZWxlY3Rpb25zIGFyZSBub3QgYWxsb3dlZFxuICAgICAgICAgIGNzc1NlbGVjdG9yID0gdGhpcy5jc3NTZWxlY3Rvci5nZXRDc3NTZWxlY3Rvcih0aGlzLnNlbGVjdGVkRWxlbWVudHMsIHRoaXMudG9wKVxuICAgICAgICB9XG4gICAgICB9XHRcdFx0ZWxzZSB7XG4gICAgICAgIGNzc1NlbGVjdG9yID0gdGhpcy5jc3NTZWxlY3Rvci5nZXRDc3NTZWxlY3Rvcih0aGlzLnNlbGVjdGVkRWxlbWVudHMsIHRoaXMudG9wKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3NzU2VsZWN0b3JcbiAgICB9XG4gICAgcmV0dXJuICcnXG4gIH0sXG5cbiAgaXNQYXJlbnRTZWxlY3RlZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRWxlbWVudHMuaW5kZXhPZih0aGlzLnBhcmVudCkgIT09IC0xXG4gIH0sXG5cblx0LyoqXG5cdCAqIGluaXRpYWxpemUgb3IgcmVjb25maWd1cmUgY3NzIHNlbGVjdG9yIGNsYXNzXG5cdCAqIEBwYXJhbSBhbGxvd011bHRpcGxlU2VsZWN0b3JzXG5cdCAqL1xuICBpbml0Q3NzU2VsZWN0b3I6IGZ1bmN0aW9uIChhbGxvd011bHRpcGxlU2VsZWN0b3JzKSB7XG4gICAgdGhpcy5jc3NTZWxlY3RvciA9IG5ldyBDc3NTZWxlY3Rvcih7XG4gICAgICBlbmFibGVTbWFydFRhYmxlU2VsZWN0b3I6IHRydWUsXG4gICAgICBwYXJlbnQ6IHRoaXMucGFyZW50LFxuICAgICAgYWxsb3dNdWx0aXBsZVNlbGVjdG9yczogYWxsb3dNdWx0aXBsZVNlbGVjdG9ycyxcbiAgICAgIGlnbm9yZWRDbGFzc2VzOiBbXG4gICAgICAgICctc2l0ZW1hcC1zZWxlY3QtaXRlbS1zZWxlY3RlZCcsXG4gICAgICAgICctc2l0ZW1hcC1zZWxlY3QtaXRlbS1ob3ZlcicsXG4gICAgICAgICctc2l0ZW1hcC1wYXJlbnQnLFxuICAgICAgICAnLXdlYi1zY3JhcGVyLWltZy1vbi10b3AnLFxuICAgICAgICAnLXdlYi1zY3JhcGVyLXNlbGVjdGlvbi1hY3RpdmUnXG4gICAgICBdLFxuICAgICAgcXVlcnk6IHRoaXMuJFxuICAgIH0pXG4gIH0sXG5cbiAgcHJldmlld1NlbGVjdG9yOiBmdW5jdGlvbiAoZWxlbWVudENTU1NlbGVjdG9yKSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgdmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgaWYgKHRoaXMuZGVmZXJyZWRDU1NTZWxlY3RvclJlc3BvbnNlLnN0YXRlKCkgIT09ICdyZWplY3RlZCcpIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0UGFyZW50KClcbiAgICAgICQoRWxlbWVudFF1ZXJ5KGVsZW1lbnRDU1NTZWxlY3RvciwgdGhpcy5wYXJlbnQsIHskLCBkb2N1bWVudCwgd2luZG93fSkpLmFkZENsYXNzKCctc2l0ZW1hcC1zZWxlY3QtaXRlbS1zZWxlY3RlZCcpXG4gICAgICB0aGlzLmRlZmVycmVkQ1NTU2VsZWN0b3JSZXNwb25zZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZlcnJlZENTU1NlbGVjdG9yUmVzcG9uc2UucHJvbWlzZSgpXG4gIH0sXG5cbiAgaW5pdEdVSTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICB0aGlzLmhpZ2hsaWdodFBhcmVudCgpXG5cblx0XHQvLyBhbGwgZWxlbWVudHMgZXhjZXB0IHRvb2xiYXJcbiAgICB0aGlzLiRhbGxFbGVtZW50cyA9IHRoaXMuJCh0aGlzLmFsbG93ZWRFbGVtZW50cyArICc6bm90KCMtc2VsZWN0b3ItdG9vbGJhcik6bm90KCMtc2VsZWN0b3ItdG9vbGJhciAqKScsIHRoaXMucGFyZW50KVxuXHRcdC8vIGFsbG93IHNlbGVjdGluZyBwYXJlbnQgYWxzb1xuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgdGhpcy4kYWxsRWxlbWVudHMucHVzaCh0aGlzLnBhcmVudClcbiAgICB9XG5cbiAgICB0aGlzLmJpbmRFbGVtZW50SGlnaGxpZ2h0KClcbiAgICB0aGlzLmJpbmRFbGVtZW50U2VsZWN0aW9uKClcbiAgICB0aGlzLmJpbmRLZXlib2FyZFNlbGVjdGlvbk1hbmlwdWxhdGlvbnMoKVxuICAgIHRoaXMuYXR0YWNoVG9vbGJhcigpXG4gICAgdGhpcy5iaW5kTXVsdGlwbGVHcm91cENoZWNrYm94KClcbiAgICB0aGlzLmJpbmRNdWx0aXBsZUdyb3VwUG9wdXBIaWRlKClcbiAgICB0aGlzLmJpbmRNb3ZlSW1hZ2VzVG9Ub3AoKVxuICB9LFxuXG4gIGJpbmRFbGVtZW50U2VsZWN0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kYWxsRWxlbWVudHMuYmluZCgnY2xpY2suZWxlbWVudFNlbGVjdG9yJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gZS5jdXJyZW50VGFyZ2V0XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5wdXNoKGVsZW1lbnQpXG4gICAgICB9XG4gICAgICB0aGlzLmhpZ2hsaWdodFNlbGVjdGVkRWxlbWVudHMoKVxuXG5cdFx0XHQvLyBDYW5jZWwgYWxsIG90aGVyIGV2ZW50c1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfS5iaW5kKHRoaXMpKVxuICB9LFxuXG5cdC8qKlxuXHQgKiBBZGQgdG8gc2VsZWN0IGVsZW1lbnRzIHRoZSBlbGVtZW50IHRoYXQgaXMgdW5kZXIgdGhlIG1vdXNlXG5cdCAqL1xuICBzZWxlY3RNb3VzZU92ZXJFbGVtZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLm1vdXNlT3ZlckVsZW1lbnRcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzLnB1c2goZWxlbWVudClcbiAgICAgIHRoaXMuaGlnaGxpZ2h0U2VsZWN0ZWRFbGVtZW50cygpXG4gICAgfVxuICB9LFxuXG4gIGJpbmRFbGVtZW50SGlnaGxpZ2h0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICAkKHRoaXMuJGFsbEVsZW1lbnRzKS5iaW5kKCdtb3VzZW92ZXIuZWxlbWVudFNlbGVjdG9yJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gZS5jdXJyZW50VGFyZ2V0XG4gICAgICB0aGlzLm1vdXNlT3ZlckVsZW1lbnQgPSBlbGVtZW50XG4gICAgICAkKGVsZW1lbnQpLmFkZENsYXNzKCctc2l0ZW1hcC1zZWxlY3QtaXRlbS1ob3ZlcicpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LmJpbmQodGhpcykpLmJpbmQoJ21vdXNlb3V0LmVsZW1lbnRTZWxlY3RvcicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGUuY3VycmVudFRhcmdldFxuICAgICAgdGhpcy5tb3VzZU92ZXJFbGVtZW50ID0gbnVsbFxuICAgICAgJChlbGVtZW50KS5yZW1vdmVDbGFzcygnLXNpdGVtYXAtc2VsZWN0LWl0ZW0taG92ZXInKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfS5iaW5kKHRoaXMpKVxuICB9LFxuXG4gIGJpbmRNb3ZlSW1hZ2VzVG9Ub3A6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgICQoJ2JvZHknKS5hZGRDbGFzcygnLXdlYi1zY3JhcGVyLXNlbGVjdGlvbi1hY3RpdmUnKVxuXG5cdFx0Ly8gZG8gdGhpcyBvbmx5IHdoZW4gc2VsZWN0aW5nIGltYWdlc1xuICAgIGlmICh0aGlzLmFsbG93ZWRFbGVtZW50cyA9PT0gJ2ltZycpIHtcbiAgICAgICQoJ2ltZycpLmZpbHRlcihmdW5jdGlvbiAoaSwgZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gJChlbGVtZW50KS5jc3MoJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnXG4gICAgICB9KS5hZGRDbGFzcygnLXdlYi1zY3JhcGVyLWltZy1vbi10b3AnKVxuICAgIH1cbiAgfSxcblxuICB1bmJpbmRNb3ZlSW1hZ2VzVG9Ub3A6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiQoJ2JvZHkuLXdlYi1zY3JhcGVyLXNlbGVjdGlvbi1hY3RpdmUnKS5yZW1vdmVDbGFzcygnLXdlYi1zY3JhcGVyLXNlbGVjdGlvbi1hY3RpdmUnKVxuICAgIHRoaXMuJCgnaW1nLi13ZWItc2NyYXBlci1pbWctb24tdG9wJykucmVtb3ZlQ2xhc3MoJy13ZWItc2NyYXBlci1pbWctb24tdG9wJylcbiAgfSxcblxuICBzZWxlY3RDaGlsZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudG9wLS1cbiAgICBpZiAodGhpcy50b3AgPCAwKSB7XG4gICAgICB0aGlzLnRvcCA9IDBcbiAgICB9XG4gIH0sXG4gIHNlbGVjdFBhcmVudDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudG9wKytcbiAgfSxcblxuXHQvLyBVc2VyIHdpdGgga2V5Ym9hcmQgYXJyb3dzIGNhbiBzZWxlY3QgY2hpbGQgb3IgcGFyZXQgZWxlbWVudHMgb2Ygc2VsZWN0ZWQgZWxlbWVudHMuXG4gIGJpbmRLZXlib2FyZFNlbGVjdGlvbk1hbmlwdWxhdGlvbnM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcblx0XHQvLyBjaGVjayBmb3IgZm9jdXNcbiAgICB2YXIgbGFzdEZvY3VzU3RhdHVzXG4gICAgdGhpcy5rZXlQcmVzc0ZvY3VzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZm9jdXMgPSBkb2N1bWVudC5oYXNGb2N1cygpXG4gICAgICBpZiAoZm9jdXMgPT09IGxhc3RGb2N1c1N0YXR1cykgcmV0dXJuXG4gICAgICBsYXN0Rm9jdXNTdGF0dXMgPSBmb2N1c1xuXG4gICAgICAkKCcjLXNlbGVjdG9yLXRvb2xiYXIgLmtleS1idXR0b24nKS50b2dnbGVDbGFzcygnaGlkZScsICFmb2N1cylcbiAgICAgICQoJyMtc2VsZWN0b3ItdG9vbGJhciAua2V5LWV2ZW50cycpLnRvZ2dsZUNsYXNzKCdoaWRlJywgZm9jdXMpXG4gICAgfSwgMjAwKVxuXG5cdFx0Ly8gVXNpbmcgdXAvZG93biBhcnJvd3MgdXNlciBjYW4gc2VsZWN0IGVsZW1lbnRzIGZyb20gdG9wIG9mIHRoZVxuXHRcdC8vIHNlbGVjdGVkIGVsZW1lbnRcbiAgICAkKGRvY3VtZW50KS5iaW5kKCdrZXlkb3duLnNlbGVjdGlvbk1hbmlwdWxhdGlvbicsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0Ly8gc2VsZWN0IGNoaWxkIENcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSA2Nykge1xuICAgICAgICB0aGlzLmFuaW1hdGVDbGlja2VkS2V5KCQoJyMtc2VsZWN0b3ItdG9vbGJhciAua2V5LWJ1dHRvbi1jaGlsZCcpKVxuICAgICAgICB0aGlzLnNlbGVjdENoaWxkKClcbiAgICAgIH1cblx0XHRcdC8vIHNlbGVjdCBwYXJlbnQgUFxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gODApIHtcbiAgICAgICAgdGhpcy5hbmltYXRlQ2xpY2tlZEtleSgkKCcjLXNlbGVjdG9yLXRvb2xiYXIgLmtleS1idXR0b24tcGFyZW50JykpXG4gICAgICAgIHRoaXMuc2VsZWN0UGFyZW50KClcbiAgICAgIH1cblx0XHRcdC8vIHNlbGVjdCBlbGVtZW50XG4gICAgICBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSA4Mykge1xuICAgICAgICB0aGlzLmFuaW1hdGVDbGlja2VkS2V5KCQoJyMtc2VsZWN0b3ItdG9vbGJhciAua2V5LWJ1dHRvbi1zZWxlY3QnKSlcbiAgICAgICAgdGhpcy5zZWxlY3RNb3VzZU92ZXJFbGVtZW50KClcbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWdobGlnaHRTZWxlY3RlZEVsZW1lbnRzKClcbiAgICB9LmJpbmQodGhpcykpXG4gIH0sXG5cbiAgYW5pbWF0ZUNsaWNrZWRLZXk6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICAkKGVsZW1lbnQpLnJlbW92ZUNsYXNzKCdjbGlja2VkJykucmVtb3ZlQ2xhc3MoJ2NsaWNrZWQtYW5pbWF0aW9uJylcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICQoZWxlbWVudCkuYWRkQ2xhc3MoJ2NsaWNrZWQnKVxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoZWxlbWVudCkuYWRkQ2xhc3MoJ2NsaWNrZWQtYW5pbWF0aW9uJylcbiAgICAgIH0sIDEwMClcbiAgICB9LCAxKVxuICB9LFxuXG4gIGhpZ2hsaWdodFNlbGVjdGVkRWxlbWVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICB2YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICB0cnkge1xuICAgICAgdmFyIHJlc3VsdENzc1NlbGVjdG9yID0gdGhpcy5nZXRDdXJyZW50Q1NTU2VsZWN0b3IoKVxuXG4gICAgICAkKCdib2R5ICMtc2VsZWN0b3ItdG9vbGJhciAuc2VsZWN0b3InKS50ZXh0KHJlc3VsdENzc1NlbGVjdG9yKVxuXHRcdFx0Ly8gaGlnaGxpZ2h0IHNlbGVjdGVkIGVsZW1lbnRzXG4gICAgICAkKCcuLXNpdGVtYXAtc2VsZWN0LWl0ZW0tc2VsZWN0ZWQnKS5yZW1vdmVDbGFzcygnLXNpdGVtYXAtc2VsZWN0LWl0ZW0tc2VsZWN0ZWQnKVxuICAgICAgJChFbGVtZW50UXVlcnkocmVzdWx0Q3NzU2VsZWN0b3IsIHRoaXMucGFyZW50LCB7JCwgZG9jdW1lbnQsIHdpbmRvd30pKS5hZGRDbGFzcygnLXNpdGVtYXAtc2VsZWN0LWl0ZW0tc2VsZWN0ZWQnKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciA9PT0gJ2ZvdW5kIG11bHRpcGxlIGVsZW1lbnQgZ3JvdXBzLCBidXQgYWxsb3dNdWx0aXBsZVNlbGVjdG9ycyBkaXNhYmxlZCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ211bHRpcGxlIGRpZmZlcmVudCBlbGVtZW50IHNlbGVjdGlvbiBkaXNhYmxlZCcpXG5cbiAgICAgICAgdGhpcy5zaG93TXVsdGlwbGVHcm91cFBvcHVwKClcblx0XHRcdFx0Ly8gcmVtb3ZlIGxhc3QgYWRkZWQgZWxlbWVudFxuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucG9wKClcbiAgICAgICAgdGhpcy5oaWdobGlnaHRTZWxlY3RlZEVsZW1lbnRzKClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgc2hvd011bHRpcGxlR3JvdXBQb3B1cDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJCgnIy1zZWxlY3Rvci10b29sYmFyIC5wb3BvdmVyJykuYXR0cignc3R5bGUnLCAnZGlzcGxheTpibG9jayAhaW1wb3J0YW50OycpXG4gIH0sXG5cbiAgaGlkZU11bHRpcGxlR3JvdXBQb3B1cDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJCgnIy1zZWxlY3Rvci10b29sYmFyIC5wb3BvdmVyJykuYXR0cignc3R5bGUnLCAnJylcbiAgfSxcblxuICBiaW5kTXVsdGlwbGVHcm91cFBvcHVwSGlkZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJCgnIy1zZWxlY3Rvci10b29sYmFyIC5wb3BvdmVyIC5jbG9zZScpLmNsaWNrKHRoaXMuaGlkZU11bHRpcGxlR3JvdXBQb3B1cC5iaW5kKHRoaXMpKVxuICB9LFxuXG4gIHVuYmluZE11bHRpcGxlR3JvdXBQb3B1cEhpZGU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiQoJyMtc2VsZWN0b3ItdG9vbGJhciAucG9wb3ZlciAuY2xvc2UnKS51bmJpbmQoJ2NsaWNrJylcbiAgfSxcblxuICBiaW5kTXVsdGlwbGVHcm91cENoZWNrYm94OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICAkKCcjLXNlbGVjdG9yLXRvb2xiYXIgW25hbWU9ZGlmZXJlbnRFbGVtZW50U2VsZWN0aW9uXScpLmNoYW5nZShmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKCQoZS5jdXJyZW50VGFyZ2V0KS5pcygnOmNoZWNrZWQnKSkge1xuICAgICAgICB0aGlzLmluaXRDc3NTZWxlY3Rvcih0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbml0Q3NzU2VsZWN0b3IoZmFsc2UpXG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKVxuICB9LFxuICB1bmJpbmRNdWx0aXBsZUdyb3VwQ2hlY2tib3g6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiQoJyMtc2VsZWN0b3ItdG9vbGJhciAuZGlmZXJlbnRFbGVtZW50U2VsZWN0aW9uJykudW5iaW5kKCdjaGFuZ2UnKVxuICB9LFxuXG4gIGF0dGFjaFRvb2xiYXI6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgIHZhciAkdG9vbGJhciA9ICc8ZGl2IGlkPVwiLXNlbGVjdG9yLXRvb2xiYXJcIj4nICtcblx0XHRcdCc8ZGl2IGNsYXNzPVwibGlzdC1pdGVtXCI+PGRpdiBjbGFzcz1cInNlbGVjdG9yLWNvbnRhaW5lclwiPjxkaXYgY2xhc3M9XCJzZWxlY3RvclwiPjwvZGl2PjwvZGl2PjwvZGl2PicgK1xuXHRcdFx0JzxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvbiBsaXN0LWl0ZW1cIj4nICtcblx0XHRcdFx0JzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB0aXRsZT1cIkVuYWJsZSBkaWZmZXJlbnQgdHlwZSBlbGVtZW50IHNlbGVjdGlvblwiIG5hbWU9XCJkaWZlcmVudEVsZW1lbnRTZWxlY3Rpb25cIj4nICtcblx0XHRcdFx0JzxkaXYgY2xhc3M9XCJwb3BvdmVyIHRvcFwiPicgK1xuXHRcdFx0XHQnPGRpdiBjbGFzcz1cImNsb3NlXCI+w5c8L2Rpdj4nICtcblx0XHRcdFx0JzxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PicgK1xuXHRcdFx0XHQnPGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudFwiPicgK1xuXHRcdFx0XHQnPGRpdiBjbGFzcz1cInR4dFwiPicgK1xuXHRcdFx0XHQnRGlmZmVyZW50IHR5cGUgZWxlbWVudCBzZWxlY3Rpb24gaXMgZGlzYWJsZWQuIElmIHRoZSBlbGVtZW50ICcgK1xuXHRcdFx0XHQneW91IGNsaWNrZWQgc2hvdWxkIGFsc28gYmUgaW5jbHVkZWQgdGhlbiBlbmFibGUgdGhpcyBhbmQgJyArXG5cdFx0XHRcdCdjbGljayBvbiB0aGUgZWxlbWVudCBhZ2Fpbi4gVXN1YWxseSB0aGlzIGlzIG5vdCBuZWVkZWQuJyArXG5cdFx0XHRcdCc8L2Rpdj4nICtcblx0XHRcdFx0JzwvZGl2PicgK1xuXHRcdFx0XHQnPC9kaXY+JyArXG5cdFx0XHQnPC9kaXY+JyArXG5cdFx0XHQnPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBrZXktZXZlbnRzXCI+PGRpdiB0aXRsZT1cIkNsaWNrIGhlcmUgdG8gZW5hYmxlIGtleSBwcmVzcyBldmVudHMgZm9yIHNlbGVjdGlvblwiPkVuYWJsZSBrZXkgZXZlbnRzPC9kaXY+PC9kaXY+JyArXG5cdFx0XHQnPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBrZXktYnV0dG9uIGtleS1idXR0b24tc2VsZWN0IGhpZGVcIiB0aXRsZT1cIlVzZSBTIGtleSB0byBzZWxlY3QgZWxlbWVudFwiPlM8L2Rpdj4nICtcblx0XHRcdCc8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGtleS1idXR0b24ga2V5LWJ1dHRvbi1wYXJlbnQgaGlkZVwiIHRpdGxlPVwiVXNlIFAga2V5IHRvIHNlbGVjdCBwYXJlbnRcIj5QPC9kaXY+JyArXG5cdFx0XHQnPGRpdiBjbGFzcz1cImxpc3QtaXRlbSBrZXktYnV0dG9uIGtleS1idXR0b24tY2hpbGQgaGlkZVwiIHRpdGxlPVwiVXNlIEMga2V5IHRvIHNlbGVjdCBjaGlsZFwiPkM8L2Rpdj4nICtcblx0XHRcdCc8ZGl2IGNsYXNzPVwibGlzdC1pdGVtIGRvbmUtc2VsZWN0aW5nLWJ1dHRvblwiPkRvbmUgc2VsZWN0aW5nITwvZGl2PicgK1xuXHRcdFx0JzwvZGl2PidcbiAgICAkKCdib2R5JykuYXBwZW5kKCR0b29sYmFyKVxuXG4gICAgJCgnYm9keSAjLXNlbGVjdG9yLXRvb2xiYXIgLmRvbmUtc2VsZWN0aW5nLWJ1dHRvbicpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uRmluaXNoZWQoKVxuICAgIH0uYmluZCh0aGlzKSlcbiAgfSxcbiAgaGlnaGxpZ2h0UGFyZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICQgPSB0aGlzLiRcblx0XHQvLyBkbyBub3QgaGlnaGxpZ2h0IHBhcmVudCBpZiBpdHMgdGhlIGJvZHlcbiAgICBpZiAoISQodGhpcy5wYXJlbnQpLmlzKCdib2R5JykgJiYgISQodGhpcy5wYXJlbnQpLmlzKCcjd2VicGFnZScpKSB7XG4gICAgICAkKHRoaXMucGFyZW50KS5hZGRDbGFzcygnLXNpdGVtYXAtcGFyZW50JylcbiAgICB9XG4gIH0sXG5cbiAgdW5iaW5kRWxlbWVudFNlbGVjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgIHZhciAkID0gdGhpcy4kXG4gICAgJCh0aGlzLiRhbGxFbGVtZW50cykudW5iaW5kKCdjbGljay5lbGVtZW50U2VsZWN0b3InKVxuXHRcdC8vIHJlbW92ZSBoaWdobGlnaHRlZCBlbGVtZW50IGNsYXNzZXNcbiAgICB0aGlzLnVuYmluZEVsZW1lbnRTZWxlY3Rpb25IaWdobGlnaHQoKVxuICB9LFxuICB1bmJpbmRFbGVtZW50U2VsZWN0aW9uSGlnaGxpZ2h0OiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kKCcuLXNpdGVtYXAtc2VsZWN0LWl0ZW0tc2VsZWN0ZWQnKS5yZW1vdmVDbGFzcygnLXNpdGVtYXAtc2VsZWN0LWl0ZW0tc2VsZWN0ZWQnKVxuICAgIHRoaXMuJCgnLi1zaXRlbWFwLXBhcmVudCcpLnJlbW92ZUNsYXNzKCctc2l0ZW1hcC1wYXJlbnQnKVxuICB9LFxuICB1bmJpbmRFbGVtZW50SGlnaGxpZ2h0OiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kKHRoaXMuJGFsbEVsZW1lbnRzKS51bmJpbmQoJ21vdXNlb3Zlci5lbGVtZW50U2VsZWN0b3InKVxuXHRcdFx0LnVuYmluZCgnbW91c2VvdXQuZWxlbWVudFNlbGVjdG9yJylcbiAgfSxcbiAgdW5iaW5kS2V5Ym9hcmRTZWxlY3Rpb25NYWlwdWxhdGlvczogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJChkb2N1bWVudCkudW5iaW5kKCdrZXlkb3duLnNlbGVjdGlvbk1hbmlwdWxhdGlvbicpXG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmtleVByZXNzRm9jdXNJbnRlcnZhbClcbiAgfSxcbiAgcmVtb3ZlVG9vbGJhcjogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJCgnYm9keSAjLXNlbGVjdG9yLXRvb2xiYXIgYScpLnVuYmluZCgnY2xpY2snKVxuICAgIHRoaXMuJCgnIy1zZWxlY3Rvci10b29sYmFyJykucmVtb3ZlKClcbiAgfSxcblxuXHQvKipcblx0ICogUmVtb3ZlIHRvb2xiYXIgYW5kIHVuYmluZCBldmVudHNcblx0ICovXG4gIHJlbW92ZUdVSTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudW5iaW5kRWxlbWVudFNlbGVjdGlvbigpXG4gICAgdGhpcy51bmJpbmRFbGVtZW50SGlnaGxpZ2h0KClcbiAgICB0aGlzLnVuYmluZEtleWJvYXJkU2VsZWN0aW9uTWFpcHVsYXRpb3MoKVxuICAgIHRoaXMudW5iaW5kTXVsdGlwbGVHcm91cFBvcHVwSGlkZSgpXG4gICAgdGhpcy51bmJpbmRNdWx0aXBsZUdyb3VwQ2hlY2tib3goKVxuICAgIHRoaXMudW5iaW5kTW92ZUltYWdlc1RvVG9wKClcbiAgICB0aGlzLnJlbW92ZVRvb2xiYXIoKVxuICB9LFxuXG4gIHNlbGVjdGlvbkZpbmlzaGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdENzc1NlbGVjdG9yID0gdGhpcy5nZXRDdXJyZW50Q1NTU2VsZWN0b3IoKVxuXG4gICAgdGhpcy5kZWZlcnJlZENTU1NlbGVjdG9yUmVzcG9uc2UucmVzb2x2ZSh7XG4gICAgICBDU1NTZWxlY3RvcjogcmVzdWx0Q3NzU2VsZWN0b3JcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29udGVudFNlbGVjdG9yXG4iLCJ2YXIgU2VsZWN0b3JMaXN0ID0gcmVxdWlyZSgnLi9TZWxlY3Rvckxpc3QnKVxudmFyIFNpdGVtYXAgPSByZXF1aXJlKCcuL1NpdGVtYXAnKVxudmFyIHdoZW5DYWxsU2VxdWVudGlhbGx5ID0gcmVxdWlyZSgnLi4vYXNzZXRzL2pxdWVyeS53aGVuY2FsbHNlcXVlbnRpYWxseScpXG52YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcblxudmFyIERhdGFFeHRyYWN0b3IgPSBmdW5jdGlvbiAob3B0aW9ucywgbW9yZU9wdGlvbnMpIHtcbiAgdGhpcy4kID0gbW9yZU9wdGlvbnMuJFxudGhpcy5kb2N1bWVudCA9IG1vcmVPcHRpb25zLmRvY3VtZW50XG50aGlzLndpbmRvdyA9IG1vcmVPcHRpb25zLndpbmRvd1xuICBpZiAoIW1vcmVPcHRpb25zLiQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcganF1ZXJ5IGluIERhdGEgRXh0cmFjdG9yJylcbiAgfVxuICBpZiAoIW1vcmVPcHRpb25zLmRvY3VtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGRvY3VtZW50IGluIERhdGEgRXh0cmFjdG9yJylcbiAgfVxuICBpZiAoIW1vcmVPcHRpb25zLndpbmRvdykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB3aW5kb3cgaW4gRGF0YSBFeHRyYWN0b3InKVxuICB9XG4gIHZhciAkID0gdGhpcy4kXG4gIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgdmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gIGlmIChvcHRpb25zLnNpdGVtYXAgaW5zdGFuY2VvZiBTaXRlbWFwKSB7XG4gICAgdGhpcy5zaXRlbWFwID0gb3B0aW9ucy5zaXRlbWFwXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zaXRlbWFwID0gbmV3IFNpdGVtYXAob3B0aW9ucy5zaXRlbWFwLCB7JCwgZG9jdW1lbnQsIHdpbmRvd30pXG4gIH1cblxuICB0aGlzLnBhcmVudFNlbGVjdG9ySWQgPSBvcHRpb25zLnBhcmVudFNlbGVjdG9ySWRcbiAgdGhpcy5wYXJlbnRFbGVtZW50ID0gb3B0aW9ucy5wYXJlbnRFbGVtZW50IHx8ICQoJ2h0bWwnKVswXVxufVxuXG5EYXRhRXh0cmFjdG9yLnByb3RvdHlwZSA9IHtcblxuXHQvKipcblx0ICogUmV0dXJucyBhIGxpc3Qgb2YgaW5kZXBlbmRlbnQgc2VsZWN0b3IgbGlzdHMuIGZvbGxvdz10cnVlIHNwbGl0cyBzZWxlY3RvcnMgaW4gdHJlZXMuXG5cdCAqIFR3byBzaWRlIGJ5IHNpZGUgdHlwZT1tdWx0aXBsZSBzZWxlY3RvcnMgc3BsaXQgdHJlZXMuXG5cdCAqL1xuICBmaW5kU2VsZWN0b3JUcmVlczogZnVuY3Rpb24gKCkge1xuICAgIHZhciAkID0gdGhpcy4kXG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgIHZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICAgIHJldHVybiB0aGlzLl9maW5kU2VsZWN0b3JUcmVlcyh0aGlzLnBhcmVudFNlbGVjdG9ySWQsIG5ldyBTZWxlY3Rvckxpc3QobnVsbCwgeyQsIHdpbmRvdywgZG9jdW1lbnR9KSlcbiAgfSxcblxuXHQvKipcblx0ICogdGhlIHNlbGVjdG9yIGNhbm5vdCByZXR1cm4gbXVsdGlwbGUgcmVjb3JkcyBhbmQgaXQgYWxzbyBjYW5ub3QgY3JlYXRlIG5ldyBqb2JzLiBBbHNvIGFsbCBvZiBpdHMgY2hpbGQgc2VsZWN0b3JzXG5cdCAqIG11c3QgaGF2ZSB0aGUgc2FtZSBmZWF0dXJlc1xuXHQgKiBAcGFyYW0gc2VsZWN0b3Jcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuICBzZWxlY3RvcklzQ29tbW9uVG9BbGxUcmVlczogZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG5cdFx0Ly8gc2VsZWN0b3JzIHdoaWNoIHJldHVybiBtdXRpcGxlIGl0ZW1zIGNhbm5vdCBiZSBjb21tb24gdG8gYWxsXG5cdFx0Ly8gc2VsZWN0b3JzXG4gICAgaWYgKHNlbGVjdG9yLndpbGxSZXR1cm5NdWx0aXBsZVJlY29yZHMoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG5cdFx0Ly8gTGluayBzZWxlY3RvcnMgd2hpY2ggd2lsbCBmb2xsb3cgdG8gYSBuZXcgcGFnZSBhbHNvIGNhbm5vdCBiZSBjb21tb25cblx0XHQvLyB0byBhbGwgc2VsZWN0b3JzXG4gICAgaWYgKHNlbGVjdG9yLmNhbkNyZWF0ZU5ld0pvYnMoKSAmJlxuXHRcdFx0dGhpcy5zaXRlbWFwLmdldERpcmVjdENoaWxkU2VsZWN0b3JzKHNlbGVjdG9yLmlkKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cblx0XHQvLyBhbHNvIGFsbCBjaGlsZCBzZWxlY3RvcnMgbXVzdCBoYXZlIHRoZSBzYW1lIGZlYXR1cmVzXG4gICAgdmFyIGNoaWxkU2VsZWN0b3JzID0gdGhpcy5zaXRlbWFwLmdldEFsbFNlbGVjdG9ycyhzZWxlY3Rvci5pZClcbiAgICBmb3IgKHZhciBpIGluIGNoaWxkU2VsZWN0b3JzKSB7XG4gICAgICB2YXIgY2hpbGRTZWxlY3RvciA9IGNoaWxkU2VsZWN0b3JzW2ldXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0b3JJc0NvbW1vblRvQWxsVHJlZXMoY2hpbGRTZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgZ2V0U2VsZWN0b3JzQ29tbW9uVG9BbGxUcmVlczogZnVuY3Rpb24gKHBhcmVudFNlbGVjdG9ySWQpIHtcbiAgICB2YXIgY29tbW9uU2VsZWN0b3JzID0gW11cbiAgICB2YXIgY2hpbGRTZWxlY3RvcnMgPSB0aGlzLnNpdGVtYXAuZ2V0RGlyZWN0Q2hpbGRTZWxlY3RvcnMocGFyZW50U2VsZWN0b3JJZClcblxuICAgIGNoaWxkU2VsZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkU2VsZWN0b3IpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdG9ySXNDb21tb25Ub0FsbFRyZWVzKGNoaWxkU2VsZWN0b3IpKSB7XG4gICAgICAgIGNvbW1vblNlbGVjdG9ycy5wdXNoKGNoaWxkU2VsZWN0b3IpXG5cdFx0XHRcdC8vIGFsc28gYWRkIGFsbCBjaGlsZCBzZWxlY3RvcnMgd2hpY2guIENoaWxkIHNlbGVjdG9ycyB3ZXJlIGFsc28gY2hlY2tlZFxuXG4gICAgICAgIHZhciBzZWxlY3RvckNoaWxkU2VsZWN0b3JzID0gdGhpcy5zaXRlbWFwLmdldEFsbFNlbGVjdG9ycyhjaGlsZFNlbGVjdG9yLmlkKVxuICAgICAgICBzZWxlY3RvckNoaWxkU2VsZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICAgICAgaWYgKGNvbW1vblNlbGVjdG9ycy5pbmRleE9mKHNlbGVjdG9yKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGNvbW1vblNlbGVjdG9ycy5wdXNoKHNlbGVjdG9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICByZXR1cm4gY29tbW9uU2VsZWN0b3JzXG4gIH0sXG5cbiAgX2ZpbmRTZWxlY3RvclRyZWVzOiBmdW5jdGlvbiAocGFyZW50U2VsZWN0b3JJZCwgY29tbW9uU2VsZWN0b3JzRnJvbVBhcmVudCkge1xuICAgIHZhciBjb21tb25TZWxlY3RvcnMgPSBjb21tb25TZWxlY3RvcnNGcm9tUGFyZW50LmNvbmNhdCh0aGlzLmdldFNlbGVjdG9yc0NvbW1vblRvQWxsVHJlZXMocGFyZW50U2VsZWN0b3JJZCkpXG5cblx0XHQvLyBmaW5kIHNlbGVjdG9ycyB0aGF0IHdpbGwgYmUgbWFraW5nIGEgc2VsZWN0b3IgdHJlZVxuICAgIHZhciBzZWxlY3RvclRyZWVzID0gW11cbiAgICB2YXIgY2hpbGRTZWxlY3RvcnMgPSB0aGlzLnNpdGVtYXAuZ2V0RGlyZWN0Q2hpbGRTZWxlY3RvcnMocGFyZW50U2VsZWN0b3JJZClcbiAgICBjaGlsZFNlbGVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdG9ySXNDb21tb25Ub0FsbFRyZWVzKHNlbGVjdG9yKSkge1xuXHRcdFx0XHQvLyB0aGlzIHNlbGVjdG9yIHdpbGwgYmUgbWFraW5nIGEgbmV3IHNlbGVjdG9yIHRyZWUuIEJ1dCB0aGlzIHNlbGVjdG9yIG1pZ2h0IGNvbnRhaW4gc29tZSBjaGlsZFxuXHRcdFx0XHQvLyBzZWxlY3RvcnMgdGhhdCBhcmUgbWFraW5nIG1vcmUgdHJlZXMgc28gaGVyZSBzaG91bGQgYmUgYSBzb21lIGtpbmQgb2Ygc2VwZXJhdGlvbiBmb3IgdGhhdFxuICAgICAgICBpZiAoIXNlbGVjdG9yLmNhbkhhdmVMb2NhbENoaWxkU2VsZWN0b3JzKCkpIHtcbiAgICAgICAgICB2YXIgc2VsZWN0b3JUcmVlID0gY29tbW9uU2VsZWN0b3JzLmNvbmNhdChbc2VsZWN0b3JdKVxuICAgICAgICAgIHNlbGVjdG9yVHJlZXMucHVzaChzZWxlY3RvclRyZWUpXG4gICAgICAgIH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZmluZCBzZWxlY3RvciB0cmVlIHdpdGhpbiB0aGlzIHNlbGVjdG9yXG4gICAgICAgICAgdmFyIGNvbW1vblNlbGVjdG9yc0Zyb21QYXJlbnQgPSBjb21tb25TZWxlY3RvcnMuY29uY2F0KFtzZWxlY3Rvcl0pXG4gICAgICAgICAgdmFyIGNoaWxkU2VsZWN0b3JUcmVlcyA9IHRoaXMuX2ZpbmRTZWxlY3RvclRyZWVzKHNlbGVjdG9yLmlkLCBjb21tb25TZWxlY3RvcnNGcm9tUGFyZW50KVxuICAgICAgICAgIHNlbGVjdG9yVHJlZXMgPSBzZWxlY3RvclRyZWVzLmNvbmNhdChjaGlsZFNlbGVjdG9yVHJlZXMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpXG5cblx0XHQvLyBpdCB0aGVyZSB3ZXJlIG5vdCBhbnkgc2VsZWN0b3JzIHRoYXQgbWFrZSBhIHNlcGFyYXRlIHRyZWUgdGhlbiBhbGwgY29tbW9uIHNlbGVjdG9ycyBtYWtlIHVwIGEgc2luZ2xlIHNlbGVjdG9yIHRyZWVcbiAgICBpZiAoc2VsZWN0b3JUcmVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbY29tbW9uU2VsZWN0b3JzXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc2VsZWN0b3JUcmVlc1xuICAgIH1cbiAgfSxcblxuICBnZXRTZWxlY3RvclRyZWVDb21tb25EYXRhOiBmdW5jdGlvbiAoc2VsZWN0b3JzLCBwYXJlbnRTZWxlY3RvcklkLCBwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyIGNoaWxkU2VsZWN0b3JzID0gc2VsZWN0b3JzLmdldERpcmVjdENoaWxkU2VsZWN0b3JzKHBhcmVudFNlbGVjdG9ySWQpXG4gICAgdmFyIGRlZmVycmVkRGF0YUNhbGxzID0gW11cbiAgICBjaGlsZFNlbGVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgaWYgKCFzZWxlY3RvcnMud2lsbFJldHVybk11bHRpcGxlUmVjb3JkcyhzZWxlY3Rvci5pZCkpIHtcbiAgICAgICAgZGVmZXJyZWREYXRhQ2FsbHMucHVzaCh0aGlzLmdldFNlbGVjdG9yQ29tbW9uRGF0YS5iaW5kKHRoaXMsIHNlbGVjdG9ycywgc2VsZWN0b3IsIHBhcmVudEVsZW1lbnQpKVxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSlcblxuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkZWZlcnJlZERhdGFDYWxscykuZG9uZShmdW5jdGlvbiAocmVzcG9uc2VzKSB7XG4gICAgICB2YXIgY29tbW9uRGF0YSA9IHt9XG4gICAgICByZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBjb21tb25EYXRhID0gT2JqZWN0LmFzc2lnbihjb21tb25EYXRhLCBkYXRhKVxuICAgICAgfSlcbiAgICAgIGRlZmVycmVkUmVzcG9uc2UucmVzb2x2ZShjb21tb25EYXRhKVxuICAgIH0pXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZVxuICB9LFxuXG4gIGdldFNlbGVjdG9yQ29tbW9uRGF0YTogZnVuY3Rpb24gKHNlbGVjdG9ycywgc2VsZWN0b3IsIHBhcmVudEVsZW1lbnQpIHtcbiAgICB2YXIgZCA9IGpxdWVyeS5EZWZlcnJlZCgpXG4gICAgdmFyIGRlZmVycmVkRGF0YSA9IHNlbGVjdG9yLmdldERhdGEocGFyZW50RWxlbWVudClcbiAgICBkZWZlcnJlZERhdGEuZG9uZShmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgaWYgKHNlbGVjdG9yLndpbGxSZXR1cm5FbGVtZW50cygpKSB7XG4gICAgICAgIHZhciBuZXdQYXJlbnRFbGVtZW50ID0gZGF0YVswXVxuICAgICAgICB2YXIgZGVmZXJyZWRDaGlsZENvbW1vbkRhdGEgPSB0aGlzLmdldFNlbGVjdG9yVHJlZUNvbW1vbkRhdGEoc2VsZWN0b3JzLCBzZWxlY3Rvci5pZCwgbmV3UGFyZW50RWxlbWVudClcbiAgICAgICAgZGVmZXJyZWRDaGlsZENvbW1vbkRhdGEuZG9uZShmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGQucmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfVx0XHRcdGVsc2Uge1xuICAgICAgICBkLnJlc29sdmUoZGF0YVswXSlcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICByZXR1cm4gZFxuICB9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFsbCBkYXRhIHJlY29yZHMgZm9yIGEgc2VsZWN0b3IgdGhhdCBjYW4gcmV0dXJuIG11bHRpcGxlIHJlY29yZHNcblx0ICovXG4gIGdldE11bHRpU2VsZWN0b3JEYXRhOiBmdW5jdGlvbiAoc2VsZWN0b3JzLCBzZWxlY3RvciwgcGFyZW50RWxlbWVudCwgY29tbW9uRGF0YSkge1xuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgZGVmZXJyZWREYXRhXG5cdFx0Ly8gaWYgdGhlIHNlbGVjdG9yIGlzIG5vdCBhbiBFbGVtZW50IHNlbGVjdG9yIHRoZW4gaXRzIGZldGNoZWQgZGF0YSBpcyB0aGUgcmVzdWx0LlxuICAgIGlmICghc2VsZWN0b3Iud2lsbFJldHVybkVsZW1lbnRzKCkpIHtcbiAgICAgIGRlZmVycmVkRGF0YSA9IHNlbGVjdG9yLmdldERhdGEocGFyZW50RWxlbWVudClcbiAgICAgIGRlZmVycmVkRGF0YS5kb25lKGZ1bmN0aW9uIChzZWxlY3RvckRhdGEpIHtcbiAgICAgICAgdmFyIG5ld0NvbW1vbkRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbW1vbkRhdGEpKVxuICAgICAgICB2YXIgcmVzdWx0RGF0YSA9IFtdXG5cbiAgICAgICAgc2VsZWN0b3JEYXRhLmZvckVhY2goZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBuZXdDb21tb25EYXRhKVxuICAgICAgICAgIHJlc3VsdERhdGEucHVzaChyZWNvcmQpXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKHJlc3VsdERhdGEpXG4gICAgICB9KVxuICAgIH1cblxuXHRcdC8vIGhhbmRsZSBzaXR1YXRpb24gd2hlbiB0aGlzIHNlbGVjdG9yIGlzIGFuIGVsZW1lbnRTZWxlY3RvclxuICAgIGRlZmVycmVkRGF0YSA9IHNlbGVjdG9yLmdldERhdGEocGFyZW50RWxlbWVudClcbiAgICBkZWZlcnJlZERhdGEuZG9uZShmdW5jdGlvbiAoc2VsZWN0b3JEYXRhKSB7XG4gICAgICB2YXIgZGVmZXJyZWREYXRhQ2FsbHMgPSBbXVxuXG4gICAgICBzZWxlY3RvckRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB2YXIgbmV3Q29tbW9uRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tbW9uRGF0YSkpXG4gICAgICAgIHZhciBjaGlsZFJlY29yZERlZmVycmVkQ2FsbCA9IHRoaXMuZ2V0U2VsZWN0b3JUcmVlRGF0YS5iaW5kKHRoaXMsIHNlbGVjdG9ycywgc2VsZWN0b3IuaWQsIGVsZW1lbnQsIG5ld0NvbW1vbkRhdGEpXG4gICAgICAgIGRlZmVycmVkRGF0YUNhbGxzLnB1c2goY2hpbGRSZWNvcmREZWZlcnJlZENhbGwpXG4gICAgICB9LmJpbmQodGhpcykpXG5cbiAgICAgIHdoZW5DYWxsU2VxdWVudGlhbGx5KGRlZmVycmVkRGF0YUNhbGxzKS5kb25lKGZ1bmN0aW9uIChyZXNwb25zZXMpIHtcbiAgICAgICAgdmFyIHJlc3VsdERhdGEgPSBbXVxuICAgICAgICByZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGRSZWNvcmRMaXN0KSB7XG4gICAgICAgICAgY2hpbGRSZWNvcmRMaXN0LmZvckVhY2goZnVuY3Rpb24gKGNoaWxkUmVjb3JkKSB7XG4gICAgICAgICAgICB2YXIgcmVjID0ge31cbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVjLCBjaGlsZFJlY29yZClcbiAgICAgICAgICAgIHJlc3VsdERhdGEucHVzaChyZWMpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKHJlc3VsdERhdGEpXG4gICAgICB9KVxuICAgIH0uYmluZCh0aGlzKSlcblxuICAgIHJldHVybiBkZWZlcnJlZFJlc3BvbnNlXG4gIH0sXG5cbiAgZ2V0U2VsZWN0b3JUcmVlRGF0YTogZnVuY3Rpb24gKHNlbGVjdG9ycywgcGFyZW50U2VsZWN0b3JJZCwgcGFyZW50RWxlbWVudCwgY29tbW9uRGF0YSkge1xuICAgIHZhciBjaGlsZFNlbGVjdG9ycyA9IHNlbGVjdG9ycy5nZXREaXJlY3RDaGlsZFNlbGVjdG9ycyhwYXJlbnRTZWxlY3RvcklkKVxuICAgIHZhciBjaGlsZENvbW1vbkRhdGFEZWZlcnJlZCA9IHRoaXMuZ2V0U2VsZWN0b3JUcmVlQ29tbW9uRGF0YShzZWxlY3RvcnMsIHBhcmVudFNlbGVjdG9ySWQsIHBhcmVudEVsZW1lbnQpXG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBqcXVlcnkuRGVmZXJyZWQoKVxuXG4gICAgY2hpbGRDb21tb25EYXRhRGVmZXJyZWQuZG9uZShmdW5jdGlvbiAoY2hpbGRDb21tb25EYXRhKSB7XG4gICAgICBjb21tb25EYXRhID0gT2JqZWN0LmFzc2lnbihjb21tb25EYXRhLCBjaGlsZENvbW1vbkRhdGEpXG5cbiAgICAgIHZhciBkYXRhRGVmZXJyZWRDYWxscyA9IFtdXG5cbiAgICAgIGNoaWxkU2VsZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICAgIGlmIChzZWxlY3RvcnMud2lsbFJldHVybk11bHRpcGxlUmVjb3JkcyhzZWxlY3Rvci5pZCkpIHtcbiAgICAgICAgICB2YXIgbmV3Q29tbW9uRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tbW9uRGF0YSkpXG4gICAgICAgICAgdmFyIGRhdGFEZWZlcnJlZENhbGwgPSB0aGlzLmdldE11bHRpU2VsZWN0b3JEYXRhLmJpbmQodGhpcywgc2VsZWN0b3JzLCBzZWxlY3RvciwgcGFyZW50RWxlbWVudCwgbmV3Q29tbW9uRGF0YSlcbiAgICAgICAgICBkYXRhRGVmZXJyZWRDYWxscy5wdXNoKGRhdGFEZWZlcnJlZENhbGwpXG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSlcblxuXHRcdFx0Ly8gbWVyZ2UgYWxsIGRhdGEgcmVjb3JkcyB0b2dldGhlclxuICAgICAgd2hlbkNhbGxTZXF1ZW50aWFsbHkoZGF0YURlZmVycmVkQ2FsbHMpLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlcykge1xuICAgICAgICB2YXIgcmVzdWx0RGF0YSA9IFtdXG4gICAgICAgIHJlc3BvbnNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZFJlY29yZHMpIHtcbiAgICAgICAgICBjaGlsZFJlY29yZHMuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGRSZWNvcmQpIHtcbiAgICAgICAgICAgIHZhciByZWMgPSB7fVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZWMsIGNoaWxkUmVjb3JkKVxuICAgICAgICAgICAgcmVzdWx0RGF0YS5wdXNoKHJlYylcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChyZXN1bHREYXRhLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGFyZSBubyBtdWx0aSByZWNvcmQgZ3JvdXBzIHRoZW4gcmV0dXJuIGNvbW1vbiBkYXRhLlxuXHRcdFx0XHRcdC8vIEluIGEgY2FzZSB3aGVyZSBjb21tb24gZGF0YSBpcyBlbXB0eSByZXR1cm4gbm90aGluZy5cbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY29tbW9uRGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoW10pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmVycmVkUmVzcG9uc2UucmVzb2x2ZShbY29tbW9uRGF0YV0pXG4gICAgICAgICAgfVxuICAgICAgICB9XHRcdFx0XHRlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUocmVzdWx0RGF0YSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZVxuICB9LFxuXG4gIGdldERhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZWN0b3JUcmVlcyA9IHRoaXMuZmluZFNlbGVjdG9yVHJlZXMoKVxuICAgIHZhciBkYXRhRGVmZXJyZWRDYWxscyA9IFtdXG5cbiAgICBzZWxlY3RvclRyZWVzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yVHJlZSkge1xuICAgICAgdmFyIGRlZmVycmVkVHJlZURhdGFDYWxsID0gdGhpcy5nZXRTZWxlY3RvclRyZWVEYXRhLmJpbmQodGhpcywgc2VsZWN0b3JUcmVlLCB0aGlzLnBhcmVudFNlbGVjdG9ySWQsIHRoaXMucGFyZW50RWxlbWVudCwge30pXG4gICAgICBkYXRhRGVmZXJyZWRDYWxscy5wdXNoKGRlZmVycmVkVHJlZURhdGFDYWxsKVxuICAgIH0uYmluZCh0aGlzKSlcblxuICAgIHZhciByZXNwb25zZURlZmVycmVkID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkYXRhRGVmZXJyZWRDYWxscykuZG9uZShmdW5jdGlvbiAocmVzcG9uc2VzKSB7XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdXG4gICAgICByZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YVJlc3VsdHMpIHtcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KGRhdGFSZXN1bHRzKVxuICAgICAgfSlcbiAgICAgIHJlc3BvbnNlRGVmZXJyZWQucmVzb2x2ZShyZXN1bHRzKVxuICAgIH0pXG4gICAgcmV0dXJuIHJlc3BvbnNlRGVmZXJyZWRcbiAgfSxcblxuICBnZXRTaW5nbGVTZWxlY3RvckRhdGE6IGZ1bmN0aW9uIChwYXJlbnRTZWxlY3Rvcklkcywgc2VsZWN0b3JJZCwgb3B0aW9ucykge1xuICAgIHZhciAkID0gdGhpcy4kIHx8IG9wdGlvbnMuJFxuICAgIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnQgfHwgb3B0aW9ucy5kb2N1bWVudFxuICAgIHZhciB3aW5kb3cgPSB0aGlzLndpbmRvdyB8fCBvcHRpb25zLndpbmRvd1xuXG5cdFx0Ly8gdG8gZmV0Y2ggb25seSBzaW5nbGUgc2VsZWN0b3JzIGRhdGEgd2Ugd2lsbCBjcmVhdGUgYSBzaXRlbWFwIHRoYXQgb25seSBjb250YWlucyB0aGlzIHNlbGVjdG9yLCBoaXNcblx0XHQvLyBwYXJlbnRzIGFuZCBhbGwgY2hpbGQgc2VsZWN0b3JzXG4gICAgdmFyIHNpdGVtYXAgPSB0aGlzLnNpdGVtYXBcbiAgICB2YXIgc2VsZWN0b3IgPSB0aGlzLnNpdGVtYXAuc2VsZWN0b3JzLmdldFNlbGVjdG9yKHNlbGVjdG9ySWQpXG4gICAgdmFyIGNoaWxkU2VsZWN0b3JzID0gc2l0ZW1hcC5zZWxlY3RvcnMuZ2V0QWxsU2VsZWN0b3JzKHNlbGVjdG9ySWQpXG4gICAgdmFyIHBhcmVudFNlbGVjdG9ycyA9IFtdXG4gICAgdmFyIGlcbiAgICB2YXIgaWRcbiAgICB2YXIgcGFyZW50U2VsZWN0b3JcbiAgICBmb3IgKGkgPSBwYXJlbnRTZWxlY3Rvcklkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWQgPSBwYXJlbnRTZWxlY3Rvcklkc1tpXVxuICAgICAgaWYgKGlkID09PSAnX3Jvb3QnKSBicmVha1xuICAgICAgcGFyZW50U2VsZWN0b3IgPSB0aGlzLnNpdGVtYXAuc2VsZWN0b3JzLmdldFNlbGVjdG9yKGlkKVxuICAgICAgcGFyZW50U2VsZWN0b3JzLnB1c2gocGFyZW50U2VsZWN0b3IpXG4gICAgfVxuXG5cdFx0Ly8gbWVyZ2UgYWxsIG5lZWRlZCBzZWxlY3RvcnMgdG9nZXRoZXJcbiAgICB2YXIgc2VsZWN0b3JzID0gcGFyZW50U2VsZWN0b3JzLmNvbmNhdChjaGlsZFNlbGVjdG9ycylcbiAgICBzZWxlY3RvcnMucHVzaChzZWxlY3RvcilcbiAgICBzaXRlbWFwLnNlbGVjdG9ycyA9IG5ldyBTZWxlY3Rvckxpc3Qoc2VsZWN0b3JzLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG5cbiAgICB2YXIgcGFyZW50U2VsZWN0b3JJZFxuXHRcdC8vIGZpbmQgdGhlIHBhcmVudCB0aGF0IGxlYWRlZCB0byB0aGUgcGFnZSB3aGVyZSByZXF1aXJlZCBzZWxlY3RvciBpcyBiZWluZyB1c2VkXG4gICAgZm9yIChpID0gcGFyZW50U2VsZWN0b3JJZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlkID0gcGFyZW50U2VsZWN0b3JJZHNbaV1cbiAgICAgIGlmIChpZCA9PT0gJ19yb290Jykge1xuICAgICAgICBwYXJlbnRTZWxlY3RvcklkID0gaWRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHBhcmVudFNlbGVjdG9yID0gdGhpcy5zaXRlbWFwLnNlbGVjdG9ycy5nZXRTZWxlY3RvcihwYXJlbnRTZWxlY3Rvcklkc1tpXSlcbiAgICAgIGlmICghcGFyZW50U2VsZWN0b3Iud2lsbFJldHVybkVsZW1lbnRzKCkpIHtcbiAgICAgICAgcGFyZW50U2VsZWN0b3JJZCA9IGlkXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGFyZW50U2VsZWN0b3JJZCA9IHBhcmVudFNlbGVjdG9ySWRcblxuICAgIHJldHVybiB0aGlzLmdldERhdGEoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YUV4dHJhY3RvclxuIiwiLyoqXG4gKiBFbGVtZW50IHNlbGVjdG9yLiBVc2VzIGpRdWVyeSBhcyBiYXNlIGFuZCBhZGRzIHNvbWUgbW9yZSBmZWF0dXJlc1xuICogQHBhcmFtIENTU1NlbGVjdG9yXG4gKiBAcGFyYW0gcGFyZW50RWxlbWVudFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xudmFyIEVsZW1lbnRRdWVyeSA9IGZ1bmN0aW9uIChDU1NTZWxlY3RvciwgcGFyZW50RWxlbWVudCwgb3B0aW9ucykge1xuICBDU1NTZWxlY3RvciA9IENTU1NlbGVjdG9yIHx8ICcnXG4gIHRoaXMuJCA9IG9wdGlvbnMuJFxudGhpcy5kb2N1bWVudCA9IG9wdGlvbnMuZG9jdW1lbnRcbnRoaXMud2luZG93ID0gb3B0aW9ucy53aW5kb3dcbiAgaWYgKCF0aGlzLiQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBqcXVlcnkgZm9yIEVsZW1lbnRRdWVyeScpXG5pZiAoIXRoaXMuZG9jdW1lbnQpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgZG9jdW1lbnRcIilcbmlmKCF0aGlzLndpbmRvdyl0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHdpbmRvd1wiKVxuICB2YXIgc2VsZWN0ZWRFbGVtZW50cyA9IFtdXG5cbiAgdmFyIGFkZEVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkgPT09IC0xKSB7XG4gICAgICBzZWxlY3RlZEVsZW1lbnRzLnB1c2goZWxlbWVudClcbiAgICB9XG4gIH1cblxuICB2YXIgc2VsZWN0b3JQYXJ0cyA9IEVsZW1lbnRRdWVyeS5nZXRTZWxlY3RvclBhcnRzKENTU1NlbGVjdG9yKVxuICB2YXIgc2VsZiA9IHRoaXNcbiAgc2VsZWN0b3JQYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuXHRcdC8vIGhhbmRsZSBzcGVjaWFsIGNhc2Ugd2hlbiBwYXJlbnQgaXMgc2VsZWN0ZWRcbiAgICBpZiAoc2VsZWN0b3IgPT09ICdfcGFyZW50XycpIHtcbiAgICAgIHNlbGYuJChwYXJlbnRFbGVtZW50KS5lYWNoKGZ1bmN0aW9uIChpLCBlbGVtZW50KSB7XG4gICAgICAgIGFkZEVsZW1lbnQoZWxlbWVudClcbiAgICAgIH0pXG4gICAgfVx0XHRlbHNlIHtcbiAgICAgIHZhciBlbGVtZW50cyA9IHNlbGYuJChzZWxlY3Rvciwgc2VsZi4kKHBhcmVudEVsZW1lbnQpKVxuICAgICAgZWxlbWVudHMuZWFjaChmdW5jdGlvbiAoaSwgZWxlbWVudCkge1xuICAgICAgICBhZGRFbGVtZW50KGVsZW1lbnQpXG4gICAgICB9KVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50c1xufVxuXG5FbGVtZW50UXVlcnkuZ2V0U2VsZWN0b3JQYXJ0cyA9IGZ1bmN0aW9uIChDU1NTZWxlY3Rvcikge1xuICB2YXIgc2VsZWN0b3JzID0gQ1NTU2VsZWN0b3Iuc3BsaXQoLygsfFwiLio/XCJ8Jy4qPyd8XFwoLio/XFwpKS8pXG5cbiAgdmFyIHJlc3VsdFNlbGVjdG9ycyA9IFtdXG4gIHZhciBjdXJyZW50U2VsZWN0b3IgPSAnJ1xuICBzZWxlY3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICBpZiAoc2VsZWN0b3IgPT09ICcsJykge1xuICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rvci50cmltKCkubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFNlbGVjdG9ycy5wdXNoKGN1cnJlbnRTZWxlY3Rvci50cmltKCkpXG4gICAgICB9XG4gICAgICBjdXJyZW50U2VsZWN0b3IgPSAnJ1xuICAgIH1cdFx0ZWxzZSB7XG4gICAgICBjdXJyZW50U2VsZWN0b3IgKz0gc2VsZWN0b3JcbiAgICB9XG4gIH0pXG4gIGlmIChjdXJyZW50U2VsZWN0b3IudHJpbSgpLmxlbmd0aCkge1xuICAgIHJlc3VsdFNlbGVjdG9ycy5wdXNoKGN1cnJlbnRTZWxlY3Rvci50cmltKCkpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0U2VsZWN0b3JzXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRWxlbWVudFF1ZXJ5XG4iLCJjb25zdCBqc2RvbSA9IHJlcXVpcmUoJ2pzZG9tJylcbmNvbnN0IGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpXG52YXIganF1ZXJ5RGVmZXJyZWQgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxuXG5jb25zdCBjb250ZW50U2NyYXBlciA9IHJlcXVpcmUoJy4uL2NvbnRlbnRfc2NyaXB0L2NvbnRlbnRfc2NyYXBlcicpXG52YXIgd2hlbkNhbGxTZXF1ZW50aWFsbHkgPSByZXF1aXJlKCcuLi9hc3NldHMvanF1ZXJ5LndoZW5jYWxsc2VxdWVudGlhbGx5JylcblxudmFyIEpTRE9NQnJvd3NlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHRoaXMucGFnZUxvYWREZWxheSA9IG9wdGlvbnMucGFnZUxvYWREZWxheVxufVxuXG5KU0RPTUJyb3dzZXIucHJvdG90eXBlID0ge1xuICBsb2FkVXJsOiBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHtKU0RPTX0gPSBqc2RvbVxuICAgIGNvbnN0IGJyb3dzZXIgPSB0aGlzXG4gICAgSlNET00uZnJvbVVSTCh1cmwpXG4gICAgICAudGhlbihmdW5jdGlvbiAoZG9tKSB7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IGRvbS53aW5kb3dcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnRcbiAgICAgICAgY29uc3QgJCA9IGpRdWVyeShkb20ud2luZG93KVxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYWxsYmFjayhudWxsLCB7JCwgZG9jdW1lbnQsIHdpbmRvd30pXG4gICAgICAgIH0sIGJyb3dzZXIucGFnZUxvYWREZWxheSlcbiAgICAgIH0pLmNhdGNoKGUgPT4gY2FsbGJhY2soZSkpXG4gIH0sXG4gIGNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cbiAgfSxcbiAgc2F2ZUltYWdlczogZnVuY3Rpb24gKHJlY29yZCwgbmFtaW5nRnVuY3Rpb24pIHtcbiAgICB2YXIgZGVmZXJyZWRSZXNwb25zZSA9IGpxdWVyeURlZmVycmVkLkRlZmVycmVkKClcbiAgICB2YXIgZGVmZXJyZWRJbWFnZVN0b3JlQ2FsbHMgPSBbXVxuICAgIHZhciBwcmVmaXhMZW5ndGggPSAnX2ltYWdlQmFzZTY0LScubGVuZ3RoXG4gICAgZm9yICh2YXIgYXR0ciBpbiByZWNvcmQpIHtcbiAgICAgIGlmIChhdHRyLnN1YnN0cigwLCBwcmVmaXhMZW5ndGgpID09PSAnX2ltYWdlQmFzZTY0LScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb3dubG9hZGluZyBpbWFnZXMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKVxuICAgICAgfVxuICAgIH1cbiAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkZWZlcnJlZEltYWdlU3RvcmVDYWxscykuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZS5wcm9taXNlKClcbiAgfSxcbiAgZmV0Y2hEYXRhOiBmdW5jdGlvbiAodXJsLCBzaXRlbWFwLCBwYXJlbnRTZWxlY3RvcklkLCBjYWxsYmFjaywgc2NvcGUpIHtcbiAgICBjb25zdCBicm93c2VyID0gdGhpc1xuICAgIGNvbnNvbGUubG9nKCdJbml0IGpzZG9tIGJyb3dzZXIgYXBwJylcbiAgICBicm93c2VyLmxvYWRVcmwodXJsLCBmdW5jdGlvbiAoZXJyLCB7JCwgZG9jdW1lbnQsIHdpbmRvd30pIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cblxuICAgICAgdmFyIG1lc3NhZ2UgPSB7XG4gICAgICAgIGV4dHJhY3REYXRhOiB0cnVlLFxuICAgICAgICBzaXRlbWFwOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNpdGVtYXApKSxcbiAgICAgICAgcGFyZW50U2VsZWN0b3JJZDogcGFyZW50U2VsZWN0b3JJZFxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc2VuZFJlc3BvbnNlIChkYXRhKSB7XG4gICAgICAgIGNhbGxiYWNrLmNhbGwoc2NvcGUsIG51bGwsIGRhdGEpXG4gICAgICB9XG4gICAgICBjb250ZW50U2NyYXBlcihtZXNzYWdlLCBudWxsLCBzZW5kUmVzcG9uc2UsIHskLCBkb2N1bWVudCwgd2luZG93fSlcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSlNET01Ccm93c2VyXG4iLCJjb25zdCBKU0RPTUJyb3dzZXIgPSByZXF1aXJlKCcuL0pTRE9NQnJvd3NlcicpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWxmKSB7XG4gIHZhciBicm93c2VyID1cblxuICBzZWxmLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBlcnI6IG5ldyBFcnJvcihlcnIpXG4gICAgfSlcbiAgICBzZWxmLmNsb3NlKClcbiAgfVxuICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXYpIHtcbiAgICBjb25zdCBkYXRhID0gZXYuZGF0YVxuICAgIGNvbnN0IFVVSUQgPSBkYXRhLlVVSURcbiAgICBpZiAoZGF0YS50b3BpYyA9PT0gJ2luaXQnKSB7XG4gICAgICBicm93c2VyID0gbmV3IEpTRE9NQnJvd3NlcihkYXRhLm9wdGlvbnMpXG4gICAgICByZXR1cm4gc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgIFVVSURcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChkYXRhLnRvcGljID09PSAnbG9hZFVybCcpIHtcbiAgICAgIGJyb3dzZXIubG9hZFVybChkYXRhLnVybCwgZnVuY3Rpb24gKGVyciwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBVVUlELFxuICAgICAgICAgICAgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBVVUlEXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoZGF0YS50b3BpYyA9PT0gJ2ZldGNoRGF0YScpIHtcbiAgICAgIGJyb3dzZXIuZmV0Y2hEYXRhKGRhdGEudXJsLCBkYXRhLnNpdGVtYXAsIGRhdGEucGFyZW50U2VsZWN0b3JJZCwgZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgVVVJRCxcbiAgICAgICAgICAgIGVyclxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgVVVJRCxcbiAgICAgICAgICBpbmZvOiB7XG4gICAgICAgICAgICByZXN1bHRzXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSwgbnVsbClcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICAgIGVycjogbmV3IEVycm9yKCdVbmtub3duICB0b3BpYyAnICsgZGF0YS50b3BpYylcbiAgICAgIH0pXG4gICAgfVxuICB9KVxufSIsIlxudmFyIEpvYiA9IGZ1bmN0aW9uICh1cmwsIHBhcmVudFNlbGVjdG9yLCBzY3JhcGVyLCBwYXJlbnRKb2IsIGJhc2VEYXRhKSB7XG4gIGlmIChwYXJlbnRKb2IgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudXJsID0gdGhpcy5jb21iaW5lVXJscyhwYXJlbnRKb2IudXJsLCB1cmwpXG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSB1cmxcbiAgfVxuICB0aGlzLnBhcmVudFNlbGVjdG9yID0gcGFyZW50U2VsZWN0b3JcbiAgdGhpcy5zY3JhcGVyID0gc2NyYXBlclxuICB0aGlzLmRhdGFJdGVtcyA9IFtdXG4gIHRoaXMuYmFzZURhdGEgPSBiYXNlRGF0YSB8fCB7fVxufVxuXG5Kb2IucHJvdG90eXBlID0ge1xuXG4gIGNvbWJpbmVVcmxzOiBmdW5jdGlvbiAocGFyZW50VXJsLCBjaGlsZFVybCkge1xuICAgIHZhciB1cmxNYXRjaGVyID0gbmV3IFJlZ0V4cCgnKGh0dHBzPzovLyk/KFthLXowLTlcXFxcLVxcXFwuXStcXFxcLlthLXowLTlcXFxcLV0rKDpcXFxcZCspP3xcXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9KDpcXFxcZCspPyk/KFxcXFwvW15cXFxcP10qXFxcXC98XFxcXC8pPyhbXlxcXFw/XSopPyhcXFxcPy4qKT8nLCAnaScpXG5cbiAgICB2YXIgcGFyZW50TWF0Y2hlcyA9IHBhcmVudFVybC5tYXRjaCh1cmxNYXRjaGVyKVxuICAgIHZhciBjaGlsZE1hdGNoZXMgPSBjaGlsZFVybC5tYXRjaCh1cmxNYXRjaGVyKVxuXG5cdFx0Ly8gc3BlY2lhbCBjYXNlIGZvciB1cmxzIGxpa2UgdGhpczogP2E9MSAgb3IgbGlrZS10aGlzL1xuICAgIGlmIChjaGlsZE1hdGNoZXNbMV0gPT09IHVuZGVmaW5lZCAmJiBjaGlsZE1hdGNoZXNbMl0gPT09IHVuZGVmaW5lZCAmJiBjaGlsZE1hdGNoZXNbNV0gPT09IHVuZGVmaW5lZCAmJiBjaGlsZE1hdGNoZXNbNl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHVybCA9IHBhcmVudE1hdGNoZXNbMV0gKyBwYXJlbnRNYXRjaGVzWzJdICsgcGFyZW50TWF0Y2hlc1s1XSArIHBhcmVudE1hdGNoZXNbNl0gKyBjaGlsZE1hdGNoZXNbN11cbiAgICAgIHJldHVybiB1cmxcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRNYXRjaGVzWzFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkTWF0Y2hlc1sxXSA9IHBhcmVudE1hdGNoZXNbMV1cbiAgICB9XG4gICAgaWYgKGNoaWxkTWF0Y2hlc1syXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZE1hdGNoZXNbMl0gPSBwYXJlbnRNYXRjaGVzWzJdXG4gICAgfVxuICAgIGlmIChjaGlsZE1hdGNoZXNbNV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHBhcmVudE1hdGNoZXNbNV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjaGlsZE1hdGNoZXNbNV0gPSAnLydcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkTWF0Y2hlc1s1XSA9IHBhcmVudE1hdGNoZXNbNV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hpbGRNYXRjaGVzWzZdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkTWF0Y2hlc1s2XSA9ICcnXG4gICAgfVxuICAgIGlmIChjaGlsZE1hdGNoZXNbN10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGRNYXRjaGVzWzddID0gJydcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRNYXRjaGVzWzFdICsgY2hpbGRNYXRjaGVzWzJdICsgY2hpbGRNYXRjaGVzWzVdICsgY2hpbGRNYXRjaGVzWzZdICsgY2hpbGRNYXRjaGVzWzddXG4gIH0sXG5cbiAgZXhlY3V0ZTogZnVuY3Rpb24gKGJyb3dzZXIsIGNhbGxiYWNrLCBzY29wZSkge1xuICAgIHZhciBzaXRlbWFwID0gdGhpcy5zY3JhcGVyLnNpdGVtYXBcbiAgICB2YXIgam9iID0gdGhpc1xuICAgIGNvbnNvbGUubG9nKCdzdGFydGluZyBmZXRjaGluZycpXG4gICAgYnJvd3Nlci5mZXRjaERhdGEodGhpcy51cmwsIHNpdGVtYXAsIHRoaXMucGFyZW50U2VsZWN0b3IsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdHMpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBmZXRjaGluZycpXG5cdFx0XHQvLyBtZXJnZSBkYXRhIHdpdGggZGF0YSBmcm9tIGluaXRpYWxpemF0aW9uXG4gICAgICBmb3IgKHZhciBpIGluIHJlc3VsdHMpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHNbaV1cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuYmFzZURhdGEpIHtcbiAgICAgICAgICBpZiAoIShrZXkgaW4gcmVzdWx0KSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmJhc2VEYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhSXRlbXMucHVzaChyZXN1bHQpXG4gICAgICB9XG4gICAgICBjYWxsYmFjayhudWxsLCBqb2IpXG4gICAgfS5iaW5kKHRoaXMpLCB0aGlzKVxuICB9LFxuICBnZXRSZXN1bHRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUl0ZW1zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBKb2JcbiIsIlxudmFyIFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmpvYnMgPSBbXVxuICB0aGlzLnNjcmFwZWRVcmxzID0ge31cbn1cblxuUXVldWUucHJvdG90eXBlID0ge1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGZhbHNlIGlmIHBhZ2UgaXMgYWxyZWFkeSBzY3JhcGVkXG5cdCAqIEBwYXJhbSBqb2Jcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuICBhZGQ6IGZ1bmN0aW9uIChqb2IpIHtcbiAgICBpZiAodGhpcy5jYW5CZUFkZGVkKGpvYikpIHtcbiAgICAgIHRoaXMuam9icy5wdXNoKGpvYilcbiAgICAgIHRoaXMuX3NldFVybFNjcmFwZWQoam9iLnVybClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkJlQWRkZWQ6IGZ1bmN0aW9uIChqb2IpIHtcbiAgICBpZiAodGhpcy5pc1NjcmFwZWQoam9iLnVybCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuXHRcdC8vIHJlamVjdCBkb2N1bWVudHNcbiAgICBpZiAoam9iLnVybC5tYXRjaCgvXFwuKGRvY3xkb2N4fHBkZnxwcHR8cHB0eHxvZHQpJC9pKSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgZ2V0UXVldWVTaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuam9icy5sZW5ndGhcbiAgfSxcblxuICBpc1NjcmFwZWQ6IGZ1bmN0aW9uICh1cmwpIHtcbiAgICByZXR1cm4gKHRoaXMuc2NyYXBlZFVybHNbdXJsXSAhPT0gdW5kZWZpbmVkKVxuICB9LFxuXG4gIF9zZXRVcmxTY3JhcGVkOiBmdW5jdGlvbiAodXJsKSB7XG4gICAgdGhpcy5zY3JhcGVkVXJsc1t1cmxdID0gdHJ1ZVxuICB9LFxuXG4gIGdldE5leHRKb2I6IGZ1bmN0aW9uICgpIHtcblx0XHQvLyBAVE9ETyB0ZXN0IHRoaXNcbiAgICBpZiAodGhpcy5nZXRRdWV1ZVNpemUoKSA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmpvYnMucG9wKClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWVcbiIsInZhciB3aGVuQ2FsbFNlcXVlbnRpYWxseSA9IHJlcXVpcmUoJy4uL2Fzc2V0cy9qcXVlcnkud2hlbmNhbGxzZXF1ZW50aWFsbHknKVxudmFyIEpvYiA9IHJlcXVpcmUoJy4vSm9iJylcblxudmFyIFNjcmFwZXIgPSBmdW5jdGlvbiAob3B0aW9ucywgbW9yZU9wdGlvbnMpIHtcbiAgdGhpcy5xdWV1ZSA9IG9wdGlvbnMucXVldWVcbiAgdGhpcy5zaXRlbWFwID0gb3B0aW9ucy5zaXRlbWFwXG4gIHRoaXMuc3RvcmUgPSBvcHRpb25zLnN0b3JlXG4gIHRoaXMuYnJvd3NlciA9IG9wdGlvbnMuYnJvd3NlclxuICB0aGlzLnJlc3VsdFdyaXRlciA9IG51bGwgLy8gZGIgaW5zdGFuY2UgZm9yIHNjcmFwZWQgZGF0YSB3cml0aW5nXG4gIHRoaXMucmVxdWVzdEludGVydmFsID0gcGFyc2VJbnQob3B0aW9ucy5yZXF1ZXN0SW50ZXJ2YWwpXG4gIHRoaXMucGFnZUxvYWREZWxheSA9IHBhcnNlSW50KG9wdGlvbnMucGFnZUxvYWREZWxheSlcblxuICAvLyBJdCBpc24ndCBhY3R1YWxseSBtdWNoIG5lZWRlZCwgb25seSB0byBnZXQgdGVoXG4gIHRoaXMuJCA9IG1vcmVPcHRpb25zLiRcbiAgdGhpcy5kb2N1bWVudCA9IG1vcmVPcHRpb25zLmRvY3VtZW50XG4gIHRoaXMud2luZG93ID0gbW9yZU9wdGlvbnMud2luZG93XG4gIGlmICghbW9yZU9wdGlvbnMuJCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGpxdWVyeScpXG4gIGlmICghbW9yZU9wdGlvbnMud2luZG93KSB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgd2luZG93JylcbiAgaWYgKCFtb3JlT3B0aW9ucy5kb2N1bWVudCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGRvY3VtZW50Jylcbn1cblxuU2NyYXBlci5wcm90b3R5cGUgPSB7XG5cblx0LyoqXG5cdCAqIFNjcmFwaW5nIGRlbGF5IGJldHdlZW4gdHdvIHBhZ2Ugb3BlbmluZyByZXF1ZXN0c1xuXHQgKi9cbiAgcmVxdWVzdEludGVydmFsOiAyMDAwLFxuICBfdGltZU5leHRTY3JhcGVBdmFpbGFibGU6IDAsXG5cbiAgaW5pdEZpcnN0Sm9iczogZnVuY3Rpb24gKCkge1xuICAgIHZhciB1cmxzID0gdGhpcy5zaXRlbWFwLmdldFN0YXJ0VXJscygpXG5cbiAgICB1cmxzLmZvckVhY2goZnVuY3Rpb24gKHVybCkge1xuICAgICAgdmFyIGZpcnN0Sm9iID0gbmV3IEpvYih1cmwsICdfcm9vdCcsIHRoaXMpXG4gICAgICB0aGlzLnF1ZXVlLmFkZChmaXJzdEpvYilcbiAgICB9LmJpbmQodGhpcykpXG4gIH0sXG5cbiAgcnVuOiBmdW5jdGlvbiAoZXhlY3V0aW9uQ2FsbGJhY2spIHtcbiAgICB2YXIgc2NyYXBlciA9IHRoaXNcblxuXHRcdC8vIGNhbGxiYWNrIHdoZW4gc2NyYXBpbmcgaXMgZmluaXNoZWRcbiAgICB0aGlzLmV4ZWN1dGlvbkNhbGxiYWNrID0gZXhlY3V0aW9uQ2FsbGJhY2tcblxuICAgIHRoaXMuaW5pdEZpcnN0Sm9icygpXG5cbiAgICB0aGlzLnN0b3JlLmluaXRTaXRlbWFwRGF0YURiKHRoaXMuc2l0ZW1hcC5faWQsIGZ1bmN0aW9uIChyZXN1bHRXcml0ZXIpIHtcbiAgICAgIHNjcmFwZXIucmVzdWx0V3JpdGVyID0gcmVzdWx0V3JpdGVyXG4gICAgICBzY3JhcGVyLl9ydW4oKVxuICAgIH0pXG4gIH0sXG5cbiAgcmVjb3JkQ2FuSGF2ZUNoaWxkSm9iczogZnVuY3Rpb24gKHJlY29yZCkge1xuICAgIGlmIChyZWNvcmQuX2ZvbGxvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICB2YXIgc2VsZWN0b3JJZCA9IHJlY29yZC5fZm9sbG93U2VsZWN0b3JJZFxuICAgIHZhciBjaGlsZFNlbGVjdG9ycyA9IHRoaXMuc2l0ZW1hcC5nZXREaXJlY3RDaGlsZFNlbGVjdG9ycyhzZWxlY3RvcklkKVxuICAgIGlmIChjaGlsZFNlbGVjdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBnZXRGaWxlRmlsZW5hbWU6IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB2YXIgcGFydHMgPSB1cmwuc3BsaXQoJy8nKVxuICAgIHZhciBmaWxlbmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXG4gICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKC9cXD8vZywgJycpXG4gICAgaWYgKGZpbGVuYW1lLmxlbmd0aCA+IDEzMCkge1xuICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHIoMCwgMTMwKVxuICAgIH1cbiAgICByZXR1cm4gZmlsZW5hbWVcbiAgfSxcblxuXHQvKipcblx0ICogU2F2ZSBpbWFnZXMgZm9yIHVzZXIgaWYgdGhlIHJlY29yZHMgY29udGFpbnMgdGhlbVxuXHQgKiBAcGFyYW0gcmVjb3JkXG5cdCAqL1xuICBzYXZlSW1hZ2VzOiBmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgdmFyIGJyb3dzZXIgPSB0aGlzLmJyb3dzZXJcbiAgICByZXR1cm4gYnJvd3Nlci5zYXZlSW1hZ2VzKHJlY29yZCwgbmFtaW5nRnVuY3Rpb24uYmluZCh0aGlzKSlcblxuICAgIGZ1bmN0aW9uIG5hbWluZ0Z1bmN0aW9uIChzZWxlY3RvcklkKSB7IHJldHVybiB0aGlzLnNpdGVtYXAuX2lkICsgJy8nICsgc2VsZWN0b3JJZCArICcvJyArIHRoaXMuZ2V0RmlsZUZpbGVuYW1lKHJlY29yZFtzZWxlY3RvcklkICsgJy1zcmMnXSkgfVxuICB9LFxuXG5cdC8vIEBUT0RPIHJlbW92ZSByZWN1cnNpb24gYW5kIGFkZCBhbiBpdGVyYXRpdmUgd2F5IHRvIHJ1biB0aGVzZSBqb2JzLlxuICBfcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGpvYiA9IHRoaXMucXVldWUuZ2V0TmV4dEpvYigpXG4gICAgaWYgKGpvYiA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdTY3JhcGVyIGV4ZWN1dGlvbiBpcyBmaW5pc2hlZCcpXG4gICAgICB0aGlzLmJyb3dzZXIuY2xvc2UoKVxuICAgICAgdGhpcy5leGVjdXRpb25DYWxsYmFjaygpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3N0YXJ0aW5nIGV4ZWN1dGUnKVxuICAgIGpvYi5leGVjdXRlKHRoaXMuYnJvd3NlciwgZnVuY3Rpb24gKGVyciwgam9iKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIC8vIGpvYnMgZG9uJ3Qgc2VlbSB0byByZXR1cm4gYW55dGhpbmdcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGpvYicsIGVycilcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdmaW5pc2hlZCBleGVjdXRpbmcnKVxuICAgICAgdmFyIHNjcmFwZWRSZWNvcmRzID0gW11cbiAgICAgIHZhciBkZWZlcnJlZERhdGFtYW5pcHVsYXRpb25zID0gW11cblxuICAgICAgdmFyIHJlY29yZHMgPSBqb2IuZ2V0UmVzdWx0cygpXG4gICAgICByZWNvcmRzLmZvckVhY2goZnVuY3Rpb24gKHJlY29yZCkge1xuXHRcdFx0XHQvLyB2YXIgcmVjb3JkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZWMpKTtcblxuICAgICAgICBkZWZlcnJlZERhdGFtYW5pcHVsYXRpb25zLnB1c2godGhpcy5zYXZlSW1hZ2VzLmJpbmQodGhpcywgcmVjb3JkKSlcblxuXHRcdFx0XHQvLyBAVE9ETyByZWZhY3RvciBqb2IgZXhzdHJhY3Rpb24gdG8gYSBzZXBlcmF0ZSBtZXRob2RcbiAgICAgICAgaWYgKHRoaXMucmVjb3JkQ2FuSGF2ZUNoaWxkSm9icyhyZWNvcmQpKSB7XG4gICAgICAgICAgdmFyIGZvbGxvd1NlbGVjdG9ySWQgPSByZWNvcmQuX2ZvbGxvd1NlbGVjdG9ySWRcbiAgICAgICAgICB2YXIgZm9sbG93VVJMID0gcmVjb3JkWydfZm9sbG93J11cbiAgICAgICAgICBkZWxldGUgcmVjb3JkWydfZm9sbG93J11cbiAgICAgICAgICBkZWxldGUgcmVjb3JkWydfZm9sbG93U2VsZWN0b3JJZCddXG4gICAgICAgICAgdmFyIG5ld0pvYiA9IG5ldyBKb2IoZm9sbG93VVJMLCBmb2xsb3dTZWxlY3RvcklkLCB0aGlzLCBqb2IsIHJlY29yZClcbiAgICAgICAgICBpZiAodGhpcy5xdWV1ZS5jYW5CZUFkZGVkKG5ld0pvYikpIHtcbiAgICAgICAgICAgIHRoaXMucXVldWUuYWRkKG5ld0pvYilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3RvcmUgYWxyZWFkeSBzY3JhcGVkIGxpbmtzXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnSWdub3JpbmcgbmV4dCcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZWNvcmQpXG4vL1x0XHRcdFx0XHRcdHNjcmFwZWRSZWNvcmRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHJlY29yZC5fZm9sbG93ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSByZWNvcmRbJ19mb2xsb3cnXVxuICAgICAgICAgICAgZGVsZXRlIHJlY29yZFsnX2ZvbGxvd1NlbGVjdG9ySWQnXVxuICAgICAgICAgIH1cbiAgICAgICAgICBzY3JhcGVkUmVjb3Jkcy5wdXNoKHJlY29yZClcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkZWZlcnJlZERhdGFtYW5pcHVsYXRpb25zKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5yZXN1bHRXcml0ZXIud3JpdGVEb2NzKHNjcmFwZWRSZWNvcmRzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKClcblx0XHRcdFx0XHQvLyBkZWxheSBuZXh0IGpvYiBpZiBuZWVkZWRcbiAgICAgICAgICB0aGlzLl90aW1lTmV4dFNjcmFwZUF2YWlsYWJsZSA9IG5vdyArIHRoaXMucmVxdWVzdEludGVydmFsXG4gICAgICAgICAgaWYgKG5vdyA+PSB0aGlzLl90aW1lTmV4dFNjcmFwZUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fcnVuKClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGRlbGF5ID0gdGhpcy5fdGltZU5leHRTY3JhcGVBdmFpbGFibGUgLSBub3dcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB0aGlzLl9ydW4oKVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCBkZWxheSlcbiAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgIH0uYmluZCh0aGlzKSlcbiAgICB9LmJpbmQodGhpcykpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTY3JhcGVyXG4iLCJ2YXIgc2VsZWN0b3JzID0gcmVxdWlyZSgnLi9TZWxlY3RvcnMnKVxudmFyIEVsZW1lbnRRdWVyeSA9IHJlcXVpcmUoJy4vRWxlbWVudFF1ZXJ5JylcbnZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxuXG52YXIgU2VsZWN0b3IgPSBmdW5jdGlvbiAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgdmFyICQgPSBvcHRpb25zLiRcbiAgdmFyIGRvY3VtZW50ID0gb3B0aW9ucy5kb2N1bWVudFxuICB2YXIgd2luZG93ID0gb3B0aW9ucy53aW5kb3dcbiAgLy8gV2UgZG9uJ3Qgd2FudCBlbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICckJywge1xuICAgIHZhbHVlOiAkLFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnd2luZG93Jywge1xuICAgIHZhbHVlOiB3aW5kb3csXG4gICAgZW51bWVyYWJsZTogZmFsc2VcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdkb2N1bWVudCcsIHtcbiAgICB2YWx1ZTogZG9jdW1lbnQsXG4gICAgZW51bWVyYWJsZTogZmFsc2VcbiAgfSlcbiAgaWYgKCF0aGlzLiQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBqcXVlcnknKVxuICBpZiAoIXRoaXMuZG9jdW1lbnQpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgZG9jdW1lbnRcIilcbiAgaWYoIXRoaXMud2luZG93KXRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgd2luZG93XCIpXG5cbiAgdGhpcy51cGRhdGVEYXRhKHNlbGVjdG9yKVxuICB0aGlzLmluaXRUeXBlKClcbn1cblxuU2VsZWN0b3IucHJvdG90eXBlID0ge1xuXG5cdC8qKlxuXHQgKiBJcyB0aGlzIHNlbGVjdG9yIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIG11bHRpcGxlIGl0ZW1zP1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG4gIHdpbGxSZXR1cm5NdWx0aXBsZVJlY29yZHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5jYW5SZXR1cm5NdWx0aXBsZVJlY29yZHMoKSAmJiB0aGlzLm11bHRpcGxlXG4gIH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSBjdXJyZW50IHNlbGVjdG9yIGNvbmZpZ3VyYXRpb25cblx0ICogQHBhcmFtIGRhdGFcblx0ICovXG4gIHVwZGF0ZURhdGE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIGFsbG93ZWRLZXlzID0gWyd3aW5kb3cnLCAnZG9jdW1lbnQnLCAnaWQnLCAndHlwZScsICdzZWxlY3RvcicsICdwYXJlbnRTZWxlY3RvcnMnXVxuICAgIGNvbnNvbGUubG9nKCdkYXRhIHR5cGUnLCBkYXRhLnR5cGUpXG4gICAgYWxsb3dlZEtleXMgPSBhbGxvd2VkS2V5cy5jb25jYXQoc2VsZWN0b3JzW2RhdGEudHlwZV0uZ2V0RmVhdHVyZXMoKSlcbiAgICB2YXIga2V5XG5cdFx0Ly8gdXBkYXRlIGRhdGFcbiAgICBmb3IgKGtleSBpbiBkYXRhKSB7XG4gICAgICBpZiAoYWxsb3dlZEtleXMuaW5kZXhPZihrZXkpICE9PSAtMSB8fCB0eXBlb2YgZGF0YVtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNba2V5XSA9IGRhdGFba2V5XVxuICAgICAgfVxuICAgIH1cblxuXHRcdC8vIHJlbW92ZSB2YWx1ZXMgdGhhdCBhcmUgbm90IG5lZWRlZCBmb3IgdGhpcyB0eXBlIG9mIHNlbGVjdG9yXG4gICAgZm9yIChrZXkgaW4gdGhpcykge1xuICAgICAgaWYgKGFsbG93ZWRLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYgdHlwZW9mIHRoaXNba2V5XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG5cdC8qKlxuXHQgKiBDU1Mgc2VsZWN0b3Igd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBlbGVtZW50IHNlbGVjdGlvblxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cbiAgZ2V0SXRlbUNTU1NlbGVjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICcqJ1xuICB9LFxuXG5cdC8qKlxuXHQgKiBvdmVycmlkZSBvYmplY3RzIG1ldGhvZHMgYmFzZWQgb24gc2VsZXRvciB0eXBlXG5cdCAqL1xuICBpbml0VHlwZTogZnVuY3Rpb24gKCkge1xuICAgIGlmIChzZWxlY3RvcnNbdGhpcy50eXBlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdG9yIHR5cGUgbm90IGRlZmluZWQgJyArIHRoaXMudHlwZSlcbiAgICB9XG5cblx0XHQvLyBvdmVycmlkZXMgb2JqZWN0cyBtZXRob2RzXG4gICAgZm9yICh2YXIgaSBpbiBzZWxlY3RvcnNbdGhpcy50eXBlXSkge1xuICAgICAgdGhpc1tpXSA9IHNlbGVjdG9yc1t0aGlzLnR5cGVdW2ldXG4gICAgfVxuICB9LFxuXG5cdC8qKlxuXHQgKiBDaGVjayB3aGV0aGVyIGEgc2VsZWN0b3IgaXMgYSBwYXJlbiBzZWxlY3RvciBvZiB0aGlzIHNlbGVjdG9yXG5cdCAqIEBwYXJhbSBzZWxlY3RvcklkXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cbiAgaGFzUGFyZW50U2VsZWN0b3I6IGZ1bmN0aW9uIChzZWxlY3RvcklkKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhcmVudFNlbGVjdG9ycy5pbmRleE9mKHNlbGVjdG9ySWQpICE9PSAtMSlcbiAgfSxcblxuICByZW1vdmVQYXJlbnRTZWxlY3RvcjogZnVuY3Rpb24gKHNlbGVjdG9ySWQpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnBhcmVudFNlbGVjdG9ycy5pbmRleE9mKHNlbGVjdG9ySWQpXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5wYXJlbnRTZWxlY3RvcnMuc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfSxcblxuICByZW5hbWVQYXJlbnRTZWxlY3RvcjogZnVuY3Rpb24gKG9yaWdpbmFsSWQsIHJlcGxhY2VtZW50SWQpIHtcbiAgICBpZiAodGhpcy5oYXNQYXJlbnRTZWxlY3RvcihvcmlnaW5hbElkKSkge1xuICAgICAgdmFyIHBvcyA9IHRoaXMucGFyZW50U2VsZWN0b3JzLmluZGV4T2Yob3JpZ2luYWxJZClcbiAgICAgIHRoaXMucGFyZW50U2VsZWN0b3JzLnNwbGljZShwb3MsIDEsIHJlcGxhY2VtZW50SWQpXG4gICAgfVxuICB9LFxuXG4gIGdldERhdGFFbGVtZW50czogZnVuY3Rpb24gKHBhcmVudEVsZW1lbnQpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICB2YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICB2YXIgZWxlbWVudHMgPSBFbGVtZW50UXVlcnkodGhpcy5zZWxlY3RvciwgcGFyZW50RWxlbWVudCwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudHNcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBbZWxlbWVudHNbMF1dXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfSxcblxuICBnZXREYXRhOiBmdW5jdGlvbiAocGFyZW50RWxlbWVudCkge1xuICAgIHZhciBkID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgdGltZW91dCA9IHRoaXMuZGVsYXkgfHwgMFxuXG5cdFx0Ly8gdGhpcyB3b3JrcyBtdWNoIGZhc3RlciBiZWNhdXNlIHdoZW5DYWxsU2VxdWVudGFsbHkgaXNuJ3QgcnVubmluZyBuZXh0IGRhdGEgZXh0cmFjdGlvbiBpbW1lZGlhdGVseVxuICAgIGlmICh0aW1lb3V0ID09PSAwKSB7XG4gICAgICB2YXIgZGVmZXJyZWREYXRhID0gdGhpcy5fZ2V0RGF0YShwYXJlbnRFbGVtZW50KVxuICAgICAgZGVmZXJyZWREYXRhLmRvbmUoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgZC5yZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH1cdGVsc2Uge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZWZlcnJlZERhdGEgPSB0aGlzLl9nZXREYXRhKHBhcmVudEVsZW1lbnQpXG4gICAgICAgIGRlZmVycmVkRGF0YS5kb25lKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgZC5yZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9LmJpbmQodGhpcyksIHRpbWVvdXQpXG4gICAgfVxuXG4gICAgcmV0dXJuIGQucHJvbWlzZSgpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RvclxuIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG5cbnZhciBTZWxlY3RvckVsZW1lbnQgPSB7XG5cbiAgY2FuUmV0dXJuTXVsdGlwbGVSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkhhdmVMb2NhbENoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5DcmVhdGVOZXdKb2JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIHdpbGxSZXR1cm5FbGVtZW50czogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG4gIF9nZXREYXRhOiBmdW5jdGlvbiAocGFyZW50RWxlbWVudCkge1xuICAgIHZhciBkZmQgPSBqcXVlcnkuRGVmZXJyZWQoKVxuXG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcbiAgICBkZmQucmVzb2x2ZSh0aGlzLiQubWFrZUFycmF5KGVsZW1lbnRzKSlcblxuICAgIHJldHVybiBkZmQucHJvbWlzZSgpXG4gIH0sXG5cbiAgZ2V0RGF0YUNvbHVtbnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gW11cbiAgfSxcblxuICBnZXRGZWF0dXJlczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbJ211bHRpcGxlJywgJ2RlbGF5J11cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdG9yRWxlbWVudFxuIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG52YXIgU2VsZWN0b3JFbGVtZW50QXR0cmlidXRlID0ge1xuICBjYW5SZXR1cm5NdWx0aXBsZVJlY29yZHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkhhdmVDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkhhdmVMb2NhbENoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG5cbiAgY2FuQ3JlYXRlTmV3Sm9iczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICB3aWxsUmV0dXJuRWxlbWVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyIGRmZCA9IGpxdWVyeS5EZWZlcnJlZCgpXG4gICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcblxuICAgIHZhciByZXN1bHQgPSBbXVxuICAgIHNlbGYuJChlbGVtZW50cykuZWFjaChmdW5jdGlvbiAoaywgZWxlbWVudCkge1xuICAgICAgdmFyIGRhdGEgPSB7fVxuXG4gICAgICBkYXRhW3RoaXMuaWRdID0gc2VsZi4kKGVsZW1lbnQpLmF0dHIodGhpcy5leHRyYWN0QXR0cmlidXRlKVxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gZmFsc2UgJiYgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICBkYXRhW3RoaXMuaWQgKyAnLXNyYyddID0gbnVsbFxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9XG4gICAgZGZkLnJlc29sdmUocmVzdWx0KVxuXG4gICAgcmV0dXJuIGRmZC5wcm9taXNlKClcbiAgfSxcblxuICBnZXREYXRhQ29sdW1uczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbdGhpcy5pZF1cbiAgfSxcblxuICBnZXRGZWF0dXJlczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbJ211bHRpcGxlJywgJ2V4dHJhY3RBdHRyaWJ1dGUnLCAnZGVsYXknXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0b3JFbGVtZW50QXR0cmlidXRlXG4iLCJ2YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciBVbmlxdWVFbGVtZW50TGlzdCA9IHJlcXVpcmUoJy4vLi4vVW5pcXVlRWxlbWVudExpc3QnKVxudmFyIEVsZW1lbnRRdWVyeSA9IHJlcXVpcmUoJy4vLi4vRWxlbWVudFF1ZXJ5JylcbnZhciBDc3NTZWxlY3RvciA9IHJlcXVpcmUoJ2Nzcy1zZWxlY3RvcicpLkNzc1NlbGVjdG9yXG52YXIgU2VsZWN0b3JFbGVtZW50Q2xpY2sgPSB7XG5cbiAgY2FuUmV0dXJuTXVsdGlwbGVSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkhhdmVMb2NhbENoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5DcmVhdGVOZXdKb2JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIHdpbGxSZXR1cm5FbGVtZW50czogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgZ2V0Q2xpY2tFbGVtZW50czogZnVuY3Rpb24gKHBhcmVudEVsZW1lbnQpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICB2YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICB2YXIgY2xpY2tFbGVtZW50cyA9IEVsZW1lbnRRdWVyeSh0aGlzLmNsaWNrRWxlbWVudFNlbGVjdG9yLCBwYXJlbnRFbGVtZW50LCB7JCwgZG9jdW1lbnQsIHdpbmRvd30pXG4gICAgcmV0dXJuIGNsaWNrRWxlbWVudHNcbiAgfSxcblxuXHQvKipcblx0ICogQ2hlY2sgd2hldGhlciBlbGVtZW50IGlzIHN0aWxsIHJlYWNoYWJsZSBmcm9tIGh0bWwuIFVzZWZ1bCB0byBjaGVjayB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSBET00uXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqL1xuICBpc0VsZW1lbnRJbkhUTUw6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuJChlbGVtZW50KS5jbG9zZXN0KCdodG1sJykubGVuZ3RoICE9PSAwXG4gIH0sXG5cbiAgdHJpZ2dlckJ1dHRvbkNsaWNrOiBmdW5jdGlvbiAoY2xpY2tFbGVtZW50KSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgIHZhciBjcyA9IG5ldyBDc3NTZWxlY3Rvcih7XG4gICAgICBlbmFibGVTbWFydFRhYmxlU2VsZWN0b3I6IGZhbHNlLFxuICAgICAgcGFyZW50OiB0aGlzLiQoJ2JvZHknKVswXSxcbiAgICAgIGVuYWJsZVJlc3VsdFN0cmlwcGluZzogZmFsc2VcbiAgICB9KVxuICAgIHZhciBjc3NTZWxlY3RvciA9IGNzLmdldENzc1NlbGVjdG9yKFtjbGlja0VsZW1lbnRdKVxuXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3RvcilbMF0uY2xpY2soKVxuLyogICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIGNhdGNoIHdpbmRvdy5vcGVuIGNhbGwgYW5kIHBsYWNlIHRoZSByZXF1ZXN0ZWQgdXJsIGFzIHRoZSBlbGVtZW50cyBkYXRhIGF0dHJpYnV0ZVxuICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKVxuICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCdcbiAgICBzY3JpcHQudGV4dCA9ICcnICtcblx0XHRcdCcoZnVuY3Rpb24oKXsgJyArXG5cdFx0XHRcInZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1wiICsgY3NzU2VsZWN0b3IgKyBcIicpWzBdOyBcIiArXG5cdFx0XHQnZWwuY2xpY2soKTsgJyArXG5cdFx0XHQnfSkoKTsnXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpKi9cbiAgfSxcblxuICBnZXRDbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZTogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmNsaWNrRWxlbWVudFVuaXF1ZW5lc3NUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAndW5pcXVlVGV4dCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpY2tFbGVtZW50VW5pcXVlbmVzc1R5cGVcbiAgICB9XG4gIH0sXG5cbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgdmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgdmFyIGRlbGF5ID0gcGFyc2VJbnQodGhpcy5kZWxheSkgfHwgMFxuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgZm91bmRFbGVtZW50cyA9IG5ldyBVbmlxdWVFbGVtZW50TGlzdCgndW5pcXVlVGV4dCcsIHskLCBkb2N1bWVudCwgd2luZG93fSlcbiAgICB2YXIgY2xpY2tFbGVtZW50cyA9IHRoaXMuZ2V0Q2xpY2tFbGVtZW50cyhwYXJlbnRFbGVtZW50KVxuICAgIHZhciBkb25lQ2xpY2tpbmdFbGVtZW50cyA9IG5ldyBVbmlxdWVFbGVtZW50TGlzdCh0aGlzLmdldENsaWNrRWxlbWVudFVuaXF1ZW5lc3NUeXBlKCksIHskLCBkb2N1bWVudCwgd2luZG93fSlcblxuXHRcdC8vIGFkZCBlbGVtZW50cyB0aGF0IGFyZSBhdmFpbGFibGUgYmVmb3JlIGNsaWNraW5nXG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcbiAgICBlbGVtZW50cy5mb3JFYWNoKGZvdW5kRWxlbWVudHMucHVzaC5iaW5kKGZvdW5kRWxlbWVudHMpKVxuXG5cdFx0Ly8gZGlzY2FyZCBpbml0aWFsIGVsZW1lbnRzXG4gICAgaWYgKHRoaXMuZGlzY2FyZEluaXRpYWxFbGVtZW50cykge1xuICAgICAgZm91bmRFbGVtZW50cyA9IG5ldyBVbmlxdWVFbGVtZW50TGlzdCgndW5pcXVlVGV4dCcsIHskLCBkb2N1bWVudCwgd2luZG93fSlcbiAgICB9XG5cblx0XHQvLyBubyBlbGVtZW50cyB0byBjbGljayBhdCB0aGUgYmVnaW5uaW5nXG4gICAgaWYgKGNsaWNrRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoZm91bmRFbGVtZW50cylcbiAgICAgIHJldHVybiBkZWZlcnJlZFJlc3BvbnNlLnByb21pc2UoKVxuICAgIH1cblxuXHRcdC8vIGluaXRpYWwgY2xpY2sgYW5kIHdhaXRcbiAgICB2YXIgY3VycmVudENsaWNrRWxlbWVudCA9IGNsaWNrRWxlbWVudHNbMF1cbiAgICB0aGlzLnRyaWdnZXJCdXR0b25DbGljayhjdXJyZW50Q2xpY2tFbGVtZW50KVxuICAgIHZhciBuZXh0RWxlbWVudFNlbGVjdGlvbiA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgKyBkZWxheVxuXG5cdFx0Ly8gaW5maW5pdGVseSBzY3JvbGwgZG93biBhbmQgZmluZCBhbGwgaXRlbXNcbiAgICB2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBmaW5kIHRob3NlIGNsaWNrIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBpbiB0aGUgYmxhY2sgbGlzdFxuICAgICAgdmFyIGFsbENsaWNrRWxlbWVudHMgPSB0aGlzLmdldENsaWNrRWxlbWVudHMocGFyZW50RWxlbWVudClcbiAgICAgIGNsaWNrRWxlbWVudHMgPSBbXVxuICAgICAgYWxsQ2xpY2tFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIGlmICghZG9uZUNsaWNraW5nRWxlbWVudHMuaXNBZGRlZChlbGVtZW50KSkge1xuICAgICAgICAgIGNsaWNrRWxlbWVudHMucHVzaChlbGVtZW50KVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKVxuXHRcdFx0Ly8gc2xlZXAuIHdhaXQgd2hlbiB0byBleHRyYWN0IG5leHQgZWxlbWVudHNcbiAgICAgIGlmIChub3cgPCBuZXh0RWxlbWVudFNlbGVjdGlvbikge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIndhaXRcIik7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG5cdFx0XHQvLyBhZGQgbmV3bHkgZm91bmQgZWxlbWVudHMgdG8gZWxlbWVudCBmb3VuZEVsZW1lbnRzIGFycmF5LlxuICAgICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcbiAgICAgIHZhciBhZGRlZEFuRWxlbWVudCA9IGZhbHNlXG4gICAgICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHZhciBhZGRlZCA9IGZvdW5kRWxlbWVudHMucHVzaChlbGVtZW50KVxuICAgICAgICBpZiAoYWRkZWQpIHtcbiAgICAgICAgICBhZGRlZEFuRWxlbWVudCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYWRkZWRcIiwgYWRkZWRBbkVsZW1lbnQpO1xuXG5cdFx0XHQvLyBubyBuZXcgZWxlbWVudHMgZm91bmQuIFN0b3AgY2xpY2tpbmcgdGhpcyBidXR0b25cbiAgICAgIGlmICghYWRkZWRBbkVsZW1lbnQpIHtcbiAgICAgICAgZG9uZUNsaWNraW5nRWxlbWVudHMucHVzaChjdXJyZW50Q2xpY2tFbGVtZW50KVxuICAgICAgfVxuXG5cdFx0XHQvLyBjb250aW51ZSBjbGlja2luZyBhbmQgYWRkIGRlbGF5LCBidXQgaWYgdGhlcmUgaXMgbm90aGluZ1xuXHRcdFx0Ly8gbW9yZSB0byBjbGljayB0aGUgZmluaXNoXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcInRvdGFsIGJ1dHRvbnNcIiwgY2xpY2tFbGVtZW50cy5sZW5ndGgpXG4gICAgICBpZiAoY2xpY2tFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbClcbiAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKGZvdW5kRWxlbWVudHMpXG4gICAgICB9IGVsc2Uge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImNsaWNrXCIpO1xuICAgICAgICBjdXJyZW50Q2xpY2tFbGVtZW50ID0gY2xpY2tFbGVtZW50c1swXVxuXHRcdFx0XHQvLyBjbGljayBvbiBlbGVtZW50cyBvbmx5IG9uY2UgaWYgdGhlIHR5cGUgaXMgY2xpY2tvbmNlXG4gICAgICAgIGlmICh0aGlzLmNsaWNrVHlwZSA9PT0gJ2NsaWNrT25jZScpIHtcbiAgICAgICAgICBkb25lQ2xpY2tpbmdFbGVtZW50cy5wdXNoKGN1cnJlbnRDbGlja0VsZW1lbnQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmlnZ2VyQnV0dG9uQ2xpY2soY3VycmVudENsaWNrRWxlbWVudClcbiAgICAgICAgbmV4dEVsZW1lbnRTZWxlY3Rpb24gPSBub3cgKyBkZWxheVxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSwgNTApXG5cbiAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZS5wcm9taXNlKClcbiAgfSxcblxuICBnZXREYXRhQ29sdW1uczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbXVxuICB9LFxuXG4gIGdldEZlYXR1cmVzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFsnbXVsdGlwbGUnLCAnZGVsYXknLCAnY2xpY2tFbGVtZW50U2VsZWN0b3InLCAnY2xpY2tUeXBlJywgJ2Rpc2NhcmRJbml0aWFsRWxlbWVudHMnLCAnY2xpY2tFbGVtZW50VW5pcXVlbmVzc1R5cGUnXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0b3JFbGVtZW50Q2xpY2tcbiIsInZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxudmFyIFNlbGVjdG9yRWxlbWVudFNjcm9sbCA9IHtcblxuICBjYW5SZXR1cm5NdWx0aXBsZVJlY29yZHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkhhdmVDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgY2FuSGF2ZUxvY2FsQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkNyZWF0ZU5ld0pvYnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgd2lsbFJldHVybkVsZW1lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcbiAgc2Nyb2xsVG9Cb3R0b206IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KVxuICB9LFxuICBfZ2V0RGF0YTogZnVuY3Rpb24gKHBhcmVudEVsZW1lbnQpIHtcbiAgICB2YXIgZGVsYXkgPSBwYXJzZUludCh0aGlzLmRlbGF5KSB8fCAwXG4gICAgdmFyIGRlZmVycmVkUmVzcG9uc2UgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICAgIHZhciBmb3VuZEVsZW1lbnRzID0gW11cblxuXHRcdC8vIGluaXRpYWxseSBzY3JvbGwgZG93biBhbmQgd2FpdFxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKVxuICAgIHZhciBuZXh0RWxlbWVudFNlbGVjdGlvbiA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgKyBkZWxheVxuXG5cdFx0Ly8gaW5maW5pdGVseSBzY3JvbGwgZG93biBhbmQgZmluZCBhbGwgaXRlbXNcbiAgICB2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKVxuXHRcdFx0Ly8gc2xlZXAuIHdhaXQgd2hlbiB0byBleHRyYWN0IG5leHQgZWxlbWVudHNcbiAgICAgIGlmIChub3cgPCBuZXh0RWxlbWVudFNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcblx0XHRcdC8vIG5vIG5ldyBlbGVtZW50cyBmb3VuZFxuICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gZm91bmRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbClcbiAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKHRoaXMuJC5tYWtlQXJyYXkoZWxlbWVudHMpKVxuICAgICAgfSBlbHNlIHtcblx0XHRcdFx0Ly8gY29udGludWUgc2Nyb2xsaW5nIGFuZCBhZGQgZGVsYXlcbiAgICAgICAgZm91bmRFbGVtZW50cyA9IGVsZW1lbnRzXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICBuZXh0RWxlbWVudFNlbGVjdGlvbiA9IG5vdyArIGRlbGF5XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpLCA1MClcblxuICAgIHJldHVybiBkZWZlcnJlZFJlc3BvbnNlLnByb21pc2UoKVxuICB9LFxuXG4gIGdldERhdGFDb2x1bW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFtdXG4gIH0sXG5cbiAgZ2V0RmVhdHVyZXM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gWydtdWx0aXBsZScsICdkZWxheSddXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RvckVsZW1lbnRTY3JvbGxcbiIsInZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxudmFyIFNlbGVjdG9yR3JvdXAgPSB7XG5cbiAgY2FuUmV0dXJuTXVsdGlwbGVSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG5cbiAgY2FuSGF2ZUNoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG5cbiAgY2FuSGF2ZUxvY2FsQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcblxuICBjYW5DcmVhdGVOZXdKb2JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIHdpbGxSZXR1cm5FbGVtZW50czogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICBfZ2V0RGF0YTogZnVuY3Rpb24gKHBhcmVudEVsZW1lbnQpIHtcbiAgICB2YXIgZGZkID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgc2VsZiA9IHRoaXNcblx0XHQvLyBjYW5ub3QgcmV1c2UgdGhpcy5nZXREYXRhRWxlbWVudHMgYmVjYXVzZSBpdCBkZXBlbmRzIG9uICptdWx0aXBsZSogcHJvcGVydHlcbiAgICB2YXIgZWxlbWVudHMgPSBzZWxmLiQodGhpcy5zZWxlY3RvciwgcGFyZW50RWxlbWVudClcblxuICAgIHZhciByZWNvcmRzID0gW11cbiAgICBzZWxmLiQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGssIGVsZW1lbnQpIHtcbiAgICAgIHZhciBkYXRhID0ge31cblxuICAgICAgZGF0YVt0aGlzLmlkXSA9IHNlbGYuJChlbGVtZW50KS50ZXh0KClcblxuICAgICAgaWYgKHRoaXMuZXh0cmFjdEF0dHJpYnV0ZSkge1xuICAgICAgICBkYXRhW3RoaXMuaWQgKyAnLScgKyB0aGlzLmV4dHJhY3RBdHRyaWJ1dGVdID0gc2VsZi4kKGVsZW1lbnQpLmF0dHIodGhpcy5leHRyYWN0QXR0cmlidXRlKVxuICAgICAgfVxuXG4gICAgICByZWNvcmRzLnB1c2goZGF0YSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICB2YXIgcmVzdWx0ID0ge31cbiAgICByZXN1bHRbdGhpcy5pZF0gPSByZWNvcmRzXG5cbiAgICBkZmQucmVzb2x2ZShbcmVzdWx0XSlcbiAgICByZXR1cm4gZGZkLnByb21pc2UoKVxuICB9LFxuXG4gIGdldERhdGFDb2x1bW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFt0aGlzLmlkXVxuICB9LFxuXG4gIGdldEZlYXR1cmVzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFsnZGVsYXknLCAnZXh0cmFjdEF0dHJpYnV0ZSddXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3Rvckdyb3VwXG4iLCJ2YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciBTZWxlY3RvckhUTUwgPSB7XG5cbiAgY2FuUmV0dXJuTXVsdGlwbGVSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcblxuICBjYW5IYXZlTG9jYWxDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkNyZWF0ZU5ld0pvYnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgd2lsbFJldHVybkVsZW1lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIF9nZXREYXRhOiBmdW5jdGlvbiAocGFyZW50RWxlbWVudCkge1xuICAgIHZhciBkZmQgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICAgIHZhciBzZWxmID0gdGhpc1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRzKHBhcmVudEVsZW1lbnQpXG5cbiAgICB2YXIgcmVzdWx0ID0gW11cbiAgICBzZWxmLiQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGssIGVsZW1lbnQpIHtcbiAgICAgIHZhciBkYXRhID0ge31cbiAgICAgIHZhciBodG1sID0gc2VsZi4kKGVsZW1lbnQpLmh0bWwoKVxuXG4gICAgICBpZiAodGhpcy5yZWdleCAhPT0gdW5kZWZpbmVkICYmIHRoaXMucmVnZXgubGVuZ3RoKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gaHRtbC5tYXRjaChuZXcgUmVnRXhwKHRoaXMucmVnZXgpKVxuICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgIGh0bWwgPSBtYXRjaGVzWzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaHRtbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGF0YVt0aGlzLmlkXSA9IGh0bWxcblxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gZmFsc2UgJiYgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICBkYXRhW3RoaXMuaWRdID0gbnVsbFxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9XG5cbiAgICBkZmQucmVzb2x2ZShyZXN1bHQpXG4gICAgcmV0dXJuIGRmZC5wcm9taXNlKClcbiAgfSxcblxuICBnZXREYXRhQ29sdW1uczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbdGhpcy5pZF1cbiAgfSxcblxuICBnZXRGZWF0dXJlczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbJ211bHRpcGxlJywgJ3JlZ2V4JywgJ2RlbGF5J11cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdG9ySFRNTFxuIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG52YXIgd2hlbkNhbGxTZXF1ZW50aWFsbHkgPSByZXF1aXJlKCcuLi8uLi9hc3NldHMvanF1ZXJ5LndoZW5jYWxsc2VxdWVudGlhbGx5JylcbnZhciBCYXNlNjQgPSByZXF1aXJlKCcuLi8uLi9hc3NldHMvYmFzZTY0JylcbnZhciBTZWxlY3RvckltYWdlID0ge1xuICBjYW5SZXR1cm5NdWx0aXBsZVJlY29yZHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuXG4gIGNhbkhhdmVDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkhhdmVMb2NhbENoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG5cbiAgY2FuQ3JlYXRlTmV3Sm9iczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICB3aWxsUmV0dXJuRWxlbWVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyIGRmZCA9IGpxdWVyeS5EZWZlcnJlZCgpXG5cbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmdldERhdGFFbGVtZW50cyhwYXJlbnRFbGVtZW50KVxuXG4gICAgdmFyIGRlZmVycmVkRGF0YUNhbGxzID0gW11cbiAgICB0aGlzLiQoZWxlbWVudHMpLmVhY2goZnVuY3Rpb24gKGksIGVsZW1lbnQpIHtcbiAgICAgIGRlZmVycmVkRGF0YUNhbGxzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGVmZXJyZWREYXRhID0ganF1ZXJ5LkRlZmVycmVkKClcblxuICAgICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICAgIGRhdGFbdGhpcy5pZCArICctc3JjJ10gPSBlbGVtZW50LnNyY1xuXG5cdFx0XHRcdC8vIGRvd25sb2FkIGltYWdlIGlmIHJlcXVpcmVkXG4gICAgICAgIGlmICghdGhpcy5kb3dubG9hZEltYWdlKSB7XG4gICAgICAgICAgZGVmZXJyZWREYXRhLnJlc29sdmUoZGF0YSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZGVmZXJyZWRJbWFnZUJhc2U2NCA9IHRoaXMuZG93bmxvYWRJbWFnZUJhc2U2NChlbGVtZW50LnNyYylcblxuICAgICAgICAgIGRlZmVycmVkSW1hZ2VCYXNlNjQuZG9uZShmdW5jdGlvbiAoaW1hZ2VSZXNwb25zZSkge1xuICAgICAgICAgICAgZGF0YVsnX2ltYWdlQmFzZTY0LScgKyB0aGlzLmlkXSA9IGltYWdlUmVzcG9uc2UuaW1hZ2VCYXNlNjRcbiAgICAgICAgICAgIGRhdGFbJ19pbWFnZU1pbWVUeXBlLScgKyB0aGlzLmlkXSA9IGltYWdlUmVzcG9uc2UubWltZVR5cGVcblxuICAgICAgICAgICAgZGVmZXJyZWREYXRhLnJlc29sdmUoZGF0YSlcbiAgICAgICAgICB9LmJpbmQodGhpcykpLmZhaWwoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Ly8gZmFpbGVkIHRvIGRvd25sb2FkIGltYWdlIGNvbnRpbnVlLlxuXHRcdFx0XHRcdFx0Ly8gQFRPRE8gaGFuZGxlIGVycnJvclxuICAgICAgICAgICAgZGVmZXJyZWREYXRhLnJlc29sdmUoZGF0YSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmVycmVkRGF0YS5wcm9taXNlKClcbiAgICAgIH0uYmluZCh0aGlzKSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkZWZlcnJlZERhdGFDYWxscykuZG9uZShmdW5jdGlvbiAoZGF0YVJlc3VsdHMpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlID09PSBmYWxzZSAmJiBlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGRhdGEgPSB7fVxuICAgICAgICBkYXRhW3RoaXMuaWQgKyAnLXNyYyddID0gbnVsbFxuICAgICAgICBkYXRhUmVzdWx0cy5wdXNoKGRhdGEpXG4gICAgICB9XG5cbiAgICAgIGRmZC5yZXNvbHZlKGRhdGFSZXN1bHRzKVxuICAgIH0pXG5cbiAgICByZXR1cm4gZGZkLnByb21pc2UoKVxuICB9LFxuXG4gIGRvd25sb2FkRmlsZUFzQmxvYjogZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgeGhyID0gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpXG4gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgICAgdmFyIGJsb2IgPSB0aGlzLnJlc3BvbnNlXG4gICAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKGJsb2IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZWplY3QoeGhyLnN0YXR1c1RleHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgeGhyLm9wZW4oJ0dFVCcsIHVybClcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgeGhyLnNlbmQoKVxuXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2UucHJvbWlzZSgpXG4gIH0sXG5cbiAgZG93bmxvYWRJbWFnZUJhc2U2NDogZnVuY3Rpb24gKHVybCkge1xuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5LkRlZmVycmVkKClcbiAgICB2YXIgZGVmZXJyZWREb3dubG9hZCA9IHRoaXMuZG93bmxvYWRGaWxlQXNCbG9iKHVybClcbiAgICBkZWZlcnJlZERvd25sb2FkLmRvbmUoZnVuY3Rpb24gKGJsb2IpIHtcbiAgICAgIHZhciBtaW1lVHlwZSA9IGJsb2IudHlwZVxuICAgICAgdmFyIGRlZmVycmVkQmxvYiA9IEJhc2U2NC5ibG9iVG9CYXNlNjQoYmxvYilcbiAgICAgIGRlZmVycmVkQmxvYi5kb25lKGZ1bmN0aW9uIChpbWFnZUJhc2U2NCkge1xuICAgICAgICBkZWZlcnJlZFJlc3BvbnNlLnJlc29sdmUoe1xuICAgICAgICAgIG1pbWVUeXBlOiBtaW1lVHlwZSxcbiAgICAgICAgICBpbWFnZUJhc2U2NDogaW1hZ2VCYXNlNjRcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSkuZmFpbChkZWZlcnJlZFJlc3BvbnNlLmZhaWwpXG4gICAgcmV0dXJuIGRlZmVycmVkUmVzcG9uc2UucHJvbWlzZSgpXG4gIH0sXG5cbiAgZ2V0RGF0YUNvbHVtbnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gW3RoaXMuaWQgKyAnLXNyYyddXG4gIH0sXG5cbiAgZ2V0RmVhdHVyZXM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gWydtdWx0aXBsZScsICdkZWxheScsICdkb3dubG9hZEltYWdlJ11cbiAgfSxcblxuICBnZXRJdGVtQ1NTU2VsZWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ2ltZydcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdG9ySW1hZ2VcbiIsInZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxudmFyIHdoZW5DYWxsU2VxdWVudGlhbGx5ID0gcmVxdWlyZSgnLi4vLi4vYXNzZXRzL2pxdWVyeS53aGVuY2FsbHNlcXVlbnRpYWxseScpXG5cbnZhciBTZWxlY3RvckxpbmsgPSB7XG4gIGNhblJldHVybk11bHRpcGxlUmVjb3JkczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgY2FuSGF2ZUNoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlTG9jYWxDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkNyZWF0ZU5ld0pvYnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICB3aWxsUmV0dXJuRWxlbWVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5nZXREYXRhRWxlbWVudHMocGFyZW50RWxlbWVudClcbiAgICB2YXIgc2VsZiA9IHRoaXNcblxuICAgIHZhciBkZmQgPSBqcXVlcnkuRGVmZXJyZWQoKVxuXG5cdFx0Ly8gcmV0dXJuIGVtcHR5IHJlY29yZCBpZiBub3QgbXVsdGlwbGUgdHlwZSBhbmQgbm8gZWxlbWVudHMgZm91bmRcbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gZmFsc2UgJiYgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICBkYXRhW3RoaXMuaWRdID0gbnVsbFxuICAgICAgZGZkLnJlc29sdmUoW2RhdGFdKVxuICAgICAgcmV0dXJuIGRmZFxuICAgIH1cblxuXHRcdC8vIGV4dHJhY3QgbGlua3Mgb25lIGJ5IG9uZVxuICAgIHZhciBkZWZlcnJlZERhdGFFeHRyYWN0aW9uQ2FsbHMgPSBbXVxuICAgIHNlbGYuJChlbGVtZW50cykuZWFjaChmdW5jdGlvbiAoaywgZWxlbWVudCkge1xuICAgICAgZGVmZXJyZWREYXRhRXh0cmFjdGlvbkNhbGxzLnB1c2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIGRlZmVycmVkRGF0YSA9IGpxdWVyeS5EZWZlcnJlZCgpXG5cbiAgICAgICAgdmFyIGRhdGEgPSB7fVxuICAgICAgICBkYXRhW3RoaXMuaWRdID0gc2VsZi4kKGVsZW1lbnQpLnRleHQoKVxuICAgICAgICBkYXRhLl9mb2xsb3dTZWxlY3RvcklkID0gdGhpcy5pZFxuICAgICAgICBkYXRhW3RoaXMuaWQgKyAnLWhyZWYnXSA9IGVsZW1lbnQuaHJlZlxuICAgICAgICBkYXRhLl9mb2xsb3cgPSBlbGVtZW50LmhyZWZcbiAgICAgICAgZGVmZXJyZWREYXRhLnJlc29sdmUoZGF0YSlcblxuICAgICAgICByZXR1cm4gZGVmZXJyZWREYXRhXG4gICAgICB9LmJpbmQodGhpcywgZWxlbWVudCkpXG4gICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgd2hlbkNhbGxTZXF1ZW50aWFsbHkoZGVmZXJyZWREYXRhRXh0cmFjdGlvbkNhbGxzKS5kb25lKGZ1bmN0aW9uIChyZXNwb25zZXMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXVxuICAgICAgcmVzcG9uc2VzLmZvckVhY2goZnVuY3Rpb24gKGRhdGFSZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZGF0YVJlc3VsdClcbiAgICAgIH0pXG4gICAgICBkZmQucmVzb2x2ZShyZXN1bHQpXG4gICAgfSlcblxuICAgIHJldHVybiBkZmQucHJvbWlzZSgpXG4gIH0sXG5cbiAgZ2V0RGF0YUNvbHVtbnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gW3RoaXMuaWQsIHRoaXMuaWQgKyAnLWhyZWYnXVxuICB9LFxuXG4gIGdldEZlYXR1cmVzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFsnbXVsdGlwbGUnLCAnZGVsYXknXVxuICB9LFxuXG4gIGdldEl0ZW1DU1NTZWxlY3RvcjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnYSdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdG9yTGlua1xuIiwidmFyIHdoZW5DYWxsU2VxdWVudGlhbGx5ID0gcmVxdWlyZSgnLi4vLi4vYXNzZXRzL2pxdWVyeS53aGVuY2FsbHNlcXVlbnRpYWxseScpXG52YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciBDc3NTZWxlY3RvciA9IHJlcXVpcmUoJ2Nzcy1zZWxlY3RvcicpLkNzc1NlbGVjdG9yXG52YXIgU2VsZWN0b3JQb3B1cExpbmsgPSB7XG4gIGNhblJldHVybk11bHRpcGxlUmVjb3JkczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgY2FuSGF2ZUNoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlTG9jYWxDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkNyZWF0ZU5ld0pvYnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9LFxuICB3aWxsUmV0dXJuRWxlbWVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRzKHBhcmVudEVsZW1lbnQpXG5cbiAgICB2YXIgZGZkID0ganF1ZXJ5LkRlZmVycmVkKClcblxuXHRcdC8vIHJldHVybiBlbXB0eSByZWNvcmQgaWYgbm90IG11bHRpcGxlIHR5cGUgYW5kIG5vIGVsZW1lbnRzIGZvdW5kXG4gICAgaWYgKHRoaXMubXVsdGlwbGUgPT09IGZhbHNlICYmIGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdmFyIGRhdGEgPSB7fVxuICAgICAgZGF0YVt0aGlzLmlkXSA9IG51bGxcbiAgICAgIGRmZC5yZXNvbHZlKFtkYXRhXSlcbiAgICAgIHJldHVybiBkZmRcbiAgICB9XG5cblx0XHQvLyBleHRyYWN0IGxpbmtzIG9uZSBieSBvbmVcbiAgICB2YXIgZGVmZXJyZWREYXRhRXh0cmFjdGlvbkNhbGxzID0gW11cbiAgICAkKGVsZW1lbnRzKS5lYWNoKGZ1bmN0aW9uIChrLCBlbGVtZW50KSB7XG4gICAgICBkZWZlcnJlZERhdGFFeHRyYWN0aW9uQ2FsbHMucHVzaChmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICB2YXIgZGVmZXJyZWREYXRhID0ganF1ZXJ5LkRlZmVycmVkKClcblxuICAgICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICAgIGRhdGFbdGhpcy5pZF0gPSAkKGVsZW1lbnQpLnRleHQoKVxuICAgICAgICBkYXRhLl9mb2xsb3dTZWxlY3RvcklkID0gdGhpcy5pZFxuXG4gICAgICAgIHZhciBkZWZlcnJlZFBvcHVwVVJMID0gdGhpcy5nZXRQb3B1cFVSTChlbGVtZW50KVxuICAgICAgICBkZWZlcnJlZFBvcHVwVVJMLmRvbmUoZnVuY3Rpb24gKHVybCkge1xuICAgICAgICAgIGRhdGFbdGhpcy5pZCArICctaHJlZiddID0gdXJsXG4gICAgICAgICAgZGF0YS5fZm9sbG93ID0gdXJsXG4gICAgICAgICAgZGVmZXJyZWREYXRhLnJlc29sdmUoZGF0YSlcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgICAgIHJldHVybiBkZWZlcnJlZERhdGFcbiAgICAgIH0uYmluZCh0aGlzLCBlbGVtZW50KSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICB3aGVuQ2FsbFNlcXVlbnRpYWxseShkZWZlcnJlZERhdGFFeHRyYWN0aW9uQ2FsbHMpLmRvbmUoZnVuY3Rpb24gKHJlc3BvbnNlcykge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdXG4gICAgICByZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YVJlc3VsdCkge1xuICAgICAgICByZXN1bHQucHVzaChkYXRhUmVzdWx0KVxuICAgICAgfSlcbiAgICAgIGRmZC5yZXNvbHZlKHJlc3VsdClcbiAgICB9KVxuXG4gICAgcmV0dXJuIGRmZC5wcm9taXNlKClcbiAgfSxcblxuXHQvKipcblx0ICogR2V0cyBhbiB1cmwgZnJvbSBhIHdpbmRvdy5vcGVuIGNhbGwgYnkgbW9ja2luZyB0aGUgd2luZG93Lm9wZW4gZnVuY3Rpb25cblx0ICogQHBhcmFtIGVsZW1lbnRcblx0ICogQHJldHVybnMgJC5EZWZlcnJlZCgpXG5cdCAqL1xuICBnZXRQb3B1cFVSTDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxuICAgIHZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICB2YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICAvLyBvdmVycmlkZSB3aW5kb3cub3BlbiBmdW5jdGlvbi4gd2UgbmVlZCB0byBleGVjdXRlIHRoaXMgaW4gcGFnZSBzY29wZS5cblx0XHQvLyB3ZSBuZWVkIHRvIGtub3cgaG93IHRvIGZpbmQgdGhpcyBlbGVtZW50IGZyb20gcGFnZSBzY29wZS5cbiAgICB2YXIgY3MgPSBuZXcgQ3NzU2VsZWN0b3Ioe1xuICAgICAgZW5hYmxlU21hcnRUYWJsZVNlbGVjdG9yOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZG9jdW1lbnQuYm9keSxcbiAgICAgIGVuYWJsZVJlc3VsdFN0cmlwcGluZzogZmFsc2VcbiAgICB9KVxuICAgIHZhciBjc3NTZWxlY3RvciA9IGNzLmdldENzc1NlbGVjdG9yKFtlbGVtZW50XSlcbiAgICBjb25zb2xlLmxvZyhjc3NTZWxlY3RvcilcbiAgICBjb25zb2xlLmxvZyhkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoY3NzU2VsZWN0b3IpKVxuXHRcdC8vIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXRjaCB3aW5kb3cub3BlbiBjYWxsIGFuZCBwbGFjZSB0aGUgcmVxdWVzdGVkIHVybCBhcyB0aGUgZWxlbWVudHMgZGF0YSBhdHRyaWJ1dGVcbiAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JylcbiAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnXG4gICAgY29uc29sZS5sb2coY3NzU2VsZWN0b3IpXG4gICAgY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3RvcikpXG4gICAgdmFyIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3RvcilbMF1cblxuICAgIGNvbnN0IG9wZW4gPSB3aW5kb3cub3BlblxuICAgIHdpbmRvdy5vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHVybCA9IGFyZ3VtZW50c1swXVxuICAgICAgZWwuZGF0YXNldC53ZWJTY3JhcGVyRXh0cmFjdFVybCA9IHVybFxuICAgICAgd2luZG93Lm9wZW4gPSBvcGVuXG4gICAgfVxuICAgIGVsLmNsaWNrKClcblxuXHRcdC8vIHdhaXQgZm9yIHVybCB0byBiZSBhdmFpbGFibGVcbiAgICB2YXIgZGVmZXJyZWRVUkwgPSBqcXVlcnkuRGVmZXJyZWQoKVxuICAgIHZhciB0aW1lb3V0ID0gTWF0aC5hYnMoNTAwMCAvIDMwKSAvLyA1cyB0aW1lb3V0IHRvIGdlbmVyYXRlIGFuIHVybCBmb3IgcG9wdXBcbiAgICB2YXIgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdXJsID0gJChlbGVtZW50KS5kYXRhKCd3ZWItc2NyYXBlci1leHRyYWN0LXVybCcpXG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIGRlZmVycmVkVVJMLnJlc29sdmUodXJsKVxuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuICAgICAgICBzY3JpcHQucmVtb3ZlKClcbiAgICAgIH1cblx0XHRcdC8vIHRpbWVvdXQgcG9wdXAgb3BlbmluZ1xuICAgICAgaWYgKHRpbWVvdXQtLSA8PSAwKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXG4gICAgICAgIHNjcmlwdC5yZW1vdmUoKVxuICAgICAgfVxuICAgIH0sIDMwKVxuXG4gICAgcmV0dXJuIGRlZmVycmVkVVJMLnByb21pc2UoKVxuICB9LFxuXG4gIGdldERhdGFDb2x1bW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFt0aGlzLmlkLCB0aGlzLmlkICsgJy1ocmVmJ11cbiAgfSxcblxuICBnZXRGZWF0dXJlczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbJ211bHRpcGxlJywgJ2RlbGF5J11cbiAgfSxcblxuICBnZXRJdGVtQ1NTU2VsZWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJyonXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RvclBvcHVwTGlua1xuIiwidmFyIGpxdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeS1kZWZlcnJlZCcpXG5cbnZhciBTZWxlY3RvclRhYmxlID0ge1xuXG4gIGNhblJldHVybk11bHRpcGxlUmVjb3JkczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgY2FuSGF2ZUNoaWxkU2VsZWN0b3JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG5cbiAgY2FuSGF2ZUxvY2FsQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcblxuICBjYW5DcmVhdGVOZXdKb2JzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIHdpbGxSZXR1cm5FbGVtZW50czogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuICBnZXRUYWJsZUhlYWRlckNvbHVtbnM6IGZ1bmN0aW9uICgkdGFibGUpIHtcbiAgICB2YXIgY29sdW1ucyA9IHt9XG4gICAgdmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICAgIHZhciBoZWFkZXJSb3dTZWxlY3RvciA9IHRoaXMuZ2V0VGFibGVIZWFkZXJSb3dTZWxlY3RvcigpXG4gICAgdmFyICRoZWFkZXJSb3cgPSAkKCR0YWJsZSkuZmluZChoZWFkZXJSb3dTZWxlY3RvcilcbiAgICBpZiAoJGhlYWRlclJvdy5sZW5ndGggPiAwKSB7XG4gICAgICAkaGVhZGVyUm93LmZpbmQoJ3RkLHRoJykuZWFjaChmdW5jdGlvbiAoaSkge1xuICAgICAgICB2YXIgaGVhZGVyID0gJCh0aGlzKS50ZXh0KCkudHJpbSgpXG4gICAgICAgIGNvbHVtbnNbaGVhZGVyXSA9IHtcbiAgICAgICAgICBpbmRleDogaSArIDFcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbnNcbiAgfSxcbiAgX2dldERhdGE6IGZ1bmN0aW9uIChwYXJlbnRFbGVtZW50KSB7XG4gICAgdmFyIGRmZCA9IGpxdWVyeS5EZWZlcnJlZCgpXG4gICAgdmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuXG4gICAgdmFyIHRhYmxlcyA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRzKHBhcmVudEVsZW1lbnQpXG5cbiAgICB2YXIgcmVzdWx0ID0gW11cbiAgICAkKHRhYmxlcykuZWFjaChmdW5jdGlvbiAoaywgdGFibGUpIHtcbiAgICAgIHZhciBjb2x1bW5zID0gdGhpcy5nZXRUYWJsZUhlYWRlckNvbHVtbnMoJCh0YWJsZSkpXG5cbiAgICAgIHZhciBkYXRhUm93U2VsZWN0b3IgPSB0aGlzLmdldFRhYmxlRGF0YVJvd1NlbGVjdG9yKClcbiAgICAgICQodGFibGUpLmZpbmQoZGF0YVJvd1NlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uIChpLCByb3cpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB7fVxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5leHRyYWN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uc1tjb2x1bW4uaGVhZGVyXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGRhdGFbY29sdW1uLm5hbWVdID0gbnVsbFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIHJvd1RleHQgPSAkKHJvdykuZmluZCgnPjpudGgtY2hpbGQoJyArIGNvbHVtbnNbY29sdW1uLmhlYWRlcl0uaW5kZXggKyAnKScpLnRleHQoKS50cmltKClcbiAgICAgICAgICAgICAgZGF0YVtjb2x1bW4ubmFtZV0gPSByb3dUZXh0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICByZXN1bHQucHVzaChkYXRhKVxuICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0uYmluZCh0aGlzKSlcblxuICAgIGRmZC5yZXNvbHZlKHJlc3VsdClcbiAgICByZXR1cm4gZGZkLnByb21pc2UoKVxuICB9LFxuXG4gIGdldERhdGFDb2x1bW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRhdGFDb2x1bW5zID0gW11cbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICBpZiAoY29sdW1uLmV4dHJhY3QgPT09IHRydWUpIHtcbiAgICAgICAgZGF0YUNvbHVtbnMucHVzaChjb2x1bW4ubmFtZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBkYXRhQ29sdW1uc1xuICB9LFxuXG4gIGdldEZlYXR1cmVzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFsnbXVsdGlwbGUnLCAnY29sdW1ucycsICdkZWxheScsICd0YWJsZURhdGFSb3dTZWxlY3RvcicsICd0YWJsZUhlYWRlclJvd1NlbGVjdG9yJ11cbiAgfSxcblxuICBnZXRJdGVtQ1NTU2VsZWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ3RhYmxlJ1xuICB9LFxuXG4gIGdldFRhYmxlSGVhZGVyUm93U2VsZWN0b3JGcm9tVGFibGVIVE1MOiBmdW5jdGlvbiAoaHRtbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyICQgPSBvcHRpb25zLiQgfHwgdGhpcy4kXG4gICAgdmFyICR0YWJsZSA9ICQoaHRtbClcbiAgICBpZiAoJHRhYmxlLmZpbmQoJ3RoZWFkIHRyOmhhcyh0ZDpub3QoOmVtcHR5KSksIHRoZWFkIHRyOmhhcyh0aDpub3QoOmVtcHR5KSknKS5sZW5ndGgpIHtcbiAgICAgIGlmICgkdGFibGUuZmluZCgndGhlYWQgdHInKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuICd0aGVhZCB0cidcbiAgICAgIH1cdFx0XHRlbHNlIHtcbiAgICAgICAgdmFyICRyb3dzID0gJHRhYmxlLmZpbmQoJ3RoZWFkIHRyJylcblx0XHRcdFx0Ly8gZmlyc3Qgcm93IHdpdGggZGF0YVxuICAgICAgICB2YXIgcm93SW5kZXggPSAkcm93cy5pbmRleCgkcm93cy5maWx0ZXIoJzpoYXModGQ6bm90KDplbXB0eSkpLDpoYXModGg6bm90KDplbXB0eSkpJylbMF0pXG4gICAgICAgIHJldHVybiAndGhlYWQgdHI6bnRoLW9mLXR5cGUoJyArIChyb3dJbmRleCArIDEpICsgJyknXG4gICAgICB9XG4gICAgfVx0XHRlbHNlIGlmICgkdGFibGUuZmluZCgndHIgdGQ6bm90KDplbXB0eSksIHRyIHRoOm5vdCg6ZW1wdHkpJykubGVuZ3RoKSB7XG4gICAgICB2YXIgJHJvd3MgPSAkdGFibGUuZmluZCgndHInKVxuXHRcdFx0Ly8gZmlyc3Qgcm93IHdpdGggZGF0YVxuICAgICAgdmFyIHJvd0luZGV4ID0gJHJvd3MuaW5kZXgoJHJvd3MuZmlsdGVyKCc6aGFzKHRkOm5vdCg6ZW1wdHkpKSw6aGFzKHRoOm5vdCg6ZW1wdHkpKScpWzBdKVxuICAgICAgcmV0dXJuICd0cjpudGgtb2YtdHlwZSgnICsgKHJvd0luZGV4ICsgMSkgKyAnKSdcbiAgICB9XHRcdGVsc2Uge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICB9LFxuXG4gIGdldFRhYmxlRGF0YVJvd1NlbGVjdG9yRnJvbVRhYmxlSFRNTDogZnVuY3Rpb24gKGh0bWwsIG9wdGlvbnMgPSB7fSkge1xuICAgIHZhciAkID0gb3B0aW9ucy4kIHx8IHRoaXMuJFxuICAgIHZhciAkdGFibGUgPSAkKGh0bWwpXG4gICAgaWYgKCR0YWJsZS5maW5kKCd0aGVhZCB0cjpoYXModGQ6bm90KDplbXB0eSkpLCB0aGVhZCB0cjpoYXModGg6bm90KDplbXB0eSkpJykubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJ3Rib2R5IHRyJ1xuICAgIH1cdFx0ZWxzZSBpZiAoJHRhYmxlLmZpbmQoJ3RyIHRkOm5vdCg6ZW1wdHkpLCB0ciB0aDpub3QoOmVtcHR5KScpLmxlbmd0aCkge1xuICAgICAgdmFyICRyb3dzID0gJHRhYmxlLmZpbmQoJ3RyJylcblx0XHRcdC8vIGZpcnN0IHJvdyB3aXRoIGRhdGFcbiAgICAgIHZhciByb3dJbmRleCA9ICRyb3dzLmluZGV4KCRyb3dzLmZpbHRlcignOmhhcyh0ZDpub3QoOmVtcHR5KSksOmhhcyh0aDpub3QoOmVtcHR5KSknKVswXSlcbiAgICAgIHJldHVybiAndHI6bnRoLW9mLXR5cGUobisnICsgKHJvd0luZGV4ICsgMikgKyAnKSdcbiAgICB9XHRcdGVsc2Uge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICB9LFxuXG4gIGdldFRhYmxlSGVhZGVyUm93U2VsZWN0b3I6IGZ1bmN0aW9uICgpIHtcblx0XHQvLyBoYW5kbGUgbGVnYWN5IHNlbGVjdG9yc1xuICAgIGlmICh0aGlzLnRhYmxlSGVhZGVyUm93U2VsZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuICd0aGVhZCB0cidcbiAgICB9XHRcdGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudGFibGVIZWFkZXJSb3dTZWxlY3RvclxuICAgIH1cbiAgfSxcblxuICBnZXRUYWJsZURhdGFSb3dTZWxlY3RvcjogZnVuY3Rpb24gKCkge1xuXHRcdC8vIGhhbmRsZSBsZWdhY3kgc2VsZWN0b3JzXG4gICAgaWYgKHRoaXMudGFibGVEYXRhUm93U2VsZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuICd0Ym9keSB0cidcbiAgICB9XHRcdGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhUm93U2VsZWN0b3JcbiAgICB9XG4gIH0sXG5cblx0LyoqXG5cdCAqIEV4dHJhY3QgdGFibGUgaGVhZGVyIGNvbHVtbiBpbmZvIGZyb20gaHRtbFxuXHQgKiBAcGFyYW0gaHRtbFxuXHQgKi9cbiAgZ2V0VGFibGVIZWFkZXJDb2x1bW5zRnJvbUhUTUw6IGZ1bmN0aW9uIChoZWFkZXJSb3dTZWxlY3RvciwgaHRtbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyICQgPSBvcHRpb25zLiQgfHwgdGhpcy4kXG4gICAgdmFyICR0YWJsZSA9ICQoaHRtbClcbiAgICB2YXIgJGhlYWRlclJvd0NvbHVtbnMgPSAkdGFibGUuZmluZChoZWFkZXJSb3dTZWxlY3RvcikuZmluZCgndGQsdGgnKVxuXG4gICAgdmFyIGNvbHVtbnMgPSBbXVxuXG4gICAgJGhlYWRlclJvd0NvbHVtbnMuZWFjaChmdW5jdGlvbiAoaSwgY29sdW1uRWwpIHtcbiAgICAgIHZhciBoZWFkZXIgPSAkKGNvbHVtbkVsKS50ZXh0KCkudHJpbSgpXG4gICAgICB2YXIgbmFtZSA9IGhlYWRlclxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDApIHtcbiAgICAgICAgY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICBoZWFkZXI6IGhlYWRlcixcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIGV4dHJhY3Q6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBjb2x1bW5zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RvclRhYmxlXG4iLCJ2YXIganF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciBTZWxlY3RvclRleHQgPSB7XG5cbiAgY2FuUmV0dXJuTXVsdGlwbGVSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSxcblxuICBjYW5IYXZlQ2hpbGRTZWxlY3RvcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcblxuICBjYW5IYXZlTG9jYWxDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9LFxuXG4gIGNhbkNyZWF0ZU5ld0pvYnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSxcbiAgd2lsbFJldHVybkVsZW1lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sXG4gIF9nZXREYXRhOiBmdW5jdGlvbiAocGFyZW50RWxlbWVudCkge1xuICAgIHZhciAkID0gdGhpcy4kXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG52YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICB2YXIgZGZkID0ganF1ZXJ5LkRlZmVycmVkKClcblxuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRzKHBhcmVudEVsZW1lbnQpXG5cbiAgICB2YXIgcmVzdWx0ID0gW11cbiAgICAkKGVsZW1lbnRzKS5lYWNoKGZ1bmN0aW9uIChrLCBlbGVtZW50KSB7XG4gICAgICB2YXIgZGF0YSA9IHt9XG5cblx0XHRcdC8vIHJlbW92ZSBzY3JpcHQsIHN0eWxlIHRhZyBjb250ZW50cyBmcm9tIHRleHQgcmVzdWx0c1xuICAgICAgdmFyICRlbGVtZW50X2Nsb25lID0gJChlbGVtZW50KS5jbG9uZSgpXG4gICAgICAkZWxlbWVudF9jbG9uZS5maW5kKCdzY3JpcHQsIHN0eWxlJykucmVtb3ZlKClcblx0XHRcdC8vIDxicj4gcmVwbGFjZSBiciB0YWdzIHdpdGggbmV3bGluZXNcbiAgICAgICRlbGVtZW50X2Nsb25lLmZpbmQoJ2JyJykuYWZ0ZXIoJ1xcbicpXG5cbiAgICAgIHZhciB0ZXh0ID0gJGVsZW1lbnRfY2xvbmUudGV4dCgpXG4gICAgICBpZiAodGhpcy5yZWdleCAhPT0gdW5kZWZpbmVkICYmIHRoaXMucmVnZXgubGVuZ3RoKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gdGV4dC5tYXRjaChuZXcgUmVnRXhwKHRoaXMucmVnZXgpKVxuICAgICAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgIHRleHQgPSBtYXRjaGVzWzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGF0YVt0aGlzLmlkXSA9IHRleHRcblxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gZmFsc2UgJiYgZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgZGF0YSA9IHt9XG4gICAgICBkYXRhW3RoaXMuaWRdID0gbnVsbFxuICAgICAgcmVzdWx0LnB1c2goZGF0YSlcbiAgICB9XG5cbiAgICBkZmQucmVzb2x2ZShyZXN1bHQpXG4gICAgcmV0dXJuIGRmZC5wcm9taXNlKClcbiAgfSxcblxuICBnZXREYXRhQ29sdW1uczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbdGhpcy5pZF1cbiAgfSxcblxuICBnZXRGZWF0dXJlczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBbJ211bHRpcGxlJywgJ3JlZ2V4JywgJ2RlbGF5J11cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdG9yVGV4dFxuIiwidmFyIFNlbGVjdG9yID0gcmVxdWlyZSgnLi9TZWxlY3RvcicpXG5cbnZhciBTZWxlY3Rvckxpc3QgPSBmdW5jdGlvbiAoc2VsZWN0b3JzLCBvcHRpb25zKSB7XG4gIHZhciAkID0gb3B0aW9ucy4kXG4gIHZhciBkb2N1bWVudCA9IG9wdGlvbnMuZG9jdW1lbnRcbiAgdmFyIHdpbmRvdyA9IG9wdGlvbnMud2luZG93XG4gIC8vIFdlIGRvbid0IHdhbnQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnJCcsIHtcbiAgICB2YWx1ZTogJCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3dpbmRvdycsIHtcbiAgICB2YWx1ZTogd2luZG93LFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZG9jdW1lbnQnLCB7XG4gICAgdmFsdWU6IGRvY3VtZW50LFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pXG4gIGlmICghdGhpcy4kKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcganF1ZXJ5JylcbmlmICghdGhpcy5kb2N1bWVudCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBkb2N1bWVudFwiKVxuaWYoIXRoaXMud2luZG93KXRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgd2luZG93XCIpXG5cbiAgaWYgKHNlbGVjdG9ycyA9PT0gbnVsbCB8fCBzZWxlY3RvcnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLnB1c2goc2VsZWN0b3JzW2ldKVxuICB9XG59XG5cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUgPSBbXVxuXG5TZWxlY3Rvckxpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgaWYgKCF0aGlzLmhhc1NlbGVjdG9yKHNlbGVjdG9yLmlkKSkge1xuICAgIGlmICghKHNlbGVjdG9yIGluc3RhbmNlb2YgU2VsZWN0b3IpKSB7XG52YXIgJCA9IHRoaXMuJFxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxudmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgICBzZWxlY3RvciA9IG5ldyBTZWxlY3RvcihzZWxlY3RvciwgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxuICAgIH1cbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsIHNlbGVjdG9yKVxuICB9XG59XG5cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuaGFzU2VsZWN0b3IgPSBmdW5jdGlvbiAoc2VsZWN0b3JJZCkge1xuICBpZiAoc2VsZWN0b3JJZCBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIHNlbGVjdG9ySWQgPSBzZWxlY3RvcklkLmlkXG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodGhpc1tpXS5pZCA9PT0gc2VsZWN0b3JJZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogUmV0dXJucyBhbGwgc2VsZWN0b3JzIG9yIHJlY3Vyc2l2ZWx5IGZpbmQgYW5kIHJldHVybiBhbGwgY2hpbGQgc2VsZWN0b3JzIG9mIGEgcGFyZW50IHNlbGVjdG9yLlxuICogQHBhcmFtIHBhcmVudFNlbGVjdG9ySWRcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS5nZXRBbGxTZWxlY3RvcnMgPSBmdW5jdGlvbiAocGFyZW50U2VsZWN0b3JJZCkge1xuICBpZiAocGFyZW50U2VsZWN0b3JJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHZhciBnZXRBbGxDaGlsZFNlbGVjdG9ycyA9IGZ1bmN0aW9uIChwYXJlbnRTZWxlY3RvcklkLCByZXN1bHRTZWxlY3RvcnMpIHtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICBpZiAoc2VsZWN0b3IuaGFzUGFyZW50U2VsZWN0b3IocGFyZW50U2VsZWN0b3JJZCkpIHtcbiAgICAgICAgaWYgKHJlc3VsdFNlbGVjdG9ycy5pbmRleE9mKHNlbGVjdG9yKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXN1bHRTZWxlY3RvcnMucHVzaChzZWxlY3RvcilcbiAgICAgICAgICBnZXRBbGxDaGlsZFNlbGVjdG9ycyhzZWxlY3Rvci5pZCwgcmVzdWx0U2VsZWN0b3JzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfS5iaW5kKHRoaXMpXG5cbiAgdmFyIHJlc3VsdFNlbGVjdG9ycyA9IFtdXG4gIGdldEFsbENoaWxkU2VsZWN0b3JzKHBhcmVudFNlbGVjdG9ySWQsIHJlc3VsdFNlbGVjdG9ycylcbiAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yc1xufVxuXG4vKipcbiAqIFJldHVybnMgb25seSBzZWxlY3RvcnMgdGhhdCBhcmUgZGlyZWN0bHkgdW5kZXIgYSBwYXJlbnRcbiAqIEBwYXJhbSBwYXJlbnRTZWxlY3RvcklkXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuZ2V0RGlyZWN0Q2hpbGRTZWxlY3RvcnMgPSBmdW5jdGlvbiAocGFyZW50U2VsZWN0b3JJZCkge1xudmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICB2YXIgcmVzdWx0U2VsZWN0b3JzID0gbmV3IFNlbGVjdG9yTGlzdChudWxsLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICBpZiAoc2VsZWN0b3IuaGFzUGFyZW50U2VsZWN0b3IocGFyZW50U2VsZWN0b3JJZCkpIHtcbiAgICAgIHJlc3VsdFNlbGVjdG9ycy5wdXNoKHNlbGVjdG9yKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yc1xufVxuXG5TZWxlY3Rvckxpc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xudmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICB2YXIgcmVzdWx0TGlzdCA9IG5ldyBTZWxlY3Rvckxpc3QobnVsbCwgeyQsIHdpbmRvdywgZG9jdW1lbnR9KVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgcmVzdWx0TGlzdC5wdXNoKHNlbGVjdG9yKVxuICB9KVxuICByZXR1cm4gcmVzdWx0TGlzdFxufVxuXG5TZWxlY3Rvckxpc3QucHJvdG90eXBlLmZ1bGxDbG9uZSA9IGZ1bmN0aW9uICgpIHtcbnZhciAkID0gdGhpcy4kXG52YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG52YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgdmFyIHJlc3VsdExpc3QgPSBuZXcgU2VsZWN0b3JMaXN0KG51bGwsIHskLCB3aW5kb3csIGRvY3VtZW50fSlcbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgIHJlc3VsdExpc3QucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGVjdG9yKSkpXG4gIH0pXG4gIHJldHVybiByZXN1bHRMaXN0XG59XG5cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmVzdWx0TGlzdCA9IHRoaXMuY2xvbmUoKVxuICBmb3IgKHZhciBpIGluIGFyZ3VtZW50cykge1xuICAgIGFyZ3VtZW50c1tpXS5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgcmVzdWx0TGlzdC5wdXNoKHNlbGVjdG9yKVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHJlc3VsdExpc3Rcbn1cblxuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS5nZXRTZWxlY3RvciA9IGZ1bmN0aW9uIChzZWxlY3RvcklkKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzZWxlY3RvciA9IHRoaXNbaV1cbiAgICBpZiAoc2VsZWN0b3IuaWQgPT09IHNlbGVjdG9ySWQpIHtcbiAgICAgIHJldHVybiBzZWxlY3RvclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIHNlbGVjdG9ycyBpZiB0aGlzIHNlbGVjdG9ycyBpbmNsdWRpbmcgYWxsIHBhcmVudCBzZWxlY3RvcnMgd2l0aGluIHRoaXMgcGFnZVxuICogQFRPRE8gbm90IHVzZWQgYW55IG1vcmUuXG4gKiBAcGFyYW0gc2VsZWN0b3JJZFxuICogQHJldHVybnMgeyp9XG4gKi9cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuZ2V0T25lUGFnZVNlbGVjdG9ycyA9IGZ1bmN0aW9uIChzZWxlY3RvcklkKSB7XG52YXIgJCA9IHRoaXMuJFxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxudmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gIHZhciByZXN1bHRMaXN0ID0gbmV3IFNlbGVjdG9yTGlzdChudWxsLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gIHZhciBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3Ioc2VsZWN0b3JJZClcbiAgcmVzdWx0TGlzdC5wdXNoKHRoaXMuZ2V0U2VsZWN0b3Ioc2VsZWN0b3JJZCkpXG5cblx0Ly8gcmVjdXJzaXZlbHkgZmluZCBhbGwgcGFyZW50IHNlbGVjdG9ycyB0aGF0IGNvdWxkIGxlYWQgdG8gdGhlIHBhZ2Ugd2hlcmUgc2VsZWN0b3JJZCBpcyB1c2VkLlxuICB2YXIgZmluZFBhcmVudFNlbGVjdG9ycyA9IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgIHNlbGVjdG9yLnBhcmVudFNlbGVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJlbnRTZWxlY3RvcklkKSB7XG4gICAgICBpZiAocGFyZW50U2VsZWN0b3JJZCA9PT0gJ19yb290JykgcmV0dXJuXG4gICAgICB2YXIgcGFyZW50U2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKHBhcmVudFNlbGVjdG9ySWQpXG4gICAgICBpZiAocmVzdWx0TGlzdC5pbmRleE9mKHBhcmVudFNlbGVjdG9yKSAhPT0gLTEpIHJldHVyblxuICAgICAgaWYgKHBhcmVudFNlbGVjdG9yLndpbGxSZXR1cm5FbGVtZW50cygpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChwYXJlbnRTZWxlY3RvcilcbiAgICAgICAgZmluZFBhcmVudFNlbGVjdG9ycyhwYXJlbnRTZWxlY3RvcilcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpXG4gIH0uYmluZCh0aGlzKVxuXG4gIGZpbmRQYXJlbnRTZWxlY3RvcnMoc2VsZWN0b3IpXG5cblx0Ly8gYWRkIGFsbCBjaGlsZCBzZWxlY3RvcnNcbiAgcmVzdWx0TGlzdCA9IHJlc3VsdExpc3QuY29uY2F0KHRoaXMuZ2V0U2luZ2xlUGFnZUFsbENoaWxkU2VsZWN0b3JzKHNlbGVjdG9yLmlkKSlcbiAgcmV0dXJuIHJlc3VsdExpc3Rcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBjaGlsZCBzZWxlY3RvcnMgb2YgYSBzZWxlY3RvciB3aGljaCBjYW4gYmUgdXNlZCB3aXRoaW4gb25lIHBhZ2UuXG4gKiBAcGFyYW0gcGFyZW50U2VsZWN0b3JJZFxuICovXG5TZWxlY3Rvckxpc3QucHJvdG90eXBlLmdldFNpbmdsZVBhZ2VBbGxDaGlsZFNlbGVjdG9ycyA9IGZ1bmN0aW9uIChwYXJlbnRTZWxlY3RvcklkKSB7XG52YXIgJCA9IHRoaXMuJFxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxudmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gIHZhciByZXN1bHRMaXN0ID0gbmV3IFNlbGVjdG9yTGlzdChudWxsLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gIHZhciBhZGRDaGlsZFNlbGVjdG9ycyA9IGZ1bmN0aW9uIChwYXJlbnRTZWxlY3Rvcikge1xuICAgIGlmIChwYXJlbnRTZWxlY3Rvci53aWxsUmV0dXJuRWxlbWVudHMoKSkge1xuICAgICAgdmFyIGNoaWxkU2VsZWN0b3JzID0gdGhpcy5nZXREaXJlY3RDaGlsZFNlbGVjdG9ycyhwYXJlbnRTZWxlY3Rvci5pZClcbiAgICAgIGNoaWxkU2VsZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkU2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKHJlc3VsdExpc3QuaW5kZXhPZihjaGlsZFNlbGVjdG9yKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXN1bHRMaXN0LnB1c2goY2hpbGRTZWxlY3RvcilcbiAgICAgICAgICBhZGRDaGlsZFNlbGVjdG9ycyhjaGlsZFNlbGVjdG9yKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfS5iaW5kKHRoaXMpXG5cbiAgdmFyIHBhcmVudFNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihwYXJlbnRTZWxlY3RvcklkKVxuICBhZGRDaGlsZFNlbGVjdG9ycyhwYXJlbnRTZWxlY3RvcilcbiAgcmV0dXJuIHJlc3VsdExpc3Rcbn1cblxuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS53aWxsUmV0dXJuTXVsdGlwbGVSZWNvcmRzID0gZnVuY3Rpb24gKHNlbGVjdG9ySWQpIHtcblx0Ly8gaGFuZGxlIHJldXFlc3RlZCBzZWxlY3RvclxuICB2YXIgc2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKHNlbGVjdG9ySWQpXG4gIGlmIChzZWxlY3Rvci53aWxsUmV0dXJuTXVsdGlwbGVSZWNvcmRzKCkgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cblx0Ly8gaGFuZGxlIGFsbCBpdHMgY2hpbGQgc2VsZWN0b3JzXG4gIHZhciBjaGlsZFNlbGVjdG9ycyA9IHRoaXMuZ2V0QWxsU2VsZWN0b3JzKHNlbGVjdG9ySWQpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRTZWxlY3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2VsZWN0b3IgPSBjaGlsZFNlbGVjdG9yc1tpXVxuICAgIGlmIChzZWxlY3Rvci53aWxsUmV0dXJuTXVsdGlwbGVSZWNvcmRzKCkgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogV2hlbiBzZXJpYWxpemluZyB0byBKU09OIGNvbnZlcnQgdG8gYW4gYXJyYXlcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZXN1bHQgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgcmVzdWx0LnB1c2goc2VsZWN0b3IpXG4gIH0pXG4gIHJldHVybiByZXN1bHRcbn1cblxuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS5nZXRTZWxlY3RvckJ5SWQgPSBmdW5jdGlvbiAoc2VsZWN0b3JJZCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2VsZWN0b3IgPSB0aGlzW2ldXG4gICAgaWYgKHNlbGVjdG9yLmlkID09PSBzZWxlY3RvcklkKSB7XG4gICAgICByZXR1cm4gc2VsZWN0b3JcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiByZXR1cm5zIGNzcyBzZWxlY3RvciBmb3IgYSBnaXZlbiBlbGVtZW50LiBjc3Mgc2VsZWN0b3IgaW5jbHVkZXMgYWxsIHBhcmVudCBlbGVtZW50IHNlbGVjdG9yc1xuICogQHBhcmFtIHNlbGVjdG9ySWRcbiAqIEBwYXJhbSBwYXJlbnRTZWxlY3RvcklkcyBhcnJheSBvZiBwYXJlbnQgc2VsZWN0b3IgaWRzIGZyb20gZGV2dG9vbHMgQnJlYWRjdW1iXG4gKiBAcmV0dXJucyBzdHJpbmdcbiAqL1xuU2VsZWN0b3JMaXN0LnByb3RvdHlwZS5nZXRDU1NTZWxlY3RvcldpdGhpbk9uZVBhZ2UgPSBmdW5jdGlvbiAoc2VsZWN0b3JJZCwgcGFyZW50U2VsZWN0b3JJZHMpIHtcbiAgdmFyIENTU1NlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihzZWxlY3RvcklkKS5zZWxlY3RvclxuICB2YXIgcGFyZW50Q1NTU2VsZWN0b3IgPSB0aGlzLmdldFBhcmVudENTU1NlbGVjdG9yV2l0aGluT25lUGFnZShwYXJlbnRTZWxlY3RvcklkcylcbiAgQ1NTU2VsZWN0b3IgPSBwYXJlbnRDU1NTZWxlY3RvciArIENTU1NlbGVjdG9yXG5cbiAgcmV0dXJuIENTU1NlbGVjdG9yXG59XG5cbi8qKlxuICogcmV0dXJucyBjc3Mgc2VsZWN0b3IgZm9yIHBhcmVudCBzZWxlY3RvcnMgdGhhdCBhcmUgd2l0aGluIG9uZSBwYWdlXG4gKiBAcGFyYW0gcGFyZW50U2VsZWN0b3JJZHMgYXJyYXkgb2YgcGFyZW50IHNlbGVjdG9yIGlkcyBmcm9tIGRldnRvb2xzIEJyZWFkY3VtYlxuICogQHJldHVybnMgc3RyaW5nXG4gKi9cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuZ2V0UGFyZW50Q1NTU2VsZWN0b3JXaXRoaW5PbmVQYWdlID0gZnVuY3Rpb24gKHBhcmVudFNlbGVjdG9ySWRzKSB7XG4gIHZhciBDU1NTZWxlY3RvciA9ICcnXG5cbiAgZm9yICh2YXIgaSA9IHBhcmVudFNlbGVjdG9ySWRzLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICB2YXIgcGFyZW50U2VsZWN0b3JJZCA9IHBhcmVudFNlbGVjdG9ySWRzW2ldXG4gICAgdmFyIHBhcmVudFNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihwYXJlbnRTZWxlY3RvcklkKVxuICAgIGlmIChwYXJlbnRTZWxlY3Rvci53aWxsUmV0dXJuRWxlbWVudHMoKSkge1xuICAgICAgQ1NTU2VsZWN0b3IgPSBwYXJlbnRTZWxlY3Rvci5zZWxlY3RvciArICcgJyArIENTU1NlbGVjdG9yXG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIENTU1NlbGVjdG9yXG59XG5cblNlbGVjdG9yTGlzdC5wcm90b3R5cGUuaGFzUmVjdXJzaXZlRWxlbWVudFNlbGVjdG9ycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFJlY3Vyc2lvbkZvdW5kID0gZmFsc2VcblxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHRvcFNlbGVjdG9yKSB7XG4gICAgdmFyIHZpc2l0ZWRTZWxlY3RvcnMgPSBbXVxuXG4gICAgdmFyIGNoZWNrUmVjdXJzaW9uID0gZnVuY3Rpb24gKHBhcmVudFNlbGVjdG9yKSB7XG5cdFx0XHQvLyBhbHJlYWR5IHZpc2l0ZWRcbiAgICAgIGlmICh2aXNpdGVkU2VsZWN0b3JzLmluZGV4T2YocGFyZW50U2VsZWN0b3IpICE9PSAtMSkge1xuICAgICAgICBSZWN1cnNpb25Gb3VuZCA9IHRydWVcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnRTZWxlY3Rvci53aWxsUmV0dXJuRWxlbWVudHMoKSkge1xuICAgICAgICB2aXNpdGVkU2VsZWN0b3JzLnB1c2gocGFyZW50U2VsZWN0b3IpXG4gICAgICAgIHZhciBjaGlsZFNlbGVjdG9ycyA9IHRoaXMuZ2V0RGlyZWN0Q2hpbGRTZWxlY3RvcnMocGFyZW50U2VsZWN0b3IuaWQpXG4gICAgICAgIGNoaWxkU2VsZWN0b3JzLmZvckVhY2goY2hlY2tSZWN1cnNpb24pXG4gICAgICAgIHZpc2l0ZWRTZWxlY3RvcnMucG9wKClcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcylcblxuICAgIGNoZWNrUmVjdXJzaW9uKHRvcFNlbGVjdG9yKVxuICB9LmJpbmQodGhpcykpXG5cbiAgcmV0dXJuIFJlY3Vyc2lvbkZvdW5kXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0b3JMaXN0XG4iLCJ2YXIgU2VsZWN0b3JFbGVtZW50ID0gcmVxdWlyZSgnLi9TZWxlY3Rvci9TZWxlY3RvckVsZW1lbnQnKVxudmFyIFNlbGVjdG9yRWxlbWVudEF0dHJpYnV0ZSA9IHJlcXVpcmUoJy4vU2VsZWN0b3IvU2VsZWN0b3JFbGVtZW50QXR0cmlidXRlJylcbnZhciBTZWxlY3RvckVsZW1lbnRDbGljayA9IHJlcXVpcmUoJy4vU2VsZWN0b3IvU2VsZWN0b3JFbGVtZW50Q2xpY2snKVxudmFyIFNlbGVjdG9yRWxlbWVudFNjcm9sbCA9IHJlcXVpcmUoJy4vU2VsZWN0b3IvU2VsZWN0b3JFbGVtZW50U2Nyb2xsJylcbnZhciBTZWxlY3Rvckdyb3VwID0gcmVxdWlyZSgnLi9TZWxlY3Rvci9TZWxlY3Rvckdyb3VwJylcbnZhciBTZWxlY3RvckhUTUwgPSByZXF1aXJlKCcuL1NlbGVjdG9yL1NlbGVjdG9ySFRNTCcpXG52YXIgU2VsZWN0b3JJbWFnZSA9IHJlcXVpcmUoJy4vU2VsZWN0b3IvU2VsZWN0b3JJbWFnZScpXG52YXIgU2VsZWN0b3JMaW5rID0gcmVxdWlyZSgnLi9TZWxlY3Rvci9TZWxlY3RvckxpbmsnKVxudmFyIFNlbGVjdG9yUG9wdXBMaW5rID0gcmVxdWlyZSgnLi9TZWxlY3Rvci9TZWxlY3RvclBvcHVwTGluaycpXG52YXIgU2VsZWN0b3JUYWJsZSA9IHJlcXVpcmUoJy4vU2VsZWN0b3IvU2VsZWN0b3JUYWJsZScpXG52YXIgU2VsZWN0b3JUZXh0ID0gcmVxdWlyZSgnLi9TZWxlY3Rvci9TZWxlY3RvclRleHQnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU2VsZWN0b3JFbGVtZW50LFxuICBTZWxlY3RvckVsZW1lbnRBdHRyaWJ1dGUsXG4gIFNlbGVjdG9yRWxlbWVudENsaWNrLFxuICBTZWxlY3RvckVsZW1lbnRTY3JvbGwsXG4gIFNlbGVjdG9yR3JvdXAsXG4gIFNlbGVjdG9ySFRNTCxcbiAgU2VsZWN0b3JJbWFnZSxcbiAgU2VsZWN0b3JMaW5rLFxuICBTZWxlY3RvclBvcHVwTGluayxcbiAgU2VsZWN0b3JUYWJsZSxcbiAgU2VsZWN0b3JUZXh0XG59XG4iLCJ2YXIgU2VsZWN0b3IgPSByZXF1aXJlKCcuL1NlbGVjdG9yJylcbnZhciBTZWxlY3Rvckxpc3QgPSByZXF1aXJlKCcuL1NlbGVjdG9yTGlzdCcpXG52YXIgU2l0ZW1hcCA9IGZ1bmN0aW9uIChzaXRlbWFwT2JqLCBvcHRpb25zKSB7XG4gIHZhciAkID0gb3B0aW9ucy4kXG4gIHZhciBkb2N1bWVudCA9IG9wdGlvbnMuZG9jdW1lbnRcbiAgdmFyIHdpbmRvdyA9IG9wdGlvbnMud2luZG93XG4gIC8vIFdlIGRvbid0IHdhbnQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnJCcsIHtcbiAgICB2YWx1ZTogJCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3dpbmRvdycsIHtcbiAgICB2YWx1ZTogd2luZG93LFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZG9jdW1lbnQnLCB7XG4gICAgdmFsdWU6IGRvY3VtZW50LFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pXG4gIGlmICghdGhpcy4kKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcganF1ZXJ5JylcbmlmICghdGhpcy5kb2N1bWVudCkge1xuICBjb25zb2xlLmVycm9yKChuZXcgRXJyb3IoKSkuc3RhY2spXG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBkb2N1bWVudFwiKVxufVxuaWYoIXRoaXMud2luZG93KXRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgd2luZG93XCIpXG4gIHRoaXMuaW5pdERhdGEoc2l0ZW1hcE9iailcbn1cblxuU2l0ZW1hcC5wcm90b3R5cGUgPSB7XG5cbiAgaW5pdERhdGE6IGZ1bmN0aW9uIChzaXRlbWFwT2JqKSB7XG4gICAgY29uc29sZS5sb2codGhpcylcbiAgICBmb3IgKHZhciBrZXkgaW4gc2l0ZW1hcE9iaikge1xuICAgICAgY29uc29sZS5sb2coa2V5KVxuICAgICAgdGhpc1trZXldID0gc2l0ZW1hcE9ialtrZXldXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKHRoaXMpXG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICB2YXIgd2luZG93ID0gdGhpcy53aW5kb3dcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgdmFyIHNlbGVjdG9ycyA9IHRoaXMuc2VsZWN0b3JzXG4gICAgdGhpcy5zZWxlY3RvcnMgPSBuZXcgU2VsZWN0b3JMaXN0KHRoaXMuc2VsZWN0b3JzLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gIH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgYWxsIHNlbGVjdG9ycyBvciByZWN1cnNpdmVseSBmaW5kIGFuZCByZXR1cm4gYWxsIGNoaWxkIHNlbGVjdG9ycyBvZiBhIHBhcmVudCBzZWxlY3Rvci5cblx0ICogQHBhcmFtIHBhcmVudFNlbGVjdG9ySWRcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cbiAgZ2V0QWxsU2VsZWN0b3JzOiBmdW5jdGlvbiAocGFyZW50U2VsZWN0b3JJZCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9ycy5nZXRBbGxTZWxlY3RvcnMocGFyZW50U2VsZWN0b3JJZClcbiAgfSxcblxuXHQvKipcblx0ICogUmV0dXJucyBvbmx5IHNlbGVjdG9ycyB0aGF0IGFyZSBkaXJlY3RseSB1bmRlciBhIHBhcmVudFxuXHQgKiBAcGFyYW0gcGFyZW50U2VsZWN0b3JJZFxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuICBnZXREaXJlY3RDaGlsZFNlbGVjdG9yczogZnVuY3Rpb24gKHBhcmVudFNlbGVjdG9ySWQpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RvcnMuZ2V0RGlyZWN0Q2hpbGRTZWxlY3RvcnMocGFyZW50U2VsZWN0b3JJZClcbiAgfSxcblxuXHQvKipcblx0ICogUmV0dXJucyBhbGwgc2VsZWN0b3IgaWQgcGFyYW1ldGVyc1xuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqL1xuICBnZXRTZWxlY3RvcklkczogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpZHMgPSBbJ19yb290J11cbiAgICB0aGlzLnNlbGVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgICAgaWRzLnB1c2goc2VsZWN0b3IuaWQpXG4gICAgfSlcbiAgICByZXR1cm4gaWRzXG4gIH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgb25seSBzZWxlY3RvciBpZHMgd2hpY2ggY2FuIGhhdmUgY2hpbGQgc2VsZWN0b3JzXG5cdCAqIEByZXR1cm5zIHtBcnJheX1cblx0ICovXG4gIGdldFBvc3NpYmxlUGFyZW50U2VsZWN0b3JJZHM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaWRzID0gWydfcm9vdCddXG4gICAgdGhpcy5zZWxlY3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmIChzZWxlY3Rvci5jYW5IYXZlQ2hpbGRTZWxlY3RvcnMoKSkge1xuICAgICAgICBpZHMucHVzaChzZWxlY3Rvci5pZClcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBpZHNcbiAgfSxcblxuICBnZXRTdGFydFVybHM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhcnRVcmxzID0gdGhpcy5zdGFydFVybFxuXHRcdC8vIHNpbmdsZSBzdGFydCB1cmxcbiAgICBpZiAodGhpcy5zdGFydFVybC5wdXNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0YXJ0VXJscyA9IFtzdGFydFVybHNdXG4gICAgfVxuXG4gICAgdmFyIHVybHMgPSBbXVxuICAgIHN0YXJ0VXJscy5mb3JFYWNoKGZ1bmN0aW9uIChzdGFydFVybCkge1xuXHRcdFx0Ly8gemVybyBwYWRkaW5nIGhlbHBlclxuICAgICAgdmFyIGxwYWQgPSBmdW5jdGlvbiAoc3RyLCBsZW5ndGgpIHtcbiAgICAgICAgd2hpbGUgKHN0ci5sZW5ndGggPCBsZW5ndGgpIHsgc3RyID0gJzAnICsgc3RyIH1cbiAgICAgICAgcmV0dXJuIHN0clxuICAgICAgfVxuXG4gICAgICB2YXIgcmUgPSAvXiguKj8pXFxbKFxcZCspXFwtKFxcZCspKDooXFxkKykpP1xcXSguKikkL1xuICAgICAgdmFyIG1hdGNoZXMgPSBzdGFydFVybC5tYXRjaChyZSlcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHZhciBzdGFydFN0ciA9IG1hdGNoZXNbMl1cbiAgICAgICAgdmFyIGVuZFN0ciA9IG1hdGNoZXNbM11cbiAgICAgICAgdmFyIHN0YXJ0ID0gcGFyc2VJbnQoc3RhcnRTdHIpXG4gICAgICAgIHZhciBlbmQgPSBwYXJzZUludChlbmRTdHIpXG4gICAgICAgIHZhciBpbmNyZW1lbnRhbCA9IDFcbiAgICAgICAgY29uc29sZS5sb2cobWF0Y2hlc1s1XSlcbiAgICAgICAgaWYgKG1hdGNoZXNbNV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluY3JlbWVudGFsID0gcGFyc2VJbnQobWF0Y2hlc1s1XSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpICs9IGluY3JlbWVudGFsKSB7XG5cdFx0XHRcdFx0Ly8gd2l0aCB6ZXJvIHBhZGRpbmdcbiAgICAgICAgICBpZiAoc3RhcnRTdHIubGVuZ3RoID09PSBlbmRTdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICB1cmxzLnB1c2gobWF0Y2hlc1sxXSArIGxwYWQoaS50b1N0cmluZygpLCBzdGFydFN0ci5sZW5ndGgpICsgbWF0Y2hlc1s2XSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJscy5wdXNoKG1hdGNoZXNbMV0gKyBpICsgbWF0Y2hlc1s2XSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybHNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybHMucHVzaChzdGFydFVybClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHVybHNcbiAgfSxcblxuICB1cGRhdGVTZWxlY3RvcjogZnVuY3Rpb24gKHNlbGVjdG9yLCBzZWxlY3RvckRhdGEpIHtcblx0XHQvLyBzZWxlY3RvciBpcyB1bmRlZmluZWQgd2hlbiBjcmVhdGluZyBhIG5ldyBvbmVcbiAgICBpZiAoc2VsZWN0b3IgPT09IHVuZGVmaW5lZCkge1xudmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICAgICAgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3Ioc2VsZWN0b3JEYXRhLCB7JCwgd2luZG93LCBkb2N1bWVudH0pXG4gICAgfVxuXG5cdFx0Ly8gdXBkYXRlIGNoaWxkIHNlbGVjdG9yc1xuICAgIGlmIChzZWxlY3Rvci5pZCAhPT0gdW5kZWZpbmVkICYmIHNlbGVjdG9yLmlkICE9PSBzZWxlY3RvckRhdGEuaWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRTZWxlY3Rvcikge1xuICAgICAgICBjdXJyZW50U2VsZWN0b3IucmVuYW1lUGFyZW50U2VsZWN0b3Ioc2VsZWN0b3IuaWQsIHNlbGVjdG9yRGF0YS5pZClcbiAgICAgIH0pXG5cblx0XHRcdC8vIHVwZGF0ZSBjeWNsaWMgc2VsZWN0b3JcbiAgICAgIHZhciBwb3MgPSBzZWxlY3RvckRhdGEucGFyZW50U2VsZWN0b3JzLmluZGV4T2Yoc2VsZWN0b3IuaWQpXG4gICAgICBpZiAocG9zICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RvckRhdGEucGFyZW50U2VsZWN0b3JzLnNwbGljZShwb3MsIDEsIHNlbGVjdG9yRGF0YS5pZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3Rvci51cGRhdGVEYXRhKHNlbGVjdG9yRGF0YSlcblxuICAgIGlmICh0aGlzLmdldFNlbGVjdG9ySWRzKCkuaW5kZXhPZihzZWxlY3Rvci5pZCkgPT09IC0xKSB7XG4gICAgICB0aGlzLnNlbGVjdG9ycy5wdXNoKHNlbGVjdG9yKVxuICAgIH1cbiAgfSxcbiAgZGVsZXRlU2VsZWN0b3I6IGZ1bmN0aW9uIChzZWxlY3RvclRvRGVsZXRlKSB7XG4gICAgdGhpcy5zZWxlY3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmIChzZWxlY3Rvci5oYXNQYXJlbnRTZWxlY3RvcihzZWxlY3RvclRvRGVsZXRlLmlkKSkge1xuICAgICAgICBzZWxlY3Rvci5yZW1vdmVQYXJlbnRTZWxlY3RvcihzZWxlY3RvclRvRGVsZXRlLmlkKVxuICAgICAgICBpZiAoc2VsZWN0b3IucGFyZW50U2VsZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlU2VsZWN0b3Ioc2VsZWN0b3IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpXG5cbiAgICBmb3IgKHZhciBpIGluIHRoaXMuc2VsZWN0b3JzKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RvcnNbaV0uaWQgPT09IHNlbGVjdG9yVG9EZWxldGUuaWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RvcnMuc3BsaWNlKGksIDEpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9LFxuICBnZXREYXRhVGFibGVJZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9pZC5yZXBsYWNlKC9cXC4vZywgJ18nKVxuICB9LFxuICBleHBvcnRTaXRlbWFwOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNpdGVtYXBPYmogPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMpKVxuICAgIGRlbGV0ZSBzaXRlbWFwT2JqLl9yZXZcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2l0ZW1hcE9iailcbiAgfSxcbiAgaW1wb3J0U2l0ZW1hcDogZnVuY3Rpb24gKHNpdGVtYXBKU09OKSB7XG4gICAgdmFyIHNpdGVtYXBPYmogPSBKU09OLnBhcnNlKHNpdGVtYXBKU09OKVxuICAgIHRoaXMuaW5pdERhdGEoc2l0ZW1hcE9iailcbiAgfSxcblx0Ly8gcmV0dXJuIGEgbGlzdCBvZiBjb2x1bW5zIHRoYW4gY2FuIGJlIGV4cG9ydGVkXG4gIGdldERhdGFDb2x1bW5zOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvbHVtbnMgPSBbXVxuICAgIHRoaXMuc2VsZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdG9yKSB7XG4gICAgICBjb2x1bW5zID0gY29sdW1ucy5jb25jYXQoc2VsZWN0b3IuZ2V0RGF0YUNvbHVtbnMoKSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIGNvbHVtbnNcbiAgfSxcbiAgZ2V0RGF0YUV4cG9ydENzdkJsb2I6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLmdldERhdGFDb2x1bW5zKCksXG4gICAgICBkZWxpbWl0ZXIgPSAnOycsXG4gICAgICBuZXdsaW5lID0gJ1xcbicsXG4gICAgICBjc3ZEYXRhID0gWydcXHVmZWZmJ10gLy8gdXRmLTggYm9tIGNoYXJcblxuXHRcdC8vIGhlYWRlclxuICAgIGNzdkRhdGEucHVzaChjb2x1bW5zLmpvaW4oZGVsaW1pdGVyKSArIG5ld2xpbmUpXG5cblx0XHQvLyBkYXRhXG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgIHZhciByb3dEYXRhID0gW11cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHZhciBjZWxsRGF0YSA9IHJvd1tjb2x1bW5dXG4gICAgICAgIGlmIChjZWxsRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2VsbERhdGEgPSAnJ1xuICAgICAgICB9XHRcdFx0XHRlbHNlIGlmICh0eXBlb2YgY2VsbERhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY2VsbERhdGEgPSBKU09OLnN0cmluZ2lmeShjZWxsRGF0YSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJvd0RhdGEucHVzaCgnXCInICsgY2VsbERhdGEucmVwbGFjZSgvXCIvZywgJ1wiXCInKS50cmltKCkgKyAnXCInKVxuICAgICAgfSlcbiAgICAgIGNzdkRhdGEucHVzaChyb3dEYXRhLmpvaW4oZGVsaW1pdGVyKSArIG5ld2xpbmUpXG4gICAgfSlcblxuICAgIHJldHVybiBuZXcgd2luZG93LkJsb2IoY3N2RGF0YSwge3R5cGU6ICd0ZXh0L2Nzdid9KVxuICB9LFxuICBnZXRTZWxlY3RvckJ5SWQ6IGZ1bmN0aW9uIChzZWxlY3RvcklkKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JzLmdldFNlbGVjdG9yQnlJZChzZWxlY3RvcklkKVxuICB9LFxuXHQvKipcblx0ICogQ3JlYXRlIGZ1bGwgY2xvbmUgb2Ygc2l0ZW1hcFxuXHQgKiBAcmV0dXJucyB7U2l0ZW1hcH1cblx0ICovXG4gIGNsb25lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICQgPSB0aGlzLiRcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgdmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgdmFyIGNsb25lZEpTT04gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMpKVxuICAgIHZhciBzaXRlbWFwID0gbmV3IFNpdGVtYXAoY2xvbmVkSlNPTiwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICAgIHJldHVybiBzaXRlbWFwXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaXRlbWFwXG4iLCJ2YXIgU2l0ZW1hcCA9IHJlcXVpcmUoJy4vU2l0ZW1hcCcpXG5cbnZhciBTdG9yZSA9IGZ1bmN0aW9uIChjb25maWcsIG9wdGlvbnMpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgdGhpcy4kID0gb3B0aW9ucy4kXG50aGlzLmRvY3VtZW50ID0gb3B0aW9ucy5kb2N1bWVudFxudGhpcy53aW5kb3cgPSBvcHRpb25zLndpbmRvd1xuICBpZiAoIXRoaXMuJCkgdGhyb3cgbmV3IEVycm9yKCdqcXVlcnkgcmVxdWlyZWQnKVxuaWYgKCF0aGlzLmRvY3VtZW50KSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGRvY3VtZW50XCIpXG5pZighdGhpcy53aW5kb3cpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB3aW5kb3dcIilcbiAgICAvLyBjb25maWd1cmUgY291Y2hkYlxuICB0aGlzLnNpdGVtYXBEYiA9IG5ldyBQb3VjaERCKHRoaXMuY29uZmlnLnNpdGVtYXBEYilcbn1cbnZhciBTdG9yZVNjcmFwZVJlc3VsdFdyaXRlciA9IGZ1bmN0aW9uIChkYikge1xuICB0aGlzLmRiID0gZGJcbn1cblxuU3RvcmVTY3JhcGVSZXN1bHRXcml0ZXIucHJvdG90eXBlID0ge1xuICB3cml0ZURvY3M6IGZ1bmN0aW9uIChkb2NzLCBjYWxsYmFjaykge1xuICAgIGlmIChkb2NzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY2FsbGJhY2soKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRiLmJ1bGtEb2NzKHtkb2NzOiBkb2NzfSwgZnVuY3Rpb24gKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKGVyciAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB3aGlsZSBwZXJzaXN0aW5nIHNjcmFwZWQgZGF0YSB0byBkYicsIGVycilcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjaygpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5TdG9yZS5wcm90b3R5cGUgPSB7XG5cbiAgc2FuaXRpemVTaXRlbWFwRGF0YURiTmFtZTogZnVuY3Rpb24gKGRiTmFtZSkge1xuICAgIHJldHVybiAnc2l0ZW1hcC1kYXRhLScgKyBkYk5hbWUucmVwbGFjZSgvW15hLXowLTlfXFwkXFwoXFwpXFwrXFwtL10vZ2ksICdfJylcbiAgfSxcbiAgZ2V0U2l0ZW1hcERhdGFEYkxvY2F0aW9uOiBmdW5jdGlvbiAoc2l0ZW1hcElkKSB7XG4gICAgdmFyIGRiTmFtZSA9IHRoaXMuc2FuaXRpemVTaXRlbWFwRGF0YURiTmFtZShzaXRlbWFwSWQpXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRhdGFEYiArIGRiTmFtZVxuICB9LFxuICBnZXRTaXRlbWFwRGF0YURiOiBmdW5jdGlvbiAoc2l0ZW1hcElkKSB7XG4gICAgdmFyIGRiTG9jYXRpb24gPSB0aGlzLmdldFNpdGVtYXBEYXRhRGJMb2NhdGlvbihzaXRlbWFwSWQpXG4gICAgcmV0dXJuIG5ldyBQb3VjaERCKGRiTG9jYXRpb24pXG4gIH0sXG5cblx0LyoqXG5cdCAqIGNyZWF0ZXMgb3IgY2xlYXJzIGEgc2l0ZW1hcCBkYlxuXHQgKiBAcGFyYW0ge3R5cGV9IHNpdGVtYXBJZFxuXHQgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuXHQgKi9cbiAgaW5pdFNpdGVtYXBEYXRhRGI6IGZ1bmN0aW9uIChzaXRlbWFwSWQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGRiTG9jYXRpb24gPSB0aGlzLmdldFNpdGVtYXBEYXRhRGJMb2NhdGlvbihzaXRlbWFwSWQpXG4gICAgdmFyIHN0b3JlID0gdGhpc1xuXG4gICAgUG91Y2hEQi5kZXN0cm95KGRiTG9jYXRpb24sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBkYiA9IHN0b3JlLmdldFNpdGVtYXBEYXRhRGIoc2l0ZW1hcElkKVxuICAgICAgdmFyIGRiV3JpdGVyID0gbmV3IFN0b3JlU2NyYXBlUmVzdWx0V3JpdGVyKGRiKVxuICAgICAgY2FsbGJhY2soZGJXcml0ZXIpXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVTaXRlbWFwOiBmdW5jdGlvbiAoc2l0ZW1hcCwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2l0ZW1hcEpzb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNpdGVtYXApKVxuXG4gICAgaWYgKCFzaXRlbWFwLl9pZCkge1xuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBzYXZlIHNpdGVtYXAgd2l0aG91dCBhbiBpZCcsIHNpdGVtYXApXG4gICAgfVxuXG4gICAgdGhpcy5zaXRlbWFwRGIucHV0KHNpdGVtYXBKc29uLCBmdW5jdGlvbiAoc2l0ZW1hcCwgZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gQFRPRE8gaGFuZGxlIGVyclxuICAgICAgc2l0ZW1hcC5fcmV2ID0gcmVzcG9uc2UucmV2XG4gICAgICBjYWxsYmFjayhzaXRlbWFwKVxuICAgIH0uYmluZCh0aGlzLCBzaXRlbWFwKSlcbiAgfSwgXG4gIHNhdmVTaXRlbWFwOiBmdW5jdGlvbiAoc2l0ZW1hcCwgY2FsbGJhY2spIHtcbiAgICAgICAgLy8gQFRPRE8gcmVtb3ZlXG4gICAgdGhpcy5jcmVhdGVTaXRlbWFwKHNpdGVtYXAsIGNhbGxiYWNrKVxuICB9LFxuICBkZWxldGVTaXRlbWFwOiBmdW5jdGlvbiAoc2l0ZW1hcCwgY2FsbGJhY2spIHtcbiAgICBzaXRlbWFwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzaXRlbWFwKSlcblxuICAgIHRoaXMuc2l0ZW1hcERiLnJlbW92ZShzaXRlbWFwLCBmdW5jdGlvbiAoZXJyLCByZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gQFRPRE8gaGFuZGxlIGVyclxuXG5cdFx0XHQvLyBkZWxldGUgc2l0ZW1hcCBkYXRhIGRiXG4gICAgICB2YXIgZGJMb2NhdGlvbiA9IHRoaXMuZ2V0U2l0ZW1hcERhdGFEYkxvY2F0aW9uKHNpdGVtYXAuX2lkKVxuICAgICAgUG91Y2hEQi5kZXN0cm95KGRiTG9jYXRpb24sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgfSlcbiAgICB9LmJpbmQodGhpcykpXG4gIH0sXG4gIGdldEFsbFNpdGVtYXBzOiBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgJCA9IHRoaXMuJFxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxudmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gICAgdGhpcy5zaXRlbWFwRGIuYWxsRG9jcyh7aW5jbHVkZV9kb2NzOiB0cnVlfSwgZnVuY3Rpb24gKGVyciwgcmVzcG9uc2UpIHtcbiAgICAgIHZhciBzaXRlbWFwcyA9IFtdXG4gICAgICBmb3IgKHZhciBpIGluIHJlc3BvbnNlLnJvd3MpIHtcbiAgICAgICAgdmFyIHNpdGVtYXAgPSByZXNwb25zZS5yb3dzW2ldLmRvY1xuICAgICAgICBpZiAoIWNocm9tZS5leHRlbnNpb24pIHtcbiAgICAgICAgICBzaXRlbWFwID0gbmV3IFNpdGVtYXAoc2l0ZW1hcCwgeyQsIGRvY3VtZW50LCB3aW5kb3d9KVxuICAgICAgICB9XG5cbiAgICAgICAgc2l0ZW1hcHMucHVzaChzaXRlbWFwKVxuICAgICAgfVxuICAgICAgY2FsbGJhY2soc2l0ZW1hcHMpXG4gICAgfSlcbiAgfSxcblxuICBnZXRTaXRlbWFwRGF0YTogZnVuY3Rpb24gKHNpdGVtYXAsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGRiID0gdGhpcy5nZXRTaXRlbWFwRGF0YURiKHNpdGVtYXAuX2lkKVxuICAgIGRiLmFsbERvY3Moe2luY2x1ZGVfZG9jczogdHJ1ZX0sIGZ1bmN0aW9uIChlcnIsIHJlc3BvbnNlKSB7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gW11cbiAgICAgIGZvciAodmFyIGkgaW4gcmVzcG9uc2Uucm93cykge1xuICAgICAgICB2YXIgZG9jID0gcmVzcG9uc2Uucm93c1tpXS5kb2NcbiAgICAgICAgcmVzcG9uc2VEYXRhLnB1c2goZG9jKVxuICAgICAgfVxuICAgICAgY2FsbGJhY2socmVzcG9uc2VEYXRhKVxuICAgIH0pXG4gIH0sXG5cdC8vIEBUT0RPIG1ha2UgdGhpcyBjYWxsIGxpZ2h0ZXJcbiAgc2l0ZW1hcEV4aXN0czogZnVuY3Rpb24gKHNpdGVtYXBJZCwgY2FsbGJhY2spIHtcbiAgICB0aGlzLmdldEFsbFNpdGVtYXBzKGZ1bmN0aW9uIChzaXRlbWFwcykge1xuICAgICAgdmFyIHNpdGVtYXBGb3VuZCA9IGZhbHNlXG4gICAgICBmb3IgKHZhciBpIGluIHNpdGVtYXBzKSB7XG4gICAgICAgIGlmIChzaXRlbWFwc1tpXS5faWQgPT09IHNpdGVtYXBJZCkge1xuICAgICAgICAgIHNpdGVtYXBGb3VuZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FsbGJhY2soc2l0ZW1hcEZvdW5kKVxuICAgIH0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTdG9yZVxuIiwidmFyIENzc1NlbGVjdG9yID0gcmVxdWlyZSgnY3NzLXNlbGVjdG9yJykuQ3NzU2VsZWN0b3Jcbi8vIFRPRE8gZ2V0IHJpZCBvZiBqcXVlcnlcblxuLyoqXG4gKiBPbmx5IEVsZW1lbnRzIHVuaXF1ZSB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgYXJyYXlcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBVbmlxdWVFbGVtZW50TGlzdCAoY2xpY2tFbGVtZW50VW5pcXVlbmVzc1R5cGUsIG9wdGlvbnMpIHtcbiAgdmFyICQgPSBvcHRpb25zLiRcbiAgdmFyIHdpbmRvdyA9IG9wdGlvbnMud2luZG93XG4gIHZhciBkb2N1bWVudCA9IG9wdGlvbnMuZG9jdW1lbnRcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJyQnLCB7XG4gICAgdmFsdWU6ICQsXG4gICAgZW51bWVyYWJsZTogZmFsc2VcbiAgfSlcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd3aW5kb3cnLCB7XG4gICAgdmFsdWU6IHdpbmRvdyxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2RvY3VtZW50Jywge1xuICAgIHZhbHVlOiBkb2N1bWVudCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9KVxuICBpZiAoIXRoaXMuJCkgdGhyb3cgbmV3IEVycm9yKCdqcXVlcnkgcmVxdWlyZWQnKVxuICBpZiAoIXRoaXMuZG9jdW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGRvY3VtZW50XCIpXG4gIH1cbiAgaWYoIXRoaXMud2luZG93KSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHdpbmRvd1wiKVxuICAgIHRoaXMuY2xpY2tFbGVtZW50VW5pcXVlbmVzc1R5cGUgPSBjbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZVxuICAgIHRoaXMuYWRkZWRFbGVtZW50cyA9IHt9XG4gIH1cblxuVW5pcXVlRWxlbWVudExpc3QucHJvdG90eXBlID0gW11cblxuVW5pcXVlRWxlbWVudExpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICB2YXIgJCA9IHRoaXMuJFxudmFyIGRvY3VtZW50ID0gdGhpcy5kb2N1bWVudFxudmFyIHdpbmRvdyA9IHRoaXMud2luZG93XG4gIGlmICh0aGlzLmlzQWRkZWQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICB2YXIgZWxlbWVudFVuaXF1ZUlkID0gdGhpcy5nZXRFbGVtZW50VW5pcXVlSWQoZWxlbWVudClcbiAgICB0aGlzLmFkZGVkRWxlbWVudHNbZWxlbWVudFVuaXF1ZUlkXSA9IHRydWVcbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsICQoZWxlbWVudCkuY2xvbmUodHJ1ZSlbMF0pXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5VbmlxdWVFbGVtZW50TGlzdC5wcm90b3R5cGUuZ2V0RWxlbWVudFVuaXF1ZUlkID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgdmFyICQgPSB0aGlzLiRcbnZhciBkb2N1bWVudCA9IHRoaXMuZG9jdW1lbnRcbnZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1xuICBpZiAodGhpcy5jbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZSA9PT0gJ3VuaXF1ZVRleHQnKSB7XG4gICAgdmFyIGVsZW1lbnRUZXh0ID0gJChlbGVtZW50KS50ZXh0KCkudHJpbSgpXG4gICAgcmV0dXJuIGVsZW1lbnRUZXh0XG4gIH0gZWxzZSBpZiAodGhpcy5jbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZSA9PT0gJ3VuaXF1ZUhUTUxUZXh0Jykge1xuICAgIHZhciBlbGVtZW50SFRNTCA9ICQoXCI8ZGl2IGNsYXNzPSctd2ViLXNjcmFwZXItc2hvdWxkLW5vdC1iZS12aXNpYmxlJz5cIikuYXBwZW5kKCQoZWxlbWVudCkuZXEoMCkuY2xvbmUoKSkuaHRtbCgpXG4gICAgcmV0dXJuIGVsZW1lbnRIVE1MXG4gIH0gZWxzZSBpZiAodGhpcy5jbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZSA9PT0gJ3VuaXF1ZUhUTUwnKSB7XG5cdFx0Ly8gZ2V0IGVsZW1lbnQgd2l0aG91dCB0ZXh0XG4gICAgdmFyICRlbGVtZW50ID0gJChlbGVtZW50KS5lcSgwKS5jbG9uZSgpXG5cbiAgICB2YXIgcmVtb3ZlVGV4dCA9IGZ1bmN0aW9uICgkZWxlbWVudCkge1xuICAgICAgJGVsZW1lbnQuY29udGVudHMoKVxuXHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubm9kZVR5cGUgIT09IDMpIHtcbiAgICByZW1vdmVUZXh0KCQodGhpcykpXG4gIH1cbiAgcmV0dXJuIHRoaXMubm9kZVR5cGUgPT0gMyAvLyBOb2RlLlRFWFRfTk9ERVxufSkucmVtb3ZlKClcbiAgICB9XG4gICAgcmVtb3ZlVGV4dCgkZWxlbWVudClcblxuICAgIHZhciBlbGVtZW50SFRNTCA9ICQoXCI8ZGl2IGNsYXNzPSctd2ViLXNjcmFwZXItc2hvdWxkLW5vdC1iZS12aXNpYmxlJz5cIikuYXBwZW5kKCRlbGVtZW50KS5odG1sKClcbiAgICByZXR1cm4gZWxlbWVudEhUTUxcbiAgfSBlbHNlIGlmICh0aGlzLmNsaWNrRWxlbWVudFVuaXF1ZW5lc3NUeXBlID09PSAndW5pcXVlQ1NTU2VsZWN0b3InKSB7XG4gICAgdmFyIGNzID0gbmV3IENzc1NlbGVjdG9yKHtcbiAgICAgIGVuYWJsZVNtYXJ0VGFibGVTZWxlY3RvcjogZmFsc2UsXG4gICAgICBwYXJlbnQ6ICQoJ2JvZHknKVswXSxcbiAgICAgIGVuYWJsZVJlc3VsdFN0cmlwcGluZzogZmFsc2VcbiAgICB9KVxuICAgIHZhciBDU1NTZWxlY3RvciA9IGNzLmdldENzc1NlbGVjdG9yKFtlbGVtZW50XSlcbiAgICByZXR1cm4gQ1NTU2VsZWN0b3JcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyAnSW52YWxpZCBjbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZSAnICsgdGhpcy5jbGlja0VsZW1lbnRVbmlxdWVuZXNzVHlwZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVW5pcXVlRWxlbWVudExpc3RcblxuVW5pcXVlRWxlbWVudExpc3QucHJvdG90eXBlLmlzQWRkZWQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICB2YXIgZWxlbWVudFVuaXF1ZUlkID0gdGhpcy5nZXRFbGVtZW50VW5pcXVlSWQoZWxlbWVudClcbiAgdmFyIGlzQWRkZWQgPSBlbGVtZW50VW5pcXVlSWQgaW4gdGhpcy5hZGRlZEVsZW1lbnRzXG4gIHJldHVybiBpc0FkZGVkXG59XG4iLCIvLyBCYXNpY2FsbHkgcnVucyBKU0RPTSBpbiBhIHdlYndvcmtlclxuY29uc3Qgd29yayA9IHJlcXVpcmUoJ3dlYndvcmtpZnknKVxuY29uc3QganNkb21Ccm93c2VyTG9hZGVyID0gcmVxdWlyZSgnLi9KU0RPTUJyb3dzZXJMb2FkZXInKVxudmFyIGpxdWVyeURlZmVycmVkID0gcmVxdWlyZSgnanF1ZXJ5LWRlZmVycmVkJylcbnZhciB3aGVuQ2FsbFNlcXVlbnRpYWxseSA9IHJlcXVpcmUoJy4uL2Fzc2V0cy9qcXVlcnkud2hlbmNhbGxzZXF1ZW50aWFsbHknKVxuXG5jb25zdCBXZWJKU0RPTUJyb3dzZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB0aGlzLnBhZ2VMb2FkRGVsYXkgPSBvcHRpb25zLnBhZ2VMb2FkRGVsYXlcbiAgY29uc3QgcHJvbWlzZXMgPSB7fVxuICB0aGlzLnByb21pc2VzID0gcHJvbWlzZXNcblxuICB0aGlzLndvcmtlciA9IHdvcmsoanNkb21Ccm93c2VyTG9hZGVyKVxuXG4gIHRoaXMud29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXYpIHtcbiAgICBjb25zdCBkYXRhID0gZXYuZGF0YVxuICAgIGlmICghZGF0YS5VVUlEKSB7XG4gICAgICByZXR1cm4gY29uc29sZS5lcnJvcihkYXRhLmVycilcbiAgICB9XG4gICAgaWYgKGRhdGEuVVVJRCAmJiAhcHJvbWlzZXNbZGF0YS5VVUlEXSkge1xuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ01pc3NpbmcgVVVJRCcsIGRhdGEuVVVJRClcbiAgICB9XG4gICAgaWYgKGRhdGEuZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGRhdGEuZXJyKVxuICAgICAgcHJvbWlzZXNbZGF0YS5VVUlEXS5yZWplY3QobmV3IEVycm9yKGRhdGEuZXJyKSlcbiAgICAgIGRlbGV0ZSBwcm9taXNlc1tkYXRhLlVVSURdXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcHJvbWlzZXNbZGF0YS5VVUlEXS5yZXNvbHZlKGRhdGEuaW5mbylcbiAgICBkZWxldGUgcHJvbWlzZXNbZGF0YS5VVUlEXVxuICB9KVxuICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgdG9waWM6ICdpbml0JyxcbiAgICBVVUlEOiAnaW5pdCcsXG4gICAgb3B0aW9uc1xuICB9KVxuICBwcm9taXNlcy5pbml0ID0ge1xuICAgIHJlc29sdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdzdWNjZXNzZnVsbHkgY3JlYXRlZCcpXG4gICAgfSxcbiAgICByZWplY3Q6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgfVxufVxuXG5XZWJKU0RPTUJyb3dzZXIucHJvdG90eXBlID0ge1xuICBsb2FkVXJsOiBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IFVVSUQgPSBwYXJzZUludChNYXRoLnJhbmRvbSgpICogMTAwMDAwMCkudG9TdHJpbmcoKVxuICAgIGxldCByZXMsIHJlalxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICByZXMgPSByZXNvbHZlXG4gICAgICByZWogPSByZWplY3RcbiAgICB9KVxuICAgIHRoaXMucHJvbWlzZXNbVVVJRF0gPSB7cmVzb2x2ZTogcmVzLCByZWplY3Q6IHJlan1cbiAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICB0b3BpYzogJ2xvYWRVcmwnLFxuICAgICAgdXJsLFxuICAgICAgVVVJRFxuICAgIH0pXG4gICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgfSwgZnVuY3Rpb24gKGVycikge2NhbGxiYWNrKGVycil9KVxuICB9LFxuICBzYXZlSW1hZ2VzOiBmdW5jdGlvbiAocmVjb3JkLCBuYW1pbmdGdW5jdGlvbikge1xuICAgIHZhciBkZWZlcnJlZFJlc3BvbnNlID0ganF1ZXJ5RGVmZXJyZWQuRGVmZXJyZWQoKVxuICAgIHZhciBkZWZlcnJlZEltYWdlU3RvcmVDYWxscyA9IFtdXG4gICAgdmFyIHByZWZpeExlbmd0aCA9ICdfaW1hZ2VCYXNlNjQtJy5sZW5ndGhcbiAgICBmb3IgKHZhciBhdHRyIGluIHJlY29yZCkge1xuICAgICAgaWYgKGF0dHIuc3Vic3RyKDAsIHByZWZpeExlbmd0aCkgPT09ICdfaW1hZ2VCYXNlNjQtJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rvd25sb2FkaW5nIGltYWdlcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpXG4gICAgICB9XG4gICAgfVxuICAgIHdoZW5DYWxsU2VxdWVudGlhbGx5KGRlZmVycmVkSW1hZ2VTdG9yZUNhbGxzKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmVycmVkUmVzcG9uc2UucmVzb2x2ZSgpXG4gICAgfSlcblxuICAgIHJldHVybiBkZWZlcnJlZFJlc3BvbnNlLnByb21pc2UoKVxuICB9LFxuICBmZXRjaERhdGE6IGZ1bmN0aW9uICh1cmwsIHNpdGVtYXAsIHBhcmVudFNlbGVjdG9ySWQsIGNhbGxiYWNrLCBzY29wZSkge1xuICAgIGNvbnN0IFVVSUQgPSBwYXJzZUludChNYXRoLnJhbmRvbSgpICogMTAwMDAwMCkudG9TdHJpbmcoKVxuICAgIGxldCByZXMsIHJlalxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICByZXMgPSByZXNvbHZlXG4gICAgICByZWogPSByZWplY3RcbiAgICB9KVxuICAgIHRoaXMucHJvbWlzZXNbVVVJRF0gPSB7cmVzb2x2ZTogcmVzLCByZWplY3Q6IHJlan1cbiAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICB0b3BpYzogJ2ZldGNoRGF0YScsXG4gICAgICB1cmwsXG4gICAgICBVVUlELFxuICAgICAgc2l0ZW1hcDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzaXRlbWFwKSksXG4gICAgICBwYXJlbnRTZWxlY3RvcklkXG4gICAgfSlcbiAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwoc2NvcGUsIG51bGwsIGluZm8ucmVzdWx0cylcbiAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpXG4gICAgfSlcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zb2xlLmxvZygnY2xvc2luZyB3ZWJqc2RvbSBicm93c2VyJylcbiAgICBpZiAodGhpcy53b3JrZXIpIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpXG4gICAgdGhpcy53b3JrZXIgPSBudWxsXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBXZWJKU0RPTUJyb3dzZXJcbiIsInZhciBqcXVlcnkgPSByZXF1aXJlKCdqcXVlcnktZGVmZXJyZWQnKVxudmFyIEJhY2tncm91bmRTY3JpcHQgPSByZXF1aXJlKCcuL0JhY2tncm91bmRTY3JpcHQnKVxuLyoqXG4gKiBAcGFyYW0gbG9jYXRpb25cdGNvbmZpZ3VyZSBmcm9tIHdoZXJlIHRoZSBjb250ZW50IHNjcmlwdCBpcyBiZWluZyBhY2Nlc3NlZCAoQ29udGVudFNjcmlwdCwgQmFja2dyb3VuZFBhZ2UsIERldlRvb2xzKVxuICogQHJldHVybnMgQmFja2dyb3VuZFNjcmlwdFxuICovXG52YXIgZ2V0QmFja2dyb3VuZFNjcmlwdCA9IGZ1bmN0aW9uIChsb2NhdGlvbikge1xuICAvLyBIYW5kbGUgY2FsbHMgZnJvbSBkaWZmZXJlbnQgcGxhY2VzXG4gIGlmIChsb2NhdGlvbiA9PT0gJ0JhY2tncm91bmRTY3JpcHQnKSB7XG4gICAgcmV0dXJuIEJhY2tncm91bmRTY3JpcHRcbiAgfSBlbHNlIGlmIChsb2NhdGlvbiA9PT0gJ0RldlRvb2xzJyB8fCBsb2NhdGlvbiA9PT0gJ0NvbnRlbnRTY3JpcHQnKSB7XG4gICAgLy8gaWYgY2FsbGVkIHdpdGhpbiBiYWNrZ3JvdW5kIHNjcmlwdCBwcm94eSBjYWxscyB0byBjb250ZW50IHNjcmlwdFxuICAgIHZhciBiYWNrZ3JvdW5kU2NyaXB0ID0ge31cblxuICAgIE9iamVjdC5rZXlzKEJhY2tncm91bmRTY3JpcHQpLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgIGlmICh0eXBlb2YgQmFja2dyb3VuZFNjcmlwdFthdHRyXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBiYWNrZ3JvdW5kU2NyaXB0W2F0dHJdID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICAgICAgICB2YXIgcmVxVG9CYWNrZ3JvdW5kU2NyaXB0ID0ge1xuICAgICAgICAgICAgYmFja2dyb3VuZFNjcmlwdENhbGw6IHRydWUsXG4gICAgICAgICAgICBmbjogYXR0cixcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGVmZXJyZWRSZXNwb25zZSA9IGpxdWVyeS5EZWZlcnJlZCgpXG5cbiAgICAgICAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZShyZXFUb0JhY2tncm91bmRTY3JpcHQsIGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgZGVmZXJyZWRSZXNwb25zZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gZGVmZXJyZWRSZXNwb25zZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYWNrZ3JvdW5kU2NyaXB0W2F0dHJdID0gQmFja2dyb3VuZFNjcmlwdFthdHRyXVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gYmFja2dyb3VuZFNjcmlwdFxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBCYWNrZ3JvdW5kU2NyaXB0IGluaXRpYWxpemF0aW9uIC0gJyArIGxvY2F0aW9uKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QmFja2dyb3VuZFNjcmlwdFxuIiwidmFyIGdldEJhY2tncm91bmRTY3JpcHQgPSByZXF1aXJlKCcuL2dldEJhY2tncm91bmRTY3JpcHQnKVxudmFyIENvbnRlbnRTY3JpcHQgPSByZXF1aXJlKCcuL0NvbnRlbnRTY3JpcHQnKVxuLyoqXG4gKlxuICogQHBhcmFtIGxvY2F0aW9uXHRjb25maWd1cmUgZnJvbSB3aGVyZSB0aGUgY29udGVudCBzY3JpcHQgaXMgYmVpbmcgYWNjZXNzZWQgKENvbnRlbnRTY3JpcHQsIEJhY2tncm91bmRQYWdlLCBEZXZUb29scylcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyBDb250ZW50U2NyaXB0XG4gKi9cbnZhciBnZXRDb250ZW50U2NyaXB0ID0gZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gIHZhciBjb250ZW50U2NyaXB0XG5cbiAgLy8gSGFuZGxlIGNhbGxzIGZyb20gZGlmZmVyZW50IHBsYWNlc1xuICBpZiAobG9jYXRpb24gPT09ICdDb250ZW50U2NyaXB0Jykge1xuICAgIGNvbnRlbnRTY3JpcHQgPSBDb250ZW50U2NyaXB0XG4gICAgY29udGVudFNjcmlwdC5iYWNrZ3JvdW5kU2NyaXB0ID0gZ2V0QmFja2dyb3VuZFNjcmlwdCgnQ29udGVudFNjcmlwdCcpXG4gICAgcmV0dXJuIGNvbnRlbnRTY3JpcHRcbiAgfSBlbHNlIGlmIChsb2NhdGlvbiA9PT0gJ0JhY2tncm91bmRTY3JpcHQnIHx8IGxvY2F0aW9uID09PSAnRGV2VG9vbHMnKSB7XG4gICAgdmFyIGJhY2tncm91bmRTY3JpcHQgPSBnZXRCYWNrZ3JvdW5kU2NyaXB0KGxvY2F0aW9uKVxuXG4gICAgLy8gaWYgY2FsbGVkIHdpdGhpbiBiYWNrZ3JvdW5kIHNjcmlwdCBwcm94eSBjYWxscyB0byBjb250ZW50IHNjcmlwdFxuICAgIGNvbnRlbnRTY3JpcHQgPSB7fVxuICAgIE9iamVjdC5rZXlzKENvbnRlbnRTY3JpcHQpLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgIGlmICh0eXBlb2YgQ29udGVudFNjcmlwdFthdHRyXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb250ZW50U2NyaXB0W2F0dHJdID0gZnVuY3Rpb24gKHJlcXVlc3QpIHtcbiAgICAgICAgICB2YXIgcmVxVG9Db250ZW50U2NyaXB0ID0ge1xuICAgICAgICAgICAgY29udGVudFNjcmlwdENhbGw6IHRydWUsXG4gICAgICAgICAgICBmbjogYXR0cixcbiAgICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYmFja2dyb3VuZFNjcmlwdC5leGVjdXRlQ29udGVudFNjcmlwdChyZXFUb0NvbnRlbnRTY3JpcHQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRlbnRTY3JpcHRbYXR0cl0gPSBDb250ZW50U2NyaXB0W2F0dHJdXG4gICAgICB9XG4gICAgfSlcbiAgICBjb250ZW50U2NyaXB0LmJhY2tncm91bmRTY3JpcHQgPSBiYWNrZ3JvdW5kU2NyaXB0XG4gICAgcmV0dXJuIGNvbnRlbnRTY3JpcHRcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgQ29udGVudFNjcmlwdCBpbml0aWFsaXphdGlvbiAtICcgKyBsb2NhdGlvbilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldENvbnRlbnRTY3JpcHRcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGF0b2IgPSByZXF1aXJlKCcuL2xpYi9hdG9iJyk7XG52YXIgYnRvYSA9IHJlcXVpcmUoJy4vbGliL2J0b2EnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGF0b2I6IGF0b2IsXG4gIGJ0b2E6IGJ0b2Fcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgYXRvYigpIGFjY29yZGluZyB0byB0aGUgSFRNTCBzcGVjLCBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mXG4gKiB0aHJvd2luZyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgd2UgcmV0dXJuIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGF0b2IoaW5wdXQpIHtcbiAgLy8gV2ViSURMIHJlcXVpcmVzIERPTVN0cmluZ3MgdG8ganVzdCBiZSBjb252ZXJ0ZWQgdXNpbmcgRUNNQVNjcmlwdFxuICAvLyBUb1N0cmluZywgd2hpY2ggaW4gb3VyIGNhc2UgYW1vdW50cyB0byBjYWxsaW5nIFN0cmluZygpLlxuICBpbnB1dCA9IFN0cmluZyhpbnB1dCk7XG4gIC8vIFwiUmVtb3ZlIGFsbCBzcGFjZSBjaGFyYWN0ZXJzIGZyb20gaW5wdXQuXCJcbiAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC9bIFxcdFxcblxcZlxccl0vZywgJycpO1xuICAvLyBcIklmIHRoZSBsZW5ndGggb2YgaW5wdXQgZGl2aWRlcyBieSA0IGxlYXZpbmcgbm8gcmVtYWluZGVyLCB0aGVuOiBpZlxuICAvLyBpbnB1dCBlbmRzIHdpdGggb25lIG9yIHR3byBVKzAwM0QgRVFVQUxTIFNJR04gKD0pIGNoYXJhY3RlcnMsIHJlbW92ZVxuICAvLyB0aGVtIGZyb20gaW5wdXQuXCJcbiAgaWYgKGlucHV0Lmxlbmd0aCAlIDQgPT0gMCAmJiAvPT0/JC8udGVzdChpbnB1dCkpIHtcbiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XG4gIH1cbiAgLy8gXCJJZiB0aGUgbGVuZ3RoIG9mIGlucHV0IGRpdmlkZXMgYnkgNCBsZWF2aW5nIGEgcmVtYWluZGVyIG9mIDEsIHRocm93IGFuXG4gIC8vIElOVkFMSURfQ0hBUkFDVEVSX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlwiXG4gIC8vXG4gIC8vIFwiSWYgaW5wdXQgY29udGFpbnMgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgaW4gdGhlIGZvbGxvd2luZyBsaXN0IG9mXG4gIC8vIGNoYXJhY3RlcnMgYW5kIGNoYXJhY3RlciByYW5nZXMsIHRocm93IGFuIElOVkFMSURfQ0hBUkFDVEVSX0VSUlxuICAvLyBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzOlxuICAvL1xuICAvLyBVKzAwMkIgUExVUyBTSUdOICgrKVxuICAvLyBVKzAwMkYgU09MSURVUyAoLylcbiAgLy8gVSswMDMwIERJR0lUIFpFUk8gKDApIHRvIFUrMDAzOSBESUdJVCBOSU5FICg5KVxuICAvLyBVKzAwNDEgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSB0byBVKzAwNUEgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWlxuICAvLyBVKzAwNjEgTEFUSU4gU01BTEwgTEVUVEVSIEEgdG8gVSswMDdBIExBVElOIFNNQUxMIExFVFRFUiBaXCJcbiAgaWYgKGlucHV0Lmxlbmd0aCAlIDQgPT0gMSB8fCAhL15bKy8wLTlBLVphLXpdKiQvLnRlc3QoaW5wdXQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gXCJMZXQgb3V0cHV0IGJlIGEgc3RyaW5nLCBpbml0aWFsbHkgZW1wdHkuXCJcbiAgdmFyIG91dHB1dCA9ICcnO1xuICAvLyBcIkxldCBidWZmZXIgYmUgYSBidWZmZXIgdGhhdCBjYW4gaGF2ZSBiaXRzIGFwcGVuZGVkIHRvIGl0LCBpbml0aWFsbHlcbiAgLy8gZW1wdHkuXCJcbiAgLy9cbiAgLy8gV2UgYXBwZW5kIGJpdHMgdmlhIGxlZnQtc2hpZnQgYW5kIG9yLiAgYWNjdW11bGF0ZWRCaXRzIGlzIHVzZWQgdG8gdHJhY2tcbiAgLy8gd2hlbiB3ZSd2ZSBnb3R0ZW4gdG8gMjQgYml0cy5cbiAgdmFyIGJ1ZmZlciA9IDA7XG4gIHZhciBhY2N1bXVsYXRlZEJpdHMgPSAwO1xuICAvLyBcIldoaWxlIHBvc2l0aW9uIGRvZXMgbm90IHBvaW50IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgcnVuIHRoZXNlXG4gIC8vIHN1YnN0ZXBzOlwiXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBcIkZpbmQgdGhlIGNoYXJhY3RlciBwb2ludGVkIHRvIGJ5IHBvc2l0aW9uIGluIHRoZSBmaXJzdCBjb2x1bW4gb2ZcbiAgICAvLyB0aGUgZm9sbG93aW5nIHRhYmxlLiBMZXQgbiBiZSB0aGUgbnVtYmVyIGdpdmVuIGluIHRoZSBzZWNvbmQgY2VsbCBvZlxuICAgIC8vIHRoZSBzYW1lIHJvdy5cIlxuICAgIC8vXG4gICAgLy8gXCJBcHBlbmQgdG8gYnVmZmVyIHRoZSBzaXggYml0cyBjb3JyZXNwb25kaW5nIHRvIG51bWJlciwgbW9zdFxuICAgIC8vIHNpZ25pZmljYW50IGJpdCBmaXJzdC5cIlxuICAgIC8vXG4gICAgLy8gYXRvYkxvb2t1cCgpIGltcGxlbWVudHMgdGhlIHRhYmxlIGZyb20gdGhlIHNwZWMuXG4gICAgYnVmZmVyIDw8PSA2O1xuICAgIGJ1ZmZlciB8PSBhdG9iTG9va3VwKGlucHV0W2ldKTtcbiAgICAvLyBcIklmIGJ1ZmZlciBoYXMgYWNjdW11bGF0ZWQgMjQgYml0cywgaW50ZXJwcmV0IHRoZW0gYXMgdGhyZWUgOC1iaXRcbiAgICAvLyBiaWctZW5kaWFuIG51bWJlcnMuIEFwcGVuZCB0aGUgdGhyZWUgY2hhcmFjdGVycyB3aXRoIGNvZGUgcG9pbnRzXG4gICAgLy8gZXF1YWwgdG8gdGhvc2UgbnVtYmVycyB0byBvdXRwdXQsIGluIHRoZSBzYW1lIG9yZGVyLCBhbmQgdGhlbiBlbXB0eVxuICAgIC8vIGJ1ZmZlci5cIlxuICAgIGFjY3VtdWxhdGVkQml0cyArPSA2O1xuICAgIGlmIChhY2N1bXVsYXRlZEJpdHMgPT0gMjQpIHtcbiAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChidWZmZXIgJiAweGZmMDAwMCkgPj4gMTYpO1xuICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKGJ1ZmZlciAmIDB4ZmYwMCkgPj4gOCk7XG4gICAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXIgJiAweGZmKTtcbiAgICAgIGJ1ZmZlciA9IGFjY3VtdWxhdGVkQml0cyA9IDA7XG4gICAgfVxuICAgIC8vIFwiQWR2YW5jZSBwb3NpdGlvbiBieSBvbmUgY2hhcmFjdGVyLlwiXG4gIH1cbiAgLy8gXCJJZiBidWZmZXIgaXMgbm90IGVtcHR5LCBpdCBjb250YWlucyBlaXRoZXIgMTIgb3IgMTggYml0cy4gSWYgaXRcbiAgLy8gY29udGFpbnMgMTIgYml0cywgZGlzY2FyZCB0aGUgbGFzdCBmb3VyIGFuZCBpbnRlcnByZXQgdGhlIHJlbWFpbmluZ1xuICAvLyBlaWdodCBhcyBhbiA4LWJpdCBiaWctZW5kaWFuIG51bWJlci4gSWYgaXQgY29udGFpbnMgMTggYml0cywgZGlzY2FyZCB0aGVcbiAgLy8gbGFzdCB0d28gYW5kIGludGVycHJldCB0aGUgcmVtYWluaW5nIDE2IGFzIHR3byA4LWJpdCBiaWctZW5kaWFuIG51bWJlcnMuXG4gIC8vIEFwcGVuZCB0aGUgb25lIG9yIHR3byBjaGFyYWN0ZXJzIHdpdGggY29kZSBwb2ludHMgZXF1YWwgdG8gdGhvc2Ugb25lIG9yXG4gIC8vIHR3byBudW1iZXJzIHRvIG91dHB1dCwgaW4gdGhlIHNhbWUgb3JkZXIuXCJcbiAgaWYgKGFjY3VtdWxhdGVkQml0cyA9PSAxMikge1xuICAgIGJ1ZmZlciA+Pj0gNDtcbiAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXIpO1xuICB9IGVsc2UgaWYgKGFjY3VtdWxhdGVkQml0cyA9PSAxOCkge1xuICAgIGJ1ZmZlciA+Pj0gMjtcbiAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYnVmZmVyICYgMHhmZjAwKSA+PiA4KTtcbiAgICBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXIgJiAweGZmKTtcbiAgfVxuICAvLyBcIlJldHVybiBvdXRwdXQuXCJcbiAgcmV0dXJuIG91dHB1dDtcbn1cbi8qKlxuICogQSBsb29rdXAgdGFibGUgZm9yIGF0b2IoKSwgd2hpY2ggY29udmVydHMgYW4gQVNDSUkgY2hhcmFjdGVyIHRvIHRoZVxuICogY29ycmVzcG9uZGluZyBzaXgtYml0IG51bWJlci5cbiAqL1xuZnVuY3Rpb24gYXRvYkxvb2t1cChjaHIpIHtcbiAgaWYgKC9bQS1aXS8udGVzdChjaHIpKSB7XG4gICAgcmV0dXJuIGNoci5jaGFyQ29kZUF0KDApIC0gJ0EnLmNoYXJDb2RlQXQoMCk7XG4gIH1cbiAgaWYgKC9bYS16XS8udGVzdChjaHIpKSB7XG4gICAgcmV0dXJuIGNoci5jaGFyQ29kZUF0KDApIC0gJ2EnLmNoYXJDb2RlQXQoMCkgKyAyNjtcbiAgfVxuICBpZiAoL1swLTldLy50ZXN0KGNocikpIHtcbiAgICByZXR1cm4gY2hyLmNoYXJDb2RlQXQoMCkgLSAnMCcuY2hhckNvZGVBdCgwKSArIDUyO1xuICB9XG4gIGlmIChjaHIgPT0gJysnKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG4gIGlmIChjaHIgPT0gJy8nKSB7XG4gICAgcmV0dXJuIDYzO1xuICB9XG4gIC8vIFRocm93IGV4Y2VwdGlvbjsgc2hvdWxkIG5vdCBiZSBoaXQgaW4gdGVzdHNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhdG9iO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIGJ0b2EoKSBhcyBkZWZpbmVkIGJ5IHRoZSBIVE1MNSBzcGVjLCB3aGljaCBtb3N0bHkganVzdCByZWZlcmVuY2VzIFJGQzQ2NDguXG4gKi9cbmZ1bmN0aW9uIGJ0b2Eocykge1xuICB2YXIgaTtcbiAgLy8gU3RyaW5nIGNvbnZlcnNpb24gYXMgcmVxdWlyZWQgYnkgV2ViSURMLlxuICBzID0gU3RyaW5nKHMpO1xuICAvLyBcIlRoZSBidG9hKCkgbWV0aG9kIG11c3QgdGhyb3cgYW4gSU5WQUxJRF9DSEFSQUNURVJfRVJSIGV4Y2VwdGlvbiBpZiB0aGVcbiAgLy8gbWV0aG9kJ3MgZmlyc3QgYXJndW1lbnQgY29udGFpbnMgYW55IGNoYXJhY3RlciB3aG9zZSBjb2RlIHBvaW50IGlzXG4gIC8vIGdyZWF0ZXIgdGhhbiBVKzAwRkYuXCJcbiAgZm9yIChpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocy5jaGFyQ29kZUF0KGkpID4gMjU1KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgdmFyIG91dCA9ICcnO1xuICBmb3IgKGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkgKz0gMykge1xuICAgIHZhciBncm91cHNPZlNpeCA9IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIGdyb3Vwc09mU2l4WzBdID0gcy5jaGFyQ29kZUF0KGkpID4+IDI7XG4gICAgZ3JvdXBzT2ZTaXhbMV0gPSAocy5jaGFyQ29kZUF0KGkpICYgMHgwMykgPDwgNDtcbiAgICBpZiAocy5sZW5ndGggPiBpICsgMSkge1xuICAgICAgZ3JvdXBzT2ZTaXhbMV0gfD0gcy5jaGFyQ29kZUF0KGkgKyAxKSA+PiA0O1xuICAgICAgZ3JvdXBzT2ZTaXhbMl0gPSAocy5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4MGYpIDw8IDI7XG4gICAgfVxuICAgIGlmIChzLmxlbmd0aCA+IGkgKyAyKSB7XG4gICAgICBncm91cHNPZlNpeFsyXSB8PSBzLmNoYXJDb2RlQXQoaSArIDIpID4+IDY7XG4gICAgICBncm91cHNPZlNpeFszXSA9IHMuY2hhckNvZGVBdChpICsgMikgJiAweDNmO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3Vwc09mU2l4Lmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAodHlwZW9mIGdyb3Vwc09mU2l4W2pdID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG91dCArPSAnPSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gYnRvYUxvb2t1cChncm91cHNPZlNpeFtqXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogTG9va3VwIHRhYmxlIGZvciBidG9hKCksIHdoaWNoIGNvbnZlcnRzIGEgc2l4LWJpdCBudW1iZXIgaW50byB0aGVcbiAqIGNvcnJlc3BvbmRpbmcgQVNDSUkgY2hhcmFjdGVyLlxuICovXG5mdW5jdGlvbiBidG9hTG9va3VwKGlkeCkge1xuICBpZiAoaWR4IDwgMjYpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShpZHggKyAnQScuY2hhckNvZGVBdCgwKSk7XG4gIH1cbiAgaWYgKGlkeCA8IDUyKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoaWR4IC0gMjYgKyAnYScuY2hhckNvZGVBdCgwKSk7XG4gIH1cbiAgaWYgKGlkeCA8IDYyKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoaWR4IC0gNTIgKyAnMCcuY2hhckNvZGVBdCgwKSk7XG4gIH1cbiAgaWYgKGlkeCA9PSA2Mikge1xuICAgIHJldHVybiAnKyc7XG4gIH1cbiAgaWYgKGlkeCA9PSA2Mykge1xuICAgIHJldHVybiAnLyc7XG4gIH1cbiAgLy8gVGhyb3cgSU5WQUxJRF9DSEFSQUNURVJfRVJSIGV4Y2VwdGlvbiBoZXJlIC0tIHdvbid0IGJlIGhpdCBpbiB0aGUgdGVzdHMuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnRvYTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFjb3JuID0gcmVxdWlyZSgnYWNvcm4nKTtcbnZhciB3YWxrID0gcmVxdWlyZSgnYWNvcm4vZGlzdC93YWxrJyk7XG5cbmZ1bmN0aW9uIGlzU2NvcGUobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnRnVuY3Rpb25FeHByZXNzaW9uJyB8fCBub2RlLnR5cGUgPT09ICdGdW5jdGlvbkRlY2xhcmF0aW9uJyB8fCBub2RlLnR5cGUgPT09ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicgfHwgbm9kZS50eXBlID09PSAnUHJvZ3JhbSc7XG59XG5mdW5jdGlvbiBpc0Jsb2NrU2NvcGUobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnIHx8IGlzU2NvcGUobm9kZSk7XG59XG5cbmZ1bmN0aW9uIGRlY2xhcmVzQXJndW1lbnRzKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRXhwcmVzc2lvbicgfHwgbm9kZS50eXBlID09PSAnRnVuY3Rpb25EZWNsYXJhdGlvbic7XG59XG5cbmZ1bmN0aW9uIGRlY2xhcmVzVGhpcyhub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdGdW5jdGlvbkV4cHJlc3Npb24nIHx8IG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nO1xufVxuXG5mdW5jdGlvbiByZWFsbHlQYXJzZShzb3VyY2UpIHtcbiAgcmV0dXJuIGFjb3JuLnBhcnNlKHNvdXJjZSwge1xuICAgIGFsbG93UmV0dXJuT3V0c2lkZUZ1bmN0aW9uOiB0cnVlLFxuICAgIGFsbG93SW1wb3J0RXhwb3J0RXZlcnl3aGVyZTogdHJ1ZSxcbiAgICBhbGxvd0hhc2hCYW5nOiB0cnVlXG4gIH0pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBmaW5kR2xvYmFscztcbm1vZHVsZS5leHBvcnRzLnBhcnNlID0gcmVhbGx5UGFyc2U7XG5mdW5jdGlvbiBmaW5kR2xvYmFscyhzb3VyY2UpIHtcbiAgdmFyIGdsb2JhbHMgPSBbXTtcbiAgdmFyIGFzdDtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2VcbiAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgYXN0ID0gcmVhbGx5UGFyc2Uoc291cmNlKTtcbiAgfSBlbHNlIHtcbiAgICBhc3QgPSBzb3VyY2U7XG4gIH1cbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmICghKGFzdCAmJiB0eXBlb2YgYXN0ID09PSAnb2JqZWN0JyAmJiBhc3QudHlwZSA9PT0gJ1Byb2dyYW0nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NvdXJjZSBtdXN0IGJlIGVpdGhlciBhIHN0cmluZyBvZiBKYXZhU2NyaXB0IG9yIGFuIGFjb3JuIEFTVCcpO1xuICB9XG4gIHZhciBkZWNsYXJlRnVuY3Rpb24gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBmbiA9IG5vZGU7XG4gICAgZm4ubG9jYWxzID0gZm4ubG9jYWxzIHx8IHt9O1xuICAgIG5vZGUucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIGRlY2xhcmVQYXR0ZXJuKG5vZGUsIGZuKTtcbiAgICB9KTtcbiAgICBpZiAobm9kZS5pZCkge1xuICAgICAgZm4ubG9jYWxzW25vZGUuaWQubmFtZV0gPSB0cnVlO1xuICAgIH1cbiAgfVxuICB2YXIgZGVjbGFyZVBhdHRlcm4gPSBmdW5jdGlvbiAobm9kZSwgcGFyZW50KSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ0lkZW50aWZpZXInOlxuICAgICAgICBwYXJlbnQubG9jYWxzW25vZGUubmFtZV0gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ09iamVjdFBhdHRlcm4nOlxuICAgICAgICBub2RlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIGRlY2xhcmVQYXR0ZXJuKG5vZGUudmFsdWUsIHBhcmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0FycmF5UGF0dGVybic6XG4gICAgICAgIG5vZGUuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIGlmIChub2RlKSBkZWNsYXJlUGF0dGVybihub2RlLCBwYXJlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdSZXN0RWxlbWVudCc6XG4gICAgICAgIGRlY2xhcmVQYXR0ZXJuKG5vZGUuYXJndW1lbnQsIHBhcmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXNzaWdubWVudFBhdHRlcm4nOlxuICAgICAgICBkZWNsYXJlUGF0dGVybihub2RlLmxlZnQsIHBhcmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIHBhdHRlcm4gdHlwZTogJyArIG5vZGUudHlwZSk7XG4gICAgfVxuICB9XG4gIHZhciBkZWNsYXJlTW9kdWxlU3BlY2lmaWVyID0gZnVuY3Rpb24gKG5vZGUsIHBhcmVudHMpIHtcbiAgICBhc3QubG9jYWxzID0gYXN0LmxvY2FscyB8fCB7fTtcbiAgICBhc3QubG9jYWxzW25vZGUubG9jYWwubmFtZV0gPSB0cnVlO1xuICB9XG4gIHdhbGsuYW5jZXN0b3IoYXN0LCB7XG4gICAgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nOiBmdW5jdGlvbiAobm9kZSwgcGFyZW50cykge1xuICAgICAgdmFyIHBhcmVudCA9IG51bGw7XG4gICAgICBmb3IgKHZhciBpID0gcGFyZW50cy5sZW5ndGggLSAxOyBpID49IDAgJiYgcGFyZW50ID09PSBudWxsOyBpLS0pIHtcbiAgICAgICAgaWYgKG5vZGUua2luZCA9PT0gJ3ZhcicgPyBpc1Njb3BlKHBhcmVudHNbaV0pIDogaXNCbG9ja1Njb3BlKHBhcmVudHNbaV0pKSB7XG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50c1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFyZW50LmxvY2FscyA9IHBhcmVudC5sb2NhbHMgfHwge307XG4gICAgICBub2RlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChkZWNsYXJhdGlvbikge1xuICAgICAgICBkZWNsYXJlUGF0dGVybihkZWNsYXJhdGlvbi5pZCwgcGFyZW50KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ0Z1bmN0aW9uRGVjbGFyYXRpb24nOiBmdW5jdGlvbiAobm9kZSwgcGFyZW50cykge1xuICAgICAgdmFyIHBhcmVudCA9IG51bGw7XG4gICAgICBmb3IgKHZhciBpID0gcGFyZW50cy5sZW5ndGggLSAyOyBpID49IDAgJiYgcGFyZW50ID09PSBudWxsOyBpLS0pIHtcbiAgICAgICAgaWYgKGlzU2NvcGUocGFyZW50c1tpXSkpIHtcbiAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRzW2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwYXJlbnQubG9jYWxzID0gcGFyZW50LmxvY2FscyB8fCB7fTtcbiAgICAgIHBhcmVudC5sb2NhbHNbbm9kZS5pZC5uYW1lXSA9IHRydWU7XG4gICAgICBkZWNsYXJlRnVuY3Rpb24obm9kZSk7XG4gICAgfSxcbiAgICAnRnVuY3Rpb24nOiBkZWNsYXJlRnVuY3Rpb24sXG4gICAgJ0NsYXNzRGVjbGFyYXRpb24nOiBmdW5jdGlvbiAobm9kZSwgcGFyZW50cykge1xuICAgICAgdmFyIHBhcmVudCA9IG51bGw7XG4gICAgICBmb3IgKHZhciBpID0gcGFyZW50cy5sZW5ndGggLSAyOyBpID49IDAgJiYgcGFyZW50ID09PSBudWxsOyBpLS0pIHtcbiAgICAgICAgaWYgKGlzU2NvcGUocGFyZW50c1tpXSkpIHtcbiAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRzW2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwYXJlbnQubG9jYWxzID0gcGFyZW50LmxvY2FscyB8fCB7fTtcbiAgICAgIHBhcmVudC5sb2NhbHNbbm9kZS5pZC5uYW1lXSA9IHRydWU7XG4gICAgfSxcbiAgICAnVHJ5U3RhdGVtZW50JzogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLmhhbmRsZXIgPT09IG51bGwpIHJldHVybjtcbiAgICAgIG5vZGUuaGFuZGxlci5sb2NhbHMgPSBub2RlLmhhbmRsZXIubG9jYWxzIHx8IHt9O1xuICAgICAgbm9kZS5oYW5kbGVyLmxvY2Fsc1tub2RlLmhhbmRsZXIucGFyYW0ubmFtZV0gPSB0cnVlO1xuICAgIH0sXG4gICAgJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInOiBkZWNsYXJlTW9kdWxlU3BlY2lmaWVyLFxuICAgICdJbXBvcnRTcGVjaWZpZXInOiBkZWNsYXJlTW9kdWxlU3BlY2lmaWVyLFxuICAgICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInOiBkZWNsYXJlTW9kdWxlU3BlY2lmaWVyXG4gIH0pO1xuICBmdW5jdGlvbiBpZGVudGlmaWVyKG5vZGUsIHBhcmVudHMpIHtcbiAgICB2YXIgbmFtZSA9IG5vZGUubmFtZTtcbiAgICBpZiAobmFtZSA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChuYW1lID09PSAnYXJndW1lbnRzJyAmJiBkZWNsYXJlc0FyZ3VtZW50cyhwYXJlbnRzW2ldKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50c1tpXS5sb2NhbHMgJiYgbmFtZSBpbiBwYXJlbnRzW2ldLmxvY2Fscykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIG5vZGUucGFyZW50cyA9IHBhcmVudHM7XG4gICAgZ2xvYmFscy5wdXNoKG5vZGUpO1xuICB9XG4gIHdhbGsuYW5jZXN0b3IoYXN0LCB7XG4gICAgJ1ZhcmlhYmxlUGF0dGVybic6IGlkZW50aWZpZXIsXG4gICAgJ0lkZW50aWZpZXInOiBpZGVudGlmaWVyLFxuICAgICdUaGlzRXhwcmVzc2lvbic6IGZ1bmN0aW9uIChub2RlLCBwYXJlbnRzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGRlY2xhcmVzVGhpcyhwYXJlbnRzW2ldKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbm9kZS5wYXJlbnRzID0gcGFyZW50cztcbiAgICAgIGdsb2JhbHMucHVzaChub2RlKTtcbiAgICB9XG4gIH0pO1xuICB2YXIgZ3JvdXBlZEdsb2JhbHMgPSB7fTtcbiAgZ2xvYmFscy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIG5hbWUgPSBub2RlLnR5cGUgPT09ICdUaGlzRXhwcmVzc2lvbicgPyAndGhpcycgOiBub2RlLm5hbWU7XG4gICAgZ3JvdXBlZEdsb2JhbHNbbmFtZV0gPSAoZ3JvdXBlZEdsb2JhbHNbbmFtZV0gfHwgW10pO1xuICAgIGdyb3VwZWRHbG9iYWxzW25hbWVdLnB1c2gobm9kZSk7XG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LmtleXMoZ3JvdXBlZEdsb2JhbHMpLnNvcnQoKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4ge25hbWU6IG5hbWUsIG5vZGVzOiBncm91cGVkR2xvYmFsc1tuYW1lXX07XG4gIH0pO1xufVxuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLmFjb3JuID0gZ2xvYmFsLmFjb3JuIHx8IHt9KSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4vLyBSZXNlcnZlZCB3b3JkIGxpc3RzIGZvciB2YXJpb3VzIGRpYWxlY3RzIG9mIHRoZSBsYW5ndWFnZVxuXG52YXIgcmVzZXJ2ZWRXb3JkcyA9IHtcbiAgMzogXCJhYnN0cmFjdCBib29sZWFuIGJ5dGUgY2hhciBjbGFzcyBkb3VibGUgZW51bSBleHBvcnQgZXh0ZW5kcyBmaW5hbCBmbG9hdCBnb3RvIGltcGxlbWVudHMgaW1wb3J0IGludCBpbnRlcmZhY2UgbG9uZyBuYXRpdmUgcGFja2FnZSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgc2hvcnQgc3RhdGljIHN1cGVyIHN5bmNocm9uaXplZCB0aHJvd3MgdHJhbnNpZW50IHZvbGF0aWxlXCIsXG4gIDU6IFwiY2xhc3MgZW51bSBleHRlbmRzIHN1cGVyIGNvbnN0IGV4cG9ydCBpbXBvcnRcIixcbiAgNjogXCJlbnVtXCIsXG4gIHN0cmljdDogXCJpbXBsZW1lbnRzIGludGVyZmFjZSBsZXQgcGFja2FnZSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgc3RhdGljIHlpZWxkXCIsXG4gIHN0cmljdEJpbmQ6IFwiZXZhbCBhcmd1bWVudHNcIlxufVxuXG4vLyBBbmQgdGhlIGtleXdvcmRzXG5cbnZhciBlY21hNUFuZExlc3NLZXl3b3JkcyA9IFwiYnJlYWsgY2FzZSBjYXRjaCBjb250aW51ZSBkZWJ1Z2dlciBkZWZhdWx0IGRvIGVsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gaWYgcmV0dXJuIHN3aXRjaCB0aHJvdyB0cnkgdmFyIHdoaWxlIHdpdGggbnVsbCB0cnVlIGZhbHNlIGluc3RhbmNlb2YgdHlwZW9mIHZvaWQgZGVsZXRlIG5ldyBpbiB0aGlzXCJcblxudmFyIGtleXdvcmRzID0ge1xuICA1OiBlY21hNUFuZExlc3NLZXl3b3JkcyxcbiAgNjogZWNtYTVBbmRMZXNzS2V5d29yZHMgKyBcIiBjb25zdCBjbGFzcyBleHRlbmRzIGV4cG9ydCBpbXBvcnQgc3VwZXJcIlxufVxuXG4vLyAjIyBDaGFyYWN0ZXIgY2F0ZWdvcmllc1xuXG4vLyBCaWcgdWdseSByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbWF0Y2ggY2hhcmFjdGVycyBpbiB0aGVcbi8vIHdoaXRlc3BhY2UsIGlkZW50aWZpZXIsIGFuZCBpZGVudGlmaWVyLXN0YXJ0IGNhdGVnb3JpZXMuIFRoZXNlXG4vLyBhcmUgb25seSBhcHBsaWVkIHdoZW4gYSBjaGFyYWN0ZXIgaXMgZm91bmQgdG8gYWN0dWFsbHkgaGF2ZSBhXG4vLyBjb2RlIHBvaW50IGFib3ZlIDEyOC5cbi8vIEdlbmVyYXRlZCBieSBgYmluL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXguanNgLlxuXG52YXIgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyA9IFwiXFx4YWFcXHhiNVxceGJhXFx4YzAtXFx4ZDZcXHhkOC1cXHhmNlxceGY4LVxcdTAyYzFcXHUwMmM2LVxcdTAyZDFcXHUwMmUwLVxcdTAyZTRcXHUwMmVjXFx1MDJlZVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3YS1cXHUwMzdkXFx1MDM3ZlxcdTAzODZcXHUwMzg4LVxcdTAzOGFcXHUwMzhjXFx1MDM4ZS1cXHUwM2ExXFx1MDNhMy1cXHUwM2Y1XFx1MDNmNy1cXHUwNDgxXFx1MDQ4YS1cXHUwNTJmXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1ZDAtXFx1MDVlYVxcdTA1ZjAtXFx1MDVmMlxcdTA2MjAtXFx1MDY0YVxcdTA2NmVcXHUwNjZmXFx1MDY3MS1cXHUwNmQzXFx1MDZkNVxcdTA2ZTVcXHUwNmU2XFx1MDZlZVxcdTA2ZWZcXHUwNmZhLVxcdTA2ZmNcXHUwNmZmXFx1MDcxMFxcdTA3MTItXFx1MDcyZlxcdTA3NGQtXFx1MDdhNVxcdTA3YjFcXHUwN2NhLVxcdTA3ZWFcXHUwN2Y0XFx1MDdmNVxcdTA3ZmFcXHUwODAwLVxcdTA4MTVcXHUwODFhXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOGEwLVxcdTA4YjRcXHUwOGI2LVxcdTA4YmRcXHUwOTA0LVxcdTA5MzlcXHUwOTNkXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Y1xcdTA5OGZcXHUwOTkwXFx1MDk5My1cXHUwOWE4XFx1MDlhYS1cXHUwOWIwXFx1MDliMlxcdTA5YjYtXFx1MDliOVxcdTA5YmRcXHUwOWNlXFx1MDlkY1xcdTA5ZGRcXHUwOWRmLVxcdTA5ZTFcXHUwOWYwXFx1MDlmMVxcdTBhMDUtXFx1MGEwYVxcdTBhMGZcXHUwYTEwXFx1MGExMy1cXHUwYTI4XFx1MGEyYS1cXHUwYTMwXFx1MGEzMlxcdTBhMzNcXHUwYTM1XFx1MGEzNlxcdTBhMzhcXHUwYTM5XFx1MGE1OS1cXHUwYTVjXFx1MGE1ZVxcdTBhNzItXFx1MGE3NFxcdTBhODUtXFx1MGE4ZFxcdTBhOGYtXFx1MGE5MVxcdTBhOTMtXFx1MGFhOFxcdTBhYWEtXFx1MGFiMFxcdTBhYjJcXHUwYWIzXFx1MGFiNS1cXHUwYWI5XFx1MGFiZFxcdTBhZDBcXHUwYWUwXFx1MGFlMVxcdTBhZjlcXHUwYjA1LVxcdTBiMGNcXHUwYjBmXFx1MGIxMFxcdTBiMTMtXFx1MGIyOFxcdTBiMmEtXFx1MGIzMFxcdTBiMzJcXHUwYjMzXFx1MGIzNS1cXHUwYjM5XFx1MGIzZFxcdTBiNWNcXHUwYjVkXFx1MGI1Zi1cXHUwYjYxXFx1MGI3MVxcdTBiODNcXHUwYjg1LVxcdTBiOGFcXHUwYjhlLVxcdTBiOTBcXHUwYjkyLVxcdTBiOTVcXHUwYjk5XFx1MGI5YVxcdTBiOWNcXHUwYjllXFx1MGI5ZlxcdTBiYTNcXHUwYmE0XFx1MGJhOC1cXHUwYmFhXFx1MGJhZS1cXHUwYmI5XFx1MGJkMFxcdTBjMDUtXFx1MGMwY1xcdTBjMGUtXFx1MGMxMFxcdTBjMTItXFx1MGMyOFxcdTBjMmEtXFx1MGMzOVxcdTBjM2RcXHUwYzU4LVxcdTBjNWFcXHUwYzYwXFx1MGM2MVxcdTBjODBcXHUwYzg1LVxcdTBjOGNcXHUwYzhlLVxcdTBjOTBcXHUwYzkyLVxcdTBjYThcXHUwY2FhLVxcdTBjYjNcXHUwY2I1LVxcdTBjYjlcXHUwY2JkXFx1MGNkZVxcdTBjZTBcXHUwY2UxXFx1MGNmMVxcdTBjZjJcXHUwZDA1LVxcdTBkMGNcXHUwZDBlLVxcdTBkMTBcXHUwZDEyLVxcdTBkM2FcXHUwZDNkXFx1MGQ0ZVxcdTBkNTQtXFx1MGQ1NlxcdTBkNWYtXFx1MGQ2MVxcdTBkN2EtXFx1MGQ3ZlxcdTBkODUtXFx1MGQ5NlxcdTBkOWEtXFx1MGRiMVxcdTBkYjMtXFx1MGRiYlxcdTBkYmRcXHUwZGMwLVxcdTBkYzZcXHUwZTAxLVxcdTBlMzBcXHUwZTMyXFx1MGUzM1xcdTBlNDAtXFx1MGU0NlxcdTBlODFcXHUwZTgyXFx1MGU4NFxcdTBlODdcXHUwZTg4XFx1MGU4YVxcdTBlOGRcXHUwZTk0LVxcdTBlOTdcXHUwZTk5LVxcdTBlOWZcXHUwZWExLVxcdTBlYTNcXHUwZWE1XFx1MGVhN1xcdTBlYWFcXHUwZWFiXFx1MGVhZC1cXHUwZWIwXFx1MGViMlxcdTBlYjNcXHUwZWJkXFx1MGVjMC1cXHUwZWM0XFx1MGVjNlxcdTBlZGMtXFx1MGVkZlxcdTBmMDBcXHUwZjQwLVxcdTBmNDdcXHUwZjQ5LVxcdTBmNmNcXHUwZjg4LVxcdTBmOGNcXHUxMDAwLVxcdTEwMmFcXHUxMDNmXFx1MTA1MC1cXHUxMDU1XFx1MTA1YS1cXHUxMDVkXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2ZS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4ZVxcdTEwYTAtXFx1MTBjNVxcdTEwYzdcXHUxMGNkXFx1MTBkMC1cXHUxMGZhXFx1MTBmYy1cXHUxMjQ4XFx1MTI0YS1cXHUxMjRkXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNWEtXFx1MTI1ZFxcdTEyNjAtXFx1MTI4OFxcdTEyOGEtXFx1MTI4ZFxcdTEyOTAtXFx1MTJiMFxcdTEyYjItXFx1MTJiNVxcdTEyYjgtXFx1MTJiZVxcdTEyYzBcXHUxMmMyLVxcdTEyYzVcXHUxMmM4LVxcdTEyZDZcXHUxMmQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNWFcXHUxMzgwLVxcdTEzOGZcXHUxM2EwLVxcdTEzZjVcXHUxM2Y4LVxcdTEzZmRcXHUxNDAxLVxcdTE2NmNcXHUxNjZmLVxcdTE2N2ZcXHUxNjgxLVxcdTE2OWFcXHUxNmEwLVxcdTE2ZWFcXHUxNmVlLVxcdTE2ZjhcXHUxNzAwLVxcdTE3MGNcXHUxNzBlLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NmNcXHUxNzZlLVxcdTE3NzBcXHUxNzgwLVxcdTE3YjNcXHUxN2Q3XFx1MTdkY1xcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThhOFxcdTE4YWFcXHUxOGIwLVxcdTE4ZjVcXHUxOTAwLVxcdTE5MWVcXHUxOTUwLVxcdTE5NmRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5YWJcXHUxOWIwLVxcdTE5YzlcXHUxYTAwLVxcdTFhMTZcXHUxYTIwLVxcdTFhNTRcXHUxYWE3XFx1MWIwNS1cXHUxYjMzXFx1MWI0NS1cXHUxYjRiXFx1MWI4My1cXHUxYmEwXFx1MWJhZVxcdTFiYWZcXHUxYmJhLVxcdTFiZTVcXHUxYzAwLVxcdTFjMjNcXHUxYzRkLVxcdTFjNGZcXHUxYzVhLVxcdTFjN2RcXHUxYzgwLVxcdTFjODhcXHUxY2U5LVxcdTFjZWNcXHUxY2VlLVxcdTFjZjFcXHUxY2Y1XFx1MWNmNlxcdTFkMDAtXFx1MWRiZlxcdTFlMDAtXFx1MWYxNVxcdTFmMTgtXFx1MWYxZFxcdTFmMjAtXFx1MWY0NVxcdTFmNDgtXFx1MWY0ZFxcdTFmNTAtXFx1MWY1N1xcdTFmNTlcXHUxZjViXFx1MWY1ZFxcdTFmNWYtXFx1MWY3ZFxcdTFmODAtXFx1MWZiNFxcdTFmYjYtXFx1MWZiY1xcdTFmYmVcXHUxZmMyLVxcdTFmYzRcXHUxZmM2LVxcdTFmY2NcXHUxZmQwLVxcdTFmZDNcXHUxZmQ2LVxcdTFmZGJcXHUxZmUwLVxcdTFmZWNcXHUxZmYyLVxcdTFmZjRcXHUxZmY2LVxcdTFmZmNcXHUyMDcxXFx1MjA3ZlxcdTIwOTAtXFx1MjA5Y1xcdTIxMDJcXHUyMTA3XFx1MjEwYS1cXHUyMTEzXFx1MjExNVxcdTIxMTgtXFx1MjExZFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMmEtXFx1MjEzOVxcdTIxM2MtXFx1MjEzZlxcdTIxNDUtXFx1MjE0OVxcdTIxNGVcXHUyMTYwLVxcdTIxODhcXHUyYzAwLVxcdTJjMmVcXHUyYzMwLVxcdTJjNWVcXHUyYzYwLVxcdTJjZTRcXHUyY2ViLVxcdTJjZWVcXHUyY2YyXFx1MmNmM1xcdTJkMDAtXFx1MmQyNVxcdTJkMjdcXHUyZDJkXFx1MmQzMC1cXHUyZDY3XFx1MmQ2ZlxcdTJkODAtXFx1MmQ5NlxcdTJkYTAtXFx1MmRhNlxcdTJkYTgtXFx1MmRhZVxcdTJkYjAtXFx1MmRiNlxcdTJkYjgtXFx1MmRiZVxcdTJkYzAtXFx1MmRjNlxcdTJkYzgtXFx1MmRjZVxcdTJkZDAtXFx1MmRkNlxcdTJkZDgtXFx1MmRkZVxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzY1xcdTMwNDEtXFx1MzA5NlxcdTMwOWItXFx1MzA5ZlxcdTMwYTEtXFx1MzBmYVxcdTMwZmMtXFx1MzBmZlxcdTMxMDUtXFx1MzEyZFxcdTMxMzEtXFx1MzE4ZVxcdTMxYTAtXFx1MzFiYVxcdTMxZjAtXFx1MzFmZlxcdTM0MDAtXFx1NGRiNVxcdTRlMDAtXFx1OWZkNVxcdWEwMDAtXFx1YTQ4Y1xcdWE0ZDAtXFx1YTRmZFxcdWE1MDAtXFx1YTYwY1xcdWE2MTAtXFx1YTYxZlxcdWE2MmFcXHVhNjJiXFx1YTY0MC1cXHVhNjZlXFx1YTY3Zi1cXHVhNjlkXFx1YTZhMC1cXHVhNmVmXFx1YTcxNy1cXHVhNzFmXFx1YTcyMi1cXHVhNzg4XFx1YTc4Yi1cXHVhN2FlXFx1YTdiMC1cXHVhN2I3XFx1YTdmNy1cXHVhODAxXFx1YTgwMy1cXHVhODA1XFx1YTgwNy1cXHVhODBhXFx1YTgwYy1cXHVhODIyXFx1YTg0MC1cXHVhODczXFx1YTg4Mi1cXHVhOGIzXFx1YThmMi1cXHVhOGY3XFx1YThmYlxcdWE4ZmRcXHVhOTBhLVxcdWE5MjVcXHVhOTMwLVxcdWE5NDZcXHVhOTYwLVxcdWE5N2NcXHVhOTg0LVxcdWE5YjJcXHVhOWNmXFx1YTllMC1cXHVhOWU0XFx1YTllNi1cXHVhOWVmXFx1YTlmYS1cXHVhOWZlXFx1YWEwMC1cXHVhYTI4XFx1YWE0MC1cXHVhYTQyXFx1YWE0NC1cXHVhYTRiXFx1YWE2MC1cXHVhYTc2XFx1YWE3YVxcdWFhN2UtXFx1YWFhZlxcdWFhYjFcXHVhYWI1XFx1YWFiNlxcdWFhYjktXFx1YWFiZFxcdWFhYzBcXHVhYWMyXFx1YWFkYi1cXHVhYWRkXFx1YWFlMC1cXHVhYWVhXFx1YWFmMi1cXHVhYWY0XFx1YWIwMS1cXHVhYjA2XFx1YWIwOS1cXHVhYjBlXFx1YWIxMS1cXHVhYjE2XFx1YWIyMC1cXHVhYjI2XFx1YWIyOC1cXHVhYjJlXFx1YWIzMC1cXHVhYjVhXFx1YWI1Yy1cXHVhYjY1XFx1YWI3MC1cXHVhYmUyXFx1YWMwMC1cXHVkN2EzXFx1ZDdiMC1cXHVkN2M2XFx1ZDdjYi1cXHVkN2ZiXFx1ZjkwMC1cXHVmYTZkXFx1ZmE3MC1cXHVmYWQ5XFx1ZmIwMC1cXHVmYjA2XFx1ZmIxMy1cXHVmYjE3XFx1ZmIxZFxcdWZiMWYtXFx1ZmIyOFxcdWZiMmEtXFx1ZmIzNlxcdWZiMzgtXFx1ZmIzY1xcdWZiM2VcXHVmYjQwXFx1ZmI0MVxcdWZiNDNcXHVmYjQ0XFx1ZmI0Ni1cXHVmYmIxXFx1ZmJkMy1cXHVmZDNkXFx1ZmQ1MC1cXHVmZDhmXFx1ZmQ5Mi1cXHVmZGM3XFx1ZmRmMC1cXHVmZGZiXFx1ZmU3MC1cXHVmZTc0XFx1ZmU3Ni1cXHVmZWZjXFx1ZmYyMS1cXHVmZjNhXFx1ZmY0MS1cXHVmZjVhXFx1ZmY2Ni1cXHVmZmJlXFx1ZmZjMi1cXHVmZmM3XFx1ZmZjYS1cXHVmZmNmXFx1ZmZkMi1cXHVmZmQ3XFx1ZmZkYS1cXHVmZmRjXCJcbnZhciBub25BU0NJSWlkZW50aWZpZXJDaGFycyA9IFwiXFx1MjAwY1xcdTIwMGRcXHhiN1xcdTAzMDAtXFx1MDM2ZlxcdTAzODdcXHUwNDgzLVxcdTA0ODdcXHUwNTkxLVxcdTA1YmRcXHUwNWJmXFx1MDVjMVxcdTA1YzJcXHUwNWM0XFx1MDVjNVxcdTA1YzdcXHUwNjEwLVxcdTA2MWFcXHUwNjRiLVxcdTA2NjlcXHUwNjcwXFx1MDZkNi1cXHUwNmRjXFx1MDZkZi1cXHUwNmU0XFx1MDZlN1xcdTA2ZThcXHUwNmVhLVxcdTA2ZWRcXHUwNmYwLVxcdTA2ZjlcXHUwNzExXFx1MDczMC1cXHUwNzRhXFx1MDdhNi1cXHUwN2IwXFx1MDdjMC1cXHUwN2M5XFx1MDdlYi1cXHUwN2YzXFx1MDgxNi1cXHUwODE5XFx1MDgxYi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJkXFx1MDg1OS1cXHUwODViXFx1MDhkNC1cXHUwOGUxXFx1MDhlMy1cXHUwOTAzXFx1MDkzYS1cXHUwOTNjXFx1MDkzZS1cXHUwOTRmXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTY2LVxcdTA5NmZcXHUwOTgxLVxcdTA5ODNcXHUwOWJjXFx1MDliZS1cXHUwOWM0XFx1MDljN1xcdTA5YzhcXHUwOWNiLVxcdTA5Y2RcXHUwOWQ3XFx1MDllMlxcdTA5ZTNcXHUwOWU2LVxcdTA5ZWZcXHUwYTAxLVxcdTBhMDNcXHUwYTNjXFx1MGEzZS1cXHUwYTQyXFx1MGE0N1xcdTBhNDhcXHUwYTRiLVxcdTBhNGRcXHUwYTUxXFx1MGE2Ni1cXHUwYTcxXFx1MGE3NVxcdTBhODEtXFx1MGE4M1xcdTBhYmNcXHUwYWJlLVxcdTBhYzVcXHUwYWM3LVxcdTBhYzlcXHUwYWNiLVxcdTBhY2RcXHUwYWUyXFx1MGFlM1xcdTBhZTYtXFx1MGFlZlxcdTBiMDEtXFx1MGIwM1xcdTBiM2NcXHUwYjNlLVxcdTBiNDRcXHUwYjQ3XFx1MGI0OFxcdTBiNGItXFx1MGI0ZFxcdTBiNTZcXHUwYjU3XFx1MGI2MlxcdTBiNjNcXHUwYjY2LVxcdTBiNmZcXHUwYjgyXFx1MGJiZS1cXHUwYmMyXFx1MGJjNi1cXHUwYmM4XFx1MGJjYS1cXHUwYmNkXFx1MGJkN1xcdTBiZTYtXFx1MGJlZlxcdTBjMDAtXFx1MGMwM1xcdTBjM2UtXFx1MGM0NFxcdTBjNDYtXFx1MGM0OFxcdTBjNGEtXFx1MGM0ZFxcdTBjNTVcXHUwYzU2XFx1MGM2MlxcdTBjNjNcXHUwYzY2LVxcdTBjNmZcXHUwYzgxLVxcdTBjODNcXHUwY2JjXFx1MGNiZS1cXHUwY2M0XFx1MGNjNi1cXHUwY2M4XFx1MGNjYS1cXHUwY2NkXFx1MGNkNVxcdTBjZDZcXHUwY2UyXFx1MGNlM1xcdTBjZTYtXFx1MGNlZlxcdTBkMDEtXFx1MGQwM1xcdTBkM2UtXFx1MGQ0NFxcdTBkNDYtXFx1MGQ0OFxcdTBkNGEtXFx1MGQ0ZFxcdTBkNTdcXHUwZDYyXFx1MGQ2M1xcdTBkNjYtXFx1MGQ2ZlxcdTBkODJcXHUwZDgzXFx1MGRjYVxcdTBkY2YtXFx1MGRkNFxcdTBkZDZcXHUwZGQ4LVxcdTBkZGZcXHUwZGU2LVxcdTBkZWZcXHUwZGYyXFx1MGRmM1xcdTBlMzFcXHUwZTM0LVxcdTBlM2FcXHUwZTQ3LVxcdTBlNGVcXHUwZTUwLVxcdTBlNTlcXHUwZWIxXFx1MGViNC1cXHUwZWI5XFx1MGViYlxcdTBlYmNcXHUwZWM4LVxcdTBlY2RcXHUwZWQwLVxcdTBlZDlcXHUwZjE4XFx1MGYxOVxcdTBmMjAtXFx1MGYyOVxcdTBmMzVcXHUwZjM3XFx1MGYzOVxcdTBmM2VcXHUwZjNmXFx1MGY3MS1cXHUwZjg0XFx1MGY4NlxcdTBmODdcXHUwZjhkLVxcdTBmOTdcXHUwZjk5LVxcdTBmYmNcXHUwZmM2XFx1MTAyYi1cXHUxMDNlXFx1MTA0MC1cXHUxMDQ5XFx1MTA1Ni1cXHUxMDU5XFx1MTA1ZS1cXHUxMDYwXFx1MTA2Mi1cXHUxMDY0XFx1MTA2Ny1cXHUxMDZkXFx1MTA3MS1cXHUxMDc0XFx1MTA4Mi1cXHUxMDhkXFx1MTA4Zi1cXHUxMDlkXFx1MTM1ZC1cXHUxMzVmXFx1MTM2OS1cXHUxMzcxXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3YjQtXFx1MTdkM1xcdTE3ZGRcXHUxN2UwLVxcdTE3ZTlcXHUxODBiLVxcdTE4MGRcXHUxODEwLVxcdTE4MTlcXHUxOGE5XFx1MTkyMC1cXHUxOTJiXFx1MTkzMC1cXHUxOTNiXFx1MTk0Ni1cXHUxOTRmXFx1MTlkMC1cXHUxOWRhXFx1MWExNy1cXHUxYTFiXFx1MWE1NS1cXHUxYTVlXFx1MWE2MC1cXHUxYTdjXFx1MWE3Zi1cXHUxYTg5XFx1MWE5MC1cXHUxYTk5XFx1MWFiMC1cXHUxYWJkXFx1MWIwMC1cXHUxYjA0XFx1MWIzNC1cXHUxYjQ0XFx1MWI1MC1cXHUxYjU5XFx1MWI2Yi1cXHUxYjczXFx1MWI4MC1cXHUxYjgyXFx1MWJhMS1cXHUxYmFkXFx1MWJiMC1cXHUxYmI5XFx1MWJlNi1cXHUxYmYzXFx1MWMyNC1cXHUxYzM3XFx1MWM0MC1cXHUxYzQ5XFx1MWM1MC1cXHUxYzU5XFx1MWNkMC1cXHUxY2QyXFx1MWNkNC1cXHUxY2U4XFx1MWNlZFxcdTFjZjItXFx1MWNmNFxcdTFjZjhcXHUxY2Y5XFx1MWRjMC1cXHUxZGY1XFx1MWRmYi1cXHUxZGZmXFx1MjAzZlxcdTIwNDBcXHUyMDU0XFx1MjBkMC1cXHUyMGRjXFx1MjBlMVxcdTIwZTUtXFx1MjBmMFxcdTJjZWYtXFx1MmNmMVxcdTJkN2ZcXHUyZGUwLVxcdTJkZmZcXHUzMDJhLVxcdTMwMmZcXHUzMDk5XFx1MzA5YVxcdWE2MjAtXFx1YTYyOVxcdWE2NmZcXHVhNjc0LVxcdWE2N2RcXHVhNjllXFx1YTY5ZlxcdWE2ZjBcXHVhNmYxXFx1YTgwMlxcdWE4MDZcXHVhODBiXFx1YTgyMy1cXHVhODI3XFx1YTg4MFxcdWE4ODFcXHVhOGI0LVxcdWE4YzVcXHVhOGQwLVxcdWE4ZDlcXHVhOGUwLVxcdWE4ZjFcXHVhOTAwLVxcdWE5MDlcXHVhOTI2LVxcdWE5MmRcXHVhOTQ3LVxcdWE5NTNcXHVhOTgwLVxcdWE5ODNcXHVhOWIzLVxcdWE5YzBcXHVhOWQwLVxcdWE5ZDlcXHVhOWU1XFx1YTlmMC1cXHVhOWY5XFx1YWEyOS1cXHVhYTM2XFx1YWE0M1xcdWFhNGNcXHVhYTRkXFx1YWE1MC1cXHVhYTU5XFx1YWE3Yi1cXHVhYTdkXFx1YWFiMFxcdWFhYjItXFx1YWFiNFxcdWFhYjdcXHVhYWI4XFx1YWFiZVxcdWFhYmZcXHVhYWMxXFx1YWFlYi1cXHVhYWVmXFx1YWFmNVxcdWFhZjZcXHVhYmUzLVxcdWFiZWFcXHVhYmVjXFx1YWJlZFxcdWFiZjAtXFx1YWJmOVxcdWZiMWVcXHVmZTAwLVxcdWZlMGZcXHVmZTIwLVxcdWZlMmZcXHVmZTMzXFx1ZmUzNFxcdWZlNGQtXFx1ZmU0ZlxcdWZmMTAtXFx1ZmYxOVxcdWZmM2ZcIlxuXG52YXIgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnQgPSBuZXcgUmVnRXhwKFwiW1wiICsgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyArIFwiXVwiKVxudmFyIG5vbkFTQ0lJaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoXCJbXCIgKyBub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzICsgbm9uQVNDSUlpZGVudGlmaWVyQ2hhcnMgKyBcIl1cIilcblxubm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyA9IG5vbkFTQ0lJaWRlbnRpZmllckNoYXJzID0gbnVsbFxuXG4vLyBUaGVzZSBhcmUgYSBydW4tbGVuZ3RoIGFuZCBvZmZzZXQgZW5jb2RlZCByZXByZXNlbnRhdGlvbiBvZiB0aGVcbi8vID4weGZmZmYgY29kZSBwb2ludHMgdGhhdCBhcmUgYSB2YWxpZCBwYXJ0IG9mIGlkZW50aWZpZXJzLiBUaGVcbi8vIG9mZnNldCBzdGFydHMgYXQgMHgxMDAwMCwgYW5kIGVhY2ggcGFpciBvZiBudW1iZXJzIHJlcHJlc2VudHMgYW5cbi8vIG9mZnNldCB0byB0aGUgbmV4dCByYW5nZSwgYW5kIHRoZW4gYSBzaXplIG9mIHRoZSByYW5nZS4gVGhleSB3ZXJlXG4vLyBnZW5lcmF0ZWQgYnkgYmluL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXguanNcbnZhciBhc3RyYWxJZGVudGlmaWVyU3RhcnRDb2RlcyA9IFswLDExLDIsMjUsMiwxOCwyLDEsMiwxNCwzLDEzLDM1LDEyMiw3MCw1MiwyNjgsMjgsNCw0OCw0OCwzMSwxNywyNiw2LDM3LDExLDI5LDMsMzUsNSw3LDIsNCw0MywxNTcsMTksMzUsNSwzNSw1LDM5LDksNTEsMTU3LDMxMCwxMCwyMSwxMSw3LDE1Myw1LDMsMCwyLDQzLDIsMSw0LDAsMywyMiwxMSwyMiwxMCwzMCw2NiwxOCwyLDEsMTEsMjEsMTEsMjUsNzEsNTUsNywxLDY1LDAsMTYsMywyLDIsMiwyNiw0NSwyOCw0LDI4LDM2LDcsMiwyNywyOCw1MywxMSwyMSwxMSwxOCwxNCwxNywxMTEsNzIsNTYsNTAsMTQsNTAsNzg1LDUyLDc2LDQ0LDMzLDI0LDI3LDM1LDQyLDM0LDQsMCwxMyw0NywxNSwzLDIyLDAsMiwwLDM2LDE3LDIsMjQsODUsNiwyLDAsMiwzLDIsMTQsMiw5LDgsNDYsMzksNywzLDEsMywyMSwyLDYsMiwxLDIsNCw0LDAsMTksMCwxMyw0LDE1OSw1MiwxOSwzLDU0LDQ3LDIxLDEsMiwwLDE4NSw0Niw0MiwzLDM3LDQ3LDIxLDAsNjAsNDIsODYsMjUsMzkxLDYzLDMyLDAsNDQ5LDU2LDI2NCw4LDIsMzYsMTgsMCw1MCwyOSw4ODEsOTIxLDEwMywxMTAsMTgsMTk1LDI3NDksMTA3MCw0MDUwLDU4Miw4NjM0LDU2OCw4LDMwLDExNCwyOSwxOSw0NywxNywzLDMyLDIwLDYsMTgsODgxLDY4LDEyLDAsNjcsMTIsNjUsMCwzMiw2MTI0LDIwLDc1NCw5NDg2LDEsMzA3MSwxMDYsNiwxMiw0LDgsOCw5LDU5OTEsODQsMiw3MCwyLDEsMywwLDMsMSwzLDMsMiwxMSwyLDAsMiw2LDIsNjQsMiwzLDMsNywyLDYsMiwyNywyLDMsMiw0LDIsMCw0LDYsMiwzMzksMywyNCwyLDI0LDIsMzAsMiwyNCwyLDMwLDIsMjQsMiwzMCwyLDI0LDIsMzAsMiwyNCwyLDcsNDE0OSwxOTYsNjAsNjcsMTIxMywzLDIsMjYsMiwxLDIsMCwzLDAsMiw5LDIsMywyLDAsMiwwLDcsMCw1LDAsMiwwLDIsMCwyLDIsMiwxLDIsMCwzLDAsMiwwLDIsMCwyLDAsMiwwLDIsMSwyLDAsMywzLDIsNiwyLDMsMiwzLDIsMCwyLDksMiwxNiw2LDIsMiw0LDIsMTYsNDQyMSw0MjcxMCw0Miw0MTQ4LDEyLDIyMSwzLDU3NjEsMTA1OTEsNTQxXVxudmFyIGFzdHJhbElkZW50aWZpZXJDb2RlcyA9IFs1MDksMCwyMjcsMCwxNTAsNCwyOTQsOSwxMzY4LDIsMiwxLDYsMyw0MSwyLDUsMCwxNjYsMSwxMzA2LDIsNTQsMTQsMzIsOSwxNiwzLDQ2LDEwLDU0LDksNywyLDM3LDEzLDIsOSw1MiwwLDEzLDIsNDksMTMsMTAsMiw0LDksODMsMTEsNywwLDE2MSwxMSw2LDksNywzLDU3LDAsMiw2LDMsMSwzLDIsMTAsMCwxMSwxLDMsNiw0LDQsMTkzLDE3LDEwLDksODcsMTksMTMsOSwyMTQsNiwzLDgsMjgsMSw4MywxNiwxNiw5LDgyLDEyLDksOSw4NCwxNCw1LDksNDIzLDksODM4LDcsMiw3LDE3LDksNTcsMjEsMiwxMywxOTg4Miw5LDEzNSw0LDYwLDYsMjYsOSwxMDE2LDQ1LDE3LDMsMTk3MjMsMSw1MzE5LDQsNCw1LDksNywzLDYsMzEsMywxNDksMiwxNDE4LDQ5LDUxMyw1NCw1LDQ5LDksMCwxNSwwLDIzLDQsMiwxNCwxMzYxLDYsMiwxNiwzLDYsMiwxLDIsNCwyMjE0LDYsMTEwLDYsNiw5LDc5MjQ4NywyMzldXG5cbi8vIFRoaXMgaGFzIGEgY29tcGxleGl0eSBsaW5lYXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBjb2RlLiBUaGVcbi8vIGFzc3VtcHRpb24gaXMgdGhhdCBsb29raW5nIHVwIGFzdHJhbCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgaXNcbi8vIHJhcmUuXG5mdW5jdGlvbiBpc0luQXN0cmFsU2V0KGNvZGUsIHNldCkge1xuICB2YXIgcG9zID0gMHgxMDAwMFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkgKz0gMikge1xuICAgIHBvcyArPSBzZXRbaV1cbiAgICBpZiAocG9zID4gY29kZSkgcmV0dXJuIGZhbHNlXG4gICAgcG9zICs9IHNldFtpICsgMV1cbiAgICBpZiAocG9zID49IGNvZGUpIHJldHVybiB0cnVlXG4gIH1cbn1cblxuLy8gVGVzdCB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGNvZGUgc3RhcnRzIGFuIGlkZW50aWZpZXIuXG5cbmZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNvZGUsIGFzdHJhbCkge1xuICBpZiAoY29kZSA8IDY1KSByZXR1cm4gY29kZSA9PT0gMzZcbiAgaWYgKGNvZGUgPCA5MSkgcmV0dXJuIHRydWVcbiAgaWYgKGNvZGUgPCA5NykgcmV0dXJuIGNvZGUgPT09IDk1XG4gIGlmIChjb2RlIDwgMTIzKSByZXR1cm4gdHJ1ZVxuICBpZiAoY29kZSA8PSAweGZmZmYpIHJldHVybiBjb2RlID49IDB4YWEgJiYgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpKVxuICBpZiAoYXN0cmFsID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBpc0luQXN0cmFsU2V0KGNvZGUsIGFzdHJhbElkZW50aWZpZXJTdGFydENvZGVzKVxufVxuXG4vLyBUZXN0IHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgcGFydCBvZiBhbiBpZGVudGlmaWVyLlxuXG5mdW5jdGlvbiBpc0lkZW50aWZpZXJDaGFyKGNvZGUsIGFzdHJhbCkge1xuICBpZiAoY29kZSA8IDQ4KSByZXR1cm4gY29kZSA9PT0gMzZcbiAgaWYgKGNvZGUgPCA1OCkgcmV0dXJuIHRydWVcbiAgaWYgKGNvZGUgPCA2NSkgcmV0dXJuIGZhbHNlXG4gIGlmIChjb2RlIDwgOTEpIHJldHVybiB0cnVlXG4gIGlmIChjb2RlIDwgOTcpIHJldHVybiBjb2RlID09PSA5NVxuICBpZiAoY29kZSA8IDEyMykgcmV0dXJuIHRydWVcbiAgaWYgKGNvZGUgPD0gMHhmZmZmKSByZXR1cm4gY29kZSA+PSAweGFhICYmIG5vbkFTQ0lJaWRlbnRpZmllci50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkpXG4gIGlmIChhc3RyYWwgPT09IGZhbHNlKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGlzSW5Bc3RyYWxTZXQoY29kZSwgYXN0cmFsSWRlbnRpZmllclN0YXJ0Q29kZXMpIHx8IGlzSW5Bc3RyYWxTZXQoY29kZSwgYXN0cmFsSWRlbnRpZmllckNvZGVzKVxufVxuXG4vLyAjIyBUb2tlbiB0eXBlc1xuXG4vLyBUaGUgYXNzaWdubWVudCBvZiBmaW5lLWdyYWluZWQsIGluZm9ybWF0aW9uLWNhcnJ5aW5nIHR5cGUgb2JqZWN0c1xuLy8gYWxsb3dzIHRoZSB0b2tlbml6ZXIgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGl0IGhhcyBhYm91dCBhXG4vLyB0b2tlbiBpbiBhIHdheSB0aGF0IGlzIHZlcnkgY2hlYXAgZm9yIHRoZSBwYXJzZXIgdG8gbG9vayB1cC5cblxuLy8gQWxsIHRva2VuIHR5cGUgdmFyaWFibGVzIHN0YXJ0IHdpdGggYW4gdW5kZXJzY29yZSwgdG8gbWFrZSB0aGVtXG4vLyBlYXN5IHRvIHJlY29nbml6ZS5cblxuLy8gVGhlIGBiZWZvcmVFeHByYCBwcm9wZXJ0eSBpcyB1c2VkIHRvIGRpc2FtYmlndWF0ZSBiZXR3ZWVuIHJlZ3VsYXJcbi8vIGV4cHJlc3Npb25zIGFuZCBkaXZpc2lvbnMuIEl0IGlzIHNldCBvbiBhbGwgdG9rZW4gdHlwZXMgdGhhdCBjYW5cbi8vIGJlIGZvbGxvd2VkIGJ5IGFuIGV4cHJlc3Npb24gKHRodXMsIGEgc2xhc2ggYWZ0ZXIgdGhlbSB3b3VsZCBiZSBhXG4vLyByZWd1bGFyIGV4cHJlc3Npb24pLlxuLy9cbi8vIFRoZSBgc3RhcnRzRXhwcmAgcHJvcGVydHkgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgdG9rZW4gZW5kcyBhXG4vLyBgeWllbGRgIGV4cHJlc3Npb24uIEl0IGlzIHNldCBvbiBhbGwgdG9rZW4gdHlwZXMgdGhhdCBlaXRoZXIgY2FuXG4vLyBkaXJlY3RseSBzdGFydCBhbiBleHByZXNzaW9uIChsaWtlIGEgcXVvdGF0aW9uIG1hcmspIG9yIGNhblxuLy8gY29udGludWUgYW4gZXhwcmVzc2lvbiAobGlrZSB0aGUgYm9keSBvZiBhIHN0cmluZykuXG4vL1xuLy8gYGlzTG9vcGAgbWFya3MgYSBrZXl3b3JkIGFzIHN0YXJ0aW5nIGEgbG9vcCwgd2hpY2ggaXMgaW1wb3J0YW50XG4vLyB0byBrbm93IHdoZW4gcGFyc2luZyBhIGxhYmVsLCBpbiBvcmRlciB0byBhbGxvdyBvciBkaXNhbGxvd1xuLy8gY29udGludWUganVtcHMgdG8gdGhhdCBsYWJlbC5cblxudmFyIFRva2VuVHlwZSA9IGZ1bmN0aW9uIFRva2VuVHlwZShsYWJlbCwgY29uZikge1xuICBpZiAoIGNvbmYgPT09IHZvaWQgMCApIGNvbmYgPSB7fTtcblxuICB0aGlzLmxhYmVsID0gbGFiZWxcbiAgdGhpcy5rZXl3b3JkID0gY29uZi5rZXl3b3JkXG4gIHRoaXMuYmVmb3JlRXhwciA9ICEhY29uZi5iZWZvcmVFeHByXG4gIHRoaXMuc3RhcnRzRXhwciA9ICEhY29uZi5zdGFydHNFeHByXG4gIHRoaXMuaXNMb29wID0gISFjb25mLmlzTG9vcFxuICB0aGlzLmlzQXNzaWduID0gISFjb25mLmlzQXNzaWduXG4gIHRoaXMucHJlZml4ID0gISFjb25mLnByZWZpeFxuICB0aGlzLnBvc3RmaXggPSAhIWNvbmYucG9zdGZpeFxuICB0aGlzLmJpbm9wID0gY29uZi5iaW5vcCB8fCBudWxsXG4gIHRoaXMudXBkYXRlQ29udGV4dCA9IG51bGxcbn07XG5cbmZ1bmN0aW9uIGJpbm9wKG5hbWUsIHByZWMpIHtcbiAgcmV0dXJuIG5ldyBUb2tlblR5cGUobmFtZSwge2JlZm9yZUV4cHI6IHRydWUsIGJpbm9wOiBwcmVjfSlcbn1cbnZhciBiZWZvcmVFeHByID0ge2JlZm9yZUV4cHI6IHRydWV9O1xudmFyIHN0YXJ0c0V4cHIgPSB7c3RhcnRzRXhwcjogdHJ1ZX07XG4vLyBNYXAga2V5d29yZCBuYW1lcyB0byB0b2tlbiB0eXBlcy5cblxudmFyIGtleXdvcmRUeXBlcyA9IHt9XG5cbi8vIFN1Y2NpbmN0IGRlZmluaXRpb25zIG9mIGtleXdvcmQgdG9rZW4gdHlwZXNcbmZ1bmN0aW9uIGt3KG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKCBvcHRpb25zID09PSB2b2lkIDAgKSBvcHRpb25zID0ge307XG5cbiAgb3B0aW9ucy5rZXl3b3JkID0gbmFtZVxuICByZXR1cm4ga2V5d29yZFR5cGVzW25hbWVdID0gbmV3IFRva2VuVHlwZShuYW1lLCBvcHRpb25zKVxufVxuXG52YXIgdHQgPSB7XG4gIG51bTogbmV3IFRva2VuVHlwZShcIm51bVwiLCBzdGFydHNFeHByKSxcbiAgcmVnZXhwOiBuZXcgVG9rZW5UeXBlKFwicmVnZXhwXCIsIHN0YXJ0c0V4cHIpLFxuICBzdHJpbmc6IG5ldyBUb2tlblR5cGUoXCJzdHJpbmdcIiwgc3RhcnRzRXhwciksXG4gIG5hbWU6IG5ldyBUb2tlblR5cGUoXCJuYW1lXCIsIHN0YXJ0c0V4cHIpLFxuICBlb2Y6IG5ldyBUb2tlblR5cGUoXCJlb2ZcIiksXG5cbiAgLy8gUHVuY3R1YXRpb24gdG9rZW4gdHlwZXMuXG4gIGJyYWNrZXRMOiBuZXcgVG9rZW5UeXBlKFwiW1wiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBicmFja2V0UjogbmV3IFRva2VuVHlwZShcIl1cIiksXG4gIGJyYWNlTDogbmV3IFRva2VuVHlwZShcIntcIiwge2JlZm9yZUV4cHI6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgYnJhY2VSOiBuZXcgVG9rZW5UeXBlKFwifVwiKSxcbiAgcGFyZW5MOiBuZXcgVG9rZW5UeXBlKFwiKFwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBwYXJlblI6IG5ldyBUb2tlblR5cGUoXCIpXCIpLFxuICBjb21tYTogbmV3IFRva2VuVHlwZShcIixcIiwgYmVmb3JlRXhwciksXG4gIHNlbWk6IG5ldyBUb2tlblR5cGUoXCI7XCIsIGJlZm9yZUV4cHIpLFxuICBjb2xvbjogbmV3IFRva2VuVHlwZShcIjpcIiwgYmVmb3JlRXhwciksXG4gIGRvdDogbmV3IFRva2VuVHlwZShcIi5cIiksXG4gIHF1ZXN0aW9uOiBuZXcgVG9rZW5UeXBlKFwiP1wiLCBiZWZvcmVFeHByKSxcbiAgYXJyb3c6IG5ldyBUb2tlblR5cGUoXCI9PlwiLCBiZWZvcmVFeHByKSxcbiAgdGVtcGxhdGU6IG5ldyBUb2tlblR5cGUoXCJ0ZW1wbGF0ZVwiKSxcbiAgZWxsaXBzaXM6IG5ldyBUb2tlblR5cGUoXCIuLi5cIiwgYmVmb3JlRXhwciksXG4gIGJhY2tRdW90ZTogbmV3IFRva2VuVHlwZShcImBcIiwgc3RhcnRzRXhwciksXG4gIGRvbGxhckJyYWNlTDogbmV3IFRva2VuVHlwZShcIiR7XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG5cbiAgLy8gT3BlcmF0b3JzLiBUaGVzZSBjYXJyeSBzZXZlcmFsIGtpbmRzIG9mIHByb3BlcnRpZXMgdG8gaGVscCB0aGVcbiAgLy8gcGFyc2VyIHVzZSB0aGVtIHByb3Blcmx5ICh0aGUgcHJlc2VuY2Ugb2YgdGhlc2UgcHJvcGVydGllcyBpc1xuICAvLyB3aGF0IGNhdGVnb3JpemVzIHRoZW0gYXMgb3BlcmF0b3JzKS5cbiAgLy9cbiAgLy8gYGJpbm9wYCwgd2hlbiBwcmVzZW50LCBzcGVjaWZpZXMgdGhhdCB0aGlzIG9wZXJhdG9yIGlzIGEgYmluYXJ5XG4gIC8vIG9wZXJhdG9yLCBhbmQgd2lsbCByZWZlciB0byBpdHMgcHJlY2VkZW5jZS5cbiAgLy9cbiAgLy8gYHByZWZpeGAgYW5kIGBwb3N0Zml4YCBtYXJrIHRoZSBvcGVyYXRvciBhcyBhIHByZWZpeCBvciBwb3N0Zml4XG4gIC8vIHVuYXJ5IG9wZXJhdG9yLlxuICAvL1xuICAvLyBgaXNBc3NpZ25gIG1hcmtzIGFsbCBvZiBgPWAsIGArPWAsIGAtPWAgZXRjZXRlcmEsIHdoaWNoIGFjdCBhc1xuICAvLyBiaW5hcnkgb3BlcmF0b3JzIHdpdGggYSB2ZXJ5IGxvdyBwcmVjZWRlbmNlLCB0aGF0IHNob3VsZCByZXN1bHRcbiAgLy8gaW4gQXNzaWdubWVudEV4cHJlc3Npb24gbm9kZXMuXG5cbiAgZXE6IG5ldyBUb2tlblR5cGUoXCI9XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBpc0Fzc2lnbjogdHJ1ZX0pLFxuICBhc3NpZ246IG5ldyBUb2tlblR5cGUoXCJfPVwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgaXNBc3NpZ246IHRydWV9KSxcbiAgaW5jRGVjOiBuZXcgVG9rZW5UeXBlKFwiKysvLS1cIiwge3ByZWZpeDogdHJ1ZSwgcG9zdGZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBwcmVmaXg6IG5ldyBUb2tlblR5cGUoXCJwcmVmaXhcIiwge2JlZm9yZUV4cHI6IHRydWUsIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBsb2dpY2FsT1I6IGJpbm9wKFwifHxcIiwgMSksXG4gIGxvZ2ljYWxBTkQ6IGJpbm9wKFwiJiZcIiwgMiksXG4gIGJpdHdpc2VPUjogYmlub3AoXCJ8XCIsIDMpLFxuICBiaXR3aXNlWE9SOiBiaW5vcChcIl5cIiwgNCksXG4gIGJpdHdpc2VBTkQ6IGJpbm9wKFwiJlwiLCA1KSxcbiAgZXF1YWxpdHk6IGJpbm9wKFwiPT0vIT1cIiwgNiksXG4gIHJlbGF0aW9uYWw6IGJpbm9wKFwiPC8+XCIsIDcpLFxuICBiaXRTaGlmdDogYmlub3AoXCI8PC8+PlwiLCA4KSxcbiAgcGx1c01pbjogbmV3IFRva2VuVHlwZShcIisvLVwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgYmlub3A6IDksIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBtb2R1bG86IGJpbm9wKFwiJVwiLCAxMCksXG4gIHN0YXI6IGJpbm9wKFwiKlwiLCAxMCksXG4gIHNsYXNoOiBiaW5vcChcIi9cIiwgMTApLFxuICBzdGFyc3RhcjogbmV3IFRva2VuVHlwZShcIioqXCIsIHtiZWZvcmVFeHByOiB0cnVlfSksXG5cbiAgLy8gS2V5d29yZCB0b2tlbiB0eXBlcy5cbiAgX2JyZWFrOiBrdyhcImJyZWFrXCIpLFxuICBfY2FzZToga3coXCJjYXNlXCIsIGJlZm9yZUV4cHIpLFxuICBfY2F0Y2g6IGt3KFwiY2F0Y2hcIiksXG4gIF9jb250aW51ZToga3coXCJjb250aW51ZVwiKSxcbiAgX2RlYnVnZ2VyOiBrdyhcImRlYnVnZ2VyXCIpLFxuICBfZGVmYXVsdDoga3coXCJkZWZhdWx0XCIsIGJlZm9yZUV4cHIpLFxuICBfZG86IGt3KFwiZG9cIiwge2lzTG9vcDogdHJ1ZSwgYmVmb3JlRXhwcjogdHJ1ZX0pLFxuICBfZWxzZToga3coXCJlbHNlXCIsIGJlZm9yZUV4cHIpLFxuICBfZmluYWxseToga3coXCJmaW5hbGx5XCIpLFxuICBfZm9yOiBrdyhcImZvclwiLCB7aXNMb29wOiB0cnVlfSksXG4gIF9mdW5jdGlvbjoga3coXCJmdW5jdGlvblwiLCBzdGFydHNFeHByKSxcbiAgX2lmOiBrdyhcImlmXCIpLFxuICBfcmV0dXJuOiBrdyhcInJldHVyblwiLCBiZWZvcmVFeHByKSxcbiAgX3N3aXRjaDoga3coXCJzd2l0Y2hcIiksXG4gIF90aHJvdzoga3coXCJ0aHJvd1wiLCBiZWZvcmVFeHByKSxcbiAgX3RyeToga3coXCJ0cnlcIiksXG4gIF92YXI6IGt3KFwidmFyXCIpLFxuICBfY29uc3Q6IGt3KFwiY29uc3RcIiksXG4gIF93aGlsZToga3coXCJ3aGlsZVwiLCB7aXNMb29wOiB0cnVlfSksXG4gIF93aXRoOiBrdyhcIndpdGhcIiksXG4gIF9uZXc6IGt3KFwibmV3XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gIF90aGlzOiBrdyhcInRoaXNcIiwgc3RhcnRzRXhwciksXG4gIF9zdXBlcjoga3coXCJzdXBlclwiLCBzdGFydHNFeHByKSxcbiAgX2NsYXNzOiBrdyhcImNsYXNzXCIpLFxuICBfZXh0ZW5kczoga3coXCJleHRlbmRzXCIsIGJlZm9yZUV4cHIpLFxuICBfZXhwb3J0OiBrdyhcImV4cG9ydFwiKSxcbiAgX2ltcG9ydDoga3coXCJpbXBvcnRcIiksXG4gIF9udWxsOiBrdyhcIm51bGxcIiwgc3RhcnRzRXhwciksXG4gIF90cnVlOiBrdyhcInRydWVcIiwgc3RhcnRzRXhwciksXG4gIF9mYWxzZToga3coXCJmYWxzZVwiLCBzdGFydHNFeHByKSxcbiAgX2luOiBrdyhcImluXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBiaW5vcDogN30pLFxuICBfaW5zdGFuY2VvZjoga3coXCJpbnN0YW5jZW9mXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBiaW5vcDogN30pLFxuICBfdHlwZW9mOiBrdyhcInR5cGVvZlwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgcHJlZml4OiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gIF92b2lkOiBrdyhcInZvaWRcIiwge2JlZm9yZUV4cHI6IHRydWUsIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBfZGVsZXRlOiBrdyhcImRlbGV0ZVwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgcHJlZml4OiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSlcbn1cblxuLy8gTWF0Y2hlcyBhIHdob2xlIGxpbmUgYnJlYWsgKHdoZXJlIENSTEYgaXMgY29uc2lkZXJlZCBhIHNpbmdsZVxuLy8gbGluZSBicmVhaykuIFVzZWQgdG8gY291bnQgbGluZXMuXG5cbnZhciBsaW5lQnJlYWsgPSAvXFxyXFxuP3xcXG58XFx1MjAyOHxcXHUyMDI5L1xudmFyIGxpbmVCcmVha0cgPSBuZXcgUmVnRXhwKGxpbmVCcmVhay5zb3VyY2UsIFwiZ1wiKVxuXG5mdW5jdGlvbiBpc05ld0xpbmUoY29kZSkge1xuICByZXR1cm4gY29kZSA9PT0gMTAgfHwgY29kZSA9PT0gMTMgfHwgY29kZSA9PT0gMHgyMDI4IHx8IGNvZGUgPT09IDB4MjAyOVxufVxuXG52YXIgbm9uQVNDSUl3aGl0ZXNwYWNlID0gL1tcXHUxNjgwXFx1MTgwZVxcdTIwMDAtXFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdWZlZmZdL1xuXG52YXIgc2tpcFdoaXRlU3BhY2UgPSAvKD86XFxzfFxcL1xcLy4qfFxcL1xcKlteXSo/XFwqXFwvKSovZ1xuXG5mdW5jdGlvbiBpc0FycmF5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBBcnJheV1cIlxufVxuXG4vLyBDaGVja3MgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LlxuXG5mdW5jdGlvbiBoYXMob2JqLCBwcm9wTmFtZSkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcE5hbWUpXG59XG5cbi8vIFRoZXNlIGFyZSB1c2VkIHdoZW4gYG9wdGlvbnMubG9jYXRpb25zYCBpcyBvbiwgZm9yIHRoZVxuLy8gYHN0YXJ0TG9jYCBhbmQgYGVuZExvY2AgcHJvcGVydGllcy5cblxudmFyIFBvc2l0aW9uID0gZnVuY3Rpb24gUG9zaXRpb24obGluZSwgY29sKSB7XG4gIHRoaXMubGluZSA9IGxpbmVcbiAgdGhpcy5jb2x1bW4gPSBjb2xcbn07XG5cblBvc2l0aW9uLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiBvZmZzZXQgKG4pIHtcbiAgcmV0dXJuIG5ldyBQb3NpdGlvbih0aGlzLmxpbmUsIHRoaXMuY29sdW1uICsgbilcbn07XG5cbnZhciBTb3VyY2VMb2NhdGlvbiA9IGZ1bmN0aW9uIFNvdXJjZUxvY2F0aW9uKHAsIHN0YXJ0LCBlbmQpIHtcbiAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gIHRoaXMuZW5kID0gZW5kXG4gIGlmIChwLnNvdXJjZUZpbGUgIT09IG51bGwpIHRoaXMuc291cmNlID0gcC5zb3VyY2VGaWxlXG59O1xuXG4vLyBUaGUgYGdldExpbmVJbmZvYCBmdW5jdGlvbiBpcyBtb3N0bHkgdXNlZnVsIHdoZW4gdGhlXG4vLyBgbG9jYXRpb25zYCBvcHRpb24gaXMgb2ZmIChmb3IgcGVyZm9ybWFuY2UgcmVhc29ucykgYW5kIHlvdVxuLy8gd2FudCB0byBmaW5kIHRoZSBsaW5lL2NvbHVtbiBwb3NpdGlvbiBmb3IgYSBnaXZlbiBjaGFyYWN0ZXJcbi8vIG9mZnNldC4gYGlucHV0YCBzaG91bGQgYmUgdGhlIGNvZGUgc3RyaW5nIHRoYXQgdGhlIG9mZnNldCByZWZlcnNcbi8vIGludG8uXG5cbmZ1bmN0aW9uIGdldExpbmVJbmZvKGlucHV0LCBvZmZzZXQpIHtcbiAgZm9yICh2YXIgbGluZSA9IDEsIGN1ciA9IDA7Oykge1xuICAgIGxpbmVCcmVha0cubGFzdEluZGV4ID0gY3VyXG4gICAgdmFyIG1hdGNoID0gbGluZUJyZWFrRy5leGVjKGlucHV0KVxuICAgIGlmIChtYXRjaCAmJiBtYXRjaC5pbmRleCA8IG9mZnNldCkge1xuICAgICAgKytsaW5lXG4gICAgICBjdXIgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFBvc2l0aW9uKGxpbmUsIG9mZnNldCAtIGN1cilcbiAgICB9XG4gIH1cbn1cblxuLy8gQSBzZWNvbmQgb3B0aW9uYWwgYXJndW1lbnQgY2FuIGJlIGdpdmVuIHRvIGZ1cnRoZXIgY29uZmlndXJlXG4vLyB0aGUgcGFyc2VyIHByb2Nlc3MuIFRoZXNlIG9wdGlvbnMgYXJlIHJlY29nbml6ZWQ6XG5cbnZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgLy8gYGVjbWFWZXJzaW9uYCBpbmRpY2F0ZXMgdGhlIEVDTUFTY3JpcHQgdmVyc2lvbiB0byBwYXJzZS4gTXVzdFxuICAvLyBiZSBlaXRoZXIgMywgNSwgNiAoMjAxNSksIDcgKDIwMTYpLCBvciA4ICgyMDE3KS4gVGhpcyBpbmZsdWVuY2VzIHN1cHBvcnRcbiAgLy8gZm9yIHN0cmljdCBtb2RlLCB0aGUgc2V0IG9mIHJlc2VydmVkIHdvcmRzLCBhbmQgc3VwcG9ydCBmb3JcbiAgLy8gbmV3IHN5bnRheCBmZWF0dXJlcy4gVGhlIGRlZmF1bHQgaXMgNy5cbiAgZWNtYVZlcnNpb246IDcsXG4gIC8vIGBzb3VyY2VUeXBlYCBpbmRpY2F0ZXMgdGhlIG1vZGUgdGhlIGNvZGUgc2hvdWxkIGJlIHBhcnNlZCBpbi5cbiAgLy8gQ2FuIGJlIGVpdGhlciBgXCJzY3JpcHRcImAgb3IgYFwibW9kdWxlXCJgLiBUaGlzIGluZmx1ZW5jZXMgZ2xvYmFsXG4gIC8vIHN0cmljdCBtb2RlIGFuZCBwYXJzaW5nIG9mIGBpbXBvcnRgIGFuZCBgZXhwb3J0YCBkZWNsYXJhdGlvbnMuXG4gIHNvdXJjZVR5cGU6IFwic2NyaXB0XCIsXG4gIC8vIGBvbkluc2VydGVkU2VtaWNvbG9uYCBjYW4gYmUgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkXG4gIC8vIHdoZW4gYSBzZW1pY29sb24gaXMgYXV0b21hdGljYWxseSBpbnNlcnRlZC4gSXQgd2lsbCBiZSBwYXNzZWRcbiAgLy8gdGggcG9zaXRpb24gb2YgdGhlIGNvbW1hIGFzIGFuIG9mZnNldCwgYW5kIGlmIGBsb2NhdGlvbnNgIGlzXG4gIC8vIGVuYWJsZWQsIGl0IGlzIGdpdmVuIHRoZSBsb2NhdGlvbiBhcyBhIGB7bGluZSwgY29sdW1ufWAgb2JqZWN0XG4gIC8vIGFzIHNlY29uZCBhcmd1bWVudC5cbiAgb25JbnNlcnRlZFNlbWljb2xvbjogbnVsbCxcbiAgLy8gYG9uVHJhaWxpbmdDb21tYWAgaXMgc2ltaWxhciB0byBgb25JbnNlcnRlZFNlbWljb2xvbmAsIGJ1dCBmb3JcbiAgLy8gdHJhaWxpbmcgY29tbWFzLlxuICBvblRyYWlsaW5nQ29tbWE6IG51bGwsXG4gIC8vIEJ5IGRlZmF1bHQsIHJlc2VydmVkIHdvcmRzIGFyZSBvbmx5IGVuZm9yY2VkIGlmIGVjbWFWZXJzaW9uID49IDUuXG4gIC8vIFNldCBgYWxsb3dSZXNlcnZlZGAgdG8gYSBib29sZWFuIHZhbHVlIHRvIGV4cGxpY2l0bHkgdHVybiB0aGlzIG9uXG4gIC8vIGFuIG9mZi4gV2hlbiB0aGlzIG9wdGlvbiBoYXMgdGhlIHZhbHVlIFwibmV2ZXJcIiwgcmVzZXJ2ZWQgd29yZHNcbiAgLy8gYW5kIGtleXdvcmRzIGNhbiBhbHNvIG5vdCBiZSB1c2VkIGFzIHByb3BlcnR5IG5hbWVzLlxuICBhbGxvd1Jlc2VydmVkOiBudWxsLFxuICAvLyBXaGVuIGVuYWJsZWQsIGEgcmV0dXJuIGF0IHRoZSB0b3AgbGV2ZWwgaXMgbm90IGNvbnNpZGVyZWQgYW5cbiAgLy8gZXJyb3IuXG4gIGFsbG93UmV0dXJuT3V0c2lkZUZ1bmN0aW9uOiBmYWxzZSxcbiAgLy8gV2hlbiBlbmFibGVkLCBpbXBvcnQvZXhwb3J0IHN0YXRlbWVudHMgYXJlIG5vdCBjb25zdHJhaW5lZCB0b1xuICAvLyBhcHBlYXJpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbS5cbiAgYWxsb3dJbXBvcnRFeHBvcnRFdmVyeXdoZXJlOiBmYWxzZSxcbiAgLy8gV2hlbiBlbmFibGVkLCBoYXNoYmFuZyBkaXJlY3RpdmUgaW4gdGhlIGJlZ2lubmluZyBvZiBmaWxlXG4gIC8vIGlzIGFsbG93ZWQgYW5kIHRyZWF0ZWQgYXMgYSBsaW5lIGNvbW1lbnQuXG4gIGFsbG93SGFzaEJhbmc6IGZhbHNlLFxuICAvLyBXaGVuIGBsb2NhdGlvbnNgIGlzIG9uLCBgbG9jYCBwcm9wZXJ0aWVzIGhvbGRpbmcgb2JqZWN0cyB3aXRoXG4gIC8vIGBzdGFydGAgYW5kIGBlbmRgIHByb3BlcnRpZXMgaW4gYHtsaW5lLCBjb2x1bW59YCBmb3JtICh3aXRoXG4gIC8vIGxpbmUgYmVpbmcgMS1iYXNlZCBhbmQgY29sdW1uIDAtYmFzZWQpIHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlXG4gIC8vIG5vZGVzLlxuICBsb2NhdGlvbnM6IGZhbHNlLFxuICAvLyBBIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgYXMgYG9uVG9rZW5gIG9wdGlvbiwgd2hpY2ggd2lsbFxuICAvLyBjYXVzZSBBY29ybiB0byBjYWxsIHRoYXQgZnVuY3Rpb24gd2l0aCBvYmplY3QgaW4gdGhlIHNhbWVcbiAgLy8gZm9ybWF0IGFzIHRva2VucyByZXR1cm5lZCBmcm9tIGB0b2tlbml6ZXIoKS5nZXRUb2tlbigpYC4gTm90ZVxuICAvLyB0aGF0IHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2FsbCB0aGUgcGFyc2VyIGZyb20gdGhlXG4gIC8vIGNhbGxiYWNr4oCUdGhhdCB3aWxsIGNvcnJ1cHQgaXRzIGludGVybmFsIHN0YXRlLlxuICBvblRva2VuOiBudWxsLFxuICAvLyBBIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgYXMgYG9uQ29tbWVudGAgb3B0aW9uLCB3aGljaCB3aWxsXG4gIC8vIGNhdXNlIEFjb3JuIHRvIGNhbGwgdGhhdCBmdW5jdGlvbiB3aXRoIGAoYmxvY2ssIHRleHQsIHN0YXJ0LFxuICAvLyBlbmQpYCBwYXJhbWV0ZXJzIHdoZW5ldmVyIGEgY29tbWVudCBpcyBza2lwcGVkLiBgYmxvY2tgIGlzIGFcbiAgLy8gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBpcyBhIGJsb2NrIChgLyogKi9gKSBjb21tZW50LFxuICAvLyBgdGV4dGAgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIGNvbW1lbnQsIGFuZCBgc3RhcnRgIGFuZCBgZW5kYCBhcmVcbiAgLy8gY2hhcmFjdGVyIG9mZnNldHMgdGhhdCBkZW5vdGUgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGNvbW1lbnQuXG4gIC8vIFdoZW4gdGhlIGBsb2NhdGlvbnNgIG9wdGlvbiBpcyBvbiwgdHdvIG1vcmUgcGFyYW1ldGVycyBhcmVcbiAgLy8gcGFzc2VkLCB0aGUgZnVsbCBge2xpbmUsIGNvbHVtbn1gIGxvY2F0aW9ucyBvZiB0aGUgc3RhcnQgYW5kXG4gIC8vIGVuZCBvZiB0aGUgY29tbWVudHMuIE5vdGUgdGhhdCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNhbGwgdGhlXG4gIC8vIHBhcnNlciBmcm9tIHRoZSBjYWxsYmFja+KAlHRoYXQgd2lsbCBjb3JydXB0IGl0cyBpbnRlcm5hbCBzdGF0ZS5cbiAgb25Db21tZW50OiBudWxsLFxuICAvLyBOb2RlcyBoYXZlIHRoZWlyIHN0YXJ0IGFuZCBlbmQgY2hhcmFjdGVycyBvZmZzZXRzIHJlY29yZGVkIGluXG4gIC8vIGBzdGFydGAgYW5kIGBlbmRgIHByb3BlcnRpZXMgKGRpcmVjdGx5IG9uIHRoZSBub2RlLCByYXRoZXIgdGhhblxuICAvLyB0aGUgYGxvY2Agb2JqZWN0LCB3aGljaCBob2xkcyBsaW5lL2NvbHVtbiBkYXRhLiBUbyBhbHNvIGFkZCBhXG4gIC8vIFtzZW1pLXN0YW5kYXJkaXplZF1bcmFuZ2VdIGByYW5nZWAgcHJvcGVydHkgaG9sZGluZyBhIGBbc3RhcnQsXG4gIC8vIGVuZF1gIGFycmF5IHdpdGggdGhlIHNhbWUgbnVtYmVycywgc2V0IHRoZSBgcmFuZ2VzYCBvcHRpb24gdG9cbiAgLy8gYHRydWVgLlxuICAvL1xuICAvLyBbcmFuZ2VdOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU2NzhcbiAgcmFuZ2VzOiBmYWxzZSxcbiAgLy8gSXQgaXMgcG9zc2libGUgdG8gcGFyc2UgbXVsdGlwbGUgZmlsZXMgaW50byBhIHNpbmdsZSBBU1QgYnlcbiAgLy8gcGFzc2luZyB0aGUgdHJlZSBwcm9kdWNlZCBieSBwYXJzaW5nIHRoZSBmaXJzdCBmaWxlIGFzXG4gIC8vIGBwcm9ncmFtYCBvcHRpb24gaW4gc3Vic2VxdWVudCBwYXJzZXMuIFRoaXMgd2lsbCBhZGQgdGhlXG4gIC8vIHRvcGxldmVsIGZvcm1zIG9mIHRoZSBwYXJzZWQgZmlsZSB0byB0aGUgYFByb2dyYW1gICh0b3ApIG5vZGVcbiAgLy8gb2YgYW4gZXhpc3RpbmcgcGFyc2UgdHJlZS5cbiAgcHJvZ3JhbTogbnVsbCxcbiAgLy8gV2hlbiBgbG9jYXRpb25zYCBpcyBvbiwgeW91IGNhbiBwYXNzIHRoaXMgdG8gcmVjb3JkIHRoZSBzb3VyY2VcbiAgLy8gZmlsZSBpbiBldmVyeSBub2RlJ3MgYGxvY2Agb2JqZWN0LlxuICBzb3VyY2VGaWxlOiBudWxsLFxuICAvLyBUaGlzIHZhbHVlLCBpZiBnaXZlbiwgaXMgc3RvcmVkIGluIGV2ZXJ5IG5vZGUsIHdoZXRoZXJcbiAgLy8gYGxvY2F0aW9uc2AgaXMgb24gb3Igb2ZmLlxuICBkaXJlY3RTb3VyY2VGaWxlOiBudWxsLFxuICAvLyBXaGVuIGVuYWJsZWQsIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbnMgYXJlIHJlcHJlc2VudGVkIGJ5XG4gIC8vIChub24tc3RhbmRhcmQpIFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIG5vZGVzXG4gIHByZXNlcnZlUGFyZW5zOiBmYWxzZSxcbiAgcGx1Z2luczoge31cbn1cblxuLy8gSW50ZXJwcmV0IGFuZCBkZWZhdWx0IGFuIG9wdGlvbnMgb2JqZWN0XG5cbmZ1bmN0aW9uIGdldE9wdGlvbnMob3B0cykge1xuICB2YXIgb3B0aW9ucyA9IHt9XG5cbiAgZm9yICh2YXIgb3B0IGluIGRlZmF1bHRPcHRpb25zKVxuICAgIG9wdGlvbnNbb3B0XSA9IG9wdHMgJiYgaGFzKG9wdHMsIG9wdCkgPyBvcHRzW29wdF0gOiBkZWZhdWx0T3B0aW9uc1tvcHRdXG5cbiAgaWYgKG9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMjAxNSlcbiAgICBvcHRpb25zLmVjbWFWZXJzaW9uIC09IDIwMDlcblxuICBpZiAob3B0aW9ucy5hbGxvd1Jlc2VydmVkID09IG51bGwpXG4gICAgb3B0aW9ucy5hbGxvd1Jlc2VydmVkID0gb3B0aW9ucy5lY21hVmVyc2lvbiA8IDVcblxuICBpZiAoaXNBcnJheShvcHRpb25zLm9uVG9rZW4pKSB7XG4gICAgdmFyIHRva2VucyA9IG9wdGlvbnMub25Ub2tlblxuICAgIG9wdGlvbnMub25Ub2tlbiA9IGZ1bmN0aW9uICh0b2tlbikgeyByZXR1cm4gdG9rZW5zLnB1c2godG9rZW4pOyB9XG4gIH1cbiAgaWYgKGlzQXJyYXkob3B0aW9ucy5vbkNvbW1lbnQpKVxuICAgIG9wdGlvbnMub25Db21tZW50ID0gcHVzaENvbW1lbnQob3B0aW9ucywgb3B0aW9ucy5vbkNvbW1lbnQpXG5cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gcHVzaENvbW1lbnQob3B0aW9ucywgYXJyYXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChibG9jaywgdGV4dCwgc3RhcnQsIGVuZCwgc3RhcnRMb2MsIGVuZExvYykge1xuICAgIHZhciBjb21tZW50ID0ge1xuICAgICAgdHlwZTogYmxvY2sgPyAnQmxvY2snIDogJ0xpbmUnLFxuICAgICAgdmFsdWU6IHRleHQsXG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICBlbmQ6IGVuZFxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5sb2NhdGlvbnMpXG4gICAgICBjb21tZW50LmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbih0aGlzLCBzdGFydExvYywgZW5kTG9jKVxuICAgIGlmIChvcHRpb25zLnJhbmdlcylcbiAgICAgIGNvbW1lbnQucmFuZ2UgPSBbc3RhcnQsIGVuZF1cbiAgICBhcnJheS5wdXNoKGNvbW1lbnQpXG4gIH1cbn1cblxuLy8gUmVnaXN0ZXJlZCBwbHVnaW5zXG52YXIgcGx1Z2lucyA9IHt9XG5cbmZ1bmN0aW9uIGtleXdvcmRSZWdleHAod29yZHMpIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKFwiICsgd29yZHMucmVwbGFjZSgvIC9nLCBcInxcIikgKyBcIikkXCIpXG59XG5cbnZhciBQYXJzZXIgPSBmdW5jdGlvbiBQYXJzZXIob3B0aW9ucywgaW5wdXQsIHN0YXJ0UG9zKSB7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPSBnZXRPcHRpb25zKG9wdGlvbnMpXG4gIHRoaXMuc291cmNlRmlsZSA9IG9wdGlvbnMuc291cmNlRmlsZVxuICB0aGlzLmtleXdvcmRzID0ga2V5d29yZFJlZ2V4cChrZXl3b3Jkc1tvcHRpb25zLmVjbWFWZXJzaW9uID49IDYgPyA2IDogNV0pXG4gIHZhciByZXNlcnZlZCA9IFwiXCJcbiAgaWYgKCFvcHRpb25zLmFsbG93UmVzZXJ2ZWQpIHtcbiAgICBmb3IgKHZhciB2ID0gb3B0aW9ucy5lY21hVmVyc2lvbjs7IHYtLSlcbiAgICAgIGlmIChyZXNlcnZlZCA9IHJlc2VydmVkV29yZHNbdl0pIGJyZWFrXG4gICAgaWYgKG9wdGlvbnMuc291cmNlVHlwZSA9PSBcIm1vZHVsZVwiKSByZXNlcnZlZCArPSBcIiBhd2FpdFwiXG4gIH1cbiAgdGhpcy5yZXNlcnZlZFdvcmRzID0ga2V5d29yZFJlZ2V4cChyZXNlcnZlZClcbiAgdmFyIHJlc2VydmVkU3RyaWN0ID0gKHJlc2VydmVkID8gcmVzZXJ2ZWQgKyBcIiBcIiA6IFwiXCIpICsgcmVzZXJ2ZWRXb3Jkcy5zdHJpY3RcbiAgdGhpcy5yZXNlcnZlZFdvcmRzU3RyaWN0ID0ga2V5d29yZFJlZ2V4cChyZXNlcnZlZFN0cmljdClcbiAgdGhpcy5yZXNlcnZlZFdvcmRzU3RyaWN0QmluZCA9IGtleXdvcmRSZWdleHAocmVzZXJ2ZWRTdHJpY3QgKyBcIiBcIiArIHJlc2VydmVkV29yZHMuc3RyaWN0QmluZClcbiAgdGhpcy5pbnB1dCA9IFN0cmluZyhpbnB1dClcblxuICAvLyBVc2VkIHRvIHNpZ25hbCB0byBjYWxsZXJzIG9mIGByZWFkV29yZDFgIHdoZXRoZXIgdGhlIHdvcmRcbiAgLy8gY29udGFpbmVkIGFueSBlc2NhcGUgc2VxdWVuY2VzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHdvcmRzIHdpdGhcbiAgLy8gZXNjYXBlIHNlcXVlbmNlcyBtdXN0IG5vdCBiZSBpbnRlcnByZXRlZCBhcyBrZXl3b3Jkcy5cbiAgdGhpcy5jb250YWluc0VzYyA9IGZhbHNlXG5cbiAgLy8gTG9hZCBwbHVnaW5zXG4gIHRoaXMubG9hZFBsdWdpbnMob3B0aW9ucy5wbHVnaW5zKVxuXG4gIC8vIFNldCB1cCB0b2tlbiBzdGF0ZVxuXG4gIC8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSB0b2tlbml6ZXIgaW4gdGhlIGlucHV0LlxuICBpZiAoc3RhcnRQb3MpIHtcbiAgICB0aGlzLnBvcyA9IHN0YXJ0UG9zXG4gICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmlucHV0Lmxhc3RJbmRleE9mKFwiXFxuXCIsIHN0YXJ0UG9zIC0gMSkgKyAxXG4gICAgdGhpcy5jdXJMaW5lID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmxpbmVTdGFydCkuc3BsaXQobGluZUJyZWFrKS5sZW5ndGhcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnBvcyA9IHRoaXMubGluZVN0YXJ0ID0gMFxuICAgIHRoaXMuY3VyTGluZSA9IDFcbiAgfVxuXG4gIC8vIFByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgdG9rZW46XG4gIC8vIEl0cyB0eXBlXG4gIHRoaXMudHlwZSA9IHR0LmVvZlxuICAvLyBGb3IgdG9rZW5zIHRoYXQgaW5jbHVkZSBtb3JlIGluZm9ybWF0aW9uIHRoYW4gdGhlaXIgdHlwZSwgdGhlIHZhbHVlXG4gIHRoaXMudmFsdWUgPSBudWxsXG4gIC8vIEl0cyBzdGFydCBhbmQgZW5kIG9mZnNldFxuICB0aGlzLnN0YXJ0ID0gdGhpcy5lbmQgPSB0aGlzLnBvc1xuICAvLyBBbmQsIGlmIGxvY2F0aW9ucyBhcmUgdXNlZCwgdGhlIHtsaW5lLCBjb2x1bW59IG9iamVjdFxuICAvLyBjb3JyZXNwb25kaW5nIHRvIHRob3NlIG9mZnNldHNcbiAgdGhpcy5zdGFydExvYyA9IHRoaXMuZW5kTG9jID0gdGhpcy5jdXJQb3NpdGlvbigpXG5cbiAgLy8gUG9zaXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBwcmV2aW91cyB0b2tlblxuICB0aGlzLmxhc3RUb2tFbmRMb2MgPSB0aGlzLmxhc3RUb2tTdGFydExvYyA9IG51bGxcbiAgdGhpcy5sYXN0VG9rU3RhcnQgPSB0aGlzLmxhc3RUb2tFbmQgPSB0aGlzLnBvc1xuXG4gIC8vIFRoZSBjb250ZXh0IHN0YWNrIGlzIHVzZWQgdG8gc3VwZXJmaWNpYWxseSB0cmFjayBzeW50YWN0aWNcbiAgLy8gY29udGV4dCB0byBwcmVkaWN0IHdoZXRoZXIgYSByZWd1bGFyIGV4cHJlc3Npb24gaXMgYWxsb3dlZCBpbiBhXG4gIC8vIGdpdmVuIHBvc2l0aW9uLlxuICB0aGlzLmNvbnRleHQgPSB0aGlzLmluaXRpYWxDb250ZXh0KClcbiAgdGhpcy5leHByQWxsb3dlZCA9IHRydWVcblxuICAvLyBGaWd1cmUgb3V0IGlmIGl0J3MgYSBtb2R1bGUgY29kZS5cbiAgdGhpcy5pbk1vZHVsZSA9IG9wdGlvbnMuc291cmNlVHlwZSA9PT0gXCJtb2R1bGVcIlxuICB0aGlzLnN0cmljdCA9IHRoaXMuaW5Nb2R1bGUgfHwgdGhpcy5zdHJpY3REaXJlY3RpdmUodGhpcy5wb3MpXG5cbiAgLy8gVXNlZCB0byBzaWduaWZ5IHRoZSBzdGFydCBvZiBhIHBvdGVudGlhbCBhcnJvdyBmdW5jdGlvblxuICB0aGlzLnBvdGVudGlhbEFycm93QXQgPSAtMVxuXG4gIC8vIEZsYWdzIHRvIHRyYWNrIHdoZXRoZXIgd2UgYXJlIGluIGEgZnVuY3Rpb24sIGEgZ2VuZXJhdG9yLCBhbiBhc3luYyBmdW5jdGlvbi5cbiAgdGhpcy5pbkZ1bmN0aW9uID0gdGhpcy5pbkdlbmVyYXRvciA9IHRoaXMuaW5Bc3luYyA9IGZhbHNlXG4gIC8vIFBvc2l0aW9ucyB0byBkZWxheWVkLWNoZWNrIHRoYXQgeWllbGQvYXdhaXQgZG9lcyBub3QgZXhpc3QgaW4gZGVmYXVsdCBwYXJhbWV0ZXJzLlxuICB0aGlzLnlpZWxkUG9zID0gdGhpcy5hd2FpdFBvcyA9IDBcbiAgLy8gTGFiZWxzIGluIHNjb3BlLlxuICB0aGlzLmxhYmVscyA9IFtdXG5cbiAgLy8gSWYgZW5hYmxlZCwgc2tpcCBsZWFkaW5nIGhhc2hiYW5nIGxpbmUuXG4gIGlmICh0aGlzLnBvcyA9PT0gMCAmJiBvcHRpb25zLmFsbG93SGFzaEJhbmcgJiYgdGhpcy5pbnB1dC5zbGljZSgwLCAyKSA9PT0gJyMhJylcbiAgICB0aGlzLnNraXBMaW5lQ29tbWVudCgyKVxufTtcblxuLy8gREVQUkVDQVRFRCBLZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB1bnRpbCAzLjAgaW4gY2FzZSBhIHBsdWdpbiB1c2VzIHRoZW1cblBhcnNlci5wcm90b3R5cGUuaXNLZXl3b3JkID0gZnVuY3Rpb24gaXNLZXl3b3JkICh3b3JkKSB7IHJldHVybiB0aGlzLmtleXdvcmRzLnRlc3Qod29yZCkgfTtcblBhcnNlci5wcm90b3R5cGUuaXNSZXNlcnZlZFdvcmQgPSBmdW5jdGlvbiBpc1Jlc2VydmVkV29yZCAod29yZCkgeyByZXR1cm4gdGhpcy5yZXNlcnZlZFdvcmRzLnRlc3Qod29yZCkgfTtcblxuUGFyc2VyLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbiBleHRlbmQgKG5hbWUsIGYpIHtcbiAgdGhpc1tuYW1lXSA9IGYodGhpc1tuYW1lXSlcbn07XG5cblBhcnNlci5wcm90b3R5cGUubG9hZFBsdWdpbnMgPSBmdW5jdGlvbiBsb2FkUGx1Z2lucyAocGx1Z2luQ29uZmlncykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGZvciAodmFyIG5hbWUgaW4gcGx1Z2luQ29uZmlncykge1xuICAgIHZhciBwbHVnaW4gPSBwbHVnaW5zW25hbWVdXG4gICAgaWYgKCFwbHVnaW4pIHRocm93IG5ldyBFcnJvcihcIlBsdWdpbiAnXCIgKyBuYW1lICsgXCInIG5vdCBmb3VuZFwiKVxuICAgIHBsdWdpbih0aGlzJDEsIHBsdWdpbkNvbmZpZ3NbbmFtZV0pXG4gIH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSAoKSB7XG4gIHZhciBub2RlID0gdGhpcy5vcHRpb25zLnByb2dyYW0gfHwgdGhpcy5zdGFydE5vZGUoKVxuICB0aGlzLm5leHRUb2tlbigpXG4gIHJldHVybiB0aGlzLnBhcnNlVG9wTGV2ZWwobm9kZSlcbn07XG5cbnZhciBwcCA9IFBhcnNlci5wcm90b3R5cGVcblxuLy8gIyMgUGFyc2VyIHV0aWxpdGllc1xuXG52YXIgbGl0ZXJhbCA9IC9eKD86JygoPzpbXlxcJ118XFwuKSopJ3xcIigoPzpbXlxcXCJdfFxcLikqKVwifDspL1xucHAuc3RyaWN0RGlyZWN0aXZlID0gZnVuY3Rpb24oc3RhcnQpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgZm9yICg7Oykge1xuICAgIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHN0YXJ0XG4gICAgc3RhcnQgKz0gc2tpcFdoaXRlU3BhY2UuZXhlYyh0aGlzJDEuaW5wdXQpWzBdLmxlbmd0aFxuICAgIHZhciBtYXRjaCA9IGxpdGVyYWwuZXhlYyh0aGlzJDEuaW5wdXQuc2xpY2Uoc3RhcnQpKVxuICAgIGlmICghbWF0Y2gpIHJldHVybiBmYWxzZVxuICAgIGlmICgobWF0Y2hbMV0gfHwgbWF0Y2hbMl0pID09IFwidXNlIHN0cmljdFwiKSByZXR1cm4gdHJ1ZVxuICAgIHN0YXJ0ICs9IG1hdGNoWzBdLmxlbmd0aFxuICB9XG59XG5cbi8vIFByZWRpY2F0ZSB0aGF0IHRlc3RzIHdoZXRoZXIgdGhlIG5leHQgdG9rZW4gaXMgb2YgdGhlIGdpdmVuXG4vLyB0eXBlLCBhbmQgaWYgeWVzLCBjb25zdW1lcyBpdCBhcyBhIHNpZGUgZWZmZWN0LlxuXG5wcC5lYXQgPSBmdW5jdGlvbih0eXBlKSB7XG4gIGlmICh0aGlzLnR5cGUgPT09IHR5cGUpIHtcbiAgICB0aGlzLm5leHQoKVxuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLy8gVGVzdHMgd2hldGhlciBwYXJzZWQgdG9rZW4gaXMgYSBjb250ZXh0dWFsIGtleXdvcmQuXG5cbnBwLmlzQ29udGV4dHVhbCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMudHlwZSA9PT0gdHQubmFtZSAmJiB0aGlzLnZhbHVlID09PSBuYW1lXG59XG5cbi8vIENvbnN1bWVzIGNvbnRleHR1YWwga2V5d29yZCBpZiBwb3NzaWJsZS5cblxucHAuZWF0Q29udGV4dHVhbCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG5hbWUgJiYgdGhpcy5lYXQodHQubmFtZSlcbn1cblxuLy8gQXNzZXJ0cyB0aGF0IGZvbGxvd2luZyB0b2tlbiBpcyBnaXZlbiBjb250ZXh0dWFsIGtleXdvcmQuXG5cbnBwLmV4cGVjdENvbnRleHR1YWwgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmICghdGhpcy5lYXRDb250ZXh0dWFsKG5hbWUpKSB0aGlzLnVuZXhwZWN0ZWQoKVxufVxuXG4vLyBUZXN0IHdoZXRoZXIgYSBzZW1pY29sb24gY2FuIGJlIGluc2VydGVkIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuXG5wcC5jYW5JbnNlcnRTZW1pY29sb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudHlwZSA9PT0gdHQuZW9mIHx8XG4gICAgdGhpcy50eXBlID09PSB0dC5icmFjZVIgfHxcbiAgICBsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva0VuZCwgdGhpcy5zdGFydCkpXG59XG5cbnBwLmluc2VydFNlbWljb2xvbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMub25JbnNlcnRlZFNlbWljb2xvbilcbiAgICAgIHRoaXMub3B0aW9ucy5vbkluc2VydGVkU2VtaWNvbG9uKHRoaXMubGFzdFRva0VuZCwgdGhpcy5sYXN0VG9rRW5kTG9jKVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuLy8gQ29uc3VtZSBhIHNlbWljb2xvbiwgb3IsIGZhaWxpbmcgdGhhdCwgc2VlIGlmIHdlIGFyZSBhbGxvd2VkIHRvXG4vLyBwcmV0ZW5kIHRoYXQgdGhlcmUgaXMgYSBzZW1pY29sb24gYXQgdGhpcyBwb3NpdGlvbi5cblxucHAuc2VtaWNvbG9uID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5lYXQodHQuc2VtaSkgJiYgIXRoaXMuaW5zZXJ0U2VtaWNvbG9uKCkpIHRoaXMudW5leHBlY3RlZCgpXG59XG5cbnBwLmFmdGVyVHJhaWxpbmdDb21tYSA9IGZ1bmN0aW9uKHRva1R5cGUsIG5vdE5leHQpIHtcbiAgaWYgKHRoaXMudHlwZSA9PSB0b2tUeXBlKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5vblRyYWlsaW5nQ29tbWEpXG4gICAgICB0aGlzLm9wdGlvbnMub25UcmFpbGluZ0NvbW1hKHRoaXMubGFzdFRva1N0YXJ0LCB0aGlzLmxhc3RUb2tTdGFydExvYylcbiAgICBpZiAoIW5vdE5leHQpXG4gICAgICB0aGlzLm5leHQoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuLy8gRXhwZWN0IGEgdG9rZW4gb2YgYSBnaXZlbiB0eXBlLiBJZiBmb3VuZCwgY29uc3VtZSBpdCwgb3RoZXJ3aXNlLFxuLy8gcmFpc2UgYW4gdW5leHBlY3RlZCB0b2tlbiBlcnJvci5cblxucHAuZXhwZWN0ID0gZnVuY3Rpb24odHlwZSkge1xuICB0aGlzLmVhdCh0eXBlKSB8fCB0aGlzLnVuZXhwZWN0ZWQoKVxufVxuXG4vLyBSYWlzZSBhbiB1bmV4cGVjdGVkIHRva2VuIGVycm9yLlxuXG5wcC51bmV4cGVjdGVkID0gZnVuY3Rpb24ocG9zKSB7XG4gIHRoaXMucmFpc2UocG9zICE9IG51bGwgPyBwb3MgOiB0aGlzLnN0YXJ0LCBcIlVuZXhwZWN0ZWQgdG9rZW5cIilcbn1cblxudmFyIERlc3RydWN0dXJpbmdFcnJvcnMgPSBmdW5jdGlvbiBEZXN0cnVjdHVyaW5nRXJyb3JzKCkge1xuICB0aGlzLnNob3J0aGFuZEFzc2lnbiA9IHRoaXMudHJhaWxpbmdDb21tYSA9IHRoaXMucGFyZW50aGVzaXplZEFzc2lnbiA9IHRoaXMucGFyZW50aGVzaXplZEJpbmQgPSAtMVxufTtcblxucHAuY2hlY2tQYXR0ZXJuRXJyb3JzID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgaXNBc3NpZ24pIHtcbiAgaWYgKCFyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSByZXR1cm5cbiAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA+IC0xKVxuICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEsIFwiQ29tbWEgaXMgbm90IHBlcm1pdHRlZCBhZnRlciB0aGUgcmVzdCBlbGVtZW50XCIpXG4gIHZhciBwYXJlbnMgPSBpc0Fzc2lnbiA/IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA6IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEJpbmRcbiAgaWYgKHBhcmVucyA+IC0xKSB0aGlzLnJhaXNlUmVjb3ZlcmFibGUocGFyZW5zLCBcIlBhcmVudGhlc2l6ZWQgcGF0dGVyblwiKVxufVxuXG5wcC5jaGVja0V4cHJlc3Npb25FcnJvcnMgPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBhbmRUaHJvdykge1xuICB2YXIgcG9zID0gcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyA/IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuc2hvcnRoYW5kQXNzaWduIDogLTFcbiAgaWYgKCFhbmRUaHJvdykgcmV0dXJuIHBvcyA+PSAwXG4gIGlmIChwb3MgPiAtMSkgdGhpcy5yYWlzZShwb3MsIFwiU2hvcnRoYW5kIHByb3BlcnR5IGFzc2lnbm1lbnRzIGFyZSB2YWxpZCBvbmx5IGluIGRlc3RydWN0dXJpbmcgcGF0dGVybnNcIilcbn1cblxucHAuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLnlpZWxkUG9zICYmICghdGhpcy5hd2FpdFBvcyB8fCB0aGlzLnlpZWxkUG9zIDwgdGhpcy5hd2FpdFBvcykpXG4gICAgdGhpcy5yYWlzZSh0aGlzLnlpZWxkUG9zLCBcIllpZWxkIGV4cHJlc3Npb24gY2Fubm90IGJlIGEgZGVmYXVsdCB2YWx1ZVwiKVxuICBpZiAodGhpcy5hd2FpdFBvcylcbiAgICB0aGlzLnJhaXNlKHRoaXMuYXdhaXRQb3MsIFwiQXdhaXQgZXhwcmVzc2lvbiBjYW5ub3QgYmUgYSBkZWZhdWx0IHZhbHVlXCIpXG59XG5cbnBwLmlzU2ltcGxlQXNzaWduVGFyZ2V0ID0gZnVuY3Rpb24oZXhwcikge1xuICBpZiAoZXhwci50eXBlID09PSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpXG4gICAgcmV0dXJuIHRoaXMuaXNTaW1wbGVBc3NpZ25UYXJnZXQoZXhwci5leHByZXNzaW9uKVxuICByZXR1cm4gZXhwci50eXBlID09PSBcIklkZW50aWZpZXJcIiB8fCBleHByLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiXG59XG5cbnZhciBwcCQxID0gUGFyc2VyLnByb3RvdHlwZVxuXG4vLyAjIyMgU3RhdGVtZW50IHBhcnNpbmdcblxuLy8gUGFyc2UgYSBwcm9ncmFtLiBJbml0aWFsaXplcyB0aGUgcGFyc2VyLCByZWFkcyBhbnkgbnVtYmVyIG9mXG4vLyBzdGF0ZW1lbnRzLCBhbmQgd3JhcHMgdGhlbSBpbiBhIFByb2dyYW0gbm9kZS4gIE9wdGlvbmFsbHkgdGFrZXMgYVxuLy8gYHByb2dyYW1gIGFyZ3VtZW50LiAgSWYgcHJlc2VudCwgdGhlIHN0YXRlbWVudHMgd2lsbCBiZSBhcHBlbmRlZFxuLy8gdG8gaXRzIGJvZHkgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBub2RlLlxuXG5wcCQxLnBhcnNlVG9wTGV2ZWwgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBleHBvcnRzID0ge31cbiAgaWYgKCFub2RlLmJvZHkpIG5vZGUuYm9keSA9IFtdXG4gIHdoaWxlICh0aGlzLnR5cGUgIT09IHR0LmVvZikge1xuICAgIHZhciBzdG10ID0gdGhpcyQxLnBhcnNlU3RhdGVtZW50KHRydWUsIHRydWUsIGV4cG9ydHMpXG4gICAgbm9kZS5ib2R5LnB1c2goc3RtdClcbiAgfVxuICB0aGlzLm5leHQoKVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHtcbiAgICBub2RlLnNvdXJjZVR5cGUgPSB0aGlzLm9wdGlvbnMuc291cmNlVHlwZVxuICB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJQcm9ncmFtXCIpXG59XG5cbnZhciBsb29wTGFiZWwgPSB7a2luZDogXCJsb29wXCJ9O1xudmFyIHN3aXRjaExhYmVsID0ge2tpbmQ6IFwic3dpdGNoXCJ9O1xucHAkMS5pc0xldCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy50eXBlICE9PSB0dC5uYW1lIHx8IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA8IDYgfHwgdGhpcy52YWx1ZSAhPSBcImxldFwiKSByZXR1cm4gZmFsc2VcbiAgc2tpcFdoaXRlU3BhY2UubGFzdEluZGV4ID0gdGhpcy5wb3NcbiAgdmFyIHNraXAgPSBza2lwV2hpdGVTcGFjZS5leGVjKHRoaXMuaW5wdXQpXG4gIHZhciBuZXh0ID0gdGhpcy5wb3MgKyBza2lwWzBdLmxlbmd0aCwgbmV4dENoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KG5leHQpXG4gIGlmIChuZXh0Q2ggPT09IDkxIHx8IG5leHRDaCA9PSAxMjMpIHJldHVybiB0cnVlIC8vICd7JyBhbmQgJ1snXG4gIGlmIChpc0lkZW50aWZpZXJTdGFydChuZXh0Q2gsIHRydWUpKSB7XG4gICAgZm9yICh2YXIgcG9zID0gbmV4dCArIDE7IGlzSWRlbnRpZmllckNoYXIodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHBvcyksIHRydWUpOyArK3Bvcykge31cbiAgICB2YXIgaWRlbnQgPSB0aGlzLmlucHV0LnNsaWNlKG5leHQsIHBvcylcbiAgICBpZiAoIXRoaXMuaXNLZXl3b3JkKGlkZW50KSkgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gY2hlY2sgJ2FzeW5jIFtubyBMaW5lVGVybWluYXRvciBoZXJlXSBmdW5jdGlvbidcbi8vIC0gJ2FzeW5jIC8qZm9vKi8gZnVuY3Rpb24nIGlzIE9LLlxuLy8gLSAnYXN5bmMgLypcXG4qLyBmdW5jdGlvbicgaXMgaW52YWxpZC5cbnBwJDEuaXNBc3luY0Z1bmN0aW9uID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLnR5cGUgIT09IHR0Lm5hbWUgfHwgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgOCB8fCB0aGlzLnZhbHVlICE9IFwiYXN5bmNcIilcbiAgICByZXR1cm4gZmFsc2VcblxuICBza2lwV2hpdGVTcGFjZS5sYXN0SW5kZXggPSB0aGlzLnBvc1xuICB2YXIgc2tpcCA9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcy5pbnB1dClcbiAgdmFyIG5leHQgPSB0aGlzLnBvcyArIHNraXBbMF0ubGVuZ3RoXG4gIHJldHVybiAhbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLnBvcywgbmV4dCkpICYmXG4gICAgdGhpcy5pbnB1dC5zbGljZShuZXh0LCBuZXh0ICsgOCkgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIChuZXh0ICsgOCA9PSB0aGlzLmlucHV0Lmxlbmd0aCB8fCAhaXNJZGVudGlmaWVyQ2hhcih0aGlzLmlucHV0LmNoYXJBdChuZXh0ICsgOCkpKVxufVxuXG4vLyBQYXJzZSBhIHNpbmdsZSBzdGF0ZW1lbnQuXG4vL1xuLy8gSWYgZXhwZWN0aW5nIGEgc3RhdGVtZW50IGFuZCBmaW5kaW5nIGEgc2xhc2ggb3BlcmF0b3IsIHBhcnNlIGFcbi8vIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsLiBUaGlzIGlzIHRvIGhhbmRsZSBjYXNlcyBsaWtlXG4vLyBgaWYgKGZvbykgL2JsYWgvLmV4ZWMoZm9vKWAsIHdoZXJlIGxvb2tpbmcgYXQgdGhlIHByZXZpb3VzIHRva2VuXG4vLyBkb2VzIG5vdCBoZWxwLlxuXG5wcCQxLnBhcnNlU3RhdGVtZW50ID0gZnVuY3Rpb24oZGVjbGFyYXRpb24sIHRvcExldmVsLCBleHBvcnRzKSB7XG4gIHZhciBzdGFydHR5cGUgPSB0aGlzLnR5cGUsIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpLCBraW5kXG5cbiAgaWYgKHRoaXMuaXNMZXQoKSkge1xuICAgIHN0YXJ0dHlwZSA9IHR0Ll92YXJcbiAgICBraW5kID0gXCJsZXRcIlxuICB9XG5cbiAgLy8gTW9zdCB0eXBlcyBvZiBzdGF0ZW1lbnRzIGFyZSByZWNvZ25pemVkIGJ5IHRoZSBrZXl3b3JkIHRoZXlcbiAgLy8gc3RhcnQgd2l0aC4gTWFueSBhcmUgdHJpdmlhbCB0byBwYXJzZSwgc29tZSByZXF1aXJlIGEgYml0IG9mXG4gIC8vIGNvbXBsZXhpdHkuXG5cbiAgc3dpdGNoIChzdGFydHR5cGUpIHtcbiAgY2FzZSB0dC5fYnJlYWs6IGNhc2UgdHQuX2NvbnRpbnVlOiByZXR1cm4gdGhpcy5wYXJzZUJyZWFrQ29udGludWVTdGF0ZW1lbnQobm9kZSwgc3RhcnR0eXBlLmtleXdvcmQpXG4gIGNhc2UgdHQuX2RlYnVnZ2VyOiByZXR1cm4gdGhpcy5wYXJzZURlYnVnZ2VyU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHQuX2RvOiByZXR1cm4gdGhpcy5wYXJzZURvU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHQuX2ZvcjogcmV0dXJuIHRoaXMucGFyc2VGb3JTdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0dC5fZnVuY3Rpb246XG4gICAgaWYgKCFkZWNsYXJhdGlvbiAmJiB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikgdGhpcy51bmV4cGVjdGVkKClcbiAgICByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uU3RhdGVtZW50KG5vZGUsIGZhbHNlKVxuICBjYXNlIHR0Ll9jbGFzczpcbiAgICBpZiAoIWRlY2xhcmF0aW9uKSB0aGlzLnVuZXhwZWN0ZWQoKVxuICAgIHJldHVybiB0aGlzLnBhcnNlQ2xhc3Mobm9kZSwgdHJ1ZSlcbiAgY2FzZSB0dC5faWY6IHJldHVybiB0aGlzLnBhcnNlSWZTdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0dC5fcmV0dXJuOiByZXR1cm4gdGhpcy5wYXJzZVJldHVyblN0YXRlbWVudChub2RlKVxuICBjYXNlIHR0Ll9zd2l0Y2g6IHJldHVybiB0aGlzLnBhcnNlU3dpdGNoU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHQuX3Rocm93OiByZXR1cm4gdGhpcy5wYXJzZVRocm93U3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHQuX3RyeTogcmV0dXJuIHRoaXMucGFyc2VUcnlTdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0dC5fY29uc3Q6IGNhc2UgdHQuX3ZhcjpcbiAgICBraW5kID0ga2luZCB8fCB0aGlzLnZhbHVlXG4gICAgaWYgKCFkZWNsYXJhdGlvbiAmJiBraW5kICE9IFwidmFyXCIpIHRoaXMudW5leHBlY3RlZCgpXG4gICAgcmV0dXJuIHRoaXMucGFyc2VWYXJTdGF0ZW1lbnQobm9kZSwga2luZClcbiAgY2FzZSB0dC5fd2hpbGU6IHJldHVybiB0aGlzLnBhcnNlV2hpbGVTdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0dC5fd2l0aDogcmV0dXJuIHRoaXMucGFyc2VXaXRoU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHQuYnJhY2VMOiByZXR1cm4gdGhpcy5wYXJzZUJsb2NrKClcbiAgY2FzZSB0dC5zZW1pOiByZXR1cm4gdGhpcy5wYXJzZUVtcHR5U3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHQuX2V4cG9ydDpcbiAgY2FzZSB0dC5faW1wb3J0OlxuICAgIGlmICghdGhpcy5vcHRpb25zLmFsbG93SW1wb3J0RXhwb3J0RXZlcnl3aGVyZSkge1xuICAgICAgaWYgKCF0b3BMZXZlbClcbiAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIidpbXBvcnQnIGFuZCAnZXhwb3J0JyBtYXkgb25seSBhcHBlYXIgYXQgdGhlIHRvcCBsZXZlbFwiKVxuICAgICAgaWYgKCF0aGlzLmluTW9kdWxlKVxuICAgICAgICB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ2ltcG9ydCcgYW5kICdleHBvcnQnIG1heSBhcHBlYXIgb25seSB3aXRoICdzb3VyY2VUeXBlOiBtb2R1bGUnXCIpXG4gICAgfVxuICAgIHJldHVybiBzdGFydHR5cGUgPT09IHR0Ll9pbXBvcnQgPyB0aGlzLnBhcnNlSW1wb3J0KG5vZGUpIDogdGhpcy5wYXJzZUV4cG9ydChub2RlLCBleHBvcnRzKVxuXG4gICAgLy8gSWYgdGhlIHN0YXRlbWVudCBkb2VzIG5vdCBzdGFydCB3aXRoIGEgc3RhdGVtZW50IGtleXdvcmQgb3IgYVxuICAgIC8vIGJyYWNlLCBpdCdzIGFuIEV4cHJlc3Npb25TdGF0ZW1lbnQgb3IgTGFiZWxlZFN0YXRlbWVudC4gV2VcbiAgICAvLyBzaW1wbHkgc3RhcnQgcGFyc2luZyBhbiBleHByZXNzaW9uLCBhbmQgYWZ0ZXJ3YXJkcywgaWYgdGhlXG4gICAgLy8gbmV4dCB0b2tlbiBpcyBhIGNvbG9uIGFuZCB0aGUgZXhwcmVzc2lvbiB3YXMgYSBzaW1wbGVcbiAgICAvLyBJZGVudGlmaWVyIG5vZGUsIHdlIHN3aXRjaCB0byBpbnRlcnByZXRpbmcgaXQgYXMgYSBsYWJlbC5cbiAgZGVmYXVsdDpcbiAgICBpZiAodGhpcy5pc0FzeW5jRnVuY3Rpb24oKSAmJiBkZWNsYXJhdGlvbikge1xuICAgICAgdGhpcy5uZXh0KClcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb25TdGF0ZW1lbnQobm9kZSwgdHJ1ZSlcbiAgICB9XG5cbiAgICB2YXIgbWF5YmVOYW1lID0gdGhpcy52YWx1ZSwgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKClcbiAgICBpZiAoc3RhcnR0eXBlID09PSB0dC5uYW1lICYmIGV4cHIudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYgdGhpcy5lYXQodHQuY29sb24pKVxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VMYWJlbGVkU3RhdGVtZW50KG5vZGUsIG1heWJlTmFtZSwgZXhwcilcbiAgICBlbHNlIHJldHVybiB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChub2RlLCBleHByKVxuICB9XG59XG5cbnBwJDEucGFyc2VCcmVha0NvbnRpbnVlU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwga2V5d29yZCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgaXNCcmVhayA9IGtleXdvcmQgPT0gXCJicmVha1wiXG4gIHRoaXMubmV4dCgpXG4gIGlmICh0aGlzLmVhdCh0dC5zZW1pKSB8fCB0aGlzLmluc2VydFNlbWljb2xvbigpKSBub2RlLmxhYmVsID0gbnVsbFxuICBlbHNlIGlmICh0aGlzLnR5cGUgIT09IHR0Lm5hbWUpIHRoaXMudW5leHBlY3RlZCgpXG4gIGVsc2Uge1xuICAgIG5vZGUubGFiZWwgPSB0aGlzLnBhcnNlSWRlbnQoKVxuICAgIHRoaXMuc2VtaWNvbG9uKClcbiAgfVxuXG4gIC8vIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGFuIGFjdHVhbCBkZXN0aW5hdGlvbiB0byBicmVhayBvclxuICAvLyBjb250aW51ZSB0by5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBsYWIgPSB0aGlzJDEubGFiZWxzW2ldXG4gICAgaWYgKG5vZGUubGFiZWwgPT0gbnVsbCB8fCBsYWIubmFtZSA9PT0gbm9kZS5sYWJlbC5uYW1lKSB7XG4gICAgICBpZiAobGFiLmtpbmQgIT0gbnVsbCAmJiAoaXNCcmVhayB8fCBsYWIua2luZCA9PT0gXCJsb29wXCIpKSBicmVha1xuICAgICAgaWYgKG5vZGUubGFiZWwgJiYgaXNCcmVhaykgYnJlYWtcbiAgICB9XG4gIH1cbiAgaWYgKGkgPT09IHRoaXMubGFiZWxzLmxlbmd0aCkgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBcIlVuc3ludGFjdGljIFwiICsga2V5d29yZClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBpc0JyZWFrID8gXCJCcmVha1N0YXRlbWVudFwiIDogXCJDb250aW51ZVN0YXRlbWVudFwiKVxufVxuXG5wcCQxLnBhcnNlRGVidWdnZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpXG4gIHRoaXMuc2VtaWNvbG9uKClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkRlYnVnZ2VyU3RhdGVtZW50XCIpXG59XG5cbnBwJDEucGFyc2VEb1N0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KClcbiAgdGhpcy5sYWJlbHMucHVzaChsb29wTGFiZWwpXG4gIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoZmFsc2UpXG4gIHRoaXMubGFiZWxzLnBvcCgpXG4gIHRoaXMuZXhwZWN0KHR0Ll93aGlsZSlcbiAgbm9kZS50ZXN0ID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpXG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNilcbiAgICB0aGlzLmVhdCh0dC5zZW1pKVxuICBlbHNlXG4gICAgdGhpcy5zZW1pY29sb24oKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRG9XaGlsZVN0YXRlbWVudFwiKVxufVxuXG4vLyBEaXNhbWJpZ3VhdGluZyBiZXR3ZWVuIGEgYGZvcmAgYW5kIGEgYGZvcmAvYGluYCBvciBgZm9yYC9gb2ZgXG4vLyBsb29wIGlzIG5vbi10cml2aWFsLiBCYXNpY2FsbHksIHdlIGhhdmUgdG8gcGFyc2UgdGhlIGluaXQgYHZhcmBcbi8vIHN0YXRlbWVudCBvciBleHByZXNzaW9uLCBkaXNhbGxvd2luZyB0aGUgYGluYCBvcGVyYXRvciAoc2VlXG4vLyB0aGUgc2Vjb25kIHBhcmFtZXRlciB0byBgcGFyc2VFeHByZXNzaW9uYCksIGFuZCB0aGVuIGNoZWNrXG4vLyB3aGV0aGVyIHRoZSBuZXh0IHRva2VuIGlzIGBpbmAgb3IgYG9mYC4gV2hlbiB0aGVyZSBpcyBubyBpbml0XG4vLyBwYXJ0IChzZW1pY29sb24gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG9wZW5pbmcgcGFyZW50aGVzaXMpLCBpdFxuLy8gaXMgYSByZWd1bGFyIGBmb3JgIGxvb3AuXG5cbnBwJDEucGFyc2VGb3JTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpXG4gIHRoaXMubGFiZWxzLnB1c2gobG9vcExhYmVsKVxuICB0aGlzLmV4cGVjdCh0dC5wYXJlbkwpXG4gIGlmICh0aGlzLnR5cGUgPT09IHR0LnNlbWkpIHJldHVybiB0aGlzLnBhcnNlRm9yKG5vZGUsIG51bGwpXG4gIHZhciBpc0xldCA9IHRoaXMuaXNMZXQoKVxuICBpZiAodGhpcy50eXBlID09PSB0dC5fdmFyIHx8IHRoaXMudHlwZSA9PT0gdHQuX2NvbnN0IHx8IGlzTGV0KSB7XG4gICAgdmFyIGluaXQkMSA9IHRoaXMuc3RhcnROb2RlKCksIGtpbmQgPSBpc0xldCA/IFwibGV0XCIgOiB0aGlzLnZhbHVlXG4gICAgdGhpcy5uZXh0KClcbiAgICB0aGlzLnBhcnNlVmFyKGluaXQkMSwgdHJ1ZSwga2luZClcbiAgICB0aGlzLmZpbmlzaE5vZGUoaW5pdCQxLCBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIilcbiAgICBpZiAoKHRoaXMudHlwZSA9PT0gdHQuX2luIHx8ICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzLmlzQ29udGV4dHVhbChcIm9mXCIpKSkgJiYgaW5pdCQxLmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgIShraW5kICE9PSBcInZhclwiICYmIGluaXQkMS5kZWNsYXJhdGlvbnNbMF0uaW5pdCkpXG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUZvckluKG5vZGUsIGluaXQkMSlcbiAgICByZXR1cm4gdGhpcy5wYXJzZUZvcihub2RlLCBpbml0JDEpXG4gIH1cbiAgdmFyIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgPSBuZXcgRGVzdHJ1Y3R1cmluZ0Vycm9yc1xuICB2YXIgaW5pdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKHRydWUsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG4gIGlmICh0aGlzLnR5cGUgPT09IHR0Ll9pbiB8fCAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgdGhpcy5pc0NvbnRleHR1YWwoXCJvZlwiKSkpIHtcbiAgICB0aGlzLnRvQXNzaWduYWJsZShpbml0KVxuICAgIHRoaXMuY2hlY2tMVmFsKGluaXQpXG4gICAgdGhpcy5jaGVja1BhdHRlcm5FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5wYXJzZUZvckluKG5vZGUsIGluaXQpXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSlcbiAgfVxuICByZXR1cm4gdGhpcy5wYXJzZUZvcihub2RlLCBpbml0KVxufVxuXG5wcCQxLnBhcnNlRnVuY3Rpb25TdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlLCBpc0FzeW5jKSB7XG4gIHRoaXMubmV4dCgpXG4gIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24obm9kZSwgdHJ1ZSwgZmFsc2UsIGlzQXN5bmMpXG59XG5cbnBwJDEuaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50eXBlID09PSB0dC5fZnVuY3Rpb24gfHwgdGhpcy5pc0FzeW5jRnVuY3Rpb24oKVxufVxuXG5wcCQxLnBhcnNlSWZTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpXG4gIG5vZGUudGVzdCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKVxuICAvLyBhbGxvdyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW4gYnJhbmNoZXMsIGJ1dCBvbmx5IGluIG5vbi1zdHJpY3QgbW9kZVxuICBub2RlLmNvbnNlcXVlbnQgPSB0aGlzLnBhcnNlU3RhdGVtZW50KCF0aGlzLnN0cmljdCAmJiB0aGlzLmlzRnVuY3Rpb24oKSlcbiAgbm9kZS5hbHRlcm5hdGUgPSB0aGlzLmVhdCh0dC5fZWxzZSkgPyB0aGlzLnBhcnNlU3RhdGVtZW50KCF0aGlzLnN0cmljdCAmJiB0aGlzLmlzRnVuY3Rpb24oKSkgOiBudWxsXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJJZlN0YXRlbWVudFwiKVxufVxuXG5wcCQxLnBhcnNlUmV0dXJuU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICBpZiAoIXRoaXMuaW5GdW5jdGlvbiAmJiAhdGhpcy5vcHRpb25zLmFsbG93UmV0dXJuT3V0c2lkZUZ1bmN0aW9uKVxuICAgIHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCIncmV0dXJuJyBvdXRzaWRlIG9mIGZ1bmN0aW9uXCIpXG4gIHRoaXMubmV4dCgpXG5cbiAgLy8gSW4gYHJldHVybmAgKGFuZCBgYnJlYWtgL2Bjb250aW51ZWApLCB0aGUga2V5d29yZHMgd2l0aFxuICAvLyBvcHRpb25hbCBhcmd1bWVudHMsIHdlIGVhZ2VybHkgbG9vayBmb3IgYSBzZW1pY29sb24gb3IgdGhlXG4gIC8vIHBvc3NpYmlsaXR5IHRvIGluc2VydCBvbmUuXG5cbiAgaWYgKHRoaXMuZWF0KHR0LnNlbWkpIHx8IHRoaXMuaW5zZXJ0U2VtaWNvbG9uKCkpIG5vZGUuYXJndW1lbnQgPSBudWxsXG4gIGVsc2UgeyBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsgdGhpcy5zZW1pY29sb24oKSB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJSZXR1cm5TdGF0ZW1lbnRcIilcbn1cblxucHAkMS5wYXJzZVN3aXRjaFN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdGhpcy5uZXh0KClcbiAgbm9kZS5kaXNjcmltaW5hbnQgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKClcbiAgbm9kZS5jYXNlcyA9IFtdXG4gIHRoaXMuZXhwZWN0KHR0LmJyYWNlTClcbiAgdGhpcy5sYWJlbHMucHVzaChzd2l0Y2hMYWJlbClcblxuICAvLyBTdGF0ZW1lbnRzIHVuZGVyIG11c3QgYmUgZ3JvdXBlZCAoYnkgbGFiZWwpIGluIFN3aXRjaENhc2VcbiAgLy8gbm9kZXMuIGBjdXJgIGlzIHVzZWQgdG8ga2VlcCB0aGUgbm9kZSB0aGF0IHdlIGFyZSBjdXJyZW50bHlcbiAgLy8gYWRkaW5nIHN0YXRlbWVudHMgdG8uXG5cbiAgZm9yICh2YXIgY3VyLCBzYXdEZWZhdWx0ID0gZmFsc2U7IHRoaXMudHlwZSAhPSB0dC5icmFjZVI7KSB7XG4gICAgaWYgKHRoaXMkMS50eXBlID09PSB0dC5fY2FzZSB8fCB0aGlzJDEudHlwZSA9PT0gdHQuX2RlZmF1bHQpIHtcbiAgICAgIHZhciBpc0Nhc2UgPSB0aGlzJDEudHlwZSA9PT0gdHQuX2Nhc2VcbiAgICAgIGlmIChjdXIpIHRoaXMkMS5maW5pc2hOb2RlKGN1ciwgXCJTd2l0Y2hDYXNlXCIpXG4gICAgICBub2RlLmNhc2VzLnB1c2goY3VyID0gdGhpcyQxLnN0YXJ0Tm9kZSgpKVxuICAgICAgY3VyLmNvbnNlcXVlbnQgPSBbXVxuICAgICAgdGhpcyQxLm5leHQoKVxuICAgICAgaWYgKGlzQ2FzZSkge1xuICAgICAgICBjdXIudGVzdCA9IHRoaXMkMS5wYXJzZUV4cHJlc3Npb24oKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNhd0RlZmF1bHQpIHRoaXMkMS5yYWlzZVJlY292ZXJhYmxlKHRoaXMkMS5sYXN0VG9rU3RhcnQsIFwiTXVsdGlwbGUgZGVmYXVsdCBjbGF1c2VzXCIpXG4gICAgICAgIHNhd0RlZmF1bHQgPSB0cnVlXG4gICAgICAgIGN1ci50ZXN0ID0gbnVsbFxuICAgICAgfVxuICAgICAgdGhpcyQxLmV4cGVjdCh0dC5jb2xvbilcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjdXIpIHRoaXMkMS51bmV4cGVjdGVkKClcbiAgICAgIGN1ci5jb25zZXF1ZW50LnB1c2godGhpcyQxLnBhcnNlU3RhdGVtZW50KHRydWUpKVxuICAgIH1cbiAgfVxuICBpZiAoY3VyKSB0aGlzLmZpbmlzaE5vZGUoY3VyLCBcIlN3aXRjaENhc2VcIilcbiAgdGhpcy5uZXh0KCkgLy8gQ2xvc2luZyBicmFjZVxuICB0aGlzLmxhYmVscy5wb3AoKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiU3dpdGNoU3RhdGVtZW50XCIpXG59XG5cbnBwJDEucGFyc2VUaHJvd1N0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KClcbiAgaWYgKGxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rRW5kLCB0aGlzLnN0YXJ0KSkpXG4gICAgdGhpcy5yYWlzZSh0aGlzLmxhc3RUb2tFbmQsIFwiSWxsZWdhbCBuZXdsaW5lIGFmdGVyIHRocm93XCIpXG4gIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpXG4gIHRoaXMuc2VtaWNvbG9uKClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlRocm93U3RhdGVtZW50XCIpXG59XG5cbi8vIFJldXNlZCBlbXB0eSBhcnJheSBhZGRlZCBmb3Igbm9kZSBmaWVsZHMgdGhhdCBhcmUgYWx3YXlzIGVtcHR5LlxuXG52YXIgZW1wdHkgPSBbXVxuXG5wcCQxLnBhcnNlVHJ5U3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKVxuICBub2RlLmJsb2NrID0gdGhpcy5wYXJzZUJsb2NrKClcbiAgbm9kZS5oYW5kbGVyID0gbnVsbFxuICBpZiAodGhpcy50eXBlID09PSB0dC5fY2F0Y2gpIHtcbiAgICB2YXIgY2xhdXNlID0gdGhpcy5zdGFydE5vZGUoKVxuICAgIHRoaXMubmV4dCgpXG4gICAgdGhpcy5leHBlY3QodHQucGFyZW5MKVxuICAgIGNsYXVzZS5wYXJhbSA9IHRoaXMucGFyc2VCaW5kaW5nQXRvbSgpXG4gICAgdGhpcy5jaGVja0xWYWwoY2xhdXNlLnBhcmFtLCB0cnVlKVxuICAgIHRoaXMuZXhwZWN0KHR0LnBhcmVuUilcbiAgICBjbGF1c2UuYm9keSA9IHRoaXMucGFyc2VCbG9jaygpXG4gICAgbm9kZS5oYW5kbGVyID0gdGhpcy5maW5pc2hOb2RlKGNsYXVzZSwgXCJDYXRjaENsYXVzZVwiKVxuICB9XG4gIG5vZGUuZmluYWxpemVyID0gdGhpcy5lYXQodHQuX2ZpbmFsbHkpID8gdGhpcy5wYXJzZUJsb2NrKCkgOiBudWxsXG4gIGlmICghbm9kZS5oYW5kbGVyICYmICFub2RlLmZpbmFsaXplcilcbiAgICB0aGlzLnJhaXNlKG5vZGUuc3RhcnQsIFwiTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGNsYXVzZVwiKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiVHJ5U3RhdGVtZW50XCIpXG59XG5cbnBwJDEucGFyc2VWYXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlLCBraW5kKSB7XG4gIHRoaXMubmV4dCgpXG4gIHRoaXMucGFyc2VWYXIobm9kZSwgZmFsc2UsIGtpbmQpXG4gIHRoaXMuc2VtaWNvbG9uKClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIilcbn1cblxucHAkMS5wYXJzZVdoaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKVxuICBub2RlLnRlc3QgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKClcbiAgdGhpcy5sYWJlbHMucHVzaChsb29wTGFiZWwpXG4gIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoZmFsc2UpXG4gIHRoaXMubGFiZWxzLnBvcCgpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJXaGlsZVN0YXRlbWVudFwiKVxufVxuXG5wcCQxLnBhcnNlV2l0aFN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgaWYgKHRoaXMuc3RyaWN0KSB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ3dpdGgnIGluIHN0cmljdCBtb2RlXCIpXG4gIHRoaXMubmV4dCgpXG4gIG5vZGUub2JqZWN0ID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpXG4gIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoZmFsc2UpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJXaXRoU3RhdGVtZW50XCIpXG59XG5cbnBwJDEucGFyc2VFbXB0eVN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkVtcHR5U3RhdGVtZW50XCIpXG59XG5cbnBwJDEucGFyc2VMYWJlbGVkU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwgbWF5YmVOYW1lLCBleHByKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYWJlbHMubGVuZ3RoOyArK2kpXG4gICAgaWYgKHRoaXMkMS5sYWJlbHNbaV0ubmFtZSA9PT0gbWF5YmVOYW1lKSB0aGlzJDEucmFpc2UoZXhwci5zdGFydCwgXCJMYWJlbCAnXCIgKyBtYXliZU5hbWUgKyBcIicgaXMgYWxyZWFkeSBkZWNsYXJlZFwiKVxuICB2YXIga2luZCA9IHRoaXMudHlwZS5pc0xvb3AgPyBcImxvb3BcIiA6IHRoaXMudHlwZSA9PT0gdHQuX3N3aXRjaCA/IFwic3dpdGNoXCIgOiBudWxsXG4gIGZvciAodmFyIGkkMSA9IHRoaXMubGFiZWxzLmxlbmd0aCAtIDE7IGkkMSA+PSAwOyBpJDEtLSkge1xuICAgIHZhciBsYWJlbCA9IHRoaXMkMS5sYWJlbHNbaSQxXVxuICAgIGlmIChsYWJlbC5zdGF0ZW1lbnRTdGFydCA9PSBub2RlLnN0YXJ0KSB7XG4gICAgICBsYWJlbC5zdGF0ZW1lbnRTdGFydCA9IHRoaXMkMS5zdGFydFxuICAgICAgbGFiZWwua2luZCA9IGtpbmRcbiAgICB9IGVsc2UgYnJlYWtcbiAgfVxuICB0aGlzLmxhYmVscy5wdXNoKHtuYW1lOiBtYXliZU5hbWUsIGtpbmQ6IGtpbmQsIHN0YXRlbWVudFN0YXJ0OiB0aGlzLnN0YXJ0fSlcbiAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCh0cnVlKVxuICBpZiAobm9kZS5ib2R5LnR5cGUgPT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIgfHxcbiAgICAgIG5vZGUuYm9keS50eXBlID09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiICYmICh0aGlzLnN0cmljdCB8fCBub2RlLmJvZHkua2luZCAhPSBcInZhclwiKSB8fFxuICAgICAgbm9kZS5ib2R5LnR5cGUgPT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgJiYgKHRoaXMuc3RyaWN0IHx8IG5vZGUuYm9keS5nZW5lcmF0b3IpKVxuICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLmJvZHkuc3RhcnQsIFwiSW52YWxpZCBsYWJlbGVkIGRlY2xhcmF0aW9uXCIpXG4gIHRoaXMubGFiZWxzLnBvcCgpXG4gIG5vZGUubGFiZWwgPSBleHByXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJMYWJlbGVkU3RhdGVtZW50XCIpXG59XG5cbnBwJDEucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwgZXhwcikge1xuICBub2RlLmV4cHJlc3Npb24gPSBleHByXG4gIHRoaXMuc2VtaWNvbG9uKClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIilcbn1cblxuLy8gUGFyc2UgYSBzZW1pY29sb24tZW5jbG9zZWQgYmxvY2sgb2Ygc3RhdGVtZW50cywgaGFuZGxpbmcgYFwidXNlXG4vLyBzdHJpY3RcImAgZGVjbGFyYXRpb25zIHdoZW4gYGFsbG93U3RyaWN0YCBpcyB0cnVlICh1c2VkIGZvclxuLy8gZnVuY3Rpb24gYm9kaWVzKS5cblxucHAkMS5wYXJzZUJsb2NrID0gZnVuY3Rpb24oKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKVxuICBub2RlLmJvZHkgPSBbXVxuICB0aGlzLmV4cGVjdCh0dC5icmFjZUwpXG4gIHdoaWxlICghdGhpcy5lYXQodHQuYnJhY2VSKSkge1xuICAgIHZhciBzdG10ID0gdGhpcyQxLnBhcnNlU3RhdGVtZW50KHRydWUpXG4gICAgbm9kZS5ib2R5LnB1c2goc3RtdClcbiAgfVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQmxvY2tTdGF0ZW1lbnRcIilcbn1cblxuLy8gUGFyc2UgYSByZWd1bGFyIGBmb3JgIGxvb3AuIFRoZSBkaXNhbWJpZ3VhdGlvbiBjb2RlIGluXG4vLyBgcGFyc2VTdGF0ZW1lbnRgIHdpbGwgYWxyZWFkeSBoYXZlIHBhcnNlZCB0aGUgaW5pdCBzdGF0ZW1lbnQgb3Jcbi8vIGV4cHJlc3Npb24uXG5cbnBwJDEucGFyc2VGb3IgPSBmdW5jdGlvbihub2RlLCBpbml0KSB7XG4gIG5vZGUuaW5pdCA9IGluaXRcbiAgdGhpcy5leHBlY3QodHQuc2VtaSlcbiAgbm9kZS50ZXN0ID0gdGhpcy50eXBlID09PSB0dC5zZW1pID8gbnVsbCA6IHRoaXMucGFyc2VFeHByZXNzaW9uKClcbiAgdGhpcy5leHBlY3QodHQuc2VtaSlcbiAgbm9kZS51cGRhdGUgPSB0aGlzLnR5cGUgPT09IHR0LnBhcmVuUiA/IG51bGwgOiB0aGlzLnBhcnNlRXhwcmVzc2lvbigpXG4gIHRoaXMuZXhwZWN0KHR0LnBhcmVuUilcbiAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudChmYWxzZSlcbiAgdGhpcy5sYWJlbHMucG9wKClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkZvclN0YXRlbWVudFwiKVxufVxuXG4vLyBQYXJzZSBhIGBmb3JgL2BpbmAgYW5kIGBmb3JgL2BvZmAgbG9vcCwgd2hpY2ggYXJlIGFsbW9zdFxuLy8gc2FtZSBmcm9tIHBhcnNlcidzIHBlcnNwZWN0aXZlLlxuXG5wcCQxLnBhcnNlRm9ySW4gPSBmdW5jdGlvbihub2RlLCBpbml0KSB7XG4gIHZhciB0eXBlID0gdGhpcy50eXBlID09PSB0dC5faW4gPyBcIkZvckluU3RhdGVtZW50XCIgOiBcIkZvck9mU3RhdGVtZW50XCJcbiAgdGhpcy5uZXh0KClcbiAgbm9kZS5sZWZ0ID0gaW5pdFxuICBub2RlLnJpZ2h0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKVxuICB0aGlzLmV4cGVjdCh0dC5wYXJlblIpXG4gIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoZmFsc2UpXG4gIHRoaXMubGFiZWxzLnBvcCgpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgdHlwZSlcbn1cblxuLy8gUGFyc2UgYSBsaXN0IG9mIHZhcmlhYmxlIGRlY2xhcmF0aW9ucy5cblxucHAkMS5wYXJzZVZhciA9IGZ1bmN0aW9uKG5vZGUsIGlzRm9yLCBraW5kKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIG5vZGUuZGVjbGFyYXRpb25zID0gW11cbiAgbm9kZS5raW5kID0ga2luZFxuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRlY2wgPSB0aGlzJDEuc3RhcnROb2RlKClcbiAgICB0aGlzJDEucGFyc2VWYXJJZChkZWNsKVxuICAgIGlmICh0aGlzJDEuZWF0KHR0LmVxKSkge1xuICAgICAgZGVjbC5pbml0ID0gdGhpcyQxLnBhcnNlTWF5YmVBc3NpZ24oaXNGb3IpXG4gICAgfSBlbHNlIGlmIChraW5kID09PSBcImNvbnN0XCIgJiYgISh0aGlzJDEudHlwZSA9PT0gdHQuX2luIHx8ICh0aGlzJDEub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHRoaXMkMS5pc0NvbnRleHR1YWwoXCJvZlwiKSkpKSB7XG4gICAgICB0aGlzJDEudW5leHBlY3RlZCgpXG4gICAgfSBlbHNlIGlmIChkZWNsLmlkLnR5cGUgIT0gXCJJZGVudGlmaWVyXCIgJiYgIShpc0ZvciAmJiAodGhpcyQxLnR5cGUgPT09IHR0Ll9pbiB8fCB0aGlzJDEuaXNDb250ZXh0dWFsKFwib2ZcIikpKSkge1xuICAgICAgdGhpcyQxLnJhaXNlKHRoaXMkMS5sYXN0VG9rRW5kLCBcIkNvbXBsZXggYmluZGluZyBwYXR0ZXJucyByZXF1aXJlIGFuIGluaXRpYWxpemF0aW9uIHZhbHVlXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRlY2wuaW5pdCA9IG51bGxcbiAgICB9XG4gICAgbm9kZS5kZWNsYXJhdGlvbnMucHVzaCh0aGlzJDEuZmluaXNoTm9kZShkZWNsLCBcIlZhcmlhYmxlRGVjbGFyYXRvclwiKSlcbiAgICBpZiAoIXRoaXMkMS5lYXQodHQuY29tbWEpKSBicmVha1xuICB9XG4gIHJldHVybiBub2RlXG59XG5cbnBwJDEucGFyc2VWYXJJZCA9IGZ1bmN0aW9uKGRlY2wpIHtcbiAgZGVjbC5pZCA9IHRoaXMucGFyc2VCaW5kaW5nQXRvbSgpXG4gIHRoaXMuY2hlY2tMVmFsKGRlY2wuaWQsIHRydWUpXG59XG5cbi8vIFBhcnNlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gb3IgbGl0ZXJhbCAoZGVwZW5kaW5nIG9uIHRoZVxuLy8gYGlzU3RhdGVtZW50YCBwYXJhbWV0ZXIpLlxuXG5wcCQxLnBhcnNlRnVuY3Rpb24gPSBmdW5jdGlvbihub2RlLCBpc1N0YXRlbWVudCwgYWxsb3dFeHByZXNzaW9uQm9keSwgaXNBc3luYykge1xuICB0aGlzLmluaXRGdW5jdGlvbihub2RlKVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgIWlzQXN5bmMpXG4gICAgbm9kZS5nZW5lcmF0b3IgPSB0aGlzLmVhdCh0dC5zdGFyKVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpXG4gICAgbm9kZS5hc3luYyA9ICEhaXNBc3luY1xuXG4gIGlmIChpc1N0YXRlbWVudCA9PSBudWxsKVxuICAgIGlzU3RhdGVtZW50ID0gdGhpcy50eXBlID09IHR0Lm5hbWVcbiAgaWYgKGlzU3RhdGVtZW50KVxuICAgIG5vZGUuaWQgPSB0aGlzLnBhcnNlSWRlbnQoKVxuXG4gIHZhciBvbGRJbkdlbiA9IHRoaXMuaW5HZW5lcmF0b3IsIG9sZEluQXN5bmMgPSB0aGlzLmluQXN5bmMsXG4gICAgICBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgb2xkSW5GdW5jID0gdGhpcy5pbkZ1bmN0aW9uXG4gIHRoaXMuaW5HZW5lcmF0b3IgPSBub2RlLmdlbmVyYXRvclxuICB0aGlzLmluQXN5bmMgPSBub2RlLmFzeW5jXG4gIHRoaXMueWllbGRQb3MgPSAwXG4gIHRoaXMuYXdhaXRQb3MgPSAwXG4gIHRoaXMuaW5GdW5jdGlvbiA9IHRydWVcblxuICBpZiAoIWlzU3RhdGVtZW50ICYmIHRoaXMudHlwZSA9PT0gdHQubmFtZSlcbiAgICBub2RlLmlkID0gdGhpcy5wYXJzZUlkZW50KClcbiAgdGhpcy5wYXJzZUZ1bmN0aW9uUGFyYW1zKG5vZGUpXG4gIHRoaXMucGFyc2VGdW5jdGlvbkJvZHkobm9kZSwgYWxsb3dFeHByZXNzaW9uQm9keSlcblxuICB0aGlzLmluR2VuZXJhdG9yID0gb2xkSW5HZW5cbiAgdGhpcy5pbkFzeW5jID0gb2xkSW5Bc3luY1xuICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3NcbiAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zXG4gIHRoaXMuaW5GdW5jdGlvbiA9IG9sZEluRnVuY1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIGlzU3RhdGVtZW50ID8gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgOiBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiKVxufVxuXG5wcCQxLnBhcnNlRnVuY3Rpb25QYXJhbXMgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMuZXhwZWN0KHR0LnBhcmVuTClcbiAgbm9kZS5wYXJhbXMgPSB0aGlzLnBhcnNlQmluZGluZ0xpc3QodHQucGFyZW5SLCBmYWxzZSwgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgsIHRydWUpXG4gIHRoaXMuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zKClcbn1cblxuLy8gUGFyc2UgYSBjbGFzcyBkZWNsYXJhdGlvbiBvciBsaXRlcmFsIChkZXBlbmRpbmcgb24gdGhlXG4vLyBgaXNTdGF0ZW1lbnRgIHBhcmFtZXRlcikuXG5cbnBwJDEucGFyc2VDbGFzcyA9IGZ1bmN0aW9uKG5vZGUsIGlzU3RhdGVtZW50KSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHRoaXMubmV4dCgpXG4gIGlmIChpc1N0YXRlbWVudCA9PSBudWxsKSBpc1N0YXRlbWVudCA9IHRoaXMudHlwZSA9PT0gdHQubmFtZVxuICB0aGlzLnBhcnNlQ2xhc3NJZChub2RlLCBpc1N0YXRlbWVudClcbiAgdGhpcy5wYXJzZUNsYXNzU3VwZXIobm9kZSlcbiAgdmFyIGNsYXNzQm9keSA9IHRoaXMuc3RhcnROb2RlKClcbiAgdmFyIGhhZENvbnN0cnVjdG9yID0gZmFsc2VcbiAgY2xhc3NCb2R5LmJvZHkgPSBbXVxuICB0aGlzLmV4cGVjdCh0dC5icmFjZUwpXG4gIHdoaWxlICghdGhpcy5lYXQodHQuYnJhY2VSKSkge1xuICAgIGlmICh0aGlzJDEuZWF0KHR0LnNlbWkpKSBjb250aW51ZVxuICAgIHZhciBtZXRob2QgPSB0aGlzJDEuc3RhcnROb2RlKClcbiAgICB2YXIgaXNHZW5lcmF0b3IgPSB0aGlzJDEuZWF0KHR0LnN0YXIpXG4gICAgdmFyIGlzQXN5bmMgPSBmYWxzZVxuICAgIHZhciBpc01heWJlU3RhdGljID0gdGhpcyQxLnR5cGUgPT09IHR0Lm5hbWUgJiYgdGhpcyQxLnZhbHVlID09PSBcInN0YXRpY1wiXG4gICAgdGhpcyQxLnBhcnNlUHJvcGVydHlOYW1lKG1ldGhvZClcbiAgICBtZXRob2Quc3RhdGljID0gaXNNYXliZVN0YXRpYyAmJiB0aGlzJDEudHlwZSAhPT0gdHQucGFyZW5MXG4gICAgaWYgKG1ldGhvZC5zdGF0aWMpIHtcbiAgICAgIGlmIChpc0dlbmVyYXRvcikgdGhpcyQxLnVuZXhwZWN0ZWQoKVxuICAgICAgaXNHZW5lcmF0b3IgPSB0aGlzJDEuZWF0KHR0LnN0YXIpXG4gICAgICB0aGlzJDEucGFyc2VQcm9wZXJ0eU5hbWUobWV0aG9kKVxuICAgIH1cbiAgICBpZiAodGhpcyQxLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCAmJiAhaXNHZW5lcmF0b3IgJiYgIW1ldGhvZC5jb21wdXRlZCAmJlxuICAgICAgICBtZXRob2Qua2V5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmIG1ldGhvZC5rZXkubmFtZSA9PT0gXCJhc3luY1wiICYmIHRoaXMkMS50eXBlICE9PSB0dC5wYXJlbkwgJiZcbiAgICAgICAgIXRoaXMkMS5jYW5JbnNlcnRTZW1pY29sb24oKSkge1xuICAgICAgaXNBc3luYyA9IHRydWVcbiAgICAgIHRoaXMkMS5wYXJzZVByb3BlcnR5TmFtZShtZXRob2QpXG4gICAgfVxuICAgIG1ldGhvZC5raW5kID0gXCJtZXRob2RcIlxuICAgIHZhciBpc0dldFNldCA9IGZhbHNlXG4gICAgaWYgKCFtZXRob2QuY29tcHV0ZWQpIHtcbiAgICAgIHZhciBrZXkgPSBtZXRob2Qua2V5O1xuICAgICAgaWYgKCFpc0dlbmVyYXRvciAmJiAhaXNBc3luYyAmJiBrZXkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYgdGhpcyQxLnR5cGUgIT09IHR0LnBhcmVuTCAmJiAoa2V5Lm5hbWUgPT09IFwiZ2V0XCIgfHwga2V5Lm5hbWUgPT09IFwic2V0XCIpKSB7XG4gICAgICAgIGlzR2V0U2V0ID0gdHJ1ZVxuICAgICAgICBtZXRob2Qua2luZCA9IGtleS5uYW1lXG4gICAgICAgIGtleSA9IHRoaXMkMS5wYXJzZVByb3BlcnR5TmFtZShtZXRob2QpXG4gICAgICB9XG4gICAgICBpZiAoIW1ldGhvZC5zdGF0aWMgJiYgKGtleS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJiBrZXkubmFtZSA9PT0gXCJjb25zdHJ1Y3RvclwiIHx8XG4gICAgICAgICAga2V5LnR5cGUgPT09IFwiTGl0ZXJhbFwiICYmIGtleS52YWx1ZSA9PT0gXCJjb25zdHJ1Y3RvclwiKSkge1xuICAgICAgICBpZiAoaGFkQ29uc3RydWN0b3IpIHRoaXMkMS5yYWlzZShrZXkuc3RhcnQsIFwiRHVwbGljYXRlIGNvbnN0cnVjdG9yIGluIHRoZSBzYW1lIGNsYXNzXCIpXG4gICAgICAgIGlmIChpc0dldFNldCkgdGhpcyQxLnJhaXNlKGtleS5zdGFydCwgXCJDb25zdHJ1Y3RvciBjYW4ndCBoYXZlIGdldC9zZXQgbW9kaWZpZXJcIilcbiAgICAgICAgaWYgKGlzR2VuZXJhdG9yKSB0aGlzJDEucmFpc2Uoa2V5LnN0YXJ0LCBcIkNvbnN0cnVjdG9yIGNhbid0IGJlIGEgZ2VuZXJhdG9yXCIpXG4gICAgICAgIGlmIChpc0FzeW5jKSB0aGlzJDEucmFpc2Uoa2V5LnN0YXJ0LCBcIkNvbnN0cnVjdG9yIGNhbid0IGJlIGFuIGFzeW5jIG1ldGhvZFwiKVxuICAgICAgICBtZXRob2Qua2luZCA9IFwiY29uc3RydWN0b3JcIlxuICAgICAgICBoYWRDb25zdHJ1Y3RvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcyQxLnBhcnNlQ2xhc3NNZXRob2QoY2xhc3NCb2R5LCBtZXRob2QsIGlzR2VuZXJhdG9yLCBpc0FzeW5jKVxuICAgIGlmIChpc0dldFNldCkge1xuICAgICAgdmFyIHBhcmFtQ291bnQgPSBtZXRob2Qua2luZCA9PT0gXCJnZXRcIiA/IDAgOiAxXG4gICAgICBpZiAobWV0aG9kLnZhbHVlLnBhcmFtcy5sZW5ndGggIT09IHBhcmFtQ291bnQpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gbWV0aG9kLnZhbHVlLnN0YXJ0XG4gICAgICAgIGlmIChtZXRob2Qua2luZCA9PT0gXCJnZXRcIilcbiAgICAgICAgICB0aGlzJDEucmFpc2VSZWNvdmVyYWJsZShzdGFydCwgXCJnZXR0ZXIgc2hvdWxkIGhhdmUgbm8gcGFyYW1zXCIpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aGlzJDEucmFpc2VSZWNvdmVyYWJsZShzdGFydCwgXCJzZXR0ZXIgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgcGFyYW1cIilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtZXRob2Qua2luZCA9PT0gXCJzZXRcIiAmJiBtZXRob2QudmFsdWUucGFyYW1zWzBdLnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIilcbiAgICAgICAgICB0aGlzJDEucmFpc2VSZWNvdmVyYWJsZShtZXRob2QudmFsdWUucGFyYW1zWzBdLnN0YXJ0LCBcIlNldHRlciBjYW5ub3QgdXNlIHJlc3QgcGFyYW1zXCIpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIG5vZGUuYm9keSA9IHRoaXMuZmluaXNoTm9kZShjbGFzc0JvZHksIFwiQ2xhc3NCb2R5XCIpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgaXNTdGF0ZW1lbnQgPyBcIkNsYXNzRGVjbGFyYXRpb25cIiA6IFwiQ2xhc3NFeHByZXNzaW9uXCIpXG59XG5cbnBwJDEucGFyc2VDbGFzc01ldGhvZCA9IGZ1bmN0aW9uKGNsYXNzQm9keSwgbWV0aG9kLCBpc0dlbmVyYXRvciwgaXNBc3luYykge1xuICBtZXRob2QudmFsdWUgPSB0aGlzLnBhcnNlTWV0aG9kKGlzR2VuZXJhdG9yLCBpc0FzeW5jKVxuICBjbGFzc0JvZHkuYm9keS5wdXNoKHRoaXMuZmluaXNoTm9kZShtZXRob2QsIFwiTWV0aG9kRGVmaW5pdGlvblwiKSlcbn1cblxucHAkMS5wYXJzZUNsYXNzSWQgPSBmdW5jdGlvbihub2RlLCBpc1N0YXRlbWVudCkge1xuICBub2RlLmlkID0gdGhpcy50eXBlID09PSB0dC5uYW1lID8gdGhpcy5wYXJzZUlkZW50KCkgOiBpc1N0YXRlbWVudCA/IHRoaXMudW5leHBlY3RlZCgpIDogbnVsbFxufVxuXG5wcCQxLnBhcnNlQ2xhc3NTdXBlciA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgbm9kZS5zdXBlckNsYXNzID0gdGhpcy5lYXQodHQuX2V4dGVuZHMpID8gdGhpcy5wYXJzZUV4cHJTdWJzY3JpcHRzKCkgOiBudWxsXG59XG5cbi8vIFBhcnNlcyBtb2R1bGUgZXhwb3J0IGRlY2xhcmF0aW9uLlxuXG5wcCQxLnBhcnNlRXhwb3J0ID0gZnVuY3Rpb24obm9kZSwgZXhwb3J0cykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB0aGlzLm5leHQoKVxuICAvLyBleHBvcnQgKiBmcm9tICcuLi4nXG4gIGlmICh0aGlzLmVhdCh0dC5zdGFyKSkge1xuICAgIHRoaXMuZXhwZWN0Q29udGV4dHVhbChcImZyb21cIilcbiAgICBub2RlLnNvdXJjZSA9IHRoaXMudHlwZSA9PT0gdHQuc3RyaW5nID8gdGhpcy5wYXJzZUV4cHJBdG9tKCkgOiB0aGlzLnVuZXhwZWN0ZWQoKVxuICAgIHRoaXMuc2VtaWNvbG9uKClcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwb3J0QWxsRGVjbGFyYXRpb25cIilcbiAgfVxuICBpZiAodGhpcy5lYXQodHQuX2RlZmF1bHQpKSB7IC8vIGV4cG9ydCBkZWZhdWx0IC4uLlxuICAgIHRoaXMuY2hlY2tFeHBvcnQoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHRoaXMubGFzdFRva1N0YXJ0KVxuICAgIHZhciBpc0FzeW5jXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHQuX2Z1bmN0aW9uIHx8IChpc0FzeW5jID0gdGhpcy5pc0FzeW5jRnVuY3Rpb24oKSkpIHtcbiAgICAgIHZhciBmTm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgICAgIHRoaXMubmV4dCgpXG4gICAgICBpZiAoaXNBc3luYykgdGhpcy5uZXh0KClcbiAgICAgIG5vZGUuZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb24oZk5vZGUsIG51bGwsIGZhbHNlLCBpc0FzeW5jKVxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSB0dC5fY2xhc3MpIHtcbiAgICAgIHZhciBjTm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgICAgIG5vZGUuZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlQ2xhc3MoY05vZGUsIG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKVxuICAgICAgdGhpcy5zZW1pY29sb24oKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCIpXG4gIH1cbiAgLy8gZXhwb3J0IHZhcnxjb25zdHxsZXR8ZnVuY3Rpb258Y2xhc3MgLi4uXG4gIGlmICh0aGlzLnNob3VsZFBhcnNlRXhwb3J0U3RhdGVtZW50KCkpIHtcbiAgICBub2RlLmRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZVN0YXRlbWVudCh0cnVlKVxuICAgIGlmIChub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKVxuICAgICAgdGhpcy5jaGVja1ZhcmlhYmxlRXhwb3J0KGV4cG9ydHMsIG5vZGUuZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zKVxuICAgIGVsc2VcbiAgICAgIHRoaXMuY2hlY2tFeHBvcnQoZXhwb3J0cywgbm9kZS5kZWNsYXJhdGlvbi5pZC5uYW1lLCBub2RlLmRlY2xhcmF0aW9uLmlkLnN0YXJ0KVxuICAgIG5vZGUuc3BlY2lmaWVycyA9IFtdXG4gICAgbm9kZS5zb3VyY2UgPSBudWxsXG4gIH0gZWxzZSB7IC8vIGV4cG9ydCB7IHgsIHkgYXMgeiB9IFtmcm9tICcuLi4nXVxuICAgIG5vZGUuZGVjbGFyYXRpb24gPSBudWxsXG4gICAgbm9kZS5zcGVjaWZpZXJzID0gdGhpcy5wYXJzZUV4cG9ydFNwZWNpZmllcnMoZXhwb3J0cylcbiAgICBpZiAodGhpcy5lYXRDb250ZXh0dWFsKFwiZnJvbVwiKSkge1xuICAgICAgbm9kZS5zb3VyY2UgPSB0aGlzLnR5cGUgPT09IHR0LnN0cmluZyA/IHRoaXMucGFyc2VFeHByQXRvbSgpIDogdGhpcy51bmV4cGVjdGVkKClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hlY2sgZm9yIGtleXdvcmRzIHVzZWQgYXMgbG9jYWwgbmFtZXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzJDEua2V5d29yZHMudGVzdChub2RlLnNwZWNpZmllcnNbaV0ubG9jYWwubmFtZSkgfHwgdGhpcyQxLnJlc2VydmVkV29yZHMudGVzdChub2RlLnNwZWNpZmllcnNbaV0ubG9jYWwubmFtZSkpIHtcbiAgICAgICAgICB0aGlzJDEudW5leHBlY3RlZChub2RlLnNwZWNpZmllcnNbaV0ubG9jYWwuc3RhcnQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZS5zb3VyY2UgPSBudWxsXG4gICAgfVxuICAgIHRoaXMuc2VtaWNvbG9uKClcbiAgfVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwb3J0TmFtZWREZWNsYXJhdGlvblwiKVxufVxuXG5wcCQxLmNoZWNrRXhwb3J0ID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgcG9zKSB7XG4gIGlmICghZXhwb3J0cykgcmV0dXJuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgbmFtZSkpXG4gICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHBvcywgXCJEdXBsaWNhdGUgZXhwb3J0ICdcIiArIG5hbWUgKyBcIidcIilcbiAgZXhwb3J0c1tuYW1lXSA9IHRydWVcbn1cblxucHAkMS5jaGVja1BhdHRlcm5FeHBvcnQgPSBmdW5jdGlvbihleHBvcnRzLCBwYXQpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIHR5cGUgPSBwYXQudHlwZVxuICBpZiAodHlwZSA9PSBcIklkZW50aWZpZXJcIilcbiAgICB0aGlzLmNoZWNrRXhwb3J0KGV4cG9ydHMsIHBhdC5uYW1lLCBwYXQuc3RhcnQpXG4gIGVsc2UgaWYgKHR5cGUgPT0gXCJPYmplY3RQYXR0ZXJuXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXQucHJvcGVydGllcy5sZW5ndGg7ICsraSlcbiAgICAgIHRoaXMkMS5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgcGF0LnByb3BlcnRpZXNbaV0udmFsdWUpXG4gIGVsc2UgaWYgKHR5cGUgPT0gXCJBcnJheVBhdHRlcm5cIilcbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwYXQuZWxlbWVudHMubGVuZ3RoOyArK2kkMSkge1xuICAgICAgdmFyIGVsdCA9IHBhdC5lbGVtZW50c1tpJDFdXG4gICAgICBpZiAoZWx0KSB0aGlzJDEuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIGVsdClcbiAgICB9XG4gIGVsc2UgaWYgKHR5cGUgPT0gXCJBc3NpZ25tZW50UGF0dGVyblwiKVxuICAgIHRoaXMuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIHBhdC5sZWZ0KVxuICBlbHNlIGlmICh0eXBlID09IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgICB0aGlzLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBwYXQuZXhwcmVzc2lvbilcbn1cblxucHAkMS5jaGVja1ZhcmlhYmxlRXhwb3J0ID0gZnVuY3Rpb24oZXhwb3J0cywgZGVjbHMpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKCFleHBvcnRzKSByZXR1cm5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWNscy5sZW5ndGg7IGkrKylcbiAgICB0aGlzJDEuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIGRlY2xzW2ldLmlkKVxufVxuXG5wcCQxLnNob3VsZFBhcnNlRXhwb3J0U3RhdGVtZW50ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnR5cGUua2V5d29yZCA9PT0gXCJ2YXJcIlxuICAgIHx8IHRoaXMudHlwZS5rZXl3b3JkID09PSBcImNvbnN0XCJcbiAgICB8fCB0aGlzLnR5cGUua2V5d29yZCA9PT0gXCJjbGFzc1wiXG4gICAgfHwgdGhpcy50eXBlLmtleXdvcmQgPT09IFwiZnVuY3Rpb25cIlxuICAgIHx8IHRoaXMuaXNMZXQoKVxuICAgIHx8IHRoaXMuaXNBc3luY0Z1bmN0aW9uKClcbn1cblxuLy8gUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlIGV4cG9ydHMuXG5cbnBwJDEucGFyc2VFeHBvcnRTcGVjaWZpZXJzID0gZnVuY3Rpb24oZXhwb3J0cykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgbm9kZXMgPSBbXSwgZmlyc3QgPSB0cnVlXG4gIC8vIGV4cG9ydCB7IHgsIHkgYXMgeiB9IFtmcm9tICcuLi4nXVxuICB0aGlzLmV4cGVjdCh0dC5icmFjZUwpXG4gIHdoaWxlICghdGhpcy5lYXQodHQuYnJhY2VSKSkge1xuICAgIGlmICghZmlyc3QpIHtcbiAgICAgIHRoaXMkMS5leHBlY3QodHQuY29tbWEpXG4gICAgICBpZiAodGhpcyQxLmFmdGVyVHJhaWxpbmdDb21tYSh0dC5icmFjZVIpKSBicmVha1xuICAgIH0gZWxzZSBmaXJzdCA9IGZhbHNlXG5cbiAgICB2YXIgbm9kZSA9IHRoaXMkMS5zdGFydE5vZGUoKVxuICAgIG5vZGUubG9jYWwgPSB0aGlzJDEucGFyc2VJZGVudCh0cnVlKVxuICAgIG5vZGUuZXhwb3J0ZWQgPSB0aGlzJDEuZWF0Q29udGV4dHVhbChcImFzXCIpID8gdGhpcyQxLnBhcnNlSWRlbnQodHJ1ZSkgOiBub2RlLmxvY2FsXG4gICAgdGhpcyQxLmNoZWNrRXhwb3J0KGV4cG9ydHMsIG5vZGUuZXhwb3J0ZWQubmFtZSwgbm9kZS5leHBvcnRlZC5zdGFydClcbiAgICBub2Rlcy5wdXNoKHRoaXMkMS5maW5pc2hOb2RlKG5vZGUsIFwiRXhwb3J0U3BlY2lmaWVyXCIpKVxuICB9XG4gIHJldHVybiBub2Rlc1xufVxuXG4vLyBQYXJzZXMgaW1wb3J0IGRlY2xhcmF0aW9uLlxuXG5wcCQxLnBhcnNlSW1wb3J0ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKVxuICAvLyBpbXBvcnQgJy4uLidcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHQuc3RyaW5nKSB7XG4gICAgbm9kZS5zcGVjaWZpZXJzID0gZW1wdHlcbiAgICBub2RlLnNvdXJjZSA9IHRoaXMucGFyc2VFeHByQXRvbSgpXG4gIH0gZWxzZSB7XG4gICAgbm9kZS5zcGVjaWZpZXJzID0gdGhpcy5wYXJzZUltcG9ydFNwZWNpZmllcnMoKVxuICAgIHRoaXMuZXhwZWN0Q29udGV4dHVhbChcImZyb21cIilcbiAgICBub2RlLnNvdXJjZSA9IHRoaXMudHlwZSA9PT0gdHQuc3RyaW5nID8gdGhpcy5wYXJzZUV4cHJBdG9tKCkgOiB0aGlzLnVuZXhwZWN0ZWQoKVxuICB9XG4gIHRoaXMuc2VtaWNvbG9uKClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkltcG9ydERlY2xhcmF0aW9uXCIpXG59XG5cbi8vIFBhcnNlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1vZHVsZSBpbXBvcnRzLlxuXG5wcCQxLnBhcnNlSW1wb3J0U3BlY2lmaWVycyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgbm9kZXMgPSBbXSwgZmlyc3QgPSB0cnVlXG4gIGlmICh0aGlzLnR5cGUgPT09IHR0Lm5hbWUpIHtcbiAgICAvLyBpbXBvcnQgZGVmYXVsdE9iaiwgeyB4LCB5IGFzIHogfSBmcm9tICcuLi4nXG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gICAgbm9kZS5sb2NhbCA9IHRoaXMucGFyc2VJZGVudCgpXG4gICAgdGhpcy5jaGVja0xWYWwobm9kZS5sb2NhbCwgdHJ1ZSlcbiAgICBub2Rlcy5wdXNoKHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkltcG9ydERlZmF1bHRTcGVjaWZpZXJcIikpXG4gICAgaWYgKCF0aGlzLmVhdCh0dC5jb21tYSkpIHJldHVybiBub2Rlc1xuICB9XG4gIGlmICh0aGlzLnR5cGUgPT09IHR0LnN0YXIpIHtcbiAgICB2YXIgbm9kZSQxID0gdGhpcy5zdGFydE5vZGUoKVxuICAgIHRoaXMubmV4dCgpXG4gICAgdGhpcy5leHBlY3RDb250ZXh0dWFsKFwiYXNcIilcbiAgICBub2RlJDEubG9jYWwgPSB0aGlzLnBhcnNlSWRlbnQoKVxuICAgIHRoaXMuY2hlY2tMVmFsKG5vZGUkMS5sb2NhbCwgdHJ1ZSlcbiAgICBub2Rlcy5wdXNoKHRoaXMuZmluaXNoTm9kZShub2RlJDEsIFwiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyXCIpKVxuICAgIHJldHVybiBub2Rlc1xuICB9XG4gIHRoaXMuZXhwZWN0KHR0LmJyYWNlTClcbiAgd2hpbGUgKCF0aGlzLmVhdCh0dC5icmFjZVIpKSB7XG4gICAgaWYgKCFmaXJzdCkge1xuICAgICAgdGhpcyQxLmV4cGVjdCh0dC5jb21tYSlcbiAgICAgIGlmICh0aGlzJDEuYWZ0ZXJUcmFpbGluZ0NvbW1hKHR0LmJyYWNlUikpIGJyZWFrXG4gICAgfSBlbHNlIGZpcnN0ID0gZmFsc2VcblxuICAgIHZhciBub2RlJDIgPSB0aGlzJDEuc3RhcnROb2RlKClcbiAgICBub2RlJDIuaW1wb3J0ZWQgPSB0aGlzJDEucGFyc2VJZGVudCh0cnVlKVxuICAgIGlmICh0aGlzJDEuZWF0Q29udGV4dHVhbChcImFzXCIpKSB7XG4gICAgICBub2RlJDIubG9jYWwgPSB0aGlzJDEucGFyc2VJZGVudCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUkMi5sb2NhbCA9IG5vZGUkMi5pbXBvcnRlZFxuICAgICAgaWYgKHRoaXMkMS5pc0tleXdvcmQobm9kZSQyLmxvY2FsLm5hbWUpKSB0aGlzJDEudW5leHBlY3RlZChub2RlJDIubG9jYWwuc3RhcnQpXG4gICAgICBpZiAodGhpcyQxLnJlc2VydmVkV29yZHNTdHJpY3QudGVzdChub2RlJDIubG9jYWwubmFtZSkpIHRoaXMkMS5yYWlzZVJlY292ZXJhYmxlKG5vZGUkMi5sb2NhbC5zdGFydCwgXCJUaGUga2V5d29yZCAnXCIgKyBub2RlJDIubG9jYWwubmFtZSArIFwiJyBpcyByZXNlcnZlZFwiKVxuICAgIH1cbiAgICB0aGlzJDEuY2hlY2tMVmFsKG5vZGUkMi5sb2NhbCwgdHJ1ZSlcbiAgICBub2Rlcy5wdXNoKHRoaXMkMS5maW5pc2hOb2RlKG5vZGUkMiwgXCJJbXBvcnRTcGVjaWZpZXJcIikpXG4gIH1cbiAgcmV0dXJuIG5vZGVzXG59XG5cbnZhciBwcCQyID0gUGFyc2VyLnByb3RvdHlwZVxuXG4vLyBDb252ZXJ0IGV4aXN0aW5nIGV4cHJlc3Npb24gYXRvbSB0byBhc3NpZ25hYmxlIHBhdHRlcm5cbi8vIGlmIHBvc3NpYmxlLlxuXG5wcCQyLnRvQXNzaWduYWJsZSA9IGZ1bmN0aW9uKG5vZGUsIGlzQmluZGluZykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgbm9kZSkge1xuICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICBjYXNlIFwiSWRlbnRpZmllclwiOlxuICAgICAgaWYgKHRoaXMuaW5Bc3luYyAmJiBub2RlLm5hbWUgPT09IFwiYXdhaXRcIilcbiAgICAgICAgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBcIkNhbiBub3QgdXNlICdhd2FpdCcgYXMgaWRlbnRpZmllciBpbnNpZGUgYW4gYXN5bmMgZnVuY3Rpb25cIilcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiT2JqZWN0UGF0dGVyblwiOlxuICAgIGNhc2UgXCJBcnJheVBhdHRlcm5cIjpcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiT2JqZWN0RXhwcmVzc2lvblwiOlxuICAgICAgbm9kZS50eXBlID0gXCJPYmplY3RQYXR0ZXJuXCJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wID0gbm9kZS5wcm9wZXJ0aWVzW2ldXG4gICAgICAgIGlmIChwcm9wLmtpbmQgIT09IFwiaW5pdFwiKSB0aGlzJDEucmFpc2UocHJvcC5rZXkuc3RhcnQsIFwiT2JqZWN0IHBhdHRlcm4gY2FuJ3QgY29udGFpbiBnZXR0ZXIgb3Igc2V0dGVyXCIpXG4gICAgICAgIHRoaXMkMS50b0Fzc2lnbmFibGUocHJvcC52YWx1ZSwgaXNCaW5kaW5nKVxuICAgICAgfVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJBcnJheUV4cHJlc3Npb25cIjpcbiAgICAgIG5vZGUudHlwZSA9IFwiQXJyYXlQYXR0ZXJuXCJcbiAgICAgIHRoaXMudG9Bc3NpZ25hYmxlTGlzdChub2RlLmVsZW1lbnRzLCBpc0JpbmRpbmcpXG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCI6XG4gICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gXCI9XCIpIHtcbiAgICAgICAgbm9kZS50eXBlID0gXCJBc3NpZ25tZW50UGF0dGVyblwiXG4gICAgICAgIGRlbGV0ZSBub2RlLm9wZXJhdG9yXG4gICAgICAgIHRoaXMudG9Bc3NpZ25hYmxlKG5vZGUubGVmdCwgaXNCaW5kaW5nKVxuICAgICAgICAvLyBmYWxscyB0aHJvdWdoIHRvIEFzc2lnbm1lbnRQYXR0ZXJuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJhaXNlKG5vZGUubGVmdC5lbmQsIFwiT25seSAnPScgb3BlcmF0b3IgY2FuIGJlIHVzZWQgZm9yIHNwZWNpZnlpbmcgZGVmYXVsdCB2YWx1ZS5cIilcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgIGNhc2UgXCJBc3NpZ25tZW50UGF0dGVyblwiOlxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiOlxuICAgICAgbm9kZS5leHByZXNzaW9uID0gdGhpcy50b0Fzc2lnbmFibGUobm9kZS5leHByZXNzaW9uLCBpc0JpbmRpbmcpXG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIk1lbWJlckV4cHJlc3Npb25cIjpcbiAgICAgIGlmICghaXNCaW5kaW5nKSBicmVha1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMucmFpc2Uobm9kZS5zdGFydCwgXCJBc3NpZ25pbmcgdG8gcnZhbHVlXCIpXG4gICAgfVxuICB9XG4gIHJldHVybiBub2RlXG59XG5cbi8vIENvbnZlcnQgbGlzdCBvZiBleHByZXNzaW9uIGF0b21zIHRvIGJpbmRpbmcgbGlzdC5cblxucHAkMi50b0Fzc2lnbmFibGVMaXN0ID0gZnVuY3Rpb24oZXhwckxpc3QsIGlzQmluZGluZykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgZW5kID0gZXhwckxpc3QubGVuZ3RoXG4gIGlmIChlbmQpIHtcbiAgICB2YXIgbGFzdCA9IGV4cHJMaXN0W2VuZCAtIDFdXG4gICAgaWYgKGxhc3QgJiYgbGFzdC50eXBlID09IFwiUmVzdEVsZW1lbnRcIikge1xuICAgICAgLS1lbmRcbiAgICB9IGVsc2UgaWYgKGxhc3QgJiYgbGFzdC50eXBlID09IFwiU3ByZWFkRWxlbWVudFwiKSB7XG4gICAgICBsYXN0LnR5cGUgPSBcIlJlc3RFbGVtZW50XCJcbiAgICAgIHZhciBhcmcgPSBsYXN0LmFyZ3VtZW50XG4gICAgICB0aGlzLnRvQXNzaWduYWJsZShhcmcsIGlzQmluZGluZylcbiAgICAgIGlmIChhcmcudHlwZSAhPT0gXCJJZGVudGlmaWVyXCIgJiYgYXJnLnR5cGUgIT09IFwiTWVtYmVyRXhwcmVzc2lvblwiICYmIGFyZy50eXBlICE9PSBcIkFycmF5UGF0dGVyblwiKVxuICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoYXJnLnN0YXJ0KVxuICAgICAgLS1lbmRcbiAgICB9XG5cbiAgICBpZiAoaXNCaW5kaW5nICYmIGxhc3QgJiYgbGFzdC50eXBlID09PSBcIlJlc3RFbGVtZW50XCIgJiYgbGFzdC5hcmd1bWVudC50eXBlICE9PSBcIklkZW50aWZpZXJcIilcbiAgICAgIHRoaXMudW5leHBlY3RlZChsYXN0LmFyZ3VtZW50LnN0YXJ0KVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kOyBpKyspIHtcbiAgICB2YXIgZWx0ID0gZXhwckxpc3RbaV1cbiAgICBpZiAoZWx0KSB0aGlzJDEudG9Bc3NpZ25hYmxlKGVsdCwgaXNCaW5kaW5nKVxuICB9XG4gIHJldHVybiBleHByTGlzdFxufVxuXG4vLyBQYXJzZXMgc3ByZWFkIGVsZW1lbnQuXG5cbnBwJDIucGFyc2VTcHJlYWQgPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKVxuICB0aGlzLm5leHQoKVxuICBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiU3ByZWFkRWxlbWVudFwiKVxufVxuXG5wcCQyLnBhcnNlUmVzdCA9IGZ1bmN0aW9uKGFsbG93Tm9uSWRlbnQpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gIHRoaXMubmV4dCgpXG5cbiAgLy8gUmVzdEVsZW1lbnQgaW5zaWRlIG9mIGEgZnVuY3Rpb24gcGFyYW1ldGVyIG11c3QgYmUgYW4gaWRlbnRpZmllclxuICBpZiAoYWxsb3dOb25JZGVudCkgbm9kZS5hcmd1bWVudCA9IHRoaXMudHlwZSA9PT0gdHQubmFtZSA/IHRoaXMucGFyc2VJZGVudCgpIDogdGhpcy51bmV4cGVjdGVkKClcbiAgZWxzZSBub2RlLmFyZ3VtZW50ID0gdGhpcy50eXBlID09PSB0dC5uYW1lIHx8IHRoaXMudHlwZSA9PT0gdHQuYnJhY2tldEwgPyB0aGlzLnBhcnNlQmluZGluZ0F0b20oKSA6IHRoaXMudW5leHBlY3RlZCgpXG5cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlJlc3RFbGVtZW50XCIpXG59XG5cbi8vIFBhcnNlcyBsdmFsdWUgKGFzc2lnbmFibGUpIGF0b20uXG5cbnBwJDIucGFyc2VCaW5kaW5nQXRvbSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNikgcmV0dXJuIHRoaXMucGFyc2VJZGVudCgpXG4gIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gIGNhc2UgdHQubmFtZTpcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlkZW50KClcblxuICBjYXNlIHR0LmJyYWNrZXRMOlxuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKVxuICAgIHRoaXMubmV4dCgpXG4gICAgbm9kZS5lbGVtZW50cyA9IHRoaXMucGFyc2VCaW5kaW5nTGlzdCh0dC5icmFja2V0UiwgdHJ1ZSwgdHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXJyYXlQYXR0ZXJuXCIpXG5cbiAgY2FzZSB0dC5icmFjZUw6XG4gICAgcmV0dXJuIHRoaXMucGFyc2VPYmoodHJ1ZSlcblxuICBkZWZhdWx0OlxuICAgIHRoaXMudW5leHBlY3RlZCgpXG4gIH1cbn1cblxucHAkMi5wYXJzZUJpbmRpbmdMaXN0ID0gZnVuY3Rpb24oY2xvc2UsIGFsbG93RW1wdHksIGFsbG93VHJhaWxpbmdDb21tYSwgYWxsb3dOb25JZGVudCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgZWx0cyA9IFtdLCBmaXJzdCA9IHRydWVcbiAgd2hpbGUgKCF0aGlzLmVhdChjbG9zZSkpIHtcbiAgICBpZiAoZmlyc3QpIGZpcnN0ID0gZmFsc2VcbiAgICBlbHNlIHRoaXMkMS5leHBlY3QodHQuY29tbWEpXG4gICAgaWYgKGFsbG93RW1wdHkgJiYgdGhpcyQxLnR5cGUgPT09IHR0LmNvbW1hKSB7XG4gICAgICBlbHRzLnB1c2gobnVsbClcbiAgICB9IGVsc2UgaWYgKGFsbG93VHJhaWxpbmdDb21tYSAmJiB0aGlzJDEuYWZ0ZXJUcmFpbGluZ0NvbW1hKGNsb3NlKSkge1xuICAgICAgYnJlYWtcbiAgICB9IGVsc2UgaWYgKHRoaXMkMS50eXBlID09PSB0dC5lbGxpcHNpcykge1xuICAgICAgdmFyIHJlc3QgPSB0aGlzJDEucGFyc2VSZXN0KGFsbG93Tm9uSWRlbnQpXG4gICAgICB0aGlzJDEucGFyc2VCaW5kaW5nTGlzdEl0ZW0ocmVzdClcbiAgICAgIGVsdHMucHVzaChyZXN0KVxuICAgICAgaWYgKHRoaXMkMS50eXBlID09PSB0dC5jb21tYSkgdGhpcyQxLnJhaXNlKHRoaXMkMS5zdGFydCwgXCJDb21tYSBpcyBub3QgcGVybWl0dGVkIGFmdGVyIHRoZSByZXN0IGVsZW1lbnRcIilcbiAgICAgIHRoaXMkMS5leHBlY3QoY2xvc2UpXG4gICAgICBicmVha1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZWxlbSA9IHRoaXMkMS5wYXJzZU1heWJlRGVmYXVsdCh0aGlzJDEuc3RhcnQsIHRoaXMkMS5zdGFydExvYylcbiAgICAgIHRoaXMkMS5wYXJzZUJpbmRpbmdMaXN0SXRlbShlbGVtKVxuICAgICAgZWx0cy5wdXNoKGVsZW0pXG4gICAgfVxuICB9XG4gIHJldHVybiBlbHRzXG59XG5cbnBwJDIucGFyc2VCaW5kaW5nTGlzdEl0ZW0gPSBmdW5jdGlvbihwYXJhbSkge1xuICByZXR1cm4gcGFyYW1cbn1cblxuLy8gUGFyc2VzIGFzc2lnbm1lbnQgcGF0dGVybiBhcm91bmQgZ2l2ZW4gYXRvbSBpZiBwb3NzaWJsZS5cblxucHAkMi5wYXJzZU1heWJlRGVmYXVsdCA9IGZ1bmN0aW9uKHN0YXJ0UG9zLCBzdGFydExvYywgbGVmdCkge1xuICBsZWZ0ID0gbGVmdCB8fCB0aGlzLnBhcnNlQmluZGluZ0F0b20oKVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNiB8fCAhdGhpcy5lYXQodHQuZXEpKSByZXR1cm4gbGVmdFxuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKVxuICBub2RlLmxlZnQgPSBsZWZ0XG4gIG5vZGUucmlnaHQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXNzaWdubWVudFBhdHRlcm5cIilcbn1cblxuLy8gVmVyaWZ5IHRoYXQgYSBub2RlIGlzIGFuIGx2YWwg4oCUIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBhc3NpZ25lZFxuLy8gdG8uXG5cbnBwJDIuY2hlY2tMVmFsID0gZnVuY3Rpb24oZXhwciwgaXNCaW5kaW5nLCBjaGVja0NsYXNoZXMpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgY2FzZSBcIklkZW50aWZpZXJcIjpcbiAgICBpZiAodGhpcy5zdHJpY3QgJiYgdGhpcy5yZXNlcnZlZFdvcmRzU3RyaWN0QmluZC50ZXN0KGV4cHIubmFtZSkpXG4gICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXhwci5zdGFydCwgKGlzQmluZGluZyA/IFwiQmluZGluZyBcIiA6IFwiQXNzaWduaW5nIHRvIFwiKSArIGV4cHIubmFtZSArIFwiIGluIHN0cmljdCBtb2RlXCIpXG4gICAgaWYgKGNoZWNrQ2xhc2hlcykge1xuICAgICAgaWYgKGhhcyhjaGVja0NsYXNoZXMsIGV4cHIubmFtZSkpXG4gICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShleHByLnN0YXJ0LCBcIkFyZ3VtZW50IG5hbWUgY2xhc2hcIilcbiAgICAgIGNoZWNrQ2xhc2hlc1tleHByLm5hbWVdID0gdHJ1ZVxuICAgIH1cbiAgICBicmVha1xuXG4gIGNhc2UgXCJNZW1iZXJFeHByZXNzaW9uXCI6XG4gICAgaWYgKGlzQmluZGluZykgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGV4cHIuc3RhcnQsIChpc0JpbmRpbmcgPyBcIkJpbmRpbmdcIiA6IFwiQXNzaWduaW5nIHRvXCIpICsgXCIgbWVtYmVyIGV4cHJlc3Npb25cIilcbiAgICBicmVha1xuXG4gIGNhc2UgXCJPYmplY3RQYXR0ZXJuXCI6XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspXG4gICAgICB0aGlzJDEuY2hlY2tMVmFsKGV4cHIucHJvcGVydGllc1tpXS52YWx1ZSwgaXNCaW5kaW5nLCBjaGVja0NsYXNoZXMpXG4gICAgYnJlYWtcblxuICBjYXNlIFwiQXJyYXlQYXR0ZXJuXCI6XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgZXhwci5lbGVtZW50cy5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICB2YXIgZWxlbSA9IGV4cHIuZWxlbWVudHNbaSQxXVxuICAgICAgaWYgKGVsZW0pIHRoaXMkMS5jaGVja0xWYWwoZWxlbSwgaXNCaW5kaW5nLCBjaGVja0NsYXNoZXMpXG4gICAgfVxuICAgIGJyZWFrXG5cbiAgY2FzZSBcIkFzc2lnbm1lbnRQYXR0ZXJuXCI6XG4gICAgdGhpcy5jaGVja0xWYWwoZXhwci5sZWZ0LCBpc0JpbmRpbmcsIGNoZWNrQ2xhc2hlcylcbiAgICBicmVha1xuXG4gIGNhc2UgXCJSZXN0RWxlbWVudFwiOlxuICAgIHRoaXMuY2hlY2tMVmFsKGV4cHIuYXJndW1lbnQsIGlzQmluZGluZywgY2hlY2tDbGFzaGVzKVxuICAgIGJyZWFrXG5cbiAgY2FzZSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCI6XG4gICAgdGhpcy5jaGVja0xWYWwoZXhwci5leHByZXNzaW9uLCBpc0JpbmRpbmcsIGNoZWNrQ2xhc2hlcylcbiAgICBicmVha1xuXG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5yYWlzZShleHByLnN0YXJ0LCAoaXNCaW5kaW5nID8gXCJCaW5kaW5nXCIgOiBcIkFzc2lnbmluZyB0b1wiKSArIFwiIHJ2YWx1ZVwiKVxuICB9XG59XG5cbi8vIEEgcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2VyIG9wZXJhdGVzIGJ5IGRlZmluaW5nIGZ1bmN0aW9ucyBmb3IgYWxsXG4vLyBzeW50YWN0aWMgZWxlbWVudHMsIGFuZCByZWN1cnNpdmVseSBjYWxsaW5nIHRob3NlLCBlYWNoIGZ1bmN0aW9uXG4vLyBhZHZhbmNpbmcgdGhlIGlucHV0IHN0cmVhbSBhbmQgcmV0dXJuaW5nIGFuIEFTVCBub2RlLiBQcmVjZWRlbmNlXG4vLyBvZiBjb25zdHJ1Y3RzIChmb3IgZXhhbXBsZSwgdGhlIGZhY3QgdGhhdCBgIXhbMV1gIG1lYW5zIGAhKHhbMV0pYFxuLy8gaW5zdGVhZCBvZiBgKCF4KVsxXWAgaXMgaGFuZGxlZCBieSB0aGUgZmFjdCB0aGF0IHRoZSBwYXJzZXJcbi8vIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIHVuYXJ5IHByZWZpeCBvcGVyYXRvcnMgaXMgY2FsbGVkIGZpcnN0LCBhbmRcbi8vIGluIHR1cm4gY2FsbHMgdGhlIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGBbXWAgc3Vic2NyaXB0cyDigJQgdGhhdFxuLy8gd2F5LCBpdCdsbCByZWNlaXZlIHRoZSBub2RlIGZvciBgeFsxXWAgYWxyZWFkeSBwYXJzZWQsIGFuZCB3cmFwc1xuLy8gKnRoYXQqIGluIHRoZSB1bmFyeSBvcGVyYXRvciBub2RlLlxuLy9cbi8vIEFjb3JuIHVzZXMgYW4gW29wZXJhdG9yIHByZWNlZGVuY2UgcGFyc2VyXVtvcHBdIHRvIGhhbmRsZSBiaW5hcnlcbi8vIG9wZXJhdG9yIHByZWNlZGVuY2UsIGJlY2F1c2UgaXQgaXMgbXVjaCBtb3JlIGNvbXBhY3QgdGhhbiB1c2luZ1xuLy8gdGhlIHRlY2huaXF1ZSBvdXRsaW5lZCBhYm92ZSwgd2hpY2ggdXNlcyBkaWZmZXJlbnQsIG5lc3Rpbmdcbi8vIGZ1bmN0aW9ucyB0byBzcGVjaWZ5IHByZWNlZGVuY2UsIGZvciBhbGwgb2YgdGhlIHRlbiBiaW5hcnlcbi8vIHByZWNlZGVuY2UgbGV2ZWxzIHRoYXQgSmF2YVNjcmlwdCBkZWZpbmVzLlxuLy9cbi8vIFtvcHBdOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL09wZXJhdG9yLXByZWNlZGVuY2VfcGFyc2VyXG5cbnZhciBwcCQzID0gUGFyc2VyLnByb3RvdHlwZVxuXG4vLyBDaGVjayBpZiBwcm9wZXJ0eSBuYW1lIGNsYXNoZXMgd2l0aCBhbHJlYWR5IGFkZGVkLlxuLy8gT2JqZWN0L2NsYXNzIGdldHRlcnMgYW5kIHNldHRlcnMgYXJlIG5vdCBhbGxvd2VkIHRvIGNsYXNoIOKAlFxuLy8gZWl0aGVyIHdpdGggZWFjaCBvdGhlciBvciB3aXRoIGFuIGluaXQgcHJvcGVydHkg4oCUIGFuZCBpblxuLy8gc3RyaWN0IG1vZGUsIGluaXQgcHJvcGVydGllcyBhcmUgYWxzbyBub3QgYWxsb3dlZCB0byBiZSByZXBlYXRlZC5cblxucHAkMy5jaGVja1Byb3BDbGFzaCA9IGZ1bmN0aW9uKHByb3AsIHByb3BIYXNoKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiAocHJvcC5jb21wdXRlZCB8fCBwcm9wLm1ldGhvZCB8fCBwcm9wLnNob3J0aGFuZCkpXG4gICAgcmV0dXJuXG4gIHZhciBrZXkgPSBwcm9wLmtleTtcbiAgdmFyIG5hbWVcbiAgc3dpdGNoIChrZXkudHlwZSkge1xuICBjYXNlIFwiSWRlbnRpZmllclwiOiBuYW1lID0ga2V5Lm5hbWU7IGJyZWFrXG4gIGNhc2UgXCJMaXRlcmFsXCI6IG5hbWUgPSBTdHJpbmcoa2V5LnZhbHVlKTsgYnJlYWtcbiAgZGVmYXVsdDogcmV0dXJuXG4gIH1cbiAgdmFyIGtpbmQgPSBwcm9wLmtpbmQ7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgIGlmIChuYW1lID09PSBcIl9fcHJvdG9fX1wiICYmIGtpbmQgPT09IFwiaW5pdFwiKSB7XG4gICAgICBpZiAocHJvcEhhc2gucHJvdG8pIHRoaXMucmFpc2VSZWNvdmVyYWJsZShrZXkuc3RhcnQsIFwiUmVkZWZpbml0aW9uIG9mIF9fcHJvdG9fXyBwcm9wZXJ0eVwiKVxuICAgICAgcHJvcEhhc2gucHJvdG8gPSB0cnVlXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIG5hbWUgPSBcIiRcIiArIG5hbWVcbiAgdmFyIG90aGVyID0gcHJvcEhhc2hbbmFtZV1cbiAgaWYgKG90aGVyKSB7XG4gICAgdmFyIGlzR2V0U2V0ID0ga2luZCAhPT0gXCJpbml0XCJcbiAgICBpZiAoKHRoaXMuc3RyaWN0IHx8IGlzR2V0U2V0KSAmJiBvdGhlcltraW5kXSB8fCAhKGlzR2V0U2V0IF4gb3RoZXIuaW5pdCkpXG4gICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoa2V5LnN0YXJ0LCBcIlJlZGVmaW5pdGlvbiBvZiBwcm9wZXJ0eVwiKVxuICB9IGVsc2Uge1xuICAgIG90aGVyID0gcHJvcEhhc2hbbmFtZV0gPSB7XG4gICAgICBpbml0OiBmYWxzZSxcbiAgICAgIGdldDogZmFsc2UsXG4gICAgICBzZXQ6IGZhbHNlXG4gICAgfVxuICB9XG4gIG90aGVyW2tpbmRdID0gdHJ1ZVxufVxuXG4vLyAjIyMgRXhwcmVzc2lvbiBwYXJzaW5nXG5cbi8vIFRoZXNlIG5lc3QsIGZyb20gdGhlIG1vc3QgZ2VuZXJhbCBleHByZXNzaW9uIHR5cGUgYXQgdGhlIHRvcCB0b1xuLy8gJ2F0b21pYycsIG5vbmRpdmlzaWJsZSBleHByZXNzaW9uIHR5cGVzIGF0IHRoZSBib3R0b20uIE1vc3Qgb2Zcbi8vIHRoZSBmdW5jdGlvbnMgd2lsbCBzaW1wbHkgbGV0IHRoZSBmdW5jdGlvbihzKSBiZWxvdyB0aGVtIHBhcnNlLFxuLy8gYW5kLCAqaWYqIHRoZSBzeW50YWN0aWMgY29uc3RydWN0IHRoZXkgaGFuZGxlIGlzIHByZXNlbnQsIHdyYXBcbi8vIHRoZSBBU1Qgbm9kZSB0aGF0IHRoZSBpbm5lciBwYXJzZXIgZ2F2ZSB0aGVtIGluIGFub3RoZXIgbm9kZS5cblxuLy8gUGFyc2UgYSBmdWxsIGV4cHJlc3Npb24uIFRoZSBvcHRpb25hbCBhcmd1bWVudHMgYXJlIHVzZWQgdG9cbi8vIGZvcmJpZCB0aGUgYGluYCBvcGVyYXRvciAoaW4gZm9yIGxvb3BzIGluaXRhbGl6YXRpb24gZXhwcmVzc2lvbnMpXG4vLyBhbmQgcHJvdmlkZSByZWZlcmVuY2UgZm9yIHN0b3JpbmcgJz0nIG9wZXJhdG9yIGluc2lkZSBzaG9ydGhhbmRcbi8vIHByb3BlcnR5IGFzc2lnbm1lbnQgaW4gY29udGV4dHMgd2hlcmUgYm90aCBvYmplY3QgZXhwcmVzc2lvblxuLy8gYW5kIG9iamVjdCBwYXR0ZXJuIG1pZ2h0IGFwcGVhciAoc28gaXQncyBwb3NzaWJsZSB0byByYWlzZVxuLy8gZGVsYXllZCBzeW50YXggZXJyb3IgYXQgY29ycmVjdCBwb3NpdGlvbikuXG5cbnBwJDMucGFyc2VFeHByZXNzaW9uID0gZnVuY3Rpb24obm9JbiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2NcbiAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24obm9JbiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHQuY29tbWEpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKVxuICAgIG5vZGUuZXhwcmVzc2lvbnMgPSBbZXhwcl1cbiAgICB3aGlsZSAodGhpcy5lYXQodHQuY29tbWEpKSBub2RlLmV4cHJlc3Npb25zLnB1c2godGhpcyQxLnBhcnNlTWF5YmVBc3NpZ24obm9JbiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykpXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlNlcXVlbmNlRXhwcmVzc2lvblwiKVxuICB9XG4gIHJldHVybiBleHByXG59XG5cbi8vIFBhcnNlIGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lvbi4gVGhpcyBpbmNsdWRlcyBhcHBsaWNhdGlvbnMgb2Zcbi8vIG9wZXJhdG9ycyBsaWtlIGArPWAuXG5cbnBwJDMucGFyc2VNYXliZUFzc2lnbiA9IGZ1bmN0aW9uKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGFmdGVyTGVmdFBhcnNlKSB7XG4gIGlmICh0aGlzLmluR2VuZXJhdG9yICYmIHRoaXMuaXNDb250ZXh0dWFsKFwieWllbGRcIikpIHJldHVybiB0aGlzLnBhcnNlWWllbGQoKVxuXG4gIHZhciBvd25EZXN0cnVjdHVyaW5nRXJyb3JzID0gZmFsc2UsIG9sZFBhcmVuQXNzaWduID0gLTFcbiAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICBvbGRQYXJlbkFzc2lnbiA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnblxuICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA9IC0xXG4gIH0gZWxzZSB7XG4gICAgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IG5ldyBEZXN0cnVjdHVyaW5nRXJyb3JzXG4gICAgb3duRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IHRydWVcbiAgfVxuXG4gIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvY1xuICBpZiAodGhpcy50eXBlID09IHR0LnBhcmVuTCB8fCB0aGlzLnR5cGUgPT0gdHQubmFtZSlcbiAgICB0aGlzLnBvdGVudGlhbEFycm93QXQgPSB0aGlzLnN0YXJ0XG4gIHZhciBsZWZ0ID0gdGhpcy5wYXJzZU1heWJlQ29uZGl0aW9uYWwobm9JbiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcbiAgaWYgKGFmdGVyTGVmdFBhcnNlKSBsZWZ0ID0gYWZ0ZXJMZWZ0UGFyc2UuY2FsbCh0aGlzLCBsZWZ0LCBzdGFydFBvcywgc3RhcnRMb2MpXG4gIGlmICh0aGlzLnR5cGUuaXNBc3NpZ24pIHtcbiAgICB0aGlzLmNoZWNrUGF0dGVybkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKVxuICAgIGlmICghb3duRGVzdHJ1Y3R1cmluZ0Vycm9ycykgRGVzdHJ1Y3R1cmluZ0Vycm9ycy5jYWxsKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYylcbiAgICBub2RlLm9wZXJhdG9yID0gdGhpcy52YWx1ZVxuICAgIG5vZGUubGVmdCA9IHRoaXMudHlwZSA9PT0gdHQuZXEgPyB0aGlzLnRvQXNzaWduYWJsZShsZWZ0KSA6IGxlZnRcbiAgICByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbiA9IC0xIC8vIHJlc2V0IGJlY2F1c2Ugc2hvcnRoYW5kIGRlZmF1bHQgd2FzIHVzZWQgY29ycmVjdGx5XG4gICAgdGhpcy5jaGVja0xWYWwobGVmdClcbiAgICB0aGlzLm5leHQoKVxuICAgIG5vZGUucmlnaHQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24obm9JbilcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXNzaWdubWVudEV4cHJlc3Npb25cIilcbiAgfSBlbHNlIHtcbiAgICBpZiAob3duRGVzdHJ1Y3R1cmluZ0Vycm9ycykgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSlcbiAgfVxuICBpZiAob2xkUGFyZW5Bc3NpZ24gPiAtMSkgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID0gb2xkUGFyZW5Bc3NpZ25cbiAgcmV0dXJuIGxlZnRcbn1cblxuLy8gUGFyc2UgYSB0ZXJuYXJ5IGNvbmRpdGlvbmFsIChgPzpgKSBvcGVyYXRvci5cblxucHAkMy5wYXJzZU1heWJlQ29uZGl0aW9uYWwgPSBmdW5jdGlvbihub0luLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvY1xuICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByT3BzKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG4gIGlmICh0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSkgcmV0dXJuIGV4cHJcbiAgaWYgKHRoaXMuZWF0KHR0LnF1ZXN0aW9uKSkge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpXG4gICAgbm9kZS50ZXN0ID0gZXhwclxuICAgIG5vZGUuY29uc2VxdWVudCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbigpXG4gICAgdGhpcy5leHBlY3QodHQuY29sb24pXG4gICAgbm9kZS5hbHRlcm5hdGUgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24obm9JbilcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpXG4gIH1cbiAgcmV0dXJuIGV4cHJcbn1cblxuLy8gU3RhcnQgdGhlIHByZWNlZGVuY2UgcGFyc2VyLlxuXG5wcCQzLnBhcnNlRXhwck9wcyA9IGZ1bmN0aW9uKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jXG4gIHZhciBleHByID0gdGhpcy5wYXJzZU1heWJlVW5hcnkocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgZmFsc2UpXG4gIGlmICh0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSkgcmV0dXJuIGV4cHJcbiAgcmV0dXJuIHRoaXMucGFyc2VFeHByT3AoZXhwciwgc3RhcnRQb3MsIHN0YXJ0TG9jLCAtMSwgbm9Jbilcbn1cblxuLy8gUGFyc2UgYmluYXJ5IG9wZXJhdG9ycyB3aXRoIHRoZSBvcGVyYXRvciBwcmVjZWRlbmNlIHBhcnNpbmdcbi8vIGFsZ29yaXRobS4gYGxlZnRgIGlzIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgb3BlcmF0b3IuXG4vLyBgbWluUHJlY2AgcHJvdmlkZXMgY29udGV4dCB0aGF0IGFsbG93cyB0aGUgZnVuY3Rpb24gdG8gc3RvcCBhbmRcbi8vIGRlZmVyIGZ1cnRoZXIgcGFyc2VyIHRvIG9uZSBvZiBpdHMgY2FsbGVycyB3aGVuIGl0IGVuY291bnRlcnMgYW5cbi8vIG9wZXJhdG9yIHRoYXQgaGFzIGEgbG93ZXIgcHJlY2VkZW5jZSB0aGFuIHRoZSBzZXQgaXQgaXMgcGFyc2luZy5cblxucHAkMy5wYXJzZUV4cHJPcCA9IGZ1bmN0aW9uKGxlZnQsIGxlZnRTdGFydFBvcywgbGVmdFN0YXJ0TG9jLCBtaW5QcmVjLCBub0luKSB7XG4gIHZhciBwcmVjID0gdGhpcy50eXBlLmJpbm9wXG4gIGlmIChwcmVjICE9IG51bGwgJiYgKCFub0luIHx8IHRoaXMudHlwZSAhPT0gdHQuX2luKSkge1xuICAgIGlmIChwcmVjID4gbWluUHJlYykge1xuICAgICAgdmFyIGxvZ2ljYWwgPSB0aGlzLnR5cGUgPT09IHR0LmxvZ2ljYWxPUiB8fCB0aGlzLnR5cGUgPT09IHR0LmxvZ2ljYWxBTkRcbiAgICAgIHZhciBvcCA9IHRoaXMudmFsdWVcbiAgICAgIHRoaXMubmV4dCgpXG4gICAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2NcbiAgICAgIHZhciByaWdodCA9IHRoaXMucGFyc2VFeHByT3AodGhpcy5wYXJzZU1heWJlVW5hcnkobnVsbCwgZmFsc2UpLCBzdGFydFBvcywgc3RhcnRMb2MsIHByZWMsIG5vSW4pXG4gICAgICB2YXIgbm9kZSA9IHRoaXMuYnVpbGRCaW5hcnkobGVmdFN0YXJ0UG9zLCBsZWZ0U3RhcnRMb2MsIGxlZnQsIHJpZ2h0LCBvcCwgbG9naWNhbClcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRXhwck9wKG5vZGUsIGxlZnRTdGFydFBvcywgbGVmdFN0YXJ0TG9jLCBtaW5QcmVjLCBub0luKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbGVmdFxufVxuXG5wcCQzLmJ1aWxkQmluYXJ5ID0gZnVuY3Rpb24oc3RhcnRQb3MsIHN0YXJ0TG9jLCBsZWZ0LCByaWdodCwgb3AsIGxvZ2ljYWwpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYylcbiAgbm9kZS5sZWZ0ID0gbGVmdFxuICBub2RlLm9wZXJhdG9yID0gb3BcbiAgbm9kZS5yaWdodCA9IHJpZ2h0XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgbG9naWNhbCA/IFwiTG9naWNhbEV4cHJlc3Npb25cIiA6IFwiQmluYXJ5RXhwcmVzc2lvblwiKVxufVxuXG4vLyBQYXJzZSB1bmFyeSBvcGVyYXRvcnMsIGJvdGggcHJlZml4IGFuZCBwb3N0Zml4LlxuXG5wcCQzLnBhcnNlTWF5YmVVbmFyeSA9IGZ1bmN0aW9uKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHNhd1VuYXJ5KSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYywgZXhwclxuICBpZiAodGhpcy5pbkFzeW5jICYmIHRoaXMuaXNDb250ZXh0dWFsKFwiYXdhaXRcIikpIHtcbiAgICBleHByID0gdGhpcy5wYXJzZUF3YWl0KHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG4gICAgc2F3VW5hcnkgPSB0cnVlXG4gIH0gZWxzZSBpZiAodGhpcy50eXBlLnByZWZpeCkge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKSwgdXBkYXRlID0gdGhpcy50eXBlID09PSB0dC5pbmNEZWNcbiAgICBub2RlLm9wZXJhdG9yID0gdGhpcy52YWx1ZVxuICAgIG5vZGUucHJlZml4ID0gdHJ1ZVxuICAgIHRoaXMubmV4dCgpXG4gICAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZVVuYXJ5KG51bGwsIHRydWUpXG4gICAgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSlcbiAgICBpZiAodXBkYXRlKSB0aGlzLmNoZWNrTFZhbChub2RlLmFyZ3VtZW50KVxuICAgIGVsc2UgaWYgKHRoaXMuc3RyaWN0ICYmIG5vZGUub3BlcmF0b3IgPT09IFwiZGVsZXRlXCIgJiZcbiAgICAgICAgICAgICBub2RlLmFyZ3VtZW50LnR5cGUgPT09IFwiSWRlbnRpZmllclwiKVxuICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUuc3RhcnQsIFwiRGVsZXRpbmcgbG9jYWwgdmFyaWFibGUgaW4gc3RyaWN0IG1vZGVcIilcbiAgICBlbHNlIHNhd1VuYXJ5ID0gdHJ1ZVxuICAgIGV4cHIgPSB0aGlzLmZpbmlzaE5vZGUobm9kZSwgdXBkYXRlID8gXCJVcGRhdGVFeHByZXNzaW9uXCIgOiBcIlVuYXJ5RXhwcmVzc2lvblwiKVxuICB9IGVsc2Uge1xuICAgIGV4cHIgPSB0aGlzLnBhcnNlRXhwclN1YnNjcmlwdHMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcbiAgICBpZiAodGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykpIHJldHVybiBleHByXG4gICAgd2hpbGUgKHRoaXMudHlwZS5wb3N0Zml4ICYmICF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpKSB7XG4gICAgICB2YXIgbm9kZSQxID0gdGhpcyQxLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYylcbiAgICAgIG5vZGUkMS5vcGVyYXRvciA9IHRoaXMkMS52YWx1ZVxuICAgICAgbm9kZSQxLnByZWZpeCA9IGZhbHNlXG4gICAgICBub2RlJDEuYXJndW1lbnQgPSBleHByXG4gICAgICB0aGlzJDEuY2hlY2tMVmFsKGV4cHIpXG4gICAgICB0aGlzJDEubmV4dCgpXG4gICAgICBleHByID0gdGhpcyQxLmZpbmlzaE5vZGUobm9kZSQxLCBcIlVwZGF0ZUV4cHJlc3Npb25cIilcbiAgICB9XG4gIH1cblxuICBpZiAoIXNhd1VuYXJ5ICYmIHRoaXMuZWF0KHR0LnN0YXJzdGFyKSlcbiAgICByZXR1cm4gdGhpcy5idWlsZEJpbmFyeShzdGFydFBvcywgc3RhcnRMb2MsIGV4cHIsIHRoaXMucGFyc2VNYXliZVVuYXJ5KG51bGwsIGZhbHNlKSwgXCIqKlwiLCBmYWxzZSlcbiAgZWxzZVxuICAgIHJldHVybiBleHByXG59XG5cbi8vIFBhcnNlIGNhbGwsIGRvdCwgYW5kIGBbXWAtc3Vic2NyaXB0IGV4cHJlc3Npb25zLlxuXG5wcCQzLnBhcnNlRXhwclN1YnNjcmlwdHMgPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvY1xuICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByQXRvbShyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuICB2YXIgc2tpcEFycm93U3Vic2NyaXB0cyA9IGV4cHIudHlwZSA9PT0gXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiICYmIHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rU3RhcnQsIHRoaXMubGFzdFRva0VuZCkgIT09IFwiKVwiXG4gIGlmICh0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB8fCBza2lwQXJyb3dTdWJzY3JpcHRzKSByZXR1cm4gZXhwclxuICB2YXIgcmVzdWx0ID0gdGhpcy5wYXJzZVN1YnNjcmlwdHMoZXhwciwgc3RhcnRQb3MsIHN0YXJ0TG9jKVxuICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyAmJiByZXN1bHQudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID49IHJlc3VsdC5zdGFydCkgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID0gLTFcbiAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZCA+PSByZXN1bHQuc3RhcnQpIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEJpbmQgPSAtMVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxucHAkMy5wYXJzZVN1YnNjcmlwdHMgPSBmdW5jdGlvbihiYXNlLCBzdGFydFBvcywgc3RhcnRMb2MsIG5vQ2FsbHMpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG1heWJlQXN5bmNBcnJvdyA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4ICYmIGJhc2UudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYgYmFzZS5uYW1lID09PSBcImFzeW5jXCIgJiZcbiAgICAgIHRoaXMubGFzdFRva0VuZCA9PSBiYXNlLmVuZCAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKVxuICBmb3IgKHZhciBjb21wdXRlZDs7KSB7XG4gICAgaWYgKChjb21wdXRlZCA9IHRoaXMkMS5lYXQodHQuYnJhY2tldEwpKSB8fCB0aGlzJDEuZWF0KHR0LmRvdCkpIHtcbiAgICAgIHZhciBub2RlID0gdGhpcyQxLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYylcbiAgICAgIG5vZGUub2JqZWN0ID0gYmFzZVxuICAgICAgbm9kZS5wcm9wZXJ0eSA9IGNvbXB1dGVkID8gdGhpcyQxLnBhcnNlRXhwcmVzc2lvbigpIDogdGhpcyQxLnBhcnNlSWRlbnQodHJ1ZSlcbiAgICAgIG5vZGUuY29tcHV0ZWQgPSAhIWNvbXB1dGVkXG4gICAgICBpZiAoY29tcHV0ZWQpIHRoaXMkMS5leHBlY3QodHQuYnJhY2tldFIpXG4gICAgICBiYXNlID0gdGhpcyQxLmZpbmlzaE5vZGUobm9kZSwgXCJNZW1iZXJFeHByZXNzaW9uXCIpXG4gICAgfSBlbHNlIGlmICghbm9DYWxscyAmJiB0aGlzJDEuZWF0KHR0LnBhcmVuTCkpIHtcbiAgICAgIHZhciByZWZEZXN0cnVjdHVyaW5nRXJyb3JzID0gbmV3IERlc3RydWN0dXJpbmdFcnJvcnMsIG9sZFlpZWxkUG9zID0gdGhpcyQxLnlpZWxkUG9zLCBvbGRBd2FpdFBvcyA9IHRoaXMkMS5hd2FpdFBvc1xuICAgICAgdGhpcyQxLnlpZWxkUG9zID0gMFxuICAgICAgdGhpcyQxLmF3YWl0UG9zID0gMFxuICAgICAgdmFyIGV4cHJMaXN0ID0gdGhpcyQxLnBhcnNlRXhwckxpc3QodHQucGFyZW5SLCB0aGlzJDEub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4LCBmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcbiAgICAgIGlmIChtYXliZUFzeW5jQXJyb3cgJiYgIXRoaXMkMS5jYW5JbnNlcnRTZW1pY29sb24oKSAmJiB0aGlzJDEuZWF0KHR0LmFycm93KSkge1xuICAgICAgICB0aGlzJDEuY2hlY2tQYXR0ZXJuRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGZhbHNlKVxuICAgICAgICB0aGlzJDEuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zKClcbiAgICAgICAgdGhpcyQxLnlpZWxkUG9zID0gb2xkWWllbGRQb3NcbiAgICAgICAgdGhpcyQxLmF3YWl0UG9zID0gb2xkQXdhaXRQb3NcbiAgICAgICAgcmV0dXJuIHRoaXMkMS5wYXJzZUFycm93RXhwcmVzc2lvbih0aGlzJDEuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKSwgZXhwckxpc3QsIHRydWUpXG4gICAgICB9XG4gICAgICB0aGlzJDEuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpXG4gICAgICB0aGlzJDEueWllbGRQb3MgPSBvbGRZaWVsZFBvcyB8fCB0aGlzJDEueWllbGRQb3NcbiAgICAgIHRoaXMkMS5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zIHx8IHRoaXMkMS5hd2FpdFBvc1xuICAgICAgdmFyIG5vZGUkMSA9IHRoaXMkMS5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpXG4gICAgICBub2RlJDEuY2FsbGVlID0gYmFzZVxuICAgICAgbm9kZSQxLmFyZ3VtZW50cyA9IGV4cHJMaXN0XG4gICAgICBiYXNlID0gdGhpcyQxLmZpbmlzaE5vZGUobm9kZSQxLCBcIkNhbGxFeHByZXNzaW9uXCIpXG4gICAgfSBlbHNlIGlmICh0aGlzJDEudHlwZSA9PT0gdHQuYmFja1F1b3RlKSB7XG4gICAgICB2YXIgbm9kZSQyID0gdGhpcyQxLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYylcbiAgICAgIG5vZGUkMi50YWcgPSBiYXNlXG4gICAgICBub2RlJDIucXVhc2kgPSB0aGlzJDEucGFyc2VUZW1wbGF0ZSgpXG4gICAgICBiYXNlID0gdGhpcyQxLmZpbmlzaE5vZGUobm9kZSQyLCBcIlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvblwiKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYmFzZVxuICAgIH1cbiAgfVxufVxuXG4vLyBQYXJzZSBhbiBhdG9taWMgZXhwcmVzc2lvbiDigJQgZWl0aGVyIGEgc2luZ2xlIHRva2VuIHRoYXQgaXMgYW5cbi8vIGV4cHJlc3Npb24sIGFuIGV4cHJlc3Npb24gc3RhcnRlZCBieSBhIGtleXdvcmQgbGlrZSBgZnVuY3Rpb25gIG9yXG4vLyBgbmV3YCwgb3IgYW4gZXhwcmVzc2lvbiB3cmFwcGVkIGluIHB1bmN0dWF0aW9uIGxpa2UgYCgpYCwgYFtdYCxcbi8vIG9yIGB7fWAuXG5cbnBwJDMucGFyc2VFeHByQXRvbSA9IGZ1bmN0aW9uKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgdmFyIG5vZGUsIGNhbkJlQXJyb3cgPSB0aGlzLnBvdGVudGlhbEFycm93QXQgPT0gdGhpcy5zdGFydFxuICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICBjYXNlIHR0Ll9zdXBlcjpcbiAgICBpZiAoIXRoaXMuaW5GdW5jdGlvbilcbiAgICAgIHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCInc3VwZXInIG91dHNpZGUgb2YgZnVuY3Rpb24gb3IgY2xhc3NcIilcblxuICBjYXNlIHR0Ll90aGlzOlxuICAgIHZhciB0eXBlID0gdGhpcy50eXBlID09PSB0dC5fdGhpcyA/IFwiVGhpc0V4cHJlc3Npb25cIiA6IFwiU3VwZXJcIlxuICAgIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gICAgdGhpcy5uZXh0KClcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIHR5cGUpXG5cbiAgY2FzZSB0dC5uYW1lOlxuICAgIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvY1xuICAgIHZhciBpZCA9IHRoaXMucGFyc2VJZGVudCh0aGlzLnR5cGUgIT09IHR0Lm5hbWUpXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4ICYmIGlkLm5hbWUgPT09IFwiYXN5bmNcIiAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSAmJiB0aGlzLmVhdCh0dC5fZnVuY3Rpb24pKVxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbih0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyksIGZhbHNlLCBmYWxzZSwgdHJ1ZSlcbiAgICBpZiAoY2FuQmVBcnJvdyAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSkge1xuICAgICAgaWYgKHRoaXMuZWF0KHR0LmFycm93KSlcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCBbaWRdLCBmYWxzZSlcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCAmJiBpZC5uYW1lID09PSBcImFzeW5jXCIgJiYgdGhpcy50eXBlID09PSB0dC5uYW1lKSB7XG4gICAgICAgIGlkID0gdGhpcy5wYXJzZUlkZW50KClcbiAgICAgICAgaWYgKHRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgfHwgIXRoaXMuZWF0KHR0LmFycm93KSlcbiAgICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKVxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFycm93RXhwcmVzc2lvbih0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyksIFtpZF0sIHRydWUpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZFxuXG4gIGNhc2UgdHQucmVnZXhwOlxuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWVcbiAgICBub2RlID0gdGhpcy5wYXJzZUxpdGVyYWwodmFsdWUudmFsdWUpXG4gICAgbm9kZS5yZWdleCA9IHtwYXR0ZXJuOiB2YWx1ZS5wYXR0ZXJuLCBmbGFnczogdmFsdWUuZmxhZ3N9XG4gICAgcmV0dXJuIG5vZGVcblxuICBjYXNlIHR0Lm51bTogY2FzZSB0dC5zdHJpbmc6XG4gICAgcmV0dXJuIHRoaXMucGFyc2VMaXRlcmFsKHRoaXMudmFsdWUpXG5cbiAgY2FzZSB0dC5fbnVsbDogY2FzZSB0dC5fdHJ1ZTogY2FzZSB0dC5fZmFsc2U6XG4gICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgICBub2RlLnZhbHVlID0gdGhpcy50eXBlID09PSB0dC5fbnVsbCA/IG51bGwgOiB0aGlzLnR5cGUgPT09IHR0Ll90cnVlXG4gICAgbm9kZS5yYXcgPSB0aGlzLnR5cGUua2V5d29yZFxuICAgIHRoaXMubmV4dCgpXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkxpdGVyYWxcIilcblxuICBjYXNlIHR0LnBhcmVuTDpcbiAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0LCBleHByID0gdGhpcy5wYXJzZVBhcmVuQW5kRGlzdGluZ3Vpc2hFeHByZXNzaW9uKGNhbkJlQXJyb3cpXG4gICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPCAwICYmICF0aGlzLmlzU2ltcGxlQXNzaWduVGFyZ2V0KGV4cHIpKVxuICAgICAgICByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPSBzdGFydFxuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEJpbmQgPCAwKVxuICAgICAgICByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kID0gc3RhcnRcbiAgICB9XG4gICAgcmV0dXJuIGV4cHJcblxuICBjYXNlIHR0LmJyYWNrZXRMOlxuICAgIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gICAgdGhpcy5uZXh0KClcbiAgICBub2RlLmVsZW1lbnRzID0gdGhpcy5wYXJzZUV4cHJMaXN0KHR0LmJyYWNrZXRSLCB0cnVlLCB0cnVlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJBcnJheUV4cHJlc3Npb25cIilcblxuICBjYXNlIHR0LmJyYWNlTDpcbiAgICByZXR1cm4gdGhpcy5wYXJzZU9iaihmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcblxuICBjYXNlIHR0Ll9mdW5jdGlvbjpcbiAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKVxuICAgIHRoaXMubmV4dCgpXG4gICAgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbihub2RlLCBmYWxzZSlcblxuICBjYXNlIHR0Ll9jbGFzczpcbiAgICByZXR1cm4gdGhpcy5wYXJzZUNsYXNzKHRoaXMuc3RhcnROb2RlKCksIGZhbHNlKVxuXG4gIGNhc2UgdHQuX25ldzpcbiAgICByZXR1cm4gdGhpcy5wYXJzZU5ldygpXG5cbiAgY2FzZSB0dC5iYWNrUXVvdGU6XG4gICAgcmV0dXJuIHRoaXMucGFyc2VUZW1wbGF0ZSgpXG5cbiAgZGVmYXVsdDpcbiAgICB0aGlzLnVuZXhwZWN0ZWQoKVxuICB9XG59XG5cbnBwJDMucGFyc2VMaXRlcmFsID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gIG5vZGUudmFsdWUgPSB2YWx1ZVxuICBub2RlLnJhdyA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5lbmQpXG4gIHRoaXMubmV4dCgpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJMaXRlcmFsXCIpXG59XG5cbnBwJDMucGFyc2VQYXJlbkV4cHJlc3Npb24gPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5leHBlY3QodHQucGFyZW5MKVxuICB2YXIgdmFsID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKVxuICB0aGlzLmV4cGVjdCh0dC5wYXJlblIpXG4gIHJldHVybiB2YWxcbn1cblxucHAkMy5wYXJzZVBhcmVuQW5kRGlzdGluZ3Vpc2hFeHByZXNzaW9uID0gZnVuY3Rpb24oY2FuQmVBcnJvdykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2MsIHZhbCwgYWxsb3dUcmFpbGluZ0NvbW1hID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDhcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgdGhpcy5uZXh0KClcblxuICAgIHZhciBpbm5lclN0YXJ0UG9zID0gdGhpcy5zdGFydCwgaW5uZXJTdGFydExvYyA9IHRoaXMuc3RhcnRMb2NcbiAgICB2YXIgZXhwckxpc3QgPSBbXSwgZmlyc3QgPSB0cnVlLCBsYXN0SXNDb21tYSA9IGZhbHNlXG4gICAgdmFyIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgPSBuZXcgRGVzdHJ1Y3R1cmluZ0Vycm9ycywgb2xkWWllbGRQb3MgPSB0aGlzLnlpZWxkUG9zLCBvbGRBd2FpdFBvcyA9IHRoaXMuYXdhaXRQb3MsIHNwcmVhZFN0YXJ0LCBpbm5lclBhcmVuU3RhcnRcbiAgICB0aGlzLnlpZWxkUG9zID0gMFxuICAgIHRoaXMuYXdhaXRQb3MgPSAwXG4gICAgd2hpbGUgKHRoaXMudHlwZSAhPT0gdHQucGFyZW5SKSB7XG4gICAgICBmaXJzdCA/IGZpcnN0ID0gZmFsc2UgOiB0aGlzJDEuZXhwZWN0KHR0LmNvbW1hKVxuICAgICAgaWYgKGFsbG93VHJhaWxpbmdDb21tYSAmJiB0aGlzJDEuYWZ0ZXJUcmFpbGluZ0NvbW1hKHR0LnBhcmVuUiwgdHJ1ZSkpIHtcbiAgICAgICAgbGFzdElzQ29tbWEgPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKHRoaXMkMS50eXBlID09PSB0dC5lbGxpcHNpcykge1xuICAgICAgICBzcHJlYWRTdGFydCA9IHRoaXMkMS5zdGFydFxuICAgICAgICBleHByTGlzdC5wdXNoKHRoaXMkMS5wYXJzZVBhcmVuSXRlbSh0aGlzJDEucGFyc2VSZXN0KCkpKVxuICAgICAgICBpZiAodGhpcyQxLnR5cGUgPT09IHR0LmNvbW1hKSB0aGlzJDEucmFpc2UodGhpcyQxLnN0YXJ0LCBcIkNvbW1hIGlzIG5vdCBwZXJtaXR0ZWQgYWZ0ZXIgdGhlIHJlc3QgZWxlbWVudFwiKVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMkMS50eXBlID09PSB0dC5wYXJlbkwgJiYgIWlubmVyUGFyZW5TdGFydCkge1xuICAgICAgICAgIGlubmVyUGFyZW5TdGFydCA9IHRoaXMkMS5zdGFydFxuICAgICAgICB9XG4gICAgICAgIGV4cHJMaXN0LnB1c2godGhpcyQxLnBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRoaXMkMS5wYXJzZVBhcmVuSXRlbSkpXG4gICAgICB9XG4gICAgfVxuICAgIHZhciBpbm5lckVuZFBvcyA9IHRoaXMuc3RhcnQsIGlubmVyRW5kTG9jID0gdGhpcy5zdGFydExvY1xuICAgIHRoaXMuZXhwZWN0KHR0LnBhcmVuUilcblxuICAgIGlmIChjYW5CZUFycm93ICYmICF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpICYmIHRoaXMuZWF0KHR0LmFycm93KSkge1xuICAgICAgdGhpcy5jaGVja1BhdHRlcm5FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgZmFsc2UpXG4gICAgICB0aGlzLmNoZWNrWWllbGRBd2FpdEluRGVmYXVsdFBhcmFtcygpXG4gICAgICBpZiAoaW5uZXJQYXJlblN0YXJ0KSB0aGlzLnVuZXhwZWN0ZWQoaW5uZXJQYXJlblN0YXJ0KVxuICAgICAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zXG4gICAgICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3NcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlUGFyZW5BcnJvd0xpc3Qoc3RhcnRQb3MsIHN0YXJ0TG9jLCBleHByTGlzdClcbiAgICB9XG5cbiAgICBpZiAoIWV4cHJMaXN0Lmxlbmd0aCB8fCBsYXN0SXNDb21tYSkgdGhpcy51bmV4cGVjdGVkKHRoaXMubGFzdFRva1N0YXJ0KVxuICAgIGlmIChzcHJlYWRTdGFydCkgdGhpcy51bmV4cGVjdGVkKHNwcmVhZFN0YXJ0KVxuICAgIHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpXG4gICAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zIHx8IHRoaXMueWllbGRQb3NcbiAgICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3MgfHwgdGhpcy5hd2FpdFBvc1xuXG4gICAgaWYgKGV4cHJMaXN0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhbCA9IHRoaXMuc3RhcnROb2RlQXQoaW5uZXJTdGFydFBvcywgaW5uZXJTdGFydExvYylcbiAgICAgIHZhbC5leHByZXNzaW9ucyA9IGV4cHJMaXN0XG4gICAgICB0aGlzLmZpbmlzaE5vZGVBdCh2YWwsIFwiU2VxdWVuY2VFeHByZXNzaW9uXCIsIGlubmVyRW5kUG9zLCBpbm5lckVuZExvYylcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsID0gZXhwckxpc3RbMF1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpXG4gIH1cblxuICBpZiAodGhpcy5vcHRpb25zLnByZXNlcnZlUGFyZW5zKSB7XG4gICAgdmFyIHBhciA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKVxuICAgIHBhci5leHByZXNzaW9uID0gdmFsXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShwYXIsIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsXG4gIH1cbn1cblxucHAkMy5wYXJzZVBhcmVuSXRlbSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgcmV0dXJuIGl0ZW1cbn1cblxucHAkMy5wYXJzZVBhcmVuQXJyb3dMaXN0ID0gZnVuY3Rpb24oc3RhcnRQb3MsIHN0YXJ0TG9jLCBleHByTGlzdCkge1xuICByZXR1cm4gdGhpcy5wYXJzZUFycm93RXhwcmVzc2lvbih0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyksIGV4cHJMaXN0KVxufVxuXG4vLyBOZXcncyBwcmVjZWRlbmNlIGlzIHNsaWdodGx5IHRyaWNreS4gSXQgbXVzdCBhbGxvdyBpdHMgYXJndW1lbnQgdG9cbi8vIGJlIGEgYFtdYCBvciBkb3Qgc3Vic2NyaXB0IGV4cHJlc3Npb24sIGJ1dCBub3QgYSBjYWxsIOKAlCBhdCBsZWFzdCxcbi8vIG5vdCB3aXRob3V0IHdyYXBwaW5nIGl0IGluIHBhcmVudGhlc2VzLiBUaHVzLCBpdCB1c2VzIHRoZSBub0NhbGxzXG4vLyBhcmd1bWVudCB0byBwYXJzZVN1YnNjcmlwdHMgdG8gcHJldmVudCBpdCBmcm9tIGNvbnN1bWluZyB0aGVcbi8vIGFyZ3VtZW50IGxpc3QuXG5cbnZhciBlbXB0eSQxID0gW11cblxucHAkMy5wYXJzZU5ldyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgdmFyIG1ldGEgPSB0aGlzLnBhcnNlSWRlbnQodHJ1ZSlcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHRoaXMuZWF0KHR0LmRvdCkpIHtcbiAgICBub2RlLm1ldGEgPSBtZXRhXG4gICAgbm9kZS5wcm9wZXJ0eSA9IHRoaXMucGFyc2VJZGVudCh0cnVlKVxuICAgIGlmIChub2RlLnByb3BlcnR5Lm5hbWUgIT09IFwidGFyZ2V0XCIpXG4gICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5wcm9wZXJ0eS5zdGFydCwgXCJUaGUgb25seSB2YWxpZCBtZXRhIHByb3BlcnR5IGZvciBuZXcgaXMgbmV3LnRhcmdldFwiKVxuICAgIGlmICghdGhpcy5pbkZ1bmN0aW9uKVxuICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUuc3RhcnQsIFwibmV3LnRhcmdldCBjYW4gb25seSBiZSB1c2VkIGluIGZ1bmN0aW9uc1wiKVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJNZXRhUHJvcGVydHlcIilcbiAgfVxuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2NcbiAgbm9kZS5jYWxsZWUgPSB0aGlzLnBhcnNlU3Vic2NyaXB0cyh0aGlzLnBhcnNlRXhwckF0b20oKSwgc3RhcnRQb3MsIHN0YXJ0TG9jLCB0cnVlKVxuICBpZiAodGhpcy5lYXQodHQucGFyZW5MKSkgbm9kZS5hcmd1bWVudHMgPSB0aGlzLnBhcnNlRXhwckxpc3QodHQucGFyZW5SLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCwgZmFsc2UpXG4gIGVsc2Ugbm9kZS5hcmd1bWVudHMgPSBlbXB0eSQxXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJOZXdFeHByZXNzaW9uXCIpXG59XG5cbi8vIFBhcnNlIHRlbXBsYXRlIGV4cHJlc3Npb24uXG5cbnBwJDMucGFyc2VUZW1wbGF0ZUVsZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGVsZW0gPSB0aGlzLnN0YXJ0Tm9kZSgpXG4gIGVsZW0udmFsdWUgPSB7XG4gICAgcmF3OiB0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMuZW5kKS5yZXBsYWNlKC9cXHJcXG4/L2csICdcXG4nKSxcbiAgICBjb29rZWQ6IHRoaXMudmFsdWVcbiAgfVxuICB0aGlzLm5leHQoKVxuICBlbGVtLnRhaWwgPSB0aGlzLnR5cGUgPT09IHR0LmJhY2tRdW90ZVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKGVsZW0sIFwiVGVtcGxhdGVFbGVtZW50XCIpXG59XG5cbnBwJDMucGFyc2VUZW1wbGF0ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgdGhpcy5uZXh0KClcbiAgbm9kZS5leHByZXNzaW9ucyA9IFtdXG4gIHZhciBjdXJFbHQgPSB0aGlzLnBhcnNlVGVtcGxhdGVFbGVtZW50KClcbiAgbm9kZS5xdWFzaXMgPSBbY3VyRWx0XVxuICB3aGlsZSAoIWN1ckVsdC50YWlsKSB7XG4gICAgdGhpcyQxLmV4cGVjdCh0dC5kb2xsYXJCcmFjZUwpXG4gICAgbm9kZS5leHByZXNzaW9ucy5wdXNoKHRoaXMkMS5wYXJzZUV4cHJlc3Npb24oKSlcbiAgICB0aGlzJDEuZXhwZWN0KHR0LmJyYWNlUilcbiAgICBub2RlLnF1YXNpcy5wdXNoKGN1ckVsdCA9IHRoaXMkMS5wYXJzZVRlbXBsYXRlRWxlbWVudCgpKVxuICB9XG4gIHRoaXMubmV4dCgpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJUZW1wbGF0ZUxpdGVyYWxcIilcbn1cblxuLy8gUGFyc2UgYW4gb2JqZWN0IGxpdGVyYWwgb3IgYmluZGluZyBwYXR0ZXJuLlxuXG5wcCQzLnBhcnNlT2JqID0gZnVuY3Rpb24oaXNQYXR0ZXJuLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKSwgZmlyc3QgPSB0cnVlLCBwcm9wSGFzaCA9IHt9XG4gIG5vZGUucHJvcGVydGllcyA9IFtdXG4gIHRoaXMubmV4dCgpXG4gIHdoaWxlICghdGhpcy5lYXQodHQuYnJhY2VSKSkge1xuICAgIGlmICghZmlyc3QpIHtcbiAgICAgIHRoaXMkMS5leHBlY3QodHQuY29tbWEpXG4gICAgICBpZiAodGhpcyQxLmFmdGVyVHJhaWxpbmdDb21tYSh0dC5icmFjZVIpKSBicmVha1xuICAgIH0gZWxzZSBmaXJzdCA9IGZhbHNlXG5cbiAgICB2YXIgcHJvcCA9IHRoaXMkMS5zdGFydE5vZGUoKSwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIHN0YXJ0UG9zLCBzdGFydExvY1xuICAgIGlmICh0aGlzJDEub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgICBwcm9wLm1ldGhvZCA9IGZhbHNlXG4gICAgICBwcm9wLnNob3J0aGFuZCA9IGZhbHNlXG4gICAgICBpZiAoaXNQYXR0ZXJuIHx8IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgICAgc3RhcnRQb3MgPSB0aGlzJDEuc3RhcnRcbiAgICAgICAgc3RhcnRMb2MgPSB0aGlzJDEuc3RhcnRMb2NcbiAgICAgIH1cbiAgICAgIGlmICghaXNQYXR0ZXJuKVxuICAgICAgICBpc0dlbmVyYXRvciA9IHRoaXMkMS5lYXQodHQuc3RhcilcbiAgICB9XG4gICAgdGhpcyQxLnBhcnNlUHJvcGVydHlOYW1lKHByb3ApXG4gICAgaWYgKCFpc1BhdHRlcm4gJiYgdGhpcyQxLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCAmJiAhaXNHZW5lcmF0b3IgJiYgIXByb3AuY29tcHV0ZWQgJiZcbiAgICAgICAgcHJvcC5rZXkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYgcHJvcC5rZXkubmFtZSA9PT0gXCJhc3luY1wiICYmIHRoaXMkMS50eXBlICE9PSB0dC5wYXJlbkwgJiZcbiAgICAgICAgdGhpcyQxLnR5cGUgIT09IHR0LmNvbG9uICYmICF0aGlzJDEuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICAgIGlzQXN5bmMgPSB0cnVlXG4gICAgICB0aGlzJDEucGFyc2VQcm9wZXJ0eU5hbWUocHJvcCwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcbiAgICB9IGVsc2Uge1xuICAgICAgaXNBc3luYyA9IGZhbHNlXG4gICAgfVxuICAgIHRoaXMkMS5wYXJzZVByb3BlcnR5VmFsdWUocHJvcCwgaXNQYXR0ZXJuLCBpc0dlbmVyYXRvciwgaXNBc3luYywgc3RhcnRQb3MsIHN0YXJ0TG9jLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuICAgIHRoaXMkMS5jaGVja1Byb3BDbGFzaChwcm9wLCBwcm9wSGFzaClcbiAgICBub2RlLnByb3BlcnRpZXMucHVzaCh0aGlzJDEuZmluaXNoTm9kZShwcm9wLCBcIlByb3BlcnR5XCIpKVxuICB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgaXNQYXR0ZXJuID8gXCJPYmplY3RQYXR0ZXJuXCIgOiBcIk9iamVjdEV4cHJlc3Npb25cIilcbn1cblxucHAkMy5wYXJzZVByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihwcm9wLCBpc1BhdHRlcm4sIGlzR2VuZXJhdG9yLCBpc0FzeW5jLCBzdGFydFBvcywgc3RhcnRMb2MsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgaWYgKChpc0dlbmVyYXRvciB8fCBpc0FzeW5jKSAmJiB0aGlzLnR5cGUgPT09IHR0LmNvbG9uKVxuICAgIHRoaXMudW5leHBlY3RlZCgpXG5cbiAgaWYgKHRoaXMuZWF0KHR0LmNvbG9uKSkge1xuICAgIHByb3AudmFsdWUgPSBpc1BhdHRlcm4gPyB0aGlzLnBhcnNlTWF5YmVEZWZhdWx0KHRoaXMuc3RhcnQsIHRoaXMuc3RhcnRMb2MpIDogdGhpcy5wYXJzZU1heWJlQXNzaWduKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuICAgIHByb3Aua2luZCA9IFwiaW5pdFwiXG4gIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgdGhpcy50eXBlID09PSB0dC5wYXJlbkwpIHtcbiAgICBpZiAoaXNQYXR0ZXJuKSB0aGlzLnVuZXhwZWN0ZWQoKVxuICAgIHByb3Aua2luZCA9IFwiaW5pdFwiXG4gICAgcHJvcC5tZXRob2QgPSB0cnVlXG4gICAgcHJvcC52YWx1ZSA9IHRoaXMucGFyc2VNZXRob2QoaXNHZW5lcmF0b3IsIGlzQXN5bmMpXG4gIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDUgJiYgIXByb3AuY29tcHV0ZWQgJiYgcHJvcC5rZXkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgICAgICAgICAocHJvcC5rZXkubmFtZSA9PT0gXCJnZXRcIiB8fCBwcm9wLmtleS5uYW1lID09PSBcInNldFwiKSAmJlxuICAgICAgICAgICAgICh0aGlzLnR5cGUgIT0gdHQuY29tbWEgJiYgdGhpcy50eXBlICE9IHR0LmJyYWNlUikpIHtcbiAgICBpZiAoaXNHZW5lcmF0b3IgfHwgaXNBc3luYyB8fCBpc1BhdHRlcm4pIHRoaXMudW5leHBlY3RlZCgpXG4gICAgcHJvcC5raW5kID0gcHJvcC5rZXkubmFtZVxuICAgIHRoaXMucGFyc2VQcm9wZXJ0eU5hbWUocHJvcClcbiAgICBwcm9wLnZhbHVlID0gdGhpcy5wYXJzZU1ldGhvZChmYWxzZSlcbiAgICB2YXIgcGFyYW1Db3VudCA9IHByb3Aua2luZCA9PT0gXCJnZXRcIiA/IDAgOiAxXG4gICAgaWYgKHByb3AudmFsdWUucGFyYW1zLmxlbmd0aCAhPT0gcGFyYW1Db3VudCkge1xuICAgICAgdmFyIHN0YXJ0ID0gcHJvcC52YWx1ZS5zdGFydFxuICAgICAgaWYgKHByb3Aua2luZCA9PT0gXCJnZXRcIilcbiAgICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcImdldHRlciBzaG91bGQgaGF2ZSBubyBwYXJhbXNcIilcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcInNldHRlciBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbVwiKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcC5raW5kID09PSBcInNldFwiICYmIHByb3AudmFsdWUucGFyYW1zWzBdLnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIilcbiAgICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHByb3AudmFsdWUucGFyYW1zWzBdLnN0YXJ0LCBcIlNldHRlciBjYW5ub3QgdXNlIHJlc3QgcGFyYW1zXCIpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmICFwcm9wLmNvbXB1dGVkICYmIHByb3Aua2V5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiKSB7XG4gICAgaWYgKHRoaXMua2V5d29yZHMudGVzdChwcm9wLmtleS5uYW1lKSB8fFxuICAgICAgICAodGhpcy5zdHJpY3QgPyB0aGlzLnJlc2VydmVkV29yZHNTdHJpY3QgOiB0aGlzLnJlc2VydmVkV29yZHMpLnRlc3QocHJvcC5rZXkubmFtZSkgfHxcbiAgICAgICAgKHRoaXMuaW5HZW5lcmF0b3IgJiYgcHJvcC5rZXkubmFtZSA9PSBcInlpZWxkXCIpIHx8XG4gICAgICAgICh0aGlzLmluQXN5bmMgJiYgcHJvcC5rZXkubmFtZSA9PSBcImF3YWl0XCIpKVxuICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHByb3Aua2V5LnN0YXJ0LCBcIidcIiArIHByb3Aua2V5Lm5hbWUgKyBcIicgY2FuIG5vdCBiZSB1c2VkIGFzIHNob3J0aGFuZCBwcm9wZXJ0eVwiKVxuICAgIHByb3Aua2luZCA9IFwiaW5pdFwiXG4gICAgaWYgKGlzUGF0dGVybikge1xuICAgICAgcHJvcC52YWx1ZSA9IHRoaXMucGFyc2VNYXliZURlZmF1bHQoc3RhcnRQb3MsIHN0YXJ0TG9jLCBwcm9wLmtleSlcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdHQuZXEgJiYgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuc2hvcnRoYW5kQXNzaWduIDwgMClcbiAgICAgICAgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5zaG9ydGhhbmRBc3NpZ24gPSB0aGlzLnN0YXJ0XG4gICAgICBwcm9wLnZhbHVlID0gdGhpcy5wYXJzZU1heWJlRGVmYXVsdChzdGFydFBvcywgc3RhcnRMb2MsIHByb3Aua2V5KVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wLnZhbHVlID0gcHJvcC5rZXlcbiAgICB9XG4gICAgcHJvcC5zaG9ydGhhbmQgPSB0cnVlXG4gIH0gZWxzZSB0aGlzLnVuZXhwZWN0ZWQoKVxufVxuXG5wcCQzLnBhcnNlUHJvcGVydHlOYW1lID0gZnVuY3Rpb24ocHJvcCkge1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHtcbiAgICBpZiAodGhpcy5lYXQodHQuYnJhY2tldEwpKSB7XG4gICAgICBwcm9wLmNvbXB1dGVkID0gdHJ1ZVxuICAgICAgcHJvcC5rZXkgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKVxuICAgICAgdGhpcy5leHBlY3QodHQuYnJhY2tldFIpXG4gICAgICByZXR1cm4gcHJvcC5rZXlcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcC5jb21wdXRlZCA9IGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiBwcm9wLmtleSA9IHRoaXMudHlwZSA9PT0gdHQubnVtIHx8IHRoaXMudHlwZSA9PT0gdHQuc3RyaW5nID8gdGhpcy5wYXJzZUV4cHJBdG9tKCkgOiB0aGlzLnBhcnNlSWRlbnQodHJ1ZSlcbn1cblxuLy8gSW5pdGlhbGl6ZSBlbXB0eSBmdW5jdGlvbiBub2RlLlxuXG5wcCQzLmluaXRGdW5jdGlvbiA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgbm9kZS5pZCA9IG51bGxcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgbm9kZS5nZW5lcmF0b3IgPSBmYWxzZVxuICAgIG5vZGUuZXhwcmVzc2lvbiA9IGZhbHNlXG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KVxuICAgIG5vZGUuYXN5bmMgPSBmYWxzZVxufVxuXG4vLyBQYXJzZSBvYmplY3Qgb3IgY2xhc3MgbWV0aG9kLlxuXG5wcCQzLnBhcnNlTWV0aG9kID0gZnVuY3Rpb24oaXNHZW5lcmF0b3IsIGlzQXN5bmMpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpLCBvbGRJbkdlbiA9IHRoaXMuaW5HZW5lcmF0b3IsIG9sZEluQXN5bmMgPSB0aGlzLmluQXN5bmMsXG4gICAgICBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgb2xkSW5GdW5jID0gdGhpcy5pbkZ1bmN0aW9uXG5cbiAgdGhpcy5pbml0RnVuY3Rpb24obm9kZSlcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KVxuICAgIG5vZGUuZ2VuZXJhdG9yID0gaXNHZW5lcmF0b3JcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KVxuICAgIG5vZGUuYXN5bmMgPSAhIWlzQXN5bmNcblxuICB0aGlzLmluR2VuZXJhdG9yID0gbm9kZS5nZW5lcmF0b3JcbiAgdGhpcy5pbkFzeW5jID0gbm9kZS5hc3luY1xuICB0aGlzLnlpZWxkUG9zID0gMFxuICB0aGlzLmF3YWl0UG9zID0gMFxuICB0aGlzLmluRnVuY3Rpb24gPSB0cnVlXG5cbiAgdGhpcy5leHBlY3QodHQucGFyZW5MKVxuICBub2RlLnBhcmFtcyA9IHRoaXMucGFyc2VCaW5kaW5nTGlzdCh0dC5wYXJlblIsIGZhbHNlLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOClcbiAgdGhpcy5jaGVja1lpZWxkQXdhaXRJbkRlZmF1bHRQYXJhbXMoKVxuICB0aGlzLnBhcnNlRnVuY3Rpb25Cb2R5KG5vZGUsIGZhbHNlKVxuXG4gIHRoaXMuaW5HZW5lcmF0b3IgPSBvbGRJbkdlblxuICB0aGlzLmluQXN5bmMgPSBvbGRJbkFzeW5jXG4gIHRoaXMueWllbGRQb3MgPSBvbGRZaWVsZFBvc1xuICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3NcbiAgdGhpcy5pbkZ1bmN0aW9uID0gb2xkSW5GdW5jXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJGdW5jdGlvbkV4cHJlc3Npb25cIilcbn1cblxuLy8gUGFyc2UgYXJyb3cgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuXG5cbnBwJDMucGFyc2VBcnJvd0V4cHJlc3Npb24gPSBmdW5jdGlvbihub2RlLCBwYXJhbXMsIGlzQXN5bmMpIHtcbiAgdmFyIG9sZEluR2VuID0gdGhpcy5pbkdlbmVyYXRvciwgb2xkSW5Bc3luYyA9IHRoaXMuaW5Bc3luYyxcbiAgICAgIG9sZFlpZWxkUG9zID0gdGhpcy55aWVsZFBvcywgb2xkQXdhaXRQb3MgPSB0aGlzLmF3YWl0UG9zLCBvbGRJbkZ1bmMgPSB0aGlzLmluRnVuY3Rpb25cblxuICB0aGlzLmluaXRGdW5jdGlvbihub2RlKVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpXG4gICAgbm9kZS5hc3luYyA9ICEhaXNBc3luY1xuXG4gIHRoaXMuaW5HZW5lcmF0b3IgPSBmYWxzZVxuICB0aGlzLmluQXN5bmMgPSBub2RlLmFzeW5jXG4gIHRoaXMueWllbGRQb3MgPSAwXG4gIHRoaXMuYXdhaXRQb3MgPSAwXG4gIHRoaXMuaW5GdW5jdGlvbiA9IHRydWVcblxuICBub2RlLnBhcmFtcyA9IHRoaXMudG9Bc3NpZ25hYmxlTGlzdChwYXJhbXMsIHRydWUpXG4gIHRoaXMucGFyc2VGdW5jdGlvbkJvZHkobm9kZSwgdHJ1ZSlcblxuICB0aGlzLmluR2VuZXJhdG9yID0gb2xkSW5HZW5cbiAgdGhpcy5pbkFzeW5jID0gb2xkSW5Bc3luY1xuICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3NcbiAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zXG4gIHRoaXMuaW5GdW5jdGlvbiA9IG9sZEluRnVuY1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIilcbn1cblxuLy8gUGFyc2UgZnVuY3Rpb24gYm9keSBhbmQgY2hlY2sgcGFyYW1ldGVycy5cblxucHAkMy5wYXJzZUZ1bmN0aW9uQm9keSA9IGZ1bmN0aW9uKG5vZGUsIGlzQXJyb3dGdW5jdGlvbikge1xuICB2YXIgaXNFeHByZXNzaW9uID0gaXNBcnJvd0Z1bmN0aW9uICYmIHRoaXMudHlwZSAhPT0gdHQuYnJhY2VMXG4gIHZhciBvbGRTdHJpY3QgPSB0aGlzLnN0cmljdCwgdXNlU3RyaWN0ID0gZmFsc2VcblxuICBpZiAoaXNFeHByZXNzaW9uKSB7XG4gICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKClcbiAgICBub2RlLmV4cHJlc3Npb24gPSB0cnVlXG4gIH0gZWxzZSB7XG4gICAgdmFyIG5vblNpbXBsZSA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA3ICYmICF0aGlzLmlzU2ltcGxlUGFyYW1MaXN0KG5vZGUucGFyYW1zKVxuICAgIGlmICghb2xkU3RyaWN0IHx8IG5vblNpbXBsZSkge1xuICAgICAgdXNlU3RyaWN0ID0gdGhpcy5zdHJpY3REaXJlY3RpdmUodGhpcy5lbmQpXG4gICAgICAvLyBJZiB0aGlzIGlzIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24sIHZlcmlmeSB0aGF0IGFyZ3VtZW50IG5hbWVzXG4gICAgICAvLyBhcmUgbm90IHJlcGVhdGVkLCBhbmQgaXQgZG9lcyBub3QgdHJ5IHRvIGJpbmQgdGhlIHdvcmRzIGBldmFsYFxuICAgICAgLy8gb3IgYGFyZ3VtZW50c2AuXG4gICAgICBpZiAodXNlU3RyaWN0ICYmIG5vblNpbXBsZSlcbiAgICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUuc3RhcnQsIFwiSWxsZWdhbCAndXNlIHN0cmljdCcgZGlyZWN0aXZlIGluIGZ1bmN0aW9uIHdpdGggbm9uLXNpbXBsZSBwYXJhbWV0ZXIgbGlzdFwiKVxuICAgIH1cbiAgICAvLyBTdGFydCBhIG5ldyBzY29wZSB3aXRoIHJlZ2FyZCB0byBsYWJlbHMgYW5kIHRoZSBgaW5GdW5jdGlvbmBcbiAgICAvLyBmbGFnIChyZXN0b3JlIHRoZW0gdG8gdGhlaXIgb2xkIHZhbHVlIGFmdGVyd2FyZHMpLlxuICAgIHZhciBvbGRMYWJlbHMgPSB0aGlzLmxhYmVsc1xuICAgIHRoaXMubGFiZWxzID0gW11cbiAgICBpZiAodXNlU3RyaWN0KSB0aGlzLnN0cmljdCA9IHRydWVcbiAgICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlQmxvY2sodHJ1ZSlcbiAgICBub2RlLmV4cHJlc3Npb24gPSBmYWxzZVxuICAgIHRoaXMubGFiZWxzID0gb2xkTGFiZWxzXG4gIH1cblxuICBpZiAob2xkU3RyaWN0IHx8IHVzZVN0cmljdCkge1xuICAgIHRoaXMuc3RyaWN0ID0gdHJ1ZVxuICAgIGlmIChub2RlLmlkKVxuICAgICAgdGhpcy5jaGVja0xWYWwobm9kZS5pZCwgdHJ1ZSlcbiAgICB0aGlzLmNoZWNrUGFyYW1zKG5vZGUpXG4gICAgdGhpcy5zdHJpY3QgPSBvbGRTdHJpY3RcbiAgfSBlbHNlIGlmIChpc0Fycm93RnVuY3Rpb24gfHwgIXRoaXMuaXNTaW1wbGVQYXJhbUxpc3Qobm9kZS5wYXJhbXMpKSB7XG4gICAgdGhpcy5jaGVja1BhcmFtcyhub2RlKVxuICB9XG59XG5cbnBwJDMuaXNTaW1wbGVQYXJhbUxpc3QgPSBmdW5jdGlvbihwYXJhbXMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKHBhcmFtc1tpXS50eXBlICE9PSBcIklkZW50aWZpZXJcIikgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbi8vIENoZWNrcyBmdW5jdGlvbiBwYXJhbXMgZm9yIHZhcmlvdXMgZGlzYWxsb3dlZCBwYXR0ZXJucyBzdWNoIGFzIHVzaW5nIFwiZXZhbFwiXG4vLyBvciBcImFyZ3VtZW50c1wiIGFuZCBkdXBsaWNhdGUgcGFyYW1ldGVycy5cblxucHAkMy5jaGVja1BhcmFtcyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG5hbWVIYXNoID0ge31cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLnBhcmFtcy5sZW5ndGg7IGkrKykgdGhpcyQxLmNoZWNrTFZhbChub2RlLnBhcmFtc1tpXSwgdHJ1ZSwgbmFtZUhhc2gpXG59XG5cbi8vIFBhcnNlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zLCBhbmQgcmV0dXJucyB0aGVtIGFzXG4vLyBhbiBhcnJheS4gYGNsb3NlYCBpcyB0aGUgdG9rZW4gdHlwZSB0aGF0IGVuZHMgdGhlIGxpc3QsIGFuZFxuLy8gYGFsbG93RW1wdHlgIGNhbiBiZSB0dXJuZWQgb24gdG8gYWxsb3cgc3Vic2VxdWVudCBjb21tYXMgd2l0aFxuLy8gbm90aGluZyBpbiBiZXR3ZWVuIHRoZW0gdG8gYmUgcGFyc2VkIGFzIGBudWxsYCAod2hpY2ggaXMgbmVlZGVkXG4vLyBmb3IgYXJyYXkgbGl0ZXJhbHMpLlxuXG5wcCQzLnBhcnNlRXhwckxpc3QgPSBmdW5jdGlvbihjbG9zZSwgYWxsb3dUcmFpbGluZ0NvbW1hLCBhbGxvd0VtcHR5LCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBlbHRzID0gW10sIGZpcnN0ID0gdHJ1ZVxuICB3aGlsZSAoIXRoaXMuZWF0KGNsb3NlKSkge1xuICAgIGlmICghZmlyc3QpIHtcbiAgICAgIHRoaXMkMS5leHBlY3QodHQuY29tbWEpXG4gICAgICBpZiAoYWxsb3dUcmFpbGluZ0NvbW1hICYmIHRoaXMkMS5hZnRlclRyYWlsaW5nQ29tbWEoY2xvc2UpKSBicmVha1xuICAgIH0gZWxzZSBmaXJzdCA9IGZhbHNlXG5cbiAgICB2YXIgZWx0XG4gICAgaWYgKGFsbG93RW1wdHkgJiYgdGhpcyQxLnR5cGUgPT09IHR0LmNvbW1hKVxuICAgICAgZWx0ID0gbnVsbFxuICAgIGVsc2UgaWYgKHRoaXMkMS50eXBlID09PSB0dC5lbGxpcHNpcykge1xuICAgICAgZWx0ID0gdGhpcyQxLnBhcnNlU3ByZWFkKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpXG4gICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyAmJiB0aGlzJDEudHlwZSA9PT0gdHQuY29tbWEgJiYgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hIDwgMClcbiAgICAgICAgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hID0gdGhpcyQxLnN0YXJ0XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsdCA9IHRoaXMkMS5wYXJzZU1heWJlQXNzaWduKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuICAgIH1cbiAgICBlbHRzLnB1c2goZWx0KVxuICB9XG4gIHJldHVybiBlbHRzXG59XG5cbi8vIFBhcnNlIHRoZSBuZXh0IHRva2VuIGFzIGFuIGlkZW50aWZpZXIuIElmIGBsaWJlcmFsYCBpcyB0cnVlICh1c2VkXG4vLyB3aGVuIHBhcnNpbmcgcHJvcGVydGllcyksIGl0IHdpbGwgYWxzbyBjb252ZXJ0IGtleXdvcmRzIGludG9cbi8vIGlkZW50aWZpZXJzLlxuXG5wcCQzLnBhcnNlSWRlbnQgPSBmdW5jdGlvbihsaWJlcmFsKSB7XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKVxuICBpZiAobGliZXJhbCAmJiB0aGlzLm9wdGlvbnMuYWxsb3dSZXNlcnZlZCA9PSBcIm5ldmVyXCIpIGxpYmVyYWwgPSBmYWxzZVxuICBpZiAodGhpcy50eXBlID09PSB0dC5uYW1lKSB7XG4gICAgaWYgKCFsaWJlcmFsICYmICh0aGlzLnN0cmljdCA/IHRoaXMucmVzZXJ2ZWRXb3Jkc1N0cmljdCA6IHRoaXMucmVzZXJ2ZWRXb3JkcykudGVzdCh0aGlzLnZhbHVlKSAmJlxuICAgICAgICAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgfHxcbiAgICAgICAgIHRoaXMuaW5wdXQuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5lbmQpLmluZGV4T2YoXCJcXFxcXCIpID09IC0xKSlcbiAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCBcIlRoZSBrZXl3b3JkICdcIiArIHRoaXMudmFsdWUgKyBcIicgaXMgcmVzZXJ2ZWRcIilcbiAgICBpZiAodGhpcy5pbkdlbmVyYXRvciAmJiB0aGlzLnZhbHVlID09PSBcInlpZWxkXCIpXG4gICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5zdGFydCwgXCJDYW4gbm90IHVzZSAneWllbGQnIGFzIGlkZW50aWZpZXIgaW5zaWRlIGEgZ2VuZXJhdG9yXCIpXG4gICAgaWYgKHRoaXMuaW5Bc3luYyAmJiB0aGlzLnZhbHVlID09PSBcImF3YWl0XCIpXG4gICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5zdGFydCwgXCJDYW4gbm90IHVzZSAnYXdhaXQnIGFzIGlkZW50aWZpZXIgaW5zaWRlIGFuIGFzeW5jIGZ1bmN0aW9uXCIpXG4gICAgbm9kZS5uYW1lID0gdGhpcy52YWx1ZVxuICB9IGVsc2UgaWYgKGxpYmVyYWwgJiYgdGhpcy50eXBlLmtleXdvcmQpIHtcbiAgICBub2RlLm5hbWUgPSB0aGlzLnR5cGUua2V5d29yZFxuICB9IGVsc2Uge1xuICAgIHRoaXMudW5leHBlY3RlZCgpXG4gIH1cbiAgdGhpcy5uZXh0KClcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIklkZW50aWZpZXJcIilcbn1cblxuLy8gUGFyc2VzIHlpZWxkIGV4cHJlc3Npb24gaW5zaWRlIGdlbmVyYXRvci5cblxucHAkMy5wYXJzZVlpZWxkID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy55aWVsZFBvcykgdGhpcy55aWVsZFBvcyA9IHRoaXMuc3RhcnRcblxuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgdGhpcy5uZXh0KClcbiAgaWYgKHRoaXMudHlwZSA9PSB0dC5zZW1pIHx8IHRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgfHwgKHRoaXMudHlwZSAhPSB0dC5zdGFyICYmICF0aGlzLnR5cGUuc3RhcnRzRXhwcikpIHtcbiAgICBub2RlLmRlbGVnYXRlID0gZmFsc2VcbiAgICBub2RlLmFyZ3VtZW50ID0gbnVsbFxuICB9IGVsc2Uge1xuICAgIG5vZGUuZGVsZWdhdGUgPSB0aGlzLmVhdCh0dC5zdGFyKVxuICAgIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKVxuICB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJZaWVsZEV4cHJlc3Npb25cIilcbn1cblxucHAkMy5wYXJzZUF3YWl0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5hd2FpdFBvcykgdGhpcy5hd2FpdFBvcyA9IHRoaXMuc3RhcnRcblxuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKClcbiAgdGhpcy5uZXh0KClcbiAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZVVuYXJ5KG51bGwsIHRydWUpXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJBd2FpdEV4cHJlc3Npb25cIilcbn1cblxudmFyIHBwJDQgPSBQYXJzZXIucHJvdG90eXBlXG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByYWlzZSBleGNlcHRpb25zIG9uIHBhcnNlIGVycm9ycy4gSXRcbi8vIHRha2VzIGFuIG9mZnNldCBpbnRlZ2VyIChpbnRvIHRoZSBjdXJyZW50IGBpbnB1dGApIHRvIGluZGljYXRlXG4vLyB0aGUgbG9jYXRpb24gb2YgdGhlIGVycm9yLCBhdHRhY2hlcyB0aGUgcG9zaXRpb24gdG8gdGhlIGVuZFxuLy8gb2YgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCB0aGVuIHJhaXNlcyBhIGBTeW50YXhFcnJvcmAgd2l0aCB0aGF0XG4vLyBtZXNzYWdlLlxuXG5wcCQ0LnJhaXNlID0gZnVuY3Rpb24ocG9zLCBtZXNzYWdlKSB7XG4gIHZhciBsb2MgPSBnZXRMaW5lSW5mbyh0aGlzLmlucHV0LCBwb3MpXG4gIG1lc3NhZ2UgKz0gXCIgKFwiICsgbG9jLmxpbmUgKyBcIjpcIiArIGxvYy5jb2x1bW4gKyBcIilcIlxuICB2YXIgZXJyID0gbmV3IFN5bnRheEVycm9yKG1lc3NhZ2UpXG4gIGVyci5wb3MgPSBwb3M7IGVyci5sb2MgPSBsb2M7IGVyci5yYWlzZWRBdCA9IHRoaXMucG9zXG4gIHRocm93IGVyclxufVxuXG5wcCQ0LnJhaXNlUmVjb3ZlcmFibGUgPSBwcCQ0LnJhaXNlXG5cbnBwJDQuY3VyUG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFBvc2l0aW9uKHRoaXMuY3VyTGluZSwgdGhpcy5wb3MgLSB0aGlzLmxpbmVTdGFydClcbiAgfVxufVxuXG52YXIgTm9kZSA9IGZ1bmN0aW9uIE5vZGUocGFyc2VyLCBwb3MsIGxvYykge1xuICB0aGlzLnR5cGUgPSBcIlwiXG4gIHRoaXMuc3RhcnQgPSBwb3NcbiAgdGhpcy5lbmQgPSAwXG4gIGlmIChwYXJzZXIub3B0aW9ucy5sb2NhdGlvbnMpXG4gICAgdGhpcy5sb2MgPSBuZXcgU291cmNlTG9jYXRpb24ocGFyc2VyLCBsb2MpXG4gIGlmIChwYXJzZXIub3B0aW9ucy5kaXJlY3RTb3VyY2VGaWxlKVxuICAgIHRoaXMuc291cmNlRmlsZSA9IHBhcnNlci5vcHRpb25zLmRpcmVjdFNvdXJjZUZpbGVcbiAgaWYgKHBhcnNlci5vcHRpb25zLnJhbmdlcylcbiAgICB0aGlzLnJhbmdlID0gW3BvcywgMF1cbn07XG5cbi8vIFN0YXJ0IGFuIEFTVCBub2RlLCBhdHRhY2hpbmcgYSBzdGFydCBvZmZzZXQuXG5cbnZhciBwcCQ1ID0gUGFyc2VyLnByb3RvdHlwZVxuXG5wcCQ1LnN0YXJ0Tm9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IE5vZGUodGhpcywgdGhpcy5zdGFydCwgdGhpcy5zdGFydExvYylcbn1cblxucHAkNS5zdGFydE5vZGVBdCA9IGZ1bmN0aW9uKHBvcywgbG9jKSB7XG4gIHJldHVybiBuZXcgTm9kZSh0aGlzLCBwb3MsIGxvYylcbn1cblxuLy8gRmluaXNoIGFuIEFTVCBub2RlLCBhZGRpbmcgYHR5cGVgIGFuZCBgZW5kYCBwcm9wZXJ0aWVzLlxuXG5mdW5jdGlvbiBmaW5pc2hOb2RlQXQobm9kZSwgdHlwZSwgcG9zLCBsb2MpIHtcbiAgbm9kZS50eXBlID0gdHlwZVxuICBub2RlLmVuZCA9IHBvc1xuICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucylcbiAgICBub2RlLmxvYy5lbmQgPSBsb2NcbiAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpXG4gICAgbm9kZS5yYW5nZVsxXSA9IHBvc1xuICByZXR1cm4gbm9kZVxufVxuXG5wcCQ1LmZpbmlzaE5vZGUgPSBmdW5jdGlvbihub2RlLCB0eXBlKSB7XG4gIHJldHVybiBmaW5pc2hOb2RlQXQuY2FsbCh0aGlzLCBub2RlLCB0eXBlLCB0aGlzLmxhc3RUb2tFbmQsIHRoaXMubGFzdFRva0VuZExvYylcbn1cblxuLy8gRmluaXNoIG5vZGUgYXQgZ2l2ZW4gcG9zaXRpb25cblxucHAkNS5maW5pc2hOb2RlQXQgPSBmdW5jdGlvbihub2RlLCB0eXBlLCBwb3MsIGxvYykge1xuICByZXR1cm4gZmluaXNoTm9kZUF0LmNhbGwodGhpcywgbm9kZSwgdHlwZSwgcG9zLCBsb2MpXG59XG5cbi8vIFRoZSBhbGdvcml0aG0gdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHJlZ2V4cCBjYW4gYXBwZWFyIGF0IGFcbi8vIGdpdmVuIHBvaW50IGluIHRoZSBwcm9ncmFtIGlzIGxvb3NlbHkgYmFzZWQgb24gc3dlZXQuanMnIGFwcHJvYWNoLlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3N3ZWV0LmpzL3dpa2kvZGVzaWduXG5cbnZhciBUb2tDb250ZXh0ID0gZnVuY3Rpb24gVG9rQ29udGV4dCh0b2tlbiwgaXNFeHByLCBwcmVzZXJ2ZVNwYWNlLCBvdmVycmlkZSkge1xuICB0aGlzLnRva2VuID0gdG9rZW5cbiAgdGhpcy5pc0V4cHIgPSAhIWlzRXhwclxuICB0aGlzLnByZXNlcnZlU3BhY2UgPSAhIXByZXNlcnZlU3BhY2VcbiAgdGhpcy5vdmVycmlkZSA9IG92ZXJyaWRlXG59O1xuXG52YXIgdHlwZXMgPSB7XG4gIGJfc3RhdDogbmV3IFRva0NvbnRleHQoXCJ7XCIsIGZhbHNlKSxcbiAgYl9leHByOiBuZXcgVG9rQ29udGV4dChcIntcIiwgdHJ1ZSksXG4gIGJfdG1wbDogbmV3IFRva0NvbnRleHQoXCIke1wiLCB0cnVlKSxcbiAgcF9zdGF0OiBuZXcgVG9rQ29udGV4dChcIihcIiwgZmFsc2UpLFxuICBwX2V4cHI6IG5ldyBUb2tDb250ZXh0KFwiKFwiLCB0cnVlKSxcbiAgcV90bXBsOiBuZXcgVG9rQ29udGV4dChcImBcIiwgdHJ1ZSwgdHJ1ZSwgZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAucmVhZFRtcGxUb2tlbigpOyB9KSxcbiAgZl9leHByOiBuZXcgVG9rQ29udGV4dChcImZ1bmN0aW9uXCIsIHRydWUpXG59XG5cbnZhciBwcCQ2ID0gUGFyc2VyLnByb3RvdHlwZVxuXG5wcCQ2LmluaXRpYWxDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBbdHlwZXMuYl9zdGF0XVxufVxuXG5wcCQ2LmJyYWNlSXNCbG9jayA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gIGlmIChwcmV2VHlwZSA9PT0gdHQuY29sb24pIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5jdXJDb250ZXh0KClcbiAgICBpZiAocGFyZW50ID09PSB0eXBlcy5iX3N0YXQgfHwgcGFyZW50ID09PSB0eXBlcy5iX2V4cHIpXG4gICAgICByZXR1cm4gIXBhcmVudC5pc0V4cHJcbiAgfVxuICBpZiAocHJldlR5cGUgPT09IHR0Ll9yZXR1cm4pXG4gICAgcmV0dXJuIGxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rRW5kLCB0aGlzLnN0YXJ0KSlcbiAgaWYgKHByZXZUeXBlID09PSB0dC5fZWxzZSB8fCBwcmV2VHlwZSA9PT0gdHQuc2VtaSB8fCBwcmV2VHlwZSA9PT0gdHQuZW9mIHx8IHByZXZUeXBlID09PSB0dC5wYXJlblIpXG4gICAgcmV0dXJuIHRydWVcbiAgaWYgKHByZXZUeXBlID09IHR0LmJyYWNlTClcbiAgICByZXR1cm4gdGhpcy5jdXJDb250ZXh0KCkgPT09IHR5cGVzLmJfc3RhdFxuICByZXR1cm4gIXRoaXMuZXhwckFsbG93ZWRcbn1cblxucHAkNi51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgdmFyIHVwZGF0ZSwgdHlwZSA9IHRoaXMudHlwZVxuICBpZiAodHlwZS5rZXl3b3JkICYmIHByZXZUeXBlID09IHR0LmRvdClcbiAgICB0aGlzLmV4cHJBbGxvd2VkID0gZmFsc2VcbiAgZWxzZSBpZiAodXBkYXRlID0gdHlwZS51cGRhdGVDb250ZXh0KVxuICAgIHVwZGF0ZS5jYWxsKHRoaXMsIHByZXZUeXBlKVxuICBlbHNlXG4gICAgdGhpcy5leHByQWxsb3dlZCA9IHR5cGUuYmVmb3JlRXhwclxufVxuXG4vLyBUb2tlbi1zcGVjaWZpYyBjb250ZXh0IHVwZGF0ZSBjb2RlXG5cbnR0LnBhcmVuUi51cGRhdGVDb250ZXh0ID0gdHQuYnJhY2VSLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuY29udGV4dC5sZW5ndGggPT0gMSkge1xuICAgIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlXG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG91dCA9IHRoaXMuY29udGV4dC5wb3AoKVxuICBpZiAob3V0ID09PSB0eXBlcy5iX3N0YXQgJiYgdGhpcy5jdXJDb250ZXh0KCkgPT09IHR5cGVzLmZfZXhwcikge1xuICAgIHRoaXMuY29udGV4dC5wb3AoKVxuICAgIHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZVxuICB9IGVsc2UgaWYgKG91dCA9PT0gdHlwZXMuYl90bXBsKSB7XG4gICAgdGhpcy5leHByQWxsb3dlZCA9IHRydWVcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmV4cHJBbGxvd2VkID0gIW91dC5pc0V4cHJcbiAgfVxufVxuXG50dC5icmFjZUwudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gIHRoaXMuY29udGV4dC5wdXNoKHRoaXMuYnJhY2VJc0Jsb2NrKHByZXZUeXBlKSA/IHR5cGVzLmJfc3RhdCA6IHR5cGVzLmJfZXhwcilcbiAgdGhpcy5leHByQWxsb3dlZCA9IHRydWVcbn1cblxudHQuZG9sbGFyQnJhY2VMLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5jb250ZXh0LnB1c2godHlwZXMuYl90bXBsKVxuICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZVxufVxuXG50dC5wYXJlbkwudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gIHZhciBzdGF0ZW1lbnRQYXJlbnMgPSBwcmV2VHlwZSA9PT0gdHQuX2lmIHx8IHByZXZUeXBlID09PSB0dC5fZm9yIHx8IHByZXZUeXBlID09PSB0dC5fd2l0aCB8fCBwcmV2VHlwZSA9PT0gdHQuX3doaWxlXG4gIHRoaXMuY29udGV4dC5wdXNoKHN0YXRlbWVudFBhcmVucyA/IHR5cGVzLnBfc3RhdCA6IHR5cGVzLnBfZXhwcilcbiAgdGhpcy5leHByQWxsb3dlZCA9IHRydWVcbn1cblxudHQuaW5jRGVjLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgLy8gdG9rRXhwckFsbG93ZWQgc3RheXMgdW5jaGFuZ2VkXG59XG5cbnR0Ll9mdW5jdGlvbi51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgaWYgKHByZXZUeXBlLmJlZm9yZUV4cHIgJiYgcHJldlR5cGUgIT09IHR0LnNlbWkgJiYgcHJldlR5cGUgIT09IHR0Ll9lbHNlICYmXG4gICAgICAhKChwcmV2VHlwZSA9PT0gdHQuY29sb24gfHwgcHJldlR5cGUgPT09IHR0LmJyYWNlTCkgJiYgdGhpcy5jdXJDb250ZXh0KCkgPT09IHR5cGVzLmJfc3RhdCkpXG4gICAgdGhpcy5jb250ZXh0LnB1c2godHlwZXMuZl9leHByKVxuICB0aGlzLmV4cHJBbGxvd2VkID0gZmFsc2Vcbn1cblxudHQuYmFja1F1b3RlLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuY3VyQ29udGV4dCgpID09PSB0eXBlcy5xX3RtcGwpXG4gICAgdGhpcy5jb250ZXh0LnBvcCgpXG4gIGVsc2VcbiAgICB0aGlzLmNvbnRleHQucHVzaCh0eXBlcy5xX3RtcGwpXG4gIHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZVxufVxuXG4vLyBPYmplY3QgdHlwZSB1c2VkIHRvIHJlcHJlc2VudCB0b2tlbnMuIE5vdGUgdGhhdCBub3JtYWxseSwgdG9rZW5zXG4vLyBzaW1wbHkgZXhpc3QgYXMgcHJvcGVydGllcyBvbiB0aGUgcGFyc2VyIG9iamVjdC4gVGhpcyBpcyBvbmx5XG4vLyB1c2VkIGZvciB0aGUgb25Ub2tlbiBjYWxsYmFjayBhbmQgdGhlIGV4dGVybmFsIHRva2VuaXplci5cblxudmFyIFRva2VuID0gZnVuY3Rpb24gVG9rZW4ocCkge1xuICB0aGlzLnR5cGUgPSBwLnR5cGVcbiAgdGhpcy52YWx1ZSA9IHAudmFsdWVcbiAgdGhpcy5zdGFydCA9IHAuc3RhcnRcbiAgdGhpcy5lbmQgPSBwLmVuZFxuICBpZiAocC5vcHRpb25zLmxvY2F0aW9ucylcbiAgICB0aGlzLmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbihwLCBwLnN0YXJ0TG9jLCBwLmVuZExvYylcbiAgaWYgKHAub3B0aW9ucy5yYW5nZXMpXG4gICAgdGhpcy5yYW5nZSA9IFtwLnN0YXJ0LCBwLmVuZF1cbn07XG5cbi8vICMjIFRva2VuaXplclxuXG52YXIgcHAkNyA9IFBhcnNlci5wcm90b3R5cGVcblxuLy8gQXJlIHdlIHJ1bm5pbmcgdW5kZXIgUmhpbm8/XG52YXIgaXNSaGlubyA9IHR5cGVvZiBQYWNrYWdlcyA9PSBcIm9iamVjdFwiICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChQYWNrYWdlcykgPT0gXCJbb2JqZWN0IEphdmFQYWNrYWdlXVwiXG5cbi8vIE1vdmUgdG8gdGhlIG5leHQgdG9rZW5cblxucHAkNy5uZXh0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMub25Ub2tlbilcbiAgICB0aGlzLm9wdGlvbnMub25Ub2tlbihuZXcgVG9rZW4odGhpcykpXG5cbiAgdGhpcy5sYXN0VG9rRW5kID0gdGhpcy5lbmRcbiAgdGhpcy5sYXN0VG9rU3RhcnQgPSB0aGlzLnN0YXJ0XG4gIHRoaXMubGFzdFRva0VuZExvYyA9IHRoaXMuZW5kTG9jXG4gIHRoaXMubGFzdFRva1N0YXJ0TG9jID0gdGhpcy5zdGFydExvY1xuICB0aGlzLm5leHRUb2tlbigpXG59XG5cbnBwJDcuZ2V0VG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5uZXh0KClcbiAgcmV0dXJuIG5ldyBUb2tlbih0aGlzKVxufVxuXG4vLyBJZiB3ZSdyZSBpbiBhbiBFUzYgZW52aXJvbm1lbnQsIG1ha2UgcGFyc2VycyBpdGVyYWJsZVxuaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIpXG4gIHBwJDdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICByZXR1cm4ge25leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0b2tlbiA9IHNlbGYuZ2V0VG9rZW4oKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZG9uZTogdG9rZW4udHlwZSA9PT0gdHQuZW9mLFxuICAgICAgICB2YWx1ZTogdG9rZW5cbiAgICAgIH1cbiAgICB9fVxuICB9XG5cbi8vIFRvZ2dsZSBzdHJpY3QgbW9kZS4gUmUtcmVhZHMgdGhlIG5leHQgbnVtYmVyIG9yIHN0cmluZyB0byBwbGVhc2Vcbi8vIHBlZGFudGljIHRlc3RzIChgXCJ1c2Ugc3RyaWN0XCI7IDAxMDtgIHNob3VsZCBmYWlsKS5cblxucHAkNy5jdXJDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNvbnRleHRbdGhpcy5jb250ZXh0Lmxlbmd0aCAtIDFdXG59XG5cbi8vIFJlYWQgYSBzaW5nbGUgdG9rZW4sIHVwZGF0aW5nIHRoZSBwYXJzZXIgb2JqZWN0J3MgdG9rZW4tcmVsYXRlZFxuLy8gcHJvcGVydGllcy5cblxucHAkNy5uZXh0VG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIGN1ckNvbnRleHQgPSB0aGlzLmN1ckNvbnRleHQoKVxuICBpZiAoIWN1ckNvbnRleHQgfHwgIWN1ckNvbnRleHQucHJlc2VydmVTcGFjZSkgdGhpcy5za2lwU3BhY2UoKVxuXG4gIHRoaXMuc3RhcnQgPSB0aGlzLnBvc1xuICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykgdGhpcy5zdGFydExvYyA9IHRoaXMuY3VyUG9zaXRpb24oKVxuICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LmVvZilcblxuICBpZiAoY3VyQ29udGV4dC5vdmVycmlkZSkgcmV0dXJuIGN1ckNvbnRleHQub3ZlcnJpZGUodGhpcylcbiAgZWxzZSB0aGlzLnJlYWRUb2tlbih0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCkpXG59XG5cbnBwJDcucmVhZFRva2VuID0gZnVuY3Rpb24oY29kZSkge1xuICAvLyBJZGVudGlmaWVyIG9yIGtleXdvcmQuICdcXHVYWFhYJyBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgaW5cbiAgLy8gaWRlbnRpZmllcnMsIHNvICdcXCcgYWxzbyBkaXNwYXRjaGVzIHRvIHRoYXQuXG4gIGlmIChpc0lkZW50aWZpZXJTdGFydChjb2RlLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikgfHwgY29kZSA9PT0gOTIgLyogJ1xcJyAqLylcbiAgICByZXR1cm4gdGhpcy5yZWFkV29yZCgpXG5cbiAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5Gcm9tQ29kZShjb2RlKVxufVxuXG5wcCQ3LmZ1bGxDaGFyQ29kZUF0UG9zID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjb2RlID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKVxuICBpZiAoY29kZSA8PSAweGQ3ZmYgfHwgY29kZSA+PSAweGUwMDApIHJldHVybiBjb2RlXG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSlcbiAgcmV0dXJuIChjb2RlIDw8IDEwKSArIG5leHQgLSAweDM1ZmRjMDBcbn1cblxucHAkNy5za2lwQmxvY2tDb21tZW50ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBzdGFydExvYyA9IHRoaXMub3B0aW9ucy5vbkNvbW1lbnQgJiYgdGhpcy5jdXJQb3NpdGlvbigpXG4gIHZhciBzdGFydCA9IHRoaXMucG9zLCBlbmQgPSB0aGlzLmlucHV0LmluZGV4T2YoXCIqL1wiLCB0aGlzLnBvcyArPSAyKVxuICBpZiAoZW5kID09PSAtMSkgdGhpcy5yYWlzZSh0aGlzLnBvcyAtIDIsIFwiVW50ZXJtaW5hdGVkIGNvbW1lbnRcIilcbiAgdGhpcy5wb3MgPSBlbmQgKyAyXG4gIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7XG4gICAgbGluZUJyZWFrRy5sYXN0SW5kZXggPSBzdGFydFxuICAgIHZhciBtYXRjaFxuICAgIHdoaWxlICgobWF0Y2ggPSBsaW5lQnJlYWtHLmV4ZWModGhpcy5pbnB1dCkpICYmIG1hdGNoLmluZGV4IDwgdGhpcy5wb3MpIHtcbiAgICAgICsrdGhpcyQxLmN1ckxpbmVcbiAgICAgIHRoaXMkMS5saW5lU3RhcnQgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICAgIH1cbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLm9uQ29tbWVudClcbiAgICB0aGlzLm9wdGlvbnMub25Db21tZW50KHRydWUsIHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQgKyAyLCBlbmQpLCBzdGFydCwgdGhpcy5wb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydExvYywgdGhpcy5jdXJQb3NpdGlvbigpKVxufVxuXG5wcCQ3LnNraXBMaW5lQ29tbWVudCA9IGZ1bmN0aW9uKHN0YXJ0U2tpcCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgc3RhcnQgPSB0aGlzLnBvc1xuICB2YXIgc3RhcnRMb2MgPSB0aGlzLm9wdGlvbnMub25Db21tZW50ICYmIHRoaXMuY3VyUG9zaXRpb24oKVxuICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MrPXN0YXJ0U2tpcClcbiAgd2hpbGUgKHRoaXMucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGggJiYgY2ggIT09IDEwICYmIGNoICE9PSAxMyAmJiBjaCAhPT0gODIzMiAmJiBjaCAhPT0gODIzMykge1xuICAgICsrdGhpcyQxLnBvc1xuICAgIGNoID0gdGhpcyQxLmlucHV0LmNoYXJDb2RlQXQodGhpcyQxLnBvcylcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLm9uQ29tbWVudClcbiAgICB0aGlzLm9wdGlvbnMub25Db21tZW50KGZhbHNlLCB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0ICsgc3RhcnRTa2lwLCB0aGlzLnBvcyksIHN0YXJ0LCB0aGlzLnBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TG9jLCB0aGlzLmN1clBvc2l0aW9uKCkpXG59XG5cbi8vIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnNlIGFuZCBhZnRlciBldmVyeSB0b2tlbi4gU2tpcHNcbi8vIHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzLCBhbmQuXG5cbnBwJDcuc2tpcFNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGxvb3A6IHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoKSB7XG4gICAgdmFyIGNoID0gdGhpcyQxLmlucHV0LmNoYXJDb2RlQXQodGhpcyQxLnBvcylcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICBjYXNlIDMyOiBjYXNlIDE2MDogLy8gJyAnXG4gICAgICAgICsrdGhpcyQxLnBvc1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAxMzpcbiAgICAgICAgaWYgKHRoaXMkMS5pbnB1dC5jaGFyQ29kZUF0KHRoaXMkMS5wb3MgKyAxKSA9PT0gMTApIHtcbiAgICAgICAgICArK3RoaXMkMS5wb3NcbiAgICAgICAgfVxuICAgICAgY2FzZSAxMDogY2FzZSA4MjMyOiBjYXNlIDgyMzM6XG4gICAgICAgICsrdGhpcyQxLnBvc1xuICAgICAgICBpZiAodGhpcyQxLm9wdGlvbnMubG9jYXRpb25zKSB7XG4gICAgICAgICAgKyt0aGlzJDEuY3VyTGluZVxuICAgICAgICAgIHRoaXMkMS5saW5lU3RhcnQgPSB0aGlzJDEucG9zXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgNDc6IC8vICcvJ1xuICAgICAgICBzd2l0Y2ggKHRoaXMkMS5pbnB1dC5jaGFyQ29kZUF0KHRoaXMkMS5wb3MgKyAxKSkge1xuICAgICAgICAgIGNhc2UgNDI6IC8vICcqJ1xuICAgICAgICAgICAgdGhpcyQxLnNraXBCbG9ja0NvbW1lbnQoKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgdGhpcyQxLnNraXBMaW5lQ29tbWVudCgyKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWsgbG9vcFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoY2ggPiA4ICYmIGNoIDwgMTQgfHwgY2ggPj0gNTc2MCAmJiBub25BU0NJSXdoaXRlc3BhY2UudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpIHtcbiAgICAgICAgICArK3RoaXMkMS5wb3NcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhayBsb29wXG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQ2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgdG9rZW4uIFNldHMgYGVuZGAsIGB2YWxgLCBhbmRcbi8vIG1haW50YWlucyBgY29udGV4dGAgYW5kIGBleHByQWxsb3dlZGAsIGFuZCBza2lwcyB0aGUgc3BhY2UgYWZ0ZXJcbi8vIHRoZSB0b2tlbiwgc28gdGhhdCB0aGUgbmV4dCBvbmUncyBgc3RhcnRgIHdpbGwgcG9pbnQgYXQgdGhlXG4vLyByaWdodCBwb3NpdGlvbi5cblxucHAkNy5maW5pc2hUb2tlbiA9IGZ1bmN0aW9uKHR5cGUsIHZhbCkge1xuICB0aGlzLmVuZCA9IHRoaXMucG9zXG4gIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB0aGlzLmVuZExvYyA9IHRoaXMuY3VyUG9zaXRpb24oKVxuICB2YXIgcHJldlR5cGUgPSB0aGlzLnR5cGVcbiAgdGhpcy50eXBlID0gdHlwZVxuICB0aGlzLnZhbHVlID0gdmFsXG5cbiAgdGhpcy51cGRhdGVDb250ZXh0KHByZXZUeXBlKVxufVxuXG4vLyAjIyMgVG9rZW4gcmVhZGluZ1xuXG4vLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBmZXRjaCB0aGUgbmV4dCB0b2tlbi4gSXRcbi8vIGlzIHNvbWV3aGF0IG9ic2N1cmUsIGJlY2F1c2UgaXQgd29ya3MgaW4gY2hhcmFjdGVyIGNvZGVzIHJhdGhlclxuLy8gdGhhbiBjaGFyYWN0ZXJzLCBhbmQgYmVjYXVzZSBvcGVyYXRvciBwYXJzaW5nIGhhcyBiZWVuIGlubGluZWRcbi8vIGludG8gaXQuXG4vL1xuLy8gQWxsIGluIHRoZSBuYW1lIG9mIHNwZWVkLlxuLy9cbnBwJDcucmVhZFRva2VuX2RvdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpXG4gIGlmIChuZXh0ID49IDQ4ICYmIG5leHQgPD0gNTcpIHJldHVybiB0aGlzLnJlYWROdW1iZXIodHJ1ZSlcbiAgdmFyIG5leHQyID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMilcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIG5leHQgPT09IDQ2ICYmIG5leHQyID09PSA0NikgeyAvLyA0NiA9IGRvdCAnLidcbiAgICB0aGlzLnBvcyArPSAzXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQuZWxsaXBzaXMpXG4gIH0gZWxzZSB7XG4gICAgKyt0aGlzLnBvc1xuICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LmRvdClcbiAgfVxufVxuXG5wcCQ3LnJlYWRUb2tlbl9zbGFzaCA9IGZ1bmN0aW9uKCkgeyAvLyAnLydcbiAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKVxuICBpZiAodGhpcy5leHByQWxsb3dlZCkgeysrdGhpcy5wb3M7IHJldHVybiB0aGlzLnJlYWRSZWdleHAoKX1cbiAgaWYgKG5leHQgPT09IDYxKSByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5hc3NpZ24sIDIpXG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LnNsYXNoLCAxKVxufVxuXG5wcCQ3LnJlYWRUb2tlbl9tdWx0X21vZHVsb19leHAgPSBmdW5jdGlvbihjb2RlKSB7IC8vICclKidcbiAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKVxuICB2YXIgc2l6ZSA9IDFcbiAgdmFyIHRva2VudHlwZSA9IGNvZGUgPT09IDQyID8gdHQuc3RhciA6IHR0Lm1vZHVsb1xuXG4gIC8vIGV4cG9uZW50aWF0aW9uIG9wZXJhdG9yICoqIGFuZCAqKj1cbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA3ICYmIG5leHQgPT09IDQyKSB7XG4gICAgKytzaXplXG4gICAgdG9rZW50eXBlID0gdHQuc3RhcnN0YXJcbiAgICBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMilcbiAgfVxuXG4gIGlmIChuZXh0ID09PSA2MSkgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQuYXNzaWduLCBzaXplICsgMSlcbiAgcmV0dXJuIHRoaXMuZmluaXNoT3AodG9rZW50eXBlLCBzaXplKVxufVxuXG5wcCQ3LnJlYWRUb2tlbl9waXBlX2FtcCA9IGZ1bmN0aW9uKGNvZGUpIHsgLy8gJ3wmJ1xuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpXG4gIGlmIChuZXh0ID09PSBjb2RlKSByZXR1cm4gdGhpcy5maW5pc2hPcChjb2RlID09PSAxMjQgPyB0dC5sb2dpY2FsT1IgOiB0dC5sb2dpY2FsQU5ELCAyKVxuICBpZiAobmV4dCA9PT0gNjEpIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LmFzc2lnbiwgMilcbiAgcmV0dXJuIHRoaXMuZmluaXNoT3AoY29kZSA9PT0gMTI0ID8gdHQuYml0d2lzZU9SIDogdHQuYml0d2lzZUFORCwgMSlcbn1cblxucHAkNy5yZWFkVG9rZW5fY2FyZXQgPSBmdW5jdGlvbigpIHsgLy8gJ14nXG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSlcbiAgaWYgKG5leHQgPT09IDYxKSByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5hc3NpZ24sIDIpXG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LmJpdHdpc2VYT1IsIDEpXG59XG5cbnBwJDcucmVhZFRva2VuX3BsdXNfbWluID0gZnVuY3Rpb24oY29kZSkgeyAvLyAnKy0nXG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSlcbiAgaWYgKG5leHQgPT09IGNvZGUpIHtcbiAgICBpZiAobmV4dCA9PSA0NSAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKSA9PSA2MiAmJlxuICAgICAgICBsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva0VuZCwgdGhpcy5wb3MpKSkge1xuICAgICAgLy8gQSBgLS0+YCBsaW5lIGNvbW1lbnRcbiAgICAgIHRoaXMuc2tpcExpbmVDb21tZW50KDMpXG4gICAgICB0aGlzLnNraXBTcGFjZSgpXG4gICAgICByZXR1cm4gdGhpcy5uZXh0VG9rZW4oKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5pbmNEZWMsIDIpXG4gIH1cbiAgaWYgKG5leHQgPT09IDYxKSByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5hc3NpZ24sIDIpXG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKHR0LnBsdXNNaW4sIDEpXG59XG5cbnBwJDcucmVhZFRva2VuX2x0X2d0ID0gZnVuY3Rpb24oY29kZSkgeyAvLyAnPD4nXG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSlcbiAgdmFyIHNpemUgPSAxXG4gIGlmIChuZXh0ID09PSBjb2RlKSB7XG4gICAgc2l6ZSA9IGNvZGUgPT09IDYyICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpID09PSA2MiA/IDMgOiAyXG4gICAgaWYgKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIHNpemUpID09PSA2MSkgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQuYXNzaWduLCBzaXplICsgMSlcbiAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0dC5iaXRTaGlmdCwgc2l6ZSlcbiAgfVxuICBpZiAobmV4dCA9PSAzMyAmJiBjb2RlID09IDYwICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpID09IDQ1ICYmXG4gICAgICB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAzKSA9PSA0NSkge1xuICAgIGlmICh0aGlzLmluTW9kdWxlKSB0aGlzLnVuZXhwZWN0ZWQoKVxuICAgIC8vIGA8IS0tYCwgYW4gWE1MLXN0eWxlIGNvbW1lbnQgdGhhdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsaW5lIGNvbW1lbnRcbiAgICB0aGlzLnNraXBMaW5lQ29tbWVudCg0KVxuICAgIHRoaXMuc2tpcFNwYWNlKClcbiAgICByZXR1cm4gdGhpcy5uZXh0VG9rZW4oKVxuICB9XG4gIGlmIChuZXh0ID09PSA2MSkgc2l6ZSA9IDJcbiAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQucmVsYXRpb25hbCwgc2l6ZSlcbn1cblxucHAkNy5yZWFkVG9rZW5fZXFfZXhjbCA9IGZ1bmN0aW9uKGNvZGUpIHsgLy8gJz0hJ1xuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpXG4gIGlmIChuZXh0ID09PSA2MSkgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQuZXF1YWxpdHksIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpID09PSA2MSA/IDMgOiAyKVxuICBpZiAoY29kZSA9PT0gNjEgJiYgbmV4dCA9PT0gNjIgJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHsgLy8gJz0+J1xuICAgIHRoaXMucG9zICs9IDJcbiAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5hcnJvdylcbiAgfVxuICByZXR1cm4gdGhpcy5maW5pc2hPcChjb2RlID09PSA2MSA/IHR0LmVxIDogdHQucHJlZml4LCAxKVxufVxuXG5wcCQ3LmdldFRva2VuRnJvbUNvZGUgPSBmdW5jdGlvbihjb2RlKSB7XG4gIHN3aXRjaCAoY29kZSkge1xuICAgIC8vIFRoZSBpbnRlcnByZXRhdGlvbiBvZiBhIGRvdCBkZXBlbmRzIG9uIHdoZXRoZXIgaXQgaXMgZm9sbG93ZWRcbiAgICAvLyBieSBhIGRpZ2l0IG9yIGFub3RoZXIgdHdvIGRvdHMuXG4gIGNhc2UgNDY6IC8vICcuJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9kb3QoKVxuXG4gICAgLy8gUHVuY3R1YXRpb24gdG9rZW5zLlxuICBjYXNlIDQwOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5wYXJlbkwpXG4gIGNhc2UgNDE6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LnBhcmVuUilcbiAgY2FzZSA1OTogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQuc2VtaSlcbiAgY2FzZSA0NDogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQuY29tbWEpXG4gIGNhc2UgOTE6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LmJyYWNrZXRMKVxuICBjYXNlIDkzOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5icmFja2V0UilcbiAgY2FzZSAxMjM6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LmJyYWNlTClcbiAgY2FzZSAxMjU6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LmJyYWNlUilcbiAgY2FzZSA1ODogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQuY29sb24pXG4gIGNhc2UgNjM6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LnF1ZXN0aW9uKVxuXG4gIGNhc2UgOTY6IC8vICdgJ1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA2KSBicmVha1xuICAgICsrdGhpcy5wb3NcbiAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0dC5iYWNrUXVvdGUpXG5cbiAgY2FzZSA0ODogLy8gJzAnXG4gICAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKVxuICAgIGlmIChuZXh0ID09PSAxMjAgfHwgbmV4dCA9PT0gODgpIHJldHVybiB0aGlzLnJlYWRSYWRpeE51bWJlcigxNikgLy8gJzB4JywgJzBYJyAtIGhleCBudW1iZXJcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHtcbiAgICAgIGlmIChuZXh0ID09PSAxMTEgfHwgbmV4dCA9PT0gNzkpIHJldHVybiB0aGlzLnJlYWRSYWRpeE51bWJlcig4KSAvLyAnMG8nLCAnME8nIC0gb2N0YWwgbnVtYmVyXG4gICAgICBpZiAobmV4dCA9PT0gOTggfHwgbmV4dCA9PT0gNjYpIHJldHVybiB0aGlzLnJlYWRSYWRpeE51bWJlcigyKSAvLyAnMGInLCAnMEInIC0gYmluYXJ5IG51bWJlclxuICAgIH1cbiAgICAvLyBBbnl0aGluZyBlbHNlIGJlZ2lubmluZyB3aXRoIGEgZGlnaXQgaXMgYW4gaW50ZWdlciwgb2N0YWxcbiAgICAvLyBudW1iZXIsIG9yIGZsb2F0LlxuICBjYXNlIDQ5OiBjYXNlIDUwOiBjYXNlIDUxOiBjYXNlIDUyOiBjYXNlIDUzOiBjYXNlIDU0OiBjYXNlIDU1OiBjYXNlIDU2OiBjYXNlIDU3OiAvLyAxLTlcbiAgICByZXR1cm4gdGhpcy5yZWFkTnVtYmVyKGZhbHNlKVxuXG4gICAgLy8gUXVvdGVzIHByb2R1Y2Ugc3RyaW5ncy5cbiAgY2FzZSAzNDogY2FzZSAzOTogLy8gJ1wiJywgXCInXCJcbiAgICByZXR1cm4gdGhpcy5yZWFkU3RyaW5nKGNvZGUpXG5cbiAgICAvLyBPcGVyYXRvcnMgYXJlIHBhcnNlZCBpbmxpbmUgaW4gdGlueSBzdGF0ZSBtYWNoaW5lcy4gJz0nICg2MSkgaXNcbiAgICAvLyBvZnRlbiByZWZlcnJlZCB0by4gYGZpbmlzaE9wYCBzaW1wbHkgc2tpcHMgdGhlIGFtb3VudCBvZlxuICAgIC8vIGNoYXJhY3RlcnMgaXQgaXMgZ2l2ZW4gYXMgc2Vjb25kIGFyZ3VtZW50LCBhbmQgcmV0dXJucyBhIHRva2VuXG4gICAgLy8gb2YgdGhlIHR5cGUgZ2l2ZW4gYnkgaXRzIGZpcnN0IGFyZ3VtZW50LlxuXG4gIGNhc2UgNDc6IC8vICcvJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9zbGFzaCgpXG5cbiAgY2FzZSAzNzogY2FzZSA0MjogLy8gJyUqJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9tdWx0X21vZHVsb19leHAoY29kZSlcblxuICBjYXNlIDEyNDogY2FzZSAzODogLy8gJ3wmJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9waXBlX2FtcChjb2RlKVxuXG4gIGNhc2UgOTQ6IC8vICdeJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9jYXJldCgpXG5cbiAgY2FzZSA0MzogY2FzZSA0NTogLy8gJystJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9wbHVzX21pbihjb2RlKVxuXG4gIGNhc2UgNjA6IGNhc2UgNjI6IC8vICc8PidcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fbHRfZ3QoY29kZSlcblxuICBjYXNlIDYxOiBjYXNlIDMzOiAvLyAnPSEnXG4gICAgcmV0dXJuIHRoaXMucmVhZFRva2VuX2VxX2V4Y2woY29kZSlcblxuICBjYXNlIDEyNjogLy8gJ34nXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHQucHJlZml4LCAxKVxuICB9XG5cbiAgdGhpcy5yYWlzZSh0aGlzLnBvcywgXCJVbmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgKyBjb2RlUG9pbnRUb1N0cmluZyhjb2RlKSArIFwiJ1wiKVxufVxuXG5wcCQ3LmZpbmlzaE9wID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkge1xuICB2YXIgc3RyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLnBvcywgdGhpcy5wb3MgKyBzaXplKVxuICB0aGlzLnBvcyArPSBzaXplXG4gIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGUsIHN0cilcbn1cblxuLy8gUGFyc2UgYSByZWd1bGFyIGV4cHJlc3Npb24uIFNvbWUgY29udGV4dC1hd2FyZW5lc3MgaXMgbmVjZXNzYXJ5LFxuLy8gc2luY2UgYSAnLycgaW5zaWRlIGEgJ1tdJyBzZXQgZG9lcyBub3QgZW5kIHRoZSBleHByZXNzaW9uLlxuXG5mdW5jdGlvbiB0cnlDcmVhdGVSZWdleHAoc3JjLCBmbGFncywgdGhyb3dFcnJvckF0LCBwYXJzZXIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChzcmMsIGZsYWdzKVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKHRocm93RXJyb3JBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSBwYXJzZXIucmFpc2UodGhyb3dFcnJvckF0LCBcIkVycm9yIHBhcnNpbmcgcmVndWxhciBleHByZXNzaW9uOiBcIiArIGUubWVzc2FnZSlcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cbn1cblxudmFyIHJlZ2V4cFVuaWNvZGVTdXBwb3J0ID0gISF0cnlDcmVhdGVSZWdleHAoXCJcXHVmZmZmXCIsIFwidVwiKVxuXG5wcCQ3LnJlYWRSZWdleHAgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIGVzY2FwZWQsIGluQ2xhc3MsIHN0YXJ0ID0gdGhpcy5wb3NcbiAgZm9yICg7Oykge1xuICAgIGlmICh0aGlzJDEucG9zID49IHRoaXMkMS5pbnB1dC5sZW5ndGgpIHRoaXMkMS5yYWlzZShzdGFydCwgXCJVbnRlcm1pbmF0ZWQgcmVndWxhciBleHByZXNzaW9uXCIpXG4gICAgdmFyIGNoID0gdGhpcyQxLmlucHV0LmNoYXJBdCh0aGlzJDEucG9zKVxuICAgIGlmIChsaW5lQnJlYWsudGVzdChjaCkpIHRoaXMkMS5yYWlzZShzdGFydCwgXCJVbnRlcm1pbmF0ZWQgcmVndWxhciBleHByZXNzaW9uXCIpXG4gICAgaWYgKCFlc2NhcGVkKSB7XG4gICAgICBpZiAoY2ggPT09IFwiW1wiKSBpbkNsYXNzID0gdHJ1ZVxuICAgICAgZWxzZSBpZiAoY2ggPT09IFwiXVwiICYmIGluQ2xhc3MpIGluQ2xhc3MgPSBmYWxzZVxuICAgICAgZWxzZSBpZiAoY2ggPT09IFwiL1wiICYmICFpbkNsYXNzKSBicmVha1xuICAgICAgZXNjYXBlZCA9IGNoID09PSBcIlxcXFxcIlxuICAgIH0gZWxzZSBlc2NhcGVkID0gZmFsc2VcbiAgICArK3RoaXMkMS5wb3NcbiAgfVxuICB2YXIgY29udGVudCA9IHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIHRoaXMucG9zKVxuICArK3RoaXMucG9zXG4gIC8vIE5lZWQgdG8gdXNlIGByZWFkV29yZDFgIGJlY2F1c2UgJ1xcdVhYWFgnIHNlcXVlbmNlcyBhcmUgYWxsb3dlZFxuICAvLyBoZXJlIChkb24ndCBhc2spLlxuICB2YXIgbW9kcyA9IHRoaXMucmVhZFdvcmQxKClcbiAgdmFyIHRtcCA9IGNvbnRlbnQsIHRtcEZsYWdzID0gXCJcIlxuICBpZiAobW9kcykge1xuICAgIHZhciB2YWxpZEZsYWdzID0gL15bZ2ltXSokL1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikgdmFsaWRGbGFncyA9IC9eW2dpbXV5XSokL1xuICAgIGlmICghdmFsaWRGbGFncy50ZXN0KG1vZHMpKSB0aGlzLnJhaXNlKHN0YXJ0LCBcIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIGZsYWdcIilcbiAgICBpZiAobW9kcy5pbmRleE9mKFwidVwiKSA+PSAwKSB7XG4gICAgICBpZiAocmVnZXhwVW5pY29kZVN1cHBvcnQpIHtcbiAgICAgICAgdG1wRmxhZ3MgPSBcInVcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVwbGFjZSBlYWNoIGFzdHJhbCBzeW1ib2wgYW5kIGV2ZXJ5IFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlIHRoYXRcbiAgICAgICAgLy8gcG9zc2libHkgcmVwcmVzZW50cyBhbiBhc3RyYWwgc3ltYm9sIG9yIGEgcGFpcmVkIHN1cnJvZ2F0ZSB3aXRoIGFcbiAgICAgICAgLy8gc2luZ2xlIEFTQ0lJIHN5bWJvbCB0byBhdm9pZCB0aHJvd2luZyBvbiByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXRcbiAgICAgICAgLy8gYXJlIG9ubHkgdmFsaWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgYC91YCBmbGFnLlxuICAgICAgICAvLyBOb3RlOiByZXBsYWNpbmcgd2l0aCB0aGUgQVNDSUkgc3ltYm9sIGB4YCBtaWdodCBjYXVzZSBmYWxzZVxuICAgICAgICAvLyBuZWdhdGl2ZXMgaW4gdW5saWtlbHkgc2NlbmFyaW9zLiBGb3IgZXhhbXBsZSwgYFtcXHV7NjF9LWJdYCBpcyBhXG4gICAgICAgIC8vIHBlcmZlY3RseSB2YWxpZCBwYXR0ZXJuIHRoYXQgaXMgZXF1aXZhbGVudCB0byBgW2EtYl1gLCBidXQgaXQgd291bGRcbiAgICAgICAgLy8gYmUgcmVwbGFjZWQgYnkgYFt4LWJdYCB3aGljaCB0aHJvd3MgYW4gZXJyb3IuXG4gICAgICAgIHRtcCA9IHRtcC5yZXBsYWNlKC9cXFxcdVxceyhbMC05YS1mQS1GXSspXFx9L2csIGZ1bmN0aW9uIChfbWF0Y2gsIGNvZGUsIG9mZnNldCkge1xuICAgICAgICAgIGNvZGUgPSBOdW1iZXIoXCIweFwiICsgY29kZSlcbiAgICAgICAgICBpZiAoY29kZSA+IDB4MTBGRkZGKSB0aGlzJDEucmFpc2Uoc3RhcnQgKyBvZmZzZXQgKyAzLCBcIkNvZGUgcG9pbnQgb3V0IG9mIGJvdW5kc1wiKVxuICAgICAgICAgIHJldHVybiBcInhcIlxuICAgICAgICB9KVxuICAgICAgICB0bXAgPSB0bXAucmVwbGFjZSgvXFxcXHUoW2EtZkEtRjAtOV17NH0pfFtcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZywgXCJ4XCIpXG4gICAgICAgIHRtcEZsYWdzID0gdG1wRmxhZ3MucmVwbGFjZShcInVcIiwgXCJcIilcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gRGV0ZWN0IGludmFsaWQgcmVndWxhciBleHByZXNzaW9ucy5cbiAgdmFyIHZhbHVlID0gbnVsbFxuICAvLyBSaGlubydzIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzZXIgaXMgZmxha3kgYW5kIHRocm93cyB1bmNhdGNoYWJsZSBleGNlcHRpb25zLFxuICAvLyBzbyBkb24ndCBkbyBkZXRlY3Rpb24gaWYgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgUmhpbm9cbiAgaWYgKCFpc1JoaW5vKSB7XG4gICAgdHJ5Q3JlYXRlUmVnZXhwKHRtcCwgdG1wRmxhZ3MsIHN0YXJ0LCB0aGlzKVxuICAgIC8vIEdldCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QgZm9yIHRoaXMgcGF0dGVybi1mbGFnIHBhaXIsIG9yIGBudWxsYCBpblxuICAgIC8vIGNhc2UgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBmbGFncyBpdCB1c2VzLlxuICAgIHZhbHVlID0gdHJ5Q3JlYXRlUmVnZXhwKGNvbnRlbnQsIG1vZHMpXG4gIH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQucmVnZXhwLCB7cGF0dGVybjogY29udGVudCwgZmxhZ3M6IG1vZHMsIHZhbHVlOiB2YWx1ZX0pXG59XG5cbi8vIFJlYWQgYW4gaW50ZWdlciBpbiB0aGUgZ2l2ZW4gcmFkaXguIFJldHVybiBudWxsIGlmIHplcm8gZGlnaXRzXG4vLyB3ZXJlIHJlYWQsIHRoZSBpbnRlZ2VyIHZhbHVlIG90aGVyd2lzZS4gV2hlbiBgbGVuYCBpcyBnaXZlbiwgdGhpc1xuLy8gd2lsbCByZXR1cm4gYG51bGxgIHVubGVzcyB0aGUgaW50ZWdlciBoYXMgZXhhY3RseSBgbGVuYCBkaWdpdHMuXG5cbnBwJDcucmVhZEludCA9IGZ1bmN0aW9uKHJhZGl4LCBsZW4pIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIHN0YXJ0ID0gdGhpcy5wb3MsIHRvdGFsID0gMFxuICBmb3IgKHZhciBpID0gMCwgZSA9IGxlbiA9PSBudWxsID8gSW5maW5pdHkgOiBsZW47IGkgPCBlOyArK2kpIHtcbiAgICB2YXIgY29kZSA9IHRoaXMkMS5pbnB1dC5jaGFyQ29kZUF0KHRoaXMkMS5wb3MpLCB2YWxcbiAgICBpZiAoY29kZSA+PSA5NykgdmFsID0gY29kZSAtIDk3ICsgMTAgLy8gYVxuICAgIGVsc2UgaWYgKGNvZGUgPj0gNjUpIHZhbCA9IGNvZGUgLSA2NSArIDEwIC8vIEFcbiAgICBlbHNlIGlmIChjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcpIHZhbCA9IGNvZGUgLSA0OCAvLyAwLTlcbiAgICBlbHNlIHZhbCA9IEluZmluaXR5XG4gICAgaWYgKHZhbCA+PSByYWRpeCkgYnJlYWtcbiAgICArK3RoaXMkMS5wb3NcbiAgICB0b3RhbCA9IHRvdGFsICogcmFkaXggKyB2YWxcbiAgfVxuICBpZiAodGhpcy5wb3MgPT09IHN0YXJ0IHx8IGxlbiAhPSBudWxsICYmIHRoaXMucG9zIC0gc3RhcnQgIT09IGxlbikgcmV0dXJuIG51bGxcblxuICByZXR1cm4gdG90YWxcbn1cblxucHAkNy5yZWFkUmFkaXhOdW1iZXIgPSBmdW5jdGlvbihyYWRpeCkge1xuICB0aGlzLnBvcyArPSAyIC8vIDB4XG4gIHZhciB2YWwgPSB0aGlzLnJlYWRJbnQocmFkaXgpXG4gIGlmICh2YWwgPT0gbnVsbCkgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0ICsgMiwgXCJFeHBlY3RlZCBudW1iZXIgaW4gcmFkaXggXCIgKyByYWRpeClcbiAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHRoaXMuZnVsbENoYXJDb2RlQXRQb3MoKSkpIHRoaXMucmFpc2UodGhpcy5wb3MsIFwiSWRlbnRpZmllciBkaXJlY3RseSBhZnRlciBudW1iZXJcIilcbiAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQubnVtLCB2YWwpXG59XG5cbi8vIFJlYWQgYW4gaW50ZWdlciwgb2N0YWwgaW50ZWdlciwgb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVyLlxuXG5wcCQ3LnJlYWROdW1iZXIgPSBmdW5jdGlvbihzdGFydHNXaXRoRG90KSB7XG4gIHZhciBzdGFydCA9IHRoaXMucG9zLCBpc0Zsb2F0ID0gZmFsc2UsIG9jdGFsID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKSA9PT0gNDhcbiAgaWYgKCFzdGFydHNXaXRoRG90ICYmIHRoaXMucmVhZEludCgxMCkgPT09IG51bGwpIHRoaXMucmFpc2Uoc3RhcnQsIFwiSW52YWxpZCBudW1iZXJcIilcbiAgaWYgKG9jdGFsICYmIHRoaXMucG9zID09IHN0YXJ0ICsgMSkgb2N0YWwgPSBmYWxzZVxuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcylcbiAgaWYgKG5leHQgPT09IDQ2ICYmICFvY3RhbCkgeyAvLyAnLidcbiAgICArK3RoaXMucG9zXG4gICAgdGhpcy5yZWFkSW50KDEwKVxuICAgIGlzRmxvYXQgPSB0cnVlXG4gICAgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcylcbiAgfVxuICBpZiAoKG5leHQgPT09IDY5IHx8IG5leHQgPT09IDEwMSkgJiYgIW9jdGFsKSB7IC8vICdlRSdcbiAgICBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KCsrdGhpcy5wb3MpXG4gICAgaWYgKG5leHQgPT09IDQzIHx8IG5leHQgPT09IDQ1KSArK3RoaXMucG9zIC8vICcrLSdcbiAgICBpZiAodGhpcy5yZWFkSW50KDEwKSA9PT0gbnVsbCkgdGhpcy5yYWlzZShzdGFydCwgXCJJbnZhbGlkIG51bWJlclwiKVxuICAgIGlzRmxvYXQgPSB0cnVlXG4gIH1cbiAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHRoaXMuZnVsbENoYXJDb2RlQXRQb3MoKSkpIHRoaXMucmFpc2UodGhpcy5wb3MsIFwiSWRlbnRpZmllciBkaXJlY3RseSBhZnRlciBudW1iZXJcIilcblxuICB2YXIgc3RyID0gdGhpcy5pbnB1dC5zbGljZShzdGFydCwgdGhpcy5wb3MpLCB2YWxcbiAgaWYgKGlzRmxvYXQpIHZhbCA9IHBhcnNlRmxvYXQoc3RyKVxuICBlbHNlIGlmICghb2N0YWwgfHwgc3RyLmxlbmd0aCA9PT0gMSkgdmFsID0gcGFyc2VJbnQoc3RyLCAxMClcbiAgZWxzZSBpZiAoL1s4OV0vLnRlc3Qoc3RyKSB8fCB0aGlzLnN0cmljdCkgdGhpcy5yYWlzZShzdGFydCwgXCJJbnZhbGlkIG51bWJlclwiKVxuICBlbHNlIHZhbCA9IHBhcnNlSW50KHN0ciwgOClcbiAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQubnVtLCB2YWwpXG59XG5cbi8vIFJlYWQgYSBzdHJpbmcgdmFsdWUsIGludGVycHJldGluZyBiYWNrc2xhc2gtZXNjYXBlcy5cblxucHAkNy5yZWFkQ29kZVBvaW50ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyksIGNvZGVcblxuICBpZiAoY2ggPT09IDEyMykge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA2KSB0aGlzLnVuZXhwZWN0ZWQoKVxuICAgIHZhciBjb2RlUG9zID0gKyt0aGlzLnBvc1xuICAgIGNvZGUgPSB0aGlzLnJlYWRIZXhDaGFyKHRoaXMuaW5wdXQuaW5kZXhPZignfScsIHRoaXMucG9zKSAtIHRoaXMucG9zKVxuICAgICsrdGhpcy5wb3NcbiAgICBpZiAoY29kZSA+IDB4MTBGRkZGKSB0aGlzLnJhaXNlKGNvZGVQb3MsIFwiQ29kZSBwb2ludCBvdXQgb2YgYm91bmRzXCIpXG4gIH0gZWxzZSB7XG4gICAgY29kZSA9IHRoaXMucmVhZEhleENoYXIoNClcbiAgfVxuICByZXR1cm4gY29kZVxufVxuXG5mdW5jdGlvbiBjb2RlUG9pbnRUb1N0cmluZyhjb2RlKSB7XG4gIC8vIFVURi0xNiBEZWNvZGluZ1xuICBpZiAoY29kZSA8PSAweEZGRkYpIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gIGNvZGUgLT0gMHgxMDAwMFxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgoY29kZSA+PiAxMCkgKyAweEQ4MDAsIChjb2RlICYgMTAyMykgKyAweERDMDApXG59XG5cbnBwJDcucmVhZFN0cmluZyA9IGZ1bmN0aW9uKHF1b3RlKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBvdXQgPSBcIlwiLCBjaHVua1N0YXJ0ID0gKyt0aGlzLnBvc1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHRoaXMkMS5wb3MgPj0gdGhpcyQxLmlucHV0Lmxlbmd0aCkgdGhpcyQxLnJhaXNlKHRoaXMkMS5zdGFydCwgXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpXG4gICAgdmFyIGNoID0gdGhpcyQxLmlucHV0LmNoYXJDb2RlQXQodGhpcyQxLnBvcylcbiAgICBpZiAoY2ggPT09IHF1b3RlKSBicmVha1xuICAgIGlmIChjaCA9PT0gOTIpIHsgLy8gJ1xcJ1xuICAgICAgb3V0ICs9IHRoaXMkMS5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzJDEucG9zKVxuICAgICAgb3V0ICs9IHRoaXMkMS5yZWFkRXNjYXBlZENoYXIoZmFsc2UpXG4gICAgICBjaHVua1N0YXJ0ID0gdGhpcyQxLnBvc1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNOZXdMaW5lKGNoKSkgdGhpcyQxLnJhaXNlKHRoaXMkMS5zdGFydCwgXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpXG4gICAgICArK3RoaXMkMS5wb3NcbiAgICB9XG4gIH1cbiAgb3V0ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5wb3MrKylcbiAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHQuc3RyaW5nLCBvdXQpXG59XG5cbi8vIFJlYWRzIHRlbXBsYXRlIHN0cmluZyB0b2tlbnMuXG5cbnBwJDcucmVhZFRtcGxUb2tlbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgb3V0ID0gXCJcIiwgY2h1bmtTdGFydCA9IHRoaXMucG9zXG4gIGZvciAoOzspIHtcbiAgICBpZiAodGhpcyQxLnBvcyA+PSB0aGlzJDEuaW5wdXQubGVuZ3RoKSB0aGlzJDEucmFpc2UodGhpcyQxLnN0YXJ0LCBcIlVudGVybWluYXRlZCB0ZW1wbGF0ZVwiKVxuICAgIHZhciBjaCA9IHRoaXMkMS5pbnB1dC5jaGFyQ29kZUF0KHRoaXMkMS5wb3MpXG4gICAgaWYgKGNoID09PSA5NiB8fCBjaCA9PT0gMzYgJiYgdGhpcyQxLmlucHV0LmNoYXJDb2RlQXQodGhpcyQxLnBvcyArIDEpID09PSAxMjMpIHsgLy8gJ2AnLCAnJHsnXG4gICAgICBpZiAodGhpcyQxLnBvcyA9PT0gdGhpcyQxLnN0YXJ0ICYmIHRoaXMkMS50eXBlID09PSB0dC50ZW1wbGF0ZSkge1xuICAgICAgICBpZiAoY2ggPT09IDM2KSB7XG4gICAgICAgICAgdGhpcyQxLnBvcyArPSAyXG4gICAgICAgICAgcmV0dXJuIHRoaXMkMS5maW5pc2hUb2tlbih0dC5kb2xsYXJCcmFjZUwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKyt0aGlzJDEucG9zXG4gICAgICAgICAgcmV0dXJuIHRoaXMkMS5maW5pc2hUb2tlbih0dC5iYWNrUXVvdGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG91dCArPSB0aGlzJDEuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcyQxLnBvcylcbiAgICAgIHJldHVybiB0aGlzJDEuZmluaXNoVG9rZW4odHQudGVtcGxhdGUsIG91dClcbiAgICB9XG4gICAgaWYgKGNoID09PSA5MikgeyAvLyAnXFwnXG4gICAgICBvdXQgKz0gdGhpcyQxLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMkMS5wb3MpXG4gICAgICBvdXQgKz0gdGhpcyQxLnJlYWRFc2NhcGVkQ2hhcih0cnVlKVxuICAgICAgY2h1bmtTdGFydCA9IHRoaXMkMS5wb3NcbiAgICB9IGVsc2UgaWYgKGlzTmV3TGluZShjaCkpIHtcbiAgICAgIG91dCArPSB0aGlzJDEuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcyQxLnBvcylcbiAgICAgICsrdGhpcyQxLnBvc1xuICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIGlmICh0aGlzJDEuaW5wdXQuY2hhckNvZGVBdCh0aGlzJDEucG9zKSA9PT0gMTApICsrdGhpcyQxLnBvc1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIG91dCArPSBcIlxcblwiXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaClcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMkMS5vcHRpb25zLmxvY2F0aW9ucykge1xuICAgICAgICArK3RoaXMkMS5jdXJMaW5lXG4gICAgICAgIHRoaXMkMS5saW5lU3RhcnQgPSB0aGlzJDEucG9zXG4gICAgICB9XG4gICAgICBjaHVua1N0YXJ0ID0gdGhpcyQxLnBvc1xuICAgIH0gZWxzZSB7XG4gICAgICArK3RoaXMkMS5wb3NcbiAgICB9XG4gIH1cbn1cblxuLy8gVXNlZCB0byByZWFkIGVzY2FwZWQgY2hhcmFjdGVyc1xuXG5wcCQ3LnJlYWRFc2NhcGVkQ2hhciA9IGZ1bmN0aW9uKGluVGVtcGxhdGUpIHtcbiAgdmFyIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KCsrdGhpcy5wb3MpXG4gICsrdGhpcy5wb3NcbiAgc3dpdGNoIChjaCkge1xuICBjYXNlIDExMDogcmV0dXJuIFwiXFxuXCIgLy8gJ24nIC0+ICdcXG4nXG4gIGNhc2UgMTE0OiByZXR1cm4gXCJcXHJcIiAvLyAncicgLT4gJ1xccidcbiAgY2FzZSAxMjA6IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMucmVhZEhleENoYXIoMikpIC8vICd4J1xuICBjYXNlIDExNzogcmV0dXJuIGNvZGVQb2ludFRvU3RyaW5nKHRoaXMucmVhZENvZGVQb2ludCgpKSAvLyAndSdcbiAgY2FzZSAxMTY6IHJldHVybiBcIlxcdFwiIC8vICd0JyAtPiAnXFx0J1xuICBjYXNlIDk4OiByZXR1cm4gXCJcXGJcIiAvLyAnYicgLT4gJ1xcYidcbiAgY2FzZSAxMTg6IHJldHVybiBcIlxcdTAwMGJcIiAvLyAndicgLT4gJ1xcdTAwMGInXG4gIGNhc2UgMTAyOiByZXR1cm4gXCJcXGZcIiAvLyAnZicgLT4gJ1xcZidcbiAgY2FzZSAxMzogaWYgKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcykgPT09IDEwKSArK3RoaXMucG9zIC8vICdcXHJcXG4nXG4gIGNhc2UgMTA6IC8vICcgXFxuJ1xuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7IHRoaXMubGluZVN0YXJ0ID0gdGhpcy5wb3M7ICsrdGhpcy5jdXJMaW5lIH1cbiAgICByZXR1cm4gXCJcIlxuICBkZWZhdWx0OlxuICAgIGlmIChjaCA+PSA0OCAmJiBjaCA8PSA1NSkge1xuICAgICAgdmFyIG9jdGFsU3RyID0gdGhpcy5pbnB1dC5zdWJzdHIodGhpcy5wb3MgLSAxLCAzKS5tYXRjaCgvXlswLTddKy8pWzBdXG4gICAgICB2YXIgb2N0YWwgPSBwYXJzZUludChvY3RhbFN0ciwgOClcbiAgICAgIGlmIChvY3RhbCA+IDI1NSkge1xuICAgICAgICBvY3RhbFN0ciA9IG9jdGFsU3RyLnNsaWNlKDAsIC0xKVxuICAgICAgICBvY3RhbCA9IHBhcnNlSW50KG9jdGFsU3RyLCA4KVxuICAgICAgfVxuICAgICAgaWYgKG9jdGFsU3RyICE9PSBcIjBcIiAmJiAodGhpcy5zdHJpY3QgfHwgaW5UZW1wbGF0ZSkpIHtcbiAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnBvcyAtIDIsIFwiT2N0YWwgbGl0ZXJhbCBpbiBzdHJpY3QgbW9kZVwiKVxuICAgICAgfVxuICAgICAgdGhpcy5wb3MgKz0gb2N0YWxTdHIubGVuZ3RoIC0gMVxuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUob2N0YWwpXG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKVxuICB9XG59XG5cbi8vIFVzZWQgdG8gcmVhZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlcyAoJ1xceCcsICdcXHUnLCAnXFxVJykuXG5cbnBwJDcucmVhZEhleENoYXIgPSBmdW5jdGlvbihsZW4pIHtcbiAgdmFyIGNvZGVQb3MgPSB0aGlzLnBvc1xuICB2YXIgbiA9IHRoaXMucmVhZEludCgxNiwgbGVuKVxuICBpZiAobiA9PT0gbnVsbCkgdGhpcy5yYWlzZShjb2RlUG9zLCBcIkJhZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlXCIpXG4gIHJldHVybiBuXG59XG5cbi8vIFJlYWQgYW4gaWRlbnRpZmllciwgYW5kIHJldHVybiBpdCBhcyBhIHN0cmluZy4gU2V0cyBgdGhpcy5jb250YWluc0VzY2Bcbi8vIHRvIHdoZXRoZXIgdGhlIHdvcmQgY29udGFpbmVkIGEgJ1xcdScgZXNjYXBlLlxuLy9cbi8vIEluY3JlbWVudGFsbHkgYWRkcyBvbmx5IGVzY2FwZWQgY2hhcnMsIGFkZGluZyBvdGhlciBjaHVua3MgYXMtaXNcbi8vIGFzIGEgbWljcm8tb3B0aW1pemF0aW9uLlxuXG5wcCQ3LnJlYWRXb3JkMSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB0aGlzLmNvbnRhaW5zRXNjID0gZmFsc2VcbiAgdmFyIHdvcmQgPSBcIlwiLCBmaXJzdCA9IHRydWUsIGNodW5rU3RhcnQgPSB0aGlzLnBvc1xuICB2YXIgYXN0cmFsID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDZcbiAgd2hpbGUgKHRoaXMucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGgpIHtcbiAgICB2YXIgY2ggPSB0aGlzJDEuZnVsbENoYXJDb2RlQXRQb3MoKVxuICAgIGlmIChpc0lkZW50aWZpZXJDaGFyKGNoLCBhc3RyYWwpKSB7XG4gICAgICB0aGlzJDEucG9zICs9IGNoIDw9IDB4ZmZmZiA/IDEgOiAyXG4gICAgfSBlbHNlIGlmIChjaCA9PT0gOTIpIHsgLy8gXCJcXFwiXG4gICAgICB0aGlzJDEuY29udGFpbnNFc2MgPSB0cnVlXG4gICAgICB3b3JkICs9IHRoaXMkMS5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzJDEucG9zKVxuICAgICAgdmFyIGVzY1N0YXJ0ID0gdGhpcyQxLnBvc1xuICAgICAgaWYgKHRoaXMkMS5pbnB1dC5jaGFyQ29kZUF0KCsrdGhpcyQxLnBvcykgIT0gMTE3KSAvLyBcInVcIlxuICAgICAgICB0aGlzJDEucmFpc2UodGhpcyQxLnBvcywgXCJFeHBlY3RpbmcgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UgXFxcXHVYWFhYXCIpXG4gICAgICArK3RoaXMkMS5wb3NcbiAgICAgIHZhciBlc2MgPSB0aGlzJDEucmVhZENvZGVQb2ludCgpXG4gICAgICBpZiAoIShmaXJzdCA/IGlzSWRlbnRpZmllclN0YXJ0IDogaXNJZGVudGlmaWVyQ2hhcikoZXNjLCBhc3RyYWwpKVxuICAgICAgICB0aGlzJDEucmFpc2UoZXNjU3RhcnQsIFwiSW52YWxpZCBVbmljb2RlIGVzY2FwZVwiKVxuICAgICAgd29yZCArPSBjb2RlUG9pbnRUb1N0cmluZyhlc2MpXG4gICAgICBjaHVua1N0YXJ0ID0gdGhpcyQxLnBvc1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgICBmaXJzdCA9IGZhbHNlXG4gIH1cbiAgcmV0dXJuIHdvcmQgKyB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKVxufVxuXG4vLyBSZWFkIGFuIGlkZW50aWZpZXIgb3Iga2V5d29yZCB0b2tlbi4gV2lsbCBjaGVjayBmb3IgcmVzZXJ2ZWRcbi8vIHdvcmRzIHdoZW4gbmVjZXNzYXJ5LlxuXG5wcCQ3LnJlYWRXb3JkID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3b3JkID0gdGhpcy5yZWFkV29yZDEoKVxuICB2YXIgdHlwZSA9IHR0Lm5hbWVcbiAgaWYgKHRoaXMua2V5d29yZHMudGVzdCh3b3JkKSkge1xuICAgIGlmICh0aGlzLmNvbnRhaW5zRXNjKSB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5zdGFydCwgXCJFc2NhcGUgc2VxdWVuY2UgaW4ga2V5d29yZCBcIiArIHdvcmQpXG4gICAgdHlwZSA9IGtleXdvcmRUeXBlc1t3b3JkXVxuICB9XG4gIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGUsIHdvcmQpXG59XG5cbi8vIEFjb3JuIGlzIGEgdGlueSwgZmFzdCBKYXZhU2NyaXB0IHBhcnNlciB3cml0dGVuIGluIEphdmFTY3JpcHQuXG4vL1xuLy8gQWNvcm4gd2FzIHdyaXR0ZW4gYnkgTWFyaWpuIEhhdmVyYmVrZSwgSW5ndmFyIFN0ZXBhbnlhbiwgYW5kXG4vLyB2YXJpb3VzIGNvbnRyaWJ1dG9ycyBhbmQgcmVsZWFzZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2UuXG4vL1xuLy8gR2l0IHJlcG9zaXRvcmllcyBmb3IgQWNvcm4gYXJlIGF2YWlsYWJsZSBhdFxuLy9cbi8vICAgICBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9hY29yblxuLy8gICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXJuanMvYWNvcm4uZ2l0XG4vL1xuLy8gUGxlYXNlIHVzZSB0aGUgW2dpdGh1YiBidWcgdHJhY2tlcl1bZ2hidF0gdG8gcmVwb3J0IGlzc3Vlcy5cbi8vXG4vLyBbZ2hidF06IGh0dHBzOi8vZ2l0aHViLmNvbS90ZXJuanMvYWNvcm4vaXNzdWVzXG4vL1xuLy8gVGhpcyBmaWxlIGRlZmluZXMgdGhlIG1haW4gcGFyc2VyIGludGVyZmFjZS4gVGhlIGxpYnJhcnkgYWxzbyBjb21lc1xuLy8gd2l0aCBhIFtlcnJvci10b2xlcmFudCBwYXJzZXJdW2RhbW1pdF0gYW5kIGFuXG4vLyBbYWJzdHJhY3Qgc3ludGF4IHRyZWUgd2Fsa2VyXVt3YWxrXSwgZGVmaW5lZCBpbiBvdGhlciBmaWxlcy5cbi8vXG4vLyBbZGFtbWl0XTogYWNvcm5fbG9vc2UuanNcbi8vIFt3YWxrXTogdXRpbC93YWxrLmpzXG5cbnZhciB2ZXJzaW9uID0gXCI0LjAuMTFcIlxuXG4vLyBUaGUgbWFpbiBleHBvcnRlZCBpbnRlcmZhY2UgKHVuZGVyIGBzZWxmLmFjb3JuYCB3aGVuIGluIHRoZVxuLy8gYnJvd3NlcikgaXMgYSBgcGFyc2VgIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjb2RlIHN0cmluZyBhbmRcbi8vIHJldHVybnMgYW4gYWJzdHJhY3Qgc3ludGF4IHRyZWUgYXMgc3BlY2lmaWVkIGJ5IFtNb3ppbGxhIHBhcnNlclxuLy8gQVBJXVthcGldLlxuLy9cbi8vIFthcGldOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1NwaWRlck1vbmtleS9QYXJzZXJfQVBJXG5cbmZ1bmN0aW9uIHBhcnNlKGlucHV0LCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgUGFyc2VyKG9wdGlvbnMsIGlucHV0KS5wYXJzZSgpXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gcGFyc2UgYSBzaW5nbGUgZXhwcmVzc2lvbiBhdCBhIGdpdmVuXG4vLyBvZmZzZXQgaW4gYSBzdHJpbmcuIFVzZWZ1bCBmb3IgcGFyc2luZyBtaXhlZC1sYW5ndWFnZSBmb3JtYXRzXG4vLyB0aGF0IGVtYmVkIEphdmFTY3JpcHQgZXhwcmVzc2lvbnMuXG5cbmZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbkF0KGlucHV0LCBwb3MsIG9wdGlvbnMpIHtcbiAgdmFyIHAgPSBuZXcgUGFyc2VyKG9wdGlvbnMsIGlucHV0LCBwb3MpXG4gIHAubmV4dFRva2VuKClcbiAgcmV0dXJuIHAucGFyc2VFeHByZXNzaW9uKClcbn1cblxuLy8gQWNvcm4gaXMgb3JnYW5pemVkIGFzIGEgdG9rZW5pemVyIGFuZCBhIHJlY3Vyc2l2ZS1kZXNjZW50IHBhcnNlci5cbi8vIFRoZSBgdG9rZW5pemVyYCBleHBvcnQgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSB0b2tlbml6ZXIuXG5cbmZ1bmN0aW9uIHRva2VuaXplcihpbnB1dCwgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IFBhcnNlcihvcHRpb25zLCBpbnB1dClcbn1cblxuLy8gVGhpcyBpcyBhIHRlcnJpYmxlIGtsdWRnZSB0byBzdXBwb3J0IHRoZSBleGlzdGluZywgcHJlLUVTNlxuLy8gaW50ZXJmYWNlIHdoZXJlIHRoZSBsb29zZSBwYXJzZXIgbW9kdWxlIHJldHJvYWN0aXZlbHkgYWRkcyBleHBvcnRzXG4vLyB0byB0aGlzIG1vZHVsZS5cbmZ1bmN0aW9uIGFkZExvb3NlRXhwb3J0cyhwYXJzZSwgUGFyc2VyLCBwbHVnaW5zKSB7XG4gIGV4cG9ydHMucGFyc2VfZGFtbWl0ID0gcGFyc2VcbiAgZXhwb3J0cy5Mb29zZVBhcnNlciA9IFBhcnNlclxuICBleHBvcnRzLnBsdWdpbnNMb29zZSA9IHBsdWdpbnNcbn1cblxuZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjtcbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbmV4cG9ydHMucGFyc2VFeHByZXNzaW9uQXQgPSBwYXJzZUV4cHJlc3Npb25BdDtcbmV4cG9ydHMudG9rZW5pemVyID0gdG9rZW5pemVyO1xuZXhwb3J0cy5hZGRMb29zZUV4cG9ydHMgPSBhZGRMb29zZUV4cG9ydHM7XG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjtcbmV4cG9ydHMucGx1Z2lucyA9IHBsdWdpbnM7XG5leHBvcnRzLmRlZmF1bHRPcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG5leHBvcnRzLlBvc2l0aW9uID0gUG9zaXRpb247XG5leHBvcnRzLlNvdXJjZUxvY2F0aW9uID0gU291cmNlTG9jYXRpb247XG5leHBvcnRzLmdldExpbmVJbmZvID0gZ2V0TGluZUluZm87XG5leHBvcnRzLk5vZGUgPSBOb2RlO1xuZXhwb3J0cy5Ub2tlblR5cGUgPSBUb2tlblR5cGU7XG5leHBvcnRzLnRva1R5cGVzID0gdHQ7XG5leHBvcnRzLmtleXdvcmRUeXBlcyA9IGtleXdvcmRUeXBlcztcbmV4cG9ydHMuVG9rQ29udGV4dCA9IFRva0NvbnRleHQ7XG5leHBvcnRzLnRva0NvbnRleHRzID0gdHlwZXM7XG5leHBvcnRzLmlzSWRlbnRpZmllckNoYXIgPSBpc0lkZW50aWZpZXJDaGFyO1xuZXhwb3J0cy5pc0lkZW50aWZpZXJTdGFydCA9IGlzSWRlbnRpZmllclN0YXJ0O1xuZXhwb3J0cy5Ub2tlbiA9IFRva2VuO1xuZXhwb3J0cy5pc05ld0xpbmUgPSBpc05ld0xpbmU7XG5leHBvcnRzLmxpbmVCcmVhayA9IGxpbmVCcmVhaztcbmV4cG9ydHMubGluZUJyZWFrRyA9IGxpbmVCcmVha0c7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7IiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLmFjb3JuID0gZ2xvYmFsLmFjb3JuIHx8IHt9LCBnbG9iYWwuYWNvcm4ud2FsayA9IGdsb2JhbC5hY29ybi53YWxrIHx8IHt9KSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4vLyBBU1Qgd2Fsa2VyIG1vZHVsZSBmb3IgTW96aWxsYSBQYXJzZXIgQVBJIGNvbXBhdGlibGUgdHJlZXNcblxuLy8gQSBzaW1wbGUgd2FsayBpcyBvbmUgd2hlcmUgeW91IHNpbXBseSBzcGVjaWZ5IGNhbGxiYWNrcyB0byBiZVxuLy8gY2FsbGVkIG9uIHNwZWNpZmljIG5vZGVzLiBUaGUgbGFzdCB0d28gYXJndW1lbnRzIGFyZSBvcHRpb25hbC4gQVxuLy8gc2ltcGxlIHVzZSB3b3VsZCBiZVxuLy9cbi8vICAgICB3YWxrLnNpbXBsZShteVRyZWUsIHtcbi8vICAgICAgICAgRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkgeyAuLi4gfVxuLy8gICAgIH0pO1xuLy9cbi8vIHRvIGRvIHNvbWV0aGluZyB3aXRoIGFsbCBleHByZXNzaW9ucy4gQWxsIFBhcnNlciBBUEkgbm9kZSB0eXBlc1xuLy8gY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgbm9kZSB0eXBlcywgYXMgd2VsbCBhcyBFeHByZXNzaW9uLFxuLy8gU3RhdGVtZW50LCBhbmQgU2NvcGVCb2R5LCB3aGljaCBkZW5vdGUgY2F0ZWdvcmllcyBvZiBub2Rlcy5cbi8vXG4vLyBUaGUgYmFzZSBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBwYXNzIGEgY3VzdG9tIChyZWN1cnNpdmUpXG4vLyB3YWxrZXIsIGFuZCBzdGF0ZSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoaXMgd2Fsa2VkIGFuIGluaXRpYWxcbi8vIHN0YXRlLlxuXG5mdW5jdGlvbiBzaW1wbGUobm9kZSwgdmlzaXRvcnMsIGJhc2UsIHN0YXRlLCBvdmVycmlkZSkge1xuICBpZiAoIWJhc2UpIGJhc2UgPSBleHBvcnRzLmJhc2VcbiAgOyhmdW5jdGlvbiBjKG5vZGUsIHN0LCBvdmVycmlkZSkge1xuICAgIHZhciB0eXBlID0gb3ZlcnJpZGUgfHwgbm9kZS50eXBlLCBmb3VuZCA9IHZpc2l0b3JzW3R5cGVdXG4gICAgYmFzZVt0eXBlXShub2RlLCBzdCwgYylcbiAgICBpZiAoZm91bmQpIGZvdW5kKG5vZGUsIHN0KVxuICB9KShub2RlLCBzdGF0ZSwgb3ZlcnJpZGUpXG59XG5cbi8vIEFuIGFuY2VzdG9yIHdhbGsga2VlcHMgYW4gYXJyYXkgb2YgYW5jZXN0b3Igbm9kZXMgKGluY2x1ZGluZyB0aGVcbi8vIGN1cnJlbnQgbm9kZSkgYW5kIHBhc3NlcyB0aGVtIHRvIHRoZSBjYWxsYmFjayBhcyB0aGlyZCBwYXJhbWV0ZXJcbi8vIChhbmQgYWxzbyBhcyBzdGF0ZSBwYXJhbWV0ZXIgd2hlbiBubyBvdGhlciBzdGF0ZSBpcyBwcmVzZW50KS5cbmZ1bmN0aW9uIGFuY2VzdG9yKG5vZGUsIHZpc2l0b3JzLCBiYXNlLCBzdGF0ZSkge1xuICBpZiAoIWJhc2UpIGJhc2UgPSBleHBvcnRzLmJhc2VcbiAgdmFyIGFuY2VzdG9ycyA9IFtdXG4gIDsoZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZSwgZm91bmQgPSB2aXNpdG9yc1t0eXBlXVxuICAgIHZhciBpc05ldyA9IG5vZGUgIT0gYW5jZXN0b3JzW2FuY2VzdG9ycy5sZW5ndGggLSAxXVxuICAgIGlmIChpc05ldykgYW5jZXN0b3JzLnB1c2gobm9kZSlcbiAgICBiYXNlW3R5cGVdKG5vZGUsIHN0LCBjKVxuICAgIGlmIChmb3VuZCkgZm91bmQobm9kZSwgc3QgfHwgYW5jZXN0b3JzLCBhbmNlc3RvcnMpXG4gICAgaWYgKGlzTmV3KSBhbmNlc3RvcnMucG9wKClcbiAgfSkobm9kZSwgc3RhdGUpXG59XG5cbi8vIEEgcmVjdXJzaXZlIHdhbGsgaXMgb25lIHdoZXJlIHlvdXIgZnVuY3Rpb25zIG92ZXJyaWRlIHRoZSBkZWZhdWx0XG4vLyB3YWxrZXJzLiBUaGV5IGNhbiBtb2RpZnkgYW5kIHJlcGxhY2UgdGhlIHN0YXRlIHBhcmFtZXRlciB0aGF0J3Ncbi8vIHRocmVhZGVkIHRocm91Z2ggdGhlIHdhbGssIGFuZCBjYW4gb3B0IGhvdyBhbmQgd2hldGhlciB0byB3YWxrXG4vLyB0aGVpciBjaGlsZCBub2RlcyAoYnkgY2FsbGluZyB0aGVpciB0aGlyZCBhcmd1bWVudCBvbiB0aGVzZVxuLy8gbm9kZXMpLlxuZnVuY3Rpb24gcmVjdXJzaXZlKG5vZGUsIHN0YXRlLCBmdW5jcywgYmFzZSwgb3ZlcnJpZGUpIHtcbiAgdmFyIHZpc2l0b3IgPSBmdW5jcyA/IGV4cG9ydHMubWFrZShmdW5jcywgYmFzZSkgOiBiYXNlXG4gIDsoZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICB2aXNpdG9yW292ZXJyaWRlIHx8IG5vZGUudHlwZV0obm9kZSwgc3QsIGMpXG4gIH0pKG5vZGUsIHN0YXRlLCBvdmVycmlkZSlcbn1cblxuZnVuY3Rpb24gbWFrZVRlc3QodGVzdCkge1xuICBpZiAodHlwZW9mIHRlc3QgPT0gXCJzdHJpbmdcIilcbiAgICByZXR1cm4gZnVuY3Rpb24gKHR5cGUpIHsgcmV0dXJuIHR5cGUgPT0gdGVzdDsgfVxuICBlbHNlIGlmICghdGVzdClcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfVxuICBlbHNlXG4gICAgcmV0dXJuIHRlc3Rcbn1cblxudmFyIEZvdW5kID0gZnVuY3Rpb24gRm91bmQobm9kZSwgc3RhdGUpIHsgdGhpcy5ub2RlID0gbm9kZTsgdGhpcy5zdGF0ZSA9IHN0YXRlIH07XG5cbi8vIEZpbmQgYSBub2RlIHdpdGggYSBnaXZlbiBzdGFydCwgZW5kLCBhbmQgdHlwZSAoYWxsIGFyZSBvcHRpb25hbCxcbi8vIG51bGwgY2FuIGJlIHVzZWQgYXMgd2lsZGNhcmQpLiBSZXR1cm5zIGEge25vZGUsIHN0YXRlfSBvYmplY3QsIG9yXG4vLyB1bmRlZmluZWQgd2hlbiBpdCBkb2Vzbid0IGZpbmQgYSBtYXRjaGluZyBub2RlLlxuZnVuY3Rpb24gZmluZE5vZGVBdChub2RlLCBzdGFydCwgZW5kLCB0ZXN0LCBiYXNlLCBzdGF0ZSkge1xuICB0ZXN0ID0gbWFrZVRlc3QodGVzdClcbiAgaWYgKCFiYXNlKSBiYXNlID0gZXhwb3J0cy5iYXNlXG4gIHRyeSB7XG4gICAgOyhmdW5jdGlvbiBjKG5vZGUsIHN0LCBvdmVycmlkZSkge1xuICAgICAgdmFyIHR5cGUgPSBvdmVycmlkZSB8fCBub2RlLnR5cGVcbiAgICAgIGlmICgoc3RhcnQgPT0gbnVsbCB8fCBub2RlLnN0YXJ0IDw9IHN0YXJ0KSAmJlxuICAgICAgICAgIChlbmQgPT0gbnVsbCB8fCBub2RlLmVuZCA+PSBlbmQpKVxuICAgICAgICBiYXNlW3R5cGVdKG5vZGUsIHN0LCBjKVxuICAgICAgaWYgKChzdGFydCA9PSBudWxsIHx8IG5vZGUuc3RhcnQgPT0gc3RhcnQpICYmXG4gICAgICAgICAgKGVuZCA9PSBudWxsIHx8IG5vZGUuZW5kID09IGVuZCkgJiZcbiAgICAgICAgICB0ZXN0KHR5cGUsIG5vZGUpKVxuICAgICAgICB0aHJvdyBuZXcgRm91bmQobm9kZSwgc3QpXG4gICAgfSkobm9kZSwgc3RhdGUpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEZvdW5kKSByZXR1cm4gZVxuICAgIHRocm93IGVcbiAgfVxufVxuXG4vLyBGaW5kIHRoZSBpbm5lcm1vc3Qgbm9kZSBvZiBhIGdpdmVuIHR5cGUgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW5cbi8vIHBvc2l0aW9uLiBJbnRlcmZhY2Ugc2ltaWxhciB0byBmaW5kTm9kZUF0LlxuZnVuY3Rpb24gZmluZE5vZGVBcm91bmQobm9kZSwgcG9zLCB0ZXN0LCBiYXNlLCBzdGF0ZSkge1xuICB0ZXN0ID0gbWFrZVRlc3QodGVzdClcbiAgaWYgKCFiYXNlKSBiYXNlID0gZXhwb3J0cy5iYXNlXG4gIHRyeSB7XG4gICAgOyhmdW5jdGlvbiBjKG5vZGUsIHN0LCBvdmVycmlkZSkge1xuICAgICAgdmFyIHR5cGUgPSBvdmVycmlkZSB8fCBub2RlLnR5cGVcbiAgICAgIGlmIChub2RlLnN0YXJ0ID4gcG9zIHx8IG5vZGUuZW5kIDwgcG9zKSByZXR1cm5cbiAgICAgIGJhc2VbdHlwZV0obm9kZSwgc3QsIGMpXG4gICAgICBpZiAodGVzdCh0eXBlLCBub2RlKSkgdGhyb3cgbmV3IEZvdW5kKG5vZGUsIHN0KVxuICAgIH0pKG5vZGUsIHN0YXRlKVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBGb3VuZCkgcmV0dXJuIGVcbiAgICB0aHJvdyBlXG4gIH1cbn1cblxuLy8gRmluZCB0aGUgb3V0ZXJtb3N0IG1hdGNoaW5nIG5vZGUgYWZ0ZXIgYSBnaXZlbiBwb3NpdGlvbi5cbmZ1bmN0aW9uIGZpbmROb2RlQWZ0ZXIobm9kZSwgcG9zLCB0ZXN0LCBiYXNlLCBzdGF0ZSkge1xuICB0ZXN0ID0gbWFrZVRlc3QodGVzdClcbiAgaWYgKCFiYXNlKSBiYXNlID0gZXhwb3J0cy5iYXNlXG4gIHRyeSB7XG4gICAgOyhmdW5jdGlvbiBjKG5vZGUsIHN0LCBvdmVycmlkZSkge1xuICAgICAgaWYgKG5vZGUuZW5kIDwgcG9zKSByZXR1cm5cbiAgICAgIHZhciB0eXBlID0gb3ZlcnJpZGUgfHwgbm9kZS50eXBlXG4gICAgICBpZiAobm9kZS5zdGFydCA+PSBwb3MgJiYgdGVzdCh0eXBlLCBub2RlKSkgdGhyb3cgbmV3IEZvdW5kKG5vZGUsIHN0KVxuICAgICAgYmFzZVt0eXBlXShub2RlLCBzdCwgYylcbiAgICB9KShub2RlLCBzdGF0ZSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgRm91bmQpIHJldHVybiBlXG4gICAgdGhyb3cgZVxuICB9XG59XG5cbi8vIEZpbmQgdGhlIG91dGVybW9zdCBtYXRjaGluZyBub2RlIGJlZm9yZSBhIGdpdmVuIHBvc2l0aW9uLlxuZnVuY3Rpb24gZmluZE5vZGVCZWZvcmUobm9kZSwgcG9zLCB0ZXN0LCBiYXNlLCBzdGF0ZSkge1xuICB0ZXN0ID0gbWFrZVRlc3QodGVzdClcbiAgaWYgKCFiYXNlKSBiYXNlID0gZXhwb3J0cy5iYXNlXG4gIHZhciBtYXhcbiAgOyhmdW5jdGlvbiBjKG5vZGUsIHN0LCBvdmVycmlkZSkge1xuICAgIGlmIChub2RlLnN0YXJ0ID4gcG9zKSByZXR1cm5cbiAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZVxuICAgIGlmIChub2RlLmVuZCA8PSBwb3MgJiYgKCFtYXggfHwgbWF4Lm5vZGUuZW5kIDwgbm9kZS5lbmQpICYmIHRlc3QodHlwZSwgbm9kZSkpXG4gICAgICBtYXggPSBuZXcgRm91bmQobm9kZSwgc3QpXG4gICAgYmFzZVt0eXBlXShub2RlLCBzdCwgYylcbiAgfSkobm9kZSwgc3RhdGUpXG4gIHJldHVybiBtYXhcbn1cblxuLy8gRmFsbGJhY2sgdG8gYW4gT2JqZWN0LmNyZWF0ZSBwb2x5ZmlsbCBmb3Igb2xkZXIgZW52aXJvbm1lbnRzLlxudmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24ocHJvdG8pIHtcbiAgZnVuY3Rpb24gQ3RvcigpIHt9XG4gIEN0b3IucHJvdG90eXBlID0gcHJvdG9cbiAgcmV0dXJuIG5ldyBDdG9yXG59XG5cbi8vIFVzZWQgdG8gY3JlYXRlIGEgY3VzdG9tIHdhbGtlci4gV2lsbCBmaWxsIGluIGFsbCBtaXNzaW5nIG5vZGVcbi8vIHR5cGUgcHJvcGVydGllcyB3aXRoIHRoZSBkZWZhdWx0cy5cbmZ1bmN0aW9uIG1ha2UoZnVuY3MsIGJhc2UpIHtcbiAgaWYgKCFiYXNlKSBiYXNlID0gZXhwb3J0cy5iYXNlXG4gIHZhciB2aXNpdG9yID0gY3JlYXRlKGJhc2UpXG4gIGZvciAodmFyIHR5cGUgaW4gZnVuY3MpIHZpc2l0b3JbdHlwZV0gPSBmdW5jc1t0eXBlXVxuICByZXR1cm4gdmlzaXRvclxufVxuXG5mdW5jdGlvbiBza2lwVGhyb3VnaChub2RlLCBzdCwgYykgeyBjKG5vZGUsIHN0KSB9XG5mdW5jdGlvbiBpZ25vcmUoX25vZGUsIF9zdCwgX2MpIHt9XG5cbi8vIE5vZGUgd2Fsa2Vycy5cblxudmFyIGJhc2UgPSB7fVxuXG5iYXNlLlByb2dyYW0gPSBiYXNlLkJsb2NrU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5ib2R5Lmxlbmd0aDsgKytpKVxuICAgIGMobm9kZS5ib2R5W2ldLCBzdCwgXCJTdGF0ZW1lbnRcIilcbn1cbmJhc2UuU3RhdGVtZW50ID0gc2tpcFRocm91Z2hcbmJhc2UuRW1wdHlTdGF0ZW1lbnQgPSBpZ25vcmVcbmJhc2UuRXhwcmVzc2lvblN0YXRlbWVudCA9IGJhc2UuUGFyZW50aGVzaXplZEV4cHJlc3Npb24gPVxuICBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZS5leHByZXNzaW9uLCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9XG5iYXNlLklmU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS50ZXN0LCBzdCwgXCJFeHByZXNzaW9uXCIpXG4gIGMobm9kZS5jb25zZXF1ZW50LCBzdCwgXCJTdGF0ZW1lbnRcIilcbiAgaWYgKG5vZGUuYWx0ZXJuYXRlKSBjKG5vZGUuYWx0ZXJuYXRlLCBzdCwgXCJTdGF0ZW1lbnRcIilcbn1cbmJhc2UuTGFiZWxlZFN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykgeyByZXR1cm4gYyhub2RlLmJvZHksIHN0LCBcIlN0YXRlbWVudFwiKTsgfVxuYmFzZS5CcmVha1N0YXRlbWVudCA9IGJhc2UuQ29udGludWVTdGF0ZW1lbnQgPSBpZ25vcmVcbmJhc2UuV2l0aFN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUub2JqZWN0LCBzdCwgXCJFeHByZXNzaW9uXCIpXG4gIGMobm9kZS5ib2R5LCBzdCwgXCJTdGF0ZW1lbnRcIilcbn1cbmJhc2UuU3dpdGNoU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5kaXNjcmltaW5hbnQsIHN0LCBcIkV4cHJlc3Npb25cIilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNhc2VzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGNzID0gbm9kZS5jYXNlc1tpXVxuICAgIGlmIChjcy50ZXN0KSBjKGNzLnRlc3QsIHN0LCBcIkV4cHJlc3Npb25cIilcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNzLmNvbnNlcXVlbnQubGVuZ3RoOyArK2opXG4gICAgICBjKGNzLmNvbnNlcXVlbnRbal0sIHN0LCBcIlN0YXRlbWVudFwiKVxuICB9XG59XG5iYXNlLlJldHVyblN0YXRlbWVudCA9IGJhc2UuWWllbGRFeHByZXNzaW9uID0gYmFzZS5Bd2FpdEV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuYXJndW1lbnQpIGMobm9kZS5hcmd1bWVudCwgc3QsIFwiRXhwcmVzc2lvblwiKVxufVxuYmFzZS5UaHJvd1N0YXRlbWVudCA9IGJhc2UuU3ByZWFkRWxlbWVudCA9XG4gIGZ1bmN0aW9uIChub2RlLCBzdCwgYykgeyByZXR1cm4gYyhub2RlLmFyZ3VtZW50LCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9XG5iYXNlLlRyeVN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUuYmxvY2ssIHN0LCBcIlN0YXRlbWVudFwiKVxuICBpZiAobm9kZS5oYW5kbGVyKSBjKG5vZGUuaGFuZGxlciwgc3QpXG4gIGlmIChub2RlLmZpbmFsaXplcikgYyhub2RlLmZpbmFsaXplciwgc3QsIFwiU3RhdGVtZW50XCIpXG59XG5iYXNlLkNhdGNoQ2xhdXNlID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5wYXJhbSwgc3QsIFwiUGF0dGVyblwiKVxuICBjKG5vZGUuYm9keSwgc3QsIFwiU2NvcGVCb2R5XCIpXG59XG5iYXNlLldoaWxlU3RhdGVtZW50ID0gYmFzZS5Eb1doaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS50ZXN0LCBzdCwgXCJFeHByZXNzaW9uXCIpXG4gIGMobm9kZS5ib2R5LCBzdCwgXCJTdGF0ZW1lbnRcIilcbn1cbmJhc2UuRm9yU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLmluaXQpIGMobm9kZS5pbml0LCBzdCwgXCJGb3JJbml0XCIpXG4gIGlmIChub2RlLnRlc3QpIGMobm9kZS50ZXN0LCBzdCwgXCJFeHByZXNzaW9uXCIpXG4gIGlmIChub2RlLnVwZGF0ZSkgYyhub2RlLnVwZGF0ZSwgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBjKG5vZGUuYm9keSwgc3QsIFwiU3RhdGVtZW50XCIpXG59XG5iYXNlLkZvckluU3RhdGVtZW50ID0gYmFzZS5Gb3JPZlN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUubGVmdCwgc3QsIFwiRm9ySW5pdFwiKVxuICBjKG5vZGUucmlnaHQsIHN0LCBcIkV4cHJlc3Npb25cIilcbiAgYyhub2RlLmJvZHksIHN0LCBcIlN0YXRlbWVudFwiKVxufVxuYmFzZS5Gb3JJbml0ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLnR5cGUgPT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIpIGMobm9kZSwgc3QpXG4gIGVsc2UgYyhub2RlLCBzdCwgXCJFeHByZXNzaW9uXCIpXG59XG5iYXNlLkRlYnVnZ2VyU3RhdGVtZW50ID0gaWdub3JlXG5cbmJhc2UuRnVuY3Rpb25EZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykgeyByZXR1cm4gYyhub2RlLCBzdCwgXCJGdW5jdGlvblwiKTsgfVxuYmFzZS5WYXJpYWJsZURlY2xhcmF0aW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoOyArK2kpXG4gICAgYyhub2RlLmRlY2xhcmF0aW9uc1tpXSwgc3QpXG59XG5iYXNlLlZhcmlhYmxlRGVjbGFyYXRvciA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUuaWQsIHN0LCBcIlBhdHRlcm5cIilcbiAgaWYgKG5vZGUuaW5pdCkgYyhub2RlLmluaXQsIHN0LCBcIkV4cHJlc3Npb25cIilcbn1cblxuYmFzZS5GdW5jdGlvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBpZiAobm9kZS5pZCkgYyhub2RlLmlkLCBzdCwgXCJQYXR0ZXJuXCIpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5wYXJhbXMubGVuZ3RoOyBpKyspXG4gICAgYyhub2RlLnBhcmFtc1tpXSwgc3QsIFwiUGF0dGVyblwiKVxuICBjKG5vZGUuYm9keSwgc3QsIG5vZGUuZXhwcmVzc2lvbiA/IFwiU2NvcGVFeHByZXNzaW9uXCIgOiBcIlNjb3BlQm9keVwiKVxufVxuLy8gRklYTUUgZHJvcCB0aGVzZSBub2RlIHR5cGVzIGluIG5leHQgbWFqb3IgdmVyc2lvblxuLy8gKFRoZXkgYXJlIGF3a3dhcmQsIGFuZCBpbiBFUzYgZXZlcnkgYmxvY2sgY2FuIGJlIGEgc2NvcGUuKVxuYmFzZS5TY29wZUJvZHkgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZSwgc3QsIFwiU3RhdGVtZW50XCIpOyB9XG5iYXNlLlNjb3BlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykgeyByZXR1cm4gYyhub2RlLCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9XG5cbmJhc2UuUGF0dGVybiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBpZiAobm9kZS50eXBlID09IFwiSWRlbnRpZmllclwiKVxuICAgIGMobm9kZSwgc3QsIFwiVmFyaWFibGVQYXR0ZXJuXCIpXG4gIGVsc2UgaWYgKG5vZGUudHlwZSA9PSBcIk1lbWJlckV4cHJlc3Npb25cIilcbiAgICBjKG5vZGUsIHN0LCBcIk1lbWJlclBhdHRlcm5cIilcbiAgZWxzZVxuICAgIGMobm9kZSwgc3QpXG59XG5iYXNlLlZhcmlhYmxlUGF0dGVybiA9IGlnbm9yZVxuYmFzZS5NZW1iZXJQYXR0ZXJuID0gc2tpcFRocm91Z2hcbmJhc2UuUmVzdEVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZS5hcmd1bWVudCwgc3QsIFwiUGF0dGVyblwiKTsgfVxuYmFzZS5BcnJheVBhdHRlcm4gPSAgZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5lbGVtZW50cy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBlbHQgPSBub2RlLmVsZW1lbnRzW2ldXG4gICAgaWYgKGVsdCkgYyhlbHQsIHN0LCBcIlBhdHRlcm5cIilcbiAgfVxufVxuYmFzZS5PYmplY3RQYXR0ZXJuID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5wcm9wZXJ0aWVzLmxlbmd0aDsgKytpKVxuICAgIGMobm9kZS5wcm9wZXJ0aWVzW2ldLnZhbHVlLCBzdCwgXCJQYXR0ZXJuXCIpXG59XG5cbmJhc2UuRXhwcmVzc2lvbiA9IHNraXBUaHJvdWdoXG5iYXNlLlRoaXNFeHByZXNzaW9uID0gYmFzZS5TdXBlciA9IGJhc2UuTWV0YVByb3BlcnR5ID0gaWdub3JlXG5iYXNlLkFycmF5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuZWxlbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgZWx0ID0gbm9kZS5lbGVtZW50c1tpXVxuICAgIGlmIChlbHQpIGMoZWx0LCBzdCwgXCJFeHByZXNzaW9uXCIpXG4gIH1cbn1cbmJhc2UuT2JqZWN0RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucHJvcGVydGllcy5sZW5ndGg7ICsraSlcbiAgICBjKG5vZGUucHJvcGVydGllc1tpXSwgc3QpXG59XG5iYXNlLkZ1bmN0aW9uRXhwcmVzc2lvbiA9IGJhc2UuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gPSBiYXNlLkZ1bmN0aW9uRGVjbGFyYXRpb25cbmJhc2UuU2VxdWVuY2VFeHByZXNzaW9uID0gYmFzZS5UZW1wbGF0ZUxpdGVyYWwgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmV4cHJlc3Npb25zLmxlbmd0aDsgKytpKVxuICAgIGMobm9kZS5leHByZXNzaW9uc1tpXSwgc3QsIFwiRXhwcmVzc2lvblwiKVxufVxuYmFzZS5VbmFyeUV4cHJlc3Npb24gPSBiYXNlLlVwZGF0ZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmFyZ3VtZW50LCBzdCwgXCJFeHByZXNzaW9uXCIpXG59XG5iYXNlLkJpbmFyeUV4cHJlc3Npb24gPSBiYXNlLkxvZ2ljYWxFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5sZWZ0LCBzdCwgXCJFeHByZXNzaW9uXCIpXG4gIGMobm9kZS5yaWdodCwgc3QsIFwiRXhwcmVzc2lvblwiKVxufVxuYmFzZS5Bc3NpZ25tZW50RXhwcmVzc2lvbiA9IGJhc2UuQXNzaWdubWVudFBhdHRlcm4gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmxlZnQsIHN0LCBcIlBhdHRlcm5cIilcbiAgYyhub2RlLnJpZ2h0LCBzdCwgXCJFeHByZXNzaW9uXCIpXG59XG5iYXNlLkNvbmRpdGlvbmFsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUudGVzdCwgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBjKG5vZGUuY29uc2VxdWVudCwgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBjKG5vZGUuYWx0ZXJuYXRlLCBzdCwgXCJFeHByZXNzaW9uXCIpXG59XG5iYXNlLk5ld0V4cHJlc3Npb24gPSBiYXNlLkNhbGxFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5jYWxsZWUsIHN0LCBcIkV4cHJlc3Npb25cIilcbiAgaWYgKG5vZGUuYXJndW1lbnRzKSBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuYXJndW1lbnRzLmxlbmd0aDsgKytpKVxuICAgIGMobm9kZS5hcmd1bWVudHNbaV0sIHN0LCBcIkV4cHJlc3Npb25cIilcbn1cbmJhc2UuTWVtYmVyRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUub2JqZWN0LCBzdCwgXCJFeHByZXNzaW9uXCIpXG4gIGlmIChub2RlLmNvbXB1dGVkKSBjKG5vZGUucHJvcGVydHksIHN0LCBcIkV4cHJlc3Npb25cIilcbn1cbmJhc2UuRXhwb3J0TmFtZWREZWNsYXJhdGlvbiA9IGJhc2UuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLmRlY2xhcmF0aW9uKVxuICAgIGMobm9kZS5kZWNsYXJhdGlvbiwgc3QsIG5vZGUudHlwZSA9PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIiB8fCBub2RlLmRlY2xhcmF0aW9uLmlkID8gXCJTdGF0ZW1lbnRcIiA6IFwiRXhwcmVzc2lvblwiKVxuICBpZiAobm9kZS5zb3VyY2UpIGMobm9kZS5zb3VyY2UsIHN0LCBcIkV4cHJlc3Npb25cIilcbn1cbmJhc2UuRXhwb3J0QWxsRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLnNvdXJjZSwgc3QsIFwiRXhwcmVzc2lvblwiKVxufVxuYmFzZS5JbXBvcnREZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuc3BlY2lmaWVycy5sZW5ndGg7IGkrKylcbiAgICBjKG5vZGUuc3BlY2lmaWVyc1tpXSwgc3QpXG4gIGMobm9kZS5zb3VyY2UsIHN0LCBcIkV4cHJlc3Npb25cIilcbn1cbmJhc2UuSW1wb3J0U3BlY2lmaWVyID0gYmFzZS5JbXBvcnREZWZhdWx0U3BlY2lmaWVyID0gYmFzZS5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSBiYXNlLklkZW50aWZpZXIgPSBiYXNlLkxpdGVyYWwgPSBpZ25vcmVcblxuYmFzZS5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLnRhZywgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBjKG5vZGUucXVhc2ksIHN0KVxufVxuYmFzZS5DbGFzc0RlY2xhcmF0aW9uID0gYmFzZS5DbGFzc0V4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZSwgc3QsIFwiQ2xhc3NcIik7IH1cbmJhc2UuQ2xhc3MgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuaWQpIGMobm9kZS5pZCwgc3QsIFwiUGF0dGVyblwiKVxuICBpZiAobm9kZS5zdXBlckNsYXNzKSBjKG5vZGUuc3VwZXJDbGFzcywgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuYm9keS5ib2R5Lmxlbmd0aDsgaSsrKVxuICAgIGMobm9kZS5ib2R5LmJvZHlbaV0sIHN0KVxufVxuYmFzZS5NZXRob2REZWZpbml0aW9uID0gYmFzZS5Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBpZiAobm9kZS5jb21wdXRlZCkgYyhub2RlLmtleSwgc3QsIFwiRXhwcmVzc2lvblwiKVxuICBjKG5vZGUudmFsdWUsIHN0LCBcIkV4cHJlc3Npb25cIilcbn1cblxuZXhwb3J0cy5zaW1wbGUgPSBzaW1wbGU7XG5leHBvcnRzLmFuY2VzdG9yID0gYW5jZXN0b3I7XG5leHBvcnRzLnJlY3Vyc2l2ZSA9IHJlY3Vyc2l2ZTtcbmV4cG9ydHMuZmluZE5vZGVBdCA9IGZpbmROb2RlQXQ7XG5leHBvcnRzLmZpbmROb2RlQXJvdW5kID0gZmluZE5vZGVBcm91bmQ7XG5leHBvcnRzLmZpbmROb2RlQWZ0ZXIgPSBmaW5kTm9kZUFmdGVyO1xuZXhwb3J0cy5maW5kTm9kZUJlZm9yZSA9IGZpbmROb2RlQmVmb3JlO1xuZXhwb3J0cy5tYWtlID0gbWFrZTtcbmV4cG9ydHMuYmFzZSA9IGJhc2U7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY29tcGlsZVNjaGVtYSA9IHJlcXVpcmUoJy4vY29tcGlsZScpXG4gICwgcmVzb2x2ZSA9IHJlcXVpcmUoJy4vY29tcGlsZS9yZXNvbHZlJylcbiAgLCBDYWNoZSA9IHJlcXVpcmUoJy4vY2FjaGUnKVxuICAsIFNjaGVtYU9iamVjdCA9IHJlcXVpcmUoJy4vY29tcGlsZS9zY2hlbWFfb2JqJylcbiAgLCBzdGFibGVTdHJpbmdpZnkgPSByZXF1aXJlKCdqc29uLXN0YWJsZS1zdHJpbmdpZnknKVxuICAsIGZvcm1hdHMgPSByZXF1aXJlKCcuL2NvbXBpbGUvZm9ybWF0cycpXG4gICwgcnVsZXMgPSByZXF1aXJlKCcuL2NvbXBpbGUvcnVsZXMnKVxuICAsIHY1ID0gcmVxdWlyZSgnLi92NScpXG4gICwgdXRpbCA9IHJlcXVpcmUoJy4vY29tcGlsZS91dGlsJylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4vYXN5bmMnKVxuICAsIGNvID0gcmVxdWlyZSgnY28nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBBanY7XG5cbkFqdi5wcm90b3R5cGUuY29tcGlsZUFzeW5jID0gYXN5bmMuY29tcGlsZTtcblxudmFyIGN1c3RvbUtleXdvcmQgPSByZXF1aXJlKCcuL2tleXdvcmQnKTtcbkFqdi5wcm90b3R5cGUuYWRkS2V5d29yZCA9IGN1c3RvbUtleXdvcmQuYWRkO1xuQWp2LnByb3RvdHlwZS5nZXRLZXl3b3JkID0gY3VzdG9tS2V5d29yZC5nZXQ7XG5BanYucHJvdG90eXBlLnJlbW92ZUtleXdvcmQgPSBjdXN0b21LZXl3b3JkLnJlbW92ZTtcbkFqdi5WYWxpZGF0aW9uRXJyb3IgPSByZXF1aXJlKCcuL2NvbXBpbGUvdmFsaWRhdGlvbl9lcnJvcicpO1xuXG52YXIgTUVUQV9TQ0hFTUFfSUQgPSAnaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEnO1xudmFyIFNDSEVNQV9VUklfRk9STUFUID0gL14oPzooPzpbYS16XVthLXowLTkrLS5dKjopP1xcL1xcLyk/W15cXHNdKiQvaTtcbmZ1bmN0aW9uIFNDSEVNQV9VUklfRk9STUFUX0ZVTkMoc3RyKSB7XG4gIHJldHVybiBTQ0hFTUFfVVJJX0ZPUk1BVC50ZXN0KHN0cik7XG59XG5cbnZhciBNRVRBX0lHTk9SRV9PUFRJT05TID0gWyAncmVtb3ZlQWRkaXRpb25hbCcsICd1c2VEZWZhdWx0cycsICdjb2VyY2VUeXBlcycgXTtcblxuLyoqXG4gKiBDcmVhdGVzIHZhbGlkYXRvciBpbnN0YW5jZS5cbiAqIFVzYWdlOiBgQWp2KG9wdHMpYFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgb3B0aW9uYWwgb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSBhanYgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQWp2KG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFqdikpIHJldHVybiBuZXcgQWp2KG9wdHMpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgb3B0cyA9IHRoaXMuX29wdHMgPSB1dGlsLmNvcHkob3B0cykgfHwge307XG4gIHRoaXMuX3NjaGVtYXMgPSB7fTtcbiAgdGhpcy5fcmVmcyA9IHt9O1xuICB0aGlzLl9mcmFnbWVudHMgPSB7fTtcbiAgdGhpcy5fZm9ybWF0cyA9IGZvcm1hdHMob3B0cy5mb3JtYXQpO1xuICB0aGlzLl9jYWNoZSA9IG9wdHMuY2FjaGUgfHwgbmV3IENhY2hlO1xuICB0aGlzLl9sb2FkaW5nU2NoZW1hcyA9IHt9O1xuICB0aGlzLl9jb21waWxhdGlvbnMgPSBbXTtcbiAgdGhpcy5SVUxFUyA9IHJ1bGVzKCk7XG5cbiAgLy8gdGhpcyBpcyBkb25lIG9uIHB1cnBvc2UsIHNvIHRoYXQgbWV0aG9kcyBhcmUgYm91bmQgdG8gdGhlIGluc3RhbmNlXG4gIC8vICh3aXRob3V0IHVzaW5nIGJpbmQpIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCB3aXRob3V0IHRoZSBpbnN0YW5jZVxuICB0aGlzLnZhbGlkYXRlID0gdmFsaWRhdGU7XG4gIHRoaXMuY29tcGlsZSA9IGNvbXBpbGU7XG4gIHRoaXMuYWRkU2NoZW1hID0gYWRkU2NoZW1hO1xuICB0aGlzLmFkZE1ldGFTY2hlbWEgPSBhZGRNZXRhU2NoZW1hO1xuICB0aGlzLnZhbGlkYXRlU2NoZW1hID0gdmFsaWRhdGVTY2hlbWE7XG4gIHRoaXMuZ2V0U2NoZW1hID0gZ2V0U2NoZW1hO1xuICB0aGlzLnJlbW92ZVNjaGVtYSA9IHJlbW92ZVNjaGVtYTtcbiAgdGhpcy5hZGRGb3JtYXQgPSBhZGRGb3JtYXQ7XG4gIHRoaXMuZXJyb3JzVGV4dCA9IGVycm9yc1RleHQ7XG5cbiAgdGhpcy5fYWRkU2NoZW1hID0gX2FkZFNjaGVtYTtcbiAgdGhpcy5fY29tcGlsZSA9IF9jb21waWxlO1xuXG4gIG9wdHMubG9vcFJlcXVpcmVkID0gb3B0cy5sb29wUmVxdWlyZWQgfHwgSW5maW5pdHk7XG4gIGlmIChvcHRzLmFzeW5jIHx8IG9wdHMudHJhbnNwaWxlKSBhc3luYy5zZXR1cChvcHRzKTtcbiAgaWYgKG9wdHMuYmVhdXRpZnkgPT09IHRydWUpIG9wdHMuYmVhdXRpZnkgPSB7IGluZGVudF9zaXplOiAyIH07XG4gIGlmIChvcHRzLmVycm9yRGF0YVBhdGggPT0gJ3Byb3BlcnR5Jykgb3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5ID0gdHJ1ZTtcbiAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucygpO1xuXG4gIGlmIChvcHRzLmZvcm1hdHMpIGFkZEluaXRpYWxGb3JtYXRzKCk7XG4gIGFkZERyYWZ0NE1ldGFTY2hlbWEoKTtcbiAgaWYgKG9wdHMudjUpIHY1LmVuYWJsZSh0aGlzKTtcbiAgaWYgKHR5cGVvZiBvcHRzLm1ldGEgPT0gJ29iamVjdCcpIGFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgYWRkSW5pdGlhbFNjaGVtYXMoKTtcblxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBkYXRhIHVzaW5nIHNjaGVtYVxuICAgKiBTY2hlbWEgd2lsbCBiZSBjb21waWxlZCBhbmQgY2FjaGVkICh1c2luZyBzZXJpYWxpemVkIEpTT04gYXMga2V5LiBbanNvbi1zdGFibGUtc3RyaW5naWZ5XShodHRwczovL2dpdGh1Yi5jb20vc3Vic3RhY2svanNvbi1zdGFibGUtc3RyaW5naWZ5KSBpcyB1c2VkIHRvIHNlcmlhbGl6ZS5cbiAgICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmIG9yIHNjaGVtYSBvYmplY3RcbiAgICogQHBhcmFtICB7QW55fSBkYXRhIHRvIGJlIHZhbGlkYXRlZFxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB2YWxpZGF0aW9uIHJlc3VsdC4gRXJyb3JzIGZyb20gdGhlIGxhc3QgdmFsaWRhdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSBpbiBgYWp2LmVycm9yc2AgKGFuZCBhbHNvIGluIGNvbXBpbGVkIHNjaGVtYTogYHNjaGVtYS5lcnJvcnNgKS5cbiAgICovXG4gIGZ1bmN0aW9uIHZhbGlkYXRlKHNjaGVtYUtleVJlZiwgZGF0YSkge1xuICAgIHZhciB2O1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09ICdzdHJpbmcnKSB7XG4gICAgICB2ID0gZ2V0U2NoZW1hKHNjaGVtYUtleVJlZik7XG4gICAgICBpZiAoIXYpIHRocm93IG5ldyBFcnJvcignbm8gc2NoZW1hIHdpdGgga2V5IG9yIHJlZiBcIicgKyBzY2hlbWFLZXlSZWYgKyAnXCInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHNjaGVtYU9iaiA9IF9hZGRTY2hlbWEoc2NoZW1hS2V5UmVmKTtcbiAgICAgIHYgPSBzY2hlbWFPYmoudmFsaWRhdGUgfHwgX2NvbXBpbGUoc2NoZW1hT2JqKTtcbiAgICB9XG5cbiAgICB2YXIgdmFsaWQgPSB2KGRhdGEpO1xuICAgIGlmICh2LiRhc3luYyA9PT0gdHJ1ZSlcbiAgICAgIHJldHVybiBzZWxmLl9vcHRzLmFzeW5jID09ICcqJyA/IGNvKHZhbGlkKSA6IHZhbGlkO1xuICAgIHNlbGYuZXJyb3JzID0gdi5lcnJvcnM7XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cblxuICAvKipcbiAgICogQ3JlYXRlIHZhbGlkYXRpbmcgZnVuY3Rpb24gZm9yIHBhc3NlZCBzY2hlbWEuXG4gICAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSBvYmplY3RcbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gX21ldGEgdHJ1ZSBpZiBzY2hlbWEgaXMgYSBtZXRhLXNjaGVtYS4gVXNlZCBpbnRlcm5hbGx5IHRvIGNvbXBpbGUgbWV0YSBzY2hlbWFzIG9mIGN1c3RvbSBrZXl3b3Jkcy5cbiAgICogQHJldHVybiB7RnVuY3Rpb259IHZhbGlkYXRpbmcgZnVuY3Rpb25cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBpbGUoc2NoZW1hLCBfbWV0YSkge1xuICAgIHZhciBzY2hlbWFPYmogPSBfYWRkU2NoZW1hKHNjaGVtYSwgdW5kZWZpbmVkLCBfbWV0YSk7XG4gICAgcmV0dXJuIHNjaGVtYU9iai52YWxpZGF0ZSB8fCBfY29tcGlsZShzY2hlbWFPYmopO1xuICB9XG5cblxuICAvKipcbiAgICogQWRkcyBzY2hlbWEgdG8gdGhlIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge09iamVjdHxBcnJheX0gc2NoZW1hIHNjaGVtYSBvciBhcnJheSBvZiBzY2hlbWFzLiBJZiBhcnJheSBpcyBwYXNzZWQsIGBrZXlgIGFuZCBvdGhlciBwYXJhbWV0ZXJzIHdpbGwgYmUgaWdub3JlZC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGtleSBPcHRpb25hbCBzY2hlbWEga2V5LiBDYW4gYmUgcGFzc2VkIHRvIGB2YWxpZGF0ZWAgbWV0aG9kIGluc3RlYWQgb2Ygc2NoZW1hIG9iamVjdCBvciBpZC9yZWYuIE9uZSBzY2hlbWEgcGVyIGluc3RhbmNlIGNhbiBoYXZlIGVtcHR5IGBpZGAgYW5kIGBrZXlgLlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IF9za2lwVmFsaWRhdGlvbiB0cnVlIHRvIHNraXAgc2NoZW1hIHZhbGlkYXRpb24uIFVzZWQgaW50ZXJuYWxseSwgb3B0aW9uIHZhbGlkYXRlU2NoZW1hIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gX21ldGEgdHJ1ZSBpZiBzY2hlbWEgaXMgYSBtZXRhLXNjaGVtYS4gVXNlZCBpbnRlcm5hbGx5LCBhZGRNZXRhU2NoZW1hIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gICAqL1xuICBmdW5jdGlvbiBhZGRTY2hlbWEoc2NoZW1hLCBrZXksIF9za2lwVmFsaWRhdGlvbiwgX21ldGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKXtcbiAgICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIGFkZFNjaGVtYShzY2hlbWFbaV0sIHVuZGVmaW5lZCwgX3NraXBWYWxpZGF0aW9uLCBfbWV0YSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGNhbiBrZXkvaWQgaGF2ZSAjIGluc2lkZT9cbiAgICBrZXkgPSByZXNvbHZlLm5vcm1hbGl6ZUlkKGtleSB8fCBzY2hlbWEuaWQpO1xuICAgIGNoZWNrVW5pcXVlKGtleSk7XG4gICAgc2VsZi5fc2NoZW1hc1trZXldID0gX2FkZFNjaGVtYShzY2hlbWEsIF9za2lwVmFsaWRhdGlvbiwgX21ldGEsIHRydWUpO1xuICB9XG5cblxuICAvKipcbiAgICogQWRkIHNjaGVtYSB0aGF0IHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBvdGhlciBzY2hlbWFzXG4gICAqIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5IG9wdGlvbmFsIHNjaGVtYSBrZXlcbiAgICogQHBhcmFtIHtCb29sZWFufSBza2lwVmFsaWRhdGlvbiB0cnVlIHRvIHNraXAgc2NoZW1hIHZhbGlkYXRpb24sIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHZhbGlkYXRlU2NoZW1hIG9wdGlvbiBmb3IgbWV0YS1zY2hlbWFcbiAgICovXG4gIGZ1bmN0aW9uIGFkZE1ldGFTY2hlbWEoc2NoZW1hLCBrZXksIHNraXBWYWxpZGF0aW9uKSB7XG4gICAgYWRkU2NoZW1hKHNjaGVtYSwga2V5LCBza2lwVmFsaWRhdGlvbiwgdHJ1ZSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBzY2hlbWFcbiAgICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHtCb29sZWFufSB0aHJvd09yTG9nRXJyb3IgcGFzcyB0cnVlIHRvIHRocm93IChvciBsb2cpIGFuIGVycm9yIGlmIGludmFsaWRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBzY2hlbWEgaXMgdmFsaWRcbiAgICovXG4gIGZ1bmN0aW9uIHZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgdmFyICRzY2hlbWEgPSBzY2hlbWEuJHNjaGVtYSB8fCBzZWxmLl9vcHRzLmRlZmF1bHRNZXRhIHx8IGRlZmF1bHRNZXRhKCk7XG4gICAgdmFyIGN1cnJlbnRVcmlGb3JtYXQgPSBzZWxmLl9mb3JtYXRzLnVyaTtcbiAgICBzZWxmLl9mb3JtYXRzLnVyaSA9IHR5cGVvZiBjdXJyZW50VXJpRm9ybWF0ID09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgID8gU0NIRU1BX1VSSV9GT1JNQVRfRlVOQ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBTQ0hFTUFfVVJJX0ZPUk1BVDtcbiAgICB2YXIgdmFsaWQ7XG4gICAgdHJ5IHsgdmFsaWQgPSB2YWxpZGF0ZSgkc2NoZW1hLCBzY2hlbWEpOyB9XG4gICAgZmluYWxseSB7IHNlbGYuX2Zvcm1hdHMudXJpID0gY3VycmVudFVyaUZvcm1hdDsgfVxuICAgIGlmICghdmFsaWQgJiYgdGhyb3dPckxvZ0Vycm9yKSB7XG4gICAgICB2YXIgbWVzc2FnZSA9ICdzY2hlbWEgaXMgaW52YWxpZDogJyArIGVycm9yc1RleHQoKTtcbiAgICAgIGlmIChzZWxmLl9vcHRzLnZhbGlkYXRlU2NoZW1hID09ICdsb2cnKSBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gZGVmYXVsdE1ldGEoKSB7XG4gICAgdmFyIG1ldGEgPSBzZWxmLl9vcHRzLm1ldGE7XG4gICAgc2VsZi5fb3B0cy5kZWZhdWx0TWV0YSA9IHR5cGVvZiBtZXRhID09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1ldGEuaWQgfHwgbWV0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLl9vcHRzLnY1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdjUuTUVUQV9TQ0hFTUFfSURcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNRVRBX1NDSEVNQV9JRDtcbiAgICByZXR1cm4gc2VsZi5fb3B0cy5kZWZhdWx0TWV0YTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldCBjb21waWxlZCBzY2hlbWEgZnJvbSB0aGUgaW5zdGFuY2UgYnkgYGtleWAgb3IgYHJlZmAuXG4gICAqIEBwYXJhbSAge1N0cmluZ30ga2V5UmVmIGBrZXlgIHRoYXQgd2FzIHBhc3NlZCB0byBgYWRkU2NoZW1hYCBvciBmdWxsIHNjaGVtYSByZWZlcmVuY2UgKGBzY2hlbWEuaWRgIG9yIHJlc29sdmVkIGlkKS5cbiAgICogQHJldHVybiB7RnVuY3Rpb259IHNjaGVtYSB2YWxpZGF0aW5nIGZ1bmN0aW9uICh3aXRoIHByb3BlcnR5IGBzY2hlbWFgKS5cbiAgICovXG4gIGZ1bmN0aW9uIGdldFNjaGVtYShrZXlSZWYpIHtcbiAgICB2YXIgc2NoZW1hT2JqID0gX2dldFNjaGVtYU9iaihrZXlSZWYpO1xuICAgIHN3aXRjaCAodHlwZW9mIHNjaGVtYU9iaikge1xuICAgICAgY2FzZSAnb2JqZWN0JzogcmV0dXJuIHNjaGVtYU9iai52YWxpZGF0ZSB8fCBfY29tcGlsZShzY2hlbWFPYmopO1xuICAgICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuIGdldFNjaGVtYShzY2hlbWFPYmopO1xuICAgICAgY2FzZSAndW5kZWZpbmVkJzogcmV0dXJuIF9nZXRTY2hlbWFGcmFnbWVudChrZXlSZWYpO1xuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gX2dldFNjaGVtYUZyYWdtZW50KHJlZikge1xuICAgIHZhciByZXMgPSByZXNvbHZlLnNjaGVtYS5jYWxsKHNlbGYsIHsgc2NoZW1hOiB7fSB9LCByZWYpO1xuICAgIGlmIChyZXMpIHtcbiAgICAgIHZhciBzY2hlbWEgPSByZXMuc2NoZW1hXG4gICAgICAgICwgcm9vdCA9IHJlcy5yb290XG4gICAgICAgICwgYmFzZUlkID0gcmVzLmJhc2VJZDtcbiAgICAgIHZhciB2ID0gY29tcGlsZVNjaGVtYS5jYWxsKHNlbGYsIHNjaGVtYSwgcm9vdCwgdW5kZWZpbmVkLCBiYXNlSWQpO1xuICAgICAgc2VsZi5fZnJhZ21lbnRzW3JlZl0gPSBuZXcgU2NoZW1hT2JqZWN0KHtcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIGZyYWdtZW50OiB0cnVlLFxuICAgICAgICBzY2hlbWE6IHNjaGVtYSxcbiAgICAgICAgcm9vdDogcm9vdCxcbiAgICAgICAgYmFzZUlkOiBiYXNlSWQsXG4gICAgICAgIHZhbGlkYXRlOiB2XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB2O1xuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gX2dldFNjaGVtYU9iaihrZXlSZWYpIHtcbiAgICBrZXlSZWYgPSByZXNvbHZlLm5vcm1hbGl6ZUlkKGtleVJlZik7XG4gICAgcmV0dXJuIHNlbGYuX3NjaGVtYXNba2V5UmVmXSB8fCBzZWxmLl9yZWZzW2tleVJlZl0gfHwgc2VsZi5fZnJhZ21lbnRzW2tleVJlZl07XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZW1vdmUgY2FjaGVkIHNjaGVtYShzKS5cbiAgICogSWYgbm8gcGFyYW1ldGVyIGlzIHBhc3NlZCBhbGwgc2NoZW1hcyBidXQgbWV0YS1zY2hlbWFzIGFyZSByZW1vdmVkLlxuICAgKiBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAgICogRXZlbiBpZiBzY2hlbWEgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBzY2hlbWFzIGl0IHN0aWxsIGNhbiBiZSByZW1vdmVkIGFzIG90aGVyIHNjaGVtYXMgaGF2ZSBsb2NhbCByZWZlcmVuY2VzLlxuICAgKiBAcGFyYW0gIHtTdHJpbmd8T2JqZWN0fFJlZ0V4cH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmLCBwYXR0ZXJuIHRvIG1hdGNoIGtleS9yZWYgb3Igc2NoZW1hIG9iamVjdFxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICAgIGlmIChzY2hlbWFLZXlSZWYgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIF9yZW1vdmVBbGxTY2hlbWFzKHNlbGYuX3NjaGVtYXMsIHNjaGVtYUtleVJlZik7XG4gICAgICBfcmVtb3ZlQWxsU2NoZW1hcyhzZWxmLl9yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGVvZiBzY2hlbWFLZXlSZWYpIHtcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIF9yZW1vdmVBbGxTY2hlbWFzKHNlbGYuX3NjaGVtYXMpO1xuICAgICAgICBfcmVtb3ZlQWxsU2NoZW1hcyhzZWxmLl9yZWZzKTtcbiAgICAgICAgc2VsZi5fY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgdmFyIHNjaGVtYU9iaiA9IF9nZXRTY2hlbWFPYmooc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgaWYgKHNjaGVtYU9iaikgc2VsZi5fY2FjaGUuZGVsKHNjaGVtYU9iai5qc29uU3RyKTtcbiAgICAgICAgZGVsZXRlIHNlbGYuX3NjaGVtYXNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgZGVsZXRlIHNlbGYuX3JlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgdmFyIGpzb25TdHIgPSBzdGFibGVTdHJpbmdpZnkoc2NoZW1hS2V5UmVmKTtcbiAgICAgICAgc2VsZi5fY2FjaGUuZGVsKGpzb25TdHIpO1xuICAgICAgICB2YXIgaWQgPSBzY2hlbWFLZXlSZWYuaWQ7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIGlkID0gcmVzb2x2ZS5ub3JtYWxpemVJZChpZCk7XG4gICAgICAgICAgZGVsZXRlIHNlbGYuX3NjaGVtYXNbaWRdO1xuICAgICAgICAgIGRlbGV0ZSBzZWxmLl9yZWZzW2lkXTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gX3JlbW92ZUFsbFNjaGVtYXMoc2NoZW1hcywgcmVnZXgpIHtcbiAgICBmb3IgKHZhciBrZXlSZWYgaW4gc2NoZW1hcykge1xuICAgICAgdmFyIHNjaGVtYU9iaiA9IHNjaGVtYXNba2V5UmVmXTtcbiAgICAgIGlmICghc2NoZW1hT2JqLm1ldGEgJiYgKCFyZWdleCB8fCByZWdleC50ZXN0KGtleVJlZikpKSB7XG4gICAgICAgIHNlbGYuX2NhY2hlLmRlbChzY2hlbWFPYmouanNvblN0cik7XG4gICAgICAgIGRlbGV0ZSBzY2hlbWFzW2tleVJlZl07XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBfYWRkU2NoZW1hKHNjaGVtYSwgc2tpcFZhbGlkYXRpb24sIG1ldGEsIHNob3VsZEFkZFNjaGVtYSkge1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hICE9ICdvYmplY3QnKSB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSBzaG91bGQgYmUgb2JqZWN0Jyk7XG4gICAgdmFyIGpzb25TdHIgPSBzdGFibGVTdHJpbmdpZnkoc2NoZW1hKTtcbiAgICB2YXIgY2FjaGVkID0gc2VsZi5fY2FjaGUuZ2V0KGpzb25TdHIpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBzaG91bGRBZGRTY2hlbWEgPSBzaG91bGRBZGRTY2hlbWEgfHwgc2VsZi5fb3B0cy5hZGRVc2VkU2NoZW1hICE9PSBmYWxzZTtcblxuICAgIHZhciBpZCA9IHJlc29sdmUubm9ybWFsaXplSWQoc2NoZW1hLmlkKTtcbiAgICBpZiAoaWQgJiYgc2hvdWxkQWRkU2NoZW1hKSBjaGVja1VuaXF1ZShpZCk7XG5cbiAgICB2YXIgd2lsbFZhbGlkYXRlID0gc2VsZi5fb3B0cy52YWxpZGF0ZVNjaGVtYSAhPT0gZmFsc2UgJiYgIXNraXBWYWxpZGF0aW9uO1xuICAgIHZhciByZWN1cnNpdmVNZXRhO1xuICAgIGlmICh3aWxsVmFsaWRhdGUgJiYgIShyZWN1cnNpdmVNZXRhID0gc2NoZW1hLmlkICYmIHNjaGVtYS5pZCA9PSBzY2hlbWEuJHNjaGVtYSkpXG4gICAgICB2YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gICAgdmFyIGxvY2FsUmVmcyA9IHJlc29sdmUuaWRzLmNhbGwoc2VsZiwgc2NoZW1hKTtcblxuICAgIHZhciBzY2hlbWFPYmogPSBuZXcgU2NoZW1hT2JqZWN0KHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIHNjaGVtYTogc2NoZW1hLFxuICAgICAgbG9jYWxSZWZzOiBsb2NhbFJlZnMsXG4gICAgICBqc29uU3RyOiBqc29uU3RyLFxuICAgICAgbWV0YTogbWV0YVxuICAgIH0pO1xuXG4gICAgaWYgKGlkWzBdICE9ICcjJyAmJiBzaG91bGRBZGRTY2hlbWEpIHNlbGYuX3JlZnNbaWRdID0gc2NoZW1hT2JqO1xuICAgIHNlbGYuX2NhY2hlLnB1dChqc29uU3RyLCBzY2hlbWFPYmopO1xuXG4gICAgaWYgKHdpbGxWYWxpZGF0ZSAmJiByZWN1cnNpdmVNZXRhKSB2YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gICAgcmV0dXJuIHNjaGVtYU9iajtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gX2NvbXBpbGUoc2NoZW1hT2JqLCByb290KSB7XG4gICAgaWYgKHNjaGVtYU9iai5jb21waWxpbmcpIHtcbiAgICAgIHNjaGVtYU9iai52YWxpZGF0ZSA9IGNhbGxWYWxpZGF0ZTtcbiAgICAgIGNhbGxWYWxpZGF0ZS5zY2hlbWEgPSBzY2hlbWFPYmouc2NoZW1hO1xuICAgICAgY2FsbFZhbGlkYXRlLmVycm9ycyA9IG51bGw7XG4gICAgICBjYWxsVmFsaWRhdGUucm9vdCA9IHJvb3QgPyByb290IDogY2FsbFZhbGlkYXRlO1xuICAgICAgaWYgKHNjaGVtYU9iai5zY2hlbWEuJGFzeW5jID09PSB0cnVlKVxuICAgICAgICBjYWxsVmFsaWRhdGUuJGFzeW5jID0gdHJ1ZTtcbiAgICAgIHJldHVybiBjYWxsVmFsaWRhdGU7XG4gICAgfVxuICAgIHNjaGVtYU9iai5jb21waWxpbmcgPSB0cnVlO1xuXG4gICAgdmFyIGN1cnJlbnRPcHRzO1xuICAgIGlmIChzY2hlbWFPYmoubWV0YSkge1xuICAgICAgY3VycmVudE9wdHMgPSBzZWxmLl9vcHRzO1xuICAgICAgc2VsZi5fb3B0cyA9IHNlbGYuX21ldGFPcHRzO1xuICAgIH1cblxuICAgIHZhciB2O1xuICAgIHRyeSB7IHYgPSBjb21waWxlU2NoZW1hLmNhbGwoc2VsZiwgc2NoZW1hT2JqLnNjaGVtYSwgcm9vdCwgc2NoZW1hT2JqLmxvY2FsUmVmcyk7IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHNjaGVtYU9iai5jb21waWxpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChzY2hlbWFPYmoubWV0YSkgc2VsZi5fb3B0cyA9IGN1cnJlbnRPcHRzO1xuICAgIH1cblxuICAgIHNjaGVtYU9iai52YWxpZGF0ZSA9IHY7XG4gICAgc2NoZW1hT2JqLnJlZnMgPSB2LnJlZnM7XG4gICAgc2NoZW1hT2JqLnJlZlZhbCA9IHYucmVmVmFsO1xuICAgIHNjaGVtYU9iai5yb290ID0gdi5yb290O1xuICAgIHJldHVybiB2O1xuXG5cbiAgICBmdW5jdGlvbiBjYWxsVmFsaWRhdGUoKSB7XG4gICAgICB2YXIgX3ZhbGlkYXRlID0gc2NoZW1hT2JqLnZhbGlkYXRlO1xuICAgICAgdmFyIHJlc3VsdCA9IF92YWxpZGF0ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgY2FsbFZhbGlkYXRlLmVycm9ycyA9IF92YWxpZGF0ZS5lcnJvcnM7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYXJyYXkgb2YgZXJyb3IgbWVzc2FnZSBvYmplY3RzIHRvIHN0cmluZ1xuICAgKiBAcGFyYW0gIHtBcnJheTxPYmplY3Q+fSBlcnJvcnMgb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMsIGlmIG5vdCBwYXNzZWQgZXJyb3JzIGZyb20gdGhlIGluc3RhbmNlIGFyZSB1c2VkLlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnMgb3B0aW9uYWwgb3B0aW9ucyB3aXRoIHByb3BlcnRpZXMgYHNlcGFyYXRvcmAgYW5kIGBkYXRhVmFyYC5cbiAgICogQHJldHVybiB7U3RyaW5nfSBodW1hbiByZWFkYWJsZSBzdHJpbmcgd2l0aCBhbGwgZXJyb3JzIGRlc2NyaXB0aW9uc1xuICAgKi9cbiAgZnVuY3Rpb24gZXJyb3JzVGV4dChlcnJvcnMsIG9wdGlvbnMpIHtcbiAgICBlcnJvcnMgPSBlcnJvcnMgfHwgc2VsZi5lcnJvcnM7XG4gICAgaWYgKCFlcnJvcnMpIHJldHVybiAnTm8gZXJyb3JzJztcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgc2VwYXJhdG9yID0gb3B0aW9ucy5zZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsICcgOiBvcHRpb25zLnNlcGFyYXRvcjtcbiAgICB2YXIgZGF0YVZhciA9IG9wdGlvbnMuZGF0YVZhciA9PT0gdW5kZWZpbmVkID8gJ2RhdGEnIDogb3B0aW9ucy5kYXRhVmFyO1xuXG4gICAgdmFyIHRleHQgPSAnJztcbiAgICBmb3IgKHZhciBpPTA7IGk8ZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZSA9IGVycm9yc1tpXTtcbiAgICAgIGlmIChlKSB0ZXh0ICs9IGRhdGFWYXIgKyBlLmRhdGFQYXRoICsgJyAnICsgZS5tZXNzYWdlICsgc2VwYXJhdG9yO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dC5zbGljZSgwLCAtc2VwYXJhdG9yLmxlbmd0aCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBZGQgY3VzdG9tIGZvcm1hdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBmb3JtYXQgbmFtZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB8RnVuY3Rpb259IGZvcm1hdCBzdHJpbmcgaXMgY29udmVydGVkIHRvIFJlZ0V4cDsgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBib29sZWFuICh0cnVlIHdoZW4gdmFsaWQpXG4gICAqL1xuICBmdW5jdGlvbiBhZGRGb3JtYXQobmFtZSwgZm9ybWF0KSB7XG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgPT0gJ3N0cmluZycpIGZvcm1hdCA9IG5ldyBSZWdFeHAoZm9ybWF0KTtcbiAgICBzZWxmLl9mb3JtYXRzW25hbWVdID0gZm9ybWF0O1xuICB9XG5cblxuICBmdW5jdGlvbiBhZGREcmFmdDRNZXRhU2NoZW1hKCkge1xuICAgIGlmIChzZWxmLl9vcHRzLm1ldGEgIT09IGZhbHNlKSB7XG4gICAgICB2YXIgbWV0YVNjaGVtYSA9IHJlcXVpcmUoJy4vcmVmcy9qc29uLXNjaGVtYS1kcmFmdC0wNC5qc29uJyk7XG4gICAgICBhZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCB0cnVlKTtcbiAgICAgIHNlbGYuX3JlZnNbJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hJ10gPSBNRVRBX1NDSEVNQV9JRDtcbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGFkZEluaXRpYWxTY2hlbWFzKCkge1xuICAgIHZhciBvcHRzU2NoZW1hcyA9IHNlbGYuX29wdHMuc2NoZW1hcztcbiAgICBpZiAoIW9wdHNTY2hlbWFzKSByZXR1cm47XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0c1NjaGVtYXMpKSBhZGRTY2hlbWEob3B0c1NjaGVtYXMpO1xuICAgIGVsc2UgZm9yICh2YXIga2V5IGluIG9wdHNTY2hlbWFzKSBhZGRTY2hlbWEob3B0c1NjaGVtYXNba2V5XSwga2V5KTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gYWRkSW5pdGlhbEZvcm1hdHMoKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBzZWxmLl9vcHRzLmZvcm1hdHMpIHtcbiAgICAgIHZhciBmb3JtYXQgPSBzZWxmLl9vcHRzLmZvcm1hdHNbbmFtZV07XG4gICAgICBhZGRGb3JtYXQobmFtZSwgZm9ybWF0KTtcbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGNoZWNrVW5pcXVlKGlkKSB7XG4gICAgaWYgKHNlbGYuX3NjaGVtYXNbaWRdIHx8IHNlbGYuX3JlZnNbaWRdKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzY2hlbWEgd2l0aCBrZXkgb3IgaWQgXCInICsgaWQgKyAnXCIgYWxyZWFkeSBleGlzdHMnKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gZ2V0TWV0YVNjaGVtYU9wdGlvbnMoKSB7XG4gICAgdmFyIG1ldGFPcHRzID0gdXRpbC5jb3B5KHNlbGYuX29wdHMpO1xuICAgIGZvciAodmFyIGk9MDsgaTxNRVRBX0lHTk9SRV9PUFRJT05TLmxlbmd0aDsgaSsrKVxuICAgICAgZGVsZXRlIG1ldGFPcHRzW01FVEFfSUdOT1JFX09QVElPTlNbaV1dO1xuICAgIHJldHVybiBtZXRhT3B0cztcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0dXA6IHNldHVwQXN5bmMsXG4gIGNvbXBpbGU6IGNvbXBpbGVBc3luY1xufTtcblxuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vY29tcGlsZS91dGlsJyk7XG5cbnZhciBBU1lOQyA9IHtcbiAgJyonOiBjaGVja0dlbmVyYXRvcnMsXG4gICdjbyonOiBjaGVja0dlbmVyYXRvcnMsXG4gICdlczcnOiBjaGVja0FzeW5jRnVuY3Rpb25cbn07XG5cbnZhciBUUkFOU1BJTEUgPSB7XG4gICdub2RlbnQnOiBnZXROb2RlbnQsXG4gICdyZWdlbmVyYXRvcic6IGdldFJlZ2VuZXJhdG9yXG59O1xuXG52YXIgTU9ERVMgPSBbXG4gIHsgYXN5bmM6ICdjbyonIH0sXG4gIHsgYXN5bmM6ICdlczcnLCB0cmFuc3BpbGU6ICdub2RlbnQnIH0sXG4gIHsgYXN5bmM6ICdjbyonLCB0cmFuc3BpbGU6ICdyZWdlbmVyYXRvcicgfVxuXTtcblxuXG52YXIgcmVnZW5lcmF0b3IsIG5vZGVudDtcblxuXG5mdW5jdGlvbiBzZXR1cEFzeW5jKG9wdHMsIHJlcXVpcmVkKSB7XG4gIGlmIChyZXF1aXJlZCAhPT0gZmFsc2UpIHJlcXVpcmVkID0gdHJ1ZTtcbiAgdmFyIGFzeW5jID0gb3B0cy5hc3luY1xuICAgICwgdHJhbnNwaWxlID0gb3B0cy50cmFuc3BpbGVcbiAgICAsIGNoZWNrO1xuXG4gIHN3aXRjaCAodHlwZW9mIHRyYW5zcGlsZSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICB2YXIgZ2V0ID0gVFJBTlNQSUxFW3RyYW5zcGlsZV07XG4gICAgICBpZiAoIWdldCkgdGhyb3cgbmV3IEVycm9yKCdiYWQgdHJhbnNwaWxlcjogJyArIHRyYW5zcGlsZSk7XG4gICAgICByZXR1cm4gKG9wdHMuX3RyYW5zcGlsZUZ1bmMgPSBnZXQob3B0cywgcmVxdWlyZWQpKTtcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgaWYgKHR5cGVvZiBhc3luYyA9PSAnc3RyaW5nJykge1xuICAgICAgICBjaGVjayA9IEFTWU5DW2FzeW5jXTtcbiAgICAgICAgaWYgKCFjaGVjaykgdGhyb3cgbmV3IEVycm9yKCdiYWQgYXN5bmMgbW9kZTogJyArIGFzeW5jKTtcbiAgICAgICAgcmV0dXJuIChvcHRzLnRyYW5zcGlsZSA9IGNoZWNrKG9wdHMsIHJlcXVpcmVkKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGk9MDsgaTxNT0RFUy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgX29wdHMgPSBNT0RFU1tpXTtcbiAgICAgICAgaWYgKHNldHVwQXN5bmMoX29wdHMsIGZhbHNlKSkge1xuICAgICAgICAgIHV0aWwuY29weShfb3B0cywgb3B0cyk7XG4gICAgICAgICAgcmV0dXJuIG9wdHMudHJhbnNwaWxlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZW5lcmF0b3JzLCBub2RlbnQgYW5kIHJlZ2VuZXJhdG9yIGFyZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgcmV0dXJuIChvcHRzLl90cmFuc3BpbGVGdW5jID0gb3B0cy50cmFuc3BpbGUpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB0cmFuc3BpbGVyOiAnICsgdHJhbnNwaWxlKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNoZWNrR2VuZXJhdG9ycyhvcHRzLCByZXF1aXJlZCkge1xuICAvKiBqc2hpbnQgZXZpbDogdHJ1ZSAqL1xuICB0cnkge1xuICAgIChuZXcgRnVuY3Rpb24oJyhmdW5jdGlvbiooKXt9KSgpJykpKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHJlcXVpcmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2dlbmVyYXRvcnMgbm90IHN1cHBvcnRlZCcpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gY2hlY2tBc3luY0Z1bmN0aW9uKG9wdHMsIHJlcXVpcmVkKSB7XG4gIC8qIGpzaGludCBldmlsOiB0cnVlICovXG4gIHRyeSB7XG4gICAgKG5ldyBGdW5jdGlvbignKGFzeW5jIGZ1bmN0aW9uKCl7fSkoKScpKSgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZSkge1xuICAgIGlmIChyZXF1aXJlZCkgdGhyb3cgbmV3IEVycm9yKCdlczcgYXN5bmMgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGdldFJlZ2VuZXJhdG9yKG9wdHMsIHJlcXVpcmVkKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFyZWdlbmVyYXRvcikge1xuICAgICAgdmFyIG5hbWUgPSAncmVnZW5lcmF0b3InO1xuICAgICAgcmVnZW5lcmF0b3IgPSByZXF1aXJlKG5hbWUpO1xuICAgICAgcmVnZW5lcmF0b3IucnVudGltZSgpO1xuICAgIH1cbiAgICBpZiAoIW9wdHMuYXN5bmMgfHwgb3B0cy5hc3luYyA9PT0gdHJ1ZSlcbiAgICAgIG9wdHMuYXN5bmMgPSAnZXM3JztcbiAgICByZXR1cm4gcmVnZW5lcmF0b3JUcmFuc3BpbGU7XG4gIH0gY2F0Y2goZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHJlcXVpcmVkKSB0aHJvdyBuZXcgRXJyb3IoJ3JlZ2VuZXJhdG9yIG5vdCBhdmFpbGFibGUnKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHJlZ2VuZXJhdG9yVHJhbnNwaWxlKGNvZGUpIHtcbiAgcmV0dXJuIHJlZ2VuZXJhdG9yLmNvbXBpbGUoY29kZSkuY29kZTtcbn1cblxuXG5mdW5jdGlvbiBnZXROb2RlbnQob3B0cywgcmVxdWlyZWQpIHtcbiAgLyoganNoaW50IGV2aWw6IHRydWUgKi9cbiAgdHJ5IHtcbiAgICBpZiAoIW5vZGVudCkge1xuICAgICAgdmFyIG5hbWUgPSAnbm9kZW50JztcbiAgICAgIG5vZGVudCA9IHJlcXVpcmUobmFtZSkoeyBsb2c6IGZhbHNlLCBkb250SW5zdGFsbFJlcXVpcmVIb29rOiB0cnVlIH0pO1xuICAgIH1cbiAgICBpZiAob3B0cy5hc3luYyAhPSAnZXM3Jykge1xuICAgICAgaWYgKG9wdHMuYXN5bmMgJiYgb3B0cy5hc3luYyAhPT0gdHJ1ZSkgY29uc29sZS53YXJuKCdub2RlbnQgdHJhbnNwaWxlcyBvbmx5IGVzNyBhc3luYyBmdW5jdGlvbnMnKTtcbiAgICAgIG9wdHMuYXN5bmMgPSAnZXM3JztcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVudFRyYW5zcGlsZTtcbiAgfSBjYXRjaChlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAocmVxdWlyZWQpIHRocm93IG5ldyBFcnJvcignbm9kZW50IG5vdCBhdmFpbGFibGUnKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIG5vZGVudFRyYW5zcGlsZShjb2RlKSB7XG4gIHJldHVybiBub2RlbnQuY29tcGlsZShjb2RlLCAnJywgeyBwcm9taXNlczogdHJ1ZSwgc291cmNlbWFwOiBmYWxzZSB9KS5jb2RlO1xufVxuXG5cbi8qKlxuICogQ3JlYXRlcyB2YWxpZGF0aW5nIGZ1bmN0aW9uIGZvciBwYXNzZWQgc2NoZW1hIHdpdGggYXN5bmNocm9ub3VzIGxvYWRpbmcgb2YgbWlzc2luZyBzY2hlbWFzLlxuICogYGxvYWRTY2hlbWFgIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgc2NoZW1hIHVyaSBhbmQgbm9kZS1zdHlsZSBjYWxsYmFjay5cbiAqIEB0aGlzICBBanZcbiAqIEBwYXJhbSB7T2JqZWN0fSAgIHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBub2RlLXN0eWxlIGNhbGxiYWNrLCBpdCBpcyBhbHdheXMgY2FsbGVkIHdpdGggMiBwYXJhbWV0ZXJzOiBlcnJvciAob3IgbnVsbCkgYW5kIHZhbGlkYXRpbmcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVBc3luYyhzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgc2NoZW1hT2JqO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRyeSB7XG4gICAgc2NoZW1hT2JqID0gdGhpcy5fYWRkU2NoZW1hKHNjaGVtYSk7XG4gIH0gY2F0Y2goZSkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKGUpOyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHNjaGVtYU9iai52YWxpZGF0ZSkge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKG51bGwsIHNjaGVtYU9iai52YWxpZGF0ZSk7IH0pO1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fb3B0cy5sb2FkU2NoZW1hICE9ICdmdW5jdGlvbicpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMubG9hZFNjaGVtYSBzaG91bGQgYmUgYSBmdW5jdGlvbicpO1xuICAgIF9jb21waWxlQXN5bmMoc2NoZW1hLCBjYWxsYmFjaywgdHJ1ZSk7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIF9jb21waWxlQXN5bmMoc2NoZW1hLCBjYWxsYmFjaywgZmlyc3RDYWxsKSB7XG4gICAgdmFyIHZhbGlkYXRlO1xuICAgIHRyeSB7IHZhbGlkYXRlID0gc2VsZi5jb21waWxlKHNjaGVtYSk7IH1cbiAgICBjYXRjaChlKSB7XG4gICAgICBpZiAoZS5taXNzaW5nU2NoZW1hKSBsb2FkTWlzc2luZ1NjaGVtYShlKTtcbiAgICAgIGVsc2UgZGVmZXJDYWxsYmFjayhlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGVmZXJDYWxsYmFjayhudWxsLCB2YWxpZGF0ZSk7XG5cbiAgICBmdW5jdGlvbiBsb2FkTWlzc2luZ1NjaGVtYShlKSB7XG4gICAgICB2YXIgcmVmID0gZS5taXNzaW5nU2NoZW1hO1xuICAgICAgaWYgKHNlbGYuX3JlZnNbcmVmXSB8fCBzZWxmLl9zY2hlbWFzW3JlZl0pXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ1NjaGVtYSAnICsgcmVmICsgJyBpcyBsb2FkZWQgYnV0ICcgKyBlLm1pc3NpbmdSZWYgKyAnIGNhbm5vdCBiZSByZXNvbHZlZCcpKTtcbiAgICAgIHZhciBfY2FsbGJhY2tzID0gc2VsZi5fbG9hZGluZ1NjaGVtYXNbcmVmXTtcbiAgICAgIGlmIChfY2FsbGJhY2tzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgX2NhbGxiYWNrcyA9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgIHNlbGYuX2xvYWRpbmdTY2hlbWFzW3JlZl0gPSBbX2NhbGxiYWNrcywgc2NoZW1hTG9hZGVkXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIF9jYWxsYmFja3NbX2NhbGxiYWNrcy5sZW5ndGhdID0gc2NoZW1hTG9hZGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5fbG9hZGluZ1NjaGVtYXNbcmVmXSA9IHNjaGVtYUxvYWRlZDtcbiAgICAgICAgc2VsZi5fb3B0cy5sb2FkU2NoZW1hKHJlZiwgZnVuY3Rpb24gKGVyciwgc2NoKSB7XG4gICAgICAgICAgdmFyIF9jYWxsYmFja3MgPSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdO1xuICAgICAgICAgIGRlbGV0ZSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdO1xuICAgICAgICAgIGlmICh0eXBlb2YgX2NhbGxiYWNrcyA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBfY2FsbGJhY2tzKGVyciwgc2NoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPF9jYWxsYmFja3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgIF9jYWxsYmFja3NbaV0oZXJyLCBzY2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNjaGVtYUxvYWRlZChlcnIsIHNjaCkge1xuICAgICAgICBpZiAoZXJyKSByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgaWYgKCEoc2VsZi5fcmVmc1tyZWZdIHx8IHNlbGYuX3NjaGVtYXNbcmVmXSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2VsZi5hZGRTY2hlbWEoc2NoLCByZWYpO1xuICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9jb21waWxlQXN5bmMoc2NoZW1hLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmZXJDYWxsYmFjayhlcnIsIHZhbGlkYXRlKSB7XG4gICAgICBpZiAoZmlyc3RDYWxsKSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhlcnIsIHZhbGlkYXRlKTsgfSk7XG4gICAgICBlbHNlIHJldHVybiBjYWxsYmFjayhlcnIsIHZhbGlkYXRlKTtcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuXG52YXIgQ2FjaGUgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENhY2hlKCkge1xuICB0aGlzLl9jYWNoZSA9IHt9O1xufTtcblxuXG5DYWNoZS5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gQ2FjaGVfcHV0KGtleSwgdmFsdWUpIHtcbiAgdGhpcy5fY2FjaGVba2V5XSA9IHZhbHVlO1xufTtcblxuXG5DYWNoZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gQ2FjaGVfZ2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fY2FjaGVba2V5XTtcbn07XG5cblxuQ2FjaGUucHJvdG90eXBlLmRlbCA9IGZ1bmN0aW9uIENhY2hlX2RlbChrZXkpIHtcbiAgZGVsZXRlIHRoaXMuX2NhY2hlW2tleV07XG59O1xuXG5cbkNhY2hlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIENhY2hlX2NsZWFyKCkge1xuICB0aGlzLl9jYWNoZSA9IHt9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy9hbGwgcmVxdWlyZXMgbXVzdCBiZSBleHBsaWNpdCBiZWNhdXNlIGJyb3dzZXJpZnkgd29uJ3Qgd29yayB3aXRoIGR5bmFtaWMgcmVxdWlyZXNcbm1vZHVsZS5leHBvcnRzID0ge1xuICAnJHJlZic6IHJlcXVpcmUoJy4uL2RvdGpzL3JlZicpLFxuICBhbGxPZjogcmVxdWlyZSgnLi4vZG90anMvYWxsT2YnKSxcbiAgYW55T2Y6IHJlcXVpcmUoJy4uL2RvdGpzL2FueU9mJyksXG4gIGRlcGVuZGVuY2llczogcmVxdWlyZSgnLi4vZG90anMvZGVwZW5kZW5jaWVzJyksXG4gICdlbnVtJzogcmVxdWlyZSgnLi4vZG90anMvZW51bScpLFxuICBmb3JtYXQ6IHJlcXVpcmUoJy4uL2RvdGpzL2Zvcm1hdCcpLFxuICBpdGVtczogcmVxdWlyZSgnLi4vZG90anMvaXRlbXMnKSxcbiAgbWF4aW11bTogcmVxdWlyZSgnLi4vZG90anMvX2xpbWl0JyksXG4gIG1pbmltdW06IHJlcXVpcmUoJy4uL2RvdGpzL19saW1pdCcpLFxuICBtYXhJdGVtczogcmVxdWlyZSgnLi4vZG90anMvX2xpbWl0SXRlbXMnKSxcbiAgbWluSXRlbXM6IHJlcXVpcmUoJy4uL2RvdGpzL19saW1pdEl0ZW1zJyksXG4gIG1heExlbmd0aDogcmVxdWlyZSgnLi4vZG90anMvX2xpbWl0TGVuZ3RoJyksXG4gIG1pbkxlbmd0aDogcmVxdWlyZSgnLi4vZG90anMvX2xpbWl0TGVuZ3RoJyksXG4gIG1heFByb3BlcnRpZXM6IHJlcXVpcmUoJy4uL2RvdGpzL19saW1pdFByb3BlcnRpZXMnKSxcbiAgbWluUHJvcGVydGllczogcmVxdWlyZSgnLi4vZG90anMvX2xpbWl0UHJvcGVydGllcycpLFxuICBtdWx0aXBsZU9mOiByZXF1aXJlKCcuLi9kb3Rqcy9tdWx0aXBsZU9mJyksXG4gIG5vdDogcmVxdWlyZSgnLi4vZG90anMvbm90JyksXG4gIG9uZU9mOiByZXF1aXJlKCcuLi9kb3Rqcy9vbmVPZicpLFxuICBwYXR0ZXJuOiByZXF1aXJlKCcuLi9kb3Rqcy9wYXR0ZXJuJyksXG4gIHByb3BlcnRpZXM6IHJlcXVpcmUoJy4uL2RvdGpzL3Byb3BlcnRpZXMnKSxcbiAgcmVxdWlyZWQ6IHJlcXVpcmUoJy4uL2RvdGpzL3JlcXVpcmVkJyksXG4gIHVuaXF1ZUl0ZW1zOiByZXF1aXJlKCcuLi9kb3Rqcy91bmlxdWVJdGVtcycpLFxuICB2YWxpZGF0ZTogcmVxdWlyZSgnLi4vZG90anMvdmFsaWRhdGUnKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyplc2xpbnQgY29tcGxleGl0eTogMCovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXF1YWwoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG5cbiAgdmFyIGFyckEgPSBBcnJheS5pc0FycmF5KGEpXG4gICAgLCBhcnJCID0gQXJyYXkuaXNBcnJheShiKVxuICAgICwgaTtcblxuICBpZiAoYXJyQSAmJiBhcnJCKSB7XG4gICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspXG4gICAgICBpZiAoIWVxdWFsKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoYXJyQSAhPSBhcnJCKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdmFyIGRhdGVBID0gYSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICwgZGF0ZUIgPSBiIGluc3RhbmNlb2YgRGF0ZTtcbiAgICBpZiAoZGF0ZUEgJiYgZGF0ZUIpIHJldHVybiBhLmdldFRpbWUoKSA9PSBiLmdldFRpbWUoKTtcbiAgICBpZiAoZGF0ZUEgIT0gZGF0ZUIpIHJldHVybiBmYWxzZTtcblxuICAgIHZhciByZWdleHBBID0gYSBpbnN0YW5jZW9mIFJlZ0V4cFxuICAgICAgLCByZWdleHBCID0gYiBpbnN0YW5jZW9mIFJlZ0V4cDtcbiAgICBpZiAocmVnZXhwQSAmJiByZWdleHBCKSByZXR1cm4gYS50b1N0cmluZygpID09IGIudG9TdHJpbmcoKTtcbiAgICBpZiAocmVnZXhwQSAhPSByZWdleHBCKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIGtleXNbaV0pKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKylcbiAgICAgIGlmKCFlcXVhbChhW2tleXNbaV1dLCBiW2tleXNbaV1dKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgREFURSA9IC9eXFxkXFxkXFxkXFxkLShcXGRcXGQpLShcXGRcXGQpJC87XG52YXIgREFZUyA9IFswLDMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtcbnZhciBUSU1FID0gL14oXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKShcXC5cXGQrKT8oenxbKy1dXFxkXFxkOlxcZFxcZCk/JC9pO1xudmFyIEhPU1ROQU1FID0gL15bYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcXC5bYS16MC05XSg/OlstMC05YS16XXswLDYxfVswLTlhLXpdKT8pKiQvaTtcbnZhciBVUkkgPSAvXig/OlthLXpdW2EtejAtOStcXC0uXSo6KT8oPzpcXC8/XFwvKD86KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol18JVswLTlhLWZdezJ9KSpAKT8oPzpcXFsoPzooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7Nn18OjooPzpbMC05YS1mXXsxLDR9Oil7NX18KD86WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7NH18KD86KD86WzAtOWEtZl17MSw0fTopezAsMX1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXszfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwyfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezJ9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDN9WzAtOWEtZl17MSw0fSk/OjpbMC05YS1mXXsxLDR9OnwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw0fVswLTlhLWZdezEsNH0pPzo6KSg/OlswLTlhLWZdezEsNH06WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykpfCg/Oig/OlswLTlhLWZdezEsNH06KXswLDV9WzAtOWEtZl17MSw0fSk/OjpbMC05YS1mXXsxLDR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDZ9WzAtOWEtZl17MSw0fSk/OjopfFtWdl1bMC05YS1mXStcXC5bYS16MC05XFwtLl9+ISQmJygpKissOz06XSspXFxdfCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KXwoPzpbYS16MC05XFwtLl9+ISQmJygpKissOz1dfCVbMC05YS1mXXsyfSkqKSg/OjpcXGQqKT8oPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSopKnxcXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSsoPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSopKik/fCg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqKSg/OlxcPyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXFwvP118JVswLTlhLWZdezJ9KSopPyg/OlxcIyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXFwvP118JVswLTlhLWZdezJ9KSopPyQvaTtcbnZhciBVVUlEID0gL14oPzp1cm5cXDp1dWlkXFw6KT9bMC05YS1mXXs4fS0oPzpbMC05YS1mXXs0fS0pezN9WzAtOWEtZl17MTJ9JC9pO1xudmFyIEpTT05fUE9JTlRFUiA9IC9eKD86XFwvKD86W15+XFwvXXx+MHx+MSkqKSokfF5cXCMoPzpcXC8oPzpbYS16MC05X1xcLVxcLiEkJicoKSorLDs6PUBdfCVbMC05YS1mXXsyfXx+MHx+MSkqKSokL2k7XG52YXIgUkVMQVRJVkVfSlNPTl9QT0lOVEVSID0gL14oPzowfFsxLTldWzAtOV0qKSg/OlxcI3woPzpcXC8oPzpbXn5cXC9dfH4wfH4xKSopKikkLztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvcm1hdHM7XG5cbmZ1bmN0aW9uIGZvcm1hdHMobW9kZSkge1xuICBtb2RlID0gbW9kZSA9PSAnZnVsbCcgPyAnZnVsbCcgOiAnZmFzdCc7XG4gIHZhciBmb3JtYXREZWZzID0gdXRpbC5jb3B5KGZvcm1hdHNbbW9kZV0pO1xuICBmb3IgKHZhciBmTmFtZSBpbiBmb3JtYXRzLmNvbXBhcmUpIHtcbiAgICBmb3JtYXREZWZzW2ZOYW1lXSA9IHtcbiAgICAgIHZhbGlkYXRlOiBmb3JtYXREZWZzW2ZOYW1lXSxcbiAgICAgIGNvbXBhcmU6IGZvcm1hdHMuY29tcGFyZVtmTmFtZV1cbiAgICB9O1xuICB9XG4gIHJldHVybiBmb3JtYXREZWZzO1xufVxuXG5cbmZvcm1hdHMuZmFzdCA9IHtcbiAgLy8gZGF0ZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICBkYXRlOiAvXlxcZFxcZFxcZFxcZC1bMC0xXVxcZC1bMC0zXVxcZCQvLFxuICAvLyBkYXRlLXRpbWU6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgdGltZTogL15bMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZCg/OlxcLlxcZCspPyg/Onp8WystXVxcZFxcZDpcXGRcXGQpPyQvaSxcbiAgJ2RhdGUtdGltZSc6IC9eXFxkXFxkXFxkXFxkLVswLTFdXFxkLVswLTNdXFxkW3RcXHNdWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGQoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQ6XFxkXFxkKSQvaSxcbiAgLy8gdXJpOiBodHRwczovL2dpdGh1Yi5jb20vbWFmaW50b3NoL2lzLW15LWpzb24tdmFsaWQvYmxvYi9tYXN0ZXIvZm9ybWF0cy5qc1xuICB1cmk6IC9eKD86W2Etel1bYS16MC05Ky0uXSopPyg/OlxcOnxcXC8pXFwvP1teXFxzXSokL2ksXG4gIC8vIGVtYWlsIChzb3VyY2VzIGZyb20ganNlbiB2YWxpZGF0b3IpOlxuICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIwMTMyMy91c2luZy1hLXJlZ3VsYXItZXhwcmVzc2lvbi10by12YWxpZGF0ZS1hbi1lbWFpbC1hZGRyZXNzI2Fuc3dlci04ODI5MzYzXG4gIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2Zvcm1zLmh0bWwjdmFsaWQtZS1tYWlsLWFkZHJlc3MgKHNlYXJjaCBmb3IgJ3dpbGxmdWwgdmlvbGF0aW9uJylcbiAgZW1haWw6IC9eW2EtejAtOS4hIyQlJicqK1xcLz0/Xl9ge3x9fi1dK0BbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcXC5bYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8pKiQvaSxcbiAgaG9zdG5hbWU6IEhPU1ROQU1FLFxuICAvLyBvcHRpbWl6ZWQgaHR0cHM6Ly93d3cuc2FmYXJpYm9va3NvbmxpbmUuY29tL2xpYnJhcnkvdmlldy9yZWd1bGFyLWV4cHJlc3Npb25zLWNvb2tib29rLzk3ODA1OTY4MDI4MzcvY2gwN3MxNi5odG1sXG4gIGlwdjQ6IC9eKD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pJC8sXG4gIC8vIG9wdGltaXplZCBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUzNDk3L3JlZ3VsYXItZXhwcmVzc2lvbi10aGF0LW1hdGNoZXMtdmFsaWQtaXB2Ni1hZGRyZXNzZXNcbiAgaXB2NjogL15cXHMqKD86KD86KD86WzAtOWEtZl17MSw0fTopezd9KD86WzAtOWEtZl17MSw0fXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezZ9KD86OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXs1fSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDJ9KXw6KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXs0fSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDN9KXwoPzooPzo6WzAtOWEtZl17MSw0fSk/Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezN9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsNH0pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDJ9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezJ9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsNX0pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDN9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezF9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsNn0pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDR9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KD86Oig/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDd9KXwoPzooPzo6WzAtOWEtZl17MSw0fSl7MCw1fTooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpKSg/OiUuKyk/XFxzKiQvaSxcbiAgcmVnZXg6IHJlZ2V4LFxuICAvLyB1dWlkOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MTIyXG4gIHV1aWQ6IFVVSUQsXG4gIC8vIEpTT04tcG9pbnRlcjogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDFcbiAgLy8gdXJpIGZyYWdtZW50OiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNhcHBlbmRpeC1BXG4gICdqc29uLXBvaW50ZXInOiBKU09OX1BPSU5URVIsXG4gIC8vIHJlbGF0aXZlIEpTT04tcG9pbnRlcjogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtbHVmZi1yZWxhdGl2ZS1qc29uLXBvaW50ZXItMDBcbiAgJ3JlbGF0aXZlLWpzb24tcG9pbnRlcic6IFJFTEFUSVZFX0pTT05fUE9JTlRFUlxufTtcblxuXG5mb3JtYXRzLmZ1bGwgPSB7XG4gIGRhdGU6IGRhdGUsXG4gIHRpbWU6IHRpbWUsXG4gICdkYXRlLXRpbWUnOiBkYXRlX3RpbWUsXG4gIHVyaTogdXJpLFxuICBlbWFpbDogL15bYS16MC05ISMkJSYnKitcXC89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnJyorXFwvPT9eX2B7fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pPyQvaSxcbiAgaG9zdG5hbWU6IGhvc3RuYW1lLFxuICBpcHY0OiAvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSQvLFxuICBpcHY2OiAvXlxccyooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7N30oPzpbMC05YS1mXXsxLDR9fDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Nn0oPzo6WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezV9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsMn0pfDooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezR9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsM30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KT86KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7M30oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw0fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsMn06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Mn0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw1fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsM306KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw2fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNH06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzo6KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsN30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDV9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpKD86JS4rKT9cXHMqJC9pLFxuICByZWdleDogcmVnZXgsXG4gIHV1aWQ6IFVVSUQsXG4gICdqc29uLXBvaW50ZXInOiBKU09OX1BPSU5URVIsXG4gICdyZWxhdGl2ZS1qc29uLXBvaW50ZXInOiBSRUxBVElWRV9KU09OX1BPSU5URVJcbn07XG5cblxuZm9ybWF0cy5jb21wYXJlID0ge1xuICBkYXRlOiBjb21wYXJlRGF0ZSxcbiAgdGltZTogY29tcGFyZVRpbWUsXG4gICdkYXRlLXRpbWUnOiBjb21wYXJlRGF0ZVRpbWVcbn07XG5cblxuZnVuY3Rpb24gZGF0ZShzdHIpIHtcbiAgLy8gZnVsbC1kYXRlIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChEQVRFKTtcbiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIG1vbnRoID0gK21hdGNoZXNbMV07XG4gIHZhciBkYXkgPSArbWF0Y2hlc1syXTtcbiAgcmV0dXJuIG1vbnRoID49IDEgJiYgbW9udGggPD0gMTIgJiYgZGF5ID49IDEgJiYgZGF5IDw9IERBWVNbbW9udGhdO1xufVxuXG5cbmZ1bmN0aW9uIHRpbWUoc3RyLCBmdWxsKSB7XG4gIHZhciBtYXRjaGVzID0gc3RyLm1hdGNoKFRJTUUpO1xuICBpZiAoIW1hdGNoZXMpIHJldHVybiBmYWxzZTtcblxuICB2YXIgaG91ciA9IG1hdGNoZXNbMV07XG4gIHZhciBtaW51dGUgPSBtYXRjaGVzWzJdO1xuICB2YXIgc2Vjb25kID0gbWF0Y2hlc1szXTtcbiAgdmFyIHRpbWVab25lID0gbWF0Y2hlc1s1XTtcbiAgcmV0dXJuIGhvdXIgPD0gMjMgJiYgbWludXRlIDw9IDU5ICYmIHNlY29uZCA8PSA1OSAmJiAoIWZ1bGwgfHwgdGltZVpvbmUpO1xufVxuXG5cbnZhciBEQVRFX1RJTUVfU0VQQVJBVE9SID0gL3R8XFxzL2k7XG5mdW5jdGlvbiBkYXRlX3RpbWUoc3RyKSB7XG4gIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgdmFyIGRhdGVUaW1lID0gc3RyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICByZXR1cm4gZGF0ZVRpbWUubGVuZ3RoID09IDIgJiYgZGF0ZShkYXRlVGltZVswXSkgJiYgdGltZShkYXRlVGltZVsxXSwgdHJ1ZSk7XG59XG5cblxuZnVuY3Rpb24gaG9zdG5hbWUoc3RyKSB7XG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxMDM0I3NlY3Rpb24tMy41XG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxMTIzI3NlY3Rpb24tMlxuICByZXR1cm4gc3RyLmxlbmd0aCA8PSAyNTUgJiYgSE9TVE5BTUUudGVzdChzdHIpO1xufVxuXG5cbnZhciBOT1RfVVJJX0ZSQUdNRU5UID0gL1xcL3xcXDovO1xuZnVuY3Rpb24gdXJpKHN0cikge1xuICAvLyBodHRwOi8vam1yd2FyZS5jb20vYXJ0aWNsZXMvMjAwOS91cmlfcmVnZXhwL1VSSV9yZWdleC5odG1sICsgb3B0aW9uYWwgcHJvdG9jb2wgKyByZXF1aXJlZCBcIi5cIlxuICByZXR1cm4gTk9UX1VSSV9GUkFHTUVOVC50ZXN0KHN0cikgJiYgVVJJLnRlc3Qoc3RyKTtcbn1cblxuXG5mdW5jdGlvbiByZWdleChzdHIpIHtcbiAgdHJ5IHtcbiAgICBuZXcgUmVnRXhwKHN0cik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVEYXRlKGQxLCBkMikge1xuICBpZiAoIShkMSAmJiBkMikpIHJldHVybjtcbiAgaWYgKGQxID4gZDIpIHJldHVybiAxO1xuICBpZiAoZDEgPCBkMikgcmV0dXJuIC0xO1xuICBpZiAoZDEgPT09IGQyKSByZXR1cm4gMDtcbn1cblxuXG5mdW5jdGlvbiBjb21wYXJlVGltZSh0MSwgdDIpIHtcbiAgaWYgKCEodDEgJiYgdDIpKSByZXR1cm47XG4gIHQxID0gdDEubWF0Y2goVElNRSk7XG4gIHQyID0gdDIubWF0Y2goVElNRSk7XG4gIGlmICghKHQxICYmIHQyKSkgcmV0dXJuO1xuICB0MSA9IHQxWzFdICsgdDFbMl0gKyB0MVszXSArICh0MVs0XXx8JycpO1xuICB0MiA9IHQyWzFdICsgdDJbMl0gKyB0MlszXSArICh0Mls0XXx8JycpO1xuICBpZiAodDEgPiB0MikgcmV0dXJuIDE7XG4gIGlmICh0MSA8IHQyKSByZXR1cm4gLTE7XG4gIGlmICh0MSA9PT0gdDIpIHJldHVybiAwO1xufVxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVEYXRlVGltZShkdDEsIGR0Mikge1xuICBpZiAoIShkdDEgJiYgZHQyKSkgcmV0dXJuO1xuICBkdDEgPSBkdDEuc3BsaXQoREFURV9USU1FX1NFUEFSQVRPUik7XG4gIGR0MiA9IGR0Mi5zcGxpdChEQVRFX1RJTUVfU0VQQVJBVE9SKTtcbiAgdmFyIHJlcyA9IGNvbXBhcmVEYXRlKGR0MVswXSwgZHQyWzBdKTtcbiAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHJldHVybiByZXMgfHwgY29tcGFyZVRpbWUoZHQxWzFdLCBkdDJbMV0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVzb2x2ZSA9IHJlcXVpcmUoJy4vcmVzb2x2ZScpXG4gICwgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG4gICwgc3RhYmxlU3RyaW5naWZ5ID0gcmVxdWlyZSgnanNvbi1zdGFibGUtc3RyaW5naWZ5JylcbiAgLCBhc3luYyA9IHJlcXVpcmUoJy4uL2FzeW5jJyk7XG5cbnZhciBiZWF1dGlmeTtcblxuZnVuY3Rpb24gbG9hZEJlYXV0aWZ5KCl7XG4gIGlmIChiZWF1dGlmeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIG5hbWUgPSAnanMtYmVhdXRpZnknO1xuICAgIHRyeSB7IGJlYXV0aWZ5ID0gcmVxdWlyZShuYW1lKS5qc19iZWF1dGlmeTsgfVxuICAgIGNhdGNoKGUpIHsgYmVhdXRpZnkgPSBmYWxzZTsgfVxuICB9XG59XG5cbnZhciB2YWxpZGF0ZUdlbmVyYXRvciA9IHJlcXVpcmUoJy4uL2RvdGpzL3ZhbGlkYXRlJyk7XG5cbi8qKlxuICogRnVuY3Rpb25zIGJlbG93IGFyZSB1c2VkIGluc2lkZSBjb21waWxlZCB2YWxpZGF0aW9ucyBmdW5jdGlvblxuICovXG5cbnZhciBjbyA9IHJlcXVpcmUoJ2NvJyk7XG52YXIgdWNzMmxlbmd0aCA9IHV0aWwudWNzMmxlbmd0aDtcbnZhciBlcXVhbCA9IHJlcXVpcmUoJy4vZXF1YWwnKTtcblxuLy8gdGhpcyBlcnJvciBpcyB0aHJvd24gYnkgYXN5bmMgc2NoZW1hcyB0byByZXR1cm4gdmFsaWRhdGlvbiBlcnJvcnMgdmlhIGV4Y2VwdGlvblxudmFyIFZhbGlkYXRpb25FcnJvciA9IHJlcXVpcmUoJy4vdmFsaWRhdGlvbl9lcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBpbGU7XG5cblxuLyoqXG4gKiBDb21waWxlcyBzY2hlbWEgdG8gdmFsaWRhdGlvbiBmdW5jdGlvblxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCBvYmplY3Qgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcm9vdCBzY2hlbWEgZm9yIHRoaXMgc2NoZW1hXG4gKiBAcGFyYW0gIHtPYmplY3R9IGxvY2FsUmVmcyB0aGUgaGFzaCBvZiBsb2NhbCByZWZlcmVuY2VzIGluc2lkZSB0aGUgc2NoZW1hIChjcmVhdGVkIGJ5IHJlc29sdmUuaWQpLCB1c2VkIGZvciBpbmxpbmUgcmVzb2x1dGlvblxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBJRCBmb3IgSURzIGluIHRoZSBzY2hlbWFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSB2YWxpZGF0aW9uIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGUoc2NoZW1hLCByb290LCBsb2NhbFJlZnMsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlLCBldmlsOiB0cnVlICovXG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCBvcHRzID0gdGhpcy5fb3B0c1xuICAgICwgcmVmVmFsID0gWyB1bmRlZmluZWQgXVxuICAgICwgcmVmcyA9IHt9XG4gICAgLCBwYXR0ZXJucyA9IFtdXG4gICAgLCBwYXR0ZXJuc0hhc2ggPSB7fVxuICAgICwgZGVmYXVsdHMgPSBbXVxuICAgICwgZGVmYXVsdHNIYXNoID0ge31cbiAgICAsIGN1c3RvbVJ1bGVzID0gW11cbiAgICAsIGtlZXBTb3VyY2VDb2RlID0gb3B0cy5zb3VyY2VDb2RlICE9PSBmYWxzZTtcblxuICByb290ID0gcm9vdCB8fCB7IHNjaGVtYTogc2NoZW1hLCByZWZWYWw6IHJlZlZhbCwgcmVmczogcmVmcyB9O1xuXG4gIHZhciBjID0gY2hlY2tDb21waWxpbmcuY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIGJhc2VJZCk7XG4gIHZhciBjb21waWxhdGlvbiA9IHRoaXMuX2NvbXBpbGF0aW9uc1tjLmluZGV4XTtcbiAgaWYgKGMuY29tcGlsaW5nKSByZXR1cm4gKGNvbXBpbGF0aW9uLmNhbGxWYWxpZGF0ZSA9IGNhbGxWYWxpZGF0ZSk7XG5cbiAgdmFyIGZvcm1hdHMgPSB0aGlzLl9mb3JtYXRzO1xuICB2YXIgUlVMRVMgPSB0aGlzLlJVTEVTO1xuXG4gIHRyeSB7XG4gICAgdmFyIHYgPSBsb2NhbENvbXBpbGUoc2NoZW1hLCByb290LCBsb2NhbFJlZnMsIGJhc2VJZCk7XG4gICAgY29tcGlsYXRpb24udmFsaWRhdGUgPSB2O1xuICAgIHZhciBjdiA9IGNvbXBpbGF0aW9uLmNhbGxWYWxpZGF0ZTtcbiAgICBpZiAoY3YpIHtcbiAgICAgIGN2LnNjaGVtYSA9IHYuc2NoZW1hO1xuICAgICAgY3YuZXJyb3JzID0gbnVsbDtcbiAgICAgIGN2LnJlZnMgPSB2LnJlZnM7XG4gICAgICBjdi5yZWZWYWwgPSB2LnJlZlZhbDtcbiAgICAgIGN2LnJvb3QgPSB2LnJvb3Q7XG4gICAgICBjdi4kYXN5bmMgPSB2LiRhc3luYztcbiAgICAgIGlmIChrZWVwU291cmNlQ29kZSkgY3Yuc291cmNlQ29kZSA9IHYuc291cmNlQ29kZTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH0gZmluYWxseSB7XG4gICAgZW5kQ29tcGlsaW5nLmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FsbFZhbGlkYXRlKCkge1xuICAgIHZhciB2YWxpZGF0ZSA9IGNvbXBpbGF0aW9uLnZhbGlkYXRlO1xuICAgIHZhciByZXN1bHQgPSB2YWxpZGF0ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIGNhbGxWYWxpZGF0ZS5lcnJvcnMgPSB2YWxpZGF0ZS5lcnJvcnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvY2FsQ29tcGlsZShfc2NoZW1hLCBfcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpIHtcbiAgICB2YXIgaXNSb290ID0gIV9yb290IHx8IChfcm9vdCAmJiBfcm9vdC5zY2hlbWEgPT0gX3NjaGVtYSk7XG4gICAgaWYgKF9yb290LnNjaGVtYSAhPSByb290LnNjaGVtYSlcbiAgICAgIHJldHVybiBjb21waWxlLmNhbGwoc2VsZiwgX3NjaGVtYSwgX3Jvb3QsIGxvY2FsUmVmcywgYmFzZUlkKTtcblxuICAgIHZhciAkYXN5bmMgPSBfc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZTtcbiAgICBpZiAoJGFzeW5jICYmICFvcHRzLnRyYW5zcGlsZSkgYXN5bmMuc2V0dXAob3B0cyk7XG5cbiAgICB2YXIgc291cmNlQ29kZSA9IHZhbGlkYXRlR2VuZXJhdG9yKHtcbiAgICAgIGlzVG9wOiB0cnVlLFxuICAgICAgc2NoZW1hOiBfc2NoZW1hLFxuICAgICAgaXNSb290OiBpc1Jvb3QsXG4gICAgICBiYXNlSWQ6IGJhc2VJZCxcbiAgICAgIHJvb3Q6IF9yb290LFxuICAgICAgc2NoZW1hUGF0aDogJycsXG4gICAgICBlcnJTY2hlbWFQYXRoOiAnIycsXG4gICAgICBlcnJvclBhdGg6ICdcIlwiJyxcbiAgICAgIFJVTEVTOiBSVUxFUyxcbiAgICAgIHZhbGlkYXRlOiB2YWxpZGF0ZUdlbmVyYXRvcixcbiAgICAgIHV0aWw6IHV0aWwsXG4gICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgcmVzb2x2ZVJlZjogcmVzb2x2ZVJlZixcbiAgICAgIHVzZVBhdHRlcm46IHVzZVBhdHRlcm4sXG4gICAgICB1c2VEZWZhdWx0OiB1c2VEZWZhdWx0LFxuICAgICAgdXNlQ3VzdG9tUnVsZTogdXNlQ3VzdG9tUnVsZSxcbiAgICAgIG9wdHM6IG9wdHMsXG4gICAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgICAgc2VsZjogc2VsZlxuICAgIH0pO1xuXG4gICAgc291cmNlQ29kZSA9IHZhcnMocmVmVmFsLCByZWZWYWxDb2RlKSArIHZhcnMocGF0dGVybnMsIHBhdHRlcm5Db2RlKVxuICAgICAgICAgICAgICAgICAgICsgdmFycyhkZWZhdWx0cywgZGVmYXVsdENvZGUpICsgdmFycyhjdXN0b21SdWxlcywgY3VzdG9tUnVsZUNvZGUpXG4gICAgICAgICAgICAgICAgICAgKyBzb3VyY2VDb2RlO1xuXG4gICAgaWYgKG9wdHMuYmVhdXRpZnkpIHtcbiAgICAgIGxvYWRCZWF1dGlmeSgpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChiZWF1dGlmeSkgc291cmNlQ29kZSA9IGJlYXV0aWZ5KHNvdXJjZUNvZGUsIG9wdHMuYmVhdXRpZnkpO1xuICAgICAgZWxzZSBjb25zb2xlLmVycm9yKCdcIm5wbSBpbnN0YWxsIGpzLWJlYXV0aWZ5XCIgdG8gdXNlIGJlYXV0aWZ5IG9wdGlvbicpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnXFxuXFxuXFxuICoqKiBcXG4nLCBzb3VyY2VDb2RlKTtcbiAgICB2YXIgdmFsaWRhdGUsIHZhbGlkYXRlQ29kZVxuICAgICAgLCB0cmFuc3BpbGUgPSBvcHRzLl90cmFuc3BpbGVGdW5jO1xuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZUNvZGUgPSAkYXN5bmMgJiYgdHJhbnNwaWxlXG4gICAgICAgICAgICAgICAgICAgICAgPyB0cmFuc3BpbGUoc291cmNlQ29kZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IHNvdXJjZUNvZGU7XG5cbiAgICAgIHZhciBtYWtlVmFsaWRhdGUgPSBuZXcgRnVuY3Rpb24oXG4gICAgICAgICdzZWxmJyxcbiAgICAgICAgJ1JVTEVTJyxcbiAgICAgICAgJ2Zvcm1hdHMnLFxuICAgICAgICAncm9vdCcsXG4gICAgICAgICdyZWZWYWwnLFxuICAgICAgICAnZGVmYXVsdHMnLFxuICAgICAgICAnY3VzdG9tUnVsZXMnLFxuICAgICAgICAnY28nLFxuICAgICAgICAnZXF1YWwnLFxuICAgICAgICAndWNzMmxlbmd0aCcsXG4gICAgICAgICdWYWxpZGF0aW9uRXJyb3InLFxuICAgICAgICB2YWxpZGF0ZUNvZGVcbiAgICAgICk7XG5cbiAgICAgIHZhbGlkYXRlID0gbWFrZVZhbGlkYXRlKFxuICAgICAgICBzZWxmLFxuICAgICAgICBSVUxFUyxcbiAgICAgICAgZm9ybWF0cyxcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcmVmVmFsLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgY3VzdG9tUnVsZXMsXG4gICAgICAgIGNvLFxuICAgICAgICBlcXVhbCxcbiAgICAgICAgdWNzMmxlbmd0aCxcbiAgICAgICAgVmFsaWRhdGlvbkVycm9yXG4gICAgICApO1xuXG4gICAgICByZWZWYWxbMF0gPSB2YWxpZGF0ZTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbXBpbGluZyBzY2hlbWEsIGZ1bmN0aW9uIGNvZGU6JywgdmFsaWRhdGVDb2RlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUuc2NoZW1hID0gX3NjaGVtYTtcbiAgICB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgIHZhbGlkYXRlLnJlZnMgPSByZWZzO1xuICAgIHZhbGlkYXRlLnJlZlZhbCA9IHJlZlZhbDtcbiAgICB2YWxpZGF0ZS5yb290ID0gaXNSb290ID8gdmFsaWRhdGUgOiBfcm9vdDtcbiAgICBpZiAoJGFzeW5jKSB2YWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgIGlmIChrZWVwU291cmNlQ29kZSkgdmFsaWRhdGUuc291cmNlQ29kZSA9IHNvdXJjZUNvZGU7XG4gICAgaWYgKG9wdHMuc291cmNlQ29kZSA9PT0gdHJ1ZSkge1xuICAgICAgdmFsaWRhdGUuc291cmNlID0ge1xuICAgICAgICBwYXR0ZXJuczogcGF0dGVybnMsXG4gICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0c1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGU7XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlUmVmKGJhc2VJZCwgcmVmLCBpc1Jvb3QpIHtcbiAgICByZWYgPSByZXNvbHZlLnVybChiYXNlSWQsIHJlZik7XG4gICAgdmFyIHJlZkluZGV4ID0gcmVmc1tyZWZdO1xuICAgIHZhciBfcmVmVmFsLCByZWZDb2RlO1xuICAgIGlmIChyZWZJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBfcmVmVmFsID0gcmVmVmFsW3JlZkluZGV4XTtcbiAgICAgIHJlZkNvZGUgPSAncmVmVmFsWycgKyByZWZJbmRleCArICddJztcbiAgICAgIHJldHVybiByZXNvbHZlZFJlZihfcmVmVmFsLCByZWZDb2RlKTtcbiAgICB9XG4gICAgaWYgKCFpc1Jvb3QgJiYgcm9vdC5yZWZzKSB7XG4gICAgICB2YXIgcm9vdFJlZklkID0gcm9vdC5yZWZzW3JlZl07XG4gICAgICBpZiAocm9vdFJlZklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgX3JlZlZhbCA9IHJvb3QucmVmVmFsW3Jvb3RSZWZJZF07XG4gICAgICAgIHJlZkNvZGUgPSBhZGRMb2NhbFJlZihyZWYsIF9yZWZWYWwpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWRSZWYoX3JlZlZhbCwgcmVmQ29kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVmQ29kZSA9IGFkZExvY2FsUmVmKHJlZik7XG4gICAgdmFyIHYgPSByZXNvbHZlLmNhbGwoc2VsZiwgbG9jYWxDb21waWxlLCByb290LCByZWYpO1xuICAgIGlmICghdikge1xuICAgICAgdmFyIGxvY2FsU2NoZW1hID0gbG9jYWxSZWZzICYmIGxvY2FsUmVmc1tyZWZdO1xuICAgICAgaWYgKGxvY2FsU2NoZW1hKSB7XG4gICAgICAgIHYgPSByZXNvbHZlLmlubGluZVJlZihsb2NhbFNjaGVtYSwgb3B0cy5pbmxpbmVSZWZzKVxuICAgICAgICAgICAgPyBsb2NhbFNjaGVtYVxuICAgICAgICAgICAgOiBjb21waWxlLmNhbGwoc2VsZiwgbG9jYWxTY2hlbWEsIHJvb3QsIGxvY2FsUmVmcywgYmFzZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodikge1xuICAgICAgcmVwbGFjZUxvY2FsUmVmKHJlZiwgdik7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRSZWYodiwgcmVmQ29kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkTG9jYWxSZWYocmVmLCB2KSB7XG4gICAgdmFyIHJlZklkID0gcmVmVmFsLmxlbmd0aDtcbiAgICByZWZWYWxbcmVmSWRdID0gdjtcbiAgICByZWZzW3JlZl0gPSByZWZJZDtcbiAgICByZXR1cm4gJ3JlZlZhbCcgKyByZWZJZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGxhY2VMb2NhbFJlZihyZWYsIHYpIHtcbiAgICB2YXIgcmVmSWQgPSByZWZzW3JlZl07XG4gICAgcmVmVmFsW3JlZklkXSA9IHY7XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlZFJlZihyZWZWYWwsIGNvZGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHJlZlZhbCA9PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyB7IGNvZGU6IGNvZGUsIHNjaGVtYTogcmVmVmFsLCBpbmxpbmU6IHRydWUgfVxuICAgICAgICAgICAgOiB7IGNvZGU6IGNvZGUsICRhc3luYzogcmVmVmFsICYmIHJlZlZhbC4kYXN5bmMgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZVBhdHRlcm4ocmVnZXhTdHIpIHtcbiAgICB2YXIgaW5kZXggPSBwYXR0ZXJuc0hhc2hbcmVnZXhTdHJdO1xuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbmRleCA9IHBhdHRlcm5zSGFzaFtyZWdleFN0cl0gPSBwYXR0ZXJucy5sZW5ndGg7XG4gICAgICBwYXR0ZXJuc1tpbmRleF0gPSByZWdleFN0cjtcbiAgICB9XG4gICAgcmV0dXJuICdwYXR0ZXJuJyArIGluZGV4O1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRGVmYXVsdCh2YWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiAnJyArIHZhbHVlO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHV0aWwudG9RdW90ZWRTdHJpbmcodmFsdWUpO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICAgICAgICB2YXIgdmFsdWVTdHIgPSBzdGFibGVTdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB2YXIgaW5kZXggPSBkZWZhdWx0c0hhc2hbdmFsdWVTdHJdO1xuICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluZGV4ID0gZGVmYXVsdHNIYXNoW3ZhbHVlU3RyXSA9IGRlZmF1bHRzLmxlbmd0aDtcbiAgICAgICAgICBkZWZhdWx0c1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ2RlZmF1bHQnICsgaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXNlQ3VzdG9tUnVsZShydWxlLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpIHtcbiAgICB2YXIgdmFsaWRhdGVTY2hlbWEgPSBydWxlLmRlZmluaXRpb24udmFsaWRhdGVTY2hlbWE7XG4gICAgaWYgKHZhbGlkYXRlU2NoZW1hICYmIHNlbGYuX29wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKSB7XG4gICAgICB2YXIgdmFsaWQgPSB2YWxpZGF0ZVNjaGVtYShzY2hlbWEpO1xuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB2YXIgbWVzc2FnZSA9ICdrZXl3b3JkIHNjaGVtYSBpcyBpbnZhbGlkOiAnICsgc2VsZi5lcnJvcnNUZXh0KHZhbGlkYXRlU2NoZW1hLmVycm9ycyk7XG4gICAgICAgIGlmIChzZWxmLl9vcHRzLnZhbGlkYXRlU2NoZW1hID09ICdsb2cnKSBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY29tcGlsZSA9IHJ1bGUuZGVmaW5pdGlvbi5jb21waWxlXG4gICAgICAsIGlubGluZSA9IHJ1bGUuZGVmaW5pdGlvbi5pbmxpbmVcbiAgICAgICwgbWFjcm8gPSBydWxlLmRlZmluaXRpb24ubWFjcm87XG5cbiAgICB2YXIgdmFsaWRhdGU7XG4gICAgaWYgKGNvbXBpbGUpIHtcbiAgICAgIHZhbGlkYXRlID0gY29tcGlsZS5jYWxsKHNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCk7XG4gICAgfSBlbHNlIGlmIChtYWNybykge1xuICAgICAgdmFsaWRhdGUgPSBtYWNyby5jYWxsKHNlbGYsIHNjaGVtYSwgcGFyZW50U2NoZW1hLCBpdCk7XG4gICAgICBpZiAob3B0cy52YWxpZGF0ZVNjaGVtYSAhPT0gZmFsc2UpIHNlbGYudmFsaWRhdGVTY2hlbWEodmFsaWRhdGUsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoaW5saW5lKSB7XG4gICAgICB2YWxpZGF0ZSA9IGlubGluZS5jYWxsKHNlbGYsIGl0LCBydWxlLmtleXdvcmQsIHNjaGVtYSwgcGFyZW50U2NoZW1hKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGUgPSBydWxlLmRlZmluaXRpb24udmFsaWRhdGU7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gY3VzdG9tUnVsZXMubGVuZ3RoO1xuICAgIGN1c3RvbVJ1bGVzW2luZGV4XSA9IHZhbGlkYXRlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6ICdjdXN0b21SdWxlJyArIGluZGV4LFxuICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlXG4gICAgfTtcbiAgfVxufVxuXG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBzY2hlbWEgaXMgY3VycmVudGx5IGNvbXBpbGVkXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCByb290IG9iamVjdFxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBzY2hlbWEgSURcbiAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0IHdpdGggcHJvcGVydGllcyBcImluZGV4XCIgKGNvbXBpbGF0aW9uIGluZGV4KSBhbmQgXCJjb21waWxpbmdcIiAoYm9vbGVhbilcbiAqL1xuZnVuY3Rpb24gY2hlY2tDb21waWxpbmcoc2NoZW1hLCByb290LCBiYXNlSWQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgaW5kZXggPSBjb21wSW5kZXguY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIGJhc2VJZCk7XG4gIGlmIChpbmRleCA+PSAwKSByZXR1cm4geyBpbmRleDogaW5kZXgsIGNvbXBpbGluZzogdHJ1ZSB9O1xuICBpbmRleCA9IHRoaXMuX2NvbXBpbGF0aW9ucy5sZW5ndGg7XG4gIHRoaXMuX2NvbXBpbGF0aW9uc1tpbmRleF0gPSB7XG4gICAgc2NoZW1hOiBzY2hlbWEsXG4gICAgcm9vdDogcm9vdCxcbiAgICBiYXNlSWQ6IGJhc2VJZFxuICB9O1xuICByZXR1cm4geyBpbmRleDogaW5kZXgsIGNvbXBpbGluZzogZmFsc2UgfTtcbn1cblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIHNjaGVtYSBmcm9tIHRoZSBjdXJyZW50bHkgY29tcGlsZWQgbGlzdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSB0byBjb21waWxlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3RcbiAqIEBwYXJhbSAge1N0cmluZ30gYmFzZUlkIGJhc2Ugc2NoZW1hIElEXG4gKi9cbmZ1bmN0aW9uIGVuZENvbXBpbGluZyhzY2hlbWEsIHJvb3QsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBpID0gY29tcEluZGV4LmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICBpZiAoaSA+PSAwKSB0aGlzLl9jb21waWxhdGlvbnMuc3BsaWNlKGksIDEpO1xufVxuXG5cbi8qKlxuICogSW5kZXggb2Ygc2NoZW1hIGNvbXBpbGF0aW9uIGluIHRoZSBjdXJyZW50bHkgY29tcGlsZWQgbGlzdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSB0byBjb21waWxlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3RcbiAqIEBwYXJhbSAge1N0cmluZ30gYmFzZUlkIGJhc2Ugc2NoZW1hIElEXG4gKiBAcmV0dXJuIHtJbnRlZ2VyfSBjb21waWxhdGlvbiBpbmRleFxuICovXG5mdW5jdGlvbiBjb21wSW5kZXgoc2NoZW1hLCByb290LCBiYXNlSWQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICBmb3IgKHZhciBpPTA7IGk8dGhpcy5fY29tcGlsYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGMgPSB0aGlzLl9jb21waWxhdGlvbnNbaV07XG4gICAgaWYgKGMuc2NoZW1hID09IHNjaGVtYSAmJiBjLnJvb3QgPT0gcm9vdCAmJiBjLmJhc2VJZCA9PSBiYXNlSWQpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn1cblxuXG5mdW5jdGlvbiBwYXR0ZXJuQ29kZShpLCBwYXR0ZXJucykge1xuICByZXR1cm4gJ3ZhciBwYXR0ZXJuJyArIGkgKyAnID0gbmV3IFJlZ0V4cCgnICsgdXRpbC50b1F1b3RlZFN0cmluZyhwYXR0ZXJuc1tpXSkgKyAnKTsnO1xufVxuXG5cbmZ1bmN0aW9uIGRlZmF1bHRDb2RlKGkpIHtcbiAgcmV0dXJuICd2YXIgZGVmYXVsdCcgKyBpICsgJyA9IGRlZmF1bHRzWycgKyBpICsgJ107Jztcbn1cblxuXG5mdW5jdGlvbiByZWZWYWxDb2RlKGksIHJlZlZhbCkge1xuICByZXR1cm4gcmVmVmFsW2ldID8gJ3ZhciByZWZWYWwnICsgaSArICcgPSByZWZWYWxbJyArIGkgKyAnXTsnIDogJyc7XG59XG5cblxuZnVuY3Rpb24gY3VzdG9tUnVsZUNvZGUoaSkge1xuICByZXR1cm4gJ3ZhciBjdXN0b21SdWxlJyArIGkgKyAnID0gY3VzdG9tUnVsZXNbJyArIGkgKyAnXTsnO1xufVxuXG5cbmZ1bmN0aW9uIHZhcnMoYXJyLCBzdGF0ZW1lbnQpIHtcbiAgaWYgKCFhcnIubGVuZ3RoKSByZXR1cm4gJyc7XG4gIHZhciBjb2RlID0gJyc7XG4gIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspXG4gICAgY29kZSArPSBzdGF0ZW1lbnQoaSwgYXJyKTtcbiAgcmV0dXJuIGNvZGU7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKVxuICAsIGVxdWFsID0gcmVxdWlyZSgnLi9lcXVhbCcpXG4gICwgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG4gICwgU2NoZW1hT2JqZWN0ID0gcmVxdWlyZSgnLi9zY2hlbWFfb2JqJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVzb2x2ZTtcblxucmVzb2x2ZS5ub3JtYWxpemVJZCA9IG5vcm1hbGl6ZUlkO1xucmVzb2x2ZS5mdWxsUGF0aCA9IGdldEZ1bGxQYXRoO1xucmVzb2x2ZS51cmwgPSByZXNvbHZlVXJsO1xucmVzb2x2ZS5pZHMgPSByZXNvbHZlSWRzO1xucmVzb2x2ZS5pbmxpbmVSZWYgPSBpbmxpbmVSZWY7XG5yZXNvbHZlLnNjaGVtYSA9IHJlc29sdmVTY2hlbWE7XG5cbi8qKlxuICogW3Jlc29sdmUgYW5kIGNvbXBpbGUgdGhlIHJlZmVyZW5jZXMgKCRyZWYpXVxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjb21waWxlIHJlZmVyZW5jZSB0byBzY2hlbWEgY29tcGlsYXRpb24gZnVuY2l0b24gKGxvY2FsQ29tcGlsZSlcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCBvYmplY3Qgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcm9vdCBzY2hlbWEgZm9yIHRoZSBjdXJyZW50IHNjaGVtYVxuICogQHBhcmFtICB7U3RyaW5nfSByZWYgcmVmZXJlbmNlIHRvIHJlc29sdmVcbiAqIEByZXR1cm4ge09iamVjdHxGdW5jdGlvbn0gc2NoZW1hIG9iamVjdCAoaWYgdGhlIHNjaGVtYSBjYW4gYmUgaW5saW5lZCkgb3IgdmFsaWRhdGlvbiBmdW5jdGlvblxuICovXG5mdW5jdGlvbiByZXNvbHZlKGNvbXBpbGUsIHJvb3QsIHJlZikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciByZWZWYWwgPSB0aGlzLl9yZWZzW3JlZl07XG4gIGlmICh0eXBlb2YgcmVmVmFsID09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHRoaXMuX3JlZnNbcmVmVmFsXSkgcmVmVmFsID0gdGhpcy5fcmVmc1tyZWZWYWxdO1xuICAgIGVsc2UgcmV0dXJuIHJlc29sdmUuY2FsbCh0aGlzLCBjb21waWxlLCByb290LCByZWZWYWwpO1xuICB9XG5cbiAgcmVmVmFsID0gcmVmVmFsIHx8IHRoaXMuX3NjaGVtYXNbcmVmXTtcbiAgaWYgKHJlZlZhbCBpbnN0YW5jZW9mIFNjaGVtYU9iamVjdCkge1xuICAgIHJldHVybiBpbmxpbmVSZWYocmVmVmFsLnNjaGVtYSwgdGhpcy5fb3B0cy5pbmxpbmVSZWZzKVxuICAgICAgICAgICAgPyByZWZWYWwuc2NoZW1hXG4gICAgICAgICAgICA6IHJlZlZhbC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlKHJlZlZhbCk7XG4gIH1cblxuICB2YXIgcmVzID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gIHZhciBzY2hlbWEsIHYsIGJhc2VJZDtcbiAgaWYgKHJlcykge1xuICAgIHNjaGVtYSA9IHJlcy5zY2hlbWE7XG4gICAgcm9vdCA9IHJlcy5yb290O1xuICAgIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gIH1cblxuICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgU2NoZW1hT2JqZWN0KSB7XG4gICAgdiA9IHNjaGVtYS52YWxpZGF0ZSB8fCBjb21waWxlLmNhbGwodGhpcywgc2NoZW1hLnNjaGVtYSwgcm9vdCwgdW5kZWZpbmVkLCBiYXNlSWQpO1xuICB9IGVsc2UgaWYgKHNjaGVtYSkge1xuICAgIHYgPSBpbmxpbmVSZWYoc2NoZW1hLCB0aGlzLl9vcHRzLmlubGluZVJlZnMpXG4gICAgICAgID8gc2NoZW1hXG4gICAgICAgIDogY29tcGlsZS5jYWxsKHRoaXMsIHNjaGVtYSwgcm9vdCwgdW5kZWZpbmVkLCBiYXNlSWQpO1xuICB9XG5cbiAgcmV0dXJuIHY7XG59XG5cblxuLyoqXG4gKiBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuICogQHRoaXMgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHNjaGVtYSwgcmVmVmFsLCByZWZzXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHJlZiAgcmVmZXJlbmNlIHRvIHJlc29sdmVcbiAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0IHdpdGggcHJvcGVydGllcyBzY2hlbWEsIHJvb3QsIGJhc2VJZFxuICovXG5mdW5jdGlvbiByZXNvbHZlU2NoZW1hKHJvb3QsIHJlZikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBwID0gdXJsLnBhcnNlKHJlZiwgZmFsc2UsIHRydWUpXG4gICAgLCByZWZQYXRoID0gX2dldEZ1bGxQYXRoKHApXG4gICAgLCBiYXNlSWQgPSBnZXRGdWxsUGF0aChyb290LnNjaGVtYS5pZCk7XG4gIGlmIChyZWZQYXRoICE9PSBiYXNlSWQpIHtcbiAgICB2YXIgaWQgPSBub3JtYWxpemVJZChyZWZQYXRoKTtcbiAgICB2YXIgcmVmVmFsID0gdGhpcy5fcmVmc1tpZF07XG4gICAgaWYgKHR5cGVvZiByZWZWYWwgPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiByZXNvbHZlUmVjdXJzaXZlLmNhbGwodGhpcywgcm9vdCwgcmVmVmFsLCBwKTtcbiAgICB9IGVsc2UgaWYgKHJlZlZhbCBpbnN0YW5jZW9mIFNjaGVtYU9iamVjdCkge1xuICAgICAgaWYgKCFyZWZWYWwudmFsaWRhdGUpIHRoaXMuX2NvbXBpbGUocmVmVmFsKTtcbiAgICAgIHJvb3QgPSByZWZWYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZlZhbCA9IHRoaXMuX3NjaGVtYXNbaWRdO1xuICAgICAgaWYgKHJlZlZhbCBpbnN0YW5jZW9mIFNjaGVtYU9iamVjdCkge1xuICAgICAgICBpZiAoIXJlZlZhbC52YWxpZGF0ZSkgdGhpcy5fY29tcGlsZShyZWZWYWwpO1xuICAgICAgICBpZiAoaWQgPT0gbm9ybWFsaXplSWQocmVmKSlcbiAgICAgICAgICByZXR1cm4geyBzY2hlbWE6IHJlZlZhbCwgcm9vdDogcm9vdCwgYmFzZUlkOiBiYXNlSWQgfTtcbiAgICAgICAgcm9vdCA9IHJlZlZhbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFyb290LnNjaGVtYSkgcmV0dXJuO1xuICAgIGJhc2VJZCA9IGdldEZ1bGxQYXRoKHJvb3Quc2NoZW1hLmlkKTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCBiYXNlSWQsIHJvb3Quc2NoZW1hLCByb290KTtcbn1cblxuXG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIHJlc29sdmVSZWN1cnNpdmUocm9vdCwgcmVmLCBwYXJzZWRSZWYpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcmVzID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gIGlmIChyZXMpIHtcbiAgICB2YXIgc2NoZW1hID0gcmVzLnNjaGVtYTtcbiAgICB2YXIgYmFzZUlkID0gcmVzLmJhc2VJZDtcbiAgICByb290ID0gcmVzLnJvb3Q7XG4gICAgaWYgKHNjaGVtYS5pZCkgYmFzZUlkID0gcmVzb2x2ZVVybChiYXNlSWQsIHNjaGVtYS5pZCk7XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcGFyc2VkUmVmLCBiYXNlSWQsIHNjaGVtYSwgcm9vdCk7XG4gIH1cbn1cblxuXG52YXIgUFJFVkVOVF9TQ09QRV9DSEFOR0UgPSB1dGlsLnRvSGFzaChbJ3Byb3BlcnRpZXMnLCAncGF0dGVyblByb3BlcnRpZXMnLCAnZW51bScsICdkZXBlbmRlbmNpZXMnLCAnZGVmaW5pdGlvbnMnXSk7XG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIGdldEpzb25Qb2ludGVyKHBhcnNlZFJlZiwgYmFzZUlkLCBzY2hlbWEsIHJvb3QpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICBwYXJzZWRSZWYuaGFzaCA9IHBhcnNlZFJlZi5oYXNoIHx8ICcnO1xuICBpZiAocGFyc2VkUmVmLmhhc2guc2xpY2UoMCwyKSAhPSAnIy8nKSByZXR1cm47XG4gIHZhciBwYXJ0cyA9IHBhcnNlZFJlZi5oYXNoLnNwbGl0KCcvJyk7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQpIHtcbiAgICAgIHBhcnQgPSB1dGlsLnVuZXNjYXBlRnJhZ21lbnQocGFydCk7XG4gICAgICBzY2hlbWEgPSBzY2hlbWFbcGFydF07XG4gICAgICBpZiAoIXNjaGVtYSkgYnJlYWs7XG4gICAgICBpZiAoc2NoZW1hLmlkICYmICFQUkVWRU5UX1NDT1BFX0NIQU5HRVtwYXJ0XSkgYmFzZUlkID0gcmVzb2x2ZVVybChiYXNlSWQsIHNjaGVtYS5pZCk7XG4gICAgICBpZiAoc2NoZW1hLiRyZWYpIHtcbiAgICAgICAgdmFyICRyZWYgPSByZXNvbHZlVXJsKGJhc2VJZCwgc2NoZW1hLiRyZWYpO1xuICAgICAgICB2YXIgcmVzID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsICRyZWYpO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgc2NoZW1hID0gcmVzLnNjaGVtYTtcbiAgICAgICAgICByb290ID0gcmVzLnJvb3Q7XG4gICAgICAgICAgYmFzZUlkID0gcmVzLmJhc2VJZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc2NoZW1hICYmIHNjaGVtYSAhPSByb290LnNjaGVtYSlcbiAgICByZXR1cm4geyBzY2hlbWE6IHNjaGVtYSwgcm9vdDogcm9vdCwgYmFzZUlkOiBiYXNlSWQgfTtcbn1cblxuXG52YXIgU0lNUExFX0lOTElORUQgPSB1dGlsLnRvSGFzaChbXG4gICd0eXBlJywgJ2Zvcm1hdCcsICdwYXR0ZXJuJyxcbiAgJ21heExlbmd0aCcsICdtaW5MZW5ndGgnLFxuICAnbWF4UHJvcGVydGllcycsICdtaW5Qcm9wZXJ0aWVzJyxcbiAgJ21heEl0ZW1zJywgJ21pbkl0ZW1zJyxcbiAgJ21heGltdW0nLCAnbWluaW11bScsXG4gICd1bmlxdWVJdGVtcycsICdtdWx0aXBsZU9mJyxcbiAgJ3JlcXVpcmVkJywgJ2VudW0nXG5dKTtcbmZ1bmN0aW9uIGlubGluZVJlZihzY2hlbWEsIGxpbWl0KSB7XG4gIGlmIChsaW1pdCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQgfHwgbGltaXQgPT09IHRydWUpIHJldHVybiBjaGVja05vUmVmKHNjaGVtYSk7XG4gIGVsc2UgaWYgKGxpbWl0KSByZXR1cm4gY291bnRLZXlzKHNjaGVtYSkgPD0gbGltaXQ7XG59XG5cblxuZnVuY3Rpb24gY2hlY2tOb1JlZihzY2hlbWEpIHtcbiAgdmFyIGl0ZW07XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICBmb3IgKHZhciBpPTA7IGk8c2NoZW1hLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtID0gc2NoZW1hW2ldO1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09ICdvYmplY3QnICYmICFjaGVja05vUmVmKGl0ZW0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIHtcbiAgICAgIGlmIChrZXkgPT0gJyRyZWYnKSByZXR1cm4gZmFsc2U7XG4gICAgICBpdGVtID0gc2NoZW1hW2tleV07XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ29iamVjdCcgJiYgIWNoZWNrTm9SZWYoaXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cblxuZnVuY3Rpb24gY291bnRLZXlzKHNjaGVtYSkge1xuICB2YXIgY291bnQgPSAwLCBpdGVtO1xuICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgZm9yICh2YXIgaT0wOyBpPHNjaGVtYS5sZW5ndGg7IGkrKykge1xuICAgICAgaXRlbSA9IHNjaGVtYVtpXTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0JykgY291bnQgKz0gY291bnRLZXlzKGl0ZW0pO1xuICAgICAgaWYgKGNvdW50ID09IEluZmluaXR5KSByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIHtcbiAgICAgIGlmIChrZXkgPT0gJyRyZWYnKSByZXR1cm4gSW5maW5pdHk7XG4gICAgICBpZiAoU0lNUExFX0lOTElORURba2V5XSkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IHNjaGVtYVtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ29iamVjdCcpIGNvdW50ICs9IGNvdW50S2V5cyhpdGVtKSArIDE7XG4gICAgICAgIGlmIChjb3VudCA9PSBJbmZpbml0eSkgcmV0dXJuIEluZmluaXR5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY291bnQ7XG59XG5cblxuZnVuY3Rpb24gZ2V0RnVsbFBhdGgoaWQsIG5vcm1hbGl6ZSkge1xuICBpZiAobm9ybWFsaXplICE9PSBmYWxzZSkgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gIHZhciBwID0gdXJsLnBhcnNlKGlkLCBmYWxzZSwgdHJ1ZSk7XG4gIHJldHVybiBfZ2V0RnVsbFBhdGgocCk7XG59XG5cblxuZnVuY3Rpb24gX2dldEZ1bGxQYXRoKHApIHtcbiAgdmFyIHByb3RvY29sU2VwYXJhdG9yID0gcC5wcm90b2NvbCB8fCBwLmhyZWYuc2xpY2UoMCwyKSA9PSAnLy8nID8gJy8vJyA6ICcnO1xuICByZXR1cm4gKHAucHJvdG9jb2x8fCcnKSArIHByb3RvY29sU2VwYXJhdG9yICsgKHAuaG9zdHx8JycpICsgKHAucGF0aHx8JycpICArICcjJztcbn1cblxuXG52YXIgVFJBSUxJTkdfU0xBU0hfSEFTSCA9IC8jXFwvPyQvO1xuZnVuY3Rpb24gbm9ybWFsaXplSWQoaWQpIHtcbiAgcmV0dXJuIGlkID8gaWQucmVwbGFjZShUUkFJTElOR19TTEFTSF9IQVNILCAnJykgOiAnJztcbn1cblxuXG5mdW5jdGlvbiByZXNvbHZlVXJsKGJhc2VJZCwgaWQpIHtcbiAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gIHJldHVybiB1cmwucmVzb2x2ZShiYXNlSWQsIGlkKTtcbn1cblxuXG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIHJlc29sdmVJZHMoc2NoZW1hKSB7XG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgaWQgPSBub3JtYWxpemVJZChzY2hlbWEuaWQpO1xuICB2YXIgbG9jYWxSZWZzID0ge307XG4gIF9yZXNvbHZlSWRzLmNhbGwodGhpcywgc2NoZW1hLCBnZXRGdWxsUGF0aChpZCwgZmFsc2UpLCBpZCk7XG4gIHJldHVybiBsb2NhbFJlZnM7XG5cbiAgLyogQHRoaXMgQWp2ICovXG4gIGZ1bmN0aW9uIF9yZXNvbHZlSWRzKHNjaGVtYSwgZnVsbFBhdGgsIGJhc2VJZCkge1xuICAgIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgICBmb3IgKHZhciBpPTA7IGk8c2NoZW1hLmxlbmd0aDsgaSsrKVxuICAgICAgICBfcmVzb2x2ZUlkcy5jYWxsKHRoaXMsIHNjaGVtYVtpXSwgZnVsbFBhdGgrJy8nK2ksIGJhc2VJZCk7XG4gICAgfSBlbHNlIGlmIChzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuaWQgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGlkID0gYmFzZUlkID0gYmFzZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gdXJsLnJlc29sdmUoYmFzZUlkLCBzY2hlbWEuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogc2NoZW1hLmlkO1xuICAgICAgICBpZCA9IG5vcm1hbGl6ZUlkKGlkKTtcblxuICAgICAgICB2YXIgcmVmVmFsID0gdGhpcy5fcmVmc1tpZF07XG4gICAgICAgIGlmICh0eXBlb2YgcmVmVmFsID09ICdzdHJpbmcnKSByZWZWYWwgPSB0aGlzLl9yZWZzW3JlZlZhbF07XG4gICAgICAgIGlmIChyZWZWYWwgJiYgcmVmVmFsLnNjaGVtYSkge1xuICAgICAgICAgIGlmICghZXF1YWwoc2NoZW1hLCByZWZWYWwuc2NoZW1hKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaWQgXCInICsgaWQgKyAnXCIgcmVzb2x2ZXMgdG8gbW9yZSB0aGFuIG9uZSBzY2hlbWEnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpZCAhPSBub3JtYWxpemVJZChmdWxsUGF0aCkpIHtcbiAgICAgICAgICBpZiAoaWRbMF0gPT0gJyMnKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxSZWZzW2lkXSAmJiAhZXF1YWwoc2NoZW1hLCBsb2NhbFJlZnNbaWRdKSlcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpZCBcIicgKyBpZCArICdcIiByZXNvbHZlcyB0byBtb3JlIHRoYW4gb25lIHNjaGVtYScpO1xuICAgICAgICAgICAgbG9jYWxSZWZzW2lkXSA9IHNjaGVtYTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVmc1tpZF0gPSBmdWxsUGF0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzY2hlbWEpXG4gICAgICAgIF9yZXNvbHZlSWRzLmNhbGwodGhpcywgc2NoZW1hW2tleV0sIGZ1bGxQYXRoKycvJyt1dGlsLmVzY2FwZUZyYWdtZW50KGtleSksIGJhc2VJZCk7XG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBydWxlTW9kdWxlcyA9IHJlcXVpcmUoJy4vX3J1bGVzJylcbiAgLCB0b0hhc2ggPSByZXF1aXJlKCcuL3V0aWwnKS50b0hhc2g7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcnVsZXMoKSB7XG4gIHZhciBSVUxFUyA9IFtcbiAgICB7IHR5cGU6ICdudW1iZXInLFxuICAgICAgcnVsZXM6IFsgJ21heGltdW0nLCAnbWluaW11bScsICdtdWx0aXBsZU9mJ10gfSxcbiAgICB7IHR5cGU6ICdzdHJpbmcnLFxuICAgICAgcnVsZXM6IFsgJ21heExlbmd0aCcsICdtaW5MZW5ndGgnLCAncGF0dGVybicsICdmb3JtYXQnIF0gfSxcbiAgICB7IHR5cGU6ICdhcnJheScsXG4gICAgICBydWxlczogWyAnbWF4SXRlbXMnLCAnbWluSXRlbXMnLCAndW5pcXVlSXRlbXMnLCAnaXRlbXMnIF0gfSxcbiAgICB7IHR5cGU6ICdvYmplY3QnLFxuICAgICAgcnVsZXM6IFsgJ21heFByb3BlcnRpZXMnLCAnbWluUHJvcGVydGllcycsICdyZXF1aXJlZCcsICdkZXBlbmRlbmNpZXMnLCAncHJvcGVydGllcycgXSB9LFxuICAgIHsgcnVsZXM6IFsgJyRyZWYnLCAnZW51bScsICdub3QnLCAnYW55T2YnLCAnb25lT2YnLCAnYWxsT2YnIF0gfVxuICBdO1xuXG4gIHZhciBBTEwgPSBbICd0eXBlJywgJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJywgJ3BhdHRlcm5Qcm9wZXJ0aWVzJyBdO1xuICB2YXIgS0VZV09SRFMgPSBbICdhZGRpdGlvbmFsSXRlbXMnLCAnJHNjaGVtYScsICdpZCcsICd0aXRsZScsICdkZXNjcmlwdGlvbicsICdkZWZhdWx0JyBdO1xuICB2YXIgVFlQRVMgPSBbICdudW1iZXInLCAnaW50ZWdlcicsICdzdHJpbmcnLCAnYXJyYXknLCAnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVsbCcgXTtcbiAgUlVMRVMuYWxsID0gdG9IYXNoKEFMTCk7XG5cbiAgUlVMRVMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXApIHtcbiAgICBncm91cC5ydWxlcyA9IGdyb3VwLnJ1bGVzLm1hcChmdW5jdGlvbiAoa2V5d29yZCkge1xuICAgICAgQUxMLnB1c2goa2V5d29yZCk7XG4gICAgICB2YXIgcnVsZSA9IFJVTEVTLmFsbFtrZXl3b3JkXSA9IHtcbiAgICAgICAga2V5d29yZDoga2V5d29yZCxcbiAgICAgICAgY29kZTogcnVsZU1vZHVsZXNba2V5d29yZF1cbiAgICAgIH07XG4gICAgICByZXR1cm4gcnVsZTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgUlVMRVMua2V5d29yZHMgPSB0b0hhc2goQUxMLmNvbmNhdChLRVlXT1JEUykpO1xuICBSVUxFUy50eXBlcyA9IHRvSGFzaChUWVBFUyk7XG4gIFJVTEVTLmN1c3RvbSA9IHt9O1xuXG4gIHJldHVybiBSVUxFUztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2NoZW1hT2JqZWN0O1xuXG5mdW5jdGlvbiBTY2hlbWFPYmplY3Qob2JqKSB7XG4gIHV0aWwuY29weShvYmosIHRoaXMpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZ1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL3B1bnljb2RlLmpzIC0gcHVueWNvZGUudWNzMi5kZWNvZGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdWNzMmxlbmd0aChzdHIpIHtcbiAgdmFyIGxlbmd0aCA9IDBcbiAgICAsIGxlbiA9IHN0ci5sZW5ndGhcbiAgICAsIHBvcyA9IDBcbiAgICAsIHZhbHVlO1xuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgbGVuZ3RoKys7XG4gICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MrKyk7XG4gICAgaWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgcG9zIDwgbGVuKSB7XG4gICAgICAvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcbiAgICAgIHZhbHVlID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgICAgIGlmICgodmFsdWUgJiAweEZDMDApID09IDB4REMwMCkgcG9zKys7IC8vIGxvdyBzdXJyb2dhdGVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvcHk6IGNvcHksXG4gIGNoZWNrRGF0YVR5cGU6IGNoZWNrRGF0YVR5cGUsXG4gIGNoZWNrRGF0YVR5cGVzOiBjaGVja0RhdGFUeXBlcyxcbiAgY29lcmNlVG9UeXBlczogY29lcmNlVG9UeXBlcyxcbiAgdG9IYXNoOiB0b0hhc2gsXG4gIGdldFByb3BlcnR5OiBnZXRQcm9wZXJ0eSxcbiAgZXNjYXBlUXVvdGVzOiBlc2NhcGVRdW90ZXMsXG4gIHVjczJsZW5ndGg6IHJlcXVpcmUoJy4vdWNzMmxlbmd0aCcpLFxuICB2YXJPY2N1cmVuY2VzOiB2YXJPY2N1cmVuY2VzLFxuICB2YXJSZXBsYWNlOiB2YXJSZXBsYWNlLFxuICBjbGVhblVwQ29kZTogY2xlYW5VcENvZGUsXG4gIGNsZWFuVXBWYXJFcnJvcnM6IGNsZWFuVXBWYXJFcnJvcnMsXG4gIHNjaGVtYUhhc1J1bGVzOiBzY2hlbWFIYXNSdWxlcyxcbiAgc2NoZW1hSGFzUnVsZXNFeGNlcHQ6IHNjaGVtYUhhc1J1bGVzRXhjZXB0LFxuICBzdGFibGVTdHJpbmdpZnk6IHJlcXVpcmUoJ2pzb24tc3RhYmxlLXN0cmluZ2lmeScpLFxuICB0b1F1b3RlZFN0cmluZzogdG9RdW90ZWRTdHJpbmcsXG4gIGdldFBhdGhFeHByOiBnZXRQYXRoRXhwcixcbiAgZ2V0UGF0aDogZ2V0UGF0aCxcbiAgZ2V0RGF0YTogZ2V0RGF0YSxcbiAgdW5lc2NhcGVGcmFnbWVudDogdW5lc2NhcGVGcmFnbWVudCxcbiAgZXNjYXBlRnJhZ21lbnQ6IGVzY2FwZUZyYWdtZW50LFxuICBlc2NhcGVKc29uUG9pbnRlcjogZXNjYXBlSnNvblBvaW50ZXJcbn07XG5cblxuZnVuY3Rpb24gY29weShvLCB0bykge1xuICB0byA9IHRvIHx8IHt9O1xuICBmb3IgKHZhciBrZXkgaW4gbykgdG9ba2V5XSA9IG9ba2V5XTtcbiAgcmV0dXJuIHRvO1xufVxuXG5cbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGUsIGRhdGEsIG5lZ2F0ZSkge1xuICB2YXIgRVFVQUwgPSBuZWdhdGUgPyAnICE9PSAnIDogJyA9PT0gJ1xuICAgICwgQU5EID0gbmVnYXRlID8gJyB8fCAnIDogJyAmJiAnXG4gICAgLCBPSyA9IG5lZ2F0ZSA/ICchJyA6ICcnXG4gICAgLCBOT1QgPSBuZWdhdGUgPyAnJyA6ICchJztcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgJ251bGwnOiByZXR1cm4gZGF0YSArIEVRVUFMICsgJ251bGwnO1xuICAgIGNhc2UgJ2FycmF5JzogcmV0dXJuIE9LICsgJ0FycmF5LmlzQXJyYXkoJyArIGRhdGEgKyAnKSc7XG4gICAgY2FzZSAnb2JqZWN0JzogcmV0dXJuICcoJyArIE9LICsgZGF0YSArIEFORCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlb2YgJyArIGRhdGEgKyBFUVVBTCArICdcIm9iamVjdFwiJyArIEFORCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5PVCArICdBcnJheS5pc0FycmF5KCcgKyBkYXRhICsgJykpJztcbiAgICBjYXNlICdpbnRlZ2VyJzogcmV0dXJuICcodHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCJudW1iZXJcIicgKyBBTkQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9UICsgJygnICsgZGF0YSArICcgJSAxKScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICsgZGF0YSArIEVRVUFMICsgZGF0YSArICcpJztcbiAgICBkZWZhdWx0OiByZXR1cm4gJ3R5cGVvZiAnICsgZGF0YSArIEVRVUFMICsgJ1wiJyArIGRhdGFUeXBlICsgJ1wiJztcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGVzKGRhdGFUeXBlcywgZGF0YSkge1xuICBzd2l0Y2ggKGRhdGFUeXBlcy5sZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlc1swXSwgZGF0YSwgdHJ1ZSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHZhciBjb2RlID0gJyc7XG4gICAgICB2YXIgdHlwZXMgPSB0b0hhc2goZGF0YVR5cGVzKTtcbiAgICAgIGlmICh0eXBlcy5hcnJheSAmJiB0eXBlcy5vYmplY3QpIHtcbiAgICAgICAgY29kZSA9IHR5cGVzLm51bGwgPyAnKCc6ICcoIScgKyBkYXRhICsgJyB8fCAnO1xuICAgICAgICBjb2RlICs9ICd0eXBlb2YgJyArIGRhdGEgKyAnICE9PSBcIm9iamVjdFwiKSc7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5udWxsO1xuICAgICAgICBkZWxldGUgdHlwZXMuYXJyYXk7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5vYmplY3Q7XG4gICAgICB9XG4gICAgICBpZiAodHlwZXMubnVtYmVyKSBkZWxldGUgdHlwZXMuaW50ZWdlcjtcbiAgICAgIGZvciAodmFyIHQgaW4gdHlwZXMpXG4gICAgICAgIGNvZGUgKz0gKGNvZGUgPyAnICYmICcgOiAnJyApICsgY2hlY2tEYXRhVHlwZSh0LCBkYXRhLCB0cnVlKTtcblxuICAgICAgcmV0dXJuIGNvZGU7XG4gIH1cbn1cblxuXG52YXIgQ09FUkNFX1RPX1RZUEVTID0gdG9IYXNoKFsgJ3N0cmluZycsICdudW1iZXInLCAnaW50ZWdlcicsICdib29sZWFuJywgJ251bGwnIF0pO1xuZnVuY3Rpb24gY29lcmNlVG9UeXBlcyhvcHRpb25Db2VyY2VUeXBlcywgZGF0YVR5cGVzKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGFUeXBlcykpIHtcbiAgICB2YXIgdHlwZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpPTA7IGk8ZGF0YVR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdCA9IGRhdGFUeXBlc1tpXTtcbiAgICAgIGlmIChDT0VSQ0VfVE9fVFlQRVNbdF0pIHR5cGVzW3R5cGVzLmxlbmd0aF0gPSB0O1xuICAgICAgZWxzZSBpZiAob3B0aW9uQ29lcmNlVHlwZXMgPT09ICdhcnJheScgJiYgdCA9PT0gJ2FycmF5JykgdHlwZXNbdHlwZXMubGVuZ3RoXSA9IHQ7XG4gICAgfVxuICAgIGlmICh0eXBlcy5sZW5ndGgpIHJldHVybiB0eXBlcztcbiAgfSBlbHNlIGlmIChDT0VSQ0VfVE9fVFlQRVNbZGF0YVR5cGVzXSkge1xuICAgIHJldHVybiBbZGF0YVR5cGVzXTtcbiAgfSBlbHNlIGlmIChvcHRpb25Db2VyY2VUeXBlcyA9PT0gJ2FycmF5JyAmJiBkYXRhVHlwZXMgPT09ICdhcnJheScpIHtcbiAgICByZXR1cm4gWydhcnJheSddO1xuICB9XG59XG5cblxuZnVuY3Rpb24gdG9IYXNoKGFycikge1xuICB2YXIgaGFzaCA9IHt9O1xuICBmb3IgKHZhciBpPTA7IGk8YXJyLmxlbmd0aDsgaSsrKSBoYXNoW2FycltpXV0gPSB0cnVlO1xuICByZXR1cm4gaGFzaDtcbn1cblxuXG52YXIgSURFTlRJRklFUiA9IC9eW2EteiRfXVthLXokXzAtOV0qJC9pO1xudmFyIFNJTkdMRV9RVU9URSA9IC8nfFxcXFwvZztcbmZ1bmN0aW9uIGdldFByb3BlcnR5KGtleSkge1xuICByZXR1cm4gdHlwZW9mIGtleSA9PSAnbnVtYmVyJ1xuICAgICAgICAgID8gJ1snICsga2V5ICsgJ10nXG4gICAgICAgICAgOiBJREVOVElGSUVSLnRlc3Qoa2V5KVxuICAgICAgICAgICAgPyAnLicgKyBrZXlcbiAgICAgICAgICAgIDogXCJbJ1wiICsgZXNjYXBlUXVvdGVzKGtleSkgKyBcIiddXCI7XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlUXVvdGVzKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoU0lOR0xFX1FVT1RFLCAnXFxcXCQmJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJ1xcXFxyJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGYvZywgJ1xcXFxmJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHQvZywgJ1xcXFx0Jyk7XG59XG5cblxuZnVuY3Rpb24gdmFyT2NjdXJlbmNlcyhzdHIsIGRhdGFWYXIpIHtcbiAgZGF0YVZhciArPSAnW14wLTldJztcbiAgdmFyIG1hdGNoZXMgPSBzdHIubWF0Y2gobmV3IFJlZ0V4cChkYXRhVmFyLCAnZycpKTtcbiAgcmV0dXJuIG1hdGNoZXMgPyBtYXRjaGVzLmxlbmd0aCA6IDA7XG59XG5cblxuZnVuY3Rpb24gdmFyUmVwbGFjZShzdHIsIGRhdGFWYXIsIGV4cHIpIHtcbiAgZGF0YVZhciArPSAnKFteMC05XSknO1xuICBleHByID0gZXhwci5yZXBsYWNlKC9cXCQvZywgJyQkJCQnKTtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoZGF0YVZhciwgJ2cnKSwgZXhwciArICckMScpO1xufVxuXG5cbnZhciBFTVBUWV9FTFNFID0gL2Vsc2VcXHMqe1xccyp9L2dcbiAgLCBFTVBUWV9JRl9OT19FTFNFID0gL2lmXFxzKlxcKFteKV0rXFwpXFxzKlxce1xccypcXH0oPyFcXHMqZWxzZSkvZ1xuICAsIEVNUFRZX0lGX1dJVEhfRUxTRSA9IC9pZlxccypcXCgoW14pXSspXFwpXFxzKlxce1xccypcXH1cXHMqZWxzZSg/IVxccyppZikvZztcbmZ1bmN0aW9uIGNsZWFuVXBDb2RlKG91dCkge1xuICByZXR1cm4gb3V0LnJlcGxhY2UoRU1QVFlfRUxTRSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZShFTVBUWV9JRl9OT19FTFNFLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKEVNUFRZX0lGX1dJVEhfRUxTRSwgJ2lmICghKCQxKSknKTtcbn1cblxuXG52YXIgRVJST1JTX1JFR0VYUCA9IC9bXnZcXC5dZXJyb3JzL2dcbiAgLCBSRU1PVkVfRVJST1JTID0gL3ZhciBlcnJvcnMgPSAwO3x2YXIgdkVycm9ycyA9IG51bGw7fHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7L2dcbiAgLCBSRU1PVkVfRVJST1JTX0FTWU5DID0gL3ZhciBlcnJvcnMgPSAwO3x2YXIgdkVycm9ycyA9IG51bGw7L2dcbiAgLCBSRVRVUk5fVkFMSUQgPSAncmV0dXJuIGVycm9ycyA9PT0gMDsnXG4gICwgUkVUVVJOX1RSVUUgPSAndmFsaWRhdGUuZXJyb3JzID0gbnVsbDsgcmV0dXJuIHRydWU7J1xuICAsIFJFVFVSTl9BU1lOQyA9IC9pZiBcXChlcnJvcnMgPT09IDBcXCkgcmV0dXJuIHRydWU7XFxzKmVsc2UgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvclxcKHZFcnJvcnNcXCk7L1xuICAsIFJFVFVSTl9UUlVFX0FTWU5DID0gJ3JldHVybiB0cnVlOyc7XG5cbmZ1bmN0aW9uIGNsZWFuVXBWYXJFcnJvcnMob3V0LCBhc3luYykge1xuICB2YXIgbWF0Y2hlcyA9IG91dC5tYXRjaChFUlJPUlNfUkVHRVhQKTtcbiAgaWYgKCFtYXRjaGVzIHx8IG1hdGNoZXMubGVuZ3RoICE9PSAyKSByZXR1cm4gb3V0O1xuICByZXR1cm4gYXN5bmNcbiAgICAgICAgICA/IG91dC5yZXBsYWNlKFJFTU9WRV9FUlJPUlNfQVNZTkMsICcnKVxuICAgICAgICAgICAgICAgLnJlcGxhY2UoUkVUVVJOX0FTWU5DLCBSRVRVUk5fVFJVRV9BU1lOQylcbiAgICAgICAgICA6IG91dC5yZXBsYWNlKFJFTU9WRV9FUlJPUlMsICcnKVxuICAgICAgICAgICAgICAgLnJlcGxhY2UoUkVUVVJOX1ZBTElELCBSRVRVUk5fVFJVRSk7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSBpZiAocnVsZXNba2V5XSkgcmV0dXJuIHRydWU7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNFeGNlcHQoc2NoZW1hLCBydWxlcywgZXhjZXB0S2V5d29yZCkge1xuICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSBpZiAoa2V5ICE9IGV4Y2VwdEtleXdvcmQgJiYgcnVsZXNba2V5XSkgcmV0dXJuIHRydWU7XG59XG5cblxuZnVuY3Rpb24gdG9RdW90ZWRTdHJpbmcoc3RyKSB7XG4gIHJldHVybiAnXFwnJyArIGVzY2FwZVF1b3RlcyhzdHIpICsgJ1xcJyc7XG59XG5cblxuZnVuY3Rpb24gZ2V0UGF0aEV4cHIoY3VycmVudFBhdGgsIGV4cHIsIGpzb25Qb2ludGVycywgaXNOdW1iZXIpIHtcbiAgdmFyIHBhdGggPSBqc29uUG9pbnRlcnMgLy8gZmFsc2UgYnkgZGVmYXVsdFxuICAgICAgICAgICAgICA/ICdcXCcvXFwnICsgJyArIGV4cHIgKyAoaXNOdW1iZXIgPyAnJyA6ICcucmVwbGFjZSgvfi9nLCBcXCd+MFxcJykucmVwbGFjZSgvXFxcXC8vZywgXFwnfjFcXCcpJylcbiAgICAgICAgICAgICAgOiAoaXNOdW1iZXIgPyAnXFwnW1xcJyArICcgKyBleHByICsgJyArIFxcJ11cXCcnIDogJ1xcJ1tcXFxcXFwnXFwnICsgJyArIGV4cHIgKyAnICsgXFwnXFxcXFxcJ11cXCcnKTtcbiAgcmV0dXJuIGpvaW5QYXRocyhjdXJyZW50UGF0aCwgcGF0aCk7XG59XG5cblxuZnVuY3Rpb24gZ2V0UGF0aChjdXJyZW50UGF0aCwgcHJvcCwganNvblBvaW50ZXJzKSB7XG4gIHZhciBwYXRoID0ganNvblBvaW50ZXJzIC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgPyB0b1F1b3RlZFN0cmluZygnLycgKyBlc2NhcGVKc29uUG9pbnRlcihwcm9wKSlcbiAgICAgICAgICAgICAgOiB0b1F1b3RlZFN0cmluZyhnZXRQcm9wZXJ0eShwcm9wKSk7XG4gIHJldHVybiBqb2luUGF0aHMoY3VycmVudFBhdGgsIHBhdGgpO1xufVxuXG5cbnZhciBKU09OX1BPSU5URVIgPSAvXlxcLyg/Oltefl18fjB8fjEpKiQvO1xudmFyIFJFTEFUSVZFX0pTT05fUE9JTlRFUiA9IC9eKFswLTldKykoI3xcXC8oPzpbXn5dfH4wfH4xKSopPyQvO1xuZnVuY3Rpb24gZ2V0RGF0YSgkZGF0YSwgbHZsLCBwYXRocykge1xuICB2YXIgdXAsIGpzb25Qb2ludGVyLCBkYXRhLCBtYXRjaGVzO1xuICBpZiAoJGRhdGEgPT09ICcnKSByZXR1cm4gJ3Jvb3REYXRhJztcbiAgaWYgKCRkYXRhWzBdID09ICcvJykge1xuICAgIGlmICghSlNPTl9QT0lOVEVSLnRlc3QoJGRhdGEpKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSlNPTi1wb2ludGVyOiAnICsgJGRhdGEpO1xuICAgIGpzb25Qb2ludGVyID0gJGRhdGE7XG4gICAgZGF0YSA9ICdyb290RGF0YSc7XG4gIH0gZWxzZSB7XG4gICAgbWF0Y2hlcyA9ICRkYXRhLm1hdGNoKFJFTEFUSVZFX0pTT05fUE9JTlRFUik7XG4gICAgaWYgKCFtYXRjaGVzKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSlNPTi1wb2ludGVyOiAnICsgJGRhdGEpO1xuICAgIHVwID0gK21hdGNoZXNbMV07XG4gICAganNvblBvaW50ZXIgPSBtYXRjaGVzWzJdO1xuICAgIGlmIChqc29uUG9pbnRlciA9PSAnIycpIHtcbiAgICAgIGlmICh1cCA+PSBsdmwpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFjY2VzcyBwcm9wZXJ0eS9pbmRleCAnICsgdXAgKyAnIGxldmVscyB1cCwgY3VycmVudCBsZXZlbCBpcyAnICsgbHZsKTtcbiAgICAgIHJldHVybiBwYXRoc1tsdmwgLSB1cF07XG4gICAgfVxuXG4gICAgaWYgKHVwID4gbHZsKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgZGF0YSAnICsgdXAgKyAnIGxldmVscyB1cCwgY3VycmVudCBsZXZlbCBpcyAnICsgbHZsKTtcbiAgICBkYXRhID0gJ2RhdGEnICsgKChsdmwgLSB1cCkgfHwgJycpO1xuICAgIGlmICghanNvblBvaW50ZXIpIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIGV4cHIgPSBkYXRhO1xuICB2YXIgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdCgnLycpO1xuICBmb3IgKHZhciBpPTA7IGk8c2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRzW2ldO1xuICAgIGlmIChzZWdtZW50KSB7XG4gICAgICBkYXRhICs9IGdldFByb3BlcnR5KHVuZXNjYXBlSnNvblBvaW50ZXIoc2VnbWVudCkpO1xuICAgICAgZXhwciArPSAnICYmICcgKyBkYXRhO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZXhwcjtcbn1cblxuXG5mdW5jdGlvbiBqb2luUGF0aHMgKGEsIGIpIHtcbiAgaWYgKGEgPT0gJ1wiXCInKSByZXR1cm4gYjtcbiAgcmV0dXJuIChhICsgJyArICcgKyBiKS5yZXBsYWNlKC8nIFxcKyAnL2csICcnKTtcbn1cblxuXG5mdW5jdGlvbiB1bmVzY2FwZUZyYWdtZW50KHN0cikge1xuICByZXR1cm4gdW5lc2NhcGVKc29uUG9pbnRlcihkZWNvZGVVUklDb21wb25lbnQoc3RyKSk7XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoZXNjYXBlSnNvblBvaW50ZXIoc3RyKSk7XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfi9nLCAnfjAnKS5yZXBsYWNlKC9cXC8vZywgJ34xJyk7XG59XG5cblxuZnVuY3Rpb24gdW5lc2NhcGVKc29uUG9pbnRlcihzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+MS9nLCAnLycpLnJlcGxhY2UoL34wL2csICd+Jyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gVmFsaWRhdGlvbkVycm9yO1xuXG5cbmZ1bmN0aW9uIFZhbGlkYXRpb25FcnJvcihlcnJvcnMpIHtcbiAgdGhpcy5tZXNzYWdlID0gJ3ZhbGlkYXRpb24gZmFpbGVkJztcbiAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gIHRoaXMuYWp2ID0gdGhpcy52YWxpZGF0aW9uID0gdHJ1ZTtcbn1cblxuXG5WYWxpZGF0aW9uRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuVmFsaWRhdGlvbkVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZhbGlkYXRpb25FcnJvcjtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2Zvcm1hdExpbWl0KGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICBvdXQgKz0gJ3ZhciAnICsgKCR2YWxpZCkgKyAnID0gdW5kZWZpbmVkOyc7XG4gIGlmIChpdC5vcHRzLmZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIHZhciAkc2NoZW1hRm9ybWF0ID0gaXQuc2NoZW1hLmZvcm1hdCxcbiAgICAkaXNEYXRhRm9ybWF0ID0gaXQub3B0cy52NSAmJiAkc2NoZW1hRm9ybWF0LiRkYXRhLFxuICAgICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gIGlmICgkaXNEYXRhRm9ybWF0KSB7XG4gICAgdmFyICRzY2hlbWFWYWx1ZUZvcm1hdCA9IGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hRm9ybWF0LiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpLFxuICAgICAgJGZvcm1hdCA9ICdmb3JtYXQnICsgJGx2bCxcbiAgICAgICRjb21wYXJlID0gJ2NvbXBhcmUnICsgJGx2bDtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkZm9ybWF0KSArICcgPSBmb3JtYXRzWycgKyAoJHNjaGVtYVZhbHVlRm9ybWF0KSArICddICwgJyArICgkY29tcGFyZSkgKyAnID0gJyArICgkZm9ybWF0KSArICcgJiYgJyArICgkZm9ybWF0KSArICcuY29tcGFyZTsnO1xuICB9IGVsc2Uge1xuICAgIHZhciAkZm9ybWF0ID0gaXQuZm9ybWF0c1skc2NoZW1hRm9ybWF0XTtcbiAgICBpZiAoISgkZm9ybWF0ICYmICRmb3JtYXQuY29tcGFyZSkpIHtcbiAgICAgIG91dCArPSAnICAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIHZhciAkY29tcGFyZSA9ICdmb3JtYXRzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHNjaGVtYUZvcm1hdCkgKyAnLmNvbXBhcmUnO1xuICB9XG4gIHZhciAkaXNNYXggPSAka2V5d29yZCA9PSAnZm9ybWF0TWF4aW11bScsXG4gICAgJGV4Y2x1c2l2ZUtleXdvcmQgPSAnZm9ybWF0RXhjbHVzaXZlJyArICgkaXNNYXggPyAnTWF4aW11bScgOiAnTWluaW11bScpLFxuICAgICRzY2hlbWFFeGNsID0gaXQuc2NoZW1hWyRleGNsdXNpdmVLZXl3b3JkXSxcbiAgICAkaXNEYXRhRXhjbCA9IGl0Lm9wdHMudjUgJiYgJHNjaGVtYUV4Y2wgJiYgJHNjaGVtYUV4Y2wuJGRhdGEsXG4gICAgJG9wID0gJGlzTWF4ID8gJzwnIDogJz4nLFxuICAgICRyZXN1bHQgPSAncmVzdWx0JyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy52NSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICBpZiAoJGlzRGF0YUV4Y2wpIHtcbiAgICB2YXIgJHNjaGVtYVZhbHVlRXhjbCA9IGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hRXhjbC4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSxcbiAgICAgICRleGNsdXNpdmUgPSAnZXhjbHVzaXZlJyArICRsdmwsXG4gICAgICAkb3BFeHByID0gJ29wJyArICRsdmwsXG4gICAgICAkb3BTdHIgPSAnXFwnICsgJyArICRvcEV4cHIgKyAnICsgXFwnJztcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hRXhjbCcgKyAoJGx2bCkgKyAnID0gJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlRXhjbCA9ICdzY2hlbWFFeGNsJyArICRsdmw7XG4gICAgb3V0ICs9ICcgaWYgKHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyAhPSBcXCdib29sZWFuXFwnICYmICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnICE9PSB1bmRlZmluZWQpIHsgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyAnO1xuICAgIHZhciAkZXJyb3JLZXl3b3JkID0gJGV4Y2x1c2l2ZUtleXdvcmQ7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2Zvcm1hdEV4Y2x1c2l2ZUxpbWl0JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJycgKyAoJGV4Y2x1c2l2ZUtleXdvcmQpICsgJyBzaG91bGQgYmUgYm9vbGVhblxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAgJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgfVxuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkc2NoZW1hVmFsdWUpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgZWxzZSBpZiAodHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnc3RyaW5nXFwnKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2UgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgIH1cbiAgICBpZiAoJGlzRGF0YUZvcm1hdCkge1xuICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKCRjb21wYXJlKSArICcpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIHsgJztcbiAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICB9XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJHJlc3VsdCkgKyAnID0gJyArICgkY29tcGFyZSkgKyAnKCcgKyAoJGRhdGEpICsgJywgICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgfVxuICAgIG91dCArPSAnICk7IGlmICgnICsgKCRyZXN1bHQpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IHZhciAnICsgKCRleGNsdXNpdmUpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnID09PSB0cnVlOyBpZiAoJyArICgkdmFsaWQpICsgJyA9PT0gdW5kZWZpbmVkKSB7ICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRleGNsdXNpdmUpICsgJyA/ICcgKyAoJHJlc3VsdCkgKyAnICcgKyAoJG9wKSArICcgMCA6ICcgKyAoJHJlc3VsdCkgKyAnICcgKyAoJG9wKSArICc9IDA7IH0gaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB2YXIgb3AnICsgKCRsdmwpICsgJyA9ICcgKyAoJGV4Y2x1c2l2ZSkgKyAnID8gXFwnJyArICgkb3ApICsgJ1xcJyA6IFxcJycgKyAoJG9wKSArICc9XFwnOyc7XG4gIH0gZWxzZSB7XG4gICAgdmFyICRleGNsdXNpdmUgPSAkc2NoZW1hRXhjbCA9PT0gdHJ1ZSxcbiAgICAgICRvcFN0ciA9ICRvcDtcbiAgICBpZiAoISRleGNsdXNpdmUpICRvcFN0ciArPSAnPSc7XG4gICAgdmFyICRvcEV4cHIgPSAnXFwnJyArICRvcFN0ciArICdcXCcnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkc2NoZW1hVmFsdWUpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgZWxzZSBpZiAodHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnc3RyaW5nXFwnKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2UgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgIH1cbiAgICBpZiAoJGlzRGF0YUZvcm1hdCkge1xuICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKCRjb21wYXJlKSArICcpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIHsgJztcbiAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICB9XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJHJlc3VsdCkgKyAnID0gJyArICgkY29tcGFyZSkgKyAnKCcgKyAoJGRhdGEpICsgJywgICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgfVxuICAgIG91dCArPSAnICk7IGlmICgnICsgKCRyZXN1bHQpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGlmICgnICsgKCR2YWxpZCkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRyZXN1bHQpICsgJyAnICsgKCRvcCk7XG4gICAgaWYgKCEkZXhjbHVzaXZlKSB7XG4gICAgICBvdXQgKz0gJz0nO1xuICAgIH1cbiAgICBvdXQgKz0gJyAwOyc7XG4gIH1cbiAgb3V0ICs9ICcnICsgKCRjbG9zaW5nQnJhY2VzKSArICdpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19mb3JtYXRMaW1pdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgY29tcGFyaXNvbjogJyArICgkb3BFeHByKSArICcsIGxpbWl0OiAgJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgLCBleGNsdXNpdmU6ICcgKyAoJGV4Y2x1c2l2ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlICcgKyAoJG9wU3RyKSArICcgXCInO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICsgXFwnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC51dGlsLmVzY2FwZVF1b3Rlcygkc2NoZW1hKSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJ1wiXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJ30nO1xuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9fbGltaXQoaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMudjUgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRpc01heCA9ICRrZXl3b3JkID09ICdtYXhpbXVtJyxcbiAgICAkZXhjbHVzaXZlS2V5d29yZCA9ICRpc01heCA/ICdleGNsdXNpdmVNYXhpbXVtJyA6ICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgICAkc2NoZW1hRXhjbCA9IGl0LnNjaGVtYVskZXhjbHVzaXZlS2V5d29yZF0sXG4gICAgJGlzRGF0YUV4Y2wgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWFFeGNsICYmICRzY2hlbWFFeGNsLiRkYXRhLFxuICAgICRvcCA9ICRpc01heCA/ICc8JyA6ICc+JyxcbiAgICAkbm90T3AgPSAkaXNNYXggPyAnPicgOiAnPCc7XG4gIGlmICgkaXNEYXRhRXhjbCkge1xuICAgIHZhciAkc2NoZW1hVmFsdWVFeGNsID0gaXQudXRpbC5nZXREYXRhKCRzY2hlbWFFeGNsLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpLFxuICAgICAgJGV4Y2x1c2l2ZSA9ICdleGNsdXNpdmUnICsgJGx2bCxcbiAgICAgICRvcEV4cHIgPSAnb3AnICsgJGx2bCxcbiAgICAgICRvcFN0ciA9ICdcXCcgKyAnICsgJG9wRXhwciArICcgKyBcXCcnO1xuICAgIG91dCArPSAnIHZhciBzY2hlbWFFeGNsJyArICgkbHZsKSArICcgPSAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWVFeGNsID0gJ3NjaGVtYUV4Y2wnICsgJGx2bDtcbiAgICBvdXQgKz0gJyB2YXIgZXhjbHVzaXZlJyArICgkbHZsKSArICc7IGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgIT0gXFwnYm9vbGVhblxcJyAmJiB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgIT0gXFwndW5kZWZpbmVkXFwnKSB7ICc7XG4gICAgdmFyICRlcnJvcktleXdvcmQgPSAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdfZXhjbHVzaXZlTGltaXQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7fSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJyArICgkZXhjbHVzaXZlS2V5d29yZCkgKyAnIHNob3VsZCBiZSBib29sZWFuXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIHZhciBfX2VyciA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9IGVsc2UgaWYoICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnKSB8fCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAoKGV4Y2x1c2l2ZScgKyAoJGx2bCkgKyAnID0gJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgPT09IHRydWUpID8gJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICc9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgOiAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApICsgJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSB8fCAnICsgKCRkYXRhKSArICcgIT09ICcgKyAoJGRhdGEpICsgJykgeyB2YXIgb3AnICsgKCRsdmwpICsgJyA9IGV4Y2x1c2l2ZScgKyAoJGx2bCkgKyAnID8gXFwnJyArICgkb3ApICsgJ1xcJyA6IFxcJycgKyAoJG9wKSArICc9XFwnOyc7XG4gIH0gZWxzZSB7XG4gICAgdmFyICRleGNsdXNpdmUgPSAkc2NoZW1hRXhjbCA9PT0gdHJ1ZSxcbiAgICAgICRvcFN0ciA9ICRvcDtcbiAgICBpZiAoISRleGNsdXNpdmUpICRvcFN0ciArPSAnPSc7XG4gICAgdmFyICRvcEV4cHIgPSAnXFwnJyArICRvcFN0ciArICdcXCcnO1xuICAgIG91dCArPSAnIGlmICggJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdudW1iZXJcXCcpIHx8ICc7XG4gICAgfVxuICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCk7XG4gICAgaWYgKCRleGNsdXNpdmUpIHtcbiAgICAgIG91dCArPSAnPSc7XG4gICAgfVxuICAgIG91dCArPSAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsnO1xuICB9XG4gIHZhciAkZXJyb3JLZXl3b3JkID0gJGtleXdvcmQ7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdfbGltaXQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGNvbXBhcmlzb246ICcgKyAoJG9wRXhwcikgKyAnLCBsaW1pdDogJyArICgkc2NoZW1hVmFsdWUpICsgJywgZXhjbHVzaXZlOiAnICsgKCRleGNsdXNpdmUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSAnICsgKCRvcFN0cikgKyAnICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKSArICdcXCcnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX19saW1pdEl0ZW1zKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkb3AgPSAka2V5d29yZCA9PSAnbWF4SXRlbXMnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcubGVuZ3RoICcgKyAoJG9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJykgeyAnO1xuICB2YXIgJGVycm9yS2V5d29yZCA9ICRrZXl3b3JkO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2xpbWl0SXRlbXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heEl0ZW1zJykge1xuICAgICAgICBvdXQgKz0gJ21vcmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICdsZXNzJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRoYW4gJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBpdGVtc1xcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9ICc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0TGVuZ3RoKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkb3AgPSAka2V5d29yZCA9PSAnbWF4TGVuZ3RoJyA/ICc+JyA6ICc8JztcbiAgb3V0ICs9ICdpZiAoICc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdudW1iZXJcXCcpIHx8ICc7XG4gIH1cbiAgaWYgKGl0Lm9wdHMudW5pY29kZSA9PT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcubGVuZ3RoICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdWNzMmxlbmd0aCgnICsgKCRkYXRhKSArICcpICc7XG4gIH1cbiAgb3V0ICs9ICcgJyArICgkb3ApICsgJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSB7ICc7XG4gIHZhciAkZXJyb3JLZXl3b3JkID0gJGtleXdvcmQ7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdfbGltaXRMZW5ndGgnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBiZSAnO1xuICAgICAgaWYgKCRrZXl3b3JkID09ICdtYXhMZW5ndGgnKSB7XG4gICAgICAgIG91dCArPSAnbG9uZ2VyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnc2hvcnRlcic7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB0aGFuICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgY2hhcmFjdGVyc1xcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9ICc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0UHJvcGVydGllcyhpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy52NSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJG9wID0gJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpLmxlbmd0aCAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdFByb3BlcnRpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnKSB7XG4gICAgICAgIG91dCArPSAnbW9yZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJ2xlc3MnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgdGhhbiAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICsgXFwnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHByb3BlcnRpZXNcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2FsbE9mKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGN1cnJlbnRCYXNlSWQgPSAkaXQuYmFzZUlkLFxuICAgICRhbGxTY2hlbWFzRW1wdHkgPSB0cnVlO1xuICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gIGlmIChhcnIxKSB7XG4gICAgdmFyICRzY2gsICRpID0gLTEsXG4gICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgJHNjaCA9IGFycjFbJGkgKz0gMV07XG4gICAgICBpZiAoaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpKSB7XG4gICAgICAgICRhbGxTY2hlbWFzRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkaSArICddJztcbiAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRpO1xuICAgICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIGlmICgkYWxsU2NoZW1hc0VtcHR5KSB7XG4gICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzLnNsaWNlKDAsIC0xKSkgKyAnICc7XG4gICAgfVxuICB9XG4gIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfYW55T2YoaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkbm9FbXB0eVNjaGVtYSA9ICRzY2hlbWEuZXZlcnkoZnVuY3Rpb24oJHNjaCkge1xuICAgIHJldHVybiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCk7XG4gIH0pO1xuICBpZiAoJG5vRW1wdHlTY2hlbWEpIHtcbiAgICB2YXIgJGN1cnJlbnRCYXNlSWQgPSAkaXQuYmFzZUlkO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7IHZhciAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7ICAnO1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgIHZhciBhcnIxID0gJHNjaGVtYTtcbiAgICBpZiAoYXJyMSkge1xuICAgICAgdmFyICRzY2gsICRpID0gLTEsXG4gICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKCRpIDwgbDEpIHtcbiAgICAgICAgJHNjaCA9IGFycjFbJGkgKz0gMV07XG4gICAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJHZhbGlkKSArICcgfHwgJyArICgkbmV4dFZhbGlkKSArICc7IGlmICghJyArICgkdmFsaWQpICsgJykgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgfVxuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdhbnlPZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgbWF0Y2ggc29tZSBzY2hlbWEgaW4gYW55T2ZcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gJztcbiAgICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9XG4gICAgb3V0ID0gaXQudXRpbC5jbGVhblVwQ29kZShvdXQpO1xuICB9IGVsc2Uge1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9jb25zdGFudChpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMudjUgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCEkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyc7XG4gIH1cbiAgb3V0ICs9ICd2YXIgJyArICgkdmFsaWQpICsgJyA9IGVxdWFsKCcgKyAoJGRhdGEpICsgJywgc2NoZW1hJyArICgkbHZsKSArICcpOyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2NvbnN0YW50JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlIGVxdWFsIHRvIGNvbnN0YW50XFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0nO1xuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9jdXN0b20oaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkcnVsZSA9IHRoaXMsXG4gICAgJGRlZmluaXRpb24gPSAnZGVmaW5pdGlvbicgKyAkbHZsLFxuICAgICRyRGVmID0gJHJ1bGUuZGVmaW5pdGlvbjtcbiAgdmFyICRjb21waWxlLCAkaW5saW5lLCAkbWFjcm8sICRydWxlVmFsaWRhdGUsICR2YWxpZGF0ZUNvZGU7XG4gIGlmICgkaXNEYXRhICYmICRyRGVmLiRkYXRhKSB7XG4gICAgJHZhbGlkYXRlQ29kZSA9ICdrZXl3b3JkVmFsaWRhdGUnICsgJGx2bDtcbiAgICB2YXIgJHZhbGlkYXRlU2NoZW1hID0gJHJEZWYudmFsaWRhdGVTY2hlbWE7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGRlZmluaXRpb24pICsgJyA9IFJVTEVTLmN1c3RvbVtcXCcnICsgKCRrZXl3b3JkKSArICdcXCddLmRlZmluaXRpb247IHZhciAnICsgKCR2YWxpZGF0ZUNvZGUpICsgJyA9ICcgKyAoJGRlZmluaXRpb24pICsgJy52YWxpZGF0ZTsnO1xuICB9IGVsc2Uge1xuICAgICRydWxlVmFsaWRhdGUgPSBpdC51c2VDdXN0b21SdWxlKCRydWxlLCAkc2NoZW1hLCBpdC5zY2hlbWEsIGl0KTtcbiAgICAkc2NoZW1hVmFsdWUgPSAndmFsaWRhdGUuc2NoZW1hJyArICRzY2hlbWFQYXRoO1xuICAgICR2YWxpZGF0ZUNvZGUgPSAkcnVsZVZhbGlkYXRlLmNvZGU7XG4gICAgJGNvbXBpbGUgPSAkckRlZi5jb21waWxlO1xuICAgICRpbmxpbmUgPSAkckRlZi5pbmxpbmU7XG4gICAgJG1hY3JvID0gJHJEZWYubWFjcm87XG4gIH1cbiAgdmFyICRydWxlRXJycyA9ICR2YWxpZGF0ZUNvZGUgKyAnLmVycm9ycycsXG4gICAgJGkgPSAnaScgKyAkbHZsLFxuICAgICRydWxlRXJyID0gJ3J1bGVFcnInICsgJGx2bCxcbiAgICAkYXN5bmNLZXl3b3JkID0gJHJEZWYuYXN5bmM7XG4gIGlmICgkYXN5bmNLZXl3b3JkICYmICFpdC5hc3luYykgdGhyb3cgbmV3IEVycm9yKCdhc3luYyBrZXl3b3JkIGluIHN5bmMgc2NoZW1hJyk7XG4gIGlmICghKCRpbmxpbmUgfHwgJG1hY3JvKSkge1xuICAgIG91dCArPSAnJyArICgkcnVsZUVycnMpICsgJyA9IG51bGw7JztcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKCR2YWxpZGF0ZVNjaGVtYSkge1xuICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRkZWZpbml0aW9uKSArICcudmFsaWRhdGVTY2hlbWEoJyArICgkc2NoZW1hVmFsdWUpICsgJyk7IGlmICgnICsgKCR2YWxpZCkgKyAnKSB7JztcbiAgfVxuICBpZiAoJGlubGluZSkge1xuICAgIGlmICgkckRlZi5zdGF0ZW1lbnRzKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRydWxlVmFsaWRhdGUudmFsaWRhdGUpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkcnVsZVZhbGlkYXRlLnZhbGlkYXRlKSArICc7ICc7XG4gICAgfVxuICB9IGVsc2UgaWYgKCRtYWNybykge1xuICAgIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICAgICRpdC5sZXZlbCsrO1xuICAgIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgICAkaXQuc2NoZW1hID0gJHJ1bGVWYWxpZGF0ZS52YWxpZGF0ZTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICcnO1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCkucmVwbGFjZSgvdmFsaWRhdGVcXC5zY2hlbWEvZywgJHZhbGlkYXRlQ29kZSk7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyAnICsgKCRjb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7XG4gICAgb3V0ICs9ICcgICcgKyAoJHZhbGlkYXRlQ29kZSkgKyAnLmNhbGwoICc7XG4gICAgaWYgKGl0Lm9wdHMucGFzc0NvbnRleHQpIHtcbiAgICAgIG91dCArPSAndGhpcyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnc2VsZic7XG4gICAgfVxuICAgIGlmICgkY29tcGlsZSB8fCAkckRlZi5zY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAsICcgKyAoJHNjaGVtYVZhbHVlKSArICcgLCAnICsgKCRkYXRhKSArICcgLCB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAsIChkYXRhUGF0aCB8fCBcXCdcXCcpJztcbiAgICBpZiAoaXQuZXJyb3JQYXRoICE9ICdcIlwiJykge1xuICAgICAgb3V0ICs9ICcgKyAnICsgKGl0LmVycm9yUGF0aCk7XG4gICAgfVxuICAgIHZhciAkcGFyZW50RGF0YSA9ICRkYXRhTHZsID8gJ2RhdGEnICsgKCgkZGF0YUx2bCAtIDEpIHx8ICcnKSA6ICdwYXJlbnREYXRhJyxcbiAgICAgICRwYXJlbnREYXRhUHJvcGVydHkgPSAkZGF0YUx2bCA/IGl0LmRhdGFQYXRoQXJyWyRkYXRhTHZsXSA6ICdwYXJlbnREYXRhUHJvcGVydHknO1xuICAgIG91dCArPSAnICwgJyArICgkcGFyZW50RGF0YSkgKyAnICwgJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICcgLCByb290RGF0YSApICAnO1xuICAgIHZhciBkZWZfY2FsbFJ1bGVWYWxpZGF0ZSA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICgkckRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJztcbiAgICAgIGlmICgkYXN5bmNLZXl3b3JkKSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC55aWVsZEF3YWl0KTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnJyArIChkZWZfY2FsbFJ1bGVWYWxpZGF0ZSkgKyAnOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJGFzeW5jS2V5d29yZCkge1xuICAgICAgICAkcnVsZUVycnMgPSAnY3VzdG9tRXJyb3JzJyArICRsdmw7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRydWxlRXJycykgKyAnID0gbnVsbDsgdHJ5IHsgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoaXQueWllbGRBd2FpdCkgKyAoZGVmX2NhbGxSdWxlVmFsaWRhdGUpICsgJzsgfSBjYXRjaCAoZSkgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGlmIChlIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSAnICsgKCRydWxlRXJycykgKyAnID0gZS5lcnJvcnM7IGVsc2UgdGhyb3cgZTsgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycnMpICsgJyA9IG51bGw7ICcgKyAoJHZhbGlkKSArICcgPSAnICsgKGRlZl9jYWxsUnVsZVZhbGlkYXRlKSArICc7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkckRlZi5tb2RpZnlpbmcpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcgPSAnICsgKCRwYXJlbnREYXRhKSArICdbJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICddOyc7XG4gIH1cbiAgaWYgKCR2YWxpZGF0ZVNjaGVtYSkge1xuICAgIG91dCArPSAnIH0nO1xuICB9XG4gIGlmICgkckRlZi52YWxpZCkge1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyBpZiAoICc7XG4gICAgaWYgKCRyRGVmLnZhbGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG91dCArPSAnICEnO1xuICAgICAgaWYgKCRtYWNybykge1xuICAgICAgICBvdXQgKz0gJycgKyAoJG5leHRWYWxpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHZhbGlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgJyArICghJHJEZWYudmFsaWQpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJykgeyAnO1xuICAgICRlcnJvcktleXdvcmQgPSAkcnVsZS5rZXl3b3JkO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJztcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdjdXN0b20nKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGtleXdvcmQ6IFxcJycgKyAoJHJ1bGUua2V5d29yZCkgKyAnXFwnIH0gJztcbiAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBwYXNzIFwiJyArICgkcnVsZS5rZXl3b3JkKSArICdcIiBrZXl3b3JkIHZhbGlkYXRpb25cXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIHZhciBkZWZfY3VzdG9tRXJyb3IgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoJGlubGluZSkge1xuICAgICAgaWYgKCRyRGVmLmVycm9ycykge1xuICAgICAgICBpZiAoJHJEZWYuZXJyb3JzICE9ICdmdWxsJykge1xuICAgICAgICAgIG91dCArPSAnICBmb3IgKHZhciAnICsgKCRpKSArICc9JyArICgkZXJycykgKyAnOyAnICsgKCRpKSArICc8ZXJyb3JzOyAnICsgKCRpKSArICcrKykgeyB2YXIgJyArICgkcnVsZUVycikgKyAnID0gdkVycm9yc1snICsgKCRpKSArICddOyBpZiAoJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID09PSB1bmRlZmluZWQpICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJzsgaWYgKCcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID09PSB1bmRlZmluZWQpIHsgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPSBcIicgKyAoJGVyclNjaGVtYVBhdGgpICsgJ1wiOyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYSA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICc7ICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhID0gJyArICgkZGF0YSkgKyAnOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgkckRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7ICcgKyAoZGVmX2N1c3RvbUVycm9yKSArICcgfSBlbHNlIHsgIGZvciAodmFyICcgKyAoJGkpICsgJz0nICsgKCRlcnJzKSArICc7ICcgKyAoJGkpICsgJzxlcnJvcnM7ICcgKyAoJGkpICsgJysrKSB7IHZhciAnICsgKCRydWxlRXJyKSArICcgPSB2RXJyb3JzWycgKyAoJGkpICsgJ107IGlmICgnICsgKCRydWxlRXJyKSArICcuZGF0YVBhdGggPT09IHVuZGVmaW5lZCkgJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID0gKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnOyBpZiAoJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCkgeyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hUGF0aCA9IFwiJyArICgkZXJyU2NoZW1hUGF0aCkgKyAnXCI7IH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hID0gJyArICgkc2NoZW1hVmFsdWUpICsgJzsgJyArICgkcnVsZUVycikgKyAnLmRhdGEgPSAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gfSAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgkbWFjcm8pIHtcbiAgICAgIG91dCArPSAnICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdjdXN0b20nKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGtleXdvcmQ6IFxcJycgKyAoJHJ1bGUua2V5d29yZCkgKyAnXFwnIH0gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcIicgKyAoJHJ1bGUua2V5d29yZCkgKyAnXCIga2V5d29yZCB2YWxpZGF0aW9uXFwnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCRyRGVmLmVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKEFycmF5LmlzQXJyYXkoJyArICgkcnVsZUVycnMpICsgJykpIHsgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSAnICsgKCRydWxlRXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSB2RXJyb3JzLmNvbmNhdCgnICsgKCRydWxlRXJycykgKyAnKTsgZXJyb3JzID0gdkVycm9ycy5sZW5ndGg7ICBmb3IgKHZhciAnICsgKCRpKSArICc9JyArICgkZXJycykgKyAnOyAnICsgKCRpKSArICc8ZXJyb3JzOyAnICsgKCRpKSArICcrKykgeyB2YXIgJyArICgkcnVsZUVycikgKyAnID0gdkVycm9yc1snICsgKCRpKSArICddOyBpZiAoJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID09PSB1bmRlZmluZWQpICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJzsgICcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID0gXCInICsgKCRlcnJTY2hlbWFQYXRoKSArICdcIjsgICc7XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hID0gJyArICgkc2NoZW1hVmFsdWUpICsgJzsgJyArICgkcnVsZUVycikgKyAnLmRhdGEgPSAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSB9IGVsc2UgeyAnICsgKGRlZl9jdXN0b21FcnJvcikgKyAnIH0gJztcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfZGVwZW5kZW5jaWVzKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRzY2hlbWFEZXBzID0ge30sXG4gICAgJHByb3BlcnR5RGVwcyA9IHt9O1xuICBmb3IgKCRwcm9wZXJ0eSBpbiAkc2NoZW1hKSB7XG4gICAgdmFyICRzY2ggPSAkc2NoZW1hWyRwcm9wZXJ0eV07XG4gICAgdmFyICRkZXBzID0gQXJyYXkuaXNBcnJheSgkc2NoKSA/ICRwcm9wZXJ0eURlcHMgOiAkc2NoZW1hRGVwcztcbiAgICAkZGVwc1skcHJvcGVydHldID0gJHNjaDtcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7JztcbiAgdmFyICRjdXJyZW50RXJyb3JQYXRoID0gaXQuZXJyb3JQYXRoO1xuICBvdXQgKz0gJ3ZhciBtaXNzaW5nJyArICgkbHZsKSArICc7JztcbiAgZm9yICh2YXIgJHByb3BlcnR5IGluICRwcm9wZXJ0eURlcHMpIHtcbiAgICAkZGVwcyA9ICRwcm9wZXJ0eURlcHNbJHByb3BlcnR5XTtcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YSkgKyAoaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHkpKSArICcgIT09IHVuZGVmaW5lZCAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyAmJiAoICc7XG4gICAgICB2YXIgYXJyMSA9ICRkZXBzO1xuICAgICAgaWYgKGFycjEpIHtcbiAgICAgICAgdmFyIF8kcHJvcGVydHksICRpID0gLTEsXG4gICAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAgICAgXyRwcm9wZXJ0eSA9IGFycjFbJGkgKz0gMV07XG4gICAgICAgICAgaWYgKCRpKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB8fCAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KF8kcHJvcGVydHkpO1xuICAgICAgICAgIG91dCArPSAnICggJyArICgkZGF0YSkgKyAoJHByb3ApICsgJyA9PT0gdW5kZWZpbmVkICYmIChtaXNzaW5nJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoaXQub3B0cy5qc29uUG9pbnRlcnMgPyBfJHByb3BlcnR5IDogJHByb3ApKSArICcpICkgJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ICs9ICcpKSB7ICAnO1xuICAgICAgdmFyICRwcm9wZXJ0eVBhdGggPSAnbWlzc2luZycgKyAkbHZsLFxuICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgIGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuanNvblBvaW50ZXJzID8gaXQudXRpbC5nZXRQYXRoRXhwcigkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5UGF0aCwgdHJ1ZSkgOiAkY3VycmVudEVycm9yUGF0aCArICcgKyAnICsgJHByb3BlcnR5UGF0aDtcbiAgICAgIH1cbiAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2RlcGVuZGVuY2llcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcHJvcGVydHk6IFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnXFwnLCBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnLCBkZXBzQ291bnQ6ICcgKyAoJGRlcHMubGVuZ3RoKSArICcsIGRlcHM6IFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHMubGVuZ3RoID09IDEgPyAkZGVwc1swXSA6ICRkZXBzLmpvaW4oXCIsIFwiKSkpICsgJ1xcJyB9ICc7XG4gICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGhhdmUgJztcbiAgICAgICAgICBpZiAoJGRlcHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIG91dCArPSAncHJvcGVydHkgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwc1swXSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJ3Byb3BlcnRpZXMgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwcy5qb2luKFwiLCBcIikpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgd2hlbiBwcm9wZXJ0eSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eSkpICsgJyBpcyBwcmVzZW50XFwnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyApIHsgJztcbiAgICAgIHZhciBhcnIyID0gJGRlcHM7XG4gICAgICBpZiAoYXJyMikge1xuICAgICAgICB2YXIgJHJlcVByb3BlcnR5LCBpMiA9IC0xLFxuICAgICAgICAgIGwyID0gYXJyMi5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaTIgPCBsMikge1xuICAgICAgICAgICRyZXFQcm9wZXJ0eSA9IGFycjJbaTIgKz0gMV07XG4gICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eSgkcmVxUHJvcGVydHkpLFxuICAgICAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9IGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRyZXFQcm9wZXJ0eSk7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoKCRjdXJyZW50RXJyb3JQYXRoLCAkcmVxUHJvcGVydHksIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGEpICsgKCRwcm9wKSArICcgPT09IHVuZGVmaW5lZCkgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdkZXBlbmRlbmNpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHByb3BlcnR5OiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eSkpICsgJ1xcJywgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJywgZGVwc0NvdW50OiAnICsgKCRkZXBzLmxlbmd0aCkgKyAnLCBkZXBzOiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzLmxlbmd0aCA9PSAxID8gJGRlcHNbMF0gOiAkZGVwcy5qb2luKFwiLCBcIikpKSArICdcXCcgfSAnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGhhdmUgJztcbiAgICAgICAgICAgICAgaWYgKCRkZXBzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0eSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzWzBdKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0aWVzICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHMuam9pbihcIiwgXCIpKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3V0ICs9ICcgd2hlbiBwcm9wZXJ0eSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eSkpICsgJyBpcyBwcmVzZW50XFwnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBvdXQgKz0gJyB9ICAgJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgfVxuICB9XG4gIGl0LmVycm9yUGF0aCA9ICRjdXJyZW50RXJyb3JQYXRoO1xuICB2YXIgJGN1cnJlbnRCYXNlSWQgPSAkaXQuYmFzZUlkO1xuICBmb3IgKHZhciAkcHJvcGVydHkgaW4gJHNjaGVtYURlcHMpIHtcbiAgICB2YXIgJHNjaCA9ICRzY2hlbWFEZXBzWyRwcm9wZXJ0eV07XG4gICAgaWYgKGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkge1xuICAgICAgb3V0ICs9ICcgJyArICgkbmV4dFZhbGlkKSArICcgPSB0cnVlOyBpZiAoJyArICgkZGF0YSkgKyAoaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHkpKSArICcgIT09IHVuZGVmaW5lZCkgeyAnO1xuICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHkpO1xuICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArIGl0LnV0aWwuZXNjYXBlRnJhZ21lbnQoJHByb3BlcnR5KTtcbiAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgICAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfZW51bShpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMudjUgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRpID0gJ2knICsgJGx2bCxcbiAgICAkdlNjaGVtYSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgaWYgKCEkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJHZTY2hlbWEpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsnO1xuICB9XG4gIG91dCArPSAndmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyBpZiAoc2NoZW1hJyArICgkbHZsKSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYScgKyAoJGx2bCkgKyAnKSkgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBlbHNlIHsnO1xuICB9XG4gIG91dCArPSAnJyArICgkdmFsaWQpICsgJyA9IGZhbHNlO2ZvciAodmFyICcgKyAoJGkpICsgJz0wOyAnICsgKCRpKSArICc8JyArICgkdlNjaGVtYSkgKyAnLmxlbmd0aDsgJyArICgkaSkgKyAnKyspIGlmIChlcXVhbCgnICsgKCRkYXRhKSArICcsICcgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddKSkgeyAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgYnJlYWs7IH0nO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnICB9ICAnO1xuICB9XG4gIG91dCArPSAnIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnZW51bScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgYWxsb3dlZFZhbHVlczogc2NoZW1hJyArICgkbHZsKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlc1xcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJyB9JztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9mb3JtYXQoaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIGlmIChpdC5vcHRzLmZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMudjUgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICR1bmtub3duRm9ybWF0cyA9IGl0Lm9wdHMudW5rbm93bkZvcm1hdHMsXG4gICAgJGFsbG93VW5rbm93biA9IEFycmF5LmlzQXJyYXkoJHVua25vd25Gb3JtYXRzKTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICB2YXIgJGZvcm1hdCA9ICdmb3JtYXQnICsgJGx2bDtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkZm9ybWF0KSArICcgPSBmb3JtYXRzWycgKyAoJHNjaGVtYVZhbHVlKSArICddOyB2YXIgaXNPYmplY3QnICsgKCRsdmwpICsgJyA9IHR5cGVvZiAnICsgKCRmb3JtYXQpICsgJyA9PSBcXCdvYmplY3RcXCcgJiYgISgnICsgKCRmb3JtYXQpICsgJyBpbnN0YW5jZW9mIFJlZ0V4cCkgJiYgJyArICgkZm9ybWF0KSArICcudmFsaWRhdGU7IGlmIChpc09iamVjdCcgKyAoJGx2bCkgKyAnKSB7ICc7XG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB2YXIgYXN5bmMnICsgKCRsdmwpICsgJyA9ICcgKyAoJGZvcm1hdCkgKyAnLmFzeW5jOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAnICsgKCRmb3JtYXQpICsgJyA9ICcgKyAoJGZvcm1hdCkgKyAnLnZhbGlkYXRlOyB9IGlmICggICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnc3RyaW5nXFwnKSB8fCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAoJztcbiAgICBpZiAoJHVua25vd25Gb3JtYXRzID09PSB0cnVlIHx8ICRhbGxvd1Vua25vd24pIHtcbiAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICYmICEnICsgKCRmb3JtYXQpICsgJyAnO1xuICAgICAgaWYgKCRhbGxvd1Vua25vd24pIHtcbiAgICAgICAgb3V0ICs9ICcgJiYgc2VsZi5fb3B0cy51bmtub3duRm9ybWF0cy5pbmRleE9mKCcgKyAoJHNjaGVtYVZhbHVlKSArICcpID09IC0xICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJykgfHwgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgKCcgKyAoJGZvcm1hdCkgKyAnICYmICEodHlwZW9mICcgKyAoJGZvcm1hdCkgKyAnID09IFxcJ2Z1bmN0aW9uXFwnID8gJztcbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIChhc3luYycgKyAoJGx2bCkgKyAnID8gJyArIChpdC55aWVsZEF3YWl0KSArICcgJyArICgkZm9ybWF0KSArICcoJyArICgkZGF0YSkgKyAnKSA6ICcgKyAoJGZvcm1hdCkgKyAnKCcgKyAoJGRhdGEpICsgJykpICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoJGZvcm1hdCkgKyAnKCcgKyAoJGRhdGEpICsgJykgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgOiAnICsgKCRmb3JtYXQpICsgJy50ZXN0KCcgKyAoJGRhdGEpICsgJykpKSkpIHsnO1xuICB9IGVsc2Uge1xuICAgIHZhciAkZm9ybWF0ID0gaXQuZm9ybWF0c1skc2NoZW1hXTtcbiAgICBpZiAoISRmb3JtYXQpIHtcbiAgICAgIGlmICgkdW5rbm93bkZvcm1hdHMgPT09IHRydWUgfHwgKCRhbGxvd1Vua25vd24gJiYgJHVua25vd25Gb3JtYXRzLmluZGV4T2YoJHNjaGVtYSkgPT0gLTEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQgXCInICsgJHNjaGVtYSArICdcIiBpcyB1c2VkIGluIHNjaGVtYSBhdCBwYXRoIFwiJyArIGl0LmVyclNjaGVtYVBhdGggKyAnXCInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghJGFsbG93VW5rbm93bikge1xuICAgICAgICAgIGNvbnNvbGUud2FybigndW5rbm93biBmb3JtYXQgXCInICsgJHNjaGVtYSArICdcIiBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJyArIGl0LmVyclNjaGVtYVBhdGggKyAnXCInKTtcbiAgICAgICAgICBpZiAoJHVua25vd25Gb3JtYXRzICE9PSAnaWdub3JlJykgY29uc29sZS53YXJuKCdJbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIGl0IHdpbGwgdGhyb3cgZXhjZXB0aW9uLiBTZWUgb3B0aW9uIHVua25vd25Gb3JtYXRzIGZvciBtb3JlIGluZm9ybWF0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciAkaXNPYmplY3QgPSB0eXBlb2YgJGZvcm1hdCA9PSAnb2JqZWN0JyAmJiAhKCRmb3JtYXQgaW5zdGFuY2VvZiBSZWdFeHApICYmICRmb3JtYXQudmFsaWRhdGU7XG4gICAgaWYgKCRpc09iamVjdCkge1xuICAgICAgdmFyICRhc3luYyA9ICRmb3JtYXQuYXN5bmMgPT09IHRydWU7XG4gICAgICAkZm9ybWF0ID0gJGZvcm1hdC52YWxpZGF0ZTtcbiAgICB9XG4gICAgaWYgKCRhc3luYykge1xuICAgICAgaWYgKCFpdC5hc3luYykgdGhyb3cgbmV3IEVycm9yKCdhc3luYyBmb3JtYXQgaW4gc3luYyBzY2hlbWEnKTtcbiAgICAgIHZhciAkZm9ybWF0UmVmID0gJ2Zvcm1hdHMnICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkc2NoZW1hKSArICcudmFsaWRhdGUnO1xuICAgICAgb3V0ICs9ICcgaWYgKCEoJyArIChpdC55aWVsZEF3YWl0KSArICcgJyArICgkZm9ybWF0UmVmKSArICcoJyArICgkZGF0YSkgKyAnKSkpIHsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgaWYgKCEgJztcbiAgICAgIHZhciAkZm9ybWF0UmVmID0gJ2Zvcm1hdHMnICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkc2NoZW1hKTtcbiAgICAgIGlmICgkaXNPYmplY3QpICRmb3JtYXRSZWYgKz0gJy52YWxpZGF0ZSc7XG4gICAgICBpZiAodHlwZW9mICRmb3JtYXQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdXQgKz0gJyAnICsgKCRmb3JtYXRSZWYpICsgJygnICsgKCRkYXRhKSArICcpICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyAnICsgKCRmb3JtYXRSZWYpICsgJy50ZXN0KCcgKyAoJGRhdGEpICsgJykgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnKSB7ICc7XG4gICAgfVxuICB9XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnZm9ybWF0JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBmb3JtYXQ6ICAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgIH1cbiAgICBvdXQgKz0gJyAgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgbWF0Y2ggZm9ybWF0IFwiJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICdcIlxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2l0ZW1zKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGlkeCA9ICdpJyArICRsdmwsXG4gICAgJGRhdGFOeHQgPSAkaXQuZGF0YUxldmVsID0gaXQuZGF0YUxldmVsICsgMSxcbiAgICAkbmV4dERhdGEgPSAnZGF0YScgKyAkZGF0YU54dCxcbiAgICAkY3VycmVudEJhc2VJZCA9IGl0LmJhc2VJZDtcbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzO3ZhciAnICsgKCR2YWxpZCkgKyAnOyc7XG4gIGlmIChBcnJheS5pc0FycmF5KCRzY2hlbWEpKSB7XG4gICAgdmFyICRhZGRpdGlvbmFsSXRlbXMgPSBpdC5zY2hlbWEuYWRkaXRpb25hbEl0ZW1zO1xuICAgIGlmICgkYWRkaXRpb25hbEl0ZW1zID09PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJGRhdGEpICsgJy5sZW5ndGggPD0gJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnOyAnO1xuICAgICAgdmFyICRjdXJyRXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsSXRlbXMnO1xuICAgICAgb3V0ICs9ICcgIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdhZGRpdGlvbmFsSXRlbXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWEubGVuZ3RoKSArICcgfSAnO1xuICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgaGF2ZSBtb3JlIHRoYW4gJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnIGl0ZW1zXFwnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiBmYWxzZSAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgfVxuICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAkZXJyU2NoZW1hUGF0aCA9ICRjdXJyRXJyU2NoZW1hUGF0aDtcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBhcnIxID0gJHNjaGVtYTtcbiAgICBpZiAoYXJyMSkge1xuICAgICAgdmFyICRzY2gsICRpID0gLTEsXG4gICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKCRpIDwgbDEpIHtcbiAgICAgICAgJHNjaCA9IGFycjFbJGkgKz0gMV07XG4gICAgICAgIGlmIChpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7IGlmICgnICsgKCRkYXRhKSArICcubGVuZ3RoID4gJyArICgkaSkgKyAnKSB7ICc7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRpICsgJ10nO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRpLCBpdC5vcHRzLmpzb25Qb2ludGVycywgdHJ1ZSk7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRpO1xuICAgICAgICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgJGFkZGl0aW9uYWxJdGVtcyA9PSAnb2JqZWN0JyAmJiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRhZGRpdGlvbmFsSXRlbXMsIGl0LlJVTEVTLmFsbCkpIHtcbiAgICAgICRpdC5zY2hlbWEgPSAkYWRkaXRpb25hbEl0ZW1zO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5hZGRpdGlvbmFsSXRlbXMnO1xuICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsSXRlbXMnO1xuICAgICAgb3V0ICs9ICcgJyArICgkbmV4dFZhbGlkKSArICcgPSB0cnVlOyBpZiAoJyArICgkZGF0YSkgKyAnLmxlbmd0aCA+ICcgKyAoJHNjaGVtYS5sZW5ndGgpICsgJykgeyAgZm9yICh2YXIgJyArICgkaWR4KSArICcgPSAnICsgKCRzY2hlbWEubGVuZ3RoKSArICc7ICcgKyAoJGlkeCkgKyAnIDwgJyArICgkZGF0YSkgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyAnO1xuICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAkaWR4LCBpdC5vcHRzLmpzb25Qb2ludGVycywgdHJ1ZSk7XG4gICAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAkaWR4ICsgJ10nO1xuICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRpZHg7XG4gICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dERhdGEpICsgJyA9ICcgKyAoJHBhc3NEYXRhKSArICc7ICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgfVxuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKCRuZXh0VmFsaWQpICsgJykgYnJlYWs7ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9IH0gICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2hlbWEsIGl0LlJVTEVTLmFsbCkpIHtcbiAgICAkaXQuc2NoZW1hID0gJHNjaGVtYTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoO1xuICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgb3V0ICs9ICcgIGZvciAodmFyICcgKyAoJGlkeCkgKyAnID0gJyArICgwKSArICc7ICcgKyAoJGlkeCkgKyAnIDwgJyArICgkZGF0YSkgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyAnO1xuICAgICRpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGlkeCwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRpZHggKyAnXSc7XG4gICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRpZHg7XG4gICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dERhdGEpICsgJyA9ICcgKyAoJHBhc3NEYXRhKSArICc7ICcgKyAoJGNvZGUpICsgJyAnO1xuICAgIH1cbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKCRuZXh0VmFsaWQpICsgJykgYnJlYWs7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgIH1cbiAgfVxuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMpICsgJyBpZiAoJyArICgkZXJycykgKyAnID09IGVycm9ycykgeyc7XG4gIH1cbiAgb3V0ID0gaXQudXRpbC5jbGVhblVwQ29kZShvdXQpO1xuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9tdWx0aXBsZU9mKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMudjUgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgb3V0ICs9ICd2YXIgZGl2aXNpb24nICsgKCRsdmwpICsgJztpZiAoJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgKCB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdudW1iZXJcXCcgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAoZGl2aXNpb24nICsgKCRsdmwpICsgJyA9ICcgKyAoJGRhdGEpICsgJyAvICcgKyAoJHNjaGVtYVZhbHVlKSArICcsICc7XG4gIGlmIChpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb24pIHtcbiAgICBvdXQgKz0gJyBNYXRoLmFicyhNYXRoLnJvdW5kKGRpdmlzaW9uJyArICgkbHZsKSArICcpIC0gZGl2aXNpb24nICsgKCRsdmwpICsgJykgPiAxZS0nICsgKGl0Lm9wdHMubXVsdGlwbGVPZlByZWNpc2lvbikgKyAnICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgZGl2aXNpb24nICsgKCRsdmwpICsgJyAhPT0gcGFyc2VJbnQoZGl2aXNpb24nICsgKCRsdmwpICsgJykgJztcbiAgfVxuICBvdXQgKz0gJyApICc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgICkgICc7XG4gIH1cbiAgb3V0ICs9ICcgKSB7ICAgJztcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdtdWx0aXBsZU9mJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtdWx0aXBsZU9mOiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlIG11bHRpcGxlIG9mICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKSArICdcXCcnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9ICc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfbm90KGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICBpZiAoaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoZW1hLCBpdC5SVUxFUy5hbGwpKSB7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7ICAnO1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgICRpdC5jcmVhdGVFcnJvcnMgPSBmYWxzZTtcbiAgICB2YXIgJGFsbEVycm9yc09wdGlvbjtcbiAgICBpZiAoJGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgICAkYWxsRXJyb3JzT3B0aW9uID0gJGl0Lm9wdHMuYWxsRXJyb3JzO1xuICAgICAgJGl0Lm9wdHMuYWxsRXJyb3JzID0gZmFsc2U7XG4gICAgfVxuICAgIG91dCArPSAnICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgJGl0LmNyZWF0ZUVycm9ycyA9IHRydWU7XG4gICAgaWYgKCRhbGxFcnJvcnNPcHRpb24pICRpdC5vcHRzLmFsbEVycm9ycyA9ICRhbGxFcnJvcnNPcHRpb247XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgICAnO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdub3QnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7fSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBiZSB2YWxpZFxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gJztcbiAgICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnbm90JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgYmUgdmFsaWRcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKGZhbHNlKSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX29uZU9mKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyIHByZXZWYWxpZCcgKyAoJGx2bCkgKyAnID0gZmFsc2U7dmFyICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsnO1xuICB2YXIgJGN1cnJlbnRCYXNlSWQgPSAkaXQuYmFzZUlkO1xuICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gIHZhciBhcnIxID0gJHNjaGVtYTtcbiAgaWYgKGFycjEpIHtcbiAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgIGlmIChpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpIHtcbiAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkaSArICddJztcbiAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRpO1xuICAgICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgIH1cbiAgICAgIGlmICgkaSkge1xuICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcgJiYgcHJldlZhbGlkJyArICgkbHZsKSArICcpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgZWxzZSB7ICc7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgJyArICgkdmFsaWQpICsgJyA9IHByZXZWYWxpZCcgKyAoJGx2bCkgKyAnID0gdHJ1ZTsnO1xuICAgIH1cbiAgfVxuICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICBvdXQgKz0gJycgKyAoJGNsb3NpbmdCcmFjZXMpICsgJ2lmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnb25lT2YnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7fSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgbWF0Y2ggZXhhY3RseSBvbmUgc2NoZW1hIGluIG9uZU9mXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0nO1xuICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICBvdXQgKz0gJyB9ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcGF0dGVybihpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkcmVnZXhwID0gJGlzRGF0YSA/ICcobmV3IFJlZ0V4cCgnICsgJHNjaGVtYVZhbHVlICsgJykpJyA6IGl0LnVzZVBhdHRlcm4oJHNjaGVtYSk7XG4gIG91dCArPSAnaWYgKCAnO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnc3RyaW5nXFwnKSB8fCAnO1xuICB9XG4gIG91dCArPSAnICEnICsgKCRyZWdleHApICsgJy50ZXN0KCcgKyAoJGRhdGEpICsgJykgKSB7ICAgJztcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdwYXR0ZXJuJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwYXR0ZXJuOiAgJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCInO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICsgXFwnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC51dGlsLmVzY2FwZVF1b3Rlcygkc2NoZW1hKSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJ1wiXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJ30gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wYXR0ZXJuUmVxdWlyZWQoaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRrZXkgPSAna2V5JyArICRsdmwsXG4gICAgJG1hdGNoZWQgPSAncGF0dGVybk1hdGNoZWQnICsgJGx2bCxcbiAgICAkY2xvc2luZ0JyYWNlcyA9ICcnLFxuICAgICRvd25Qcm9wZXJ0aWVzID0gaXQub3B0cy5vd25Qcm9wZXJ0aWVzO1xuICBvdXQgKz0gJ3ZhciAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsnO1xuICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gIGlmIChhcnIxKSB7XG4gICAgdmFyICRwUHJvcGVydHksIGkxID0gLTEsXG4gICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoaTEgPCBsMSkge1xuICAgICAgJHBQcm9wZXJ0eSA9IGFycjFbaTEgKz0gMV07XG4gICAgICBvdXQgKz0gJyB2YXIgJyArICgkbWF0Y2hlZCkgKyAnID0gZmFsc2U7IGZvciAodmFyICcgKyAoJGtleSkgKyAnIGluICcgKyAoJGRhdGEpICsgJykgeyAgJztcbiAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICBvdXQgKz0gJyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsICcgKyAoJGtleSkgKyAnKSkgY29udGludWU7ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAnICsgKCRtYXRjaGVkKSArICcgPSAnICsgKGl0LnVzZVBhdHRlcm4oJHBQcm9wZXJ0eSkpICsgJy50ZXN0KCcgKyAoJGtleSkgKyAnKTsgaWYgKCcgKyAoJG1hdGNoZWQpICsgJykgYnJlYWs7IH0gJztcbiAgICAgIHZhciAkbWlzc2luZ1BhdHRlcm4gPSBpdC51dGlsLmVzY2FwZVF1b3RlcygkcFByb3BlcnR5KTtcbiAgICAgIG91dCArPSAnIGlmICghJyArICgkbWF0Y2hlZCkgKyAnKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3BhdHRlcm5SZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1BhdHRlcm46IFxcJycgKyAoJG1pc3NpbmdQYXR0ZXJuKSArICdcXCcgfSAnO1xuICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBoYXZlIHByb3BlcnR5IG1hdGNoaW5nIHBhdHRlcm4gXFxcXFxcJycgKyAoJG1pc3NpbmdQYXR0ZXJuKSArICdcXFxcXFwnXFwnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gICAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgb3V0ICs9ICcnICsgKCRjbG9zaW5nQnJhY2VzKTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcHJvcGVydGllcyhpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRrZXkgPSAna2V5JyArICRsdmwsXG4gICAgJGRhdGFOeHQgPSAkaXQuZGF0YUxldmVsID0gaXQuZGF0YUxldmVsICsgMSxcbiAgICAkbmV4dERhdGEgPSAnZGF0YScgKyAkZGF0YU54dDtcbiAgdmFyICRzY2hlbWFLZXlzID0gT2JqZWN0LmtleXMoJHNjaGVtYSB8fCB7fSksXG4gICAgJHBQcm9wZXJ0aWVzID0gaXQuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzIHx8IHt9LFxuICAgICRwUHJvcGVydHlLZXlzID0gT2JqZWN0LmtleXMoJHBQcm9wZXJ0aWVzKSxcbiAgICAkYVByb3BlcnRpZXMgPSBpdC5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMsXG4gICAgJHNvbWVQcm9wZXJ0aWVzID0gJHNjaGVtYUtleXMubGVuZ3RoIHx8ICRwUHJvcGVydHlLZXlzLmxlbmd0aCxcbiAgICAkbm9BZGRpdGlvbmFsID0gJGFQcm9wZXJ0aWVzID09PSBmYWxzZSxcbiAgICAkYWRkaXRpb25hbElzU2NoZW1hID0gdHlwZW9mICRhUHJvcGVydGllcyA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkYVByb3BlcnRpZXMpLmxlbmd0aCxcbiAgICAkcmVtb3ZlQWRkaXRpb25hbCA9IGl0Lm9wdHMucmVtb3ZlQWRkaXRpb25hbCxcbiAgICAkY2hlY2tBZGRpdGlvbmFsID0gJG5vQWRkaXRpb25hbCB8fCAkYWRkaXRpb25hbElzU2NoZW1hIHx8ICRyZW1vdmVBZGRpdGlvbmFsLFxuICAgICRvd25Qcm9wZXJ0aWVzID0gaXQub3B0cy5vd25Qcm9wZXJ0aWVzLFxuICAgICRjdXJyZW50QmFzZUlkID0gaXQuYmFzZUlkO1xuICB2YXIgJHJlcXVpcmVkID0gaXQuc2NoZW1hLnJlcXVpcmVkO1xuICBpZiAoJHJlcXVpcmVkICYmICEoaXQub3B0cy52NSAmJiAkcmVxdWlyZWQuJGRhdGEpICYmICRyZXF1aXJlZC5sZW5ndGggPCBpdC5vcHRzLmxvb3BSZXF1aXJlZCkgdmFyICRyZXF1aXJlZEhhc2ggPSBpdC51dGlsLnRvSGFzaCgkcmVxdWlyZWQpO1xuICBpZiAoaXQub3B0cy52NSkge1xuICAgIHZhciAkcGdQcm9wZXJ0aWVzID0gaXQuc2NoZW1hLnBhdHRlcm5Hcm91cHMgfHwge30sXG4gICAgICAkcGdQcm9wZXJ0eUtleXMgPSBPYmplY3Qua2V5cygkcGdQcm9wZXJ0aWVzKTtcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsnO1xuICBpZiAoJGNoZWNrQWRkaXRpb25hbCkge1xuICAgIG91dCArPSAnIGZvciAodmFyICcgKyAoJGtleSkgKyAnIGluICcgKyAoJGRhdGEpICsgJykgeyAgJztcbiAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgJyArICgka2V5KSArICcpKSBjb250aW51ZTsgJztcbiAgICB9XG4gICAgaWYgKCRzb21lUHJvcGVydGllcykge1xuICAgICAgb3V0ICs9ICcgdmFyIGlzQWRkaXRpb25hbCcgKyAoJGx2bCkgKyAnID0gIShmYWxzZSAnO1xuICAgICAgaWYgKCRzY2hlbWFLZXlzLmxlbmd0aCkge1xuICAgICAgICBpZiAoJHNjaGVtYUtleXMubGVuZ3RoID4gNSkge1xuICAgICAgICAgIG91dCArPSAnIHx8IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJ1snICsgKCRrZXkpICsgJ10gJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYXJyMSA9ICRzY2hlbWFLZXlzO1xuICAgICAgICAgIGlmIChhcnIxKSB7XG4gICAgICAgICAgICB2YXIgJHByb3BlcnR5S2V5LCBpMSA9IC0xLFxuICAgICAgICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChpMSA8IGwxKSB7XG4gICAgICAgICAgICAgICRwcm9wZXJ0eUtleSA9IGFycjFbaTEgKz0gMV07XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICcgKyAoJGtleSkgKyAnID09ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkcHJvcGVydHlLZXkpKSArICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICgkcFByb3BlcnR5S2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGFycjIgPSAkcFByb3BlcnR5S2V5cztcbiAgICAgICAgaWYgKGFycjIpIHtcbiAgICAgICAgICB2YXIgJHBQcm9wZXJ0eSwgJGkgPSAtMSxcbiAgICAgICAgICAgIGwyID0gYXJyMi5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlICgkaSA8IGwyKSB7XG4gICAgICAgICAgICAkcFByb3BlcnR5ID0gYXJyMlskaSArPSAxXTtcbiAgICAgICAgICAgIG91dCArPSAnIHx8ICcgKyAoaXQudXNlUGF0dGVybigkcFByb3BlcnR5KSkgKyAnLnRlc3QoJyArICgka2V5KSArICcpICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52NSAmJiAkcGdQcm9wZXJ0eUtleXMgJiYgJHBnUHJvcGVydHlLZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIgYXJyMyA9ICRwZ1Byb3BlcnR5S2V5cztcbiAgICAgICAgaWYgKGFycjMpIHtcbiAgICAgICAgICB2YXIgJHBnUHJvcGVydHksICRpID0gLTEsXG4gICAgICAgICAgICBsMyA9IGFycjMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoJGkgPCBsMykge1xuICAgICAgICAgICAgJHBnUHJvcGVydHkgPSBhcnIzWyRpICs9IDFdO1xuICAgICAgICAgICAgb3V0ICs9ICcgfHwgJyArIChpdC51c2VQYXR0ZXJuKCRwZ1Byb3BlcnR5KSkgKyAnLnRlc3QoJyArICgka2V5KSArICcpICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyApOyBpZiAoaXNBZGRpdGlvbmFsJyArICgkbHZsKSArICcpIHsgJztcbiAgICB9XG4gICAgaWYgKCRyZW1vdmVBZGRpdGlvbmFsID09ICdhbGwnKSB7XG4gICAgICBvdXQgKz0gJyBkZWxldGUgJyArICgkZGF0YSkgKyAnWycgKyAoJGtleSkgKyAnXTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyICRjdXJyZW50RXJyb3JQYXRoID0gaXQuZXJyb3JQYXRoO1xuICAgICAgdmFyICRhZGRpdGlvbmFsUHJvcGVydHkgPSAnXFwnICsgJyArICRrZXkgKyAnICsgXFwnJztcbiAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRrZXksIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgIH1cbiAgICAgIGlmICgkbm9BZGRpdGlvbmFsKSB7XG4gICAgICAgIGlmICgkcmVtb3ZlQWRkaXRpb25hbCkge1xuICAgICAgICAgIG91dCArPSAnIGRlbGV0ZSAnICsgKCRkYXRhKSArICdbJyArICgka2V5KSArICddOyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gZmFsc2U7ICc7XG4gICAgICAgICAgdmFyICRjdXJyRXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbFByb3BlcnRpZXMnO1xuICAgICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdhZGRpdGlvbmFsUHJvcGVydGllcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgYWRkaXRpb25hbFByb3BlcnR5OiBcXCcnICsgKCRhZGRpdGlvbmFsUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXFwnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiBmYWxzZSAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gJGN1cnJFcnJTY2hlbWFQYXRoO1xuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBicmVhazsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoJGFkZGl0aW9uYWxJc1NjaGVtYSkge1xuICAgICAgICBpZiAoJHJlbW92ZUFkZGl0aW9uYWwgPT0gJ2ZhaWxpbmcnKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsgICc7XG4gICAgICAgICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgICAgICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRhUHJvcGVydGllcztcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLmFkZGl0aW9uYWxQcm9wZXJ0aWVzJztcbiAgICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL2FkZGl0aW9uYWxQcm9wZXJ0aWVzJztcbiAgICAgICAgICAkaXQuZXJyb3JQYXRoID0gaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5ID8gaXQuZXJyb3JQYXRoIDogaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRrZXksIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAka2V5ICsgJ10nO1xuICAgICAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAka2V5O1xuICAgICAgICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKCRuZXh0VmFsaWQpICsgJykgeyBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2YWxpZGF0ZS5lcnJvcnMgIT09IG51bGwpIHsgaWYgKGVycm9ycykgdmFsaWRhdGUuZXJyb3JzLmxlbmd0aCA9IGVycm9yczsgZWxzZSB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsOyB9IGRlbGV0ZSAnICsgKCRkYXRhKSArICdbJyArICgka2V5KSArICddOyB9ICAnO1xuICAgICAgICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRhUHJvcGVydGllcztcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLmFkZGl0aW9uYWxQcm9wZXJ0aWVzJztcbiAgICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL2FkZGl0aW9uYWxQcm9wZXJ0aWVzJztcbiAgICAgICAgICAkaXQuZXJyb3JQYXRoID0gaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5ID8gaXQuZXJyb3JQYXRoIDogaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRrZXksIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAka2V5ICsgJ10nO1xuICAgICAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAka2V5O1xuICAgICAgICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXQuZXJyb3JQYXRoID0gJGN1cnJlbnRFcnJvclBhdGg7XG4gICAgfVxuICAgIGlmICgkc29tZVByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAgJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgfVxuICB9XG4gIHZhciAkdXNlRGVmYXVsdHMgPSBpdC5vcHRzLnVzZURlZmF1bHRzICYmICFpdC5jb21wb3NpdGVSdWxlO1xuICBpZiAoJHNjaGVtYUtleXMubGVuZ3RoKSB7XG4gICAgdmFyIGFycjQgPSAkc2NoZW1hS2V5cztcbiAgICBpZiAoYXJyNCkge1xuICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTQgPSAtMSxcbiAgICAgICAgbDQgPSBhcnI0Lmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaTQgPCBsNCkge1xuICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnI0W2k0ICs9IDFdO1xuICAgICAgICB2YXIgJHNjaCA9ICRzY2hlbWFbJHByb3BlcnR5S2V5XTtcbiAgICAgICAgaWYgKGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkge1xuICAgICAgICAgIHZhciAkcHJvcCA9IGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5S2V5KSxcbiAgICAgICAgICAgICRwYXNzRGF0YSA9ICRkYXRhICsgJHByb3AsXG4gICAgICAgICAgICAkaGFzRGVmYXVsdCA9ICR1c2VEZWZhdWx0cyAmJiAkc2NoLmRlZmF1bHQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJHByb3A7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArIGl0LnV0aWwuZXNjYXBlRnJhZ21lbnQoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoKGl0LmVycm9yUGF0aCwgJHByb3BlcnR5S2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9IGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgJGNvZGUgPSBpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKTtcbiAgICAgICAgICAgIHZhciAkdXNlRGF0YSA9ICRwYXNzRGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyICR1c2VEYXRhID0gJG5leHREYXRhO1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGhhc0RlZmF1bHQpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoJHJlcXVpcmVkSGFzaCAmJiAkcmVxdWlyZWRIYXNoWyRwcm9wZXJ0eUtleV0pIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHVzZURhdGEpICsgJyA9PT0gdW5kZWZpbmVkKSB7ICcgKyAoJG5leHRWYWxpZCkgKyAnID0gZmFsc2U7ICc7XG4gICAgICAgICAgICAgIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aCxcbiAgICAgICAgICAgICAgICAkY3VyckVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCxcbiAgICAgICAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aCgkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5S2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9yZXF1aXJlZCc7XG4gICAgICAgICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gJGN1cnJFcnJTY2hlbWFQYXRoO1xuICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSBlbHNlIHsgJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHVzZURhdGEpICsgJyA9PT0gdW5kZWZpbmVkKSB7ICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgfSBlbHNlIHsgJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkdXNlRGF0YSkgKyAnICE9PSB1bmRlZmluZWQpIHsgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkY29kZSkgKyAnIH0gJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdmFyIGFycjUgPSAkcFByb3BlcnR5S2V5cztcbiAgaWYgKGFycjUpIHtcbiAgICB2YXIgJHBQcm9wZXJ0eSwgaTUgPSAtMSxcbiAgICAgIGw1ID0gYXJyNS5sZW5ndGggLSAxO1xuICAgIHdoaWxlIChpNSA8IGw1KSB7XG4gICAgICAkcFByb3BlcnR5ID0gYXJyNVtpNSArPSAxXTtcbiAgICAgIHZhciAkc2NoID0gJHBQcm9wZXJ0aWVzWyRwUHJvcGVydHldO1xuICAgICAgaWYgKGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkge1xuICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5wYXR0ZXJuUHJvcGVydGllcycgKyBpdC51dGlsLmdldFByb3BlcnR5KCRwUHJvcGVydHkpO1xuICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL3BhdHRlcm5Qcm9wZXJ0aWVzLycgKyBpdC51dGlsLmVzY2FwZUZyYWdtZW50KCRwUHJvcGVydHkpO1xuICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgICc7XG4gICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgIG91dCArPSAnIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgJyArICgka2V5KSArICcpKSBjb250aW51ZTsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyBpZiAoJyArIChpdC51c2VQYXR0ZXJuKCRwUHJvcGVydHkpKSArICcudGVzdCgnICsgKCRrZXkpICsgJykpIHsgJztcbiAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRrZXkgKyAnXSc7XG4gICAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAka2V5O1xuICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBlbHNlICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9ICAnO1xuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoaXQub3B0cy52NSkge1xuICAgIHZhciBhcnI2ID0gJHBnUHJvcGVydHlLZXlzO1xuICAgIGlmIChhcnI2KSB7XG4gICAgICB2YXIgJHBnUHJvcGVydHksIGk2ID0gLTEsXG4gICAgICAgIGw2ID0gYXJyNi5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGk2IDwgbDYpIHtcbiAgICAgICAgJHBnUHJvcGVydHkgPSBhcnI2W2k2ICs9IDFdO1xuICAgICAgICB2YXIgJHBnU2NoZW1hID0gJHBnUHJvcGVydGllc1skcGdQcm9wZXJ0eV0sXG4gICAgICAgICAgJHNjaCA9ICRwZ1NjaGVtYS5zY2hlbWE7XG4gICAgICAgIGlmIChpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnBhdHRlcm5Hcm91cHMnICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkcGdQcm9wZXJ0eSkgKyAnLnNjaGVtYSc7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9wYXR0ZXJuR3JvdXBzLycgKyBpdC51dGlsLmVzY2FwZUZyYWdtZW50KCRwZ1Byb3BlcnR5KSArICcvc2NoZW1hJztcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgcGdQcm9wQ291bnQnICsgKCRsdmwpICsgJyA9IDA7IGZvciAodmFyICcgKyAoJGtleSkgKyAnIGluICcgKyAoJGRhdGEpICsgJykgeyAgJztcbiAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgJyArICgka2V5KSArICcpKSBjb250aW51ZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXNlUGF0dGVybigkcGdQcm9wZXJ0eSkpICsgJy50ZXN0KCcgKyAoJGtleSkgKyAnKSkgeyBwZ1Byb3BDb3VudCcgKyAoJGx2bCkgKyAnKys7ICc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBlbHNlICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciAkcGdNaW4gPSAkcGdTY2hlbWEubWluaW11bSxcbiAgICAgICAgICAgICRwZ01heCA9ICRwZ1NjaGVtYS5tYXhpbXVtO1xuICAgICAgICAgIGlmICgkcGdNaW4gIT09IHVuZGVmaW5lZCB8fCAkcGdNYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyAnO1xuICAgICAgICAgICAgdmFyICRjdXJyRXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgICAgICAgICAgaWYgKCRwZ01pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHZhciAkbGltaXQgPSAkcGdNaW4sXG4gICAgICAgICAgICAgICAgJHJlYXNvbiA9ICdtaW5pbXVtJyxcbiAgICAgICAgICAgICAgICAkbW9yZU9yTGVzcyA9ICdsZXNzJztcbiAgICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9IHBnUHJvcENvdW50JyArICgkbHZsKSArICcgPj0gJyArICgkcGdNaW4pICsgJzsgJztcbiAgICAgICAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9wYXR0ZXJuR3JvdXBzL21pbmltdW0nO1xuICAgICAgICAgICAgICBvdXQgKz0gJyAgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgICAgICAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdwYXR0ZXJuR3JvdXBzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyByZWFzb246IFxcJycgKyAoJHJlYXNvbikgKyAnXFwnLCBsaW1pdDogJyArICgkbGltaXQpICsgJywgcGF0dGVybjogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcGdQcm9wZXJ0eSkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgaGF2ZSAnICsgKCRtb3JlT3JMZXNzKSArICcgdGhhbiAnICsgKCRsaW1pdCkgKyAnIHByb3BlcnRpZXMgbWF0Y2hpbmcgcGF0dGVybiBcIicgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHBnUHJvcGVydHkpKSArICdcIlxcJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICAgIGlmICgkcGdNYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIGVsc2UgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCRwZ01heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHZhciAkbGltaXQgPSAkcGdNYXgsXG4gICAgICAgICAgICAgICAgJHJlYXNvbiA9ICdtYXhpbXVtJyxcbiAgICAgICAgICAgICAgICAkbW9yZU9yTGVzcyA9ICdtb3JlJztcbiAgICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9IHBnUHJvcENvdW50JyArICgkbHZsKSArICcgPD0gJyArICgkcGdNYXgpICsgJzsgJztcbiAgICAgICAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9wYXR0ZXJuR3JvdXBzL21heGltdW0nO1xuICAgICAgICAgICAgICBvdXQgKz0gJyAgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgICAgICAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdwYXR0ZXJuR3JvdXBzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyByZWFzb246IFxcJycgKyAoJHJlYXNvbikgKyAnXFwnLCBsaW1pdDogJyArICgkbGltaXQpICsgJywgcGF0dGVybjogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcGdQcm9wZXJ0eSkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgaGF2ZSAnICsgKCRtb3JlT3JMZXNzKSArICcgdGhhbiAnICsgKCRsaW1pdCkgKyAnIHByb3BlcnRpZXMgbWF0Y2hpbmcgcGF0dGVybiBcIicgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHBnUHJvcGVydHkpKSArICdcIlxcJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9ICRjdXJyRXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCR2YWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcmVmKGl0LCAka2V5d29yZCkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGFzeW5jLCAkcmVmQ29kZTtcbiAgaWYgKCRzY2hlbWEgPT0gJyMnIHx8ICRzY2hlbWEgPT0gJyMvJykge1xuICAgIGlmIChpdC5pc1Jvb3QpIHtcbiAgICAgICRhc3luYyA9IGl0LmFzeW5jO1xuICAgICAgJHJlZkNvZGUgPSAndmFsaWRhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICAkYXN5bmMgPSBpdC5yb290LnNjaGVtYS4kYXN5bmMgPT09IHRydWU7XG4gICAgICAkcmVmQ29kZSA9ICdyb290LnJlZlZhbFswXSc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciAkcmVmVmFsID0gaXQucmVzb2x2ZVJlZihpdC5iYXNlSWQsICRzY2hlbWEsIGl0LmlzUm9vdCk7XG4gICAgaWYgKCRyZWZWYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyICRtZXNzYWdlID0gJ2NhblxcJ3QgcmVzb2x2ZSByZWZlcmVuY2UgJyArICRzY2hlbWEgKyAnIGZyb20gaWQgJyArIGl0LmJhc2VJZDtcbiAgICAgIGlmIChpdC5vcHRzLm1pc3NpbmdSZWZzID09ICdmYWlsJykge1xuICAgICAgICBjb25zb2xlLmxvZygkbWVzc2FnZSk7XG4gICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnJHJlZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcmVmOiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdjYW5cXFxcXFwndCByZXNvbHZlIHJlZmVyZW5jZSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKSArICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmIChmYWxzZSkgeyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGl0Lm9wdHMubWlzc2luZ1JlZnMgPT0gJ2lnbm9yZScpIHtcbiAgICAgICAgY29uc29sZS5sb2coJG1lc3NhZ2UpO1xuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciAkZXJyb3IgPSBuZXcgRXJyb3IoJG1lc3NhZ2UpO1xuICAgICAgICAkZXJyb3IubWlzc2luZ1JlZiA9IGl0LnJlc29sdmUudXJsKGl0LmJhc2VJZCwgJHNjaGVtYSk7XG4gICAgICAgICRlcnJvci5taXNzaW5nU2NoZW1hID0gaXQucmVzb2x2ZS5ub3JtYWxpemVJZChpdC5yZXNvbHZlLmZ1bGxQYXRoKCRlcnJvci5taXNzaW5nUmVmKSk7XG4gICAgICAgIHRocm93ICRlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCRyZWZWYWwuaW5saW5lKSB7XG4gICAgICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgICAgICRpdC5sZXZlbCsrO1xuICAgICAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICAgICAgJGl0LnNjaGVtYSA9ICRyZWZWYWwuc2NoZW1hO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSAnJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJHNjaGVtYTtcbiAgICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCkucmVwbGFjZSgvdmFsaWRhdGVcXC5zY2hlbWEvZywgJHJlZlZhbC5jb2RlKTtcbiAgICAgIG91dCArPSAnICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICRhc3luYyA9ICRyZWZWYWwuJGFzeW5jID09PSB0cnVlO1xuICAgICAgJHJlZkNvZGUgPSAkcmVmVmFsLmNvZGU7XG4gICAgfVxuICB9XG4gIGlmICgkcmVmQ29kZSkge1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJztcbiAgICBpZiAoaXQub3B0cy5wYXNzQ29udGV4dCkge1xuICAgICAgb3V0ICs9ICcgJyArICgkcmVmQ29kZSkgKyAnLmNhbGwodGhpcywgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgJyArICgkcmVmQ29kZSkgKyAnKCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcsIChkYXRhUGF0aCB8fCBcXCdcXCcpJztcbiAgICBpZiAoaXQuZXJyb3JQYXRoICE9ICdcIlwiJykge1xuICAgICAgb3V0ICs9ICcgKyAnICsgKGl0LmVycm9yUGF0aCk7XG4gICAgfVxuICAgIHZhciAkcGFyZW50RGF0YSA9ICRkYXRhTHZsID8gJ2RhdGEnICsgKCgkZGF0YUx2bCAtIDEpIHx8ICcnKSA6ICdwYXJlbnREYXRhJyxcbiAgICAgICRwYXJlbnREYXRhUHJvcGVydHkgPSAkZGF0YUx2bCA/IGl0LmRhdGFQYXRoQXJyWyRkYXRhTHZsXSA6ICdwYXJlbnREYXRhUHJvcGVydHknO1xuICAgIG91dCArPSAnICwgJyArICgkcGFyZW50RGF0YSkgKyAnICwgJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICcsIHJvb3REYXRhKSAgJztcbiAgICB2YXIgX19jYWxsVmFsaWRhdGUgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoJGFzeW5jKSB7XG4gICAgICBpZiAoIWl0LmFzeW5jKSB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jIHNjaGVtYSByZWZlcmVuY2VkIGJ5IHN5bmMgc2NoZW1hJyk7XG4gICAgICBvdXQgKz0gJyB0cnkgeyAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICd2YXIgJyArICgkdmFsaWQpICsgJyA9JztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICcgKyAoaXQueWllbGRBd2FpdCkgKyAnICcgKyAoX19jYWxsVmFsaWRhdGUpICsgJzsgfSBjYXRjaCAoZSkgeyBpZiAoIShlIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSkgdGhyb3cgZTsgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBlLmVycm9yczsgZWxzZSB2RXJyb3JzID0gdkVycm9ycy5jb25jYXQoZS5lcnJvcnMpOyBlcnJvcnMgPSB2RXJyb3JzLmxlbmd0aDsgfSAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHZhbGlkKSArICcpIHsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKF9fY2FsbFZhbGlkYXRlKSArICcpIHsgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSAnICsgKCRyZWZDb2RlKSArICcuZXJyb3JzOyBlbHNlIHZFcnJvcnMgPSB2RXJyb3JzLmNvbmNhdCgnICsgKCRyZWZDb2RlKSArICcuZXJyb3JzKTsgZXJyb3JzID0gdkVycm9ycy5sZW5ndGg7IH0gJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9yZXF1aXJlZChpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMudjUgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICR2U2NoZW1hID0gJ3NjaGVtYScgKyAkbHZsO1xuICBpZiAoISRpc0RhdGEpIHtcbiAgICBpZiAoJHNjaGVtYS5sZW5ndGggPCBpdC5vcHRzLmxvb3BSZXF1aXJlZCAmJiBpdC5zY2hlbWEucHJvcGVydGllcyAmJiBPYmplY3Qua2V5cyhpdC5zY2hlbWEucHJvcGVydGllcykubGVuZ3RoKSB7XG4gICAgICB2YXIgJHJlcXVpcmVkID0gW107XG4gICAgICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gICAgICBpZiAoYXJyMSkge1xuICAgICAgICB2YXIgJHByb3BlcnR5LCBpMSA9IC0xLFxuICAgICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaTEgPCBsMSkge1xuICAgICAgICAgICRwcm9wZXJ0eSA9IGFycjFbaTEgKz0gMV07XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eVNjaCA9IGl0LnNjaGVtYS5wcm9wZXJ0aWVzWyRwcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKCEoJHByb3BlcnR5U2NoICYmIGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHByb3BlcnR5U2NoLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICAgICAgICAgJHJlcXVpcmVkWyRyZXF1aXJlZC5sZW5ndGhdID0gJHByb3BlcnR5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgJHJlcXVpcmVkID0gJHNjaGVtYTtcbiAgICB9XG4gIH1cbiAgaWYgKCRpc0RhdGEgfHwgJHJlcXVpcmVkLmxlbmd0aCkge1xuICAgIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aCxcbiAgICAgICRsb29wUmVxdWlyZWQgPSAkaXNEYXRhIHx8ICRyZXF1aXJlZC5sZW5ndGggPj0gaXQub3B0cy5sb29wUmVxdWlyZWQ7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIHZhciBtaXNzaW5nJyArICgkbHZsKSArICc7ICc7XG4gICAgICBpZiAoJGxvb3BSZXF1aXJlZCkge1xuICAgICAgICBpZiAoISRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdlNjaGVtYSkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkaSA9ICdpJyArICRsdmwsXG4gICAgICAgICAgJHByb3BlcnR5UGF0aCA9ICdzY2hlbWEnICsgJGx2bCArICdbJyArICRpICsgJ10nLFxuICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSAnXFwnICsgJyArICRwcm9wZXJ0eVBhdGggKyAnICsgXFwnJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKHNjaGVtYScgKyAoJGx2bCkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEnICsgKCRsdmwpICsgJykpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgZWxzZSB7JztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRpKSArICcgPSAwOyAnICsgKCRpKSArICcgPCAnICsgKCR2U2NoZW1hKSArICcubGVuZ3RoOyAnICsgKCRpKSArICcrKykgeyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkZGF0YSkgKyAnWycgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddXSAhPT0gdW5kZWZpbmVkOyBpZiAoIScgKyAoJHZhbGlkKSArICcpIGJyZWFrOyB9ICc7XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgIH0gICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gZWxzZSB7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyBpZiAoICc7XG4gICAgICAgIHZhciBhcnIyID0gJHJlcXVpcmVkO1xuICAgICAgICBpZiAoYXJyMikge1xuICAgICAgICAgIHZhciBfJHByb3BlcnR5LCAkaSA9IC0xLFxuICAgICAgICAgICAgbDIgPSBhcnIyLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKCRpIDwgbDIpIHtcbiAgICAgICAgICAgIF8kcHJvcGVydHkgPSBhcnIyWyRpICs9IDFdO1xuICAgICAgICAgICAgaWYgKCRpKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KF8kcHJvcGVydHkpO1xuICAgICAgICAgICAgb3V0ICs9ICcgKCAnICsgKCRkYXRhKSArICgkcHJvcCkgKyAnID09PSB1bmRlZmluZWQgJiYgKG1pc3NpbmcnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZyhpdC5vcHRzLmpzb25Qb2ludGVycyA/IF8kcHJvcGVydHkgOiAkcHJvcCkpICsgJykgKSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJykgeyAgJztcbiAgICAgICAgdmFyICRwcm9wZXJ0eVBhdGggPSAnbWlzc2luZycgKyAkbHZsLFxuICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSAnXFwnICsgJyArICRwcm9wZXJ0eVBhdGggKyAnICsgXFwnJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuanNvblBvaW50ZXJzID8gaXQudXRpbC5nZXRQYXRoRXhwcigkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5UGF0aCwgdHJ1ZSkgOiAkY3VycmVudEVycm9yUGF0aCArICcgKyAnICsgJHByb3BlcnR5UGF0aDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9IGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJGxvb3BSZXF1aXJlZCkge1xuICAgICAgICBpZiAoISRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdlNjaGVtYSkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkaSA9ICdpJyArICRsdmwsXG4gICAgICAgICAgJHByb3BlcnR5UGF0aCA9ICdzY2hlbWEnICsgJGx2bCArICdbJyArICRpICsgJ10nLFxuICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSAnXFwnICsgJyArICRwcm9wZXJ0eVBhdGggKyAnICsgXFwnJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCR2U2NoZW1hKSArICcgJiYgIUFycmF5LmlzQXJyYXkoJyArICgkdlNjaGVtYSkgKyAnKSkgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gZWxzZSBpZiAoJyArICgkdlNjaGVtYSkgKyAnICE9PSB1bmRlZmluZWQpIHsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRpKSArICcgPSAwOyAnICsgKCRpKSArICcgPCAnICsgKCR2U2NoZW1hKSArICcubGVuZ3RoOyAnICsgKCRpKSArICcrKykgeyBpZiAoJyArICgkZGF0YSkgKyAnWycgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddXSA9PT0gdW5kZWZpbmVkKSB7ICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gfSAnO1xuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnICB9ICAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXJyMyA9ICRyZXF1aXJlZDtcbiAgICAgICAgaWYgKGFycjMpIHtcbiAgICAgICAgICB2YXIgJHJlcVByb3BlcnR5LCBpMyA9IC0xLFxuICAgICAgICAgICAgbDMgPSBhcnIzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKGkzIDwgbDMpIHtcbiAgICAgICAgICAgICRyZXFQcm9wZXJ0eSA9IGFycjNbaTMgKz0gMV07XG4gICAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRyZXFQcm9wZXJ0eSksXG4gICAgICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSBpdC51dGlsLmVzY2FwZVF1b3RlcygkcmVxUHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGgoJGN1cnJlbnRFcnJvclBhdGgsICRyZXFQcm9wZXJ0eSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGEpICsgKCRwcm9wKSArICcgPT09IHVuZGVmaW5lZCkgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgfSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgfSBlbHNlIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgaWYgKHRydWUpIHsnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3N3aXRjaChpdCwgJGtleXdvcmQpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRpZlBhc3NlZCA9ICdpZlBhc3NlZCcgKyBpdC5sZXZlbCxcbiAgICAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQsXG4gICAgJHNob3VsZENvbnRpbnVlO1xuICBvdXQgKz0gJ3ZhciAnICsgKCRpZlBhc3NlZCkgKyAnOyc7XG4gIHZhciBhcnIxID0gJHNjaGVtYTtcbiAgaWYgKGFycjEpIHtcbiAgICB2YXIgJHNjaCwgJGNhc2VJbmRleCA9IC0xLFxuICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCRjYXNlSW5kZXggPCBsMSkge1xuICAgICAgJHNjaCA9IGFycjFbJGNhc2VJbmRleCArPSAxXTtcbiAgICAgIGlmICgkY2FzZUluZGV4ICYmICEkc2hvdWxkQ29udGludWUpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKCRpZlBhc3NlZCkgKyAnKSB7ICc7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIH1cbiAgICAgIGlmICgkc2NoLmlmICYmIGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaC5pZiwgaXQuUlVMRVMuYWxsKSkge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzOyAgICc7XG4gICAgICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICAgICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICAgICAgJGl0LmNyZWF0ZUVycm9ycyA9IGZhbHNlO1xuICAgICAgICAkaXQuc2NoZW1hID0gJHNjaC5pZjtcbiAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRjYXNlSW5kZXggKyAnXS5pZic7XG4gICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkY2FzZUluZGV4ICsgJy9pZic7XG4gICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICRpdC5jcmVhdGVFcnJvcnMgPSB0cnVlO1xuICAgICAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgICAgICBvdXQgKz0gJyAnICsgKCRpZlBhc3NlZCkgKyAnID0gJyArICgkbmV4dFZhbGlkKSArICc7IGlmICgnICsgKCRpZlBhc3NlZCkgKyAnKSB7ICAnO1xuICAgICAgICBpZiAodHlwZW9mICRzY2gudGhlbiA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBpZiAoJHNjaC50aGVuID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnc3dpdGNoJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBjYXNlSW5kZXg6ICcgKyAoJGNhc2VJbmRleCkgKyAnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcInN3aXRjaFwiIGtleXdvcmQgdmFsaWRhdGlvblxcJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gJyArICgkc2NoLnRoZW4pICsgJzsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaC50aGVuO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkY2FzZUluZGV4ICsgJ10udGhlbic7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRjYXNlSW5kZXggKyAnL3RoZW4nO1xuICAgICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyAgfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkaWZQYXNzZWQpICsgJyA9IHRydWU7ICAnO1xuICAgICAgICBpZiAodHlwZW9mICRzY2gudGhlbiA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBpZiAoJHNjaC50aGVuID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnc3dpdGNoJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBjYXNlSW5kZXg6ICcgKyAoJGNhc2VJbmRleCkgKyAnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcInN3aXRjaFwiIGtleXdvcmQgdmFsaWRhdGlvblxcJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHsgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gJyArICgkc2NoLnRoZW4pICsgJzsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaC50aGVuO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkY2FzZUluZGV4ICsgJ10udGhlbic7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRjYXNlSW5kZXggKyAnL3RoZW4nO1xuICAgICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJHNob3VsZENvbnRpbnVlID0gJHNjaC5jb250aW51ZVxuICAgIH1cbiAgfVxuICBvdXQgKz0gJycgKyAoJGNsb3NpbmdCcmFjZXMpICsgJ3ZhciAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkbmV4dFZhbGlkKSArICc7ICc7XG4gIG91dCA9IGl0LnV0aWwuY2xlYW5VcENvZGUob3V0KTtcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfdW5pcXVlSXRlbXMoaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLnY1ICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIGlmICgoJHNjaGVtYSB8fCAkaXNEYXRhKSAmJiBpdC5vcHRzLnVuaXF1ZUl0ZW1zICE9PSBmYWxzZSkge1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyB2YXIgJyArICgkdmFsaWQpICsgJzsgaWYgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IGZhbHNlIHx8ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGVsc2UgaWYgKHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ2Jvb2xlYW5cXCcpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgZWxzZSB7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCcgKyAoJGRhdGEpICsgJy5sZW5ndGggPiAxKSB7IHZhciBpID0gJyArICgkZGF0YSkgKyAnLmxlbmd0aCwgajsgb3V0ZXI6IGZvciAoO2ktLTspIHsgZm9yIChqID0gaTsgai0tOykgeyBpZiAoZXF1YWwoJyArICgkZGF0YSkgKyAnW2ldLCAnICsgKCRkYXRhKSArICdbal0pKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgYnJlYWsgb3V0ZXI7IH0gfSB9IH0gJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcgIH0gICc7XG4gICAgfVxuICAgIG91dCArPSAnIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3VuaXF1ZUl0ZW1zJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBpOiBpLCBqOiBqIH0gJztcbiAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgaGF2ZSBkdXBsaWNhdGUgaXRlbXMgKGl0ZW1zICMjIFxcJyArIGogKyBcXCcgYW5kIFxcJyArIGkgKyBcXCcgYXJlIGlkZW50aWNhbClcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIHZhciBfX2VyciA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfdmFsaWRhdGUoaXQsICRrZXl3b3JkKSB7XG4gIHZhciBvdXQgPSAnJztcbiAgdmFyICRhc3luYyA9IGl0LnNjaGVtYS4kYXN5bmMgPT09IHRydWU7XG4gIGlmIChpdC5pc1RvcCkge1xuICAgIHZhciAkdG9wID0gaXQuaXNUb3AsXG4gICAgICAkbHZsID0gaXQubGV2ZWwgPSAwLFxuICAgICAgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWwgPSAwLFxuICAgICAgJGRhdGEgPSAnZGF0YSc7XG4gICAgaXQucm9vdElkID0gaXQucmVzb2x2ZS5mdWxsUGF0aChpdC5yb290LnNjaGVtYS5pZCk7XG4gICAgaXQuYmFzZUlkID0gaXQuYmFzZUlkIHx8IGl0LnJvb3RJZDtcbiAgICBpZiAoJGFzeW5jKSB7XG4gICAgICBpdC5hc3luYyA9IHRydWU7XG4gICAgICB2YXIgJGVzNyA9IGl0Lm9wdHMuYXN5bmMgPT0gJ2VzNyc7XG4gICAgICBpdC55aWVsZEF3YWl0ID0gJGVzNyA/ICdhd2FpdCcgOiAneWllbGQnO1xuICAgIH1cbiAgICBkZWxldGUgaXQuaXNUb3A7XG4gICAgaXQuZGF0YVBhdGhBcnIgPSBbdW5kZWZpbmVkXTtcbiAgICBvdXQgKz0gJyB2YXIgdmFsaWRhdGUgPSAnO1xuICAgIGlmICgkYXN5bmMpIHtcbiAgICAgIGlmICgkZXM3KSB7XG4gICAgICAgIG91dCArPSAnIChhc3luYyBmdW5jdGlvbiAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGl0Lm9wdHMuYXN5bmMgPT0gJ2NvKicpIHtcbiAgICAgICAgICBvdXQgKz0gJ2NvLndyYXAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnKGZ1bmN0aW9uKiAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAoZnVuY3Rpb24gJztcbiAgICB9XG4gICAgb3V0ICs9ICcgKGRhdGEsIGRhdGFQYXRoLCBwYXJlbnREYXRhLCBwYXJlbnREYXRhUHJvcGVydHksIHJvb3REYXRhKSB7IFxcJ3VzZSBzdHJpY3RcXCc7IHZhciB2RXJyb3JzID0gbnVsbDsgJztcbiAgICBvdXQgKz0gJyB2YXIgZXJyb3JzID0gMDsgICAgICc7XG4gICAgb3V0ICs9ICcgaWYgKHJvb3REYXRhID09PSB1bmRlZmluZWQpIHJvb3REYXRhID0gZGF0YTsnO1xuICB9IGVsc2Uge1xuICAgIHZhciAkbHZsID0gaXQubGV2ZWwsXG4gICAgICAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbCxcbiAgICAgICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgICBpZiAoaXQuc2NoZW1hLmlkKSBpdC5iYXNlSWQgPSBpdC5yZXNvbHZlLnVybChpdC5iYXNlSWQsIGl0LnNjaGVtYS5pZCk7XG4gICAgaWYgKCRhc3luYyAmJiAhaXQuYXN5bmMpIHRocm93IG5ldyBFcnJvcignYXN5bmMgc2NoZW1hIGluIHN5bmMgc2NoZW1hJyk7XG4gICAgb3V0ICs9ICcgdmFyIGVycnNfJyArICgkbHZsKSArICcgPSBlcnJvcnM7JztcbiAgfVxuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmwsXG4gICAgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycyxcbiAgICAkY2xvc2luZ0JyYWNlczEgPSAnJyxcbiAgICAkY2xvc2luZ0JyYWNlczIgPSAnJztcbiAgdmFyICR0eXBlU2NoZW1hID0gaXQuc2NoZW1hLnR5cGUsXG4gICAgJHR5cGVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSgkdHlwZVNjaGVtYSk7XG4gIGlmICgkdHlwZVNjaGVtYSAmJiBpdC5vcHRzLmNvZXJjZVR5cGVzKSB7XG4gICAgdmFyICRjb2VyY2VUb1R5cGVzID0gaXQudXRpbC5jb2VyY2VUb1R5cGVzKGl0Lm9wdHMuY29lcmNlVHlwZXMsICR0eXBlU2NoZW1hKTtcbiAgICBpZiAoJGNvZXJjZVRvVHlwZXMpIHtcbiAgICAgIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnR5cGUnLFxuICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL3R5cGUnLFxuICAgICAgICAkbWV0aG9kID0gJHR5cGVJc0FycmF5ID8gJ2NoZWNrRGF0YVR5cGVzJyA6ICdjaGVja0RhdGFUeXBlJztcbiAgICAgIG91dCArPSAnIGlmICgnICsgKGl0LnV0aWxbJG1ldGhvZF0oJHR5cGVTY2hlbWEsICRkYXRhLCB0cnVlKSkgKyAnKSB7ICAnO1xuICAgICAgdmFyICRkYXRhVHlwZSA9ICdkYXRhVHlwZScgKyAkbHZsLFxuICAgICAgICAkY29lcmNlZCA9ICdjb2VyY2VkJyArICRsdmw7XG4gICAgICBvdXQgKz0gJyB2YXIgJyArICgkZGF0YVR5cGUpICsgJyA9IHR5cGVvZiAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICBpZiAoaXQub3B0cy5jb2VyY2VUeXBlcyA9PSAnYXJyYXknKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ29iamVjdFxcJyAmJiBBcnJheS5pc0FycmF5KCcgKyAoJGRhdGEpICsgJykpICcgKyAoJGRhdGFUeXBlKSArICcgPSBcXCdhcnJheVxcJzsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHZhciAnICsgKCRjb2VyY2VkKSArICcgPSB1bmRlZmluZWQ7ICc7XG4gICAgICB2YXIgJGJyYWNlc0NvZXJjaW9uID0gJyc7XG4gICAgICB2YXIgYXJyMSA9ICRjb2VyY2VUb1R5cGVzO1xuICAgICAgaWYgKGFycjEpIHtcbiAgICAgICAgdmFyICR0eXBlLCAkaSA9IC0xLFxuICAgICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAgICR0eXBlID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgICBpZiAoJGkpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRjb2VyY2VkKSArICcgPT09IHVuZGVmaW5lZCkgeyAnO1xuICAgICAgICAgICAgJGJyYWNlc0NvZXJjaW9uICs9ICd9JztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMuY29lcmNlVHlwZXMgPT0gJ2FycmF5JyAmJiAkdHlwZSAhPSAnYXJyYXknKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdhcnJheVxcJyAmJiAnICsgKCRkYXRhKSArICcubGVuZ3RoID09IDEpIHsgJyArICgkY29lcmNlZCkgKyAnID0gJyArICgkZGF0YSkgKyAnID0gJyArICgkZGF0YSkgKyAnWzBdOyAnICsgKCRkYXRhVHlwZSkgKyAnID0gdHlwZW9mICcgKyAoJGRhdGEpICsgJzsgIH0gJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCR0eXBlID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdudW1iZXJcXCcgfHwgJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdib29sZWFuXFwnKSAnICsgKCRjb2VyY2VkKSArICcgPSBcXCdcXCcgKyAnICsgKCRkYXRhKSArICc7IGVsc2UgaWYgKCcgKyAoJGRhdGEpICsgJyA9PT0gbnVsbCkgJyArICgkY29lcmNlZCkgKyAnID0gXFwnXFwnOyAnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJHR5cGUgPT0gJ251bWJlcicgfHwgJHR5cGUgPT0gJ2ludGVnZXInKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdib29sZWFuXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gbnVsbCB8fCAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdzdHJpbmdcXCcgJiYgJyArICgkZGF0YSkgKyAnICYmICcgKyAoJGRhdGEpICsgJyA9PSArJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICBpZiAoJHR5cGUgPT0gJ2ludGVnZXInKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICYmICEoJyArICgkZGF0YSkgKyAnICUgMSknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcpKSAnICsgKCRjb2VyY2VkKSArICcgPSArJyArICgkZGF0YSkgKyAnOyAnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJHR5cGUgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YSkgKyAnID09PSBcXCdmYWxzZVxcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IDAgfHwgJyArICgkZGF0YSkgKyAnID09PSBudWxsKSAnICsgKCRjb2VyY2VkKSArICcgPSBmYWxzZTsgZWxzZSBpZiAoJyArICgkZGF0YSkgKyAnID09PSBcXCd0cnVlXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gMSkgJyArICgkY29lcmNlZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdudWxsJykge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGEpICsgJyA9PT0gXFwnXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gMCB8fCAnICsgKCRkYXRhKSArICcgPT09IGZhbHNlKSAnICsgKCRjb2VyY2VkKSArICcgPSBudWxsOyAnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXQub3B0cy5jb2VyY2VUeXBlcyA9PSAnYXJyYXknICYmICR0eXBlID09ICdhcnJheScpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ3N0cmluZ1xcJyB8fCAnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ251bWJlclxcJyB8fCAnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ2Jvb2xlYW5cXCcgfHwgJyArICgkZGF0YSkgKyAnID09IG51bGwpICcgKyAoJGNvZXJjZWQpICsgJyA9IFsnICsgKCRkYXRhKSArICddOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ICs9ICcgJyArICgkYnJhY2VzQ29lcmNpb24pICsgJyBpZiAoJyArICgkY29lcmNlZCkgKyAnID09PSB1bmRlZmluZWQpIHsgICAnO1xuICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgndHlwZScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgdHlwZTogXFwnJztcbiAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJ1xcJyB9ICc7XG4gICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlICc7XG4gICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgfVxuICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9IGVsc2UgeyAgJztcbiAgICAgIHZhciAkcGFyZW50RGF0YSA9ICRkYXRhTHZsID8gJ2RhdGEnICsgKCgkZGF0YUx2bCAtIDEpIHx8ICcnKSA6ICdwYXJlbnREYXRhJyxcbiAgICAgICAgJHBhcmVudERhdGFQcm9wZXJ0eSA9ICRkYXRhTHZsID8gaXQuZGF0YVBhdGhBcnJbJGRhdGFMdmxdIDogJ3BhcmVudERhdGFQcm9wZXJ0eSc7XG4gICAgICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcgPSAnICsgKCRjb2VyY2VkKSArICc7ICc7XG4gICAgICBpZiAoISRkYXRhTHZsKSB7XG4gICAgICAgIG91dCArPSAnaWYgKCcgKyAoJHBhcmVudERhdGEpICsgJyAhPT0gdW5kZWZpbmVkKSc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAnICsgKCRwYXJlbnREYXRhKSArICdbJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICddID0gJyArICgkY29lcmNlZCkgKyAnOyB9IH0gJztcbiAgICB9XG4gIH1cbiAgdmFyICRyZWZLZXl3b3JkcztcbiAgaWYgKGl0LnNjaGVtYS4kcmVmICYmICgkcmVmS2V5d29yZHMgPSBpdC51dGlsLnNjaGVtYUhhc1J1bGVzRXhjZXB0KGl0LnNjaGVtYSwgaXQuUlVMRVMuYWxsLCAnJHJlZicpKSkge1xuICAgIGlmIChpdC5vcHRzLmV4dGVuZFJlZnMgPT0gJ2ZhaWwnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJyRyZWY6IHZhbGlkYXRpb24ga2V5d29yZHMgdXNlZCBpbiBzY2hlbWEgYXQgcGF0aCBcIicgKyBpdC5lcnJTY2hlbWFQYXRoICsgJ1wiJyk7XG4gICAgfSBlbHNlIGlmIChpdC5vcHRzLmV4dGVuZFJlZnMgPT0gJ2lnbm9yZScpIHtcbiAgICAgICRyZWZLZXl3b3JkcyA9IGZhbHNlO1xuICAgICAgY29uc29sZS5sb2coJyRyZWY6IGtleXdvcmRzIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIicpO1xuICAgIH0gZWxzZSBpZiAoaXQub3B0cy5leHRlbmRSZWZzICE9PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZygnJHJlZjogYWxsIGtleXdvcmRzIHVzZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIi4gSXQgd2lsbCBjaGFuZ2UgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiwgc2VlIGlzc3VlICMyNjAuIFVzZSBvcHRpb24geyBleHRlbmRSZWZzOiB0cnVlIH0gdG8ga2VlcCBjdXJyZW50IGJlaGF2aW91cicpO1xuICAgIH1cbiAgfVxuICBpZiAoaXQuc2NoZW1hLiRyZWYgJiYgISRyZWZLZXl3b3Jkcykge1xuICAgIG91dCArPSAnICcgKyAoaXQuUlVMRVMuYWxsLiRyZWYuY29kZShpdCwgJyRyZWYnKSkgKyAnICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIH0gaWYgKGVycm9ycyA9PT0gJztcbiAgICAgIGlmICgkdG9wKSB7XG4gICAgICAgIG91dCArPSAnMCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJ2VycnNfJyArICgkbHZsKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnKSB7ICc7XG4gICAgICAkY2xvc2luZ0JyYWNlczIgKz0gJ30nO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYXJyMiA9IGl0LlJVTEVTO1xuICAgIGlmIChhcnIyKSB7XG4gICAgICB2YXIgJHJ1bGVzR3JvdXAsIGkyID0gLTEsXG4gICAgICAgIGwyID0gYXJyMi5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkyIDwgbDIpIHtcbiAgICAgICAgJHJ1bGVzR3JvdXAgPSBhcnIyW2kyICs9IDFdO1xuICAgICAgICBpZiAoJHNob3VsZFVzZUdyb3VwKCRydWxlc0dyb3VwKSkge1xuICAgICAgICAgIGlmICgkcnVsZXNHcm91cC50eXBlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArIChpdC51dGlsLmNoZWNrRGF0YVR5cGUoJHJ1bGVzR3JvdXAudHlwZSwgJGRhdGEpKSArICcpIHsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgJiYgIWl0LmNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgICAgIGlmICgkcnVsZXNHcm91cC50eXBlID09ICdvYmplY3QnICYmIGl0LnNjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgJHNjaGVtYUtleXMgPSBPYmplY3Qua2V5cygkc2NoZW1hKTtcbiAgICAgICAgICAgICAgdmFyIGFycjMgPSAkc2NoZW1hS2V5cztcbiAgICAgICAgICAgICAgaWYgKGFycjMpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHByb3BlcnR5S2V5LCBpMyA9IC0xLFxuICAgICAgICAgICAgICAgICAgbDMgPSBhcnIzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGkzIDwgbDMpIHtcbiAgICAgICAgICAgICAgICAgICRwcm9wZXJ0eUtleSA9IGFycjNbaTMgKz0gMV07XG4gICAgICAgICAgICAgICAgICB2YXIgJHNjaCA9ICRzY2hlbWFbJHByb3BlcnR5S2V5XTtcbiAgICAgICAgICAgICAgICAgIGlmICgkc2NoLmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSAnICBpZiAoJyArICgkcGFzc0RhdGEpICsgJyA9PT0gdW5kZWZpbmVkKSAnICsgKCRwYXNzRGF0YSkgKyAnID0gJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ3NoYXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyAnICsgKGl0LnVzZURlZmF1bHQoJHNjaC5kZWZhdWx0KSkgKyAnICc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChKU09OLnN0cmluZ2lmeSgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJzsgJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHJ1bGVzR3JvdXAudHlwZSA9PSAnYXJyYXknICYmIEFycmF5LmlzQXJyYXkoaXQuc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgICAgICB2YXIgYXJyNCA9IGl0LnNjaGVtYS5pdGVtcztcbiAgICAgICAgICAgICAgaWYgKGFycjQpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgICAgICAgICAgICAgIGw0ID0gYXJyNC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHdoaWxlICgkaSA8IGw0KSB7XG4gICAgICAgICAgICAgICAgICAkc2NoID0gYXJyNFskaSArPSAxXTtcbiAgICAgICAgICAgICAgICAgIGlmICgkc2NoLmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAkaSArICddJztcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgIGlmICgnICsgKCRwYXNzRGF0YSkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHBhc3NEYXRhKSArICcgPSAnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy51c2VEZWZhdWx0cyA9PSAnc2hhcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXNlRGVmYXVsdCgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyAnICsgKEpTT04uc3RyaW5naWZ5KCRzY2guZGVmYXVsdCkpICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSAnOyAnO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgYXJyNSA9ICRydWxlc0dyb3VwLnJ1bGVzO1xuICAgICAgICAgIGlmIChhcnI1KSB7XG4gICAgICAgICAgICB2YXIgJHJ1bGUsIGk1ID0gLTEsXG4gICAgICAgICAgICAgIGw1ID0gYXJyNS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKGk1IDwgbDUpIHtcbiAgICAgICAgICAgICAgJHJ1bGUgPSBhcnI1W2k1ICs9IDFdO1xuICAgICAgICAgICAgICBpZiAoJHNob3VsZFVzZVJ1bGUoJHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZS5jb2RlKGl0LCAkcnVsZS5rZXl3b3JkKSkgKyAnICc7XG4gICAgICAgICAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICRjbG9zaW5nQnJhY2VzMSArPSAnfSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzMSkgKyAnICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlczEgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRydWxlc0dyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIGlmICgkdHlwZVNjaGVtYSAmJiAkdHlwZVNjaGVtYSA9PT0gJHJ1bGVzR3JvdXAudHlwZSAmJiAhJGNvZXJjZVRvVHlwZXMpIHtcbiAgICAgICAgICAgICAgdmFyICR0eXBlQ2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgICAgICAgICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50eXBlJyxcbiAgICAgICAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL3R5cGUnO1xuICAgICAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3R5cGUnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHR5cGU6IFxcJyc7XG4gICAgICAgICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdcXCcgfSAnO1xuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJztcbiAgICAgICAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7IC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoZXJyb3JzID09PSAnO1xuICAgICAgICAgICAgaWYgKCR0b3ApIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcwJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnZXJyc18nICsgKCRsdmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcpIHsgJztcbiAgICAgICAgICAgICRjbG9zaW5nQnJhY2VzMiArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkdHlwZVNjaGVtYSAmJiAhJHR5cGVDaGVja2VkICYmICEkY29lcmNlVG9UeXBlcykge1xuICAgIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnR5cGUnLFxuICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy90eXBlJyxcbiAgICAgICRtZXRob2QgPSAkdHlwZUlzQXJyYXkgPyAnY2hlY2tEYXRhVHlwZXMnIDogJ2NoZWNrRGF0YVR5cGUnO1xuICAgIG91dCArPSAnIGlmICgnICsgKGl0LnV0aWxbJG1ldGhvZF0oJHR5cGVTY2hlbWEsICRkYXRhLCB0cnVlKSkgKyAnKSB7ICAgJztcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgndHlwZScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgdHlwZTogXFwnJztcbiAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJ1xcJyB9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJztcbiAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikgeyAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSc7XG4gIH1cbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzMikgKyAnICc7XG4gIH1cbiAgaWYgKCR0b3ApIHtcbiAgICBpZiAoJGFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyBpZiAoZXJyb3JzID09PSAwKSByZXR1cm4gdHJ1ZTsgICAgICAgICAgICc7XG4gICAgICBvdXQgKz0gJyBlbHNlIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodkVycm9ycyk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7ICc7XG4gICAgICBvdXQgKz0gJyByZXR1cm4gZXJyb3JzID09PSAwOyAgICAgICAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9KTsgcmV0dXJuIHZhbGlkYXRlOyc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICcgPSBlcnJvcnMgPT09IGVycnNfJyArICgkbHZsKSArICc7JztcbiAgfVxuICBvdXQgPSBpdC51dGlsLmNsZWFuVXBDb2RlKG91dCk7XG4gIGlmICgkdG9wICYmICRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgPSBpdC51dGlsLmNsZWFuVXBWYXJFcnJvcnMob3V0LCAkYXN5bmMpO1xuICB9XG5cbiAgZnVuY3Rpb24gJHNob3VsZFVzZUdyb3VwKCRydWxlc0dyb3VwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAkcnVsZXNHcm91cC5ydWxlcy5sZW5ndGg7IGkrKylcbiAgICAgIGlmICgkc2hvdWxkVXNlUnVsZSgkcnVsZXNHcm91cC5ydWxlc1tpXSkpIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gJHNob3VsZFVzZVJ1bGUoJHJ1bGUpIHtcbiAgICByZXR1cm4gaXQuc2NoZW1hWyRydWxlLmtleXdvcmRdICE9PSB1bmRlZmluZWQgfHwgKCRydWxlLmtleXdvcmQgPT0gJ3Byb3BlcnRpZXMnICYmIChpdC5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09IGZhbHNlIHx8IHR5cGVvZiBpdC5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT0gJ29iamVjdCcgfHwgKGl0LnNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyAmJiBPYmplY3Qua2V5cyhpdC5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMpLmxlbmd0aCkgfHwgKGl0Lm9wdHMudjUgJiYgaXQuc2NoZW1hLnBhdHRlcm5Hcm91cHMgJiYgT2JqZWN0LmtleXMoaXQuc2NoZW1hLnBhdHRlcm5Hcm91cHMpLmxlbmd0aCkpKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgSURFTlRJRklFUiA9IC9eW2Etel8kXVthLXowLTlfJFxcLV0qJC9pO1xudmFyIGN1c3RvbVJ1bGVDb2RlID0gcmVxdWlyZSgnLi9kb3Rqcy9jdXN0b20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFkZDogYWRkS2V5d29yZCxcbiAgZ2V0OiBnZXRLZXl3b3JkLFxuICByZW1vdmU6IHJlbW92ZUtleXdvcmRcbn07XG5cbi8qKlxuICogRGVmaW5lIGN1c3RvbSBrZXl3b3JkXG4gKiBAdGhpcyAgQWp2XG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5d29yZCBjdXN0b20ga2V5d29yZCwgc2hvdWxkIGJlIHVuaXF1ZSAoaW5jbHVkaW5nIGRpZmZlcmVudCBmcm9tIGFsbCBzdGFuZGFyZCwgY3VzdG9tIGFuZCBtYWNybyBrZXl3b3JkcykuXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmaW5pdGlvbiBrZXl3b3JkIGRlZmluaXRpb24gb2JqZWN0IHdpdGggcHJvcGVydGllcyBgdHlwZWAgKHR5cGUocykgd2hpY2ggdGhlIGtleXdvcmQgYXBwbGllcyB0byksIGB2YWxpZGF0ZWAgb3IgYGNvbXBpbGVgLlxuICovXG5mdW5jdGlvbiBhZGRLZXl3b3JkKGtleXdvcmQsIGRlZmluaXRpb24pIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICAvKiBlc2xpbnQgbm8tc2hhZG93OiAwICovXG4gIHZhciBSVUxFUyA9IHRoaXMuUlVMRVM7XG5cbiAgaWYgKFJVTEVTLmtleXdvcmRzW2tleXdvcmRdKVxuICAgIHRocm93IG5ldyBFcnJvcignS2V5d29yZCAnICsga2V5d29yZCArICcgaXMgYWxyZWFkeSBkZWZpbmVkJyk7XG5cbiAgaWYgKCFJREVOVElGSUVSLnRlc3Qoa2V5d29yZCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdLZXl3b3JkICcgKyBrZXl3b3JkICsgJyBpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyJyk7XG5cbiAgaWYgKGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbi5tYWNybyAmJiBkZWZpbml0aW9uLnZhbGlkICE9PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1widmFsaWRcIiBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCBtYWNybyBrZXl3b3JkcycpO1xuXG4gICAgdmFyIGRhdGFUeXBlID0gZGVmaW5pdGlvbi50eXBlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFUeXBlKSkge1xuICAgICAgdmFyIGksIGxlbiA9IGRhdGFUeXBlLmxlbmd0aDtcbiAgICAgIGZvciAoaT0wOyBpPGxlbjsgaSsrKSBjaGVja0RhdGFUeXBlKGRhdGFUeXBlW2ldKTtcbiAgICAgIGZvciAoaT0wOyBpPGxlbjsgaSsrKSBfYWRkUnVsZShrZXl3b3JkLCBkYXRhVHlwZVtpXSwgZGVmaW5pdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkYXRhVHlwZSkgY2hlY2tEYXRhVHlwZShkYXRhVHlwZSk7XG4gICAgICBfYWRkUnVsZShrZXl3b3JkLCBkYXRhVHlwZSwgZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgdmFyICRkYXRhID0gZGVmaW5pdGlvbi4kZGF0YSA9PT0gdHJ1ZSAmJiB0aGlzLl9vcHRzLnY1O1xuICAgIGlmICgkZGF0YSAmJiAhZGVmaW5pdGlvbi52YWxpZGF0ZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignJGRhdGEgc3VwcG9ydDogXCJ2YWxpZGF0ZVwiIGZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkJyk7XG5cbiAgICB2YXIgbWV0YVNjaGVtYSA9IGRlZmluaXRpb24ubWV0YVNjaGVtYTtcbiAgICBpZiAobWV0YVNjaGVtYSkge1xuICAgICAgaWYgKCRkYXRhKSB7XG4gICAgICAgIG1ldGFTY2hlbWEgPSB7XG4gICAgICAgICAgYW55T2Y6IFtcbiAgICAgICAgICAgIG1ldGFTY2hlbWEsXG4gICAgICAgICAgICB7ICckcmVmJzogJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcG9iZXJlemtpbi9hanYvbWFzdGVyL2xpYi9yZWZzL2pzb24tc2NoZW1hLXY1Lmpzb24jL2RlZmluaXRpb25zLyRkYXRhJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZGVmaW5pdGlvbi52YWxpZGF0ZVNjaGVtYSA9IHRoaXMuY29tcGlsZShtZXRhU2NoZW1hLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXSA9IFJVTEVTLmFsbFtrZXl3b3JkXSA9IHRydWU7XG5cblxuICBmdW5jdGlvbiBfYWRkUnVsZShrZXl3b3JkLCBkYXRhVHlwZSwgZGVmaW5pdGlvbikge1xuICAgIHZhciBydWxlR3JvdXA7XG4gICAgZm9yICh2YXIgaT0wOyBpPFJVTEVTLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmcgPSBSVUxFU1tpXTtcbiAgICAgIGlmIChyZy50eXBlID09IGRhdGFUeXBlKSB7XG4gICAgICAgIHJ1bGVHcm91cCA9IHJnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJ1bGVHcm91cCkge1xuICAgICAgcnVsZUdyb3VwID0geyB0eXBlOiBkYXRhVHlwZSwgcnVsZXM6IFtdIH07XG4gICAgICBSVUxFUy5wdXNoKHJ1bGVHcm91cCk7XG4gICAgfVxuXG4gICAgdmFyIHJ1bGUgPSB7XG4gICAgICBrZXl3b3JkOiBrZXl3b3JkLFxuICAgICAgZGVmaW5pdGlvbjogZGVmaW5pdGlvbixcbiAgICAgIGN1c3RvbTogdHJ1ZSxcbiAgICAgIGNvZGU6IGN1c3RvbVJ1bGVDb2RlXG4gICAgfTtcbiAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICBSVUxFUy5jdXN0b21ba2V5d29yZF0gPSBydWxlO1xuICB9XG5cblxuICBmdW5jdGlvbiBjaGVja0RhdGFUeXBlKGRhdGFUeXBlKSB7XG4gICAgaWYgKCFSVUxFUy50eXBlc1tkYXRhVHlwZV0pIHRocm93IG5ldyBFcnJvcignVW5rbm93biB0eXBlICcgKyBkYXRhVHlwZSk7XG4gIH1cbn1cblxuXG4vKipcbiAqIEdldCBrZXl3b3JkXG4gKiBAdGhpcyAgQWp2XG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5d29yZCBwcmUtZGVmaW5lZCBvciBjdXN0b20ga2V5d29yZC5cbiAqIEByZXR1cm4ge09iamVjdHxCb29sZWFufSBjdXN0b20ga2V5d29yZCBkZWZpbml0aW9uLCBgdHJ1ZWAgaWYgaXQgaXMgYSBwcmVkZWZpbmVkIGtleXdvcmQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBnZXRLZXl3b3JkKGtleXdvcmQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcnVsZSA9IHRoaXMuUlVMRVMuY3VzdG9tW2tleXdvcmRdO1xuICByZXR1cm4gcnVsZSA/IHJ1bGUuZGVmaW5pdGlvbiA6IHRoaXMuUlVMRVMua2V5d29yZHNba2V5d29yZF0gfHwgZmFsc2U7XG59XG5cblxuLyoqXG4gKiBSZW1vdmUga2V5d29yZFxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtTdHJpbmd9IGtleXdvcmQgcHJlLWRlZmluZWQgb3IgY3VzdG9tIGtleXdvcmQuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUtleXdvcmQoa2V5d29yZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBSVUxFUyA9IHRoaXMuUlVMRVM7XG4gIGRlbGV0ZSBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXTtcbiAgZGVsZXRlIFJVTEVTLmFsbFtrZXl3b3JkXTtcbiAgZGVsZXRlIFJVTEVTLmN1c3RvbVtrZXl3b3JkXTtcbiAgZm9yICh2YXIgaT0wOyBpPFJVTEVTLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJ1bGVzID0gUlVMRVNbaV0ucnVsZXM7XG4gICAgZm9yICh2YXIgaj0wOyBqPHJ1bGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAocnVsZXNbal0ua2V5d29yZCA9PSBrZXl3b3JkKSB7XG4gICAgICAgIHJ1bGVzLnNwbGljZShqLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gICAgXCJpZFwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hI1wiLFxuICAgIFwiJHNjaGVtYVwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hI1wiLFxuICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb3JlIHNjaGVtYSBtZXRhLXNjaGVtYVwiLFxuICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICBcInNjaGVtYUFycmF5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJwb3NpdGl2ZUludGVnZXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJtaW5pbXVtXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJwb3NpdGl2ZUludGVnZXJEZWZhdWx0MFwiOiB7XG4gICAgICAgICAgICBcImFsbE9mXCI6IFsgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sIHsgXCJkZWZhdWx0XCI6IDAgfSBdXG4gICAgICAgIH0sXG4gICAgICAgIFwic2ltcGxlVHlwZXNcIjoge1xuICAgICAgICAgICAgXCJlbnVtXCI6IFsgXCJhcnJheVwiLCBcImJvb2xlYW5cIiwgXCJpbnRlZ2VyXCIsIFwibnVsbFwiLCBcIm51bWJlclwiLCBcIm9iamVjdFwiLCBcInN0cmluZ1wiIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzdHJpbmdBcnJheVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7IFwidHlwZVwiOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICBcInVuaXF1ZUl0ZW1zXCI6IHRydWVcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJpZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCIkc2NoZW1hXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcInRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHt9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICBcIm1pbmltdW1cIjogMCxcbiAgICAgICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluaW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4TGVuZ3RoXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIiB9LFxuICAgICAgICBcIm1pbkxlbmd0aFwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInBhdHRlcm5cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcInJlZ2V4XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsSXRlbXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4SXRlbXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCIgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIiB9LFxuICAgICAgICBcIm1pblByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwXCIgfSxcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXlcIiB9LFxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJ0eXBlXCI6IFwiYm9vbGVhblwiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXNcIiB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXNcIiB9LFxuICAgICAgICAgICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhbGxPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcImFueU9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwib25lT2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJub3RcIjogeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgIH0sXG4gICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjogWyBcIm1heGltdW1cIiBdLFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjogWyBcIm1pbmltdW1cIiBdXG4gICAgfSxcbiAgICBcImRlZmF1bHRcIjoge31cbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgICBcImlkXCI6IFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Vwb2JlcmV6a2luL2Fqdi9tYXN0ZXIvbGliL3JlZnMvanNvbi1zY2hlbWEtdjUuanNvbiNcIixcbiAgICBcIiRzY2hlbWFcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIixcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29yZSBzY2hlbWEgbWV0YS1zY2hlbWEgKHY1IHByb3Bvc2FscylcIixcbiAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgICAgXCJzY2hlbWFBcnJheVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicG9zaXRpdmVJbnRlZ2VyXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICAgIFwibWluaW11bVwiOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFwicG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIjoge1xuICAgICAgICAgICAgXCJhbGxPZlwiOiBbIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIiB9LCB7IFwiZGVmYXVsdFwiOiAwIH0gXVxuICAgICAgICB9LFxuICAgICAgICBcInNpbXBsZVR5cGVzXCI6IHtcbiAgICAgICAgICAgIFwiZW51bVwiOiBbIFwiYXJyYXlcIiwgXCJib29sZWFuXCIsIFwiaW50ZWdlclwiLCBcIm51bGxcIiwgXCJudW1iZXJcIiwgXCJvYmplY3RcIiwgXCJzdHJpbmdcIiBdXG4gICAgICAgIH0sXG4gICAgICAgIFwic3RyaW5nQXJyYXlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjogeyBcInR5cGVcIjogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiJGRhdGFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IFsgXCIkZGF0YVwiIF0sXG4gICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgIFwiJGRhdGFcIjoge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZm9ybWF0XCI6IFwicmVsYXRpdmUtanNvbi1wb2ludGVyXCIgfSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZm9ybWF0XCI6IFwianNvbi1wb2ludGVyXCIgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJpZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCIkc2NoZW1hXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmlcIlxuICAgICAgICB9LFxuICAgICAgICBcInRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHt9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJtaW5pbXVtXCI6IDAsXG4gICAgICAgICAgICAgICAgICAgIFwiZXhjbHVzaXZlTWluaW11bVwiOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbmltdW1cIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJudW1iZXJcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNaW5pbXVtXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbkxlbmd0aFwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwicmVnZXhcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcIm1heEl0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW5JdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4UHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXF1aXJlZFwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXlcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcImRlZmluaXRpb25zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwibWluSXRlbXNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXNcIiB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXNcIiB9LFxuICAgICAgICAgICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJhbGxPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcImFueU9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwib25lT2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJub3RcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRNYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJ0eXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ybWF0TWluaW11bVwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwidHlwZVwiOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdEV4Y2x1c2l2ZU1heGltdW1cIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImZvcm1hdEV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zLyRkYXRhXCIgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcImNvbnN0YW50XCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJjb250YWluc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICBcInBhdHRlcm5Hcm91cHNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBcInJlcXVpcmVkXCI6IFsgXCJzY2hlbWFcIiBdLFxuICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwibWF4aW11bVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvJGRhdGFcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibWluaW11bVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy8kZGF0YVwiIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJzY2hlbWFcIjogeyBcIiRyZWZcIjogXCIjXCIgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcInN3aXRjaFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiBbIFwidGhlblwiIF0sXG4gICAgICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJpZlwiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICAgICAgICAgICAgICBcInRoZW5cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBcInR5cGVcIjogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiY29udGludWVcIjogeyBcInR5cGVcIjogXCJib29sZWFuXCIgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiY29udGludWVcIjogWyBcImlmXCIgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICBcImV4Y2x1c2l2ZU1heGltdW1cIjogWyBcIm1heGltdW1cIiBdLFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjogWyBcIm1pbmltdW1cIiBdLFxuICAgICAgICBcImZvcm1hdE1heGltdW1cIjogWyBcImZvcm1hdFwiIF0sXG4gICAgICAgIFwiZm9ybWF0TWluaW11bVwiOiBbIFwiZm9ybWF0XCIgXSxcbiAgICAgICAgXCJmb3JtYXRFeGNsdXNpdmVNYXhpbXVtXCI6IFsgXCJmb3JtYXRNYXhpbXVtXCIgXSxcbiAgICAgICAgXCJmb3JtYXRFeGNsdXNpdmVNaW5pbXVtXCI6IFsgXCJmb3JtYXRNaW5pbXVtXCIgXVxuICAgIH0sXG4gICAgXCJkZWZhdWx0XCI6IHt9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBNRVRBX1NDSEVNQV9JRCA9ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZXBvYmVyZXpraW4vYWp2L21hc3Rlci9saWIvcmVmcy9qc29uLXNjaGVtYS12NS5qc29uJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlVjUsXG4gIE1FVEFfU0NIRU1BX0lEOiBNRVRBX1NDSEVNQV9JRFxufTtcblxuXG5mdW5jdGlvbiBlbmFibGVWNShhanYpIHtcbiAgdmFyIGlubGluZUZ1bmN0aW9ucyA9IHtcbiAgICAnc3dpdGNoJzogcmVxdWlyZSgnLi9kb3Rqcy9zd2l0Y2gnKSxcbiAgICAnY29uc3RhbnQnOiByZXF1aXJlKCcuL2RvdGpzL2NvbnN0YW50JyksXG4gICAgJ19mb3JtYXRMaW1pdCc6IHJlcXVpcmUoJy4vZG90anMvX2Zvcm1hdExpbWl0JyksXG4gICAgJ3BhdHRlcm5SZXF1aXJlZCc6IHJlcXVpcmUoJy4vZG90anMvcGF0dGVyblJlcXVpcmVkJylcbiAgfTtcblxuICBpZiAoYWp2Ll9vcHRzLm1ldGEgIT09IGZhbHNlKSB7XG4gICAgdmFyIG1ldGFTY2hlbWEgPSByZXF1aXJlKCcuL3JlZnMvanNvbi1zY2hlbWEtdjUuanNvbicpO1xuICAgIGFqdi5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lEKTtcbiAgfVxuICBfYWRkS2V5d29yZCgnY29uc3RhbnQnKTtcbiAgYWp2LmFkZEtleXdvcmQoJ2NvbnRhaW5zJywgeyB0eXBlOiAnYXJyYXknLCBtYWNybzogY29udGFpbnNNYWNybyB9KTtcblxuICBfYWRkS2V5d29yZCgnZm9ybWF0TWF4aW11bScsICdzdHJpbmcnLCBpbmxpbmVGdW5jdGlvbnMuX2Zvcm1hdExpbWl0KTtcbiAgX2FkZEtleXdvcmQoJ2Zvcm1hdE1pbmltdW0nLCAnc3RyaW5nJywgaW5saW5lRnVuY3Rpb25zLl9mb3JtYXRMaW1pdCk7XG4gIGFqdi5hZGRLZXl3b3JkKCdmb3JtYXRFeGNsdXNpdmVNYXhpbXVtJyk7XG4gIGFqdi5hZGRLZXl3b3JkKCdmb3JtYXRFeGNsdXNpdmVNaW5pbXVtJyk7XG5cbiAgYWp2LmFkZEtleXdvcmQoJ3BhdHRlcm5Hcm91cHMnKTsgLy8gaW1wbGVtZW50ZWQgaW4gcHJvcGVydGllcy5qc3RcbiAgX2FkZEtleXdvcmQoJ3BhdHRlcm5SZXF1aXJlZCcsICdvYmplY3QnKTtcbiAgX2FkZEtleXdvcmQoJ3N3aXRjaCcpO1xuXG5cbiAgZnVuY3Rpb24gX2FkZEtleXdvcmQoa2V5d29yZCwgdHlwZXMsIGlubGluZUZ1bmMpIHtcbiAgICB2YXIgZGVmaW5pdGlvbiA9IHtcbiAgICAgIGlubGluZTogaW5saW5lRnVuYyB8fCBpbmxpbmVGdW5jdGlvbnNba2V5d29yZF0sXG4gICAgICBzdGF0ZW1lbnRzOiB0cnVlLFxuICAgICAgZXJyb3JzOiAnZnVsbCdcbiAgICB9O1xuICAgIGlmICh0eXBlcykgZGVmaW5pdGlvbi50eXBlID0gdHlwZXM7XG4gICAgYWp2LmFkZEtleXdvcmQoa2V5d29yZCwgZGVmaW5pdGlvbik7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBjb250YWluc01hY3JvKHNjaGVtYSkge1xuICByZXR1cm4ge1xuICAgIG5vdDogeyBpdGVtczogeyBub3Q6IHNjaGVtYSB9IH1cbiAgfTtcbn1cbiIsInZhciBqc29uID0gdHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnID8gSlNPTiA6IHJlcXVpcmUoJ2pzb25pZnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSBvcHRzID0geyBjbXA6IG9wdHMgfTtcbiAgICB2YXIgc3BhY2UgPSBvcHRzLnNwYWNlIHx8ICcnO1xuICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSBzcGFjZSA9IEFycmF5KHNwYWNlKzEpLmpvaW4oJyAnKTtcbiAgICB2YXIgY3ljbGVzID0gKHR5cGVvZiBvcHRzLmN5Y2xlcyA9PT0gJ2Jvb2xlYW4nKSA/IG9wdHMuY3ljbGVzIDogZmFsc2U7XG4gICAgdmFyIHJlcGxhY2VyID0gb3B0cy5yZXBsYWNlciB8fCBmdW5jdGlvbihrZXksIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuICAgIHZhciBjbXAgPSBvcHRzLmNtcCAmJiAoZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYW9iaiA9IHsga2V5OiBhLCB2YWx1ZTogbm9kZVthXSB9O1xuICAgICAgICAgICAgICAgIHZhciBib2JqID0geyBrZXk6IGIsIHZhbHVlOiBub2RlW2JdIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGYoYW9iaiwgYm9iaik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH0pKG9wdHMuY21wKTtcblxuICAgIHZhciBzZWVuID0gW107XG4gICAgcmV0dXJuIChmdW5jdGlvbiBzdHJpbmdpZnkgKHBhcmVudCwga2V5LCBub2RlLCBsZXZlbCkge1xuICAgICAgICB2YXIgaW5kZW50ID0gc3BhY2UgPyAoJ1xcbicgKyBuZXcgQXJyYXkobGV2ZWwgKyAxKS5qb2luKHNwYWNlKSkgOiAnJztcbiAgICAgICAgdmFyIGNvbG9uU2VwYXJhdG9yID0gc3BhY2UgPyAnOiAnIDogJzonO1xuXG4gICAgICAgIGlmIChub2RlICYmIG5vZGUudG9KU09OICYmIHR5cGVvZiBub2RlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUudG9KU09OKCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gcmVwbGFjZXIuY2FsbChwYXJlbnQsIGtleSwgbm9kZSk7XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcgfHwgbm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGpzb24uc3RyaW5naWZ5KG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5KG5vZGUpKSB7XG4gICAgICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHN0cmluZ2lmeShub2RlLCBpLCBub2RlW2ldLCBsZXZlbCsxKSB8fCBqc29uLnN0cmluZ2lmeShudWxsKTtcbiAgICAgICAgICAgICAgICBvdXQucHVzaChpbmRlbnQgKyBzcGFjZSArIGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdbJyArIG91dC5qb2luKCcsJykgKyBpbmRlbnQgKyAnXSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5pbmRleE9mKG5vZGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChjeWNsZXMpIHJldHVybiBqc29uLnN0cmluZ2lmeSgnX19jeWNsZV9fJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBzZWVuLnB1c2gobm9kZSk7XG5cbiAgICAgICAgICAgIHZhciBrZXlzID0gb2JqZWN0S2V5cyhub2RlKS5zb3J0KGNtcCAmJiBjbXAobm9kZSkpO1xuICAgICAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RyaW5naWZ5KG5vZGUsIGtleSwgbm9kZVtrZXldLCBsZXZlbCsxKTtcblxuICAgICAgICAgICAgICAgIGlmKCF2YWx1ZSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICB2YXIga2V5VmFsdWUgPSBqc29uLnN0cmluZ2lmeShrZXkpXG4gICAgICAgICAgICAgICAgICAgICsgY29sb25TZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgb3V0LnB1c2goaW5kZW50ICsgc3BhY2UgKyBrZXlWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWVuLnNwbGljZShzZWVuLmluZGV4T2Yobm9kZSksIDEpO1xuICAgICAgICAgICAgcmV0dXJuICd7JyArIG91dC5qb2luKCcsJykgKyBpbmRlbnQgKyAnfSc7XG4gICAgICAgIH1cbiAgICB9KSh7ICcnOiBvYmogfSwgJycsIG9iaiwgMCk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4ge30udG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWUgfTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufTtcbiIsIi8qKiB2aW06IGV0OnRzPTQ6c3c9NDpzdHM9NFxuICogQGxpY2Vuc2UgYW1kZWZpbmUgMS4wLjEgQ29weXJpZ2h0IChjKSAyMDExLTIwMTYsIFRoZSBEb2pvIEZvdW5kYXRpb24gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIEF2YWlsYWJsZSB2aWEgdGhlIE1JVCBvciBuZXcgQlNEIGxpY2Vuc2UuXG4gKiBzZWU6IGh0dHA6Ly9naXRodWIuY29tL2pyYnVya2UvYW1kZWZpbmUgZm9yIGRldGFpbHNcbiAqL1xuXG4vKmpzbGludCBub2RlOiB0cnVlICovXG4vKmdsb2JhbCBtb2R1bGUsIHByb2Nlc3MgKi9cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVmaW5lIGZvciBub2RlLlxuICogQHBhcmFtIHtPYmplY3R9IG1vZHVsZSB0aGUgXCJtb2R1bGVcIiBvYmplY3QgdGhhdCBpcyBkZWZpbmVkIGJ5IE5vZGUgZm9yIHRoZVxuICogY3VycmVudCBtb2R1bGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVxdWlyZUZuXS4gTm9kZSdzIHJlcXVpcmUgZnVuY3Rpb24gZm9yIHRoZSBjdXJyZW50IG1vZHVsZS5cbiAqIEl0IG9ubHkgbmVlZHMgdG8gYmUgcGFzc2VkIGluIE5vZGUgdmVyc2lvbnMgYmVmb3JlIDAuNSwgd2hlbiBtb2R1bGUucmVxdWlyZVxuICogZGlkIG5vdCBleGlzdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gYSBkZWZpbmUgZnVuY3Rpb24gdGhhdCBpcyB1c2FibGUgZm9yIHRoZSBjdXJyZW50IG5vZGVcbiAqIG1vZHVsZS5cbiAqL1xuZnVuY3Rpb24gYW1kZWZpbmUobW9kdWxlLCByZXF1aXJlRm4pIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgdmFyIGRlZmluZUNhY2hlID0ge30sXG4gICAgICAgIGxvYWRlckNhY2hlID0ge30sXG4gICAgICAgIGFscmVhZHlDYWxsZWQgPSBmYWxzZSxcbiAgICAgICAgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKSxcbiAgICAgICAgbWFrZVJlcXVpcmUsIHN0cmluZ1JlcXVpcmU7XG5cbiAgICAvKipcbiAgICAgKiBUcmltcyB0aGUgLiBhbmQgLi4gZnJvbSBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLlxuICAgICAqIEl0IHdpbGwga2VlcCBhIGxlYWRpbmcgcGF0aCBzZWdtZW50IGlmIGEgLi4gd2lsbCBiZWNvbWVcbiAgICAgKiB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9kdWxlIG5hbWUgbG9va3VwcyxcbiAgICAgKiB3aGljaCBhY3QgbGlrZSBwYXRocywgYnV0IGNhbiBiZSByZW1hcHBlZC4gQnV0IHRoZSBlbmQgcmVzdWx0LFxuICAgICAqIGFsbCBwYXRocyB0aGF0IHVzZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBsb29rIG5vcm1hbGl6ZWQuXG4gICAgICogTk9URTogdGhpcyBtZXRob2QgTU9ESUZJRVMgdGhlIGlucHV0IGFycmF5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyeSB0aGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltRG90cyhhcnkpIHtcbiAgICAgICAgdmFyIGksIHBhcnQ7XG4gICAgICAgIGZvciAoaSA9IDA7IGFyeVtpXTsgaSs9IDEpIHtcbiAgICAgICAgICAgIHBhcnQgPSBhcnlbaV07XG4gICAgICAgICAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBpIC09IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiAoYXJ5WzJdID09PSAnLi4nIHx8IGFyeVswXSA9PT0gJy4uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9FbmQgb2YgdGhlIGxpbmUuIEtlZXAgYXQgbGVhc3Qgb25lIG5vbi1kb3RcbiAgICAgICAgICAgICAgICAgICAgLy9wYXRoIHNlZ21lbnQgYXQgdGhlIGZyb250IHNvIGl0IGNhbiBiZSBtYXBwZWRcbiAgICAgICAgICAgICAgICAgICAgLy9jb3JyZWN0bHkgdG8gZGlzay4gT3RoZXJ3aXNlLCB0aGVyZSBpcyBsaWtlbHlcbiAgICAgICAgICAgICAgICAgICAgLy9ubyBwYXRoIG1hcHBpbmcgZm9yIGEgcGF0aCBzdGFydGluZyB3aXRoICcuLicuXG4gICAgICAgICAgICAgICAgICAgIC8vVGhpcyBjYW4gc3RpbGwgZmFpbCwgYnV0IGNhdGNoZXMgdGhlIG1vc3QgcmVhc29uYWJsZVxuICAgICAgICAgICAgICAgICAgICAvL3VzZXMgb2YgLi5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGkgLSAxLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgaSAtPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShuYW1lLCBiYXNlTmFtZSkge1xuICAgICAgICB2YXIgYmFzZVBhcnRzO1xuXG4gICAgICAgIC8vQWRqdXN0IGFueSByZWxhdGl2ZSBwYXRocy5cbiAgICAgICAgaWYgKG5hbWUgJiYgbmFtZS5jaGFyQXQoMCkgPT09ICcuJykge1xuICAgICAgICAgICAgLy9JZiBoYXZlIGEgYmFzZSBuYW1lLCB0cnkgdG8gbm9ybWFsaXplIGFnYWluc3QgaXQsXG4gICAgICAgICAgICAvL290aGVyd2lzZSwgYXNzdW1lIGl0IGlzIGEgdG9wLWxldmVsIHJlcXVpcmUgdGhhdCB3aWxsXG4gICAgICAgICAgICAvL2JlIHJlbGF0aXZlIHRvIGJhc2VVcmwgaW4gdGhlIGVuZC5cbiAgICAgICAgICAgIGlmIChiYXNlTmFtZSkge1xuICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IGJhc2VOYW1lLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgYmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0cy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICBiYXNlUGFydHMgPSBiYXNlUGFydHMuY29uY2F0KG5hbWUuc3BsaXQoJy8nKSk7XG4gICAgICAgICAgICAgICAgdHJpbURvdHMoYmFzZVBhcnRzKTtcbiAgICAgICAgICAgICAgICBuYW1lID0gYmFzZVBhcnRzLmpvaW4oJy8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSB0aGUgbm9ybWFsaXplKCkgZnVuY3Rpb24gcGFzc2VkIHRvIGEgbG9hZGVyIHBsdWdpbidzXG4gICAgICogbm9ybWFsaXplIG1ldGhvZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYWtlTm9ybWFsaXplKHJlbE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHJlbE5hbWUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VMb2FkKGlkKSB7XG4gICAgICAgIGZ1bmN0aW9uIGxvYWQodmFsdWUpIHtcbiAgICAgICAgICAgIGxvYWRlckNhY2hlW2lkXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9hZC5mcm9tVGV4dCA9IGZ1bmN0aW9uIChpZCwgdGV4dCkge1xuICAgICAgICAgICAgLy9UaGlzIG9uZSBpcyBkaWZmaWN1bHQgYmVjYXVzZSB0aGUgdGV4dCBjYW4vcHJvYmFibHkgdXNlc1xuICAgICAgICAgICAgLy9kZWZpbmUsIGFuZCBhbnkgcmVsYXRpdmUgcGF0aHMgYW5kIHJlcXVpcmVzIHNob3VsZCBiZSByZWxhdGl2ZVxuICAgICAgICAgICAgLy90byB0aGF0IGlkIHdhcyBpdCB3b3VsZCBiZSBmb3VuZCBvbiBkaXNrLiBCdXQgdGhpcyB3b3VsZCByZXF1aXJlXG4gICAgICAgICAgICAvL2Jvb3RzdHJhcHBpbmcgYSBtb2R1bGUvcmVxdWlyZSBmYWlybHkgZGVlcGx5IGZyb20gbm9kZSBjb3JlLlxuICAgICAgICAgICAgLy9Ob3Qgc3VyZSBob3cgYmVzdCB0byBnbyBhYm91dCB0aGF0IHlldC5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYW1kZWZpbmUgZG9lcyBub3QgaW1wbGVtZW50IGxvYWQuZnJvbVRleHQnKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbG9hZDtcbiAgICB9XG5cbiAgICBtYWtlUmVxdWlyZSA9IGZ1bmN0aW9uIChzeXN0ZW1SZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUsIHJlbElkKSB7XG4gICAgICAgIGZ1bmN0aW9uIGFtZFJlcXVpcmUoZGVwcywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAvL1N5bmNocm9ub3VzLCBzaW5nbGUgbW9kdWxlIHJlcXVpcmUoJycpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1JlcXVpcmUoc3lzdGVtUmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlLCBkZXBzLCByZWxJZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vQXJyYXkgb2YgZGVwZW5kZW5jaWVzIHdpdGggYSBjYWxsYmFjay5cblxuICAgICAgICAgICAgICAgIC8vQ29udmVydCB0aGUgZGVwZW5kZW5jaWVzIHRvIG1vZHVsZXMuXG4gICAgICAgICAgICAgICAgZGVwcyA9IGRlcHMubWFwKGZ1bmN0aW9uIChkZXBOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdSZXF1aXJlKHN5c3RlbVJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSwgZGVwTmFtZSwgcmVsSWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy9XYWl0IGZvciBuZXh0IHRpY2sgdG8gY2FsbCBiYWNrIHRoZSByZXF1aXJlIGNhbGwuXG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgZGVwcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFtZFJlcXVpcmUudG9VcmwgPSBmdW5jdGlvbiAoZmlsZVBhdGgpIHtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aC5pbmRleE9mKCcuJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKGZpbGVQYXRoLCBwYXRoLmRpcm5hbWUobW9kdWxlLmZpbGVuYW1lKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gYW1kUmVxdWlyZTtcbiAgICB9O1xuXG4gICAgLy9GYXZvciBleHBsaWNpdCB2YWx1ZSwgcGFzc2VkIGluIGlmIHRoZSBtb2R1bGUgd2FudHMgdG8gc3VwcG9ydCBOb2RlIDAuNC5cbiAgICByZXF1aXJlRm4gPSByZXF1aXJlRm4gfHwgZnVuY3Rpb24gcmVxKCkge1xuICAgICAgICByZXR1cm4gbW9kdWxlLnJlcXVpcmUuYXBwbHkobW9kdWxlLCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBydW5GYWN0b3J5KGlkLCBkZXBzLCBmYWN0b3J5KSB7XG4gICAgICAgIHZhciByLCBlLCBtLCByZXN1bHQ7XG5cbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBlID0gbG9hZGVyQ2FjaGVbaWRdID0ge307XG4gICAgICAgICAgICBtID0ge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICB1cmk6IF9fZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgZXhwb3J0czogZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHIgPSBtYWtlUmVxdWlyZShyZXF1aXJlRm4sIGUsIG0sIGlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vT25seSBzdXBwb3J0IG9uZSBkZWZpbmUgY2FsbCBwZXIgZmlsZVxuICAgICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FtZGVmaW5lIHdpdGggbm8gbW9kdWxlIElEIGNhbm5vdCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgcGVyIGZpbGUuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy9Vc2UgdGhlIHJlYWwgdmFyaWFibGVzIGZyb20gbm9kZVxuICAgICAgICAgICAgLy9Vc2UgbW9kdWxlLmV4cG9ydHMgZm9yIGV4cG9ydHMsIHNpbmNlXG4gICAgICAgICAgICAvL3RoZSBleHBvcnRzIGluIGhlcmUgaXMgYW1kZWZpbmUgZXhwb3J0cy5cbiAgICAgICAgICAgIGUgPSBtb2R1bGUuZXhwb3J0cztcbiAgICAgICAgICAgIG0gPSBtb2R1bGU7XG4gICAgICAgICAgICByID0gbWFrZVJlcXVpcmUocmVxdWlyZUZuLCBlLCBtLCBtb2R1bGUuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9JZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzLCB0aGV5IGFyZSBzdHJpbmdzLCBzbyBuZWVkXG4gICAgICAgIC8vdG8gY29udmVydCB0aGVtIHRvIGRlcGVuZGVuY3kgdmFsdWVzLlxuICAgICAgICBpZiAoZGVwcykge1xuICAgICAgICAgICAgZGVwcyA9IGRlcHMubWFwKGZ1bmN0aW9uIChkZXBOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHIoZGVwTmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vQ2FsbCB0aGUgZmFjdG9yeSB3aXRoIHRoZSByaWdodCBkZXBlbmRlbmNpZXMuXG4gICAgICAgIGlmICh0eXBlb2YgZmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmVzdWx0ID0gZmFjdG9yeS5hcHBseShtLmV4cG9ydHMsIGRlcHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gZmFjdG9yeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbS5leHBvcnRzID0gcmVzdWx0O1xuICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgbG9hZGVyQ2FjaGVbaWRdID0gbS5leHBvcnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RyaW5nUmVxdWlyZSA9IGZ1bmN0aW9uIChzeXN0ZW1SZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUsIGlkLCByZWxJZCkge1xuICAgICAgICAvL1NwbGl0IHRoZSBJRCBieSBhICEgc28gdGhhdFxuICAgICAgICB2YXIgaW5kZXggPSBpZC5pbmRleE9mKCchJyksXG4gICAgICAgICAgICBvcmlnaW5hbElkID0gaWQsXG4gICAgICAgICAgICBwcmVmaXgsIHBsdWdpbjtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBpZCA9IG5vcm1hbGl6ZShpZCwgcmVsSWQpO1xuXG4gICAgICAgICAgICAvL1N0cmFpZ2h0IG1vZHVsZSBsb29rdXAuIElmIGl0IGlzIG9uZSBvZiB0aGUgc3BlY2lhbCBkZXBlbmRlbmNpZXMsXG4gICAgICAgICAgICAvL2RlYWwgd2l0aCBpdCwgb3RoZXJ3aXNlLCBkZWxlZ2F0ZSB0byBub2RlLlxuICAgICAgICAgICAgaWYgKGlkID09PSAncmVxdWlyZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVJlcXVpcmUoc3lzdGVtUmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlLCByZWxJZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlkID09PSAnZXhwb3J0cycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwb3J0cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICdtb2R1bGUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9hZGVyQ2FjaGUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlckNhY2hlW2lkXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVmaW5lQ2FjaGVbaWRdKSB7XG4gICAgICAgICAgICAgICAgcnVuRmFjdG9yeS5hcHBseShudWxsLCBkZWZpbmVDYWNoZVtpZF0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXJDYWNoZVtpZF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKHN5c3RlbVJlcXVpcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5c3RlbVJlcXVpcmUob3JpZ2luYWxJZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBtb2R1bGUgd2l0aCBJRDogJyArIGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL1RoZXJlIGlzIGEgcGx1Z2luIGluIHBsYXkuXG4gICAgICAgICAgICBwcmVmaXggPSBpZC5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHJpbmcoaW5kZXggKyAxLCBpZC5sZW5ndGgpO1xuXG4gICAgICAgICAgICBwbHVnaW4gPSBzdHJpbmdSZXF1aXJlKHN5c3RlbVJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSwgcHJlZml4LCByZWxJZCk7XG5cbiAgICAgICAgICAgIGlmIChwbHVnaW4ubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBwbHVnaW4ubm9ybWFsaXplKGlkLCBtYWtlTm9ybWFsaXplKHJlbElkKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBJRCBub3JtYWxseS5cbiAgICAgICAgICAgICAgICBpZCA9IG5vcm1hbGl6ZShpZCwgcmVsSWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobG9hZGVyQ2FjaGVbaWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlckNhY2hlW2lkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luLmxvYWQoaWQsIG1ha2VSZXF1aXJlKHN5c3RlbVJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSwgcmVsSWQpLCBtYWtlTG9hZChpZCksIHt9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXJDYWNoZVtpZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy9DcmVhdGUgYSBkZWZpbmUgZnVuY3Rpb24gc3BlY2lmaWMgdG8gdGhlIG1vZHVsZSBhc2tpbmcgZm9yIGFtZGVmaW5lLlxuICAgIGZ1bmN0aW9uIGRlZmluZShpZCwgZGVwcywgZmFjdG9yeSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpZCkpIHtcbiAgICAgICAgICAgIGZhY3RvcnkgPSBkZXBzO1xuICAgICAgICAgICAgZGVwcyA9IGlkO1xuICAgICAgICAgICAgaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZmFjdG9yeSA9IGlkO1xuICAgICAgICAgICAgaWQgPSBkZXBzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlcHMgJiYgIUFycmF5LmlzQXJyYXkoZGVwcykpIHtcbiAgICAgICAgICAgIGZhY3RvcnkgPSBkZXBzO1xuICAgICAgICAgICAgZGVwcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGVwcykge1xuICAgICAgICAgICAgZGVwcyA9IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9TZXQgdXAgcHJvcGVydGllcyBmb3IgdGhpcyBtb2R1bGUuIElmIGFuIElELCB0aGVuIHVzZVxuICAgICAgICAvL2ludGVybmFsIGNhY2hlLiBJZiBubyBJRCwgdGhlbiB1c2UgdGhlIGV4dGVybmFsIHZhcmlhYmxlc1xuICAgICAgICAvL2ZvciB0aGlzIG5vZGUgbW9kdWxlLlxuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIC8vUHV0IHRoZSBtb2R1bGUgaW4gZGVlcCBmcmVlemUgdW50aWwgdGhlcmUgaXMgYVxuICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwgZm9yIGl0LlxuICAgICAgICAgICAgZGVmaW5lQ2FjaGVbaWRdID0gW2lkLCBkZXBzLCBmYWN0b3J5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJ1bkZhY3RvcnkoaWQsIGRlcHMsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9kZWZpbmUucmVxdWlyZSwgd2hpY2ggaGFzIGFjY2VzcyB0byBhbGwgdGhlIHZhbHVlcyBpbiB0aGVcbiAgICAvL2NhY2hlLiBVc2VmdWwgZm9yIEFNRCBtb2R1bGVzIHRoYXQgYWxsIGhhdmUgSURzIGluIHRoZSBmaWxlLFxuICAgIC8vYnV0IG5lZWQgdG8gZmluYWxseSBleHBvcnQgYSB2YWx1ZSB0byBub2RlIGJhc2VkIG9uIG9uZSBvZiB0aG9zZVxuICAgIC8vSURzLlxuICAgIGRlZmluZS5yZXF1aXJlID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgIGlmIChsb2FkZXJDYWNoZVtpZF0pIHtcbiAgICAgICAgICAgIHJldHVybiBsb2FkZXJDYWNoZVtpZF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVmaW5lQ2FjaGVbaWRdKSB7XG4gICAgICAgICAgICBydW5GYWN0b3J5LmFwcGx5KG51bGwsIGRlZmluZUNhY2hlW2lkXSk7XG4gICAgICAgICAgICByZXR1cm4gbG9hZGVyQ2FjaGVbaWRdO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGRlZmluZS5hbWQgPSB7fTtcblxuICAgIHJldHVybiBkZWZpbmU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYW1kZWZpbmU7XG4iLCJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXF1YWwoYXJyMSwgYXJyMikge1xuICB2YXIgbGVuZ3RoID0gYXJyMS5sZW5ndGhcbiAgaWYgKGxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHJldHVybiBmYWxzZVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuICAgIGlmIChhcnIxW2ldICE9PSBhcnIyW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG4iLCJ2YXIgYXNuMSA9IGV4cG9ydHM7XG5cbmFzbjEuYmlnbnVtID0gcmVxdWlyZSgnYm4uanMnKTtcblxuYXNuMS5kZWZpbmUgPSByZXF1aXJlKCcuL2FzbjEvYXBpJykuZGVmaW5lO1xuYXNuMS5iYXNlID0gcmVxdWlyZSgnLi9hc24xL2Jhc2UnKTtcbmFzbjEuY29uc3RhbnRzID0gcmVxdWlyZSgnLi9hc24xL2NvbnN0YW50cycpO1xuYXNuMS5kZWNvZGVycyA9IHJlcXVpcmUoJy4vYXNuMS9kZWNvZGVycycpO1xuYXNuMS5lbmNvZGVycyA9IHJlcXVpcmUoJy4vYXNuMS9lbmNvZGVycycpO1xuIiwidmFyIGFzbjEgPSByZXF1aXJlKCcuLi9hc24xJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG52YXIgYXBpID0gZXhwb3J0cztcblxuYXBpLmRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShuYW1lLCBib2R5KSB7XG4gIHJldHVybiBuZXcgRW50aXR5KG5hbWUsIGJvZHkpO1xufTtcblxuZnVuY3Rpb24gRW50aXR5KG5hbWUsIGJvZHkpIHtcbiAgdGhpcy5uYW1lID0gbmFtZTtcbiAgdGhpcy5ib2R5ID0gYm9keTtcblxuICB0aGlzLmRlY29kZXJzID0ge307XG4gIHRoaXMuZW5jb2RlcnMgPSB7fTtcbn07XG5cbkVudGl0eS5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkID0gZnVuY3Rpb24gY3JlYXRlTmFtZWQoYmFzZSkge1xuICB2YXIgbmFtZWQ7XG4gIHRyeSB7XG4gICAgbmFtZWQgPSByZXF1aXJlKCd2bScpLnJ1bkluVGhpc0NvbnRleHQoXG4gICAgICAnKGZ1bmN0aW9uICcgKyB0aGlzLm5hbWUgKyAnKGVudGl0eSkge1xcbicgK1xuICAgICAgJyAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XFxuJyArXG4gICAgICAnfSknXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIG5hbWVkID0gZnVuY3Rpb24gKGVudGl0eSkge1xuICAgICAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XG4gICAgfTtcbiAgfVxuICBpbmhlcml0cyhuYW1lZCwgYmFzZSk7XG4gIG5hbWVkLnByb3RvdHlwZS5faW5pdE5hbWVkID0gZnVuY3Rpb24gaW5pdG5hbWVkKGVudGl0eSkge1xuICAgIGJhc2UuY2FsbCh0aGlzLCBlbnRpdHkpO1xuICB9O1xuXG4gIHJldHVybiBuZXcgbmFtZWQodGhpcyk7XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLl9nZXREZWNvZGVyID0gZnVuY3Rpb24gX2dldERlY29kZXIoZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAnZGVyJztcbiAgLy8gTGF6aWx5IGNyZWF0ZSBkZWNvZGVyXG4gIGlmICghdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShlbmMpKVxuICAgIHRoaXMuZGVjb2RlcnNbZW5jXSA9IHRoaXMuX2NyZWF0ZU5hbWVkKGFzbjEuZGVjb2RlcnNbZW5jXSk7XG4gIHJldHVybiB0aGlzLmRlY29kZXJzW2VuY107XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShkYXRhLCBlbmMsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRoaXMuX2dldERlY29kZXIoZW5jKS5kZWNvZGUoZGF0YSwgb3B0aW9ucyk7XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLl9nZXRFbmNvZGVyID0gZnVuY3Rpb24gX2dldEVuY29kZXIoZW5jKSB7XG4gIGVuYyA9IGVuYyB8fCAnZGVyJztcbiAgLy8gTGF6aWx5IGNyZWF0ZSBlbmNvZGVyXG4gIGlmICghdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShlbmMpKVxuICAgIHRoaXMuZW5jb2RlcnNbZW5jXSA9IHRoaXMuX2NyZWF0ZU5hbWVkKGFzbjEuZW5jb2RlcnNbZW5jXSk7XG4gIHJldHVybiB0aGlzLmVuY29kZXJzW2VuY107XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShkYXRhLCBlbmMsIC8qIGludGVybmFsICovIHJlcG9ydGVyKSB7XG4gIHJldHVybiB0aGlzLl9nZXRFbmNvZGVyKGVuYykuZW5jb2RlKGRhdGEsIHJlcG9ydGVyKTtcbn07XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIFJlcG9ydGVyID0gcmVxdWlyZSgnLi4vYmFzZScpLlJlcG9ydGVyO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxuZnVuY3Rpb24gRGVjb2RlckJ1ZmZlcihiYXNlLCBvcHRpb25zKSB7XG4gIFJlcG9ydGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJhc2UpKSB7XG4gICAgdGhpcy5lcnJvcignSW5wdXQgbm90IEJ1ZmZlcicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuYmFzZSA9IGJhc2U7XG4gIHRoaXMub2Zmc2V0ID0gMDtcbiAgdGhpcy5sZW5ndGggPSBiYXNlLmxlbmd0aDtcbn1cbmluaGVyaXRzKERlY29kZXJCdWZmZXIsIFJlcG9ydGVyKTtcbmV4cG9ydHMuRGVjb2RlckJ1ZmZlciA9IERlY29kZXJCdWZmZXI7XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbiBzYXZlKCkge1xuICByZXR1cm4geyBvZmZzZXQ6IHRoaXMub2Zmc2V0LCByZXBvcnRlcjogUmVwb3J0ZXIucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKSB9O1xufTtcblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uIHJlc3RvcmUoc2F2ZSkge1xuICAvLyBSZXR1cm4gc2tpcHBlZCBkYXRhXG4gIHZhciByZXMgPSBuZXcgRGVjb2RlckJ1ZmZlcih0aGlzLmJhc2UpO1xuICByZXMub2Zmc2V0ID0gc2F2ZS5vZmZzZXQ7XG4gIHJlcy5sZW5ndGggPSB0aGlzLm9mZnNldDtcblxuICB0aGlzLm9mZnNldCA9IHNhdmUub2Zmc2V0O1xuICBSZXBvcnRlci5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsIHNhdmUucmVwb3J0ZXIpO1xuXG4gIHJldHVybiByZXM7XG59O1xuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gaXNFbXB0eSgpIHtcbiAgcmV0dXJuIHRoaXMub2Zmc2V0ID09PSB0aGlzLmxlbmd0aDtcbn07XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OChmYWlsKSB7XG4gIGlmICh0aGlzLm9mZnNldCArIDEgPD0gdGhpcy5sZW5ndGgpXG4gICAgcmV0dXJuIHRoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywgdHJ1ZSk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5lcnJvcihmYWlsIHx8ICdEZWNvZGVyQnVmZmVyIG92ZXJydW4nKTtcbn1cblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uIHNraXAoYnl0ZXMsIGZhaWwpIHtcbiAgaWYgKCEodGhpcy5vZmZzZXQgKyBieXRlcyA8PSB0aGlzLmxlbmd0aCkpXG4gICAgcmV0dXJuIHRoaXMuZXJyb3IoZmFpbCB8fCAnRGVjb2RlckJ1ZmZlciBvdmVycnVuJyk7XG5cbiAgdmFyIHJlcyA9IG5ldyBEZWNvZGVyQnVmZmVyKHRoaXMuYmFzZSk7XG5cbiAgLy8gU2hhcmUgcmVwb3J0ZXIgc3RhdGVcbiAgcmVzLl9yZXBvcnRlclN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICByZXMub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gIHJlcy5sZW5ndGggPSB0aGlzLm9mZnNldCArIGJ5dGVzO1xuICB0aGlzLm9mZnNldCArPSBieXRlcztcbiAgcmV0dXJuIHJlcztcbn1cblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24gcmF3KHNhdmUpIHtcbiAgcmV0dXJuIHRoaXMuYmFzZS5zbGljZShzYXZlID8gc2F2ZS5vZmZzZXQgOiB0aGlzLm9mZnNldCwgdGhpcy5sZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBFbmNvZGVyQnVmZmVyKHZhbHVlLCByZXBvcnRlcikge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgRW5jb2RlckJ1ZmZlcikpXG4gICAgICAgIGl0ZW0gPSBuZXcgRW5jb2RlckJ1ZmZlcihpdGVtLCByZXBvcnRlcik7XG4gICAgICB0aGlzLmxlbmd0aCArPSBpdGVtLmxlbmd0aDtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0sIHRoaXMpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoISgwIDw9IHZhbHVlICYmIHZhbHVlIDw9IDB4ZmYpKVxuICAgICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlJyk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMubGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUpO1xuICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5sZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdVbnN1cHBvcnRlZCB0eXBlOiAnICsgdHlwZW9mIHZhbHVlKTtcbiAgfVxufVxuZXhwb3J0cy5FbmNvZGVyQnVmZmVyID0gRW5jb2RlckJ1ZmZlcjtcblxuRW5jb2RlckJ1ZmZlci5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uIGpvaW4ob3V0LCBvZmZzZXQpIHtcbiAgaWYgKCFvdXQpXG4gICAgb3V0ID0gbmV3IEJ1ZmZlcih0aGlzLmxlbmd0aCk7XG4gIGlmICghb2Zmc2V0KVxuICAgIG9mZnNldCA9IDA7XG5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBvdXQ7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICB0aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgaXRlbS5qb2luKG91dCwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCArPSBpdGVtLmxlbmd0aDtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09ICdudW1iZXInKVxuICAgICAgb3V0W29mZnNldF0gPSB0aGlzLnZhbHVlO1xuICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLnZhbHVlID09PSAnc3RyaW5nJylcbiAgICAgIG91dC53cml0ZSh0aGlzLnZhbHVlLCBvZmZzZXQpO1xuICAgIGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLnZhbHVlKSlcbiAgICAgIHRoaXMudmFsdWUuY29weShvdXQsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IHRoaXMubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn07XG4iLCJ2YXIgYmFzZSA9IGV4cG9ydHM7XG5cbmJhc2UuUmVwb3J0ZXIgPSByZXF1aXJlKCcuL3JlcG9ydGVyJykuUmVwb3J0ZXI7XG5iYXNlLkRlY29kZXJCdWZmZXIgPSByZXF1aXJlKCcuL2J1ZmZlcicpLkRlY29kZXJCdWZmZXI7XG5iYXNlLkVuY29kZXJCdWZmZXIgPSByZXF1aXJlKCcuL2J1ZmZlcicpLkVuY29kZXJCdWZmZXI7XG5iYXNlLk5vZGUgPSByZXF1aXJlKCcuL25vZGUnKTtcbiIsInZhciBSZXBvcnRlciA9IHJlcXVpcmUoJy4uL2Jhc2UnKS5SZXBvcnRlcjtcbnZhciBFbmNvZGVyQnVmZmVyID0gcmVxdWlyZSgnLi4vYmFzZScpLkVuY29kZXJCdWZmZXI7XG52YXIgRGVjb2RlckJ1ZmZlciA9IHJlcXVpcmUoJy4uL2Jhc2UnKS5EZWNvZGVyQnVmZmVyO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuLy8gU3VwcG9ydGVkIHRhZ3NcbnZhciB0YWdzID0gW1xuICAnc2VxJywgJ3NlcW9mJywgJ3NldCcsICdzZXRvZicsICdvYmppZCcsICdib29sJyxcbiAgJ2dlbnRpbWUnLCAndXRjdGltZScsICdudWxsXycsICdlbnVtJywgJ2ludCcsICdvYmpEZXNjJyxcbiAgJ2JpdHN0cicsICdibXBzdHInLCAnY2hhcnN0cicsICdnZW5zdHInLCAnZ3JhcGhzdHInLCAnaWE1c3RyJywgJ2lzbzY0NnN0cicsXG4gICdudW1zdHInLCAnb2N0c3RyJywgJ3ByaW50c3RyJywgJ3Q2MXN0cicsICd1bmlzdHInLCAndXRmOHN0cicsICd2aWRlb3N0cidcbl07XG5cbi8vIFB1YmxpYyBtZXRob2RzIGxpc3RcbnZhciBtZXRob2RzID0gW1xuICAna2V5JywgJ29iaicsICd1c2UnLCAnb3B0aW9uYWwnLCAnZXhwbGljaXQnLCAnaW1wbGljaXQnLCAnZGVmJywgJ2Nob2ljZScsXG4gICdhbnknLCAnY29udGFpbnMnXG5dLmNvbmNhdCh0YWdzKTtcblxuLy8gT3ZlcnJpZGVkIG1ldGhvZHMgbGlzdFxudmFyIG92ZXJyaWRlZCA9IFtcbiAgJ19wZWVrVGFnJywgJ19kZWNvZGVUYWcnLCAnX3VzZScsXG4gICdfZGVjb2RlU3RyJywgJ19kZWNvZGVPYmppZCcsICdfZGVjb2RlVGltZScsXG4gICdfZGVjb2RlTnVsbCcsICdfZGVjb2RlSW50JywgJ19kZWNvZGVCb29sJywgJ19kZWNvZGVMaXN0JyxcblxuICAnX2VuY29kZUNvbXBvc2l0ZScsICdfZW5jb2RlU3RyJywgJ19lbmNvZGVPYmppZCcsICdfZW5jb2RlVGltZScsXG4gICdfZW5jb2RlTnVsbCcsICdfZW5jb2RlSW50JywgJ19lbmNvZGVCb29sJ1xuXTtcblxuZnVuY3Rpb24gTm9kZShlbmMsIHBhcmVudCkge1xuICB2YXIgc3RhdGUgPSB7fTtcbiAgdGhpcy5fYmFzZVN0YXRlID0gc3RhdGU7XG5cbiAgc3RhdGUuZW5jID0gZW5jO1xuXG4gIHN0YXRlLnBhcmVudCA9IHBhcmVudCB8fCBudWxsO1xuICBzdGF0ZS5jaGlsZHJlbiA9IG51bGw7XG5cbiAgLy8gU3RhdGVcbiAgc3RhdGUudGFnID0gbnVsbDtcbiAgc3RhdGUuYXJncyA9IG51bGw7XG4gIHN0YXRlLnJldmVyc2VBcmdzID0gbnVsbDtcbiAgc3RhdGUuY2hvaWNlID0gbnVsbDtcbiAgc3RhdGUub3B0aW9uYWwgPSBmYWxzZTtcbiAgc3RhdGUuYW55ID0gZmFsc2U7XG4gIHN0YXRlLm9iaiA9IGZhbHNlO1xuICBzdGF0ZS51c2UgPSBudWxsO1xuICBzdGF0ZS51c2VEZWNvZGVyID0gbnVsbDtcbiAgc3RhdGUua2V5ID0gbnVsbDtcbiAgc3RhdGVbJ2RlZmF1bHQnXSA9IG51bGw7XG4gIHN0YXRlLmV4cGxpY2l0ID0gbnVsbDtcbiAgc3RhdGUuaW1wbGljaXQgPSBudWxsO1xuICBzdGF0ZS5jb250YWlucyA9IG51bGw7XG5cbiAgLy8gU2hvdWxkIGNyZWF0ZSBuZXcgaW5zdGFuY2Ugb24gZWFjaCBtZXRob2RcbiAgaWYgKCFzdGF0ZS5wYXJlbnQpIHtcbiAgICBzdGF0ZS5jaGlsZHJlbiA9IFtdO1xuICAgIHRoaXMuX3dyYXAoKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBOb2RlO1xuXG52YXIgc3RhdGVQcm9wcyA9IFtcbiAgJ2VuYycsICdwYXJlbnQnLCAnY2hpbGRyZW4nLCAndGFnJywgJ2FyZ3MnLCAncmV2ZXJzZUFyZ3MnLCAnY2hvaWNlJyxcbiAgJ29wdGlvbmFsJywgJ2FueScsICdvYmonLCAndXNlJywgJ2FsdGVyZWRVc2UnLCAna2V5JywgJ2RlZmF1bHQnLCAnZXhwbGljaXQnLFxuICAnaW1wbGljaXQnLCAnY29udGFpbnMnXG5dO1xuXG5Ob2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIHZhciBjc3RhdGUgPSB7fTtcbiAgc3RhdGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgICBjc3RhdGVbcHJvcF0gPSBzdGF0ZVtwcm9wXTtcbiAgfSk7XG4gIHZhciByZXMgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihjc3RhdGUucGFyZW50KTtcbiAgcmVzLl9iYXNlU3RhdGUgPSBjc3RhdGU7XG4gIHJldHVybiByZXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fd3JhcCA9IGZ1bmN0aW9uIHdyYXAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgbWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIHRoaXNbbWV0aG9kXSA9IGZ1bmN0aW9uIF93cmFwcGVkTWV0aG9kKCkge1xuICAgICAgdmFyIGNsb25lID0gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7XG4gICAgICBzdGF0ZS5jaGlsZHJlbi5wdXNoKGNsb25lKTtcbiAgICAgIHJldHVybiBjbG9uZVttZXRob2RdLmFwcGx5KGNsb25lLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH0sIHRoaXMpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGJvZHkpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5wYXJlbnQgPT09IG51bGwpO1xuICBib2R5LmNhbGwodGhpcyk7XG5cbiAgLy8gRmlsdGVyIGNoaWxkcmVuXG4gIHN0YXRlLmNoaWxkcmVuID0gc3RhdGUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkLl9iYXNlU3RhdGUucGFyZW50ID09PSB0aGlzO1xuICB9LCB0aGlzKTtcbiAgYXNzZXJ0LmVxdWFsKHN0YXRlLmNoaWxkcmVuLmxlbmd0aCwgMSwgJ1Jvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCcpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX3VzZUFyZ3MgPSBmdW5jdGlvbiB1c2VBcmdzKGFyZ3MpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIC8vIEZpbHRlciBjaGlsZHJlbiBhbmQgYXJnc1xuICB2YXIgY2hpbGRyZW4gPSBhcmdzLmZpbHRlcihmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcjtcbiAgfSwgdGhpcyk7XG4gIGFyZ3MgPSBhcmdzLmZpbHRlcihmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gIShhcmcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSwgdGhpcyk7XG5cbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzc2VydChzdGF0ZS5jaGlsZHJlbiA9PT0gbnVsbCk7XG4gICAgc3RhdGUuY2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgIC8vIFJlcGxhY2UgcGFyZW50IHRvIG1haW50YWluIGJhY2t3YXJkIGxpbmtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICBjaGlsZC5fYmFzZVN0YXRlLnBhcmVudCA9IHRoaXM7XG4gICAgfSwgdGhpcyk7XG4gIH1cbiAgaWYgKGFyZ3MubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNzZXJ0KHN0YXRlLmFyZ3MgPT09IG51bGwpO1xuICAgIHN0YXRlLmFyZ3MgPSBhcmdzO1xuICAgIHN0YXRlLnJldmVyc2VBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24oYXJnKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcgfHwgYXJnLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpXG4gICAgICAgIHJldHVybiBhcmc7XG5cbiAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKGFyZykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PSAoa2V5IHwgMCkpXG4gICAgICAgICAga2V5IHw9IDA7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFyZ1trZXldO1xuICAgICAgICByZXNbdmFsdWVdID0ga2V5O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9XG59O1xuXG4vL1xuLy8gT3ZlcnJpZGVkIG1ldGhvZHNcbi8vXG5cbm92ZXJyaWRlZC5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICBOb2RlLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gX292ZXJyaWRlZCgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1ldGhvZCArICcgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogJyArIHN0YXRlLmVuYyk7XG4gIH07XG59KTtcblxuLy9cbi8vIFB1YmxpYyBtZXRob2RzXG4vL1xuXG50YWdzLmZvckVhY2goZnVuY3Rpb24odGFnKSB7XG4gIE5vZGUucHJvdG90eXBlW3RhZ10gPSBmdW5jdGlvbiBfdGFnTWV0aG9kKCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cbiAgICBhc3NlcnQoc3RhdGUudGFnID09PSBudWxsKTtcbiAgICBzdGF0ZS50YWcgPSB0YWc7XG5cbiAgICB0aGlzLl91c2VBcmdzKGFyZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG59KTtcblxuTm9kZS5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGl0ZW0pIHtcbiAgYXNzZXJ0KGl0ZW0pO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlLnVzZSA9PT0gbnVsbCk7XG4gIHN0YXRlLnVzZSA9IGl0ZW07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5vcHRpb25hbCA9IGZ1bmN0aW9uIG9wdGlvbmFsKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgc3RhdGUub3B0aW9uYWwgPSB0cnVlO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuZGVmID0gZnVuY3Rpb24gZGVmKHZhbCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlWydkZWZhdWx0J10gPT09IG51bGwpO1xuICBzdGF0ZVsnZGVmYXVsdCddID0gdmFsO1xuICBzdGF0ZS5vcHRpb25hbCA9IHRydWU7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5leHBsaWNpdCA9IGZ1bmN0aW9uIGV4cGxpY2l0KG51bSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlLmV4cGxpY2l0ID09PSBudWxsICYmIHN0YXRlLmltcGxpY2l0ID09PSBudWxsKTtcbiAgc3RhdGUuZXhwbGljaXQgPSBudW07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5pbXBsaWNpdCA9IGZ1bmN0aW9uIGltcGxpY2l0KG51bSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlLmV4cGxpY2l0ID09PSBudWxsICYmIHN0YXRlLmltcGxpY2l0ID09PSBudWxsKTtcbiAgc3RhdGUuaW1wbGljaXQgPSBudW07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5vYmogPSBmdW5jdGlvbiBvYmooKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gIHN0YXRlLm9iaiA9IHRydWU7XG5cbiAgaWYgKGFyZ3MubGVuZ3RoICE9PSAwKVxuICAgIHRoaXMuX3VzZUFyZ3MoYXJncyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5rZXkgPSBmdW5jdGlvbiBrZXkobmV3S2V5KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUua2V5ID09PSBudWxsKTtcbiAgc3RhdGUua2V5ID0gbmV3S2V5O1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuYW55ID0gZnVuY3Rpb24gYW55KCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgc3RhdGUuYW55ID0gdHJ1ZTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbk5vZGUucHJvdG90eXBlLmNob2ljZSA9IGZ1bmN0aW9uIGNob2ljZShvYmopIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5jaG9pY2UgPT09IG51bGwpO1xuICBzdGF0ZS5jaG9pY2UgPSBvYmo7XG4gIHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9ialtrZXldO1xuICB9KSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKGl0ZW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS51c2UgPT09IG51bGwpO1xuICBzdGF0ZS5jb250YWlucyA9IGl0ZW07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gRGVjb2Rpbmdcbi8vXG5cbk5vZGUucHJvdG90eXBlLl9kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIC8vIERlY29kZSByb290IG5vZGVcbiAgaWYgKHN0YXRlLnBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gaW5wdXQud3JhcFJlc3VsdChzdGF0ZS5jaGlsZHJlblswXS5fZGVjb2RlKGlucHV0LCBvcHRpb25zKSk7XG5cbiAgdmFyIHJlc3VsdCA9IHN0YXRlWydkZWZhdWx0J107XG4gIHZhciBwcmVzZW50ID0gdHJ1ZTtcblxuICB2YXIgcHJldktleSA9IG51bGw7XG4gIGlmIChzdGF0ZS5rZXkgIT09IG51bGwpXG4gICAgcHJldktleSA9IGlucHV0LmVudGVyS2V5KHN0YXRlLmtleSk7XG5cbiAgLy8gQ2hlY2sgaWYgdGFnIGlzIHRoZXJlXG4gIGlmIChzdGF0ZS5vcHRpb25hbCkge1xuICAgIHZhciB0YWcgPSBudWxsO1xuICAgIGlmIChzdGF0ZS5leHBsaWNpdCAhPT0gbnVsbClcbiAgICAgIHRhZyA9IHN0YXRlLmV4cGxpY2l0O1xuICAgIGVsc2UgaWYgKHN0YXRlLmltcGxpY2l0ICE9PSBudWxsKVxuICAgICAgdGFnID0gc3RhdGUuaW1wbGljaXQ7XG4gICAgZWxzZSBpZiAoc3RhdGUudGFnICE9PSBudWxsKVxuICAgICAgdGFnID0gc3RhdGUudGFnO1xuXG4gICAgaWYgKHRhZyA9PT0gbnVsbCAmJiAhc3RhdGUuYW55KSB7XG4gICAgICAvLyBUcmlhbCBhbmQgRXJyb3JcbiAgICAgIHZhciBzYXZlID0gaW5wdXQuc2F2ZSgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHN0YXRlLmNob2ljZSA9PT0gbnVsbClcbiAgICAgICAgICB0aGlzLl9kZWNvZGVHZW5lcmljKHN0YXRlLnRhZywgaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpcy5fZGVjb2RlQ2hvaWNlKGlucHV0LCBvcHRpb25zKTtcbiAgICAgICAgcHJlc2VudCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHByZXNlbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlucHV0LnJlc3RvcmUoc2F2ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZXNlbnQgPSB0aGlzLl9wZWVrVGFnKGlucHV0LCB0YWcsIHN0YXRlLmFueSk7XG5cbiAgICAgIGlmIChpbnB1dC5pc0Vycm9yKHByZXNlbnQpKVxuICAgICAgICByZXR1cm4gcHJlc2VudDtcbiAgICB9XG4gIH1cblxuICAvLyBQdXNoIG9iamVjdCBvbiBzdGFja1xuICB2YXIgcHJldk9iajtcbiAgaWYgKHN0YXRlLm9iaiAmJiBwcmVzZW50KVxuICAgIHByZXZPYmogPSBpbnB1dC5lbnRlck9iamVjdCgpO1xuXG4gIGlmIChwcmVzZW50KSB7XG4gICAgLy8gVW53cmFwIGV4cGxpY2l0IHZhbHVlc1xuICAgIGlmIChzdGF0ZS5leHBsaWNpdCAhPT0gbnVsbCkge1xuICAgICAgdmFyIGV4cGxpY2l0ID0gdGhpcy5fZGVjb2RlVGFnKGlucHV0LCBzdGF0ZS5leHBsaWNpdCk7XG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcihleHBsaWNpdCkpXG4gICAgICAgIHJldHVybiBleHBsaWNpdDtcbiAgICAgIGlucHV0ID0gZXhwbGljaXQ7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0ID0gaW5wdXQub2Zmc2V0O1xuXG4gICAgLy8gVW53cmFwIGltcGxpY2l0IGFuZCBub3JtYWwgdmFsdWVzXG4gICAgaWYgKHN0YXRlLnVzZSA9PT0gbnVsbCAmJiBzdGF0ZS5jaG9pY2UgPT09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0ZS5hbnkpXG4gICAgICAgIHZhciBzYXZlID0gaW5wdXQuc2F2ZSgpO1xuICAgICAgdmFyIGJvZHkgPSB0aGlzLl9kZWNvZGVUYWcoXG4gICAgICAgIGlucHV0LFxuICAgICAgICBzdGF0ZS5pbXBsaWNpdCAhPT0gbnVsbCA/IHN0YXRlLmltcGxpY2l0IDogc3RhdGUudGFnLFxuICAgICAgICBzdGF0ZS5hbnlcbiAgICAgICk7XG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcihib2R5KSlcbiAgICAgICAgcmV0dXJuIGJvZHk7XG5cbiAgICAgIGlmIChzdGF0ZS5hbnkpXG4gICAgICAgIHJlc3VsdCA9IGlucHV0LnJhdyhzYXZlKTtcbiAgICAgIGVsc2VcbiAgICAgICAgaW5wdXQgPSBib2R5O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJhY2sgJiYgc3RhdGUudGFnICE9PSBudWxsKVxuICAgICAgb3B0aW9ucy50cmFjayhpbnB1dC5wYXRoKCksIHN0YXJ0LCBpbnB1dC5sZW5ndGgsICd0YWdnZWQnKTtcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudHJhY2sgJiYgc3RhdGUudGFnICE9PSBudWxsKVxuICAgICAgb3B0aW9ucy50cmFjayhpbnB1dC5wYXRoKCksIGlucHV0Lm9mZnNldCwgaW5wdXQubGVuZ3RoLCAnY29udGVudCcpO1xuXG4gICAgLy8gU2VsZWN0IHByb3BlciBtZXRob2QgZm9yIHRhZ1xuICAgIGlmIChzdGF0ZS5hbnkpXG4gICAgICByZXN1bHQgPSByZXN1bHQ7XG4gICAgZWxzZSBpZiAoc3RhdGUuY2hvaWNlID09PSBudWxsKVxuICAgICAgcmVzdWx0ID0gdGhpcy5fZGVjb2RlR2VuZXJpYyhzdGF0ZS50YWcsIGlucHV0LCBvcHRpb25zKTtcbiAgICBlbHNlXG4gICAgICByZXN1bHQgPSB0aGlzLl9kZWNvZGVDaG9pY2UoaW5wdXQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKGlucHV0LmlzRXJyb3IocmVzdWx0KSlcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICAvLyBEZWNvZGUgY2hpbGRyZW5cbiAgICBpZiAoIXN0YXRlLmFueSAmJiBzdGF0ZS5jaG9pY2UgPT09IG51bGwgJiYgc3RhdGUuY2hpbGRyZW4gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gZGVjb2RlQ2hpbGRyZW4oY2hpbGQpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXJlIGlnbm9yaW5nIGVycm9ycyBoZXJlLCB0byBsZXQgcGFyc2VyIGNvbnRpbnVlIHdpdGggb3RoZXJcbiAgICAgICAgLy8gcGFydHMgb2YgZW5jb2RlZCBkYXRhXG4gICAgICAgIGNoaWxkLl9kZWNvZGUoaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRGVjb2RlIGNvbnRhaW5lZC9lbmNvZGVkIGJ5IHNjaGVtYSwgb25seSBpbiBiaXQgb3Igb2N0ZXQgc3RyaW5nc1xuICAgIGlmIChzdGF0ZS5jb250YWlucyAmJiAoc3RhdGUudGFnID09PSAnb2N0c3RyJyB8fCBzdGF0ZS50YWcgPT09ICdiaXRzdHInKSkge1xuICAgICAgdmFyIGRhdGEgPSBuZXcgRGVjb2RlckJ1ZmZlcihyZXN1bHQpO1xuICAgICAgcmVzdWx0ID0gdGhpcy5fZ2V0VXNlKHN0YXRlLmNvbnRhaW5zLCBpbnB1dC5fcmVwb3J0ZXJTdGF0ZS5vYmopXG4gICAgICAgICAgLl9kZWNvZGUoZGF0YSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUG9wIG9iamVjdFxuICBpZiAoc3RhdGUub2JqICYmIHByZXNlbnQpXG4gICAgcmVzdWx0ID0gaW5wdXQubGVhdmVPYmplY3QocHJldk9iaik7XG5cbiAgLy8gU2V0IGtleVxuICBpZiAoc3RhdGUua2V5ICE9PSBudWxsICYmIChyZXN1bHQgIT09IG51bGwgfHwgcHJlc2VudCA9PT0gdHJ1ZSkpXG4gICAgaW5wdXQubGVhdmVLZXkocHJldktleSwgc3RhdGUua2V5LCByZXN1bHQpO1xuICBlbHNlIGlmIChwcmV2S2V5ICE9PSBudWxsKVxuICAgIGlucHV0LmV4aXRLZXkocHJldktleSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljID0gZnVuY3Rpb24gZGVjb2RlR2VuZXJpYyh0YWcsIGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBpZiAodGFnID09PSAnc2VxJyB8fCB0YWcgPT09ICdzZXQnKVxuICAgIHJldHVybiBudWxsO1xuICBpZiAodGFnID09PSAnc2Vxb2YnIHx8IHRhZyA9PT0gJ3NldG9mJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlTGlzdChpbnB1dCwgdGFnLCBzdGF0ZS5hcmdzWzBdLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAoL3N0ciQvLnRlc3QodGFnKSlcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlU3RyKGlucHV0LCB0YWcsIG9wdGlvbnMpO1xuICBlbHNlIGlmICh0YWcgPT09ICdvYmppZCcgJiYgc3RhdGUuYXJncylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlT2JqaWQoaW5wdXQsIHN0YXRlLmFyZ3NbMF0sIHN0YXRlLmFyZ3NbMV0sIG9wdGlvbnMpO1xuICBlbHNlIGlmICh0YWcgPT09ICdvYmppZCcpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZU9iamlkKGlucHV0LCBudWxsLCBudWxsLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnZ2VudGltZScgfHwgdGFnID09PSAndXRjdGltZScpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZVRpbWUoaW5wdXQsIHRhZywgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ251bGxfJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlTnVsbChpbnB1dCwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2Jvb2wnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVCb29sKGlucHV0LCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqRGVzYycpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZVN0cihpbnB1dCwgdGFnLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnaW50JyB8fCB0YWcgPT09ICdlbnVtJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlSW50KGlucHV0LCBzdGF0ZS5hcmdzICYmIHN0YXRlLmFyZ3NbMF0sIG9wdGlvbnMpO1xuXG4gIGlmIChzdGF0ZS51c2UgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VXNlKHN0YXRlLnVzZSwgaW5wdXQuX3JlcG9ydGVyU3RhdGUub2JqKVxuICAgICAgICAuX2RlY29kZShpbnB1dCwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGlucHV0LmVycm9yKCd1bmtub3duIHRhZzogJyArIHRhZyk7XG4gIH1cbn07XG5cbk5vZGUucHJvdG90eXBlLl9nZXRVc2UgPSBmdW5jdGlvbiBfZ2V0VXNlKGVudGl0eSwgb2JqKSB7XG5cbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICAvLyBDcmVhdGUgYWx0ZXJlZCB1c2UgZGVjb2RlciBpZiBpbXBsaWNpdCBpcyBzZXRcbiAgc3RhdGUudXNlRGVjb2RlciA9IHRoaXMuX3VzZShlbnRpdHksIG9iaik7XG4gIGFzc2VydChzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50ID09PSBudWxsKTtcbiAgc3RhdGUudXNlRGVjb2RlciA9IHN0YXRlLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXTtcbiAgaWYgKHN0YXRlLmltcGxpY2l0ICE9PSBzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQpIHtcbiAgICBzdGF0ZS51c2VEZWNvZGVyID0gc3RhdGUudXNlRGVjb2Rlci5jbG9uZSgpO1xuICAgIHN0YXRlLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCA9IHN0YXRlLmltcGxpY2l0O1xuICB9XG4gIHJldHVybiBzdGF0ZS51c2VEZWNvZGVyO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2RlY29kZUNob2ljZSA9IGZ1bmN0aW9uIGRlY29kZUNob2ljZShpbnB1dCwgb3B0aW9ucykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIHZhciByZXN1bHQgPSBudWxsO1xuICB2YXIgbWF0Y2ggPSBmYWxzZTtcblxuICBPYmplY3Qua2V5cyhzdGF0ZS5jaG9pY2UpLnNvbWUoZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHNhdmUgPSBpbnB1dC5zYXZlKCk7XG4gICAgdmFyIG5vZGUgPSBzdGF0ZS5jaG9pY2Vba2V5XTtcbiAgICB0cnkge1xuICAgICAgdmFyIHZhbHVlID0gbm9kZS5fZGVjb2RlKGlucHV0LCBvcHRpb25zKTtcbiAgICAgIGlmIChpbnB1dC5pc0Vycm9yKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXN1bHQgPSB7IHR5cGU6IGtleSwgdmFsdWU6IHZhbHVlIH07XG4gICAgICBtYXRjaCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaW5wdXQucmVzdG9yZShzYXZlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sIHRoaXMpO1xuXG4gIGlmICghbWF0Y2gpXG4gICAgcmV0dXJuIGlucHV0LmVycm9yKCdDaG9pY2Ugbm90IG1hdGNoZWQnKTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy9cbi8vIEVuY29kaW5nXG4vL1xuXG5Ob2RlLnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlciA9IGZ1bmN0aW9uIGNyZWF0ZUVuY29kZXJCdWZmZXIoZGF0YSkge1xuICByZXR1cm4gbmV3IEVuY29kZXJCdWZmZXIoZGF0YSwgdGhpcy5yZXBvcnRlcik7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGRhdGEsIHJlcG9ydGVyLCBwYXJlbnQpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICBpZiAoc3RhdGVbJ2RlZmF1bHQnXSAhPT0gbnVsbCAmJiBzdGF0ZVsnZGVmYXVsdCddID09PSBkYXRhKVxuICAgIHJldHVybjtcblxuICB2YXIgcmVzdWx0ID0gdGhpcy5fZW5jb2RlVmFsdWUoZGF0YSwgcmVwb3J0ZXIsIHBhcmVudCk7XG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm47XG5cbiAgaWYgKHRoaXMuX3NraXBEZWZhdWx0KHJlc3VsdCwgcmVwb3J0ZXIsIHBhcmVudCkpXG4gICAgcmV0dXJuO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZW5jb2RlVmFsdWUgPSBmdW5jdGlvbiBlbmNvZGUoZGF0YSwgcmVwb3J0ZXIsIHBhcmVudCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgLy8gRGVjb2RlIHJvb3Qgbm9kZVxuICBpZiAoc3RhdGUucGFyZW50ID09PSBudWxsKVxuICAgIHJldHVybiBzdGF0ZS5jaGlsZHJlblswXS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyIHx8IG5ldyBSZXBvcnRlcigpKTtcblxuICB2YXIgcmVzdWx0ID0gbnVsbDtcblxuICAvLyBTZXQgcmVwb3J0ZXIgdG8gc2hhcmUgaXQgd2l0aCBhIGNoaWxkIGNsYXNzXG4gIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjtcblxuICAvLyBDaGVjayBpZiBkYXRhIGlzIHRoZXJlXG4gIGlmIChzdGF0ZS5vcHRpb25hbCAmJiBkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoc3RhdGVbJ2RlZmF1bHQnXSAhPT0gbnVsbClcbiAgICAgIGRhdGEgPSBzdGF0ZVsnZGVmYXVsdCddXG4gICAgZWxzZVxuICAgICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRW5jb2RlIGNoaWxkcmVuIGZpcnN0XG4gIHZhciBjb250ZW50ID0gbnVsbDtcbiAgdmFyIHByaW1pdGl2ZSA9IGZhbHNlO1xuICBpZiAoc3RhdGUuYW55KSB7XG4gICAgLy8gQW55dGhpbmcgdGhhdCB3YXMgZ2l2ZW4gaXMgdHJhbnNsYXRlZCB0byBidWZmZXJcbiAgICByZXN1bHQgPSB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGRhdGEpO1xuICB9IGVsc2UgaWYgKHN0YXRlLmNob2ljZSkge1xuICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZUNob2ljZShkYXRhLCByZXBvcnRlcik7XG4gIH0gZWxzZSBpZiAoc3RhdGUuY29udGFpbnMpIHtcbiAgICBjb250ZW50ID0gdGhpcy5fZ2V0VXNlKHN0YXRlLmNvbnRhaW5zLCBwYXJlbnQpLl9lbmNvZGUoZGF0YSwgcmVwb3J0ZXIpO1xuICAgIHByaW1pdGl2ZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoc3RhdGUuY2hpbGRyZW4pIHtcbiAgICBjb250ZW50ID0gc3RhdGUuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICBpZiAoY2hpbGQuX2Jhc2VTdGF0ZS50YWcgPT09ICdudWxsXycpXG4gICAgICAgIHJldHVybiBjaGlsZC5fZW5jb2RlKG51bGwsIHJlcG9ydGVyLCBkYXRhKTtcblxuICAgICAgaWYgKGNoaWxkLl9iYXNlU3RhdGUua2V5ID09PSBudWxsKVxuICAgICAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ0NoaWxkIHNob3VsZCBoYXZlIGEga2V5Jyk7XG4gICAgICB2YXIgcHJldktleSA9IHJlcG9ydGVyLmVudGVyS2V5KGNoaWxkLl9iYXNlU3RhdGUua2V5KTtcblxuICAgICAgaWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JylcbiAgICAgICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QnKTtcblxuICAgICAgdmFyIHJlcyA9IGNoaWxkLl9lbmNvZGUoZGF0YVtjaGlsZC5fYmFzZVN0YXRlLmtleV0sIHJlcG9ydGVyLCBkYXRhKTtcbiAgICAgIHJlcG9ydGVyLmxlYXZlS2V5KHByZXZLZXkpO1xuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHRoaXMpLmZpbHRlcihmdW5jdGlvbihjaGlsZCkge1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0pO1xuICAgIGNvbnRlbnQgPSB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGNvbnRlbnQpO1xuICB9IGVsc2Uge1xuICAgIGlmIChzdGF0ZS50YWcgPT09ICdzZXFvZicgfHwgc3RhdGUudGFnID09PSAnc2V0b2YnKSB7XG4gICAgICAvLyBUT0RPKGluZHV0bnkpOiB0aGlzIHNob3VsZCBiZSB0aHJvd24gb24gRFNMIGxldmVsXG4gICAgICBpZiAoIShzdGF0ZS5hcmdzICYmIHN0YXRlLmFyZ3MubGVuZ3RoID09PSAxKSlcbiAgICAgICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdUb28gbWFueSBhcmdzIGZvciA6ICcgKyBzdGF0ZS50YWcpO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpXG4gICAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignc2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheScpO1xuXG4gICAgICB2YXIgY2hpbGQgPSB0aGlzLmNsb25lKCk7XG4gICAgICBjaGlsZC5fYmFzZVN0YXRlLmltcGxpY2l0ID0gbnVsbDtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGRhdGEubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRVc2Uoc3RhdGUuYXJnc1swXSwgZGF0YSkuX2VuY29kZShpdGVtLCByZXBvcnRlcik7XG4gICAgICB9LCBjaGlsZCkpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUudXNlICE9PSBudWxsKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLl9nZXRVc2Uoc3RhdGUudXNlLCBwYXJlbnQpLl9lbmNvZGUoZGF0YSwgcmVwb3J0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5fZW5jb2RlUHJpbWl0aXZlKHN0YXRlLnRhZywgZGF0YSk7XG4gICAgICBwcmltaXRpdmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVuY29kZSBkYXRhIGl0c2VsZlxuICB2YXIgcmVzdWx0O1xuICBpZiAoIXN0YXRlLmFueSAmJiBzdGF0ZS5jaG9pY2UgPT09IG51bGwpIHtcbiAgICB2YXIgdGFnID0gc3RhdGUuaW1wbGljaXQgIT09IG51bGwgPyBzdGF0ZS5pbXBsaWNpdCA6IHN0YXRlLnRhZztcbiAgICB2YXIgY2xzID0gc3RhdGUuaW1wbGljaXQgPT09IG51bGwgPyAndW5pdmVyc2FsJyA6ICdjb250ZXh0JztcblxuICAgIGlmICh0YWcgPT09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0ZS51c2UgPT09IG51bGwpXG4gICAgICAgIHJlcG9ydGVyLmVycm9yKCdUYWcgY291bGQgYmUgb21taXRlZCBvbmx5IGZvciAudXNlKCknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXRlLnVzZSA9PT0gbnVsbClcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5fZW5jb2RlQ29tcG9zaXRlKHRhZywgcHJpbWl0aXZlLCBjbHMsIGNvbnRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXAgaW4gZXhwbGljaXRcbiAgaWYgKHN0YXRlLmV4cGxpY2l0ICE9PSBudWxsKVxuICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZUNvbXBvc2l0ZShzdGF0ZS5leHBsaWNpdCwgZmFsc2UsICdjb250ZXh0JywgcmVzdWx0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZUNob2ljZSA9IGZ1bmN0aW9uIGVuY29kZUNob2ljZShkYXRhLCByZXBvcnRlcikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgdmFyIG5vZGUgPSBzdGF0ZS5jaG9pY2VbZGF0YS50eXBlXTtcbiAgaWYgKCFub2RlKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgZGF0YS50eXBlICsgJyBub3QgZm91bmQgaW4gJyArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhzdGF0ZS5jaG9pY2UpKSk7XG4gIH1cbiAgcmV0dXJuIG5vZGUuX2VuY29kZShkYXRhLnZhbHVlLCByZXBvcnRlcik7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlID0gZnVuY3Rpb24gZW5jb2RlUHJpbWl0aXZlKHRhZywgZGF0YSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgaWYgKC9zdHIkLy50ZXN0KHRhZykpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZVN0cihkYXRhLCB0YWcpO1xuICBlbHNlIGlmICh0YWcgPT09ICdvYmppZCcgJiYgc3RhdGUuYXJncylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZGF0YSwgc3RhdGUucmV2ZXJzZUFyZ3NbMF0sIHN0YXRlLmFyZ3NbMV0pO1xuICBlbHNlIGlmICh0YWcgPT09ICdvYmppZCcpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGRhdGEsIG51bGwsIG51bGwpO1xuICBlbHNlIGlmICh0YWcgPT09ICdnZW50aW1lJyB8fCB0YWcgPT09ICd1dGN0aW1lJylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlVGltZShkYXRhLCB0YWcpO1xuICBlbHNlIGlmICh0YWcgPT09ICdudWxsXycpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtcbiAgZWxzZSBpZiAodGFnID09PSAnaW50JyB8fCB0YWcgPT09ICdlbnVtJylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlSW50KGRhdGEsIHN0YXRlLmFyZ3MgJiYgc3RhdGUucmV2ZXJzZUFyZ3NbMF0pO1xuICBlbHNlIGlmICh0YWcgPT09ICdib29sJylcbiAgICByZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChkYXRhKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqRGVzYycpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZVN0cihkYXRhLCB0YWcpO1xuICBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB0YWc6ICcgKyB0YWcpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2lzTnVtc3RyID0gZnVuY3Rpb24gaXNOdW1zdHIoc3RyKSB7XG4gIHJldHVybiAvXlswLTkgXSokLy50ZXN0KHN0cik7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5faXNQcmludHN0ciA9IGZ1bmN0aW9uIGlzUHJpbnRzdHIoc3RyKSB7XG4gIHJldHVybiAvXltBLVphLXowLTkgJ1xcKFxcKVxcKyxcXC1cXC5cXC86PVxcP10qJC8udGVzdChzdHIpO1xufTtcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmZ1bmN0aW9uIFJlcG9ydGVyKG9wdGlvbnMpIHtcbiAgdGhpcy5fcmVwb3J0ZXJTdGF0ZSA9IHtcbiAgICBvYmo6IG51bGwsXG4gICAgcGF0aDogW10sXG4gICAgb3B0aW9uczogb3B0aW9ucyB8fCB7fSxcbiAgICBlcnJvcnM6IFtdXG4gIH07XG59XG5leHBvcnRzLlJlcG9ydGVyID0gUmVwb3J0ZXI7XG5cblJlcG9ydGVyLnByb3RvdHlwZS5pc0Vycm9yID0gZnVuY3Rpb24gaXNFcnJvcihvYmopIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIFJlcG9ydGVyRXJyb3I7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uIHNhdmUoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgcmV0dXJuIHsgb2JqOiBzdGF0ZS5vYmosIHBhdGhMZW46IHN0YXRlLnBhdGgubGVuZ3RoIH07XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uIHJlc3RvcmUoZGF0YSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHN0YXRlLm9iaiA9IGRhdGEub2JqO1xuICBzdGF0ZS5wYXRoID0gc3RhdGUucGF0aC5zbGljZSgwLCBkYXRhLnBhdGhMZW4pO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmVudGVyS2V5ID0gZnVuY3Rpb24gZW50ZXJLZXkoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChrZXkpO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmV4aXRLZXkgPSBmdW5jdGlvbiBleGl0S2V5KGluZGV4KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgc3RhdGUucGF0aCA9IHN0YXRlLnBhdGguc2xpY2UoMCwgaW5kZXggLSAxKTtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5sZWF2ZUtleSA9IGZ1bmN0aW9uIGxlYXZlS2V5KGluZGV4LCBrZXksIHZhbHVlKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgdGhpcy5leGl0S2V5KGluZGV4KTtcbiAgaWYgKHN0YXRlLm9iaiAhPT0gbnVsbClcbiAgICBzdGF0ZS5vYmpba2V5XSA9IHZhbHVlO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLnBhdGggPSBmdW5jdGlvbiBwYXRoKCkge1xuICByZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oJy8nKTtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5lbnRlck9iamVjdCA9IGZ1bmN0aW9uIGVudGVyT2JqZWN0KCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHZhciBwcmV2ID0gc3RhdGUub2JqO1xuICBzdGF0ZS5vYmogPSB7fTtcbiAgcmV0dXJuIHByZXY7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUubGVhdmVPYmplY3QgPSBmdW5jdGlvbiBsZWF2ZU9iamVjdChwcmV2KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgdmFyIG5vdyA9IHN0YXRlLm9iajtcbiAgc3RhdGUub2JqID0gcHJldjtcbiAgcmV0dXJuIG5vdztcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIGVycm9yKG1zZykge1xuICB2YXIgZXJyO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHZhciBpbmhlcml0ZWQgPSBtc2cgaW5zdGFuY2VvZiBSZXBvcnRlckVycm9yO1xuICBpZiAoaW5oZXJpdGVkKSB7XG4gICAgZXJyID0gbXNnO1xuICB9IGVsc2Uge1xuICAgIGVyciA9IG5ldyBSZXBvcnRlckVycm9yKHN0YXRlLnBhdGgubWFwKGZ1bmN0aW9uKGVsZW0pIHtcbiAgICAgIHJldHVybiAnWycgKyBKU09OLnN0cmluZ2lmeShlbGVtKSArICddJztcbiAgICB9KS5qb2luKCcnKSwgbXNnLm1lc3NhZ2UgfHwgbXNnLCBtc2cuc3RhY2spO1xuICB9XG5cbiAgaWYgKCFzdGF0ZS5vcHRpb25zLnBhcnRpYWwpXG4gICAgdGhyb3cgZXJyO1xuXG4gIGlmICghaW5oZXJpdGVkKVxuICAgIHN0YXRlLmVycm9ycy5wdXNoKGVycik7XG5cbiAgcmV0dXJuIGVycjtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS53cmFwUmVzdWx0ID0gZnVuY3Rpb24gd3JhcFJlc3VsdChyZXN1bHQpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcbiAgaWYgKCFzdGF0ZS5vcHRpb25zLnBhcnRpYWwpXG4gICAgcmV0dXJuIHJlc3VsdDtcblxuICByZXR1cm4ge1xuICAgIHJlc3VsdDogdGhpcy5pc0Vycm9yKHJlc3VsdCkgPyBudWxsIDogcmVzdWx0LFxuICAgIGVycm9yczogc3RhdGUuZXJyb3JzXG4gIH07XG59O1xuXG5mdW5jdGlvbiBSZXBvcnRlckVycm9yKHBhdGgsIG1zZykge1xuICB0aGlzLnBhdGggPSBwYXRoO1xuICB0aGlzLnJldGhyb3cobXNnKTtcbn07XG5pbmhlcml0cyhSZXBvcnRlckVycm9yLCBFcnJvcik7XG5cblJlcG9ydGVyRXJyb3IucHJvdG90eXBlLnJldGhyb3cgPSBmdW5jdGlvbiByZXRocm93KG1zZykge1xuICB0aGlzLm1lc3NhZ2UgPSBtc2cgKyAnIGF0OiAnICsgKHRoaXMucGF0aCB8fCAnKHNoYWxsb3cpJyk7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXBvcnRlckVycm9yKTtcblxuICBpZiAoIXRoaXMuc3RhY2spIHtcbiAgICB0cnkge1xuICAgICAgLy8gSUUgb25seSBhZGRzIHN0YWNrIHdoZW4gdGhyb3duXG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLnN0YWNrID0gZS5zdGFjaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuIiwidmFyIGNvbnN0YW50cyA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cycpO1xuXG5leHBvcnRzLnRhZ0NsYXNzID0ge1xuICAwOiAndW5pdmVyc2FsJyxcbiAgMTogJ2FwcGxpY2F0aW9uJyxcbiAgMjogJ2NvbnRleHQnLFxuICAzOiAncHJpdmF0ZSdcbn07XG5leHBvcnRzLnRhZ0NsYXNzQnlOYW1lID0gY29uc3RhbnRzLl9yZXZlcnNlKGV4cG9ydHMudGFnQ2xhc3MpO1xuXG5leHBvcnRzLnRhZyA9IHtcbiAgMHgwMDogJ2VuZCcsXG4gIDB4MDE6ICdib29sJyxcbiAgMHgwMjogJ2ludCcsXG4gIDB4MDM6ICdiaXRzdHInLFxuICAweDA0OiAnb2N0c3RyJyxcbiAgMHgwNTogJ251bGxfJyxcbiAgMHgwNjogJ29iamlkJyxcbiAgMHgwNzogJ29iakRlc2MnLFxuICAweDA4OiAnZXh0ZXJuYWwnLFxuICAweDA5OiAncmVhbCcsXG4gIDB4MGE6ICdlbnVtJyxcbiAgMHgwYjogJ2VtYmVkJyxcbiAgMHgwYzogJ3V0ZjhzdHInLFxuICAweDBkOiAncmVsYXRpdmVPaWQnLFxuICAweDEwOiAnc2VxJyxcbiAgMHgxMTogJ3NldCcsXG4gIDB4MTI6ICdudW1zdHInLFxuICAweDEzOiAncHJpbnRzdHInLFxuICAweDE0OiAndDYxc3RyJyxcbiAgMHgxNTogJ3ZpZGVvc3RyJyxcbiAgMHgxNjogJ2lhNXN0cicsXG4gIDB4MTc6ICd1dGN0aW1lJyxcbiAgMHgxODogJ2dlbnRpbWUnLFxuICAweDE5OiAnZ3JhcGhzdHInLFxuICAweDFhOiAnaXNvNjQ2c3RyJyxcbiAgMHgxYjogJ2dlbnN0cicsXG4gIDB4MWM6ICd1bmlzdHInLFxuICAweDFkOiAnY2hhcnN0cicsXG4gIDB4MWU6ICdibXBzdHInXG59O1xuZXhwb3J0cy50YWdCeU5hbWUgPSBjb25zdGFudHMuX3JldmVyc2UoZXhwb3J0cy50YWcpO1xuIiwidmFyIGNvbnN0YW50cyA9IGV4cG9ydHM7XG5cbi8vIEhlbHBlclxuY29uc3RhbnRzLl9yZXZlcnNlID0gZnVuY3Rpb24gcmV2ZXJzZShtYXApIHtcbiAgdmFyIHJlcyA9IHt9O1xuXG4gIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAvLyBDb252ZXJ0IGtleSB0byBpbnRlZ2VyIGlmIGl0IGlzIHN0cmluZ2lmaWVkXG4gICAgaWYgKChrZXkgfCAwKSA9PSBrZXkpXG4gICAgICBrZXkgPSBrZXkgfCAwO1xuXG4gICAgdmFyIHZhbHVlID0gbWFwW2tleV07XG4gICAgcmVzW3ZhbHVlXSA9IGtleTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbmNvbnN0YW50cy5kZXIgPSByZXF1aXJlKCcuL2RlcicpO1xuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIGFzbjEgPSByZXF1aXJlKCcuLi8uLi9hc24xJyk7XG52YXIgYmFzZSA9IGFzbjEuYmFzZTtcbnZhciBiaWdudW0gPSBhc24xLmJpZ251bTtcblxuLy8gSW1wb3J0IERFUiBjb25zdGFudHNcbnZhciBkZXIgPSBhc24xLmNvbnN0YW50cy5kZXI7XG5cbmZ1bmN0aW9uIERFUkRlY29kZXIoZW50aXR5KSB7XG4gIHRoaXMuZW5jID0gJ2Rlcic7XG4gIHRoaXMubmFtZSA9IGVudGl0eS5uYW1lO1xuICB0aGlzLmVudGl0eSA9IGVudGl0eTtcblxuICAvLyBDb25zdHJ1Y3QgYmFzZSB0cmVlXG4gIHRoaXMudHJlZSA9IG5ldyBERVJOb2RlKCk7XG4gIHRoaXMudHJlZS5faW5pdChlbnRpdHkuYm9keSk7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBERVJEZWNvZGVyO1xuXG5ERVJEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoZGF0YSwgb3B0aW9ucykge1xuICBpZiAoIShkYXRhIGluc3RhbmNlb2YgYmFzZS5EZWNvZGVyQnVmZmVyKSlcbiAgICBkYXRhID0gbmV3IGJhc2UuRGVjb2RlckJ1ZmZlcihkYXRhLCBvcHRpb25zKTtcblxuICByZXR1cm4gdGhpcy50cmVlLl9kZWNvZGUoZGF0YSwgb3B0aW9ucyk7XG59O1xuXG4vLyBUcmVlIG1ldGhvZHNcblxuZnVuY3Rpb24gREVSTm9kZShwYXJlbnQpIHtcbiAgYmFzZS5Ob2RlLmNhbGwodGhpcywgJ2RlcicsIHBhcmVudCk7XG59XG5pbmhlcml0cyhERVJOb2RlLCBiYXNlLk5vZGUpO1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fcGVla1RhZyA9IGZ1bmN0aW9uIHBlZWtUYWcoYnVmZmVyLCB0YWcsIGFueSkge1xuICBpZiAoYnVmZmVyLmlzRW1wdHkoKSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIHN0YXRlID0gYnVmZmVyLnNhdmUoKTtcbiAgdmFyIGRlY29kZWRUYWcgPSBkZXJEZWNvZGVUYWcoYnVmZmVyLCAnRmFpbGVkIHRvIHBlZWsgdGFnOiBcIicgKyB0YWcgKyAnXCInKTtcbiAgaWYgKGJ1ZmZlci5pc0Vycm9yKGRlY29kZWRUYWcpKVxuICAgIHJldHVybiBkZWNvZGVkVGFnO1xuXG4gIGJ1ZmZlci5yZXN0b3JlKHN0YXRlKTtcblxuICByZXR1cm4gZGVjb2RlZFRhZy50YWcgPT09IHRhZyB8fCBkZWNvZGVkVGFnLnRhZ1N0ciA9PT0gdGFnIHx8XG4gICAgKGRlY29kZWRUYWcudGFnU3RyICsgJ29mJykgPT09IHRhZyB8fCBhbnk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlVGFnID0gZnVuY3Rpb24gZGVjb2RlVGFnKGJ1ZmZlciwgdGFnLCBhbnkpIHtcbiAgdmFyIGRlY29kZWRUYWcgPSBkZXJEZWNvZGVUYWcoYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgXCInICsgdGFnICsgJ1wiJyk7XG4gIGlmIChidWZmZXIuaXNFcnJvcihkZWNvZGVkVGFnKSlcbiAgICByZXR1cm4gZGVjb2RlZFRhZztcblxuICB2YXIgbGVuID0gZGVyRGVjb2RlTGVuKGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkVGFnLnByaW1pdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgXCInICsgdGFnICsgJ1wiJyk7XG5cbiAgLy8gRmFpbHVyZVxuICBpZiAoYnVmZmVyLmlzRXJyb3IobGVuKSlcbiAgICByZXR1cm4gbGVuO1xuXG4gIGlmICghYW55ICYmXG4gICAgICBkZWNvZGVkVGFnLnRhZyAhPT0gdGFnICYmXG4gICAgICBkZWNvZGVkVGFnLnRhZ1N0ciAhPT0gdGFnICYmXG4gICAgICBkZWNvZGVkVGFnLnRhZ1N0ciArICdvZicgIT09IHRhZykge1xuICAgIHJldHVybiBidWZmZXIuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6IFwiJyArIHRhZyArICdcIicpO1xuICB9XG5cbiAgaWYgKGRlY29kZWRUYWcucHJpbWl0aXZlIHx8IGxlbiAhPT0gbnVsbClcbiAgICByZXR1cm4gYnVmZmVyLnNraXAobGVuLCAnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6IFwiJyArIHRhZyArICdcIicpO1xuXG4gIC8vIEluZGVmaW5pdGUgbGVuZ3RoLi4uIGZpbmQgRU5EIHRhZ1xuICB2YXIgc3RhdGUgPSBidWZmZXIuc2F2ZSgpO1xuICB2YXIgcmVzID0gdGhpcy5fc2tpcFVudGlsRW5kKFxuICAgICAgYnVmZmVyLFxuICAgICAgJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6IFwiJyArIHRoaXMudGFnICsgJ1wiJyk7XG4gIGlmIChidWZmZXIuaXNFcnJvcihyZXMpKVxuICAgIHJldHVybiByZXM7XG5cbiAgbGVuID0gYnVmZmVyLm9mZnNldCAtIHN0YXRlLm9mZnNldDtcbiAgYnVmZmVyLnJlc3RvcmUoc3RhdGUpO1xuICByZXR1cm4gYnVmZmVyLnNraXAobGVuLCAnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6IFwiJyArIHRhZyArICdcIicpO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX3NraXBVbnRpbEVuZCA9IGZ1bmN0aW9uIHNraXBVbnRpbEVuZChidWZmZXIsIGZhaWwpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgdGFnID0gZGVyRGVjb2RlVGFnKGJ1ZmZlciwgZmFpbCk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHRhZykpXG4gICAgICByZXR1cm4gdGFnO1xuICAgIHZhciBsZW4gPSBkZXJEZWNvZGVMZW4oYnVmZmVyLCB0YWcucHJpbWl0aXZlLCBmYWlsKTtcbiAgICBpZiAoYnVmZmVyLmlzRXJyb3IobGVuKSlcbiAgICAgIHJldHVybiBsZW47XG5cbiAgICB2YXIgcmVzO1xuICAgIGlmICh0YWcucHJpbWl0aXZlIHx8IGxlbiAhPT0gbnVsbClcbiAgICAgIHJlcyA9IGJ1ZmZlci5za2lwKGxlbilcbiAgICBlbHNlXG4gICAgICByZXMgPSB0aGlzLl9za2lwVW50aWxFbmQoYnVmZmVyLCBmYWlsKTtcblxuICAgIC8vIEZhaWx1cmVcbiAgICBpZiAoYnVmZmVyLmlzRXJyb3IocmVzKSlcbiAgICAgIHJldHVybiByZXM7XG5cbiAgICBpZiAodGFnLnRhZ1N0ciA9PT0gJ2VuZCcpXG4gICAgICBicmVhaztcbiAgfVxufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZUxpc3QgPSBmdW5jdGlvbiBkZWNvZGVMaXN0KGJ1ZmZlciwgdGFnLCBkZWNvZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB3aGlsZSAoIWJ1ZmZlci5pc0VtcHR5KCkpIHtcbiAgICB2YXIgcG9zc2libGVFbmQgPSB0aGlzLl9wZWVrVGFnKGJ1ZmZlciwgJ2VuZCcpO1xuICAgIGlmIChidWZmZXIuaXNFcnJvcihwb3NzaWJsZUVuZCkpXG4gICAgICByZXR1cm4gcG9zc2libGVFbmQ7XG5cbiAgICB2YXIgcmVzID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLCAnZGVyJywgb3B0aW9ucyk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHJlcykgJiYgcG9zc2libGVFbmQpXG4gICAgICBicmVhaztcbiAgICByZXN1bHQucHVzaChyZXMpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlU3RyID0gZnVuY3Rpb24gZGVjb2RlU3RyKGJ1ZmZlciwgdGFnKSB7XG4gIGlmICh0YWcgPT09ICdiaXRzdHInKSB7XG4gICAgdmFyIHVudXNlZCA9IGJ1ZmZlci5yZWFkVUludDgoKTtcbiAgICBpZiAoYnVmZmVyLmlzRXJyb3IodW51c2VkKSlcbiAgICAgIHJldHVybiB1bnVzZWQ7XG4gICAgcmV0dXJuIHsgdW51c2VkOiB1bnVzZWQsIGRhdGE6IGJ1ZmZlci5yYXcoKSB9O1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2JtcHN0cicpIHtcbiAgICB2YXIgcmF3ID0gYnVmZmVyLnJhdygpO1xuICAgIGlmIChyYXcubGVuZ3RoICUgMiA9PT0gMSlcbiAgICAgIHJldHVybiBidWZmZXIuZXJyb3IoJ0RlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoJyk7XG5cbiAgICB2YXIgc3RyID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXcubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShyYXcucmVhZFVJbnQxNkJFKGkgKiAyKSk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnbnVtc3RyJykge1xuICAgIHZhciBudW1zdHIgPSBidWZmZXIucmF3KCkudG9TdHJpbmcoJ2FzY2lpJyk7XG4gICAgaWYgKCF0aGlzLl9pc051bXN0cihudW1zdHIpKSB7XG4gICAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgICByZXR1cm4gbnVtc3RyO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ29jdHN0cicpIHtcbiAgICByZXR1cm4gYnVmZmVyLnJhdygpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ29iakRlc2MnKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5yYXcoKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdwcmludHN0cicpIHtcbiAgICB2YXIgcHJpbnRzdHIgPSBidWZmZXIucmF3KCkudG9TdHJpbmcoJ2FzY2lpJyk7XG4gICAgaWYgKCF0aGlzLl9pc1ByaW50c3RyKHByaW50c3RyKSkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5lcnJvcignRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAncHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycycpO1xuICAgIH1cbiAgICByZXR1cm4gcHJpbnRzdHI7XG4gIH0gZWxzZSBpZiAoL3N0ciQvLnRlc3QodGFnKSkge1xuICAgIHJldHVybiBidWZmZXIucmF3KCkudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogJyArIHRhZyArICcgdW5zdXBwb3J0ZWQnKTtcbiAgfVxufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZU9iamlkID0gZnVuY3Rpb24gZGVjb2RlT2JqaWQoYnVmZmVyLCB2YWx1ZXMsIHJlbGF0aXZlKSB7XG4gIHZhciByZXN1bHQ7XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuICB2YXIgaWRlbnQgPSAwO1xuICB3aGlsZSAoIWJ1ZmZlci5pc0VtcHR5KCkpIHtcbiAgICB2YXIgc3ViaWRlbnQgPSBidWZmZXIucmVhZFVJbnQ4KCk7XG4gICAgaWRlbnQgPDw9IDc7XG4gICAgaWRlbnQgfD0gc3ViaWRlbnQgJiAweDdmO1xuICAgIGlmICgoc3ViaWRlbnQgJiAweDgwKSA9PT0gMCkge1xuICAgICAgaWRlbnRpZmllcnMucHVzaChpZGVudCk7XG4gICAgICBpZGVudCA9IDA7XG4gICAgfVxuICB9XG4gIGlmIChzdWJpZGVudCAmIDB4ODApXG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudCk7XG5cbiAgdmFyIGZpcnN0ID0gKGlkZW50aWZpZXJzWzBdIC8gNDApIHwgMDtcbiAgdmFyIHNlY29uZCA9IGlkZW50aWZpZXJzWzBdICUgNDA7XG5cbiAgaWYgKHJlbGF0aXZlKVxuICAgIHJlc3VsdCA9IGlkZW50aWZpZXJzO1xuICBlbHNlXG4gICAgcmVzdWx0ID0gW2ZpcnN0LCBzZWNvbmRdLmNvbmNhdChpZGVudGlmaWVycy5zbGljZSgxKSk7XG5cbiAgaWYgKHZhbHVlcykge1xuICAgIHZhciB0bXAgPSB2YWx1ZXNbcmVzdWx0LmpvaW4oJyAnKV07XG4gICAgaWYgKHRtcCA9PT0gdW5kZWZpbmVkKVxuICAgICAgdG1wID0gdmFsdWVzW3Jlc3VsdC5qb2luKCcuJyldO1xuICAgIGlmICh0bXAgIT09IHVuZGVmaW5lZClcbiAgICAgIHJlc3VsdCA9IHRtcDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlVGltZSA9IGZ1bmN0aW9uIGRlY29kZVRpbWUoYnVmZmVyLCB0YWcpIHtcbiAgdmFyIHN0ciA9IGJ1ZmZlci5yYXcoKS50b1N0cmluZygpO1xuICBpZiAodGFnID09PSAnZ2VudGltZScpIHtcbiAgICB2YXIgeWVhciA9IHN0ci5zbGljZSgwLCA0KSB8IDA7XG4gICAgdmFyIG1vbiA9IHN0ci5zbGljZSg0LCA2KSB8IDA7XG4gICAgdmFyIGRheSA9IHN0ci5zbGljZSg2LCA4KSB8IDA7XG4gICAgdmFyIGhvdXIgPSBzdHIuc2xpY2UoOCwgMTApIHwgMDtcbiAgICB2YXIgbWluID0gc3RyLnNsaWNlKDEwLCAxMikgfCAwO1xuICAgIHZhciBzZWMgPSBzdHIuc2xpY2UoMTIsIDE0KSB8IDA7XG4gIH0gZWxzZSBpZiAodGFnID09PSAndXRjdGltZScpIHtcbiAgICB2YXIgeWVhciA9IHN0ci5zbGljZSgwLCAyKSB8IDA7XG4gICAgdmFyIG1vbiA9IHN0ci5zbGljZSgyLCA0KSB8IDA7XG4gICAgdmFyIGRheSA9IHN0ci5zbGljZSg0LCA2KSB8IDA7XG4gICAgdmFyIGhvdXIgPSBzdHIuc2xpY2UoNiwgOCkgfCAwO1xuICAgIHZhciBtaW4gPSBzdHIuc2xpY2UoOCwgMTApIHwgMDtcbiAgICB2YXIgc2VjID0gc3RyLnNsaWNlKDEwLCAxMikgfCAwO1xuICAgIGlmICh5ZWFyIDwgNzApXG4gICAgICB5ZWFyID0gMjAwMCArIHllYXI7XG4gICAgZWxzZVxuICAgICAgeWVhciA9IDE5MDAgKyB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWZmZXIuZXJyb3IoJ0RlY29kaW5nICcgKyB0YWcgKyAnIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQnKTtcbiAgfVxuXG4gIHJldHVybiBEYXRlLlVUQyh5ZWFyLCBtb24gLSAxLCBkYXksIGhvdXIsIG1pbiwgc2VjLCAwKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVOdWxsID0gZnVuY3Rpb24gZGVjb2RlTnVsbChidWZmZXIpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlQm9vbCA9IGZ1bmN0aW9uIGRlY29kZUJvb2woYnVmZmVyKSB7XG4gIHZhciByZXMgPSBidWZmZXIucmVhZFVJbnQ4KCk7XG4gIGlmIChidWZmZXIuaXNFcnJvcihyZXMpKVxuICAgIHJldHVybiByZXM7XG4gIGVsc2VcbiAgICByZXR1cm4gcmVzICE9PSAwO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZUludCA9IGZ1bmN0aW9uIGRlY29kZUludChidWZmZXIsIHZhbHVlcykge1xuICAvLyBCaWdpbnQsIHJldHVybiBhcyBpdCBpcyAoYXNzdW1lIGJpZyBlbmRpYW4pXG4gIHZhciByYXcgPSBidWZmZXIucmF3KCk7XG4gIHZhciByZXMgPSBuZXcgYmlnbnVtKHJhdyk7XG5cbiAgaWYgKHZhbHVlcylcbiAgICByZXMgPSB2YWx1ZXNbcmVzLnRvU3RyaW5nKDEwKV0gfHwgcmVzO1xuXG4gIHJldHVybiByZXM7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fdXNlID0gZnVuY3Rpb24gdXNlKGVudGl0eSwgb2JqKSB7XG4gIGlmICh0eXBlb2YgZW50aXR5ID09PSAnZnVuY3Rpb24nKVxuICAgIGVudGl0eSA9IGVudGl0eShvYmopO1xuICByZXR1cm4gZW50aXR5Ll9nZXREZWNvZGVyKCdkZXInKS50cmVlO1xufTtcblxuLy8gVXRpbGl0eSBtZXRob2RzXG5cbmZ1bmN0aW9uIGRlckRlY29kZVRhZyhidWYsIGZhaWwpIHtcbiAgdmFyIHRhZyA9IGJ1Zi5yZWFkVUludDgoZmFpbCk7XG4gIGlmIChidWYuaXNFcnJvcih0YWcpKVxuICAgIHJldHVybiB0YWc7XG5cbiAgdmFyIGNscyA9IGRlci50YWdDbGFzc1t0YWcgPj4gNl07XG4gIHZhciBwcmltaXRpdmUgPSAodGFnICYgMHgyMCkgPT09IDA7XG5cbiAgLy8gTXVsdGktb2N0ZXQgdGFnIC0gbG9hZFxuICBpZiAoKHRhZyAmIDB4MWYpID09PSAweDFmKSB7XG4gICAgdmFyIG9jdCA9IHRhZztcbiAgICB0YWcgPSAwO1xuICAgIHdoaWxlICgob2N0ICYgMHg4MCkgPT09IDB4ODApIHtcbiAgICAgIG9jdCA9IGJ1Zi5yZWFkVUludDgoZmFpbCk7XG4gICAgICBpZiAoYnVmLmlzRXJyb3Iob2N0KSlcbiAgICAgICAgcmV0dXJuIG9jdDtcblxuICAgICAgdGFnIDw8PSA3O1xuICAgICAgdGFnIHw9IG9jdCAmIDB4N2Y7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRhZyAmPSAweDFmO1xuICB9XG4gIHZhciB0YWdTdHIgPSBkZXIudGFnW3RhZ107XG5cbiAgcmV0dXJuIHtcbiAgICBjbHM6IGNscyxcbiAgICBwcmltaXRpdmU6IHByaW1pdGl2ZSxcbiAgICB0YWc6IHRhZyxcbiAgICB0YWdTdHI6IHRhZ1N0clxuICB9O1xufVxuXG5mdW5jdGlvbiBkZXJEZWNvZGVMZW4oYnVmLCBwcmltaXRpdmUsIGZhaWwpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5yZWFkVUludDgoZmFpbCk7XG4gIGlmIChidWYuaXNFcnJvcihsZW4pKVxuICAgIHJldHVybiBsZW47XG5cbiAgLy8gSW5kZWZpbml0ZSBmb3JtXG4gIGlmICghcHJpbWl0aXZlICYmIGxlbiA9PT0gMHg4MClcbiAgICByZXR1cm4gbnVsbDtcblxuICAvLyBEZWZpbml0ZSBmb3JtXG4gIGlmICgobGVuICYgMHg4MCkgPT09IDApIHtcbiAgICAvLyBTaG9ydCBmb3JtXG4gICAgcmV0dXJuIGxlbjtcbiAgfVxuXG4gIC8vIExvbmcgZm9ybVxuICB2YXIgbnVtID0gbGVuICYgMHg3ZjtcbiAgaWYgKG51bSA+IDQpXG4gICAgcmV0dXJuIGJ1Zi5lcnJvcignbGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZycpO1xuXG4gIGxlbiA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtOyBpKyspIHtcbiAgICBsZW4gPDw9IDg7XG4gICAgdmFyIGogPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICAgIGlmIChidWYuaXNFcnJvcihqKSlcbiAgICAgIHJldHVybiBqO1xuICAgIGxlbiB8PSBqO1xuICB9XG5cbiAgcmV0dXJuIGxlbjtcbn1cbiIsInZhciBkZWNvZGVycyA9IGV4cG9ydHM7XG5cbmRlY29kZXJzLmRlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5kZWNvZGVycy5wZW0gPSByZXF1aXJlKCcuL3BlbScpO1xuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbnZhciBERVJEZWNvZGVyID0gcmVxdWlyZSgnLi9kZXInKTtcblxuZnVuY3Rpb24gUEVNRGVjb2RlcihlbnRpdHkpIHtcbiAgREVSRGVjb2Rlci5jYWxsKHRoaXMsIGVudGl0eSk7XG4gIHRoaXMuZW5jID0gJ3BlbSc7XG59O1xuaW5oZXJpdHMoUEVNRGVjb2RlciwgREVSRGVjb2Rlcik7XG5tb2R1bGUuZXhwb3J0cyA9IFBFTURlY29kZXI7XG5cblBFTURlY29kZXIucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uIGRlY29kZShkYXRhLCBvcHRpb25zKSB7XG4gIHZhciBsaW5lcyA9IGRhdGEudG9TdHJpbmcoKS5zcGxpdCgvW1xcclxcbl0rL2cpO1xuXG4gIHZhciBsYWJlbCA9IG9wdGlvbnMubGFiZWwudG9VcHBlckNhc2UoKTtcblxuICB2YXIgcmUgPSAvXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC87XG4gIHZhciBzdGFydCA9IC0xO1xuICB2YXIgZW5kID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbWF0Y2ggPSBsaW5lc1tpXS5tYXRjaChyZSk7XG4gICAgaWYgKG1hdGNoID09PSBudWxsKVxuICAgICAgY29udGludWU7XG5cbiAgICBpZiAobWF0Y2hbMl0gIT09IGxhYmVsKVxuICAgICAgY29udGludWU7XG5cbiAgICBpZiAoc3RhcnQgPT09IC0xKSB7XG4gICAgICBpZiAobWF0Y2hbMV0gIT09ICdCRUdJTicpXG4gICAgICAgIGJyZWFrO1xuICAgICAgc3RhcnQgPSBpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobWF0Y2hbMV0gIT09ICdFTkQnKVxuICAgICAgICBicmVhaztcbiAgICAgIGVuZCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHN0YXJ0ID09PSAtMSB8fCBlbmQgPT09IC0xKVxuICAgIHRocm93IG5ldyBFcnJvcignUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogJyArIGxhYmVsKTtcblxuICB2YXIgYmFzZTY0ID0gbGluZXMuc2xpY2Uoc3RhcnQgKyAxLCBlbmQpLmpvaW4oJycpO1xuICAvLyBSZW1vdmUgZXhjZXNzaXZlIHN5bWJvbHNcbiAgYmFzZTY0LnJlcGxhY2UoL1teYS16MC05XFwrXFwvPV0rL2dpLCAnJyk7XG5cbiAgdmFyIGlucHV0ID0gbmV3IEJ1ZmZlcihiYXNlNjQsICdiYXNlNjQnKTtcbiAgcmV0dXJuIERFUkRlY29kZXIucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsIGlucHV0LCBvcHRpb25zKTtcbn07XG4iLCJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcblxudmFyIGFzbjEgPSByZXF1aXJlKCcuLi8uLi9hc24xJyk7XG52YXIgYmFzZSA9IGFzbjEuYmFzZTtcblxuLy8gSW1wb3J0IERFUiBjb25zdGFudHNcbnZhciBkZXIgPSBhc24xLmNvbnN0YW50cy5kZXI7XG5cbmZ1bmN0aW9uIERFUkVuY29kZXIoZW50aXR5KSB7XG4gIHRoaXMuZW5jID0gJ2Rlcic7XG4gIHRoaXMubmFtZSA9IGVudGl0eS5uYW1lO1xuICB0aGlzLmVudGl0eSA9IGVudGl0eTtcblxuICAvLyBDb25zdHJ1Y3QgYmFzZSB0cmVlXG4gIHRoaXMudHJlZSA9IG5ldyBERVJOb2RlKCk7XG4gIHRoaXMudHJlZS5faW5pdChlbnRpdHkuYm9keSk7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBERVJFbmNvZGVyO1xuXG5ERVJFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoZGF0YSwgcmVwb3J0ZXIpIHtcbiAgcmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyKS5qb2luKCk7XG59O1xuXG4vLyBUcmVlIG1ldGhvZHNcblxuZnVuY3Rpb24gREVSTm9kZShwYXJlbnQpIHtcbiAgYmFzZS5Ob2RlLmNhbGwodGhpcywgJ2RlcicsIHBhcmVudCk7XG59XG5pbmhlcml0cyhERVJOb2RlLCBiYXNlLk5vZGUpO1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlID0gZnVuY3Rpb24gZW5jb2RlQ29tcG9zaXRlKHRhZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQpIHtcbiAgdmFyIGVuY29kZWRUYWcgPSBlbmNvZGVUYWcodGFnLCBwcmltaXRpdmUsIGNscywgdGhpcy5yZXBvcnRlcik7XG5cbiAgLy8gU2hvcnQgZm9ybVxuICBpZiAoY29udGVudC5sZW5ndGggPCAweDgwKSB7XG4gICAgdmFyIGhlYWRlciA9IG5ldyBCdWZmZXIoMik7XG4gICAgaGVhZGVyWzBdID0gZW5jb2RlZFRhZztcbiAgICBoZWFkZXJbMV0gPSBjb250ZW50Lmxlbmd0aDtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbIGhlYWRlciwgY29udGVudCBdKTtcbiAgfVxuXG4gIC8vIExvbmcgZm9ybVxuICAvLyBDb3VudCBvY3RldHMgcmVxdWlyZWQgdG8gc3RvcmUgbGVuZ3RoXG4gIHZhciBsZW5PY3RldHMgPSAxO1xuICBmb3IgKHZhciBpID0gY29udGVudC5sZW5ndGg7IGkgPj0gMHgxMDA7IGkgPj49IDgpXG4gICAgbGVuT2N0ZXRzKys7XG5cbiAgdmFyIGhlYWRlciA9IG5ldyBCdWZmZXIoMSArIDEgKyBsZW5PY3RldHMpO1xuICBoZWFkZXJbMF0gPSBlbmNvZGVkVGFnO1xuICBoZWFkZXJbMV0gPSAweDgwIHwgbGVuT2N0ZXRzO1xuXG4gIGZvciAodmFyIGkgPSAxICsgbGVuT2N0ZXRzLCBqID0gY29udGVudC5sZW5ndGg7IGogPiAwOyBpLS0sIGogPj49IDgpXG4gICAgaGVhZGVyW2ldID0gaiAmIDB4ZmY7XG5cbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWyBoZWFkZXIsIGNvbnRlbnQgXSk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlU3RyID0gZnVuY3Rpb24gZW5jb2RlU3RyKHN0ciwgdGFnKSB7XG4gIGlmICh0YWcgPT09ICdiaXRzdHInKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWyBzdHIudW51c2VkIHwgMCwgc3RyLmRhdGEgXSk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnYm1wc3RyJykge1xuICAgIHZhciBidWYgPSBuZXcgQnVmZmVyKHN0ci5sZW5ndGggKiAyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgYnVmLndyaXRlVUludDE2QkUoc3RyLmNoYXJDb2RlQXQoaSksIGkgKiAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoYnVmKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdudW1zdHInKSB7XG4gICAgaWYgKCF0aGlzLl9pc051bXN0cihzdHIpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IGRpZ2l0cyBhbmQgc3BhY2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoc3RyKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdwcmludHN0cicpIHtcbiAgICBpZiAoIXRoaXMuX2lzUHJpbnRzdHIoc3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ0VuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbiBtYXJrJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHN0cik7XG4gIH0gZWxzZSBpZiAoL3N0ciQvLnRlc3QodGFnKSkge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHN0cik7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnb2JqRGVzYycpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihzdHIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogJyArIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyB1bnN1cHBvcnRlZCcpO1xuICB9XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQgPSBmdW5jdGlvbiBlbmNvZGVPYmppZChpZCwgdmFsdWVzLCByZWxhdGl2ZSkge1xuICBpZiAodHlwZW9mIGlkID09PSAnc3RyaW5nJykge1xuICAgIGlmICghdmFsdWVzKVxuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ3N0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQnKTtcbiAgICBpZiAoIXZhbHVlcy5oYXNPd25Qcm9wZXJ0eShpZCkpXG4gICAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignb2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAnKTtcbiAgICBpZCA9IHZhbHVlc1tpZF0uc3BsaXQoL1tcXHNcXC5dKy9nKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkLmxlbmd0aDsgaSsrKVxuICAgICAgaWRbaV0gfD0gMDtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlkKSkge1xuICAgIGlkID0gaWQuc2xpY2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkLmxlbmd0aDsgaSsrKVxuICAgICAgaWRbaV0gfD0gMDtcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShpZCkpIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignb2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dvdDogJyArIEpTT04uc3RyaW5naWZ5KGlkKSk7XG4gIH1cblxuICBpZiAoIXJlbGF0aXZlKSB7XG4gICAgaWYgKGlkWzFdID49IDQwKVxuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ1NlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQicpO1xuICAgIGlkLnNwbGljZSgwLCAyLCBpZFswXSAqIDQwICsgaWRbMV0pO1xuICB9XG5cbiAgLy8gQ291bnQgbnVtYmVyIG9mIG9jdGV0c1xuICB2YXIgc2l6ZSA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaWQubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaWRlbnQgPSBpZFtpXTtcbiAgICBmb3IgKHNpemUrKzsgaWRlbnQgPj0gMHg4MDsgaWRlbnQgPj49IDcpXG4gICAgICBzaXplKys7XG4gIH1cblxuICB2YXIgb2JqaWQgPSBuZXcgQnVmZmVyKHNpemUpO1xuICB2YXIgb2Zmc2V0ID0gb2JqaWQubGVuZ3RoIC0gMTtcbiAgZm9yICh2YXIgaSA9IGlkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGlkZW50ID0gaWRbaV07XG4gICAgb2JqaWRbb2Zmc2V0LS1dID0gaWRlbnQgJiAweDdmO1xuICAgIHdoaWxlICgoaWRlbnQgPj49IDcpID4gMClcbiAgICAgIG9iamlkW29mZnNldC0tXSA9IDB4ODAgfCAoaWRlbnQgJiAweDdmKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG9iamlkKTtcbn07XG5cbmZ1bmN0aW9uIHR3byhudW0pIHtcbiAgaWYgKG51bSA8IDEwKVxuICAgIHJldHVybiAnMCcgKyBudW07XG4gIGVsc2VcbiAgICByZXR1cm4gbnVtO1xufVxuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlVGltZSA9IGZ1bmN0aW9uIGVuY29kZVRpbWUodGltZSwgdGFnKSB7XG4gIHZhciBzdHI7XG4gIHZhciBkYXRlID0gbmV3IERhdGUodGltZSk7XG5cbiAgaWYgKHRhZyA9PT0gJ2dlbnRpbWUnKSB7XG4gICAgc3RyID0gW1xuICAgICAgdHdvKGRhdGUuZ2V0RnVsbFllYXIoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENNb250aCgpICsgMSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENEYXRlKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDSG91cnMoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENNaW51dGVzKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDU2Vjb25kcygpKSxcbiAgICAgICdaJ1xuICAgIF0uam9pbignJyk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAndXRjdGltZScpIHtcbiAgICBzdHIgPSBbXG4gICAgICB0d28oZGF0ZS5nZXRGdWxsWWVhcigpICUgMTAwKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ01vbnRoKCkgKyAxKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ0RhdGUoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENIb3VycygpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ01pbnV0ZXMoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENTZWNvbmRzKCkpLFxuICAgICAgJ1onXG4gICAgXS5qb2luKCcnKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlcG9ydGVyLmVycm9yKCdFbmNvZGluZyAnICsgdGFnICsgJyB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fZW5jb2RlU3RyKHN0ciwgJ29jdHN0cicpO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZU51bGwgPSBmdW5jdGlvbiBlbmNvZGVOdWxsKCkge1xuICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcignJyk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZW5jb2RlSW50ID0gZnVuY3Rpb24gZW5jb2RlSW50KG51bSwgdmFsdWVzKSB7XG4gIGlmICh0eXBlb2YgbnVtID09PSAnc3RyaW5nJykge1xuICAgIGlmICghdmFsdWVzKVxuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ1N0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAnKTtcbiAgICBpZiAoIXZhbHVlcy5oYXNPd25Qcm9wZXJ0eShudW0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignVmFsdWVzIG1hcCBkb2VzblxcJ3QgY29udGFpbjogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShudW0pKTtcbiAgICB9XG4gICAgbnVtID0gdmFsdWVzW251bV07XG4gIH1cblxuICAvLyBCaWdudW0sIGFzc3VtZSBiaWcgZW5kaWFuXG4gIGlmICh0eXBlb2YgbnVtICE9PSAnbnVtYmVyJyAmJiAhQnVmZmVyLmlzQnVmZmVyKG51bSkpIHtcbiAgICB2YXIgbnVtQXJyYXkgPSBudW0udG9BcnJheSgpO1xuICAgIGlmICghbnVtLnNpZ24gJiYgbnVtQXJyYXlbMF0gJiAweDgwKSB7XG4gICAgICBudW1BcnJheS51bnNoaWZ0KDApO1xuICAgIH1cbiAgICBudW0gPSBuZXcgQnVmZmVyKG51bUFycmF5KTtcbiAgfVxuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIobnVtKSkge1xuICAgIHZhciBzaXplID0gbnVtLmxlbmd0aDtcbiAgICBpZiAobnVtLmxlbmd0aCA9PT0gMClcbiAgICAgIHNpemUrKztcblxuICAgIHZhciBvdXQgPSBuZXcgQnVmZmVyKHNpemUpO1xuICAgIG51bS5jb3B5KG91dCk7XG4gICAgaWYgKG51bS5sZW5ndGggPT09IDApXG4gICAgICBvdXRbMF0gPSAwXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIob3V0KTtcbiAgfVxuXG4gIGlmIChudW0gPCAweDgwKVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG51bSk7XG5cbiAgaWYgKG51bSA8IDB4MTAwKVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLCBudW1dKTtcblxuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSBudW07IGkgPj0gMHgxMDA7IGkgPj49IDgpXG4gICAgc2l6ZSsrO1xuXG4gIHZhciBvdXQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gIGZvciAodmFyIGkgPSBvdXQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBvdXRbaV0gPSBudW0gJiAweGZmO1xuICAgIG51bSA+Pj0gODtcbiAgfVxuICBpZihvdXRbMF0gJiAweDgwKSB7XG4gICAgb3V0LnVuc2hpZnQoMCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgQnVmZmVyKG91dCkpO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZUJvb2wgPSBmdW5jdGlvbiBlbmNvZGVCb29sKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHZhbHVlID8gMHhmZiA6IDApO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX3VzZSA9IGZ1bmN0aW9uIHVzZShlbnRpdHksIG9iaikge1xuICBpZiAodHlwZW9mIGVudGl0eSA9PT0gJ2Z1bmN0aW9uJylcbiAgICBlbnRpdHkgPSBlbnRpdHkob2JqKTtcbiAgcmV0dXJuIGVudGl0eS5fZ2V0RW5jb2RlcignZGVyJykudHJlZTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9za2lwRGVmYXVsdCA9IGZ1bmN0aW9uIHNraXBEZWZhdWx0KGRhdGFCdWZmZXIsIHJlcG9ydGVyLCBwYXJlbnQpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICB2YXIgaTtcbiAgaWYgKHN0YXRlWydkZWZhdWx0J10gPT09IG51bGwpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBkYXRhID0gZGF0YUJ1ZmZlci5qb2luKCk7XG4gIGlmIChzdGF0ZS5kZWZhdWx0QnVmZmVyID09PSB1bmRlZmluZWQpXG4gICAgc3RhdGUuZGVmYXVsdEJ1ZmZlciA9IHRoaXMuX2VuY29kZVZhbHVlKHN0YXRlWydkZWZhdWx0J10sIHJlcG9ydGVyLCBwYXJlbnQpLmpvaW4oKTtcblxuICBpZiAoZGF0YS5sZW5ndGggIT09IHN0YXRlLmRlZmF1bHRCdWZmZXIubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGk9MDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspXG4gICAgaWYgKGRhdGFbaV0gIT09IHN0YXRlLmRlZmF1bHRCdWZmZXJbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vLyBVdGlsaXR5IG1ldGhvZHNcblxuZnVuY3Rpb24gZW5jb2RlVGFnKHRhZywgcHJpbWl0aXZlLCBjbHMsIHJlcG9ydGVyKSB7XG4gIHZhciByZXM7XG5cbiAgaWYgKHRhZyA9PT0gJ3NlcW9mJylcbiAgICB0YWcgPSAnc2VxJztcbiAgZWxzZSBpZiAodGFnID09PSAnc2V0b2YnKVxuICAgIHRhZyA9ICdzZXQnO1xuXG4gIGlmIChkZXIudGFnQnlOYW1lLmhhc093blByb3BlcnR5KHRhZykpXG4gICAgcmVzID0gZGVyLnRhZ0J5TmFtZVt0YWddO1xuICBlbHNlIGlmICh0eXBlb2YgdGFnID09PSAnbnVtYmVyJyAmJiAodGFnIHwgMCkgPT09IHRhZylcbiAgICByZXMgPSB0YWc7XG4gIGVsc2VcbiAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ1Vua25vd24gdGFnOiAnICsgdGFnKTtcblxuICBpZiAocmVzID49IDB4MWYpXG4gICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQnKTtcblxuICBpZiAoIXByaW1pdGl2ZSlcbiAgICByZXMgfD0gMHgyMDtcblxuICByZXMgfD0gKGRlci50YWdDbGFzc0J5TmFtZVtjbHMgfHwgJ3VuaXZlcnNhbCddIDw8IDYpO1xuXG4gIHJldHVybiByZXM7XG59XG4iLCJ2YXIgZW5jb2RlcnMgPSBleHBvcnRzO1xuXG5lbmNvZGVycy5kZXIgPSByZXF1aXJlKCcuL2RlcicpO1xuZW5jb2RlcnMucGVtID0gcmVxdWlyZSgnLi9wZW0nKTtcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBERVJFbmNvZGVyID0gcmVxdWlyZSgnLi9kZXInKTtcblxuZnVuY3Rpb24gUEVNRW5jb2RlcihlbnRpdHkpIHtcbiAgREVSRW5jb2Rlci5jYWxsKHRoaXMsIGVudGl0eSk7XG4gIHRoaXMuZW5jID0gJ3BlbSc7XG59O1xuaW5oZXJpdHMoUEVNRW5jb2RlciwgREVSRW5jb2Rlcik7XG5tb2R1bGUuZXhwb3J0cyA9IFBFTUVuY29kZXI7XG5cblBFTUVuY29kZXIucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShkYXRhLCBvcHRpb25zKSB7XG4gIHZhciBidWYgPSBERVJFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLCBkYXRhKTtcblxuICB2YXIgcCA9IGJ1Zi50b1N0cmluZygnYmFzZTY0Jyk7XG4gIHZhciBvdXQgPSBbICctLS0tLUJFR0lOICcgKyBvcHRpb25zLmxhYmVsICsgJy0tLS0tJyBdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHAubGVuZ3RoOyBpICs9IDY0KVxuICAgIG91dC5wdXNoKHAuc2xpY2UoaSwgaSArIDY0KSk7XG4gIG91dC5wdXNoKCctLS0tLUVORCAnICsgb3B0aW9ucy5sYWJlbCArICctLS0tLScpO1xuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpO1xufTtcbiIsIi8vIENvcHlyaWdodCAyMDExIE1hcmsgQ2F2YWdlIDxtY2F2YWdlQGdtYWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICBuZXdJbnZhbGlkQXNuMUVycm9yOiBmdW5jdGlvbihtc2cpIHtcbiAgICB2YXIgZSA9IG5ldyBFcnJvcigpO1xuICAgIGUubmFtZSA9ICdJbnZhbGlkQXNuMUVycm9yJztcbiAgICBlLm1lc3NhZ2UgPSBtc2cgfHwgJyc7XG4gICAgcmV0dXJuIGU7XG4gIH1cblxufTtcbiIsIi8vIENvcHlyaWdodCAyMDExIE1hcmsgQ2F2YWdlIDxtY2F2YWdlQGdtYWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxudmFyIGVycm9ycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG52YXIgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5cbnZhciBSZWFkZXIgPSByZXF1aXJlKCcuL3JlYWRlcicpO1xudmFyIFdyaXRlciA9IHJlcXVpcmUoJy4vd3JpdGVyJyk7XG5cblxuLy8vLS0tIEV4cG9ydHNcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgUmVhZGVyOiBSZWFkZXIsXG5cbiAgV3JpdGVyOiBXcml0ZXJcblxufTtcblxuZm9yICh2YXIgdCBpbiB0eXBlcykge1xuICBpZiAodHlwZXMuaGFzT3duUHJvcGVydHkodCkpXG4gICAgbW9kdWxlLmV4cG9ydHNbdF0gPSB0eXBlc1t0XTtcbn1cbmZvciAodmFyIGUgaW4gZXJyb3JzKSB7XG4gIGlmIChlcnJvcnMuaGFzT3duUHJvcGVydHkoZSkpXG4gICAgbW9kdWxlLmV4cG9ydHNbZV0gPSBlcnJvcnNbZV07XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAxMSBNYXJrIENhdmFnZSA8bWNhdmFnZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcblxudmFyIEFTTjEgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG52YXIgZXJyb3JzID0gcmVxdWlyZSgnLi9lcnJvcnMnKTtcblxuXG4vLy8tLS0gR2xvYmFsc1xuXG52YXIgbmV3SW52YWxpZEFzbjFFcnJvciA9IGVycm9ycy5uZXdJbnZhbGlkQXNuMUVycm9yO1xuXG5cblxuLy8vLS0tIEFQSVxuXG5mdW5jdGlvbiBSZWFkZXIoZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSlcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYSBub2RlIEJ1ZmZlcicpO1xuXG4gIHRoaXMuX2J1ZiA9IGRhdGE7XG4gIHRoaXMuX3NpemUgPSBkYXRhLmxlbmd0aDtcblxuICAvLyBUaGVzZSBob2xkIHRoZSBcImN1cnJlbnRcIiBzdGF0ZVxuICB0aGlzLl9sZW4gPSAwO1xuICB0aGlzLl9vZmZzZXQgPSAwO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhZGVyLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5fbGVuKTsgfVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFkZXIucHJvdG90eXBlLCAnb2Zmc2V0Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLl9vZmZzZXQpOyB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRlci5wcm90b3R5cGUsICdyZW1haW4nLCB7XG4gIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuX3NpemUgLSB0aGlzLl9vZmZzZXQpOyB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWRlci5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuX2J1Zi5zbGljZSh0aGlzLl9vZmZzZXQpKTsgfVxufSk7XG5cblxuLyoqXG4gKiBSZWFkcyBhIHNpbmdsZSBieXRlIGFuZCBhZHZhbmNlcyBvZmZzZXQ7IHlvdSBjYW4gcGFzcyBpbiBgdHJ1ZWAgdG8gbWFrZSB0aGlzXG4gKiBhIFwicGVla1wiIG9wZXJhdGlvbiAoaS5lLiwgZ2V0IHRoZSBieXRlLCBidXQgZG9uJ3QgYWR2YW5jZSB0aGUgb2Zmc2V0KS5cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHBlZWsgdHJ1ZSBtZWFucyBkb24ndCBtb3ZlIG9mZnNldC5cbiAqIEByZXR1cm4ge051bWJlcn0gdGhlIG5leHQgYnl0ZSwgbnVsbCBpZiBub3QgZW5vdWdoIGRhdGEuXG4gKi9cblJlYWRlci5wcm90b3R5cGUucmVhZEJ5dGUgPSBmdW5jdGlvbihwZWVrKSB7XG4gIGlmICh0aGlzLl9zaXplIC0gdGhpcy5fb2Zmc2V0IDwgMSlcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYiA9IHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXRdICYgMHhmZjtcblxuICBpZiAoIXBlZWspXG4gICAgdGhpcy5fb2Zmc2V0ICs9IDE7XG5cbiAgcmV0dXJuIGI7XG59O1xuXG5cblJlYWRlci5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5yZWFkQnl0ZSh0cnVlKTtcbn07XG5cblxuLyoqXG4gKiBSZWFkcyBhIChwb3RlbnRpYWxseSkgdmFyaWFibGUgbGVuZ3RoIG9mZiB0aGUgQkVSIGJ1ZmZlci4gIFRoaXMgY2FsbCBpc1xuICogbm90IHJlYWxseSBtZWFudCB0byBiZSBjYWxsZWQgZGlyZWN0bHksIGFzIGNhbGxlcnMgaGF2ZSB0byBtYW5pcHVsYXRlXG4gKiB0aGUgaW50ZXJuYWwgYnVmZmVyIGFmdGVyd2FyZHMuXG4gKlxuICogQXMgYSByZXN1bHQgb2YgdGhpcyBjYWxsLCB5b3UgY2FuIGNhbGwgYFJlYWRlci5sZW5ndGhgLCB1bnRpbCB0aGVcbiAqIG5leHQgdGhpbmcgY2FsbGVkIHRoYXQgZG9lcyBhIHJlYWRMZW5ndGguXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSB0aGUgYW1vdW50IG9mIG9mZnNldCB0byBhZHZhbmNlIHRoZSBidWZmZXIuXG4gKiBAdGhyb3dzIHtJbnZhbGlkQXNuMUVycm9yfSBvbiBiYWQgQVNOLjFcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5yZWFkTGVuZ3RoID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZClcbiAgICBvZmZzZXQgPSB0aGlzLl9vZmZzZXQ7XG5cbiAgaWYgKG9mZnNldCA+PSB0aGlzLl9zaXplKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHZhciBsZW5CID0gdGhpcy5fYnVmW29mZnNldCsrXSAmIDB4ZmY7XG4gIGlmIChsZW5CID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIGlmICgobGVuQiAmIDB4ODApID09IDB4ODApIHtcbiAgICBsZW5CICY9IDB4N2Y7XG5cbiAgICBpZiAobGVuQiA9PSAwKVxuICAgICAgdGhyb3cgbmV3SW52YWxpZEFzbjFFcnJvcignSW5kZWZpbml0ZSBsZW5ndGggbm90IHN1cHBvcnRlZCcpO1xuXG4gICAgaWYgKGxlbkIgPiA0KVxuICAgICAgdGhyb3cgbmV3SW52YWxpZEFzbjFFcnJvcignZW5jb2RpbmcgdG9vIGxvbmcnKTtcblxuICAgIGlmICh0aGlzLl9zaXplIC0gb2Zmc2V0IDwgbGVuQilcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgdGhpcy5fbGVuID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbkI7IGkrKylcbiAgICAgIHRoaXMuX2xlbiA9ICh0aGlzLl9sZW4gPDwgOCkgKyAodGhpcy5fYnVmW29mZnNldCsrXSAmIDB4ZmYpO1xuXG4gIH0gZWxzZSB7XG4gICAgLy8gV2Fzbid0IGEgdmFyaWFibGUgbGVuZ3RoXG4gICAgdGhpcy5fbGVuID0gbGVuQjtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQ7XG59O1xuXG5cbi8qKlxuICogUGFyc2VzIHRoZSBuZXh0IHNlcXVlbmNlIGluIHRoaXMgQkVSIGJ1ZmZlci5cbiAqXG4gKiBUbyBnZXQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIGNhbGwgYFJlYWRlci5sZW5ndGhgLlxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gdGhlIHNlcXVlbmNlJ3MgdGFnLlxuICovXG5SZWFkZXIucHJvdG90eXBlLnJlYWRTZXF1ZW5jZSA9IGZ1bmN0aW9uKHRhZykge1xuICB2YXIgc2VxID0gdGhpcy5wZWVrKCk7XG4gIGlmIChzZXEgPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG4gIGlmICh0YWcgIT09IHVuZGVmaW5lZCAmJiB0YWcgIT09IHNlcSlcbiAgICB0aHJvdyBuZXdJbnZhbGlkQXNuMUVycm9yKCdFeHBlY3RlZCAweCcgKyB0YWcudG9TdHJpbmcoMTYpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IGdvdCAweCcgKyBzZXEudG9TdHJpbmcoMTYpKTtcblxuICB2YXIgbyA9IHRoaXMucmVhZExlbmd0aCh0aGlzLl9vZmZzZXQgKyAxKTsgLy8gc3RvcmVkIGluIGBsZW5ndGhgXG4gIGlmIChvID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHRoaXMuX29mZnNldCA9IG87XG4gIHJldHVybiBzZXE7XG59O1xuXG5cblJlYWRlci5wcm90b3R5cGUucmVhZEludCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcmVhZFRhZyhBU04xLkludGVnZXIpO1xufTtcblxuXG5SZWFkZXIucHJvdG90eXBlLnJlYWRCb29sZWFuID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAodGhpcy5fcmVhZFRhZyhBU04xLkJvb2xlYW4pID09PSAwID8gZmFsc2UgOiB0cnVlKTtcbn07XG5cblxuUmVhZGVyLnByb3RvdHlwZS5yZWFkRW51bWVyYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX3JlYWRUYWcoQVNOMS5FbnVtZXJhdGlvbik7XG59O1xuXG5cblJlYWRlci5wcm90b3R5cGUucmVhZFN0cmluZyA9IGZ1bmN0aW9uKHRhZywgcmV0YnVmKSB7XG4gIGlmICghdGFnKVxuICAgIHRhZyA9IEFTTjEuT2N0ZXRTdHJpbmc7XG5cbiAgdmFyIGIgPSB0aGlzLnBlZWsoKTtcbiAgaWYgKGIgPT09IG51bGwpXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgaWYgKGIgIT09IHRhZylcbiAgICB0aHJvdyBuZXdJbnZhbGlkQXNuMUVycm9yKCdFeHBlY3RlZCAweCcgKyB0YWcudG9TdHJpbmcoMTYpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IGdvdCAweCcgKyBiLnRvU3RyaW5nKDE2KSk7XG5cbiAgdmFyIG8gPSB0aGlzLnJlYWRMZW5ndGgodGhpcy5fb2Zmc2V0ICsgMSk7IC8vIHN0b3JlZCBpbiBgbGVuZ3RoYFxuXG4gIGlmIChvID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIGlmICh0aGlzLmxlbmd0aCA+IHRoaXMuX3NpemUgLSBvKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHRoaXMuX29mZnNldCA9IG87XG5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiByZXRidWYgPyBuZXcgQnVmZmVyKDApIDogJyc7XG5cbiAgdmFyIHN0ciA9IHRoaXMuX2J1Zi5zbGljZSh0aGlzLl9vZmZzZXQsIHRoaXMuX29mZnNldCArIHRoaXMubGVuZ3RoKTtcbiAgdGhpcy5fb2Zmc2V0ICs9IHRoaXMubGVuZ3RoO1xuXG4gIHJldHVybiByZXRidWYgPyBzdHIgOiBzdHIudG9TdHJpbmcoJ3V0ZjgnKTtcbn07XG5cblJlYWRlci5wcm90b3R5cGUucmVhZE9JRCA9IGZ1bmN0aW9uKHRhZykge1xuICBpZiAoIXRhZylcbiAgICB0YWcgPSBBU04xLk9JRDtcblxuICB2YXIgYiA9IHRoaXMucmVhZFN0cmluZyh0YWcsIHRydWUpO1xuICBpZiAoYiA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgdmFsdWVzID0gW107XG4gIHZhciB2YWx1ZSA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGJ5dGUgPSBiW2ldICYgMHhmZjtcblxuICAgIHZhbHVlIDw8PSA3O1xuICAgIHZhbHVlICs9IGJ5dGUgJiAweDdmO1xuICAgIGlmICgoYnl0ZSAmIDB4ODApID09IDApIHtcbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIHZhbHVlID0gMDtcbiAgICB9XG4gIH1cblxuICB2YWx1ZSA9IHZhbHVlcy5zaGlmdCgpO1xuICB2YWx1ZXMudW5zaGlmdCh2YWx1ZSAlIDQwKTtcbiAgdmFsdWVzLnVuc2hpZnQoKHZhbHVlIC8gNDApID4+IDApO1xuXG4gIHJldHVybiB2YWx1ZXMuam9pbignLicpO1xufTtcblxuXG5SZWFkZXIucHJvdG90eXBlLl9yZWFkVGFnID0gZnVuY3Rpb24odGFnKSB7XG4gIGFzc2VydC5vayh0YWcgIT09IHVuZGVmaW5lZCk7XG5cbiAgdmFyIGIgPSB0aGlzLnBlZWsoKTtcblxuICBpZiAoYiA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICBpZiAoYiAhPT0gdGFnKVxuICAgIHRocm93IG5ld0ludmFsaWRBc24xRXJyb3IoJ0V4cGVjdGVkIDB4JyArIHRhZy50b1N0cmluZygxNikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogZ290IDB4JyArIGIudG9TdHJpbmcoMTYpKTtcblxuICB2YXIgbyA9IHRoaXMucmVhZExlbmd0aCh0aGlzLl9vZmZzZXQgKyAxKTsgLy8gc3RvcmVkIGluIGBsZW5ndGhgXG4gIGlmIChvID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIGlmICh0aGlzLmxlbmd0aCA+IDQpXG4gICAgdGhyb3cgbmV3SW52YWxpZEFzbjFFcnJvcignSW50ZWdlciB0b28gbG9uZzogJyArIHRoaXMubGVuZ3RoKTtcblxuICBpZiAodGhpcy5sZW5ndGggPiB0aGlzLl9zaXplIC0gbylcbiAgICByZXR1cm4gbnVsbDtcbiAgdGhpcy5fb2Zmc2V0ID0gbztcblxuICB2YXIgZmIgPSB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0XTtcbiAgdmFyIHZhbHVlID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZSA8PD0gODtcbiAgICB2YWx1ZSB8PSAodGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSAmIDB4ZmYpO1xuICB9XG5cbiAgaWYgKChmYiAmIDB4ODApID09IDB4ODAgJiYgaSAhPT0gNClcbiAgICB2YWx1ZSAtPSAoMSA8PCAoaSAqIDgpKTtcblxuICByZXR1cm4gdmFsdWUgPj4gMDtcbn07XG5cblxuXG4vLy8tLS0gRXhwb3J0ZWQgQVBJXG5cbm1vZHVsZS5leHBvcnRzID0gUmVhZGVyO1xuIiwiLy8gQ29weXJpZ2h0IDIwMTEgTWFyayBDYXZhZ2UgPG1jYXZhZ2VAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFT0M6IDAsXG4gIEJvb2xlYW46IDEsXG4gIEludGVnZXI6IDIsXG4gIEJpdFN0cmluZzogMyxcbiAgT2N0ZXRTdHJpbmc6IDQsXG4gIE51bGw6IDUsXG4gIE9JRDogNixcbiAgT2JqZWN0RGVzY3JpcHRvcjogNyxcbiAgRXh0ZXJuYWw6IDgsXG4gIFJlYWw6IDksIC8vIGZsb2F0XG4gIEVudW1lcmF0aW9uOiAxMCxcbiAgUERWOiAxMSxcbiAgVXRmOFN0cmluZzogMTIsXG4gIFJlbGF0aXZlT0lEOiAxMyxcbiAgU2VxdWVuY2U6IDE2LFxuICBTZXQ6IDE3LFxuICBOdW1lcmljU3RyaW5nOiAxOCxcbiAgUHJpbnRhYmxlU3RyaW5nOiAxOSxcbiAgVDYxU3RyaW5nOiAyMCxcbiAgVmlkZW90ZXhTdHJpbmc6IDIxLFxuICBJQTVTdHJpbmc6IDIyLFxuICBVVENUaW1lOiAyMyxcbiAgR2VuZXJhbGl6ZWRUaW1lOiAyNCxcbiAgR3JhcGhpY1N0cmluZzogMjUsXG4gIFZpc2libGVTdHJpbmc6IDI2LFxuICBHZW5lcmFsU3RyaW5nOiAyOCxcbiAgVW5pdmVyc2FsU3RyaW5nOiAyOSxcbiAgQ2hhcmFjdGVyU3RyaW5nOiAzMCxcbiAgQk1QU3RyaW5nOiAzMSxcbiAgQ29uc3RydWN0b3I6IDMyLFxuICBDb250ZXh0OiAxMjhcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxMSBNYXJrIENhdmFnZSA8bWNhdmFnZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciBBU04xID0gcmVxdWlyZSgnLi90eXBlcycpO1xudmFyIGVycm9ycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG5cblxuLy8vLS0tIEdsb2JhbHNcblxudmFyIG5ld0ludmFsaWRBc24xRXJyb3IgPSBlcnJvcnMubmV3SW52YWxpZEFzbjFFcnJvcjtcblxudmFyIERFRkFVTFRfT1BUUyA9IHtcbiAgc2l6ZTogMTAyNCxcbiAgZ3Jvd3RoRmFjdG9yOiA4XG59O1xuXG5cbi8vLy0tLSBIZWxwZXJzXG5cbmZ1bmN0aW9uIG1lcmdlKGZyb20sIHRvKSB7XG4gIGFzc2VydC5vayhmcm9tKTtcbiAgYXNzZXJ0LmVxdWFsKHR5cGVvZihmcm9tKSwgJ29iamVjdCcpO1xuICBhc3NlcnQub2sodG8pO1xuICBhc3NlcnQuZXF1YWwodHlwZW9mKHRvKSwgJ29iamVjdCcpO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZnJvbSk7XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAodG9ba2V5XSlcbiAgICAgIHJldHVybjtcblxuICAgIHZhciB2YWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZnJvbSwga2V5KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodG8sIGtleSwgdmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gdG87XG59XG5cblxuXG4vLy8tLS0gQVBJXG5cbmZ1bmN0aW9uIFdyaXRlcihvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBtZXJnZShERUZBVUxUX09QVFMsIG9wdGlvbnMgfHwge30pO1xuXG4gIHRoaXMuX2J1ZiA9IG5ldyBCdWZmZXIob3B0aW9ucy5zaXplIHx8IDEwMjQpO1xuICB0aGlzLl9zaXplID0gdGhpcy5fYnVmLmxlbmd0aDtcbiAgdGhpcy5fb2Zmc2V0ID0gMDtcbiAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgLy8gQSBsaXN0IG9mIG9mZnNldHMgaW4gdGhlIGJ1ZmZlciB3aGVyZSB3ZSBuZWVkIHRvIGluc2VydFxuICAvLyBzZXF1ZW5jZSB0YWcvbGVuIHBhaXJzLlxuICB0aGlzLl9zZXEgPSBbXTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRlci5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9zZXEubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRBc24xRXJyb3IodGhpcy5fc2VxLmxlbmd0aCArICcgdW5lbmRlZCBzZXF1ZW5jZShzKScpO1xuXG4gICAgcmV0dXJuICh0aGlzLl9idWYuc2xpY2UoMCwgdGhpcy5fb2Zmc2V0KSk7XG4gIH1cbn0pO1xuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlQnl0ZSA9IGZ1bmN0aW9uKGIpIHtcbiAgaWYgKHR5cGVvZihiKSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlcicpO1xuXG4gIHRoaXMuX2Vuc3VyZSgxKTtcbiAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGI7XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVJbnQgPSBmdW5jdGlvbihpLCB0YWcpIHtcbiAgaWYgKHR5cGVvZihpKSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICBpZiAodHlwZW9mKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuSW50ZWdlcjtcblxuICB2YXIgc3ogPSA0O1xuXG4gIHdoaWxlICgoKChpICYgMHhmZjgwMDAwMCkgPT09IDApIHx8ICgoaSAmIDB4ZmY4MDAwMDApID09PSAweGZmODAwMDAwID4+IDApKSAmJlxuICAgICAgICAgKHN6ID4gMSkpIHtcbiAgICBzei0tO1xuICAgIGkgPDw9IDg7XG4gIH1cblxuICBpZiAoc3ogPiA0KVxuICAgIHRocm93IG5ldyBJbnZhbGlkQXNuMUVycm9yKCdCRVIgaW50cyBjYW5ub3QgYmUgPiAweGZmZmZmZmZmJyk7XG5cbiAgdGhpcy5fZW5zdXJlKDIgKyBzeik7XG4gIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSB0YWc7XG4gIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBzejtcblxuICB3aGlsZSAoc3otLSA+IDApIHtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gKChpICYgMHhmZjAwMDAwMCkgPj4+IDI0KTtcbiAgICBpIDw8PSA4O1xuICB9XG5cbn07XG5cblxuV3JpdGVyLnByb3RvdHlwZS53cml0ZU51bGwgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy53cml0ZUJ5dGUoQVNOMS5OdWxsKTtcbiAgdGhpcy53cml0ZUJ5dGUoMHgwMCk7XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVFbnVtZXJhdGlvbiA9IGZ1bmN0aW9uKGksIHRhZykge1xuICBpZiAodHlwZW9mKGkpICE9PSAnbnVtYmVyJylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gIGlmICh0eXBlb2YodGFnKSAhPT0gJ251bWJlcicpXG4gICAgdGFnID0gQVNOMS5FbnVtZXJhdGlvbjtcblxuICByZXR1cm4gdGhpcy53cml0ZUludChpLCB0YWcpO1xufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlQm9vbGVhbiA9IGZ1bmN0aW9uKGIsIHRhZykge1xuICBpZiAodHlwZW9mKGIpICE9PSAnYm9vbGVhbicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIEJvb2xlYW4nKTtcbiAgaWYgKHR5cGVvZih0YWcpICE9PSAnbnVtYmVyJylcbiAgICB0YWcgPSBBU04xLkJvb2xlYW47XG5cbiAgdGhpcy5fZW5zdXJlKDMpO1xuICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gdGFnO1xuICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gMHgwMTtcbiAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGIgPyAweGZmIDogMHgwMDtcbn07XG5cblxuV3JpdGVyLnByb3RvdHlwZS53cml0ZVN0cmluZyA9IGZ1bmN0aW9uKHMsIHRhZykge1xuICBpZiAodHlwZW9mKHMpICE9PSAnc3RyaW5nJylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nICh3YXM6ICcgKyB0eXBlb2YocykgKyAnKScpO1xuICBpZiAodHlwZW9mKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuT2N0ZXRTdHJpbmc7XG5cbiAgdmFyIGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHMpO1xuICB0aGlzLndyaXRlQnl0ZSh0YWcpO1xuICB0aGlzLndyaXRlTGVuZ3RoKGxlbik7XG4gIGlmIChsZW4pIHtcbiAgICB0aGlzLl9lbnN1cmUobGVuKTtcbiAgICB0aGlzLl9idWYud3JpdGUocywgdGhpcy5fb2Zmc2V0KTtcbiAgICB0aGlzLl9vZmZzZXQgKz0gbGVuO1xuICB9XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUud3JpdGVCdWZmZXIgPSBmdW5jdGlvbihidWYsIHRhZykge1xuICBpZiAodHlwZW9mKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhZyBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIGJ1ZmZlcicpO1xuXG4gIHRoaXMud3JpdGVCeXRlKHRhZyk7XG4gIHRoaXMud3JpdGVMZW5ndGgoYnVmLmxlbmd0aCk7XG4gIHRoaXMuX2Vuc3VyZShidWYubGVuZ3RoKTtcbiAgYnVmLmNvcHkodGhpcy5fYnVmLCB0aGlzLl9vZmZzZXQsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLl9vZmZzZXQgKz0gYnVmLmxlbmd0aDtcbn07XG5cblxuV3JpdGVyLnByb3RvdHlwZS53cml0ZVN0cmluZ0FycmF5ID0gZnVuY3Rpb24oc3RyaW5ncykge1xuICBpZiAoKCFzdHJpbmdzIGluc3RhbmNlb2YgQXJyYXkpKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXlbU3RyaW5nXScpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKHMpIHtcbiAgICBzZWxmLndyaXRlU3RyaW5nKHMpO1xuICB9KTtcbn07XG5cbi8vIFRoaXMgaXMgcmVhbGx5IHRvIHNvbHZlIERFUiBjYXNlcywgYnV0IHdoYXRldmVyIGZvciBub3dcbldyaXRlci5wcm90b3R5cGUud3JpdGVPSUQgPSBmdW5jdGlvbihzLCB0YWcpIHtcbiAgaWYgKHR5cGVvZihzKSAhPT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO1xuICBpZiAodHlwZW9mKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuT0lEO1xuXG4gIGlmICghL14oWzAtOV0rXFwuKXszLH1bMC05XSskLy50ZXN0KHMpKVxuICAgIHRocm93IG5ldyBFcnJvcignYXJndW1lbnQgaXMgbm90IGEgdmFsaWQgT0lEIHN0cmluZycpO1xuXG4gIGZ1bmN0aW9uIGVuY29kZU9jdGV0KGJ5dGVzLCBvY3RldCkge1xuICAgIGlmIChvY3RldCA8IDEyOCkge1xuICAgICAgICBieXRlcy5wdXNoKG9jdGV0KTtcbiAgICB9IGVsc2UgaWYgKG9jdGV0IDwgMTYzODQpIHtcbiAgICAgICAgYnl0ZXMucHVzaCgob2N0ZXQgPj4+IDcpIHwgMHg4MCk7XG4gICAgICAgIGJ5dGVzLnB1c2gob2N0ZXQgJiAweDdGKTtcbiAgICB9IGVsc2UgaWYgKG9jdGV0IDwgMjA5NzE1Mikge1xuICAgICAgYnl0ZXMucHVzaCgob2N0ZXQgPj4+IDE0KSB8IDB4ODApO1xuICAgICAgYnl0ZXMucHVzaCgoKG9jdGV0ID4+PiA3KSB8IDB4ODApICYgMHhGRik7XG4gICAgICBieXRlcy5wdXNoKG9jdGV0ICYgMHg3Rik7XG4gICAgfSBlbHNlIGlmIChvY3RldCA8IDI2ODQzNTQ1Nikge1xuICAgICAgYnl0ZXMucHVzaCgob2N0ZXQgPj4+IDIxKSB8IDB4ODApO1xuICAgICAgYnl0ZXMucHVzaCgoKG9jdGV0ID4+PiAxNCkgfCAweDgwKSAmIDB4RkYpO1xuICAgICAgYnl0ZXMucHVzaCgoKG9jdGV0ID4+PiA3KSB8IDB4ODApICYgMHhGRik7XG4gICAgICBieXRlcy5wdXNoKG9jdGV0ICYgMHg3Rik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gMjgpIHwgMHg4MCkgJiAweEZGKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gMjEpIHwgMHg4MCkgJiAweEZGKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gMTQpIHwgMHg4MCkgJiAweEZGKTtcbiAgICAgIGJ5dGVzLnB1c2goKChvY3RldCA+Pj4gNykgfCAweDgwKSAmIDB4RkYpO1xuICAgICAgYnl0ZXMucHVzaChvY3RldCAmIDB4N0YpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB0bXAgPSBzLnNwbGl0KCcuJyk7XG4gIHZhciBieXRlcyA9IFtdO1xuICBieXRlcy5wdXNoKHBhcnNlSW50KHRtcFswXSwgMTApICogNDAgKyBwYXJzZUludCh0bXBbMV0sIDEwKSk7XG4gIHRtcC5zbGljZSgyKS5mb3JFYWNoKGZ1bmN0aW9uKGIpIHtcbiAgICBlbmNvZGVPY3RldChieXRlcywgcGFyc2VJbnQoYiwgMTApKTtcbiAgfSk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9lbnN1cmUoMiArIGJ5dGVzLmxlbmd0aCk7XG4gIHRoaXMud3JpdGVCeXRlKHRhZyk7XG4gIHRoaXMud3JpdGVMZW5ndGgoYnl0ZXMubGVuZ3RoKTtcbiAgYnl0ZXMuZm9yRWFjaChmdW5jdGlvbihiKSB7XG4gICAgc2VsZi53cml0ZUJ5dGUoYik7XG4gIH0pO1xufTtcblxuXG5Xcml0ZXIucHJvdG90eXBlLndyaXRlTGVuZ3RoID0gZnVuY3Rpb24obGVuKSB7XG4gIGlmICh0eXBlb2YobGVuKSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlcicpO1xuXG4gIHRoaXMuX2Vuc3VyZSg0KTtcblxuICBpZiAobGVuIDw9IDB4N2YpIHtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gbGVuO1xuICB9IGVsc2UgaWYgKGxlbiA8PSAweGZmKSB7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IDB4ODE7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGxlbjtcbiAgfSBlbHNlIGlmIChsZW4gPD0gMHhmZmZmKSB7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IDB4ODI7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGxlbiA+PiA4O1xuICAgIHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK10gPSBsZW47XG4gIH0gZWxzZSBpZiAobGVuIDw9IDB4ZmZmZmZmKSB7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IDB4ODM7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGxlbiA+PiAxNjtcbiAgICB0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdID0gbGVuID4+IDg7XG4gICAgdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXSA9IGxlbjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFzbjFFUnJvcignTGVuZ3RoIHRvbyBsb25nICg+IDQgYnl0ZXMpJyk7XG4gIH1cbn07XG5cbldyaXRlci5wcm90b3R5cGUuc3RhcnRTZXF1ZW5jZSA9IGZ1bmN0aW9uKHRhZykge1xuICBpZiAodHlwZW9mKHRhZykgIT09ICdudW1iZXInKVxuICAgIHRhZyA9IEFTTjEuU2VxdWVuY2UgfCBBU04xLkNvbnN0cnVjdG9yO1xuXG4gIHRoaXMud3JpdGVCeXRlKHRhZyk7XG4gIHRoaXMuX3NlcS5wdXNoKHRoaXMuX29mZnNldCk7XG4gIHRoaXMuX2Vuc3VyZSgzKTtcbiAgdGhpcy5fb2Zmc2V0ICs9IDM7XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUuZW5kU2VxdWVuY2UgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHNlcSA9IHRoaXMuX3NlcS5wb3AoKTtcbiAgdmFyIHN0YXJ0ID0gc2VxICsgMztcbiAgdmFyIGxlbiA9IHRoaXMuX29mZnNldCAtIHN0YXJ0O1xuXG4gIGlmIChsZW4gPD0gMHg3Zikge1xuICAgIHRoaXMuX3NoaWZ0KHN0YXJ0LCBsZW4sIC0yKTtcbiAgICB0aGlzLl9idWZbc2VxXSA9IGxlbjtcbiAgfSBlbHNlIGlmIChsZW4gPD0gMHhmZikge1xuICAgIHRoaXMuX3NoaWZ0KHN0YXJ0LCBsZW4sIC0xKTtcbiAgICB0aGlzLl9idWZbc2VxXSA9IDB4ODE7XG4gICAgdGhpcy5fYnVmW3NlcSArIDFdID0gbGVuO1xuICB9IGVsc2UgaWYgKGxlbiA8PSAweGZmZmYpIHtcbiAgICB0aGlzLl9idWZbc2VxXSA9IDB4ODI7XG4gICAgdGhpcy5fYnVmW3NlcSArIDFdID0gbGVuID4+IDg7XG4gICAgdGhpcy5fYnVmW3NlcSArIDJdID0gbGVuO1xuICB9IGVsc2UgaWYgKGxlbiA8PSAweGZmZmZmZikge1xuICAgIHRoaXMuX3NoaWZ0KHN0YXJ0LCBsZW4sIDEpO1xuICAgIHRoaXMuX2J1ZltzZXFdID0gMHg4MztcbiAgICB0aGlzLl9idWZbc2VxICsgMV0gPSBsZW4gPj4gMTY7XG4gICAgdGhpcy5fYnVmW3NlcSArIDJdID0gbGVuID4+IDg7XG4gICAgdGhpcy5fYnVmW3NlcSArIDNdID0gbGVuO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXNuMUVycm9yKCdTZXF1ZW5jZSB0b28gbG9uZycpO1xuICB9XG59O1xuXG5cbldyaXRlci5wcm90b3R5cGUuX3NoaWZ0ID0gZnVuY3Rpb24oc3RhcnQsIGxlbiwgc2hpZnQpIHtcbiAgYXNzZXJ0Lm9rKHN0YXJ0ICE9PSB1bmRlZmluZWQpO1xuICBhc3NlcnQub2sobGVuICE9PSB1bmRlZmluZWQpO1xuICBhc3NlcnQub2soc2hpZnQpO1xuXG4gIHRoaXMuX2J1Zi5jb3B5KHRoaXMuX2J1Ziwgc3RhcnQgKyBzaGlmdCwgc3RhcnQsIHN0YXJ0ICsgbGVuKTtcbiAgdGhpcy5fb2Zmc2V0ICs9IHNoaWZ0O1xufTtcblxuV3JpdGVyLnByb3RvdHlwZS5fZW5zdXJlID0gZnVuY3Rpb24obGVuKSB7XG4gIGFzc2VydC5vayhsZW4pO1xuXG4gIGlmICh0aGlzLl9zaXplIC0gdGhpcy5fb2Zmc2V0IDwgbGVuKSB7XG4gICAgdmFyIHN6ID0gdGhpcy5fc2l6ZSAqIHRoaXMuX29wdGlvbnMuZ3Jvd3RoRmFjdG9yO1xuICAgIGlmIChzeiAtIHRoaXMuX29mZnNldCA8IGxlbilcbiAgICAgIHN6ICs9IGxlbjtcblxuICAgIHZhciBidWYgPSBuZXcgQnVmZmVyKHN6KTtcblxuICAgIHRoaXMuX2J1Zi5jb3B5KGJ1ZiwgMCwgMCwgdGhpcy5fb2Zmc2V0KTtcbiAgICB0aGlzLl9idWYgPSBidWY7XG4gICAgdGhpcy5fc2l6ZSA9IHN6O1xuICB9XG59O1xuXG5cblxuLy8vLS0tIEV4cG9ydGVkIEFQSVxuXG5tb2R1bGUuZXhwb3J0cyA9IFdyaXRlcjtcbiIsIi8vIENvcHlyaWdodCAyMDExIE1hcmsgQ2F2YWdlIDxtY2F2YWdlQGdtYWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuLy8gSWYgeW91IGhhdmUgbm8gaWRlYSB3aGF0IEFTTi4xIG9yIEJFUiBpcywgc2VlIHRoaXM6XG4vLyBmdHA6Ly9mdHAucnNhLmNvbS9wdWIvcGtjcy9hc2NpaS9sYXltYW4uYXNjXG5cbnZhciBCZXIgPSByZXF1aXJlKCcuL2Jlci9pbmRleCcpO1xuXG5cblxuLy8vLS0tIEV4cG9ydGVkIEFQSVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICBCZXI6IEJlcixcblxuICBCZXJSZWFkZXI6IEJlci5SZWFkZXIsXG5cbiAgQmVyV3JpdGVyOiBCZXIuV3JpdGVyXG5cbn07XG4iLCIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIE1hcmsgQ2F2YWdlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuXG4vLy8tLS0gR2xvYmFsc1xuXG4vKiBKU1NUWUxFRCAqL1xudmFyIFVVSURfUkVHRVhQID0gL15bYS1mQS1GMC05XXs4fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXsxMn0kLztcblxuXG4vLy8tLS0gSW50ZXJuYWxcblxuZnVuY3Rpb24gX2NhcGl0YWxpemUoc3RyKSB7XG4gICAgcmV0dXJuIChzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSkpO1xufVxuXG5mdW5jdGlvbiBfdG9zcyhuYW1lLCBleHBlY3RlZCwgb3BlciwgYXJnLCBhY3R1YWwpIHtcbiAgICB0aHJvdyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHtcbiAgICAgICAgbWVzc2FnZTogdXRpbC5mb3JtYXQoJyVzICglcykgaXMgcmVxdWlyZWQnLCBuYW1lLCBleHBlY3RlZCksXG4gICAgICAgIGFjdHVhbDogKGFjdHVhbCA9PT0gdW5kZWZpbmVkKSA/IHR5cGVvZiAoYXJnKSA6IGFjdHVhbChhcmcpLFxuICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgICAgIG9wZXJhdG9yOiBvcGVyIHx8ICc9PT0nLFxuICAgICAgICBzdGFja1N0YXJ0RnVuY3Rpb246IF90b3NzLmNhbGxlclxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0Q2xhc3MoYXJnKSB7XG4gICAgcmV0dXJuIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKS5zbGljZSg4LCAtMSkpO1xufVxuXG5mdW5jdGlvbiBub29wKCkge1xuICAgIC8vIFdoeSBldmVuIGJvdGhlciB3aXRoIGFzc2VydHM/XG59XG5cblxuLy8vLS0tIEV4cG9ydHNcblxudmFyIHR5cGVzID0ge1xuICAgIGJvb2w6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ2Jvb2xlYW4nOyB9XG4gICAgfSxcbiAgICBmdW5jOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdmdW5jdGlvbic7IH1cbiAgICB9LFxuICAgIHN0cmluZzoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnc3RyaW5nJzsgfVxuICAgIH0sXG4gICAgb2JqZWN0OiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG51bWJlcjoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKGFyZykgJiYgaXNGaW5pdGUoYXJnKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYnVmZmVyOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBCdWZmZXIuaXNCdWZmZXIoYXJnKTsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdCdWZmZXIuaXNCdWZmZXInXG4gICAgfSxcbiAgICBhcnJheToge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpOyB9LFxuICAgICAgICBvcGVyYXRvcjogJ0FycmF5LmlzQXJyYXknXG4gICAgfSxcbiAgICBzdHJlYW06IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIFN0cmVhbTsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdpbnN0YW5jZW9mJyxcbiAgICAgICAgYWN0dWFsOiBfZ2V0Q2xhc3NcbiAgICB9LFxuICAgIGRhdGU6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIERhdGU7IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaW5zdGFuY2VvZicsXG4gICAgICAgIGFjdHVhbDogX2dldENsYXNzXG4gICAgfSxcbiAgICByZWdleHA6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIFJlZ0V4cDsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdpbnN0YW5jZW9mJyxcbiAgICAgICAgYWN0dWFsOiBfZ2V0Q2xhc3NcbiAgICB9LFxuICAgIHV1aWQ6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdzdHJpbmcnICYmIFVVSURfUkVHRVhQLnRlc3QoYXJnKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdpc1VVSUQnXG4gICAgfVxufTtcblxuZnVuY3Rpb24gX3NldEV4cG9ydHMobmRlYnVnKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0eXBlcyk7XG4gICAgdmFyIG91dDtcblxuICAgIC8qIHJlLWV4cG9ydCBzdGFuZGFyZCBhc3NlcnQgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9OREVCVUcpIHtcbiAgICAgICAgb3V0ID0gbm9vcDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgPSBmdW5jdGlvbiAoYXJnLCBtc2cpIHtcbiAgICAgICAgICAgIGlmICghYXJnKSB7XG4gICAgICAgICAgICAgICAgX3Rvc3MobXNnLCAndHJ1ZScsIGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyogc3RhbmRhcmQgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtrXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgb3V0W2tdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoIXR5cGUuY2hlY2soYXJnKSkge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgaywgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKiBvcHRpb25hbCBjaGVja3MgKi9cbiAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgdmFyIG5hbWUgPSAnb3B0aW9uYWwnICsgX2NhcGl0YWxpemUoayk7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtuYW1lXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgb3V0W25hbWVdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZykpIHtcbiAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGssIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogYXJyYXlPZiBjaGVja3MgKi9cbiAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgdmFyIG5hbWUgPSAnYXJyYXlPZicgKyBfY2FwaXRhbGl6ZShrKTtcbiAgICAgICAgaWYgKG5kZWJ1Zykge1xuICAgICAgICAgICAgb3V0W25hbWVdID0gbm9vcDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2tdO1xuICAgICAgICB2YXIgZXhwZWN0ZWQgPSAnWycgKyBrICsgJ10nO1xuICAgICAgICBvdXRbbmFtZV0gPSBmdW5jdGlvbiAoYXJnLCBtc2cpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBleHBlY3RlZCwgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXR5cGUuY2hlY2soYXJnW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGV4cGVjdGVkLCB0eXBlLm9wZXJhdG9yLCBhcmcsIHR5cGUuYWN0dWFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKiBvcHRpb25hbEFycmF5T2YgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBuYW1lID0gJ29wdGlvbmFsQXJyYXlPZicgKyBfY2FwaXRhbGl6ZShrKTtcbiAgICAgICAgaWYgKG5kZWJ1Zykge1xuICAgICAgICAgICAgb3V0W25hbWVdID0gbm9vcDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2tdO1xuICAgICAgICB2YXIgZXhwZWN0ZWQgPSAnWycgKyBrICsgJ10nO1xuICAgICAgICBvdXRbbmFtZV0gPSBmdW5jdGlvbiAoYXJnLCBtc2cpIHtcbiAgICAgICAgICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgZXhwZWN0ZWQsIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZ1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBleHBlY3RlZCwgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogcmUtZXhwb3J0IGJ1aWx0LWluIGFzc2VydGlvbnMgKi9cbiAgICBPYmplY3Qua2V5cyhhc3NlcnQpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaWYgKGsgPT09ICdBc3NlcnRpb25FcnJvcicpIHtcbiAgICAgICAgICAgIG91dFtrXSA9IGFzc2VydFtrXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmRlYnVnKSB7XG4gICAgICAgICAgICBvdXRba10gPSBub29wO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG91dFtrXSA9IGFzc2VydFtrXTtcbiAgICB9KTtcblxuICAgIC8qIGV4cG9ydCBvdXJzZWx2ZXMgKGZvciB1bml0IHRlc3RzIF9vbmx5XykgKi9cbiAgICBvdXQuX3NldEV4cG9ydHMgPSBfc2V0RXhwb3J0cztcblxuICAgIHJldHVybiBvdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldEV4cG9ydHMocHJvY2Vzcy5lbnYuTk9ERV9OREVCVUcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBjb21wYXJlIGFuZCBpc0J1ZmZlciB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvNjgwZTllNWU0ODhmMjJhYWMyNzU5OWE1N2RjODQ0YTYzMTU5MjhkZC9pbmRleC5qc1xuLy8gb3JpZ2luYWwgbm90aWNlOlxuXG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciB4ID0gYS5sZW5ndGg7XG4gIHZhciB5ID0gYi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV07XG4gICAgICB5ID0gYltpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgaWYgKGdsb2JhbC5CdWZmZXIgJiYgdHlwZW9mIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlcihiKTtcbiAgfVxuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKTtcbn1cblxuLy8gYmFzZWQgb24gbm9kZSBhc3NlcnQsIG9yaWdpbmFsIG5vdGljZTpcblxuLy8gaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kvVW5pdF9UZXN0aW5nLzEuMFxuLy9cbi8vIFRISVMgSVMgTk9UIFRFU1RFRCBOT1IgTElLRUxZIFRPIFdPUksgT1VUU0lERSBWOCFcbi8vXG4vLyBPcmlnaW5hbGx5IGZyb20gbmFyd2hhbC5qcyAoaHR0cDovL25hcndoYWxqcy5vcmcpXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhvbWFzIFJvYmluc29uIDwyODBub3J0aC5jb20+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuLy8gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuLy8gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbC8nKTtcbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9vKCkge30ubmFtZSA9PT0gJ2Zvbyc7XG59KCkpO1xuZnVuY3Rpb24gcFRvU3RyaW5nIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xufVxuZnVuY3Rpb24gaXNWaWV3KGFycmJ1Zikge1xuICBpZiAoaXNCdWZmZXIoYXJyYnVmKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYnVmKTtcbiAgfVxuICBpZiAoIWFycmJ1Zikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYXJyYnVmIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXJyYnVmLmJ1ZmZlciAmJiBhcnJidWYuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4vLyAxLiBUaGUgYXNzZXJ0IG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB0aHJvd1xuLy8gQXNzZXJ0aW9uRXJyb3IncyB3aGVuIHBhcnRpY3VsYXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldC4gVGhlXG4vLyBhc3NlcnQgbW9kdWxlIG11c3QgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIGludGVyZmFjZS5cblxudmFyIGFzc2VydCA9IG1vZHVsZS5leHBvcnRzID0gb2s7XG5cbi8vIDIuIFRoZSBBc3NlcnRpb25FcnJvciBpcyBkZWZpbmVkIGluIGFzc2VydC5cbi8vIG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IoeyBtZXNzYWdlOiBtZXNzYWdlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCB9KVxuXG52YXIgcmVnZXggPSAvXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9ibG9iL2FkZWVlZWM4YmZjYzYwNjhiMTg3ZDdkOWZiM2Q1YmIxZDNhMzA4OTkvaW1wbGVtZW50YXRpb24uanNcbmZ1bmN0aW9uIGdldE5hbWUoZnVuYykge1xuICBpZiAoIXV0aWwuaXNGdW5jdGlvbihmdW5jKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmMubmFtZTtcbiAgfVxuICB2YXIgc3RyID0gZnVuYy50b1N0cmluZygpO1xuICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gocmVnZXgpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG59XG5hc3NlcnQuQXNzZXJ0aW9uRXJyb3IgPSBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKSB7XG4gIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuYWN0dWFsID0gb3B0aW9ucy5hY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkO1xuICB0aGlzLm9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvcjtcbiAgaWYgKG9wdGlvbnMubWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBnZXRNZXNzYWdlKHRoaXMpO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0YWNrU3RhcnRGdW5jdGlvbiA9IG9wdGlvbnMuc3RhY2tTdGFydEZ1bmN0aW9uIHx8IGZhaWw7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gZ2V0TmFtZShzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICAgICAgdmFyIGlkeCA9IG91dC5pbmRleE9mKCdcXG4nICsgZm5fbmFtZSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGxvY2F0ZWQgdGhlIGZ1bmN0aW9uIGZyYW1lXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gc3RyaXAgb3V0IGV2ZXJ5dGhpbmcgYmVmb3JlIGl0IChhbmQgaXRzIGxpbmUpXG4gICAgICAgIHZhciBuZXh0X2xpbmUgPSBvdXQuaW5kZXhPZignXFxuJywgaWR4ICsgMSk7XG4gICAgICAgIG91dCA9IG91dC5zdWJzdHJpbmcobmV4dF9saW5lICsgMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sgPSBvdXQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IgaW5zdGFuY2VvZiBFcnJvclxudXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gdHJ1bmNhdGUocywgbikge1xuICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoIDwgbiA/IHMgOiBzLnNsaWNlKDAsIG4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzO1xuICB9XG59XG5mdW5jdGlvbiBpbnNwZWN0KHNvbWV0aGluZykge1xuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzIHx8ICF1dGlsLmlzRnVuY3Rpb24oc29tZXRoaW5nKSkge1xuICAgIHJldHVybiB1dGlsLmluc3BlY3Qoc29tZXRoaW5nKTtcbiAgfVxuICB2YXIgcmF3bmFtZSA9IGdldE5hbWUoc29tZXRoaW5nKTtcbiAgdmFyIG5hbWUgPSByYXduYW1lID8gJzogJyArIHJhd25hbWUgOiAnJztcbiAgcmV0dXJuICdbRnVuY3Rpb24nICsgIG5hbWUgKyAnXSc7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlKHNlbGYpIHtcbiAgcmV0dXJuIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5hY3R1YWwpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmV4cGVjdGVkKSwgMTI4KTtcbn1cblxuLy8gQXQgcHJlc2VudCBvbmx5IHRoZSB0aHJlZSBrZXlzIG1lbnRpb25lZCBhYm92ZSBhcmUgdXNlZCBhbmRcbi8vIHVuZGVyc3Rvb2QgYnkgdGhlIHNwZWMuIEltcGxlbWVudGF0aW9ucyBvciBzdWIgbW9kdWxlcyBjYW4gcGFzc1xuLy8gb3RoZXIga2V5cyB0byB0aGUgQXNzZXJ0aW9uRXJyb3IncyBjb25zdHJ1Y3RvciAtIHRoZXkgd2lsbCBiZVxuLy8gaWdub3JlZC5cblxuLy8gMy4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgdGhyb3cgYW4gQXNzZXJ0aW9uRXJyb3Jcbi8vIHdoZW4gYSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB3aXRoIGEgbWVzc2FnZSB0aGF0XG4vLyBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC4gIEFsbCBhc3NlcnRpb24gbWV0aG9kcyBwcm92aWRlXG4vLyBib3RoIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHZhbHVlcyB0byB0aGUgYXNzZXJ0aW9uIGVycm9yIGZvclxuLy8gZGlzcGxheSBwdXJwb3Nlcy5cblxuZnVuY3Rpb24gZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvciwgc3RhY2tTdGFydEZ1bmN0aW9uKSB7XG4gIHRocm93IG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3Ioe1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICBzdGFja1N0YXJ0RnVuY3Rpb246IHN0YWNrU3RhcnRGdW5jdGlvblxuICB9KTtcbn1cblxuLy8gRVhURU5TSU9OISBhbGxvd3MgZm9yIHdlbGwgYmVoYXZlZCBlcnJvcnMgZGVmaW5lZCBlbHNld2hlcmUuXG5hc3NlcnQuZmFpbCA9IGZhaWw7XG5cbi8vIDQuIFB1cmUgYXNzZXJ0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YWx1ZSBpcyB0cnV0aHksIGFzIGRldGVybWluZWRcbi8vIGJ5ICEhZ3VhcmQuXG4vLyBhc3NlcnQub2soZ3VhcmQsIG1lc3NhZ2Vfb3B0KTtcbi8vIFRoaXMgc3RhdGVtZW50IGlzIGVxdWl2YWxlbnQgdG8gYXNzZXJ0LmVxdWFsKHRydWUsICEhZ3VhcmQsXG4vLyBtZXNzYWdlX29wdCk7LiBUbyB0ZXN0IHN0cmljdGx5IGZvciB0aGUgdmFsdWUgdHJ1ZSwgdXNlXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgZ3VhcmQsIG1lc3NhZ2Vfb3B0KTsuXG5cbmZ1bmN0aW9uIG9rKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIGZhaWwodmFsdWUsIHRydWUsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5vayk7XG59XG5hc3NlcnQub2sgPSBvaztcblxuLy8gNS4gVGhlIGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzaGFsbG93LCBjb2VyY2l2ZSBlcXVhbGl0eSB3aXRoXG4vLyA9PS5cbi8vIGFzc2VydC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQuZXF1YWwpO1xufTtcblxuLy8gNi4gVGhlIG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHdoZXRoZXIgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbFxuLy8gd2l0aCAhPSBhc3NlcnQubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbiBub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPScsIGFzc2VydC5ub3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDcuIFRoZSBlcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgYSBkZWVwIGVxdWFsaXR5IHJlbGF0aW9uLlxuLy8gYXNzZXJ0LmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5kZWVwRXF1YWwgPSBmdW5jdGlvbiBkZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcEVxdWFsJywgYXNzZXJ0LmRlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwU3RyaWN0RXF1YWwnLCBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKSB7XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgJiYgaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUoYWN0dWFsLCBleHBlY3RlZCkgPT09IDA7XG5cbiAgLy8gNy4yLiBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBEYXRlIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBEYXRlIG9iamVjdCB0aGF0IHJlZmVycyB0byB0aGUgc2FtZSB0aW1lLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNEYXRlKGFjdHVhbCkgJiYgdXRpbC5pc0RhdGUoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMgSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBSZWdFeHAgb2JqZWN0IHdpdGggdGhlIHNhbWUgc291cmNlIGFuZFxuICAvLyBwcm9wZXJ0aWVzIChgZ2xvYmFsYCwgYG11bHRpbGluZWAsIGBsYXN0SW5kZXhgLCBgaWdub3JlQ2FzZWApLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAoYWN0dWFsKSAmJiB1dGlsLmlzUmVnRXhwKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuc291cmNlID09PSBleHBlY3RlZC5zb3VyY2UgJiZcbiAgICAgICAgICAgYWN0dWFsLmdsb2JhbCA9PT0gZXhwZWN0ZWQuZ2xvYmFsICYmXG4gICAgICAgICAgIGFjdHVhbC5tdWx0aWxpbmUgPT09IGV4cGVjdGVkLm11bHRpbGluZSAmJlxuICAgICAgICAgICBhY3R1YWwubGFzdEluZGV4ID09PSBleHBlY3RlZC5sYXN0SW5kZXggJiZcbiAgICAgICAgICAgYWN0dWFsLmlnbm9yZUNhc2UgPT09IGV4cGVjdGVkLmlnbm9yZUNhc2U7XG5cbiAgLy8gNy40LiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKChhY3R1YWwgPT09IG51bGwgfHwgdHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcpICYmXG4gICAgICAgICAgICAgKGV4cGVjdGVkID09PSBudWxsIHx8IHR5cGVvZiBleHBlY3RlZCAhPT0gJ29iamVjdCcpKSB7XG4gICAgcmV0dXJuIHN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIGluc3RhbmNlcyBvZiB0eXBlZCBhcnJheXMsIHdyYXAgdGhlaXIgdW5kZXJseWluZ1xuICAvLyBBcnJheUJ1ZmZlcnMgaW4gYSBCdWZmZXIgZWFjaCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZVxuICAvLyBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyB0aGUgYXJyYXlzIHRvIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBjaGVja2VkIGJ5XG4gIC8vIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKGFrYSBwVG9TdHJpbmcpLiBOZXZlciBwZXJmb3JtIGJpbmFyeVxuICAvLyBjb21wYXJpc29ucyBmb3IgRmxvYXQqQXJyYXlzLCB0aG91Z2gsIHNpbmNlIGUuZy4gKzAgPT09IC0wIGJ1dCB0aGVpclxuICAvLyBiaXQgcGF0dGVybnMgYXJlIG5vdCBpZGVudGljYWwuXG4gIH0gZWxzZSBpZiAoaXNWaWV3KGFjdHVhbCkgJiYgaXNWaWV3KGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgIHBUb1N0cmluZyhhY3R1YWwpID09PSBwVG9TdHJpbmcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgIShhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcbiAgICAgICAgICAgICAgIGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpIHtcbiAgICByZXR1cm4gY29tcGFyZShuZXcgVWludDhBcnJheShhY3R1YWwuYnVmZmVyKSxcbiAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShleHBlY3RlZC5idWZmZXIpKSA9PT0gMDtcblxuICAvLyA3LjUgRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgIT09IGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBtZW1vcyA9IG1lbW9zIHx8IHthY3R1YWw6IFtdLCBleHBlY3RlZDogW119O1xuXG4gICAgdmFyIGFjdHVhbEluZGV4ID0gbWVtb3MuYWN0dWFsLmluZGV4T2YoYWN0dWFsKTtcbiAgICBpZiAoYWN0dWFsSW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoYWN0dWFsSW5kZXggPT09IG1lbW9zLmV4cGVjdGVkLmluZGV4T2YoZXhwZWN0ZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9zLmFjdHVhbC5wdXNoKGFjdHVhbCk7XG4gICAgbWVtb3MuZXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG5cbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykge1xuICBpZiAoYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBpZiBvbmUgaXMgYSBwcmltaXRpdmUsIHRoZSBvdGhlciBtdXN0IGJlIHNhbWVcbiAgaWYgKHV0aWwuaXNQcmltaXRpdmUoYSkgfHwgdXRpbC5pc1ByaW1pdGl2ZShiKSlcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgaWYgKHN0cmljdCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBhSXNBcmdzID0gaXNBcmd1bWVudHMoYSk7XG4gIHZhciBiSXNBcmdzID0gaXNBcmd1bWVudHMoYik7XG4gIGlmICgoYUlzQXJncyAmJiAhYklzQXJncykgfHwgKCFhSXNBcmdzICYmIGJJc0FyZ3MpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGFJc0FyZ3MpIHtcbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBfZGVlcEVxdWFsKGEsIGIsIHN0cmljdCk7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKTtcbiAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgdmFyIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT09IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFfZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBFcXVhbCcsIGFzc2VydC5ub3REZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQubm90RGVlcFN0cmljdEVxdWFsID0gbm90RGVlcFN0cmljdEVxdWFsO1xuZnVuY3Rpb24gbm90RGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwU3RyaWN0RXF1YWwnLCBub3REZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59XG5cblxuLy8gOS4gVGhlIHN0cmljdCBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc3RyaWN0IGVxdWFsaXR5LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbi8vIGFzc2VydC5zdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIHN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PT0nLCBhc3NlcnQuc3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG4vLyAxMC4gVGhlIHN0cmljdCBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciBzdHJpY3QgaW5lcXVhbGl0eSwgYXNcbi8vIGRldGVybWluZWQgYnkgIT09LiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24gbm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9PScsIGFzc2VydC5ub3RTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChleHBlY3RlZCkgPT0gJ1tvYmplY3QgUmVnRXhwXScpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElnbm9yZS4gIFRoZSBpbnN0YW5jZW9mIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgYXJyb3cgZnVuY3Rpb25zLlxuICB9XG5cbiAgaWYgKEVycm9yLmlzUHJvdG90eXBlT2YoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIF90cnlCbG9jayhibG9jaykge1xuICB2YXIgZXJyb3I7XG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5cbmZ1bmN0aW9uIF90aHJvd3Moc2hvdWxkVGhyb3csIGJsb2NrLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICB2YXIgYWN0dWFsO1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJykge1xuICAgIG1lc3NhZ2UgPSBleHBlY3RlZDtcbiAgICBleHBlY3RlZCA9IG51bGw7XG4gIH1cblxuICBhY3R1YWwgPSBfdHJ5QmxvY2soYmxvY2spO1xuXG4gIG1lc3NhZ2UgPSAoZXhwZWN0ZWQgJiYgZXhwZWN0ZWQubmFtZSA/ICcgKCcgKyBleHBlY3RlZC5uYW1lICsgJykuJyA6ICcuJykgK1xuICAgICAgICAgICAgKG1lc3NhZ2UgPyAnICcgKyBtZXNzYWdlIDogJy4nKTtcblxuICBpZiAoc2hvdWxkVGhyb3cgJiYgIWFjdHVhbCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ01pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgdmFyIHVzZXJQcm92aWRlZE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZyc7XG4gIHZhciBpc1Vud2FudGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIHV0aWwuaXNFcnJvcihhY3R1YWwpO1xuICB2YXIgaXNVbmV4cGVjdGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIGFjdHVhbCAmJiAhZXhwZWN0ZWQ7XG5cbiAgaWYgKChpc1Vud2FudGVkRXhjZXB0aW9uICYmXG4gICAgICB1c2VyUHJvdmlkZWRNZXNzYWdlICYmXG4gICAgICBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHxcbiAgICAgIGlzVW5leHBlY3RlZEV4Y2VwdGlvbikge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ0dvdCB1bndhbnRlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICBpZiAoKHNob3VsZFRocm93ICYmIGFjdHVhbCAmJiBleHBlY3RlZCAmJlxuICAgICAgIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fCAoIXNob3VsZFRocm93ICYmIGFjdHVhbCkpIHtcbiAgICB0aHJvdyBhY3R1YWw7XG4gIH1cbn1cblxuLy8gMTEuIEV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yOlxuLy8gYXNzZXJ0LnRocm93cyhibG9jaywgRXJyb3Jfb3B0LCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyh0cnVlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuLy8gRVhURU5TSU9OISBUaGlzIGlzIGFubm95aW5nIHRvIHdyaXRlIG91dHNpZGUgdGhpcyBtb2R1bGUuXG5hc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MoZmFsc2UsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKGVycikgeyBpZiAoZXJyKSB0aHJvdyBlcnI7IH07XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59O1xuIiwiXG4vKiFcbiAqICBDb3B5cmlnaHQgMjAxMCBMZWFybkJvb3N0IDxkZXZAbGVhcm5ib29zdC5jb20+XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbiAgLCBwYXJzZSA9IHJlcXVpcmUoJ3VybCcpLnBhcnNlXG4gIDtcblxuLyoqXG4gKiBWYWxpZCBrZXlzLlxuICovXG5cbnZhciBrZXlzID0gXG4gIFsgJ2FjbCdcbiAgLCAnbG9jYXRpb24nXG4gICwgJ2xvZ2dpbmcnXG4gICwgJ25vdGlmaWNhdGlvbidcbiAgLCAncGFydE51bWJlcidcbiAgLCAncG9saWN5J1xuICAsICdyZXF1ZXN0UGF5bWVudCdcbiAgLCAndG9ycmVudCdcbiAgLCAndXBsb2FkSWQnXG4gICwgJ3VwbG9hZHMnXG4gICwgJ3ZlcnNpb25JZCdcbiAgLCAndmVyc2lvbmluZydcbiAgLCAndmVyc2lvbnMnXG4gICwgJ3dlYnNpdGUnXG4gIF1cblxuLyoqXG4gKiBSZXR1cm4gYW4gXCJBdXRob3JpemF0aW9uXCIgaGVhZGVyIHZhbHVlIHdpdGggdGhlIGdpdmVuIGBvcHRpb25zYFxuICogaW4gdGhlIGZvcm0gb2YgXCJBV1MgPGtleT46PHNpZ25hdHVyZT5cIlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBhdXRob3JpemF0aW9uIChvcHRpb25zKSB7XG4gIHJldHVybiAnQVdTICcgKyBvcHRpb25zLmtleSArICc6JyArIHNpZ24ob3B0aW9ucylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhdXRob3JpemF0aW9uXG5tb2R1bGUuZXhwb3J0cy5hdXRob3JpemF0aW9uID0gYXV0aG9yaXphdGlvblxuXG4vKipcbiAqIFNpbXBsZSBITUFDLVNIQTEgV3JhcHBlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqLyBcblxuZnVuY3Rpb24gaG1hY1NoYTEgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgb3B0aW9ucy5zZWNyZXQpLnVwZGF0ZShvcHRpb25zLm1lc3NhZ2UpLmRpZ2VzdCgnYmFzZTY0Jylcbn1cblxubW9kdWxlLmV4cG9ydHMuaG1hY1NoYTEgPSBobWFjU2hhMVxuXG4vKipcbiAqIENyZWF0ZSBhIGJhc2U2NCBzaGExIEhNQUMgZm9yIGBvcHRpb25zYC4gXG4gKiBcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzaWduIChvcHRpb25zKSB7XG4gIG9wdGlvbnMubWVzc2FnZSA9IHN0cmluZ1RvU2lnbihvcHRpb25zKVxuICByZXR1cm4gaG1hY1NoYTEob3B0aW9ucylcbn1cbm1vZHVsZS5leHBvcnRzLnNpZ24gPSBzaWduXG5cbi8qKlxuICogQ3JlYXRlIGEgYmFzZTY0IHNoYTEgSE1BQyBmb3IgYG9wdGlvbnNgLiBcbiAqXG4gKiBTcGVjaWZpY2FsbHkgdG8gYmUgdXNlZCB3aXRoIFMzIHByZXNpZ25lZCBVUkxzXG4gKiBcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzaWduUXVlcnkgKG9wdGlvbnMpIHtcbiAgb3B0aW9ucy5tZXNzYWdlID0gcXVlcnlTdHJpbmdUb1NpZ24ob3B0aW9ucylcbiAgcmV0dXJuIGhtYWNTaGExKG9wdGlvbnMpXG59XG5tb2R1bGUuZXhwb3J0cy5zaWduUXVlcnk9IHNpZ25RdWVyeVxuXG4vKipcbiAqIFJldHVybiBhIHN0cmluZyBmb3Igc2lnbigpIHdpdGggdGhlIGdpdmVuIGBvcHRpb25zYC5cbiAqXG4gKiBTcGVjOlxuICogXG4gKiAgICA8dmVyYj5cXG5cbiAqICAgIDxtZDU+XFxuXG4gKiAgICA8Y29udGVudC10eXBlPlxcblxuICogICAgPGRhdGU+XFxuXG4gKiAgICBbaGVhZGVyc1xcbl1cbiAqICAgIDxyZXNvdXJjZT5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3RyaW5nVG9TaWduIChvcHRpb25zKSB7XG4gIHZhciBoZWFkZXJzID0gb3B0aW9ucy5hbWF6b25IZWFkZXJzIHx8ICcnXG4gIGlmIChoZWFkZXJzKSBoZWFkZXJzICs9ICdcXG4nXG4gIHZhciByID0gXG4gICAgWyBvcHRpb25zLnZlcmJcbiAgICAsIG9wdGlvbnMubWQ1XG4gICAgLCBvcHRpb25zLmNvbnRlbnRUeXBlXG4gICAgLCBvcHRpb25zLmRhdGUgPyBvcHRpb25zLmRhdGUudG9VVENTdHJpbmcoKSA6ICcnXG4gICAgLCBoZWFkZXJzICsgb3B0aW9ucy5yZXNvdXJjZVxuICAgIF1cbiAgcmV0dXJuIHIuam9pbignXFxuJylcbn1cbm1vZHVsZS5leHBvcnRzLnF1ZXJ5U3RyaW5nVG9TaWduID0gc3RyaW5nVG9TaWduXG5cbi8qKlxuICogUmV0dXJuIGEgc3RyaW5nIGZvciBzaWduKCkgd2l0aCB0aGUgZ2l2ZW4gYG9wdGlvbnNgLCBidXQgaXMgbWVhbnQgZXhjbHVzaXZlbHlcbiAqIGZvciBTMyBwcmVzaWduZWQgVVJMc1xuICpcbiAqIFNwZWM6XG4gKiBcbiAqICAgIDxkYXRlPlxcblxuICogICAgPHJlc291cmNlPlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBxdWVyeVN0cmluZ1RvU2lnbiAob3B0aW9ucyl7XG4gIHJldHVybiAnR0VUXFxuXFxuXFxuJyArIG9wdGlvbnMuZGF0ZSArICdcXG4nICsgb3B0aW9ucy5yZXNvdXJjZVxufVxubW9kdWxlLmV4cG9ydHMucXVlcnlTdHJpbmdUb1NpZ24gPSBxdWVyeVN0cmluZ1RvU2lnblxuXG4vKipcbiAqIFBlcmZvcm0gdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAgLSBpZ25vcmUgbm9uLWFtYXpvbiBoZWFkZXJzXG4gKiAgLSBsb3dlcmNhc2UgZmllbGRzXG4gKiAgLSBzb3J0IGxleGljb2dyYXBoaWNhbGx5XG4gKiAgLSB0cmltIHdoaXRlc3BhY2UgYmV0d2VlbiBcIjpcIlxuICogIC0gam9pbiB3aXRoIG5ld2xpbmVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY2Fub25pY2FsaXplSGVhZGVycyAoaGVhZGVycykge1xuICB2YXIgYnVmID0gW11cbiAgICAsIGZpZWxkcyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gZmllbGRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIGZpZWxkID0gZmllbGRzW2ldXG4gICAgICAsIHZhbCA9IGhlYWRlcnNbZmllbGRdXG4gICAgICAsIGZpZWxkID0gZmllbGQudG9Mb3dlckNhc2UoKVxuICAgICAgO1xuICAgIGlmICgwICE9PSBmaWVsZC5pbmRleE9mKCd4LWFteicpKSBjb250aW51ZVxuICAgIGJ1Zi5wdXNoKGZpZWxkICsgJzonICsgdmFsKVxuICB9XG4gIHJldHVybiBidWYuc29ydCgpLmpvaW4oJ1xcbicpXG59XG5tb2R1bGUuZXhwb3J0cy5jYW5vbmljYWxpemVIZWFkZXJzID0gY2Fub25pY2FsaXplSGVhZGVyc1xuXG4vKipcbiAqIFBlcmZvcm0gdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAgLSBpZ25vcmUgbm9uIHN1Yi1yZXNvdXJjZXNcbiAqICAtIHNvcnQgbGV4aWNvZ3JhcGhpY2FsbHlcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVzb3VyY2VcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNhbm9uaWNhbGl6ZVJlc291cmNlIChyZXNvdXJjZSkge1xuICB2YXIgdXJsID0gcGFyc2UocmVzb3VyY2UsIHRydWUpXG4gICAgLCBwYXRoID0gdXJsLnBhdGhuYW1lXG4gICAgLCBidWYgPSBbXVxuICAgIDtcblxuICBPYmplY3Qua2V5cyh1cmwucXVlcnkpLmZvckVhY2goZnVuY3Rpb24oa2V5KXtcbiAgICBpZiAoIX5rZXlzLmluZGV4T2Yoa2V5KSkgcmV0dXJuXG4gICAgdmFyIHZhbCA9ICcnID09IHVybC5xdWVyeVtrZXldID8gJycgOiAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodXJsLnF1ZXJ5W2tleV0pXG4gICAgYnVmLnB1c2goa2V5ICsgdmFsKVxuICB9KVxuXG4gIHJldHVybiBwYXRoICsgKGJ1Zi5sZW5ndGggPyAnPycgKyBidWYuc29ydCgpLmpvaW4oJyYnKSA6ICcnKVxufVxubW9kdWxlLmV4cG9ydHMuY2Fub25pY2FsaXplUmVzb3VyY2UgPSBjYW5vbmljYWxpemVSZXNvdXJjZVxuIiwidmFyIGF3czQgPSBleHBvcnRzLFxuICAgIHVybCA9IHJlcXVpcmUoJ3VybCcpLFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKSxcbiAgICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKSxcbiAgICBscnUgPSByZXF1aXJlKCcuL2xydScpLFxuICAgIGNyZWRlbnRpYWxzQ2FjaGUgPSBscnUoMTAwMClcblxuLy8gaHR0cDovL2RvY3MuYW1hem9ud2Vic2VydmljZXMuY29tL2dlbmVyYWwvbGF0ZXN0L2dyL3NpZ25hdHVyZS12ZXJzaW9uLTQuaHRtbFxuXG5mdW5jdGlvbiBobWFjKGtleSwgc3RyaW5nLCBlbmNvZGluZykge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTI1NicsIGtleSkudXBkYXRlKHN0cmluZywgJ3V0ZjgnKS5kaWdlc3QoZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGhhc2goc3RyaW5nLCBlbmNvZGluZykge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShzdHJpbmcsICd1dGY4JykuZGlnZXN0KGVuY29kaW5nKVxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIHN0cmluZyBoYXMgYWxyZWFkeSBiZWVuIHBlcmNlbnQgZW5jb2RlZFxuZnVuY3Rpb24gZW5jb2RlUmZjMzk4Nih1cmxFbmNvZGVkU3RyaW5nKSB7XG4gIHJldHVybiB1cmxFbmNvZGVkU3RyaW5nLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24oYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuLy8gcmVxdWVzdDogeyBwYXRoIHwgYm9keSwgW2hvc3RdLCBbbWV0aG9kXSwgW2hlYWRlcnNdLCBbc2VydmljZV0sIFtyZWdpb25dIH1cbi8vIGNyZWRlbnRpYWxzOiB7IGFjY2Vzc0tleUlkLCBzZWNyZXRBY2Nlc3NLZXksIFtzZXNzaW9uVG9rZW5dIH1cbmZ1bmN0aW9uIFJlcXVlc3RTaWduZXIocmVxdWVzdCwgY3JlZGVudGlhbHMpIHtcblxuICBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSByZXF1ZXN0ID0gdXJsLnBhcnNlKHJlcXVlc3QpXG5cbiAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0LmhlYWRlcnMgPSAocmVxdWVzdC5oZWFkZXJzIHx8IHt9KSxcbiAgICAgIGhvc3RQYXJ0cyA9IHRoaXMubWF0Y2hIb3N0KHJlcXVlc3QuaG9zdG5hbWUgfHwgcmVxdWVzdC5ob3N0IHx8IGhlYWRlcnMuSG9zdCB8fCBoZWFkZXJzLmhvc3QpXG5cbiAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICB0aGlzLmNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHMgfHwgdGhpcy5kZWZhdWx0Q3JlZGVudGlhbHMoKVxuXG4gIHRoaXMuc2VydmljZSA9IHJlcXVlc3Quc2VydmljZSB8fCBob3N0UGFydHNbMF0gfHwgJydcbiAgdGhpcy5yZWdpb24gPSByZXF1ZXN0LnJlZ2lvbiB8fCBob3N0UGFydHNbMV0gfHwgJ3VzLWVhc3QtMSdcblxuICAvLyBTRVMgdXNlcyBhIGRpZmZlcmVudCBkb21haW4gZnJvbSB0aGUgc2VydmljZSBuYW1lXG4gIGlmICh0aGlzLnNlcnZpY2UgPT09ICdlbWFpbCcpIHRoaXMuc2VydmljZSA9ICdzZXMnXG5cbiAgaWYgKCFyZXF1ZXN0Lm1ldGhvZCAmJiByZXF1ZXN0LmJvZHkpXG4gICAgcmVxdWVzdC5tZXRob2QgPSAnUE9TVCdcblxuICBpZiAoIWhlYWRlcnMuSG9zdCAmJiAhaGVhZGVycy5ob3N0KSB7XG4gICAgaGVhZGVycy5Ib3N0ID0gcmVxdWVzdC5ob3N0bmFtZSB8fCByZXF1ZXN0Lmhvc3QgfHwgdGhpcy5jcmVhdGVIb3N0KClcblxuICAgIC8vIElmIGEgcG9ydCBpcyBzcGVjaWZpZWQgZXhwbGljaXRseSwgdXNlIGl0IGFzIGlzXG4gICAgaWYgKHJlcXVlc3QucG9ydClcbiAgICAgIGhlYWRlcnMuSG9zdCArPSAnOicgKyByZXF1ZXN0LnBvcnRcbiAgfVxuICBpZiAoIXJlcXVlc3QuaG9zdG5hbWUgJiYgIXJlcXVlc3QuaG9zdClcbiAgICByZXF1ZXN0Lmhvc3RuYW1lID0gaGVhZGVycy5Ib3N0IHx8IGhlYWRlcnMuaG9zdFxuXG4gIHRoaXMuaXNDb2RlQ29tbWl0R2l0ID0gdGhpcy5zZXJ2aWNlID09PSAnY29kZWNvbW1pdCcgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHSVQnXG59XG5cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLm1hdGNoSG9zdCA9IGZ1bmN0aW9uKGhvc3QpIHtcbiAgdmFyIG1hdGNoID0gKGhvc3QgfHwgJycpLm1hdGNoKC8oW15cXC5dKylcXC4oPzooW15cXC5dKilcXC4pP2FtYXpvbmF3c1xcLmNvbSQvKVxuICB2YXIgaG9zdFBhcnRzID0gKG1hdGNoIHx8IFtdKS5zbGljZSgxLCAzKVxuXG4gIC8vIEVTJ3MgaG9zdFBhcnRzIGFyZSBzb21ldGltZXMgdGhlIG90aGVyIHdheSByb3VuZCwgaWYgdGhlIHZhbHVlIHRoYXQgaXMgZXhwZWN0ZWRcbiAgLy8gdG8gYmUgcmVnaW9uIGVxdWFscyDigJhlc+KAmSBzd2l0Y2ggdGhlbSBiYWNrXG4gIC8vIGUuZy4gc2VhcmNoLWNsdXN0ZXItbmFtZS1hYWFhMDBhYWFhMGFhYTBhYWFhYWFhMGFhYS51cy1lYXN0LTEuZXMuYW1hem9uYXdzLmNvbVxuICBpZiAoaG9zdFBhcnRzWzFdID09PSAnZXMnKVxuICAgIGhvc3RQYXJ0cyA9IGhvc3RQYXJ0cy5yZXZlcnNlKClcblxuICByZXR1cm4gaG9zdFBhcnRzXG59XG5cbi8vIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL3JhbmRlLmh0bWxcblJlcXVlc3RTaWduZXIucHJvdG90eXBlLmlzU2luZ2xlUmVnaW9uID0gZnVuY3Rpb24oKSB7XG4gIC8vIFNwZWNpYWwgY2FzZSBmb3IgUzMgYW5kIFNpbXBsZURCIGluIHVzLWVhc3QtMVxuICBpZiAoWydzMycsICdzZGInXS5pbmRleE9mKHRoaXMuc2VydmljZSkgPj0gMCAmJiB0aGlzLnJlZ2lvbiA9PT0gJ3VzLWVhc3QtMScpIHJldHVybiB0cnVlXG5cbiAgcmV0dXJuIFsnY2xvdWRmcm9udCcsICdscycsICdyb3V0ZTUzJywgJ2lhbScsICdpbXBvcnRleHBvcnQnLCAnc3RzJ11cbiAgICAuaW5kZXhPZih0aGlzLnNlcnZpY2UpID49IDBcbn1cblxuUmVxdWVzdFNpZ25lci5wcm90b3R5cGUuY3JlYXRlSG9zdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVnaW9uID0gdGhpcy5pc1NpbmdsZVJlZ2lvbigpID8gJycgOlxuICAgICAgICAodGhpcy5zZXJ2aWNlID09PSAnczMnICYmIHRoaXMucmVnaW9uICE9PSAndXMtZWFzdC0xJyA/ICctJyA6ICcuJykgKyB0aGlzLnJlZ2lvbixcbiAgICAgIHNlcnZpY2UgPSB0aGlzLnNlcnZpY2UgPT09ICdzZXMnID8gJ2VtYWlsJyA6IHRoaXMuc2VydmljZVxuICByZXR1cm4gc2VydmljZSArIHJlZ2lvbiArICcuYW1hem9uYXdzLmNvbSdcbn1cblxuUmVxdWVzdFNpZ25lci5wcm90b3R5cGUucHJlcGFyZVJlcXVlc3QgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5wYXJzZVBhdGgoKVxuXG4gIHZhciByZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0LCBoZWFkZXJzID0gcmVxdWVzdC5oZWFkZXJzLCBxdWVyeVxuXG4gIGlmIChyZXF1ZXN0LnNpZ25RdWVyeSkge1xuXG4gICAgdGhpcy5wYXJzZWRQYXRoLnF1ZXJ5ID0gcXVlcnkgPSB0aGlzLnBhcnNlZFBhdGgucXVlcnkgfHwge31cblxuICAgIGlmICh0aGlzLmNyZWRlbnRpYWxzLnNlc3Npb25Ub2tlbilcbiAgICAgIHF1ZXJ5WydYLUFtei1TZWN1cml0eS1Ub2tlbiddID0gdGhpcy5jcmVkZW50aWFscy5zZXNzaW9uVG9rZW5cblxuICAgIGlmICh0aGlzLnNlcnZpY2UgPT09ICdzMycgJiYgIXF1ZXJ5WydYLUFtei1FeHBpcmVzJ10pXG4gICAgICBxdWVyeVsnWC1BbXotRXhwaXJlcyddID0gODY0MDBcblxuICAgIGlmIChxdWVyeVsnWC1BbXotRGF0ZSddKVxuICAgICAgdGhpcy5kYXRldGltZSA9IHF1ZXJ5WydYLUFtei1EYXRlJ11cbiAgICBlbHNlXG4gICAgICBxdWVyeVsnWC1BbXotRGF0ZSddID0gdGhpcy5nZXREYXRlVGltZSgpXG5cbiAgICBxdWVyeVsnWC1BbXotQWxnb3JpdGhtJ10gPSAnQVdTNC1ITUFDLVNIQTI1NidcbiAgICBxdWVyeVsnWC1BbXotQ3JlZGVudGlhbCddID0gdGhpcy5jcmVkZW50aWFscy5hY2Nlc3NLZXlJZCArICcvJyArIHRoaXMuY3JlZGVudGlhbFN0cmluZygpXG4gICAgcXVlcnlbJ1gtQW16LVNpZ25lZEhlYWRlcnMnXSA9IHRoaXMuc2lnbmVkSGVhZGVycygpXG5cbiAgfSBlbHNlIHtcblxuICAgIGlmICghcmVxdWVzdC5kb05vdE1vZGlmeUhlYWRlcnMgJiYgIXRoaXMuaXNDb2RlQ29tbWl0R2l0KSB7XG4gICAgICBpZiAocmVxdWVzdC5ib2R5ICYmICFoZWFkZXJzWydDb250ZW50LVR5cGUnXSAmJiAhaGVhZGVyc1snY29udGVudC10eXBlJ10pXG4gICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD11dGYtOCdcblxuICAgICAgaWYgKHJlcXVlc3QuYm9keSAmJiAhaGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSAmJiAhaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSlcbiAgICAgICAgaGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcXVlc3QuYm9keSlcblxuICAgICAgaWYgKHRoaXMuY3JlZGVudGlhbHMuc2Vzc2lvblRva2VuICYmICFoZWFkZXJzWydYLUFtei1TZWN1cml0eS1Ub2tlbiddICYmICFoZWFkZXJzWyd4LWFtei1zZWN1cml0eS10b2tlbiddKVxuICAgICAgICBoZWFkZXJzWydYLUFtei1TZWN1cml0eS1Ub2tlbiddID0gdGhpcy5jcmVkZW50aWFscy5zZXNzaW9uVG9rZW5cblxuICAgICAgaWYgKHRoaXMuc2VydmljZSA9PT0gJ3MzJyAmJiAhaGVhZGVyc1snWC1BbXotQ29udGVudC1TaGEyNTYnXSAmJiAhaGVhZGVyc1sneC1hbXotY29udGVudC1zaGEyNTYnXSlcbiAgICAgICAgaGVhZGVyc1snWC1BbXotQ29udGVudC1TaGEyNTYnXSA9IGhhc2godGhpcy5yZXF1ZXN0LmJvZHkgfHwgJycsICdoZXgnKVxuXG4gICAgICBpZiAoaGVhZGVyc1snWC1BbXotRGF0ZSddIHx8IGhlYWRlcnNbJ3gtYW16LWRhdGUnXSlcbiAgICAgICAgdGhpcy5kYXRldGltZSA9IGhlYWRlcnNbJ1gtQW16LURhdGUnXSB8fCBoZWFkZXJzWyd4LWFtei1kYXRlJ11cbiAgICAgIGVsc2VcbiAgICAgICAgaGVhZGVyc1snWC1BbXotRGF0ZSddID0gdGhpcy5nZXREYXRlVGltZSgpXG4gICAgfVxuXG4gICAgZGVsZXRlIGhlYWRlcnMuQXV0aG9yaXphdGlvblxuICAgIGRlbGV0ZSBoZWFkZXJzLmF1dGhvcml6YXRpb25cbiAgfVxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5wYXJzZWRQYXRoKSB0aGlzLnByZXBhcmVSZXF1ZXN0KClcblxuICBpZiAodGhpcy5yZXF1ZXN0LnNpZ25RdWVyeSkge1xuICAgIHRoaXMucGFyc2VkUGF0aC5xdWVyeVsnWC1BbXotU2lnbmF0dXJlJ10gPSB0aGlzLnNpZ25hdHVyZSgpXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZXF1ZXN0LmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IHRoaXMuYXV0aEhlYWRlcigpXG4gIH1cblxuICB0aGlzLnJlcXVlc3QucGF0aCA9IHRoaXMuZm9ybWF0UGF0aCgpXG5cbiAgcmV0dXJuIHRoaXMucmVxdWVzdFxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5nZXREYXRlVGltZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuZGF0ZXRpbWUpIHtcbiAgICB2YXIgaGVhZGVycyA9IHRoaXMucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGhlYWRlcnMuRGF0ZSB8fCBoZWFkZXJzLmRhdGUgfHwgbmV3IERhdGUpXG5cbiAgICB0aGlzLmRhdGV0aW1lID0gZGF0ZS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1s6XFwtXXxcXC5cXGR7M30vZywgJycpXG5cbiAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nICdaJyBvbiB0aGUgdGltZXN0YW1wIHN0cmluZyBmb3IgQ29kZUNvbW1pdCBnaXQgYWNjZXNzXG4gICAgaWYgKHRoaXMuaXNDb2RlQ29tbWl0R2l0KSB0aGlzLmRhdGV0aW1lID0gdGhpcy5kYXRldGltZS5zbGljZSgwLCAtMSlcbiAgfVxuICByZXR1cm4gdGhpcy5kYXRldGltZVxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5nZXREYXRlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmdldERhdGVUaW1lKCkuc3Vic3RyKDAsIDgpXG59XG5cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLmF1dGhIZWFkZXIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFtcbiAgICAnQVdTNC1ITUFDLVNIQTI1NiBDcmVkZW50aWFsPScgKyB0aGlzLmNyZWRlbnRpYWxzLmFjY2Vzc0tleUlkICsgJy8nICsgdGhpcy5jcmVkZW50aWFsU3RyaW5nKCksXG4gICAgJ1NpZ25lZEhlYWRlcnM9JyArIHRoaXMuc2lnbmVkSGVhZGVycygpLFxuICAgICdTaWduYXR1cmU9JyArIHRoaXMuc2lnbmF0dXJlKCksXG4gIF0uam9pbignLCAnKVxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5zaWduYXR1cmUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGUgPSB0aGlzLmdldERhdGUoKSxcbiAgICAgIGNhY2hlS2V5ID0gW3RoaXMuY3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5LCBkYXRlLCB0aGlzLnJlZ2lvbiwgdGhpcy5zZXJ2aWNlXS5qb2luKCksXG4gICAgICBrRGF0ZSwga1JlZ2lvbiwga1NlcnZpY2UsIGtDcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzQ2FjaGUuZ2V0KGNhY2hlS2V5KVxuICBpZiAoIWtDcmVkZW50aWFscykge1xuICAgIGtEYXRlID0gaG1hYygnQVdTNCcgKyB0aGlzLmNyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleSwgZGF0ZSlcbiAgICBrUmVnaW9uID0gaG1hYyhrRGF0ZSwgdGhpcy5yZWdpb24pXG4gICAga1NlcnZpY2UgPSBobWFjKGtSZWdpb24sIHRoaXMuc2VydmljZSlcbiAgICBrQ3JlZGVudGlhbHMgPSBobWFjKGtTZXJ2aWNlLCAnYXdzNF9yZXF1ZXN0JylcbiAgICBjcmVkZW50aWFsc0NhY2hlLnNldChjYWNoZUtleSwga0NyZWRlbnRpYWxzKVxuICB9XG4gIHJldHVybiBobWFjKGtDcmVkZW50aWFscywgdGhpcy5zdHJpbmdUb1NpZ24oKSwgJ2hleCcpXG59XG5cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLnN0cmluZ1RvU2lnbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gW1xuICAgICdBV1M0LUhNQUMtU0hBMjU2JyxcbiAgICB0aGlzLmdldERhdGVUaW1lKCksXG4gICAgdGhpcy5jcmVkZW50aWFsU3RyaW5nKCksXG4gICAgaGFzaCh0aGlzLmNhbm9uaWNhbFN0cmluZygpLCAnaGV4JyksXG4gIF0uam9pbignXFxuJylcbn1cblxuUmVxdWVzdFNpZ25lci5wcm90b3R5cGUuY2Fub25pY2FsU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5wYXJzZWRQYXRoKSB0aGlzLnByZXBhcmVSZXF1ZXN0KClcblxuICB2YXIgcGF0aFN0ciA9IHRoaXMucGFyc2VkUGF0aC5wYXRoLFxuICAgICAgcXVlcnkgPSB0aGlzLnBhcnNlZFBhdGgucXVlcnksXG4gICAgICBoZWFkZXJzID0gdGhpcy5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICBxdWVyeVN0ciA9ICcnLFxuICAgICAgbm9ybWFsaXplUGF0aCA9IHRoaXMuc2VydmljZSAhPT0gJ3MzJyxcbiAgICAgIGRlY29kZVBhdGggPSB0aGlzLnNlcnZpY2UgPT09ICdzMycgfHwgdGhpcy5yZXF1ZXN0LmRvTm90RW5jb2RlUGF0aCxcbiAgICAgIGRlY29kZVNsYXNoZXNJblBhdGggPSB0aGlzLnNlcnZpY2UgPT09ICdzMycsXG4gICAgICBmaXJzdFZhbE9ubHkgPSB0aGlzLnNlcnZpY2UgPT09ICdzMycsXG4gICAgICBib2R5SGFzaFxuXG4gIGlmICh0aGlzLnNlcnZpY2UgPT09ICdzMycgJiYgdGhpcy5yZXF1ZXN0LnNpZ25RdWVyeSkge1xuICAgIGJvZHlIYXNoID0gJ1VOU0lHTkVELVBBWUxPQUQnXG4gIH0gZWxzZSBpZiAodGhpcy5pc0NvZGVDb21taXRHaXQpIHtcbiAgICBib2R5SGFzaCA9ICcnXG4gIH0gZWxzZSB7XG4gICAgYm9keUhhc2ggPSBoZWFkZXJzWydYLUFtei1Db250ZW50LVNoYTI1NiddIHx8IGhlYWRlcnNbJ3gtYW16LWNvbnRlbnQtc2hhMjU2J10gfHxcbiAgICAgIGhhc2godGhpcy5yZXF1ZXN0LmJvZHkgfHwgJycsICdoZXgnKVxuICB9XG5cbiAgaWYgKHF1ZXJ5KSB7XG4gICAgcXVlcnlTdHIgPSBlbmNvZGVSZmMzOTg2KHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeShPYmplY3Qua2V5cyhxdWVyeSkuc29ydCgpLnJlZHVjZShmdW5jdGlvbihvYmosIGtleSkge1xuICAgICAgaWYgKCFrZXkpIHJldHVybiBvYmpcbiAgICAgIG9ialtrZXldID0gIUFycmF5LmlzQXJyYXkocXVlcnlba2V5XSkgPyBxdWVyeVtrZXldIDpcbiAgICAgICAgKGZpcnN0VmFsT25seSA/IHF1ZXJ5W2tleV1bMF0gOiBxdWVyeVtrZXldLnNsaWNlKCkuc29ydCgpKVxuICAgICAgcmV0dXJuIG9ialxuICAgIH0sIHt9KSkpXG4gIH1cbiAgaWYgKHBhdGhTdHIgIT09ICcvJykge1xuICAgIGlmIChub3JtYWxpemVQYXRoKSBwYXRoU3RyID0gcGF0aFN0ci5yZXBsYWNlKC9cXC97Mix9L2csICcvJylcbiAgICBwYXRoU3RyID0gcGF0aFN0ci5zcGxpdCgnLycpLnJlZHVjZShmdW5jdGlvbihwYXRoLCBwaWVjZSkge1xuICAgICAgaWYgKG5vcm1hbGl6ZVBhdGggJiYgcGllY2UgPT09ICcuLicpIHtcbiAgICAgICAgcGF0aC5wb3AoKVxuICAgICAgfSBlbHNlIGlmICghbm9ybWFsaXplUGF0aCB8fCBwaWVjZSAhPT0gJy4nKSB7XG4gICAgICAgIGlmIChkZWNvZGVQYXRoKSBwaWVjZSA9IHF1ZXJ5c3RyaW5nLnVuZXNjYXBlKHBpZWNlKVxuICAgICAgICBwYXRoLnB1c2goZW5jb2RlUmZjMzk4NihxdWVyeXN0cmluZy5lc2NhcGUocGllY2UpKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXRoXG4gICAgfSwgW10pLmpvaW4oJy8nKVxuICAgIGlmIChwYXRoU3RyWzBdICE9PSAnLycpIHBhdGhTdHIgPSAnLycgKyBwYXRoU3RyXG4gICAgaWYgKGRlY29kZVNsYXNoZXNJblBhdGgpIHBhdGhTdHIgPSBwYXRoU3RyLnJlcGxhY2UoLyUyRi9nLCAnLycpXG4gIH1cblxuICByZXR1cm4gW1xuICAgIHRoaXMucmVxdWVzdC5tZXRob2QgfHwgJ0dFVCcsXG4gICAgcGF0aFN0cixcbiAgICBxdWVyeVN0cixcbiAgICB0aGlzLmNhbm9uaWNhbEhlYWRlcnMoKSArICdcXG4nLFxuICAgIHRoaXMuc2lnbmVkSGVhZGVycygpLFxuICAgIGJvZHlIYXNoLFxuICBdLmpvaW4oJ1xcbicpXG59XG5cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLmNhbm9uaWNhbEhlYWRlcnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhlYWRlcnMgPSB0aGlzLnJlcXVlc3QuaGVhZGVyc1xuICBmdW5jdGlvbiB0cmltQWxsKGhlYWRlcikge1xuICAgIHJldHVybiBoZWFkZXIudG9TdHJpbmcoKS50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpXG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYS50b0xvd2VyQ2FzZSgpIDwgYi50b0xvd2VyQ2FzZSgpID8gLTEgOiAxIH0pXG4gICAgLm1hcChmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGtleS50b0xvd2VyQ2FzZSgpICsgJzonICsgdHJpbUFsbChoZWFkZXJzW2tleV0pIH0pXG4gICAgLmpvaW4oJ1xcbicpXG59XG5cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLnNpZ25lZEhlYWRlcnMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVxdWVzdC5oZWFkZXJzKVxuICAgIC5tYXAoZnVuY3Rpb24oa2V5KSB7IHJldHVybiBrZXkudG9Mb3dlckNhc2UoKSB9KVxuICAgIC5zb3J0KClcbiAgICAuam9pbignOycpXG59XG5cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLmNyZWRlbnRpYWxTdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFtcbiAgICB0aGlzLmdldERhdGUoKSxcbiAgICB0aGlzLnJlZ2lvbixcbiAgICB0aGlzLnNlcnZpY2UsXG4gICAgJ2F3czRfcmVxdWVzdCcsXG4gIF0uam9pbignLycpXG59XG5cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLmRlZmF1bHRDcmVkZW50aWFscyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZW52ID0gcHJvY2Vzcy5lbnZcbiAgcmV0dXJuIHtcbiAgICBhY2Nlc3NLZXlJZDogZW52LkFXU19BQ0NFU1NfS0VZX0lEIHx8IGVudi5BV1NfQUNDRVNTX0tFWSxcbiAgICBzZWNyZXRBY2Nlc3NLZXk6IGVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVkgfHwgZW52LkFXU19TRUNSRVRfS0VZLFxuICAgIHNlc3Npb25Ub2tlbjogZW52LkFXU19TRVNTSU9OX1RPS0VOLFxuICB9XG59XG5cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLnBhcnNlUGF0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcGF0aCA9IHRoaXMucmVxdWVzdC5wYXRoIHx8ICcvJyxcbiAgICAgIHF1ZXJ5SXggPSBwYXRoLmluZGV4T2YoJz8nKSxcbiAgICAgIHF1ZXJ5ID0gbnVsbFxuXG4gIGlmIChxdWVyeUl4ID49IDApIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHBhdGguc2xpY2UocXVlcnlJeCArIDEpKVxuICAgIHBhdGggPSBwYXRoLnNsaWNlKDAsIHF1ZXJ5SXgpXG4gIH1cblxuICAvLyBTMyBkb2Vzbid0IGFsd2F5cyBlbmNvZGUgY2hhcmFjdGVycyA+IDEyNyBjb3JyZWN0bHkgYW5kXG4gIC8vIGFsbCBzZXJ2aWNlcyBkb24ndCBlbmNvZGUgY2hhcmFjdGVycyA+IDI1NSBjb3JyZWN0bHlcbiAgLy8gU28gaWYgdGhlcmUgYXJlIG5vbi1yZXNlcnZlZCBjaGFycyAoYW5kIGl0J3Mgbm90IGFscmVhZHkgYWxsICUgZW5jb2RlZCksIGp1c3QgZW5jb2RlIHRoZW0gYWxsXG4gIGlmICgvW14wLTlBLVphLXohJygpKlxcLS5ffiUvXS8udGVzdChwYXRoKSkge1xuICAgIHBhdGggPSBwYXRoLnNwbGl0KCcvJykubWFwKGZ1bmN0aW9uKHBpZWNlKSB7XG4gICAgICByZXR1cm4gcXVlcnlzdHJpbmcuZXNjYXBlKHF1ZXJ5c3RyaW5nLnVuZXNjYXBlKHBpZWNlKSlcbiAgICB9KS5qb2luKCcvJylcbiAgfVxuXG4gIHRoaXMucGFyc2VkUGF0aCA9IHtcbiAgICBwYXRoOiBwYXRoLFxuICAgIHF1ZXJ5OiBxdWVyeSxcbiAgfVxufVxuXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5mb3JtYXRQYXRoID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwYXRoID0gdGhpcy5wYXJzZWRQYXRoLnBhdGgsXG4gICAgICBxdWVyeSA9IHRoaXMucGFyc2VkUGF0aC5xdWVyeVxuXG4gIGlmICghcXVlcnkpIHJldHVybiBwYXRoXG5cbiAgLy8gU2VydmljZXMgZG9uJ3Qgc3VwcG9ydCBlbXB0eSBxdWVyeSBzdHJpbmcga2V5c1xuICBpZiAocXVlcnlbJyddICE9IG51bGwpIGRlbGV0ZSBxdWVyeVsnJ11cblxuICByZXR1cm4gcGF0aCArICc/JyArIGVuY29kZVJmYzM5ODYocXVlcnlzdHJpbmcuc3RyaW5naWZ5KHF1ZXJ5KSlcbn1cblxuYXdzNC5SZXF1ZXN0U2lnbmVyID0gUmVxdWVzdFNpZ25lclxuXG5hd3M0LnNpZ24gPSBmdW5jdGlvbihyZXF1ZXN0LCBjcmVkZW50aWFscykge1xuICByZXR1cm4gbmV3IFJlcXVlc3RTaWduZXIocmVxdWVzdCwgY3JlZGVudGlhbHMpLnNpZ24oKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzaXplKSB7XG4gIHJldHVybiBuZXcgTHJ1Q2FjaGUoc2l6ZSlcbn1cblxuZnVuY3Rpb24gTHJ1Q2FjaGUoc2l6ZSkge1xuICB0aGlzLmNhcGFjaXR5ID0gc2l6ZSB8IDBcbiAgdGhpcy5tYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gIHRoaXMubGlzdCA9IG5ldyBEb3VibHlMaW5rZWRMaXN0KClcbn1cblxuTHJ1Q2FjaGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKGtleSkge1xuICB2YXIgbm9kZSA9IHRoaXMubWFwW2tleV1cbiAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZFxuICB0aGlzLnVzZWQobm9kZSlcbiAgcmV0dXJuIG5vZGUudmFsXG59XG5cbkxydUNhY2hlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihrZXksIHZhbCkge1xuICB2YXIgbm9kZSA9IHRoaXMubWFwW2tleV1cbiAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgIG5vZGUudmFsID0gdmFsXG4gIH0gZWxzZSB7XG4gICAgaWYgKCF0aGlzLmNhcGFjaXR5KSB0aGlzLnBydW5lKClcbiAgICBpZiAoIXRoaXMuY2FwYWNpdHkpIHJldHVybiBmYWxzZVxuICAgIG5vZGUgPSBuZXcgRG91Ymx5TGlua2VkTm9kZShrZXksIHZhbClcbiAgICB0aGlzLm1hcFtrZXldID0gbm9kZVxuICAgIHRoaXMuY2FwYWNpdHktLVxuICB9XG4gIHRoaXMudXNlZChub2RlKVxuICByZXR1cm4gdHJ1ZVxufVxuXG5McnVDYWNoZS5wcm90b3R5cGUudXNlZCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5saXN0Lm1vdmVUb0Zyb250KG5vZGUpXG59XG5cbkxydUNhY2hlLnByb3RvdHlwZS5wcnVuZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZSA9IHRoaXMubGlzdC5wb3AoKVxuICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vZGUua2V5XVxuICAgIHRoaXMuY2FwYWNpdHkrK1xuICB9XG59XG5cblxuZnVuY3Rpb24gRG91Ymx5TGlua2VkTGlzdCgpIHtcbiAgdGhpcy5maXJzdE5vZGUgPSBudWxsXG4gIHRoaXMubGFzdE5vZGUgPSBudWxsXG59XG5cbkRvdWJseUxpbmtlZExpc3QucHJvdG90eXBlLm1vdmVUb0Zyb250ID0gZnVuY3Rpb24obm9kZSkge1xuICBpZiAodGhpcy5maXJzdE5vZGUgPT0gbm9kZSkgcmV0dXJuXG5cbiAgdGhpcy5yZW1vdmUobm9kZSlcblxuICBpZiAodGhpcy5maXJzdE5vZGUgPT0gbnVsbCkge1xuICAgIHRoaXMuZmlyc3ROb2RlID0gbm9kZVxuICAgIHRoaXMubGFzdE5vZGUgPSBub2RlXG4gICAgbm9kZS5wcmV2ID0gbnVsbFxuICAgIG5vZGUubmV4dCA9IG51bGxcbiAgfSBlbHNlIHtcbiAgICBub2RlLnByZXYgPSBudWxsXG4gICAgbm9kZS5uZXh0ID0gdGhpcy5maXJzdE5vZGVcbiAgICBub2RlLm5leHQucHJldiA9IG5vZGVcbiAgICB0aGlzLmZpcnN0Tm9kZSA9IG5vZGVcbiAgfVxufVxuXG5Eb3VibHlMaW5rZWRMaXN0LnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGxhc3ROb2RlID0gdGhpcy5sYXN0Tm9kZVxuICBpZiAobGFzdE5vZGUgIT0gbnVsbCkge1xuICAgIHRoaXMucmVtb3ZlKGxhc3ROb2RlKVxuICB9XG4gIHJldHVybiBsYXN0Tm9kZVxufVxuXG5Eb3VibHlMaW5rZWRMaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihub2RlKSB7XG4gIGlmICh0aGlzLmZpcnN0Tm9kZSA9PSBub2RlKSB7XG4gICAgdGhpcy5maXJzdE5vZGUgPSBub2RlLm5leHRcbiAgfSBlbHNlIGlmIChub2RlLnByZXYgIT0gbnVsbCkge1xuICAgIG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0XG4gIH1cbiAgaWYgKHRoaXMubGFzdE5vZGUgPT0gbm9kZSkge1xuICAgIHRoaXMubGFzdE5vZGUgPSBub2RlLnByZXZcbiAgfSBlbHNlIGlmIChub2RlLm5leHQgIT0gbnVsbCkge1xuICAgIG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBEb3VibHlMaW5rZWROb2RlKGtleSwgdmFsKSB7XG4gIHRoaXMua2V5ID0ga2V5XG4gIHRoaXMudmFsID0gdmFsXG4gIHRoaXMucHJldiA9IG51bGxcbiAgdGhpcy5uZXh0ID0gbnVsbFxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gcGxhY2VIb2xkZXJzQ291bnQgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gdGhlIG51bWJlciBvZiBlcXVhbCBzaWducyAocGxhY2UgaG9sZGVycylcbiAgLy8gaWYgdGhlcmUgYXJlIHR3byBwbGFjZWhvbGRlcnMsIHRoYW4gdGhlIHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBpdFxuICAvLyByZXByZXNlbnQgb25lIGJ5dGVcbiAgLy8gaWYgdGhlcmUgaXMgb25seSBvbmUsIHRoZW4gdGhlIHRocmVlIGNoYXJhY3RlcnMgYmVmb3JlIGl0IHJlcHJlc2VudCAyIGJ5dGVzXG4gIC8vIHRoaXMgaXMganVzdCBhIGNoZWFwIGhhY2sgdG8gbm90IGRvIGluZGV4T2YgdHdpY2VcbiAgcmV0dXJuIGI2NFtsZW4gLSAyXSA9PT0gJz0nID8gMiA6IGI2NFtsZW4gLSAxXSA9PT0gJz0nID8gMSA6IDBcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIC8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuICByZXR1cm4gYjY0Lmxlbmd0aCAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzQ291bnQoYjY0KVxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciBpLCBqLCBsLCB0bXAsIHBsYWNlSG9sZGVycywgYXJyXG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG4gIHBsYWNlSG9sZGVycyA9IHBsYWNlSG9sZGVyc0NvdW50KGI2NClcblxuICBhcnIgPSBuZXcgQXJyKGxlbiAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzKVxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgbCA9IHBsYWNlSG9sZGVycyA+IDAgPyBsZW4gLSA0IDogbGVuXG5cbiAgdmFyIEwgPSAwXG5cbiAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsOyBpICs9IDQsIGogKz0gMykge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfCByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltMKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVycyA9PT0gMikge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW0wrK10gPSB0bXAgJiAweEZGXG4gIH0gZWxzZSBpZiAocGxhY2VIb2xkZXJzID09PSAxKSB7XG4gICAgdG1wID0gKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW0wrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICsgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICsgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gKyBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgb3V0cHV0ID0gJydcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDJdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz09J1xuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyAodWludDhbbGVuIC0gMV0pXG4gICAgb3V0cHV0ICs9IGxvb2t1cFt0bXAgPj4gMTBdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXVxuICAgIG91dHB1dCArPSAnPSdcbiAgfVxuXG4gIHBhcnRzLnB1c2gob3V0cHV0KVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3J5cHRvX2hhc2hfc2hhNTEyID0gcmVxdWlyZSgndHdlZXRuYWNsJykubG93bGV2ZWwuY3J5cHRvX2hhc2g7XG5cbi8qXG4gKiBUaGlzIGZpbGUgaXMgYSAxOjEgcG9ydCBmcm9tIHRoZSBPcGVuQlNEIGJsb3dmaXNoLmMgYW5kIGJjcnlwdF9wYmtkZi5jLiBBcyBhXG4gKiByZXN1bHQsIGl0IHJldGFpbnMgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBhbmQgbGljZW5zZS4gVGhlIHR3byBmaWxlcyBhcmVcbiAqIHVuZGVyIHNsaWdodGx5IGRpZmZlcmVudCAoYnV0IGNvbXBhdGlibGUpIGxpY2Vuc2VzLCBhbmQgYXJlIGhlcmUgY29tYmluZWQgaW5cbiAqIG9uZSBmaWxlLlxuICpcbiAqIENyZWRpdCBmb3IgdGhlIGFjdHVhbCBwb3J0aW5nIHdvcmsgZ29lcyB0bzpcbiAqICBEZXZpIE1hbmRpcmkgPG1lQGRldmkud2ViLmlkPlxuICovXG5cbi8qXG4gKiBUaGUgQmxvd2Zpc2ggcG9ydGlvbnMgYXJlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZTpcbiAqXG4gKiBCbG93ZmlzaCBibG9jayBjaXBoZXIgZm9yIE9wZW5CU0RcbiAqIENvcHlyaWdodCAxOTk3IE5pZWxzIFByb3ZvcyA8cHJvdm9zQHBoeXNuZXQudW5pLWhhbWJ1cmcuZGU+XG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEltcGxlbWVudGF0aW9uIGFkdmljZSBieSBEYXZpZCBNYXppZXJlcyA8ZG1AbGNzLm1pdC5lZHU+LlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zXG4gKiBhcmUgbWV0OlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzXG4gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUlxuICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFU1xuICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC5cbiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCxcbiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVFxuICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuLypcbiAqIFRoZSBiY3J5cHRfcGJrZGYgcG9ydGlvbnMgYXJlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZTpcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMgVGVkIFVuYW5nc3QgPHRlZHVAb3BlbmJzZC5vcmc+XG4gKlxuICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG4gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlXG4gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTXG4gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxuICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFU1xuICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOXG4gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRlxuICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbiAqL1xuXG4vKlxuICogUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIChKYXZhc2NyaXB0LXNwZWNpZmljKTpcbiAqXG4gKiBDb3B5cmlnaHQgMjAxNiwgSm95ZW50IEluY1xuICogQXV0aG9yOiBBbGV4IFdpbHNvbiA8YWxleC53aWxzb25Aam95ZW50LmNvbT5cbiAqXG4gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbiAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmVcbiAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVNcbiAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0ZcbiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SXG4gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTXG4gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU5cbiAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GXG4gKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuICovXG5cbi8vIFBvcnRlZCBmcm9tIE9wZW5CU0QgYmNyeXB0X3Bia2RmLmMgdjEuOVxuXG52YXIgQkxGX0ogPSAwO1xuXG52YXIgQmxvd2Zpc2ggPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5TID0gW1xuICAgIG5ldyBVaW50MzJBcnJheShbXG4gICAgICAweGQxMzEwYmE2LCAweDk4ZGZiNWFjLCAweDJmZmQ3MmRiLCAweGQwMWFkZmI3LFxuICAgICAgMHhiOGUxYWZlZCwgMHg2YTI2N2U5NiwgMHhiYTdjOTA0NSwgMHhmMTJjN2Y5OSxcbiAgICAgIDB4MjRhMTk5NDcsIDB4YjM5MTZjZjcsIDB4MDgwMWYyZTIsIDB4ODU4ZWZjMTYsXG4gICAgICAweDYzNjkyMGQ4LCAweDcxNTc0ZTY5LCAweGE0NThmZWEzLCAweGY0OTMzZDdlLFxuICAgICAgMHgwZDk1NzQ4ZiwgMHg3MjhlYjY1OCwgMHg3MThiY2Q1OCwgMHg4MjE1NGFlZSxcbiAgICAgIDB4N2I1NGE0MWQsIDB4YzI1YTU5YjUsIDB4OWMzMGQ1MzksIDB4MmFmMjYwMTMsXG4gICAgICAweGM1ZDFiMDIzLCAweDI4NjA4NWYwLCAweGNhNDE3OTE4LCAweGI4ZGIzOGVmLFxuICAgICAgMHg4ZTc5ZGNiMCwgMHg2MDNhMTgwZSwgMHg2YzllMGU4YiwgMHhiMDFlOGEzZSxcbiAgICAgIDB4ZDcxNTc3YzEsIDB4YmQzMTRiMjcsIDB4NzhhZjJmZGEsIDB4NTU2MDVjNjAsXG4gICAgICAweGU2NTUyNWYzLCAweGFhNTVhYjk0LCAweDU3NDg5ODYyLCAweDYzZTgxNDQwLFxuICAgICAgMHg1NWNhMzk2YSwgMHgyYWFiMTBiNiwgMHhiNGNjNWMzNCwgMHgxMTQxZThjZSxcbiAgICAgIDB4YTE1NDg2YWYsIDB4N2M3MmU5OTMsIDB4YjNlZTE0MTEsIDB4NjM2ZmJjMmEsXG4gICAgICAweDJiYTljNTVkLCAweDc0MTgzMWY2LCAweGNlNWMzZTE2LCAweDliODc5MzFlLFxuICAgICAgMHhhZmQ2YmEzMywgMHg2YzI0Y2Y1YywgMHg3YTMyNTM4MSwgMHgyODk1ODY3NyxcbiAgICAgIDB4M2I4ZjQ4OTgsIDB4NmI0YmI5YWYsIDB4YzRiZmU4MWIsIDB4NjYyODIxOTMsXG4gICAgICAweDYxZDgwOWNjLCAweGZiMjFhOTkxLCAweDQ4N2NhYzYwLCAweDVkZWM4MDMyLFxuICAgICAgMHhlZjg0NWQ1ZCwgMHhlOTg1NzViMSwgMHhkYzI2MjMwMiwgMHhlYjY1MWI4OCxcbiAgICAgIDB4MjM4OTNlODEsIDB4ZDM5NmFjYzUsIDB4MGY2ZDZmZjMsIDB4ODNmNDQyMzksXG4gICAgICAweDJlMGI0NDgyLCAweGE0ODQyMDA0LCAweDY5YzhmMDRhLCAweDllMWY5YjVlLFxuICAgICAgMHgyMWM2Njg0MiwgMHhmNmU5NmM5YSwgMHg2NzBjOWM2MSwgMHhhYmQzODhmMCxcbiAgICAgIDB4NmE1MWEwZDIsIDB4ZDg1NDJmNjgsIDB4OTYwZmE3MjgsIDB4YWI1MTMzYTMsXG4gICAgICAweDZlZWYwYjZjLCAweDEzN2EzYmU0LCAweGJhM2JmMDUwLCAweDdlZmIyYTk4LFxuICAgICAgMHhhMWYxNjUxZCwgMHgzOWFmMDE3NiwgMHg2NmNhNTkzZSwgMHg4MjQzMGU4OCxcbiAgICAgIDB4OGNlZTg2MTksIDB4NDU2ZjlmYjQsIDB4N2Q4NGE1YzMsIDB4M2I4YjVlYmUsXG4gICAgICAweGUwNmY3NWQ4LCAweDg1YzEyMDczLCAweDQwMWE0NDlmLCAweDU2YzE2YWE2LFxuICAgICAgMHg0ZWQzYWE2MiwgMHgzNjNmNzcwNiwgMHgxYmZlZGY3MiwgMHg0MjliMDIzZCxcbiAgICAgIDB4MzdkMGQ3MjQsIDB4ZDAwYTEyNDgsIDB4ZGIwZmVhZDMsIDB4NDlmMWMwOWIsXG4gICAgICAweDA3NTM3MmM5LCAweDgwOTkxYjdiLCAweDI1ZDQ3OWQ4LCAweGY2ZThkZWY3LFxuICAgICAgMHhlM2ZlNTAxYSwgMHhiNjc5NGMzYiwgMHg5NzZjZTBiZCwgMHgwNGMwMDZiYSxcbiAgICAgIDB4YzFhOTRmYjYsIDB4NDA5ZjYwYzQsIDB4NWU1YzllYzIsIDB4MTk2YTI0NjMsXG4gICAgICAweDY4ZmI2ZmFmLCAweDNlNmM1M2I1LCAweDEzMzliMmViLCAweDNiNTJlYzZmLFxuICAgICAgMHg2ZGZjNTExZiwgMHg5YjMwOTUyYywgMHhjYzgxNDU0NCwgMHhhZjVlYmQwOSxcbiAgICAgIDB4YmVlM2QwMDQsIDB4ZGUzMzRhZmQsIDB4NjYwZjI4MDcsIDB4MTkyZTRiYjMsXG4gICAgICAweGMwY2JhODU3LCAweDQ1Yzg3NDBmLCAweGQyMGI1ZjM5LCAweGI5ZDNmYmRiLFxuICAgICAgMHg1NTc5YzBiZCwgMHgxYTYwMzIwYSwgMHhkNmExMDBjNiwgMHg0MDJjNzI3OSxcbiAgICAgIDB4Njc5ZjI1ZmUsIDB4ZmIxZmEzY2MsIDB4OGVhNWU5ZjgsIDB4ZGIzMjIyZjgsXG4gICAgICAweDNjNzUxNmRmLCAweGZkNjE2YjE1LCAweDJmNTAxZWM4LCAweGFkMDU1MmFiLFxuICAgICAgMHgzMjNkYjVmYSwgMHhmZDIzODc2MCwgMHg1MzMxN2I0OCwgMHgzZTAwZGY4MixcbiAgICAgIDB4OWU1YzU3YmIsIDB4Y2E2ZjhjYTAsIDB4MWE4NzU2MmUsIDB4ZGYxNzY5ZGIsXG4gICAgICAweGQ1NDJhOGY2LCAweDI4N2VmZmMzLCAweGFjNjczMmM2LCAweDhjNGY1NTczLFxuICAgICAgMHg2OTViMjdiMCwgMHhiYmNhNThjOCwgMHhlMWZmYTM1ZCwgMHhiOGYwMTFhMCxcbiAgICAgIDB4MTBmYTNkOTgsIDB4ZmQyMTgzYjgsIDB4NGFmY2I1NmMsIDB4MmRkMWQzNWIsXG4gICAgICAweDlhNTNlNDc5LCAweGI2Zjg0NTY1LCAweGQyOGU0OWJjLCAweDRiZmI5NzkwLFxuICAgICAgMHhlMWRkZjJkYSwgMHhhNGNiN2UzMywgMHg2MmZiMTM0MSwgMHhjZWU0YzZlOCxcbiAgICAgIDB4ZWYyMGNhZGEsIDB4MzY3NzRjMDEsIDB4ZDA3ZTllZmUsIDB4MmJmMTFmYjQsXG4gICAgICAweDk1ZGJkYTRkLCAweGFlOTA5MTk4LCAweGVhYWQ4ZTcxLCAweDZiOTNkNWEwLFxuICAgICAgMHhkMDhlZDFkMCwgMHhhZmM3MjVlMCwgMHg4ZTNjNWIyZiwgMHg4ZTc1OTRiNyxcbiAgICAgIDB4OGZmNmUyZmIsIDB4ZjIxMjJiNjQsIDB4ODg4OGI4MTIsIDB4OTAwZGYwMWMsXG4gICAgICAweDRmYWQ1ZWEwLCAweDY4OGZjMzFjLCAweGQxY2ZmMTkxLCAweGIzYThjMWFkLFxuICAgICAgMHgyZjJmMjIxOCwgMHhiZTBlMTc3NywgMHhlYTc1MmRmZSwgMHg4YjAyMWZhMSxcbiAgICAgIDB4ZTVhMGNjMGYsIDB4YjU2Zjc0ZTgsIDB4MThhY2YzZDYsIDB4Y2U4OWUyOTksXG4gICAgICAweGI0YTg0ZmUwLCAweGZkMTNlMGI3LCAweDdjYzQzYjgxLCAweGQyYWRhOGQ5LFxuICAgICAgMHgxNjVmYTI2NiwgMHg4MDk1NzcwNSwgMHg5M2NjNzMxNCwgMHgyMTFhMTQ3NyxcbiAgICAgIDB4ZTZhZDIwNjUsIDB4NzdiNWZhODYsIDB4Yzc1NDQyZjUsIDB4ZmI5ZDM1Y2YsXG4gICAgICAweGViY2RhZjBjLCAweDdiM2U4OWEwLCAweGQ2NDExYmQzLCAweGFlMWU3ZTQ5LFxuICAgICAgMHgwMDI1MGUyZCwgMHgyMDcxYjM1ZSwgMHgyMjY4MDBiYiwgMHg1N2I4ZTBhZixcbiAgICAgIDB4MjQ2NDM2OWIsIDB4ZjAwOWI5MWUsIDB4NTU2MzkxMWQsIDB4NTlkZmE2YWEsXG4gICAgICAweDc4YzE0Mzg5LCAweGQ5NWE1MzdmLCAweDIwN2Q1YmEyLCAweDAyZTViOWM1LFxuICAgICAgMHg4MzI2MDM3NiwgMHg2Mjk1Y2ZhOSwgMHgxMWM4MTk2OCwgMHg0ZTczNGE0MSxcbiAgICAgIDB4YjM0NzJkY2EsIDB4N2IxNGE5NGEsIDB4MWI1MTAwNTIsIDB4OWE1MzI5MTUsXG4gICAgICAweGQ2MGY1NzNmLCAweGJjOWJjNmU0LCAweDJiNjBhNDc2LCAweDgxZTY3NDAwLFxuICAgICAgMHgwOGJhNmZiNSwgMHg1NzFiZTkxZiwgMHhmMjk2ZWM2YiwgMHgyYTBkZDkxNSxcbiAgICAgIDB4YjY2MzY1MjEsIDB4ZTdiOWY5YjYsIDB4ZmYzNDA1MmUsIDB4YzU4NTU2NjQsXG4gICAgICAweDUzYjAyZDVkLCAweGE5OWY4ZmExLCAweDA4YmE0Nzk5LCAweDZlODUwNzZhXSksXG4gICAgbmV3IFVpbnQzMkFycmF5KFtcbiAgICAgIDB4NGI3YTcwZTksIDB4YjViMzI5NDQsIDB4ZGI3NTA5MmUsIDB4YzQxOTI2MjMsXG4gICAgICAweGFkNmVhNmIwLCAweDQ5YTdkZjdkLCAweDljZWU2MGI4LCAweDhmZWRiMjY2LFxuICAgICAgMHhlY2FhOGM3MSwgMHg2OTlhMTdmZiwgMHg1NjY0NTI2YywgMHhjMmIxOWVlMSxcbiAgICAgIDB4MTkzNjAyYTUsIDB4NzUwOTRjMjksIDB4YTA1OTEzNDAsIDB4ZTQxODNhM2UsXG4gICAgICAweDNmNTQ5ODlhLCAweDViNDI5ZDY1LCAweDZiOGZlNGQ2LCAweDk5ZjczZmQ2LFxuICAgICAgMHhhMWQyOWMwNywgMHhlZmU4MzBmNSwgMHg0ZDJkMzhlNiwgMHhmMDI1NWRjMSxcbiAgICAgIDB4NGNkZDIwODYsIDB4ODQ3MGViMjYsIDB4NjM4MmU5YzYsIDB4MDIxZWNjNWUsXG4gICAgICAweDA5Njg2YjNmLCAweDNlYmFlZmM5LCAweDNjOTcxODE0LCAweDZiNmE3MGExLFxuICAgICAgMHg2ODdmMzU4NCwgMHg1MmEwZTI4NiwgMHhiNzljNTMwNSwgMHhhYTUwMDczNyxcbiAgICAgIDB4M2UwNzg0MWMsIDB4N2ZkZWFlNWMsIDB4OGU3ZDQ0ZWMsIDB4NTcxNmYyYjgsXG4gICAgICAweGIwM2FkYTM3LCAweGYwNTAwYzBkLCAweGYwMWMxZjA0LCAweDAyMDBiM2ZmLFxuICAgICAgMHhhZTBjZjUxYSwgMHgzY2I1NzRiMiwgMHgyNTgzN2E1OCwgMHhkYzA5MjFiZCxcbiAgICAgIDB4ZDE5MTEzZjksIDB4N2NhOTJmZjYsIDB4OTQzMjQ3NzMsIDB4MjJmNTQ3MDEsXG4gICAgICAweDNhZTVlNTgxLCAweDM3YzJkYWRjLCAweGM4YjU3NjM0LCAweDlhZjNkZGE3LFxuICAgICAgMHhhOTQ0NjE0NiwgMHgwZmQwMDMwZSwgMHhlY2M4YzczZSwgMHhhNDc1MWU0MSxcbiAgICAgIDB4ZTIzOGNkOTksIDB4M2JlYTBlMmYsIDB4MzI4MGJiYTEsIDB4MTgzZWIzMzEsXG4gICAgICAweDRlNTQ4YjM4LCAweDRmNmRiOTA4LCAweDZmNDIwZDAzLCAweGY2MGEwNGJmLFxuICAgICAgMHgyY2I4MTI5MCwgMHgyNDk3N2M3OSwgMHg1Njc5YjA3MiwgMHhiY2FmODlhZixcbiAgICAgIDB4ZGU5YTc3MWYsIDB4ZDk5MzA4MTAsIDB4YjM4YmFlMTIsIDB4ZGNjZjNmMmUsXG4gICAgICAweDU1MTI3MjFmLCAweDJlNmI3MTI0LCAweDUwMWFkZGU2LCAweDlmODRjZDg3LFxuICAgICAgMHg3YTU4NDcxOCwgMHg3NDA4ZGExNywgMHhiYzlmOWFiYywgMHhlOTRiN2Q4YyxcbiAgICAgIDB4ZWM3YWVjM2EsIDB4ZGI4NTFkZmEsIDB4NjMwOTQzNjYsIDB4YzQ2NGMzZDIsXG4gICAgICAweGVmMWMxODQ3LCAweDMyMTVkOTA4LCAweGRkNDMzYjM3LCAweDI0YzJiYTE2LFxuICAgICAgMHgxMmExNGQ0MywgMHgyYTY1YzQ1MSwgMHg1MDk0MDAwMiwgMHgxMzNhZTRkZCxcbiAgICAgIDB4NzFkZmY4OWUsIDB4MTAzMTRlNTUsIDB4ODFhYzc3ZDYsIDB4NWYxMTE5OWIsXG4gICAgICAweDA0MzU1NmYxLCAweGQ3YTNjNzZiLCAweDNjMTExODNiLCAweDU5MjRhNTA5LFxuICAgICAgMHhmMjhmZTZlZCwgMHg5N2YxZmJmYSwgMHg5ZWJhYmYyYywgMHgxZTE1M2M2ZSxcbiAgICAgIDB4ODZlMzQ1NzAsIDB4ZWFlOTZmYjEsIDB4ODYwZTVlMGEsIDB4NWEzZTJhYjMsXG4gICAgICAweDc3MWZlNzFjLCAweDRlM2QwNmZhLCAweDI5NjVkY2I5LCAweDk5ZTcxZDBmLFxuICAgICAgMHg4MDNlODlkNiwgMHg1MjY2YzgyNSwgMHgyZTRjYzk3OCwgMHg5YzEwYjM2YSxcbiAgICAgIDB4YzYxNTBlYmEsIDB4OTRlMmVhNzgsIDB4YTVmYzNjNTMsIDB4MWUwYTJkZjQsXG4gICAgICAweGYyZjc0ZWE3LCAweDM2MWQyYjNkLCAweDE5MzkyNjBmLCAweDE5YzI3OTYwLFxuICAgICAgMHg1MjIzYTcwOCwgMHhmNzEzMTJiNiwgMHhlYmFkZmU2ZSwgMHhlYWMzMWY2NixcbiAgICAgIDB4ZTNiYzQ1OTUsIDB4YTY3YmM4ODMsIDB4YjE3ZjM3ZDEsIDB4MDE4Y2ZmMjgsXG4gICAgICAweGMzMzJkZGVmLCAweGJlNmM1YWE1LCAweDY1NTgyMTg1LCAweDY4YWI5ODAyLFxuICAgICAgMHhlZWNlYTUwZiwgMHhkYjJmOTUzYiwgMHgyYWVmN2RhZCwgMHg1YjZlMmY4NCxcbiAgICAgIDB4MTUyMWI2MjgsIDB4MjkwNzYxNzAsIDB4ZWNkZDQ3NzUsIDB4NjE5ZjE1MTAsXG4gICAgICAweDEzY2NhODMwLCAweGViNjFiZDk2LCAweDAzMzRmZTFlLCAweGFhMDM2M2NmLFxuICAgICAgMHhiNTczNWM5MCwgMHg0YzcwYTIzOSwgMHhkNTllOWUwYiwgMHhjYmFhZGUxNCxcbiAgICAgIDB4ZWVjYzg2YmMsIDB4NjA2MjJjYTcsIDB4OWNhYjVjYWIsIDB4YjJmMzg0NmUsXG4gICAgICAweDY0OGIxZWFmLCAweDE5YmRmMGNhLCAweGEwMjM2OWI5LCAweDY1NWFiYjUwLFxuICAgICAgMHg0MDY4NWEzMiwgMHgzYzJhYjRiMywgMHgzMTllZTlkNSwgMHhjMDIxYjhmNyxcbiAgICAgIDB4OWI1NDBiMTksIDB4ODc1ZmEwOTksIDB4OTVmNzk5N2UsIDB4NjIzZDdkYTgsXG4gICAgICAweGY4Mzc4ODlhLCAweDk3ZTMyZDc3LCAweDExZWQ5MzVmLCAweDE2NjgxMjgxLFxuICAgICAgMHgwZTM1ODgyOSwgMHhjN2U2MWZkNiwgMHg5NmRlZGZhMSwgMHg3ODU4YmE5OSxcbiAgICAgIDB4NTdmNTg0YTUsIDB4MWIyMjcyNjMsIDB4OWI4M2MzZmYsIDB4MWFjMjQ2OTYsXG4gICAgICAweGNkYjMwYWViLCAweDUzMmUzMDU0LCAweDhmZDk0OGU0LCAweDZkYmMzMTI4LFxuICAgICAgMHg1OGViZjJlZiwgMHgzNGM2ZmZlYSwgMHhmZTI4ZWQ2MSwgMHhlZTdjM2M3MyxcbiAgICAgIDB4NWQ0YTE0ZDksIDB4ZTg2NGI3ZTMsIDB4NDIxMDVkMTQsIDB4MjAzZTEzZTAsXG4gICAgICAweDQ1ZWVlMmI2LCAweGEzYWFhYmVhLCAweGRiNmM0ZjE1LCAweGZhY2I0ZmQwLFxuICAgICAgMHhjNzQyZjQ0MiwgMHhlZjZhYmJiNSwgMHg2NTRmM2IxZCwgMHg0MWNkMjEwNSxcbiAgICAgIDB4ZDgxZTc5OWUsIDB4ODY4NTRkYzcsIDB4ZTQ0YjQ3NmEsIDB4M2Q4MTYyNTAsXG4gICAgICAweGNmNjJhMWYyLCAweDViOGQyNjQ2LCAweGZjODg4M2EwLCAweGMxYzdiNmEzLFxuICAgICAgMHg3ZjE1MjRjMywgMHg2OWNiNzQ5MiwgMHg0Nzg0OGEwYiwgMHg1NjkyYjI4NSxcbiAgICAgIDB4MDk1YmJmMDAsIDB4YWQxOTQ4OWQsIDB4MTQ2MmIxNzQsIDB4MjM4MjBlMDAsXG4gICAgICAweDU4NDI4ZDJhLCAweDBjNTVmNWVhLCAweDFkYWRmNDNlLCAweDIzM2Y3MDYxLFxuICAgICAgMHgzMzcyZjA5MiwgMHg4ZDkzN2U0MSwgMHhkNjVmZWNmMSwgMHg2YzIyM2JkYixcbiAgICAgIDB4N2NkZTM3NTksIDB4Y2JlZTc0NjAsIDB4NDA4NWYyYTcsIDB4Y2U3NzMyNmUsXG4gICAgICAweGE2MDc4MDg0LCAweDE5Zjg1MDllLCAweGU4ZWZkODU1LCAweDYxZDk5NzM1LFxuICAgICAgMHhhOTY5YTdhYSwgMHhjNTBjMDZjMiwgMHg1YTA0YWJmYywgMHg4MDBiY2FkYyxcbiAgICAgIDB4OWU0NDdhMmUsIDB4YzM0NTM0ODQsIDB4ZmRkNTY3MDUsIDB4MGUxZTllYzksXG4gICAgICAweGRiNzNkYmQzLCAweDEwNTU4OGNkLCAweDY3NWZkYTc5LCAweGUzNjc0MzQwLFxuICAgICAgMHhjNWM0MzQ2NSwgMHg3MTNlMzhkOCwgMHgzZDI4Zjg5ZSwgMHhmMTZkZmYyMCxcbiAgICAgIDB4MTUzZTIxZTcsIDB4OGZiMDNkNGEsIDB4ZTZlMzlmMmIsIDB4ZGI4M2FkZjddKSxcbiAgICBuZXcgVWludDMyQXJyYXkoW1xuICAgICAgMHhlOTNkNWE2OCwgMHg5NDgxNDBmNywgMHhmNjRjMjYxYywgMHg5NDY5MjkzNCxcbiAgICAgIDB4NDExNTIwZjcsIDB4NzYwMmQ0ZjcsIDB4YmNmNDZiMmUsIDB4ZDRhMjAwNjgsXG4gICAgICAweGQ0MDgyNDcxLCAweDMzMjBmNDZhLCAweDQzYjdkNGI3LCAweDUwMDA2MWFmLFxuICAgICAgMHgxZTM5ZjYyZSwgMHg5NzI0NDU0NiwgMHgxNDIxNGY3NCwgMHhiZjhiODg0MCxcbiAgICAgIDB4NGQ5NWZjMWQsIDB4OTZiNTkxYWYsIDB4NzBmNGRkZDMsIDB4NjZhMDJmNDUsXG4gICAgICAweGJmYmMwOWVjLCAweDAzYmQ5Nzg1LCAweDdmYWM2ZGQwLCAweDMxY2I4NTA0LFxuICAgICAgMHg5NmViMjdiMywgMHg1NWZkMzk0MSwgMHhkYTI1NDdlNiwgMHhhYmNhMGE5YSxcbiAgICAgIDB4Mjg1MDc4MjUsIDB4NTMwNDI5ZjQsIDB4MGEyYzg2ZGEsIDB4ZTliNjZkZmIsXG4gICAgICAweDY4ZGMxNDYyLCAweGQ3NDg2OTAwLCAweDY4MGVjMGE0LCAweDI3YTE4ZGVlLFxuICAgICAgMHg0ZjNmZmVhMiwgMHhlODg3YWQ4YywgMHhiNThjZTAwNiwgMHg3YWY0ZDZiNixcbiAgICAgIDB4YWFjZTFlN2MsIDB4ZDMzNzVmZWMsIDB4Y2U3OGEzOTksIDB4NDA2YjJhNDIsXG4gICAgICAweDIwZmU5ZTM1LCAweGQ5ZjM4NWI5LCAweGVlMzlkN2FiLCAweDNiMTI0ZThiLFxuICAgICAgMHgxZGM5ZmFmNywgMHg0YjZkMTg1NiwgMHgyNmEzNjYzMSwgMHhlYWUzOTdiMixcbiAgICAgIDB4M2E2ZWZhNzQsIDB4ZGQ1YjQzMzIsIDB4Njg0MWU3ZjcsIDB4Y2E3ODIwZmIsXG4gICAgICAweGZiMGFmNTRlLCAweGQ4ZmViMzk3LCAweDQ1NDA1NmFjLCAweGJhNDg5NTI3LFxuICAgICAgMHg1NTUzM2EzYSwgMHgyMDgzOGQ4NywgMHhmZTZiYTliNywgMHhkMDk2OTU0YixcbiAgICAgIDB4NTVhODY3YmMsIDB4YTExNTlhNTgsIDB4Y2NhOTI5NjMsIDB4OTllMWRiMzMsXG4gICAgICAweGE2MmE0YTU2LCAweDNmMzEyNWY5LCAweDVlZjQ3ZTFjLCAweDkwMjkzMTdjLFxuICAgICAgMHhmZGY4ZTgwMiwgMHgwNDI3MmY3MCwgMHg4MGJiMTU1YywgMHgwNTI4MmNlMyxcbiAgICAgIDB4OTVjMTE1NDgsIDB4ZTRjNjZkMjIsIDB4NDhjMTEzM2YsIDB4YzcwZjg2ZGMsXG4gICAgICAweDA3ZjljOWVlLCAweDQxMDQxZjBmLCAweDQwNDc3OWE0LCAweDVkODg2ZTE3LFxuICAgICAgMHgzMjVmNTFlYiwgMHhkNTliYzBkMSwgMHhmMmJjYzE4ZiwgMHg0MTExMzU2NCxcbiAgICAgIDB4MjU3Yjc4MzQsIDB4NjAyYTljNjAsIDB4ZGZmOGU4YTMsIDB4MWY2MzZjMWIsXG4gICAgICAweDBlMTJiNGMyLCAweDAyZTEzMjllLCAweGFmNjY0ZmQxLCAweGNhZDE4MTE1LFxuICAgICAgMHg2YjIzOTVlMCwgMHgzMzNlOTJlMSwgMHgzYjI0MGI2MiwgMHhlZWJlYjkyMixcbiAgICAgIDB4ODViMmEyMGUsIDB4ZTZiYTBkOTksIDB4ZGU3MjBjOGMsIDB4MmRhMmY3MjgsXG4gICAgICAweGQwMTI3ODQ1LCAweDk1Yjc5NGZkLCAweDY0N2QwODYyLCAweGU3Y2NmNWYwLFxuICAgICAgMHg1NDQ5YTM2ZiwgMHg4NzdkNDhmYSwgMHhjMzlkZmQyNywgMHhmMzNlOGQxZSxcbiAgICAgIDB4MGE0NzYzNDEsIDB4OTkyZWZmNzQsIDB4M2E2ZjZlYWIsIDB4ZjRmOGZkMzcsXG4gICAgICAweGE4MTJkYzYwLCAweGExZWJkZGY4LCAweDk5MWJlMTRjLCAweGRiNmU2YjBkLFxuICAgICAgMHhjNjdiNTUxMCwgMHg2ZDY3MmMzNywgMHgyNzY1ZDQzYiwgMHhkY2QwZTgwNCxcbiAgICAgIDB4ZjEyOTBkYzcsIDB4Y2MwMGZmYTMsIDB4YjUzOTBmOTIsIDB4NjkwZmVkMGIsXG4gICAgICAweDY2N2I5ZmZiLCAweGNlZGI3ZDljLCAweGEwOTFjZjBiLCAweGQ5MTU1ZWEzLFxuICAgICAgMHhiYjEzMmY4OCwgMHg1MTViYWQyNCwgMHg3Yjk0NzliZiwgMHg3NjNiZDZlYixcbiAgICAgIDB4MzczOTJlYjMsIDB4Y2MxMTU5NzksIDB4ODAyNmUyOTcsIDB4ZjQyZTMxMmQsXG4gICAgICAweDY4NDJhZGE3LCAweGM2NmEyYjNiLCAweDEyNzU0Y2NjLCAweDc4MmVmMTFjLFxuICAgICAgMHg2YTEyNDIzNywgMHhiNzkyNTFlNywgMHgwNmExYmJlNiwgMHg0YmZiNjM1MCxcbiAgICAgIDB4MWE2YjEwMTgsIDB4MTFjYWVkZmEsIDB4M2QyNWJkZDgsIDB4ZTJlMWMzYzksXG4gICAgICAweDQ0NDIxNjU5LCAweDBhMTIxMzg2LCAweGQ5MGNlYzZlLCAweGQ1YWJlYTJhLFxuICAgICAgMHg2NGFmNjc0ZSwgMHhkYTg2YTg1ZiwgMHhiZWJmZTk4OCwgMHg2NGU0YzNmZSxcbiAgICAgIDB4OWRiYzgwNTcsIDB4ZjBmN2MwODYsIDB4NjA3ODdiZjgsIDB4NjAwMzYwNGQsXG4gICAgICAweGQxZmQ4MzQ2LCAweGY2MzgxZmIwLCAweDc3NDVhZTA0LCAweGQ3MzZmY2NjLFxuICAgICAgMHg4MzQyNmIzMywgMHhmMDFlYWI3MSwgMHhiMDgwNDE4NywgMHgzYzAwNWU1ZixcbiAgICAgIDB4NzdhMDU3YmUsIDB4YmRlOGFlMjQsIDB4NTU0NjQyOTksIDB4YmY1ODJlNjEsXG4gICAgICAweDRlNThmNDhmLCAweGYyZGRmZGEyLCAweGY0NzRlZjM4LCAweDg3ODliZGMyLFxuICAgICAgMHg1MzY2ZjljMywgMHhjOGIzOGU3NCwgMHhiNDc1ZjI1NSwgMHg0NmZjZDliOSxcbiAgICAgIDB4N2FlYjI2NjEsIDB4OGIxZGRmODQsIDB4ODQ2YTBlNzksIDB4OTE1Zjk1ZTIsXG4gICAgICAweDQ2NmU1OThlLCAweDIwYjQ1NzcwLCAweDhjZDU1NTkxLCAweGM5MDJkZTRjLFxuICAgICAgMHhiOTBiYWNlMSwgMHhiYjgyMDVkMCwgMHgxMWE4NjI0OCwgMHg3NTc0YTk5ZSxcbiAgICAgIDB4Yjc3ZjE5YjYsIDB4ZTBhOWRjMDksIDB4NjYyZDA5YTEsIDB4YzQzMjQ2MzMsXG4gICAgICAweGU4NWExZjAyLCAweDA5ZjBiZThjLCAweDRhOTlhMDI1LCAweDFkNmVmZTEwLFxuICAgICAgMHgxYWI5M2QxZCwgMHgwYmE1YTRkZiwgMHhhMTg2ZjIwZiwgMHgyODY4ZjE2OSxcbiAgICAgIDB4ZGNiN2RhODMsIDB4NTczOTA2ZmUsIDB4YTFlMmNlOWIsIDB4NGZjZDdmNTIsXG4gICAgICAweDUwMTE1ZTAxLCAweGE3MDY4M2ZhLCAweGEwMDJiNWM0LCAweDBkZTZkMDI3LFxuICAgICAgMHg5YWY4OGMyNywgMHg3NzNmODY0MSwgMHhjMzYwNGMwNiwgMHg2MWE4MDZiNSxcbiAgICAgIDB4ZjAxNzdhMjgsIDB4YzBmNTg2ZTAsIDB4MDA2MDU4YWEsIDB4MzBkYzdkNjIsXG4gICAgICAweDExZTY5ZWQ3LCAweDIzMzhlYTYzLCAweDUzYzJkZDk0LCAweGMyYzIxNjM0LFxuICAgICAgMHhiYmNiZWU1NiwgMHg5MGJjYjZkZSwgMHhlYmZjN2RhMSwgMHhjZTU5MWQ3NixcbiAgICAgIDB4NmYwNWU0MDksIDB4NGI3YzAxODgsIDB4Mzk3MjBhM2QsIDB4N2M5MjdjMjQsXG4gICAgICAweDg2ZTM3MjVmLCAweDcyNGQ5ZGI5LCAweDFhYzE1YmI0LCAweGQzOWViOGZjLFxuICAgICAgMHhlZDU0NTU3OCwgMHgwOGZjYTViNSwgMHhkODNkN2NkMywgMHg0ZGFkMGZjNCxcbiAgICAgIDB4MWU1MGVmNWUsIDB4YjE2MWU2ZjgsIDB4YTI4NTE0ZDksIDB4NmM1MTEzM2MsXG4gICAgICAweDZmZDVjN2U3LCAweDU2ZTE0ZWM0LCAweDM2MmFiZmNlLCAweGRkYzZjODM3LFxuICAgICAgMHhkNzlhMzIzNCwgMHg5MjYzODIxMiwgMHg2NzBlZmE4ZSwgMHg0MDYwMDBlMF0pLFxuICAgIG5ldyBVaW50MzJBcnJheShbXG4gICAgICAweDNhMzljZTM3LCAweGQzZmFmNWNmLCAweGFiYzI3NzM3LCAweDVhYzUyZDFiLFxuICAgICAgMHg1Y2IwNjc5ZSwgMHg0ZmEzMzc0MiwgMHhkMzgyMjc0MCwgMHg5OWJjOWJiZSxcbiAgICAgIDB4ZDUxMThlOWQsIDB4YmYwZjczMTUsIDB4ZDYyZDFjN2UsIDB4YzcwMGM0N2IsXG4gICAgICAweGI3OGMxYjZiLCAweDIxYTE5MDQ1LCAweGIyNmViMWJlLCAweDZhMzY2ZWI0LFxuICAgICAgMHg1NzQ4YWIyZiwgMHhiYzk0NmU3OSwgMHhjNmEzNzZkMiwgMHg2NTQ5YzJjOCxcbiAgICAgIDB4NTMwZmY4ZWUsIDB4NDY4ZGRlN2QsIDB4ZDU3MzBhMWQsIDB4NGNkMDRkYzYsXG4gICAgICAweDI5MzliYmRiLCAweGE5YmE0NjUwLCAweGFjOTUyNmU4LCAweGJlNWVlMzA0LFxuICAgICAgMHhhMWZhZDVmMCwgMHg2YTJkNTE5YSwgMHg2M2VmOGNlMiwgMHg5YTg2ZWUyMixcbiAgICAgIDB4YzA4OWMyYjgsIDB4NDMyNDJlZjYsIDB4YTUxZTAzYWEsIDB4OWNmMmQwYTQsXG4gICAgICAweDgzYzA2MWJhLCAweDliZTk2YTRkLCAweDhmZTUxNTUwLCAweGJhNjQ1YmQ2LFxuICAgICAgMHgyODI2YTJmOSwgMHhhNzNhM2FlMSwgMHg0YmE5OTU4NiwgMHhlZjU1NjJlOSxcbiAgICAgIDB4YzcyZmVmZDMsIDB4Zjc1MmY3ZGEsIDB4M2YwNDZmNjksIDB4NzdmYTBhNTksXG4gICAgICAweDgwZTRhOTE1LCAweDg3YjA4NjAxLCAweDliMDllNmFkLCAweDNiM2VlNTkzLFxuICAgICAgMHhlOTkwZmQ1YSwgMHg5ZTM0ZDc5NywgMHgyY2YwYjdkOSwgMHgwMjJiOGI1MSxcbiAgICAgIDB4OTZkNWFjM2EsIDB4MDE3ZGE2N2QsIDB4ZDFjZjNlZDYsIDB4N2M3ZDJkMjgsXG4gICAgICAweDFmOWYyNWNmLCAweGFkZjJiODliLCAweDVhZDZiNDcyLCAweDVhODhmNTRjLFxuICAgICAgMHhlMDI5YWM3MSwgMHhlMDE5YTVlNiwgMHg0N2IwYWNmZCwgMHhlZDkzZmE5YixcbiAgICAgIDB4ZThkM2M0OGQsIDB4MjgzYjU3Y2MsIDB4ZjhkNTY2MjksIDB4NzkxMzJlMjgsXG4gICAgICAweDc4NWYwMTkxLCAweGVkNzU2MDU1LCAweGY3OTYwZTQ0LCAweGUzZDM1ZThjLFxuICAgICAgMHgxNTA1NmRkNCwgMHg4OGY0NmRiYSwgMHgwM2ExNjEyNSwgMHgwNTY0ZjBiZCxcbiAgICAgIDB4YzNlYjllMTUsIDB4M2M5MDU3YTIsIDB4OTcyNzFhZWMsIDB4YTkzYTA3MmEsXG4gICAgICAweDFiM2Y2ZDliLCAweDFlNjMyMWY1LCAweGY1OWM2NmZiLCAweDI2ZGNmMzE5LFxuICAgICAgMHg3NTMzZDkyOCwgMHhiMTU1ZmRmNSwgMHgwMzU2MzQ4MiwgMHg4YWJhM2NiYixcbiAgICAgIDB4Mjg1MTc3MTEsIDB4YzIwYWQ5ZjgsIDB4YWJjYzUxNjcsIDB4Y2NhZDkyNWYsXG4gICAgICAweDRkZTgxNzUxLCAweDM4MzBkYzhlLCAweDM3OWQ1ODYyLCAweDkzMjBmOTkxLFxuICAgICAgMHhlYTdhOTBjMiwgMHhmYjNlN2JjZSwgMHg1MTIxY2U2NCwgMHg3NzRmYmUzMixcbiAgICAgIDB4YThiNmUzN2UsIDB4YzMyOTNkNDYsIDB4NDhkZTUzNjksIDB4NjQxM2U2ODAsXG4gICAgICAweGEyYWUwODEwLCAweGRkNmRiMjI0LCAweDY5ODUyZGZkLCAweDA5MDcyMTY2LFxuICAgICAgMHhiMzlhNDYwYSwgMHg2NDQ1YzBkZCwgMHg1ODZjZGVjZiwgMHgxYzIwYzhhZSxcbiAgICAgIDB4NWJiZWY3ZGQsIDB4MWI1ODhkNDAsIDB4Y2NkMjAxN2YsIDB4NmJiNGUzYmIsXG4gICAgICAweGRkYTI2YTdlLCAweDNhNTlmZjQ1LCAweDNlMzUwYTQ0LCAweGJjYjRjZGQ1LFxuICAgICAgMHg3MmVhY2VhOCwgMHhmYTY0ODRiYiwgMHg4ZDY2MTJhZSwgMHhiZjNjNmY0NyxcbiAgICAgIDB4ZDI5YmU0NjMsIDB4NTQyZjVkOWUsIDB4YWVjMjc3MWIsIDB4ZjY0ZTYzNzAsXG4gICAgICAweDc0MGUwZDhkLCAweGU3NWIxMzU3LCAweGY4NzIxNjcxLCAweGFmNTM3ZDVkLFxuICAgICAgMHg0MDQwY2IwOCwgMHg0ZWI0ZTJjYywgMHgzNGQyNDY2YSwgMHgwMTE1YWY4NCxcbiAgICAgIDB4ZTFiMDA0MjgsIDB4OTU5ODNhMWQsIDB4MDZiODlmYjQsIDB4Y2U2ZWEwNDgsXG4gICAgICAweDZmM2YzYjgyLCAweDM1MjBhYjgyLCAweDAxMWExZDRiLCAweDI3NzIyN2Y4LFxuICAgICAgMHg2MTE1NjBiMSwgMHhlNzkzM2ZkYywgMHhiYjNhNzkyYiwgMHgzNDQ1MjViZCxcbiAgICAgIDB4YTA4ODM5ZTEsIDB4NTFjZTc5NGIsIDB4MmYzMmM5YjcsIDB4YTAxZmJhYzksXG4gICAgICAweGUwMWNjODdlLCAweGJjYzdkMWY2LCAweGNmMDExMWMzLCAweGExZThhYWM3LFxuICAgICAgMHgxYTkwODc0OSwgMHhkNDRmYmQ5YSwgMHhkMGRhZGVjYiwgMHhkNTBhZGEzOCxcbiAgICAgIDB4MDMzOWMzMmEsIDB4YzY5MTM2NjcsIDB4OGRmOTMxN2MsIDB4ZTBiMTJiNGYsXG4gICAgICAweGY3OWU1OWI3LCAweDQzZjViYjNhLCAweGYyZDUxOWZmLCAweDI3ZDk0NTljLFxuICAgICAgMHhiZjk3MjIyYywgMHgxNWU2ZmMyYSwgMHgwZjkxZmM3MSwgMHg5Yjk0MTUyNSxcbiAgICAgIDB4ZmFlNTkzNjEsIDB4Y2ViNjljZWIsIDB4YzJhODY0NTksIDB4MTJiYWE4ZDEsXG4gICAgICAweGI2YzEwNzVlLCAweGUzMDU2YTBjLCAweDEwZDI1MDY1LCAweGNiMDNhNDQyLFxuICAgICAgMHhlMGVjNmUwZSwgMHgxNjk4ZGIzYiwgMHg0Yzk4YTBiZSwgMHgzMjc4ZTk2NCxcbiAgICAgIDB4OWYxZjk1MzIsIDB4ZTBkMzkyZGYsIDB4ZDNhMDM0MmIsIDB4ODk3MWYyMWUsXG4gICAgICAweDFiMGE3NDQxLCAweDRiYTMzNDhjLCAweGM1YmU3MTIwLCAweGMzNzYzMmQ4LFxuICAgICAgMHhkZjM1OWY4ZCwgMHg5Yjk5MmYyZSwgMHhlNjBiNmY0NywgMHgwZmUzZjExZCxcbiAgICAgIDB4ZTU0Y2RhNTQsIDB4MWVkYWQ4OTEsIDB4Y2U2Mjc5Y2YsIDB4Y2QzZTdlNmYsXG4gICAgICAweDE2MThiMTY2LCAweGZkMmMxZDA1LCAweDg0OGZkMmM1LCAweGY2ZmIyMjk5LFxuICAgICAgMHhmNTIzZjM1NywgMHhhNjMyNzYyMywgMHg5M2E4MzUzMSwgMHg1NmNjY2QwMixcbiAgICAgIDB4YWNmMDgxNjIsIDB4NWE3NWViYjUsIDB4NmUxNjM2OTcsIDB4ODhkMjczY2MsXG4gICAgICAweGRlOTY2MjkyLCAweDgxYjk0OWQwLCAweDRjNTA5MDFiLCAweDcxYzY1NjE0LFxuICAgICAgMHhlNmM2YzdiZCwgMHgzMjdhMTQwYSwgMHg0NWUxZDAwNiwgMHhjM2YyN2I5YSxcbiAgICAgIDB4YzlhYTUzZmQsIDB4NjJhODBmMDAsIDB4YmIyNWJmZTIsIDB4MzViZGQyZjYsXG4gICAgICAweDcxMTI2OTA1LCAweGIyMDQwMjIyLCAweGI2Y2JjZjdjLCAweGNkNzY5YzJiLFxuICAgICAgMHg1MzExM2VjMCwgMHgxNjQwZTNkMywgMHgzOGFiYmQ2MCwgMHgyNTQ3YWRmMCxcbiAgICAgIDB4YmEzODIwOWMsIDB4Zjc0NmNlNzYsIDB4NzdhZmExYzUsIDB4MjA3NTYwNjAsXG4gICAgICAweDg1Y2JmZTRlLCAweDhhZTg4ZGQ4LCAweDdhYWFmOWIwLCAweDRjZjlhYTdlLFxuICAgICAgMHgxOTQ4YzI1YywgMHgwMmZiOGE4YywgMHgwMWMzNmFlNCwgMHhkNmViZTFmOSxcbiAgICAgIDB4OTBkNGY4NjksIDB4YTY1Y2RlYTAsIDB4M2YwOTI1MmQsIDB4YzIwOGU2OWYsXG4gICAgICAweGI3NGU2MTMyLCAweGNlNzdlMjViLCAweDU3OGZkZmUzLCAweDNhYzM3MmU2XSlcbiAgICBdO1xuICB0aGlzLlAgPSBuZXcgVWludDMyQXJyYXkoW1xuICAgIDB4MjQzZjZhODgsIDB4ODVhMzA4ZDMsIDB4MTMxOThhMmUsIDB4MDM3MDczNDQsXG4gICAgMHhhNDA5MzgyMiwgMHgyOTlmMzFkMCwgMHgwODJlZmE5OCwgMHhlYzRlNmM4OSxcbiAgICAweDQ1MjgyMWU2LCAweDM4ZDAxMzc3LCAweGJlNTQ2NmNmLCAweDM0ZTkwYzZjLFxuICAgIDB4YzBhYzI5YjcsIDB4Yzk3YzUwZGQsIDB4M2Y4NGQ1YjUsIDB4YjU0NzA5MTcsXG4gICAgMHg5MjE2ZDVkOSwgMHg4OTc5ZmIxYl0pO1xufTtcblxuZnVuY3Rpb24gRihTLCB4OCwgaSkge1xuICByZXR1cm4gKCgoU1swXVt4OFtpKzNdXSArXG4gICAgICAgICAgICBTWzFdW3g4W2krMl1dKSBeXG4gICAgICAgICAgICBTWzJdW3g4W2krMV1dKSArXG4gICAgICAgICAgICBTWzNdW3g4W2ldXSk7XG59O1xuXG5CbG93ZmlzaC5wcm90b3R5cGUuZW5jaXBoZXIgPSBmdW5jdGlvbih4LCB4OCkge1xuICBpZiAoeDggPT09IHVuZGVmaW5lZCkge1xuICAgIHg4ID0gbmV3IFVpbnQ4QXJyYXkoeC5idWZmZXIpO1xuICAgIGlmICh4LmJ5dGVPZmZzZXQgIT09IDApXG4gICAgICB4OCA9IHg4LnN1YmFycmF5KHguYnl0ZU9mZnNldCk7XG4gIH1cbiAgeFswXSBePSB0aGlzLlBbMF07XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgMTY7IGkgKz0gMikge1xuICAgIHhbMV0gXj0gRih0aGlzLlMsIHg4LCAwKSBeIHRoaXMuUFtpXTtcbiAgICB4WzBdIF49IEYodGhpcy5TLCB4OCwgNCkgXiB0aGlzLlBbaSsxXTtcbiAgfVxuICB2YXIgdCA9IHhbMF07XG4gIHhbMF0gPSB4WzFdIF4gdGhpcy5QWzE3XTtcbiAgeFsxXSA9IHQ7XG59O1xuXG5CbG93ZmlzaC5wcm90b3R5cGUuZGVjaXBoZXIgPSBmdW5jdGlvbih4KSB7XG4gIHZhciB4OCA9IG5ldyBVaW50OEFycmF5KHguYnVmZmVyKTtcbiAgaWYgKHguYnl0ZU9mZnNldCAhPT0gMClcbiAgICB4OCA9IHg4LnN1YmFycmF5KHguYnl0ZU9mZnNldCk7XG4gIHhbMF0gXj0gdGhpcy5QWzE3XTtcbiAgZm9yICh2YXIgaSA9IDE2OyBpID4gMDsgaSAtPSAyKSB7XG4gICAgeFsxXSBePSBGKHRoaXMuUywgeDgsIDApIF4gdGhpcy5QW2ldO1xuICAgIHhbMF0gXj0gRih0aGlzLlMsIHg4LCA0KSBeIHRoaXMuUFtpLTFdO1xuICB9XG4gIHZhciB0ID0geFswXTtcbiAgeFswXSA9IHhbMV0gXiB0aGlzLlBbMF07XG4gIHhbMV0gPSB0O1xufTtcblxuZnVuY3Rpb24gc3RyZWFtMndvcmQoZGF0YSwgZGF0YWJ5dGVzKXtcbiAgdmFyIGksIHRlbXAgPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrLCBCTEZfSisrKSB7XG4gICAgaWYgKEJMRl9KID49IGRhdGFieXRlcykgQkxGX0ogPSAwO1xuICAgIHRlbXAgPSAodGVtcCA8PCA4KSB8IGRhdGFbQkxGX0pdO1xuICB9XG4gIHJldHVybiB0ZW1wO1xufTtcblxuQmxvd2Zpc2gucHJvdG90eXBlLmV4cGFuZDBzdGF0ZSA9IGZ1bmN0aW9uKGtleSwga2V5Ynl0ZXMpIHtcbiAgdmFyIGQgPSBuZXcgVWludDMyQXJyYXkoMiksIGksIGs7XG4gIHZhciBkOCA9IG5ldyBVaW50OEFycmF5KGQuYnVmZmVyKTtcblxuICBmb3IgKGkgPSAwLCBCTEZfSiA9IDA7IGkgPCAxODsgaSsrKSB7XG4gICAgdGhpcy5QW2ldIF49IHN0cmVhbTJ3b3JkKGtleSwga2V5Ynl0ZXMpO1xuICB9XG4gIEJMRl9KID0gMDtcblxuICBmb3IgKGkgPSAwOyBpIDwgMTg7IGkgKz0gMikge1xuICAgIHRoaXMuZW5jaXBoZXIoZCwgZDgpO1xuICAgIHRoaXMuUFtpXSAgID0gZFswXTtcbiAgICB0aGlzLlBbaSsxXSA9IGRbMV07XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgZm9yIChrID0gMDsgayA8IDI1NjsgayArPSAyKSB7XG4gICAgICB0aGlzLmVuY2lwaGVyKGQsIGQ4KTtcbiAgICAgIHRoaXMuU1tpXVtrXSAgID0gZFswXTtcbiAgICAgIHRoaXMuU1tpXVtrKzFdID0gZFsxXTtcbiAgICB9XG4gIH1cbn07XG5cbkJsb3dmaXNoLnByb3RvdHlwZS5leHBhbmRzdGF0ZSA9IGZ1bmN0aW9uKGRhdGEsIGRhdGFieXRlcywga2V5LCBrZXlieXRlcykge1xuICB2YXIgZCA9IG5ldyBVaW50MzJBcnJheSgyKSwgaSwgaztcblxuICBmb3IgKGkgPSAwLCBCTEZfSiA9IDA7IGkgPCAxODsgaSsrKSB7XG4gICAgdGhpcy5QW2ldIF49IHN0cmVhbTJ3b3JkKGtleSwga2V5Ynl0ZXMpO1xuICB9XG5cbiAgZm9yIChpID0gMCwgQkxGX0ogPSAwOyBpIDwgMTg7IGkgKz0gMikge1xuICAgIGRbMF0gXj0gc3RyZWFtMndvcmQoZGF0YSwgZGF0YWJ5dGVzKTtcbiAgICBkWzFdIF49IHN0cmVhbTJ3b3JkKGRhdGEsIGRhdGFieXRlcyk7XG4gICAgdGhpcy5lbmNpcGhlcihkKTtcbiAgICB0aGlzLlBbaV0gICA9IGRbMF07XG4gICAgdGhpcy5QW2krMV0gPSBkWzFdO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIGZvciAoayA9IDA7IGsgPCAyNTY7IGsgKz0gMikge1xuICAgICAgZFswXSBePSBzdHJlYW0yd29yZChkYXRhLCBkYXRhYnl0ZXMpO1xuICAgICAgZFsxXSBePSBzdHJlYW0yd29yZChkYXRhLCBkYXRhYnl0ZXMpO1xuICAgICAgdGhpcy5lbmNpcGhlcihkKTtcbiAgICAgIHRoaXMuU1tpXVtrXSAgID0gZFswXTtcbiAgICAgIHRoaXMuU1tpXVtrKzFdID0gZFsxXTtcbiAgICB9XG4gIH1cbiAgQkxGX0ogPSAwO1xufTtcblxuQmxvd2Zpc2gucHJvdG90eXBlLmVuYyA9IGZ1bmN0aW9uKGRhdGEsIGJsb2Nrcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2NrczsgaSsrKSB7XG4gICAgdGhpcy5lbmNpcGhlcihkYXRhLnN1YmFycmF5KGkqMikpO1xuICB9XG59O1xuXG5CbG93ZmlzaC5wcm90b3R5cGUuZGVjID0gZnVuY3Rpb24oZGF0YSwgYmxvY2tzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tzOyBpKyspIHtcbiAgICB0aGlzLmRlY2lwaGVyKGRhdGEuc3ViYXJyYXkoaSoyKSk7XG4gIH1cbn07XG5cbnZhciBCQ1JZUFRfQkxPQ0tTID0gOCxcbiAgICBCQ1JZUFRfSEFTSFNJWkUgPSAzMjtcblxuZnVuY3Rpb24gYmNyeXB0X2hhc2goc2hhMnBhc3MsIHNoYTJzYWx0LCBvdXQpIHtcbiAgdmFyIHN0YXRlID0gbmV3IEJsb3dmaXNoKCksXG4gICAgICBjZGF0YSA9IG5ldyBVaW50MzJBcnJheShCQ1JZUFRfQkxPQ0tTKSwgaSxcbiAgICAgIGNpcGhlcnRleHQgPSBuZXcgVWludDhBcnJheShbNzksMTIwLDEyMSw5OSwxMDQsMTE0LDExMSwxMDksOTcsMTE2LDEwNSxcbiAgICAgICAgICAgIDk5LDY2LDEwOCwxMTEsMTE5LDEwMiwxMDUsMTE1LDEwNCw4MywxMTksOTcsMTE2LDY4LDEyMSwxMTAsOTcsMTA5LFxuICAgICAgICAgICAgMTA1LDExNiwxMDFdKTsgLy9cIk94eWNocm9tYXRpY0Jsb3dmaXNoU3dhdER5bmFtaXRlXCJcblxuICBzdGF0ZS5leHBhbmRzdGF0ZShzaGEyc2FsdCwgNjQsIHNoYTJwYXNzLCA2NCk7XG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG4gICAgc3RhdGUuZXhwYW5kMHN0YXRlKHNoYTJzYWx0LCA2NCk7XG4gICAgc3RhdGUuZXhwYW5kMHN0YXRlKHNoYTJwYXNzLCA2NCk7XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgQkNSWVBUX0JMT0NLUzsgaSsrKVxuICAgIGNkYXRhW2ldID0gc3RyZWFtMndvcmQoY2lwaGVydGV4dCwgY2lwaGVydGV4dC5ieXRlTGVuZ3RoKTtcbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspXG4gICAgc3RhdGUuZW5jKGNkYXRhLCBjZGF0YS5ieXRlTGVuZ3RoIC8gOCk7XG5cbiAgZm9yIChpID0gMDsgaSA8IEJDUllQVF9CTE9DS1M7IGkrKykge1xuICAgIG91dFs0KmkrM10gPSBjZGF0YVtpXSA+Pj4gMjQ7XG4gICAgb3V0WzQqaSsyXSA9IGNkYXRhW2ldID4+PiAxNjtcbiAgICBvdXRbNCppKzFdID0gY2RhdGFbaV0gPj4+IDg7XG4gICAgb3V0WzQqaSswXSA9IGNkYXRhW2ldO1xuICB9XG59O1xuXG5mdW5jdGlvbiBiY3J5cHRfcGJrZGYocGFzcywgcGFzc2xlbiwgc2FsdCwgc2FsdGxlbiwga2V5LCBrZXlsZW4sIHJvdW5kcykge1xuICB2YXIgc2hhMnBhc3MgPSBuZXcgVWludDhBcnJheSg2NCksXG4gICAgICBzaGEyc2FsdCA9IG5ldyBVaW50OEFycmF5KDY0KSxcbiAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KEJDUllQVF9IQVNIU0laRSksXG4gICAgICB0bXBvdXQgPSBuZXcgVWludDhBcnJheShCQ1JZUFRfSEFTSFNJWkUpLFxuICAgICAgY291bnRzYWx0ID0gbmV3IFVpbnQ4QXJyYXkoc2FsdGxlbis0KSxcbiAgICAgIGksIGosIGFtdCwgc3RyaWRlLCBkZXN0LCBjb3VudCxcbiAgICAgIG9yaWdrZXlsZW4gPSBrZXlsZW47XG5cbiAgaWYgKHJvdW5kcyA8IDEpXG4gICAgcmV0dXJuIC0xO1xuICBpZiAocGFzc2xlbiA9PT0gMCB8fCBzYWx0bGVuID09PSAwIHx8IGtleWxlbiA9PT0gMCB8fFxuICAgICAga2V5bGVuID4gKG91dC5ieXRlTGVuZ3RoICogb3V0LmJ5dGVMZW5ndGgpIHx8IHNhbHRsZW4gPiAoMTw8MjApKVxuICAgIHJldHVybiAtMTtcblxuICBzdHJpZGUgPSBNYXRoLmZsb29yKChrZXlsZW4gKyBvdXQuYnl0ZUxlbmd0aCAtIDEpIC8gb3V0LmJ5dGVMZW5ndGgpO1xuICBhbXQgPSBNYXRoLmZsb29yKChrZXlsZW4gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZSk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNhbHRsZW47IGkrKylcbiAgICBjb3VudHNhbHRbaV0gPSBzYWx0W2ldO1xuXG4gIGNyeXB0b19oYXNoX3NoYTUxMihzaGEycGFzcywgcGFzcywgcGFzc2xlbik7XG5cbiAgZm9yIChjb3VudCA9IDE7IGtleWxlbiA+IDA7IGNvdW50KyspIHtcbiAgICBjb3VudHNhbHRbc2FsdGxlbiswXSA9IGNvdW50ID4+PiAyNDtcbiAgICBjb3VudHNhbHRbc2FsdGxlbisxXSA9IGNvdW50ID4+PiAxNjtcbiAgICBjb3VudHNhbHRbc2FsdGxlbisyXSA9IGNvdW50ID4+PiAgODtcbiAgICBjb3VudHNhbHRbc2FsdGxlbiszXSA9IGNvdW50O1xuXG4gICAgY3J5cHRvX2hhc2hfc2hhNTEyKHNoYTJzYWx0LCBjb3VudHNhbHQsIHNhbHRsZW4gKyA0KTtcbiAgICBiY3J5cHRfaGFzaChzaGEycGFzcywgc2hhMnNhbHQsIHRtcG91dCk7XG4gICAgZm9yIChpID0gb3V0LmJ5dGVMZW5ndGg7IGktLTspXG4gICAgICBvdXRbaV0gPSB0bXBvdXRbaV07XG5cbiAgICBmb3IgKGkgPSAxOyBpIDwgcm91bmRzOyBpKyspIHtcbiAgICAgIGNyeXB0b19oYXNoX3NoYTUxMihzaGEyc2FsdCwgdG1wb3V0LCB0bXBvdXQuYnl0ZUxlbmd0aCk7XG4gICAgICBiY3J5cHRfaGFzaChzaGEycGFzcywgc2hhMnNhbHQsIHRtcG91dCk7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgb3V0LmJ5dGVMZW5ndGg7IGorKylcbiAgICAgICAgb3V0W2pdIF49IHRtcG91dFtqXTtcbiAgICB9XG5cbiAgICBhbXQgPSBNYXRoLm1pbihhbXQsIGtleWxlbik7XG4gICAgZm9yIChpID0gMDsgaSA8IGFtdDsgaSsrKSB7XG4gICAgICBkZXN0ID0gaSAqIHN0cmlkZSArIChjb3VudCAtIDEpO1xuICAgICAgaWYgKGRlc3QgPj0gb3JpZ2tleWxlbilcbiAgICAgICAgYnJlYWs7XG4gICAgICBrZXlbZGVzdF0gPSBvdXRbaV07XG4gICAgfVxuICAgIGtleWxlbiAtPSBpO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgIEJMT0NLUzogQkNSWVBUX0JMT0NLUyxcbiAgICAgIEhBU0hTSVpFOiBCQ1JZUFRfSEFTSFNJWkUsXG4gICAgICBoYXNoOiBiY3J5cHRfaGFzaCxcbiAgICAgIHBia2RmOiBiY3J5cHRfcGJrZGZcbn07XG4iLCIoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gVXRpbHNcbiAgZnVuY3Rpb24gYXNzZXJ0ICh2YWwsIG1zZykge1xuICAgIGlmICghdmFsKSB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICdBc3NlcnRpb24gZmFpbGVkJyk7XG4gIH1cblxuICAvLyBDb3VsZCB1c2UgYGluaGVyaXRzYCBtb2R1bGUsIGJ1dCBkb24ndCB3YW50IHRvIG1vdmUgZnJvbSBzaW5nbGUgZmlsZVxuICAvLyBhcmNoaXRlY3R1cmUgeWV0LlxuICBmdW5jdGlvbiBpbmhlcml0cyAoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7XG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge307XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZTtcbiAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpO1xuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvcjtcbiAgfVxuXG4gIC8vIEJOXG5cbiAgZnVuY3Rpb24gQk4gKG51bWJlciwgYmFzZSwgZW5kaWFuKSB7XG4gICAgaWYgKEJOLmlzQk4obnVtYmVyKSkge1xuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICB0aGlzLndvcmRzID0gbnVsbDtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICAvLyBSZWR1Y3Rpb24gY29udGV4dFxuICAgIHRoaXMucmVkID0gbnVsbDtcblxuICAgIGlmIChudW1iZXIgIT09IG51bGwpIHtcbiAgICAgIGlmIChiYXNlID09PSAnbGUnIHx8IGJhc2UgPT09ICdiZScpIHtcbiAgICAgICAgZW5kaWFuID0gYmFzZTtcbiAgICAgICAgYmFzZSA9IDEwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbml0KG51bWJlciB8fCAwLCBiYXNlIHx8IDEwLCBlbmRpYW4gfHwgJ2JlJyk7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gQk47XG4gIH0gZWxzZSB7XG4gICAgZXhwb3J0cy5CTiA9IEJOO1xuICB9XG5cbiAgQk4uQk4gPSBCTjtcbiAgQk4ud29yZFNpemUgPSAyNjtcblxuICB2YXIgQnVmZmVyO1xuICB0cnkge1xuICAgIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZicgKyAnZmVyJykuQnVmZmVyO1xuICB9IGNhdGNoIChlKSB7XG4gIH1cblxuICBCTi5pc0JOID0gZnVuY3Rpb24gaXNCTiAobnVtKSB7XG4gICAgaWYgKG51bSBpbnN0YW5jZW9mIEJOKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVtICE9PSBudWxsICYmIHR5cGVvZiBudW0gPT09ICdvYmplY3QnICYmXG4gICAgICBudW0uY29uc3RydWN0b3Iud29yZFNpemUgPT09IEJOLndvcmRTaXplICYmIEFycmF5LmlzQXJyYXkobnVtLndvcmRzKTtcbiAgfTtcblxuICBCTi5tYXggPSBmdW5jdGlvbiBtYXggKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQuY21wKHJpZ2h0KSA+IDApIHJldHVybiBsZWZ0O1xuICAgIHJldHVybiByaWdodDtcbiAgfTtcblxuICBCTi5taW4gPSBmdW5jdGlvbiBtaW4gKGxlZnQsIHJpZ2h0KSB7XG4gICAgaWYgKGxlZnQuY21wKHJpZ2h0KSA8IDApIHJldHVybiBsZWZ0O1xuICAgIHJldHVybiByaWdodDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0IChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIGlmICh0eXBlb2YgbnVtYmVyID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHRoaXMuX2luaXROdW1iZXIobnVtYmVyLCBiYXNlLCBlbmRpYW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbnVtYmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuX2luaXRBcnJheShudW1iZXIsIGJhc2UsIGVuZGlhbik7XG4gICAgfVxuXG4gICAgaWYgKGJhc2UgPT09ICdoZXgnKSB7XG4gICAgICBiYXNlID0gMTY7XG4gICAgfVxuICAgIGFzc2VydChiYXNlID09PSAoYmFzZSB8IDApICYmIGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KTtcblxuICAgIG51bWJlciA9IG51bWJlci50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgaWYgKG51bWJlclswXSA9PT0gJy0nKSB7XG4gICAgICBzdGFydCsrO1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAxNikge1xuICAgICAgdGhpcy5fcGFyc2VIZXgobnVtYmVyLCBzdGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BhcnNlQmFzZShudW1iZXIsIGJhc2UsIHN0YXJ0KTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyWzBdID09PSAnLScpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgIH1cblxuICAgIHRoaXMuc3RyaXAoKTtcblxuICAgIGlmIChlbmRpYW4gIT09ICdsZScpIHJldHVybjtcblxuICAgIHRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSwgYmFzZSwgZW5kaWFuKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2luaXROdW1iZXIgPSBmdW5jdGlvbiBfaW5pdE51bWJlciAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICBudW1iZXIgPSAtbnVtYmVyO1xuICAgIH1cbiAgICBpZiAobnVtYmVyIDwgMHg0MDAwMDAwKSB7XG4gICAgICB0aGlzLndvcmRzID0gWyBudW1iZXIgJiAweDNmZmZmZmYgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA8IDB4MTAwMDAwMDAwMDAwMDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbXG4gICAgICAgIG51bWJlciAmIDB4M2ZmZmZmZixcbiAgICAgICAgKG51bWJlciAvIDB4NDAwMDAwMCkgJiAweDNmZmZmZmZcbiAgICAgIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChudW1iZXIgPCAweDIwMDAwMDAwMDAwMDAwKTsgLy8gMiBeIDUzICh1bnNhZmUpXG4gICAgICB0aGlzLndvcmRzID0gW1xuICAgICAgICBudW1iZXIgJiAweDNmZmZmZmYsXG4gICAgICAgIChudW1iZXIgLyAweDQwMDAwMDApICYgMHgzZmZmZmZmLFxuICAgICAgICAxXG4gICAgICBdO1xuICAgICAgdGhpcy5sZW5ndGggPSAzO1xuICAgIH1cblxuICAgIGlmIChlbmRpYW4gIT09ICdsZScpIHJldHVybjtcblxuICAgIC8vIFJldmVyc2UgdGhlIGJ5dGVzXG4gICAgdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLCBiYXNlLCBlbmRpYW4pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faW5pdEFycmF5ID0gZnVuY3Rpb24gX2luaXRBcnJheSAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICAvLyBQZXJoYXBzIGEgVWludDhBcnJheVxuICAgIGFzc2VydCh0eXBlb2YgbnVtYmVyLmxlbmd0aCA9PT0gJ251bWJlcicpO1xuICAgIGlmIChudW1iZXIubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbIDAgXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5jZWlsKG51bWJlci5sZW5ndGggLyAzKTtcbiAgICB0aGlzLndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgIH1cblxuICAgIHZhciBqLCB3O1xuICAgIHZhciBvZmYgPSAwO1xuICAgIGlmIChlbmRpYW4gPT09ICdiZScpIHtcbiAgICAgIGZvciAoaSA9IG51bWJlci5sZW5ndGggLSAxLCBqID0gMDsgaSA+PSAwOyBpIC09IDMpIHtcbiAgICAgICAgdyA9IG51bWJlcltpXSB8IChudW1iZXJbaSAtIDFdIDw8IDgpIHwgKG51bWJlcltpIC0gMl0gPDwgMTYpO1xuICAgICAgICB0aGlzLndvcmRzW2pdIHw9ICh3IDw8IG9mZikgJiAweDNmZmZmZmY7XG4gICAgICAgIHRoaXMud29yZHNbaiArIDFdID0gKHcgPj4+ICgyNiAtIG9mZikpICYgMHgzZmZmZmZmO1xuICAgICAgICBvZmYgKz0gMjQ7XG4gICAgICAgIGlmIChvZmYgPj0gMjYpIHtcbiAgICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmRpYW4gPT09ICdsZScpIHtcbiAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnVtYmVyLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIHcgPSBudW1iZXJbaV0gfCAobnVtYmVyW2kgKyAxXSA8PCA4KSB8IChudW1iZXJbaSArIDJdIDw8IDE2KTtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgICB0aGlzLndvcmRzW2ogKyAxXSA9ICh3ID4+PiAoMjYgLSBvZmYpKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgb2ZmICs9IDI0O1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHBhcnNlSGV4IChzdHIsIHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IDA7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKHN0ci5sZW5ndGgsIGVuZCk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSkgLSA0ODtcblxuICAgICAgciA8PD0gNDtcblxuICAgICAgLy8gJ2EnIC0gJ2YnXG4gICAgICBpZiAoYyA+PSA0OSAmJiBjIDw9IDU0KSB7XG4gICAgICAgIHIgfD0gYyAtIDQ5ICsgMHhhO1xuXG4gICAgICAvLyAnQScgLSAnRidcbiAgICAgIH0gZWxzZSBpZiAoYyA+PSAxNyAmJiBjIDw9IDIyKSB7XG4gICAgICAgIHIgfD0gYyAtIDE3ICsgMHhhO1xuXG4gICAgICAvLyAnMCcgLSAnOSdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHIgfD0gYyAmIDB4ZjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3BhcnNlSGV4ID0gZnVuY3Rpb24gX3BhcnNlSGV4IChudW1iZXIsIHN0YXJ0KSB7XG4gICAgLy8gQ3JlYXRlIHBvc3NpYmx5IGJpZ2dlciBhcnJheSB0byBlbnN1cmUgdGhhdCBpdCBmaXRzIHRoZSBudW1iZXJcbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbCgobnVtYmVyLmxlbmd0aCAtIHN0YXJ0KSAvIDYpO1xuICAgIHRoaXMud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGosIHc7XG4gICAgLy8gU2NhbiAyNC1iaXQgY2h1bmtzIGFuZCBhZGQgdGhlbSB0byB0aGUgbnVtYmVyXG4gICAgdmFyIG9mZiA9IDA7XG4gICAgZm9yIChpID0gbnVtYmVyLmxlbmd0aCAtIDYsIGogPSAwOyBpID49IHN0YXJ0OyBpIC09IDYpIHtcbiAgICAgIHcgPSBwYXJzZUhleChudW1iZXIsIGksIGkgKyA2KTtcbiAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgIC8vIE5PVEU6IGAweDNmZmZmZmAgaXMgaW50ZW50aW9uYWwgaGVyZSwgMjZiaXRzIG1heCBzaGlmdCArIDI0Yml0IGhleCBsaW1iXG4gICAgICB0aGlzLndvcmRzW2ogKyAxXSB8PSB3ID4+PiAoMjYgLSBvZmYpICYgMHgzZmZmZmY7XG4gICAgICBvZmYgKz0gMjQ7XG4gICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgaisrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaSArIDYgIT09IHN0YXJ0KSB7XG4gICAgICB3ID0gcGFyc2VIZXgobnVtYmVyLCBzdGFydCwgaSArIDYpO1xuICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgdGhpcy53b3Jkc1tqICsgMV0gfD0gdyA+Pj4gKDI2IC0gb2ZmKSAmIDB4M2ZmZmZmO1xuICAgIH1cbiAgICB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcGFyc2VCYXNlIChzdHIsIHN0YXJ0LCBlbmQsIG11bCkge1xuICAgIHZhciByID0gMDtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oc3RyLmxlbmd0aCwgZW5kKTtcbiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKSAtIDQ4O1xuXG4gICAgICByICo9IG11bDtcblxuICAgICAgLy8gJ2EnXG4gICAgICBpZiAoYyA+PSA0OSkge1xuICAgICAgICByICs9IGMgLSA0OSArIDB4YTtcblxuICAgICAgLy8gJ0EnXG4gICAgICB9IGVsc2UgaWYgKGMgPj0gMTcpIHtcbiAgICAgICAgciArPSBjIC0gMTcgKyAweGE7XG5cbiAgICAgIC8vICcwJyAtICc5J1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgciArPSBjO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS5fcGFyc2VCYXNlID0gZnVuY3Rpb24gX3BhcnNlQmFzZSAobnVtYmVyLCBiYXNlLCBzdGFydCkge1xuICAgIC8vIEluaXRpYWxpemUgYXMgemVyb1xuICAgIHRoaXMud29yZHMgPSBbIDAgXTtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG5cbiAgICAvLyBGaW5kIGxlbmd0aCBvZiBsaW1iIGluIGJhc2VcbiAgICBmb3IgKHZhciBsaW1iTGVuID0gMCwgbGltYlBvdyA9IDE7IGxpbWJQb3cgPD0gMHgzZmZmZmZmOyBsaW1iUG93ICo9IGJhc2UpIHtcbiAgICAgIGxpbWJMZW4rKztcbiAgICB9XG4gICAgbGltYkxlbi0tO1xuICAgIGxpbWJQb3cgPSAobGltYlBvdyAvIGJhc2UpIHwgMDtcblxuICAgIHZhciB0b3RhbCA9IG51bWJlci5sZW5ndGggLSBzdGFydDtcbiAgICB2YXIgbW9kID0gdG90YWwgJSBsaW1iTGVuO1xuICAgIHZhciBlbmQgPSBNYXRoLm1pbih0b3RhbCwgdG90YWwgLSBtb2QpICsgc3RhcnQ7XG5cbiAgICB2YXIgd29yZCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGxpbWJMZW4pIHtcbiAgICAgIHdvcmQgPSBwYXJzZUJhc2UobnVtYmVyLCBpLCBpICsgbGltYkxlbiwgYmFzZSk7XG5cbiAgICAgIHRoaXMuaW11bG4obGltYlBvdyk7XG4gICAgICBpZiAodGhpcy53b3Jkc1swXSArIHdvcmQgPCAweDQwMDAwMDApIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSArPSB3b3JkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faWFkZG4od29yZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZCAhPT0gMCkge1xuICAgICAgdmFyIHBvdyA9IDE7XG4gICAgICB3b3JkID0gcGFyc2VCYXNlKG51bWJlciwgaSwgbnVtYmVyLmxlbmd0aCwgYmFzZSk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtb2Q7IGkrKykge1xuICAgICAgICBwb3cgKj0gYmFzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbXVsbihwb3cpO1xuICAgICAgaWYgKHRoaXMud29yZHNbMF0gKyB3b3JkIDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gKz0gd29yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2lhZGRuKHdvcmQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBCTi5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKGRlc3QpIHtcbiAgICBkZXN0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlc3Qud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldO1xuICAgIH1cbiAgICBkZXN0Lmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIGRlc3QubmVnYXRpdmUgPSB0aGlzLm5lZ2F0aXZlO1xuICAgIGRlc3QucmVkID0gdGhpcy5yZWQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gY2xvbmUgKCkge1xuICAgIHZhciByID0gbmV3IEJOKG51bGwpO1xuICAgIHRoaXMuY29weShyKTtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX2V4cGFuZCA9IGZ1bmN0aW9uIF9leHBhbmQgKHNpemUpIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPCBzaXplKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gUmVtb3ZlIGxlYWRpbmcgYDBgIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zdHJpcCA9IGZ1bmN0aW9uIHN0cmlwICgpIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPiAxICYmIHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgdGhpcy5sZW5ndGgtLTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9ub3JtU2lnbiA9IGZ1bmN0aW9uIF9ub3JtU2lnbiAoKSB7XG4gICAgLy8gLTAgPSAwXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXMud29yZHNbMF0gPT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICAgIHJldHVybiAodGhpcy5yZWQgPyAnPEJOLVI6ICcgOiAnPEJOOiAnKSArIHRoaXMudG9TdHJpbmcoMTYpICsgJz4nO1xuICB9O1xuXG4gIC8qXG5cbiAgdmFyIHplcm9zID0gW107XG4gIHZhciBncm91cFNpemVzID0gW107XG4gIHZhciBncm91cEJhc2VzID0gW107XG5cbiAgdmFyIHMgPSAnJztcbiAgdmFyIGkgPSAtMTtcbiAgd2hpbGUgKCsraSA8IEJOLndvcmRTaXplKSB7XG4gICAgemVyb3NbaV0gPSBzO1xuICAgIHMgKz0gJzAnO1xuICB9XG4gIGdyb3VwU2l6ZXNbMF0gPSAwO1xuICBncm91cFNpemVzWzFdID0gMDtcbiAgZ3JvdXBCYXNlc1swXSA9IDA7XG4gIGdyb3VwQmFzZXNbMV0gPSAwO1xuICB2YXIgYmFzZSA9IDIgLSAxO1xuICB3aGlsZSAoKytiYXNlIDwgMzYgKyAxKSB7XG4gICAgdmFyIGdyb3VwU2l6ZSA9IDA7XG4gICAgdmFyIGdyb3VwQmFzZSA9IDE7XG4gICAgd2hpbGUgKGdyb3VwQmFzZSA8ICgxIDw8IEJOLndvcmRTaXplKSAvIGJhc2UpIHtcbiAgICAgIGdyb3VwQmFzZSAqPSBiYXNlO1xuICAgICAgZ3JvdXBTaXplICs9IDE7XG4gICAgfVxuICAgIGdyb3VwU2l6ZXNbYmFzZV0gPSBncm91cFNpemU7XG4gICAgZ3JvdXBCYXNlc1tiYXNlXSA9IGdyb3VwQmFzZTtcbiAgfVxuXG4gICovXG5cbiAgdmFyIHplcm9zID0gW1xuICAgICcnLFxuICAgICcwJyxcbiAgICAnMDAnLFxuICAgICcwMDAnLFxuICAgICcwMDAwJyxcbiAgICAnMDAwMDAnLFxuICAgICcwMDAwMDAnLFxuICAgICcwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJ1xuICBdO1xuXG4gIHZhciBncm91cFNpemVzID0gW1xuICAgIDAsIDAsXG4gICAgMjUsIDE2LCAxMiwgMTEsIDEwLCA5LCA4LFxuICAgIDgsIDcsIDcsIDcsIDcsIDYsIDYsXG4gICAgNiwgNiwgNiwgNiwgNiwgNSwgNSxcbiAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LFxuICAgIDUsIDUsIDUsIDUsIDUsIDUsIDVcbiAgXTtcblxuICB2YXIgZ3JvdXBCYXNlcyA9IFtcbiAgICAwLCAwLFxuICAgIDMzNTU0NDMyLCA0MzA0NjcyMSwgMTY3NzcyMTYsIDQ4ODI4MTI1LCA2MDQ2NjE3NiwgNDAzNTM2MDcsIDE2Nzc3MjE2LFxuICAgIDQzMDQ2NzIxLCAxMDAwMDAwMCwgMTk0ODcxNzEsIDM1ODMxODA4LCA2Mjc0ODUxNywgNzUyOTUzNiwgMTEzOTA2MjUsXG4gICAgMTY3NzcyMTYsIDI0MTM3NTY5LCAzNDAxMjIyNCwgNDcwNDU4ODEsIDY0MDAwMDAwLCA0MDg0MTAxLCA1MTUzNjMyLFxuICAgIDY0MzYzNDMsIDc5NjI2MjQsIDk3NjU2MjUsIDExODgxMzc2LCAxNDM0ODkwNywgMTcyMTAzNjgsIDIwNTExMTQ5LFxuICAgIDI0MzAwMDAwLCAyODYyOTE1MSwgMzM1NTQ0MzIsIDM5MTM1MzkzLCA0NTQzNTQyNCwgNTI1MjE4NzUsIDYwNDY2MTc2XG4gIF07XG5cbiAgQk4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKGJhc2UsIHBhZGRpbmcpIHtcbiAgICBiYXNlID0gYmFzZSB8fCAxMDtcbiAgICBwYWRkaW5nID0gcGFkZGluZyB8IDAgfHwgMTtcblxuICAgIHZhciBvdXQ7XG4gICAgaWYgKGJhc2UgPT09IDE2IHx8IGJhc2UgPT09ICdoZXgnKSB7XG4gICAgICBvdXQgPSAnJztcbiAgICAgIHZhciBvZmYgPSAwO1xuICAgICAgdmFyIGNhcnJ5ID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdyA9IHRoaXMud29yZHNbaV07XG4gICAgICAgIHZhciB3b3JkID0gKCgodyA8PCBvZmYpIHwgY2FycnkpICYgMHhmZmZmZmYpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgY2FycnkgPSAodyA+Pj4gKDI0IC0gb2ZmKSkgJiAweGZmZmZmZjtcbiAgICAgICAgaWYgKGNhcnJ5ICE9PSAwIHx8IGkgIT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG91dCA9IHplcm9zWzYgLSB3b3JkLmxlbmd0aF0gKyB3b3JkICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHdvcmQgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgb2ZmICs9IDI7XG4gICAgICAgIGlmIChvZmYgPj0gMjYpIHtcbiAgICAgICAgICBvZmYgLT0gMjY7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgICAgb3V0ID0gY2FycnkudG9TdHJpbmcoMTYpICsgb3V0O1xuICAgICAgfVxuICAgICAgd2hpbGUgKG91dC5sZW5ndGggJSBwYWRkaW5nICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgIG91dCA9ICctJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgaWYgKGJhc2UgPT09IChiYXNlIHwgMCkgJiYgYmFzZSA+PSAyICYmIGJhc2UgPD0gMzYpIHtcbiAgICAgIC8vIHZhciBncm91cFNpemUgPSBNYXRoLmZsb29yKEJOLndvcmRTaXplICogTWF0aC5MTjIgLyBNYXRoLmxvZyhiYXNlKSk7XG4gICAgICB2YXIgZ3JvdXBTaXplID0gZ3JvdXBTaXplc1tiYXNlXTtcbiAgICAgIC8vIHZhciBncm91cEJhc2UgPSBNYXRoLnBvdyhiYXNlLCBncm91cFNpemUpO1xuICAgICAgdmFyIGdyb3VwQmFzZSA9IGdyb3VwQmFzZXNbYmFzZV07XG4gICAgICBvdXQgPSAnJztcbiAgICAgIHZhciBjID0gdGhpcy5jbG9uZSgpO1xuICAgICAgYy5uZWdhdGl2ZSA9IDA7XG4gICAgICB3aGlsZSAoIWMuaXNaZXJvKCkpIHtcbiAgICAgICAgdmFyIHIgPSBjLm1vZG4oZ3JvdXBCYXNlKS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgYyA9IGMuaWRpdm4oZ3JvdXBCYXNlKTtcblxuICAgICAgICBpZiAoIWMuaXNaZXJvKCkpIHtcbiAgICAgICAgICBvdXQgPSB6ZXJvc1tncm91cFNpemUgLSByLmxlbmd0aF0gKyByICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHIgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzWmVybygpKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChvdXQubGVuZ3RoICUgcGFkZGluZyAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnLScgKyBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGFzc2VydChmYWxzZSwgJ0Jhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYnKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiB0b051bWJlciAoKSB7XG4gICAgdmFyIHJldCA9IHRoaXMud29yZHNbMF07XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXQgKz0gdGhpcy53b3Jkc1sxXSAqIDB4NDAwMDAwMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID09PSAzICYmIHRoaXMud29yZHNbMl0gPT09IDB4MDEpIHtcbiAgICAgIC8vIE5PVEU6IGF0IHRoaXMgc3RhZ2UgaXQgaXMga25vd24gdGhhdCB0aGUgdG9wIGJpdCBpcyBzZXRcbiAgICAgIHJldCArPSAweDEwMDAwMDAwMDAwMDAwICsgKHRoaXMud29yZHNbMV0gKiAweDQwMDAwMDApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPiAyKSB7XG4gICAgICBhc3NlcnQoZmFsc2UsICdOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMnKTtcbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLm5lZ2F0aXZlICE9PSAwKSA/IC1yZXQgOiByZXQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b0J1ZmZlciA9IGZ1bmN0aW9uIHRvQnVmZmVyIChlbmRpYW4sIGxlbmd0aCkge1xuICAgIGFzc2VydCh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyk7XG4gICAgcmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQnVmZmVyLCBlbmRpYW4sIGxlbmd0aCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5IChlbmRpYW4sIGxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LCBlbmRpYW4sIGxlbmd0aCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvQXJyYXlMaWtlID0gZnVuY3Rpb24gdG9BcnJheUxpa2UgKEFycmF5VHlwZSwgZW5kaWFuLCBsZW5ndGgpIHtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRoaXMuYnl0ZUxlbmd0aCgpO1xuICAgIHZhciByZXFMZW5ndGggPSBsZW5ndGggfHwgTWF0aC5tYXgoMSwgYnl0ZUxlbmd0aCk7XG4gICAgYXNzZXJ0KGJ5dGVMZW5ndGggPD0gcmVxTGVuZ3RoLCAnYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCcpO1xuICAgIGFzc2VydChyZXFMZW5ndGggPiAwLCAnUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwJyk7XG5cbiAgICB0aGlzLnN0cmlwKCk7XG4gICAgdmFyIGxpdHRsZUVuZGlhbiA9IGVuZGlhbiA9PT0gJ2xlJztcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5VHlwZShyZXFMZW5ndGgpO1xuXG4gICAgdmFyIGIsIGk7XG4gICAgdmFyIHEgPSB0aGlzLmNsb25lKCk7XG4gICAgaWYgKCFsaXR0bGVFbmRpYW4pIHtcbiAgICAgIC8vIEFzc3VtZSBiaWctZW5kaWFuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcmVxTGVuZ3RoIC0gYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc1tpXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7ICFxLmlzWmVybygpOyBpKyspIHtcbiAgICAgICAgYiA9IHEuYW5kbG4oMHhmZik7XG4gICAgICAgIHEuaXVzaHJuKDgpO1xuXG4gICAgICAgIHJlc1tyZXFMZW5ndGggLSBpIC0gMV0gPSBiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyAhcS5pc1plcm8oKTsgaSsrKSB7XG4gICAgICAgIGIgPSBxLmFuZGxuKDB4ZmYpO1xuICAgICAgICBxLml1c2hybig4KTtcblxuICAgICAgICByZXNbaV0gPSBiO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgaSA8IHJlcUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBpZiAoTWF0aC5jbHozMikge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgcmV0dXJuIDMyIC0gTWF0aC5jbHozMih3KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgdmFyIHQgPSB3O1xuICAgICAgdmFyIHIgPSAwO1xuICAgICAgaWYgKHQgPj0gMHgxMDAwKSB7XG4gICAgICAgIHIgKz0gMTM7XG4gICAgICAgIHQgPj4+PSAxMztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4NDApIHtcbiAgICAgICAgciArPSA3O1xuICAgICAgICB0ID4+Pj0gNztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4OCkge1xuICAgICAgICByICs9IDQ7XG4gICAgICAgIHQgPj4+PSA0O1xuICAgICAgfVxuICAgICAgaWYgKHQgPj0gMHgwMikge1xuICAgICAgICByICs9IDI7XG4gICAgICAgIHQgPj4+PSAyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHIgKyB0O1xuICAgIH07XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3plcm9CaXRzID0gZnVuY3Rpb24gX3plcm9CaXRzICh3KSB7XG4gICAgLy8gU2hvcnQtY3V0XG4gICAgaWYgKHcgPT09IDApIHJldHVybiAyNjtcblxuICAgIHZhciB0ID0gdztcbiAgICB2YXIgciA9IDA7XG4gICAgaWYgKCh0ICYgMHgxZmZmKSA9PT0gMCkge1xuICAgICAgciArPSAxMztcbiAgICAgIHQgPj4+PSAxMztcbiAgICB9XG4gICAgaWYgKCh0ICYgMHg3ZikgPT09IDApIHtcbiAgICAgIHIgKz0gNztcbiAgICAgIHQgPj4+PSA3O1xuICAgIH1cbiAgICBpZiAoKHQgJiAweGYpID09PSAwKSB7XG4gICAgICByICs9IDQ7XG4gICAgICB0ID4+Pj0gNDtcbiAgICB9XG4gICAgaWYgKCh0ICYgMHgzKSA9PT0gMCkge1xuICAgICAgciArPSAyO1xuICAgICAgdCA+Pj49IDI7XG4gICAgfVxuICAgIGlmICgodCAmIDB4MSkgPT09IDApIHtcbiAgICAgIHIrKztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG51bWJlciBvZiB1c2VkIGJpdHMgaW4gYSBCTlxuICBCTi5wcm90b3R5cGUuYml0TGVuZ3RoID0gZnVuY3Rpb24gYml0TGVuZ3RoICgpIHtcbiAgICB2YXIgdyA9IHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXTtcbiAgICB2YXIgaGkgPSB0aGlzLl9jb3VudEJpdHModyk7XG4gICAgcmV0dXJuICh0aGlzLmxlbmd0aCAtIDEpICogMjYgKyBoaTtcbiAgfTtcblxuICBmdW5jdGlvbiB0b0JpdEFycmF5IChudW0pIHtcbiAgICB2YXIgdyA9IG5ldyBBcnJheShudW0uYml0TGVuZ3RoKCkpO1xuXG4gICAgZm9yICh2YXIgYml0ID0gMDsgYml0IDwgdy5sZW5ndGg7IGJpdCsrKSB7XG4gICAgICB2YXIgb2ZmID0gKGJpdCAvIDI2KSB8IDA7XG4gICAgICB2YXIgd2JpdCA9IGJpdCAlIDI2O1xuXG4gICAgICB3W2JpdF0gPSAobnVtLndvcmRzW29mZl0gJiAoMSA8PCB3Yml0KSkgPj4+IHdiaXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHc7XG4gIH1cblxuICAvLyBOdW1iZXIgb2YgdHJhaWxpbmcgemVybyBiaXRzXG4gIEJOLnByb3RvdHlwZS56ZXJvQml0cyA9IGZ1bmN0aW9uIHplcm9CaXRzICgpIHtcbiAgICBpZiAodGhpcy5pc1plcm8oKSkgcmV0dXJuIDA7XG5cbiAgICB2YXIgciA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYiA9IHRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbaV0pO1xuICAgICAgciArPSBiO1xuICAgICAgaWYgKGIgIT09IDI2KSBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmJ5dGVMZW5ndGggPSBmdW5jdGlvbiBieXRlTGVuZ3RoICgpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkgLyA4KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9Ud29zID0gZnVuY3Rpb24gdG9Ud29zICh3aWR0aCkge1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5hYnMoKS5pbm90bih3aWR0aCkuaWFkZG4oMSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmZyb21Ud29zID0gZnVuY3Rpb24gZnJvbVR3b3MgKHdpZHRoKSB7XG4gICAgaWYgKHRoaXMudGVzdG4od2lkdGggLSAxKSkge1xuICAgICAgcmV0dXJuIHRoaXMubm90bih3aWR0aCkuaWFkZG4oMSkuaW5lZygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc05lZyA9IGZ1bmN0aW9uIGlzTmVnICgpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGl2ZSAhPT0gMDtcbiAgfTtcblxuICAvLyBSZXR1cm4gbmVnYXRpdmUgY2xvbmUgb2YgYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiBuZWcgKCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW5lZygpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pbmVnID0gZnVuY3Rpb24gaW5lZyAoKSB7XG4gICAgaWYgKCF0aGlzLmlzWmVybygpKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlIF49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gT3IgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1b3IgPSBmdW5jdGlvbiBpdW9yIChudW0pIHtcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPCBudW0ubGVuZ3RoKSB7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdID0gMDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaV0gfCBudW0ud29yZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW9yID0gZnVuY3Rpb24gaW9yIChudW0pIHtcbiAgICBhc3NlcnQoKHRoaXMubmVnYXRpdmUgfCBudW0ubmVnYXRpdmUpID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdW9yKG51bSk7XG4gIH07XG5cbiAgLy8gT3IgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaW9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlvcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudW9yID0gZnVuY3Rpb24gdW9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXVvcih0aGlzKTtcbiAgfTtcblxuICAvLyBBbmQgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1YW5kID0gZnVuY3Rpb24gaXVhbmQgKG51bSkge1xuICAgIC8vIGIgPSBtaW4tbGVuZ3RoKG51bSwgdGhpcylcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldICYgbnVtLndvcmRzW2ldO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYi5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pYW5kID0gZnVuY3Rpb24gaWFuZCAobnVtKSB7XG4gICAgYXNzZXJ0KCh0aGlzLm5lZ2F0aXZlIHwgbnVtLm5lZ2F0aXZlKSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVhbmQobnVtKTtcbiAgfTtcblxuICAvLyBBbmQgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uIGFuZCAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYW5kKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlhbmQodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVhbmQgPSBmdW5jdGlvbiB1YW5kIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1YW5kKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLml1YW5kKHRoaXMpO1xuICB9O1xuXG4gIC8vIFhvciBgbnVtYCB3aXRoIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXV4b3IgPSBmdW5jdGlvbiBpdXhvciAobnVtKSB7XG4gICAgLy8gYS5sZW5ndGggPiBiLmxlbmd0aFxuICAgIHZhciBhO1xuICAgIHZhciBiO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHtcbiAgICAgIGEgPSB0aGlzO1xuICAgICAgYiA9IG51bTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IG51bTtcbiAgICAgIGIgPSB0aGlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV0gXiBiLndvcmRzW2ldO1xuICAgIH1cblxuICAgIGlmICh0aGlzICE9PSBhKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBhLmxlbmd0aDtcblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLml4b3IgPSBmdW5jdGlvbiBpeG9yIChudW0pIHtcbiAgICBhc3NlcnQoKHRoaXMubmVnYXRpdmUgfCBudW0ubmVnYXRpdmUpID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdXhvcihudW0pO1xuICB9O1xuXG4gIC8vIFhvciBgbnVtYCB3aXRoIGB0aGlzYFxuICBCTi5wcm90b3R5cGUueG9yID0gZnVuY3Rpb24geG9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml4b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXhvcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXhvciA9IGZ1bmN0aW9uIHV4b3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaXV4b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXV4b3IodGhpcyk7XG4gIH07XG5cbiAgLy8gTm90IGBgdGhpc2BgIHdpdGggYGB3aWR0aGBgIGJpdHdpZHRoXG4gIEJOLnByb3RvdHlwZS5pbm90biA9IGZ1bmN0aW9uIGlub3RuICh3aWR0aCkge1xuICAgIGFzc2VydCh0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInICYmIHdpZHRoID49IDApO1xuXG4gICAgdmFyIGJ5dGVzTmVlZGVkID0gTWF0aC5jZWlsKHdpZHRoIC8gMjYpIHwgMDtcbiAgICB2YXIgYml0c0xlZnQgPSB3aWR0aCAlIDI2O1xuXG4gICAgLy8gRXh0ZW5kIHRoZSBidWZmZXIgd2l0aCBsZWFkaW5nIHplcm9lc1xuICAgIHRoaXMuX2V4cGFuZChieXRlc05lZWRlZCk7XG5cbiAgICBpZiAoYml0c0xlZnQgPiAwKSB7XG4gICAgICBieXRlc05lZWRlZC0tO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjb21wbGV0ZSB3b3Jkc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXNOZWVkZWQ7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IH50aGlzLndvcmRzW2ldICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgcmVzaWR1ZVxuICAgIGlmIChiaXRzTGVmdCA+IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB+dGhpcy53b3Jkc1tpXSAmICgweDNmZmZmZmYgPj4gKDI2IC0gYml0c0xlZnQpKTtcbiAgICB9XG5cbiAgICAvLyBBbmQgcmVtb3ZlIGxlYWRpbmcgemVyb2VzXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubm90biA9IGZ1bmN0aW9uIG5vdG4gKHdpZHRoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih3aWR0aCk7XG4gIH07XG5cbiAgLy8gU2V0IGBiaXRgIG9mIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc2V0biA9IGZ1bmN0aW9uIHNldG4gKGJpdCwgdmFsKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXQgPT09ICdudW1iZXInICYmIGJpdCA+PSAwKTtcblxuICAgIHZhciBvZmYgPSAoYml0IC8gMjYpIHwgMDtcbiAgICB2YXIgd2JpdCA9IGJpdCAlIDI2O1xuXG4gICAgdGhpcy5fZXhwYW5kKG9mZiArIDEpO1xuXG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy53b3Jkc1tvZmZdID0gdGhpcy53b3Jkc1tvZmZdIHwgKDEgPDwgd2JpdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud29yZHNbb2ZmXSA9IHRoaXMud29yZHNbb2ZmXSAmIH4oMSA8PCB3Yml0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIEFkZCBgbnVtYCB0byBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlhZGQgPSBmdW5jdGlvbiBpYWRkIChudW0pIHtcbiAgICB2YXIgcjtcblxuICAgIC8vIG5lZ2F0aXZlICsgcG9zaXRpdmVcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiBudW0ubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgciA9IHRoaXMuaXN1YihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSBePSAxO1xuICAgICAgcmV0dXJuIHRoaXMuX25vcm1TaWduKCk7XG5cbiAgICAvLyBwb3NpdGl2ZSArIG5lZ2F0aXZlXG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMDtcbiAgICAgIHIgPSB0aGlzLmlzdWIobnVtKTtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gci5fbm9ybVNpZ24oKTtcbiAgICB9XG5cbiAgICAvLyBhLmxlbmd0aCA+IGIubGVuZ3RoXG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gbnVtO1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgKGIud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgICBjYXJyeSA9IHIgPj4+IDI2O1xuICAgIH1cbiAgICBmb3IgKDsgY2FycnkgIT09IDAgJiYgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgIGNhcnJ5ID0gciA+Pj4gMjY7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggPSBhLmxlbmd0aDtcbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGhdID0gY2Fycnk7XG4gICAgICB0aGlzLmxlbmd0aCsrO1xuICAgIC8vIENvcHkgdGhlIHJlc3Qgb2YgdGhlIHdvcmRzXG4gICAgfSBlbHNlIGlmIChhICE9PSB0aGlzKSB7XG4gICAgICBmb3IgKDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGEud29yZHNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgLy8gQWRkIGBudW1gIHRvIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChudW0pIHtcbiAgICB2YXIgcmVzO1xuICAgIGlmIChudW0ubmVnYXRpdmUgIT09IDAgJiYgdGhpcy5uZWdhdGl2ZSA9PT0gMCkge1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMDtcbiAgICAgIHJlcyA9IHRoaXMuc3ViKG51bSk7XG4gICAgICBudW0ubmVnYXRpdmUgXj0gMTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIGlmIChudW0ubmVnYXRpdmUgPT09IDAgJiYgdGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXMgPSBudW0uc3ViKHRoaXMpO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZChudW0pO1xuXG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlhZGQodGhpcyk7XG4gIH07XG5cbiAgLy8gU3VidHJhY3QgYG51bWAgZnJvbSBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLmlzdWIgPSBmdW5jdGlvbiBpc3ViIChudW0pIHtcbiAgICAvLyB0aGlzIC0gKC1udW0pID0gdGhpcyArIG51bVxuICAgIGlmIChudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIG51bS5uZWdhdGl2ZSA9IDA7XG4gICAgICB2YXIgciA9IHRoaXMuaWFkZChudW0pO1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiByLl9ub3JtU2lnbigpO1xuXG4gICAgLy8gLXRoaXMgLSBudW0gPSAtKHRoaXMgKyBudW0pXG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMuaWFkZChudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcy5fbm9ybVNpZ24oKTtcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50IGJvdGggbnVtYmVycyBhcmUgcG9zaXRpdmVcbiAgICB2YXIgY21wID0gdGhpcy5jbXAobnVtKTtcblxuICAgIC8vIE9wdGltaXphdGlvbiAtIHplcm9pZnlcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gYSA+IGJcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoY21wID4gMCkge1xuICAgICAgYSA9IHRoaXM7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBhID0gbnVtO1xuICAgICAgYiA9IHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHIgPSAoYS53b3Jkc1tpXSB8IDApIC0gKGIud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSByID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIGZvciAoOyBjYXJyeSAhPT0gMCAmJiBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgciA9IChhLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gciA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIC8vIENvcHkgcmVzdCBvZiB0aGUgd29yZHNcbiAgICBpZiAoY2FycnkgPT09IDAgJiYgaSA8IGEubGVuZ3RoICYmIGEgIT09IHRoaXMpIHtcbiAgICAgIGZvciAoOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gYS53b3Jkc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoLCBpKTtcblxuICAgIGlmIChhICE9PSB0aGlzKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcCgpO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IGBudW1gIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiBzdWIgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1YihudW0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHNtYWxsTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgb3V0Lm5lZ2F0aXZlID0gbnVtLm5lZ2F0aXZlIF4gc2VsZi5uZWdhdGl2ZTtcbiAgICB2YXIgbGVuID0gKHNlbGYubGVuZ3RoICsgbnVtLmxlbmd0aCkgfCAwO1xuICAgIG91dC5sZW5ndGggPSBsZW47XG4gICAgbGVuID0gKGxlbiAtIDEpIHwgMDtcblxuICAgIC8vIFBlZWwgb25lIGl0ZXJhdGlvbiAoY29tcGlsZXIgY2FuJ3QgZG8gaXQsIGJlY2F1c2Ugb2YgY29kZSBjb21wbGV4aXR5KVxuICAgIHZhciBhID0gc2VsZi53b3Jkc1swXSB8IDA7XG4gICAgdmFyIGIgPSBudW0ud29yZHNbMF0gfCAwO1xuICAgIHZhciByID0gYSAqIGI7XG5cbiAgICB2YXIgbG8gPSByICYgMHgzZmZmZmZmO1xuICAgIHZhciBjYXJyeSA9IChyIC8gMHg0MDAwMDAwKSB8IDA7XG4gICAgb3V0LndvcmRzWzBdID0gbG87XG5cbiAgICBmb3IgKHZhciBrID0gMTsgayA8IGxlbjsgaysrKSB7XG4gICAgICAvLyBTdW0gYWxsIHdvcmRzIHdpdGggdGhlIHNhbWUgYGkgKyBqID0ga2AgYW5kIGFjY3VtdWxhdGUgYG5jYXJyeWAsXG4gICAgICAvLyBub3RlIHRoYXQgbmNhcnJ5IGNvdWxkIGJlID49IDB4M2ZmZmZmZlxuICAgICAgdmFyIG5jYXJyeSA9IGNhcnJ5ID4+PiAyNjtcbiAgICAgIHZhciByd29yZCA9IGNhcnJ5ICYgMHgzZmZmZmZmO1xuICAgICAgdmFyIG1heEogPSBNYXRoLm1pbihrLCBudW0ubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgayAtIHNlbGYubGVuZ3RoICsgMSk7IGogPD0gbWF4SjsgaisrKSB7XG4gICAgICAgIHZhciBpID0gKGsgLSBqKSB8IDA7XG4gICAgICAgIGEgPSBzZWxmLndvcmRzW2ldIHwgMDtcbiAgICAgICAgYiA9IG51bS53b3Jkc1tqXSB8IDA7XG4gICAgICAgIHIgPSBhICogYiArIHJ3b3JkO1xuICAgICAgICBuY2FycnkgKz0gKHIgLyAweDQwMDAwMDApIHwgMDtcbiAgICAgICAgcndvcmQgPSByICYgMHgzZmZmZmZmO1xuICAgICAgfVxuICAgICAgb3V0LndvcmRzW2tdID0gcndvcmQgfCAwO1xuICAgICAgY2FycnkgPSBuY2FycnkgfCAwO1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG91dC53b3Jkc1trXSA9IGNhcnJ5IHwgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0Lmxlbmd0aC0tO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQuc3RyaXAoKTtcbiAgfVxuXG4gIC8vIFRPRE8oaW5kdXRueSk6IGl0IG1heSBiZSByZWFzb25hYmxlIHRvIG9taXQgaXQgZm9yIHVzZXJzIHdobyBkb24ndCBuZWVkXG4gIC8vIHRvIHdvcmsgd2l0aCAyNTYtYml0IG51bWJlcnMsIG90aGVyd2lzZSBpdCBnaXZlcyAyMCUgaW1wcm92ZW1lbnQgZm9yIDI1Ni1iaXRcbiAgLy8gbXVsdGlwbGljYXRpb24gKGxpa2UgZWxsaXB0aWMgc2VjcDI1NmsxKS5cbiAgdmFyIGNvbWIxME11bFRvID0gZnVuY3Rpb24gY29tYjEwTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgdmFyIGEgPSBzZWxmLndvcmRzO1xuICAgIHZhciBiID0gbnVtLndvcmRzO1xuICAgIHZhciBvID0gb3V0LndvcmRzO1xuICAgIHZhciBjID0gMDtcbiAgICB2YXIgbG87XG4gICAgdmFyIG1pZDtcbiAgICB2YXIgaGk7XG4gICAgdmFyIGEwID0gYVswXSB8IDA7XG4gICAgdmFyIGFsMCA9IGEwICYgMHgxZmZmO1xuICAgIHZhciBhaDAgPSBhMCA+Pj4gMTM7XG4gICAgdmFyIGExID0gYVsxXSB8IDA7XG4gICAgdmFyIGFsMSA9IGExICYgMHgxZmZmO1xuICAgIHZhciBhaDEgPSBhMSA+Pj4gMTM7XG4gICAgdmFyIGEyID0gYVsyXSB8IDA7XG4gICAgdmFyIGFsMiA9IGEyICYgMHgxZmZmO1xuICAgIHZhciBhaDIgPSBhMiA+Pj4gMTM7XG4gICAgdmFyIGEzID0gYVszXSB8IDA7XG4gICAgdmFyIGFsMyA9IGEzICYgMHgxZmZmO1xuICAgIHZhciBhaDMgPSBhMyA+Pj4gMTM7XG4gICAgdmFyIGE0ID0gYVs0XSB8IDA7XG4gICAgdmFyIGFsNCA9IGE0ICYgMHgxZmZmO1xuICAgIHZhciBhaDQgPSBhNCA+Pj4gMTM7XG4gICAgdmFyIGE1ID0gYVs1XSB8IDA7XG4gICAgdmFyIGFsNSA9IGE1ICYgMHgxZmZmO1xuICAgIHZhciBhaDUgPSBhNSA+Pj4gMTM7XG4gICAgdmFyIGE2ID0gYVs2XSB8IDA7XG4gICAgdmFyIGFsNiA9IGE2ICYgMHgxZmZmO1xuICAgIHZhciBhaDYgPSBhNiA+Pj4gMTM7XG4gICAgdmFyIGE3ID0gYVs3XSB8IDA7XG4gICAgdmFyIGFsNyA9IGE3ICYgMHgxZmZmO1xuICAgIHZhciBhaDcgPSBhNyA+Pj4gMTM7XG4gICAgdmFyIGE4ID0gYVs4XSB8IDA7XG4gICAgdmFyIGFsOCA9IGE4ICYgMHgxZmZmO1xuICAgIHZhciBhaDggPSBhOCA+Pj4gMTM7XG4gICAgdmFyIGE5ID0gYVs5XSB8IDA7XG4gICAgdmFyIGFsOSA9IGE5ICYgMHgxZmZmO1xuICAgIHZhciBhaDkgPSBhOSA+Pj4gMTM7XG4gICAgdmFyIGIwID0gYlswXSB8IDA7XG4gICAgdmFyIGJsMCA9IGIwICYgMHgxZmZmO1xuICAgIHZhciBiaDAgPSBiMCA+Pj4gMTM7XG4gICAgdmFyIGIxID0gYlsxXSB8IDA7XG4gICAgdmFyIGJsMSA9IGIxICYgMHgxZmZmO1xuICAgIHZhciBiaDEgPSBiMSA+Pj4gMTM7XG4gICAgdmFyIGIyID0gYlsyXSB8IDA7XG4gICAgdmFyIGJsMiA9IGIyICYgMHgxZmZmO1xuICAgIHZhciBiaDIgPSBiMiA+Pj4gMTM7XG4gICAgdmFyIGIzID0gYlszXSB8IDA7XG4gICAgdmFyIGJsMyA9IGIzICYgMHgxZmZmO1xuICAgIHZhciBiaDMgPSBiMyA+Pj4gMTM7XG4gICAgdmFyIGI0ID0gYls0XSB8IDA7XG4gICAgdmFyIGJsNCA9IGI0ICYgMHgxZmZmO1xuICAgIHZhciBiaDQgPSBiNCA+Pj4gMTM7XG4gICAgdmFyIGI1ID0gYls1XSB8IDA7XG4gICAgdmFyIGJsNSA9IGI1ICYgMHgxZmZmO1xuICAgIHZhciBiaDUgPSBiNSA+Pj4gMTM7XG4gICAgdmFyIGI2ID0gYls2XSB8IDA7XG4gICAgdmFyIGJsNiA9IGI2ICYgMHgxZmZmO1xuICAgIHZhciBiaDYgPSBiNiA+Pj4gMTM7XG4gICAgdmFyIGI3ID0gYls3XSB8IDA7XG4gICAgdmFyIGJsNyA9IGI3ICYgMHgxZmZmO1xuICAgIHZhciBiaDcgPSBiNyA+Pj4gMTM7XG4gICAgdmFyIGI4ID0gYls4XSB8IDA7XG4gICAgdmFyIGJsOCA9IGI4ICYgMHgxZmZmO1xuICAgIHZhciBiaDggPSBiOCA+Pj4gMTM7XG4gICAgdmFyIGI5ID0gYls5XSB8IDA7XG4gICAgdmFyIGJsOSA9IGI5ICYgMHgxZmZmO1xuICAgIHZhciBiaDkgPSBiOSA+Pj4gMTM7XG5cbiAgICBvdXQubmVnYXRpdmUgPSBzZWxmLm5lZ2F0aXZlIF4gbnVtLm5lZ2F0aXZlO1xuICAgIG91dC5sZW5ndGggPSAxOTtcbiAgICAvKiBrID0gMCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMCwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwwLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgwLCBiaDApO1xuICAgIHZhciB3MCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzAgPj4+IDI2KSkgfCAwO1xuICAgIHcwICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMSwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwxLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgxLCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMSkpIHwgMDtcbiAgICB2YXIgdzEgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxID4+PiAyNikpIHwgMDtcbiAgICB3MSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDIgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDIsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMiwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMiwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmgyKSkgfCAwO1xuICAgIHZhciB3MiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzIgPj4+IDI2KSkgfCAwO1xuICAgIHcyICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsMywgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWwzLCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWgzLCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmgzKSkgfCAwO1xuICAgIHZhciB3MyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzMgPj4+IDI2KSkgfCAwO1xuICAgIHczICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNCwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw0LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg0LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNCkpIHwgMDtcbiAgICB2YXIgdzQgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc0ID4+PiAyNikpIHwgMDtcbiAgICB3NCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDUgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDUsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg1KSkgfCAwO1xuICAgIHZhciB3NSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzUgPj4+IDI2KSkgfCAwO1xuICAgIHc1ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNiwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw2LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg2LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg2KSkgfCAwO1xuICAgIHZhciB3NiA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzYgPj4+IDI2KSkgfCAwO1xuICAgIHc2ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gNyAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsNywgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw3LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg3LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNykpIHwgMDtcbiAgICB2YXIgdzcgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc3ID4+PiAyNikpIHwgMDtcbiAgICB3NyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDggKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDgsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOCwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg4KSkgfCAwO1xuICAgIHZhciB3OCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzggPj4+IDI2KSkgfCAwO1xuICAgIHc4ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gOSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwwKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDApO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDApKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDApO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmwxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsMSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoMSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMiwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwyLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDIsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDEsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMSwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgxLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgxLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwwLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDAsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMCwgYmg5KSkgfCAwO1xuICAgIHZhciB3OSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzkgPj4+IDI2KSkgfCAwO1xuICAgIHc5ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTAgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgxKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwxKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgxKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDIpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDIpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTAgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMCA+Pj4gMjYpKSB8IDA7XG4gICAgdzEwICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTEgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMik7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgyKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwyKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgyKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxMSA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzExID4+PiAyNikpIHwgMDtcbiAgICB3MTEgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxMiAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmwzKTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDMpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDMpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDMpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNSwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw1LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDUsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDQsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNCwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg0LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg0LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwzLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDMsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMywgYmg5KSkgfCAwO1xuICAgIHZhciB3MTIgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMiA+Pj4gMjYpKSB8IDA7XG4gICAgdzEyICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTMgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg0KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw0KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg0KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTMgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMyA+Pj4gMjYpKSB8IDA7XG4gICAgdzEzICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTQgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg1KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw1KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg1KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoOCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNCA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE0ID4+PiAyNikpIHwgMDtcbiAgICB3MTQgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxNSAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw2KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDYpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDYpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDYpO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsOCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw4LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDgsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDcsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNywgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg3LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg3LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw2LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDYsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNiwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTUgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNSA+Pj4gMjYpKSB8IDA7XG4gICAgdzE1ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTYgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNyk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg3KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw3KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg3KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg5KSkgfCAwO1xuICAgIHZhciB3MTYgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNiA+Pj4gMjYpKSB8IDA7XG4gICAgdzE2ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTcgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsOCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg4KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw4KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg4KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDkpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDkpKSB8IDA7XG4gICAgdmFyIHcxNyA9ICgoKGMgKyBsbykgfCAwKSArICgobWlkICYgMHgxZmZmKSA8PCAxMykpIHwgMDtcbiAgICBjID0gKCgoaGkgKyAobWlkID4+PiAxMykpIHwgMCkgKyAodzE3ID4+PiAyNikpIHwgMDtcbiAgICB3MTcgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAxOCAqL1xuICAgIGxvID0gTWF0aC5pbXVsKGFsOSwgYmw5KTtcbiAgICBtaWQgPSBNYXRoLmltdWwoYWw5LCBiaDkpO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg5LCBibDkpKSB8IDA7XG4gICAgaGkgPSBNYXRoLmltdWwoYWg5LCBiaDkpO1xuICAgIHZhciB3MTggPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxOCA+Pj4gMjYpKSB8IDA7XG4gICAgdzE4ICY9IDB4M2ZmZmZmZjtcbiAgICBvWzBdID0gdzA7XG4gICAgb1sxXSA9IHcxO1xuICAgIG9bMl0gPSB3MjtcbiAgICBvWzNdID0gdzM7XG4gICAgb1s0XSA9IHc0O1xuICAgIG9bNV0gPSB3NTtcbiAgICBvWzZdID0gdzY7XG4gICAgb1s3XSA9IHc3O1xuICAgIG9bOF0gPSB3ODtcbiAgICBvWzldID0gdzk7XG4gICAgb1sxMF0gPSB3MTA7XG4gICAgb1sxMV0gPSB3MTE7XG4gICAgb1sxMl0gPSB3MTI7XG4gICAgb1sxM10gPSB3MTM7XG4gICAgb1sxNF0gPSB3MTQ7XG4gICAgb1sxNV0gPSB3MTU7XG4gICAgb1sxNl0gPSB3MTY7XG4gICAgb1sxN10gPSB3MTc7XG4gICAgb1sxOF0gPSB3MTg7XG4gICAgaWYgKGMgIT09IDApIHtcbiAgICAgIG9bMTldID0gYztcbiAgICAgIG91dC5sZW5ndGgrKztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcblxuICAvLyBQb2x5ZmlsbCBjb21iXG4gIGlmICghTWF0aC5pbXVsKSB7XG4gICAgY29tYjEwTXVsVG8gPSBzbWFsbE11bFRvO1xuICB9XG5cbiAgZnVuY3Rpb24gYmlnTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgb3V0Lm5lZ2F0aXZlID0gbnVtLm5lZ2F0aXZlIF4gc2VsZi5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0gc2VsZi5sZW5ndGggKyBudW0ubGVuZ3RoO1xuXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICB2YXIgaG5jYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBvdXQubGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAvLyBTdW0gYWxsIHdvcmRzIHdpdGggdGhlIHNhbWUgYGkgKyBqID0ga2AgYW5kIGFjY3VtdWxhdGUgYG5jYXJyeWAsXG4gICAgICAvLyBub3RlIHRoYXQgbmNhcnJ5IGNvdWxkIGJlID49IDB4M2ZmZmZmZlxuICAgICAgdmFyIG5jYXJyeSA9IGhuY2Fycnk7XG4gICAgICBobmNhcnJ5ID0gMDtcbiAgICAgIHZhciByd29yZCA9IGNhcnJ5ICYgMHgzZmZmZmZmO1xuICAgICAgdmFyIG1heEogPSBNYXRoLm1pbihrLCBudW0ubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgayAtIHNlbGYubGVuZ3RoICsgMSk7IGogPD0gbWF4SjsgaisrKSB7XG4gICAgICAgIHZhciBpID0gayAtIGo7XG4gICAgICAgIHZhciBhID0gc2VsZi53b3Jkc1tpXSB8IDA7XG4gICAgICAgIHZhciBiID0gbnVtLndvcmRzW2pdIHwgMDtcbiAgICAgICAgdmFyIHIgPSBhICogYjtcblxuICAgICAgICB2YXIgbG8gPSByICYgMHgzZmZmZmZmO1xuICAgICAgICBuY2FycnkgPSAobmNhcnJ5ICsgKChyIC8gMHg0MDAwMDAwKSB8IDApKSB8IDA7XG4gICAgICAgIGxvID0gKGxvICsgcndvcmQpIHwgMDtcbiAgICAgICAgcndvcmQgPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICAgICAgbmNhcnJ5ID0gKG5jYXJyeSArIChsbyA+Pj4gMjYpKSB8IDA7XG5cbiAgICAgICAgaG5jYXJyeSArPSBuY2FycnkgPj4+IDI2O1xuICAgICAgICBuY2FycnkgJj0gMHgzZmZmZmZmO1xuICAgICAgfVxuICAgICAgb3V0LndvcmRzW2tdID0gcndvcmQ7XG4gICAgICBjYXJyeSA9IG5jYXJyeTtcbiAgICAgIG5jYXJyeSA9IGhuY2Fycnk7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgb3V0LndvcmRzW2tdID0gY2Fycnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dC5sZW5ndGgtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH1cblxuICBmdW5jdGlvbiBqdW1ib011bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIHZhciBmZnRtID0gbmV3IEZGVE0oKTtcbiAgICByZXR1cm4gZmZ0bS5tdWxwKHNlbGYsIG51bSwgb3V0KTtcbiAgfVxuXG4gIEJOLnByb3RvdHlwZS5tdWxUbyA9IGZ1bmN0aW9uIG11bFRvIChudW0sIG91dCkge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoICsgbnVtLmxlbmd0aDtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEwICYmIG51bS5sZW5ndGggPT09IDEwKSB7XG4gICAgICByZXMgPSBjb21iMTBNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIGlmIChsZW4gPCA2Mykge1xuICAgICAgcmVzID0gc21hbGxNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIGlmIChsZW4gPCAxMDI0KSB7XG4gICAgICByZXMgPSBiaWdNdWxUbyh0aGlzLCBudW0sIG91dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IGp1bWJvTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gQ29vbGV5LVR1a2V5IGFsZ29yaXRobSBmb3IgRkZUXG4gIC8vIHNsaWdodGx5IHJldmlzaXRlZCB0byByZWx5IG9uIGxvb3BpbmcgaW5zdGVhZCBvZiByZWN1cnNpb25cblxuICBmdW5jdGlvbiBGRlRNICh4LCB5KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9XG5cbiAgRkZUTS5wcm90b3R5cGUubWFrZVJCVCA9IGZ1bmN0aW9uIG1ha2VSQlQgKE4pIHtcbiAgICB2YXIgdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgbCA9IEJOLnByb3RvdHlwZS5fY291bnRCaXRzKE4pIC0gMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdFtpXSA9IHRoaXMucmV2QmluKGksIGwsIE4pO1xuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIC8vIFJldHVybnMgYmluYXJ5LXJldmVyc2VkIHJlcHJlc2VudGF0aW9uIG9mIGB4YFxuICBGRlRNLnByb3RvdHlwZS5yZXZCaW4gPSBmdW5jdGlvbiByZXZCaW4gKHgsIGwsIE4pIHtcbiAgICBpZiAoeCA9PT0gMCB8fCB4ID09PSBOIC0gMSkgcmV0dXJuIHg7XG5cbiAgICB2YXIgcmIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICByYiB8PSAoeCAmIDEpIDw8IChsIC0gaSAtIDEpO1xuICAgICAgeCA+Pj0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmI7XG4gIH07XG5cbiAgLy8gUGVyZm9ybXMgXCJ0d2VlZGxpbmdcIiBwaGFzZSwgdGhlcmVmb3JlICdlbXVsYXRpbmcnXG4gIC8vIGJlaGF2aW91ciBvZiB0aGUgcmVjdXJzaXZlIGFsZ29yaXRobVxuICBGRlRNLnByb3RvdHlwZS5wZXJtdXRlID0gZnVuY3Rpb24gcGVybXV0ZSAocmJ0LCByd3MsIGl3cywgcnR3cywgaXR3cywgTikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBydHdzW2ldID0gcndzW3JidFtpXV07XG4gICAgICBpdHdzW2ldID0gaXdzW3JidFtpXV07XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIHRyYW5zZm9ybSAocndzLCBpd3MsIHJ0d3MsIGl0d3MsIE4sIHJidCkge1xuICAgIHRoaXMucGVybXV0ZShyYnQsIHJ3cywgaXdzLCBydHdzLCBpdHdzLCBOKTtcblxuICAgIGZvciAodmFyIHMgPSAxOyBzIDwgTjsgcyA8PD0gMSkge1xuICAgICAgdmFyIGwgPSBzIDw8IDE7XG5cbiAgICAgIHZhciBydHdkZiA9IE1hdGguY29zKDIgKiBNYXRoLlBJIC8gbCk7XG4gICAgICB2YXIgaXR3ZGYgPSBNYXRoLnNpbigyICogTWF0aC5QSSAvIGwpO1xuXG4gICAgICBmb3IgKHZhciBwID0gMDsgcCA8IE47IHAgKz0gbCkge1xuICAgICAgICB2YXIgcnR3ZGZfID0gcnR3ZGY7XG4gICAgICAgIHZhciBpdHdkZl8gPSBpdHdkZjtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHM7IGorKykge1xuICAgICAgICAgIHZhciByZSA9IHJ0d3NbcCArIGpdO1xuICAgICAgICAgIHZhciBpZSA9IGl0d3NbcCArIGpdO1xuXG4gICAgICAgICAgdmFyIHJvID0gcnR3c1twICsgaiArIHNdO1xuICAgICAgICAgIHZhciBpbyA9IGl0d3NbcCArIGogKyBzXTtcblxuICAgICAgICAgIHZhciByeCA9IHJ0d2RmXyAqIHJvIC0gaXR3ZGZfICogaW87XG5cbiAgICAgICAgICBpbyA9IHJ0d2RmXyAqIGlvICsgaXR3ZGZfICogcm87XG4gICAgICAgICAgcm8gPSByeDtcblxuICAgICAgICAgIHJ0d3NbcCArIGpdID0gcmUgKyBybztcbiAgICAgICAgICBpdHdzW3AgKyBqXSA9IGllICsgaW87XG5cbiAgICAgICAgICBydHdzW3AgKyBqICsgc10gPSByZSAtIHJvO1xuICAgICAgICAgIGl0d3NbcCArIGogKyBzXSA9IGllIC0gaW87XG5cbiAgICAgICAgICAvKiBqc2hpbnQgbWF4ZGVwdGggOiBmYWxzZSAqL1xuICAgICAgICAgIGlmIChqICE9PSBsKSB7XG4gICAgICAgICAgICByeCA9IHJ0d2RmICogcnR3ZGZfIC0gaXR3ZGYgKiBpdHdkZl87XG5cbiAgICAgICAgICAgIGl0d2RmXyA9IHJ0d2RmICogaXR3ZGZfICsgaXR3ZGYgKiBydHdkZl87XG4gICAgICAgICAgICBydHdkZl8gPSByeDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2IgPSBmdW5jdGlvbiBndWVzc0xlbjEzYiAobiwgbSkge1xuICAgIHZhciBOID0gTWF0aC5tYXgobSwgbikgfCAxO1xuICAgIHZhciBvZGQgPSBOICYgMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yIChOID0gTiAvIDIgfCAwOyBOOyBOID0gTiA+Pj4gMSkge1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiAxIDw8IGkgKyAxICsgb2RkO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmNvbmp1Z2F0ZSA9IGZ1bmN0aW9uIGNvbmp1Z2F0ZSAocndzLCBpd3MsIE4pIHtcbiAgICBpZiAoTiA8PSAxKSByZXR1cm47XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE4gLyAyOyBpKyspIHtcbiAgICAgIHZhciB0ID0gcndzW2ldO1xuXG4gICAgICByd3NbaV0gPSByd3NbTiAtIGkgLSAxXTtcbiAgICAgIHJ3c1tOIC0gaSAtIDFdID0gdDtcblxuICAgICAgdCA9IGl3c1tpXTtcblxuICAgICAgaXdzW2ldID0gLWl3c1tOIC0gaSAtIDFdO1xuICAgICAgaXdzW04gLSBpIC0gMV0gPSAtdDtcbiAgICB9XG4gIH07XG5cbiAgRkZUTS5wcm90b3R5cGUubm9ybWFsaXplMTNiID0gZnVuY3Rpb24gbm9ybWFsaXplMTNiICh3cywgTikge1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOIC8gMjsgaSsrKSB7XG4gICAgICB2YXIgdyA9IE1hdGgucm91bmQod3NbMiAqIGkgKyAxXSAvIE4pICogMHgyMDAwICtcbiAgICAgICAgTWF0aC5yb3VuZCh3c1syICogaV0gLyBOKSArXG4gICAgICAgIGNhcnJ5O1xuXG4gICAgICB3c1tpXSA9IHcgJiAweDNmZmZmZmY7XG5cbiAgICAgIGlmICh3IDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIGNhcnJ5ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcnJ5ID0gdyAvIDB4NDAwMDAwMCB8IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHdzO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmNvbnZlcnQxM2IgPSBmdW5jdGlvbiBjb252ZXJ0MTNiICh3cywgbGVuLCByd3MsIE4pIHtcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNhcnJ5ID0gY2FycnkgKyAod3NbaV0gfCAwKTtcblxuICAgICAgcndzWzIgKiBpXSA9IGNhcnJ5ICYgMHgxZmZmOyBjYXJyeSA9IGNhcnJ5ID4+PiAxMztcbiAgICAgIHJ3c1syICogaSArIDFdID0gY2FycnkgJiAweDFmZmY7IGNhcnJ5ID0gY2FycnkgPj4+IDEzO1xuICAgIH1cblxuICAgIC8vIFBhZCB3aXRoIHplcm9lc1xuICAgIGZvciAoaSA9IDIgKiBsZW47IGkgPCBOOyArK2kpIHtcbiAgICAgIHJ3c1tpXSA9IDA7XG4gICAgfVxuXG4gICAgYXNzZXJ0KGNhcnJ5ID09PSAwKTtcbiAgICBhc3NlcnQoKGNhcnJ5ICYgfjB4MWZmZikgPT09IDApO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLnN0dWIgPSBmdW5jdGlvbiBzdHViIChOKSB7XG4gICAgdmFyIHBoID0gbmV3IEFycmF5KE4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBwaFtpXSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBoO1xuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLm11bHAgPSBmdW5jdGlvbiBtdWxwICh4LCB5LCBvdXQpIHtcbiAgICB2YXIgTiA9IDIgKiB0aGlzLmd1ZXNzTGVuMTNiKHgubGVuZ3RoLCB5Lmxlbmd0aCk7XG5cbiAgICB2YXIgcmJ0ID0gdGhpcy5tYWtlUkJUKE4pO1xuXG4gICAgdmFyIF8gPSB0aGlzLnN0dWIoTik7XG5cbiAgICB2YXIgcndzID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciByd3N0ID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBpd3N0ID0gbmV3IEFycmF5KE4pO1xuXG4gICAgdmFyIG5yd3MgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIG5yd3N0ID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBuaXdzdCA9IG5ldyBBcnJheShOKTtcblxuICAgIHZhciBybXdzID0gb3V0LndvcmRzO1xuICAgIHJtd3MubGVuZ3RoID0gTjtcblxuICAgIHRoaXMuY29udmVydDEzYih4LndvcmRzLCB4Lmxlbmd0aCwgcndzLCBOKTtcbiAgICB0aGlzLmNvbnZlcnQxM2IoeS53b3JkcywgeS5sZW5ndGgsIG5yd3MsIE4pO1xuXG4gICAgdGhpcy50cmFuc2Zvcm0ocndzLCBfLCByd3N0LCBpd3N0LCBOLCByYnQpO1xuICAgIHRoaXMudHJhbnNmb3JtKG5yd3MsIF8sIG5yd3N0LCBuaXdzdCwgTiwgcmJ0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICB2YXIgcnggPSByd3N0W2ldICogbnJ3c3RbaV0gLSBpd3N0W2ldICogbml3c3RbaV07XG4gICAgICBpd3N0W2ldID0gcndzdFtpXSAqIG5pd3N0W2ldICsgaXdzdFtpXSAqIG5yd3N0W2ldO1xuICAgICAgcndzdFtpXSA9IHJ4O1xuICAgIH1cblxuICAgIHRoaXMuY29uanVnYXRlKHJ3c3QsIGl3c3QsIE4pO1xuICAgIHRoaXMudHJhbnNmb3JtKHJ3c3QsIGl3c3QsIHJtd3MsIF8sIE4sIHJidCk7XG4gICAgdGhpcy5jb25qdWdhdGUocm13cywgXywgTik7XG4gICAgdGhpcy5ub3JtYWxpemUxM2Iocm13cywgTik7XG5cbiAgICBvdXQubmVnYXRpdmUgPSB4Lm5lZ2F0aXZlIF4geS5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0geC5sZW5ndGggKyB5Lmxlbmd0aDtcbiAgICByZXR1cm4gb3V0LnN0cmlwKCk7XG4gIH07XG5cbiAgLy8gTXVsdGlwbHkgYHRoaXNgIGJ5IGBudW1gXG4gIEJOLnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwgKG51bSkge1xuICAgIHZhciBvdXQgPSBuZXcgQk4obnVsbCk7XG4gICAgb3V0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoICsgbnVtLmxlbmd0aCk7XG4gICAgcmV0dXJuIHRoaXMubXVsVG8obnVtLCBvdXQpO1xuICB9O1xuXG4gIC8vIE11bHRpcGx5IGVtcGxveWluZyBGRlRcbiAgQk4ucHJvdG90eXBlLm11bGYgPSBmdW5jdGlvbiBtdWxmIChudW0pIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJOKG51bGwpO1xuICAgIG91dC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCArIG51bS5sZW5ndGgpO1xuICAgIHJldHVybiBqdW1ib011bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgfTtcblxuICAvLyBJbi1wbGFjZSBNdWx0aXBsaWNhdGlvblxuICBCTi5wcm90b3R5cGUuaW11bCA9IGZ1bmN0aW9uIGltdWwgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkubXVsVG8obnVtLCB0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW11bG4gPSBmdW5jdGlvbiBpbXVsbiAobnVtKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBudW0gPT09ICdudW1iZXInKTtcbiAgICBhc3NlcnQobnVtIDwgMHg0MDAwMDAwKTtcblxuICAgIC8vIENhcnJ5XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gKHRoaXMud29yZHNbaV0gfCAwKSAqIG51bTtcbiAgICAgIHZhciBsbyA9ICh3ICYgMHgzZmZmZmZmKSArIChjYXJyeSAmIDB4M2ZmZmZmZik7XG4gICAgICBjYXJyeSA+Pj0gMjY7XG4gICAgICBjYXJyeSArPSAodyAvIDB4NDAwMDAwMCkgfCAwO1xuICAgICAgLy8gTk9URTogbG8gaXMgMjdiaXQgbWF4aW11bVxuICAgICAgY2FycnkgKz0gbG8gPj4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGxvICYgMHgzZmZmZmZmO1xuICAgIH1cblxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubXVsbiA9IGZ1bmN0aW9uIG11bG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW11bG4obnVtKTtcbiAgfTtcblxuICAvLyBgdGhpc2AgKiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnNxciA9IGZ1bmN0aW9uIHNxciAoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsKHRoaXMpO1xuICB9O1xuXG4gIC8vIGB0aGlzYCAqIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXNxciA9IGZ1bmN0aW9uIGlzcXIgKCkge1xuICAgIHJldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKTtcbiAgfTtcblxuICAvLyBNYXRoLnBvdyhgdGhpc2AsIGBudW1gKVxuICBCTi5wcm90b3R5cGUucG93ID0gZnVuY3Rpb24gcG93IChudW0pIHtcbiAgICB2YXIgdyA9IHRvQml0QXJyYXkobnVtKTtcbiAgICBpZiAody5sZW5ndGggPT09IDApIHJldHVybiBuZXcgQk4oMSk7XG5cbiAgICAvLyBTa2lwIGxlYWRpbmcgemVyb2VzXG4gICAgdmFyIHJlcyA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3Lmxlbmd0aDsgaSsrLCByZXMgPSByZXMuc3FyKCkpIHtcbiAgICAgIGlmICh3W2ldICE9PSAwKSBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoKytpIDwgdy5sZW5ndGgpIHtcbiAgICAgIGZvciAodmFyIHEgPSByZXMuc3FyKCk7IGkgPCB3Lmxlbmd0aDsgaSsrLCBxID0gcS5zcXIoKSkge1xuICAgICAgICBpZiAod1tpXSA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgcmVzID0gcmVzLm11bChxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIFNoaWZ0LWxlZnQgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1c2hsbiA9IGZ1bmN0aW9uIGl1c2hsbiAoYml0cykge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgciA9IGJpdHMgJSAyNjtcbiAgICB2YXIgcyA9IChiaXRzIC0gcikgLyAyNjtcbiAgICB2YXIgY2FycnlNYXNrID0gKDB4M2ZmZmZmZiA+Pj4gKDI2IC0gcikpIDw8ICgyNiAtIHIpO1xuICAgIHZhciBpO1xuXG4gICAgaWYgKHIgIT09IDApIHtcbiAgICAgIHZhciBjYXJyeSA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuZXdDYXJyeSA9IHRoaXMud29yZHNbaV0gJiBjYXJyeU1hc2s7XG4gICAgICAgIHZhciBjID0gKCh0aGlzLndvcmRzW2ldIHwgMCkgLSBuZXdDYXJyeSkgPDwgcjtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IGMgfCBjYXJyeTtcbiAgICAgICAgY2FycnkgPSBuZXdDYXJyeSA+Pj4gKDI2IC0gcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYXJyeSkge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gY2Fycnk7XG4gICAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHMgIT09IDApIHtcbiAgICAgIGZvciAoaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgc10gPSB0aGlzLndvcmRzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgczsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSAwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxlbmd0aCArPSBzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzaGxuID0gZnVuY3Rpb24gaXNobG4gKGJpdHMpIHtcbiAgICAvLyBUT0RPKGluZHV0bnkpOiBpbXBsZW1lbnQgbWVcbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVzaGxuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LXJpZ2h0IGluLXBsYWNlXG4gIC8vIE5PVEU6IGBoaW50YCBpcyBhIGxvd2VzdCBiaXQgYmVmb3JlIHRyYWlsaW5nIHplcm9lc1xuICAvLyBOT1RFOiBpZiBgZXh0ZW5kZWRgIGlzIHByZXNlbnQgLSBpdCB3aWxsIGJlIGZpbGxlZCB3aXRoIGRlc3Ryb3llZCBiaXRzXG4gIEJOLnByb3RvdHlwZS5pdXNocm4gPSBmdW5jdGlvbiBpdXNocm4gKGJpdHMsIGhpbnQsIGV4dGVuZGVkKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXRzID09PSAnbnVtYmVyJyAmJiBiaXRzID49IDApO1xuICAgIHZhciBoO1xuICAgIGlmIChoaW50KSB7XG4gICAgICBoID0gKGhpbnQgLSAoaGludCAlIDI2KSkgLyAyNjtcbiAgICB9IGVsc2Uge1xuICAgICAgaCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHIgPSBiaXRzICUgMjY7XG4gICAgdmFyIHMgPSBNYXRoLm1pbigoYml0cyAtIHIpIC8gMjYsIHRoaXMubGVuZ3RoKTtcbiAgICB2YXIgbWFzayA9IDB4M2ZmZmZmZiBeICgoMHgzZmZmZmZmID4+PiByKSA8PCByKTtcbiAgICB2YXIgbWFza2VkV29yZHMgPSBleHRlbmRlZDtcblxuICAgIGggLT0gcztcbiAgICBoID0gTWF0aC5tYXgoMCwgaCk7XG5cbiAgICAvLyBFeHRlbmRlZCBtb2RlLCBjb3B5IG1hc2tlZCBwYXJ0XG4gICAgaWYgKG1hc2tlZFdvcmRzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgICBtYXNrZWRXb3Jkcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaV07XG4gICAgICB9XG4gICAgICBtYXNrZWRXb3Jkcy5sZW5ndGggPSBzO1xuICAgIH1cblxuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAvLyBOby1vcCwgd2Ugc2hvdWxkIG5vdCBtb3ZlIGFueXRoaW5nIGF0IGFsbFxuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPiBzKSB7XG4gICAgICB0aGlzLmxlbmd0aCAtPSBzO1xuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaSArIHNdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwICYmIChjYXJyeSAhPT0gMCB8fCBpID49IGgpOyBpLS0pIHtcbiAgICAgIHZhciB3b3JkID0gdGhpcy53b3Jkc1tpXSB8IDA7XG4gICAgICB0aGlzLndvcmRzW2ldID0gKGNhcnJ5IDw8ICgyNiAtIHIpKSB8ICh3b3JkID4+PiByKTtcbiAgICAgIGNhcnJ5ID0gd29yZCAmIG1hc2s7XG4gICAgfVxuXG4gICAgLy8gUHVzaCBjYXJyaWVkIGJpdHMgYXMgYSBtYXNrXG4gICAgaWYgKG1hc2tlZFdvcmRzICYmIGNhcnJ5ICE9PSAwKSB7XG4gICAgICBtYXNrZWRXb3Jkcy53b3Jkc1ttYXNrZWRXb3Jkcy5sZW5ndGgrK10gPSBjYXJyeTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgdGhpcy5sZW5ndGggPSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzaHJuID0gZnVuY3Rpb24gaXNocm4gKGJpdHMsIGhpbnQsIGV4dGVuZGVkKSB7XG4gICAgLy8gVE9ETyhpbmR1dG55KTogaW1wbGVtZW50IG1lXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1c2hybihiaXRzLCBoaW50LCBleHRlbmRlZCk7XG4gIH07XG5cbiAgLy8gU2hpZnQtbGVmdFxuICBCTi5wcm90b3R5cGUuc2hsbiA9IGZ1bmN0aW9uIHNobG4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGJpdHMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51c2hsbiA9IGZ1bmN0aW9uIHVzaGxuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYml0cyk7XG4gIH07XG5cbiAgLy8gU2hpZnQtcmlnaHRcbiAgQk4ucHJvdG90eXBlLnNocm4gPSBmdW5jdGlvbiBzaHJuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiaXRzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXNocm4gPSBmdW5jdGlvbiB1c2hybiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFRlc3QgaWYgbiBiaXQgaXMgc2V0XG4gIEJOLnByb3RvdHlwZS50ZXN0biA9IGZ1bmN0aW9uIHRlc3RuIChiaXQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdCA9PT0gJ251bWJlcicgJiYgYml0ID49IDApO1xuICAgIHZhciByID0gYml0ICUgMjY7XG4gICAgdmFyIHMgPSAoYml0IC0gcikgLyAyNjtcbiAgICB2YXIgcSA9IDEgPDwgcjtcblxuICAgIC8vIEZhc3QgY2FzZTogYml0IGlzIG11Y2ggaGlnaGVyIHRoYW4gYWxsIGV4aXN0aW5nIHdvcmRzXG4gICAgaWYgKHRoaXMubGVuZ3RoIDw9IHMpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGJpdCBhbmQgcmV0dXJuXG4gICAgdmFyIHcgPSB0aGlzLndvcmRzW3NdO1xuXG4gICAgcmV0dXJuICEhKHcgJiBxKTtcbiAgfTtcblxuICAvLyBSZXR1cm4gb25seSBsb3dlcnMgYml0cyBvZiBudW1iZXIgKGluLXBsYWNlKVxuICBCTi5wcm90b3R5cGUuaW1hc2tuID0gZnVuY3Rpb24gaW1hc2tuIChiaXRzKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXRzID09PSAnbnVtYmVyJyAmJiBiaXRzID49IDApO1xuICAgIHZhciByID0gYml0cyAlIDI2O1xuICAgIHZhciBzID0gKGJpdHMgLSByKSAvIDI2O1xuXG4gICAgYXNzZXJ0KHRoaXMubmVnYXRpdmUgPT09IDAsICdpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMnKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA8PSBzKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAociAhPT0gMCkge1xuICAgICAgcysrO1xuICAgIH1cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWluKHMsIHRoaXMubGVuZ3RoKTtcblxuICAgIGlmIChyICE9PSAwKSB7XG4gICAgICB2YXIgbWFzayA9IDB4M2ZmZmZmZiBeICgoMHgzZmZmZmZmID4+PiByKSA8PCByKTtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXSAmPSBtYXNrO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG9ubHkgbG93ZXJzIGJpdHMgb2YgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5tYXNrbiA9IGZ1bmN0aW9uIG1hc2tuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYml0cyk7XG4gIH07XG5cbiAgLy8gQWRkIHBsYWluIG51bWJlciBgbnVtYCB0byBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmlhZGRuID0gZnVuY3Rpb24gaWFkZG4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG4gICAgaWYgKG51bSA8IDApIHJldHVybiB0aGlzLmlzdWJuKC1udW0pO1xuXG4gICAgLy8gUG9zc2libGUgc2lnbiBjaGFuZ2VcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmICh0aGlzLndvcmRzWzBdIHwgMCkgPCBudW0pIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSA9IG51bSAtICh0aGlzLndvcmRzWzBdIHwgMCk7XG4gICAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlzdWJuKG51bSk7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRob3V0IGNoZWNrc1xuICAgIHJldHVybiB0aGlzLl9pYWRkbihudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faWFkZG4gPSBmdW5jdGlvbiBfaWFkZG4gKG51bSkge1xuICAgIHRoaXMud29yZHNbMF0gKz0gbnVtO1xuXG4gICAgLy8gQ2FycnlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoICYmIHRoaXMud29yZHNbaV0gPj0gMHg0MDAwMDAwOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gLT0gMHg0MDAwMDAwO1xuICAgICAgaWYgKGkgPT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndvcmRzW2kgKyAxXSsrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGgubWF4KHRoaXMubGVuZ3RoLCBpICsgMSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBTdWJ0cmFjdCBwbGFpbiBudW1iZXIgYG51bWAgZnJvbSBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLmlzdWJuID0gZnVuY3Rpb24gaXN1Ym4gKG51bSkge1xuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG4gICAgaWYgKG51bSA8IDApIHJldHVybiB0aGlzLmlhZGRuKC1udW0pO1xuXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgdGhpcy5pYWRkbihudW0pO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLndvcmRzWzBdIC09IG51bTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdIDwgMCkge1xuICAgICAgdGhpcy53b3Jkc1swXSA9IC10aGlzLndvcmRzWzBdO1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhcnJ5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoICYmIHRoaXMud29yZHNbaV0gPCAwOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSArPSAweDQwMDAwMDA7XG4gICAgICAgIHRoaXMud29yZHNbaSArIDFdIC09IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuYWRkbiA9IGZ1bmN0aW9uIGFkZG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZG4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuc3VibiA9IGZ1bmN0aW9uIHN1Ym4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFicyA9IGZ1bmN0aW9uIGlhYnMgKCkge1xuICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uIGFicyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pc2hsbnN1Ym11bCA9IGZ1bmN0aW9uIF9pc2hsbnN1Ym11bCAobnVtLCBtdWwsIHNoaWZ0KSB7XG4gICAgdmFyIGxlbiA9IG51bS5sZW5ndGggKyBzaGlmdDtcbiAgICB2YXIgaTtcblxuICAgIHRoaXMuX2V4cGFuZChsZW4pO1xuXG4gICAgdmFyIHc7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gKHRoaXMud29yZHNbaSArIHNoaWZ0XSB8IDApICsgY2Fycnk7XG4gICAgICB2YXIgcmlnaHQgPSAobnVtLndvcmRzW2ldIHwgMCkgKiBtdWw7XG4gICAgICB3IC09IHJpZ2h0ICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSAodyA+PiAyNikgLSAoKHJpZ2h0IC8gMHg0MDAwMDAwKSB8IDApO1xuICAgICAgdGhpcy53b3Jkc1tpICsgc2hpZnRdID0gdyAmIDB4M2ZmZmZmZjtcbiAgICB9XG4gICAgZm9yICg7IGkgPCB0aGlzLmxlbmd0aCAtIHNoaWZ0OyBpKyspIHtcbiAgICAgIHcgPSAodGhpcy53b3Jkc1tpICsgc2hpZnRdIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaSArIHNoaWZ0XSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuXG4gICAgaWYgKGNhcnJ5ID09PSAwKSByZXR1cm4gdGhpcy5zdHJpcCgpO1xuXG4gICAgLy8gU3VidHJhY3Rpb24gb3ZlcmZsb3dcbiAgICBhc3NlcnQoY2FycnkgPT09IC0xKTtcbiAgICBjYXJyeSA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHcgPSAtKHRoaXMud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSB3ID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX3dvcmREaXYgPSBmdW5jdGlvbiBfd29yZERpdiAobnVtLCBtb2RlKSB7XG4gICAgdmFyIHNoaWZ0ID0gdGhpcy5sZW5ndGggLSBudW0ubGVuZ3RoO1xuXG4gICAgdmFyIGEgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGIgPSBudW07XG5cbiAgICAvLyBOb3JtYWxpemVcbiAgICB2YXIgYmhpID0gYi53b3Jkc1tiLmxlbmd0aCAtIDFdIHwgMDtcbiAgICB2YXIgYmhpQml0cyA9IHRoaXMuX2NvdW50Qml0cyhiaGkpO1xuICAgIHNoaWZ0ID0gMjYgLSBiaGlCaXRzO1xuICAgIGlmIChzaGlmdCAhPT0gMCkge1xuICAgICAgYiA9IGIudXNobG4oc2hpZnQpO1xuICAgICAgYS5pdXNobG4oc2hpZnQpO1xuICAgICAgYmhpID0gYi53b3Jkc1tiLmxlbmd0aCAtIDFdIHwgMDtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHF1b3RpZW50XG4gICAgdmFyIG0gPSBhLmxlbmd0aCAtIGIubGVuZ3RoO1xuICAgIHZhciBxO1xuXG4gICAgaWYgKG1vZGUgIT09ICdtb2QnKSB7XG4gICAgICBxID0gbmV3IEJOKG51bGwpO1xuICAgICAgcS5sZW5ndGggPSBtICsgMTtcbiAgICAgIHEud29yZHMgPSBuZXcgQXJyYXkocS5sZW5ndGgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHEud29yZHNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkaWZmID0gYS5jbG9uZSgpLl9pc2hsbnN1Ym11bChiLCAxLCBtKTtcbiAgICBpZiAoZGlmZi5uZWdhdGl2ZSA9PT0gMCkge1xuICAgICAgYSA9IGRpZmY7XG4gICAgICBpZiAocSkge1xuICAgICAgICBxLndvcmRzW21dID0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gbSAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICB2YXIgcWogPSAoYS53b3Jkc1tiLmxlbmd0aCArIGpdIHwgMCkgKiAweDQwMDAwMDAgK1xuICAgICAgICAoYS53b3Jkc1tiLmxlbmd0aCArIGogLSAxXSB8IDApO1xuXG4gICAgICAvLyBOT1RFOiAocWogLyBiaGkpIGlzICgweDNmZmZmZmYgKiAweDQwMDAwMDAgKyAweDNmZmZmZmYpIC8gMHgyMDAwMDAwIG1heFxuICAgICAgLy8gKDB4N2ZmZmZmZilcbiAgICAgIHFqID0gTWF0aC5taW4oKHFqIC8gYmhpKSB8IDAsIDB4M2ZmZmZmZik7XG5cbiAgICAgIGEuX2lzaGxuc3VibXVsKGIsIHFqLCBqKTtcbiAgICAgIHdoaWxlIChhLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgIHFqLS07XG4gICAgICAgIGEubmVnYXRpdmUgPSAwO1xuICAgICAgICBhLl9pc2hsbnN1Ym11bChiLCAxLCBqKTtcbiAgICAgICAgaWYgKCFhLmlzWmVybygpKSB7XG4gICAgICAgICAgYS5uZWdhdGl2ZSBePSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocSkge1xuICAgICAgICBxLndvcmRzW2pdID0gcWo7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChxKSB7XG4gICAgICBxLnN0cmlwKCk7XG4gICAgfVxuICAgIGEuc3RyaXAoKTtcblxuICAgIC8vIERlbm9ybWFsaXplXG4gICAgaWYgKG1vZGUgIT09ICdkaXYnICYmIHNoaWZ0ICE9PSAwKSB7XG4gICAgICBhLml1c2hybihzaGlmdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpdjogcSB8fCBudWxsLFxuICAgICAgbW9kOiBhXG4gICAgfTtcbiAgfTtcblxuICAvLyBOT1RFOiAxKSBgbW9kZWAgY2FuIGJlIHNldCB0byBgbW9kYCB0byByZXF1ZXN0IG1vZCBvbmx5LFxuICAvLyAgICAgICB0byBgZGl2YCB0byByZXF1ZXN0IGRpdiBvbmx5LCBvciBiZSBhYnNlbnQgdG9cbiAgLy8gICAgICAgcmVxdWVzdCBib3RoIGRpdiAmIG1vZFxuICAvLyAgICAgICAyKSBgcG9zaXRpdmVgIGlzIHRydWUgaWYgdW5zaWduZWQgbW9kIGlzIHJlcXVlc3RlZFxuICBCTi5wcm90b3R5cGUuZGl2bW9kID0gZnVuY3Rpb24gZGl2bW9kIChudW0sIG1vZGUsIHBvc2l0aXZlKSB7XG4gICAgYXNzZXJ0KCFudW0uaXNaZXJvKCkpO1xuXG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogbmV3IEJOKDApLFxuICAgICAgICBtb2Q6IG5ldyBCTigwKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGl2LCBtb2QsIHJlcztcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiBudW0ubmVnYXRpdmUgPT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMubmVnKCkuZGl2bW9kKG51bSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgICBkaXYgPSByZXMuZGl2Lm5lZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSAhPT0gJ2RpdicpIHtcbiAgICAgICAgbW9kID0gcmVzLm1vZC5uZWcoKTtcbiAgICAgICAgaWYgKHBvc2l0aXZlICYmIG1vZC5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICAgIG1vZC5pYWRkKG51bSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiBkaXYsXG4gICAgICAgIG1vZDogbW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG51bS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgcmVzID0gdGhpcy5kaXZtb2QobnVtLm5lZygpLCBtb2RlKTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdtb2QnKSB7XG4gICAgICAgIGRpdiA9IHJlcy5kaXYubmVnKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogZGl2LFxuICAgICAgICBtb2Q6IHJlcy5tb2RcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLm5lZ2F0aXZlICYgbnVtLm5lZ2F0aXZlKSAhPT0gMCkge1xuICAgICAgcmVzID0gdGhpcy5uZWcoKS5kaXZtb2QobnVtLm5lZygpLCBtb2RlKTtcblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaXN1YihudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogcmVzLmRpdixcbiAgICAgICAgbW9kOiBtb2RcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQm90aCBudW1iZXJzIGFyZSBwb3NpdGl2ZSBhdCB0aGlzIHBvaW50XG5cbiAgICAvLyBTdHJpcCBib3RoIG51bWJlcnMgdG8gYXBwcm94aW1hdGUgc2hpZnQgdmFsdWVcbiAgICBpZiAobnVtLmxlbmd0aCA+IHRoaXMubGVuZ3RoIHx8IHRoaXMuY21wKG51bSkgPCAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IG5ldyBCTigwKSxcbiAgICAgICAgbW9kOiB0aGlzXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZlcnkgc2hvcnQgcmVkdWN0aW9uXG4gICAgaWYgKG51bS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmIChtb2RlID09PSAnZGl2Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpdjogdGhpcy5kaXZuKG51bS53b3Jkc1swXSksXG4gICAgICAgICAgbW9kOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RlID09PSAnbW9kJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpdjogbnVsbCxcbiAgICAgICAgICBtb2Q6IG5ldyBCTih0aGlzLm1vZG4obnVtLndvcmRzWzBdKSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiB0aGlzLmRpdm4obnVtLndvcmRzWzBdKSxcbiAgICAgICAgbW9kOiBuZXcgQk4odGhpcy5tb2RuKG51bS53b3Jkc1swXSkpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl93b3JkRGl2KG51bSwgbW9kZSk7XG4gIH07XG5cbiAgLy8gRmluZCBgdGhpc2AgLyBgbnVtYFxuICBCTi5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gZGl2IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXZtb2QobnVtLCAnZGl2JywgZmFsc2UpLmRpdjtcbiAgfTtcblxuICAvLyBGaW5kIGB0aGlzYCAlIGBudW1gXG4gIEJOLnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiBtb2QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmRpdm1vZChudW0sICdtb2QnLCBmYWxzZSkubW9kO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51bW9kID0gZnVuY3Rpb24gdW1vZCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGl2bW9kKG51bSwgJ21vZCcsIHRydWUpLm1vZDtcbiAgfTtcblxuICAvLyBGaW5kIFJvdW5kKGB0aGlzYCAvIGBudW1gKVxuICBCTi5wcm90b3R5cGUuZGl2Um91bmQgPSBmdW5jdGlvbiBkaXZSb3VuZCAobnVtKSB7XG4gICAgdmFyIGRtID0gdGhpcy5kaXZtb2QobnVtKTtcblxuICAgIC8vIEZhc3QgY2FzZSAtIGV4YWN0IGRpdmlzaW9uXG4gICAgaWYgKGRtLm1vZC5pc1plcm8oKSkgcmV0dXJuIGRtLmRpdjtcblxuICAgIHZhciBtb2QgPSBkbS5kaXYubmVnYXRpdmUgIT09IDAgPyBkbS5tb2QuaXN1YihudW0pIDogZG0ubW9kO1xuXG4gICAgdmFyIGhhbGYgPSBudW0udXNocm4oMSk7XG4gICAgdmFyIHIyID0gbnVtLmFuZGxuKDEpO1xuICAgIHZhciBjbXAgPSBtb2QuY21wKGhhbGYpO1xuXG4gICAgLy8gUm91bmQgZG93blxuICAgIGlmIChjbXAgPCAwIHx8IHIyID09PSAxICYmIGNtcCA9PT0gMCkgcmV0dXJuIGRtLmRpdjtcblxuICAgIC8vIFJvdW5kIHVwXG4gICAgcmV0dXJuIGRtLmRpdi5uZWdhdGl2ZSAhPT0gMCA/IGRtLmRpdi5pc3VibigxKSA6IGRtLmRpdi5pYWRkbigxKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubW9kbiA9IGZ1bmN0aW9uIG1vZG4gKG51bSkge1xuICAgIGFzc2VydChudW0gPD0gMHgzZmZmZmZmKTtcbiAgICB2YXIgcCA9ICgxIDw8IDI2KSAlIG51bTtcblxuICAgIHZhciBhY2MgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBhY2MgPSAocCAqIGFjYyArICh0aGlzLndvcmRzW2ldIHwgMCkpICUgbnVtO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH07XG5cbiAgLy8gSW4tcGxhY2UgZGl2aXNpb24gYnkgbnVtYmVyXG4gIEJOLnByb3RvdHlwZS5pZGl2biA9IGZ1bmN0aW9uIGlkaXZuIChudW0pIHtcbiAgICBhc3NlcnQobnVtIDw9IDB4M2ZmZmZmZik7XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgdyA9ICh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeSAqIDB4NDAwMDAwMDtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAodyAvIG51bSkgfCAwO1xuICAgICAgY2FycnkgPSB3ICUgbnVtO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmRpdm4gPSBmdW5jdGlvbiBkaXZuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVnY2QgPSBmdW5jdGlvbiBlZ2NkIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgeCA9IHRoaXM7XG4gICAgdmFyIHkgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoeC5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgeCA9IHgudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IHguY2xvbmUoKTtcbiAgICB9XG5cbiAgICAvLyBBICogeCArIEIgKiB5ID0geFxuICAgIHZhciBBID0gbmV3IEJOKDEpO1xuICAgIHZhciBCID0gbmV3IEJOKDApO1xuXG4gICAgLy8gQyAqIHggKyBEICogeSA9IHlcbiAgICB2YXIgQyA9IG5ldyBCTigwKTtcbiAgICB2YXIgRCA9IG5ldyBCTigxKTtcblxuICAgIHZhciBnID0gMDtcblxuICAgIHdoaWxlICh4LmlzRXZlbigpICYmIHkuaXNFdmVuKCkpIHtcbiAgICAgIHguaXVzaHJuKDEpO1xuICAgICAgeS5pdXNocm4oMSk7XG4gICAgICArK2c7XG4gICAgfVxuXG4gICAgdmFyIHlwID0geS5jbG9uZSgpO1xuICAgIHZhciB4cCA9IHguY2xvbmUoKTtcblxuICAgIHdoaWxlICgheC5pc1plcm8oKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKHgud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICB4Lml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoQS5pc09kZCgpIHx8IEIuaXNPZGQoKSkge1xuICAgICAgICAgICAgQS5pYWRkKHlwKTtcbiAgICAgICAgICAgIEIuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQS5pdXNocm4oMSk7XG4gICAgICAgICAgQi5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaiA9IDAsIGptID0gMTsgKHkud29yZHNbMF0gJiBqbSkgPT09IDAgJiYgaiA8IDI2OyArK2osIGptIDw8PSAxKTtcbiAgICAgIGlmIChqID4gMCkge1xuICAgICAgICB5Lml1c2hybihqKTtcbiAgICAgICAgd2hpbGUgKGotLSA+IDApIHtcbiAgICAgICAgICBpZiAoQy5pc09kZCgpIHx8IEQuaXNPZGQoKSkge1xuICAgICAgICAgICAgQy5pYWRkKHlwKTtcbiAgICAgICAgICAgIEQuaXN1Yih4cCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQy5pdXNocm4oMSk7XG4gICAgICAgICAgRC5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHguY21wKHkpID49IDApIHtcbiAgICAgICAgeC5pc3ViKHkpO1xuICAgICAgICBBLmlzdWIoQyk7XG4gICAgICAgIEIuaXN1YihEKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHkuaXN1Yih4KTtcbiAgICAgICAgQy5pc3ViKEEpO1xuICAgICAgICBELmlzdWIoQik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGE6IEMsXG4gICAgICBiOiBELFxuICAgICAgZ2NkOiB5Lml1c2hsbihnKVxuICAgIH07XG4gIH07XG5cbiAgLy8gVGhpcyBpcyByZWR1Y2VkIGluY2FybmF0aW9uIG9mIHRoZSBiaW5hcnkgRUVBXG4gIC8vIGFib3ZlLCBkZXNpZ25hdGVkIHRvIGludmVydCBtZW1iZXJzIG9mIHRoZVxuICAvLyBfcHJpbWVfIGZpZWxkcyBGKHApIGF0IGEgbWF4aW1hbCBzcGVlZFxuICBCTi5wcm90b3R5cGUuX2ludm1wID0gZnVuY3Rpb24gX2ludm1wIChwKSB7XG4gICAgYXNzZXJ0KHAubmVnYXRpdmUgPT09IDApO1xuICAgIGFzc2VydCghcC5pc1plcm8oKSk7XG5cbiAgICB2YXIgYSA9IHRoaXM7XG4gICAgdmFyIGIgPSBwLmNsb25lKCk7XG5cbiAgICBpZiAoYS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgYSA9IGEudW1vZChwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IGEuY2xvbmUoKTtcbiAgICB9XG5cbiAgICB2YXIgeDEgPSBuZXcgQk4oMSk7XG4gICAgdmFyIHgyID0gbmV3IEJOKDApO1xuXG4gICAgdmFyIGRlbHRhID0gYi5jbG9uZSgpO1xuXG4gICAgd2hpbGUgKGEuY21wbigxKSA+IDAgJiYgYi5jbXBuKDEpID4gMCkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGltID0gMTsgKGEud29yZHNbMF0gJiBpbSkgPT09IDAgJiYgaSA8IDI2OyArK2ksIGltIDw8PSAxKTtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBhLml1c2hybihpKTtcbiAgICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgICBpZiAoeDEuaXNPZGQoKSkge1xuICAgICAgICAgICAgeDEuaWFkZChkZWx0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgeDEuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqbSA9IDE7IChiLndvcmRzWzBdICYgam0pID09PSAwICYmIGogPCAyNjsgKytqLCBqbSA8PD0gMSk7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgYi5pdXNocm4oaik7XG4gICAgICAgIHdoaWxlIChqLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKHgyLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIHgyLmlhZGQoZGVsdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHgyLml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYS5jbXAoYikgPj0gMCkge1xuICAgICAgICBhLmlzdWIoYik7XG4gICAgICAgIHgxLmlzdWIoeDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYi5pc3ViKGEpO1xuICAgICAgICB4Mi5pc3ViKHgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzO1xuICAgIGlmIChhLmNtcG4oMSkgPT09IDApIHtcbiAgICAgIHJlcyA9IHgxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB4MjtcbiAgICB9XG5cbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZChwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5nY2QgPSBmdW5jdGlvbiBnY2QgKG51bSkge1xuICAgIGlmICh0aGlzLmlzWmVybygpKSByZXR1cm4gbnVtLmFicygpO1xuICAgIGlmIChudW0uaXNaZXJvKCkpIHJldHVybiB0aGlzLmFicygpO1xuXG4gICAgdmFyIGEgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGIgPSBudW0uY2xvbmUoKTtcbiAgICBhLm5lZ2F0aXZlID0gMDtcbiAgICBiLm5lZ2F0aXZlID0gMDtcblxuICAgIC8vIFJlbW92ZSBjb21tb24gZmFjdG9yIG9mIHR3b1xuICAgIGZvciAodmFyIHNoaWZ0ID0gMDsgYS5pc0V2ZW4oKSAmJiBiLmlzRXZlbigpOyBzaGlmdCsrKSB7XG4gICAgICBhLml1c2hybigxKTtcbiAgICAgIGIuaXVzaHJuKDEpO1xuICAgIH1cblxuICAgIGRvIHtcbiAgICAgIHdoaWxlIChhLmlzRXZlbigpKSB7XG4gICAgICAgIGEuaXVzaHJuKDEpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGIuaXNFdmVuKCkpIHtcbiAgICAgICAgYi5pdXNocm4oMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciByID0gYS5jbXAoYik7XG4gICAgICBpZiAociA8IDApIHtcbiAgICAgICAgLy8gU3dhcCBgYWAgYW5kIGBiYCB0byBtYWtlIGBhYCBhbHdheXMgYmlnZ2VyIHRoYW4gYGJgXG4gICAgICAgIHZhciB0ID0gYTtcbiAgICAgICAgYSA9IGI7XG4gICAgICAgIGIgPSB0O1xuICAgICAgfSBlbHNlIGlmIChyID09PSAwIHx8IGIuY21wbigxKSA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYS5pc3ViKGIpO1xuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgcmV0dXJuIGIuaXVzaGxuKHNoaWZ0KTtcbiAgfTtcblxuICAvLyBJbnZlcnQgbnVtYmVyIGluIHRoZSBmaWVsZCBGKG51bSlcbiAgQk4ucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5lZ2NkKG51bSkuYS51bW9kKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLndvcmRzWzBdICYgMSkgPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQgKCkge1xuICAgIHJldHVybiAodGhpcy53b3Jkc1swXSAmIDEpID09PSAxO1xuICB9O1xuXG4gIC8vIEFuZCBmaXJzdCB3b3JkIGFuZCBudW1cbiAgQk4ucHJvdG90eXBlLmFuZGxuID0gZnVuY3Rpb24gYW5kbG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLndvcmRzWzBdICYgbnVtO1xuICB9O1xuXG4gIC8vIEluY3JlbWVudCBhdCB0aGUgYml0IHBvc2l0aW9uIGluLWxpbmVcbiAgQk4ucHJvdG90eXBlLmJpbmNuID0gZnVuY3Rpb24gYmluY24gKGJpdCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0ID09PSAnbnVtYmVyJyk7XG4gICAgdmFyIHIgPSBiaXQgJSAyNjtcbiAgICB2YXIgcyA9IChiaXQgLSByKSAvIDI2O1xuICAgIHZhciBxID0gMSA8PCByO1xuXG4gICAgLy8gRmFzdCBjYXNlOiBiaXQgaXMgbXVjaCBoaWdoZXIgdGhhbiBhbGwgZXhpc3Rpbmcgd29yZHNcbiAgICBpZiAodGhpcy5sZW5ndGggPD0gcykge1xuICAgICAgdGhpcy5fZXhwYW5kKHMgKyAxKTtcbiAgICAgIHRoaXMud29yZHNbc10gfD0gcTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBiaXQgYW5kIHByb3BhZ2F0ZSwgaWYgbmVlZGVkXG4gICAgdmFyIGNhcnJ5ID0gcTtcbiAgICBmb3IgKHZhciBpID0gczsgY2FycnkgIT09IDAgJiYgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gdGhpcy53b3Jkc1tpXSB8IDA7XG4gICAgICB3ICs9IGNhcnJ5O1xuICAgICAgY2FycnkgPSB3ID4+PiAyNjtcbiAgICAgIHcgJj0gMHgzZmZmZmZmO1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHc7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IGNhcnJ5O1xuICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uIGlzWmVybyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXMud29yZHNbMF0gPT09IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNtcG4gPSBmdW5jdGlvbiBjbXBuIChudW0pIHtcbiAgICB2YXIgbmVnYXRpdmUgPSBudW0gPCAwO1xuXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgIW5lZ2F0aXZlKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbmVnYXRpdmUpIHJldHVybiAxO1xuXG4gICAgdGhpcy5zdHJpcCgpO1xuXG4gICAgdmFyIHJlcztcbiAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXMgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmVnYXRpdmUpIHtcbiAgICAgICAgbnVtID0gLW51bTtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KG51bSA8PSAweDNmZmZmZmYsICdOdW1iZXIgaXMgdG9vIGJpZycpO1xuXG4gICAgICB2YXIgdyA9IHRoaXMud29yZHNbMF0gfCAwO1xuICAgICAgcmVzID0gdyA9PT0gbnVtID8gMCA6IHcgPCBudW0gPyAtMSA6IDE7XG4gICAgfVxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gLXJlcyB8IDA7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBDb21wYXJlIHR3byBudW1iZXJzIGFuZCByZXR1cm46XG4gIC8vIDEgLSBpZiBgdGhpc2AgPiBgbnVtYFxuICAvLyAwIC0gaWYgYHRoaXNgID09IGBudW1gXG4gIC8vIC0xIC0gaWYgYHRoaXNgIDwgYG51bWBcbiAgQk4ucHJvdG90eXBlLmNtcCA9IGZ1bmN0aW9uIGNtcCAobnVtKSB7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbnVtLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gMTtcblxuICAgIHZhciByZXMgPSB0aGlzLnVjbXAobnVtKTtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkgcmV0dXJuIC1yZXMgfCAwO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gVW5zaWduZWQgY29tcGFyaXNvblxuICBCTi5wcm90b3R5cGUudWNtcCA9IGZ1bmN0aW9uIHVjbXAgKG51bSkge1xuICAgIC8vIEF0IHRoaXMgcG9pbnQgYm90aCBudW1iZXJzIGhhdmUgdGhlIHNhbWUgc2lnblxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiAxO1xuICAgIGlmICh0aGlzLmxlbmd0aCA8IG51bS5sZW5ndGgpIHJldHVybiAtMTtcblxuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgYSA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdmFyIGIgPSBudW0ud29yZHNbaV0gfCAwO1xuXG4gICAgICBpZiAoYSA9PT0gYikgY29udGludWU7XG4gICAgICBpZiAoYSA8IGIpIHtcbiAgICAgICAgcmVzID0gLTE7XG4gICAgICB9IGVsc2UgaWYgKGEgPiBiKSB7XG4gICAgICAgIHJlcyA9IDE7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3RuID0gZnVuY3Rpb24gZ3RuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IDE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0ID0gZnVuY3Rpb24gZ3QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID09PSAxO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndGVuID0gZnVuY3Rpb24gZ3RlbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID49IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0ZSA9IGZ1bmN0aW9uIGd0ZSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPj0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHRuID0gZnVuY3Rpb24gbHRuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPT09IC0xO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdCA9IGZ1bmN0aW9uIGx0IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA9PT0gLTE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0ZW4gPSBmdW5jdGlvbiBsdGVuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPD0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHRlID0gZnVuY3Rpb24gbHRlIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA8PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5lcW4gPSBmdW5jdGlvbiBlcW4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA9PT0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPT09IDA7XG4gIH07XG5cbiAgLy9cbiAgLy8gQSByZWR1Y2UgY29udGV4dCwgY291bGQgYmUgdXNpbmcgbW9udGdvbWVyeSBvciBzb21ldGhpbmcgYmV0dGVyLCBkZXBlbmRpbmdcbiAgLy8gb24gdGhlIGBtYCBpdHNlbGYuXG4gIC8vXG4gIEJOLnJlZCA9IGZ1bmN0aW9uIHJlZCAobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBSZWQobnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9SZWQgPSBmdW5jdGlvbiB0b1JlZCAoY3R4KSB7XG4gICAgYXNzZXJ0KCF0aGlzLnJlZCwgJ0FscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQnKTtcbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCwgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzJyk7XG4gICAgcmV0dXJuIGN0eC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGN0eCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmZyb21SZWQgPSBmdW5jdGlvbiBmcm9tUmVkICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0Jyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fZm9yY2VSZWQgPSBmdW5jdGlvbiBfZm9yY2VSZWQgKGN0eCkge1xuICAgIHRoaXMucmVkID0gY3R4O1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5mb3JjZVJlZCA9IGZ1bmN0aW9uIGZvcmNlUmVkIChjdHgpIHtcbiAgICBhc3NlcnQoIXRoaXMucmVkLCAnQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCcpO1xuICAgIHJldHVybiB0aGlzLl9mb3JjZVJlZChjdHgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRBZGQgPSBmdW5jdGlvbiByZWRBZGQgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuYWRkKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElBZGQgPSBmdW5jdGlvbiByZWRJQWRkIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pYWRkKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFN1YiA9IGZ1bmN0aW9uIHJlZFN1YiAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zdWIodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSVN1YiA9IGZ1bmN0aW9uIHJlZElTdWIgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmlzdWIodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkU2hsID0gZnVuY3Rpb24gcmVkU2hsIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNobCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRNdWwgPSBmdW5jdGlvbiByZWRNdWwgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLCBudW0pO1xuICAgIHJldHVybiB0aGlzLnJlZC5tdWwodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSU11bCA9IGZ1bmN0aW9uIHJlZElNdWwgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLCBudW0pO1xuICAgIHJldHVybiB0aGlzLnJlZC5pbXVsKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFNxciA9IGZ1bmN0aW9uIHJlZFNxciAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5zcXIodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZElTcXIgPSBmdW5jdGlvbiByZWRJU3FyICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pc3FyKHRoaXMpO1xuICB9O1xuXG4gIC8vIFNxdWFyZSByb290IG92ZXIgcFxuICBCTi5wcm90b3R5cGUucmVkU3FydCA9IGZ1bmN0aW9uIHJlZFNxcnQgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNxcnQodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZEludm0gPSBmdW5jdGlvbiByZWRJbnZtICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5pbnZtKHRoaXMpO1xuICB9O1xuXG4gIC8vIFJldHVybiBuZWdhdGl2ZSBjbG9uZSBvZiBgdGhpc2AgJSBgcmVkIG1vZHVsb2BcbiAgQk4ucHJvdG90eXBlLnJlZE5lZyA9IGZ1bmN0aW9uIHJlZE5lZyAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5uZWcodGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZFBvdyA9IGZ1bmN0aW9uIHJlZFBvdyAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkICYmICFudW0ucmVkLCAncmVkUG93KG5vcm1hbE51bSknKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQucG93KHRoaXMsIG51bSk7XG4gIH07XG5cbiAgLy8gUHJpbWUgbnVtYmVycyB3aXRoIGVmZmljaWVudCByZWR1Y3Rpb25cbiAgdmFyIHByaW1lcyA9IHtcbiAgICBrMjU2OiBudWxsLFxuICAgIHAyMjQ6IG51bGwsXG4gICAgcDE5MjogbnVsbCxcbiAgICBwMjU1MTk6IG51bGxcbiAgfTtcblxuICAvLyBQc2V1ZG8tTWVyc2VubmUgcHJpbWVcbiAgZnVuY3Rpb24gTVByaW1lIChuYW1lLCBwKSB7XG4gICAgLy8gUCA9IDIgXiBOIC0gS1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5wID0gbmV3IEJOKHAsIDE2KTtcbiAgICB0aGlzLm4gPSB0aGlzLnAuYml0TGVuZ3RoKCk7XG4gICAgdGhpcy5rID0gbmV3IEJOKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKTtcblxuICAgIHRoaXMudG1wID0gdGhpcy5fdG1wKCk7XG4gIH1cblxuICBNUHJpbWUucHJvdG90eXBlLl90bXAgPSBmdW5jdGlvbiBfdG1wICgpIHtcbiAgICB2YXIgdG1wID0gbmV3IEJOKG51bGwpO1xuICAgIHRtcC53b3JkcyA9IG5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uIC8gMTMpKTtcbiAgICByZXR1cm4gdG1wO1xuICB9O1xuXG4gIE1QcmltZS5wcm90b3R5cGUuaXJlZHVjZSA9IGZ1bmN0aW9uIGlyZWR1Y2UgKG51bSkge1xuICAgIC8vIEFzc3VtZXMgdGhhdCBgbnVtYCBpcyBsZXNzIHRoYW4gYFBeMmBcbiAgICAvLyBudW0gPSBISSAqICgyIF4gTiAtIEspICsgSEkgKiBLICsgTE8gPSBISSAqIEsgKyBMTyAobW9kIFApXG4gICAgdmFyIHIgPSBudW07XG4gICAgdmFyIHJsZW47XG5cbiAgICBkbyB7XG4gICAgICB0aGlzLnNwbGl0KHIsIHRoaXMudG1wKTtcbiAgICAgIHIgPSB0aGlzLmltdWxLKHIpO1xuICAgICAgciA9IHIuaWFkZCh0aGlzLnRtcCk7XG4gICAgICBybGVuID0gci5iaXRMZW5ndGgoKTtcbiAgICB9IHdoaWxlIChybGVuID4gdGhpcy5uKTtcblxuICAgIHZhciBjbXAgPSBybGVuIDwgdGhpcy5uID8gLTEgOiByLnVjbXAodGhpcy5wKTtcbiAgICBpZiAoY21wID09PSAwKSB7XG4gICAgICByLndvcmRzWzBdID0gMDtcbiAgICAgIHIubGVuZ3RoID0gMTtcbiAgICB9IGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAgIHIuaXN1Yih0aGlzLnApO1xuICAgIH0gZWxzZSB7XG4gICAgICByLnN0cmlwKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgTVByaW1lLnByb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uIHNwbGl0IChpbnB1dCwgb3V0KSB7XG4gICAgaW5wdXQuaXVzaHJuKHRoaXMubiwgMCwgb3V0KTtcbiAgfTtcblxuICBNUHJpbWUucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIHJldHVybiBudW0uaW11bCh0aGlzLmspO1xuICB9O1xuXG4gIGZ1bmN0aW9uIEsyNTYgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdrMjU2JyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZicpO1xuICB9XG4gIGluaGVyaXRzKEsyNTYsIE1QcmltZSk7XG5cbiAgSzI1Ni5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCAoaW5wdXQsIG91dHB1dCkge1xuICAgIC8vIDI1NiA9IDkgKiAyNiArIDIyXG4gICAgdmFyIG1hc2sgPSAweDNmZmZmZjtcblxuICAgIHZhciBvdXRMZW4gPSBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIDkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0TGVuOyBpKyspIHtcbiAgICAgIG91dHB1dC53b3Jkc1tpXSA9IGlucHV0LndvcmRzW2ldO1xuICAgIH1cbiAgICBvdXRwdXQubGVuZ3RoID0gb3V0TGVuO1xuXG4gICAgaWYgKGlucHV0Lmxlbmd0aCA8PSA5KSB7XG4gICAgICBpbnB1dC53b3Jkc1swXSA9IDA7XG4gICAgICBpbnB1dC5sZW5ndGggPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNoaWZ0IGJ5IDkgbGltYnNcbiAgICB2YXIgcHJldiA9IGlucHV0LndvcmRzWzldO1xuICAgIG91dHB1dC53b3Jkc1tvdXRwdXQubGVuZ3RoKytdID0gcHJldiAmIG1hc2s7XG5cbiAgICBmb3IgKGkgPSAxMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmV4dCA9IGlucHV0LndvcmRzW2ldIHwgMDtcbiAgICAgIGlucHV0LndvcmRzW2kgLSAxMF0gPSAoKG5leHQgJiBtYXNrKSA8PCA0KSB8IChwcmV2ID4+PiAyMik7XG4gICAgICBwcmV2ID0gbmV4dDtcbiAgICB9XG4gICAgcHJldiA+Pj49IDIyO1xuICAgIGlucHV0LndvcmRzW2kgLSAxMF0gPSBwcmV2O1xuICAgIGlmIChwcmV2ID09PSAwICYmIGlucHV0Lmxlbmd0aCA+IDEwKSB7XG4gICAgICBpbnB1dC5sZW5ndGggLT0gMTA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0Lmxlbmd0aCAtPSA5O1xuICAgIH1cbiAgfTtcblxuICBLMjU2LnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICAvLyBLID0gMHgxMDAwMDAzZDEgPSBbIDB4NDAsIDB4M2QxIF1cbiAgICBudW0ud29yZHNbbnVtLmxlbmd0aF0gPSAwO1xuICAgIG51bS53b3Jkc1tudW0ubGVuZ3RoICsgMV0gPSAwO1xuICAgIG51bS5sZW5ndGggKz0gMjtcblxuICAgIC8vIGJvdW5kZWQgYXQ6IDB4NDAgKiAweDNmZmZmZmYgKyAweDNkMCA9IDB4MTAwMDAwMzkwXG4gICAgdmFyIGxvID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHcgPSBudW0ud29yZHNbaV0gfCAwO1xuICAgICAgbG8gKz0gdyAqIDB4M2QxO1xuICAgICAgbnVtLndvcmRzW2ldID0gbG8gJiAweDNmZmZmZmY7XG4gICAgICBsbyA9IHcgKiAweDQwICsgKChsbyAvIDB4NDAwMDAwMCkgfCAwKTtcbiAgICB9XG5cbiAgICAvLyBGYXN0IGxlbmd0aCByZWR1Y3Rpb25cbiAgICBpZiAobnVtLndvcmRzW251bS5sZW5ndGggLSAxXSA9PT0gMCkge1xuICAgICAgbnVtLmxlbmd0aC0tO1xuICAgICAgaWYgKG51bS53b3Jkc1tudW0ubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgICAgbnVtLmxlbmd0aC0tO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVtO1xuICB9O1xuXG4gIGZ1bmN0aW9uIFAyMjQgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdwMjI0JyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMScpO1xuICB9XG4gIGluaGVyaXRzKFAyMjQsIE1QcmltZSk7XG5cbiAgZnVuY3Rpb24gUDE5MiAoKSB7XG4gICAgTVByaW1lLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgJ3AxOTInLFxuICAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmJyk7XG4gIH1cbiAgaW5oZXJpdHMoUDE5MiwgTVByaW1lKTtcblxuICBmdW5jdGlvbiBQMjU1MTkgKCkge1xuICAgIC8vIDIgXiAyNTUgLSAxOVxuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICcyNTUxOScsXG4gICAgICAnN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCcpO1xuICB9XG4gIGluaGVyaXRzKFAyNTUxOSwgTVByaW1lKTtcblxuICBQMjU1MTkucHJvdG90eXBlLmltdWxLID0gZnVuY3Rpb24gaW11bEsgKG51bSkge1xuICAgIC8vIEsgPSAweDEzXG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhpID0gKG51bS53b3Jkc1tpXSB8IDApICogMHgxMyArIGNhcnJ5O1xuICAgICAgdmFyIGxvID0gaGkgJiAweDNmZmZmZmY7XG4gICAgICBoaSA+Pj49IDI2O1xuXG4gICAgICBudW0ud29yZHNbaV0gPSBsbztcbiAgICAgIGNhcnJ5ID0gaGk7XG4gICAgfVxuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgbnVtLndvcmRzW251bS5sZW5ndGgrK10gPSBjYXJyeTtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbiAgfTtcblxuICAvLyBFeHBvcnRlZCBtb3N0bHkgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHVzZSBwbGFpbiBuYW1lIGluc3RlYWRcbiAgQk4uX3ByaW1lID0gZnVuY3Rpb24gcHJpbWUgKG5hbWUpIHtcbiAgICAvLyBDYWNoZWQgdmVyc2lvbiBvZiBwcmltZVxuICAgIGlmIChwcmltZXNbbmFtZV0pIHJldHVybiBwcmltZXNbbmFtZV07XG5cbiAgICB2YXIgcHJpbWU7XG4gICAgaWYgKG5hbWUgPT09ICdrMjU2Jykge1xuICAgICAgcHJpbWUgPSBuZXcgSzI1NigpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3AyMjQnKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMjI0KCk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAncDE5MicpIHtcbiAgICAgIHByaW1lID0gbmV3IFAxOTIoKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdwMjU1MTknKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMjU1MTkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHByaW1lICcgKyBuYW1lKTtcbiAgICB9XG4gICAgcHJpbWVzW25hbWVdID0gcHJpbWU7XG5cbiAgICByZXR1cm4gcHJpbWU7XG4gIH07XG5cbiAgLy9cbiAgLy8gQmFzZSByZWR1Y3Rpb24gZW5naW5lXG4gIC8vXG4gIGZ1bmN0aW9uIFJlZCAobSkge1xuICAgIGlmICh0eXBlb2YgbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBwcmltZSA9IEJOLl9wcmltZShtKTtcbiAgICAgIHRoaXMubSA9IHByaW1lLnA7XG4gICAgICB0aGlzLnByaW1lID0gcHJpbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChtLmd0bigxKSwgJ21vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMScpO1xuICAgICAgdGhpcy5tID0gbTtcbiAgICAgIHRoaXMucHJpbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIFJlZC5wcm90b3R5cGUuX3ZlcmlmeTEgPSBmdW5jdGlvbiBfdmVyaWZ5MSAoYSkge1xuICAgIGFzc2VydChhLm5lZ2F0aXZlID09PSAwLCAncmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMnKTtcbiAgICBhc3NlcnQoYS5yZWQsICdyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5fdmVyaWZ5MiA9IGZ1bmN0aW9uIF92ZXJpZnkyIChhLCBiKSB7XG4gICAgYXNzZXJ0KChhLm5lZ2F0aXZlIHwgYi5uZWdhdGl2ZSkgPT09IDAsICdyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcycpO1xuICAgIGFzc2VydChhLnJlZCAmJiBhLnJlZCA9PT0gYi5yZWQsXG4gICAgICAncmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaW1vZCA9IGZ1bmN0aW9uIGltb2QgKGEpIHtcbiAgICBpZiAodGhpcy5wcmltZSkgcmV0dXJuIHRoaXMucHJpbWUuaXJlZHVjZShhKS5fZm9yY2VSZWQodGhpcyk7XG4gICAgcmV0dXJuIGEudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZyAoYSkge1xuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYS5jbG9uZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm0uc3ViKGEpLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG5cbiAgICB2YXIgcmVzID0gYS5hZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlhZGQgPSBmdW5jdGlvbiBpYWRkIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlhZGQoYik7XG4gICAgaWYgKHJlcy5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMuaXN1Yih0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLnN1YihiKTtcbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZCh0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLl9mb3JjZVJlZCh0aGlzKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzdWIgPSBmdW5jdGlvbiBpc3ViIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmlzdWIoYik7XG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQodGhpcy5tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnNobCA9IGZ1bmN0aW9uIHNobCAoYSwgbnVtKSB7XG4gICAgdGhpcy5fdmVyaWZ5MShhKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEudXNobG4obnVtKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIHRoaXMuX3ZlcmlmeTIoYSwgYik7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChhLmltdWwoYikpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEubXVsKGIpKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmlzcXIgPSBmdW5jdGlvbiBpc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMuaW11bChhLCBhLmNsb25lKCkpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FyID0gZnVuY3Rpb24gc3FyIChhKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsKGEsIGEpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc3FydCA9IGZ1bmN0aW9uIHNxcnQgKGEpIHtcbiAgICBpZiAoYS5pc1plcm8oKSkgcmV0dXJuIGEuY2xvbmUoKTtcblxuICAgIHZhciBtb2QzID0gdGhpcy5tLmFuZGxuKDMpO1xuICAgIGFzc2VydChtb2QzICUgMiA9PT0gMSk7XG5cbiAgICAvLyBGYXN0IGNhc2VcbiAgICBpZiAobW9kMyA9PT0gMykge1xuICAgICAgdmFyIHBvdyA9IHRoaXMubS5hZGQobmV3IEJOKDEpKS5pdXNocm4oMik7XG4gICAgICByZXR1cm4gdGhpcy5wb3coYSwgcG93KTtcbiAgICB9XG5cbiAgICAvLyBUb25lbGxpLVNoYW5rcyBhbGdvcml0aG0gKFRvdGFsbHkgdW5vcHRpbWl6ZWQgYW5kIHNsb3cpXG4gICAgLy9cbiAgICAvLyBGaW5kIFEgYW5kIFMsIHRoYXQgUSAqIDIgXiBTID0gKFAgLSAxKVxuICAgIHZhciBxID0gdGhpcy5tLnN1Ym4oMSk7XG4gICAgdmFyIHMgPSAwO1xuICAgIHdoaWxlICghcS5pc1plcm8oKSAmJiBxLmFuZGxuKDEpID09PSAwKSB7XG4gICAgICBzKys7XG4gICAgICBxLml1c2hybigxKTtcbiAgICB9XG4gICAgYXNzZXJ0KCFxLmlzWmVybygpKTtcblxuICAgIHZhciBvbmUgPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgdmFyIG5PbmUgPSBvbmUucmVkTmVnKCk7XG5cbiAgICAvLyBGaW5kIHF1YWRyYXRpYyBub24tcmVzaWR1ZVxuICAgIC8vIE5PVEU6IE1heCBpcyBzdWNoIGJlY2F1c2Ugb2YgZ2VuZXJhbGl6ZWQgUmllbWFubiBoeXBvdGhlc2lzLlxuICAgIHZhciBscG93ID0gdGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpO1xuICAgIHZhciB6ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIHogPSBuZXcgQk4oMiAqIHogKiB6KS50b1JlZCh0aGlzKTtcblxuICAgIHdoaWxlICh0aGlzLnBvdyh6LCBscG93KS5jbXAobk9uZSkgIT09IDApIHtcbiAgICAgIHoucmVkSUFkZChuT25lKTtcbiAgICB9XG5cbiAgICB2YXIgYyA9IHRoaXMucG93KHosIHEpO1xuICAgIHZhciByID0gdGhpcy5wb3coYSwgcS5hZGRuKDEpLml1c2hybigxKSk7XG4gICAgdmFyIHQgPSB0aGlzLnBvdyhhLCBxKTtcbiAgICB2YXIgbSA9IHM7XG4gICAgd2hpbGUgKHQuY21wKG9uZSkgIT09IDApIHtcbiAgICAgIHZhciB0bXAgPSB0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IHRtcC5jbXAob25lKSAhPT0gMDsgaSsrKSB7XG4gICAgICAgIHRtcCA9IHRtcC5yZWRTcXIoKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChpIDwgbSk7XG4gICAgICB2YXIgYiA9IHRoaXMucG93KGMsIG5ldyBCTigxKS5pdXNobG4obSAtIGkgLSAxKSk7XG5cbiAgICAgIHIgPSByLnJlZE11bChiKTtcbiAgICAgIGMgPSBiLnJlZFNxcigpO1xuICAgICAgdCA9IHQucmVkTXVsKGMpO1xuICAgICAgbSA9IGk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAoYSkge1xuICAgIHZhciBpbnYgPSBhLl9pbnZtcCh0aGlzLm0pO1xuICAgIGlmIChpbnYubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGludi5uZWdhdGl2ZSA9IDA7XG4gICAgICByZXR1cm4gdGhpcy5pbW9kKGludikucmVkTmVnKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmltb2QoaW52KTtcbiAgICB9XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiBwb3cgKGEsIG51bSkge1xuICAgIGlmIChudW0uaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMSk7XG4gICAgaWYgKG51bS5jbXBuKDEpID09PSAwKSByZXR1cm4gYS5jbG9uZSgpO1xuXG4gICAgdmFyIHdpbmRvd1NpemUgPSA0O1xuICAgIHZhciB3bmQgPSBuZXcgQXJyYXkoMSA8PCB3aW5kb3dTaXplKTtcbiAgICB3bmRbMF0gPSBuZXcgQk4oMSkudG9SZWQodGhpcyk7XG4gICAgd25kWzFdID0gYTtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IHduZC5sZW5ndGg7IGkrKykge1xuICAgICAgd25kW2ldID0gdGhpcy5tdWwod25kW2kgLSAxXSwgYSk7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IHduZFswXTtcbiAgICB2YXIgY3VycmVudCA9IDA7XG4gICAgdmFyIGN1cnJlbnRMZW4gPSAwO1xuICAgIHZhciBzdGFydCA9IG51bS5iaXRMZW5ndGgoKSAlIDI2O1xuICAgIGlmIChzdGFydCA9PT0gMCkge1xuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBudW0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciB3b3JkID0gbnVtLndvcmRzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0IC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgdmFyIGJpdCA9ICh3b3JkID4+IGopICYgMTtcbiAgICAgICAgaWYgKHJlcyAhPT0gd25kWzBdKSB7XG4gICAgICAgICAgcmVzID0gdGhpcy5zcXIocmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaXQgPT09IDAgJiYgY3VycmVudCA9PT0gMCkge1xuICAgICAgICAgIGN1cnJlbnRMZW4gPSAwO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudCA8PD0gMTtcbiAgICAgICAgY3VycmVudCB8PSBiaXQ7XG4gICAgICAgIGN1cnJlbnRMZW4rKztcbiAgICAgICAgaWYgKGN1cnJlbnRMZW4gIT09IHdpbmRvd1NpemUgJiYgKGkgIT09IDAgfHwgaiAhPT0gMCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIHJlcyA9IHRoaXMubXVsKHJlcywgd25kW2N1cnJlbnRdKTtcbiAgICAgICAgY3VycmVudExlbiA9IDA7XG4gICAgICAgIGN1cnJlbnQgPSAwO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSAyNjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuY29udmVydFRvID0gZnVuY3Rpb24gY29udmVydFRvIChudW0pIHtcbiAgICB2YXIgciA9IG51bS51bW9kKHRoaXMubSk7XG5cbiAgICByZXR1cm4gciA9PT0gbnVtID8gci5jbG9uZSgpIDogcjtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmNvbnZlcnRGcm9tID0gZnVuY3Rpb24gY29udmVydEZyb20gKG51bSkge1xuICAgIHZhciByZXMgPSBudW0uY2xvbmUoKTtcbiAgICByZXMucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vXG4gIC8vIE1vbnRnb21lcnkgbWV0aG9kIGVuZ2luZVxuICAvL1xuXG4gIEJOLm1vbnQgPSBmdW5jdGlvbiBtb250IChudW0pIHtcbiAgICByZXR1cm4gbmV3IE1vbnQobnVtKTtcbiAgfTtcblxuICBmdW5jdGlvbiBNb250IChtKSB7XG4gICAgUmVkLmNhbGwodGhpcywgbSk7XG5cbiAgICB0aGlzLnNoaWZ0ID0gdGhpcy5tLmJpdExlbmd0aCgpO1xuICAgIGlmICh0aGlzLnNoaWZ0ICUgMjYgIT09IDApIHtcbiAgICAgIHRoaXMuc2hpZnQgKz0gMjYgLSAodGhpcy5zaGlmdCAlIDI2KTtcbiAgICB9XG5cbiAgICB0aGlzLnIgPSBuZXcgQk4oMSkuaXVzaGxuKHRoaXMuc2hpZnQpO1xuICAgIHRoaXMucjIgPSB0aGlzLmltb2QodGhpcy5yLnNxcigpKTtcbiAgICB0aGlzLnJpbnYgPSB0aGlzLnIuX2ludm1wKHRoaXMubSk7XG5cbiAgICB0aGlzLm1pbnYgPSB0aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSk7XG4gICAgdGhpcy5taW52ID0gdGhpcy5taW52LnVtb2QodGhpcy5yKTtcbiAgICB0aGlzLm1pbnYgPSB0aGlzLnIuc3ViKHRoaXMubWludik7XG4gIH1cbiAgaW5oZXJpdHMoTW9udCwgUmVkKTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0VG8gPSBmdW5jdGlvbiBjb252ZXJ0VG8gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmltb2QobnVtLnVzaGxuKHRoaXMuc2hpZnQpKTtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5jb252ZXJ0RnJvbSA9IGZ1bmN0aW9uIGNvbnZlcnRGcm9tIChudW0pIHtcbiAgICB2YXIgciA9IHRoaXMuaW1vZChudW0ubXVsKHRoaXMucmludikpO1xuICAgIHIucmVkID0gbnVsbDtcbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBNb250LnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHtcbiAgICAgIGEud29yZHNbMF0gPSAwO1xuICAgICAgYS5sZW5ndGggPSAxO1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBhLmltdWwoYik7XG4gICAgdmFyIGMgPSB0Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKTtcbiAgICB2YXIgdSA9IHQuaXN1YihjKS5pdXNocm4odGhpcy5zaGlmdCk7XG4gICAgdmFyIHJlcyA9IHU7XG5cbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCAoYSwgYikge1xuICAgIGlmIChhLmlzWmVybygpIHx8IGIuaXNaZXJvKCkpIHJldHVybiBuZXcgQk4oMCkuX2ZvcmNlUmVkKHRoaXMpO1xuXG4gICAgdmFyIHQgPSBhLm11bChiKTtcbiAgICB2YXIgYyA9IHQubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pO1xuICAgIHZhciB1ID0gdC5pc3ViKGMpLml1c2hybih0aGlzLnNoaWZ0KTtcbiAgICB2YXIgcmVzID0gdTtcbiAgICBpZiAodS5jbXAodGhpcy5tKSA+PSAwKSB7XG4gICAgICByZXMgPSB1LmlzdWIodGhpcy5tKTtcbiAgICB9IGVsc2UgaWYgKHUuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcyA9IHUuaWFkZCh0aGlzLm0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChhKSB7XG4gICAgLy8gKEFSKV4tMSAqIFJeMiA9IChBXi0xICogUl4tMSkgKiBSXjIgPSBBXi0xICogUlxuICAgIHZhciByZXMgPSB0aGlzLmltb2QoYS5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO1xuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xufSkodHlwZW9mIG1vZHVsZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbW9kdWxlLCB0aGlzKTtcbiIsInZhciByO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJhbmQobGVuKSB7XG4gIGlmICghcilcbiAgICByID0gbmV3IFJhbmQobnVsbCk7XG5cbiAgcmV0dXJuIHIuZ2VuZXJhdGUobGVuKTtcbn07XG5cbmZ1bmN0aW9uIFJhbmQocmFuZCkge1xuICB0aGlzLnJhbmQgPSByYW5kO1xufVxubW9kdWxlLmV4cG9ydHMuUmFuZCA9IFJhbmQ7XG5cblJhbmQucHJvdG90eXBlLmdlbmVyYXRlID0gZnVuY3Rpb24gZ2VuZXJhdGUobGVuKSB7XG4gIHJldHVybiB0aGlzLl9yYW5kKGxlbik7XG59O1xuXG4vLyBFbXVsYXRlIGNyeXB0byBBUEkgdXNpbmcgcmFuZHlcblJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICBpZiAodGhpcy5yYW5kLmdldEJ5dGVzKVxuICAgIHJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXMobik7XG5cbiAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKylcbiAgICByZXNbaV0gPSB0aGlzLnJhbmQuZ2V0Qnl0ZSgpO1xuICByZXR1cm4gcmVzO1xufTtcblxuaWYgKHR5cGVvZiBzZWxmID09PSAnb2JqZWN0Jykge1xuICBpZiAoc2VsZi5jcnlwdG8gJiYgc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXJzXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gICAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgICBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyKTtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChzZWxmLm1zQ3J5cHRvICYmIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gSUVcbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH07XG5cbiAgLy8gU2FmYXJpJ3MgV2ViV29ya2VycyBkbyBub3QgaGF2ZSBgY3J5cHRvYFxuICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gT2xkIGp1bmtcbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0Jyk7XG4gICAgfTtcbiAgfVxufSBlbHNlIHtcbiAgLy8gTm9kZS5qcyBvciBXZWIgd29ya2VyIHdpdGggbm8gY3J5cHRvIHN1cHBvcnRcbiAgdHJ5IHtcbiAgICB2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gICAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgIT09ICdmdW5jdGlvbicpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBzdXBwb3J0ZWQnKTtcblxuICAgIFJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcyhuKTtcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbn1cbiIsIiIsIi8vIGJhc2VkIG9uIHRoZSBhZXMgaW1wbGltZW50YXRpb24gaW4gdHJpcGxlIHNlY1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2tleWJhc2UvdHJpcGxlc2VjXG5cbi8vIHdoaWNoIGlzIGluIHR1cm4gYmFzZWQgb24gdGhlIG9uZSBmcm9tIGNyeXB0by1qc1xuLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvXG5cbnZhciB1aW50X21heCA9IE1hdGgucG93KDIsIDMyKVxuZnVuY3Rpb24gZml4dXBfdWludDMyICh4KSB7XG4gIHZhciByZXQsIHhfcG9zXG4gIHJldCA9IHggPiB1aW50X21heCB8fCB4IDwgMCA/ICh4X3BvcyA9IE1hdGguYWJzKHgpICUgdWludF9tYXgsIHggPCAwID8gdWludF9tYXggLSB4X3BvcyA6IHhfcG9zKSA6IHhcbiAgcmV0dXJuIHJldFxufVxuZnVuY3Rpb24gc2NydWJfdmVjICh2KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdi5sZW5ndGg7IHYrKykge1xuICAgIHZbaV0gPSAwXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIEdsb2JhbCAoKSB7XG4gIHRoaXMuU0JPWCA9IFtdXG4gIHRoaXMuSU5WX1NCT1ggPSBbXVxuICB0aGlzLlNVQl9NSVggPSBbW10sIFtdLCBbXSwgW11dXG4gIHRoaXMuSU5WX1NVQl9NSVggPSBbW10sIFtdLCBbXSwgW11dXG4gIHRoaXMuaW5pdCgpXG4gIHRoaXMuUkNPTiA9IFsweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2XVxufVxuXG5HbG9iYWwucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBkLCBpLCBzeCwgdCwgeCwgeDIsIHg0LCB4OCwgeGksIF9pXG4gIGQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBfaSwgX3Jlc3VsdHNcbiAgICBfcmVzdWx0cyA9IFtdXG4gICAgZm9yIChpID0gX2kgPSAwOyBfaSA8IDI1NjsgaSA9ICsrX2kpIHtcbiAgICAgIGlmIChpIDwgMTI4KSB7XG4gICAgICAgIF9yZXN1bHRzLnB1c2goaSA8PCAxKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3Jlc3VsdHMucHVzaCgoaSA8PCAxKSBeIDB4MTFiKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX3Jlc3VsdHNcbiAgfSkoKVxuICB4ID0gMFxuICB4aSA9IDBcbiAgZm9yIChpID0gX2kgPSAwOyBfaSA8IDI1NjsgaSA9ICsrX2kpIHtcbiAgICBzeCA9IHhpIF4gKHhpIDw8IDEpIF4gKHhpIDw8IDIpIF4gKHhpIDw8IDMpIF4gKHhpIDw8IDQpXG4gICAgc3ggPSAoc3ggPj4+IDgpIF4gKHN4ICYgMHhmZikgXiAweDYzXG4gICAgdGhpcy5TQk9YW3hdID0gc3hcbiAgICB0aGlzLklOVl9TQk9YW3N4XSA9IHhcbiAgICB4MiA9IGRbeF1cbiAgICB4NCA9IGRbeDJdXG4gICAgeDggPSBkW3g0XVxuICAgIHQgPSAoZFtzeF0gKiAweDEwMSkgXiAoc3ggKiAweDEwMTAxMDApXG4gICAgdGhpcy5TVUJfTUlYWzBdW3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpXG4gICAgdGhpcy5TVUJfTUlYWzFdW3hdID0gKHQgPDwgMTYpIHwgKHQgPj4+IDE2KVxuICAgIHRoaXMuU1VCX01JWFsyXVt4XSA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KVxuICAgIHRoaXMuU1VCX01JWFszXVt4XSA9IHRcbiAgICB0ID0gKHg4ICogMHgxMDEwMTAxKSBeICh4NCAqIDB4MTAwMDEpIF4gKHgyICogMHgxMDEpIF4gKHggKiAweDEwMTAxMDApXG4gICAgdGhpcy5JTlZfU1VCX01JWFswXVtzeF0gPSAodCA8PCAyNCkgfCAodCA+Pj4gOClcbiAgICB0aGlzLklOVl9TVUJfTUlYWzFdW3N4XSA9ICh0IDw8IDE2KSB8ICh0ID4+PiAxNilcbiAgICB0aGlzLklOVl9TVUJfTUlYWzJdW3N4XSA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KVxuICAgIHRoaXMuSU5WX1NVQl9NSVhbM11bc3hdID0gdFxuICAgIGlmICh4ID09PSAwKSB7XG4gICAgICB4ID0geGkgPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSB4MiBeIGRbZFtkW3g4IF4geDJdXV1cbiAgICAgIHhpIF49IGRbZFt4aV1dXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbnZhciBHID0gbmV3IEdsb2JhbCgpXG5cbkFFUy5ibG9ja1NpemUgPSA0ICogNFxuXG5BRVMucHJvdG90eXBlLmJsb2NrU2l6ZSA9IEFFUy5ibG9ja1NpemVcblxuQUVTLmtleVNpemUgPSAyNTYgLyA4XG5cbkFFUy5wcm90b3R5cGUua2V5U2l6ZSA9IEFFUy5rZXlTaXplXG5cbmZ1bmN0aW9uIGJ1ZmZlclRvQXJyYXkgKGJ1Zikge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aCAvIDRcbiAgdmFyIG91dCA9IG5ldyBBcnJheShsZW4pXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIG91dFtpXSA9IGJ1Zi5yZWFkVUludDMyQkUoaSAqIDQpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuZnVuY3Rpb24gQUVTIChrZXkpIHtcbiAgdGhpcy5fa2V5ID0gYnVmZmVyVG9BcnJheShrZXkpXG4gIHRoaXMuX2RvUmVzZXQoKVxufVxuXG5BRVMucHJvdG90eXBlLl9kb1Jlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaW52S3NSb3csIGtleVNpemUsIGtleVdvcmRzLCBrc1Jvdywga3NSb3dzLCB0XG4gIGtleVdvcmRzID0gdGhpcy5fa2V5XG4gIGtleVNpemUgPSBrZXlXb3Jkcy5sZW5ndGhcbiAgdGhpcy5fblJvdW5kcyA9IGtleVNpemUgKyA2XG4gIGtzUm93cyA9ICh0aGlzLl9uUm91bmRzICsgMSkgKiA0XG4gIHRoaXMuX2tleVNjaGVkdWxlID0gW11cbiAgZm9yIChrc1JvdyA9IDA7IGtzUm93IDwga3NSb3dzOyBrc1JvdysrKSB7XG4gICAgdGhpcy5fa2V5U2NoZWR1bGVba3NSb3ddID0ga3NSb3cgPCBrZXlTaXplID8ga2V5V29yZHNba3NSb3ddIDogKHQgPSB0aGlzLl9rZXlTY2hlZHVsZVtrc1JvdyAtIDFdLCAoa3NSb3cgJSBrZXlTaXplKSA9PT0gMCA/ICh0ID0gKHQgPDwgOCkgfCAodCA+Pj4gMjQpLCB0ID0gKEcuU0JPWFt0ID4+PiAyNF0gPDwgMjQpIHwgKEcuU0JPWFsodCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKEcuU0JPWFsodCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IEcuU0JPWFt0ICYgMHhmZl0sIHQgXj0gRy5SQ09OWyhrc1JvdyAvIGtleVNpemUpIHwgMF0gPDwgMjQpIDoga2V5U2l6ZSA+IDYgJiYga3NSb3cgJSBrZXlTaXplID09PSA0ID8gdCA9IChHLlNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8IChHLlNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChHLlNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBHLlNCT1hbdCAmIDB4ZmZdIDogdm9pZCAwLCB0aGlzLl9rZXlTY2hlZHVsZVtrc1JvdyAtIGtleVNpemVdIF4gdClcbiAgfVxuICB0aGlzLl9pbnZLZXlTY2hlZHVsZSA9IFtdXG4gIGZvciAoaW52S3NSb3cgPSAwOyBpbnZLc1JvdyA8IGtzUm93czsgaW52S3NSb3crKykge1xuICAgIGtzUm93ID0ga3NSb3dzIC0gaW52S3NSb3dcbiAgICB0ID0gdGhpcy5fa2V5U2NoZWR1bGVba3NSb3cgLSAoaW52S3NSb3cgJSA0ID8gMCA6IDQpXVxuICAgIHRoaXMuX2ludktleVNjaGVkdWxlW2ludktzUm93XSA9IGludktzUm93IDwgNCB8fCBrc1JvdyA8PSA0ID8gdCA6IEcuSU5WX1NVQl9NSVhbMF1bRy5TQk9YW3QgPj4+IDI0XV0gXiBHLklOVl9TVUJfTUlYWzFdW0cuU0JPWFsodCA+Pj4gMTYpICYgMHhmZl1dIF4gRy5JTlZfU1VCX01JWFsyXVtHLlNCT1hbKHQgPj4+IDgpICYgMHhmZl1dIF4gRy5JTlZfU1VCX01JWFszXVtHLlNCT1hbdCAmIDB4ZmZdXVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbkFFUy5wcm90b3R5cGUuZW5jcnlwdEJsb2NrID0gZnVuY3Rpb24gKE0pIHtcbiAgTSA9IGJ1ZmZlclRvQXJyYXkobmV3IEJ1ZmZlcihNKSlcbiAgdmFyIG91dCA9IHRoaXMuX2RvQ3J5cHRCbG9jayhNLCB0aGlzLl9rZXlTY2hlZHVsZSwgRy5TVUJfTUlYLCBHLlNCT1gpXG4gIHZhciBidWYgPSBuZXcgQnVmZmVyKDE2KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMF0sIDApXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsxXSwgNClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzJdLCA4KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbM10sIDEyKVxuICByZXR1cm4gYnVmXG59XG5cbkFFUy5wcm90b3R5cGUuZGVjcnlwdEJsb2NrID0gZnVuY3Rpb24gKE0pIHtcbiAgTSA9IGJ1ZmZlclRvQXJyYXkobmV3IEJ1ZmZlcihNKSlcbiAgdmFyIHRlbXAgPSBbTVszXSwgTVsxXV1cbiAgTVsxXSA9IHRlbXBbMF1cbiAgTVszXSA9IHRlbXBbMV1cbiAgdmFyIG91dCA9IHRoaXMuX2RvQ3J5cHRCbG9jayhNLCB0aGlzLl9pbnZLZXlTY2hlZHVsZSwgRy5JTlZfU1VCX01JWCwgRy5JTlZfU0JPWClcbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoMTYpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFswXSwgMClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzNdLCA0KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMl0sIDgpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsxXSwgMTIpXG4gIHJldHVybiBidWZcbn1cblxuQUVTLnByb3RvdHlwZS5zY3J1YiA9IGZ1bmN0aW9uICgpIHtcbiAgc2NydWJfdmVjKHRoaXMuX2tleVNjaGVkdWxlKVxuICBzY3J1Yl92ZWModGhpcy5faW52S2V5U2NoZWR1bGUpXG4gIHNjcnViX3ZlYyh0aGlzLl9rZXkpXG59XG5cbkFFUy5wcm90b3R5cGUuX2RvQ3J5cHRCbG9jayA9IGZ1bmN0aW9uIChNLCBrZXlTY2hlZHVsZSwgU1VCX01JWCwgU0JPWCkge1xuICB2YXIga3NSb3csIHMwLCBzMSwgczIsIHMzLCB0MCwgdDEsIHQyLCB0M1xuXG4gIHMwID0gTVswXSBeIGtleVNjaGVkdWxlWzBdXG4gIHMxID0gTVsxXSBeIGtleVNjaGVkdWxlWzFdXG4gIHMyID0gTVsyXSBeIGtleVNjaGVkdWxlWzJdXG4gIHMzID0gTVszXSBeIGtleVNjaGVkdWxlWzNdXG4gIGtzUm93ID0gNFxuICBmb3IgKHZhciByb3VuZCA9IDE7IHJvdW5kIDwgdGhpcy5fblJvdW5kczsgcm91bmQrKykge1xuICAgIHQwID0gU1VCX01JWFswXVtzMCA+Pj4gMjRdIF4gU1VCX01JWFsxXVsoczEgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWFsyXVsoczIgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYWzNdW3MzICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICAgIHQxID0gU1VCX01JWFswXVtzMSA+Pj4gMjRdIF4gU1VCX01JWFsxXVsoczIgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWFsyXVsoczMgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYWzNdW3MwICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICAgIHQyID0gU1VCX01JWFswXVtzMiA+Pj4gMjRdIF4gU1VCX01JWFsxXVsoczMgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWFsyXVsoczAgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYWzNdW3MxICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICAgIHQzID0gU1VCX01JWFswXVtzMyA+Pj4gMjRdIF4gU1VCX01JWFsxXVsoczAgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWFsyXVsoczEgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYWzNdW3MyICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICAgIHMwID0gdDBcbiAgICBzMSA9IHQxXG4gICAgczIgPSB0MlxuICAgIHMzID0gdDNcbiAgfVxuICB0MCA9ICgoU0JPWFtzMCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMSA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMyID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMyAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdXG4gIHQxID0gKChTQk9YW3MxID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMyID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczMgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MwICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgdDIgPSAoKFNCT1hbczIgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczMgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczEgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICB0MyA9ICgoU0JPWFtzMyA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMxID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMiAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdXG4gIHJldHVybiBbXG4gICAgZml4dXBfdWludDMyKHQwKSxcbiAgICBmaXh1cF91aW50MzIodDEpLFxuICAgIGZpeHVwX3VpbnQzMih0MiksXG4gICAgZml4dXBfdWludDMyKHQzKVxuICBdXG59XG5cbmV4cG9ydHMuQUVTID0gQUVTXG4iLCJ2YXIgYWVzID0gcmVxdWlyZSgnLi9hZXMnKVxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ2NpcGhlci1iYXNlJylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBHSEFTSCA9IHJlcXVpcmUoJy4vZ2hhc2gnKVxudmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxuaW5oZXJpdHMoU3RyZWFtQ2lwaGVyLCBUcmFuc2Zvcm0pXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmVhbUNpcGhlclxuXG5mdW5jdGlvbiBTdHJlYW1DaXBoZXIgKG1vZGUsIGtleSwgaXYsIGRlY3J5cHQpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFN0cmVhbUNpcGhlcikpIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbUNpcGhlcihtb2RlLCBrZXksIGl2KVxuICB9XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG4gIHRoaXMuX2ZpbklEID0gQnVmZmVyLmNvbmNhdChbaXYsIG5ldyBCdWZmZXIoWzAsIDAsIDAsIDFdKV0pXG4gIGl2ID0gQnVmZmVyLmNvbmNhdChbaXYsIG5ldyBCdWZmZXIoWzAsIDAsIDAsIDJdKV0pXG4gIHRoaXMuX2NpcGhlciA9IG5ldyBhZXMuQUVTKGtleSlcbiAgdGhpcy5fcHJldiA9IG5ldyBCdWZmZXIoaXYubGVuZ3RoKVxuICB0aGlzLl9jYWNoZSA9IG5ldyBCdWZmZXIoJycpXG4gIHRoaXMuX3NlY0NhY2hlID0gbmV3IEJ1ZmZlcignJylcbiAgdGhpcy5fZGVjcnlwdCA9IGRlY3J5cHRcbiAgdGhpcy5fYWxlbiA9IDBcbiAgdGhpcy5fbGVuID0gMFxuICBpdi5jb3B5KHRoaXMuX3ByZXYpXG4gIHRoaXMuX21vZGUgPSBtb2RlXG4gIHZhciBoID0gbmV3IEJ1ZmZlcig0KVxuICBoLmZpbGwoMClcbiAgdGhpcy5fZ2hhc2ggPSBuZXcgR0hBU0godGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhoKSlcbiAgdGhpcy5fYXV0aFRhZyA9IG51bGxcbiAgdGhpcy5fY2FsbGVkID0gZmFsc2Vcbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICBpZiAoIXRoaXMuX2NhbGxlZCAmJiB0aGlzLl9hbGVuKSB7XG4gICAgdmFyIHJ1bXAgPSAxNiAtICh0aGlzLl9hbGVuICUgMTYpXG4gICAgaWYgKHJ1bXAgPCAxNikge1xuICAgICAgcnVtcCA9IG5ldyBCdWZmZXIocnVtcClcbiAgICAgIHJ1bXAuZmlsbCgwKVxuICAgICAgdGhpcy5fZ2hhc2gudXBkYXRlKHJ1bXApXG4gICAgfVxuICB9XG4gIHRoaXMuX2NhbGxlZCA9IHRydWVcbiAgdmFyIG91dCA9IHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLCBjaHVuaylcbiAgaWYgKHRoaXMuX2RlY3J5cHQpIHtcbiAgICB0aGlzLl9naGFzaC51cGRhdGUoY2h1bmspXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZ2hhc2gudXBkYXRlKG91dClcbiAgfVxuICB0aGlzLl9sZW4gKz0gY2h1bmsubGVuZ3RoXG4gIHJldHVybiBvdXRcbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fZGVjcnlwdCAmJiAhdGhpcy5fYXV0aFRhZykge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhJylcbiAgfVxuICB2YXIgdGFnID0geG9yKHRoaXMuX2doYXNoLmZpbmFsKHRoaXMuX2FsZW4gKiA4LCB0aGlzLl9sZW4gKiA4KSwgdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpXG4gIGlmICh0aGlzLl9kZWNyeXB0KSB7XG4gICAgaWYgKHhvclRlc3QodGFnLCB0aGlzLl9hdXRoVGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9hdXRoVGFnID0gdGFnXG4gIH1cbiAgdGhpcy5fY2lwaGVyLnNjcnViKClcbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuZ2V0QXV0aFRhZyA9IGZ1bmN0aW9uIGdldEF1dGhUYWcgKCkge1xuICBpZiAoIXRoaXMuX2RlY3J5cHQgJiYgQnVmZmVyLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhUYWdcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcbiAgfVxufVxuU3RyZWFtQ2lwaGVyLnByb3RvdHlwZS5zZXRBdXRoVGFnID0gZnVuY3Rpb24gc2V0QXV0aFRhZyAodGFnKSB7XG4gIGlmICh0aGlzLl9kZWNyeXB0KSB7XG4gICAgdGhpcy5fYXV0aFRhZyA9IHRhZ1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKVxuICB9XG59XG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLnNldEFBRCA9IGZ1bmN0aW9uIHNldEFBRCAoYnVmKSB7XG4gIGlmICghdGhpcy5fY2FsbGVkKSB7XG4gICAgdGhpcy5fZ2hhc2gudXBkYXRlKGJ1ZilcbiAgICB0aGlzLl9hbGVuICs9IGJ1Zi5sZW5ndGhcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZScpXG4gIH1cbn1cbmZ1bmN0aW9uIHhvclRlc3QgKGEsIGIpIHtcbiAgdmFyIG91dCA9IDBcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIG91dCsrXG4gIH1cbiAgdmFyIGxlbiA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aClcbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgb3V0ICs9IChhW2ldIF4gYltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG4iLCJ2YXIgY2lwaGVycyA9IHJlcXVpcmUoJy4vZW5jcnlwdGVyJylcbmV4cG9ydHMuY3JlYXRlQ2lwaGVyID0gZXhwb3J0cy5DaXBoZXIgPSBjaXBoZXJzLmNyZWF0ZUNpcGhlclxuZXhwb3J0cy5jcmVhdGVDaXBoZXJpdiA9IGV4cG9ydHMuQ2lwaGVyaXYgPSBjaXBoZXJzLmNyZWF0ZUNpcGhlcml2XG52YXIgZGVjaXBoZXJzID0gcmVxdWlyZSgnLi9kZWNyeXB0ZXInKVxuZXhwb3J0cy5jcmVhdGVEZWNpcGhlciA9IGV4cG9ydHMuRGVjaXBoZXIgPSBkZWNpcGhlcnMuY3JlYXRlRGVjaXBoZXJcbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXJpdiA9IGV4cG9ydHMuRGVjaXBoZXJpdiA9IGRlY2lwaGVycy5jcmVhdGVEZWNpcGhlcml2XG52YXIgbW9kZXMgPSByZXF1aXJlKCcuL21vZGVzJylcbmZ1bmN0aW9uIGdldENpcGhlcnMgKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMobW9kZXMpXG59XG5leHBvcnRzLmxpc3RDaXBoZXJzID0gZXhwb3J0cy5nZXRDaXBoZXJzID0gZ2V0Q2lwaGVyc1xuIiwidmFyIGFlcyA9IHJlcXVpcmUoJy4vYWVzJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgbW9kZXMgPSByZXF1aXJlKCcuL21vZGVzJylcbnZhciBTdHJlYW1DaXBoZXIgPSByZXF1aXJlKCcuL3N0cmVhbUNpcGhlcicpXG52YXIgQXV0aENpcGhlciA9IHJlcXVpcmUoJy4vYXV0aENpcGhlcicpXG52YXIgZWJ0ayA9IHJlcXVpcmUoJ2V2cF9ieXRlc3Rva2V5JylcblxuaW5oZXJpdHMoRGVjaXBoZXIsIFRyYW5zZm9ybSlcbmZ1bmN0aW9uIERlY2lwaGVyIChtb2RlLCBrZXksIGl2KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEZWNpcGhlcikpIHtcbiAgICByZXR1cm4gbmV3IERlY2lwaGVyKG1vZGUsIGtleSwgaXYpXG4gIH1cbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcbiAgdGhpcy5fY2FjaGUgPSBuZXcgU3BsaXR0ZXIoKVxuICB0aGlzLl9sYXN0ID0gdm9pZCAwXG4gIHRoaXMuX2NpcGhlciA9IG5ldyBhZXMuQUVTKGtleSlcbiAgdGhpcy5fcHJldiA9IG5ldyBCdWZmZXIoaXYubGVuZ3RoKVxuICBpdi5jb3B5KHRoaXMuX3ByZXYpXG4gIHRoaXMuX21vZGUgPSBtb2RlXG4gIHRoaXMuX2F1dG9wYWRkaW5nID0gdHJ1ZVxufVxuRGVjaXBoZXIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLl9jYWNoZS5hZGQoZGF0YSlcbiAgdmFyIGNodW5rXG4gIHZhciB0aGluZ1xuICB2YXIgb3V0ID0gW11cbiAgd2hpbGUgKChjaHVuayA9IHRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZykpKSB7XG4gICAgdGhpbmcgPSB0aGlzLl9tb2RlLmRlY3J5cHQodGhpcywgY2h1bmspXG4gICAgb3V0LnB1c2godGhpbmcpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQob3V0KVxufVxuRGVjaXBoZXIucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNodW5rID0gdGhpcy5fY2FjaGUuZmx1c2goKVxuICBpZiAodGhpcy5fYXV0b3BhZGRpbmcpIHtcbiAgICByZXR1cm4gdW5wYWQodGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsIGNodW5rKSlcbiAgfSBlbHNlIGlmIChjaHVuaykge1xuICAgIHRocm93IG5ldyBFcnJvcignZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoJylcbiAgfVxufVxuRGVjaXBoZXIucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nID0gZnVuY3Rpb24gKHNldFRvKSB7XG4gIHRoaXMuX2F1dG9wYWRkaW5nID0gISFzZXRUb1xuICByZXR1cm4gdGhpc1xufVxuZnVuY3Rpb24gU3BsaXR0ZXIgKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3BsaXR0ZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBTcGxpdHRlcigpXG4gIH1cbiAgdGhpcy5jYWNoZSA9IG5ldyBCdWZmZXIoJycpXG59XG5TcGxpdHRlci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIGRhdGFdKVxufVxuXG5TcGxpdHRlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGF1dG9QYWRkaW5nKSB7XG4gIHZhciBvdXRcbiAgaWYgKGF1dG9QYWRkaW5nKSB7XG4gICAgaWYgKHRoaXMuY2FjaGUubGVuZ3RoID4gMTYpIHtcbiAgICAgIG91dCA9IHRoaXMuY2FjaGUuc2xpY2UoMCwgMTYpXG4gICAgICB0aGlzLmNhY2hlID0gdGhpcy5jYWNoZS5zbGljZSgxNilcbiAgICAgIHJldHVybiBvdXRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoaXMuY2FjaGUubGVuZ3RoID49IDE2KSB7XG4gICAgICBvdXQgPSB0aGlzLmNhY2hlLnNsaWNlKDAsIDE2KVxuICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuc2xpY2UoMTYpXG4gICAgICByZXR1cm4gb3V0XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5TcGxpdHRlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNhY2hlLmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlXG4gIH1cbn1cbmZ1bmN0aW9uIHVucGFkIChsYXN0KSB7XG4gIHZhciBwYWRkZWQgPSBsYXN0WzE1XVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBwYWRkZWQpIHtcbiAgICBpZiAobGFzdFsoaSArICgxNiAtIHBhZGRlZCkpXSAhPT0gcGFkZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuYWJsZSB0byBkZWNyeXB0IGRhdGEnKVxuICAgIH1cbiAgfVxuICBpZiAocGFkZGVkID09PSAxNikge1xuICAgIHJldHVyblxuICB9XG4gIHJldHVybiBsYXN0LnNsaWNlKDAsIDE2IC0gcGFkZGVkKVxufVxuXG52YXIgbW9kZWxpc3QgPSB7XG4gIEVDQjogcmVxdWlyZSgnLi9tb2Rlcy9lY2InKSxcbiAgQ0JDOiByZXF1aXJlKCcuL21vZGVzL2NiYycpLFxuICBDRkI6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiJyksXG4gIENGQjg6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiOCcpLFxuICBDRkIxOiByZXF1aXJlKCcuL21vZGVzL2NmYjEnKSxcbiAgT0ZCOiByZXF1aXJlKCcuL21vZGVzL29mYicpLFxuICBDVFI6IHJlcXVpcmUoJy4vbW9kZXMvY3RyJyksXG4gIEdDTTogcmVxdWlyZSgnLi9tb2Rlcy9jdHInKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlcml2IChzdWl0ZSwgcGFzc3dvcmQsIGl2KSB7XG4gIHZhciBjb25maWcgPSBtb2Rlc1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgaWYgKHR5cGVvZiBpdiA9PT0gJ3N0cmluZycpIHtcbiAgICBpdiA9IG5ldyBCdWZmZXIoaXYpXG4gIH1cbiAgaWYgKHR5cGVvZiBwYXNzd29yZCA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXNzd29yZCA9IG5ldyBCdWZmZXIocGFzc3dvcmQpXG4gIH1cbiAgaWYgKHBhc3N3b3JkLmxlbmd0aCAhPT0gY29uZmlnLmtleSAvIDgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGtleSBsZW5ndGggJyArIHBhc3N3b3JkLmxlbmd0aClcbiAgfVxuICBpZiAoaXYubGVuZ3RoICE9PSBjb25maWcuaXYpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGl2IGxlbmd0aCAnICsgaXYubGVuZ3RoKVxuICB9XG4gIGlmIChjb25maWcudHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbUNpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdiwgdHJ1ZSlcbiAgfSBlbHNlIGlmIChjb25maWcudHlwZSA9PT0gJ2F1dGgnKSB7XG4gICAgcmV0dXJuIG5ldyBBdXRoQ2lwaGVyKG1vZGVsaXN0W2NvbmZpZy5tb2RlXSwgcGFzc3dvcmQsIGl2LCB0cnVlKVxuICB9XG4gIHJldHVybiBuZXcgRGVjaXBoZXIobW9kZWxpc3RbY29uZmlnLm1vZGVdLCBwYXNzd29yZCwgaXYpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlY2lwaGVyIChzdWl0ZSwgcGFzc3dvcmQpIHtcbiAgdmFyIGNvbmZpZyA9IG1vZGVzW3N1aXRlLnRvTG93ZXJDYXNlKCldXG4gIGlmICghY29uZmlnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbiAgfVxuICB2YXIga2V5cyA9IGVidGsocGFzc3dvcmQsIGZhbHNlLCBjb25maWcua2V5LCBjb25maWcuaXYpXG4gIHJldHVybiBjcmVhdGVEZWNpcGhlcml2KHN1aXRlLCBrZXlzLmtleSwga2V5cy5pdilcbn1cbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXIgPSBjcmVhdGVEZWNpcGhlclxuZXhwb3J0cy5jcmVhdGVEZWNpcGhlcml2ID0gY3JlYXRlRGVjaXBoZXJpdlxuIiwidmFyIGFlcyA9IHJlcXVpcmUoJy4vYWVzJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgbW9kZXMgPSByZXF1aXJlKCcuL21vZGVzJylcbnZhciBlYnRrID0gcmVxdWlyZSgnZXZwX2J5dGVzdG9rZXknKVxudmFyIFN0cmVhbUNpcGhlciA9IHJlcXVpcmUoJy4vc3RyZWFtQ2lwaGVyJylcbnZhciBBdXRoQ2lwaGVyID0gcmVxdWlyZSgnLi9hdXRoQ2lwaGVyJylcbmluaGVyaXRzKENpcGhlciwgVHJhbnNmb3JtKVxuZnVuY3Rpb24gQ2lwaGVyIChtb2RlLCBrZXksIGl2KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDaXBoZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBDaXBoZXIobW9kZSwga2V5LCBpdilcbiAgfVxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuICB0aGlzLl9jYWNoZSA9IG5ldyBTcGxpdHRlcigpXG4gIHRoaXMuX2NpcGhlciA9IG5ldyBhZXMuQUVTKGtleSlcbiAgdGhpcy5fcHJldiA9IG5ldyBCdWZmZXIoaXYubGVuZ3RoKVxuICBpdi5jb3B5KHRoaXMuX3ByZXYpXG4gIHRoaXMuX21vZGUgPSBtb2RlXG4gIHRoaXMuX2F1dG9wYWRkaW5nID0gdHJ1ZVxufVxuQ2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5fY2FjaGUuYWRkKGRhdGEpXG4gIHZhciBjaHVua1xuICB2YXIgdGhpbmdcbiAgdmFyIG91dCA9IFtdXG4gIHdoaWxlICgoY2h1bmsgPSB0aGlzLl9jYWNoZS5nZXQoKSkpIHtcbiAgICB0aGluZyA9IHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLCBjaHVuaylcbiAgICBvdXQucHVzaCh0aGluZylcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChvdXQpXG59XG5DaXBoZXIucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNodW5rID0gdGhpcy5fY2FjaGUuZmx1c2goKVxuICBpZiAodGhpcy5fYXV0b3BhZGRpbmcpIHtcbiAgICBjaHVuayA9IHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLCBjaHVuaylcbiAgICB0aGlzLl9jaXBoZXIuc2NydWIoKVxuICAgIHJldHVybiBjaHVua1xuICB9IGVsc2UgaWYgKGNodW5rLnRvU3RyaW5nKCdoZXgnKSAhPT0gJzEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwJykge1xuICAgIHRoaXMuX2NpcGhlci5zY3J1YigpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgnKVxuICB9XG59XG5DaXBoZXIucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nID0gZnVuY3Rpb24gKHNldFRvKSB7XG4gIHRoaXMuX2F1dG9wYWRkaW5nID0gISFzZXRUb1xuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiBTcGxpdHRlciAoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTcGxpdHRlcikpIHtcbiAgICByZXR1cm4gbmV3IFNwbGl0dGVyKClcbiAgfVxuICB0aGlzLmNhY2hlID0gbmV3IEJ1ZmZlcignJylcbn1cblNwbGl0dGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLmNhY2hlID0gQnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSwgZGF0YV0pXG59XG5cblNwbGl0dGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNhY2hlLmxlbmd0aCA+IDE1KSB7XG4gICAgdmFyIG91dCA9IHRoaXMuY2FjaGUuc2xpY2UoMCwgMTYpXG4gICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuc2xpY2UoMTYpXG4gICAgcmV0dXJuIG91dFxuICB9XG4gIHJldHVybiBudWxsXG59XG5TcGxpdHRlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsZW4gPSAxNiAtIHRoaXMuY2FjaGUubGVuZ3RoXG4gIHZhciBwYWRCdWZmID0gbmV3IEJ1ZmZlcihsZW4pXG5cbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgcGFkQnVmZi53cml0ZVVJbnQ4KGxlbiwgaSlcbiAgfVxuICB2YXIgb3V0ID0gQnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSwgcGFkQnVmZl0pXG4gIHJldHVybiBvdXRcbn1cbnZhciBtb2RlbGlzdCA9IHtcbiAgRUNCOiByZXF1aXJlKCcuL21vZGVzL2VjYicpLFxuICBDQkM6IHJlcXVpcmUoJy4vbW9kZXMvY2JjJyksXG4gIENGQjogcmVxdWlyZSgnLi9tb2Rlcy9jZmInKSxcbiAgQ0ZCODogcmVxdWlyZSgnLi9tb2Rlcy9jZmI4JyksXG4gIENGQjE6IHJlcXVpcmUoJy4vbW9kZXMvY2ZiMScpLFxuICBPRkI6IHJlcXVpcmUoJy4vbW9kZXMvb2ZiJyksXG4gIENUUjogcmVxdWlyZSgnLi9tb2Rlcy9jdHInKSxcbiAgR0NNOiByZXF1aXJlKCcuL21vZGVzL2N0cicpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNpcGhlcml2IChzdWl0ZSwgcGFzc3dvcmQsIGl2KSB7XG4gIHZhciBjb25maWcgPSBtb2Rlc1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgaWYgKHR5cGVvZiBpdiA9PT0gJ3N0cmluZycpIHtcbiAgICBpdiA9IG5ldyBCdWZmZXIoaXYpXG4gIH1cbiAgaWYgKHR5cGVvZiBwYXNzd29yZCA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXNzd29yZCA9IG5ldyBCdWZmZXIocGFzc3dvcmQpXG4gIH1cbiAgaWYgKHBhc3N3b3JkLmxlbmd0aCAhPT0gY29uZmlnLmtleSAvIDgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGtleSBsZW5ndGggJyArIHBhc3N3b3JkLmxlbmd0aClcbiAgfVxuICBpZiAoaXYubGVuZ3RoICE9PSBjb25maWcuaXYpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGl2IGxlbmd0aCAnICsgaXYubGVuZ3RoKVxuICB9XG4gIGlmIChjb25maWcudHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbUNpcGhlcihtb2RlbGlzdFtjb25maWcubW9kZV0sIHBhc3N3b3JkLCBpdilcbiAgfSBlbHNlIGlmIChjb25maWcudHlwZSA9PT0gJ2F1dGgnKSB7XG4gICAgcmV0dXJuIG5ldyBBdXRoQ2lwaGVyKG1vZGVsaXN0W2NvbmZpZy5tb2RlXSwgcGFzc3dvcmQsIGl2KVxuICB9XG4gIHJldHVybiBuZXcgQ2lwaGVyKG1vZGVsaXN0W2NvbmZpZy5tb2RlXSwgcGFzc3dvcmQsIGl2KVxufVxuZnVuY3Rpb24gY3JlYXRlQ2lwaGVyIChzdWl0ZSwgcGFzc3dvcmQpIHtcbiAgdmFyIGNvbmZpZyA9IG1vZGVzW3N1aXRlLnRvTG93ZXJDYXNlKCldXG4gIGlmICghY29uZmlnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbiAgfVxuICB2YXIga2V5cyA9IGVidGsocGFzc3dvcmQsIGZhbHNlLCBjb25maWcua2V5LCBjb25maWcuaXYpXG4gIHJldHVybiBjcmVhdGVDaXBoZXJpdihzdWl0ZSwga2V5cy5rZXksIGtleXMuaXYpXG59XG5cbmV4cG9ydHMuY3JlYXRlQ2lwaGVyaXYgPSBjcmVhdGVDaXBoZXJpdlxuZXhwb3J0cy5jcmVhdGVDaXBoZXIgPSBjcmVhdGVDaXBoZXJcbiIsInZhciB6ZXJvcyA9IG5ldyBCdWZmZXIoMTYpXG56ZXJvcy5maWxsKDApXG5tb2R1bGUuZXhwb3J0cyA9IEdIQVNIXG5mdW5jdGlvbiBHSEFTSCAoa2V5KSB7XG4gIHRoaXMuaCA9IGtleVxuICB0aGlzLnN0YXRlID0gbmV3IEJ1ZmZlcigxNilcbiAgdGhpcy5zdGF0ZS5maWxsKDApXG4gIHRoaXMuY2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxufVxuLy8gZnJvbSBodHRwOi8vYml0d2lzZXNoaWZ0bGVmdC5naXRodWIuaW8vc2pjbC9kb2Mvc3ltYm9scy9zcmMvY29yZV9nY20uanMuaHRtbFxuLy8gYnkgSnVobyBWw6Row6QtSGVydHR1YVxuR0hBU0gucHJvdG90eXBlLmdoYXNoID0gZnVuY3Rpb24gKGJsb2NrKSB7XG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGJsb2NrLmxlbmd0aCkge1xuICAgIHRoaXMuc3RhdGVbaV0gXj0gYmxvY2tbaV1cbiAgfVxuICB0aGlzLl9tdWx0aXBseSgpXG59XG5cbkdIQVNILnByb3RvdHlwZS5fbXVsdGlwbHkgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBWaSA9IHRvQXJyYXkodGhpcy5oKVxuICB2YXIgWmkgPSBbMCwgMCwgMCwgMF1cbiAgdmFyIGosIHhpLCBsc2JfVmlcbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgMTI4KSB7XG4gICAgeGkgPSAodGhpcy5zdGF0ZVt+fihpIC8gOCldICYgKDEgPDwgKDcgLSBpICUgOCkpKSAhPT0gMFxuICAgIGlmICh4aSkge1xuICAgICAgLy8gWl9pKzEgPSBaX2kgXiBWX2lcbiAgICAgIFppID0geG9yKFppLCBWaSlcbiAgICB9XG5cbiAgICAvLyBTdG9yZSB0aGUgdmFsdWUgb2YgTFNCKFZfaSlcbiAgICBsc2JfVmkgPSAoVmlbM10gJiAxKSAhPT0gMFxuXG4gICAgLy8gVl9pKzEgPSBWX2kgPj4gMVxuICAgIGZvciAoaiA9IDM7IGogPiAwOyBqLS0pIHtcbiAgICAgIFZpW2pdID0gKFZpW2pdID4+PiAxKSB8ICgoVmlbaiAtIDFdICYgMSkgPDwgMzEpXG4gICAgfVxuICAgIFZpWzBdID0gVmlbMF0gPj4+IDFcblxuICAgIC8vIElmIExTQihWX2kpIGlzIDEsIFZfaSsxID0gKFZfaSA+PiAxKSBeIFJcbiAgICBpZiAobHNiX1ZpKSB7XG4gICAgICBWaVswXSA9IFZpWzBdIF4gKDB4ZTEgPDwgMjQpXG4gICAgfVxuICB9XG4gIHRoaXMuc3RhdGUgPSBmcm9tQXJyYXkoWmkpXG59XG5HSEFTSC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICB0aGlzLmNhY2hlID0gQnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSwgYnVmXSlcbiAgdmFyIGNodW5rXG4gIHdoaWxlICh0aGlzLmNhY2hlLmxlbmd0aCA+PSAxNikge1xuICAgIGNodW5rID0gdGhpcy5jYWNoZS5zbGljZSgwLCAxNilcbiAgICB0aGlzLmNhY2hlID0gdGhpcy5jYWNoZS5zbGljZSgxNilcbiAgICB0aGlzLmdoYXNoKGNodW5rKVxuICB9XG59XG5HSEFTSC5wcm90b3R5cGUuZmluYWwgPSBmdW5jdGlvbiAoYWJsLCBibCkge1xuICBpZiAodGhpcy5jYWNoZS5sZW5ndGgpIHtcbiAgICB0aGlzLmdoYXNoKEJ1ZmZlci5jb25jYXQoW3RoaXMuY2FjaGUsIHplcm9zXSwgMTYpKVxuICB9XG4gIHRoaXMuZ2hhc2goZnJvbUFycmF5KFtcbiAgICAwLCBhYmwsXG4gICAgMCwgYmxcbiAgXSkpXG4gIHJldHVybiB0aGlzLnN0YXRlXG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkgKGJ1Zikge1xuICByZXR1cm4gW1xuICAgIGJ1Zi5yZWFkVUludDMyQkUoMCksXG4gICAgYnVmLnJlYWRVSW50MzJCRSg0KSxcbiAgICBidWYucmVhZFVJbnQzMkJFKDgpLFxuICAgIGJ1Zi5yZWFkVUludDMyQkUoMTIpXG4gIF1cbn1cbmZ1bmN0aW9uIGZyb21BcnJheSAob3V0KSB7XG4gIG91dCA9IG91dC5tYXAoZml4dXBfdWludDMyKVxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcigxNilcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzBdLCAwKVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMV0sIDQpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsyXSwgOClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzNdLCAxMilcbiAgcmV0dXJuIGJ1ZlxufVxudmFyIHVpbnRfbWF4ID0gTWF0aC5wb3coMiwgMzIpXG5mdW5jdGlvbiBmaXh1cF91aW50MzIgKHgpIHtcbiAgdmFyIHJldCwgeF9wb3NcbiAgcmV0ID0geCA+IHVpbnRfbWF4IHx8IHggPCAwID8gKHhfcG9zID0gTWF0aC5hYnMoeCkgJSB1aW50X21heCwgeCA8IDAgPyB1aW50X21heCAtIHhfcG9zIDogeF9wb3MpIDogeFxuICByZXR1cm4gcmV0XG59XG5mdW5jdGlvbiB4b3IgKGEsIGIpIHtcbiAgcmV0dXJuIFtcbiAgICBhWzBdIF4gYlswXSxcbiAgICBhWzFdIF4gYlsxXSxcbiAgICBhWzJdIF4gYlsyXSxcbiAgICBhWzNdIF4gYlszXVxuICBdXG59XG4iLCJleHBvcnRzWydhZXMtMTI4LWVjYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDAsXG4gIG1vZGU6ICdFQ0InLFxuICB0eXBlOiAnYmxvY2snXG59XG5leHBvcnRzWydhZXMtMTkyLWVjYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDAsXG4gIG1vZGU6ICdFQ0InLFxuICB0eXBlOiAnYmxvY2snXG59XG5leHBvcnRzWydhZXMtMjU2LWVjYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDI1NixcbiAgaXY6IDAsXG4gIG1vZGU6ICdFQ0InLFxuICB0eXBlOiAnYmxvY2snXG59XG5leHBvcnRzWydhZXMtMTI4LWNiYyddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0JDJyxcbiAgdHlwZTogJ2Jsb2NrJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1jYmMnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxOTIsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NCQycsXG4gIHR5cGU6ICdibG9jaydcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY2JjJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMjU2LFxuICBpdjogMTYsXG4gIG1vZGU6ICdDQkMnLFxuICB0eXBlOiAnYmxvY2snXG59XG5leHBvcnRzWydhZXMxMjgnXSA9IGV4cG9ydHNbJ2Flcy0xMjgtY2JjJ11cbmV4cG9ydHNbJ2FlczE5MiddID0gZXhwb3J0c1snYWVzLTE5Mi1jYmMnXVxuZXhwb3J0c1snYWVzMjU2J10gPSBleHBvcnRzWydhZXMtMjU2LWNiYyddXG5leHBvcnRzWydhZXMtMTI4LWNmYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY2ZiJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1jZmInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTI4LWNmYjgnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQjgnLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1jZmI4J10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkI4JyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY2ZiOCddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDI1NixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCOCcsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTI4LWNmYjEnXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAxMjgsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NGQjEnLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTE5Mi1jZmIxJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdDRkIxJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0yNTYtY2ZiMSddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDI1NixcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ0ZCMScsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTI4LW9mYiddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDE2LFxuICBtb2RlOiAnT0ZCJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItb2ZiJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdPRkInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1vZmInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ09GQicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTI4LWN0ciddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDE2LFxuICBtb2RlOiAnQ1RSJyxcbiAgdHlwZTogJ3N0cmVhbSdcbn1cbmV4cG9ydHNbJ2Flcy0xOTItY3RyJ10gPSB7XG4gIGNpcGhlcjogJ0FFUycsXG4gIGtleTogMTkyLFxuICBpdjogMTYsXG4gIG1vZGU6ICdDVFInLFxuICB0eXBlOiAnc3RyZWFtJ1xufVxuZXhwb3J0c1snYWVzLTI1Ni1jdHInXSA9IHtcbiAgY2lwaGVyOiAnQUVTJyxcbiAga2V5OiAyNTYsXG4gIGl2OiAxNixcbiAgbW9kZTogJ0NUUicsXG4gIHR5cGU6ICdzdHJlYW0nXG59XG5leHBvcnRzWydhZXMtMTI4LWdjbSddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDEyOCxcbiAgaXY6IDEyLFxuICBtb2RlOiAnR0NNJyxcbiAgdHlwZTogJ2F1dGgnXG59XG5leHBvcnRzWydhZXMtMTkyLWdjbSddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDE5MixcbiAgaXY6IDEyLFxuICBtb2RlOiAnR0NNJyxcbiAgdHlwZTogJ2F1dGgnXG59XG5leHBvcnRzWydhZXMtMjU2LWdjbSddID0ge1xuICBjaXBoZXI6ICdBRVMnLFxuICBrZXk6IDI1NixcbiAgaXY6IDEyLFxuICBtb2RlOiAnR0NNJyxcbiAgdHlwZTogJ2F1dGgnXG59XG4iLCJ2YXIgeG9yID0gcmVxdWlyZSgnYnVmZmVyLXhvcicpXG5cbmV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBibG9jaykge1xuICB2YXIgZGF0YSA9IHhvcihibG9jaywgc2VsZi5fcHJldilcblxuICBzZWxmLl9wcmV2ID0gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhkYXRhKVxuICByZXR1cm4gc2VsZi5fcHJldlxufVxuXG5leHBvcnRzLmRlY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgYmxvY2spIHtcbiAgdmFyIHBhZCA9IHNlbGYuX3ByZXZcblxuICBzZWxmLl9wcmV2ID0gYmxvY2tcbiAgdmFyIG91dCA9IHNlbGYuX2NpcGhlci5kZWNyeXB0QmxvY2soYmxvY2spXG5cbiAgcmV0dXJuIHhvcihvdXQsIHBhZClcbn1cbiIsInZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcblxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGRhdGEsIGRlY3J5cHQpIHtcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoJycpXG4gIHZhciBsZW5cblxuICB3aGlsZSAoZGF0YS5sZW5ndGgpIHtcbiAgICBpZiAoc2VsZi5fY2FjaGUubGVuZ3RoID09PSAwKSB7XG4gICAgICBzZWxmLl9jYWNoZSA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldilcbiAgICAgIHNlbGYuX3ByZXYgPSBuZXcgQnVmZmVyKCcnKVxuICAgIH1cblxuICAgIGlmIChzZWxmLl9jYWNoZS5sZW5ndGggPD0gZGF0YS5sZW5ndGgpIHtcbiAgICAgIGxlbiA9IHNlbGYuX2NhY2hlLmxlbmd0aFxuICAgICAgb3V0ID0gQnVmZmVyLmNvbmNhdChbb3V0LCBlbmNyeXB0U3RhcnQoc2VsZiwgZGF0YS5zbGljZSgwLCBsZW4pLCBkZWNyeXB0KV0pXG4gICAgICBkYXRhID0gZGF0YS5zbGljZShsZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCA9IEJ1ZmZlci5jb25jYXQoW291dCwgZW5jcnlwdFN0YXJ0KHNlbGYsIGRhdGEsIGRlY3J5cHQpXSlcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuZnVuY3Rpb24gZW5jcnlwdFN0YXJ0IChzZWxmLCBkYXRhLCBkZWNyeXB0KSB7XG4gIHZhciBsZW4gPSBkYXRhLmxlbmd0aFxuICB2YXIgb3V0ID0geG9yKGRhdGEsIHNlbGYuX2NhY2hlKVxuICBzZWxmLl9jYWNoZSA9IHNlbGYuX2NhY2hlLnNsaWNlKGxlbilcbiAgc2VsZi5fcHJldiA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuX3ByZXYsIGRlY3J5cHQgPyBkYXRhIDogb3V0XSlcbiAgcmV0dXJuIG91dFxufVxuIiwiZnVuY3Rpb24gZW5jcnlwdEJ5dGUgKHNlbGYsIGJ5dGVQYXJhbSwgZGVjcnlwdCkge1xuICB2YXIgcGFkXG4gIHZhciBpID0gLTFcbiAgdmFyIGxlbiA9IDhcbiAgdmFyIG91dCA9IDBcbiAgdmFyIGJpdCwgdmFsdWVcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHBhZCA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldilcbiAgICBiaXQgPSAoYnl0ZVBhcmFtICYgKDEgPDwgKDcgLSBpKSkpID8gMHg4MCA6IDBcbiAgICB2YWx1ZSA9IHBhZFswXSBeIGJpdFxuICAgIG91dCArPSAoKHZhbHVlICYgMHg4MCkgPj4gKGkgJSA4KSlcbiAgICBzZWxmLl9wcmV2ID0gc2hpZnRJbihzZWxmLl9wcmV2LCBkZWNyeXB0ID8gYml0IDogdmFsdWUpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGNodW5rLCBkZWNyeXB0KSB7XG4gIHZhciBsZW4gPSBjaHVuay5sZW5ndGhcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIobGVuKVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBvdXRbaV0gPSBlbmNyeXB0Qnl0ZShzZWxmLCBjaHVua1tpXSwgZGVjcnlwdClcbiAgfVxuICByZXR1cm4gb3V0XG59XG5mdW5jdGlvbiBzaGlmdEluIChidWZmZXIsIHZhbHVlKSB7XG4gIHZhciBsZW4gPSBidWZmZXIubGVuZ3RoXG4gIHZhciBpID0gLTFcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoYnVmZmVyLmxlbmd0aClcbiAgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbYnVmZmVyLCBuZXcgQnVmZmVyKFt2YWx1ZV0pXSlcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIG91dFtpXSA9IGJ1ZmZlcltpXSA8PCAxIHwgYnVmZmVyW2kgKyAxXSA+PiAoNylcbiAgfVxuICByZXR1cm4gb3V0XG59XG4iLCJmdW5jdGlvbiBlbmNyeXB0Qnl0ZSAoc2VsZiwgYnl0ZVBhcmFtLCBkZWNyeXB0KSB7XG4gIHZhciBwYWQgPSBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHNlbGYuX3ByZXYpXG4gIHZhciBvdXQgPSBwYWRbMF0gXiBieXRlUGFyYW1cbiAgc2VsZi5fcHJldiA9IEJ1ZmZlci5jb25jYXQoW3NlbGYuX3ByZXYuc2xpY2UoMSksIG5ldyBCdWZmZXIoW2RlY3J5cHQgPyBieXRlUGFyYW0gOiBvdXRdKV0pXG4gIHJldHVybiBvdXRcbn1cbmV4cG9ydHMuZW5jcnlwdCA9IGZ1bmN0aW9uIChzZWxmLCBjaHVuaywgZGVjcnlwdCkge1xuICB2YXIgbGVuID0gY2h1bmsubGVuZ3RoXG4gIHZhciBvdXQgPSBuZXcgQnVmZmVyKGxlbilcbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgb3V0W2ldID0gZW5jcnlwdEJ5dGUoc2VsZiwgY2h1bmtbaV0sIGRlY3J5cHQpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuIiwidmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxuXG5mdW5jdGlvbiBpbmNyMzIgKGl2KSB7XG4gIHZhciBsZW4gPSBpdi5sZW5ndGhcbiAgdmFyIGl0ZW1cbiAgd2hpbGUgKGxlbi0tKSB7XG4gICAgaXRlbSA9IGl2LnJlYWRVSW50OChsZW4pXG4gICAgaWYgKGl0ZW0gPT09IDI1NSkge1xuICAgICAgaXYud3JpdGVVSW50OCgwLCBsZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0rK1xuICAgICAgaXYud3JpdGVVSW50OChpdGVtLCBsZW4pXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRCbG9jayAoc2VsZikge1xuICB2YXIgb3V0ID0gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhzZWxmLl9wcmV2KVxuICBpbmNyMzIoc2VsZi5fcHJldilcbiAgcmV0dXJuIG91dFxufVxuXG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgY2h1bmspIHtcbiAgd2hpbGUgKHNlbGYuX2NhY2hlLmxlbmd0aCA8IGNodW5rLmxlbmd0aCkge1xuICAgIHNlbGYuX2NhY2hlID0gQnVmZmVyLmNvbmNhdChbc2VsZi5fY2FjaGUsIGdldEJsb2NrKHNlbGYpXSlcbiAgfVxuICB2YXIgcGFkID0gc2VsZi5fY2FjaGUuc2xpY2UoMCwgY2h1bmsubGVuZ3RoKVxuICBzZWxmLl9jYWNoZSA9IHNlbGYuX2NhY2hlLnNsaWNlKGNodW5rLmxlbmd0aClcbiAgcmV0dXJuIHhvcihjaHVuaywgcGFkKVxufVxuIiwiZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGJsb2NrKSB7XG4gIHJldHVybiBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGJsb2NrKVxufVxuZXhwb3J0cy5kZWNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGJsb2NrKSB7XG4gIHJldHVybiBzZWxmLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGJsb2NrKVxufVxuIiwidmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxuXG5mdW5jdGlvbiBnZXRCbG9jayAoc2VsZikge1xuICBzZWxmLl9wcmV2ID0gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhzZWxmLl9wcmV2KVxuICByZXR1cm4gc2VsZi5fcHJldlxufVxuXG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgY2h1bmspIHtcbiAgd2hpbGUgKHNlbGYuX2NhY2hlLmxlbmd0aCA8IGNodW5rLmxlbmd0aCkge1xuICAgIHNlbGYuX2NhY2hlID0gQnVmZmVyLmNvbmNhdChbc2VsZi5fY2FjaGUsIGdldEJsb2NrKHNlbGYpXSlcbiAgfVxuXG4gIHZhciBwYWQgPSBzZWxmLl9jYWNoZS5zbGljZSgwLCBjaHVuay5sZW5ndGgpXG4gIHNlbGYuX2NhY2hlID0gc2VsZi5fY2FjaGUuc2xpY2UoY2h1bmsubGVuZ3RoKVxuICByZXR1cm4geG9yKGNodW5rLCBwYWQpXG59XG4iLCJ2YXIgYWVzID0gcmVxdWlyZSgnLi9hZXMnKVxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ2NpcGhlci1iYXNlJylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcblxuaW5oZXJpdHMoU3RyZWFtQ2lwaGVyLCBUcmFuc2Zvcm0pXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmVhbUNpcGhlclxuZnVuY3Rpb24gU3RyZWFtQ2lwaGVyIChtb2RlLCBrZXksIGl2LCBkZWNyeXB0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdHJlYW1DaXBoZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1DaXBoZXIobW9kZSwga2V5LCBpdilcbiAgfVxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHRoaXMuX3ByZXYgPSBuZXcgQnVmZmVyKGl2Lmxlbmd0aClcbiAgdGhpcy5fY2FjaGUgPSBuZXcgQnVmZmVyKCcnKVxuICB0aGlzLl9zZWNDYWNoZSA9IG5ldyBCdWZmZXIoJycpXG4gIHRoaXMuX2RlY3J5cHQgPSBkZWNyeXB0XG4gIGl2LmNvcHkodGhpcy5fcHJldilcbiAgdGhpcy5fbW9kZSA9IG1vZGVcbn1cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICByZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsIGNodW5rLCB0aGlzLl9kZWNyeXB0KVxufVxuU3RyZWFtQ2lwaGVyLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2NpcGhlci5zY3J1YigpXG59XG4iLCJ2YXIgZWJ0ayA9IHJlcXVpcmUoJ2V2cF9ieXRlc3Rva2V5JylcbnZhciBhZXMgPSByZXF1aXJlKCdicm93c2VyaWZ5LWFlcy9icm93c2VyJylcbnZhciBERVMgPSByZXF1aXJlKCdicm93c2VyaWZ5LWRlcycpXG52YXIgZGVzTW9kZXMgPSByZXF1aXJlKCdicm93c2VyaWZ5LWRlcy9tb2RlcycpXG52YXIgYWVzTW9kZXMgPSByZXF1aXJlKCdicm93c2VyaWZ5LWFlcy9tb2RlcycpXG5mdW5jdGlvbiBjcmVhdGVDaXBoZXIgKHN1aXRlLCBwYXNzd29yZCkge1xuICB2YXIga2V5TGVuLCBpdkxlblxuICBzdWl0ZSA9IHN1aXRlLnRvTG93ZXJDYXNlKClcbiAgaWYgKGFlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGFlc01vZGVzW3N1aXRlXS5rZXlcbiAgICBpdkxlbiA9IGFlc01vZGVzW3N1aXRlXS5pdlxuICB9IGVsc2UgaWYgKGRlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGRlc01vZGVzW3N1aXRlXS5rZXkgKiA4XG4gICAgaXZMZW4gPSBkZXNNb2Rlc1tzdWl0ZV0uaXZcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG4gIHZhciBrZXlzID0gZWJ0ayhwYXNzd29yZCwgZmFsc2UsIGtleUxlbiwgaXZMZW4pXG4gIHJldHVybiBjcmVhdGVDaXBoZXJpdihzdWl0ZSwga2V5cy5rZXksIGtleXMuaXYpXG59XG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlciAoc3VpdGUsIHBhc3N3b3JkKSB7XG4gIHZhciBrZXlMZW4sIGl2TGVuXG4gIHN1aXRlID0gc3VpdGUudG9Mb3dlckNhc2UoKVxuICBpZiAoYWVzTW9kZXNbc3VpdGVdKSB7XG4gICAga2V5TGVuID0gYWVzTW9kZXNbc3VpdGVdLmtleVxuICAgIGl2TGVuID0gYWVzTW9kZXNbc3VpdGVdLml2XG4gIH0gZWxzZSBpZiAoZGVzTW9kZXNbc3VpdGVdKSB7XG4gICAga2V5TGVuID0gZGVzTW9kZXNbc3VpdGVdLmtleSAqIDhcbiAgICBpdkxlbiA9IGRlc01vZGVzW3N1aXRlXS5pdlxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbiAgdmFyIGtleXMgPSBlYnRrKHBhc3N3b3JkLCBmYWxzZSwga2V5TGVuLCBpdkxlbilcbiAgcmV0dXJuIGNyZWF0ZURlY2lwaGVyaXYoc3VpdGUsIGtleXMua2V5LCBrZXlzLml2KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDaXBoZXJpdiAoc3VpdGUsIGtleSwgaXYpIHtcbiAgc3VpdGUgPSBzdWl0ZS50b0xvd2VyQ2FzZSgpXG4gIGlmIChhZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICByZXR1cm4gYWVzLmNyZWF0ZUNpcGhlcml2KHN1aXRlLCBrZXksIGl2KVxuICB9IGVsc2UgaWYgKGRlc01vZGVzW3N1aXRlXSkge1xuICAgIHJldHVybiBuZXcgREVTKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgaXY6IGl2LFxuICAgICAgbW9kZTogc3VpdGVcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgc3VpdGUgdHlwZScpXG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZURlY2lwaGVyaXYgKHN1aXRlLCBrZXksIGl2KSB7XG4gIHN1aXRlID0gc3VpdGUudG9Mb3dlckNhc2UoKVxuICBpZiAoYWVzTW9kZXNbc3VpdGVdKSB7XG4gICAgcmV0dXJuIGFlcy5jcmVhdGVEZWNpcGhlcml2KHN1aXRlLCBrZXksIGl2KVxuICB9IGVsc2UgaWYgKGRlc01vZGVzW3N1aXRlXSkge1xuICAgIHJldHVybiBuZXcgREVTKHtcbiAgICAgIGtleToga2V5LFxuICAgICAgaXY6IGl2LFxuICAgICAgbW9kZTogc3VpdGUsXG4gICAgICBkZWNyeXB0OiB0cnVlXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG59XG5leHBvcnRzLmNyZWF0ZUNpcGhlciA9IGV4cG9ydHMuQ2lwaGVyID0gY3JlYXRlQ2lwaGVyXG5leHBvcnRzLmNyZWF0ZUNpcGhlcml2ID0gZXhwb3J0cy5DaXBoZXJpdiA9IGNyZWF0ZUNpcGhlcml2XG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyID0gZXhwb3J0cy5EZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyXG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyaXYgPSBleHBvcnRzLkRlY2lwaGVyaXYgPSBjcmVhdGVEZWNpcGhlcml2XG5mdW5jdGlvbiBnZXRDaXBoZXJzICgpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGRlc01vZGVzKS5jb25jYXQoYWVzLmdldENpcGhlcnMoKSlcbn1cbmV4cG9ydHMubGlzdENpcGhlcnMgPSBleHBvcnRzLmdldENpcGhlcnMgPSBnZXRDaXBoZXJzXG4iLCJ2YXIgQ2lwaGVyQmFzZSA9IHJlcXVpcmUoJ2NpcGhlci1iYXNlJylcbnZhciBkZXMgPSByZXF1aXJlKCdkZXMuanMnKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuXG52YXIgbW9kZXMgPSB7XG4gICdkZXMtZWRlMy1jYmMnOiBkZXMuQ0JDLmluc3RhbnRpYXRlKGRlcy5FREUpLFxuICAnZGVzLWVkZTMnOiBkZXMuRURFLFxuICAnZGVzLWVkZS1jYmMnOiBkZXMuQ0JDLmluc3RhbnRpYXRlKGRlcy5FREUpLFxuICAnZGVzLWVkZSc6IGRlcy5FREUsXG4gICdkZXMtY2JjJzogZGVzLkNCQy5pbnN0YW50aWF0ZShkZXMuREVTKSxcbiAgJ2Rlcy1lY2InOiBkZXMuREVTXG59XG5tb2Rlcy5kZXMgPSBtb2Rlc1snZGVzLWNiYyddXG5tb2Rlcy5kZXMzID0gbW9kZXNbJ2Rlcy1lZGUzLWNiYyddXG5tb2R1bGUuZXhwb3J0cyA9IERFU1xuaW5oZXJpdHMoREVTLCBDaXBoZXJCYXNlKVxuZnVuY3Rpb24gREVTIChvcHRzKSB7XG4gIENpcGhlckJhc2UuY2FsbCh0aGlzKVxuICB2YXIgbW9kZU5hbWUgPSBvcHRzLm1vZGUudG9Mb3dlckNhc2UoKVxuICB2YXIgbW9kZSA9IG1vZGVzW21vZGVOYW1lXVxuICB2YXIgdHlwZVxuICBpZiAob3B0cy5kZWNyeXB0KSB7XG4gICAgdHlwZSA9ICdkZWNyeXB0J1xuICB9IGVsc2Uge1xuICAgIHR5cGUgPSAnZW5jcnlwdCdcbiAgfVxuICB2YXIga2V5ID0gb3B0cy5rZXlcbiAgaWYgKG1vZGVOYW1lID09PSAnZGVzLWVkZScgfHwgbW9kZU5hbWUgPT09ICdkZXMtZWRlLWNiYycpIHtcbiAgICBrZXkgPSBCdWZmZXIuY29uY2F0KFtrZXksIGtleS5zbGljZSgwLCA4KV0pXG4gIH1cbiAgdmFyIGl2ID0gb3B0cy5pdlxuICB0aGlzLl9kZXMgPSBtb2RlLmNyZWF0ZSh7XG4gICAga2V5OiBrZXksXG4gICAgaXY6IGl2LFxuICAgIHR5cGU6IHR5cGVcbiAgfSlcbn1cbkRFUy5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHJldHVybiBuZXcgQnVmZmVyKHRoaXMuX2Rlcy51cGRhdGUoZGF0YSkpXG59XG5ERVMucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBCdWZmZXIodGhpcy5fZGVzLmZpbmFsKCkpXG59XG4iLCJleHBvcnRzWydkZXMtZWNiJ10gPSB7XG4gIGtleTogOCxcbiAgaXY6IDBcbn1cbmV4cG9ydHNbJ2Rlcy1jYmMnXSA9IGV4cG9ydHMuZGVzID0ge1xuICBrZXk6IDgsXG4gIGl2OiA4XG59XG5leHBvcnRzWydkZXMtZWRlMy1jYmMnXSA9IGV4cG9ydHMuZGVzMyA9IHtcbiAga2V5OiAyNCxcbiAgaXY6IDhcbn1cbmV4cG9ydHNbJ2Rlcy1lZGUzJ10gPSB7XG4gIGtleTogMjQsXG4gIGl2OiAwXG59XG5leHBvcnRzWydkZXMtZWRlLWNiYyddID0ge1xuICBrZXk6IDE2LFxuICBpdjogOFxufVxuZXhwb3J0c1snZGVzLWVkZSddID0ge1xuICBrZXk6IDE2LFxuICBpdjogMFxufVxuIiwidmFyIGJuID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciByYW5kb21CeXRlcyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGNydDtcbmZ1bmN0aW9uIGJsaW5kKHByaXYpIHtcbiAgdmFyIHIgPSBnZXRyKHByaXYpO1xuICB2YXIgYmxpbmRlciA9IHIudG9SZWQoYm4ubW9udChwcml2Lm1vZHVsdXMpKVxuICAucmVkUG93KG5ldyBibihwcml2LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpO1xuICByZXR1cm4ge1xuICAgIGJsaW5kZXI6IGJsaW5kZXIsXG4gICAgdW5ibGluZGVyOnIuaW52bShwcml2Lm1vZHVsdXMpXG4gIH07XG59XG5mdW5jdGlvbiBjcnQobXNnLCBwcml2KSB7XG4gIHZhciBibGluZHMgPSBibGluZChwcml2KTtcbiAgdmFyIGxlbiA9IHByaXYubW9kdWx1cy5ieXRlTGVuZ3RoKCk7XG4gIHZhciBtb2QgPSBibi5tb250KHByaXYubW9kdWx1cyk7XG4gIHZhciBibGluZGVkID0gbmV3IGJuKG1zZykubXVsKGJsaW5kcy5ibGluZGVyKS51bW9kKHByaXYubW9kdWx1cyk7XG4gIHZhciBjMSA9IGJsaW5kZWQudG9SZWQoYm4ubW9udChwcml2LnByaW1lMSkpO1xuICB2YXIgYzIgPSBibGluZGVkLnRvUmVkKGJuLm1vbnQocHJpdi5wcmltZTIpKTtcbiAgdmFyIHFpbnYgPSBwcml2LmNvZWZmaWNpZW50O1xuICB2YXIgcCA9IHByaXYucHJpbWUxO1xuICB2YXIgcSA9IHByaXYucHJpbWUyO1xuICB2YXIgbTEgPSBjMS5yZWRQb3cocHJpdi5leHBvbmVudDEpO1xuICB2YXIgbTIgPSBjMi5yZWRQb3cocHJpdi5leHBvbmVudDIpO1xuICBtMSA9IG0xLmZyb21SZWQoKTtcbiAgbTIgPSBtMi5mcm9tUmVkKCk7XG4gIHZhciBoID0gbTEuaXN1YihtMikuaW11bChxaW52KS51bW9kKHApO1xuICBoLmltdWwocSk7XG4gIG0yLmlhZGQoaCk7XG4gIHJldHVybiBuZXcgQnVmZmVyKG0yLmltdWwoYmxpbmRzLnVuYmxpbmRlcikudW1vZChwcml2Lm1vZHVsdXMpLnRvQXJyYXkoZmFsc2UsIGxlbikpO1xufVxuY3J0LmdldHIgPSBnZXRyO1xuZnVuY3Rpb24gZ2V0cihwcml2KSB7XG4gIHZhciBsZW4gPSBwcml2Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICB2YXIgciA9IG5ldyBibihyYW5kb21CeXRlcyhsZW4pKTtcbiAgd2hpbGUgKHIuY21wKHByaXYubW9kdWx1cykgPj0gIDAgfHwgIXIudW1vZChwcml2LnByaW1lMSkgfHwgIXIudW1vZChwcml2LnByaW1lMikpIHtcbiAgICByID0gbmV3IGJuKHJhbmRvbUJ5dGVzKGxlbikpO1xuICB9XG4gIHJldHVybiByO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Jyb3dzZXIvYWxnb3JpdGhtcy5qc29uJylcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvblwiOiB7XG4gICAgXCJzaWduXCI6IFwicnNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMjI0XCIsXG4gICAgXCJpZFwiOiBcIjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjXCJcbiAgfSxcbiAgXCJSU0EtU0hBMjI0XCI6IHtcbiAgICBcInNpZ25cIjogXCJlY2RzYS9yc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGEyMjRcIixcbiAgICBcImlkXCI6IFwiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWNcIlxuICB9LFxuICBcInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uXCI6IHtcbiAgICBcInNpZ25cIjogXCJyc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGEyNTZcIixcbiAgICBcImlkXCI6IFwiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjBcIlxuICB9LFxuICBcIlJTQS1TSEEyNTZcIjoge1xuICAgIFwic2lnblwiOiBcImVjZHNhL3JzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTI1NlwiLFxuICAgIFwiaWRcIjogXCIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMFwiXG4gIH0sXG4gIFwic2hhMzg0V2l0aFJTQUVuY3J5cHRpb25cIjoge1xuICAgIFwic2lnblwiOiBcInJzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTM4NFwiLFxuICAgIFwiaWRcIjogXCIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMFwiXG4gIH0sXG4gIFwiUlNBLVNIQTM4NFwiOiB7XG4gICAgXCJzaWduXCI6IFwiZWNkc2EvcnNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMzg0XCIsXG4gICAgXCJpZFwiOiBcIjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwXCJcbiAgfSxcbiAgXCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvblwiOiB7XG4gICAgXCJzaWduXCI6IFwicnNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhNTEyXCIsXG4gICAgXCJpZFwiOiBcIjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwXCJcbiAgfSxcbiAgXCJSU0EtU0hBNTEyXCI6IHtcbiAgICBcInNpZ25cIjogXCJlY2RzYS9yc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGE1MTJcIixcbiAgICBcImlkXCI6IFwiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDBcIlxuICB9LFxuICBcIlJTQS1TSEExXCI6IHtcbiAgICBcInNpZ25cIjogXCJyc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGExXCIsXG4gICAgXCJpZFwiOiBcIjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNFwiXG4gIH0sXG4gIFwiZWNkc2Etd2l0aC1TSEExXCI6IHtcbiAgICBcInNpZ25cIjogXCJlY2RzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTFcIixcbiAgICBcImlkXCI6IFwiXCJcbiAgfSxcbiAgXCJzaGEyNTZcIjoge1xuICAgIFwic2lnblwiOiBcImVjZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMjU2XCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwic2hhMjI0XCI6IHtcbiAgICBcInNpZ25cIjogXCJlY2RzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTIyNFwiLFxuICAgIFwiaWRcIjogXCJcIlxuICB9LFxuICBcInNoYTM4NFwiOiB7XG4gICAgXCJzaWduXCI6IFwiZWNkc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGEzODRcIixcbiAgICBcImlkXCI6IFwiXCJcbiAgfSxcbiAgXCJzaGE1MTJcIjoge1xuICAgIFwic2lnblwiOiBcImVjZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhNTEyXCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwiRFNBLVNIQVwiOiB7XG4gICAgXCJzaWduXCI6IFwiZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMVwiLFxuICAgIFwiaWRcIjogXCJcIlxuICB9LFxuICBcIkRTQS1TSEExXCI6IHtcbiAgICBcInNpZ25cIjogXCJkc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGExXCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwiRFNBXCI6IHtcbiAgICBcInNpZ25cIjogXCJkc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGExXCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwiRFNBLVdJVEgtU0hBMjI0XCI6IHtcbiAgICBcInNpZ25cIjogXCJkc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGEyMjRcIixcbiAgICBcImlkXCI6IFwiXCJcbiAgfSxcbiAgXCJEU0EtU0hBMjI0XCI6IHtcbiAgICBcInNpZ25cIjogXCJkc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGEyMjRcIixcbiAgICBcImlkXCI6IFwiXCJcbiAgfSxcbiAgXCJEU0EtV0lUSC1TSEEyNTZcIjoge1xuICAgIFwic2lnblwiOiBcImRzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTI1NlwiLFxuICAgIFwiaWRcIjogXCJcIlxuICB9LFxuICBcIkRTQS1TSEEyNTZcIjoge1xuICAgIFwic2lnblwiOiBcImRzYVwiLFxuICAgIFwiaGFzaFwiOiBcInNoYTI1NlwiLFxuICAgIFwiaWRcIjogXCJcIlxuICB9LFxuICBcIkRTQS1XSVRILVNIQTM4NFwiOiB7XG4gICAgXCJzaWduXCI6IFwiZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMzg0XCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwiRFNBLVNIQTM4NFwiOiB7XG4gICAgXCJzaWduXCI6IFwiZHNhXCIsXG4gICAgXCJoYXNoXCI6IFwic2hhMzg0XCIsXG4gICAgXCJpZFwiOiBcIlwiXG4gIH0sXG4gIFwiRFNBLVdJVEgtU0hBNTEyXCI6IHtcbiAgICBcInNpZ25cIjogXCJkc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGE1MTJcIixcbiAgICBcImlkXCI6IFwiXCJcbiAgfSxcbiAgXCJEU0EtU0hBNTEyXCI6IHtcbiAgICBcInNpZ25cIjogXCJkc2FcIixcbiAgICBcImhhc2hcIjogXCJzaGE1MTJcIixcbiAgICBcImlkXCI6IFwiXCJcbiAgfSxcbiAgXCJEU0EtUklQRU1EMTYwXCI6IHtcbiAgICBcInNpZ25cIjogXCJkc2FcIixcbiAgICBcImhhc2hcIjogXCJybWQxNjBcIixcbiAgICBcImlkXCI6IFwiXCJcbiAgfSxcbiAgXCJyaXBlbWQxNjBXaXRoUlNBXCI6IHtcbiAgICBcInNpZ25cIjogXCJyc2FcIixcbiAgICBcImhhc2hcIjogXCJybWQxNjBcIixcbiAgICBcImlkXCI6IFwiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0XCJcbiAgfSxcbiAgXCJSU0EtUklQRU1EMTYwXCI6IHtcbiAgICBcInNpZ25cIjogXCJyc2FcIixcbiAgICBcImhhc2hcIjogXCJybWQxNjBcIixcbiAgICBcImlkXCI6IFwiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0XCJcbiAgfSxcbiAgXCJtZDVXaXRoUlNBRW5jcnlwdGlvblwiOiB7XG4gICAgXCJzaWduXCI6IFwicnNhXCIsXG4gICAgXCJoYXNoXCI6IFwibWQ1XCIsXG4gICAgXCJpZFwiOiBcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMFwiXG4gIH0sXG4gIFwiUlNBLU1ENVwiOiB7XG4gICAgXCJzaWduXCI6IFwicnNhXCIsXG4gICAgXCJoYXNoXCI6IFwibWQ1XCIsXG4gICAgXCJpZFwiOiBcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMFwiXG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCIxLjMuMTMyLjAuMTBcIjogXCJzZWNwMjU2azFcIixcbiAgXCIxLjMuMTMyLjAuMzNcIjogXCJwMjI0XCIsXG4gIFwiMS4yLjg0MC4xMDA0NS4zLjEuMVwiOiBcInAxOTJcIixcbiAgXCIxLjIuODQwLjEwMDQ1LjMuMS43XCI6IFwicDI1NlwiLFxuICBcIjEuMy4xMzIuMC4zNFwiOiBcInAzODRcIixcbiAgXCIxLjMuMTMyLjAuMzVcIjogXCJwNTIxXCJcbn1cbiIsInZhciBjcmVhdGVIYXNoID0gcmVxdWlyZSgnY3JlYXRlLWhhc2gnKVxudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vc2lnbicpXG52YXIgdmVyaWZ5ID0gcmVxdWlyZSgnLi92ZXJpZnknKVxuXG52YXIgYWxnb3JpdGhtcyA9IHJlcXVpcmUoJy4vYWxnb3JpdGhtcy5qc29uJylcbk9iamVjdC5rZXlzKGFsZ29yaXRobXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBhbGdvcml0aG1zW2tleV0uaWQgPSBuZXcgQnVmZmVyKGFsZ29yaXRobXNba2V5XS5pZCwgJ2hleCcpXG4gIGFsZ29yaXRobXNba2V5LnRvTG93ZXJDYXNlKCldID0gYWxnb3JpdGhtc1trZXldXG59KVxuXG5mdW5jdGlvbiBTaWduIChhbGdvcml0aG0pIHtcbiAgc3RyZWFtLldyaXRhYmxlLmNhbGwodGhpcylcblxuICB2YXIgZGF0YSA9IGFsZ29yaXRobXNbYWxnb3JpdGhtXVxuICBpZiAoIWRhdGEpIHRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXNzYWdlIGRpZ2VzdCcpXG5cbiAgdGhpcy5faGFzaFR5cGUgPSBkYXRhLmhhc2hcbiAgdGhpcy5faGFzaCA9IGNyZWF0ZUhhc2goZGF0YS5oYXNoKVxuICB0aGlzLl90YWcgPSBkYXRhLmlkXG4gIHRoaXMuX3NpZ25UeXBlID0gZGF0YS5zaWduXG59XG5pbmhlcml0cyhTaWduLCBzdHJlYW0uV3JpdGFibGUpXG5cblNpZ24ucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIF93cml0ZSAoZGF0YSwgXywgZG9uZSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxuICBkb25lKClcbn1cblxuU2lnbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlIChkYXRhLCBlbmMpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgZW5jKVxuXG4gIHRoaXMuX2hhc2gudXBkYXRlKGRhdGEpXG4gIHJldHVybiB0aGlzXG59XG5cblNpZ24ucHJvdG90eXBlLnNpZ24gPSBmdW5jdGlvbiBzaWduTWV0aG9kIChrZXksIGVuYykge1xuICB0aGlzLmVuZCgpXG4gIHZhciBoYXNoID0gdGhpcy5faGFzaC5kaWdlc3QoKVxuICB2YXIgc2lnID0gc2lnbihoYXNoLCBrZXksIHRoaXMuX2hhc2hUeXBlLCB0aGlzLl9zaWduVHlwZSwgdGhpcy5fdGFnKVxuXG4gIHJldHVybiBlbmMgPyBzaWcudG9TdHJpbmcoZW5jKSA6IHNpZ1xufVxuXG5mdW5jdGlvbiBWZXJpZnkgKGFsZ29yaXRobSkge1xuICBzdHJlYW0uV3JpdGFibGUuY2FsbCh0aGlzKVxuXG4gIHZhciBkYXRhID0gYWxnb3JpdGhtc1thbGdvcml0aG1dXG4gIGlmICghZGF0YSkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG1lc3NhZ2UgZGlnZXN0JylcblxuICB0aGlzLl9oYXNoID0gY3JlYXRlSGFzaChkYXRhLmhhc2gpXG4gIHRoaXMuX3RhZyA9IGRhdGEuaWRcbiAgdGhpcy5fc2lnblR5cGUgPSBkYXRhLnNpZ25cbn1cbmluaGVyaXRzKFZlcmlmeSwgc3RyZWFtLldyaXRhYmxlKVxuXG5WZXJpZnkucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIF93cml0ZSAoZGF0YSwgXywgZG9uZSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxuICBkb25lKClcbn1cblxuVmVyaWZ5LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKGRhdGEsIGVuYykge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSBkYXRhID0gbmV3IEJ1ZmZlcihkYXRhLCBlbmMpXG5cbiAgdGhpcy5faGFzaC51cGRhdGUoZGF0YSlcbiAgcmV0dXJuIHRoaXNcbn1cblxuVmVyaWZ5LnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnlNZXRob2QgKGtleSwgc2lnLCBlbmMpIHtcbiAgaWYgKHR5cGVvZiBzaWcgPT09ICdzdHJpbmcnKSBzaWcgPSBuZXcgQnVmZmVyKHNpZywgZW5jKVxuXG4gIHRoaXMuZW5kKClcbiAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoLmRpZ2VzdCgpXG4gIHJldHVybiB2ZXJpZnkoc2lnLCBoYXNoLCBrZXksIHRoaXMuX3NpZ25UeXBlLCB0aGlzLl90YWcpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNpZ24gKGFsZ29yaXRobSkge1xuICByZXR1cm4gbmV3IFNpZ24oYWxnb3JpdGhtKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVWZXJpZnkgKGFsZ29yaXRobSkge1xuICByZXR1cm4gbmV3IFZlcmlmeShhbGdvcml0aG0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBTaWduOiBjcmVhdGVTaWduLFxuICBWZXJpZnk6IGNyZWF0ZVZlcmlmeSxcbiAgY3JlYXRlU2lnbjogY3JlYXRlU2lnbixcbiAgY3JlYXRlVmVyaWZ5OiBjcmVhdGVWZXJpZnlcbn1cbiIsIi8vIG11Y2ggb2YgdGhpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9zZWxmLXNpZ25lZC9ibG9iL2doLXBhZ2VzL2xpYi9yc2EuanNcbnZhciBjcmVhdGVIbWFjID0gcmVxdWlyZSgnY3JlYXRlLWhtYWMnKVxudmFyIGNydCA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktcnNhJylcbnZhciBFQyA9IHJlcXVpcmUoJ2VsbGlwdGljJykuZWNcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJylcbnZhciBwYXJzZUtleXMgPSByZXF1aXJlKCdwYXJzZS1hc24xJylcbnZhciBjdXJ2ZXMgPSByZXF1aXJlKCcuL2N1cnZlcy5qc29uJylcblxuZnVuY3Rpb24gc2lnbiAoaGFzaCwga2V5LCBoYXNoVHlwZSwgc2lnblR5cGUsIHRhZykge1xuICB2YXIgcHJpdiA9IHBhcnNlS2V5cyhrZXkpXG4gIGlmIChwcml2LmN1cnZlKSB7XG4gICAgLy8gcnNhIGtleXMgY2FuIGJlIGludGVycHJldGVkIGFzIGVjZHNhIG9uZXMgaW4gb3BlbnNzbFxuICAgIGlmIChzaWduVHlwZSAhPT0gJ2VjZHNhJyAmJiBzaWduVHlwZSAhPT0gJ2VjZHNhL3JzYScpIHRocm93IG5ldyBFcnJvcignd3JvbmcgcHJpdmF0ZSBrZXkgdHlwZScpXG4gICAgcmV0dXJuIGVjU2lnbihoYXNoLCBwcml2KVxuICB9IGVsc2UgaWYgKHByaXYudHlwZSA9PT0gJ2RzYScpIHtcbiAgICBpZiAoc2lnblR5cGUgIT09ICdkc2EnKSB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHByaXZhdGUga2V5IHR5cGUnKVxuICAgIHJldHVybiBkc2FTaWduKGhhc2gsIHByaXYsIGhhc2hUeXBlKVxuICB9IGVsc2Uge1xuICAgIGlmIChzaWduVHlwZSAhPT0gJ3JzYScgJiYgc2lnblR5cGUgIT09ICdlY2RzYS9yc2EnKSB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHByaXZhdGUga2V5IHR5cGUnKVxuICB9XG4gIGhhc2ggPSBCdWZmZXIuY29uY2F0KFt0YWcsIGhhc2hdKVxuICB2YXIgbGVuID0gcHJpdi5tb2R1bHVzLmJ5dGVMZW5ndGgoKVxuICB2YXIgcGFkID0gWyAwLCAxIF1cbiAgd2hpbGUgKGhhc2gubGVuZ3RoICsgcGFkLmxlbmd0aCArIDEgPCBsZW4pIHBhZC5wdXNoKDB4ZmYpXG4gIHBhZC5wdXNoKDB4MDApXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGhhc2gubGVuZ3RoKSBwYWQucHVzaChoYXNoW2ldKVxuXG4gIHZhciBvdXQgPSBjcnQocGFkLCBwcml2KVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIGVjU2lnbiAoaGFzaCwgcHJpdikge1xuICB2YXIgY3VydmVJZCA9IGN1cnZlc1twcml2LmN1cnZlLmpvaW4oJy4nKV1cbiAgaWYgKCFjdXJ2ZUlkKSB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY3VydmUgJyArIHByaXYuY3VydmUuam9pbignLicpKVxuXG4gIHZhciBjdXJ2ZSA9IG5ldyBFQyhjdXJ2ZUlkKVxuICB2YXIga2V5ID0gY3VydmUua2V5RnJvbVByaXZhdGUocHJpdi5wcml2YXRlS2V5KVxuICB2YXIgb3V0ID0ga2V5LnNpZ24oaGFzaClcblxuICByZXR1cm4gbmV3IEJ1ZmZlcihvdXQudG9ERVIoKSlcbn1cblxuZnVuY3Rpb24gZHNhU2lnbiAoaGFzaCwgcHJpdiwgYWxnbykge1xuICB2YXIgeCA9IHByaXYucGFyYW1zLnByaXZfa2V5XG4gIHZhciBwID0gcHJpdi5wYXJhbXMucFxuICB2YXIgcSA9IHByaXYucGFyYW1zLnFcbiAgdmFyIGcgPSBwcml2LnBhcmFtcy5nXG4gIHZhciByID0gbmV3IEJOKDApXG4gIHZhciBrXG4gIHZhciBIID0gYml0czJpbnQoaGFzaCwgcSkubW9kKHEpXG4gIHZhciBzID0gZmFsc2VcbiAgdmFyIGt2ID0gZ2V0S2V5KHgsIHEsIGhhc2gsIGFsZ28pXG4gIHdoaWxlIChzID09PSBmYWxzZSkge1xuICAgIGsgPSBtYWtlS2V5KHEsIGt2LCBhbGdvKVxuICAgIHIgPSBtYWtlUihnLCBrLCBwLCBxKVxuICAgIHMgPSBrLmludm0ocSkuaW11bChILmFkZCh4Lm11bChyKSkpLm1vZChxKVxuICAgIGlmIChzLmNtcG4oMCkgPT09IDApIHtcbiAgICAgIHMgPSBmYWxzZVxuICAgICAgciA9IG5ldyBCTigwKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdG9ERVIociwgcylcbn1cblxuZnVuY3Rpb24gdG9ERVIgKHIsIHMpIHtcbiAgciA9IHIudG9BcnJheSgpXG4gIHMgPSBzLnRvQXJyYXkoKVxuXG4gIC8vIFBhZCB2YWx1ZXNcbiAgaWYgKHJbMF0gJiAweDgwKSByID0gWyAwIF0uY29uY2F0KHIpXG4gIGlmIChzWzBdICYgMHg4MCkgcyA9IFsgMCBdLmNvbmNhdChzKVxuXG4gIHZhciB0b3RhbCA9IHIubGVuZ3RoICsgcy5sZW5ndGggKyA0XG4gIHZhciByZXMgPSBbIDB4MzAsIHRvdGFsLCAweDAyLCByLmxlbmd0aCBdXG4gIHJlcyA9IHJlcy5jb25jYXQociwgWyAweDAyLCBzLmxlbmd0aCBdLCBzKVxuICByZXR1cm4gbmV3IEJ1ZmZlcihyZXMpXG59XG5cbmZ1bmN0aW9uIGdldEtleSAoeCwgcSwgaGFzaCwgYWxnbykge1xuICB4ID0gbmV3IEJ1ZmZlcih4LnRvQXJyYXkoKSlcbiAgaWYgKHgubGVuZ3RoIDwgcS5ieXRlTGVuZ3RoKCkpIHtcbiAgICB2YXIgemVyb3MgPSBuZXcgQnVmZmVyKHEuYnl0ZUxlbmd0aCgpIC0geC5sZW5ndGgpXG4gICAgemVyb3MuZmlsbCgwKVxuICAgIHggPSBCdWZmZXIuY29uY2F0KFsgemVyb3MsIHggXSlcbiAgfVxuICB2YXIgaGxlbiA9IGhhc2gubGVuZ3RoXG4gIHZhciBoYml0cyA9IGJpdHMyb2N0ZXRzKGhhc2gsIHEpXG4gIHZhciB2ID0gbmV3IEJ1ZmZlcihobGVuKVxuICB2LmZpbGwoMSlcbiAgdmFyIGsgPSBuZXcgQnVmZmVyKGhsZW4pXG4gIGsuZmlsbCgwKVxuICBrID0gY3JlYXRlSG1hYyhhbGdvLCBrKS51cGRhdGUodikudXBkYXRlKG5ldyBCdWZmZXIoWyAwIF0pKS51cGRhdGUoeCkudXBkYXRlKGhiaXRzKS5kaWdlc3QoKVxuICB2ID0gY3JlYXRlSG1hYyhhbGdvLCBrKS51cGRhdGUodikuZGlnZXN0KClcbiAgayA9IGNyZWF0ZUhtYWMoYWxnbywgaykudXBkYXRlKHYpLnVwZGF0ZShuZXcgQnVmZmVyKFsgMSBdKSkudXBkYXRlKHgpLnVwZGF0ZShoYml0cykuZGlnZXN0KClcbiAgdiA9IGNyZWF0ZUhtYWMoYWxnbywgaykudXBkYXRlKHYpLmRpZ2VzdCgpXG4gIHJldHVybiB7IGs6IGssIHY6IHYgfVxufVxuXG5mdW5jdGlvbiBiaXRzMmludCAob2JpdHMsIHEpIHtcbiAgdmFyIGJpdHMgPSBuZXcgQk4ob2JpdHMpXG4gIHZhciBzaGlmdCA9IChvYml0cy5sZW5ndGggPDwgMykgLSBxLmJpdExlbmd0aCgpXG4gIGlmIChzaGlmdCA+IDApIGJpdHMuaXNocm4oc2hpZnQpXG4gIHJldHVybiBiaXRzXG59XG5cbmZ1bmN0aW9uIGJpdHMyb2N0ZXRzIChiaXRzLCBxKSB7XG4gIGJpdHMgPSBiaXRzMmludChiaXRzLCBxKVxuICBiaXRzID0gYml0cy5tb2QocSlcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoYml0cy50b0FycmF5KCkpXG4gIGlmIChvdXQubGVuZ3RoIDwgcS5ieXRlTGVuZ3RoKCkpIHtcbiAgICB2YXIgemVyb3MgPSBuZXcgQnVmZmVyKHEuYnl0ZUxlbmd0aCgpIC0gb3V0Lmxlbmd0aClcbiAgICB6ZXJvcy5maWxsKDApXG4gICAgb3V0ID0gQnVmZmVyLmNvbmNhdChbIHplcm9zLCBvdXQgXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIG1ha2VLZXkgKHEsIGt2LCBhbGdvKSB7XG4gIHZhciB0XG4gIHZhciBrXG5cbiAgZG8ge1xuICAgIHQgPSBuZXcgQnVmZmVyKDApXG5cbiAgICB3aGlsZSAodC5sZW5ndGggKiA4IDwgcS5iaXRMZW5ndGgoKSkge1xuICAgICAga3YudiA9IGNyZWF0ZUhtYWMoYWxnbywga3YuaykudXBkYXRlKGt2LnYpLmRpZ2VzdCgpXG4gICAgICB0ID0gQnVmZmVyLmNvbmNhdChbIHQsIGt2LnYgXSlcbiAgICB9XG5cbiAgICBrID0gYml0czJpbnQodCwgcSlcbiAgICBrdi5rID0gY3JlYXRlSG1hYyhhbGdvLCBrdi5rKS51cGRhdGUoa3YudikudXBkYXRlKG5ldyBCdWZmZXIoWyAwIF0pKS5kaWdlc3QoKVxuICAgIGt2LnYgPSBjcmVhdGVIbWFjKGFsZ28sIGt2LmspLnVwZGF0ZShrdi52KS5kaWdlc3QoKVxuICB9IHdoaWxlIChrLmNtcChxKSAhPT0gLTEpXG5cbiAgcmV0dXJuIGtcbn1cblxuZnVuY3Rpb24gbWFrZVIgKGcsIGssIHAsIHEpIHtcbiAgcmV0dXJuIGcudG9SZWQoQk4ubW9udChwKSkucmVkUG93KGspLmZyb21SZWQoKS5tb2QocSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaWduXG5tb2R1bGUuZXhwb3J0cy5nZXRLZXkgPSBnZXRLZXlcbm1vZHVsZS5leHBvcnRzLm1ha2VLZXkgPSBtYWtlS2V5XG4iLCIvLyBtdWNoIG9mIHRoaXMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvc2VsZi1zaWduZWQvYmxvYi9naC1wYWdlcy9saWIvcnNhLmpzXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpXG52YXIgRUMgPSByZXF1aXJlKCdlbGxpcHRpYycpLmVjXG52YXIgcGFyc2VLZXlzID0gcmVxdWlyZSgncGFyc2UtYXNuMScpXG52YXIgY3VydmVzID0gcmVxdWlyZSgnLi9jdXJ2ZXMuanNvbicpXG5cbmZ1bmN0aW9uIHZlcmlmeSAoc2lnLCBoYXNoLCBrZXksIHNpZ25UeXBlLCB0YWcpIHtcbiAgdmFyIHB1YiA9IHBhcnNlS2V5cyhrZXkpXG4gIGlmIChwdWIudHlwZSA9PT0gJ2VjJykge1xuICAgIC8vIHJzYSBrZXlzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBlY2RzYSBvbmVzIGluIG9wZW5zc2xcbiAgICBpZiAoc2lnblR5cGUgIT09ICdlY2RzYScgJiYgc2lnblR5cGUgIT09ICdlY2RzYS9yc2EnKSB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHB1YmxpYyBrZXkgdHlwZScpXG4gICAgcmV0dXJuIGVjVmVyaWZ5KHNpZywgaGFzaCwgcHViKVxuICB9IGVsc2UgaWYgKHB1Yi50eXBlID09PSAnZHNhJykge1xuICAgIGlmIChzaWduVHlwZSAhPT0gJ2RzYScpIHRocm93IG5ldyBFcnJvcignd3JvbmcgcHVibGljIGtleSB0eXBlJylcbiAgICByZXR1cm4gZHNhVmVyaWZ5KHNpZywgaGFzaCwgcHViKVxuICB9IGVsc2Uge1xuICAgIGlmIChzaWduVHlwZSAhPT0gJ3JzYScgJiYgc2lnblR5cGUgIT09ICdlY2RzYS9yc2EnKSB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHB1YmxpYyBrZXkgdHlwZScpXG4gIH1cbiAgaGFzaCA9IEJ1ZmZlci5jb25jYXQoW3RhZywgaGFzaF0pXG4gIHZhciBsZW4gPSBwdWIubW9kdWx1cy5ieXRlTGVuZ3RoKClcbiAgdmFyIHBhZCA9IFsgMSBdXG4gIHZhciBwYWROdW0gPSAwXG4gIHdoaWxlIChoYXNoLmxlbmd0aCArIHBhZC5sZW5ndGggKyAyIDwgbGVuKSB7XG4gICAgcGFkLnB1c2goMHhmZilcbiAgICBwYWROdW0rK1xuICB9XG4gIHBhZC5wdXNoKDB4MDApXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGhhc2gubGVuZ3RoKSB7XG4gICAgcGFkLnB1c2goaGFzaFtpXSlcbiAgfVxuICBwYWQgPSBuZXcgQnVmZmVyKHBhZClcbiAgdmFyIHJlZCA9IEJOLm1vbnQocHViLm1vZHVsdXMpXG4gIHNpZyA9IG5ldyBCTihzaWcpLnRvUmVkKHJlZClcblxuICBzaWcgPSBzaWcucmVkUG93KG5ldyBCTihwdWIucHVibGljRXhwb25lbnQpKVxuICBzaWcgPSBuZXcgQnVmZmVyKHNpZy5mcm9tUmVkKCkudG9BcnJheSgpKVxuICB2YXIgb3V0ID0gcGFkTnVtIDwgOCA/IDEgOiAwXG4gIGxlbiA9IE1hdGgubWluKHNpZy5sZW5ndGgsIHBhZC5sZW5ndGgpXG4gIGlmIChzaWcubGVuZ3RoICE9PSBwYWQubGVuZ3RoKSBvdXQgPSAxXG5cbiAgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBsZW4pIG91dCB8PSBzaWdbaV0gXiBwYWRbaV1cbiAgcmV0dXJuIG91dCA9PT0gMFxufVxuXG5mdW5jdGlvbiBlY1ZlcmlmeSAoc2lnLCBoYXNoLCBwdWIpIHtcbiAgdmFyIGN1cnZlSWQgPSBjdXJ2ZXNbcHViLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oJy4nKV1cbiAgaWYgKCFjdXJ2ZUlkKSB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY3VydmUgJyArIHB1Yi5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCcuJykpXG5cbiAgdmFyIGN1cnZlID0gbmV3IEVDKGN1cnZlSWQpXG4gIHZhciBwdWJrZXkgPSBwdWIuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhXG5cbiAgcmV0dXJuIGN1cnZlLnZlcmlmeShoYXNoLCBzaWcsIHB1YmtleSlcbn1cblxuZnVuY3Rpb24gZHNhVmVyaWZ5IChzaWcsIGhhc2gsIHB1Yikge1xuICB2YXIgcCA9IHB1Yi5kYXRhLnBcbiAgdmFyIHEgPSBwdWIuZGF0YS5xXG4gIHZhciBnID0gcHViLmRhdGEuZ1xuICB2YXIgeSA9IHB1Yi5kYXRhLnB1Yl9rZXlcbiAgdmFyIHVucGFja2VkID0gcGFyc2VLZXlzLnNpZ25hdHVyZS5kZWNvZGUoc2lnLCAnZGVyJylcbiAgdmFyIHMgPSB1bnBhY2tlZC5zXG4gIHZhciByID0gdW5wYWNrZWQuclxuICBjaGVja1ZhbHVlKHMsIHEpXG4gIGNoZWNrVmFsdWUociwgcSlcbiAgdmFyIG1vbnRwID0gQk4ubW9udChwKVxuICB2YXIgdyA9IHMuaW52bShxKVxuICB2YXIgdiA9IGcudG9SZWQobW9udHApXG4gICAgLnJlZFBvdyhuZXcgQk4oaGFzaCkubXVsKHcpLm1vZChxKSlcbiAgICAuZnJvbVJlZCgpXG4gICAgLm11bCh5LnRvUmVkKG1vbnRwKS5yZWRQb3coci5tdWwodykubW9kKHEpKS5mcm9tUmVkKCkpXG4gICAgLm1vZChwKVxuICAgIC5tb2QocSlcbiAgcmV0dXJuIHYuY21wKHIpID09PSAwXG59XG5cbmZ1bmN0aW9uIGNoZWNrVmFsdWUgKGIsIHEpIHtcbiAgaWYgKGIuY21wbigwKSA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2lnJylcbiAgaWYgKGIuY21wKHEpID49IHEpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWcnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcmlmeVxuIiwidmFyIG1zZyA9IHJlcXVpcmUoJ3Bha28vbGliL3psaWIvbWVzc2FnZXMnKTtcbnZhciB6c3RyZWFtID0gcmVxdWlyZSgncGFrby9saWIvemxpYi96c3RyZWFtJyk7XG52YXIgemxpYl9kZWZsYXRlID0gcmVxdWlyZSgncGFrby9saWIvemxpYi9kZWZsYXRlLmpzJyk7XG52YXIgemxpYl9pbmZsYXRlID0gcmVxdWlyZSgncGFrby9saWIvemxpYi9pbmZsYXRlLmpzJyk7XG52YXIgY29uc3RhbnRzID0gcmVxdWlyZSgncGFrby9saWIvemxpYi9jb25zdGFudHMnKTtcblxuZm9yICh2YXIga2V5IGluIGNvbnN0YW50cykge1xuICBleHBvcnRzW2tleV0gPSBjb25zdGFudHNba2V5XTtcbn1cblxuLy8gemxpYiBtb2Rlc1xuZXhwb3J0cy5OT05FID0gMDtcbmV4cG9ydHMuREVGTEFURSA9IDE7XG5leHBvcnRzLklORkxBVEUgPSAyO1xuZXhwb3J0cy5HWklQID0gMztcbmV4cG9ydHMuR1VOWklQID0gNDtcbmV4cG9ydHMuREVGTEFURVJBVyA9IDU7XG5leHBvcnRzLklORkxBVEVSQVcgPSA2O1xuZXhwb3J0cy5VTlpJUCA9IDc7XG5cbi8qKlxuICogRW11bGF0ZSBOb2RlJ3MgemxpYiBDKysgbGF5ZXIgZm9yIHVzZSBieSB0aGUgSlMgbGF5ZXIgaW4gaW5kZXguanNcbiAqL1xuZnVuY3Rpb24gWmxpYihtb2RlKSB7XG4gIGlmIChtb2RlIDwgZXhwb3J0cy5ERUZMQVRFIHx8IG1vZGUgPiBleHBvcnRzLlVOWklQKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJCYWQgYXJndW1lbnRcIik7XG4gICAgXG4gIHRoaXMubW9kZSA9IG1vZGU7XG4gIHRoaXMuaW5pdF9kb25lID0gZmFsc2U7XG4gIHRoaXMud3JpdGVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcbiAgdGhpcy5wZW5kaW5nX2Nsb3NlID0gZmFsc2U7XG4gIHRoaXMud2luZG93Qml0cyA9IDA7XG4gIHRoaXMubGV2ZWwgPSAwO1xuICB0aGlzLm1lbUxldmVsID0gMDtcbiAgdGhpcy5zdHJhdGVneSA9IDA7XG4gIHRoaXMuZGljdGlvbmFyeSA9IG51bGw7XG59XG5cblpsaWIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbih3aW5kb3dCaXRzLCBsZXZlbCwgbWVtTGV2ZWwsIHN0cmF0ZWd5LCBkaWN0aW9uYXJ5KSB7XG4gIHRoaXMud2luZG93Qml0cyA9IHdpbmRvd0JpdHM7XG4gIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgdGhpcy5tZW1MZXZlbCA9IG1lbUxldmVsO1xuICB0aGlzLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7XG4gIC8vIGRpY3Rpb25hcnkgbm90IHN1cHBvcnRlZC5cbiAgXG4gIGlmICh0aGlzLm1vZGUgPT09IGV4cG9ydHMuR1pJUCB8fCB0aGlzLm1vZGUgPT09IGV4cG9ydHMuR1VOWklQKVxuICAgIHRoaXMud2luZG93Qml0cyArPSAxNjtcbiAgICBcbiAgaWYgKHRoaXMubW9kZSA9PT0gZXhwb3J0cy5VTlpJUClcbiAgICB0aGlzLndpbmRvd0JpdHMgKz0gMzI7XG4gICAgXG4gIGlmICh0aGlzLm1vZGUgPT09IGV4cG9ydHMuREVGTEFURVJBVyB8fCB0aGlzLm1vZGUgPT09IGV4cG9ydHMuSU5GTEFURVJBVylcbiAgICB0aGlzLndpbmRvd0JpdHMgPSAtdGhpcy53aW5kb3dCaXRzO1xuICAgIFxuICB0aGlzLnN0cm0gPSBuZXcgenN0cmVhbSgpO1xuICBcbiAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuREVGTEFURTpcbiAgICBjYXNlIGV4cG9ydHMuR1pJUDpcbiAgICBjYXNlIGV4cG9ydHMuREVGTEFURVJBVzpcbiAgICAgIHZhciBzdGF0dXMgPSB6bGliX2RlZmxhdGUuZGVmbGF0ZUluaXQyKFxuICAgICAgICB0aGlzLnN0cm0sXG4gICAgICAgIHRoaXMubGV2ZWwsXG4gICAgICAgIGV4cG9ydHMuWl9ERUZMQVRFRCxcbiAgICAgICAgdGhpcy53aW5kb3dCaXRzLFxuICAgICAgICB0aGlzLm1lbUxldmVsLFxuICAgICAgICB0aGlzLnN0cmF0ZWd5XG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBleHBvcnRzLklORkxBVEU6XG4gICAgY2FzZSBleHBvcnRzLkdVTlpJUDpcbiAgICBjYXNlIGV4cG9ydHMuSU5GTEFURVJBVzpcbiAgICBjYXNlIGV4cG9ydHMuVU5aSVA6XG4gICAgICB2YXIgc3RhdHVzICA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlSW5pdDIoXG4gICAgICAgIHRoaXMuc3RybSxcbiAgICAgICAgdGhpcy53aW5kb3dCaXRzXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gbW9kZSBcIiArIHRoaXMubW9kZSk7XG4gIH1cbiAgXG4gIGlmIChzdGF0dXMgIT09IGV4cG9ydHMuWl9PSykge1xuICAgIHRoaXMuX2Vycm9yKHN0YXR1cyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIFxuICB0aGlzLndyaXRlX2luX3Byb2dyZXNzID0gZmFsc2U7XG4gIHRoaXMuaW5pdF9kb25lID0gdHJ1ZTtcbn07XG5cblpsaWIucHJvdG90eXBlLnBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJkZWZsYXRlUGFyYW1zIE5vdCBzdXBwb3J0ZWRcIik7XG59O1xuXG5abGliLnByb3RvdHlwZS5fd3JpdGVDaGVjayA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuaW5pdF9kb25lKVxuICAgIHRocm93IG5ldyBFcnJvcihcIndyaXRlIGJlZm9yZSBpbml0XCIpO1xuICAgIFxuICBpZiAodGhpcy5tb2RlID09PSBleHBvcnRzLk5PTkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYWxyZWFkeSBmaW5hbGl6ZWRcIik7XG4gICAgXG4gIGlmICh0aGlzLndyaXRlX2luX3Byb2dyZXNzKVxuICAgIHRocm93IG5ldyBFcnJvcihcIndyaXRlIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgXG4gIGlmICh0aGlzLnBlbmRpbmdfY2xvc2UpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY2xvc2UgaXMgcGVuZGluZ1wiKTtcbn07XG5cblpsaWIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oZmx1c2gsIGlucHV0LCBpbl9vZmYsIGluX2xlbiwgb3V0LCBvdXRfb2ZmLCBvdXRfbGVuKSB7ICAgIFxuICB0aGlzLl93cml0ZUNoZWNrKCk7XG4gIHRoaXMud3JpdGVfaW5fcHJvZ3Jlc3MgPSB0cnVlO1xuICBcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgIHNlbGYud3JpdGVfaW5fcHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICB2YXIgcmVzID0gc2VsZi5fd3JpdGUoZmx1c2gsIGlucHV0LCBpbl9vZmYsIGluX2xlbiwgb3V0LCBvdXRfb2ZmLCBvdXRfbGVuKTtcbiAgICBzZWxmLmNhbGxiYWNrKHJlc1swXSwgcmVzWzFdKTtcbiAgICBcbiAgICBpZiAoc2VsZi5wZW5kaW5nX2Nsb3NlKVxuICAgICAgc2VsZi5jbG9zZSgpO1xuICB9KTtcbiAgXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gc2V0IG1ldGhvZCBmb3IgTm9kZSBidWZmZXJzLCB1c2VkIGJ5IHBha29cbmZ1bmN0aW9uIGJ1ZmZlclNldChkYXRhLCBvZmZzZXQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9IGRhdGFbaV07XG4gIH1cbn1cblxuWmxpYi5wcm90b3R5cGUud3JpdGVTeW5jID0gZnVuY3Rpb24oZmx1c2gsIGlucHV0LCBpbl9vZmYsIGluX2xlbiwgb3V0LCBvdXRfb2ZmLCBvdXRfbGVuKSB7XG4gIHRoaXMuX3dyaXRlQ2hlY2soKTtcbiAgcmV0dXJuIHRoaXMuX3dyaXRlKGZsdXNoLCBpbnB1dCwgaW5fb2ZmLCBpbl9sZW4sIG91dCwgb3V0X29mZiwgb3V0X2xlbik7XG59O1xuXG5abGliLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbihmbHVzaCwgaW5wdXQsIGluX29mZiwgaW5fbGVuLCBvdXQsIG91dF9vZmYsIG91dF9sZW4pIHtcbiAgdGhpcy53cml0ZV9pbl9wcm9ncmVzcyA9IHRydWU7XG4gIFxuICBpZiAoZmx1c2ggIT09IGV4cG9ydHMuWl9OT19GTFVTSCAmJlxuICAgICAgZmx1c2ggIT09IGV4cG9ydHMuWl9QQVJUSUFMX0ZMVVNIICYmXG4gICAgICBmbHVzaCAhPT0gZXhwb3J0cy5aX1NZTkNfRkxVU0ggJiZcbiAgICAgIGZsdXNoICE9PSBleHBvcnRzLlpfRlVMTF9GTFVTSCAmJlxuICAgICAgZmx1c2ggIT09IGV4cG9ydHMuWl9GSU5JU0ggJiZcbiAgICAgIGZsdXNoICE9PSBleHBvcnRzLlpfQkxPQ0spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGZsdXNoIHZhbHVlXCIpO1xuICB9XG4gIFxuICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgIGlucHV0ID0gbmV3IEJ1ZmZlcigwKTtcbiAgICBpbl9sZW4gPSAwO1xuICAgIGluX29mZiA9IDA7XG4gIH1cbiAgXG4gIGlmIChvdXQuX3NldClcbiAgICBvdXQuc2V0ID0gb3V0Ll9zZXQ7XG4gIGVsc2VcbiAgICBvdXQuc2V0ID0gYnVmZmVyU2V0O1xuICBcbiAgdmFyIHN0cm0gPSB0aGlzLnN0cm07XG4gIHN0cm0uYXZhaWxfaW4gPSBpbl9sZW47XG4gIHN0cm0uaW5wdXQgPSBpbnB1dDtcbiAgc3RybS5uZXh0X2luID0gaW5fb2ZmO1xuICBzdHJtLmF2YWlsX291dCA9IG91dF9sZW47XG4gIHN0cm0ub3V0cHV0ID0gb3V0O1xuICBzdHJtLm5leHRfb3V0ID0gb3V0X29mZjtcbiAgXG4gIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgY2FzZSBleHBvcnRzLkRFRkxBVEU6XG4gICAgY2FzZSBleHBvcnRzLkdaSVA6XG4gICAgY2FzZSBleHBvcnRzLkRFRkxBVEVSQVc6XG4gICAgICB2YXIgc3RhdHVzID0gemxpYl9kZWZsYXRlLmRlZmxhdGUoc3RybSwgZmx1c2gpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBleHBvcnRzLlVOWklQOlxuICAgIGNhc2UgZXhwb3J0cy5JTkZMQVRFOlxuICAgIGNhc2UgZXhwb3J0cy5HVU5aSVA6XG4gICAgY2FzZSBleHBvcnRzLklORkxBVEVSQVc6XG4gICAgICB2YXIgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGUoc3RybSwgZmx1c2gpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gbW9kZSBcIiArIHRoaXMubW9kZSk7XG4gIH1cbiAgXG4gIGlmIChzdGF0dXMgIT09IGV4cG9ydHMuWl9TVFJFQU1fRU5EICYmIHN0YXR1cyAhPT0gZXhwb3J0cy5aX09LKSB7XG4gICAgdGhpcy5fZXJyb3Ioc3RhdHVzKTtcbiAgfVxuICBcbiAgdGhpcy53cml0ZV9pbl9wcm9ncmVzcyA9IGZhbHNlO1xuICByZXR1cm4gW3N0cm0uYXZhaWxfaW4sIHN0cm0uYXZhaWxfb3V0XTtcbn07XG5cblpsaWIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLndyaXRlX2luX3Byb2dyZXNzKSB7XG4gICAgdGhpcy5wZW5kaW5nX2Nsb3NlID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgXG4gIHRoaXMucGVuZGluZ19jbG9zZSA9IGZhbHNlO1xuICBcbiAgaWYgKHRoaXMubW9kZSA9PT0gZXhwb3J0cy5ERUZMQVRFIHx8IHRoaXMubW9kZSA9PT0gZXhwb3J0cy5HWklQIHx8IHRoaXMubW9kZSA9PT0gZXhwb3J0cy5ERUZMQVRFUkFXKSB7XG4gICAgemxpYl9kZWZsYXRlLmRlZmxhdGVFbmQodGhpcy5zdHJtKTtcbiAgfSBlbHNlIHtcbiAgICB6bGliX2luZmxhdGUuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pO1xuICB9XG4gIFxuICB0aGlzLm1vZGUgPSBleHBvcnRzLk5PTkU7XG59O1xuXG5abGliLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgIGNhc2UgZXhwb3J0cy5ERUZMQVRFOlxuICAgIGNhc2UgZXhwb3J0cy5ERUZMQVRFUkFXOlxuICAgICAgdmFyIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlUmVzZXQodGhpcy5zdHJtKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgZXhwb3J0cy5JTkZMQVRFOlxuICAgIGNhc2UgZXhwb3J0cy5JTkZMQVRFUkFXOlxuICAgICAgdmFyIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlUmVzZXQodGhpcy5zdHJtKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIFxuICBpZiAoc3RhdHVzICE9PSBleHBvcnRzLlpfT0spIHtcbiAgICB0aGlzLl9lcnJvcihzdGF0dXMpO1xuICB9XG59O1xuXG5abGliLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihzdGF0dXMpIHtcbiAgdGhpcy5vbmVycm9yKG1zZ1tzdGF0dXNdICsgJzogJyArIHRoaXMuc3RybS5tc2csIHN0YXR1cyk7XG4gIFxuICB0aGlzLndyaXRlX2luX3Byb2dyZXNzID0gZmFsc2U7XG4gIGlmICh0aGlzLnBlbmRpbmdfY2xvc2UpXG4gICAgdGhpcy5jbG9zZSgpO1xufTtcblxuZXhwb3J0cy5abGliID0gWmxpYjtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnX3N0cmVhbV90cmFuc2Zvcm0nKTtcblxudmFyIGJpbmRpbmcgPSByZXF1aXJlKCcuL2JpbmRpbmcnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpLm9rO1xuXG4vLyB6bGliIGRvZXNuJ3QgcHJvdmlkZSB0aGVzZSwgc28ga2x1ZGdlIHRoZW0gaW4gZm9sbG93aW5nIHRoZSBzYW1lXG4vLyBjb25zdCBuYW1pbmcgc2NoZW1lIHpsaWIgdXNlcy5cbmJpbmRpbmcuWl9NSU5fV0lORE9XQklUUyA9IDg7XG5iaW5kaW5nLlpfTUFYX1dJTkRPV0JJVFMgPSAxNTtcbmJpbmRpbmcuWl9ERUZBVUxUX1dJTkRPV0JJVFMgPSAxNTtcblxuLy8gZmV3ZXIgdGhhbiA2NCBieXRlcyBwZXIgY2h1bmsgaXMgc3R1cGlkLlxuLy8gdGVjaG5pY2FsbHkgaXQgY291bGQgd29yayB3aXRoIGFzIGZldyBhcyA4LCBidXQgZXZlbiA2NCBieXRlc1xuLy8gaXMgYWJzdXJkbHkgbG93LiAgVXN1YWxseSBhIE1CIG9yIG1vcmUgaXMgYmVzdC5cbmJpbmRpbmcuWl9NSU5fQ0hVTksgPSA2NDtcbmJpbmRpbmcuWl9NQVhfQ0hVTksgPSBJbmZpbml0eTtcbmJpbmRpbmcuWl9ERUZBVUxUX0NIVU5LID0gKDE2ICogMTAyNCk7XG5cbmJpbmRpbmcuWl9NSU5fTUVNTEVWRUwgPSAxO1xuYmluZGluZy5aX01BWF9NRU1MRVZFTCA9IDk7XG5iaW5kaW5nLlpfREVGQVVMVF9NRU1MRVZFTCA9IDg7XG5cbmJpbmRpbmcuWl9NSU5fTEVWRUwgPSAtMTtcbmJpbmRpbmcuWl9NQVhfTEVWRUwgPSA5O1xuYmluZGluZy5aX0RFRkFVTFRfTEVWRUwgPSBiaW5kaW5nLlpfREVGQVVMVF9DT01QUkVTU0lPTjtcblxuLy8gZXhwb3NlIGFsbCB0aGUgemxpYiBjb25zdGFudHNcbk9iamVjdC5rZXlzKGJpbmRpbmcpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICBpZiAoay5tYXRjaCgvXlovKSkgZXhwb3J0c1trXSA9IGJpbmRpbmdba107XG59KTtcblxuLy8gdHJhbnNsYXRpb24gdGFibGUgZm9yIHJldHVybiBjb2Rlcy5cbmV4cG9ydHMuY29kZXMgPSB7XG4gIFpfT0s6IGJpbmRpbmcuWl9PSyxcbiAgWl9TVFJFQU1fRU5EOiBiaW5kaW5nLlpfU1RSRUFNX0VORCxcbiAgWl9ORUVEX0RJQ1Q6IGJpbmRpbmcuWl9ORUVEX0RJQ1QsXG4gIFpfRVJSTk86IGJpbmRpbmcuWl9FUlJOTyxcbiAgWl9TVFJFQU1fRVJST1I6IGJpbmRpbmcuWl9TVFJFQU1fRVJST1IsXG4gIFpfREFUQV9FUlJPUjogYmluZGluZy5aX0RBVEFfRVJST1IsXG4gIFpfTUVNX0VSUk9SOiBiaW5kaW5nLlpfTUVNX0VSUk9SLFxuICBaX0JVRl9FUlJPUjogYmluZGluZy5aX0JVRl9FUlJPUixcbiAgWl9WRVJTSU9OX0VSUk9SOiBiaW5kaW5nLlpfVkVSU0lPTl9FUlJPUlxufTtcblxuT2JqZWN0LmtleXMoZXhwb3J0cy5jb2RlcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gIGV4cG9ydHMuY29kZXNbZXhwb3J0cy5jb2Rlc1trXV0gPSBrO1xufSk7XG5cbmV4cG9ydHMuRGVmbGF0ZSA9IERlZmxhdGU7XG5leHBvcnRzLkluZmxhdGUgPSBJbmZsYXRlO1xuZXhwb3J0cy5HemlwID0gR3ppcDtcbmV4cG9ydHMuR3VuemlwID0gR3VuemlwO1xuZXhwb3J0cy5EZWZsYXRlUmF3ID0gRGVmbGF0ZVJhdztcbmV4cG9ydHMuSW5mbGF0ZVJhdyA9IEluZmxhdGVSYXc7XG5leHBvcnRzLlVuemlwID0gVW56aXA7XG5cbmV4cG9ydHMuY3JlYXRlRGVmbGF0ZSA9IGZ1bmN0aW9uKG8pIHtcbiAgcmV0dXJuIG5ldyBEZWZsYXRlKG8pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVJbmZsYXRlID0gZnVuY3Rpb24obykge1xuICByZXR1cm4gbmV3IEluZmxhdGUobyk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZURlZmxhdGVSYXcgPSBmdW5jdGlvbihvKSB7XG4gIHJldHVybiBuZXcgRGVmbGF0ZVJhdyhvKTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlSW5mbGF0ZVJhdyA9IGZ1bmN0aW9uKG8pIHtcbiAgcmV0dXJuIG5ldyBJbmZsYXRlUmF3KG8pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVHemlwID0gZnVuY3Rpb24obykge1xuICByZXR1cm4gbmV3IEd6aXAobyk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZUd1bnppcCA9IGZ1bmN0aW9uKG8pIHtcbiAgcmV0dXJuIG5ldyBHdW56aXAobyk7XG59O1xuXG5leHBvcnRzLmNyZWF0ZVVuemlwID0gZnVuY3Rpb24obykge1xuICByZXR1cm4gbmV3IFVuemlwKG8pO1xufTtcblxuXG4vLyBDb252ZW5pZW5jZSBtZXRob2RzLlxuLy8gY29tcHJlc3MvZGVjb21wcmVzcyBhIHN0cmluZyBvciBidWZmZXIgaW4gb25lIHN0ZXAuXG5leHBvcnRzLmRlZmxhdGUgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cbiAgcmV0dXJuIHpsaWJCdWZmZXIobmV3IERlZmxhdGUob3B0cyksIGJ1ZmZlciwgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0cy5kZWZsYXRlU3luYyA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0cykge1xuICByZXR1cm4gemxpYkJ1ZmZlclN5bmMobmV3IERlZmxhdGUob3B0cyksIGJ1ZmZlcik7XG59O1xuXG5leHBvcnRzLmd6aXAgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cbiAgcmV0dXJuIHpsaWJCdWZmZXIobmV3IEd6aXAob3B0cyksIGJ1ZmZlciwgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0cy5nemlwU3luYyA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0cykge1xuICByZXR1cm4gemxpYkJ1ZmZlclN5bmMobmV3IEd6aXAob3B0cyksIGJ1ZmZlcik7XG59O1xuXG5leHBvcnRzLmRlZmxhdGVSYXcgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cbiAgcmV0dXJuIHpsaWJCdWZmZXIobmV3IERlZmxhdGVSYXcob3B0cyksIGJ1ZmZlciwgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0cy5kZWZsYXRlUmF3U3luYyA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0cykge1xuICByZXR1cm4gemxpYkJ1ZmZlclN5bmMobmV3IERlZmxhdGVSYXcob3B0cyksIGJ1ZmZlcik7XG59O1xuXG5leHBvcnRzLnVuemlwID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRzLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIHJldHVybiB6bGliQnVmZmVyKG5ldyBVbnppcChvcHRzKSwgYnVmZmVyLCBjYWxsYmFjayk7XG59O1xuXG5leHBvcnRzLnVuemlwU3luYyA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0cykge1xuICByZXR1cm4gemxpYkJ1ZmZlclN5bmMobmV3IFVuemlwKG9wdHMpLCBidWZmZXIpO1xufTtcblxuZXhwb3J0cy5pbmZsYXRlID0gZnVuY3Rpb24oYnVmZmVyLCBvcHRzLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIHJldHVybiB6bGliQnVmZmVyKG5ldyBJbmZsYXRlKG9wdHMpLCBidWZmZXIsIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydHMuaW5mbGF0ZVN5bmMgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMpIHtcbiAgcmV0dXJuIHpsaWJCdWZmZXJTeW5jKG5ldyBJbmZsYXRlKG9wdHMpLCBidWZmZXIpO1xufTtcblxuZXhwb3J0cy5ndW56aXAgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cbiAgcmV0dXJuIHpsaWJCdWZmZXIobmV3IEd1bnppcChvcHRzKSwgYnVmZmVyLCBjYWxsYmFjayk7XG59O1xuXG5leHBvcnRzLmd1bnppcFN5bmMgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMpIHtcbiAgcmV0dXJuIHpsaWJCdWZmZXJTeW5jKG5ldyBHdW56aXAob3B0cyksIGJ1ZmZlcik7XG59O1xuXG5leHBvcnRzLmluZmxhdGVSYXcgPSBmdW5jdGlvbihidWZmZXIsIG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cbiAgcmV0dXJuIHpsaWJCdWZmZXIobmV3IEluZmxhdGVSYXcob3B0cyksIGJ1ZmZlciwgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0cy5pbmZsYXRlUmF3U3luYyA9IGZ1bmN0aW9uKGJ1ZmZlciwgb3B0cykge1xuICByZXR1cm4gemxpYkJ1ZmZlclN5bmMobmV3IEluZmxhdGVSYXcob3B0cyksIGJ1ZmZlcik7XG59O1xuXG5mdW5jdGlvbiB6bGliQnVmZmVyKGVuZ2luZSwgYnVmZmVyLCBjYWxsYmFjaykge1xuICB2YXIgYnVmZmVycyA9IFtdO1xuICB2YXIgbnJlYWQgPSAwO1xuXG4gIGVuZ2luZS5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgZW5naW5lLm9uKCdlbmQnLCBvbkVuZCk7XG5cbiAgZW5naW5lLmVuZChidWZmZXIpO1xuICBmbG93KCk7XG5cbiAgZnVuY3Rpb24gZmxvdygpIHtcbiAgICB2YXIgY2h1bms7XG4gICAgd2hpbGUgKG51bGwgIT09IChjaHVuayA9IGVuZ2luZS5yZWFkKCkpKSB7XG4gICAgICBidWZmZXJzLnB1c2goY2h1bmspO1xuICAgICAgbnJlYWQgKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgICBlbmdpbmUub25jZSgncmVhZGFibGUnLCBmbG93KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgZW5naW5lLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkVuZCk7XG4gICAgZW5naW5lLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIGZsb3cpO1xuICAgIGNhbGxiYWNrKGVycik7XG4gIH1cblxuICBmdW5jdGlvbiBvbkVuZCgpIHtcbiAgICB2YXIgYnVmID0gQnVmZmVyLmNvbmNhdChidWZmZXJzLCBucmVhZCk7XG4gICAgYnVmZmVycyA9IFtdO1xuICAgIGNhbGxiYWNrKG51bGwsIGJ1Zik7XG4gICAgZW5naW5lLmNsb3NlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gemxpYkJ1ZmZlclN5bmMoZW5naW5lLCBidWZmZXIpIHtcbiAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdzdHJpbmcnKVxuICAgIGJ1ZmZlciA9IG5ldyBCdWZmZXIoYnVmZmVyKTtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKSlcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb3QgYSBzdHJpbmcgb3IgYnVmZmVyJyk7XG5cbiAgdmFyIGZsdXNoRmxhZyA9IGJpbmRpbmcuWl9GSU5JU0g7XG5cbiAgcmV0dXJuIGVuZ2luZS5fcHJvY2Vzc0NodW5rKGJ1ZmZlciwgZmx1c2hGbGFnKTtcbn1cblxuLy8gZ2VuZXJpYyB6bGliXG4vLyBtaW5pbWFsIDItYnl0ZSBoZWFkZXJcbmZ1bmN0aW9uIERlZmxhdGUob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGVmbGF0ZSkpIHJldHVybiBuZXcgRGVmbGF0ZShvcHRzKTtcbiAgWmxpYi5jYWxsKHRoaXMsIG9wdHMsIGJpbmRpbmcuREVGTEFURSk7XG59XG5cbmZ1bmN0aW9uIEluZmxhdGUob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5mbGF0ZSkpIHJldHVybiBuZXcgSW5mbGF0ZShvcHRzKTtcbiAgWmxpYi5jYWxsKHRoaXMsIG9wdHMsIGJpbmRpbmcuSU5GTEFURSk7XG59XG5cblxuXG4vLyBnemlwIC0gYmlnZ2VyIGhlYWRlciwgc2FtZSBkZWZsYXRlIGNvbXByZXNzaW9uXG5mdW5jdGlvbiBHemlwKG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEd6aXApKSByZXR1cm4gbmV3IEd6aXAob3B0cyk7XG4gIFpsaWIuY2FsbCh0aGlzLCBvcHRzLCBiaW5kaW5nLkdaSVApO1xufVxuXG5mdW5jdGlvbiBHdW56aXAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgR3VuemlwKSkgcmV0dXJuIG5ldyBHdW56aXAob3B0cyk7XG4gIFpsaWIuY2FsbCh0aGlzLCBvcHRzLCBiaW5kaW5nLkdVTlpJUCk7XG59XG5cblxuXG4vLyByYXcgLSBubyBoZWFkZXJcbmZ1bmN0aW9uIERlZmxhdGVSYXcob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGVmbGF0ZVJhdykpIHJldHVybiBuZXcgRGVmbGF0ZVJhdyhvcHRzKTtcbiAgWmxpYi5jYWxsKHRoaXMsIG9wdHMsIGJpbmRpbmcuREVGTEFURVJBVyk7XG59XG5cbmZ1bmN0aW9uIEluZmxhdGVSYXcob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5mbGF0ZVJhdykpIHJldHVybiBuZXcgSW5mbGF0ZVJhdyhvcHRzKTtcbiAgWmxpYi5jYWxsKHRoaXMsIG9wdHMsIGJpbmRpbmcuSU5GTEFURVJBVyk7XG59XG5cblxuLy8gYXV0by1kZXRlY3QgaGVhZGVyLlxuZnVuY3Rpb24gVW56aXAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVW56aXApKSByZXR1cm4gbmV3IFVuemlwKG9wdHMpO1xuICBabGliLmNhbGwodGhpcywgb3B0cywgYmluZGluZy5VTlpJUCk7XG59XG5cblxuLy8gdGhlIFpsaWIgY2xhc3MgdGhleSBhbGwgaW5oZXJpdCBmcm9tXG4vLyBUaGlzIHRoaW5nIG1hbmFnZXMgdGhlIHF1ZXVlIG9mIHJlcXVlc3RzLCBhbmQgcmV0dXJuc1xuLy8gdHJ1ZSBvciBmYWxzZSBpZiB0aGVyZSBpcyBhbnl0aGluZyBpbiB0aGUgcXVldWUgd2hlblxuLy8geW91IGNhbGwgdGhlIC53cml0ZSgpIG1ldGhvZC5cblxuZnVuY3Rpb24gWmxpYihvcHRzLCBtb2RlKSB7XG4gIHRoaXMuX29wdHMgPSBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdGhpcy5fY2h1bmtTaXplID0gb3B0cy5jaHVua1NpemUgfHwgZXhwb3J0cy5aX0RFRkFVTFRfQ0hVTks7XG5cbiAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0cyk7XG5cbiAgaWYgKG9wdHMuZmx1c2gpIHtcbiAgICBpZiAob3B0cy5mbHVzaCAhPT0gYmluZGluZy5aX05PX0ZMVVNIICYmXG4gICAgICAgIG9wdHMuZmx1c2ggIT09IGJpbmRpbmcuWl9QQVJUSUFMX0ZMVVNIICYmXG4gICAgICAgIG9wdHMuZmx1c2ggIT09IGJpbmRpbmcuWl9TWU5DX0ZMVVNIICYmXG4gICAgICAgIG9wdHMuZmx1c2ggIT09IGJpbmRpbmcuWl9GVUxMX0ZMVVNIICYmXG4gICAgICAgIG9wdHMuZmx1c2ggIT09IGJpbmRpbmcuWl9GSU5JU0ggJiZcbiAgICAgICAgb3B0cy5mbHVzaCAhPT0gYmluZGluZy5aX0JMT0NLKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmx1c2ggZmxhZzogJyArIG9wdHMuZmx1c2gpO1xuICAgIH1cbiAgfVxuICB0aGlzLl9mbHVzaEZsYWcgPSBvcHRzLmZsdXNoIHx8IGJpbmRpbmcuWl9OT19GTFVTSDtcblxuICBpZiAob3B0cy5jaHVua1NpemUpIHtcbiAgICBpZiAob3B0cy5jaHVua1NpemUgPCBleHBvcnRzLlpfTUlOX0NIVU5LIHx8XG4gICAgICAgIG9wdHMuY2h1bmtTaXplID4gZXhwb3J0cy5aX01BWF9DSFVOSykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNodW5rIHNpemU6ICcgKyBvcHRzLmNodW5rU2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMud2luZG93Qml0cykge1xuICAgIGlmIChvcHRzLndpbmRvd0JpdHMgPCBleHBvcnRzLlpfTUlOX1dJTkRPV0JJVFMgfHxcbiAgICAgICAgb3B0cy53aW5kb3dCaXRzID4gZXhwb3J0cy5aX01BWF9XSU5ET1dCSVRTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgd2luZG93Qml0czogJyArIG9wdHMud2luZG93Qml0cyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMubGV2ZWwpIHtcbiAgICBpZiAob3B0cy5sZXZlbCA8IGV4cG9ydHMuWl9NSU5fTEVWRUwgfHxcbiAgICAgICAgb3B0cy5sZXZlbCA+IGV4cG9ydHMuWl9NQVhfTEVWRUwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbDogJyArIG9wdHMubGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRzLm1lbUxldmVsKSB7XG4gICAgaWYgKG9wdHMubWVtTGV2ZWwgPCBleHBvcnRzLlpfTUlOX01FTUxFVkVMIHx8XG4gICAgICAgIG9wdHMubWVtTGV2ZWwgPiBleHBvcnRzLlpfTUFYX01FTUxFVkVMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWVtTGV2ZWw6ICcgKyBvcHRzLm1lbUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy5zdHJhdGVneSkge1xuICAgIGlmIChvcHRzLnN0cmF0ZWd5ICE9IGV4cG9ydHMuWl9GSUxURVJFRCAmJlxuICAgICAgICBvcHRzLnN0cmF0ZWd5ICE9IGV4cG9ydHMuWl9IVUZGTUFOX09OTFkgJiZcbiAgICAgICAgb3B0cy5zdHJhdGVneSAhPSBleHBvcnRzLlpfUkxFICYmXG4gICAgICAgIG9wdHMuc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX0ZJWEVEICYmXG4gICAgICAgIG9wdHMuc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX0RFRkFVTFRfU1RSQVRFR1kpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJhdGVneTogJyArIG9wdHMuc3RyYXRlZ3kpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRzLmRpY3Rpb25hcnkpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihvcHRzLmRpY3Rpb25hcnkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGljdGlvbmFyeTogaXQgc2hvdWxkIGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5fYmluZGluZyA9IG5ldyBiaW5kaW5nLlpsaWIobW9kZSk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9oYWRFcnJvciA9IGZhbHNlO1xuICB0aGlzLl9iaW5kaW5nLm9uZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlLCBlcnJubykge1xuICAgIC8vIHRoZXJlIGlzIG5vIHdheSB0byBjbGVhbmx5IHJlY292ZXIuXG4gICAgLy8gY29udGludWluZyBvbmx5IG9ic2N1cmVzIHByb2JsZW1zLlxuICAgIHNlbGYuX2JpbmRpbmcgPSBudWxsO1xuICAgIHNlbGYuX2hhZEVycm9yID0gdHJ1ZTtcblxuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICBlcnJvci5lcnJubyA9IGVycm5vO1xuICAgIGVycm9yLmNvZGUgPSBleHBvcnRzLmNvZGVzW2Vycm5vXTtcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICB9O1xuXG4gIHZhciBsZXZlbCA9IGV4cG9ydHMuWl9ERUZBVUxUX0NPTVBSRVNTSU9OO1xuICBpZiAodHlwZW9mIG9wdHMubGV2ZWwgPT09ICdudW1iZXInKSBsZXZlbCA9IG9wdHMubGV2ZWw7XG5cbiAgdmFyIHN0cmF0ZWd5ID0gZXhwb3J0cy5aX0RFRkFVTFRfU1RSQVRFR1k7XG4gIGlmICh0eXBlb2Ygb3B0cy5zdHJhdGVneSA9PT0gJ251bWJlcicpIHN0cmF0ZWd5ID0gb3B0cy5zdHJhdGVneTtcblxuICB0aGlzLl9iaW5kaW5nLmluaXQob3B0cy53aW5kb3dCaXRzIHx8IGV4cG9ydHMuWl9ERUZBVUxUX1dJTkRPV0JJVFMsXG4gICAgICAgICAgICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgIG9wdHMubWVtTGV2ZWwgfHwgZXhwb3J0cy5aX0RFRkFVTFRfTUVNTEVWRUwsXG4gICAgICAgICAgICAgICAgICAgICBzdHJhdGVneSxcbiAgICAgICAgICAgICAgICAgICAgIG9wdHMuZGljdGlvbmFyeSk7XG5cbiAgdGhpcy5fYnVmZmVyID0gbmV3IEJ1ZmZlcih0aGlzLl9jaHVua1NpemUpO1xuICB0aGlzLl9vZmZzZXQgPSAwO1xuICB0aGlzLl9jbG9zZWQgPSBmYWxzZTtcbiAgdGhpcy5fbGV2ZWwgPSBsZXZlbDtcbiAgdGhpcy5fc3RyYXRlZ3kgPSBzdHJhdGVneTtcblxuICB0aGlzLm9uY2UoJ2VuZCcsIHRoaXMuY2xvc2UpO1xufVxuXG51dGlsLmluaGVyaXRzKFpsaWIsIFRyYW5zZm9ybSk7XG5cblpsaWIucHJvdG90eXBlLnBhcmFtcyA9IGZ1bmN0aW9uKGxldmVsLCBzdHJhdGVneSwgY2FsbGJhY2spIHtcbiAgaWYgKGxldmVsIDwgZXhwb3J0cy5aX01JTl9MRVZFTCB8fFxuICAgICAgbGV2ZWwgPiBleHBvcnRzLlpfTUFYX0xFVkVMKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgY29tcHJlc3Npb24gbGV2ZWw6ICcgKyBsZXZlbCk7XG4gIH1cbiAgaWYgKHN0cmF0ZWd5ICE9IGV4cG9ydHMuWl9GSUxURVJFRCAmJlxuICAgICAgc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX0hVRkZNQU5fT05MWSAmJlxuICAgICAgc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX1JMRSAmJlxuICAgICAgc3RyYXRlZ3kgIT0gZXhwb3J0cy5aX0ZJWEVEICYmXG4gICAgICBzdHJhdGVneSAhPSBleHBvcnRzLlpfREVGQVVMVF9TVFJBVEVHWSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RyYXRlZ3k6ICcgKyBzdHJhdGVneSk7XG4gIH1cblxuICBpZiAodGhpcy5fbGV2ZWwgIT09IGxldmVsIHx8IHRoaXMuX3N0cmF0ZWd5ICE9PSBzdHJhdGVneSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmZsdXNoKGJpbmRpbmcuWl9TWU5DX0ZMVVNILCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuX2JpbmRpbmcucGFyYW1zKGxldmVsLCBzdHJhdGVneSk7XG4gICAgICBpZiAoIXNlbGYuX2hhZEVycm9yKSB7XG4gICAgICAgIHNlbGYuX2xldmVsID0gbGV2ZWw7XG4gICAgICAgIHNlbGYuX3N0cmF0ZWd5ID0gc3RyYXRlZ3k7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcbiAgfVxufTtcblxuWmxpYi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuX2JpbmRpbmcucmVzZXQoKTtcbn07XG5cbi8vIFRoaXMgaXMgdGhlIF9mbHVzaCBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHRyYW5zZm9ybSBjbGFzcyxcbi8vIGludGVybmFsbHksIHdoZW4gdGhlIGxhc3QgY2h1bmsgaGFzIGJlZW4gd3JpdHRlbi5cblpsaWIucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHRoaXMuX3RyYW5zZm9ybShuZXcgQnVmZmVyKDApLCAnJywgY2FsbGJhY2spO1xufTtcblxuWmxpYi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihraW5kLCBjYWxsYmFjaykge1xuICB2YXIgd3MgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmICh0eXBlb2Yga2luZCA9PT0gJ2Z1bmN0aW9uJyB8fCAoa2luZCA9PT0gdm9pZCAwICYmICFjYWxsYmFjaykpIHtcbiAgICBjYWxsYmFjayA9IGtpbmQ7XG4gICAga2luZCA9IGJpbmRpbmcuWl9GVUxMX0ZMVVNIO1xuICB9XG5cbiAgaWYgKHdzLmVuZGVkKSB7XG4gICAgaWYgKGNhbGxiYWNrKVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG4gIH0gZWxzZSBpZiAod3MuZW5kaW5nKSB7XG4gICAgaWYgKGNhbGxiYWNrKVxuICAgICAgdGhpcy5vbmNlKCdlbmQnLCBjYWxsYmFjayk7XG4gIH0gZWxzZSBpZiAod3MubmVlZERyYWluKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMub25jZSgnZHJhaW4nLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuZmx1c2goY2FsbGJhY2spO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2ZsdXNoRmxhZyA9IGtpbmQ7XG4gICAgdGhpcy53cml0ZShuZXcgQnVmZmVyKDApLCAnJywgY2FsbGJhY2spO1xuICB9XG59O1xuXG5abGliLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjaylcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcblxuICBpZiAodGhpcy5fY2xvc2VkKVxuICAgIHJldHVybjtcblxuICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuXG4gIHRoaXMuX2JpbmRpbmcuY2xvc2UoKTtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5lbWl0KCdjbG9zZScpO1xuICB9KTtcbn07XG5cblpsaWIucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHZhciBmbHVzaEZsYWc7XG4gIHZhciB3cyA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIHZhciBlbmRpbmcgPSB3cy5lbmRpbmcgfHwgd3MuZW5kZWQ7XG4gIHZhciBsYXN0ID0gZW5kaW5nICYmICghY2h1bmsgfHwgd3MubGVuZ3RoID09PSBjaHVuay5sZW5ndGgpO1xuXG4gIGlmICghY2h1bmsgPT09IG51bGwgJiYgIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpXG4gICAgcmV0dXJuIGNiKG5ldyBFcnJvcignaW52YWxpZCBpbnB1dCcpKTtcblxuICAvLyBJZiBpdCdzIHRoZSBsYXN0IGNodW5rLCBvciBhIGZpbmFsIGZsdXNoLCB3ZSB1c2UgdGhlIFpfRklOSVNIIGZsdXNoIGZsYWcuXG4gIC8vIElmIGl0J3MgZXhwbGljaXRseSBmbHVzaGluZyBhdCBzb21lIG90aGVyIHRpbWUsIHRoZW4gd2UgdXNlXG4gIC8vIFpfRlVMTF9GTFVTSC4gT3RoZXJ3aXNlLCB1c2UgWl9OT19GTFVTSCBmb3IgbWF4aW11bSBjb21wcmVzc2lvblxuICAvLyBnb29kbmVzcy5cbiAgaWYgKGxhc3QpXG4gICAgZmx1c2hGbGFnID0gYmluZGluZy5aX0ZJTklTSDtcbiAgZWxzZSB7XG4gICAgZmx1c2hGbGFnID0gdGhpcy5fZmx1c2hGbGFnO1xuICAgIC8vIG9uY2Ugd2UndmUgZmx1c2hlZCB0aGUgbGFzdCBvZiB0aGUgcXVldWUsIHN0b3AgZmx1c2hpbmcgYW5kXG4gICAgLy8gZ28gYmFjayB0byB0aGUgbm9ybWFsIGJlaGF2aW9yLlxuICAgIGlmIChjaHVuay5sZW5ndGggPj0gd3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9mbHVzaEZsYWcgPSB0aGlzLl9vcHRzLmZsdXNoIHx8IGJpbmRpbmcuWl9OT19GTFVTSDtcbiAgICB9XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3Byb2Nlc3NDaHVuayhjaHVuaywgZmx1c2hGbGFnLCBjYik7XG59O1xuXG5abGliLnByb3RvdHlwZS5fcHJvY2Vzc0NodW5rID0gZnVuY3Rpb24oY2h1bmssIGZsdXNoRmxhZywgY2IpIHtcbiAgdmFyIGF2YWlsSW5CZWZvcmUgPSBjaHVuayAmJiBjaHVuay5sZW5ndGg7XG4gIHZhciBhdmFpbE91dEJlZm9yZSA9IHRoaXMuX2NodW5rU2l6ZSAtIHRoaXMuX29mZnNldDtcbiAgdmFyIGluT2ZmID0gMDtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdmFyIGFzeW5jID0gdHlwZW9mIGNiID09PSAnZnVuY3Rpb24nO1xuXG4gIGlmICghYXN5bmMpIHtcbiAgICB2YXIgYnVmZmVycyA9IFtdO1xuICAgIHZhciBucmVhZCA9IDA7XG5cbiAgICB2YXIgZXJyb3I7XG4gICAgdGhpcy5vbignZXJyb3InLCBmdW5jdGlvbihlcikge1xuICAgICAgZXJyb3IgPSBlcjtcbiAgICB9KTtcblxuICAgIGRvIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLl9iaW5kaW5nLndyaXRlU3luYyhmbHVzaEZsYWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmssIC8vIGluXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5PZmYsIC8vIGluX29mZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsSW5CZWZvcmUsIC8vIGluX2xlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2J1ZmZlciwgLy8gb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0LCAvL291dF9vZmZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbE91dEJlZm9yZSk7IC8vIG91dF9sZW5cbiAgICB9IHdoaWxlICghdGhpcy5faGFkRXJyb3IgJiYgY2FsbGJhY2socmVzWzBdLCByZXNbMV0pKTtcblxuICAgIGlmICh0aGlzLl9oYWRFcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgdmFyIGJ1ZiA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgbnJlYWQpO1xuICAgIHRoaXMuY2xvc2UoKTtcblxuICAgIHJldHVybiBidWY7XG4gIH1cblxuICB2YXIgcmVxID0gdGhpcy5fYmluZGluZy53cml0ZShmbHVzaEZsYWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rLCAvLyBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbk9mZiwgLy8gaW5fb2ZmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsSW5CZWZvcmUsIC8vIGluX2xlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXIsIC8vIG91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vZmZzZXQsIC8vb3V0X29mZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbE91dEJlZm9yZSk7IC8vIG91dF9sZW5cblxuICByZXEuYnVmZmVyID0gY2h1bms7XG4gIHJlcS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gIGZ1bmN0aW9uIGNhbGxiYWNrKGF2YWlsSW5BZnRlciwgYXZhaWxPdXRBZnRlcikge1xuICAgIGlmIChzZWxmLl9oYWRFcnJvcilcbiAgICAgIHJldHVybjtcblxuICAgIHZhciBoYXZlID0gYXZhaWxPdXRCZWZvcmUgLSBhdmFpbE91dEFmdGVyO1xuICAgIGFzc2VydChoYXZlID49IDAsICdoYXZlIHNob3VsZCBub3QgZ28gZG93bicpO1xuXG4gICAgaWYgKGhhdmUgPiAwKSB7XG4gICAgICB2YXIgb3V0ID0gc2VsZi5fYnVmZmVyLnNsaWNlKHNlbGYuX29mZnNldCwgc2VsZi5fb2Zmc2V0ICsgaGF2ZSk7XG4gICAgICBzZWxmLl9vZmZzZXQgKz0gaGF2ZTtcbiAgICAgIC8vIHNlcnZlIHNvbWUgb3V0cHV0IHRvIHRoZSBjb25zdW1lci5cbiAgICAgIGlmIChhc3luYykge1xuICAgICAgICBzZWxmLnB1c2gob3V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChvdXQpO1xuICAgICAgICBucmVhZCArPSBvdXQubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGV4aGF1c3RlZCB0aGUgb3V0cHV0IGJ1ZmZlciwgb3IgdXNlZCBhbGwgdGhlIGlucHV0IGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgaWYgKGF2YWlsT3V0QWZ0ZXIgPT09IDAgfHwgc2VsZi5fb2Zmc2V0ID49IHNlbGYuX2NodW5rU2l6ZSkge1xuICAgICAgYXZhaWxPdXRCZWZvcmUgPSBzZWxmLl9jaHVua1NpemU7XG4gICAgICBzZWxmLl9vZmZzZXQgPSAwO1xuICAgICAgc2VsZi5fYnVmZmVyID0gbmV3IEJ1ZmZlcihzZWxmLl9jaHVua1NpemUpO1xuICAgIH1cblxuICAgIGlmIChhdmFpbE91dEFmdGVyID09PSAwKSB7XG4gICAgICAvLyBOb3QgYWN0dWFsbHkgZG9uZS4gIE5lZWQgdG8gcmVwcm9jZXNzLlxuICAgICAgLy8gQWxzbywgdXBkYXRlIHRoZSBhdmFpbEluQmVmb3JlIHRvIHRoZSBhdmFpbEluQWZ0ZXIgdmFsdWUsXG4gICAgICAvLyBzbyB0aGF0IGlmIHdlIGhhdmUgdG8gaGl0IGl0IGEgdGhpcmQgKGZvdXJ0aCwgZXRjLikgdGltZSxcbiAgICAgIC8vIGl0J2xsIGhhdmUgdGhlIGNvcnJlY3QgYnl0ZSBjb3VudHMuXG4gICAgICBpbk9mZiArPSAoYXZhaWxJbkJlZm9yZSAtIGF2YWlsSW5BZnRlcik7XG4gICAgICBhdmFpbEluQmVmb3JlID0gYXZhaWxJbkFmdGVyO1xuXG4gICAgICBpZiAoIWFzeW5jKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgdmFyIG5ld1JlcSA9IHNlbGYuX2JpbmRpbmcud3JpdGUoZmx1c2hGbGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbk9mZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsSW5CZWZvcmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jaHVua1NpemUpO1xuICAgICAgbmV3UmVxLmNhbGxiYWNrID0gY2FsbGJhY2s7IC8vIHRoaXMgc2FtZSBmdW5jdGlvblxuICAgICAgbmV3UmVxLmJ1ZmZlciA9IGNodW5rO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghYXN5bmMpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBmaW5pc2hlZCB3aXRoIHRoZSBjaHVuay5cbiAgICBjYigpO1xuICB9XG59O1xuXG51dGlsLmluaGVyaXRzKERlZmxhdGUsIFpsaWIpO1xudXRpbC5pbmhlcml0cyhJbmZsYXRlLCBabGliKTtcbnV0aWwuaW5oZXJpdHMoR3ppcCwgWmxpYik7XG51dGlsLmluaGVyaXRzKEd1bnppcCwgWmxpYik7XG51dGlsLmluaGVyaXRzKERlZmxhdGVSYXcsIFpsaWIpO1xudXRpbC5pbmhlcml0cyhJbmZsYXRlUmF3LCBabGliKTtcbnV0aWwuaW5oZXJpdHMoVW56aXAsIFpsaWIpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJyk7XG52YXIgQnVmZmVyID0gYnVmZmVyLkJ1ZmZlcjtcbnZhciBTbG93QnVmZmVyID0gYnVmZmVyLlNsb3dCdWZmZXI7XG52YXIgTUFYX0xFTiA9IGJ1ZmZlci5rTWF4TGVuZ3RoIHx8IDIxNDc0ODM2NDc7XG5leHBvcnRzLmFsbG9jID0gZnVuY3Rpb24gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIuYWxsb2MgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKTtcbiAgfVxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3Qgbm90IGJlIG51bWJlcicpO1xuICB9XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplIG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuICBpZiAoc2l6ZSA+IE1BWF9MRU4pIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc2l6ZSBpcyB0b28gbGFyZ2UnKTtcbiAgfVxuICB2YXIgZW5jID0gZW5jb2Rpbmc7XG4gIHZhciBfZmlsbCA9IGZpbGw7XG4gIGlmIChfZmlsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jID0gdW5kZWZpbmVkO1xuICAgIF9maWxsID0gMDtcbiAgfVxuICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzaXplKTtcbiAgaWYgKHR5cGVvZiBfZmlsbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgZmlsbEJ1ZiA9IG5ldyBCdWZmZXIoX2ZpbGwsIGVuYyk7XG4gICAgdmFyIGZsZW4gPSBmaWxsQnVmLmxlbmd0aDtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBzaXplKSB7XG4gICAgICBidWZbaV0gPSBmaWxsQnVmW2kgJSBmbGVuXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmLmZpbGwoX2ZpbGwpO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5leHBvcnRzLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gYWxsb2NVbnNhZmUoc2l6ZSkge1xuICBpZiAodHlwZW9mIEJ1ZmZlci5hbGxvY1Vuc2FmZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2NVbnNhZmUoc2l6ZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpemUgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG4gIGlmIChzaXplID4gTUFYX0xFTikge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdzaXplIGlzIHRvbyBsYXJnZScpO1xuICB9XG4gIHJldHVybiBuZXcgQnVmZmVyKHNpemUpO1xufVxuZXhwb3J0cy5mcm9tID0gZnVuY3Rpb24gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgQnVmZmVyLmZyb20gPT09ICdmdW5jdGlvbicgJiYgKCFnbG9iYWwuVWludDhBcnJheSB8fCBVaW50OEFycmF5LmZyb20gIT09IEJ1ZmZlci5mcm9tKSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpO1xuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICB2YXIgb2Zmc2V0ID0gZW5jb2RpbmdPck9mZnNldDtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgfVxuICAgIHZhciBsZW4gPSBsZW5ndGg7XG4gICAgaWYgKHR5cGVvZiBsZW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoIC0gb2Zmc2V0O1xuICAgIH1cbiAgICBpZiAob2Zmc2V0ID49IHZhbHVlLmJ5dGVMZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpO1xuICAgIH1cbiAgICBpZiAobGVuID4gdmFsdWUuYnl0ZUxlbmd0aCAtIG9mZnNldCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbGVuKSk7XG4gIH1cbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEJ1ZmZlcih2YWx1ZS5sZW5ndGgpO1xuICAgIHZhbHVlLmNvcHkob3V0LCAwLCAwLCB2YWx1ZS5sZW5ndGgpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8ICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB8fCAnbGVuZ3RoJyBpbiB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSA9PT0gJ0J1ZmZlcicgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhKSkge1xuICAgICAgcmV0dXJuIG5ldyBCdWZmZXIodmFsdWUuZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCAnICsgJ0FycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJyk7XG59XG5leHBvcnRzLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIGFsbG9jVW5zYWZlU2xvdyhzaXplKSB7XG4gIGlmICh0eXBlb2YgQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KHNpemUpO1xuICB9XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplIG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuICBpZiAoc2l6ZSA+PSBNQVhfTEVOKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NpemUgaXMgdG9vIGxhcmdlJyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBTbG93QnVmZmVyKHNpemUpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4b3IgKGEsIGIpIHtcbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aClcbiAgdmFyIGJ1ZmZlciA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBidWZmZXJbaV0gPSBhW2ldIF4gYltpXVxuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlclxufVxuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG52YXIgS19NQVhfTEVOR1RIID0gMHg3ZmZmZmZmZlxuZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFByaW50IHdhcm5pbmcgYW5kIHJlY29tbWVuZCB1c2luZyBgYnVmZmVyYCB2NC54IHdoaWNoIGhhcyBhbiBPYmplY3RcbiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIFdlIHJlcG9ydCB0aGF0IHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGlmIHRoZSBhcmUgbm90IHN1YmNsYXNzYWJsZVxuICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YFxuICogKFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4KS4gSUUgMTAgbGFja3Mgc3VwcG9ydFxuICogZm9yIF9fcHJvdG9fXyBhbmQgaGFzIGEgYnVnZ3kgdHlwZWQgYXJyYXkgaW1wbGVtZW50YXRpb24uXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5pZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICtcbiAgICAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nXG4gIClcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ/XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgYXJyLl9fcHJvdG9fXyA9IHtfX3Byb3RvX186IFVpbnQ4QXJyYXkucHJvdG90eXBlLCBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH19XG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIGJ1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZydcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZylcbiAgfVxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbmlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgIEJ1ZmZlcltTeW1ib2wuc3BlY2llc10gPT09IEJ1ZmZlcikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgIHZhbHVlOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSlcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbkJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbkJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICB2YXIgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmIChpc0FycmF5QnVmZmVyVmlldyhvYmopIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAoaXNBcnJheUJ1ZmZlclZpZXcoc3RyaW5nKSB8fCBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyAoYnl0ZXNbaSArIDFdICogMjU2KSlcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZylcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBOb2RlIDAuMTAgc3VwcG9ydHMgYEFycmF5QnVmZmVyYCBidXQgbGFja3MgYEFycmF5QnVmZmVyLmlzVmlld2BcbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3IChvYmopIHtcbiAgcmV0dXJuICh0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nKSAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcob2JqKVxufVxuXG5mdW5jdGlvbiBudW1iZXJJc05hTiAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwiMTAwXCI6IFwiQ29udGludWVcIixcbiAgXCIxMDFcIjogXCJTd2l0Y2hpbmcgUHJvdG9jb2xzXCIsXG4gIFwiMTAyXCI6IFwiUHJvY2Vzc2luZ1wiLFxuICBcIjIwMFwiOiBcIk9LXCIsXG4gIFwiMjAxXCI6IFwiQ3JlYXRlZFwiLFxuICBcIjIwMlwiOiBcIkFjY2VwdGVkXCIsXG4gIFwiMjAzXCI6IFwiTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb25cIixcbiAgXCIyMDRcIjogXCJObyBDb250ZW50XCIsXG4gIFwiMjA1XCI6IFwiUmVzZXQgQ29udGVudFwiLFxuICBcIjIwNlwiOiBcIlBhcnRpYWwgQ29udGVudFwiLFxuICBcIjIwN1wiOiBcIk11bHRpLVN0YXR1c1wiLFxuICBcIjIwOFwiOiBcIkFscmVhZHkgUmVwb3J0ZWRcIixcbiAgXCIyMjZcIjogXCJJTSBVc2VkXCIsXG4gIFwiMzAwXCI6IFwiTXVsdGlwbGUgQ2hvaWNlc1wiLFxuICBcIjMwMVwiOiBcIk1vdmVkIFBlcm1hbmVudGx5XCIsXG4gIFwiMzAyXCI6IFwiRm91bmRcIixcbiAgXCIzMDNcIjogXCJTZWUgT3RoZXJcIixcbiAgXCIzMDRcIjogXCJOb3QgTW9kaWZpZWRcIixcbiAgXCIzMDVcIjogXCJVc2UgUHJveHlcIixcbiAgXCIzMDdcIjogXCJUZW1wb3JhcnkgUmVkaXJlY3RcIixcbiAgXCIzMDhcIjogXCJQZXJtYW5lbnQgUmVkaXJlY3RcIixcbiAgXCI0MDBcIjogXCJCYWQgUmVxdWVzdFwiLFxuICBcIjQwMVwiOiBcIlVuYXV0aG9yaXplZFwiLFxuICBcIjQwMlwiOiBcIlBheW1lbnQgUmVxdWlyZWRcIixcbiAgXCI0MDNcIjogXCJGb3JiaWRkZW5cIixcbiAgXCI0MDRcIjogXCJOb3QgRm91bmRcIixcbiAgXCI0MDVcIjogXCJNZXRob2QgTm90IEFsbG93ZWRcIixcbiAgXCI0MDZcIjogXCJOb3QgQWNjZXB0YWJsZVwiLFxuICBcIjQwN1wiOiBcIlByb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkXCIsXG4gIFwiNDA4XCI6IFwiUmVxdWVzdCBUaW1lb3V0XCIsXG4gIFwiNDA5XCI6IFwiQ29uZmxpY3RcIixcbiAgXCI0MTBcIjogXCJHb25lXCIsXG4gIFwiNDExXCI6IFwiTGVuZ3RoIFJlcXVpcmVkXCIsXG4gIFwiNDEyXCI6IFwiUHJlY29uZGl0aW9uIEZhaWxlZFwiLFxuICBcIjQxM1wiOiBcIlBheWxvYWQgVG9vIExhcmdlXCIsXG4gIFwiNDE0XCI6IFwiVVJJIFRvbyBMb25nXCIsXG4gIFwiNDE1XCI6IFwiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZVwiLFxuICBcIjQxNlwiOiBcIlJhbmdlIE5vdCBTYXRpc2ZpYWJsZVwiLFxuICBcIjQxN1wiOiBcIkV4cGVjdGF0aW9uIEZhaWxlZFwiLFxuICBcIjQxOFwiOiBcIkknbSBhIHRlYXBvdFwiLFxuICBcIjQyMVwiOiBcIk1pc2RpcmVjdGVkIFJlcXVlc3RcIixcbiAgXCI0MjJcIjogXCJVbnByb2Nlc3NhYmxlIEVudGl0eVwiLFxuICBcIjQyM1wiOiBcIkxvY2tlZFwiLFxuICBcIjQyNFwiOiBcIkZhaWxlZCBEZXBlbmRlbmN5XCIsXG4gIFwiNDI1XCI6IFwiVW5vcmRlcmVkIENvbGxlY3Rpb25cIixcbiAgXCI0MjZcIjogXCJVcGdyYWRlIFJlcXVpcmVkXCIsXG4gIFwiNDI4XCI6IFwiUHJlY29uZGl0aW9uIFJlcXVpcmVkXCIsXG4gIFwiNDI5XCI6IFwiVG9vIE1hbnkgUmVxdWVzdHNcIixcbiAgXCI0MzFcIjogXCJSZXF1ZXN0IEhlYWRlciBGaWVsZHMgVG9vIExhcmdlXCIsXG4gIFwiNDUxXCI6IFwiVW5hdmFpbGFibGUgRm9yIExlZ2FsIFJlYXNvbnNcIixcbiAgXCI1MDBcIjogXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIixcbiAgXCI1MDFcIjogXCJOb3QgSW1wbGVtZW50ZWRcIixcbiAgXCI1MDJcIjogXCJCYWQgR2F0ZXdheVwiLFxuICBcIjUwM1wiOiBcIlNlcnZpY2UgVW5hdmFpbGFibGVcIixcbiAgXCI1MDRcIjogXCJHYXRld2F5IFRpbWVvdXRcIixcbiAgXCI1MDVcIjogXCJIVFRQIFZlcnNpb24gTm90IFN1cHBvcnRlZFwiLFxuICBcIjUwNlwiOiBcIlZhcmlhbnQgQWxzbyBOZWdvdGlhdGVzXCIsXG4gIFwiNTA3XCI6IFwiSW5zdWZmaWNpZW50IFN0b3JhZ2VcIixcbiAgXCI1MDhcIjogXCJMb29wIERldGVjdGVkXCIsXG4gIFwiNTA5XCI6IFwiQmFuZHdpZHRoIExpbWl0IEV4Y2VlZGVkXCIsXG4gIFwiNTEwXCI6IFwiTm90IEV4dGVuZGVkXCIsXG4gIFwiNTExXCI6IFwiTmV0d29yayBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFwiXG59XG4iLCJmdW5jdGlvbiBDYXNlbGVzcyAoZGljdCkge1xuICB0aGlzLmRpY3QgPSBkaWN0IHx8IHt9XG59XG5DYXNlbGVzcy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBjbG9iYmVyKSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcbiAgICBmb3IgKHZhciBpIGluIG5hbWUpIHtcbiAgICAgIHRoaXMuc2V0KGksIG5hbWVbaV0sIHZhbHVlKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGNsb2JiZXIgPT09ICd1bmRlZmluZWQnKSBjbG9iYmVyID0gdHJ1ZVxuICAgIHZhciBoYXMgPSB0aGlzLmhhcyhuYW1lKVxuXG4gICAgaWYgKCFjbG9iYmVyICYmIGhhcykgdGhpcy5kaWN0W2hhc10gPSB0aGlzLmRpY3RbaGFzXSArICcsJyArIHZhbHVlXG4gICAgZWxzZSB0aGlzLmRpY3RbaGFzIHx8IG5hbWVdID0gdmFsdWVcbiAgICByZXR1cm4gaGFzXG4gIH1cbn1cbkNhc2VsZXNzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZGljdClcbiAgICAsIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICA7XG4gIGZvciAodmFyIGk9MDtpPGtleXMubGVuZ3RoO2krKykge1xuICAgIGlmIChrZXlzW2ldLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUpIHJldHVybiBrZXlzW2ldXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5DYXNlbGVzcy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuICB2YXIgcmVzdWx0LCBfa2V5XG4gIHZhciBoZWFkZXJzID0gdGhpcy5kaWN0XG4gIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIF9rZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICAgIGlmIChuYW1lID09PSBfa2V5KSByZXN1bHQgPSBoZWFkZXJzW2tleV1cbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuQ2FzZWxlc3MucHJvdG90eXBlLnN3YXAgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgaGFzID0gdGhpcy5oYXMobmFtZSlcbiAgaWYgKGhhcyA9PT0gbmFtZSkgcmV0dXJuXG4gIGlmICghaGFzKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIGhlYWRlciB0aGFuIG1hdGNoZXMgXCInK25hbWUrJ1wiJylcbiAgdGhpcy5kaWN0W25hbWVdID0gdGhpcy5kaWN0W2hhc11cbiAgZGVsZXRlIHRoaXMuZGljdFtoYXNdXG59XG5DYXNlbGVzcy5wcm90b3R5cGUuZGVsID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyIGhhcyA9IHRoaXMuaGFzKG5hbWUpXG4gIHJldHVybiBkZWxldGUgdGhpcy5kaWN0W2hhcyB8fCBuYW1lXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkaWN0KSB7cmV0dXJuIG5ldyBDYXNlbGVzcyhkaWN0KX1cbm1vZHVsZS5leHBvcnRzLmh0dHBpZnkgPSBmdW5jdGlvbiAocmVzcCwgaGVhZGVycykge1xuICB2YXIgYyA9IG5ldyBDYXNlbGVzcyhoZWFkZXJzKVxuICByZXNwLnNldEhlYWRlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBjbG9iYmVyKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHJldHVyblxuICAgIHJldHVybiBjLnNldChrZXksIHZhbHVlLCBjbG9iYmVyKVxuICB9XG4gIHJlc3AuaGFzSGVhZGVyID0gZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBjLmhhcyhrZXkpXG4gIH1cbiAgcmVzcC5nZXRIZWFkZXIgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGMuZ2V0KGtleSlcbiAgfVxuICByZXNwLnJlbW92ZUhlYWRlciA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gYy5kZWwoa2V5KVxuICB9XG4gIHJlc3AuaGVhZGVycyA9IGMuZGljdFxuICByZXR1cm4gY1xufVxuIiwidmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ3N0cmVhbScpLlRyYW5zZm9ybVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpLlN0cmluZ0RlY29kZXJcbm1vZHVsZS5leHBvcnRzID0gQ2lwaGVyQmFzZVxuaW5oZXJpdHMoQ2lwaGVyQmFzZSwgVHJhbnNmb3JtKVxuZnVuY3Rpb24gQ2lwaGVyQmFzZSAoaGFzaE1vZGUpIHtcbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcbiAgdGhpcy5oYXNoTW9kZSA9IHR5cGVvZiBoYXNoTW9kZSA9PT0gJ3N0cmluZydcbiAgaWYgKHRoaXMuaGFzaE1vZGUpIHtcbiAgICB0aGlzW2hhc2hNb2RlXSA9IHRoaXMuX2ZpbmFsT3JEaWdlc3RcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmZpbmFsID0gdGhpcy5fZmluYWxPckRpZ2VzdFxuICB9XG4gIHRoaXMuX2RlY29kZXIgPSBudWxsXG4gIHRoaXMuX2VuY29kaW5nID0gbnVsbFxufVxuQ2lwaGVyQmFzZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEsIGlucHV0RW5jLCBvdXRwdXRFbmMpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIGRhdGEgPSBuZXcgQnVmZmVyKGRhdGEsIGlucHV0RW5jKVxuICB9XG4gIHZhciBvdXREYXRhID0gdGhpcy5fdXBkYXRlKGRhdGEpXG4gIGlmICh0aGlzLmhhc2hNb2RlKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuICBpZiAob3V0cHV0RW5jKSB7XG4gICAgb3V0RGF0YSA9IHRoaXMuX3RvU3RyaW5nKG91dERhdGEsIG91dHB1dEVuYylcbiAgfVxuICByZXR1cm4gb3V0RGF0YVxufVxuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZyA9IGZ1bmN0aW9uICgpIHt9XG5cbkNpcGhlckJhc2UucHJvdG90eXBlLmdldEF1dGhUYWcgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcigndHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZScpXG59XG5cbkNpcGhlckJhc2UucHJvdG90eXBlLnNldEF1dGhUYWcgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IG5ldyBFcnJvcigndHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZScpXG59XG5cbkNpcGhlckJhc2UucHJvdG90eXBlLnNldEFBRCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCd0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZScpXG59XG5cbkNpcGhlckJhc2UucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoZGF0YSwgXywgbmV4dCkge1xuICB2YXIgZXJyXG4gIHRyeSB7XG4gICAgaWYgKHRoaXMuaGFzaE1vZGUpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZShkYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2godGhpcy5fdXBkYXRlKGRhdGEpKVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGVyciA9IGVcbiAgfSBmaW5hbGx5IHtcbiAgICBuZXh0KGVycilcbiAgfVxufVxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGRvbmUpIHtcbiAgdmFyIGVyclxuICB0cnkge1xuICAgIHRoaXMucHVzaCh0aGlzLl9maW5hbCgpKVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyID0gZVxuICB9IGZpbmFsbHkge1xuICAgIGRvbmUoZXJyKVxuICB9XG59XG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdCA9IGZ1bmN0aW9uIChvdXRwdXRFbmMpIHtcbiAgdmFyIG91dERhdGEgPSB0aGlzLl9maW5hbCgpIHx8IG5ldyBCdWZmZXIoJycpXG4gIGlmIChvdXRwdXRFbmMpIHtcbiAgICBvdXREYXRhID0gdGhpcy5fdG9TdHJpbmcob3V0RGF0YSwgb3V0cHV0RW5jLCB0cnVlKVxuICB9XG4gIHJldHVybiBvdXREYXRhXG59XG5cbkNpcGhlckJhc2UucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jLCBmaW4pIHtcbiAgaWYgKCF0aGlzLl9kZWNvZGVyKSB7XG4gICAgdGhpcy5fZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYylcbiAgICB0aGlzLl9lbmNvZGluZyA9IGVuY1xuICB9XG4gIGlmICh0aGlzLl9lbmNvZGluZyAhPT0gZW5jKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjYW5cXCd0IHN3aXRjaCBlbmNvZGluZ3MnKVxuICB9XG4gIHZhciBvdXQgPSB0aGlzLl9kZWNvZGVyLndyaXRlKHZhbHVlKVxuICBpZiAoZmluKSB7XG4gICAgb3V0ICs9IHRoaXMuX2RlY29kZXIuZW5kKClcbiAgfVxuICByZXR1cm4gb3V0XG59XG4iLCJcbi8qKlxuICogc2xpY2UoKSByZWZlcmVuY2UuXG4gKi9cblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vKipcbiAqIEV4cG9zZSBgY29gLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gY29bJ2RlZmF1bHQnXSA9IGNvLmNvID0gY287XG5cbi8qKlxuICogV3JhcCB0aGUgZ2l2ZW4gZ2VuZXJhdG9yIGBmbmAgaW50byBhXG4gKiBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwcm9taXNlLlxuICogVGhpcyBpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHRoYXRcbiAqIGV2ZXJ5IGBjbygpYCBjYWxsIGRvZXNuJ3QgY3JlYXRlIGEgbmV3LFxuICogdW5uZWNlc3NhcnkgY2xvc3VyZS5cbiAqXG4gKiBAcGFyYW0ge0dlbmVyYXRvckZ1bmN0aW9ufSBmblxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmNvLndyYXAgPSBmdW5jdGlvbiAoZm4pIHtcbiAgY3JlYXRlUHJvbWlzZS5fX2dlbmVyYXRvckZ1bmN0aW9uX18gPSBmbjtcbiAgcmV0dXJuIGNyZWF0ZVByb21pc2U7XG4gIGZ1bmN0aW9uIGNyZWF0ZVByb21pc2UoKSB7XG4gICAgcmV0dXJuIGNvLmNhbGwodGhpcywgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cbn07XG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIG9yIGEgZ2VuZXJhdG9yXG4gKiBhbmQgcmV0dXJuIGEgcHJvbWlzZS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gY28oZ2VuKSB7XG4gIHZhciBjdHggPSB0aGlzO1xuICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKVxuXG4gIC8vIHdlIHdyYXAgZXZlcnl0aGluZyBpbiBhIHByb21pc2UgdG8gYXZvaWQgcHJvbWlzZSBjaGFpbmluZyxcbiAgLy8gd2hpY2ggbGVhZHMgdG8gbWVtb3J5IGxlYWsgZXJyb3JzLlxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RqL2NvL2lzc3Vlcy8xODBcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGlmICh0eXBlb2YgZ2VuID09PSAnZnVuY3Rpb24nKSBnZW4gPSBnZW4uYXBwbHkoY3R4LCBhcmdzKTtcbiAgICBpZiAoIWdlbiB8fCB0eXBlb2YgZ2VuLm5leHQgIT09ICdmdW5jdGlvbicpIHJldHVybiByZXNvbHZlKGdlbik7XG5cbiAgICBvbkZ1bGZpbGxlZCgpO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtNaXhlZH0gcmVzXG4gICAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICAgKiBAYXBpIHByaXZhdGVcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIG9uRnVsZmlsbGVkKHJlcykge1xuICAgICAgdmFyIHJldDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldCA9IGdlbi5uZXh0KHJlcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICB9XG4gICAgICBuZXh0KHJldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtFcnJvcn0gZXJyXG4gICAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICAgKiBAYXBpIHByaXZhdGVcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIG9uUmVqZWN0ZWQoZXJyKSB7XG4gICAgICB2YXIgcmV0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0ID0gZ2VuLnRocm93KGVycik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZSk7XG4gICAgICB9XG4gICAgICBuZXh0KHJldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBuZXh0IHZhbHVlIGluIHRoZSBnZW5lcmF0b3IsXG4gICAgICogcmV0dXJuIGEgcHJvbWlzZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXRcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgICAqIEBhcGkgcHJpdmF0ZVxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gbmV4dChyZXQpIHtcbiAgICAgIGlmIChyZXQuZG9uZSkgcmV0dXJuIHJlc29sdmUocmV0LnZhbHVlKTtcbiAgICAgIHZhciB2YWx1ZSA9IHRvUHJvbWlzZS5jYWxsKGN0eCwgcmV0LnZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZSAmJiBpc1Byb21pc2UodmFsdWUpKSByZXR1cm4gdmFsdWUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICByZXR1cm4gb25SZWplY3RlZChuZXcgVHlwZUVycm9yKCdZb3UgbWF5IG9ubHkgeWllbGQgYSBmdW5jdGlvbiwgcHJvbWlzZSwgZ2VuZXJhdG9yLCBhcnJheSwgb3Igb2JqZWN0LCAnXG4gICAgICAgICsgJ2J1dCB0aGUgZm9sbG93aW5nIG9iamVjdCB3YXMgcGFzc2VkOiBcIicgKyBTdHJpbmcocmV0LnZhbHVlKSArICdcIicpKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBgeWllbGRgZWQgdmFsdWUgaW50byBhIHByb21pc2UuXG4gKlxuICogQHBhcmFtIHtNaXhlZH0gb2JqXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gdG9Qcm9taXNlKG9iaikge1xuICBpZiAoIW9iaikgcmV0dXJuIG9iajtcbiAgaWYgKGlzUHJvbWlzZShvYmopKSByZXR1cm4gb2JqO1xuICBpZiAoaXNHZW5lcmF0b3JGdW5jdGlvbihvYmopIHx8IGlzR2VuZXJhdG9yKG9iaikpIHJldHVybiBjby5jYWxsKHRoaXMsIG9iaik7XG4gIGlmICgnZnVuY3Rpb24nID09IHR5cGVvZiBvYmopIHJldHVybiB0aHVua1RvUHJvbWlzZS5jYWxsKHRoaXMsIG9iaik7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBhcnJheVRvUHJvbWlzZS5jYWxsKHRoaXMsIG9iaik7XG4gIGlmIChpc09iamVjdChvYmopKSByZXR1cm4gb2JqZWN0VG9Qcm9taXNlLmNhbGwodGhpcywgb2JqKTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgdGh1bmsgdG8gYSBwcm9taXNlLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259XG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gdGh1bmtUb1Byb21pc2UoZm4pIHtcbiAgdmFyIGN0eCA9IHRoaXM7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZm4uY2FsbChjdHgsIGZ1bmN0aW9uIChlcnIsIHJlcykge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSByZXMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICByZXNvbHZlKHJlcyk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgb2YgXCJ5aWVsZGFibGVzXCIgdG8gYSBwcm9taXNlLlxuICogVXNlcyBgUHJvbWlzZS5hbGwoKWAgaW50ZXJuYWxseS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBvYmpcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBhcnJheVRvUHJvbWlzZShvYmopIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKG9iai5tYXAodG9Qcm9taXNlLCB0aGlzKSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBvYmplY3Qgb2YgXCJ5aWVsZGFibGVzXCIgdG8gYSBwcm9taXNlLlxuICogVXNlcyBgUHJvbWlzZS5hbGwoKWAgaW50ZXJuYWxseS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gb2JqZWN0VG9Qcm9taXNlKG9iail7XG4gIHZhciByZXN1bHRzID0gbmV3IG9iai5jb25zdHJ1Y3RvcigpO1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIHZhciBwcm9taXNlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICB2YXIgcHJvbWlzZSA9IHRvUHJvbWlzZS5jYWxsKHRoaXMsIG9ialtrZXldKTtcbiAgICBpZiAocHJvbWlzZSAmJiBpc1Byb21pc2UocHJvbWlzZSkpIGRlZmVyKHByb21pc2UsIGtleSk7XG4gICAgZWxzZSByZXN1bHRzW2tleV0gPSBvYmpba2V5XTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9KTtcblxuICBmdW5jdGlvbiBkZWZlcihwcm9taXNlLCBrZXkpIHtcbiAgICAvLyBwcmVkZWZpbmUgdGhlIGtleSBpbiB0aGUgcmVzdWx0XG4gICAgcmVzdWx0c1trZXldID0gdW5kZWZpbmVkO1xuICAgIHByb21pc2VzLnB1c2gocHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIHJlc3VsdHNba2V5XSA9IHJlcztcbiAgICB9KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhIHByb21pc2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmopIHtcbiAgcmV0dXJuICdmdW5jdGlvbicgPT0gdHlwZW9mIG9iai50aGVuO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBvYmpgIGlzIGEgZ2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IG9ialxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGlzR2VuZXJhdG9yKG9iaikge1xuICByZXR1cm4gJ2Z1bmN0aW9uJyA9PSB0eXBlb2Ygb2JqLm5leHQgJiYgJ2Z1bmN0aW9uJyA9PSB0eXBlb2Ygb2JqLnRocm93O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGBvYmpgIGlzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IG9ialxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpc0dlbmVyYXRvckZ1bmN0aW9uKG9iaikge1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmouY29uc3RydWN0b3I7XG4gIGlmICghY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcbiAgaWYgKCdHZW5lcmF0b3JGdW5jdGlvbicgPT09IGNvbnN0cnVjdG9yLm5hbWUgfHwgJ0dlbmVyYXRvckZ1bmN0aW9uJyA9PT0gY29uc3RydWN0b3IuZGlzcGxheU5hbWUpIHJldHVybiB0cnVlO1xuICByZXR1cm4gaXNHZW5lcmF0b3IoY29uc3RydWN0b3IucHJvdG90eXBlKTtcbn1cblxuLyoqXG4gKiBDaGVjayBmb3IgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gT2JqZWN0ID09IHZhbC5jb25zdHJ1Y3Rvcjtcbn1cbiIsInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBEZWxheWVkU3RyZWFtID0gcmVxdWlyZSgnZGVsYXllZC1zdHJlYW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb21iaW5lZFN0cmVhbTtcbmZ1bmN0aW9uIENvbWJpbmVkU3RyZWFtKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICB0aGlzLmRhdGFTaXplID0gMDtcbiAgdGhpcy5tYXhEYXRhU2l6ZSA9IDIgKiAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbXMgPSB0cnVlO1xuXG4gIHRoaXMuX3JlbGVhc2VkID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG59XG51dGlsLmluaGVyaXRzKENvbWJpbmVkU3RyZWFtLCBTdHJlYW0pO1xuXG5Db21iaW5lZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gIHZhciBjb21iaW5lZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgY29tYmluZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZFN0cmVhbTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZSA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICByZXR1cm4gKHR5cGVvZiBzdHJlYW0gIT09ICdmdW5jdGlvbicpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdzdHJpbmcnKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnYm9vbGVhbicpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdudW1iZXInKVxuICAgICYmICghQnVmZmVyLmlzQnVmZmVyKHN0cmVhbSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG5cbiAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgIGlmICghKHN0cmVhbSBpbnN0YW5jZW9mIERlbGF5ZWRTdHJlYW0pKSB7XG4gICAgICB2YXIgbmV3U3RyZWFtID0gRGVsYXllZFN0cmVhbS5jcmVhdGUoc3RyZWFtLCB7XG4gICAgICAgIG1heERhdGFTaXplOiBJbmZpbml0eSxcbiAgICAgICAgcGF1c2VTdHJlYW06IHRoaXMucGF1c2VTdHJlYW1zLFxuICAgICAgfSk7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgc3RyZWFtID0gbmV3U3RyZWFtO1xuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZUVycm9ycyhzdHJlYW0pO1xuXG4gICAgaWYgKHRoaXMucGF1c2VTdHJlYW1zKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLl9zdHJlYW1zLnB1c2goc3RyZWFtKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKGRlc3QsIG9wdGlvbnMpIHtcbiAgU3RyZWFtLnByb3RvdHlwZS5waXBlLmNhbGwodGhpcywgZGVzdCwgb3B0aW9ucyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiBkZXN0O1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9nZXROZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xuICB2YXIgc3RyZWFtID0gdGhpcy5fc3RyZWFtcy5zaGlmdCgpO1xuXG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0gPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aGlzLmVuZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZ2V0U3RyZWFtID0gc3RyZWFtO1xuICBnZXRTdHJlYW0oZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuICAgIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIHRoaXMuX2NoZWNrRGF0YVNpemUuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcbiAgICB9XG5cbiAgICB0aGlzLl9waXBlTmV4dChzdHJlYW0pO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9waXBlTmV4dCA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gc3RyZWFtO1xuXG4gIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgIHN0cmVhbS5vbignZW5kJywgdGhpcy5fZ2V0TmV4dC5iaW5kKHRoaXMpKTtcbiAgICBzdHJlYW0ucGlwZSh0aGlzLCB7ZW5kOiBmYWxzZX0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IHN0cmVhbTtcbiAgdGhpcy53cml0ZSh2YWx1ZSk7XG4gIHRoaXMuX2dldE5leHQoKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5faGFuZGxlRXJyb3JzID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIHNlbGYuX2VtaXRFcnJvcihlcnIpO1xuICB9KTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgdGhpcy5lbWl0KCdkYXRhJywgZGF0YSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmKHRoaXMucGF1c2VTdHJlYW1zICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdHlwZW9mKHRoaXMuX2N1cnJlbnRTdHJlYW0ucGF1c2UpID09ICdmdW5jdGlvbicpIHRoaXMuX2N1cnJlbnRTdHJlYW0ucGF1c2UoKTtcbiAgdGhpcy5lbWl0KCdwYXVzZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5fcmVsZWFzZWQgPSB0cnVlO1xuICAgIHRoaXMud3JpdGFibGUgPSB0cnVlO1xuICAgIHRoaXMuX2dldE5leHQoKTtcbiAgfVxuXG4gIGlmKHRoaXMucGF1c2VTdHJlYW1zICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdHlwZW9mKHRoaXMuX2N1cnJlbnRTdHJlYW0ucmVzdW1lKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSgpO1xuICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2VuZCcpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdjbG9zZScpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2NoZWNrRGF0YVNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdXBkYXRlRGF0YVNpemUoKTtcbiAgaWYgKHRoaXMuZGF0YVNpemUgPD0gdGhpcy5tYXhEYXRhU2l6ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJztcbiAgdGhpcy5fZW1pdEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3VwZGF0ZURhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fc3RyZWFtcy5mb3JFYWNoKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIGlmICghc3RyZWFtLmRhdGFTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VsZi5kYXRhU2l6ZSArPSBzdHJlYW0uZGF0YVNpemU7XG4gIH0pO1xuXG4gIGlmICh0aGlzLl9jdXJyZW50U3RyZWFtICYmIHRoaXMuX2N1cnJlbnRTdHJlYW0uZGF0YVNpemUpIHtcbiAgICB0aGlzLmRhdGFTaXplICs9IHRoaXMuX2N1cnJlbnRTdHJlYW0uZGF0YVNpemU7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZW1pdEVycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB0b2tlblJlZ2V4cCA9IC9eWyEjJCUmJyorXFwtLl5fYHx+MC05QS1aYS16XSskLztcbmNvbnN0IGNvbnRlbnRUeXBlUmVnZXhwID0gL14oLio/KVxcLyguKj8pKFtcXHQgXSo7LiopPyQvO1xuY29uc3QgcGFyYW1ldGVyVmFsdWVSZWdleHAgPSAvXiguKj8pPSguKikkLztcbmNvbnN0IHF1b3RlZFN0cmluZ1JlZ2V4cCA9IC9cIig/OltcXHQgXFx4MjFcXHgyMy1cXHg1QlxceDVELVxceDdFXFx4ODAtXFx4RkZdfCg/OlxcXFxbXFx0IFxceDIxLVxceDdFXFx4ODAtXFx4RkZdKSkqXCIvO1xuY29uc3QgcWVzY1JlZ0V4cCA9IC9cXFxcKFtcXHQgXFx4MjEtXFx4N0VcXHg4MC1cXHhGRl0pL2c7XG5jb25zdCBxdW90ZVJlZ0V4cCA9IC8oW1xcXFxcIl0pL2c7XG5cbmZ1bmN0aW9uIHFzdHJpbmcodmFsKSB7XG4gIGlmICh0b2tlblJlZ2V4cC50ZXN0KHZhbCkpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHJldHVybiBcIlxcXCJcIiArIHZhbC5yZXBsYWNlKHF1b3RlUmVnRXhwLCBcIlxcXFwkMVwiKSArIFwiXFxcIlwiO1xufVxuXG5jbGFzcyBDb250ZW50VHlwZSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIHN1YnR5cGUsIHBhcmFtZXRlckxpc3QpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuc3VidHlwZSA9IHN1YnR5cGU7XG4gICAgdGhpcy5wYXJhbWV0ZXJMaXN0ID0gcGFyYW1ldGVyTGlzdDtcbiAgfVxuICBnZXQoa2V5KSB7XG4gICAga2V5ID0gU3RyaW5nKGtleSkudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IHBhcmFtID0gdGhpcy5wYXJhbWV0ZXJMaXN0LnJldmVyc2UoKS5maW5kKHYgPT4gdi5rZXkgPT09IGtleSk7XG4gICAgcmV0dXJuIHBhcmFtID8gcGFyYW0udmFsdWUgOiB1bmRlZmluZWQ7XG4gIH1cbiAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICBrZXkgPSBTdHJpbmcoa2V5KS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblxuICAgIHRoaXMucGFyYW1ldGVyTGlzdCA9IHRoaXMucGFyYW1ldGVyTGlzdC5maWx0ZXIodiA9PiB2LmtleSAhPT0ga2V5KTtcbiAgICB0aGlzLnBhcmFtZXRlckxpc3QucHVzaCh7XG4gICAgICBzZXBhcmF0b3I6IFwiO1wiLFxuICAgICAga2V5LFxuICAgICAgdmFsdWVcbiAgICB9KTtcbiAgfVxuICBpc1hNTCgpIHtcbiAgICByZXR1cm4gKHRoaXMuc3VidHlwZSA9PT0gXCJ4bWxcIiAmJiAodGhpcy50eXBlID09PSBcInRleHRcIiB8fCB0aGlzLnR5cGUgPT09IFwiYXBwbGljYXRpb25cIikpIHx8XG4gICAgICAgICAgIHRoaXMuc3VidHlwZS5lbmRzV2l0aChcIit4bWxcIik7XG4gIH1cbiAgaXNIVE1MKCkge1xuICAgIHJldHVybiB0aGlzLnN1YnR5cGUgPT09IFwiaHRtbFwiICYmIHRoaXMudHlwZSA9PT0gXCJ0ZXh0XCI7XG4gIH1cbiAgaXNUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFwidGV4dFwiO1xuICB9XG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgKyBcIi9cIiArIHRoaXMuc3VidHlwZSArXG4gICAgICB0aGlzLnBhcmFtZXRlckxpc3QubWFwKHYgPT4gdi5zZXBhcmF0b3IgKyAodi5rZXkgPyB2LmtleSArIFwiPVwiICsgcXN0cmluZyh2LnZhbHVlKSA6IHYudmFsdWUpKVxuICAgICAgLmpvaW4oXCJcIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUNvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKSB7XG4gIGlmICghY29udGVudFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjb250ZW50VHlwZU1hdGNoID0gY29udGVudFR5cGVSZWdleHAuZXhlYyhjb250ZW50VHlwZSk7XG4gIGlmIChjb250ZW50VHlwZU1hdGNoKSB7XG4gICAgY29uc3QgdHlwZSA9IGNvbnRlbnRUeXBlTWF0Y2hbMV07XG4gICAgY29uc3Qgc3VidHlwZSA9IGNvbnRlbnRUeXBlTWF0Y2hbMl07XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IGNvbnRlbnRUeXBlTWF0Y2hbM107XG4gICAgaWYgKHRva2VuUmVnZXhwLnRlc3QodHlwZSkgJiYgdG9rZW5SZWdleHAudGVzdChzdWJ0eXBlKSkge1xuICAgICAgY29uc3QgcGFyYW1ldGVyUGF0dGVybiA9IC8oW1xcdCBdKjtbXFx0IF0qKShbXlxcdCA7XSopL2c7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0ID0gW107XG4gICAgICBsZXQgbWF0Y2g7XG4gICAgICB3aGlsZSAoKG1hdGNoID0gcGFyYW1ldGVyUGF0dGVybi5leGVjKHBhcmFtZXRlcnMpKSkge1xuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBtYXRjaFsxXTtcbiAgICAgICAgY29uc3Qga2V5VmFsdWUgPSBwYXJhbWV0ZXJWYWx1ZVJlZ2V4cC5leGVjKG1hdGNoWzJdKTtcbiAgICAgICAgbGV0IGtleTtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBpZiAoa2V5VmFsdWUgJiYgdG9rZW5SZWdleHAudGVzdChrZXlWYWx1ZVsxXSkpIHtcbiAgICAgICAgICBrZXkgPSBrZXlWYWx1ZVsxXTtcbiAgICAgICAgICBpZiAocXVvdGVkU3RyaW5nUmVnZXhwLnRlc3Qoa2V5VmFsdWVbMl0pKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGtleVZhbHVlWzJdXG4gICAgICAgICAgICAgIC5zdWJzdHIoMSwga2V5VmFsdWVbMl0ubGVuZ3RoIC0gMilcbiAgICAgICAgICAgICAgLnJlcGxhY2UocWVzY1JlZ0V4cCwgXCIkMVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBrZXlWYWx1ZVsyXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIHBhcmFtZXRlckxpc3QucHVzaCh7XG4gICAgICAgICAgICBzZXBhcmF0b3IsXG4gICAgICAgICAgICBrZXk6IGtleS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJhbWV0ZXJMaXN0LnB1c2goe1xuICAgICAgICAgICAgc2VwYXJhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IG1hdGNoWzJdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgQ29udGVudFR5cGUodHlwZS50b0xvd2VyQ2FzZSgpLCBzdWJ0eXBlLnRvTG93ZXJDYXNlKCksIHBhcmFtZXRlckxpc3QpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cblxuZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpO1xuICB9XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gQnVmZmVyLmlzQnVmZmVyO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG4iLCJ2YXIgZWxsaXB0aWMgPSByZXF1aXJlKCdlbGxpcHRpYycpO1xudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVFQ0RIKGN1cnZlKSB7XG5cdHJldHVybiBuZXcgRUNESChjdXJ2ZSk7XG59O1xuXG52YXIgYWxpYXNlcyA9IHtcblx0c2VjcDI1NmsxOiB7XG5cdFx0bmFtZTogJ3NlY3AyNTZrMScsXG5cdFx0Ynl0ZUxlbmd0aDogMzJcblx0fSxcblx0c2VjcDIyNHIxOiB7XG5cdFx0bmFtZTogJ3AyMjQnLFxuXHRcdGJ5dGVMZW5ndGg6IDI4XG5cdH0sXG5cdHByaW1lMjU2djE6IHtcblx0XHRuYW1lOiAncDI1NicsXG5cdFx0Ynl0ZUxlbmd0aDogMzJcblx0fSxcblx0cHJpbWUxOTJ2MToge1xuXHRcdG5hbWU6ICdwMTkyJyxcblx0XHRieXRlTGVuZ3RoOiAyNFxuXHR9LFxuXHRlZDI1NTE5OiB7XG5cdFx0bmFtZTogJ2VkMjU1MTknLFxuXHRcdGJ5dGVMZW5ndGg6IDMyXG5cdH0sXG5cdHNlY3AzODRyMToge1xuXHRcdG5hbWU6ICdwMzg0Jyxcblx0XHRieXRlTGVuZ3RoOiA0OFxuXHR9LFxuXHRzZWNwNTIxcjE6IHtcblx0XHRuYW1lOiAncDUyMScsXG5cdFx0Ynl0ZUxlbmd0aDogNjZcblx0fVxufTtcblxuYWxpYXNlcy5wMjI0ID0gYWxpYXNlcy5zZWNwMjI0cjE7XG5hbGlhc2VzLnAyNTYgPSBhbGlhc2VzLnNlY3AyNTZyMSA9IGFsaWFzZXMucHJpbWUyNTZ2MTtcbmFsaWFzZXMucDE5MiA9IGFsaWFzZXMuc2VjcDE5MnIxID0gYWxpYXNlcy5wcmltZTE5MnYxO1xuYWxpYXNlcy5wMzg0ID0gYWxpYXNlcy5zZWNwMzg0cjE7XG5hbGlhc2VzLnA1MjEgPSBhbGlhc2VzLnNlY3A1MjFyMTtcblxuZnVuY3Rpb24gRUNESChjdXJ2ZSkge1xuXHR0aGlzLmN1cnZlVHlwZSA9IGFsaWFzZXNbY3VydmVdO1xuXHRpZiAoIXRoaXMuY3VydmVUeXBlICkge1xuXHRcdHRoaXMuY3VydmVUeXBlID0ge1xuXHRcdFx0bmFtZTogY3VydmVcblx0XHR9O1xuXHR9XG5cdHRoaXMuY3VydmUgPSBuZXcgZWxsaXB0aWMuZWModGhpcy5jdXJ2ZVR5cGUubmFtZSk7XG5cdHRoaXMua2V5cyA9IHZvaWQgMDtcbn1cblxuRUNESC5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzID0gZnVuY3Rpb24gKGVuYywgZm9ybWF0KSB7XG5cdHRoaXMua2V5cyA9IHRoaXMuY3VydmUuZ2VuS2V5UGFpcigpO1xuXHRyZXR1cm4gdGhpcy5nZXRQdWJsaWNLZXkoZW5jLCBmb3JtYXQpO1xufTtcblxuRUNESC5wcm90b3R5cGUuY29tcHV0ZVNlY3JldCA9IGZ1bmN0aW9uIChvdGhlciwgaW5lbmMsIGVuYykge1xuXHRpbmVuYyA9IGluZW5jIHx8ICd1dGY4Jztcblx0aWYgKCFCdWZmZXIuaXNCdWZmZXIob3RoZXIpKSB7XG5cdFx0b3RoZXIgPSBuZXcgQnVmZmVyKG90aGVyLCBpbmVuYyk7XG5cdH1cblx0dmFyIG90aGVyUHViID0gdGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKG90aGVyKS5nZXRQdWJsaWMoKTtcblx0dmFyIG91dCA9IG90aGVyUHViLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCk7XG5cdHJldHVybiBmb3JtYXRSZXR1cm5WYWx1ZShvdXQsIGVuYywgdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCk7XG59O1xuXG5FQ0RILnByb3RvdHlwZS5nZXRQdWJsaWNLZXkgPSBmdW5jdGlvbiAoZW5jLCBmb3JtYXQpIHtcblx0dmFyIGtleSA9IHRoaXMua2V5cy5nZXRQdWJsaWMoZm9ybWF0ID09PSAnY29tcHJlc3NlZCcsIHRydWUpO1xuXHRpZiAoZm9ybWF0ID09PSAnaHlicmlkJykge1xuXHRcdGlmIChrZXlba2V5Lmxlbmd0aCAtIDFdICUgMikge1xuXHRcdFx0a2V5WzBdID0gNztcblx0XHR9IGVsc2Uge1xuXHRcdFx0a2V5IFswXSA9IDY7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmb3JtYXRSZXR1cm5WYWx1ZShrZXksIGVuYyk7XG59O1xuXG5FQ0RILnByb3RvdHlwZS5nZXRQcml2YXRlS2V5ID0gZnVuY3Rpb24gKGVuYykge1xuXHRyZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUodGhpcy5rZXlzLmdldFByaXZhdGUoKSwgZW5jKTtcbn07XG5cbkVDREgucHJvdG90eXBlLnNldFB1YmxpY0tleSA9IGZ1bmN0aW9uIChwdWIsIGVuYykge1xuXHRlbmMgPSBlbmMgfHwgJ3V0ZjgnO1xuXHRpZiAoIUJ1ZmZlci5pc0J1ZmZlcihwdWIpKSB7XG5cdFx0cHViID0gbmV3IEJ1ZmZlcihwdWIsIGVuYyk7XG5cdH1cblx0dGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMocHViKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FQ0RILnByb3RvdHlwZS5zZXRQcml2YXRlS2V5ID0gZnVuY3Rpb24gKHByaXYsIGVuYykge1xuXHRlbmMgPSBlbmMgfHwgJ3V0ZjgnO1xuXHRpZiAoIUJ1ZmZlci5pc0J1ZmZlcihwcml2KSkge1xuXHRcdHByaXYgPSBuZXcgQnVmZmVyKHByaXYsIGVuYyk7XG5cdH1cblx0dmFyIF9wcml2ID0gbmV3IEJOKHByaXYpO1xuXHRfcHJpdiA9IF9wcml2LnRvU3RyaW5nKDE2KTtcblx0dGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKF9wcml2KTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmb3JtYXRSZXR1cm5WYWx1ZShibiwgZW5jLCBsZW4pIHtcblx0aWYgKCFBcnJheS5pc0FycmF5KGJuKSkge1xuXHRcdGJuID0gYm4udG9BcnJheSgpO1xuXHR9XG5cdHZhciBidWYgPSBuZXcgQnVmZmVyKGJuKTtcblx0aWYgKGxlbiAmJiBidWYubGVuZ3RoIDwgbGVuKSB7XG5cdFx0dmFyIHplcm9zID0gbmV3IEJ1ZmZlcihsZW4gLSBidWYubGVuZ3RoKTtcblx0XHR6ZXJvcy5maWxsKDApO1xuXHRcdGJ1ZiA9IEJ1ZmZlci5jb25jYXQoW3plcm9zLCBidWZdKTtcblx0fVxuXHRpZiAoIWVuYykge1xuXHRcdHJldHVybiBidWY7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGJ1Zi50b1N0cmluZyhlbmMpO1xuXHR9XG59XG4iLCIndXNlIHN0cmljdCdcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBtZDUgPSByZXF1aXJlKCcuL21kNScpXG52YXIgUklQRU1EMTYwID0gcmVxdWlyZSgncmlwZW1kMTYwJylcbnZhciBzaGEgPSByZXF1aXJlKCdzaGEuanMnKVxuXG52YXIgQmFzZSA9IHJlcXVpcmUoJ2NpcGhlci1iYXNlJylcblxuZnVuY3Rpb24gSGFzaE5vQ29uc3RydWN0b3IgKGhhc2gpIHtcbiAgQmFzZS5jYWxsKHRoaXMsICdkaWdlc3QnKVxuXG4gIHRoaXMuX2hhc2ggPSBoYXNoXG4gIHRoaXMuYnVmZmVycyA9IFtdXG59XG5cbmluaGVyaXRzKEhhc2hOb0NvbnN0cnVjdG9yLCBCYXNlKVxuXG5IYXNoTm9Db25zdHJ1Y3Rvci5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuYnVmZmVycy5wdXNoKGRhdGEpXG59XG5cbkhhc2hOb0NvbnN0cnVjdG9yLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBidWYgPSBCdWZmZXIuY29uY2F0KHRoaXMuYnVmZmVycylcbiAgdmFyIHIgPSB0aGlzLl9oYXNoKGJ1ZilcbiAgdGhpcy5idWZmZXJzID0gbnVsbFxuXG4gIHJldHVybiByXG59XG5cbmZ1bmN0aW9uIEhhc2ggKGhhc2gpIHtcbiAgQmFzZS5jYWxsKHRoaXMsICdkaWdlc3QnKVxuXG4gIHRoaXMuX2hhc2ggPSBoYXNoXG59XG5cbmluaGVyaXRzKEhhc2gsIEJhc2UpXG5cbkhhc2gucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKVxufVxuXG5IYXNoLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlSGFzaCAoYWxnKSB7XG4gIGFsZyA9IGFsZy50b0xvd2VyQ2FzZSgpXG4gIGlmIChhbGcgPT09ICdtZDUnKSByZXR1cm4gbmV3IEhhc2hOb0NvbnN0cnVjdG9yKG1kNSlcbiAgaWYgKGFsZyA9PT0gJ3JtZDE2MCcgfHwgYWxnID09PSAncmlwZW1kMTYwJykgcmV0dXJuIG5ldyBIYXNoKG5ldyBSSVBFTUQxNjAoKSlcblxuICByZXR1cm4gbmV3IEhhc2goc2hhKGFsZykpXG59XG4iLCIndXNlIHN0cmljdCdcbnZhciBpbnRTaXplID0gNFxudmFyIHplcm9CdWZmZXIgPSBuZXcgQnVmZmVyKGludFNpemUpXG56ZXJvQnVmZmVyLmZpbGwoMClcblxudmFyIGNoYXJTaXplID0gOFxudmFyIGhhc2hTaXplID0gMTZcblxuZnVuY3Rpb24gdG9BcnJheSAoYnVmKSB7XG4gIGlmICgoYnVmLmxlbmd0aCAlIGludFNpemUpICE9PSAwKSB7XG4gICAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGggKyAoaW50U2l6ZSAtIChidWYubGVuZ3RoICUgaW50U2l6ZSkpXG4gICAgYnVmID0gQnVmZmVyLmNvbmNhdChbYnVmLCB6ZXJvQnVmZmVyXSwgbGVuKVxuICB9XG5cbiAgdmFyIGFyciA9IG5ldyBBcnJheShidWYubGVuZ3RoID4+PiAyKVxuICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCBidWYubGVuZ3RoOyBpICs9IGludFNpemUsIGorKykge1xuICAgIGFycltqXSA9IGJ1Zi5yZWFkSW50MzJMRShpKVxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc2ggKGJ1ZiwgZm4pIHtcbiAgdmFyIGFyciA9IGZuKHRvQXJyYXkoYnVmKSwgYnVmLmxlbmd0aCAqIGNoYXJTaXplKVxuICBidWYgPSBuZXcgQnVmZmVyKGhhc2hTaXplKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGJ1Zi53cml0ZUludDMyTEUoYXJyW2ldLCBpIDw8IDIsIHRydWUpXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuIiwiJ3VzZSBzdHJpY3QnXG4vKlxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZVxuICogRGlnZXN0IEFsZ29yaXRobSwgYXMgZGVmaW5lZCBpbiBSRkMgMTMyMS5cbiAqIFZlcnNpb24gMi4xIENvcHlyaWdodCAoQykgUGF1bCBKb2huc3RvbiAxOTk5IC0gMjAwMi5cbiAqIE90aGVyIGNvbnRyaWJ1dG9yczogR3JlZyBIb2x0LCBBbmRyZXcgS2VwZXJ0LCBZZG5hciwgTG9zdGluZXRcbiAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgTGljZW5zZVxuICogU2VlIGh0dHA6Ly9wYWpob21lLm9yZy51ay9jcnlwdC9tZDUgZm9yIG1vcmUgaW5mby5cbiAqL1xuXG52YXIgbWFrZUhhc2ggPSByZXF1aXJlKCcuL21ha2UtaGFzaCcpXG5cbi8qXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGNvcmVfbWQ1ICh4LCBsZW4pIHtcbiAgLyogYXBwZW5kIHBhZGRpbmcgKi9cbiAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCAoKGxlbikgJSAzMilcbiAgeFsoKChsZW4gKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gbGVuXG5cbiAgdmFyIGEgPSAxNzMyNTg0MTkzXG4gIHZhciBiID0gLTI3MTczMzg3OVxuICB2YXIgYyA9IC0xNzMyNTg0MTk0XG4gIHZhciBkID0gMjcxNzMzODc4XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNikge1xuICAgIHZhciBvbGRhID0gYVxuICAgIHZhciBvbGRiID0gYlxuICAgIHZhciBvbGRjID0gY1xuICAgIHZhciBvbGRkID0gZFxuXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyAwXSwgNywgLTY4MDg3NjkzNilcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSArIDFdLCAxMiwgLTM4OTU2NDU4NilcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNywgNjA2MTA1ODE5KVxuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpICsgM10sIDIyLCAtMTA0NDUyNTMzMClcbiAgICBhID0gbWQ1X2ZmKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA3LCAtMTc2NDE4ODk3KVxuICAgIGQgPSBtZDVfZmYoZCwgYSwgYiwgYywgeFtpICsgNV0sIDEyLCAxMjAwMDgwNDI2KVxuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE3LCAtMTQ3MzIzMTM0MSlcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArIDddLCAyMiwgLTQ1NzA1OTgzKVxuICAgIGEgPSBtZDVfZmYoYSwgYiwgYywgZCwgeFtpICsgOF0sIDcsIDE3NzAwMzU0MTYpXG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyA5XSwgMTIsIC0xOTU4NDE0NDE3KVxuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNywgLTQyMDYzKVxuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpICsgMTFdLCAyMiwgLTE5OTA0MDQxNjIpXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDcsIDE4MDQ2MDM2ODIpXG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2kgKyAxM10sIDEyLCAtNDAzNDExMDEpXG4gICAgYyA9IG1kNV9mZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MClcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsIDEyMzY1MzUzMjkpXG5cbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA1LCAtMTY1Nzk2NTEwKVxuICAgIGQgPSBtZDVfZ2coZCwgYSwgYiwgYywgeFtpICsgNl0sIDksIC0xMDY5NTAxNjMyKVxuICAgIGMgPSBtZDVfZ2coYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNCwgNjQzNzE3NzEzKVxuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpICsgMF0sIDIwLCAtMzczODk3MzAyKVxuICAgIGEgPSBtZDVfZ2coYSwgYiwgYywgZCwgeFtpICsgNV0sIDUsIC03MDE1NTg2OTEpXG4gICAgZCA9IG1kNV9nZyhkLCBhLCBiLCBjLCB4W2kgKyAxMF0sIDksIDM4MDE2MDgzKVxuICAgIGMgPSBtZDVfZ2coYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNCwgLTY2MDQ3ODMzNSlcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSArIDRdLCAyMCwgLTQwNTUzNzg0OClcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSArIDldLCA1LCA1Njg0NDY0MzgpXG4gICAgZCA9IG1kNV9nZyhkLCBhLCBiLCBjLCB4W2kgKyAxNF0sIDksIC0xMDE5ODAzNjkwKVxuICAgIGMgPSBtZDVfZ2coYywgZCwgYSwgYiwgeFtpICsgM10sIDE0LCAtMTg3MzYzOTYxKVxuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpICsgOF0sIDIwLCAxMTYzNTMxNTAxKVxuICAgIGEgPSBtZDVfZ2coYSwgYiwgYywgZCwgeFtpICsgMTNdLCA1LCAtMTQ0NDY4MTQ2NylcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSArIDJdLCA5LCAtNTE0MDM3ODQpXG4gICAgYyA9IG1kNV9nZyhjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTQsIDE3MzUzMjg0NzMpXG4gICAgYiA9IG1kNV9nZyhiLCBjLCBkLCBhLCB4W2kgKyAxMl0sIDIwLCAtMTkyNjYwNzczNClcblxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpICsgNV0sIDQsIC0zNzg1NTgpXG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2kgKyA4XSwgMTEsIC0yMDIyNTc0NDYzKVxuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNiwgMTgzOTAzMDU2MilcbiAgICBiID0gbWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSArIDE0XSwgMjMsIC0zNTMwOTU1NilcbiAgICBhID0gbWQ1X2hoKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA0LCAtMTUzMDk5MjA2MClcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSArIDRdLCAxMSwgMTI3Mjg5MzM1MylcbiAgICBjID0gbWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNiwgLTE1NTQ5NzYzMilcbiAgICBiID0gbWQ1X2hoKGIsIGMsIGQsIGEsIHhbaSArIDEwXSwgMjMsIC0xMDk0NzMwNjQwKVxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpICsgMTNdLCA0LCA2ODEyNzkxNzQpXG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2kgKyAwXSwgMTEsIC0zNTg1MzcyMjIpXG4gICAgYyA9IG1kNV9oaChjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTYsIC03MjI1MjE5NzkpXG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2kgKyA2XSwgMjMsIDc2MDI5MTg5KVxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpICsgOV0sIDQsIC02NDAzNjQ0ODcpXG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2kgKyAxMl0sIDExLCAtNDIxODE1ODM1KVxuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNiwgNTMwNzQyNTIwKVxuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpICsgMl0sIDIzLCAtOTk1MzM4NjUxKVxuXG4gICAgYSA9IG1kNV9paShhLCBiLCBjLCBkLCB4W2kgKyAwXSwgNiwgLTE5ODYzMDg0NClcbiAgICBkID0gbWQ1X2lpKGQsIGEsIGIsIGMsIHhbaSArIDddLCAxMCwgMTEyNjg5MTQxNSlcbiAgICBjID0gbWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTUsIC0xNDE2MzU0OTA1KVxuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgNV0sIDIxLCAtNTc0MzQwNTUpXG4gICAgYSA9IG1kNV9paShhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDYsIDE3MDA0ODU1NzEpXG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAzXSwgMTAsIC0xODk0OTg2NjA2KVxuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpXG4gICAgYiA9IG1kNV9paShiLCBjLCBkLCBhLCB4W2kgKyAxXSwgMjEsIC0yMDU0OTIyNzk5KVxuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpICsgOF0sIDYsIDE4NzMzMTMzNTkpXG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpXG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTUsIC0xNTYwMTk4MzgwKVxuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpICsgMTNdLCAyMSwgMTMwOTE1MTY0OSlcbiAgICBhID0gbWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA2LCAtMTQ1NTIzMDcwKVxuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpXG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTUsIDcxODc4NzI1OSlcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSArIDldLCAyMSwgLTM0MzQ4NTU1MSlcblxuICAgIGEgPSBzYWZlX2FkZChhLCBvbGRhKVxuICAgIGIgPSBzYWZlX2FkZChiLCBvbGRiKVxuICAgIGMgPSBzYWZlX2FkZChjLCBvbGRjKVxuICAgIGQgPSBzYWZlX2FkZChkLCBvbGRkKVxuICB9XG5cbiAgcmV0dXJuIFthLCBiLCBjLCBkXVxufVxuXG4vKlxuICogVGhlc2UgZnVuY3Rpb25zIGltcGxlbWVudCB0aGUgZm91ciBiYXNpYyBvcGVyYXRpb25zIHRoZSBhbGdvcml0aG0gdXNlcy5cbiAqL1xuZnVuY3Rpb24gbWQ1X2NtbiAocSwgYSwgYiwgeCwgcywgdCkge1xuICByZXR1cm4gc2FmZV9hZGQoYml0X3JvbChzYWZlX2FkZChzYWZlX2FkZChhLCBxKSwgc2FmZV9hZGQoeCwgdCkpLCBzKSwgYilcbn1cblxuZnVuY3Rpb24gbWQ1X2ZmIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVfY21uKChiICYgYykgfCAoKH5iKSAmIGQpLCBhLCBiLCB4LCBzLCB0KVxufVxuXG5mdW5jdGlvbiBtZDVfZ2cgKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNV9jbW4oKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIHgsIHMsIHQpXG59XG5cbmZ1bmN0aW9uIG1kNV9oaCAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1X2NtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpXG59XG5cbmZ1bmN0aW9uIG1kNV9paSAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1X2NtbihjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdClcbn1cblxuLypcbiAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcgYXQgMl4zMi4gVGhpcyB1c2VzIDE2LWJpdCBvcGVyYXRpb25zIGludGVybmFsbHlcbiAqIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIHNhZmVfYWRkICh4LCB5KSB7XG4gIHZhciBsc3cgPSAoeCAmIDB4RkZGRikgKyAoeSAmIDB4RkZGRilcbiAgdmFyIG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpXG4gIHJldHVybiAobXN3IDw8IDE2KSB8IChsc3cgJiAweEZGRkYpXG59XG5cbi8qXG4gKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXG4gKi9cbmZ1bmN0aW9uIGJpdF9yb2wgKG51bSwgY250KSB7XG4gIHJldHVybiAobnVtIDw8IGNudCkgfCAobnVtID4+PiAoMzIgLSBjbnQpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1kNSAoYnVmKSB7XG4gIHJldHVybiBtYWtlSGFzaChidWYsIGNvcmVfbWQ1KVxufVxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgTGVnYWN5ID0gcmVxdWlyZSgnLi9sZWdhY3knKVxudmFyIEJhc2UgPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBtZDUgPSByZXF1aXJlKCdjcmVhdGUtaGFzaC9tZDUnKVxudmFyIFJJUEVNRDE2MCA9IHJlcXVpcmUoJ3JpcGVtZDE2MCcpXG5cbnZhciBzaGEgPSByZXF1aXJlKCdzaGEuanMnKVxuXG52YXIgWkVST1MgPSBCdWZmZXIuYWxsb2MoMTI4KVxuXG5mdW5jdGlvbiBIbWFjIChhbGcsIGtleSkge1xuICBCYXNlLmNhbGwodGhpcywgJ2RpZ2VzdCcpXG4gIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgIGtleSA9IEJ1ZmZlci5mcm9tKGtleSlcbiAgfVxuXG4gIHZhciBibG9ja3NpemUgPSAoYWxnID09PSAnc2hhNTEyJyB8fCBhbGcgPT09ICdzaGEzODQnKSA/IDEyOCA6IDY0XG5cbiAgdGhpcy5fYWxnID0gYWxnXG4gIHRoaXMuX2tleSA9IGtleVxuICBpZiAoa2V5Lmxlbmd0aCA+IGJsb2Nrc2l6ZSkge1xuICAgIHZhciBoYXNoID0gYWxnID09PSAncm1kMTYwJyA/IG5ldyBSSVBFTUQxNjAoKSA6IHNoYShhbGcpXG4gICAga2V5ID0gaGFzaC51cGRhdGUoa2V5KS5kaWdlc3QoKVxuICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPCBibG9ja3NpemUpIHtcbiAgICBrZXkgPSBCdWZmZXIuY29uY2F0KFtrZXksIFpFUk9TXSwgYmxvY2tzaXplKVxuICB9XG5cbiAgdmFyIGlwYWQgPSB0aGlzLl9pcGFkID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJsb2Nrc2l6ZSlcbiAgdmFyIG9wYWQgPSB0aGlzLl9vcGFkID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJsb2Nrc2l6ZSlcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGJsb2Nrc2l6ZTsgaSsrKSB7XG4gICAgaXBhZFtpXSA9IGtleVtpXSBeIDB4MzZcbiAgICBvcGFkW2ldID0ga2V5W2ldIF4gMHg1Q1xuICB9XG4gIHRoaXMuX2hhc2ggPSBhbGcgPT09ICdybWQxNjAnID8gbmV3IFJJUEVNRDE2MCgpIDogc2hhKGFsZylcbiAgdGhpcy5faGFzaC51cGRhdGUoaXBhZClcbn1cblxuaW5oZXJpdHMoSG1hYywgQmFzZSlcblxuSG1hYy5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHRoaXMuX2hhc2gudXBkYXRlKGRhdGEpXG59XG5cbkhtYWMucHJvdG90eXBlLl9maW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGggPSB0aGlzLl9oYXNoLmRpZ2VzdCgpXG4gIHZhciBoYXNoID0gdGhpcy5fYWxnID09PSAncm1kMTYwJyA/IG5ldyBSSVBFTUQxNjAoKSA6IHNoYSh0aGlzLl9hbGcpXG4gIHJldHVybiBoYXNoLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoaCkuZGlnZXN0KClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVIbWFjIChhbGcsIGtleSkge1xuICBhbGcgPSBhbGcudG9Mb3dlckNhc2UoKVxuICBpZiAoYWxnID09PSAncm1kMTYwJyB8fCBhbGcgPT09ICdyaXBlbWQxNjAnKSB7XG4gICAgcmV0dXJuIG5ldyBIbWFjKCdybWQxNjAnLCBrZXkpXG4gIH1cbiAgaWYgKGFsZyA9PT0gJ21kNScpIHtcbiAgICByZXR1cm4gbmV3IExlZ2FjeShtZDUsIGtleSlcbiAgfVxuICByZXR1cm4gbmV3IEhtYWMoYWxnLCBrZXkpXG59XG4iLCIndXNlIHN0cmljdCdcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG52YXIgQmFzZSA9IHJlcXVpcmUoJ2NpcGhlci1iYXNlJylcblxudmFyIFpFUk9TID0gQnVmZmVyLmFsbG9jKDEyOClcbnZhciBibG9ja3NpemUgPSA2NFxuXG5mdW5jdGlvbiBIbWFjIChhbGcsIGtleSkge1xuICBCYXNlLmNhbGwodGhpcywgJ2RpZ2VzdCcpXG4gIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgIGtleSA9IEJ1ZmZlci5mcm9tKGtleSlcbiAgfVxuXG4gIHRoaXMuX2FsZyA9IGFsZ1xuICB0aGlzLl9rZXkgPSBrZXlcblxuICBpZiAoa2V5Lmxlbmd0aCA+IGJsb2Nrc2l6ZSkge1xuICAgIGtleSA9IGFsZyhrZXkpXG4gIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA8IGJsb2Nrc2l6ZSkge1xuICAgIGtleSA9IEJ1ZmZlci5jb25jYXQoW2tleSwgWkVST1NdLCBibG9ja3NpemUpXG4gIH1cblxuICB2YXIgaXBhZCA9IHRoaXMuX2lwYWQgPSBCdWZmZXIuYWxsb2NVbnNhZmUoYmxvY2tzaXplKVxuICB2YXIgb3BhZCA9IHRoaXMuX29wYWQgPSBCdWZmZXIuYWxsb2NVbnNhZmUoYmxvY2tzaXplKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tzaXplOyBpKyspIHtcbiAgICBpcGFkW2ldID0ga2V5W2ldIF4gMHgzNlxuICAgIG9wYWRbaV0gPSBrZXlbaV0gXiAweDVDXG4gIH1cblxuICB0aGlzLl9oYXNoID0gW2lwYWRdXG59XG5cbmluaGVyaXRzKEhtYWMsIEJhc2UpXG5cbkhtYWMucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLl9oYXNoLnB1c2goZGF0YSlcbn1cblxuSG1hYy5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaCA9IHRoaXMuX2FsZyhCdWZmZXIuY29uY2F0KHRoaXMuX2hhc2gpKVxuICByZXR1cm4gdGhpcy5fYWxnKEJ1ZmZlci5jb25jYXQoW3RoaXMuX29wYWQsIGhdKSlcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hY1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMucmFuZG9tQnl0ZXMgPSBleHBvcnRzLnJuZyA9IGV4cG9ydHMucHNldWRvUmFuZG9tQnl0ZXMgPSBleHBvcnRzLnBybmcgPSByZXF1aXJlKCdyYW5kb21ieXRlcycpXG5leHBvcnRzLmNyZWF0ZUhhc2ggPSBleHBvcnRzLkhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpXG5leHBvcnRzLmNyZWF0ZUhtYWMgPSBleHBvcnRzLkhtYWMgPSByZXF1aXJlKCdjcmVhdGUtaG1hYycpXG5cbnZhciBoYXNoZXMgPSBbJ3NoYTEnLCAnc2hhMjI0JywgJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJywgJ21kNScsICdybWQxNjAnXS5jb25jYXQoT2JqZWN0LmtleXMocmVxdWlyZSgnYnJvd3NlcmlmeS1zaWduL2FsZ29zJykpKVxuZXhwb3J0cy5nZXRIYXNoZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBoYXNoZXNcbn1cblxudmFyIHAgPSByZXF1aXJlKCdwYmtkZjInKVxuZXhwb3J0cy5wYmtkZjIgPSBwLnBia2RmMlxuZXhwb3J0cy5wYmtkZjJTeW5jID0gcC5wYmtkZjJTeW5jXG5cbnZhciBhZXMgPSByZXF1aXJlKCdicm93c2VyaWZ5LWNpcGhlcicpXG47W1xuICAnQ2lwaGVyJyxcbiAgJ2NyZWF0ZUNpcGhlcicsXG4gICdDaXBoZXJpdicsXG4gICdjcmVhdGVDaXBoZXJpdicsXG4gICdEZWNpcGhlcicsXG4gICdjcmVhdGVEZWNpcGhlcicsXG4gICdEZWNpcGhlcml2JyxcbiAgJ2NyZWF0ZURlY2lwaGVyaXYnLFxuICAnZ2V0Q2lwaGVycycsXG4gICdsaXN0Q2lwaGVycydcbl0uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGV4cG9ydHNba2V5XSA9IGFlc1trZXldXG59KVxuXG52YXIgZGggPSByZXF1aXJlKCdkaWZmaWUtaGVsbG1hbicpXG47W1xuICAnRGlmZmllSGVsbG1hbkdyb3VwJyxcbiAgJ2NyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCcsXG4gICdnZXREaWZmaWVIZWxsbWFuJyxcbiAgJ2NyZWF0ZURpZmZpZUhlbGxtYW4nLFxuICAnRGlmZmllSGVsbG1hbidcbl0uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGV4cG9ydHNba2V5XSA9IGRoW2tleV1cbn0pXG5cbnZhciBzaWduID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1zaWduJylcbjtbXG4gICdjcmVhdGVTaWduJyxcbiAgJ1NpZ24nLFxuICAnY3JlYXRlVmVyaWZ5JyxcbiAgJ1ZlcmlmeSdcbl0uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGV4cG9ydHNba2V5XSA9IHNpZ25ba2V5XVxufSlcblxuZXhwb3J0cy5jcmVhdGVFQ0RIID0gcmVxdWlyZSgnY3JlYXRlLWVjZGgnKVxuXG52YXIgcHVibGljRW5jcnlwdCA9IHJlcXVpcmUoJ3B1YmxpYy1lbmNyeXB0JylcblxuO1tcbiAgJ3B1YmxpY0VuY3J5cHQnLFxuICAncHJpdmF0ZUVuY3J5cHQnLFxuICAncHVibGljRGVjcnlwdCcsXG4gICdwcml2YXRlRGVjcnlwdCdcbl0uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGV4cG9ydHNba2V5XSA9IHB1YmxpY0VuY3J5cHRba2V5XVxufSlcblxuLy8gdGhlIGxlYXN0IEkgY2FuIGRvIGlzIG1ha2UgZXJyb3IgbWVzc2FnZXMgZm9yIHRoZSByZXN0IG9mIHRoZSBub2RlLmpzL2NyeXB0byBhcGkuXG47W1xuICAnY3JlYXRlQ3JlZGVudGlhbHMnXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgZXhwb3J0c1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoW1xuICAgICAgJ3NvcnJ5LCAnICsgbmFtZSArICcgaXMgbm90IGltcGxlbWVudGVkIHlldCcsXG4gICAgICAnd2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMnLFxuICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG8tYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSdcbiAgICBdLmpvaW4oJ1xcbicpKVxuICB9XG59KVxuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG5cdENzc1NlbGVjdG9yLFxuXHRFbGVtZW50U2VsZWN0b3IsXG5cdEVsZW1lbnRTZWxlY3Rvckxpc3Rcbn1cblxuXG5mdW5jdGlvbiBDc3NTZWxlY3RvciAob3B0aW9ucykge1xuXG5cdHZhciBtZSA9IHRoaXM7XG5cblx0Ly8gZGVmYXVsdHNcblx0dGhpcy5pZ25vcmVkVGFncyA9IFsnZm9udCcsICdiJywgJ2knLCAncyddO1xuXHR0aGlzLnBhcmVudCA9IG9wdGlvbnMuZG9jdW1lbnQgfHwgb3B0aW9ucy5wYXJlbnRcblx0dGhpcy5kb2N1bWVudCA9IG9wdGlvbnMuZG9jdW1lbnQgfHwgb3B0aW9ucy5wYXJlbnQgXG5cdHRoaXMuaWdub3JlZENsYXNzQmFzZSA9IGZhbHNlO1xuXHR0aGlzLmVuYWJsZVJlc3VsdFN0cmlwcGluZyA9IHRydWU7XG5cdHRoaXMuZW5hYmxlU21hcnRUYWJsZVNlbGVjdG9yID0gZmFsc2U7XG5cdHRoaXMuaWdub3JlZENsYXNzZXMgPSBbXTtcbiAgICB0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3RvcnMgPSBmYWxzZTtcblx0dGhpcy5xdWVyeSA9IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuXHRcdHJldHVybiBtZS5wYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cdH07XG5cblx0Ly8gb3ZlcnJpZGVzIGRlZmF1bHRzIHdpdGggb3B0aW9uc1xuXHRmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcblx0XHR0aGlzW2ldID0gb3B0aW9uc1tpXTtcblx0fVxufTtcblxuLy8gVE9ETyByZWZhY3RvciBlbGVtZW50IHNlbGVjdG9yIGxpc3QgaW50byBhIH4gY2xhc3NcbmZ1bmN0aW9uIEVsZW1lbnRTZWxlY3RvciAoZWxlbWVudCwgaWdub3JlZENsYXNzZXMpIHtcblxuXHR0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXHR0aGlzLmlzRGlyZWN0Q2hpbGQgPSB0cnVlO1xuXHR0aGlzLnRhZyA9IGVsZW1lbnQubG9jYWxOYW1lO1xuXHR0aGlzLnRhZyA9IHRoaXMudGFnLnJlcGxhY2UoLzovZywgJ1xcXFw6Jyk7XG5cblx0Ly8gbnRoLW9mLWNoaWxkKG4rMSlcblx0dGhpcy5pbmRleG4gPSBudWxsO1xuXHR0aGlzLmluZGV4ID0gMTtcblx0dGhpcy5pZCA9IG51bGw7XG5cdHRoaXMuY2xhc3NlcyA9IG5ldyBBcnJheSgpO1xuXG5cdC8vIGRvIG5vdCBhZGQgYWRkaXRpbmFsIGluZm8gdG8gaHRtbCwgYm9keSB0YWdzLlxuXHQvLyBodG1sOm50aC1vZi10eXBlKDEpIGNhbm5vdCBiZSBzZWxlY3RlZFxuXHRpZih0aGlzLnRhZyA9PT0gJ2h0bWwnIHx8IHRoaXMudGFnID09PSAnSFRNTCdcblx0XHR8fCB0aGlzLnRhZyA9PT0gJ2JvZHknIHx8IHRoaXMudGFnID09PSAnQk9EWScpIHtcblx0XHR0aGlzLmluZGV4ID0gbnVsbDtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoZWxlbWVudC5wYXJlbnROb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHQvLyBudGgtY2hpbGRcblx0XHQvL3RoaXMuaW5kZXggPSBbXS5pbmRleE9mLmNhbGwoZWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuLCBlbGVtZW50KSsxO1xuXG5cdFx0Ly8gbnRoLW9mLXR5cGVcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnQucGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGNoaWxkID0gZWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuW2ldO1xuXHRcdFx0aWYgKGNoaWxkID09PSBlbGVtZW50KSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNoaWxkLnRhZ05hbWUgPT09IGVsZW1lbnQudGFnTmFtZSkge1xuXHRcdFx0XHR0aGlzLmluZGV4Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKGVsZW1lbnQuaWQgIT09ICcnKSB7XG5cdFx0aWYgKHR5cGVvZiBlbGVtZW50LmlkID09PSAnc3RyaW5nJykge1xuXHRcdFx0dGhpcy5pZCA9IGVsZW1lbnQuaWQ7XG5cdFx0XHR0aGlzLmlkID0gdGhpcy5pZC5yZXBsYWNlKC86L2csICdcXFxcOicpO1xuXHRcdH1cblx0fVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY2NsYXNzID0gZWxlbWVudC5jbGFzc0xpc3RbaV07XG5cdFx0aWYgKGlnbm9yZWRDbGFzc2VzLmluZGV4T2YoY2NsYXNzKSA9PT0gLTEpIHtcblx0XHRcdGNjbGFzcyA9IGNjbGFzcy5yZXBsYWNlKC86L2csICdcXFxcOicpO1xuXHRcdFx0dGhpcy5jbGFzc2VzLnB1c2goY2NsYXNzKTtcblx0XHR9XG5cdH1cbn07XG5cbmZ1bmN0aW9uIEVsZW1lbnRTZWxlY3Rvckxpc3QgKENzc1NlbGVjdG9yKSB7XG5cdHRoaXMuQ3NzU2VsZWN0b3IgPSBDc3NTZWxlY3Rvcjtcbn07XG5cbkVsZW1lbnRTZWxlY3Rvckxpc3QucHJvdG90eXBlID0gbmV3IEFycmF5KCk7XG5cbkVsZW1lbnRTZWxlY3Rvckxpc3QucHJvdG90eXBlLmdldENzc1NlbGVjdG9yID0gZnVuY3Rpb24gKCkge1xuXG5cdHZhciByZXN1bHRTZWxlY3RvcnMgPSBbXTtcblxuXHQvLyBURERcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHNlbGVjdG9yID0gdGhpc1tpXTtcblxuXHRcdHZhciBpc0ZpcnN0U2VsZWN0b3IgPSBpID09PSB0aGlzLmxlbmd0aC0xO1xuXHRcdHZhciByZXN1bHRTZWxlY3RvciA9IHNlbGVjdG9yLmdldENzc1NlbGVjdG9yKGlzRmlyc3RTZWxlY3Rvcik7XG5cblx0XHRpZiAodGhpcy5Dc3NTZWxlY3Rvci5lbmFibGVTbWFydFRhYmxlU2VsZWN0b3IpIHtcblx0XHRcdGlmIChzZWxlY3Rvci50YWcgPT09ICd0cicpIHtcblx0XHRcdFx0aWYgKHNlbGVjdG9yLmVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XG5cdFx0XHRcdFx0aWYgKHNlbGVjdG9yLmVsZW1lbnQuY2hpbGRyZW5bMF0udGFnTmFtZSA9PT0gJ1REJ1xuXHRcdFx0XHRcdFx0fHwgc2VsZWN0b3IuZWxlbWVudC5jaGlsZHJlblswXS50YWdOYW1lID09PSAnVEgnXG5cdFx0XHRcdFx0XHR8fCBzZWxlY3Rvci5lbGVtZW50LmNoaWxkcmVuWzBdLnRhZ05hbWUgPT09ICdUUicpIHtcblxuXHRcdFx0XHRcdFx0dmFyIHRleHQgPSBzZWxlY3Rvci5lbGVtZW50LmNoaWxkcmVuWzBdLnRleHRDb250ZW50O1xuXHRcdFx0XHRcdFx0dGV4dCA9IHRleHQudHJpbSgpO1xuXG5cdFx0XHRcdFx0XHQvLyBlc2NhcGUgcXVvdGVzXG5cdFx0XHRcdFx0XHR0ZXh0LnJlcGxhY2UoLyhcXFxcKikoJykvZywgZnVuY3Rpb24gKHgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGwgPSB4Lmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChsICUgMikgPyB4IDogeC5zdWJzdHJpbmcoMCwgbCAtIDEpICsgXCJcXFxcJ1wiO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXN1bHRTZWxlY3RvciArPSBcIjpjb250YWlucygnXCIgKyB0ZXh0ICsgXCInKVwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlc3VsdFNlbGVjdG9ycy5wdXNoKHJlc3VsdFNlbGVjdG9yKTtcblx0fVxuXG5cdHZhciByZXN1bHRDU1NTZWxlY3RvciA9IHJlc3VsdFNlbGVjdG9ycy5yZXZlcnNlKCkuam9pbignICcpO1xuXHRyZXR1cm4gcmVzdWx0Q1NTU2VsZWN0b3I7XG59O1xuXG5FbGVtZW50U2VsZWN0b3IucHJvdG90eXBlID0ge1xuXG5cdGdldENzc1NlbGVjdG9yOiBmdW5jdGlvbiAoaXNGaXJzdFNlbGVjdG9yKSB7XG5cblx0XHRpZihpc0ZpcnN0U2VsZWN0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aXNGaXJzdFNlbGVjdG9yID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIHNlbGVjdG9yID0gdGhpcy50YWc7XG5cdFx0aWYgKHRoaXMuaWQgIT09IG51bGwpIHtcblx0XHRcdHNlbGVjdG9yICs9ICcjJyArIHRoaXMuaWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmNsYXNzZXMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRzZWxlY3RvciArPSBcIi5cIiArIHRoaXMuY2xhc3Nlc1tpXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHRoaXMuaW5kZXggIT09IG51bGwpIHtcblx0XHRcdHNlbGVjdG9yICs9ICc6bnRoLW9mLXR5cGUoJyArIHRoaXMuaW5kZXggKyAnKSc7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmluZGV4biAhPT0gbnVsbCAmJiB0aGlzLmluZGV4biAhPT0gLTEpIHtcblx0XHRcdHNlbGVjdG9yICs9ICc6bnRoLW9mLXR5cGUobisnICsgdGhpcy5pbmRleG4gKyAnKSc7XG5cdFx0fVxuXHRcdGlmKHRoaXMuaXNEaXJlY3RDaGlsZCAmJiBpc0ZpcnN0U2VsZWN0b3IgPT09IGZhbHNlKSB7XG5cdFx0XHRzZWxlY3RvciA9IFwiPiBcIitzZWxlY3Rvcjtcblx0XHR9XG5cblx0XHRyZXR1cm4gc2VsZWN0b3I7XG5cdH0sXG5cdC8vIG1lcmdlcyB0aGlzIHNlbGVjdG9yIHdpdGggYW5vdGhlciBvbmUuXG5cdG1lcmdlOiBmdW5jdGlvbiAobWVyZ2VTZWxlY3Rvcikge1xuXG5cdFx0aWYgKHRoaXMudGFnICE9PSBtZXJnZVNlbGVjdG9yLnRhZykge1xuXHRcdFx0dGhyb3cgXCJkaWZmZXJlbnQgZWxlbWVudCBzZWxlY3RlZCAodGFnKVwiO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmluZGV4ICE9PSBudWxsKSB7XG5cdFx0XHRpZiAodGhpcy5pbmRleCAhPT0gbWVyZ2VTZWxlY3Rvci5pbmRleCkge1xuXG5cdFx0XHRcdC8vIHVzZSBpbmRleG4gb25seSBmb3IgdHdvIGVsZW1lbnRzXG5cdFx0XHRcdGlmICh0aGlzLmluZGV4biA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdHZhciBpbmRleG4gPSBNYXRoLm1pbihtZXJnZVNlbGVjdG9yLmluZGV4LCB0aGlzLmluZGV4KTtcblx0XHRcdFx0XHRpZiAoaW5kZXhuID4gMSkge1xuXHRcdFx0XHRcdFx0dGhpcy5pbmRleG4gPSBNYXRoLm1pbihtZXJnZVNlbGVjdG9yLmluZGV4LCB0aGlzLmluZGV4KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5pbmRleG4gPSAtMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuaW5kZXggPSBudWxsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKHRoaXMuaXNEaXJlY3RDaGlsZCA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5pc0RpcmVjdENoaWxkID0gbWVyZ2VTZWxlY3Rvci5pc0RpcmVjdENoaWxkO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmlkICE9PSBudWxsKSB7XG5cdFx0XHRpZiAodGhpcy5pZCAhPT0gbWVyZ2VTZWxlY3Rvci5pZCkge1xuXHRcdFx0XHR0aGlzLmlkID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5jbGFzc2VzLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0dmFyIGNsYXNzZXMgPSBuZXcgQXJyYXkoKTtcblxuXHRcdFx0Zm9yICh2YXIgaSBpbiB0aGlzLmNsYXNzZXMpIHtcblx0XHRcdFx0dmFyIGNjbGFzcyA9IHRoaXMuY2xhc3Nlc1tpXTtcblx0XHRcdFx0aWYgKG1lcmdlU2VsZWN0b3IuY2xhc3Nlcy5pbmRleE9mKGNjbGFzcykgIT09IC0xKSB7XG5cdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGNjbGFzcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5jbGFzc2VzID0gY2xhc3Nlcztcblx0XHR9XG5cdH1cbn07XG5cbkNzc1NlbGVjdG9yLnByb3RvdHlwZSA9IHtcblx0bWVyZ2VFbGVtZW50U2VsZWN0b3JzOiBmdW5jdGlvbiAobmV3U2VsZWNvcnMpIHtcblxuXHRcdGlmIChuZXdTZWxlY29ycy5sZW5ndGggPCAxKSB7XG5cdFx0XHR0aHJvdyBcIk5vIHNlbGVjdG9ycyBzcGVjaWZpZWRcIjtcblx0XHR9XG5cdFx0ZWxzZSBpZiAobmV3U2VsZWNvcnMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gbmV3U2VsZWNvcnNbMF07XG5cdFx0fVxuXG5cdFx0Ly8gY2hlY2sgc2VsZWN0b3IgdG90YWwgY291bnRcblx0XHR2YXIgZWxlbWVudENvdW50SW5TZWxlY3RvciA9IG5ld1NlbGVjb3JzWzBdLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG5ld1NlbGVjb3JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgc2VsZWN0b3IgPSBuZXdTZWxlY29yc1tpXTtcblx0XHRcdGlmIChzZWxlY3Rvci5sZW5ndGggIT09IGVsZW1lbnRDb3VudEluU2VsZWN0b3IpIHtcblx0XHRcdFx0dGhyb3cgXCJJbnZhbGlkIGVsZW1lbnQgY291bnQgaW4gc2VsZWN0b3JcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBtZXJnZSBzZWxlY3RvcnNcblx0XHR2YXIgcmVzdWx0aW5nRWxlbWVudHMgPSBuZXdTZWxlY29yc1swXTtcblx0XHRmb3IgKHZhciBpID0gMTsgaSA8IG5ld1NlbGVjb3JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgbWVyZ2VFbGVtZW50cyA9IG5ld1NlbGVjb3JzW2ldO1xuXG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGVsZW1lbnRDb3VudEluU2VsZWN0b3I7IGorKykge1xuXHRcdFx0XHRyZXN1bHRpbmdFbGVtZW50c1tqXS5tZXJnZShtZXJnZUVsZW1lbnRzW2pdKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdGluZ0VsZW1lbnRzO1xuXHR9LFxuXHRzdHJpcFNlbGVjdG9yOiBmdW5jdGlvbiAoc2VsZWN0b3JzKSB7XG5cblx0XHR2YXIgY3NzU2VsZXRvciA9IHNlbGVjdG9ycy5nZXRDc3NTZWxlY3RvcigpO1xuXHRcdHZhciBiYXNlU2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMucXVlcnkoY3NzU2VsZXRvcik7XG5cblx0XHR2YXIgY29tcGFyZUVsZW1lbnRzID0gZnVuY3Rpb24gKGVsZW1lbnRzKSB7XG5cdFx0XHRpZiAoYmFzZVNlbGVjdGVkRWxlbWVudHMubGVuZ3RoICE9PSBlbGVtZW50cy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGJhc2VTZWxlY3RlZEVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmIChbXS5pbmRleE9mLmNhbGwoZWxlbWVudHMsIGJhc2VTZWxlY3RlZEVsZW1lbnRzW2pdKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cdFx0Ly8gc3RyaXAgaW5kZXhlc1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgc2VsZWN0b3IgPSBzZWxlY3RvcnNbaV07XG5cdFx0XHRpZiAoc2VsZWN0b3IuaW5kZXggIT09IG51bGwpIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gc2VsZWN0b3IuaW5kZXg7XG5cdFx0XHRcdHNlbGVjdG9yLmluZGV4ID0gbnVsbDtcblx0XHRcdFx0dmFyIGNzc1NlbGV0b3IgPSBzZWxlY3RvcnMuZ2V0Q3NzU2VsZWN0b3IoKTtcblx0XHRcdFx0dmFyIG5ld1NlbGVjdGVkRWxlbWVudHMgPSB0aGlzLnF1ZXJ5KGNzc1NlbGV0b3IpO1xuXHRcdFx0XHQvLyBpZiByZXN1bHRzIGRvZXNuJ3QgbWF0Y2ggdGhlbiB1bmRvIGNoYW5nZXNcblx0XHRcdFx0aWYgKCFjb21wYXJlRWxlbWVudHMobmV3U2VsZWN0ZWRFbGVtZW50cykpIHtcblx0XHRcdFx0XHRzZWxlY3Rvci5pbmRleCA9IGluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gc3RyaXAgaXNEaXJlY3RDaGlsZFxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgc2VsZWN0b3IgPSBzZWxlY3RvcnNbaV07XG5cdFx0XHRpZiAoc2VsZWN0b3IuaXNEaXJlY3RDaGlsZCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRzZWxlY3Rvci5pc0RpcmVjdENoaWxkID0gZmFsc2U7XG5cdFx0XHRcdHZhciBjc3NTZWxldG9yID0gc2VsZWN0b3JzLmdldENzc1NlbGVjdG9yKCk7XG5cdFx0XHRcdHZhciBuZXdTZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5xdWVyeShjc3NTZWxldG9yKTtcblx0XHRcdFx0Ly8gaWYgcmVzdWx0cyBkb2Vzbid0IG1hdGNoIHRoZW4gdW5kbyBjaGFuZ2VzXG5cdFx0XHRcdGlmICghY29tcGFyZUVsZW1lbnRzKG5ld1NlbGVjdGVkRWxlbWVudHMpKSB7XG5cdFx0XHRcdFx0c2VsZWN0b3IuaXNEaXJlY3RDaGlsZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBzdHJpcCBpZHNcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldO1xuXHRcdFx0aWYgKHNlbGVjdG9yLmlkICE9PSBudWxsKSB7XG5cdFx0XHRcdHZhciBpZCA9IHNlbGVjdG9yLmlkO1xuXHRcdFx0XHRzZWxlY3Rvci5pZCA9IG51bGw7XG5cdFx0XHRcdHZhciBjc3NTZWxldG9yID0gc2VsZWN0b3JzLmdldENzc1NlbGVjdG9yKCk7XG5cdFx0XHRcdHZhciBuZXdTZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5xdWVyeShjc3NTZWxldG9yKTtcblx0XHRcdFx0Ly8gaWYgcmVzdWx0cyBkb2Vzbid0IG1hdGNoIHRoZW4gdW5kbyBjaGFuZ2VzXG5cdFx0XHRcdGlmICghY29tcGFyZUVsZW1lbnRzKG5ld1NlbGVjdGVkRWxlbWVudHMpKSB7XG5cdFx0XHRcdFx0c2VsZWN0b3IuaWQgPSBpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHN0cmlwIGNsYXNzZXNcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldO1xuXHRcdFx0aWYgKHNlbGVjdG9yLmNsYXNzZXMubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdGZvciAodmFyIGogPSBzZWxlY3Rvci5jbGFzc2VzLmxlbmd0aCAtIDE7IGogPiAwOyBqLS0pIHtcblx0XHRcdFx0XHR2YXIgY2NsYXNzID0gc2VsZWN0b3IuY2xhc3Nlc1tqXTtcblx0XHRcdFx0XHRzZWxlY3Rvci5jbGFzc2VzLnNwbGljZShqLCAxKTtcblx0XHRcdFx0XHR2YXIgY3NzU2VsZXRvciA9IHNlbGVjdG9ycy5nZXRDc3NTZWxlY3RvcigpO1xuXHRcdFx0XHRcdHZhciBuZXdTZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5xdWVyeShjc3NTZWxldG9yKTtcblx0XHRcdFx0XHQvLyBpZiByZXN1bHRzIGRvZXNuJ3QgbWF0Y2ggdGhlbiB1bmRvIGNoYW5nZXNcblx0XHRcdFx0XHRpZiAoIWNvbXBhcmVFbGVtZW50cyhuZXdTZWxlY3RlZEVsZW1lbnRzKSkge1xuXHRcdFx0XHRcdFx0c2VsZWN0b3IuY2xhc3Nlcy5zcGxpY2UoaiwgMCwgY2NsYXNzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBzdHJpcCB0YWdzXG5cdFx0Zm9yICh2YXIgaSA9IHNlbGVjdG9ycy5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG5cdFx0XHR2YXIgc2VsZWN0b3IgPSBzZWxlY3RvcnNbaV07XG5cdFx0XHRzZWxlY3RvcnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0dmFyIGNzc1NlbGV0b3IgPSBzZWxlY3RvcnMuZ2V0Q3NzU2VsZWN0b3IoKTtcblx0XHRcdHZhciBuZXdTZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5xdWVyeShjc3NTZWxldG9yKTtcblx0XHRcdC8vIGlmIHJlc3VsdHMgZG9lc24ndCBtYXRjaCB0aGVuIHVuZG8gY2hhbmdlc1xuXHRcdFx0aWYgKCFjb21wYXJlRWxlbWVudHMobmV3U2VsZWN0ZWRFbGVtZW50cykpIHtcblx0XHRcdFx0c2VsZWN0b3JzLnNwbGljZShpLCAwLCBzZWxlY3Rvcik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNlbGVjdG9ycztcblx0fSxcblx0Z2V0RWxlbWVudFNlbGVjdG9yczogZnVuY3Rpb24gKGVsZW1lbnRzLCB0b3ApIHtcblx0XHR2YXIgZWxlbWVudFNlbGVjdG9ycyA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcblx0XHRcdHZhciBlbGVtZW50U2VsZWN0b3IgPSB0aGlzLmdldEVsZW1lbnRTZWxlY3RvcihlbGVtZW50LCB0b3ApO1xuXHRcdFx0ZWxlbWVudFNlbGVjdG9ycy5wdXNoKGVsZW1lbnRTZWxlY3Rvcik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1lbnRTZWxlY3RvcnM7XG5cdH0sXG5cdGdldEVsZW1lbnRTZWxlY3RvcjogZnVuY3Rpb24gKGVsZW1lbnQsIHRvcCkge1xuXG5cdFx0dmFyIGVsZW1lbnRTZWxlY3Rvckxpc3QgPSBuZXcgRWxlbWVudFNlbGVjdG9yTGlzdCh0aGlzKTtcblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0aWYgKGVsZW1lbnQgPT09IHRoaXMucGFyZW50KSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoZWxlbWVudCA9PT0gdW5kZWZpbmVkIHx8IGVsZW1lbnQgPT09IHRoaXMuZG9jdW1lbnQpIHtcblx0XHRcdFx0dGhyb3cgJ2VsZW1lbnQgaXMgbm90IGEgY2hpbGQgb2YgdGhlIGdpdmVuIHBhcmVudCc7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5pc0lnbm9yZWRUYWcoZWxlbWVudC50YWdOYW1lKSkge1xuXG5cdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRvcCA+IDApIHtcblx0XHRcdFx0dG9wLS07XG5cdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgc2VsZWN0b3IgPSBuZXcgRWxlbWVudFNlbGVjdG9yKGVsZW1lbnQsIHRoaXMuaWdub3JlZENsYXNzZXMpO1xuXHRcdFx0Ly8gZG9jdW1lbnQgZG9lcyBub3QgaGF2ZSBhIHRhZ05hbWVcblx0XHRcdGlmKGVsZW1lbnQucGFyZW50Tm9kZSA9PT0gdGhpcy5kb2N1bWVudCB8fCB0aGlzLmlzSWdub3JlZFRhZyhlbGVtZW50LnBhcmVudE5vZGUudGFnTmFtZSkpIHtcblx0XHRcdFx0c2VsZWN0b3IuaXNEaXJlY3RDaGlsZCA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtZW50U2VsZWN0b3JMaXN0LnB1c2goc2VsZWN0b3IpO1xuXHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbWVudFNlbGVjdG9yTGlzdDtcblx0fSxcblxuICAgIC8qKlxuICAgICAqIENvbXBhcmVzIHdoZXRoZXIgdHdvIGVsZW1lbnRzIGFyZSBzaW1pbGFyLiBTaW1pbGFyIGVsZW1lbnRzIHNob3VsZFxuICAgICAqIGhhdmUgYSBjb21tb24gcGFycmVudCBhbmQgYWxsIHBhcmVudCBlbGVtZW50cyBzaG91bGQgYmUgdGhlIHNhbWUgdHlwZS5cbiAgICAgKiBAcGFyYW0gZWxlbWVudDFcbiAgICAgKiBAcGFyYW0gZWxlbWVudDJcbiAgICAgKi9cbiAgICBjaGVja1NpbWlsYXJFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudDEsIGVsZW1lbnQyKSB7XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcblxuICAgICAgICAgICAgaWYoZWxlbWVudDEudGFnTmFtZSAhPT0gZWxlbWVudDIudGFnTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGVsZW1lbnQxID09PSBlbGVtZW50Mikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzdG9wIGF0IGJvZHkgdGFnXG4gICAgICAgICAgICBpZiAoZWxlbWVudDEgPT09IHVuZGVmaW5lZCB8fCBlbGVtZW50MS50YWdOYW1lID09PSAnYm9keSdcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50MS50YWdOYW1lID09PSAnQk9EWScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWxlbWVudDIgPT09IHVuZGVmaW5lZCB8fCBlbGVtZW50Mi50YWdOYW1lID09PSAnYm9keSdcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50Mi50YWdOYW1lID09PSAnQk9EWScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnQxID0gZWxlbWVudDEucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIGVsZW1lbnQyID0gZWxlbWVudDIucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcm91cHMgZWxlbWVudHMgaW50byBncm91cHMgaWYgdGhlIGVtZWxlbnRzIGFyZSBub3Qgc2ltaWxhclxuICAgICAqIEBwYXJhbSBlbGVtZW50c1xuICAgICAqL1xuICAgIGdldEVsZW1lbnRHcm91cHM6IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG5cbiAgICAgICAgLy8gZmlyc3QgZWxtZW50IGlzIGluIHRoZSBmaXJzdCBncm91cFxuICAgICAgICAvLyBAVE9ETyBtYXliZSBpIGRvbnQgbmVlZCB0aGlzP1xuICAgICAgICB2YXIgZ3JvdXBzID0gW1tlbGVtZW50c1swXV1dO1xuXG4gICAgICAgIGZvcih2YXIgaSA9IDE7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVsZW1lbnROZXcgPSBlbGVtZW50c1tpXTtcbiAgICAgICAgICAgIHZhciBhZGRlZFRvR3JvdXAgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvcih2YXIgaiA9IDA7IGogPCBncm91cHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSBncm91cHNbal07XG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRHcm91cCA9IGdyb3VwWzBdO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuY2hlY2tTaW1pbGFyRWxlbWVudHMoZWxlbWVudE5ldywgZWxlbWVudEdyb3VwKSkge1xuICAgICAgICAgICAgICAgICAgICBncm91cC5wdXNoKGVsZW1lbnROZXcpO1xuICAgICAgICAgICAgICAgICAgICBhZGRlZFRvR3JvdXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFkZCBuZXcgZ3JvdXBcbiAgICAgICAgICAgIGlmKCFhZGRlZFRvR3JvdXApIHtcbiAgICAgICAgICAgICAgICBncm91cHMucHVzaChbZWxlbWVudE5ld10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICB9LFxuXHRnZXRDc3NTZWxlY3RvcjogZnVuY3Rpb24gKGVsZW1lbnRzLCB0b3ApIHtcblxuXHRcdHRvcCA9IHRvcCB8fCAwO1xuXG5cdFx0dmFyIGVuYWJsZVNtYXJ0VGFibGVTZWxlY3RvciA9IHRoaXMuZW5hYmxlU21hcnRUYWJsZVNlbGVjdG9yO1xuXHRcdGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHR0aGlzLmVuYWJsZVNtYXJ0VGFibGVTZWxlY3RvciA9IGZhbHNlO1xuXHRcdH1cblxuICAgICAgICAvLyBncm91cCBlbGVtZW50cyBpbnRvIHNpbWlsYXJpdHkgZ3JvdXBzXG4gICAgICAgIHZhciBlbGVtZW50R3JvdXBzID0gdGhpcy5nZXRFbGVtZW50R3JvdXBzKGVsZW1lbnRzKTtcblxuICAgICAgICB2YXIgcmVzdWx0Q1NTU2VsZWN0b3I7XG5cbiAgICAgICAgaWYodGhpcy5hbGxvd011bHRpcGxlU2VsZWN0b3JzKSB7XG5cbiAgICAgICAgICAgIHZhciBncm91cFNlbGVjdG9ycyA9IFtdO1xuXG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgZWxlbWVudEdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBncm91cEVsZW1lbnRzID0gZWxlbWVudEdyb3Vwc1tpXTtcblxuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50U2VsZWN0b3JzID0gdGhpcy5nZXRFbGVtZW50U2VsZWN0b3JzKGdyb3VwRWxlbWVudHMsIHRvcCk7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdFNlbGVjdG9yID0gdGhpcy5tZXJnZUVsZW1lbnRTZWxlY3RvcnMoZWxlbWVudFNlbGVjdG9ycyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUmVzdWx0U3RyaXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFNlbGVjdG9yID0gdGhpcy5zdHJpcFNlbGVjdG9yKHJlc3VsdFNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBncm91cFNlbGVjdG9ycy5wdXNoKHJlc3VsdFNlbGVjdG9yLmdldENzc1NlbGVjdG9yKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHRDU1NTZWxlY3RvciA9IGdyb3VwU2VsZWN0b3JzLmpvaW4oJywgJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZihlbGVtZW50R3JvdXBzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IFwiZm91bmQgbXVsdGlwbGUgZWxlbWVudCBncm91cHMsIGJ1dCBhbGxvd011bHRpcGxlU2VsZWN0b3JzIGRpc2FibGVkXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBlbGVtZW50U2VsZWN0b3JzID0gdGhpcy5nZXRFbGVtZW50U2VsZWN0b3JzKGVsZW1lbnRzLCB0b3ApO1xuICAgICAgICAgICAgdmFyIHJlc3VsdFNlbGVjdG9yID0gdGhpcy5tZXJnZUVsZW1lbnRTZWxlY3RvcnMoZWxlbWVudFNlbGVjdG9ycyk7XG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVSZXN1bHRTdHJpcHBpbmcpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRTZWxlY3RvciA9IHRoaXMuc3RyaXBTZWxlY3RvcihyZXN1bHRTZWxlY3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdENTU1NlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3IuZ2V0Q3NzU2VsZWN0b3IoKTtcbiAgICAgICAgfVxuXG5cdFx0dGhpcy5lbmFibGVTbWFydFRhYmxlU2VsZWN0b3IgPSBlbmFibGVTbWFydFRhYmxlU2VsZWN0b3I7XG5cblx0XHQvLyBzdHJpcCBkb3duIHNlbGVjdG9yXG5cdFx0cmV0dXJuIHJlc3VsdENTU1NlbGVjdG9yO1xuXHR9LFxuXHRpc0lnbm9yZWRUYWc6IGZ1bmN0aW9uICh0YWcpIHtcblx0XHRyZXR1cm4gdGhpcy5pZ25vcmVkVGFncy5pbmRleE9mKHRhZy50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XG5cdH1cbn07XG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge1xuICAgIENTU1J1bGU6IHJlcXVpcmUoXCIuL0NTU1J1bGVcIikuQ1NTUnVsZSxcbiAgICBNYXRjaGVyTGlzdDogcmVxdWlyZShcIi4vTWF0Y2hlckxpc3RcIikuTWF0Y2hlckxpc3Rcbn07XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NTUy9ALW1vei1kb2N1bWVudFxuICovXG5DU1NPTS5DU1NEb2N1bWVudFJ1bGUgPSBmdW5jdGlvbiBDU1NEb2N1bWVudFJ1bGUoKSB7XG4gICAgQ1NTT00uQ1NTUnVsZS5jYWxsKHRoaXMpO1xuICAgIHRoaXMubWF0Y2hlciA9IG5ldyBDU1NPTS5NYXRjaGVyTGlzdCgpO1xuICAgIHRoaXMuY3NzUnVsZXMgPSBbXTtcbn07XG5cbkNTU09NLkNTU0RvY3VtZW50UnVsZS5wcm90b3R5cGUgPSBuZXcgQ1NTT00uQ1NTUnVsZSgpO1xuQ1NTT00uQ1NTRG9jdW1lbnRSdWxlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENTU09NLkNTU0RvY3VtZW50UnVsZTtcbkNTU09NLkNTU0RvY3VtZW50UnVsZS5wcm90b3R5cGUudHlwZSA9IDEwO1xuLy9GSVhNRVxuLy9DU1NPTS5DU1NEb2N1bWVudFJ1bGUucHJvdG90eXBlLmluc2VydFJ1bGUgPSBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5pbnNlcnRSdWxlO1xuLy9DU1NPTS5DU1NEb2N1bWVudFJ1bGUucHJvdG90eXBlLmRlbGV0ZVJ1bGUgPSBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5kZWxldGVSdWxlO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ1NTT00uQ1NTRG9jdW1lbnRSdWxlLnByb3RvdHlwZSwgXCJjc3NUZXh0XCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY3NzVGV4dHMgPSBbXTtcbiAgICBmb3IgKHZhciBpPTAsIGxlbmd0aD10aGlzLmNzc1J1bGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNzc1RleHRzLnB1c2godGhpcy5jc3NSdWxlc1tpXS5jc3NUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIFwiQC1tb3otZG9jdW1lbnQgXCIgKyB0aGlzLm1hdGNoZXIubWF0Y2hlclRleHQgKyBcIiB7XCIgKyBjc3NUZXh0cy5qb2luKFwiXCIpICsgXCJ9XCI7XG4gIH1cbn0pO1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLkNTU0RvY3VtZW50UnVsZSA9IENTU09NLkNTU0RvY3VtZW50UnVsZTtcbi8vL0NvbW1vbkpTXG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge1xuXHRDU1NTdHlsZURlY2xhcmF0aW9uOiByZXF1aXJlKFwiLi9DU1NTdHlsZURlY2xhcmF0aW9uXCIpLkNTU1N0eWxlRGVjbGFyYXRpb24sXG5cdENTU1J1bGU6IHJlcXVpcmUoXCIuL0NTU1J1bGVcIikuQ1NTUnVsZVxufTtcbi8vL0NvbW1vbkpTXG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBzZWUgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI2Nzcy1mb250LWZhY2UtcnVsZVxuICovXG5DU1NPTS5DU1NGb250RmFjZVJ1bGUgPSBmdW5jdGlvbiBDU1NGb250RmFjZVJ1bGUoKSB7XG5cdENTU09NLkNTU1J1bGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdHlsZSA9IG5ldyBDU1NPTS5DU1NTdHlsZURlY2xhcmF0aW9uKCk7XG5cdHRoaXMuc3R5bGUucGFyZW50UnVsZSA9IHRoaXM7XG59O1xuXG5DU1NPTS5DU1NGb250RmFjZVJ1bGUucHJvdG90eXBlID0gbmV3IENTU09NLkNTU1J1bGUoKTtcbkNTU09NLkNTU0ZvbnRGYWNlUnVsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDU1NPTS5DU1NGb250RmFjZVJ1bGU7XG5DU1NPTS5DU1NGb250RmFjZVJ1bGUucHJvdG90eXBlLnR5cGUgPSA1O1xuLy9GSVhNRVxuLy9DU1NPTS5DU1NGb250RmFjZVJ1bGUucHJvdG90eXBlLmluc2VydFJ1bGUgPSBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5pbnNlcnRSdWxlO1xuLy9DU1NPTS5DU1NGb250RmFjZVJ1bGUucHJvdG90eXBlLmRlbGV0ZVJ1bGUgPSBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5kZWxldGVSdWxlO1xuXG4vLyBodHRwOi8vd3d3Lm9wZW5zb3VyY2UuYXBwbGUuY29tL3NvdXJjZS9XZWJDb3JlL1dlYkNvcmUtOTU1LjY2LjEvY3NzL1dlYktpdENTU0ZvbnRGYWNlUnVsZS5jcHBcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDU1NPTS5DU1NGb250RmFjZVJ1bGUucHJvdG90eXBlLCBcImNzc1RleHRcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIkBmb250LWZhY2Uge1wiICsgdGhpcy5zdHlsZS5jc3NUZXh0ICsgXCJ9XCI7XG4gIH1cbn0pO1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLkNTU0ZvbnRGYWNlUnVsZSA9IENTU09NLkNTU0ZvbnRGYWNlUnVsZTtcbi8vL0NvbW1vbkpTXG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge1xuXHRDU1NSdWxlOiByZXF1aXJlKFwiLi9DU1NSdWxlXCIpLkNTU1J1bGVcbn07XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3NoYWRvdy1kb20vI2hvc3QtYXQtcnVsZVxuICovXG5DU1NPTS5DU1NIb3N0UnVsZSA9IGZ1bmN0aW9uIENTU0hvc3RSdWxlKCkge1xuXHRDU1NPTS5DU1NSdWxlLmNhbGwodGhpcyk7XG5cdHRoaXMuY3NzUnVsZXMgPSBbXTtcbn07XG5cbkNTU09NLkNTU0hvc3RSdWxlLnByb3RvdHlwZSA9IG5ldyBDU1NPTS5DU1NSdWxlKCk7XG5DU1NPTS5DU1NIb3N0UnVsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDU1NPTS5DU1NIb3N0UnVsZTtcbkNTU09NLkNTU0hvc3RSdWxlLnByb3RvdHlwZS50eXBlID0gMTAwMTtcbi8vRklYTUVcbi8vQ1NTT00uQ1NTSG9zdFJ1bGUucHJvdG90eXBlLmluc2VydFJ1bGUgPSBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5pbnNlcnRSdWxlO1xuLy9DU1NPTS5DU1NIb3N0UnVsZS5wcm90b3R5cGUuZGVsZXRlUnVsZSA9IENTU1N0eWxlU2hlZXQucHJvdG90eXBlLmRlbGV0ZVJ1bGU7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDU1NPTS5DU1NIb3N0UnVsZS5wcm90b3R5cGUsIFwiY3NzVGV4dFwiLCB7XG5cdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNzc1RleHRzID0gW107XG5cdFx0Zm9yICh2YXIgaT0wLCBsZW5ndGg9dGhpcy5jc3NSdWxlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0Y3NzVGV4dHMucHVzaCh0aGlzLmNzc1J1bGVzW2ldLmNzc1RleHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJAaG9zdCB7XCIgKyBjc3NUZXh0cy5qb2luKFwiXCIpICsgXCJ9XCI7XG5cdH1cbn0pO1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLkNTU0hvc3RSdWxlID0gQ1NTT00uQ1NTSG9zdFJ1bGU7XG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHtcblx0Q1NTUnVsZTogcmVxdWlyZShcIi4vQ1NTUnVsZVwiKS5DU1NSdWxlLFxuXHRDU1NTdHlsZVNoZWV0OiByZXF1aXJlKFwiLi9DU1NTdHlsZVNoZWV0XCIpLkNTU1N0eWxlU2hlZXQsXG5cdE1lZGlhTGlzdDogcmVxdWlyZShcIi4vTWVkaWFMaXN0XCIpLk1lZGlhTGlzdFxufTtcbi8vL0NvbW1vbkpTXG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBzZWUgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI2Nzc2ltcG9ydHJ1bGVcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU0ltcG9ydFJ1bGVcbiAqL1xuQ1NTT00uQ1NTSW1wb3J0UnVsZSA9IGZ1bmN0aW9uIENTU0ltcG9ydFJ1bGUoKSB7XG5cdENTU09NLkNTU1J1bGUuY2FsbCh0aGlzKTtcblx0dGhpcy5ocmVmID0gXCJcIjtcblx0dGhpcy5tZWRpYSA9IG5ldyBDU1NPTS5NZWRpYUxpc3QoKTtcblx0dGhpcy5zdHlsZVNoZWV0ID0gbmV3IENTU09NLkNTU1N0eWxlU2hlZXQoKTtcbn07XG5cbkNTU09NLkNTU0ltcG9ydFJ1bGUucHJvdG90eXBlID0gbmV3IENTU09NLkNTU1J1bGUoKTtcbkNTU09NLkNTU0ltcG9ydFJ1bGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ1NTT00uQ1NTSW1wb3J0UnVsZTtcbkNTU09NLkNTU0ltcG9ydFJ1bGUucHJvdG90eXBlLnR5cGUgPSAzO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ1NTT00uQ1NTSW1wb3J0UnVsZS5wcm90b3R5cGUsIFwiY3NzVGV4dFwiLCB7XG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIG1lZGlhVGV4dCA9IHRoaXMubWVkaWEubWVkaWFUZXh0O1xuICAgIHJldHVybiBcIkBpbXBvcnQgdXJsKFwiICsgdGhpcy5ocmVmICsgXCIpXCIgKyAobWVkaWFUZXh0ID8gXCIgXCIgKyBtZWRpYVRleHQgOiBcIlwiKSArIFwiO1wiO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGNzc1RleHQpIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAaW1wb3J0IHVybChwYXJ0aWFsLmNzcykgc2NyZWVuLCBoYW5kaGVsZDtcbiAgICAgKiAgICAgICAgfHwgICAgICAgICAgICAgICB8XG4gICAgICogICAgICAgIGFmdGVyLWltcG9ydCAgICAgbWVkaWFcbiAgICAgKiAgICAgICAgIHxcbiAgICAgKiAgICAgICAgIHVybFxuICAgICAqL1xuICAgIHZhciBzdGF0ZSA9ICcnO1xuXG4gICAgdmFyIGJ1ZmZlciA9ICcnO1xuICAgIHZhciBpbmRleDtcbiAgICBmb3IgKHZhciBjaGFyYWN0ZXI7IChjaGFyYWN0ZXIgPSBjc3NUZXh0LmNoYXJBdChpKSk7IGkrKykge1xuXG4gICAgICBzd2l0Y2ggKGNoYXJhY3Rlcikge1xuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgY2FzZSAnXFx0JzpcbiAgICAgICAgY2FzZSAnXFxyJzpcbiAgICAgICAgY2FzZSAnXFxuJzpcbiAgICAgICAgY2FzZSAnXFxmJzpcbiAgICAgICAgICBpZiAoc3RhdGUgPT09ICdhZnRlci1pbXBvcnQnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9ICd1cmwnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gY2hhcmFjdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdAJzpcbiAgICAgICAgICBpZiAoIXN0YXRlICYmIGNzc1RleHQuaW5kZXhPZignQGltcG9ydCcsIGkpID09PSBpKSB7XG4gICAgICAgICAgICBzdGF0ZSA9ICdhZnRlci1pbXBvcnQnO1xuICAgICAgICAgICAgaSArPSAnaW1wb3J0Jy5sZW5ndGg7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgaWYgKHN0YXRlID09PSAndXJsJyAmJiBjc3NUZXh0LmluZGV4T2YoJ3VybCgnLCBpKSA9PT0gaSkge1xuICAgICAgICAgICAgaW5kZXggPSBjc3NUZXh0LmluZGV4T2YoJyknLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIHRocm93IGkgKyAnOiBcIilcIiBub3QgZm91bmQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSArPSAndXJsKCcubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHVybCA9IGNzc1RleHQuc2xpY2UoaSwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHVybFswXSA9PT0gdXJsW3VybC5sZW5ndGggLSAxXSkge1xuICAgICAgICAgICAgICBpZiAodXJsWzBdID09PSAnXCInIHx8IHVybFswXSA9PT0gXCInXCIpIHtcbiAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhyZWYgPSB1cmw7XG4gICAgICAgICAgICBpID0gaW5kZXg7XG4gICAgICAgICAgICBzdGF0ZSA9ICdtZWRpYSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgICBpZiAoc3RhdGUgPT09ICd1cmwnKSB7XG4gICAgICAgICAgICBpbmRleCA9IGNzc1RleHQuaW5kZXhPZignXCInLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIWluZGV4KSB7XG4gICAgICAgICAgICAgIHRocm93IGkgKyBcIjogJ1xcXCInIG5vdCBmb3VuZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ocmVmID0gY3NzVGV4dC5zbGljZShpICsgMSwgaW5kZXgpO1xuICAgICAgICAgICAgaSA9IGluZGV4O1xuICAgICAgICAgICAgc3RhdGUgPSAnbWVkaWEnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiJ1wiOlxuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ3VybCcpIHtcbiAgICAgICAgICAgIGluZGV4ID0gY3NzVGV4dC5pbmRleE9mKFwiJ1wiLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIWluZGV4KSB7XG4gICAgICAgICAgICAgIHRocm93IGkgKyAnOiBcIlxcJ1wiIG5vdCBmb3VuZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhyZWYgPSBjc3NUZXh0LnNsaWNlKGkgKyAxLCBpbmRleCk7XG4gICAgICAgICAgICBpID0gaW5kZXg7XG4gICAgICAgICAgICBzdGF0ZSA9ICdtZWRpYSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJzsnOlxuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ21lZGlhJykge1xuICAgICAgICAgICAgaWYgKGJ1ZmZlcikge1xuICAgICAgICAgICAgICB0aGlzLm1lZGlhLm1lZGlhVGV4dCA9IGJ1ZmZlci50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHN0YXRlID09PSAnbWVkaWEnKSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gY2hhcmFjdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLkNTU0ltcG9ydFJ1bGUgPSBDU1NPTS5DU1NJbXBvcnRSdWxlO1xuLy8vQ29tbW9uSlNcbiIsIi8vLkNvbW1vbkpTXG52YXIgQ1NTT00gPSB7XG5cdENTU1J1bGU6IHJlcXVpcmUoXCIuL0NTU1J1bGVcIikuQ1NTUnVsZSxcblx0Q1NTU3R5bGVEZWNsYXJhdGlvbjogcmVxdWlyZSgnLi9DU1NTdHlsZURlY2xhcmF0aW9uJykuQ1NTU3R5bGVEZWNsYXJhdGlvblxufTtcbi8vL0NvbW1vbkpTXG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1hbmltYXRpb25zLyNET00tQ1NTS2V5ZnJhbWVSdWxlXG4gKi9cbkNTU09NLkNTU0tleWZyYW1lUnVsZSA9IGZ1bmN0aW9uIENTU0tleWZyYW1lUnVsZSgpIHtcblx0Q1NTT00uQ1NTUnVsZS5jYWxsKHRoaXMpO1xuXHR0aGlzLmtleVRleHQgPSAnJztcblx0dGhpcy5zdHlsZSA9IG5ldyBDU1NPTS5DU1NTdHlsZURlY2xhcmF0aW9uKCk7XG5cdHRoaXMuc3R5bGUucGFyZW50UnVsZSA9IHRoaXM7XG59O1xuXG5DU1NPTS5DU1NLZXlmcmFtZVJ1bGUucHJvdG90eXBlID0gbmV3IENTU09NLkNTU1J1bGUoKTtcbkNTU09NLkNTU0tleWZyYW1lUnVsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDU1NPTS5DU1NLZXlmcmFtZVJ1bGU7XG5DU1NPTS5DU1NLZXlmcmFtZVJ1bGUucHJvdG90eXBlLnR5cGUgPSA5O1xuLy9GSVhNRVxuLy9DU1NPTS5DU1NLZXlmcmFtZVJ1bGUucHJvdG90eXBlLmluc2VydFJ1bGUgPSBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5pbnNlcnRSdWxlO1xuLy9DU1NPTS5DU1NLZXlmcmFtZVJ1bGUucHJvdG90eXBlLmRlbGV0ZVJ1bGUgPSBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5kZWxldGVSdWxlO1xuXG4vLyBodHRwOi8vd3d3Lm9wZW5zb3VyY2UuYXBwbGUuY29tL3NvdXJjZS9XZWJDb3JlL1dlYkNvcmUtOTU1LjY2LjEvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHBcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDU1NPTS5DU1NLZXlmcmFtZVJ1bGUucHJvdG90eXBlLCBcImNzc1RleHRcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmtleVRleHQgKyBcIiB7XCIgKyB0aGlzLnN0eWxlLmNzc1RleHQgKyBcIn0gXCI7XG4gIH1cbn0pO1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLkNTU0tleWZyYW1lUnVsZSA9IENTU09NLkNTU0tleWZyYW1lUnVsZTtcbi8vL0NvbW1vbkpTXG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge1xuXHRDU1NSdWxlOiByZXF1aXJlKFwiLi9DU1NSdWxlXCIpLkNTU1J1bGVcbn07XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtYW5pbWF0aW9ucy8jRE9NLUNTU0tleWZyYW1lc1J1bGVcbiAqL1xuQ1NTT00uQ1NTS2V5ZnJhbWVzUnVsZSA9IGZ1bmN0aW9uIENTU0tleWZyYW1lc1J1bGUoKSB7XG5cdENTU09NLkNTU1J1bGUuY2FsbCh0aGlzKTtcblx0dGhpcy5uYW1lID0gJyc7XG5cdHRoaXMuY3NzUnVsZXMgPSBbXTtcbn07XG5cbkNTU09NLkNTU0tleWZyYW1lc1J1bGUucHJvdG90eXBlID0gbmV3IENTU09NLkNTU1J1bGUoKTtcbkNTU09NLkNTU0tleWZyYW1lc1J1bGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ1NTT00uQ1NTS2V5ZnJhbWVzUnVsZTtcbkNTU09NLkNTU0tleWZyYW1lc1J1bGUucHJvdG90eXBlLnR5cGUgPSA4O1xuLy9GSVhNRVxuLy9DU1NPTS5DU1NLZXlmcmFtZXNSdWxlLnByb3RvdHlwZS5pbnNlcnRSdWxlID0gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuaW5zZXJ0UnVsZTtcbi8vQ1NTT00uQ1NTS2V5ZnJhbWVzUnVsZS5wcm90b3R5cGUuZGVsZXRlUnVsZSA9IENTU1N0eWxlU2hlZXQucHJvdG90eXBlLmRlbGV0ZVJ1bGU7XG5cbi8vIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5hcHBsZS5jb20vc291cmNlL1dlYkNvcmUvV2ViQ29yZS05NTUuNjYuMS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHBcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDU1NPTS5DU1NLZXlmcmFtZXNSdWxlLnByb3RvdHlwZSwgXCJjc3NUZXh0XCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY3NzVGV4dHMgPSBbXTtcbiAgICBmb3IgKHZhciBpPTAsIGxlbmd0aD10aGlzLmNzc1J1bGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBjc3NUZXh0cy5wdXNoKFwiICBcIiArIHRoaXMuY3NzUnVsZXNbaV0uY3NzVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBcIkBcIiArICh0aGlzLl92ZW5kb3JQcmVmaXggfHwgJycpICsgXCJrZXlmcmFtZXMgXCIgKyB0aGlzLm5hbWUgKyBcIiB7IFxcblwiICsgY3NzVGV4dHMuam9pbihcIlxcblwiKSArIFwiXFxufVwiO1xuICB9XG59KTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5DU1NLZXlmcmFtZXNSdWxlID0gQ1NTT00uQ1NTS2V5ZnJhbWVzUnVsZTtcbi8vL0NvbW1vbkpTXG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge1xuXHRDU1NSdWxlOiByZXF1aXJlKFwiLi9DU1NSdWxlXCIpLkNTU1J1bGUsXG5cdE1lZGlhTGlzdDogcmVxdWlyZShcIi4vTWVkaWFMaXN0XCIpLk1lZGlhTGlzdFxufTtcbi8vL0NvbW1vbkpTXG5cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBzZWUgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI2Nzc21lZGlhcnVsZVxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTTWVkaWFSdWxlXG4gKi9cbkNTU09NLkNTU01lZGlhUnVsZSA9IGZ1bmN0aW9uIENTU01lZGlhUnVsZSgpIHtcblx0Q1NTT00uQ1NTUnVsZS5jYWxsKHRoaXMpO1xuXHR0aGlzLm1lZGlhID0gbmV3IENTU09NLk1lZGlhTGlzdCgpO1xuXHR0aGlzLmNzc1J1bGVzID0gW107XG59O1xuXG5DU1NPTS5DU1NNZWRpYVJ1bGUucHJvdG90eXBlID0gbmV3IENTU09NLkNTU1J1bGUoKTtcbkNTU09NLkNTU01lZGlhUnVsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDU1NPTS5DU1NNZWRpYVJ1bGU7XG5DU1NPTS5DU1NNZWRpYVJ1bGUucHJvdG90eXBlLnR5cGUgPSA0O1xuLy9GSVhNRVxuLy9DU1NPTS5DU1NNZWRpYVJ1bGUucHJvdG90eXBlLmluc2VydFJ1bGUgPSBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5pbnNlcnRSdWxlO1xuLy9DU1NPTS5DU1NNZWRpYVJ1bGUucHJvdG90eXBlLmRlbGV0ZVJ1bGUgPSBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5kZWxldGVSdWxlO1xuXG4vLyBodHRwOi8vb3BlbnNvdXJjZS5hcHBsZS5jb20vc291cmNlL1dlYkNvcmUvV2ViQ29yZS02NTguMjgvY3NzL0NTU01lZGlhUnVsZS5jcHBcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDU1NPTS5DU1NNZWRpYVJ1bGUucHJvdG90eXBlLCBcImNzc1RleHRcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjc3NUZXh0cyA9IFtdO1xuICAgIGZvciAodmFyIGk9MCwgbGVuZ3RoPXRoaXMuY3NzUnVsZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGNzc1RleHRzLnB1c2godGhpcy5jc3NSdWxlc1tpXS5jc3NUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIFwiQG1lZGlhIFwiICsgdGhpcy5tZWRpYS5tZWRpYVRleHQgKyBcIiB7XCIgKyBjc3NUZXh0cy5qb2luKFwiXCIpICsgXCJ9XCI7XG4gIH1cbn0pO1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLkNTU01lZGlhUnVsZSA9IENTU09NLkNTU01lZGlhUnVsZTtcbi8vL0NvbW1vbkpTXG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge307XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAc2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyN0aGUtY3NzcnVsZS1pbnRlcmZhY2VcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1J1bGVcbiAqL1xuQ1NTT00uQ1NTUnVsZSA9IGZ1bmN0aW9uIENTU1J1bGUoKSB7XG5cdHRoaXMucGFyZW50UnVsZSA9IG51bGw7XG5cdHRoaXMucGFyZW50U3R5bGVTaGVldCA9IG51bGw7XG59O1xuXG5DU1NPTS5DU1NSdWxlLlVOS05PV05fUlVMRSA9IDA7ICAgICAgICAgICAgICAgICAvLyBvYnNvbGV0ZVxuQ1NTT00uQ1NTUnVsZS5TVFlMRV9SVUxFID0gMTtcbkNTU09NLkNTU1J1bGUuQ0hBUlNFVF9SVUxFID0gMjsgICAgICAgICAgICAgICAgIC8vIG9ic29sZXRlXG5DU1NPTS5DU1NSdWxlLklNUE9SVF9SVUxFID0gMztcbkNTU09NLkNTU1J1bGUuTUVESUFfUlVMRSA9IDQ7XG5DU1NPTS5DU1NSdWxlLkZPTlRfRkFDRV9SVUxFID0gNTtcbkNTU09NLkNTU1J1bGUuUEFHRV9SVUxFID0gNjtcbkNTU09NLkNTU1J1bGUuS0VZRlJBTUVTX1JVTEUgPSA3O1xuQ1NTT00uQ1NTUnVsZS5LRVlGUkFNRV9SVUxFID0gODtcbkNTU09NLkNTU1J1bGUuTUFSR0lOX1JVTEUgPSA5O1xuQ1NTT00uQ1NTUnVsZS5OQU1FU1BBQ0VfUlVMRSA9IDEwO1xuQ1NTT00uQ1NTUnVsZS5DT1VOVEVSX1NUWUxFX1JVTEUgPSAxMTtcbkNTU09NLkNTU1J1bGUuU1VQUE9SVFNfUlVMRSA9IDEyO1xuQ1NTT00uQ1NTUnVsZS5ET0NVTUVOVF9SVUxFID0gMTM7XG5DU1NPTS5DU1NSdWxlLkZPTlRfRkVBVFVSRV9WQUxVRVNfUlVMRSA9IDE0O1xuQ1NTT00uQ1NTUnVsZS5WSUVXUE9SVF9SVUxFID0gMTU7XG5DU1NPTS5DU1NSdWxlLlJFR0lPTl9TVFlMRV9SVUxFID0gMTY7XG5cblxuQ1NTT00uQ1NTUnVsZS5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBDU1NPTS5DU1NSdWxlXG5cdC8vRklYTUVcbn07XG5cblxuLy8uQ29tbW9uSlNcbmV4cG9ydHMuQ1NTUnVsZSA9IENTU09NLkNTU1J1bGU7XG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHt9O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTU3R5bGVEZWNsYXJhdGlvblxuICovXG5DU1NPTS5DU1NTdHlsZURlY2xhcmF0aW9uID0gZnVuY3Rpb24gQ1NTU3R5bGVEZWNsYXJhdGlvbigpe1xuXHR0aGlzLmxlbmd0aCA9IDA7XG5cdHRoaXMucGFyZW50UnVsZSA9IG51bGw7XG5cblx0Ly8gTk9OLVNUQU5EQVJEXG5cdHRoaXMuX2ltcG9ydGFudHMgPSB7fTtcbn07XG5cblxuQ1NTT00uQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUgPSB7XG5cblx0Y29uc3RydWN0b3I6IENTU09NLkNTU1N0eWxlRGVjbGFyYXRpb24sXG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1N0eWxlRGVjbGFyYXRpb24tZ2V0UHJvcGVydHlWYWx1ZVxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaWYgaXQgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQgZm9yIHRoaXMgZGVjbGFyYXRpb24gYmxvY2suXG5cdCAqIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBpZiB0aGUgcHJvcGVydHkgaGFzIG5vdCBiZWVuIHNldC5cblx0ICovXG5cdGdldFByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRyZXR1cm4gdGhpc1tuYW1lXSB8fCBcIlwiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtwcmlvcml0eT1udWxsXSBcImltcG9ydGFudFwiIG9yIG51bGxcblx0ICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTU3R5bGVEZWNsYXJhdGlvbi1zZXRQcm9wZXJ0eVxuXHQgKi9cblx0c2V0UHJvcGVydHk6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuXHRcdGlmICh0aGlzW25hbWVdKSB7XG5cdFx0XHQvLyBQcm9wZXJ0eSBhbHJlYWR5IGV4aXN0LiBPdmVyd3JpdGUgaXQuXG5cdFx0XHR2YXIgaW5kZXggPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsIG5hbWUpO1xuXHRcdFx0aWYgKGluZGV4IDwgMCkge1xuXHRcdFx0XHR0aGlzW3RoaXMubGVuZ3RoXSA9IG5hbWU7XG5cdFx0XHRcdHRoaXMubGVuZ3RoKys7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5ldyBwcm9wZXJ0eS5cblx0XHRcdHRoaXNbdGhpcy5sZW5ndGhdID0gbmFtZTtcblx0XHRcdHRoaXMubGVuZ3RoKys7XG5cdFx0fVxuXHRcdHRoaXNbbmFtZV0gPSB2YWx1ZSArIFwiXCI7XG5cdFx0dGhpcy5faW1wb3J0YW50c1tuYW1lXSA9IHByaW9yaXR5O1xuXHR9LFxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxlL2Nzcy5odG1sI0NTUy1DU1NTdHlsZURlY2xhcmF0aW9uLXJlbW92ZVByb3BlcnR5XG5cdCAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpZiBpdCBoYXMgYmVlbiBleHBsaWNpdGx5IHNldCBmb3IgdGhpcyBkZWNsYXJhdGlvbiBibG9jay5cblx0ICogUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZSBwcm9wZXJ0eSBoYXMgbm90IGJlZW4gc2V0IG9yIHRoZSBwcm9wZXJ0eSBuYW1lIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBrbm93biBDU1MgcHJvcGVydHkuXG5cdCAqL1xuXHRyZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24obmFtZSkge1xuXHRcdGlmICghKG5hbWUgaW4gdGhpcykpIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0XHR2YXIgaW5kZXggPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsIG5hbWUpO1xuXHRcdGlmIChpbmRleCA8IDApIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0XHR2YXIgcHJldlZhbHVlID0gdGhpc1tuYW1lXTtcblx0XHR0aGlzW25hbWVdID0gXCJcIjtcblxuXHRcdC8vIFRoYXQncyB3aGF0IFdlYktpdCBhbmQgT3BlcmEgZG9cblx0XHRBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGhpcywgaW5kZXgsIDEpO1xuXG5cdFx0Ly8gVGhhdCdzIHdoYXQgRmlyZWZveCBkb2VzXG5cdFx0Ly90aGlzW2luZGV4XSA9IFwiXCJcblxuXHRcdHJldHVybiBwcmV2VmFsdWU7XG5cdH0sXG5cblx0Z2V0UHJvcGVydHlDU1NWYWx1ZTogZnVuY3Rpb24oKSB7XG5cdFx0Ly9GSVhNRVxuXHR9LFxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQgKi9cblx0Z2V0UHJvcGVydHlQcmlvcml0eTogZnVuY3Rpb24obmFtZSkge1xuXHRcdHJldHVybiB0aGlzLl9pbXBvcnRhbnRzW25hbWVdIHx8IFwiXCI7XG5cdH0sXG5cblxuXHQvKipcblx0ICogICBlbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gXCJhdXRvXCJcblx0ICogICBlbGVtZW50LnN0eWxlLmdldFByb3BlcnR5U2hvcnRoYW5kKFwib3ZlcmZsb3cteFwiKVxuXHQgKiAgIC0+IFwib3ZlcmZsb3dcIlxuXHQgKi9cblx0Z2V0UHJvcGVydHlTaG9ydGhhbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdC8vRklYTUVcblx0fSxcblxuXHRpc1Byb3BlcnR5SW1wbGljaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdC8vRklYTUVcblx0fSxcblxuXHQvLyBEb2Vzbid0IHdvcmsgaW4gSUUgPCA5XG5cdGdldCBjc3NUZXh0KCl7XG5cdFx0dmFyIHByb3BlcnRpZXMgPSBbXTtcblx0XHRmb3IgKHZhciBpPTAsIGxlbmd0aD10aGlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0XHR2YXIgbmFtZSA9IHRoaXNbaV07XG5cdFx0XHR2YXIgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG5cdFx0XHR2YXIgcHJpb3JpdHkgPSB0aGlzLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSk7XG5cdFx0XHRpZiAocHJpb3JpdHkpIHtcblx0XHRcdFx0cHJpb3JpdHkgPSBcIiAhXCIgKyBwcmlvcml0eTtcblx0XHRcdH1cblx0XHRcdHByb3BlcnRpZXNbaV0gPSBuYW1lICsgXCI6IFwiICsgdmFsdWUgKyBwcmlvcml0eSArIFwiO1wiO1xuXHRcdH1cblx0XHRyZXR1cm4gcHJvcGVydGllcy5qb2luKFwiIFwiKTtcblx0fSxcblxuXHRzZXQgY3NzVGV4dCh0ZXh0KXtcblx0XHR2YXIgaSwgbmFtZTtcblx0XHRmb3IgKGkgPSB0aGlzLmxlbmd0aDsgaS0tOykge1xuXHRcdFx0bmFtZSA9IHRoaXNbaV07XG5cdFx0XHR0aGlzW25hbWVdID0gXCJcIjtcblx0XHR9XG5cdFx0QXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRoaXMsIDAsIHRoaXMubGVuZ3RoKTtcblx0XHR0aGlzLl9pbXBvcnRhbnRzID0ge307XG5cblx0XHR2YXIgZHVtbXlSdWxlID0gQ1NTT00ucGFyc2UoJyNib2d1c3snICsgdGV4dCArICd9JykuY3NzUnVsZXNbMF0uc3R5bGU7XG5cdFx0dmFyIGxlbmd0aCA9IGR1bW15UnVsZS5sZW5ndGg7XG5cdFx0Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG5cdFx0XHRuYW1lID0gZHVtbXlSdWxlW2ldO1xuXHRcdFx0dGhpcy5zZXRQcm9wZXJ0eShkdW1teVJ1bGVbaV0sIGR1bW15UnVsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpLCBkdW1teVJ1bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKSk7XG5cdFx0fVxuXHR9XG59O1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBDU1NPTS5DU1NTdHlsZURlY2xhcmF0aW9uO1xuQ1NTT00ucGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJykucGFyc2U7IC8vIENhbm5vdCBiZSBpbmNsdWRlZCBzb29uZXIgZHVlIHRvIHRoZSBtdXR1YWwgZGVwZW5kZW5jeSBiZXR3ZWVuIHBhcnNlLmpzIGFuZCBDU1NTdHlsZURlY2xhcmF0aW9uLmpzXG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHtcblx0Q1NTU3R5bGVEZWNsYXJhdGlvbjogcmVxdWlyZShcIi4vQ1NTU3R5bGVEZWNsYXJhdGlvblwiKS5DU1NTdHlsZURlY2xhcmF0aW9uLFxuXHRDU1NSdWxlOiByZXF1aXJlKFwiLi9DU1NSdWxlXCIpLkNTU1J1bGVcbn07XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAc2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNjc3NzdHlsZXJ1bGVcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1N0eWxlUnVsZVxuICovXG5DU1NPTS5DU1NTdHlsZVJ1bGUgPSBmdW5jdGlvbiBDU1NTdHlsZVJ1bGUoKSB7XG5cdENTU09NLkNTU1J1bGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zZWxlY3RvclRleHQgPSBcIlwiO1xuXHR0aGlzLnN0eWxlID0gbmV3IENTU09NLkNTU1N0eWxlRGVjbGFyYXRpb24oKTtcblx0dGhpcy5zdHlsZS5wYXJlbnRSdWxlID0gdGhpcztcbn07XG5cbkNTU09NLkNTU1N0eWxlUnVsZS5wcm90b3R5cGUgPSBuZXcgQ1NTT00uQ1NTUnVsZSgpO1xuQ1NTT00uQ1NTU3R5bGVSdWxlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENTU09NLkNTU1N0eWxlUnVsZTtcbkNTU09NLkNTU1N0eWxlUnVsZS5wcm90b3R5cGUudHlwZSA9IDE7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDU1NPTS5DU1NTdHlsZVJ1bGUucHJvdG90eXBlLCBcImNzc1RleHRcIiwge1xuXHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0ZXh0O1xuXHRcdGlmICh0aGlzLnNlbGVjdG9yVGV4dCkge1xuXHRcdFx0dGV4dCA9IHRoaXMuc2VsZWN0b3JUZXh0ICsgXCIge1wiICsgdGhpcy5zdHlsZS5jc3NUZXh0ICsgXCJ9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRleHQgPSBcIlwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGV4dDtcblx0fSxcblx0c2V0OiBmdW5jdGlvbihjc3NUZXh0KSB7XG5cdFx0dmFyIHJ1bGUgPSBDU1NPTS5DU1NTdHlsZVJ1bGUucGFyc2UoY3NzVGV4dCk7XG5cdFx0dGhpcy5zdHlsZSA9IHJ1bGUuc3R5bGU7XG5cdFx0dGhpcy5zZWxlY3RvclRleHQgPSBydWxlLnNlbGVjdG9yVGV4dDtcblx0fVxufSk7XG5cblxuLyoqXG4gKiBOT04tU1RBTkRBUkRcbiAqIGxpZ2h0d2VpZ2h0IHZlcnNpb24gb2YgcGFyc2UuanMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcnVsZVRleHRcbiAqIEByZXR1cm4gQ1NTU3R5bGVSdWxlXG4gKi9cbkNTU09NLkNTU1N0eWxlUnVsZS5wYXJzZSA9IGZ1bmN0aW9uKHJ1bGVUZXh0KSB7XG5cdHZhciBpID0gMDtcblx0dmFyIHN0YXRlID0gXCJzZWxlY3RvclwiO1xuXHR2YXIgaW5kZXg7XG5cdHZhciBqID0gaTtcblx0dmFyIGJ1ZmZlciA9IFwiXCI7XG5cblx0dmFyIFNJR05JRklDQU5UX1dISVRFU1BBQ0UgPSB7XG5cdFx0XCJzZWxlY3RvclwiOiB0cnVlLFxuXHRcdFwidmFsdWVcIjogdHJ1ZVxuXHR9O1xuXG5cdHZhciBzdHlsZVJ1bGUgPSBuZXcgQ1NTT00uQ1NTU3R5bGVSdWxlKCk7XG5cdHZhciBuYW1lLCBwcmlvcml0eT1cIlwiO1xuXG5cdGZvciAodmFyIGNoYXJhY3RlcjsgKGNoYXJhY3RlciA9IHJ1bGVUZXh0LmNoYXJBdChpKSk7IGkrKykge1xuXG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblxuXHRcdGNhc2UgXCIgXCI6XG5cdFx0Y2FzZSBcIlxcdFwiOlxuXHRcdGNhc2UgXCJcXHJcIjpcblx0XHRjYXNlIFwiXFxuXCI6XG5cdFx0Y2FzZSBcIlxcZlwiOlxuXHRcdFx0aWYgKFNJR05JRklDQU5UX1dISVRFU1BBQ0Vbc3RhdGVdKSB7XG5cdFx0XHRcdC8vIFNxdWFzaCAyIG9yIG1vcmUgd2hpdGUtc3BhY2VzIGluIHRoZSByb3cgaW50byAxXG5cdFx0XHRcdHN3aXRjaCAocnVsZVRleHQuY2hhckF0KGkgLSAxKSkge1xuXHRcdFx0XHRcdGNhc2UgXCIgXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlxcdFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJcXHJcIjpcblx0XHRcdFx0XHRjYXNlIFwiXFxuXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlxcZlwiOlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGJ1ZmZlciArPSBcIiBcIjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdC8vIFN0cmluZ1xuXHRcdGNhc2UgJ1wiJzpcblx0XHRcdGogPSBpICsgMTtcblx0XHRcdGluZGV4ID0gcnVsZVRleHQuaW5kZXhPZignXCInLCBqKSArIDE7XG5cdFx0XHRpZiAoIWluZGV4KSB7XG5cdFx0XHRcdHRocm93ICdcIiBpcyBtaXNzaW5nJztcblx0XHRcdH1cblx0XHRcdGJ1ZmZlciArPSBydWxlVGV4dC5zbGljZShpLCBpbmRleCk7XG5cdFx0XHRpID0gaW5kZXggLSAxO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiJ1wiOlxuXHRcdFx0aiA9IGkgKyAxO1xuXHRcdFx0aW5kZXggPSBydWxlVGV4dC5pbmRleE9mKFwiJ1wiLCBqKSArIDE7XG5cdFx0XHRpZiAoIWluZGV4KSB7XG5cdFx0XHRcdHRocm93IFwiJyBpcyBtaXNzaW5nXCI7XG5cdFx0XHR9XG5cdFx0XHRidWZmZXIgKz0gcnVsZVRleHQuc2xpY2UoaSwgaW5kZXgpO1xuXHRcdFx0aSA9IGluZGV4IC0gMTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Ly8gQ29tbWVudFxuXHRcdGNhc2UgXCIvXCI6XG5cdFx0XHRpZiAocnVsZVRleHQuY2hhckF0KGkgKyAxKSA9PT0gXCIqXCIpIHtcblx0XHRcdFx0aSArPSAyO1xuXHRcdFx0XHRpbmRleCA9IHJ1bGVUZXh0LmluZGV4T2YoXCIqL1wiLCBpKTtcblx0XHRcdFx0aWYgKGluZGV4ID09PSAtMSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcIk1pc3NpbmcgKi9cIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IGluZGV4ICsgMTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVmZmVyICs9IGNoYXJhY3Rlcjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIntcIjpcblx0XHRcdGlmIChzdGF0ZSA9PT0gXCJzZWxlY3RvclwiKSB7XG5cdFx0XHRcdHN0eWxlUnVsZS5zZWxlY3RvclRleHQgPSBidWZmZXIudHJpbSgpO1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRzdGF0ZSA9IFwibmFtZVwiO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiOlwiOlxuXHRcdFx0aWYgKHN0YXRlID09PSBcIm5hbWVcIikge1xuXHRcdFx0XHRuYW1lID0gYnVmZmVyLnRyaW0oKTtcblx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0c3RhdGUgPSBcInZhbHVlXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiIVwiOlxuXHRcdFx0aWYgKHN0YXRlID09PSBcInZhbHVlXCIgJiYgcnVsZVRleHQuaW5kZXhPZihcIiFpbXBvcnRhbnRcIiwgaSkgPT09IGkpIHtcblx0XHRcdFx0cHJpb3JpdHkgPSBcImltcG9ydGFudFwiO1xuXHRcdFx0XHRpICs9IFwiaW1wb3J0YW50XCIubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVmZmVyICs9IGNoYXJhY3Rlcjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIjtcIjpcblx0XHRcdGlmIChzdGF0ZSA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRcdHN0eWxlUnVsZS5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCBidWZmZXIudHJpbSgpLCBwcmlvcml0eSk7XG5cdFx0XHRcdHByaW9yaXR5ID0gXCJcIjtcblx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0c3RhdGUgPSBcIm5hbWVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJ9XCI6XG5cdFx0XHRpZiAoc3RhdGUgPT09IFwidmFsdWVcIikge1xuXHRcdFx0XHRzdHlsZVJ1bGUuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgYnVmZmVyLnRyaW0oKSwgcHJpb3JpdHkpO1xuXHRcdFx0XHRwcmlvcml0eSA9IFwiXCI7XG5cdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHN0YXRlID09PSBcIm5hbWVcIikge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHR9XG5cdFx0XHRzdGF0ZSA9IFwic2VsZWN0b3JcIjtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHRicmVhaztcblxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdHlsZVJ1bGU7XG5cbn07XG5cblxuLy8uQ29tbW9uSlNcbmV4cG9ydHMuQ1NTU3R5bGVSdWxlID0gQ1NTT00uQ1NTU3R5bGVSdWxlO1xuLy8vQ29tbW9uSlNcbiIsIi8vLkNvbW1vbkpTXG52YXIgQ1NTT00gPSB7XG5cdFN0eWxlU2hlZXQ6IHJlcXVpcmUoXCIuL1N0eWxlU2hlZXRcIikuU3R5bGVTaGVldCxcblx0Q1NTU3R5bGVSdWxlOiByZXF1aXJlKFwiLi9DU1NTdHlsZVJ1bGVcIikuQ1NTU3R5bGVSdWxlXG59O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTU3R5bGVTaGVldFxuICovXG5DU1NPTS5DU1NTdHlsZVNoZWV0ID0gZnVuY3Rpb24gQ1NTU3R5bGVTaGVldCgpIHtcblx0Q1NTT00uU3R5bGVTaGVldC5jYWxsKHRoaXMpO1xuXHR0aGlzLmNzc1J1bGVzID0gW107XG59O1xuXG5cbkNTU09NLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlID0gbmV3IENTU09NLlN0eWxlU2hlZXQoKTtcbkNTU09NLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ1NTT00uQ1NTU3R5bGVTaGVldDtcblxuXG4vKipcbiAqIFVzZWQgdG8gaW5zZXJ0IGEgbmV3IHJ1bGUgaW50byB0aGUgc3R5bGUgc2hlZXQuIFRoZSBuZXcgcnVsZSBub3cgYmVjb21lcyBwYXJ0IG9mIHRoZSBjYXNjYWRlLlxuICpcbiAqICAgc2hlZXQgPSBuZXcgU2hlZXQoXCJib2R5IHttYXJnaW46IDB9XCIpXG4gKiAgIHNoZWV0LnRvU3RyaW5nKClcbiAqICAgLT4gXCJib2R5e21hcmdpbjowO31cIlxuICogICBzaGVldC5pbnNlcnRSdWxlKFwiaW1nIHtib3JkZXI6IG5vbmV9XCIsIDApXG4gKiAgIC0+IDBcbiAqICAgc2hlZXQudG9TdHJpbmcoKVxuICogICAtPiBcImltZ3tib3JkZXI6bm9uZTt9Ym9keXttYXJnaW46MDt9XCJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcnVsZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxlL2Nzcy5odG1sI0NTUy1DU1NTdHlsZVNoZWV0LWluc2VydFJ1bGVcbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGluZGV4IHdpdGhpbiB0aGUgc3R5bGUgc2hlZXQncyBydWxlIGNvbGxlY3Rpb24gb2YgdGhlIG5ld2x5IGluc2VydGVkIHJ1bGUuXG4gKi9cbkNTU09NLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLmluc2VydFJ1bGUgPSBmdW5jdGlvbihydWxlLCBpbmRleCkge1xuXHRpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGhpcy5jc3NSdWxlcy5sZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIklOREVYX1NJWkVfRVJSXCIpO1xuXHR9XG5cdHZhciBjc3NSdWxlID0gQ1NTT00ucGFyc2UocnVsZSkuY3NzUnVsZXNbMF07XG5cdGNzc1J1bGUucGFyZW50U3R5bGVTaGVldCA9IHRoaXM7XG5cdHRoaXMuY3NzUnVsZXMuc3BsaWNlKGluZGV4LCAwLCBjc3NSdWxlKTtcblx0cmV0dXJuIGluZGV4O1xufTtcblxuXG4vKipcbiAqIFVzZWQgdG8gZGVsZXRlIGEgcnVsZSBmcm9tIHRoZSBzdHlsZSBzaGVldC5cbiAqXG4gKiAgIHNoZWV0ID0gbmV3IFNoZWV0KFwiaW1ne2JvcmRlcjpub25lfSBib2R5e21hcmdpbjowfVwiKVxuICogICBzaGVldC50b1N0cmluZygpXG4gKiAgIC0+IFwiaW1ne2JvcmRlcjpub25lO31ib2R5e21hcmdpbjowO31cIlxuICogICBzaGVldC5kZWxldGVSdWxlKDApXG4gKiAgIHNoZWV0LnRvU3RyaW5nKClcbiAqICAgLT4gXCJib2R5e21hcmdpbjowO31cIlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCB3aXRoaW4gdGhlIHN0eWxlIHNoZWV0J3MgcnVsZSBsaXN0IG9mIHRoZSBydWxlIHRvIHJlbW92ZS5cbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1N0eWxlU2hlZXQtZGVsZXRlUnVsZVxuICovXG5DU1NPTS5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5kZWxldGVSdWxlID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNzc1J1bGVzLmxlbmd0aCkge1xuXHRcdHRocm93IG5ldyBSYW5nZUVycm9yKFwiSU5ERVhfU0laRV9FUlJcIik7XG5cdH1cblx0dGhpcy5jc3NSdWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xufTtcblxuXG4vKipcbiAqIE5PTi1TVEFOREFSRFxuICogQHJldHVybiB7c3RyaW5nfSBzZXJpYWxpemUgc3R5bGVzaGVldFxuICovXG5DU1NPTS5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgcmVzdWx0ID0gXCJcIjtcblx0dmFyIHJ1bGVzID0gdGhpcy5jc3NSdWxlcztcblx0Zm9yICh2YXIgaT0wOyBpPHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0cmVzdWx0ICs9IHJ1bGVzW2ldLmNzc1RleHQgKyBcIlxcblwiO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vLkNvbW1vbkpTXG5leHBvcnRzLkNTU1N0eWxlU2hlZXQgPSBDU1NPTS5DU1NTdHlsZVNoZWV0O1xuQ1NTT00ucGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJykucGFyc2U7IC8vIENhbm5vdCBiZSBpbmNsdWRlZCBzb29uZXIgZHVlIHRvIHRoZSBtdXR1YWwgZGVwZW5kZW5jeSBiZXR3ZWVuIHBhcnNlLmpzIGFuZCBDU1NTdHlsZVNoZWV0LmpzXG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHt9O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTVmFsdWVcbiAqXG4gKiBUT0RPOiBhZGQgaWYgbmVlZGVkXG4gKi9cbkNTU09NLkNTU1ZhbHVlID0gZnVuY3Rpb24gQ1NTVmFsdWUoKSB7XG59O1xuXG5DU1NPTS5DU1NWYWx1ZS5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBDU1NPTS5DU1NWYWx1ZSxcblxuXHQvLyBAc2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTVmFsdWVcblx0c2V0IGNzc1RleHQodGV4dCkge1xuXHRcdHZhciBuYW1lID0gdGhpcy5fZ2V0Q29uc3RydWN0b3JOYW1lKCk7XG5cblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0RPTUV4Y2VwdGlvbjogcHJvcGVydHkgXCJjc3NUZXh0XCIgb2YgXCInICsgbmFtZSArICdcIiBpcyByZWFkb25seSBhbmQgY2FuIG5vdCBiZSByZXBsYWNlZCB3aXRoIFwiJyArIHRleHQgKyAnXCIhJyk7XG5cdH0sXG5cblx0Z2V0IGNzc1RleHQoKSB7XG5cdFx0dmFyIG5hbWUgPSB0aGlzLl9nZXRDb25zdHJ1Y3Rvck5hbWUoKTtcblxuXHRcdHRocm93IG5ldyBFcnJvcignZ2V0dGVyIFwiY3NzVGV4dFwiIG9mIFwiJyArIG5hbWUgKyAnXCIgaXMgbm90IGltcGxlbWVudGVkIScpO1xuXHR9LFxuXG5cdF9nZXRDb25zdHJ1Y3Rvck5hbWU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzID0gdGhpcy5jb25zdHJ1Y3Rvci50b1N0cmluZygpLFxuXHRcdFx0XHRjID0gcy5tYXRjaCgvZnVuY3Rpb25cXHMoW15cXChdKykvKSxcblx0XHRcdFx0bmFtZSA9IGNbMV07XG5cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5DU1NWYWx1ZSA9IENTU09NLkNTU1ZhbHVlO1xuLy8vQ29tbW9uSlNcbiIsIi8vLkNvbW1vbkpTXG52YXIgQ1NTT00gPSB7XG5cdENTU1ZhbHVlOiByZXF1aXJlKCcuL0NTU1ZhbHVlJykuQ1NTVmFsdWVcbn07XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAc2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNzYzNCh2PXZzLjg1KS5hc3B4XG4gKlxuICovXG5DU1NPTS5DU1NWYWx1ZUV4cHJlc3Npb24gPSBmdW5jdGlvbiBDU1NWYWx1ZUV4cHJlc3Npb24odG9rZW4sIGlkeCkge1xuXHR0aGlzLl90b2tlbiA9IHRva2VuO1xuXHR0aGlzLl9pZHggPSBpZHg7XG59O1xuXG5DU1NPTS5DU1NWYWx1ZUV4cHJlc3Npb24ucHJvdG90eXBlID0gbmV3IENTU09NLkNTU1ZhbHVlKCk7XG5DU1NPTS5DU1NWYWx1ZUV4cHJlc3Npb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ1NTT00uQ1NTVmFsdWVFeHByZXNzaW9uO1xuXG4vKipcbiAqIHBhcnNlIGNzcyBleHByZXNzaW9uKCkgdmFsdWVcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiAgICAgICAgIC0gZXJyb3I6XG4gKiAgICAgICAgIG9yXG4gKiAgICAgICAgIC0gaWR4OlxuICogICAgICAgICAtIGV4cHJlc3Npb246XG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAuc2VsZWN0b3Ige1xuICpcdFx0em9vbTogZXhwcmVzc2lvbihkb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggPiAxMDAwID8gJzEwMDBweCcgOiAnYXV0bycpO1xuICogfVxuICovXG5DU1NPTS5DU1NWYWx1ZUV4cHJlc3Npb24ucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0b2tlbiA9IHRoaXMuX3Rva2VuLFxuXHRcdFx0aWR4ID0gdGhpcy5faWR4O1xuXG5cdHZhciBjaGFyYWN0ZXIgPSAnJyxcblx0XHRcdGV4cHJlc3Npb24gPSAnJyxcblx0XHRcdGVycm9yID0gJycsXG5cdFx0XHRpbmZvLFxuXHRcdFx0cGFyZW4gPSBbXTtcblxuXG5cdGZvciAoOyA7ICsraWR4KSB7XG5cdFx0Y2hhcmFjdGVyID0gdG9rZW4uY2hhckF0KGlkeCk7XG5cblx0XHQvLyBlbmQgb2YgdG9rZW5cblx0XHRpZiAoY2hhcmFjdGVyID09PSAnJykge1xuXHRcdFx0ZXJyb3IgPSAnY3NzIGV4cHJlc3Npb24gZXJyb3I6IHVuZmluaXNoZWQgZXhwcmVzc2lvbiEnO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0c3dpdGNoKGNoYXJhY3Rlcikge1xuXHRcdFx0Y2FzZSAnKCc6XG5cdFx0XHRcdHBhcmVuLnB1c2goY2hhcmFjdGVyKTtcblx0XHRcdFx0ZXhwcmVzc2lvbiArPSBjaGFyYWN0ZXI7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlICcpJzpcblx0XHRcdFx0cGFyZW4ucG9wKGNoYXJhY3Rlcik7XG5cdFx0XHRcdGV4cHJlc3Npb24gKz0gY2hhcmFjdGVyO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSAnLyc6XG5cdFx0XHRcdGlmICgoaW5mbyA9IHRoaXMuX3BhcnNlSlNDb21tZW50KHRva2VuLCBpZHgpKSkgeyAvLyBjb21tZW50P1xuXHRcdFx0XHRcdGlmIChpbmZvLmVycm9yKSB7XG5cdFx0XHRcdFx0XHRlcnJvciA9ICdjc3MgZXhwcmVzc2lvbiBlcnJvcjogdW5maW5pc2hlZCBjb21tZW50IGluIGV4cHJlc3Npb24hJztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWR4ID0gaW5mby5pZHg7XG5cdFx0XHRcdFx0XHQvLyBpZ25vcmUgdGhlIGNvbW1lbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoKGluZm8gPSB0aGlzLl9wYXJzZUpTUmV4RXhwKHRva2VuLCBpZHgpKSkgeyAvLyByZWdleHBcblx0XHRcdFx0XHRpZHggPSBpbmZvLmlkeDtcblx0XHRcdFx0XHRleHByZXNzaW9uICs9IGluZm8udGV4dDtcblx0XHRcdFx0fSBlbHNlIHsgLy8gb3RoZXJcblx0XHRcdFx0XHRleHByZXNzaW9uICs9IGNoYXJhY3Rlcjtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIidcIjpcblx0XHRcdGNhc2UgJ1wiJzpcblx0XHRcdFx0aW5mbyA9IHRoaXMuX3BhcnNlSlNTdHJpbmcodG9rZW4sIGlkeCwgY2hhcmFjdGVyKTtcblx0XHRcdFx0aWYgKGluZm8pIHsgLy8gc3RyaW5nXG5cdFx0XHRcdFx0aWR4ID0gaW5mby5pZHg7XG5cdFx0XHRcdFx0ZXhwcmVzc2lvbiArPSBpbmZvLnRleHQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZXhwcmVzc2lvbiArPSBjaGFyYWN0ZXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGV4cHJlc3Npb24gKz0gY2hhcmFjdGVyO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRpZiAoZXJyb3IpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdC8vIGVuZCBvZiBleHByZXNzaW9uXG5cdFx0aWYgKHBhcmVuLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHJldDtcblx0aWYgKGVycm9yKSB7XG5cdFx0cmV0ID0ge1xuXHRcdFx0ZXJyb3I6IGVycm9yXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRyZXQgPSB7XG5cdFx0XHRpZHg6IGlkeCxcblx0XHRcdGV4cHJlc3Npb246IGV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxuLyoqXG4gKlxuICogQHJldHVybiB7T2JqZWN0fGZhbHNlfVxuICogICAgICAgICAgLSBpZHg6XG4gKiAgICAgICAgICAtIHRleHQ6XG4gKiAgICAgICAgICBvclxuICogICAgICAgICAgLSBlcnJvcjpcbiAqICAgICAgICAgIG9yXG4gKiAgICAgICAgICBmYWxzZVxuICpcbiAqL1xuQ1NTT00uQ1NTVmFsdWVFeHByZXNzaW9uLnByb3RvdHlwZS5fcGFyc2VKU0NvbW1lbnQgPSBmdW5jdGlvbih0b2tlbiwgaWR4KSB7XG5cdHZhciBuZXh0Q2hhciA9IHRva2VuLmNoYXJBdChpZHggKyAxKSxcblx0XHRcdHRleHQ7XG5cblx0aWYgKG5leHRDaGFyID09PSAnLycgfHwgbmV4dENoYXIgPT09ICcqJykge1xuXHRcdHZhciBzdGFydElkeCA9IGlkeCxcblx0XHRcdFx0ZW5kSWR4LFxuXHRcdFx0XHRjb21tZW50RW5kQ2hhcjtcblxuXHRcdGlmIChuZXh0Q2hhciA9PT0gJy8nKSB7IC8vIGxpbmUgY29tbWVudFxuXHRcdFx0Y29tbWVudEVuZENoYXIgPSAnXFxuJztcblx0XHR9IGVsc2UgaWYgKG5leHRDaGFyID09PSAnKicpIHsgLy8gYmxvY2sgY29tbWVudFxuXHRcdFx0Y29tbWVudEVuZENoYXIgPSAnKi8nO1xuXHRcdH1cblxuXHRcdGVuZElkeCA9IHRva2VuLmluZGV4T2YoY29tbWVudEVuZENoYXIsIHN0YXJ0SWR4ICsgMSArIDEpO1xuXHRcdGlmIChlbmRJZHggIT09IC0xKSB7XG5cdFx0XHRlbmRJZHggPSBlbmRJZHggKyBjb21tZW50RW5kQ2hhci5sZW5ndGggLSAxO1xuXHRcdFx0dGV4dCA9IHRva2VuLnN1YnN0cmluZyhpZHgsIGVuZElkeCArIDEpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aWR4OiBlbmRJZHgsXG5cdFx0XHRcdHRleHQ6IHRleHRcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBlcnJvciA9ICdjc3MgZXhwcmVzc2lvbiBlcnJvcjogdW5maW5pc2hlZCBjb21tZW50IGluIGV4cHJlc3Npb24hJztcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGVycm9yOiBlcnJvclxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG5cbi8qKlxuICpcbiAqIEByZXR1cm4ge09iamVjdHxmYWxzZX1cbiAqXHRcdFx0XHRcdC0gaWR4OlxuICpcdFx0XHRcdFx0LSB0ZXh0OlxuICpcdFx0XHRcdFx0b3IgXG4gKlx0XHRcdFx0XHRmYWxzZVxuICpcbiAqL1xuQ1NTT00uQ1NTVmFsdWVFeHByZXNzaW9uLnByb3RvdHlwZS5fcGFyc2VKU1N0cmluZyA9IGZ1bmN0aW9uKHRva2VuLCBpZHgsIHNlcCkge1xuXHR2YXIgZW5kSWR4ID0gdGhpcy5fZmluZE1hdGNoZWRJZHgodG9rZW4sIGlkeCwgc2VwKSxcblx0XHRcdHRleHQ7XG5cblx0aWYgKGVuZElkeCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0dGV4dCA9IHRva2VuLnN1YnN0cmluZyhpZHgsIGVuZElkeCArIHNlcC5sZW5ndGgpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGlkeDogZW5kSWR4LFxuXHRcdFx0dGV4dDogdGV4dFxuXHRcdH07XG5cdH1cbn07XG5cblxuLyoqXG4gKiBwYXJzZSByZWdleHAgaW4gY3NzIGV4cHJlc3Npb25cbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R8ZmFsc2V9XG4gKlx0XHRcdFx0LSBpZHg6XG4gKlx0XHRcdFx0LSByZWdFeHA6XG4gKlx0XHRcdFx0b3IgXG4gKlx0XHRcdFx0ZmFsc2VcbiAqL1xuXG4vKlxuXG5hbGwgbGVnYWwgUmVnRXhwXG4gXG4vYS9cbigvYS8pXG5bL2EvXVxuWzEyLCAvYS9dXG5cbiEvYS9cblxuKy9hL1xuLS9hL1xuKiAvYS9cbi8gL2EvXG4lL2EvXG5cbj09PS9hL1xuIT09L2EvXG49PS9hL1xuIT0vYS9cbj4vYS9cbj49L2EvXG48L2EvXG48PS9hL1xuXG4mL2EvXG58L2EvXG5eL2EvXG5+L2EvXG48PC9hL1xuPj4vYS9cbj4+Pi9hL1xuXG4mJi9hL1xufHwvYS9cbj8vYS9cbj0vYS9cbiwvYS9cblxuXHRcdGRlbGV0ZSAvYS9cblx0XHRcdFx0aW4gL2EvXG5pbnN0YW5jZW9mIC9hL1xuXHRcdFx0XHRuZXcgL2EvXG5cdFx0dHlwZW9mIC9hL1xuXHRcdFx0dm9pZCAvYS9cblxuKi9cbkNTU09NLkNTU1ZhbHVlRXhwcmVzc2lvbi5wcm90b3R5cGUuX3BhcnNlSlNSZXhFeHAgPSBmdW5jdGlvbih0b2tlbiwgaWR4KSB7XG5cdHZhciBiZWZvcmUgPSB0b2tlbi5zdWJzdHJpbmcoMCwgaWR4KS5yZXBsYWNlKC9cXHMrJC8sIFwiXCIpLFxuXHRcdFx0bGVnYWxSZWd4ID0gW1xuXHRcdFx0XHQvXiQvLFxuXHRcdFx0XHQvXFwoJC8sXG5cdFx0XHRcdC9cXFskLyxcblx0XHRcdFx0L1xcISQvLFxuXHRcdFx0XHQvXFwrJC8sXG5cdFx0XHRcdC9cXC0kLyxcblx0XHRcdFx0L1xcKiQvLFxuXHRcdFx0XHQvXFwvXFxzKy8sXG5cdFx0XHRcdC9cXCUkLyxcblx0XHRcdFx0L1xcPSQvLFxuXHRcdFx0XHQvXFw+JC8sXG5cdFx0XHRcdC88JC8sXG5cdFx0XHRcdC9cXCYkLyxcblx0XHRcdFx0L1xcfCQvLFxuXHRcdFx0XHQvXFxeJC8sXG5cdFx0XHRcdC9cXH4kLyxcblx0XHRcdFx0L1xcPyQvLFxuXHRcdFx0XHQvXFwsJC8sXG5cdFx0XHRcdC9kZWxldGUkLyxcblx0XHRcdFx0L2luJC8sXG5cdFx0XHRcdC9pbnN0YW5jZW9mJC8sXG5cdFx0XHRcdC9uZXckLyxcblx0XHRcdFx0L3R5cGVvZiQvLFxuXHRcdFx0XHQvdm9pZCQvXG5cdFx0XHRdO1xuXG5cdHZhciBpc0xlZ2FsID0gbGVnYWxSZWd4LnNvbWUoZnVuY3Rpb24ocmVnKSB7XG5cdFx0cmV0dXJuIHJlZy50ZXN0KGJlZm9yZSk7XG5cdH0pO1xuXG5cdGlmICghaXNMZWdhbCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHR2YXIgc2VwID0gJy8nO1xuXG5cdFx0Ly8gc2FtZSBsb2dpYyBhcyBzdHJpbmdcblx0XHRyZXR1cm4gdGhpcy5fcGFyc2VKU1N0cmluZyh0b2tlbiwgaWR4LCBzZXApO1xuXHR9XG59O1xuXG5cbi8qKlxuICpcbiAqIGZpbmQgbmV4dCBzZXAoc2FtZSBsaW5lKSBpbmRleCBpbiBgdG9rZW5gXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICpcbiAqL1xuQ1NTT00uQ1NTVmFsdWVFeHByZXNzaW9uLnByb3RvdHlwZS5fZmluZE1hdGNoZWRJZHggPSBmdW5jdGlvbih0b2tlbiwgaWR4LCBzZXApIHtcblx0dmFyIHN0YXJ0SWR4ID0gaWR4LFxuXHRcdFx0ZW5kSWR4O1xuXG5cdHZhciBOT1RfRk9VTkQgPSAtMTtcblxuXHR3aGlsZSh0cnVlKSB7XG5cdFx0ZW5kSWR4ID0gdG9rZW4uaW5kZXhPZihzZXAsIHN0YXJ0SWR4ICsgMSk7XG5cblx0XHRpZiAoZW5kSWR4ID09PSAtMSkgeyAvLyBub3QgZm91bmRcblx0XHRcdGVuZElkeCA9IE5PVF9GT1VORDtcblx0XHRcdGJyZWFrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgdGV4dCA9IHRva2VuLnN1YnN0cmluZyhpZHggKyAxLCBlbmRJZHgpLFxuXHRcdFx0XHRcdG1hdGNoZWQgPSB0ZXh0Lm1hdGNoKC9cXFxcKyQvKTtcblx0XHRcdGlmICghbWF0Y2hlZCB8fCBtYXRjaGVkWzBdICUgMiA9PT0gMCkgeyAvLyBub3QgZXNjYXBlZFxuXHRcdFx0XHRicmVhaztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YXJ0SWR4ID0gZW5kSWR4O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGJvdW5kYXJ5IG11c3QgYmUgaW4gdGhlIHNhbWUgbGluZShqcyBzdGluZyBvciByZWdleHApXG5cdHZhciBuZXh0TmV3TGluZUlkeCA9IHRva2VuLmluZGV4T2YoJ1xcbicsIGlkeCArIDEpO1xuXHRpZiAobmV4dE5ld0xpbmVJZHggPCBlbmRJZHgpIHtcblx0XHRlbmRJZHggPSBOT1RfRk9VTkQ7XG5cdH1cblxuXG5cdHJldHVybiBlbmRJZHg7XG59O1xuXG5cblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5DU1NWYWx1ZUV4cHJlc3Npb24gPSBDU1NPTS5DU1NWYWx1ZUV4cHJlc3Npb247XG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHt9O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9DU1MvQC1tb3otZG9jdW1lbnRcbiAqL1xuQ1NTT00uTWF0Y2hlckxpc3QgPSBmdW5jdGlvbiBNYXRjaGVyTGlzdCgpe1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbn07XG5cbkNTU09NLk1hdGNoZXJMaXN0LnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBDU1NPTS5NYXRjaGVyTGlzdCxcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKi9cbiAgICBnZXQgbWF0Y2hlclRleHQoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMsIFwiLCBcIik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgICAqL1xuICAgIHNldCBtYXRjaGVyVGV4dCh2YWx1ZSkge1xuICAgICAgICAvLyBqdXN0IGEgdGVtcG9yYXJ5IHNvbHV0aW9uLCBhY3R1YWxseSBpdCBtYXkgYmUgd3JvbmcgYnkganVzdCBzcGxpdCB0aGUgdmFsdWUgd2l0aCAnLCcsIGJlY2F1c2UgYSB1cmwgY2FuIGluY2x1ZGUgJywnLlxuICAgICAgICB2YXIgdmFsdWVzID0gdmFsdWUuc3BsaXQoXCIsXCIpO1xuICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggPSB2YWx1ZXMubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8bGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXNbaV0gPSB2YWx1ZXNbaV0udHJpbSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtYXRjaGVyXG4gICAgICovXG4gICAgYXBwZW5kTWF0Y2hlcjogZnVuY3Rpb24obWF0Y2hlcikge1xuICAgICAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLCBtYXRjaGVyKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXNbdGhpcy5sZW5ndGhdID0gbWF0Y2hlcjtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1hdGNoZXJcbiAgICAgKi9cbiAgICBkZWxldGVNYXRjaGVyOiBmdW5jdGlvbihtYXRjaGVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcywgbWF0Y2hlcik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbCh0aGlzLCBpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbn07XG5cblxuLy8uQ29tbW9uSlNcbmV4cG9ydHMuTWF0Y2hlckxpc3QgPSBDU1NPTS5NYXRjaGVyTGlzdDtcbi8vL0NvbW1vbkpTXG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge307XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAc2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyN0aGUtbWVkaWFsaXN0LWludGVyZmFjZVxuICovXG5DU1NPTS5NZWRpYUxpc3QgPSBmdW5jdGlvbiBNZWRpYUxpc3QoKXtcblx0dGhpcy5sZW5ndGggPSAwO1xufTtcblxuQ1NTT00uTWVkaWFMaXN0LnByb3RvdHlwZSA9IHtcblxuXHRjb25zdHJ1Y3RvcjogQ1NTT00uTWVkaWFMaXN0LFxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgbWVkaWFUZXh0KCkge1xuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMsIFwiLCBcIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuXHQgKi9cblx0c2V0IG1lZGlhVGV4dCh2YWx1ZSkge1xuXHRcdHZhciB2YWx1ZXMgPSB2YWx1ZS5zcGxpdChcIixcIik7XG5cdFx0dmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblx0XHRmb3IgKHZhciBpPTA7IGk8bGVuZ3RoOyBpKyspIHtcblx0XHRcdHRoaXNbaV0gPSB2YWx1ZXNbaV0udHJpbSgpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lZGl1bVxuXHQgKi9cblx0YXBwZW5kTWVkaXVtOiBmdW5jdGlvbihtZWRpdW0pIHtcblx0XHRpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLCBtZWRpdW0pID09PSAtMSkge1xuXHRcdFx0dGhpc1t0aGlzLmxlbmd0aF0gPSBtZWRpdW07XG5cdFx0XHR0aGlzLmxlbmd0aCsrO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lZGl1bVxuXHQgKi9cblx0ZGVsZXRlTWVkaXVtOiBmdW5jdGlvbihtZWRpdW0pIHtcblx0XHR2YXIgaW5kZXggPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMsIG1lZGl1bSk7XG5cdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0QXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRoaXMsIGluZGV4LCAxKTtcblx0XHR9XG5cdH1cblxufTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5NZWRpYUxpc3QgPSBDU1NPTS5NZWRpYUxpc3Q7XG4vLy9Db21tb25KU1xuIiwiLy8uQ29tbW9uSlNcbnZhciBDU1NPTSA9IHt9O1xuLy8vQ29tbW9uSlNcblxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jdGhlLXN0eWxlc2hlZXQtaW50ZXJmYWNlXG4gKi9cbkNTU09NLlN0eWxlU2hlZXQgPSBmdW5jdGlvbiBTdHlsZVNoZWV0KCkge1xuXHR0aGlzLnBhcmVudFN0eWxlU2hlZXQgPSBudWxsO1xufTtcblxuXG4vLy5Db21tb25KU1xuZXhwb3J0cy5TdHlsZVNoZWV0ID0gQ1NTT00uU3R5bGVTaGVldDtcbi8vL0NvbW1vbkpTXG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge1xuXHRDU1NTdHlsZVNoZWV0OiByZXF1aXJlKFwiLi9DU1NTdHlsZVNoZWV0XCIpLkNTU1N0eWxlU2hlZXQsXG5cdENTU1N0eWxlUnVsZTogcmVxdWlyZShcIi4vQ1NTU3R5bGVSdWxlXCIpLkNTU1N0eWxlUnVsZSxcblx0Q1NTTWVkaWFSdWxlOiByZXF1aXJlKFwiLi9DU1NNZWRpYVJ1bGVcIikuQ1NTTWVkaWFSdWxlLFxuXHRDU1NTdHlsZURlY2xhcmF0aW9uOiByZXF1aXJlKFwiLi9DU1NTdHlsZURlY2xhcmF0aW9uXCIpLkNTU1N0eWxlRGVjbGFyYXRpb24sXG5cdENTU0tleWZyYW1lUnVsZTogcmVxdWlyZSgnLi9DU1NLZXlmcmFtZVJ1bGUnKS5DU1NLZXlmcmFtZVJ1bGUsXG5cdENTU0tleWZyYW1lc1J1bGU6IHJlcXVpcmUoJy4vQ1NTS2V5ZnJhbWVzUnVsZScpLkNTU0tleWZyYW1lc1J1bGVcbn07XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogUHJvZHVjZXMgYSBkZWVwIGNvcHkgb2Ygc3R5bGVzaGVldCDigJQgdGhlIGluc3RhbmNlIHZhcmlhYmxlcyBvZiBzdHlsZXNoZWV0IGFyZSBjb3BpZWQgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0ge0NTU1N0eWxlU2hlZXR8Q1NTT00uQ1NTU3R5bGVTaGVldH0gc3R5bGVzaGVldFxuICogQG5vc2lkZWVmZmVjdHNcbiAqIEByZXR1cm4ge0NTU09NLkNTU1N0eWxlU2hlZXR9XG4gKi9cbkNTU09NLmNsb25lID0gZnVuY3Rpb24gY2xvbmUoc3R5bGVzaGVldCkge1xuXG5cdHZhciBjbG9uZWQgPSBuZXcgQ1NTT00uQ1NTU3R5bGVTaGVldCgpO1xuXG5cdHZhciBydWxlcyA9IHN0eWxlc2hlZXQuY3NzUnVsZXM7XG5cdGlmICghcnVsZXMpIHtcblx0XHRyZXR1cm4gY2xvbmVkO1xuXHR9XG5cblx0dmFyIFJVTEVfVFlQRVMgPSB7XG5cdFx0MTogQ1NTT00uQ1NTU3R5bGVSdWxlLFxuXHRcdDQ6IENTU09NLkNTU01lZGlhUnVsZSxcblx0XHQvLzM6IENTU09NLkNTU0ltcG9ydFJ1bGUsXG5cdFx0Ly81OiBDU1NPTS5DU1NGb250RmFjZVJ1bGUsXG5cdFx0Ly82OiBDU1NPTS5DU1NQYWdlUnVsZSxcblx0XHQ4OiBDU1NPTS5DU1NLZXlmcmFtZXNSdWxlLFxuXHRcdDk6IENTU09NLkNTU0tleWZyYW1lUnVsZVxuXHR9O1xuXG5cdGZvciAodmFyIGk9MCwgcnVsZXNMZW5ndGg9cnVsZXMubGVuZ3RoOyBpIDwgcnVsZXNMZW5ndGg7IGkrKykge1xuXHRcdHZhciBydWxlID0gcnVsZXNbaV07XG5cdFx0dmFyIHJ1bGVDbG9uZSA9IGNsb25lZC5jc3NSdWxlc1tpXSA9IG5ldyBSVUxFX1RZUEVTW3J1bGUudHlwZV0oKTtcblxuXHRcdHZhciBzdHlsZSA9IHJ1bGUuc3R5bGU7XG5cdFx0aWYgKHN0eWxlKSB7XG5cdFx0XHR2YXIgc3R5bGVDbG9uZSA9IHJ1bGVDbG9uZS5zdHlsZSA9IG5ldyBDU1NPTS5DU1NTdHlsZURlY2xhcmF0aW9uKCk7XG5cdFx0XHRmb3IgKHZhciBqPTAsIHN0eWxlTGVuZ3RoPXN0eWxlLmxlbmd0aDsgaiA8IHN0eWxlTGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0dmFyIG5hbWUgPSBzdHlsZUNsb25lW2pdID0gc3R5bGVbal07XG5cdFx0XHRcdHN0eWxlQ2xvbmVbbmFtZV0gPSBzdHlsZVtuYW1lXTtcblx0XHRcdFx0c3R5bGVDbG9uZS5faW1wb3J0YW50c1tuYW1lXSA9IHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSk7XG5cdFx0XHR9XG5cdFx0XHRzdHlsZUNsb25lLmxlbmd0aCA9IHN0eWxlLmxlbmd0aDtcblx0XHR9XG5cblx0XHRpZiAocnVsZS5oYXNPd25Qcm9wZXJ0eSgna2V5VGV4dCcpKSB7XG5cdFx0XHRydWxlQ2xvbmUua2V5VGV4dCA9IHJ1bGUua2V5VGV4dDtcblx0XHR9XG5cblx0XHRpZiAocnVsZS5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0b3JUZXh0JykpIHtcblx0XHRcdHJ1bGVDbG9uZS5zZWxlY3RvclRleHQgPSBydWxlLnNlbGVjdG9yVGV4dDtcblx0XHR9XG5cblx0XHRpZiAocnVsZS5oYXNPd25Qcm9wZXJ0eSgnbWVkaWFUZXh0JykpIHtcblx0XHRcdHJ1bGVDbG9uZS5tZWRpYVRleHQgPSBydWxlLm1lZGlhVGV4dDtcblx0XHR9XG5cblx0XHRpZiAocnVsZS5oYXNPd25Qcm9wZXJ0eSgnY3NzUnVsZXMnKSkge1xuXHRcdFx0cnVsZUNsb25lLmNzc1J1bGVzID0gY2xvbmUocnVsZSkuY3NzUnVsZXM7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNsb25lZDtcblxufTtcblxuLy8uQ29tbW9uSlNcbmV4cG9ydHMuY2xvbmUgPSBDU1NPTS5jbG9uZTtcbi8vL0NvbW1vbkpTXG4iLCJleHBvcnRzLkNTU1N0eWxlRGVjbGFyYXRpb24gPSByZXF1aXJlKFwiLi9DU1NTdHlsZURlY2xhcmF0aW9uXCIpLkNTU1N0eWxlRGVjbGFyYXRpb247XG5leHBvcnRzLkNTU1J1bGUgPSByZXF1aXJlKFwiLi9DU1NSdWxlXCIpLkNTU1J1bGU7XG5leHBvcnRzLkNTU1N0eWxlUnVsZSA9IHJlcXVpcmUoXCIuL0NTU1N0eWxlUnVsZVwiKS5DU1NTdHlsZVJ1bGU7XG5leHBvcnRzLkNTU0ltcG9ydFJ1bGUgPSByZXF1aXJlKFwiLi9DU1NJbXBvcnRSdWxlXCIpLkNTU0ltcG9ydFJ1bGU7XG5leHBvcnRzLk1lZGlhTGlzdCA9IHJlcXVpcmUoXCIuL01lZGlhTGlzdFwiKS5NZWRpYUxpc3Q7XG5leHBvcnRzLkNTU01lZGlhUnVsZSA9IHJlcXVpcmUoXCIuL0NTU01lZGlhUnVsZVwiKS5DU1NNZWRpYVJ1bGU7XG5leHBvcnRzLlN0eWxlU2hlZXQgPSByZXF1aXJlKFwiLi9TdHlsZVNoZWV0XCIpLlN0eWxlU2hlZXQ7XG5leHBvcnRzLkNTU1N0eWxlU2hlZXQgPSByZXF1aXJlKFwiLi9DU1NTdHlsZVNoZWV0XCIpLkNTU1N0eWxlU2hlZXQ7XG5leHBvcnRzLnBhcnNlID0gcmVxdWlyZShcIi4vcGFyc2VcIikucGFyc2U7XG5leHBvcnRzLmNsb25lID0gcmVxdWlyZShcIi4vY2xvbmVcIikuY2xvbmU7XG4iLCIvLy5Db21tb25KU1xudmFyIENTU09NID0ge307XG4vLy9Db21tb25KU1xuXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKi9cbkNTU09NLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UodG9rZW4pIHtcblxuXHR2YXIgaSA9IDA7XG5cblx0LyoqXG5cdFx0XCJiZWZvcmUtc2VsZWN0b3JcIiBvclxuXHRcdFwic2VsZWN0b3JcIiBvclxuXHRcdFwiYXRSdWxlXCIgb3Jcblx0XHRcImF0QmxvY2tcIiBvclxuXHRcdFwiYmVmb3JlLW5hbWVcIiBvclxuXHRcdFwibmFtZVwiIG9yXG5cdFx0XCJiZWZvcmUtdmFsdWVcIiBvclxuXHRcdFwidmFsdWVcIlxuXHQqL1xuXHR2YXIgc3RhdGUgPSBcImJlZm9yZS1zZWxlY3RvclwiO1xuXG5cdHZhciBpbmRleDtcblx0dmFyIGJ1ZmZlciA9IFwiXCI7XG5cdHZhciB2YWx1ZVBhcmVudGhlc2lzRGVwdGggPSAwO1xuXG5cdHZhciBTSUdOSUZJQ0FOVF9XSElURVNQQUNFID0ge1xuXHRcdFwic2VsZWN0b3JcIjogdHJ1ZSxcblx0XHRcInZhbHVlXCI6IHRydWUsXG5cdFx0XCJ2YWx1ZS1wYXJlbnRoZXNpc1wiOiB0cnVlLFxuXHRcdFwiYXRSdWxlXCI6IHRydWUsXG5cdFx0XCJpbXBvcnRSdWxlLWJlZ2luXCI6IHRydWUsXG5cdFx0XCJpbXBvcnRSdWxlXCI6IHRydWUsXG5cdFx0XCJhdEJsb2NrXCI6IHRydWUsXG5cdFx0J2RvY3VtZW50UnVsZS1iZWdpbic6IHRydWVcblx0fTtcblxuXHR2YXIgc3R5bGVTaGVldCA9IG5ldyBDU1NPTS5DU1NTdHlsZVNoZWV0KCk7XG5cblx0Ly8gQHR5cGUgQ1NTU3R5bGVTaGVldHxDU1NNZWRpYVJ1bGV8Q1NTRm9udEZhY2VSdWxlfENTU0tleWZyYW1lc1J1bGV8Q1NTRG9jdW1lbnRSdWxlXG5cdHZhciBjdXJyZW50U2NvcGUgPSBzdHlsZVNoZWV0O1xuXG5cdC8vIEB0eXBlIENTU01lZGlhUnVsZXxDU1NLZXlmcmFtZXNSdWxlfENTU0RvY3VtZW50UnVsZVxuXHR2YXIgcGFyZW50UnVsZTtcblxuXHR2YXIgbmFtZSwgcHJpb3JpdHk9XCJcIiwgc3R5bGVSdWxlLCBtZWRpYVJ1bGUsIGltcG9ydFJ1bGUsIGZvbnRGYWNlUnVsZSwga2V5ZnJhbWVzUnVsZSwgZG9jdW1lbnRSdWxlLCBob3N0UnVsZTtcblxuXHR2YXIgYXRLZXlmcmFtZXNSZWdFeHAgPSAvQCgtKD86XFx3Ky0pKyk/a2V5ZnJhbWVzL2c7XG5cblx0dmFyIHBhcnNlRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0dmFyIGxpbmVzID0gdG9rZW4uc3Vic3RyaW5nKDAsIGkpLnNwbGl0KCdcXG4nKTtcblx0XHR2YXIgbGluZUNvdW50ID0gbGluZXMubGVuZ3RoO1xuXHRcdHZhciBjaGFyQ291bnQgPSBsaW5lcy5wb3AoKS5sZW5ndGggKyAxO1xuXHRcdHZhciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlICsgJyAobGluZSAnICsgbGluZUNvdW50ICsgJywgY2hhciAnICsgY2hhckNvdW50ICsgJyknKTtcblx0XHRlcnJvci5saW5lID0gbGluZUNvdW50O1xuXHRcdC8qIGpzaGludCBzdWIgOiB0cnVlICovXG5cdFx0ZXJyb3JbJ2NoYXInXSA9IGNoYXJDb3VudDtcblx0XHRlcnJvci5zdHlsZVNoZWV0ID0gc3R5bGVTaGVldDtcblx0XHR0aHJvdyBlcnJvcjtcblx0fTtcblxuXHRmb3IgKHZhciBjaGFyYWN0ZXI7IChjaGFyYWN0ZXIgPSB0b2tlbi5jaGFyQXQoaSkpOyBpKyspIHtcblxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cblx0XHRjYXNlIFwiIFwiOlxuXHRcdGNhc2UgXCJcXHRcIjpcblx0XHRjYXNlIFwiXFxyXCI6XG5cdFx0Y2FzZSBcIlxcblwiOlxuXHRcdGNhc2UgXCJcXGZcIjpcblx0XHRcdGlmIChTSUdOSUZJQ0FOVF9XSElURVNQQUNFW3N0YXRlXSkge1xuXHRcdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cblx0XHQvLyBTdHJpbmdcblx0XHRjYXNlICdcIic6XG5cdFx0XHRpbmRleCA9IGkgKyAxO1xuXHRcdFx0ZG8ge1xuXHRcdFx0XHRpbmRleCA9IHRva2VuLmluZGV4T2YoJ1wiJywgaW5kZXgpICsgMTtcblx0XHRcdFx0aWYgKCFpbmRleCkge1xuXHRcdFx0XHRcdHBhcnNlRXJyb3IoJ1VubWF0Y2hlZCBcIicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IHdoaWxlICh0b2tlbltpbmRleCAtIDJdID09PSAnXFxcXCcpO1xuXHRcdFx0YnVmZmVyICs9IHRva2VuLnNsaWNlKGksIGluZGV4KTtcblx0XHRcdGkgPSBpbmRleCAtIDE7XG5cdFx0XHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0XHRcdGNhc2UgJ2JlZm9yZS12YWx1ZSc6XG5cdFx0XHRcdFx0c3RhdGUgPSAndmFsdWUnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdpbXBvcnRSdWxlLWJlZ2luJzpcblx0XHRcdFx0XHRzdGF0ZSA9ICdpbXBvcnRSdWxlJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIidcIjpcblx0XHRcdGluZGV4ID0gaSArIDE7XG5cdFx0XHRkbyB7XG5cdFx0XHRcdGluZGV4ID0gdG9rZW4uaW5kZXhPZihcIidcIiwgaW5kZXgpICsgMTtcblx0XHRcdFx0aWYgKCFpbmRleCkge1xuXHRcdFx0XHRcdHBhcnNlRXJyb3IoXCJVbm1hdGNoZWQgJ1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSB3aGlsZSAodG9rZW5baW5kZXggLSAyXSA9PT0gJ1xcXFwnKTtcblx0XHRcdGJ1ZmZlciArPSB0b2tlbi5zbGljZShpLCBpbmRleCk7XG5cdFx0XHRpID0gaW5kZXggLSAxO1xuXHRcdFx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdiZWZvcmUtdmFsdWUnOlxuXHRcdFx0XHRcdHN0YXRlID0gJ3ZhbHVlJztcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnaW1wb3J0UnVsZS1iZWdpbic6XG5cdFx0XHRcdFx0c3RhdGUgPSAnaW1wb3J0UnVsZSc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdC8vIENvbW1lbnRcblx0XHRjYXNlIFwiL1wiOlxuXHRcdFx0aWYgKHRva2VuLmNoYXJBdChpICsgMSkgPT09IFwiKlwiKSB7XG5cdFx0XHRcdGkgKz0gMjtcblx0XHRcdFx0aW5kZXggPSB0b2tlbi5pbmRleE9mKFwiKi9cIiwgaSk7XG5cdFx0XHRcdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHRcdFx0XHRwYXJzZUVycm9yKFwiTWlzc2luZyAqL1wiKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpID0gaW5kZXggKyAxO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0YXRlID09PSBcImltcG9ydFJ1bGUtYmVnaW5cIikge1xuXHRcdFx0XHRidWZmZXIgKz0gXCIgXCI7XG5cdFx0XHRcdHN0YXRlID0gXCJpbXBvcnRSdWxlXCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdC8vIEF0LXJ1bGVcblx0XHRjYXNlIFwiQFwiOlxuXHRcdFx0aWYgKHRva2VuLmluZGV4T2YoXCJALW1vei1kb2N1bWVudFwiLCBpKSA9PT0gaSkge1xuXHRcdFx0XHRzdGF0ZSA9IFwiZG9jdW1lbnRSdWxlLWJlZ2luXCI7XG5cdFx0XHRcdGRvY3VtZW50UnVsZSA9IG5ldyBDU1NPTS5DU1NEb2N1bWVudFJ1bGUoKTtcblx0XHRcdFx0ZG9jdW1lbnRSdWxlLl9fc3RhcnRzID0gaTtcblx0XHRcdFx0aSArPSBcIi1tb3otZG9jdW1lbnRcIi5sZW5ndGg7XG5cdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fSBlbHNlIGlmICh0b2tlbi5pbmRleE9mKFwiQG1lZGlhXCIsIGkpID09PSBpKSB7XG5cdFx0XHRcdHN0YXRlID0gXCJhdEJsb2NrXCI7XG5cdFx0XHRcdG1lZGlhUnVsZSA9IG5ldyBDU1NPTS5DU1NNZWRpYVJ1bGUoKTtcblx0XHRcdFx0bWVkaWFSdWxlLl9fc3RhcnRzID0gaTtcblx0XHRcdFx0aSArPSBcIm1lZGlhXCIubGVuZ3RoO1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH0gZWxzZSBpZiAodG9rZW4uaW5kZXhPZihcIkBob3N0XCIsIGkpID09PSBpKSB7XG5cdFx0XHRcdHN0YXRlID0gXCJob3N0UnVsZS1iZWdpblwiO1xuXHRcdFx0XHRpICs9IFwiaG9zdFwiLmxlbmd0aDtcblx0XHRcdFx0aG9zdFJ1bGUgPSBuZXcgQ1NTT00uQ1NTSG9zdFJ1bGUoKTtcblx0XHRcdFx0aG9zdFJ1bGUuX19zdGFydHMgPSBpO1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH0gZWxzZSBpZiAodG9rZW4uaW5kZXhPZihcIkBpbXBvcnRcIiwgaSkgPT09IGkpIHtcblx0XHRcdFx0c3RhdGUgPSBcImltcG9ydFJ1bGUtYmVnaW5cIjtcblx0XHRcdFx0aSArPSBcImltcG9ydFwiLmxlbmd0aDtcblx0XHRcdFx0YnVmZmVyICs9IFwiQGltcG9ydFwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH0gZWxzZSBpZiAodG9rZW4uaW5kZXhPZihcIkBmb250LWZhY2VcIiwgaSkgPT09IGkpIHtcblx0XHRcdFx0c3RhdGUgPSBcImZvbnRGYWNlUnVsZS1iZWdpblwiO1xuXHRcdFx0XHRpICs9IFwiZm9udC1mYWNlXCIubGVuZ3RoO1xuXHRcdFx0XHRmb250RmFjZVJ1bGUgPSBuZXcgQ1NTT00uQ1NTRm9udEZhY2VSdWxlKCk7XG5cdFx0XHRcdGZvbnRGYWNlUnVsZS5fX3N0YXJ0cyA9IGk7XG5cdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YXRLZXlmcmFtZXNSZWdFeHAubGFzdEluZGV4ID0gaTtcblx0XHRcdFx0dmFyIG1hdGNoS2V5ZnJhbWVzID0gYXRLZXlmcmFtZXNSZWdFeHAuZXhlYyh0b2tlbik7XG5cdFx0XHRcdGlmIChtYXRjaEtleWZyYW1lcyAmJiBtYXRjaEtleWZyYW1lcy5pbmRleCA9PT0gaSkge1xuXHRcdFx0XHRcdHN0YXRlID0gXCJrZXlmcmFtZXNSdWxlLWJlZ2luXCI7XG5cdFx0XHRcdFx0a2V5ZnJhbWVzUnVsZSA9IG5ldyBDU1NPTS5DU1NLZXlmcmFtZXNSdWxlKCk7XG5cdFx0XHRcdFx0a2V5ZnJhbWVzUnVsZS5fX3N0YXJ0cyA9IGk7XG5cdFx0XHRcdFx0a2V5ZnJhbWVzUnVsZS5fdmVuZG9yUHJlZml4ID0gbWF0Y2hLZXlmcmFtZXNbMV07IC8vIFdpbGwgY29tZSBvdXQgYXMgdW5kZWZpbmVkIGlmIG5vIHByZWZpeCB3YXMgZm91bmRcblx0XHRcdFx0XHRpICs9IG1hdGNoS2V5ZnJhbWVzWzBdLmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gXCJzZWxlY3RvclwiKSB7XG5cdFx0XHRcdFx0c3RhdGUgPSBcImF0UnVsZVwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwie1wiOlxuXHRcdFx0aWYgKHN0YXRlID09PSBcInNlbGVjdG9yXCIgfHwgc3RhdGUgPT09IFwiYXRSdWxlXCIpIHtcblx0XHRcdFx0c3R5bGVSdWxlLnNlbGVjdG9yVGV4dCA9IGJ1ZmZlci50cmltKCk7XG5cdFx0XHRcdHN0eWxlUnVsZS5zdHlsZS5fX3N0YXJ0cyA9IGk7XG5cdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdHN0YXRlID0gXCJiZWZvcmUtbmFtZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gXCJhdEJsb2NrXCIpIHtcblx0XHRcdFx0bWVkaWFSdWxlLm1lZGlhLm1lZGlhVGV4dCA9IGJ1ZmZlci50cmltKCk7XG5cdFx0XHRcdGN1cnJlbnRTY29wZSA9IHBhcmVudFJ1bGUgPSBtZWRpYVJ1bGU7XG5cdFx0XHRcdG1lZGlhUnVsZS5wYXJlbnRTdHlsZVNoZWV0ID0gc3R5bGVTaGVldDtcblx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0c3RhdGUgPSBcImJlZm9yZS1zZWxlY3RvclwiO1xuXHRcdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gXCJob3N0UnVsZS1iZWdpblwiKSB7XG5cdFx0XHRcdGN1cnJlbnRTY29wZSA9IHBhcmVudFJ1bGUgPSBob3N0UnVsZTtcblx0XHRcdFx0aG9zdFJ1bGUucGFyZW50U3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7XG5cdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdHN0YXRlID0gXCJiZWZvcmUtc2VsZWN0b3JcIjtcblx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09IFwiZm9udEZhY2VSdWxlLWJlZ2luXCIpIHtcblx0XHRcdFx0aWYgKHBhcmVudFJ1bGUpIHtcblx0XHRcdFx0XHRmb250RmFjZVJ1bGUucGFyZW50UnVsZSA9IHBhcmVudFJ1bGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9udEZhY2VSdWxlLnBhcmVudFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0O1xuXHRcdFx0XHRzdHlsZVJ1bGUgPSBmb250RmFjZVJ1bGU7XG5cdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdHN0YXRlID0gXCJiZWZvcmUtbmFtZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gXCJrZXlmcmFtZXNSdWxlLWJlZ2luXCIpIHtcblx0XHRcdFx0a2V5ZnJhbWVzUnVsZS5uYW1lID0gYnVmZmVyLnRyaW0oKTtcblx0XHRcdFx0aWYgKHBhcmVudFJ1bGUpIHtcblx0XHRcdFx0XHRrZXlmcmFtZXNSdWxlLnBhcmVudFJ1bGUgPSBwYXJlbnRSdWxlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGtleWZyYW1lc1J1bGUucGFyZW50U3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7XG5cdFx0XHRcdGN1cnJlbnRTY29wZSA9IHBhcmVudFJ1bGUgPSBrZXlmcmFtZXNSdWxlO1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRzdGF0ZSA9IFwia2V5ZnJhbWVSdWxlLWJlZ2luXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHN0YXRlID09PSBcImtleWZyYW1lUnVsZS1iZWdpblwiKSB7XG5cdFx0XHRcdHN0eWxlUnVsZSA9IG5ldyBDU1NPTS5DU1NLZXlmcmFtZVJ1bGUoKTtcblx0XHRcdFx0c3R5bGVSdWxlLmtleVRleHQgPSBidWZmZXIudHJpbSgpO1xuXHRcdFx0XHRzdHlsZVJ1bGUuX19zdGFydHMgPSBpO1xuXHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRzdGF0ZSA9IFwiYmVmb3JlLW5hbWVcIjtcblx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09IFwiZG9jdW1lbnRSdWxlLWJlZ2luXCIpIHtcblx0XHRcdFx0Ly8gRklYTUU6IHdoYXQgaWYgdGhpcyAneycgaXMgaW4gdGhlIHVybCB0ZXh0IG9mIHRoZSBtYXRjaCBmdW5jdGlvbj9cblx0XHRcdFx0ZG9jdW1lbnRSdWxlLm1hdGNoZXIubWF0Y2hlclRleHQgPSBidWZmZXIudHJpbSgpO1xuXHRcdFx0XHRpZiAocGFyZW50UnVsZSkge1xuXHRcdFx0XHRcdGRvY3VtZW50UnVsZS5wYXJlbnRSdWxlID0gcGFyZW50UnVsZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjdXJyZW50U2NvcGUgPSBwYXJlbnRSdWxlID0gZG9jdW1lbnRSdWxlO1xuXHRcdFx0XHRkb2N1bWVudFJ1bGUucGFyZW50U3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7XG5cdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdHN0YXRlID0gXCJiZWZvcmUtc2VsZWN0b3JcIjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIjpcIjpcblx0XHRcdGlmIChzdGF0ZSA9PT0gXCJuYW1lXCIpIHtcblx0XHRcdFx0bmFtZSA9IGJ1ZmZlci50cmltKCk7XG5cdFx0XHRcdGJ1ZmZlciA9IFwiXCI7XG5cdFx0XHRcdHN0YXRlID0gXCJiZWZvcmUtdmFsdWVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCIoXCI6XG5cdFx0XHRpZiAoc3RhdGUgPT09ICd2YWx1ZScpIHtcblx0XHRcdFx0Ly8gaWUgY3NzIGV4cHJlc3Npb24gbW9kZVxuXHRcdFx0XHRpZiAoYnVmZmVyLnRyaW0oKSA9PT0gJ2V4cHJlc3Npb24nKSB7XG5cdFx0XHRcdFx0dmFyIGluZm8gPSAobmV3IENTU09NLkNTU1ZhbHVlRXhwcmVzc2lvbih0b2tlbiwgaSkpLnBhcnNlKCk7XG5cblx0XHRcdFx0XHRpZiAoaW5mby5lcnJvcikge1xuXHRcdFx0XHRcdFx0cGFyc2VFcnJvcihpbmZvLmVycm9yKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YnVmZmVyICs9IGluZm8uZXhwcmVzc2lvbjtcblx0XHRcdFx0XHRcdGkgPSBpbmZvLmlkeDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdGUgPSAndmFsdWUtcGFyZW50aGVzaXMnO1xuXHRcdFx0XHRcdC8vYWx3YXlzIGVuc3VyZSB0aGlzIGlzIHJlc2V0IHRvIDEgb24gdHJhbnNpdGlvblxuXHRcdFx0XHRcdC8vZnJvbSB2YWx1ZSB0byB2YWx1ZS1wYXJlbnRoZXNpc1xuXHRcdFx0XHRcdHZhbHVlUGFyZW50aGVzaXNEZXB0aCA9IDE7XG5cdFx0XHRcdFx0YnVmZmVyICs9IGNoYXJhY3Rlcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gJ3ZhbHVlLXBhcmVudGhlc2lzJykge1xuXHRcdFx0XHR2YWx1ZVBhcmVudGhlc2lzRGVwdGgrKztcblx0XHRcdFx0YnVmZmVyICs9IGNoYXJhY3Rlcjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCIpXCI6XG5cdFx0XHRpZiAoc3RhdGUgPT09ICd2YWx1ZS1wYXJlbnRoZXNpcycpIHtcblx0XHRcdFx0dmFsdWVQYXJlbnRoZXNpc0RlcHRoLS07XG5cdFx0XHRcdGlmICh2YWx1ZVBhcmVudGhlc2lzRGVwdGggPT09IDApIHN0YXRlID0gJ3ZhbHVlJztcblx0XHRcdH1cblx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCIhXCI6XG5cdFx0XHRpZiAoc3RhdGUgPT09IFwidmFsdWVcIiAmJiB0b2tlbi5pbmRleE9mKFwiIWltcG9ydGFudFwiLCBpKSA9PT0gaSkge1xuXHRcdFx0XHRwcmlvcml0eSA9IFwiaW1wb3J0YW50XCI7XG5cdFx0XHRcdGkgKz0gXCJpbXBvcnRhbnRcIi5sZW5ndGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWZmZXIgKz0gY2hhcmFjdGVyO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiO1wiOlxuXHRcdFx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdFx0XHRjYXNlIFwidmFsdWVcIjpcblx0XHRcdFx0XHRzdHlsZVJ1bGUuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgYnVmZmVyLnRyaW0oKSwgcHJpb3JpdHkpO1xuXHRcdFx0XHRcdHByaW9yaXR5ID0gXCJcIjtcblx0XHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRcdHN0YXRlID0gXCJiZWZvcmUtbmFtZVwiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYXRSdWxlXCI6XG5cdFx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0XHRzdGF0ZSA9IFwiYmVmb3JlLXNlbGVjdG9yXCI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJpbXBvcnRSdWxlXCI6XG5cdFx0XHRcdFx0aW1wb3J0UnVsZSA9IG5ldyBDU1NPTS5DU1NJbXBvcnRSdWxlKCk7XG5cdFx0XHRcdFx0aW1wb3J0UnVsZS5wYXJlbnRTdHlsZVNoZWV0ID0gaW1wb3J0UnVsZS5zdHlsZVNoZWV0LnBhcmVudFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0O1xuXHRcdFx0XHRcdGltcG9ydFJ1bGUuY3NzVGV4dCA9IGJ1ZmZlciArIGNoYXJhY3Rlcjtcblx0XHRcdFx0XHRzdHlsZVNoZWV0LmNzc1J1bGVzLnB1c2goaW1wb3J0UnVsZSk7XG5cdFx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0XHRzdGF0ZSA9IFwiYmVmb3JlLXNlbGVjdG9yXCI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnVmZmVyICs9IGNoYXJhY3Rlcjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIn1cIjpcblx0XHRcdHN3aXRjaCAoc3RhdGUpIHtcblx0XHRcdFx0Y2FzZSBcInZhbHVlXCI6XG5cdFx0XHRcdFx0c3R5bGVSdWxlLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIGJ1ZmZlci50cmltKCksIHByaW9yaXR5KTtcblx0XHRcdFx0XHRwcmlvcml0eSA9IFwiXCI7XG5cdFx0XHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0XHRjYXNlIFwiYmVmb3JlLW5hbWVcIjpcblx0XHRcdFx0Y2FzZSBcIm5hbWVcIjpcblx0XHRcdFx0XHRzdHlsZVJ1bGUuX19lbmRzID0gaSArIDE7XG5cdFx0XHRcdFx0aWYgKHBhcmVudFJ1bGUpIHtcblx0XHRcdFx0XHRcdHN0eWxlUnVsZS5wYXJlbnRSdWxlID0gcGFyZW50UnVsZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c3R5bGVSdWxlLnBhcmVudFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0O1xuXHRcdFx0XHRcdGN1cnJlbnRTY29wZS5jc3NSdWxlcy5wdXNoKHN0eWxlUnVsZSk7XG5cdFx0XHRcdFx0YnVmZmVyID0gXCJcIjtcblx0XHRcdFx0XHRpZiAoY3VycmVudFNjb3BlLmNvbnN0cnVjdG9yID09PSBDU1NPTS5DU1NLZXlmcmFtZXNSdWxlKSB7XG5cdFx0XHRcdFx0XHRzdGF0ZSA9IFwia2V5ZnJhbWVSdWxlLWJlZ2luXCI7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHN0YXRlID0gXCJiZWZvcmUtc2VsZWN0b3JcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJrZXlmcmFtZVJ1bGUtYmVnaW5cIjpcblx0XHRcdFx0Y2FzZSBcImJlZm9yZS1zZWxlY3RvclwiOlxuXHRcdFx0XHRjYXNlIFwic2VsZWN0b3JcIjpcblx0XHRcdFx0XHQvLyBFbmQgb2YgbWVkaWEvZG9jdW1lbnQgcnVsZS5cblx0XHRcdFx0XHRpZiAoIXBhcmVudFJ1bGUpIHtcblx0XHRcdFx0XHRcdHBhcnNlRXJyb3IoXCJVbmV4cGVjdGVkIH1cIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN1cnJlbnRTY29wZS5fX2VuZHMgPSBpICsgMTtcblx0XHRcdFx0XHQvLyBOZXN0aW5nIHJ1bGVzIGFyZW4ndCBzdXBwb3J0ZWQgeWV0XG5cdFx0XHRcdFx0c3R5bGVTaGVldC5jc3NSdWxlcy5wdXNoKGN1cnJlbnRTY29wZSk7XG5cdFx0XHRcdFx0Y3VycmVudFNjb3BlID0gc3R5bGVTaGVldDtcblx0XHRcdFx0XHRwYXJlbnRSdWxlID0gbnVsbDtcblx0XHRcdFx0XHRidWZmZXIgPSBcIlwiO1xuXHRcdFx0XHRcdHN0YXRlID0gXCJiZWZvcmUtc2VsZWN0b3JcIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHN3aXRjaCAoc3RhdGUpIHtcblx0XHRcdFx0Y2FzZSBcImJlZm9yZS1zZWxlY3RvclwiOlxuXHRcdFx0XHRcdHN0YXRlID0gXCJzZWxlY3RvclwiO1xuXHRcdFx0XHRcdHN0eWxlUnVsZSA9IG5ldyBDU1NPTS5DU1NTdHlsZVJ1bGUoKTtcblx0XHRcdFx0XHRzdHlsZVJ1bGUuX19zdGFydHMgPSBpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYmVmb3JlLW5hbWVcIjpcblx0XHRcdFx0XHRzdGF0ZSA9IFwibmFtZVwiO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYmVmb3JlLXZhbHVlXCI6XG5cdFx0XHRcdFx0c3RhdGUgPSBcInZhbHVlXCI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJpbXBvcnRSdWxlLWJlZ2luXCI6XG5cdFx0XHRcdFx0c3RhdGUgPSBcImltcG9ydFJ1bGVcIjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGJ1ZmZlciArPSBjaGFyYWN0ZXI7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc3R5bGVTaGVldDtcbn07XG5cblxuLy8uQ29tbW9uSlNcbmV4cG9ydHMucGFyc2UgPSBDU1NPTS5wYXJzZTtcbi8vIFRoZSBmb2xsb3dpbmcgbW9kdWxlcyBjYW5ub3QgYmUgaW5jbHVkZWQgc29vbmVyIGR1ZSB0byB0aGUgbXV0dWFsIGRlcGVuZGVuY3kgd2l0aCBwYXJzZS5qc1xuQ1NTT00uQ1NTU3R5bGVTaGVldCA9IHJlcXVpcmUoXCIuL0NTU1N0eWxlU2hlZXRcIikuQ1NTU3R5bGVTaGVldDtcbkNTU09NLkNTU1N0eWxlUnVsZSA9IHJlcXVpcmUoXCIuL0NTU1N0eWxlUnVsZVwiKS5DU1NTdHlsZVJ1bGU7XG5DU1NPTS5DU1NJbXBvcnRSdWxlID0gcmVxdWlyZShcIi4vQ1NTSW1wb3J0UnVsZVwiKS5DU1NJbXBvcnRSdWxlO1xuQ1NTT00uQ1NTTWVkaWFSdWxlID0gcmVxdWlyZShcIi4vQ1NTTWVkaWFSdWxlXCIpLkNTU01lZGlhUnVsZTtcbkNTU09NLkNTU0ZvbnRGYWNlUnVsZSA9IHJlcXVpcmUoXCIuL0NTU0ZvbnRGYWNlUnVsZVwiKS5DU1NGb250RmFjZVJ1bGU7XG5DU1NPTS5DU1NIb3N0UnVsZSA9IHJlcXVpcmUoXCIuL0NTU0hvc3RSdWxlXCIpLkNTU0hvc3RSdWxlO1xuQ1NTT00uQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHJlcXVpcmUoJy4vQ1NTU3R5bGVEZWNsYXJhdGlvbicpLkNTU1N0eWxlRGVjbGFyYXRpb247XG5DU1NPTS5DU1NLZXlmcmFtZVJ1bGUgPSByZXF1aXJlKCcuL0NTU0tleWZyYW1lUnVsZScpLkNTU0tleWZyYW1lUnVsZTtcbkNTU09NLkNTU0tleWZyYW1lc1J1bGUgPSByZXF1aXJlKCcuL0NTU0tleWZyYW1lc1J1bGUnKS5DU1NLZXlmcmFtZXNSdWxlO1xuQ1NTT00uQ1NTVmFsdWVFeHByZXNzaW9uID0gcmVxdWlyZSgnLi9DU1NWYWx1ZUV4cHJlc3Npb24nKS5DU1NWYWx1ZUV4cHJlc3Npb247XG5DU1NPTS5DU1NEb2N1bWVudFJ1bGUgPSByZXF1aXJlKCcuL0NTU0RvY3VtZW50UnVsZScpLkNTU0RvY3VtZW50UnVsZTtcbi8vL0NvbW1vbkpTXG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBUaGlzIGlzIGEgZm9yayBmcm9tIHRoZSBDU1MgU3R5bGUgRGVjbGFyYXRpb24gcGFydCBvZlxuICogaHR0cHM6Ly9naXRodWIuY29tL05WL0NTU09NXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cInVzZSBzdHJpY3RcIjtcbnZhciBDU1NPTSA9IHJlcXVpcmUoJ2Nzc29tJyk7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbnZhciBjYW1lbFRvRGFzaGVkID0gcmVxdWlyZSgnLi9wYXJzZXJzJykuY2FtZWxUb0Rhc2hlZDtcbnZhciBkYXNoZWRUb0NhbWVsQ2FzZSA9IHJlcXVpcmUoJy4vcGFyc2VycycpLmRhc2hlZFRvQ2FtZWxDYXNlO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTU3R5bGVEZWNsYXJhdGlvblxuICovXG52YXIgQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIENTU1N0eWxlRGVjbGFyYXRpb24ob25DaGFuZ2VDYWxsYmFjaykge1xuICAgIHRoaXMuX3ZhbHVlcyA9IHt9O1xuICAgIHRoaXMuX2ltcG9ydGFudHMgPSB7fTtcbiAgICB0aGlzLl9sZW5ndGggPSAwO1xuICAgIHRoaXMuX29uQ2hhbmdlID0gb25DaGFuZ2VDYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7IHJldHVybjsgfTtcbn07XG5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ1NTU3R5bGVEZWNsYXJhdGlvbixcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxlL2Nzcy5odG1sI0NTUy1DU1NTdHlsZURlY2xhcmF0aW9uLWdldFByb3BlcnR5VmFsdWVcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaWYgaXQgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQgZm9yIHRoaXMgZGVjbGFyYXRpb24gYmxvY2suXG4gICAgICogUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoZSBwcm9wZXJ0eSBoYXMgbm90IGJlZW4gc2V0LlxuICAgICAqL1xuICAgIGdldFByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVzW25hbWVdLnRvU3RyaW5nKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ByaW9yaXR5PW51bGxdIFwiaW1wb3J0YW50XCIgb3IgbnVsbFxuICAgICAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1N0eWxlRGVjbGFyYXRpb24tc2V0UHJvcGVydHlcbiAgICAgKi9cbiAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbWVsX2Nhc2UgPSBkYXNoZWRUb0NhbWVsQ2FzZShuYW1lKTtcbiAgICAgICAgdGhpc1tjYW1lbF9jYXNlXSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9pbXBvcnRhbnRzW25hbWVdID0gcHJpb3JpdHk7XG4gICAgfSxcbiAgICBfc2V0UHJvcGVydHk6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl92YWx1ZXNbbmFtZV0pIHtcbiAgICAgICAgICAgIC8vIFByb3BlcnR5IGFscmVhZHkgZXhpc3QuIE92ZXJ3cml0ZSBpdC5cbiAgICAgICAgICAgIHZhciBpbmRleCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGhpcywgbmFtZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpc1t0aGlzLl9sZW5ndGhdID0gbmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sZW5ndGgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5ldyBwcm9wZXJ0eS5cbiAgICAgICAgICAgIHRoaXNbdGhpcy5fbGVuZ3RoXSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLl9sZW5ndGgrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5faW1wb3J0YW50c1tuYW1lXSA9IHByaW9yaXR5O1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLmNzc1RleHQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAgICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTU3R5bGVEZWNsYXJhdGlvbi1yZW1vdmVQcm9wZXJ0eVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpZiBpdCBoYXMgYmVlbiBleHBsaWNpdGx5IHNldCBmb3IgdGhpcyBkZWNsYXJhdGlvbiBibG9jay5cbiAgICAgKiBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlIHByb3BlcnR5IGhhcyBub3QgYmVlbiBzZXQgb3IgdGhlIHByb3BlcnR5IG5hbWUgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGtub3duIENTUyBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICByZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl92YWx1ZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByZXZWYWx1ZSA9IHRoaXMuX3ZhbHVlc1tuYW1lXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3ZhbHVlc1tuYW1lXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2ltcG9ydGFudHNbbmFtZV07XG5cbiAgICAgICAgdmFyIGluZGV4ID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLCBuYW1lKTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXZWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoYXQncyB3aGF0IFdlYktpdCBhbmQgT3BlcmEgZG9cbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRoaXMsIGluZGV4LCAxKTtcblxuICAgICAgICAvLyBUaGF0J3Mgd2hhdCBGaXJlZm94IGRvZXNcbiAgICAgICAgLy90aGlzW2luZGV4XSA9IFwiXCJcblxuICAgICAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLmNzc1RleHQpO1xuICAgICAgICByZXR1cm4gcHJldlZhbHVlO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAgICAgKi9cbiAgICBnZXRQcm9wZXJ0eVByaW9yaXR5OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW1wb3J0YW50c1tuYW1lXSB8fCBcIlwiO1xuICAgIH0sXG5cblxuICAgIGdldFByb3BlcnR5Q1NTVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9GSVhNRVxuICAgICAgICByZXR1cm47XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqICAgZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IFwiYXV0b1wiXG4gICAgICogICBlbGVtZW50LnN0eWxlLmdldFByb3BlcnR5U2hvcnRoYW5kKFwib3ZlcmZsb3cteFwiKVxuICAgICAqICAgLT4gXCJvdmVyZmxvd1wiXG4gICAgICovXG4gICAgZ2V0UHJvcGVydHlTaG9ydGhhbmQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9GSVhNRVxuICAgICAgICByZXR1cm47XG4gICAgfSxcblxuICAgIGlzUHJvcGVydHlJbXBsaWNpdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvL0ZJWE1FXG4gICAgICAgIHJldHVybjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogICBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9jc3MuaHRtbCNDU1MtQ1NTU3R5bGVEZWNsYXJhdGlvbi1pdGVtXG4gICAgICovXG4gICAgaXRlbTogZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIGluZGV4ID0gcGFyc2VJbnQoaW5kZXgsIDEwKTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl9sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpc1tpbmRleF07XG4gICAgfVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUsIHtcbiAgICBjc3NUZXh0OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXTtcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgdmFyIG5hbWU7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICB2YXIgcHJpb3JpdHk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gdGhpc1tpXTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbiAgICAgICAgICAgICAgICBwcmlvcml0eSA9IHRoaXMuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAocHJpb3JpdHkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5ID0gXCIgIVwiICsgcHJpb3JpdHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChbbmFtZSwgJzogJywgdmFsdWUsIHByaW9yaXR5LCAnOyddLmpvaW4oJycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLmpvaW4oJyAnKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0ge307XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGhpcywgMCwgdGhpcy5fbGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMuX2ltcG9ydGFudHMgPSB7fTtcbiAgICAgICAgICAgIHZhciBkdW1teVJ1bGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGR1bW15UnVsZSA9IENTU09NLnBhcnNlKCcjYm9ndXN7JyArIHZhbHVlICsgJ30nKS5jc3NSdWxlc1swXS5zdHlsZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBjc3MsIGp1c3QgcmV0dXJuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJ1bGVfbGVuZ3RoID0gZHVtbXlSdWxlLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBuYW1lO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJ1bGVfbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gZHVtbXlSdWxlW2ldO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHkoZHVtbXlSdWxlW2ldLCBkdW1teVJ1bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKSwgZHVtbXlSdWxlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5jc3NUZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSxcbiAgICBwYXJlbnRSdWxlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSxcbiAgICBsZW5ndGg6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9sZW5ndGg7IH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGRlbGV0ZXMgaW5kaWNlcyBpZiB0aGUgbmV3IGxlbmd0aCBpcyBsZXNzIHRoZW4gdGhlIGN1cnJlbnRcbiAgICAgICAgICogbGVuZ3RoLiBJZiB0aGUgbmV3IGxlbmd0aCBpcyBtb3JlLCBpdCBkb2VzIG5vdGhpbmcsIHRoZSBuZXcgaW5kaWNlc1xuICAgICAgICAgKiB3aWxsIGJlIHVuZGVmaW5lZCB1bnRpbCBzZXQuXG4gICAgICAgICAqKi9cbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gdmFsdWU7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0sXG4gICAgJ2Zsb2F0Jzoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY3NzRmxvYXQ7IH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNzc0Zsb2F0ID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbn0pO1xuXG5yZXF1aXJlKCcuL3Byb3BlcnRpZXMnKShDU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSk7XG5cbmV4cG9ydHMuQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IENTU1N0eWxlRGVjbGFyYXRpb247XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBUaGVzZSBhcmUgY29tbW9ubHkgdXNlZCBwYXJzZXJzIGZvciBDU1MgVmFsdWVzIHRoZXkgdGFrZSBhIHN0cmluZyAqXG4gKiB0byBwYXJzZSBhbmQgcmV0dXJuIGEgc3RyaW5nIGFmdGVyIGl0J3MgYmVlbiBjb252ZXJ0ZWQsIGlmIG5lZWRlZCAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuVFlQRVMgPSB7XG4gICAgSU5URUdFUjogMSxcbiAgICBOVU1CRVI6IDIsXG4gICAgTEVOR1RIOiAzLFxuICAgIFBFUkNFTlQ6IDQsXG4gICAgVVJMOiA1LFxuICAgIENPTE9SOiA2LFxuICAgIFNUUklORzogNyxcbiAgICBBTkdMRTogOCxcbiAgICBLRVlXT1JEOiA5LFxuICAgIE5VTExfT1JfRU1QVFlfU1RSOiAxMFxufTtcblxuLypqc2xpbnQgcmVnZXhwOiB0cnVlKi9cbi8vIHJvdWdoIHJlZ3VsYXIgZXhwcmVzc2lvbnNcbnZhciBpbnRlZ2VyUmVnRXggPSAvXltcXC0rXT9bMC05XSskLztcbnZhciBudW1iZXJSZWdFeCA9IC9eW1xcLStdP1swLTldKlxcLlswLTldKyQvO1xudmFyIGxlbmd0aFJlZ0V4ID0gL14oMHxbXFwtK10/WzAtOV0qXFwuP1swLTldKyhpbnxjbXxlbXxtbXxwdHxwY3xweCkpJC87XG52YXIgcGVyY2VudFJlZ0V4ID0gL15bXFwtK10/WzAtOV0qXFwuP1swLTldKyUkLztcbnZhciB1cmxSZWdFeCA9IC9edXJsXFwoXFxzKihbXlxcKV0qKVxccypcXCkkLztcbnZhciBzdHJpbmdSZWdFeCA9IC9eKFxcXCJbXlxcXCJdKlxcXCJ8XFwnW15cXCddKlxcJykkLztcbnZhciBjb2xvclJlZ0V4MSA9IC9eI1swLTlhLWZBLUZdWzAtOWEtZkEtRl1bMC05YS1mQS1GXShbMC05YS1mQS1GXVswLTlhLWZBLUZdWzAtOWEtZkEtRl0pPyQvO1xudmFyIGNvbG9yUmVnRXgyID0gL15yZ2JcXCgoW15cXCldKilcXCkkLztcbnZhciBjb2xvclJlZ0V4MyA9IC9ecmdiYVxcKChbXlxcKV0qKVxcKSQvO1xudmFyIGFuZ2xlUmVnRXggPSAvXihbXFwtK10/WzAtOV0qXFwuP1swLTldKykoZGVnfGdyYWR8cmFkKSQvO1xuLypqc2xpbnQgcmVnZXhwOiBmYWxzZSovXG5cbi8vIFRoaXMgd2lsbCByZXR1cm4gb25lIG9mIHRoZSBhYm92ZSB0eXBlcyBiYXNlZCBvbiB0aGUgcGFzc2VkIGluIHN0cmluZ1xuZXhwb3J0cy52YWx1ZVR5cGUgPSBmdW5jdGlvbiB2YWx1ZVR5cGUodmFsKSB7XG4gICAgaWYgKHZhbCA9PT0gJycgfHwgdmFsID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLlRZUEVTLk5VTExfT1JfRU1QVFlfU1RSO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdmFsID0gdmFsLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGludGVnZXJSZWdFeC50ZXN0KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVFlQRVMuSU5URUdFUjtcbiAgICB9XG4gICAgaWYgKG51bWJlclJlZ0V4LnRlc3QodmFsKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5UWVBFUy5OVU1CRVI7XG4gICAgfVxuICAgIGlmIChsZW5ndGhSZWdFeC50ZXN0KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuVFlQRVMuTEVOR1RIO1xuICAgIH1cbiAgICBpZiAocGVyY2VudFJlZ0V4LnRlc3QodmFsKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5UWVBFUy5QRVJDRU5UO1xuICAgIH1cbiAgICBpZiAodXJsUmVnRXgudGVzdCh2YWwpKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLlRZUEVTLlVSTDtcbiAgICB9XG4gICAgaWYgKHN0cmluZ1JlZ0V4LnRlc3QodmFsKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5UWVBFUy5TVFJJTkc7XG4gICAgfVxuICAgIGlmIChhbmdsZVJlZ0V4LnRlc3QodmFsKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5UWVBFUy5BTkdMRTtcbiAgICB9XG4gICAgaWYgKGNvbG9yUmVnRXgxLnRlc3QodmFsKSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5UWVBFUy5DT0xPUjtcbiAgICB9XG4gICAgdmFyIHJlcyA9IGNvbG9yUmVnRXgyLmV4ZWModmFsKTtcbiAgICB2YXIgcGFydHM7XG4gICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgICBwYXJ0cyA9IHJlc1sxXS5zcGxpdCgvXFxzKixcXHMqLyk7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzLmV2ZXJ5KHBlcmNlbnRSZWdFeC50ZXN0LmJpbmQocGVyY2VudFJlZ0V4KSkgfHwgcGFydHMuZXZlcnkoaW50ZWdlclJlZ0V4LnRlc3QuYmluZChpbnRlZ2VyUmVnRXgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuVFlQRVMuQ09MT1I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmVzID0gY29sb3JSZWdFeDMuZXhlYyh2YWwpO1xuICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgICAgcGFydHMgPSByZXNbMV0uc3BsaXQoL1xccyosXFxzKi8pO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5zbGljZSgwLCAzKS5ldmVyeShwZXJjZW50UmVnRXgudGVzdC5iaW5kKHBlcmNlbnRSZWdFeCkpIHx8IHBhcnRzLmV2ZXJ5KGludGVnZXJSZWdFeC50ZXN0LmJpbmQoaW50ZWdlclJlZ0V4KSkpIHtcbiAgICAgICAgICAgIGlmIChudW1iZXJSZWdFeC50ZXN0KHBhcnRzWzNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHBvcnRzLlRZUEVTLkNPTE9SO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gY291bGQgc3RpbGwgYmUgYSBjb2xvciwgb25lIG9mIHRoZSBzdGFuZGFyZCBrZXl3b3JkIGNvbG9yc1xuICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAodmFsKSB7XG4gICAgY2FzZSAnbWFyb29uJzpcbiAgICBjYXNlICdyZWQnOlxuICAgIGNhc2UgJ29yYW5nZSc6XG4gICAgY2FzZSAneWVsbG93JzpcbiAgICBjYXNlICdvbGl2ZSc6XG4gICAgY2FzZSAncHVycGxlJzpcbiAgICBjYXNlICdmdWNoc2lhJzpcbiAgICBjYXNlICd3aGl0ZSc6XG4gICAgY2FzZSAnbGltZSc6XG4gICAgY2FzZSAnZ3JlZW4nOlxuICAgIGNhc2UgJ25hdnknOlxuICAgIGNhc2UgJ2JsdWUnOlxuICAgIGNhc2UgJ2FxdWEnOlxuICAgIGNhc2UgJ3RlYWwnOlxuICAgIGNhc2UgJ2JsYWNrJzpcbiAgICBjYXNlICdzaWx2ZXInOlxuICAgIGNhc2UgJ2dyYXknOlxuICAgICAgICAvLyB0aGUgZm9sbG93aW5nIGFyZSBkZXByZWNhdGVkIGluIENTUzNcbiAgICBjYXNlICdhY3RpdmVib3JkZXInOlxuICAgIGNhc2UgJ2FjdGl2ZWNhcHRpb24nOlxuICAgIGNhc2UgJ2FwcHdvcmtzcGFjZSc6XG4gICAgY2FzZSAnYmFja2dyb3VuZCc6XG4gICAgY2FzZSAnYnV0dG9uZmFjZSc6XG4gICAgY2FzZSAnYnV0dG9uaGlnaGxpZ2h0JzpcbiAgICBjYXNlICdidXR0b25zaGFkb3cnOlxuICAgIGNhc2UgJ2J1dHRvbnRleHQnOlxuICAgIGNhc2UgJ2NhcHRpb250ZXh0JzpcbiAgICBjYXNlICdncmF5dGV4dCc6XG4gICAgY2FzZSAnaGlnaGxpZ2h0JzpcbiAgICBjYXNlICdoaWdobGlnaHR0ZXh0JzpcbiAgICBjYXNlICdpbmFjdGl2ZWJvcmRlcic6XG4gICAgY2FzZSAnaW5hY3RpdmVjYXB0aW9uJzpcbiAgICBjYXNlICdpbmFjdGl2ZWNhcHRpb250ZXh0JzpcbiAgICBjYXNlICdpbmZvYmFja2dyb3VuZCc6XG4gICAgY2FzZSAnaW5mb3RleHQnOlxuICAgIGNhc2UgJ21lbnUnOlxuICAgIGNhc2UgJ21lbnV0ZXh0JzpcbiAgICBjYXNlICdzY3JvbGxiYXInOlxuICAgIGNhc2UgJ3RocmVlZGRhcmtzaGFkb3cnOlxuICAgIGNhc2UgJ3RocmVlZGZhY2UnOlxuICAgIGNhc2UgJ3RocmVlZGhpZ2hsaWdodCc6XG4gICAgY2FzZSAndGhyZWVkbGlnaHRzaGFkb3cnOlxuICAgIGNhc2UgJ3RocmVlZHNoYWRvdyc6XG4gICAgY2FzZSAnd2luZG93JzpcbiAgICBjYXNlICd3aW5kb3dmcmFtZSc6XG4gICAgY2FzZSAnd2luZG93dGV4dCc6XG4gICAgICAgIHJldHVybiBleHBvcnRzLlRZUEVTLkNPTE9SO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBleHBvcnRzLlRZUEVTLktFWVdPUkQ7XG4gICAgfVxufTtcblxuZXhwb3J0cy5wYXJzZUludGVnZXIgPSBmdW5jdGlvbiBwYXJzZUludGVnZXIodmFsKSB7XG4gICAgdmFyIHR5cGUgPSBleHBvcnRzLnZhbHVlVHlwZSh2YWwpO1xuICAgIGlmICh0eXBlID09PSBleHBvcnRzLlRZUEVTLk5VTExfT1JfRU1QVFlfU1RSKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmICh0eXBlICE9PSBleHBvcnRzLlRZUEVTLklOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhwYXJzZUludCh2YWwsIDEwKSk7XG59O1xuXG5leHBvcnRzLnBhcnNlTnVtYmVyID0gZnVuY3Rpb24gcGFyc2VOdW1iZXIodmFsKSB7XG4gICAgdmFyIHR5cGUgPSBleHBvcnRzLnZhbHVlVHlwZSh2YWwpO1xuICAgIGlmICh0eXBlID09PSBleHBvcnRzLlRZUEVTLk5VTExfT1JfRU1QVFlfU1RSKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmICh0eXBlICE9PSBleHBvcnRzLlRZUEVTLk5VTUJFUiAmJiB0eXBlICE9PSBleHBvcnRzLlRZUEVTLklOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhwYXJzZUZsb2F0KHZhbCkpO1xufTtcblxuZXhwb3J0cy5wYXJzZUxlbmd0aCA9IGZ1bmN0aW9uIHBhcnNlTGVuZ3RoKHZhbCkge1xuICAgIGlmICh2YWwgPT09IDAgfHwgdmFsID09PSAnMCcpIHtcbiAgICAgICAgcmV0dXJuICcwcHgnO1xuICAgIH1cbiAgICB2YXIgdHlwZSA9IGV4cG9ydHMudmFsdWVUeXBlKHZhbCk7XG4gICAgaWYgKHR5cGUgPT09IGV4cG9ydHMuVFlQRVMuTlVMTF9PUl9FTVBUWV9TVFIpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgaWYgKHR5cGUgIT09IGV4cG9ydHMuVFlQRVMuTEVOR1RIKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG5leHBvcnRzLnBhcnNlUGVyY2VudCA9IGZ1bmN0aW9uIHBhcnNlUGVyY2VudCh2YWwpIHtcbiAgICBpZiAodmFsID09PSAwIHx8IHZhbCA9PT0gJzAnKSB7XG4gICAgICAgIHJldHVybiAnMCUnO1xuICAgIH1cbiAgICB2YXIgdHlwZSA9IGV4cG9ydHMudmFsdWVUeXBlKHZhbCk7XG4gICAgaWYgKHR5cGUgPT09IGV4cG9ydHMuVFlQRVMuTlVMTF9PUl9FTVBUWV9TVFIpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgaWYgKHR5cGUgIT09IGV4cG9ydHMuVFlQRVMuUEVSQ0VOVCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufTtcblxuLy8gZWl0aGVyIGEgbGVuZ3RoIG9yIGEgcGVyY2VudFxuZXhwb3J0cy5wYXJzZU1lYXN1cmVtZW50ID0gZnVuY3Rpb24gcGFyc2VNZWFzdXJlbWVudCh2YWwpIHtcbiAgICB2YXIgbGVuZ3RoID0gZXhwb3J0cy5wYXJzZUxlbmd0aCh2YWwpO1xuICAgIGlmIChsZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gZXhwb3J0cy5wYXJzZVBlcmNlbnQodmFsKTtcbn07XG5cbmV4cG9ydHMucGFyc2VVcmwgPSBmdW5jdGlvbiBwYXJzZVVybCh2YWwpIHtcbiAgICB2YXIgdHlwZSA9IGV4cG9ydHMudmFsdWVUeXBlKHZhbCk7XG4gICAgaWYgKHR5cGUgPT09IGV4cG9ydHMuVFlQRVMuTlVMTF9PUl9FTVBUWV9TVFIpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgdmFyIHJlcyA9IHVybFJlZ0V4LmV4ZWModmFsKTtcbiAgICAvLyBkb2VzIGl0IG1hdGNoIHRoZSByZWdleD9cbiAgICBpZiAoIXJlcykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgc3RyID0gcmVzWzFdO1xuICAgIC8vIGlmIGl0IHN0YXJ0cyB3aXRoIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzLCBkb2VzIGl0IGVuZCB3aXRoIHRoZSBzYW1lP1xuICAgIGlmICgoc3RyWzBdID09PSAnXCInIHx8IHN0clswXSA9PT0gXCInXCIpICYmIHN0clswXSAhPT0gc3RyW3N0ci5sZW5ndGggLSAxXSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoc3RyWzBdID09PSAnXCInIHx8IHN0clswXSA9PT0gXCInXCIpIHtcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7XG4gICAgfVxuXG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBzd2l0Y2ggKHN0cltpXSkge1xuICAgICAgICBjYXNlICcoJzpcbiAgICAgICAgY2FzZSAnKSc6XG4gICAgICAgIGNhc2UgJyAnOlxuICAgICAgICBjYXNlICdcXHQnOlxuICAgICAgICBjYXNlICdcXG4nOlxuICAgICAgICBjYXNlIFwiJ1wiOlxuICAgICAgICBjYXNlICdcIic6XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjYXNlICdcXFxcJzpcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICd1cmwoJyArIHN0ciArICcpJztcbn07XG5cbmV4cG9ydHMucGFyc2VTdHJpbmcgPSBmdW5jdGlvbiBwYXJzZVN0cmluZyh2YWwpIHtcbiAgICB2YXIgdHlwZSA9IGV4cG9ydHMudmFsdWVUeXBlKHZhbCk7XG4gICAgaWYgKHR5cGUgPT09IGV4cG9ydHMuVFlQRVMuTlVMTF9PUl9FTVBUWV9TVFIpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgaWYgKHR5cGUgIT09IGV4cG9ydHMuVFlQRVMuU1RSSU5HKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDE7IGkgPCB2YWwubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIHN3aXRjaCAodmFsW2ldKSB7XG4gICAgICAgIGNhc2UgdmFsWzBdOlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB3aGlsZSAoaSA8IHZhbC5sZW5ndGggLSAxICYmIC9bMC05QS1GYS1mXS8udGVzdCh2YWxbaV0pKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgPj0gdmFsLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufTtcblxuZXhwb3J0cy5wYXJzZUNvbG9yID0gZnVuY3Rpb24gcGFyc2VDb2xvcih2YWwpIHtcbiAgICB2YXIgdHlwZSA9IGV4cG9ydHMudmFsdWVUeXBlKHZhbCk7XG4gICAgaWYgKHR5cGUgPT09IGV4cG9ydHMuVFlQRVMuTlVMTF9PUl9FTVBUWV9TVFIpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgdmFyIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhID0gMTtcbiAgICB2YXIgcGFydHM7XG4gICAgdmFyIHJlcyA9IGNvbG9yUmVnRXgxLmV4ZWModmFsKTtcbiAgICAvLyBpcyBpdCAjYWFhIG9yICNhYmFiYWJcbiAgICBpZiAocmVzKSB7XG4gICAgICAgIHZhciBoZXggPSB2YWwuc3Vic3RyKDEpO1xuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgaGV4ID0gaGV4WzBdICsgaGV4WzBdICsgaGV4WzFdICsgaGV4WzFdICsgaGV4WzJdICsgaGV4WzJdO1xuICAgICAgICB9XG4gICAgICAgIHJlZCA9IHBhcnNlSW50KGhleC5zdWJzdHIoMCwgMiksIDE2KTtcbiAgICAgICAgZ3JlZW4gPSBwYXJzZUludChoZXguc3Vic3RyKDIsIDIpLCAxNik7XG4gICAgICAgIGJsdWUgPSBwYXJzZUludChoZXguc3Vic3RyKDQsIDIpLCAxNik7XG4gICAgICAgIHJldHVybiAncmdiKCcgKyByZWQgKyAnLCAnICsgZ3JlZW4gKyAnLCAnICsgYmx1ZSArICcpJztcbiAgICB9XG5cbiAgICByZXMgPSBjb2xvclJlZ0V4Mi5leGVjKHZhbCk7XG4gICAgaWYgKHJlcykge1xuICAgICAgICBwYXJ0cyA9IHJlc1sxXS5zcGxpdCgvXFxzKixcXHMqLyk7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzLmV2ZXJ5KHBlcmNlbnRSZWdFeC50ZXN0LmJpbmQocGVyY2VudFJlZ0V4KSkpIHtcbiAgICAgICAgICAgIHJlZCA9IE1hdGguZmxvb3IocGFyc2VGbG9hdChwYXJ0c1swXS5zbGljZSgwLCAtMSkpICogMjU1IC8gMTAwKTtcbiAgICAgICAgICAgIGdyZWVuID0gTWF0aC5mbG9vcihwYXJzZUZsb2F0KHBhcnRzWzFdLnNsaWNlKDAsIC0xKSkgKiAyNTUgLyAxMDApO1xuICAgICAgICAgICAgYmx1ZSA9IE1hdGguZmxvb3IocGFyc2VGbG9hdChwYXJ0c1syXS5zbGljZSgwLCAtMSkpICogMjU1IC8gMTAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0cy5ldmVyeShpbnRlZ2VyUmVnRXgudGVzdC5iaW5kKGludGVnZXJSZWdFeCkpKSB7XG4gICAgICAgICAgICByZWQgPSBwYXJzZUludChwYXJ0c1swXSwgMTApO1xuICAgICAgICAgICAgZ3JlZW4gPSBwYXJzZUludChwYXJ0c1sxXSwgMTApO1xuICAgICAgICAgICAgYmx1ZSA9IHBhcnNlSW50KHBhcnRzWzJdLCAxMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJlZCA9IE1hdGgubWluKDI1NSwgTWF0aC5tYXgoMCwgcmVkKSk7XG4gICAgICAgIGdyZWVuID0gTWF0aC5taW4oMjU1LCBNYXRoLm1heCgwLCBncmVlbikpO1xuICAgICAgICBibHVlID0gTWF0aC5taW4oMjU1LCBNYXRoLm1heCgwLCBibHVlKSk7XG4gICAgICAgIHJldHVybiAncmdiKCcgKyByZWQgKyAnLCAnICsgZ3JlZW4gKyAnLCAnICsgYmx1ZSArICcpJztcbiAgICB9XG5cbiAgICByZXMgPSBjb2xvclJlZ0V4My5leGVjKHZhbCk7XG4gICAgaWYgKHJlcykge1xuICAgICAgICBwYXJ0cyA9IHJlc1sxXS5zcGxpdCgvXFxzKixcXHMqLyk7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzLnNsaWNlKDAsIDMpLmV2ZXJ5KHBlcmNlbnRSZWdFeC50ZXN0LmJpbmQocGVyY2VudFJlZ0V4KSkpIHtcbiAgICAgICAgICAgIHJlZCA9IE1hdGguZmxvb3IocGFyc2VGbG9hdChwYXJ0c1swXS5zbGljZSgwLCAtMSkpICogMjU1IC8gMTAwKTtcbiAgICAgICAgICAgIGdyZWVuID0gTWF0aC5mbG9vcihwYXJzZUZsb2F0KHBhcnRzWzFdLnNsaWNlKDAsIC0xKSkgKiAyNTUgLyAxMDApO1xuICAgICAgICAgICAgYmx1ZSA9IE1hdGguZmxvb3IocGFyc2VGbG9hdChwYXJ0c1syXS5zbGljZSgwLCAtMSkpICogMjU1IC8gMTAwKTtcbiAgICAgICAgICAgIGFscGhhID0gcGFyc2VGbG9hdChwYXJ0c1szXSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFydHMuc2xpY2UoMCwgMykuZXZlcnkoaW50ZWdlclJlZ0V4LnRlc3QuYmluZChpbnRlZ2VyUmVnRXgpKSkge1xuICAgICAgICAgICAgcmVkID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTtcbiAgICAgICAgICAgIGdyZWVuID0gcGFyc2VJbnQocGFydHNbMV0sIDEwKTtcbiAgICAgICAgICAgIGJsdWUgPSBwYXJzZUludChwYXJ0c1syXSwgMTApO1xuICAgICAgICAgICAgYWxwaGEgPSBwYXJzZUZsb2F0KHBhcnRzWzNdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKGFscGhhKSkge1xuICAgICAgICAgICAgYWxwaGEgPSAxO1xuICAgICAgICB9XG4gICAgICAgIHJlZCA9IE1hdGgubWluKDI1NSwgTWF0aC5tYXgoMCwgcmVkKSk7XG4gICAgICAgIGdyZWVuID0gTWF0aC5taW4oMjU1LCBNYXRoLm1heCgwLCBncmVlbikpO1xuICAgICAgICBibHVlID0gTWF0aC5taW4oMjU1LCBNYXRoLm1heCgwLCBibHVlKSk7XG4gICAgICAgIGFscGhhID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgYWxwaGEpKTtcbiAgICAgICAgaWYgKGFscGhhID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3JnYignICsgcmVkICsgJywgJyArIGdyZWVuICsgJywgJyArIGJsdWUgKyAnKSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdyZ2JhKCcgKyByZWQgKyAnLCAnICsgZ3JlZW4gKyAnLCAnICsgYmx1ZSArICcsICcgKyBhbHBoYSArICcpJztcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gZXhwb3J0cy5UWVBFUy5DT0xPUikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0cy5wYXJzZUFuZ2xlID0gZnVuY3Rpb24gcGFyc2VBbmdsZSh2YWwpIHtcbiAgICB2YXIgdHlwZSA9IGV4cG9ydHMudmFsdWVUeXBlKHZhbCk7XG4gICAgaWYgKHR5cGUgPT09IGV4cG9ydHMuVFlQRVMuTlVMTF9PUl9FTVBUWV9TVFIpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgaWYgKHR5cGUgIT09IGV4cG9ydHMuVFlQRVMuQU5HTEUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIHJlcyA9IGFuZ2xlUmVnRXguZXhlYyh2YWwpO1xuICAgIHZhciBmbHQgPSBwYXJzZUZsb2F0KHJlc1sxXSk7XG4gICAgaWYgKHJlc1syXSA9PT0gJ3JhZCcpIHtcbiAgICAgICAgZmx0ICo9IDE4MCAvIE1hdGguUEk7XG4gICAgfSBlbHNlIGlmIChyZXNbMl0gPT09ICdncmFkJykge1xuICAgICAgICBmbHQgKj0gMzYwIC8gNDAwO1xuICAgIH1cblxuICAgIHdoaWxlIChmbHQgPCAwKSB7XG4gICAgICAgIGZsdCArPSAzNjA7XG4gICAgfVxuICAgIHdoaWxlIChmbHQgPiAzNjApIHtcbiAgICAgICAgZmx0IC09IDM2MDtcbiAgICB9XG4gICAgcmV0dXJuIGZsdCArICdkZWcnO1xufTtcblxuZXhwb3J0cy5wYXJzZUtleXdvcmQgPSBmdW5jdGlvbiBwYXJzZUtleXdvcmQodmFsLCB2YWxpZF9rZXl3b3Jkcykge1xuICAgIHZhciB0eXBlID0gZXhwb3J0cy52YWx1ZVR5cGUodmFsKTtcbiAgICBpZiAodHlwZSA9PT0gZXhwb3J0cy5UWVBFUy5OVUxMX09SX0VNUFRZX1NUUikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBpZiAodHlwZSAhPT0gZXhwb3J0cy5UWVBFUy5LRVlXT1JEKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhbCA9IHZhbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IHZhbGlkX2tleXdvcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh2YWxpZF9rZXl3b3Jkc1tpXS50b0xvd2VyQ2FzZSgpID09PSB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZF9rZXl3b3Jkc1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuLy8gdXRpbGl0eSB0byB0cmFuc2xhdGUgZnJvbSBib3JkZXItd2lkdGggdG8gYm9yZGVyV2lkdGhcbnZhciBkYXNoZWRUb0NhbWVsQ2FzZSA9IGZ1bmN0aW9uIChkYXNoZWQpIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgY2FtZWwgPSAnJztcbiAgICB2YXIgbmV4dENhcCA9IGZhbHNlO1xuICAgIGZvciAoaSA9IDA7IGkgPCBkYXNoZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGRhc2hlZFtpXSAhPT0gJy0nKSB7XG4gICAgICAgICAgICBjYW1lbCArPSBuZXh0Q2FwID8gZGFzaGVkW2ldLnRvVXBwZXJDYXNlKCkgOiBkYXNoZWRbaV07XG4gICAgICAgICAgICBuZXh0Q2FwID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXh0Q2FwID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FtZWw7XG59O1xuZXhwb3J0cy5kYXNoZWRUb0NhbWVsQ2FzZSA9IGRhc2hlZFRvQ2FtZWxDYXNlO1xuXG52YXIgaXNfc3BhY2UgPSAvXFxzLztcbnZhciBvcGVuaW5nX2RlbGltaW5hdG9ycyA9IFsnXCInLCAnXFwnJywgJygnXTtcbnZhciBjbG9zaW5nX2RlbGltaW5hdG9ycyA9IFsnXCInLCAnXFwnJywgJyknXTtcbi8vIHRoaXMgc3BsaXRzIG9uIHdoaXRlc3BhY2UsIGJ1dCBrZWVwcyBxdW90ZWQgYW5kIHBhcmVuZWQgcGFydHMgdG9nZXRoZXJcbnZhciBnZXRQYXJ0cyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgZGVsaW1pbmF0b3Jfc3RhY2sgPSBbXTtcbiAgICB2YXIgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICB2YXIgaTtcbiAgICB2YXIgcGFydHMgPSBbXTtcbiAgICB2YXIgY3VycmVudF9wYXJ0ID0gJyc7XG4gICAgdmFyIG9wZW5pbmdfaW5kZXg7XG4gICAgdmFyIGNsb3NpbmdfaW5kZXg7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9wZW5pbmdfaW5kZXggPSBvcGVuaW5nX2RlbGltaW5hdG9ycy5pbmRleE9mKHN0cltpXSk7XG4gICAgICAgIGNsb3NpbmdfaW5kZXggPSBjbG9zaW5nX2RlbGltaW5hdG9ycy5pbmRleE9mKHN0cltpXSk7XG4gICAgICAgIGlmIChpc19zcGFjZS50ZXN0KHN0cltpXSkpIHtcbiAgICAgICAgICAgIGlmIChkZWxpbWluYXRvcl9zdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudF9wYXJ0ICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKGN1cnJlbnRfcGFydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFydCA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50X3BhcnQgKz0gc3RyW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN0cltpXSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFydCArPSBzdHJbaV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFydCArPSBzdHJbaV07XG4gICAgICAgICAgICAgICAgaWYgKGNsb3NpbmdfaW5kZXggIT09IC0xICYmIGNsb3NpbmdfaW5kZXggPT09IGRlbGltaW5hdG9yX3N0YWNrW2RlbGltaW5hdG9yX3N0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGltaW5hdG9yX3N0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlbmluZ19pbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsaW1pbmF0b3Jfc3RhY2sucHVzaChvcGVuaW5nX2luZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGN1cnJlbnRfcGFydCAhPT0gJycpIHtcbiAgICAgICAgcGFydHMucHVzaChjdXJyZW50X3BhcnQpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHM7XG59O1xuXG4vKlxuICogdGhpcyBlaXRoZXIgcmV0dXJucyB1bmRlZmluZWQgbWVhbmluZyB0aGF0IGl0IGlzbid0IHZhbGlkXG4gKiBvciByZXR1cm5zIGFuIG9iamVjdCB3aGVyZSB0aGUga2V5cyBhcmUgZGFzaGVkIHNob3J0XG4gKiBoYW5kIHByb3BlcnRpZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSB2YWx1ZXMgdG8gc2V0XG4gKiBvbiB0aGVtXG4gKi9cbmV4cG9ydHMuc2hvcnRoYW5kUGFyc2VyID0gZnVuY3Rpb24gcGFyc2Uodiwgc2hvcnRoYW5kX2Zvcikge1xuICAgIHZhciBvYmogPSB7fTtcbiAgICB2YXIgdHlwZSA9IGV4cG9ydHMudmFsdWVUeXBlKHYpO1xuICAgIGlmICh0eXBlID09PSBleHBvcnRzLlRZUEVTLk5VTExfT1JfRU1QVFlfU1RSKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHNob3J0aGFuZF9mb3IpLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICBvYmpbcHJvcGVydHldID0gJyc7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdiA9IHYudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHYgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHYudG9Mb3dlckNhc2UoKSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdmFyIHBhcnRzID0gZ2V0UGFydHModik7XG4gICAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgICBwYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgICAgIHZhciBwYXJ0X3ZhbGlkID0gZmFsc2U7XG4gICAgICAgIE9iamVjdC5rZXlzKHNob3J0aGFuZF9mb3IpLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICBpZiAoc2hvcnRoYW5kX2Zvcltwcm9wZXJ0eV0uaXNWYWxpZChwYXJ0KSkge1xuICAgICAgICAgICAgICAgIHBhcnRfdmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG9ialtwcm9wZXJ0eV0gPSBwYXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFsaWQgPSB2YWxpZCAmJiBwYXJ0X3ZhbGlkO1xuICAgIH0pO1xuICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydHMuc2hvcnRoYW5kU2V0dGVyID0gZnVuY3Rpb24gKHByb3BlcnR5LCBzaG9ydGhhbmRfZm9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHZhciBvYmogPSBleHBvcnRzLnNob3J0aGFuZFBhcnNlcih2LCBzaG9ydGhhbmRfZm9yKTtcbiAgICAgICAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zb2xlLmxvZygnc2hvcnRoYW5kU2V0dGVyIGZvcjonLCBwcm9wZXJ0eSwgJ29iajonLCBvYmopO1xuICAgICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKHN1YnByb3ApIHtcbiAgICAgICAgICAgIC8vIGluIGNhc2Ugc3VicHJvcCBpcyBhbiBpbXBsaWNpdCBwcm9wZXJ0eSwgdGhpcyB3aWxsIGNsZWFyXG4gICAgICAgICAgICAvLyAqaXRzKiBzdWJwcm9wZXJ0aWVzWFxuICAgICAgICAgICAgdmFyIGNhbWVsID0gZGFzaGVkVG9DYW1lbENhc2Uoc3VicHJvcCk7XG4gICAgICAgICAgICB0aGlzW2NhbWVsXSA9IG9ialtzdWJwcm9wXTtcbiAgICAgICAgICAgIC8vIGluIGNhc2UgaXQgZ2V0cyB0cmFuc2xhdGVkIGludG8gc29tZXRoaW5nIGVsc2UgKDAgLT4gMHB4KVxuICAgICAgICAgICAgb2JqW3N1YnByb3BdID0gdGhpc1tjYW1lbF07XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5KHN1YnByb3ApO1xuICAgICAgICAgICAgLy8gZG9uJ3QgYWRkIGluIGVtcHR5IHByb3BlcnRpZXNcbiAgICAgICAgICAgIGlmIChvYmpbc3VicHJvcF0gIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW3N1YnByb3BdID0gb2JqW3N1YnByb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgT2JqZWN0LmtleXMoc2hvcnRoYW5kX2ZvcikuZm9yRWFjaChmdW5jdGlvbiAoc3VicHJvcCkge1xuICAgICAgICAgICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkoc3VicHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5KHN1YnByb3ApO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl92YWx1ZXNbc3VicHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAvLyBpbiBjYXNlIHRoZSB2YWx1ZSBpcyBzb21ldGhpbmcgbGlrZSAnbm9uZScgdGhhdCByZW1vdmVzIGFsbCB2YWx1ZXMsXG4gICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIGdlbmVyYXRlZCBvbmUgaXMgbm90IGVtcHR5LCBmaXJzdCByZW1vdmUgdGhlIHByb3BlcnR5XG4gICAgICAgIC8vIGlmIGl0IGFscmVhZHkgZXhpc3RzLCB0aGVuIGNhbGwgdGhlIHNob3J0aGFuZEdldHRlciwgaWYgaXQncyBhbiBlbXB0eVxuICAgICAgICAvLyBzdHJpbmcsIGRvbid0IHNldCB0aGUgcHJvcGVydHlcbiAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICAgIHZhciBjYWxjdWxhdGVkID0gZXhwb3J0cy5zaG9ydGhhbmRHZXR0ZXIocHJvcGVydHksIHNob3J0aGFuZF9mb3IpLmNhbGwodGhpcyk7XG4gICAgICAgIGlmIChjYWxjdWxhdGVkICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5fc2V0UHJvcGVydHkocHJvcGVydHksIGNhbGN1bGF0ZWQpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbmV4cG9ydHMuc2hvcnRoYW5kR2V0dGVyID0gZnVuY3Rpb24gKHByb3BlcnR5LCBzaG9ydGhhbmRfZm9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNob3J0aGFuZF9mb3IpLm1hcChmdW5jdGlvbiAoc3VicHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShzdWJwcm9wKTtcbiAgICAgICAgfSwgdGhpcykuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSAnJztcbiAgICAgICAgfSkuam9pbignICcpO1xuICAgIH07XG59O1xuXG4vLyBpc1ZhbGlkKCl7MSw0fSB8IGluaGVyaXRcbi8vIGlmIG9uZSwgaXQgYXBwbGllcyB0byBhbGxcbi8vIGlmIHR3bywgdGhlIGZpcnN0IGFwcGxpZXMgdG8gdGhlIHRvcCBhbmQgYm90dG9tLCBhbmQgdGhlIHNlY29uZCB0byBsZWZ0IGFuZCByaWdodFxuLy8gaWYgdGhyZWUsIHRoZSBmaXJzdCBhcHBsaWVzIHRvIHRoZSB0b3AsIHRoZSBzZWNvbmQgdG8gbGVmdCBhbmQgcmlnaHQsIHRoZSB0aGlyZCBib3R0b21cbi8vIGlmIGZvdXIsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdFxuZXhwb3J0cy5pbXBsaWNpdFNldHRlciA9IGZ1bmN0aW9uIChwcm9wZXJ0eV9iZWZvcmUsIHByb3BlcnR5X2FmdGVyLCBpc1ZhbGlkLCBwYXJzZXIpIHtcbiAgICBwcm9wZXJ0eV9hZnRlciA9IHByb3BlcnR5X2FmdGVyIHx8ICcnO1xuICAgIGlmIChwcm9wZXJ0eV9hZnRlciAhPT0gJycpIHtcbiAgICAgICAgcHJvcGVydHlfYWZ0ZXIgPSAnLScgKyBwcm9wZXJ0eV9hZnRlcjtcbiAgICB9XG4gICAgdmFyIHBhcnRfbmFtZXMgPSBbXCJ0b3BcIixcInJpZ2h0XCIsXCJib3R0b21cIixcImxlZnRcIl07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdiA9IHYudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHYgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJ0cztcbiAgICAgICAgaWYgKHYudG9Mb3dlckNhc2UoKSA9PT0gJ2luaGVyaXQnIHx8IHYgPT09ICcnKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IFt2XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRzID0gZ2V0UGFydHModik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA8IDEgfHwgcGFydHMubGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGFydHMuZXZlcnkoaXNWYWxpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJ0cyA9IHBhcnRzLm1hcChmdW5jdGlvbiAocGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlcihwYXJ0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5X2JlZm9yZSArIHByb3BlcnR5X2FmdGVyLCBwYXJ0cy5qb2luKCcgJykpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBwYXJ0c1sxXSA9IHBhcnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHBhcnRzWzJdID0gcGFydHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcGFydHNbM10gPSBwYXJ0c1sxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0eV9iZWZvcmUgKyBcIi1cIiArIHBhcnRfbmFtZXNbaV0gKyBwcm9wZXJ0eV9hZnRlcjtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKHBhcnRzW2ldICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0gPSBwYXJ0c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdjtcbiAgICB9O1xufTtcblxuLy9cbi8vICBDb21wYW5pb24gdG8gaW1wbGljaXRTZXR0ZXIsIGJ1dCBmb3IgdGhlIGluZGl2aWR1YWwgcGFydHMuXG4vLyAgVGhpcyBzZXRzIHRoZSBpbmRpdmlkdWFsIHZhbHVlLCBhbmQgY2hlY2tzIHRvIHNlZSBpZiBhbGwgZm91clxuLy8gIHN1Yi1wYXJ0cyBhcmUgc2V0LiAgSWYgc28sIGl0IHNldHMgdGhlIHNob3J0aGFuZCB2ZXJzaW9uIGFuZCByZW1vdmVzXG4vLyAgdGhlIGluZGl2aWR1YWwgcGFydHMgZnJvbSB0aGUgY3NzVGV4dC5cbi8vXG5leHBvcnRzLnN1YkltcGxpY2l0U2V0dGVyID0gZnVuY3Rpb24gKHByZWZpeCwgcGFydCwgaXNWYWxpZCwgcGFyc2VyKSB7XG4gICAgdmFyIHByb3BlcnR5ID0gcHJlZml4ICsgJy0nICsgcGFydDtcbiAgICB2YXIgc3VicGFydHMgPSBbcHJlZml4K1wiLXRvcFwiLCBwcmVmaXgrXCItcmlnaHRcIiwgcHJlZml4K1wiLWJvdHRvbVwiLCBwcmVmaXgrXCItbGVmdFwiXTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB2ID0gdi50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1ZhbGlkKHYpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHYgPSBwYXJzZXIodik7XG4gICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHByb3BlcnR5LHYpO1xuICAgICAgICB2YXIgcGFydHMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZXNbc3VicGFydHNbaV1dID09IG51bGwgfHwgdGhpcy5fdmFsdWVzW3N1YnBhcnRzW2ldXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnRzLnB1c2godGhpcy5fdmFsdWVzW3N1YnBhcnRzW2ldXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHkoc3VicGFydHNbaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tzdWJwYXJ0c1tpXV0gPSBwYXJ0c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NldFByb3BlcnR5KHByZWZpeCxwYXJ0cy5qb2luKFwiIFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfTtcbn07XG5cblxudmFyIGNhbWVsX3RvX2Rhc2hlZCA9IC9bQS1aXS9nO1xuLypqc2xpbnQgcmVnZXhwOiB0cnVlKi9cbnZhciBmaXJzdF9zZWdtZW50ID0gL15cXChbXlxcLV1cXCktLztcbi8qanNsaW50IHJlZ2V4cDogZmFsc2UqL1xudmFyIHZlbmRvcl9wcmVmaXhlcyA9IFsnbycsICdtb3onLCAnbXMnLCAnd2Via2l0J107XG5leHBvcnRzLmNhbWVsVG9EYXNoZWQgPSBmdW5jdGlvbiAoY2FtZWxfY2FzZSkge1xuICAgIHZhciBtYXRjaDtcbiAgICB2YXIgZGFzaGVkID0gY2FtZWxfY2FzZS5yZXBsYWNlKGNhbWVsX3RvX2Rhc2hlZCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG4gICAgbWF0Y2ggPSBkYXNoZWQubWF0Y2goZmlyc3Rfc2VnbWVudCk7XG4gICAgaWYgKG1hdGNoICYmIHZlbmRvcl9wcmVmaXhlcy5pbmRleE9mKG1hdGNoWzFdKSAhPT0gLTEpIHtcbiAgICAgICAgZGFzaGVkID0gJy0nICsgZGFzaGVkO1xuICAgIH1cbiAgICByZXR1cm4gZGFzaGVkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gYXV0b2dlbmVyYXRlZFxuXG4vKlxuICpcbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxlL2Nzcy5odG1sI0NTUy1DU1MyUHJvcGVydGllc1xuICovXG5cbnZhciBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMCA9IHJlcXVpcmUoXCIuL3BhcnNlcnMuanNcIik7XG5cbnZhciBhbGlnbm1lbnRCYXNlbGluZV9leHBvcnRfZGVmaW5pdGlvbjtcbmFsaWdubWVudEJhc2VsaW5lX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2FsaWdubWVudC1iYXNlbGluZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdhbGlnbm1lbnQtYmFzZWxpbmUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGF6aW11dGhfZXhwb3J0X2RlZmluaXRpb247XG5hemltdXRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIHZhbHVlVHlwZSA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnZhbHVlVHlwZSh2KTtcblxuICAgIGlmICh2YWx1ZVR5cGUgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLkFOR0xFKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZUFuZ2xlKHYpKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWVUeXBlID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5LRVlXT1JEKSB7XG4gICAgICB2YXIga2V5d29yZHMgPSB2LnRvTG93ZXJDYXNlKCkudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gICAgICB2YXIgaGFzQmVoaW5kID0gZmFsc2U7XG5cbiAgICAgIGlmIChrZXl3b3Jkcy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGJlaGluZEluZGV4ID0ga2V5d29yZHMuaW5kZXhPZignYmVoaW5kJyk7XG4gICAgICBoYXNCZWhpbmQgPSBiZWhpbmRJbmRleCAhPT0gLTE7XG5cbiAgICAgIGlmIChrZXl3b3Jkcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFoYXNCZWhpbmQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBrZXl3b3Jkcy5zcGxpY2UoYmVoaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5d29yZHNbMF0gPT09ICdsZWZ0d2FyZHMnIHx8IGtleXdvcmRzWzBdID09PSAncmlnaHR3YXJkcycpIHtcbiAgICAgICAgaWYgKGhhc0JlaGluZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXRQcm9wZXJ0eSgnYXppbXV0aCcsIGtleXdvcmRzWzBdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleXdvcmRzWzBdID09PSAnYmVoaW5kJykge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCAnMTgwZGVnJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkZWc7XG5cbiAgICAgIHN3aXRjaCAoa2V5d29yZHNbMF0pIHtcbiAgICAgICAgY2FzZSAnbGVmdC1zaWRlJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCAnMjcwZGVnJyk7XG5cbiAgICAgICAgY2FzZSAnZmFyLWxlZnQnOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9zZXRQcm9wZXJ0eSgnYXppbXV0aCcsIChoYXNCZWhpbmQgPyAyNDAgOiAzMDApICsgJ2RlZycpO1xuXG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9zZXRQcm9wZXJ0eSgnYXppbXV0aCcsIChoYXNCZWhpbmQgPyAyMjAgOiAzMjApICsgJ2RlZycpO1xuXG4gICAgICAgIGNhc2UgJ2NlbnRlci1sZWZ0JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCAoaGFzQmVoaW5kID8gMjAwIDogMzQwKSArICdkZWcnKTtcblxuICAgICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9zZXRQcm9wZXJ0eSgnYXppbXV0aCcsIChoYXNCZWhpbmQgPyAxODAgOiAwKSArICdkZWcnKTtcblxuICAgICAgICBjYXNlICdjZW50ZXItcmlnaHQnOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9zZXRQcm9wZXJ0eSgnYXppbXV0aCcsIChoYXNCZWhpbmQgPyAxNjAgOiAyMCkgKyAnZGVnJyk7XG5cbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9zZXRQcm9wZXJ0eSgnYXppbXV0aCcsIChoYXNCZWhpbmQgPyAxNDAgOiA0MCkgKyAnZGVnJyk7XG5cbiAgICAgICAgY2FzZSAnZmFyLXJpZ2h0JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0UHJvcGVydHkoJ2F6aW11dGgnLCAoaGFzQmVoaW5kID8gMTIwIDogNjApICsgJ2RlZycpO1xuXG4gICAgICAgIGNhc2UgJ3JpZ2h0LXNpZGUnOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9zZXRQcm9wZXJ0eSgnYXppbXV0aCcsICc5MGRlZycpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYXppbXV0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYmFja2dyb3VuZENvbG9yX2V4cG9ydF9pc1ZhbGlkLCBiYWNrZ3JvdW5kQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG5cbnZhciBiYWNrZ3JvdW5kQ29sb3JfbG9jYWxfdmFyX3BhcnNlID0gZnVuY3Rpb24gcGFyc2Uodikge1xuICB2YXIgcGFyc2VkID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KTtcblxuICBpZiAocGFyc2VkICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgaWYgKGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnZhbHVlVHlwZSh2KSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCAmJiAodi50b0xvd2VyQ2FzZSgpID09PSAndHJhbnNwYXJlbnQnIHx8IHYudG9Mb3dlckNhc2UoKSA9PT0gJ2luaGVyaXQnKSkge1xuICAgIHJldHVybiB2O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmJhY2tncm91bmRDb2xvcl9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQodikge1xuICByZXR1cm4gYmFja2dyb3VuZENvbG9yX2xvY2FsX3Zhcl9wYXJzZSh2KSAhPT0gdW5kZWZpbmVkO1xufTtcblxuYmFja2dyb3VuZENvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdmFyIHBhcnNlZCA9IGJhY2tncm91bmRDb2xvcl9sb2NhbF92YXJfcGFyc2Uodik7XG5cbiAgICBpZiAocGFyc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1jb2xvcicsIHBhcnNlZCk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJhY2tncm91bmRJbWFnZV9leHBvcnRfaXNWYWxpZCwgYmFja2dyb3VuZEltYWdlX2V4cG9ydF9kZWZpbml0aW9uO1xuXG52YXIgYmFja2dyb3VuZEltYWdlX2xvY2FsX3Zhcl9wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgdmFyIHBhcnNlZCA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlVXJsKHYpO1xuXG4gIGlmIChwYXJzZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBpZiAoZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAudmFsdWVUeXBlKHYpID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5LRVlXT1JEICYmICh2LnRvTG93ZXJDYXNlKCkgPT09ICdub25lJyB8fCB2LnRvTG93ZXJDYXNlKCkgPT09ICdpbmhlcml0JykpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5iYWNrZ3JvdW5kSW1hZ2VfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGJhY2tncm91bmRJbWFnZV9sb2NhbF92YXJfcGFyc2UodikgIT09IHVuZGVmaW5lZDtcbn07XG5cbmJhY2tncm91bmRJbWFnZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWltYWdlJywgYmFja2dyb3VuZEltYWdlX2xvY2FsX3Zhcl9wYXJzZSh2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtaW1hZ2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJhY2tncm91bmRSZXBlYXRfZXhwb3J0X2lzVmFsaWQsIGJhY2tncm91bmRSZXBlYXRfZXhwb3J0X2RlZmluaXRpb247XG5cbnZhciBiYWNrZ3JvdW5kUmVwZWF0X2xvY2FsX3Zhcl9wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgaWYgKGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnZhbHVlVHlwZSh2KSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCAmJiAodi50b0xvd2VyQ2FzZSgpID09PSAncmVwZWF0JyB8fCB2LnRvTG93ZXJDYXNlKCkgPT09ICdyZXBlYXQteCcgfHwgdi50b0xvd2VyQ2FzZSgpID09PSAncmVwZWF0LXknIHx8IHYudG9Mb3dlckNhc2UoKSA9PT0gJ25vLXJlcGVhdCcgfHwgdi50b0xvd2VyQ2FzZSgpID09PSAnaW5oZXJpdCcpKSB7XG4gICAgcmV0dXJuIHY7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuYmFja2dyb3VuZFJlcGVhdF9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQodikge1xuICByZXR1cm4gYmFja2dyb3VuZFJlcGVhdF9sb2NhbF92YXJfcGFyc2UodikgIT09IHVuZGVmaW5lZDtcbn07XG5cbmJhY2tncm91bmRSZXBlYXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1yZXBlYXQnLCBiYWNrZ3JvdW5kUmVwZWF0X2xvY2FsX3Zhcl9wYXJzZSh2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtcmVwZWF0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBiYWNrZ3JvdW5kQXR0YWNobWVudF9leHBvcnRfaXNWYWxpZCwgYmFja2dyb3VuZEF0dGFjaG1lbnRfZXhwb3J0X2RlZmluaXRpb247XG5cbnZhciBiYWNrZ3JvdW5kQXR0YWNobWVudF9sb2NhbF92YXJfaXNWYWxpZCA9IGJhY2tncm91bmRBdHRhY2htZW50X2V4cG9ydF9pc1ZhbGlkID0gZnVuY3Rpb24gaXNWYWxpZCh2KSB7XG4gIHJldHVybiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUodikgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLktFWVdPUkQgJiYgKHYudG9Mb3dlckNhc2UoKSA9PT0gJ3Njcm9sbCcgfHwgdi50b0xvd2VyQ2FzZSgpID09PSAnZml4ZWQnIHx8IHYudG9Mb3dlckNhc2UoKSA9PT0gJ2luaGVyaXQnKTtcbn07XG5cbmJhY2tncm91bmRBdHRhY2htZW50X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKCFiYWNrZ3JvdW5kQXR0YWNobWVudF9sb2NhbF92YXJfaXNWYWxpZCh2KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1hdHRhY2htZW50Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBiYWNrZ3JvdW5kUG9zaXRpb25fZXhwb3J0X2lzVmFsaWQsIGJhY2tncm91bmRQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBiYWNrZ3JvdW5kUG9zaXRpb25fbG9jYWxfdmFyX3ZhbGlkX2tleXdvcmRzID0gWyd0b3AnLCAnY2VudGVyJywgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0J107XG5cbnZhciBiYWNrZ3JvdW5kUG9zaXRpb25fbG9jYWxfdmFyX3BhcnNlID0gZnVuY3Rpb24gcGFyc2Uodikge1xuICBpZiAodiA9PT0gJycgfHwgdiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgcGFydHMgPSB2LnNwbGl0KC9cXHMrLyk7XG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA+IDIgfHwgcGFydHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgdHlwZXMgPSBbXTtcbiAgcGFydHMuZm9yRWFjaChmdW5jdGlvbiAocGFydCwgaW5kZXgpIHtcbiAgICB0eXBlc1tpbmRleF0gPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUocGFydCk7XG4gIH0pO1xuXG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAodHlwZXNbMF0gPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLkxFTkdUSCB8fCB0eXBlc1swXSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuUEVSQ0VOVCkge1xuICAgICAgcmV0dXJuIHY7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVzWzBdID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5LRVlXT1JEKSB7XG4gICAgICBpZiAoYmFja2dyb3VuZFBvc2l0aW9uX2xvY2FsX3Zhcl92YWxpZF9rZXl3b3Jkcy5pbmRleE9mKHYudG9Mb3dlckNhc2UoKSkgIT09IC0xIHx8IHYudG9Mb3dlckNhc2UoKSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoKHR5cGVzWzBdID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5MRU5HVEggfHwgdHlwZXNbMF0gPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLlBFUkNFTlQpICYmICh0eXBlc1sxXSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuTEVOR1RIIHx8IHR5cGVzWzFdID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5QRVJDRU5UKSkge1xuICAgIHJldHVybiB2O1xuICB9XG5cbiAgaWYgKHR5cGVzWzBdICE9PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5LRVlXT1JEIHx8IHR5cGVzWzFdICE9PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5LRVlXT1JEKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChiYWNrZ3JvdW5kUG9zaXRpb25fbG9jYWxfdmFyX3ZhbGlkX2tleXdvcmRzLmluZGV4T2YocGFydHNbMF0pICE9PSAtMSAmJiBiYWNrZ3JvdW5kUG9zaXRpb25fbG9jYWxfdmFyX3ZhbGlkX2tleXdvcmRzLmluZGV4T2YocGFydHNbMV0pICE9PSAtMSkge1xuICAgIHJldHVybiB2O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmJhY2tncm91bmRQb3NpdGlvbl9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQodikge1xuICByZXR1cm4gYmFja2dyb3VuZFBvc2l0aW9uX2xvY2FsX3Zhcl9wYXJzZSh2KSAhPT0gdW5kZWZpbmVkO1xufTtcblxuYmFja2dyb3VuZFBvc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtcG9zaXRpb24nLCBiYWNrZ3JvdW5kUG9zaXRpb25fbG9jYWxfdmFyX3BhcnNlKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1wb3NpdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYmFja2dyb3VuZF9leHBvcnRfaXNWYWxpZCwgYmFja2dyb3VuZF9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBiYWNrZ3JvdW5kX2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yID0ge1xuICAnYmFja2dyb3VuZC1jb2xvcic6IHtcbiAgICBpc1ZhbGlkOiBiYWNrZ3JvdW5kQ29sb3JfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYmFja2dyb3VuZENvbG9yX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdiYWNrZ3JvdW5kLWltYWdlJzoge1xuICAgIGlzVmFsaWQ6IGJhY2tncm91bmRJbWFnZV9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBiYWNrZ3JvdW5kSW1hZ2VfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2JhY2tncm91bmQtcmVwZWF0Jzoge1xuICAgIGlzVmFsaWQ6IGJhY2tncm91bmRSZXBlYXRfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYmFja2dyb3VuZFJlcGVhdF9leHBvcnRfZGVmaW5pdGlvblxuICB9LFxuICAnYmFja2dyb3VuZC1hdHRhY2htZW50Jzoge1xuICAgIGlzVmFsaWQ6IGJhY2tncm91bmRBdHRhY2htZW50X2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGJhY2tncm91bmRBdHRhY2htZW50X2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdiYWNrZ3JvdW5kLXBvc2l0aW9uJzoge1xuICAgIGlzVmFsaWQ6IGJhY2tncm91bmRQb3NpdGlvbl9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBiYWNrZ3JvdW5kUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb25cbiAgfVxufTtcblxuYmFja2dyb3VuZF9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQodikge1xuICByZXR1cm4gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc2hvcnRoYW5kUGFyc2VyKHYsIGJhY2tncm91bmRfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpICE9PSB1bmRlZmluZWQ7XG59O1xuXG5iYWNrZ3JvdW5kX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFNldHRlcignYmFja2dyb3VuZCcsIGJhY2tncm91bmRfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpLFxuICBnZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZEdldHRlcignYmFja2dyb3VuZCcsIGJhY2tncm91bmRfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYmFja2dyb3VuZENsaXBfZXhwb3J0X2RlZmluaXRpb247XG5iYWNrZ3JvdW5kQ2xpcF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWNsaXAnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jbGlwJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBiYWNrZ3JvdW5kT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uO1xuYmFja2dyb3VuZE9yaWdpbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdiYWNrZ3JvdW5kLW9yaWdpbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLW9yaWdpbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYmFja2dyb3VuZFBvc2l0aW9uWF9leHBvcnRfZGVmaW5pdGlvbjtcbmJhY2tncm91bmRQb3NpdGlvblhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1wb3NpdGlvbi14Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtcG9zaXRpb24teCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYmFja2dyb3VuZFBvc2l0aW9uWV9leHBvcnRfZGVmaW5pdGlvbjtcbmJhY2tncm91bmRQb3NpdGlvbllfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1wb3NpdGlvbi15Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtcG9zaXRpb24teScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYmFja2dyb3VuZFJlcGVhdFhfZXhwb3J0X2RlZmluaXRpb247XG5iYWNrZ3JvdW5kUmVwZWF0WF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdiYWNrZ3JvdW5kLXJlcGVhdC14Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtcmVwZWF0LXgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJhY2tncm91bmRSZXBlYXRZX2V4cG9ydF9kZWZpbml0aW9uO1xuYmFja2dyb3VuZFJlcGVhdFlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1yZXBlYXQteScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLXJlcGVhdC15Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBiYWNrZ3JvdW5kU2l6ZV9leHBvcnRfZGVmaW5pdGlvbjtcbmJhY2tncm91bmRTaXplX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JhY2tncm91bmQtc2l6ZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLXNpemUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJhc2VsaW5lU2hpZnRfZXhwb3J0X2RlZmluaXRpb247XG5iYXNlbGluZVNoaWZ0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2Jhc2VsaW5lLXNoaWZ0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2Jhc2VsaW5lLXNoaWZ0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJXaWR0aF9leHBvcnRfaXNWYWxpZCwgYm9yZGVyV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG4vLyB0aGUgdmFsaWQgYm9yZGVyLXdpZHRoczpcbnZhciBib3JkZXJXaWR0aF9sb2NhbF92YXJfd2lkdGhzID0gWyd0aGluJywgJ21lZGl1bScsICd0aGljayddO1xuXG5ib3JkZXJXaWR0aF9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgdmFyIGxlbmd0aCA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlTGVuZ3RoKHYpO1xuXG4gIGlmIChsZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh2ID09PSAnJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdiA9IHYudG9Mb3dlckNhc2UoKTtcblxuICBpZiAoYm9yZGVyV2lkdGhfbG9jYWxfdmFyX3dpZHRocy5pbmRleE9mKHYpID09PSAtMSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIGJvcmRlcldpZHRoX2xvY2FsX3Zhcl9pc1ZhbGlkID0gYm9yZGVyV2lkdGhfZXhwb3J0X2lzVmFsaWQ7XG5cbnZhciBib3JkZXJXaWR0aF9sb2NhbF92YXJfcGFyc2VyID0gZnVuY3Rpb24gKHYpIHtcbiAgdmFyIGxlbmd0aCA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlTGVuZ3RoKHYpO1xuXG4gIGlmIChsZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBsZW5ndGg7XG4gIH1cblxuICBpZiAoYm9yZGVyV2lkdGhfbG9jYWxfdmFyX2lzVmFsaWQodikpIHtcbiAgICByZXR1cm4gdi50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmJvcmRlcldpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLmltcGxpY2l0U2V0dGVyKCdib3JkZXInLCAnd2lkdGgnLCBib3JkZXJXaWR0aF9sb2NhbF92YXJfaXNWYWxpZCwgYm9yZGVyV2lkdGhfbG9jYWxfdmFyX3BhcnNlciksXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyU3R5bGVfZXhwb3J0X2lzVmFsaWQsIGJvcmRlclN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xuLy8gdGhlIHZhbGlkIGJvcmRlci1zdHlsZXM6XG52YXIgYm9yZGVyU3R5bGVfbG9jYWxfdmFyX3N0eWxlcyA9IFsnbm9uZScsICdoaWRkZW4nLCAnZG90dGVkJywgJ2Rhc2hlZCcsICdzb2xpZCcsICdkb3VibGUnLCAnZ3Jvb3ZlJywgJ3JpZGdlJywgJ2luc2V0JywgJ291dHNldCddO1xuXG5ib3JkZXJTdHlsZV9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiAodiA9PT0gJycgfHwgYm9yZGVyU3R5bGVfbG9jYWxfdmFyX3N0eWxlcy5pbmRleE9mKHYpICE9PSAtMSk7XG59O1xuXG52YXIgYm9yZGVyU3R5bGVfbG9jYWxfdmFyX2lzVmFsaWQgPSBib3JkZXJTdHlsZV9leHBvcnRfaXNWYWxpZDtcblxudmFyIGJvcmRlclN0eWxlX2xvY2FsX3Zhcl9wYXJzZXIgPSBmdW5jdGlvbiAodikge1xuICBpZiAoYm9yZGVyU3R5bGVfbG9jYWxfdmFyX2lzVmFsaWQodikpIHtcbiAgICByZXR1cm4gdi50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmJvcmRlclN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLmltcGxpY2l0U2V0dGVyKCdib3JkZXInLCAnc3R5bGUnLCBib3JkZXJTdHlsZV9sb2NhbF92YXJfaXNWYWxpZCwgYm9yZGVyU3R5bGVfbG9jYWxfdmFyX3BhcnNlciksXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyQ29sb3JfZXhwb3J0X2lzVmFsaWQsIGJvcmRlckNvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xuXG5ib3JkZXJDb2xvcl9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB2ID09PSAnJyB8fCB2LnRvTG93ZXJDYXNlKCkgPT09ICd0cmFuc3BhcmVudCcgfHwgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAudmFsdWVUeXBlKHYpID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5DT0xPUjtcbn07XG5cbnZhciBib3JkZXJDb2xvcl9sb2NhbF92YXJfaXNWYWxpZCA9IGJvcmRlckNvbG9yX2V4cG9ydF9pc1ZhbGlkO1xuXG52YXIgYm9yZGVyQ29sb3JfbG9jYWxfdmFyX3BhcnNlciA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmIChib3JkZXJDb2xvcl9sb2NhbF92YXJfaXNWYWxpZCh2KSkge1xuICAgIHJldHVybiB2LnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuYm9yZGVyQ29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuaW1wbGljaXRTZXR0ZXIoJ2JvcmRlcicsICdjb2xvcicsIGJvcmRlckNvbG9yX2xvY2FsX3Zhcl9pc1ZhbGlkLCBib3JkZXJDb2xvcl9sb2NhbF92YXJfcGFyc2VyKSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJfZXhwb3J0X2lzVmFsaWQsIGJvcmRlcl9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBib3JkZXJfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IgPSB7XG4gICdib3JkZXItd2lkdGgnOiB7XG4gICAgaXNWYWxpZDogYm9yZGVyV2lkdGhfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyV2lkdGhfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2JvcmRlci1zdHlsZSc6IHtcbiAgICBpc1ZhbGlkOiBib3JkZXJTdHlsZV9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBib3JkZXJTdHlsZV9leHBvcnRfZGVmaW5pdGlvblxuICB9LFxuICAnYm9yZGVyLWNvbG9yJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlckNvbG9yX2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGJvcmRlckNvbG9yX2V4cG9ydF9kZWZpbml0aW9uXG4gIH1cbn07XG5cbnZhciBib3JkZXJfbG9jYWxfdmFyX2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFBhcnNlcih2LCBib3JkZXJfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpICE9PSB1bmRlZmluZWQ7XG59O1xuXG5ib3JkZXJfZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJfbG9jYWxfdmFyX2lzVmFsaWQ7XG5cbnZhciBib3JkZXJfbG9jYWxfdmFyX3BhcnNlciA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmICh2LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ25vbmUnKSB7XG4gICAgdiA9ICcnO1xuICB9XG5cbiAgaWYgKGJvcmRlcl9sb2NhbF92YXJfaXNWYWxpZCh2KSkge1xuICAgIHJldHVybiB2O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciBib3JkZXJfbG9jYWxfdmFyX215U2hvcnRoYW5kU2V0dGVyID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc2hvcnRoYW5kU2V0dGVyKCdib3JkZXInLCBib3JkZXJfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpO1xudmFyIGJvcmRlcl9sb2NhbF92YXJfbXlTaG9ydGhhbmRHZXR0ZXIgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRHZXR0ZXIoJ2JvcmRlcicsIGJvcmRlcl9sb2NhbF92YXJfc2hvcnRoYW5kX2Zvcik7XG5ib3JkZXJfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAodi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgdiA9ICcnO1xuICAgIH1cblxuICAgIGJvcmRlcl9sb2NhbF92YXJfbXlTaG9ydGhhbmRTZXR0ZXIuY2FsbCh0aGlzLCB2KTtcbiAgICB0aGlzLnJlbW92ZVByb3BlcnR5KCdib3JkZXItdG9wJyk7XG4gICAgdGhpcy5yZW1vdmVQcm9wZXJ0eSgnYm9yZGVyLWxlZnQnKTtcbiAgICB0aGlzLnJlbW92ZVByb3BlcnR5KCdib3JkZXItcmlnaHQnKTtcbiAgICB0aGlzLnJlbW92ZVByb3BlcnR5KCdib3JkZXItYm90dG9tJyk7XG4gICAgdGhpcy5fdmFsdWVzWydib3JkZXItdG9wJ10gPSB0aGlzLl92YWx1ZXMuYm9yZGVyO1xuICAgIHRoaXMuX3ZhbHVlc1snYm9yZGVyLWxlZnQnXSA9IHRoaXMuX3ZhbHVlcy5ib3JkZXI7XG4gICAgdGhpcy5fdmFsdWVzWydib3JkZXItcmlnaHQnXSA9IHRoaXMuX3ZhbHVlcy5ib3JkZXI7XG4gICAgdGhpcy5fdmFsdWVzWydib3JkZXItYm90dG9tJ10gPSB0aGlzLl92YWx1ZXMuYm9yZGVyO1xuICB9LFxuICBnZXQ6IGJvcmRlcl9sb2NhbF92YXJfbXlTaG9ydGhhbmRHZXR0ZXIsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJCb3R0b21XaWR0aF9leHBvcnRfaXNWYWxpZCwgYm9yZGVyQm90dG9tV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG52YXIgYm9yZGVyQm90dG9tV2lkdGhfbG9jYWxfdmFyX2lzVmFsaWQgPSBib3JkZXJCb3R0b21XaWR0aF9leHBvcnRfaXNWYWxpZCA9IGJvcmRlcldpZHRoX2V4cG9ydF9pc1ZhbGlkO1xuYm9yZGVyQm90dG9tV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoYm9yZGVyQm90dG9tV2lkdGhfbG9jYWxfdmFyX2lzVmFsaWQodikpIHtcbiAgICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItYm90dG9tLXdpZHRoJywgdik7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItYm90dG9tLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJCb3R0b21TdHlsZV9leHBvcnRfaXNWYWxpZCwgYm9yZGVyQm90dG9tU3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG5ib3JkZXJCb3R0b21TdHlsZV9leHBvcnRfaXNWYWxpZCA9IGJvcmRlclN0eWxlX2V4cG9ydF9pc1ZhbGlkO1xuYm9yZGVyQm90dG9tU3R5bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoYm9yZGVyU3R5bGVfZXhwb3J0X2lzVmFsaWQodikpIHtcbiAgICAgIGlmICh2LnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICB2ID0gJyc7XG4gICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHkoJ2JvcmRlci1ib3R0b20td2lkdGgnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1ib3R0b20tc3R5bGUnLCB2KTtcbiAgICB9XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1ib3R0b20tc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlckJvdHRvbUNvbG9yX2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJCb3R0b21Db2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBib3JkZXJCb3R0b21Db2xvcl9sb2NhbF92YXJfaXNWYWxpZCA9IGJvcmRlckJvdHRvbUNvbG9yX2V4cG9ydF9pc1ZhbGlkID0gYm9yZGVyQ29sb3JfZXhwb3J0X2lzVmFsaWQ7XG5ib3JkZXJCb3R0b21Db2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIGlmIChib3JkZXJCb3R0b21Db2xvcl9sb2NhbF92YXJfaXNWYWxpZCh2KSkge1xuICAgICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1ib3R0b20tY29sb3InLCB2KTtcbiAgICB9XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1ib3R0b20tY29sb3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlckJvdHRvbV9leHBvcnRfaXNWYWxpZCwgYm9yZGVyQm90dG9tX2V4cG9ydF9kZWZpbml0aW9uO1xudmFyIGJvcmRlckJvdHRvbV9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvciA9IHtcbiAgJ2JvcmRlci1ib3R0b20td2lkdGgnOiB7XG4gICAgaXNWYWxpZDogYm9yZGVyQm90dG9tV2lkdGhfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyQm90dG9tV2lkdGhfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2JvcmRlci1ib3R0b20tc3R5bGUnOiB7XG4gICAgaXNWYWxpZDogYm9yZGVyQm90dG9tU3R5bGVfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyQm90dG9tU3R5bGVfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2JvcmRlci1ib3R0b20tY29sb3InOiB7XG4gICAgaXNWYWxpZDogYm9yZGVyQm90dG9tQ29sb3JfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyQm90dG9tQ29sb3JfZXhwb3J0X2RlZmluaXRpb25cbiAgfVxufTtcblxudmFyIGJvcmRlckJvdHRvbV9sb2NhbF92YXJfaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQodikge1xuICByZXR1cm4gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc2hvcnRoYW5kUGFyc2VyKHYsIGJvcmRlckJvdHRvbV9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvcikgIT09IHVuZGVmaW5lZDtcbn07XG5cbmJvcmRlckJvdHRvbV9leHBvcnRfaXNWYWxpZCA9IGJvcmRlckJvdHRvbV9sb2NhbF92YXJfaXNWYWxpZDtcbmJvcmRlckJvdHRvbV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRTZXR0ZXIoJ2JvcmRlci1ib3R0b20nLCBib3JkZXJCb3R0b21fbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpLFxuICBnZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZEdldHRlcignYm9yZGVyLWJvdHRvbScsIGJvcmRlckJvdHRvbV9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvciksXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJCb3R0b21MZWZ0UmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uO1xuYm9yZGVyQm90dG9tTGVmdFJhZGl1c19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uO1xuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlckNvbGxhcHNlX2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJDb2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbjtcblxudmFyIGJvcmRlckNvbGxhcHNlX2xvY2FsX3Zhcl9wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgaWYgKGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnZhbHVlVHlwZSh2KSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCAmJiAodi50b0xvd2VyQ2FzZSgpID09PSAnY29sbGFwc2UnIHx8IHYudG9Mb3dlckNhc2UoKSA9PT0gJ3NlcGFyYXRlJyB8fCB2LnRvTG93ZXJDYXNlKCkgPT09ICdpbmhlcml0JykpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5ib3JkZXJDb2xsYXBzZV9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQodikge1xuICByZXR1cm4gYm9yZGVyQ29sbGFwc2VfbG9jYWxfdmFyX3BhcnNlKHYpICE9PSB1bmRlZmluZWQ7XG59O1xuXG5ib3JkZXJDb2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItY29sbGFwc2UnLCBib3JkZXJDb2xsYXBzZV9sb2NhbF92YXJfcGFyc2UodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItY29sbGFwc2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlckltYWdlX2V4cG9ydF9kZWZpbml0aW9uO1xuYm9yZGVySW1hZ2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWltYWdlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1pbWFnZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVySW1hZ2VPdXRzZXRfZXhwb3J0X2RlZmluaXRpb247XG5ib3JkZXJJbWFnZU91dHNldF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItaW1hZ2Utb3V0c2V0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1pbWFnZS1vdXRzZXQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlckltYWdlUmVwZWF0X2V4cG9ydF9kZWZpbml0aW9uO1xuYm9yZGVySW1hZ2VSZXBlYXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWltYWdlLXJlcGVhdCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItaW1hZ2UtcmVwZWF0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJJbWFnZVNsaWNlX2V4cG9ydF9kZWZpbml0aW9uO1xuYm9yZGVySW1hZ2VTbGljZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItaW1hZ2Utc2xpY2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWltYWdlLXNsaWNlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJJbWFnZVNvdXJjZV9leHBvcnRfZGVmaW5pdGlvbjtcbmJvcmRlckltYWdlU291cmNlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1pbWFnZS1zb3VyY2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWltYWdlLXNvdXJjZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVySW1hZ2VXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbmJvcmRlckltYWdlV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWltYWdlLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1pbWFnZS13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyTGVmdFdpZHRoX2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJMZWZ0V2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG52YXIgYm9yZGVyTGVmdFdpZHRoX2xvY2FsX3Zhcl9pc1ZhbGlkID0gYm9yZGVyTGVmdFdpZHRoX2V4cG9ydF9pc1ZhbGlkID0gYm9yZGVyV2lkdGhfZXhwb3J0X2lzVmFsaWQ7XG5ib3JkZXJMZWZ0V2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoYm9yZGVyTGVmdFdpZHRoX2xvY2FsX3Zhcl9pc1ZhbGlkKHYpKSB7XG4gICAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWxlZnQtd2lkdGgnLCB2KTtcbiAgICB9XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1sZWZ0LXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJMZWZ0U3R5bGVfZXhwb3J0X2lzVmFsaWQsIGJvcmRlckxlZnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbmJvcmRlckxlZnRTdHlsZV9leHBvcnRfaXNWYWxpZCA9IGJvcmRlclN0eWxlX2V4cG9ydF9pc1ZhbGlkO1xuYm9yZGVyTGVmdFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKGJvcmRlclN0eWxlX2V4cG9ydF9pc1ZhbGlkKHYpKSB7XG4gICAgICBpZiAodi50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScpIHtcbiAgICAgICAgdiA9ICcnO1xuICAgICAgICB0aGlzLnJlbW92ZVByb3BlcnR5KCdib3JkZXItbGVmdC13aWR0aCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLWxlZnQtc3R5bGUnLCB2KTtcbiAgICB9XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1sZWZ0LXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJMZWZ0Q29sb3JfZXhwb3J0X2lzVmFsaWQsIGJvcmRlckxlZnRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBib3JkZXJMZWZ0Q29sb3JfbG9jYWxfdmFyX2lzVmFsaWQgPSBib3JkZXJMZWZ0Q29sb3JfZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJDb2xvcl9leHBvcnRfaXNWYWxpZDtcbmJvcmRlckxlZnRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIGlmIChib3JkZXJMZWZ0Q29sb3JfbG9jYWxfdmFyX2lzVmFsaWQodikpIHtcbiAgICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItbGVmdC1jb2xvcicsIHYpO1xuICAgIH1cbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWxlZnQtY29sb3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlckxlZnRfZXhwb3J0X2lzVmFsaWQsIGJvcmRlckxlZnRfZXhwb3J0X2RlZmluaXRpb247XG52YXIgYm9yZGVyTGVmdF9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvciA9IHtcbiAgJ2JvcmRlci1sZWZ0LXdpZHRoJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlckxlZnRXaWR0aF9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBib3JkZXJMZWZ0V2lkdGhfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2JvcmRlci1sZWZ0LXN0eWxlJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlckxlZnRTdHlsZV9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBib3JkZXJMZWZ0U3R5bGVfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2JvcmRlci1sZWZ0LWNvbG9yJzoge1xuICAgIGlzVmFsaWQ6IGJvcmRlckxlZnRDb2xvcl9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBib3JkZXJMZWZ0Q29sb3JfZXhwb3J0X2RlZmluaXRpb25cbiAgfVxufTtcblxudmFyIGJvcmRlckxlZnRfbG9jYWxfdmFyX2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFBhcnNlcih2LCBib3JkZXJMZWZ0X2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSAhPT0gdW5kZWZpbmVkO1xufTtcblxuYm9yZGVyTGVmdF9leHBvcnRfaXNWYWxpZCA9IGJvcmRlckxlZnRfbG9jYWxfdmFyX2lzVmFsaWQ7XG5ib3JkZXJMZWZ0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFNldHRlcignYm9yZGVyLWxlZnQnLCBib3JkZXJMZWZ0X2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSxcbiAgZ2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRHZXR0ZXIoJ2JvcmRlci1sZWZ0JywgYm9yZGVyTGVmdF9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvciksXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJSYWRpdXNfZXhwb3J0X2RlZmluaXRpb247XG5ib3JkZXJSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLXJhZGl1cycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItcmFkaXVzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJSaWdodFdpZHRoX2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJSaWdodFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xudmFyIGJvcmRlclJpZ2h0V2lkdGhfbG9jYWxfdmFyX2lzVmFsaWQgPSBib3JkZXJSaWdodFdpZHRoX2V4cG9ydF9pc1ZhbGlkID0gYm9yZGVyV2lkdGhfZXhwb3J0X2lzVmFsaWQ7XG5ib3JkZXJSaWdodFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKGJvcmRlclJpZ2h0V2lkdGhfbG9jYWxfdmFyX2lzVmFsaWQodikpIHtcbiAgICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItcmlnaHQtd2lkdGgnLCB2KTtcbiAgICB9XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1yaWdodC13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyUmlnaHRTdHlsZV9leHBvcnRfaXNWYWxpZCwgYm9yZGVyUmlnaHRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbmJvcmRlclJpZ2h0U3R5bGVfZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJTdHlsZV9leHBvcnRfaXNWYWxpZDtcbmJvcmRlclJpZ2h0U3R5bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoYm9yZGVyU3R5bGVfZXhwb3J0X2lzVmFsaWQodikpIHtcbiAgICAgIGlmICh2LnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICB2ID0gJyc7XG4gICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHkoJ2JvcmRlci1yaWdodC13aWR0aCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLXJpZ2h0LXN0eWxlJywgdik7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItcmlnaHQtc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlclJpZ2h0Q29sb3JfZXhwb3J0X2lzVmFsaWQsIGJvcmRlclJpZ2h0Q29sb3JfZXhwb3J0X2RlZmluaXRpb247XG52YXIgYm9yZGVyUmlnaHRDb2xvcl9sb2NhbF92YXJfaXNWYWxpZCA9IGJvcmRlclJpZ2h0Q29sb3JfZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJDb2xvcl9leHBvcnRfaXNWYWxpZDtcbmJvcmRlclJpZ2h0Q29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoYm9yZGVyUmlnaHRDb2xvcl9sb2NhbF92YXJfaXNWYWxpZCh2KSkge1xuICAgICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci1yaWdodC1jb2xvcicsIHYpO1xuICAgIH1cbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLXJpZ2h0LWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJSaWdodF9leHBvcnRfaXNWYWxpZCwgYm9yZGVyUmlnaHRfZXhwb3J0X2RlZmluaXRpb247XG52YXIgYm9yZGVyUmlnaHRfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IgPSB7XG4gICdib3JkZXItcmlnaHQtd2lkdGgnOiB7XG4gICAgaXNWYWxpZDogYm9yZGVyUmlnaHRXaWR0aF9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBib3JkZXJSaWdodFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdib3JkZXItcmlnaHQtc3R5bGUnOiB7XG4gICAgaXNWYWxpZDogYm9yZGVyUmlnaHRTdHlsZV9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBib3JkZXJSaWdodFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdib3JkZXItcmlnaHQtY29sb3InOiB7XG4gICAgaXNWYWxpZDogYm9yZGVyUmlnaHRDb2xvcl9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBib3JkZXJSaWdodENvbG9yX2V4cG9ydF9kZWZpbml0aW9uXG4gIH1cbn07XG5cbnZhciBib3JkZXJSaWdodF9sb2NhbF92YXJfaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQodikge1xuICByZXR1cm4gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc2hvcnRoYW5kUGFyc2VyKHYsIGJvcmRlclJpZ2h0X2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSAhPT0gdW5kZWZpbmVkO1xufTtcblxuYm9yZGVyUmlnaHRfZXhwb3J0X2lzVmFsaWQgPSBib3JkZXJSaWdodF9sb2NhbF92YXJfaXNWYWxpZDtcbmJvcmRlclJpZ2h0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFNldHRlcignYm9yZGVyLXJpZ2h0JywgYm9yZGVyUmlnaHRfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpLFxuICBnZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZEdldHRlcignYm9yZGVyLXJpZ2h0JywgYm9yZGVyUmlnaHRfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyU3BhY2luZ19leHBvcnRfaXNWYWxpZCwgYm9yZGVyU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbjtcblxuLy8gPGxlbmd0aD4gPGxlbmd0aD4/IHwgaW5oZXJpdFxuLy8gaWYgb25lLCBpdCBhcHBsaWVzIHRvIGJvdGggaG9yaXpvbnRhbCBhbmQgdmVyaWNhbCBzcGFjaW5nXG4vLyBpZiB0d28sIHRoZSBmaXJzdCBhcHBsaWVzIHRvIHRoZSBob3Jpem9udGFsIGFuZCB0aGUgc2Vjb25kIGFwcGxpZXMgdG8gdmVydGljYWwgc3BhY2luZ1xudmFyIGJvcmRlclNwYWNpbmdfbG9jYWxfdmFyX3BhcnNlID0gZnVuY3Rpb24gcGFyc2Uodikge1xuICBpZiAodiA9PT0gJycgfHwgdiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodi50b0xvd2VyQ2FzZSgpID09PSAnaW5oZXJpdCcpIHtcbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIHZhciBwYXJ0cyA9IHYuc3BsaXQoL1xccysvKTtcblxuICBpZiAocGFydHMubGVuZ3RoICE9PSAxICYmIHBhcnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgaWYgKGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnZhbHVlVHlwZShwYXJ0KSAhPT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuTEVOR1RIKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB2O1xufTtcblxuYm9yZGVyU3BhY2luZ19leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQodikge1xuICByZXR1cm4gYm9yZGVyU3BhY2luZ19sb2NhbF92YXJfcGFyc2UodikgIT09IHVuZGVmaW5lZDtcbn07XG5cbmJvcmRlclNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLXNwYWNpbmcnLCBib3JkZXJTcGFjaW5nX2xvY2FsX3Zhcl9wYXJzZSh2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1zcGFjaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJUb3BXaWR0aF9leHBvcnRfaXNWYWxpZCwgYm9yZGVyVG9wV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG5ib3JkZXJUb3BXaWR0aF9leHBvcnRfaXNWYWxpZCA9IGJvcmRlcldpZHRoX2V4cG9ydF9pc1ZhbGlkO1xuYm9yZGVyVG9wV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoYm9yZGVyV2lkdGhfZXhwb3J0X2lzVmFsaWQodikpIHtcbiAgICAgIHRoaXMuX3NldFByb3BlcnR5KCdib3JkZXItdG9wLXdpZHRoJywgdik7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItdG9wLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJUb3BTdHlsZV9leHBvcnRfaXNWYWxpZCwgYm9yZGVyVG9wU3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG5ib3JkZXJUb3BTdHlsZV9leHBvcnRfaXNWYWxpZCA9IGJvcmRlclN0eWxlX2V4cG9ydF9pc1ZhbGlkO1xuYm9yZGVyVG9wU3R5bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAoYm9yZGVyU3R5bGVfZXhwb3J0X2lzVmFsaWQodikpIHtcbiAgICAgIGlmICh2LnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICB2ID0gJyc7XG4gICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHkoJ2JvcmRlci10b3Atd2lkdGgnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci10b3Atc3R5bGUnLCB2KTtcbiAgICB9XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci10b3Atc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlclRvcENvbG9yX2V4cG9ydF9pc1ZhbGlkLCBib3JkZXJUb3BDb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBib3JkZXJUb3BDb2xvcl9sb2NhbF92YXJfaXNWYWxpZCA9IGJvcmRlclRvcENvbG9yX2V4cG9ydF9pc1ZhbGlkID0gYm9yZGVyQ29sb3JfZXhwb3J0X2lzVmFsaWQ7XG5ib3JkZXJUb3BDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIGlmIChib3JkZXJUb3BDb2xvcl9sb2NhbF92YXJfaXNWYWxpZCh2KSkge1xuICAgICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci10b3AtY29sb3InLCB2KTtcbiAgICB9XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci10b3AtY29sb3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGJvcmRlclRvcF9leHBvcnRfaXNWYWxpZCwgYm9yZGVyVG9wX2V4cG9ydF9kZWZpbml0aW9uO1xudmFyIGJvcmRlclRvcF9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvciA9IHtcbiAgJ2JvcmRlci10b3Atd2lkdGgnOiB7XG4gICAgaXNWYWxpZDogYm9yZGVyVG9wV2lkdGhfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyVG9wV2lkdGhfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2JvcmRlci10b3Atc3R5bGUnOiB7XG4gICAgaXNWYWxpZDogYm9yZGVyVG9wU3R5bGVfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyVG9wU3R5bGVfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2JvcmRlci10b3AtY29sb3InOiB7XG4gICAgaXNWYWxpZDogYm9yZGVyVG9wQ29sb3JfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogYm9yZGVyVG9wQ29sb3JfZXhwb3J0X2RlZmluaXRpb25cbiAgfVxufTtcblxuYm9yZGVyVG9wX2V4cG9ydF9pc1ZhbGlkID0gZnVuY3Rpb24gKHYpIHtcbiAgcmV0dXJuIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFBhcnNlcih2LCBib3JkZXJUb3BfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpICE9PSB1bmRlZmluZWQ7XG59O1xuXG5ib3JkZXJUb3BfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc2hvcnRoYW5kU2V0dGVyKCdib3JkZXItdG9wJywgYm9yZGVyVG9wX2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKSxcbiAgZ2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zaG9ydGhhbmRHZXR0ZXIoJ2JvcmRlci10b3AnLCBib3JkZXJUb3BfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm9yZGVyVG9wTGVmdFJhZGl1c19leHBvcnRfZGVmaW5pdGlvbjtcbmJvcmRlclRvcExlZnRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItdG9wLWxlZnQtcmFkaXVzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3JkZXJUb3BSaWdodFJhZGl1c19leHBvcnRfZGVmaW5pdGlvbjtcbmJvcmRlclRvcFJpZ2h0UmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBib3R0b21fZXhwb3J0X2RlZmluaXRpb247XG5ib3R0b21fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnYm90dG9tJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VNZWFzdXJlbWVudCh2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2JvdHRvbScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm94U2hhZG93X2V4cG9ydF9kZWZpbml0aW9uO1xuYm94U2hhZG93X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JveC1zaGFkb3cnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm94LXNoYWRvdycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgYm94U2l6aW5nX2V4cG9ydF9kZWZpbml0aW9uO1xuYm94U2l6aW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2JveC1zaXppbmcnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm94LXNpemluZycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgY2FwdGlvblNpZGVfZXhwb3J0X2RlZmluaXRpb247XG5jYXB0aW9uU2lkZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjYXB0aW9uLXNpZGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY2FwdGlvbi1zaWRlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjbGVhcl9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBjbGVhcl9sb2NhbF92YXJfY2xlYXJfa2V5d29yZHMgPSBbJ25vbmUnLCAnbGVmdCcsICdyaWdodCcsICdib3RoJywgJ2luaGVyaXQnXTtcbmNsZWFyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2NsZWFyJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VLZXl3b3JkKHYsIGNsZWFyX2xvY2FsX3Zhcl9jbGVhcl9rZXl3b3JkcykpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdjbGVhcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgY2xpcF9leHBvcnRfZGVmaW5pdGlvbjtcbi8qanNsaW50IHJlZ2V4cDogdHJ1ZSovdmFyIGNsaXBfbG9jYWxfdmFyX3NoYXBlX3JlZ2V4ID0gL15yZWN0XFwoKC4qKVxcKSQvaTsgLypqc2xpbnQgcmVnZXhwOiBmYWxzZSovXG5cbnZhciBjbGlwX2xvY2FsX3Zhcl9wYXJzZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgaWYgKHZhbCA9PT0gJycgfHwgdmFsID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcblxuICBpZiAodmFsID09PSAnYXV0bycgfHwgdmFsID09PSAnaW5oZXJpdCcpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgdmFyIG1hdGNoZXMgPSB2YWwubWF0Y2goY2xpcF9sb2NhbF92YXJfc2hhcGVfcmVnZXgpO1xuXG4gIGlmICghbWF0Y2hlcykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgcGFydHMgPSBtYXRjaGVzWzFdLnNwbGl0KC9cXHMqLFxccyovKTtcblxuICBpZiAocGFydHMubGVuZ3RoICE9PSA0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciB2YWxpZCA9IHBhcnRzLmV2ZXJ5KGZ1bmN0aW9uIChwYXJ0LCBpbmRleCkge1xuICAgIHZhciBtZWFzdXJlbWVudCA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlTWVhc3VyZW1lbnQocGFydCk7XG4gICAgcGFydHNbaW5kZXhdID0gbWVhc3VyZW1lbnQ7XG4gICAgcmV0dXJuIG1lYXN1cmVtZW50ICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIGlmICghdmFsaWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcGFydHMgPSBwYXJ0cy5qb2luKCcsICcpO1xuICByZXR1cm4gdmFsLnJlcGxhY2UobWF0Y2hlc1sxXSwgcGFydHMpO1xufTtcblxuY2xpcF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjbGlwJywgY2xpcF9sb2NhbF92YXJfcGFyc2UodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdjbGlwJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbmNvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2NvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjb2xvckludGVycG9sYXRpb25fZXhwb3J0X2RlZmluaXRpb247XG5jb2xvckludGVycG9sYXRpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnY29sb3ItaW50ZXJwb2xhdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvci1pbnRlcnBvbGF0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzX2V4cG9ydF9kZWZpbml0aW9uO1xuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjb2xvclByb2ZpbGVfZXhwb3J0X2RlZmluaXRpb247XG5jb2xvclByb2ZpbGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnY29sb3ItcHJvZmlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvci1wcm9maWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjb2xvclJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbjtcbmNvbG9yUmVuZGVyaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2NvbG9yLXJlbmRlcmluZycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvci1yZW5kZXJpbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGNvbnRlbnRfZXhwb3J0X2RlZmluaXRpb247XG5jb250ZW50X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2NvbnRlbnQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgY291bnRlckluY3JlbWVudF9leHBvcnRfZGVmaW5pdGlvbjtcbmNvdW50ZXJJbmNyZW1lbnRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnY291bnRlci1pbmNyZW1lbnQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY291bnRlci1pbmNyZW1lbnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGNvdW50ZXJSZXNldF9leHBvcnRfZGVmaW5pdGlvbjtcbmNvdW50ZXJSZXNldF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjb3VudGVyLXJlc2V0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2NvdW50ZXItcmVzZXQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGNzc0Zsb2F0X2V4cG9ydF9kZWZpbml0aW9uO1xuY3NzRmxvYXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZmxvYXQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZmxvYXQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGN1ZV9leHBvcnRfZGVmaW5pdGlvbjtcbmN1ZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjdWUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY3VlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBjdWVBZnRlcl9leHBvcnRfZGVmaW5pdGlvbjtcbmN1ZUFmdGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2N1ZS1hZnRlcicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdjdWUtYWZ0ZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGN1ZUJlZm9yZV9leHBvcnRfZGVmaW5pdGlvbjtcbmN1ZUJlZm9yZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjdWUtYmVmb3JlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2N1ZS1iZWZvcmUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGN1cnNvcl9leHBvcnRfZGVmaW5pdGlvbjtcbmN1cnNvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdjdXJzb3InLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnY3Vyc29yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBkaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb247XG5kaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZGlyZWN0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2RpcmVjdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZGlzcGxheV9leHBvcnRfZGVmaW5pdGlvbjtcbmRpc3BsYXlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZGlzcGxheScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdkaXNwbGF5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBkb21pbmFudEJhc2VsaW5lX2V4cG9ydF9kZWZpbml0aW9uO1xuZG9taW5hbnRCYXNlbGluZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdkb21pbmFudC1iYXNlbGluZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdkb21pbmFudC1iYXNlbGluZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZWxldmF0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xuZWxldmF0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2VsZXZhdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdlbGV2YXRpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGVtcHR5Q2VsbHNfZXhwb3J0X2RlZmluaXRpb247XG5lbXB0eUNlbGxzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2VtcHR5LWNlbGxzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2VtcHR5LWNlbGxzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBlbmFibGVCYWNrZ3JvdW5kX2V4cG9ydF9kZWZpbml0aW9uO1xuZW5hYmxlQmFja2dyb3VuZF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdlbmFibGUtYmFja2dyb3VuZCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdlbmFibGUtYmFja2dyb3VuZCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZmlsbF9leHBvcnRfZGVmaW5pdGlvbjtcbmZpbGxfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZmlsbCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdmaWxsJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBmaWxsT3BhY2l0eV9leHBvcnRfZGVmaW5pdGlvbjtcbmZpbGxPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2ZpbGwtb3BhY2l0eScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdmaWxsLW9wYWNpdHknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGZpbGxSdWxlX2V4cG9ydF9kZWZpbml0aW9uO1xuZmlsbFJ1bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZmlsbC1ydWxlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2ZpbGwtcnVsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZmlsdGVyX2V4cG9ydF9kZWZpbml0aW9uO1xuZmlsdGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2ZpbHRlcicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdmaWx0ZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGZsb29kQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG5mbG9vZENvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2Zsb29kLWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2Zsb29kLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBmbG9vZE9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb247XG5mbG9vZE9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZmxvb2Qtb3BhY2l0eScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdmbG9vZC1vcGFjaXR5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBmb250RmFtaWx5X2V4cG9ydF9pc1ZhbGlkLCBmb250RmFtaWx5X2V4cG9ydF9kZWZpbml0aW9uO1xudmFyIGZvbnRGYW1pbHlfbG9jYWxfdmFyX3BhcnRzUmVnRXggPSAvXFxzKixcXHMqLztcblxuZm9udEZhbWlseV9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQodikge1xuICBpZiAodiA9PT0gJycgfHwgdiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIHBhcnRzID0gdi5zcGxpdChmb250RmFtaWx5X2xvY2FsX3Zhcl9wYXJ0c1JlZ0V4KTtcbiAgdmFyIGxlbiA9IHBhcnRzLmxlbmd0aDtcbiAgdmFyIGk7XG4gIHZhciB0eXBlO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHR5cGUgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUocGFydHNbaV0pO1xuXG4gICAgaWYgKHR5cGUgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLlNUUklORyB8fCB0eXBlID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5LRVlXT1JEKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5mb250RmFtaWx5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2ZvbnQtZmFtaWx5Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtZmFtaWx5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBmb250U2l6ZV9leHBvcnRfaXNWYWxpZCwgZm9udFNpemVfZXhwb3J0X2RlZmluaXRpb247XG52YXIgZm9udFNpemVfbG9jYWxfdmFyX2Fic29sdXRlU2l6ZXMgPSBbJ3h4LXNtYWxsJywgJ3gtc21hbGwnLCAnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJywgJ3gtbGFyZ2UnLCAneHgtbGFyZ2UnXTtcbnZhciBmb250U2l6ZV9sb2NhbF92YXJfcmVsYXRpdmVTaXplcyA9IFsnbGFyZ2VyJywgJ3NtYWxsZXInXTtcblxuZm9udFNpemVfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiAodikge1xuICB2YXIgdHlwZSA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnZhbHVlVHlwZSh2LnRvTG93ZXJDYXNlKCkpO1xuICByZXR1cm4gdHlwZSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuTEVOR1RIIHx8IHR5cGUgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLlBFUkNFTlQgfHwgdHlwZSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCAmJiBmb250U2l6ZV9sb2NhbF92YXJfYWJzb2x1dGVTaXplcy5pbmRleE9mKHYudG9Mb3dlckNhc2UoKSkgIT09IC0xIHx8IHR5cGUgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLktFWVdPUkQgJiYgZm9udFNpemVfbG9jYWxfdmFyX3JlbGF0aXZlU2l6ZXMuaW5kZXhPZih2LnRvTG93ZXJDYXNlKCkpICE9PSAtMTtcbn07XG5cbmZvbnRTaXplX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdmb250LXNpemUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGZvbnRTdHlsZV9leHBvcnRfaXNWYWxpZCwgZm9udFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xudmFyIGZvbnRTdHlsZV9sb2NhbF92YXJfdmFsaWRfc3R5bGVzID0gWydub3JtYWwnLCAnaXRhbGljJywgJ29ibGlxdWUnLCAnaW5oZXJpdCddO1xuXG5mb250U3R5bGVfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiAodikge1xuICByZXR1cm4gZm9udFN0eWxlX2xvY2FsX3Zhcl92YWxpZF9zdHlsZXMuaW5kZXhPZih2LnRvTG93ZXJDYXNlKCkpICE9PSAtMTtcbn07XG5cbmZvbnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdmb250LXN0eWxlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGZvbnRWYXJpYW50X2V4cG9ydF9pc1ZhbGlkLCBmb250VmFyaWFudF9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBmb250VmFyaWFudF9sb2NhbF92YXJfdmFsaWRfdmFyaWFudHMgPSBbJ25vcm1hbCcsICdzbWFsbC1jYXBzJywgJ2luaGVyaXQnXTtcblxuZm9udFZhcmlhbnRfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGZvbnRWYXJpYW50X2xvY2FsX3Zhcl92YWxpZF92YXJpYW50cy5pbmRleE9mKHYudG9Mb3dlckNhc2UoKSkgIT09IC0xO1xufTtcblxuZm9udFZhcmlhbnRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZm9udC12YXJpYW50Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtdmFyaWFudCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZm9udFdlaWdodF9leHBvcnRfaXNWYWxpZCwgZm9udFdlaWdodF9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBmb250V2VpZ2h0X2xvY2FsX3Zhcl92YWxpZF93ZWlnaHRzID0gWydub3JtYWwnLCAnYm9sZCcsICdib2xkZXInLCAnbGlnaHRlcicsICcxMDAnLCAnMjAwJywgJzMwMCcsICc0MDAnLCAnNTAwJywgJzYwMCcsICc3MDAnLCAnODAwJywgJzkwMCcsICdpbmhlcml0J107XG5cbmZvbnRXZWlnaHRfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgcmV0dXJuIGZvbnRXZWlnaHRfbG9jYWxfdmFyX3ZhbGlkX3dlaWdodHMuaW5kZXhPZih2LnRvTG93ZXJDYXNlKCkpICE9PSAtMTtcbn07XG5cbmZvbnRXZWlnaHRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC13ZWlnaHQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGxpbmVIZWlnaHRfZXhwb3J0X2lzVmFsaWQsIGxpbmVIZWlnaHRfZXhwb3J0X2RlZmluaXRpb247XG5cbmxpbmVIZWlnaHRfZXhwb3J0X2lzVmFsaWQgPSBmdW5jdGlvbiBpc1ZhbGlkKHYpIHtcbiAgdmFyIHR5cGUgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUodik7XG4gIHJldHVybiB0eXBlID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5LRVlXT1JEICYmIHYudG9Mb3dlckNhc2UoKSA9PT0gJ25vcm1hbCcgfHwgdi50b0xvd2VyQ2FzZSgpID09PSAnaW5oZXJpdCcgfHwgdHlwZSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuTlVNQkVSIHx8IHR5cGUgPT09IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLlRZUEVTLkxFTkdUSCB8fCB0eXBlID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5QRVJDRU5UO1xufTtcblxubGluZUhlaWdodF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdsaW5lLWhlaWdodCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdsaW5lLWhlaWdodCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZm9udF9leHBvcnRfaXNWYWxpZCwgZm9udF9leHBvcnRfZGVmaW5pdGlvbjtcbnZhciBmb250X2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yID0ge1xuICAnZm9udC1mYW1pbHknOiB7XG4gICAgaXNWYWxpZDogZm9udEZhbWlseV9leHBvcnRfaXNWYWxpZCxcbiAgICBkZWZpbml0aW9uOiBmb250RmFtaWx5X2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdmb250LXNpemUnOiB7XG4gICAgaXNWYWxpZDogZm9udFNpemVfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogZm9udFNpemVfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2ZvbnQtc3R5bGUnOiB7XG4gICAgaXNWYWxpZDogZm9udFN0eWxlX2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGZvbnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvblxuICB9LFxuICAnZm9udC12YXJpYW50Jzoge1xuICAgIGlzVmFsaWQ6IGZvbnRWYXJpYW50X2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGZvbnRWYXJpYW50X2V4cG9ydF9kZWZpbml0aW9uXG4gIH0sXG4gICdmb250LXdlaWdodCc6IHtcbiAgICBpc1ZhbGlkOiBmb250V2VpZ2h0X2V4cG9ydF9pc1ZhbGlkLFxuICAgIGRlZmluaXRpb246IGZvbnRXZWlnaHRfZXhwb3J0X2RlZmluaXRpb25cbiAgfSxcbiAgJ2xpbmUtaGVpZ2h0Jzoge1xuICAgIGlzVmFsaWQ6IGxpbmVIZWlnaHRfZXhwb3J0X2lzVmFsaWQsXG4gICAgZGVmaW5pdGlvbjogbGluZUhlaWdodF9leHBvcnRfZGVmaW5pdGlvblxuICB9XG59O1xudmFyIGZvbnRfbG9jYWxfdmFyX3N0YXRpY19mb250cyA9IFsnY2FwdGlvbicsICdpY29uJywgJ21lbnUnLCAnbWVzc2FnZS1ib3gnLCAnc21hbGwtY2FwdGlvbicsICdzdGF0dXMtYmFyJywgJ2luaGVyaXQnXTtcblxuZm9udF9leHBvcnRfaXNWYWxpZCA9IGZ1bmN0aW9uIGlzVmFsaWQodikge1xuICByZXR1cm4gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc2hvcnRoYW5kUGFyc2VyKHYsIGZvbnRfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpICE9PSB1bmRlZmluZWQgfHwgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAudmFsdWVUeXBlKHYpID09PSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUy5LRVlXT1JEICYmIGZvbnRfbG9jYWxfdmFyX3N0YXRpY19mb250cy5pbmRleE9mKHYudG9Mb3dlckNhc2UoKSkgIT09IC0xO1xufTtcblxudmFyIGZvbnRfbG9jYWxfdmFyX3NldHRlciA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFNldHRlcignZm9udCcsIGZvbnRfbG9jYWxfdmFyX3Nob3J0aGFuZF9mb3IpO1xuZm9udF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHZhciBzaG9ydCA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnNob3J0aGFuZFBhcnNlcih2LCBmb250X2xvY2FsX3Zhcl9zaG9ydGhhbmRfZm9yKTtcblxuICAgIGlmIChzaG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZm9udF9sb2NhbF92YXJfc2V0dGVyLmNhbGwodGhpcywgdik7XG4gICAgfVxuXG4gICAgaWYgKGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnZhbHVlVHlwZSh2KSA9PT0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVMuS0VZV09SRCAmJiBmb250X2xvY2FsX3Zhcl9zdGF0aWNfZm9udHMuaW5kZXhPZih2LnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgdGhpcy5fc2V0UHJvcGVydHkoJ2ZvbnQnLCB2KTtcbiAgICB9XG4gIH0sXG4gIGdldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc2hvcnRoYW5kR2V0dGVyKCdmb250JywgZm9udF9sb2NhbF92YXJfc2hvcnRoYW5kX2ZvciksXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBmb250U2l6ZUFkanVzdF9leHBvcnRfZGVmaW5pdGlvbjtcbmZvbnRTaXplQWRqdXN0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZS1hZGp1c3QnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXplLWFkanVzdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZm9udFN0cmV0Y2hfZXhwb3J0X2RlZmluaXRpb247XG5mb250U3RyZXRjaF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdmb250LXN0cmV0Y2gnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zdHJldGNoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbF9leHBvcnRfZGVmaW5pdGlvbjtcbmdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsX2V4cG9ydF9kZWZpbml0aW9uO1xuZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBoZWlnaHRfZXhwb3J0X2RlZmluaXRpb247XG5cbmZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgaWYgKFN0cmluZyh2KS50b0xvd2VyQ2FzZSgpID09PSAnYXV0bycpIHtcbiAgICByZXR1cm4gJ2F1dG8nO1xuICB9XG5cbiAgaWYgKFN0cmluZyh2KS50b0xvd2VyQ2FzZSgpID09PSAnaW5oZXJpdCcpIHtcbiAgICByZXR1cm4gJ2luaGVyaXQnO1xuICB9XG5cbiAgcmV0dXJuIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlTWVhc3VyZW1lbnQodik7XG59XG5cbmhlaWdodF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdoZWlnaHQnLCBwYXJzZSh2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgaW1hZ2VSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb247XG5pbWFnZVJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdpbWFnZS1yZW5kZXJpbmcnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnaW1hZ2UtcmVuZGVyaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBrZXJuaW5nX2V4cG9ydF9kZWZpbml0aW9uO1xua2VybmluZ19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdrZXJuaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2tlcm5pbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGxlZnRfZXhwb3J0X2RlZmluaXRpb247XG5sZWZ0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2xlZnQnLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZU1lYXN1cmVtZW50KHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbGVmdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgbGV0dGVyU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbjtcbmxldHRlclNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbGV0dGVyLXNwYWNpbmcnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbGV0dGVyLXNwYWNpbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGxpZ2h0aW5nQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG5saWdodGluZ0NvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2xpZ2h0aW5nLWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2xpZ2h0aW5nLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBsaXN0U3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG5saXN0U3R5bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbGlzdC1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdsaXN0LXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBsaXN0U3R5bGVJbWFnZV9leHBvcnRfZGVmaW5pdGlvbjtcbmxpc3RTdHlsZUltYWdlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2xpc3Qtc3R5bGUtaW1hZ2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbGlzdC1zdHlsZS1pbWFnZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgbGlzdFN0eWxlUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb247XG5saXN0U3R5bGVQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdsaXN0LXN0eWxlLXBvc2l0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ2xpc3Qtc3R5bGUtcG9zaXRpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIGxpc3RTdHlsZVR5cGVfZXhwb3J0X2RlZmluaXRpb247XG5saXN0U3R5bGVUeXBlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ2xpc3Qtc3R5bGUtdHlwZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdsaXN0LXN0eWxlLXR5cGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1hcmdpbl9leHBvcnRfZGVmaW5pdGlvbiwgbWFyZ2luX2V4cG9ydF9pc1ZhbGlkLCBtYXJnaW5fZXhwb3J0X3BhcnNlcjtcbnZhciBtYXJnaW5fbG9jYWxfdmFyX1RZUEVTID0gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuVFlQRVM7XG5cbnZhciBtYXJnaW5fbG9jYWxfdmFyX2lzVmFsaWQgPSBmdW5jdGlvbiAodikge1xuICBpZiAodi50b0xvd2VyQ2FzZSgpID09PSBcImF1dG9cIikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC52YWx1ZVR5cGUodik7XG4gIHJldHVybiB0eXBlID09PSBtYXJnaW5fbG9jYWxfdmFyX1RZUEVTLkxFTkdUSCB8fCB0eXBlID09PSBtYXJnaW5fbG9jYWxfdmFyX1RZUEVTLlBFUkNFTlQgfHwgdHlwZSA9PT0gbWFyZ2luX2xvY2FsX3Zhcl9UWVBFUy5JTlRFR0VSICYmICh2ID09PSAnMCcgfHwgdiA9PT0gMCk7XG59O1xuXG52YXIgbWFyZ2luX2xvY2FsX3Zhcl9wYXJzZXIgPSBmdW5jdGlvbiAodikge1xuICB2YXIgViA9IHYudG9Mb3dlckNhc2UoKTtcblxuICBpZiAoViA9PT0gXCJhdXRvXCIpIHtcbiAgICByZXR1cm4gVjtcbiAgfVxuXG4gIHJldHVybiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZU1lYXN1cmVtZW50KHYpO1xufTtcblxudmFyIG1hcmdpbl9sb2NhbF92YXJfbXlTZXR0ZXIgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5pbXBsaWNpdFNldHRlcignbWFyZ2luJywgJycsIG1hcmdpbl9sb2NhbF92YXJfaXNWYWxpZCwgbWFyZ2luX2xvY2FsX3Zhcl9wYXJzZXIpO1xudmFyIG1hcmdpbl9sb2NhbF92YXJfbXlHbG9iYWwgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5pbXBsaWNpdFNldHRlcignbWFyZ2luJywgJycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59LCBmdW5jdGlvbiAodikge1xuICByZXR1cm4gdjtcbn0pO1xubWFyZ2luX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSB7XG4gICAgICB2ID0gU3RyaW5nKHYpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdiAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBWID0gdi50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChWKSB7XG4gICAgICBjYXNlICdpbmhlcml0JzpcbiAgICAgIGNhc2UgJ2luaXRpYWwnOlxuICAgICAgY2FzZSAndW5zZXQnOlxuICAgICAgY2FzZSAnJzpcbiAgICAgICAgbWFyZ2luX2xvY2FsX3Zhcl9teUdsb2JhbC5jYWxsKHRoaXMsIFYpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbWFyZ2luX2xvY2FsX3Zhcl9teVNldHRlci5jYWxsKHRoaXMsIHYpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG5tYXJnaW5fZXhwb3J0X2lzVmFsaWQgPSBtYXJnaW5fbG9jYWxfdmFyX2lzVmFsaWQ7XG5tYXJnaW5fZXhwb3J0X3BhcnNlciA9IG1hcmdpbl9sb2NhbF92YXJfcGFyc2VyO1xudmFyIG1hcmdpbkJvdHRvbV9leHBvcnRfZGVmaW5pdGlvbjtcbm1hcmdpbkJvdHRvbV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zdWJJbXBsaWNpdFNldHRlcignbWFyZ2luJywgJ2JvdHRvbScsIHtcbiAgICBkZWZpbml0aW9uOiBtYXJnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaXNWYWxpZDogbWFyZ2luX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogbWFyZ2luX2V4cG9ydF9wYXJzZXJcbiAgfS5pc1ZhbGlkLCB7XG4gICAgZGVmaW5pdGlvbjogbWFyZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGlzVmFsaWQ6IG1hcmdpbl9leHBvcnRfaXNWYWxpZCxcbiAgICBwYXJzZXI6IG1hcmdpbl9leHBvcnRfcGFyc2VyXG4gIH0ucGFyc2VyKSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWJvdHRvbScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgbWFyZ2luTGVmdF9leHBvcnRfZGVmaW5pdGlvbjtcbm1hcmdpbkxlZnRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc3ViSW1wbGljaXRTZXR0ZXIoJ21hcmdpbicsICdsZWZ0Jywge1xuICAgIGRlZmluaXRpb246IG1hcmdpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpc1ZhbGlkOiBtYXJnaW5fZXhwb3J0X2lzVmFsaWQsXG4gICAgcGFyc2VyOiBtYXJnaW5fZXhwb3J0X3BhcnNlclxuICB9LmlzVmFsaWQsIHtcbiAgICBkZWZpbml0aW9uOiBtYXJnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaXNWYWxpZDogbWFyZ2luX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogbWFyZ2luX2V4cG9ydF9wYXJzZXJcbiAgfS5wYXJzZXIpLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tbGVmdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgbWFyZ2luUmlnaHRfZXhwb3J0X2RlZmluaXRpb247XG5tYXJnaW5SaWdodF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zdWJJbXBsaWNpdFNldHRlcignbWFyZ2luJywgJ3JpZ2h0Jywge1xuICAgIGRlZmluaXRpb246IG1hcmdpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpc1ZhbGlkOiBtYXJnaW5fZXhwb3J0X2lzVmFsaWQsXG4gICAgcGFyc2VyOiBtYXJnaW5fZXhwb3J0X3BhcnNlclxuICB9LmlzVmFsaWQsIHtcbiAgICBkZWZpbml0aW9uOiBtYXJnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaXNWYWxpZDogbWFyZ2luX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogbWFyZ2luX2V4cG9ydF9wYXJzZXJcbiAgfS5wYXJzZXIpLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tcmlnaHQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1hcmdpblRvcF9leHBvcnRfZGVmaW5pdGlvbjtcbm1hcmdpblRvcF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5zdWJJbXBsaWNpdFNldHRlcignbWFyZ2luJywgJ3RvcCcsIHtcbiAgICBkZWZpbml0aW9uOiBtYXJnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaXNWYWxpZDogbWFyZ2luX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogbWFyZ2luX2V4cG9ydF9wYXJzZXJcbiAgfS5pc1ZhbGlkLCB7XG4gICAgZGVmaW5pdGlvbjogbWFyZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGlzVmFsaWQ6IG1hcmdpbl9leHBvcnRfaXNWYWxpZCxcbiAgICBwYXJzZXI6IG1hcmdpbl9leHBvcnRfcGFyc2VyXG4gIH0ucGFyc2VyKSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXRvcCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgbWFya2VyX2V4cG9ydF9kZWZpbml0aW9uO1xubWFya2VyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ21hcmtlcicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJrZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1hcmtlckVuZF9leHBvcnRfZGVmaW5pdGlvbjtcbm1hcmtlckVuZF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdtYXJrZXItZW5kJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ21hcmtlci1lbmQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1hcmtlck1pZF9leHBvcnRfZGVmaW5pdGlvbjtcbm1hcmtlck1pZF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdtYXJrZXItbWlkJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ21hcmtlci1taWQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1hcmtlck9mZnNldF9leHBvcnRfZGVmaW5pdGlvbjtcbm1hcmtlck9mZnNldF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdtYXJrZXItb2Zmc2V0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ21hcmtlci1vZmZzZXQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1hcmtlclN0YXJ0X2V4cG9ydF9kZWZpbml0aW9uO1xubWFya2VyU3RhcnRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbWFya2VyLXN0YXJ0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ21hcmtlci1zdGFydCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgbWFya3NfZXhwb3J0X2RlZmluaXRpb247XG5tYXJrc19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdtYXJrcycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJrcycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgbWFza19leHBvcnRfZGVmaW5pdGlvbjtcbm1hc2tfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbWFzaycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXNrJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBtYXhIZWlnaHRfZXhwb3J0X2RlZmluaXRpb247XG5tYXhIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbWF4LWhlaWdodCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtaGVpZ2h0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBtYXhXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbm1heFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ21heC13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1pbkhlaWdodF9leHBvcnRfZGVmaW5pdGlvbjtcbm1pbkhlaWdodF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdtaW4taGVpZ2h0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ21pbi1oZWlnaHQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG1pbldpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xubWluV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnbWluLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ21pbi13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgb3BhY2l0eV9leHBvcnRfZGVmaW5pdGlvbjtcbm9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnb3BhY2l0eScsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlTnVtYmVyKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnb3BhY2l0eScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgb3JwaGFuc19leHBvcnRfZGVmaW5pdGlvbjtcbm9ycGhhbnNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnb3JwaGFucycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdvcnBoYW5zJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBvdXRsaW5lX2V4cG9ydF9kZWZpbml0aW9uO1xub3V0bGluZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdvdXRsaW5lJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ291dGxpbmUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG91dGxpbmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbm91dGxpbmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdvdXRsaW5lLWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ291dGxpbmUtY29sb3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIG91dGxpbmVPZmZzZXRfZXhwb3J0X2RlZmluaXRpb247XG5vdXRsaW5lT2Zmc2V0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ291dGxpbmUtb2Zmc2V0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ291dGxpbmUtb2Zmc2V0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBvdXRsaW5lU3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG5vdXRsaW5lU3R5bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnb3V0bGluZS1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdvdXRsaW5lLXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBvdXRsaW5lV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG5vdXRsaW5lV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnb3V0bGluZS13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdvdXRsaW5lLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBvdmVyZmxvd19leHBvcnRfZGVmaW5pdGlvbjtcbm92ZXJmbG93X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ292ZXJmbG93Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ292ZXJmbG93Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBvdmVyZmxvd1hfZXhwb3J0X2RlZmluaXRpb247XG5vdmVyZmxvd1hfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdvdmVyZmxvdy14Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBvdmVyZmxvd1lfZXhwb3J0X2RlZmluaXRpb247XG5vdmVyZmxvd1lfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdvdmVyZmxvdy15Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwYWRkaW5nX2V4cG9ydF9kZWZpbml0aW9uLCBwYWRkaW5nX2V4cG9ydF9pc1ZhbGlkLCBwYWRkaW5nX2V4cG9ydF9wYXJzZXI7XG52YXIgcGFkZGluZ19sb2NhbF92YXJfVFlQRVMgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5UWVBFUztcblxudmFyIHBhZGRpbmdfbG9jYWxfdmFyX2lzVmFsaWQgPSBmdW5jdGlvbiAodikge1xuICB2YXIgdHlwZSA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnZhbHVlVHlwZSh2KTtcbiAgcmV0dXJuIHR5cGUgPT09IHBhZGRpbmdfbG9jYWxfdmFyX1RZUEVTLkxFTkdUSCB8fCB0eXBlID09PSBwYWRkaW5nX2xvY2FsX3Zhcl9UWVBFUy5QRVJDRU5UIHx8IHR5cGUgPT09IHBhZGRpbmdfbG9jYWxfdmFyX1RZUEVTLklOVEVHRVIgJiYgKHYgPT09ICcwJyB8fCB2ID09PSAwKTtcbn07XG5cbnZhciBwYWRkaW5nX2xvY2FsX3Zhcl9wYXJzZXIgPSBmdW5jdGlvbiAodikge1xuICByZXR1cm4gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VNZWFzdXJlbWVudCh2KTtcbn07XG5cbnZhciBwYWRkaW5nX2xvY2FsX3Zhcl9teVNldHRlciA9IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLmltcGxpY2l0U2V0dGVyKCdwYWRkaW5nJywgJycsIHBhZGRpbmdfbG9jYWxfdmFyX2lzVmFsaWQsIHBhZGRpbmdfbG9jYWxfdmFyX3BhcnNlcik7XG52YXIgcGFkZGluZ19sb2NhbF92YXJfbXlHbG9iYWwgPSBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5pbXBsaWNpdFNldHRlcigncGFkZGluZycsICcnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufSwgZnVuY3Rpb24gKHYpIHtcbiAgcmV0dXJuIHY7XG59KTtcbnBhZGRpbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICBpZiAodHlwZW9mIHYgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHYgPSBTdHJpbmcodik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIFYgPSB2LnRvTG93ZXJDYXNlKCk7XG5cbiAgICBzd2l0Y2ggKFYpIHtcbiAgICAgIGNhc2UgJ2luaGVyaXQnOlxuICAgICAgY2FzZSAnaW5pdGlhbCc6XG4gICAgICBjYXNlICd1bnNldCc6XG4gICAgICBjYXNlICcnOlxuICAgICAgICBwYWRkaW5nX2xvY2FsX3Zhcl9teUdsb2JhbC5jYWxsKHRoaXMsIFYpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFkZGluZ19sb2NhbF92YXJfbXlTZXR0ZXIuY2FsbCh0aGlzLCB2KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnBhZGRpbmdfZXhwb3J0X2lzVmFsaWQgPSBwYWRkaW5nX2xvY2FsX3Zhcl9pc1ZhbGlkO1xucGFkZGluZ19leHBvcnRfcGFyc2VyID0gcGFkZGluZ19sb2NhbF92YXJfcGFyc2VyO1xudmFyIHBhZGRpbmdCb3R0b21fZXhwb3J0X2RlZmluaXRpb247XG5wYWRkaW5nQm90dG9tX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnN1YkltcGxpY2l0U2V0dGVyKCdwYWRkaW5nJywgJ2JvdHRvbScsIHtcbiAgICBkZWZpbml0aW9uOiBwYWRkaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGlzVmFsaWQ6IHBhZGRpbmdfZXhwb3J0X2lzVmFsaWQsXG4gICAgcGFyc2VyOiBwYWRkaW5nX2V4cG9ydF9wYXJzZXJcbiAgfS5pc1ZhbGlkLCB7XG4gICAgZGVmaW5pdGlvbjogcGFkZGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpc1ZhbGlkOiBwYWRkaW5nX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogcGFkZGluZ19leHBvcnRfcGFyc2VyXG4gIH0ucGFyc2VyKSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHBhZGRpbmdMZWZ0X2V4cG9ydF9kZWZpbml0aW9uO1xucGFkZGluZ0xlZnRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc3ViSW1wbGljaXRTZXR0ZXIoJ3BhZGRpbmcnLCAnbGVmdCcsIHtcbiAgICBkZWZpbml0aW9uOiBwYWRkaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGlzVmFsaWQ6IHBhZGRpbmdfZXhwb3J0X2lzVmFsaWQsXG4gICAgcGFyc2VyOiBwYWRkaW5nX2V4cG9ydF9wYXJzZXJcbiAgfS5pc1ZhbGlkLCB7XG4gICAgZGVmaW5pdGlvbjogcGFkZGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpc1ZhbGlkOiBwYWRkaW5nX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogcGFkZGluZ19leHBvcnRfcGFyc2VyXG4gIH0ucGFyc2VyKSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1sZWZ0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwYWRkaW5nUmlnaHRfZXhwb3J0X2RlZmluaXRpb247XG5wYWRkaW5nUmlnaHRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAuc3ViSW1wbGljaXRTZXR0ZXIoJ3BhZGRpbmcnLCAncmlnaHQnLCB7XG4gICAgZGVmaW5pdGlvbjogcGFkZGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpc1ZhbGlkOiBwYWRkaW5nX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogcGFkZGluZ19leHBvcnRfcGFyc2VyXG4gIH0uaXNWYWxpZCwge1xuICAgIGRlZmluaXRpb246IHBhZGRpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgaXNWYWxpZDogcGFkZGluZ19leHBvcnRfaXNWYWxpZCxcbiAgICBwYXJzZXI6IHBhZGRpbmdfZXhwb3J0X3BhcnNlclxuICB9LnBhcnNlciksXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctcmlnaHQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHBhZGRpbmdUb3BfZXhwb3J0X2RlZmluaXRpb247XG5wYWRkaW5nVG9wX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnN1YkltcGxpY2l0U2V0dGVyKCdwYWRkaW5nJywgJ3RvcCcsIHtcbiAgICBkZWZpbml0aW9uOiBwYWRkaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGlzVmFsaWQ6IHBhZGRpbmdfZXhwb3J0X2lzVmFsaWQsXG4gICAgcGFyc2VyOiBwYWRkaW5nX2V4cG9ydF9wYXJzZXJcbiAgfS5pc1ZhbGlkLCB7XG4gICAgZGVmaW5pdGlvbjogcGFkZGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpc1ZhbGlkOiBwYWRkaW5nX2V4cG9ydF9pc1ZhbGlkLFxuICAgIHBhcnNlcjogcGFkZGluZ19leHBvcnRfcGFyc2VyXG4gIH0ucGFyc2VyKSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHBhZ2VfZXhwb3J0X2RlZmluaXRpb247XG5wYWdlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3BhZ2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFnZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcGFnZUJyZWFrQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb247XG5wYWdlQnJlYWtBZnRlcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdwYWdlLWJyZWFrLWFmdGVyJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BhZ2UtYnJlYWstYWZ0ZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHBhZ2VCcmVha0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbjtcbnBhZ2VCcmVha0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdwYWdlLWJyZWFrLWJlZm9yZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdwYWdlLWJyZWFrLWJlZm9yZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcGFnZUJyZWFrSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uO1xucGFnZUJyZWFrSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3BhZ2UtYnJlYWstaW5zaWRlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BhZ2UtYnJlYWstaW5zaWRlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwYXVzZV9leHBvcnRfZGVmaW5pdGlvbjtcbnBhdXNlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3BhdXNlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BhdXNlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwYXVzZUFmdGVyX2V4cG9ydF9kZWZpbml0aW9uO1xucGF1c2VBZnRlcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdwYXVzZS1hZnRlcicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdwYXVzZS1hZnRlcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcGF1c2VCZWZvcmVfZXhwb3J0X2RlZmluaXRpb247XG5wYXVzZUJlZm9yZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdwYXVzZS1iZWZvcmUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncGF1c2UtYmVmb3JlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwaXRjaF9leHBvcnRfZGVmaW5pdGlvbjtcbnBpdGNoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3BpdGNoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BpdGNoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwaXRjaFJhbmdlX2V4cG9ydF9kZWZpbml0aW9uO1xucGl0Y2hSYW5nZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdwaXRjaC1yYW5nZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdwaXRjaC1yYW5nZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcGxheUR1cmluZ19leHBvcnRfZGVmaW5pdGlvbjtcbnBsYXlEdXJpbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgncGxheS1kdXJpbmcnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncGxheS1kdXJpbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHBvaW50ZXJFdmVudHNfZXhwb3J0X2RlZmluaXRpb247XG5wb2ludGVyRXZlbnRzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3BvaW50ZXItZXZlbnRzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3BvaW50ZXItZXZlbnRzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBwb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbnBvc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3Bvc2l0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBxdW90ZXNfZXhwb3J0X2RlZmluaXRpb247XG5xdW90ZXNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgncXVvdGVzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3F1b3RlcycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgcmVzaXplX2V4cG9ydF9kZWZpbml0aW9uO1xucmVzaXplX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3Jlc2l6ZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdyZXNpemUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHJpY2huZXNzX2V4cG9ydF9kZWZpbml0aW9uO1xucmljaG5lc3NfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgncmljaG5lc3MnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncmljaG5lc3MnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHJpZ2h0X2V4cG9ydF9kZWZpbml0aW9uO1xucmlnaHRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgncmlnaHQnLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZU1lYXN1cmVtZW50KHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgncmlnaHQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHNoYXBlUmVuZGVyaW5nX2V4cG9ydF9kZWZpbml0aW9uO1xuc2hhcGVSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc2hhcGUtcmVuZGVyaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3NoYXBlLXJlbmRlcmluZycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgc2l6ZV9leHBvcnRfZGVmaW5pdGlvbjtcbnNpemVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc2l6ZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzaXplJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzcGVha19leHBvcnRfZGVmaW5pdGlvbjtcbnNwZWFrX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3NwZWFrJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3NwZWFrJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzcGVha0hlYWRlcl9leHBvcnRfZGVmaW5pdGlvbjtcbnNwZWFrSGVhZGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3NwZWFrLWhlYWRlcicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzcGVhay1oZWFkZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHNwZWFrTnVtZXJhbF9leHBvcnRfZGVmaW5pdGlvbjtcbnNwZWFrTnVtZXJhbF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzcGVhay1udW1lcmFsJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3NwZWFrLW51bWVyYWwnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHNwZWFrUHVuY3R1YXRpb25fZXhwb3J0X2RlZmluaXRpb247XG5zcGVha1B1bmN0dWF0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3NwZWFrLXB1bmN0dWF0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3NwZWFrLXB1bmN0dWF0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzcGVlY2hSYXRlX2V4cG9ydF9kZWZpbml0aW9uO1xuc3BlZWNoUmF0ZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzcGVlY2gtcmF0ZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzcGVlY2gtcmF0ZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgc3JjX2V4cG9ydF9kZWZpbml0aW9uO1xuc3JjX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3NyYycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzcmMnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHN0b3BDb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbnN0b3BDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzdG9wLWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3N0b3AtY29sb3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHN0b3BPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uO1xuc3RvcE9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc3RvcC1vcGFjaXR5Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3N0b3Atb3BhY2l0eScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgc3RyZXNzX2V4cG9ydF9kZWZpbml0aW9uO1xuc3RyZXNzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3N0cmVzcycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzdHJlc3MnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHN0cm9rZV9leHBvcnRfZGVmaW5pdGlvbjtcbnN0cm9rZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzdHJva2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnc3Ryb2tlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzdHJva2VEYXNoYXJyYXlfZXhwb3J0X2RlZmluaXRpb247XG5zdHJva2VEYXNoYXJyYXlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc3Ryb2tlLWRhc2hhcnJheScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzdHJva2UtZGFzaGFycmF5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzdHJva2VEYXNob2Zmc2V0X2V4cG9ydF9kZWZpbml0aW9uO1xuc3Ryb2tlRGFzaG9mZnNldF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCdzdHJva2UtZGFzaG9mZnNldCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzdHJva2UtZGFzaG9mZnNldCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgc3Ryb2tlTGluZWNhcF9leHBvcnRfZGVmaW5pdGlvbjtcbnN0cm9rZUxpbmVjYXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc3Ryb2tlLWxpbmVjYXAnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnc3Ryb2tlLWxpbmVjYXAnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHN0cm9rZUxpbmVqb2luX2V4cG9ydF9kZWZpbml0aW9uO1xuc3Ryb2tlTGluZWpvaW5fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc3Ryb2tlLWxpbmVqb2luJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3N0cm9rZS1saW5lam9pbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgc3Ryb2tlTWl0ZXJsaW1pdF9leHBvcnRfZGVmaW5pdGlvbjtcbnN0cm9rZU1pdGVybGltaXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnc3Ryb2tlLW1pdGVybGltaXQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnc3Ryb2tlLW1pdGVybGltaXQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHN0cm9rZU9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb247XG5zdHJva2VPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3N0cm9rZS1vcGFjaXR5Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3N0cm9rZS1vcGFjaXR5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciBzdHJva2VXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbnN0cm9rZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3N0cm9rZS13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCdzdHJva2Utd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRhYmxlTGF5b3V0X2V4cG9ydF9kZWZpbml0aW9uO1xudGFibGVMYXlvdXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGFibGUtbGF5b3V0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RhYmxlLWxheW91dCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dEFsaWduX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dEFsaWduX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtYWxpZ24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1hbGlnbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dEFuY2hvcl9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRBbmNob3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1hbmNob3InLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1hbmNob3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHREZWNvcmF0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dERlY29yYXRpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1kZWNvcmF0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtZGVjb3JhdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dEluZGVudF9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRJbmRlbnRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1pbmRlbnQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1pbmRlbnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRMaW5lVGhyb3VnaF9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRMaW5lVGhyb3VnaF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LWxpbmUtdGhyb3VnaCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LWxpbmUtdGhyb3VnaCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dExpbmVUaHJvdWdoQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0TGluZVRocm91Z2hDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LWxpbmUtdGhyb3VnaC1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LWxpbmUtdGhyb3VnaC1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dExpbmVUaHJvdWdoTW9kZV9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRMaW5lVGhyb3VnaE1vZGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1saW5lLXRocm91Z2gtbW9kZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LWxpbmUtdGhyb3VnaC1tb2RlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0TGluZVRocm91Z2hTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRMaW5lVGhyb3VnaFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtbGluZS10aHJvdWdoLXN0eWxlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtbGluZS10aHJvdWdoLXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0TGluZVRocm91Z2hXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRMaW5lVGhyb3VnaFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtbGluZS10aHJvdWdoLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtbGluZS10aHJvdWdoLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0T3ZlcmZsb3dfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0T3ZlcmZsb3dfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1vdmVyZmxvdycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LW92ZXJmbG93Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0T3ZlcmxpbmVfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0T3ZlcmxpbmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1vdmVybGluZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LW92ZXJsaW5lJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0T3ZlcmxpbmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRPdmVybGluZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtb3ZlcmxpbmUtY29sb3InLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZUNvbG9yKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1vdmVybGluZS1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dE92ZXJsaW5lTW9kZV9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRPdmVybGluZU1vZGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1vdmVybGluZS1tb2RlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtb3ZlcmxpbmUtbW9kZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dE92ZXJsaW5lU3R5bGVfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0T3ZlcmxpbmVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LW92ZXJsaW5lLXN0eWxlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtb3ZlcmxpbmUtc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRPdmVybGluZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dE92ZXJsaW5lV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1vdmVybGluZS13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LW92ZXJsaW5lLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0UmVuZGVyaW5nX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dFJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LXJlbmRlcmluZycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LXJlbmRlcmluZycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dFNoYWRvd19leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRTaGFkb3dfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC1zaGFkb3cnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC1zaGFkb3cnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRleHRUcmFuc2Zvcm1fZXhwb3J0X2RlZmluaXRpb247XG50ZXh0VHJhbnNmb3JtX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtdHJhbnNmb3JtJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtdHJhbnNmb3JtJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0VW5kZXJsaW5lX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dFVuZGVybGluZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0ZXh0LXVuZGVybGluZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd0ZXh0LXVuZGVybGluZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dFVuZGVybGluZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dFVuZGVybGluZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtdW5kZXJsaW5lLWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtdW5kZXJsaW5lLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0VW5kZXJsaW5lTW9kZV9leHBvcnRfZGVmaW5pdGlvbjtcbnRleHRVbmRlcmxpbmVNb2RlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtdW5kZXJsaW5lLW1vZGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC11bmRlcmxpbmUtbW9kZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgdGV4dFVuZGVybGluZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xudGV4dFVuZGVybGluZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3RleHQtdW5kZXJsaW5lLXN0eWxlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3RleHQtdW5kZXJsaW5lLXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB0ZXh0VW5kZXJsaW5lV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG50ZXh0VW5kZXJsaW5lV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndGV4dC11bmRlcmxpbmUtd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndGV4dC11bmRlcmxpbmUtd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHRvcF9leHBvcnRfZGVmaW5pdGlvbjtcbnRvcF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd0b3AnLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZU1lYXN1cmVtZW50KHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndG9wJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB1bmljb2RlQmlkaV9leHBvcnRfZGVmaW5pdGlvbjtcbnVuaWNvZGVCaWRpX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3VuaWNvZGUtYmlkaScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd1bmljb2RlLWJpZGknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHVuaWNvZGVSYW5nZV9leHBvcnRfZGVmaW5pdGlvbjtcbnVuaWNvZGVSYW5nZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd1bmljb2RlLXJhbmdlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3VuaWNvZGUtcmFuZ2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHZlY3RvckVmZmVjdF9leHBvcnRfZGVmaW5pdGlvbjtcbnZlY3RvckVmZmVjdF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd2ZWN0b3ItZWZmZWN0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3ZlY3Rvci1lZmZlY3QnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHZlcnRpY2FsQWxpZ25fZXhwb3J0X2RlZmluaXRpb247XG52ZXJ0aWNhbEFsaWduX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3ZlcnRpY2FsLWFsaWduJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3ZlcnRpY2FsLWFsaWduJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB2aXNpYmlsaXR5X2V4cG9ydF9kZWZpbml0aW9uO1xudmlzaWJpbGl0eV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd2aXNpYmlsaXR5Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3Zpc2liaWxpdHknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHZvaWNlRmFtaWx5X2V4cG9ydF9kZWZpbml0aW9uO1xudm9pY2VGYW1pbHlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndm9pYy1mYW1pbHknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgndm9pY2UtZmFtaWx5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB2b2x1bWVfZXhwb3J0X2RlZmluaXRpb247XG52b2x1bWVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgndm9sdW1lJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3ZvbHVtZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QW5pbWF0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QW5pbWF0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYW5pbWF0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYW5pbWF0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRBbmltYXRpb25EZWxheV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEFuaW1hdGlvbkRlbGF5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYW5pbWF0aW9uLWRlbGF5Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYW5pbWF0aW9uLWRlbGF5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRBbmltYXRpb25EaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRBbmltYXRpb25EaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QW5pbWF0aW9uRHVyYXRpb25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRBbmltYXRpb25EdXJhdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QW5pbWF0aW9uRmlsbE1vZGVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRBbmltYXRpb25GaWxsTW9kZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEFuaW1hdGlvbk5hbWVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRBbmltYXRpb25OYW1lX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYW5pbWF0aW9uLW5hbWUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1hbmltYXRpb24tbmFtZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QW5pbWF0aW9uUGxheVN0YXRlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QW5pbWF0aW9uUGxheVN0YXRlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYW5pbWF0aW9uLXBsYXktc3RhdGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1hbmltYXRpb24tcGxheS1zdGF0ZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRBcHBlYXJhbmNlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QXBwZWFyYW5jZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWFwcGVhcmFuY2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1hcHBlYXJhbmNlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRBc3BlY3RSYXRpb19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEFzcGVjdFJhdGlvX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYXNwZWN0LXJhdGlvJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYXNwZWN0LXJhdGlvJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCYWNrZmFjZVZpc2liaWxpdHlfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCYWNrZmFjZVZpc2liaWxpdHlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QmFja2dyb3VuZENsaXBfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCYWNrZ3JvdW5kQ2xpcF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJhY2tncm91bmQtY2xpcCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJhY2tncm91bmQtY2xpcCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJhY2tncm91bmRDb21wb3NpdGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1iYWNrZ3JvdW5kLWNvbXBvc2l0ZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJhY2tncm91bmQtY29tcG9zaXRlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCYWNrZ3JvdW5kT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QmFja2dyb3VuZE9yaWdpbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJhY2tncm91bmQtb3JpZ2luJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYmFja2dyb3VuZC1vcmlnaW4nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJhY2tncm91bmRTaXplX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0QmFja2dyb3VuZFNpemVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlckFmdGVyX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItYWZ0ZXInLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItYWZ0ZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlckFmdGVyQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJBZnRlckNvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLWFmdGVyLWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLWFmdGVyLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJBZnRlclN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyQWZ0ZXJTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1hZnRlci1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1hZnRlci1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVyQWZ0ZXJXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlckFmdGVyV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItYWZ0ZXItd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItYWZ0ZXItd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlckJlZm9yZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlckJlZm9yZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1iZWZvcmUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItYmVmb3JlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJCZWZvcmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlckJlZm9yZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLWJlZm9yZS1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1iZWZvcmUtY29sb3InKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlckJlZm9yZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyQmVmb3JlU3R5bGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItYmVmb3JlLXN0eWxlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLWJlZm9yZS1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVyQmVmb3JlV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJCZWZvcmVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1iZWZvcmUtd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItYmVmb3JlLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJFbmRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJFbmRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItZW5kJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLWVuZCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVyRW5kQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJFbmRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1lbmQtY29sb3InLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZUNvbG9yKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItZW5kLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJFbmRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlckVuZFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLWVuZC1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1lbmQtc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlckVuZFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyRW5kV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItZW5kLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLWVuZC13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVyRml0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyRml0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLWZpdCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1maXQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItaG9yaXpvbnRhbC1zcGFjaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLWhvcml6b250YWwtc3BhY2luZycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVySW1hZ2VfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJJbWFnZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1pbWFnZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1pbWFnZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVyUmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyUmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLXJhZGl1cycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1yYWRpdXMnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlclN0YXJ0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyU3RhcnRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItc3RhcnQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItc3RhcnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlclN0YXJ0Q29sb3JfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3JkZXJTdGFydENvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm9yZGVyLXN0YXJ0LWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLXN0YXJ0LWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3JkZXJTdGFydFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm9yZGVyU3RhcnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci1zdGFydC1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJvcmRlci1zdGFydC1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm9yZGVyU3RhcnRXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlclN0YXJ0V2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3JkZXItc3RhcnQtd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3JkZXItc3RhcnQtd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJvcmRlci12ZXJ0aWNhbC1zcGFjaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm9yZGVyLXZlcnRpY2FsLXNwYWNpbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJveEFsaWduX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm94QWxpZ25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3gtYWxpZ24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3gtYWxpZ24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJveERpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJveERpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJveC1kaXJlY3Rpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3gtZGlyZWN0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3hGbGV4X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm94RmxleF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJveC1mbGV4Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm94LWZsZXgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJveEZsZXhHcm91cF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJveEZsZXhHcm91cF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJveC1mbGV4LWdyb3VwJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm94LWZsZXgtZ3JvdXAnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJveExpbmVzX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm94TGluZXNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1ib3gtbGluZXMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3gtbGluZXMnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJveE9yZGluYWxHcm91cF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJveE9yZGluYWxHcm91cF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXAnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJveE9yaWVudF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEJveE9yaWVudF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJveC1vcmllbnQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3gtb3JpZW50Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRCb3hQYWNrX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm94UGFja19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWJveC1wYWNrJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtYm94LXBhY2snKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEJveFJlZmxlY3RfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRCb3hSZWZsZWN0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm94LXJlZmxlY3QnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1ib3gtcmVmbGVjdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Qm94U2hhZG93X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Qm94U2hhZG93X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtYm94LXNoYWRvdycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWJveC1zaGFkb3cnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdENvbG9yQ29ycmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdENvbG9yQ29ycmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1jb2xvci1jb3JyZWN0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRDb2x1bW5BeGlzX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Q29sdW1uQXhpc19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbHVtbi1heGlzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtY29sdW1uLWF4aXMnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdENvbHVtbkJyZWFrQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRDb2x1bW5CcmVha0FmdGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtY29sdW1uLWJyZWFrLWFmdGVyJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtY29sdW1uLWJyZWFrLWFmdGVyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRDb2x1bW5CcmVha0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdENvbHVtbkJyZWFrQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtY29sdW1uLWJyZWFrLWJlZm9yZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWNvbHVtbi1icmVhay1iZWZvcmUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdENvbHVtbkJyZWFrSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Q29sdW1uQnJlYWtJbnNpZGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1jb2x1bW4tYnJlYWstaW5zaWRlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtY29sdW1uLWJyZWFrLWluc2lkZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Q29sdW1uQ291bnRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRDb2x1bW5Db3VudF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbHVtbi1jb3VudCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWNvbHVtbi1jb3VudCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Q29sdW1uR2FwX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Q29sdW1uR2FwX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtY29sdW1uLWdhcCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWNvbHVtbi1nYXAnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdENvbHVtblJ1bGVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRDb2x1bW5SdWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtY29sdW1uLXJ1bGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1jb2x1bW4tcnVsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Q29sdW1uUnVsZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Q29sdW1uUnVsZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtY29sdW1uLXJ1bGUtY29sb3InLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZUNvbG9yKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1jb2x1bW4tcnVsZS1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Q29sdW1uUnVsZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Q29sdW1uUnVsZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtY29sdW1uLXJ1bGUtc3R5bGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1jb2x1bW4tcnVsZS1zdHlsZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Q29sdW1uUnVsZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Q29sdW1uUnVsZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtY29sdW1uLXJ1bGUtd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1jb2x1bW4tcnVsZS13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Q29sdW1uU3Bhbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdENvbHVtblNwYW5fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1jb2x1bW4tc3BhbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWNvbHVtbi1zcGFuJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRDb2x1bW5XaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdENvbHVtbldpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtY29sdW1uLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtY29sdW1uLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRDb2x1bW5zX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Q29sdW1uc19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWNvbHVtbnMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1jb2x1bW5zJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRGaWx0ZXJfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRGaWx0ZXJfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1maWx0ZXInLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1maWx0ZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEZsZXhBbGlnbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEZsZXhBbGlnbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWZsZXgtYWxpZ24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1mbGV4LWFsaWduJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRGbGV4RGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0RmxleERpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWZsZXgtZGlyZWN0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZmxleC1kaXJlY3Rpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEZsZXhGbG93X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0RmxleEZsb3dfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mbGV4LWZsb3cnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1mbGV4LWZsb3cnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEZsZXhJdGVtQWxpZ25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRGbGV4SXRlbUFsaWduX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtZmxleC1pdGVtLWFsaWduJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZmxleC1pdGVtLWFsaWduJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRGbGV4TGluZVBhY2tfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRGbGV4TGluZVBhY2tfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mbGV4LWxpbmUtcGFjaycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWZsZXgtbGluZS1wYWNrJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRGbGV4T3JkZXJfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRGbGV4T3JkZXJfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mbGV4LW9yZGVyJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZmxleC1vcmRlcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0RmxleFBhY2tfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRGbGV4UGFja19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWZsZXgtcGFjaycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWZsZXgtcGFjaycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0RmxleFdyYXBfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRGbGV4V3JhcF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWZsZXgtd3JhcCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWZsZXgtd3JhcCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Rmxvd0Zyb21fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRGbG93RnJvbV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWZsb3ctZnJvbScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWZsb3ctZnJvbScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Rmxvd0ludG9fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRGbG93SW50b19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWZsb3ctaW50bycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWZsb3ctaW50bycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0Rm9udEZlYXR1cmVTZXR0aW5nc19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3NfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3MnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3MnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEZvbnRLZXJuaW5nX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Rm9udEtlcm5pbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mb250LWtlcm5pbmcnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1mb250LWtlcm5pbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEZvbnRTaXplRGVsdGFfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRGb250U2l6ZURlbHRhX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtZm9udC1zaXplLWRlbHRhJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZm9udC1zaXplLWRlbHRhJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRGb250U21vb3RoaW5nX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Rm9udFNtb290aGluZ19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWZvbnQtc21vb3RoaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZm9udC1zbW9vdGhpbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0Rm9udFZhcmlhbnRMaWdhdHVyZXNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1mb250LXZhcmlhbnQtbGlnYXR1cmVzJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtZm9udC12YXJpYW50LWxpZ2F0dXJlcycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0SGlnaGxpZ2h0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0SGlnaGxpZ2h0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtaGlnaGxpZ2h0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtaGlnaGxpZ2h0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRIeXBoZW5hdGVDaGFyYWN0ZXJfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRIeXBoZW5hdGVDaGFyYWN0ZXJfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1oeXBoZW5hdGUtY2hhcmFjdGVyJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtaHlwaGVuYXRlLWNoYXJhY3RlcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0SHlwaGVuYXRlTGltaXRBZnRlcl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEh5cGhlbmF0ZUxpbWl0QWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1oeXBoZW5hdGUtbGltaXQtYWZ0ZXInLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1oeXBoZW5hdGUtbGltaXQtYWZ0ZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEh5cGhlbmF0ZUxpbWl0QmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0SHlwaGVuYXRlTGltaXRCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1oeXBoZW5hdGUtbGltaXQtYmVmb3JlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtaHlwaGVuYXRlLWxpbWl0LWJlZm9yZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0SHlwaGVuYXRlTGltaXRMaW5lc19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXNfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1oeXBoZW5hdGUtbGltaXQtbGluZXMnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1oeXBoZW5hdGUtbGltaXQtbGluZXMnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdEh5cGhlbnNfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRIeXBoZW5zX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtaHlwaGVucycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWh5cGhlbnMnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdExpbmVBbGlnbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdExpbmVBbGlnbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWxpbmUtYWxpZ24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1saW5lLWFsaWduJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRMaW5lQm94Q29udGFpbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdExpbmVCb3hDb250YWluX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbGluZS1ib3gtY29udGFpbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWxpbmUtYm94LWNvbnRhaW4nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdExpbmVCcmVha19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdExpbmVCcmVha19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWxpbmUtYnJlYWsnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1saW5lLWJyZWFrJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRMaW5lQ2xhbXBfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRMaW5lQ2xhbXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1saW5lLWNsYW1wJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbGluZS1jbGFtcCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TGluZUdyaWRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRMaW5lR3JpZF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWxpbmUtZ3JpZCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWxpbmUtZ3JpZCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TGluZVNuYXBfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRMaW5lU25hcF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWxpbmUtc25hcCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LWxpbmUtc25hcCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TG9jYWxlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TG9jYWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbG9jYWxlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbG9jYWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRMb2dpY2FsSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TG9naWNhbEhlaWdodF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWxvZ2ljYWwtaGVpZ2h0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbG9naWNhbC1oZWlnaHQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdExvZ2ljYWxXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdExvZ2ljYWxXaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LWxvZ2ljYWwtd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1sb2dpY2FsLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXJnaW5BZnRlcl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hcmdpbkFmdGVyX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFyZ2luLWFmdGVyJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFyZ2luLWFmdGVyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFyZ2luQWZ0ZXJDb2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcmdpbi1hZnRlci1jb2xsYXBzZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hcmdpbi1hZnRlci1jb2xsYXBzZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFyZ2luQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFyZ2luQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFyZ2luLWJlZm9yZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hcmdpbi1iZWZvcmUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFyZ2luQmVmb3JlQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXJnaW4tYmVmb3JlLWNvbGxhcHNlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFyZ2luLWJlZm9yZS1jb2xsYXBzZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcmdpbi1ib3R0b20tY29sbGFwc2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXJnaW4tYm90dG9tLWNvbGxhcHNlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXJnaW5Db2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hcmdpbkNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFyZ2luLWNvbGxhcHNlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFyZ2luLWNvbGxhcHNlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXJnaW5FbmRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXJnaW5FbmRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXJnaW4tZW5kJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFyZ2luLWVuZCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFyZ2luU3RhcnRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXJnaW5TdGFydF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcmdpbi1zdGFydCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hcmdpbi1zdGFydCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFyZ2luVG9wQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXJnaW5Ub3BDb2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcmdpbi10b3AtY29sbGFwc2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXJnaW4tdG9wLWNvbGxhcHNlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXJxdWVlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFycXVlZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcnF1ZWUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXJxdWVlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXJxdWVlRGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFycXVlZURpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcnF1ZWUtZGlyZWN0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFycXVlZS1kaXJlY3Rpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hcnF1ZWVJbmNyZW1lbnRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXJxdWVlSW5jcmVtZW50X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFycXVlZS1pbmNyZW1lbnQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXJxdWVlLWluY3JlbWVudCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFycXVlZVJlcGV0aXRpb25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXJxdWVlUmVwZXRpdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcnF1ZWUtcmVwZXRpdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hcnF1ZWUtcmVwZXRpdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFycXVlZVNwZWVkX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFycXVlZVNwZWVkX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFycXVlZS1zcGVlZCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hcnF1ZWUtc3BlZWQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hcnF1ZWVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hcnF1ZWVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hcnF1ZWUtc3R5bGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXJxdWVlLXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2snLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrQXR0YWNobWVudF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hc2tBdHRhY2htZW50X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1hdHRhY2htZW50Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFzay1hdHRhY2htZW50Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrQm94SW1hZ2VfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrQm94SW1hZ2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrLWJveC1pbWFnZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stYm94LWltYWdlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrQm94SW1hZ2VPdXRzZXRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrQm94SW1hZ2VPdXRzZXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrLWJveC1pbWFnZS1vdXRzZXQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLWJveC1pbWFnZS1vdXRzZXQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tCb3hJbWFnZVJlcGVhdF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hc2tCb3hJbWFnZVJlcGVhdF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stYm94LWltYWdlLXJlcGVhdCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stYm94LWltYWdlLXJlcGVhdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza0JveEltYWdlU2xpY2VfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrQm94SW1hZ2VTbGljZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stYm94LWltYWdlLXNsaWNlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFzay1ib3gtaW1hZ2Utc2xpY2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stYm94LWltYWdlLXNvdXJjZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stYm94LWltYWdlLXNvdXJjZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza0JveEltYWdlV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrQm94SW1hZ2VXaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stYm94LWltYWdlLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFzay1ib3gtaW1hZ2Utd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tDbGlwX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza0NsaXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrLWNsaXAnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLWNsaXAnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tDb21wb3NpdGVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrQ29tcG9zaXRlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1jb21wb3NpdGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLWNvbXBvc2l0ZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza0ltYWdlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza0ltYWdlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1pbWFnZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2staW1hZ2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tPcmlnaW5fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1vcmlnaW4nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXNrLW9yaWdpbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza1Bvc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza1Bvc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1wb3NpdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stcG9zaXRpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tQb3NpdGlvblhfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrUG9zaXRpb25YX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1wb3NpdGlvbi14Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFzay1wb3NpdGlvbi14Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrUG9zaXRpb25ZX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza1Bvc2l0aW9uWV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stcG9zaXRpb24teScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stcG9zaXRpb24teScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza1JlcGVhdF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hc2tSZXBlYXRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrLXJlcGVhdCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stcmVwZWF0Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXNrUmVwZWF0WF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hc2tSZXBlYXRYX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWFzay1yZXBlYXQteCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stcmVwZWF0LXgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1hc2tSZXBlYXRZX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWFza1JlcGVhdFlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXNrLXJlcGVhdC15Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWFzay1yZXBlYXQteScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWFza1NpemVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRNYXNrU2l6ZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1hc2stc2l6ZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hc2stc2l6ZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1hdGNoTmVhcmVzdE1haWxCbG9ja3F1b3RlQ29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1tYXRjaC1uZWFyZXN0LW1haWwtYmxvY2txdW90ZS1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1hdGNoLW5lYXJlc3QtbWFpbC1ibG9ja3F1b3RlLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRNYXhMb2dpY2FsSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWF4TG9naWNhbEhlaWdodF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1heC1sb2dpY2FsLWhlaWdodCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LW1heC1sb2dpY2FsLWhlaWdodCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWF4TG9naWNhbFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TWF4TG9naWNhbFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtbWF4LWxvZ2ljYWwtd2lkdGgnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1tYXgtbG9naWNhbC13aWR0aCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0TWluTG9naWNhbEhlaWdodF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1pbkxvZ2ljYWxIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1taW4tbG9naWNhbC1oZWlnaHQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1taW4tbG9naWNhbC1oZWlnaHQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE1pbkxvZ2ljYWxXaWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdE1pbkxvZ2ljYWxXaWR0aF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LW1pbi1sb2dpY2FsLXdpZHRoJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtbWluLWxvZ2ljYWwtd2lkdGgnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE5ic3BNb2RlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0TmJzcE1vZGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1uYnNwLW1vZGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1uYnNwLW1vZGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0T3ZlcmZsb3dTY3JvbGxpbmdfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmcnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFBhZGRpbmdBZnRlcl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFBhZGRpbmdBZnRlcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXBhZGRpbmctYWZ0ZXInLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1wYWRkaW5nLWFmdGVyJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRQYWRkaW5nQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0UGFkZGluZ0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXBhZGRpbmctYmVmb3JlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtcGFkZGluZy1iZWZvcmUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFBhZGRpbmdFbmRfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRQYWRkaW5nRW5kX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtcGFkZGluZy1lbmQnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1wYWRkaW5nLWVuZCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0UGFkZGluZ1N0YXJ0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0UGFkZGluZ1N0YXJ0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtcGFkZGluZy1zdGFydCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXBhZGRpbmctc3RhcnQnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFBlcnNwZWN0aXZlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0UGVyc3BlY3RpdmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1wZXJzcGVjdGl2ZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXBlcnNwZWN0aXZlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpblhfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRQZXJzcGVjdGl2ZU9yaWdpblhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1wZXJzcGVjdGl2ZS1vcmlnaW4teCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpbi14Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpbllfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRQZXJzcGVjdGl2ZU9yaWdpbllfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1wZXJzcGVjdGl2ZS1vcmlnaW4teScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpbi15Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRQcmludENvbG9yQWRqdXN0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0UHJpbnRDb2xvckFkanVzdF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXByaW50LWNvbG9yLWFkanVzdCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXByaW50LWNvbG9yLWFkanVzdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0UmVnaW9uQnJlYWtBZnRlcl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1yZWdpb24tYnJlYWstYWZ0ZXInLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1yZWdpb24tYnJlYWstYWZ0ZXInKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFJlZ2lvbkJyZWFrQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0UmVnaW9uQnJlYWtCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1yZWdpb24tYnJlYWstYmVmb3JlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtcmVnaW9uLWJyZWFrLWJlZm9yZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0UmVnaW9uQnJlYWtJbnNpZGVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRSZWdpb25CcmVha0luc2lkZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXJlZ2lvbi1icmVhay1pbnNpZGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC1yZWdpb24tYnJlYWstaW5zaWRlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRSZWdpb25PdmVyZmxvd19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFJlZ2lvbk92ZXJmbG93X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtcmVnaW9uLW92ZXJmbG93Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtcmVnaW9uLW92ZXJmbG93Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRSdGxPcmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFJ0bE9yZGVyaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtcnRsLW9yZGVyaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtcnRsLW9yZGVyaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRTdmdTaGFkb3dfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRTdmdTaGFkb3dfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC1zdmctc2hhZG93Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtc3ZnLXNoYWRvdycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VGFwSGlnaGxpZ2h0Q29sb3JfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUYXBIaWdobGlnaHRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InLCBleHRlcm5hbF9kZXBlbmRlbmN5X3BhcnNlcnNfMC5wYXJzZUNvbG9yKHYpKTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUZXh0Q29tYmluZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRleHRDb21iaW5lX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1jb21iaW5lJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdGV4dC1jb21iaW5lJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VGV4dEVtcGhhc2lzX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VGV4dEVtcGhhc2lzX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1lbXBoYXNpcycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRleHQtZW1waGFzaXMnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRleHRFbXBoYXNpc0NvbG9yX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VGV4dEVtcGhhc2lzQ29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10ZXh0LWVtcGhhc2lzLWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdGV4dC1lbXBoYXNpcy1jb2xvcicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUZXh0RW1waGFzaXNQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRleHQtZW1waGFzaXMtcG9zaXRpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10ZXh0LWVtcGhhc2lzLXBvc2l0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUZXh0RW1waGFzaXNTdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRleHRFbXBoYXNpc1N0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1lbXBoYXNpcy1zdHlsZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRleHQtZW1waGFzaXMtc3R5bGUnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRleHRGaWxsQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUZXh0RmlsbENvbG9yX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1maWxsLWNvbG9yJywgZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VDb2xvcih2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdGV4dC1maWxsLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUZXh0T3JpZW50YXRpb25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUZXh0T3JpZW50YXRpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10ZXh0LW9yaWVudGF0aW9uJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdGV4dC1vcmllbnRhdGlvbicpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VGV4dFNlY3VyaXR5X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VGV4dFNlY3VyaXR5X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdGV4dC1zZWN1cml0eScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRleHQtc2VjdXJpdHknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRleHRTaXplQWRqdXN0X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VGV4dFNpemVBZGp1c3RfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdGV4dC1zaXplLWFkanVzdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VGV4dFN0cm9rZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRleHRTdHJva2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10ZXh0LXN0cm9rZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRleHQtc3Ryb2tlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUZXh0U3Ryb2tlQ29sb3JfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUZXh0U3Ryb2tlQ29sb3JfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10ZXh0LXN0cm9rZS1jb2xvcicsIGV4dGVybmFsX2RlcGVuZGVuY3lfcGFyc2Vyc18wLnBhcnNlQ29sb3IodikpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRleHQtc3Ryb2tlLWNvbG9yJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUZXh0U3Ryb2tlV2lkdGhfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUZXh0U3Ryb2tlV2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRleHQtc3Ryb2tlLXdpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUcmFuc2Zvcm1fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUcmFuc2Zvcm1fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10cmFuc2Zvcm0nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10cmFuc2Zvcm0nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRyYW5zZm9ybU9yaWdpbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRyYW5zZm9ybU9yaWdpbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUcmFuc2Zvcm1PcmlnaW5YX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VHJhbnNmb3JtT3JpZ2luWF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4teCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4teCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VHJhbnNmb3JtT3JpZ2luWV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRyYW5zZm9ybU9yaWdpbllfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRyYW5zZm9ybU9yaWdpblpfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUcmFuc2Zvcm1PcmlnaW5aX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi16Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi16Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUcmFuc2Zvcm1TdHlsZV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRyYW5zZm9ybVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdHJhbnNmb3JtLXN0eWxlJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdHJhbnNmb3JtLXN0eWxlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUcmFuc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VHJhbnNpdGlvbl9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRyYW5zaXRpb24nLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10cmFuc2l0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUcmFuc2l0aW9uRGVsYXlfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUcmFuc2l0aW9uRGVsYXlfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdHJhbnNpdGlvbi1kZWxheScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eV9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHknLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25fZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRVc2VyRHJhZ19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFVzZXJEcmFnX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdXNlci1kcmFnJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdXNlci1kcmFnJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRVc2VyTW9kaWZ5X2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0VXNlck1vZGlmeV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXVzZXItbW9kaWZ5Jywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtdXNlci1tb2RpZnknKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdlYmtpdFVzZXJTZWxlY3RfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRVc2VyU2VsZWN0X2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtdXNlci1zZWxlY3QnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnLXdlYmtpdC11c2VyLXNlbGVjdCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0V3JhcF9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFdyYXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC13cmFwJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtd3JhcCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0V3JhcEZsb3dfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRXcmFwRmxvd19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXdyYXAtZmxvdycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXdyYXAtZmxvdycpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0V3JhcE1hcmdpbl9leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFdyYXBNYXJnaW5fZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC13cmFwLW1hcmdpbicsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXdyYXAtbWFyZ2luJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRXcmFwUGFkZGluZ19leHBvcnRfZGVmaW5pdGlvbjtcbndlYmtpdFdyYXBQYWRkaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJy13ZWJraXQtd3JhcC1wYWRkaW5nJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJy13ZWJraXQtd3JhcC1wYWRkaW5nJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRXcmFwU2hhcGVJbnNpZGVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRXcmFwU2hhcGVJbnNpZGVfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnLXdlYmtpdC13cmFwLXNoYXBlLWluc2lkZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXdyYXAtc2hhcGUtaW5zaWRlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3ZWJraXRXcmFwU2hhcGVPdXRzaWRlX2V4cG9ydF9kZWZpbml0aW9uO1xud2Via2l0V3JhcFNoYXBlT3V0c2lkZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXdyYXAtc2hhcGUtb3V0c2lkZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXdyYXAtc2hhcGUtb3V0c2lkZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0V3JhcFRocm91Z2hfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRXcmFwVGhyb3VnaF9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXdyYXAtdGhyb3VnaCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXdyYXAtdGhyb3VnaCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2Via2l0V3JpdGluZ01vZGVfZXhwb3J0X2RlZmluaXRpb247XG53ZWJraXRXcml0aW5nTW9kZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCctd2Via2l0LXdyaXRpbmctbW9kZScsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCctd2Via2l0LXdyaXRpbmctbW9kZScpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd2hpdGVTcGFjZV9leHBvcnRfZGVmaW5pdGlvbjtcbndoaXRlU3BhY2VfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnd2hpdGUtc3BhY2UnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnd2hpdGUtc3BhY2UnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdpZG93c19leHBvcnRfZGVmaW5pdGlvbjtcbndpZG93c19leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd3aWRvd3MnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnd2lkb3dzJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3aWR0aF9leHBvcnRfZGVmaW5pdGlvbjtcblxuZnVuY3Rpb24gcGFyc2Uodikge1xuICBpZiAoU3RyaW5nKHYpLnRvTG93ZXJDYXNlKCkgPT09ICdhdXRvJykge1xuICAgIHJldHVybiAnYXV0byc7XG4gIH1cblxuICBpZiAoU3RyaW5nKHYpLnRvTG93ZXJDYXNlKCkgPT09ICdpbmhlcml0Jykge1xuICAgIHJldHVybiAnaW5oZXJpdCc7XG4gIH1cblxuICByZXR1cm4gZXh0ZXJuYWxfZGVwZW5kZW5jeV9wYXJzZXJzXzAucGFyc2VNZWFzdXJlbWVudCh2KTtcbn1cblxud2lkdGhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnd2lkdGgnLCBwYXJzZSh2KSk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3dpZHRoJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3b3JkQnJlYWtfZXhwb3J0X2RlZmluaXRpb247XG53b3JkQnJlYWtfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnd29yZC1icmVhaycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd3b3JkLWJyZWFrJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB3b3JkU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbjtcbndvcmRTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uID0ge1xuICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydHkoJ3dvcmQtc3BhY2luZycsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd3b3JkLXNwYWNpbmcnKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xudmFyIHdvcmRXcmFwX2V4cG9ydF9kZWZpbml0aW9uO1xud29yZFdyYXBfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnd29yZC13cmFwJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3dvcmQtd3JhcCcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn07XG52YXIgd3JpdGluZ01vZGVfZXhwb3J0X2RlZmluaXRpb247XG53cml0aW5nTW9kZV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd3cml0aW5nLW1vZGUnLCB2KTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSgnd3JpdGluZy1tb2RlJyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB6SW5kZXhfZXhwb3J0X2RlZmluaXRpb247XG56SW5kZXhfZXhwb3J0X2RlZmluaXRpb24gPSB7XG4gIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICB0aGlzLl9zZXRQcm9wZXJ0eSgnei1pbmRleCcsIHYpO1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKCd6LWluZGV4Jyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufTtcbnZhciB6b29tX2V4cG9ydF9kZWZpbml0aW9uO1xuem9vbV9leHBvcnRfZGVmaW5pdGlvbiA9IHtcbiAgc2V0OiBmdW5jdGlvbiAodikge1xuICAgIHRoaXMuX3NldFByb3BlcnR5KCd6b29tJywgdik7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoJ3pvb20nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwcm90b3R5cGUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocHJvdG90eXBlLCB7XG4gICAgYWxpZ25tZW50QmFzZWxpbmU6IGFsaWdubWVudEJhc2VsaW5lX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYWxpZ25tZW50LWJhc2VsaW5lXCI6IGFsaWdubWVudEJhc2VsaW5lX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGF6aW11dGg6IGF6aW11dGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCI6IGJhY2tncm91bmRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IGJhY2tncm91bmRJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJhY2tncm91bmQtaW1hZ2VcIjogYmFja2dyb3VuZEltYWdlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJhY2tncm91bmRSZXBlYXQ6IGJhY2tncm91bmRSZXBlYXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJiYWNrZ3JvdW5kLXJlcGVhdFwiOiBiYWNrZ3JvdW5kUmVwZWF0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJhY2tncm91bmRBdHRhY2htZW50OiBiYWNrZ3JvdW5kQXR0YWNobWVudF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJhY2tncm91bmQtYXR0YWNobWVudFwiOiBiYWNrZ3JvdW5kQXR0YWNobWVudF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb246IGJhY2tncm91bmRQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJhY2tncm91bmQtcG9zaXRpb25cIjogYmFja2dyb3VuZFBvc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJhY2tncm91bmQ6IGJhY2tncm91bmRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYmFja2dyb3VuZENsaXA6IGJhY2tncm91bmRDbGlwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYmFja2dyb3VuZC1jbGlwXCI6IGJhY2tncm91bmRDbGlwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJhY2tncm91bmRPcmlnaW46IGJhY2tncm91bmRPcmlnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJiYWNrZ3JvdW5kLW9yaWdpblwiOiBiYWNrZ3JvdW5kT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJhY2tncm91bmRQb3NpdGlvblg6IGJhY2tncm91bmRQb3NpdGlvblhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXhcIjogYmFja2dyb3VuZFBvc2l0aW9uWF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb25ZOiBiYWNrZ3JvdW5kUG9zaXRpb25ZX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYmFja2dyb3VuZC1wb3NpdGlvbi15XCI6IGJhY2tncm91bmRQb3NpdGlvbllfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYmFja2dyb3VuZFJlcGVhdFg6IGJhY2tncm91bmRSZXBlYXRYX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYmFja2dyb3VuZC1yZXBlYXQteFwiOiBiYWNrZ3JvdW5kUmVwZWF0WF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBiYWNrZ3JvdW5kUmVwZWF0WTogYmFja2dyb3VuZFJlcGVhdFlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJiYWNrZ3JvdW5kLXJlcGVhdC15XCI6IGJhY2tncm91bmRSZXBlYXRZX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJhY2tncm91bmRTaXplOiBiYWNrZ3JvdW5kU2l6ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJhY2tncm91bmQtc2l6ZVwiOiBiYWNrZ3JvdW5kU2l6ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBiYXNlbGluZVNoaWZ0OiBiYXNlbGluZVNoaWZ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYmFzZWxpbmUtc2hpZnRcIjogYmFzZWxpbmVTaGlmdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJXaWR0aDogYm9yZGVyV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItd2lkdGhcIjogYm9yZGVyV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyU3R5bGU6IGJvcmRlclN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLXN0eWxlXCI6IGJvcmRlclN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckNvbG9yOiBib3JkZXJDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1jb2xvclwiOiBib3JkZXJDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXI6IGJvcmRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJCb3R0b21XaWR0aDogYm9yZGVyQm90dG9tV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItYm90dG9tLXdpZHRoXCI6IGJvcmRlckJvdHRvbVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckJvdHRvbVN0eWxlOiBib3JkZXJCb3R0b21TdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1ib3R0b20tc3R5bGVcIjogYm9yZGVyQm90dG9tU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyQm90dG9tQ29sb3I6IGJvcmRlckJvdHRvbUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLWJvdHRvbS1jb2xvclwiOiBib3JkZXJCb3R0b21Db2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJCb3R0b206IGJvcmRlckJvdHRvbV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1ib3R0b21cIjogYm9yZGVyQm90dG9tX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6IGJvcmRlckJvdHRvbUxlZnRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzXCI6IGJvcmRlckJvdHRvbUxlZnRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXNcIjogYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyQ29sbGFwc2U6IGJvcmRlckNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLWNvbGxhcHNlXCI6IGJvcmRlckNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckltYWdlOiBib3JkZXJJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1pbWFnZVwiOiBib3JkZXJJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJJbWFnZU91dHNldDogYm9yZGVySW1hZ2VPdXRzZXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItaW1hZ2Utb3V0c2V0XCI6IGJvcmRlckltYWdlT3V0c2V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckltYWdlUmVwZWF0OiBib3JkZXJJbWFnZVJlcGVhdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1pbWFnZS1yZXBlYXRcIjogYm9yZGVySW1hZ2VSZXBlYXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVySW1hZ2VTbGljZTogYm9yZGVySW1hZ2VTbGljZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1pbWFnZS1zbGljZVwiOiBib3JkZXJJbWFnZVNsaWNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckltYWdlU291cmNlOiBib3JkZXJJbWFnZVNvdXJjZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1pbWFnZS1zb3VyY2VcIjogYm9yZGVySW1hZ2VTb3VyY2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVySW1hZ2VXaWR0aDogYm9yZGVySW1hZ2VXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1pbWFnZS13aWR0aFwiOiBib3JkZXJJbWFnZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckxlZnRXaWR0aDogYm9yZGVyTGVmdFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLWxlZnQtd2lkdGhcIjogYm9yZGVyTGVmdFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckxlZnRTdHlsZTogYm9yZGVyTGVmdFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLWxlZnQtc3R5bGVcIjogYm9yZGVyTGVmdFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckxlZnRDb2xvcjogYm9yZGVyTGVmdENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLWxlZnQtY29sb3JcIjogYm9yZGVyTGVmdENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlckxlZnQ6IGJvcmRlckxlZnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItbGVmdFwiOiBib3JkZXJMZWZ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlclJhZGl1czogYm9yZGVyUmFkaXVzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLXJhZGl1c1wiOiBib3JkZXJSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyUmlnaHRXaWR0aDogYm9yZGVyUmlnaHRXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci1yaWdodC13aWR0aFwiOiBib3JkZXJSaWdodFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlclJpZ2h0U3R5bGU6IGJvcmRlclJpZ2h0U3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItcmlnaHQtc3R5bGVcIjogYm9yZGVyUmlnaHRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJSaWdodENvbG9yOiBib3JkZXJSaWdodENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLXJpZ2h0LWNvbG9yXCI6IGJvcmRlclJpZ2h0Q29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyUmlnaHQ6IGJvcmRlclJpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLXJpZ2h0XCI6IGJvcmRlclJpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlclNwYWNpbmc6IGJvcmRlclNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItc3BhY2luZ1wiOiBib3JkZXJTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlclRvcFdpZHRoOiBib3JkZXJUb3BXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci10b3Atd2lkdGhcIjogYm9yZGVyVG9wV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyVG9wU3R5bGU6IGJvcmRlclRvcFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLXRvcC1zdHlsZVwiOiBib3JkZXJUb3BTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJUb3BDb2xvcjogYm9yZGVyVG9wQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItdG9wLWNvbG9yXCI6IGJvcmRlclRvcENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJvcmRlclRvcDogYm9yZGVyVG9wX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm9yZGVyLXRvcFwiOiBib3JkZXJUb3BfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogYm9yZGVyVG9wTGVmdFJhZGl1c19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJvcmRlci10b3AtbGVmdC1yYWRpdXNcIjogYm9yZGVyVG9wTGVmdFJhZGl1c19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogYm9yZGVyVG9wUmlnaHRSYWRpdXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJib3JkZXItdG9wLXJpZ2h0LXJhZGl1c1wiOiBib3JkZXJUb3BSaWdodFJhZGl1c19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3R0b206IGJvdHRvbV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBib3hTaGFkb3c6IGJveFNoYWRvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImJveC1zaGFkb3dcIjogYm94U2hhZG93X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGJveFNpemluZzogYm94U2l6aW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiYm94LXNpemluZ1wiOiBib3hTaXppbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgY2FwdGlvblNpZGU6IGNhcHRpb25TaWRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiY2FwdGlvbi1zaWRlXCI6IGNhcHRpb25TaWRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGNsZWFyOiBjbGVhcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjbGlwOiBjbGlwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGNvbG9yOiBjb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjb2xvckludGVycG9sYXRpb246IGNvbG9ySW50ZXJwb2xhdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImNvbG9yLWludGVycG9sYXRpb25cIjogY29sb3JJbnRlcnBvbGF0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6IGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIjogY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjb2xvclByb2ZpbGU6IGNvbG9yUHJvZmlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImNvbG9yLXByb2ZpbGVcIjogY29sb3JQcm9maWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGNvbG9yUmVuZGVyaW5nOiBjb2xvclJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImNvbG9yLXJlbmRlcmluZ1wiOiBjb2xvclJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjb250ZW50OiBjb250ZW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGNvdW50ZXJJbmNyZW1lbnQ6IGNvdW50ZXJJbmNyZW1lbnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJjb3VudGVyLWluY3JlbWVudFwiOiBjb3VudGVySW5jcmVtZW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGNvdW50ZXJSZXNldDogY291bnRlclJlc2V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiY291bnRlci1yZXNldFwiOiBjb3VudGVyUmVzZXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgY3NzRmxvYXQ6IGNzc0Zsb2F0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiY3NzLWZsb2F0XCI6IGNzc0Zsb2F0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGN1ZTogY3VlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGN1ZUFmdGVyOiBjdWVBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImN1ZS1hZnRlclwiOiBjdWVBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBjdWVCZWZvcmU6IGN1ZUJlZm9yZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImN1ZS1iZWZvcmVcIjogY3VlQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGN1cnNvcjogY3Vyc29yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGRpc3BsYXk6IGRpc3BsYXlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZG9taW5hbnRCYXNlbGluZTogZG9taW5hbnRCYXNlbGluZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImRvbWluYW50LWJhc2VsaW5lXCI6IGRvbWluYW50QmFzZWxpbmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZWxldmF0aW9uOiBlbGV2YXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZW1wdHlDZWxsczogZW1wdHlDZWxsc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImVtcHR5LWNlbGxzXCI6IGVtcHR5Q2VsbHNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZW5hYmxlQmFja2dyb3VuZDogZW5hYmxlQmFja2dyb3VuZF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImVuYWJsZS1iYWNrZ3JvdW5kXCI6IGVuYWJsZUJhY2tncm91bmRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZmlsbDogZmlsbF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBmaWxsT3BhY2l0eTogZmlsbE9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJmaWxsLW9wYWNpdHlcIjogZmlsbE9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZmlsbFJ1bGU6IGZpbGxSdWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiZmlsbC1ydWxlXCI6IGZpbGxSdWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZpbHRlcjogZmlsdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZsb29kQ29sb3I6IGZsb29kQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJmbG9vZC1jb2xvclwiOiBmbG9vZENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZsb29kT3BhY2l0eTogZmxvb2RPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiZmxvb2Qtb3BhY2l0eVwiOiBmbG9vZE9wYWNpdHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZm9udEZhbWlseTogZm9udEZhbWlseV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImZvbnQtZmFtaWx5XCI6IGZvbnRGYW1pbHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZm9udFNpemU6IGZvbnRTaXplX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiZm9udC1zaXplXCI6IGZvbnRTaXplX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZvbnRTdHlsZTogZm9udFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiZm9udC1zdHlsZVwiOiBmb250U3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZm9udFZhcmlhbnQ6IGZvbnRWYXJpYW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiZm9udC12YXJpYW50XCI6IGZvbnRWYXJpYW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZvbnRXZWlnaHQ6IGZvbnRXZWlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJmb250LXdlaWdodFwiOiBmb250V2VpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGxpbmVIZWlnaHQ6IGxpbmVIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJsaW5lLWhlaWdodFwiOiBsaW5lSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGZvbnQ6IGZvbnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZm9udFNpemVBZGp1c3Q6IGZvbnRTaXplQWRqdXN0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiZm9udC1zaXplLWFkanVzdFwiOiBmb250U2l6ZUFkanVzdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBmb250U3RyZXRjaDogZm9udFN0cmV0Y2hfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJmb250LXN0cmV0Y2hcIjogZm9udFN0cmV0Y2hfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6IGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiOiBnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6IGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCI6IGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBoZWlnaHQ6IGhlaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBpbWFnZVJlbmRlcmluZzogaW1hZ2VSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJpbWFnZS1yZW5kZXJpbmdcIjogaW1hZ2VSZW5kZXJpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAga2VybmluZzoga2VybmluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBsZWZ0OiBsZWZ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGxldHRlclNwYWNpbmc6IGxldHRlclNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJsZXR0ZXItc3BhY2luZ1wiOiBsZXR0ZXJTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGxpZ2h0aW5nQ29sb3I6IGxpZ2h0aW5nQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJsaWdodGluZy1jb2xvclwiOiBsaWdodGluZ0NvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGxpc3RTdHlsZTogbGlzdFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwibGlzdC1zdHlsZVwiOiBsaXN0U3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbGlzdFN0eWxlSW1hZ2U6IGxpc3RTdHlsZUltYWdlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwibGlzdC1zdHlsZS1pbWFnZVwiOiBsaXN0U3R5bGVJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBsaXN0U3R5bGVQb3NpdGlvbjogbGlzdFN0eWxlUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJsaXN0LXN0eWxlLXBvc2l0aW9uXCI6IGxpc3RTdHlsZVBvc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIGxpc3RTdHlsZVR5cGU6IGxpc3RTdHlsZVR5cGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJsaXN0LXN0eWxlLXR5cGVcIjogbGlzdFN0eWxlVHlwZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXJnaW46IG1hcmdpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXJnaW5Cb3R0b206IG1hcmdpbkJvdHRvbV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm1hcmdpbi1ib3R0b21cIjogbWFyZ2luQm90dG9tX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG1hcmdpbkxlZnQ6IG1hcmdpbkxlZnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJtYXJnaW4tbGVmdFwiOiBtYXJnaW5MZWZ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG1hcmdpblJpZ2h0OiBtYXJnaW5SaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm1hcmdpbi1yaWdodFwiOiBtYXJnaW5SaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXJnaW5Ub3A6IG1hcmdpblRvcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm1hcmdpbi10b3BcIjogbWFyZ2luVG9wX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG1hcmtlcjogbWFya2VyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG1hcmtlckVuZDogbWFya2VyRW5kX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwibWFya2VyLWVuZFwiOiBtYXJrZXJFbmRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbWFya2VyTWlkOiBtYXJrZXJNaWRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJtYXJrZXItbWlkXCI6IG1hcmtlck1pZF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXJrZXJPZmZzZXQ6IG1hcmtlck9mZnNldF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm1hcmtlci1vZmZzZXRcIjogbWFya2VyT2Zmc2V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG1hcmtlclN0YXJ0OiBtYXJrZXJTdGFydF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm1hcmtlci1zdGFydFwiOiBtYXJrZXJTdGFydF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXJrczogbWFya3NfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgbWFzazogbWFza19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtYXhIZWlnaHQ6IG1heEhlaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm1heC1oZWlnaHRcIjogbWF4SGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG1heFdpZHRoOiBtYXhXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm1heC13aWR0aFwiOiBtYXhXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBtaW5IZWlnaHQ6IG1pbkhlaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm1pbi1oZWlnaHRcIjogbWluSGVpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG1pbldpZHRoOiBtaW5XaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm1pbi13aWR0aFwiOiBtaW5XaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBvcGFjaXR5OiBvcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG9ycGhhbnM6IG9ycGhhbnNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgb3V0bGluZTogb3V0bGluZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBvdXRsaW5lQ29sb3I6IG91dGxpbmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm91dGxpbmUtY29sb3JcIjogb3V0bGluZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG91dGxpbmVPZmZzZXQ6IG91dGxpbmVPZmZzZXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJvdXRsaW5lLW9mZnNldFwiOiBvdXRsaW5lT2Zmc2V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIG91dGxpbmVTdHlsZTogb3V0bGluZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwib3V0bGluZS1zdHlsZVwiOiBvdXRsaW5lU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgb3V0bGluZVdpZHRoOiBvdXRsaW5lV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJvdXRsaW5lLXdpZHRoXCI6IG91dGxpbmVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBvdmVyZmxvdzogb3ZlcmZsb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgb3ZlcmZsb3dYOiBvdmVyZmxvd1hfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJvdmVyZmxvdy14XCI6IG92ZXJmbG93WF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBvdmVyZmxvd1k6IG92ZXJmbG93WV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIm92ZXJmbG93LXlcIjogb3ZlcmZsb3dZX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBhZGRpbmc6IHBhZGRpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcGFkZGluZ0JvdHRvbTogcGFkZGluZ0JvdHRvbV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInBhZGRpbmctYm90dG9tXCI6IHBhZGRpbmdCb3R0b21fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcGFkZGluZ0xlZnQ6IHBhZGRpbmdMZWZ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwicGFkZGluZy1sZWZ0XCI6IHBhZGRpbmdMZWZ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBhZGRpbmdSaWdodDogcGFkZGluZ1JpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwicGFkZGluZy1yaWdodFwiOiBwYWRkaW5nUmlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcGFkZGluZ1RvcDogcGFkZGluZ1RvcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInBhZGRpbmctdG9wXCI6IHBhZGRpbmdUb3BfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcGFnZTogcGFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwYWdlQnJlYWtBZnRlcjogcGFnZUJyZWFrQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJwYWdlLWJyZWFrLWFmdGVyXCI6IHBhZ2VCcmVha0FmdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBhZ2VCcmVha0JlZm9yZTogcGFnZUJyZWFrQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwicGFnZS1icmVhay1iZWZvcmVcIjogcGFnZUJyZWFrQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBhZ2VCcmVha0luc2lkZTogcGFnZUJyZWFrSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwicGFnZS1icmVhay1pbnNpZGVcIjogcGFnZUJyZWFrSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBhdXNlOiBwYXVzZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwYXVzZUFmdGVyOiBwYXVzZUFmdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwicGF1c2UtYWZ0ZXJcIjogcGF1c2VBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBwYXVzZUJlZm9yZTogcGF1c2VCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJwYXVzZS1iZWZvcmVcIjogcGF1c2VCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcGl0Y2g6IHBpdGNoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBpdGNoUmFuZ2U6IHBpdGNoUmFuZ2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJwaXRjaC1yYW5nZVwiOiBwaXRjaFJhbmdlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBsYXlEdXJpbmc6IHBsYXlEdXJpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJwbGF5LWR1cmluZ1wiOiBwbGF5RHVyaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBvaW50ZXJFdmVudHM6IHBvaW50ZXJFdmVudHNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJwb2ludGVyLWV2ZW50c1wiOiBwb2ludGVyRXZlbnRzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBxdW90ZXM6IHF1b3Rlc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICByZXNpemU6IHJlc2l6ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICByaWNobmVzczogcmljaG5lc3NfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgcmlnaHQ6IHJpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHNoYXBlUmVuZGVyaW5nOiBzaGFwZVJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInNoYXBlLXJlbmRlcmluZ1wiOiBzaGFwZVJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzaXplOiBzaXplX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHNwZWFrOiBzcGVha19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzcGVha0hlYWRlcjogc3BlYWtIZWFkZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJzcGVhay1oZWFkZXJcIjogc3BlYWtIZWFkZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgc3BlYWtOdW1lcmFsOiBzcGVha051bWVyYWxfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJzcGVhay1udW1lcmFsXCI6IHNwZWFrTnVtZXJhbF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzcGVha1B1bmN0dWF0aW9uOiBzcGVha1B1bmN0dWF0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwic3BlYWstcHVuY3R1YXRpb25cIjogc3BlYWtQdW5jdHVhdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzcGVlY2hSYXRlOiBzcGVlY2hSYXRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwic3BlZWNoLXJhdGVcIjogc3BlZWNoUmF0ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzcmM6IHNyY19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzdG9wQ29sb3I6IHN0b3BDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInN0b3AtY29sb3JcIjogc3RvcENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHN0b3BPcGFjaXR5OiBzdG9wT3BhY2l0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInN0b3Atb3BhY2l0eVwiOiBzdG9wT3BhY2l0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzdHJlc3M6IHN0cmVzc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzdHJva2U6IHN0cm9rZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzdHJva2VEYXNoYXJyYXk6IHN0cm9rZURhc2hhcnJheV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInN0cm9rZS1kYXNoYXJyYXlcIjogc3Ryb2tlRGFzaGFycmF5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHN0cm9rZURhc2hvZmZzZXQ6IHN0cm9rZURhc2hvZmZzZXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJzdHJva2UtZGFzaG9mZnNldFwiOiBzdHJva2VEYXNob2Zmc2V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHN0cm9rZUxpbmVjYXA6IHN0cm9rZUxpbmVjYXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJzdHJva2UtbGluZWNhcFwiOiBzdHJva2VMaW5lY2FwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHN0cm9rZUxpbmVqb2luOiBzdHJva2VMaW5lam9pbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInN0cm9rZS1saW5lam9pblwiOiBzdHJva2VMaW5lam9pbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiBzdHJva2VNaXRlcmxpbWl0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwic3Ryb2tlLW1pdGVybGltaXRcIjogc3Ryb2tlTWl0ZXJsaW1pdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzdHJva2VPcGFjaXR5OiBzdHJva2VPcGFjaXR5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwic3Ryb2tlLW9wYWNpdHlcIjogc3Ryb2tlT3BhY2l0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBzdHJva2VXaWR0aDogc3Ryb2tlV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJzdHJva2Utd2lkdGhcIjogc3Ryb2tlV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGFibGVMYXlvdXQ6IHRhYmxlTGF5b3V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGFibGUtbGF5b3V0XCI6IHRhYmxlTGF5b3V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRBbGlnbjogdGV4dEFsaWduX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC1hbGlnblwiOiB0ZXh0QWxpZ25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dEFuY2hvcjogdGV4dEFuY2hvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtYW5jaG9yXCI6IHRleHRBbmNob3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dERlY29yYXRpb246IHRleHREZWNvcmF0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC1kZWNvcmF0aW9uXCI6IHRleHREZWNvcmF0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRJbmRlbnQ6IHRleHRJbmRlbnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ0ZXh0LWluZGVudFwiOiB0ZXh0SW5kZW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRMaW5lVGhyb3VnaDogdGV4dExpbmVUaHJvdWdoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC1saW5lLXRocm91Z2hcIjogdGV4dExpbmVUaHJvdWdoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRMaW5lVGhyb3VnaENvbG9yOiB0ZXh0TGluZVRocm91Z2hDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtbGluZS10aHJvdWdoLWNvbG9yXCI6IHRleHRMaW5lVGhyb3VnaENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRMaW5lVGhyb3VnaE1vZGU6IHRleHRMaW5lVGhyb3VnaE1vZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ0ZXh0LWxpbmUtdGhyb3VnaC1tb2RlXCI6IHRleHRMaW5lVGhyb3VnaE1vZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dExpbmVUaHJvdWdoU3R5bGU6IHRleHRMaW5lVGhyb3VnaFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC1saW5lLXRocm91Z2gtc3R5bGVcIjogdGV4dExpbmVUaHJvdWdoU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dExpbmVUaHJvdWdoV2lkdGg6IHRleHRMaW5lVGhyb3VnaFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC1saW5lLXRocm91Z2gtd2lkdGhcIjogdGV4dExpbmVUaHJvdWdoV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dE92ZXJmbG93OiB0ZXh0T3ZlcmZsb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ0ZXh0LW92ZXJmbG93XCI6IHRleHRPdmVyZmxvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0T3ZlcmxpbmU6IHRleHRPdmVybGluZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtb3ZlcmxpbmVcIjogdGV4dE92ZXJsaW5lX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRPdmVybGluZUNvbG9yOiB0ZXh0T3ZlcmxpbmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtb3ZlcmxpbmUtY29sb3JcIjogdGV4dE92ZXJsaW5lQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dE92ZXJsaW5lTW9kZTogdGV4dE92ZXJsaW5lTW9kZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtb3ZlcmxpbmUtbW9kZVwiOiB0ZXh0T3ZlcmxpbmVNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRPdmVybGluZVN0eWxlOiB0ZXh0T3ZlcmxpbmVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtb3ZlcmxpbmUtc3R5bGVcIjogdGV4dE92ZXJsaW5lU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdGV4dE92ZXJsaW5lV2lkdGg6IHRleHRPdmVybGluZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC1vdmVybGluZS13aWR0aFwiOiB0ZXh0T3ZlcmxpbmVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0UmVuZGVyaW5nOiB0ZXh0UmVuZGVyaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC1yZW5kZXJpbmdcIjogdGV4dFJlbmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0U2hhZG93OiB0ZXh0U2hhZG93X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC1zaGFkb3dcIjogdGV4dFNoYWRvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0VHJhbnNmb3JtOiB0ZXh0VHJhbnNmb3JtX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC10cmFuc2Zvcm1cIjogdGV4dFRyYW5zZm9ybV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0VW5kZXJsaW5lOiB0ZXh0VW5kZXJsaW5lX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC11bmRlcmxpbmVcIjogdGV4dFVuZGVybGluZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0VW5kZXJsaW5lQ29sb3I6IHRleHRVbmRlcmxpbmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInRleHQtdW5kZXJsaW5lLWNvbG9yXCI6IHRleHRVbmRlcmxpbmVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB0ZXh0VW5kZXJsaW5lTW9kZTogdGV4dFVuZGVybGluZU1vZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ0ZXh0LXVuZGVybGluZS1tb2RlXCI6IHRleHRVbmRlcmxpbmVNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRVbmRlcmxpbmVTdHlsZTogdGV4dFVuZGVybGluZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC11bmRlcmxpbmUtc3R5bGVcIjogdGV4dFVuZGVybGluZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRleHRVbmRlcmxpbmVXaWR0aDogdGV4dFVuZGVybGluZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidGV4dC11bmRlcmxpbmUtd2lkdGhcIjogdGV4dFVuZGVybGluZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHRvcDogdG9wX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHVuaWNvZGVCaWRpOiB1bmljb2RlQmlkaV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInVuaWNvZGUtYmlkaVwiOiB1bmljb2RlQmlkaV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB1bmljb2RlUmFuZ2U6IHVuaWNvZGVSYW5nZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInVuaWNvZGUtcmFuZ2VcIjogdW5pY29kZVJhbmdlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHZlY3RvckVmZmVjdDogdmVjdG9yRWZmZWN0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwidmVjdG9yLWVmZmVjdFwiOiB2ZWN0b3JFZmZlY3RfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdmVydGljYWxBbGlnbjogdmVydGljYWxBbGlnbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcInZlcnRpY2FsLWFsaWduXCI6IHZlcnRpY2FsQWxpZ25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdmlzaWJpbGl0eTogdmlzaWJpbGl0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB2b2ljZUZhbWlseTogdm9pY2VGYW1pbHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ2b2ljZS1mYW1pbHlcIjogdm9pY2VGYW1pbHlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgdm9sdW1lOiB2b2x1bWVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0QW5pbWF0aW9uOiB3ZWJraXRBbmltYXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYW5pbWF0aW9uXCI6IHdlYmtpdEFuaW1hdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRBbmltYXRpb25EZWxheTogd2Via2l0QW5pbWF0aW9uRGVsYXlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYW5pbWF0aW9uLWRlbGF5XCI6IHdlYmtpdEFuaW1hdGlvbkRlbGF5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEFuaW1hdGlvbkRpcmVjdGlvbjogd2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb25cIjogd2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uOiB3ZWJraXRBbmltYXRpb25EdXJhdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1hbmltYXRpb24tZHVyYXRpb25cIjogd2Via2l0QW5pbWF0aW9uRHVyYXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0QW5pbWF0aW9uRmlsbE1vZGU6IHdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGVcIjogd2Via2l0QW5pbWF0aW9uRmlsbE1vZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnRcIjogd2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0QW5pbWF0aW9uTmFtZTogd2Via2l0QW5pbWF0aW9uTmFtZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1hbmltYXRpb24tbmFtZVwiOiB3ZWJraXRBbmltYXRpb25OYW1lX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZTogd2Via2l0QW5pbWF0aW9uUGxheVN0YXRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlXCI6IHdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbjogd2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvblwiOiB3ZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRBcHBlYXJhbmNlOiB3ZWJraXRBcHBlYXJhbmNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWFwcGVhcmFuY2VcIjogd2Via2l0QXBwZWFyYW5jZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRBc3BlY3RSYXRpbzogd2Via2l0QXNwZWN0UmF0aW9fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYXNwZWN0LXJhdGlvXCI6IHdlYmtpdEFzcGVjdFJhdGlvX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eTogd2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHlcIjogd2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJhY2tncm91bmRDbGlwOiB3ZWJraXRCYWNrZ3JvdW5kQ2xpcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1iYWNrZ3JvdW5kLWNsaXBcIjogd2Via2l0QmFja2dyb3VuZENsaXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZTogd2Via2l0QmFja2dyb3VuZENvbXBvc2l0ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1iYWNrZ3JvdW5kLWNvbXBvc2l0ZVwiOiB3ZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJhY2tncm91bmRPcmlnaW46IHdlYmtpdEJhY2tncm91bmRPcmlnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYmFja2dyb3VuZC1vcmlnaW5cIjogd2Via2l0QmFja2dyb3VuZE9yaWdpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCYWNrZ3JvdW5kU2l6ZTogd2Via2l0QmFja2dyb3VuZFNpemVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYmFja2dyb3VuZC1zaXplXCI6IHdlYmtpdEJhY2tncm91bmRTaXplX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckFmdGVyOiB3ZWJraXRCb3JkZXJBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItYWZ0ZXJcIjogd2Via2l0Qm9yZGVyQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyQWZ0ZXJDb2xvcjogd2Via2l0Qm9yZGVyQWZ0ZXJDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItYWZ0ZXItY29sb3JcIjogd2Via2l0Qm9yZGVyQWZ0ZXJDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3JkZXJBZnRlclN0eWxlOiB3ZWJraXRCb3JkZXJBZnRlclN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1hZnRlci1zdHlsZVwiOiB3ZWJraXRCb3JkZXJBZnRlclN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlckFmdGVyV2lkdGg6IHdlYmtpdEJvcmRlckFmdGVyV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm9yZGVyLWFmdGVyLXdpZHRoXCI6IHdlYmtpdEJvcmRlckFmdGVyV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyQmVmb3JlOiB3ZWJraXRCb3JkZXJCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm9yZGVyLWJlZm9yZVwiOiB3ZWJraXRCb3JkZXJCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyQmVmb3JlQ29sb3I6IHdlYmtpdEJvcmRlckJlZm9yZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1iZWZvcmUtY29sb3JcIjogd2Via2l0Qm9yZGVyQmVmb3JlQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyQmVmb3JlU3R5bGU6IHdlYmtpdEJvcmRlckJlZm9yZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1iZWZvcmUtc3R5bGVcIjogd2Via2l0Qm9yZGVyQmVmb3JlU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyQmVmb3JlV2lkdGg6IHdlYmtpdEJvcmRlckJlZm9yZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1iZWZvcmUtd2lkdGhcIjogd2Via2l0Qm9yZGVyQmVmb3JlV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyRW5kOiB3ZWJraXRCb3JkZXJFbmRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm9yZGVyLWVuZFwiOiB3ZWJraXRCb3JkZXJFbmRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyRW5kQ29sb3I6IHdlYmtpdEJvcmRlckVuZENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1lbmQtY29sb3JcIjogd2Via2l0Qm9yZGVyRW5kQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyRW5kU3R5bGU6IHdlYmtpdEJvcmRlckVuZFN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1lbmQtc3R5bGVcIjogd2Via2l0Qm9yZGVyRW5kU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyRW5kV2lkdGg6IHdlYmtpdEJvcmRlckVuZFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1lbmQtd2lkdGhcIjogd2Via2l0Qm9yZGVyRW5kV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyRml0OiB3ZWJraXRCb3JkZXJGaXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm9yZGVyLWZpdFwiOiB3ZWJraXRCb3JkZXJGaXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmc6IHdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1ob3Jpem9udGFsLXNwYWNpbmdcIjogd2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVySW1hZ2U6IHdlYmtpdEJvcmRlckltYWdlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1pbWFnZVwiOiB3ZWJraXRCb3JkZXJJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3JkZXJSYWRpdXM6IHdlYmtpdEJvcmRlclJhZGl1c19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItcmFkaXVzXCI6IHdlYmtpdEJvcmRlclJhZGl1c19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3JkZXJTdGFydDogd2Via2l0Qm9yZGVyU3RhcnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm9yZGVyLXN0YXJ0XCI6IHdlYmtpdEJvcmRlclN0YXJ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlclN0YXJ0Q29sb3I6IHdlYmtpdEJvcmRlclN0YXJ0Q29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm9yZGVyLXN0YXJ0LWNvbG9yXCI6IHdlYmtpdEJvcmRlclN0YXJ0Q29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm9yZGVyU3RhcnRTdHlsZTogd2Via2l0Qm9yZGVyU3RhcnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3JkZXItc3RhcnQtc3R5bGVcIjogd2Via2l0Qm9yZGVyU3RhcnRTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3JkZXJTdGFydFdpZHRoOiB3ZWJraXRCb3JkZXJTdGFydFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci1zdGFydC13aWR0aFwiOiB3ZWJraXRCb3JkZXJTdGFydFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZzogd2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJvcmRlci12ZXJ0aWNhbC1zcGFjaW5nXCI6IHdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3hBbGlnbjogd2Via2l0Qm94QWxpZ25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm94LWFsaWduXCI6IHdlYmtpdEJveEFsaWduX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJveERpcmVjdGlvbjogd2Via2l0Qm94RGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJveC1kaXJlY3Rpb25cIjogd2Via2l0Qm94RGlyZWN0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJveEZsZXg6IHdlYmtpdEJveEZsZXhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm94LWZsZXhcIjogd2Via2l0Qm94RmxleF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3hGbGV4R3JvdXA6IHdlYmtpdEJveEZsZXhHcm91cF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3gtZmxleC1ncm91cFwiOiB3ZWJraXRCb3hGbGV4R3JvdXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm94TGluZXM6IHdlYmtpdEJveExpbmVzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWJveC1saW5lc1wiOiB3ZWJraXRCb3hMaW5lc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3hPcmRpbmFsR3JvdXA6IHdlYmtpdEJveE9yZGluYWxHcm91cF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3gtb3JkaW5hbC1ncm91cFwiOiB3ZWJraXRCb3hPcmRpbmFsR3JvdXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm94T3JpZW50OiB3ZWJraXRCb3hPcmllbnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm94LW9yaWVudFwiOiB3ZWJraXRCb3hPcmllbnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Qm94UGFjazogd2Via2l0Qm94UGFja19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3gtcGFja1wiOiB3ZWJraXRCb3hQYWNrX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEJveFJlZmxlY3Q6IHdlYmtpdEJveFJlZmxlY3RfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtYm94LXJlZmxlY3RcIjogd2Via2l0Qm94UmVmbGVjdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRCb3hTaGFkb3c6IHdlYmtpdEJveFNoYWRvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1ib3gtc2hhZG93XCI6IHdlYmtpdEJveFNoYWRvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRDb2xvckNvcnJlY3Rpb246IHdlYmtpdENvbG9yQ29ycmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1jb2xvci1jb3JyZWN0aW9uXCI6IHdlYmtpdENvbG9yQ29ycmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRDb2x1bW5BeGlzOiB3ZWJraXRDb2x1bW5BeGlzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWNvbHVtbi1heGlzXCI6IHdlYmtpdENvbHVtbkF4aXNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Q29sdW1uQnJlYWtBZnRlcjogd2Via2l0Q29sdW1uQnJlYWtBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1jb2x1bW4tYnJlYWstYWZ0ZXJcIjogd2Via2l0Q29sdW1uQnJlYWtBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRDb2x1bW5CcmVha0JlZm9yZTogd2Via2l0Q29sdW1uQnJlYWtCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtY29sdW1uLWJyZWFrLWJlZm9yZVwiOiB3ZWJraXRDb2x1bW5CcmVha0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRDb2x1bW5CcmVha0luc2lkZTogd2Via2l0Q29sdW1uQnJlYWtJbnNpZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtY29sdW1uLWJyZWFrLWluc2lkZVwiOiB3ZWJraXRDb2x1bW5CcmVha0luc2lkZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRDb2x1bW5Db3VudDogd2Via2l0Q29sdW1uQ291bnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtY29sdW1uLWNvdW50XCI6IHdlYmtpdENvbHVtbkNvdW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdENvbHVtbkdhcDogd2Via2l0Q29sdW1uR2FwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWNvbHVtbi1nYXBcIjogd2Via2l0Q29sdW1uR2FwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdENvbHVtblJ1bGU6IHdlYmtpdENvbHVtblJ1bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtY29sdW1uLXJ1bGVcIjogd2Via2l0Q29sdW1uUnVsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRDb2x1bW5SdWxlQ29sb3I6IHdlYmtpdENvbHVtblJ1bGVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1jb2x1bW4tcnVsZS1jb2xvclwiOiB3ZWJraXRDb2x1bW5SdWxlQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Q29sdW1uUnVsZVN0eWxlOiB3ZWJraXRDb2x1bW5SdWxlU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtY29sdW1uLXJ1bGUtc3R5bGVcIjogd2Via2l0Q29sdW1uUnVsZVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdENvbHVtblJ1bGVXaWR0aDogd2Via2l0Q29sdW1uUnVsZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWNvbHVtbi1ydWxlLXdpZHRoXCI6IHdlYmtpdENvbHVtblJ1bGVXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRDb2x1bW5TcGFuOiB3ZWJraXRDb2x1bW5TcGFuX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWNvbHVtbi1zcGFuXCI6IHdlYmtpdENvbHVtblNwYW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Q29sdW1uV2lkdGg6IHdlYmtpdENvbHVtbldpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWNvbHVtbi13aWR0aFwiOiB3ZWJraXRDb2x1bW5XaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRDb2x1bW5zOiB3ZWJraXRDb2x1bW5zX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWNvbHVtbnNcIjogd2Via2l0Q29sdW1uc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGaWx0ZXI6IHdlYmtpdEZpbHRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1maWx0ZXJcIjogd2Via2l0RmlsdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZsZXhBbGlnbjogd2Via2l0RmxleEFsaWduX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWZsZXgtYWxpZ25cIjogd2Via2l0RmxleEFsaWduX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZsZXhEaXJlY3Rpb246IHdlYmtpdEZsZXhEaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZmxleC1kaXJlY3Rpb25cIjogd2Via2l0RmxleERpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGbGV4Rmxvdzogd2Via2l0RmxleEZsb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZmxleC1mbG93XCI6IHdlYmtpdEZsZXhGbG93X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZsZXhJdGVtQWxpZ246IHdlYmtpdEZsZXhJdGVtQWxpZ25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZmxleC1pdGVtLWFsaWduXCI6IHdlYmtpdEZsZXhJdGVtQWxpZ25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0RmxleExpbmVQYWNrOiB3ZWJraXRGbGV4TGluZVBhY2tfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZmxleC1saW5lLXBhY2tcIjogd2Via2l0RmxleExpbmVQYWNrX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZsZXhPcmRlcjogd2Via2l0RmxleE9yZGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWZsZXgtb3JkZXJcIjogd2Via2l0RmxleE9yZGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZsZXhQYWNrOiB3ZWJraXRGbGV4UGFja19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1mbGV4LXBhY2tcIjogd2Via2l0RmxleFBhY2tfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0RmxleFdyYXA6IHdlYmtpdEZsZXhXcmFwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWZsZXgtd3JhcFwiOiB3ZWJraXRGbGV4V3JhcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGbG93RnJvbTogd2Via2l0Rmxvd0Zyb21fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZmxvdy1mcm9tXCI6IHdlYmtpdEZsb3dGcm9tX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZsb3dJbnRvOiB3ZWJraXRGbG93SW50b19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1mbG93LWludG9cIjogd2Via2l0Rmxvd0ludG9fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Rm9udEZlYXR1cmVTZXR0aW5nczogd2Via2l0Rm9udEZlYXR1cmVTZXR0aW5nc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3NcIjogd2Via2l0Rm9udEZlYXR1cmVTZXR0aW5nc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRGb250S2VybmluZzogd2Via2l0Rm9udEtlcm5pbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZm9udC1rZXJuaW5nXCI6IHdlYmtpdEZvbnRLZXJuaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZvbnRTaXplRGVsdGE6IHdlYmtpdEZvbnRTaXplRGVsdGFfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtZm9udC1zaXplLWRlbHRhXCI6IHdlYmtpdEZvbnRTaXplRGVsdGFfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0Rm9udFNtb290aGluZzogd2Via2l0Rm9udFNtb290aGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1mb250LXNtb290aGluZ1wiOiB3ZWJraXRGb250U21vb3RoaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzOiB3ZWJraXRGb250VmFyaWFudExpZ2F0dXJlc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1mb250LXZhcmlhbnQtbGlnYXR1cmVzXCI6IHdlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEhpZ2hsaWdodDogd2Via2l0SGlnaGxpZ2h0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWhpZ2hsaWdodFwiOiB3ZWJraXRIaWdobGlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0SHlwaGVuYXRlQ2hhcmFjdGVyOiB3ZWJraXRIeXBoZW5hdGVDaGFyYWN0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtaHlwaGVuYXRlLWNoYXJhY3RlclwiOiB3ZWJraXRIeXBoZW5hdGVDaGFyYWN0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0SHlwaGVuYXRlTGltaXRBZnRlcjogd2Via2l0SHlwaGVuYXRlTGltaXRBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1oeXBoZW5hdGUtbGltaXQtYWZ0ZXJcIjogd2Via2l0SHlwaGVuYXRlTGltaXRBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRIeXBoZW5hdGVMaW1pdEJlZm9yZTogd2Via2l0SHlwaGVuYXRlTGltaXRCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtaHlwaGVuYXRlLWxpbWl0LWJlZm9yZVwiOiB3ZWJraXRIeXBoZW5hdGVMaW1pdEJlZm9yZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzOiB3ZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWh5cGhlbmF0ZS1saW1pdC1saW5lc1wiOiB3ZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdEh5cGhlbnM6IHdlYmtpdEh5cGhlbnNfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtaHlwaGVuc1wiOiB3ZWJraXRIeXBoZW5zX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdExpbmVBbGlnbjogd2Via2l0TGluZUFsaWduX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWxpbmUtYWxpZ25cIjogd2Via2l0TGluZUFsaWduX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdExpbmVCb3hDb250YWluOiB3ZWJraXRMaW5lQm94Q29udGFpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1saW5lLWJveC1jb250YWluXCI6IHdlYmtpdExpbmVCb3hDb250YWluX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdExpbmVCcmVhazogd2Via2l0TGluZUJyZWFrX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWxpbmUtYnJlYWtcIjogd2Via2l0TGluZUJyZWFrX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdExpbmVDbGFtcDogd2Via2l0TGluZUNsYW1wX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWxpbmUtY2xhbXBcIjogd2Via2l0TGluZUNsYW1wX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdExpbmVHcmlkOiB3ZWJraXRMaW5lR3JpZF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1saW5lLWdyaWRcIjogd2Via2l0TGluZUdyaWRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TGluZVNuYXA6IHdlYmtpdExpbmVTbmFwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LWxpbmUtc25hcFwiOiB3ZWJraXRMaW5lU25hcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRMb2NhbGU6IHdlYmtpdExvY2FsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1sb2NhbGVcIjogd2Via2l0TG9jYWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdExvZ2ljYWxIZWlnaHQ6IHdlYmtpdExvZ2ljYWxIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbG9naWNhbC1oZWlnaHRcIjogd2Via2l0TG9naWNhbEhlaWdodF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRMb2dpY2FsV2lkdGg6IHdlYmtpdExvZ2ljYWxXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1sb2dpY2FsLXdpZHRoXCI6IHdlYmtpdExvZ2ljYWxXaWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXJnaW5BZnRlcjogd2Via2l0TWFyZ2luQWZ0ZXJfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFyZ2luLWFmdGVyXCI6IHdlYmtpdE1hcmdpbkFmdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2U6IHdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFyZ2luLWFmdGVyLWNvbGxhcHNlXCI6IHdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFyZ2luQmVmb3JlOiB3ZWJraXRNYXJnaW5CZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFyZ2luLWJlZm9yZVwiOiB3ZWJraXRNYXJnaW5CZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFyZ2luQmVmb3JlQ29sbGFwc2U6IHdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hcmdpbi1iZWZvcmUtY29sbGFwc2VcIjogd2Via2l0TWFyZ2luQmVmb3JlQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6IHdlYmtpdE1hcmdpbkJvdHRvbUNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hcmdpbi1ib3R0b20tY29sbGFwc2VcIjogd2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFyZ2luQ29sbGFwc2U6IHdlYmtpdE1hcmdpbkNvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hcmdpbi1jb2xsYXBzZVwiOiB3ZWJraXRNYXJnaW5Db2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXJnaW5FbmQ6IHdlYmtpdE1hcmdpbkVuZF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXJnaW4tZW5kXCI6IHdlYmtpdE1hcmdpbkVuZF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXJnaW5TdGFydDogd2Via2l0TWFyZ2luU3RhcnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFyZ2luLXN0YXJ0XCI6IHdlYmtpdE1hcmdpblN0YXJ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hcmdpblRvcENvbGxhcHNlOiB3ZWJraXRNYXJnaW5Ub3BDb2xsYXBzZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXJnaW4tdG9wLWNvbGxhcHNlXCI6IHdlYmtpdE1hcmdpblRvcENvbGxhcHNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hcnF1ZWU6IHdlYmtpdE1hcnF1ZWVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFycXVlZVwiOiB3ZWJraXRNYXJxdWVlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hcnF1ZWVEaXJlY3Rpb246IHdlYmtpdE1hcnF1ZWVEaXJlY3Rpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFycXVlZS1kaXJlY3Rpb25cIjogd2Via2l0TWFycXVlZURpcmVjdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXJxdWVlSW5jcmVtZW50OiB3ZWJraXRNYXJxdWVlSW5jcmVtZW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hcnF1ZWUtaW5jcmVtZW50XCI6IHdlYmtpdE1hcnF1ZWVJbmNyZW1lbnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFycXVlZVJlcGV0aXRpb246IHdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hcnF1ZWUtcmVwZXRpdGlvblwiOiB3ZWJraXRNYXJxdWVlUmVwZXRpdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXJxdWVlU3BlZWQ6IHdlYmtpdE1hcnF1ZWVTcGVlZF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXJxdWVlLXNwZWVkXCI6IHdlYmtpdE1hcnF1ZWVTcGVlZF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXJxdWVlU3R5bGU6IHdlYmtpdE1hcnF1ZWVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXJxdWVlLXN0eWxlXCI6IHdlYmtpdE1hcnF1ZWVTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrOiB3ZWJraXRNYXNrX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hc2tcIjogd2Via2l0TWFza19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrQXR0YWNobWVudDogd2Via2l0TWFza0F0dGFjaG1lbnRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFzay1hdHRhY2htZW50XCI6IHdlYmtpdE1hc2tBdHRhY2htZW50X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tCb3hJbWFnZTogd2Via2l0TWFza0JveEltYWdlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hc2stYm94LWltYWdlXCI6IHdlYmtpdE1hc2tCb3hJbWFnZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrQm94SW1hZ2VPdXRzZXQ6IHdlYmtpdE1hc2tCb3hJbWFnZU91dHNldF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLWJveC1pbWFnZS1vdXRzZXRcIjogd2Via2l0TWFza0JveEltYWdlT3V0c2V0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tCb3hJbWFnZVJlcGVhdDogd2Via2l0TWFza0JveEltYWdlUmVwZWF0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hc2stYm94LWltYWdlLXJlcGVhdFwiOiB3ZWJraXRNYXNrQm94SW1hZ2VSZXBlYXRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFza0JveEltYWdlU2xpY2U6IHdlYmtpdE1hc2tCb3hJbWFnZVNsaWNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hc2stYm94LWltYWdlLXNsaWNlXCI6IHdlYmtpdE1hc2tCb3hJbWFnZVNsaWNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogd2Via2l0TWFza0JveEltYWdlU291cmNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hc2stYm94LWltYWdlLXNvdXJjZVwiOiB3ZWJraXRNYXNrQm94SW1hZ2VTb3VyY2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFza0JveEltYWdlV2lkdGg6IHdlYmtpdE1hc2tCb3hJbWFnZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hc2stYm94LWltYWdlLXdpZHRoXCI6IHdlYmtpdE1hc2tCb3hJbWFnZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tDbGlwOiB3ZWJraXRNYXNrQ2xpcF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLWNsaXBcIjogd2Via2l0TWFza0NsaXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFza0NvbXBvc2l0ZTogd2Via2l0TWFza0NvbXBvc2l0ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLWNvbXBvc2l0ZVwiOiB3ZWJraXRNYXNrQ29tcG9zaXRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tJbWFnZTogd2Via2l0TWFza0ltYWdlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hc2staW1hZ2VcIjogd2Via2l0TWFza0ltYWdlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tPcmlnaW46IHdlYmtpdE1hc2tPcmlnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFzay1vcmlnaW5cIjogd2Via2l0TWFza09yaWdpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrUG9zaXRpb246IHdlYmtpdE1hc2tQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLXBvc2l0aW9uXCI6IHdlYmtpdE1hc2tQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRNYXNrUG9zaXRpb25YOiB3ZWJraXRNYXNrUG9zaXRpb25YX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW1hc2stcG9zaXRpb24teFwiOiB3ZWJraXRNYXNrUG9zaXRpb25YX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tQb3NpdGlvblk6IHdlYmtpdE1hc2tQb3NpdGlvbllfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWFzay1wb3NpdGlvbi15XCI6IHdlYmtpdE1hc2tQb3NpdGlvbllfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWFza1JlcGVhdDogd2Via2l0TWFza1JlcGVhdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLXJlcGVhdFwiOiB3ZWJraXRNYXNrUmVwZWF0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tSZXBlYXRYOiB3ZWJraXRNYXNrUmVwZWF0WF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLXJlcGVhdC14XCI6IHdlYmtpdE1hc2tSZXBlYXRYX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tSZXBlYXRZOiB3ZWJraXRNYXNrUmVwZWF0WV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLXJlcGVhdC15XCI6IHdlYmtpdE1hc2tSZXBlYXRZX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1hc2tTaXplOiB3ZWJraXRNYXNrU2l6ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXNrLXNpemVcIjogd2Via2l0TWFza1NpemVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcjogd2Via2l0TWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1tYXRjaC1uZWFyZXN0LW1haWwtYmxvY2txdW90ZS1jb2xvclwiOiB3ZWJraXRNYXRjaE5lYXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1heExvZ2ljYWxIZWlnaHQ6IHdlYmtpdE1heExvZ2ljYWxIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWF4LWxvZ2ljYWwtaGVpZ2h0XCI6IHdlYmtpdE1heExvZ2ljYWxIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWF4TG9naWNhbFdpZHRoOiB3ZWJraXRNYXhMb2dpY2FsV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWF4LWxvZ2ljYWwtd2lkdGhcIjogd2Via2l0TWF4TG9naWNhbFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE1pbkxvZ2ljYWxIZWlnaHQ6IHdlYmtpdE1pbkxvZ2ljYWxIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWluLWxvZ2ljYWwtaGVpZ2h0XCI6IHdlYmtpdE1pbkxvZ2ljYWxIZWlnaHRfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0TWluTG9naWNhbFdpZHRoOiB3ZWJraXRNaW5Mb2dpY2FsV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtbWluLWxvZ2ljYWwtd2lkdGhcIjogd2Via2l0TWluTG9naWNhbFdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdE5ic3BNb2RlOiB3ZWJraXROYnNwTW9kZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1uYnNwLW1vZGVcIjogd2Via2l0TmJzcE1vZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6IHdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LW92ZXJmbG93LXNjcm9sbGluZ1wiOiB3ZWJraXRPdmVyZmxvd1Njcm9sbGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRQYWRkaW5nQWZ0ZXI6IHdlYmtpdFBhZGRpbmdBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1wYWRkaW5nLWFmdGVyXCI6IHdlYmtpdFBhZGRpbmdBZnRlcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRQYWRkaW5nQmVmb3JlOiB3ZWJraXRQYWRkaW5nQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXBhZGRpbmctYmVmb3JlXCI6IHdlYmtpdFBhZGRpbmdCZWZvcmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0UGFkZGluZ0VuZDogd2Via2l0UGFkZGluZ0VuZF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1wYWRkaW5nLWVuZFwiOiB3ZWJraXRQYWRkaW5nRW5kX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFBhZGRpbmdTdGFydDogd2Via2l0UGFkZGluZ1N0YXJ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXBhZGRpbmctc3RhcnRcIjogd2Via2l0UGFkZGluZ1N0YXJ0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFBlcnNwZWN0aXZlOiB3ZWJraXRQZXJzcGVjdGl2ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1wZXJzcGVjdGl2ZVwiOiB3ZWJraXRQZXJzcGVjdGl2ZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpbjogd2Via2l0UGVyc3BlY3RpdmVPcmlnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luXCI6IHdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWDogd2Via2l0UGVyc3BlY3RpdmVPcmlnaW5YX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXBlcnNwZWN0aXZlLW9yaWdpbi14XCI6IHdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpblk6IHdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1wZXJzcGVjdGl2ZS1vcmlnaW4teVwiOiB3ZWJraXRQZXJzcGVjdGl2ZU9yaWdpbllfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0UHJpbnRDb2xvckFkanVzdDogd2Via2l0UHJpbnRDb2xvckFkanVzdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1wcmludC1jb2xvci1hZGp1c3RcIjogd2Via2l0UHJpbnRDb2xvckFkanVzdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRSZWdpb25CcmVha0FmdGVyOiB3ZWJraXRSZWdpb25CcmVha0FmdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXJlZ2lvbi1icmVhay1hZnRlclwiOiB3ZWJraXRSZWdpb25CcmVha0FmdGVyX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFJlZ2lvbkJyZWFrQmVmb3JlOiB3ZWJraXRSZWdpb25CcmVha0JlZm9yZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1yZWdpb24tYnJlYWstYmVmb3JlXCI6IHdlYmtpdFJlZ2lvbkJyZWFrQmVmb3JlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlOiB3ZWJraXRSZWdpb25CcmVha0luc2lkZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1yZWdpb24tYnJlYWstaW5zaWRlXCI6IHdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFJlZ2lvbk92ZXJmbG93OiB3ZWJraXRSZWdpb25PdmVyZmxvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1yZWdpb24tb3ZlcmZsb3dcIjogd2Via2l0UmVnaW9uT3ZlcmZsb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0UnRsT3JkZXJpbmc6IHdlYmtpdFJ0bE9yZGVyaW5nX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXJ0bC1vcmRlcmluZ1wiOiB3ZWJraXRSdGxPcmRlcmluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRTdmdTaGFkb3c6IHdlYmtpdFN2Z1NoYWRvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC1zdmctc2hhZG93XCI6IHdlYmtpdFN2Z1NoYWRvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUYXBIaWdobGlnaHRDb2xvcjogd2Via2l0VGFwSGlnaGxpZ2h0Q29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiOiB3ZWJraXRUYXBIaWdobGlnaHRDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0Q29tYmluZTogd2Via2l0VGV4dENvbWJpbmVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdGV4dC1jb21iaW5lXCI6IHdlYmtpdFRleHRDb21iaW5lX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0OiB3ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdFwiOiB3ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0RW1waGFzaXM6IHdlYmtpdFRleHRFbXBoYXNpc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10ZXh0LWVtcGhhc2lzXCI6IHdlYmtpdFRleHRFbXBoYXNpc19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0RW1waGFzaXNDb2xvcjogd2Via2l0VGV4dEVtcGhhc2lzQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdGV4dC1lbXBoYXNpcy1jb2xvclwiOiB3ZWJraXRUZXh0RW1waGFzaXNDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0RW1waGFzaXNQb3NpdGlvbjogd2Via2l0VGV4dEVtcGhhc2lzUG9zaXRpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdGV4dC1lbXBoYXNpcy1wb3NpdGlvblwiOiB3ZWJraXRUZXh0RW1waGFzaXNQb3NpdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0RW1waGFzaXNTdHlsZTogd2Via2l0VGV4dEVtcGhhc2lzU3R5bGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdGV4dC1lbXBoYXNpcy1zdHlsZVwiOiB3ZWJraXRUZXh0RW1waGFzaXNTdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0RmlsbENvbG9yOiB3ZWJraXRUZXh0RmlsbENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRleHQtZmlsbC1jb2xvclwiOiB3ZWJraXRUZXh0RmlsbENvbG9yX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFRleHRPcmllbnRhdGlvbjogd2Via2l0VGV4dE9yaWVudGF0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRleHQtb3JpZW50YXRpb25cIjogd2Via2l0VGV4dE9yaWVudGF0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFRleHRTZWN1cml0eTogd2Via2l0VGV4dFNlY3VyaXR5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRleHQtc2VjdXJpdHlcIjogd2Via2l0VGV4dFNlY3VyaXR5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFRleHRTaXplQWRqdXN0OiB3ZWJraXRUZXh0U2l6ZUFkanVzdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10ZXh0LXNpemUtYWRqdXN0XCI6IHdlYmtpdFRleHRTaXplQWRqdXN0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFRleHRTdHJva2U6IHdlYmtpdFRleHRTdHJva2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdGV4dC1zdHJva2VcIjogd2Via2l0VGV4dFN0cm9rZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUZXh0U3Ryb2tlQ29sb3I6IHdlYmtpdFRleHRTdHJva2VDb2xvcl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10ZXh0LXN0cm9rZS1jb2xvclwiOiB3ZWJraXRUZXh0U3Ryb2tlQ29sb3JfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VGV4dFN0cm9rZVdpZHRoOiB3ZWJraXRUZXh0U3Ryb2tlV2lkdGhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdGV4dC1zdHJva2Utd2lkdGhcIjogd2Via2l0VGV4dFN0cm9rZVdpZHRoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFRyYW5zZm9ybTogd2Via2l0VHJhbnNmb3JtX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRyYW5zZm9ybVwiOiB3ZWJraXRUcmFuc2Zvcm1fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VHJhbnNmb3JtT3JpZ2luOiB3ZWJraXRUcmFuc2Zvcm1PcmlnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdHJhbnNmb3JtLW9yaWdpblwiOiB3ZWJraXRUcmFuc2Zvcm1PcmlnaW5fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VHJhbnNmb3JtT3JpZ2luWDogd2Via2l0VHJhbnNmb3JtT3JpZ2luWF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXhcIjogd2Via2l0VHJhbnNmb3JtT3JpZ2luWF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUcmFuc2Zvcm1PcmlnaW5ZOiB3ZWJraXRUcmFuc2Zvcm1PcmlnaW5ZX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRyYW5zZm9ybS1vcmlnaW4teVwiOiB3ZWJraXRUcmFuc2Zvcm1PcmlnaW5ZX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFRyYW5zZm9ybU9yaWdpblo6IHdlYmtpdFRyYW5zZm9ybU9yaWdpblpfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi16XCI6IHdlYmtpdFRyYW5zZm9ybU9yaWdpblpfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VHJhbnNmb3JtU3R5bGU6IHdlYmtpdFRyYW5zZm9ybVN0eWxlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRyYW5zZm9ybS1zdHlsZVwiOiB3ZWJraXRUcmFuc2Zvcm1TdHlsZV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUcmFuc2l0aW9uOiB3ZWJraXRUcmFuc2l0aW9uX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXRyYW5zaXRpb25cIjogd2Via2l0VHJhbnNpdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUcmFuc2l0aW9uRGVsYXk6IHdlYmtpdFRyYW5zaXRpb25EZWxheV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10cmFuc2l0aW9uLWRlbGF5XCI6IHdlYmtpdFRyYW5zaXRpb25EZWxheV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUcmFuc2l0aW9uRHVyYXRpb246IHdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uXCI6IHdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6IHdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5XCI6IHdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eV9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246IHdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvblwiOiB3ZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25fZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VXNlckRyYWc6IHdlYmtpdFVzZXJEcmFnX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXVzZXItZHJhZ1wiOiB3ZWJraXRVc2VyRHJhZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRVc2VyTW9kaWZ5OiB3ZWJraXRVc2VyTW9kaWZ5X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXVzZXItbW9kaWZ5XCI6IHdlYmtpdFVzZXJNb2RpZnlfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0VXNlclNlbGVjdDogd2Via2l0VXNlclNlbGVjdF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC11c2VyLXNlbGVjdFwiOiB3ZWJraXRVc2VyU2VsZWN0X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFdyYXA6IHdlYmtpdFdyYXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtd3JhcFwiOiB3ZWJraXRXcmFwX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFdyYXBGbG93OiB3ZWJraXRXcmFwRmxvd19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC13cmFwLWZsb3dcIjogd2Via2l0V3JhcEZsb3dfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0V3JhcE1hcmdpbjogd2Via2l0V3JhcE1hcmdpbl9leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC13cmFwLW1hcmdpblwiOiB3ZWJraXRXcmFwTWFyZ2luX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFdyYXBQYWRkaW5nOiB3ZWJraXRXcmFwUGFkZGluZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndlYmtpdC13cmFwLXBhZGRpbmdcIjogd2Via2l0V3JhcFBhZGRpbmdfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0V3JhcFNoYXBlSW5zaWRlOiB3ZWJraXRXcmFwU2hhcGVJbnNpZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtd3JhcC1zaGFwZS1pbnNpZGVcIjogd2Via2l0V3JhcFNoYXBlSW5zaWRlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdlYmtpdFdyYXBTaGFwZU91dHNpZGU6IHdlYmtpdFdyYXBTaGFwZU91dHNpZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtd3JhcC1zaGFwZS1vdXRzaWRlXCI6IHdlYmtpdFdyYXBTaGFwZU91dHNpZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd2Via2l0V3JhcFRocm91Z2g6IHdlYmtpdFdyYXBUaHJvdWdoX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid2Via2l0LXdyYXAtdGhyb3VnaFwiOiB3ZWJraXRXcmFwVGhyb3VnaF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3ZWJraXRXcml0aW5nTW9kZTogd2Via2l0V3JpdGluZ01vZGVfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3ZWJraXQtd3JpdGluZy1tb2RlXCI6IHdlYmtpdFdyaXRpbmdNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdoaXRlU3BhY2U6IHdoaXRlU3BhY2VfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3aGl0ZS1zcGFjZVwiOiB3aGl0ZVNwYWNlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdpZG93czogd2lkb3dzX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdpZHRoOiB3aWR0aF9leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3b3JkQnJlYWs6IHdvcmRCcmVha19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndvcmQtYnJlYWtcIjogd29yZEJyZWFrX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHdvcmRTcGFjaW5nOiB3b3JkU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICBcIndvcmQtc3BhY2luZ1wiOiB3b3JkU3BhY2luZ19leHBvcnRfZGVmaW5pdGlvbixcbiAgICB3b3JkV3JhcDogd29yZFdyYXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgXCJ3b3JkLXdyYXBcIjogd29yZFdyYXBfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgd3JpdGluZ01vZGU6IHdyaXRpbmdNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwid3JpdGluZy1tb2RlXCI6IHdyaXRpbmdNb2RlX2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIHpJbmRleDogekluZGV4X2V4cG9ydF9kZWZpbml0aW9uLFxuICAgIFwiei1pbmRleFwiOiB6SW5kZXhfZXhwb3J0X2RlZmluaXRpb24sXG4gICAgem9vbTogem9vbV9leHBvcnRfZGVmaW5pdGlvblxuICB9KTtcbn07XG4iLCJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsYXllZFN0cmVhbTtcbmZ1bmN0aW9uIERlbGF5ZWRTdHJlYW0oKSB7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbSA9IHRydWU7XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IGZhbHNlO1xuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufVxudXRpbC5pbmhlcml0cyhEZWxheWVkU3RyZWFtLCBTdHJlYW0pO1xuXG5EZWxheWVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZGVsYXllZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgZGVsYXllZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgZGVsYXllZFN0cmVhbS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgdmFyIHJlYWxFbWl0ID0gc291cmNlLmVtaXQ7XG4gIHNvdXJjZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsYXllZFN0cmVhbS5faGFuZGxlRW1pdChhcmd1bWVudHMpO1xuICAgIHJldHVybiByZWFsRW1pdC5hcHBseShzb3VyY2UsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge30pO1xuICBpZiAoZGVsYXllZFN0cmVhbS5wYXVzZVN0cmVhbSkge1xuICAgIHNvdXJjZS5wYXVzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlbGF5ZWRTdHJlYW07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGVsYXllZFN0cmVhbS5wcm90b3R5cGUsICdyZWFkYWJsZScsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5yZWFkYWJsZTtcbiAgfVxufSk7XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZS5zZXRFbmNvZGluZy5hcHBseSh0aGlzLnNvdXJjZSwgYXJndW1lbnRzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gIH1cblxuICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc291cmNlLnBhdXNlKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByID0gU3RyZWFtLnByb3RvdHlwZS5waXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiByO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVtaXQgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICh0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXJnc1swXSA9PT0gJ2RhdGEnKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSBhcmdzWzFdLmxlbmd0aDtcbiAgICB0aGlzLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCgpO1xuICB9XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMucHVzaChhcmdzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nXG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy51dGlscyA9IHJlcXVpcmUoJy4vZGVzL3V0aWxzJyk7XG5leHBvcnRzLkNpcGhlciA9IHJlcXVpcmUoJy4vZGVzL2NpcGhlcicpO1xuZXhwb3J0cy5ERVMgPSByZXF1aXJlKCcuL2Rlcy9kZXMnKTtcbmV4cG9ydHMuQ0JDID0gcmVxdWlyZSgnLi9kZXMvY2JjJyk7XG5leHBvcnRzLkVERSA9IHJlcXVpcmUoJy4vZGVzL2VkZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIHByb3RvID0ge307XG5cbmZ1bmN0aW9uIENCQ1N0YXRlKGl2KSB7XG4gIGFzc2VydC5lcXVhbChpdi5sZW5ndGgsIDgsICdJbnZhbGlkIElWIGxlbmd0aCcpO1xuXG4gIHRoaXMuaXYgPSBuZXcgQXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdi5sZW5ndGg7IGkrKylcbiAgICB0aGlzLml2W2ldID0gaXZbaV07XG59XG5cbmZ1bmN0aW9uIGluc3RhbnRpYXRlKEJhc2UpIHtcbiAgZnVuY3Rpb24gQ0JDKG9wdGlvbnMpIHtcbiAgICBCYXNlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5fY2JjSW5pdCgpO1xuICB9XG4gIGluaGVyaXRzKENCQywgQmFzZSk7XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm90byk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIENCQy5wcm90b3R5cGVba2V5XSA9IHByb3RvW2tleV07XG4gIH1cblxuICBDQkMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IENCQyhvcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gQ0JDO1xufVxuXG5leHBvcnRzLmluc3RhbnRpYXRlID0gaW5zdGFudGlhdGU7XG5cbnByb3RvLl9jYmNJbml0ID0gZnVuY3Rpb24gX2NiY0luaXQoKSB7XG4gIHZhciBzdGF0ZSA9IG5ldyBDQkNTdGF0ZSh0aGlzLm9wdGlvbnMuaXYpO1xuICB0aGlzLl9jYmNTdGF0ZSA9IHN0YXRlO1xufTtcblxucHJvdG8uX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUoaW5wLCBpbk9mZiwgb3V0LCBvdXRPZmYpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fY2JjU3RhdGU7XG4gIHZhciBzdXBlclByb3RvID0gdGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlO1xuXG4gIHZhciBpdiA9IHN0YXRlLml2O1xuICBpZiAodGhpcy50eXBlID09PSAnZW5jcnlwdCcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAgICBpdltpXSBePSBpbnBbaW5PZmYgKyBpXTtcblxuICAgIHN1cGVyUHJvdG8uX3VwZGF0ZS5jYWxsKHRoaXMsIGl2LCAwLCBvdXQsIG91dE9mZik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAgICBpdltpXSA9IG91dFtvdXRPZmYgKyBpXTtcbiAgfSBlbHNlIHtcbiAgICBzdXBlclByb3RvLl91cGRhdGUuY2FsbCh0aGlzLCBpbnAsIGluT2ZmLCBvdXQsIG91dE9mZik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAgICBvdXRbb3V0T2ZmICsgaV0gXj0gaXZbaV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYmxvY2tTaXplOyBpKyspXG4gICAgICBpdltpXSA9IGlucFtpbk9mZiArIGldO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBDaXBoZXIob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gIHRoaXMudHlwZSA9IHRoaXMub3B0aW9ucy50eXBlO1xuICB0aGlzLmJsb2NrU2l6ZSA9IDg7XG4gIHRoaXMuX2luaXQoKTtcblxuICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7XG4gIHRoaXMuYnVmZmVyT2ZmID0gMDtcbn1cbm1vZHVsZS5leHBvcnRzID0gQ2lwaGVyO1xuXG5DaXBoZXIucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gX2luaXQoKSB7XG4gIC8vIE1pZ2h0IGJlIG92ZXJyaWRlZFxufTtcblxuQ2lwaGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoZGF0YSkge1xuICBpZiAoZGF0YS5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0aGlzLnR5cGUgPT09ICdkZWNyeXB0JylcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlRGVjcnlwdChkYXRhKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLl91cGRhdGVFbmNyeXB0KGRhdGEpO1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fYnVmZmVyID0gZnVuY3Rpb24gX2J1ZmZlcihkYXRhLCBvZmYpIHtcbiAgLy8gQXBwZW5kIGRhdGEgdG8gYnVmZmVyXG4gIHZhciBtaW4gPSBNYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGggLSB0aGlzLmJ1ZmZlck9mZiwgZGF0YS5sZW5ndGggLSBvZmYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbjsgaSsrKVxuICAgIHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmICsgaV0gPSBkYXRhW29mZiArIGldO1xuICB0aGlzLmJ1ZmZlck9mZiArPSBtaW47XG5cbiAgLy8gU2hpZnQgbmV4dFxuICByZXR1cm4gbWluO1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fZmx1c2hCdWZmZXIgPSBmdW5jdGlvbiBfZmx1c2hCdWZmZXIob3V0LCBvZmYpIHtcbiAgdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLCAwLCBvdXQsIG9mZik7XG4gIHRoaXMuYnVmZmVyT2ZmID0gMDtcbiAgcmV0dXJuIHRoaXMuYmxvY2tTaXplO1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdCA9IGZ1bmN0aW9uIF91cGRhdGVFbmNyeXB0KGRhdGEpIHtcbiAgdmFyIGlucHV0T2ZmID0gMDtcbiAgdmFyIG91dHB1dE9mZiA9IDA7XG5cbiAgdmFyIGNvdW50ID0gKCh0aGlzLmJ1ZmZlck9mZiArIGRhdGEubGVuZ3RoKSAvIHRoaXMuYmxvY2tTaXplKSB8IDA7XG4gIHZhciBvdXQgPSBuZXcgQXJyYXkoY291bnQgKiB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgaWYgKHRoaXMuYnVmZmVyT2ZmICE9PSAwKSB7XG4gICAgaW5wdXRPZmYgKz0gdGhpcy5fYnVmZmVyKGRhdGEsIGlucHV0T2ZmKTtcblxuICAgIGlmICh0aGlzLmJ1ZmZlck9mZiA9PT0gdGhpcy5idWZmZXIubGVuZ3RoKVxuICAgICAgb3V0cHV0T2ZmICs9IHRoaXMuX2ZsdXNoQnVmZmVyKG91dCwgb3V0cHV0T2ZmKTtcbiAgfVxuXG4gIC8vIFdyaXRlIGJsb2Nrc1xuICB2YXIgbWF4ID0gZGF0YS5sZW5ndGggLSAoKGRhdGEubGVuZ3RoIC0gaW5wdXRPZmYpICUgdGhpcy5ibG9ja1NpemUpO1xuICBmb3IgKDsgaW5wdXRPZmYgPCBtYXg7IGlucHV0T2ZmICs9IHRoaXMuYmxvY2tTaXplKSB7XG4gICAgdGhpcy5fdXBkYXRlKGRhdGEsIGlucHV0T2ZmLCBvdXQsIG91dHB1dE9mZik7XG4gICAgb3V0cHV0T2ZmICs9IHRoaXMuYmxvY2tTaXplO1xuICB9XG5cbiAgLy8gUXVldWUgcmVzdFxuICBmb3IgKDsgaW5wdXRPZmYgPCBkYXRhLmxlbmd0aDsgaW5wdXRPZmYrKywgdGhpcy5idWZmZXJPZmYrKylcbiAgICB0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl0gPSBkYXRhW2lucHV0T2ZmXTtcblxuICByZXR1cm4gb3V0O1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdCA9IGZ1bmN0aW9uIF91cGRhdGVEZWNyeXB0KGRhdGEpIHtcbiAgdmFyIGlucHV0T2ZmID0gMDtcbiAgdmFyIG91dHB1dE9mZiA9IDA7XG5cbiAgdmFyIGNvdW50ID0gTWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZiArIGRhdGEubGVuZ3RoKSAvIHRoaXMuYmxvY2tTaXplKSAtIDE7XG4gIHZhciBvdXQgPSBuZXcgQXJyYXkoY291bnQgKiB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gVE9ETyhpbmR1dG55KTogb3B0aW1pemUgaXQsIHRoaXMgaXMgZmFyIGZyb20gb3B0aW1hbFxuICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7XG4gICAgaW5wdXRPZmYgKz0gdGhpcy5fYnVmZmVyKGRhdGEsIGlucHV0T2ZmKTtcbiAgICBvdXRwdXRPZmYgKz0gdGhpcy5fZmx1c2hCdWZmZXIob3V0LCBvdXRwdXRPZmYpO1xuICB9XG5cbiAgLy8gQnVmZmVyIHJlc3Qgb2YgdGhlIGlucHV0XG4gIGlucHV0T2ZmICs9IHRoaXMuX2J1ZmZlcihkYXRhLCBpbnB1dE9mZik7XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuZmluYWwgPSBmdW5jdGlvbiBmaW5hbChidWZmZXIpIHtcbiAgdmFyIGZpcnN0O1xuICBpZiAoYnVmZmVyKVxuICAgIGZpcnN0ID0gdGhpcy51cGRhdGUoYnVmZmVyKTtcblxuICB2YXIgbGFzdDtcbiAgaWYgKHRoaXMudHlwZSA9PT0gJ2VuY3J5cHQnKVxuICAgIGxhc3QgPSB0aGlzLl9maW5hbEVuY3J5cHQoKTtcbiAgZWxzZVxuICAgIGxhc3QgPSB0aGlzLl9maW5hbERlY3J5cHQoKTtcblxuICBpZiAoZmlyc3QpXG4gICAgcmV0dXJuIGZpcnN0LmNvbmNhdChsYXN0KTtcbiAgZWxzZVxuICAgIHJldHVybiBsYXN0O1xufTtcblxuQ2lwaGVyLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gX3BhZChidWZmZXIsIG9mZikge1xuICBpZiAob2ZmID09PSAwKVxuICAgIHJldHVybiBmYWxzZTtcblxuICB3aGlsZSAob2ZmIDwgYnVmZmVyLmxlbmd0aClcbiAgICBidWZmZXJbb2ZmKytdID0gMDtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdCA9IGZ1bmN0aW9uIF9maW5hbEVuY3J5cHQoKSB7XG4gIGlmICghdGhpcy5fcGFkKHRoaXMuYnVmZmVyLCB0aGlzLmJ1ZmZlck9mZikpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBvdXQgPSBuZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO1xuICB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsIDAsIG91dCwgMCk7XG4gIHJldHVybiBvdXQ7XG59O1xuXG5DaXBoZXIucHJvdG90eXBlLl91bnBhZCA9IGZ1bmN0aW9uIF91bnBhZChidWZmZXIpIHtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn07XG5cbkNpcGhlci5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdCA9IGZ1bmN0aW9uIF9maW5hbERlY3J5cHQoKSB7XG4gIGFzc2VydC5lcXVhbCh0aGlzLmJ1ZmZlck9mZiwgdGhpcy5ibG9ja1NpemUsICdOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCcpO1xuICB2YXIgb3V0ID0gbmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtcbiAgdGhpcy5fZmx1c2hCdWZmZXIob3V0LCAwKTtcblxuICByZXR1cm4gdGhpcy5fdW5wYWQob3V0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG52YXIgZGVzID0gcmVxdWlyZSgnLi4vZGVzJyk7XG52YXIgdXRpbHMgPSBkZXMudXRpbHM7XG52YXIgQ2lwaGVyID0gZGVzLkNpcGhlcjtcblxuZnVuY3Rpb24gREVTU3RhdGUoKSB7XG4gIHRoaXMudG1wID0gbmV3IEFycmF5KDIpO1xuICB0aGlzLmtleXMgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBERVMob3B0aW9ucykge1xuICBDaXBoZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB2YXIgc3RhdGUgPSBuZXcgREVTU3RhdGUoKTtcbiAgdGhpcy5fZGVzU3RhdGUgPSBzdGF0ZTtcblxuICB0aGlzLmRlcml2ZUtleXMoc3RhdGUsIG9wdGlvbnMua2V5KTtcbn1cbmluaGVyaXRzKERFUywgQ2lwaGVyKTtcbm1vZHVsZS5leHBvcnRzID0gREVTO1xuXG5ERVMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBERVMob3B0aW9ucyk7XG59O1xuXG52YXIgc2hpZnRUYWJsZSA9IFtcbiAgMSwgMSwgMiwgMiwgMiwgMiwgMiwgMixcbiAgMSwgMiwgMiwgMiwgMiwgMiwgMiwgMVxuXTtcblxuREVTLnByb3RvdHlwZS5kZXJpdmVLZXlzID0gZnVuY3Rpb24gZGVyaXZlS2V5cyhzdGF0ZSwga2V5KSB7XG4gIHN0YXRlLmtleXMgPSBuZXcgQXJyYXkoMTYgKiAyKTtcblxuICBhc3NlcnQuZXF1YWwoa2V5Lmxlbmd0aCwgdGhpcy5ibG9ja1NpemUsICdJbnZhbGlkIGtleSBsZW5ndGgnKTtcblxuICB2YXIga0wgPSB1dGlscy5yZWFkVUludDMyQkUoa2V5LCAwKTtcbiAgdmFyIGtSID0gdXRpbHMucmVhZFVJbnQzMkJFKGtleSwgNCk7XG5cbiAgdXRpbHMucGMxKGtMLCBrUiwgc3RhdGUudG1wLCAwKTtcbiAga0wgPSBzdGF0ZS50bXBbMF07XG4gIGtSID0gc3RhdGUudG1wWzFdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmtleXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgc2hpZnQgPSBzaGlmdFRhYmxlW2kgPj4+IDFdO1xuICAgIGtMID0gdXRpbHMucjI4c2hsKGtMLCBzaGlmdCk7XG4gICAga1IgPSB1dGlscy5yMjhzaGwoa1IsIHNoaWZ0KTtcbiAgICB1dGlscy5wYzIoa0wsIGtSLCBzdGF0ZS5rZXlzLCBpKTtcbiAgfVxufTtcblxuREVTLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShpbnAsIGluT2ZmLCBvdXQsIG91dE9mZikge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9kZXNTdGF0ZTtcblxuICB2YXIgbCA9IHV0aWxzLnJlYWRVSW50MzJCRShpbnAsIGluT2ZmKTtcbiAgdmFyIHIgPSB1dGlscy5yZWFkVUludDMyQkUoaW5wLCBpbk9mZiArIDQpO1xuXG4gIC8vIEluaXRpYWwgUGVybXV0YXRpb25cbiAgdXRpbHMuaXAobCwgciwgc3RhdGUudG1wLCAwKTtcbiAgbCA9IHN0YXRlLnRtcFswXTtcbiAgciA9IHN0YXRlLnRtcFsxXTtcblxuICBpZiAodGhpcy50eXBlID09PSAnZW5jcnlwdCcpXG4gICAgdGhpcy5fZW5jcnlwdChzdGF0ZSwgbCwgciwgc3RhdGUudG1wLCAwKTtcbiAgZWxzZVxuICAgIHRoaXMuX2RlY3J5cHQoc3RhdGUsIGwsIHIsIHN0YXRlLnRtcCwgMCk7XG5cbiAgbCA9IHN0YXRlLnRtcFswXTtcbiAgciA9IHN0YXRlLnRtcFsxXTtcblxuICB1dGlscy53cml0ZVVJbnQzMkJFKG91dCwgbCwgb3V0T2ZmKTtcbiAgdXRpbHMud3JpdGVVSW50MzJCRShvdXQsIHIsIG91dE9mZiArIDQpO1xufTtcblxuREVTLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gX3BhZChidWZmZXIsIG9mZikge1xuICB2YXIgdmFsdWUgPSBidWZmZXIubGVuZ3RoIC0gb2ZmO1xuICBmb3IgKHZhciBpID0gb2ZmOyBpIDwgYnVmZmVyLmxlbmd0aDsgaSsrKVxuICAgIGJ1ZmZlcltpXSA9IHZhbHVlO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuREVTLnByb3RvdHlwZS5fdW5wYWQgPSBmdW5jdGlvbiBfdW5wYWQoYnVmZmVyKSB7XG4gIHZhciBwYWQgPSBidWZmZXJbYnVmZmVyLmxlbmd0aCAtIDFdO1xuICBmb3IgKHZhciBpID0gYnVmZmVyLmxlbmd0aCAtIHBhZDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKylcbiAgICBhc3NlcnQuZXF1YWwoYnVmZmVyW2ldLCBwYWQpO1xuXG4gIHJldHVybiBidWZmZXIuc2xpY2UoMCwgYnVmZmVyLmxlbmd0aCAtIHBhZCk7XG59O1xuXG5ERVMucHJvdG90eXBlLl9lbmNyeXB0ID0gZnVuY3Rpb24gX2VuY3J5cHQoc3RhdGUsIGxTdGFydCwgclN0YXJ0LCBvdXQsIG9mZikge1xuICB2YXIgbCA9IGxTdGFydDtcbiAgdmFyIHIgPSByU3RhcnQ7XG5cbiAgLy8gQXBwbHkgZigpIHgxNiB0aW1lc1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmtleXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIga2V5TCA9IHN0YXRlLmtleXNbaV07XG4gICAgdmFyIGtleVIgPSBzdGF0ZS5rZXlzW2kgKyAxXTtcblxuICAgIC8vIGYociwgaylcbiAgICB1dGlscy5leHBhbmQociwgc3RhdGUudG1wLCAwKTtcblxuICAgIGtleUwgXj0gc3RhdGUudG1wWzBdO1xuICAgIGtleVIgXj0gc3RhdGUudG1wWzFdO1xuICAgIHZhciBzID0gdXRpbHMuc3Vic3RpdHV0ZShrZXlMLCBrZXlSKTtcbiAgICB2YXIgZiA9IHV0aWxzLnBlcm11dGUocyk7XG5cbiAgICB2YXIgdCA9IHI7XG4gICAgciA9IChsIF4gZikgPj4+IDA7XG4gICAgbCA9IHQ7XG4gIH1cblxuICAvLyBSZXZlcnNlIEluaXRpYWwgUGVybXV0YXRpb25cbiAgdXRpbHMucmlwKHIsIGwsIG91dCwgb2ZmKTtcbn07XG5cbkRFUy5wcm90b3R5cGUuX2RlY3J5cHQgPSBmdW5jdGlvbiBfZGVjcnlwdChzdGF0ZSwgbFN0YXJ0LCByU3RhcnQsIG91dCwgb2ZmKSB7XG4gIHZhciBsID0gclN0YXJ0O1xuICB2YXIgciA9IGxTdGFydDtcblxuICAvLyBBcHBseSBmKCkgeDE2IHRpbWVzXG4gIGZvciAodmFyIGkgPSBzdGF0ZS5rZXlzLmxlbmd0aCAtIDI7IGkgPj0gMDsgaSAtPSAyKSB7XG4gICAgdmFyIGtleUwgPSBzdGF0ZS5rZXlzW2ldO1xuICAgIHZhciBrZXlSID0gc3RhdGUua2V5c1tpICsgMV07XG5cbiAgICAvLyBmKHIsIGspXG4gICAgdXRpbHMuZXhwYW5kKGwsIHN0YXRlLnRtcCwgMCk7XG5cbiAgICBrZXlMIF49IHN0YXRlLnRtcFswXTtcbiAgICBrZXlSIF49IHN0YXRlLnRtcFsxXTtcbiAgICB2YXIgcyA9IHV0aWxzLnN1YnN0aXR1dGUoa2V5TCwga2V5Uik7XG4gICAgdmFyIGYgPSB1dGlscy5wZXJtdXRlKHMpO1xuXG4gICAgdmFyIHQgPSBsO1xuICAgIGwgPSAociBeIGYpID4+PiAwO1xuICAgIHIgPSB0O1xuICB9XG5cbiAgLy8gUmV2ZXJzZSBJbml0aWFsIFBlcm11dGF0aW9uXG4gIHV0aWxzLnJpcChsLCByLCBvdXQsIG9mZik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIGRlcyA9IHJlcXVpcmUoJy4uL2RlcycpO1xudmFyIENpcGhlciA9IGRlcy5DaXBoZXI7XG52YXIgREVTID0gZGVzLkRFUztcblxuZnVuY3Rpb24gRURFU3RhdGUodHlwZSwga2V5KSB7XG4gIGFzc2VydC5lcXVhbChrZXkubGVuZ3RoLCAyNCwgJ0ludmFsaWQga2V5IGxlbmd0aCcpO1xuXG4gIHZhciBrMSA9IGtleS5zbGljZSgwLCA4KTtcbiAgdmFyIGsyID0ga2V5LnNsaWNlKDgsIDE2KTtcbiAgdmFyIGszID0ga2V5LnNsaWNlKDE2LCAyNCk7XG5cbiAgaWYgKHR5cGUgPT09ICdlbmNyeXB0Jykge1xuICAgIHRoaXMuY2lwaGVycyA9IFtcbiAgICAgIERFUy5jcmVhdGUoeyB0eXBlOiAnZW5jcnlwdCcsIGtleTogazEgfSksXG4gICAgICBERVMuY3JlYXRlKHsgdHlwZTogJ2RlY3J5cHQnLCBrZXk6IGsyIH0pLFxuICAgICAgREVTLmNyZWF0ZSh7IHR5cGU6ICdlbmNyeXB0Jywga2V5OiBrMyB9KVxuICAgIF07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5jaXBoZXJzID0gW1xuICAgICAgREVTLmNyZWF0ZSh7IHR5cGU6ICdkZWNyeXB0Jywga2V5OiBrMyB9KSxcbiAgICAgIERFUy5jcmVhdGUoeyB0eXBlOiAnZW5jcnlwdCcsIGtleTogazIgfSksXG4gICAgICBERVMuY3JlYXRlKHsgdHlwZTogJ2RlY3J5cHQnLCBrZXk6IGsxIH0pXG4gICAgXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBFREUob3B0aW9ucykge1xuICBDaXBoZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICB2YXIgc3RhdGUgPSBuZXcgRURFU3RhdGUodGhpcy50eXBlLCB0aGlzLm9wdGlvbnMua2V5KTtcbiAgdGhpcy5fZWRlU3RhdGUgPSBzdGF0ZTtcbn1cbmluaGVyaXRzKEVERSwgQ2lwaGVyKTtcblxubW9kdWxlLmV4cG9ydHMgPSBFREU7XG5cbkVERS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEVERShvcHRpb25zKTtcbn07XG5cbkVERS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUoaW5wLCBpbk9mZiwgb3V0LCBvdXRPZmYpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fZWRlU3RhdGU7XG5cbiAgc3RhdGUuY2lwaGVyc1swXS5fdXBkYXRlKGlucCwgaW5PZmYsIG91dCwgb3V0T2ZmKTtcbiAgc3RhdGUuY2lwaGVyc1sxXS5fdXBkYXRlKG91dCwgb3V0T2ZmLCBvdXQsIG91dE9mZik7XG4gIHN0YXRlLmNpcGhlcnNbMl0uX3VwZGF0ZShvdXQsIG91dE9mZiwgb3V0LCBvdXRPZmYpO1xufTtcblxuRURFLnByb3RvdHlwZS5fcGFkID0gREVTLnByb3RvdHlwZS5fcGFkO1xuRURFLnByb3RvdHlwZS5fdW5wYWQgPSBERVMucHJvdG90eXBlLl91bnBhZDtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUoYnl0ZXMsIG9mZikge1xuICB2YXIgcmVzID0gIChieXRlc1swICsgb2ZmXSA8PCAyNCkgfFxuICAgICAgICAgICAgIChieXRlc1sxICsgb2ZmXSA8PCAxNikgfFxuICAgICAgICAgICAgIChieXRlc1syICsgb2ZmXSA8PCA4KSB8XG4gICAgICAgICAgICAgYnl0ZXNbMyArIG9mZl07XG4gIHJldHVybiByZXMgPj4+IDA7XG59O1xuXG5leHBvcnRzLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFKGJ5dGVzLCB2YWx1ZSwgb2ZmKSB7XG4gIGJ5dGVzWzAgKyBvZmZdID0gdmFsdWUgPj4+IDI0O1xuICBieXRlc1sxICsgb2ZmXSA9ICh2YWx1ZSA+Pj4gMTYpICYgMHhmZjtcbiAgYnl0ZXNbMiArIG9mZl0gPSAodmFsdWUgPj4+IDgpICYgMHhmZjtcbiAgYnl0ZXNbMyArIG9mZl0gPSB2YWx1ZSAmIDB4ZmY7XG59O1xuXG5leHBvcnRzLmlwID0gZnVuY3Rpb24gaXAoaW5MLCBpblIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIGZvciAodmFyIGkgPSA2OyBpID49IDA7IGkgLT0gMikge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICAgIG91dEwgPDw9IDE7XG4gICAgICBvdXRMIHw9IChpblIgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluTCA+Pj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSA2OyBpID49IDA7IGkgLT0gMikge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IDI1OyBqICs9IDgpIHtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpblIgPj4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gMjU7IGogKz0gOCkge1xuICAgICAgb3V0UiA8PD0gMTtcbiAgICAgIG91dFIgfD0gKGluTCA+Pj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuXG4gIG91dFtvZmYgKyAwXSA9IG91dEwgPj4+IDA7XG4gIG91dFtvZmYgKyAxXSA9IG91dFIgPj4+IDA7XG59O1xuXG5leHBvcnRzLnJpcCA9IGZ1bmN0aW9uIHJpcChpbkwsIGluUiwgb3V0LCBvZmYpIHtcbiAgdmFyIG91dEwgPSAwO1xuICB2YXIgb3V0UiA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMjQ7IGogPj0gMDsgaiAtPSA4KSB7XG4gICAgICBvdXRMIDw8PSAxO1xuICAgICAgb3V0TCB8PSAoaW5SID4+PiAoaiArIGkpKSAmIDE7XG4gICAgICBvdXRMIDw8PSAxO1xuICAgICAgb3V0TCB8PSAoaW5MID4+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICB9XG4gIGZvciAodmFyIGkgPSA0OyBpIDwgODsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDI0OyBqID49IDA7IGogLT0gOCkge1xuICAgICAgb3V0UiA8PD0gMTtcbiAgICAgIG91dFIgfD0gKGluUiA+Pj4gKGogKyBpKSkgJiAxO1xuICAgICAgb3V0UiA8PD0gMTtcbiAgICAgIG91dFIgfD0gKGluTCA+Pj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgfVxuXG4gIG91dFtvZmYgKyAwXSA9IG91dEwgPj4+IDA7XG4gIG91dFtvZmYgKyAxXSA9IG91dFIgPj4+IDA7XG59O1xuXG5leHBvcnRzLnBjMSA9IGZ1bmN0aW9uIHBjMShpbkwsIGluUiwgb3V0LCBvZmYpIHtcbiAgdmFyIG91dEwgPSAwO1xuICB2YXIgb3V0UiA9IDA7XG5cbiAgLy8gNywgMTUsIDIzLCAzMSwgMzksIDQ3LCA1NSwgNjNcbiAgLy8gNiwgMTQsIDIyLCAzMCwgMzksIDQ3LCA1NSwgNjNcbiAgLy8gNSwgMTMsIDIxLCAyOSwgMzksIDQ3LCA1NSwgNjNcbiAgLy8gNCwgMTIsIDIwLCAyOFxuICBmb3IgKHZhciBpID0gNzsgaSA+PSA1OyBpLS0pIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgICBvdXRMIDw8PSAxO1xuICAgICAgb3V0TCB8PSAoaW5SID4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgICAgb3V0TCA8PD0gMTtcbiAgICAgIG91dEwgfD0gKGluTCA+PiAoaiArIGkpKSAmIDE7XG4gICAgfVxuICB9XG4gIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICBvdXRMIDw8PSAxO1xuICAgIG91dEwgfD0gKGluUiA+PiAoaiArIGkpKSAmIDE7XG4gIH1cblxuICAvLyAxLCA5LCAxNywgMjUsIDMzLCA0MSwgNDksIDU3XG4gIC8vIDIsIDEwLCAxOCwgMjYsIDM0LCA0MiwgNTAsIDU4XG4gIC8vIDMsIDExLCAxOSwgMjcsIDM1LCA0MywgNTEsIDU5XG4gIC8vIDM2LCA0NCwgNTIsIDYwXG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IDM7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDI0OyBqICs9IDgpIHtcbiAgICAgIG91dFIgPDw9IDE7XG4gICAgICBvdXRSIHw9IChpblIgPj4gKGogKyBpKSkgJiAxO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8PSAyNDsgaiArPSA4KSB7XG4gICAgICBvdXRSIDw8PSAxO1xuICAgICAgb3V0UiB8PSAoaW5MID4+IChqICsgaSkpICYgMTtcbiAgICB9XG4gIH1cbiAgZm9yICh2YXIgaiA9IDA7IGogPD0gMjQ7IGogKz0gOCkge1xuICAgIG91dFIgPDw9IDE7XG4gICAgb3V0UiB8PSAoaW5MID4+IChqICsgaSkpICYgMTtcbiAgfVxuXG4gIG91dFtvZmYgKyAwXSA9IG91dEwgPj4+IDA7XG4gIG91dFtvZmYgKyAxXSA9IG91dFIgPj4+IDA7XG59O1xuXG5leHBvcnRzLnIyOHNobCA9IGZ1bmN0aW9uIHIyOHNobChudW0sIHNoaWZ0KSB7XG4gIHJldHVybiAoKG51bSA8PCBzaGlmdCkgJiAweGZmZmZmZmYpIHwgKG51bSA+Pj4gKDI4IC0gc2hpZnQpKTtcbn07XG5cbnZhciBwYzJ0YWJsZSA9IFtcbiAgLy8gaW5MID0+IG91dExcbiAgMTQsIDExLCAxNywgNCwgMjcsIDIzLCAyNSwgMCxcbiAgMTMsIDIyLCA3LCAxOCwgNSwgOSwgMTYsIDI0LFxuICAyLCAyMCwgMTIsIDIxLCAxLCA4LCAxNSwgMjYsXG5cbiAgLy8gaW5SID0+IG91dFJcbiAgMTUsIDQsIDI1LCAxOSwgOSwgMSwgMjYsIDE2LFxuICA1LCAxMSwgMjMsIDgsIDEyLCA3LCAxNywgMCxcbiAgMjIsIDMsIDEwLCAxNCwgNiwgMjAsIDI3LCAyNFxuXTtcblxuZXhwb3J0cy5wYzIgPSBmdW5jdGlvbiBwYzIoaW5MLCBpblIsIG91dCwgb2ZmKSB7XG4gIHZhciBvdXRMID0gMDtcbiAgdmFyIG91dFIgPSAwO1xuXG4gIHZhciBsZW4gPSBwYzJ0YWJsZS5sZW5ndGggPj4+IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBvdXRMIDw8PSAxO1xuICAgIG91dEwgfD0gKGluTCA+Pj4gcGMydGFibGVbaV0pICYgMHgxO1xuICB9XG4gIGZvciAodmFyIGkgPSBsZW47IGkgPCBwYzJ0YWJsZS5sZW5ndGg7IGkrKykge1xuICAgIG91dFIgPDw9IDE7XG4gICAgb3V0UiB8PSAoaW5SID4+PiBwYzJ0YWJsZVtpXSkgJiAweDE7XG4gIH1cblxuICBvdXRbb2ZmICsgMF0gPSBvdXRMID4+PiAwO1xuICBvdXRbb2ZmICsgMV0gPSBvdXRSID4+PiAwO1xufTtcblxuZXhwb3J0cy5leHBhbmQgPSBmdW5jdGlvbiBleHBhbmQociwgb3V0LCBvZmYpIHtcbiAgdmFyIG91dEwgPSAwO1xuICB2YXIgb3V0UiA9IDA7XG5cbiAgb3V0TCA9ICgociAmIDEpIDw8IDUpIHwgKHIgPj4+IDI3KTtcbiAgZm9yICh2YXIgaSA9IDIzOyBpID49IDE1OyBpIC09IDQpIHtcbiAgICBvdXRMIDw8PSA2O1xuICAgIG91dEwgfD0gKHIgPj4+IGkpICYgMHgzZjtcbiAgfVxuICBmb3IgKHZhciBpID0gMTE7IGkgPj0gMzsgaSAtPSA0KSB7XG4gICAgb3V0UiB8PSAociA+Pj4gaSkgJiAweDNmO1xuICAgIG91dFIgPDw9IDY7XG4gIH1cbiAgb3V0UiB8PSAoKHIgJiAweDFmKSA8PCAxKSB8IChyID4+PiAzMSk7XG5cbiAgb3V0W29mZiArIDBdID0gb3V0TCA+Pj4gMDtcbiAgb3V0W29mZiArIDFdID0gb3V0UiA+Pj4gMDtcbn07XG5cbnZhciBzVGFibGUgPSBbXG4gIDE0LCAwLCA0LCAxNSwgMTMsIDcsIDEsIDQsIDIsIDE0LCAxNSwgMiwgMTEsIDEzLCA4LCAxLFxuICAzLCAxMCwgMTAsIDYsIDYsIDEyLCAxMiwgMTEsIDUsIDksIDksIDUsIDAsIDMsIDcsIDgsXG4gIDQsIDE1LCAxLCAxMiwgMTQsIDgsIDgsIDIsIDEzLCA0LCA2LCA5LCAyLCAxLCAxMSwgNyxcbiAgMTUsIDUsIDEyLCAxMSwgOSwgMywgNywgMTQsIDMsIDEwLCAxMCwgMCwgNSwgNiwgMCwgMTMsXG5cbiAgMTUsIDMsIDEsIDEzLCA4LCA0LCAxNCwgNywgNiwgMTUsIDExLCAyLCAzLCA4LCA0LCAxNCxcbiAgOSwgMTIsIDcsIDAsIDIsIDEsIDEzLCAxMCwgMTIsIDYsIDAsIDksIDUsIDExLCAxMCwgNSxcbiAgMCwgMTMsIDE0LCA4LCA3LCAxMCwgMTEsIDEsIDEwLCAzLCA0LCAxNSwgMTMsIDQsIDEsIDIsXG4gIDUsIDExLCA4LCA2LCAxMiwgNywgNiwgMTIsIDksIDAsIDMsIDUsIDIsIDE0LCAxNSwgOSxcblxuICAxMCwgMTMsIDAsIDcsIDksIDAsIDE0LCA5LCA2LCAzLCAzLCA0LCAxNSwgNiwgNSwgMTAsXG4gIDEsIDIsIDEzLCA4LCAxMiwgNSwgNywgMTQsIDExLCAxMiwgNCwgMTEsIDIsIDE1LCA4LCAxLFxuICAxMywgMSwgNiwgMTAsIDQsIDEzLCA5LCAwLCA4LCA2LCAxNSwgOSwgMywgOCwgMCwgNyxcbiAgMTEsIDQsIDEsIDE1LCAyLCAxNCwgMTIsIDMsIDUsIDExLCAxMCwgNSwgMTQsIDIsIDcsIDEyLFxuXG4gIDcsIDEzLCAxMywgOCwgMTQsIDExLCAzLCA1LCAwLCA2LCA2LCAxNSwgOSwgMCwgMTAsIDMsXG4gIDEsIDQsIDIsIDcsIDgsIDIsIDUsIDEyLCAxMSwgMSwgMTIsIDEwLCA0LCAxNCwgMTUsIDksXG4gIDEwLCAzLCA2LCAxNSwgOSwgMCwgMCwgNiwgMTIsIDEwLCAxMSwgMSwgNywgMTMsIDEzLCA4LFxuICAxNSwgOSwgMSwgNCwgMywgNSwgMTQsIDExLCA1LCAxMiwgMiwgNywgOCwgMiwgNCwgMTQsXG5cbiAgMiwgMTQsIDEyLCAxMSwgNCwgMiwgMSwgMTIsIDcsIDQsIDEwLCA3LCAxMSwgMTMsIDYsIDEsXG4gIDgsIDUsIDUsIDAsIDMsIDE1LCAxNSwgMTAsIDEzLCAzLCAwLCA5LCAxNCwgOCwgOSwgNixcbiAgNCwgMTEsIDIsIDgsIDEsIDEyLCAxMSwgNywgMTAsIDEsIDEzLCAxNCwgNywgMiwgOCwgMTMsXG4gIDE1LCA2LCA5LCAxNSwgMTIsIDAsIDUsIDksIDYsIDEwLCAzLCA0LCAwLCA1LCAxNCwgMyxcblxuICAxMiwgMTAsIDEsIDE1LCAxMCwgNCwgMTUsIDIsIDksIDcsIDIsIDEyLCA2LCA5LCA4LCA1LFxuICAwLCA2LCAxMywgMSwgMywgMTMsIDQsIDE0LCAxNCwgMCwgNywgMTEsIDUsIDMsIDExLCA4LFxuICA5LCA0LCAxNCwgMywgMTUsIDIsIDUsIDEyLCAyLCA5LCA4LCA1LCAxMiwgMTUsIDMsIDEwLFxuICA3LCAxMSwgMCwgMTQsIDQsIDEsIDEwLCA3LCAxLCA2LCAxMywgMCwgMTEsIDgsIDYsIDEzLFxuXG4gIDQsIDEzLCAxMSwgMCwgMiwgMTEsIDE0LCA3LCAxNSwgNCwgMCwgOSwgOCwgMSwgMTMsIDEwLFxuICAzLCAxNCwgMTIsIDMsIDksIDUsIDcsIDEyLCA1LCAyLCAxMCwgMTUsIDYsIDgsIDEsIDYsXG4gIDEsIDYsIDQsIDExLCAxMSwgMTMsIDEzLCA4LCAxMiwgMSwgMywgNCwgNywgMTAsIDE0LCA3LFxuICAxMCwgOSwgMTUsIDUsIDYsIDAsIDgsIDE1LCAwLCAxNCwgNSwgMiwgOSwgMywgMiwgMTIsXG5cbiAgMTMsIDEsIDIsIDE1LCA4LCAxMywgNCwgOCwgNiwgMTAsIDE1LCAzLCAxMSwgNywgMSwgNCxcbiAgMTAsIDEyLCA5LCA1LCAzLCA2LCAxNCwgMTEsIDUsIDAsIDAsIDE0LCAxMiwgOSwgNywgMixcbiAgNywgMiwgMTEsIDEsIDQsIDE0LCAxLCA3LCA5LCA0LCAxMiwgMTAsIDE0LCA4LCAyLCAxMyxcbiAgMCwgMTUsIDYsIDEyLCAxMCwgOSwgMTMsIDAsIDE1LCAzLCAzLCA1LCA1LCA2LCA4LCAxMVxuXTtcblxuZXhwb3J0cy5zdWJzdGl0dXRlID0gZnVuY3Rpb24gc3Vic3RpdHV0ZShpbkwsIGluUikge1xuICB2YXIgb3V0ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICB2YXIgYiA9IChpbkwgPj4+ICgxOCAtIGkgKiA2KSkgJiAweDNmO1xuICAgIHZhciBzYiA9IHNUYWJsZVtpICogMHg0MCArIGJdO1xuXG4gICAgb3V0IDw8PSA0O1xuICAgIG91dCB8PSBzYjtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIHZhciBiID0gKGluUiA+Pj4gKDE4IC0gaSAqIDYpKSAmIDB4M2Y7XG4gICAgdmFyIHNiID0gc1RhYmxlWzQgKiAweDQwICsgaSAqIDB4NDAgKyBiXTtcblxuICAgIG91dCA8PD0gNDtcbiAgICBvdXQgfD0gc2I7XG4gIH1cbiAgcmV0dXJuIG91dCA+Pj4gMDtcbn07XG5cbnZhciBwZXJtdXRlVGFibGUgPSBbXG4gIDE2LCAyNSwgMTIsIDExLCAzLCAyMCwgNCwgMTUsIDMxLCAxNywgOSwgNiwgMjcsIDE0LCAxLCAyMixcbiAgMzAsIDI0LCA4LCAxOCwgMCwgNSwgMjksIDIzLCAxMywgMTksIDIsIDI2LCAxMCwgMjEsIDI4LCA3XG5dO1xuXG5leHBvcnRzLnBlcm11dGUgPSBmdW5jdGlvbiBwZXJtdXRlKG51bSkge1xuICB2YXIgb3V0ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwZXJtdXRlVGFibGUubGVuZ3RoOyBpKyspIHtcbiAgICBvdXQgPDw9IDE7XG4gICAgb3V0IHw9IChudW0gPj4+IHBlcm11dGVUYWJsZVtpXSkgJiAweDE7XG4gIH1cbiAgcmV0dXJuIG91dCA+Pj4gMDtcbn07XG5cbmV4cG9ydHMucGFkU3BsaXQgPSBmdW5jdGlvbiBwYWRTcGxpdChudW0sIHNpemUsIGdyb3VwKSB7XG4gIHZhciBzdHIgPSBudW0udG9TdHJpbmcoMik7XG4gIHdoaWxlIChzdHIubGVuZ3RoIDwgc2l6ZSlcbiAgICBzdHIgPSAnMCcgKyBzdHI7XG5cbiAgdmFyIG91dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkgKz0gZ3JvdXApXG4gICAgb3V0LnB1c2goc3RyLnNsaWNlKGksIGkgKyBncm91cCkpO1xuICByZXR1cm4gb3V0LmpvaW4oJyAnKTtcbn07XG4iLCJ2YXIgZ2VuZXJhdGVQcmltZSA9IHJlcXVpcmUoJy4vbGliL2dlbmVyYXRlUHJpbWUnKVxudmFyIHByaW1lcyA9IHJlcXVpcmUoJy4vbGliL3ByaW1lcy5qc29uJylcblxudmFyIERIID0gcmVxdWlyZSgnLi9saWIvZGgnKVxuXG5mdW5jdGlvbiBnZXREaWZmaWVIZWxsbWFuIChtb2QpIHtcbiAgdmFyIHByaW1lID0gbmV3IEJ1ZmZlcihwcmltZXNbbW9kXS5wcmltZSwgJ2hleCcpXG4gIHZhciBnZW4gPSBuZXcgQnVmZmVyKHByaW1lc1ttb2RdLmdlbiwgJ2hleCcpXG5cbiAgcmV0dXJuIG5ldyBESChwcmltZSwgZ2VuKVxufVxuXG52YXIgRU5DT0RJTkdTID0ge1xuICAnYmluYXJ5JzogdHJ1ZSwgJ2hleCc6IHRydWUsICdiYXNlNjQnOiB0cnVlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURpZmZpZUhlbGxtYW4gKHByaW1lLCBlbmMsIGdlbmVyYXRvciwgZ2VuYykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGVuYykgfHwgRU5DT0RJTkdTW2VuY10gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjcmVhdGVEaWZmaWVIZWxsbWFuKHByaW1lLCAnYmluYXJ5JywgZW5jLCBnZW5lcmF0b3IpXG4gIH1cblxuICBlbmMgPSBlbmMgfHwgJ2JpbmFyeSdcbiAgZ2VuYyA9IGdlbmMgfHwgJ2JpbmFyeSdcbiAgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yIHx8IG5ldyBCdWZmZXIoWzJdKVxuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGdlbmVyYXRvcikpIHtcbiAgICBnZW5lcmF0b3IgPSBuZXcgQnVmZmVyKGdlbmVyYXRvciwgZ2VuYylcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJpbWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIG5ldyBESChnZW5lcmF0ZVByaW1lKHByaW1lLCBnZW5lcmF0b3IpLCBnZW5lcmF0b3IsIHRydWUpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihwcmltZSkpIHtcbiAgICBwcmltZSA9IG5ldyBCdWZmZXIocHJpbWUsIGVuYylcbiAgfVxuXG4gIHJldHVybiBuZXcgREgocHJpbWUsIGdlbmVyYXRvciwgdHJ1ZSlcbn1cblxuZXhwb3J0cy5EaWZmaWVIZWxsbWFuR3JvdXAgPSBleHBvcnRzLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCA9IGV4cG9ydHMuZ2V0RGlmZmllSGVsbG1hbiA9IGdldERpZmZpZUhlbGxtYW5cbmV4cG9ydHMuY3JlYXRlRGlmZmllSGVsbG1hbiA9IGV4cG9ydHMuRGlmZmllSGVsbG1hbiA9IGNyZWF0ZURpZmZpZUhlbGxtYW5cbiIsInZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgTWlsbGVyUmFiaW4gPSByZXF1aXJlKCdtaWxsZXItcmFiaW4nKTtcbnZhciBtaWxsZXJSYWJpbiA9IG5ldyBNaWxsZXJSYWJpbigpO1xudmFyIFRXRU5UWUZPVVIgPSBuZXcgQk4oMjQpO1xudmFyIEVMRVZFTiA9IG5ldyBCTigxMSk7XG52YXIgVEVOID0gbmV3IEJOKDEwKTtcbnZhciBUSFJFRSA9IG5ldyBCTigzKTtcbnZhciBTRVZFTiA9IG5ldyBCTig3KTtcbnZhciBwcmltZXMgPSByZXF1aXJlKCcuL2dlbmVyYXRlUHJpbWUnKTtcbnZhciByYW5kb21CeXRlcyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IERIO1xuXG5mdW5jdGlvbiBzZXRQdWJsaWNLZXkocHViLCBlbmMpIHtcbiAgZW5jID0gZW5jIHx8ICd1dGY4JztcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocHViKSkge1xuICAgIHB1YiA9IG5ldyBCdWZmZXIocHViLCBlbmMpO1xuICB9XG4gIHRoaXMuX3B1YiA9IG5ldyBCTihwdWIpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gc2V0UHJpdmF0ZUtleShwcml2LCBlbmMpIHtcbiAgZW5jID0gZW5jIHx8ICd1dGY4JztcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocHJpdikpIHtcbiAgICBwcml2ID0gbmV3IEJ1ZmZlcihwcml2LCBlbmMpO1xuICB9XG4gIHRoaXMuX3ByaXYgPSBuZXcgQk4ocHJpdik7XG4gIHJldHVybiB0aGlzO1xufVxuXG52YXIgcHJpbWVDYWNoZSA9IHt9O1xuZnVuY3Rpb24gY2hlY2tQcmltZShwcmltZSwgZ2VuZXJhdG9yKSB7XG4gIHZhciBnZW4gPSBnZW5lcmF0b3IudG9TdHJpbmcoJ2hleCcpO1xuICB2YXIgaGV4ID0gW2dlbiwgcHJpbWUudG9TdHJpbmcoMTYpXS5qb2luKCdfJyk7XG4gIGlmIChoZXggaW4gcHJpbWVDYWNoZSkge1xuICAgIHJldHVybiBwcmltZUNhY2hlW2hleF07XG4gIH1cbiAgdmFyIGVycm9yID0gMDtcblxuICBpZiAocHJpbWUuaXNFdmVuKCkgfHxcbiAgICAhcHJpbWVzLnNpbXBsZVNpZXZlIHx8XG4gICAgIXByaW1lcy5mZXJtYXRUZXN0KHByaW1lKSB8fFxuICAgICFtaWxsZXJSYWJpbi50ZXN0KHByaW1lKSkge1xuICAgIC8vbm90IGEgcHJpbWUgc28gKzFcbiAgICBlcnJvciArPSAxO1xuXG4gICAgaWYgKGdlbiA9PT0gJzAyJyB8fCBnZW4gPT09ICcwNScpIHtcbiAgICAgIC8vIHdlJ2QgYmUgYWJsZSB0byBjaGVjayB0aGUgZ2VuZXJhdG9yXG4gICAgICAvLyBpdCB3b3VsZCBmYWlsIHNvICs4XG4gICAgICBlcnJvciArPSA4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvL3dlIHdvdWxkbid0IGJlIGFibGUgdG8gdGVzdCB0aGUgZ2VuZXJhdG9yXG4gICAgICAvLyBzbyArNFxuICAgICAgZXJyb3IgKz0gNDtcbiAgICB9XG4gICAgcHJpbWVDYWNoZVtoZXhdID0gZXJyb3I7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG4gIGlmICghbWlsbGVyUmFiaW4udGVzdChwcmltZS5zaHJuKDEpKSkge1xuICAgIC8vbm90IGEgc2FmZSBwcmltZVxuICAgIGVycm9yICs9IDI7XG4gIH1cbiAgdmFyIHJlbTtcbiAgc3dpdGNoIChnZW4pIHtcbiAgICBjYXNlICcwMic6XG4gICAgICBpZiAocHJpbWUubW9kKFRXRU5UWUZPVVIpLmNtcChFTEVWRU4pKSB7XG4gICAgICAgIC8vIHVuc3VpZGFibGUgZ2VuZXJhdG9yXG4gICAgICAgIGVycm9yICs9IDg7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICcwNSc6XG4gICAgICByZW0gPSBwcmltZS5tb2QoVEVOKTtcbiAgICAgIGlmIChyZW0uY21wKFRIUkVFKSAmJiByZW0uY21wKFNFVkVOKSkge1xuICAgICAgICAvLyBwcmltZSBtb2QgMTAgbmVlZHMgdG8gZXF1YWwgMyBvciA3XG4gICAgICAgIGVycm9yICs9IDg7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZXJyb3IgKz0gNDtcbiAgfVxuICBwcmltZUNhY2hlW2hleF0gPSBlcnJvcjtcbiAgcmV0dXJuIGVycm9yO1xufVxuXG5mdW5jdGlvbiBESChwcmltZSwgZ2VuZXJhdG9yLCBtYWxsZWFibGUpIHtcbiAgdGhpcy5zZXRHZW5lcmF0b3IoZ2VuZXJhdG9yKTtcbiAgdGhpcy5fX3ByaW1lID0gbmV3IEJOKHByaW1lKTtcbiAgdGhpcy5fcHJpbWUgPSBCTi5tb250KHRoaXMuX19wcmltZSk7XG4gIHRoaXMuX3ByaW1lTGVuID0gcHJpbWUubGVuZ3RoO1xuICB0aGlzLl9wdWIgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3ByaXYgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3ByaW1lQ29kZSA9IHVuZGVmaW5lZDtcbiAgaWYgKG1hbGxlYWJsZSkge1xuICAgIHRoaXMuc2V0UHVibGljS2V5ID0gc2V0UHVibGljS2V5O1xuICAgIHRoaXMuc2V0UHJpdmF0ZUtleSA9IHNldFByaXZhdGVLZXk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fcHJpbWVDb2RlID0gODtcbiAgfVxufVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERILnByb3RvdHlwZSwgJ3ZlcmlmeUVycm9yJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3ByaW1lQ29kZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuX3ByaW1lQ29kZSA9IGNoZWNrUHJpbWUodGhpcy5fX3ByaW1lLCB0aGlzLl9fZ2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3ByaW1lQ29kZTtcbiAgfVxufSk7XG5ESC5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuX3ByaXYpIHtcbiAgICB0aGlzLl9wcml2ID0gbmV3IEJOKHJhbmRvbUJ5dGVzKHRoaXMuX3ByaW1lTGVuKSk7XG4gIH1cbiAgdGhpcy5fcHViID0gdGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpO1xuICByZXR1cm4gdGhpcy5nZXRQdWJsaWNLZXkoKTtcbn07XG5cbkRILnByb3RvdHlwZS5jb21wdXRlU2VjcmV0ID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gIG90aGVyID0gbmV3IEJOKG90aGVyKTtcbiAgb3RoZXIgPSBvdGhlci50b1JlZCh0aGlzLl9wcmltZSk7XG4gIHZhciBzZWNyZXQgPSBvdGhlci5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpO1xuICB2YXIgb3V0ID0gbmV3IEJ1ZmZlcihzZWNyZXQudG9BcnJheSgpKTtcbiAgdmFyIHByaW1lID0gdGhpcy5nZXRQcmltZSgpO1xuICBpZiAob3V0Lmxlbmd0aCA8IHByaW1lLmxlbmd0aCkge1xuICAgIHZhciBmcm9udCA9IG5ldyBCdWZmZXIocHJpbWUubGVuZ3RoIC0gb3V0Lmxlbmd0aCk7XG4gICAgZnJvbnQuZmlsbCgwKTtcbiAgICBvdXQgPSBCdWZmZXIuY29uY2F0KFtmcm9udCwgb3V0XSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG5cbkRILnByb3RvdHlwZS5nZXRQdWJsaWNLZXkgPSBmdW5jdGlvbiBnZXRQdWJsaWNLZXkoZW5jKSB7XG4gIHJldHVybiBmb3JtYXRSZXR1cm5WYWx1ZSh0aGlzLl9wdWIsIGVuYyk7XG59O1xuXG5ESC5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleSA9IGZ1bmN0aW9uIGdldFByaXZhdGVLZXkoZW5jKSB7XG4gIHJldHVybiBmb3JtYXRSZXR1cm5WYWx1ZSh0aGlzLl9wcml2LCBlbmMpO1xufTtcblxuREgucHJvdG90eXBlLmdldFByaW1lID0gZnVuY3Rpb24gKGVuYykge1xuICByZXR1cm4gZm9ybWF0UmV0dXJuVmFsdWUodGhpcy5fX3ByaW1lLCBlbmMpO1xufTtcblxuREgucHJvdG90eXBlLmdldEdlbmVyYXRvciA9IGZ1bmN0aW9uIChlbmMpIHtcbiAgcmV0dXJuIGZvcm1hdFJldHVyblZhbHVlKHRoaXMuX2dlbiwgZW5jKTtcbn07XG5cbkRILnByb3RvdHlwZS5zZXRHZW5lcmF0b3IgPSBmdW5jdGlvbiAoZ2VuLCBlbmMpIHtcbiAgZW5jID0gZW5jIHx8ICd1dGY4JztcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZ2VuKSkge1xuICAgIGdlbiA9IG5ldyBCdWZmZXIoZ2VuLCBlbmMpO1xuICB9XG4gIHRoaXMuX19nZW4gPSBnZW47XG4gIHRoaXMuX2dlbiA9IG5ldyBCTihnZW4pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGZvcm1hdFJldHVyblZhbHVlKGJuLCBlbmMpIHtcbiAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoYm4udG9BcnJheSgpKTtcbiAgaWYgKCFlbmMpIHtcbiAgICByZXR1cm4gYnVmO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBidWYudG9TdHJpbmcoZW5jKTtcbiAgfVxufVxuIiwidmFyIHJhbmRvbUJ5dGVzID0gcmVxdWlyZSgncmFuZG9tYnl0ZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZmluZFByaW1lO1xuZmluZFByaW1lLnNpbXBsZVNpZXZlID0gc2ltcGxlU2lldmU7XG5maW5kUHJpbWUuZmVybWF0VGVzdCA9IGZlcm1hdFRlc3Q7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIFRXRU5UWUZPVVIgPSBuZXcgQk4oMjQpO1xudmFyIE1pbGxlclJhYmluID0gcmVxdWlyZSgnbWlsbGVyLXJhYmluJyk7XG52YXIgbWlsbGVyUmFiaW4gPSBuZXcgTWlsbGVyUmFiaW4oKTtcbnZhciBPTkUgPSBuZXcgQk4oMSk7XG52YXIgVFdPID0gbmV3IEJOKDIpO1xudmFyIEZJVkUgPSBuZXcgQk4oNSk7XG52YXIgU0lYVEVFTiA9IG5ldyBCTigxNik7XG52YXIgRUlHSFQgPSBuZXcgQk4oOCk7XG52YXIgVEVOID0gbmV3IEJOKDEwKTtcbnZhciBUSFJFRSA9IG5ldyBCTigzKTtcbnZhciBTRVZFTiA9IG5ldyBCTig3KTtcbnZhciBFTEVWRU4gPSBuZXcgQk4oMTEpO1xudmFyIEZPVVIgPSBuZXcgQk4oNCk7XG52YXIgVFdFTFZFID0gbmV3IEJOKDEyKTtcbnZhciBwcmltZXMgPSBudWxsO1xuXG5mdW5jdGlvbiBfZ2V0UHJpbWVzKCkge1xuICBpZiAocHJpbWVzICE9PSBudWxsKVxuICAgIHJldHVybiBwcmltZXM7XG5cbiAgdmFyIGxpbWl0ID0gMHgxMDAwMDA7XG4gIHZhciByZXMgPSBbXTtcbiAgcmVzWzBdID0gMjtcbiAgZm9yICh2YXIgaSA9IDEsIGsgPSAzOyBrIDwgbGltaXQ7IGsgKz0gMikge1xuICAgIHZhciBzcXJ0ID0gTWF0aC5jZWlsKE1hdGguc3FydChrKSk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICYmIHJlc1tqXSA8PSBzcXJ0OyBqKyspXG4gICAgICBpZiAoayAlIHJlc1tqXSA9PT0gMClcbiAgICAgICAgYnJlYWs7XG5cbiAgICBpZiAoaSAhPT0gaiAmJiByZXNbal0gPD0gc3FydClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgcmVzW2krK10gPSBrO1xuICB9XG4gIHByaW1lcyA9IHJlcztcbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gc2ltcGxlU2lldmUocCkge1xuICB2YXIgcHJpbWVzID0gX2dldFByaW1lcygpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJpbWVzLmxlbmd0aDsgaSsrKVxuICAgIGlmIChwLm1vZG4ocHJpbWVzW2ldKSA9PT0gMCkge1xuICAgICAgaWYgKHAuY21wbihwcmltZXNbaV0pID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZmVybWF0VGVzdChwKSB7XG4gIHZhciByZWQgPSBCTi5tb250KHApO1xuICByZXR1cm4gVFdPLnRvUmVkKHJlZCkucmVkUG93KHAuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSkgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGZpbmRQcmltZShiaXRzLCBnZW4pIHtcbiAgaWYgKGJpdHMgPCAxNikge1xuICAgIC8vIHRoaXMgaXMgd2hhdCBvcGVuc3NsIGRvZXNcbiAgICBpZiAoZ2VuID09PSAyIHx8IGdlbiA9PT0gNSkge1xuICAgICAgcmV0dXJuIG5ldyBCTihbMHg4YywgMHg3Yl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IEJOKFsweDhjLCAweDI3XSk7XG4gICAgfVxuICB9XG4gIGdlbiA9IG5ldyBCTihnZW4pO1xuXG4gIHZhciBudW0sIG4yO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbnVtID0gbmV3IEJOKHJhbmRvbUJ5dGVzKE1hdGguY2VpbChiaXRzIC8gOCkpKTtcbiAgICB3aGlsZSAobnVtLmJpdExlbmd0aCgpID4gYml0cykge1xuICAgICAgbnVtLmlzaHJuKDEpO1xuICAgIH1cbiAgICBpZiAobnVtLmlzRXZlbigpKSB7XG4gICAgICBudW0uaWFkZChPTkUpO1xuICAgIH1cbiAgICBpZiAoIW51bS50ZXN0bigxKSkge1xuICAgICAgbnVtLmlhZGQoVFdPKTtcbiAgICB9XG4gICAgaWYgKCFnZW4uY21wKFRXTykpIHtcbiAgICAgIHdoaWxlIChudW0ubW9kKFRXRU5UWUZPVVIpLmNtcChFTEVWRU4pKSB7XG4gICAgICAgIG51bS5pYWRkKEZPVVIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWdlbi5jbXAoRklWRSkpIHtcbiAgICAgIHdoaWxlIChudW0ubW9kKFRFTikuY21wKFRIUkVFKSkge1xuICAgICAgICBudW0uaWFkZChGT1VSKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbjIgPSBudW0uc2hybigxKTtcbiAgICBpZiAoc2ltcGxlU2lldmUobjIpICYmIHNpbXBsZVNpZXZlKG51bSkgJiZcbiAgICAgIGZlcm1hdFRlc3QobjIpICYmIGZlcm1hdFRlc3QobnVtKSAmJlxuICAgICAgbWlsbGVyUmFiaW4udGVzdChuMikgJiYgbWlsbGVyUmFiaW4udGVzdChudW0pKSB7XG4gICAgICByZXR1cm4gbnVtO1xuICAgIH1cbiAgfVxuXG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gICAgXCJtb2RwMVwiOiB7XG4gICAgICAgIFwiZ2VuXCI6IFwiMDJcIixcbiAgICAgICAgXCJwcmltZVwiOiBcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHAyXCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZlwiXG4gICAgfSxcbiAgICBcIm1vZHA1XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE0XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH0sXG4gICAgXCJtb2RwMTVcIjoge1xuICAgICAgICBcImdlblwiOiBcIjAyXCIsXG4gICAgICAgIFwicHJpbWVcIjogXCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH0sXG4gICAgXCJtb2RwMTZcIjoge1xuICAgICAgICBcImdlblwiOiBcIjAyXCIsXG4gICAgICAgIFwicHJpbWVcIjogXCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE3XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmXCJcbiAgICB9LFxuICAgIFwibW9kcDE4XCI6IHtcbiAgICAgICAgXCJnZW5cIjogXCIwMlwiLFxuICAgICAgICBcInByaW1lXCI6IFwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmZcIlxuICAgIH1cbn0iLCJ2YXIgY3J5cHRvID0gcmVxdWlyZShcImNyeXB0b1wiKTtcbnZhciBCaWdJbnRlZ2VyID0gcmVxdWlyZShcImpzYm5cIikuQmlnSW50ZWdlcjtcbnZhciBFQ1BvaW50RnAgPSByZXF1aXJlKFwiLi9saWIvZWMuanNcIikuRUNQb2ludEZwO1xuZXhwb3J0cy5FQ0N1cnZlcyA9IHJlcXVpcmUoXCIuL2xpYi9zZWMuanNcIik7XG5cbi8vIHplcm8gcHJlcGFkXG5mdW5jdGlvbiB1bnN0dXBpZChoZXgsbGVuKVxue1xuXHRyZXR1cm4gKGhleC5sZW5ndGggPj0gbGVuKSA/IGhleCA6IHVuc3R1cGlkKFwiMFwiK2hleCxsZW4pO1xufVxuXG5leHBvcnRzLkVDS2V5ID0gZnVuY3Rpb24oY3VydmUsIGtleSwgaXNQdWJsaWMpXG57XG4gIHZhciBwcml2O1xuXHR2YXIgYyA9IGN1cnZlKCk7XG5cdHZhciBuID0gYy5nZXROKCk7XG4gIHZhciBieXRlcyA9IE1hdGguZmxvb3Iobi5iaXRMZW5ndGgoKS84KTtcblxuICBpZihrZXkpXG4gIHtcbiAgICBpZihpc1B1YmxpYylcbiAgICB7XG4gICAgICB2YXIgY3VydmUgPSBjLmdldEN1cnZlKCk7XG4vLyAgICAgIHZhciB4ID0ga2V5LnNsaWNlKDEsYnl0ZXMrMSk7IC8vIHNraXAgdGhlIDA0IGZvciB1bmNvbXByZXNzZWQgZm9ybWF0XG4vLyAgICAgIHZhciB5ID0ga2V5LnNsaWNlKGJ5dGVzKzEpO1xuLy8gICAgICB0aGlzLlAgPSBuZXcgRUNQb2ludEZwKGN1cnZlLFxuLy8gICAgICAgIGN1cnZlLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHgudG9TdHJpbmcoXCJoZXhcIiksIDE2KSksXG4vLyAgICAgICAgY3VydmUuZnJvbUJpZ0ludGVnZXIobmV3IEJpZ0ludGVnZXIoeS50b1N0cmluZyhcImhleFwiKSwgMTYpKSk7ICAgICAgXG4gICAgICB0aGlzLlAgPSBjdXJ2ZS5kZWNvZGVQb2ludEhleChrZXkudG9TdHJpbmcoXCJoZXhcIikpO1xuICAgIH1lbHNle1xuICAgICAgaWYoa2V5Lmxlbmd0aCAhPSBieXRlcykgcmV0dXJuIGZhbHNlO1xuICAgICAgcHJpdiA9IG5ldyBCaWdJbnRlZ2VyKGtleS50b1N0cmluZyhcImhleFwiKSwgMTYpOyAgICAgIFxuICAgIH1cbiAgfWVsc2V7XG4gICAgdmFyIG4xID0gbi5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSk7XG4gICAgdmFyIHIgPSBuZXcgQmlnSW50ZWdlcihjcnlwdG8ucmFuZG9tQnl0ZXMobi5iaXRMZW5ndGgoKSkpO1xuICAgIHByaXYgPSByLm1vZChuMSkuYWRkKEJpZ0ludGVnZXIuT05FKTtcbiAgICB0aGlzLlAgPSBjLmdldEcoKS5tdWx0aXBseShwcml2KTtcbiAgfVxuICBpZih0aGlzLlApXG4gIHtcbi8vICB2YXIgcHViaGV4ID0gdW5zdHVwaWQodGhpcy5QLmdldFgoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygxNiksYnl0ZXMqMikrdW5zdHVwaWQodGhpcy5QLmdldFkoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygxNiksYnl0ZXMqMik7XG4vLyAgdGhpcy5QdWJsaWNLZXkgPSBuZXcgQnVmZmVyKFwiMDRcIitwdWJoZXgsXCJoZXhcIik7XG4gICAgdGhpcy5QdWJsaWNLZXkgPSBuZXcgQnVmZmVyKGMuZ2V0Q3VydmUoKS5lbmNvZGVDb21wcmVzc2VkUG9pbnRIZXgodGhpcy5QKSxcImhleFwiKTtcbiAgfVxuICBpZihwcml2KVxuICB7XG4gICAgdGhpcy5Qcml2YXRlS2V5ID0gbmV3IEJ1ZmZlcih1bnN0dXBpZChwcml2LnRvU3RyaW5nKDE2KSxieXRlcyoyKSxcImhleFwiKTtcbiAgICB0aGlzLmRlcml2ZVNoYXJlZFNlY3JldCA9IGZ1bmN0aW9uKGtleSlcbiAgICB7XG4gICAgICBpZigha2V5IHx8ICFrZXkuUCkgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIFMgPSBrZXkuUC5tdWx0aXBseShwcml2KTtcbiAgICAgIHJldHVybiBuZXcgQnVmZmVyKHVuc3R1cGlkKFMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKDE2KSxieXRlcyoyKSxcImhleFwiKTtcbiAgIH0gICAgIFxuICB9XG59XG5cbiIsIi8vIEJhc2ljIEphdmFzY3JpcHQgRWxsaXB0aWMgQ3VydmUgaW1wbGVtZW50YXRpb25cbi8vIFBvcnRlZCBsb29zZWx5IGZyb20gQm91bmN5Q2FzdGxlJ3MgSmF2YSBFQyBjb2RlXG4vLyBPbmx5IEZwIGN1cnZlcyBpbXBsZW1lbnRlZCBmb3Igbm93XG5cbi8vIFJlcXVpcmVzIGpzYm4uanMgYW5kIGpzYm4yLmpzXG52YXIgQmlnSW50ZWdlciA9IHJlcXVpcmUoJ2pzYm4nKS5CaWdJbnRlZ2VyXG52YXIgQmFycmV0dCA9IEJpZ0ludGVnZXIucHJvdG90eXBlLkJhcnJldHRcblxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gRUNGaWVsZEVsZW1lbnRGcFxuXG4vLyBjb25zdHJ1Y3RvclxuZnVuY3Rpb24gRUNGaWVsZEVsZW1lbnRGcChxLHgpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIC8vIFRPRE8gaWYoeC5jb21wYXJlVG8ocSkgPj0gMCkgZXJyb3JcbiAgICB0aGlzLnEgPSBxO1xufVxuXG5mdW5jdGlvbiBmZUZwRXF1YWxzKG90aGVyKSB7XG4gICAgaWYob3RoZXIgPT0gdGhpcykgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuICh0aGlzLnEuZXF1YWxzKG90aGVyLnEpICYmIHRoaXMueC5lcXVhbHMob3RoZXIueCkpO1xufVxuXG5mdW5jdGlvbiBmZUZwVG9CaWdJbnRlZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLng7XG59XG5cbmZ1bmN0aW9uIGZlRnBOZWdhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSwgdGhpcy54Lm5lZ2F0ZSgpLm1vZCh0aGlzLnEpKTtcbn1cblxuZnVuY3Rpb24gZmVGcEFkZChiKSB7XG4gICAgcmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSwgdGhpcy54LmFkZChiLnRvQmlnSW50ZWdlcigpKS5tb2QodGhpcy5xKSk7XG59XG5cbmZ1bmN0aW9uIGZlRnBTdWJ0cmFjdChiKSB7XG4gICAgcmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSwgdGhpcy54LnN1YnRyYWN0KGIudG9CaWdJbnRlZ2VyKCkpLm1vZCh0aGlzLnEpKTtcbn1cblxuZnVuY3Rpb24gZmVGcE11bHRpcGx5KGIpIHtcbiAgICByZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLCB0aGlzLngubXVsdGlwbHkoYi50b0JpZ0ludGVnZXIoKSkubW9kKHRoaXMucSkpO1xufVxuXG5mdW5jdGlvbiBmZUZwU3F1YXJlKCkge1xuICAgIHJldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsIHRoaXMueC5zcXVhcmUoKS5tb2QodGhpcy5xKSk7XG59XG5cbmZ1bmN0aW9uIGZlRnBEaXZpZGUoYikge1xuICAgIHJldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsIHRoaXMueC5tdWx0aXBseShiLnRvQmlnSW50ZWdlcigpLm1vZEludmVyc2UodGhpcy5xKSkubW9kKHRoaXMucSkpO1xufVxuXG5FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5lcXVhbHMgPSBmZUZwRXF1YWxzO1xuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUudG9CaWdJbnRlZ2VyID0gZmVGcFRvQmlnSW50ZWdlcjtcbkVDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLm5lZ2F0ZSA9IGZlRnBOZWdhdGU7XG5FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5hZGQgPSBmZUZwQWRkO1xuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuc3VidHJhY3QgPSBmZUZwU3VidHJhY3Q7XG5FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5tdWx0aXBseSA9IGZlRnBNdWx0aXBseTtcbkVDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnNxdWFyZSA9IGZlRnBTcXVhcmU7XG5FQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5kaXZpZGUgPSBmZUZwRGl2aWRlO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLyBFQ1BvaW50RnBcblxuLy8gY29uc3RydWN0b3JcbmZ1bmN0aW9uIEVDUG9pbnRGcChjdXJ2ZSx4LHkseikge1xuICAgIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gICAgLy8gUHJvamVjdGl2ZSBjb29yZGluYXRlczogZWl0aGVyIHppbnYgPT0gbnVsbCBvciB6ICogemludiA9PSAxXG4gICAgLy8geiBhbmQgemludiBhcmUganVzdCBCaWdJbnRlZ2Vycywgbm90IGZpZWxkRWxlbWVudHNcbiAgICBpZih6ID09IG51bGwpIHtcbiAgICAgIHRoaXMueiA9IEJpZ0ludGVnZXIuT05FO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMueiA9IHo7XG4gICAgfVxuICAgIHRoaXMuemludiA9IG51bGw7XG4gICAgLy9UT0RPOiBjb21wcmVzc2lvbiBmbGFnXG59XG5cbmZ1bmN0aW9uIHBvaW50RnBHZXRYKCkge1xuICAgIGlmKHRoaXMuemludiA9PSBudWxsKSB7XG4gICAgICB0aGlzLnppbnYgPSB0aGlzLnoubW9kSW52ZXJzZSh0aGlzLmN1cnZlLnEpO1xuICAgIH1cbiAgICB2YXIgciA9IHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnppbnYpO1xuICAgIHRoaXMuY3VydmUucmVkdWNlKHIpO1xuICAgIHJldHVybiB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHIpO1xufVxuXG5mdW5jdGlvbiBwb2ludEZwR2V0WSgpIHtcbiAgICBpZih0aGlzLnppbnYgPT0gbnVsbCkge1xuICAgICAgdGhpcy56aW52ID0gdGhpcy56Lm1vZEludmVyc2UodGhpcy5jdXJ2ZS5xKTtcbiAgICB9XG4gICAgdmFyIHIgPSB0aGlzLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56aW52KTtcbiAgICB0aGlzLmN1cnZlLnJlZHVjZShyKTtcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihyKTtcbn1cblxuZnVuY3Rpb24gcG9pbnRGcEVxdWFscyhvdGhlcikge1xuICAgIGlmKG90aGVyID09IHRoaXMpIHJldHVybiB0cnVlO1xuICAgIGlmKHRoaXMuaXNJbmZpbml0eSgpKSByZXR1cm4gb3RoZXIuaXNJbmZpbml0eSgpO1xuICAgIGlmKG90aGVyLmlzSW5maW5pdHkoKSkgcmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpO1xuICAgIHZhciB1LCB2O1xuICAgIC8vIHUgPSBZMiAqIFoxIC0gWTEgKiBaMlxuICAgIHUgPSBvdGhlci55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMueikuc3VidHJhY3QodGhpcy55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KG90aGVyLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtcbiAgICBpZighdS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIHYgPSBYMiAqIFoxIC0gWDEgKiBaMlxuICAgIHYgPSBvdGhlci54LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMueikuc3VidHJhY3QodGhpcy54LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KG90aGVyLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtcbiAgICByZXR1cm4gdi5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKTtcbn1cblxuZnVuY3Rpb24gcG9pbnRGcElzSW5maW5pdHkoKSB7XG4gICAgaWYoKHRoaXMueCA9PSBudWxsKSAmJiAodGhpcy55ID09IG51bGwpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy56LmVxdWFscyhCaWdJbnRlZ2VyLlpFUk8pICYmICF0aGlzLnkudG9CaWdJbnRlZ2VyKCkuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTyk7XG59XG5cbmZ1bmN0aW9uIHBvaW50RnBOZWdhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSwgdGhpcy54LCB0aGlzLnkubmVnYXRlKCksIHRoaXMueik7XG59XG5cbmZ1bmN0aW9uIHBvaW50RnBBZGQoYikge1xuICAgIGlmKHRoaXMuaXNJbmZpbml0eSgpKSByZXR1cm4gYjtcbiAgICBpZihiLmlzSW5maW5pdHkoKSkgcmV0dXJuIHRoaXM7XG5cbiAgICAvLyB1ID0gWTIgKiBaMSAtIFkxICogWjJcbiAgICB2YXIgdSA9IGIueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShiLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtcbiAgICAvLyB2ID0gWDIgKiBaMSAtIFgxICogWjJcbiAgICB2YXIgdiA9IGIueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnopLnN1YnRyYWN0KHRoaXMueC50b0JpZ0ludGVnZXIoKS5tdWx0aXBseShiLnopKS5tb2QodGhpcy5jdXJ2ZS5xKTtcblxuICAgIGlmKEJpZ0ludGVnZXIuWkVSTy5lcXVhbHModikpIHtcbiAgICAgICAgaWYoQmlnSW50ZWdlci5aRVJPLmVxdWFscyh1KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHdpY2UoKTsgLy8gdGhpcyA9PSBiLCBzbyBkb3VibGVcbiAgICAgICAgfVxuXHRyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpOyAvLyB0aGlzID0gLWIsIHNvIGluZmluaXR5XG4gICAgfVxuXG4gICAgdmFyIFRIUkVFID0gbmV3IEJpZ0ludGVnZXIoXCIzXCIpO1xuICAgIHZhciB4MSA9IHRoaXMueC50b0JpZ0ludGVnZXIoKTtcbiAgICB2YXIgeTEgPSB0aGlzLnkudG9CaWdJbnRlZ2VyKCk7XG4gICAgdmFyIHgyID0gYi54LnRvQmlnSW50ZWdlcigpO1xuICAgIHZhciB5MiA9IGIueS50b0JpZ0ludGVnZXIoKTtcblxuICAgIHZhciB2MiA9IHYuc3F1YXJlKCk7XG4gICAgdmFyIHYzID0gdjIubXVsdGlwbHkodik7XG4gICAgdmFyIHgxdjIgPSB4MS5tdWx0aXBseSh2Mik7XG4gICAgdmFyIHp1MiA9IHUuc3F1YXJlKCkubXVsdGlwbHkodGhpcy56KTtcblxuICAgIC8vIHgzID0gdiAqICh6MiAqICh6MSAqIHVeMiAtIDIgKiB4MSAqIHZeMikgLSB2XjMpXG4gICAgdmFyIHgzID0genUyLnN1YnRyYWN0KHgxdjIuc2hpZnRMZWZ0KDEpKS5tdWx0aXBseShiLnopLnN1YnRyYWN0KHYzKS5tdWx0aXBseSh2KS5tb2QodGhpcy5jdXJ2ZS5xKTtcbiAgICAvLyB5MyA9IHoyICogKDMgKiB4MSAqIHUgKiB2XjIgLSB5MSAqIHZeMyAtIHoxICogdV4zKSArIHUgKiB2XjNcbiAgICB2YXIgeTMgPSB4MXYyLm11bHRpcGx5KFRIUkVFKS5tdWx0aXBseSh1KS5zdWJ0cmFjdCh5MS5tdWx0aXBseSh2MykpLnN1YnRyYWN0KHp1Mi5tdWx0aXBseSh1KSkubXVsdGlwbHkoYi56KS5hZGQodS5tdWx0aXBseSh2MykpLm1vZCh0aGlzLmN1cnZlLnEpO1xuICAgIC8vIHozID0gdl4zICogejEgKiB6MlxuICAgIHZhciB6MyA9IHYzLm11bHRpcGx5KHRoaXMueikubXVsdGlwbHkoYi56KS5tb2QodGhpcy5jdXJ2ZS5xKTtcblxuICAgIHJldHVybiBuZXcgRUNQb2ludEZwKHRoaXMuY3VydmUsIHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoeDMpLCB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHkzKSwgejMpO1xufVxuXG5mdW5jdGlvbiBwb2ludEZwVHdpY2UoKSB7XG4gICAgaWYodGhpcy5pc0luZmluaXR5KCkpIHJldHVybiB0aGlzO1xuICAgIGlmKHRoaXMueS50b0JpZ0ludGVnZXIoKS5zaWdudW0oKSA9PSAwKSByZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpO1xuXG4gICAgLy8gVE9ETzogb3B0aW1pemVkIGhhbmRsaW5nIG9mIGNvbnN0YW50c1xuICAgIHZhciBUSFJFRSA9IG5ldyBCaWdJbnRlZ2VyKFwiM1wiKTtcbiAgICB2YXIgeDEgPSB0aGlzLngudG9CaWdJbnRlZ2VyKCk7XG4gICAgdmFyIHkxID0gdGhpcy55LnRvQmlnSW50ZWdlcigpO1xuXG4gICAgdmFyIHkxejEgPSB5MS5tdWx0aXBseSh0aGlzLnopO1xuICAgIHZhciB5MXNxejEgPSB5MXoxLm11bHRpcGx5KHkxKS5tb2QodGhpcy5jdXJ2ZS5xKTtcbiAgICB2YXIgYSA9IHRoaXMuY3VydmUuYS50b0JpZ0ludGVnZXIoKTtcblxuICAgIC8vIHcgPSAzICogeDFeMiArIGEgKiB6MV4yXG4gICAgdmFyIHcgPSB4MS5zcXVhcmUoKS5tdWx0aXBseShUSFJFRSk7XG4gICAgaWYoIUJpZ0ludGVnZXIuWkVSTy5lcXVhbHMoYSkpIHtcbiAgICAgIHcgPSB3LmFkZCh0aGlzLnouc3F1YXJlKCkubXVsdGlwbHkoYSkpO1xuICAgIH1cbiAgICB3ID0gdy5tb2QodGhpcy5jdXJ2ZS5xKTtcbiAgICAvL3RoaXMuY3VydmUucmVkdWNlKHcpO1xuICAgIC8vIHgzID0gMiAqIHkxICogejEgKiAod14yIC0gOCAqIHgxICogeTFeMiAqIHoxKVxuICAgIHZhciB4MyA9IHcuc3F1YXJlKCkuc3VidHJhY3QoeDEuc2hpZnRMZWZ0KDMpLm11bHRpcGx5KHkxc3F6MSkpLnNoaWZ0TGVmdCgxKS5tdWx0aXBseSh5MXoxKS5tb2QodGhpcy5jdXJ2ZS5xKTtcbiAgICAvLyB5MyA9IDQgKiB5MV4yICogejEgKiAoMyAqIHcgKiB4MSAtIDIgKiB5MV4yICogejEpIC0gd14zXG4gICAgdmFyIHkzID0gdy5tdWx0aXBseShUSFJFRSkubXVsdGlwbHkoeDEpLnN1YnRyYWN0KHkxc3F6MS5zaGlmdExlZnQoMSkpLnNoaWZ0TGVmdCgyKS5tdWx0aXBseSh5MXNxejEpLnN1YnRyYWN0KHcuc3F1YXJlKCkubXVsdGlwbHkodykpLm1vZCh0aGlzLmN1cnZlLnEpO1xuICAgIC8vIHozID0gOCAqICh5MSAqIHoxKV4zXG4gICAgdmFyIHozID0geTF6MS5zcXVhcmUoKS5tdWx0aXBseSh5MXoxKS5zaGlmdExlZnQoMykubW9kKHRoaXMuY3VydmUucSk7XG5cbiAgICByZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLCB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHgzKSwgdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcih5MyksIHozKTtcbn1cblxuLy8gU2ltcGxlIE5BRiAoTm9uLUFkamFjZW50IEZvcm0pIG11bHRpcGxpY2F0aW9uIGFsZ29yaXRobVxuLy8gVE9ETzogbW9kdWxhcml6ZSB0aGUgbXVsdGlwbGljYXRpb24gYWxnb3JpdGhtXG5mdW5jdGlvbiBwb2ludEZwTXVsdGlwbHkoaykge1xuICAgIGlmKHRoaXMuaXNJbmZpbml0eSgpKSByZXR1cm4gdGhpcztcbiAgICBpZihrLnNpZ251bSgpID09IDApIHJldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCk7XG5cbiAgICB2YXIgZSA9IGs7XG4gICAgdmFyIGggPSBlLm11bHRpcGx5KG5ldyBCaWdJbnRlZ2VyKFwiM1wiKSk7XG5cbiAgICB2YXIgbmVnID0gdGhpcy5uZWdhdGUoKTtcbiAgICB2YXIgUiA9IHRoaXM7XG5cbiAgICB2YXIgaTtcbiAgICBmb3IoaSA9IGguYml0TGVuZ3RoKCkgLSAyOyBpID4gMDsgLS1pKSB7XG5cdFIgPSBSLnR3aWNlKCk7XG5cblx0dmFyIGhCaXQgPSBoLnRlc3RCaXQoaSk7XG5cdHZhciBlQml0ID0gZS50ZXN0Qml0KGkpO1xuXG5cdGlmIChoQml0ICE9IGVCaXQpIHtcblx0ICAgIFIgPSBSLmFkZChoQml0ID8gdGhpcyA6IG5lZyk7XG5cdH1cbiAgICB9XG5cbiAgICByZXR1cm4gUjtcbn1cblxuLy8gQ29tcHV0ZSB0aGlzKmogKyB4KmsgKHNpbXVsdGFuZW91cyBtdWx0aXBsaWNhdGlvbilcbmZ1bmN0aW9uIHBvaW50RnBNdWx0aXBseVR3byhqLHgsaykge1xuICB2YXIgaTtcbiAgaWYoai5iaXRMZW5ndGgoKSA+IGsuYml0TGVuZ3RoKCkpXG4gICAgaSA9IGouYml0TGVuZ3RoKCkgLSAxO1xuICBlbHNlXG4gICAgaSA9IGsuYml0TGVuZ3RoKCkgLSAxO1xuXG4gIHZhciBSID0gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpO1xuICB2YXIgYm90aCA9IHRoaXMuYWRkKHgpO1xuICB3aGlsZShpID49IDApIHtcbiAgICBSID0gUi50d2ljZSgpO1xuICAgIGlmKGoudGVzdEJpdChpKSkge1xuICAgICAgaWYoay50ZXN0Qml0KGkpKSB7XG4gICAgICAgIFIgPSBSLmFkZChib3RoKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBSID0gUi5hZGQodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYoay50ZXN0Qml0KGkpKSB7XG4gICAgICAgIFIgPSBSLmFkZCh4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLS1pO1xuICB9XG5cbiAgcmV0dXJuIFI7XG59XG5cbkVDUG9pbnRGcC5wcm90b3R5cGUuZ2V0WCA9IHBvaW50RnBHZXRYO1xuRUNQb2ludEZwLnByb3RvdHlwZS5nZXRZID0gcG9pbnRGcEdldFk7XG5FQ1BvaW50RnAucHJvdG90eXBlLmVxdWFscyA9IHBvaW50RnBFcXVhbHM7XG5FQ1BvaW50RnAucHJvdG90eXBlLmlzSW5maW5pdHkgPSBwb2ludEZwSXNJbmZpbml0eTtcbkVDUG9pbnRGcC5wcm90b3R5cGUubmVnYXRlID0gcG9pbnRGcE5lZ2F0ZTtcbkVDUG9pbnRGcC5wcm90b3R5cGUuYWRkID0gcG9pbnRGcEFkZDtcbkVDUG9pbnRGcC5wcm90b3R5cGUudHdpY2UgPSBwb2ludEZwVHdpY2U7XG5FQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5ID0gcG9pbnRGcE11bHRpcGx5O1xuRUNQb2ludEZwLnByb3RvdHlwZS5tdWx0aXBseVR3byA9IHBvaW50RnBNdWx0aXBseVR3bztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gRUNDdXJ2ZUZwXG5cbi8vIGNvbnN0cnVjdG9yXG5mdW5jdGlvbiBFQ0N1cnZlRnAocSxhLGIpIHtcbiAgICB0aGlzLnEgPSBxO1xuICAgIHRoaXMuYSA9IHRoaXMuZnJvbUJpZ0ludGVnZXIoYSk7XG4gICAgdGhpcy5iID0gdGhpcy5mcm9tQmlnSW50ZWdlcihiKTtcbiAgICB0aGlzLmluZmluaXR5ID0gbmV3IEVDUG9pbnRGcCh0aGlzLCBudWxsLCBudWxsKTtcbiAgICB0aGlzLnJlZHVjZXIgPSBuZXcgQmFycmV0dCh0aGlzLnEpO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZUZwR2V0USgpIHtcbiAgICByZXR1cm4gdGhpcy5xO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZUZwR2V0QSgpIHtcbiAgICByZXR1cm4gdGhpcy5hO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZUZwR2V0QigpIHtcbiAgICByZXR1cm4gdGhpcy5iO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZUZwRXF1YWxzKG90aGVyKSB7XG4gICAgaWYob3RoZXIgPT0gdGhpcykgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuKHRoaXMucS5lcXVhbHMob3RoZXIucSkgJiYgdGhpcy5hLmVxdWFscyhvdGhlci5hKSAmJiB0aGlzLmIuZXF1YWxzKG90aGVyLmIpKTtcbn1cblxuZnVuY3Rpb24gY3VydmVGcEdldEluZmluaXR5KCkge1xuICAgIHJldHVybiB0aGlzLmluZmluaXR5O1xufVxuXG5mdW5jdGlvbiBjdXJ2ZUZwRnJvbUJpZ0ludGVnZXIoeCkge1xuICAgIHJldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsIHgpO1xufVxuXG5mdW5jdGlvbiBjdXJ2ZVJlZHVjZSh4KSB7XG4gICAgdGhpcy5yZWR1Y2VyLnJlZHVjZSh4KTtcbn1cblxuLy8gZm9yIG5vdywgd29yayB3aXRoIGhleCBzdHJpbmdzIGJlY2F1c2UgdGhleSdyZSBlYXNpZXIgaW4gSlNcbmZ1bmN0aW9uIGN1cnZlRnBEZWNvZGVQb2ludEhleChzKSB7XG4gICAgc3dpdGNoKHBhcnNlSW50KHMuc3Vic3RyKDAsMiksIDE2KSkgeyAvLyBmaXJzdCBieXRlXG4gICAgY2FzZSAwOlxuXHRyZXR1cm4gdGhpcy5pbmZpbml0eTtcbiAgICBjYXNlIDI6XG4gICAgY2FzZSAzOlxuXHQvLyBwb2ludCBjb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkIHlldFxuXHRyZXR1cm4gbnVsbDtcbiAgICBjYXNlIDQ6XG4gICAgY2FzZSA2OlxuICAgIGNhc2UgNzpcblx0dmFyIGxlbiA9IChzLmxlbmd0aCAtIDIpIC8gMjtcblx0dmFyIHhIZXggPSBzLnN1YnN0cigyLCBsZW4pO1xuXHR2YXIgeUhleCA9IHMuc3Vic3RyKGxlbisyLCBsZW4pO1xuXG5cdHJldHVybiBuZXcgRUNQb2ludEZwKHRoaXMsXG5cdFx0XHQgICAgIHRoaXMuZnJvbUJpZ0ludGVnZXIobmV3IEJpZ0ludGVnZXIoeEhleCwgMTYpKSxcblx0XHRcdCAgICAgdGhpcy5mcm9tQmlnSW50ZWdlcihuZXcgQmlnSW50ZWdlcih5SGV4LCAxNikpKTtcblxuICAgIGRlZmF1bHQ6IC8vIHVuc3VwcG9ydGVkXG5cdHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3VydmVGcEVuY29kZVBvaW50SGV4KHApIHtcblx0aWYgKHAuaXNJbmZpbml0eSgpKSByZXR1cm4gXCIwMFwiO1xuXHR2YXIgeEhleCA9IHAuZ2V0WCgpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKDE2KTtcblx0dmFyIHlIZXggPSBwLmdldFkoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygxNik7XG5cdHZhciBvTGVuID0gdGhpcy5nZXRRKCkudG9TdHJpbmcoMTYpLmxlbmd0aDtcblx0aWYgKChvTGVuICUgMikgIT0gMCkgb0xlbisrO1xuXHR3aGlsZSAoeEhleC5sZW5ndGggPCBvTGVuKSB7XG5cdFx0eEhleCA9IFwiMFwiICsgeEhleDtcblx0fVxuXHR3aGlsZSAoeUhleC5sZW5ndGggPCBvTGVuKSB7XG5cdFx0eUhleCA9IFwiMFwiICsgeUhleDtcblx0fVxuXHRyZXR1cm4gXCIwNFwiICsgeEhleCArIHlIZXg7XG59XG5cbkVDQ3VydmVGcC5wcm90b3R5cGUuZ2V0USA9IGN1cnZlRnBHZXRRO1xuRUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRBID0gY3VydmVGcEdldEE7XG5FQ0N1cnZlRnAucHJvdG90eXBlLmdldEIgPSBjdXJ2ZUZwR2V0QjtcbkVDQ3VydmVGcC5wcm90b3R5cGUuZXF1YWxzID0gY3VydmVGcEVxdWFscztcbkVDQ3VydmVGcC5wcm90b3R5cGUuZ2V0SW5maW5pdHkgPSBjdXJ2ZUZwR2V0SW5maW5pdHk7XG5FQ0N1cnZlRnAucHJvdG90eXBlLmZyb21CaWdJbnRlZ2VyID0gY3VydmVGcEZyb21CaWdJbnRlZ2VyO1xuRUNDdXJ2ZUZwLnByb3RvdHlwZS5yZWR1Y2UgPSBjdXJ2ZVJlZHVjZTtcbi8vRUNDdXJ2ZUZwLnByb3RvdHlwZS5kZWNvZGVQb2ludEhleCA9IGN1cnZlRnBEZWNvZGVQb2ludEhleDtcbkVDQ3VydmVGcC5wcm90b3R5cGUuZW5jb2RlUG9pbnRIZXggPSBjdXJ2ZUZwRW5jb2RlUG9pbnRIZXg7XG5cbi8vIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9rYWllbHZpbi9qc2JuLWVjLXBvaW50LWNvbXByZXNzaW9uXG5FQ0N1cnZlRnAucHJvdG90eXBlLmRlY29kZVBvaW50SGV4ID0gZnVuY3Rpb24ocylcbntcblx0dmFyIHlJc0V2ZW47XG4gICAgc3dpdGNoKHBhcnNlSW50KHMuc3Vic3RyKDAsMiksIDE2KSkgeyAvLyBmaXJzdCBieXRlXG4gICAgY2FzZSAwOlxuXHRyZXR1cm4gdGhpcy5pbmZpbml0eTtcbiAgICBjYXNlIDI6XG5cdHlJc0V2ZW4gPSBmYWxzZTtcbiAgICBjYXNlIDM6XG5cdGlmKHlJc0V2ZW4gPT0gdW5kZWZpbmVkKSB5SXNFdmVuID0gdHJ1ZTtcblx0dmFyIGxlbiA9IHMubGVuZ3RoIC0gMjtcblx0dmFyIHhIZXggPSBzLnN1YnN0cigyLCBsZW4pO1xuXHR2YXIgeCA9IHRoaXMuZnJvbUJpZ0ludGVnZXIobmV3IEJpZ0ludGVnZXIoeEhleCwxNikpO1xuXHR2YXIgYWxwaGEgPSB4Lm11bHRpcGx5KHguc3F1YXJlKCkuYWRkKHRoaXMuZ2V0QSgpKSkuYWRkKHRoaXMuZ2V0QigpKTtcblx0dmFyIGJldGEgPSBhbHBoYS5zcXJ0KCk7XG5cbiAgICBpZiAoYmV0YSA9PSBudWxsKSB0aHJvdyBcIkludmFsaWQgcG9pbnQgY29tcHJlc3Npb25cIjtcblxuICAgIHZhciBiZXRhVmFsdWUgPSBiZXRhLnRvQmlnSW50ZWdlcigpO1xuICAgIGlmIChiZXRhVmFsdWUudGVzdEJpdCgwKSAhPSB5SXNFdmVuKVxuICAgIHtcbiAgICAgICAgLy8gVXNlIHRoZSBvdGhlciByb290XG4gICAgICAgIGJldGEgPSB0aGlzLmZyb21CaWdJbnRlZ2VyKHRoaXMuZ2V0USgpLnN1YnRyYWN0KGJldGFWYWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLHgsYmV0YSk7XG4gICAgY2FzZSA0OlxuICAgIGNhc2UgNjpcbiAgICBjYXNlIDc6XG5cdHZhciBsZW4gPSAocy5sZW5ndGggLSAyKSAvIDI7XG5cdHZhciB4SGV4ID0gcy5zdWJzdHIoMiwgbGVuKTtcblx0dmFyIHlIZXggPSBzLnN1YnN0cihsZW4rMiwgbGVuKTtcblxuXHRyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLFxuXHRcdFx0ICAgICB0aGlzLmZyb21CaWdJbnRlZ2VyKG5ldyBCaWdJbnRlZ2VyKHhIZXgsIDE2KSksXG5cdFx0XHQgICAgIHRoaXMuZnJvbUJpZ0ludGVnZXIobmV3IEJpZ0ludGVnZXIoeUhleCwgMTYpKSk7XG5cbiAgICBkZWZhdWx0OiAvLyB1bnN1cHBvcnRlZFxuXHRyZXR1cm4gbnVsbDtcbiAgICB9XG59XG5FQ0N1cnZlRnAucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWRQb2ludEhleCA9IGZ1bmN0aW9uKHApXG57XG5cdGlmIChwLmlzSW5maW5pdHkoKSkgcmV0dXJuIFwiMDBcIjtcblx0dmFyIHhIZXggPSBwLmdldFgoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygxNik7XG5cdHZhciBvTGVuID0gdGhpcy5nZXRRKCkudG9TdHJpbmcoMTYpLmxlbmd0aDtcblx0aWYgKChvTGVuICUgMikgIT0gMCkgb0xlbisrO1xuXHR3aGlsZSAoeEhleC5sZW5ndGggPCBvTGVuKVxuXHRcdHhIZXggPSBcIjBcIiArIHhIZXg7XG5cdHZhciB5UHJlZml4O1xuXHRpZihwLmdldFkoKS50b0JpZ0ludGVnZXIoKS5pc0V2ZW4oKSkgeVByZWZpeCA9IFwiMDJcIjtcblx0ZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlQcmVmaXggPSBcIjAzXCI7XG5cblx0cmV0dXJuIHlQcmVmaXggKyB4SGV4O1xufVxuXG5cbkVDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLmdldFIgPSBmdW5jdGlvbigpXG57XG5cdGlmKHRoaXMuciAhPSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnI7XG5cbiAgICB0aGlzLnIgPSBudWxsO1xuICAgIHZhciBiaXRMZW5ndGggPSB0aGlzLnEuYml0TGVuZ3RoKCk7XG4gICAgaWYgKGJpdExlbmd0aCA+IDEyOClcbiAgICB7XG4gICAgICAgIHZhciBmaXJzdFdvcmQgPSB0aGlzLnEuc2hpZnRSaWdodChiaXRMZW5ndGggLSA2NCk7XG4gICAgICAgIGlmIChmaXJzdFdvcmQuaW50VmFsdWUoKSA9PSAtMSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yID0gQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGJpdExlbmd0aCkuc3VidHJhY3QodGhpcy5xKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yO1xufVxuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUubW9kTXVsdCA9IGZ1bmN0aW9uKHgxLHgyKVxue1xuICAgIHJldHVybiB0aGlzLm1vZFJlZHVjZSh4MS5tdWx0aXBseSh4MikpO1xufVxuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUubW9kUmVkdWNlID0gZnVuY3Rpb24oeClcbntcbiAgICBpZiAodGhpcy5nZXRSKCkgIT0gbnVsbClcbiAgICB7XG4gICAgICAgIHZhciBxTGVuID0gcS5iaXRMZW5ndGgoKTtcbiAgICAgICAgd2hpbGUgKHguYml0TGVuZ3RoKCkgPiAocUxlbiArIDEpKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdSA9IHguc2hpZnRSaWdodChxTGVuKTtcbiAgICAgICAgICAgIHZhciB2ID0geC5zdWJ0cmFjdCh1LnNoaWZ0TGVmdChxTGVuKSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ2V0UigpLmVxdWFscyhCaWdJbnRlZ2VyLk9ORSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdSA9IHUubXVsdGlwbHkodGhpcy5nZXRSKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCA9IHUuYWRkKHYpOyBcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoeC5jb21wYXJlVG8ocSkgPj0gMClcbiAgICAgICAge1xuICAgICAgICAgICAgeCA9IHguc3VidHJhY3QocSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgeCA9IHgubW9kKHEpO1xuICAgIH1cbiAgICByZXR1cm4geDtcbn1cbkVDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLnNxcnQgPSBmdW5jdGlvbigpXG57XG4gICAgaWYgKCF0aGlzLnEudGVzdEJpdCgwKSkgdGhyb3cgXCJ1bnN1cHBvcnRlZFwiO1xuXG4gICAgLy8gcCBtb2QgNCA9PSAzXG4gICAgaWYgKHRoaXMucS50ZXN0Qml0KDEpKVxuICAgIHtcbiAgICBcdHZhciB6ID0gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5tb2RQb3codGhpcy5xLnNoaWZ0UmlnaHQoMikuYWRkKEJpZ0ludGVnZXIuT05FKSx0aGlzLnEpKTtcbiAgICBcdHJldHVybiB6LnNxdWFyZSgpLmVxdWFscyh0aGlzKSA/IHogOiBudWxsO1xuICAgIH1cblxuICAgIC8vIHAgbW9kIDQgPT0gMVxuICAgIHZhciBxTWludXNPbmUgPSB0aGlzLnEuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpO1xuXG4gICAgdmFyIGxlZ2VuZHJlRXhwb25lbnQgPSBxTWludXNPbmUuc2hpZnRSaWdodCgxKTtcbiAgICBpZiAoISh0aGlzLngubW9kUG93KGxlZ2VuZHJlRXhwb25lbnQsIHRoaXMucSkuZXF1YWxzKEJpZ0ludGVnZXIuT05FKSkpXG4gICAge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdSA9IHFNaW51c09uZS5zaGlmdFJpZ2h0KDIpO1xuICAgIHZhciBrID0gdS5zaGlmdExlZnQoMSkuYWRkKEJpZ0ludGVnZXIuT05FKTtcblxuICAgIHZhciBRID0gdGhpcy54O1xuICAgIHZhciBmb3VyUSA9IG1vZERvdWJsZShtb2REb3VibGUoUSkpO1xuXG4gICAgdmFyIFUsIFY7XG4gICAgZG9cbiAgICB7XG4gICAgICAgIHZhciBQO1xuICAgICAgICBkb1xuICAgICAgICB7XG4gICAgICAgICAgICBQID0gbmV3IEJpZ0ludGVnZXIodGhpcy5xLmJpdExlbmd0aCgpLCBuZXcgU2VjdXJlUmFuZG9tKCkpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChQLmNvbXBhcmVUbyh0aGlzLnEpID49IDBcbiAgICAgICAgICAgIHx8ICEoUC5tdWx0aXBseShQKS5zdWJ0cmFjdChmb3VyUSkubW9kUG93KGxlZ2VuZHJlRXhwb25lbnQsIHRoaXMucSkuZXF1YWxzKHFNaW51c09uZSkpKTtcblxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5sdWNhc1NlcXVlbmNlKFAsIFEsIGspO1xuICAgICAgICBVID0gcmVzdWx0WzBdO1xuICAgICAgICBWID0gcmVzdWx0WzFdO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZE11bHQoViwgVikuZXF1YWxzKGZvdXJRKSlcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSW50ZWdlciBkaXZpc2lvbiBieSAyLCBtb2QgcVxuICAgICAgICAgICAgaWYgKFYudGVzdEJpdCgwKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBWID0gVi5hZGQocSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFYgPSBWLnNoaWZ0UmlnaHQoMSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcChxLFYpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdoaWxlIChVLmVxdWFscyhCaWdJbnRlZ2VyLk9ORSkgfHwgVS5lcXVhbHMocU1pbnVzT25lKSk7XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cbkVDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLmx1Y2FzU2VxdWVuY2UgPSBmdW5jdGlvbihQLFEsaylcbntcbiAgICB2YXIgbiA9IGsuYml0TGVuZ3RoKCk7XG4gICAgdmFyIHMgPSBrLmdldExvd2VzdFNldEJpdCgpO1xuXG4gICAgdmFyIFVoID0gQmlnSW50ZWdlci5PTkU7XG4gICAgdmFyIFZsID0gQmlnSW50ZWdlci5UV087XG4gICAgdmFyIFZoID0gUDtcbiAgICB2YXIgUWwgPSBCaWdJbnRlZ2VyLk9ORTtcbiAgICB2YXIgUWggPSBCaWdJbnRlZ2VyLk9ORTtcblxuICAgIGZvciAodmFyIGogPSBuIC0gMTsgaiA+PSBzICsgMTsgLS1qKVxuICAgIHtcbiAgICAgICAgUWwgPSB0aGlzLm1vZE11bHQoUWwsIFFoKTtcblxuICAgICAgICBpZiAoay50ZXN0Qml0KGopKVxuICAgICAgICB7XG4gICAgICAgICAgICBRaCA9IHRoaXMubW9kTXVsdChRbCwgUSk7XG4gICAgICAgICAgICBVaCA9IHRoaXMubW9kTXVsdChVaCwgVmgpO1xuICAgICAgICAgICAgVmwgPSB0aGlzLm1vZFJlZHVjZShWaC5tdWx0aXBseShWbCkuc3VidHJhY3QoUC5tdWx0aXBseShRbCkpKTtcbiAgICAgICAgICAgIFZoID0gdGhpcy5tb2RSZWR1Y2UoVmgubXVsdGlwbHkoVmgpLnN1YnRyYWN0KFFoLnNoaWZ0TGVmdCgxKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgUWggPSBRbDtcbiAgICAgICAgICAgIFVoID0gdGhpcy5tb2RSZWR1Y2UoVWgubXVsdGlwbHkoVmwpLnN1YnRyYWN0KFFsKSk7XG4gICAgICAgICAgICBWaCA9IHRoaXMubW9kUmVkdWNlKFZoLm11bHRpcGx5KFZsKS5zdWJ0cmFjdChQLm11bHRpcGx5KFFsKSkpO1xuICAgICAgICAgICAgVmwgPSB0aGlzLm1vZFJlZHVjZShWbC5tdWx0aXBseShWbCkuc3VidHJhY3QoUWwuc2hpZnRMZWZ0KDEpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBRbCA9IHRoaXMubW9kTXVsdChRbCwgUWgpO1xuICAgIFFoID0gdGhpcy5tb2RNdWx0KFFsLCBRKTtcbiAgICBVaCA9IHRoaXMubW9kUmVkdWNlKFVoLm11bHRpcGx5KFZsKS5zdWJ0cmFjdChRbCkpO1xuICAgIFZsID0gdGhpcy5tb2RSZWR1Y2UoVmgubXVsdGlwbHkoVmwpLnN1YnRyYWN0KFAubXVsdGlwbHkoUWwpKSk7XG4gICAgUWwgPSB0aGlzLm1vZE11bHQoUWwsIFFoKTtcblxuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IHM7ICsrailcbiAgICB7XG4gICAgICAgIFVoID0gdGhpcy5tb2RNdWx0KFVoLCBWbCk7XG4gICAgICAgIFZsID0gdGhpcy5tb2RSZWR1Y2UoVmwubXVsdGlwbHkoVmwpLnN1YnRyYWN0KFFsLnNoaWZ0TGVmdCgxKSkpO1xuICAgICAgICBRbCA9IHRoaXMubW9kTXVsdChRbCwgUWwpO1xuICAgIH1cblxuICAgIHJldHVybiBbIFVoLCBWbCBdO1xufVxuXG52YXIgZXhwb3J0cyA9IHtcbiAgRUNDdXJ2ZUZwOiBFQ0N1cnZlRnAsXG4gIEVDUG9pbnRGcDogRUNQb2ludEZwLFxuICBFQ0ZpZWxkRWxlbWVudEZwOiBFQ0ZpZWxkRWxlbWVudEZwXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1xuIiwiLy8gTmFtZWQgRUMgY3VydmVzXG5cbi8vIFJlcXVpcmVzIGVjLmpzLCBqc2JuLmpzLCBhbmQganNibjIuanNcbnZhciBCaWdJbnRlZ2VyID0gcmVxdWlyZSgnanNibicpLkJpZ0ludGVnZXJcbnZhciBFQ0N1cnZlRnAgPSByZXF1aXJlKCcuL2VjLmpzJykuRUNDdXJ2ZUZwXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gWDlFQ1BhcmFtZXRlcnNcblxuLy8gY29uc3RydWN0b3JcbmZ1bmN0aW9uIFg5RUNQYXJhbWV0ZXJzKGN1cnZlLGcsbixoKSB7XG4gICAgdGhpcy5jdXJ2ZSA9IGN1cnZlO1xuICAgIHRoaXMuZyA9IGc7XG4gICAgdGhpcy5uID0gbjtcbiAgICB0aGlzLmggPSBoO1xufVxuXG5mdW5jdGlvbiB4OWdldEN1cnZlKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnZlO1xufVxuXG5mdW5jdGlvbiB4OWdldEcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZztcbn1cblxuZnVuY3Rpb24geDlnZXROKCkge1xuICAgIHJldHVybiB0aGlzLm47XG59XG5cbmZ1bmN0aW9uIHg5Z2V0SCgpIHtcbiAgICByZXR1cm4gdGhpcy5oO1xufVxuXG5YOUVDUGFyYW1ldGVycy5wcm90b3R5cGUuZ2V0Q3VydmUgPSB4OWdldEN1cnZlO1xuWDlFQ1BhcmFtZXRlcnMucHJvdG90eXBlLmdldEcgPSB4OWdldEc7XG5YOUVDUGFyYW1ldGVycy5wcm90b3R5cGUuZ2V0TiA9IHg5Z2V0Tjtcblg5RUNQYXJhbWV0ZXJzLnByb3RvdHlwZS5nZXRIID0geDlnZXRIO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLyBTRUNOYW1lZEN1cnZlc1xuXG5mdW5jdGlvbiBmcm9tSGV4KHMpIHsgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKHMsIDE2KTsgfVxuXG5mdW5jdGlvbiBzZWNwMTI4cjEoKSB7XG4gICAgLy8gcCA9IDJeMTI4IC0gMl45NyAtIDFcbiAgICB2YXIgcCA9IGZyb21IZXgoXCJGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRlwiKTtcbiAgICB2YXIgYSA9IGZyb21IZXgoXCJGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiKTtcbiAgICB2YXIgYiA9IGZyb21IZXgoXCJFODc1NzlDMTEwNzlGNDNERDgyNDk5M0MyQ0VFNUVEM1wiKTtcbiAgICAvL2J5dGVbXSBTID0gSGV4LmRlY29kZShcIjAwMEUwRDRENjk2RTY3Njg3NTYxNTE3NTBDQzAzQTQ0NzNEMDM2NzlcIik7XG4gICAgdmFyIG4gPSBmcm9tSGV4KFwiRkZGRkZGRkUwMDAwMDAwMDc1QTMwRDFCOTAzOEExMTVcIik7XG4gICAgdmFyIGggPSBCaWdJbnRlZ2VyLk9ORTtcbiAgICB2YXIgY3VydmUgPSBuZXcgRUNDdXJ2ZUZwKHAsIGEsIGIpO1xuICAgIHZhciBHID0gY3VydmUuZGVjb2RlUG9pbnRIZXgoXCIwNFwiXG4gICAgICAgICAgICAgICAgKyBcIjE2MUZGNzUyOEI4OTlCMkQwQzI4NjA3Q0E1MkM1Qjg2XCJcblx0XHQrIFwiQ0Y1QUM4Mzk1QkFGRUIxM0MwMkRBMjkyRERFRDdBODNcIik7XG4gICAgcmV0dXJuIG5ldyBYOUVDUGFyYW1ldGVycyhjdXJ2ZSwgRywgbiwgaCk7XG59XG5cbmZ1bmN0aW9uIHNlY3AxNjBrMSgpIHtcbiAgICAvLyBwID0gMl4xNjAgLSAyXjMyIC0gMl4xNCAtIDJeMTIgLSAyXjkgLSAyXjggLSAyXjcgLSAyXjMgLSAyXjIgLSAxXG4gICAgdmFyIHAgPSBmcm9tSGV4KFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGQUM3M1wiKTtcbiAgICB2YXIgYSA9IEJpZ0ludGVnZXIuWkVSTztcbiAgICB2YXIgYiA9IGZyb21IZXgoXCI3XCIpO1xuICAgIC8vYnl0ZVtdIFMgPSBudWxsO1xuICAgIHZhciBuID0gZnJvbUhleChcIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDFCOEZBMTZERkFCOUFDQTE2QjZCM1wiKTtcbiAgICB2YXIgaCA9IEJpZ0ludGVnZXIuT05FO1xuICAgIHZhciBjdXJ2ZSA9IG5ldyBFQ0N1cnZlRnAocCwgYSwgYik7XG4gICAgdmFyIEcgPSBjdXJ2ZS5kZWNvZGVQb2ludEhleChcIjA0XCJcbiAgICAgICAgICAgICAgICArIFwiM0I0QzM4MkNFMzdBQTE5MkE0MDE5RTc2MzAzNkY0RjVERDREN0VCQlwiXG4gICAgICAgICAgICAgICAgKyBcIjkzOENGOTM1MzE4RkRDRUQ2QkMyODI4NjUzMTczM0MzRjAzQzRGRUVcIik7XG4gICAgcmV0dXJuIG5ldyBYOUVDUGFyYW1ldGVycyhjdXJ2ZSwgRywgbiwgaCk7XG59XG5cbmZ1bmN0aW9uIHNlY3AxNjByMSgpIHtcbiAgICAvLyBwID0gMl4xNjAgLSAyXjMxIC0gMVxuICAgIHZhciBwID0gZnJvbUhleChcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0ZGRkZGRkZcIik7XG4gICAgdmFyIGEgPSBmcm9tSGV4KFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGQ1wiKTtcbiAgICB2YXIgYiA9IGZyb21IZXgoXCIxQzk3QkVGQzU0QkQ3QThCNjVBQ0Y4OUY4MUQ0RDRBREM1NjVGQTQ1XCIpO1xuICAgIC8vYnl0ZVtdIFMgPSBIZXguZGVjb2RlKFwiMTA1M0NERTQyQzE0RDY5NkU2NzY4NzU2MTUxNzUzM0JGM0Y4MzM0NVwiKTtcbiAgICB2YXIgbiA9IGZyb21IZXgoXCIwMTAwMDAwMDAwMDAwMDAwMDAwMDAxRjRDOEY5MjdBRUQzQ0E3NTIyNTdcIik7XG4gICAgdmFyIGggPSBCaWdJbnRlZ2VyLk9ORTtcbiAgICB2YXIgY3VydmUgPSBuZXcgRUNDdXJ2ZUZwKHAsIGEsIGIpO1xuICAgIHZhciBHID0gY3VydmUuZGVjb2RlUG9pbnRIZXgoXCIwNFwiXG5cdFx0KyBcIjRBOTZCNTY4OEVGNTczMjg0NjY0Njk4OTY4QzM4QkI5MTNDQkZDODJcIlxuXHRcdCsgXCIyM0E2Mjg1NTMxNjg5NDdENTlEQ0M5MTIwNDIzNTEzNzdBQzVGQjMyXCIpO1xuICAgIHJldHVybiBuZXcgWDlFQ1BhcmFtZXRlcnMoY3VydmUsIEcsIG4sIGgpO1xufVxuXG5mdW5jdGlvbiBzZWNwMTkyazEoKSB7XG4gICAgLy8gcCA9IDJeMTkyIC0gMl4zMiAtIDJeMTIgLSAyXjggLSAyXjcgLSAyXjYgLSAyXjMgLSAxXG4gICAgdmFyIHAgPSBmcm9tSGV4KFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZFRTM3XCIpO1xuICAgIHZhciBhID0gQmlnSW50ZWdlci5aRVJPO1xuICAgIHZhciBiID0gZnJvbUhleChcIjNcIik7XG4gICAgLy9ieXRlW10gUyA9IG51bGw7XG4gICAgdmFyIG4gPSBmcm9tSGV4KFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFMjZGMkZDMTcwRjY5NDY2QTc0REVGRDhEXCIpO1xuICAgIHZhciBoID0gQmlnSW50ZWdlci5PTkU7XG4gICAgdmFyIGN1cnZlID0gbmV3IEVDQ3VydmVGcChwLCBhLCBiKTtcbiAgICB2YXIgRyA9IGN1cnZlLmRlY29kZVBvaW50SGV4KFwiMDRcIlxuICAgICAgICAgICAgICAgICsgXCJEQjRGRjEwRUMwNTdFOUFFMjZCMDdEMDI4MEI3RjQzNDFEQTVEMUIxRUFFMDZDN0RcIlxuICAgICAgICAgICAgICAgICsgXCI5QjJGMkY2RDlDNTYyOEE3ODQ0MTYzRDAxNUJFODYzNDQwODJBQTg4RDk1RTJGOURcIik7XG4gICAgcmV0dXJuIG5ldyBYOUVDUGFyYW1ldGVycyhjdXJ2ZSwgRywgbiwgaCk7XG59XG5cbmZ1bmN0aW9uIHNlY3AxOTJyMSgpIHtcbiAgICAvLyBwID0gMl4xOTIgLSAyXjY0IC0gMVxuICAgIHZhciBwID0gZnJvbUhleChcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRlwiKTtcbiAgICB2YXIgYSA9IGZyb21IZXgoXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkNcIik7XG4gICAgdmFyIGIgPSBmcm9tSGV4KFwiNjQyMTA1MTlFNTlDODBFNzBGQTdFOUFCNzIyNDMwNDlGRUI4REVFQ0MxNDZCOUIxXCIpO1xuICAgIC8vYnl0ZVtdIFMgPSBIZXguZGVjb2RlKFwiMzA0NUFFNkZDODQyMkY2NEVENTc5NTI4RDM4MTIwRUFFMTIxOTZENVwiKTtcbiAgICB2YXIgbiA9IGZyb21IZXgoXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5OURFRjgzNjE0NkJDOUIxQjREMjI4MzFcIik7XG4gICAgdmFyIGggPSBCaWdJbnRlZ2VyLk9ORTtcbiAgICB2YXIgY3VydmUgPSBuZXcgRUNDdXJ2ZUZwKHAsIGEsIGIpO1xuICAgIHZhciBHID0gY3VydmUuZGVjb2RlUG9pbnRIZXgoXCIwNFwiXG4gICAgICAgICAgICAgICAgKyBcIjE4OERBODBFQjAzMDkwRjY3Q0JGMjBFQjQzQTE4ODAwRjRGRjBBRkQ4MkZGMTAxMlwiXG4gICAgICAgICAgICAgICAgKyBcIjA3MTkyQjk1RkZDOERBNzg2MzEwMTFFRDZCMjRDREQ1NzNGOTc3QTExRTc5NDgxMVwiKTtcbiAgICByZXR1cm4gbmV3IFg5RUNQYXJhbWV0ZXJzKGN1cnZlLCBHLCBuLCBoKTtcbn1cblxuZnVuY3Rpb24gc2VjcDIyNHIxKCkge1xuICAgIC8vIHAgPSAyXjIyNCAtIDJeOTYgKyAxXG4gICAgdmFyIHAgPSBmcm9tSGV4KFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFcIik7XG4gICAgdmFyIGEgPSBmcm9tSGV4KFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVcIik7XG4gICAgdmFyIGIgPSBmcm9tSGV4KFwiQjQwNTBBODUwQzA0QjNBQkY1NDEzMjU2NTA0NEIwQjdEN0JGRDhCQTI3MEIzOTQzMjM1NUZGQjRcIik7XG4gICAgLy9ieXRlW10gUyA9IEhleC5kZWNvZGUoXCJCRDcxMzQ0Nzk5RDVDN0ZDREM0NUI1OUZBM0I5QUI4RjZBOTQ4QkM1XCIpO1xuICAgIHZhciBuID0gZnJvbUhleChcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxNkEyRTBCOEYwM0UxM0REMjk0NTVDNUMyQTNEXCIpO1xuICAgIHZhciBoID0gQmlnSW50ZWdlci5PTkU7XG4gICAgdmFyIGN1cnZlID0gbmV3IEVDQ3VydmVGcChwLCBhLCBiKTtcbiAgICB2YXIgRyA9IGN1cnZlLmRlY29kZVBvaW50SGV4KFwiMDRcIlxuICAgICAgICAgICAgICAgICsgXCJCNzBFMENCRDZCQjRCRjdGMzIxMzkwQjk0QTAzQzFEMzU2QzIxMTIyMzQzMjgwRDYxMTVDMUQyMVwiXG4gICAgICAgICAgICAgICAgKyBcIkJEMzc2Mzg4QjVGNzIzRkI0QzIyREZFNkNENDM3NUEwNUEwNzQ3NjQ0NEQ1ODE5OTg1MDA3RTM0XCIpO1xuICAgIHJldHVybiBuZXcgWDlFQ1BhcmFtZXRlcnMoY3VydmUsIEcsIG4sIGgpO1xufVxuXG5mdW5jdGlvbiBzZWNwMjU2cjEoKSB7XG4gICAgLy8gcCA9IDJeMjI0ICgyXjMyIC0gMSkgKyAyXjE5MiArIDJeOTYgLSAxXG4gICAgdmFyIHAgPSBmcm9tSGV4KFwiRkZGRkZGRkYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRlwiKTtcbiAgICB2YXIgYSA9IGZyb21IZXgoXCJGRkZGRkZGRjAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDXCIpO1xuICAgIHZhciBiID0gZnJvbUhleChcIjVBQzYzNUQ4QUEzQTkzRTdCM0VCQkQ1NTc2OTg4NkJDNjUxRDA2QjBDQzUzQjBGNjNCQ0UzQzNFMjdEMjYwNEJcIik7XG4gICAgLy9ieXRlW10gUyA9IEhleC5kZWNvZGUoXCJDNDlEMzYwODg2RTcwNDkzNkE2Njc4RTExMzlEMjZCNzgxOUY3RTkwXCIpO1xuICAgIHZhciBuID0gZnJvbUhleChcIkZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGQkNFNkZBQURBNzE3OUU4NEYzQjlDQUMyRkM2MzI1NTFcIik7XG4gICAgdmFyIGggPSBCaWdJbnRlZ2VyLk9ORTtcbiAgICB2YXIgY3VydmUgPSBuZXcgRUNDdXJ2ZUZwKHAsIGEsIGIpO1xuICAgIHZhciBHID0gY3VydmUuZGVjb2RlUG9pbnRIZXgoXCIwNFwiXG4gICAgICAgICAgICAgICAgKyBcIjZCMTdEMUYyRTEyQzQyNDdGOEJDRTZFNTYzQTQ0MEYyNzcwMzdEODEyREVCMzNBMEY0QTEzOTQ1RDg5OEMyOTZcIlxuXHRcdCsgXCI0RkUzNDJFMkZFMUE3RjlCOEVFN0VCNEE3QzBGOUUxNjJCQ0UzMzU3NkIzMTVFQ0VDQkI2NDA2ODM3QkY1MUY1XCIpO1xuICAgIHJldHVybiBuZXcgWDlFQ1BhcmFtZXRlcnMoY3VydmUsIEcsIG4sIGgpO1xufVxuXG4vLyBUT0RPOiBtYWtlIHRoaXMgaW50byBhIHByb3BlciBoYXNodGFibGVcbmZ1bmN0aW9uIGdldFNFQ0N1cnZlQnlOYW1lKG5hbWUpIHtcbiAgICBpZihuYW1lID09IFwic2VjcDEyOHIxXCIpIHJldHVybiBzZWNwMTI4cjEoKTtcbiAgICBpZihuYW1lID09IFwic2VjcDE2MGsxXCIpIHJldHVybiBzZWNwMTYwazEoKTtcbiAgICBpZihuYW1lID09IFwic2VjcDE2MHIxXCIpIHJldHVybiBzZWNwMTYwcjEoKTtcbiAgICBpZihuYW1lID09IFwic2VjcDE5MmsxXCIpIHJldHVybiBzZWNwMTkyazEoKTtcbiAgICBpZihuYW1lID09IFwic2VjcDE5MnIxXCIpIHJldHVybiBzZWNwMTkycjEoKTtcbiAgICBpZihuYW1lID09IFwic2VjcDIyNHIxXCIpIHJldHVybiBzZWNwMjI0cjEoKTtcbiAgICBpZihuYW1lID09IFwic2VjcDI1NnIxXCIpIHJldHVybiBzZWNwMjU2cjEoKTtcbiAgICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwic2VjcDEyOHIxXCI6c2VjcDEyOHIxLFxuICBcInNlY3AxNjBrMVwiOnNlY3AxNjBrMSxcbiAgXCJzZWNwMTYwcjFcIjpzZWNwMTYwcjEsXG4gIFwic2VjcDE5MmsxXCI6c2VjcDE5MmsxLFxuICBcInNlY3AxOTJyMVwiOnNlY3AxOTJyMSxcbiAgXCJzZWNwMjI0cjFcIjpzZWNwMjI0cjEsXG4gIFwic2VjcDI1NnIxXCI6c2VjcDI1NnIxXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBlbGxpcHRpYyA9IGV4cG9ydHM7XG5cbmVsbGlwdGljLnZlcnNpb24gPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuZWxsaXB0aWMudXRpbHMgPSByZXF1aXJlKCcuL2VsbGlwdGljL3V0aWxzJyk7XG5lbGxpcHRpYy5yYW5kID0gcmVxdWlyZSgnYnJvcmFuZCcpO1xuZWxsaXB0aWMuY3VydmUgPSByZXF1aXJlKCcuL2VsbGlwdGljL2N1cnZlJyk7XG5lbGxpcHRpYy5jdXJ2ZXMgPSByZXF1aXJlKCcuL2VsbGlwdGljL2N1cnZlcycpO1xuXG4vLyBQcm90b2NvbHNcbmVsbGlwdGljLmVjID0gcmVxdWlyZSgnLi9lbGxpcHRpYy9lYycpO1xuZWxsaXB0aWMuZWRkc2EgPSByZXF1aXJlKCcuL2VsbGlwdGljL2VkZHNhJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgZ2V0TkFGID0gdXRpbHMuZ2V0TkFGO1xudmFyIGdldEpTRiA9IHV0aWxzLmdldEpTRjtcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIEJhc2VDdXJ2ZSh0eXBlLCBjb25mKSB7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMucCA9IG5ldyBCTihjb25mLnAsIDE2KTtcblxuICAvLyBVc2UgTW9udGdvbWVyeSwgd2hlbiB0aGVyZSBpcyBubyBmYXN0IHJlZHVjdGlvbiBmb3IgdGhlIHByaW1lXG4gIHRoaXMucmVkID0gY29uZi5wcmltZSA/IEJOLnJlZChjb25mLnByaW1lKSA6IEJOLm1vbnQodGhpcy5wKTtcblxuICAvLyBVc2VmdWwgZm9yIG1hbnkgY3VydmVzXG4gIHRoaXMuemVybyA9IG5ldyBCTigwKS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMub25lID0gbmV3IEJOKDEpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy50d28gPSBuZXcgQk4oMikudG9SZWQodGhpcy5yZWQpO1xuXG4gIC8vIEN1cnZlIGNvbmZpZ3VyYXRpb24sIG9wdGlvbmFsXG4gIHRoaXMubiA9IGNvbmYubiAmJiBuZXcgQk4oY29uZi5uLCAxNik7XG4gIHRoaXMuZyA9IGNvbmYuZyAmJiB0aGlzLnBvaW50RnJvbUpTT04oY29uZi5nLCBjb25mLmdSZWQpO1xuXG4gIC8vIFRlbXBvcmFyeSBhcnJheXNcbiAgdGhpcy5fd25hZlQxID0gbmV3IEFycmF5KDQpO1xuICB0aGlzLl93bmFmVDIgPSBuZXcgQXJyYXkoNCk7XG4gIHRoaXMuX3duYWZUMyA9IG5ldyBBcnJheSg0KTtcbiAgdGhpcy5fd25hZlQ0ID0gbmV3IEFycmF5KDQpO1xuXG4gIC8vIEdlbmVyYWxpemVkIEdyZWcgTWF4d2VsbCdzIHRyaWNrXG4gIHZhciBhZGp1c3RDb3VudCA9IHRoaXMubiAmJiB0aGlzLnAuZGl2KHRoaXMubik7XG4gIGlmICghYWRqdXN0Q291bnQgfHwgYWRqdXN0Q291bnQuY21wbigxMDApID4gMCkge1xuICAgIHRoaXMucmVkTiA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbWF4d2VsbFRyaWNrID0gdHJ1ZTtcbiAgICB0aGlzLnJlZE4gPSB0aGlzLm4udG9SZWQodGhpcy5yZWQpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VDdXJ2ZTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS5wb2ludCA9IGZ1bmN0aW9uIHBvaW50KCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuQmFzZUN1cnZlLnByb3RvdHlwZS5fZml4ZWROYWZNdWwgPSBmdW5jdGlvbiBfZml4ZWROYWZNdWwocCwgaykge1xuICBhc3NlcnQocC5wcmVjb21wdXRlZCk7XG4gIHZhciBkb3VibGVzID0gcC5fZ2V0RG91YmxlcygpO1xuXG4gIHZhciBuYWYgPSBnZXROQUYoaywgMSk7XG4gIHZhciBJID0gKDEgPDwgKGRvdWJsZXMuc3RlcCArIDEpKSAtIChkb3VibGVzLnN0ZXAgJSAyID09PSAwID8gMiA6IDEpO1xuICBJIC89IDM7XG5cbiAgLy8gVHJhbnNsYXRlIGludG8gbW9yZSB3aW5kb3dlZCBmb3JtXG4gIHZhciByZXByID0gW107XG4gIGZvciAodmFyIGogPSAwOyBqIDwgbmFmLmxlbmd0aDsgaiArPSBkb3VibGVzLnN0ZXApIHtcbiAgICB2YXIgbmFmVyA9IDA7XG4gICAgZm9yICh2YXIgayA9IGogKyBkb3VibGVzLnN0ZXAgLSAxOyBrID49IGo7IGstLSlcbiAgICAgIG5hZlcgPSAobmFmVyA8PCAxKSArIG5hZltrXTtcbiAgICByZXByLnB1c2gobmFmVyk7XG4gIH1cblxuICB2YXIgYSA9IHRoaXMuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICB2YXIgYiA9IHRoaXMuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICBmb3IgKHZhciBpID0gSTsgaSA+IDA7IGktLSkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVwci5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIG5hZlcgPSByZXByW2pdO1xuICAgICAgaWYgKG5hZlcgPT09IGkpXG4gICAgICAgIGIgPSBiLm1peGVkQWRkKGRvdWJsZXMucG9pbnRzW2pdKTtcbiAgICAgIGVsc2UgaWYgKG5hZlcgPT09IC1pKVxuICAgICAgICBiID0gYi5taXhlZEFkZChkb3VibGVzLnBvaW50c1tqXS5uZWcoKSk7XG4gICAgfVxuICAgIGEgPSBhLmFkZChiKTtcbiAgfVxuICByZXR1cm4gYS50b1AoKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuX3duYWZNdWwgPSBmdW5jdGlvbiBfd25hZk11bChwLCBrKSB7XG4gIHZhciB3ID0gNDtcblxuICAvLyBQcmVjb21wdXRlIHdpbmRvd1xuICB2YXIgbmFmUG9pbnRzID0gcC5fZ2V0TkFGUG9pbnRzKHcpO1xuICB3ID0gbmFmUG9pbnRzLnduZDtcbiAgdmFyIHduZCA9IG5hZlBvaW50cy5wb2ludHM7XG5cbiAgLy8gR2V0IE5BRiBmb3JtXG4gIHZhciBuYWYgPSBnZXROQUYoaywgdyk7XG5cbiAgLy8gQWRkIGB0aGlzYCooTisxKSBmb3IgZXZlcnkgdy1OQUYgaW5kZXhcbiAgdmFyIGFjYyA9IHRoaXMuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuICBmb3IgKHZhciBpID0gbmFmLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgLy8gQ291bnQgemVyb2VzXG4gICAgZm9yICh2YXIgayA9IDA7IGkgPj0gMCAmJiBuYWZbaV0gPT09IDA7IGktLSlcbiAgICAgIGsrKztcbiAgICBpZiAoaSA+PSAwKVxuICAgICAgaysrO1xuICAgIGFjYyA9IGFjYy5kYmxwKGspO1xuXG4gICAgaWYgKGkgPCAwKVxuICAgICAgYnJlYWs7XG4gICAgdmFyIHogPSBuYWZbaV07XG4gICAgYXNzZXJ0KHogIT09IDApO1xuICAgIGlmIChwLnR5cGUgPT09ICdhZmZpbmUnKSB7XG4gICAgICAvLyBKICstIFBcbiAgICAgIGlmICh6ID4gMClcbiAgICAgICAgYWNjID0gYWNjLm1peGVkQWRkKHduZFsoeiAtIDEpID4+IDFdKTtcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjID0gYWNjLm1peGVkQWRkKHduZFsoLXogLSAxKSA+PiAxXS5uZWcoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEogKy0gSlxuICAgICAgaWYgKHogPiAwKVxuICAgICAgICBhY2MgPSBhY2MuYWRkKHduZFsoeiAtIDEpID4+IDFdKTtcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjID0gYWNjLmFkZCh3bmRbKC16IC0gMSkgPj4gMV0ubmVnKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcC50eXBlID09PSAnYWZmaW5lJyA/IGFjYy50b1AoKSA6IGFjYztcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuX3duYWZNdWxBZGQgPSBmdW5jdGlvbiBfd25hZk11bEFkZChkZWZXLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmZnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphY29iaWFuUmVzdWx0KSB7XG4gIHZhciB3bmRXaWR0aCA9IHRoaXMuX3duYWZUMTtcbiAgdmFyIHduZCA9IHRoaXMuX3duYWZUMjtcbiAgdmFyIG5hZiA9IHRoaXMuX3duYWZUMztcblxuICAvLyBGaWxsIGFsbCBhcnJheXNcbiAgdmFyIG1heCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgcCA9IHBvaW50c1tpXTtcbiAgICB2YXIgbmFmUG9pbnRzID0gcC5fZ2V0TkFGUG9pbnRzKGRlZlcpO1xuICAgIHduZFdpZHRoW2ldID0gbmFmUG9pbnRzLnduZDtcbiAgICB3bmRbaV0gPSBuYWZQb2ludHMucG9pbnRzO1xuICB9XG5cbiAgLy8gQ29tYiBzbWFsbCB3aW5kb3cgTkFGc1xuICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAxOyBpIC09IDIpIHtcbiAgICB2YXIgYSA9IGkgLSAxO1xuICAgIHZhciBiID0gaTtcbiAgICBpZiAod25kV2lkdGhbYV0gIT09IDEgfHwgd25kV2lkdGhbYl0gIT09IDEpIHtcbiAgICAgIG5hZlthXSA9IGdldE5BRihjb2VmZnNbYV0sIHduZFdpZHRoW2FdKTtcbiAgICAgIG5hZltiXSA9IGdldE5BRihjb2VmZnNbYl0sIHduZFdpZHRoW2JdKTtcbiAgICAgIG1heCA9IE1hdGgubWF4KG5hZlthXS5sZW5ndGgsIG1heCk7XG4gICAgICBtYXggPSBNYXRoLm1heChuYWZbYl0ubGVuZ3RoLCBtYXgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGNvbWIgPSBbXG4gICAgICBwb2ludHNbYV0sIC8qIDEgKi9cbiAgICAgIG51bGwsIC8qIDMgKi9cbiAgICAgIG51bGwsIC8qIDUgKi9cbiAgICAgIHBvaW50c1tiXSAvKiA3ICovXG4gICAgXTtcblxuICAgIC8vIFRyeSB0byBhdm9pZCBQcm9qZWN0aXZlIHBvaW50cywgaWYgcG9zc2libGVcbiAgICBpZiAocG9pbnRzW2FdLnkuY21wKHBvaW50c1tiXS55KSA9PT0gMCkge1xuICAgICAgY29tYlsxXSA9IHBvaW50c1thXS5hZGQocG9pbnRzW2JdKTtcbiAgICAgIGNvbWJbMl0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdLm5lZygpKTtcbiAgICB9IGVsc2UgaWYgKHBvaW50c1thXS55LmNtcChwb2ludHNbYl0ueS5yZWROZWcoKSkgPT09IDApIHtcbiAgICAgIGNvbWJbMV0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdKTtcbiAgICAgIGNvbWJbMl0gPSBwb2ludHNbYV0uYWRkKHBvaW50c1tiXS5uZWcoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbWJbMV0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdKTtcbiAgICAgIGNvbWJbMl0gPSBwb2ludHNbYV0udG9KKCkubWl4ZWRBZGQocG9pbnRzW2JdLm5lZygpKTtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBbXG4gICAgICAtMywgLyogLTEgLTEgKi9cbiAgICAgIC0xLCAvKiAtMSAwICovXG4gICAgICAtNSwgLyogLTEgMSAqL1xuICAgICAgLTcsIC8qIDAgLTEgKi9cbiAgICAgIDAsIC8qIDAgMCAqL1xuICAgICAgNywgLyogMCAxICovXG4gICAgICA1LCAvKiAxIC0xICovXG4gICAgICAxLCAvKiAxIDAgKi9cbiAgICAgIDMgIC8qIDEgMSAqL1xuICAgIF07XG5cbiAgICB2YXIganNmID0gZ2V0SlNGKGNvZWZmc1thXSwgY29lZmZzW2JdKTtcbiAgICBtYXggPSBNYXRoLm1heChqc2ZbMF0ubGVuZ3RoLCBtYXgpO1xuICAgIG5hZlthXSA9IG5ldyBBcnJheShtYXgpO1xuICAgIG5hZltiXSA9IG5ldyBBcnJheShtYXgpO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF4OyBqKyspIHtcbiAgICAgIHZhciBqYSA9IGpzZlswXVtqXSB8IDA7XG4gICAgICB2YXIgamIgPSBqc2ZbMV1bal0gfCAwO1xuXG4gICAgICBuYWZbYV1bal0gPSBpbmRleFsoamEgKyAxKSAqIDMgKyAoamIgKyAxKV07XG4gICAgICBuYWZbYl1bal0gPSAwO1xuICAgICAgd25kW2FdID0gY29tYjtcbiAgICB9XG4gIH1cblxuICB2YXIgYWNjID0gdGhpcy5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gIHZhciB0bXAgPSB0aGlzLl93bmFmVDQ7XG4gIGZvciAodmFyIGkgPSBtYXg7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGsgPSAwO1xuXG4gICAgd2hpbGUgKGkgPj0gMCkge1xuICAgICAgdmFyIHplcm8gPSB0cnVlO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW47IGorKykge1xuICAgICAgICB0bXBbal0gPSBuYWZbal1baV0gfCAwO1xuICAgICAgICBpZiAodG1wW2pdICE9PSAwKVxuICAgICAgICAgIHplcm8gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghemVybylcbiAgICAgICAgYnJlYWs7XG4gICAgICBrKys7XG4gICAgICBpLS07XG4gICAgfVxuICAgIGlmIChpID49IDApXG4gICAgICBrKys7XG4gICAgYWNjID0gYWNjLmRibHAoayk7XG4gICAgaWYgKGkgPCAwKVxuICAgICAgYnJlYWs7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICB2YXIgeiA9IHRtcFtqXTtcbiAgICAgIHZhciBwO1xuICAgICAgaWYgKHogPT09IDApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgZWxzZSBpZiAoeiA+IDApXG4gICAgICAgIHAgPSB3bmRbal1bKHogLSAxKSA+PiAxXTtcbiAgICAgIGVsc2UgaWYgKHogPCAwKVxuICAgICAgICBwID0gd25kW2pdWygteiAtIDEpID4+IDFdLm5lZygpO1xuXG4gICAgICBpZiAocC50eXBlID09PSAnYWZmaW5lJylcbiAgICAgICAgYWNjID0gYWNjLm1peGVkQWRkKHApO1xuICAgICAgZWxzZVxuICAgICAgICBhY2MgPSBhY2MuYWRkKHApO1xuICAgIH1cbiAgfVxuICAvLyBaZXJvaWZ5IHJlZmVyZW5jZXNcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICB3bmRbaV0gPSBudWxsO1xuXG4gIGlmIChqYWNvYmlhblJlc3VsdClcbiAgICByZXR1cm4gYWNjO1xuICBlbHNlXG4gICAgcmV0dXJuIGFjYy50b1AoKTtcbn07XG5cbmZ1bmN0aW9uIEJhc2VQb2ludChjdXJ2ZSwgdHlwZSkge1xuICB0aGlzLmN1cnZlID0gY3VydmU7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMucHJlY29tcHV0ZWQgPSBudWxsO1xufVxuQmFzZUN1cnZlLkJhc2VQb2ludCA9IEJhc2VQb2ludDtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKC8qb3RoZXIqLykge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKTtcbn07XG5cbkJhc2VDdXJ2ZS5wcm90b3R5cGUuZGVjb2RlUG9pbnQgPSBmdW5jdGlvbiBkZWNvZGVQb2ludChieXRlcywgZW5jKSB7XG4gIGJ5dGVzID0gdXRpbHMudG9BcnJheShieXRlcywgZW5jKTtcblxuICB2YXIgbGVuID0gdGhpcy5wLmJ5dGVMZW5ndGgoKTtcblxuICAvLyB1bmNvbXByZXNzZWQsIGh5YnJpZC1vZGQsIGh5YnJpZC1ldmVuXG4gIGlmICgoYnl0ZXNbMF0gPT09IDB4MDQgfHwgYnl0ZXNbMF0gPT09IDB4MDYgfHwgYnl0ZXNbMF0gPT09IDB4MDcpICYmXG4gICAgICBieXRlcy5sZW5ndGggLSAxID09PSAyICogbGVuKSB7XG4gICAgaWYgKGJ5dGVzWzBdID09PSAweDA2KVxuICAgICAgYXNzZXJ0KGJ5dGVzW2J5dGVzLmxlbmd0aCAtIDFdICUgMiA9PT0gMCk7XG4gICAgZWxzZSBpZiAoYnl0ZXNbMF0gPT09IDB4MDcpXG4gICAgICBhc3NlcnQoYnl0ZXNbYnl0ZXMubGVuZ3RoIC0gMV0gJSAyID09PSAxKTtcblxuICAgIHZhciByZXMgPSAgdGhpcy5wb2ludChieXRlcy5zbGljZSgxLCAxICsgbGVuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMuc2xpY2UoMSArIGxlbiwgMSArIDIgKiBsZW4pKTtcblxuICAgIHJldHVybiByZXM7XG4gIH0gZWxzZSBpZiAoKGJ5dGVzWzBdID09PSAweDAyIHx8IGJ5dGVzWzBdID09PSAweDAzKSAmJlxuICAgICAgICAgICAgICBieXRlcy5sZW5ndGggLSAxID09PSBsZW4pIHtcbiAgICByZXR1cm4gdGhpcy5wb2ludEZyb21YKGJ5dGVzLnNsaWNlKDEsIDEgKyBsZW4pLCBieXRlc1swXSA9PT0gMHgwMyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHBvaW50IGZvcm1hdCcpO1xufTtcblxuQmFzZVBvaW50LnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkID0gZnVuY3Rpb24gZW5jb2RlQ29tcHJlc3NlZChlbmMpIHtcbiAgcmV0dXJuIHRoaXMuZW5jb2RlKGVuYywgdHJ1ZSk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9lbmNvZGUgPSBmdW5jdGlvbiBfZW5jb2RlKGNvbXBhY3QpIHtcbiAgdmFyIGxlbiA9IHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCk7XG4gIHZhciB4ID0gdGhpcy5nZXRYKCkudG9BcnJheSgnYmUnLCBsZW4pO1xuXG4gIGlmIChjb21wYWN0KVxuICAgIHJldHVybiBbIHRoaXMuZ2V0WSgpLmlzRXZlbigpID8gMHgwMiA6IDB4MDMgXS5jb25jYXQoeCk7XG5cbiAgcmV0dXJuIFsgMHgwNCBdLmNvbmNhdCh4LCB0aGlzLmdldFkoKS50b0FycmF5KCdiZScsIGxlbikpIDtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGVuYywgY29tcGFjdCkge1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMuX2VuY29kZShjb21wYWN0KSwgZW5jKTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUucHJlY29tcHV0ZSA9IGZ1bmN0aW9uIHByZWNvbXB1dGUocG93ZXIpIHtcbiAgaWYgKHRoaXMucHJlY29tcHV0ZWQpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgdmFyIHByZWNvbXB1dGVkID0ge1xuICAgIGRvdWJsZXM6IG51bGwsXG4gICAgbmFmOiBudWxsLFxuICAgIGJldGE6IG51bGxcbiAgfTtcbiAgcHJlY29tcHV0ZWQubmFmID0gdGhpcy5fZ2V0TkFGUG9pbnRzKDgpO1xuICBwcmVjb21wdXRlZC5kb3VibGVzID0gdGhpcy5fZ2V0RG91Ymxlcyg0LCBwb3dlcik7XG4gIHByZWNvbXB1dGVkLmJldGEgPSB0aGlzLl9nZXRCZXRhKCk7XG4gIHRoaXMucHJlY29tcHV0ZWQgPSBwcmVjb21wdXRlZDtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2hhc0RvdWJsZXMgPSBmdW5jdGlvbiBfaGFzRG91YmxlcyhrKSB7XG4gIGlmICghdGhpcy5wcmVjb21wdXRlZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGRvdWJsZXMgPSB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7XG4gIGlmICghZG91YmxlcylcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIGRvdWJsZXMucG9pbnRzLmxlbmd0aCA+PSBNYXRoLmNlaWwoKGsuYml0TGVuZ3RoKCkgKyAxKSAvIGRvdWJsZXMuc3RlcCk7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLl9nZXREb3VibGVzID0gZnVuY3Rpb24gX2dldERvdWJsZXMoc3RlcCwgcG93ZXIpIHtcbiAgaWYgKHRoaXMucHJlY29tcHV0ZWQgJiYgdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKVxuICAgIHJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7XG5cbiAgdmFyIGRvdWJsZXMgPSBbIHRoaXMgXTtcbiAgdmFyIGFjYyA9IHRoaXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG93ZXI7IGkgKz0gc3RlcCkge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3RlcDsgaisrKVxuICAgICAgYWNjID0gYWNjLmRibCgpO1xuICAgIGRvdWJsZXMucHVzaChhY2MpO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RlcDogc3RlcCxcbiAgICBwb2ludHM6IGRvdWJsZXNcbiAgfTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2dldE5BRlBvaW50cyA9IGZ1bmN0aW9uIF9nZXROQUZQb2ludHMod25kKSB7XG4gIGlmICh0aGlzLnByZWNvbXB1dGVkICYmIHRoaXMucHJlY29tcHV0ZWQubmFmKVxuICAgIHJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtcblxuICB2YXIgcmVzID0gWyB0aGlzIF07XG4gIHZhciBtYXggPSAoMSA8PCB3bmQpIC0gMTtcbiAgdmFyIGRibCA9IG1heCA9PT0gMSA/IG51bGwgOiB0aGlzLmRibCgpO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IG1heDsgaSsrKVxuICAgIHJlc1tpXSA9IHJlc1tpIC0gMV0uYWRkKGRibCk7XG4gIHJldHVybiB7XG4gICAgd25kOiB3bmQsXG4gICAgcG9pbnRzOiByZXNcbiAgfTtcbn07XG5cbkJhc2VQb2ludC5wcm90b3R5cGUuX2dldEJldGEgPSBmdW5jdGlvbiBfZ2V0QmV0YSgpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG5CYXNlUG9pbnQucHJvdG90eXBlLmRibHAgPSBmdW5jdGlvbiBkYmxwKGspIHtcbiAgdmFyIHIgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGs7IGkrKylcbiAgICByID0gci5kYmwoKTtcbiAgcmV0dXJuIHI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmUgPSByZXF1aXJlKCcuLi9jdXJ2ZScpO1xudmFyIGVsbGlwdGljID0gcmVxdWlyZSgnLi4vLi4vZWxsaXB0aWMnKTtcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIEJhc2UgPSBjdXJ2ZS5iYXNlO1xuXG52YXIgYXNzZXJ0ID0gZWxsaXB0aWMudXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBFZHdhcmRzQ3VydmUoY29uZikge1xuICAvLyBOT1RFOiBJbXBvcnRhbnQgYXMgd2UgYXJlIGNyZWF0aW5nIHBvaW50IGluIEJhc2UuY2FsbCgpXG4gIHRoaXMudHdpc3RlZCA9IChjb25mLmEgfCAwKSAhPT0gMTtcbiAgdGhpcy5tT25lQSA9IHRoaXMudHdpc3RlZCAmJiAoY29uZi5hIHwgMCkgPT09IC0xO1xuICB0aGlzLmV4dGVuZGVkID0gdGhpcy5tT25lQTtcblxuICBCYXNlLmNhbGwodGhpcywgJ2Vkd2FyZHMnLCBjb25mKTtcblxuICB0aGlzLmEgPSBuZXcgQk4oY29uZi5hLCAxNikudW1vZCh0aGlzLnJlZC5tKTtcbiAgdGhpcy5hID0gdGhpcy5hLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5jID0gbmV3IEJOKGNvbmYuYywgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5jMiA9IHRoaXMuYy5yZWRTcXIoKTtcbiAgdGhpcy5kID0gbmV3IEJOKGNvbmYuZCwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgdGhpcy5kZCA9IHRoaXMuZC5yZWRBZGQodGhpcy5kKTtcblxuICBhc3NlcnQoIXRoaXMudHdpc3RlZCB8fCB0aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkgPT09IDApO1xuICB0aGlzLm9uZUMgPSAoY29uZi5jIHwgMCkgPT09IDE7XG59XG5pbmhlcml0cyhFZHdhcmRzQ3VydmUsIEJhc2UpO1xubW9kdWxlLmV4cG9ydHMgPSBFZHdhcmRzQ3VydmU7XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUuX211bEEgPSBmdW5jdGlvbiBfbXVsQShudW0pIHtcbiAgaWYgKHRoaXMubU9uZUEpXG4gICAgcmV0dXJuIG51bS5yZWROZWcoKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmEucmVkTXVsKG51bSk7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLl9tdWxDID0gZnVuY3Rpb24gX211bEMobnVtKSB7XG4gIGlmICh0aGlzLm9uZUMpXG4gICAgcmV0dXJuIG51bTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmMucmVkTXVsKG51bSk7XG59O1xuXG4vLyBKdXN0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggU2hvcnQgY3VydmVcbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUuanBvaW50ID0gZnVuY3Rpb24ganBvaW50KHgsIHksIHosIHQpIHtcbiAgcmV0dXJuIHRoaXMucG9pbnQoeCwgeSwgeiwgdCk7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50RnJvbVggPSBmdW5jdGlvbiBwb2ludEZyb21YKHgsIG9kZCkge1xuICB4ID0gbmV3IEJOKHgsIDE2KTtcbiAgaWYgKCF4LnJlZClcbiAgICB4ID0geC50b1JlZCh0aGlzLnJlZCk7XG5cbiAgdmFyIHgyID0geC5yZWRTcXIoKTtcbiAgdmFyIHJocyA9IHRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoeDIpKTtcbiAgdmFyIGxocyA9IHRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bCh4MikpO1xuXG4gIHZhciB5MiA9IHJocy5yZWRNdWwobGhzLnJlZEludm0oKSk7XG4gIHZhciB5ID0geTIucmVkU3FydCgpO1xuICBpZiAoeS5yZWRTcXIoKS5yZWRTdWIoeTIpLmNtcCh0aGlzLnplcm8pICE9PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwb2ludCcpO1xuXG4gIHZhciBpc09kZCA9IHkuZnJvbVJlZCgpLmlzT2RkKCk7XG4gIGlmIChvZGQgJiYgIWlzT2RkIHx8ICFvZGQgJiYgaXNPZGQpXG4gICAgeSA9IHkucmVkTmVnKCk7XG5cbiAgcmV0dXJuIHRoaXMucG9pbnQoeCwgeSk7XG59O1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50RnJvbVkgPSBmdW5jdGlvbiBwb2ludEZyb21ZKHksIG9kZCkge1xuICB5ID0gbmV3IEJOKHksIDE2KTtcbiAgaWYgKCF5LnJlZClcbiAgICB5ID0geS50b1JlZCh0aGlzLnJlZCk7XG5cbiAgLy8geF4yID0gKHleMiAtIDEpIC8gKGQgeV4yICsgMSlcbiAgdmFyIHkyID0geS5yZWRTcXIoKTtcbiAgdmFyIGxocyA9IHkyLnJlZFN1Yih0aGlzLm9uZSk7XG4gIHZhciByaHMgPSB5Mi5yZWRNdWwodGhpcy5kKS5yZWRBZGQodGhpcy5vbmUpO1xuICB2YXIgeDIgPSBsaHMucmVkTXVsKHJocy5yZWRJbnZtKCkpO1xuXG4gIGlmICh4Mi5jbXAodGhpcy56ZXJvKSA9PT0gMCkge1xuICAgIGlmIChvZGQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8sIHkpO1xuICB9XG5cbiAgdmFyIHggPSB4Mi5yZWRTcXJ0KCk7XG4gIGlmICh4LnJlZFNxcigpLnJlZFN1Yih4MikuY21wKHRoaXMuemVybykgIT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBvaW50Jyk7XG5cbiAgaWYgKHguaXNPZGQoKSAhPT0gb2RkKVxuICAgIHggPSB4LnJlZE5lZygpO1xuXG4gIHJldHVybiB0aGlzLnBvaW50KHgsIHkpO1xufTtcblxuRWR3YXJkc0N1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIGlmIChwb2ludC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgLy8gQ3VydmU6IEEgKiBYXjIgKyBZXjIgPSBDXjIgKiAoMSArIEQgKiBYXjIgKiBZXjIpXG4gIHBvaW50Lm5vcm1hbGl6ZSgpO1xuXG4gIHZhciB4MiA9IHBvaW50LngucmVkU3FyKCk7XG4gIHZhciB5MiA9IHBvaW50LnkucmVkU3FyKCk7XG4gIHZhciBsaHMgPSB4Mi5yZWRNdWwodGhpcy5hKS5yZWRBZGQoeTIpO1xuICB2YXIgcmhzID0gdGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoeDIpLnJlZE11bCh5MikpKTtcblxuICByZXR1cm4gbGhzLmNtcChyaHMpID09PSAwO1xufTtcblxuZnVuY3Rpb24gUG9pbnQoY3VydmUsIHgsIHksIHosIHQpIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ3Byb2plY3RpdmUnKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeSA9PT0gbnVsbCAmJiB6ID09PSBudWxsKSB7XG4gICAgdGhpcy54ID0gdGhpcy5jdXJ2ZS56ZXJvO1xuICAgIHRoaXMueSA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMueiA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMudCA9IHRoaXMuY3VydmUuemVybztcbiAgICB0aGlzLnpPbmUgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy55ID0gbmV3IEJOKHksIDE2KTtcbiAgICB0aGlzLnogPSB6ID8gbmV3IEJOKHosIDE2KSA6IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMudCA9IHQgJiYgbmV3IEJOKHQsIDE2KTtcbiAgICBpZiAoIXRoaXMueC5yZWQpXG4gICAgICB0aGlzLnggPSB0aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICAgIGlmICghdGhpcy55LnJlZClcbiAgICAgIHRoaXMueSA9IHRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnoucmVkKVxuICAgICAgdGhpcy56ID0gdGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAodGhpcy50ICYmICF0aGlzLnQucmVkKVxuICAgICAgdGhpcy50ID0gdGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICB0aGlzLnpPbmUgPSB0aGlzLnogPT09IHRoaXMuY3VydmUub25lO1xuXG4gICAgLy8gVXNlIGV4dGVuZGVkIGNvb3JkaW5hdGVzXG4gICAgaWYgKHRoaXMuY3VydmUuZXh0ZW5kZWQgJiYgIXRoaXMudCkge1xuICAgICAgdGhpcy50ID0gdGhpcy54LnJlZE11bCh0aGlzLnkpO1xuICAgICAgaWYgKCF0aGlzLnpPbmUpXG4gICAgICAgIHRoaXMudCA9IHRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSk7XG4gICAgfVxuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5FZHdhcmRzQ3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaikge1xuICByZXR1cm4gUG9pbnQuZnJvbUpTT04odGhpcywgb2JqKTtcbn07XG5cbkVkd2FyZHNDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB5LCB6LCB0KSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeSwgeiwgdCk7XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmopIHtcbiAgcmV0dXJuIG5ldyBQb2ludChjdXJ2ZSwgb2JqWzBdLCBvYmpbMV0sIG9ialsyXSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBQb2ludCBJbmZpbml0eT4nO1xuICByZXR1cm4gJzxFQyBQb2ludCB4OiAnICsgdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB5OiAnICsgdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB6OiAnICsgdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwgMikgKyAnPic7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIC8vIFhYWCBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHplcm8gaXMgYWx3YXlzIHplcm8gaW4gcmVkXG4gIHJldHVybiB0aGlzLnguY21wbigwKSA9PT0gMCAmJlxuICAgICAgICAgdGhpcy55LmNtcCh0aGlzLnopID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLl9leHREYmwgPSBmdW5jdGlvbiBfZXh0RGJsKCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1leHRlbmRlZC0xLmh0bWxcbiAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwOC1od2NkXG4gIC8vIDRNICsgNFNcblxuICAvLyBBID0gWDFeMlxuICB2YXIgYSA9IHRoaXMueC5yZWRTcXIoKTtcbiAgLy8gQiA9IFkxXjJcbiAgdmFyIGIgPSB0aGlzLnkucmVkU3FyKCk7XG4gIC8vIEMgPSAyICogWjFeMlxuICB2YXIgYyA9IHRoaXMuei5yZWRTcXIoKTtcbiAgYyA9IGMucmVkSUFkZChjKTtcbiAgLy8gRCA9IGEgKiBBXG4gIHZhciBkID0gdGhpcy5jdXJ2ZS5fbXVsQShhKTtcbiAgLy8gRSA9IChYMSArIFkxKV4yIC0gQSAtIEJcbiAgdmFyIGUgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGIpO1xuICAvLyBHID0gRCArIEJcbiAgdmFyIGcgPSBkLnJlZEFkZChiKTtcbiAgLy8gRiA9IEcgLSBDXG4gIHZhciBmID0gZy5yZWRTdWIoYyk7XG4gIC8vIEggPSBEIC0gQlxuICB2YXIgaCA9IGQucmVkU3ViKGIpO1xuICAvLyBYMyA9IEUgKiBGXG4gIHZhciBueCA9IGUucmVkTXVsKGYpO1xuICAvLyBZMyA9IEcgKiBIXG4gIHZhciBueSA9IGcucmVkTXVsKGgpO1xuICAvLyBUMyA9IEUgKiBIXG4gIHZhciBudCA9IGUucmVkTXVsKGgpO1xuICAvLyBaMyA9IEYgKiBHXG4gIHZhciBueiA9IGYucmVkTXVsKGcpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56LCBudCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX3Byb2pEYmwgPSBmdW5jdGlvbiBfcHJvakRibCgpIHtcbiAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXR3aXN0ZWQtcHJvamVjdGl2ZS5odG1sXG4gIC8vICAgICAjZG91YmxpbmctZGJsLTIwMDgtYmJqbHBcbiAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwNy1ibFxuICAvLyBhbmQgb3RoZXJzXG4gIC8vIEdlbmVyYWxseSAzTSArIDRTIG9yIDJNICsgNFNcblxuICAvLyBCID0gKFgxICsgWTEpXjJcbiAgdmFyIGIgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCk7XG4gIC8vIEMgPSBYMV4yXG4gIHZhciBjID0gdGhpcy54LnJlZFNxcigpO1xuICAvLyBEID0gWTFeMlxuICB2YXIgZCA9IHRoaXMueS5yZWRTcXIoKTtcblxuICB2YXIgbng7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICBpZiAodGhpcy5jdXJ2ZS50d2lzdGVkKSB7XG4gICAgLy8gRSA9IGEgKiBDXG4gICAgdmFyIGUgPSB0aGlzLmN1cnZlLl9tdWxBKGMpO1xuICAgIC8vIEYgPSBFICsgRFxuICAgIHZhciBmID0gZS5yZWRBZGQoZCk7XG4gICAgaWYgKHRoaXMuek9uZSkge1xuICAgICAgLy8gWDMgPSAoQiAtIEMgLSBEKSAqIChGIC0gMilcbiAgICAgIG54ID0gYi5yZWRTdWIoYykucmVkU3ViKGQpLnJlZE11bChmLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpO1xuICAgICAgLy8gWTMgPSBGICogKEUgLSBEKVxuICAgICAgbnkgPSBmLnJlZE11bChlLnJlZFN1YihkKSk7XG4gICAgICAvLyBaMyA9IEZeMiAtIDIgKiBGXG4gICAgICBueiA9IGYucmVkU3FyKCkucmVkU3ViKGYpLnJlZFN1YihmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSCA9IFoxXjJcbiAgICAgIHZhciBoID0gdGhpcy56LnJlZFNxcigpO1xuICAgICAgLy8gSiA9IEYgLSAyICogSFxuICAgICAgdmFyIGogPSBmLnJlZFN1YihoKS5yZWRJU3ViKGgpO1xuICAgICAgLy8gWDMgPSAoQi1DLUQpKkpcbiAgICAgIG54ID0gYi5yZWRTdWIoYykucmVkSVN1YihkKS5yZWRNdWwoaik7XG4gICAgICAvLyBZMyA9IEYgKiAoRSAtIEQpXG4gICAgICBueSA9IGYucmVkTXVsKGUucmVkU3ViKGQpKTtcbiAgICAgIC8vIFozID0gRiAqIEpcbiAgICAgIG56ID0gZi5yZWRNdWwoaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEUgPSBDICsgRFxuICAgIHZhciBlID0gYy5yZWRBZGQoZCk7XG4gICAgLy8gSCA9IChjICogWjEpXjJcbiAgICB2YXIgaCA9IHRoaXMuY3VydmUuX211bEModGhpcy5jLnJlZE11bCh0aGlzLnopKS5yZWRTcXIoKTtcbiAgICAvLyBKID0gRSAtIDIgKiBIXG4gICAgdmFyIGogPSBlLnJlZFN1YihoKS5yZWRTdWIoaCk7XG4gICAgLy8gWDMgPSBjICogKEIgLSBFKSAqIEpcbiAgICBueCA9IHRoaXMuY3VydmUuX211bEMoYi5yZWRJU3ViKGUpKS5yZWRNdWwoaik7XG4gICAgLy8gWTMgPSBjICogRSAqIChDIC0gRClcbiAgICBueSA9IHRoaXMuY3VydmUuX211bEMoZSkucmVkTXVsKGMucmVkSVN1YihkKSk7XG4gICAgLy8gWjMgPSBFICogSlxuICAgIG56ID0gZS5yZWRNdWwoaik7XG4gIH1cbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55LCBueik7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gRG91YmxlIGluIGV4dGVuZGVkIGNvb3JkaW5hdGVzXG4gIGlmICh0aGlzLmN1cnZlLmV4dGVuZGVkKVxuICAgIHJldHVybiB0aGlzLl9leHREYmwoKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLl9wcm9qRGJsKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX2V4dEFkZCA9IGZ1bmN0aW9uIF9leHRBZGQocCkge1xuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tdHdpc3RlZC1leHRlbmRlZC0xLmh0bWxcbiAgLy8gICAgICNhZGRpdGlvbi1hZGQtMjAwOC1od2NkLTNcbiAgLy8gOE1cblxuICAvLyBBID0gKFkxIC0gWDEpICogKFkyIC0gWDIpXG4gIHZhciBhID0gdGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChwLnkucmVkU3ViKHAueCkpO1xuICAvLyBCID0gKFkxICsgWDEpICogKFkyICsgWDIpXG4gIHZhciBiID0gdGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bChwLnkucmVkQWRkKHAueCkpO1xuICAvLyBDID0gVDEgKiBrICogVDJcbiAgdmFyIGMgPSB0aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChwLnQpO1xuICAvLyBEID0gWjEgKiAyICogWjJcbiAgdmFyIGQgPSB0aGlzLnoucmVkTXVsKHAuei5yZWRBZGQocC56KSk7XG4gIC8vIEUgPSBCIC0gQVxuICB2YXIgZSA9IGIucmVkU3ViKGEpO1xuICAvLyBGID0gRCAtIENcbiAgdmFyIGYgPSBkLnJlZFN1YihjKTtcbiAgLy8gRyA9IEQgKyBDXG4gIHZhciBnID0gZC5yZWRBZGQoYyk7XG4gIC8vIEggPSBCICsgQVxuICB2YXIgaCA9IGIucmVkQWRkKGEpO1xuICAvLyBYMyA9IEUgKiBGXG4gIHZhciBueCA9IGUucmVkTXVsKGYpO1xuICAvLyBZMyA9IEcgKiBIXG4gIHZhciBueSA9IGcucmVkTXVsKGgpO1xuICAvLyBUMyA9IEUgKiBIXG4gIHZhciBudCA9IGUucmVkTXVsKGgpO1xuICAvLyBaMyA9IEYgKiBHXG4gIHZhciBueiA9IGYucmVkTXVsKGcpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnksIG56LCBudCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuX3Byb2pBZGQgPSBmdW5jdGlvbiBfcHJvakFkZChwKSB7XG4gIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by10d2lzdGVkLXByb2plY3RpdmUuaHRtbFxuICAvLyAgICAgI2FkZGl0aW9uLWFkZC0yMDA4LWJiamxwXG4gIC8vICAgICAjYWRkaXRpb24tYWRkLTIwMDctYmxcbiAgLy8gMTBNICsgMVNcblxuICAvLyBBID0gWjEgKiBaMlxuICB2YXIgYSA9IHRoaXMuei5yZWRNdWwocC56KTtcbiAgLy8gQiA9IEFeMlxuICB2YXIgYiA9IGEucmVkU3FyKCk7XG4gIC8vIEMgPSBYMSAqIFgyXG4gIHZhciBjID0gdGhpcy54LnJlZE11bChwLngpO1xuICAvLyBEID0gWTEgKiBZMlxuICB2YXIgZCA9IHRoaXMueS5yZWRNdWwocC55KTtcbiAgLy8gRSA9IGQgKiBDICogRFxuICB2YXIgZSA9IHRoaXMuY3VydmUuZC5yZWRNdWwoYykucmVkTXVsKGQpO1xuICAvLyBGID0gQiAtIEVcbiAgdmFyIGYgPSBiLnJlZFN1YihlKTtcbiAgLy8gRyA9IEIgKyBFXG4gIHZhciBnID0gYi5yZWRBZGQoZSk7XG4gIC8vIFgzID0gQSAqIEYgKiAoKFgxICsgWTEpICogKFgyICsgWTIpIC0gQyAtIEQpXG4gIHZhciB0bXAgPSB0aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHAueC5yZWRBZGQocC55KSkucmVkSVN1YihjKS5yZWRJU3ViKGQpO1xuICB2YXIgbnggPSBhLnJlZE11bChmKS5yZWRNdWwodG1wKTtcbiAgdmFyIG55O1xuICB2YXIgbno7XG4gIGlmICh0aGlzLmN1cnZlLnR3aXN0ZWQpIHtcbiAgICAvLyBZMyA9IEEgKiBHICogKEQgLSBhICogQylcbiAgICBueSA9IGEucmVkTXVsKGcpLnJlZE11bChkLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKGMpKSk7XG4gICAgLy8gWjMgPSBGICogR1xuICAgIG56ID0gZi5yZWRNdWwoZyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gWTMgPSBBICogRyAqIChEIC0gQylcbiAgICBueSA9IGEucmVkTXVsKGcpLnJlZE11bChkLnJlZFN1YihjKSk7XG4gICAgLy8gWjMgPSBjICogRiAqIEdcbiAgICBueiA9IHRoaXMuY3VydmUuX211bEMoZikucmVkTXVsKGcpO1xuICB9XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG54LCBueSwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gcDtcbiAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGlmICh0aGlzLmN1cnZlLmV4dGVuZGVkKVxuICAgIHJldHVybiB0aGlzLl9leHRBZGQocCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fcHJvakFkZChwKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICBpZiAodGhpcy5faGFzRG91YmxlcyhrKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcywgayk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLCBrKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWxBZGQgPSBmdW5jdGlvbiBtdWxBZGQoazEsIHAsIGsyKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIFsgdGhpcywgcCBdLCBbIGsxLCBrMiBdLCAyLCBmYWxzZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuam11bEFkZCA9IGZ1bmN0aW9uIGptdWxBZGQoazEsIHAsIGsyKSB7XG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIFsgdGhpcywgcCBdLCBbIGsxLCBrMiBdLCAyLCB0cnVlKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUoKSB7XG4gIGlmICh0aGlzLnpPbmUpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gTm9ybWFsaXplIGNvb3JkaW5hdGVzXG4gIHZhciB6aSA9IHRoaXMuei5yZWRJbnZtKCk7XG4gIHRoaXMueCA9IHRoaXMueC5yZWRNdWwoemkpO1xuICB0aGlzLnkgPSB0aGlzLnkucmVkTXVsKHppKTtcbiAgaWYgKHRoaXMudClcbiAgICB0aGlzLnQgPSB0aGlzLnQucmVkTXVsKHppKTtcbiAgdGhpcy56ID0gdGhpcy5jdXJ2ZS5vbmU7XG4gIHRoaXMuek9uZSA9IHRydWU7XG4gIHJldHVybiB0aGlzO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZygpIHtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ICYmIHRoaXMudC5yZWROZWcoKSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIHRoaXMubm9ybWFsaXplKCk7XG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmdldFkgPSBmdW5jdGlvbiBnZXRZKCkge1xuICB0aGlzLm5vcm1hbGl6ZSgpO1xuICByZXR1cm4gdGhpcy55LmZyb21SZWQoKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKG90aGVyKSB7XG4gIHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuICAgICAgICAgdGhpcy5nZXRYKCkuY21wKG90aGVyLmdldFgoKSkgPT09IDAgJiZcbiAgICAgICAgIHRoaXMuZ2V0WSgpLmNtcChvdGhlci5nZXRZKCkpID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmVxWFRvUCA9IGZ1bmN0aW9uIGVxWFRvUCh4KSB7XG4gIHZhciByeCA9IHgudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO1xuICBpZiAodGhpcy54LmNtcChyeCkgPT09IDApXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHhjID0geC5jbG9uZSgpO1xuICB2YXIgdCA9IHRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTtcbiAgZm9yICg7Oykge1xuICAgIHhjLmlhZGQodGhpcy5jdXJ2ZS5uKTtcbiAgICBpZiAoeGMuY21wKHRoaXMuY3VydmUucCkgPj0gMClcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHJ4LnJlZElBZGQodCk7XG4gICAgaWYgKHRoaXMueC5jbXAocngpID09PSAwKVxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gQ29tcGF0aWJpbGl0eSB3aXRoIEJhc2VDdXJ2ZVxuUG9pbnQucHJvdG90eXBlLnRvUCA9IFBvaW50LnByb3RvdHlwZS5ub3JtYWxpemU7XG5Qb2ludC5wcm90b3R5cGUubWl4ZWRBZGQgPSBQb2ludC5wcm90b3R5cGUuYWRkO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3VydmUgPSBleHBvcnRzO1xuXG5jdXJ2ZS5iYXNlID0gcmVxdWlyZSgnLi9iYXNlJyk7XG5jdXJ2ZS5zaG9ydCA9IHJlcXVpcmUoJy4vc2hvcnQnKTtcbmN1cnZlLm1vbnQgPSByZXF1aXJlKCcuL21vbnQnKTtcbmN1cnZlLmVkd2FyZHMgPSByZXF1aXJlKCcuL2Vkd2FyZHMnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gcmVxdWlyZSgnLi4vY3VydmUnKTtcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIEJhc2UgPSBjdXJ2ZS5iYXNlO1xuXG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG5cbmZ1bmN0aW9uIE1vbnRDdXJ2ZShjb25mKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnbW9udCcsIGNvbmYpO1xuXG4gIHRoaXMuYSA9IG5ldyBCTihjb25mLmEsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuYiA9IG5ldyBCTihjb25mLmIsIDE2KS50b1JlZCh0aGlzLnJlZCk7XG4gIHRoaXMuaTQgPSBuZXcgQk4oNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKTtcbiAgdGhpcy50d28gPSBuZXcgQk4oMikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmEyNCA9IHRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKTtcbn1cbmluaGVyaXRzKE1vbnRDdXJ2ZSwgQmFzZSk7XG5tb2R1bGUuZXhwb3J0cyA9IE1vbnRDdXJ2ZTtcblxuTW9udEN1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIHZhciB4ID0gcG9pbnQubm9ybWFsaXplKCkueDtcbiAgdmFyIHgyID0geC5yZWRTcXIoKTtcbiAgdmFyIHJocyA9IHgyLnJlZE11bCh4KS5yZWRBZGQoeDIucmVkTXVsKHRoaXMuYSkpLnJlZEFkZCh4KTtcbiAgdmFyIHkgPSByaHMucmVkU3FydCgpO1xuXG4gIHJldHVybiB5LnJlZFNxcigpLmNtcChyaHMpID09PSAwO1xufTtcblxuZnVuY3Rpb24gUG9pbnQoY3VydmUsIHgsIHopIHtcbiAgQmFzZS5CYXNlUG9pbnQuY2FsbCh0aGlzLCBjdXJ2ZSwgJ3Byb2plY3RpdmUnKTtcbiAgaWYgKHggPT09IG51bGwgJiYgeiA9PT0gbnVsbCkge1xuICAgIHRoaXMueCA9IHRoaXMuY3VydmUub25lO1xuICAgIHRoaXMueiA9IHRoaXMuY3VydmUuemVybztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSBuZXcgQk4oeCwgMTYpO1xuICAgIHRoaXMueiA9IG5ldyBCTih6LCAxNik7XG4gICAgaWYgKCF0aGlzLngucmVkKVxuICAgICAgdGhpcy54ID0gdGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICBpZiAoIXRoaXMuei5yZWQpXG4gICAgICB0aGlzLnogPSB0aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5Nb250Q3VydmUucHJvdG90eXBlLmRlY29kZVBvaW50ID0gZnVuY3Rpb24gZGVjb2RlUG9pbnQoYnl0ZXMsIGVuYykge1xuICByZXR1cm4gdGhpcy5wb2ludCh1dGlscy50b0FycmF5KGJ5dGVzLCBlbmMpLCAxKTtcbn07XG5cbk1vbnRDdXJ2ZS5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbiBwb2ludCh4LCB6KSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeik7XG59O1xuXG5Nb250Q3VydmUucHJvdG90eXBlLnBvaW50RnJvbUpTT04gPSBmdW5jdGlvbiBwb2ludEZyb21KU09OKG9iaikge1xuICByZXR1cm4gUG9pbnQuZnJvbUpTT04odGhpcywgb2JqKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5wcmVjb21wdXRlID0gZnVuY3Rpb24gcHJlY29tcHV0ZSgpIHtcbiAgLy8gTm8tb3Bcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZW5jb2RlID0gZnVuY3Rpb24gX2VuY29kZSgpIHtcbiAgcmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoJ2JlJywgdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSk7XG59O1xuXG5Qb2ludC5mcm9tSlNPTiA9IGZ1bmN0aW9uIGZyb21KU09OKGN1cnZlLCBvYmopIHtcbiAgcmV0dXJuIG5ldyBQb2ludChjdXJ2ZSwgb2JqWzBdLCBvYmpbMV0gfHwgY3VydmUub25lKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIFBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIFBvaW50IHg6ICcgKyB0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHo6ICcgKyB0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgLy8gWFhYIFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgemVybyBpcyBhbHdheXMgemVybyBpbiByZWRcbiAgcmV0dXJuIHRoaXMuei5jbXBuKDApID09PSAwO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmRibCA9IGZ1bmN0aW9uIGRibCgpIHtcbiAgLy8gaHR0cDovL2h5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1tb250Z29tLXh6Lmh0bWwjZG91YmxpbmctZGJsLTE5ODctbS0zXG4gIC8vIDJNICsgMlMgKyA0QVxuXG4gIC8vIEEgPSBYMSArIFoxXG4gIHZhciBhID0gdGhpcy54LnJlZEFkZCh0aGlzLnopO1xuICAvLyBBQSA9IEFeMlxuICB2YXIgYWEgPSBhLnJlZFNxcigpO1xuICAvLyBCID0gWDEgLSBaMVxuICB2YXIgYiA9IHRoaXMueC5yZWRTdWIodGhpcy56KTtcbiAgLy8gQkIgPSBCXjJcbiAgdmFyIGJiID0gYi5yZWRTcXIoKTtcbiAgLy8gQyA9IEFBIC0gQkJcbiAgdmFyIGMgPSBhYS5yZWRTdWIoYmIpO1xuICAvLyBYMyA9IEFBICogQkJcbiAgdmFyIG54ID0gYWEucmVkTXVsKGJiKTtcbiAgLy8gWjMgPSBDICogKEJCICsgQTI0ICogQylcbiAgdmFyIG56ID0gYy5yZWRNdWwoYmIucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChjKSkpO1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChueCwgbnopO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUnKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kaWZmQWRkID0gZnVuY3Rpb24gZGlmZkFkZChwLCBkaWZmKSB7XG4gIC8vIGh0dHA6Ly9oeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tbW9udGdvbS14ei5odG1sI2RpZmZhZGQtZGFkZC0xOTg3LW0tM1xuICAvLyA0TSArIDJTICsgNkFcblxuICAvLyBBID0gWDIgKyBaMlxuICB2YXIgYSA9IHRoaXMueC5yZWRBZGQodGhpcy56KTtcbiAgLy8gQiA9IFgyIC0gWjJcbiAgdmFyIGIgPSB0aGlzLngucmVkU3ViKHRoaXMueik7XG4gIC8vIEMgPSBYMyArIFozXG4gIHZhciBjID0gcC54LnJlZEFkZChwLnopO1xuICAvLyBEID0gWDMgLSBaM1xuICB2YXIgZCA9IHAueC5yZWRTdWIocC56KTtcbiAgLy8gREEgPSBEICogQVxuICB2YXIgZGEgPSBkLnJlZE11bChhKTtcbiAgLy8gQ0IgPSBDICogQlxuICB2YXIgY2IgPSBjLnJlZE11bChiKTtcbiAgLy8gWDUgPSBaMSAqIChEQSArIENCKV4yXG4gIHZhciBueCA9IGRpZmYuei5yZWRNdWwoZGEucmVkQWRkKGNiKS5yZWRTcXIoKSk7XG4gIC8vIFo1ID0gWDEgKiAoREEgLSBDQileMlxuICB2YXIgbnogPSBkaWZmLngucmVkTXVsKGRhLnJlZElTdWIoY2IpLnJlZFNxcigpKTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG56KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwoaykge1xuICB2YXIgdCA9IGsuY2xvbmUoKTtcbiAgdmFyIGEgPSB0aGlzOyAvLyAoTiAvIDIpICogUSArIFFcbiAgdmFyIGIgPSB0aGlzLmN1cnZlLnBvaW50KG51bGwsIG51bGwpOyAvLyAoTiAvIDIpICogUVxuICB2YXIgYyA9IHRoaXM7IC8vIFFcblxuICBmb3IgKHZhciBiaXRzID0gW107IHQuY21wbigwKSAhPT0gMDsgdC5pdXNocm4oMSkpXG4gICAgYml0cy5wdXNoKHQuYW5kbG4oMSkpO1xuXG4gIGZvciAodmFyIGkgPSBiaXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGJpdHNbaV0gPT09IDApIHtcbiAgICAgIC8vIE4gKiBRICsgUSA9ICgoTiAvIDIpICogUSArIFEpKSArIChOIC8gMikgKiBRXG4gICAgICBhID0gYS5kaWZmQWRkKGIsIGMpO1xuICAgICAgLy8gTiAqIFEgPSAyICogKChOIC8gMikgKiBRICsgUSkpXG4gICAgICBiID0gYi5kYmwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTiAqIFEgPSAoKE4gLyAyKSAqIFEgKyBRKSArICgoTiAvIDIpICogUSlcbiAgICAgIGIgPSBhLmRpZmZBZGQoYiwgYyk7XG4gICAgICAvLyBOICogUSArIFEgPSAyICogKChOIC8gMikgKiBRICsgUSlcbiAgICAgIGEgPSBhLmRibCgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYjtcbn07XG5cblBvaW50LnByb3RvdHlwZS5tdWxBZGQgPSBmdW5jdGlvbiBtdWxBZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuanVtbEFkZCA9IGZ1bmN0aW9uIGp1bWxBZGQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlJyk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShvdGhlcikge1xuICByZXR1cm4gdGhpcy5nZXRYKCkuY21wKG90aGVyLmdldFgoKSkgPT09IDA7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubm9ybWFsaXplID0gZnVuY3Rpb24gbm9ybWFsaXplKCkge1xuICB0aGlzLnggPSB0aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpO1xuICB0aGlzLnogPSB0aGlzLmN1cnZlLm9uZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WCA9IGZ1bmN0aW9uIGdldFgoKSB7XG4gIC8vIE5vcm1hbGl6ZSBjb29yZGluYXRlc1xuICB0aGlzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiB0aGlzLnguZnJvbVJlZCgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGN1cnZlID0gcmVxdWlyZSgnLi4vY3VydmUnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCYXNlID0gY3VydmUuYmFzZTtcblxudmFyIGFzc2VydCA9IGVsbGlwdGljLnV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gU2hvcnRDdXJ2ZShjb25mKSB7XG4gIEJhc2UuY2FsbCh0aGlzLCAnc2hvcnQnLCBjb25mKTtcblxuICB0aGlzLmEgPSBuZXcgQk4oY29uZi5hLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLmIgPSBuZXcgQk4oY29uZi5iLCAxNikudG9SZWQodGhpcy5yZWQpO1xuICB0aGlzLnRpbnYgPSB0aGlzLnR3by5yZWRJbnZtKCk7XG5cbiAgdGhpcy56ZXJvQSA9IHRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSA9PT0gMDtcbiAgdGhpcy50aHJlZUEgPSB0aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpID09PSAwO1xuXG4gIC8vIElmIHRoZSBjdXJ2ZSBpcyBlbmRvbW9ycGhpYywgcHJlY2FsY3VsYXRlIGJldGEgYW5kIGxhbWJkYVxuICB0aGlzLmVuZG8gPSB0aGlzLl9nZXRFbmRvbW9ycGhpc20oY29uZik7XG4gIHRoaXMuX2VuZG9XbmFmVDEgPSBuZXcgQXJyYXkoNCk7XG4gIHRoaXMuX2VuZG9XbmFmVDIgPSBuZXcgQXJyYXkoNCk7XG59XG5pbmhlcml0cyhTaG9ydEN1cnZlLCBCYXNlKTtcbm1vZHVsZS5leHBvcnRzID0gU2hvcnRDdXJ2ZTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbSA9IGZ1bmN0aW9uIF9nZXRFbmRvbW9ycGhpc20oY29uZikge1xuICAvLyBObyBlZmZpY2llbnQgZW5kb21vcnBoaXNtXG4gIGlmICghdGhpcy56ZXJvQSB8fCAhdGhpcy5nIHx8ICF0aGlzLm4gfHwgdGhpcy5wLm1vZG4oMykgIT09IDEpXG4gICAgcmV0dXJuO1xuXG4gIC8vIENvbXB1dGUgYmV0YSBhbmQgbGFtYmRhLCB0aGF0IGxhbWJkYSAqIFAgPSAoYmV0YSAqIFB4OyBQeSlcbiAgdmFyIGJldGE7XG4gIHZhciBsYW1iZGE7XG4gIGlmIChjb25mLmJldGEpIHtcbiAgICBiZXRhID0gbmV3IEJOKGNvbmYuYmV0YSwgMTYpLnRvUmVkKHRoaXMucmVkKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYmV0YXMgPSB0aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtcbiAgICAvLyBDaG9vc2UgdGhlIHNtYWxsZXN0IGJldGFcbiAgICBiZXRhID0gYmV0YXNbMF0uY21wKGJldGFzWzFdKSA8IDAgPyBiZXRhc1swXSA6IGJldGFzWzFdO1xuICAgIGJldGEgPSBiZXRhLnRvUmVkKHRoaXMucmVkKTtcbiAgfVxuICBpZiAoY29uZi5sYW1iZGEpIHtcbiAgICBsYW1iZGEgPSBuZXcgQk4oY29uZi5sYW1iZGEsIDE2KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBDaG9vc2UgdGhlIGxhbWJkYSB0aGF0IGlzIG1hdGNoaW5nIHNlbGVjdGVkIGJldGFcbiAgICB2YXIgbGFtYmRhcyA9IHRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pO1xuICAgIGlmICh0aGlzLmcubXVsKGxhbWJkYXNbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChiZXRhKSkgPT09IDApIHtcbiAgICAgIGxhbWJkYSA9IGxhbWJkYXNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhbWJkYSA9IGxhbWJkYXNbMV07XG4gICAgICBhc3NlcnQodGhpcy5nLm11bChsYW1iZGEpLnguY21wKHRoaXMuZy54LnJlZE11bChiZXRhKSkgPT09IDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBiYXNpcyB2ZWN0b3JzLCB1c2VkIGZvciBiYWxhbmNlZCBsZW5ndGgtdHdvIHJlcHJlc2VudGF0aW9uXG4gIHZhciBiYXNpcztcbiAgaWYgKGNvbmYuYmFzaXMpIHtcbiAgICBiYXNpcyA9IGNvbmYuYmFzaXMubWFwKGZ1bmN0aW9uKHZlYykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYTogbmV3IEJOKHZlYy5hLCAxNiksXG4gICAgICAgIGI6IG5ldyBCTih2ZWMuYiwgMTYpXG4gICAgICB9O1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJhc2lzID0gdGhpcy5fZ2V0RW5kb0Jhc2lzKGxhbWJkYSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJldGE6IGJldGEsXG4gICAgbGFtYmRhOiBsYW1iZGEsXG4gICAgYmFzaXM6IGJhc2lzXG4gIH07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzID0gZnVuY3Rpb24gX2dldEVuZG9Sb290cyhudW0pIHtcbiAgLy8gRmluZCByb290cyBvZiBmb3IgeF4yICsgeCArIDEgaW4gRlxuICAvLyBSb290ID0gKC0xICstIFNxcnQoLTMpKSAvIDJcbiAgLy9cbiAgdmFyIHJlZCA9IG51bSA9PT0gdGhpcy5wID8gdGhpcy5yZWQgOiBCTi5tb250KG51bSk7XG4gIHZhciB0aW52ID0gbmV3IEJOKDIpLnRvUmVkKHJlZCkucmVkSW52bSgpO1xuICB2YXIgbnRpbnYgPSB0aW52LnJlZE5lZygpO1xuXG4gIHZhciBzID0gbmV3IEJOKDMpLnRvUmVkKHJlZCkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bCh0aW52KTtcblxuICB2YXIgbDEgPSBudGludi5yZWRBZGQocykuZnJvbVJlZCgpO1xuICB2YXIgbDIgPSBudGludi5yZWRTdWIocykuZnJvbVJlZCgpO1xuICByZXR1cm4gWyBsMSwgbDIgXTtcbn07XG5cblNob3J0Q3VydmUucHJvdG90eXBlLl9nZXRFbmRvQmFzaXMgPSBmdW5jdGlvbiBfZ2V0RW5kb0Jhc2lzKGxhbWJkYSkge1xuICAvLyBhcHJ4U3FydCA+PSBzcXJ0KHRoaXMubilcbiAgdmFyIGFwcnhTcXJ0ID0gdGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpIC8gMikpO1xuXG4gIC8vIDMuNzRcbiAgLy8gUnVuIEVHQ0QsIHVudGlsIHIoTCArIDEpIDwgYXByeFNxcnRcbiAgdmFyIHUgPSBsYW1iZGE7XG4gIHZhciB2ID0gdGhpcy5uLmNsb25lKCk7XG4gIHZhciB4MSA9IG5ldyBCTigxKTtcbiAgdmFyIHkxID0gbmV3IEJOKDApO1xuICB2YXIgeDIgPSBuZXcgQk4oMCk7XG4gIHZhciB5MiA9IG5ldyBCTigxKTtcblxuICAvLyBOT1RFOiBhbGwgdmVjdG9ycyBhcmUgcm9vdHMgb2Y6IGEgKyBiICogbGFtYmRhID0gMCAobW9kIG4pXG4gIHZhciBhMDtcbiAgdmFyIGIwO1xuICAvLyBGaXJzdCB2ZWN0b3JcbiAgdmFyIGExO1xuICB2YXIgYjE7XG4gIC8vIFNlY29uZCB2ZWN0b3JcbiAgdmFyIGEyO1xuICB2YXIgYjI7XG5cbiAgdmFyIHByZXZSO1xuICB2YXIgaSA9IDA7XG4gIHZhciByO1xuICB2YXIgeDtcbiAgd2hpbGUgKHUuY21wbigwKSAhPT0gMCkge1xuICAgIHZhciBxID0gdi5kaXYodSk7XG4gICAgciA9IHYuc3ViKHEubXVsKHUpKTtcbiAgICB4ID0geDIuc3ViKHEubXVsKHgxKSk7XG4gICAgdmFyIHkgPSB5Mi5zdWIocS5tdWwoeTEpKTtcblxuICAgIGlmICghYTEgJiYgci5jbXAoYXByeFNxcnQpIDwgMCkge1xuICAgICAgYTAgPSBwcmV2Ui5uZWcoKTtcbiAgICAgIGIwID0geDE7XG4gICAgICBhMSA9IHIubmVnKCk7XG4gICAgICBiMSA9IHg7XG4gICAgfSBlbHNlIGlmIChhMSAmJiArK2kgPT09IDIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBwcmV2UiA9IHI7XG5cbiAgICB2ID0gdTtcbiAgICB1ID0gcjtcbiAgICB4MiA9IHgxO1xuICAgIHgxID0geDtcbiAgICB5MiA9IHkxO1xuICAgIHkxID0geTtcbiAgfVxuICBhMiA9IHIubmVnKCk7XG4gIGIyID0geDtcblxuICB2YXIgbGVuMSA9IGExLnNxcigpLmFkZChiMS5zcXIoKSk7XG4gIHZhciBsZW4yID0gYTIuc3FyKCkuYWRkKGIyLnNxcigpKTtcbiAgaWYgKGxlbjIuY21wKGxlbjEpID49IDApIHtcbiAgICBhMiA9IGEwO1xuICAgIGIyID0gYjA7XG4gIH1cblxuICAvLyBOb3JtYWxpemUgc2lnbnNcbiAgaWYgKGExLm5lZ2F0aXZlKSB7XG4gICAgYTEgPSBhMS5uZWcoKTtcbiAgICBiMSA9IGIxLm5lZygpO1xuICB9XG4gIGlmIChhMi5uZWdhdGl2ZSkge1xuICAgIGEyID0gYTIubmVnKCk7XG4gICAgYjIgPSBiMi5uZWcoKTtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgeyBhOiBhMSwgYjogYjEgfSxcbiAgICB7IGE6IGEyLCBiOiBiMiB9XG4gIF07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZW5kb1NwbGl0ID0gZnVuY3Rpb24gX2VuZG9TcGxpdChrKSB7XG4gIHZhciBiYXNpcyA9IHRoaXMuZW5kby5iYXNpcztcbiAgdmFyIHYxID0gYmFzaXNbMF07XG4gIHZhciB2MiA9IGJhc2lzWzFdO1xuXG4gIHZhciBjMSA9IHYyLmIubXVsKGspLmRpdlJvdW5kKHRoaXMubik7XG4gIHZhciBjMiA9IHYxLmIubmVnKCkubXVsKGspLmRpdlJvdW5kKHRoaXMubik7XG5cbiAgdmFyIHAxID0gYzEubXVsKHYxLmEpO1xuICB2YXIgcDIgPSBjMi5tdWwodjIuYSk7XG4gIHZhciBxMSA9IGMxLm11bCh2MS5iKTtcbiAgdmFyIHEyID0gYzIubXVsKHYyLmIpO1xuXG4gIC8vIENhbGN1bGF0ZSBhbnN3ZXJcbiAgdmFyIGsxID0gay5zdWIocDEpLnN1YihwMik7XG4gIHZhciBrMiA9IHExLmFkZChxMikubmVnKCk7XG4gIHJldHVybiB7IGsxOiBrMSwgazI6IGsyIH07XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5wb2ludEZyb21YID0gZnVuY3Rpb24gcG9pbnRGcm9tWCh4LCBvZGQpIHtcbiAgeCA9IG5ldyBCTih4LCAxNik7XG4gIGlmICgheC5yZWQpXG4gICAgeCA9IHgudG9SZWQodGhpcy5yZWQpO1xuXG4gIHZhciB5MiA9IHgucmVkU3FyKCkucmVkTXVsKHgpLnJlZElBZGQoeC5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpO1xuICB2YXIgeSA9IHkyLnJlZFNxcnQoKTtcbiAgaWYgKHkucmVkU3FyKCkucmVkU3ViKHkyKS5jbXAodGhpcy56ZXJvKSAhPT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcG9pbnQnKTtcblxuICAvLyBYWFggSXMgdGhlcmUgYW55IHdheSB0byB0ZWxsIGlmIHRoZSBudW1iZXIgaXMgb2RkIHdpdGhvdXQgY29udmVydGluZyBpdFxuICAvLyB0byBub24tcmVkIGZvcm0/XG4gIHZhciBpc09kZCA9IHkuZnJvbVJlZCgpLmlzT2RkKCk7XG4gIGlmIChvZGQgJiYgIWlzT2RkIHx8ICFvZGQgJiYgaXNPZGQpXG4gICAgeSA9IHkucmVkTmVnKCk7XG5cbiAgcmV0dXJuIHRoaXMucG9pbnQoeCwgeSk7XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS52YWxpZGF0ZSA9IGZ1bmN0aW9uIHZhbGlkYXRlKHBvaW50KSB7XG4gIGlmIChwb2ludC5pbmYpXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgdmFyIHggPSBwb2ludC54O1xuICB2YXIgeSA9IHBvaW50Lnk7XG5cbiAgdmFyIGF4ID0gdGhpcy5hLnJlZE11bCh4KTtcbiAgdmFyIHJocyA9IHgucmVkU3FyKCkucmVkTXVsKHgpLnJlZElBZGQoYXgpLnJlZElBZGQodGhpcy5iKTtcbiAgcmV0dXJuIHkucmVkU3FyKCkucmVkSVN1YihyaHMpLmNtcG4oMCkgPT09IDA7XG59O1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQgPVxuICAgIGZ1bmN0aW9uIF9lbmRvV25hZk11bEFkZChwb2ludHMsIGNvZWZmcywgamFjb2JpYW5SZXN1bHQpIHtcbiAgdmFyIG5wb2ludHMgPSB0aGlzLl9lbmRvV25hZlQxO1xuICB2YXIgbmNvZWZmcyA9IHRoaXMuX2VuZG9XbmFmVDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNwbGl0ID0gdGhpcy5fZW5kb1NwbGl0KGNvZWZmc1tpXSk7XG4gICAgdmFyIHAgPSBwb2ludHNbaV07XG4gICAgdmFyIGJldGEgPSBwLl9nZXRCZXRhKCk7XG5cbiAgICBpZiAoc3BsaXQuazEubmVnYXRpdmUpIHtcbiAgICAgIHNwbGl0LmsxLmluZWcoKTtcbiAgICAgIHAgPSBwLm5lZyh0cnVlKTtcbiAgICB9XG4gICAgaWYgKHNwbGl0LmsyLm5lZ2F0aXZlKSB7XG4gICAgICBzcGxpdC5rMi5pbmVnKCk7XG4gICAgICBiZXRhID0gYmV0YS5uZWcodHJ1ZSk7XG4gICAgfVxuXG4gICAgbnBvaW50c1tpICogMl0gPSBwO1xuICAgIG5wb2ludHNbaSAqIDIgKyAxXSA9IGJldGE7XG4gICAgbmNvZWZmc1tpICogMl0gPSBzcGxpdC5rMTtcbiAgICBuY29lZmZzW2kgKiAyICsgMV0gPSBzcGxpdC5rMjtcbiAgfVxuICB2YXIgcmVzID0gdGhpcy5fd25hZk11bEFkZCgxLCBucG9pbnRzLCBuY29lZmZzLCBpICogMiwgamFjb2JpYW5SZXN1bHQpO1xuXG4gIC8vIENsZWFuLXVwIHJlZmVyZW5jZXMgdG8gcG9pbnRzIGFuZCBjb2VmZmljaWVudHNcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBpICogMjsgaisrKSB7XG4gICAgbnBvaW50c1tqXSA9IG51bGw7XG4gICAgbmNvZWZmc1tqXSA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cbmZ1bmN0aW9uIFBvaW50KGN1cnZlLCB4LCB5LCBpc1JlZCkge1xuICBCYXNlLkJhc2VQb2ludC5jYWxsKHRoaXMsIGN1cnZlLCAnYWZmaW5lJyk7XG4gIGlmICh4ID09PSBudWxsICYmIHkgPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSBudWxsO1xuICAgIHRoaXMueSA9IG51bGw7XG4gICAgdGhpcy5pbmYgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHRoaXMueCA9IG5ldyBCTih4LCAxNik7XG4gICAgdGhpcy55ID0gbmV3IEJOKHksIDE2KTtcbiAgICAvLyBGb3JjZSByZWRnb21lcnkgcmVwcmVzZW50YXRpb24gd2hlbiBsb2FkaW5nIGZyb20gSlNPTlxuICAgIGlmIChpc1JlZCkge1xuICAgICAgdGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICAgIHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgfVxuICAgIGlmICghdGhpcy54LnJlZClcbiAgICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gICAgaWYgKCF0aGlzLnkucmVkKVxuICAgICAgdGhpcy55ID0gdGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcbiAgICB0aGlzLmluZiA9IGZhbHNlO1xuICB9XG59XG5pbmhlcml0cyhQb2ludCwgQmFzZS5CYXNlUG9pbnQpO1xuXG5TaG9ydEN1cnZlLnByb3RvdHlwZS5wb2ludCA9IGZ1bmN0aW9uIHBvaW50KHgsIHksIGlzUmVkKSB7XG4gIHJldHVybiBuZXcgUG9pbnQodGhpcywgeCwgeSwgaXNSZWQpO1xufTtcblxuU2hvcnRDdXJ2ZS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTiA9IGZ1bmN0aW9uIHBvaW50RnJvbUpTT04ob2JqLCByZWQpIHtcbiAgcmV0dXJuIFBvaW50LmZyb21KU09OKHRoaXMsIG9iaiwgcmVkKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5fZ2V0QmV0YSA9IGZ1bmN0aW9uIF9nZXRCZXRhKCkge1xuICBpZiAoIXRoaXMuY3VydmUuZW5kbylcbiAgICByZXR1cm47XG5cbiAgdmFyIHByZSA9IHRoaXMucHJlY29tcHV0ZWQ7XG4gIGlmIChwcmUgJiYgcHJlLmJldGEpXG4gICAgcmV0dXJuIHByZS5iZXRhO1xuXG4gIHZhciBiZXRhID0gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSwgdGhpcy55KTtcbiAgaWYgKHByZSkge1xuICAgIHZhciBjdXJ2ZSA9IHRoaXMuY3VydmU7XG4gICAgdmFyIGVuZG9NdWwgPSBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gY3VydmUucG9pbnQocC54LnJlZE11bChjdXJ2ZS5lbmRvLmJldGEpLCBwLnkpO1xuICAgIH07XG4gICAgcHJlLmJldGEgPSBiZXRhO1xuICAgIGJldGEucHJlY29tcHV0ZWQgPSB7XG4gICAgICBiZXRhOiBudWxsLFxuICAgICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgICAgd25kOiBwcmUubmFmLnduZCxcbiAgICAgICAgcG9pbnRzOiBwcmUubmFmLnBvaW50cy5tYXAoZW5kb011bClcbiAgICAgIH0sXG4gICAgICBkb3VibGVzOiBwcmUuZG91YmxlcyAmJiB7XG4gICAgICAgIHN0ZXA6IHByZS5kb3VibGVzLnN0ZXAsXG4gICAgICAgIHBvaW50czogcHJlLmRvdWJsZXMucG9pbnRzLm1hcChlbmRvTXVsKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIGJldGE7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICBpZiAoIXRoaXMucHJlY29tcHV0ZWQpXG4gICAgcmV0dXJuIFsgdGhpcy54LCB0aGlzLnkgXTtcblxuICByZXR1cm4gWyB0aGlzLngsIHRoaXMueSwgdGhpcy5wcmVjb21wdXRlZCAmJiB7XG4gICAgZG91YmxlczogdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzICYmIHtcbiAgICAgIHN0ZXA6IHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLFxuICAgICAgcG9pbnRzOiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpXG4gICAgfSxcbiAgICBuYWY6IHRoaXMucHJlY29tcHV0ZWQubmFmICYmIHtcbiAgICAgIHduZDogdGhpcy5wcmVjb21wdXRlZC5uYWYud25kLFxuICAgICAgcG9pbnRzOiB0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSlcbiAgICB9XG4gIH0gXTtcbn07XG5cblBvaW50LmZyb21KU09OID0gZnVuY3Rpb24gZnJvbUpTT04oY3VydmUsIG9iaiwgcmVkKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJylcbiAgICBvYmogPSBKU09OLnBhcnNlKG9iaik7XG4gIHZhciByZXMgPSBjdXJ2ZS5wb2ludChvYmpbMF0sIG9ialsxXSwgcmVkKTtcbiAgaWYgKCFvYmpbMl0pXG4gICAgcmV0dXJuIHJlcztcblxuICBmdW5jdGlvbiBvYmoycG9pbnQob2JqKSB7XG4gICAgcmV0dXJuIGN1cnZlLnBvaW50KG9ialswXSwgb2JqWzFdLCByZWQpO1xuICB9XG5cbiAgdmFyIHByZSA9IG9ialsyXTtcbiAgcmVzLnByZWNvbXB1dGVkID0ge1xuICAgIGJldGE6IG51bGwsXG4gICAgZG91YmxlczogcHJlLmRvdWJsZXMgJiYge1xuICAgICAgc3RlcDogcHJlLmRvdWJsZXMuc3RlcCxcbiAgICAgIHBvaW50czogWyByZXMgXS5jb25jYXQocHJlLmRvdWJsZXMucG9pbnRzLm1hcChvYmoycG9pbnQpKVxuICAgIH0sXG4gICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgIHduZDogcHJlLm5hZi53bmQsXG4gICAgICBwb2ludHM6IFsgcmVzIF0uY29uY2F0KHByZS5uYWYucG9pbnRzLm1hcChvYmoycG9pbnQpKVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJlcztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiAnPEVDIFBvaW50IEluZmluaXR5Pic7XG4gIHJldHVybiAnPEVDIFBvaW50IHg6ICcgKyB0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArXG4gICAgICAnIHk6ICcgKyB0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cblBvaW50LnByb3RvdHlwZS5pc0luZmluaXR5ID0gZnVuY3Rpb24gaXNJbmZpbml0eSgpIHtcbiAgcmV0dXJuIHRoaXMuaW5mO1xufTtcblxuUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIC8vIE8gKyBQID0gUFxuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHA7XG5cbiAgLy8gUCArIE8gPSBQXG4gIGlmIChwLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBQICsgUCA9IDJQXG4gIGlmICh0aGlzLmVxKHApKVxuICAgIHJldHVybiB0aGlzLmRibCgpO1xuXG4gIC8vIFAgKyAoLVApID0gT1xuICBpZiAodGhpcy5uZWcoKS5lcShwKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICAvLyBQICsgUSA9IE9cbiAgaWYgKHRoaXMueC5jbXAocC54KSA9PT0gMClcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgYyA9IHRoaXMueS5yZWRTdWIocC55KTtcbiAgaWYgKGMuY21wbigwKSAhPT0gMClcbiAgICBjID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihwLngpLnJlZEludm0oKSk7XG4gIHZhciBueCA9IGMucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIocC54KTtcbiAgdmFyIG55ID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihueCkpLnJlZElTdWIodGhpcy55KTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kYmwgPSBmdW5jdGlvbiBkYmwoKSB7XG4gIGlmICh0aGlzLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyAyUCA9IE9cbiAgdmFyIHlzMSA9IHRoaXMueS5yZWRBZGQodGhpcy55KTtcbiAgaWYgKHlzMS5jbXBuKDApID09PSAwKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsIG51bGwpO1xuXG4gIHZhciBhID0gdGhpcy5jdXJ2ZS5hO1xuXG4gIHZhciB4MiA9IHRoaXMueC5yZWRTcXIoKTtcbiAgdmFyIGR5aW52ID0geXMxLnJlZEludm0oKTtcbiAgdmFyIGMgPSB4Mi5yZWRBZGQoeDIpLnJlZElBZGQoeDIpLnJlZElBZGQoYSkucmVkTXVsKGR5aW52KTtcblxuICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKTtcbiAgdmFyIG55ID0gYy5yZWRNdWwodGhpcy54LnJlZFN1YihueCkpLnJlZElTdWIodGhpcy55KTtcbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobngsIG55KTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5nZXRYID0gZnVuY3Rpb24gZ2V0WCgpIHtcbiAgcmV0dXJuIHRoaXMueC5mcm9tUmVkKCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZ2V0WSA9IGZ1bmN0aW9uIGdldFkoKSB7XG4gIHJldHVybiB0aGlzLnkuZnJvbVJlZCgpO1xufTtcblxuUG9pbnQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bChrKSB7XG4gIGsgPSBuZXcgQk4oaywgMTYpO1xuXG4gIGlmICh0aGlzLl9oYXNEb3VibGVzKGspKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLCBrKTtcbiAgZWxzZSBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbIHRoaXMgXSwgWyBrIF0pO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWwodGhpcywgayk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubXVsQWRkID0gZnVuY3Rpb24gbXVsQWRkKGsxLCBwMiwgazIpIHtcbiAgdmFyIHBvaW50cyA9IFsgdGhpcywgcDIgXTtcbiAgdmFyIGNvZWZmcyA9IFsgazEsIGsyIF07XG4gIGlmICh0aGlzLmN1cnZlLmVuZG8pXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKHBvaW50cywgY29lZmZzKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsIHBvaW50cywgY29lZmZzLCAyKTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5qbXVsQWRkID0gZnVuY3Rpb24gam11bEFkZChrMSwgcDIsIGsyKSB7XG4gIHZhciBwb2ludHMgPSBbIHRoaXMsIHAyIF07XG4gIHZhciBjb2VmZnMgPSBbIGsxLCBrMiBdO1xuICBpZiAodGhpcy5jdXJ2ZS5lbmRvKVxuICAgIHJldHVybiB0aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChwb2ludHMsIGNvZWZmcywgdHJ1ZSk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLCBwb2ludHMsIGNvZWZmcywgMiwgdHJ1ZSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXEgPSBmdW5jdGlvbiBlcShwKSB7XG4gIHJldHVybiB0aGlzID09PSBwIHx8XG4gICAgICAgICB0aGlzLmluZiA9PT0gcC5pbmYgJiZcbiAgICAgICAgICAgICAodGhpcy5pbmYgfHwgdGhpcy54LmNtcChwLngpID09PSAwICYmIHRoaXMueS5jbXAocC55KSA9PT0gMCk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnKF9wcmVjb21wdXRlKSB7XG4gIGlmICh0aGlzLmluZilcbiAgICByZXR1cm4gdGhpcztcblxuICB2YXIgcmVzID0gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsIHRoaXMueS5yZWROZWcoKSk7XG4gIGlmIChfcHJlY29tcHV0ZSAmJiB0aGlzLnByZWNvbXB1dGVkKSB7XG4gICAgdmFyIHByZSA9IHRoaXMucHJlY29tcHV0ZWQ7XG4gICAgdmFyIG5lZ2F0ZSA9IGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiBwLm5lZygpO1xuICAgIH07XG4gICAgcmVzLnByZWNvbXB1dGVkID0ge1xuICAgICAgbmFmOiBwcmUubmFmICYmIHtcbiAgICAgICAgd25kOiBwcmUubmFmLnduZCxcbiAgICAgICAgcG9pbnRzOiBwcmUubmFmLnBvaW50cy5tYXAobmVnYXRlKVxuICAgICAgfSxcbiAgICAgIGRvdWJsZXM6IHByZS5kb3VibGVzICYmIHtcbiAgICAgICAgc3RlcDogcHJlLmRvdWJsZXMuc3RlcCxcbiAgICAgICAgcG9pbnRzOiBwcmUuZG91Ymxlcy5wb2ludHMubWFwKG5lZ2F0ZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUudG9KID0gZnVuY3Rpb24gdG9KKCkge1xuICBpZiAodGhpcy5pbmYpXG4gICAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsIG51bGwsIG51bGwpO1xuXG4gIHZhciByZXMgPSB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsIHRoaXMueSwgdGhpcy5jdXJ2ZS5vbmUpO1xuICByZXR1cm4gcmVzO1xufTtcblxuZnVuY3Rpb24gSlBvaW50KGN1cnZlLCB4LCB5LCB6KSB7XG4gIEJhc2UuQmFzZVBvaW50LmNhbGwodGhpcywgY3VydmUsICdqYWNvYmlhbicpO1xuICBpZiAoeCA9PT0gbnVsbCAmJiB5ID09PSBudWxsICYmIHogPT09IG51bGwpIHtcbiAgICB0aGlzLnggPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnkgPSB0aGlzLmN1cnZlLm9uZTtcbiAgICB0aGlzLnogPSBuZXcgQk4oMCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54ID0gbmV3IEJOKHgsIDE2KTtcbiAgICB0aGlzLnkgPSBuZXcgQk4oeSwgMTYpO1xuICAgIHRoaXMueiA9IG5ldyBCTih6LCAxNik7XG4gIH1cbiAgaWYgKCF0aGlzLngucmVkKVxuICAgIHRoaXMueCA9IHRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCk7XG4gIGlmICghdGhpcy55LnJlZClcbiAgICB0aGlzLnkgPSB0aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpO1xuICBpZiAoIXRoaXMuei5yZWQpXG4gICAgdGhpcy56ID0gdGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKTtcblxuICB0aGlzLnpPbmUgPSB0aGlzLnogPT09IHRoaXMuY3VydmUub25lO1xufVxuaW5oZXJpdHMoSlBvaW50LCBCYXNlLkJhc2VQb2ludCk7XG5cblNob3J0Q3VydmUucHJvdG90eXBlLmpwb2ludCA9IGZ1bmN0aW9uIGpwb2ludCh4LCB5LCB6KSB7XG4gIHJldHVybiBuZXcgSlBvaW50KHRoaXMsIHgsIHksIHopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS50b1AgPSBmdW5jdGlvbiB0b1AoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLCBudWxsKTtcblxuICB2YXIgemludiA9IHRoaXMuei5yZWRJbnZtKCk7XG4gIHZhciB6aW52MiA9IHppbnYucmVkU3FyKCk7XG4gIHZhciBheCA9IHRoaXMueC5yZWRNdWwoemludjIpO1xuICB2YXIgYXkgPSB0aGlzLnkucmVkTXVsKHppbnYyKS5yZWRNdWwoemludik7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUucG9pbnQoYXgsIGF5KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnKCkge1xuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LCB0aGlzLnkucmVkTmVnKCksIHRoaXMueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChwKSB7XG4gIC8vIE8gKyBQID0gUFxuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHA7XG5cbiAgLy8gUCArIE8gPSBQXG4gIGlmIChwLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyAxMk0gKyA0UyArIDdBXG4gIHZhciBwejIgPSBwLnoucmVkU3FyKCk7XG4gIHZhciB6MiA9IHRoaXMuei5yZWRTcXIoKTtcbiAgdmFyIHUxID0gdGhpcy54LnJlZE11bChwejIpO1xuICB2YXIgdTIgPSBwLngucmVkTXVsKHoyKTtcbiAgdmFyIHMxID0gdGhpcy55LnJlZE11bChwejIucmVkTXVsKHAueikpO1xuICB2YXIgczIgPSBwLnkucmVkTXVsKHoyLnJlZE11bCh0aGlzLnopKTtcblxuICB2YXIgaCA9IHUxLnJlZFN1Yih1Mik7XG4gIHZhciByID0gczEucmVkU3ViKHMyKTtcbiAgaWYgKGguY21wbigwKSA9PT0gMCkge1xuICAgIGlmIChyLmNtcG4oMCkgIT09IDApXG4gICAgICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMuZGJsKCk7XG4gIH1cblxuICB2YXIgaDIgPSBoLnJlZFNxcigpO1xuICB2YXIgaDMgPSBoMi5yZWRNdWwoaCk7XG4gIHZhciB2ID0gdTEucmVkTXVsKGgyKTtcblxuICB2YXIgbnggPSByLnJlZFNxcigpLnJlZElBZGQoaDMpLnJlZElTdWIodikucmVkSVN1Yih2KTtcbiAgdmFyIG55ID0gci5yZWRNdWwodi5yZWRJU3ViKG54KSkucmVkSVN1YihzMS5yZWRNdWwoaDMpKTtcbiAgdmFyIG56ID0gdGhpcy56LnJlZE11bChwLnopLnJlZE11bChoKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLm1peGVkQWRkID0gZnVuY3Rpb24gbWl4ZWRBZGQocCkge1xuICAvLyBPICsgUCA9IFBcbiAgaWYgKHRoaXMuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBwLnRvSigpO1xuXG4gIC8vIFAgKyBPID0gUFxuICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gOE0gKyAzUyArIDdBXG4gIHZhciB6MiA9IHRoaXMuei5yZWRTcXIoKTtcbiAgdmFyIHUxID0gdGhpcy54O1xuICB2YXIgdTIgPSBwLngucmVkTXVsKHoyKTtcbiAgdmFyIHMxID0gdGhpcy55O1xuICB2YXIgczIgPSBwLnkucmVkTXVsKHoyKS5yZWRNdWwodGhpcy56KTtcblxuICB2YXIgaCA9IHUxLnJlZFN1Yih1Mik7XG4gIHZhciByID0gczEucmVkU3ViKHMyKTtcbiAgaWYgKGguY21wbigwKSA9PT0gMCkge1xuICAgIGlmIChyLmNtcG4oMCkgIT09IDApXG4gICAgICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMuZGJsKCk7XG4gIH1cblxuICB2YXIgaDIgPSBoLnJlZFNxcigpO1xuICB2YXIgaDMgPSBoMi5yZWRNdWwoaCk7XG4gIHZhciB2ID0gdTEucmVkTXVsKGgyKTtcblxuICB2YXIgbnggPSByLnJlZFNxcigpLnJlZElBZGQoaDMpLnJlZElTdWIodikucmVkSVN1Yih2KTtcbiAgdmFyIG55ID0gci5yZWRNdWwodi5yZWRJU3ViKG54KSkucmVkSVN1YihzMS5yZWRNdWwoaDMpKTtcbiAgdmFyIG56ID0gdGhpcy56LnJlZE11bChoKTtcblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLmRibHAgPSBmdW5jdGlvbiBkYmxwKHBvdykge1xuICBpZiAocG93ID09PSAwKVxuICAgIHJldHVybiB0aGlzO1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG4gIGlmICghcG93KVxuICAgIHJldHVybiB0aGlzLmRibCgpO1xuXG4gIGlmICh0aGlzLmN1cnZlLnplcm9BIHx8IHRoaXMuY3VydmUudGhyZWVBKSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG93OyBpKyspXG4gICAgICByID0gci5kYmwoKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIC8vIDFNICsgMlMgKyAxQSArIE4gKiAoNFMgKyA1TSArIDhBKVxuICAvLyBOID0gMSA9PiA2TSArIDZTICsgOUFcbiAgdmFyIGEgPSB0aGlzLmN1cnZlLmE7XG4gIHZhciB0aW52ID0gdGhpcy5jdXJ2ZS50aW52O1xuXG4gIHZhciBqeCA9IHRoaXMueDtcbiAgdmFyIGp5ID0gdGhpcy55O1xuICB2YXIganogPSB0aGlzLno7XG4gIHZhciBqejQgPSBqei5yZWRTcXIoKS5yZWRTcXIoKTtcblxuICAvLyBSZXVzZSByZXN1bHRzXG4gIHZhciBqeWQgPSBqeS5yZWRBZGQoankpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvdzsgaSsrKSB7XG4gICAgdmFyIGp4MiA9IGp4LnJlZFNxcigpO1xuICAgIHZhciBqeWQyID0ganlkLnJlZFNxcigpO1xuICAgIHZhciBqeWQ0ID0ganlkMi5yZWRTcXIoKTtcbiAgICB2YXIgYyA9IGp4Mi5yZWRBZGQoangyKS5yZWRJQWRkKGp4MikucmVkSUFkZChhLnJlZE11bChqejQpKTtcblxuICAgIHZhciB0MSA9IGp4LnJlZE11bChqeWQyKTtcbiAgICB2YXIgbnggPSBjLnJlZFNxcigpLnJlZElTdWIodDEucmVkQWRkKHQxKSk7XG4gICAgdmFyIHQyID0gdDEucmVkSVN1YihueCk7XG4gICAgdmFyIGRueSA9IGMucmVkTXVsKHQyKTtcbiAgICBkbnkgPSBkbnkucmVkSUFkZChkbnkpLnJlZElTdWIoanlkNCk7XG4gICAgdmFyIG56ID0ganlkLnJlZE11bChqeik7XG4gICAgaWYgKGkgKyAxIDwgcG93KVxuICAgICAgano0ID0gano0LnJlZE11bChqeWQ0KTtcblxuICAgIGp4ID0gbng7XG4gICAganogPSBuejtcbiAgICBqeWQgPSBkbnk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoangsIGp5ZC5yZWRNdWwodGludiksIGp6KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuZGJsID0gZnVuY3Rpb24gZGJsKCkge1xuICBpZiAodGhpcy5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKHRoaXMuY3VydmUuemVyb0EpXG4gICAgcmV0dXJuIHRoaXMuX3plcm9EYmwoKTtcbiAgZWxzZSBpZiAodGhpcy5jdXJ2ZS50aHJlZUEpXG4gICAgcmV0dXJuIHRoaXMuX3RocmVlRGJsKCk7XG4gIGVsc2VcbiAgICByZXR1cm4gdGhpcy5fZGJsKCk7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLl96ZXJvRGJsID0gZnVuY3Rpb24gX3plcm9EYmwoKSB7XG4gIHZhciBueDtcbiAgdmFyIG55O1xuICB2YXIgbno7XG4gIC8vIFogPSAxXG4gIGlmICh0aGlzLnpPbmUpIHtcbiAgICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTAuaHRtbFxuICAgIC8vICAgICAjZG91YmxpbmctbWRibC0yMDA3LWJsXG4gICAgLy8gMU0gKyA1UyArIDE0QVxuXG4gICAgLy8gWFggPSBYMV4yXG4gICAgdmFyIHh4ID0gdGhpcy54LnJlZFNxcigpO1xuICAgIC8vIFlZID0gWTFeMlxuICAgIHZhciB5eSA9IHRoaXMueS5yZWRTcXIoKTtcbiAgICAvLyBZWVlZID0gWVleMlxuICAgIHZhciB5eXl5ID0geXkucmVkU3FyKCk7XG4gICAgLy8gUyA9IDIgKiAoKFgxICsgWVkpXjIgLSBYWCAtIFlZWVkpXG4gICAgdmFyIHMgPSB0aGlzLngucmVkQWRkKHl5KS5yZWRTcXIoKS5yZWRJU3ViKHh4KS5yZWRJU3ViKHl5eXkpO1xuICAgIHMgPSBzLnJlZElBZGQocyk7XG4gICAgLy8gTSA9IDMgKiBYWCArIGE7IGEgPSAwXG4gICAgdmFyIG0gPSB4eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpO1xuICAgIC8vIFQgPSBNIF4gMiAtIDIqU1xuICAgIHZhciB0ID0gbS5yZWRTcXIoKS5yZWRJU3ViKHMpLnJlZElTdWIocyk7XG5cbiAgICAvLyA4ICogWVlZWVxuICAgIHZhciB5eXl5OCA9IHl5eXkucmVkSUFkZCh5eXl5KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuICAgIHl5eXk4ID0geXl5eTgucmVkSUFkZCh5eXl5OCk7XG5cbiAgICAvLyBYMyA9IFRcbiAgICBueCA9IHQ7XG4gICAgLy8gWTMgPSBNICogKFMgLSBUKSAtIDggKiBZWVlZXG4gICAgbnkgPSBtLnJlZE11bChzLnJlZElTdWIodCkpLnJlZElTdWIoeXl5eTgpO1xuICAgIC8vIFozID0gMipZMVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMC5odG1sXG4gICAgLy8gICAgICNkb3VibGluZy1kYmwtMjAwOS1sXG4gICAgLy8gMk0gKyA1UyArIDEzQVxuXG4gICAgLy8gQSA9IFgxXjJcbiAgICB2YXIgYSA9IHRoaXMueC5yZWRTcXIoKTtcbiAgICAvLyBCID0gWTFeMlxuICAgIHZhciBiID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIEMgPSBCXjJcbiAgICB2YXIgYyA9IGIucmVkU3FyKCk7XG4gICAgLy8gRCA9IDIgKiAoKFgxICsgQileMiAtIEEgLSBDKVxuICAgIHZhciBkID0gdGhpcy54LnJlZEFkZChiKS5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYyk7XG4gICAgZCA9IGQucmVkSUFkZChkKTtcbiAgICAvLyBFID0gMyAqIEFcbiAgICB2YXIgZSA9IGEucmVkQWRkKGEpLnJlZElBZGQoYSk7XG4gICAgLy8gRiA9IEVeMlxuICAgIHZhciBmID0gZS5yZWRTcXIoKTtcblxuICAgIC8vIDggKiBDXG4gICAgdmFyIGM4ID0gYy5yZWRJQWRkKGMpO1xuICAgIGM4ID0gYzgucmVkSUFkZChjOCk7XG4gICAgYzggPSBjOC5yZWRJQWRkKGM4KTtcblxuICAgIC8vIFgzID0gRiAtIDIgKiBEXG4gICAgbnggPSBmLnJlZElTdWIoZCkucmVkSVN1YihkKTtcbiAgICAvLyBZMyA9IEUgKiAoRCAtIFgzKSAtIDggKiBDXG4gICAgbnkgPSBlLnJlZE11bChkLnJlZElTdWIobngpKS5yZWRJU3ViKGM4KTtcbiAgICAvLyBaMyA9IDIgKiBZMSAqIFoxXG4gICAgbnogPSB0aGlzLnkucmVkTXVsKHRoaXMueik7XG4gICAgbnogPSBuei5yZWRJQWRkKG56KTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuX3RocmVlRGJsID0gZnVuY3Rpb24gX3RocmVlRGJsKCkge1xuICB2YXIgbng7XG4gIHZhciBueTtcbiAgdmFyIG56O1xuICAvLyBaID0gMVxuICBpZiAodGhpcy56T25lKSB7XG4gICAgLy8gaHlwZXJlbGxpcHRpYy5vcmcvRUZEL2cxcC9hdXRvLXNob3J0dy1qYWNvYmlhbi0zLmh0bWxcbiAgICAvLyAgICAgI2RvdWJsaW5nLW1kYmwtMjAwNy1ibFxuICAgIC8vIDFNICsgNVMgKyAxNUFcblxuICAgIC8vIFhYID0gWDFeMlxuICAgIHZhciB4eCA9IHRoaXMueC5yZWRTcXIoKTtcbiAgICAvLyBZWSA9IFkxXjJcbiAgICB2YXIgeXkgPSB0aGlzLnkucmVkU3FyKCk7XG4gICAgLy8gWVlZWSA9IFlZXjJcbiAgICB2YXIgeXl5eSA9IHl5LnJlZFNxcigpO1xuICAgIC8vIFMgPSAyICogKChYMSArIFlZKV4yIC0gWFggLSBZWVlZKVxuICAgIHZhciBzID0gdGhpcy54LnJlZEFkZCh5eSkucmVkU3FyKCkucmVkSVN1Yih4eCkucmVkSVN1Yih5eXl5KTtcbiAgICBzID0gcy5yZWRJQWRkKHMpO1xuICAgIC8vIE0gPSAzICogWFggKyBhXG4gICAgdmFyIG0gPSB4eC5yZWRBZGQoeHgpLnJlZElBZGQoeHgpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKTtcbiAgICAvLyBUID0gTV4yIC0gMiAqIFNcbiAgICB2YXIgdCA9IG0ucmVkU3FyKCkucmVkSVN1YihzKS5yZWRJU3ViKHMpO1xuICAgIC8vIFgzID0gVFxuICAgIG54ID0gdDtcbiAgICAvLyBZMyA9IE0gKiAoUyAtIFQpIC0gOCAqIFlZWVlcbiAgICB2YXIgeXl5eTggPSB5eXl5LnJlZElBZGQoeXl5eSk7XG4gICAgeXl5eTggPSB5eXl5OC5yZWRJQWRkKHl5eXk4KTtcbiAgICB5eXl5OCA9IHl5eXk4LnJlZElBZGQoeXl5eTgpO1xuICAgIG55ID0gbS5yZWRNdWwocy5yZWRJU3ViKHQpKS5yZWRJU3ViKHl5eXk4KTtcbiAgICAvLyBaMyA9IDIgKiBZMVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnkpO1xuICB9IGVsc2Uge1xuICAgIC8vIGh5cGVyZWxsaXB0aWMub3JnL0VGRC9nMXAvYXV0by1zaG9ydHctamFjb2JpYW4tMy5odG1sI2RvdWJsaW5nLWRibC0yMDAxLWJcbiAgICAvLyAzTSArIDVTXG5cbiAgICAvLyBkZWx0YSA9IFoxXjJcbiAgICB2YXIgZGVsdGEgPSB0aGlzLnoucmVkU3FyKCk7XG4gICAgLy8gZ2FtbWEgPSBZMV4yXG4gICAgdmFyIGdhbW1hID0gdGhpcy55LnJlZFNxcigpO1xuICAgIC8vIGJldGEgPSBYMSAqIGdhbW1hXG4gICAgdmFyIGJldGEgPSB0aGlzLngucmVkTXVsKGdhbW1hKTtcbiAgICAvLyBhbHBoYSA9IDMgKiAoWDEgLSBkZWx0YSkgKiAoWDEgKyBkZWx0YSlcbiAgICB2YXIgYWxwaGEgPSB0aGlzLngucmVkU3ViKGRlbHRhKS5yZWRNdWwodGhpcy54LnJlZEFkZChkZWx0YSkpO1xuICAgIGFscGhhID0gYWxwaGEucmVkQWRkKGFscGhhKS5yZWRJQWRkKGFscGhhKTtcbiAgICAvLyBYMyA9IGFscGhhXjIgLSA4ICogYmV0YVxuICAgIHZhciBiZXRhNCA9IGJldGEucmVkSUFkZChiZXRhKTtcbiAgICBiZXRhNCA9IGJldGE0LnJlZElBZGQoYmV0YTQpO1xuICAgIHZhciBiZXRhOCA9IGJldGE0LnJlZEFkZChiZXRhNCk7XG4gICAgbnggPSBhbHBoYS5yZWRTcXIoKS5yZWRJU3ViKGJldGE4KTtcbiAgICAvLyBaMyA9IChZMSArIFoxKV4yIC0gZ2FtbWEgLSBkZWx0YVxuICAgIG56ID0gdGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIoZ2FtbWEpLnJlZElTdWIoZGVsdGEpO1xuICAgIC8vIFkzID0gYWxwaGEgKiAoNCAqIGJldGEgLSBYMykgLSA4ICogZ2FtbWFeMlxuICAgIHZhciBnZ2FtbWE4ID0gZ2FtbWEucmVkU3FyKCk7XG4gICAgZ2dhbW1hOCA9IGdnYW1tYTgucmVkSUFkZChnZ2FtbWE4KTtcbiAgICBnZ2FtbWE4ID0gZ2dhbW1hOC5yZWRJQWRkKGdnYW1tYTgpO1xuICAgIGdnYW1tYTggPSBnZ2FtbWE4LnJlZElBZGQoZ2dhbW1hOCk7XG4gICAgbnkgPSBhbHBoYS5yZWRNdWwoYmV0YTQucmVkSVN1YihueCkpLnJlZElTdWIoZ2dhbW1hOCk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobngsIG55LCBueik7XG59O1xuXG5KUG9pbnQucHJvdG90eXBlLl9kYmwgPSBmdW5jdGlvbiBfZGJsKCkge1xuICB2YXIgYSA9IHRoaXMuY3VydmUuYTtcblxuICAvLyA0TSArIDZTICsgMTBBXG4gIHZhciBqeCA9IHRoaXMueDtcbiAgdmFyIGp5ID0gdGhpcy55O1xuICB2YXIganogPSB0aGlzLno7XG4gIHZhciBqejQgPSBqei5yZWRTcXIoKS5yZWRTcXIoKTtcblxuICB2YXIgangyID0gangucmVkU3FyKCk7XG4gIHZhciBqeTIgPSBqeS5yZWRTcXIoKTtcblxuICB2YXIgYyA9IGp4Mi5yZWRBZGQoangyKS5yZWRJQWRkKGp4MikucmVkSUFkZChhLnJlZE11bChqejQpKTtcblxuICB2YXIganhkNCA9IGp4LnJlZEFkZChqeCk7XG4gIGp4ZDQgPSBqeGQ0LnJlZElBZGQoanhkNCk7XG4gIHZhciB0MSA9IGp4ZDQucmVkTXVsKGp5Mik7XG4gIHZhciBueCA9IGMucmVkU3FyKCkucmVkSVN1Yih0MS5yZWRBZGQodDEpKTtcbiAgdmFyIHQyID0gdDEucmVkSVN1YihueCk7XG5cbiAgdmFyIGp5ZDggPSBqeTIucmVkU3FyKCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIGp5ZDggPSBqeWQ4LnJlZElBZGQoanlkOCk7XG4gIHZhciBueSA9IGMucmVkTXVsKHQyKS5yZWRJU3ViKGp5ZDgpO1xuICB2YXIgbnogPSBqeS5yZWRBZGQoankpLnJlZE11bChqeik7XG5cbiAgcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG54LCBueSwgbnopO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS50cnBsID0gZnVuY3Rpb24gdHJwbCgpIHtcbiAgaWYgKCF0aGlzLmN1cnZlLnplcm9BKVxuICAgIHJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTtcblxuICAvLyBoeXBlcmVsbGlwdGljLm9yZy9FRkQvZzFwL2F1dG8tc2hvcnR3LWphY29iaWFuLTAuaHRtbCN0cmlwbGluZy10cGwtMjAwNy1ibFxuICAvLyA1TSArIDEwUyArIC4uLlxuXG4gIC8vIFhYID0gWDFeMlxuICB2YXIgeHggPSB0aGlzLngucmVkU3FyKCk7XG4gIC8vIFlZID0gWTFeMlxuICB2YXIgeXkgPSB0aGlzLnkucmVkU3FyKCk7XG4gIC8vIFpaID0gWjFeMlxuICB2YXIgenogPSB0aGlzLnoucmVkU3FyKCk7XG4gIC8vIFlZWVkgPSBZWV4yXG4gIHZhciB5eXl5ID0geXkucmVkU3FyKCk7XG4gIC8vIE0gPSAzICogWFggKyBhICogWloyOyBhID0gMFxuICB2YXIgbSA9IHh4LnJlZEFkZCh4eCkucmVkSUFkZCh4eCk7XG4gIC8vIE1NID0gTV4yXG4gIHZhciBtbSA9IG0ucmVkU3FyKCk7XG4gIC8vIEUgPSA2ICogKChYMSArIFlZKV4yIC0gWFggLSBZWVlZKSAtIE1NXG4gIHZhciBlID0gdGhpcy54LnJlZEFkZCh5eSkucmVkU3FyKCkucmVkSVN1Yih4eCkucmVkSVN1Yih5eXl5KTtcbiAgZSA9IGUucmVkSUFkZChlKTtcbiAgZSA9IGUucmVkQWRkKGUpLnJlZElBZGQoZSk7XG4gIGUgPSBlLnJlZElTdWIobW0pO1xuICAvLyBFRSA9IEVeMlxuICB2YXIgZWUgPSBlLnJlZFNxcigpO1xuICAvLyBUID0gMTYqWVlZWVxuICB2YXIgdCA9IHl5eXkucmVkSUFkZCh5eXl5KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgdCA9IHQucmVkSUFkZCh0KTtcbiAgLy8gVSA9IChNICsgRSleMiAtIE1NIC0gRUUgLSBUXG4gIHZhciB1ID0gbS5yZWRJQWRkKGUpLnJlZFNxcigpLnJlZElTdWIobW0pLnJlZElTdWIoZWUpLnJlZElTdWIodCk7XG4gIC8vIFgzID0gNCAqIChYMSAqIEVFIC0gNCAqIFlZICogVSlcbiAgdmFyIHl5dTQgPSB5eS5yZWRNdWwodSk7XG4gIHl5dTQgPSB5eXU0LnJlZElBZGQoeXl1NCk7XG4gIHl5dTQgPSB5eXU0LnJlZElBZGQoeXl1NCk7XG4gIHZhciBueCA9IHRoaXMueC5yZWRNdWwoZWUpLnJlZElTdWIoeXl1NCk7XG4gIG54ID0gbngucmVkSUFkZChueCk7XG4gIG54ID0gbngucmVkSUFkZChueCk7XG4gIC8vIFkzID0gOCAqIFkxICogKFUgKiAoVCAtIFUpIC0gRSAqIEVFKVxuICB2YXIgbnkgPSB0aGlzLnkucmVkTXVsKHUucmVkTXVsKHQucmVkSVN1Yih1KSkucmVkSVN1YihlLnJlZE11bChlZSkpKTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgbnkgPSBueS5yZWRJQWRkKG55KTtcbiAgLy8gWjMgPSAoWjEgKyBFKV4yIC0gWlogLSBFRVxuICB2YXIgbnogPSB0aGlzLnoucmVkQWRkKGUpLnJlZFNxcigpLnJlZElTdWIoenopLnJlZElTdWIoZWUpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLmpwb2ludChueCwgbnksIG56KTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsKGssIGtiYXNlKSB7XG4gIGsgPSBuZXcgQk4oaywga2Jhc2UpO1xuXG4gIHJldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsIGspO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxKHApIHtcbiAgaWYgKHAudHlwZSA9PT0gJ2FmZmluZScpXG4gICAgcmV0dXJuIHRoaXMuZXEocC50b0ooKSk7XG5cbiAgaWYgKHRoaXMgPT09IHApXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgLy8geDEgKiB6Ml4yID09IHgyICogejFeMlxuICB2YXIgejIgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciBwejIgPSBwLnoucmVkU3FyKCk7XG4gIGlmICh0aGlzLngucmVkTXVsKHB6MikucmVkSVN1YihwLngucmVkTXVsKHoyKSkuY21wbigwKSAhPT0gMClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8geTEgKiB6Ml4zID09IHkyICogejFeM1xuICB2YXIgejMgPSB6Mi5yZWRNdWwodGhpcy56KTtcbiAgdmFyIHB6MyA9IHB6Mi5yZWRNdWwocC56KTtcbiAgcmV0dXJuIHRoaXMueS5yZWRNdWwocHozKS5yZWRJU3ViKHAueS5yZWRNdWwoejMpKS5jbXBuKDApID09PSAwO1xufTtcblxuSlBvaW50LnByb3RvdHlwZS5lcVhUb1AgPSBmdW5jdGlvbiBlcVhUb1AoeCkge1xuICB2YXIgenMgPSB0aGlzLnoucmVkU3FyKCk7XG4gIHZhciByeCA9IHgudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh6cyk7XG4gIGlmICh0aGlzLnguY21wKHJ4KSA9PT0gMClcbiAgICByZXR1cm4gdHJ1ZTtcblxuICB2YXIgeGMgPSB4LmNsb25lKCk7XG4gIHZhciB0ID0gdGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh6cyk7XG4gIGZvciAoOzspIHtcbiAgICB4Yy5pYWRkKHRoaXMuY3VydmUubik7XG4gICAgaWYgKHhjLmNtcCh0aGlzLmN1cnZlLnApID49IDApXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByeC5yZWRJQWRkKHQpO1xuICAgIGlmICh0aGlzLnguY21wKHJ4KSA9PT0gMClcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGlmICh0aGlzLmlzSW5maW5pdHkoKSlcbiAgICByZXR1cm4gJzxFQyBKUG9pbnQgSW5maW5pdHk+JztcbiAgcmV0dXJuICc8RUMgSlBvaW50IHg6ICcgKyB0aGlzLngudG9TdHJpbmcoMTYsIDIpICtcbiAgICAgICcgeTogJyArIHRoaXMueS50b1N0cmluZygxNiwgMikgK1xuICAgICAgJyB6OiAnICsgdGhpcy56LnRvU3RyaW5nKDE2LCAyKSArICc+Jztcbn07XG5cbkpQb2ludC5wcm90b3R5cGUuaXNJbmZpbml0eSA9IGZ1bmN0aW9uIGlzSW5maW5pdHkoKSB7XG4gIC8vIFhYWCBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHplcm8gaXMgYWx3YXlzIHplcm8gaW4gcmVkXG4gIHJldHVybiB0aGlzLnouY21wbigwKSA9PT0gMDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXJ2ZXMgPSBleHBvcnRzO1xuXG52YXIgaGFzaCA9IHJlcXVpcmUoJ2hhc2guanMnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uL2VsbGlwdGljJyk7XG5cbnZhciBhc3NlcnQgPSBlbGxpcHRpYy51dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIFByZXNldEN1cnZlKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ3Nob3J0JylcbiAgICB0aGlzLmN1cnZlID0gbmV3IGVsbGlwdGljLmN1cnZlLnNob3J0KG9wdGlvbnMpO1xuICBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdlZHdhcmRzJylcbiAgICB0aGlzLmN1cnZlID0gbmV3IGVsbGlwdGljLmN1cnZlLmVkd2FyZHMob3B0aW9ucyk7XG4gIGVsc2VcbiAgICB0aGlzLmN1cnZlID0gbmV3IGVsbGlwdGljLmN1cnZlLm1vbnQob3B0aW9ucyk7XG4gIHRoaXMuZyA9IHRoaXMuY3VydmUuZztcbiAgdGhpcy5uID0gdGhpcy5jdXJ2ZS5uO1xuICB0aGlzLmhhc2ggPSBvcHRpb25zLmhhc2g7XG5cbiAgYXNzZXJ0KHRoaXMuZy52YWxpZGF0ZSgpLCAnSW52YWxpZCBjdXJ2ZScpO1xuICBhc3NlcnQodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwgJ0ludmFsaWQgY3VydmUsIEcqTiAhPSBPJyk7XG59XG5jdXJ2ZXMuUHJlc2V0Q3VydmUgPSBQcmVzZXRDdXJ2ZTtcblxuZnVuY3Rpb24gZGVmaW5lQ3VydmUobmFtZSwgb3B0aW9ucykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3VydmVzLCBuYW1lLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjdXJ2ZSA9IG5ldyBQcmVzZXRDdXJ2ZShvcHRpb25zKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdXJ2ZXMsIG5hbWUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogY3VydmVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGN1cnZlO1xuICAgIH1cbiAgfSk7XG59XG5cbmRlZmluZUN1cnZlKCdwMTkyJywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogJ3AxOTInLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYnLFxuICBhOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmMnLFxuICBiOiAnNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTInLFxuICAgICcwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwMjI0Jywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogJ3AyMjQnLFxuICBwOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEnLFxuICBhOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUnLFxuICBiOiAnYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEnLFxuICAgICdiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwMjU2Jywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogbnVsbCxcbiAgcDogJ2ZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmJyxcbiAgYTogJ2ZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjJyxcbiAgYjogJzVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiJyxcbiAgbjogJ2ZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2JyxcbiAgICAnNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUnXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgncDM4NCcsIHtcbiAgdHlwZTogJ3Nob3J0JyxcbiAgcHJpbWU6IG51bGwsXG4gIHA6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmJyxcbiAgYTogJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMnLFxuICBiOiAnYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgJyArXG4gICAgICc1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZicsXG4gIG46ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSAnICtcbiAgICAgJ2Y0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczJyxcbiAgaGFzaDogaGFzaC5zaGEzODQsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJ2FhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4ICcgK1xuICAgICc1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNycsXG4gICAgJzM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwICcgK1xuICAgICcwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZidcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdwNTIxJywge1xuICB0eXBlOiAnc2hvcnQnLFxuICBwcmltZTogbnVsbCxcbiAgcDogJzAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgJyArXG4gICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicsXG4gIGE6ICcwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAnICtcbiAgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMnLFxuICBiOiAnMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgJyArXG4gICAgICc5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAnICtcbiAgICAgJzNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwJyxcbiAgbjogJzAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmICcgK1xuICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggJyArXG4gICAgICdmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOScsXG4gIGhhc2g6IGhhc2guc2hhNTEyLFxuICBnUmVkOiBmYWxzZSxcbiAgZzogW1xuICAgICcwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAnICtcbiAgICAnMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgJyArXG4gICAgJ2EyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2JyxcbiAgICAnMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgJyArXG4gICAgJzU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxICcgK1xuICAgICczZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCdcbiAgXVxufSk7XG5cbmRlZmluZUN1cnZlKCdjdXJ2ZTI1NTE5Jywge1xuICB0eXBlOiAnbW9udCcsXG4gIHByaW1lOiAncDI1NTE5JyxcbiAgcDogJzdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQnLFxuICBhOiAnNzZkMDYnLFxuICBiOiAnMScsXG4gIG46ICcxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkJyxcbiAgaGFzaDogaGFzaC5zaGEyNTYsXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzknXG4gIF1cbn0pO1xuXG5kZWZpbmVDdXJ2ZSgnZWQyNTUxOScsIHtcbiAgdHlwZTogJ2Vkd2FyZHMnLFxuICBwcmltZTogJ3AyNTUxOScsXG4gIHA6ICc3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkJyxcbiAgYTogJy0xJyxcbiAgYzogJzEnLFxuICAvLyAtMTIxNjY1ICogKDEyMTY2Nl4oLTEpKSAobW9kIFApXG4gIGQ6ICc1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzJyxcbiAgbjogJzEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQnLFxuICBoYXNoOiBoYXNoLnNoYTI1NixcbiAgZ1JlZDogZmFsc2UsXG4gIGc6IFtcbiAgICAnMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYScsXG5cbiAgICAvLyA0LzVcbiAgICAnNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCdcbiAgXVxufSk7XG5cbnZhciBwcmU7XG50cnkge1xuICBwcmUgPSByZXF1aXJlKCcuL3ByZWNvbXB1dGVkL3NlY3AyNTZrMScpO1xufSBjYXRjaCAoZSkge1xuICBwcmUgPSB1bmRlZmluZWQ7XG59XG5cbmRlZmluZUN1cnZlKCdzZWNwMjU2azEnLCB7XG4gIHR5cGU6ICdzaG9ydCcsXG4gIHByaW1lOiAnazI1NicsXG4gIHA6ICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZicsXG4gIGE6ICcwJyxcbiAgYjogJzcnLFxuICBuOiAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEnLFxuICBoOiAnMScsXG4gIGhhc2g6IGhhc2guc2hhMjU2LFxuXG4gIC8vIFByZWNvbXB1dGVkIGVuZG9tb3JwaGlzbVxuICBiZXRhOiAnN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZScsXG4gIGxhbWJkYTogJzUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzInLFxuICBiYXNpczogW1xuICAgIHtcbiAgICAgIGE6ICczMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNScsXG4gICAgICBiOiAnLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzJ1xuICAgIH0sXG4gICAge1xuICAgICAgYTogJzExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCcsXG4gICAgICBiOiAnMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUnXG4gICAgfVxuICBdLFxuXG4gIGdSZWQ6IGZhbHNlLFxuICBnOiBbXG4gICAgJzc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgnLFxuICAgICc0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4JyxcbiAgICBwcmVcbiAgXVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgSG1hY0RSQkcgPSByZXF1aXJlKCdobWFjLWRyYmcnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbnZhciBLZXlQYWlyID0gcmVxdWlyZSgnLi9rZXknKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuL3NpZ25hdHVyZScpO1xuXG5mdW5jdGlvbiBFQyhvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFQykpXG4gICAgcmV0dXJuIG5ldyBFQyhvcHRpb25zKTtcblxuICAvLyBTaG9ydGN1dCBgZWxsaXB0aWMuZWMoY3VydmUtbmFtZSlgXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBhc3NlcnQoZWxsaXB0aWMuY3VydmVzLmhhc093blByb3BlcnR5KG9wdGlvbnMpLCAnVW5rbm93biBjdXJ2ZSAnICsgb3B0aW9ucyk7XG5cbiAgICBvcHRpb25zID0gZWxsaXB0aWMuY3VydmVzW29wdGlvbnNdO1xuICB9XG5cbiAgLy8gU2hvcnRjdXQgZm9yIGBlbGxpcHRpYy5lYyhlbGxpcHRpYy5jdXJ2ZXMuY3VydmVOYW1lKWBcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBlbGxpcHRpYy5jdXJ2ZXMuUHJlc2V0Q3VydmUpXG4gICAgb3B0aW9ucyA9IHsgY3VydmU6IG9wdGlvbnMgfTtcblxuICB0aGlzLmN1cnZlID0gb3B0aW9ucy5jdXJ2ZS5jdXJ2ZTtcbiAgdGhpcy5uID0gdGhpcy5jdXJ2ZS5uO1xuICB0aGlzLm5oID0gdGhpcy5uLnVzaHJuKDEpO1xuICB0aGlzLmcgPSB0aGlzLmN1cnZlLmc7XG5cbiAgLy8gUG9pbnQgb24gY3VydmVcbiAgdGhpcy5nID0gb3B0aW9ucy5jdXJ2ZS5nO1xuICB0aGlzLmcucHJlY29tcHV0ZShvcHRpb25zLmN1cnZlLm4uYml0TGVuZ3RoKCkgKyAxKTtcblxuICAvLyBIYXNoIGZvciBmdW5jdGlvbiBmb3IgRFJCR1xuICB0aGlzLmhhc2ggPSBvcHRpb25zLmhhc2ggfHwgb3B0aW9ucy5jdXJ2ZS5oYXNoO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFQztcblxuRUMucHJvdG90eXBlLmtleVBhaXIgPSBmdW5jdGlvbiBrZXlQYWlyKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBLZXlQYWlyKHRoaXMsIG9wdGlvbnMpO1xufTtcblxuRUMucHJvdG90eXBlLmtleUZyb21Qcml2YXRlID0gZnVuY3Rpb24ga2V5RnJvbVByaXZhdGUocHJpdiwgZW5jKSB7XG4gIHJldHVybiBLZXlQYWlyLmZyb21Qcml2YXRlKHRoaXMsIHByaXYsIGVuYyk7XG59O1xuXG5FQy5wcm90b3R5cGUua2V5RnJvbVB1YmxpYyA9IGZ1bmN0aW9uIGtleUZyb21QdWJsaWMocHViLCBlbmMpIHtcbiAgcmV0dXJuIEtleVBhaXIuZnJvbVB1YmxpYyh0aGlzLCBwdWIsIGVuYyk7XG59O1xuXG5FQy5wcm90b3R5cGUuZ2VuS2V5UGFpciA9IGZ1bmN0aW9uIGdlbktleVBhaXIob3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpXG4gICAgb3B0aW9ucyA9IHt9O1xuXG4gIC8vIEluc3RhbnRpYXRlIEhtYWNfRFJCR1xuICB2YXIgZHJiZyA9IG5ldyBIbWFjRFJCRyh7XG4gICAgaGFzaDogdGhpcy5oYXNoLFxuICAgIHBlcnM6IG9wdGlvbnMucGVycyxcbiAgICBwZXJzRW5jOiBvcHRpb25zLnBlcnNFbmMgfHwgJ3V0ZjgnLFxuICAgIGVudHJvcHk6IG9wdGlvbnMuZW50cm9weSB8fCBlbGxpcHRpYy5yYW5kKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLFxuICAgIGVudHJvcHlFbmM6IG9wdGlvbnMuZW50cm9weSAmJiBvcHRpb25zLmVudHJvcHlFbmMgfHwgJ3V0ZjgnLFxuICAgIG5vbmNlOiB0aGlzLm4udG9BcnJheSgpXG4gIH0pO1xuXG4gIHZhciBieXRlcyA9IHRoaXMubi5ieXRlTGVuZ3RoKCk7XG4gIHZhciBuczIgPSB0aGlzLm4uc3ViKG5ldyBCTigyKSk7XG4gIGRvIHtcbiAgICB2YXIgcHJpdiA9IG5ldyBCTihkcmJnLmdlbmVyYXRlKGJ5dGVzKSk7XG4gICAgaWYgKHByaXYuY21wKG5zMikgPiAwKVxuICAgICAgY29udGludWU7XG5cbiAgICBwcml2LmlhZGRuKDEpO1xuICAgIHJldHVybiB0aGlzLmtleUZyb21Qcml2YXRlKHByaXYpO1xuICB9IHdoaWxlICh0cnVlKTtcbn07XG5cbkVDLnByb3RvdHlwZS5fdHJ1bmNhdGVUb04gPSBmdW5jdGlvbiB0cnVuY2F0ZVRvTihtc2csIHRydW5jT25seSkge1xuICB2YXIgZGVsdGEgPSBtc2cuYnl0ZUxlbmd0aCgpICogOCAtIHRoaXMubi5iaXRMZW5ndGgoKTtcbiAgaWYgKGRlbHRhID4gMClcbiAgICBtc2cgPSBtc2cudXNocm4oZGVsdGEpO1xuICBpZiAoIXRydW5jT25seSAmJiBtc2cuY21wKHRoaXMubikgPj0gMClcbiAgICByZXR1cm4gbXNnLnN1Yih0aGlzLm4pO1xuICBlbHNlXG4gICAgcmV0dXJuIG1zZztcbn07XG5cbkVDLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gc2lnbihtc2csIGtleSwgZW5jLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZW5jID09PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMgPSBlbmM7XG4gICAgZW5jID0gbnVsbDtcbiAgfVxuICBpZiAoIW9wdGlvbnMpXG4gICAgb3B0aW9ucyA9IHt9O1xuXG4gIGtleSA9IHRoaXMua2V5RnJvbVByaXZhdGUoa2V5LCBlbmMpO1xuICBtc2cgPSB0aGlzLl90cnVuY2F0ZVRvTihuZXcgQk4obXNnLCAxNikpO1xuXG4gIC8vIFplcm8tZXh0ZW5kIGtleSB0byBwcm92aWRlIGVub3VnaCBlbnRyb3B5XG4gIHZhciBieXRlcyA9IHRoaXMubi5ieXRlTGVuZ3RoKCk7XG4gIHZhciBia2V5ID0ga2V5LmdldFByaXZhdGUoKS50b0FycmF5KCdiZScsIGJ5dGVzKTtcblxuICAvLyBaZXJvLWV4dGVuZCBub25jZSB0byBoYXZlIHRoZSBzYW1lIGJ5dGUgc2l6ZSBhcyBOXG4gIHZhciBub25jZSA9IG1zZy50b0FycmF5KCdiZScsIGJ5dGVzKTtcblxuICAvLyBJbnN0YW50aWF0ZSBIbWFjX0RSQkdcbiAgdmFyIGRyYmcgPSBuZXcgSG1hY0RSQkcoe1xuICAgIGhhc2g6IHRoaXMuaGFzaCxcbiAgICBlbnRyb3B5OiBia2V5LFxuICAgIG5vbmNlOiBub25jZSxcbiAgICBwZXJzOiBvcHRpb25zLnBlcnMsXG4gICAgcGVyc0VuYzogb3B0aW9ucy5wZXJzRW5jIHx8ICd1dGY4J1xuICB9KTtcblxuICAvLyBOdW1iZXIgb2YgYnl0ZXMgdG8gZ2VuZXJhdGVcbiAgdmFyIG5zMSA9IHRoaXMubi5zdWIobmV3IEJOKDEpKTtcblxuICBmb3IgKHZhciBpdGVyID0gMDsgdHJ1ZTsgaXRlcisrKSB7XG4gICAgdmFyIGsgPSBvcHRpb25zLmsgP1xuICAgICAgICBvcHRpb25zLmsoaXRlcikgOlxuICAgICAgICBuZXcgQk4oZHJiZy5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7XG4gICAgayA9IHRoaXMuX3RydW5jYXRlVG9OKGssIHRydWUpO1xuICAgIGlmIChrLmNtcG4oMSkgPD0gMCB8fCBrLmNtcChuczEpID49IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIHZhciBrcCA9IHRoaXMuZy5tdWwoayk7XG4gICAgaWYgKGtwLmlzSW5maW5pdHkoKSlcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgdmFyIGtwWCA9IGtwLmdldFgoKTtcbiAgICB2YXIgciA9IGtwWC51bW9kKHRoaXMubik7XG4gICAgaWYgKHIuY21wbigwKSA9PT0gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgdmFyIHMgPSBrLmludm0odGhpcy5uKS5tdWwoci5tdWwoa2V5LmdldFByaXZhdGUoKSkuaWFkZChtc2cpKTtcbiAgICBzID0gcy51bW9kKHRoaXMubik7XG4gICAgaWYgKHMuY21wbigwKSA9PT0gMClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgdmFyIHJlY292ZXJ5UGFyYW0gPSAoa3AuZ2V0WSgpLmlzT2RkKCkgPyAxIDogMCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgKGtwWC5jbXAocikgIT09IDAgPyAyIDogMCk7XG5cbiAgICAvLyBVc2UgY29tcGxlbWVudCBvZiBgc2AsIGlmIGl0IGlzID4gYG4gLyAyYFxuICAgIGlmIChvcHRpb25zLmNhbm9uaWNhbCAmJiBzLmNtcCh0aGlzLm5oKSA+IDApIHtcbiAgICAgIHMgPSB0aGlzLm4uc3ViKHMpO1xuICAgICAgcmVjb3ZlcnlQYXJhbSBePSAxO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKHsgcjogciwgczogcywgcmVjb3ZlcnlQYXJhbTogcmVjb3ZlcnlQYXJhbSB9KTtcbiAgfVxufTtcblxuRUMucHJvdG90eXBlLnZlcmlmeSA9IGZ1bmN0aW9uIHZlcmlmeShtc2csIHNpZ25hdHVyZSwga2V5LCBlbmMpIHtcbiAgbXNnID0gdGhpcy5fdHJ1bmNhdGVUb04obmV3IEJOKG1zZywgMTYpKTtcbiAga2V5ID0gdGhpcy5rZXlGcm9tUHVibGljKGtleSwgZW5jKTtcbiAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShzaWduYXR1cmUsICdoZXgnKTtcblxuICAvLyBQZXJmb3JtIHByaW1pdGl2ZSB2YWx1ZXMgdmFsaWRhdGlvblxuICB2YXIgciA9IHNpZ25hdHVyZS5yO1xuICB2YXIgcyA9IHNpZ25hdHVyZS5zO1xuICBpZiAoci5jbXBuKDEpIDwgMCB8fCByLmNtcCh0aGlzLm4pID49IDApXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAocy5jbXBuKDEpIDwgMCB8fCBzLmNtcCh0aGlzLm4pID49IDApXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIFZhbGlkYXRlIHNpZ25hdHVyZVxuICB2YXIgc2ludiA9IHMuaW52bSh0aGlzLm4pO1xuICB2YXIgdTEgPSBzaW52Lm11bChtc2cpLnVtb2QodGhpcy5uKTtcbiAgdmFyIHUyID0gc2ludi5tdWwocikudW1vZCh0aGlzLm4pO1xuXG4gIGlmICghdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrKSB7XG4gICAgdmFyIHAgPSB0aGlzLmcubXVsQWRkKHUxLCBrZXkuZ2V0UHVibGljKCksIHUyKTtcbiAgICBpZiAocC5pc0luZmluaXR5KCkpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gcC5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChyKSA9PT0gMDtcbiAgfVxuXG4gIC8vIE5PVEU6IEdyZWcgTWF4d2VsbCdzIHRyaWNrLCBpbnNwaXJlZCBieTpcbiAgLy8gaHR0cHM6Ly9naXQuaW8vdmFkM0tcblxuICB2YXIgcCA9IHRoaXMuZy5qbXVsQWRkKHUxLCBrZXkuZ2V0UHVibGljKCksIHUyKTtcbiAgaWYgKHAuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBDb21wYXJlIGBwLnhgIG9mIEphY29iaWFuIHBvaW50IHdpdGggYHJgLFxuICAvLyB0aGlzIHdpbGwgZG8gYHAueCA9PSByICogcC56XjJgIGluc3RlYWQgb2YgbXVsdGlwbHlpbmcgYHAueGAgYnkgdGhlXG4gIC8vIGludmVyc2Ugb2YgYHAuel4yYFxuICByZXR1cm4gcC5lcVhUb1Aocik7XG59O1xuXG5FQy5wcm90b3R5cGUucmVjb3ZlclB1YktleSA9IGZ1bmN0aW9uKG1zZywgc2lnbmF0dXJlLCBqLCBlbmMpIHtcbiAgYXNzZXJ0KCgzICYgaikgPT09IGosICdUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzJyk7XG4gIHNpZ25hdHVyZSA9IG5ldyBTaWduYXR1cmUoc2lnbmF0dXJlLCBlbmMpO1xuXG4gIHZhciBuID0gdGhpcy5uO1xuICB2YXIgZSA9IG5ldyBCTihtc2cpO1xuICB2YXIgciA9IHNpZ25hdHVyZS5yO1xuICB2YXIgcyA9IHNpZ25hdHVyZS5zO1xuXG4gIC8vIEEgc2V0IExTQiBzaWduaWZpZXMgdGhhdCB0aGUgeS1jb29yZGluYXRlIGlzIG9kZFxuICB2YXIgaXNZT2RkID0gaiAmIDE7XG4gIHZhciBpc1NlY29uZEtleSA9IGogPj4gMTtcbiAgaWYgKHIuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpID49IDAgJiYgaXNTZWNvbmRLZXkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUnKTtcblxuICAvLyAxLjEuIExldCB4ID0gciArIGpuLlxuICBpZiAoaXNTZWNvbmRLZXkpXG4gICAgciA9IHRoaXMuY3VydmUucG9pbnRGcm9tWChyLmFkZCh0aGlzLmN1cnZlLm4pLCBpc1lPZGQpO1xuICBlbHNlXG4gICAgciA9IHRoaXMuY3VydmUucG9pbnRGcm9tWChyLCBpc1lPZGQpO1xuXG4gIHZhciBySW52ID0gc2lnbmF0dXJlLnIuaW52bShuKTtcbiAgdmFyIHMxID0gbi5zdWIoZSkubXVsKHJJbnYpLnVtb2Qobik7XG4gIHZhciBzMiA9IHMubXVsKHJJbnYpLnVtb2Qobik7XG5cbiAgLy8gMS42LjEgQ29tcHV0ZSBRID0gcl4tMSAoc1IgLSAgZUcpXG4gIC8vICAgICAgICAgICAgICAgUSA9IHJeLTEgKHNSICsgLWVHKVxuICByZXR1cm4gdGhpcy5nLm11bEFkZChzMSwgciwgczIpO1xufTtcblxuRUMucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW0gPSBmdW5jdGlvbihlLCBzaWduYXR1cmUsIFEsIGVuYykge1xuICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKHNpZ25hdHVyZSwgZW5jKTtcbiAgaWYgKHNpZ25hdHVyZS5yZWNvdmVyeVBhcmFtICE9PSBudWxsKVxuICAgIHJldHVybiBzaWduYXR1cmUucmVjb3ZlcnlQYXJhbTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgIHZhciBRcHJpbWU7XG4gICAgdHJ5IHtcbiAgICAgIFFwcmltZSA9IHRoaXMucmVjb3ZlclB1YktleShlLCBzaWduYXR1cmUsIGkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChRcHJpbWUuZXEoUSkpXG4gICAgICByZXR1cm4gaTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIEtleVBhaXIoZWMsIG9wdGlvbnMpIHtcbiAgdGhpcy5lYyA9IGVjO1xuICB0aGlzLnByaXYgPSBudWxsO1xuICB0aGlzLnB1YiA9IG51bGw7XG5cbiAgLy8gS2V5UGFpcihlYywgeyBwcml2OiAuLi4sIHB1YjogLi4uIH0pXG4gIGlmIChvcHRpb25zLnByaXYpXG4gICAgdGhpcy5faW1wb3J0UHJpdmF0ZShvcHRpb25zLnByaXYsIG9wdGlvbnMucHJpdkVuYyk7XG4gIGlmIChvcHRpb25zLnB1YilcbiAgICB0aGlzLl9pbXBvcnRQdWJsaWMob3B0aW9ucy5wdWIsIG9wdGlvbnMucHViRW5jKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gS2V5UGFpcjtcblxuS2V5UGFpci5mcm9tUHVibGljID0gZnVuY3Rpb24gZnJvbVB1YmxpYyhlYywgcHViLCBlbmMpIHtcbiAgaWYgKHB1YiBpbnN0YW5jZW9mIEtleVBhaXIpXG4gICAgcmV0dXJuIHB1YjtcblxuICByZXR1cm4gbmV3IEtleVBhaXIoZWMsIHtcbiAgICBwdWI6IHB1YixcbiAgICBwdWJFbmM6IGVuY1xuICB9KTtcbn07XG5cbktleVBhaXIuZnJvbVByaXZhdGUgPSBmdW5jdGlvbiBmcm9tUHJpdmF0ZShlYywgcHJpdiwgZW5jKSB7XG4gIGlmIChwcml2IGluc3RhbmNlb2YgS2V5UGFpcilcbiAgICByZXR1cm4gcHJpdjtcblxuICByZXR1cm4gbmV3IEtleVBhaXIoZWMsIHtcbiAgICBwcml2OiBwcml2LFxuICAgIHByaXZFbmM6IGVuY1xuICB9KTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24gdmFsaWRhdGUoKSB7XG4gIHZhciBwdWIgPSB0aGlzLmdldFB1YmxpYygpO1xuXG4gIGlmIChwdWIuaXNJbmZpbml0eSgpKVxuICAgIHJldHVybiB7IHJlc3VsdDogZmFsc2UsIHJlYXNvbjogJ0ludmFsaWQgcHVibGljIGtleScgfTtcbiAgaWYgKCFwdWIudmFsaWRhdGUoKSlcbiAgICByZXR1cm4geyByZXN1bHQ6IGZhbHNlLCByZWFzb246ICdQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50JyB9O1xuICBpZiAoIXB1Yi5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCkpXG4gICAgcmV0dXJuIHsgcmVzdWx0OiBmYWxzZSwgcmVhc29uOiAnUHVibGljIGtleSAqIE4gIT0gTycgfTtcblxuICByZXR1cm4geyByZXN1bHQ6IHRydWUsIHJlYXNvbjogbnVsbCB9O1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuZ2V0UHVibGljID0gZnVuY3Rpb24gZ2V0UHVibGljKGNvbXBhY3QsIGVuYykge1xuICAvLyBjb21wYWN0IGlzIG9wdGlvbmFsIGFyZ3VtZW50XG4gIGlmICh0eXBlb2YgY29tcGFjdCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmMgPSBjb21wYWN0O1xuICAgIGNvbXBhY3QgPSBudWxsO1xuICB9XG5cbiAgaWYgKCF0aGlzLnB1YilcbiAgICB0aGlzLnB1YiA9IHRoaXMuZWMuZy5tdWwodGhpcy5wcml2KTtcblxuICBpZiAoIWVuYylcbiAgICByZXR1cm4gdGhpcy5wdWI7XG5cbiAgcmV0dXJuIHRoaXMucHViLmVuY29kZShlbmMsIGNvbXBhY3QpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuZ2V0UHJpdmF0ZSA9IGZ1bmN0aW9uIGdldFByaXZhdGUoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB0aGlzLnByaXYudG9TdHJpbmcoMTYsIDIpO1xuICBlbHNlXG4gICAgcmV0dXJuIHRoaXMucHJpdjtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlID0gZnVuY3Rpb24gX2ltcG9ydFByaXZhdGUoa2V5LCBlbmMpIHtcbiAgdGhpcy5wcml2ID0gbmV3IEJOKGtleSwgZW5jIHx8IDE2KTtcblxuICAvLyBFbnN1cmUgdGhhdCB0aGUgcHJpdiB3b24ndCBiZSBiaWdnZXIgdGhhbiBuLCBvdGhlcndpc2Ugd2UgbWF5IGZhaWxcbiAgLy8gaW4gZml4ZWQgbXVsdGlwbGljYXRpb24gbWV0aG9kXG4gIHRoaXMucHJpdiA9IHRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubik7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS5faW1wb3J0UHVibGljID0gZnVuY3Rpb24gX2ltcG9ydFB1YmxpYyhrZXksIGVuYykge1xuICBpZiAoa2V5LnggfHwga2V5LnkpIHtcbiAgICAvLyBNb250Z29tZXJ5IHBvaW50cyBvbmx5IGhhdmUgYW4gYHhgIGNvb3JkaW5hdGUuXG4gICAgLy8gV2VpZXJzdHJhc3MvRWR3YXJkcyBwb2ludHMgb24gdGhlIG90aGVyIGhhbmQgaGF2ZSBib3RoIGB4YCBhbmRcbiAgICAvLyBgeWAgY29vcmRpbmF0ZXMuXG4gICAgaWYgKHRoaXMuZWMuY3VydmUudHlwZSA9PT0gJ21vbnQnKSB7XG4gICAgICBhc3NlcnQoa2V5LngsICdOZWVkIHggY29vcmRpbmF0ZScpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lYy5jdXJ2ZS50eXBlID09PSAnc2hvcnQnIHx8XG4gICAgICAgICAgICAgICB0aGlzLmVjLmN1cnZlLnR5cGUgPT09ICdlZHdhcmRzJykge1xuICAgICAgYXNzZXJ0KGtleS54ICYmIGtleS55LCAnTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZScpO1xuICAgIH1cbiAgICB0aGlzLnB1YiA9IHRoaXMuZWMuY3VydmUucG9pbnQoa2V5LngsIGtleS55KTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5wdWIgPSB0aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KGtleSwgZW5jKTtcbn07XG5cbi8vIEVDREhcbktleVBhaXIucHJvdG90eXBlLmRlcml2ZSA9IGZ1bmN0aW9uIGRlcml2ZShwdWIpIHtcbiAgcmV0dXJuIHB1Yi5tdWwodGhpcy5wcml2KS5nZXRYKCk7XG59O1xuXG4vLyBFQ0RTQVxuS2V5UGFpci5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24obXNnLCBlbmMsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRoaXMuZWMuc2lnbihtc2csIHRoaXMsIGVuYywgb3B0aW9ucyk7XG59O1xuXG5LZXlQYWlyLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobXNnLCBzaWduYXR1cmUpIHtcbiAgcmV0dXJuIHRoaXMuZWMudmVyaWZ5KG1zZywgc2lnbmF0dXJlLCB0aGlzKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICByZXR1cm4gJzxLZXkgcHJpdjogJyArICh0aGlzLnByaXYgJiYgdGhpcy5wcml2LnRvU3RyaW5nKDE2LCAyKSkgK1xuICAgICAgICAgJyBwdWI6ICcgKyAodGhpcy5wdWIgJiYgdGhpcy5wdWIuaW5zcGVjdCgpKSArICcgPic7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xuXG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xuXG5mdW5jdGlvbiBTaWduYXR1cmUob3B0aW9ucywgZW5jKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgU2lnbmF0dXJlKVxuICAgIHJldHVybiBvcHRpb25zO1xuXG4gIGlmICh0aGlzLl9pbXBvcnRERVIob3B0aW9ucywgZW5jKSlcbiAgICByZXR1cm47XG5cbiAgYXNzZXJ0KG9wdGlvbnMuciAmJiBvcHRpb25zLnMsICdTaWduYXR1cmUgd2l0aG91dCByIG9yIHMnKTtcbiAgdGhpcy5yID0gbmV3IEJOKG9wdGlvbnMuciwgMTYpO1xuICB0aGlzLnMgPSBuZXcgQk4ob3B0aW9ucy5zLCAxNik7XG4gIGlmIChvcHRpb25zLnJlY292ZXJ5UGFyYW0gPT09IHVuZGVmaW5lZClcbiAgICB0aGlzLnJlY292ZXJ5UGFyYW0gPSBudWxsO1xuICBlbHNlXG4gICAgdGhpcy5yZWNvdmVyeVBhcmFtID0gb3B0aW9ucy5yZWNvdmVyeVBhcmFtO1xufVxubW9kdWxlLmV4cG9ydHMgPSBTaWduYXR1cmU7XG5cbmZ1bmN0aW9uIFBvc2l0aW9uKCkge1xuICB0aGlzLnBsYWNlID0gMDtcbn1cblxuZnVuY3Rpb24gZ2V0TGVuZ3RoKGJ1ZiwgcCkge1xuICB2YXIgaW5pdGlhbCA9IGJ1ZltwLnBsYWNlKytdO1xuICBpZiAoIShpbml0aWFsICYgMHg4MCkpIHtcbiAgICByZXR1cm4gaW5pdGlhbDtcbiAgfVxuICB2YXIgb2N0ZXRMZW4gPSBpbml0aWFsICYgMHhmO1xuICB2YXIgdmFsID0gMDtcbiAgZm9yICh2YXIgaSA9IDAsIG9mZiA9IHAucGxhY2U7IGkgPCBvY3RldExlbjsgaSsrLCBvZmYrKykge1xuICAgIHZhbCA8PD0gODtcbiAgICB2YWwgfD0gYnVmW29mZl07XG4gIH1cbiAgcC5wbGFjZSA9IG9mZjtcbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gcm1QYWRkaW5nKGJ1Zikge1xuICB2YXIgaSA9IDA7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoIC0gMTtcbiAgd2hpbGUgKCFidWZbaV0gJiYgIShidWZbaSArIDFdICYgMHg4MCkgJiYgaSA8IGxlbikge1xuICAgIGkrKztcbiAgfVxuICBpZiAoaSA9PT0gMCkge1xuICAgIHJldHVybiBidWY7XG4gIH1cbiAgcmV0dXJuIGJ1Zi5zbGljZShpKTtcbn1cblxuU2lnbmF0dXJlLnByb3RvdHlwZS5faW1wb3J0REVSID0gZnVuY3Rpb24gX2ltcG9ydERFUihkYXRhLCBlbmMpIHtcbiAgZGF0YSA9IHV0aWxzLnRvQXJyYXkoZGF0YSwgZW5jKTtcbiAgdmFyIHAgPSBuZXcgUG9zaXRpb24oKTtcbiAgaWYgKGRhdGFbcC5wbGFjZSsrXSAhPT0gMHgzMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGVuID0gZ2V0TGVuZ3RoKGRhdGEsIHApO1xuICBpZiAoKGxlbiArIHAucGxhY2UpICE9PSBkYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZGF0YVtwLnBsYWNlKytdICE9PSAweDAyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBybGVuID0gZ2V0TGVuZ3RoKGRhdGEsIHApO1xuICB2YXIgciA9IGRhdGEuc2xpY2UocC5wbGFjZSwgcmxlbiArIHAucGxhY2UpO1xuICBwLnBsYWNlICs9IHJsZW47XG4gIGlmIChkYXRhW3AucGxhY2UrK10gIT09IDB4MDIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHNsZW4gPSBnZXRMZW5ndGgoZGF0YSwgcCk7XG4gIGlmIChkYXRhLmxlbmd0aCAhPT0gc2xlbiArIHAucGxhY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHMgPSBkYXRhLnNsaWNlKHAucGxhY2UsIHNsZW4gKyBwLnBsYWNlKTtcbiAgaWYgKHJbMF0gPT09IDAgJiYgKHJbMV0gJiAweDgwKSkge1xuICAgIHIgPSByLnNsaWNlKDEpO1xuICB9XG4gIGlmIChzWzBdID09PSAwICYmIChzWzFdICYgMHg4MCkpIHtcbiAgICBzID0gcy5zbGljZSgxKTtcbiAgfVxuXG4gIHRoaXMuciA9IG5ldyBCTihyKTtcbiAgdGhpcy5zID0gbmV3IEJOKHMpO1xuICB0aGlzLnJlY292ZXJ5UGFyYW0gPSBudWxsO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gY29uc3RydWN0TGVuZ3RoKGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPCAweDgwKSB7XG4gICAgYXJyLnB1c2gobGVuKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG9jdGV0cyA9IDEgKyAoTWF0aC5sb2cobGVuKSAvIE1hdGguTE4yID4+PiAzKTtcbiAgYXJyLnB1c2gob2N0ZXRzIHwgMHg4MCk7XG4gIHdoaWxlICgtLW9jdGV0cykge1xuICAgIGFyci5wdXNoKChsZW4gPj4+IChvY3RldHMgPDwgMykpICYgMHhmZik7XG4gIH1cbiAgYXJyLnB1c2gobGVuKTtcbn1cblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b0RFUiA9IGZ1bmN0aW9uIHRvREVSKGVuYykge1xuICB2YXIgciA9IHRoaXMuci50b0FycmF5KCk7XG4gIHZhciBzID0gdGhpcy5zLnRvQXJyYXkoKTtcblxuICAvLyBQYWQgdmFsdWVzXG4gIGlmIChyWzBdICYgMHg4MClcbiAgICByID0gWyAwIF0uY29uY2F0KHIpO1xuICAvLyBQYWQgdmFsdWVzXG4gIGlmIChzWzBdICYgMHg4MClcbiAgICBzID0gWyAwIF0uY29uY2F0KHMpO1xuXG4gIHIgPSBybVBhZGRpbmcocik7XG4gIHMgPSBybVBhZGRpbmcocyk7XG5cbiAgd2hpbGUgKCFzWzBdICYmICEoc1sxXSAmIDB4ODApKSB7XG4gICAgcyA9IHMuc2xpY2UoMSk7XG4gIH1cbiAgdmFyIGFyciA9IFsgMHgwMiBdO1xuICBjb25zdHJ1Y3RMZW5ndGgoYXJyLCByLmxlbmd0aCk7XG4gIGFyciA9IGFyci5jb25jYXQocik7XG4gIGFyci5wdXNoKDB4MDIpO1xuICBjb25zdHJ1Y3RMZW5ndGgoYXJyLCBzLmxlbmd0aCk7XG4gIHZhciBiYWNrSGFsZiA9IGFyci5jb25jYXQocyk7XG4gIHZhciByZXMgPSBbIDB4MzAgXTtcbiAgY29uc3RydWN0TGVuZ3RoKHJlcywgYmFja0hhbGYubGVuZ3RoKTtcbiAgcmVzID0gcmVzLmNvbmNhdChiYWNrSGFsZik7XG4gIHJldHVybiB1dGlscy5lbmNvZGUocmVzLCBlbmMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGhhc2ggPSByZXF1aXJlKCdoYXNoLmpzJyk7XG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xudmFyIHBhcnNlQnl0ZXMgPSB1dGlscy5wYXJzZUJ5dGVzO1xudmFyIEtleVBhaXIgPSByZXF1aXJlKCcuL2tleScpO1xudmFyIFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vc2lnbmF0dXJlJyk7XG5cbmZ1bmN0aW9uIEVERFNBKGN1cnZlKSB7XG4gIGFzc2VydChjdXJ2ZSA9PT0gJ2VkMjU1MTknLCAnb25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhcicpO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBFRERTQSkpXG4gICAgcmV0dXJuIG5ldyBFRERTQShjdXJ2ZSk7XG5cbiAgdmFyIGN1cnZlID0gZWxsaXB0aWMuY3VydmVzW2N1cnZlXS5jdXJ2ZTtcbiAgdGhpcy5jdXJ2ZSA9IGN1cnZlO1xuICB0aGlzLmcgPSBjdXJ2ZS5nO1xuICB0aGlzLmcucHJlY29tcHV0ZShjdXJ2ZS5uLmJpdExlbmd0aCgpICsgMSk7XG5cbiAgdGhpcy5wb2ludENsYXNzID0gY3VydmUucG9pbnQoKS5jb25zdHJ1Y3RvcjtcbiAgdGhpcy5lbmNvZGluZ0xlbmd0aCA9IE1hdGguY2VpbChjdXJ2ZS5uLmJpdExlbmd0aCgpIC8gOCk7XG4gIHRoaXMuaGFzaCA9IGhhc2guc2hhNTEyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVERFNBO1xuXG4vKipcbiogQHBhcmFtIHtBcnJheXxTdHJpbmd9IG1lc3NhZ2UgLSBtZXNzYWdlIGJ5dGVzXG4qIEBwYXJhbSB7QXJyYXl8U3RyaW5nfEtleVBhaXJ9IHNlY3JldCAtIHNlY3JldCBieXRlcyBvciBhIGtleXBhaXJcbiogQHJldHVybnMge1NpZ25hdHVyZX0gLSBzaWduYXR1cmVcbiovXG5FRERTQS5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ24obWVzc2FnZSwgc2VjcmV0KSB7XG4gIG1lc3NhZ2UgPSBwYXJzZUJ5dGVzKG1lc3NhZ2UpO1xuICB2YXIga2V5ID0gdGhpcy5rZXlGcm9tU2VjcmV0KHNlY3JldCk7XG4gIHZhciByID0gdGhpcy5oYXNoSW50KGtleS5tZXNzYWdlUHJlZml4KCksIG1lc3NhZ2UpO1xuICB2YXIgUiA9IHRoaXMuZy5tdWwocik7XG4gIHZhciBSZW5jb2RlZCA9IHRoaXMuZW5jb2RlUG9pbnQoUik7XG4gIHZhciBzXyA9IHRoaXMuaGFzaEludChSZW5jb2RlZCwga2V5LnB1YkJ5dGVzKCksIG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAubXVsKGtleS5wcml2KCkpO1xuICB2YXIgUyA9IHIuYWRkKHNfKS51bW9kKHRoaXMuY3VydmUubik7XG4gIHJldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoeyBSOiBSLCBTOiBTLCBSZW5jb2RlZDogUmVuY29kZWQgfSk7XG59O1xuXG4vKipcbiogQHBhcmFtIHtBcnJheX0gbWVzc2FnZSAtIG1lc3NhZ2UgYnl0ZXNcbiogQHBhcmFtIHtBcnJheXxTdHJpbmd8U2lnbmF0dXJlfSBzaWcgLSBzaWcgYnl0ZXNcbiogQHBhcmFtIHtBcnJheXxTdHJpbmd8UG9pbnR8S2V5UGFpcn0gcHViIC0gcHVibGljIGtleVxuKiBAcmV0dXJucyB7Qm9vbGVhbn0gLSB0cnVlIGlmIHB1YmxpYyBrZXkgbWF0Y2hlcyBzaWcgb2YgbWVzc2FnZVxuKi9cbkVERFNBLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiB2ZXJpZnkobWVzc2FnZSwgc2lnLCBwdWIpIHtcbiAgbWVzc2FnZSA9IHBhcnNlQnl0ZXMobWVzc2FnZSk7XG4gIHNpZyA9IHRoaXMubWFrZVNpZ25hdHVyZShzaWcpO1xuICB2YXIga2V5ID0gdGhpcy5rZXlGcm9tUHVibGljKHB1Yik7XG4gIHZhciBoID0gdGhpcy5oYXNoSW50KHNpZy5SZW5jb2RlZCgpLCBrZXkucHViQnl0ZXMoKSwgbWVzc2FnZSk7XG4gIHZhciBTRyA9IHRoaXMuZy5tdWwoc2lnLlMoKSk7XG4gIHZhciBScGx1c0FoID0gc2lnLlIoKS5hZGQoa2V5LnB1YigpLm11bChoKSk7XG4gIHJldHVybiBScGx1c0FoLmVxKFNHKTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5oYXNoSW50ID0gZnVuY3Rpb24gaGFzaEludCgpIHtcbiAgdmFyIGhhc2ggPSB0aGlzLmhhc2goKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgaGFzaC51cGRhdGUoYXJndW1lbnRzW2ldKTtcbiAgcmV0dXJuIHV0aWxzLmludEZyb21MRShoYXNoLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubik7XG59O1xuXG5FRERTQS5wcm90b3R5cGUua2V5RnJvbVB1YmxpYyA9IGZ1bmN0aW9uIGtleUZyb21QdWJsaWMocHViKSB7XG4gIHJldHVybiBLZXlQYWlyLmZyb21QdWJsaWModGhpcywgcHViKTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0ID0gZnVuY3Rpb24ga2V5RnJvbVNlY3JldChzZWNyZXQpIHtcbiAgcmV0dXJuIEtleVBhaXIuZnJvbVNlY3JldCh0aGlzLCBzZWNyZXQpO1xufTtcblxuRUREU0EucHJvdG90eXBlLm1ha2VTaWduYXR1cmUgPSBmdW5jdGlvbiBtYWtlU2lnbmF0dXJlKHNpZykge1xuICBpZiAoc2lnIGluc3RhbmNlb2YgU2lnbmF0dXJlKVxuICAgIHJldHVybiBzaWc7XG4gIHJldHVybiBuZXcgU2lnbmF0dXJlKHRoaXMsIHNpZyk7XG59O1xuXG4vKipcbiogKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtam9zZWZzc29uLWVkZHNhLWVkMjU1MTktMDMjc2VjdGlvbi01LjJcbipcbiogRUREU0EgZGVmaW5lcyBtZXRob2RzIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgcG9pbnRzIGFuZCBpbnRlZ2Vycy4gVGhlc2UgYXJlXG4qIGhlbHBlciBjb252ZW5pZW5jZSBtZXRob2RzLCB0aGF0IHBhc3MgYWxvbmcgdG8gdXRpbGl0eSBmdW5jdGlvbnMgaW1wbGllZFxuKiBwYXJhbWV0ZXJzLlxuKlxuKi9cbkVERFNBLnByb3RvdHlwZS5lbmNvZGVQb2ludCA9IGZ1bmN0aW9uIGVuY29kZVBvaW50KHBvaW50KSB7XG4gIHZhciBlbmMgPSBwb2ludC5nZXRZKCkudG9BcnJheSgnbGUnLCB0aGlzLmVuY29kaW5nTGVuZ3RoKTtcbiAgZW5jW3RoaXMuZW5jb2RpbmdMZW5ndGggLSAxXSB8PSBwb2ludC5nZXRYKCkuaXNPZGQoKSA/IDB4ODAgOiAwO1xuICByZXR1cm4gZW5jO1xufTtcblxuRUREU0EucHJvdG90eXBlLmRlY29kZVBvaW50ID0gZnVuY3Rpb24gZGVjb2RlUG9pbnQoYnl0ZXMpIHtcbiAgYnl0ZXMgPSB1dGlscy5wYXJzZUJ5dGVzKGJ5dGVzKTtcblxuICB2YXIgbGFzdEl4ID0gYnl0ZXMubGVuZ3RoIC0gMTtcbiAgdmFyIG5vcm1lZCA9IGJ5dGVzLnNsaWNlKDAsIGxhc3RJeCkuY29uY2F0KGJ5dGVzW2xhc3RJeF0gJiB+MHg4MCk7XG4gIHZhciB4SXNPZGQgPSAoYnl0ZXNbbGFzdEl4XSAmIDB4ODApICE9PSAwO1xuXG4gIHZhciB5ID0gdXRpbHMuaW50RnJvbUxFKG5vcm1lZCk7XG4gIHJldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoeSwgeElzT2RkKTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5lbmNvZGVJbnQgPSBmdW5jdGlvbiBlbmNvZGVJbnQobnVtKSB7XG4gIHJldHVybiBudW0udG9BcnJheSgnbGUnLCB0aGlzLmVuY29kaW5nTGVuZ3RoKTtcbn07XG5cbkVERFNBLnByb3RvdHlwZS5kZWNvZGVJbnQgPSBmdW5jdGlvbiBkZWNvZGVJbnQoYnl0ZXMpIHtcbiAgcmV0dXJuIHV0aWxzLmludEZyb21MRShieXRlcyk7XG59O1xuXG5FRERTQS5wcm90b3R5cGUuaXNQb2ludCA9IGZ1bmN0aW9uIGlzUG9pbnQodmFsKSB7XG4gIHJldHVybiB2YWwgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3M7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZWxsaXB0aWMgPSByZXF1aXJlKCcuLi8uLi9lbGxpcHRpYycpO1xudmFyIHV0aWxzID0gZWxsaXB0aWMudXRpbHM7XG52YXIgYXNzZXJ0ID0gdXRpbHMuYXNzZXJ0O1xudmFyIHBhcnNlQnl0ZXMgPSB1dGlscy5wYXJzZUJ5dGVzO1xudmFyIGNhY2hlZFByb3BlcnR5ID0gdXRpbHMuY2FjaGVkUHJvcGVydHk7XG5cbi8qKlxuKiBAcGFyYW0ge0VERFNBfSBlZGRzYSAtIGluc3RhbmNlXG4qIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwdWJsaWMvcHJpdmF0ZSBrZXkgcGFyYW1ldGVyc1xuKlxuKiBAcGFyYW0ge0FycmF5PEJ5dGU+fSBbcGFyYW1zLnNlY3JldF0gLSBzZWNyZXQgc2VlZCBieXRlc1xuKiBAcGFyYW0ge1BvaW50fSBbcGFyYW1zLnB1Yl0gLSBwdWJsaWMga2V5IHBvaW50IChha2EgYEFgIGluIGVkZHNhIHRlcm1zKVxuKiBAcGFyYW0ge0FycmF5PEJ5dGU+fSBbcGFyYW1zLnB1Yl0gLSBwdWJsaWMga2V5IHBvaW50IGVuY29kZWQgYXMgYnl0ZXNcbipcbiovXG5mdW5jdGlvbiBLZXlQYWlyKGVkZHNhLCBwYXJhbXMpIHtcbiAgdGhpcy5lZGRzYSA9IGVkZHNhO1xuICB0aGlzLl9zZWNyZXQgPSBwYXJzZUJ5dGVzKHBhcmFtcy5zZWNyZXQpO1xuICBpZiAoZWRkc2EuaXNQb2ludChwYXJhbXMucHViKSlcbiAgICB0aGlzLl9wdWIgPSBwYXJhbXMucHViO1xuICBlbHNlXG4gICAgdGhpcy5fcHViQnl0ZXMgPSBwYXJzZUJ5dGVzKHBhcmFtcy5wdWIpO1xufVxuXG5LZXlQYWlyLmZyb21QdWJsaWMgPSBmdW5jdGlvbiBmcm9tUHVibGljKGVkZHNhLCBwdWIpIHtcbiAgaWYgKHB1YiBpbnN0YW5jZW9mIEtleVBhaXIpXG4gICAgcmV0dXJuIHB1YjtcbiAgcmV0dXJuIG5ldyBLZXlQYWlyKGVkZHNhLCB7IHB1YjogcHViIH0pO1xufTtcblxuS2V5UGFpci5mcm9tU2VjcmV0ID0gZnVuY3Rpb24gZnJvbVNlY3JldChlZGRzYSwgc2VjcmV0KSB7XG4gIGlmIChzZWNyZXQgaW5zdGFuY2VvZiBLZXlQYWlyKVxuICAgIHJldHVybiBzZWNyZXQ7XG4gIHJldHVybiBuZXcgS2V5UGFpcihlZGRzYSwgeyBzZWNyZXQ6IHNlY3JldCB9KTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLnNlY3JldCA9IGZ1bmN0aW9uIHNlY3JldCgpIHtcbiAgcmV0dXJuIHRoaXMuX3NlY3JldDtcbn07XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdwdWJCeXRlcycsIGZ1bmN0aW9uIHB1YkJ5dGVzKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAncHViJywgZnVuY3Rpb24gcHViKCkge1xuICBpZiAodGhpcy5fcHViQnl0ZXMpXG4gICAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpO1xuICByZXR1cm4gdGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoS2V5UGFpciwgJ3ByaXZCeXRlcycsIGZ1bmN0aW9uIHByaXZCeXRlcygpIHtcbiAgdmFyIGVkZHNhID0gdGhpcy5lZGRzYTtcbiAgdmFyIGhhc2ggPSB0aGlzLmhhc2goKTtcbiAgdmFyIGxhc3RJeCA9IGVkZHNhLmVuY29kaW5nTGVuZ3RoIC0gMTtcblxuICB2YXIgYSA9IGhhc2guc2xpY2UoMCwgZWRkc2EuZW5jb2RpbmdMZW5ndGgpO1xuICBhWzBdICY9IDI0ODtcbiAgYVtsYXN0SXhdICY9IDEyNztcbiAgYVtsYXN0SXhdIHw9IDY0O1xuXG4gIHJldHVybiBhO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdwcml2JywgZnVuY3Rpb24gcHJpdigpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpO1xufSk7XG5cbmNhY2hlZFByb3BlcnR5KEtleVBhaXIsICdoYXNoJywgZnVuY3Rpb24gaGFzaCgpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShLZXlQYWlyLCAnbWVzc2FnZVByZWZpeCcsIGZ1bmN0aW9uIG1lc3NhZ2VQcmVmaXgoKSB7XG4gIHJldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKTtcbn0pO1xuXG5LZXlQYWlyLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gc2lnbihtZXNzYWdlKSB7XG4gIGFzc2VydCh0aGlzLl9zZWNyZXQsICdLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeScpO1xuICByZXR1cm4gdGhpcy5lZGRzYS5zaWduKG1lc3NhZ2UsIHRoaXMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5KG1lc3NhZ2UsIHNpZykge1xuICByZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkobWVzc2FnZSwgc2lnLCB0aGlzKTtcbn07XG5cbktleVBhaXIucHJvdG90eXBlLmdldFNlY3JldCA9IGZ1bmN0aW9uIGdldFNlY3JldChlbmMpIHtcbiAgYXNzZXJ0KHRoaXMuX3NlY3JldCwgJ0tleVBhaXIgaXMgcHVibGljIG9ubHknKTtcbiAgcmV0dXJuIHV0aWxzLmVuY29kZSh0aGlzLnNlY3JldCgpLCBlbmMpO1xufTtcblxuS2V5UGFpci5wcm90b3R5cGUuZ2V0UHVibGljID0gZnVuY3Rpb24gZ2V0UHVibGljKGVuYykge1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMucHViQnl0ZXMoKSwgZW5jKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gS2V5UGFpcjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBlbGxpcHRpYyA9IHJlcXVpcmUoJy4uLy4uL2VsbGlwdGljJyk7XG52YXIgdXRpbHMgPSBlbGxpcHRpYy51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG52YXIgY2FjaGVkUHJvcGVydHkgPSB1dGlscy5jYWNoZWRQcm9wZXJ0eTtcbnZhciBwYXJzZUJ5dGVzID0gdXRpbHMucGFyc2VCeXRlcztcblxuLyoqXG4qIEBwYXJhbSB7RUREU0F9IGVkZHNhIC0gZWRkc2EgaW5zdGFuY2VcbiogQHBhcmFtIHtBcnJheTxCeXRlcz58T2JqZWN0fSBzaWcgLVxuKiBAcGFyYW0ge0FycmF5PEJ5dGVzPnxQb2ludH0gW3NpZy5SXSAtIFIgcG9pbnQgYXMgUG9pbnQgb3IgYnl0ZXNcbiogQHBhcmFtIHtBcnJheTxCeXRlcz58Ym59IFtzaWcuU10gLSBTIHNjYWxhciBhcyBibiBvciBieXRlc1xuKiBAcGFyYW0ge0FycmF5PEJ5dGVzPn0gW3NpZy5SZW5jb2RlZF0gLSBSIHBvaW50IGVuY29kZWRcbiogQHBhcmFtIHtBcnJheTxCeXRlcz59IFtzaWcuU2VuY29kZWRdIC0gUyBzY2FsYXIgZW5jb2RlZFxuKi9cbmZ1bmN0aW9uIFNpZ25hdHVyZShlZGRzYSwgc2lnKSB7XG4gIHRoaXMuZWRkc2EgPSBlZGRzYTtcblxuICBpZiAodHlwZW9mIHNpZyAhPT0gJ29iamVjdCcpXG4gICAgc2lnID0gcGFyc2VCeXRlcyhzaWcpO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHNpZykpIHtcbiAgICBzaWcgPSB7XG4gICAgICBSOiBzaWcuc2xpY2UoMCwgZWRkc2EuZW5jb2RpbmdMZW5ndGgpLFxuICAgICAgUzogc2lnLnNsaWNlKGVkZHNhLmVuY29kaW5nTGVuZ3RoKVxuICAgIH07XG4gIH1cblxuICBhc3NlcnQoc2lnLlIgJiYgc2lnLlMsICdTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMnKTtcblxuICBpZiAoZWRkc2EuaXNQb2ludChzaWcuUikpXG4gICAgdGhpcy5fUiA9IHNpZy5SO1xuICBpZiAoc2lnLlMgaW5zdGFuY2VvZiBCTilcbiAgICB0aGlzLl9TID0gc2lnLlM7XG5cbiAgdGhpcy5fUmVuY29kZWQgPSBBcnJheS5pc0FycmF5KHNpZy5SKSA/IHNpZy5SIDogc2lnLlJlbmNvZGVkO1xuICB0aGlzLl9TZW5jb2RlZCA9IEFycmF5LmlzQXJyYXkoc2lnLlMpID8gc2lnLlMgOiBzaWcuU2VuY29kZWQ7XG59XG5cbmNhY2hlZFByb3BlcnR5KFNpZ25hdHVyZSwgJ1MnLCBmdW5jdGlvbiBTKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsICdSJywgZnVuY3Rpb24gUigpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKTtcbn0pO1xuXG5jYWNoZWRQcm9wZXJ0eShTaWduYXR1cmUsICdSZW5jb2RlZCcsIGZ1bmN0aW9uIFJlbmNvZGVkKCkge1xuICByZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSk7XG59KTtcblxuY2FjaGVkUHJvcGVydHkoU2lnbmF0dXJlLCAnU2VuY29kZWQnLCBmdW5jdGlvbiBTZW5jb2RlZCgpIHtcbiAgcmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKTtcbn0pO1xuXG5TaWduYXR1cmUucHJvdG90eXBlLnRvQnl0ZXMgPSBmdW5jdGlvbiB0b0J5dGVzKCkge1xuICByZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpO1xufTtcblxuU2lnbmF0dXJlLnByb3RvdHlwZS50b0hleCA9IGZ1bmN0aW9uIHRvSGV4KCkge1xuICByZXR1cm4gdXRpbHMuZW5jb2RlKHRoaXMudG9CeXRlcygpLCAnaGV4JykudG9VcHBlckNhc2UoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU2lnbmF0dXJlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRvdWJsZXM6IHtcbiAgICBzdGVwOiA0LFxuICAgIHBvaW50czogW1xuICAgICAgW1xuICAgICAgICAnZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYScsXG4gICAgICAgICdmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgnLFxuICAgICAgICAnMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5JyxcbiAgICAgICAgJ2QzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCcsXG4gICAgICAgICc0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYycsXG4gICAgICAgICc0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEnLFxuICAgICAgICAnOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhJyxcbiAgICAgICAgJzVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCcsXG4gICAgICAgICdjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2UxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQnLFxuICAgICAgICAnOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkJyxcbiAgICAgICAgJ2U1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMScsXG4gICAgICAgICc5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAnLFxuICAgICAgICAnNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3JyxcbiAgICAgICAgJzEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MicsXG4gICAgICAgICcyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNycsXG4gICAgICAgICc3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQnLFxuICAgICAgICAnNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzJyxcbiAgICAgICAgJzdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhJyxcbiAgICAgICAgJzUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCcsXG4gICAgICAgICdiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQnLFxuICAgICAgICAnNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1JyxcbiAgICAgICAgJzdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCcsXG4gICAgICAgICc0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MnLFxuICAgICAgICAnMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2JyxcbiAgICAgICAgJzZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOScsXG4gICAgICAgICdjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2M3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEnLFxuICAgICAgICAnODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiJyxcbiAgICAgICAgJ2ZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMycsXG4gICAgICAgICcyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQnLFxuICAgICAgICAnZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwJyxcbiAgICAgICAgJzczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCcsXG4gICAgICAgICdlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYScsXG4gICAgICAgICc2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEnLFxuICAgICAgICAnMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllJyxcbiAgICAgICAgJ2VmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MScsXG4gICAgICAgICcyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2I2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYnLFxuICAgICAgICAnNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgnLFxuICAgICAgICAnZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkJyxcbiAgICAgICAgJzY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NicsXG4gICAgICAgICczNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkJyxcbiAgICAgICAgJ2RkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNScsXG4gICAgICAgICc5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2E1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYnLFxuICAgICAgICAnNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxJyxcbiAgICAgICAgJzM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjJyxcbiAgICAgICAgJ2MyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MScsXG4gICAgICAgICcxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UnLFxuICAgICAgICAnNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxJyxcbiAgICAgICAgJ2M2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMycsXG4gICAgICAgICdiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2U0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYnLFxuICAgICAgICAnNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5JyxcbiAgICAgICAgJ2FlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZScsXG4gICAgICAgICdiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjknLFxuICAgICAgICAnNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyJyxcbiAgICAgICAgJzgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMycsXG4gICAgICAgICc3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MnLFxuICAgICAgICAnY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhJyxcbiAgICAgICAgJzJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MScsXG4gICAgICAgICdlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMnLFxuICAgICAgICAnZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4JyxcbiAgICAgICAgJzM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YicsXG4gICAgICAgICc2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2JjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYnLFxuICAgICAgICAnZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEnLFxuICAgICAgICAnNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAnLFxuICAgICAgICAnNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3JyxcbiAgICAgICAgJzdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZScsXG4gICAgICAgICdlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyJ1xuICAgICAgXVxuICAgIF1cbiAgfSxcbiAgbmFmOiB7XG4gICAgd25kOiA3LFxuICAgIHBvaW50czogW1xuICAgICAgW1xuICAgICAgICAnZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOScsXG4gICAgICAgICczODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQnLFxuICAgICAgICAnZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjJyxcbiAgICAgICAgJzZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZScsXG4gICAgICAgICdjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2InLFxuICAgICAgICAnZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4JyxcbiAgICAgICAgJ2FiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlJyxcbiAgICAgICAgJzU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCcsXG4gICAgICAgICc0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMnLFxuICAgICAgICAnODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1JyxcbiAgICAgICAgJzMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZicsXG4gICAgICAgICcyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCcsXG4gICAgICAgICc3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjknLFxuICAgICAgICAnYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiJyxcbiAgICAgICAgJzIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCcsXG4gICAgICAgICdlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUnLFxuICAgICAgICAnYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5JyxcbiAgICAgICAgJzI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkJyxcbiAgICAgICAgJzgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZicsXG4gICAgICAgICcxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmInLFxuICAgICAgICAnZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzknLFxuICAgICAgICAnZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMnLFxuICAgICAgICAnNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0JyxcbiAgICAgICAgJzk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCcsXG4gICAgICAgICdlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWInLFxuICAgICAgICAnNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3JyxcbiAgICAgICAgJ2NlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMScsXG4gICAgICAgICdjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAnLFxuICAgICAgICAnNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1JyxcbiAgICAgICAgJzkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4JyxcbiAgICAgICAgJzY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4JyxcbiAgICAgICAgJzU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYicsXG4gICAgICAgICczYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YnLFxuICAgICAgICAnNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzJyxcbiAgICAgICAgJ2VmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYScsXG4gICAgICAgICdlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2FmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUnLFxuICAgICAgICAnZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhJyxcbiAgICAgICAgJzc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZScsXG4gICAgICAgICdjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2YxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgnLFxuICAgICAgICAnZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjJyxcbiAgICAgICAgJzMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOScsXG4gICAgICAgICdlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWInLFxuICAgICAgICAnMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhJyxcbiAgICAgICAgJ2VmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZicsXG4gICAgICAgICc4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAnLFxuICAgICAgICAnNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0JyxcbiAgICAgICAgJ2Y1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YycsXG4gICAgICAgICdkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAnLFxuICAgICAgICAnZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwJyxcbiAgICAgICAgJ2E4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzJyxcbiAgICAgICAgJzY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZicsXG4gICAgICAgICc5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MycsXG4gICAgICAgICc0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgnLFxuICAgICAgICAnZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmJyxcbiAgICAgICAgJzVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNScsXG4gICAgICAgICc4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2VlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYnLFxuICAgICAgICAnOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1JyxcbiAgICAgICAgJzVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OScsXG4gICAgICAgICdmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MScsXG4gICAgICAgICdmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUnLFxuICAgICAgICAnNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1JyxcbiAgICAgICAgJzIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NycsXG4gICAgICAgICc0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MScsXG4gICAgICAgICc3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNScsXG4gICAgICAgICczOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYnLFxuICAgICAgICAnZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYnLFxuICAgICAgICAnZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlJyxcbiAgICAgICAgJzZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCcsXG4gICAgICAgICc2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMScsXG4gICAgICAgICczZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEnLFxuICAgICAgICAnYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2EwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTInLFxuICAgICAgICAnYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUnLFxuICAgICAgICAnY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiJyxcbiAgICAgICAgJzZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCcsXG4gICAgICAgICczMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2FmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYnLFxuICAgICAgICAnNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OScsXG4gICAgICAgICcyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYnLFxuICAgICAgICAnYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICcxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0JyxcbiAgICAgICAgJzk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YScsXG4gICAgICAgICdiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2NjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAnLFxuICAgICAgICAnYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3JyxcbiAgICAgICAgJzZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzJyxcbiAgICAgICAgJ2MzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZicsXG4gICAgICAgICcyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCcsXG4gICAgICAgICc2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2RhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEnLFxuICAgICAgICAnNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExJyxcbiAgICAgICAgJzVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMicsXG4gICAgICAgICc3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEnLFxuICAgICAgICAnYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2JyxcbiAgICAgICAgJzhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NicsXG4gICAgICAgICczOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2Q0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUnLFxuICAgICAgICAnNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0JyxcbiAgICAgICAgJzI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzcnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYScsXG4gICAgICAgICdlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTknLFxuICAgICAgICAnY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmJyxcbiAgICAgICAgJ2Y1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYycsXG4gICAgICAgICc2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDInLFxuICAgICAgICAnZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhJyxcbiAgICAgICAgJzFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjInXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCcsXG4gICAgICAgICc1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2ZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQnLFxuICAgICAgICAnNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExJyxcbiAgICAgICAgJ2NkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MycsXG4gICAgICAgICdjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MicsXG4gICAgICAgICc2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMnLFxuICAgICAgICAnY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwJyxcbiAgICAgICAgJzk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4JyxcbiAgICAgICAgJ2VlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNycsXG4gICAgICAgICdkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgnLFxuICAgICAgICAnYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlJyxcbiAgICAgICAgJzY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDknXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCcsXG4gICAgICAgICdjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YicsXG4gICAgICAgICcyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1J1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYnLFxuICAgICAgICAnZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2JyxcbiAgICAgICAgJzQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2InXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NycsXG4gICAgICAgICc2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEnLFxuICAgICAgICAnN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YydcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICdiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjJyxcbiAgICAgICAgJ2FiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MicsXG4gICAgICAgICc0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJ2QzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmInLFxuICAgICAgICAnYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NidcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1JyxcbiAgICAgICAgJ2JmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNycsXG4gICAgICAgICc2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTknLFxuICAgICAgICAnY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICczMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzJyxcbiAgICAgICAgJzU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NycsXG4gICAgICAgICc3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NicsXG4gICAgICAgICdlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzJ1xuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJzc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgnLFxuICAgICAgICAnOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCdcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgICc4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxJyxcbiAgICAgICAgJzllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEnXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCcsXG4gICAgICAgICc0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5J1xuICAgICAgXVxuICAgIF1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gZXhwb3J0cztcbnZhciBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG52YXIgbWluQXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xudmFyIG1pblV0aWxzID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWNyeXB0by11dGlscycpO1xuXG51dGlscy5hc3NlcnQgPSBtaW5Bc3NlcnQ7XG51dGlscy50b0FycmF5ID0gbWluVXRpbHMudG9BcnJheTtcbnV0aWxzLnplcm8yID0gbWluVXRpbHMuemVybzI7XG51dGlscy50b0hleCA9IG1pblV0aWxzLnRvSGV4O1xudXRpbHMuZW5jb2RlID0gbWluVXRpbHMuZW5jb2RlO1xuXG4vLyBSZXByZXNlbnQgbnVtIGluIGEgdy1OQUYgZm9ybVxuZnVuY3Rpb24gZ2V0TkFGKG51bSwgdykge1xuICB2YXIgbmFmID0gW107XG4gIHZhciB3cyA9IDEgPDwgKHcgKyAxKTtcbiAgdmFyIGsgPSBudW0uY2xvbmUoKTtcbiAgd2hpbGUgKGsuY21wbigxKSA+PSAwKSB7XG4gICAgdmFyIHo7XG4gICAgaWYgKGsuaXNPZGQoKSkge1xuICAgICAgdmFyIG1vZCA9IGsuYW5kbG4od3MgLSAxKTtcbiAgICAgIGlmIChtb2QgPiAod3MgPj4gMSkgLSAxKVxuICAgICAgICB6ID0gKHdzID4+IDEpIC0gbW9kO1xuICAgICAgZWxzZVxuICAgICAgICB6ID0gbW9kO1xuICAgICAgay5pc3Vibih6KTtcbiAgICB9IGVsc2Uge1xuICAgICAgeiA9IDA7XG4gICAgfVxuICAgIG5hZi5wdXNoKHopO1xuXG4gICAgLy8gT3B0aW1pemF0aW9uLCBzaGlmdCBieSB3b3JkIGlmIHBvc3NpYmxlXG4gICAgdmFyIHNoaWZ0ID0gKGsuY21wbigwKSAhPT0gMCAmJiBrLmFuZGxuKHdzIC0gMSkgPT09IDApID8gKHcgKyAxKSA6IDE7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBzaGlmdDsgaSsrKVxuICAgICAgbmFmLnB1c2goMCk7XG4gICAgay5pdXNocm4oc2hpZnQpO1xuICB9XG5cbiAgcmV0dXJuIG5hZjtcbn1cbnV0aWxzLmdldE5BRiA9IGdldE5BRjtcblxuLy8gUmVwcmVzZW50IGsxLCBrMiBpbiBhIEpvaW50IFNwYXJzZSBGb3JtXG5mdW5jdGlvbiBnZXRKU0YoazEsIGsyKSB7XG4gIHZhciBqc2YgPSBbXG4gICAgW10sXG4gICAgW11cbiAgXTtcblxuICBrMSA9IGsxLmNsb25lKCk7XG4gIGsyID0gazIuY2xvbmUoKTtcbiAgdmFyIGQxID0gMDtcbiAgdmFyIGQyID0gMDtcbiAgd2hpbGUgKGsxLmNtcG4oLWQxKSA+IDAgfHwgazIuY21wbigtZDIpID4gMCkge1xuXG4gICAgLy8gRmlyc3QgcGhhc2VcbiAgICB2YXIgbTE0ID0gKGsxLmFuZGxuKDMpICsgZDEpICYgMztcbiAgICB2YXIgbTI0ID0gKGsyLmFuZGxuKDMpICsgZDIpICYgMztcbiAgICBpZiAobTE0ID09PSAzKVxuICAgICAgbTE0ID0gLTE7XG4gICAgaWYgKG0yNCA9PT0gMylcbiAgICAgIG0yNCA9IC0xO1xuICAgIHZhciB1MTtcbiAgICBpZiAoKG0xNCAmIDEpID09PSAwKSB7XG4gICAgICB1MSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtOCA9IChrMS5hbmRsbig3KSArIGQxKSAmIDc7XG4gICAgICBpZiAoKG04ID09PSAzIHx8IG04ID09PSA1KSAmJiBtMjQgPT09IDIpXG4gICAgICAgIHUxID0gLW0xNDtcbiAgICAgIGVsc2VcbiAgICAgICAgdTEgPSBtMTQ7XG4gICAgfVxuICAgIGpzZlswXS5wdXNoKHUxKTtcblxuICAgIHZhciB1MjtcbiAgICBpZiAoKG0yNCAmIDEpID09PSAwKSB7XG4gICAgICB1MiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtOCA9IChrMi5hbmRsbig3KSArIGQyKSAmIDc7XG4gICAgICBpZiAoKG04ID09PSAzIHx8IG04ID09PSA1KSAmJiBtMTQgPT09IDIpXG4gICAgICAgIHUyID0gLW0yNDtcbiAgICAgIGVsc2VcbiAgICAgICAgdTIgPSBtMjQ7XG4gICAgfVxuICAgIGpzZlsxXS5wdXNoKHUyKTtcblxuICAgIC8vIFNlY29uZCBwaGFzZVxuICAgIGlmICgyICogZDEgPT09IHUxICsgMSlcbiAgICAgIGQxID0gMSAtIGQxO1xuICAgIGlmICgyICogZDIgPT09IHUyICsgMSlcbiAgICAgIGQyID0gMSAtIGQyO1xuICAgIGsxLml1c2hybigxKTtcbiAgICBrMi5pdXNocm4oMSk7XG4gIH1cblxuICByZXR1cm4ganNmO1xufVxudXRpbHMuZ2V0SlNGID0gZ2V0SlNGO1xuXG5mdW5jdGlvbiBjYWNoZWRQcm9wZXJ0eShvYmosIG5hbWUsIGNvbXB1dGVyKSB7XG4gIHZhciBrZXkgPSAnXycgKyBuYW1lO1xuICBvYmoucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24gY2FjaGVkUHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkID8gdGhpc1trZXldIDpcbiAgICAgICAgICAgdGhpc1trZXldID0gY29tcHV0ZXIuY2FsbCh0aGlzKTtcbiAgfTtcbn1cbnV0aWxzLmNhY2hlZFByb3BlcnR5ID0gY2FjaGVkUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHBhcnNlQnl0ZXMoYnl0ZXMpIHtcbiAgcmV0dXJuIHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycgPyB1dGlscy50b0FycmF5KGJ5dGVzLCAnaGV4JykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzO1xufVxudXRpbHMucGFyc2VCeXRlcyA9IHBhcnNlQnl0ZXM7XG5cbmZ1bmN0aW9uIGludEZyb21MRShieXRlcykge1xuICByZXR1cm4gbmV3IEJOKGJ5dGVzLCAnaGV4JywgJ2xlJyk7XG59XG51dGlscy5pbnRGcm9tTEUgPSBpbnRGcm9tTEU7XG5cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJfYXJnc1wiOiBbXG4gICAgW1xuICAgICAge1xuICAgICAgICBcInJhd1wiOiBcImVsbGlwdGljQF42LjAuMFwiLFxuICAgICAgICBcInNjb3BlXCI6IG51bGwsXG4gICAgICAgIFwiZXNjYXBlZE5hbWVcIjogXCJlbGxpcHRpY1wiLFxuICAgICAgICBcIm5hbWVcIjogXCJlbGxpcHRpY1wiLFxuICAgICAgICBcInJhd1NwZWNcIjogXCJeNi4wLjBcIixcbiAgICAgICAgXCJzcGVjXCI6IFwiPj02LjAuMCA8Ny4wLjBcIixcbiAgICAgICAgXCJ0eXBlXCI6IFwicmFuZ2VcIlxuICAgICAgfSxcbiAgICAgIFwiL2hvbWUvZ2FicmllbC9Eb2N1bWVudHMvd2ViLXNjcmFwZXItY2hyb21lLWV4dGVuc2lvbi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduXCJcbiAgICBdXG4gIF0sXG4gIFwiX2Zyb21cIjogXCJlbGxpcHRpY0A+PTYuMC4wIDw3LjAuMFwiLFxuICBcIl9pZFwiOiBcImVsbGlwdGljQDYuNC4wXCIsXG4gIFwiX2luQ2FjaGVcIjogdHJ1ZSxcbiAgXCJfbG9jYXRpb25cIjogXCIvZWxsaXB0aWNcIixcbiAgXCJfbm9kZVZlcnNpb25cIjogXCI3LjAuMFwiLFxuICBcIl9ucG1PcGVyYXRpb25hbEludGVybmFsXCI6IHtcbiAgICBcImhvc3RcIjogXCJwYWNrYWdlcy0xOC1lYXN0LmludGVybmFsLm5wbWpzLmNvbVwiLFxuICAgIFwidG1wXCI6IFwidG1wL2VsbGlwdGljLTYuNC4wLnRnel8xNDg3Nzk4ODY2NDI4XzAuMzA1MTA2MjAxOTA3NjE5ODNcIlxuICB9LFxuICBcIl9ucG1Vc2VyXCI6IHtcbiAgICBcIm5hbWVcIjogXCJpbmR1dG55XCIsXG4gICAgXCJlbWFpbFwiOiBcImZlZG9yQGluZHV0bnkuY29tXCJcbiAgfSxcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjMuMTAuOFwiLFxuICBcIl9waGFudG9tQ2hpbGRyZW5cIjoge30sXG4gIFwiX3JlcXVlc3RlZFwiOiB7XG4gICAgXCJyYXdcIjogXCJlbGxpcHRpY0BeNi4wLjBcIixcbiAgICBcInNjb3BlXCI6IG51bGwsXG4gICAgXCJlc2NhcGVkTmFtZVwiOiBcImVsbGlwdGljXCIsXG4gICAgXCJuYW1lXCI6IFwiZWxsaXB0aWNcIixcbiAgICBcInJhd1NwZWNcIjogXCJeNi4wLjBcIixcbiAgICBcInNwZWNcIjogXCI+PTYuMC4wIDw3LjAuMFwiLFxuICAgIFwidHlwZVwiOiBcInJhbmdlXCJcbiAgfSxcbiAgXCJfcmVxdWlyZWRCeVwiOiBbXG4gICAgXCIvYnJvd3NlcmlmeS1zaWduXCIsXG4gICAgXCIvY3JlYXRlLWVjZGhcIlxuICBdLFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VsbGlwdGljLy0vZWxsaXB0aWMtNi40LjAudGd6XCIsXG4gIFwiX3NoYXN1bVwiOiBcImNhYzlhZjg3NjJjODU4MzYxODcwMDNjOGRmZTE5M2U1ZTJlYWU1ZGZcIixcbiAgXCJfc2hyaW5rd3JhcFwiOiBudWxsLFxuICBcIl9zcGVjXCI6IFwiZWxsaXB0aWNAXjYuMC4wXCIsXG4gIFwiX3doZXJlXCI6IFwiL2hvbWUvZ2FicmllbC9Eb2N1bWVudHMvd2ViLXNjcmFwZXItY2hyb21lLWV4dGVuc2lvbi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduXCIsXG4gIFwiYXV0aG9yXCI6IHtcbiAgICBcIm5hbWVcIjogXCJGZWRvciBJbmR1dG55XCIsXG4gICAgXCJlbWFpbFwiOiBcImZlZG9yQGluZHV0bnkuY29tXCJcbiAgfSxcbiAgXCJidWdzXCI6IHtcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljL2lzc3Vlc1wiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJuLmpzXCI6IFwiXjQuNC4wXCIsXG4gICAgXCJicm9yYW5kXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJoYXNoLmpzXCI6IFwiXjEuMC4wXCIsXG4gICAgXCJobWFjLWRyYmdcIjogXCJeMS4wLjBcIixcbiAgICBcImluaGVyaXRzXCI6IFwiXjIuMC4xXCIsXG4gICAgXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6IFwiXjEuMC4wXCIsXG4gICAgXCJtaW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzXCI6IFwiXjEuMC4wXCJcbiAgfSxcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkVDIGNyeXB0b2dyYXBoeVwiLFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJicmZzXCI6IFwiXjEuNC4zXCIsXG4gICAgXCJjb3ZlcmFsbHNcIjogXCJeMi4xMS4zXCIsXG4gICAgXCJncnVudFwiOiBcIl4wLjQuNVwiLFxuICAgIFwiZ3J1bnQtYnJvd3NlcmlmeVwiOiBcIl41LjAuMFwiLFxuICAgIFwiZ3J1bnQtY2xpXCI6IFwiXjEuMi4wXCIsXG4gICAgXCJncnVudC1jb250cmliLWNvbm5lY3RcIjogXCJeMS4wLjBcIixcbiAgICBcImdydW50LWNvbnRyaWItY29weVwiOiBcIl4xLjAuMFwiLFxuICAgIFwiZ3J1bnQtY29udHJpYi11Z2xpZnlcIjogXCJeMS4wLjFcIixcbiAgICBcImdydW50LW1vY2hhLWlzdGFuYnVsXCI6IFwiXjMuMC4xXCIsXG4gICAgXCJncnVudC1zYXVjZWxhYnNcIjogXCJeOC42LjJcIixcbiAgICBcImlzdGFuYnVsXCI6IFwiXjAuNC4yXCIsXG4gICAgXCJqc2NzXCI6IFwiXjIuOS4wXCIsXG4gICAgXCJqc2hpbnRcIjogXCJeMi42LjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjIuMS4wXCJcbiAgfSxcbiAgXCJkaXJlY3Rvcmllc1wiOiB7fSxcbiAgXCJkaXN0XCI6IHtcbiAgICBcInNoYXN1bVwiOiBcImNhYzlhZjg3NjJjODU4MzYxODcwMDNjOGRmZTE5M2U1ZTJlYWU1ZGZcIixcbiAgICBcInRhcmJhbGxcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuNC4wLnRnelwiXG4gIH0sXG4gIFwiZmlsZXNcIjogW1xuICAgIFwibGliXCJcbiAgXSxcbiAgXCJnaXRIZWFkXCI6IFwiNmIwZDJiNzZjYWFlOTE0NzE2NDljOGUyMWYwYjFkM2JhMGY5NjA5MFwiLFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWNcIixcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJFQ1wiLFxuICAgIFwiRWxsaXB0aWNcIixcbiAgICBcImN1cnZlXCIsXG4gICAgXCJDcnlwdG9ncmFwaHlcIlxuICBdLFxuICBcImxpY2Vuc2VcIjogXCJNSVRcIixcbiAgXCJtYWluXCI6IFwibGliL2VsbGlwdGljLmpzXCIsXG4gIFwibWFpbnRhaW5lcnNcIjogW1xuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcImluZHV0bnlcIixcbiAgICAgIFwiZW1haWxcIjogXCJmZWRvckBpbmR1dG55LmNvbVwiXG4gICAgfVxuICBdLFxuICBcIm5hbWVcIjogXCJlbGxpcHRpY1wiLFxuICBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCI6IHt9LFxuICBcInJlYWRtZVwiOiBcIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCFcIixcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImdpdCtzc2g6Ly9naXRAZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljLmdpdFwiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJqc2NzXCI6IFwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLFxuICAgIFwianNoaW50XCI6IFwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLFxuICAgIFwibGludFwiOiBcIm5wbSBydW4ganNjcyAmJiBucG0gcnVuIGpzaGludFwiLFxuICAgIFwidGVzdFwiOiBcIm5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXRcIixcbiAgICBcInVuaXRcIjogXCJpc3RhbmJ1bCB0ZXN0IF9tb2NoYSAtLXJlcG9ydGVyPXNwZWMgdGVzdC9pbmRleC5qc1wiLFxuICAgIFwidmVyc2lvblwiOiBcImdydW50IGRpc3QgJiYgZ2l0IGFkZCBkaXN0L1wiXG4gIH0sXG4gIFwidmVyc2lvblwiOiBcIjYuNC4wXCJcbn1cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDE1IEluZ3ZhciBTdGVwYW55YW4gPG1lQHJyZXZlcnNlci5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxNCBJdmFuIE5pa3VsaW4gPGlmYWFhbkBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIE1pY2hhZWwgRmljYXJyYSA8ZXNjb2RlZ2VuLmNvcHlyaWdodEBtaWNoYWVsLmZpY2FycmEubWU+XG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+XG4gIENvcHlyaWdodCAoQykgMjAxMyBJcmFrbGkgR296YWxpc2h2aWxpIDxyZm9iaWNAZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTIgUm9iZXJ0IEd1c3QtQmFyZG9uIDxkb25hdGVAcm9iZXJ0Lmd1c3QtYmFyZG9uLm9yZz5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIEpvaG4gRnJlZW1hbiA8amZyZWVtYW4wOEBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTIgSm9vc3QtV2ltIEJvZWtlc3RlaWpuIDxqb29zdC13aW1AYm9la2VzdGVpam4ubmw+XG4gIENvcHlyaWdodCAoQykgMjAxMiBLcmlzIEtvd2FsIDxrcmlzLmtvd2FsQGNpeGFyLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIEFycGFkIEJvcnNvcyA8YXJwYWQuYm9yc29zQGdvb2dsZW1haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbi8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSwgcmVxdWlyZTp0cnVlLCBnbG9iYWw6dHJ1ZSovXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBTeW50YXgsXG4gICAgICAgIFByZWNlZGVuY2UsXG4gICAgICAgIEJpbmFyeVByZWNlZGVuY2UsXG4gICAgICAgIFNvdXJjZU5vZGUsXG4gICAgICAgIGVzdHJhdmVyc2UsXG4gICAgICAgIGVzdXRpbHMsXG4gICAgICAgIGlzQXJyYXksXG4gICAgICAgIGJhc2UsXG4gICAgICAgIGluZGVudCxcbiAgICAgICAganNvbixcbiAgICAgICAgcmVudW1iZXIsXG4gICAgICAgIGhleGFkZWNpbWFsLFxuICAgICAgICBxdW90ZXMsXG4gICAgICAgIGVzY2FwZWxlc3MsXG4gICAgICAgIG5ld2xpbmUsXG4gICAgICAgIHNwYWNlLFxuICAgICAgICBwYXJlbnRoZXNlcyxcbiAgICAgICAgc2VtaWNvbG9ucyxcbiAgICAgICAgc2FmZUNvbmNhdGVuYXRpb24sXG4gICAgICAgIGRpcmVjdGl2ZSxcbiAgICAgICAgZXh0cmEsXG4gICAgICAgIHBhcnNlLFxuICAgICAgICBzb3VyY2VNYXAsXG4gICAgICAgIHNvdXJjZUNvZGUsXG4gICAgICAgIHByZXNlcnZlQmxhbmtMaW5lcyxcbiAgICAgICAgRk9STUFUX01JTklGWSxcbiAgICAgICAgRk9STUFUX0RFRkFVTFRTO1xuXG4gICAgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcbiAgICBlc3V0aWxzID0gcmVxdWlyZSgnZXN1dGlscycpO1xuXG4gICAgU3ludGF4ID0gZXN0cmF2ZXJzZS5TeW50YXg7XG5cbiAgICAvLyBHZW5lcmF0aW9uIGlzIGRvbmUgYnkgZ2VuZXJhdGVFeHByZXNzaW9uLlxuICAgIGZ1bmN0aW9uIGlzRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yLkV4cHJlc3Npb24uaGFzT3duUHJvcGVydHkobm9kZS50eXBlKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0aW9uIGlzIGRvbmUgYnkgZ2VuZXJhdGVTdGF0ZW1lbnQuXG4gICAgZnVuY3Rpb24gaXNTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvci5TdGF0ZW1lbnQuaGFzT3duUHJvcGVydHkobm9kZS50eXBlKTtcbiAgICB9XG5cbiAgICBQcmVjZWRlbmNlID0ge1xuICAgICAgICBTZXF1ZW5jZTogMCxcbiAgICAgICAgWWllbGQ6IDEsXG4gICAgICAgIEF3YWl0OiAxLFxuICAgICAgICBBc3NpZ25tZW50OiAxLFxuICAgICAgICBDb25kaXRpb25hbDogMixcbiAgICAgICAgQXJyb3dGdW5jdGlvbjogMixcbiAgICAgICAgTG9naWNhbE9SOiAzLFxuICAgICAgICBMb2dpY2FsQU5EOiA0LFxuICAgICAgICBCaXR3aXNlT1I6IDUsXG4gICAgICAgIEJpdHdpc2VYT1I6IDYsXG4gICAgICAgIEJpdHdpc2VBTkQ6IDcsXG4gICAgICAgIEVxdWFsaXR5OiA4LFxuICAgICAgICBSZWxhdGlvbmFsOiA5LFxuICAgICAgICBCaXR3aXNlU0hJRlQ6IDEwLFxuICAgICAgICBBZGRpdGl2ZTogMTEsXG4gICAgICAgIE11bHRpcGxpY2F0aXZlOiAxMixcbiAgICAgICAgVW5hcnk6IDEzLFxuICAgICAgICBQb3N0Zml4OiAxNCxcbiAgICAgICAgQ2FsbDogMTUsXG4gICAgICAgIE5ldzogMTYsXG4gICAgICAgIFRhZ2dlZFRlbXBsYXRlOiAxNyxcbiAgICAgICAgTWVtYmVyOiAxOCxcbiAgICAgICAgUHJpbWFyeTogMTlcbiAgICB9O1xuXG4gICAgQmluYXJ5UHJlY2VkZW5jZSA9IHtcbiAgICAgICAgJ3x8JzogUHJlY2VkZW5jZS5Mb2dpY2FsT1IsXG4gICAgICAgICcmJic6IFByZWNlZGVuY2UuTG9naWNhbEFORCxcbiAgICAgICAgJ3wnOiBQcmVjZWRlbmNlLkJpdHdpc2VPUixcbiAgICAgICAgJ14nOiBQcmVjZWRlbmNlLkJpdHdpc2VYT1IsXG4gICAgICAgICcmJzogUHJlY2VkZW5jZS5CaXR3aXNlQU5ELFxuICAgICAgICAnPT0nOiBQcmVjZWRlbmNlLkVxdWFsaXR5LFxuICAgICAgICAnIT0nOiBQcmVjZWRlbmNlLkVxdWFsaXR5LFxuICAgICAgICAnPT09JzogUHJlY2VkZW5jZS5FcXVhbGl0eSxcbiAgICAgICAgJyE9PSc6IFByZWNlZGVuY2UuRXF1YWxpdHksXG4gICAgICAgICdpcyc6IFByZWNlZGVuY2UuRXF1YWxpdHksXG4gICAgICAgICdpc250JzogUHJlY2VkZW5jZS5FcXVhbGl0eSxcbiAgICAgICAgJzwnOiBQcmVjZWRlbmNlLlJlbGF0aW9uYWwsXG4gICAgICAgICc+JzogUHJlY2VkZW5jZS5SZWxhdGlvbmFsLFxuICAgICAgICAnPD0nOiBQcmVjZWRlbmNlLlJlbGF0aW9uYWwsXG4gICAgICAgICc+PSc6IFByZWNlZGVuY2UuUmVsYXRpb25hbCxcbiAgICAgICAgJ2luJzogUHJlY2VkZW5jZS5SZWxhdGlvbmFsLFxuICAgICAgICAnaW5zdGFuY2VvZic6IFByZWNlZGVuY2UuUmVsYXRpb25hbCxcbiAgICAgICAgJzw8JzogUHJlY2VkZW5jZS5CaXR3aXNlU0hJRlQsXG4gICAgICAgICc+Pic6IFByZWNlZGVuY2UuQml0d2lzZVNISUZULFxuICAgICAgICAnPj4+JzogUHJlY2VkZW5jZS5CaXR3aXNlU0hJRlQsXG4gICAgICAgICcrJzogUHJlY2VkZW5jZS5BZGRpdGl2ZSxcbiAgICAgICAgJy0nOiBQcmVjZWRlbmNlLkFkZGl0aXZlLFxuICAgICAgICAnKic6IFByZWNlZGVuY2UuTXVsdGlwbGljYXRpdmUsXG4gICAgICAgICclJzogUHJlY2VkZW5jZS5NdWx0aXBsaWNhdGl2ZSxcbiAgICAgICAgJy8nOiBQcmVjZWRlbmNlLk11bHRpcGxpY2F0aXZlXG4gICAgfTtcblxuICAgIC8vRmxhZ3NcbiAgICB2YXIgRl9BTExPV19JTiA9IDEsXG4gICAgICAgIEZfQUxMT1dfQ0FMTCA9IDEgPDwgMSxcbiAgICAgICAgRl9BTExPV19VTlBBUkFUSF9ORVcgPSAxIDw8IDIsXG4gICAgICAgIEZfRlVOQ19CT0RZID0gMSA8PCAzLFxuICAgICAgICBGX0RJUkVDVElWRV9DVFggPSAxIDw8IDQsXG4gICAgICAgIEZfU0VNSUNPTE9OX09QVCA9IDEgPDwgNTtcblxuICAgIC8vRXhwcmVzc2lvbiBmbGFnIHNldHNcbiAgICAvL05PVEU6IEZsYWcgb3JkZXI6XG4gICAgLy8gRl9BTExPV19JTlxuICAgIC8vIEZfQUxMT1dfQ0FMTFxuICAgIC8vIEZfQUxMT1dfVU5QQVJBVEhfTkVXXG4gICAgdmFyIEVfRlRUID0gRl9BTExPV19DQUxMIHwgRl9BTExPV19VTlBBUkFUSF9ORVcsXG4gICAgICAgIEVfVFRGID0gRl9BTExPV19JTiB8IEZfQUxMT1dfQ0FMTCxcbiAgICAgICAgRV9UVFQgPSBGX0FMTE9XX0lOIHwgRl9BTExPV19DQUxMIHwgRl9BTExPV19VTlBBUkFUSF9ORVcsXG4gICAgICAgIEVfVEZGID0gRl9BTExPV19JTixcbiAgICAgICAgRV9GRlQgPSBGX0FMTE9XX1VOUEFSQVRIX05FVyxcbiAgICAgICAgRV9URlQgPSBGX0FMTE9XX0lOIHwgRl9BTExPV19VTlBBUkFUSF9ORVc7XG5cbiAgICAvL1N0YXRlbWVudCBmbGFnIHNldHNcbiAgICAvL05PVEU6IEZsYWcgb3JkZXI6XG4gICAgLy8gRl9BTExPV19JTlxuICAgIC8vIEZfRlVOQ19CT0RZXG4gICAgLy8gRl9ESVJFQ1RJVkVfQ1RYXG4gICAgLy8gRl9TRU1JQ09MT05fT1BUXG4gICAgdmFyIFNfVEZGRiA9IEZfQUxMT1dfSU4sXG4gICAgICAgIFNfVEZGVCA9IEZfQUxMT1dfSU4gfCBGX1NFTUlDT0xPTl9PUFQsXG4gICAgICAgIFNfRkZGRiA9IDB4MDAsXG4gICAgICAgIFNfVEZURiA9IEZfQUxMT1dfSU4gfCBGX0RJUkVDVElWRV9DVFgsXG4gICAgICAgIFNfVFRGRiA9IEZfQUxMT1dfSU4gfCBGX0ZVTkNfQk9EWTtcblxuICAgIGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCkge1xuICAgICAgICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGVudDogbnVsbCxcbiAgICAgICAgICAgIGJhc2U6IG51bGwsXG4gICAgICAgICAgICBwYXJzZTogbnVsbCxcbiAgICAgICAgICAgIGNvbW1lbnQ6IGZhbHNlLFxuICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgaW5kZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiAnICAgICcsXG4gICAgICAgICAgICAgICAgICAgIGJhc2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIGFkanVzdE11bHRpbGluZUNvbW1lbnQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXdsaW5lOiAnXFxuJyxcbiAgICAgICAgICAgICAgICBzcGFjZTogJyAnLFxuICAgICAgICAgICAgICAgIGpzb246IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlbnVtYmVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoZXhhZGVjaW1hbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcXVvdGVzOiAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICBlc2NhcGVsZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb21wYWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRoZXNlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzZW1pY29sb25zOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNhZmVDb25jYXRlbmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwcmVzZXJ2ZUJsYW5rTGluZXM6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW96OiB7XG4gICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbkV4cHJlc3Npb25TdGFydHNXaXRoQXNzaWdubWVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc3Rhcmxlc3NHZW5lcmF0b3I6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc291cmNlTWFwOiBudWxsLFxuICAgICAgICAgICAgc291cmNlTWFwUm9vdDogbnVsbCxcbiAgICAgICAgICAgIHNvdXJjZU1hcFdpdGhDb2RlOiBmYWxzZSxcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICByYXc6IHRydWUsXG4gICAgICAgICAgICB2ZXJiYXRpbTogbnVsbCxcbiAgICAgICAgICAgIHNvdXJjZUNvZGU6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdSZXBlYXQoc3RyLCBudW0pIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuXG4gICAgICAgIGZvciAobnVtIHw9IDA7IG51bSA+IDA7IG51bSA+Pj49IDEsIHN0ciArPSBzdHIpIHtcbiAgICAgICAgICAgIGlmIChudW0gJiAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG4gICAgaWYgKCFpc0FycmF5KSB7XG4gICAgICAgIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFycmF5KSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycmF5KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNMaW5lVGVybWluYXRvcihzdHIpIHtcbiAgICAgICAgcmV0dXJuICgvW1xcclxcbl0vZykudGVzdChzdHIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZHNXaXRoTGluZVRlcm1pbmF0b3Ioc3RyKSB7XG4gICAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbGVuICYmIGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKHN0ci5jaGFyQ29kZUF0KGxlbiAtIDEpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJnZSh0YXJnZXQsIG92ZXJyaWRlKSB7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoa2V5IGluIG92ZXJyaWRlKSB7XG4gICAgICAgICAgICBpZiAob3ZlcnJpZGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gb3ZlcnJpZGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZURlZXBseSh0YXJnZXQsIG92ZXJyaWRlKSB7XG4gICAgICAgIHZhciBrZXksIHZhbDtcblxuICAgICAgICBmdW5jdGlvbiBpc0hhc2hPYmplY3QodGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiYgdGFyZ2V0IGluc3RhbmNlb2YgT2JqZWN0ICYmICEodGFyZ2V0IGluc3RhbmNlb2YgUmVnRXhwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoa2V5IGluIG92ZXJyaWRlKSB7XG4gICAgICAgICAgICBpZiAob3ZlcnJpZGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHZhbCA9IG92ZXJyaWRlW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGlzSGFzaE9iamVjdCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0hhc2hPYmplY3QodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVEZWVwbHkodGFyZ2V0W2tleV0sIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHVwZGF0ZURlZXBseSh7fSwgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIHZhciByZXN1bHQsIHBvaW50LCB0ZW1wLCBleHBvbmVudCwgcG9zO1xuXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTnVtZXJpYyBsaXRlcmFsIHdob3NlIHZhbHVlIGlzIE5hTicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ051bWVyaWMgbGl0ZXJhbCB3aG9zZSB2YWx1ZSBpcyBuZWdhdGl2ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSAxIC8gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGpzb24gPyAnbnVsbCcgOiByZW51bWJlciA/ICcxZTQwMCcgOiAnMWUrNDAwJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9ICcnICsgdmFsdWU7XG4gICAgICAgIGlmICghcmVudW1iZXIgfHwgcmVzdWx0Lmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludCA9IHJlc3VsdC5pbmRleE9mKCcuJyk7XG4gICAgICAgIGlmICghanNvbiAmJiByZXN1bHQuY2hhckNvZGVBdCgwKSA9PT0gMHgzMCAgLyogMCAqLyAmJiBwb2ludCA9PT0gMSkge1xuICAgICAgICAgICAgcG9pbnQgPSAwO1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgICAgIHRlbXAgPSByZXN1bHQ7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKCdlKycsICdlJyk7XG4gICAgICAgIGV4cG9uZW50ID0gMDtcbiAgICAgICAgaWYgKChwb3MgPSB0ZW1wLmluZGV4T2YoJ2UnKSkgPiAwKSB7XG4gICAgICAgICAgICBleHBvbmVudCA9ICt0ZW1wLnNsaWNlKHBvcyArIDEpO1xuICAgICAgICAgICAgdGVtcCA9IHRlbXAuc2xpY2UoMCwgcG9zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9pbnQgPj0gMCkge1xuICAgICAgICAgICAgZXhwb25lbnQgLT0gdGVtcC5sZW5ndGggLSBwb2ludCAtIDE7XG4gICAgICAgICAgICB0ZW1wID0gKyh0ZW1wLnNsaWNlKDAsIHBvaW50KSArIHRlbXAuc2xpY2UocG9pbnQgKyAxKSkgKyAnJztcbiAgICAgICAgfVxuICAgICAgICBwb3MgPSAwO1xuICAgICAgICB3aGlsZSAodGVtcC5jaGFyQ29kZUF0KHRlbXAubGVuZ3RoICsgcG9zIC0gMSkgPT09IDB4MzAgIC8qIDAgKi8pIHtcbiAgICAgICAgICAgIC0tcG9zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3MgIT09IDApIHtcbiAgICAgICAgICAgIGV4cG9uZW50IC09IHBvcztcbiAgICAgICAgICAgIHRlbXAgPSB0ZW1wLnNsaWNlKDAsIHBvcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cG9uZW50ICE9PSAwKSB7XG4gICAgICAgICAgICB0ZW1wICs9ICdlJyArIGV4cG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICgodGVtcC5sZW5ndGggPCByZXN1bHQubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgICAgIChoZXhhZGVjaW1hbCAmJiB2YWx1ZSA+IDFlMTIgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlICYmICh0ZW1wID0gJzB4JyArIHZhbHVlLnRvU3RyaW5nKDE2KSkubGVuZ3RoIDwgcmVzdWx0Lmxlbmd0aCkpICYmXG4gICAgICAgICAgICAgICAgK3RlbXAgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSB2YWxpZCBSZWdFeHAgZXhwcmVzc2lvbi5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9Db25zdGVsbGF0aW9uL2l2IEVuZ2luZVxuXG4gICAgZnVuY3Rpb24gZXNjYXBlUmVnRXhwQ2hhcmFjdGVyKGNoLCBwcmV2aW91c0lzQmFja3NsYXNoKSB7XG4gICAgICAgIC8vIG5vdCBoYW5kbGluZyAnXFwnIGFuZCBoYW5kbGluZyBcXHUyMDI4IG9yIFxcdTIwMjkgdG8gdW5pY29kZSBlc2NhcGUgc2VxdWVuY2VcbiAgICAgICAgaWYgKChjaCAmIH4xKSA9PT0gMHgyMDI4KSB7XG4gICAgICAgICAgICByZXR1cm4gKHByZXZpb3VzSXNCYWNrc2xhc2ggPyAndScgOiAnXFxcXHUnKSArICgoY2ggPT09IDB4MjAyOCkgPyAnMjAyOCcgOiAnMjAyOScpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAxMCB8fCBjaCA9PT0gMTMpIHsgIC8vIFxcbiwgXFxyXG4gICAgICAgICAgICByZXR1cm4gKHByZXZpb3VzSXNCYWNrc2xhc2ggPyAnJyA6ICdcXFxcJykgKyAoKGNoID09PSAxMCkgPyAnbicgOiAncicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZVJlZ0V4cChyZWcpIHtcbiAgICAgICAgdmFyIG1hdGNoLCByZXN1bHQsIGZsYWdzLCBpLCBpeiwgY2gsIGNoYXJhY3RlckluQnJhY2ssIHByZXZpb3VzSXNCYWNrc2xhc2g7XG5cbiAgICAgICAgcmVzdWx0ID0gcmVnLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaWYgKHJlZy5zb3VyY2UpIHtcbiAgICAgICAgICAgIC8vIGV4dHJhY3QgZmxhZyBmcm9tIHRvU3RyaW5nIHJlc3VsdFxuICAgICAgICAgICAgbWF0Y2ggPSByZXN1bHQubWF0Y2goL1xcLyhbXi9dKikkLyk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmxhZ3MgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIHJlc3VsdCA9ICcnO1xuXG4gICAgICAgICAgICBjaGFyYWN0ZXJJbkJyYWNrID0gZmFsc2U7XG4gICAgICAgICAgICBwcmV2aW91c0lzQmFja3NsYXNoID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHJlZy5zb3VyY2UubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgIGNoID0gcmVnLnNvdXJjZS5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c0lzQmFja3NsYXNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbkJyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDkzKSB7ICAvLyBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVySW5CcmFjayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSA0NykgeyAgLy8gL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxcXCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSA5MSkgeyAgLy8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckluQnJhY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBlc2NhcGVSZWdFeHBDaGFyYWN0ZXIoY2gsIHByZXZpb3VzSXNCYWNrc2xhc2gpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0lzQmFja3NsYXNoID0gY2ggPT09IDkyOyAgLy8gXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBuZXcgUmVnRXhwKFwiXFxcXFxcbicpIGlzIHByb3ZpZGVkLCBjcmVhdGUgL1xcbi9cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGVzY2FwZVJlZ0V4cENoYXJhY3RlcihjaCwgcHJldmlvdXNJc0JhY2tzbGFzaCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgbGlrZSAvXFxcXFsvXS9cbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNJc0JhY2tzbGFzaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuICcvJyArIHJlc3VsdCArICcvJyArIGZsYWdzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlc2NhcGVBbGxvd2VkQ2hhcmFjdGVyKGNvZGUsIG5leHQpIHtcbiAgICAgICAgdmFyIGhleDtcblxuICAgICAgICBpZiAoY29kZSA9PT0gMHgwOCAgLyogXFxiICovKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1xcXFxiJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID09PSAweDBDICAvKiBcXGYgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiAnXFxcXGYnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IDB4MDkgIC8qIFxcdCAqLykge1xuICAgICAgICAgICAgcmV0dXJuICdcXFxcdCc7XG4gICAgICAgIH1cblxuICAgICAgICBoZXggPSBjb2RlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBpZiAoanNvbiB8fCBjb2RlID4gMHhGRikge1xuICAgICAgICAgICAgcmV0dXJuICdcXFxcdScgKyAnMDAwMCcuc2xpY2UoaGV4Lmxlbmd0aCkgKyBoZXg7XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMHgwMDAwICYmICFlc3V0aWxzLmNvZGUuaXNEZWNpbWFsRGlnaXQobmV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnXFxcXDAnO1xuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDB4MDAwQiAgLyogXFx2ICovKSB7IC8vICdcXHYnXG4gICAgICAgICAgICByZXR1cm4gJ1xcXFx4MEInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdcXFxceCcgKyAnMDAnLnNsaWNlKGhleC5sZW5ndGgpICsgaGV4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXNjYXBlRGlzYWxsb3dlZENoYXJhY3Rlcihjb2RlKSB7XG4gICAgICAgIGlmIChjb2RlID09PSAweDVDICAvKiBcXCAqLykge1xuICAgICAgICAgICAgcmV0dXJuICdcXFxcXFxcXCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kZSA9PT0gMHgwQSAgLyogXFxuICovKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1xcXFxuJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID09PSAweDBEICAvKiBcXHIgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiAnXFxcXHInO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IDB4MjAyOCkge1xuICAgICAgICAgICAgcmV0dXJuICdcXFxcdTIwMjgnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IDB4MjAyOSkge1xuICAgICAgICAgICAgcmV0dXJuICdcXFxcdTIwMjknO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3RseSBjbGFzc2lmaWVkIGNoYXJhY3RlcicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVzY2FwZURpcmVjdGl2ZShzdHIpIHtcbiAgICAgICAgdmFyIGksIGl6LCBjb2RlLCBxdW90ZTtcblxuICAgICAgICBxdW90ZSA9IHF1b3RlcyA9PT0gJ2RvdWJsZScgPyAnXCInIDogJ1xcJyc7XG4gICAgICAgIGZvciAoaSA9IDAsIGl6ID0gc3RyLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSAweDI3ICAvKiAnICovKSB7XG4gICAgICAgICAgICAgICAgcXVvdGUgPSAnXCInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDIyICAvKiBcIiAqLykge1xuICAgICAgICAgICAgICAgIHF1b3RlID0gJ1xcJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDB4NUMgIC8qIFxcICovKSB7XG4gICAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHF1b3RlICsgc3RyICsgcXVvdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0cikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gJycsIGksIGxlbiwgY29kZSwgc2luZ2xlUXVvdGVzID0gMCwgZG91YmxlUXVvdGVzID0gMCwgc2luZ2xlLCBxdW90ZTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSAweDI3ICAvKiAnICovKSB7XG4gICAgICAgICAgICAgICAgKytzaW5nbGVRdW90ZXM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDB4MjIgIC8qIFwiICovKSB7XG4gICAgICAgICAgICAgICAgKytkb3VibGVRdW90ZXM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDB4MkYgIC8qIC8gKi8gJiYganNvbikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxcXCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNvZGUpIHx8IGNvZGUgPT09IDB4NUMgIC8qIFxcICovKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGVzY2FwZURpc2FsbG93ZWRDaGFyYWN0ZXIoY29kZSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyUGFydEVTNShjb2RlKSAmJiAoanNvbiAmJiBjb2RlIDwgMHgyMCAgLyogU1AgKi8gfHwgIWpzb24gJiYgIWVzY2FwZWxlc3MgJiYgKGNvZGUgPCAweDIwICAvKiBTUCAqLyB8fCBjb2RlID4gMHg3RSAgLyogfiAqLykpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGVzY2FwZUFsbG93ZWRDaGFyYWN0ZXIoY29kZSwgc3RyLmNoYXJDb2RlQXQoaSArIDEpKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2luZ2xlID0gIShxdW90ZXMgPT09ICdkb3VibGUnIHx8IChxdW90ZXMgPT09ICdhdXRvJyAmJiBkb3VibGVRdW90ZXMgPCBzaW5nbGVRdW90ZXMpKTtcbiAgICAgICAgcXVvdGUgPSBzaW5nbGUgPyAnXFwnJyA6ICdcIic7XG5cbiAgICAgICAgaWYgKCEoc2luZ2xlID8gc2luZ2xlUXVvdGVzIDogZG91YmxlUXVvdGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHF1b3RlICsgcmVzdWx0ICsgcXVvdGU7XG4gICAgICAgIH1cblxuICAgICAgICBzdHIgPSByZXN1bHQ7XG4gICAgICAgIHJlc3VsdCA9IHF1b3RlO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHN0ci5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKChjb2RlID09PSAweDI3ICAvKiAnICovICYmIHNpbmdsZSkgfHwgKGNvZGUgPT09IDB4MjIgIC8qIFwiICovICYmICFzaW5nbGUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdcXFxcJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdCArIHF1b3RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZsYXR0ZW4gYW4gYXJyYXkgdG8gYSBzdHJpbmcsIHdoZXJlIHRoZSBhcnJheSBjYW4gY29udGFpblxuICAgICAqIGVpdGhlciBzdHJpbmdzIG9yIG5lc3RlZCBhcnJheXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0dGVuVG9TdHJpbmcoYXJyKSB7XG4gICAgICAgIHZhciBpLCBpeiwgZWxlbSwgcmVzdWx0ID0gJyc7XG4gICAgICAgIGZvciAoaSA9IDAsIGl6ID0gYXJyLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIGVsZW0gPSBhcnJbaV07XG4gICAgICAgICAgICByZXN1bHQgKz0gaXNBcnJheShlbGVtKSA/IGZsYXR0ZW5Ub1N0cmluZyhlbGVtKSA6IGVsZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjb252ZXJ0IGdlbmVyYXRlZCB0byBhIFNvdXJjZU5vZGUgd2hlbiBzb3VyY2UgbWFwcyBhcmUgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKGdlbmVyYXRlZCwgbm9kZSkge1xuICAgICAgICBpZiAoIXNvdXJjZU1hcCkge1xuICAgICAgICAgICAgLy8gd2l0aCBubyBzb3VyY2UgbWFwcywgZ2VuZXJhdGVkIGlzIGVpdGhlciBhblxuICAgICAgICAgICAgLy8gYXJyYXkgb3IgYSBzdHJpbmcuICBpZiBhbiBhcnJheSwgZmxhdHRlbiBpdC5cbiAgICAgICAgICAgIC8vIGlmIGEgc3RyaW5nLCBqdXN0IHJldHVybiBpdFxuICAgICAgICAgICAgaWYgKGlzQXJyYXkoZ2VuZXJhdGVkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmbGF0dGVuVG9TdHJpbmcoZ2VuZXJhdGVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoZ2VuZXJhdGVkIGluc3RhbmNlb2YgU291cmNlTm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUgPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5sb2MgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTb3VyY2VOb2RlKG51bGwsIG51bGwsIHNvdXJjZU1hcCwgZ2VuZXJhdGVkLCBub2RlLm5hbWUgfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTb3VyY2VOb2RlKG5vZGUubG9jLnN0YXJ0LmxpbmUsIG5vZGUubG9jLnN0YXJ0LmNvbHVtbiwgKHNvdXJjZU1hcCA9PT0gdHJ1ZSA/IG5vZGUubG9jLnNvdXJjZSB8fCBudWxsIDogc291cmNlTWFwKSwgZ2VuZXJhdGVkLCBub2RlLm5hbWUgfHwgbnVsbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9FbXB0eVNwYWNlKCkge1xuICAgICAgICByZXR1cm4gKHNwYWNlKSA/IHNwYWNlIDogJyAnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGpvaW4obGVmdCwgcmlnaHQpIHtcbiAgICAgICAgdmFyIGxlZnRTb3VyY2UsXG4gICAgICAgICAgICByaWdodFNvdXJjZSxcbiAgICAgICAgICAgIGxlZnRDaGFyQ29kZSxcbiAgICAgICAgICAgIHJpZ2h0Q2hhckNvZGU7XG5cbiAgICAgICAgbGVmdFNvdXJjZSA9IHRvU291cmNlTm9kZVdoZW5OZWVkZWQobGVmdCkudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGxlZnRTb3VyY2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3JpZ2h0XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJpZ2h0U291cmNlID0gdG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyaWdodCkudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHJpZ2h0U291cmNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtsZWZ0XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnRDaGFyQ29kZSA9IGxlZnRTb3VyY2UuY2hhckNvZGVBdChsZWZ0U291cmNlLmxlbmd0aCAtIDEpO1xuICAgICAgICByaWdodENoYXJDb2RlID0gcmlnaHRTb3VyY2UuY2hhckNvZGVBdCgwKTtcblxuICAgICAgICBpZiAoKGxlZnRDaGFyQ29kZSA9PT0gMHgyQiAgLyogKyAqLyB8fCBsZWZ0Q2hhckNvZGUgPT09IDB4MkQgIC8qIC0gKi8pICYmIGxlZnRDaGFyQ29kZSA9PT0gcmlnaHRDaGFyQ29kZSB8fFxuICAgICAgICAgICAgZXN1dGlscy5jb2RlLmlzSWRlbnRpZmllclBhcnRFUzUobGVmdENoYXJDb2RlKSAmJiBlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyUGFydEVTNShyaWdodENoYXJDb2RlKSB8fFxuICAgICAgICAgICAgbGVmdENoYXJDb2RlID09PSAweDJGICAvKiAvICovICYmIHJpZ2h0Q2hhckNvZGUgPT09IDB4NjkgIC8qIGkgKi8pIHsgLy8gaW5maXggd29yZCBvcGVyYXRvcnMgYWxsIHN0YXJ0IHdpdGggYGlgXG4gICAgICAgICAgICByZXR1cm4gW2xlZnQsIG5vRW1wdHlTcGFjZSgpLCByaWdodF07XG4gICAgICAgIH0gZWxzZSBpZiAoZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShsZWZ0Q2hhckNvZGUpIHx8IGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGxlZnRDaGFyQ29kZSkgfHxcbiAgICAgICAgICAgICAgICBlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKHJpZ2h0Q2hhckNvZGUpIHx8IGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKHJpZ2h0Q2hhckNvZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gW2xlZnQsIHJpZ2h0XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2xlZnQsIHNwYWNlLCByaWdodF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkSW5kZW50KHN0bXQpIHtcbiAgICAgICAgcmV0dXJuIFtiYXNlLCBzdG10XTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3aXRoSW5kZW50KGZuKSB7XG4gICAgICAgIHZhciBwcmV2aW91c0Jhc2U7XG4gICAgICAgIHByZXZpb3VzQmFzZSA9IGJhc2U7XG4gICAgICAgIGJhc2UgKz0gaW5kZW50O1xuICAgICAgICBmbihiYXNlKTtcbiAgICAgICAgYmFzZSA9IHByZXZpb3VzQmFzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVTcGFjZXMoc3RyKSB7XG4gICAgICAgIHZhciBpO1xuICAgICAgICBmb3IgKGkgPSBzdHIubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihzdHIuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHN0ci5sZW5ndGggLSAxKSAtIGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRqdXN0TXVsdGlsaW5lQ29tbWVudCh2YWx1ZSwgc3BlY2lhbEJhc2UpIHtcbiAgICAgICAgdmFyIGFycmF5LCBpLCBsZW4sIGxpbmUsIGosIHNwYWNlcywgcHJldmlvdXNCYXNlLCBzbjtcblxuICAgICAgICBhcnJheSA9IHZhbHVlLnNwbGl0KC9cXHJcXG58W1xcclxcbl0vKTtcbiAgICAgICAgc3BhY2VzID0gTnVtYmVyLk1BWF9WQUxVRTtcblxuICAgICAgICAvLyBmaXJzdCBsaW5lIGRvZXNuJ3QgaGF2ZSBpbmRlbnRhdGlvblxuICAgICAgICBmb3IgKGkgPSAxLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgbGluZSA9IGFycmF5W2ldO1xuICAgICAgICAgICAgaiA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoaiA8IGxpbmUubGVuZ3RoICYmIGVzdXRpbHMuY29kZS5pc1doaXRlU3BhY2UobGluZS5jaGFyQ29kZUF0KGopKSkge1xuICAgICAgICAgICAgICAgICsrajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzcGFjZXMgPiBqKSB7XG4gICAgICAgICAgICAgICAgc3BhY2VzID0gajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygc3BlY2lhbEJhc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAvLyBwYXR0ZXJuIGxpa2VcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgdmFyIHQgPSAyMDsgIC8qXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgKiB0aGlzIGlzIGNvbW1lbnRcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgcHJldmlvdXNCYXNlID0gYmFzZTtcbiAgICAgICAgICAgIGlmIChhcnJheVsxXVtzcGFjZXNdID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICBzcGVjaWFsQmFzZSArPSAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiYXNlID0gc3BlY2lhbEJhc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3BhY2VzICYgMSkge1xuICAgICAgICAgICAgICAgIC8vIC8qXG4gICAgICAgICAgICAgICAgLy8gICpcbiAgICAgICAgICAgICAgICAvLyAgKi9cbiAgICAgICAgICAgICAgICAvLyBJZiBzcGFjZXMgYXJlIG9kZCBudW1iZXIsIGFib3ZlIHBhdHRlcm4gaXMgY29uc2lkZXJlZC5cbiAgICAgICAgICAgICAgICAvLyBXZSB3YXN0ZSAxIHNwYWNlLlxuICAgICAgICAgICAgICAgIC0tc3BhY2VzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJldmlvdXNCYXNlID0gYmFzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDEsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBzbiA9IHRvU291cmNlTm9kZVdoZW5OZWVkZWQoYWRkSW5kZW50KGFycmF5W2ldLnNsaWNlKHNwYWNlcykpKTtcbiAgICAgICAgICAgIGFycmF5W2ldID0gc291cmNlTWFwID8gc24uam9pbignJykgOiBzbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJhc2UgPSBwcmV2aW91c0Jhc2U7XG5cbiAgICAgICAgcmV0dXJuIGFycmF5LmpvaW4oJ1xcbicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlQ29tbWVudChjb21tZW50LCBzcGVjaWFsQmFzZSkge1xuICAgICAgICBpZiAoY29tbWVudC50eXBlID09PSAnTGluZScpIHtcbiAgICAgICAgICAgIGlmIChlbmRzV2l0aExpbmVUZXJtaW5hdG9yKGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcvLycgKyBjb21tZW50LnZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXNlIExpbmVUZXJtaW5hdG9yXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICcvLycgKyBjb21tZW50LnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVCbGFua0xpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXFxuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0cmEuZm9ybWF0LmluZGVudC5hZGp1c3RNdWx0aWxpbmVDb21tZW50ICYmIC9bXFxuXFxyXS8udGVzdChjb21tZW50LnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFkanVzdE11bHRpbGluZUNvbW1lbnQoJy8qJyArIGNvbW1lbnQudmFsdWUgKyAnKi8nLCBzcGVjaWFsQmFzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcvKicgKyBjb21tZW50LnZhbHVlICsgJyovJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRDb21tZW50cyhzdG10LCByZXN1bHQpIHtcbiAgICAgICAgdmFyIGksIGxlbiwgY29tbWVudCwgc2F2ZSwgdGFpbGluZ1RvU3RhdGVtZW50LCBzcGVjaWFsQmFzZSwgZnJhZ21lbnQsXG4gICAgICAgICAgICBleHRSYW5nZSwgcmFuZ2UsIHByZXZSYW5nZSwgcHJlZml4LCBpbmZpeCwgc3VmZml4LCBjb3VudDtcblxuICAgICAgICBpZiAoc3RtdC5sZWFkaW5nQ29tbWVudHMgJiYgc3RtdC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2F2ZSA9IHJlc3VsdDtcblxuICAgICAgICAgICAgaWYgKHByZXNlcnZlQmxhbmtMaW5lcykge1xuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzdG10LmxlYWRpbmdDb21tZW50c1swXTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgICAgIGV4dFJhbmdlID0gY29tbWVudC5leHRlbmRlZFJhbmdlO1xuICAgICAgICAgICAgICAgIHJhbmdlID0gY29tbWVudC5yYW5nZTtcblxuICAgICAgICAgICAgICAgIHByZWZpeCA9IHNvdXJjZUNvZGUuc3Vic3RyaW5nKGV4dFJhbmdlWzBdLCByYW5nZVswXSk7XG4gICAgICAgICAgICAgICAgY291bnQgPSAocHJlZml4Lm1hdGNoKC9cXG4vZykgfHwgW10pLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHN0cmluZ1JlcGVhdCgnXFxuJywgY291bnQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYWRkSW5kZW50KGdlbmVyYXRlQ29tbWVudChjb21tZW50KSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHByZWZpeCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlbmVyYXRlQ29tbWVudChjb21tZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcHJldlJhbmdlID0gcmFuZ2U7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAxLCBsZW4gPSBzdG10LmxlYWRpbmdDb21tZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc3RtdC5sZWFkaW5nQ29tbWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gY29tbWVudC5yYW5nZTtcblxuICAgICAgICAgICAgICAgICAgICBpbmZpeCA9IHNvdXJjZUNvZGUuc3Vic3RyaW5nKHByZXZSYW5nZVsxXSwgcmFuZ2VbMF0pO1xuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IChpbmZpeC5tYXRjaCgvXFxuL2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHN0cmluZ1JlcGVhdCgnXFxuJywgY291bnQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYWRkSW5kZW50KGdlbmVyYXRlQ29tbWVudChjb21tZW50KSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHByZXZSYW5nZSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN1ZmZpeCA9IHNvdXJjZUNvZGUuc3Vic3RyaW5nKHJhbmdlWzFdLCBleHRSYW5nZVsxXSk7XG4gICAgICAgICAgICAgICAgY291bnQgPSAoc3VmZml4Lm1hdGNoKC9cXG4vZykgfHwgW10pLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzdHJpbmdSZXBlYXQoJ1xcbicsIGNvdW50KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzdG10LmxlYWRpbmdDb21tZW50c1swXTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoc2FmZUNvbmNhdGVuYXRpb24gJiYgc3RtdC50eXBlID09PSBTeW50YXguUHJvZ3JhbSAmJiBzdG10LmJvZHkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCdcXG4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ2VuZXJhdGVDb21tZW50KGNvbW1lbnQpKTtcbiAgICAgICAgICAgICAgICBpZiAoIWVuZHNXaXRoTGluZVRlcm1pbmF0b3IodG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQpLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCdcXG4nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAxLCBsZW4gPSBzdG10LmxlYWRpbmdDb21tZW50cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc3RtdC5sZWFkaW5nQ29tbWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gW2dlbmVyYXRlQ29tbWVudChjb21tZW50KV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghZW5kc1dpdGhMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKGZyYWdtZW50KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQucHVzaCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYWRkSW5kZW50KGZyYWdtZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQucHVzaChhZGRJbmRlbnQoc2F2ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0bXQudHJhaWxpbmdDb21tZW50cykge1xuXG4gICAgICAgICAgICBpZiAocHJlc2VydmVCbGFua0xpbmVzKSB7XG4gICAgICAgICAgICAgICAgY29tbWVudCA9IHN0bXQudHJhaWxpbmdDb21tZW50c1swXTtcbiAgICAgICAgICAgICAgICBleHRSYW5nZSA9IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZTtcbiAgICAgICAgICAgICAgICByYW5nZSA9IGNvbW1lbnQucmFuZ2U7XG5cbiAgICAgICAgICAgICAgICBwcmVmaXggPSBzb3VyY2VDb2RlLnN1YnN0cmluZyhleHRSYW5nZVswXSwgcmFuZ2VbMF0pO1xuICAgICAgICAgICAgICAgIGNvdW50ID0gKHByZWZpeC5tYXRjaCgvXFxuL2cpIHx8IFtdKS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHN0cmluZ1JlcGVhdCgnXFxuJywgY291bnQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYWRkSW5kZW50KGdlbmVyYXRlQ29tbWVudChjb21tZW50KSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHByZWZpeCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlbmVyYXRlQ29tbWVudChjb21tZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YWlsaW5nVG9TdGF0ZW1lbnQgPSAhZW5kc1dpdGhMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKHJlc3VsdCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgc3BlY2lhbEJhc2UgPSBzdHJpbmdSZXBlYXQoJyAnLCBjYWxjdWxhdGVTcGFjZXModG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChbYmFzZSwgcmVzdWx0LCBpbmRlbnRdKS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gc3RtdC50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzdG10LnRyYWlsaW5nQ29tbWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWlsaW5nVG9TdGF0ZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFzc3VtZSB0YXJnZXQgbGlrZSBmb2xsb3dpbmcgc2NyaXB0XG4gICAgICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyIHQgPSAyMDsgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAqIFRoaXMgaXMgY29tbWVudCBvZiB0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNhc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0LCBpbmRlbnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0LCBzcGVjaWFsQmFzZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChnZW5lcmF0ZUNvbW1lbnQoY29tbWVudCwgc3BlY2lhbEJhc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtyZXN1bHQsIGFkZEluZGVudChnZW5lcmF0ZUNvbW1lbnQoY29tbWVudCkpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPT0gbGVuIC0gMSAmJiAhZW5kc1dpdGhMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKHJlc3VsdCkudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtyZXN1bHQsICdcXG4nXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVCbGFua0xpbmVzKHN0YXJ0LCBlbmQsIHJlc3VsdCkge1xuICAgICAgICB2YXIgaiwgbmV3bGluZUNvdW50ID0gMDtcblxuICAgICAgICBmb3IgKGogPSBzdGFydDsgaiA8IGVuZDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlQ29kZVtqXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICBuZXdsaW5lQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaiA9IDE7IGogPCBuZXdsaW5lQ291bnQ7IGorKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3bGluZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJlbnRoZXNpemUodGV4dCwgY3VycmVudCwgc2hvdWxkKSB7XG4gICAgICAgIGlmIChjdXJyZW50IDwgc2hvdWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gWycoJywgdGV4dCwgJyknXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZVZlcmJhdGltU3RyaW5nKHN0cmluZykge1xuICAgICAgICB2YXIgaSwgaXosIHJlc3VsdDtcbiAgICAgICAgcmVzdWx0ID0gc3RyaW5nLnNwbGl0KC9cXHJcXG58XFxuLyk7XG4gICAgICAgIGZvciAoaSA9IDEsIGl6ID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGl6OyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdFtpXSA9IG5ld2xpbmUgKyBiYXNlICsgcmVzdWx0W2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVWZXJiYXRpbShleHByLCBwcmVjZWRlbmNlKSB7XG4gICAgICAgIHZhciB2ZXJiYXRpbSwgcmVzdWx0LCBwcmVjO1xuICAgICAgICB2ZXJiYXRpbSA9IGV4cHJbZXh0cmEudmVyYmF0aW1dO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmVyYmF0aW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBwYXJlbnRoZXNpemUoZ2VuZXJhdGVWZXJiYXRpbVN0cmluZyh2ZXJiYXRpbSksIFByZWNlZGVuY2UuU2VxdWVuY2UsIHByZWNlZGVuY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdmVyYmF0aW0gaXMgb2JqZWN0XG4gICAgICAgICAgICByZXN1bHQgPSBnZW5lcmF0ZVZlcmJhdGltU3RyaW5nKHZlcmJhdGltLmNvbnRlbnQpO1xuICAgICAgICAgICAgcHJlYyA9ICh2ZXJiYXRpbS5wcmVjZWRlbmNlICE9IG51bGwpID8gdmVyYmF0aW0ucHJlY2VkZW5jZSA6IFByZWNlZGVuY2UuU2VxdWVuY2U7XG4gICAgICAgICAgICByZXN1bHQgPSBwYXJlbnRoZXNpemUocmVzdWx0LCBwcmVjLCBwcmVjZWRlbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKHJlc3VsdCwgZXhwcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gQ29kZUdlbmVyYXRvcigpIHtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXJzLlxuXG4gICAgQ29kZUdlbmVyYXRvci5wcm90b3R5cGUubWF5YmVCbG9jayA9IGZ1bmN0aW9uKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgIHZhciByZXN1bHQsIG5vTGVhZGluZ0NvbW1lbnQsIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgIG5vTGVhZGluZ0NvbW1lbnQgPSAhZXh0cmEuY29tbWVudCB8fCAhc3RtdC5sZWFkaW5nQ29tbWVudHM7XG5cbiAgICAgICAgaWYgKHN0bXQudHlwZSA9PT0gU3ludGF4LkJsb2NrU3RhdGVtZW50ICYmIG5vTGVhZGluZ0NvbW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBbc3BhY2UsIHRoaXMuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdCwgZmxhZ3MpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdG10LnR5cGUgPT09IFN5bnRheC5FbXB0eVN0YXRlbWVudCAmJiBub0xlYWRpbmdDb21tZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gJzsnO1xuICAgICAgICB9XG5cbiAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAgbmV3bGluZSxcbiAgICAgICAgICAgICAgICBhZGRJbmRlbnQodGhhdC5nZW5lcmF0ZVN0YXRlbWVudChzdG10LCBmbGFncykpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBDb2RlR2VuZXJhdG9yLnByb3RvdHlwZS5tYXliZUJsb2NrU3VmZml4ID0gZnVuY3Rpb24gKHN0bXQsIHJlc3VsdCkge1xuICAgICAgICB2YXIgZW5kcyA9IGVuZHNXaXRoTGluZVRlcm1pbmF0b3IodG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQpLnRvU3RyaW5nKCkpO1xuICAgICAgICBpZiAoc3RtdC50eXBlID09PSBTeW50YXguQmxvY2tTdGF0ZW1lbnQgJiYgKCFleHRyYS5jb21tZW50IHx8ICFzdG10LmxlYWRpbmdDb21tZW50cykgJiYgIWVuZHMpIHtcbiAgICAgICAgICAgIHJldHVybiBbcmVzdWx0LCBzcGFjZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuZHMpIHtcbiAgICAgICAgICAgIHJldHVybiBbcmVzdWx0LCBiYXNlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3Jlc3VsdCwgbmV3bGluZSwgYmFzZV07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlSWRlbnRpZmllcihub2RlKSB7XG4gICAgICAgIHJldHVybiB0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKG5vZGUubmFtZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVBc3luY1ByZWZpeChub2RlLCBzcGFjZVJlcXVpcmVkKSB7XG4gICAgICAgIHJldHVybiBub2RlLmFzeW5jID8gJ2FzeW5jJyArIChzcGFjZVJlcXVpcmVkID8gbm9FbXB0eVNwYWNlKCkgOiBzcGFjZSkgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZVN0YXJTdWZmaXgobm9kZSkge1xuICAgICAgICB2YXIgaXNHZW5lcmF0b3IgPSBub2RlLmdlbmVyYXRvciAmJiAhZXh0cmEubW96LnN0YXJsZXNzR2VuZXJhdG9yO1xuICAgICAgICByZXR1cm4gaXNHZW5lcmF0b3IgPyAnKicgKyBzcGFjZSA6ICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlTWV0aG9kUHJlZml4KHByb3ApIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBwcm9wLnZhbHVlO1xuICAgICAgICBpZiAoZnVuYy5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlQXN5bmNQcmVmaXgoZnVuYywgIXByb3AuY29tcHV0ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYXZvaWQgc3BhY2UgYmVmb3JlIG1ldGhvZCBuYW1lXG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVTdGFyU3VmZml4KGZ1bmMpID8gJyonIDogJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBDb2RlR2VuZXJhdG9yLnByb3RvdHlwZS5nZW5lcmF0ZVBhdHRlcm4gPSBmdW5jdGlvbiAobm9kZSwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUlkZW50aWZpZXIobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKG5vZGUsIHByZWNlZGVuY2UsIGZsYWdzKTtcbiAgICB9O1xuXG4gICAgQ29kZUdlbmVyYXRvci5wcm90b3R5cGUuZ2VuZXJhdGVGdW5jdGlvblBhcmFtcyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHZhciBpLCBpeiwgcmVzdWx0LCBoYXNEZWZhdWx0O1xuXG4gICAgICAgIGhhc0RlZmF1bHQgPSBmYWxzZTtcblxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBTeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gJiZcbiAgICAgICAgICAgICAgICAhbm9kZS5yZXN0ICYmICghbm9kZS5kZWZhdWx0cyB8fCBub2RlLmRlZmF1bHRzLmxlbmd0aCA9PT0gMCkgJiZcbiAgICAgICAgICAgICAgICBub2RlLnBhcmFtcy5sZW5ndGggPT09IDEgJiYgbm9kZS5wYXJhbXNbMF0udHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIC8vIGFyZyA9PiB7IH0gY2FzZVxuICAgICAgICAgICAgcmVzdWx0ID0gW2dlbmVyYXRlQXN5bmNQcmVmaXgobm9kZSwgdHJ1ZSksIGdlbmVyYXRlSWRlbnRpZmllcihub2RlLnBhcmFtc1swXSldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS50eXBlID09PSBTeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gPyBbZ2VuZXJhdGVBc3luY1ByZWZpeChub2RlLCBmYWxzZSldIDogW107XG4gICAgICAgICAgICByZXN1bHQucHVzaCgnKCcpO1xuICAgICAgICAgICAgaWYgKG5vZGUuZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmIChoYXNEZWZhdWx0ICYmIG5vZGUuZGVmYXVsdHNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGRlZmF1bHQgdmFsdWVzLlxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLmdlbmVyYXRlQXNzaWdubWVudChub2RlLnBhcmFtc1tpXSwgbm9kZS5kZWZhdWx0c1tpXSwgJz0nLCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5nZW5lcmF0ZVBhdHRlcm4obm9kZS5wYXJhbXNbaV0sIFByZWNlZGVuY2UuQXNzaWdubWVudCwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgaXopIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJywnICsgc3BhY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5vZGUucmVzdCkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLnBhcmFtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJywnICsgc3BhY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLi4uJyk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ2VuZXJhdGVJZGVudGlmaWVyKG5vZGUucmVzdCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQucHVzaCgnKScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgQ29kZUdlbmVyYXRvci5wcm90b3R5cGUuZ2VuZXJhdGVGdW5jdGlvbkJvZHkgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICB2YXIgcmVzdWx0LCBleHByO1xuXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZ2VuZXJhdGVGdW5jdGlvblBhcmFtcyhub2RlKTtcblxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBTeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNwYWNlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCc9PicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUuZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goc3BhY2UpO1xuICAgICAgICAgICAgZXhwciA9IHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKG5vZGUuYm9keSwgUHJlY2VkZW5jZS5Bc3NpZ25tZW50LCBFX1RUVCk7XG4gICAgICAgICAgICBpZiAoZXhwci50b1N0cmluZygpLmNoYXJBdCgwKSA9PT0gJ3snKSB7XG4gICAgICAgICAgICAgICAgZXhwciA9IFsnKCcsIGV4cHIsICcpJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChleHByKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMubWF5YmVCbG9jayhub2RlLmJvZHksIFNfVFRGRikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgQ29kZUdlbmVyYXRvci5wcm90b3R5cGUuZ2VuZXJhdGVJdGVyYXRpb25Gb3JTdGF0ZW1lbnQgPSBmdW5jdGlvbiAob3BlcmF0b3IsIHN0bXQsIGZsYWdzKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbJ2ZvcicgKyBzcGFjZSArICcoJ10sIHRoYXQgPSB0aGlzO1xuICAgICAgICB3aXRoSW5kZW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChzdG10LmxlZnQudHlwZSA9PT0gU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB3aXRoSW5kZW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc3RtdC5sZWZ0LmtpbmQgKyBub0VtcHR5U3BhY2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdC5sZWZ0LmRlY2xhcmF0aW9uc1swXSwgU19GRkZGKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQubGVmdCwgUHJlY2VkZW5jZS5DYWxsLCBFX1RUVCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgb3BlcmF0b3IpO1xuICAgICAgICAgICAgcmVzdWx0ID0gW2pvaW4oXG4gICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgIHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQucmlnaHQsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKVxuICAgICAgICAgICAgKSwgJyknXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXMubWF5YmVCbG9jayhzdG10LmJvZHksIGZsYWdzKSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIENvZGVHZW5lcmF0b3IucHJvdG90eXBlLmdlbmVyYXRlUHJvcGVydHlLZXkgPSBmdW5jdGlvbiAoZXhwciwgY29tcHV0ZWQsIHZhbHVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICBpZiAoY29tcHV0ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCdbJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ0Fzc2lnbm1lbnRQYXR0ZXJuJykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5Bc3NpZ25tZW50UGF0dGVybih2YWx1ZSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcHV0ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCddJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBDb2RlR2VuZXJhdG9yLnByb3RvdHlwZS5nZW5lcmF0ZUFzc2lnbm1lbnQgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIG9wZXJhdG9yLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICBpZiAoUHJlY2VkZW5jZS5Bc3NpZ25tZW50IDwgcHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgZmxhZ3MgfD0gRl9BTExPV19JTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJlbnRoZXNpemUoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24obGVmdCwgUHJlY2VkZW5jZS5DYWxsLCBmbGFncyksXG4gICAgICAgICAgICAgICAgc3BhY2UgKyBvcGVyYXRvciArIHNwYWNlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHJpZ2h0LCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIGZsYWdzKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFByZWNlZGVuY2UuQXNzaWdubWVudCxcbiAgICAgICAgICAgIHByZWNlZGVuY2VcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgQ29kZUdlbmVyYXRvci5wcm90b3R5cGUuc2VtaWNvbG9uID0gZnVuY3Rpb24gKGZsYWdzKSB7XG4gICAgICAgIGlmICghc2VtaWNvbG9ucyAmJiBmbGFncyAmIEZfU0VNSUNPTE9OX09QVCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnOyc7XG4gICAgfTtcblxuICAgIC8vIFN0YXRlbWVudHMuXG5cbiAgICBDb2RlR2VuZXJhdG9yLlN0YXRlbWVudCA9IHtcblxuICAgICAgICBCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmFuZ2UsIGNvbnRlbnQsIHJlc3VsdCA9IFsneycsIG5ld2xpbmVdLCB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIGZ1bmN0aW9ucyB3aXRob3V0IGFueSBjb2RlXG4gICAgICAgICAgICAgICAgaWYgKHN0bXQuYm9keS5sZW5ndGggPT09IDAgJiYgcHJlc2VydmVCbGFua0xpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gc3RtdC5yYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlWzFdIC0gcmFuZ2VbMF0gPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gc291cmNlQ29kZS5zdWJzdHJpbmcocmFuZ2VbMF0gKyAxLCByYW5nZVsxXSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRbMF0gPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gWyd7J107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBpLCBpeiwgZnJhZ21lbnQsIGJvZHlGbGFncztcbiAgICAgICAgICAgICAgICBib2R5RmxhZ3MgPSBTX1RGRkY7XG4gICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRl9GVU5DX0JPRFkpIHtcbiAgICAgICAgICAgICAgICAgICAgYm9keUZsYWdzIHw9IEZfRElSRUNUSVZFX0NUWDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHN0bXQuYm9keS5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmVzZXJ2ZUJsYW5rTGluZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBzcGFjZXMgYmVmb3JlIHRoZSBmaXJzdCBsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdG10LmJvZHlbMF0ubGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gc3RtdC5ib2R5WzBdLmxlYWRpbmdDb21tZW50c1swXS5leHRlbmRlZFJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gc291cmNlQ29kZS5zdWJzdHJpbmcocmFuZ2VbMF0sIHJhbmdlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRbMF0gPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbJ3snXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0bXQuYm9keVswXS5sZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVCbGFua0xpbmVzKHN0bXQucmFuZ2VbMF0sIHN0bXQuYm9keVswXS5yYW5nZVswXSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBzcGFjZXMgYmV0d2VlbiBsaW5lc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG10LmJvZHlbaSAtIDFdLnRyYWlsaW5nQ29tbWVudHMgICYmICFzdG10LmJvZHlbaV0ubGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQmxhbmtMaW5lcyhzdG10LmJvZHlbaSAtIDFdLnJhbmdlWzFdLCBzdG10LmJvZHlbaV0ucmFuZ2VbMF0sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGl6IC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keUZsYWdzIHw9IEZfU0VNSUNPTE9OX09QVDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdG10LmJvZHlbaV0ubGVhZGluZ0NvbW1lbnRzICYmIHByZXNlcnZlQmxhbmtMaW5lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSB0aGF0LmdlbmVyYXRlU3RhdGVtZW50KHN0bXQuYm9keVtpXSwgYm9keUZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gYWRkSW5kZW50KHRoYXQuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdC5ib2R5W2ldLCBib2R5RmxhZ3MpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHRvU291cmNlTm9kZVdoZW5OZWVkZWQoZnJhZ21lbnQpLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2VydmVCbGFua0xpbmVzICYmIGkgPCBpeiAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBhZGQgYSBuZXcgbGluZSBpZiB0aGVyZSBhcmUgbGVhZGluZyBjb21lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIG5leHQgc3RhdGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG10LmJvZHlbaSArIDFdLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNlcnZlQmxhbmtMaW5lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHNwYWNlcyBhZnRlciB0aGUgbGFzdCBsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gaXogLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG10LmJvZHlbaV0udHJhaWxpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUJsYW5rTGluZXMoc3RtdC5ib2R5W2ldLnJhbmdlWzFdLCBzdG10LnJhbmdlWzFdLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXN1bHQucHVzaChhZGRJbmRlbnQoJ30nKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIEJyZWFrU3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIGlmIChzdG10LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdicmVhayAnICsgc3RtdC5sYWJlbC5uYW1lICsgdGhpcy5zZW1pY29sb24oZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdicmVhaycgKyB0aGlzLnNlbWljb2xvbihmbGFncyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgaWYgKHN0bXQubGFiZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnRpbnVlICcgKyBzdG10LmxhYmVsLm5hbWUgKyB0aGlzLnNlbWljb2xvbihmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ2NvbnRpbnVlJyArIHRoaXMuc2VtaWNvbG9uKGZsYWdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBDbGFzc0JvZHk6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFsgJ3snLCBuZXdsaW5lXSwgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKGluZGVudCkge1xuICAgICAgICAgICAgICAgIHZhciBpLCBpejtcblxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gc3RtdC5ib2R5Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaW5kZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhhdC5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5ib2R5W2ldLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBpeikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3bGluZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goYmFzZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCgnfScpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBDbGFzc0RlY2xhcmF0aW9uOiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGZyYWdtZW50O1xuICAgICAgICAgICAgcmVzdWx0ICA9IFsnY2xhc3MnXTtcbiAgICAgICAgICAgIGlmIChzdG10LmlkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuaWQsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RtdC5zdXBlckNsYXNzKSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBqb2luKCdleHRlbmRzJywgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5zdXBlckNsYXNzLCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIGZyYWdtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNwYWNlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdC5ib2R5LCBTX1RGRlQpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgRGlyZWN0aXZlU3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIGlmIChleHRyYS5yYXcgJiYgc3RtdC5yYXcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RtdC5yYXcgKyB0aGlzLnNlbWljb2xvbihmbGFncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXNjYXBlRGlyZWN0aXZlKHN0bXQuZGlyZWN0aXZlKSArIHRoaXMuc2VtaWNvbG9uKGZsYWdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBEb1doaWxlU3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIC8vIEJlY2F1c2UgYGRvIDQyIHdoaWxlIChjb25kKWAgaXMgU3ludGF4IEVycm9yLiBXZSBuZWVkIHNlbWljb2xvbi5cbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBqb2luKCdkbycsIHRoaXMubWF5YmVCbG9jayhzdG10LmJvZHksIFNfVEZGRikpO1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5tYXliZUJsb2NrU3VmZml4KHN0bXQuYm9keSwgcmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiBqb2luKHJlc3VsdCwgW1xuICAgICAgICAgICAgICAgICd3aGlsZScgKyBzcGFjZSArICcoJyxcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnRlc3QsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSxcbiAgICAgICAgICAgICAgICAnKScgKyB0aGlzLnNlbWljb2xvbihmbGFncylcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIENhdGNoQ2xhdXNlOiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGd1YXJkO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW1xuICAgICAgICAgICAgICAgICAgICAnY2F0Y2gnICsgc3BhY2UgKyAnKCcsXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQucGFyYW0sIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSxcbiAgICAgICAgICAgICAgICAgICAgJyknXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGlmIChzdG10Lmd1YXJkKSB7XG4gICAgICAgICAgICAgICAgICAgIGd1YXJkID0gdGhhdC5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5ndWFyZCwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNlKDIsIDAsICcgaWYgJywgZ3VhcmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5tYXliZUJsb2NrKHN0bXQuYm9keSwgU19URkZGKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiAnZGVidWdnZXInICsgdGhpcy5zZW1pY29sb24oZmxhZ3MpO1xuICAgICAgICB9LFxuXG4gICAgICAgIEVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiAnOyc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbICdleHBvcnQnIF0sIGJvZHlGbGFncztcblxuICAgICAgICAgICAgYm9keUZsYWdzID0gKGZsYWdzICYgRl9TRU1JQ09MT05fT1BUKSA/IFNfVEZGVCA6IFNfVEZGRjtcblxuICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgSG9pc3RhYmxlRGVjbGFyYXRpb25bRGVmYXVsdF1cbiAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IEFzc2lnbm1lbnRFeHByZXNzaW9uW0luXSA7XG4gICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgJ2RlZmF1bHQnKTtcbiAgICAgICAgICAgIGlmIChpc1N0YXRlbWVudChzdG10LmRlY2xhcmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCB0aGlzLmdlbmVyYXRlU3RhdGVtZW50KHN0bXQuZGVjbGFyYXRpb24sIGJvZHlGbGFncykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5kZWNsYXJhdGlvbiwgUHJlY2VkZW5jZS5Bc3NpZ25tZW50LCBFX1RUVCkgKyB0aGlzLnNlbWljb2xvbihmbGFncykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBFeHBvcnROYW1lZERlY2xhcmF0aW9uOiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbICdleHBvcnQnIF0sIGJvZHlGbGFncywgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIGJvZHlGbGFncyA9IChmbGFncyAmIEZfU0VNSUNPTE9OX09QVCkgPyBTX1RGRlQgOiBTX1RGRkY7XG5cbiAgICAgICAgICAgIC8vIGV4cG9ydCBWYXJpYWJsZVN0YXRlbWVudFxuICAgICAgICAgICAgLy8gZXhwb3J0IERlY2xhcmF0aW9uW0RlZmF1bHRdXG4gICAgICAgICAgICBpZiAoc3RtdC5kZWNsYXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBqb2luKHJlc3VsdCwgdGhpcy5nZW5lcmF0ZVN0YXRlbWVudChzdG10LmRlY2xhcmF0aW9uLCBib2R5RmxhZ3MpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZXhwb3J0IEV4cG9ydENsYXVzZVtOb1JlZmVyZW5jZV0gRnJvbUNsYXVzZSA7XG4gICAgICAgICAgICAvLyBleHBvcnQgRXhwb3J0Q2xhdXNlIDtcbiAgICAgICAgICAgIGlmIChzdG10LnNwZWNpZmllcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RtdC5zcGVjaWZpZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgJ3snICsgc3BhY2UgKyAnfScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RtdC5zcGVjaWZpZXJzWzBdLnR5cGUgPT09IFN5bnRheC5FeHBvcnRCYXRjaFNwZWNpZmllcikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5zcGVjaWZpZXJzWzBdLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCAneycpO1xuICAgICAgICAgICAgICAgICAgICB3aXRoSW5kZW50KGZ1bmN0aW9uIChpbmRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpejtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBzdG10LnNwZWNpZmllcnMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGluZGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhhdC5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5zcGVjaWZpZXJzW2ldLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyArIG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZW5kc1dpdGhMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKHJlc3VsdCkudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGJhc2UgKyAnfScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdG10LnNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb20nICsgc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNb2R1bGVTcGVjaWZpZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuc291cmNlLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbWljb2xvbihmbGFncylcbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5zZW1pY29sb24oZmxhZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIC8vIGV4cG9ydCAqIEZyb21DbGF1c2UgO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAnZXhwb3J0JyArIHNwYWNlLFxuICAgICAgICAgICAgICAgICcqJyArIHNwYWNlLFxuICAgICAgICAgICAgICAgICdmcm9tJyArIHNwYWNlLFxuICAgICAgICAgICAgICAgIC8vIE1vZHVsZVNwZWNpZmllclxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuc291cmNlLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCksXG4gICAgICAgICAgICAgICAgdGhpcy5zZW1pY29sb24oZmxhZ3MpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgZnJhZ21lbnQ7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGlzQ2xhc3NQcmVmaXhlZChmcmFnbWVudCkge1xuICAgICAgICAgICAgICAgIHZhciBjb2RlO1xuICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudC5zbGljZSgwLCA1KSAhPT0gJ2NsYXNzJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvZGUgPSBmcmFnbWVudC5jaGFyQ29kZUF0KDUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2RlID09PSAweDdCICAvKiAneycgKi8gfHwgZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShjb2RlKSB8fCBlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjb2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gaXNGdW5jdGlvblByZWZpeGVkKGZyYWdtZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvZGU7XG4gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50LnNsaWNlKDAsIDgpICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29kZSA9IGZyYWdtZW50LmNoYXJDb2RlQXQoOCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUgPT09IDB4MjggLyogJygnICovIHx8IGVzdXRpbHMuY29kZS5pc1doaXRlU3BhY2UoY29kZSkgfHwgY29kZSA9PT0gMHgyQSAgLyogJyonICovIHx8IGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNvZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpc0FzeW5jUHJlZml4ZWQoZnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29kZSwgaSwgaXo7XG4gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50LnNsaWNlKDAsIDUpICE9PSAnYXN5bmMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGZyYWdtZW50LmNoYXJDb2RlQXQoNSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChpID0gNiwgaXogPSBmcmFnbWVudC5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShmcmFnbWVudC5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50LnNsaWNlKGksIGkgKyA4KSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvZGUgPSBmcmFnbWVudC5jaGFyQ29kZUF0KGkgKyA4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29kZSA9PT0gMHgyOCAvKiAnKCcgKi8gfHwgZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShjb2RlKSB8fCBjb2RlID09PSAweDJBICAvKiAnKicgKi8gfHwgZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY29kZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCA9IFt0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LmV4cHJlc3Npb24sIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKV07XG4gICAgICAgICAgICAvLyAxMi40ICd7JywgJ2Z1bmN0aW9uJywgJ2NsYXNzJyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHBvc2l0aW9uLlxuICAgICAgICAgICAgLy8gd3JhcCBleHByZXNzaW9uIHdpdGggcGFyZW50aGVzZXNcbiAgICAgICAgICAgIGZyYWdtZW50ID0gdG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoZnJhZ21lbnQuY2hhckNvZGVBdCgwKSA9PT0gMHg3QiAgLyogJ3snICovIHx8ICAvLyBPYmplY3RFeHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgIGlzQ2xhc3NQcmVmaXhlZChmcmFnbWVudCkgfHxcbiAgICAgICAgICAgICAgICAgICAgaXNGdW5jdGlvblByZWZpeGVkKGZyYWdtZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICBpc0FzeW5jUHJlZml4ZWQoZnJhZ21lbnQpIHx8XG4gICAgICAgICAgICAgICAgICAgIChkaXJlY3RpdmUgJiYgKGZsYWdzICYgRl9ESVJFQ1RJVkVfQ1RYKSAmJiBzdG10LmV4cHJlc3Npb24udHlwZSA9PT0gU3ludGF4LkxpdGVyYWwgJiYgdHlwZW9mIHN0bXQuZXhwcmVzc2lvbi52YWx1ZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gWycoJywgcmVzdWx0LCAnKScgKyB0aGlzLnNlbWljb2xvbihmbGFncyldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnNlbWljb2xvbihmbGFncykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICAvLyBFUzY6IDE1LjIuMSB2YWxpZCBpbXBvcnQgZGVjbGFyYXRpb25zOlxuICAgICAgICAgICAgLy8gICAgIC0gaW1wb3J0IEltcG9ydENsYXVzZSBGcm9tQ2xhdXNlIDtcbiAgICAgICAgICAgIC8vICAgICAtIGltcG9ydCBNb2R1bGVTcGVjaWZpZXIgO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgY3Vyc29yLCB0aGF0ID0gdGhpcztcblxuICAgICAgICAgICAgLy8gSWYgbm8gSW1wb3J0Q2xhdXNlIGlzIHByZXNlbnQsXG4gICAgICAgICAgICAvLyB0aGlzIHNob3VsZCBiZSBgaW1wb3J0IE1vZHVsZVNwZWNpZmllcmAgc28gc2tpcCBgZnJvbWBcbiAgICAgICAgICAgIC8vIE1vZHVsZVNwZWNpZmllciBpcyBTdHJpbmdMaXRlcmFsLlxuICAgICAgICAgICAgaWYgKHN0bXQuc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBpbXBvcnQgTW9kdWxlU3BlY2lmaWVyIDtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAnaW1wb3J0JyxcbiAgICAgICAgICAgICAgICAgICAgc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgIC8vIE1vZHVsZVNwZWNpZmllclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnNvdXJjZSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbWljb2xvbihmbGFncylcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpbXBvcnQgSW1wb3J0Q2xhdXNlIEZyb21DbGF1c2UgO1xuICAgICAgICAgICAgcmVzdWx0ID0gW1xuICAgICAgICAgICAgICAgICdpbXBvcnQnXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY3Vyc29yID0gMDtcblxuICAgICAgICAgICAgLy8gSW1wb3J0ZWRCaW5kaW5nXG4gICAgICAgICAgICBpZiAoc3RtdC5zcGVjaWZpZXJzW2N1cnNvcl0udHlwZSA9PT0gU3ludGF4LkltcG9ydERlZmF1bHRTcGVjaWZpZXIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5zcGVjaWZpZXJzW2N1cnNvcl0sIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKVxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICsrY3Vyc29yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RtdC5zcGVjaWZpZXJzW2N1cnNvcl0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0bXQuc3BlY2lmaWVyc1tjdXJzb3JdLnR5cGUgPT09IFN5bnRheC5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTmFtZVNwYWNlSW1wb3J0XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5zcGVjaWZpZXJzW2N1cnNvcl0sIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZEltcG9ydHNcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc3BhY2UgKyAneycpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoc3RtdC5zcGVjaWZpZXJzLmxlbmd0aCAtIGN1cnNvcikgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydCB7IC4uLiB9IGZyb20gXCIuLi5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuc3BlY2lmaWVyc1tjdXJzb3JdLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc3BhY2UgKyAnfScgKyBzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBvcnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgLi4uLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgLi4uLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSBmcm9tIFwiLi4uXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoSW5kZW50KGZ1bmN0aW9uIChpbmRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3bGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gY3Vyc29yLCBpeiA9IHN0bXQuc3BlY2lmaWVycy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGluZGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuc3BlY2lmaWVyc1tpXSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgaXopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyArIG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZHNXaXRoTGluZVRlcm1pbmF0b3IodG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQpLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3bGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiYXNlICsgJ30nICsgc3BhY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgW1xuICAgICAgICAgICAgICAgICdmcm9tJyArIHNwYWNlLFxuICAgICAgICAgICAgICAgIC8vIE1vZHVsZVNwZWNpZmllclxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuc291cmNlLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCksXG4gICAgICAgICAgICAgICAgdGhpcy5zZW1pY29sb24oZmxhZ3MpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciBpdGVtRmxhZ3MgPSAoZmxhZ3MgJiBGX0FMTE9XX0lOKSA/IEVfVFRUIDogRV9GVFQ7XG4gICAgICAgICAgICBpZiAoc3RtdC5pbml0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5pZCwgUHJlY2VkZW5jZS5Bc3NpZ25tZW50LCBpdGVtRmxhZ3MpLFxuICAgICAgICAgICAgICAgICAgICBzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgJz0nLFxuICAgICAgICAgICAgICAgICAgICBzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5pbml0LCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIGl0ZW1GbGFncylcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVQYXR0ZXJuKHN0bXQuaWQsIFByZWNlZGVuY2UuQXNzaWdubWVudCwgaXRlbUZsYWdzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIC8vIFZhcmlhYmxlRGVjbGFyYXRvciBpcyB0eXBlZCBhcyBTdGF0ZW1lbnQsXG4gICAgICAgICAgICAvLyBidXQgam9pbmVkIHdpdGggY29tbWEgKG5vdCBMaW5lVGVybWluYXRvcikuXG4gICAgICAgICAgICAvLyBTbyBpZiBjb21tZW50IGlzIGF0dGFjaGVkIHRvIHRhcmdldCBub2RlLCB3ZSBzaG91bGQgc3BlY2lhbGl6ZS5cbiAgICAgICAgICAgIHZhciByZXN1bHQsIGksIGl6LCBub2RlLCBib2R5RmxhZ3MsIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICByZXN1bHQgPSBbIHN0bXQua2luZCBdO1xuXG4gICAgICAgICAgICBib2R5RmxhZ3MgPSAoZmxhZ3MgJiBGX0FMTE9XX0lOKSA/IFNfVEZGRiA6IFNfRkZGRjtcblxuICAgICAgICAgICAgZnVuY3Rpb24gYmxvY2soKSB7XG4gICAgICAgICAgICAgICAgbm9kZSA9IHN0bXQuZGVjbGFyYXRpb25zWzBdO1xuICAgICAgICAgICAgICAgIGlmIChleHRyYS5jb21tZW50ICYmIG5vZGUubGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCdcXG4nKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYWRkSW5kZW50KHRoYXQuZ2VuZXJhdGVTdGF0ZW1lbnQobm9kZSwgYm9keUZsYWdzKSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vRW1wdHlTcGFjZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhhdC5nZW5lcmF0ZVN0YXRlbWVudChub2RlLCBib2R5RmxhZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAxLCBpeiA9IHN0bXQuZGVjbGFyYXRpb25zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHN0bXQuZGVjbGFyYXRpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudCAmJiBub2RlLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJywnICsgbmV3bGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChhZGRJbmRlbnQodGhhdC5nZW5lcmF0ZVN0YXRlbWVudChub2RlLCBib2R5RmxhZ3MpKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLCcgKyBzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGF0LmdlbmVyYXRlU3RhdGVtZW50KG5vZGUsIGJvZHlGbGFncykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RtdC5kZWNsYXJhdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHdpdGhJbmRlbnQoYmxvY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBibG9jaygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnNlbWljb2xvbihmbGFncykpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIFRocm93U3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBbam9pbihcbiAgICAgICAgICAgICAgICAndGhyb3cnLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuYXJndW1lbnQsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKVxuICAgICAgICAgICAgKSwgdGhpcy5zZW1pY29sb24oZmxhZ3MpXTtcbiAgICAgICAgfSxcblxuICAgICAgICBUcnlTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgaSwgaXosIGd1YXJkZWRIYW5kbGVycztcblxuICAgICAgICAgICAgcmVzdWx0ID0gWyd0cnknLCB0aGlzLm1heWJlQmxvY2soc3RtdC5ibG9jaywgU19URkZGKV07XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLm1heWJlQmxvY2tTdWZmaXgoc3RtdC5ibG9jaywgcmVzdWx0KTtcblxuICAgICAgICAgICAgaWYgKHN0bXQuaGFuZGxlcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBvbGQgaW50ZXJmYWNlXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBzdG10LmhhbmRsZXJzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIHRoaXMuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdC5oYW5kbGVyc1tpXSwgU19URkZGKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdG10LmZpbmFsaXplciB8fCBpICsgMSAhPT0gaXopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWF5YmVCbG9ja1N1ZmZpeChzdG10LmhhbmRsZXJzW2ldLmJvZHksIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGd1YXJkZWRIYW5kbGVycyA9IHN0bXQuZ3VhcmRlZEhhbmRsZXJzIHx8IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBndWFyZGVkSGFuZGxlcnMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgdGhpcy5nZW5lcmF0ZVN0YXRlbWVudChndWFyZGVkSGFuZGxlcnNbaV0sIFNfVEZGRikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RtdC5maW5hbGl6ZXIgfHwgaSArIDEgIT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLm1heWJlQmxvY2tTdWZmaXgoZ3VhcmRlZEhhbmRsZXJzW2ldLmJvZHksIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBuZXcgaW50ZXJmYWNlXG4gICAgICAgICAgICAgICAgaWYgKHN0bXQuaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShzdG10LmhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHN0bXQuaGFuZGxlci5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIHRoaXMuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdC5oYW5kbGVyW2ldLCBTX1RGRkYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RtdC5maW5hbGl6ZXIgfHwgaSArIDEgIT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWF5YmVCbG9ja1N1ZmZpeChzdG10LmhhbmRsZXJbaV0uYm9keSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgdGhpcy5nZW5lcmF0ZVN0YXRlbWVudChzdG10LmhhbmRsZXIsIFNfVEZGRikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0bXQuZmluYWxpemVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5tYXliZUJsb2NrU3VmZml4KHN0bXQuaGFuZGxlci5ib2R5LCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0bXQuZmluYWxpemVyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIFsnZmluYWxseScsIHRoaXMubWF5YmVCbG9jayhzdG10LmZpbmFsaXplciwgU19URkZGKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgZnJhZ21lbnQsIGksIGl6LCBib2R5RmxhZ3MsIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW1xuICAgICAgICAgICAgICAgICAgICAnc3dpdGNoJyArIHNwYWNlICsgJygnLFxuICAgICAgICAgICAgICAgICAgICB0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LmRpc2NyaW1pbmFudCwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpLFxuICAgICAgICAgICAgICAgICAgICAnKScgKyBzcGFjZSArICd7JyArIG5ld2xpbmVcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoc3RtdC5jYXNlcykge1xuICAgICAgICAgICAgICAgIGJvZHlGbGFncyA9IFNfVEZGRjtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHN0bXQuY2FzZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gaXogLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5RmxhZ3MgfD0gRl9TRU1JQ09MT05fT1BUO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gYWRkSW5kZW50KHRoaXMuZ2VuZXJhdGVTdGF0ZW1lbnQoc3RtdC5jYXNlc1tpXSwgYm9keUZsYWdzKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHRvU291cmNlTm9kZVdoZW5OZWVkZWQoZnJhZ21lbnQpLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFkZEluZGVudCgnfScpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgU3dpdGNoQ2FzZTogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBmcmFnbWVudCwgaSwgaXosIGJvZHlGbGFncywgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB3aXRoSW5kZW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RtdC50ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4oJ2Nhc2UnLCB0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnRlc3QsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAnOidcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbJ2RlZmF1bHQ6J107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICAgICAgaXogPSBzdG10LmNvbnNlcXVlbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChpeiAmJiBzdG10LmNvbnNlcXVlbnRbMF0udHlwZSA9PT0gU3ludGF4LkJsb2NrU3RhdGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gdGhhdC5tYXliZUJsb2NrKHN0bXQuY29uc2VxdWVudFswXSwgU19URkZGKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpID0gMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaSAhPT0gaXogJiYgIWVuZHNXaXRoTGluZVRlcm1pbmF0b3IodG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQpLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHlGbGFncyA9IFNfVEZGRjtcbiAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGl6IC0gMSAmJiBmbGFncyAmIEZfU0VNSUNPTE9OX09QVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keUZsYWdzIHw9IEZfU0VNSUNPTE9OX09QVDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGFkZEluZGVudCh0aGF0LmdlbmVyYXRlU3RhdGVtZW50KHN0bXQuY29uc2VxdWVudFtpXSwgYm9keUZsYWdzKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxICE9PSBpeiAmJiAhZW5kc1dpdGhMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKGZyYWdtZW50KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3bGluZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgSWZTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgYm9keUZsYWdzLCBzZW1pY29sb25PcHRpb25hbCwgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICB3aXRoSW5kZW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAgICAgICdpZicgKyBzcGFjZSArICcoJyxcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC50ZXN0LCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCksXG4gICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNlbWljb2xvbk9wdGlvbmFsID0gZmxhZ3MgJiBGX1NFTUlDT0xPTl9PUFQ7XG4gICAgICAgICAgICBib2R5RmxhZ3MgPSBTX1RGRkY7XG4gICAgICAgICAgICBpZiAoc2VtaWNvbG9uT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICBib2R5RmxhZ3MgfD0gRl9TRU1JQ09MT05fT1BUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0bXQuYWx0ZXJuYXRlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5tYXliZUJsb2NrKHN0bXQuY29uc2VxdWVudCwgU19URkZGKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5tYXliZUJsb2NrU3VmZml4KHN0bXQuY29uc2VxdWVudCwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICBpZiAoc3RtdC5hbHRlcm5hdGUudHlwZSA9PT0gU3ludGF4LklmU3RhdGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCBbJ2Vsc2UgJywgdGhpcy5nZW5lcmF0ZVN0YXRlbWVudChzdG10LmFsdGVybmF0ZSwgYm9keUZsYWdzKV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCBqb2luKCdlbHNlJywgdGhpcy5tYXliZUJsb2NrKHN0bXQuYWx0ZXJuYXRlLCBib2R5RmxhZ3MpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLm1heWJlQmxvY2soc3RtdC5jb25zZXF1ZW50LCBib2R5RmxhZ3MpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgRm9yU3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gWydmb3InICsgc3BhY2UgKyAnKCddO1xuICAgICAgICAgICAgICAgIGlmIChzdG10LmluaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0bXQuaW5pdC50eXBlID09PSBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhhdC5nZW5lcmF0ZVN0YXRlbWVudChzdG10LmluaXQsIFNfRkZGRikpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRl9BTExPV19JTiBiZWNvbWVzIGZhbHNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhhdC5nZW5lcmF0ZUV4cHJlc3Npb24oc3RtdC5pbml0LCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX0ZUVCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJzsnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCc7Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0bXQudGVzdCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQudGVzdCwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJzsnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnOycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdG10LnVwZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQudXBkYXRlLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCkpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnKScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcpJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMubWF5YmVCbG9jayhzdG10LmJvZHksIGZsYWdzICYgRl9TRU1JQ09MT05fT1BUID8gU19URkZUIDogU19URkZGKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIEZvckluU3RhdGVtZW50OiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlSXRlcmF0aW9uRm9yU3RhdGVtZW50KCdpbicsIHN0bXQsIGZsYWdzICYgRl9TRU1JQ09MT05fT1BUID8gU19URkZUIDogU19URkZGKTtcbiAgICAgICAgfSxcblxuICAgICAgICBGb3JPZlN0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUl0ZXJhdGlvbkZvclN0YXRlbWVudCgnb2YnLCBzdG10LCBmbGFncyAmIEZfU0VNSUNPTE9OX09QVCA/IFNfVEZGVCA6IFNfVEZGRik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gW3N0bXQubGFiZWwubmFtZSArICc6JywgdGhpcy5tYXliZUJsb2NrKHN0bXQuYm9keSwgZmxhZ3MgJiBGX1NFTUlDT0xPTl9PUFQgPyBTX1RGRlQgOiBTX1RGRkYpXTtcbiAgICAgICAgfSxcblxuICAgICAgICBQcm9ncmFtOiBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGZyYWdtZW50LCBpLCBpeiwgYm9keUZsYWdzO1xuICAgICAgICAgICAgaXogPSBzdG10LmJvZHkubGVuZ3RoO1xuICAgICAgICAgICAgcmVzdWx0ID0gW3NhZmVDb25jYXRlbmF0aW9uICYmIGl6ID4gMCA/ICdcXG4nIDogJyddO1xuICAgICAgICAgICAgYm9keUZsYWdzID0gU19URlRGO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNhZmVDb25jYXRlbmF0aW9uICYmIGkgPT09IGl6IC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBib2R5RmxhZ3MgfD0gRl9TRU1JQ09MT05fT1BUO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwcmVzZXJ2ZUJsYW5rTGluZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHNwYWNlcyBiZWZvcmUgdGhlIGZpcnN0IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RtdC5ib2R5WzBdLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQmxhbmtMaW5lcyhzdG10LnJhbmdlWzBdLCBzdG10LmJvZHlbaV0ucmFuZ2VbMF0sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgc3BhY2VzIGJldHdlZW4gbGluZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0bXQuYm9keVtpIC0gMV0udHJhaWxpbmdDb21tZW50cyAmJiAhc3RtdC5ib2R5W2ldLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQmxhbmtMaW5lcyhzdG10LmJvZHlbaSAtIDFdLnJhbmdlWzFdLCBzdG10LmJvZHlbaV0ucmFuZ2VbMF0sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGFkZEluZGVudCh0aGlzLmdlbmVyYXRlU3RhdGVtZW50KHN0bXQuYm9keVtpXSwgYm9keUZsYWdzKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IGl6ICYmICFlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHRvU291cmNlTm9kZVdoZW5OZWVkZWQoZnJhZ21lbnQpLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmVzZXJ2ZUJsYW5rTGluZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RtdC5ib2R5W2kgKyAxXS5sZWFkaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHByZXNlcnZlQmxhbmtMaW5lcykge1xuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgc3BhY2VzIGFmdGVyIHRoZSBsYXN0IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGl6IC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG10LmJvZHlbaV0udHJhaWxpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQmxhbmtMaW5lcyhzdG10LmJvZHlbaV0ucmFuZ2VbMV0sIHN0bXQucmFuZ2VbMV0sIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246IGZ1bmN0aW9uIChzdG10LCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFzeW5jUHJlZml4KHN0bXQsIHRydWUpLFxuICAgICAgICAgICAgICAgICdmdW5jdGlvbicsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVTdGFyU3VmZml4KHN0bXQpIHx8IG5vRW1wdHlTcGFjZSgpLFxuICAgICAgICAgICAgICAgIHN0bXQuaWQgPyBnZW5lcmF0ZUlkZW50aWZpZXIoc3RtdC5pZCkgOiAnJyxcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRnVuY3Rpb25Cb2R5KHN0bXQpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIFJldHVyblN0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICBpZiAoc3RtdC5hcmd1bWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbam9pbihcbiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQuYXJndW1lbnQsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKVxuICAgICAgICAgICAgICAgICksIHRoaXMuc2VtaWNvbG9uKGZsYWdzKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWydyZXR1cm4nICsgdGhpcy5zZW1pY29sb24oZmxhZ3MpXTtcbiAgICAgICAgfSxcblxuICAgICAgICBXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ3doaWxlJyArIHNwYWNlICsgJygnLFxuICAgICAgICAgICAgICAgICAgICB0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihzdG10LnRlc3QsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKSxcbiAgICAgICAgICAgICAgICAgICAgJyknXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5tYXliZUJsb2NrKHN0bXQuYm9keSwgZmxhZ3MgJiBGX1NFTUlDT0xPTl9PUFQgPyBTX1RGRlQgOiBTX1RGRkYpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgV2l0aFN0YXRlbWVudDogZnVuY3Rpb24gKHN0bXQsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ3dpdGgnICsgc3BhY2UgKyAnKCcsXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKHN0bXQub2JqZWN0LCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCksXG4gICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMubWF5YmVCbG9jayhzdG10LmJvZHksIGZsYWdzICYgRl9TRU1JQ09MT05fT1BUID8gU19URkZUIDogU19URkZGKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgbWVyZ2UoQ29kZUdlbmVyYXRvci5wcm90b3R5cGUsIENvZGVHZW5lcmF0b3IuU3RhdGVtZW50KTtcblxuICAgIC8vIEV4cHJlc3Npb25zLlxuXG4gICAgQ29kZUdlbmVyYXRvci5FeHByZXNzaW9uID0ge1xuXG4gICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBpLCBpejtcbiAgICAgICAgICAgIGlmIChQcmVjZWRlbmNlLlNlcXVlbmNlIDwgcHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZfQUxMT1dfSU47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gZXhwci5leHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5leHByZXNzaW9uc1tpXSwgUHJlY2VkZW5jZS5Bc3NpZ25tZW50LCBmbGFncykpO1xuICAgICAgICAgICAgICAgIGlmIChpICsgMSA8IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyArIHNwYWNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKHJlc3VsdCwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgcHJlY2VkZW5jZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVBc3NpZ25tZW50KGV4cHIubGVmdCwgZXhwci5yaWdodCwgZXhwci5vcGVyYXRvciwgcHJlY2VkZW5jZSwgZmxhZ3MpO1xuICAgICAgICB9LFxuXG4gICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRoZXNpemUodGhpcy5nZW5lcmF0ZUZ1bmN0aW9uQm9keShleHByKSwgUHJlY2VkZW5jZS5BcnJvd0Z1bmN0aW9uLCBwcmVjZWRlbmNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgaWYgKFByZWNlZGVuY2UuQ29uZGl0aW9uYWwgPCBwcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRl9BTExPV19JTjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRoZXNpemUoXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLnRlc3QsIFByZWNlZGVuY2UuTG9naWNhbE9SLCBmbGFncyksXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlICsgJz8nICsgc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuY29uc2VxdWVudCwgUHJlY2VkZW5jZS5Bc3NpZ25tZW50LCBmbGFncyksXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlICsgJzonICsgc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuYWx0ZXJuYXRlLCBQcmVjZWRlbmNlLkFzc2lnbm1lbnQsIGZsYWdzKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgUHJlY2VkZW5jZS5Db25kaXRpb25hbCxcbiAgICAgICAgICAgICAgICBwcmVjZWRlbmNlXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuXG4gICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkJpbmFyeUV4cHJlc3Npb24oZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpO1xuICAgICAgICB9LFxuXG4gICAgICAgIEJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgY3VycmVudFByZWNlZGVuY2UsIGZyYWdtZW50LCBsZWZ0U291cmNlO1xuICAgICAgICAgICAgY3VycmVudFByZWNlZGVuY2UgPSBCaW5hcnlQcmVjZWRlbmNlW2V4cHIub3BlcmF0b3JdO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFByZWNlZGVuY2UgPCBwcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRl9BTExPV19JTjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnJhZ21lbnQgPSB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmxlZnQsIGN1cnJlbnRQcmVjZWRlbmNlLCBmbGFncyk7XG5cbiAgICAgICAgICAgIGxlZnRTb3VyY2UgPSBmcmFnbWVudC50b1N0cmluZygpO1xuXG4gICAgICAgICAgICBpZiAobGVmdFNvdXJjZS5jaGFyQ29kZUF0KGxlZnRTb3VyY2UubGVuZ3RoIC0gMSkgPT09IDB4MkYgLyogLyAqLyAmJiBlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyUGFydEVTNShleHByLm9wZXJhdG9yLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW2ZyYWdtZW50LCBub0VtcHR5U3BhY2UoKSwgZXhwci5vcGVyYXRvcl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4oZnJhZ21lbnQsIGV4cHIub3BlcmF0b3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmcmFnbWVudCA9IHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIucmlnaHQsIGN1cnJlbnRQcmVjZWRlbmNlICsgMSwgZmxhZ3MpO1xuXG4gICAgICAgICAgICBpZiAoZXhwci5vcGVyYXRvciA9PT0gJy8nICYmIGZyYWdtZW50LnRvU3RyaW5nKCkuY2hhckF0KDApID09PSAnLycgfHxcbiAgICAgICAgICAgIGV4cHIub3BlcmF0b3Iuc2xpY2UoLTEpID09PSAnPCcgJiYgZnJhZ21lbnQudG9TdHJpbmcoKS5zbGljZSgwLCAzKSA9PT0gJyEtLScpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiAnLycgY29uY2F0cyB3aXRoICcvJyBvciBgPGAgY29uY2F0cyB3aXRoIGAhLS1gLCBpdCBpcyBpbnRlcnByZXRlZCBhcyBjb21tZW50IHN0YXJ0XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9FbXB0eVNwYWNlKCkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZyYWdtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIGZyYWdtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4cHIub3BlcmF0b3IgPT09ICdpbicgJiYgIShmbGFncyAmIEZfQUxMT1dfSU4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsnKCcsIHJlc3VsdCwgJyknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRoZXNpemUocmVzdWx0LCBjdXJyZW50UHJlY2VkZW5jZSwgcHJlY2VkZW5jZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgaSwgaXo7XG4gICAgICAgICAgICAvLyBGX0FMTE9XX1VOUEFSQVRIX05FVyBiZWNvbWVzIGZhbHNlLlxuICAgICAgICAgICAgcmVzdWx0ID0gW3RoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuY2FsbGVlLCBQcmVjZWRlbmNlLkNhbGwsIEVfVFRGKV07XG4gICAgICAgICAgICByZXN1bHQucHVzaCgnKCcpO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBleHByWydhcmd1bWVudHMnXS5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwclsnYXJndW1lbnRzJ11baV0sIFByZWNlZGVuY2UuQXNzaWdubWVudCwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBpeikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLCcgKyBzcGFjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goJyknKTtcblxuICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBGX0FMTE9XX0NBTEwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsnKCcsIHJlc3VsdCwgJyknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRoZXNpemUocmVzdWx0LCBQcmVjZWRlbmNlLkNhbGwsIHByZWNlZGVuY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIE5ld0V4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgbGVuZ3RoLCBpLCBpeiwgaXRlbUZsYWdzO1xuICAgICAgICAgICAgbGVuZ3RoID0gZXhwclsnYXJndW1lbnRzJ10ubGVuZ3RoO1xuXG4gICAgICAgICAgICAvLyBGX0FMTE9XX0NBTEwgYmVjb21lcyBmYWxzZS5cbiAgICAgICAgICAgIC8vIEZfQUxMT1dfVU5QQVJBVEhfTkVXIG1heSBiZWNvbWUgZmFsc2UuXG4gICAgICAgICAgICBpdGVtRmxhZ3MgPSAoZmxhZ3MgJiBGX0FMTE9XX1VOUEFSQVRIX05FVyAmJiAhcGFyZW50aGVzZXMgJiYgbGVuZ3RoID09PSAwKSA/IEVfVEZUIDogRV9URkY7XG5cbiAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4oXG4gICAgICAgICAgICAgICAgJ25ldycsXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5jYWxsZWUsIFByZWNlZGVuY2UuTmV3LCBpdGVtRmxhZ3MpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIShmbGFncyAmIEZfQUxMT1dfVU5QQVJBVEhfTkVXKSB8fCBwYXJlbnRoZXNlcyB8fCBsZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJygnKTtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwclsnYXJndW1lbnRzJ11baV0sIFByZWNlZGVuY2UuQXNzaWdubWVudCwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgaXopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyArIHNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnKScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKHJlc3VsdCwgUHJlY2VkZW5jZS5OZXcsIHByZWNlZGVuY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIE1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCwgZnJhZ21lbnQ7XG5cbiAgICAgICAgICAgIC8vIEZfQUxMT1dfVU5QQVJBVEhfTkVXIGJlY29tZXMgZmFsc2UuXG4gICAgICAgICAgICByZXN1bHQgPSBbdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5vYmplY3QsIFByZWNlZGVuY2UuQ2FsbCwgKGZsYWdzICYgRl9BTExPV19DQUxMKSA/IEVfVFRGIDogRV9URkYpXTtcblxuICAgICAgICAgICAgaWYgKGV4cHIuY29tcHV0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnWycpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIucHJvcGVydHksIFByZWNlZGVuY2UuU2VxdWVuY2UsIGZsYWdzICYgRl9BTExPV19DQUxMID8gRV9UVFQgOiBFX1RGVCkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCddJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChleHByLm9iamVjdC50eXBlID09PSBTeW50YXguTGl0ZXJhbCAmJiB0eXBlb2YgZXhwci5vYmplY3QudmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gdG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhbGwgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAxLiBObyBmbG9hdGluZyBwb2ludFxuICAgICAgICAgICAgICAgICAgICAvLyAgIDIuIERvbid0IGhhdmUgZXhwb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIC8vICAgMy4gVGhlIGxhc3QgY2hhcmFjdGVyIGlzIGEgZGVjaW1hbCBkaWdpdFxuICAgICAgICAgICAgICAgICAgICAvLyAgIDQuIE5vdCBoZXhhZGVjaW1hbCBPUiBvY3RhbCBudW1iZXIgbGl0ZXJhbFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzaG91bGQgYWRkIGEgZmxvYXRpbmcgcG9pbnQuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC5pbmRleE9mKCcuJykgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIS9bZUV4WF0vLnRlc3QoZnJhZ21lbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGZyYWdtZW50LmNoYXJDb2RlQXQoZnJhZ21lbnQubGVuZ3RoIC0gMSkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShmcmFnbWVudC5sZW5ndGggPj0gMiAmJiBmcmFnbWVudC5jaGFyQ29kZUF0KDApID09PSA0OCkgIC8vICcwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLicpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlbmVyYXRlSWRlbnRpZmllcihleHByLnByb3BlcnR5KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRoZXNpemUocmVzdWx0LCBQcmVjZWRlbmNlLk1lbWJlciwgcHJlY2VkZW5jZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgTWV0YVByb3BlcnR5OiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGV4cHIubWV0YSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCgnLicpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZXhwci5wcm9wZXJ0eSk7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKHJlc3VsdCwgUHJlY2VkZW5jZS5NZW1iZXIsIHByZWNlZGVuY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBmcmFnbWVudCwgcmlnaHRDaGFyQ29kZSwgbGVmdFNvdXJjZSwgbGVmdENoYXJDb2RlO1xuICAgICAgICAgICAgZnJhZ21lbnQgPSB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmFyZ3VtZW50LCBQcmVjZWRlbmNlLlVuYXJ5LCBFX1RUVCk7XG5cbiAgICAgICAgICAgIGlmIChzcGFjZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKGV4cHIub3BlcmF0b3IsIGZyYWdtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW2V4cHIub3BlcmF0b3JdO1xuICAgICAgICAgICAgICAgIGlmIChleHByLm9wZXJhdG9yLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlLCB2b2lkLCB0eXBlb2ZcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGB0eXBlb2YgW11gLCBub3QgYHR5cGVvZltdYFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgaW5zZXJ0aW5nIHNwYWNlcyBiZXR3ZWVuIG9wZXJhdG9yIGFuZCBhcmd1bWVudCBpZiBpdCBpcyB1bm5lY2Vzc2FyeVxuICAgICAgICAgICAgICAgICAgICAvLyBsaWtlLCBgIWNvbmRgXG4gICAgICAgICAgICAgICAgICAgIGxlZnRTb3VyY2UgPSB0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKHJlc3VsdCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgbGVmdENoYXJDb2RlID0gbGVmdFNvdXJjZS5jaGFyQ29kZUF0KGxlZnRTb3VyY2UubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0Q2hhckNvZGUgPSBmcmFnbWVudC50b1N0cmluZygpLmNoYXJDb2RlQXQoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCgobGVmdENoYXJDb2RlID09PSAweDJCICAvKiArICovIHx8IGxlZnRDaGFyQ29kZSA9PT0gMHgyRCAgLyogLSAqLykgJiYgbGVmdENoYXJDb2RlID09PSByaWdodENoYXJDb2RlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyUGFydEVTNShsZWZ0Q2hhckNvZGUpICYmIGVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJQYXJ0RVM1KHJpZ2h0Q2hhckNvZGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9FbXB0eVNwYWNlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudGhlc2l6ZShyZXN1bHQsIFByZWNlZGVuY2UuVW5hcnksIHByZWNlZGVuY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIFlpZWxkRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICAgICAgaWYgKGV4cHIuZGVsZWdhdGUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAneWllbGQqJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJ3lpZWxkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleHByLmFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmFyZ3VtZW50LCBQcmVjZWRlbmNlLllpZWxkLCBFX1RUVClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudGhlc2l6ZShyZXN1bHQsIFByZWNlZGVuY2UuWWllbGQsIHByZWNlZGVuY2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIEF3YWl0RXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gam9pbihcbiAgICAgICAgICAgICAgICBleHByLmFsbCA/ICdhd2FpdConIDogJ2F3YWl0JyxcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmFyZ3VtZW50LCBQcmVjZWRlbmNlLkF3YWl0LCBFX1RUVClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKHJlc3VsdCwgUHJlY2VkZW5jZS5Bd2FpdCwgcHJlY2VkZW5jZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICBpZiAoZXhwci5wcmVmaXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50aGVzaXplKFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5hcmd1bWVudCwgUHJlY2VkZW5jZS5VbmFyeSwgRV9UVFQpXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIFByZWNlZGVuY2UuVW5hcnksXG4gICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudGhlc2l6ZShcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuYXJndW1lbnQsIFByZWNlZGVuY2UuUG9zdGZpeCwgRV9UVFQpLFxuICAgICAgICAgICAgICAgICAgICBleHByLm9wZXJhdG9yXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBQcmVjZWRlbmNlLlBvc3RmaXgsXG4gICAgICAgICAgICAgICAgcHJlY2VkZW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcblxuICAgICAgICBGdW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUFzeW5jUHJlZml4KGV4cHIsIHRydWUpLFxuICAgICAgICAgICAgICAgICdmdW5jdGlvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoZXhwci5pZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlbmVyYXRlU3RhclN1ZmZpeChleHByKSB8fCBub0VtcHR5U3BhY2UoKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ2VuZXJhdGVJZGVudGlmaWVyKGV4cHIuaWQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ2VuZXJhdGVTdGFyU3VmZml4KGV4cHIpIHx8IHNwYWNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVGdW5jdGlvbkJvZHkoZXhwcikpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBBcnJheVBhdHRlcm46IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQXJyYXlFeHByZXNzaW9uKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzLCB0cnVlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncywgaXNQYXR0ZXJuKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBtdWx0aWxpbmUsIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgaWYgKCFleHByLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW10nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbXVsdGlsaW5lID0gaXNQYXR0ZXJuID8gZmFsc2UgOiBleHByLmVsZW1lbnRzLmxlbmd0aCA+IDE7XG4gICAgICAgICAgICByZXN1bHQgPSBbJ1snLCBtdWx0aWxpbmUgPyBuZXdsaW5lIDogJyddO1xuICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoaW5kZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGksIGl6O1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gZXhwci5lbGVtZW50cy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXhwci5lbGVtZW50c1tpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG11bHRpbGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGluZGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSArIDEgPT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJywnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG11bHRpbGluZSA/IGluZGVudCA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuZWxlbWVudHNbaV0sIFByZWNlZGVuY2UuQXNzaWdubWVudCwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBpeikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJywnICsgKG11bHRpbGluZSA/IG5ld2xpbmUgOiBzcGFjZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobXVsdGlsaW5lICYmICFlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2gobXVsdGlsaW5lID8gYmFzZSA6ICcnKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCddJyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIFJlc3RFbGVtZW50OiBmdW5jdGlvbihleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuICcuLi4nICsgdGhpcy5nZW5lcmF0ZVBhdHRlcm4oZXhwci5hcmd1bWVudCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGZyYWdtZW50O1xuICAgICAgICAgICAgcmVzdWx0ID0gWydjbGFzcyddO1xuICAgICAgICAgICAgaWYgKGV4cHIuaWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5pZCwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleHByLnN1cGVyQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGpvaW4oJ2V4dGVuZHMnLCB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLnN1cGVyQ2xhc3MsIFByZWNlZGVuY2UuQXNzaWdubWVudCwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgZnJhZ21lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goc3BhY2UpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5nZW5lcmF0ZVN0YXRlbWVudChleHByLmJvZHksIFNfVEZGVCkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBNZXRob2REZWZpbml0aW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGZyYWdtZW50O1xuICAgICAgICAgICAgaWYgKGV4cHJbJ3N0YXRpYyddKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gWydzdGF0aWMnICsgc3BhY2VdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleHByLmtpbmQgPT09ICdnZXQnIHx8IGV4cHIua2luZCA9PT0gJ3NldCcpIHtcbiAgICAgICAgICAgICAgICBmcmFnbWVudCA9IFtcbiAgICAgICAgICAgICAgICAgICAgam9pbihleHByLmtpbmQsIHRoaXMuZ2VuZXJhdGVQcm9wZXJ0eUtleShleHByLmtleSwgZXhwci5jb21wdXRlZCwgZXhwci52YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRnVuY3Rpb25Cb2R5KGV4cHIudmFsdWUpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBbXG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTWV0aG9kUHJlZml4KGV4cHIpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUHJvcGVydHlLZXkoZXhwci5rZXksIGV4cHIuY29tcHV0ZWQsIGV4cHIudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRnVuY3Rpb25Cb2R5KGV4cHIudmFsdWUpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBqb2luKHJlc3VsdCwgZnJhZ21lbnQpO1xuICAgICAgICB9LFxuXG4gICAgICAgIFByb3BlcnR5OiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIGlmIChleHByLmtpbmQgPT09ICdnZXQnIHx8IGV4cHIua2luZCA9PT0gJ3NldCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBleHByLmtpbmQsIG5vRW1wdHlTcGFjZSgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUHJvcGVydHlLZXkoZXhwci5rZXksIGV4cHIuY29tcHV0ZWQsIGV4cHIudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRnVuY3Rpb25Cb2R5KGV4cHIudmFsdWUpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4cHIuc2hvcnRoYW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVQcm9wZXJ0eUtleShleHByLmtleSwgZXhwci5jb21wdXRlZCwgZXhwci52YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleHByLm1ldGhvZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTWV0aG9kUHJlZml4KGV4cHIpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUHJvcGVydHlLZXkoZXhwci5rZXksIGV4cHIuY29tcHV0ZWQsIGV4cHIudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRnVuY3Rpb25Cb2R5KGV4cHIudmFsdWUpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUHJvcGVydHlLZXkoZXhwci5rZXksIGV4cHIuY29tcHV0ZWQsIGV4cHIudmFsdWUpLFxuICAgICAgICAgICAgICAgICc6JyArIHNwYWNlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIudmFsdWUsIFByZWNlZGVuY2UuQXNzaWdubWVudCwgRV9UVFQpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIE9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIG11bHRpbGluZSwgcmVzdWx0LCBmcmFnbWVudCwgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIGlmICghZXhwci5wcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAne30nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbXVsdGlsaW5lID0gZXhwci5wcm9wZXJ0aWVzLmxlbmd0aCA+IDE7XG5cbiAgICAgICAgICAgIHdpdGhJbmRlbnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gdGhhdC5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5wcm9wZXJ0aWVzWzBdLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFtdWx0aWxpbmUpIHtcbiAgICAgICAgICAgICAgICAvLyBpc3N1ZXMgNFxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCB0cmFuc2Zvcm0gZnJvbVxuICAgICAgICAgICAgICAgIC8vICAgZGVqYXZ1LkNsYXNzLmRlY2xhcmUoe1xuICAgICAgICAgICAgICAgIC8vICAgICAgIG1ldGhvZDI6IGZ1bmN0aW9uICgpIHt9XG4gICAgICAgICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAgICAgICAvLyB0b1xuICAgICAgICAgICAgICAgIC8vICAgZGVqYXZ1LkNsYXNzLmRlY2xhcmUoe21ldGhvZDI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICB9fSk7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNMaW5lVGVybWluYXRvcih0b1NvdXJjZU5vZGVXaGVuTmVlZGVkKGZyYWdtZW50KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyAneycsIHNwYWNlLCBmcmFnbWVudCwgc3BhY2UsICd9JyBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoaW5kZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGksIGl6O1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFsgJ3snLCBuZXdsaW5lLCBpbmRlbnQsIGZyYWdtZW50IF07XG5cbiAgICAgICAgICAgICAgICBpZiAobXVsdGlsaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyArIG5ld2xpbmUpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxLCBpeiA9IGV4cHIucHJvcGVydGllcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpbmRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhhdC5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5wcm9wZXJ0aWVzW2ldLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgaXopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCgnLCcgKyBuZXdsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIWVuZHNXaXRoTGluZVRlcm1pbmF0b3IodG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQpLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3bGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChiYXNlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCd9Jyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIEFzc2lnbm1lbnRQYXR0ZXJuOiBmdW5jdGlvbihleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVBc3NpZ25tZW50KGV4cHIubGVmdCwgZXhwci5yaWdodCwgJz0nLCBwcmVjZWRlbmNlLCBmbGFncyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgT2JqZWN0UGF0dGVybjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBpLCBpeiwgbXVsdGlsaW5lLCBwcm9wZXJ0eSwgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICBpZiAoIWV4cHIucHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3t9JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbXVsdGlsaW5lID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZXhwci5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gZXhwci5wcm9wZXJ0aWVzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS52YWx1ZS50eXBlICE9PSBTeW50YXguSWRlbnRpZmllcikge1xuICAgICAgICAgICAgICAgICAgICBtdWx0aWxpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IGV4cHIucHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eS5zaG9ydGhhbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpbGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IFsneycsIG11bHRpbGluZSA/IG5ld2xpbmUgOiAnJyBdO1xuXG4gICAgICAgICAgICB3aXRoSW5kZW50KGZ1bmN0aW9uIChpbmRlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgaSwgaXo7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChtdWx0aWxpbmUgPyBpbmRlbnQgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoYXQuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIucHJvcGVydGllc1tpXSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgaXopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKCcsJyArIChtdWx0aWxpbmUgPyBuZXdsaW5lIDogc3BhY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAobXVsdGlsaW5lICYmICFlbmRzV2l0aExpbmVUZXJtaW5hdG9yKHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld2xpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2gobXVsdGlsaW5lID8gYmFzZSA6ICcnKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCd9Jyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIFRoaXNFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiAndGhpcyc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgU3VwZXI6IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuICdzdXBlcic7XG4gICAgICAgIH0sXG5cbiAgICAgICAgSWRlbnRpZmllcjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVJZGVudGlmaWVyKGV4cHIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlSWRlbnRpZmllcihleHByLmlkIHx8IGV4cHIubG9jYWwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gWycqJ107XG4gICAgICAgICAgICB2YXIgaWQgPSBleHByLmlkIHx8IGV4cHIubG9jYWw7XG4gICAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzcGFjZSArICdhcycgKyBub0VtcHR5U3BhY2UoKSArIGdlbmVyYXRlSWRlbnRpZmllcihpZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBJbXBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIGltcG9ydGVkID0gZXhwci5pbXBvcnRlZDtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbIGltcG9ydGVkLm5hbWUgXTtcbiAgICAgICAgICAgIHZhciBsb2NhbCA9IGV4cHIubG9jYWw7XG4gICAgICAgICAgICBpZiAobG9jYWwgJiYgbG9jYWwubmFtZSAhPT0gaW1wb3J0ZWQubmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vRW1wdHlTcGFjZSgpICsgJ2FzJyArIG5vRW1wdHlTcGFjZSgpICsgZ2VuZXJhdGVJZGVudGlmaWVyKGxvY2FsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIEV4cG9ydFNwZWNpZmllcjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWwgPSBleHByLmxvY2FsO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFsgbG9jYWwubmFtZSBdO1xuICAgICAgICAgICAgdmFyIGV4cG9ydGVkID0gZXhwci5leHBvcnRlZDtcbiAgICAgICAgICAgIGlmIChleHBvcnRlZCAmJiBleHBvcnRlZC5uYW1lICE9PSBsb2NhbC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9FbXB0eVNwYWNlKCkgKyAnYXMnICsgbm9FbXB0eVNwYWNlKCkgKyBnZW5lcmF0ZUlkZW50aWZpZXIoZXhwb3J0ZWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgTGl0ZXJhbDogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgcmF3O1xuICAgICAgICAgICAgaWYgKGV4cHIuaGFzT3duUHJvcGVydHkoJ3JhdycpICYmIHBhcnNlICYmIGV4dHJhLnJhdykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJhdyA9IHBhcnNlKGV4cHIucmF3KS5ib2R5WzBdLmV4cHJlc3Npb247XG4gICAgICAgICAgICAgICAgICAgIGlmIChyYXcudHlwZSA9PT0gU3ludGF4LkxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYXcudmFsdWUgPT09IGV4cHIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwci5yYXc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdCB1c2UgcmF3IHByb3BlcnR5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXhwci52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXhwci52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXNjYXBlU3RyaW5nKGV4cHIudmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4cHIudmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlTnVtYmVyKGV4cHIudmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4cHIudmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHByLnZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlUmVnRXhwKGV4cHIudmFsdWUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIEdlbmVyYXRvckV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ29tcHJlaGVuc2lvbkV4cHJlc3Npb24oZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpO1xuICAgICAgICB9LFxuXG4gICAgICAgIENvbXByZWhlbnNpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIC8vIEdlbmVyYXRvckV4cHJlc3Npb24gc2hvdWxkIGJlIHBhcmVudGhlc2l6ZWQgd2l0aCAoLi4uKSwgQ29tcHJlaGVuc2lvbkV4cHJlc3Npb24gd2l0aCBbLi4uXVxuICAgICAgICAgICAgLy8gRHVlIHRvIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4MzQ2OCBwb3NpdGlvbiBvZiBleHByLmJvZHkgY2FuIGRpZmZlciBpbiBTcGlkZXJtb25rZXkgYW5kIEVTNlxuXG4gICAgICAgICAgICB2YXIgcmVzdWx0LCBpLCBpeiwgZnJhZ21lbnQsIHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgcmVzdWx0ID0gKGV4cHIudHlwZSA9PT0gU3ludGF4LkdlbmVyYXRvckV4cHJlc3Npb24pID8gWycoJ10gOiBbJ1snXTtcblxuICAgICAgICAgICAgaWYgKGV4dHJhLm1vei5jb21wcmVoZW5zaW9uRXhwcmVzc2lvblN0YXJ0c1dpdGhBc3NpZ25tZW50KSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmJvZHksIFByZWNlZGVuY2UuQXNzaWdubWVudCwgRV9UVFQpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZyYWdtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4cHIuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgd2l0aEluZGVudChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gZXhwci5ibG9ja3MubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSB0aGF0LmdlbmVyYXRlRXhwcmVzc2lvbihleHByLmJsb2Nrc1tpXSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwIHx8IGV4dHJhLm1vei5jb21wcmVoZW5zaW9uRXhwcmVzc2lvblN0YXJ0c1dpdGhBc3NpZ25tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gam9pbihyZXN1bHQsIGZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleHByLmZpbHRlcikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpvaW4ocmVzdWx0LCAnaWYnICsgc3BhY2UpO1xuICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5maWx0ZXIsIFByZWNlZGVuY2UuU2VxdWVuY2UsIEVfVFRUKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgWyAnKCcsIGZyYWdtZW50LCAnKScgXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZXh0cmEubW96LmNvbXByZWhlbnNpb25FeHByZXNzaW9uU3RhcnRzV2l0aEFzc2lnbm1lbnQpIHtcbiAgICAgICAgICAgICAgICBmcmFnbWVudCA9IHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuYm9keSwgUHJlY2VkZW5jZS5Bc3NpZ25tZW50LCBFX1RUVCk7XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBqb2luKHJlc3VsdCwgZnJhZ21lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQucHVzaCgoZXhwci50eXBlID09PSBTeW50YXguR2VuZXJhdG9yRXhwcmVzc2lvbikgPyAnKScgOiAnXScpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBDb21wcmVoZW5zaW9uQmxvY2s6IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgdmFyIGZyYWdtZW50O1xuICAgICAgICAgICAgaWYgKGV4cHIubGVmdC50eXBlID09PSBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gW1xuICAgICAgICAgICAgICAgICAgICBleHByLmxlZnQua2luZCwgbm9FbXB0eVNwYWNlKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVTdGF0ZW1lbnQoZXhwci5sZWZ0LmRlY2xhcmF0aW9uc1swXSwgU19GRkZGKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5sZWZ0LCBQcmVjZWRlbmNlLkNhbGwsIEVfVFRUKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnJhZ21lbnQgPSBqb2luKGZyYWdtZW50LCBleHByLm9mID8gJ29mJyA6ICdpbicpO1xuICAgICAgICAgICAgZnJhZ21lbnQgPSBqb2luKGZyYWdtZW50LCB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLnJpZ2h0LCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gWyAnZm9yJyArIHNwYWNlICsgJygnLCBmcmFnbWVudCwgJyknIF07XG4gICAgICAgIH0sXG5cbiAgICAgICAgU3ByZWFkRWxlbWVudDogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICcuLi4nLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIuYXJndW1lbnQsIFByZWNlZGVuY2UuQXNzaWdubWVudCwgRV9UVFQpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9LFxuXG4gICAgICAgIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICB2YXIgaXRlbUZsYWdzID0gRV9UVEY7XG4gICAgICAgICAgICBpZiAoIShmbGFncyAmIEZfQUxMT1dfQ0FMTCkpIHtcbiAgICAgICAgICAgICAgICBpdGVtRmxhZ3MgPSBFX1RGRjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci50YWcsIFByZWNlZGVuY2UuQ2FsbCwgaXRlbUZsYWdzKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlRXhwcmVzc2lvbihleHByLnF1YXNpLCBQcmVjZWRlbmNlLlByaW1hcnksIEVfRkZUKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnRoZXNpemUocmVzdWx0LCBQcmVjZWRlbmNlLlRhZ2dlZFRlbXBsYXRlLCBwcmVjZWRlbmNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBUZW1wbGF0ZUVsZW1lbnQ6IGZ1bmN0aW9uIChleHByLCBwcmVjZWRlbmNlLCBmbGFncykge1xuICAgICAgICAgICAgLy8gRG9uJ3QgdXNlIFwiY29va2VkXCIuIFNpbmNlIHRhZ2dlZCB0ZW1wbGF0ZSBjYW4gdXNlIHJhdyB0ZW1wbGF0ZVxuICAgICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24uIFNvIGlmIHdlIGRvIHNvLCBpdCBicmVha3MgdGhlIHNjcmlwdCBzZW1hbnRpY3MuXG4gICAgICAgICAgICByZXR1cm4gZXhwci52YWx1ZS5yYXc7XG4gICAgICAgIH0sXG5cbiAgICAgICAgVGVtcGxhdGVMaXRlcmFsOiBmdW5jdGlvbiAoZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQsIGksIGl6O1xuICAgICAgICAgICAgcmVzdWx0ID0gWyAnYCcgXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gZXhwci5xdWFzaXMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2VuZXJhdGVFeHByZXNzaW9uKGV4cHIucXVhc2lzW2ldLCBQcmVjZWRlbmNlLlByaW1hcnksIEVfVFRUKSk7XG4gICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgaXopIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goJyR7JyArIHNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5nZW5lcmF0ZUV4cHJlc3Npb24oZXhwci5leHByZXNzaW9uc1tpXSwgUHJlY2VkZW5jZS5TZXF1ZW5jZSwgRV9UVFQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc3BhY2UgKyAnfScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCdgJyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIE1vZHVsZVNwZWNpZmllcjogZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5MaXRlcmFsKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIG1lcmdlKENvZGVHZW5lcmF0b3IucHJvdG90eXBlLCBDb2RlR2VuZXJhdG9yLkV4cHJlc3Npb24pO1xuXG4gICAgQ29kZUdlbmVyYXRvci5wcm90b3R5cGUuZ2VuZXJhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKGV4cHIsIHByZWNlZGVuY2UsIGZsYWdzKSB7XG4gICAgICAgIHZhciByZXN1bHQsIHR5cGU7XG5cbiAgICAgICAgdHlwZSA9IGV4cHIudHlwZSB8fCBTeW50YXguUHJvcGVydHk7XG5cbiAgICAgICAgaWYgKGV4dHJhLnZlcmJhdGltICYmIGV4cHIuaGFzT3duUHJvcGVydHkoZXh0cmEudmVyYmF0aW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVWZXJiYXRpbShleHByLCBwcmVjZWRlbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHRoaXNbdHlwZV0oZXhwciwgcHJlY2VkZW5jZSwgZmxhZ3MpO1xuXG5cbiAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGFkZENvbW1lbnRzKGV4cHIsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0LCBleHByKTtcbiAgICB9O1xuXG4gICAgQ29kZUdlbmVyYXRvci5wcm90b3R5cGUuZ2VuZXJhdGVTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoc3RtdCwgZmxhZ3MpIHtcbiAgICAgICAgdmFyIHJlc3VsdCxcbiAgICAgICAgICAgIGZyYWdtZW50O1xuXG4gICAgICAgIHJlc3VsdCA9IHRoaXNbc3RtdC50eXBlXShzdG10LCBmbGFncyk7XG5cbiAgICAgICAgLy8gQXR0YWNoIGNvbW1lbnRzXG5cbiAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGFkZENvbW1lbnRzKHN0bXQsIHJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICBmcmFnbWVudCA9IHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS50b1N0cmluZygpO1xuICAgICAgICBpZiAoc3RtdC50eXBlID09PSBTeW50YXguUHJvZ3JhbSAmJiAhc2FmZUNvbmNhdGVuYXRpb24gJiYgbmV3bGluZSA9PT0gJycgJiYgIGZyYWdtZW50LmNoYXJBdChmcmFnbWVudC5sZW5ndGggLSAxKSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHNvdXJjZU1hcCA/IHRvU291cmNlTm9kZVdoZW5OZWVkZWQocmVzdWx0KS5yZXBsYWNlUmlnaHQoL1xccyskLywgJycpIDogZnJhZ21lbnQucmVwbGFjZSgvXFxzKyQvLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG9Tb3VyY2VOb2RlV2hlbk5lZWRlZChyZXN1bHQsIHN0bXQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZUludGVybmFsKG5vZGUpIHtcbiAgICAgICAgdmFyIGNvZGVnZW47XG5cbiAgICAgICAgY29kZWdlbiA9IG5ldyBDb2RlR2VuZXJhdG9yKCk7XG4gICAgICAgIGlmIChpc1N0YXRlbWVudChub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvZGVnZW4uZ2VuZXJhdGVTdGF0ZW1lbnQobm9kZSwgU19URkZGKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0V4cHJlc3Npb24obm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlZ2VuLmdlbmVyYXRlRXhwcmVzc2lvbihub2RlLCBQcmVjZWRlbmNlLlNlcXVlbmNlLCBFX1RUVCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9kZSB0eXBlOiAnICsgbm9kZS50eXBlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZShub2RlLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCksIHJlc3VsdCwgcGFpcjtcblxuICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBPYnNvbGV0ZSBvcHRpb25zXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gICBgb3B0aW9ucy5pbmRlbnRgXG4gICAgICAgICAgICAvLyAgIGBvcHRpb25zLmJhc2VgXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gSW5zdGVhZCBvZiB0aGVtLCB3ZSBjYW4gdXNlIGBvcHRpb24uZm9ybWF0LmluZGVudGAuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuaW5kZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRPcHRpb25zLmZvcm1hdC5pbmRlbnQuc3R5bGUgPSBvcHRpb25zLmluZGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5iYXNlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRPcHRpb25zLmZvcm1hdC5pbmRlbnQuYmFzZSA9IG9wdGlvbnMuYmFzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMgPSB1cGRhdGVEZWVwbHkoZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaW5kZW50ID0gb3B0aW9ucy5mb3JtYXQuaW5kZW50LnN0eWxlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgYmFzZSA9IG9wdGlvbnMuYmFzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYmFzZSA9IHN0cmluZ1JlcGVhdChpbmRlbnQsIG9wdGlvbnMuZm9ybWF0LmluZGVudC5iYXNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICAgICAgICAgIGluZGVudCA9IG9wdGlvbnMuZm9ybWF0LmluZGVudC5zdHlsZTtcbiAgICAgICAgICAgIGJhc2UgPSBzdHJpbmdSZXBlYXQoaW5kZW50LCBvcHRpb25zLmZvcm1hdC5pbmRlbnQuYmFzZSk7XG4gICAgICAgIH1cbiAgICAgICAganNvbiA9IG9wdGlvbnMuZm9ybWF0Lmpzb247XG4gICAgICAgIHJlbnVtYmVyID0gb3B0aW9ucy5mb3JtYXQucmVudW1iZXI7XG4gICAgICAgIGhleGFkZWNpbWFsID0ganNvbiA/IGZhbHNlIDogb3B0aW9ucy5mb3JtYXQuaGV4YWRlY2ltYWw7XG4gICAgICAgIHF1b3RlcyA9IGpzb24gPyAnZG91YmxlJyA6IG9wdGlvbnMuZm9ybWF0LnF1b3RlcztcbiAgICAgICAgZXNjYXBlbGVzcyA9IG9wdGlvbnMuZm9ybWF0LmVzY2FwZWxlc3M7XG4gICAgICAgIG5ld2xpbmUgPSBvcHRpb25zLmZvcm1hdC5uZXdsaW5lO1xuICAgICAgICBzcGFjZSA9IG9wdGlvbnMuZm9ybWF0LnNwYWNlO1xuICAgICAgICBpZiAob3B0aW9ucy5mb3JtYXQuY29tcGFjdCkge1xuICAgICAgICAgICAgbmV3bGluZSA9IHNwYWNlID0gaW5kZW50ID0gYmFzZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudGhlc2VzID0gb3B0aW9ucy5mb3JtYXQucGFyZW50aGVzZXM7XG4gICAgICAgIHNlbWljb2xvbnMgPSBvcHRpb25zLmZvcm1hdC5zZW1pY29sb25zO1xuICAgICAgICBzYWZlQ29uY2F0ZW5hdGlvbiA9IG9wdGlvbnMuZm9ybWF0LnNhZmVDb25jYXRlbmF0aW9uO1xuICAgICAgICBkaXJlY3RpdmUgPSBvcHRpb25zLmRpcmVjdGl2ZTtcbiAgICAgICAgcGFyc2UgPSBqc29uID8gbnVsbCA6IG9wdGlvbnMucGFyc2U7XG4gICAgICAgIHNvdXJjZU1hcCA9IG9wdGlvbnMuc291cmNlTWFwO1xuICAgICAgICBzb3VyY2VDb2RlID0gb3B0aW9ucy5zb3VyY2VDb2RlO1xuICAgICAgICBwcmVzZXJ2ZUJsYW5rTGluZXMgPSBvcHRpb25zLmZvcm1hdC5wcmVzZXJ2ZUJsYW5rTGluZXMgJiYgc291cmNlQ29kZSAhPT0gbnVsbDtcbiAgICAgICAgZXh0cmEgPSBvcHRpb25zO1xuXG4gICAgICAgIGlmIChzb3VyY2VNYXApIHtcbiAgICAgICAgICAgIGlmICghZXhwb3J0cy5icm93c2VyKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXNzdW1lIGVudmlyb25tZW50IGlzIG5vZGUuanNcbiAgICAgICAgICAgICAgICAvLyBBbmQgcHJldmVudCBmcm9tIGluY2x1ZGluZyBzb3VyY2UtbWFwIGJ5IGJyb3dzZXJpZnlcbiAgICAgICAgICAgICAgICBTb3VyY2VOb2RlID0gcmVxdWlyZSgnc291cmNlLW1hcCcpLlNvdXJjZU5vZGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFNvdXJjZU5vZGUgPSBnbG9iYWwuc291cmNlTWFwLlNvdXJjZU5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQgPSBnZW5lcmF0ZUludGVybmFsKG5vZGUpO1xuXG4gICAgICAgIGlmICghc291cmNlTWFwKSB7XG4gICAgICAgICAgICBwYWlyID0ge2NvZGU6IHJlc3VsdC50b1N0cmluZygpLCBtYXA6IG51bGx9O1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc291cmNlTWFwV2l0aENvZGUgPyBwYWlyIDogcGFpci5jb2RlO1xuICAgICAgICB9XG5cblxuICAgICAgICBwYWlyID0gcmVzdWx0LnRvU3RyaW5nV2l0aFNvdXJjZU1hcCh7XG4gICAgICAgICAgICBmaWxlOiBvcHRpb25zLmZpbGUsXG4gICAgICAgICAgICBzb3VyY2VSb290OiBvcHRpb25zLnNvdXJjZU1hcFJvb3RcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc291cmNlQ29udGVudCkge1xuICAgICAgICAgICAgcGFpci5tYXAuc2V0U291cmNlQ29udGVudChvcHRpb25zLnNvdXJjZU1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zb3VyY2VDb250ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnNvdXJjZU1hcFdpdGhDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFpcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYWlyLm1hcC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIEZPUk1BVF9NSU5JRlkgPSB7XG4gICAgICAgIGluZGVudDoge1xuICAgICAgICAgICAgc3R5bGU6ICcnLFxuICAgICAgICAgICAgYmFzZTogMFxuICAgICAgICB9LFxuICAgICAgICByZW51bWJlcjogdHJ1ZSxcbiAgICAgICAgaGV4YWRlY2ltYWw6IHRydWUsXG4gICAgICAgIHF1b3RlczogJ2F1dG8nLFxuICAgICAgICBlc2NhcGVsZXNzOiB0cnVlLFxuICAgICAgICBjb21wYWN0OiB0cnVlLFxuICAgICAgICBwYXJlbnRoZXNlczogZmFsc2UsXG4gICAgICAgIHNlbWljb2xvbnM6IGZhbHNlXG4gICAgfTtcblxuICAgIEZPUk1BVF9ERUZBVUxUUyA9IGdldERlZmF1bHRPcHRpb25zKCkuZm9ybWF0O1xuXG4gICAgZXhwb3J0cy52ZXJzaW9uID0gcmVxdWlyZSgnLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuICAgIGV4cG9ydHMuZ2VuZXJhdGUgPSBnZW5lcmF0ZTtcbiAgICBleHBvcnRzLmF0dGFjaENvbW1lbnRzID0gZXN0cmF2ZXJzZS5hdHRhY2hDb21tZW50cztcbiAgICBleHBvcnRzLlByZWNlZGVuY2UgPSB1cGRhdGVEZWVwbHkoe30sIFByZWNlZGVuY2UpO1xuICAgIGV4cG9ydHMuYnJvd3NlciA9IGZhbHNlO1xuICAgIGV4cG9ydHMuRk9STUFUX01JTklGWSA9IEZPUk1BVF9NSU5JRlk7XG4gICAgZXhwb3J0cy5GT1JNQVRfREVGQVVMVFMgPSBGT1JNQVRfREVGQVVMVFM7XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRS50eHQgb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbmV4cG9ydHMuU291cmNlTWFwR2VuZXJhdG9yID0gcmVxdWlyZSgnLi9zb3VyY2UtbWFwL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xuZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IHJlcXVpcmUoJy4vc291cmNlLW1hcC9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3VtZXI7XG5leHBvcnRzLlNvdXJjZU5vZGUgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAvc291cmNlLW5vZGUnKS5Tb3VyY2VOb2RlO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpO1xufVxuZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuICB2YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG4gIC8qKlxuICAgKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAgICogbWVtYmVyIGlzIE8oMSksIHRlc3RpbmcgZm9yIG1lbWJlcnNoaXAgaXMgTygxKSwgYW5kIGZpbmRpbmcgdGhlIGluZGV4IG9mIGFuXG4gICAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAgICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICAgKi9cbiAgZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gICAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgICB0aGlzLl9zZXQgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAgICovXG4gIEFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICAgIH1cbiAgICByZXR1cm4gc2V0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAgICpcbiAgICogQHBhcmFtIFN0cmluZyBhU3RyXG4gICAqL1xuICBBcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB2YXIgaXNEdXBsaWNhdGUgPSB0aGlzLmhhcyhhU3RyKTtcbiAgICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICAgIGlmICghaXNEdXBsaWNhdGUgfHwgYUFsbG93RHVwbGljYXRlcykge1xuICAgICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgICB9XG4gICAgaWYgKCFpc0R1cGxpY2F0ZSkge1xuICAgICAgdGhpcy5fc2V0W3V0aWwudG9TZXRTdHJpbmcoYVN0cildID0gaWR4O1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAgICpcbiAgICogQHBhcmFtIFN0cmluZyBhU3RyXG4gICAqL1xuICBBcnJheVNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gQXJyYXlTZXRfaGFzKGFTdHIpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX3NldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwudG9TZXRTdHJpbmcoYVN0cikpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBXaGF0IGlzIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGluIHRoZSBhcnJheT9cbiAgICpcbiAgICogQHBhcmFtIFN0cmluZyBhU3RyXG4gICAqL1xuICBBcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICAgIGlmICh0aGlzLmhhcyhhU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFt1dGlsLnRvU2V0U3RyaW5nKGFTdHIpXTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU3RyICsgJ1wiIGlzIG5vdCBpbiB0aGUgc2V0LicpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBXaGF0IGlzIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleD9cbiAgICpcbiAgICogQHBhcmFtIE51bWJlciBhSWR4XG4gICAqL1xuICBBcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gICAgaWYgKGFJZHggPj0gMCAmJiBhSWR4IDwgdGhpcy5fYXJyYXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYXJyYXlbYUlkeF07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignTm8gZWxlbWVudCBpbmRleGVkIGJ5ICcgKyBhSWR4KTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzZXQgKHdoaWNoIGhhcyB0aGUgcHJvcGVyIGluZGljZXNcbiAgICogaW5kaWNhdGVkIGJ5IGluZGV4T2YpLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGludGVybmFsIGFycmF5IHVzZWRcbiAgICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAgICovXG4gIEFycmF5U2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfdG9BcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbiAgfTtcblxuICBleHBvcnRzLkFycmF5U2V0ID0gQXJyYXlTZXQ7XG5cbn0pO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqXG4gKiBCYXNlZCBvbiB0aGUgQmFzZSA2NCBWTFEgaW1wbGVtZW50YXRpb24gaW4gQ2xvc3VyZSBDb21waWxlcjpcbiAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxlci9zb3VyY2UvYnJvd3NlL3RydW5rL3NyYy9jb20vZ29vZ2xlL2RlYnVnZ2luZy9zb3VyY2VtYXAvQmFzZTY0VkxRLmphdmFcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSBUaGUgQ2xvc3VyZSBDb21waWxlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4gKiBtZXQ6XG4gKlxuICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXG4gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcbiAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZFxuICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbiAqIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpO1xufVxuZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuICB2YXIgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKTtcblxuICAvLyBBIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFyaWFibGVcbiAgLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4gIC8vIHRoZSBuZXh0IGZvdXIgYml0cyBhcmUgdGhlIGFjdHVhbCB2YWx1ZSwgYW5kIHRoZSA2dGggYml0IGlzIHRoZVxuICAvLyBjb250aW51YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlXG4gIC8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuICAvL1xuICAvLyAgIENvbnRpbnVhdGlvblxuICAvLyAgIHwgICAgU2lnblxuICAvLyAgIHwgICAgfFxuICAvLyAgIFYgICAgVlxuICAvLyAgIDEwMTAxMVxuXG4gIHZhciBWTFFfQkFTRV9TSElGVCA9IDU7XG5cbiAgLy8gYmluYXJ5OiAxMDAwMDBcbiAgdmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuICAvLyBiaW5hcnk6IDAxMTExMVxuICB2YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTtcblxuICAvLyBiaW5hcnk6IDEwMDAwMFxuICB2YXIgVkxRX0NPTlRJTlVBVElPTl9CSVQgPSBWTFFfQkFTRTtcblxuICAvKipcbiAgICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gICAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICAgKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJpbmFyeSlcbiAgICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAgICovXG4gIGZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkge1xuICAgIHJldHVybiBhVmFsdWUgPCAwXG4gICAgICA/ICgoLWFWYWx1ZSkgPDwgMSkgKyAxXG4gICAgICA6IChhVmFsdWUgPDwgMSkgKyAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRvIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICAgKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAgICogICAyICgxMCBiaW5hcnkpIGJlY29tZXMgMSwgMyAoMTEgYmluYXJ5KSBiZWNvbWVzIC0xXG4gICAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5KSBiZWNvbWVzIC0yXG4gICAqL1xuICBmdW5jdGlvbiBmcm9tVkxRU2lnbmVkKGFWYWx1ZSkge1xuICAgIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxO1xuICAgIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gICAgcmV0dXJuIGlzTmVnYXRpdmVcbiAgICAgID8gLXNoaWZ0ZWRcbiAgICAgIDogc2hpZnRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICAgKi9cbiAgZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkge1xuICAgIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgICB2YXIgZGlnaXQ7XG5cbiAgICB2YXIgdmxxID0gdG9WTFFTaWduZWQoYVZhbHVlKTtcblxuICAgIGRvIHtcbiAgICAgIGRpZ2l0ID0gdmxxICYgVkxRX0JBU0VfTUFTSztcbiAgICAgIHZscSA+Pj49IFZMUV9CQVNFX1NISUZUO1xuICAgICAgaWYgKHZscSA+IDApIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHN0aWxsIG1vcmUgZGlnaXRzIGluIHRoaXMgdmFsdWUsIHNvIHdlIG11c3QgbWFrZSBzdXJlIHRoZVxuICAgICAgICAvLyBjb250aW51YXRpb24gYml0IGlzIG1hcmtlZC5cbiAgICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgICB9XG4gICAgICBlbmNvZGVkICs9IGJhc2U2NC5lbmNvZGUoZGlnaXQpO1xuICAgIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gICAgcmV0dXJuIGVuY29kZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIERlY29kZXMgdGhlIG5leHQgYmFzZSA2NCBWTFEgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCByZXR1cm5zIHRoZVxuICAgKiB2YWx1ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB2aWEgdGhlIG91dCBwYXJhbWV0ZXIuXG4gICAqL1xuICBleHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9kZWNvZGUoYVN0ciwgYU91dFBhcmFtKSB7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICB2YXIgc2hpZnQgPSAwO1xuICAgIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKGkgPj0gc3RyTGVuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKTtcbiAgICAgIH1cbiAgICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJBdChpKyspKTtcbiAgICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJTlVBVElPTl9CSVQpO1xuICAgICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCArIChkaWdpdCA8PCBzaGlmdCk7XG4gICAgICBzaGlmdCArPSBWTFFfQkFTRV9TSElGVDtcbiAgICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gICAgYU91dFBhcmFtLnZhbHVlID0gZnJvbVZMUVNpZ25lZChyZXN1bHQpO1xuICAgIGFPdXRQYXJhbS5yZXN0ID0gYVN0ci5zbGljZShpKTtcbiAgfTtcblxufSk7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5pZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBkZWZpbmUgPSByZXF1aXJlKCdhbWRlZmluZScpKG1vZHVsZSwgcmVxdWlyZSk7XG59XG5kZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXG4gIHZhciBjaGFyVG9JbnRNYXAgPSB7fTtcbiAgdmFyIGludFRvQ2hhck1hcCA9IHt9O1xuXG4gICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuICAgIC5zcGxpdCgnJylcbiAgICAuZm9yRWFjaChmdW5jdGlvbiAoY2gsIGluZGV4KSB7XG4gICAgICBjaGFyVG9JbnRNYXBbY2hdID0gaW5kZXg7XG4gICAgICBpbnRUb0NoYXJNYXBbaW5kZXhdID0gY2g7XG4gICAgfSk7XG5cbiAgLyoqXG4gICAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gICAqL1xuICBleHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NF9lbmNvZGUoYU51bWJlcikge1xuICAgIGlmIChhTnVtYmVyIGluIGludFRvQ2hhck1hcCkge1xuICAgICAgcmV0dXJuIGludFRvQ2hhck1hcFthTnVtYmVyXTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBhTnVtYmVyKTtcbiAgfTtcblxuICAvKipcbiAgICogRGVjb2RlIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgdG8gYW4gaW50ZWdlci5cbiAgICovXG4gIGV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gYmFzZTY0X2RlY29kZShhQ2hhcikge1xuICAgIGlmIChhQ2hhciBpbiBjaGFyVG9JbnRNYXApIHtcbiAgICAgIHJldHVybiBjaGFyVG9JbnRNYXBbYUNoYXJdO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm90IGEgdmFsaWQgYmFzZSA2NCBkaWdpdDogXCIgKyBhQ2hhcik7XG4gIH07XG5cbn0pO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpO1xufVxuZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuICB2YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuICB2YXIgYmluYXJ5U2VhcmNoID0gcmVxdWlyZSgnLi9iaW5hcnktc2VhcmNoJyk7XG4gIHZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7XG4gIHZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbiAgdmFyIFNvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3VtZXI7XG5cbiAgLyoqXG4gICAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gICAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICAgKiBwb3NpdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAgICpcbiAgICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gICAqIGFscmVhZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1hcHMgaGF2ZSB0aGVcbiAgICogZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gICAqXG4gICAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICAgKiAgIC0gc291cmNlczogQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICAgKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICAgKiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAgICogICAtIHNvdXJjZXNDb250ZW50OiBPcHRpb25hbC4gQW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAgICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gICAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqXG4gICAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gICAqXG4gICAqICAgICB7XG4gICAqICAgICAgIHZlcnNpb24gOiAzLFxuICAgKiAgICAgICBmaWxlOiBcIm91dC5qc1wiLFxuICAgKiAgICAgICBzb3VyY2VSb290IDogXCJcIixcbiAgICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICAgKiAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAgICogICAgICAgbWFwcGluZ3M6IFwiQUEsQUI7O0FCQ0RFO1wiXG4gICAqICAgICB9XG4gICAqXG4gICAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0P3BsaT0xI1xuICAgKi9cbiAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gICAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gICAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgICB9XG5cbiAgICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgICB2YXIgc291cmNlcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTtcbiAgICAvLyBTYXNzIDMuMyBsZWF2ZXMgb3V0IHRoZSAnbmFtZXMnIGFycmF5LCBzbyB3ZSBkZXZpYXRlIGZyb20gdGhlIHNwZWMgKHdoaWNoXG4gICAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgICB2YXIgbmFtZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICduYW1lcycsIFtdKTtcbiAgICB2YXIgc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICAgIHZhciBtYXBwaW5ncyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7XG4gICAgdmFyIGZpbGUgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdmaWxlJywgbnVsbCk7XG5cbiAgICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgICAvLyBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIsIHNvIHdlIHVzZSBsb29zZSBlcXVhbGl0eSBjaGVja2luZyBoZXJlLlxuICAgIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICAgIH1cblxuICAgIC8vIFNvbWUgc291cmNlIG1hcHMgcHJvZHVjZSByZWxhdGl2ZSBzb3VyY2UgcGF0aHMgbGlrZSBcIi4vZm9vLmpzXCIgaW5zdGVhZCBvZlxuICAgIC8vIFwiZm9vLmpzXCIuICBOb3JtYWxpemUgdGhlc2UgZmlyc3Qgc28gdGhhdCBmdXR1cmUgY29tcGFyaXNvbnMgd2lsbCBzdWNjZWVkLlxuICAgIC8vIFNlZSBidWd6aWwubGEvMTA5MDc2OC5cbiAgICBzb3VyY2VzID0gc291cmNlcy5tYXAodXRpbC5ub3JtYWxpemUpO1xuXG4gICAgLy8gUGFzcyBgdHJ1ZWAgYmVsb3cgdG8gYWxsb3cgZHVwbGljYXRlIG5hbWVzIGFuZCBzb3VyY2VzLiBXaGlsZSBzb3VyY2UgbWFwc1xuICAgIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gICAgLy8gc29tZXRpbWVzIGdlbmVyYXRlcyBzb3VyY2UgbWFwcyB3aXRoIGR1cGxpY2F0ZXMgaW4gdGhlbS4gU2VlIEdpdGh1YiBpc3N1ZVxuICAgIC8vICM3MiBhbmQgYnVnemlsLmxhLzg4OTQ5Mi5cbiAgICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcywgdHJ1ZSk7XG4gICAgdGhpcy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShzb3VyY2VzLCB0cnVlKTtcblxuICAgIHRoaXMuc291cmNlUm9vdCA9IHNvdXJjZVJvb3Q7XG4gICAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICAgIHRoaXMuX21hcHBpbmdzID0gbWFwcGluZ3M7XG4gICAgdGhpcy5maWxlID0gZmlsZTtcbiAgfVxuXG4gIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGZyb20gYSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICAgKiAgICAgICAgVGhlIHNvdXJjZSBtYXAgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuICAgKiBAcmV0dXJucyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCkge1xuICAgICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgICBzbWMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX25hbWVzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgICBzbWMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fc291cmNlcy50b0FycmF5KCksIHRydWUpO1xuICAgICAgc21jLnNvdXJjZVJvb3QgPSBhU291cmNlTWFwLl9zb3VyY2VSb290O1xuICAgICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWMuc291cmNlUm9vdCk7XG4gICAgICBzbWMuZmlsZSA9IGFTb3VyY2VNYXAuX2ZpbGU7XG5cbiAgICAgIHNtYy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gYVNvdXJjZU1hcC5fbWFwcGluZ3MudG9BcnJheSgpLnNsaWNlKCk7XG4gICAgICBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gYVNvdXJjZU1hcC5fbWFwcGluZ3MudG9BcnJheSgpLnNsaWNlKClcbiAgICAgICAgLnNvcnQodXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG5cbiAgICAgIHJldHVybiBzbWM7XG4gICAgfTtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICAgKi9cbiAgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICAgKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAgICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAgICovXG4gIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgICB2YXIgZ2VuZXJhdGVkTGluZSA9IDE7XG4gICAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICAgIHZhciBzdHIgPSBhU3RyO1xuICAgICAgdmFyIHRlbXAgPSB7fTtcbiAgICAgIHZhciBtYXBwaW5nO1xuXG4gICAgICB3aGlsZSAoc3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHN0ci5jaGFyQXQoMCkgPT09ICc7Jykge1xuICAgICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMSk7XG4gICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0ci5jaGFyQXQoMCkgPT09ICcsJykge1xuICAgICAgICAgIHN0ciA9IHN0ci5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBtYXBwaW5nID0ge307XG4gICAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAgIC8vIEdlbmVyYXRlZCBjb2x1bW4uXG4gICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShzdHIsIHRlbXApO1xuICAgICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gKyB0ZW1wLnZhbHVlO1xuICAgICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgc3RyID0gdGVtcC5yZXN0O1xuXG4gICAgICAgICAgaWYgKHN0ci5sZW5ndGggPiAwICYmICF0aGlzLl9uZXh0Q2hhcklzTWFwcGluZ1NlcGFyYXRvcihzdHIpKSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBzb3VyY2UuXG4gICAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKHN0ciwgdGVtcCk7XG4gICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuYXQocHJldmlvdXNTb3VyY2UgKyB0ZW1wLnZhbHVlKTtcbiAgICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBzdHIgPSB0ZW1wLnJlc3Q7XG4gICAgICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9uZXh0Q2hhcklzTWFwcGluZ1NlcGFyYXRvcihzdHIpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UsIGJ1dCBubyBsaW5lIGFuZCBjb2x1bW4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT3JpZ2luYWwgbGluZS5cbiAgICAgICAgICAgIGJhc2U2NFZMUS5kZWNvZGUoc3RyLCB0ZW1wKTtcbiAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgcHJldmlvdXNPcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgICAgIC8vIExpbmVzIGFyZSBzdG9yZWQgMC1iYXNlZFxuICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcbiAgICAgICAgICAgIHN0ciA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAwIHx8IHRoaXMuX25leHRDaGFySXNNYXBwaW5nU2VwYXJhdG9yKHN0cikpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSBhbmQgbGluZSwgYnV0IG5vIGNvbHVtbicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBjb2x1bW4uXG4gICAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKHN0ciwgdGVtcCk7XG4gICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHRlbXAudmFsdWU7XG4gICAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcbiAgICAgICAgICAgIHN0ciA9IHRlbXAucmVzdDtcblxuICAgICAgICAgICAgaWYgKHN0ci5sZW5ndGggPiAwICYmICF0aGlzLl9uZXh0Q2hhcklzTWFwcGluZ1NlcGFyYXRvcihzdHIpKSB7XG4gICAgICAgICAgICAgIC8vIE9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgICAgIGJhc2U2NFZMUS5kZWNvZGUoc3RyLCB0ZW1wKTtcbiAgICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gdGhpcy5fbmFtZXMuYXQocHJldmlvdXNOYW1lICsgdGVtcC52YWx1ZSk7XG4gICAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgICBzdHIgPSB0ZW1wLnJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncy5zb3J0KHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zKTtcbiAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnNvcnQodXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gICAgfTtcblxuICAvKipcbiAgICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gICAqIHdlIGFyZSBzZWFyY2hpbmcgZm9yIGluIHRoZSBnaXZlbiBcImhheXN0YWNrXCIgb2YgbWFwcGluZ3MuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2ZpbmRNYXBwaW5nKGFOZWVkbGUsIGFNYXBwaW5ncywgYUxpbmVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb2x1bW5OYW1lLCBhQ29tcGFyYXRvcikge1xuICAgICAgLy8gVG8gcmV0dXJuIHRoZSBwb3NpdGlvbiB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgd2UgbXVzdCBmaXJzdCBmaW5kIHRoZVxuICAgICAgLy8gbWFwcGluZyBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB0aGVuIHJldHVybiB0aGUgb3Bwb3NpdGUgcG9zaXRpb24gaXRcbiAgICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgICAvLyBmaW5kIHRoZSBiZXN0IG1hcHBpbmcuXG5cbiAgICAgIGlmIChhTmVlZGxlW2FMaW5lTmFtZV0gPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FMaW5lTmFtZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb2x1bW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUNvbHVtbk5hbWVdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaC5zZWFyY2goYU5lZWRsZSwgYU1hcHBpbmdzLCBhQ29tcGFyYXRvcik7XG4gICAgfTtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgbGFzdCBjb2x1bW4gZm9yIGVhY2ggZ2VuZXJhdGVkIG1hcHBpbmcuIFRoZSBsYXN0IGNvbHVtbiBpc1xuICAgKiBpbmNsdXNpdmUuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnMgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAgIC8vIGNhbiBjb21lIHVwIHdpdGggYW4gb3B0aW1pc3RpYyBlc3RpbWF0ZSwgaG93ZXZlciwgYnkgYXNzdW1pbmcgdGhhdFxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgY29udGlndW91cyAoaS5lLiBnaXZlbiB0d28gY29uc2VjdXRpdmUgbWFwcGluZ3MsIHRoZVxuICAgICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBuZXh0TWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4ICsgMV07XG5cbiAgICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLSAxO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGxhc3QgbWFwcGluZyBmb3IgZWFjaCBsaW5lIHNwYW5zIHRoZSBlbnRpcmUgbGluZS5cbiAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gICAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAgICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gICAqXG4gICAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqXG4gICAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICAgKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICAgKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gICAqL1xuICBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgICB9O1xuXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhuZWVkbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZXJhdGVkTGluZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5lcmF0ZWRDb2x1bW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zKTtcblxuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ3NvdXJjZScsIG51bGwpO1xuICAgICAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiB0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnb3JpZ2luYWxDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIG5hbWU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICAgKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gICAqIGF2YWlsaWJsZS5cbiAgICovXG4gIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgYVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBhU291cmNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3NvdXJjZXMuaGFzKGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihhU291cmNlKV07XG4gICAgICB9XG5cbiAgICAgIHZhciB1cmw7XG4gICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGxcbiAgICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgICAvLyBYWFg6IGZpbGU6Ly8gVVJJcyBhbmQgYWJzb2x1dGUgcGF0aHMgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGZvclxuICAgICAgICAvLyBtYW55IHVzZXJzLiBXZSBjYW4gaGVscCB0aGVtIG91dCB3aGVuIHRoZXkgZXhwZWN0IGZpbGU6Ly8gVVJJcyB0b1xuICAgICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg1NTk3LlxuICAgICAgICB2YXIgZmlsZVVyaUFic1BhdGggPSBhU291cmNlLnJlcGxhY2UoL15maWxlOlxcL1xcLy8sIFwiXCIpO1xuICAgICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoZmlsZVVyaUFic1BhdGgpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGZpbGVVcmlBYnNQYXRoKV1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoIXVybC5wYXRoIHx8IHVybC5wYXRoID09IFwiL1wiKVxuICAgICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoXCIvXCIgKyBhU291cmNlKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgICAgLy8gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yLiBJbiB0aGF0IGNhc2UsIHdlXG4gICAgICAvLyBkb24ndCB3YW50IHRvIHRocm93IGlmIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSAtIHdlIGp1c3Qgd2FudCB0b1xuICAgICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICAgKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAgICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKlxuICAgKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICAgKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAgICovXG4gIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgICAgc291cmNlOiB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpLFxuICAgICAgICBvcmlnaW5hbExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKG5lZWRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG5cbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH07XG5cbiAgZXhwb3J0cy5CYXNpY1NvdXJjZU1hcENvbnN1bWVyID0gQmFzaWNTb3VyY2VNYXBDb25zdW1lcjtcblxufSk7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5pZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBkZWZpbmUgPSByZXF1aXJlKCdhbWRlZmluZScpKG1vZHVsZSwgcmVxdWlyZSk7XG59XG5kZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAgICpcbiAgICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICAgKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAgICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgYmVpbmcgc2VhcmNoZWQgZm9yLlxuICAgKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gICAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gICAqL1xuICBmdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUpIHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgd2hlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAgIC8vXG4gICAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICAvL1xuICAgIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgICAvLyAgICAgIHRoZSBuZXh0IGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIGxlc3MgdGhhbiB0aGF0IGVsZW1lbnQuXG4gICAgLy9cbiAgICAvLyAgIDMuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYW5kIHRoZXJlIGlzIG5vIG5leHQtY2xvc2VzdFxuICAgIC8vICAgICAgZWxlbWVudCB3aGljaCBpcyBsZXNzIHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2VcbiAgICAvLyAgICAgIHJldHVybiAtMS5cbiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgICB2YXIgY21wID0gYUNvbXBhcmUoYU5lZWRsZSwgYUhheXN0YWNrW21pZF0sIHRydWUpO1xuICAgIGlmIChjbXAgPT09IDApIHtcbiAgICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAgIC8vIGFIYXlzdGFja1ttaWRdIGlzIGdyZWF0ZXIgdGhhbiBvdXIgbmVlZGxlLlxuICAgICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChtaWQsIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIGRpZCBub3QgZmluZCBhbiBleGFjdCBtYXRjaCwgcmV0dXJuIHRoZSBuZXh0IGNsb3Nlc3Qgb25lXG4gICAgICAvLyAodGVybWluYXRpb24gY2FzZSAyKS5cbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gYUhheXN0YWNrW21pZF0gaXMgbGVzcyB0aGFuIG91ciBuZWVkbGUuXG4gICAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIGxvd2VyIGhhbGYuXG4gICAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlKTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDIpIG9yICgzKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICAgIHJldHVybiBhTG93IDwgMCA/IC0xIDogYUxvdztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gICAqIHRoZSBpbmRleCBvZiBuZXh0IGxvd2VzdCB2YWx1ZSBjaGVja2VkIGlmIHRoZXJlIGlzIG5vIGV4YWN0IGhpdC4gVGhpcyBpc1xuICAgKiBiZWNhdXNlIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlXG4gICAqIHBvaW50cywgYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzXG4gICAqIGp1c3QgbWVhbnMgdGhhdCB5b3UgYXJlbid0IG9uIHRoZSB2ZXJ5IHN0YXJ0IG9mIGEgcmVnaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICAgKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBhcnJheSB0aGF0IGlzIGJlaW5nIHNlYXJjaGVkLlxuICAgKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICAgKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gICAqICAgICB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHRoZSBlbGVtZW50LCByZXNwZWN0aXZlbHkuXG4gICAqL1xuICBleHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlKSB7XG4gICAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSlcbiAgfTtcblxufSk7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5pZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBkZWZpbmUgPSByZXF1aXJlKCdhbWRlZmluZScpKG1vZHVsZSwgcmVxdWlyZSk7XG59XG5kZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXG4gIHZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG4gIHZhciBiaW5hcnlTZWFyY2ggPSByZXF1aXJlKCcuL2JpbmFyeS1zZWFyY2gnKTtcbiAgdmFyIFNvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3VtZXI7XG4gIHZhciBCYXNpY1NvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi9iYXNpYy1zb3VyY2UtbWFwLWNvbnN1bWVyJykuQmFzaWNTb3VyY2VNYXBDb25zdW1lcjtcblxuICAvKipcbiAgICogQW4gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaFxuICAgKiB3ZSBjYW4gcXVlcnkgZm9yIGluZm9ybWF0aW9uLiBJdCBkaWZmZXJzIGZyb20gQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpblxuICAgKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAgICogaW5wdXQuXG4gICAqXG4gICAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICAgKiBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjIGZvciBpbmRleGVkIHNvdXJjZSBtYXBzLCB0aGV5XG4gICAqIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICAgKlxuICAgKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAgICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAgICpcbiAgICogRWFjaCB2YWx1ZSB1bmRlciB0aGUgXCJzZWN0aW9uc1wiIGZpZWxkIGhhcyB0d28gZmllbGRzOlxuICAgKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAgICogICAgICAgYmVnaW5zIHRvIGFwcGx5LCBkZWZpbmVkIGFzIGFuIG9iamVjdCB3aXRoIGEgXCJsaW5lXCIgYW5kIFwiY29sdW1uXCJcbiAgICogICAgICAgZmllbGQuXG4gICAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICAgKiAgICAgICBidXQgZG9lc24ndCBoYXZlIHRvIGJlLlxuICAgKlxuICAgKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAgICogc3BlY2lmeWluZyBhIFVSTCB0byByZXRyaWV2ZSBhIHNvdXJjZSBtYXAgZnJvbSwgYnV0IHRoYXQncyBjdXJyZW50bHlcbiAgICogdW5zdXBwb3J0ZWQuXG4gICAqXG4gICAqIEhlcmUncyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXSwgYnV0XG4gICAqIG1vZGlmaWVkIHRvIG9taXQgYSBzZWN0aW9uIHdoaWNoIHVzZXMgdGhlIFwidXJsXCIgZmllbGQuXG4gICAqXG4gICAqICB7XG4gICAqICAgIHZlcnNpb24gOiAzLFxuICAgKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICAgKiAgICBzZWN0aW9uczogW3tcbiAgICogICAgICBvZmZzZXQ6IHtsaW5lOjEwMCwgY29sdW1uOjEwfSxcbiAgICogICAgICBtYXA6IHtcbiAgICogICAgICAgIHZlcnNpb24gOiAzLFxuICAgKiAgICAgICAgZmlsZTogXCJzZWN0aW9uLmpzXCIsXG4gICAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gICAqICAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAgICogICAgICAgIG1hcHBpbmdzOiBcIkFBQUEsRTs7QUJDREU7XCJcbiAgICogICAgICB9XG4gICAqICAgIH1dLFxuICAgKiAgfVxuICAgKlxuICAgKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdCNoZWFkaW5nPWguNTM1ZXMzeGVwcmd0XG4gICAqL1xuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICAgIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICAgIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgfVxuXG4gICAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gICAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICAgIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICAgIH1cblxuICAgIHZhciBsYXN0T2Zmc2V0ID0ge1xuICAgICAgbGluZTogLTEsXG4gICAgICBjb2x1bW46IDBcbiAgICB9O1xuICAgIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICBpZiAocy51cmwpIHtcbiAgICAgICAgLy8gVGhlIHVybCBmaWVsZCB3aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgYXN5bmNocm9uaWNpdHkuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgICB9XG4gICAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgICAgdmFyIG9mZnNldExpbmUgPSB1dGlsLmdldEFyZyhvZmZzZXQsICdsaW5lJyk7XG4gICAgICB2YXIgb2Zmc2V0Q29sdW1uID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnY29sdW1uJyk7XG5cbiAgICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgICAgKG9mZnNldExpbmUgPT09IGxhc3RPZmZzZXQubGluZSAmJiBvZmZzZXRDb2x1bW4gPCBsYXN0T2Zmc2V0LmNvbHVtbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuJyk7XG4gICAgICB9XG4gICAgICBsYXN0T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgICAvLyBUaGUgb2Zmc2V0IGZpZWxkcyBhcmUgMC1iYXNlZCwgYnV0IHdlIHVzZSAxLWJhc2VkIGluZGljZXMgd2hlblxuICAgICAgICAgIC8vIGVuY29kaW5nL2RlY29kaW5nIGZyb20gVkxRLlxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICAgIGdlbmVyYXRlZENvbHVtbjogb2Zmc2V0Q29sdW1uICsgMVxuICAgICAgICB9LFxuICAgICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICAgKi9cbiAgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gICAqL1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gc291cmNlcztcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAgICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gICAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICAgKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAgICpcbiAgICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICAgKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gICAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gICAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAgICovXG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gICAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICAgIH07XG5cbiAgICAgIC8vIEZpbmQgdGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uIHdlJ3JlIHRyeWluZyB0byBtYXBcbiAgICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgICAgdmFyIHNlY3Rpb25JbmRleCA9IGJpbmFyeVNlYXJjaC5zZWFyY2gobmVlZGxlLCB0aGlzLl9zZWN0aW9ucyxcbiAgICAgICAgZnVuY3Rpb24obmVlZGxlLCBzZWN0aW9uKSB7XG4gICAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgICBpZiAoY21wKSB7XG4gICAgICAgICAgICByZXR1cm4gY21wO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAobmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcblxuICAgICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICAgIG5hbWU6IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlY3Rpb24uY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgIGxpbmU6IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC1cbiAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICBjb2x1bW46IG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgOiAwKVxuICAgICAgfSk7XG4gICAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gICAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAgICogYXZhaWxhYmxlLlxuICAgKi9cbiAgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgICAgdmFyIGNvbnRlbnQgPSBzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICAgKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAgICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKlxuICAgKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICAgKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAgICovXG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICAgIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICAgIC8vIE9ubHkgY29uc2lkZXIgdGhpcyBzZWN0aW9uIGlmIHRoZSByZXF1ZXN0ZWQgc291cmNlIGlzIGluIHRoZSBsaXN0IG9mXG4gICAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgICBpZiAoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VzLmluZGV4T2YodXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSkgPT09IC0xKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdlbmVyYXRlZFBvc2l0aW9uID0gc2VjdGlvbi5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncyk7XG4gICAgICAgIGlmIChnZW5lcmF0ZWRQb3NpdGlvbikge1xuICAgICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lICtcbiAgICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmVcbiAgICAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgICAgOiAwKVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfTtcblxuICAvKipcbiAgICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICAgKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAgICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAgICovXG4gIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICAgIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG4gICAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWN0aW9uTWFwcGluZ3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB2YXIgbWFwcGluZyA9IHNlY3Rpb25NYXBwaW5nc1tpXTtcblxuICAgICAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTtcbiAgICAgICAgICB2YXIgc291cmNlUm9vdCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdDtcblxuICAgICAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgICAvLyBnZW5lcmF0ZWQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2VjdGlvbiwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIG9mZnNldCB0aGVtIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29uY2F0ZW5hdGVkXG4gICAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgICAgdmFyIGFkanVzdGVkTWFwcGluZyA9IHtcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5jb2x1bW4gK1xuICAgICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lKVxuICAgICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICAgICAgbmFtZTogbWFwcGluZy5uYW1lXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3Muc29ydCh1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9ucyk7XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3Muc29ydCh1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgfTtcblxuICBleHBvcnRzLkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciA9IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcjtcbn0pO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDE0IE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZGVmaW5lID0gcmVxdWlyZSgnYW1kZWZpbmUnKShtb2R1bGUsIHJlcXVpcmUpO1xufVxuZGVmaW5lKGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuICB2YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hldGhlciBtYXBwaW5nQiBpcyBhZnRlciBtYXBwaW5nQSB3aXRoIHJlc3BlY3QgdG8gZ2VuZXJhdGVkXG4gICAqIHBvc2l0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2VuZXJhdGVkUG9zaXRpb25BZnRlcihtYXBwaW5nQSwgbWFwcGluZ0IpIHtcbiAgICAvLyBPcHRpbWl6ZWQgZm9yIG1vc3QgY29tbW9uIGNhc2VcbiAgICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICAgIHZhciBsaW5lQiA9IG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gICAgdmFyIGNvbHVtbkEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW47XG4gICAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gICAgcmV0dXJuIGxpbmVCID4gbGluZUEgfHwgbGluZUIgPT0gbGluZUEgJiYgY29sdW1uQiA+PSBjb2x1bW5BIHx8XG4gICAgICAgICAgIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zKG1hcHBpbmdBLCBtYXBwaW5nQikgPD0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGRhdGEgc3RydWN0dXJlIHRvIHByb3ZpZGUgYSBzb3J0ZWQgdmlldyBvZiBhY2N1bXVsYXRlZCBtYXBwaW5ncyBpbiBhXG4gICAqIHBlcmZvcm1hbmNlIGNvbnNjaW91cyBtYW5uZXIuIEl0IHRyYWRlcyBhIG5lZ2xpYmFibGUgb3ZlcmhlYWQgaW4gZ2VuZXJhbFxuICAgKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAgICovXG4gIGZ1bmN0aW9uIE1hcHBpbmdMaXN0KCkge1xuICAgIHRoaXMuX2FycmF5ID0gW107XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgICAvLyBTZXJ2ZXMgYXMgaW5maW11bVxuICAgIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICAgKiBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIHRha2VzLlxuICAgKlxuICAgKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICAgKi9cbiAgTWFwcGluZ0xpc3QucHJvdG90eXBlLnVuc29ydGVkRm9yRWFjaCA9XG4gICAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgICB0aGlzLl9hcnJheS5mb3JFYWNoKGFDYWxsYmFjaywgYVRoaXNBcmcpO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZ2l2ZW4gc291cmNlIG1hcHBpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAgICovXG4gIE1hcHBpbmdMaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF9hZGQoYU1hcHBpbmcpIHtcbiAgICB2YXIgbWFwcGluZztcbiAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICAgIHRoaXMuX2xhc3QgPSBhTWFwcGluZztcbiAgICAgIHRoaXMuX2FycmF5LnB1c2goYU1hcHBpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zb3J0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2FycmF5LnB1c2goYU1hcHBpbmcpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICAgKiBnZW5lcmF0ZWQgcG9zaXRpb24uXG4gICAqXG4gICAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICAgKiBwZXJmb3JtYW5jZS4gVGhlIHJldHVybiB2YWx1ZSBtdXN0IE5PVCBiZSBtdXRhdGVkLCBhbmQgc2hvdWxkIGJlIHRyZWF0ZWQgYXNcbiAgICogYW4gaW1tdXRhYmxlIGJvcnJvdy4gSWYgeW91IHdhbnQgdG8gdGFrZSBvd25lcnNoaXAsIHlvdSBtdXN0IG1ha2UgeW91ciBvd25cbiAgICogY29weS5cbiAgICovXG4gIE1hcHBpbmdMaXN0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gTWFwcGluZ0xpc3RfdG9BcnJheSgpIHtcbiAgICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgICAgdGhpcy5fYXJyYXkuc29ydCh1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9ucyk7XG4gICAgICB0aGlzLl9zb3J0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYXJyYXk7XG4gIH07XG5cbiAgZXhwb3J0cy5NYXBwaW5nTGlzdCA9IE1hcHBpbmdMaXN0O1xuXG59KTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbmlmICh0eXBlb2YgZGVmaW5lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGRlZmluZSA9IHJlcXVpcmUoJ2FtZGVmaW5lJykobW9kdWxlLCByZXF1aXJlKTtcbn1cbmRlZmluZShmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cbiAgdmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gICAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gICAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgICB9XG5cbiAgICAvLyBXZSBkbyBsYXRlIHJlcXVpcmVzIGJlY2F1c2UgdGhlIHN1YmNsYXNzZXMgcmVxdWlyZSgpIHRoaXMgZmlsZS5cbiAgICBpZiAoc291cmNlTWFwLnNlY3Rpb25zICE9IG51bGwpIHtcbiAgICAgIHZhciBpbmRleGVkU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCcuL2luZGV4ZWQtc291cmNlLW1hcC1jb25zdW1lcicpO1xuICAgICAgcmV0dXJuIG5ldyBpbmRleGVkU291cmNlTWFwQ29uc3VtZXIuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBiYXNpY1NvdXJjZU1hcENvbnN1bWVyID0gcmVxdWlyZSgnLi9iYXNpYy1zb3VyY2UtbWFwLWNvbnN1bWVyJyk7XG4gICAgICByZXR1cm4gbmV3IGJhc2ljU291cmNlTWFwQ29uc3VtZXIuQmFzaWNTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApO1xuICAgIH1cbiAgfVxuXG4gIFNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gICAgdmFyIGJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCcuL2Jhc2ljLXNvdXJjZS1tYXAtY29uc3VtZXInKTtcbiAgICByZXR1cm4gYmFzaWNTb3VyY2VNYXBDb25zdW1lci5CYXNpY1NvdXJjZU1hcENvbnN1bWVyXG4gICAgICAgICAgICAuZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gICAqL1xuICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG5cbiAgLy8gYF9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZCBgX19vcmlnaW5hbE1hcHBpbmdzYCBhcmUgYXJyYXlzIHRoYXQgaG9sZCB0aGVcbiAgLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbiAgLy8gYXJlIGxhemlseSBpbnN0YW50aWF0ZWQsIGFjY2Vzc2VkIHZpYSB0aGUgYF9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gIC8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgZ2V0dGVycyByZXNwZWN0aXZlbHksIGFuZCB3ZSBvbmx5IHBhcnNlIHRoZSBtYXBwaW5nc1xuICAvLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbiAgLy8gdGhlc2UgaG9vcHMgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSB0aG91c2FuZHMgb2YgbWFwcGluZ3MsIGFuZCBwYXJzaW5nXG4gIC8vIHRoZW0gaXMgZXhwZW5zaXZlLCBzbyB3ZSBvbmx5IHdhbnQgdG8gZG8gaXQgaWYgd2UgbXVzdC5cbiAgLy9cbiAgLy8gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5cyBpcyBvZiB0aGUgZm9ybTpcbiAgLy9cbiAgLy8gICAgIHtcbiAgLy8gICAgICAgZ2VuZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbiAgLy8gICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gIC8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbiAgLy8gICAgICAgICAgICAgICBjaHVuayBvZiBjb2RlLFxuICAvLyAgICAgICBvcmlnaW5hbExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbiAgLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuICAvLyAgICAgICBvcmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4gIC8vICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuICAvLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4gIC8vICAgICAgICAgICAgIGNvZGUuXG4gIC8vICAgICB9XG4gIC8vXG4gIC8vIEFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4gYmVcbiAgLy8gYG51bGxgLlxuICAvL1xuICAvLyBgX2dlbmVyYXRlZE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zLlxuICAvL1xuICAvLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IG51bGw7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfZ2VuZXJhdGVkTWFwcGluZ3MnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncykge1xuICAgICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICAgICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICB9XG4gIH0pO1xuXG4gIFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX29yaWdpbmFsTWFwcGluZ3MnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgfVxuICB9KTtcblxuICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX25leHRDaGFySXNNYXBwaW5nU2VwYXJhdG9yID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9uZXh0Q2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyKSB7XG4gICAgICB2YXIgYyA9IGFTdHIuY2hhckF0KDApO1xuICAgICAgcmV0dXJuIGMgPT09IFwiO1wiIHx8IGMgPT09IFwiLFwiO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAgICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gICAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gICAqL1xuICBTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgX3BhcnNlTWFwcGluZ3NcIik7XG4gICAgfTtcblxuICBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVIgPSAxO1xuICBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUiA9IDI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAgICogZ2VuZXJhdGVkIGxpbmUvY29sdW1uIGluIHRoaXMgc291cmNlIG1hcC5cbiAgICpcbiAgICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICAgKiAgICAgICAgVGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggZWFjaCBtYXBwaW5nLlxuICAgKiBAcGFyYW0gT2JqZWN0IGFDb250ZXh0XG4gICAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAgICogICAgICAgIHRpbWUgdGhhdCBgYUNhbGxiYWNrYCBpcyBjYWxsZWQuXG4gICAqIEBwYXJhbSBhT3JkZXJcbiAgICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICAgKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSYC4gU3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdG9cbiAgICogICAgICAgIGl0ZXJhdGUgb3ZlciB0aGUgbWFwcGluZ3Mgc29ydGVkIGJ5IHRoZSBnZW5lcmF0ZWQgZmlsZSdzIGxpbmUvY29sdW1uXG4gICAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAgICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJgLlxuICAgKi9cbiAgU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9lYWNoTWFwcGluZyhhQ2FsbGJhY2ssIGFDb250ZXh0LCBhT3JkZXIpIHtcbiAgICAgIHZhciBjb250ZXh0ID0gYUNvbnRleHQgfHwgbnVsbDtcbiAgICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICAgIHZhciBtYXBwaW5ncztcbiAgICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgICBtYXBwaW5ncyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICAgIG1hcHBpbmdzID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5ncztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9yZGVyIG9mIGl0ZXJhdGlvbi5cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgICAgbWFwcGluZ3MubWFwKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lLFxuICAgICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWVcbiAgICAgICAgfTtcbiAgICAgIH0pLmZvckVhY2goYUNhbGxiYWNrLCBjb250ZXh0KTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlXG4gICAqIGFuZCBsaW5lIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAqIHByb3BlcnRpZXM6XG4gICAqXG4gICAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICAgKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gICAqXG4gICAqIGFuZCBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHJldHVybmVkLCBlYWNoIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICAgKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAgICovXG4gIFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2FsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvcihhQXJncykge1xuICAgICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgICAvLyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBtYXBwaW5nIGxlc3MgdGhhbiB0aGUgbmVlZGxlLiBCeVxuICAgICAgLy8gc2V0dGluZyBuZWVkbGUub3JpZ2luYWxDb2x1bW4gdG8gSW5maW5pdHksIHdlIHRodXMgZmluZCB0aGUgbGFzdFxuICAgICAgLy8gbWFwcGluZyBmb3IgdGhlIGdpdmVuIGxpbmUsIHByb3ZpZGVkIHN1Y2ggYSBtYXBwaW5nIGV4aXN0cy5cbiAgICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICAgIHNvdXJjZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSxcbiAgICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IEluZmluaXR5XG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgbmVlZGxlLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBuZWVkbGUuc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1hcHBpbmdzID0gW107XG5cbiAgICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKG5lZWRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBuZWVkbGUub3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1stLWluZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFwcGluZ3MucmV2ZXJzZSgpO1xuICAgIH07XG5cbiAgZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG59KTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cbmlmICh0eXBlb2YgZGVmaW5lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGRlZmluZSA9IHJlcXVpcmUoJ2FtZGVmaW5lJykobW9kdWxlLCByZXF1aXJlKTtcbn1cbmRlZmluZShmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7XG5cbiAgdmFyIGJhc2U2NFZMUSA9IHJlcXVpcmUoJy4vYmFzZTY0LXZscScpO1xuICB2YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuICB2YXIgQXJyYXlTZXQgPSByZXF1aXJlKCcuL2FycmF5LXNldCcpLkFycmF5U2V0O1xuICB2YXIgTWFwcGluZ0xpc3QgPSByZXF1aXJlKCcuL21hcHBpbmctbGlzdCcpLk1hcHBpbmdMaXN0O1xuXG4gIC8qKlxuICAgKiBBbiBpbnN0YW5jZSBvZiB0aGUgU291cmNlTWFwR2VuZXJhdG9yIHJlcHJlc2VudHMgYSBzb3VyY2UgbWFwIHdoaWNoIGlzXG4gICAqIGJlaW5nIGJ1aWx0IGluY3JlbWVudGFsbHkuIFlvdSBtYXkgcGFzcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAqIHByb3BlcnRpZXM6XG4gICAqXG4gICAqICAgLSBmaWxlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gICAqICAgLSBzb3VyY2VSb290OiBBIHJvb3QgZm9yIGFsbCByZWxhdGl2ZSBVUkxzIGluIHRoaXMgc291cmNlIG1hcC5cbiAgICovXG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcihhQXJncykge1xuICAgIGlmICghYUFyZ3MpIHtcbiAgICAgIGFBcmdzID0ge307XG4gICAgfVxuICAgIHRoaXMuX2ZpbGUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2ZpbGUnLCBudWxsKTtcbiAgICB0aGlzLl9zb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2VSb290JywgbnVsbCk7XG4gICAgdGhpcy5fc2tpcFZhbGlkYXRpb24gPSB1dGlsLmdldEFyZyhhQXJncywgJ3NraXBWYWxpZGF0aW9uJywgZmFsc2UpO1xuICAgIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgICB0aGlzLl9uYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuICAgIHRoaXMuX21hcHBpbmdzID0gbmV3IE1hcHBpbmdMaXN0KCk7XG4gICAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbiAgfVxuXG4gIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFNvdXJjZU1hcEdlbmVyYXRvciBiYXNlZCBvbiBhIFNvdXJjZU1hcENvbnN1bWVyXG4gICAqXG4gICAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcC5cbiAgICovXG4gIFNvdXJjZU1hcEdlbmVyYXRvci5mcm9tU291cmNlTWFwID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICAgIHZhciBzb3VyY2VSb290ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZVJvb3Q7XG4gICAgICB2YXIgZ2VuZXJhdG9yID0gbmV3IFNvdXJjZU1hcEdlbmVyYXRvcih7XG4gICAgICAgIGZpbGU6IGFTb3VyY2VNYXBDb25zdW1lci5maWxlLFxuICAgICAgICBzb3VyY2VSb290OiBzb3VyY2VSb290XG4gICAgICB9KTtcbiAgICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgICB2YXIgbmV3TWFwcGluZyA9IHtcbiAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgIGxpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW5cbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IG1hcHBpbmcuc291cmNlO1xuICAgICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgIG5ld01hcHBpbmcuc291cmNlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBuZXdNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3TWFwcGluZy5vcmlnaW5hbCA9IHtcbiAgICAgICAgICAgIGxpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChtYXBwaW5nLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgbmV3TWFwcGluZy5uYW1lID0gbWFwcGluZy5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRvci5hZGRNYXBwaW5nKG5ld01hcHBpbmcpO1xuICAgICAgfSk7XG4gICAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICBnZW5lcmF0b3Iuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmdsZSBtYXBwaW5nIGZyb20gb3JpZ2luYWwgc291cmNlIGxpbmUgYW5kIGNvbHVtbiB0byB0aGUgZ2VuZXJhdGVkXG4gICAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBmb3IgdGhpcyBzb3VyY2UgbWFwIGJlaW5nIGNyZWF0ZWQuIFRoZSBtYXBwaW5nXG4gICAqIG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqXG4gICAqICAgLSBnZW5lcmF0ZWQ6IEFuIG9iamVjdCB3aXRoIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAgICogICAtIG9yaWdpbmFsOiBBbiBvYmplY3Qgd2l0aCB0aGUgb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAgICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIChyZWxhdGl2ZSB0byB0aGUgc291cmNlUm9vdCkuXG4gICAqICAgLSBuYW1lOiBBbiBvcHRpb25hbCBvcmlnaW5hbCB0b2tlbiBuYW1lIGZvciB0aGlzIG1hcHBpbmcuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFkZE1hcHBpbmcgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hZGRNYXBwaW5nKGFBcmdzKSB7XG4gICAgICB2YXIgZ2VuZXJhdGVkID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdnZW5lcmF0ZWQnKTtcbiAgICAgIHZhciBvcmlnaW5hbCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnb3JpZ2luYWwnLCBudWxsKTtcbiAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScsIG51bGwpO1xuICAgICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhhQXJncywgJ25hbWUnLCBudWxsKTtcblxuICAgICAgaWYgKCF0aGlzLl9za2lwVmFsaWRhdGlvbikge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU1hcHBpbmcoZ2VuZXJhdGVkLCBvcmlnaW5hbCwgc291cmNlLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmICF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgIXRoaXMuX25hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX21hcHBpbmdzLmFkZCh7XG4gICAgICAgIGdlbmVyYXRlZExpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IGdlbmVyYXRlZC5jb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogb3JpZ2luYWwgIT0gbnVsbCAmJiBvcmlnaW5hbC5saW5lLFxuICAgICAgICBvcmlnaW5hbENvbHVtbjogb3JpZ2luYWwgIT0gbnVsbCAmJiBvcmlnaW5hbC5jb2x1bW4sXG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBuYW1lOiBuYW1lXG4gICAgICB9KTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNvdXJjZSBjb250ZW50IGZvciBhIHNvdXJjZSBmaWxlLlxuICAgKi9cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3Jfc2V0U291cmNlQ29udGVudChhU291cmNlRmlsZSwgYVNvdXJjZUNvbnRlbnQpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhU291cmNlRmlsZTtcbiAgICAgIGlmICh0aGlzLl9zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLl9zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYVNvdXJjZUNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICAvLyBBZGQgdGhlIHNvdXJjZSBjb250ZW50IHRvIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IF9zb3VyY2VzQ29udGVudHMgbWFwIGlmIHRoZSBwcm9wZXJ0eSBpcyBudWxsLlxuICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHNvdXJjZSBmaWxlIGZyb20gdGhlIF9zb3VyY2VzQ29udGVudHMgbWFwLlxuICAgICAgICAvLyBJZiB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAgaXMgZW1wdHksIHNldCB0aGUgcHJvcGVydHkgdG8gbnVsbC5cbiAgICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fc291cmNlc0NvbnRlbnRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgbWFwcGluZ3Mgb2YgYSBzdWItc291cmNlLW1hcCBmb3IgYSBzcGVjaWZpYyBzb3VyY2UgZmlsZSB0byB0aGVcbiAgICogc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQuIEVhY2ggbWFwcGluZyB0byB0aGUgc3VwcGxpZWQgc291cmNlIGZpbGUgaXNcbiAgICogcmV3cml0dGVuIHVzaW5nIHRoZSBzdXBwbGllZCBzb3VyY2UgbWFwLiBOb3RlOiBUaGUgcmVzb2x1dGlvbiBmb3IgdGhlXG4gICAqIHJlc3VsdGluZyBtYXBwaW5ncyBpcyB0aGUgbWluaW1pdW0gb2YgdGhpcyBtYXAgYW5kIHRoZSBzdXBwbGllZCBtYXAuXG4gICAqXG4gICAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZC5cbiAgICogQHBhcmFtIGFTb3VyY2VGaWxlIE9wdGlvbmFsLiBUaGUgZmlsZW5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlLlxuICAgKiAgICAgICAgSWYgb21pdHRlZCwgU291cmNlTWFwQ29uc3VtZXIncyBmaWxlIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAgICogQHBhcmFtIGFTb3VyY2VNYXBQYXRoIE9wdGlvbmFsLiBUaGUgZGlybmFtZSBvZiB0aGUgcGF0aCB0byB0aGUgc291cmNlIG1hcFxuICAgKiAgICAgICAgdG8gYmUgYXBwbGllZC4gSWYgcmVsYXRpdmUsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBTb3VyY2VNYXBDb25zdW1lci5cbiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIG5lZWRlZCB3aGVuIHRoZSB0d28gc291cmNlIG1hcHMgYXJlbid0IGluIHRoZSBzYW1lXG4gICAqICAgICAgICBkaXJlY3RvcnksIGFuZCB0aGUgc291cmNlIG1hcCB0byBiZSBhcHBsaWVkIGNvbnRhaW5zIHJlbGF0aXZlIHNvdXJjZVxuICAgKiAgICAgICAgcGF0aHMuIElmIHNvLCB0aG9zZSByZWxhdGl2ZSBzb3VyY2UgcGF0aHMgbmVlZCB0byBiZSByZXdyaXR0ZW5cbiAgICogICAgICAgIHJlbGF0aXZlIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfYXBwbHlTb3VyY2VNYXAoYVNvdXJjZU1hcENvbnN1bWVyLCBhU291cmNlRmlsZSwgYVNvdXJjZU1hcFBhdGgpIHtcbiAgICAgIHZhciBzb3VyY2VGaWxlID0gYVNvdXJjZUZpbGU7XG4gICAgICAvLyBJZiBhU291cmNlRmlsZSBpcyBvbWl0dGVkLCB3ZSB3aWxsIHVzZSB0aGUgZmlsZSBwcm9wZXJ0eSBvZiB0aGUgU291cmNlTWFwXG4gICAgICBpZiAoYVNvdXJjZUZpbGUgPT0gbnVsbCkge1xuICAgICAgICBpZiAoYVNvdXJjZU1hcENvbnN1bWVyLmZpbGUgPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwIHJlcXVpcmVzIGVpdGhlciBhbiBleHBsaWNpdCBzb3VyY2UgZmlsZSwgJyArXG4gICAgICAgICAgICAnb3IgdGhlIHNvdXJjZSBtYXBcXCdzIFwiZmlsZVwiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2VGaWxlID0gYVNvdXJjZU1hcENvbnN1bWVyLmZpbGU7XG4gICAgICB9XG4gICAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgICAvLyBNYWtlIFwic291cmNlRmlsZVwiIHJlbGF0aXZlIGlmIGFuIGFic29sdXRlIFVybCBpcyBwYXNzZWQuXG4gICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgICAgfVxuICAgICAgLy8gQXBwbHlpbmcgdGhlIFNvdXJjZU1hcCBjYW4gYWRkIGFuZCByZW1vdmUgaXRlbXMgZnJvbSB0aGUgc291cmNlcyBhbmRcbiAgICAgIC8vIHRoZSBuYW1lcyBhcnJheS5cbiAgICAgIHZhciBuZXdTb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgICB2YXIgbmV3TmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcblxuICAgICAgLy8gRmluZCBtYXBwaW5ncyBmb3IgdGhlIFwic291cmNlRmlsZVwiXG4gICAgICB0aGlzLl9tYXBwaW5ncy51bnNvcnRlZEZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBzb3VyY2VGaWxlICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBpdCBjYW4gYmUgbWFwcGVkIGJ5IHRoZSBzb3VyY2UgbWFwLCB0aGVuIHVwZGF0ZSB0aGUgbWFwcGluZy5cbiAgICAgICAgICB2YXIgb3JpZ2luYWwgPSBhU291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChvcmlnaW5hbC5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQ29weSBtYXBwaW5nXG4gICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IG9yaWdpbmFsLnNvdXJjZTtcbiAgICAgICAgICAgIGlmIChhU291cmNlTWFwUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gdXRpbC5qb2luKGFTb3VyY2VNYXBQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBvcmlnaW5hbC5jb2x1bW47XG4gICAgICAgICAgICBpZiAob3JpZ2luYWwubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIG1hcHBpbmcubmFtZSA9IG9yaWdpbmFsLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgIW5ld1NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgICBuZXdTb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgIW5ld05hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgICAgIG5ld05hbWVzLmFkZChuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICB9LCB0aGlzKTtcbiAgICAgIHRoaXMuX3NvdXJjZXMgPSBuZXdTb3VyY2VzO1xuICAgICAgdGhpcy5fbmFtZXMgPSBuZXdOYW1lcztcblxuICAgICAgLy8gQ29weSBzb3VyY2VzQ29udGVudHMgb2YgYXBwbGllZCBtYXAuXG4gICAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgc291cmNlRmlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMpO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIEEgbWFwcGluZyBjYW4gaGF2ZSBvbmUgb2YgdGhlIHRocmVlIGxldmVscyBvZiBkYXRhOlxuICAgKlxuICAgKiAgIDEuIEp1c3QgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi5cbiAgICogICAyLiBUaGUgR2VuZXJhdGVkIHBvc2l0aW9uLCBvcmlnaW5hbCBwb3NpdGlvbiwgYW5kIG9yaWdpbmFsIHNvdXJjZS5cbiAgICogICAzLiBHZW5lcmF0ZWQgYW5kIG9yaWdpbmFsIHBvc2l0aW9uLCBvcmlnaW5hbCBzb3VyY2UsIGFzIHdlbGwgYXMgYSBuYW1lXG4gICAqICAgICAgdG9rZW4uXG4gICAqXG4gICAqIFRvIG1haW50YWluIGNvbnNpc3RlbmN5LCB3ZSB2YWxpZGF0ZSB0aGF0IGFueSBuZXcgbWFwcGluZyBiZWluZyBhZGRlZCBmYWxsc1xuICAgKiBpbiB0byBvbmUgb2YgdGhlc2UgY2F0ZWdvcmllcy5cbiAgICovXG4gIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRlTWFwcGluZyA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3ZhbGlkYXRlTWFwcGluZyhhR2VuZXJhdGVkLCBhT3JpZ2luYWwsIGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTmFtZSkge1xuICAgICAgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAgICYmIGFHZW5lcmF0ZWQubGluZSA+IDAgJiYgYUdlbmVyYXRlZC5jb2x1bW4gPj0gMFxuICAgICAgICAgICYmICFhT3JpZ2luYWwgJiYgIWFTb3VyY2UgJiYgIWFOYW1lKSB7XG4gICAgICAgIC8vIENhc2UgMS5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYUdlbmVyYXRlZCAmJiAnbGluZScgaW4gYUdlbmVyYXRlZCAmJiAnY29sdW1uJyBpbiBhR2VuZXJhdGVkXG4gICAgICAgICAgICAgICAmJiBhT3JpZ2luYWwgJiYgJ2xpbmUnIGluIGFPcmlnaW5hbCAmJiAnY29sdW1uJyBpbiBhT3JpZ2luYWxcbiAgICAgICAgICAgICAgICYmIGFHZW5lcmF0ZWQubGluZSA+IDAgJiYgYUdlbmVyYXRlZC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICAgJiYgYU9yaWdpbmFsLmxpbmUgPiAwICYmIGFPcmlnaW5hbC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICAgJiYgYVNvdXJjZSkge1xuICAgICAgICAvLyBDYXNlcyAyIGFuZCAzLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1hcHBpbmc6ICcgKyBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZ2VuZXJhdGVkOiBhR2VuZXJhdGVkLFxuICAgICAgICAgIHNvdXJjZTogYVNvdXJjZSxcbiAgICAgICAgICBvcmlnaW5hbDogYU9yaWdpbmFsLFxuICAgICAgICAgIG5hbWU6IGFOYW1lXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdGhlIGFjY3VtdWxhdGVkIG1hcHBpbmdzIGluIHRvIHRoZSBzdHJlYW0gb2YgYmFzZSA2NCBWTFFzXG4gICAqIHNwZWNpZmllZCBieSB0aGUgc291cmNlIG1hcCBmb3JtYXQuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncyA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NlcmlhbGl6ZU1hcHBpbmdzKCkge1xuICAgICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZExpbmUgPSAxO1xuICAgICAgdmFyIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSAwO1xuICAgICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgIHZhciBtYXBwaW5nO1xuXG4gICAgICB2YXIgbWFwcGluZ3MgPSB0aGlzLl9tYXBwaW5ncy50b0FycmF5KCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBtYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBtYXBwaW5nID0gbWFwcGluZ3NbaV07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgICAgIHdoaWxlIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgIT09IHByZXZpb3VzR2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICc7JztcbiAgICAgICAgICAgIHByZXZpb3VzR2VuZXJhdGVkTGluZSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgIGlmICghdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnMobWFwcGluZywgbWFwcGluZ3NbaSAtIDFdKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSAnLCc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbik7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQgKz0gYmFzZTY0VkxRLmVuY29kZSh0aGlzLl9zb3VyY2VzLmluZGV4T2YobWFwcGluZy5zb3VyY2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c1NvdXJjZSk7XG4gICAgICAgICAgcHJldmlvdXNTb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobWFwcGluZy5zb3VyY2UpO1xuXG4gICAgICAgICAgLy8gbGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkIGluIFNvdXJjZU1hcCBzcGVjIHZlcnNpb24gM1xuICAgICAgICAgIHJlc3VsdCArPSBiYXNlNjRWTFEuZW5jb2RlKG1hcHBpbmcub3JpZ2luYWxMaW5lIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbExpbmUpO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmUgLSAxO1xuXG4gICAgICAgICAgcmVzdWx0ICs9IGJhc2U2NFZMUS5lbmNvZGUobWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbENvbHVtbik7XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBiYXNlNjRWTFEuZW5jb2RlKHRoaXMuX25hbWVzLmluZGV4T2YobWFwcGluZy5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c05hbWUpO1xuICAgICAgICAgICAgcHJldmlvdXNOYW1lID0gdGhpcy5fbmFtZXMuaW5kZXhPZihtYXBwaW5nLm5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudCA9XG4gICAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoYVNvdXJjZXMsIGFTb3VyY2VSb290KSB7XG4gICAgICByZXR1cm4gYVNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYVNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUoYVNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleSA9IHV0aWwudG9TZXRTdHJpbmcoc291cmNlKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9zb3VyY2VzQ29udGVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5KVxuICAgICAgICAgID8gdGhpcy5fc291cmNlc0NvbnRlbnRzW2tleV1cbiAgICAgICAgICA6IG51bGw7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9O1xuXG4gIC8qKlxuICAgKiBFeHRlcm5hbGl6ZSB0aGUgc291cmNlIG1hcC5cbiAgICovXG4gIFNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUudG9KU09OID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9KU09OKCkge1xuICAgICAgdmFyIG1hcCA9IHtcbiAgICAgICAgdmVyc2lvbjogdGhpcy5fdmVyc2lvbixcbiAgICAgICAgc291cmNlczogdGhpcy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICAgIG5hbWVzOiB0aGlzLl9uYW1lcy50b0FycmF5KCksXG4gICAgICAgIG1hcHBpbmdzOiB0aGlzLl9zZXJpYWxpemVNYXBwaW5ncygpXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuX2ZpbGUgIT0gbnVsbCkge1xuICAgICAgICBtYXAuZmlsZSA9IHRoaXMuX2ZpbGU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIG1hcC5zb3VyY2VSb290ID0gdGhpcy5fc291cmNlUm9vdDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgbWFwLnNvdXJjZXNDb250ZW50ID0gdGhpcy5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChtYXAuc291cmNlcywgbWFwLnNvdXJjZVJvb3QpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFwO1xuICAgIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQgdG8gYSBzdHJpbmcuXG4gICAqL1xuICBTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvU3RyaW5nID1cbiAgICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7XG4gICAgfTtcblxuICBleHBvcnRzLlNvdXJjZU1hcEdlbmVyYXRvciA9IFNvdXJjZU1hcEdlbmVyYXRvcjtcblxufSk7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5pZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBkZWZpbmUgPSByZXF1aXJlKCdhbWRlZmluZScpKG1vZHVsZSwgcmVxdWlyZSk7XG59XG5kZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXG4gIHZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xuICB2YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG4gIC8vIE1hdGNoZXMgYSBXaW5kb3dzLXN0eWxlIGBcXHJcXG5gIG5ld2xpbmUgb3IgYSBgXFxuYCBuZXdsaW5lIHVzZWQgYnkgYWxsIG90aGVyXG4gIC8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbiAgdmFyIFJFR0VYX05FV0xJTkUgPSAvKFxccj9cXG4pLztcblxuICAvLyBOZXdsaW5lIGNoYXJhY3RlciBjb2RlIGZvciBjaGFyQ29kZUF0KCkgY29tcGFyaXNvbnNcbiAgdmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4gIC8vIFByaXZhdGUgc3ltYm9sIGZvciBpZGVudGlmeWluZyBgU291cmNlTm9kZWBzIHdoZW4gbXVsdGlwbGUgdmVyc2lvbnMgb2ZcbiAgLy8gdGhlIHNvdXJjZS1tYXAgbGlicmFyeSBhcmUgbG9hZGVkLiBUaGlzIE1VU1QgTk9UIENIQU5HRSBhY3Jvc3NcbiAgLy8gdmVyc2lvbnMhXG4gIHZhciBpc1NvdXJjZU5vZGUgPSBcIiQkJGlzU291cmNlTm9kZSQkJFwiO1xuXG4gIC8qKlxuICAgKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gICAqIHNuaXBwZXRzIG9mIGdlbmVyYXRlZCBKYXZhU2NyaXB0IHNvdXJjZSBjb2RlIHdoaWxlIG1haW50YWluaW5nIHRoZSBsaW5lIGFuZFxuICAgKiBjb2x1bW4gaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIGFMaW5lIFRoZSBvcmlnaW5hbCBsaW5lIG51bWJlci5cbiAgICogQHBhcmFtIGFDb2x1bW4gVGhlIG9yaWdpbmFsIGNvbHVtbiBudW1iZXIuXG4gICAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAgICogQHBhcmFtIGFDaHVua3MgT3B0aW9uYWwuIEFuIGFycmF5IG9mIHN0cmluZ3Mgd2hpY2ggYXJlIHNuaXBwZXRzIG9mXG4gICAqICAgICAgICBnZW5lcmF0ZWQgSlMsIG9yIG90aGVyIFNvdXJjZU5vZGVzLlxuICAgKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gICAqL1xuICBmdW5jdGlvbiBTb3VyY2VOb2RlKGFMaW5lLCBhQ29sdW1uLCBhU291cmNlLCBhQ2h1bmtzLCBhTmFtZSkge1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLnNvdXJjZUNvbnRlbnRzID0ge307XG4gICAgdGhpcy5saW5lID0gYUxpbmUgPT0gbnVsbCA/IG51bGwgOiBhTGluZTtcbiAgICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICAgIHRoaXMuc291cmNlID0gYVNvdXJjZSA9PSBudWxsID8gbnVsbCA6IGFTb3VyY2U7XG4gICAgdGhpcy5uYW1lID0gYU5hbWUgPT0gbnVsbCA/IG51bGwgOiBhTmFtZTtcbiAgICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICAgIGlmIChhQ2h1bmtzICE9IG51bGwpIHRoaXMuYWRkKGFDaHVua3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBTb3VyY2VOb2RlIGZyb20gZ2VuZXJhdGVkIGNvZGUgYW5kIGEgU291cmNlTWFwQ29uc3VtZXIuXG4gICAqXG4gICAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAgICogQHBhcmFtIGFTb3VyY2VNYXBDb25zdW1lciBUaGUgU291cmNlTWFwIGZvciB0aGUgZ2VuZXJhdGVkIGNvZGVcbiAgICogQHBhcmFtIGFSZWxhdGl2ZVBhdGggT3B0aW9uYWwuIFRoZSBwYXRoIHRoYXQgcmVsYXRpdmUgc291cmNlcyBpbiB0aGVcbiAgICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAgICovXG4gIFNvdXJjZU5vZGUuZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgICAgLy8gVGhlIFNvdXJjZU5vZGUgd2Ugd2FudCB0byBmaWxsIHdpdGggdGhlIGdlbmVyYXRlZCBjb2RlXG4gICAgICAvLyBhbmQgdGhlIFNvdXJjZU1hcFxuICAgICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgICAvLyBBbGwgZXZlbiBpbmRpY2VzIG9mIHRoaXMgYXJyYXkgYXJlIG9uZSBsaW5lIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSxcbiAgICAgIC8vIHdoaWxlIGFsbCBvZGQgaW5kaWNlcyBhcmUgdGhlIG5ld2xpbmVzIGJldHdlZW4gdHdvIGFkamFjZW50IGxpbmVzXG4gICAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgICAvLyBQcm9jZXNzZWQgZnJhZ21lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhpcyBhcnJheSwgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgICB2YXIgcmVtYWluaW5nTGluZXMgPSBhR2VuZXJhdGVkQ29kZS5zcGxpdChSRUdFWF9ORVdMSU5FKTtcbiAgICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBsaW5lQ29udGVudHMgPSByZW1haW5pbmdMaW5lcy5zaGlmdCgpO1xuICAgICAgICAvLyBUaGUgbGFzdCBsaW5lIG9mIGEgZmlsZSBtaWdodCBub3QgaGF2ZSBhIG5ld2xpbmUuXG4gICAgICAgIHZhciBuZXdMaW5lID0gcmVtYWluaW5nTGluZXMuc2hpZnQoKSB8fCBcIlwiO1xuICAgICAgICByZXR1cm4gbGluZUNvbnRlbnRzICsgbmV3TGluZTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFdlIG5lZWQgdG8gcmVtZW1iZXIgdGhlIHBvc2l0aW9uIG9mIFwicmVtYWluaW5nTGluZXNcIlxuICAgICAgdmFyIGxhc3RHZW5lcmF0ZWRMaW5lID0gMSwgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG5cbiAgICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAgIC8vIFRvIGV4dHJhY3QgaXQgY3VycmVudCBhbmQgbGFzdCBtYXBwaW5nIGlzIHVzZWQuXG4gICAgICAvLyBIZXJlIHdlIHN0b3JlIHRoZSBsYXN0IG1hcHBpbmcuXG4gICAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgICBhU291cmNlTWFwQ29uc3VtZXIuZWFjaE1hcHBpbmcoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgICAgaWYgKGxhc3RNYXBwaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoZXJlIGlzIGEgbmV3IGxpbmUgaW4gYmV0d2Vlbi5cbiAgICAgICAgICBpZiAobGFzdEdlbmVyYXRlZExpbmUgPCBtYXBwaW5nLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICAgIHZhciBjb2RlID0gXCJcIjtcbiAgICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgICBhZGRNYXBwaW5nV2l0aENvZGUobGFzdE1hcHBpbmcsIHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgICAgICBsYXN0R2VuZXJhdGVkTGluZSsrO1xuICAgICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgICAvLyBUaGUgcmVtYWluaW5nIGNvZGUgaXMgYWRkZWQgd2l0aG91dCBtYXBwaW5nXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgICAvLyBBc3NvY2lhdGUgdGhlIGNvZGUgYmV0d2VlbiBcImxhc3RHZW5lcmF0ZWRDb2x1bW5cIiBhbmRcbiAgICAgICAgICAgIC8vIFwibWFwcGluZy5nZW5lcmF0ZWRDb2x1bW5cIiB3aXRoIFwibGFzdE1hcHBpbmdcIlxuICAgICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbMF07XG4gICAgICAgICAgICB2YXIgY29kZSA9IG5leHRMaW5lLnN1YnN0cigwLCBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICAgIHJlbWFpbmluZ0xpbmVzWzBdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuICAgICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAgIC8vIE5vIG1vcmUgcmVtYWluaW5nIGNvZGUsIGNvbnRpbnVlXG4gICAgICAgICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgICAgLy8gdG8gdGhlIFNvdXJjZU5vZGUgd2l0aG91dCBhbnkgbWFwcGluZy5cbiAgICAgICAgLy8gRWFjaCBsaW5lIGlzIGFkZGVkIGFzIHNlcGFyYXRlIHN0cmluZy5cbiAgICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbm9kZS5hZGQoc2hpZnROZXh0TGluZSgpKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkTGluZSsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkQ29sdW1uIDwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pIHtcbiAgICAgICAgICB2YXIgbmV4dExpbmUgPSByZW1haW5pbmdMaW5lc1swXTtcbiAgICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgICByZW1haW5pbmdMaW5lc1swXSA9IG5leHRMaW5lLnN1YnN0cihtYXBwaW5nLmdlbmVyYXRlZENvbHVtbik7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgIH0sIHRoaXMpO1xuICAgICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgICAgaWYgKHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGxhc3RNYXBwaW5nKSB7XG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICAgIG5vZGUuYWRkKHJlbWFpbmluZ0xpbmVzLmpvaW4oXCJcIikpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb3B5IHNvdXJjZXNDb250ZW50IGludG8gU291cmNlTm9kZVxuICAgICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKGFSZWxhdGl2ZVBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZS5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5vZGU7XG5cbiAgICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICAgIGlmIChtYXBwaW5nID09PSBudWxsIHx8IG1hcHBpbmcuc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub2RlLmFkZChjb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gYVJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgPyB1dGlsLmpvaW4oYVJlbGF0aXZlUGF0aCwgbWFwcGluZy5zb3VyY2UpXG4gICAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICAgIG5vZGUuYWRkKG5ldyBTb3VyY2VOb2RlKG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5uYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBjaHVuayBvZiBnZW5lcmF0ZWQgSlMgdG8gdGhpcyBzb3VyY2Ugbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gICAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYUNodW5rKSkge1xuICAgICAgYUNodW5rLmZvckVhY2goZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAoYUNodW5rKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChhQ2h1bmspO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBjaHVuayBvZiBnZW5lcmF0ZWQgSlMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGlzIHNvdXJjZSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAgICogICAgICAgIFNvdXJjZU5vZGUsIG9yIGFuIGFycmF5IHdoZXJlIGVhY2ggbWVtYmVyIGlzIG9uZSBvZiB0aG9zZSB0aGluZ3MuXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICAgIGZvciAodmFyIGkgPSBhQ2h1bmsubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYUNodW5rKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIEpTIHNuaXBwZXRzIGluIHRoaXMgbm9kZSBhbmQgaXRzIGNoaWxkcmVuLiBUaGVcbiAgICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICAgKiBzbmlwcGV0IGFuZCB0aGUgaXRzIG9yaWdpbmFsIGFzc29jaWF0ZWQgc291cmNlJ3MgbGluZS9jb2x1bW4gbG9jYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAgICovXG4gIFNvdXJjZU5vZGUucHJvdG90eXBlLndhbGsgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3dhbGsoYUZuKSB7XG4gICAgdmFyIGNodW5rO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjaHVuayA9IHRoaXMuY2hpbGRyZW5baV07XG4gICAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgICBjaHVuay53YWxrKGFGbik7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGNodW5rICE9PSAnJykge1xuICAgICAgICAgIGFGbihjaHVuaywgeyBzb3VyY2U6IHRoaXMuc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTGlrZSBgU3RyaW5nLnByb3RvdHlwZS5qb2luYCBleGNlcHQgZm9yIFNvdXJjZU5vZGVzLiBJbnNlcnRzIGBhU3RyYCBiZXR3ZWVuXG4gICAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICAgKlxuICAgKiBAcGFyYW0gYVNlcCBUaGUgc2VwYXJhdG9yLlxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUuam9pbiA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfam9pbihhU2VwKSB7XG4gICAgdmFyIG5ld0NoaWxkcmVuO1xuICAgIHZhciBpO1xuICAgIHZhciBsZW4gPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICBpZiAobGVuID4gMCkge1xuICAgICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW4tMTsgaSsrKSB7XG4gICAgICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgICB9XG4gICAgICBuZXdDaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5baV0pO1xuICAgICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogQ2FsbCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2Ugb24gdGhlIHZlcnkgcmlnaHQtbW9zdCBzb3VyY2Ugc25pcHBldC4gVXNlZnVsXG4gICAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gICAqXG4gICAqIEBwYXJhbSBhUGF0dGVybiBUaGUgcGF0dGVybiB0byByZXBsYWNlLlxuICAgKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gICAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZS5yZXBsYWNlUmlnaHQgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3JlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KSB7XG4gICAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICBpZiAobGFzdENoaWxkW2lzU291cmNlTm9kZV0pIHtcbiAgICAgIGxhc3RDaGlsZC5yZXBsYWNlUmlnaHQoYVBhdHRlcm4sIGFSZXBsYWNlbWVudCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBsYXN0Q2hpbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMV0gPSBsYXN0Q2hpbGQucmVwbGFjZShhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goJycucmVwbGFjZShhUGF0dGVybiwgYVJlcGxhY2VtZW50KSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNvdXJjZSBjb250ZW50IGZvciBhIHNvdXJjZSBmaWxlLiBUaGlzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIFNvdXJjZU1hcEdlbmVyYXRvclxuICAgKiBpbiB0aGUgc291cmNlc0NvbnRlbnQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBhU291cmNlRmlsZSBUaGUgZmlsZW5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlXG4gICAqIEBwYXJhbSBhU291cmNlQ29udGVudCBUaGUgY29udGVudCBvZiB0aGUgc291cmNlIGZpbGVcbiAgICovXG4gIFNvdXJjZU5vZGUucHJvdG90eXBlLnNldFNvdXJjZUNvbnRlbnQgPVxuICAgIGZ1bmN0aW9uIFNvdXJjZU5vZGVfc2V0U291cmNlQ29udGVudChhU291cmNlRmlsZSwgYVNvdXJjZUNvbnRlbnQpIHtcbiAgICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gICAgfTtcblxuICAvKipcbiAgICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAgICogc291cmNlIGZpbGUgY29udGVudCBhbmQgaXMgcGFzc2VkIHRoZSBmaWxlbmFtZSBhbmQgc291cmNlIGNvbnRlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAgICovXG4gIFNvdXJjZU5vZGUucHJvdG90eXBlLndhbGtTb3VyY2VDb250ZW50cyA9XG4gICAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbltpXVtpc1NvdXJjZU5vZGVdKSB7XG4gICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNvdXJjZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgYUZuKHV0aWwuZnJvbVNldFN0cmluZyhzb3VyY2VzW2ldKSwgdGhpcy5zb3VyY2VDb250ZW50c1tzb3VyY2VzW2ldXSk7XG4gICAgICB9XG4gICAgfTtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICAgKiBhbmQgY29uY2F0ZW5hdGVzIGFsbCB0aGUgdmFyaW91cyBzbmlwcGV0cyB0b2dldGhlciB0byBvbmUgc3RyaW5nLlxuICAgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIHRoaXMud2FsayhmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHN0ciArPSBjaHVuaztcbiAgICB9KTtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZSBhbG9uZyB3aXRoIGEgc291cmNlXG4gICAqIG1hcC5cbiAgICovXG4gIFNvdXJjZU5vZGUucHJvdG90eXBlLnRvU3RyaW5nV2l0aFNvdXJjZU1hcCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfdG9TdHJpbmdXaXRoU291cmNlTWFwKGFBcmdzKSB7XG4gICAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICAgIGNvZGU6IFwiXCIsXG4gICAgICBsaW5lOiAxLFxuICAgICAgY29sdW1uOiAwXG4gICAgfTtcbiAgICB2YXIgbWFwID0gbmV3IFNvdXJjZU1hcEdlbmVyYXRvcihhQXJncyk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICB2YXIgbGFzdE9yaWdpbmFsU291cmNlID0gbnVsbDtcbiAgICB2YXIgbGFzdE9yaWdpbmFsTGluZSA9IG51bGw7XG4gICAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gICAgdmFyIGxhc3RPcmlnaW5hbE5hbWUgPSBudWxsO1xuICAgIHRoaXMud2FsayhmdW5jdGlvbiAoY2h1bmssIG9yaWdpbmFsKSB7XG4gICAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICAgIGlmIChvcmlnaW5hbC5zb3VyY2UgIT09IG51bGxcbiAgICAgICAgICAmJiBvcmlnaW5hbC5saW5lICE9PSBudWxsXG4gICAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICAgIGlmKGxhc3RPcmlnaW5hbFNvdXJjZSAhPT0gb3JpZ2luYWwuc291cmNlXG4gICAgICAgICAgIHx8IGxhc3RPcmlnaW5hbExpbmUgIT09IG9yaWdpbmFsLmxpbmVcbiAgICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTmFtZSAhPT0gb3JpZ2luYWwubmFtZSkge1xuICAgICAgICAgIG1hcC5hZGRNYXBwaW5nKHtcbiAgICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgICAgb3JpZ2luYWw6IHtcbiAgICAgICAgICAgICAgbGluZTogb3JpZ2luYWwubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICAgIGxhc3RPcmlnaW5hbExpbmUgPSBvcmlnaW5hbC5saW5lO1xuICAgICAgICBsYXN0T3JpZ2luYWxDb2x1bW4gPSBvcmlnaW5hbC5jb2x1bW47XG4gICAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoc291cmNlTWFwcGluZ0FjdGl2ZSkge1xuICAgICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgICAgZ2VuZXJhdGVkOiB7XG4gICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgICBpZiAoY2h1bmsuY2hhckNvZGVBdChpZHgpID09PSBORVdMSU5FX0NPREUpIHtcbiAgICAgICAgICBnZW5lcmF0ZWQubGluZSsrO1xuICAgICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAgIC8vIE1hcHBpbmdzIGVuZCBhdCBlb2xcbiAgICAgICAgICBpZiAoaWR4ICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlTWFwcGluZ0FjdGl2ZSkge1xuICAgICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgICBzb3VyY2U6IG9yaWdpbmFsLnNvdXJjZSxcbiAgICAgICAgICAgICAgb3JpZ2luYWw6IHtcbiAgICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogb3JpZ2luYWwuY29sdW1uXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBuYW1lOiBvcmlnaW5hbC5uYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ2VuZXJhdGVkLmNvbHVtbisrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICAgIG1hcC5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG4gIH07XG5cbiAgZXhwb3J0cy5Tb3VyY2VOb2RlID0gU291cmNlTm9kZTtcblxufSk7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5pZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBkZWZpbmUgPSByZXF1aXJlKCdhbWRlZmluZScpKG1vZHVsZSwgcmVxdWlyZSk7XG59XG5kZWZpbmUoZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkge1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gICAqIG9iamVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEFuIG9wdGlvbmFsIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgaXMgbWlzc2luZ1xuICAgKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gICAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICAgIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgICAgcmV0dXJuIGFBcmdzW2FOYW1lXTtcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gICAgfVxuICB9XG4gIGV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG4gIHZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xuICB2YXIgZGF0YVVybFJlZ2V4cCA9IC9eZGF0YTouK1xcLC4rJC87XG5cbiAgZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICAgIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICAgIGhvc3Q6IG1hdGNoWzNdLFxuICAgICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgICBwYXRoOiBtYXRjaFs1XVxuICAgIH07XG4gIH1cbiAgZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG4gIGZ1bmN0aW9uIHVybEdlbmVyYXRlKGFQYXJzZWRVcmwpIHtcbiAgICB2YXIgdXJsID0gJyc7XG4gICAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgICB1cmwgKz0gYVBhcnNlZFVybC5zY2hlbWUgKyAnOic7XG4gICAgfVxuICAgIHVybCArPSAnLy8nO1xuICAgIGlmIChhUGFyc2VkVXJsLmF1dGgpIHtcbiAgICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gICAgfVxuICAgIGlmIChhUGFyc2VkVXJsLmhvc3QpIHtcbiAgICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gICAgfVxuICAgIGlmIChhUGFyc2VkVXJsLnBvcnQpIHtcbiAgICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICAgIH1cbiAgICBpZiAoYVBhcnNlZFVybC5wYXRoKSB7XG4gICAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICAgIH1cbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIGV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuICAvKipcbiAgICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gICAqXG4gICAqIC0gUmVwbGFjZXMgY29uc2VxdXRpdmUgc2xhc2hlcyB3aXRoIG9uZSBzbGFzaC5cbiAgICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAgICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gICAqXG4gICAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICAgKlxuICAgKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgdXJsIHRvIG5vcm1hbGl6ZS5cbiAgICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICAgIHZhciBwYXRoID0gYVBhdGg7XG4gICAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgICBpZiAodXJsKSB7XG4gICAgICBpZiAoIXVybC5wYXRoKSB7XG4gICAgICAgIHJldHVybiBhUGF0aDtcbiAgICAgIH1cbiAgICAgIHBhdGggPSB1cmwucGF0aDtcbiAgICB9XG4gICAgdmFyIGlzQWJzb2x1dGUgPSAocGF0aC5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KC9cXC8rLyk7XG4gICAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICAgIGlmIChwYXJ0ID09PSAnLicpIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICAgIHVwKys7XG4gICAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgICAvLyBUaGUgZmlyc3QgcGFydCBpcyBibGFuayBpZiB0aGUgcGF0aCBpcyBhYnNvbHV0ZS4gVHJ5aW5nIHRvIGdvXG4gICAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSArIDEsIHVwKTtcbiAgICAgICAgICB1cCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFydHMuc3BsaWNlKGksIDIpO1xuICAgICAgICAgIHVwLS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICAgIGlmIChwYXRoID09PSAnJykge1xuICAgICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gICAgfVxuXG4gICAgaWYgKHVybCkge1xuICAgICAgdXJsLnBhdGggPSBwYXRoO1xuICAgICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xuICB9XG4gIGV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuXG4gIC8qKlxuICAgKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAgICpcbiAgICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICAgKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICAgKlxuICAgKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICAgKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAgICogICBmaXJzdC5cbiAgICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gICAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICAgKiAgIGlzIHJldHVybmVkLlxuICAgKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gICAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAgICogLSBKb2luaW5nIGZvciBleGFtcGxlICdodHRwOi8vJyBhbmQgJ3d3dy5leGFtcGxlLmNvbScgaXMgYWxzbyBzdXBwb3J0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICAgIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgICAgYVJvb3QgPSBcIi5cIjtcbiAgICB9XG4gICAgaWYgKGFQYXRoID09PSBcIlwiKSB7XG4gICAgICBhUGF0aCA9IFwiLlwiO1xuICAgIH1cbiAgICB2YXIgYVBhdGhVcmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gICAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVJvb3QgPSBhUm9vdFVybC5wYXRoIHx8ICcvJztcbiAgICB9XG5cbiAgICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICAgIGlmIChhUGF0aFVybCAmJiAhYVBhdGhVcmwuc2NoZW1lKSB7XG4gICAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgICB9XG5cbiAgICBpZiAoYVBhdGhVcmwgfHwgYVBhdGgubWF0Y2goZGF0YVVybFJlZ2V4cCkpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBgam9pbignaHR0cDovLycsICd3d3cuZXhhbXBsZS5jb20nKWBcbiAgICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICA/IGFQYXRoXG4gICAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVJvb3RVcmwucGF0aCA9IGpvaW5lZDtcbiAgICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gICAgfVxuICAgIHJldHVybiBqb2luZWQ7XG4gIH1cbiAgZXhwb3J0cy5qb2luID0gam9pbjtcblxuICAvKipcbiAgICogTWFrZSBhIHBhdGggcmVsYXRpdmUgdG8gYSBVUkwgb3IgYW5vdGhlciBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gICAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgbWFkZSByZWxhdGl2ZSB0byBhUm9vdC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICAgIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgICAgYVJvb3QgPSBcIi5cIjtcbiAgICB9XG5cbiAgICBhUm9vdCA9IGFSb290LnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgICAvLyBYWFg6IEl0IGlzIHBvc3NpYmxlIHRvIHJlbW92ZSB0aGlzIGJsb2NrLCBhbmQgdGhlIHRlc3RzIHN0aWxsIHBhc3MhXG4gICAgdmFyIHVybCA9IHVybFBhcnNlKGFSb290KTtcbiAgICBpZiAoYVBhdGguY2hhckF0KDApID09IFwiL1wiICYmIHVybCAmJiB1cmwucGF0aCA9PSBcIi9cIikge1xuICAgICAgcmV0dXJuIGFQYXRoLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIHJldHVybiBhUGF0aC5pbmRleE9mKGFSb290ICsgJy8nKSA9PT0gMFxuICAgICAgPyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSlcbiAgICAgIDogYVBhdGg7XG4gIH1cbiAgZXhwb3J0cy5yZWxhdGl2ZSA9IHJlbGF0aXZlO1xuXG4gIC8qKlxuICAgKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gICAqIGhhdmUgdG8gcHJlZml4IGFsbCB0aGUgc3RyaW5ncyBpbiBvdXIgc2V0IHdpdGggYW4gYXJiaXRyYXJ5IGNoYXJhY3Rlci5cbiAgICpcbiAgICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMzBcbiAgICpcbiAgICogQHBhcmFtIFN0cmluZyBhU3RyXG4gICAqL1xuICBmdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cbiAgZXhwb3J0cy50b1NldFN0cmluZyA9IHRvU2V0U3RyaW5nO1xuXG4gIGZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICAgIHJldHVybiBhU3RyLnN1YnN0cigxKTtcbiAgfVxuICBleHBvcnRzLmZyb21TZXRTdHJpbmcgPSBmcm9tU2V0U3RyaW5nO1xuXG4gIGZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgICB2YXIgczEgPSBhU3RyMSB8fCBcIlwiO1xuICAgIHZhciBzMiA9IGFTdHIyIHx8IFwiXCI7XG4gICAgcmV0dXJuIChzMSA+IHMyKSAtIChzMSA8IHMyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdoZXJlIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICAgKlxuICAgKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gICAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uLCBidXQgZGlmZmVyZW50IGdlbmVyYXRlZFxuICAgKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICAgKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgdmFyIGNtcDtcblxuICAgIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gICAgaWYgKGNtcCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gICAgaWYgKGNtcCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICAgIGlmIChjbXAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBzdHJjbXAobWFwcGluZ0EubmFtZSwgbWFwcGluZ0IubmFtZSk7XG4gICAgaWYgKGNtcCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgICBpZiAoY21wKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIH07XG4gIGV4cG9ydHMuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMgPSBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucztcblxuICAvKipcbiAgICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmVcbiAgICogY29tcGFyZWQuXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAgICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gICAqIHNvdXJjZS9uYW1lL29yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhXG4gICAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHZhciBjbXA7XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgICBpZiAoY21wKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgICBpZiAoY21wIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgICByZXR1cm4gY21wO1xuICAgIH1cblxuICAgIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gICAgaWYgKGNtcCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gICAgaWYgKGNtcCkge1xuICAgICAgcmV0dXJuIGNtcDtcbiAgICB9XG5cbiAgICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICAgIGlmIChjbXApIHtcbiAgICAgIHJldHVybiBjbXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbiAgfTtcbiAgZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnMgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnM7XG5cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIl9hcmdzXCI6IFtcbiAgICBbXG4gICAgICB7XG4gICAgICAgIFwicmF3XCI6IFwiZXNjb2RlZ2VuQF4xLjYuMVwiLFxuICAgICAgICBcInNjb3BlXCI6IG51bGwsXG4gICAgICAgIFwiZXNjYXBlZE5hbWVcIjogXCJlc2NvZGVnZW5cIixcbiAgICAgICAgXCJuYW1lXCI6IFwiZXNjb2RlZ2VuXCIsXG4gICAgICAgIFwicmF3U3BlY1wiOiBcIl4xLjYuMVwiLFxuICAgICAgICBcInNwZWNcIjogXCI+PTEuNi4xIDwyLjAuMFwiLFxuICAgICAgICBcInR5cGVcIjogXCJyYW5nZVwiXG4gICAgICB9LFxuICAgICAgXCIvaG9tZS9nYWJyaWVsL0RvY3VtZW50cy93ZWItc2NyYXBlci1jaHJvbWUtZXh0ZW5zaW9uL25vZGVfbW9kdWxlcy9qc2RvbVwiXG4gICAgXVxuICBdLFxuICBcIl9mcm9tXCI6IFwiZXNjb2RlZ2VuQD49MS42LjEgPDIuMC4wXCIsXG4gIFwiX2lkXCI6IFwiZXNjb2RlZ2VuQDEuOC4xXCIsXG4gIFwiX2luQ2FjaGVcIjogdHJ1ZSxcbiAgXCJfbG9jYXRpb25cIjogXCIvZXNjb2RlZ2VuXCIsXG4gIFwiX25vZGVWZXJzaW9uXCI6IFwiNi4zLjBcIixcbiAgXCJfbnBtT3BlcmF0aW9uYWxJbnRlcm5hbFwiOiB7XG4gICAgXCJob3N0XCI6IFwicGFja2FnZXMtMTItd2VzdC5pbnRlcm5hbC5ucG1qcy5jb21cIixcbiAgICBcInRtcFwiOiBcInRtcC9lc2NvZGVnZW4tMS44LjEudGd6XzE0NzA1MDY3MjMwMDlfMC4xMjgxODY4MTI4NTcxNjU5M1wiXG4gIH0sXG4gIFwiX25wbVVzZXJcIjoge1xuICAgIFwibmFtZVwiOiBcIm1pY2hhZWxmaWNhcnJhXCIsXG4gICAgXCJlbWFpbFwiOiBcIm5wbUBtaWNoYWVsLmZpY2FycmEubWVcIlxuICB9LFxuICBcIl9ucG1WZXJzaW9uXCI6IFwiMy4xMC4zXCIsXG4gIFwiX3BoYW50b21DaGlsZHJlblwiOiB7XG4gICAgXCJhbWRlZmluZVwiOiBcIjEuMC4xXCJcbiAgfSxcbiAgXCJfcmVxdWVzdGVkXCI6IHtcbiAgICBcInJhd1wiOiBcImVzY29kZWdlbkBeMS42LjFcIixcbiAgICBcInNjb3BlXCI6IG51bGwsXG4gICAgXCJlc2NhcGVkTmFtZVwiOiBcImVzY29kZWdlblwiLFxuICAgIFwibmFtZVwiOiBcImVzY29kZWdlblwiLFxuICAgIFwicmF3U3BlY1wiOiBcIl4xLjYuMVwiLFxuICAgIFwic3BlY1wiOiBcIj49MS42LjEgPDIuMC4wXCIsXG4gICAgXCJ0eXBlXCI6IFwicmFuZ2VcIlxuICB9LFxuICBcIl9yZXF1aXJlZEJ5XCI6IFtcbiAgICBcIi9qc2RvbVwiXG4gIF0sXG4gIFwiX3Jlc29sdmVkXCI6IFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjb2RlZ2VuLy0vZXNjb2RlZ2VuLTEuOC4xLnRnelwiLFxuICBcIl9zaGFzdW1cIjogXCI1YTViNTNhZjQ2OTMxMTBiZWJiMDg2N2FhMzQzMGRkM2I3MGExMDE4XCIsXG4gIFwiX3Nocmlua3dyYXBcIjogbnVsbCxcbiAgXCJfc3BlY1wiOiBcImVzY29kZWdlbkBeMS42LjFcIixcbiAgXCJfd2hlcmVcIjogXCIvaG9tZS9nYWJyaWVsL0RvY3VtZW50cy93ZWItc2NyYXBlci1jaHJvbWUtZXh0ZW5zaW9uL25vZGVfbW9kdWxlcy9qc2RvbVwiLFxuICBcImJpblwiOiB7XG4gICAgXCJlc2dlbmVyYXRlXCI6IFwiLi9iaW4vZXNnZW5lcmF0ZS5qc1wiLFxuICAgIFwiZXNjb2RlZ2VuXCI6IFwiLi9iaW4vZXNjb2RlZ2VuLmpzXCJcbiAgfSxcbiAgXCJidWdzXCI6IHtcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9lc3Rvb2xzL2VzY29kZWdlbi9pc3N1ZXNcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJlc3ByaW1hXCI6IFwiXjIuNy4xXCIsXG4gICAgXCJlc3RyYXZlcnNlXCI6IFwiXjEuOS4xXCIsXG4gICAgXCJlc3V0aWxzXCI6IFwiXjIuMC4yXCIsXG4gICAgXCJvcHRpb25hdG9yXCI6IFwiXjAuOC4xXCIsXG4gICAgXCJzb3VyY2UtbWFwXCI6IFwifjAuMi4wXCJcbiAgfSxcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkVDTUFTY3JpcHQgY29kZSBnZW5lcmF0b3JcIixcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYWNvcm5cIjogXCJeMi43LjBcIixcbiAgICBcImJsdWViaXJkXCI6IFwiXjIuMy4xMVwiLFxuICAgIFwiYm93ZXItcmVnaXN0cnktY2xpZW50XCI6IFwiXjAuMi4xXCIsXG4gICAgXCJjaGFpXCI6IFwiXjEuMTAuMFwiLFxuICAgIFwiY29tbW9uanMtZXZlcnl3aGVyZVwiOiBcIl4wLjkuN1wiLFxuICAgIFwiZ3VscFwiOiBcIl4zLjguMTBcIixcbiAgICBcImd1bHAtZXNsaW50XCI6IFwiXjAuMi4wXCIsXG4gICAgXCJndWxwLW1vY2hhXCI6IFwiXjIuMC4wXCIsXG4gICAgXCJzZW12ZXJcIjogXCJeNS4xLjBcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHt9LFxuICBcImRpc3RcIjoge1xuICAgIFwic2hhc3VtXCI6IFwiNWE1YjUzYWY0NjkzMTEwYmViYjA4NjdhYTM0MzBkZDNiNzBhMTAxOFwiLFxuICAgIFwidGFyYmFsbFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY29kZWdlbi8tL2VzY29kZWdlbi0xLjguMS50Z3pcIlxuICB9LFxuICBcImVuZ2luZXNcIjoge1xuICAgIFwibm9kZVwiOiBcIj49MC4xMi4wXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJMSUNFTlNFLkJTRFwiLFxuICAgIFwiTElDRU5TRS5zb3VyY2UtbWFwXCIsXG4gICAgXCJSRUFETUUubWRcIixcbiAgICBcImJpblwiLFxuICAgIFwiZXNjb2RlZ2VuLmpzXCIsXG4gICAgXCJwYWNrYWdlLmpzb25cIlxuICBdLFxuICBcImdpdEhlYWRcIjogXCJiYTRmYWFiYjIyNGIyZDVlMDA4MGM4ZTRmOTY0NzAyYjY5OWM3ZDFmXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9lc3Rvb2xzL2VzY29kZWdlblwiLFxuICBcImxpY2Vuc2VcIjogXCJCU0QtMi1DbGF1c2VcIixcbiAgXCJtYWluXCI6IFwiZXNjb2RlZ2VuLmpzXCIsXG4gIFwibWFpbnRhaW5lcnNcIjogW1xuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcImNvbnN0ZWxsYXRpb25cIixcbiAgICAgIFwiZW1haWxcIjogXCJ1dGF0YW5lLnRlYUBnbWFpbC5jb21cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwibWljaGFlbGZpY2FycmFcIixcbiAgICAgIFwiZW1haWxcIjogXCJucG1AbWljaGFlbC5maWNhcnJhLm1lXCJcbiAgICB9XG4gIF0sXG4gIFwibmFtZVwiOiBcImVzY29kZWdlblwiLFxuICBcIm9wdGlvbmFsRGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcInNvdXJjZS1tYXBcIjogXCJ+MC4yLjBcIlxuICB9LFxuICBcInJlYWRtZVwiOiBcIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCFcIixcbiAgXCJyZXBvc2l0b3J5XCI6IHtcbiAgICBcInR5cGVcIjogXCJnaXRcIixcbiAgICBcInVybFwiOiBcImdpdCtzc2g6Ly9naXRAZ2l0aHViLmNvbS9lc3Rvb2xzL2VzY29kZWdlbi5naXRcIlxuICB9LFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwiYnVpbGRcIjogXCJjanNpZnkgLWEgcGF0aDogdG9vbHMvZW50cnktcG9pbnQuanMgPiBlc2NvZGVnZW4uYnJvd3Nlci5qc1wiLFxuICAgIFwiYnVpbGQtbWluXCI6IFwiY2pzaWZ5IC1tYSBwYXRoOiB0b29scy9lbnRyeS1wb2ludC5qcyA+IGVzY29kZWdlbi5icm93c2VyLm1pbi5qc1wiLFxuICAgIFwibGludFwiOiBcImd1bHAgbGludFwiLFxuICAgIFwicmVsZWFzZVwiOiBcIm5vZGUgdG9vbHMvcmVsZWFzZS5qc1wiLFxuICAgIFwidGVzdFwiOiBcImd1bHAgdHJhdmlzXCIsXG4gICAgXCJ1bml0LXRlc3RcIjogXCJndWxwIHRlc3RcIlxuICB9LFxuICBcInZlcnNpb25cIjogXCIxLjguMVwiXG59XG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxMiBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuLypqc2xpbnQgdmFyczpmYWxzZSwgYml0d2lzZTp0cnVlKi9cbi8qanNoaW50IGluZGVudDo0Ki9cbi8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSwgZGVmaW5lOnRydWUqL1xuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLFxuICAgIC8vIGFuZCBwbGFpbiBicm93c2VyIGxvYWRpbmcsXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGZhY3RvcnkoZXhwb3J0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZmFjdG9yeSgocm9vdC5lc3RyYXZlcnNlID0ge30pKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIGNsb25lKGV4cG9ydHMpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgU3ludGF4LFxuICAgICAgICBpc0FycmF5LFxuICAgICAgICBWaXNpdG9yT3B0aW9uLFxuICAgICAgICBWaXNpdG9yS2V5cyxcbiAgICAgICAgb2JqZWN0Q3JlYXRlLFxuICAgICAgICBvYmplY3RLZXlzLFxuICAgICAgICBCUkVBSyxcbiAgICAgICAgU0tJUCxcbiAgICAgICAgUkVNT1ZFO1xuXG4gICAgZnVuY3Rpb24gaWdub3JlSlNIaW50RXJyb3IoKSB7IH1cblxuICAgIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuICAgIGlmICghaXNBcnJheSkge1xuICAgICAgICBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnJheSkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7XG4gICAgICAgIHZhciByZXQgPSB7fSwga2V5LCB2YWw7XG4gICAgICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gb2JqW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXRba2V5XSA9IGRlZXBDb3B5KHZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W2tleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7XG4gICAgICAgIHZhciByZXQgPSB7fSwga2V5O1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgaWdub3JlSlNIaW50RXJyb3Ioc2hhbGxvd0NvcHkpO1xuXG4gICAgLy8gYmFzZWQgb24gTExWTSBsaWJjKysgdXBwZXJfYm91bmQgLyBsb3dlcl9ib3VuZFxuICAgIC8vIE1JVCBMaWNlbnNlXG5cbiAgICBmdW5jdGlvbiB1cHBlckJvdW5kKGFycmF5LCBmdW5jKSB7XG4gICAgICAgIHZhciBkaWZmLCBsZW4sIGksIGN1cnJlbnQ7XG5cbiAgICAgICAgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICBpID0gMDtcblxuICAgICAgICB3aGlsZSAobGVuKSB7XG4gICAgICAgICAgICBkaWZmID0gbGVuID4+PiAxO1xuICAgICAgICAgICAgY3VycmVudCA9IGkgKyBkaWZmO1xuICAgICAgICAgICAgaWYgKGZ1bmMoYXJyYXlbY3VycmVudF0pKSB7XG4gICAgICAgICAgICAgICAgbGVuID0gZGlmZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaSA9IGN1cnJlbnQgKyAxO1xuICAgICAgICAgICAgICAgIGxlbiAtPSBkaWZmICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb3dlckJvdW5kKGFycmF5LCBmdW5jKSB7XG4gICAgICAgIHZhciBkaWZmLCBsZW4sIGksIGN1cnJlbnQ7XG5cbiAgICAgICAgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICBpID0gMDtcblxuICAgICAgICB3aGlsZSAobGVuKSB7XG4gICAgICAgICAgICBkaWZmID0gbGVuID4+PiAxO1xuICAgICAgICAgICAgY3VycmVudCA9IGkgKyBkaWZmO1xuICAgICAgICAgICAgaWYgKGZ1bmMoYXJyYXlbY3VycmVudF0pKSB7XG4gICAgICAgICAgICAgICAgaSA9IGN1cnJlbnQgKyAxO1xuICAgICAgICAgICAgICAgIGxlbiAtPSBkaWZmICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGVuID0gZGlmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG4gICAgaWdub3JlSlNIaW50RXJyb3IobG93ZXJCb3VuZCk7XG5cbiAgICBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIEYoKSB7IH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIEYucHJvdG90eXBlID0gbztcbiAgICAgICAgICAgIHJldHVybiBuZXcgRigpO1xuICAgICAgICB9O1xuICAgIH0pKCk7XG5cbiAgICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXSwga2V5O1xuICAgICAgICBmb3IgKGtleSBpbiBvKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBrZXlzID0gb2JqZWN0S2V5cyhmcm9tKSwga2V5LCBpLCBsZW47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IGtleXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG5cbiAgICBTeW50YXggPSB7XG4gICAgICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLFxuICAgICAgICBBcnJheUV4cHJlc3Npb246ICdBcnJheUV4cHJlc3Npb24nLFxuICAgICAgICBBcnJheVBhdHRlcm46ICdBcnJheVBhdHRlcm4nLFxuICAgICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJyxcbiAgICAgICAgQXdhaXRFeHByZXNzaW9uOiAnQXdhaXRFeHByZXNzaW9uJywgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIEJsb2NrU3RhdGVtZW50OiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbicsXG4gICAgICAgIEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLFxuICAgICAgICBDYWxsRXhwcmVzc2lvbjogJ0NhbGxFeHByZXNzaW9uJyxcbiAgICAgICAgQ2F0Y2hDbGF1c2U6ICdDYXRjaENsYXVzZScsXG4gICAgICAgIENsYXNzQm9keTogJ0NsYXNzQm9keScsXG4gICAgICAgIENsYXNzRGVjbGFyYXRpb246ICdDbGFzc0RlY2xhcmF0aW9uJyxcbiAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiAnQ2xhc3NFeHByZXNzaW9uJyxcbiAgICAgICAgQ29tcHJlaGVuc2lvbkJsb2NrOiAnQ29tcHJlaGVuc2lvbkJsb2NrJywgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBDb21wcmVoZW5zaW9uRXhwcmVzc2lvbjogJ0NvbXByZWhlbnNpb25FeHByZXNzaW9uJywgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdDb25kaXRpb25hbEV4cHJlc3Npb24nLFxuICAgICAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVtZW50JyxcbiAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6ICdEZWJ1Z2dlclN0YXRlbWVudCcsXG4gICAgICAgIERpcmVjdGl2ZVN0YXRlbWVudDogJ0RpcmVjdGl2ZVN0YXRlbWVudCcsXG4gICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50JyxcbiAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6ICdFbXB0eVN0YXRlbWVudCcsXG4gICAgICAgIEV4cG9ydEJhdGNoU3BlY2lmaWVyOiAnRXhwb3J0QmF0Y2hTcGVjaWZpZXInLFxuICAgICAgICBFeHBvcnREZWNsYXJhdGlvbjogJ0V4cG9ydERlY2xhcmF0aW9uJyxcbiAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiAnRXhwb3J0U3BlY2lmaWVyJyxcbiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Npb25TdGF0ZW1lbnQnLFxuICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLFxuICAgICAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JyxcbiAgICAgICAgRm9yT2ZTdGF0ZW1lbnQ6ICdGb3JPZlN0YXRlbWVudCcsXG4gICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJyxcbiAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJyxcbiAgICAgICAgR2VuZXJhdG9yRXhwcmVzc2lvbjogJ0dlbmVyYXRvckV4cHJlc3Npb24nLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJyxcbiAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVudCcsXG4gICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiAnSW1wb3J0RGVjbGFyYXRpb24nLFxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydFNwZWNpZmllcjogJ0ltcG9ydFNwZWNpZmllcicsXG4gICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJyxcbiAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLFxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHByZXNzaW9uJyxcbiAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLFxuICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlvbicsXG4gICAgICAgIE1vZHVsZVNwZWNpZmllcjogJ01vZHVsZVNwZWNpZmllcicsXG4gICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJyxcbiAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLFxuICAgICAgICBPYmplY3RQYXR0ZXJuOiAnT2JqZWN0UGF0dGVybicsXG4gICAgICAgIFByb2dyYW06ICdQcm9ncmFtJyxcbiAgICAgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsXG4gICAgICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcsXG4gICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNlRXhwcmVzc2lvbicsXG4gICAgICAgIFNwcmVhZEVsZW1lbnQ6ICdTcHJlYWRFbGVtZW50JyxcbiAgICAgICAgU3dpdGNoU3RhdGVtZW50OiAnU3dpdGNoU3RhdGVtZW50JyxcbiAgICAgICAgU3dpdGNoQ2FzZTogJ1N3aXRjaENhc2UnLFxuICAgICAgICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246ICdUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24nLFxuICAgICAgICBUZW1wbGF0ZUVsZW1lbnQ6ICdUZW1wbGF0ZUVsZW1lbnQnLFxuICAgICAgICBUZW1wbGF0ZUxpdGVyYWw6ICdUZW1wbGF0ZUxpdGVyYWwnLFxuICAgICAgICBUaGlzRXhwcmVzc2lvbjogJ1RoaXNFeHByZXNzaW9uJyxcbiAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6ICdUaHJvd1N0YXRlbWVudCcsXG4gICAgICAgIFRyeVN0YXRlbWVudDogJ1RyeVN0YXRlbWVudCcsXG4gICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogJ1VuYXJ5RXhwcmVzc2lvbicsXG4gICAgICAgIFVwZGF0ZUV4cHJlc3Npb246ICdVcGRhdGVFeHByZXNzaW9uJyxcbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLFxuICAgICAgICBWYXJpYWJsZURlY2xhcmF0b3I6ICdWYXJpYWJsZURlY2xhcmF0b3InLFxuICAgICAgICBXaGlsZVN0YXRlbWVudDogJ1doaWxlU3RhdGVtZW50JyxcbiAgICAgICAgV2l0aFN0YXRlbWVudDogJ1dpdGhTdGF0ZW1lbnQnLFxuICAgICAgICBZaWVsZEV4cHJlc3Npb246ICdZaWVsZEV4cHJlc3Npb24nXG4gICAgfTtcblxuICAgIFZpc2l0b3JLZXlzID0ge1xuICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIEFycmF5RXhwcmVzc2lvbjogWydlbGVtZW50cyddLFxuICAgICAgICBBcnJheVBhdHRlcm46IFsnZWxlbWVudHMnXSxcbiAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IFsncGFyYW1zJywgJ2RlZmF1bHRzJywgJ3Jlc3QnLCAnYm9keSddLFxuICAgICAgICBBd2FpdEV4cHJlc3Npb246IFsnYXJndW1lbnQnXSwgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIEJsb2NrU3RhdGVtZW50OiBbJ2JvZHknXSxcbiAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIEJyZWFrU3RhdGVtZW50OiBbJ2xhYmVsJ10sXG4gICAgICAgIENhbGxFeHByZXNzaW9uOiBbJ2NhbGxlZScsICdhcmd1bWVudHMnXSxcbiAgICAgICAgQ2F0Y2hDbGF1c2U6IFsncGFyYW0nLCAnYm9keSddLFxuICAgICAgICBDbGFzc0JvZHk6IFsnYm9keSddLFxuICAgICAgICBDbGFzc0RlY2xhcmF0aW9uOiBbJ2lkJywgJ2JvZHknLCAnc3VwZXJDbGFzcyddLFxuICAgICAgICBDbGFzc0V4cHJlc3Npb246IFsnaWQnLCAnYm9keScsICdzdXBlckNsYXNzJ10sXG4gICAgICAgIENvbXByZWhlbnNpb25CbG9jazogWydsZWZ0JywgJ3JpZ2h0J10sICAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQ29tcHJlaGVuc2lvbkV4cHJlc3Npb246IFsnYmxvY2tzJywgJ2ZpbHRlcicsICdib2R5J10sICAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBbJ3Rlc3QnLCAnY29uc2VxdWVudCcsICdhbHRlcm5hdGUnXSxcbiAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6IFsnbGFiZWwnXSxcbiAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6IFtdLFxuICAgICAgICBEaXJlY3RpdmVTdGF0ZW1lbnQ6IFtdLFxuICAgICAgICBEb1doaWxlU3RhdGVtZW50OiBbJ2JvZHknLCAndGVzdCddLFxuICAgICAgICBFbXB0eVN0YXRlbWVudDogW10sXG4gICAgICAgIEV4cG9ydEJhdGNoU3BlY2lmaWVyOiBbXSxcbiAgICAgICAgRXhwb3J0RGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb24nLCAnc3BlY2lmaWVycycsICdzb3VyY2UnXSxcbiAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiBbJ2lkJywgJ25hbWUnXSxcbiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogWydleHByZXNzaW9uJ10sXG4gICAgICAgIEZvclN0YXRlbWVudDogWydpbml0JywgJ3Rlc3QnLCAndXBkYXRlJywgJ2JvZHknXSxcbiAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6IFsnbGVmdCcsICdyaWdodCcsICdib2R5J10sXG4gICAgICAgIEZvck9mU3RhdGVtZW50OiBbJ2xlZnQnLCAncmlnaHQnLCAnYm9keSddLFxuICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBbJ2lkJywgJ3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0JywgJ2JvZHknXSxcbiAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiBbJ2lkJywgJ3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0JywgJ2JvZHknXSxcbiAgICAgICAgR2VuZXJhdG9yRXhwcmVzc2lvbjogWydibG9ja3MnLCAnZmlsdGVyJywgJ2JvZHknXSwgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBJZGVudGlmaWVyOiBbXSxcbiAgICAgICAgSWZTdGF0ZW1lbnQ6IFsndGVzdCcsICdjb25zZXF1ZW50JywgJ2FsdGVybmF0ZSddLFxuICAgICAgICBJbXBvcnREZWNsYXJhdGlvbjogWydzcGVjaWZpZXJzJywgJ3NvdXJjZSddLFxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBbJ2lkJ10sXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogWydpZCddLFxuICAgICAgICBJbXBvcnRTcGVjaWZpZXI6IFsnaWQnLCAnbmFtZSddLFxuICAgICAgICBMaXRlcmFsOiBbXSxcbiAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogWydsYWJlbCcsICdib2R5J10sXG4gICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiBbJ2xlZnQnLCAncmlnaHQnXSxcbiAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogWydvYmplY3QnLCAncHJvcGVydHknXSxcbiAgICAgICAgTWV0aG9kRGVmaW5pdGlvbjogWydrZXknLCAndmFsdWUnXSxcbiAgICAgICAgTW9kdWxlU3BlY2lmaWVyOiBbXSxcbiAgICAgICAgTmV3RXhwcmVzc2lvbjogWydjYWxsZWUnLCAnYXJndW1lbnRzJ10sXG4gICAgICAgIE9iamVjdEV4cHJlc3Npb246IFsncHJvcGVydGllcyddLFxuICAgICAgICBPYmplY3RQYXR0ZXJuOiBbJ3Byb3BlcnRpZXMnXSxcbiAgICAgICAgUHJvZ3JhbTogWydib2R5J10sXG4gICAgICAgIFByb3BlcnR5OiBbJ2tleScsICd2YWx1ZSddLFxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiBbJ2V4cHJlc3Npb25zJ10sXG4gICAgICAgIFNwcmVhZEVsZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgU3dpdGNoU3RhdGVtZW50OiBbJ2Rpc2NyaW1pbmFudCcsICdjYXNlcyddLFxuICAgICAgICBTd2l0Y2hDYXNlOiBbJ3Rlc3QnLCAnY29uc2VxdWVudCddLFxuICAgICAgICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IFsndGFnJywgJ3F1YXNpJ10sXG4gICAgICAgIFRlbXBsYXRlRWxlbWVudDogW10sXG4gICAgICAgIFRlbXBsYXRlTGl0ZXJhbDogWydxdWFzaXMnLCAnZXhwcmVzc2lvbnMnXSxcbiAgICAgICAgVGhpc0V4cHJlc3Npb246IFtdLFxuICAgICAgICBUaHJvd1N0YXRlbWVudDogWydhcmd1bWVudCddLFxuICAgICAgICBUcnlTdGF0ZW1lbnQ6IFsnYmxvY2snLCAnaGFuZGxlcnMnLCAnaGFuZGxlcicsICdndWFyZGVkSGFuZGxlcnMnLCAnZmluYWxpemVyJ10sXG4gICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogWydhcmd1bWVudCddLFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb25zJ10sXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogWydpZCcsICdpbml0J10sXG4gICAgICAgIFdoaWxlU3RhdGVtZW50OiBbJ3Rlc3QnLCAnYm9keSddLFxuICAgICAgICBXaXRoU3RhdGVtZW50OiBbJ29iamVjdCcsICdib2R5J10sXG4gICAgICAgIFlpZWxkRXhwcmVzc2lvbjogWydhcmd1bWVudCddXG4gICAgfTtcblxuICAgIC8vIHVuaXF1ZSBpZFxuICAgIEJSRUFLID0ge307XG4gICAgU0tJUCA9IHt9O1xuICAgIFJFTU9WRSA9IHt9O1xuXG4gICAgVmlzaXRvck9wdGlvbiA9IHtcbiAgICAgICAgQnJlYWs6IEJSRUFLLFxuICAgICAgICBTa2lwOiBTS0lQLFxuICAgICAgICBSZW1vdmU6IFJFTU9WRVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBSZWZlcmVuY2UocGFyZW50LCBrZXkpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIH1cblxuICAgIFJlZmVyZW5jZS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uobm9kZSkge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLmtleV0gPSBub2RlO1xuICAgIH07XG5cbiAgICBSZWZlcmVuY2UucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodGhpcy5wYXJlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5zcGxpY2UodGhpcy5rZXksIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2UobnVsbCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gRWxlbWVudChub2RlLCBwYXRoLCB3cmFwLCByZWYpIHtcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgdGhpcy5yZWYgPSByZWY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gQ29udHJvbGxlcigpIHsgfVxuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJldHVybiBwcm9wZXJ0eSBwYXRoIGFycmF5IGZyb20gcm9vdCB0byBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24gcGF0aCgpIHtcbiAgICAgICAgdmFyIGksIGl6LCBqLCBqeiwgcmVzdWx0LCBlbGVtZW50O1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZFRvUGF0aChyZXN1bHQsIHBhdGgpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHBhdGgpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMCwganogPSBwYXRoLmxlbmd0aDsgaiA8IGp6OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aFtqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJvb3Qgbm9kZVxuICAgICAgICBpZiAoIXRoaXMuX19jdXJyZW50LnBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmlyc3Qgbm9kZSBpcyBzZW50aW5lbCwgc2Vjb25kIG5vZGUgaXMgcm9vdCBlbGVtZW50XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAyLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMuX19sZWF2ZWxpc3RbaV07XG4gICAgICAgICAgICBhZGRUb1BhdGgocmVzdWx0LCBlbGVtZW50LnBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRvUGF0aChyZXN1bHQsIHRoaXMuX19jdXJyZW50LnBhdGgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIHR5cGUgb2YgY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUudHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmN1cnJlbnQoKTtcbiAgICAgICAgcmV0dXJuIG5vZGUudHlwZSB8fCB0aGlzLl9fY3VycmVudC53cmFwO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIGFycmF5IG9mIHBhcmVudCBlbGVtZW50c1xuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnBhcmVudHMgPSBmdW5jdGlvbiBwYXJlbnRzKCkge1xuICAgICAgICB2YXIgaSwgaXosIHJlc3VsdDtcblxuICAgICAgICAvLyBmaXJzdCBub2RlIGlzIHNlbnRpbmVsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAxLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5fX2xlYXZlbGlzdFtpXS5ub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyByZXR1cm4gY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIGN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fY3VycmVudC5ub2RlO1xuICAgIH07XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5fX2V4ZWN1dGUgPSBmdW5jdGlvbiBfX2V4ZWN1dGUoY2FsbGJhY2ssIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzLCByZXN1bHQ7XG5cbiAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHByZXZpb3VzICA9IHRoaXMuX19jdXJyZW50O1xuICAgICAgICB0aGlzLl9fY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX19zdGF0ZSA9IG51bGw7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2suY2FsbCh0aGlzLCBlbGVtZW50Lm5vZGUsIHRoaXMuX19sZWF2ZWxpc3RbdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGggLSAxXS5ub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9fY3VycmVudCA9IHByZXZpb3VzO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyBub3RpZnkgY29udHJvbCBza2lwIC8gYnJlYWtcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZmxhZykge1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBmbGFnO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gc2tpcCBjaGlsZCBub2RlcyBvZiBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5vdGlmeShTS0lQKTtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIGJyZWFrIHRyYXZlcnNhbHNcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZVsnYnJlYWsnXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoQlJFQUspO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmVtb3ZlIG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KFJFTU9WRSk7XG4gICAgfTtcblxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdGhpcy52aXNpdG9yID0gdmlzaXRvcjtcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgdGhpcy5fX3dvcmtsaXN0ID0gW107XG4gICAgICAgIHRoaXMuX19sZWF2ZWxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5fX2N1cnJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9fZmFsbGJhY2sgPSB2aXNpdG9yLmZhbGxiYWNrID09PSAnaXRlcmF0aW9uJztcbiAgICAgICAgdGhpcy5fX2tleXMgPSBWaXNpdG9yS2V5cztcbiAgICAgICAgaWYgKHZpc2l0b3Iua2V5cykge1xuICAgICAgICAgICAgdGhpcy5fX2tleXMgPSBleHRlbmQob2JqZWN0Q3JlYXRlKHRoaXMuX19rZXlzKSwgdmlzaXRvci5rZXlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpc05vZGUobm9kZSkge1xuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZS50eXBlID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Byb3BlcnR5KG5vZGVUeXBlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIChub2RlVHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RQYXR0ZXJuKSAmJiAncHJvcGVydGllcycgPT09IGtleTtcbiAgICB9XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIHdvcmtsaXN0LFxuICAgICAgICAgICAgbGVhdmVsaXN0LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBjdXJyZW50MixcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICAgICAgICBjYW5kaWRhdGUsXG4gICAgICAgICAgICBzZW50aW5lbDtcblxuICAgICAgICB0aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNpdG9yKTtcblxuICAgICAgICBzZW50aW5lbCA9IHt9O1xuXG4gICAgICAgIC8vIHJlZmVyZW5jZVxuICAgICAgICB3b3JrbGlzdCA9IHRoaXMuX193b3JrbGlzdDtcbiAgICAgICAgbGVhdmVsaXN0ID0gdGhpcy5fX2xlYXZlbGlzdDtcblxuICAgICAgICAvLyBpbml0aWFsaXplXG4gICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQocm9vdCwgbnVsbCwgbnVsbCwgbnVsbCkpO1xuICAgICAgICBsZWF2ZWxpc3QucHVzaChuZXcgRWxlbWVudChudWxsLCBudWxsLCBudWxsLCBudWxsKSk7XG5cbiAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gc2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gbGVhdmVsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5sZWF2ZSwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCByZXQgPT09IEJSRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGUpIHtcblxuICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IuZW50ZXIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgcmV0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7XG4gICAgICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBTS0lQIHx8IHJldCA9PT0gU0tJUCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlID0gZWxlbWVudC5ub2RlO1xuICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5vZGUudHlwZTtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gdGhpcy5fX2tleXNbbm9kZVR5cGVdO1xuICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gb2JqZWN0S2V5cyhub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub2RlIHR5cGUgJyArIG5vZGVUeXBlICsgJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBjYW5kaWRhdGVzW2N1cnJlbnRdO1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQyID0gY2FuZGlkYXRlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlW2N1cnJlbnQyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvcGVydHkobm9kZVR5cGUsIGNhbmRpZGF0ZXNbY3VycmVudF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sICdQcm9wZXJ0eScsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZVtjdXJyZW50Ml0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZShjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG5ldyBFbGVtZW50KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBudWxsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uocm9vdCwgdmlzaXRvcikge1xuICAgICAgICBmdW5jdGlvbiByZW1vdmVFbGVtKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBuZXh0RWxlbSxcbiAgICAgICAgICAgICAgICBwYXJlbnQ7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnJlZi5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIHJlZmVyZW5jZSBpcyBhbiBlbGVtZW50IG9mIGFuIGFycmF5LlxuICAgICAgICAgICAgICAgIGtleSA9IGVsZW1lbnQucmVmLmtleTtcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtZW50LnJlZi5wYXJlbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiByZW1vdmVkIGZyb20gYXJyYXksIHRoZW4gZGVjcmVhc2UgZm9sbG93aW5nIGl0ZW1zJyBrZXlzLlxuICAgICAgICAgICAgICAgIGkgPSB3b3JrbGlzdC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0RWxlbSA9IHdvcmtsaXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW0ucmVmICYmIG5leHRFbGVtLnJlZi5wYXJlbnQgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgIChuZXh0RWxlbS5yZWYua2V5IDwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAtLW5leHRFbGVtLnJlZi5rZXk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd29ya2xpc3QsXG4gICAgICAgICAgICBsZWF2ZWxpc3QsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbm9kZVR5cGUsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIGN1cnJlbnQyLFxuICAgICAgICAgICAgY2FuZGlkYXRlcyxcbiAgICAgICAgICAgIGNhbmRpZGF0ZSxcbiAgICAgICAgICAgIHNlbnRpbmVsLFxuICAgICAgICAgICAgb3V0ZXIsXG4gICAgICAgICAgICBrZXk7XG5cbiAgICAgICAgdGhpcy5fX2luaXRpYWxpemUocm9vdCwgdmlzaXRvcik7XG5cbiAgICAgICAgc2VudGluZWwgPSB7fTtcblxuICAgICAgICAvLyByZWZlcmVuY2VcbiAgICAgICAgd29ya2xpc3QgPSB0aGlzLl9fd29ya2xpc3Q7XG4gICAgICAgIGxlYXZlbGlzdCA9IHRoaXMuX19sZWF2ZWxpc3Q7XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZVxuICAgICAgICBvdXRlciA9IHtcbiAgICAgICAgICAgIHJvb3Q6IHJvb3RcbiAgICAgICAgfTtcbiAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KHJvb3QsIG51bGwsIG51bGwsIG5ldyBSZWZlcmVuY2Uob3V0ZXIsICdyb290JykpO1xuICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICBsZWF2ZWxpc3QucHVzaChlbGVtZW50KTtcblxuICAgICAgICB3aGlsZSAod29ya2xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gd29ya2xpc3QucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBzZW50aW5lbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBsZWF2ZWxpc3QucG9wKCk7XG5cbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmxlYXZlLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCxcbiAgICAgICAgICAgICAgICAvLyBzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuZGVmaW5lZCBhbmQgbnVsbCBpbiB0aGlzIHBsYWNlXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQICYmIHRhcmdldCAhPT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWYucmVwbGFjZSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFJFTU9WRSB8fCB0YXJnZXQgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFbGVtKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHRhcmdldCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmVudGVyLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgLy8gbm9kZSBtYXkgYmUgcmVwbGFjZWQgd2l0aCBudWxsLFxuICAgICAgICAgICAgLy8gc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmRlZmluZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZVxuICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQICYmIHRhcmdldCAhPT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjZVxuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmLnJlcGxhY2UodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm5vZGUgPSB0YXJnZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFJFTU9WRSB8fCB0YXJnZXQgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUVsZW0oZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5ub2RlID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgdGFyZ2V0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBub2RlIG1heSBiZSBudWxsXG4gICAgICAgICAgICBub2RlID0gZWxlbWVudC5ub2RlO1xuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc2VudGluZWwpO1xuICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFNLSVAgfHwgdGFyZ2V0ID09PSBTS0lQKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5vZGUudHlwZTtcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSB0aGlzLl9fa2V5c1tub2RlVHlwZV07XG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBvYmplY3RLZXlzKG5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub2RlIHR5cGUgJyArIG5vZGVUeXBlICsgJy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAtPSAxKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gY2FuZGlkYXRlc1tjdXJyZW50XTtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50MiA9IGNhbmRpZGF0ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVbY3VycmVudDJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eShub2RlVHlwZSwgY2FuZGlkYXRlc1tjdXJyZW50XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHknLCBuZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVudDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZVtjdXJyZW50Ml0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgbnVsbCwgbmV3IFJlZmVyZW5jZShjYW5kaWRhdGUsIGN1cnJlbnQyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChjYW5kaWRhdGUsIGtleSwgbnVsbCwgbmV3IFJlZmVyZW5jZShub2RlLCBrZXkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICByZXR1cm4gY29udHJvbGxlci50cmF2ZXJzZShyb290LCB2aXNpdG9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYWNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICByZXR1cm4gY29udHJvbGxlci5yZXBsYWNlKHJvb3QsIHZpc2l0b3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZENvbW1lbnRSYW5nZShjb21tZW50LCB0b2tlbnMpIHtcbiAgICAgICAgdmFyIHRhcmdldDtcblxuICAgICAgICB0YXJnZXQgPSB1cHBlckJvdW5kKHRva2VucywgZnVuY3Rpb24gc2VhcmNoKHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW4ucmFuZ2VbMF0gPiBjb21tZW50LnJhbmdlWzBdO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbY29tbWVudC5yYW5nZVswXSwgY29tbWVudC5yYW5nZVsxXV07XG5cbiAgICAgICAgaWYgKHRhcmdldCAhPT0gdG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID0gdG9rZW5zW3RhcmdldF0ucmFuZ2VbMF07XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXQgLT0gMTtcbiAgICAgICAgaWYgKHRhcmdldCA+PSAwKSB7XG4gICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0gPSB0b2tlbnNbdGFyZ2V0XS5yYW5nZVsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21tZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGF0dGFjaENvbW1lbnRzKHRyZWUsIHByb3ZpZGVkQ29tbWVudHMsIHRva2Vucykge1xuICAgICAgICAvLyBBdCBmaXJzdCwgd2Ugc2hvdWxkIGNhbGN1bGF0ZSBleHRlbmRlZCBjb21tZW50IHJhbmdlcy5cbiAgICAgICAgdmFyIGNvbW1lbnRzID0gW10sIGNvbW1lbnQsIGxlbiwgaSwgY3Vyc29yO1xuXG4gICAgICAgIGlmICghdHJlZS5yYW5nZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRhY2hDb21tZW50cyBuZWVkcyByYW5nZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG9rZW5zIGFycmF5IGlzIGVtcHR5LCB3ZSBhdHRhY2ggY29tbWVudHMgdG8gdHJlZSBhcyAnbGVhZGluZ0NvbW1lbnRzJ1xuICAgICAgICBpZiAoIXRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChwcm92aWRlZENvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbMCwgdHJlZS5yYW5nZVswXV07XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyZWUubGVhZGluZ0NvbW1lbnRzID0gY29tbWVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJlZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZXh0ZW5kQ29tbWVudFJhbmdlKGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pLCB0b2tlbnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgaXMgYmFzZWQgb24gSm9obiBGcmVlbWFuJ3MgaW1wbGVtZW50YXRpb24uXG4gICAgICAgIGN1cnNvciA9IDA7XG4gICAgICAgIHRyYXZlcnNlKHRyZWUsIHtcbiAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb21tZW50O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA+IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9PT0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGVcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnNvciA9IDA7XG4gICAgICAgIHRyYXZlcnNlKHRyZWUsIHtcbiAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb21tZW50O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPCBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPT09IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLnRyYWlsaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGVcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0cmVlO1xuICAgIH1cblxuICAgIGV4cG9ydHMudmVyc2lvbiA9ICcxLjguMS1kZXYnO1xuICAgIGV4cG9ydHMuU3ludGF4ID0gU3ludGF4O1xuICAgIGV4cG9ydHMudHJhdmVyc2UgPSB0cmF2ZXJzZTtcbiAgICBleHBvcnRzLnJlcGxhY2UgPSByZXBsYWNlO1xuICAgIGV4cG9ydHMuYXR0YWNoQ29tbWVudHMgPSBhdHRhY2hDb21tZW50cztcbiAgICBleHBvcnRzLlZpc2l0b3JLZXlzID0gVmlzaXRvcktleXM7XG4gICAgZXhwb3J0cy5WaXNpdG9yT3B0aW9uID0gVmlzaXRvck9wdGlvbjtcbiAgICBleHBvcnRzLkNvbnRyb2xsZXIgPSBDb250cm9sbGVyO1xuICAgIGV4cG9ydHMuY2xvbmVFbnZpcm9ubWVudCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNsb25lKHt9KTsgfTtcblxuICAgIHJldHVybiBleHBvcnRzO1xufSkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAnQVMgSVMnXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgZnVuY3Rpb24gaXNFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0FycmF5RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdBc3NpZ25tZW50RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdCaW5hcnlFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ0NhbGxFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdGdW5jdGlvbkV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnSWRlbnRpZmllcic6XG4gICAgICAgICAgICBjYXNlICdMaXRlcmFsJzpcbiAgICAgICAgICAgIGNhc2UgJ0xvZ2ljYWxFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ01lbWJlckV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnTmV3RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdPYmplY3RFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1NlcXVlbmNlRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdUaGlzRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdVbmFyeUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnVXBkYXRlRXhwcmVzc2lvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSXRlcmF0aW9uU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0RvV2hpbGVTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRm9ySW5TdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRm9yU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1doaWxlU3RhdGVtZW50JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnQmxvY2tTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnQnJlYWtTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnQ29udGludWVTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRGVidWdnZXJTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRG9XaGlsZVN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdFbXB0eVN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdFeHByZXNzaW9uU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0ZvckluU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0ZvclN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdJZlN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdMYWJlbGVkU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1JldHVyblN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdTd2l0Y2hTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnVGhyb3dTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnVHJ5U3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnV2hpbGVTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnV2l0aFN0YXRlbWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU291cmNlRWxlbWVudChub2RlKSB7XG4gICAgICByZXR1cm4gaXNTdGF0ZW1lbnQobm9kZSkgfHwgbm9kZSAhPSBudWxsICYmIG5vZGUudHlwZSA9PT0gJ0Z1bmN0aW9uRGVjbGFyYXRpb24nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYWlsaW5nU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnSWZTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5hbHRlcm5hdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5jb25zZXF1ZW50O1xuXG4gICAgICAgIGNhc2UgJ0xhYmVsZWRTdGF0ZW1lbnQnOlxuICAgICAgICBjYXNlICdGb3JTdGF0ZW1lbnQnOlxuICAgICAgICBjYXNlICdGb3JJblN0YXRlbWVudCc6XG4gICAgICAgIGNhc2UgJ1doaWxlU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnV2l0aFN0YXRlbWVudCc6XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5ib2R5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUHJvYmxlbWF0aWNJZlN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHZhciBjdXJyZW50O1xuXG4gICAgICAgIGlmIChub2RlLnR5cGUgIT09ICdJZlN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBub2RlLmNvbnNlcXVlbnQ7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50LnR5cGUgPT09ICdJZlN0YXRlbWVudCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5hbHRlcm5hdGUgPT0gbnVsbCkgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudCA9IHRyYWlsaW5nU3RhdGVtZW50KGN1cnJlbnQpO1xuICAgICAgICB9IHdoaWxlIChjdXJyZW50KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIGlzRXhwcmVzc2lvbjogaXNFeHByZXNzaW9uLFxuICAgICAgICBpc1N0YXRlbWVudDogaXNTdGF0ZW1lbnQsXG4gICAgICAgIGlzSXRlcmF0aW9uU3RhdGVtZW50OiBpc0l0ZXJhdGlvblN0YXRlbWVudCxcbiAgICAgICAgaXNTb3VyY2VFbGVtZW50OiBpc1NvdXJjZUVsZW1lbnQsXG4gICAgICAgIGlzUHJvYmxlbWF0aWNJZlN0YXRlbWVudDogaXNQcm9ibGVtYXRpY0lmU3RhdGVtZW50LFxuXG4gICAgICAgIHRyYWlsaW5nU3RhdGVtZW50OiB0cmFpbGluZ1N0YXRlbWVudFxuICAgIH07XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDE0IEl2YW4gTmlrdWxpbiA8aWZhYWFuQGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBFUzZSZWdleCwgRVM1UmVnZXgsIE5PTl9BU0NJSV9XSElURVNQQUNFUywgSURFTlRJRklFUl9TVEFSVCwgSURFTlRJRklFUl9QQVJULCBjaDtcblxuICAgIC8vIFNlZSBgdG9vbHMvZ2VuZXJhdGUtaWRlbnRpZmllci1yZWdleC5qc2AuXG4gICAgRVM1UmVnZXggPSB7XG4gICAgICAgIC8vIEVDTUFTY3JpcHQgNS4xL1VuaWNvZGUgdjcuMC4wIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OlxuICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogL1tcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTAtXFx1MDhCMlxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OFxcdTBDNTlcXHUwQzYwXFx1MEM2MVxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ2MFxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQUQtXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN1xcdTE3RENcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlDMS1cXHUxOUM3XFx1MUEwMC1cXHUxQTE2XFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YxXFx1MUNGNVxcdTFDRjZcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE2MC1cXHUyMTg4XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyRTJGXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDI5XFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkNDXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RUZcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3OEVcXHVBNzkwLVxcdUE3QURcXHVBN0IwXFx1QTdCMVxcdUE3RjctXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjVGXFx1QUI2NFxcdUFCNjVcXHVBQkMwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdLyxcbiAgICAgICAgLy8gRUNNQVNjcmlwdCA1LjEvVW5pY29kZSB2Ny4wLjAgTm9uQXNjaWlJZGVudGlmaWVyUGFydDpcbiAgICAgICAgTm9uQXNjaWlJZGVudGlmaWVyUGFydDogL1tcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDMwMC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDgzLVxcdTA0ODdcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzVcXHUwNUM3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYxMC1cXHUwNjFBXFx1MDYyMC1cXHUwNjY5XFx1MDY2RS1cXHUwNkQzXFx1MDZENS1cXHUwNkRDXFx1MDZERi1cXHUwNkU4XFx1MDZFQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTAtXFx1MDc0QVxcdTA3NEQtXFx1MDdCMVxcdTA3QzAtXFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MkRcXHUwODQwLVxcdTA4NUJcXHUwOEEwLVxcdTA4QjJcXHUwOEU0LVxcdTA5NjNcXHUwOTY2LVxcdTA5NkZcXHUwOTcxLVxcdTA5ODNcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJDLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRVxcdTA5RDdcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFM1xcdTA5RTYtXFx1MDlGMVxcdTBBMDEtXFx1MEEwM1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEEzQ1xcdTBBM0UtXFx1MEE0MlxcdTBBNDdcXHUwQTQ4XFx1MEE0Qi1cXHUwQTREXFx1MEE1MVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTY2LVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkMtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRDBcXHUwQUUwLVxcdTBBRTNcXHUwQUU2LVxcdTBBRUZcXHUwQjAxLVxcdTBCMDNcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzQy1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYzXFx1MEI2Ni1cXHUwQjZGXFx1MEI3MVxcdTBCODJcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCQkUtXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDRFxcdTBCRDBcXHUwQkQ3XFx1MEJFNi1cXHUwQkVGXFx1MEMwMC1cXHUwQzAzXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRC1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzU4XFx1MEM1OVxcdTBDNjAtXFx1MEM2M1xcdTBDNjYtXFx1MEM2RlxcdTBDODEtXFx1MEM4M1xcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkMtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDRTAtXFx1MENFM1xcdTBDRTYtXFx1MENFRlxcdTBDRjFcXHUwQ0YyXFx1MEQwMS1cXHUwRDAzXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRC1cXHUwRDQ0XFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDRFXFx1MEQ1N1xcdTBENjAtXFx1MEQ2M1xcdTBENjYtXFx1MEQ2RlxcdTBEN0EtXFx1MEQ3RlxcdTBEODJcXHUwRDgzXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBEQ0FcXHUwRENGLVxcdTBERDRcXHUwREQ2XFx1MEREOC1cXHUwRERGXFx1MERFNi1cXHUwREVGXFx1MERGMlxcdTBERjNcXHUwRTAxLVxcdTBFM0FcXHUwRTQwLVxcdTBFNEVcXHUwRTUwLVxcdTBFNTlcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg3XFx1MEU4OFxcdTBFOEFcXHUwRThEXFx1MEU5NC1cXHUwRTk3XFx1MEU5OS1cXHUwRTlGXFx1MEVBMS1cXHUwRUEzXFx1MEVBNVxcdTBFQTdcXHUwRUFBXFx1MEVBQlxcdTBFQUQtXFx1MEVCOVxcdTBFQkItXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRUM4LVxcdTBFQ0RcXHUwRUQwLVxcdTBFRDlcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEYxOFxcdTBGMTlcXHUwRjIwLVxcdTBGMjlcXHUwRjM1XFx1MEYzN1xcdTBGMzlcXHUwRjNFLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjcxLVxcdTBGODRcXHUwRjg2LVxcdTBGOTdcXHUwRjk5LVxcdTBGQkNcXHUwRkM2XFx1MTAwMC1cXHUxMDQ5XFx1MTA1MC1cXHUxMDlEXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzNUQtXFx1MTM1RlxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxNFxcdTE3MjAtXFx1MTczNFxcdTE3NDAtXFx1MTc1M1xcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3NzJcXHUxNzczXFx1MTc4MC1cXHUxN0QzXFx1MTdEN1xcdTE3RENcXHUxN0REXFx1MTdFMC1cXHUxN0U5XFx1MTgwQi1cXHUxODBEXFx1MTgxMC1cXHUxODE5XFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MTk0Ni1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlCMC1cXHUxOUM5XFx1MTlEMC1cXHUxOUQ5XFx1MUEwMC1cXHUxQTFCXFx1MUEyMC1cXHUxQTVFXFx1MUE2MC1cXHUxQTdDXFx1MUE3Ri1cXHUxQTg5XFx1MUE5MC1cXHUxQTk5XFx1MUFBN1xcdTFBQjAtXFx1MUFCRFxcdTFCMDAtXFx1MUI0QlxcdTFCNTAtXFx1MUI1OVxcdTFCNkItXFx1MUI3M1xcdTFCODAtXFx1MUJGM1xcdTFDMDAtXFx1MUMzN1xcdTFDNDAtXFx1MUM0OVxcdTFDNEQtXFx1MUM3RFxcdTFDRDAtXFx1MUNEMlxcdTFDRDQtXFx1MUNGNlxcdTFDRjhcXHUxQ0Y5XFx1MUQwMC1cXHUxREY1XFx1MURGQy1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwMENcXHUyMDBEXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMEQwLVxcdTIwRENcXHUyMEUxXFx1MjBFNS1cXHUyMEYwXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEN0YtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJERTAtXFx1MkRGRlxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMkZcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDk5XFx1MzA5QVxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYyQlxcdUE2NDAtXFx1QTY2RlxcdUE2NzQtXFx1QTY3RFxcdUE2N0YtXFx1QTY5RFxcdUE2OUYtXFx1QTZGMVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTdBRFxcdUE3QjBcXHVBN0IxXFx1QTdGNy1cXHVBODI3XFx1QTg0MC1cXHVBODczXFx1QTg4MC1cXHVBOEM0XFx1QThEMC1cXHVBOEQ5XFx1QThFMC1cXHVBOEY3XFx1QThGQlxcdUE5MDAtXFx1QTkyRFxcdUE5MzAtXFx1QTk1M1xcdUE5NjAtXFx1QTk3Q1xcdUE5ODAtXFx1QTlDMFxcdUE5Q0YtXFx1QTlEOVxcdUE5RTAtXFx1QTlGRVxcdUFBMDAtXFx1QUEzNlxcdUFBNDAtXFx1QUE0RFxcdUFBNTAtXFx1QUE1OVxcdUFBNjAtXFx1QUE3NlxcdUFBN0EtXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFRlxcdUFBRjItXFx1QUFGNlxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI1RlxcdUFCNjRcXHVBQjY1XFx1QUJDMC1cXHVBQkVBXFx1QUJFQ1xcdUFCRURcXHVBQkYwLVxcdUFCRjlcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFELVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyRFxcdUZFMzNcXHVGRTM0XFx1RkU0RC1cXHVGRTRGXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYxMC1cXHVGRjE5XFx1RkYyMS1cXHVGRjNBXFx1RkYzRlxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ10vXG4gICAgfTtcblxuICAgIEVTNlJlZ2V4ID0ge1xuICAgICAgICAvLyBFQ01BU2NyaXB0IDYvVW5pY29kZSB2Ny4wLjAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6XG4gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiAvW1xceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDhBMC1cXHUwOEIyXFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4XFx1MEM1OVxcdTBDNjBcXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDYwXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUMxLVxcdTE5QzdcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjFcXHUxQ0Y1XFx1MUNGNlxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTgtXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTYwLVxcdTIxODhcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUItXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBN0FEXFx1QTdCMFxcdUE3QjFcXHVBN0Y3LVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI1RlxcdUFCNjRcXHVBQjY1XFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REQ0MC1cXHVERDc0XFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYzMC1cXHVERjRBXFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXFx1REZEMS1cXHVERkQ1XXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwXFx1REUxMC1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTMzXFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU0XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OF18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDUwLVxcdURENzJcXHVERDc2XFx1REQ4My1cXHVEREIyXFx1RERDMS1cXHVEREM0XFx1REREQVxcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUyQlxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1RC1cXHVERjYxXXxcXHVEODA1W1xcdURDODAtXFx1RENBRlxcdURDQzRcXHVEQ0M1XFx1RENDN1xcdUREODAtXFx1RERBRVxcdURFMDAtXFx1REUyRlxcdURFNDRcXHVERTgwLVxcdURFQUFdfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0RGXFx1RENGRlxcdURFQzAtXFx1REVGOF18XFx1RDgwOFtcXHVEQzAwLVxcdURGOThdfFxcdUQ4MDlbXFx1REMwMC1cXHVEQzZFXXxbXFx1RDgwQ1xcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q11bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMDAtXFx1REMyRV18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REYwMC1cXHVERjQ0XFx1REY1MFxcdURGOTMtXFx1REY5Rl18XFx1RDgyQ1tcXHVEQzAwXFx1REMwMV18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzQVtcXHVEQzAwLVxcdURDQzRdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRDZcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRF18XFx1RDg3RVtcXHVEQzAwLVxcdURFMURdLyxcbiAgICAgICAgLy8gRUNNQVNjcmlwdCA2L1VuaWNvZGUgdjcuMC4wIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6XG4gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IC9bXFx4QUFcXHhCNVxceEI3XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDMwMC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4Ni1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0ODMtXFx1MDQ4N1xcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjEwLVxcdTA2MUFcXHUwNjIwLVxcdTA2NjlcXHUwNjZFLVxcdTA2RDNcXHUwNkQ1LVxcdTA2RENcXHUwNkRGLVxcdTA2RThcXHUwNkVBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMC1cXHUwNzRBXFx1MDc0RC1cXHUwN0IxXFx1MDdDMC1cXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgyRFxcdTA4NDAtXFx1MDg1QlxcdTA4QTAtXFx1MDhCMlxcdTA4RTQtXFx1MDk2M1xcdTA5NjYtXFx1MDk2RlxcdTA5NzEtXFx1MDk4M1xcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkMtXFx1MDlDNFxcdTA5QzdcXHUwOUM4XFx1MDlDQi1cXHUwOUNFXFx1MDlEN1xcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUzXFx1MDlFNi1cXHUwOUYxXFx1MEEwMS1cXHUwQTAzXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNjYtXFx1MEE3NVxcdTBBODEtXFx1MEE4M1xcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCQy1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFEMFxcdTBBRTAtXFx1MEFFM1xcdTBBRTYtXFx1MEFFRlxcdTBCMDEtXFx1MEIwM1xcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNDLVxcdTBCNDRcXHUwQjQ3XFx1MEI0OFxcdTBCNEItXFx1MEI0RFxcdTBCNTZcXHUwQjU3XFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjNcXHUwQjY2LVxcdTBCNkZcXHUwQjcxXFx1MEI4MlxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJCRS1cXHUwQkMyXFx1MEJDNi1cXHUwQkM4XFx1MEJDQS1cXHUwQkNEXFx1MEJEMFxcdTBCRDdcXHUwQkU2LVxcdTBCRUZcXHUwQzAwLVxcdTBDMDNcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNELVxcdTBDNDRcXHUwQzQ2LVxcdTBDNDhcXHUwQzRBLVxcdTBDNERcXHUwQzU1XFx1MEM1NlxcdTBDNThcXHUwQzU5XFx1MEM2MC1cXHUwQzYzXFx1MEM2Ni1cXHUwQzZGXFx1MEM4MS1cXHUwQzgzXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCQy1cXHUwQ0M0XFx1MENDNi1cXHUwQ0M4XFx1MENDQS1cXHUwQ0NEXFx1MENENVxcdTBDRDZcXHUwQ0RFXFx1MENFMC1cXHUwQ0UzXFx1MENFNi1cXHUwQ0VGXFx1MENGMVxcdTBDRjJcXHUwRDAxLVxcdTBEMDNcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNELVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENEVcXHUwRDU3XFx1MEQ2MC1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDZGXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MlxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREU2LVxcdTBERUZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUI5XFx1MEVCQi1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYyOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM2OS1cXHUxMzcxXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5REFcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUFCMC1cXHUxQUJEXFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0Y2XFx1MUNGOFxcdTFDRjlcXHUxRDAwLVxcdTFERjVcXHUxREZDLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjAwQ1xcdTIwMERcXHUyMDNGXFx1MjA0MFxcdTIwNTRcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIwRDAtXFx1MjBEQ1xcdTIwRTFcXHUyMEU1LVxcdTIwRjBcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE4LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE2MC1cXHUyMTg4XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ3Ri1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkRFMC1cXHUyREZGXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDJGXFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5OS1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkNDXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjJCXFx1QTY0MC1cXHVBNjZGXFx1QTY3NC1cXHVBNjdEXFx1QTY3Ri1cXHVBNjlEXFx1QTY5Ri1cXHVBNkYxXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBN0FEXFx1QTdCMFxcdUE3QjFcXHVBN0Y3LVxcdUE4MjdcXHVBODQwLVxcdUE4NzNcXHVBODgwLVxcdUE4QzRcXHVBOEQwLVxcdUE4RDlcXHVBOEUwLVxcdUE4RjdcXHVBOEZCXFx1QTkwMC1cXHVBOTJEXFx1QTkzMC1cXHVBOTUzXFx1QTk2MC1cXHVBOTdDXFx1QTk4MC1cXHVBOUMwXFx1QTlDRi1cXHVBOUQ5XFx1QTlFMC1cXHVBOUZFXFx1QUEwMC1cXHVBQTM2XFx1QUE0MC1cXHVBQTREXFx1QUE1MC1cXHVBQTU5XFx1QUE2MC1cXHVBQTc2XFx1QUE3QS1cXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVGXFx1QUFGMi1cXHVBQUY2XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjVGXFx1QUI2NFxcdUFCNjVcXHVBQkMwLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUFCRjAtXFx1QUJGOVxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMUQtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkUwMC1cXHVGRTBGXFx1RkUyMC1cXHVGRTJEXFx1RkUzM1xcdUZFMzRcXHVGRTRELVxcdUZFNEZcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjEwLVxcdUZGMTlcXHVGRjIxLVxcdUZGM0FcXHVGRjNGXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REQ0MC1cXHVERDc0XFx1RERGRFxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURFRTBcXHVERjAwLVxcdURGMUZcXHVERjMwLVxcdURGNEFcXHVERjUwLVxcdURGN0FcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENBMC1cXHVEQ0E5XFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzYwLVxcdURDNzZcXHVEQzgwLVxcdURDOUVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDAtXFx1REUwM1xcdURFMDVcXHVERTA2XFx1REUwQy1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTMzXFx1REUzOC1cXHVERTNBXFx1REUzRlxcdURFNjAtXFx1REU3Q1xcdURFODAtXFx1REU5Q1xcdURFQzAtXFx1REVDN1xcdURFQzktXFx1REVFNlxcdURGMDAtXFx1REYzNVxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY3MlxcdURGODAtXFx1REY5MV18XFx1RDgwM1tcXHVEQzAwLVxcdURDNDhdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzQ2XFx1REM2Ni1cXHVEQzZGXFx1REM3Ri1cXHVEQ0JBXFx1RENEMC1cXHVEQ0U4XFx1RENGMC1cXHVEQ0Y5XFx1REQwMC1cXHVERDM0XFx1REQzNi1cXHVERDNGXFx1REQ1MC1cXHVERDczXFx1REQ3NlxcdUREODAtXFx1RERDNFxcdURERDAtXFx1REREQVxcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUzN1xcdURFQjAtXFx1REVFQVxcdURFRjAtXFx1REVGOVxcdURGMDEtXFx1REYwM1xcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNDLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjVELVxcdURGNjNcXHVERjY2LVxcdURGNkNcXHVERjcwLVxcdURGNzRdfFxcdUQ4MDVbXFx1REM4MC1cXHVEQ0M1XFx1RENDN1xcdURDRDAtXFx1RENEOVxcdUREODAtXFx1RERCNVxcdUREQjgtXFx1RERDMFxcdURFMDAtXFx1REU0MFxcdURFNDRcXHVERTUwLVxcdURFNTlcXHVERTgwLVxcdURFQjdcXHVERUMwLVxcdURFQzldfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0U5XFx1RENGRlxcdURFQzAtXFx1REVGOF18XFx1RDgwOFtcXHVEQzAwLVxcdURGOThdfFxcdUQ4MDlbXFx1REMwMC1cXHVEQzZFXXxbXFx1RDgwQ1xcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q11bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMDAtXFx1REMyRV18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERTYwLVxcdURFNjlcXHVERUQwLVxcdURFRURcXHVERUYwLVxcdURFRjRcXHVERjAwLVxcdURGMzZcXHVERjQwLVxcdURGNDNcXHVERjUwLVxcdURGNTlcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REYwMC1cXHVERjQ0XFx1REY1MC1cXHVERjdFXFx1REY4Ri1cXHVERjlGXXxcXHVEODJDW1xcdURDMDBcXHVEQzAxXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OVxcdURDOURcXHVEQzlFXXxcXHVEODM0W1xcdURENjUtXFx1REQ2OVxcdURENkQtXFx1REQ3MlxcdUREN0ItXFx1REQ4MlxcdUREODUtXFx1REQ4QlxcdUREQUEtXFx1RERBRFxcdURFNDItXFx1REU0NF18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXFx1REZDRS1cXHVERkZGXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdURDRDAtXFx1RENENl18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF18XFx1REI0MFtcXHVERDAwLVxcdURERUZdL1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gMHgzMCA8PSBjaCAmJiBjaCA8PSAweDM5OyAgLy8gMC4uOVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHtcbiAgICAgICAgcmV0dXJuIDB4MzAgPD0gY2ggJiYgY2ggPD0gMHgzOSB8fCAgLy8gMC4uOVxuICAgICAgICAgICAgMHg2MSA8PSBjaCAmJiBjaCA8PSAweDY2IHx8ICAgICAvLyBhLi5mXG4gICAgICAgICAgICAweDQxIDw9IGNoICYmIGNoIDw9IDB4NDY7ICAgICAgIC8vIEEuLkZcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09jdGFsRGlnaXQoY2gpIHtcbiAgICAgICAgcmV0dXJuIGNoID49IDB4MzAgJiYgY2ggPD0gMHgzNzsgIC8vIDAuLjdcbiAgICB9XG5cbiAgICAvLyA3LjIgV2hpdGUgU3BhY2VcblxuICAgIE5PTl9BU0NJSV9XSElURVNQQUNFUyA9IFtcbiAgICAgICAgMHgxNjgwLCAweDE4MEUsXG4gICAgICAgIDB4MjAwMCwgMHgyMDAxLCAweDIwMDIsIDB4MjAwMywgMHgyMDA0LCAweDIwMDUsIDB4MjAwNiwgMHgyMDA3LCAweDIwMDgsIDB4MjAwOSwgMHgyMDBBLFxuICAgICAgICAweDIwMkYsIDB4MjA1RixcbiAgICAgICAgMHgzMDAwLFxuICAgICAgICAweEZFRkZcbiAgICBdO1xuXG4gICAgZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7XG4gICAgICAgIHJldHVybiBjaCA9PT0gMHgyMCB8fCBjaCA9PT0gMHgwOSB8fCBjaCA9PT0gMHgwQiB8fCBjaCA9PT0gMHgwQyB8fCBjaCA9PT0gMHhBMCB8fFxuICAgICAgICAgICAgY2ggPj0gMHgxNjgwICYmIE5PTl9BU0NJSV9XSElURVNQQUNFUy5pbmRleE9mKGNoKSA+PSAwO1xuICAgIH1cblxuICAgIC8vIDcuMyBMaW5lIFRlcm1pbmF0b3JzXG5cbiAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7XG4gICAgICAgIHJldHVybiBjaCA9PT0gMHgwQSB8fCBjaCA9PT0gMHgwRCB8fCBjaCA9PT0gMHgyMDI4IHx8IGNoID09PSAweDIwMjk7XG4gICAgfVxuXG4gICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzXG5cbiAgICBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KGNwKSB7XG4gICAgICAgIGlmIChjcCA8PSAweEZGRkYpIHsgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApOyB9XG4gICAgICAgIHZhciBjdTEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKE1hdGguZmxvb3IoKGNwIC0gMHgxMDAwMCkgLyAweDQwMCkgKyAweEQ4MDApO1xuICAgICAgICB2YXIgY3UyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGNwIC0gMHgxMDAwMCkgJSAweDQwMCkgKyAweERDMDApO1xuICAgICAgICByZXR1cm4gY3UxICsgY3UyO1xuICAgIH1cblxuICAgIElERU5USUZJRVJfU1RBUlQgPSBuZXcgQXJyYXkoMHg4MCk7XG4gICAgZm9yKGNoID0gMDsgY2ggPCAweDgwOyArK2NoKSB7XG4gICAgICAgIElERU5USUZJRVJfU1RBUlRbY2hdID1cbiAgICAgICAgICAgIGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSB8fCAgLy8gYS4uelxuICAgICAgICAgICAgY2ggPj0gMHg0MSAmJiBjaCA8PSAweDVBIHx8ICAvLyBBLi5aXG4gICAgICAgICAgICBjaCA9PT0gMHgyNCB8fCBjaCA9PT0gMHg1RjsgIC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpXG4gICAgfVxuXG4gICAgSURFTlRJRklFUl9QQVJUID0gbmV3IEFycmF5KDB4ODApO1xuICAgIGZvcihjaCA9IDA7IGNoIDwgMHg4MDsgKytjaCkge1xuICAgICAgICBJREVOVElGSUVSX1BBUlRbY2hdID1cbiAgICAgICAgICAgIGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSB8fCAgLy8gYS4uelxuICAgICAgICAgICAgY2ggPj0gMHg0MSAmJiBjaCA8PSAweDVBIHx8ICAvLyBBLi5aXG4gICAgICAgICAgICBjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkgfHwgIC8vIDAuLjlcbiAgICAgICAgICAgIGNoID09PSAweDI0IHx8IGNoID09PSAweDVGOyAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydEVTNShjaCkge1xuICAgICAgICByZXR1cm4gY2ggPCAweDgwID8gSURFTlRJRklFUl9TVEFSVFtjaF0gOiBFUzVSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KGZyb21Db2RlUG9pbnQoY2gpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJQYXJ0RVM1KGNoKSB7XG4gICAgICAgIHJldHVybiBjaCA8IDB4ODAgPyBJREVOVElGSUVSX1BBUlRbY2hdIDogRVM1UmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KGZyb21Db2RlUG9pbnQoY2gpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydEVTNihjaCkge1xuICAgICAgICByZXR1cm4gY2ggPCAweDgwID8gSURFTlRJRklFUl9TVEFSVFtjaF0gOiBFUzZSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KGZyb21Db2RlUG9pbnQoY2gpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJQYXJ0RVM2KGNoKSB7XG4gICAgICAgIHJldHVybiBjaCA8IDB4ODAgPyBJREVOVElGSUVSX1BBUlRbY2hdIDogRVM2UmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KGZyb21Db2RlUG9pbnQoY2gpKTtcbiAgICB9XG5cbiAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgaXNEZWNpbWFsRGlnaXQ6IGlzRGVjaW1hbERpZ2l0LFxuICAgICAgICBpc0hleERpZ2l0OiBpc0hleERpZ2l0LFxuICAgICAgICBpc09jdGFsRGlnaXQ6IGlzT2N0YWxEaWdpdCxcbiAgICAgICAgaXNXaGl0ZVNwYWNlOiBpc1doaXRlU3BhY2UsXG4gICAgICAgIGlzTGluZVRlcm1pbmF0b3I6IGlzTGluZVRlcm1pbmF0b3IsXG4gICAgICAgIGlzSWRlbnRpZmllclN0YXJ0RVM1OiBpc0lkZW50aWZpZXJTdGFydEVTNSxcbiAgICAgICAgaXNJZGVudGlmaWVyUGFydEVTNTogaXNJZGVudGlmaWVyUGFydEVTNSxcbiAgICAgICAgaXNJZGVudGlmaWVyU3RhcnRFUzY6IGlzSWRlbnRpZmllclN0YXJ0RVM2LFxuICAgICAgICBpc0lkZW50aWZpZXJQYXJ0RVM2OiBpc0lkZW50aWZpZXJQYXJ0RVM2XG4gICAgfTtcbn0oKSk7XG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIiwiLypcbiAgQ29weXJpZ2h0IChDKSAyMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBjb2RlID0gcmVxdWlyZSgnLi9jb2RlJyk7XG5cbiAgICBmdW5jdGlvbiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmRFUzYoaWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICBjYXNlICdpbXBsZW1lbnRzJzpcbiAgICAgICAgY2FzZSAnaW50ZXJmYWNlJzpcbiAgICAgICAgY2FzZSAncGFja2FnZSc6XG4gICAgICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgICBjYXNlICdwcm90ZWN0ZWQnOlxuICAgICAgICBjYXNlICdwdWJsaWMnOlxuICAgICAgICBjYXNlICdzdGF0aWMnOlxuICAgICAgICBjYXNlICdsZXQnOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0tleXdvcmRFUzUoaWQsIHN0cmljdCkge1xuICAgICAgICAvLyB5aWVsZCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgYXMga2V5d29yZCB1bmRlciBub24tc3RyaWN0IG1vZGUuXG4gICAgICAgIGlmICghc3RyaWN0ICYmIGlkID09PSAneWllbGQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzS2V5d29yZEVTNihpZCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0tleXdvcmRFUzYoaWQsIHN0cmljdCkge1xuICAgICAgICBpZiAoc3RyaWN0ICYmIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZEVTNihpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2lmJykgfHwgKGlkID09PSAnaW4nKSB8fCAoaWQgPT09ICdkbycpO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAndmFyJykgfHwgKGlkID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHwgKGlkID09PSAndHJ5Jyk7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd0aGlzJykgfHwgKGlkID09PSAnZWxzZScpIHx8IChpZCA9PT0gJ2Nhc2UnKSB8fFxuICAgICAgICAgICAgICAgIChpZCA9PT0gJ3ZvaWQnKSB8fCAoaWQgPT09ICd3aXRoJykgfHwgKGlkID09PSAnZW51bScpO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnd2hpbGUnKSB8fCAoaWQgPT09ICdicmVhaycpIHx8IChpZCA9PT0gJ2NhdGNoJykgfHxcbiAgICAgICAgICAgICAgICAoaWQgPT09ICd0aHJvdycpIHx8IChpZCA9PT0gJ2NvbnN0JykgfHwgKGlkID09PSAneWllbGQnKSB8fFxuICAgICAgICAgICAgICAgIChpZCA9PT0gJ2NsYXNzJykgfHwgKGlkID09PSAnc3VwZXInKTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3JldHVybicpIHx8IChpZCA9PT0gJ3R5cGVvZicpIHx8IChpZCA9PT0gJ2RlbGV0ZScpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAnc3dpdGNoJykgfHwgKGlkID09PSAnZXhwb3J0JykgfHwgKGlkID09PSAnaW1wb3J0Jyk7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdkZWZhdWx0JykgfHwgKGlkID09PSAnZmluYWxseScpIHx8IChpZCA9PT0gJ2V4dGVuZHMnKTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2Z1bmN0aW9uJykgfHwgKGlkID09PSAnY29udGludWUnKSB8fCAoaWQgPT09ICdkZWJ1Z2dlcicpO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2luc3RhbmNlb2YnKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVzZXJ2ZWRXb3JkRVM1KGlkLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGlkID09PSAnbnVsbCcgfHwgaWQgPT09ICd0cnVlJyB8fCBpZCA9PT0gJ2ZhbHNlJyB8fCBpc0tleXdvcmRFUzUoaWQsIHN0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSZXNlcnZlZFdvcmRFUzYoaWQsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gaWQgPT09ICdudWxsJyB8fCBpZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFsc2UnIHx8IGlzS2V5d29yZEVTNihpZCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Jlc3RyaWN0ZWRXb3JkKGlkKSB7XG4gICAgICAgIHJldHVybiBpZCA9PT0gJ2V2YWwnIHx8IGlkID09PSAnYXJndW1lbnRzJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lRVM1KGlkKSB7XG4gICAgICAgIHZhciBpLCBpeiwgY2g7XG5cbiAgICAgICAgaWYgKGlkLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgICBjaCA9IGlkLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIGlmICghY29kZS5pc0lkZW50aWZpZXJTdGFydEVTNShjaCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDEsIGl6ID0gaWQubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgY2ggPSBpZC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKCFjb2RlLmlzSWRlbnRpZmllclBhcnRFUzUoY2gpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlY29kZVV0ZjE2KGxlYWQsIHRyYWlsKSB7XG4gICAgICAgIHJldHVybiAobGVhZCAtIDB4RDgwMCkgKiAweDQwMCArICh0cmFpbCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllck5hbWVFUzYoaWQpIHtcbiAgICAgICAgdmFyIGksIGl6LCBjaCwgbG93Q2gsIGNoZWNrO1xuXG4gICAgICAgIGlmIChpZC5sZW5ndGggPT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICAgICAgY2hlY2sgPSBjb2RlLmlzSWRlbnRpZmllclN0YXJ0RVM2O1xuICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGlkLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgIGNoID0gaWQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGlmICgweEQ4MDAgPD0gY2ggJiYgY2ggPD0gMHhEQkZGKSB7XG4gICAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgICAgIGlmIChpID49IGl6KSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICAgICAgICAgIGxvd0NoID0gaWQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgICAgICBpZiAoISgweERDMDAgPD0gbG93Q2ggJiYgbG93Q2ggPD0gMHhERkZGKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoID0gZGVjb2RlVXRmMTYoY2gsIGxvd0NoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2hlY2soY2gpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hlY2sgPSBjb2RlLmlzSWRlbnRpZmllclBhcnRFUzY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyRVM1KGlkLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGlzSWRlbnRpZmllck5hbWVFUzUoaWQpICYmICFpc1Jlc2VydmVkV29yZEVTNShpZCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJFUzYoaWQsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gaXNJZGVudGlmaWVyTmFtZUVTNihpZCkgJiYgIWlzUmVzZXJ2ZWRXb3JkRVM2KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBpc0tleXdvcmRFUzU6IGlzS2V5d29yZEVTNSxcbiAgICAgICAgaXNLZXl3b3JkRVM2OiBpc0tleXdvcmRFUzYsXG4gICAgICAgIGlzUmVzZXJ2ZWRXb3JkRVM1OiBpc1Jlc2VydmVkV29yZEVTNSxcbiAgICAgICAgaXNSZXNlcnZlZFdvcmRFUzY6IGlzUmVzZXJ2ZWRXb3JkRVM2LFxuICAgICAgICBpc1Jlc3RyaWN0ZWRXb3JkOiBpc1Jlc3RyaWN0ZWRXb3JkLFxuICAgICAgICBpc0lkZW50aWZpZXJOYW1lRVM1OiBpc0lkZW50aWZpZXJOYW1lRVM1LFxuICAgICAgICBpc0lkZW50aWZpZXJOYW1lRVM2OiBpc0lkZW50aWZpZXJOYW1lRVM2LFxuICAgICAgICBpc0lkZW50aWZpZXJFUzU6IGlzSWRlbnRpZmllckVTNSxcbiAgICAgICAgaXNJZGVudGlmaWVyRVM2OiBpc0lkZW50aWZpZXJFUzZcbiAgICB9O1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICBleHBvcnRzLmFzdCA9IHJlcXVpcmUoJy4vYXN0Jyk7XG4gICAgZXhwb3J0cy5jb2RlID0gcmVxdWlyZSgnLi9jb2RlJyk7XG4gICAgZXhwb3J0cy5rZXl3b3JkID0gcmVxdWlyZSgnLi9rZXl3b3JkJyk7XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKVxuICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fFxuICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHtcbiAgICAgIGVyID0gYXJndW1lbnRzWzFdO1xuICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQuICgnICsgZXIgKyAnKScpO1xuICAgICAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlcikpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBmYXN0IGNhc2VzXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBzbG93ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkge1xuICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTtcbiAgICBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBtO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpXG4gICAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb24obGlzdGVuZXIubGlzdGVuZXIpID9cbiAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gIGVsc2UgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZVxuICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxpc3RlbmVyXTtcblxuICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCkge1xuICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKSkge1xuICAgICAgbSA9IHRoaXMuX21heExpc3RlbmVycztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICAgIH1cblxuICAgIGlmIChtICYmIG0gPiAwICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7XG4gICAgICB0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgK1xuICAgICAgICAgICAgICAgICAgICAnbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSUUgMTBcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICB2YXIgZmlyZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBnKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7XG5cbiAgICBpZiAoIWZpcmVkKSB7XG4gICAgICBmaXJlZCA9IHRydWU7XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgdGhpcy5vbih0eXBlLCBnKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGxpc3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHBvc2l0aW9uID0gLTE7XG5cbiAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8XG4gICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkpIHtcbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHxcbiAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxpc3QubGVuZ3RoID0gMDtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBrZXksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICBlbHNlIGlmICh0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7XG4gICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVycykpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gIH0gZWxzZSBpZiAobGlzdGVuZXJzKSB7XG4gICAgLy8gTElGTyBvcmRlclxuICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTtcbiAgfVxuICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciByZXQ7XG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0ID0gW107XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTtcbiAgZWxzZVxuICAgIHJldCA9IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpO1xuICByZXR1cm4gcmV0O1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAodGhpcy5fZXZlbnRzKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgICBpZiAoaXNGdW5jdGlvbihldmxpc3RlbmVyKSlcbiAgICAgIHJldHVybiAxO1xuICAgIGVsc2UgaWYgKGV2bGlzdGVuZXIpXG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbiIsInZhciBtZDUgPSByZXF1aXJlKCdjcmVhdGUtaGFzaC9tZDUnKVxubW9kdWxlLmV4cG9ydHMgPSBFVlBfQnl0ZXNUb0tleVxuZnVuY3Rpb24gRVZQX0J5dGVzVG9LZXkgKHBhc3N3b3JkLCBzYWx0LCBrZXlMZW4sIGl2TGVuKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHBhc3N3b3JkKSkge1xuICAgIHBhc3N3b3JkID0gbmV3IEJ1ZmZlcihwYXNzd29yZCwgJ2JpbmFyeScpXG4gIH1cbiAgaWYgKHNhbHQgJiYgIUJ1ZmZlci5pc0J1ZmZlcihzYWx0KSkge1xuICAgIHNhbHQgPSBuZXcgQnVmZmVyKHNhbHQsICdiaW5hcnknKVxuICB9XG4gIGtleUxlbiA9IGtleUxlbiAvIDhcbiAgaXZMZW4gPSBpdkxlbiB8fCAwXG4gIHZhciBraSA9IDBcbiAgdmFyIGlpID0gMFxuICB2YXIga2V5ID0gbmV3IEJ1ZmZlcihrZXlMZW4pXG4gIHZhciBpdiA9IG5ldyBCdWZmZXIoaXZMZW4pXG4gIHZhciBhZGRtZCA9IDBcbiAgdmFyIG1kX2J1ZlxuICB2YXIgaVxuICB2YXIgYnVmcyA9IFtdXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGFkZG1kKysgPiAwKSB7XG4gICAgICBidWZzLnB1c2gobWRfYnVmKVxuICAgIH1cbiAgICBidWZzLnB1c2gocGFzc3dvcmQpXG4gICAgaWYgKHNhbHQpIHtcbiAgICAgIGJ1ZnMucHVzaChzYWx0KVxuICAgIH1cbiAgICBtZF9idWYgPSBtZDUoQnVmZmVyLmNvbmNhdChidWZzKSlcbiAgICBidWZzID0gW11cbiAgICBpID0gMFxuICAgIGlmIChrZXlMZW4gPiAwKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoa2V5TGVuID09PSAwKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gbWRfYnVmLmxlbmd0aCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAga2V5W2tpKytdID0gbWRfYnVmW2ldXG4gICAgICAgIGtleUxlbi0tXG4gICAgICAgIGkrK1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXZMZW4gPiAwICYmIGkgIT09IG1kX2J1Zi5sZW5ndGgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmIChpdkxlbiA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IG1kX2J1Zi5sZW5ndGgpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGl2W2lpKytdID0gbWRfYnVmW2ldXG4gICAgICAgIGl2TGVuLS1cbiAgICAgICAgaSsrXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChrZXlMZW4gPT09IDAgJiYgaXZMZW4gPT09IDApIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBtZF9idWYubGVuZ3RoOyBpKyspIHtcbiAgICBtZF9idWZbaV0gPSAwXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBrZXk6IGtleSxcbiAgICBpdjogaXZcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbnZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnIpIHtcblx0aWYgKHR5cGVvZiBBcnJheS5pc0FycmF5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyKTtcblx0fVxuXG5cdHJldHVybiB0b1N0ci5jYWxsKGFycikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG52YXIgaXNQbGFpbk9iamVjdCA9IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG5cdGlmICghb2JqIHx8IHRvU3RyLmNhbGwob2JqKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHR2YXIgaGFzT3duQ29uc3RydWN0b3IgPSBoYXNPd24uY2FsbChvYmosICdjb25zdHJ1Y3RvcicpO1xuXHR2YXIgaGFzSXNQcm90b3R5cGVPZiA9IG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IucHJvdG90eXBlICYmIGhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICdpc1Byb3RvdHlwZU9mJyk7XG5cdC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBPYmplY3Rcblx0aWYgKG9iai5jb25zdHJ1Y3RvciAmJiAhaGFzT3duQ29uc3RydWN0b3IgJiYgIWhhc0lzUHJvdG90eXBlT2YpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBPd24gcHJvcGVydGllcyBhcmUgZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCxcblx0Ly8gaWYgbGFzdCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9wZXJ0aWVzIGFyZSBvd24uXG5cdHZhciBrZXk7XG5cdGZvciAoa2V5IGluIG9iaikgeyAvKiovIH1cblxuXHRyZXR1cm4gdHlwZW9mIGtleSA9PT0gJ3VuZGVmaW5lZCcgfHwgaGFzT3duLmNhbGwob2JqLCBrZXkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRlbmQoKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZTtcblx0dmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXTtcblx0dmFyIGkgPSAxO1xuXHR2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0dmFyIGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnYm9vbGVhbicpIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcblx0XHQvLyBza2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0aSA9IDI7XG5cdH1cblx0aWYgKHRhcmdldCA9PSBudWxsIHx8ICh0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Zm9yICg7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbaV07XG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmIChvcHRpb25zICE9IG51bGwpIHtcblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAobmFtZSBpbiBvcHRpb25zKSB7XG5cdFx0XHRcdHNyYyA9IHRhcmdldFtuYW1lXTtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbbmFtZV07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAodGFyZ2V0ICE9PSBjb3B5KSB7XG5cdFx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdFx0aWYgKGRlZXAgJiYgY29weSAmJiAoaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBpc0FycmF5KGNvcHkpKSkpIHtcblx0XHRcdFx0XHRcdGlmIChjb3B5SXNBcnJheSkge1xuXHRcdFx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBpc0FycmF5KHNyYykgPyBzcmMgOiBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGlzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6IHt9O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHRcdHRhcmdldFtuYW1lXSA9IGV4dGVuZChkZWVwLCBjbG9uZSwgY29weSk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY29weSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHRcdHRhcmdldFtuYW1lXSA9IGNvcHk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG4iLCIvKlxuICogZXh0c3ByaW50Zi5qczogZXh0ZW5kZWQgUE9TSVgtc3R5bGUgc3ByaW50ZlxuICovXG5cbnZhciBtb2RfYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG52YXIgbW9kX3V0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qXG4gKiBQdWJsaWMgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydHMuc3ByaW50ZiA9IGpzU3ByaW50ZjtcblxuLypcbiAqIFN0cmlwcGVkIGRvd24gdmVyc2lvbiBvZiBzW25dcHJpbnRmKDNjKS4gIFdlIG1ha2UgYSBiZXN0IGVmZm9ydCB0byB0aHJvdyBhblxuICogZXhjZXB0aW9uIHdoZW4gZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nIHdlIGRvbid0IHVuZGVyc3RhbmQsIHJhdGhlciB0aGFuXG4gKiBpZ25vcmluZyBpdCwgc28gdGhhdCB3ZSB3b24ndCBicmVhayBleGlzdGluZyBwcm9ncmFtcyBpZi93aGVuIHdlIGdvIGltcGxlbWVudFxuICogdGhlIHJlc3Qgb2YgdGhpcy5cbiAqXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uIGN1cnJlbnRseSBzdXBwb3J0cyBzcGVjaWZ5aW5nXG4gKlx0LSBmaWVsZCBhbGlnbm1lbnQgKCctJyBmbGFnKSxcbiAqIFx0LSB6ZXJvLXBhZCAoJzAnIGZsYWcpXG4gKlx0LSBhbHdheXMgc2hvdyBudW1lcmljIHNpZ24gKCcrJyBmbGFnKSxcbiAqXHQtIGZpZWxkIHdpZHRoXG4gKlx0LSBjb252ZXJzaW9ucyBmb3Igc3RyaW5ncywgZGVjaW1hbCBpbnRlZ2VycywgYW5kIGZsb2F0cyAobnVtYmVycykuXG4gKlx0LSBhcmd1bWVudCBzaXplIHNwZWNpZmllcnMuICBUaGVzZSBhcmUgYWxsIGFjY2VwdGVkIGJ1dCBpZ25vcmVkLCBzaW5jZVxuICpcdCAgSmF2YXNjcmlwdCBoYXMgbm8gbm90aW9uIG9mIHRoZSBwaHlzaWNhbCBzaXplIG9mIGFuIGFyZ3VtZW50LlxuICpcbiAqIEV2ZXJ5dGhpbmcgZWxzZSBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQsIG1vc3Qgbm90YWJseSBwcmVjaXNpb24sIHVuc2lnbmVkXG4gKiBudW1iZXJzLCBub24tZGVjaW1hbCBudW1iZXJzLCBhbmQgY2hhcmFjdGVycy5cbiAqL1xuZnVuY3Rpb24ganNTcHJpbnRmKGZtdClcbntcblx0dmFyIHJlZ2V4ID0gW1xuXHQgICAgJyhbXiVdKiknLFx0XHRcdFx0Lyogbm9ybWFsIHRleHQgKi9cblx0ICAgICclJyxcdFx0XHRcdC8qIHN0YXJ0IG9mIGZvcm1hdCAqL1xuXHQgICAgJyhbXFwnXFxcXC0rICMwXSo/KScsXHRcdFx0LyogZmxhZ3MgKG9wdGlvbmFsKSAqL1xuXHQgICAgJyhbMS05XVxcXFxkKik/JyxcdFx0XHQvKiB3aWR0aCAob3B0aW9uYWwpICovXG5cdCAgICAnKFxcXFwuKFsxLTldXFxcXGQqKSk/JyxcdFx0LyogcHJlY2lzaW9uIChvcHRpb25hbCkgKi9cblx0ICAgICdbbGhqenRMXSo/JyxcdFx0XHQvKiBsZW5ndGggbW9kcyAoaWdub3JlZCkgKi9cblx0ICAgICcoW2Rpb3V4WGZGZUVnR2FBY0NzU3AlanJdKSdcdC8qIGNvbnZlcnNpb24gKi9cblx0XS5qb2luKCcnKTtcblxuXHR2YXIgcmUgPSBuZXcgUmVnRXhwKHJlZ2V4KTtcblx0dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXHR2YXIgZmxhZ3MsIHdpZHRoLCBwcmVjaXNpb24sIGNvbnZlcnNpb247XG5cdHZhciBsZWZ0LCBwYWQsIHNpZ24sIGFyZywgbWF0Y2g7XG5cdHZhciByZXQgPSAnJztcblx0dmFyIGFyZ24gPSAxO1xuXG5cdG1vZF9hc3NlcnQuZXF1YWwoJ3N0cmluZycsIHR5cGVvZiAoZm10KSk7XG5cblx0d2hpbGUgKChtYXRjaCA9IHJlLmV4ZWMoZm10KSkgIT09IG51bGwpIHtcblx0XHRyZXQgKz0gbWF0Y2hbMV07XG5cdFx0Zm10ID0gZm10LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuXG5cdFx0ZmxhZ3MgPSBtYXRjaFsyXSB8fCAnJztcblx0XHR3aWR0aCA9IG1hdGNoWzNdIHx8IDA7XG5cdFx0cHJlY2lzaW9uID0gbWF0Y2hbNF0gfHwgJyc7XG5cdFx0Y29udmVyc2lvbiA9IG1hdGNoWzZdO1xuXHRcdGxlZnQgPSBmYWxzZTtcblx0XHRzaWduID0gZmFsc2U7XG5cdFx0cGFkID0gJyAnO1xuXG5cdFx0aWYgKGNvbnZlcnNpb24gPT0gJyUnKSB7XG5cdFx0XHRyZXQgKz0gJyUnO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAwKVxuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcigndG9vIGZldyBhcmdzIHRvIHNwcmludGYnKSk7XG5cblx0XHRhcmcgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0YXJnbisrO1xuXG5cdFx0aWYgKGZsYWdzLm1hdGNoKC9bXFwnICNdLykpXG5cdFx0XHR0aHJvdyAobmV3IEVycm9yKFxuXHRcdFx0ICAgICd1bnN1cHBvcnRlZCBmbGFnczogJyArIGZsYWdzKSk7XG5cblx0XHRpZiAocHJlY2lzaW9uLmxlbmd0aCA+IDApXG5cdFx0XHR0aHJvdyAobmV3IEVycm9yKFxuXHRcdFx0ICAgICdub24temVybyBwcmVjaXNpb24gbm90IHN1cHBvcnRlZCcpKTtcblxuXHRcdGlmIChmbGFncy5tYXRjaCgvLS8pKVxuXHRcdFx0bGVmdCA9IHRydWU7XG5cblx0XHRpZiAoZmxhZ3MubWF0Y2goLzAvKSlcblx0XHRcdHBhZCA9ICcwJztcblxuXHRcdGlmIChmbGFncy5tYXRjaCgvXFwrLykpXG5cdFx0XHRzaWduID0gdHJ1ZTtcblxuXHRcdHN3aXRjaCAoY29udmVyc2lvbikge1xuXHRcdGNhc2UgJ3MnOlxuXHRcdFx0aWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbClcblx0XHRcdFx0dGhyb3cgKG5ldyBFcnJvcignYXJndW1lbnQgJyArIGFyZ24gK1xuXHRcdFx0XHQgICAgJzogYXR0ZW1wdGVkIHRvIHByaW50IHVuZGVmaW5lZCBvciBudWxsICcgK1xuXHRcdFx0XHQgICAgJ2FzIGEgc3RyaW5nJykpO1xuXHRcdFx0cmV0ICs9IGRvUGFkKHBhZCwgd2lkdGgsIGxlZnQsIGFyZy50b1N0cmluZygpKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAnZCc6XG5cdFx0XHRhcmcgPSBNYXRoLmZsb29yKGFyZyk7XG5cdFx0XHQvKmpzbDpmYWxsdGhydSovXG5cdFx0Y2FzZSAnZic6XG5cdFx0XHRzaWduID0gc2lnbiAmJiBhcmcgPiAwID8gJysnIDogJyc7XG5cdFx0XHRyZXQgKz0gc2lnbiArIGRvUGFkKHBhZCwgd2lkdGgsIGxlZnQsXG5cdFx0XHQgICAgYXJnLnRvU3RyaW5nKCkpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlICdqJzogLyogbm9uLXN0YW5kYXJkICovXG5cdFx0XHRpZiAod2lkdGggPT09IDApXG5cdFx0XHRcdHdpZHRoID0gMTA7XG5cdFx0XHRyZXQgKz0gbW9kX3V0aWwuaW5zcGVjdChhcmcsIGZhbHNlLCB3aWR0aCk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgJ3InOiAvKiBub24tc3RhbmRhcmQgKi9cblx0XHRcdHJldCArPSBkdW1wRXhjZXB0aW9uKGFyZyk7XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyAobmV3IEVycm9yKCd1bnN1cHBvcnRlZCBjb252ZXJzaW9uOiAnICtcblx0XHRcdCAgICBjb252ZXJzaW9uKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0ICs9IGZtdDtcblx0cmV0dXJuIChyZXQpO1xufVxuXG5mdW5jdGlvbiBkb1BhZChjaHIsIHdpZHRoLCBsZWZ0LCBzdHIpXG57XG5cdHZhciByZXQgPSBzdHI7XG5cblx0d2hpbGUgKHJldC5sZW5ndGggPCB3aWR0aCkge1xuXHRcdGlmIChsZWZ0KVxuXHRcdFx0cmV0ICs9IGNocjtcblx0XHRlbHNlXG5cdFx0XHRyZXQgPSBjaHIgKyByZXQ7XG5cdH1cblxuXHRyZXR1cm4gKHJldCk7XG59XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIGR1bXBzIGxvbmcgc3RhY2sgdHJhY2VzIGZvciBleGNlcHRpb25zIGhhdmluZyBhIGNhdXNlKCkgbWV0aG9kLlxuICogU2VlIG5vZGUtdmVycm9yIGZvciBhbiBleGFtcGxlLlxuICovXG5mdW5jdGlvbiBkdW1wRXhjZXB0aW9uKGV4KVxue1xuXHR2YXIgcmV0O1xuXG5cdGlmICghKGV4IGluc3RhbmNlb2YgRXJyb3IpKVxuXHRcdHRocm93IChuZXcgRXJyb3IoanNTcHJpbnRmKCdpbnZhbGlkIHR5cGUgZm9yICUlcjogJWonLCBleCkpKTtcblxuXHQvKiBOb3RlIHRoYXQgVjggcHJlcGVuZHMgXCJleC5zdGFja1wiIHdpdGggZXgudG9TdHJpbmcoKS4gKi9cblx0cmV0ID0gJ0VYQ0VQVElPTjogJyArIGV4LmNvbnN0cnVjdG9yLm5hbWUgKyAnOiAnICsgZXguc3RhY2s7XG5cblx0aWYgKGV4LmNhdXNlICYmIHR5cGVvZiAoZXguY2F1c2UpID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGNleCA9IGV4LmNhdXNlKCk7XG5cdFx0aWYgKGNleCkge1xuXHRcdFx0cmV0ICs9ICdcXG5DYXVzZWQgYnk6ICcgKyBkdW1wRXhjZXB0aW9uKGNleCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIChyZXQpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBGb3JldmVyQWdlbnRcbkZvcmV2ZXJBZ2VudC5TU0wgPSBGb3JldmVyQWdlbnRTU0xcblxudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcbiAgLCBBZ2VudCA9IHJlcXVpcmUoJ2h0dHAnKS5BZ2VudFxuICAsIG5ldCA9IHJlcXVpcmUoJ25ldCcpXG4gICwgdGxzID0gcmVxdWlyZSgndGxzJylcbiAgLCBBZ2VudFNTTCA9IHJlcXVpcmUoJ2h0dHBzJykuQWdlbnRcbiAgXG5mdW5jdGlvbiBnZXRDb25uZWN0aW9uTmFtZShob3N0LCBwb3J0KSB7ICBcbiAgdmFyIG5hbWUgPSAnJ1xuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IGhvc3QgKyAnOicgKyBwb3J0XG4gIH0gZWxzZSB7XG4gICAgLy8gRm9yIG5vZGUuanMgdjAxMi4wIGFuZCBpb2pzLXYxLjUuMSwgaG9zdCBpcyBhbiBvYmplY3QuIEFuZCBhbnkgZXhpc3RpbmcgbG9jYWxBZGRyZXNzIGlzIHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gbmFtZS5cbiAgICBuYW1lID0gaG9zdC5ob3N0ICsgJzonICsgaG9zdC5wb3J0ICsgJzonICsgKGhvc3QubG9jYWxBZGRyZXNzID8gKGhvc3QubG9jYWxBZGRyZXNzICsgJzonKSA6ICc6JylcbiAgfVxuICByZXR1cm4gbmFtZVxufSAgICBcblxuZnVuY3Rpb24gRm9yZXZlckFnZW50KG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgc2VsZi5yZXF1ZXN0cyA9IHt9XG4gIHNlbGYuc29ja2V0cyA9IHt9XG4gIHNlbGYuZnJlZVNvY2tldHMgPSB7fVxuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBBZ2VudC5kZWZhdWx0TWF4U29ja2V0c1xuICBzZWxmLm1pblNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWluU29ja2V0cyB8fCBGb3JldmVyQWdlbnQuZGVmYXVsdE1pblNvY2tldHNcbiAgc2VsZi5vbignZnJlZScsIGZ1bmN0aW9uKHNvY2tldCwgaG9zdCwgcG9ydCkge1xuICAgIHZhciBuYW1lID0gZ2V0Q29ubmVjdGlvbk5hbWUoaG9zdCwgcG9ydClcblxuICAgIGlmIChzZWxmLnJlcXVlc3RzW25hbWVdICYmIHNlbGYucmVxdWVzdHNbbmFtZV0ubGVuZ3RoKSB7XG4gICAgICBzZWxmLnJlcXVlc3RzW25hbWVdLnNoaWZ0KCkub25Tb2NrZXQoc29ja2V0KVxuICAgIH0gZWxzZSBpZiAoc2VsZi5zb2NrZXRzW25hbWVdLmxlbmd0aCA8IHNlbGYubWluU29ja2V0cykge1xuICAgICAgaWYgKCFzZWxmLmZyZWVTb2NrZXRzW25hbWVdKSBzZWxmLmZyZWVTb2NrZXRzW25hbWVdID0gW11cbiAgICAgIHNlbGYuZnJlZVNvY2tldHNbbmFtZV0ucHVzaChzb2NrZXQpXG4gICAgICBcbiAgICAgIC8vIGlmIGFuIGVycm9yIGhhcHBlbnMgd2hpbGUgd2UgZG9uJ3QgdXNlIHRoZSBzb2NrZXQgYW55d2F5LCBtZWgsIHRocm93IHRoZSBzb2NrZXQgYXdheVxuICAgICAgdmFyIG9uSWRsZUVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNvY2tldC5kZXN0cm95KClcbiAgICAgIH1cbiAgICAgIHNvY2tldC5fb25JZGxlRXJyb3IgPSBvbklkbGVFcnJvclxuICAgICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uSWRsZUVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGVuZGluZyByZXF1ZXN0cyBqdXN0IGRlc3Ryb3kgdGhlXG4gICAgICAvLyBzb2NrZXQgYW5kIGl0IHdpbGwgZ2V0IHJlbW92ZWQgZnJvbSB0aGUgcG9vbC4gVGhpc1xuICAgICAgLy8gZ2V0cyB1cyBvdXQgb2YgdGltZW91dCBpc3N1ZXMgYW5kIGFsbG93cyB1cyB0b1xuICAgICAgLy8gZGVmYXVsdCB0byBDb25uZWN0aW9uOmtlZXAtYWxpdmUuXG4gICAgICBzb2NrZXQuZGVzdHJveSgpXG4gICAgfVxuICB9KVxuXG59XG51dGlsLmluaGVyaXRzKEZvcmV2ZXJBZ2VudCwgQWdlbnQpXG5cbkZvcmV2ZXJBZ2VudC5kZWZhdWx0TWluU29ja2V0cyA9IDVcblxuXG5Gb3JldmVyQWdlbnQucHJvdG90eXBlLmNyZWF0ZUNvbm5lY3Rpb24gPSBuZXQuY3JlYXRlQ29ubmVjdGlvblxuRm9yZXZlckFnZW50LnByb3RvdHlwZS5hZGRSZXF1ZXN0Tm9yZXVzZSA9IEFnZW50LnByb3RvdHlwZS5hZGRSZXF1ZXN0XG5Gb3JldmVyQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbihyZXEsIGhvc3QsIHBvcnQpIHtcbiAgdmFyIG5hbWUgPSBnZXRDb25uZWN0aW9uTmFtZShob3N0LCBwb3J0KVxuICBcbiAgaWYgKHR5cGVvZiBob3N0ICE9PSAnc3RyaW5nJykge1xuICAgIHZhciBvcHRpb25zID0gaG9zdFxuICAgIHBvcnQgPSBvcHRpb25zLnBvcnRcbiAgICBob3N0ID0gb3B0aW9ucy5ob3N0XG4gIH1cblxuICBpZiAodGhpcy5mcmVlU29ja2V0c1tuYW1lXSAmJiB0aGlzLmZyZWVTb2NrZXRzW25hbWVdLmxlbmd0aCA+IDAgJiYgIXJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQpIHtcbiAgICB2YXIgaWRsZVNvY2tldCA9IHRoaXMuZnJlZVNvY2tldHNbbmFtZV0ucG9wKClcbiAgICBpZGxlU29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGlkbGVTb2NrZXQuX29uSWRsZUVycm9yKVxuICAgIGRlbGV0ZSBpZGxlU29ja2V0Ll9vbklkbGVFcnJvclxuICAgIHJlcS5fcmV1c2VkU29ja2V0ID0gdHJ1ZVxuICAgIHJlcS5vblNvY2tldChpZGxlU29ja2V0KVxuICB9IGVsc2Uge1xuICAgIHRoaXMuYWRkUmVxdWVzdE5vcmV1c2UocmVxLCBob3N0LCBwb3J0KVxuICB9XG59XG5cbkZvcmV2ZXJBZ2VudC5wcm90b3R5cGUucmVtb3ZlU29ja2V0ID0gZnVuY3Rpb24ocywgbmFtZSwgaG9zdCwgcG9ydCkge1xuICBpZiAodGhpcy5zb2NrZXRzW25hbWVdKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5zb2NrZXRzW25hbWVdLmluZGV4T2YocylcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLnNvY2tldHNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLnNvY2tldHNbbmFtZV0gJiYgdGhpcy5zb2NrZXRzW25hbWVdLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIGRvbid0IGxlYWtcbiAgICBkZWxldGUgdGhpcy5zb2NrZXRzW25hbWVdXG4gICAgZGVsZXRlIHRoaXMucmVxdWVzdHNbbmFtZV1cbiAgfVxuICBcbiAgaWYgKHRoaXMuZnJlZVNvY2tldHNbbmFtZV0pIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmZyZWVTb2NrZXRzW25hbWVdLmluZGV4T2YocylcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZyZWVTb2NrZXRzW25hbWVdLnNwbGljZShpbmRleCwgMSlcbiAgICAgIGlmICh0aGlzLmZyZWVTb2NrZXRzW25hbWVdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGhpcy5mcmVlU29ja2V0c1tuYW1lXVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnJlcXVlc3RzW25hbWVdICYmIHRoaXMucmVxdWVzdHNbbmFtZV0ubGVuZ3RoKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIHJlcXVlc3RzIGFuZCBhIHNvY2tldCBnZXRzIGNsb3NlZCBhIG5ldyBvbmVcbiAgICAvLyBuZWVkcyB0byBiZSBjcmVhdGVkIHRvIHRha2Ugb3ZlciBpbiB0aGUgcG9vbCBmb3IgdGhlIG9uZSB0aGF0IGNsb3NlZC5cbiAgICB0aGlzLmNyZWF0ZVNvY2tldChuYW1lLCBob3N0LCBwb3J0KS5lbWl0KCdmcmVlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBGb3JldmVyQWdlbnRTU0wgKG9wdGlvbnMpIHtcbiAgRm9yZXZlckFnZW50LmNhbGwodGhpcywgb3B0aW9ucylcbn1cbnV0aWwuaW5oZXJpdHMoRm9yZXZlckFnZW50U1NMLCBGb3JldmVyQWdlbnQpXG5cbkZvcmV2ZXJBZ2VudFNTTC5wcm90b3R5cGUuY3JlYXRlQ29ubmVjdGlvbiA9IGNyZWF0ZUNvbm5lY3Rpb25TU0xcbkZvcmV2ZXJBZ2VudFNTTC5wcm90b3R5cGUuYWRkUmVxdWVzdE5vcmV1c2UgPSBBZ2VudFNTTC5wcm90b3R5cGUuYWRkUmVxdWVzdFxuXG5mdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uU1NMIChwb3J0LCBob3N0LCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgcG9ydCA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0gcG9ydDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaG9zdCA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0gaG9zdDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucztcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBpZiAodHlwZW9mIHBvcnQgPT09ICdudW1iZXInKSB7XG4gICAgb3B0aW9ucy5wb3J0ID0gcG9ydDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zLmhvc3QgPSBob3N0O1xuICB9XG5cbiAgcmV0dXJuIHRscy5jb25uZWN0KG9wdGlvbnMpO1xufVxuIiwiLyogZXNsaW50LWVudiBicm93c2VyICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnID8gc2VsZi5Gb3JtRGF0YSA6IHdpbmRvdy5Gb3JtRGF0YTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJpZFwiOiBcImFmdGVyUmVxdWVzdC5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcImxhc3RBY2Nlc3NcIixcbiAgICBcImVUYWdcIixcbiAgICBcImhpdENvdW50XCJcbiAgXSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcImV4cGlyZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcInBhdHRlcm5cIjogXCJeKFxcXFxkezR9KSgtKT8oXFxcXGRcXFxcZCkoLSk/KFxcXFxkXFxcXGQpKFQpPyhcXFxcZFxcXFxkKSg6KT8oXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKFxcXFwuXFxcXGQrKT8oWnwoWystXSkoXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKT9cIlxuICAgIH0sXG4gICAgXCJsYXN0QWNjZXNzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgXCJwYXR0ZXJuXCI6IFwiXihcXFxcZHs0fSkoLSk/KFxcXFxkXFxcXGQpKC0pPyhcXFxcZFxcXFxkKShUKT8oXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKShcXFxcLlxcXFxkKyk/KFp8KFsrLV0pKFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKSk/XCJcbiAgICB9LFxuICAgIFwiZVRhZ1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJoaXRDb3VudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCJcbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwiYmVmb3JlUmVxdWVzdC5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcImxhc3RBY2Nlc3NcIixcbiAgICBcImVUYWdcIixcbiAgICBcImhpdENvdW50XCJcbiAgXSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcImV4cGlyZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcInBhdHRlcm5cIjogXCJeKFxcXFxkezR9KSgtKT8oXFxcXGRcXFxcZCkoLSk/KFxcXFxkXFxcXGQpKFQpPyhcXFxcZFxcXFxkKSg6KT8oXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKFxcXFwuXFxcXGQrKT8oWnwoWystXSkoXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKT9cIlxuICAgIH0sXG4gICAgXCJsYXN0QWNjZXNzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgXCJwYXR0ZXJuXCI6IFwiXihcXFxcZHs0fSkoLSk/KFxcXFxkXFxcXGQpKC0pPyhcXFxcZFxcXFxkKShUKT8oXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKShcXFxcLlxcXFxkKyk/KFp8KFsrLV0pKFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKSk/XCJcbiAgICB9LFxuICAgIFwiZVRhZ1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJoaXRDb3VudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCJcbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwiYnJvd3Nlci5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJuYW1lXCIsXG4gICAgXCJ2ZXJzaW9uXCJcbiAgXSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcIm5hbWVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwidmVyc2lvblwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJjb21tZW50XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJjYWNoZS5qc29uI1wiLFxuICBcInByb3BlcnRpZXNcIjoge1xuICAgIFwiYmVmb3JlUmVxdWVzdFwiOiB7XG4gICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgeyBcInR5cGVcIjogXCJudWxsXCIgfSxcbiAgICAgICAgeyBcIiRyZWZcIjogXCJiZWZvcmVSZXF1ZXN0Lmpzb24jXCIgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJhZnRlclJlcXVlc3RcIjoge1xuICAgICAgXCJvbmVPZlwiOiBbXG4gICAgICAgIHsgXCJ0eXBlXCI6IFwibnVsbFwiIH0sXG4gICAgICAgIHsgXCIkcmVmXCI6IFwiYWZ0ZXJSZXF1ZXN0Lmpzb24jXCIgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJjb21tZW50XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJjb250ZW50Lmpzb24jXCIsXG4gIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcInNpemVcIixcbiAgICBcIm1pbWVUeXBlXCJcbiAgXSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcInNpemVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiXG4gICAgfSxcbiAgICBcImNvbXByZXNzaW9uXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIlxuICAgIH0sXG4gICAgXCJtaW1lVHlwZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJ0ZXh0XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcImVuY29kaW5nXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcImNvbW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJpZFwiOiBcImNvb2tpZS5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJuYW1lXCIsXG4gICAgXCJ2YWx1ZVwiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJuYW1lXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcInZhbHVlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcInBhdGhcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwiZG9tYWluXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcImV4cGlyZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFtcInN0cmluZ1wiLCBcIm51bGxcIl0sXG4gICAgICBcImZvcm1hdFwiOiBcImRhdGUtdGltZVwiXG4gICAgfSxcbiAgICBcImh0dHBPbmx5XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIlxuICAgIH0sXG4gICAgXCJzZWN1cmVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiXG4gICAgfSxcbiAgICBcImNvbW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJpZFwiOiBcImNyZWF0b3IuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwicmVxdWlyZWRcIjogW1xuICAgIFwibmFtZVwiLFxuICAgIFwidmVyc2lvblwiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJuYW1lXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcInZlcnNpb25cIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwiZW50cnkuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwib3B0aW9uYWxcIjogdHJ1ZSxcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJzdGFydGVkRGF0ZVRpbWVcIixcbiAgICBcInRpbWVcIixcbiAgICBcInJlcXVlc3RcIixcbiAgICBcInJlc3BvbnNlXCIsXG4gICAgXCJjYWNoZVwiLFxuICAgIFwidGltaW5nc1wiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJwYWdlcmVmXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcInN0YXJ0ZWREYXRlVGltZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgIFwiZm9ybWF0XCI6IFwiZGF0ZS10aW1lXCIsXG4gICAgICBcInBhdHRlcm5cIjogXCJeKFxcXFxkezR9KSgtKT8oXFxcXGRcXFxcZCkoLSk/KFxcXFxkXFxcXGQpKFQpPyhcXFxcZFxcXFxkKSg6KT8oXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKFxcXFwuXFxcXGQrKT8oWnwoWystXSkoXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKVwiXG4gICAgfSxcbiAgICBcInRpbWVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICBcIm1pblwiOiAwXG4gICAgfSxcbiAgICBcInJlcXVlc3RcIjoge1xuICAgICAgXCIkcmVmXCI6IFwicmVxdWVzdC5qc29uI1wiXG4gICAgfSxcbiAgICBcInJlc3BvbnNlXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcInJlc3BvbnNlLmpzb24jXCJcbiAgICB9LFxuICAgIFwiY2FjaGVcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiY2FjaGUuanNvbiNcIlxuICAgIH0sXG4gICAgXCJ0aW1pbmdzXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcInRpbWluZ3MuanNvbiNcIlxuICAgIH0sXG4gICAgXCJzZXJ2ZXJJUEFkZHJlc3NcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgeyBcImZvcm1hdFwiOiBcImlwdjRcIiB9LFxuICAgICAgICB7IFwiZm9ybWF0XCI6IFwiaXB2NlwiIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwiY29ubmVjdGlvblwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJjb21tZW50XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJoYXIuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwicmVxdWlyZWRcIjogW1xuICAgIFwibG9nXCJcbiAgXSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcImxvZ1wiOiB7XG4gICAgICBcIiRyZWZcIjogXCJsb2cuanNvbiNcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwiaGVhZGVyLmpzb24jXCIsXG4gIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcIm5hbWVcIixcbiAgICBcInZhbHVlXCJcbiAgXSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcIm5hbWVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwidmFsdWVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhZnRlclJlcXVlc3Q6IHJlcXVpcmUoJy4vYWZ0ZXJSZXF1ZXN0Lmpzb24nKSxcbiAgYmVmb3JlUmVxdWVzdDogcmVxdWlyZSgnLi9iZWZvcmVSZXF1ZXN0Lmpzb24nKSxcbiAgYnJvd3NlcjogcmVxdWlyZSgnLi9icm93c2VyLmpzb24nKSxcbiAgY2FjaGU6IHJlcXVpcmUoJy4vY2FjaGUuanNvbicpLFxuICBjb250ZW50OiByZXF1aXJlKCcuL2NvbnRlbnQuanNvbicpLFxuICBjb29raWU6IHJlcXVpcmUoJy4vY29va2llLmpzb24nKSxcbiAgY3JlYXRvcjogcmVxdWlyZSgnLi9jcmVhdG9yLmpzb24nKSxcbiAgZW50cnk6IHJlcXVpcmUoJy4vZW50cnkuanNvbicpLFxuICBoYXI6IHJlcXVpcmUoJy4vaGFyLmpzb24nKSxcbiAgaGVhZGVyOiByZXF1aXJlKCcuL2hlYWRlci5qc29uJyksXG4gIGxvZzogcmVxdWlyZSgnLi9sb2cuanNvbicpLFxuICBwYWdlOiByZXF1aXJlKCcuL3BhZ2UuanNvbicpLFxuICBwYWdlVGltaW5nczogcmVxdWlyZSgnLi9wYWdlVGltaW5ncy5qc29uJyksXG4gIHBvc3REYXRhOiByZXF1aXJlKCcuL3Bvc3REYXRhLmpzb24nKSxcbiAgcXVlcnk6IHJlcXVpcmUoJy4vcXVlcnkuanNvbicpLFxuICByZXF1ZXN0OiByZXF1aXJlKCcuL3JlcXVlc3QuanNvbicpLFxuICByZXNwb25zZTogcmVxdWlyZSgnLi9yZXNwb25zZS5qc29uJyksXG4gIHRpbWluZ3M6IHJlcXVpcmUoJy4vdGltaW5ncy5qc29uJylcbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJpZFwiOiBcImxvZy5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJ2ZXJzaW9uXCIsXG4gICAgXCJjcmVhdG9yXCIsXG4gICAgXCJlbnRyaWVzXCJcbiAgXSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcInZlcnNpb25cIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwiY3JlYXRvclwiOiB7XG4gICAgICBcIiRyZWZcIjogXCJjcmVhdG9yLmpzb24jXCJcbiAgICB9LFxuICAgIFwiYnJvd3NlclwiOiB7XG4gICAgICBcIiRyZWZcIjogXCJicm93c2VyLmpzb24jXCJcbiAgICB9LFxuICAgIFwicGFnZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCJwYWdlLmpzb24jXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiZW50cmllc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcImVudHJ5Lmpzb24jXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwicGFnZS5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcInN0YXJ0ZWREYXRlVGltZVwiLFxuICAgIFwiaWRcIixcbiAgICBcInRpdGxlXCIsXG4gICAgXCJwYWdlVGltaW5nc1wiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJzdGFydGVkRGF0ZVRpbWVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImZvcm1hdFwiOiBcImRhdGUtdGltZVwiLFxuICAgICAgXCJwYXR0ZXJuXCI6IFwiXihcXFxcZHs0fSkoLSk/KFxcXFxkXFxcXGQpKC0pPyhcXFxcZFxcXFxkKShUKT8oXFxcXGRcXFxcZCkoOik/KFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKShcXFxcLlxcXFxkKyk/KFp8KFsrLV0pKFxcXFxkXFxcXGQpKDopPyhcXFxcZFxcXFxkKSlcIlxuICAgIH0sXG4gICAgXCJpZFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgIFwidW5pcXVlXCI6IHRydWVcbiAgICB9LFxuICAgIFwidGl0bGVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwicGFnZVRpbWluZ3NcIjoge1xuICAgICAgXCIkcmVmXCI6IFwicGFnZVRpbWluZ3MuanNvbiNcIlxuICAgIH0sXG4gICAgXCJjb21tZW50XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJwYWdlVGltaW5ncy5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcIm9uQ29udGVudExvYWRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICBcIm1pblwiOiAtMVxuICAgIH0sXG4gICAgXCJvbkxvYWRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICBcIm1pblwiOiAtMVxuICAgIH0sXG4gICAgXCJjb21tZW50XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJwb3N0RGF0YS5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJvcHRpb25hbFwiOiB0cnVlLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcIm1pbWVUeXBlXCJcbiAgXSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcIm1pbWVUeXBlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcInRleHRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9LFxuICAgIFwicGFyYW1zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCJcbiAgICAgIF0sXG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmFsdWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZU5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29udGVudFR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29tbWVudFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJjb21tZW50XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJxdWVyeS5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJuYW1lXCIsXG4gICAgXCJ2YWx1ZVwiXG4gIF0sXG4gIFwicHJvcGVydGllc1wiOiB7XG4gICAgXCJuYW1lXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcInZhbHVlXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcImNvbW1lbnRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICB9XG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJpZFwiOiBcInJlcXVlc3QuanNvbiNcIixcbiAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFwicmVxdWlyZWRcIjogW1xuICAgIFwibWV0aG9kXCIsXG4gICAgXCJ1cmxcIixcbiAgICBcImh0dHBWZXJzaW9uXCIsXG4gICAgXCJjb29raWVzXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJxdWVyeVN0cmluZ1wiLFxuICAgIFwiaGVhZGVyc1NpemVcIixcbiAgICBcImJvZHlTaXplXCJcbiAgXSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcIm1ldGhvZFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJ1cmxcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICBcImZvcm1hdFwiOiBcInVyaVwiXG4gICAgfSxcbiAgICBcImh0dHBWZXJzaW9uXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcImNvb2tpZXNcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCJjb29raWUuanNvbiNcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJoZWFkZXJzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiaGVhZGVyLmpzb24jXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFwicXVlcnlTdHJpbmdcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCJxdWVyeS5qc29uI1wiXG4gICAgICB9XG4gICAgfSxcbiAgICBcInBvc3REYXRhXCI6IHtcbiAgICAgIFwiJHJlZlwiOiBcInBvc3REYXRhLmpzb24jXCJcbiAgICB9LFxuICAgIFwiaGVhZGVyc1NpemVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiXG4gICAgfSxcbiAgICBcImJvZHlTaXplXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIlxuICAgIH0sXG4gICAgXCJjb21tZW50XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiaWRcIjogXCJyZXNwb25zZS5qc29uI1wiLFxuICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgXCJyZXF1aXJlZFwiOiBbXG4gICAgXCJzdGF0dXNcIixcbiAgICBcInN0YXR1c1RleHRcIixcbiAgICBcImh0dHBWZXJzaW9uXCIsXG4gICAgXCJjb29raWVzXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJjb250ZW50XCIsXG4gICAgXCJyZWRpcmVjdFVSTFwiLFxuICAgIFwiaGVhZGVyc1NpemVcIixcbiAgICBcImJvZHlTaXplXCJcbiAgXSxcbiAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICBcInN0YXR1c1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCJcbiAgICB9LFxuICAgIFwic3RhdHVzVGV4dFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJodHRwVmVyc2lvblwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH0sXG4gICAgXCJjb29raWVzXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiY29va2llLmpzb24jXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiaGVhZGVyc1wiOiB7XG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcImhlYWRlci5qc29uI1wiXG4gICAgICB9XG4gICAgfSxcbiAgICBcImNvbnRlbnRcIjoge1xuICAgICAgXCIkcmVmXCI6IFwiY29udGVudC5qc29uI1wiXG4gICAgfSxcbiAgICBcInJlZGlyZWN0VVJMXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfSxcbiAgICBcImhlYWRlcnNTaXplXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIlxuICAgIH0sXG4gICAgXCJib2R5U2l6ZVwiOiB7XG4gICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCJcbiAgICB9LFxuICAgIFwiY29tbWVudFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcImlkXCI6IFwidGltaW5ncy5qc29uI1wiLFxuICBcInJlcXVpcmVkXCI6IFtcbiAgICBcInNlbmRcIixcbiAgICBcIndhaXRcIixcbiAgICBcInJlY2VpdmVcIlxuICBdLFxuICBcInByb3BlcnRpZXNcIjoge1xuICAgIFwiZG5zXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiLFxuICAgICAgXCJtaW5cIjogLTFcbiAgICB9LFxuICAgIFwiY29ubmVjdFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgIFwibWluXCI6IC0xXG4gICAgfSxcbiAgICBcImJsb2NrZWRcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICBcIm1pblwiOiAtMVxuICAgIH0sXG4gICAgXCJzZW5kXCI6IHtcbiAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiLFxuICAgICAgXCJtaW5cIjogLTFcbiAgICB9LFxuICAgIFwid2FpdFwiOiB7XG4gICAgICBcInR5cGVcIjogXCJudW1iZXJcIixcbiAgICAgIFwibWluXCI6IC0xXG4gICAgfSxcbiAgICBcInJlY2VpdmVcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICBcIm1pblwiOiAtMVxuICAgIH0sXG4gICAgXCJzc2xcIjoge1xuICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICBcIm1pblwiOiAtMVxuICAgIH0sXG4gICAgXCJjb21tZW50XCI6IHtcbiAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBIQVJFcnJvcjtcbmZ1bmN0aW9uIEhBUkVycm9yKGVycm9ycykge1xuICB2YXIgbWVzc2FnZSA9ICd2YWxpZGF0aW9uIGZhaWxlZCc7XG5cbiAgdGhpcy5uYW1lID0gJ0hBUkVycm9yJztcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG5cbiAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IobWVzc2FnZSkuc3RhY2s7XG4gIH1cbn1cblxuSEFSRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YWxpZGF0ZSA9IHZhbGlkYXRlO1xuZXhwb3J0cy5hZnRlclJlcXVlc3QgPSBhZnRlclJlcXVlc3Q7XG5leHBvcnRzLmJlZm9yZVJlcXVlc3QgPSBiZWZvcmVSZXF1ZXN0O1xuZXhwb3J0cy5icm93c2VyID0gYnJvd3NlcjtcbmV4cG9ydHMuY2FjaGUgPSBjYWNoZTtcbmV4cG9ydHMuY29udGVudCA9IGNvbnRlbnQ7XG5leHBvcnRzLmNvb2tpZSA9IGNvb2tpZTtcbmV4cG9ydHMuY3JlYXRvciA9IGNyZWF0b3I7XG5leHBvcnRzLmVudHJ5ID0gZW50cnk7XG5leHBvcnRzLmhhciA9IGhhcjtcbmV4cG9ydHMuaGVhZGVyID0gaGVhZGVyO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLnBhZ2UgPSBwYWdlO1xuZXhwb3J0cy5wYWdlVGltaW5ncyA9IHBhZ2VUaW1pbmdzO1xuZXhwb3J0cy5wb3N0RGF0YSA9IHBvc3REYXRhO1xuZXhwb3J0cy5xdWVyeSA9IHF1ZXJ5O1xuZXhwb3J0cy5yZXF1ZXN0ID0gcmVxdWVzdDtcbmV4cG9ydHMucmVzcG9uc2UgPSByZXNwb25zZTtcbmV4cG9ydHMudGltaW5ncyA9IHRpbWluZ3M7XG5cbnZhciBfaGFyU2NoZW1hID0gcmVxdWlyZSgnaGFyLXNjaGVtYScpO1xuXG52YXIgc2NoZW1hcyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9oYXJTY2hlbWEpO1xuXG52YXIgX2FqdiA9IHJlcXVpcmUoJ2FqdicpO1xuXG52YXIgX2FqdjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hanYpO1xuXG52YXIgX2Vycm9yID0gcmVxdWlyZSgnLi9lcnJvcicpO1xuXG52YXIgX2Vycm9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Vycm9yKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09iai5kZWZhdWx0ID0gb2JqOyByZXR1cm4gbmV3T2JqOyB9IH1cblxudmFyIGFqdiA9IHZvaWQgMDtcblxuZnVuY3Rpb24gdmFsaWRhdGUobmFtZSkge1xuICB2YXIgZGF0YSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgLy8gdmFsaWRhdG9yIGNvbmZpZ1xuICBhanYgPSBhanYgfHwgbmV3IF9hanYyLmRlZmF1bHQoe1xuICAgIGFsbEVycm9yczogdHJ1ZSxcbiAgICBzY2hlbWFzOiBzY2hlbWFzXG4gIH0pO1xuXG4gIHZhciB2YWxpZGF0ZSA9IGFqdi5nZXRTY2hlbWEobmFtZSArICcuanNvbicpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHZhbGlkID0gdmFsaWRhdGUoZGF0YSk7XG5cbiAgICAhdmFsaWQgPyByZWplY3QobmV3IF9lcnJvcjIuZGVmYXVsdCh2YWxpZGF0ZS5lcnJvcnMpKSA6IHJlc29sdmUoZGF0YSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZnRlclJlcXVlc3QoZGF0YSkge1xuICByZXR1cm4gdmFsaWRhdGUoJ2FmdGVyUmVxdWVzdCcsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiBiZWZvcmVSZXF1ZXN0KGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdiZWZvcmVSZXF1ZXN0JywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGJyb3dzZXIoZGF0YSkge1xuICByZXR1cm4gdmFsaWRhdGUoJ2Jyb3dzZXInLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gY2FjaGUoZGF0YSkge1xuICByZXR1cm4gdmFsaWRhdGUoJ2NhY2hlJywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnQoZGF0YSkge1xuICByZXR1cm4gdmFsaWRhdGUoJ2NvbnRlbnQnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gY29va2llKGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdjb29raWUnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvcihkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgnY3JlYXRvcicsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiBlbnRyeShkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgnZW50cnknLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gaGFyKGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdoYXInLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gaGVhZGVyKGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdoZWFkZXInLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gbG9nKGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdsb2cnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gcGFnZShkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgncGFnZScsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiBwYWdlVGltaW5ncyhkYXRhKSB7XG4gIHJldHVybiB2YWxpZGF0ZSgncGFnZVRpbWluZ3MnLCBkYXRhKTtcbn1cblxuZnVuY3Rpb24gcG9zdERhdGEoZGF0YSkge1xuICByZXR1cm4gdmFsaWRhdGUoJ3Bvc3REYXRhJywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHF1ZXJ5KGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdxdWVyeScsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0KGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdyZXF1ZXN0JywgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlKGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCdyZXNwb25zZScsIGRhdGEpO1xufVxuXG5mdW5jdGlvbiB0aW1pbmdzKGRhdGEpIHtcbiAgcmV0dXJuIHZhbGlkYXRlKCd0aW1pbmdzJywgZGF0YSk7XG59IiwiJ3VzZSBzdHJpY3QnXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbmZ1bmN0aW9uIEhhc2hCYXNlIChibG9ja1NpemUpIHtcbiAgVHJhbnNmb3JtLmNhbGwodGhpcylcblxuICB0aGlzLl9ibG9jayA9IG5ldyBCdWZmZXIoYmxvY2tTaXplKVxuICB0aGlzLl9ibG9ja1NpemUgPSBibG9ja1NpemVcbiAgdGhpcy5fYmxvY2tPZmZzZXQgPSAwXG4gIHRoaXMuX2xlbmd0aCA9IFswLCAwLCAwLCAwXVxuXG4gIHRoaXMuX2ZpbmFsaXplZCA9IGZhbHNlXG59XG5cbmluaGVyaXRzKEhhc2hCYXNlLCBUcmFuc2Zvcm0pXG5cbkhhc2hCYXNlLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgdmFyIGVycm9yID0gbnVsbFxuICB0cnkge1xuICAgIGlmIChlbmNvZGluZyAhPT0gJ2J1ZmZlcicpIGNodW5rID0gbmV3IEJ1ZmZlcihjaHVuaywgZW5jb2RpbmcpXG4gICAgdGhpcy51cGRhdGUoY2h1bmspXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yID0gZXJyXG4gIH1cblxuICBjYWxsYmFjayhlcnJvcilcbn1cblxuSGFzaEJhc2UucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB2YXIgZXJyb3IgPSBudWxsXG4gIHRyeSB7XG4gICAgdGhpcy5wdXNoKHRoaXMuX2RpZ2VzdCgpKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvciA9IGVyclxuICB9XG5cbiAgY2FsbGJhY2soZXJyb3IpXG59XG5cbkhhc2hCYXNlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZGF0YSkgJiYgdHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdEYXRhIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZmZXInKVxuICBpZiAodGhpcy5fZmluYWxpemVkKSB0aHJvdyBuZXcgRXJyb3IoJ0RpZ2VzdCBhbHJlYWR5IGNhbGxlZCcpXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSBkYXRhID0gbmV3IEJ1ZmZlcihkYXRhLCBlbmNvZGluZyB8fCAnYmluYXJ5JylcblxuICAvLyBjb25zdW1lIGRhdGFcbiAgdmFyIGJsb2NrID0gdGhpcy5fYmxvY2tcbiAgdmFyIG9mZnNldCA9IDBcbiAgd2hpbGUgKHRoaXMuX2Jsb2NrT2Zmc2V0ICsgZGF0YS5sZW5ndGggLSBvZmZzZXQgPj0gdGhpcy5fYmxvY2tTaXplKSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMuX2Jsb2NrT2Zmc2V0OyBpIDwgdGhpcy5fYmxvY2tTaXplOykgYmxvY2tbaSsrXSA9IGRhdGFbb2Zmc2V0KytdXG4gICAgdGhpcy5fdXBkYXRlKClcbiAgICB0aGlzLl9ibG9ja09mZnNldCA9IDBcbiAgfVxuICB3aGlsZSAob2Zmc2V0IDwgZGF0YS5sZW5ndGgpIGJsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdID0gZGF0YVtvZmZzZXQrK11cblxuICAvLyB1cGRhdGUgbGVuZ3RoXG4gIGZvciAodmFyIGogPSAwLCBjYXJyeSA9IGRhdGEubGVuZ3RoICogODsgY2FycnkgPiAwOyArK2opIHtcbiAgICB0aGlzLl9sZW5ndGhbal0gKz0gY2FycnlcbiAgICBjYXJyeSA9ICh0aGlzLl9sZW5ndGhbal0gLyAweDAxMDAwMDAwMDApIHwgMFxuICAgIGlmIChjYXJyeSA+IDApIHRoaXMuX2xlbmd0aFtqXSAtPSAweDAxMDAwMDAwMDAgKiBjYXJyeVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuSGFzaEJhc2UucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ191cGRhdGUgaXMgbm90IGltcGxlbWVudGVkJylcbn1cblxuSGFzaEJhc2UucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIChlbmNvZGluZykge1xuICBpZiAodGhpcy5fZmluYWxpemVkKSB0aHJvdyBuZXcgRXJyb3IoJ0RpZ2VzdCBhbHJlYWR5IGNhbGxlZCcpXG4gIHRoaXMuX2ZpbmFsaXplZCA9IHRydWVcblxuICB2YXIgZGlnZXN0ID0gdGhpcy5fZGlnZXN0KClcbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIGRpZ2VzdCA9IGRpZ2VzdC50b1N0cmluZyhlbmNvZGluZylcbiAgcmV0dXJuIGRpZ2VzdFxufVxuXG5IYXNoQmFzZS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdfZGlnZXN0IGlzIG5vdCBpbXBsZW1lbnRlZCcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaEJhc2VcbiIsInZhciBoYXNoID0gZXhwb3J0cztcblxuaGFzaC51dGlscyA9IHJlcXVpcmUoJy4vaGFzaC91dGlscycpO1xuaGFzaC5jb21tb24gPSByZXF1aXJlKCcuL2hhc2gvY29tbW9uJyk7XG5oYXNoLnNoYSA9IHJlcXVpcmUoJy4vaGFzaC9zaGEnKTtcbmhhc2gucmlwZW1kID0gcmVxdWlyZSgnLi9oYXNoL3JpcGVtZCcpO1xuaGFzaC5obWFjID0gcmVxdWlyZSgnLi9oYXNoL2htYWMnKTtcblxuLy8gUHJveHkgaGFzaCBmdW5jdGlvbnMgdG8gdGhlIG1haW4gb2JqZWN0XG5oYXNoLnNoYTEgPSBoYXNoLnNoYS5zaGExO1xuaGFzaC5zaGEyNTYgPSBoYXNoLnNoYS5zaGEyNTY7XG5oYXNoLnNoYTIyNCA9IGhhc2guc2hhLnNoYTIyNDtcbmhhc2guc2hhMzg0ID0gaGFzaC5zaGEuc2hhMzg0O1xuaGFzaC5zaGE1MTIgPSBoYXNoLnNoYS5zaGE1MTI7XG5oYXNoLnJpcGVtZDE2MCA9IGhhc2gucmlwZW1kLnJpcGVtZDE2MDtcbiIsInZhciBoYXNoID0gcmVxdWlyZSgnLi4vaGFzaCcpO1xudmFyIHV0aWxzID0gaGFzaC51dGlscztcbnZhciBhc3NlcnQgPSB1dGlscy5hc3NlcnQ7XG5cbmZ1bmN0aW9uIEJsb2NrSGFzaCgpIHtcbiAgdGhpcy5wZW5kaW5nID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nVG90YWwgPSAwO1xuICB0aGlzLmJsb2NrU2l6ZSA9IHRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplO1xuICB0aGlzLm91dFNpemUgPSB0aGlzLmNvbnN0cnVjdG9yLm91dFNpemU7XG4gIHRoaXMuaG1hY1N0cmVuZ3RoID0gdGhpcy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGg7XG4gIHRoaXMucGFkTGVuZ3RoID0gdGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGggLyA4O1xuICB0aGlzLmVuZGlhbiA9ICdiaWcnO1xuXG4gIHRoaXMuX2RlbHRhOCA9IHRoaXMuYmxvY2tTaXplIC8gODtcbiAgdGhpcy5fZGVsdGEzMiA9IHRoaXMuYmxvY2tTaXplIC8gMzI7XG59XG5leHBvcnRzLkJsb2NrSGFzaCA9IEJsb2NrSGFzaDtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBlbmMpIHtcbiAgLy8gQ29udmVydCBtZXNzYWdlIHRvIGFycmF5LCBwYWQgaXQsIGFuZCBqb2luIGludG8gMzJiaXQgYmxvY2tzXG4gIG1zZyA9IHV0aWxzLnRvQXJyYXkobXNnLCBlbmMpO1xuICBpZiAoIXRoaXMucGVuZGluZylcbiAgICB0aGlzLnBlbmRpbmcgPSBtc2c7XG4gIGVsc2VcbiAgICB0aGlzLnBlbmRpbmcgPSB0aGlzLnBlbmRpbmcuY29uY2F0KG1zZyk7XG4gIHRoaXMucGVuZGluZ1RvdGFsICs9IG1zZy5sZW5ndGg7XG5cbiAgLy8gRW5vdWdoIGRhdGEsIHRyeSB1cGRhdGluZ1xuICBpZiAodGhpcy5wZW5kaW5nLmxlbmd0aCA+PSB0aGlzLl9kZWx0YTgpIHtcbiAgICBtc2cgPSB0aGlzLnBlbmRpbmc7XG5cbiAgICAvLyBQcm9jZXNzIHBlbmRpbmcgZGF0YSBpbiBibG9ja3NcbiAgICB2YXIgciA9IG1zZy5sZW5ndGggJSB0aGlzLl9kZWx0YTg7XG4gICAgdGhpcy5wZW5kaW5nID0gbXNnLnNsaWNlKG1zZy5sZW5ndGggLSByLCBtc2cubGVuZ3RoKTtcbiAgICBpZiAodGhpcy5wZW5kaW5nLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMucGVuZGluZyA9IG51bGw7XG5cbiAgICBtc2cgPSB1dGlscy5qb2luMzIobXNnLCAwLCBtc2cubGVuZ3RoIC0gciwgdGhpcy5lbmRpYW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSB0aGlzLl9kZWx0YTMyKVxuICAgICAgdGhpcy5fdXBkYXRlKG1zZywgaSwgaSArIHRoaXMuX2RlbHRhMzIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5CbG9ja0hhc2gucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpO1xuICBhc3NlcnQodGhpcy5wZW5kaW5nID09PSBudWxsKTtcblxuICByZXR1cm4gdGhpcy5fZGlnZXN0KGVuYyk7XG59O1xuXG5CbG9ja0hhc2gucHJvdG90eXBlLl9wYWQgPSBmdW5jdGlvbiBwYWQoKSB7XG4gIHZhciBsZW4gPSB0aGlzLnBlbmRpbmdUb3RhbDtcbiAgdmFyIGJ5dGVzID0gdGhpcy5fZGVsdGE4O1xuICB2YXIgayA9IGJ5dGVzIC0gKChsZW4gKyB0aGlzLnBhZExlbmd0aCkgJSBieXRlcyk7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkoayArIHRoaXMucGFkTGVuZ3RoKTtcbiAgcmVzWzBdID0gMHg4MDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBrOyBpKyspXG4gICAgcmVzW2ldID0gMDtcblxuICAvLyBBcHBlbmQgbGVuZ3RoXG4gIGxlbiA8PD0gMztcbiAgaWYgKHRoaXMuZW5kaWFuID09PSAnYmlnJykge1xuICAgIGZvciAodmFyIHQgPSA4OyB0IDwgdGhpcy5wYWRMZW5ndGg7IHQrKylcbiAgICAgIHJlc1tpKytdID0gMDtcblxuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAxNikgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gbGVuICYgMHhmZjtcbiAgfSBlbHNlIHtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiA4KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAxNikgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMjQpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG5cbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiIsInZhciBobWFjID0gZXhwb3J0cztcblxudmFyIGhhc2ggPSByZXF1aXJlKCcuLi9oYXNoJyk7XG52YXIgdXRpbHMgPSBoYXNoLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleS5sZW5ndGg7IGkrKylcbiAgICBrZXlbaV0gXj0gMHgzNjtcbiAgdGhpcy5pbm5lciA9IG5ldyB0aGlzLkhhc2goKS51cGRhdGUoa2V5KTtcblxuICAvLyAweDM2IF4gMHg1YyA9IDB4NmFcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspXG4gICAga2V5W2ldIF49IDB4NmE7XG4gIHRoaXMub3V0ZXIgPSBuZXcgdGhpcy5IYXNoKCkudXBkYXRlKGtleSk7XG59O1xuXG5IbWFjLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBlbmMpIHtcbiAgdGhpcy5pbm5lci51cGRhdGUobXNnLCBlbmMpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkhtYWMucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSk7XG4gIHJldHVybiB0aGlzLm91dGVyLmRpZ2VzdChlbmMpO1xufTtcbiIsInZhciBoYXNoID0gcmVxdWlyZSgnLi4vaGFzaCcpO1xudmFyIHV0aWxzID0gaGFzaC51dGlscztcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGhhc2guY29tbW9uLkJsb2NrSGFzaDtcblxuZnVuY3Rpb24gUklQRU1EMTYwKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUklQRU1EMTYwKSlcbiAgICByZXR1cm4gbmV3IFJJUEVNRDE2MCgpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuXG4gIHRoaXMuaCA9IFsgMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMCBdO1xuICB0aGlzLmVuZGlhbiA9ICdsaXR0bGUnO1xufVxudXRpbHMuaW5oZXJpdHMoUklQRU1EMTYwLCBCbG9ja0hhc2gpO1xuZXhwb3J0cy5yaXBlbWQxNjAgPSBSSVBFTUQxNjA7XG5cblJJUEVNRDE2MC5ibG9ja1NpemUgPSA1MTI7XG5SSVBFTUQxNjAub3V0U2l6ZSA9IDE2MDtcblJJUEVNRDE2MC5obWFjU3RyZW5ndGggPSAxOTI7XG5SSVBFTUQxNjAucGFkTGVuZ3RoID0gNjQ7XG5cblJJUEVNRDE2MC5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHZhciBBID0gdGhpcy5oWzBdO1xuICB2YXIgQiA9IHRoaXMuaFsxXTtcbiAgdmFyIEMgPSB0aGlzLmhbMl07XG4gIHZhciBEID0gdGhpcy5oWzNdO1xuICB2YXIgRSA9IHRoaXMuaFs0XTtcbiAgdmFyIEFoID0gQTtcbiAgdmFyIEJoID0gQjtcbiAgdmFyIENoID0gQztcbiAgdmFyIERoID0gRDtcbiAgdmFyIEVoID0gRTtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4MDsgaisrKSB7XG4gICAgdmFyIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBLCBmKGosIEIsIEMsIEQpLCBtc2dbcltqXSArIHN0YXJ0XSwgSyhqKSksXG4gICAgICAgIHNbal0pLFxuICAgICAgRSk7XG4gICAgQSA9IEU7XG4gICAgRSA9IEQ7XG4gICAgRCA9IHJvdGwzMihDLCAxMCk7XG4gICAgQyA9IEI7XG4gICAgQiA9IFQ7XG4gICAgVCA9IHN1bTMyKFxuICAgICAgcm90bDMyKFxuICAgICAgICBzdW0zMl80KEFoLCBmKDc5IC0gaiwgQmgsIENoLCBEaCksIG1zZ1tyaFtqXSArIHN0YXJ0XSwgS2goaikpLFxuICAgICAgICBzaFtqXSksXG4gICAgICBFaCk7XG4gICAgQWggPSBFaDtcbiAgICBFaCA9IERoO1xuICAgIERoID0gcm90bDMyKENoLCAxMCk7XG4gICAgQ2ggPSBCaDtcbiAgICBCaCA9IFQ7XG4gIH1cbiAgVCA9IHN1bTMyXzModGhpcy5oWzFdLCBDLCBEaCk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyXzModGhpcy5oWzJdLCBELCBFaCk7XG4gIHRoaXMuaFsyXSA9IHN1bTMyXzModGhpcy5oWzNdLCBFLCBBaCk7XG4gIHRoaXMuaFszXSA9IHN1bTMyXzModGhpcy5oWzRdLCBBLCBCaCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyXzModGhpcy5oWzBdLCBCLCBDaCk7XG4gIHRoaXMuaFswXSA9IFQ7XG59O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnbGl0dGxlJyk7XG59O1xuXG5mdW5jdGlvbiBmKGosIHgsIHksIHopIHtcbiAgaWYgKGogPD0gMTUpXG4gICAgcmV0dXJuIHggXiB5IF4gejtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gKHggJiB5KSB8ICgofngpICYgeik7XG4gIGVsc2UgaWYgKGogPD0gNDcpXG4gICAgcmV0dXJuICh4IHwgKH55KSkgXiB6O1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAoeCAmIHopIHwgKHkgJiAofnopKTtcbiAgZWxzZVxuICAgIHJldHVybiB4IF4gKHkgfCAofnopKTtcbn1cblxuZnVuY3Rpb24gSyhqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDAwMDAwMDAwO1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVhODI3OTk5O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZlZDllYmExO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDhmMWJiY2RjO1xuICBlbHNlXG4gICAgcmV0dXJuIDB4YTk1M2ZkNGU7XG59XG5cbmZ1bmN0aW9uIEtoKGopIHtcbiAgaWYgKGogPD0gMTUpXG4gICAgcmV0dXJuIDB4NTBhMjhiZTY7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuIDB4NWM0ZGQxMjQ7XG4gIGVsc2UgaWYgKGogPD0gNDcpXG4gICAgcmV0dXJuIDB4NmQ3MDNlZjM7XG4gIGVsc2UgaWYgKGogPD0gNjMpXG4gICAgcmV0dXJuIDB4N2E2ZDc2ZTk7XG4gIGVsc2VcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbn1cblxudmFyIHIgPSBbXG4gIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsXG4gIDcsIDQsIDEzLCAxLCAxMCwgNiwgMTUsIDMsIDEyLCAwLCA5LCA1LCAyLCAxNCwgMTEsIDgsXG4gIDMsIDEwLCAxNCwgNCwgOSwgMTUsIDgsIDEsIDIsIDcsIDAsIDYsIDEzLCAxMSwgNSwgMTIsXG4gIDEsIDksIDExLCAxMCwgMCwgOCwgMTIsIDQsIDEzLCAzLCA3LCAxNSwgMTQsIDUsIDYsIDIsXG4gIDQsIDAsIDUsIDksIDcsIDEyLCAyLCAxMCwgMTQsIDEsIDMsIDgsIDExLCA2LCAxNSwgMTNcbl07XG5cbnZhciByaCA9IFtcbiAgNSwgMTQsIDcsIDAsIDksIDIsIDExLCA0LCAxMywgNiwgMTUsIDgsIDEsIDEwLCAzLCAxMixcbiAgNiwgMTEsIDMsIDcsIDAsIDEzLCA1LCAxMCwgMTQsIDE1LCA4LCAxMiwgNCwgOSwgMSwgMixcbiAgMTUsIDUsIDEsIDMsIDcsIDE0LCA2LCA5LCAxMSwgOCwgMTIsIDIsIDEwLCAwLCA0LCAxMyxcbiAgOCwgNiwgNCwgMSwgMywgMTEsIDE1LCAwLCA1LCAxMiwgMiwgMTMsIDksIDcsIDEwLCAxNCxcbiAgMTIsIDE1LCAxMCwgNCwgMSwgNSwgOCwgNywgNiwgMiwgMTMsIDE0LCAwLCAzLCA5LCAxMVxuXTtcblxudmFyIHMgPSBbXG4gIDExLCAxNCwgMTUsIDEyLCA1LCA4LCA3LCA5LCAxMSwgMTMsIDE0LCAxNSwgNiwgNywgOSwgOCxcbiAgNywgNiwgOCwgMTMsIDExLCA5LCA3LCAxNSwgNywgMTIsIDE1LCA5LCAxMSwgNywgMTMsIDEyLFxuICAxMSwgMTMsIDYsIDcsIDE0LCA5LCAxMywgMTUsIDE0LCA4LCAxMywgNiwgNSwgMTIsIDcsIDUsXG4gIDExLCAxMiwgMTQsIDE1LCAxNCwgMTUsIDksIDgsIDksIDE0LCA1LCA2LCA4LCA2LCA1LCAxMixcbiAgOSwgMTUsIDUsIDExLCA2LCA4LCAxMywgMTIsIDUsIDEyLCAxMywgMTQsIDExLCA4LCA1LCA2XG5dO1xuXG52YXIgc2ggPSBbXG4gIDgsIDksIDksIDExLCAxMywgMTUsIDE1LCA1LCA3LCA3LCA4LCAxMSwgMTQsIDE0LCAxMiwgNixcbiAgOSwgMTMsIDE1LCA3LCAxMiwgOCwgOSwgMTEsIDcsIDcsIDEyLCA3LCA2LCAxNSwgMTMsIDExLFxuICA5LCA3LCAxNSwgMTEsIDgsIDYsIDYsIDE0LCAxMiwgMTMsIDUsIDE0LCAxMywgMTMsIDcsIDUsXG4gIDE1LCA1LCA4LCAxMSwgMTQsIDE0LCA2LCAxNCwgNiwgOSwgMTIsIDksIDEyLCA1LCAxNSwgOCxcbiAgOCwgNSwgMTIsIDksIDEyLCA1LCAxNCwgNiwgOCwgMTMsIDYsIDUsIDE1LCAxMywgMTEsIDExXG5dO1xuIiwidmFyIGhhc2ggPSByZXF1aXJlKCcuLi9oYXNoJyk7XG52YXIgdXRpbHMgPSBoYXNoLnV0aWxzO1xudmFyIGFzc2VydCA9IHV0aWxzLmFzc2VydDtcblxudmFyIHJvdHIzMiA9IHV0aWxzLnJvdHIzMjtcbnZhciByb3RsMzIgPSB1dGlscy5yb3RsMzI7XG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcbnZhciBCbG9ja0hhc2ggPSBoYXNoLmNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxudmFyIHNoYTUxMl9LID0gW1xuICAweDQyOGEyZjk4LCAweGQ3MjhhZTIyLCAweDcxMzc0NDkxLCAweDIzZWY2NWNkLFxuICAweGI1YzBmYmNmLCAweGVjNGQzYjJmLCAweGU5YjVkYmE1LCAweDgxODlkYmJjLFxuICAweDM5NTZjMjViLCAweGYzNDhiNTM4LCAweDU5ZjExMWYxLCAweGI2MDVkMDE5LFxuICAweDkyM2Y4MmE0LCAweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4LFxuICAweGQ4MDdhYTk4LCAweGEzMDMwMjQyLCAweDEyODM1YjAxLCAweDQ1NzA2ZmJlLFxuICAweDI0MzE4NWJlLCAweDRlZTRiMjhjLCAweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyLFxuICAweDcyYmU1ZDc0LCAweGYyN2I4OTZmLCAweDgwZGViMWZlLCAweDNiMTY5NmIxLFxuICAweDliZGMwNmE3LCAweDI1YzcxMjM1LCAweGMxOWJmMTc0LCAweGNmNjkyNjk0LFxuICAweGU0OWI2OWMxLCAweDllZjE0YWQyLCAweGVmYmU0Nzg2LCAweDM4NGYyNWUzLFxuICAweDBmYzE5ZGM2LCAweDhiOGNkNWI1LCAweDI0MGNhMWNjLCAweDc3YWM5YzY1LFxuICAweDJkZTkyYzZmLCAweDU5MmIwMjc1LCAweDRhNzQ4NGFhLCAweDZlYTZlNDgzLFxuICAweDVjYjBhOWRjLCAweGJkNDFmYmQ0LCAweDc2Zjk4OGRhLCAweDgzMTE1M2I1LFxuICAweDk4M2U1MTUyLCAweGVlNjZkZmFiLCAweGE4MzFjNjZkLCAweDJkYjQzMjEwLFxuICAweGIwMDMyN2M4LCAweDk4ZmIyMTNmLCAweGJmNTk3ZmM3LCAweGJlZWYwZWU0LFxuICAweGM2ZTAwYmYzLCAweDNkYTg4ZmMyLCAweGQ1YTc5MTQ3LCAweDkzMGFhNzI1LFxuICAweDA2Y2E2MzUxLCAweGUwMDM4MjZmLCAweDE0MjkyOTY3LCAweDBhMGU2ZTcwLFxuICAweDI3YjcwYTg1LCAweDQ2ZDIyZmZjLCAweDJlMWIyMTM4LCAweDVjMjZjOTI2LFxuICAweDRkMmM2ZGZjLCAweDVhYzQyYWVkLCAweDUzMzgwZDEzLCAweDlkOTViM2RmLFxuICAweDY1MGE3MzU0LCAweDhiYWY2M2RlLCAweDc2NmEwYWJiLCAweDNjNzdiMmE4LFxuICAweDgxYzJjOTJlLCAweDQ3ZWRhZWU2LCAweDkyNzIyYzg1LCAweDE0ODIzNTNiLFxuICAweGEyYmZlOGExLCAweDRjZjEwMzY0LCAweGE4MWE2NjRiLCAweGJjNDIzMDAxLFxuICAweGMyNGI4YjcwLCAweGQwZjg5NzkxLCAweGM3NmM1MWEzLCAweDA2NTRiZTMwLFxuICAweGQxOTJlODE5LCAweGQ2ZWY1MjE4LCAweGQ2OTkwNjI0LCAweDU1NjVhOTEwLFxuICAweGY0MGUzNTg1LCAweDU3NzEyMDJhLCAweDEwNmFhMDcwLCAweDMyYmJkMWI4LFxuICAweDE5YTRjMTE2LCAweGI4ZDJkMGM4LCAweDFlMzc2YzA4LCAweDUxNDFhYjUzLFxuICAweDI3NDg3NzRjLCAweGRmOGVlYjk5LCAweDM0YjBiY2I1LCAweGUxOWI0OGE4LFxuICAweDM5MWMwY2IzLCAweGM1Yzk1YTYzLCAweDRlZDhhYTRhLCAweGUzNDE4YWNiLFxuICAweDViOWNjYTRmLCAweDc3NjNlMzczLCAweDY4MmU2ZmYzLCAweGQ2YjJiOGEzLFxuICAweDc0OGY4MmVlLCAweDVkZWZiMmZjLCAweDc4YTU2MzZmLCAweDQzMTcyZjYwLFxuICAweDg0Yzg3ODE0LCAweGExZjBhYjcyLCAweDhjYzcwMjA4LCAweDFhNjQzOWVjLFxuICAweDkwYmVmZmZhLCAweDIzNjMxZTI4LCAweGE0NTA2Y2ViLCAweGRlODJiZGU5LFxuICAweGJlZjlhM2Y3LCAweGIyYzY3OTE1LCAweGM2NzE3OGYyLCAweGUzNzI1MzJiLFxuICAweGNhMjczZWNlLCAweGVhMjY2MTljLCAweGQxODZiOGM3LCAweDIxYzBjMjA3LFxuICAweGVhZGE3ZGQ2LCAweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLCAweGVlNmVkMTc4LFxuICAweDA2ZjA2N2FhLCAweDcyMTc2ZmJhLCAweDBhNjM3ZGM1LCAweGEyYzg5OGE2LFxuICAweDExM2Y5ODA0LCAweGJlZjkwZGFlLCAweDFiNzEwYjM1LCAweDEzMWM0NzFiLFxuICAweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLCAweDQwYzcyNDkzLFxuICAweDNjOWViZTBhLCAweDE1YzliZWJjLCAweDQzMWQ2N2M0LCAweDljMTAwZDRjLFxuICAweDRjYzVkNGJlLCAweGNiM2U0MmI2LCAweDU5N2YyOTljLCAweGZjNjU3ZTJhLFxuICAweDVmY2I2ZmFiLCAweDNhZDZmYWVjLCAweDZjNDQxOThjLCAweDRhNDc1ODE3XG5dO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEEyNTYoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyNTYpKVxuICAgIHJldHVybiBuZXcgU0hBMjU2KCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFsgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAgICAgICAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5IF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xuZXhwb3J0cy5zaGEyNTYgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IFcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgVDEgPSBzdW0zMl81KGgsIHMxXzI1NihlKSwgY2gzMihlLCBmLCBnKSwgdGhpcy5rW2ldLCBXW2ldKTtcbiAgICB2YXIgVDIgPSBzdW0zMihzMF8yNTYoYSksIG1hajMyKGEsIGIsIGMpKTtcbiAgICBoID0gZztcbiAgICBnID0gZjtcbiAgICBmID0gZTtcbiAgICBlID0gc3VtMzIoZCwgVDEpO1xuICAgIGQgPSBjO1xuICAgIGMgPSBiO1xuICAgIGIgPSBhO1xuICAgIGEgPSBzdW0zMihUMSwgVDIpO1xuICB9XG5cbiAgdGhpcy5oWzBdID0gc3VtMzIodGhpcy5oWzBdLCBhKTtcbiAgdGhpcy5oWzFdID0gc3VtMzIodGhpcy5oWzFdLCBiKTtcbiAgdGhpcy5oWzJdID0gc3VtMzIodGhpcy5oWzJdLCBjKTtcbiAgdGhpcy5oWzNdID0gc3VtMzIodGhpcy5oWzNdLCBkKTtcbiAgdGhpcy5oWzRdID0gc3VtMzIodGhpcy5oWzRdLCBlKTtcbiAgdGhpcy5oWzVdID0gc3VtMzIodGhpcy5oWzVdLCBmKTtcbiAgdGhpcy5oWzZdID0gc3VtMzIodGhpcy5oWzZdLCBnKTtcbiAgdGhpcy5oWzddID0gc3VtMzIodGhpcy5oWzddLCBoKTtcbn07XG5cblNIQTI1Ni5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG5cbmZ1bmN0aW9uIFNIQTIyNCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNIQTIyNCkpXG4gICAgcmV0dXJuIG5ldyBTSEEyMjQoKTtcblxuICBTSEEyNTYuY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gWyAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgICAgICAgICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbmV4cG9ydHMuc2hhMjI0ID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG5mdW5jdGlvbiBTSEE1MTIoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEE1MTIpKVxuICAgIHJldHVybiBuZXcgU0hBNTEyKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFsgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAgICAgICAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgICAgICAgICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgICAgICAgICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAgICAgICAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgICAgICAgICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgICAgICAgICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAgICAgICAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbmV4cG9ydHMuc2hhNTEyID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShjMF9oaSwgYzBfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgICAgICAgICAgICAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgICAgICAgICAgICAgICAgICBjM19oaSwgYzNfbG8pO1xuICAgIFdbaSArIDFdID0gc3VtNjRfNF9sbyhjMF9oaSwgYzBfbG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjM19oaSwgYzNfbG8pO1xuICB9XG59O1xuXG5TSEE1MTIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdGhpcy5fcHJlcGFyZUJsb2NrKG1zZywgc3RhcnQpO1xuXG4gIHZhciBXID0gdGhpcy5XO1xuXG4gIHZhciBhaCA9IHRoaXMuaFswXTtcbiAgdmFyIGFsID0gdGhpcy5oWzFdO1xuICB2YXIgYmggPSB0aGlzLmhbMl07XG4gIHZhciBibCA9IHRoaXMuaFszXTtcbiAgdmFyIGNoID0gdGhpcy5oWzRdO1xuICB2YXIgY2wgPSB0aGlzLmhbNV07XG4gIHZhciBkaCA9IHRoaXMuaFs2XTtcbiAgdmFyIGRsID0gdGhpcy5oWzddO1xuICB2YXIgZWggPSB0aGlzLmhbOF07XG4gIHZhciBlbCA9IHRoaXMuaFs5XTtcbiAgdmFyIGZoID0gdGhpcy5oWzEwXTtcbiAgdmFyIGZsID0gdGhpcy5oWzExXTtcbiAgdmFyIGdoID0gdGhpcy5oWzEyXTtcbiAgdmFyIGdsID0gdGhpcy5oWzEzXTtcbiAgdmFyIGhoID0gdGhpcy5oWzE0XTtcbiAgdmFyIGhsID0gdGhpcy5oWzE1XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IFcubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgYzBfaGkgPSBoaDtcbiAgICB2YXIgYzBfbG8gPSBobDtcbiAgICB2YXIgYzFfaGkgPSBzMV81MTJfaGkoZWgsIGVsKTtcbiAgICB2YXIgYzFfbG8gPSBzMV81MTJfbG8oZWgsIGVsKTtcbiAgICB2YXIgYzJfaGkgPSBjaDY0X2hpKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjMl9sbyA9IGNoNjRfbG8oZWgsIGVsLCBmaCwgZmwsIGdoLCBnbCk7XG4gICAgdmFyIGMzX2hpID0gdGhpcy5rW2ldO1xuICAgIHZhciBjM19sbyA9IHRoaXMua1tpICsgMV07XG4gICAgdmFyIGM0X2hpID0gV1tpXTtcbiAgICB2YXIgYzRfbG8gPSBXW2kgKyAxXTtcblxuICAgIHZhciBUMV9oaSA9IHN1bTY0XzVfaGkoYzBfaGksIGMwX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKGMwX2hpLCBjMF9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMzX2hpLCBjM19sbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGM0X2hpLCBjNF9sbyk7XG5cbiAgICB2YXIgYzBfaGkgPSBzMF81MTJfaGkoYWgsIGFsKTtcbiAgICB2YXIgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICB2YXIgYzFfaGkgPSBtYWo2NF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsKTtcbiAgICB2YXIgYzFfbG8gPSBtYWo2NF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsKTtcblxuICAgIHZhciBUMl9oaSA9IHN1bTY0X2hpKGMwX2hpLCBjMF9sbywgYzFfaGksIGMxX2xvKTtcbiAgICB2YXIgVDJfbG8gPSBzdW02NF9sbyhjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG5cbiAgICBoaCA9IGdoO1xuICAgIGhsID0gZ2w7XG5cbiAgICBnaCA9IGZoO1xuICAgIGdsID0gZmw7XG5cbiAgICBmaCA9IGVoO1xuICAgIGZsID0gZWw7XG5cbiAgICBlaCA9IHN1bTY0X2hpKGRoLCBkbCwgVDFfaGksIFQxX2xvKTtcbiAgICBlbCA9IHN1bTY0X2xvKGRsLCBkbCwgVDFfaGksIFQxX2xvKTtcblxuICAgIGRoID0gY2g7XG4gICAgZGwgPSBjbDtcblxuICAgIGNoID0gYmg7XG4gICAgY2wgPSBibDtcblxuICAgIGJoID0gYWg7XG4gICAgYmwgPSBhbDtcblxuICAgIGFoID0gc3VtNjRfaGkoVDFfaGksIFQxX2xvLCBUMl9oaSwgVDJfbG8pO1xuICAgIGFsID0gc3VtNjRfbG8oVDFfaGksIFQxX2xvLCBUMl9oaSwgVDJfbG8pO1xuICB9XG5cbiAgc3VtNjQodGhpcy5oLCAwLCBhaCwgYWwpO1xuICBzdW02NCh0aGlzLmgsIDIsIGJoLCBibCk7XG4gIHN1bTY0KHRoaXMuaCwgNCwgY2gsIGNsKTtcbiAgc3VtNjQodGhpcy5oLCA2LCBkaCwgZGwpO1xuICBzdW02NCh0aGlzLmgsIDgsIGVoLCBlbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTAsIGZoLCBmbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTIsIGdoLCBnbCk7XG4gIHN1bTY0KHRoaXMuaCwgMTQsIGhoLCBobCk7XG59O1xuXG5TSEE1MTIucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaCwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLCAnYmlnJyk7XG59O1xuXG5mdW5jdGlvbiBTSEEzODQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEzODQpKVxuICAgIHJldHVybiBuZXcgU0hBMzg0KCk7XG5cbiAgU0hBNTEyLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFsgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAgICAgICAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgICAgICAgICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgICAgICAgICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAgICAgICAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgICAgICAgICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgICAgICAgICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAgICAgICAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5leHBvcnRzLnNoYTM4NCA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG5cbmZ1bmN0aW9uIFNIQTEoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEExKSlcbiAgICByZXR1cm4gbmV3IFNIQTEoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcbiAgdGhpcy5oID0gWyAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgICAgICAgICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbmV4cG9ydHMuc2hhMSA9IFNIQTE7XG5cblNIQTEuYmxvY2tTaXplID0gNTEyO1xuU0hBMS5vdXRTaXplID0gMTYwO1xuU0hBMS5obWFjU3RyZW5ndGggPSA4MDtcblNIQTEucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTEucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiBfdXBkYXRlKG1zZywgc3RhcnQpIHtcbiAgdmFyIFcgPSB0aGlzLlc7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKVxuICAgIFdbaV0gPSBtc2dbc3RhcnQgKyBpXTtcblxuICBmb3IoOyBpIDwgVy5sZW5ndGg7IGkrKylcbiAgICBXW2ldID0gcm90bDMyKFdbaSAtIDNdIF4gV1tpIC0gOF0gXiBXW2kgLSAxNF0gXiBXW2kgLSAxNl0sIDEpO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IFcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcyA9IH5+KGkgLyAyMCk7XG4gICAgdmFyIHQgPSBzdW0zMl81KHJvdGwzMihhLCA1KSwgZnRfMShzLCBiLCBjLCBkKSwgZSwgV1tpXSwgc2hhMV9LW3NdKTtcbiAgICBlID0gZDtcbiAgICBkID0gYztcbiAgICBjID0gcm90bDMyKGIsIDMwKTtcbiAgICBiID0gYTtcbiAgICBhID0gdDtcbiAgfVxuXG4gIHRoaXMuaFswXSA9IHN1bTMyKHRoaXMuaFswXSwgYSk7XG4gIHRoaXMuaFsxXSA9IHN1bTMyKHRoaXMuaFsxXSwgYik7XG4gIHRoaXMuaFsyXSA9IHN1bTMyKHRoaXMuaFsyXSwgYyk7XG4gIHRoaXMuaFszXSA9IHN1bTMyKHRoaXMuaFszXSwgZCk7XG4gIHRoaXMuaFs0XSA9IHN1bTMyKHRoaXMuaFs0XSwgZSk7XG59O1xuXG5TSEExLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cblxuZnVuY3Rpb24gbWFqMzIoeCwgeSwgeikge1xuICByZXR1cm4gKHggJiB5KSBeICh4ICYgeikgXiAoeSAmIHopO1xufVxuXG5mdW5jdGlvbiBwMzIoeCwgeSwgeikge1xuICByZXR1cm4geCBeIHkgXiB6O1xufVxuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5cbmZ1bmN0aW9uIHMxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNikgXiByb3RyMzIoeCwgMTEpIF4gcm90cjMyKHgsIDI1KTtcbn1cblxuZnVuY3Rpb24gZzBfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA3KSBeIHJvdHIzMih4LCAxOCkgXiAoeCA+Pj4gMyk7XG59XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5cbmZ1bmN0aW9uIGZ0XzEocywgeCwgeSwgeikge1xuICBpZiAocyA9PT0gMClcbiAgICByZXR1cm4gY2gzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDEgfHwgcyA9PT0gMylcbiAgICByZXR1cm4gcDMyKHgsIHksIHopO1xuICBpZiAocyA9PT0gMilcbiAgICByZXR1cm4gbWFqMzIoeCwgeSwgeik7XG59XG5cbmZ1bmN0aW9uIGNoNjRfaGkoeGgsIHhsLCB5aCwgeWwsIHpoLCB6bCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICgofnhoKSAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBjaDY0X2xvKHhoLCB4bCwgeWgsIHlsLCB6aCwgemwpIHtcbiAgdmFyIHIgPSAoeGwgJiB5bCkgXiAoKH54bCkgJiB6bCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gbWFqNjRfaGkoeGgsIHhsLCB5aCwgeWwsIHpoLCB6bCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIiwidmFyIHV0aWxzID0gZXhwb3J0cztcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmZ1bmN0aW9uIHRvQXJyYXkobXNnLCBlbmMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobXNnKSlcbiAgICByZXR1cm4gbXNnLnNsaWNlKCk7XG4gIGlmICghbXNnKVxuICAgIHJldHVybiBbXTtcbiAgdmFyIHJlcyA9IFtdO1xuICBpZiAodHlwZW9mIG1zZyA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIWVuYykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMgPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICAgICAgdmFyIGhpID0gYyA+PiA4O1xuICAgICAgICB2YXIgbG8gPSBjICYgMHhmZjtcbiAgICAgICAgaWYgKGhpKVxuICAgICAgICAgIHJlcy5wdXNoKGhpLCBsbyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXMucHVzaChsbyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gMilcbiAgICAgICAgcmVzLnB1c2gocGFyc2VJbnQobXNnW2ldICsgbXNnW2kgKyAxXSwgMTYpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgICByZXNbaV0gPSBtc2dbaV0gfCAwO1xuICB9XG4gIHJldHVybiByZXM7XG59XG51dGlscy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxudXRpbHMudG9IZXggPSB0b0hleDtcblxuZnVuY3Rpb24gaHRvbmwodykge1xuICB2YXIgcmVzID0gKHcgPj4+IDI0KSB8XG4gICAgICAgICAgICAoKHcgPj4+IDgpICYgMHhmZjAwKSB8XG4gICAgICAgICAgICAoKHcgPDwgOCkgJiAweGZmMDAwMCkgfFxuICAgICAgICAgICAgKCh3ICYgMHhmZikgPDwgMjQpO1xuICByZXR1cm4gcmVzID4+PiAwO1xufVxudXRpbHMuaHRvbmwgPSBodG9ubDtcblxuZnVuY3Rpb24gdG9IZXgzMihtc2csIGVuZGlhbikge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHcgPSBtc2dbaV07XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2xpdHRsZScpXG4gICAgICB3ID0gaHRvbmwodyk7XG4gICAgcmVzICs9IHplcm84KHcudG9TdHJpbmcoMTYpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxudXRpbHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG51dGlscy56ZXJvMiA9IHplcm8yO1xuXG5mdW5jdGlvbiB6ZXJvOCh3b3JkKSB7XG4gIGlmICh3b3JkLmxlbmd0aCA9PT0gNylcbiAgICByZXR1cm4gJzAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDYpXG4gICAgcmV0dXJuICcwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNSlcbiAgICByZXR1cm4gJzAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNClcbiAgICByZXR1cm4gJzAwMDAnICsgd29yZDtcbiAgZWxzZSBpZiAod29yZC5sZW5ndGggPT09IDMpXG4gICAgcmV0dXJuICcwMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMilcbiAgICByZXR1cm4gJzAwMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMSlcbiAgICByZXR1cm4gJzAwMDAwMDAnICsgd29yZDtcbiAgZWxzZVxuICAgIHJldHVybiB3b3JkO1xufVxudXRpbHMuemVybzggPSB6ZXJvODtcblxuZnVuY3Rpb24gam9pbjMyKG1zZywgc3RhcnQsIGVuZCwgZW5kaWFuKSB7XG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydDtcbiAgYXNzZXJ0KGxlbiAlIDQgPT09IDApO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGxlbiAvIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IHN0YXJ0OyBpIDwgcmVzLmxlbmd0aDsgaSsrLCBrICs9IDQpIHtcbiAgICB2YXIgdztcbiAgICBpZiAoZW5kaWFuID09PSAnYmlnJylcbiAgICAgIHcgPSAobXNnW2tdIDw8IDI0KSB8IChtc2dbayArIDFdIDw8IDE2KSB8IChtc2dbayArIDJdIDw8IDgpIHwgbXNnW2sgKyAzXTtcbiAgICBlbHNlXG4gICAgICB3ID0gKG1zZ1trICsgM10gPDwgMjQpIHwgKG1zZ1trICsgMl0gPDwgMTYpIHwgKG1zZ1trICsgMV0gPDwgOCkgfCBtc2dba107XG4gICAgcmVzW2ldID0gdyA+Pj4gMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxudXRpbHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxudXRpbHMuc3BsaXQzMiA9IHNwbGl0MzI7XG5cbmZ1bmN0aW9uIHJvdHIzMih3LCBiKSB7XG4gIHJldHVybiAodyA+Pj4gYikgfCAodyA8PCAoMzIgLSBiKSk7XG59XG51dGlscy5yb3RyMzIgPSByb3RyMzI7XG5cbmZ1bmN0aW9uIHJvdGwzMih3LCBiKSB7XG4gIHJldHVybiAodyA8PCBiKSB8ICh3ID4+PiAoMzIgLSBiKSk7XG59XG51dGlscy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG51dGlscy5zdW0zMiA9IHN1bTMyO1xuXG5mdW5jdGlvbiBzdW0zMl8zKGEsIGIsIGMpIHtcbiAgcmV0dXJuIChhICsgYiArIGMpID4+PiAwO1xufVxudXRpbHMuc3VtMzJfMyA9IHN1bTMyXzM7XG5cbmZ1bmN0aW9uIHN1bTMyXzQoYSwgYiwgYywgZCkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQpID4+PiAwO1xufVxudXRpbHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbnV0aWxzLnN1bTMyXzUgPSBzdW0zMl81O1xuXG5mdW5jdGlvbiBhc3NlcnQoY29uZCwgbXNnKSB7XG4gIGlmICghY29uZClcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICdBc3NlcnRpb24gZmFpbGVkJyk7XG59XG51dGlscy5hc3NlcnQgPSBhc3NlcnQ7XG5cbnV0aWxzLmluaGVyaXRzID0gaW5oZXJpdHM7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59O1xuZXhwb3J0cy5zdW02NF9oaSA9IHN1bTY0X2hpO1xuXG5mdW5jdGlvbiBzdW02NF9sbyhhaCwgYWwsIGJoLCBibCkge1xuICB2YXIgbG8gPSBhbCArIGJsO1xuICByZXR1cm4gbG8gPj4+IDA7XG59O1xuZXhwb3J0cy5zdW02NF9sbyA9IHN1bTY0X2xvO1xuXG5mdW5jdGlvbiBzdW02NF80X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCkge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgbG8gPSBhbDtcbiAgbG8gPSAobG8gKyBibCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgYWwgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBjbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgY2wgPyAxIDogMDtcbiAgbG8gPSAobG8gKyBkbCkgPj4+IDA7XG4gIGNhcnJ5ICs9IGxvIDwgZGwgPyAxIDogMDtcblxuICB2YXIgaGkgPSBhaCArIGJoICsgY2ggKyBkaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59O1xuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn07XG5leHBvcnRzLnN1bTY0XzRfbG8gPSBzdW02NF80X2xvO1xuXG5mdW5jdGlvbiBzdW02NF81X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBjYXJyeSA9IDA7XG4gIHZhciBsbyA9IGFsO1xuICBsbyA9IChsbyArIGJsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBhbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGNsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBjbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGRsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBkbCA/IDEgOiAwO1xuICBsbyA9IChsbyArIGVsKSA+Pj4gMDtcbiAgY2FycnkgKz0gbG8gPCBlbCA/IDEgOiAwO1xuXG4gIHZhciBoaSA9IGFoICsgYmggKyBjaCArIGRoICsgZWggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufTtcbmV4cG9ydHMuc3VtNjRfNV9oaSA9IHN1bTY0XzVfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0XzVfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGwgKyBlbDtcblxuICByZXR1cm4gbG8gPj4+IDA7XG59O1xuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn07XG5leHBvcnRzLnJvdHI2NF9oaSA9IHJvdHI2NF9oaTtcblxuZnVuY3Rpb24gcm90cjY0X2xvKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFoIDw8ICgzMiAtIG51bSkpIHwgKGFsID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn07XG5leHBvcnRzLnJvdHI2NF9sbyA9IHJvdHI2NF9sbztcblxuZnVuY3Rpb24gc2hyNjRfaGkoYWgsIGFsLCBudW0pIHtcbiAgcmV0dXJuIGFoID4+PiBudW07XG59O1xuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59O1xuZXhwb3J0cy5zaHI2NF9sbyA9IHNocjY0X2xvO1xuIiwiLypcclxuICAgIEhUVFAgSGF3ayBBdXRoZW50aWNhdGlvbiBTY2hlbWVcclxuICAgIENvcHlyaWdodCAoYykgMjAxMi0yMDE0LCBFcmFuIEhhbW1lciA8ZXJhbkBoYW1tZXIuaW8+XHJcbiAgICBCU0QgTGljZW5zZWRcclxuKi9cclxuXHJcblxyXG4vLyBEZWNsYXJlIG5hbWVzcGFjZVxyXG5cclxudmFyIGhhd2sgPSB7XHJcbiAgICBpbnRlcm5hbHM6IHt9XHJcbn07XHJcblxyXG5cclxuaGF3ay5jbGllbnQgPSB7XHJcblxyXG4gICAgLy8gR2VuZXJhdGUgYW4gQXV0aG9yaXphdGlvbiBoZWFkZXIgZm9yIGEgZ2l2ZW4gcmVxdWVzdFxyXG5cclxuICAgIC8qXHJcbiAgICAgICAgdXJpOiAnaHR0cDovL2V4YW1wbGUuY29tL3Jlc291cmNlP2E9Yicgb3Igb2JqZWN0IGdlbmVyYXRlZCBieSBoYXdrLnV0aWxzLnBhcnNlVXJpKClcclxuICAgICAgICBtZXRob2Q6IEhUVFAgdmVyYiAoZS5nLiAnR0VUJywgJ1BPU1QnKVxyXG4gICAgICAgIG9wdGlvbnM6IHtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlcXVpcmVkXHJcblxyXG4gICAgICAgICAgICBjcmVkZW50aWFsczoge1xyXG4gICAgICAgICAgICAgICAgaWQ6ICdkaDM3ZmdqNDkyamUnLFxyXG4gICAgICAgICAgICAgICAga2V5OiAnYW9pamVkb2FpanNkbGFrc2pkbCcsXHJcbiAgICAgICAgICAgICAgICBhbGdvcml0aG06ICdzaGEyNTYnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NoYTEnLCAnc2hhMjU2J1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy8gT3B0aW9uYWxcclxuXHJcbiAgICAgICAgICAgIGV4dDogJ2FwcGxpY2F0aW9uLXNwZWNpZmljJywgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBsaWNhdGlvbiBzcGVjaWZpYyBkYXRhIHNlbnQgdmlhIHRoZSBleHQgYXR0cmlidXRlXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSAvIDEwMDAsICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHByZS1jYWxjdWxhdGVkIHRpbWVzdGFtcCBpbiBzZWNvbmRzXHJcbiAgICAgICAgICAgIG5vbmNlOiAnMjMzNGYzNGYnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHByZS1nZW5lcmF0ZWQgbm9uY2VcclxuICAgICAgICAgICAgbG9jYWx0aW1lT2Zmc2V0TXNlYzogNDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWUgb2Zmc2V0IHRvIHN5bmMgd2l0aCBzZXJ2ZXIgdGltZSAoaWdub3JlZCBpZiB0aW1lc3RhbXAgcHJvdmlkZWQpXHJcbiAgICAgICAgICAgIHBheWxvYWQ6ICd7XCJzb21lXCI6XCJwYXlsb2FkXCJ9JywgICAgICAgICAgICAgICAgICAgICAgLy8gVVRGLTggZW5jb2RlZCBzdHJpbmcgZm9yIGJvZHkgaGFzaCBnZW5lcmF0aW9uIChpZ25vcmVkIGlmIGhhc2ggcHJvdmlkZWQpXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsICAgICAgICAgICAgICAgICAgICAvLyBQYXlsb2FkIGNvbnRlbnQtdHlwZSAoaWdub3JlZCBpZiBoYXNoIHByb3ZpZGVkKVxyXG4gICAgICAgICAgICBoYXNoOiAnVTRNS0tTbWlWeGszN0pDQ3JBVklqVj0nLCAgICAgICAgICAgICAgICAgICAgLy8gUHJlLWNhbGN1bGF0ZWQgcGF5bG9hZCBoYXNoXHJcbiAgICAgICAgICAgIGFwcDogJzI0czIzNDIzZjM0ZHgnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPeiBhcHBsaWNhdGlvbiBpZFxyXG4gICAgICAgICAgICBkbGc6ICcyMzRzejM0dHd3M3NkJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3ogZGVsZWdhdGVkLWJ5IGFwcGxpY2F0aW9uIGlkXHJcbiAgICAgICAgfVxyXG4gICAgKi9cclxuXHJcbiAgICBoZWFkZXI6IGZ1bmN0aW9uICh1cmksIG1ldGhvZCwgb3B0aW9ucykge1xyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICBmaWVsZDogJycsXHJcbiAgICAgICAgICAgIGFydGlmYWN0czoge31cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBWYWxpZGF0ZSBpbnB1dHNcclxuXHJcbiAgICAgICAgaWYgKCF1cmkgfHwgKHR5cGVvZiB1cmkgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cmkgIT09ICdvYmplY3QnKSB8fFxyXG4gICAgICAgICAgICAhbWV0aG9kIHx8IHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnIHx8XHJcbiAgICAgICAgICAgICFvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xyXG5cclxuICAgICAgICAgICAgcmVzdWx0LmVyciA9ICdJbnZhbGlkIGFyZ3VtZW50IHR5cGUnO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQXBwbGljYXRpb24gdGltZVxyXG5cclxuICAgICAgICB2YXIgdGltZXN0YW1wID0gb3B0aW9ucy50aW1lc3RhbXAgfHwgaGF3ay51dGlscy5ub3cob3B0aW9ucy5sb2NhbHRpbWVPZmZzZXRNc2VjKTtcclxuXHJcbiAgICAgICAgLy8gVmFsaWRhdGUgY3JlZGVudGlhbHNcclxuXHJcbiAgICAgICAgdmFyIGNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscztcclxuICAgICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8XHJcbiAgICAgICAgICAgICFjcmVkZW50aWFscy5pZCB8fFxyXG4gICAgICAgICAgICAhY3JlZGVudGlhbHMua2V5IHx8XHJcbiAgICAgICAgICAgICFjcmVkZW50aWFscy5hbGdvcml0aG0pIHtcclxuXHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnIgPSAnSW52YWxpZCBjcmVkZW50aWFscyBvYmplY3QnO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhhd2suY3J5cHRvLmFsZ29yaXRobXMuaW5kZXhPZihjcmVkZW50aWFscy5hbGdvcml0aG0pID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXN1bHQuZXJyID0gJ1Vua25vd24gYWxnb3JpdGhtJztcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBhcnNlIFVSSVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHVyaSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdXJpID0gaGF3ay51dGlscy5wYXJzZVVyaSh1cmkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHNpZ25hdHVyZVxyXG5cclxuICAgICAgICB2YXIgYXJ0aWZhY3RzID0ge1xyXG4gICAgICAgICAgICB0czogdGltZXN0YW1wLFxyXG4gICAgICAgICAgICBub25jZTogb3B0aW9ucy5ub25jZSB8fCBoYXdrLnV0aWxzLnJhbmRvbVN0cmluZyg2KSxcclxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXHJcbiAgICAgICAgICAgIHJlc291cmNlOiB1cmkucmVzb3VyY2UsXHJcbiAgICAgICAgICAgIGhvc3Q6IHVyaS5ob3N0LFxyXG4gICAgICAgICAgICBwb3J0OiB1cmkucG9ydCxcclxuICAgICAgICAgICAgaGFzaDogb3B0aW9ucy5oYXNoLFxyXG4gICAgICAgICAgICBleHQ6IG9wdGlvbnMuZXh0LFxyXG4gICAgICAgICAgICBhcHA6IG9wdGlvbnMuYXBwLFxyXG4gICAgICAgICAgICBkbGc6IG9wdGlvbnMuZGxnXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmVzdWx0LmFydGlmYWN0cyA9IGFydGlmYWN0cztcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHBheWxvYWQgaGFzaFxyXG5cclxuICAgICAgICBpZiAoIWFydGlmYWN0cy5oYXNoICYmXHJcbiAgICAgICAgICAgIChvcHRpb25zLnBheWxvYWQgfHwgb3B0aW9ucy5wYXlsb2FkID09PSAnJykpIHtcclxuXHJcbiAgICAgICAgICAgIGFydGlmYWN0cy5oYXNoID0gaGF3ay5jcnlwdG8uY2FsY3VsYXRlUGF5bG9hZEhhc2gob3B0aW9ucy5wYXlsb2FkLCBjcmVkZW50aWFscy5hbGdvcml0aG0sIG9wdGlvbnMuY29udGVudFR5cGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG1hYyA9IGhhd2suY3J5cHRvLmNhbGN1bGF0ZU1hYygnaGVhZGVyJywgY3JlZGVudGlhbHMsIGFydGlmYWN0cyk7XHJcblxyXG4gICAgICAgIC8vIENvbnN0cnVjdCBoZWFkZXJcclxuXHJcbiAgICAgICAgdmFyIGhhc0V4dCA9IGFydGlmYWN0cy5leHQgIT09IG51bGwgJiYgYXJ0aWZhY3RzLmV4dCAhPT0gdW5kZWZpbmVkICYmIGFydGlmYWN0cy5leHQgIT09ICcnOyAgICAgICAvLyBPdGhlciBmYWxzZXkgdmFsdWVzIGFsbG93ZWRcclxuICAgICAgICB2YXIgaGVhZGVyID0gJ0hhd2sgaWQ9XCInICsgY3JlZGVudGlhbHMuaWQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAnXCIsIHRzPVwiJyArIGFydGlmYWN0cy50cyArXHJcbiAgICAgICAgICAgICAgICAgICAgICdcIiwgbm9uY2U9XCInICsgYXJ0aWZhY3RzLm5vbmNlICtcclxuICAgICAgICAgICAgICAgICAgICAgKGFydGlmYWN0cy5oYXNoID8gJ1wiLCBoYXNoPVwiJyArIGFydGlmYWN0cy5oYXNoIDogJycpICtcclxuICAgICAgICAgICAgICAgICAgICAgKGhhc0V4dCA/ICdcIiwgZXh0PVwiJyArIGhhd2sudXRpbHMuZXNjYXBlSGVhZGVyQXR0cmlidXRlKGFydGlmYWN0cy5leHQpIDogJycpICtcclxuICAgICAgICAgICAgICAgICAgICAgJ1wiLCBtYWM9XCInICsgbWFjICsgJ1wiJztcclxuXHJcbiAgICAgICAgaWYgKGFydGlmYWN0cy5hcHApIHtcclxuICAgICAgICAgICAgaGVhZGVyICs9ICcsIGFwcD1cIicgKyBhcnRpZmFjdHMuYXBwICtcclxuICAgICAgICAgICAgICAgICAgICAgIChhcnRpZmFjdHMuZGxnID8gJ1wiLCBkbGc9XCInICsgYXJ0aWZhY3RzLmRsZyA6ICcnKSArICdcIic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXN1bHQuZmllbGQgPSBoZWFkZXI7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIEdlbmVyYXRlIGEgYmV3aXQgdmFsdWUgZm9yIGEgZ2l2ZW4gVVJJXHJcblxyXG4gICAgLypcclxuICAgICAgICB1cmk6ICdodHRwOi8vZXhhbXBsZS5jb20vcmVzb3VyY2U/YT1iJ1xyXG4gICAgICAgIG9wdGlvbnM6IHtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlcXVpcmVkXHJcblxyXG4gICAgICAgICAgICBjcmVkZW50aWFsczoge1xyXG4gICAgICAgICAgICBpZDogJ2RoMzdmZ2o0OTJqZScsXHJcbiAgICAgICAgICAgIGtleTogJ2FvaWplZG9haWpzZGxha3NqZGwnLFxyXG4gICAgICAgICAgICBhbGdvcml0aG06ICdzaGEyNTYnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2hhMScsICdzaGEyNTYnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHR0bFNlYzogNjAgKiA2MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUVEwgaW4gc2Vjb25kc1xyXG5cclxuICAgICAgICAgICAgLy8gT3B0aW9uYWxcclxuXHJcbiAgICAgICAgICAgIGV4dDogJ2FwcGxpY2F0aW9uLXNwZWNpZmljJywgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBsaWNhdGlvbiBzcGVjaWZpYyBkYXRhIHNlbnQgdmlhIHRoZSBleHQgYXR0cmlidXRlXHJcbiAgICAgICAgICAgIGxvY2FsdGltZU9mZnNldE1zZWM6IDQwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lIG9mZnNldCB0byBzeW5jIHdpdGggc2VydmVyIHRpbWVcclxuICAgICAgICAgfTtcclxuICAgICovXHJcblxyXG4gICAgYmV3aXQ6IGZ1bmN0aW9uICh1cmksIG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgLy8gVmFsaWRhdGUgaW5wdXRzXHJcblxyXG4gICAgICAgIGlmICghdXJpIHx8XHJcbiAgICAgICAgICAgICh0eXBlb2YgdXJpICE9PSAnc3RyaW5nJykgfHxcclxuICAgICAgICAgICAgIW9wdGlvbnMgfHxcclxuICAgICAgICAgICAgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnIHx8XHJcbiAgICAgICAgICAgICFvcHRpb25zLnR0bFNlYykge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb3B0aW9ucy5leHQgPSAob3B0aW9ucy5leHQgPT09IG51bGwgfHwgb3B0aW9ucy5leHQgPT09IHVuZGVmaW5lZCA/ICcnIDogb3B0aW9ucy5leHQpOyAgICAgICAvLyBaZXJvIGlzIHZhbGlkIHZhbHVlXHJcblxyXG4gICAgICAgIC8vIEFwcGxpY2F0aW9uIHRpbWVcclxuXHJcbiAgICAgICAgdmFyIG5vdyA9IGhhd2sudXRpbHMubm93KG9wdGlvbnMubG9jYWx0aW1lT2Zmc2V0TXNlYyk7XHJcblxyXG4gICAgICAgIC8vIFZhbGlkYXRlIGNyZWRlbnRpYWxzXHJcblxyXG4gICAgICAgIHZhciBjcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHM7XHJcbiAgICAgICAgaWYgKCFjcmVkZW50aWFscyB8fFxyXG4gICAgICAgICAgICAhY3JlZGVudGlhbHMuaWQgfHxcclxuICAgICAgICAgICAgIWNyZWRlbnRpYWxzLmtleSB8fFxyXG4gICAgICAgICAgICAhY3JlZGVudGlhbHMuYWxnb3JpdGhtKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGF3ay5jcnlwdG8uYWxnb3JpdGhtcy5pbmRleE9mKGNyZWRlbnRpYWxzLmFsZ29yaXRobSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBhcnNlIFVSSVxyXG5cclxuICAgICAgICB1cmkgPSBoYXdrLnV0aWxzLnBhcnNlVXJpKHVyaSk7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBzaWduYXR1cmVcclxuXHJcbiAgICAgICAgdmFyIGV4cCA9IG5vdyArIG9wdGlvbnMudHRsU2VjO1xyXG4gICAgICAgIHZhciBtYWMgPSBoYXdrLmNyeXB0by5jYWxjdWxhdGVNYWMoJ2Jld2l0JywgY3JlZGVudGlhbHMsIHtcclxuICAgICAgICAgICAgdHM6IGV4cCxcclxuICAgICAgICAgICAgbm9uY2U6ICcnLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICByZXNvdXJjZTogdXJpLnJlc291cmNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0cmFpbGluZyAnPycgYW5kIHF1ZXJ5IHBhcmFtc1xyXG4gICAgICAgICAgICBob3N0OiB1cmkuaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogdXJpLnBvcnQsXHJcbiAgICAgICAgICAgIGV4dDogb3B0aW9ucy5leHRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQ29uc3RydWN0IGJld2l0OiBpZFxcZXhwXFxtYWNcXGV4dFxyXG5cclxuICAgICAgICB2YXIgYmV3aXQgPSBjcmVkZW50aWFscy5pZCArICdcXFxcJyArIGV4cCArICdcXFxcJyArIG1hYyArICdcXFxcJyArIG9wdGlvbnMuZXh0O1xyXG4gICAgICAgIHJldHVybiBoYXdrLnV0aWxzLmJhc2U2NHVybEVuY29kZShiZXdpdCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFZhbGlkYXRlIHNlcnZlciByZXNwb25zZVxyXG5cclxuICAgIC8qXHJcbiAgICAgICAgcmVxdWVzdDogICAgb2JqZWN0IGNyZWF0ZWQgdmlhICduZXcgWE1MSHR0cFJlcXVlc3QoKScgYWZ0ZXIgcmVzcG9uc2UgcmVjZWl2ZWRcclxuICAgICAgICBhcnRpZmFjdHM6ICBvYmplY3QgcmVjZWl2ZWQgZnJvbSBoZWFkZXIoKS5hcnRpZmFjdHNcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHBheWxvYWQ6ICAgIG9wdGlvbmFsIHBheWxvYWQgcmVjZWl2ZWRcclxuICAgICAgICAgICAgcmVxdWlyZWQ6ICAgc3BlY2lmaWVzIGlmIGEgU2VydmVyLUF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHJlcXVpcmVkLiBEZWZhdWx0cyB0byAnZmFsc2UnXHJcbiAgICAgICAgfVxyXG4gICAgKi9cclxuXHJcbiAgICBhdXRoZW50aWNhdGU6IGZ1bmN0aW9uIChyZXF1ZXN0LCBjcmVkZW50aWFscywgYXJ0aWZhY3RzLCBvcHRpb25zKSB7XHJcblxyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgICAgICB2YXIgZ2V0SGVhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0LmdldFJlc3BvbnNlSGVhZGVyID8gcmVxdWVzdC5nZXRSZXNwb25zZUhlYWRlcihuYW1lKSA6IHJlcXVlc3QuZ2V0SGVhZGVyKG5hbWUpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciB3d3dBdXRoZW50aWNhdGUgPSBnZXRIZWFkZXIoJ3d3dy1hdXRoZW50aWNhdGUnKTtcclxuICAgICAgICBpZiAod3d3QXV0aGVudGljYXRlKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXJzZSBIVFRQIFdXVy1BdXRoZW50aWNhdGUgaGVhZGVyXHJcblxyXG4gICAgICAgICAgICB2YXIgd3d3QXR0cmlidXRlcyA9IGhhd2sudXRpbHMucGFyc2VBdXRob3JpemF0aW9uSGVhZGVyKHd3d0F1dGhlbnRpY2F0ZSwgWyd0cycsICd0c20nLCAnZXJyb3InXSk7XHJcbiAgICAgICAgICAgIGlmICghd3d3QXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAod3d3QXR0cmlidXRlcy50cykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRzbSA9IGhhd2suY3J5cHRvLmNhbGN1bGF0ZVRzTWFjKHd3d0F0dHJpYnV0ZXMudHMsIGNyZWRlbnRpYWxzKTtcclxuICAgICAgICAgICAgICAgIGlmICh0c20gIT09IHd3d0F0dHJpYnV0ZXMudHNtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGhhd2sudXRpbHMuc2V0TnRwT2Zmc2V0KHd3d0F0dHJpYnV0ZXMudHMgLSBNYXRoLmZsb29yKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLyAxMDAwKSk7ICAgICAvLyBLZWVwIG9mZnNldCBhdCAxIHNlY29uZCBwcmVjaXNpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUGFyc2UgSFRUUCBTZXJ2ZXItQXV0aG9yaXphdGlvbiBoZWFkZXJcclxuXHJcbiAgICAgICAgdmFyIHNlcnZlckF1dGhvcml6YXRpb24gPSBnZXRIZWFkZXIoJ3NlcnZlci1hdXRob3JpemF0aW9uJyk7XHJcbiAgICAgICAgaWYgKCFzZXJ2ZXJBdXRob3JpemF0aW9uICYmXHJcbiAgICAgICAgICAgICFvcHRpb25zLnJlcXVpcmVkKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gaGF3ay51dGlscy5wYXJzZUF1dGhvcml6YXRpb25IZWFkZXIoc2VydmVyQXV0aG9yaXphdGlvbiwgWydtYWMnLCAnZXh0JywgJ2hhc2gnXSk7XHJcbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtb2RBcnRpZmFjdHMgPSB7XHJcbiAgICAgICAgICAgIHRzOiBhcnRpZmFjdHMudHMsXHJcbiAgICAgICAgICAgIG5vbmNlOiBhcnRpZmFjdHMubm9uY2UsXHJcbiAgICAgICAgICAgIG1ldGhvZDogYXJ0aWZhY3RzLm1ldGhvZCxcclxuICAgICAgICAgICAgcmVzb3VyY2U6IGFydGlmYWN0cy5yZXNvdXJjZSxcclxuICAgICAgICAgICAgaG9zdDogYXJ0aWZhY3RzLmhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQ6IGFydGlmYWN0cy5wb3J0LFxyXG4gICAgICAgICAgICBoYXNoOiBhdHRyaWJ1dGVzLmhhc2gsXHJcbiAgICAgICAgICAgIGV4dDogYXR0cmlidXRlcy5leHQsXHJcbiAgICAgICAgICAgIGFwcDogYXJ0aWZhY3RzLmFwcCxcclxuICAgICAgICAgICAgZGxnOiBhcnRpZmFjdHMuZGxnXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIG1hYyA9IGhhd2suY3J5cHRvLmNhbGN1bGF0ZU1hYygncmVzcG9uc2UnLCBjcmVkZW50aWFscywgbW9kQXJ0aWZhY3RzKTtcclxuICAgICAgICBpZiAobWFjICE9PSBhdHRyaWJ1dGVzLm1hYykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW9wdGlvbnMucGF5bG9hZCAmJlxyXG4gICAgICAgICAgICBvcHRpb25zLnBheWxvYWQgIT09ICcnKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYXR0cmlidXRlcy5oYXNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjYWxjdWxhdGVkSGFzaCA9IGhhd2suY3J5cHRvLmNhbGN1bGF0ZVBheWxvYWRIYXNoKG9wdGlvbnMucGF5bG9hZCwgY3JlZGVudGlhbHMuYWxnb3JpdGhtLCBnZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScpKTtcclxuICAgICAgICByZXR1cm4gKGNhbGN1bGF0ZWRIYXNoID09PSBhdHRyaWJ1dGVzLmhhc2gpO1xyXG4gICAgfSxcclxuXHJcbiAgICBtZXNzYWdlOiBmdW5jdGlvbiAoaG9zdCwgcG9ydCwgbWVzc2FnZSwgb3B0aW9ucykge1xyXG5cclxuICAgICAgICAvLyBWYWxpZGF0ZSBpbnB1dHNcclxuXHJcbiAgICAgICAgaWYgKCFob3N0IHx8IHR5cGVvZiBob3N0ICE9PSAnc3RyaW5nJyB8fFxyXG4gICAgICAgICAgICAhcG9ydCB8fCB0eXBlb2YgcG9ydCAhPT0gJ251bWJlcicgfHxcclxuICAgICAgICAgICAgbWVzc2FnZSA9PT0gbnVsbCB8fCBtZXNzYWdlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnIHx8XHJcbiAgICAgICAgICAgICFvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBcHBsaWNhdGlvbiB0aW1lXHJcblxyXG4gICAgICAgIHZhciB0aW1lc3RhbXAgPSBvcHRpb25zLnRpbWVzdGFtcCB8fCBoYXdrLnV0aWxzLm5vdyhvcHRpb25zLmxvY2FsdGltZU9mZnNldE1zZWMpO1xyXG5cclxuICAgICAgICAvLyBWYWxpZGF0ZSBjcmVkZW50aWFsc1xyXG5cclxuICAgICAgICB2YXIgY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzO1xyXG4gICAgICAgIGlmICghY3JlZGVudGlhbHMgfHxcclxuICAgICAgICAgICAgIWNyZWRlbnRpYWxzLmlkIHx8XHJcbiAgICAgICAgICAgICFjcmVkZW50aWFscy5rZXkgfHxcclxuICAgICAgICAgICAgIWNyZWRlbnRpYWxzLmFsZ29yaXRobSkge1xyXG5cclxuICAgICAgICAgICAgLy8gSW52YWxpZCBjcmVkZW50aWFsIG9iamVjdFxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChoYXdrLmNyeXB0by5hbGdvcml0aG1zLmluZGV4T2YoY3JlZGVudGlhbHMuYWxnb3JpdGhtKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgc2lnbmF0dXJlXHJcblxyXG4gICAgICAgIHZhciBhcnRpZmFjdHMgPSB7XHJcbiAgICAgICAgICAgIHRzOiB0aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlIHx8IGhhd2sudXRpbHMucmFuZG9tU3RyaW5nKDYpLFxyXG4gICAgICAgICAgICBob3N0OiBob3N0LFxyXG4gICAgICAgICAgICBwb3J0OiBwb3J0LFxyXG4gICAgICAgICAgICBoYXNoOiBoYXdrLmNyeXB0by5jYWxjdWxhdGVQYXlsb2FkSGFzaChtZXNzYWdlLCBjcmVkZW50aWFscy5hbGdvcml0aG0pXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gQ29uc3RydWN0IGF1dGhvcml6YXRpb25cclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgaWQ6IGNyZWRlbnRpYWxzLmlkLFxyXG4gICAgICAgICAgICB0czogYXJ0aWZhY3RzLnRzLFxyXG4gICAgICAgICAgICBub25jZTogYXJ0aWZhY3RzLm5vbmNlLFxyXG4gICAgICAgICAgICBoYXNoOiBhcnRpZmFjdHMuaGFzaCxcclxuICAgICAgICAgICAgbWFjOiBoYXdrLmNyeXB0by5jYWxjdWxhdGVNYWMoJ21lc3NhZ2UnLCBjcmVkZW50aWFscywgYXJ0aWZhY3RzKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGF1dGhlbnRpY2F0ZVRpbWVzdGFtcDogZnVuY3Rpb24gKG1lc3NhZ2UsIGNyZWRlbnRpYWxzLCB1cGRhdGVDbG9jaykgeyAgICAgICAgICAgLy8gdXBkYXRlQ2xvY2sgZGVmYXVsdHMgdG8gdHJ1ZVxyXG5cclxuICAgICAgICB2YXIgdHNtID0gaGF3ay5jcnlwdG8uY2FsY3VsYXRlVHNNYWMobWVzc2FnZS50cywgY3JlZGVudGlhbHMpO1xyXG4gICAgICAgIGlmICh0c20gIT09IG1lc3NhZ2UudHNtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1cGRhdGVDbG9jayAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgaGF3ay51dGlscy5zZXROdHBPZmZzZXQobWVzc2FnZS50cyAtIE1hdGguZmxvb3IoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAvIDEwMDApKTsgICAgLy8gS2VlcCBvZmZzZXQgYXQgMSBzZWNvbmQgcHJlY2lzaW9uXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG5oYXdrLmNyeXB0byA9IHtcclxuXHJcbiAgICBoZWFkZXJWZXJzaW9uOiAnMScsXHJcblxyXG4gICAgYWxnb3JpdGhtczogWydzaGExJywgJ3NoYTI1NiddLFxyXG5cclxuICAgIGNhbGN1bGF0ZU1hYzogZnVuY3Rpb24gKHR5cGUsIGNyZWRlbnRpYWxzLCBvcHRpb25zKSB7XHJcblxyXG4gICAgICAgIHZhciBub3JtYWxpemVkID0gaGF3ay5jcnlwdG8uZ2VuZXJhdGVOb3JtYWxpemVkU3RyaW5nKHR5cGUsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICB2YXIgaG1hYyA9IENyeXB0b0pTWydIbWFjJyArIGNyZWRlbnRpYWxzLmFsZ29yaXRobS50b1VwcGVyQ2FzZSgpXShub3JtYWxpemVkLCBjcmVkZW50aWFscy5rZXkpO1xyXG4gICAgICAgIHJldHVybiBobWFjLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5CYXNlNjQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZU5vcm1hbGl6ZWRTdHJpbmc6IGZ1bmN0aW9uICh0eXBlLCBvcHRpb25zKSB7XHJcblxyXG4gICAgICAgIHZhciBub3JtYWxpemVkID0gJ2hhd2suJyArIGhhd2suY3J5cHRvLmhlYWRlclZlcnNpb24gKyAnLicgKyB0eXBlICsgJ1xcbicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50cyArICdcXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubm9uY2UgKyAnXFxuJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9ucy5tZXRob2QgfHwgJycpLnRvVXBwZXJDYXNlKCkgKyAnXFxuJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9ucy5yZXNvdXJjZSB8fCAnJykgKyAnXFxuJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmhvc3QudG9Mb3dlckNhc2UoKSArICdcXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucG9ydCArICdcXG4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25zLmhhc2ggfHwgJycpICsgJ1xcbic7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmV4dCkge1xyXG4gICAgICAgICAgICBub3JtYWxpemVkICs9IG9wdGlvbnMuZXh0LnJlcGxhY2UoJ1xcXFwnLCAnXFxcXFxcXFwnKS5yZXBsYWNlKCdcXG4nLCAnXFxcXG4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG5vcm1hbGl6ZWQgKz0gJ1xcbic7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmFwcCkge1xyXG4gICAgICAgICAgICBub3JtYWxpemVkICs9IG9wdGlvbnMuYXBwICsgJ1xcbicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25zLmRsZyB8fCAnJykgKyAnXFxuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkO1xyXG4gICAgfSxcclxuXHJcbiAgICBjYWxjdWxhdGVQYXlsb2FkSGFzaDogZnVuY3Rpb24gKHBheWxvYWQsIGFsZ29yaXRobSwgY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5hbGdvW2FsZ29yaXRobS50b1VwcGVyQ2FzZSgpXS5jcmVhdGUoKTtcclxuICAgICAgICBoYXNoLnVwZGF0ZSgnaGF3ay4nICsgaGF3ay5jcnlwdG8uaGVhZGVyVmVyc2lvbiArICcucGF5bG9hZFxcbicpO1xyXG4gICAgICAgIGhhc2gudXBkYXRlKGhhd2sudXRpbHMucGFyc2VDb250ZW50VHlwZShjb250ZW50VHlwZSkgKyAnXFxuJyk7XHJcbiAgICAgICAgaGFzaC51cGRhdGUocGF5bG9hZCk7XHJcbiAgICAgICAgaGFzaC51cGRhdGUoJ1xcbicpO1xyXG4gICAgICAgIHJldHVybiBoYXNoLmZpbmFsaXplKCkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkJhc2U2NCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNhbGN1bGF0ZVRzTWFjOiBmdW5jdGlvbiAodHMsIGNyZWRlbnRpYWxzKSB7XHJcblxyXG4gICAgICAgIHZhciBoYXNoID0gQ3J5cHRvSlNbJ0htYWMnICsgY3JlZGVudGlhbHMuYWxnb3JpdGhtLnRvVXBwZXJDYXNlKCldKCdoYXdrLicgKyBoYXdrLmNyeXB0by5oZWFkZXJWZXJzaW9uICsgJy50c1xcbicgKyB0cyArICdcXG4nLCBjcmVkZW50aWFscy5rZXkpO1xyXG4gICAgICAgIHJldHVybiBoYXNoLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5CYXNlNjQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vIGxvY2FsU3RvcmFnZSBjb21wYXRpYmxlIGludGVyZmFjZVxyXG5cclxuaGF3ay5pbnRlcm5hbHMuTG9jYWxTdG9yYWdlID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHRoaXMuX2NhY2hlID0ge307XHJcbiAgICB0aGlzLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgdGhpcy5nZXRJdGVtID0gZnVuY3Rpb24gKGtleSkge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSA/IFN0cmluZyh0aGlzLl9jYWNoZVtrZXldKSA6IG51bGw7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2V0SXRlbSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX2NhY2hlW2tleV0gPSBTdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gT2JqZWN0LmtleXModGhpcy5fY2FjaGUpLmxlbmd0aDtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5yZW1vdmVJdGVtID0gZnVuY3Rpb24gKGtleSkge1xyXG5cclxuICAgICAgICBkZWxldGUgdGhpcy5fY2FjaGVba2V5XTtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IE9iamVjdC5rZXlzKHRoaXMuX2NhY2hlKS5sZW5ndGg7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX2NhY2hlID0ge307XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSAwO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmtleSA9IGZ1bmN0aW9uIChpKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jYWNoZSlbaSB8fCAwXTtcclxuICAgIH07XHJcbn07XHJcblxyXG5cclxuaGF3ay51dGlscyA9IHtcclxuXHJcbiAgICBzdG9yYWdlOiBuZXcgaGF3ay5pbnRlcm5hbHMuTG9jYWxTdG9yYWdlKCksXHJcblxyXG4gICAgc2V0U3RvcmFnZTogZnVuY3Rpb24gKHN0b3JhZ2UpIHtcclxuXHJcbiAgICAgICAgdmFyIG50cE9mZnNldCA9IGhhd2sudXRpbHMuc3RvcmFnZS5nZXRJdGVtKCdoYXdrX250cF9vZmZzZXQnKTtcclxuICAgICAgICBoYXdrLnV0aWxzLnN0b3JhZ2UgPSBzdG9yYWdlO1xyXG4gICAgICAgIGlmIChudHBPZmZzZXQpIHtcclxuICAgICAgICAgICAgaGF3ay51dGlscy5zZXROdHBPZmZzZXQobnRwT2Zmc2V0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldE50cE9mZnNldDogZnVuY3Rpb24gKG9mZnNldCkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBoYXdrLnV0aWxzLnN0b3JhZ2Uuc2V0SXRlbSgnaGF3a19udHBfb2Zmc2V0Jywgb2Zmc2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbaGF3a10gY291bGQgbm90IHdyaXRlIHRvIHN0b3JhZ2UuJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE50cE9mZnNldDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgb2Zmc2V0ID0gaGF3ay51dGlscy5zdG9yYWdlLmdldEl0ZW0oJ2hhd2tfbnRwX29mZnNldCcpO1xyXG4gICAgICAgIGlmICghb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9mZnNldCwgMTApO1xyXG4gICAgfSxcclxuXHJcbiAgICBub3c6IGZ1bmN0aW9uIChsb2NhbHRpbWVPZmZzZXRNc2VjKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKCgobmV3IERhdGUoKSkuZ2V0VGltZSgpICsgKGxvY2FsdGltZU9mZnNldE1zZWMgfHwgMCkpIC8gMTAwMCkgKyBoYXdrLnV0aWxzLmdldE50cE9mZnNldCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBlc2NhcGVIZWFkZXJBdHRyaWJ1dGU6IGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpLnJlcGxhY2UoL1xcXCIvZywgJ1xcXFxcIicpO1xyXG4gICAgfSxcclxuXHJcbiAgICBwYXJzZUNvbnRlbnRUeXBlOiBmdW5jdGlvbiAoaGVhZGVyKSB7XHJcblxyXG4gICAgICAgIGlmICghaGVhZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBoZWFkZXIuc3BsaXQoJzsnKVswXS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJykudG9Mb3dlckNhc2UoKTtcclxuICAgIH0sXHJcblxyXG4gICAgcGFyc2VBdXRob3JpemF0aW9uSGVhZGVyOiBmdW5jdGlvbiAoaGVhZGVyLCBrZXlzKSB7XHJcblxyXG4gICAgICAgIGlmICghaGVhZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhlYWRlclBhcnRzID0gaGVhZGVyLm1hdGNoKC9eKFxcdyspKD86XFxzKyguKikpPyQvKTsgICAgICAgLy8gSGVhZGVyOiBzY2hlbWVbIHNvbWV0aGluZ11cclxuICAgICAgICBpZiAoIWhlYWRlclBhcnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNjaGVtZSA9IGhlYWRlclBhcnRzWzFdO1xyXG4gICAgICAgIGlmIChzY2hlbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2hhd2snKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXNTdHJpbmcgPSBoZWFkZXJQYXJ0c1syXTtcclxuICAgICAgICBpZiAoIWF0dHJpYnV0ZXNTdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIHZhciB2ZXJpZnkgPSBhdHRyaWJ1dGVzU3RyaW5nLnJlcGxhY2UoLyhcXHcrKT1cIihbXlwiXFxcXF0qKVwiXFxzKig/OixcXHMqfCQpL2csIGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBDaGVjayB2YWxpZCBhdHRyaWJ1dGUgbmFtZXNcclxuXHJcbiAgICAgICAgICAgIGlmIChrZXlzLmluZGV4T2YoJDEpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBBbGxvd2VkIGF0dHJpYnV0ZSB2YWx1ZSBjaGFyYWN0ZXJzOiAhIyQlJicoKSorLC0uLzo7PD0+P0BbXV5fYHt8fX4gYW5kIHNwYWNlLCBhLXosIEEtWiwgMC05XHJcblxyXG4gICAgICAgICAgICBpZiAoJDIubWF0Y2goL15bIFxcd1xcISNcXCQlJidcXChcXClcXCpcXCssXFwtXFwuXFwvXFw6OzxcXD0+XFw/QFxcW1xcXVxcXmBcXHtcXHxcXH1+XSskLykgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZXNcclxuXHJcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KCQxKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhdHRyaWJ1dGVzWyQxXSA9ICQyO1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh2ZXJpZnkgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHJhbmRvbVN0cmluZzogZnVuY3Rpb24gKHNpemUpIHtcclxuXHJcbiAgICAgICAgdmFyIHJhbmRvbVNvdXJjZSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSc7XHJcbiAgICAgICAgdmFyIGxlbiA9IHJhbmRvbVNvdXJjZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7ICsraSkge1xyXG4gICAgICAgICAgICByZXN1bHRbaV0gPSByYW5kb21Tb3VyY2VbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbGVuKV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJycpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cmlSZWdleDogL14oW146XSspXFw6XFwvXFwvKD86W15AXSpAKT8oW15cXC86XSspKD86XFw6KFxcZCspKT8oW14jXSopKD86Iy4qKT8kLywgICAgICAgLy8gc2NoZW1lOi8vY3JlZGVudGlhbHNAaG9zdDpwb3J0L3Jlc291cmNlI2ZyYWdtZW50XHJcbiAgICBwYXJzZVVyaTogZnVuY3Rpb24gKGlucHV0KSB7XHJcblxyXG4gICAgICAgIHZhciBwYXJ0cyA9IGlucHV0Lm1hdGNoKGhhd2sudXRpbHMudXJpUmVnZXgpO1xyXG4gICAgICAgIGlmICghcGFydHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgaG9zdDogJycsIHBvcnQ6ICcnLCByZXNvdXJjZTogJycgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY2hlbWUgPSBwYXJ0c1sxXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHZhciB1cmkgPSB7XHJcbiAgICAgICAgICAgIGhvc3Q6IHBhcnRzWzJdLFxyXG4gICAgICAgICAgICBwb3J0OiBwYXJ0c1szXSB8fCAoc2NoZW1lID09PSAnaHR0cCcgPyAnODAnIDogKHNjaGVtZSA9PT0gJ2h0dHBzJyA/ICc0NDMnIDogJycpKSxcclxuICAgICAgICAgICAgcmVzb3VyY2U6IHBhcnRzWzRdXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHVyaTtcclxuICAgIH0sXHJcblxyXG4gICAgYmFzZTY0dXJsRW5jb2RlOiBmdW5jdGlvbiAodmFsdWUpIHtcclxuXHJcbiAgICAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHZhbHVlKTtcclxuICAgICAgICB2YXIgZW5jb2RlZCA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHdvcmRBcnJheSk7XHJcbiAgICAgICAgcmV0dXJuIGVuY29kZWQucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvXFw9L2csICcnKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLyAkbGFiOmNvdmVyYWdlOm9mZiRcclxuLyogZXNsaW50LWRpc2FibGUgKi9cclxuXHJcbi8vIEJhc2VkIG9uOiBDcnlwdG8tSlMgdjMuMS4yXHJcbi8vIENvcHlyaWdodCAoYykgMjAwOS0yMDEzLCBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvXHJcbi8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcblxyXG52YXIgQ3J5cHRvSlMgPSBDcnlwdG9KUyB8fCBmdW5jdGlvbiAoaCwgcikgeyB2YXIgayA9IHt9LCBsID0gay5saWIgPSB7fSwgbiA9IGZ1bmN0aW9uICgpIHsgfSwgZiA9IGwuQmFzZSA9IHsgZXh0ZW5kOiBmdW5jdGlvbiAoYSkgeyBuLnByb3RvdHlwZSA9IHRoaXM7IHZhciBiID0gbmV3IG47IGEgJiYgYi5taXhJbihhKTsgYi5oYXNPd25Qcm9wZXJ0eShcImluaXRcIikgfHwgKGIuaW5pdCA9IGZ1bmN0aW9uICgpIHsgYi4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH0pOyBiLmluaXQucHJvdG90eXBlID0gYjsgYi4kc3VwZXIgPSB0aGlzOyByZXR1cm4gYiB9LCBjcmVhdGU6IGZ1bmN0aW9uICgpIHsgdmFyIGEgPSB0aGlzLmV4dGVuZCgpOyBhLmluaXQuYXBwbHkoYSwgYXJndW1lbnRzKTsgcmV0dXJuIGEgfSwgaW5pdDogZnVuY3Rpb24gKCkgeyB9LCBtaXhJbjogZnVuY3Rpb24gKGEpIHsgZm9yICh2YXIgYiBpbiBhKSBhLmhhc093blByb3BlcnR5KGIpICYmICh0aGlzW2JdID0gYVtiXSk7IGEuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSAmJiAodGhpcy50b1N0cmluZyA9IGEudG9TdHJpbmcpIH0sIGNsb25lOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKSB9IH0sIGogPSBsLldvcmRBcnJheSA9IGYuZXh0ZW5kKHsgaW5pdDogZnVuY3Rpb24gKGEsIGIpIHsgYSA9IHRoaXMud29yZHMgPSBhIHx8IFtdOyB0aGlzLnNpZ0J5dGVzID0gYiAhPSByID8gYiA6IDQgKiBhLmxlbmd0aCB9LCB0b1N0cmluZzogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIChhIHx8IHMpLnN0cmluZ2lmeSh0aGlzKSB9LCBjb25jYXQ6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0gdGhpcy53b3JkcywgZCA9IGEud29yZHMsIGMgPSB0aGlzLnNpZ0J5dGVzOyBhID0gYS5zaWdCeXRlczsgdGhpcy5jbGFtcCgpOyBpZiAoYyAlIDQpIGZvciAodmFyIGUgPSAwOyBlIDwgYTsgZSsrKSBiW2MgKyBlID4+PiAyXSB8PSAoZFtlID4+PiAyXSA+Pj4gMjQgLSA4ICogKGUgJSA0KSAmIDI1NSkgPDwgMjQgLSA4ICogKChjICsgZSkgJSA0KTsgZWxzZSBpZiAoNjU1MzUgPCBkLmxlbmd0aCkgZm9yIChlID0gMDsgZSA8IGE7IGUgKz0gNCkgYltjICsgZSA+Pj4gMl0gPSBkW2UgPj4+IDJdOyBlbHNlIGIucHVzaC5hcHBseShiLCBkKTsgdGhpcy5zaWdCeXRlcyArPSBhOyByZXR1cm4gdGhpcyB9LCBjbGFtcDogZnVuY3Rpb24gKCkgeyB2YXIgYSA9IHRoaXMud29yZHMsIGIgPSB0aGlzLnNpZ0J5dGVzOyBhW2IgPj4+IDJdICY9IDQyOTQ5NjcyOTUgPDwgMzIgLSA4ICogKGIgJSA0KTsgYS5sZW5ndGggPSBoLmNlaWwoYiAvIDQpIH0sIGNsb25lOiBmdW5jdGlvbiAoKSB7IHZhciBhID0gZi5jbG9uZS5jYWxsKHRoaXMpOyBhLndvcmRzID0gdGhpcy53b3Jkcy5zbGljZSgwKTsgcmV0dXJuIGEgfSwgcmFuZG9tOiBmdW5jdGlvbiAoYSkgeyBmb3IgKHZhciBiID0gW10sIGQgPSAwOyBkIDwgYTsgZCArPSA0KSBiLnB1c2goNDI5NDk2NzI5NiAqIGgucmFuZG9tKCkgfCAwKTsgcmV0dXJuIG5ldyBqLmluaXQoYiwgYSkgfSB9KSwgbSA9IGsuZW5jID0ge30sIHMgPSBtLkhleCA9IHsgc3RyaW5naWZ5OiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEud29yZHM7IGEgPSBhLnNpZ0J5dGVzOyBmb3IgKHZhciBkID0gW10sIGMgPSAwOyBjIDwgYTsgYysrKSB7IHZhciBlID0gYltjID4+PiAyXSA+Pj4gMjQgLSA4ICogKGMgJSA0KSAmIDI1NTsgZC5wdXNoKChlID4+PiA0KS50b1N0cmluZygxNikpOyBkLnB1c2goKGUgJiAxNSkudG9TdHJpbmcoMTYpKSB9IHJldHVybiBkLmpvaW4oXCJcIikgfSwgcGFyc2U6IGZ1bmN0aW9uIChhKSB7IGZvciAodmFyIGIgPSBhLmxlbmd0aCwgZCA9IFtdLCBjID0gMDsgYyA8IGI7IGMgKz0gMikgZFtjID4+PiAzXSB8PSBwYXJzZUludChhLnN1YnN0cihjLCAyKSwgMTYpIDw8IDI0IC0gNCAqIChjICUgOCk7IHJldHVybiBuZXcgai5pbml0KGQsIGIgLyAyKSB9IH0sIHAgPSBtLkxhdGluMSA9IHsgc3RyaW5naWZ5OiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IGEud29yZHM7IGEgPSBhLnNpZ0J5dGVzOyBmb3IgKHZhciBkID0gW10sIGMgPSAwOyBjIDwgYTsgYysrKSBkLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShiW2MgPj4+IDJdID4+PiAyNCAtIDggKiAoYyAlIDQpICYgMjU1KSk7IHJldHVybiBkLmpvaW4oXCJcIikgfSwgcGFyc2U6IGZ1bmN0aW9uIChhKSB7IGZvciAodmFyIGIgPSBhLmxlbmd0aCwgZCA9IFtdLCBjID0gMDsgYyA8IGI7IGMrKykgZFtjID4+PiAyXSB8PSAoYS5jaGFyQ29kZUF0KGMpICYgMjU1KSA8PCAyNCAtIDggKiAoYyAlIDQpOyByZXR1cm4gbmV3IGouaW5pdChkLCBiKSB9IH0sIHQgPSBtLlV0ZjggPSB7IHN0cmluZ2lmeTogZnVuY3Rpb24gKGEpIHsgdHJ5IHsgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUocC5zdHJpbmdpZnkoYSkpKSB9IGNhdGNoIChiKSB7IHRocm93IEVycm9yKFwiTWFsZm9ybWVkIFVURi04IGRhdGFcIik7IH0gfSwgcGFyc2U6IGZ1bmN0aW9uIChhKSB7IHJldHVybiBwLnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhKSkpIH0gfSwgcSA9IGwuQnVmZmVyZWRCbG9ja0FsZ29yaXRobSA9IGYuZXh0ZW5kKHsgcmVzZXQ6IGZ1bmN0aW9uICgpIHsgdGhpcy5fZGF0YSA9IG5ldyBqLmluaXQ7IHRoaXMuX25EYXRhQnl0ZXMgPSAwIH0sIF9hcHBlbmQ6IGZ1bmN0aW9uIChhKSB7IFwic3RyaW5nXCIgPT0gdHlwZW9mIGEgJiYgKGEgPSB0LnBhcnNlKGEpKTsgdGhpcy5fZGF0YS5jb25jYXQoYSk7IHRoaXMuX25EYXRhQnl0ZXMgKz0gYS5zaWdCeXRlcyB9LCBfcHJvY2VzczogZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSB0aGlzLl9kYXRhLCBkID0gYi53b3JkcywgYyA9IGIuc2lnQnl0ZXMsIGUgPSB0aGlzLmJsb2NrU2l6ZSwgZiA9IGMgLyAoNCAqIGUpLCBmID0gYSA/IGguY2VpbChmKSA6IGgubWF4KChmIHwgMCkgLSB0aGlzLl9taW5CdWZmZXJTaXplLCAwKTsgYSA9IGYgKiBlOyBjID0gaC5taW4oNCAqIGEsIGMpOyBpZiAoYSkgeyBmb3IgKHZhciBnID0gMDsgZyA8IGE7IGcgKz0gZSkgdGhpcy5fZG9Qcm9jZXNzQmxvY2soZCwgZyk7IGcgPSBkLnNwbGljZSgwLCBhKTsgYi5zaWdCeXRlcyAtPSBjIH0gcmV0dXJuIG5ldyBqLmluaXQoZywgYykgfSwgY2xvbmU6IGZ1bmN0aW9uICgpIHsgdmFyIGEgPSBmLmNsb25lLmNhbGwodGhpcyk7IGEuX2RhdGEgPSB0aGlzLl9kYXRhLmNsb25lKCk7IHJldHVybiBhIH0sIF9taW5CdWZmZXJTaXplOiAwIH0pOyBsLkhhc2hlciA9IHEuZXh0ZW5kKHsgY2ZnOiBmLmV4dGVuZCgpLCBpbml0OiBmdW5jdGlvbiAoYSkgeyB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChhKTsgdGhpcy5yZXNldCgpIH0sIHJlc2V0OiBmdW5jdGlvbiAoKSB7IHEucmVzZXQuY2FsbCh0aGlzKTsgdGhpcy5fZG9SZXNldCgpIH0sIHVwZGF0ZTogZnVuY3Rpb24gKGEpIHsgdGhpcy5fYXBwZW5kKGEpOyB0aGlzLl9wcm9jZXNzKCk7IHJldHVybiB0aGlzIH0sIGZpbmFsaXplOiBmdW5jdGlvbiAoYSkgeyBhICYmIHRoaXMuX2FwcGVuZChhKTsgcmV0dXJuIHRoaXMuX2RvRmluYWxpemUoKSB9LCBibG9ja1NpemU6IDE2LCBfY3JlYXRlSGVscGVyOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gZnVuY3Rpb24gKGIsIGQpIHsgcmV0dXJuIChuZXcgYS5pbml0KGQpKS5maW5hbGl6ZShiKSB9IH0sIF9jcmVhdGVIbWFjSGVscGVyOiBmdW5jdGlvbiAoYSkgeyByZXR1cm4gZnVuY3Rpb24gKGIsIGQpIHsgcmV0dXJuIChuZXcgdS5ITUFDLmluaXQoYSwgZCkpLmZpbmFsaXplKGIpIH0gfSB9KTsgdmFyIHUgPSBrLmFsZ28gPSB7fTsgcmV0dXJuIGsgfShNYXRoKTtcclxuKGZ1bmN0aW9uICgpIHsgdmFyIGsgPSBDcnlwdG9KUywgYiA9IGsubGliLCBtID0gYi5Xb3JkQXJyYXksIGwgPSBiLkhhc2hlciwgZCA9IFtdLCBiID0gay5hbGdvLlNIQTEgPSBsLmV4dGVuZCh7IF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7IHRoaXMuX2hhc2ggPSBuZXcgbS5pbml0KFsxNzMyNTg0MTkzLCA0MDIzMjMzNDE3LCAyNTYyMzgzMTAyLCAyNzE3MzM4NzgsIDMyODUzNzc1MjBdKSB9LCBfZG9Qcm9jZXNzQmxvY2s6IGZ1bmN0aW9uIChuLCBwKSB7IGZvciAodmFyIGEgPSB0aGlzLl9oYXNoLndvcmRzLCBlID0gYVswXSwgZiA9IGFbMV0sIGggPSBhWzJdLCBqID0gYVszXSwgYiA9IGFbNF0sIGMgPSAwOyA4MCA+IGM7IGMrKykgeyBpZiAoMTYgPiBjKSBkW2NdID0gbltwICsgY10gfCAwOyBlbHNlIHsgdmFyIGcgPSBkW2MgLSAzXSBeIGRbYyAtIDhdIF4gZFtjIC0gMTRdIF4gZFtjIC0gMTZdOyBkW2NdID0gZyA8PCAxIHwgZyA+Pj4gMzEgfSBnID0gKGUgPDwgNSB8IGUgPj4+IDI3KSArIGIgKyBkW2NdOyBnID0gMjAgPiBjID8gZyArICgoZiAmIGggfCB+ZiAmIGopICsgMTUxODUwMDI0OSkgOiA0MCA+IGMgPyBnICsgKChmIF4gaCBeIGopICsgMTg1OTc3NTM5MykgOiA2MCA+IGMgPyBnICsgKChmICYgaCB8IGYgJiBqIHwgaCAmIGopIC0gMTg5NDAwNzU4OCkgOiBnICsgKChmIF4gaCBeIGopIC0gODk5NDk3NTE0KTsgYiA9IGo7IGogPSBoOyBoID0gZiA8PCAzMCB8IGYgPj4+IDI7IGYgPSBlOyBlID0gZyB9IGFbMF0gPSBhWzBdICsgZSB8IDA7IGFbMV0gPSBhWzFdICsgZiB8IDA7IGFbMl0gPSBhWzJdICsgaCB8IDA7IGFbM10gPSBhWzNdICsgaiB8IDA7IGFbNF0gPSBhWzRdICsgYiB8IDAgfSwgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHsgdmFyIGIgPSB0aGlzLl9kYXRhLCBkID0gYi53b3JkcywgYSA9IDggKiB0aGlzLl9uRGF0YUJ5dGVzLCBlID0gOCAqIGIuc2lnQnl0ZXM7IGRbZSA+Pj4gNV0gfD0gMTI4IDw8IDI0IC0gZSAlIDMyOyBkWyhlICsgNjQgPj4+IDkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKGEgLyA0Mjk0OTY3Mjk2KTsgZFsoZSArIDY0ID4+PiA5IDw8IDQpICsgMTVdID0gYTsgYi5zaWdCeXRlcyA9IDQgKiBkLmxlbmd0aDsgdGhpcy5fcHJvY2VzcygpOyByZXR1cm4gdGhpcy5faGFzaCB9LCBjbG9uZTogZnVuY3Rpb24gKCkgeyB2YXIgYiA9IGwuY2xvbmUuY2FsbCh0aGlzKTsgYi5faGFzaCA9IHRoaXMuX2hhc2guY2xvbmUoKTsgcmV0dXJuIGIgfSB9KTsgay5TSEExID0gbC5fY3JlYXRlSGVscGVyKGIpOyBrLkhtYWNTSEExID0gbC5fY3JlYXRlSG1hY0hlbHBlcihiKSB9KSgpO1xyXG4oZnVuY3Rpb24gKGspIHsgZm9yICh2YXIgZyA9IENyeXB0b0pTLCBoID0gZy5saWIsIHYgPSBoLldvcmRBcnJheSwgaiA9IGguSGFzaGVyLCBoID0gZy5hbGdvLCBzID0gW10sIHQgPSBbXSwgdSA9IGZ1bmN0aW9uIChxKSB7IHJldHVybiA0Mjk0OTY3Mjk2ICogKHEgLSAocSB8IDApKSB8IDAgfSwgbCA9IDIsIGIgPSAwOyA2NCA+IGI7KSB7IHZhciBkOyBhOiB7IGQgPSBsOyBmb3IgKHZhciB3ID0gay5zcXJ0KGQpLCByID0gMjsgciA8PSB3OyByKyspIGlmICghKGQgJSByKSkgeyBkID0gITE7IGJyZWFrIGEgfSBkID0gITAgfSBkICYmICg4ID4gYiAmJiAoc1tiXSA9IHUoay5wb3cobCwgMC41KSkpLCB0W2JdID0gdShrLnBvdyhsLCAxIC8gMykpLCBiKyspOyBsKysgfSB2YXIgbiA9IFtdLCBoID0gaC5TSEEyNTYgPSBqLmV4dGVuZCh7IF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7IHRoaXMuX2hhc2ggPSBuZXcgdi5pbml0KHMuc2xpY2UoMCkpIH0sIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKHEsIGgpIHsgZm9yICh2YXIgYSA9IHRoaXMuX2hhc2gud29yZHMsIGMgPSBhWzBdLCBkID0gYVsxXSwgYiA9IGFbMl0sIGsgPSBhWzNdLCBmID0gYVs0XSwgZyA9IGFbNV0sIGogPSBhWzZdLCBsID0gYVs3XSwgZSA9IDA7IDY0ID4gZTsgZSsrKSB7IGlmICgxNiA+IGUpIG5bZV0gPSBxW2ggKyBlXSB8IDA7IGVsc2UgeyB2YXIgbSA9IG5bZSAtIDE1XSwgcCA9IG5bZSAtIDJdOyBuW2VdID0gKChtIDw8IDI1IHwgbSA+Pj4gNykgXiAobSA8PCAxNCB8IG0gPj4+IDE4KSBeIG0gPj4+IDMpICsgbltlIC0gN10gKyAoKHAgPDwgMTUgfCBwID4+PiAxNykgXiAocCA8PCAxMyB8IHAgPj4+IDE5KSBeIHAgPj4+IDEwKSArIG5bZSAtIDE2XSB9IG0gPSBsICsgKChmIDw8IDI2IHwgZiA+Pj4gNikgXiAoZiA8PCAyMSB8IGYgPj4+IDExKSBeIChmIDw8IDcgfCBmID4+PiAyNSkpICsgKGYgJiBnIF4gfmYgJiBqKSArIHRbZV0gKyBuW2VdOyBwID0gKChjIDw8IDMwIHwgYyA+Pj4gMikgXiAoYyA8PCAxOSB8IGMgPj4+IDEzKSBeIChjIDw8IDEwIHwgYyA+Pj4gMjIpKSArIChjICYgZCBeIGMgJiBiIF4gZCAmIGIpOyBsID0gajsgaiA9IGc7IGcgPSBmOyBmID0gayArIG0gfCAwOyBrID0gYjsgYiA9IGQ7IGQgPSBjOyBjID0gbSArIHAgfCAwIH0gYVswXSA9IGFbMF0gKyBjIHwgMDsgYVsxXSA9IGFbMV0gKyBkIHwgMDsgYVsyXSA9IGFbMl0gKyBiIHwgMDsgYVszXSA9IGFbM10gKyBrIHwgMDsgYVs0XSA9IGFbNF0gKyBmIHwgMDsgYVs1XSA9IGFbNV0gKyBnIHwgMDsgYVs2XSA9IGFbNl0gKyBqIHwgMDsgYVs3XSA9IGFbN10gKyBsIHwgMCB9LCBfZG9GaW5hbGl6ZTogZnVuY3Rpb24gKCkgeyB2YXIgZCA9IHRoaXMuX2RhdGEsIGIgPSBkLndvcmRzLCBhID0gOCAqIHRoaXMuX25EYXRhQnl0ZXMsIGMgPSA4ICogZC5zaWdCeXRlczsgYltjID4+PiA1XSB8PSAxMjggPDwgMjQgLSBjICUgMzI7IGJbKGMgKyA2NCA+Pj4gOSA8PCA0KSArIDE0XSA9IGsuZmxvb3IoYSAvIDQyOTQ5NjcyOTYpOyBiWyhjICsgNjQgPj4+IDkgPDwgNCkgKyAxNV0gPSBhOyBkLnNpZ0J5dGVzID0gNCAqIGIubGVuZ3RoOyB0aGlzLl9wcm9jZXNzKCk7IHJldHVybiB0aGlzLl9oYXNoIH0sIGNsb25lOiBmdW5jdGlvbiAoKSB7IHZhciBiID0gai5jbG9uZS5jYWxsKHRoaXMpOyBiLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpOyByZXR1cm4gYiB9IH0pOyBnLlNIQTI1NiA9IGouX2NyZWF0ZUhlbHBlcihoKTsgZy5IbWFjU0hBMjU2ID0gai5fY3JlYXRlSG1hY0hlbHBlcihoKSB9KShNYXRoKTtcclxuKGZ1bmN0aW9uICgpIHsgdmFyIGMgPSBDcnlwdG9KUywgayA9IGMuZW5jLlV0Zjg7IGMuYWxnby5ITUFDID0gYy5saWIuQmFzZS5leHRlbmQoeyBpbml0OiBmdW5jdGlvbiAoYSwgYikgeyBhID0gdGhpcy5faGFzaGVyID0gbmV3IGEuaW5pdDsgXCJzdHJpbmdcIiA9PSB0eXBlb2YgYiAmJiAoYiA9IGsucGFyc2UoYikpOyB2YXIgYyA9IGEuYmxvY2tTaXplLCBlID0gNCAqIGM7IGIuc2lnQnl0ZXMgPiBlICYmIChiID0gYS5maW5hbGl6ZShiKSk7IGIuY2xhbXAoKTsgZm9yICh2YXIgZiA9IHRoaXMuX29LZXkgPSBiLmNsb25lKCksIGcgPSB0aGlzLl9pS2V5ID0gYi5jbG9uZSgpLCBoID0gZi53b3JkcywgaiA9IGcud29yZHMsIGQgPSAwOyBkIDwgYzsgZCsrKSBoW2RdIF49IDE1NDk1NTY4MjgsIGpbZF0gXj0gOTA5NTIyNDg2OyBmLnNpZ0J5dGVzID0gZy5zaWdCeXRlcyA9IGU7IHRoaXMucmVzZXQoKSB9LCByZXNldDogZnVuY3Rpb24gKCkgeyB2YXIgYSA9IHRoaXMuX2hhc2hlcjsgYS5yZXNldCgpOyBhLnVwZGF0ZSh0aGlzLl9pS2V5KSB9LCB1cGRhdGU6IGZ1bmN0aW9uIChhKSB7IHRoaXMuX2hhc2hlci51cGRhdGUoYSk7IHJldHVybiB0aGlzIH0sIGZpbmFsaXplOiBmdW5jdGlvbiAoYSkgeyB2YXIgYiA9IHRoaXMuX2hhc2hlcjsgYSA9IGIuZmluYWxpemUoYSk7IGIucmVzZXQoKTsgcmV0dXJuIGIuZmluYWxpemUodGhpcy5fb0tleS5jbG9uZSgpLmNvbmNhdChhKSkgfSB9KSB9KSgpO1xyXG4oZnVuY3Rpb24gKCkgeyB2YXIgaCA9IENyeXB0b0pTLCBqID0gaC5saWIuV29yZEFycmF5OyBoLmVuYy5CYXNlNjQgPSB7IHN0cmluZ2lmeTogZnVuY3Rpb24gKGIpIHsgdmFyIGUgPSBiLndvcmRzLCBmID0gYi5zaWdCeXRlcywgYyA9IHRoaXMuX21hcDsgYi5jbGFtcCgpOyBiID0gW107IGZvciAodmFyIGEgPSAwOyBhIDwgZjsgYSArPSAzKSBmb3IgKHZhciBkID0gKGVbYSA+Pj4gMl0gPj4+IDI0IC0gOCAqIChhICUgNCkgJiAyNTUpIDw8IDE2IHwgKGVbYSArIDEgPj4+IDJdID4+PiAyNCAtIDggKiAoKGEgKyAxKSAlIDQpICYgMjU1KSA8PCA4IHwgZVthICsgMiA+Pj4gMl0gPj4+IDI0IC0gOCAqICgoYSArIDIpICUgNCkgJiAyNTUsIGcgPSAwOyA0ID4gZyAmJiBhICsgMC43NSAqIGcgPCBmOyBnKyspIGIucHVzaChjLmNoYXJBdChkID4+PiA2ICogKDMgLSBnKSAmIDYzKSk7IGlmIChlID0gYy5jaGFyQXQoNjQpKSBmb3IgKDsgYi5sZW5ndGggJSA0OykgYi5wdXNoKGUpOyByZXR1cm4gYi5qb2luKFwiXCIpIH0sIHBhcnNlOiBmdW5jdGlvbiAoYikgeyB2YXIgZSA9IGIubGVuZ3RoLCBmID0gdGhpcy5fbWFwLCBjID0gZi5jaGFyQXQoNjQpOyBjICYmIChjID0gYi5pbmRleE9mKGMpLCAtMSAhPSBjICYmIChlID0gYykpOyBmb3IgKHZhciBjID0gW10sIGEgPSAwLCBkID0gMDsgZCA8IGU7IGQrKykgaWYgKGQgJSA0KSB7IHZhciBnID0gZi5pbmRleE9mKGIuY2hhckF0KGQgLSAxKSkgPDwgMiAqIChkICUgNCksIGggPSBmLmluZGV4T2YoYi5jaGFyQXQoZCkpID4+PiA2IC0gMiAqIChkICUgNCk7IGNbYSA+Pj4gMl0gfD0gKGcgfCBoKSA8PCAyNCAtIDggKiAoYSAlIDQpOyBhKysgfSByZXR1cm4gai5jcmVhdGUoYywgYSkgfSwgX21hcDogXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiIH0gfSkoKTtcclxuXHJcbmhhd2suY3J5cHRvLmludGVybmFscyA9IENyeXB0b0pTO1xyXG5cclxuXHJcbi8vIEV4cG9ydCBpZiB1c2VkIGFzIGEgbW9kdWxlXHJcblxyXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgIG1vZHVsZS5leHBvcnRzID0gaGF3aztcclxufVxyXG5cclxuLyogZXNsaW50LWVuYWJsZSAqL1xyXG4vLyAkbGFiOmNvdmVyYWdlOm9uJFxyXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNoID0gcmVxdWlyZSgnaGFzaC5qcycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWNyeXB0by11dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hY0RSQkcob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hY0RSQkcpKVxuICAgIHJldHVybiBuZXcgSG1hY0RSQkcob3B0aW9ucyk7XG4gIHRoaXMuaGFzaCA9IG9wdGlvbnMuaGFzaDtcbiAgdGhpcy5wcmVkUmVzaXN0ID0gISFvcHRpb25zLnByZWRSZXNpc3Q7XG5cbiAgdGhpcy5vdXRMZW4gPSB0aGlzLmhhc2gub3V0U2l6ZTtcbiAgdGhpcy5taW5FbnRyb3B5ID0gb3B0aW9ucy5taW5FbnRyb3B5IHx8IHRoaXMuaGFzaC5obWFjU3RyZW5ndGg7XG5cbiAgdGhpcy5fcmVzZWVkID0gbnVsbDtcbiAgdGhpcy5yZXNlZWRJbnRlcnZhbCA9IG51bGw7XG4gIHRoaXMuSyA9IG51bGw7XG4gIHRoaXMuViA9IG51bGw7XG5cbiAgdmFyIGVudHJvcHkgPSB1dGlscy50b0FycmF5KG9wdGlvbnMuZW50cm9weSwgb3B0aW9ucy5lbnRyb3B5RW5jIHx8ICdoZXgnKTtcbiAgdmFyIG5vbmNlID0gdXRpbHMudG9BcnJheShvcHRpb25zLm5vbmNlLCBvcHRpb25zLm5vbmNlRW5jIHx8ICdoZXgnKTtcbiAgdmFyIHBlcnMgPSB1dGlscy50b0FycmF5KG9wdGlvbnMucGVycywgb3B0aW9ucy5wZXJzRW5jIHx8ICdoZXgnKTtcbiAgYXNzZXJ0KGVudHJvcHkubGVuZ3RoID49ICh0aGlzLm1pbkVudHJvcHkgLyA4KSxcbiAgICAgICAgICdOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICcgKyB0aGlzLm1pbkVudHJvcHkgKyAnIGJpdHMnKTtcbiAgdGhpcy5faW5pdChlbnRyb3B5LCBub25jZSwgcGVycyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEhtYWNEUkJHO1xuXG5IbWFjRFJCRy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGVudHJvcHksIG5vbmNlLCBwZXJzKSB7XG4gIHZhciBzZWVkID0gZW50cm9weS5jb25jYXQobm9uY2UpLmNvbmNhdChwZXJzKTtcblxuICB0aGlzLksgPSBuZXcgQXJyYXkodGhpcy5vdXRMZW4gLyA4KTtcbiAgdGhpcy5WID0gbmV3IEFycmF5KHRoaXMub3V0TGVuIC8gOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5WLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpcy5LW2ldID0gMHgwMDtcbiAgICB0aGlzLlZbaV0gPSAweDAxO1xuICB9XG5cbiAgdGhpcy5fdXBkYXRlKHNlZWQpO1xuICB0aGlzLl9yZXNlZWQgPSAxO1xuICB0aGlzLnJlc2VlZEludGVydmFsID0gMHgxMDAwMDAwMDAwMDAwOyAgLy8gMl40OFxufTtcblxuSG1hY0RSQkcucHJvdG90eXBlLl9obWFjID0gZnVuY3Rpb24gaG1hYygpIHtcbiAgcmV0dXJuIG5ldyBoYXNoLmhtYWModGhpcy5oYXNoLCB0aGlzLkspO1xufTtcblxuSG1hY0RSQkcucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoc2VlZCkge1xuICB2YXIga21hYyA9IHRoaXMuX2htYWMoKVxuICAgICAgICAgICAgICAgICAudXBkYXRlKHRoaXMuVilcbiAgICAgICAgICAgICAgICAgLnVwZGF0ZShbIDB4MDAgXSk7XG4gIGlmIChzZWVkKVxuICAgIGttYWMgPSBrbWFjLnVwZGF0ZShzZWVkKTtcbiAgdGhpcy5LID0ga21hYy5kaWdlc3QoKTtcbiAgdGhpcy5WID0gdGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpO1xuICBpZiAoIXNlZWQpXG4gICAgcmV0dXJuO1xuXG4gIHRoaXMuSyA9IHRoaXMuX2htYWMoKVxuICAgICAgICAgICAgICAgLnVwZGF0ZSh0aGlzLlYpXG4gICAgICAgICAgICAgICAudXBkYXRlKFsgMHgwMSBdKVxuICAgICAgICAgICAgICAgLnVwZGF0ZShzZWVkKVxuICAgICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICB0aGlzLlYgPSB0aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCk7XG59O1xuXG5IbWFjRFJCRy5wcm90b3R5cGUucmVzZWVkID0gZnVuY3Rpb24gcmVzZWVkKGVudHJvcHksIGVudHJvcHlFbmMsIGFkZCwgYWRkRW5jKSB7XG4gIC8vIE9wdGlvbmFsIGVudHJvcHkgZW5jXG4gIGlmICh0eXBlb2YgZW50cm9weUVuYyAhPT0gJ3N0cmluZycpIHtcbiAgICBhZGRFbmMgPSBhZGQ7XG4gICAgYWRkID0gZW50cm9weUVuYztcbiAgICBlbnRyb3B5RW5jID0gbnVsbDtcbiAgfVxuXG4gIGVudHJvcHkgPSB1dGlscy50b0FycmF5KGVudHJvcHksIGVudHJvcHlFbmMpO1xuICBhZGQgPSB1dGlscy50b0FycmF5KGFkZCwgYWRkRW5jKTtcblxuICBhc3NlcnQoZW50cm9weS5sZW5ndGggPj0gKHRoaXMubWluRW50cm9weSAvIDgpLFxuICAgICAgICAgJ05vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogJyArIHRoaXMubWluRW50cm9weSArICcgYml0cycpO1xuXG4gIHRoaXMuX3VwZGF0ZShlbnRyb3B5LmNvbmNhdChhZGQgfHwgW10pKTtcbiAgdGhpcy5fcmVzZWVkID0gMTtcbn07XG5cbkhtYWNEUkJHLnByb3RvdHlwZS5nZW5lcmF0ZSA9IGZ1bmN0aW9uIGdlbmVyYXRlKGxlbiwgZW5jLCBhZGQsIGFkZEVuYykge1xuICBpZiAodGhpcy5fcmVzZWVkID4gdGhpcy5yZXNlZWRJbnRlcnZhbClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc2VlZCBpcyByZXF1aXJlZCcpO1xuXG4gIC8vIE9wdGlvbmFsIGVuY29kaW5nXG4gIGlmICh0eXBlb2YgZW5jICE9PSAnc3RyaW5nJykge1xuICAgIGFkZEVuYyA9IGFkZDtcbiAgICBhZGQgPSBlbmM7XG4gICAgZW5jID0gbnVsbDtcbiAgfVxuXG4gIC8vIE9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YVxuICBpZiAoYWRkKSB7XG4gICAgYWRkID0gdXRpbHMudG9BcnJheShhZGQsIGFkZEVuYyB8fCAnaGV4Jyk7XG4gICAgdGhpcy5fdXBkYXRlKGFkZCk7XG4gIH1cblxuICB2YXIgdGVtcCA9IFtdO1xuICB3aGlsZSAodGVtcC5sZW5ndGggPCBsZW4pIHtcbiAgICB0aGlzLlYgPSB0aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCk7XG4gICAgdGVtcCA9IHRlbXAuY29uY2F0KHRoaXMuVik7XG4gIH1cblxuICB2YXIgcmVzID0gdGVtcC5zbGljZSgwLCBsZW4pO1xuICB0aGlzLl91cGRhdGUoYWRkKTtcbiAgdGhpcy5fcmVzZWVkKys7XG4gIHJldHVybiB1dGlscy5lbmNvZGUocmVzLCBlbmMpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3Qgd2hhdHdnRW5jb2RpbmcgPSByZXF1aXJlKFwid2hhdHdnLWVuY29kaW5nXCIpO1xuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNlbmNvZGluZy1zbmlmZmluZy1hbGdvcml0aG1cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc25pZmZIVE1MRW5jb2RpbmcoYnVmZmVyLCBvcHRpb25zKSB7XG4gIGxldCBlbmNvZGluZyA9IHdoYXR3Z0VuY29kaW5nLmdldEJPTUVuY29kaW5nKGJ1ZmZlcik7IC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzE5MTBcblxuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKGVuY29kaW5nID09PSBudWxsICYmIG9wdGlvbnMudHJhbnNwb3J0TGF5ZXJFbmNvZGluZ0xhYmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKG9wdGlvbnMudHJhbnNwb3J0TGF5ZXJFbmNvZGluZ0xhYmVsKTtcbiAgfVxuXG4gIGlmIChlbmNvZGluZyA9PT0gbnVsbCkge1xuICAgIGVuY29kaW5nID0gcHJlc2Nhbk1ldGFDaGFyc2V0KGJ1ZmZlcik7XG4gIH1cblxuICBpZiAoZW5jb2RpbmcgPT09IG51bGwgJiYgb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2Rpbmc7XG4gIH1cblxuICBpZiAoZW5jb2RpbmcgPT09IG51bGwpIHtcbiAgICBlbmNvZGluZyA9IFwid2luZG93cy0xMjUyXCI7XG4gIH1cblxuICByZXR1cm4gZW5jb2Rpbmc7XG59O1xuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwcmVzY2FuLWEtYnl0ZS1zdHJlYW0tdG8tZGV0ZXJtaW5lLWl0cy1lbmNvZGluZ1xuZnVuY3Rpb24gcHJlc2Nhbk1ldGFDaGFyc2V0KGJ1ZmZlcikge1xuICBjb25zdCBsID0gTWF0aC5taW4oYnVmZmVyLmxlbmd0aCwgMTAyNCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IGMgPSBidWZmZXJbaV07XG4gICAgaWYgKGMgPT09IDB4M0MpIHtcbiAgICAgIC8vIFwiPFwiXG4gICAgICBsZXQgYzEgPSBidWZmZXJbaSArIDFdO1xuICAgICAgbGV0IGMyID0gYnVmZmVyW2kgKyAyXTtcbiAgICAgIGNvbnN0IGMzID0gYnVmZmVyW2kgKyAzXTtcbiAgICAgIGNvbnN0IGM0ID0gYnVmZmVyW2kgKyA0XTtcbiAgICAgIGNvbnN0IGM1ID0gYnVmZmVyW2kgKyA1XTtcbiAgICAgIC8vICEtLSAoY29tbWVudCBzdGFydClcbiAgICAgIGlmIChjMSA9PT0gMHgyMSAmJiBjMiA9PT0gMHgyRCAmJiBjMyA9PT0gMHgyRCkge1xuICAgICAgICBpICs9IDQ7XG4gICAgICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgYyA9IGJ1ZmZlcltpXTtcbiAgICAgICAgICBjMSA9IGJ1ZmZlcltpICsgMV07XG4gICAgICAgICAgYzIgPSBidWZmZXJbaSArIDJdO1xuICAgICAgICAgIC8vIC0tPiAoY29tbWVudCBlbmQpXG4gICAgICAgICAgaWYgKGMgPT09IDB4MkQgJiYgYzEgPT09IDB4MkQgJiYgYzIgPT09IDB4M0UpIHtcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgoYzEgPT09IDB4NEQgfHwgYzEgPT09IDB4NkQpICYmXG4gICAgICAgICAoYzIgPT09IDB4NDUgfHwgYzIgPT09IDB4NjUpICYmXG4gICAgICAgICAoYzMgPT09IDB4NTQgfHwgYzMgPT09IDB4NzQpICYmXG4gICAgICAgICAoYzQgPT09IDB4NDEgfHwgYzQgPT09IDB4NjEpICYmXG4gICAgICAgICAoaXNTcGFjZUNoYXJhY3RlcihjNSkgfHwgYzUgPT09IDB4MkYpKSB7XG4gICAgICAgIC8vIFwibWV0YVwiICsgc3BhY2Ugb3IgL1xuICAgICAgICBpICs9IDY7XG4gICAgICAgIGxldCBnb3RQcmFnbWEgPSBmYWxzZTtcbiAgICAgICAgbGV0IG5lZWRQcmFnbWEgPSBudWxsO1xuICAgICAgICBsZXQgY2hhcnNldCA9IG51bGw7XG5cbiAgICAgICAgbGV0IGF0dHJSZXM7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBhdHRyUmVzID0gZ2V0QXR0cmlidXRlKGJ1ZmZlciwgaSwgbCk7XG4gICAgICAgICAgaWYgKGF0dHJSZXMuYXR0cikge1xuICAgICAgICAgICAgaWYgKGF0dHJSZXMuYXR0ci5uYW1lID09PSBcImh0dHAtZXF1aXZcIikge1xuICAgICAgICAgICAgICBnb3RQcmFnbWEgPSBhdHRyUmVzLmF0dHIudmFsdWUgPT09IFwiY29udGVudC10eXBlXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJSZXMuYXR0ci5uYW1lID09PSBcImNvbnRlbnRcIiAmJiAhY2hhcnNldCkge1xuICAgICAgICAgICAgICBjaGFyc2V0ID0gZXh0cmFjdENoYXJhY3RlckVuY29kaW5nRnJvbU1ldGEoYXR0clJlcy5hdHRyLnZhbHVlKTtcbiAgICAgICAgICAgICAgaWYgKGNoYXJzZXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZWVkUHJhZ21hID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyUmVzLmF0dHIubmFtZSA9PT0gXCJjaGFyc2V0XCIpIHtcbiAgICAgICAgICAgICAgY2hhcnNldCA9IHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKGF0dHJSZXMuYXR0ci52YWx1ZSk7XG4gICAgICAgICAgICAgIG5lZWRQcmFnbWEgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaSA9IGF0dHJSZXMuaTtcbiAgICAgICAgfSB3aGlsZSAoYXR0clJlcy5hdHRyKTtcblxuICAgICAgICBpZiAobmVlZFByYWdtYSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWVkUHJhZ21hID09PSB0cnVlICYmIGdvdFByYWdtYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhcnNldCA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYXJzZXQgPT09IFwiVVRGLTE2TEVcIiB8fCBjaGFyc2V0ID09PSBcIlVURi0xNkJFXCIpIHtcbiAgICAgICAgICBjaGFyc2V0ID0gXCJVVEYtOFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyc2V0ID09PSBcIngtdXNlci1kZWZpbmVkXCIpIHtcbiAgICAgICAgICBjaGFyc2V0ID0gXCJ3aW5kb3dzLTEyNTJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGFyc2V0O1xuICAgICAgfSBlbHNlIGlmICgoYzEgPj0gMHg0MSAmJiBjMSA8PSAweDVBKSB8fCAoYzEgPj0gMHg2MSAmJiBjMSA8PSAweDdBKSkge1xuICAgICAgICAvLyBhLXogb3IgQS1aXG4gICAgICAgIGZvciAoaSArPSAyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgYyA9IGJ1ZmZlcltpXTtcbiAgICAgICAgICAvLyBzcGFjZSBvciA+XG4gICAgICAgICAgaWYgKGlzU3BhY2VDaGFyYWN0ZXIoYykgfHwgYyA9PT0gMHgzRSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBhdHRyUmVzO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgYXR0clJlcyA9IGdldEF0dHJpYnV0ZShidWZmZXIsIGksIGwpO1xuICAgICAgICAgIGkgPSBhdHRyUmVzLmk7XG4gICAgICAgIH0gd2hpbGUgKGF0dHJSZXMuYXR0cik7XG4gICAgICB9IGVsc2UgaWYgKGMxID09PSAweDIxIHx8IGMxID09PSAweDJGIHx8IGMxID09PSAweDNGKSB7XG4gICAgICAgIC8vICEgb3IgLyBvciA/XG4gICAgICAgIGZvciAoaSArPSAyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgYyA9IGJ1ZmZlcltpXTtcbiAgICAgICAgICAvLyA+XG4gICAgICAgICAgaWYgKGMgPT09IDB4M0UpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjY29uY2VwdC1nZXQtYXR0cmlidXRlcy13aGVuLXNuaWZmaW5nXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGUoYnVmZmVyLCBpLCBsKSB7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IGMgPSBidWZmZXJbaV07XG4gICAgLy8gc3BhY2Ugb3IgL1xuICAgIGlmIChpc1NwYWNlQ2hhcmFjdGVyKGMpIHx8IGMgPT09IDB4MkYpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBcIj5cIlxuICAgIGlmIChjID09PSAweDNFKSB7XG4gICAgICBpKys7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgbGV0IG5hbWUgPSBcIlwiO1xuICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgbmFtZUxvb3A6Zm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGMgPSBidWZmZXJbaV07XG4gICAgICAvLyBcIj1cIlxuICAgICAgaWYgKGMgPT09IDB4M0QgJiYgbmFtZSAhPT0gXCJcIikge1xuICAgICAgICBpKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gc3BhY2VcbiAgICAgIGlmIChpc1NwYWNlQ2hhcmFjdGVyKGMpKSB7XG4gICAgICAgIGZvciAoaSsrOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgYyA9IGJ1ZmZlcltpXTtcbiAgICAgICAgICAvLyBzcGFjZVxuICAgICAgICAgIGlmIChpc1NwYWNlQ2hhcmFjdGVyKGMpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbm90IFwiPVwiXG4gICAgICAgICAgaWYgKGMgIT09IDB4M0QpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGF0dHI6IHsgbmFtZSwgdmFsdWUgfSwgaSB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGkrKztcbiAgICAgICAgICBicmVhayBuYW1lTG9vcDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIC8gb3IgPlxuICAgICAgaWYgKGMgPT09IDB4MkYgfHwgYyA9PT0gMHgzRSkge1xuICAgICAgICByZXR1cm4geyBhdHRyOiB7IG5hbWUsIHZhbHVlIH0sIGkgfTtcbiAgICAgIH1cbiAgICAgIC8vIEEtWlxuICAgICAgaWYgKGMgPj0gMHg0MSAmJiBjIDw9IDB4NUEpIHtcbiAgICAgICAgbmFtZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMgKyAweDIwKTsgLy8gbG93ZXJjYXNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuYW1lICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICB9XG4gICAgfVxuICAgIGMgPSBidWZmZXJbaV07XG4gICAgLy8gc3BhY2VcbiAgICBpZiAoaXNTcGFjZUNoYXJhY3RlcihjKSkge1xuICAgICAgZm9yIChpKys7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgYyA9IGJ1ZmZlcltpXTtcbiAgICAgICAgLy8gc3BhY2VcbiAgICAgICAgaWYgKGlzU3BhY2VDaGFyYWN0ZXIoYykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBcIiBvciAnXG4gICAgaWYgKGMgPT09IDB4MjIgfHwgYyA9PT0gMHgyNykge1xuICAgICAgY29uc3QgcXVvdGUgPSBjO1xuICAgICAgZm9yIChpKys7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgYyA9IGJ1ZmZlcltpXTtcblxuICAgICAgICBpZiAoYyA9PT0gcXVvdGUpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgcmV0dXJuIHsgYXR0cjogeyBuYW1lLCB2YWx1ZSB9LCBpIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBLVpcbiAgICAgICAgaWYgKGMgPj0gMHg0MSAmJiBjIDw9IDB4NUEpIHtcbiAgICAgICAgICB2YWx1ZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMgKyAweDIwKTsgLy8gbG93ZXJjYXNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vID5cbiAgICBpZiAoYyA9PT0gMHgzRSkge1xuICAgICAgcmV0dXJuIHsgYXR0cjogeyBuYW1lLCB2YWx1ZSB9LCBpIH07XG4gICAgfVxuXG4gICAgLy8gQS1aXG4gICAgaWYgKGMgPj0gMHg0MSAmJiBjIDw9IDB4NUEpIHtcbiAgICAgIHZhbHVlICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyArIDB4MjApOyAvLyBsb3dlcmNhc2VcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICB9XG5cbiAgICBmb3IgKGkrKzsgaSA8IGw7IGkrKykge1xuICAgICAgYyA9IGJ1ZmZlcltpXTtcblxuICAgICAgLy8gc3BhY2Ugb3IgPlxuICAgICAgaWYgKGlzU3BhY2VDaGFyYWN0ZXIoYykgfHwgYyA9PT0gMHgzRSkge1xuICAgICAgICByZXR1cm4geyBhdHRyOiB7IG5hbWUsIHZhbHVlIH0sIGkgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQS1aXG4gICAgICBpZiAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkge1xuICAgICAgICB2YWx1ZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMgKyAweDIwKTsgLy8gbG93ZXJjYXNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4geyBpIH07XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDaGFyYWN0ZXJFbmNvZGluZ0Zyb21NZXRhKHN0cmluZykge1xuICBsZXQgcG9zaXRpb24gPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbGV0IHN1YlBvc2l0aW9uID0gc3RyaW5nLnN1YnN0cmluZyhwb3NpdGlvbikuc2VhcmNoKC9jaGFyc2V0L2kpO1xuXG4gICAgaWYgKHN1YlBvc2l0aW9uID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHN1YlBvc2l0aW9uICs9IFwiY2hhcnNldFwiLmxlbmd0aDtcblxuICAgIHdoaWxlIChpc1NwYWNlQ2hhcmFjdGVyKHN0cmluZ1tzdWJQb3NpdGlvbl0uY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICsrc3ViUG9zaXRpb247XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ1tzdWJQb3NpdGlvbl0gIT09IFwiPVwiKSB7XG4gICAgICBwb3NpdGlvbiA9IHN1YlBvc2l0aW9uIC0gMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgICsrc3ViUG9zaXRpb247XG5cbiAgICB3aGlsZSAoaXNTcGFjZUNoYXJhY3RlcihzdHJpbmdbc3ViUG9zaXRpb25dLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICArK3N1YlBvc2l0aW9uO1xuICAgIH1cblxuICAgIHBvc2l0aW9uID0gc3ViUG9zaXRpb247XG4gICAgYnJlYWs7XG4gIH1cblxuICBpZiAoc3RyaW5nW3Bvc2l0aW9uXSA9PT0gXCJcXFwiXCIgfHwgc3RyaW5nW3Bvc2l0aW9uXSA9PT0gXCInXCIpIHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSBzdHJpbmcuaW5kZXhPZihzdHJpbmdbcG9zaXRpb25dLCBwb3NpdGlvbiArIDEpO1xuXG4gICAgaWYgKG5leHRJbmRleCAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZShzdHJpbmcuc3Vic3RyaW5nKHBvc2l0aW9uICsgMSwgbmV4dEluZGV4KSk7XG4gICAgfVxuXG4gICAgLy8gSXQgaXMgYW4gdW5tYXRjaGVkIHF1b3RhdGlvbiBtYXJrXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoc3RyaW5nLmxlbmd0aCA9PT0gcG9zaXRpb24gKyAxKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgZW5kID0gc3RyaW5nLnN1YnN0cmluZyhwb3NpdGlvbiArIDEpLnNlYXJjaCgvXFx4MDl8XFx4MEF8XFx4MEN8XFx4MER8XFx4MjB8Oy8pO1xuICBpZiAoZW5kID09PSAtMSkge1xuICAgIGVuZCA9IHN0cmluZy5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKHN0cmluZy5zdWJzdHJpbmcocG9zaXRpb24sIGVuZCkpO1xufVxuXG5mdW5jdGlvbiBpc1NwYWNlQ2hhcmFjdGVyKGMpIHtcbiAgcmV0dXJuIGMgPT09IDB4MDkgfHwgYyA9PT0gMHgwQSB8fCBjID09PSAweDBDIHx8IGMgPT09IDB4MEQgfHwgYyA9PT0gMHgyMDtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG52YXIgcGFyc2VyID0gcmVxdWlyZSgnLi9wYXJzZXInKTtcbnZhciBzaWduZXIgPSByZXF1aXJlKCcuL3NpZ25lcicpO1xudmFyIHZlcmlmeSA9IHJlcXVpcmUoJy4vdmVyaWZ5Jyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cblxuXG4vLy8tLS0gQVBJXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIHBhcnNlOiBwYXJzZXIucGFyc2VSZXF1ZXN0LFxuICBwYXJzZVJlcXVlc3Q6IHBhcnNlci5wYXJzZVJlcXVlc3QsXG5cbiAgc2lnbjogc2lnbmVyLnNpZ25SZXF1ZXN0LFxuICBzaWduUmVxdWVzdDogc2lnbmVyLnNpZ25SZXF1ZXN0LFxuICBjcmVhdGVTaWduZXI6IHNpZ25lci5jcmVhdGVTaWduZXIsXG4gIGlzU2lnbmVyOiBzaWduZXIuaXNTaWduZXIsXG5cbiAgc3NoS2V5VG9QRU06IHV0aWxzLnNzaEtleVRvUEVNLFxuICBzc2hLZXlGaW5nZXJwcmludDogdXRpbHMuZmluZ2VycHJpbnQsXG4gIHBlbVRvUnNhU1NIS2V5OiB1dGlscy5wZW1Ub1JzYVNTSEtleSxcblxuICB2ZXJpZnk6IHZlcmlmeS52ZXJpZnlTaWduYXR1cmUsXG4gIHZlcmlmeVNpZ25hdHVyZTogdmVyaWZ5LnZlcmlmeVNpZ25hdHVyZSxcbiAgdmVyaWZ5SE1BQzogdmVyaWZ5LnZlcmlmeUhNQUNcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxMiBKb3llbnQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cblxuXG4vLy8tLS0gR2xvYmFsc1xuXG52YXIgSEFTSF9BTEdPUyA9IHV0aWxzLkhBU0hfQUxHT1M7XG52YXIgUEtfQUxHT1MgPSB1dGlscy5QS19BTEdPUztcbnZhciBIdHRwU2lnbmF0dXJlRXJyb3IgPSB1dGlscy5IdHRwU2lnbmF0dXJlRXJyb3I7XG52YXIgSW52YWxpZEFsZ29yaXRobUVycm9yID0gdXRpbHMuSW52YWxpZEFsZ29yaXRobUVycm9yO1xudmFyIHZhbGlkYXRlQWxnb3JpdGhtID0gdXRpbHMudmFsaWRhdGVBbGdvcml0aG07XG5cbnZhciBTdGF0ZSA9IHtcbiAgTmV3OiAwLFxuICBQYXJhbXM6IDFcbn07XG5cbnZhciBQYXJhbXNTdGF0ZSA9IHtcbiAgTmFtZTogMCxcbiAgUXVvdGU6IDEsXG4gIFZhbHVlOiAyLFxuICBDb21tYTogM1xufTtcblxuXG4vLy8tLS0gU3BlY2lmaWMgRXJyb3JzXG5cblxuZnVuY3Rpb24gRXhwaXJlZFJlcXVlc3RFcnJvcihtZXNzYWdlKSB7XG4gIEh0dHBTaWduYXR1cmVFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UsIEV4cGlyZWRSZXF1ZXN0RXJyb3IpO1xufVxudXRpbC5pbmhlcml0cyhFeHBpcmVkUmVxdWVzdEVycm9yLCBIdHRwU2lnbmF0dXJlRXJyb3IpO1xuXG5cbmZ1bmN0aW9uIEludmFsaWRIZWFkZXJFcnJvcihtZXNzYWdlKSB7XG4gIEh0dHBTaWduYXR1cmVFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UsIEludmFsaWRIZWFkZXJFcnJvcik7XG59XG51dGlsLmluaGVyaXRzKEludmFsaWRIZWFkZXJFcnJvciwgSHR0cFNpZ25hdHVyZUVycm9yKTtcblxuXG5mdW5jdGlvbiBJbnZhbGlkUGFyYW1zRXJyb3IobWVzc2FnZSkge1xuICBIdHRwU2lnbmF0dXJlRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlLCBJbnZhbGlkUGFyYW1zRXJyb3IpO1xufVxudXRpbC5pbmhlcml0cyhJbnZhbGlkUGFyYW1zRXJyb3IsIEh0dHBTaWduYXR1cmVFcnJvcik7XG5cblxuZnVuY3Rpb24gTWlzc2luZ0hlYWRlckVycm9yKG1lc3NhZ2UpIHtcbiAgSHR0cFNpZ25hdHVyZUVycm9yLmNhbGwodGhpcywgbWVzc2FnZSwgTWlzc2luZ0hlYWRlckVycm9yKTtcbn1cbnV0aWwuaW5oZXJpdHMoTWlzc2luZ0hlYWRlckVycm9yLCBIdHRwU2lnbmF0dXJlRXJyb3IpO1xuXG5mdW5jdGlvbiBTdHJpY3RQYXJzaW5nRXJyb3IobWVzc2FnZSkge1xuICBIdHRwU2lnbmF0dXJlRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlLCBTdHJpY3RQYXJzaW5nRXJyb3IpO1xufVxudXRpbC5pbmhlcml0cyhTdHJpY3RQYXJzaW5nRXJyb3IsIEh0dHBTaWduYXR1cmVFcnJvcik7XG5cbi8vLy0tLSBFeHBvcnRlZCBBUElcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgLyoqXG4gICAqIFBhcnNlcyB0aGUgJ0F1dGhvcml6YXRpb24nIGhlYWRlciBvdXQgb2YgYW4gaHR0cC5TZXJ2ZXJSZXF1ZXN0IG9iamVjdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgQVBJIHdpbGwgZnVsbHkgdmFsaWRhdGUgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLCBhbmQgdGhyb3dcbiAgICogb24gYW55IGVycm9yLiAgSXQgd2lsbCBub3QgaG93ZXZlciBjaGVjayB0aGUgc2lnbmF0dXJlLCBvciB0aGUga2V5SWQgZm9ybWF0XG4gICAqIGFzIHRob3NlIGFyZSBzcGVjaWZpYyB0byB5b3VyIGVudmlyb25tZW50LiAgWW91IGNhbiB1c2UgdGhlIG9wdGlvbnMgb2JqZWN0XG4gICAqIHRvIHBhc3MgaW4gZXh0cmEgY29uc3RyYWludHMuXG4gICAqXG4gICAqIEFzIGEgcmVzcG9uc2Ugb2JqZWN0IHlvdSBjYW4gZXhwZWN0IHRoaXM6XG4gICAqXG4gICAqICAgICB7XG4gICAqICAgICAgIFwic2NoZW1lXCI6IFwiU2lnbmF0dXJlXCIsXG4gICAqICAgICAgIFwicGFyYW1zXCI6IHtcbiAgICogICAgICAgICBcImtleUlkXCI6IFwiZm9vXCIsXG4gICAqICAgICAgICAgXCJhbGdvcml0aG1cIjogXCJyc2Etc2hhMjU2XCIsXG4gICAqICAgICAgICAgXCJoZWFkZXJzXCI6IFtcbiAgICogICAgICAgICAgIFwiZGF0ZVwiIG9yIFwieC1kYXRlXCIsXG4gICAqICAgICAgICAgICBcImRpZ2VzdFwiXG4gICAqICAgICAgICAgXSxcbiAgICogICAgICAgICBcInNpZ25hdHVyZVwiOiBcImJhc2U2NFwiXG4gICAqICAgICAgIH0sXG4gICAqICAgICAgIFwic2lnbmluZ1N0cmluZ1wiOiBcInJlYWR5IHRvIGJlIHBhc3NlZCB0byBjcnlwdG8udmVyaWZ5KClcIlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVxdWVzdCBhbiBodHRwLlNlcnZlclJlcXVlc3QuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFuIG9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHdpdGg6XG4gICAqICAgICAgICAgICAgICAgICAgIC0gY2xvY2tTa2V3OiBhbGxvd2VkIGNsb2NrIHNrZXcgaW4gc2Vjb25kcyAoZGVmYXVsdCAzMDApLlxuICAgKiAgICAgICAgICAgICAgICAgICAtIGhlYWRlcnM6IHJlcXVpcmVkIGhlYWRlciBuYW1lcyAoZGVmOiBkYXRlIG9yIHgtZGF0ZSlcbiAgICogICAgICAgICAgICAgICAgICAgLSBhbGdvcml0aG1zOiBhbGdvcml0aG1zIHRvIHN1cHBvcnQgKGRlZmF1bHQ6IGFsbCkuXG4gICAqICAgICAgICAgICAgICAgICAgIC0gc3RyaWN0OiBzaG91bGQgZW5mb3JjZSBsYXRlc3Qgc3BlYyBwYXJzaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdDogZmFsc2UpLlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHBhcnNlZCBvdXQgb2JqZWN0IChzZWUgYWJvdmUpLlxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG9uIGludmFsaWQgaW5wdXQuXG4gICAqIEB0aHJvd3Mge0ludmFsaWRIZWFkZXJFcnJvcn0gb24gYW4gaW52YWxpZCBBdXRob3JpemF0aW9uIGhlYWRlciBlcnJvci5cbiAgICogQHRocm93cyB7SW52YWxpZFBhcmFtc0Vycm9yfSBpZiB0aGUgcGFyYW1zIGluIHRoZSBzY2hlbWUgYXJlIGludmFsaWQuXG4gICAqIEB0aHJvd3Mge01pc3NpbmdIZWFkZXJFcnJvcn0gaWYgdGhlIHBhcmFtcyBpbmRpY2F0ZSBhIGhlYWRlciBub3QgcHJlc2VudCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlaXRoZXIgaW4gdGhlIHJlcXVlc3QgaGVhZGVycyBmcm9tIHRoZSBwYXJhbXMsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Igbm90IGluIHRoZSBwYXJhbXMgZnJvbSBhIHJlcXVpcmVkIGhlYWRlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG9wdGlvbnMuXG4gICAqIEB0aHJvd3Mge1N0cmljdFBhcnNpbmdFcnJvcn0gaWYgb2xkIGF0dHJpYnV0ZXMgYXJlIHVzZWQgaW4gc3RyaWN0IHBhcnNpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlLlxuICAgKiBAdGhyb3dzIHtFeHBpcmVkUmVxdWVzdEVycm9yfSBpZiB0aGUgdmFsdWUgb2YgZGF0ZSBvciB4LWRhdGUgZXhjZWVkcyBza2V3LlxuICAgKi9cbiAgcGFyc2VSZXF1ZXN0OiBmdW5jdGlvbiBwYXJzZVJlcXVlc3QocmVxdWVzdCwgb3B0aW9ucykge1xuICAgIGFzc2VydC5vYmplY3QocmVxdWVzdCwgJ3JlcXVlc3QnKTtcbiAgICBhc3NlcnQub2JqZWN0KHJlcXVlc3QuaGVhZGVycywgJ3JlcXVlc3QuaGVhZGVycycpO1xuICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaGVhZGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMgPSBbcmVxdWVzdC5oZWFkZXJzWyd4LWRhdGUnXSA/ICd4LWRhdGUnIDogJ2RhdGUnXTtcbiAgICB9XG4gICAgYXNzZXJ0Lm9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpO1xuICAgIGFzc2VydC5hcnJheU9mU3RyaW5nKG9wdGlvbnMuaGVhZGVycywgJ29wdGlvbnMuaGVhZGVycycpO1xuICAgIGFzc2VydC5vcHRpb25hbE51bWJlcihvcHRpb25zLmNsb2NrU2tldywgJ29wdGlvbnMuY2xvY2tTa2V3Jyk7XG5cbiAgICBpZiAoIXJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuICAgICAgdGhyb3cgbmV3IE1pc3NpbmdIZWFkZXJFcnJvcignbm8gYXV0aG9yaXphdGlvbiBoZWFkZXIgcHJlc2VudCBpbiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSByZXF1ZXN0Jyk7XG5cbiAgICBvcHRpb25zLmNsb2NrU2tldyA9IG9wdGlvbnMuY2xvY2tTa2V3IHx8IDMwMDtcblxuXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBzdGF0ZSA9IFN0YXRlLk5ldztcbiAgICB2YXIgc3Vic3RhdGUgPSBQYXJhbXNTdGF0ZS5OYW1lO1xuICAgIHZhciB0bXBOYW1lID0gJyc7XG4gICAgdmFyIHRtcFZhbHVlID0gJyc7XG5cbiAgICB2YXIgcGFyc2VkID0ge1xuICAgICAgc2NoZW1lOiAnJyxcbiAgICAgIHBhcmFtczoge30sXG4gICAgICBzaWduaW5nU3RyaW5nOiAnJyxcblxuICAgICAgZ2V0IGFsZ29yaXRobSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLmFsZ29yaXRobS50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSxcblxuICAgICAgZ2V0IGtleUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMua2V5SWQ7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBhdXRoeiA9IHJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhdXRoei5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBhdXRoei5jaGFyQXQoaSk7XG5cbiAgICAgIHN3aXRjaCAoTnVtYmVyKHN0YXRlKSkge1xuXG4gICAgICBjYXNlIFN0YXRlLk5ldzpcbiAgICAgICAgaWYgKGMgIT09ICcgJykgcGFyc2VkLnNjaGVtZSArPSBjO1xuICAgICAgICBlbHNlIHN0YXRlID0gU3RhdGUuUGFyYW1zO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTdGF0ZS5QYXJhbXM6XG4gICAgICAgIHN3aXRjaCAoTnVtYmVyKHN1YnN0YXRlKSkge1xuXG4gICAgICAgIGNhc2UgUGFyYW1zU3RhdGUuTmFtZTpcbiAgICAgICAgICB2YXIgY29kZSA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAvLyByZXN0cmljdGVkIG5hbWUgb2YgQS1aIC8gYS16XG4gICAgICAgICAgaWYgKChjb2RlID49IDB4NDEgJiYgY29kZSA8PSAweDVhKSB8fCAvLyBBLVpcbiAgICAgICAgICAgICAgKGNvZGUgPj0gMHg2MSAmJiBjb2RlIDw9IDB4N2EpKSB7IC8vIGEtelxuICAgICAgICAgICAgdG1wTmFtZSArPSBjO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJz0nKSB7XG4gICAgICAgICAgICBpZiAodG1wTmFtZS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkSGVhZGVyRXJyb3IoJ2JhZCBwYXJhbSBmb3JtYXQnKTtcbiAgICAgICAgICAgIHN1YnN0YXRlID0gUGFyYW1zU3RhdGUuUXVvdGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkSGVhZGVyRXJyb3IoJ2JhZCBwYXJhbSBmb3JtYXQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQYXJhbXNTdGF0ZS5RdW90ZTpcbiAgICAgICAgICBpZiAoYyA9PT0gJ1wiJykge1xuICAgICAgICAgICAgdG1wVmFsdWUgPSAnJztcbiAgICAgICAgICAgIHN1YnN0YXRlID0gUGFyYW1zU3RhdGUuVmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkSGVhZGVyRXJyb3IoJ2JhZCBwYXJhbSBmb3JtYXQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQYXJhbXNTdGF0ZS5WYWx1ZTpcbiAgICAgICAgICBpZiAoYyA9PT0gJ1wiJykge1xuICAgICAgICAgICAgcGFyc2VkLnBhcmFtc1t0bXBOYW1lXSA9IHRtcFZhbHVlO1xuICAgICAgICAgICAgc3Vic3RhdGUgPSBQYXJhbXNTdGF0ZS5Db21tYTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG1wVmFsdWUgKz0gYztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQYXJhbXNTdGF0ZS5Db21tYTpcbiAgICAgICAgICBpZiAoYyA9PT0gJywnKSB7XG4gICAgICAgICAgICB0bXBOYW1lID0gJyc7XG4gICAgICAgICAgICBzdWJzdGF0ZSA9IFBhcmFtc1N0YXRlLk5hbWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkSGVhZGVyRXJyb3IoJ2JhZCBwYXJhbSBmb3JtYXQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3Vic3RhdGUnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN1YnN0YXRlJyk7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZC5wYXJhbXMuaGVhZGVycyB8fCBwYXJzZWQucGFyYW1zLmhlYWRlcnMgPT09ICcnKSB7XG4gICAgICBpZiAocmVxdWVzdC5oZWFkZXJzWyd4LWRhdGUnXSkge1xuICAgICAgICBwYXJzZWQucGFyYW1zLmhlYWRlcnMgPSBbJ3gtZGF0ZSddO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkLnBhcmFtcy5oZWFkZXJzID0gWydkYXRlJ107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZC5wYXJhbXMuaGVhZGVycyA9IHBhcnNlZC5wYXJhbXMuaGVhZGVycy5zcGxpdCgnICcpO1xuICAgIH1cblxuICAgIC8vIE1pbmltYWxseSB2YWxpZGF0ZSB0aGUgcGFyc2VkIG9iamVjdFxuICAgIGlmICghcGFyc2VkLnNjaGVtZSB8fCBwYXJzZWQuc2NoZW1lICE9PSAnU2lnbmF0dXJlJylcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkSGVhZGVyRXJyb3IoJ3NjaGVtZSB3YXMgbm90IFwiU2lnbmF0dXJlXCInKTtcblxuICAgIGlmICghcGFyc2VkLnBhcmFtcy5rZXlJZClcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkSGVhZGVyRXJyb3IoJ2tleUlkIHdhcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBpZiAoIXBhcnNlZC5wYXJhbXMuYWxnb3JpdGhtKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRIZWFkZXJFcnJvcignYWxnb3JpdGhtIHdhcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBpZiAoIXBhcnNlZC5wYXJhbXMuc2lnbmF0dXJlKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRIZWFkZXJFcnJvcignc2lnbmF0dXJlIHdhcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICAvLyBDaGVjayB0aGUgYWxnb3JpdGhtIGFnYWluc3QgdGhlIG9mZmljaWFsIGxpc3RcbiAgICBwYXJzZWQucGFyYW1zLmFsZ29yaXRobSA9IHBhcnNlZC5wYXJhbXMuYWxnb3JpdGhtLnRvTG93ZXJDYXNlKCk7XG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlQWxnb3JpdGhtKHBhcnNlZC5wYXJhbXMuYWxnb3JpdGhtKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEludmFsaWRBbGdvcml0aG1FcnJvcilcbiAgICAgICAgdGhyb3cgKG5ldyBJbnZhbGlkUGFyYW1zRXJyb3IocGFyc2VkLnBhcmFtcy5hbGdvcml0aG0gKyAnIGlzIG5vdCAnICtcbiAgICAgICAgICAnc3VwcG9ydGVkJykpO1xuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyAoZSk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgdGhlIHNpZ25pbmdTdHJpbmdcbiAgICBmb3IgKGkgPSAwOyBpIDwgcGFyc2VkLnBhcmFtcy5oZWFkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaCA9IHBhcnNlZC5wYXJhbXMuaGVhZGVyc1tpXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcGFyc2VkLnBhcmFtcy5oZWFkZXJzW2ldID0gaDtcblxuICAgICAgaWYgKGggPT09ICdyZXF1ZXN0LWxpbmUnKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgICAgICAvKlxuICAgICAgICAgICAqIFdlIGFsbG93IGhlYWRlcnMgZnJvbSB0aGUgb2xkZXIgc3BlYyBkcmFmdHMgaWYgc3RyaWN0IHBhcnNpbmcgaXNuJ3RcbiAgICAgICAgICAgKiBzcGVjaWZpZWQgaW4gb3B0aW9ucy5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBwYXJzZWQuc2lnbmluZ1N0cmluZyArPVxuICAgICAgICAgICAgcmVxdWVzdC5tZXRob2QgKyAnICcgKyByZXF1ZXN0LnVybCArICcgSFRUUC8nICsgcmVxdWVzdC5odHRwVmVyc2lvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvKiBTdHJpY3QgcGFyc2luZyBkb2Vzbid0IGFsbG93IG9sZGVyIGRyYWZ0IGhlYWRlcnMuICovXG4gICAgICAgICAgdGhyb3cgKG5ldyBTdHJpY3RQYXJzaW5nRXJyb3IoJ3JlcXVlc3QtbGluZSBpcyBub3QgYSB2YWxpZCBoZWFkZXIgJyArXG4gICAgICAgICAgICAnd2l0aCBzdHJpY3QgcGFyc2luZyBlbmFibGVkLicpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChoID09PSAnKHJlcXVlc3QtdGFyZ2V0KScpIHtcbiAgICAgICAgcGFyc2VkLnNpZ25pbmdTdHJpbmcgKz1cbiAgICAgICAgICAnKHJlcXVlc3QtdGFyZ2V0KTogJyArIHJlcXVlc3QubWV0aG9kLnRvTG93ZXJDYXNlKCkgKyAnICcgK1xuICAgICAgICAgIHJlcXVlc3QudXJsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcmVxdWVzdC5oZWFkZXJzW2hdO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aHJvdyBuZXcgTWlzc2luZ0hlYWRlckVycm9yKGggKyAnIHdhcyBub3QgaW4gdGhlIHJlcXVlc3QnKTtcbiAgICAgICAgcGFyc2VkLnNpZ25pbmdTdHJpbmcgKz0gaCArICc6ICcgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpICsgMSkgPCBwYXJzZWQucGFyYW1zLmhlYWRlcnMubGVuZ3RoKVxuICAgICAgICBwYXJzZWQuc2lnbmluZ1N0cmluZyArPSAnXFxuJztcbiAgICB9XG5cbiAgICAvLyBDaGVjayBhZ2FpbnN0IHRoZSBjb25zdHJhaW50c1xuICAgIHZhciBkYXRlO1xuICAgIGlmIChyZXF1ZXN0LmhlYWRlcnMuZGF0ZSB8fCByZXF1ZXN0LmhlYWRlcnNbJ3gtZGF0ZSddKSB7XG4gICAgICAgIGlmIChyZXF1ZXN0LmhlYWRlcnNbJ3gtZGF0ZSddKSB7XG4gICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHJlcXVlc3QuaGVhZGVyc1sneC1kYXRlJ10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShyZXF1ZXN0LmhlYWRlcnMuZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgdmFyIHNrZXcgPSBNYXRoLmFicyhub3cuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lKCkpO1xuXG4gICAgICBpZiAoc2tldyA+IG9wdGlvbnMuY2xvY2tTa2V3ICogMTAwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXhwaXJlZFJlcXVlc3RFcnJvcignY2xvY2sgc2tldyBvZiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNrZXcgLyAxMDAwKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzIHdhcyBncmVhdGVyIHRoYW4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2xvY2tTa2V3ICsgJ3MnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvcHRpb25zLmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAoaGRyKSB7XG4gICAgICAvLyBSZW1lbWJlciB0aGF0IHdlIGFscmVhZHkgY2hlY2tlZCBhbnkgaGVhZGVycyBpbiB0aGUgcGFyYW1zXG4gICAgICAvLyB3ZXJlIGluIHRoZSByZXF1ZXN0LCBzbyBpZiB0aGlzIHBhc3NlcyB3ZSdyZSBnb29kLlxuICAgICAgaWYgKHBhcnNlZC5wYXJhbXMuaGVhZGVycy5pbmRleE9mKGhkcikgPCAwKVxuICAgICAgICB0aHJvdyBuZXcgTWlzc2luZ0hlYWRlckVycm9yKGhkciArICcgd2FzIG5vdCBhIHNpZ25lZCBoZWFkZXInKTtcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb25zLmFsZ29yaXRobXMpIHtcbiAgICAgIGlmIChvcHRpb25zLmFsZ29yaXRobXMuaW5kZXhPZihwYXJzZWQucGFyYW1zLmFsZ29yaXRobSkgPT09IC0xKVxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtc0Vycm9yKHBhcnNlZC5wYXJhbXMuYWxnb3JpdGhtICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGlzIG5vdCBhIHN1cHBvcnRlZCBhbGdvcml0aG0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxMiBKb3llbnQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBzc2hwayA9IHJlcXVpcmUoJ3NzaHBrJyk7XG52YXIganNwcmltID0gcmVxdWlyZSgnanNwcmltJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbnZhciBzcHJpbnRmID0gcmVxdWlyZSgndXRpbCcpLmZvcm1hdDtcblxudmFyIEhBU0hfQUxHT1MgPSB1dGlscy5IQVNIX0FMR09TO1xudmFyIFBLX0FMR09TID0gdXRpbHMuUEtfQUxHT1M7XG52YXIgSW52YWxpZEFsZ29yaXRobUVycm9yID0gdXRpbHMuSW52YWxpZEFsZ29yaXRobUVycm9yO1xudmFyIEh0dHBTaWduYXR1cmVFcnJvciA9IHV0aWxzLkh0dHBTaWduYXR1cmVFcnJvcjtcbnZhciB2YWxpZGF0ZUFsZ29yaXRobSA9IHV0aWxzLnZhbGlkYXRlQWxnb3JpdGhtO1xuXG4vLy8tLS0gR2xvYmFsc1xuXG52YXIgQVVUSFpfRk1UID1cbiAgJ1NpZ25hdHVyZSBrZXlJZD1cIiVzXCIsYWxnb3JpdGhtPVwiJXNcIixoZWFkZXJzPVwiJXNcIixzaWduYXR1cmU9XCIlc1wiJztcblxuLy8vLS0tIFNwZWNpZmljIEVycm9yc1xuXG5mdW5jdGlvbiBNaXNzaW5nSGVhZGVyRXJyb3IobWVzc2FnZSkge1xuICBIdHRwU2lnbmF0dXJlRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlLCBNaXNzaW5nSGVhZGVyRXJyb3IpO1xufVxudXRpbC5pbmhlcml0cyhNaXNzaW5nSGVhZGVyRXJyb3IsIEh0dHBTaWduYXR1cmVFcnJvcik7XG5cbmZ1bmN0aW9uIFN0cmljdFBhcnNpbmdFcnJvcihtZXNzYWdlKSB7XG4gIEh0dHBTaWduYXR1cmVFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UsIFN0cmljdFBhcnNpbmdFcnJvcik7XG59XG51dGlsLmluaGVyaXRzKFN0cmljdFBhcnNpbmdFcnJvciwgSHR0cFNpZ25hdHVyZUVycm9yKTtcblxuLyogU2VlIGNyZWF0ZVNpZ25lcigpICovXG5mdW5jdGlvbiBSZXF1ZXN0U2lnbmVyKG9wdGlvbnMpIHtcbiAgYXNzZXJ0Lm9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpO1xuXG4gIHZhciBhbGcgPSBbXTtcbiAgaWYgKG9wdGlvbnMuYWxnb3JpdGhtICE9PSB1bmRlZmluZWQpIHtcbiAgICBhc3NlcnQuc3RyaW5nKG9wdGlvbnMuYWxnb3JpdGhtLCAnb3B0aW9ucy5hbGdvcml0aG0nKTtcbiAgICBhbGcgPSB2YWxpZGF0ZUFsZ29yaXRobShvcHRpb25zLmFsZ29yaXRobSk7XG4gIH1cbiAgdGhpcy5yc19hbGcgPSBhbGc7XG5cbiAgLypcbiAgICogUmVxdWVzdFNpZ25lcnMgY29tZSBpbiB0d28gdmFyaWV0aWVzOiBvbmVzIHdpdGggYW4gcnNfc2lnbkZ1bmMsIGFuZCBvbmVzXG4gICAqIHdpdGggYW4gcnNfc2lnbmVyLlxuICAgKlxuICAgKiByc19zaWduRnVuYy1iYXNlZCBSZXF1ZXN0U2lnbmVycyBoYXZlIHRvIGJ1aWxkIHVwIHRoZWlyIGVudGlyZSBzaWduaW5nXG4gICAqIHN0cmluZyB3aXRoaW4gdGhlIHJzX2xpbmVzIGFycmF5IGFuZCBnaXZlIGl0IHRvIHJzX3NpZ25GdW5jIGFzIGEgc2luZ2xlXG4gICAqIGNvbmNhdCdkIGJsb2IuIHJzX3NpZ25lci1iYXNlZCBSZXF1ZXN0U2lnbmVycyBjYW4gYWRkIGEgbGluZSBhdCBhIHRpbWUgdG9cbiAgICogdGhlaXIgc2lnbmluZyBzdGF0ZSBieSB1c2luZyByc19zaWduZXIudXBkYXRlKCksIHRodXMgb25seSBuZWVkaW5nIHRvXG4gICAqIGJ1ZmZlciB0aGUgaGFzaCBmdW5jdGlvbiBzdGF0ZSBhbmQgb25lIGxpbmUgYXQgYSB0aW1lLlxuICAgKi9cbiAgaWYgKG9wdGlvbnMuc2lnbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXNzZXJ0LmZ1bmMob3B0aW9ucy5zaWduLCAnb3B0aW9ucy5zaWduJyk7XG4gICAgdGhpcy5yc19zaWduRnVuYyA9IG9wdGlvbnMuc2lnbjtcblxuICB9IGVsc2UgaWYgKGFsZ1swXSA9PT0gJ2htYWMnICYmIG9wdGlvbnMua2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBhc3NlcnQuc3RyaW5nKG9wdGlvbnMua2V5SWQsICdvcHRpb25zLmtleUlkJyk7XG4gICAgdGhpcy5yc19rZXlJZCA9IG9wdGlvbnMua2V5SWQ7XG5cbiAgICBpZiAodHlwZW9mIChvcHRpb25zLmtleSkgIT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNCdWZmZXIob3B0aW9ucy5rZXkpKVxuICAgICAgdGhyb3cgKG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMua2V5IGZvciBITUFDIG11c3QgYmUgYSBzdHJpbmcgb3IgQnVmZmVyJykpO1xuXG4gICAgLypcbiAgICAgKiBNYWtlIGFuIHJzX3NpZ25lciBmb3IgSE1BQ3MsIG5vdCBhIHJzX3NpZ25GdW5jIC0tIEhNQUNzIGRpZ2VzdCB0aGVpclxuICAgICAqIGRhdGEgaW4gY2h1bmtzIHJhdGhlciB0aGFuIHJlcXVpcmluZyBpdCBhbGwgdG8gYmUgZ2l2ZW4gaW4gb25lIGdvXG4gICAgICogYXQgdGhlIGVuZCwgc28gdGhleSBhcmUgbW9yZSBzaW1pbGFyIHRvIHNpZ25lcnMgdGhhbiBzaWduRnVuY3MuXG4gICAgICovXG4gICAgdGhpcy5yc19zaWduZXIgPSBjcnlwdG8uY3JlYXRlSG1hYyhhbGdbMV0udG9VcHBlckNhc2UoKSwgb3B0aW9ucy5rZXkpO1xuICAgIHRoaXMucnNfc2lnbmVyLnNpZ24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZGlnZXN0ID0gdGhpcy5kaWdlc3QoJ2Jhc2U2NCcpO1xuICAgICAgcmV0dXJuICh7XG4gICAgICAgIGhhc2hBbGdvcml0aG06IGFsZ1sxXSxcbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIChkaWdlc3QpOyB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gIH0gZWxzZSBpZiAob3B0aW9ucy5rZXkgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBpZiAodHlwZW9mIChrZXkpID09PSAnc3RyaW5nJyB8fCBCdWZmZXIuaXNCdWZmZXIoa2V5KSlcbiAgICAgIGtleSA9IHNzaHBrLnBhcnNlUHJpdmF0ZUtleShrZXkpO1xuXG4gICAgYXNzZXJ0Lm9rKHNzaHBrLlByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSwgWzEsIDJdKSxcbiAgICAgICdvcHRpb25zLmtleSBtdXN0IGJlIGEgc3NocGsuUHJpdmF0ZUtleScpO1xuICAgIHRoaXMucnNfa2V5ID0ga2V5O1xuXG4gICAgYXNzZXJ0LnN0cmluZyhvcHRpb25zLmtleUlkLCAnb3B0aW9ucy5rZXlJZCcpO1xuICAgIHRoaXMucnNfa2V5SWQgPSBvcHRpb25zLmtleUlkO1xuXG4gICAgaWYgKCFQS19BTEdPU1trZXkudHlwZV0pIHtcbiAgICAgIHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKGtleS50eXBlLnRvVXBwZXJDYXNlKCkgKyAnIHR5cGUgJyArXG4gICAgICAgICdrZXlzIGFyZSBub3Qgc3VwcG9ydGVkJykpO1xuICAgIH1cblxuICAgIGlmIChhbGdbMF0gIT09IHVuZGVmaW5lZCAmJiBrZXkudHlwZSAhPT0gYWxnWzBdKSB7XG4gICAgICB0aHJvdyAobmV3IEludmFsaWRBbGdvcml0aG1FcnJvcignb3B0aW9ucy5rZXkgbXVzdCBiZSBhICcgK1xuICAgICAgICBhbGdbMF0udG9VcHBlckNhc2UoKSArICcga2V5LCB3YXMgZ2l2ZW4gYSAnICtcbiAgICAgICAga2V5LnR5cGUudG9VcHBlckNhc2UoKSArICcga2V5IGluc3RlYWQnKSk7XG4gICAgfVxuXG4gICAgdGhpcy5yc19zaWduZXIgPSBrZXkuY3JlYXRlU2lnbihhbGdbMV0pO1xuXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgKG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMuc2lnbiAoZnVuYykgb3Igb3B0aW9ucy5rZXkgaXMgcmVxdWlyZWQnKSk7XG4gIH1cblxuICB0aGlzLnJzX2hlYWRlcnMgPSBbXTtcbiAgdGhpcy5yc19saW5lcyA9IFtdO1xufVxuXG4vKipcbiAqIEFkZHMgYSBoZWFkZXIgdG8gYmUgc2lnbmVkLCB3aXRoIGl0cyB2YWx1ZSwgaW50byB0aGlzIHNpZ25lci5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaGVhZGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge1N0cmluZ30gdmFsdWUgd3JpdHRlblxuICovXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS53cml0ZUhlYWRlciA9IGZ1bmN0aW9uIChoZWFkZXIsIHZhbHVlKSB7XG4gIGFzc2VydC5zdHJpbmcoaGVhZGVyLCAnaGVhZGVyJyk7XG4gIGhlYWRlciA9IGhlYWRlci50b0xvd2VyQ2FzZSgpO1xuICBhc3NlcnQuc3RyaW5nKHZhbHVlLCAndmFsdWUnKTtcblxuICB0aGlzLnJzX2hlYWRlcnMucHVzaChoZWFkZXIpO1xuXG4gIGlmICh0aGlzLnJzX3NpZ25GdW5jKSB7XG4gICAgdGhpcy5yc19saW5lcy5wdXNoKGhlYWRlciArICc6ICcgKyB2YWx1ZSk7XG5cbiAgfSBlbHNlIHtcbiAgICB2YXIgbGluZSA9IGhlYWRlciArICc6ICcgKyB2YWx1ZTtcbiAgICBpZiAodGhpcy5yc19oZWFkZXJzLmxlbmd0aCA+IDApXG4gICAgICBsaW5lID0gJ1xcbicgKyBsaW5lO1xuICAgIHRoaXMucnNfc2lnbmVyLnVwZGF0ZShsaW5lKTtcbiAgfVxuXG4gIHJldHVybiAodmFsdWUpO1xufTtcblxuLyoqXG4gKiBBZGRzIGEgZGVmYXVsdCBEYXRlIGhlYWRlciwgcmV0dXJuaW5nIGl0cyB2YWx1ZS5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblJlcXVlc3RTaWduZXIucHJvdG90eXBlLndyaXRlRGF0ZUhlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICh0aGlzLndyaXRlSGVhZGVyKCdkYXRlJywganNwcmltLnJmYzExMjMobmV3IERhdGUoKSkpKTtcbn07XG5cbi8qKlxuICogQWRkcyB0aGUgcmVxdWVzdCB0YXJnZXQgbGluZSB0byBiZSBzaWduZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZCwgSFRUUCBtZXRob2QgKGUuZy4gJ2dldCcsICdwb3N0JywgJ3B1dCcpXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICovXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS53cml0ZVRhcmdldCA9IGZ1bmN0aW9uIChtZXRob2QsIHBhdGgpIHtcbiAgYXNzZXJ0LnN0cmluZyhtZXRob2QsICdtZXRob2QnKTtcbiAgYXNzZXJ0LnN0cmluZyhwYXRoLCAncGF0aCcpO1xuICBtZXRob2QgPSBtZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgdGhpcy53cml0ZUhlYWRlcignKHJlcXVlc3QtdGFyZ2V0KScsIG1ldGhvZCArICcgJyArIHBhdGgpO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHZhbHVlIGZvciB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgb24gdGhpcyByZXF1ZXN0XG4gKiBhc3luY2hyb25vdXNseS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN9IGNhbGxiYWNrIChlcnIsIGF1dGh6KVxuICovXG5SZXF1ZXN0U2lnbmVyLnByb3RvdHlwZS5zaWduID0gZnVuY3Rpb24gKGNiKSB7XG4gIGFzc2VydC5mdW5jKGNiLCAnY2FsbGJhY2snKTtcblxuICBpZiAodGhpcy5yc19oZWFkZXJzLmxlbmd0aCA8IDEpXG4gICAgdGhyb3cgKG5ldyBFcnJvcignQXQgbGVhc3Qgb25lIGhlYWRlciBtdXN0IGJlIHNpZ25lZCcpKTtcblxuICB2YXIgYWxnLCBhdXRoejtcbiAgaWYgKHRoaXMucnNfc2lnbkZ1bmMpIHtcbiAgICB2YXIgZGF0YSA9IHRoaXMucnNfbGluZXMuam9pbignXFxuJyk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucnNfc2lnbkZ1bmMoZGF0YSwgZnVuY3Rpb24gKGVyciwgc2lnKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNiKGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGFzc2VydC5vYmplY3Qoc2lnLCAnc2lnbmF0dXJlJyk7XG4gICAgICAgIGFzc2VydC5zdHJpbmcoc2lnLmtleUlkLCAnc2lnbmF0dXJlLmtleUlkJyk7XG4gICAgICAgIGFzc2VydC5zdHJpbmcoc2lnLmFsZ29yaXRobSwgJ3NpZ25hdHVyZS5hbGdvcml0aG0nKTtcbiAgICAgICAgYXNzZXJ0LnN0cmluZyhzaWcuc2lnbmF0dXJlLCAnc2lnbmF0dXJlLnNpZ25hdHVyZScpO1xuICAgICAgICBhbGcgPSB2YWxpZGF0ZUFsZ29yaXRobShzaWcuYWxnb3JpdGhtKTtcblxuICAgICAgICBhdXRoeiA9IHNwcmludGYoQVVUSFpfRk1ULFxuICAgICAgICAgIHNpZy5rZXlJZCxcbiAgICAgICAgICBzaWcuYWxnb3JpdGhtLFxuICAgICAgICAgIHNlbGYucnNfaGVhZGVycy5qb2luKCcgJyksXG4gICAgICAgICAgc2lnLnNpZ25hdHVyZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNiKGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYihudWxsLCBhdXRoeik7XG4gICAgfSk7XG5cbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHNpZ09iaiA9IHRoaXMucnNfc2lnbmVyLnNpZ24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjYihlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWxnID0gKHRoaXMucnNfYWxnWzBdIHx8IHRoaXMucnNfa2V5LnR5cGUpICsgJy0nICsgc2lnT2JqLmhhc2hBbGdvcml0aG07XG4gICAgdmFyIHNpZ25hdHVyZSA9IHNpZ09iai50b1N0cmluZygpO1xuICAgIGF1dGh6ID0gc3ByaW50ZihBVVRIWl9GTVQsXG4gICAgICB0aGlzLnJzX2tleUlkLFxuICAgICAgYWxnLFxuICAgICAgdGhpcy5yc19oZWFkZXJzLmpvaW4oJyAnKSxcbiAgICAgIHNpZ25hdHVyZSk7XG4gICAgY2IobnVsbCwgYXV0aHopO1xuICB9XG59O1xuXG4vLy8tLS0gRXhwb3J0ZWQgQVBJXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvKipcbiAgICogSWRlbnRpZmllcyB3aGV0aGVyIGEgZ2l2ZW4gb2JqZWN0IGlzIGEgcmVxdWVzdCBzaWduZXIgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0LCB0aGUgb2JqZWN0IHRvIGlkZW50aWZ5XG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cbiAgaXNTaWduZXI6IGZ1bmN0aW9uIChvYmopIHtcbiAgICBpZiAodHlwZW9mIChvYmopID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBSZXF1ZXN0U2lnbmVyKVxuICAgICAgcmV0dXJuICh0cnVlKTtcbiAgICByZXR1cm4gKGZhbHNlKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHJlcXVlc3Qgc2lnbmVyLCB1c2VkIHRvIGFzeW5jaHJvbm91c2x5IGJ1aWxkIGEgc2lnbmF0dXJlXG4gICAqIGZvciBhIHJlcXVlc3QgKGRvZXMgbm90IGhhdmUgdG8gYmUgYW4gaHR0cC5DbGllbnRSZXF1ZXN0KS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMsIGVpdGhlcjpcbiAgICogICAgICAgICAgICAgICAgICAgLSB7U3RyaW5nfSBrZXlJZFxuICAgKiAgICAgICAgICAgICAgICAgICAtIHtTdHJpbmd8QnVmZmVyfSBrZXlcbiAgICogICAgICAgICAgICAgICAgICAgLSB7U3RyaW5nfSBhbGdvcml0aG0gKG9wdGlvbmFsLCByZXF1aXJlZCBmb3IgSE1BQylcbiAgICogICAgICAgICAgICAgICAgIG9yOlxuICAgKiAgICAgICAgICAgICAgICAgICAtIHtGdW5jfSBzaWduIChkYXRhLCBjYilcbiAgICogQHJldHVybiB7UmVxdWVzdFNpZ25lcn1cbiAgICovXG4gIGNyZWF0ZVNpZ25lcjogZnVuY3Rpb24gY3JlYXRlU2lnbmVyKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKG5ldyBSZXF1ZXN0U2lnbmVyKG9wdGlvbnMpKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkcyBhbiAnQXV0aG9yaXphdGlvbicgaGVhZGVyIHRvIGFuIGh0dHAuQ2xpZW50UmVxdWVzdCBvYmplY3QuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGlzIEFQSSB3aWxsIGFkZCBhIERhdGUgaGVhZGVyIGlmIGl0J3Mgbm90IGFscmVhZHkgc2V0LiBBbnlcbiAgICogb3RoZXIgaGVhZGVycyBpbiB0aGUgb3B0aW9ucy5oZWFkZXJzIGFycmF5IE1VU1QgYmUgcHJlc2VudCwgb3IgdGhpc1xuICAgKiB3aWxsIHRocm93LlxuICAgKlxuICAgKiBZb3Ugc2hvdWxkbid0IG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybiB0eXBlOyBpdCdzIGp1c3QgdGhlcmUgaWYgeW91IHdhbnRcbiAgICogdG8gYmUgcGVkYW50aWMuXG4gICAqXG4gICAqIFRoZSBvcHRpb25hbCBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHBhcnNpbmcgc2hvdWxkIHVzZSBzdHJpY3QgZW5mb3JjZW1lbnRcbiAgICogb2YgdGhlIHZlcnNpb24gZHJhZnQtY2F2YWdlLWh0dHAtc2lnbmF0dXJlcy0wNCBvZiB0aGUgc3BlYyBvciBiZXlvbmQuXG4gICAqIFRoZSBkZWZhdWx0IGlzIHRvIGJlIGxvb3NlIGFuZCBzdXBwb3J0XG4gICAqIG9sZGVyIHZlcnNpb25zIGZvciBjb21wYXRpYmlsaXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVxdWVzdCBhbiBpbnN0YW5jZSBvZiBodHRwLkNsaWVudFJlcXVlc3QuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIHNpZ25pbmcgcGFyYW1ldGVycyBvYmplY3Q6XG4gICAqICAgICAgICAgICAgICAgICAgIC0ge1N0cmluZ30ga2V5SWQgcmVxdWlyZWQuXG4gICAqICAgICAgICAgICAgICAgICAgIC0ge1N0cmluZ30ga2V5IHJlcXVpcmVkIChlaXRoZXIgYSBQRU0gb3IgSE1BQyBrZXkpLlxuICAgKiAgICAgICAgICAgICAgICAgICAtIHtBcnJheX0gaGVhZGVycyBvcHRpb25hbDsgZGVmYXVsdHMgdG8gWydkYXRlJ10uXG4gICAqICAgICAgICAgICAgICAgICAgIC0ge1N0cmluZ30gYWxnb3JpdGhtIG9wdGlvbmFsICh1bmxlc3Mga2V5IGlzIEhNQUMpO1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgdGhlIHNhbWUgYXMgdGhlIHNzaHBrIGRlZmF1bHRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduaW5nIGFsZ29yaXRobSBmb3IgdGhlIHR5cGUgb2Yga2V5IGdpdmVuXG4gICAqICAgICAgICAgICAgICAgICAgIC0ge1N0cmluZ30gaHR0cFZlcnNpb24gb3B0aW9uYWw7IGRlZmF1bHRzIHRvICcxLjEnLlxuICAgKiAgICAgICAgICAgICAgICAgICAtIHtCb29sZWFufSBzdHJpY3Qgb3B0aW9uYWw7IGRlZmF1bHRzIHRvICdmYWxzZScuXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgQXV0aG9yaXphdGlvbiAoYW5kIG9wdGlvbmFsbHkgRGF0ZSkgd2VyZSBhZGRlZC5cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSBvbiBiYWQgcGFyYW1ldGVyIHR5cGVzIChpbnB1dCkuXG4gICAqIEB0aHJvd3Mge0ludmFsaWRBbGdvcml0aG1FcnJvcn0gaWYgYWxnb3JpdGhtIHdhcyBiYWQgb3IgaW5jb21wYXRpYmxlIHdpdGhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZ2l2ZW4ga2V5LlxuICAgKiBAdGhyb3dzIHtzc2hway5LZXlQYXJzZUVycm9yfSBpZiBrZXkgd2FzIGJhZC5cbiAgICogQHRocm93cyB7TWlzc2luZ0hlYWRlckVycm9yfSBpZiBhIGhlYWRlciB0byBiZSBzaWduZWQgd2FzIHNwZWNpZmllZCBidXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgbm90IHByZXNlbnQuXG4gICAqL1xuICBzaWduUmVxdWVzdDogZnVuY3Rpb24gc2lnblJlcXVlc3QocmVxdWVzdCwgb3B0aW9ucykge1xuICAgIGFzc2VydC5vYmplY3QocmVxdWVzdCwgJ3JlcXVlc3QnKTtcbiAgICBhc3NlcnQub2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJyk7XG4gICAgYXNzZXJ0Lm9wdGlvbmFsU3RyaW5nKG9wdGlvbnMuYWxnb3JpdGhtLCAnb3B0aW9ucy5hbGdvcml0aG0nKTtcbiAgICBhc3NlcnQuc3RyaW5nKG9wdGlvbnMua2V5SWQsICdvcHRpb25zLmtleUlkJyk7XG4gICAgYXNzZXJ0Lm9wdGlvbmFsQXJyYXlPZlN0cmluZyhvcHRpb25zLmhlYWRlcnMsICdvcHRpb25zLmhlYWRlcnMnKTtcbiAgICBhc3NlcnQub3B0aW9uYWxTdHJpbmcob3B0aW9ucy5odHRwVmVyc2lvbiwgJ29wdGlvbnMuaHR0cFZlcnNpb24nKTtcblxuICAgIGlmICghcmVxdWVzdC5nZXRIZWFkZXIoJ0RhdGUnKSlcbiAgICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdEYXRlJywganNwcmltLnJmYzExMjMobmV3IERhdGUoKSkpO1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKVxuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gWydkYXRlJ107XG4gICAgaWYgKCFvcHRpb25zLmh0dHBWZXJzaW9uKVxuICAgICAgb3B0aW9ucy5odHRwVmVyc2lvbiA9ICcxLjEnO1xuXG4gICAgdmFyIGFsZyA9IFtdO1xuICAgIGlmIChvcHRpb25zLmFsZ29yaXRobSkge1xuICAgICAgb3B0aW9ucy5hbGdvcml0aG0gPSBvcHRpb25zLmFsZ29yaXRobS50b0xvd2VyQ2FzZSgpO1xuICAgICAgYWxnID0gdmFsaWRhdGVBbGdvcml0aG0ob3B0aW9ucy5hbGdvcml0aG0pO1xuICAgIH1cblxuICAgIHZhciBpO1xuICAgIHZhciBzdHJpbmdUb1NpZ24gPSAnJztcbiAgICBmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy5oZWFkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodHlwZW9mIChvcHRpb25zLmhlYWRlcnNbaV0pICE9PSAnc3RyaW5nJylcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9ucy5oZWFkZXJzIG11c3QgYmUgYW4gYXJyYXkgb2YgU3RyaW5ncycpO1xuXG4gICAgICB2YXIgaCA9IG9wdGlvbnMuaGVhZGVyc1tpXS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAoaCA9PT0gJ3JlcXVlc3QtbGluZScpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnN0cmljdCkge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFdlIGFsbG93IGhlYWRlcnMgZnJvbSB0aGUgb2xkZXIgc3BlYyBkcmFmdHMgaWYgc3RyaWN0IHBhcnNpbmcgaXNuJ3RcbiAgICAgICAgICAgKiBzcGVjaWZpZWQgaW4gb3B0aW9ucy5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBzdHJpbmdUb1NpZ24gKz1cbiAgICAgICAgICAgIHJlcXVlc3QubWV0aG9kICsgJyAnICsgcmVxdWVzdC5wYXRoICsgJyBIVFRQLycgK1xuICAgICAgICAgICAgb3B0aW9ucy5odHRwVmVyc2lvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvKiBTdHJpY3QgcGFyc2luZyBkb2Vzbid0IGFsbG93IG9sZGVyIGRyYWZ0IGhlYWRlcnMuICovXG4gICAgICAgICAgdGhyb3cgKG5ldyBTdHJpY3RQYXJzaW5nRXJyb3IoJ3JlcXVlc3QtbGluZSBpcyBub3QgYSB2YWxpZCBoZWFkZXIgJyArXG4gICAgICAgICAgICAnd2l0aCBzdHJpY3QgcGFyc2luZyBlbmFibGVkLicpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChoID09PSAnKHJlcXVlc3QtdGFyZ2V0KScpIHtcbiAgICAgICAgc3RyaW5nVG9TaWduICs9XG4gICAgICAgICAgJyhyZXF1ZXN0LXRhcmdldCk6ICcgKyByZXF1ZXN0Lm1ldGhvZC50b0xvd2VyQ2FzZSgpICsgJyAnICtcbiAgICAgICAgICByZXF1ZXN0LnBhdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdmFsdWUgPSByZXF1ZXN0LmdldEhlYWRlcihoKTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE1pc3NpbmdIZWFkZXJFcnJvcihoICsgJyB3YXMgbm90IGluIHRoZSByZXF1ZXN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyaW5nVG9TaWduICs9IGggKyAnOiAnICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaSArIDEpIDwgb3B0aW9ucy5oZWFkZXJzLmxlbmd0aClcbiAgICAgICAgc3RyaW5nVG9TaWduICs9ICdcXG4nO1xuICAgIH1cblxuICAgIC8qIFRoaXMgaXMganVzdCBmb3IgdW5pdCB0ZXN0cy4gKi9cbiAgICBpZiAocmVxdWVzdC5oYXNPd25Qcm9wZXJ0eSgnX3N0cmluZ1RvU2lnbicpKSB7XG4gICAgICByZXF1ZXN0Ll9zdHJpbmdUb1NpZ24gPSBzdHJpbmdUb1NpZ247XG4gICAgfVxuXG4gICAgdmFyIHNpZ25hdHVyZTtcbiAgICBpZiAoYWxnWzBdID09PSAnaG1hYycpIHtcbiAgICAgIGlmICh0eXBlb2YgKG9wdGlvbnMua2V5KSAhPT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0J1ZmZlcihvcHRpb25zLmtleSkpXG4gICAgICAgIHRocm93IChuZXcgVHlwZUVycm9yKCdvcHRpb25zLmtleSBtdXN0IGJlIGEgc3RyaW5nIG9yIEJ1ZmZlcicpKTtcblxuICAgICAgdmFyIGhtYWMgPSBjcnlwdG8uY3JlYXRlSG1hYyhhbGdbMV0udG9VcHBlckNhc2UoKSwgb3B0aW9ucy5rZXkpO1xuICAgICAgaG1hYy51cGRhdGUoc3RyaW5nVG9TaWduKTtcbiAgICAgIHNpZ25hdHVyZSA9IGhtYWMuZGlnZXN0KCdiYXNlNjQnKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgICBpZiAodHlwZW9mIChrZXkpID09PSAnc3RyaW5nJyB8fCBCdWZmZXIuaXNCdWZmZXIoa2V5KSlcbiAgICAgICAga2V5ID0gc3NocGsucGFyc2VQcml2YXRlS2V5KG9wdGlvbnMua2V5KTtcblxuICAgICAgYXNzZXJ0Lm9rKHNzaHBrLlByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSwgWzEsIDJdKSxcbiAgICAgICAgJ29wdGlvbnMua2V5IG11c3QgYmUgYSBzc2hway5Qcml2YXRlS2V5Jyk7XG5cbiAgICAgIGlmICghUEtfQUxHT1Nba2V5LnR5cGVdKSB7XG4gICAgICAgIHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKGtleS50eXBlLnRvVXBwZXJDYXNlKCkgKyAnIHR5cGUgJyArXG4gICAgICAgICAgJ2tleXMgYXJlIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGdbMF0gIT09IHVuZGVmaW5lZCAmJiBrZXkudHlwZSAhPT0gYWxnWzBdKSB7XG4gICAgICAgIHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKCdvcHRpb25zLmtleSBtdXN0IGJlIGEgJyArXG4gICAgICAgICAgYWxnWzBdLnRvVXBwZXJDYXNlKCkgKyAnIGtleSwgd2FzIGdpdmVuIGEgJyArXG4gICAgICAgICAga2V5LnR5cGUudG9VcHBlckNhc2UoKSArICcga2V5IGluc3RlYWQnKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaWduZXIgPSBrZXkuY3JlYXRlU2lnbihhbGdbMV0pO1xuICAgICAgc2lnbmVyLnVwZGF0ZShzdHJpbmdUb1NpZ24pO1xuICAgICAgdmFyIHNpZ09iaiA9IHNpZ25lci5zaWduKCk7XG4gICAgICBpZiAoIUhBU0hfQUxHT1Nbc2lnT2JqLmhhc2hBbGdvcml0aG1dKSB7XG4gICAgICAgIHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKHNpZ09iai5oYXNoQWxnb3JpdGhtLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgICAgICcgaXMgbm90IGEgc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtJykpO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5hbGdvcml0aG0gPSBrZXkudHlwZSArICctJyArIHNpZ09iai5oYXNoQWxnb3JpdGhtO1xuICAgICAgc2lnbmF0dXJlID0gc2lnT2JqLnRvU3RyaW5nKCk7XG4gICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoc2lnbmF0dXJlLCAnJywgJ2VtcHR5IHNpZ25hdHVyZSBwcm9kdWNlZCcpO1xuICAgIH1cblxuICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdBdXRob3JpemF0aW9uJywgc3ByaW50ZihBVVRIWl9GTVQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMua2V5SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWxnb3JpdGhtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMuam9pbignICcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUpKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxMiBKb3llbnQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIHNzaHBrID0gcmVxdWlyZSgnc3NocGsnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG52YXIgSEFTSF9BTEdPUyA9IHtcbiAgJ3NoYTEnOiB0cnVlLFxuICAnc2hhMjU2JzogdHJ1ZSxcbiAgJ3NoYTUxMic6IHRydWVcbn07XG5cbnZhciBQS19BTEdPUyA9IHtcbiAgJ3JzYSc6IHRydWUsXG4gICdkc2EnOiB0cnVlLFxuICAnZWNkc2EnOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBIdHRwU2lnbmF0dXJlRXJyb3IobWVzc2FnZSwgY2FsbGVyKSB7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBjYWxsZXIgfHwgSHR0cFNpZ25hdHVyZUVycm9yKTtcblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSBjYWxsZXIubmFtZTtcbn1cbnV0aWwuaW5oZXJpdHMoSHR0cFNpZ25hdHVyZUVycm9yLCBFcnJvcik7XG5cbmZ1bmN0aW9uIEludmFsaWRBbGdvcml0aG1FcnJvcihtZXNzYWdlKSB7XG4gIEh0dHBTaWduYXR1cmVFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UsIEludmFsaWRBbGdvcml0aG1FcnJvcik7XG59XG51dGlsLmluaGVyaXRzKEludmFsaWRBbGdvcml0aG1FcnJvciwgSHR0cFNpZ25hdHVyZUVycm9yKTtcblxuZnVuY3Rpb24gdmFsaWRhdGVBbGdvcml0aG0oYWxnb3JpdGhtKSB7XG4gIHZhciBhbGcgPSBhbGdvcml0aG0udG9Mb3dlckNhc2UoKS5zcGxpdCgnLScpO1xuXG4gIGlmIChhbGcubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgKG5ldyBJbnZhbGlkQWxnb3JpdGhtRXJyb3IoYWxnWzBdLnRvVXBwZXJDYXNlKCkgKyAnIGlzIG5vdCBhICcgK1xuICAgICAgJ3ZhbGlkIGFsZ29yaXRobScpKTtcbiAgfVxuXG4gIGlmIChhbGdbMF0gIT09ICdobWFjJyAmJiAhUEtfQUxHT1NbYWxnWzBdXSkge1xuICAgIHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKGFsZ1swXS50b1VwcGVyQ2FzZSgpICsgJyB0eXBlIGtleXMgJyArXG4gICAgICAnYXJlIG5vdCBzdXBwb3J0ZWQnKSk7XG4gIH1cblxuICBpZiAoIUhBU0hfQUxHT1NbYWxnWzFdXSkge1xuICAgIHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKGFsZ1sxXS50b1VwcGVyQ2FzZSgpICsgJyBpcyBub3QgYSAnICtcbiAgICAgICdzdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0nKSk7XG4gIH1cblxuICByZXR1cm4gKGFsZyk7XG59XG5cbi8vLy0tLSBBUElcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgSEFTSF9BTEdPUzogSEFTSF9BTEdPUyxcbiAgUEtfQUxHT1M6IFBLX0FMR09TLFxuXG4gIEh0dHBTaWduYXR1cmVFcnJvcjogSHR0cFNpZ25hdHVyZUVycm9yLFxuICBJbnZhbGlkQWxnb3JpdGhtRXJyb3I6IEludmFsaWRBbGdvcml0aG1FcnJvcixcblxuICB2YWxpZGF0ZUFsZ29yaXRobTogdmFsaWRhdGVBbGdvcml0aG0sXG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIE9wZW5TU0ggcHVibGljIGtleSAocnNhIG9ubHkpIHRvIGEgUEtDUyM4IFBFTSBmaWxlLlxuICAgKlxuICAgKiBUaGUgaW50ZW50IG9mIHRoaXMgbW9kdWxlIGlzIHRvIGludGVyb3BlcmF0ZSB3aXRoIE9wZW5TU0wgb25seSxcbiAgICogc3BlY2lmaWNhbGx5IHRoZSBub2RlIGNyeXB0byBtb2R1bGUncyBgdmVyaWZ5YCBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgYW4gT3BlblNTSCBwdWJsaWMga2V5LlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IFBFTSBlbmNvZGVkIGZvcm0gb2YgdGhlIFJTQSBwdWJsaWMga2V5LlxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG9uIGJhZCBpbnB1dC5cbiAgICogQHRocm93cyB7RXJyb3J9IG9uIGludmFsaWQgc3NoIGtleSBmb3JtYXR0ZWQgZGF0YS5cbiAgICovXG4gIHNzaEtleVRvUEVNOiBmdW5jdGlvbiBzc2hLZXlUb1BFTShrZXkpIHtcbiAgICBhc3NlcnQuc3RyaW5nKGtleSwgJ3NzaF9rZXknKTtcblxuICAgIHZhciBrID0gc3NocGsucGFyc2VLZXkoa2V5LCAnc3NoJyk7XG4gICAgcmV0dXJuIChrLnRvU3RyaW5nKCdwZW0nKSk7XG4gIH0sXG5cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIE9wZW5TU0ggZmluZ2VycHJpbnQgZnJvbSBhbiBzc2ggcHVibGljIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGtleSBhbiBPcGVuU1NIIHB1YmxpYyBrZXkuXG4gICAqIEByZXR1cm4ge1N0cmluZ30ga2V5IGZpbmdlcnByaW50LlxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG9uIGJhZCBpbnB1dC5cbiAgICogQHRocm93cyB7RXJyb3J9IGlmIHdoYXQgeW91IHBhc3NlZCBkb2Vzbid0IGxvb2sgbGlrZSBhbiBzc2ggcHVibGljIGtleS5cbiAgICovXG4gIGZpbmdlcnByaW50OiBmdW5jdGlvbiBmaW5nZXJwcmludChrZXkpIHtcbiAgICBhc3NlcnQuc3RyaW5nKGtleSwgJ3NzaF9rZXknKTtcblxuICAgIHZhciBrID0gc3NocGsucGFyc2VLZXkoa2V5LCAnc3NoJyk7XG4gICAgcmV0dXJuIChrLmZpbmdlcnByaW50KCdtZDUnKS50b1N0cmluZygnaGV4JykpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIFBLR0NTIzggUEVNIGZpbGUgdG8gYW4gT3BlblNTSCBwdWJsaWMga2V5IChyc2EpXG4gICAqXG4gICAqIFRoZSByZXZlcnNlIG9mIHRoZSBhYm92ZSBmdW5jdGlvbi5cbiAgICovXG4gIHBlbVRvUnNhU1NIS2V5OiBmdW5jdGlvbiBwZW1Ub1JzYVNTSEtleShwZW0sIGNvbW1lbnQpIHtcbiAgICBhc3NlcnQuZXF1YWwoJ3N0cmluZycsIHR5cGVvZiAocGVtKSwgJ3R5cGVvZiBwZW0nKTtcblxuICAgIHZhciBrID0gc3NocGsucGFyc2VLZXkocGVtLCAncGVtJyk7XG4gICAgay5jb21tZW50ID0gY29tbWVudDtcbiAgICByZXR1cm4gKGsudG9TdHJpbmcoJ3NzaCcpKTtcbiAgfVxufTtcbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBzc2hwayA9IHJlcXVpcmUoJ3NzaHBrJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbnZhciBIQVNIX0FMR09TID0gdXRpbHMuSEFTSF9BTEdPUztcbnZhciBQS19BTEdPUyA9IHV0aWxzLlBLX0FMR09TO1xudmFyIEludmFsaWRBbGdvcml0aG1FcnJvciA9IHV0aWxzLkludmFsaWRBbGdvcml0aG1FcnJvcjtcbnZhciBIdHRwU2lnbmF0dXJlRXJyb3IgPSB1dGlscy5IdHRwU2lnbmF0dXJlRXJyb3I7XG52YXIgdmFsaWRhdGVBbGdvcml0aG0gPSB1dGlscy52YWxpZGF0ZUFsZ29yaXRobTtcblxuLy8vLS0tIEV4cG9ydGVkIEFQSVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLyoqXG4gICAqIFZlcmlmeSBSU0EvRFNBIHNpZ25hdHVyZSBhZ2FpbnN0IHB1YmxpYyBrZXkuICBZb3UgYXJlIGV4cGVjdGVkIHRvIHBhc3MgaW5cbiAgICogYW4gb2JqZWN0IHRoYXQgd2FzIHJldHVybmVkIGZyb20gYHBhcnNlKClgLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyc2VkU2lnbmF0dXJlIHRoZSBvYmplY3QgeW91IGdvdCBmcm9tIGBwYXJzZWAuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwdWJrZXkgUlNBL0RTQSBwcml2YXRlIGtleSBQRU0uXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSBpZiB5b3UgcGFzcyBpbiBiYWQgYXJndW1lbnRzLlxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWxnb3JpdGhtRXJyb3J9XG4gICAqL1xuICB2ZXJpZnlTaWduYXR1cmU6IGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZShwYXJzZWRTaWduYXR1cmUsIHB1YmtleSkge1xuICAgIGFzc2VydC5vYmplY3QocGFyc2VkU2lnbmF0dXJlLCAncGFyc2VkU2lnbmF0dXJlJyk7XG4gICAgaWYgKHR5cGVvZiAocHVia2V5KSA9PT0gJ3N0cmluZycgfHwgQnVmZmVyLmlzQnVmZmVyKHB1YmtleSkpXG4gICAgICBwdWJrZXkgPSBzc2hway5wYXJzZUtleShwdWJrZXkpO1xuICAgIGFzc2VydC5vayhzc2hway5LZXkuaXNLZXkocHVia2V5LCBbMSwgMV0pLCAncHVia2V5IG11c3QgYmUgYSBzc2hway5LZXknKTtcblxuICAgIHZhciBhbGcgPSB2YWxpZGF0ZUFsZ29yaXRobShwYXJzZWRTaWduYXR1cmUuYWxnb3JpdGhtKTtcbiAgICBpZiAoYWxnWzBdID09PSAnaG1hYycgfHwgYWxnWzBdICE9PSBwdWJrZXkudHlwZSlcbiAgICAgIHJldHVybiAoZmFsc2UpO1xuXG4gICAgdmFyIHYgPSBwdWJrZXkuY3JlYXRlVmVyaWZ5KGFsZ1sxXSk7XG4gICAgdi51cGRhdGUocGFyc2VkU2lnbmF0dXJlLnNpZ25pbmdTdHJpbmcpO1xuICAgIHJldHVybiAodi52ZXJpZnkocGFyc2VkU2lnbmF0dXJlLnBhcmFtcy5zaWduYXR1cmUsICdiYXNlNjQnKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFZlcmlmeSBITUFDIGFnYWluc3Qgc2hhcmVkIHNlY3JldC4gIFlvdSBhcmUgZXhwZWN0ZWQgdG8gcGFzcyBpbiBhbiBvYmplY3RcbiAgICogdGhhdCB3YXMgcmV0dXJuZWQgZnJvbSBgcGFyc2UoKWAuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJzZWRTaWduYXR1cmUgdGhlIG9iamVjdCB5b3UgZ290IGZyb20gYHBhcnNlYC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlY3JldCBITUFDIHNoYXJlZCBzZWNyZXQuXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSBpZiB5b3UgcGFzcyBpbiBiYWQgYXJndW1lbnRzLlxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWxnb3JpdGhtRXJyb3J9XG4gICAqL1xuICB2ZXJpZnlITUFDOiBmdW5jdGlvbiB2ZXJpZnlITUFDKHBhcnNlZFNpZ25hdHVyZSwgc2VjcmV0KSB7XG4gICAgYXNzZXJ0Lm9iamVjdChwYXJzZWRTaWduYXR1cmUsICdwYXJzZWRITUFDJyk7XG4gICAgYXNzZXJ0LnN0cmluZyhzZWNyZXQsICdzZWNyZXQnKTtcblxuICAgIHZhciBhbGcgPSB2YWxpZGF0ZUFsZ29yaXRobShwYXJzZWRTaWduYXR1cmUuYWxnb3JpdGhtKTtcbiAgICBpZiAoYWxnWzBdICE9PSAnaG1hYycpXG4gICAgICByZXR1cm4gKGZhbHNlKTtcblxuICAgIHZhciBoYXNoQWxnID0gYWxnWzFdLnRvVXBwZXJDYXNlKCk7XG5cbiAgICB2YXIgaG1hYyA9IGNyeXB0by5jcmVhdGVIbWFjKGhhc2hBbGcsIHNlY3JldCk7XG4gICAgaG1hYy51cGRhdGUocGFyc2VkU2lnbmF0dXJlLnNpZ25pbmdTdHJpbmcpO1xuXG4gICAgLypcbiAgICAgKiBOb3cgZG91YmxlLWhhc2ggdG8gYXZvaWQgbGVha2luZyB0aW1pbmcgaW5mb3JtYXRpb24gLSB0aGVyZSdzXG4gICAgICogbm8gZWFzeSBjb25zdGFudC10aW1lIGNvbXBhcmUgaW4gSlMsIHNvIHdlIHVzZSB0aGlzIGFwcHJvYWNoXG4gICAgICogaW5zdGVhZC4gU2VlIGZvciBtb3JlIGluZm86XG4gICAgICogaHR0cHM6Ly93d3cuaXNlY3BhcnRuZXJzLmNvbS9ibG9nLzIwMTEvZmVicnVhcnkvZG91YmxlLWhtYWMtXG4gICAgICogdmVyaWZpY2F0aW9uLmFzcHhcbiAgICAgKi9cbiAgICB2YXIgaDEgPSBjcnlwdG8uY3JlYXRlSG1hYyhoYXNoQWxnLCBzZWNyZXQpO1xuICAgIGgxLnVwZGF0ZShobWFjLmRpZ2VzdCgpKTtcbiAgICBoMSA9IGgxLmRpZ2VzdCgpO1xuICAgIHZhciBoMiA9IGNyeXB0by5jcmVhdGVIbWFjKGhhc2hBbGcsIHNlY3JldCk7XG4gICAgaDIudXBkYXRlKG5ldyBCdWZmZXIocGFyc2VkU2lnbmF0dXJlLnBhcmFtcy5zaWduYXR1cmUsICdiYXNlNjQnKSk7XG4gICAgaDIgPSBoMi5kaWdlc3QoKTtcblxuICAgIC8qIE5vZGUgMC44IHJldHVybnMgc3RyaW5ncyBmcm9tIC5kaWdlc3QoKS4gKi9cbiAgICBpZiAodHlwZW9mIChoMSkgPT09ICdzdHJpbmcnKVxuICAgICAgcmV0dXJuIChoMSA9PT0gaDIpO1xuICAgIC8qIEFuZCBub2RlIDAuMTAgbGFja3MgdGhlIC5lcXVhbHMoKSBtZXRob2Qgb24gQnVmZmVycy4gKi9cbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGgxKSAmJiAhaDEuZXF1YWxzKVxuICAgICAgcmV0dXJuIChoMS50b1N0cmluZygnYmluYXJ5JykgPT09IGgyLnRvU3RyaW5nKCdiaW5hcnknKSk7XG5cbiAgICByZXR1cm4gKGgxLmVxdWFscyhoMikpO1xuICB9XG59O1xuIiwidmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJylcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKVxuXG52YXIgaHR0cHMgPSBtb2R1bGUuZXhwb3J0c1xuXG5mb3IgKHZhciBrZXkgaW4gaHR0cCkge1xuICBpZiAoaHR0cC5oYXNPd25Qcm9wZXJ0eShrZXkpKSBodHRwc1trZXldID0gaHR0cFtrZXldXG59XG5cbmh0dHBzLnJlcXVlc3QgPSBmdW5jdGlvbiAocGFyYW1zLCBjYikge1xuICBwYXJhbXMgPSB2YWxpZGF0ZVBhcmFtcyhwYXJhbXMpXG4gIHJldHVybiBodHRwLnJlcXVlc3QuY2FsbCh0aGlzLCBwYXJhbXMsIGNiKVxufVxuXG5odHRwcy5nZXQgPSBmdW5jdGlvbiAocGFyYW1zLCBjYikge1xuICBwYXJhbXMgPSB2YWxpZGF0ZVBhcmFtcyhwYXJhbXMpXG4gIHJldHVybiBodHRwLmdldC5jYWxsKHRoaXMsIHBhcmFtcywgY2IpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUGFyYW1zIChwYXJhbXMpIHtcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFyYW1zID0gdXJsLnBhcnNlKHBhcmFtcylcbiAgfVxuICBpZiAoIXBhcmFtcy5wcm90b2NvbCkge1xuICAgIHBhcmFtcy5wcm90b2NvbCA9ICdodHRwczonXG4gIH1cbiAgaWYgKHBhcmFtcy5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3RvY29sIFwiJyArIHBhcmFtcy5wcm90b2NvbCArICdcIiBub3Qgc3VwcG9ydGVkLiBFeHBlY3RlZCBcImh0dHBzOlwiJylcbiAgfVxuICByZXR1cm4gcGFyYW1zXG59XG4iLCJcInVzZSBzdHJpY3RcIlxuXG4vLyBNdWx0aWJ5dGUgY29kZWMuIEluIHRoaXMgc2NoZW1lLCBhIGNoYXJhY3RlciBpcyByZXByZXNlbnRlZCBieSAxIG9yIG1vcmUgYnl0ZXMuXG4vLyBPdXIgY29kZWMgc3VwcG9ydHMgVVRGLTE2IHN1cnJvZ2F0ZXMsIGV4dGVuc2lvbnMgZm9yIEdCMTgwMzAgYW5kIHVuaWNvZGUgc2VxdWVuY2VzLlxuLy8gVG8gc2F2ZSBtZW1vcnkgYW5kIGxvYWRpbmcgdGltZSwgd2UgcmVhZCB0YWJsZSBmaWxlcyBvbmx5IHdoZW4gcmVxdWVzdGVkLlxuXG5leHBvcnRzLl9kYmNzID0gREJDU0NvZGVjO1xuXG52YXIgVU5BU1NJR05FRCA9IC0xLFxuICAgIEdCMTgwMzBfQ09ERSA9IC0yLFxuICAgIFNFUV9TVEFSVCAgPSAtMTAsXG4gICAgTk9ERV9TVEFSVCA9IC0xMDAwLFxuICAgIFVOQVNTSUdORURfTk9ERSA9IG5ldyBBcnJheSgweDEwMCksXG4gICAgREVGX0NIQVIgPSAtMTtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCAweDEwMDsgaSsrKVxuICAgIFVOQVNTSUdORURfTk9ERVtpXSA9IFVOQVNTSUdORUQ7XG5cblxuLy8gQ2xhc3MgREJDU0NvZGVjIHJlYWRzIGFuZCBpbml0aWFsaXplcyBtYXBwaW5nIHRhYmxlcy5cbmZ1bmN0aW9uIERCQ1NDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5lbmNvZGluZ05hbWUgPSBjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lO1xuICAgIGlmICghY29kZWNPcHRpb25zKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEQkNTIGNvZGVjIGlzIGNhbGxlZCB3aXRob3V0IHRoZSBkYXRhLlwiKVxuICAgIGlmICghY29kZWNPcHRpb25zLnRhYmxlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvZGluZyAnXCIgKyB0aGlzLmVuY29kaW5nTmFtZSArIFwiJyBoYXMgbm8gZGF0YS5cIik7XG5cbiAgICAvLyBMb2FkIHRhYmxlcy5cbiAgICB2YXIgbWFwcGluZ1RhYmxlID0gY29kZWNPcHRpb25zLnRhYmxlKCk7XG5cblxuICAgIC8vIERlY29kZSB0YWJsZXM6IE1CQ1MgLT4gVW5pY29kZS5cblxuICAgIC8vIGRlY29kZVRhYmxlcyBpcyBhIHRyaWUsIGVuY29kZWQgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIG9mIGludGVnZXJzLiBJbnRlcm5hbCBhcnJheXMgYXJlIHRyaWUgbm9kZXMgYW5kIGFsbCBoYXZlIGxlbiA9IDI1Ni5cbiAgICAvLyBUcmllIHJvb3QgaXMgZGVjb2RlVGFibGVzWzBdLlxuICAgIC8vIFZhbHVlczogPj0gIDAgLT4gdW5pY29kZSBjaGFyYWN0ZXIgY29kZS4gY2FuIGJlID4gMHhGRkZGXG4gICAgLy8gICAgICAgICA9PSBVTkFTU0lHTkVEIC0+IHVua25vd24vdW5hc3NpZ25lZCBzZXF1ZW5jZS5cbiAgICAvLyAgICAgICAgID09IEdCMTgwMzBfQ09ERSAtPiB0aGlzIGlzIHRoZSBlbmQgb2YgYSBHQjE4MDMwIDQtYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyAgICAgICAgIDw9IE5PREVfU1RBUlQgLT4gaW5kZXggb2YgdGhlIG5leHQgbm9kZSBpbiBvdXIgdHJpZSB0byBwcm9jZXNzIG5leHQgYnl0ZS5cbiAgICAvLyAgICAgICAgIDw9IFNFUV9TVEFSVCAgLT4gaW5kZXggb2YgdGhlIHN0YXJ0IG9mIGEgY2hhcmFjdGVyIGNvZGUgc2VxdWVuY2UsIGluIGRlY29kZVRhYmxlU2VxLlxuICAgIHRoaXMuZGVjb2RlVGFibGVzID0gW107XG4gICAgdGhpcy5kZWNvZGVUYWJsZXNbMF0gPSBVTkFTU0lHTkVEX05PREUuc2xpY2UoMCk7IC8vIENyZWF0ZSByb290IG5vZGUuXG5cbiAgICAvLyBTb21ldGltZXMgYSBNQkNTIGNoYXIgY29ycmVzcG9uZHMgdG8gYSBzZXF1ZW5jZSBvZiB1bmljb2RlIGNoYXJzLiBXZSBzdG9yZSB0aGVtIGFzIGFycmF5cyBvZiBpbnRlZ2VycyBoZXJlLiBcbiAgICB0aGlzLmRlY29kZVRhYmxlU2VxID0gW107XG5cbiAgICAvLyBBY3R1YWwgbWFwcGluZyB0YWJsZXMgY29uc2lzdCBvZiBjaHVua3MuIFVzZSB0aGVtIHRvIGZpbGwgdXAgZGVjb2RlIHRhYmxlcy5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcHBpbmdUYWJsZS5sZW5ndGg7IGkrKylcbiAgICAgICAgdGhpcy5fYWRkRGVjb2RlQ2h1bmsobWFwcGluZ1RhYmxlW2ldKTtcblxuICAgIHRoaXMuZGVmYXVsdENoYXJVbmljb2RlID0gaWNvbnYuZGVmYXVsdENoYXJVbmljb2RlO1xuXG4gICAgXG4gICAgLy8gRW5jb2RlIHRhYmxlczogVW5pY29kZSAtPiBEQkNTLlxuXG4gICAgLy8gYGVuY29kZVRhYmxlYCBpcyBhcnJheSBtYXBwaW5nIGZyb20gdW5pY29kZSBjaGFyIHRvIGVuY29kZWQgY2hhci4gQWxsIGl0cyB2YWx1ZXMgYXJlIGludGVnZXJzIGZvciBwZXJmb3JtYW5jZS5cbiAgICAvLyBCZWNhdXNlIGl0IGNhbiBiZSBzcGFyc2UsIGl0IGlzIHJlcHJlc2VudGVkIGFzIGFycmF5IG9mIGJ1Y2tldHMgYnkgMjU2IGNoYXJzIGVhY2guIEJ1Y2tldCBjYW4gYmUgbnVsbC5cbiAgICAvLyBWYWx1ZXM6ID49ICAwIC0+IGl0IGlzIGEgbm9ybWFsIGNoYXIuIFdyaXRlIHRoZSB2YWx1ZSAoaWYgPD0yNTYgdGhlbiAxIGJ5dGUsIGlmIDw9NjU1MzYgdGhlbiAyIGJ5dGVzLCBldGMuKS5cbiAgICAvLyAgICAgICAgID09IFVOQVNTSUdORUQgLT4gbm8gY29udmVyc2lvbiBmb3VuZC4gT3V0cHV0IGEgZGVmYXVsdCBjaGFyLlxuICAgIC8vICAgICAgICAgPD0gU0VRX1NUQVJUICAtPiBpdCdzIGFuIGluZGV4IGluIGVuY29kZVRhYmxlU2VxLCBzZWUgYmVsb3cuIFRoZSBjaGFyYWN0ZXIgc3RhcnRzIGEgc2VxdWVuY2UuXG4gICAgdGhpcy5lbmNvZGVUYWJsZSA9IFtdO1xuICAgIFxuICAgIC8vIGBlbmNvZGVUYWJsZVNlcWAgaXMgdXNlZCB3aGVuIGEgc2VxdWVuY2Ugb2YgdW5pY29kZSBjaGFyYWN0ZXJzIGlzIGVuY29kZWQgYXMgYSBzaW5nbGUgY29kZS4gV2UgdXNlIGEgdHJlZSBvZlxuICAgIC8vIG9iamVjdHMgd2hlcmUga2V5cyBjb3JyZXNwb25kIHRvIGNoYXJhY3RlcnMgaW4gc2VxdWVuY2UgYW5kIGxlYWZzIGFyZSB0aGUgZW5jb2RlZCBkYmNzIHZhbHVlcy4gQSBzcGVjaWFsIERFRl9DSEFSIGtleVxuICAgIC8vIG1lYW5zIGVuZCBvZiBzZXF1ZW5jZSAobmVlZGVkIHdoZW4gb25lIHNlcXVlbmNlIGlzIGEgc3RyaWN0IHN1YnNlcXVlbmNlIG9mIGFub3RoZXIpLlxuICAgIC8vIE9iamVjdHMgYXJlIGtlcHQgc2VwYXJhdGVseSBmcm9tIGVuY29kZVRhYmxlIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlLlxuICAgIHRoaXMuZW5jb2RlVGFibGVTZXEgPSBbXTtcblxuICAgIC8vIFNvbWUgY2hhcnMgY2FuIGJlIGRlY29kZWQsIGJ1dCBuZWVkIG5vdCBiZSBlbmNvZGVkLlxuICAgIHZhciBza2lwRW5jb2RlQ2hhcnMgPSB7fTtcbiAgICBpZiAoY29kZWNPcHRpb25zLmVuY29kZVNraXBWYWxzKVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVjT3B0aW9ucy5lbmNvZGVTa2lwVmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHZhbCA9IGNvZGVjT3B0aW9ucy5lbmNvZGVTa2lwVmFsc1tpXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICBza2lwRW5jb2RlQ2hhcnNbdmFsXSA9IHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IHZhbC5mcm9tOyBqIDw9IHZhbC50bzsgaisrKVxuICAgICAgICAgICAgICAgICAgICBza2lwRW5jb2RlQ2hhcnNbal0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgIC8vIFVzZSBkZWNvZGUgdHJpZSB0byByZWN1cnNpdmVseSBmaWxsIG91dCBlbmNvZGUgdGFibGVzLlxuICAgIHRoaXMuX2ZpbGxFbmNvZGVUYWJsZSgwLCAwLCBza2lwRW5jb2RlQ2hhcnMpO1xuXG4gICAgLy8gQWRkIG1vcmUgZW5jb2RpbmcgcGFpcnMgd2hlbiBuZWVkZWQuXG4gICAgaWYgKGNvZGVjT3B0aW9ucy5lbmNvZGVBZGQpIHtcbiAgICAgICAgZm9yICh2YXIgdUNoYXIgaW4gY29kZWNPcHRpb25zLmVuY29kZUFkZClcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29kZWNPcHRpb25zLmVuY29kZUFkZCwgdUNoYXIpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEVuY29kZUNoYXIodUNoYXIuY2hhckNvZGVBdCgwKSwgY29kZWNPcHRpb25zLmVuY29kZUFkZFt1Q2hhcl0pO1xuICAgIH1cblxuICAgIHRoaXMuZGVmQ2hhclNCICA9IHRoaXMuZW5jb2RlVGFibGVbMF1baWNvbnYuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCldO1xuICAgIGlmICh0aGlzLmRlZkNoYXJTQiA9PT0gVU5BU1NJR05FRCkgdGhpcy5kZWZDaGFyU0IgPSB0aGlzLmVuY29kZVRhYmxlWzBdWyc/J107XG4gICAgaWYgKHRoaXMuZGVmQ2hhclNCID09PSBVTkFTU0lHTkVEKSB0aGlzLmRlZkNoYXJTQiA9IFwiP1wiLmNoYXJDb2RlQXQoMCk7XG5cblxuICAgIC8vIExvYWQgJiBjcmVhdGUgR0IxODAzMCB0YWJsZXMgd2hlbiBuZWVkZWQuXG4gICAgaWYgKHR5cGVvZiBjb2RlY09wdGlvbnMuZ2IxODAzMCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmdiMTgwMzAgPSBjb2RlY09wdGlvbnMuZ2IxODAzMCgpOyAvLyBMb2FkIEdCMTgwMzAgcmFuZ2VzLlxuXG4gICAgICAgIC8vIEFkZCBHQjE4MDMwIGRlY29kZSB0YWJsZXMuXG4gICAgICAgIHZhciB0aGlyZEJ5dGVOb2RlSWR4ID0gdGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoO1xuICAgICAgICB2YXIgdGhpcmRCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW3RoaXJkQnl0ZU5vZGVJZHhdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApO1xuXG4gICAgICAgIHZhciBmb3VydGhCeXRlTm9kZUlkeCA9IHRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aDtcbiAgICAgICAgdmFyIGZvdXJ0aEJ5dGVOb2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbZm91cnRoQnl0ZU5vZGVJZHhdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAweDgxOyBpIDw9IDB4RkU7IGkrKykge1xuICAgICAgICAgICAgdmFyIHNlY29uZEJ5dGVOb2RlSWR4ID0gTk9ERV9TVEFSVCAtIHRoaXMuZGVjb2RlVGFibGVzWzBdW2ldO1xuICAgICAgICAgICAgdmFyIHNlY29uZEJ5dGVOb2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbc2Vjb25kQnl0ZU5vZGVJZHhdO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDB4MzA7IGogPD0gMHgzOTsgaisrKVxuICAgICAgICAgICAgICAgIHNlY29uZEJ5dGVOb2RlW2pdID0gTk9ERV9TVEFSVCAtIHRoaXJkQnl0ZU5vZGVJZHg7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDB4ODE7IGkgPD0gMHhGRTsgaSsrKVxuICAgICAgICAgICAgdGhpcmRCeXRlTm9kZVtpXSA9IE5PREVfU1RBUlQgLSBmb3VydGhCeXRlTm9kZUlkeDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDB4MzA7IGkgPD0gMHgzOTsgaSsrKVxuICAgICAgICAgICAgZm91cnRoQnl0ZU5vZGVbaV0gPSBHQjE4MDMwX0NPREVcbiAgICB9ICAgICAgICBcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gREJDU0VuY29kZXI7XG5EQkNTQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBEQkNTRGVjb2RlcjtcblxuLy8gRGVjb2RlciBoZWxwZXJzXG5EQkNTQ29kZWMucHJvdG90eXBlLl9nZXREZWNvZGVUcmllTm9kZSA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgICB2YXIgYnl0ZXMgPSBbXTtcbiAgICBmb3IgKDsgYWRkciA+IDA7IGFkZHIgPj49IDgpXG4gICAgICAgIGJ5dGVzLnB1c2goYWRkciAmIDB4RkYpO1xuICAgIGlmIChieXRlcy5sZW5ndGggPT0gMClcbiAgICAgICAgYnl0ZXMucHVzaCgwKTtcblxuICAgIHZhciBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbMF07XG4gICAgZm9yICh2YXIgaSA9IGJ5dGVzLmxlbmd0aC0xOyBpID4gMDsgaS0tKSB7IC8vIFRyYXZlcnNlIG5vZGVzIGRlZXBlciBpbnRvIHRoZSB0cmllLlxuICAgICAgICB2YXIgdmFsID0gbm9kZVtieXRlc1tpXV07XG5cbiAgICAgICAgaWYgKHZhbCA9PSBVTkFTU0lHTkVEKSB7IC8vIENyZWF0ZSBuZXcgbm9kZS5cbiAgICAgICAgICAgIG5vZGVbYnl0ZXNbaV1dID0gTk9ERV9TVEFSVCAtIHRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuZGVjb2RlVGFibGVzLnB1c2gobm9kZSA9IFVOQVNTSUdORURfTk9ERS5zbGljZSgwKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsIDw9IE5PREVfU1RBUlQpIHsgLy8gRXhpc3Rpbmcgbm9kZS5cbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1tOT0RFX1NUQVJUIC0gdmFsXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPdmVyd3JpdGUgYnl0ZSBpbiBcIiArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIsIGFkZHI6IFwiICsgYWRkci50b1N0cmluZygxNikpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn1cblxuXG5EQkNTQ29kZWMucHJvdG90eXBlLl9hZGREZWNvZGVDaHVuayA9IGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgLy8gRmlyc3QgZWxlbWVudCBvZiBjaHVuayBpcyB0aGUgaGV4IG1iY3MgY29kZSB3aGVyZSB3ZSBzdGFydC5cbiAgICB2YXIgY3VyQWRkciA9IHBhcnNlSW50KGNodW5rWzBdLCAxNik7XG5cbiAgICAvLyBDaG9vc2UgdGhlIGRlY29kaW5nIG5vZGUgd2hlcmUgd2UnbGwgd3JpdGUgb3VyIGNoYXJzLlxuICAgIHZhciB3cml0ZVRhYmxlID0gdGhpcy5fZ2V0RGVjb2RlVHJpZU5vZGUoY3VyQWRkcik7XG4gICAgY3VyQWRkciA9IGN1ckFkZHIgJiAweEZGO1xuXG4gICAgLy8gV3JpdGUgYWxsIG90aGVyIGVsZW1lbnRzIG9mIHRoZSBjaHVuayB0byB0aGUgdGFibGUuXG4gICAgZm9yICh2YXIgayA9IDE7IGsgPCBjaHVuay5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgcGFydCA9IGNodW5rW2tdO1xuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHsgLy8gU3RyaW5nLCB3cml0ZSBhcy1pcy5cbiAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgcGFydC5sZW5ndGg7KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBwYXJ0LmNoYXJDb2RlQXQobCsrKTtcbiAgICAgICAgICAgICAgICBpZiAoMHhEODAwIDw9IGNvZGUgJiYgY29kZSA8IDB4REMwMCkgeyAvLyBEZWNvZGUgc3Vycm9nYXRlXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2RlVHJhaWwgPSBwYXJ0LmNoYXJDb2RlQXQobCsrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKDB4REMwMCA8PSBjb2RlVHJhaWwgJiYgY29kZVRyYWlsIDwgMHhFMDAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVUYWJsZVtjdXJBZGRyKytdID0gMHgxMDAwMCArIChjb2RlIC0gMHhEODAwKSAqIDB4NDAwICsgKGNvZGVUcmFpbCAtIDB4REMwMCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCBzdXJyb2dhdGUgcGFpciBpbiBcIiAgKyB0aGlzLmVuY29kaW5nTmFtZSArIFwiIGF0IGNodW5rIFwiICsgY2h1bmtbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgweDBGRjAgPCBjb2RlICYmIGNvZGUgPD0gMHgwRkZGKSB7IC8vIENoYXJhY3RlciBzZXF1ZW5jZSAob3VyIG93biBlbmNvZGluZyB1c2VkKVxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuID0gMHhGRkYgLSBjb2RlICsgMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IGxlbjsgbSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxLnB1c2gocGFydC5jaGFyQ29kZUF0KGwrKykpOyAvLyBTaW1wbGUgdmFyaWF0aW9uOiBkb24ndCBzdXBwb3J0IHN1cnJvZ2F0ZXMgb3Igc3Vic2VxdWVuY2VzIGluIHNlcS5cblxuICAgICAgICAgICAgICAgICAgICB3cml0ZVRhYmxlW2N1ckFkZHIrK10gPSBTRVFfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlU2VxLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVUYWJsZVNlcS5wdXNoKHNlcSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVUYWJsZVtjdXJBZGRyKytdID0gY29kZTsgLy8gQmFzaWMgY2hhclxuICAgICAgICAgICAgfVxuICAgICAgICB9IFxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGFydCA9PT0gXCJudW1iZXJcIikgeyAvLyBJbnRlZ2VyLCBtZWFuaW5nIGluY3JlYXNpbmcgc2VxdWVuY2Ugc3RhcnRpbmcgd2l0aCBwcmV2IGNoYXJhY3Rlci5cbiAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IHdyaXRlVGFibGVbY3VyQWRkciAtIDFdICsgMTtcbiAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgcGFydDsgbCsrKVxuICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IGNoYXJDb2RlKys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IHR5cGUgJ1wiICsgdHlwZW9mIHBhcnQgKyBcIicgZ2l2ZW4gaW4gXCIgICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIiBhdCBjaHVuayBcIiArIGNodW5rWzBdKTtcbiAgICB9XG4gICAgaWYgKGN1ckFkZHIgPiAweEZGKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3QgY2h1bmsgaW4gXCIgICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIiBhdCBhZGRyIFwiICsgY2h1bmtbMF0gKyBcIjogdG9vIGxvbmdcIiArIGN1ckFkZHIpO1xufVxuXG4vLyBFbmNvZGVyIGhlbHBlcnNcbkRCQ1NDb2RlYy5wcm90b3R5cGUuX2dldEVuY29kZUJ1Y2tldCA9IGZ1bmN0aW9uKHVDb2RlKSB7XG4gICAgdmFyIGhpZ2ggPSB1Q29kZSA+PiA4OyAvLyBUaGlzIGNvdWxkIGJlID4gMHhGRiBiZWNhdXNlIG9mIGFzdHJhbCBjaGFyYWN0ZXJzLlxuICAgIGlmICh0aGlzLmVuY29kZVRhYmxlW2hpZ2hdID09PSB1bmRlZmluZWQpXG4gICAgICAgIHRoaXMuZW5jb2RlVGFibGVbaGlnaF0gPSBVTkFTU0lHTkVEX05PREUuc2xpY2UoMCk7IC8vIENyZWF0ZSBidWNrZXQgb24gZGVtYW5kLlxuICAgIHJldHVybiB0aGlzLmVuY29kZVRhYmxlW2hpZ2hdO1xufVxuXG5EQkNTQ29kZWMucHJvdG90eXBlLl9zZXRFbmNvZGVDaGFyID0gZnVuY3Rpb24odUNvZGUsIGRiY3NDb2RlKSB7XG4gICAgdmFyIGJ1Y2tldCA9IHRoaXMuX2dldEVuY29kZUJ1Y2tldCh1Q29kZSk7XG4gICAgdmFyIGxvdyA9IHVDb2RlICYgMHhGRjtcbiAgICBpZiAoYnVja2V0W2xvd10gPD0gU0VRX1NUQVJUKVxuICAgICAgICB0aGlzLmVuY29kZVRhYmxlU2VxW1NFUV9TVEFSVC1idWNrZXRbbG93XV1bREVGX0NIQVJdID0gZGJjc0NvZGU7IC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHNlcXVlbmNlLCBzZXQgYSBzaW5nbGUtY2hhciBzdWJzZXF1ZW5jZSBvZiBpdC5cbiAgICBlbHNlIGlmIChidWNrZXRbbG93XSA9PSBVTkFTU0lHTkVEKVxuICAgICAgICBidWNrZXRbbG93XSA9IGRiY3NDb2RlO1xufVxuXG5EQkNTQ29kZWMucHJvdG90eXBlLl9zZXRFbmNvZGVTZXF1ZW5jZSA9IGZ1bmN0aW9uKHNlcSwgZGJjc0NvZGUpIHtcbiAgICBcbiAgICAvLyBHZXQgdGhlIHJvb3Qgb2YgY2hhcmFjdGVyIHRyZWUgYWNjb3JkaW5nIHRvIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc2VxdWVuY2UuXG4gICAgdmFyIHVDb2RlID0gc2VxWzBdO1xuICAgIHZhciBidWNrZXQgPSB0aGlzLl9nZXRFbmNvZGVCdWNrZXQodUNvZGUpO1xuICAgIHZhciBsb3cgPSB1Q29kZSAmIDB4RkY7XG5cbiAgICB2YXIgbm9kZTtcbiAgICBpZiAoYnVja2V0W2xvd10gPD0gU0VRX1NUQVJUKSB7XG4gICAgICAgIC8vIFRoZXJlJ3MgYWxyZWFkeSBhIHNlcXVlbmNlIHdpdGggIC0gdXNlIGl0LlxuICAgICAgICBub2RlID0gdGhpcy5lbmNvZGVUYWJsZVNlcVtTRVFfU1RBUlQtYnVja2V0W2xvd11dO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgd2FzIG5vIHNlcXVlbmNlIG9iamVjdCAtIGFsbG9jYXRlIGEgbmV3IG9uZS5cbiAgICAgICAgbm9kZSA9IHt9O1xuICAgICAgICBpZiAoYnVja2V0W2xvd10gIT09IFVOQVNTSUdORUQpIG5vZGVbREVGX0NIQVJdID0gYnVja2V0W2xvd107IC8vIElmIGEgY2hhciB3YXMgc2V0IGJlZm9yZSAtIG1ha2UgaXQgYSBzaW5nbGUtY2hhciBzdWJzZXF1ZW5jZS5cbiAgICAgICAgYnVja2V0W2xvd10gPSBTRVFfU1RBUlQgLSB0aGlzLmVuY29kZVRhYmxlU2VxLmxlbmd0aDtcbiAgICAgICAgdGhpcy5lbmNvZGVUYWJsZVNlcS5wdXNoKG5vZGUpO1xuICAgIH1cblxuICAgIC8vIFRyYXZlcnNlIHRoZSBjaGFyYWN0ZXIgdHJlZSwgYWxsb2NhdGluZyBuZXcgbm9kZXMgYXMgbmVlZGVkLlxuICAgIGZvciAodmFyIGogPSAxOyBqIDwgc2VxLmxlbmd0aC0xOyBqKyspIHtcbiAgICAgICAgdmFyIG9sZFZhbCA9IG5vZGVbdUNvZGVdO1xuICAgICAgICBpZiAodHlwZW9mIG9sZFZhbCA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICBub2RlID0gb2xkVmFsO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlW3VDb2RlXSA9IHt9XG4gICAgICAgICAgICBpZiAob2xkVmFsICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgbm9kZVtERUZfQ0hBUl0gPSBvbGRWYWxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgbGVhZiB0byBnaXZlbiBkYmNzQ29kZS5cbiAgICB1Q29kZSA9IHNlcVtzZXEubGVuZ3RoLTFdO1xuICAgIG5vZGVbdUNvZGVdID0gZGJjc0NvZGU7XG59XG5cbkRCQ1NDb2RlYy5wcm90b3R5cGUuX2ZpbGxFbmNvZGVUYWJsZSA9IGZ1bmN0aW9uKG5vZGVJZHgsIHByZWZpeCwgc2tpcEVuY29kZUNoYXJzKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1tub2RlSWR4XTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDB4MTAwOyBpKyspIHtcbiAgICAgICAgdmFyIHVDb2RlID0gbm9kZVtpXTtcbiAgICAgICAgdmFyIG1iQ29kZSA9IHByZWZpeCArIGk7XG4gICAgICAgIGlmIChza2lwRW5jb2RlQ2hhcnNbbWJDb2RlXSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICh1Q29kZSA+PSAwKVxuICAgICAgICAgICAgdGhpcy5fc2V0RW5jb2RlQ2hhcih1Q29kZSwgbWJDb2RlKTtcbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPD0gTk9ERV9TVEFSVClcbiAgICAgICAgICAgIHRoaXMuX2ZpbGxFbmNvZGVUYWJsZShOT0RFX1NUQVJUIC0gdUNvZGUsIG1iQ29kZSA8PCA4LCBza2lwRW5jb2RlQ2hhcnMpO1xuICAgICAgICBlbHNlIGlmICh1Q29kZSA8PSBTRVFfU1RBUlQpXG4gICAgICAgICAgICB0aGlzLl9zZXRFbmNvZGVTZXF1ZW5jZSh0aGlzLmRlY29kZVRhYmxlU2VxW1NFUV9TVEFSVCAtIHVDb2RlXSwgbWJDb2RlKTtcbiAgICB9XG59XG5cblxuXG4vLyA9PSBFbmNvZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBEQkNTRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIC8vIEVuY29kZXIgc3RhdGVcbiAgICB0aGlzLmxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICB0aGlzLnNlcU9iaiA9IHVuZGVmaW5lZDtcbiAgICBcbiAgICAvLyBTdGF0aWMgZGF0YVxuICAgIHRoaXMuZW5jb2RlVGFibGUgPSBjb2RlYy5lbmNvZGVUYWJsZTtcbiAgICB0aGlzLmVuY29kZVRhYmxlU2VxID0gY29kZWMuZW5jb2RlVGFibGVTZXE7XG4gICAgdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUgPSBjb2RlYy5kZWZDaGFyU0I7XG4gICAgdGhpcy5nYjE4MDMwID0gY29kZWMuZ2IxODAzMDtcbn1cblxuREJDU0VuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIG5ld0J1ZiA9IG5ldyBCdWZmZXIoc3RyLmxlbmd0aCAqICh0aGlzLmdiMTgwMzAgPyA0IDogMykpLCBcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IHRoaXMubGVhZFN1cnJvZ2F0ZSxcbiAgICAgICAgc2VxT2JqID0gdGhpcy5zZXFPYmosIG5leHRDaGFyID0gLTEsXG4gICAgICAgIGkgPSAwLCBqID0gMDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIC8vIDAuIEdldCBuZXh0IGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKG5leHRDaGFyID09PSAtMSkge1xuICAgICAgICAgICAgaWYgKGkgPT0gc3RyLmxlbmd0aCkgYnJlYWs7XG4gICAgICAgICAgICB2YXIgdUNvZGUgPSBzdHIuY2hhckNvZGVBdChpKyspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHVDb2RlID0gbmV4dENoYXI7XG4gICAgICAgICAgICBuZXh0Q2hhciA9IC0xOyAgICBcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDEuIEhhbmRsZSBzdXJyb2dhdGVzLlxuICAgICAgICBpZiAoMHhEODAwIDw9IHVDb2RlICYmIHVDb2RlIDwgMHhFMDAwKSB7IC8vIENoYXIgaXMgb25lIG9mIHN1cnJvZ2F0ZXMuXG4gICAgICAgICAgICBpZiAodUNvZGUgPCAweERDMDApIHsgLy8gV2UndmUgZ290IGxlYWQgc3Vycm9nYXRlLlxuICAgICAgICAgICAgICAgIGlmIChsZWFkU3Vycm9nYXRlID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gdUNvZGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSB1Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG91YmxlIGxlYWQgc3Vycm9nYXRlIGZvdW5kLlxuICAgICAgICAgICAgICAgICAgICB1Q29kZSA9IFVOQVNTSUdORUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gV2UndmUgZ290IHRyYWlsIHN1cnJvZ2F0ZS5cbiAgICAgICAgICAgICAgICBpZiAobGVhZFN1cnJvZ2F0ZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdUNvZGUgPSAweDEwMDAwICsgKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDApICogMHg0MDAgKyAodUNvZGUgLSAweERDMDApO1xuICAgICAgICAgICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gLTE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSBzdXJyb2dhdGUgcGFpciAtIG9ubHkgdHJhaWwgc3Vycm9nYXRlIGZvdW5kLlxuICAgICAgICAgICAgICAgICAgICB1Q29kZSA9IFVOQVNTSUdORUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUgIT09IC0xKSB7XG4gICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHN1cnJvZ2F0ZSBwYWlyIC0gb25seSBsZWFkIHN1cnJvZ2F0ZSBmb3VuZC5cbiAgICAgICAgICAgIG5leHRDaGFyID0gdUNvZGU7IHVDb2RlID0gVU5BU1NJR05FRDsgLy8gV3JpdGUgYW4gZXJyb3IsIHRoZW4gY3VycmVudCBjaGFyLlxuICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gQ29udmVydCB1Q29kZSBjaGFyYWN0ZXIuXG4gICAgICAgIHZhciBkYmNzQ29kZSA9IFVOQVNTSUdORUQ7XG4gICAgICAgIGlmIChzZXFPYmogIT09IHVuZGVmaW5lZCAmJiB1Q29kZSAhPSBVTkFTU0lHTkVEKSB7IC8vIFdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBzZXF1ZW5jZVxuICAgICAgICAgICAgdmFyIHJlc0NvZGUgPSBzZXFPYmpbdUNvZGVdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXNDb2RlID09PSAnb2JqZWN0JykgeyAvLyBTZXF1ZW5jZSBjb250aW51ZXMuXG4gICAgICAgICAgICAgICAgc2VxT2JqID0gcmVzQ29kZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzQ29kZSA9PSAnbnVtYmVyJykgeyAvLyBTZXF1ZW5jZSBmaW5pc2hlZC4gV3JpdGUgaXQuXG4gICAgICAgICAgICAgICAgZGJjc0NvZGUgPSByZXNDb2RlO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc0NvZGUgPT0gdW5kZWZpbmVkKSB7IC8vIEN1cnJlbnQgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSBzZXF1ZW5jZS5cblxuICAgICAgICAgICAgICAgIC8vIFRyeSBkZWZhdWx0IGNoYXJhY3RlciBmb3IgdGhpcyBzZXF1ZW5jZVxuICAgICAgICAgICAgICAgIHJlc0NvZGUgPSBzZXFPYmpbREVGX0NIQVJdO1xuICAgICAgICAgICAgICAgIGlmIChyZXNDb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGJjc0NvZGUgPSByZXNDb2RlOyAvLyBGb3VuZC4gV3JpdGUgaXQuXG4gICAgICAgICAgICAgICAgICAgIG5leHRDaGFyID0gdUNvZGU7IC8vIEN1cnJlbnQgY2hhcmFjdGVyIHdpbGwgYmUgd3JpdHRlbiB0b28gaW4gdGhlIG5leHQgaXRlcmF0aW9uLlxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogV2hhdCBpZiB3ZSBoYXZlIG5vIGRlZmF1bHQ/IChyZXNDb2RlID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiwgd2Ugc2hvdWxkIHdyaXRlIGZpcnN0IGNoYXIgb2YgdGhlIHNlcXVlbmNlIGFzLWlzIGFuZCB0cnkgdGhlIHJlc3QgcmVjdXJzaXZlbHkuXG4gICAgICAgICAgICAgICAgICAgIC8vIERpZG4ndCBkbyBpdCBmb3Igbm93IGJlY2F1c2Ugbm8gZW5jb2RpbmcgaGFzIHRoaXMgc2l0dWF0aW9uIHlldC5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5LCBqdXN0IHNraXAgdGhlIHNlcXVlbmNlIGFuZCB3cml0ZSBjdXJyZW50IGNoYXIuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VxT2JqID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlID49IDApIHsgIC8vIFJlZ3VsYXIgY2hhcmFjdGVyXG4gICAgICAgICAgICB2YXIgc3VidGFibGUgPSB0aGlzLmVuY29kZVRhYmxlW3VDb2RlID4+IDhdO1xuICAgICAgICAgICAgaWYgKHN1YnRhYmxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgZGJjc0NvZGUgPSBzdWJ0YWJsZVt1Q29kZSAmIDB4RkZdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoZGJjc0NvZGUgPD0gU0VRX1NUQVJUKSB7IC8vIFNlcXVlbmNlIHN0YXJ0XG4gICAgICAgICAgICAgICAgc2VxT2JqID0gdGhpcy5lbmNvZGVUYWJsZVNlcVtTRVFfU1RBUlQtZGJjc0NvZGVdO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGJjc0NvZGUgPT0gVU5BU1NJR05FRCAmJiB0aGlzLmdiMTgwMzApIHtcbiAgICAgICAgICAgICAgICAvLyBVc2UgR0IxODAzMCBhbGdvcml0aG0gdG8gZmluZCBjaGFyYWN0ZXIocykgdG8gd3JpdGUuXG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IGZpbmRJZHgodGhpcy5nYjE4MDMwLnVDaGFycywgdUNvZGUpO1xuICAgICAgICAgICAgICAgIGlmIChpZHggIT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRiY3NDb2RlID0gdGhpcy5nYjE4MDMwLmdiQ2hhcnNbaWR4XSArICh1Q29kZSAtIHRoaXMuZ2IxODAzMC51Q2hhcnNbaWR4XSk7XG4gICAgICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMHg4MSArIE1hdGguZmxvb3IoZGJjc0NvZGUgLyAxMjYwMCk7IGRiY3NDb2RlID0gZGJjc0NvZGUgJSAxMjYwMDtcbiAgICAgICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSAweDMwICsgTWF0aC5mbG9vcihkYmNzQ29kZSAvIDEyNjApOyBkYmNzQ29kZSA9IGRiY3NDb2RlICUgMTI2MDtcbiAgICAgICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSAweDgxICsgTWF0aC5mbG9vcihkYmNzQ29kZSAvIDEwKTsgZGJjc0NvZGUgPSBkYmNzQ29kZSAlIDEwO1xuICAgICAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IDB4MzAgKyBkYmNzQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gV3JpdGUgZGJjc0NvZGUgY2hhcmFjdGVyLlxuICAgICAgICBpZiAoZGJjc0NvZGUgPT09IFVOQVNTSUdORUQpXG4gICAgICAgICAgICBkYmNzQ29kZSA9IHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlO1xuICAgICAgICBcbiAgICAgICAgaWYgKGRiY3NDb2RlIDwgMHgxMDApIHtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGJjc0NvZGUgPCAweDEwMDAwKSB7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlID4+IDg7ICAgLy8gaGlnaCBieXRlXG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlICYgMHhGRjsgLy8gbG93IGJ5dGVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4gMTY7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IChkYmNzQ29kZSA+PiA4KSAmIDB4RkY7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlICYgMHhGRjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VxT2JqID0gc2VxT2JqO1xuICAgIHRoaXMubGVhZFN1cnJvZ2F0ZSA9IGxlYWRTdXJyb2dhdGU7XG4gICAgcmV0dXJuIG5ld0J1Zi5zbGljZSgwLCBqKTtcbn1cblxuREJDU0VuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmxlYWRTdXJyb2dhdGUgPT09IC0xICYmIHRoaXMuc2VxT2JqID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybjsgLy8gQWxsIGNsZWFuLiBNb3N0IG9mdGVuIGNhc2UuXG5cbiAgICB2YXIgbmV3QnVmID0gbmV3IEJ1ZmZlcigxMCksIGogPSAwO1xuXG4gICAgaWYgKHRoaXMuc2VxT2JqKSB7IC8vIFdlJ3JlIGluIHRoZSBzZXF1ZW5jZS5cbiAgICAgICAgdmFyIGRiY3NDb2RlID0gdGhpcy5zZXFPYmpbREVGX0NIQVJdO1xuICAgICAgICBpZiAoZGJjc0NvZGUgIT09IHVuZGVmaW5lZCkgeyAvLyBXcml0ZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlLlxuICAgICAgICAgICAgaWYgKGRiY3NDb2RlIDwgMHgxMDApIHtcbiAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+PiA4OyAgIC8vIGhpZ2ggYnl0ZVxuICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgJiAweEZGOyAvLyBsb3cgYnl0ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU2VlIHRvZG8gYWJvdmUuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXFPYmogPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVhZFN1cnJvZ2F0ZSAhPT0gLTEpIHtcbiAgICAgICAgLy8gSW5jb21wbGV0ZSBzdXJyb2dhdGUgcGFpciAtIG9ubHkgbGVhZCBzdXJyb2dhdGUgZm91bmQuXG4gICAgICAgIG5ld0J1ZltqKytdID0gdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU7XG4gICAgICAgIHRoaXMubGVhZFN1cnJvZ2F0ZSA9IC0xO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gbmV3QnVmLnNsaWNlKDAsIGopO1xufVxuXG4vLyBFeHBvcnQgZm9yIHRlc3RpbmdcbkRCQ1NFbmNvZGVyLnByb3RvdHlwZS5maW5kSWR4ID0gZmluZElkeDtcblxuXG4vLyA9PSBEZWNvZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBEQkNTRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIC8vIERlY29kZXIgc3RhdGVcbiAgICB0aGlzLm5vZGVJZHggPSAwO1xuICAgIHRoaXMucHJldkJ1ZiA9IG5ldyBCdWZmZXIoMCk7XG5cbiAgICAvLyBTdGF0aWMgZGF0YVxuICAgIHRoaXMuZGVjb2RlVGFibGVzID0gY29kZWMuZGVjb2RlVGFibGVzO1xuICAgIHRoaXMuZGVjb2RlVGFibGVTZXEgPSBjb2RlYy5kZWNvZGVUYWJsZVNlcTtcbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGNvZGVjLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICB0aGlzLmdiMTgwMzAgPSBjb2RlYy5nYjE4MDMwO1xufVxuXG5EQkNTRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICB2YXIgbmV3QnVmID0gbmV3IEJ1ZmZlcihidWYubGVuZ3RoKjIpLFxuICAgICAgICBub2RlSWR4ID0gdGhpcy5ub2RlSWR4LCBcbiAgICAgICAgcHJldkJ1ZiA9IHRoaXMucHJldkJ1ZiwgcHJldkJ1Zk9mZnNldCA9IHRoaXMucHJldkJ1Zi5sZW5ndGgsXG4gICAgICAgIHNlcVN0YXJ0ID0gLXRoaXMucHJldkJ1Zi5sZW5ndGgsIC8vIGlkeCBvZiB0aGUgc3RhcnQgb2YgY3VycmVudCBwYXJzZWQgc2VxdWVuY2UuXG4gICAgICAgIHVDb2RlO1xuXG4gICAgaWYgKHByZXZCdWZPZmZzZXQgPiAwKSAvLyBNYWtlIHByZXYgYnVmIG92ZXJsYXAgYSBsaXR0bGUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2xpY2UgbGF0ZXIuXG4gICAgICAgIHByZXZCdWYgPSBCdWZmZXIuY29uY2F0KFtwcmV2QnVmLCBidWYuc2xpY2UoMCwgMTApXSk7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjdXJCeXRlID0gKGkgPj0gMCkgPyBidWZbaV0gOiBwcmV2QnVmW2kgKyBwcmV2QnVmT2Zmc2V0XTtcblxuICAgICAgICAvLyBMb29rdXAgaW4gY3VycmVudCB0cmllIG5vZGUuXG4gICAgICAgIHZhciB1Q29kZSA9IHRoaXMuZGVjb2RlVGFibGVzW25vZGVJZHhdW2N1ckJ5dGVdO1xuXG4gICAgICAgIGlmICh1Q29kZSA+PSAwKSB7IFxuICAgICAgICAgICAgLy8gTm9ybWFsIGNoYXJhY3RlciwganVzdCB1c2UgaXQuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPT09IFVOQVNTSUdORUQpIHsgLy8gVW5rbm93biBjaGFyLlxuICAgICAgICAgICAgLy8gVE9ETzogQ2FsbGJhY2sgd2l0aCBzZXEuXG4gICAgICAgICAgICAvL3ZhciBjdXJTZXEgPSAoc2VxU3RhcnQgPj0gMCkgPyBidWYuc2xpY2Uoc2VxU3RhcnQsIGkrMSkgOiBwcmV2QnVmLnNsaWNlKHNlcVN0YXJ0ICsgcHJldkJ1Zk9mZnNldCwgaSsxICsgcHJldkJ1Zk9mZnNldCk7XG4gICAgICAgICAgICBpID0gc2VxU3RhcnQ7IC8vIFRyeSB0byBwYXJzZSBhZ2FpbiwgYWZ0ZXIgc2tpcHBpbmcgZmlyc3QgYnl0ZSBvZiB0aGUgc2VxdWVuY2UgKCdpJyB3aWxsIGJlIGluY3JlbWVudGVkIGJ5ICdmb3InIGN5Y2xlKS5cbiAgICAgICAgICAgIHVDb2RlID0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA9PT0gR0IxODAzMF9DT0RFKSB7XG4gICAgICAgICAgICB2YXIgY3VyU2VxID0gKHNlcVN0YXJ0ID49IDApID8gYnVmLnNsaWNlKHNlcVN0YXJ0LCBpKzEpIDogcHJldkJ1Zi5zbGljZShzZXFTdGFydCArIHByZXZCdWZPZmZzZXQsIGkrMSArIHByZXZCdWZPZmZzZXQpO1xuICAgICAgICAgICAgdmFyIHB0ciA9IChjdXJTZXFbMF0tMHg4MSkqMTI2MDAgKyAoY3VyU2VxWzFdLTB4MzApKjEyNjAgKyAoY3VyU2VxWzJdLTB4ODEpKjEwICsgKGN1clNlcVszXS0weDMwKTtcbiAgICAgICAgICAgIHZhciBpZHggPSBmaW5kSWR4KHRoaXMuZ2IxODAzMC5nYkNoYXJzLCBwdHIpO1xuICAgICAgICAgICAgdUNvZGUgPSB0aGlzLmdiMTgwMzAudUNoYXJzW2lkeF0gKyBwdHIgLSB0aGlzLmdiMTgwMzAuZ2JDaGFyc1tpZHhdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlIDw9IE5PREVfU1RBUlQpIHsgLy8gR28gdG8gbmV4dCB0cmllIG5vZGUuXG4gICAgICAgICAgICBub2RlSWR4ID0gTk9ERV9TVEFSVCAtIHVDb2RlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPD0gU0VRX1NUQVJUKSB7IC8vIE91dHB1dCBhIHNlcXVlbmNlIG9mIGNoYXJzLlxuICAgICAgICAgICAgdmFyIHNlcSA9IHRoaXMuZGVjb2RlVGFibGVTZXFbU0VRX1NUQVJUIC0gdUNvZGVdO1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzZXEubGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAgICAgICAgICAgdUNvZGUgPSBzZXFba107XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZSA+PiA4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdUNvZGUgPSBzZXFbc2VxLmxlbmd0aC0xXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpY29udi1saXRlIGludGVybmFsIGVycm9yOiBpbnZhbGlkIGRlY29kaW5nIHRhYmxlIHZhbHVlIFwiICsgdUNvZGUgKyBcIiBhdCBcIiArIG5vZGVJZHggKyBcIi9cIiArIGN1ckJ5dGUpO1xuXG4gICAgICAgIC8vIFdyaXRlIHRoZSBjaGFyYWN0ZXIgdG8gYnVmZmVyLCBoYW5kbGluZyBoaWdoZXIgcGxhbmVzIHVzaW5nIHN1cnJvZ2F0ZSBwYWlyLlxuICAgICAgICBpZiAodUNvZGUgPiAweEZGRkYpIHsgXG4gICAgICAgICAgICB1Q29kZSAtPSAweDEwMDAwO1xuICAgICAgICAgICAgdmFyIHVDb2RlTGVhZCA9IDB4RDgwMCArIE1hdGguZmxvb3IodUNvZGUgLyAweDQwMCk7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlTGVhZCAmIDB4RkY7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlTGVhZCA+PiA4O1xuXG4gICAgICAgICAgICB1Q29kZSA9IDB4REMwMCArIHVDb2RlICUgMHg0MDA7XG4gICAgICAgIH1cbiAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZSAmIDB4RkY7XG4gICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgPj4gODtcblxuICAgICAgICAvLyBSZXNldCB0cmllIG5vZGUuXG4gICAgICAgIG5vZGVJZHggPSAwOyBzZXFTdGFydCA9IGkrMTtcbiAgICB9XG5cbiAgICB0aGlzLm5vZGVJZHggPSBub2RlSWR4O1xuICAgIHRoaXMucHJldkJ1ZiA9IChzZXFTdGFydCA+PSAwKSA/IGJ1Zi5zbGljZShzZXFTdGFydCkgOiBwcmV2QnVmLnNsaWNlKHNlcVN0YXJ0ICsgcHJldkJ1Zk9mZnNldCk7XG4gICAgcmV0dXJuIG5ld0J1Zi5zbGljZSgwLCBqKS50b1N0cmluZygndWNzMicpO1xufVxuXG5EQkNTRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJldCA9ICcnO1xuXG4gICAgLy8gVHJ5IHRvIHBhcnNlIGFsbCByZW1haW5pbmcgY2hhcnMuXG4gICAgd2hpbGUgKHRoaXMucHJldkJ1Zi5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFNraXAgMSBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlci5cbiAgICAgICAgcmV0ICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICB2YXIgYnVmID0gdGhpcy5wcmV2QnVmLnNsaWNlKDEpO1xuXG4gICAgICAgIC8vIFBhcnNlIHJlbWFpbmluZyBhcyB1c3VhbC5cbiAgICAgICAgdGhpcy5wcmV2QnVmID0gbmV3IEJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICAgICAgaWYgKGJ1Zi5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0ICs9IHRoaXMud3JpdGUoYnVmKTtcbiAgICB9XG5cbiAgICB0aGlzLm5vZGVJZHggPSAwO1xuICAgIHJldHVybiByZXQ7XG59XG5cbi8vIEJpbmFyeSBzZWFyY2ggZm9yIEdCMTgwMzAuIFJldHVybnMgbGFyZ2VzdCBpIHN1Y2ggdGhhdCB0YWJsZVtpXSA8PSB2YWwuXG5mdW5jdGlvbiBmaW5kSWR4KHRhYmxlLCB2YWwpIHtcbiAgICBpZiAodGFibGVbMF0gPiB2YWwpXG4gICAgICAgIHJldHVybiAtMTtcblxuICAgIHZhciBsID0gMCwgciA9IHRhYmxlLmxlbmd0aDtcbiAgICB3aGlsZSAobCA8IHItMSkgeyAvLyBhbHdheXMgdGFibGVbbF0gPD0gdmFsIDwgdGFibGVbcl1cbiAgICAgICAgdmFyIG1pZCA9IGwgKyBNYXRoLmZsb29yKChyLWwrMSkvMik7XG4gICAgICAgIGlmICh0YWJsZVttaWRdIDw9IHZhbClcbiAgICAgICAgICAgIGwgPSBtaWQ7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHIgPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsO1xufVxuXG4iLCJcInVzZSBzdHJpY3RcIlxuXG4vLyBEZXNjcmlwdGlvbiBvZiBzdXBwb3J0ZWQgZG91YmxlIGJ5dGUgZW5jb2RpbmdzIGFuZCBhbGlhc2VzLlxuLy8gVGFibGVzIGFyZSBub3QgcmVxdWlyZSgpLWQgdW50aWwgdGhleSBhcmUgbmVlZGVkIHRvIHNwZWVkIHVwIGxpYnJhcnkgbG9hZC5cbi8vIHJlcXVpcmUoKS1zIGFyZSBkaXJlY3QgdG8gc3VwcG9ydCBCcm93c2VyaWZ5LlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBcbiAgICAvLyA9PSBKYXBhbmVzZS9TaGlmdEpJUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQWxsIGphcGFuZXNlIGVuY29kaW5ncyBhcmUgYmFzZWQgb24gSklTIFggc2V0IG9mIHN0YW5kYXJkczpcbiAgICAvLyBKSVMgWCAwMjAxIC0gU2luZ2xlLWJ5dGUgZW5jb2Rpbmcgb2YgQVNDSUkgKyDCpSArIEthbmEgY2hhcnMgYXQgMHhBMS0weERGLlxuICAgIC8vIEpJUyBYIDAyMDggLSBNYWluIHNldCBvZiA2ODc5IGNoYXJhY3RlcnMsIHBsYWNlZCBpbiA5NHg5NCBwbGFuZSwgdG8gYmUgZW5jb2RlZCBieSAyIGJ5dGVzLiBcbiAgICAvLyAgICAgICAgICAgICAgSGFzIHNldmVyYWwgdmFyaWF0aW9ucyBpbiAxOTc4LCAxOTgzLCAxOTkwIGFuZCAxOTk3LlxuICAgIC8vIEpJUyBYIDAyMTIgLSBTdXBwbGVtZW50YXJ5IHBsYW5lIG9mIDYwNjcgY2hhcnMgaW4gOTR4OTQgcGxhbmUuIDE5OTAuIEVmZmVjdGl2ZWx5IGRlYWQuXG4gICAgLy8gSklTIFggMDIxMyAtIEV4dGVuc2lvbiBhbmQgbW9kZXJuIHJlcGxhY2VtZW50IG9mIDAyMDggYW5kIDAyMTIuIFRvdGFsIGNoYXJzOiAxMTIzMy5cbiAgICAvLyAgICAgICAgICAgICAgMiBwbGFuZXMsIGZpcnN0IGlzIHN1cGVyc2V0IG9mIDAyMDgsIHNlY29uZCAtIHJldmlzZWQgMDIxMi5cbiAgICAvLyAgICAgICAgICAgICAgSW50cm9kdWNlZCBpbiAyMDAwLCByZXZpc2VkIDIwMDQuIFNvbWUgY2hhcmFjdGVycyBhcmUgaW4gVW5pY29kZSBQbGFuZSAyICgweDJ4eHh4KVxuXG4gICAgLy8gQnl0ZSBlbmNvZGluZ3MgYXJlOlxuICAgIC8vICAqIFNoaWZ0X0pJUzogQ29tcGF0aWJsZSB3aXRoIDAyMDEsIHVzZXMgbm90IGRlZmluZWQgY2hhcnMgaW4gdG9wIGhhbGYgYXMgbGVhZCBieXRlcyBmb3IgZG91YmxlLWJ5dGVcbiAgICAvLyAgICAgICAgICAgICAgIGVuY29kaW5nIG9mIDAyMDguIExlYWQgYnl0ZSByYW5nZXM6IDB4ODEtMHg5RiwgMHhFMC0weEVGOyBUcmFpbCBieXRlIHJhbmdlczogMHg0MC0weDdFLCAweDgwLTB4OUUsIDB4OUYtMHhGQy5cbiAgICAvLyAgICAgICAgICAgICAgIFdpbmRvd3MgQ1A5MzIgaXMgYSBzdXBlcnNldCBvZiBTaGlmdF9KSVMuIFNvbWUgY29tcGFuaWVzIGFkZGVkIG1vcmUgY2hhcnMsIG5vdGFibHkgS0RESS5cbiAgICAvLyAgKiBFVUMtSlA6ICAgIFVwIHRvIDMgYnl0ZXMgcGVyIGNoYXJhY3Rlci4gVXNlZCBtb3N0bHkgb24gKm5peGVzLlxuICAgIC8vICAgICAgICAgICAgICAgMHgwMC0weDdGICAgICAgIC0gbG93ZXIgcGFydCBvZiAwMjAxXG4gICAgLy8gICAgICAgICAgICAgICAweDhFLCAweEExLTB4REYgLSB1cHBlciBwYXJ0IG9mIDAyMDFcbiAgICAvLyAgICAgICAgICAgICAgICgweEExLTB4RkUpeDIgICAtIDAyMDggcGxhbmUgKDk0eDk0KS5cbiAgICAvLyAgICAgICAgICAgICAgIDB4OEYsICgweEExLTB4RkUpeDIgLSAwMjEyIHBsYW5lICg5NHg5NCkuXG4gICAgLy8gICogSklTIFggMjA4OiA3LWJpdCwgZGlyZWN0IGVuY29kaW5nIG9mIDAyMDguIEJ5dGUgcmFuZ2VzOiAweDIxLTB4N0UgKDk0IHZhbHVlcykuIFVuY29tbW9uLlxuICAgIC8vICAgICAgICAgICAgICAgVXNlZCBhcy1pcyBpbiBJU08yMDIyIGZhbWlseS5cbiAgICAvLyAgKiBJU08yMDIyLUpQOiBTdGF0ZWZ1bCBlbmNvZGluZywgd2l0aCBlc2NhcGUgc2VxdWVuY2VzIHRvIHN3aXRjaCBiZXR3ZWVuIEFTQ0lJLCBcbiAgICAvLyAgICAgICAgICAgICAgICAwMjAxLTE5NzYgUm9tYW4sIDAyMDgtMTk3OCwgMDIwOC0xOTgzLlxuICAgIC8vICAqIElTTzIwMjItSlAtMTogQWRkcyBlc2Mgc2VxIGZvciAwMjEyLTE5OTAuXG4gICAgLy8gICogSVNPMjAyMi1KUC0yOiBBZGRzIGVzYyBzZXEgZm9yIEdCMjMxMy0xOTgwLCBLU1gxMDAxLTE5OTIsIElTTzg4NTktMSwgSVNPODg1OS03LlxuICAgIC8vICAqIElTTzIwMjItSlAtMzogQWRkcyBlc2Mgc2VxIGZvciAwMjAxLTE5NzYgS2FuYSBzZXQsIDAyMTMtMjAwMCBQbGFuZXMgMSwgMi5cbiAgICAvLyAgKiBJU08yMDIyLUpQLTIwMDQ6IEFkZHMgMDIxMy0yMDA0IFBsYW5lIDEuXG4gICAgLy9cbiAgICAvLyBBZnRlciBKSVMgWCAwMjEzIGFwcGVhcmVkLCBTaGlmdF9KSVMtMjAwNCwgRVVDLUpJU1gwMjEzIGFuZCBJU08yMDIyLUpQLTIwMDQgZm9sbG93ZWQsIHdpdGgganVzdCBjaGFuZ2luZyB0aGUgcGxhbmVzLlxuICAgIC8vXG4gICAgLy8gT3ZlcmFsbCwgaXQgc2VlbXMgdGhhdCBpdCdzIGEgbWVzcyA6KCBodHRwOi8vd3d3OC5wbGFsYS5vci5qcC90a3Vib3RhMS91bmljb2RlLXN5bWJvbHMtbWFwMi5odG1sXG5cblxuICAgICdzaGlmdGppcyc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvc2hpZnRqaXMuanNvbicpIH0sXG4gICAgICAgIGVuY29kZUFkZDogeydcXHUwMGE1JzogMHg1QywgJ1xcdTIwM0UnOiAweDdFfSxcbiAgICAgICAgZW5jb2RlU2tpcFZhbHM6IFt7ZnJvbTogMHhFRDQwLCB0bzogMHhGOTQwfV0sXG4gICAgfSxcbiAgICAnY3NzaGlmdGppcyc6ICdzaGlmdGppcycsXG4gICAgJ21za2FuamknOiAnc2hpZnRqaXMnLFxuICAgICdzamlzJzogJ3NoaWZ0amlzJyxcbiAgICAnd2luZG93czMxaic6ICdzaGlmdGppcycsXG4gICAgJ3hzamlzJzogJ3NoaWZ0amlzJyxcbiAgICAnd2luZG93czkzMic6ICdzaGlmdGppcycsXG4gICAgJzkzMic6ICdzaGlmdGppcycsXG4gICAgJ2NwOTMyJzogJ3NoaWZ0amlzJyxcblxuICAgICdldWNqcCc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvZXVjanAuanNvbicpIH0sXG4gICAgICAgIGVuY29kZUFkZDogeydcXHUwMGE1JzogMHg1QywgJ1xcdTIwM0UnOiAweDdFfSxcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogS0RESSBleHRlbnNpb24gdG8gU2hpZnRfSklTXG4gICAgLy8gVE9ETzogSUJNIENDU0lEIDk0MiA9IENQOTMyLCBidXQgRjAtRjkgY3VzdG9tIGNoYXJzIGFuZCBvdGhlciBjaGFyIGNoYW5nZXMuXG4gICAgLy8gVE9ETzogSUJNIENDU0lEIDk0MyA9IFNoaWZ0X0pJUyA9IENQOTMyIHdpdGggb3JpZ2luYWwgU2hpZnRfSklTIGxvd2VyIDEyOCBjaGFycy5cblxuICAgIC8vID09IENoaW5lc2UvR0JLID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dCS1xuXG4gICAgLy8gT2xkZXN0IEdCMjMxMiAoMTk4MSwgfjc2MDAgY2hhcnMpIGlzIGEgc3Vic2V0IG9mIENQOTM2XG4gICAgJ2diMjMxMic6ICdjcDkzNicsXG4gICAgJ2diMjMxMjgwJzogJ2NwOTM2JyxcbiAgICAnZ2IyMzEyMTk4MCc6ICdjcDkzNicsXG4gICAgJ2NzZ2IyMzEyJzogJ2NwOTM2JyxcbiAgICAnY3Npc281OGdiMjMxMjgwJzogJ2NwOTM2JyxcbiAgICAnZXVjY24nOiAnY3A5MzYnLFxuICAgICdpc29pcjU4JzogJ2diaycsXG5cbiAgICAvLyBNaWNyb3NvZnQncyBDUDkzNiBpcyBhIHN1YnNldCBhbmQgYXBwcm94aW1hdGlvbiBvZiBHQksuXG4gICAgLy8gVE9ETzogRXVybyA9IDB4ODAgaW4gY3A5MzYsIGJ1dCBub3QgaW4gR0JLICh3aGVyZSBpdCdzIHZhbGlkIGJ1dCB1bmRlZmluZWQpXG4gICAgJ3dpbmRvd3M5MzYnOiAnY3A5MzYnLFxuICAgICc5MzYnOiAnY3A5MzYnLFxuICAgICdjcDkzNic6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5MzYuanNvbicpIH0sXG4gICAgfSxcblxuICAgIC8vIEdCSyAofjIyMDAwIGNoYXJzKSBpcyBhbiBleHRlbnNpb24gb2YgQ1A5MzYgdGhhdCBhZGRlZCB1c2VyLW1hcHBlZCBjaGFycyBhbmQgc29tZSBvdGhlci5cbiAgICAnZ2JrJzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9jcDkzNi5qc29uJykuY29uY2F0KHJlcXVpcmUoJy4vdGFibGVzL2diay1hZGRlZC5qc29uJykpIH0sXG4gICAgfSxcbiAgICAneGdiayc6ICdnYmsnLFxuXG4gICAgLy8gR0IxODAzMCBpcyBhbiBhbGdvcml0aG1pYyBleHRlbnNpb24gb2YgR0JLLlxuICAgICdnYjE4MDMwJzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9jcDkzNi5qc29uJykuY29uY2F0KHJlcXVpcmUoJy4vdGFibGVzL2diay1hZGRlZC5qc29uJykpIH0sXG4gICAgICAgIGdiMTgwMzA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvZ2IxODAzMC1yYW5nZXMuanNvbicpIH0sXG4gICAgfSxcblxuICAgICdjaGluZXNlJzogJ2diMTgwMzAnLFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBHQjE4MDMwICh+MjcwMDAgY2hhcnMgKyB3aG9sZSB1bmljb2RlIG1hcHBpbmcsIGNwNTQ5MzYpXG4gICAgLy8gaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kb2NzL3BhcGVycy9nYjE4MDMwLmh0bWxcbiAgICAvLyBodHRwOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3UvZGF0YS90cnVuay9jaGFyc2V0L2RhdGEveG1sL2diLTE4MDMwLTIwMDAueG1sXG4gICAgLy8gaHR0cDovL3d3dy5raG5nYWkuY29tL2NoaW5lc2UvY2hhcm1hcC90YmxnYmsucGhwP3BhZ2U9MFxuXG4gICAgLy8gPT0gS29yZWFuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEVVQy1LUiwgS1NfQ181NjAxIGFuZCBLUyBYIDEwMDEgYXJlIGV4YWN0bHkgdGhlIHNhbWUuXG4gICAgJ3dpbmRvd3M5NDknOiAnY3A5NDknLFxuICAgICc5NDknOiAnY3A5NDknLFxuICAgICdjcDk0OSc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5NDkuanNvbicpIH0sXG4gICAgfSxcblxuICAgICdjc2V1Y2tyJzogJ2NwOTQ5JyxcbiAgICAnY3Nrc2M1NjAxMTk4Nyc6ICdjcDk0OScsXG4gICAgJ2V1Y2tyJzogJ2NwOTQ5JyxcbiAgICAnaXNvaXIxNDknOiAnY3A5NDknLFxuICAgICdrb3JlYW4nOiAnY3A5NDknLFxuICAgICdrc2M1NjAxMTk4Nyc6ICdjcDk0OScsXG4gICAgJ2tzYzU2MDExOTg5JzogJ2NwOTQ5JyxcbiAgICAna3NjNTYwMSc6ICdjcDk0OScsXG5cblxuICAgIC8vID09IEJpZzUvVGFpd2FuL0hvbmcgS29uZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBUaGVyZSBhcmUgbG90cyBvZiB0YWJsZXMgZm9yIEJpZzUgYW5kIGNwOTUwLiBQbGVhc2Ugc2VlIHRoZSBmb2xsb3dpbmcgbGlua3MgZm9yIGhpc3Rvcnk6XG4gICAgLy8gaHR0cDovL21venR3Lm9yZy9kb2NzL2JpZzUvICBodHRwOi8vd3d3LmhhaWJsZS5kZS9icnVuby9jaGFyc2V0cy9jb252ZXJzaW9uLXRhYmxlcy9CaWc1Lmh0bWxcbiAgICAvLyBWYXJpYXRpb25zLCBpbiByb3VnaGx5IG51bWJlciBvZiBkZWZpbmVkIGNoYXJzOlxuICAgIC8vICAqIFdpbmRvd3MgQ1AgOTUwOiBNaWNyb3NvZnQgdmFyaWFudCBvZiBCaWc1LiBDYW5vbmljYWw6IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZUL1dJTkRPV1MvQ1A5NTAuVFhUXG4gICAgLy8gICogV2luZG93cyBDUCA5NTE6IE1pY3Jvc29mdCB2YXJpYW50IG9mIEJpZzUtSEtTQ1MtMjAwMS4gU2VlbXMgdG8gYmUgbmV2ZXIgcHVibGljLiBodHRwOi8vbWUuYWJlbGNoZXVuZy5vcmcvYXJ0aWNsZXMvcmVzZWFyY2gvd2hhdC1pcy1jcDk1MS9cbiAgICAvLyAgKiBCaWc1LTIwMDMgKFRhaXdhbiBzdGFuZGFyZCkgYWxtb3N0IHN1cGVyc2V0IG9mIGNwOTUwLlxuICAgIC8vICAqIFVuaWNvZGUtYXQtb24gKFVBTykgLyBNb3ppbGxhIDEuOC4gRmFsbGluZyBvdXQgb2YgdXNlIG9uIHRoZSBXZWIuIE5vdCBzdXBwb3J0ZWQgYnkgb3RoZXIgYnJvd3NlcnMuXG4gICAgLy8gICogQmlnNS1IS1NDUyAoLTIwMDEsIC0yMDA0LCAtMjAwOCkuIEhvbmcgS29uZyBzdGFuZGFyZC4gXG4gICAgLy8gICAgbWFueSB1bmljb2RlIGNvZGUgcG9pbnRzIG1vdmVkIGZyb20gUFVBIHRvIFN1cHBsZW1lbnRhcnkgcGxhbmUgKFUrMlhYWFgpIG92ZXIgdGhlIHllYXJzLlxuICAgIC8vICAgIFBsdXMsIGl0IGhhcyA0IGNvbWJpbmluZyBzZXF1ZW5jZXMuXG4gICAgLy8gICAgU2VlbXMgdGhhdCBNb3ppbGxhIHJlZnVzZWQgdG8gc3VwcG9ydCBpdCBmb3IgMTAgeXJzLiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI0MzEgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzEwMjk5XG4gICAgLy8gICAgYmVjYXVzZSBiaWc1LWhrc2NzIGlzIHRoZSBvbmx5IGVuY29kaW5nIHRvIGluY2x1ZGUgYXN0cmFsIGNoYXJhY3RlcnMgaW4gbm9uLWFsZ29yaXRobWljIHdheS5cbiAgICAvLyAgICBJbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBjb25zaXN0ZW50IHdpdGhpbiBicm93c2Vyczsgc29tZXRpbWVzIGxhYmVsZWQgYXMganVzdCBiaWc1LlxuICAgIC8vICAgIE1TIEludGVybmV0IEV4cGxvcmVyIHN3aXRjaGVzIGZyb20gYmlnNSB0byBiaWc1LWhrc2NzIHdoZW4gYSBwYXRjaCBhcHBsaWVkLlxuICAgIC8vICAgIEdyZWF0IGRpc2N1c3Npb24gJiByZWNhcCBvZiB3aGF0J3MgZ29pbmcgb24gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNDcwI2MzMVxuICAgIC8vICAgIEluIHRoZSBlbmNvZGVyLCBpdCBtaWdodCBtYWtlIHNlbnNlIHRvIHN1cHBvcnQgZW5jb2Rpbmcgb2xkIFBVQSBtYXBwaW5ncyB0byBCaWc1IGJ5dGVzIHNlcS1zLlxuICAgIC8vICAgIE9mZmljaWFsIHNwZWM6IGh0dHA6Ly93d3cub2djaW8uZ292LmhrL2VuL2J1c2luZXNzL3RlY2hfcHJvbW90aW9uL2NjbGkvdGVybXMvZG9jLzIwMDNjbXBfMjAwOC50eHRcbiAgICAvLyAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm9nY2lvLmdvdi5oay90Yy9idXNpbmVzcy90ZWNoX3Byb21vdGlvbi9jY2xpL3Rlcm1zL2RvYy9oa3Njcy0yMDA4LWJpZzUtaXNvLnR4dFxuICAgIC8vIFxuICAgIC8vIEN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiBob3cgdG8gZGVhbCB3aXRoIEJpZzUoLUhLU0NTKSBpcyBpbiB0aGUgRW5jb2RpbmcgU3RhbmRhcmQsIGh0dHA6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2JpZzUtZW5jb2RlclxuICAgIC8vIFVuaWNvZGUgbWFwcGluZyAoaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvT0JTT0xFVEUvRUFTVEFTSUEvT1RIRVIvQklHNS5UWFQpIGlzIHNhaWQgdG8gYmUgd3JvbmcuXG5cbiAgICAnd2luZG93czk1MCc6ICdjcDk1MCcsXG4gICAgJzk1MCc6ICdjcDk1MCcsXG4gICAgJ2NwOTUwJzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9jcDk1MC5qc29uJykgfSxcbiAgICB9LFxuXG4gICAgLy8gQmlnNSBoYXMgbWFueSB2YXJpYXRpb25zIGFuZCBpcyBhbiBleHRlbnNpb24gb2YgY3A5NTAuIFdlIHVzZSBFbmNvZGluZyBTdGFuZGFyZCdzIGFzIGEgY29uc2Vuc3VzLlxuICAgICdiaWc1JzogJ2JpZzVoa3NjcycsXG4gICAgJ2JpZzVoa3Njcyc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5NTAuanNvbicpLmNvbmNhdChyZXF1aXJlKCcuL3RhYmxlcy9iaWc1LWFkZGVkLmpzb24nKSkgfSxcbiAgICAgICAgZW5jb2RlU2tpcFZhbHM6IFsweGEyY2NdLFxuICAgIH0sXG5cbiAgICAnY25iaWc1JzogJ2JpZzVoa3NjcycsXG4gICAgJ2NzYmlnNSc6ICdiaWc1aGtzY3MnLFxuICAgICd4eGJpZzUnOiAnYmlnNWhrc2NzJyxcblxufTtcbiIsIlwidXNlIHN0cmljdFwiXG5cbi8vIFVwZGF0ZSB0aGlzIGFycmF5IGlmIHlvdSBhZGQvcmVuYW1lL3JlbW92ZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS5cbi8vIFdlIHN1cHBvcnQgQnJvd3NlcmlmeSBieSBza2lwcGluZyBhdXRvbWF0aWMgbW9kdWxlIGRpc2NvdmVyeSBhbmQgcmVxdWlyaW5nIG1vZHVsZXMgZGlyZWN0bHkuXG52YXIgbW9kdWxlcyA9IFtcbiAgICByZXF1aXJlKFwiLi9pbnRlcm5hbFwiKSxcbiAgICByZXF1aXJlKFwiLi91dGYxNlwiKSxcbiAgICByZXF1aXJlKFwiLi91dGY3XCIpLFxuICAgIHJlcXVpcmUoXCIuL3NiY3MtY29kZWNcIiksXG4gICAgcmVxdWlyZShcIi4vc2Jjcy1kYXRhXCIpLFxuICAgIHJlcXVpcmUoXCIuL3NiY3MtZGF0YS1nZW5lcmF0ZWRcIiksXG4gICAgcmVxdWlyZShcIi4vZGJjcy1jb2RlY1wiKSxcbiAgICByZXF1aXJlKFwiLi9kYmNzLWRhdGFcIiksXG5dO1xuXG4vLyBQdXQgYWxsIGVuY29kaW5nL2FsaWFzL2NvZGVjIGRlZmluaXRpb25zIHRvIHNpbmdsZSBvYmplY3QgYW5kIGV4cG9ydCBpdC4gXG5mb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbW9kdWxlID0gbW9kdWxlc1tpXTtcbiAgICBmb3IgKHZhciBlbmMgaW4gbW9kdWxlKVxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZHVsZSwgZW5jKSlcbiAgICAgICAgICAgIGV4cG9ydHNbZW5jXSA9IG1vZHVsZVtlbmNdO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCJcblxuLy8gRXhwb3J0IE5vZGUuanMgaW50ZXJuYWwgZW5jb2RpbmdzLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBFbmNvZGluZ3NcbiAgICB1dGY4OiAgIHsgdHlwZTogXCJfaW50ZXJuYWxcIiwgYm9tQXdhcmU6IHRydWV9LFxuICAgIGNlc3U4OiAgeyB0eXBlOiBcIl9pbnRlcm5hbFwiLCBib21Bd2FyZTogdHJ1ZX0sXG4gICAgdW5pY29kZTExdXRmODogXCJ1dGY4XCIsXG5cbiAgICB1Y3MyOiAgIHsgdHlwZTogXCJfaW50ZXJuYWxcIiwgYm9tQXdhcmU6IHRydWV9LFxuICAgIHV0ZjE2bGU6IFwidWNzMlwiLFxuXG4gICAgYmluYXJ5OiB7IHR5cGU6IFwiX2ludGVybmFsXCIgfSxcbiAgICBiYXNlNjQ6IHsgdHlwZTogXCJfaW50ZXJuYWxcIiB9LFxuICAgIGhleDogICAgeyB0eXBlOiBcIl9pbnRlcm5hbFwiIH0sXG5cbiAgICAvLyBDb2RlYy5cbiAgICBfaW50ZXJuYWw6IEludGVybmFsQ29kZWMsXG59O1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBJbnRlcm5hbENvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICB0aGlzLmVuYyA9IGNvZGVjT3B0aW9ucy5lbmNvZGluZ05hbWU7XG4gICAgdGhpcy5ib21Bd2FyZSA9IGNvZGVjT3B0aW9ucy5ib21Bd2FyZTtcblxuICAgIGlmICh0aGlzLmVuYyA9PT0gXCJiYXNlNjRcIilcbiAgICAgICAgdGhpcy5lbmNvZGVyID0gSW50ZXJuYWxFbmNvZGVyQmFzZTY0O1xuICAgIGVsc2UgaWYgKHRoaXMuZW5jID09PSBcImNlc3U4XCIpIHtcbiAgICAgICAgdGhpcy5lbmMgPSBcInV0ZjhcIjsgLy8gVXNlIHV0ZjggZm9yIGRlY29kaW5nLlxuICAgICAgICB0aGlzLmVuY29kZXIgPSBJbnRlcm5hbEVuY29kZXJDZXN1ODtcblxuICAgICAgICAvLyBBZGQgZGVjb2RlciBmb3IgdmVyc2lvbnMgb2YgTm9kZSBub3Qgc3VwcG9ydGluZyBDRVNVLThcbiAgICAgICAgaWYgKG5ldyBCdWZmZXIoXCJlZGEwODBcIiwgJ2hleCcpLnRvU3RyaW5nKCkubGVuZ3RoID09IDMpIHtcbiAgICAgICAgICAgIHRoaXMuZGVjb2RlciA9IEludGVybmFsRGVjb2RlckNlc3U4O1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUgPSBpY29udi5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkludGVybmFsQ29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBJbnRlcm5hbEVuY29kZXI7XG5JbnRlcm5hbENvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gSW50ZXJuYWxEZWNvZGVyO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBXZSB1c2Ugbm9kZS5qcyBpbnRlcm5hbCBkZWNvZGVyLiBJdHMgc2lnbmF0dXJlIGlzIHRoZSBzYW1lIGFzIG91cnMuXG52YXIgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJykuU3RyaW5nRGVjb2RlcjtcblxuaWYgKCFTdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQpIC8vIE5vZGUgdjAuOCBkb2Vzbid0IGhhdmUgdGhpcyBtZXRob2QuXG4gICAgU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7fTtcblxuXG5mdW5jdGlvbiBJbnRlcm5hbERlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICBTdHJpbmdEZWNvZGVyLmNhbGwodGhpcywgY29kZWMuZW5jKTtcbn1cblxuSW50ZXJuYWxEZWNvZGVyLnByb3RvdHlwZSA9IFN0cmluZ0RlY29kZXIucHJvdG90eXBlO1xuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFbmNvZGVyIGlzIG1vc3RseSB0cml2aWFsXG5cbmZ1bmN0aW9uIEludGVybmFsRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuZW5jID0gY29kZWMuZW5jO1xufVxuXG5JbnRlcm5hbEVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoc3RyLCB0aGlzLmVuYyk7XG59XG5cbkludGVybmFsRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4Y2VwdCBiYXNlNjQgZW5jb2Rlciwgd2hpY2ggbXVzdCBrZWVwIGl0cyBzdGF0ZS5cblxuZnVuY3Rpb24gSW50ZXJuYWxFbmNvZGVyQmFzZTY0KG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5wcmV2U3RyID0gJyc7XG59XG5cbkludGVybmFsRW5jb2RlckJhc2U2NC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBzdHIgPSB0aGlzLnByZXZTdHIgKyBzdHI7XG4gICAgdmFyIGNvbXBsZXRlUXVhZHMgPSBzdHIubGVuZ3RoIC0gKHN0ci5sZW5ndGggJSA0KTtcbiAgICB0aGlzLnByZXZTdHIgPSBzdHIuc2xpY2UoY29tcGxldGVRdWFkcyk7XG4gICAgc3RyID0gc3RyLnNsaWNlKDAsIGNvbXBsZXRlUXVhZHMpO1xuXG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoc3RyLCBcImJhc2U2NFwiKTtcbn1cblxuSW50ZXJuYWxFbmNvZGVyQmFzZTY0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IEJ1ZmZlcih0aGlzLnByZXZTdHIsIFwiYmFzZTY0XCIpO1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDRVNVLTggZW5jb2RlciBpcyBhbHNvIHNwZWNpYWwuXG5cbmZ1bmN0aW9uIEludGVybmFsRW5jb2RlckNlc3U4KG9wdGlvbnMsIGNvZGVjKSB7XG59XG5cbkludGVybmFsRW5jb2RlckNlc3U4LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBidWYgPSBuZXcgQnVmZmVyKHN0ci5sZW5ndGggKiAzKSwgYnVmSWR4ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hhckNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gTmFpdmUgaW1wbGVtZW50YXRpb24sIGJ1dCBpdCB3b3JrcyBiZWNhdXNlIENFU1UtOCBpcyBlc3BlY2lhbGx5IGVhc3lcbiAgICAgICAgLy8gdG8gY29udmVydCBmcm9tIFVURi0xNiAod2hpY2ggYWxsIEpTIHN0cmluZ3MgYXJlIGVuY29kZWQgaW4pLlxuICAgICAgICBpZiAoY2hhckNvZGUgPCAweDgwKVxuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IGNoYXJDb2RlO1xuICAgICAgICBlbHNlIGlmIChjaGFyQ29kZSA8IDB4ODAwKSB7XG4gICAgICAgICAgICBidWZbYnVmSWR4KytdID0gMHhDMCArIChjaGFyQ29kZSA+Pj4gNik7XG4gICAgICAgICAgICBidWZbYnVmSWR4KytdID0gMHg4MCArIChjaGFyQ29kZSAmIDB4M2YpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBjaGFyQ29kZSB3aWxsIGFsd2F5cyBiZSA8IDB4MTAwMDAgaW4gamF2YXNjcmlwdC5cbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAweEUwICsgKGNoYXJDb2RlID4+PiAxMik7XG4gICAgICAgICAgICBidWZbYnVmSWR4KytdID0gMHg4MCArICgoY2hhckNvZGUgPj4+IDYpICYgMHgzZik7XG4gICAgICAgICAgICBidWZbYnVmSWR4KytdID0gMHg4MCArIChjaGFyQ29kZSAmIDB4M2YpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBidWYuc2xpY2UoMCwgYnVmSWR4KTtcbn1cblxuSW50ZXJuYWxFbmNvZGVyQ2VzdTgucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ0VTVS04IGRlY29kZXIgaXMgbm90IGltcGxlbWVudGVkIGluIE5vZGUgdjQuMCtcblxuZnVuY3Rpb24gSW50ZXJuYWxEZWNvZGVyQ2VzdTgob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmFjYyA9IDA7XG4gICAgdGhpcy5jb250Qnl0ZXMgPSAwO1xuICAgIHRoaXMuYWNjQnl0ZXMgPSAwO1xuICAgIHRoaXMuZGVmYXVsdENoYXJVbmljb2RlID0gY29kZWMuZGVmYXVsdENoYXJVbmljb2RlO1xufVxuXG5JbnRlcm5hbERlY29kZXJDZXN1OC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICB2YXIgYWNjID0gdGhpcy5hY2MsIGNvbnRCeXRlcyA9IHRoaXMuY29udEJ5dGVzLCBhY2NCeXRlcyA9IHRoaXMuYWNjQnl0ZXMsIFxuICAgICAgICByZXMgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY3VyQnl0ZSA9IGJ1ZltpXTtcbiAgICAgICAgaWYgKChjdXJCeXRlICYgMHhDMCkgIT09IDB4ODApIHsgLy8gTGVhZGluZyBieXRlXG4gICAgICAgICAgICBpZiAoY29udEJ5dGVzID4gMCkgeyAvLyBQcmV2aW91cyBjb2RlIGlzIGludmFsaWRcbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICAgICAgY29udEJ5dGVzID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1ckJ5dGUgPCAweDgwKSB7IC8vIFNpbmdsZS1ieXRlIGNvZGVcbiAgICAgICAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjdXJCeXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyQnl0ZSA8IDB4RTApIHsgLy8gVHdvLWJ5dGUgY29kZVxuICAgICAgICAgICAgICAgIGFjYyA9IGN1ckJ5dGUgJiAweDFGO1xuICAgICAgICAgICAgICAgIGNvbnRCeXRlcyA9IDE7IGFjY0J5dGVzID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyQnl0ZSA8IDB4RjApIHsgLy8gVGhyZWUtYnl0ZSBjb2RlXG4gICAgICAgICAgICAgICAgYWNjID0gY3VyQnl0ZSAmIDB4MEY7XG4gICAgICAgICAgICAgICAgY29udEJ5dGVzID0gMjsgYWNjQnl0ZXMgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHsgLy8gRm91ciBvciBtb3JlIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBDRVNVLTguXG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgeyAvLyBDb250aW51YXRpb24gYnl0ZVxuICAgICAgICAgICAgaWYgKGNvbnRCeXRlcyA+IDApIHsgLy8gV2UncmUgd2FpdGluZyBmb3IgaXQuXG4gICAgICAgICAgICAgICAgYWNjID0gKGFjYyA8PCA2KSB8IChjdXJCeXRlICYgMHgzZik7XG4gICAgICAgICAgICAgICAgY29udEJ5dGVzLS07IGFjY0J5dGVzKys7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRCeXRlcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3Igb3ZlcmxvbmcgZW5jb2RpbmcsIGJ1dCBzdXBwb3J0IE1vZGlmaWVkIFVURi04IChlbmNvZGluZyBOVUxMIGFzIEMwIDgwKVxuICAgICAgICAgICAgICAgICAgICBpZiAoYWNjQnl0ZXMgPT09IDIgJiYgYWNjIDwgMHg4MCAmJiBhY2MgPiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhY2NCeXRlcyA9PT0gMyAmJiBhY2MgPCAweDgwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWN0dWFsbHkgYWRkIGNoYXJhY3Rlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGFjYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gVW5leHBlY3RlZCBjb250aW51YXRpb24gYnl0ZVxuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFjYyA9IGFjYzsgdGhpcy5jb250Qnl0ZXMgPSBjb250Qnl0ZXM7IHRoaXMuYWNjQnl0ZXMgPSBhY2NCeXRlcztcbiAgICByZXR1cm4gcmVzO1xufVxuXG5JbnRlcm5hbERlY29kZXJDZXN1OC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlcyA9IDA7XG4gICAgaWYgKHRoaXMuY29udEJ5dGVzID4gMClcbiAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgIHJldHVybiByZXM7XG59XG4iLCJcInVzZSBzdHJpY3RcIlxuXG4vLyBTaW5nbGUtYnl0ZSBjb2RlYy4gTmVlZHMgYSAnY2hhcnMnIHN0cmluZyBwYXJhbWV0ZXIgdGhhdCBjb250YWlucyAyNTYgb3IgMTI4IGNoYXJzIHRoYXRcbi8vIGNvcnJlc3BvbmQgdG8gZW5jb2RlZCBieXRlcyAoaWYgMTI4IC0gdGhlbiBsb3dlciBoYWxmIGlzIEFTQ0lJKS4gXG5cbmV4cG9ydHMuX3NiY3MgPSBTQkNTQ29kZWM7XG5mdW5jdGlvbiBTQkNTQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIGlmICghY29kZWNPcHRpb25zKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTQkNTIGNvZGVjIGlzIGNhbGxlZCB3aXRob3V0IHRoZSBkYXRhLlwiKVxuICAgIFxuICAgIC8vIFByZXBhcmUgY2hhciBidWZmZXIgZm9yIGRlY29kaW5nLlxuICAgIGlmICghY29kZWNPcHRpb25zLmNoYXJzIHx8IChjb2RlY09wdGlvbnMuY2hhcnMubGVuZ3RoICE9PSAxMjggJiYgY29kZWNPcHRpb25zLmNoYXJzLmxlbmd0aCAhPT0gMjU2KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgJ1wiK2NvZGVjT3B0aW9ucy50eXBlK1wiJyBoYXMgaW5jb3JyZWN0ICdjaGFycycgKG11c3QgYmUgb2YgbGVuIDEyOCBvciAyNTYpXCIpO1xuICAgIFxuICAgIGlmIChjb2RlY09wdGlvbnMuY2hhcnMubGVuZ3RoID09PSAxMjgpIHtcbiAgICAgICAgdmFyIGFzY2lpU3RyaW5nID0gXCJcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMjg7IGkrKylcbiAgICAgICAgICAgIGFzY2lpU3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICAgIGNvZGVjT3B0aW9ucy5jaGFycyA9IGFzY2lpU3RyaW5nICsgY29kZWNPcHRpb25zLmNoYXJzO1xuICAgIH1cblxuICAgIHRoaXMuZGVjb2RlQnVmID0gbmV3IEJ1ZmZlcihjb2RlY09wdGlvbnMuY2hhcnMsICd1Y3MyJyk7XG4gICAgXG4gICAgLy8gRW5jb2RpbmcgYnVmZmVyLlxuICAgIHZhciBlbmNvZGVCdWYgPSBuZXcgQnVmZmVyKDY1NTM2KTtcbiAgICBlbmNvZGVCdWYuZmlsbChpY29udi5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUuY2hhckNvZGVBdCgwKSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGg7IGkrKylcbiAgICAgICAgZW5jb2RlQnVmW2NvZGVjT3B0aW9ucy5jaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7XG5cbiAgICB0aGlzLmVuY29kZUJ1ZiA9IGVuY29kZUJ1Zjtcbn1cblxuU0JDU0NvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gU0JDU0VuY29kZXI7XG5TQkNTQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBTQkNTRGVjb2RlcjtcblxuXG5mdW5jdGlvbiBTQkNTRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuZW5jb2RlQnVmID0gY29kZWMuZW5jb2RlQnVmO1xufVxuXG5TQkNTRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzdHIubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcbiAgICAgICAgYnVmW2ldID0gdGhpcy5lbmNvZGVCdWZbc3RyLmNoYXJDb2RlQXQoaSldO1xuICAgIFxuICAgIHJldHVybiBidWY7XG59XG5cblNCQ1NFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG5mdW5jdGlvbiBTQkNTRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuZGVjb2RlQnVmID0gY29kZWMuZGVjb2RlQnVmO1xufVxuXG5TQkNTRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICAvLyBTdHJpbmdzIGFyZSBpbW11dGFibGUgaW4gSlMgLT4gd2UgdXNlIHVjczIgYnVmZmVyIHRvIHNwZWVkIHVwIGNvbXB1dGF0aW9ucy5cbiAgICB2YXIgZGVjb2RlQnVmID0gdGhpcy5kZWNvZGVCdWY7XG4gICAgdmFyIG5ld0J1ZiA9IG5ldyBCdWZmZXIoYnVmLmxlbmd0aCoyKTtcbiAgICB2YXIgaWR4MSA9IDAsIGlkeDIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlkeDEgPSBidWZbaV0qMjsgaWR4MiA9IGkqMjtcbiAgICAgICAgbmV3QnVmW2lkeDJdID0gZGVjb2RlQnVmW2lkeDFdO1xuICAgICAgICBuZXdCdWZbaWR4MisxXSA9IGRlY29kZUJ1ZltpZHgxKzFdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QnVmLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cblNCQ1NEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cbiIsIlwidXNlIHN0cmljdFwiXG5cbi8vIEdlbmVyYXRlZCBkYXRhIGZvciBzYmNzIGNvZGVjLiBEb24ndCBlZGl0IG1hbnVhbGx5LiBSZWdlbmVyYXRlIHVzaW5nIGdlbmVyYXRpb24vZ2VuLXNiY3MuanMgc2NyaXB0LlxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFwiNDM3XCI6IFwiY3A0MzdcIixcbiAgXCI3MzdcIjogXCJjcDczN1wiLFxuICBcIjc3NVwiOiBcImNwNzc1XCIsXG4gIFwiODUwXCI6IFwiY3A4NTBcIixcbiAgXCI4NTJcIjogXCJjcDg1MlwiLFxuICBcIjg1NVwiOiBcImNwODU1XCIsXG4gIFwiODU2XCI6IFwiY3A4NTZcIixcbiAgXCI4NTdcIjogXCJjcDg1N1wiLFxuICBcIjg1OFwiOiBcImNwODU4XCIsXG4gIFwiODYwXCI6IFwiY3A4NjBcIixcbiAgXCI4NjFcIjogXCJjcDg2MVwiLFxuICBcIjg2MlwiOiBcImNwODYyXCIsXG4gIFwiODYzXCI6IFwiY3A4NjNcIixcbiAgXCI4NjRcIjogXCJjcDg2NFwiLFxuICBcIjg2NVwiOiBcImNwODY1XCIsXG4gIFwiODY2XCI6IFwiY3A4NjZcIixcbiAgXCI4NjlcIjogXCJjcDg2OVwiLFxuICBcIjg3NFwiOiBcIndpbmRvd3M4NzRcIixcbiAgXCI5MjJcIjogXCJjcDkyMlwiLFxuICBcIjEwNDZcIjogXCJjcDEwNDZcIixcbiAgXCIxMTI0XCI6IFwiY3AxMTI0XCIsXG4gIFwiMTEyNVwiOiBcImNwMTEyNVwiLFxuICBcIjExMjlcIjogXCJjcDExMjlcIixcbiAgXCIxMTMzXCI6IFwiY3AxMTMzXCIsXG4gIFwiMTE2MVwiOiBcImNwMTE2MVwiLFxuICBcIjExNjJcIjogXCJjcDExNjJcIixcbiAgXCIxMTYzXCI6IFwiY3AxMTYzXCIsXG4gIFwiMTI1MFwiOiBcIndpbmRvd3MxMjUwXCIsXG4gIFwiMTI1MVwiOiBcIndpbmRvd3MxMjUxXCIsXG4gIFwiMTI1MlwiOiBcIndpbmRvd3MxMjUyXCIsXG4gIFwiMTI1M1wiOiBcIndpbmRvd3MxMjUzXCIsXG4gIFwiMTI1NFwiOiBcIndpbmRvd3MxMjU0XCIsXG4gIFwiMTI1NVwiOiBcIndpbmRvd3MxMjU1XCIsXG4gIFwiMTI1NlwiOiBcIndpbmRvd3MxMjU2XCIsXG4gIFwiMTI1N1wiOiBcIndpbmRvd3MxMjU3XCIsXG4gIFwiMTI1OFwiOiBcIndpbmRvd3MxMjU4XCIsXG4gIFwiMjg1OTFcIjogXCJpc284ODU5MVwiLFxuICBcIjI4NTkyXCI6IFwiaXNvODg1OTJcIixcbiAgXCIyODU5M1wiOiBcImlzbzg4NTkzXCIsXG4gIFwiMjg1OTRcIjogXCJpc284ODU5NFwiLFxuICBcIjI4NTk1XCI6IFwiaXNvODg1OTVcIixcbiAgXCIyODU5NlwiOiBcImlzbzg4NTk2XCIsXG4gIFwiMjg1OTdcIjogXCJpc284ODU5N1wiLFxuICBcIjI4NTk4XCI6IFwiaXNvODg1OThcIixcbiAgXCIyODU5OVwiOiBcImlzbzg4NTk5XCIsXG4gIFwiMjg2MDBcIjogXCJpc284ODU5MTBcIixcbiAgXCIyODYwMVwiOiBcImlzbzg4NTkxMVwiLFxuICBcIjI4NjAzXCI6IFwiaXNvODg1OTEzXCIsXG4gIFwiMjg2MDRcIjogXCJpc284ODU5MTRcIixcbiAgXCIyODYwNVwiOiBcImlzbzg4NTkxNVwiLFxuICBcIjI4NjA2XCI6IFwiaXNvODg1OTE2XCIsXG4gIFwid2luZG93czg3NFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+977+977+977+94oCm77+977+977+977+977+977+977+977+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+977+977+977+977+977+977+977+9wqDguIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrvv73vv73vv73vv73guL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3guY7guY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnguZrguZvvv73vv73vv73vv71cIlxuICB9LFxuICBcIndpbjg3NFwiOiBcIndpbmRvd3M4NzRcIixcbiAgXCJjcDg3NFwiOiBcIndpbmRvd3M4NzRcIixcbiAgXCJ3aW5kb3dzMTI1MFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCa77+94oCe4oCm4oCg4oCh77+94oCwxaDigLnFmsWkxb3Fue+/veKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEosWh4oC6xZvFpcW+xbrCoMuHy5jFgcKkxITCpsKnwqjCqcWewqvCrMKtwq7Fu8KwwrHLm8WCwrTCtcK2wrfCuMSFxZ/Cu8S9y53EvsW8xZTDgcOCxILDhMS5xIbDh8SMw4nEmMOLxJrDjcOOxI7EkMWDxYfDk8OUxZDDlsOXxZjFrsOaxbDDnMOdxaLDn8WVw6HDosSDw6TEusSHw6fEjcOpxJnDq8Sbw63DrsSPxJHFhMWIw7PDtMWRw7bDt8WZxa/DusWxw7zDvcWjy5lcIlxuICB9LFxuICBcIndpbjEyNTBcIjogXCJ3aW5kb3dzMTI1MFwiLFxuICBcImNwMTI1MFwiOiBcIndpbmRvd3MxMjUwXCIsXG4gIFwid2luZG93czEyNTFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCC0IPigJrRk+KAnuKApuKAoOKAoeKCrOKAsNCJ4oC50IrQjNCL0I/RkuKAmOKAmeKAnOKAneKAouKAk+KAlO+/veKEotGZ4oC60ZrRnNGb0Z/CoNCO0Z7QiMKk0pDCpsKn0IHCqdCEwqvCrMKtwq7Qh8KwwrHQhtGW0pHCtcK2wrfRkeKEltGUwrvRmNCF0ZXRl9CQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGPXCJcbiAgfSxcbiAgXCJ3aW4xMjUxXCI6IFwid2luZG93czEyNTFcIixcbiAgXCJjcDEyNTFcIjogXCJ3aW5kb3dzMTI1MVwiLFxuICBcIndpbmRvd3MxMjUyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCwxaDigLnFku+/vcW977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLFoeKAusWT77+9xb7FuMKgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CrsKvwrDCscKywrPCtMK1wrbCt8K4wrnCusK7wrzCvcK+wr/DgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5fDmMOZw5rDm8Ocw53DnsOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO3w7jDucO6w7vDvMO9w77Dv1wiXG4gIH0sXG4gIFwid2luMTI1MlwiOiBcIndpbmRvd3MxMjUyXCIsXG4gIFwiY3AxMjUyXCI6IFwid2luZG93czEyNTJcIixcbiAgXCJ3aW5kb3dzMTI1M1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCaxpLigJ7igKbigKDigKHvv73igLDvv73igLnvv73vv73vv73vv73vv73igJjigJnigJzigJ3igKLigJPigJTvv73ihKLvv73igLrvv73vv73vv73vv73CoM6FzobCo8KkwqXCpsKnwqjCqe+/vcKrwqzCrcKu4oCVwrDCscKywrPOhMK1wrbCt86IzonOisK7zozCvc6Ozo/OkM6RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHvv73Oo86kzqXOps6nzqjOqc6qzqvOrM6tzq7Or86wzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bPh8+Iz4nPis+Lz4zPjc+O77+9XCJcbiAgfSxcbiAgXCJ3aW4xMjUzXCI6IFwid2luZG93czEyNTNcIixcbiAgXCJjcDEyNTNcIjogXCJ3aW5kb3dzMTI1M1wiLFxuICBcIndpbmRvd3MxMjU0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCwxaDigLnFku+/ve+/ve+/ve+/veKAmOKAmeKAnOKAneKAouKAk+KAlMuc4oSixaHigLrFk++/ve+/vcW4wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPxJ7DkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zEsMWew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Sfw7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8xLHFn8O/XCJcbiAgfSxcbiAgXCJ3aW4xMjU0XCI6IFwid2luZG93czEyNTRcIixcbiAgXCJjcDEyNTRcIjogXCJ3aW5kb3dzMTI1NFwiLFxuICBcIndpbmRvd3MxMjU1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCw77+94oC577+977+977+977+977+94oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLvv73igLrvv73vv73vv73vv73CoMKhwqLCo+KCqsKlwqbCp8KowqnDl8KrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucO3wrvCvMK9wr7Cv9aw1rHWstaz1rTWtda21rfWuNa577+91rvWvNa91r7Wv9eA14HXgteD17DXsdey17PXtO+/ve+/ve+/ve+/ve+/ve+/ve+/vdeQ15HXkteT15TXldeW15fXmNeZ15rXm9ec153Xntef16DXodei16PXpNel16bXp9eo16nXqu+/ve+/veKAjuKAj++/vVwiXG4gIH0sXG4gIFwid2luMTI1NVwiOiBcIndpbmRvd3MxMjU1XCIsXG4gIFwiY3AxMjU1XCI6IFwid2luZG93czEyNTVcIixcbiAgXCJ3aW5kb3dzMTI1NlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs2b7igJrGkuKAnuKApuKAoOKAocuG4oCw2bnigLnFktqG2pjaiNqv4oCY4oCZ4oCc4oCd4oCi4oCT4oCU2qnihKLakeKAusWT4oCM4oCN2rrCoNiMwqLCo8KkwqXCpsKnwqjCqdq+wqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK52JvCu8K8wr3Cvtif24HYodii2KPYpNil2KbYp9io2KnYqtir2KzYrdiu2K/YsNix2LLYs9i02LXYtsOX2LfYuNi52LrZgNmB2YLZg8Og2YTDotmF2YbZh9mIw6fDqMOpw6rDq9mJ2YrDrsOv2YvZjNmN2Y7DtNmP2ZDDt9mRw7nZksO7w7zigI7igI/bklwiXG4gIH0sXG4gIFwid2luMTI1NlwiOiBcIndpbmRvd3MxMjU2XCIsXG4gIFwiY3AxMjU2XCI6IFwid2luZG93czEyNTZcIixcbiAgXCJ3aW5kb3dzMTI1N1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4oKs77+94oCa77+94oCe4oCm4oCg4oCh77+94oCw77+94oC577+9wqjLh8K477+94oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSi77+94oC677+9wq/Lm++/vcKg77+9wqLCo8Kk77+9wqbCp8OYwqnFlsKrwqzCrcKuw4bCsMKxwrLCs8K0wrXCtsK3w7jCucWXwrvCvMK9wr7DpsSExK7EgMSGw4TDhcSYxJLEjMOJxbnElsSixLbEqsS7xaDFg8WFw5PFjMOVw5bDl8WyxYHFmsWqw5zFu8W9w5/EhcSvxIHEh8Okw6XEmcSTxI3DqcW6xJfEo8S3xKvEvMWhxYTFhsOzxY3DtcO2w7fFs8WCxZvFq8O8xbzFvsuZXCJcbiAgfSxcbiAgXCJ3aW4xMjU3XCI6IFwid2luZG93czEyNTdcIixcbiAgXCJjcDEyNTdcIjogXCJ3aW5kb3dzMTI1N1wiLFxuICBcIndpbmRvd3MxMjU4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLigqzvv73igJrGkuKAnuKApuKAoOKAocuG4oCw77+94oC5xZLvv73vv73vv73vv73igJjigJnigJzigJ3igKLigJPigJTLnOKEou+/veKAusWT77+977+9xbjCoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCxILDhMOFw4bDh8OIw4nDisOLzIDDjcOOw4/EkMORzInDk8OUxqDDlsOXw5jDmcOaw5vDnMavzIPDn8Ogw6HDosSDw6TDpcOmw6fDqMOpw6rDq8yBw63DrsOvxJHDscyjw7PDtMahw7bDt8O4w7nDusO7w7zGsOKCq8O/XCJcbiAgfSxcbiAgXCJ3aW4xMjU4XCI6IFwid2luZG93czEyNThcIixcbiAgXCJjcDEyNThcIjogXCJ3aW5kb3dzMTI1OFwiLFxuICBcImlzbzg4NTkxXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zDncOew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/XCJcbiAgfSxcbiAgXCJjcDI4NTkxXCI6IFwiaXNvODg1OTFcIixcbiAgXCJpc284ODU5MlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgxITLmMWBwqTEvcWawqfCqMWgxZ7FpMW5wq3FvcW7wrDEhcubxYLCtMS+xZvLh8K4xaHFn8WlxbrLncW+xbzFlMOBw4LEgsOExLnEhsOHxIzDicSYw4vEmsONw47EjsSQxYPFh8OTw5TFkMOWw5fFmMWuw5rFsMOcw53FosOfxZXDocOixIPDpMS6xIfDp8SNw6nEmcOrxJvDrcOuxI/EkcWExYjDs8O0xZHDtsO3xZnFr8O6xbHDvMO9xaPLmVwiXG4gIH0sXG4gIFwiY3AyODU5MlwiOiBcImlzbzg4NTkyXCIsXG4gIFwiaXNvODg1OTNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMSmy5jCo8Kk77+9xKTCp8KoxLDFnsSexLTCre+/vcW7wrDEp8KywrPCtMK1xKXCt8K4xLHFn8SfxLXCve+/vcW8w4DDgcOC77+9w4TEisSIw4fDiMOJw4rDi8OMw43DjsOP77+9w5HDksOTw5TEoMOWw5fEnMOZw5rDm8OcxazFnMOfw6DDocOi77+9w6TEi8SJw6fDqMOpw6rDq8Osw63DrsOv77+9w7HDssOzw7TEocO2w7fEncO5w7rDu8O8xa3FncuZXCJcbiAgfSxcbiAgXCJjcDI4NTkzXCI6IFwiaXNvODg1OTNcIixcbiAgXCJpc284ODU5NFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgxITEuMWWwqTEqMS7wqfCqMWgxJLEosWmwq3FvcKvwrDEhcubxZfCtMSpxLzLh8K4xaHEk8SjxafFisW+xYvEgMOBw4LDg8OEw4XDhsSuxIzDicSYw4vElsONw47EqsSQxYXFjMS2w5TDlcOWw5fDmMWyw5rDm8OcxajFqsOfxIHDocOiw6PDpMOlw6bEr8SNw6nEmcOrxJfDrcOuxKvEkcWGxY3Et8O0w7XDtsO3w7jFs8O6w7vDvMWpxavLmVwiXG4gIH0sXG4gIFwiY3AyODU5NFwiOiBcImlzbzg4NTk0XCIsXG4gIFwiaXNvODg1OTVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoNCB0ILQg9CE0IXQhtCH0IjQidCK0IvQjMKt0I7Qj9CQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP4oSW0ZHRktGT0ZTRldGW0ZfRmNGZ0ZrRm9GcwqfRntGfXCJcbiAgfSxcbiAgXCJjcDI4NTk1XCI6IFwiaXNvODg1OTVcIixcbiAgXCJpc284ODU5NlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kg77+977+977+9wqTvv73vv73vv73vv73vv73vv73vv73YjMKt77+977+977+977+977+977+977+977+977+977+977+977+977+92Jvvv73vv73vv73Yn++/vdih2KLYo9ik2KXYptin2KjYqdiq2KvYrNit2K7Yr9iw2LHYstiz2LTYtdi22LfYuNi52Lrvv73vv73vv73vv73vv73ZgNmB2YLZg9mE2YXZhtmH2YjZidmK2YvZjNmN2Y7Zj9mQ2ZHZku+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwiY3AyODU5NlwiOiBcImlzbzg4NTk2XCIsXG4gIFwiaXNvODg1OTdcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoOKAmOKAmcKj4oKs4oKvwqbCp8KowqnNusKrwqzCre+/veKAlcKwwrHCssKzzoTOhc6GwrfOiM6JzorCu86Mwr3Ojs6PzpDOkc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6h77+9zqPOpM6lzqbOp86ozqnOqs6rzqzOrc6uzq/OsM6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Dz4TPhc+Gz4fPiM+Jz4rPi8+Mz43Pju+/vVwiXG4gIH0sXG4gIFwiY3AyODU5N1wiOiBcImlzbzg4NTk3XCIsXG4gIFwiaXNvODg1OThcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoO+/vcKiwqPCpMKlwqbCp8KowqnDl8KrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucO3wrvCvMK9wr7vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73igJfXkNeR15LXk9eU15XXlteX15jXmdea15vXnNed157Xn9eg16HXotej16TXpdem16fXqNep16rvv73vv73igI7igI/vv71cIlxuICB9LFxuICBcImNwMjg1OThcIjogXCJpc284ODU5OFwiLFxuICBcImlzbzg4NTk5XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8OAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPxJ7DkcOSw5PDlMOVw5bDl8OYw5nDmsObw5zEsMWew5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Sfw7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8xLHFn8O/XCJcbiAgfSxcbiAgXCJjcDI4NTk5XCI6IFwiaXNvODg1OTlcIixcbiAgXCJpc284ODU5MTBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMSExJLEosSqxKjEtsKnxLvEkMWgxabFvcKtxarFisKwxIXEk8SjxKvEqcS3wrfEvMSRxaHFp8W+4oCVxavFi8SAw4HDgsODw4TDhcOGxK7EjMOJxJjDi8SWw43DjsOPw5DFhcWMw5PDlMOVw5bFqMOYxbLDmsObw5zDncOew5/EgcOhw6LDo8Okw6XDpsSvxI3DqcSZw6vEl8Otw67Dr8OwxYbFjcOzw7TDtcO2xanDuMWzw7rDu8O8w73DvsS4XCJcbiAgfSxcbiAgXCJjcDI4NjAwXCI6IFwiaXNvODg1OTEwXCIsXG4gIFwiaXNvODg1OTExXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDguIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrvv73vv73vv73vv73guL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3guY7guY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnguZrguZvvv73vv73vv73vv71cIlxuICB9LFxuICBcImNwMjg2MDFcIjogXCJpc284ODU5MTFcIixcbiAgXCJpc284ODU5MTNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoOKAncKiwqPCpOKAnsKmwqfDmMKpxZbCq8Kswq3CrsOGwrDCscKywrPigJzCtcK2wrfDuMK5xZfCu8K8wr3CvsOmxITErsSAxIbDhMOFxJjEksSMw4nFucSWxKLEtsSqxLvFoMWDxYXDk8WMw5XDlsOXxbLFgcWaxarDnMW7xb3Dn8SFxK/EgcSHw6TDpcSZxJPEjcOpxbrEl8SjxLfEq8S8xaHFhMWGw7PFjcO1w7bDt8WzxYLFm8Wrw7zFvMW+4oCZXCJcbiAgfSxcbiAgXCJjcDI4NjAzXCI6IFwiaXNvODg1OTEzXCIsXG4gIFwiaXNvODg1OTE0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDhuILhuIPCo8SKxIvhuIrCp+G6gMKp4bqC4biL4buywq3CrsW44bie4bifxKDEoeG5gOG5gcK24bmW4bqB4bmX4bqD4bmg4buz4bqE4bqF4bmhw4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/FtMORw5LDk8OUw5XDluG5qsOYw5nDmsObw5zDncW2w5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8W1w7HDssOzw7TDtcO24bmrw7jDucO6w7vDvMO9xbfDv1wiXG4gIH0sXG4gIFwiY3AyODYwNFwiOiBcImlzbzg4NTkxNFwiLFxuICBcImlzbzg4NTkxNVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKj4oKswqXFoMKnxaHCqcKqwqvCrMKtwq7Cr8KwwrHCssKzxb3CtcK2wrfFvsK5wrrCu8WSxZPFuMK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdw57Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w79cIlxuICB9LFxuICBcImNwMjg2MDVcIjogXCJpc284ODU5MTVcIixcbiAgXCJpc284ODU5MTZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoMSExIXFgeKCrOKAnsWgwqfFocKpyJjCq8W5wq3FusW7wrDCscSMxYLFveKAncK2wrfFvsSNyJnCu8WSxZPFuMW8w4DDgcOCxILDhMSGw4bDh8OIw4nDisOLw4zDjcOOw4/EkMWDw5LDk8OUxZDDlsWaxbDDmcOaw5vDnMSYyJrDn8Ogw6HDosSDw6TEh8Omw6fDqMOpw6rDq8Osw63DrsOvxJHFhMOyw7PDtMWRw7bFm8Wxw7nDusO7w7zEmcibw79cIlxuICB9LFxuICBcImNwMjg2MDZcIjogXCJpc284ODU5MTZcIixcbiAgXCJjcDQzN1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcwqLCo8Kl4oKnxpLDocOtw7PDusOxw5HCqsK6wr/ijJDCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm00MzdcIjogXCJjcDQzN1wiLFxuICBcImNzaWJtNDM3XCI6IFwiY3A0MzdcIixcbiAgXCJjcDczN1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwizpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6pzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4LPhM+Fz4bPh8+I4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAz4nOrM6tzq7Pis6vz4zPjc+Lz47Ohs6IzonOis6Mzo7Oj8Kx4oml4omkzqrOq8O34omIwrDiiJnCt+KImuKBv8Ky4pagwqBcIlxuICB9LFxuICBcImlibTczN1wiOiBcImNwNzM3XCIsXG4gIFwiY3NpYm03MzdcIjogXCJjcDczN1wiLFxuICBcImNwNzc1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLEhsO8w6nEgcOkxKPDpcSHxYLEk8WWxZfEq8W5w4TDhcOJw6bDhsWNw7bEosKixZrFm8OWw5zDuMKjw5jDl8KkxIDEqsOzxbvFvMW64oCdwqbCqcKuwqzCvcK8xYHCq8K74paR4paS4paT4pSC4pSkxITEjMSYxJbilaPilZHilZfilZ3ErsWg4pSQ4pSU4pS04pSs4pSc4pSA4pS8xbLFquKVmuKVlOKVqeKVpuKVoOKVkOKVrMW9xIXEjcSZxJfEr8WhxbPFq8W+4pSY4pSM4paI4paE4paM4paQ4paAw5PDn8WMxYPDtcOVwrXFhMS2xLfEu8S8xYbEksWF4oCZwq3CseKAnMK+wrbCp8O34oCewrDiiJnCt8K5wrPCsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm03NzVcIjogXCJjcDc3NVwiLFxuICBcImNzaWJtNzc1XCI6IFwiY3A3NzVcIixcbiAgXCJjcDg1MFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOvw67DrMOEw4XDicOmw4bDtMO2w7LDu8O5w7/DlsOcw7jCo8OYw5fGksOhw63Ds8O6w7HDkcKqwrrCv8KuwqzCvcK8wqHCq8K74paR4paS4paT4pSC4pSkw4HDgsOAwqnilaPilZHilZfilZ3CosKl4pSQ4pSU4pS04pSs4pSc4pSA4pS8w6PDg+KVmuKVlOKVqeKVpuKVoOKVkOKVrMKkw7DDkMOKw4vDiMSxw43DjsOP4pSY4pSM4paI4paEwqbDjOKWgMOTw5/DlMOSw7XDlcK1w77DnsOaw5vDmcO9w53Cr8K0wq3CseKAl8K+wrbCp8O3wrjCsMKowrfCucKzwrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODUwXCI6IFwiY3A4NTBcIixcbiAgXCJjc2libTg1MFwiOiBcImNwODUwXCIsXG4gIFwiY3A4NTJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TFr8SHw6fFgsOrxZDFkcOuxbnDhMSGw4nEucS6w7TDtsS9xL7FmsWbw5bDnMWkxaXFgcOXxI3DocOtw7PDusSExIXFvcW+xJjEmcKsxbrEjMWfwqvCu+KWkeKWkuKWk+KUguKUpMOBw4LEmsWe4pWj4pWR4pWX4pWdxbvFvOKUkOKUlOKUtOKUrOKUnOKUgOKUvMSCxIPilZrilZTilanilabilaDilZDilazCpMSRxJDEjsOLxI/Fh8ONw47Em+KUmOKUjOKWiOKWhMWixa7iloDDk8Ofw5TFg8WExYjFoMWhxZTDmsWVxbDDvcOdxaPCtMKty53Lm8uHy5jCp8O3wrjCsMKoy5nFscWYxZnilqDCoFwiXG4gIH0sXG4gIFwiaWJtODUyXCI6IFwiY3A4NTJcIixcbiAgXCJjc2libTg1MlwiOiBcImNwODUyXCIsXG4gIFwiY3A4NTVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItGS0ILRk9CD0ZHQgdGU0ITRldCF0ZbQhtGX0IfRmNCI0ZnQidGa0IrRm9CL0ZzQjNGe0I7Rn9CP0Y7QrtGK0KrQsNCQ0LHQkdGG0KbQtNCU0LXQldGE0KTQs9CTwqvCu+KWkeKWkuKWk+KUguKUpNGF0KXQuNCY4pWj4pWR4pWX4pWd0LnQmeKUkOKUlOKUtOKUrOKUnOKUgOKUvNC60JrilZrilZTilanilabilaDilZDilazCpNC70JvQvNCc0L3QndC+0J7Qv+KUmOKUjOKWiOKWhNCf0Y/iloDQr9GA0KDRgdCh0YLQotGD0KPQttCW0LLQktGM0KzihJbCrdGL0KvQt9CX0YjQqNGN0K3RidCp0YfQp8Kn4pagwqBcIlxuICB9LFxuICBcImlibTg1NVwiOiBcImNwODU1XCIsXG4gIFwiY3NpYm04NTVcIjogXCJjcDg1NVwiLFxuICBcImNwODU2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLXkNeR15LXk9eU15XXlteX15jXmdea15vXnNed157Xn9eg16HXotej16TXpdem16fXqNep16rvv73Co++/vcOX77+977+977+977+977+977+977+977+977+977+9wq7CrMK9wrzvv73Cq8K74paR4paS4paT4pSC4pSk77+977+977+9wqnilaPilZHilZfilZ3CosKl4pSQ4pSU4pS04pSs4pSc4pSA4pS877+977+94pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTvv73vv73vv73vv73vv73vv73vv73vv73vv73ilJjilIzilojiloTCpu+/veKWgO+/ve+/ve+/ve+/ve+/ve+/vcK177+977+977+977+977+977+977+9wq/CtMKtwrHigJfCvsK2wqfDt8K4wrDCqMK3wrnCs8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg1NlwiOiBcImNwODU2XCIsXG4gIFwiY3NpYm04NTZcIjogXCJjcDg1NlwiLFxuICBcImNwODU3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsSxw4TDhcOJw6bDhsO0w7bDssO7w7nEsMOWw5zDuMKjw5jFnsWfw6HDrcOzw7rDscORxJ7En8K/wq7CrMK9wrzCocKrwrvilpHilpLilpPilILilKTDgcOCw4DCqeKVo+KVkeKVl+KVncKiwqXilJDilJTilLTilKzilJzilIDilLzDo8OD4pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTCusKqw4rDi8OI77+9w43DjsOP4pSY4pSM4paI4paEwqbDjOKWgMOTw5/DlMOSw7XDlcK177+9w5fDmsObw5nDrMO/wq/CtMKtwrHvv73CvsK2wqfDt8K4wrDCqMK3wrnCs8Ky4pagwqBcIlxuICB9LFxuICBcImlibTg1N1wiOiBcImNwODU3XCIsXG4gIFwiY3NpYm04NTdcIjogXCJjcDg1N1wiLFxuICBcImNwODU4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDh8O8w6nDosOkw6DDpcOnw6rDq8Oow6/DrsOsw4TDhcOJw6bDhsO0w7bDssO7w7nDv8OWw5zDuMKjw5jDl8aSw6HDrcOzw7rDscORwqrCusK/wq7CrMK9wrzCocKrwrvilpHilpLilpPilILilKTDgcOCw4DCqeKVo+KVkeKVl+KVncKiwqXilJDilJTilLTilKzilJzilIDilLzDo8OD4pWa4pWU4pWp4pWm4pWg4pWQ4pWswqTDsMOQw4rDi8OI4oKsw43DjsOP4pSY4pSM4paI4paEwqbDjOKWgMOTw5/DlMOSw7XDlcK1w77DnsOaw5vDmcO9w53Cr8K0wq3CseKAl8K+wrbCp8O3wrjCsMKowrfCucKzwrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODU4XCI6IFwiY3A4NThcIixcbiAgXCJjc2libTg1OFwiOiBcImNwODU4XCIsXG4gIFwiY3A4NjBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6PDoMOBw6fDqsOKw6jDjcOUw6zDg8OCw4nDgMOIw7TDtcOyw5rDucOMw5XDnMKiwqPDmeKCp8OTw6HDrcOzw7rDscORwqrCusK/w5LCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjBcIjogXCJjcDg2MFwiLFxuICBcImNzaWJtODYwXCI6IFwiY3A4NjBcIixcbiAgXCJjcDg2MVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDpMOgw6XDp8Oqw6vDqMOQw7DDnsOEw4XDicOmw4bDtMO2w77Du8Odw73DlsOcw7jCo8OY4oKnxpLDocOtw7PDusOBw43Dk8Oawr/ijJDCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjFcIjogXCJjcDg2MVwiLFxuICBcImNzaWJtODYxXCI6IFwiY3A4NjFcIixcbiAgXCJjcDg2MlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi15DXkdeS15PXlNeV15bXl9eY15nXmteb15zXndee15/XoNeh16LXo9ek16XXpten16jXqdeqwqLCo8Kl4oKnxpLDocOtw7PDusOxw5HCqsK6wr/ijJDCrMK9wrzCocKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjJcIjogXCJjcDg2MlwiLFxuICBcImNzaWJtODYyXCI6IFwiY3A4NjJcIixcbiAgXCJjcDg2M1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4fDvMOpw6LDgsOgwrbDp8Oqw6vDqMOvw67igJfDgMKnw4nDiMOKw7TDi8OPw7vDucKkw5TDnMKiwqPDmcObxpLCpsK0w7PDusKowrjCs8Kvw47ijJDCrMK9wrzCvsKrwrvilpHilpLilpPilILilKTilaHilaLilZbilZXilaPilZHilZfilZ3ilZzilZvilJDilJTilLTilKzilJzilIDilLzilZ7ilZ/ilZrilZTilanilabilaDilZDilazilafilajilaTilaXilZnilZjilZLilZPilavilarilJjilIzilojiloTilozilpDiloDOscOfzpPPgM6jz4PCtc+EzqbOmM6pzrTiiJ7Phs614oip4omhwrHiiaXiiaTijKDijKHDt+KJiMKw4oiZwrfiiJrigb/CsuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjNcIjogXCJjcDg2M1wiLFxuICBcImNzaWJtODYzXCI6IFwiY3A4NjNcIixcbiAgXCJjcDg2NFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyTZqiYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f8KwwrfiiJniiJrilpLilIDilILilLzilKTilKzilJzilLTilJDilIzilJTilJjOsuKIns+GwrHCvcK84omIwqvCu++7t++7uO+/ve+/ve+7u++7vO+/vcKgwq3vuoLCo8Kk77qE77+977+977qO77qP77qV77qZ2Izvup3vuqHvuqXZoNmh2aLZo9mk2aXZptmn2ajZqe+7kdib77qx77q177q52J/Cou+6gO+6ge+6g++6he+7iu+6i++6je+6ke+6k++6l++6m++6n++6o++6p++6qe+6q++6re+6r++6s++6t++6u++6v++7ge+7he+7i++7j8KmwqzDt8OX77uJ2YDvu5Pvu5fvu5vvu5/vu6Pvu6fvu6vvu63vu6/vu7Pvur3vu4zvu47vu43vu6Hvub3Zke+7pe+7qe+7rO+7sO+7su+7kO+7le+7te+7tu+7ne+7me+7seKWoO+/vVwiXG4gIH0sXG4gIFwiaWJtODY0XCI6IFwiY3A4NjRcIixcbiAgXCJjc2libTg2NFwiOiBcImNwODY0XCIsXG4gIFwiY3A4NjVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOHw7zDqcOiw6TDoMOlw6fDqsOrw6jDr8Ouw6zDhMOFw4nDpsOGw7TDtsOyw7vDucO/w5bDnMO4wqPDmOKCp8aSw6HDrcOzw7rDscORwqrCusK/4oyQwqzCvcK8wqHCq8Kk4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paAzrHDn86Tz4DOo8+DwrXPhM6mzpjOqc604oiez4bOteKIqeKJocKx4oml4omk4oyg4oyhw7fiiYjCsOKImcK34oia4oG/wrLilqDCoFwiXG4gIH0sXG4gIFwiaWJtODY1XCI6IFwiY3A4NjVcIixcbiAgXCJjc2libTg2NVwiOiBcImNwODY1XCIsXG4gIFwiY3A4NjZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv+KWkeKWkuKWk+KUguKUpOKVoeKVouKVluKVleKVo+KVkeKVl+KVneKVnOKVm+KUkOKUlOKUtOKUrOKUnOKUgOKUvOKVnuKVn+KVmuKVlOKVqeKVpuKVoOKVkOKVrOKVp+KVqOKVpOKVpeKVmeKVmOKVkuKVk+KVq+KVquKUmOKUjOKWiOKWhOKWjOKWkOKWgNGA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0IHRkdCE0ZTQh9GX0I7RnsKw4oiZwrfiiJrihJbCpOKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjZcIjogXCJjcDg2NlwiLFxuICBcImNzaWJtODY2XCI6IFwiY3A4NjZcIixcbiAgXCJjcDg2OVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi77+977+977+977+977+977+9zobvv73Ct8KswqbigJjigJnOiOKAlc6JzorOqs6M77+977+9zo7Oq8Kpzo/CssKzzqzCo86tzq7Or8+KzpDPjM+NzpHOks6TzpTOlc6WzpfCvc6YzpnCq8K74paR4paS4paT4pSC4pSkzprOm86czp3ilaPilZHilZfilZ3Ons6f4pSQ4pSU4pS04pSs4pSc4pSA4pS8zqDOoeKVmuKVlOKVqeKVpuKVoOKVkOKVrM6jzqTOpc6mzqfOqM6pzrHOss6z4pSY4pSM4paI4paEzrTOteKWgM62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4LPhM6Ewq3Csc+Fz4bPh8Knz4jOhcKwwqjPic+LzrDPjuKWoMKgXCJcbiAgfSxcbiAgXCJpYm04NjlcIjogXCJjcDg2OVwiLFxuICBcImNzaWJtODY5XCI6IFwiY3A4NjlcIixcbiAgXCJjcDkyMlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKjwqTCpcKmwqfCqMKpwqrCq8Kswq3CruKAvsKwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/FoMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdxb3Dn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvxaHDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcW+w79cIlxuICB9LFxuICBcImlibTkyMlwiOiBcImNwOTIyXCIsXG4gIFwiY3NpYm05MjJcIjogXCJjcDkyMlwiLFxuICBcImNwMTA0NlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi77qIw5fDt++jtu+jte+jtO+jt++5scKI4pag4pSC4pSA4pSQ4pSM4pSU4pSY77m577m777m977m/77m377qK77uw77uz77uy77uO77uP77uQ77u277u477u677u8wqDvo7rvo7nvo7jCpO+ju++6i++6ke+6l++6m++6n++6o9iMwq3vuqfvurPZoNmh2aLZo9mk2aXZptmn2ajZqe+6t9ib77q777q/77uK2J/vu4vYodii2KPYpNil2KbYp9io2KnYqtir2KzYrdiu2K/YsNix2LLYs9i02LXYtti377uH2LnYuu+7jO+6gu+6hO+6ju+7k9mA2YHZgtmD2YTZhdmG2YfZiNmJ2YrZi9mM2Y3ZjtmP2ZDZkdmS77uX77ub77uf76O877u177u377u577u777uj77un77us77up77+9XCJcbiAgfSxcbiAgXCJpYm0xMDQ2XCI6IFwiY3AxMDQ2XCIsXG4gIFwiY3NpYm0xMDQ2XCI6IFwiY3AxMDQ2XCIsXG4gIFwiY3AxMTI0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDQgdCC0pDQhNCF0IbQh9CI0InQitCL0IzCrdCO0I/QkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj+KEltGR0ZLSkdGU0ZXRltGX0ZjRmdGa0ZvRnMKn0Z7Rn1wiXG4gIH0sXG4gIFwiaWJtMTEyNFwiOiBcImNwMTEyNFwiLFxuICBcImNzaWJtMTEyNFwiOiBcImNwMTEyNFwiLFxuICBcImNwMTEyNVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paA0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/QgdGR0pDSkdCE0ZTQhtGW0IfRl8K34oia4oSWwqTilqDCoFwiXG4gIH0sXG4gIFwiaWJtMTEyNVwiOiBcImNwMTEyNVwiLFxuICBcImNzaWJtMTEyNVwiOiBcImNwMTEyNVwiLFxuICBcImNwMTEyOVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKjwqTCpcKmwqfFk8KpwqrCq8Kswq3CrsKvwrDCscKywrPFuMK1wrbCt8WSwrnCusK7wrzCvcK+wr/DgMOBw4LEgsOEw4XDhsOHw4jDicOKw4vMgMONw47Dj8SQw5HMicOTw5TGoMOWw5fDmMOZw5rDm8Ocxq/Mg8Ofw6DDocOixIPDpMOlw6bDp8Oow6nDqsOrzIHDrcOuw6/EkcOxzKPDs8O0xqHDtsO3w7jDucO6w7vDvMaw4oKrw79cIlxuICB9LFxuICBcImlibTExMjlcIjogXCJjcDExMjlcIixcbiAgXCJjc2libTExMjlcIjogXCJjcDExMjlcIixcbiAgXCJjcDExMzNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHCgsKDwoTChcKGwofCiMKJworCi8KMwo3CjsKPwpDCkcKSwpPClMKVwpbCl8KYwpnCmsKbwpzCncKewp/CoOC6geC6guC6hOC6h+C6iOC6quC6iuC6jeC6lOC6leC6luC6l+C6meC6muC6m+C6nOC6neC6nuC6n+C6oeC6ouC6o+C6peC6p+C6q+C6reC6ru+/ve+/ve+/veC6r+C6sOC6suC6s+C6tOC6teC6tuC6t+C6uOC6ueC6vOC6seC6u+C6ve+/ve+/ve+/veC7gOC7geC7guC7g+C7hOC7iOC7ieC7iuC7i+C7jOC7jeC7hu+/veC7nOC7neKCre+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/veC7kOC7keC7kuC7k+C7lOC7leC7luC7l+C7mOC7me+/ve+/vcKiwqzCpu+/vVwiXG4gIH0sXG4gIFwiaWJtMTEzM1wiOiBcImNwMTEzM1wiLFxuICBcImNzaWJtMTEzM1wiOiBcImNwMTEzM1wiLFxuICBcImNwMTE2MVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+94LmI4LiB4LiC4LiD4LiE4LiF4LiG4LiH4LiI4LiJ4LiK4LiL4LiM4LiN4LiO4LiP4LiQ4LiR4LiS4LiT4LiU4LiV4LiW4LiX4LiY4LiZ4Lia4Lib4Lic4Lid4Lie4Lif4Lig4Lih4Lii4Lij4Lik4Lil4Lim4Lin4Lio4Lip4Liq4Lir4Lis4Lit4Liu4Liv4Liw4Lix4Liy4Liz4Li04Li14Li24Li34Li44Li54Li64LmJ4LmK4LmL4oKs4Li/4LmA4LmB4LmC4LmD4LmE4LmF4LmG4LmH4LmI4LmJ4LmK4LmL4LmM4LmN4LmO4LmP4LmQ4LmR4LmS4LmT4LmU4LmV4LmW4LmX4LmY4LmZ4Lma4LmbwqLCrMKmwqBcIlxuICB9LFxuICBcImlibTExNjFcIjogXCJjcDExNjFcIixcbiAgXCJjc2libTExNjFcIjogXCJjcDExNjFcIixcbiAgXCJjcDExNjJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIuKCrMKBwoLCg8KE4oCmwobCh8KIwonCisKLwozCjcKOwo/CkOKAmOKAmeKAnOKAneKAouKAk+KAlMKYwpnCmsKbwpzCncKewp/CoOC4geC4guC4g+C4hOC4heC4huC4h+C4iOC4ieC4iuC4i+C4jOC4jeC4juC4j+C4kOC4keC4kuC4k+C4lOC4leC4luC4l+C4mOC4meC4muC4m+C4nOC4neC4nuC4n+C4oOC4oeC4ouC4o+C4pOC4peC4puC4p+C4qOC4qeC4quC4q+C4rOC4reC4ruC4r+C4sOC4seC4suC4s+C4tOC4teC4tuC4t+C4uOC4ueC4uu+/ve+/ve+/ve+/veC4v+C5gOC5geC5guC5g+C5hOC5heC5huC5h+C5iOC5ieC5iuC5i+C5jOC5jeC5juC5j+C5kOC5keC5kuC5k+C5lOC5leC5luC5l+C5mOC5meC5muC5m++/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwiaWJtMTE2MlwiOiBcImNwMTE2MlwiLFxuICBcImNzaWJtMTE2MlwiOiBcImNwMTE2MlwiLFxuICBcImNwMTE2M1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8KgwqHCosKj4oKswqXCpsKnxZPCqcKqwqvCrMKtwq7Cr8KwwrHCssKzxbjCtcK2wrfFksK5wrrCu8K8wr3CvsK/w4DDgcOCxILDhMOFw4bDh8OIw4nDisOLzIDDjcOOw4/EkMORzInDk8OUxqDDlsOXw5jDmcOaw5vDnMavzIPDn8Ogw6HDosSDw6TDpcOmw6fDqMOpw6rDq8yBw63DrsOvxJHDscyjw7PDtMahw7bDt8O4w7nDusO7w7zGsOKCq8O/XCJcbiAgfSxcbiAgXCJpYm0xMTYzXCI6IFwiY3AxMTYzXCIsXG4gIFwiY3NpYm0xMTYzXCI6IFwiY3AxMTYzXCIsXG4gIFwibWFjY3JvYXRpYW5cIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsWg4oSiwrTCqOKJoMW9w5jiiJ7CseKJpOKJpeKIhsK14oiC4oiR4oiPxaHiiKvCqsK64oSmxb7DuMK/wqHCrOKImsaS4omIxIbCq8SM4oCmwqDDgMODw5XFksWTxJDigJTigJzigJ3igJjigJnDt+KXiu+/vcKp4oGEwqTigLnigLrDhsK74oCTwrfigJrigJ7igLDDgsSHw4HEjcOIw43DjsOPw4zDk8OUxJHDksOaw5vDmcSxy4bLnMKvz4DDi8uawrjDisOmy4dcIlxuICB9LFxuICBcIm1hY2N5cmlsbGljXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLQkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv4oCgwrDCosKjwqfigKLCttCGwq7CqeKEotCC0ZLiiaDQg9GT4oiewrHiiaTiiaXRlsK14oiC0IjQhNGU0IfRl9CJ0ZnQitGa0ZjQhcKs4oiaxpLiiYjiiIbCq8K74oCmwqDQi9Gb0IzRnNGV4oCT4oCU4oCc4oCd4oCY4oCZw7figJ7QjtGe0I/Rn+KEltCB0ZHRj9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGOwqRcIlxuICB9LFxuICBcIm1hY2dyZWVrXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMK5wrLDicKzw5bDnM6Fw6DDosOkzoTCqMOnw6nDqMOqw6vCo+KEosOuw6/igKLCveKAsMO0w7bCpsKtw7nDu8O84oCgzpPOlM6YzpvOns6gw5/CrsKpzqPOqsKn4omgwrDOh86RwrHiiaTiiaXCpc6SzpXOls6XzpnOms6czqbOq86ozqnOrM6dwqzOn86h4omIzqTCq8K74oCmwqDOpc6nzobOiMWT4oCT4oCV4oCc4oCd4oCY4oCZw7fOic6KzozOjs6tzq7Or8+Mzo/Pjc6xzrLPiM60zrXPhs6zzrfOuc6+zrrOu868zr3Ov8+Az47Pgc+Dz4TOuM+Jz4LPh8+FzrbPis+LzpDOsO+/vVwiXG4gIH0sXG4gIFwibWFjaWNlbGFuZFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvMOdwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK64oSmw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuOKBhMKkw5DDsMOew77DvcK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+/vcOSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiXG4gIH0sXG4gIFwibWFjcm9tYW5cIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMOGw5jiiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbDpsO4wr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGEwqTigLnigLrvrIHvrILigKHCt+KAmuKAnuKAsMOCw4rDgcOLw4jDjcOOw4/DjMOTw5Tvv73DksOaw5vDmcSxy4bLnMKvy5jLmcuawrjLncuby4dcIlxuICB9LFxuICBcIm1hY3JvbWFuaWFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsOEw4XDh8OJw5HDlsOcw6HDoMOiw6TDo8Olw6fDqcOow6rDq8Otw6zDrsOvw7HDs8Oyw7TDtsO1w7rDucO7w7zigKDCsMKiwqPCp+KAosK2w5/CrsKp4oSiwrTCqOKJoMSCxZ7iiJ7CseKJpOKJpcKlwrXiiILiiJHiiI/PgOKIq8KqwrrihKbEg8Wfwr/CocKs4oiaxpLiiYjiiIbCq8K74oCmwqDDgMODw5XFksWT4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rDv8W44oGEwqTigLnigLrFosWj4oChwrfigJrigJ7igLDDgsOKw4HDi8OIw43DjsOPw4zDk8OU77+9w5LDmsObw5nEscuGy5zCr8uYy5nLmsK4y53Lm8uHXCJcbiAgfSxcbiAgXCJtYWN0aGFpXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCq8K74oCm76KM76KP76KS76KV76KY76KL76KO76KR76KU76KX4oCc4oCd76KZ77+94oCi76KE76KJ76KF76KG76KH76KI76KK76KN76KQ76KT76KW4oCY4oCZ77+9wqDguIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrvu7/igIvigJPigJTguL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3ihKLguY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnCrsKp77+977+977+977+9XCJcbiAgfSxcbiAgXCJtYWN0dXJraXNoXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLDhMOFw4fDicORw5bDnMOhw6DDosOkw6PDpcOnw6nDqMOqw6vDrcOsw67Dr8Oxw7PDssO0w7bDtcO6w7nDu8O84oCgwrDCosKjwqfigKLCtsOfwq7CqeKEosK0wqjiiaDDhsOY4oiewrHiiaTiiaXCpcK14oiC4oiR4oiPz4DiiKvCqsK64oSmw6bDuMK/wqHCrOKImsaS4omI4oiGwqvCu+KApsKgw4DDg8OVxZLFk+KAk+KAlOKAnOKAneKAmOKAmcO34peKw7/FuMSexJ/EsMSxxZ7Fn+KAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+/vcOSw5rDm8OZ77+9y4bLnMKvy5jLmcuawrjLncuby4dcIlxuICB9LFxuICBcIm1hY3VrcmFpbmVcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItCQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/igKDCsNKQwqPCp+KAosK20IbCrsKp4oSi0ILRkuKJoNCD0ZPiiJ7CseKJpOKJpdGWwrXSkdCI0ITRlNCH0ZfQidGZ0IrRmtGY0IXCrOKImsaS4omI4oiGwqvCu+KApsKg0IvRm9CM0ZzRleKAk+KAlOKAnOKAneKAmOKAmcO34oCe0I7RntCP0Z/ihJbQgdGR0Y/QsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjsKkXCJcbiAgfSxcbiAgXCJrb2k4clwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4pSA4pSC4pSM4pSQ4pSU4pSY4pSc4pSk4pSs4pS04pS84paA4paE4paI4paM4paQ4paR4paS4paT4oyg4pag4oiZ4oia4omI4omk4omlwqDijKHCsMKywrfDt+KVkOKVkeKVktGR4pWT4pWU4pWV4pWW4pWX4pWY4pWZ4pWa4pWb4pWc4pWd4pWe4pWf4pWg4pWh0IHilaLilaPilaTilaXilabilafilajilanilarilavilazCqdGO0LDQsdGG0LTQtdGE0LPRhdC40LnQutC70LzQvdC+0L/Rj9GA0YHRgtGD0LbQstGM0YvQt9GI0Y3RidGH0YrQrtCQ0JHQptCU0JXQpNCT0KXQmNCZ0JrQm9Cc0J3QntCf0K/QoNCh0KLQo9CW0JLQrNCr0JfQqNCt0KnQp9CqXCJcbiAgfSxcbiAgXCJrb2k4dVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi4pSA4pSC4pSM4pSQ4pSU4pSY4pSc4pSk4pSs4pS04pS84paA4paE4paI4paM4paQ4paR4paS4paT4oyg4pag4oiZ4oia4omI4omk4omlwqDijKHCsMKywrfDt+KVkOKVkeKVktGR0ZTilZTRltGX4pWX4pWY4pWZ4pWa4pWb0pHilZ3ilZ7ilZ/ilaDilaHQgdCE4pWj0IbQh+KVpuKVp+KVqOKVqeKVqtKQ4pWswqnRjtCw0LHRhtC00LXRhNCz0YXQuNC50LrQu9C80L3QvtC/0Y/RgNGB0YLRg9C20LLRjNGL0LfRiNGN0YnRh9GK0K7QkNCR0KbQlNCV0KTQk9Cl0JjQmdCa0JvQnNCd0J7Qn9Cv0KDQodCi0KPQltCS0KzQq9CX0KjQrdCp0KfQqlwiXG4gIH0sXG4gIFwia29pOHJ1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLilIDilILilIzilJDilJTilJjilJzilKTilKzilLTilLziloDiloTilojilozilpDilpHilpLilpPijKDilqDiiJniiJriiYjiiaTiiaXCoOKMocKwwrLCt8O34pWQ4pWR4pWS0ZHRlOKVlNGW0ZfilZfilZjilZnilZrilZvSkdGe4pWe4pWf4pWg4pWh0IHQhOKVo9CG0IfilabilafilajilanilarSkNCOwqnRjtCw0LHRhtC00LXRhNCz0YXQuNC50LrQu9C80L3QvtC/0Y/RgNGB0YLRg9C20LLRjNGL0LfRiNGN0YnRh9GK0K7QkNCR0KbQlNCV0KTQk9Cl0JjQmdCa0JvQnNCd0J7Qn9Cv0KDQodCi0KPQltCS0KzQq9CX0KjQrdCp0KfQqlwiXG4gIH0sXG4gIFwia29pOHRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcItKb0pPigJrSkuKAnuKApuKAoOKAoe+/veKAsNKz4oC50rLSt9K277+90prigJjigJnigJzigJ3igKLigJPigJTvv73ihKLvv73igLrvv73vv73vv73vv73vv73Tr9Ou0ZHCpNOjwqbCp++/ve+/ve+/vcKrwqzCrcKu77+9wrDCscKy0IHvv73TosK2wrfvv73ihJbvv73Cu++/ve+/ve+/vcKp0Y7QsNCx0YbQtNC10YTQs9GF0LjQudC60LvQvNC90L7Qv9GP0YDRgdGC0YPQttCy0YzRi9C30YjRjdGJ0YfRitCu0JDQkdCm0JTQldCk0JPQpdCY0JnQmtCb0JzQndCe0J/Qr9Cg0KHQotCj0JbQktCs0KvQl9Co0K3QqdCn0KpcIlxuICB9LFxuICBcImFybXNjaWk4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLCgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDvv73Wh9aJKSjCu8Kr4oCULtWdLC3WiuKAptWc1ZvVntSx1aHUstWi1LPVo9S01aTUtdWl1LbVptS31afUuNWo1LnVqdS61arUu9Wr1LzVrNS91a3UvtWu1L/Vr9WA1bDVgdWx1YLVstWD1bPVhNW01YXVtdWG1bbVh9W31YjVuNWJ1bnVitW61YvVu9WM1bzVjdW91Y7VvtWP1b/VkNaA1ZHWgdWS1oLVk9aD1ZTWhNWV1oXVltaG1Zrvv71cIlxuICB9LFxuICBcInJrMTA0OFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwi0ILQg+KAmtGT4oCe4oCm4oCg4oCh4oKs4oCw0InigLnQitKa0rrQj9GS4oCY4oCZ4oCc4oCd4oCi4oCT4oCU77+94oSi0ZnigLrRmtKb0rvRn8Kg0rDSsdOYwqTTqMKmwqfQgcKp0pLCq8Kswq3CrtKuwrDCsdCG0ZbTqcK1wrbCt9GR4oSW0pPCu9OZ0qLSo9Kv0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y9cIlxuICB9LFxuICBcInRjdm5cIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDDDmuG7pFxcdTAwMDPhu6rhu6zhu65cXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMOG7qOG7sOG7suG7tuG7uMOd4bu0XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/DgOG6osODw4HhuqDhurbhuqzDiOG6uuG6vMOJ4bq44buGw4zhu4jEqMON4buKw5Lhu47DlcOT4buM4buY4buc4bue4bug4bua4buiw5nhu6bFqMKgxILDgsOKw5TGoMavxJDEg8Oiw6rDtMahxrDEkeG6sMyAzInMg8yBzKPDoOG6o8Ojw6HhuqHhurLhurHhurPhurXhuq/hurThuq7huqbhuqjhuqrhuqThu4DhurfhuqfhuqnhuqvhuqXhuq3DqOG7guG6u+G6vcOp4bq54buB4buD4buF4bq/4buHw6zhu4nhu4Thur7hu5LEqcOt4buLw7Lhu5Thu4/DtcOz4buN4buT4buV4buX4buR4buZ4bud4buf4buh4bub4bujw7nhu5bhu6fFqcO64bul4bur4but4buv4bup4bux4buz4bu34bu5w73hu7Xhu5BcIlxuICB9LFxuICBcImdlb3JnaWFuYWNhZGVteVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgeKAmsaS4oCe4oCm4oCg4oChy4bigLDFoOKAucWSwo3CjsKPwpDigJjigJnigJzigJ3igKLigJPigJTLnOKEosWh4oC6xZPCncKexbjCoMKhwqLCo8KkwqXCpsKnwqjCqcKqwqvCrMKtwq7Cr8KwwrHCssKzwrTCtcK2wrfCuMK5wrrCu8K8wr3CvsK/4YOQ4YOR4YOS4YOT4YOU4YOV4YOW4YOX4YOY4YOZ4YOa4YOb4YOc4YOd4YOe4YOf4YOg4YOh4YOi4YOj4YOk4YOl4YOm4YOn4YOo4YOp4YOq4YOr4YOs4YOt4YOu4YOv4YOw4YOx4YOy4YOz4YO04YO14YO2w6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w79cIlxuICB9LFxuICBcImdlb3JnaWFucHNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIsKAwoHigJrGkuKAnuKApuKAoOKAocuG4oCwxaDigLnFksKNwo7Cj8KQ4oCY4oCZ4oCc4oCd4oCi4oCT4oCUy5zihKLFoeKAusWTwp3CnsW4wqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv+GDkOGDkeGDkuGDk+GDlOGDleGDluGDseGDl+GDmOGDmeGDmuGDm+GDnOGDsuGDneGDnuGDn+GDoOGDoeGDouGDs+GDo+GDpOGDpeGDpuGDp+GDqOGDqeGDquGDq+GDrOGDreGDruGDtOGDr+GDsOGDtcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDt8O4w7nDusO7w7zDvcO+w79cIlxuICB9LFxuICBcInB0MTU0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLSltKS067Sk+KAnuKAptK20q7SstKv0qDTotKi0prSutK40pfigJjigJnigJzigJ3igKLigJPigJTSs9K30qHTo9Kj0pvSu9K5wqDQjtGe0IjTqNKY0rDCp9CBwqnTmMKrwqzTr8Ku0pzCsNKx0IbRltKZ06nCtsK30ZHihJbTmcK70ZjSqtKr0p3QkNCR0JLQk9CU0JXQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCv0LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj1wiXG4gIH0sXG4gIFwidmlzY2lpXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAwXFx1MDAwMeG6slxcdTAwMDNcXHUwMDA04bq04bqqXFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTPhu7ZcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE44bu4XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZOG7tFxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/huqDhuq7hurDhurbhuqThuqbhuqjhuqzhurzhurjhur7hu4Dhu4Lhu4Thu4bhu5Dhu5Lhu5Thu5bhu5jhu6Lhu5rhu5zhu57hu4rhu47hu4zhu4jhu6bFqOG7pOG7ssOV4bqv4bqx4bq34bql4bqn4bqp4bqt4bq94bq54bq/4buB4buD4buF4buH4buR4buT4buV4buX4bugxqDhu5nhu53hu5/hu4vhu7Dhu6jhu6rhu6zGoeG7m8avw4DDgcOCw4PhuqLEguG6s+G6tcOIw4nDiuG6usOMw43EqOG7s8SQ4bupw5LDk8OU4bqh4bu34bur4butw5nDmuG7ueG7tcOd4buhxrDDoMOhw6LDo+G6o8SD4buv4bqrw6jDqcOq4bq7w6zDrcSp4buJxJHhu7HDssOzw7TDteG7j+G7jeG7pcO5w7rFqeG7p8O94buj4buuXCJcbiAgfSxcbiAgXCJpc282NDZjblwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiI8KlJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH3igL5/77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCJcbiAgfSxcbiAgXCJpc282NDZqcFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXFx1MDAwMFxcdTAwMDFcXHUwMDAyXFx1MDAwM1xcdTAwMDRcXHUwMDA1XFx1MDAwNlxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXFx1MDAxMVxcdTAwMTJcXHUwMDEzXFx1MDAxNFxcdTAwMTVcXHUwMDE2XFx1MDAxN1xcdTAwMThcXHUwMDE5XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFxcdTAwMWVcXHUwMDFmICFcXFwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbwqVdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH3igL5/77+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+977+9XCJcbiAgfSxcbiAgXCJocHJvbWFuOFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiwoDCgcKCwoPChMKFwobCh8KIwonCisKLwozCjcKOwo/CkMKRwpLCk8KUwpXClsKXwpjCmcKawpvCnMKdwp7Cn8Kgw4DDgsOIw4rDi8OOw4/CtMuLy4bCqMucw5nDm+KCpMKvw53DvcKww4fDp8ORw7HCocK/wqTCo8KlwqfGksKiw6LDqsO0w7vDocOpw7PDusOgw6jDssO5w6TDq8O2w7zDhcOuw5jDhsOlw63DuMOmw4TDrMOWw5zDicOvw5/DlMOBw4PDo8OQw7DDjcOMw5PDksOVw7XFoMWhw5rFuMO/w57DvsK3wrXCtsK+4oCUwrzCvcKqwrrCq+KWoMK7wrHvv71cIlxuICB9LFxuICBcIm1hY2ludG9zaFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiw4TDhcOHw4nDkcOWw5zDocOgw6LDpMOjw6XDp8Opw6jDqsOrw63DrMOuw6/DscOzw7LDtMO2w7XDusO5w7vDvOKAoMKwwqLCo8Kn4oCiwrbDn8KuwqnihKLCtMKo4omgw4bDmOKInsKx4omk4omlwqXCteKIguKIkeKIj8+A4oirwqrCuuKEpsOmw7jCv8KhwqziiJrGkuKJiOKIhsKrwrvigKbCoMOAw4PDlcWSxZPigJPigJTigJzigJ3igJjigJnDt+KXisO/xbjigYTCpOKAueKAuu+sge+sguKAocK34oCa4oCe4oCww4LDisOBw4vDiMONw47Dj8OMw5PDlO+/vcOSw5rDm8OZxLHLhsucwq/LmMuZy5rCuMudy5vLh1wiXG4gIH0sXG4gIFwiYXNjaWlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vVwiXG4gIH0sXG4gIFwidGlzNjIwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73guIHguILguIPguITguIXguIbguIfguIjguInguIrguIvguIzguI3guI7guI/guJDguJHguJLguJPguJTguJXguJbguJfguJjguJnguJrguJvguJzguJ3guJ7guJ/guKDguKHguKLguKPguKTguKXguKbguKfguKjguKnguKrguKvguKzguK3guK7guK/guLDguLHguLLguLPguLTguLXguLbguLfguLjguLnguLrvv73vv73vv73vv73guL/guYDguYHguYLguYPguYTguYXguYbguYfguYjguYnguYrguYvguYzguY3guY7guY/guZDguZHguZLguZPguZTguZXguZbguZfguZjguZnguZrguZvvv73vv73vv73vv71cIlxuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCJcblxuLy8gTWFudWFsbHkgYWRkZWQgZGF0YSB0byBiZSB1c2VkIGJ5IHNiY3MgY29kZWMgaW4gYWRkaXRpb24gdG8gZ2VuZXJhdGVkIG9uZS5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gTm90IHN1cHBvcnRlZCBieSBpY29udiwgbm90IHN1cmUgd2h5LlxuICAgIFwiMTAwMjlcIjogXCJtYWNjZW50ZXVyb1wiLFxuICAgIFwibWFjY2VudGV1cm9cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiw4TEgMSBw4nEhMOWw5zDocSFxIzDpMSNxIbEh8OpxbnFusSOw63Ej8SSxJPElsOzxJfDtMO2w7XDusSaxJvDvOKAoMKwxJjCo8Kn4oCiwrbDn8KuwqnihKLEmcKo4omgxKPErsSvxKriiaTiiaXEq8S24oiC4oiRxYLEu8S8xL3EvsS5xLrFhcWGxYPCrOKImsWExYfiiIbCq8K74oCmwqDFiMWQw5XFkcWM4oCT4oCU4oCc4oCd4oCY4oCZw7fil4rFjcWUxZXFmOKAueKAusWZxZbFl8Wg4oCa4oCexaHFmsWbw4HFpMWlw43FvcW+xarDk8OUxavFrsOaxa/FsMWxxbLFs8Odw73Et8W7xYHFvMSiy4dcIlxuICAgIH0sXG5cbiAgICBcIjgwOFwiOiBcImNwODA4XCIsXG4gICAgXCJpYm04MDhcIjogXCJjcDgwOFwiLFxuICAgIFwiY3A4MDhcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwi0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Cw0LHQstCz0LTQtdC20LfQuNC50LrQu9C80L3QvtC/4paR4paS4paT4pSC4pSk4pWh4pWi4pWW4pWV4pWj4pWR4pWX4pWd4pWc4pWb4pSQ4pSU4pS04pSs4pSc4pSA4pS84pWe4pWf4pWa4pWU4pWp4pWm4pWg4pWQ4pWs4pWn4pWo4pWk4pWl4pWZ4pWY4pWS4pWT4pWr4pWq4pSY4pSM4paI4paE4paM4paQ4paA0YDRgdGC0YPRhNGF0YbRh9GI0YnRitGL0YzRjdGO0Y/QgdGR0ITRlNCH0ZfQjtGewrDiiJnCt+KImuKEluKCrOKWoMKgXCJcbiAgICB9LFxuXG4gICAgLy8gQWxpYXNlcyBvZiBnZW5lcmF0ZWQgZW5jb2RpbmdzLlxuICAgIFwiYXNjaWk4Yml0XCI6IFwiYXNjaWlcIixcbiAgICBcInVzYXNjaWlcIjogXCJhc2NpaVwiLFxuICAgIFwiYW5zaXgzNFwiOiBcImFzY2lpXCIsXG4gICAgXCJhbnNpeDM0MTk2OFwiOiBcImFzY2lpXCIsXG4gICAgXCJhbnNpeDM0MTk4NlwiOiBcImFzY2lpXCIsXG4gICAgXCJjc2FzY2lpXCI6IFwiYXNjaWlcIixcbiAgICBcImNwMzY3XCI6IFwiYXNjaWlcIixcbiAgICBcImlibTM2N1wiOiBcImFzY2lpXCIsXG4gICAgXCJpc29pcjZcIjogXCJhc2NpaVwiLFxuICAgIFwiaXNvNjQ2dXNcIjogXCJhc2NpaVwiLFxuICAgIFwiaXNvNjQ2aXJ2XCI6IFwiYXNjaWlcIixcbiAgICBcInVzXCI6IFwiYXNjaWlcIixcblxuICAgIFwibGF0aW4xXCI6IFwiaXNvODg1OTFcIixcbiAgICBcImxhdGluMlwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJsYXRpbjNcIjogXCJpc284ODU5M1wiLFxuICAgIFwibGF0aW40XCI6IFwiaXNvODg1OTRcIixcbiAgICBcImxhdGluNVwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJsYXRpbjZcIjogXCJpc284ODU5MTBcIixcbiAgICBcImxhdGluN1wiOiBcImlzbzg4NTkxM1wiLFxuICAgIFwibGF0aW44XCI6IFwiaXNvODg1OTE0XCIsXG4gICAgXCJsYXRpbjlcIjogXCJpc284ODU5MTVcIixcbiAgICBcImxhdGluMTBcIjogXCJpc284ODU5MTZcIixcblxuICAgIFwiY3Npc29sYXRpbjFcIjogXCJpc284ODU5MVwiLFxuICAgIFwiY3Npc29sYXRpbjJcIjogXCJpc284ODU5MlwiLFxuICAgIFwiY3Npc29sYXRpbjNcIjogXCJpc284ODU5M1wiLFxuICAgIFwiY3Npc29sYXRpbjRcIjogXCJpc284ODU5NFwiLFxuICAgIFwiY3Npc29sYXRpbmN5cmlsbGljXCI6IFwiaXNvODg1OTVcIixcbiAgICBcImNzaXNvbGF0aW5hcmFiaWNcIjogXCJpc284ODU5NlwiLFxuICAgIFwiY3Npc29sYXRpbmdyZWVrXCIgOiBcImlzbzg4NTk3XCIsXG4gICAgXCJjc2lzb2xhdGluaGVicmV3XCI6IFwiaXNvODg1OThcIixcbiAgICBcImNzaXNvbGF0aW41XCI6IFwiaXNvODg1OTlcIixcbiAgICBcImNzaXNvbGF0aW42XCI6IFwiaXNvODg1OTEwXCIsXG5cbiAgICBcImwxXCI6IFwiaXNvODg1OTFcIixcbiAgICBcImwyXCI6IFwiaXNvODg1OTJcIixcbiAgICBcImwzXCI6IFwiaXNvODg1OTNcIixcbiAgICBcImw0XCI6IFwiaXNvODg1OTRcIixcbiAgICBcImw1XCI6IFwiaXNvODg1OTlcIixcbiAgICBcImw2XCI6IFwiaXNvODg1OTEwXCIsXG4gICAgXCJsN1wiOiBcImlzbzg4NTkxM1wiLFxuICAgIFwibDhcIjogXCJpc284ODU5MTRcIixcbiAgICBcImw5XCI6IFwiaXNvODg1OTE1XCIsXG4gICAgXCJsMTBcIjogXCJpc284ODU5MTZcIixcblxuICAgIFwiaXNvaXIxNFwiOiBcImlzbzY0NmpwXCIsXG4gICAgXCJpc29pcjU3XCI6IFwiaXNvNjQ2Y25cIixcbiAgICBcImlzb2lyMTAwXCI6IFwiaXNvODg1OTFcIixcbiAgICBcImlzb2lyMTAxXCI6IFwiaXNvODg1OTJcIixcbiAgICBcImlzb2lyMTA5XCI6IFwiaXNvODg1OTNcIixcbiAgICBcImlzb2lyMTEwXCI6IFwiaXNvODg1OTRcIixcbiAgICBcImlzb2lyMTQ0XCI6IFwiaXNvODg1OTVcIixcbiAgICBcImlzb2lyMTI3XCI6IFwiaXNvODg1OTZcIixcbiAgICBcImlzb2lyMTI2XCI6IFwiaXNvODg1OTdcIixcbiAgICBcImlzb2lyMTM4XCI6IFwiaXNvODg1OThcIixcbiAgICBcImlzb2lyMTQ4XCI6IFwiaXNvODg1OTlcIixcbiAgICBcImlzb2lyMTU3XCI6IFwiaXNvODg1OTEwXCIsXG4gICAgXCJpc29pcjE2NlwiOiBcInRpczYyMFwiLFxuICAgIFwiaXNvaXIxNzlcIjogXCJpc284ODU5MTNcIixcbiAgICBcImlzb2lyMTk5XCI6IFwiaXNvODg1OTE0XCIsXG4gICAgXCJpc29pcjIwM1wiOiBcImlzbzg4NTkxNVwiLFxuICAgIFwiaXNvaXIyMjZcIjogXCJpc284ODU5MTZcIixcblxuICAgIFwiY3A4MTlcIjogXCJpc284ODU5MVwiLFxuICAgIFwiaWJtODE5XCI6IFwiaXNvODg1OTFcIixcblxuICAgIFwiY3lyaWxsaWNcIjogXCJpc284ODU5NVwiLFxuXG4gICAgXCJhcmFiaWNcIjogXCJpc284ODU5NlwiLFxuICAgIFwiYXJhYmljOFwiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJlY21hMTE0XCI6IFwiaXNvODg1OTZcIixcbiAgICBcImFzbW83MDhcIjogXCJpc284ODU5NlwiLFxuXG4gICAgXCJncmVla1wiIDogXCJpc284ODU5N1wiLFxuICAgIFwiZ3JlZWs4XCIgOiBcImlzbzg4NTk3XCIsXG4gICAgXCJlY21hMTE4XCIgOiBcImlzbzg4NTk3XCIsXG4gICAgXCJlbG90OTI4XCIgOiBcImlzbzg4NTk3XCIsXG5cbiAgICBcImhlYnJld1wiOiBcImlzbzg4NTk4XCIsXG4gICAgXCJoZWJyZXc4XCI6IFwiaXNvODg1OThcIixcblxuICAgIFwidHVya2lzaFwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJ0dXJraXNoOFwiOiBcImlzbzg4NTk5XCIsXG5cbiAgICBcInRoYWlcIjogXCJpc284ODU5MTFcIixcbiAgICBcInRoYWk4XCI6IFwiaXNvODg1OTExXCIsXG5cbiAgICBcImNlbHRpY1wiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwiY2VsdGljOFwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwiaXNvY2VsdGljXCI6IFwiaXNvODg1OTE0XCIsXG5cbiAgICBcInRpczYyMDBcIjogXCJ0aXM2MjBcIixcbiAgICBcInRpczYyMDI1MjkxXCI6IFwidGlzNjIwXCIsXG4gICAgXCJ0aXM2MjAyNTMzMFwiOiBcInRpczYyMFwiLFxuXG4gICAgXCIxMDAwMFwiOiBcIm1hY3JvbWFuXCIsXG4gICAgXCIxMDAwNlwiOiBcIm1hY2dyZWVrXCIsXG4gICAgXCIxMDAwN1wiOiBcIm1hY2N5cmlsbGljXCIsXG4gICAgXCIxMDA3OVwiOiBcIm1hY2ljZWxhbmRcIixcbiAgICBcIjEwMDgxXCI6IFwibWFjdHVya2lzaFwiLFxuXG4gICAgXCJjc3BjOGNvZGVwYWdlNDM3XCI6IFwiY3A0MzdcIixcbiAgICBcImNzcGM3NzViYWx0aWNcIjogXCJjcDc3NVwiLFxuICAgIFwiY3NwYzg1MG11bHRpbGluZ3VhbFwiOiBcImNwODUwXCIsXG4gICAgXCJjc3BjcDg1MlwiOiBcImNwODUyXCIsXG4gICAgXCJjc3BjODYybGF0aW5oZWJyZXdcIjogXCJjcDg2MlwiLFxuICAgIFwiY3BnclwiOiBcImNwODY5XCIsXG5cbiAgICBcIm1zZWVcIjogXCJjcDEyNTBcIixcbiAgICBcIm1zY3lybFwiOiBcImNwMTI1MVwiLFxuICAgIFwibXNhbnNpXCI6IFwiY3AxMjUyXCIsXG4gICAgXCJtc2dyZWVrXCI6IFwiY3AxMjUzXCIsXG4gICAgXCJtc3R1cmtcIjogXCJjcDEyNTRcIixcbiAgICBcIm1zaGViclwiOiBcImNwMTI1NVwiLFxuICAgIFwibXNhcmFiXCI6IFwiY3AxMjU2XCIsXG4gICAgXCJ3aW5iYWx0cmltXCI6IFwiY3AxMjU3XCIsXG5cbiAgICBcImNwMjA4NjZcIjogXCJrb2k4clwiLFxuICAgIFwiMjA4NjZcIjogXCJrb2k4clwiLFxuICAgIFwiaWJtODc4XCI6IFwia29pOHJcIixcbiAgICBcImNza29pOHJcIjogXCJrb2k4clwiLFxuXG4gICAgXCJjcDIxODY2XCI6IFwia29pOHVcIixcbiAgICBcIjIxODY2XCI6IFwia29pOHVcIixcbiAgICBcImlibTExNjhcIjogXCJrb2k4dVwiLFxuXG4gICAgXCJzdHJrMTA0ODIwMDJcIjogXCJyazEwNDhcIixcblxuICAgIFwidGN2bjU3MTJcIjogXCJ0Y3ZuXCIsXG4gICAgXCJ0Y3ZuNTcxMjFcIjogXCJ0Y3ZuXCIsXG5cbiAgICBcImdiMTk4ODgwXCI6IFwiaXNvNjQ2Y25cIixcbiAgICBcImNuXCI6IFwiaXNvNjQ2Y25cIixcblxuICAgIFwiY3Npc28xNGppc2M2MjIwcm9cIjogXCJpc282NDZqcFwiLFxuICAgIFwiamlzYzYyMjAxOTY5cm9cIjogXCJpc282NDZqcFwiLFxuICAgIFwianBcIjogXCJpc282NDZqcFwiLFxuXG4gICAgXCJjc2hwcm9tYW44XCI6IFwiaHByb21hbjhcIixcbiAgICBcInI4XCI6IFwiaHByb21hbjhcIixcbiAgICBcInJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJ4cm9tYW44XCI6IFwiaHByb21hbjhcIixcbiAgICBcImlibTEwNTFcIjogXCJocHJvbWFuOFwiLFxuXG4gICAgXCJtYWNcIjogXCJtYWNpbnRvc2hcIixcbiAgICBcImNzbWFjaW50b3NoXCI6IFwibWFjaW50b3NoXCIsXG59O1xuXG4iLCJtb2R1bGUuZXhwb3J0cz1bXG5bXCI4NzQwXCIsXCLkj7DksLLkmIPklqbklbjwp4mn5LW35Jaz8KeyseSzovCns4XjrpXknLbknYTksYfksYDwpIq/8KOYl/CnjZLwprqL8KeDkuSxl/CqjZHknY/kl5rksoXwp7Gs5LSH5Kqk5Jqh8Kaso+eIpfClqZTwoamj8KO4hvCjvaHmmY3lm7tcIl0sXG5bXCI4NzY3XCIsXCLntpXlpJ3wqK6547e06Zy08Kevr+Wvm/ChtZ7lqqTjmKXwqbqw5auR5a635bO85p2u6JaT8KmlheeRoeeSneOhtfChtZPwo5qe8KaAoeO7rFwiXSxcbltcIjg3YTFcIixcIvClo57jq7Xnq7zpvpfwpIWh8KikjfCjh6rwoKqK8KOJnuSMiuiShOm+lumQr+SksOiYk+WilumdiumImOenkOeosuaZoOaoqeiineeRjOevheaegueorOWJj+mBhuOTpuePhPCltrnnk4bpv4flnrPkpK/lkYzkhLHwo5qO5aCY56my8Ketpeiuj+SarvCmuojkhoHwpbaZ566u8KKSvOm/iPCik4HwopOJ8KKTjOm/ieiUhPCjlrvkgrTpv4rkk6Hwqre/5ouB54Gu6b+LXCJdLFxuW1wiODg0MFwiLFwi44eAXCIsNCxcIvCghIzjh4XwoIOR8KCDjeOHhuOHh/Cgg4vwob+o44eI8KCDiuOHieOHiuOHi+OHjPCghI7jh43jh47EgMOBx43DgMSSw4nEmsOIxYzDk8eRw5Lgv7/DisyE4bq+4L+/w4rMjOG7gMOKxIHDoceOw6DJkcSTw6nEm8OoxKvDrceQw6zFjcOzx5LDssWrw7rHlMO5x5bHmMeaXCJdLFxuW1wiODhhMVwiLFwix5zDvOC/v8OqzIThur/gv7/DqsyM4buBw6rJoeKPmuKPm1wiXSxcbltcIjg5NDBcIixcIvCqjqnwoYWFXCJdLFxuW1wiODk0M1wiLFwi5pSKXCJdLFxuW1wiODk0NlwiLFwi5Li95rud6bWO6YefXCJdLFxuW1wiODk0Y1wiLFwi8KecteaSkeS8muS8qOS+qOWFluWFtOWGnOWHpOWKoeWKqOWMu+WNjuWPkeWPmOWbouWjsOWkhOWkh+WksuWktOWtpuWunuWun+WymuW6huaAu+aWieafvuaghOahpea1jueCvOeUtee6pOe6rOe6uue7h+e7j+e7n+e8hue8t+iJuuiLj+iNr+inhuiuvuivoui9pui9p+i9rlwiXSxcbltcIjg5YTFcIixcIueQkeezvOe3jealhuerieWIp1wiXSxcbltcIjg5YWJcIixcIumGjOeiuOmFnuiCvFwiXSxcbltcIjg5YjBcIixcIui0i+iDtvCgp6dcIl0sXG5bXCI4OWI1XCIsXCLogp/pu4fks43pt4npuIzksL7wqbe28KeAjum4ivCqhLPjl4FcIl0sXG5bXCI4OWMxXCIsXCLmuproiL7nlJlcIl0sXG5bXCI4OWM1XCIsXCLkpJHpqazpqo/pvpnnpofwqJGs8KG3ivCgl5Dwoqum5Lik5LqB5LqA5LqH5Lq/5Lur5Ly345GM5L6947mI5YCD5YKI45G945KT45Kl5YaG5aSF5Yeb5Ye85YiF5LqJ5Ym55YqQ5Yyn45eH5Y6p45WR5Y6w45WT5Y+C5ZCj45Wt45Wy45qB5ZKT5ZKj5ZK05ZK55ZOQ5ZOv5ZSY5ZSj5ZSo45aY5ZS/45al45a/5ZeX45eFXCJdLFxuW1wiOGE0MFwiLFwi8Ke2hOWUpVwiXSxcbltcIjhhNDNcIixcIvCgsYLwoLSV8KWEq+WWkPCis4bjp6zwoI2B6LmG8KS2uPCpk6XkgZPwqIK+55268KKwuOOotOSflfCohZ3wpqey8KS3quaTnfCgtbzwoL608KCzlfChg7Tmko3oub7woLqW8KCwi/CgvaTworKp8KiJlvCkk5NcIl0sXG5bXCI4YTY0XCIsXCLwoLWG8KmpjfCog6nkn7TwpLqn8KKzgumqsuOpp/Cpl7Tjv63jlIbwpYuH8KmflPCno4jworWE6bWu6aCVXCJdLFxuW1wiOGE3NlwiLFwi5I+Z8KaCpeaStOWTo/CitYzwoq+K8KGBt+Onu/Chga9cIl0sXG5bXCI4YWExXCIsXCLwppua8KaclvCnpqDmk6rwpYGS8KCxg+i5qPCihqHwqK2M8KCcsVwiXSxcbltcIjhhYWNcIixcIuSgi/Cghqnjv7rlobPworaNXCJdLFxuW1wiOGFiMlwiLFwi8KSXiPCgk7zwpoKX8KC9jPCgtpbllbnkgrvkjrpcIl0sXG5bXCI4YWJiXCIsXCLkqrTwoqmm8KGCneiGqumjtfCgtpzmjbnjp77wop216LeA5Zqh5pG847mDXCJdLFxuW1wiOGFjOVwiLFwi8KqYgfCguInwoquP8KKziVwiXSxcbltcIjhhY2VcIixcIvChg4jwo6eC46aS46iG8KiKm+OVuPCluYnwooOH5ZmS8KC8sfCisrLwqZyg45K85rC98KS4u1wiXSxcbltcIjhhZGZcIixcIvCnlbTworqL8KKIiPCqmZvwqLON8KC5uvCgsLTwpqCc576T8KGDj/CioIPwoqS545e78KWHo/CguozwoL6N8KC6quO+k/CgvLDwoLWH8KGFj/CguYxcIl0sXG5bXCI4YWY2XCIsXCLwoLqr8KCuqfCgtYjwoYOA8KGEveO/ufCimpbmkLLwoL6tXCJdLFxuW1wiOGI0MFwiLFwi8KOPtPCnmLnwoq+O8KC1vvCgtb/worGR8KKxleOomPCgupjwoYOH8KC8rvCqmLLwpq2Q8KizkvCotpnwqLOK6Zaq5ZOM6IuE5Za5XCJdLFxuW1wiOGI1NVwiLFwi8Km7g+mwpumqtvCnnZ7woreu54WA6IWt6IOs5bCc8KaVsuiEtOOel+WNn/Cogr3phrbwoLu68KC4j/CgubfwoLu745ed8KS3q+OYifCgs5blmq/wop618KGDifCguJDwoLm48KGBuPChhYjwqIiH8KGRlfCgubnwpLmQ8KK2pOWplPChgJ3woYCe8KGDtfChg7blnpzwoLiRXCJdLFxuW1wiOGJhMVwiLFwi8KealPCoi43woL618KC5u/Clhb7jnIPwoL628KGGgPCli5jwqoq98KSnmvChoLrwpIW38KiJvOWimeWJqOOYmvClnL3nrrLlrajkoIDkrKzpvKfkp6fpsJ/pro3wpa208KOEveWXu+OXsuWaieS4qOWkgvChr4Hwr6G46Z2R8KCChuS5m+S6u+OUvuWwo+W9keW/hOOjuuaJjOaUteatuuawteawuueBrOeIq+S4rOeKrfCko6nnvZLnpLvns7nnvZPwpomq45OBXCJdLFxuW1wiOGJkZVwiLFwi8KaNi+iAguiCgPCmmJLwpqWR5Y2d6KGk6KeB8KeisuiuoOi0nemShemVuOmVv+mXqPCouI/pn6bpobXpo47po57ppaPwqaCQ6bG86bif6buE5q2v76SH5Li38KCCh+mYneaIt+mSolwiXSxcbltcIjhjNDBcIixcIuWAu+a3vvCpsbPpvqbjt4nooo/wpIWO54G35bO15Kyg8KWHjeOVmfCltLDmhKLwqKiy6L6n6Ye254aR5pyZ54668KOKgfCqhIfjsovwoaaA5KyQ56Ok55CC5Yau8Kicj+SAieapo/CqirrkiKPomI/woKmv56iq8Kmlh/Coq6rpnZXngY3ljKTwooG+6Y+055uZ8Kino+m+p+efneS6o+S/sOWCvOS4r+S8l+m+qOWQtOe2i+WikuWjkPChtrblupLlupnlv4LwopyS5paLXCJdLFxuW1wiOGNhMVwiLFwi8KOPueakmeapg/CjsaPms79cIl0sXG5bXCI4Y2E3XCIsXCLniIDwpJSF546M47ub8KSok+WsleeSueiug/ClsqTwpZqV56qT56+s57OD57ms6Iu46JaX6b6p6KKQ6b6q6Lq56b6r6L+P6JWf6aeg6Yih6b6s8Ki2ufChkL/kgbHkiqLlqJpcIl0sXG5bXCI4Y2M5XCIsXCLpoajmnavkibblnL1cIl0sXG5bXCI4Y2NlXCIsXCLol5bwpKW76Iq/8KeEjeSygfCmtbTltbvwpqyV8Ka+vum+rem+ruWulum+r+abp+e5m+a5l+eniuO2iOSTg/CjiZbwop6W5I6a5JS2XCJdLFxuW1wiOGNlNlwiLFwi5bOV8KOsmuirueWxuOO0kvCjlZHltbjpvrLnhZfklZjwpIOs8KG4o+Sxt+OluOORivCghqTwprGB6KuM5L608KCIueWmv+iFrOmhlvCpo7rlvLtcIl0sXG5bXCI4ZDQwXCIsXCLwoK6fXCJdLFxuW1wiOGQ0MlwiLFwi8KKHgfCopa3khILkmrvwqYG547yH6b6z8KqGteSDuOOfluSbt/CmsYbkhbzwqJqy8KePv+SVreOjlPClkprklaHklJvktonksbvktbbkl6rjv4jwpKyP45mh5JOe5JK95Iet5bS+5bWI5bWW47e846CP5bak5ba546Cg46C45bmC5bq95byl5b6D46SI46SU46S/46WN5oOX5oS95bOl46aJ5oa35oa55oeP46a45ois5oqQ5oul5oyY46e45ZqxXCJdLFxuW1wiOGRhMVwiLFwi46iD5o+i5o+75pCH5pGa46mL5pOA5bSV5Zih6b6f46qX5paG46q95pe/5pmT46uy5pqS46yi5pyW462C5p6k5qCA462Y5qGK5qKE462y462x46275qSJ5qWD54mc5qWk5qaf5qaF46685qeW46+d5qml5qm05qmx5qqC46+s5qqZ46+y5qqr5qq15quU5qu25q6B5q+B5q+q5rG15rKq47OL5rSC5rSG5rSm5raB47Ov5rak5rax5riV5riY5rip5rqG8KingOa6u+a7oua7mum9v+a7qOa7qea8pOa8tOO1hvCjvYHmvoHmvr7jtarjtbXnhrflspnjtorngKzjtpHngZDngZTnga/ngb/ngonwoIyl5I+B45ex8KC7mFwiXSxcbltcIjhlNDBcIixcIvCju5flnr7wpruT54S+8KWfoOOZjuamovCor6nlrbTnqYnwpaOh8KmTmeeppeepvfClpqznqrvnqrDnq4Lnq4Pnh5HwppKN5IeK56ua56ud56uq5Iev5ZKy8KWwgeesi+etleesqfCljI7wpbO+566i562v6I6c8KWutPCmsb/nr5DokKHnrpLnrrjwpbSg47at8KWxpeiSkuevuuewhuewtfCls4HnsYTnsoPwpKKC57Km5pm98KSVuOezieezh+ezpuextOezs+ezteezjlwiXSxcbltcIjhlYTFcIixcIue5p+SUnfCmuYTntZ3wpruW55KN57aJ57ar54S157az57eS8KSBl/CmgKnnt6TjtJPnt7XwoZ+557el8KiNree4nfCmhKHwpoWa57mu57qS5Iyr6ZGs57in572A572B572H56S28KaLkOmnoee+l/CmjZHnvqPwoZmh8KCBqOSVnPCjnabklIPwqIy657+68KaSieiAheiAiOiAneiAqOiAr/CqgofwprOD6IC76IC86IGh8KKclOSmifCmmKbwo7ej8KabqOacpeiCp/CoqYjohIfohJrlorDwopu25rG/8KaSmPCkvrjmk6fwoZKK6IiY8KGhnuapk/CkqaXwpKqV5JG66Iip8KCsjfCmqZLwo7W+5L+58KGTveiTouiNovCmrIrwpKan8KOUsPChnbPwo7e46Iqq5qSb8K+mlOSHm1wiXSxcbltcIjhmNDBcIixcIuiVi+iLkOiMmvCguJbwoZ6045uB8KOFvfCjlZroibvoi6LojJjwo7qL8Ka2o/CmrIXwpq6X8KOXjuO2v+iMneWXrOiOheSUi/CmtqXojqzoj4Hoj5Pjkb7wpruU5qmX6JWa45KW8Ka5gvCiu6/okZjwpa+k6JGx47eT5JOk5qqn6JGK8KOyteelmOiSqPCmrpbwprm38Ka5g+iTnuiQj+iOkeSSoOiSk+iTpPClspHkiYDwpbOA5JWD6JS05auy8Ka6meSUp+iVs+SUluaev+iYllwiXSxcbltcIjhmYTFcIixcIvComKXwqJi76JeB8KeCiOiYgvChloLwp4ON8K+msuSVquiYqOOZiPChoqLlj7fwp46a6Jm+6J2x8KqDuOifrvCisKfonrHon5rooI/lmaHomazmoZbkmI/ooYXooYbwp5eg8KO2ufCnl6TooZ7oopzkmZvoorToorXmj4Hoo4Xnnbfwp5yP6KaH6KaK6Kam6Kap6Kan6Ka88Kiopeinp/CnpKTwp6q96Kqc556T6Ye+6KqQ8KepmeerqfCnrLrwo76P5JyT8KesuOeFvOisjOisn/ClkLDwpZWl6Ky/6K2M6K2N6Kqp8KSpuuiukOium+iqr/Chm5/kmJXooY/ospvwp7WU8Ke2j/Cvp5TjnKXwp7WT6LOW8Ke2mPCntr3otJLotIPwoaSQ6LOb54Gc6LSR8KSzieO7kOi1t1wiXSxcbltcIjkwNDBcIixcIui2qfCogILwoYCU8KSmiuOtvPCohrzwp4SM56un6Lqt6Lq26LuD6YuU6LyZ6Lyt8KiNpfCokJLovqXpjIPwqoqf8KCpkOi+s+SkqvCop57wqJS98KO2u+W7uPCjiaLov7nwqoCU8KiavPColIHwooyl46aA8Ka7l+mAt/ColLzwp6q+6YGh8KiVrPComIvpgqjwqJyT6YOE8KibpumCrumDvemFp+OrsOmGqemHhOeyrPCopLPwobqJ6YiO5rKf6YmB6Ymi8KWWuemKufCoq4bwo7Kb8KisjPCll5tcIl0sXG5bXCI5MGExXCIsXCLwoLSx6Yys6Y2r8KirofCor6vngo/lq4PwqKui8KirpeSlpemJhPCor6zwqLC58Kivv+mNs+mRm+i6vOmWhemWpumQpumWoOa/tuSKufCimbrwqJuY8KGJvPCjuK7kp5/msJzpmbvpmpbkhazpmqPwpruV5oea6Zq256O18KiroOmaveWPjOSmofCmsrjwoIm08KaQkPCpgq/wqYOl8KSrkfChpJXwo4yK6Zyx6JmC6Zy25KiP5JS95JaF8KSrqeeBteWtgemcm+mdnPCph5XpnZflrYrwqYer6Z2f6ZCl5YOQ8KOCt/Cjgrzpnonpnp/pnrHpnr7pn4Dpn5Lpn6DwpZGs6Z+u55Cc8KmQs+mfv+mftfCpkJ3wp6W65KuR6aC06aCz6aGL6aGm46yO8KeFteO1kfCgmLDwpIWcXCJdLFxuW1wiOTE0MFwiLFwi8KWchumjiumit+mjiOmjh+Srv/CmtKfwoZuT5Zaw6aOh6aOm6aOs6Y246aS58KSoqeStsvCpoZfwqaSF6ae16aiM6ai76aiQ6amY8KWcpeObhPCpgrHwqa+V6aug6aui8KmshemrtOSwjumslOmsrfComIDlgLTprLTwpqao46OD8KOBvemtkOmtgPCptL7lqYXwoaGj6a6O8KSJi+mwgumvv+mwjPCpuajpt5Twqb638KqGkvCqhqvwqoOh8KqEo/Cqh5/ptb7ptoPwqoS06biO5qKIXCJdLFxuW1wiOTFhMVwiLFwi6beE8KKFm/CqhpPwqoig8KGku/CqiLPptLnwqoK58KqKtOm6kOm6lem6num6ouS0tOm6qum6r/CkjaTpu4HjraDjp6XjtJ3kvLLjnr7wqLCr6byC6byI5K6W6ZCk8Ka2oum8l+m8lum8ueWan+Waium9hemmuPCpgovpn7Lokb/pvaLpvannq5zpvo7niJbkrr7wpKW18KSmu+eFt/Ckp7jwpI2I8KSpkeeOnvCor5rwoaO656af8KilvvCouLbpjanpj7PwqKmE6Yus6Y6B6Y+L8KilrPCkkrnniJfju6vnnbLnqYPng5DwpJGz8KSPuOeFvvChn6/ngqPwoaK+8KOWmeO7h/ChooXwpZCv8KGfuOOcovChm7vwoaC545uh8KGdtPCho5Hwpb2L45yj8KGbgOWdm/CkqKXwoY++8KGKqFwiXSxcbltcIjkyNDBcIixcIvChj4bwoZK26JSD8KOapuiUg+iRlfCkppTwp4Wl8KO4sfCllZzwo7u78KeBkuSTtPCjm67wqaad8Ka8puafueOcs+OwleO3p+WhrPChpKLmoJDkgZfwo5y/8KSDofCkgovwpISP8KawoeWTi+WanvCmmrHlmpLwoL+f8KCuqPCguI3pj4bwqKyT6Y6c5Lu45YSr46CZ8KSQtuS6vPCgkaXwoI2/5L2L5L6K8KWZkeWpqPCghqvwoI+L46aZ8KCMivCgkJTjkLXkvKnwoIuA8Ki6s/CgibXoq5rwoIiM5LqYXCJdLFxuW1wiOTJhMVwiLFwi5YON5YSN5L6i5LyD8KSojvCjuorkvYLlgK7lgazlgoHkv4zkv6XlgZjlg7zlhZnlhZvlhZ3lhZ7mubbwo5aV8KO4ufCjur/mtbLwoaKE8KO6ieWGqOWHg/Cgl6Dkk53woJKj8KCSkvCgkpHotbrwqKqc8KCcjuWJmeWKpPCgobPli6Hpja7kmbrnhozwpI6M8KCwoPCkpqzwoYOk5qeR8KC4neeRueO7nueSmeeQlOeRlueOmOSujvCkqrzwpIKN5Y+Q45aE54iP8KSDieWWtPCgjYXlk43woK+G5Zyd6Ymd6Zu06Y2m5Z+d5Z6N5Z2/45i+5aOL5aqZ8KiphvChm7rwoZ2v8KGckOWorOWmuOmKj+WpvuWrj+WokvClpYbwoaez8KGhofCkipXjm7XmtIXnkYPlqKHwpbqDXCJdLFxuW1wiOTM0MFwiLFwi5aqB8Kivl/CgkJPpj6DnkozwoYyD54SF5KWy6ZCI8Kinu+mOveOeoOWwnuWynuW5nuW5iPChppbwoaW88KOrruW7jeWtj/ChpIPwoaSE45yB8KGioOObnfChm77jm5PohKrwqKmH8KG2uvCjkbLwqKao5byM5byO8KGkp/ChnqvlqavwoZy75a2E6JiU8KeXveihoOaBvvCioaDwopir5b+b47q48KKWr/Cilr7wqYKI8Ka9s+aHgPCggL7woIGG8KKYm+aGmeaGmOaBtfCispvworSH8KSblPCphY1cIl0sXG5bXCI5M2ExXCIsXCLmkbHwpJml8KKtquOoqfCirKLwo5GQ8KmjqvCiubjmjLfwqpGb5pK25oyx5o+R8KSno/CitafmiqTworKh5pC75pWr5qWy46+08KOCjvCjiq3wpKaJ8KOKq+WUjfCji6DwoaOZ8KmQv+abjvCjionwo4az46ug5IaQ8KWWhPCorKLwpZaP8KGbvPCllZvwpZCl56Ou8KOEg/ChoKrwo4i045Gk8KOIj/CjhoLwpIuJ5pqO8Ka0pOaZq+Suk+aYsPCnobDwober5pmj8KOLkvCji6HmmJ7wpaGy46OR8KOguvCjnrzjrpnwo56i8KOPvueTkOOuluaej/CkmKrmorbmoJ7jr4Tmqr7joaPwo5+V8KSSh+aos+apkuarieashfChpJLmlJHmopjmqYzjr5fmqbrmrZfwo7+A8KOymumOoOmLsvCor6rwqKuLXCJdLFxuW1wiOTQ0MFwiLFwi6YqJ8KiAnvCop5zpkafmtqXmvIvwpKes5rWn8KO9v+O2j+a4hPCkgLzlqL3muIrloYfmtKTnoYLnhLvwpIya8KSJtueDseeJkOeKh+eKlPCkno/wpJyl5YW58KSqpPCgl6vnkbrwo7u48KOZn/CkqYrwpKSX8KW/oeO8huO6sfCkq5/wqLCj8KO8teaCp+O7s+eTjOeQvOmOh+eQt+SSn/Cmt6rklZHnloPjvaPwpLOZ8KS0huO9mOeVleeZs/Cql4bjrJnnkajwqKuM8KSmq/Ckpo7jq7tcIl0sXG5bXCI5NGExXCIsXCLjt43wpKmO47u/8KSnhfCko7Pph7rlnLLpjYLwqKuj8KGhpOWDn/CliKHwpYen55248KOIsuecjuecj+edu/Ckmpfwo56B46me8KSjsOeQuOeSm+O6v/CkqrrwpKuH5IOI8KSqlvCmhq7pjIfwpZaB56Ce56KN56KI56OS54+Q56WZ8KedgfClm6PkhI7nppvokpbnpqXmqK3wo7u656i656e05IWu8KGbpuSEsumIteensfCgtYzwpKaM8KCKmfCjtrrwoZ2u45aX5ZWr45Ww45qq8KCHlPCgsI3nq6LlqZnwopu18KWqr/ClqpzlqI3woImb56Ow5aiq8KWvhuervuSHueexneexreSIkfClrrPwpbq88KW6puezjfCkp7nwoZ6w57KO57G857Ku5qqy57ec57iH57eT572O8KaJoVwiXSxcbltcIjk1NDBcIixcIvCmhZzwp62I57aX8KW6guSJqvCmrbXwoKSW5p+W8KCBjvCjl4/ln4TwppCS8KaPuPCkpaLnv53nrKfwoKCs8KWrqfCltYPnrIzwpbiO6aem6JmF6amj5qic8KOQv+OnovCkp7fwppat6aif8KaWoOiSgPCnhKfwprOR5JOq6IS35JCC6IOG6ISJ6IWC8KaetOmjg/CmqYLoiaLoiaXwpqmR6JGT8Ka2p+iYkPCniJvlqobkhb/woaGA5ayr8KGioeWrpPCho5jomqDwr6a88KO2j+igrfCnkKLlqIJcIl0sXG5bXCI5NWExXCIsXCLooa7kvYXooofoor/oo6bopaXopY3wpZqD6KWU8KeehfCnnoTwqK+18KivmfCorpzwqKe547qt6JKj5Ju15JuP45+y6Ki96Kic8KmRiOW9jemIq/CkioTml5TnhKnng4TwoaGF6bWt6LKf6LOp8Ke3nOWmmuefg+WnsOSNruOblOi4qui6p/CksInovLDovYrki7TmsZjmvrvwooyh5KKb5r255rqL8KGfmumvqeOatfCkpK/pgrvpgpfllbHkpIbphrvpkITwqKmL5IGi8KirvOmQp/CosJ3wqLC76JOl6Kir6ZaZ6Zan6ZaX6ZaW8Ki0tOeRheO7gvCko7/wpKmC8KSPquO7p/CjiKXpmo/wqLun8Ki5pvCouaXju4zwpKet8KSpuPCjv67nkJLnkavju7zpnYHwqYKwXCJdLFxuW1wiOTY0MFwiLFwi5qGH5Kid8KmCk/Cln5/pnZ3pjajwqKaJ8KiwpvCorK/wpo6+6Yq65ayR6K2p5KS854+58KSIm+mem+mdsemkuPCgvKblt4HwqK+F8KSqsumgn/Cpk5rpi7bwqZeX6Yel5JOA8KitkPCkqafwqK2k6aOc8KipheO8gOmIquSkpeiQlOmku+mljfCnrIbjt73pppvkra/ppqrpqZzwqK2l8KWjiOaqj+mooeWrvumor/Cpo7HkrpDwqaWI6aa85K695K6X6Y295aGy8KGMguWgovCkprhcIl0sXG5bXCI5NmExXCIsXCLwoZOo56GE8KKcn/Cjtrjmo4Xjtb3pkZjjpKfmhZDwop6B8KKlq+aEh+mxj+mxk+mxu+mwtemwkOmtv+mvj/CpuK3prp/wqoe18KqDvum0oeSyrvCkhITpuJjksrDptIzwqoa08KqDrfCqg7PwqaSv6bal6JK98Ka4kvCmv5/wpq6C6Je85JSz8Ka2pPCmuoTwprew6JCg6Jeu8Ka4gPCjn5fwpoGk56ei8KOWnPCjmYDkpK3wpKee47Wi6Y+b6Yq+6Y2I8KCKv+eiuemJt+mRjeS/pOORgOmBpPCllZ3noL3noZTnorbnoYvwoZ2X8KOHifCkpYHjmprkvbLmv5rmv5nngJ7ngJ7lkJTwpIa15Z675aOz5Z6K6bSW5Z+X54S045Kv8KSGrOeHq/CmsYDwpL6X5ayo8KGetfCoqYlcIl0sXG5bXCI5NzQwXCIsXCLmhIzlq47lqIvkirzwpJKI45ys5K278KinvOmOu+mOuPCho5bwoLyd6JGy8KazgPChkJPwpIu68KKwpvCkj4HlppTwo7a38Kadgee2qPCmhZvwpoKk8KSmufCkpovwqKe66Yul54+i47up55K08Kito/Chop/ju6HwpKqz5quY54+z54+747uW8KSovvCkqpTwoZ+Z8KSppvCgjqfwoZCk8KSnpeeRiPCkpJbngqXwpKW26YqE54+m6Y2f8KCTvumMsfCoq47wqKiW6Y6G8Kivp/Cll5XkpLXwqKqC54WrXCJdLFxuW1wiOTdhMVwiLFwi8KSlg/Cgs7/lmqTwoJia8KCvq/CgsrjllILnp4TwoZ+657e+8KGbgvCkqZDwoaGS5JSu6ZCB45yK8KirgPCkpq3lprDwoaK/8KGig/CnkoTlqqHjm6Lwo7Wb45qw6Ymf5am58KiqgfChoaLpjbTjs43woKq05KqW46aK5YO047Wp47WM8KGOnOeFteSLu/CoiJjmuI/wqYOk5JOr5rWX8Ke5j+eBp+ayr+OzlvCjv63wo7it5riC5ryM47Wv8KCPteeVkeOavOOTiOSagOO7muShseWnhOmJruSkvui9gfCosJzwpq+A5aCS5Z+I45uW8KGRkueDvvCkjaLwpKmx8KK/o/ChirDwoo695qK55qWn8KGOmPCjk6Xwp6+08KObn/CoqoPwo5+W8KOPuvCksp/mqJrwo5qt8Kayt+iQvuSTn+STjlwiXSxcbltcIjk4NDBcIixcIvCmtKbwprWR8KaygvCmv57mvJfwp4SJ6Iy98KGcuuiPrfCmsoDwp4GT8KGfm+WmieWqgvChnrPlqaHlqbHwoaSF8KSHvOOcreWnr/ChnLzjm4fnho7pjpDmmprwpIql5amu5air8KSKk+aoq/Cju7nwp5y28KSRm/Cki4rnhJ3wpImZ8KinoeS+sPCmtKjls4LwpJOO8Ke5jfCkjr3mqIzwpImW8KGMhOeCpueEs/Ckj6njtqXms5/wr6Cl8KSpj+e5peWnq+W0r+O3s+W9nPCkqZ3woZ+f57ak6JCmXCJdLFxuW1wiOThhMVwiLFwi5ZKF8KOruvCjjIDwoIiU5Z2+8KCjlfCgmJnjv6Xwob6e8KqKtueAg/CphZvltbDnjo/ns5PwqKmZ8KmQoOS/iOe/p+eLjeeMkPCnq7TnjLjnjLnwpZu2542B542I47qp8KesmOmBrOeHtfCko7Lnj6Hoh7bju4rnnIzju5HmsqLlm73nkJnnkJ7nkJ/ju6Lju7Dju7Tju7rnk5PjvI7jvZPnlYLnla3nlbLnlo3jvbznl4jnl5zjv4DnmY3jv5fnmbTjv5znmbrwpL2c54aI5Zij6KaA5aGp5ICd552D5IC55p2h5IGF45eb556Y5IGq5IGv5bGe556+55+L5aOy56CY54K556Cc5IKo56C556GH56GR56Gm6JGI8KWUteeks+agg+eksuSEg1wiXSxcbltcIjk5NDBcIixcIuSEieemkeemmei+u+eohui+vOSFp+eqkeSGsueqvOiJueSHhOerj+erm+SHj+S4oeetouetrOetu+ewkuewm+SJoOSJuuexu+eynOSKjOeyuOSKlOezrei+k+eDgPCgs4/nt4/nt5Tnt5Dnt73nvq7nvrTnip/kjpfogKDogKXnrLnogK7ogLHogZTjt4zlnrTngqDogrfog6nkj63ohIznjKrohI7ohJLnlaDohJTkkIHjrLnohZbohZnohZpcIl0sXG5bXCI5OWExXCIsXCLkkJPloLrohbzohoTkkKXohpPkkK3ohqXln6/oh4Hoh6ToiZTkko/oiqboibboi4roi5joi7/kkrDojZfpmanmporokIXng7XokaTmg6PokojklITokr7ok6Hok7jolJDolLjolZLklLvola/olbDol6DklbfombLompLomrLom6/pmYXonovkmIbkmJfooq7oo7/opKTopYfoppHwp6Wn6Kip6Ki46KqU6Kq06LGR6LOU6LOy6LSc5J6Y5aGf6LeD5J+t5Luu6Li65ZeY5Z2U6Lmx5Ze16Lqw5KC36LuO6Lui6Luk6Lut6Luy6L636L+B6L+K6L+M6YCz6aeE5KKt6aOg6YiT5KSe6Yio6YmY6Ymr6Yqx6Yqu6Yq/XCJdLFxuW1wiOWE0MFwiLFwi6Yuj6Yur6Yuz6Yu06Yu96Y2D6Y6E6Y6t5KWF5KWR6bq/6ZCX5YyB6ZCd6ZCt6ZC+5KWq6ZGU6ZG56ZSt6Zai5Kan6Ze06Ziz5Kel5p6g5Kik6Z2A5Ki16Z6y6Z+C5ZmU5Kuk5oOo6aK55KyZ6aOx5aGE6aSO6aSZ5Ya06aSc6aS36aWC6aWd6aWi5K2w6aeF5K6d6ai86ayP56qD6a2p6a6B6a+d6a+x6a+05LGt6bCg452v8KGvgum1iemwulwiXSxcbltcIjlhYTFcIixcIum7vuWZkOm2k+m2vem3gOm3vOmTtui+tum5u+m6rOm6sem6vem7humTnOm7oum7sem7uOeriOm9hPCggpTwoIq38KCOoOakmumTg+WmrPCgk5floYDpk4HjnrnwoJeV8KCYlfCgmbbwoZq65Z2X54Wz8KCrgvCgq43woK6/5ZGq8K+gu/Cgr4vlkp7woK+78KCwu/CgsZPwoLGl8KCxvOaDp/Cgso3lmbrwoLK18KCznfCgs63woLWv8KC2svCgt4jmpZXpsK/onqXwoLiE8KC4jvCgu5fwoL6Q8KC8rfCgubPlsKDwoL685biL8KGBnPChgY/woYG25pye8KGBu/ChgojwoYKW45mH8KGCv/Chg5PwoYSv8KGEu+WNpOiSrfChi6PwoY218KGMtuiugfChlbfwoZiZ8KGfg/Chn4fkubjngrvwoaCt8KGlqlwiXSxcbltcIjliNDBcIixcIvChqK3woamF8KGwqvChsbDwobKs8KG7iOaLg/Chu5XwobyV54aY5qGV8KKBheanqeObiPCiibzwoo+X8KKPuvCinKrwoqGx8KKlj+iLvfCipafwoqaT8KKrleimpfCiq6jovqDwoqyO6Z648KKsv+mhh+mqvfCisYxcIl0sXG5bXCI5YjYyXCIsXCLworKI8KKyt/Clr6jworSI8KK0kvCitrfworaV8KK5gvCivbTwor+M8KOAs/Cjgabwo4yf8KOPnuW+seaZiOaav/Cnqbnwo5Wn8KOXs+eIgfCkprrnn5fwo5ia8KOclue6h/CgjYblorXmnI5cIl0sXG5bXCI5YmExXCIsXCLmpJjwo6qn8KeZl/Clv6Lwo7iR8KO6ufCnl77wooKa5KOQ5Kq48KSEmfCoqprwpIuu8KSMjfCkgLvwpIy08KSOlvCkqYXwoJeK5YeS8KCYkeWmn/Chuqjjrr7wo7O/8KSQhPCkk5blnojwpJm046ab8KScr/Col6jwqaeJ452i8KKHg+itnvCorY7pp5bwpKCS8KSju/CkqJXniInwpKuA8KCxuOWlpfCkuqXwpL6G8KCduei7mvClgKzlio/lnL/nhbHwpYqZ8KWQmfCjvYrwpKqn5Za88KWRhvClka7wpq2S6YeU45Gz8KWUv/CnmLLwpZWe5JyY8KWVovCllabwpZ+H8KSkv/CloZ3lgabjk7vwo4+M5oOe8KWkg+SdvPCopYjwpaqu8KWuifClsIbwobaQ5Z6h54WR5r628KaEgvCnsJLpgZbwpoay8KS+muitovCmkILwppGKXCJdLFxuW1wiOWM0MFwiLFwi5bWb8Kavt+i8tvCmkoTwoaSc6Kuq8KSntvCmkojwo7+v8KaUkuSvgPCmlr/wppq18KKcm+mRpfCln6HmhpXlqKfwr6ON5L675Zq58KSUofCmm7zkuarwpKS06ZmW5raP8KayveOYmOilt/CmnpnwpqGu8KaQkfCmoZ7nh5/wpqOH562C8KmDgPCgqJHwpqSm6YSE8Kakueephem3sPCmp7rpqKbwpqit45mf8KaRqfCggKHnpoPwpqi08Katm+W0rPCjlJnoj4/wpq6d5JuQ8KaypOeUu+ihpfCmtq7lorZcIl0sXG5bXCI5Y2ExXCIsXCLjnJzwopaN8KeBi/Cnh43jsZTwp4qA8KeKhemKgfCihbrwp4qL6Yyw8KeLpvCkp5DmsLnpkp/wp5GQ8KC7uOigp+ijtfCipKbwqJGz8KGesea6uPCkqKrwoaCg46ak45q55bCQ56ej5JS/5pq28KmyrfCpoqTopYPwp5+M8KehmOWbluSDn/ChmIrjpqHwo5yv8KiDqPChj4Xnhq3ojabwp6ed8KmGqOWpp+Syt/Cngq/wqKar8KenvfCnqIrwp6yL8Ke1pvCkhbrnrYPnpb7wqICJ5r618KqLn+aog/CojJjljqLwpriH6Y6/5qC26Z2d8KiFr/CogKPwpqa18KGPrfCjiK/wqIGI5baF8KiwsPCogoPlnJXpoKPwqKWJ5bar8KSmiOaWvuanleWPkvCkqqXwo76B47CR5py28KiCkPCog7TwqISu8KG+ofCohY9cIl0sXG5bXCI5ZDQwXCIsXCLwqIaJ8KiGr/CoiJrwqIyG8KiMr/Cojorjl4rwqJGo8KiaquSjuuaPpvCopZbnoIjpiZXwqKa45I+y8Kinp+SPn/Cop6jwqK2G8KivlOWnuPCosInovIvwqL+F8KmDrOetkfCphJDwqYS847e38KmFnvCkq4rov5Dnio/lmovwqZOn8KmXqfCplrDwqZa48KmcsvCpo5HwqaWJ8KmlqvCpp4Pwqaio8KmsjvCptZrwqbab57qf8Km7uPCpvKPksqTplYfwqoqT54ai8KqLv+S2kemAkvCql4vktpzwoLKc6L6+5ZeBXCJdLFxuW1wiOWRhMVwiLFwi6L668KKSsOi+ufCkqpPklInnub/mvZbmqrHku6rjk6TwqKys8KeineOcuui6gPChn7XwqICk8KitrPCorpnwp6i+8Kaar+O3q/CnmZXwo7K38KWYtfClpZbkuprwpbqB8KaJmOWav/Cgua3ouI7lra3wo7qI8KSynuaPnuaLkPChn7bwoaG75pSw5Zit8KWxiuWQmvCljJHjt4bwqbaY5LG95Zii5Zie572J8KW7mOWltfCjtYDonbDkuJzwoL+q8KC1ifCjmrrohJfptZ7otJjnmLvpsYXnmY7nnrnpjYXlkLLohYjoi7flmKXohLLokJjogr3ll6rnpaLlmYPlkJbwoLqd45eO5ZiF5Zex5pux8KiLouOYreeUtOWXsOWWuuWSl+WVsvCgsYHwoLKW5buQ8KWFiPCgubbworGiXCJdLFxuW1wiOWU0MFwiLFwi8KC6oum6q+e1muWXnvChgbXmip3pna3lkpTos43nh7bphbbmj7zmjrnmj77llanwoq2D6bGy8KK6s+WGmuOTn/CgtqflhqflkY3llJ7llJPnmabouK3wpqKK55ax6IK26KCE6J6G6KOH6Ia26JCc8KGDgeSTrOeMhPCknIblrpDojIvwpqKT5Zm78KKbtPCntK/wpIaj8Ke1s/Cmu5Dwp4q26YWw8KGHmemIiPCjs7zwqpqp8KC6rPCgu7nniabwobKi5J2O8KS/gvCnv7nwoL+r5IO6XCJdLFxuW1wiOWVhMVwiLFwi6bGd5pSf8KK2oOSjs/Ckn6DwqbW88KC/rPCguIrmgaLwp5aj8KC/rVwiXSxcbltcIjllYWRcIixcIvCmgYjwoYaH54aj57qO6bWQ5Lia5LiE45W35ayN5rKy5Y2n45qs46ec5Y2945ql8KSYmOWimvCkra7oiK3lkYvlnqrwpaqV8KCluVwiXSxcbltcIjllYzVcIixcIuOpkvCikaXnjbTwqbqs5LSJ6a+t8KOzvvCpvLDksZvwpL6p8KmWnvCpv57okZzwo7a28KeKsvCmnrPwo5yg5oyu57Sl8KO7t/CjuKzjqKrpgIjli4zjubTjmbrkl6nwoJKO55mA5auw8KC6tuehuvCnvK7loqfkgr/lmbzprovltbTnmZTwqpC06bqF5LOh55e545+75oSZ8KODmvCkj7JcIl0sXG5bXCI5ZWY1XCIsXCLlmZ3woYqp5Z6n8KSlo/CpuIbliLTwp4Ku45at5rGK6bW8XCJdLFxuW1wiOWY0MFwiLFwi57GW6ay55Z+e8KGdrOWxk+aTk/Cpk5Dwpoy18KeFpOiarfCgtKjwprSi8KSrovCgtbFcIl0sXG5bXCI5ZjRmXCIsXCLlh77wobyP5baO6ZyD8KG3kem6gemBjOesn+msguWzkeeuo+aJqOaMtemrv+evj+msquexvumsruexgueyhumwleevvOmsiem8l+mwm/CkpL7pvZrllbPlr4Pkv73pupjkv7LliaDjuIbli5HlnaflgZblprfluJLpn4jptqvovZzlkanpnrTppYDpnrrljKzmhLBcIl0sXG5bXCI5ZmExXCIsXCLmpKzlj5rpsIrptILksLvpmYHmpoDlgqbnlYbwoZ2t6aea5YmzXCJdLFxuW1wiOWZhZVwiLFwi6YWZ6ZqB6YWcXCJdLFxuW1wiOWZiMlwiLFwi6YWR8Ki6l+aNv/CmtKPmq4rlmJHpho7nlbrmioXwoI+8542P57Gw8KWwofCjs71cIl0sXG5bXCI5ZmMxXCIsXCLwpKSZ55uW6a6d5Liq8KCzlOiOvuihglwiXSxcbltcIjlmYzlcIixcIuWxiuangOWDreWduuWIn+W3teS7juawsfCgh7LkvLnlkpzlk5rliprotoLjl77lvIzjl7NcIl0sXG5bXCI5ZmRiXCIsXCLmrZLphbzpvqXprpfpoK7porTpqrrpuqjpuoTnhbrnrJRcIl0sXG5bXCI5ZmU3XCIsXCLmr7rooJjnvbhcIl0sXG5bXCI5ZmViXCIsXCLlmKDwqpmK6Lm36b2TXCJdLFxuW1wiOWZmMFwiLFwi6LeU6LmP6bic6LiB5oqC8KiNvei4qOi5teerk/CkqbfnqL7no5jms6roqafnmIdcIl0sXG5bXCJhMDQwXCIsXCLwqKma6bym5rOO6J+W55eD8KqKsuehk/CvoYDotIzni6LnjbHorK3njILnk7Hos6vwpKq76Jiv5b666KKg5JK3XCJdLFxuW1wiYTA1NVwiLFwi8KGgu/CmuIVcIl0sXG5bXCJhMDU4XCIsXCLoqb7wopSbXCJdLFxuW1wiYTA1YlwiLFwi5oO955mn6auX6bWE6Y2u6a6P6J+1XCJdLFxuW1wiYTA2M1wiLFwi6KCP6LO354ys6Zyh6a6w45eW54qy5LCH57GR6aWK8KaFmeaFmeSwhOm6luaFvVwiXSxcbltcImEwNzNcIixcIuWdn+aFr+aKpuaIueaLjuOpnOaHouWOqvCjj7XmjaTmoILjl5JcIl0sXG5bXCJhMGExXCIsXCLltZfwqK+C6L+a8Ki4uVwiXSxcbltcImEwYTZcIixcIuWDmfChtYbnpIbljLLpmLjwoLy75IGlXCJdLFxuW1wiYTBhZVwiLFwi55++XCJdLFxuW1wiYTBiMFwiLFwi57OC8KW8muezmueoreiBpuiBo+e1jeeUheeTsuimlOiImuacjOiBovCnkobogZvnk7DohIPnnKToponwpp+M55WT8Ka7keieqeifjuiHiOiejOipieiyreitg+ecq+eTuOiTmuOYteamsui2plwiXSxcbltcImEwZDRcIixcIuimqeeRqOa2ueifgfCkgJHnk6fjt5vnhbbmgqTmhpzjs5HnhaLmgbdcIl0sXG5bXCJhMGUyXCIsXCLnvbHwqKyt54mQ5oOp5K2+5Yig47CY8KOzh/Clu5fwp5mW8KWUsfChpYTwoYu+8Kmkg/Cmt5zwp4Kt5bOB8KaGrfCoqI/wo5m38KCDrvCmoYbwpLyO5JWi5ayf8KaNjOm9kOm6pvCmiatcIl0sXG5bXCJhM2MwXCIsXCLikIBcIiwzMSxcIuKQoVwiXSxcbltcImM2YTFcIixcIuKRoFwiLDksXCLikbRcIiw5LFwi4oWwXCIsOSxcIuS4tuS4v+S6heS6oOWGguWGluWGq+WLueWMuOWNqeWOtuWkiuWugOW3m+K8s+W5v+W7tOW9kOW9oeaUtOaXoOeWkueZtui+tematsKoy4bjg73jg77jgp3jgp7jgIPku53jgIXjgIbjgIfjg7zvvLvvvL3inL3jgYFcIiwyM10sXG5bXCJjNzQwXCIsXCLjgZlcIiw1OCxcIuOCoeOCouOCo+OCpFwiXSxcbltcImM3YTFcIixcIuOCpVwiLDgxLFwi0JBcIiw1LFwi0IHQllwiLDRdLFxuW1wiYzg0MFwiLFwi0JtcIiwyNixcItGR0LZcIiwyNSxcIuKHp+KGuOKGueOHj/Cgg4zkuZrwoIKK5YiC5JKRXCJdLFxuW1wiYzhhMVwiLFwi6b6w5YaI6b6x8KeYh1wiXSxcbltcImM4Y2RcIixcIu+/ou+/pO+8h++8guOIseKEluKEoeOCm+OCnOK6gOK6hOK6huK6h+K6iOK6iuK6jOK6jeK6leK6nOK6neK6peK6p+K6quK6rOK6ruK6tuK6vOK6vuK7huK7iuK7jOK7jeK7j+K7luK7l+K7nuK7o1wiXSxcbltcImM4ZjVcIixcIsqDyZDJm8mUybXFk8O4xYvKismqXCJdLFxuW1wiZjlmZVwiLFwi77+tXCJdLFxuW1wiZmE0MFwiLFwi8KCVh+mLm/Cgl5/wo7+F6JWM5Iq154+v5Ya145mJ8KSlgvCop6TpjYTwoaeb6Iuu8KOziOegvOadhOaLn/CkpLPwqKaq8KCKoPCmrrPwoYyF5L6r8KKTreWAiPCmtKnwp6qE8KOYgPCkqrHwopST5YCp8KCNvuW+pPCgjoDwoI2H5rub8KCQn+WBveWEgeORuuWEjumhrOOdg+iQlvCkpqTwoJKH5YWg8KOOtOWFqvCgr7/wooO88KCLpfCilLDwoJaO8KOIs/ChpoPlroLonb3woJaz8KOymeWGsuWGuFwiXSxcbltcImZhYTFcIixcIum0tOWHieWHj+WHkeOznOWHk/CkqqblhrPlh6LljYLlh63oj43mpL7wo5yt5b275YiL5Yim5Yi85Yq15YmX5YqU5Yq55YuF57CV6JWC5Yug6JiN8Kask+WMhfCoq57llYnmu5nwo76A8KCllPCjv6zljLPljYTwoK+i5rOL8KGcpuagm+ePleaBiuO6quOjjPChm6jnh53kkqLlja3ljbTwqJqr5Y2+5Y2/8KGWlvChmJPnn6bljpPwqKqb5Y6g5Y6r5Y6u546n8KWdsuO9meeOnOWPgeWPheaxieS5ieWfvuWPmeOqq/Cgro/lj6Dwo7+r8KK2o+WPtvCgsbflkJPngbnllKvmmZfmtZvlka3wpq2T8KC1tOWVneWSj+WSpOSepvChnI3woLud47a08KC1jVwiXSxcbltcImZiNDBcIixcIvCoprzwopqY5ZWH5LOt5ZCv55CX5ZaG5Zap5ZiF8KGjl/CkgLrklZLwpJC15pqz8KGCtOWYt+abjfCjiormmqTmmq3lmY3lmY/no7Hlm7Hpnoflj77lnIDlm6/lm63wqK2m45ij8KGJj+WdhvCkhqXmsa7ngovlnYLjmrHwprG+5Z+m8KGQluWgg/ChkZTwpI2j5aCm8KSvteWhnOWiquOVoeWjoOWjnPChiLzlo7vlr7/lnYPwqoWQ8KSJuOmPk+OWoeWkn+aipuObg+a5mVwiXSxcbltcImZiYTFcIixcIvChmL7lqKTllZPwoZqS6JSF5aeJ8KC1jvCmsoHwprSq8KGfnOWnmfChn7vwoZ6y8Ka2pua1sfChoKjwoZuV5ae58Ka5heWqq+Wpo+ObpvCkpqnlqbfjnIjlqpbnkaXlq5Pwpr6h8KKVlOO2hfChpJHjnLLwoZq45bqD5YuQ5a225paI5a288KeojuSAhOShnfCgiITlr5XmhaDwoai08KWnjPCglqXlr7Plrp3ktJDlsIXwoa2E5bCT54+O5bCU8KGypfCmrKjlsYnko53lsoXls6nls6/ltovwobe58KG4t+W0kOW0mOW1hvChuqTlsrrlt5foi7zjoK3wpKSB8KKBifCihbPoiofjoLbjr4LluK7mqorlubXlubrwpJK88KCzk+WOpuS6t+W7kOWOqPChnbHluInlu7TwqJKCXCJdLFxuW1wiZmM0MFwiLFwi5bu55bu746Kg5bu85qC+6ZCb5byN8KCHgfCvopTjq57koq7woYy65by68KaiiPCij5DlvZjwopGx5b2j6Z698Ka5ruW9sumNgPCoqLblvqfltrbjtZ/wpYmQ8KG9qvCng7jwopmo6YeW8KCKnvCoqKnmgLHmmoXwoaG346Wj47eH45i55Z6Q8KKetOelseO5gOaCnuaCpOaCs/CkpoLwpKaP8Kepk+eSpOWDoeWqoOaFpOiQpOaFgvCvoqbwpruS5oaB5Ye08KCZluaGh+WuqvCjvrdcIl0sXG5bXCJmY2ExXCIsXCLwoqGf5oeT8KiunfCppZ3mh5DjpLLwoqaA8KKjgeaAo+aFnOaUnuaOi/CghJjmi4XwoZ2w5ouV8KK4jeaNrPCkp5/jqJfmkLjmj7jwoY6O8KGfvOaSkOa+ivCiuLbpoJTwpIKM8KWcneaToeaTpemRu+OppuaQuuOpl+aVjea8lvCkqKjwpKij5paF5pWt5pWf8KOBvuaWtfCkpYDkrLfml5Hkg5jwoaCp5peg5pej5b+f8KOQgOaYmPCjh7fwo4e45pmE8KOGpPCjhqXmmYvwoLm15pmn8KWHpuaZs+aZtPChuL3wo4ix8KiXtPCjh4jwpYyT55+F8KKjt+mmpOacgvCkjpzwpKih46yr5qe68KOfguadnuadp+adovCkh43wqYOt5p+X5JOp5qCi5rmQ6Yi85qCB8KOPpvCmtqDmoZ1cIl0sXG5bXCJmZDQwXCIsXCLwo5Gv5qeh5qiL8Kirn+als+ajg/Cjl43mpIHmpIDjtLLjqIHwo5i8466A5p6s5qWh8KipiuSLvOaktuammOOuofCgj4nojaPlgpDmp7nwo5mZ8KKEquaphfCjnIPmqp3jr7PmnrHmq4jwqYac47CN5qyd8KCko+aDnuasteattPCin43murXwo6ub8KCOtfChpZjjnYDlkKHwo62a5q+h8KO7vOavnOawt/CikovwpKOx8KatkeaxmuiIpuaxufCjtrzkk4Xwo7a98KSGpPCkpIzwpKSAXCJdLFxuW1wiZmRhMVwiLFwi8KOzieObpeOzq/CgtLLproPwo4e58KKSkee+j+agt/CmtKXwprah8Ka3q+a2lua1nOa5vOa8hPCkpb/wpIKF8Ka5suiUs/CmvbTlh4fmspzmuJ3okK7wqKyh5riv8KO4r+eRk/CjvoLnp4zmuY/lqpHwo4GL5r+445yN5r6d8KO4sOa7uvChkpfwpIC95JWV6Y+w5r2E5r2c47WO5r208KmFsOO0u+a+n/CkhYTmv5PwpIKR8KSFlfCkgLnwo7+w8KO+tPCkhL/lh5/wpIWW8KSFl/CkhYDwpoed54GL54G+54Kn54KB54OM54OV54OW54Of5ISE47eo54a054aW8KSJt+eEq+eFheWqiOeFiueFruWynPCkjaXnhY/pjaLwpIuB54Ss8KSRmvCkqKfwpKii54a68KivqOeCveeIjlwiXSxcbltcImZlNDBcIixcIumRgueIleWkkemRg+eIpOmNgfClmIXniK7niYDwpKW05qK954mV54mX47mV8KOBhOagjea8veeKgueMqueMq/CkoKPwqKCr5KOt8KighOeMqOeMruePj+eOqvCgsLrwpqiu54+J55GJ8KSHovChm6fwpKik5pij45uF8KSmt/Ckpo3wpKe754+355CV5qSD8KSopueQufCgl4Pju5fnkZzwoqKt55Gg8Ki6sueRh+ePpOeRtuiOueeRrOOcsOeRtOmPseaorOeSguSlk/CkqoxcIl0sXG5bXCJmZWExXCIsXCLwpIWf8KSpufCoro/lrYbwqLCD8KGinueTiPChpojnlI7nk6nnlJ7wqLuZ8KGpi+Wvl/CouqzpjoXnlY3nlYrnlafnla7wpL6C47yE8KS0k+eWjueRneeWnueWtOeYgueYrOeZkeeZj+eZr+eZtvCmj7XnmpDoh6/jn7jwpqSR8Kakjueaoeeapeeat+ebjPCmvp/okaLwpYKd8KWFvfChuJznnJ7nnKbnnYDmkq/wpYig552Y8KOKrOeer/CopaTwqKWo8KGbgeeftOegifChjbbwpKiS5qOK56Kv56OH56OT6Zql56Su8KWXoOejl+ektOeisfCnmIzovrjoooTwqKyr8KaCg/CimJznpobopIDmpILnpoDwpaGX56ad8KesueekvOemqea4qvCnhKbjuqjnp4bwqYSN56eUXCJdXG5dXG4iLCJtb2R1bGUuZXhwb3J0cz1bXG5bXCIwXCIsXCJcXHUwMDAwXCIsMTI3LFwi4oKsXCJdLFxuW1wiODE0MFwiLFwi5LiC5LiE5LiF5LiG5LiP5LiS5LiX5Lif5Lig5Lih5Lij5Lim5Lip5Liu5Liv5Lix5Liz5Li15Li35Li85LmA5LmB5LmC5LmE5LmG5LmK5LmR5LmV5LmX5Lma5Lmb5Lmi5Lmj5Lmk5Lml5Lmn5Lmo5LmqXCIsNSxcIuS5suS5tFwiLDksXCLkub9cIiw2LFwi5LqH5LqKXCJdLFxuW1wiODE4MFwiLFwi5LqQ5LqW5LqX5LqZ5Lqc5Lqd5Lqe5Lqj5Lqq5Lqv5Lqw5Lqx5Lq05Lq25Lq35Lq45Lq55Lq85Lq95Lq+5LuI5LuM5LuP5LuQ5LuS5Lua5Lub5Luc5Lug5Lui5Lum5Lun5Lup5Lut5Luu5Luv5Lux5Lu05Lu45Lu55Lu65Lu85Lu+5LyA5LyCXCIsNixcIuS8i+S8jOS8klwiLDQsXCLkvJzkvJ3kvKHkvKPkvKjkvKnkvKzkvK3kvK7kvLHkvLPkvLXkvLfkvLnkvLvkvL5cIiw0LFwi5L2E5L2F5L2HXCIsNSxcIuS9kuS9lOS9luS9oeS9ouS9puS9qOS9quS9q+S9reS9ruS9seS9suS9teS9t+S9uOS9ueS9uuS9veS+gOS+geS+guS+heS+huS+h+S+iuS+jOS+juS+kOS+kuS+k+S+leS+luS+mOS+meS+muS+nOS+nuS+n+S+oeS+olwiXSxcbltcIjgyNDBcIixcIuS+pOS+q+S+reS+sFwiLDQsXCLkvrZcIiw4LFwi5L+A5L+B5L+C5L+G5L+H5L+I5L+J5L+L5L+M5L+N5L+SXCIsNCxcIuS/meS/m+S/oOS/ouS/pOS/peS/p+S/q+S/rOS/sOS/suS/tOS/teS/tuS/t+S/ueS/u+S/vOS/veS/v1wiLDExXSxcbltcIjgyODBcIixcIuWAi+WAjuWAkOWAkeWAk+WAleWAluWAl+WAm+WAneWAnuWAoOWAouWAo+WApOWAp+WAq+WAr1wiLDEwLFwi5YC75YC95YC/5YGA5YGB5YGC5YGE5YGF5YGG5YGJ5YGK5YGL5YGN5YGQXCIsNCxcIuWBluWBl+WBmOWBmeWBm+WBnVwiLDcsXCLlgaZcIiw1LFwi5YGtXCIsOCxcIuWBuOWBueWBuuWBvOWBveWCgeWCguWCg+WChOWChuWCh+WCieWCiuWCi+WCjOWCjlwiLDIwLFwi5YKk5YKm5YKq5YKr5YKtXCIsNCxcIuWCs1wiLDYsXCLlgrxcIl0sXG5bXCI4MzQwXCIsXCLlgr1cIiwxNyxcIuWDkFwiLDUsXCLlg5flg5jlg5nlg5tcIiwxMCxcIuWDqOWDqeWDquWDq+WDr+WDsOWDseWDsuWDtOWDtlwiLDQsXCLlg7xcIiw5LFwi5YSIXCJdLFxuW1wiODM4MFwiLFwi5YSJ5YSK5YSMXCIsNSxcIuWEk1wiLDEzLFwi5YSiXCIsMjgsXCLlhYLlhYflhYrlhYzlhY7lhY/lhZDlhZLlhZPlhZflhZjlhZnlhZvlhZ1cIiw0LFwi5YWj5YWk5YWm5YWn5YWp5YWq5YWv5YWy5YW65YW+5YW/5YaD5YaE5YaG5YaH5YaK5YaL5YaO5YaP5YaQ5YaR5YaT5YaU5YaY5Yaa5Yad5Yae5Yaf5Yah5Yaj5YamXCIsNCxcIuWGreWGruWGtOWGuOWGueWGuuWGvuWGv+WHgeWHguWHg+WHheWHiOWHiuWHjeWHjuWHkOWHklwiLDVdLFxuW1wiODQ0MFwiLFwi5YeY5YeZ5Yea5Yec5Yee5Yef5Yei5Yej5YelXCIsNSxcIuWHrOWHruWHseWHsuWHtOWHt+WHvuWIhOWIheWIieWIi+WIjOWIj+WIkOWIk+WIlOWIleWInOWInuWIn+WIoeWIouWIo+WIpeWIpuWIp+WIquWIrOWIr+WIseWIsuWItOWIteWIvOWIvuWJhFwiLDUsXCLliYvliY7liY/liZLliZPliZXliZfliZhcIl0sXG5bXCI4NDgwXCIsXCLliZnliZrliZvliZ3liZ/liaDliaLliaPliaTliabliajliavliazlia3lia7libDlibHlibNcIiw5LFwi5Ym+5YqA5YqDXCIsNCxcIuWKiVwiLDYsXCLlipHlipLlipRcIiw2LFwi5Yqc5Yqk5Yql5Yqm5Yqn5Yqu5Yqv5Yqw5Yq0XCIsOSxcIuWLgOWLgeWLguWLhOWLheWLhuWLiOWLiuWLjOWLjeWLjuWLj+WLkeWLk+WLlOWLleWLl+WLmVwiLDUsXCLli6Dli6Hli6Lli6Pli6VcIiwxMCxcIuWLsVwiLDcsXCLli7vli7zli73ljIHljILljIPljITljIfljInljIrljIvljIzljI5cIl0sXG5bXCI4NTQwXCIsXCLljJHljJLljJPljJTljJjljJvljJzljJ7ljJ/ljKLljKTljKXljKfljKjljKnljKvljKzljK3ljK9cIiw5LFwi5Yy85Yy95Y2A5Y2C5Y2E5Y2G5Y2L5Y2M5Y2N5Y2Q5Y2U5Y2Y5Y2Z5Y2b5Y2d5Y2l5Y2o5Y2q5Y2s5Y2t5Y2y5Y225Y255Y275Y285Y295Y2+5Y6A5Y6B5Y6D5Y6H5Y6I5Y6K5Y6O5Y6PXCJdLFxuW1wiODU4MFwiLFwi5Y6QXCIsNCxcIuWOluWOl+WOmeWOm+WOnOWOnuWOoOWOoeWOpOWOp+WOquWOq+WOrOWOreWOr1wiLDYsXCLljrfljrjljrnljrrljrzljr3ljr7lj4Dlj4NcIiw0LFwi5Y+O5Y+P5Y+Q5Y+S5Y+T5Y+V5Y+a5Y+c5Y+d5Y+e5Y+h5Y+i5Y+n5Y+05Y+65Y++5Y+/5ZCA5ZCC5ZCF5ZCH5ZCL5ZCU5ZCY5ZCZ5ZCa5ZCc5ZCi5ZCk5ZCl5ZCq5ZCw5ZCz5ZC25ZC35ZC65ZC95ZC/5ZGB5ZGC5ZGE5ZGF5ZGH5ZGJ5ZGM5ZGN5ZGO5ZGP5ZGR5ZGa5ZGdXCIsNCxcIuWRo+WRpeWRp+WRqVwiLDcsXCLlkbTlkbnlkbrlkb7lkb/lkoHlkoPlkoXlkoflkojlkonlkorlko3lkpHlkpPlkpflkpjlkpzlkp7lkp/lkqDlkqFcIl0sXG5bXCI4NjQwXCIsXCLlkqLlkqXlkq7lkrDlkrLlkrXlkrblkrflkrnlkrrlkrzlkr7lk4Plk4Xlk4rlk4vlk5blk5jlk5vlk6BcIiw0LFwi5ZOr5ZOs5ZOv5ZOw5ZOx5ZO0XCIsNSxcIuWTu+WTvuWUgOWUguWUg+WUhOWUheWUiOWUilwiLDQsXCLllJLllJPllJVcIiw1LFwi5ZSc5ZSd5ZSe5ZSf5ZSh5ZSl5ZSmXCJdLFxuW1wiODY4MFwiLFwi5ZSo5ZSp5ZSr5ZSt5ZSy5ZS05ZS15ZS25ZS45ZS55ZS65ZS75ZS95ZWA5ZWC5ZWF5ZWH5ZWI5ZWLXCIsNCxcIuWVkeWVkuWVk+WVlOWVl1wiLDQsXCLllZ3llZ7llZ/llaDllaLllaPllajllanllavlla9cIiw1LFwi5ZW55ZW65ZW95ZW/5ZaF5ZaG5ZaM5ZaN5ZaO5ZaQ5ZaS5ZaT5ZaV5ZaW5ZaX5Zaa5Zab5Zae5ZagXCIsNixcIuWWqFwiLDgsXCLllrLllrTllrbllrjllrrllrzllr9cIiw0LFwi5ZeG5ZeH5ZeI5ZeK5ZeL5ZeO5ZeP5ZeQ5ZeV5ZeXXCIsNCxcIuWXnuWXoOWXouWXp+WXqeWXreWXruWXsOWXseWXtOWXtuWXuFwiLDQsXCLll7/lmILlmIPlmITlmIVcIl0sXG5bXCI4NzQwXCIsXCLlmIblmIflmIrlmIvlmI3lmJBcIiw3LFwi5ZiZ5Zia5Zic5Zid5Zig5Zih5Zii5Zil5Zim5Zio5Zip5Ziq5Zir5Ziu5Ziv5Ziw5Ziz5Zi15Zi35Zi45Zi65Zi85Zi95Zi+5ZmAXCIsMTEsXCLlmY9cIiw0LFwi5ZmV5ZmW5Zma5Zmb5ZmdXCIsNF0sXG5bXCI4NzgwXCIsXCLlmaPlmaXlmablmaflma3lma7lma/lmbDlmbLlmbPlmbTlmbXlmbflmbjlmbnlmbrlmb1cIiw3LFwi5ZqHXCIsNixcIuWakOWakeWakuWalFwiLDE0LFwi5ZqkXCIsMTAsXCLlmrBcIiw2LFwi5Zq45Zq55Zq65Zq75Zq9XCIsMTIsXCLlm4tcIiw4LFwi5ZuV5ZuW5ZuY5ZuZ5Zuc5Zuj5ZulXCIsNSxcIuWbrOWbruWbr+WbsuWbs+WbtuWbt+WbuOWbu+WbvOWcgOWcgeWcguWcheWch+Wci1wiLDZdLFxuW1wiODg0MFwiLFwi5ZySXCIsOSxcIuWcneWcnuWcoOWcoeWcouWcpOWcpeWcpuWcp+Wcq+WcseWcsuWctFwiLDQsXCLlnLzlnL3lnL/lnYHlnYPlnYTlnYXlnYblnYjlnYnlnYvlnZJcIiw0LFwi5Z2Y5Z2Z5Z2i5Z2j5Z2l5Z2n5Z2s5Z2u5Z2w5Z2x5Z2y5Z205Z215Z245Z255Z265Z295Z2+5Z2/5Z6AXCJdLFxuW1wiODg4MFwiLFwi5Z6B5Z6H5Z6I5Z6J5Z6K5Z6NXCIsNCxcIuWelFwiLDYsXCLlnpzlnp3lnp7lnp/lnqXlnqjlnqrlnqzlnq/lnrDlnrHlnrPlnrXlnrblnrflnrlcIiw4LFwi5Z+EXCIsNixcIuWfjOWfjeWfkOWfkeWfk+WfluWfl+Wfm+WfnOWfnuWfoeWfouWfo+WfpVwiLDcsXCLln67ln7Dln7Hln7Lln7Pln7Xln7bln7fln7vln7zln77ln7/loIHloIPloITloIXloIjloInloIrloIzloI7loI/loJDloJLloJPloJTloJbloJfloJjloJrloJvloJzloJ3loJ/loKLloKPloKVcIiw0LFwi5aCrXCIsNCxcIuWgseWgsuWgs+WgtOWgtlwiLDddLFxuW1wiODk0MFwiLFwi5aC+XCIsNSxcIuWhhVwiLDYsXCLloY7loY/loZDloZLloZPloZXloZbloZfloZlcIiw0LFwi5aGfXCIsNSxcIuWhplwiLDQsXCLloa1cIiwxNixcIuWhv+WiguWihOWihuWih+WiiOWiiuWii+WijFwiXSxcbltcIjg5ODBcIixcIuWijVwiLDQsXCLlopRcIiw0LFwi5aKb5aKc5aKd5aKgXCIsNyxcIuWiqlwiLDE3LFwi5aK95aK+5aK/5aOA5aOC5aOD5aOE5aOGXCIsMTAsXCLlo5Llo5Plo5Tlo5ZcIiwxMyxcIuWjpVwiLDUsXCLlo63lo6/lo7Hlo7Llo7Tlo7Xlo7flo7jlo7pcIiw3LFwi5aSD5aSF5aSG5aSIXCIsNCxcIuWkjuWkkOWkkeWkkuWkk+Wkl+WkmOWkm+WkneWknuWkoOWkoeWkouWko+WkpuWkqOWkrOWksOWksuWks+WkteWktuWku1wiXSxcbltcIjhhNDBcIixcIuWkveWkvuWkv+WlgOWlg+WlheWlhuWliuWljOWljeWlkOWlkuWlk+WlmeWlm1wiLDQsXCLlpaHlpaPlpaTlpaZcIiwxMixcIuWlteWlt+WluuWlu+WlvOWlvuWlv+WmgOWmheWmieWmi+WmjOWmjuWmj+WmkOWmkeWmlOWmleWmmOWmmuWmm+WmnOWmneWmn+WmoOWmoeWmouWmplwiXSxcbltcIjhhODBcIixcIuWmp+WmrOWmreWmsOWmseWms1wiLDUsXCLlprrlprzlpr3lpr9cIiw2LFwi5aeH5aeI5aeJ5aeM5aeN5aeO5aeP5aeV5aeW5aeZ5aeb5aeeXCIsNCxcIuWnpOWnpuWnp+WnqeWnquWnq+WnrVwiLDExLFwi5ae65ae85ae95ae+5aiA5aiC5aiK5aiL5aiN5aiO5aiP5aiQ5aiS5aiU5aiV5aiW5aiX5aiZ5aia5aib5aid5aie5aih5aii5aik5aim5ain5aio5aiqXCIsNixcIuWos+WoteWot1wiLDQsXCLlqL3lqL7lqL/lqYFcIiw0LFwi5amH5amI5amLXCIsOSxcIuWpluWpl+WpmOWpmeWpm1wiLDVdLFxuW1wiOGI0MFwiLFwi5amh5amj5amk5aml5amm5amo5amp5amrXCIsOCxcIuWpuOWpueWpu+WpvOWpveWpvuWqgFwiLDE3LFwi5aqTXCIsNixcIuWqnFwiLDEzLFwi5aqr5aqsXCJdLFxuW1wiOGI4MFwiLFwi5aqtXCIsNCxcIuWqtOWqtuWqt+WquVwiLDQsXCLlqr/lq4Dlq4NcIiw1LFwi5auK5auL5auNXCIsNCxcIuWrk+WrleWrl+WrmeWrmuWrm+WrneWrnuWrn+WrouWrpOWrpeWrp+WrqOWrquWrrFwiLDQsXCLlq7JcIiwyMixcIuWsilwiLDExLFwi5ayYXCIsMjUsXCLlrLPlrLXlrLblrLhcIiw3LFwi5a2BXCIsNl0sXG5bXCI4YzQwXCIsXCLlrYhcIiw3LFwi5a2S5a2W5a2e5a2g5a2h5a2n5a2o5a2r5a2t5a2u5a2v5a2y5a205a225a235a245a255a275a285a2+5a2/5a6C5a6G5a6K5a6N5a6O5a6Q5a6R5a6S5a6U5a6W5a6f5a6n5a6o5a6p5a6s5a6t5a6u5a6v5a6x5a6y5a635a665a675a685a+A5a+B5a+D5a+I5a+J5a+K5a+L5a+N5a+O5a+PXCJdLFxuW1wiOGM4MFwiLFwi5a+R5a+UXCIsOCxcIuWvoOWvouWvo+WvpuWvp+WvqVwiLDQsXCLlr6/lr7FcIiw2LFwi5a+95a++5bCA5bCC5bCD5bCF5bCH5bCI5bCL5bCM5bCN5bCO5bCQ5bCS5bCT5bCX5bCZ5bCb5bCe5bCf5bCg5bCh5bCj5bCm5bCo5bCp5bCq5bCr5bCt5bCu5bCv5bCw5bCy5bCz5bC15bC25bC35bGD5bGE5bGG5bGH5bGM5bGN5bGS5bGT5bGU5bGW5bGX5bGY5bGa5bGb5bGc5bGd5bGf5bGi5bGk5bGnXCIsNixcIuWxsOWxslwiLDYsXCLlsbvlsbzlsb3lsb7lsoDlsoNcIiw0LFwi5bKJ5bKK5bKL5bKO5bKP5bKS5bKT5bKV5bKdXCIsNCxcIuWypFwiLDRdLFxuW1wiOGQ0MFwiLFwi5bKq5bKu5bKv5bKw5bKy5bK05bK25bK55bK65bK75bK85bK+5bOA5bOC5bOD5bOFXCIsNSxcIuWzjFwiLDUsXCLls5NcIiw1LFwi5bOaXCIsNixcIuWzouWzo+Wzp+WzqeWzq+WzrOWzruWzr+WzsVwiLDksXCLls7xcIiw0XSxcbltcIjhkODBcIixcIuW0geW0hOW0heW0iFwiLDUsXCLltI9cIiw0LFwi5bSV5bSX5bSY5bSZ5bSa5bSc5bSd5bSfXCIsNCxcIuW0peW0qOW0quW0q+W0rOW0r1wiLDQsXCLltLVcIiw3LFwi5bS/XCIsNyxcIuW1iOW1ieW1jVwiLDEwLFwi5bWZ5bWa5bWc5bWeXCIsMTAsXCLltarlta3lta7ltbDltbHltbLltbPltbVcIiwxMixcIuW2g1wiLDIxLFwi5baa5bab5bac5bae5baf5bagXCJdLFxuW1wiOGU0MFwiLFwi5bahXCIsMjEsXCLltrhcIiwxMixcIuW3hlwiLDYsXCLlt45cIiwxMixcIuW3nOW3n+W3oOW3o+W3pOW3quW3rOW3rVwiXSxcbltcIjhlODBcIixcIuW3sOW3teW3tuW3uFwiLDQsXCLlt7/luIDluITluIfluInluIrluIvluI3luI7luJLluJPluJfluJ5cIiw3LFwi5bioXCIsNCxcIuW4r+W4sOW4slwiLDQsXCLluLnluLrluL7luL/luYDluYHluYPluYZcIiw1LFwi5bmNXCIsNixcIuW5llwiLDQsXCLluZzluZ3luZ/luaDluaNcIiwxNCxcIuW5teW5t+W5ueW5vuW6geW6guW6g+W6heW6iOW6ieW6jOW6jeW6juW6kuW6mOW6m+W6neW6oeW6ouW6o+W6pOW6qFwiLDQsXCLluq5cIiw0LFwi5bq05bq65bq75bq85bq95bq/XCIsNl0sXG5bXCI4ZjQwXCIsXCLlu4blu4flu4jlu4tcIiw1LFwi5buU5buV5buX5buY5buZ5bua5bucXCIsMTEsXCLlu6nlu6tcIiw4LFwi5bu15bu45bu55bu75bu85bu95byF5byG5byH5byJ5byM5byN5byO5byQ5byS5byU5byW5byZ5bya5byc5byd5bye5byh5byi5byj5bykXCJdLFxuW1wiOGY4MFwiLFwi5byo5byr5bys5byu5byw5byyXCIsNixcIuW8u+W8veW8vuW8v+W9gVwiLDE0LFwi5b2R5b2U5b2Z5b2a5b2b5b2c5b2e5b2f5b2g5b2j5b2l5b2n5b2o5b2r5b2u5b2v5b2y5b205b215b225b245b265b295b2+5b2/5b6D5b6G5b6N5b6O5b6P5b6R5b6T5b6U5b6W5b6a5b6b5b6d5b6e5b6f5b6g5b6iXCIsNSxcIuW+qeW+q+W+rOW+r1wiLDUsXCLlvrblvrjlvrnlvrrlvrvlvr5cIiw0LFwi5b+H5b+I5b+K5b+L5b+O5b+T5b+U5b+V5b+a5b+b5b+c5b+e5b+f5b+i5b+j5b+l5b+m5b+o5b+p5b+s5b+v5b+w5b+y5b+z5b+05b+25b+35b+55b+65b+85oCHXCJdLFxuW1wiOTA0MFwiLFwi5oCI5oCJ5oCL5oCM5oCQ5oCR5oCT5oCX5oCY5oCa5oCe5oCf5oCi5oCj5oCk5oCs5oCt5oCu5oCwXCIsNCxcIuaAtlwiLDQsXCLmgL3mgL7mgYDmgYRcIiw2LFwi5oGM5oGO5oGP5oGR5oGT5oGU5oGW5oGX5oGY5oGb5oGc5oGe5oGf5oGg5oGh5oGl5oGm5oGu5oGx5oGy5oG05oG15oG35oG+5oKAXCJdLFxuW1wiOTA4MFwiLFwi5oKB5oKC5oKF5oKG5oKH5oKI5oKK5oKL5oKO5oKP5oKQ5oKR5oKT5oKV5oKX5oKY5oKZ5oKc5oKe5oKh5oKi5oKk5oKl5oKn5oKp5oKq5oKu5oKw5oKz5oK15oK25oK35oK55oK65oK9XCIsNyxcIuaDh+aDiOaDieaDjFwiLDQsXCLmg5Lmg5Pmg5Tmg5bmg5fmg5nmg5vmg57mg6FcIiw0LFwi5oOq5oOx5oOy5oO15oO35oO45oO7XCIsNCxcIuaEguaEg+aEhOaEheaEh+aEiuaEi+aEjOaEkFwiLDQsXCLmhJbmhJfmhJjmhJnmhJvmhJzmhJ3mhJ7mhKHmhKLmhKXmhKjmhKnmhKrmhKxcIiwxOCxcIuaFgFwiLDZdLFxuW1wiOTE0MFwiLFwi5oWH5oWJ5oWL5oWN5oWP5oWQ5oWS5oWT5oWU5oWWXCIsNixcIuaFnuaFn+aFoOaFoeaFo+aFpOaFpeaFpuaFqVwiLDYsXCLmhbHmhbLmhbPmhbTmhbbmhbhcIiwxOCxcIuaGjOaGjeaGj1wiLDQsXCLmhpVcIl0sXG5bXCI5MTgwXCIsXCLmhpZcIiw2LFwi5oaeXCIsOCxcIuaGquaGq+aGrVwiLDksXCLmhrhcIiw1LFwi5oa/5oeA5oeB5oeDXCIsNCxcIuaHieaHjFwiLDQsXCLmh5Pmh5VcIiwxNixcIuaHp1wiLDEzLFwi5oe2XCIsOCxcIuaIgFwiLDUsXCLmiIfmiInmiJPmiJTmiJnmiJzmiJ3miJ7miKDmiKPmiKbmiKfmiKjmiKnmiKvmiK3miK/miLDmiLHmiLLmiLXmiLbmiLhcIiw0LFwi5omC5omE5omF5omG5omKXCJdLFxuW1wiOTI0MFwiLFwi5omP5omQ5omV5omW5omX5omZ5oma5omcXCIsNixcIuaJpOaJpeaJqOaJseaJsuaJtOaJteaJt+aJuOaJuuaJu+aJveaKgeaKguaKg+aKheaKhuaKh+aKiOaKi1wiLDUsXCLmipTmipnmipzmip3mip7miqPmiqbmiqfmiqnmiqrmiq3miq7miq/mirDmirLmirPmirTmirbmirfmirjmirrmir7mi4Dmi4FcIl0sXG5bXCI5MjgwXCIsXCLmi4Pmi4vmi4/mi5Hmi5Xmi53mi57mi6Dmi6Hmi6Tmi6rmi6vmi7Dmi7Lmi7Xmi7jmi7nmi7rmi7vmjIDmjIPmjITmjIXmjIbmjIrmjIvmjIzmjI3mjI/mjJDmjJLmjJPmjJTmjJXmjJfmjJjmjJnmjJzmjKbmjKfmjKnmjKzmjK3mjK7mjLDmjLHmjLNcIiw1LFwi5oy75oy85oy+5oy/5o2A5o2B5o2E5o2H5o2I5o2K5o2R5o2S5o2T5o2U5o2WXCIsNyxcIuaNoOaNpOaNpeaNpuaNqOaNquaNq+aNrOaNr+aNsOaNsuaNs+aNtOaNteaNuOaNueaNvOaNveaNvuaNv+aOgeaOg+aOhOaOheaOhuaOi+aOjeaOkeaOk+aOlOaOleaOl+aOmVwiLDYsXCLmjqHmjqTmjqbmjqvmjq/mjrHmjrLmjrXmjrbmjrnmjrvmjr3mjr/mj4BcIl0sXG5bXCI5MzQwXCIsXCLmj4Hmj4Lmj4Pmj4Xmj4fmj4jmj4rmj4vmj4zmj5Hmj5Pmj5Tmj5Xmj5dcIiw2LFwi5o+f5o+i5o+kXCIsNCxcIuaPq+aPrOaPruaPr+aPsOaPseaPs+aPteaPt+aPueaPuuaPu+aPvOaPvuaQg+aQhOaQhlwiLDQsXCLmkI3mkI7mkJHmkJLmkJVcIiw1LFwi5pCd5pCf5pCi5pCj5pCkXCJdLFxuW1wiOTM4MFwiLFwi5pCl5pCn5pCo5pCp5pCr5pCuXCIsNSxcIuaQtVwiLDQsXCLmkLvmkLzmkL7mkYDmkYLmkYPmkYnmkYtcIiw2LFwi5pGT5pGV5pGW5pGX5pGZXCIsNCxcIuaRn1wiLDcsXCLmkajmkarmkavmkazmka5cIiw5LFwi5pG7XCIsNixcIuaSg+aShuaSiFwiLDgsXCLmkpPmkpTmkpfmkpjmkprmkpvmkpzmkp3mkp9cIiw0LFwi5pKl5pKm5pKn5pKo5pKq5pKr5pKv5pKx5pKy5pKz5pK05pK25pK55pK75pK95pK+5pK/5pOB5pOD5pOE5pOGXCIsNixcIuaTj+aTkeaTk+aTlOaTleaTluaTmeaTmlwiXSxcbltcIjk0NDBcIixcIuaTm+aTnOaTneaTn+aToOaToeaTo+aTpeaTp1wiLDI0LFwi5pSBXCIsNyxcIuaUilwiLDcsXCLmlJNcIiw0LFwi5pSZXCIsOF0sXG5bXCI5NDgwXCIsXCLmlKLmlKPmlKTmlKZcIiw0LFwi5pSs5pSt5pSw5pSx5pSy5pSz5pS35pS65pS85pS95pWAXCIsNCxcIuaVhuaVh+aViuaVi+aVjeaVjuaVkOaVkuaVk+aVlOaVl+aVmOaVmuaVnOaVn+aVoOaVoeaVpOaVpeaVp+aVqOaVqeaVquaVreaVruaVr+aVseaVs+aVteaVtuaVuFwiLDE0LFwi5paI5paJ5paK5paN5paO5paP5paS5paU5paV5paW5paY5paa5pad5pae5pag5pai5paj5pam5pao5paq5pas5pau5paxXCIsNyxcIuaWuuaWu+aWvuaWv+aXgOaXguaXh+aXiOaXieaXiuaXjeaXkOaXkeaXk+aXlOaXleaXmFwiLDcsXCLml6Hml6Pml6Tml6rml6tcIl0sXG5bXCI5NTQwXCIsXCLml7Lml7Pml7Tml7Xml7jml7nml7tcIiw0LFwi5piB5piE5piF5piH5piI5piJ5piL5piN5piQ5piR5piS5piW5piX5piY5pia5pib5pic5pie5pih5pii5pij5pik5pim5pip5piq5pir5pis5piu5piw5piy5piz5pi3XCIsNCxcIuaYveaYv+aZgOaZguaZhFwiLDYsXCLmmY3mmY7mmZDmmZHmmZhcIl0sXG5bXCI5NTgwXCIsXCLmmZnmmZvmmZzmmZ3mmZ7mmaDmmaLmmaPmmaXmmafmmalcIiw0LFwi5pmx5pmy5pmz5pm15pm45pm55pm75pm85pm95pm/5pqA5pqB5pqD5pqF5pqG5pqI5pqJ5pqK5pqL5pqN5pqO5pqP5pqQ5pqS5pqT5pqU5pqV5pqYXCIsNCxcIuaanlwiLDgsXCLmmqlcIiw0LFwi5pqvXCIsNCxcIuaateaatuaat+aauOaauuaau+aavOaaveaav1wiLDI1LFwi5pua5pueXCIsNyxcIuabp+abqOabqlwiLDUsXCLmm7Hmm7Xmm7bmm7jmm7rmm7vmm73mnIHmnILmnINcIl0sXG5bXCI5NjQwXCIsXCLmnITmnIXmnIbmnIfmnIzmnI7mnI/mnJHmnJLmnJPmnJbmnJjmnJnmnJrmnJzmnJ7mnKBcIiw1LFwi5pyn5pyp5pyu5pyw5pyy5pyz5py25py35py45py55py75py85py+5py/5p2B5p2E5p2F5p2H5p2K5p2L5p2N5p2S5p2U5p2V5p2XXCIsNCxcIuadneadouado+adpOadpuadp+adq+adrOadruadseadtOadtlwiXSxcbltcIjk2ODBcIixcIuaduOadueaduuadu+adveaegOaeguaeg+aeheaehuaeiOaeiuaejOaejeaejuaej+aekeaekuaek+aelOaeluaemeaem+aen+aeoOaeoeaepOaepuaeqeaerOaeruaeseaesuaetOaeuVwiLDcsXCLmn4Lmn4VcIiw5LFwi5p+V5p+W5p+X5p+b5p+f5p+h5p+j5p+k5p+m5p+n5p+o5p+q5p+r5p+t5p+u5p+y5p+1XCIsNyxcIuafvuaggeagguagg+aghOaghuagjeagkOagkuaglOagleagmFwiLDQsXCLmoJ7moJ/moKDmoKJcIiw2LFwi5qCrXCIsNixcIuagtOagteagtuaguuagu+agv+ahh+ahi+ahjeahj+ahkuahllwiLDVdLFxuW1wiOTc0MFwiLFwi5qGc5qGd5qGe5qGf5qGq5qGsXCIsNyxcIuahteahuFwiLDgsXCLmooLmooTmoodcIiw3LFwi5qKQ5qKR5qKS5qKU5qKV5qKW5qKYXCIsOSxcIuaio+aipOaipeaiqeaiquaiq+airOairuaiseaisuaitOaituait+aiuFwiXSxcbltcIjk3ODBcIixcIuaiuVwiLDYsXCLmo4Hmo4NcIiw1LFwi5qOK5qOM5qOO5qOP5qOQ5qOR5qOT5qOU5qOW5qOX5qOZ5qObXCIsNCxcIuajoeajouajpFwiLDksXCLmo6/mo7Lmo7Pmo7Tmo7bmo7fmo7jmo7vmo73mo77mo7/mpIDmpILmpIPmpITmpIZcIiw0LFwi5qSM5qSP5qSR5qSTXCIsMTEsXCLmpKHmpKLmpKPmpKVcIiw3LFwi5qSu5qSv5qSx5qSy5qSz5qS15qS25qS35qS45qS65qS75qS85qS+5qWA5qWB5qWDXCIsMTYsXCLmpZXmpZbmpZjmpZnmpZvmpZzmpZ9cIl0sXG5bXCI5ODQwXCIsXCLmpaHmpaLmpaTmpaXmpafmpajmpanmparmpazmpa3mpa/mpbDmpbJcIiw0LFwi5qW65qW75qW95qW+5qW/5qaB5qaD5qaF5qaK5qaL5qaM5qaOXCIsNSxcIuamluaml+ammeammuamnVwiLDksXCLmpqnmpqrmpqzmpq7mpq/mprDmprLmprPmprXmprbmprjmprnmprrmprzmpr1cIl0sXG5bXCI5ODgwXCIsXCLmpr7mpr/mp4Dmp4JcIiw3LFwi5qeL5qeN5qeP5qeR5qeS5qeT5qeVXCIsNSxcIuannOanneannuanoVwiLDExLFwi5qeu5qev5qew5qex5qezXCIsOSxcIuanvuaogFwiLDksXCLmqItcIiwxMSxcIuaomVwiLDUsXCLmqKDmqKJcIiw1LFwi5qip5qir5qis5qit5qiu5qiw5qiy5qiz5qi05qi2XCIsNixcIuaov1wiLDQsXCLmqYXmqYbmqYhcIiw3LFwi5qmRXCIsNixcIuapmlwiXSxcbltcIjk5NDBcIixcIuapnFwiLDQsXCLmqaLmqaPmqaTmqaZcIiwxMCxcIuapslwiLDYsXCLmqbrmqbvmqb3mqb7mqb/mqoHmqoLmqoPmqoVcIiw4LFwi5qqP5qqSXCIsNCxcIuaqmFwiLDcsXCLmqqFcIiw1XSxcbltcIjk5ODBcIixcIuaqp+aqqOaqquaqrVwiLDExNCxcIuaspeaspuasqFwiLDZdLFxuW1wiOWE0MFwiLFwi5qyv5qyw5qyx5qyz5qy05qy15qy25qy45qy75qy85qy95qy/5q2A5q2B5q2C5q2E5q2F5q2I5q2K5q2L5q2NXCIsMTEsXCLmrZpcIiw3LFwi5q2o5q2p5q2rXCIsMTMsXCLmrbrmrb3mrb7mrb/mroDmroXmrohcIl0sXG5bXCI5YTgwXCIsXCLmrozmro7mro/mrpDmrpHmrpTmrpXmrpfmrpjmrpnmrpxcIiw0LFwi5q6iXCIsNyxcIuauq1wiLDcsXCLmrrbmrrhcIiw2LFwi5q+A5q+D5q+E5q+GXCIsNCxcIuavjOavjuavkOavkeavmOavmuavnFwiLDQsXCLmr6JcIiw3LFwi5q+s5q+t5q+u5q+w5q+x5q+y5q+05q+25q+35q+45q+65q+75q+85q++XCIsNixcIuawiFwiLDQsXCLmsI7msJLmsJfmsJzmsJ3msJ7msKDmsKPmsKXmsKvmsKzmsK3msLHmsLPmsLbmsLfmsLnmsLrmsLvmsLzmsL7msL/msYPmsYTmsYXmsYjmsYtcIiw0LFwi5rGR5rGS5rGT5rGW5rGYXCJdLFxuW1wiOWI0MFwiLFwi5rGZ5rGa5rGi5rGj5rGl5rGm5rGn5rGrXCIsNCxcIuaxseaxs+axteaxt+axuOaxuuaxu+axvOaxv+aygOayhOayh+ayiuayi+ayjeayjuaykeaykuayleayluayl+aymOaymuaynOayneaynuayoOayouayqOayrOayr+aysOaytOayteaytuayt+ayuuazgOazgeazguazg+azhuazh+aziOazi+azjeazjuazj+azkeazkuazmFwiXSxcbltcIjliODBcIixcIuazmeazmuaznOazneazn+azpOazpuazp+azqeazrOazreazsuaztOazueazv+a0gOa0gua0g+a0hea0hua0iOa0iea0iua0jea0j+a0kOa0kea0k+a0lOa0lea0lua0mOa0nOa0nea0n1wiLDUsXCLmtKbmtKjmtKnmtKzmtK3mtK/mtLDmtLTmtLbmtLfmtLjmtLrmtL/mtYDmtYLmtYTmtYnmtYzmtZDmtZXmtZbmtZfmtZjmtZvmtZ3mtZ/mtaHmtaLmtaTmtaXmtafmtajmtavmtazmta3mtbDmtbHmtbLmtbPmtbXmtbbmtbnmtbrmtbvmtb1cIiw0LFwi5raD5raE5raG5raH5raK5raL5raN5raP5raQ5raS5raWXCIsNCxcIua2nOa2oua2pea2rOa2rea2sOa2sea2s+a2tOa2tua2t+a2uVwiLDUsXCLmt4Hmt4Lmt4Pmt4jmt4nmt4pcIl0sXG5bXCI5YzQwXCIsXCLmt43mt47mt4/mt5Dmt5Lmt5Pmt5Tmt5Xmt5fmt5rmt5vmt5zmt5/mt6Lmt6Pmt6Xmt6fmt6jmt6nmt6rmt63mt6/mt7Dmt7Lmt7Tmt7Xmt7bmt7jmt7rmt71cIiw3LFwi5riG5riH5riI5riJ5riL5riP5riS5riT5riV5riY5riZ5rib5ric5rie5rif5rii5rim5rin5rio5riq5ris5riu5riw5rix5riz5ri1XCJdLFxuW1wiOWM4MFwiLFwi5ri25ri35ri55ri7XCIsNyxcIua5hVwiLDcsXCLmuY/muZDmuZHmuZLmuZXmuZfmuZnmuZrmuZzmuZ3muZ7muaBcIiwxMCxcIua5rOa5rea5r1wiLDE0LFwi5rqA5rqB5rqC5rqE5rqH5rqI5rqKXCIsNCxcIua6kVwiLDYsXCLmupnmuprmupvmup3mup7muqDmuqHmuqPmuqTmuqbmuqjmuqnmuqvmuqzmuq3muq7murDmurPmurXmurjmurnmurzmur7mur/mu4Dmu4Pmu4Tmu4Xmu4bmu4jmu4nmu4rmu4zmu43mu47mu5Dmu5Lmu5bmu5jmu5nmu5vmu5zmu53mu6Pmu6fmu6pcIiw1XSxcbltcIjlkNDBcIixcIua7sOa7sea7sua7s+a7tea7tua7t+a7uOa7ulwiLDcsXCLmvIPmvITmvIXmvIfmvIjmvIpcIiw0LFwi5ryQ5ryR5ryS5ryWXCIsOSxcIua8oea8oua8o+a8pea8pua8p+a8qOa8rOa8rua8sOa8sua8tOa8tea8t1wiLDYsXCLmvL/mvYDmvYHmvYJcIl0sXG5bXCI5ZDgwXCIsXCLmvYPmvYTmvYXmvYjmvYnmvYrmvYzmvY5cIiw5LFwi5r2Z5r2a5r2b5r2d5r2f5r2g5r2h5r2j5r2k5r2l5r2nXCIsNSxcIua9r+a9sOa9sea9s+a9tea9tua9t+a9uea9u+a9vVwiLDYsXCLmvoXmvobmvofmvormvovmvo9cIiwxMixcIua+nea+nua+n+a+oOa+olwiLDQsXCLmvqhcIiwxMCxcIua+tOa+tea+t+a+uOa+ulwiLDUsXCLmv4Hmv4NcIiw1LFwi5r+KXCIsNixcIua/k1wiLDEwLFwi5r+f5r+i5r+j5r+k5r+lXCJdLFxuW1wiOWU0MFwiLFwi5r+mXCIsNyxcIua/sFwiLDMyLFwi54CSXCIsNyxcIueAnFwiLDYsXCLngKRcIiw2XSxcbltcIjllODBcIixcIueAq1wiLDksXCLngLbngLfngLjngLpcIiwxNyxcIueBjeeBjueBkFwiLDEzLFwi54GfXCIsMTEsXCLnga7ngbHngbLngbPngbTngbfngbnngbrngbvngb3ngoHngoLngoPngoTngobngofngojngovngozngo3ngo/ngpDngpHngpPngpfngpjngprngpvngp5cIiwxMixcIueCsOeCsueCtOeCteeCtueCuueCvueCv+eDhOeDheeDhueDh+eDieeDi1wiLDEyLFwi54OaXCJdLFxuW1wiOWY0MFwiLFwi54Oc54Od54Oe54Og54Oh54Oi54Oj54Ol54Oq54Ou54OwXCIsNixcIueDuOeDuueDu+eDvOeDvlwiLDEwLFwi54SLXCIsNCxcIueEkeeEkueElOeEl+eEm1wiLDEwLFwi54SnXCIsNyxcIueEsueEs+eEtFwiXSxcbltcIjlmODBcIixcIueEteeEt1wiLDEzLFwi54WG54WH54WI54WJ54WL54WN54WPXCIsMTIsXCLnhZ3nhZ9cIiw0LFwi54Wl54WpXCIsNCxcIueFr+eFsOeFseeFtOeFteeFtueFt+eFueeFu+eFvOeFvlwiLDUsXCLnhoVcIiw0LFwi54aL54aM54aN54aO54aQ54aR54aS54aT54aV54aW54aX54aaXCIsNCxcIueGoVwiLDYsXCLnhqnnhqrnhqvnhq1cIiw1LFwi54a054a254a354a454a6XCIsOCxcIueHhFwiLDksXCLnh49cIiw0XSxcbltcImEwNDBcIixcIueHllwiLDksXCLnh6Hnh6Lnh6Pnh6Tnh6bnh6hcIiw1LFwi54evXCIsOSxcIueHulwiLDExLFwi54iHXCIsMTldLFxuW1wiYTA4MFwiLFwi54ib54ic54ieXCIsOSxcIueIqeeIq+eIreeIrueIr+eIsueIs+eItOeIuueIvOeIvueJgFwiLDYsXCLniYnniYrniYvniY7niY/niZDniZHniZPniZTniZXniZfniZjniZrniZzniZ7niaDniaPniaTniaXniajniarniavniaznia3nibDnibHnibPnibTnibbnibfnibjnibvnibznib3nioLnioPnioVcIiw0LFwi54qM54qO54qQ54qR54qTXCIsMTEsXCLniqBcIiwxMSxcIueKrueKseeKsueKs+eKteeKulwiLDYsXCLni4Xni4bni4fni4nni4rni4vni4zni4/ni5Hni5Pni5Tni5Xni5bni5jni5rni5tcIl0sXG5bXCJhMWExXCIsXCLjgIDjgIHjgILCt8uJy4fCqOOAg+OAheKAlO+9nuKAluKApuKAmOKAmeKAnOKAneOAlOOAleOAiFwiLDcsXCLjgJbjgJfjgJDjgJHCscOXw7fiiLbiiKfiiKjiiJHiiI/iiKriiKniiIjiiLfiiJriiqXiiKXiiKDijJLiipniiKviiK7iiaHiiYziiYjiiL3iiJ3iiaDiia7iia/iiaTiiaXiiJ7iiLXiiLTimYLimYDCsOKAsuKAs+KEg++8hMKk77+g77+h4oCwwqfihJbimIbimIXil4vil4/il47il4fil4bilqHilqDilrPilrLigLvihpLihpDihpHihpPjgJNcIl0sXG5bXCJhMmExXCIsXCLihbBcIiw5XSxcbltcImEyYjFcIixcIuKSiFwiLDE5LFwi4pG0XCIsMTksXCLikaBcIiw5XSxcbltcImEyZTVcIixcIuOIoFwiLDldLFxuW1wiYTJmMVwiLFwi4oWgXCIsMTFdLFxuW1wiYTNhMVwiLFwi77yB77yC77yD77+l77yFXCIsODgsXCLvv6NcIl0sXG5bXCJhNGExXCIsXCLjgYFcIiw4Ml0sXG5bXCJhNWExXCIsXCLjgqFcIiw4NV0sXG5bXCJhNmExXCIsXCLOkVwiLDE2LFwizqNcIiw2XSxcbltcImE2YzFcIixcIs6xXCIsMTYsXCLPg1wiLDZdLFxuW1wiYTZlMFwiLFwi77i177i277i577i677i/77mA77i977i+77mB77mC77mD77mEXCJdLFxuW1wiYTZlZVwiLFwi77i777i877i377i477ixXCJdLFxuW1wiYTZmNFwiLFwi77iz77i0XCJdLFxuW1wiYTdhMVwiLFwi0JBcIiw1LFwi0IHQllwiLDI1XSxcbltcImE3ZDFcIixcItCwXCIsNSxcItGR0LZcIiwyNV0sXG5bXCJhODQwXCIsXCLLisuLy5nigJPigJXigKXigLXihIXihInihpbihpfihpjihpniiJXiiJ/iiKPiiZLiiabiiafiir/ilZBcIiwzNSxcIuKWgVwiLDZdLFxuW1wiYTg4MFwiLFwi4paIXCIsNyxcIuKWk+KWlOKWleKWvOKWveKXouKXo+KXpOKXpeKYieKKleOAkuOAneOAnlwiXSxcbltcImE4YTFcIixcIsSBw6HHjsOgxJPDqcSbw6jEq8Otx5DDrMWNw7PHksOyxavDuseUw7nHlseYx5rHnMO8w6rJkVwiXSxcbltcImE4YmRcIixcIsWExYhcIl0sXG5bXCJhOGMwXCIsXCLJoVwiXSxcbltcImE4YzVcIixcIuOEhVwiLDM2XSxcbltcImE5NDBcIixcIuOAoVwiLDgsXCLjiqPjjo7jjo/jjpzjjp3jjp7jjqHjj4Tjj47jj5Hjj5Ljj5XvuLDvv6Lvv6RcIl0sXG5bXCJhOTU5XCIsXCLihKHjiLFcIl0sXG5bXCJhOTVjXCIsXCLigJBcIl0sXG5bXCJhOTYwXCIsXCLjg7zjgpvjgpzjg73jg77jgIbjgp3jgp7vuYlcIiw5LFwi77mU77mV77mW77mX77mZXCIsOF0sXG5bXCJhOTgwXCIsXCLvuaJcIiw0LFwi77mo77mp77mq77mrXCJdLFxuW1wiYTk5NlwiLFwi44CHXCJdLFxuW1wiYTlhNFwiLFwi4pSAXCIsNzVdLFxuW1wiYWE0MFwiLFwi54uc54ud54uf54uiXCIsNSxcIueLqueLq+eLteeLtueLueeLveeLvueLv+eMgOeMgueMhFwiLDUsXCLnjIvnjIznjI3njI/njJDnjJHnjJLnjJTnjJjnjJnnjJrnjJ/njKDnjKPnjKTnjKbnjKfnjKjnjK3njK/njLDnjLLnjLPnjLXnjLbnjLrnjLvnjLznjL3njYBcIiw4XSxcbltcImFhODBcIixcIueNieeNiueNi+eNjOeNjueNj+eNkeeNk+eNlOeNleeNlueNmFwiLDcsXCLnjaFcIiwxMCxcIueNrueNsOeNsVwiXSxcbltcImFiNDBcIixcIueNslwiLDExLFwi542/XCIsNCxcIueOheeOhueOiOeOiueOjOeOjeeOj+eOkOeOkueOk+eOlOeOleeOl+eOmOeOmeeOmueOnOeOneeOnueOoOeOoeeOo1wiLDUsXCLnjqrnjqznjq3njrHnjrTnjrXnjrbnjrjnjrnnjrznjr3njr7njr/nj4Hnj4NcIiw0XSxcbltcImFiODBcIixcIuePi+ePjOePjuePklwiLDYsXCLnj5rnj5vnj5znj53nj5/nj6Hnj6Lnj6Pnj6Tnj6bnj6jnj6rnj6vnj6znj67nj6/nj7Dnj7Hnj7NcIiw0XSxcbltcImFjNDBcIixcIuePuFwiLDEwLFwi55CE55CH55CI55CL55CM55CN55CO55CRXCIsOCxcIueQnFwiLDUsXCLnkKPnkKTnkKfnkKnnkKvnkK3nkK/nkLHnkLLnkLdcIiw0LFwi55C955C+55C/55GA55GCXCIsMTFdLFxuW1wiYWM4MFwiLFwi55GOXCIsNixcIueRlueRmOeRneeRoFwiLDEyLFwi55Gu55Gv55GxXCIsNCxcIueRuOeRueeRulwiXSxcbltcImFkNDBcIixcIueRu+eRvOeRveeRv+eSgueShOeSheeShueSiOeSieeSiueSjOeSjeeSj+eSkVwiLDEwLFwi55Kd55KfXCIsNyxcIueSqlwiLDE1LFwi55K7XCIsMTJdLFxuW1wiYWQ4MFwiLFwi55OIXCIsOSxcIueTk1wiLDgsXCLnk53nk5/nk6Hnk6Xnk6dcIiw2LFwi55Ow55Ox55OyXCJdLFxuW1wiYWU0MFwiLFwi55Oz55O155O4XCIsNixcIueUgOeUgeeUgueUg+eUhVwiLDcsXCLnlI7nlJDnlJLnlJTnlJXnlJbnlJfnlJvnlJ3nlJ7nlKBcIiw0LFwi55Sm55Sn55Sq55Su55S055S255S555S855S955S/55WB55WC55WD55WE55WG55WH55WJ55WK55WN55WQ55WR55WS55WT55WV55WW55WX55WYXCJdLFxuW1wiYWU4MFwiLFwi55WdXCIsNyxcIueVp+eVqOeVqeeVq1wiLDYsXCLnlbPnlbXnlbbnlbfnlbpcIiw0LFwi55aA55aB55aC55aE55aF55aHXCJdLFxuW1wiYWY0MFwiLFwi55aI55aJ55aK55aM55aN55aO55aQ55aT55aV55aY55ab55ac55ae55ai55amXCIsNCxcIueWreeWtueWt+eWuueWu+eWv+eXgOeXgeeXhueXi+eXjOeXjueXj+eXkOeXkeeXk+eXl+eXmeeXmueXnOeXneeXn+eXoOeXoeeXpeeXqeeXrOeXreeXrueXr+eXsueXs+eXteeXtueXt+eXuOeXuueXu+eXveeXvueYgueYhOeYhueYh1wiXSxcbltcImFmODBcIixcIueYiOeYieeYi+eYjeeYjueYj+eYkeeYkueYk+eYlOeYlueYmueYnOeYneeYnueYoeeYo+eYp+eYqOeYrOeYrueYr+eYseeYsueYtueYt+eYueeYuueYu+eYveeZgeeZgueZhFwiXSxcbltcImIwNDBcIixcIueZhVwiLDYsXCLnmY5cIiw1LFwi55mV55mXXCIsNCxcIueZneeZn+eZoOeZoeeZoueZpFwiLDYsXCLnmaznma3nma7nmbBcIiw3LFwi55m555m655m855m/55qA55qB55qD55qF55qJ55qK55qM55qN55qP55qQ55qS55qU55qV55qX55qY55qa55qbXCJdLFxuW1wiYjA4MFwiLFwi55qcXCIsNyxcIueapVwiLDgsXCLnmq/nmrDnmrPnmrVcIiw5LFwi55uA55uB55uD5ZWK6Zi/5Z+D5oyo5ZOO5ZSJ5ZOA55qR55mM6JS855+u6Im+56KN54ix6ZqY6Z6N5rCo5a6J5L+65oyJ5pqX5bK46IO65qGI6IKu5piC55uO5Ye55pWW54as57+x6KKE5YKy5aWl5oeK5r6z6Iqt5o2M5omS5Y+t5ZCn56yG5YWr55ak5be05ouU6LeL6Z225oqK6ICZ5Z2d6Zy4572i54i455m95p+P55m+5pGG5L2w6LSl5ouc56iX5paR54+t5pCs5omz6Iis6aKB5p2/54mI5omu5ouM5Ly055Oj5Y2K5Yqe57uK6YKm5biu5qKG5qac6IaA57uR5qOS56OF6JqM6ZWR5YKN6LCk6Iue6IOe5YyF6KSS5YmlXCJdLFxuW1wiYjE0MFwiLFwi55uE55uH55uJ55uL55uM55uT55uV55uZ55ua55uc55ud55ue55ugXCIsNCxcIuebplwiLDcsXCLnm7Dnm7Pnm7Xnm7bnm7fnm7rnm7vnm73nm7/nnIDnnILnnIPnnIXnnIbnnIrnnIznnI5cIiwxMCxcIuecm+ecnOecneecnuecoeeco+ecpOecpeecp+ecquecq1wiXSxcbltcImIxODBcIixcIuecrOecruecsFwiLDQsXCLnnLnnnLvnnL3nnL7nnL/nnYLnnYTnnYXnnYbnnYhcIiw3LFwi552SXCIsNyxcIuednOiWhOmbueS/neWgoemlseWuneaKseaKpeaatOixuemyjeeIhuadr+eikeaCsuWNkeWMl+i+iOiDjOi0nemSoeWAjeeLiOWkh+aDq+eEmeiiq+WllOiLr+acrOesqOW0qee7t+eUreaztei5pui/uOmAvOm8u+avlOmEmeeslOW9vOeip+iTluiUveavleavmeavluW4geW6h+eXuemXreaVneW8iuW/hei+n+WjgeiHgumBv+mZm+merei+uee8lui0rOaJgeS+v+WPmOWNnui+qOi+qei+q+mBjeagh+W9quiGmOihqOmzluaGi+WIq+eYquW9rOaWjOa/kua7qOWuvuaRiOWFteWGsOafhOS4meeniemlvOeCs1wiXSxcbltcImIyNDBcIixcIuedneednuedn+edoOedpOedp+edqeedquedrVwiLDExLFwi552655275528556B556C556D556GXCIsNSxcIueej+eekOeek1wiLDExLFwi556h556j556k556m556o556r556t556u556v556x556y55605562XCIsNF0sXG5bXCJiMjgwXCIsXCLnnrznnr7nn4BcIiwxMixcIuefjlwiLDgsXCLnn5jnn5nnn5rnn51cIiw0LFwi55+k55eF5bm254676I+g5pKt5ouo6ZK15rOi5Y2a5YuD5pCP6ZOC566U5Lyv5bib6Ii26ISW6IaK5rik5rOK6amz5o2V5Y2c5ZO66KGl5Z+g5LiN5biD5q2l57C/6YOo5oCW5pOm54yc6KOB5p2Q5omN6LSi552s6Lip6YeH5b2p6I+c6JSh6aSQ5Y+C6JqV5q6L5oOt5oOo54G/6IuN6Iix5LuT5rKn6JeP5pON57OZ5qe95pu56I2J5Y6V562W5L6n5YaM5rWL5bGC6Lmt5o+S5Y+J6Iys6Iy25p+l56K05pC95a+f5bKU5beu6K+n5ouG5p+06LG65pCA5o666J2J6aaL6LCX57yg6ZOy5Lqn6ZiQ6aKk5piM54yWXCJdLFxuW1wiYjM0MFwiLFwi55+m55+o55+q55+v55+w55+x55+y55+055+155+355+555+655+755+856CDXCIsNSxcIuegiuegi+egjuegj+egkOegk+egleegmeegm+egnuegoOegoeegouegpOegqOegquegq+egruegr+egseegsuegs+egteegtuegveegv+ehgeehguehg+ehhOehhuehiOehieehiuehi+ehjeehj+ehkeehk+ehlOehmOehmeehmlwiXSxcbltcImIzODBcIixcIuehm+ehnOehnlwiLDExLFwi56GvXCIsNyxcIuehuOehueehuuehu+ehvVwiLDYsXCLlnLrlsJ3luLjplb/lgb/ogqDljoLmlZ7nlYXllLHlgKHotoXmioTpkp7mnJ3lmLLmva7lt6LlkLXngpLovabmia/mkqTmjqPlvbvmvojpg7Toh6PovrDlsJjmmajlv7HmsonpmYjotoHooazmkpHnp7Dln47mqZnmiJDlkYjkuZjnqIvmg6nmvoTor5rmib/pgJ7pqovnp6TlkIPnl7TmjIHljJnmsaDov5/lvJvpqbDogLvpvb/kvojlsLrotaTnv4XmlqXngr3lhYXlhrLomavltIflrqDmir3phaznlbTouIznqKDmhIHnrbnku4fnu7jnnoXkuJHoh63liJ3lh7rmqbHljqjouofplITpm4/mu4HpmaTmpZpcIl0sXG5bXCJiNDQwXCIsXCLnooTnooXnoobnoojnoornoovnoo/nopDnopLnopTnopXnopbnopnnop3nop7noqDnoqLnoqTnoqbnoqhcIiw3LFwi56K156K256K356K456K656K756K856K956K/56OA56OC56OD56OE56OG56OH56OI56OM56ON56OO56OP56OR56OS56OT56OW56OX56OY56OaXCIsOV0sXG5bXCJiNDgwXCIsXCLno6Tno6Xno6bno6fno6nno6rno6vno61cIiw0LFwi56Oz56O156O256O456O556O7XCIsNSxcIuekguekg+ekhOekhlwiLDYsXCLnoYDlgqjnn5fmkJDop6blpITmj6Plt53nqb/mpL3kvKDoiLnllpjkuLLnlq7nqpfluaLluorpl6/liJvlkLnngormjbbplKTlnoLmmKXmpL/phofllIfmt7Pnuq/ooKLmiLPnu7DnlrXojKjno4Hpm4zovp7mhYjnk7for43mraTliLrotZDmrKHogarokbHlm7HljIbku47kuJvlh5HnspfphovnsIfkv4Poub/nr6HnqpzmkafltJTlgqzohIbnmIHnsrnmt6znv6DmnZHlrZjlr7jno4vmkq7mkJPmjqrmjKvplJnmkK3ovr7nrZTnmKnmiZPlpKflkYbmrbnlgqPmiLTluKbmrobku6PotLfooovlvoXpgK5cIl0sXG5bXCJiNTQwXCIsXCLnpI1cIiw1LFwi56SUXCIsOSxcIuekn1wiLDQsXCLnpKVcIiwxNCxcIuektVwiLDQsXCLnpL3npL/npYLnpYPnpYTnpYXnpYfnpYpcIiw4LFwi56WU56WV56WY56WZ56Wh56WjXCJdLFxuW1wiYjU4MFwiLFwi56Wk56Wm56Wp56Wq56Wr56Ws56Wu56WwXCIsNixcIuelueelu1wiLDQsXCLnpoLnpoPnpobnpofnpojnponnpovnpoznpo3npo7nppDnppHnppLmgKDogL3mi4XkuLnljZXpg7jmjrjog4bml6bmsK7kvYbmg67mt6Hor57lvLnom4vlvZPmjKHlhZrojaHmoaPliIDmjaPouYjlgJLlspvnpbflr7zliLDnqLvmgrzpgZPnm5flvrflvpfnmoTouaznga/nmbvnrYnnnqrlh7PpgpPloKTkvY7mu7Tov6rmlYznrJvni4TmtqTnv5/lq6HmirXlupXlnLDokoLnrKzluJ3lvJ/pgJLnvJTpoqDmjoLmu4fnopjngrnlhbjpnZvlnqvnlLXkvYPnlLjlupfmg6blpaDmt4Dmrr/noonlj7zpm5Xlh4vliIHmjonlkIrpkpPosIPot4zniLnnop/onbbov63osI3lj6BcIl0sXG5bXCJiNjQwXCIsXCLnppNcIiw2LFwi56abXCIsMTEsXCLnpqhcIiwxMCxcIuemtFwiLDQsXCLnprznpr/np4Lnp4Tnp4Xnp4fnp4jnp4rnp4znp47np4/np5Dnp5Pnp5Tnp5bnp5fnp5lcIiw1LFwi56eg56eh56ei56el56eo56eqXCJdLFxuW1wiYjY4MFwiLFwi56es56eu56exXCIsNixcIuenueenuuenvOenvuenv+eogeeohOeoheeoh+eoiOeoieeoiueojOeoj1wiLDQsXCLnqJXnqJbnqJjnqJnnqJvnqJzkuIHnm6/lj67pkonpobbpvI7plK3lrprorqLkuKLkuJzlhqzokaPmh4LliqjmoIvkvpfmgavlhrvmtJ7lhZzmipbmlpfpmaHosYbpgJfnl5jpg73nnaPmr5Lniorni6zor7vloLXnnbnotYzmnZzplYDogprluqbmuKHlppLnq6/nn63plLvmrrXmlq3nvI7loIblhZHpmJ/lr7nloqnlkKjoubLmlabpob/lm6Tpkp3nm77pgYHmjoflk4blpJrlpLrlnpvourLmnLXot7roiLXliYHmg7DloJXom77ls6jpuYXkv4Tpop3orrnlqKXmgbbljoTmibzpgY/phILppb/mganogIzlhL/ogLPlsJTppbXmtLHkuoxcIl0sXG5bXCJiNzQwXCIsXCLnqJ3nqJ/nqKHnqKLnqKRcIiwxNCxcIueotOeoteeotueouOeouueovuepgFwiLDUsXCLnqYdcIiw5LFwi56mSXCIsNCxcIuepmFwiLDE2XSxcbltcImI3ODBcIixcIuepqVwiLDYsXCLnqbHnqbLnqbPnqbXnqbvnqbznqb3nqb7nqoLnqoXnqofnqonnqornqovnqoznqo7nqo/nqpDnqpPnqpTnqpnnqprnqpvnqp7nqqHnqqLotLDlj5HnvZrnrY/kvJDkuY/pmIDms5Xnj5Dol6nluIbnlarnv7vmqIrnn77pkpLnuYHlh6Hng6blj43ov5TojIPotKnniq/ppa3ms5vlnYroirPmlrnogqrmiL/pmLLlpqjku7/orr/nurrmlL7oj7LpnZ7llaHpo57ogqXljKror73lkKDogrrlup/msrjotLnoiqzphZrlkKnmsJvliIbnurflnZ/nhJrmsb7nsonlpYvku73lv7/mhKTnsqrkuLDlsIHmnqvonILls7DplIvpo47nlq/ng73pgKLlhq/nvJ3orr3lpYnlh6TkvZvlkKblpKvmlbfogqTlrbXmibbmi4LovpDluYXmsJ/nrKbkvI/kv5jmnI1cIl0sXG5bXCJiODQwXCIsXCLnqqPnqqTnqqfnqqnnqqrnqqvnqq5cIiw0LFwi56q0XCIsMTAsXCLnq4BcIiwxMCxcIuerjFwiLDksXCLnq5fnq5jnq5rnq5vnq5znq53nq6Hnq6Lnq6Tnq6dcIiw1LFwi56uu56uw56ux56uy56uzXCJdLFxuW1wiYjg4MFwiLFwi56u0XCIsNCxcIueru+ervOervuesgOesgeesguesheesh+esieesjOesjeesjueskOeskuesk+esluesl+esmOesmuesnOesneesn+esoeesoueso+esp+esqeesrea1rua2quemj+iiseW8l+eUq+aKmui+heS/r+mHnOaWp+iEr+iFkeW6nOiFkOi1tOWJr+imhui1i+WkjeWCheS7mOmYnOeItuiFuei0n+WvjOiuo+mZhOWmh+e8muWSkOWZtuWYjuivpeaUueamgumSmeeblua6ieW5sueUmOadhuafkeerv+iCnei1tuaEn+enhuaVoui1o+WGiOWImumSoue8uOiCm+e6suWyl+a4r+adoOevmeeai+mrmOiGj+e+lOezleaQnumVkOeov+WRiuWTpeatjOaQgeaIiOm4veiDs+eWmeWJsumdqeiRm+agvOibpOmYgemalOmTrOS4quWQhOe7meaguei3n+iAleabtOW6mue+uVwiXSxcbltcImI5NDBcIixcIuesr+essOessuestOesteestuest+esueesu+esveesv1wiLDUsXCLnrYbnrYjnrYrnrY3nrY7nrZPnrZXnrZfnrZnnrZznrZ7nrZ/nraHnraNcIiwxMCxcIuetr+etsOets+ettOettuetuOetuuetvOetveetv+eugeeugueug+euhOeuhlwiLDYsXCLnro7nro9cIl0sXG5bXCJiOTgwXCIsXCLnrpHnrpLnrpPnrpbnrpjnrpnnrprnrpvnrp7nrp/nrqDnrqPnrqTnrqXnrq7nrq/nrrDnrrLnrrPnrrXnrrbnrrfnrrlcIiw3LFwi56+C56+D56+E5Z+C6IC/5qKX5bel5pS75Yqf5oGt6b6a5L6b6Lqs5YWs5a6r5byT5bep5rGe5oux6LSh5YWx6ZKp5Yu+5rKf6Iuf54uX5Z6i5p6E6LSt5aSf6L6c6I+H5ZKV566N5Lyw5rK95a2k5aeR6byT5Y+k6JuK6aqo6LC36IKh5pWF6aG+5Zu66ZuH5Yiu55Oc5YmQ5a+h5oyC6KSC5LmW5ouQ5oCq5qO65YWz5a6Y5Yag6KeC566h6aaG572Q5oOv54GM6LSv5YWJ5bm/6YCb55Gw6KeE5Zyt56GF5b2S6b6f6Ze66L2o6ay86K+h55m45qGC5p+c6Leq6LS15Yi96L6K5rua5qON6ZSF6YOt5Zu95p6c6KO56L+H5ZOIXCJdLFxuW1wiYmE0MFwiLFwi56+F56+I56+J56+K56+L56+N56+O56+P56+Q56+S56+UXCIsNCxcIuevm+evnOevnuevn+evoOevouevo+evpOevp+evqOevqeevq+evrOevreevr+evsOevslwiLDQsXCLnr7jnr7nnr7rnr7vnr73nr79cIiw3LFwi57CI57CJ57CK57CN57CO57CQXCIsNSxcIuewl+ewmOewmVwiXSxcbltcImJhODBcIixcIuewmlwiLDQsXCLnsKBcIiw1LFwi57Co57Cp57CrXCIsMTIsXCLnsLlcIiw1LFwi57GC6aq45a2p5rW35rCm5Lql5a6z6aqH6YWj5oao6YKv6Z+p5ZCr5ra15a+S5Ye95ZaK572V57+w5pK85o2N5pex5oa+5oKN54SK5rGX5rGJ5aSv5p2t6Iiq5aOV5ZqO6LGq5q+r6YOd5aW96ICX5Y+35rWp5ZG15Zad6I236I+P5qC456a+5ZKM5L2V5ZCI55uS6LKJ6ZiC5rKz5ra46LWr6KSQ6bmk6LS65Zi/6buR55eV5b6I54ug5oGo5ZO85Lqo5qiq6KGh5oGS6L2w5ZOE54OY6Jm56bi/5rSq5a6P5byY57qi5ZaJ5L6v54y05ZC85Y6a5YCZ5ZCO5ZG85LmO5b+955Ga5aO26JGr6IOh6J2054uQ57OK5rmWXCJdLFxuW1wiYmI0MFwiLFwi57GDXCIsOSxcIuexjlwiLDM2LFwi57G1XCIsNSxcIuexvlwiLDldLFxuW1wiYmI4MFwiLFwi57KI57KKXCIsNixcIueyk+eylOeylueymeeymueym+eyoOeyoeeyo+eypueyp+eyqOeyqeeyq+eyrOeyreeyr+eysOeytFwiLDQsXCLnsrrnsrvlvKfomY7llKzmiqTkupLmsqrmiLfoirHlk5fljY7njL7mu5HnlLvliJLljJbor53mp5DlvormgIDmt67lnY/mrKLnjq/moZPov5jnvJPmjaLmgqPllKTnl6rosaLnhJXmtqPlrqblubvojZLmhYzpu4Tno7ronZfnsKfnmoflh7Dmg7bnhYzmmYPluYzmgY3osI7ngbDmjKXovonlvr3mgaLom5Tlm57mr4HmgpTmhafljYnmg6DmmabotL/np73kvJrng6nmsYforrPor7Lnu5jojaTmmI/lqZrprYLmtZHmt7fosYHmtLvkvJnngavojrfmiJbmg5HpnI3otKfnpbjlh7vlnL7ln7rmnLrnlbjnqL3np6/nrpVcIl0sXG5bXCJiYzQwXCIsXCLnsr/ns4Dns4Lns4Pns4Tns4bns4nns4vns45cIiw2LFwi57OY57Oa57Ob57Od57Oe57OhXCIsNixcIuezqVwiLDUsXCLns7BcIiw3LFwi57O557O657O8XCIsMTMsXCLntItcIiw1XSxcbltcImJjODBcIixcIue0kVwiLDE0LFwi57Sh57Sj57Sk57Sl57Sm57So57Sp57Sq57Ss57St57Su57SwXCIsNixcIuiCjOmlpei/uea/gOiupem4oeWnrOe7qee8ieWQieaegeajmOi+keexjembhuWPiuaApeeWvuaxsuWNs+Wriee6p+aMpOWHoOiEiuW3seiTn+aKgOWGgOWto+S8juelreWJguaCuOa1juWvhOWvguiuoeiusOaXouW/jOmZheWmk+e7p+e6quWYieaet+WkueS9s+WutuWKoOiNmumiiui0vueUsumSvuWBh+eovOS7t+aetumpvuWrgeatvOebkeWdmuWwluesuumXtOeFjuWFvOiCqeiJsOWluOe8hOiMp+ajgOafrOeiseeht+aLo+aNoeeugOS/reWJquWHj+iNkOanm+mJtOi3tei0seingemUrueureS7tlwiXSxcbltcImJkNDBcIixcIue0t1wiLDU0LFwi57WvXCIsN10sXG5bXCJiZDgwXCIsXCLntbhcIiwzMixcIuWBpeiIsOWJkemlr+a4kOa6hea2p+W7uuWDteWnnOWwhua1huaxn+eWhuiSi+ahqOWlluiusuWMoOmFsemZjeiVieakkuekgeeEpuiDtuS6pOmDiua1h+mqhOWoh+WavOaQhemTsOefq+S+peiEmueLoeinkumluue8tOe7nuWJv+aVmemFtei9v+i+g+WPq+eqluaPreaOpeeahuenuOihl+mYtuaIquWKq+iKguahlOadsOaNt+edq+errea0gee7k+ino+WnkOaIkuiXieiKpeeVjOWAn+S7i+eWpeivq+WxiuW3vueti+aWpOmHkeS7iua0peiln+e0p+mUpuS7heiwqOi/m+mds+aZi+emgei/keeDrOa1uFwiXSxcbltcImJlNDBcIixcIue2mVwiLDEyLFwi57anXCIsNixcIue2r1wiLDQyXSxcbltcImJlODBcIixcIue3mlwiLDMyLFwi5bC95Yqy6I2G5YWi6IyO552b5pm26bK45Lqs5oOK57K+57Kz57uP5LqV6K2m5pmv6aKI6Z2Z5aKD5pWs6ZWc5b6E55eJ6Z2W56uf56ue5YeA54Kv56qY5o+q56m257qg546W6Z+t5LmF54G45Lmd6YWS5Y6p5pWR5pen6Ie86IiF5ZKO5bCx55aa6Z6g5ouY54uZ55a95bGF6am56I+K5bGA5ZKA55+p5Li+5rKu6IGa5ouS5o2u5beo5YW36Led6Lie6ZSv5L+x5Y+l5oOn54Ks5Ymn5o2Q6bmD5aif5YCm55y35Y2357ui5pKF5pSr5oqJ5o6Y5YCU54i16KeJ5Yaz6K+A57ud5Z2H6I+M6ZKn5Yab5ZCb5bO7XCJdLFxuW1wiYmY0MFwiLFwi57e7XCIsNjJdLFxuW1wiYmY4MFwiLFwi57i657i8XCIsNCxcIue5glwiLDQsXCLnuYhcIiwyMSxcIuS/iuero+a1mumDoemqj+WWgOWSluWNoeWSr+W8gOaPqealt+WHr+aFqOWIiuWgquWLmOWdjuegjeeci+W6t+aFt+ezoOaJm+aKl+S6oueCleiAg+aLt+eDpOmdoOWdt+iLm+afr+ajteejlemil+enkeWjs+WSs+WPr+a4tOWFi+WIu+WuouivvuiCr+WVg+WepuaBs+WdkeWQreepuuaBkOWtlOaOp+aKoOWPo+aJo+Wvh+aer+WTreeqn+iLpumFt+W6k+ijpOWkuOWeruaMjui3qOiDr+Wdl+ett+S+qeW/q+WuveasvuWMoeetkOeLguahhuefv+ectuaXt+WGteS6j+eblOWyv+eqpeiRteWljumtgeWCgFwiXSxcbltcImMwNDBcIixcIue5nlwiLDM1LFwi57qDXCIsMjMsXCLnupznup3nup5cIl0sXG5bXCJjMDgwXCIsXCLnuq7nurTnurvnurznu5bnu6Tnu6znu7nnvIrnvJDnvJ7nvLfnvLnnvLtcIiw2LFwi572D572GXCIsOSxcIue9kue9k+mmiOaEp+a6g+WdpOaYhuaNhuWbsOaLrOaJqeW7k+mYlOWeg+aLieWWh+icoeiFiui+o+WVpuiOseadpei1luiTneWpquagj+aLpuevrumYkeWFsOa+nOiwsOaPveiniOaHkue8hueDgua7peeQheamlOeLvOW7iumDjuacl+a1quaNnuWKs+eJouiAgeS9rOWnpemFqueDmea2neWLkuS5kOmbt+mVreiVvuejiue0r+WEoeWekuaTguiCi+exu+azquajsealnuWGt+WOmOaiqOeKgem7juevseeLuOemu+a8k+eQhuadjumHjOmypOekvOiOieiNlOWQj+agl+S4veWOieWKseegvuWOhuWIqeWCiOS+i+S/kFwiXSxcbltcImMxNDBcIixcIue9lue9mee9m+e9nOe9nee9nue9oOe9o1wiLDQsXCLnvavnvaznva3nva/nvbDnvbPnvbXnvbbnvbfnvbjnvbrnvbvnvbznvb3nvb/nvoDnvoJcIiw3LFwi576L576N576PXCIsNCxcIue+lVwiLDQsXCLnvpvnvpznvqDnvqLnvqPnvqXnvqbnvqhcIiw2LFwi576xXCJdLFxuW1wiYzE4MFwiLFwi576zXCIsNCxcIue+uue+u+e+vue/gOe/gue/g+e/hOe/hue/h+e/iOe/iee/i+e/jee/j1wiLDQsXCLnv5bnv5fnv5lcIiw1LFwi57+i57+j55ei56uL57KS5rKl6Zq25Yqb55KD5ZOp5L+p6IGU6I6y6L+e6ZWw5buJ5oCc5raf5biY5pWb6IS46ZO+5oGL54K857uD57Ku5YeJ5qKB57Kx6Imv5Lik6L6G6YeP5pm+5Lqu6LCF5pKp6IGK5YOa55aX54eO5a+l6L695r2m5LqG5pKC6ZWj5buW5paZ5YiX6KOC54OI5Yqj54yO55Cz5p6X56O36ZyW5Li06YK76bOe5reL5Yeb6LWB5ZCd5ouO546y6I+x6Zu26b6E6ZOD5Ly2576a5YeM54G16Zm15bKt6aKG5Y+m5Luk5rqc55CJ5qa056Gr6aaP55WZ5YiY55ik5rWB5p+z5YWt6b6Z6IGL5ZKZ56y856q/XCJdLFxuW1wiYzI0MFwiLFwi57+k57+n57+o57+q57+r57+s57+t57+v57+y57+0XCIsNixcIue/vee/vue/v+iAguiAh+iAiOiAieiAiuiAjuiAj+iAkeiAk+iAmuiAm+iAneiAnuiAn+iAoeiAo+iApOiAq1wiLDUsXCLogLLogLTogLnogLrogLzogL7ogYDogYHogYTogYXogYfogYjogYnogY7ogY/ogZDogZHogZPogZXogZbogZdcIl0sXG5bXCJjMjgwXCIsXCLogZnogZtcIiwxMyxcIuiBq1wiLDUsXCLogbJcIiwxMSxcIumahuWehOaLoumZh+alvOWohOaQguevk+a8j+mZi+iKpuWNoumiheW6kOeCieaOs+WNpOiZj+mygem6k+eijOmcsui3r+i1gum5v+a9nuemhOW9lemZhuaIrumptOWQlemTneS+o+aXheWxpeWxoee8leiZkeawr+W+i+eOh+a7pOe7v+WzpuaMm+Wtqua7puWNteS5seaOoOeVpeaKoei9ruS8puS7keaypue6tuiuuuiQneieuue9l+mAu+mUo+euqemqoeijuOiQvea0m+mqhue7nOWmiOm6u+eOm+eggeiagumprOmqguWYm+WQl+Wfi+S5sOm6puWNlui/iOiEieeekummkuibrua7oeiUk+abvOaFoua8q1wiXSxcbltcImMzNDBcIixcIuiBvuiCgeiCguiCheiCiOiCiuiCjVwiLDUsXCLogpTogpXogpfogpnogp7ogqPogqbogqfogqjogqzogrDogrPogrXogrbogrjogrnogrvog4Xog4dcIiw0LFwi6IOPXCIsNixcIuiDmOiDn+iDoOiDouiDo+iDpuiDruiDteiDt+iDueiDu+iDvuiDv+iEgOiEgeiEg+iEhOiEheiEh+iEiOiEi1wiXSxcbltcImMzODBcIixcIuiEjOiEleiEl+iEmeiEm+iEnOiEneiEn1wiLDEyLFwi6ISt6ISu6ISw6ISz6IS06IS16IS36IS5XCIsNCxcIuiEv+iwqeiKkuiMq+ebsuawk+W/meiOveeMq+iMhemUmuavm+efm+mThuWNr+iMguWGkuW4veiyjOi0uOS5iOeOq+aemuaihemFtumcieeFpOayoeecieWqkumVgeavj+e+juaYp+WvkOWmueWqmumXqOmXt+S7rOiQjOiSmeaqrOebn+mUsOeMm+aipuWtn+ecr+mGmumdoeeznOi/t+iwnOW8peexs+enmOinheazjOicnOWvhuW5guajieecoOe7teWGleWFjeWLieWoqee8hemdouiLl+aPj+eehOiXkOenkua4uuW6meWmmeiUkeeBreawkeaKv+eav+aVj+aCr+mXveaYjuien+m4o+mTreWQjeWRveiwrOaRuFwiXSxcbltcImM0NDBcIixcIuiFgFwiLDUsXCLohYfohYnohY3ohY7ohY/ohZLohZbohZfohZjohZtcIiw0LFwi6IWh6IWi6IWj6IWk6IWm6IWo6IWq6IWr6IWs6IWv6IWy6IWz6IW16IW26IW36IW46IaB6IaDXCIsNCxcIuiGieiGi+iGjOiGjeiGjuiGkOiGklwiLDUsXCLohpnohprohp5cIiw0LFwi6Iak6IalXCJdLFxuW1wiYzQ4MFwiLFwi6Ian6Iap6IarXCIsNyxcIuiGtFwiLDUsXCLohrzohr3ohr7ohr/oh4Toh4Xoh4foh4joh4noh4voh41cIiw2LFwi5pG56JiR5qih6Iac56Oo5pGp6a2U5oq55pyr6I6r5aKo6buY5rKr5ryg5a+e6ZmM6LCL54mf5p+Q5ouH54mh5Lqp5aeG5q+N5aKT5pqu5bmV5Yuf5oWV5pyo55uu552m54mn56mG5ou/5ZOq5ZGQ6ZKg6YKj5aic57qz5rCW5LmD5aW26ICQ5aWI5Y2X55S36Zq+5ZuK5oyg6ISR5oG86Ze55reW5ZGi6aaB5YaF5aup6IO95aau6ZyT5YCq5rOl5bC85ouf5L2g5Yy/6IW76YCG5rq66JSr5ouI5bm056K+5pK15o275b+15aiY6YW/6bif5bC/5o2P6IGC5a295ZWu6ZWK6ZWN5raF5oKo5p+g54ue5Yed5a6BXCJdLFxuW1wiYzU0MFwiLFwi6IeUXCIsMTQsXCLoh6Toh6Xoh6boh6joh6noh6voh65cIiw0LFwi6Ie1XCIsNSxcIuiHveiHv+iIg+iIh1wiLDQsXCLoiI7oiI/oiJHoiJPoiJVcIiw1LFwi6Iid6Iig6Iik6Iil6Iim6Iin6Iip6Iiu6Iiy6Ii66Ii86Ii96Ii/XCJdLFxuW1wiYzU4MFwiLFwi6ImA6ImB6ImC6ImD6ImF6ImG6ImI6ImK6ImM6ImN6ImO6ImQXCIsNyxcIuiJmeiJm+iJnOiJneiJnuiJoFwiLDcsXCLoianmi6fms57niZvmia3pkq7nur3ohJPmtZPlhpzlvITlpbTliqrmgJLlpbPmmpbomZDnlp/mjKrmh6bns6/or7rlk6bmrKfpuKXmrrTol5XlkZXlgbbmsqTllarotrTniKzluJXmgJXnkLbmi43mjpLniYzlvpjmuYPmtL7mlIDmvZjnm5jno5Dnm7znlZTliKTlj5vkuZPlup7ml4HogKrog5bmipvlkobliKjngq7ooo3ot5Hms6Hlkbjog5rln7noo7TotZTpmarphY3kvanmspvllrfnm4bnoLDmiqjng7nmvo7lva3ok6zmo5rnobznr7fohqjmnIvpuY/mjafnorDlna/noJLpnLnmibnmiqvliojnkLXmr5dcIl0sXG5bXCJjNjQwXCIsXCLoiaroiavoiazoia3oibHoibXoibboibfoibjoibvoibzoioDoioHoioPoioXoioboiofoionoiozoipDoipPoipToipXoipboiproipvoip7oiqDoiqLoiqPoiqfoirLoirXoirboirroirvoirzoir/oi4Doi4Loi4Poi4Xoi4boi4noi5Doi5boi5noi5roi53oi6Loi6foi6joi6noi6roi6zoi63oi67oi7Doi7Loi7Poi7Xoi7boi7hcIl0sXG5bXCJjNjgwXCIsXCLoi7roi7xcIiw0LFwi6IyK6IyL6IyN6IyQ6IyS6IyT6IyW6IyY6IyZ6IydXCIsOSxcIuiMqeiMquiMruiMsOiMsuiMt+iMu+iMveWVpOiEvueWsuearuWMueeXnuWDu+WxgeitrOevh+WBj+eJh+mql+mjmOa8gueTouelqOaSh+eepeaLvOmikei0q+WTgeiBmOS5kuWdquiLueiQjeW5s+WHreeTtuivhOWxj+WdoeazvOmih+WphuegtOmthOi/q+eyleWJluaJkemTuuS7huiOhuiRoeiPqeiSsuWflOactOWcg+aZrua1puiwseabneeAkeacn+asuuagluaImuWmu+S4g+WHhOa8huafkuayj+WFtuaji+Wlh+atp+eVpuW0juiEkOm9kOaXl+eliOelgemqkei1t+WyguS5nuS8geWQr+WlkeegjOWZqOawlOi/hOW8g+axveazo+iuq+aOkFwiXSxcbltcImM3NDBcIixcIuiMvuiMv+iNgeiNguiNhOiNheiNiOiNilwiLDQsXCLojZPojZVcIiw0LFwi6I2d6I2i6I2wXCIsNixcIuiNueiNuuiNvlwiLDYsXCLojofojojojorojovojozojo3ojo/ojpDojpHojpTojpXojpbojpfojpnojprojp3ojp/ojqFcIiw2LFwi6I6s6I6t6I6uXCJdLFxuW1wiYzc4MFwiLFwi6I6v6I616I676I6+6I6/6I+C6I+D6I+E6I+G6I+I6I+J6I+L6I+N6I+O6I+Q6I+R6I+S6I+T6I+V6I+X6I+Z6I+a6I+b6I+e6I+i6I+j6I+k6I+m6I+n6I+o6I+r6I+s6I+t5oGw5rS954m15omm6ZKO6ZOF5Y2D6L+B562+5Luf6LCm5Lm+6buU6ZKx6ZKz5YmN5r2c6YGj5rWF6LC05aCR5bWM5qyg5q2J5p6q5ZGb6IWU576M5aKZ6JS35by65oqi5qmH6ZS55pWy5oKE5qGl556n5LmU5L6o5ben6Z6Y5pKs57+Y5bOt5L+P56qN5YiH6IyE5LiU5oCv56qD6ZKm5L615Lqy56em55C05Yuk6Iq55pOS56a95a+d5rKB6Z2S6L275rCi5YC+5Y2/5riF5pOO5pm05rCw5oOF6aG36K+35bqG55C856m356eL5LiY6YKx55CD5rGC5Zua6YWL5rOF6LaL5Yy66JuG5puy6Lqv5bGI6amx5rigXCJdLFxuW1wiYzg0MFwiLFwi6I+u6I+v6I+zXCIsNCxcIuiPuuiPu+iPvOiPvuiPv+iQgOiQguiQheiQh+iQiOiQieiQiuiQkOiQklwiLDUsXCLokJnokJrokJvokJ5cIiw1LFwi6JCpXCIsNyxcIuiQslwiLDUsXCLokLnokLrokLvokL5cIiw3LFwi6JGH6JGI6JGJXCJdLFxuW1wiYzg4MFwiLFwi6JGKXCIsNixcIuiRklwiLDQsXCLokZjokZ3okZ7okZ/okaDokaLokaRcIiw0LFwi6JGq6JGu6JGv6JGw6JGy6JG06JG36JG56JG76JG85Y+W5ai26b6L6Laj5Y675ZyI6aKn5p2D6Yab5rOJ5YWo55eK5ouz54qs5Yi45Yqd57y654KU55i45Y206bmK5qa356Gu6ZuA6KOZ576k54S254eD5YaJ5p+T55Ok5aOk5pSY5Zq36K6p6aW25omw57uV5oO554Ot5aOs5LuB5Lq65b+N6Z+n5Lu76K6k5YiD5aaK57qr5omU5LuN5pel5oiO6Iy46JOJ6I2j6J6N54aU5rq25a6557uS5YaX5o+J5p+U6IKJ6Iy56KCV5YSS5a265aaC6L6x5Lmz5rGd5YWl6KSl6L2v6Ziu6JWK55Ge6ZSQ6Zew5ram6Iul5byx5pKS5rSS6JCo6IWu6bOD5aGe6LWb5LiJ5Y+BXCJdLFxuW1wiYzk0MFwiLFwi6JG9XCIsNCxcIuiSg+iShOiSheiShuiSiuiSjeiSj1wiLDcsXCLokpjokprokpvokp3okp7okp/okqDokqJcIiwxMixcIuiSsOiSseiSs+iSteiStuiSt+iSu+iSvOiSvuiTgOiTguiTg+iTheiThuiTh+iTiOiTi+iTjOiTjuiTj+iTkuiTlOiTleiTl1wiXSxcbltcImM5ODBcIixcIuiTmFwiLDQsXCLok57ok6Hok6Lok6Tok6dcIiw0LFwi6JOt6JOu6JOv6JOxXCIsMTAsXCLok73ok77olIDolIHolILkvJ7mlaPmoZHll5PkuKfmkJTpqprmiavlq4LnkZ/oibLmtqnmo67lg6fojo7noILmnYDliLnmspnnurHlgrvllaXnhZ7nrZvmmZLnj4roi6vmnYnlsbHliKDnhb3ooavpl6rpmZXmk4XotaHohrPlloTmsZXmiYfnvK7lopLkvKTllYbotY/mmYzkuIrlsJroo7PmoqLmjY7nqI3ng6foio3li7rpn7blsJHlk6jpgrXnu43lpaLotYrom4foiIzoiI3otabmkYTlsITmhZHmtonnpL7orr7noLfnlLPlkbvkvLjouqvmt7HlqKDnu4XnpZ7msojlrqHlqbbnlJrogr7mhY7muJflo7DnlJ/nlKXnibLljYfnu7NcIl0sXG5bXCJjYTQwXCIsXCLolINcIiw4LFwi6JSN6JSO6JSP6JSQ6JSS6JSU6JSV6JSW6JSY6JSZ6JSb6JSc6JSd6JSe6JSg6JSiXCIsOCxcIuiUrVwiLDksXCLolL5cIiw0LFwi6JWE6JWF6JWG6JWH6JWLXCIsMTBdLFxuW1wiY2E4MFwiLFwi6JWX6JWY6JWa6JWb6JWc6JWd6JWfXCIsNCxcIuiVpeiVpuiVp+iVqVwiLDgsXCLolbPolbXolbbolbfolbjolbzolb3olb/oloDoloHnnIHnm5vlianog5zlnKPluIjlpLHni67mlr3mub/or5flsLjombHljYHnn7Pmi77ml7bku4Dpo5/omoDlrp7or4blj7Lnn6Lkvb/lsY7pqbblp4vlvI/npLrlo6vkuJbmn7/kuovmi63oqpPpgJ3lir/mmK/ll5zlmazpgILku5Xkvo3ph4rppbDmsI/luILmgYPlrqTop4bor5XmlLbmiYvpppblrojlr7/mjojllK7lj5fnmKblhb3olKzmnqLmorPmrormipLovpPlj5ToiJLmt5Hnlo/kuabotY7lrbDnhp/olq/mmpHmm5nnvbLonIDpu43pvKDlsZ7mnK/ov7DmoJHmnZ/miI3nq5blooXlurbmlbDmvLFcIl0sXG5bXCJjYjQwXCIsXCLoloLoloPolobolohcIiw2LFwi6JaQXCIsMTAsXCLolp1cIiw2LFwi6Jal6Jam6Jan6Jap6Jar6Jas6Jat6JaxXCIsNSxcIuiWuOiWulwiLDYsXCLol4JcIiw2LFwi6JeKXCIsNCxcIuiXkeiXklwiXSxcbltcImNiODBcIixcIuiXlOiXllwiLDUsXCLol51cIiw2LFwi6Jel6Jem6Jen6Jeo6JeqXCIsMTQsXCLmgZXliLfogI3mkZToobDnlKnluIXmoJPmi7TpnJzlj4zniL3osIHmsLTnnaHnqI7lkK7nnqzpobroiJzor7TnoZXmnJTng4Hmlq/mkpXlmLbmgJ3np4Hlj7jkuJ3mrbvogoblr7rll6Plm5vkvLrkvLzppbLlt7Pmnb7ogLjmgILpooLpgIHlrovorrzor7XmkJzoiZjmk57ll73oi4/phaXkv5fntKDpgJ/nsp/lg7PloZHmuq/lrr/or4nogoPphbjokpznrpfomb3pmovpmo/nu6Xpq5Pnoo7lsoHnqZfpgYLpmqfnpZ/lrZnmjZ/nrIvok5Hmoq3llIbnvKnnkJDntKLplIHmiYDloYzku5blroPlpbnloZRcIl0sXG5bXCJjYzQwXCIsXCLol7nol7rol7zol73ol77omIBcIiw0LFwi6JiGXCIsMTAsXCLomJLomJPomJTomJXomJdcIiwxNSxcIuiYqOiYqlwiLDEzLFwi6Ji56Ji66Ji76Ji96Ji+6Ji/6JmAXCJdLFxuW1wiY2M4MFwiLFwi6JmBXCIsMTEsXCLomZLomZPomZVcIiw0LFwi6Jmb6Jmc6Jmd6Jmf6Jmg6Jmh6JmjXCIsNyxcIueNreaMnui5i+i4j+iDjuiLlOaKrOWPsOazsOmFnuWkquaAgeaxsOWdjeaRiui0queYq+a7qeWdm+aqgOeXsOa9reiwreiwiOWdpuavr+iikueis+aOouWPueeCreaxpOWhmOaQquWgguajoOiGm+WUkOezluWAmOi6uua3jOi2n+eDq+aOj+a2m+a7lOe7puiQhOahg+mAg+a3mOmZtuiuqOWll+eJueiXpOiFvueWvOiqiuair+WJlOi4oumUkeaPkOmimOi5hOWVvOS9k+abv+Waj+aDlea2leWJg+WxieWkqea3u+Whq+eUsOeUnOaBrOiIlOiFhuaMkeadoei/ouecuui3s+i0tOmTgeW4luWOheWQrOeDg1wiXSxcbltcImNkNDBcIixcIuiZreiZr+iZsOiZslwiLDYsXCLomoNcIiw2LFwi6JqOXCIsNCxcIuialOiallwiLDUsXCLomp5cIiw0LFwi6Jql6Jqm6Jqr6Jqt6Jqu6Jqy6Jqz6Jq36Jq46Jq56Jq7XCIsNCxcIuibgeibguibg+ibheibiOibjOibjeibkuibk+ibleibluibl+ibmuibnFwiXSxcbltcImNkODBcIixcIuibneiboOiboeibouibo+ibpeibpuibp+ibqOibquibq+ibrOibr+ibteibtuibt+ibuuibu+ibvOibveibv+icgeichOicheichuici+icjOicjuicj+ickOickeiclOicluaxgOW7t+WBnOS6reW6reaMuuiJh+mAmuahkOmFruees+WQjOmTnOW9pOerpeahtuaNheetkue7n+eXm+WBt+aKleWktOmAj+WHuOeng+eqgeWbvuW+kumAlOa2guWxoOWcn+WQkOWFlOa5jeWbouaOqOmik+iFv+icleikqumAgOWQnuWxr+iHgOaLluaJmOiEsem4temZgOmprumpvOakreWmpeaLk+WUvuaMluWTh+ibmea0vOWog+eTpuiinOatquWkluixjOW8r+a5vueOqemhveS4uOeDt+WujOeil+aMveaZmuealuaDi+Wum+WpieS4h+iFleaxqueOi+S6oeaeiee9keW+gOaXuuacm+W/mOWmhOWogVwiXSxcbltcImNlNDBcIixcIuicmeicm+icneicn+icoOicpOicpuicp+icqOicquicq+icrOicreicr+icsOicsuics+icteictuicuOicueicuuicvOicveidgFwiLDYsXCLonYronYvonY3onY/onZDonZHonZLonZTonZXonZbonZjonZpcIiw1LFwi6J2h6J2i6J2mXCIsNyxcIuidr+idseidsuids+idtVwiXSxcbltcImNlODBcIixcIuidt+iduOidueiduuidv+iegOiegeiehOiehuieh+ieieieiuiejOiejlwiLDQsXCLonpTonpXonpbonphcIiw2LFwi6J6gXCIsNCxcIuW3jeW+ruWNsemfpui/neahheWbtOWUr+aDn+S4uua9jee7tOiLh+iQjuWnlOS8n+S8quWwvue6rOacquiUmuWRs+eVj+iDg+WWgumtj+S9jea4reiwk+WwieaFsOWNq+eYn+a4qeiaiuaWh+mXu+e6ueWQu+eos+e0iumXruWXoee/geeTruaMneicl+a2oeeqneaIkeaWoeWNp+aPoeayg+W3q+WRnOmSqOS5jOaxoeivrOWxi+aXoOiKnOaip+WQvuWQtOavi+atpuS6lOaNguWNiOiInuS8jeS+ruWdnuaIiumbvuaZpOeJqeWLv+WKoeaCn+ivr+aYlOeGmeaekOilv+ehkuefveaZsOWYu+WQuOmUoeeJulwiXSxcbltcImNmNDBcIixcIuiepeiepuiep+ieqeiequieruiesOieseiesuietOietuiet+ieuOieueieu+ievOievuiev+ifgVwiLDQsXCLon4fon4jon4non4xcIiw0LFwi6J+UXCIsNixcIuifnOifneifnuifn+ifoeifouifo+ifpOifpuifp+ifqOifqeifq+ifrOifreifr1wiLDldLFxuW1wiY2Y4MFwiLFwi6J+66J+76J+86J+96J+/6KCA6KCB6KCC6KCEXCIsNSxcIuigi1wiLDcsXCLooJTooJfooJjooJnooJrooJxcIiw0LFwi6KCj56iA5oGv5biM5oKJ6Iad5aSV5oOc54aE54Ov5rqq5rGQ54qA5qqE6KKt5bit5Lmg5aqz5Zac6ZOj5rSX57O76ZqZ5oiP57uG556O6Jm+5Yyj6Zye6L6W5pqH5bOh5L6g54ut5LiL5Y6m5aSP5ZCT5o6A6ZSo5YWI5LuZ6bKc57qk5ZK46LSk6KGU6Ii36Zey5raO5bym5auM5pi+6Zmp546w54yu5Y6/6IW66aaF576h5a6q6Zm36ZmQ57q/55u45Y6i6ZW26aaZ566x6KWE5rmY5Lmh57+U56Wl6K+m5oOz5ZON5Lqr6aG55be35qmh5YOP5ZCR6LGh6JCn56Gd6ZyE5YmK5ZOu5Zqj6ZSA5raI5a615reG5pmTXCJdLFxuW1wiZDA0MFwiLFwi6KCkXCIsMTMsXCLooLNcIiw1LFwi6KC66KC76KC96KC+6KC/6KGB6KGC6KGD6KGGXCIsNSxcIuihjlwiLDUsXCLooZXooZbooZjooZpcIiw2LFwi6KGm6KGn6KGq6KGt6KGv6KGx6KGz6KG06KG16KG26KG46KG56KG6XCJdLFxuW1wiZDA4MFwiLFwi6KG76KG86KKA6KKD6KKG6KKH6KKJ6KKK6KKM6KKO6KKP6KKQ6KKR6KKT6KKU6KKV6KKXXCIsNCxcIuiinVwiLDQsXCLooqPooqVcIiw1LFwi5bCP5a2d5qCh6IKW5ZW456yR5pWI5qWU5Lqb5q2H6J2O6Z6L5Y2P5oyf5pC66YKq5pac6IOB6LCQ5YaZ5qKw5Y246J+55oeI5rOE5rO76LCi5bGR6Jaq6Iqv6ZSM5qyj6L6b5paw5b+75b+D5L+h6KGF5pif6IWl54yp5oO65YW05YiR5Z6L5b2i6YKi6KGM6YaS5bm45p2P5oCn5aeT5YWE5Ye26IO45YyI5rG56ZuE54aK5LyR5L+u576e5py95ZeF6ZSI56eA6KKW57uj5aKf5oiM6ZyA6Jma5ZiY6aG75b6Q6K646JOE6YWX5Y+Z5pet5bqP55Wc5oGk57Wu5am/57uq57ut6L2p5Zan5a6j5oKs5peL546EXCJdLFxuW1wiZDE0MFwiLFwi6KKs6KKu6KKv6KKw6KKyXCIsNCxcIuiiuOiiueiiuuiiu+iiveiivuiiv+ijgOijg+ijhOijh+ijiOijiuiji+ijjOijjeijj+ijkOijkeijk+ijluijl+ijmlwiLDQsXCLoo6Doo6Hoo6boo6foo6lcIiw2LFwi6KOy6KO16KO26KO36KO66KO76KO96KO/6KSA6KSB6KSDXCIsNV0sXG5bXCJkMTgwXCIsXCLopInopItcIiw0LFwi6KSR6KSUXCIsNCxcIuiknFwiLDQsXCLopKLopKPopKTopKbopKfopKjopKnopKzopK3opK7opK/opLHopLLopLPopLXopLfpgInnmaPnnKnnu5rpnbTolpvlrabnqbTpm6rooYDli4vnho/lvqrml6zor6Llr7vpqa/lt6HmronmsZvorq3orq/pgIrov4XljovmirzpuKbpuK3lkYDkuKvoir3niZnompzltJbooZnmtq/pm4Xlk5HkuprorrbnhInlkr3pmInng5/mt7nnm5DkuKXnoJTonJLlsqnlu7boqIDpopzpmI7ngo7msr/lpYTmjqnnnLzooY3mvJToibPloLDnh5XljoznoJrpm4HllIHlvabnhLDlrrTosJrpqozmroPlpK7puK/np6fmnajmiazkva/nlqHnvormtIvpmLPmsKfku7Dnl5LlhbvmoLfmvL7pgoDohbDlppbnkbZcIl0sXG5bXCJkMjQwXCIsXCLopLhcIiw4LFwi6KWC6KWD6KWFXCIsMjQsXCLopaBcIiw1LFwi6KWnXCIsMTksXCLopbxcIl0sXG5bXCJkMjgwXCIsXCLopb3opb7opoDopoLopoTopoXopodcIiwyNixcIuaRh+Wwp+mBpeeqkeiwo+WnmuWSrOiIgOiNr+imgeiAgOaksOWZjuiAtueIt+mHjuWGtuS5n+mhteaOluS4muWPtuabs+iFi+WknOa2suS4gOWjueWMu+aPlumTseS+neS8iuiho+mikOWkt+mBl+enu+S7quiDsOeWkeayguWunOWnqOW9neakheiageWAmuW3suS5meefo+S7peiJuuaKkeaYk+mCkeWxueS6v+W9ueiHhumAuOiChOeWq+S6puijlOaEj+avheW/huS5ieebiua6ouivo+iuruiwiuivkeW8gue/vOe/jOe7juiMteiNq+WboOaut+mfs+mYtOWnu+WQn+mTtua3q+WvhemlruWwueW8lemakFwiXSxcbltcImQzNDBcIixcIuimolwiLDMwLFwi6KeD6KeN6KeT6KeU6KeV6KeX6KeY6KeZ6Keb6Ked6Kef6Keg6Keh6Kei6Kek6Ken6Keo6Kep6Keq6Kes6Ket6Keu6Kew6Kex6Key6Ke0XCIsNl0sXG5bXCJkMzgwXCIsXCLop7tcIiw0LFwi6KiBXCIsNSxcIuioiFwiLDIxLFwi5Y2w6Iux5qix5am06bmw5bqU57yo6I656JCk6JCl6I2n6J2H6L+O6LWi55uI5b2x6aKW56Gs5pig5ZOf5oul5L2j6IeD55eI5bq46ZuN6LiK6Ju55ZKP5rOz5raM5rC45oG/5YuH55So5bm95LyY5oKg5b+n5bCk55Sx6YKu6ZOA54q55rK55ri46YWJ5pyJ5Y+L5Y+z5L2R6YeJ6K+x5Y+I5bm86L+C5rek5LqO55uC5qaG6Jme5oSa6IiG5L2Z5L+e6YC+6bG85oSJ5rid5riU6ZqF5LqI5aix6Zuo5LiO5bG/56a55a6H6K+t5769546J5Z+f6IqL6YOB5ZCB6YGH5Za75bOq5b6h5oSI5qyy54ux6IKy6KqJXCJdLFxuW1wiZDQ0MFwiLFwi6KieXCIsMzEsXCLoqL9cIiw4LFwi6KmJXCIsMjFdLFxuW1wiZDQ4MFwiLFwi6KmfXCIsMjUsXCLoqbpcIiw2LFwi5rW05a+T6KOV6aKE6LGr6amt6biz5riK5Yak5YWD5Z6j6KKB5Y6f5o+06L6V5Zut5ZGY5ZyG54y/5rqQ57yY6L+c6IuR5oS/5oCo6Zmi5puw57qm6LaK6LeD6ZKl5bKz57Kk5pyI5oKm6ZiF6ICY5LqR6YOn5YyA6Zmo5YWB6L+Q6JW06YWd5pmV6Z+15a2V5Yyd56C45p2C5qC95ZOJ54G+5a6w6L295YaN5Zyo5ZKx5pSS5pqC6LWe6LWD6ISP6JGs6YGt57Of5Ye/6Je75p6j5pep5r6h6Jqk6LqB5Zmq6YCg55qC54G254el6LSj5oup5YiZ5rO96LS85oCO5aKe5oaO5pu+6LWg5omO5Zaz5rij5pyt6L2nXCJdLFxuW1wiZDU0MFwiLFwi6KqBXCIsNyxcIuiqi1wiLDcsXCLoqpRcIiw0Nl0sXG5bXCJkNTgwXCIsXCLoq4NcIiwzMixcIumToemXuOecqOagheamqOWSi+S5jeeCuOiviOaRmOaWi+WuheeqhOWAuuWvqOeeu+avoeipueeymOayvuebj+aWqei+l+W0reWxleiYuOagiOWNoOaImOermea5m+e7veaon+eroOW9sOa8s+W8oOaOjOa2qOadluS4iOW4kOi0puS7l+iDgOeYtOmanOaLm+aYreaJvuayvOi1teeFp+e9qeWFhuiCh+WPrOmBruaKmOWTsuibsOi+meiAhemUl+iUl+i/mea1meePjeaWn+ecn+eUhOegp+iHu+i0numSiOS+puaeleeWueiviumch+aMr+mVh+mYteiSuOaMo+edgeW+geeLsOS6ieaAlOaVtOaLr+ato+aUv1wiXSxcbltcImQ2NDBcIixcIuirpFwiLDM0LFwi6KyIXCIsMjddLFxuW1wiZDY4MFwiLFwi6Kyk6Kyl6KynXCIsMzAsXCLluKfnl4fpg5Hor4Hoip3mnp3mlK/lkLHonJjnn6XogqLohILmsYHkuYvnu4fogYznm7TmpI3mrpbmiaflgLzkvoTlnYDmjIfmraLotr7lj6rml6jnurjlv5fmjJrmjrfoh7Poh7Tnva7luJzls5nliLbmmbrnp6nnqJrotKjngpnnl5Tmu57msrvnqpLkuK3nm4Xlv6Dpkp/oobfnu4jnp43ogr/ph43ku7LkvJfoiJ/lkajlt57mtLLor4znsqXovbTogpjluJrlkpLnmrHlrpnmmLzpqqTnj6DmoKrom5vmnLHnjKror7jor5vpgJDnq7nng5vnha7mi4TnnqnlmLHkuLvokZfmn7Hliqnom4DotK7pk7jnrZFcIl0sXG5bXCJkNzQwXCIsXCLorYZcIiwzMSxcIuitp1wiLDQsXCLora1cIiwyNV0sXG5bXCJkNzgwXCIsXCLorodcIiwyNCxcIuiurOiuseiuu+ivh+ivkOivquiwieiwnuS9j+azqOelnempu+aKk+eIquaLveS4k+eglui9rOaSsOi1muevhuahqeW6hOijheWmhuaSnuWjrueKtuakjumUpei/vei1mOWdoOe8gOiwhuWHhuaNieaLmeWNk+ahjOeQouiMgemFjOWVhOedgOeBvOa1iuWFueWSqOi1hOWnv+a7i+a3hOWtnOe0q+S7lOexvea7k+WtkOiHqua4jeWtl+msg+ajlei4quWul+e7vOaAu+e6temCuei1sOWlj+aPjeenn+i2s+WNkuaXj+elluivhemYu+e7hOmSu+e6guWYtOmGieacgOe9quWwiumBteaYqOW3puS9kOafnuWBmuS9nOWdkOW6p1wiXSxcbltcImQ4NDBcIixcIuiwuFwiLDgsXCLosYLosYPosYTosYXosYjosYrosYvosY1cIiw3LFwi6LGW6LGX6LGY6LGZ6LGbXCIsNSxcIuixo1wiLDYsXCLosaxcIiw2LFwi6LG06LG16LG26LG36LG7XCIsNixcIuiyg+iyhOiyhuiyh1wiXSxcbltcImQ4ODBcIixcIuiyiOiyi+iyjVwiLDYsXCLospXospbospfosplcIiwyMCxcIuS6jeS4jOWFgOS4kOW7v+WNheS4leS6mOS4numssuWtrOWZqeS4qOemuuS4v+WMleS5h+WkreeIu+WNruawkOWbn+iDpOmml+avk+edvum8l+S4tuS6n+m8kOS5nOS5qeS6k+iKiOWtm+WVrOWYj+S7hOWOjeWOneWOo+WOpeWOrumdpei1neWMmuWPteWMpuWMruWMvui1nOWNpuWNo+WIguWIiOWIjuWIreWIs+WIv+WJgOWJjOWJnuWJoeWJnOiSr+WJveWKguWKgeWKkOWKk+WGgue9lOS6u+S7g+S7ieS7guS7qOS7oeS7q+S7nuS8m+S7s+S8ouS9pOS7teS8peS8p+S8ieS8q+S9nuS9p+aUuOS9muS9nVwiXSxcbltcImQ5NDBcIixcIuiyrlwiLDYyXSxcbltcImQ5ODBcIixcIuizrVwiLDMyLFwi5L2f5L2X5Lyy5Ly95L225L205L6R5L6J5L6D5L6P5L2+5L275L6q5L285L6s5L6U5L+m5L+o5L+q5L+F5L+a5L+j5L+c5L+R5L+f5L+45YCp5YGM5L+z5YCs5YCP5YCu5YCt5L++5YCc5YCM5YCl5YCo5YG+5YGD5YGV5YGI5YGO5YGs5YG75YKl5YKn5YKp5YK65YOW5YSG5YOt5YOs5YOm5YOu5YSH5YSL5Lud5rC95L2Y5L2l5L+O6b6g5rGG57G05YWu5be96buJ6aaY5YaB5aSU5Yu55YyN6KiH5YyQ5Yer5aSZ5YWV5Lqg5YWW5Lqz6KGu6KKk5Lq16ISU6KOS56aA5ay06KCD57645Yar5Yax5Ya95Ya8XCJdLFxuW1wiZGE0MFwiLFwi6LSOXCIsMTQsXCLotKDotZHotZLotZfotZ/otaXotajotanotarotazota7ota/otbHotbLotbhcIiw4LFwi6LaC6LaD6LaG6LaH6LaI6LaJ6LaMXCIsNCxcIui2kui2k+i2lVwiLDksXCLotqDotqFcIl0sXG5bXCJkYTgwXCIsXCLotqLotqRcIiwxMixcIui2sui2tui2t+i2uei2u+i2vei3gOi3gei3gui3hei3h+i3iOi3iei3iui3jei3kOi3kui3k+i3lOWHh+WGluWGouWGpeiuoOiupuiup+iuquiutOiuteiut+ivguivg+ivi+ivj+ivjuivkuivk+ivlOivluivmOivmeivnOivn+ivoOivpOivqOivqeivruivsOivs+ivtuivueivvOivv+iwgOiwguiwhOiwh+iwjOiwj+iwkeiwkuiwlOiwleiwluiwmeiwm+iwmOiwneiwn+iwoOiwoeiwpeiwp+iwquiwq+iwruiwr+iwsuiws+iwteiwtuWNqeWNuumYnemYoumYoemYsemYqumYvemYvOmZgumZiemZlOmZn+mZp+mZrOmZsumZtOmaiOmajemal+masOmCl+mCm+mCnemCmemCrOmCoemCtOmCs+mCtumCulwiXSxcbltcImRiNDBcIixcIui3lei3mOi3mei3nOi3oOi3oei3oui3pei3pui3p+i3qei3rei3rui3sOi3sei3sui3tOi3tui3vOi3vlwiLDYsXCLouIbouIfouIjouIvouI3ouI7ouJDouJHouJLouJPouJVcIiw3LFwi6Lig6Lih6LikXCIsNCxcIui4q+i4rei4sOi4sui4s+i4tOi4tui4t+i4uOi4u+i4vOi4vlwiXSxcbltcImRiODBcIixcIui4v+i5g+i5hei5hui5jFwiLDQsXCLouZNcIiw1LFwi6LmaXCIsMTEsXCLouafouajouarouavoua7oubHpgrjpgrDpg4/pg4Xpgr7pg5Dpg4Tpg4fpg5Ppg6bpg6Lpg5zpg5fpg5vpg6vpg6/pg77phITphKLphJ7phKPphLHphK/phLnphYPphYbliI3lpYLliqLliqzliq3lir7lk7/li5Dli5bli7Dlj5/nh67nn43lu7Tlh7Xlh7zprK/ljrblvIHnlZrlt6/lnYzlnqnlnqHlob7lorzlo4Xlo5HlnKnlnKzlnKrlnLPlnLnlnK7lnK/lnZzlnLvlnYLlnanlnoXlnavlnoblnbzlnbvlnajlna3lnbblnbPlnq3lnqTlnozlnrLln4/lnqflnrTlnpPlnqDln5Xln5jln5rln5nln5Llnrjln7Tln6/ln7jln6Tln51cIl0sXG5bXCJkYzQwXCIsXCLoubPoubXoubdcIiw0LFwi6Lm96Lm+6LqA6LqC6LqD6LqE6LqG6LqIXCIsNixcIui6kei6kui6k+i6lVwiLDYsXCLoup3oup9cIiwxMSxcIui6rei6rui6sOi6sei6s1wiLDYsXCLourtcIiw3XSxcbltcImRjODBcIixcIui7g1wiLDEwLFwi6LuPXCIsMjEsXCLloIvloI3ln73ln63loIDloJ7loJnloYTloKDloaXloazlooHloonloprlooDppqjpvJnmh7/oibnoib3oib/oio/oioroiqjoioToio7oipHoipfoipnoiqvoirjoir7oirDoi4joi4roi6Poipjoirfoiq7oi4voi4zoi4HoiqnoirToiqHoiqroip/oi4Toi47oiqToi6HojInoi7foi6TojI/ojIfoi5zoi7Toi5Loi5jojIzoi7voi5PojJHojJrojIbojJTojJXoi6Doi5XojJzojZHojZvojZzojIjojpLojLzojLTojLHojpvojZ7ojK/ojY/ojYfojYPojZ/ojYDojJfojaDojK3ojLrojLPojabojaVcIl0sXG5bXCJkZDQwXCIsXCLou6VcIiw2Ml0sXG5bXCJkZDgwXCIsXCLovKRcIiwzMixcIuiNqOiMm+iNqeiNrOiNquiNreiNruiOsOiNuOiOs+iOtOiOoOiOquiOk+iOnOiOheiNvOiOtuiOqeiNveiOuOiNu+iOmOiOnuiOqOiOuuiOvOiPgeiQgeiPpeiPmOWgh+iQmOiQi+iPneiPveiPluiQnOiQuOiQkeiQhuiPlOiPn+iQj+iQg+iPuOiPueiPquiPheiPgOiQpuiPsOiPoeiRnOiRkeiRmuiRmeiRs+iSh+iSiOiRuuiSieiRuOiQvOiRhuiRqeiRtuiSjOiSjuiQseiRreiTgeiTjeiTkOiTpuiSveiTk+iTiuiSv+iSuuiToOiSoeiSueiStOiSl+iTpeiTo+iUjOeUjeiUuOiTsOiUueiUn+iUulwiXSxcbltcImRlNDBcIixcIui9hVwiLDMyLFwi6L2q6L6A6L6M6L6S6L6d6L6g6L6h6L6i6L6k6L6l6L6m6L6n6L6q6L6s6L6t6L6u6L6v6L6y6L6z6L606L616L636L646L666L676L686L6/6L+A6L+D6L+GXCJdLFxuW1wiZGU4MFwiLFwi6L+JXCIsNCxcIui/j+i/kui/lui/l+i/mui/oOi/oei/o+i/p+i/rOi/r+i/sei/sui/tOi/tei/tui/uui/u+i/vOi/vui/v+mAh+mAiOmAjOmAjumAk+mAlemAmOiVluiUu+iTv+iTvOiVmeiViOiVqOiVpOiVnuiVuueeouiVg+iVsuiVu+iWpOiWqOiWh+iWj+iVueiWruiWnOiWheiWueiWt+iWsOiXk+iXgeiXnOiXv+iYp+iYheiYqeiYluiYvOW7vuW8iOWkvOWlgeiAt+WlleWlmuWlmOWMj+WwouWwpeWwrOWwtOaJjOaJquaKn+aKu+aLiuaLmuaLl+aLruaMouaLtuaMueaNi+aNg+aOreaPtuaNseaNuuaOjuaOtOaNreaOrOaOiuaNqeaOruaOvOaPsuaPuOaPoOaPv+aPhOaPnuaPjuaRkuaPhuaOvuaRheaRgeaQi+aQm+aQoOaQjOaQpuaQoeaRnuaShOaRreaSllwiXSxcbltcImRmNDBcIixcIumAmemAnOmAo+mApOmApemAp1wiLDUsXCLpgLBcIiw0LFwi6YC36YC56YC66YC96YC/6YGA6YGD6YGF6YGG6YGIXCIsNCxcIumBjumBlOmBlemBlumBmemBmumBnFwiLDUsXCLpgaTpgabpgafpganpgarpgavpgazpga9cIiw0LFwi6YG2XCIsNixcIumBvumCgVwiXSxcbltcImRmODBcIixcIumChOmChemChumCh+mCiemCiumCjFwiLDQsXCLpgpLpgpTpgpbpgpjpgprpgpzpgp7pgp/pgqDpgqTpgqXpgqfpgqjpgqnpgqvpgq3pgrLpgrfpgrzpgr3pgr/pg4Dmkbrmkrfmkrjmkpnmkrrmk4Dmk5Dmk5fmk6Tmk6LmlInmlKXmlK7lvIvlv5LnlJnlvJHljZ/lj7Hlj73lj6nlj6jlj7vlkJLlkJblkIblkYvlkZLlkZPlkZTlkZblkYPlkKHlkZflkZnlkKPlkLLlkoLlkpTlkbflkbHlkaTlkprlkpvlkoTlkbblkablkp3lk5Dlkq3lk4LlkrTlk5Llkqflkqblk5Plk5TlkbLlkqPlk5Xlkrvlkr/lk4zlk5nlk5rlk5zlkqnlkqrlkqTlk53lk4/lk57llJvlk6fllKDlk73llJTlk7PllKLllKPllI/llJHllKfllKrllafllo/llrXllYnlla3llYHllZXllL/llZDllLxcIl0sXG5bXCJlMDQwXCIsXCLpg4Lpg4Ppg4bpg4jpg4npg4vpg4zpg43pg5Lpg5Tpg5Xpg5bpg5jpg5npg5rpg57pg5/pg6Dpg6Ppg6Tpg6Xpg6npg6rpg6zpg67pg7Dpg7Hpg7Lpg7Ppg7Xpg7bpg7fpg7npg7rpg7vpg7zpg7/phIDphIHphIPphIVcIiwxOSxcIumEmumEm+mEnFwiXSxcbltcImUwODBcIixcIumEnemEn+mEoOmEoemEpFwiLDEwLFwi6YSw6YSyXCIsNixcIumEulwiLDgsXCLphYTllLfllZbllbXllbbllbfllLPllLDllZzllovll5LlloPllrHllrnllojlloHllp/llb7ll5bllpHllbvll5/llr3llr7llpTllpnll6rll7fll4nlmJ/ll5Hll6vll6zll5Tll6bll53ll4Tll6/ll6Xll7Lll7Pll4zll43ll6jll7Xll6TovpTlmJ7lmIjlmIzlmIHlmKTlmKPll77lmIDlmKflmK3lmZjlmLnlmZflmKzlmY3lmaLlmZnlmZzlmYzlmZTlmoblmaTlmbHlmavlmbvlmbzlmoXlmpPlmq/lm5Tlm5flm53lm6Hlm7Xlm6vlm7nlm7/lnITlnIrlnInlnJzluI/luJnluJTluJHluLHluLvluLxcIl0sXG5bXCJlMTQwXCIsXCLphYXphYfphYjphZHphZPphZTphZXphZbphZjphZnphZvphZzphZ/phaDphabphafphajphavpha3phbPphbrphbvphbzphoBcIiw0LFwi6YaG6YaI6YaK6YaO6YaP6YaTXCIsNixcIumGnFwiLDUsXCLphqRcIiw1LFwi6Yar6Yas6Yaw6Yax6Yay6Yaz6Ya26Ya36Ya46Ya56Ya7XCJdLFxuW1wiZTE4MFwiLFwi6Ya8XCIsMTAsXCLph4jph4vph5Dph5JcIiw5LFwi6YedXCIsOCxcIuW4t+W5hOW5lOW5m+W5nuW5oeWyjOWxuuWyjeWykOWyluWyiOWymOWymeWykeWymuWynOWyteWyouWyveWyrOWyq+WyseWyo+WzgeWyt+WzhOWzkuWzpOWzi+WzpeW0guW0g+W0p+W0puW0ruW0pOW0nuW0huW0m+W1mOW0vuW0tOW0veW1rOW1m+W1r+W1neW1q+W1i+W1iuW1qeW1tOW2guW2meW2neixs+W2t+W3heW9s+W9t+W+guW+h+W+ieW+jOW+leW+meW+nOW+qOW+reW+teW+vOihouW9oeeKreeKsOeKtOeKt+eKuOeLg+eLgeeLjueLjeeLkueLqOeLr+eLqeeLsueLtOeLt+eMgeeLs+eMg+eLulwiXSxcbltcImUyNDBcIixcIumHplwiLDYyXSxcbltcImUyODBcIixcIumIpVwiLDMyLFwi54u754yX54yT54yh54yK54ye54yd54yV54yi54y554yl54ys54y454yx542Q542N542X542g542s542v542+6Iib5aSl6aOn5aSk5aSC6aWj6aWnXCIsNSxcIumltOmlt+mlvemmgOmmhOmmh+mmiummjemmkOmmkemmk+mmlOmmleW6gOW6keW6i+W6luW6peW6oOW6ueW6teW6vuW6s+i1k+W7kuW7keW7m+W7qOW7quiGuuW/hOW/ieW/luW/j+aAg+W/ruaAhOW/oeW/pOW/vuaAheaAhuW/quW/reW/uOaAmeaAteaApuaAm+aAj+aAjeaAqeaAq+aAiuaAv+aAoeaBuOaBueaBu+aBuuaBglwiXSxcbltcImUzNDBcIixcIumJhlwiLDQ1LFwi6Ym1XCIsMTZdLFxuW1wiZTM4MFwiLFwi6YqGXCIsNyxcIumKj1wiLDI0LFwi5oGq5oG95oKW5oKa5oKt5oKd5oKD5oKS5oKM5oKb5oOs5oK75oKx5oOd5oOY5oOG5oOa5oK05oSg5oSm5oSV5oSj5oO05oSA5oSO5oSr5oWK5oW15oas5oaU5oan5oa35oeU5oe15b+d6Zqz6Zep6Zer6Zex6Zez6Ze16Ze26Ze86Ze+6ZiD6ZiE6ZiG6ZiI6ZiK6ZiL6ZiM6ZiN6ZiP6ZiS6ZiV6ZiW6ZiX6ZiZ6Zia5Lis54i/5oiV5rC15rGU5rGc5rGK5rKj5rKF5rKQ5rKU5rKM5rGo5rGp5rG05rG25rKG5rKp5rOQ5rOU5rKt5rO35rO45rOx5rOX5rKy5rOg5rOW5rO65rOr5rOu5rKx5rOT5rOv5rO+XCJdLFxuW1wiZTQ0MFwiLFwi6YqoXCIsNSxcIumKr1wiLDI0LFwi6YuJXCIsMzFdLFxuW1wiZTQ4MFwiLFwi6YupXCIsMzIsXCLmtLnmtKfmtIzmtYPmtYjmtIfmtITmtJnmtI7mtKvmtY3mtK7mtLXmtJrmtY/mtZLmtZTmtLPmtpHmta/mtp7mtqDmtZ7mtpPmtpTmtZzmtaDmtbzmtaPmuJrmt4fmt4Xmt57muI7mtr/mt6DmuJHmt6bmt53mt5nmuJbmtqvmuIzmtq7muKvmua7muY7muavmurLmuZ/muobmuZPmuZTmuLLmuKXmuYTmu5/murHmupjmu6DmvK3mu6LmuqXmuqfmur3murvmurfmu5fmurTmu4/muo/mu4Lmup/mvaLmvYbmvYfmvKTmvJXmu7nmvK/mvLbmvYvmvbTmvKrmvInmvKnmvonmvo3mvozmvbjmvbLmvbzmvbrmv5FcIl0sXG5bXCJlNTQwXCIsXCLpjIpcIiw1MSxcIumMv1wiLDEwXSxcbltcImU1ODBcIixcIumNilwiLDMxLFwi6Y2r5r+J5r6n5r655r625r+C5r+h5r+u5r+e5r+g5r+v54Ca54Cj54Cb54C554C154GP54Ge5a6A5a6E5a6V5a6T5a6l5a6455Sv6aqe5pC05a+k5a+u6KSw5a+w6LmH6KyH6L626L+T6L+V6L+l6L+u6L+k6L+p6L+m6L+z6L+o6YCF6YCE6YCL6YCm6YCR6YCN6YCW6YCh6YC16YC26YCt6YCv6YGE6YGR6YGS6YGQ6YGo6YGY6YGi6YGb5pq56YG06YG96YKC6YKI6YKD6YKL5b2Q5b2X5b2W5b2Y5bC75ZKr5bGQ5bGZ5a2x5bGj5bGm57685byq5byp5byt6Im05by86ay75bGu5aaB5aaD5aaN5aap5aaq5aajXCJdLFxuW1wiZTY0MFwiLFwi6Y2sXCIsMzQsXCLpjpBcIiwyN10sXG5bXCJlNjgwXCIsXCLpjqxcIiwyOSxcIumPi+mPjOmPjeWml+WniuWmq+WmnuWmpOWnkuWmsuWmr+Wnl+WmvuWoheWohuWnneWoiOWno+WnmOWnueWojOWoieWosuWotOWokeWoo+Wok+WpgOWpp+WpiuWpleWovOWpouWpteiDrOWqquWqm+Wpt+WpuuWqvuWrq+WqsuWrkuWrlOWquOWroOWro+WrseWrluWrpuWrmOWrnOWsieWsl+WsluWssuWst+WtgOWwleWwnOWtmuWtpeWts+WtkeWtk+Wtoumptempt+mpuOmpuumpv+mpvemqgOmqgemqhemqiOmqiumqkOmqkumqk+mqlumqmOmqm+mqnOmqnemqn+mqoOmqoumqo+mqpemqp+e6n+e6oee6o+e6pee6qOe6qVwiXSxcbltcImU3NDBcIixcIumPjlwiLDcsXCLpj5dcIiw1NF0sXG5bXCJlNzgwXCIsXCLpkI5cIiwzMixcIue6ree6sOe6vue7gOe7gee7gue7iee7i+e7jOe7kOe7lOe7l+e7m+e7oOe7oee7qOe7q+e7rue7r+e7see7sue8jee7tue7uue7u+e7vue8gee8gue8g+e8h+e8iOe8i+e8jOe8j+e8kee8kue8l+e8mee8nOe8m+e8n+e8oVwiLDYsXCLnvKrnvKvnvKznvK3nvK9cIiw0LFwi57y15bm655W/5beb55S+6YKV546O546R546u546i546f54+P54+C54+R5463546z54+A54+J54+I54+l54+Z6aG855CK54+p54+n54+e546654+y55CP55Cq55Gb55Cm55Cl55Co55Cw55Cu55CsXCJdLFxuW1wiZTg0MFwiLFwi6ZCvXCIsMTQsXCLpkL9cIiw0MyxcIumRrOmRremRrumRr1wiXSxcbltcImU4ODBcIixcIumRsFwiLDIwLFwi6ZKR6ZKW6ZKY6ZOH6ZOP6ZOT6ZOU6ZOa6ZOm6ZO76ZSc6ZSg55Cb55Ca55GB55Gc55GX55GV55GZ55G355Gt55G+55Kc55KO55KA55KB55KH55KL55Ke55Ko55Kp55KQ55Kn55OS55K66Z+q6Z+r6Z+s5p2M5p2T5p2e5p2I5p2p5p6l5p6H5p2q5p2z5p6Y5p6n5p215p6o5p6e5p6t5p6L5p235p285p+w5qCJ5p+Y5qCK5p+p5p6w5qCM5p+Z5p615p+a5p6z5p+d5qCA5p+D5p645p+i5qCO5p+B5p+95qCy5qCz5qGg5qGh5qGO5qGi5qGE5qGk5qKD5qCd5qGV5qGm5qGB5qGn5qGA5qC+5qGK5qGJ5qCp5qK15qKP5qG05qG35qKT5qGr5qOC5qWu5qO85qSf5qSg5qO5XCJdLFxuW1wiZTk0MFwiLFwi6ZSn6ZSz6ZS96ZWD6ZWI6ZWL6ZWV6ZWa6ZWg6ZWu6ZW06ZW16ZW3XCIsNyxcIumWgFwiLDQyXSxcbltcImU5ODBcIixcIumWq1wiLDMyLFwi5qSk5qOw5qSL5qSB5qWX5qOj5qSQ5qWx5qS55qWg5qWC5qWd5qaE5qWr5qaA5qaY5qW45qS05qeM5qaH5qaI5qeO5qaJ5qWm5qWj5qW55qab5qan5qa75qar5qat5qeU5qax5qeB5qeK5qef5qaV5qeg5qaN5qe/5qiv5qet5qiX5qiY5qml5qey5qmE5qi+5qqg5qmQ5qmb5qi15qqO5qm55qi95qio5qmY5qm85qqR5qqQ5qqp5qqX5qqr54y3542S5q6B5q6C5q6H5q6E5q6S5q6T5q6N5q6a5q6b5q6h5q6q6L2r6L2t6L2x6L2y6L2z6L216L226L246L236L256L266L286L2+6L6B6L6C6L6E6L6H6L6LXCJdLFxuW1wiZWE0MFwiLFwi6ZeMXCIsMjcsXCLpl6zpl7/pmIfpmJPpmJjpmJvpmJ7pmKDpmKNcIiw2LFwi6Zir6Zis6Zit6Ziv6Ziw6Zi36Zi46Zi56Zi66Zi+6ZmB6ZmD6ZmK6ZmO6ZmP6ZmR6ZmS6ZmT6ZmW6ZmXXCJdLFxuW1wiZWE4MFwiLFwi6ZmY6ZmZ6Zma6Zmc6Zmd6Zme6Zmg6Zmj6Zml6Zmm6Zmr6ZmtXCIsNCxcIumZs+mZuFwiLDEyLFwi6ZqH6ZqJ6ZqK6L6N6L6O6L6P6L6Y6L6a6LuO5oiL5oiX5oib5oif5oii5oih5oil5oik5ois6Ien55Ov55O055O/55SP55SR55ST5pS05peu5pev5pew5piK5piZ5p2y5piD5piV5piA54KF5pu35pid5pi05pix5pi25pi16ICG5pmf5pmU5pmB5pmP5pmW5pmh5pmX5pm35pqE5pqM5pqn5pqd5pq+5pub5puc5pum5pup6LSy6LSz6LS26LS76LS96LWA6LWF6LWG6LWI6LWJ6LWH6LWN6LWV6LWZ6KeH6KeK6KeL6KeM6KeO6KeP6KeQ6KeR54mu54qf54md54mm54mv54m+54m/54qE54qL54qN54qP54qS5oyI5oyy5o6wXCJdLFxuW1wiZWI0MFwiLFwi6ZqM6ZqO6ZqR6ZqS6ZqT6ZqV6ZqW6Zqa6Zqb6ZqdXCIsOSxcIumaqFwiLDcsXCLpmrHpmrLpmrTpmrXpmrfpmrjpmrrpmrvpmr/pm4Lpm4Ppm4jpm4rpm4vpm5Dpm5Hpm5Ppm5Tpm5ZcIiw5LFwi6ZuhXCIsNixcIumbq1wiXSxcbltcImViODBcIixcIumbrOmbrembrumbsOmbsembsumbtOmbtembuOmbuumbu+mbvOmbvembv+mcgumcg+mchemciumci+mcjOmckOmckemckumclOmclemcl1wiLDQsXCLpnJ3pnJ/pnKDmkL/mk5jogITmr6rmr7Pmr73mr7Xmr7nmsIXmsIfmsIbmsI3msJXmsJjmsJnmsJrmsKHmsKnmsKTmsKrmsLLmlLXmlZXmlavniY3niZLniZbniLDomaLliJbogp/ogpzogpPogrzmnIrogr3ogrHogqvogq3ogrTogrfog6fog6jog6nog6rog5vog4Log4Tog5nog43og5fmnJDog53og6vog7Hog7Tog63ohI3ohI7og7Log7zmnJXohJLosZrohLbohJ7ohKzohJjohLLohYjohYzohZPohbTohZnohZrohbHohaDohanohbzohb3oha3ohafloY3lqrXohojohoLohpHmu5XohqPohqroh4zmnKboh4rohrtcIl0sXG5bXCJlYzQwXCIsXCLpnKFcIiw4LFwi6Zyr6Zys6Zyu6Zyv6Zyx6ZyzXCIsNCxcIumcuumcu+mcvOmcvemcv1wiLDE4LFwi6Z2U6Z2V6Z2X6Z2Y6Z2a6Z2c6Z2d6Z2f6Z2j6Z2k6Z2m6Z2n6Z2o6Z2qXCIsN10sXG5bXCJlYzgwXCIsXCLpnbLpnbXpnbdcIiw0LFwi6Z29XCIsNyxcIumehlwiLDQsXCLpnozpno7pno/pnpDpnpPpnpXpnpbpnpfpnplcIiw0LFwi6IeB6Iam5qyk5qy35qy55q2D5q2G5q2Z6aOR6aOS6aOT6aOV6aOZ6aOa5q6z5b2A5q+C6Kez5paQ6b2R5paT5pa85peG5peE5peD5peM5peO5peS5peW54KA54Kc54KW54Kd54K754OA54K354Kr54Kx54Oo54OK54SQ54ST54SW54Sv54Sx54Wz54Wc54Wo54WF54Wy54WK54W454W654aY54az54a154ao54ag54eg54eU54en54e554id54io54Gs54SY54Wm54a55oi+5oi95omD5omI5omJ56S756WA56WG56WJ56Wb56Wc56WT56Wa56Wi56WX56Wg56Wv56Wn56W656aF56aK56aa56an56az5b+R5b+QXCJdLFxuW1wiZWQ0MFwiLFwi6Z6e6Z6f6Z6h6Z6i6Z6kXCIsNixcIumerOmerumesOmesemes+metVwiLDQ2XSxcbltcImVkODBcIixcIumfpOmfpemfqOmfrlwiLDQsXCLpn7Tpn7dcIiwyMyxcIuaAvOaBneaBmuaBp+aBgeaBmeaBo+aCq+aEhuaEjeaFneaGqeaGneaHi+aHkeaIhuiCgOiBv+ayk+aztua3vOeftuefuOeggOegieegl+egmOegkeaWq+egreegnOegneegueeguuegu+egn+egvOegpeegrOego+egqeehjuehreehluehl+egpuehkOehh+ehjOehqueim+eik+eimueih+einOeioeeio+eisueiueeipeejlOejmeejieejrOejsuekheejtOekk+ekpOeknuektOm+m+m7uem7u+m7vOebseechOecjeebueech+eciOecmuecouecmeecreecpuecteecuOedkOedkeedh+edg+edmuedqFwiXSxcbltcImVlNDBcIixcIumgj1wiLDYyXSxcbltcImVlODBcIixcIumhjlwiLDMyLFwi552i552l552/556N5529556A556M556R556f556g556w5561556955S655WA55WO55WL55WI55Wb55Wy55W555aD572Y572h572f6KmI572o5720572x5725576B572+55uN55ul6KCy6ZKF6ZKG6ZKH6ZKL6ZKK6ZKM6ZKN6ZKP6ZKQ6ZKU6ZKX6ZKV6ZKa6ZKb6ZKc6ZKj6ZKk6ZKr6ZKq6ZKt6ZKs6ZKv6ZKw6ZKy6ZK06ZK2XCIsNCxcIumSvOmSvemSv+mThOmTiFwiLDYsXCLpk5Dpk5Hpk5Lpk5Xpk5bpk5fpk5npk5jpk5vpk57pk5/pk6Dpk6Lpk6Tpk6Xpk6fpk6jpk6pcIl0sXG5bXCJlZjQwXCIsXCLpoa9cIiw1LFwi6aKL6aKO6aKS6aKV6aKZ6aKj6aKoXCIsMzcsXCLpo4/po5Dpo5Tpo5bpo5fpo5vpo5zpo53po6BcIiw0XSxcbltcImVmODBcIixcIumjpemjpumjqVwiLDMwLFwi6ZOp6ZOr6ZOu6ZOv6ZOz6ZO06ZO16ZO36ZO56ZO86ZO96ZO/6ZSD6ZSC6ZSG6ZSH6ZSJ6ZSK6ZSN6ZSO6ZSP6ZSSXCIsNCxcIumUmOmUm+mUnemUnumUn+mUoumUqumUq+mUqemUrOmUsemUsumUtOmUtumUt+mUuOmUvOmUvumUv+mVgumUtemVhOmVhemVhumViemVjOmVjumVj+mVkumVk+mVlOmVlumVl+mVmOmVmemVm+mVnumVn+mVnemVoemVoumVpFwiLDgsXCLpla/plbHplbLplbPplLrnn6fnn6zpm4nnp5Xnp63np6Pnp6vnqIbltYfnqIPnqILnqJ7nqJRcIl0sXG5bXCJmMDQwXCIsXCLppIhcIiw0LFwi6aSO6aSP6aSRXCIsMjgsXCLppK9cIiwyNl0sXG5bXCJmMDgwXCIsXCLppYpcIiw5LFwi6aWWXCIsMTIsXCLppaTppabppbPppbjppbnppbvppb7ppoLppoPpponnqLnnqLfnqZHpu4/ppqXnqbDnmojnmo7nmpPnmpnnmqTnk57nk6DnlKzpuKDpuKLpuKhcIiw0LFwi6biy6bix6bi26bi46bi36bi56bi66bi+6bmB6bmC6bmE6bmG6bmH6bmI6bmJ6bmL6bmM6bmO6bmR6bmV6bmX6bma6bmb6bmc6bme6bmj6bmmXCIsNixcIum5sem5rem5s+eWkueWlOeWlueWoOeWneeWrOeWo+eWs+eWtOeWuOeXhOeWseeWsOeXg+eXgueXlueXjeeXo+eXqOeXpueXpOeXq+eXp+eYg+eXseeXvOeXv+eYkOeYgOeYheeYjOeYl+eYiueYpeeYmOeYleeYmVwiXSxcbltcImYxNDBcIixcIummjOmmjummmlwiLDEwLFwi6aam6aan6aapXCIsNDddLFxuW1wiZjE4MFwiLFwi6aeZXCIsMzIsXCLnmJvnmLznmKLnmKDnmYDnmK3nmLDnmL/nmLXnmYPnmL7nmLPnmY3nmZ7nmZTnmZznmZbnmavnma/nv4rnq6bnqbjnqbnnqoDnqobnqojnqpXnqqbnqqDnqqznqqjnqq3nqrPooaTooanoobLoob3oob/oooLooqLoo4boorfoorzoo4noo6Loo47oo6Poo6Xoo7HopJroo7zoo6joo77oo7DopKHopJnopJPopJvopIropLTopKvopLbopYHopabopbvnlovog6XnmrLnmrTnn5zogJLogJTogJbogJzogKDogKLogKXogKbogKfogKnogKjogLHogIvogLXogYPogYbogY3ogZLoganogbHopoPpobjpooDpooNcIl0sXG5bXCJmMjQwXCIsXCLpp7pcIiw2Ml0sXG5bXCJmMjgwXCIsXCLpqLlcIiwzMixcIumiiemijOmijemij+milOmimumim+minumin+mioemioumipemipuiZjeiZlOiZrOiZruiZv+iZuuiZvOiZu+iaqOiajeiai+iarOianeiap+iao+iaquiak+iaqeiatuibhOiateibjuiasOiauuiaseiar+ibieibj+iatOibqeibseibsuibreibs+ibkOick+ibnuibtOibn+ibmOibkeicg+ich+ibuOiciOiciuicjeicieico+icu+icnuicpeicruicmuicvuidiOictOicseicqeict+icv+ieguicouidveidvuidu+idoOidsOidjOidruiei+idk+ido+idvOidpOidmeidpeiek+ier+ieqOifklwiXSxcbltcImYzNDBcIixcIumpmlwiLDE3LFwi6amy6aqD6aqJ6aqN6aqO6aqU6aqV6aqZ6aqm6aqpXCIsNixcIumqsumqs+mqtOmqtemquemqu+mqvemqvumqv+mrg+mrhOmrhlwiLDQsXCLpq43pq47pq4/pq5Dpq5Lpq5Tpq5Xpq5bpq5fpq5npq5rpq5vpq5xcIl0sXG5bXCJmMzgwXCIsXCLpq53pq57pq6Dpq6Lpq6Ppq6Tpq6Xpq6fpq6jpq6npq6rpq6zpq67pq7BcIiw4LFwi6au66au8XCIsNixcIumshOmshemshuifhuieiOieheiereiel+ieg+ieq+ifpeierOieteies+ifi+ifk+ieveifkeifgOifiuifm+ifquifoOifruigluigk+ifvuigiuigm+igoeigueigvOe8tue9gue9hOe9heiIkOeruuerveesiOesg+eshOesleesiuesq+esj+eth+esuOesquesmeesruesseesoOespeespOess+esvuesnuetmOetmuetheetteetjOetneetoOetruetu+etouetsuetseeukOeupueup+euuOeurOeuneeuqOeuheeuqueunOeuoueuq+eutOevkeevgeevjOevneevmuevpeevpuevquewjOevvuevvOewj+ewluewi1wiXSxcbltcImY0NDBcIixcIumsh+msiVwiLDUsXCLprJDprJHprJLprJRcIiwxMCxcIumsoOmsoemsoumspFwiLDEwLFwi6ayw6ayx6ayzXCIsNyxcIumsvemsvumsv+mtgOmthumtiumti+mtjOmtjumtkOmtkumtk+mtlVwiLDVdLFxuW1wiZjQ4MFwiLFwi6a2bXCIsMzIsXCLnsJ/nsKrnsKbnsLjnsYHnsYDoh77oiIHoiILoiIToh6zooYToiKHoiKLoiKPoiK3oiK/oiKjoiKvoiLjoiLvoiLPoiLToiL7oiYToiYnoiYvoiY/oiZroiZ/oiajoob7oooXooojoo5joo5/opZ7nvp3nvp/nvqfnvq/nvrDnvrLnsbzmlYnnspHnsp3nspznsp7nsqLnsrLnsrznsr3ns4Hns4fns4zns43ns4jns4Xns5fns6joia7mmqjnvr/nv47nv5Xnv6Xnv6Hnv6bnv6nnv67nv7Pns7jntbfntqbntq7nuYfnupvpurjpurTotbPotoTotpTotpHotrHotafota3osYfosYnphYrphZDphY7phY/phaRcIl0sXG5bXCJmNTQwXCIsXCLprbxcIiw2Ml0sXG5bXCJmNTgwXCIsXCLprrtcIiwzMixcIumFoumFoemFsOmFqemFr+mFvemFvumFsumFtOmFuemGjOmGhemGkOmGjemGkemGoumGo+mGqumGremGrumGr+mGtemGtOmGuuixlem5vui2uOi3q+i4hei5mei5qei2tei2v+i2vOi2uui3hOi3lui3l+i3mui3nui3jui3j+i3m+i3hui3rOi3t+i3uOi3o+i3uei3u+i3pOi4iei3vei4lOi4nei4n+i4rOi4rui4o+i4r+i4uui5gOi4uei4tei4vei4sei5iei5gei5gui5kei5kui5iui5sOi5tui5vOi5r+i5tOi6hei6j+i6lOi6kOi6nOi6nuixuOiyguiyiuiyheiymOiylOaWm+inluinnuinmuinnFwiXSxcbltcImY2NDBcIixcIumvnFwiLDYyXSxcbltcImY2ODBcIixcIumwm1wiLDMyLFwi6Kel6Ker6Kev6Ki+6Kym6Z2T6Zup6Zuz6Zuv6ZyG6ZyB6ZyI6ZyP6ZyO6Zyq6Zyt6Zyw6Zy+6b6A6b6D6b6FXCIsNSxcIum+jOm7vum8i+m8jemauemavOmavembjumbkueev+mboOmKjumKrumLiOmMvumNqumPiumOj+mQvumRq+mxv+mygumyhemyhumyh+myiOeoo+myi+myjumykOmykemykumylOmylemymumym+mynlwiLDUsXCLpsqVcIiw0LFwi6bKr6bKt6bKu6bKwXCIsNyxcIumyuumyu+myvOmyvemzhOmzhemzhumzh+mziumzi1wiXSxcbltcImY3NDBcIixcIumwvFwiLDYyXSxcbltcImY3ODBcIixcIumxu+mxvemxvumygOmyg+myhOmyiemyiumyjOmyj+myk+mylumyl+mymOmymemynemyqumyrOmyr+myuemyvlwiLDQsXCLps4jps4nps5Hps5Lps5rps5vps6Dps6Hps4xcIiw0LFwi6bOT6bOU6bOV6bOX6bOY6bOZ6bOc6bOd6bOf6bOi6Z286Z6F6Z6R6Z6S6Z6U6Z6v6Z6r6Z6j6Z6y6Z606aqx6aqw6aq36bmY6aq26aq66aq86auB6auA6auF6auC6auL6auM6auR6a2F6a2D6a2H6a2J6a2I6a2N6a2R6aOo6aSN6aSu6aWV6aWU6auf6auh6aum6auv6aur6au76aut6au56ayI6ayP6ayT6ayf6ayj6bq96bq+57i76bqC6bqH6bqI6bqL6bqS6Y+W6bqd6bqf6bub6buc6bud6bug6buf6bui6bup6bun6bul6buq6buv6byi6bys6byv6by56by36by96by+6b2EXCJdLFxuW1wiZjg0MFwiLFwi6bOjXCIsNjJdLFxuW1wiZjg4MFwiLFwi6bSiXCIsMzJdLFxuW1wiZjk0MFwiLFwi6bWDXCIsNjJdLFxuW1wiZjk4MFwiLFwi6baCXCIsMzJdLFxuW1wiZmE0MFwiLFwi6bajXCIsNjJdLFxuW1wiZmE4MFwiLFwi6beiXCIsMzJdLFxuW1wiZmI0MFwiLFwi6biDXCIsMjcsXCLpuKTpuKfpuK7puLDpuLTpuLvpuLzpuYDpuY3puZDpuZLpuZPpuZTpuZbpuZnpuZ3puZ/puaDpuaHpuaLpuaXpua7pua/pubLpubRcIiw5LFwi6bqAXCJdLFxuW1wiZmI4MFwiLFwi6bqB6bqD6bqE6bqF6bqG6bqJ6bqK6bqMXCIsNSxcIum6lFwiLDgsXCLpup7puqBcIiw1LFwi6bqn6bqo6bqp6bqqXCJdLFxuW1wiZmM0MFwiLFwi6bqrXCIsOCxcIum6tem6tum6t+m6uem6uum6vOm6v1wiLDQsXCLpu4Xpu4bpu4fpu4jpu4rpu4vpu4zpu5Dpu5Lpu5Ppu5Xpu5bpu5fpu5npu5rpu57pu6Hpu6Ppu6Tpu6bpu6jpu6vpu6zpu63pu67pu7BcIiw4LFwi6bu66bu96bu/XCIsNl0sXG5bXCJmYzgwXCIsXCLpvIZcIiw0LFwi6byM6byP6byR6byS6byU6byV6byW6byY6byaXCIsNSxcIum8oem8o1wiLDgsXCLpvK3pvK7pvLDpvLFcIl0sXG5bXCJmZDQwXCIsXCLpvLJcIiw0LFwi6by46by66by86by/XCIsNCxcIum9hVwiLDEwLFwi6b2SXCIsMzhdLFxuW1wiZmQ4MFwiLFwi6b25XCIsNSxcIum+gem+gum+jVwiLDExLFwi6b6c6b6d6b6e6b6hXCIsNCxcIu+krO+lue+mle+np++nsVwiXSxcbltcImZlNDBcIixcIu+ojO+oje+oju+oj++oke+ok++olO+omO+on++ooO+ooe+oo++opO+op++oqO+oqVwiXVxuXVxuIiwibW9kdWxlLmV4cG9ydHM9W1xuW1wiMFwiLFwiXFx1MDAwMFwiLDEyN10sXG5bXCI4MTQxXCIsXCLqsILqsIPqsIXqsIbqsItcIiw0LFwi6rCY6rCe6rCf6rCh6rCi6rCj6rClXCIsNixcIuqwruqwsuqws+qwtFwiXSxcbltcIjgxNjFcIixcIuqwteqwtuqwt+qwuuqwu+qwveqwvuqwv+qxgVwiLDksXCLqsYzqsY5cIiw1LFwi6rGVXCJdLFxuW1wiODE4MVwiLFwi6rGW6rGX6rGZ6rGa6rGb6rGdXCIsMTgsXCLqsbLqsbPqsbXqsbbqsbnqsbtcIiw0LFwi6rKC6rKH6rKI6rKN6rKO6rKP6rKR6rKS6rKT6rKVXCIsNixcIuqynuqyolwiLDUsXCLqsqvqsq3qsq7qsrFcIiw2LFwi6rK66rK+6rK/6rOA6rOC6rOD6rOF6rOG6rOH6rOJ6rOK6rOL6rONXCIsNyxcIuqzluqzmFwiLDcsXCLqs6Lqs6Pqs6Xqs6bqs6nqs6vqs63qs67qs7Lqs7Tqs7dcIiw0LFwi6rO+6rO/6rSB6rSC6rSD6rSF6rSHXCIsNCxcIuq0juq0kOq0kuq0k1wiXSxcbltcIjgyNDFcIixcIuq0lOq0leq0luq0l+q0meq0muq0m+q0neq0nuq0n+q0oVwiLDcsXCLqtKrqtKvqtK5cIiw1XSxcbltcIjgyNjFcIixcIuq0tuq0t+q0ueq0uuq0u+q0vVwiLDYsXCLqtYbqtYjqtYpcIiw1LFwi6rWR6rWS6rWT6rWV6rWW6rWXXCJdLFxuW1wiODI4MVwiLFwi6rWZXCIsNyxcIuq1ouq1pFwiLDcsXCLqta7qta/qtbHqtbLqtbfqtbjqtbnqtbrqtb7qtoDqtoNcIiw0LFwi6raK6raL6raN6raO6raP6raRXCIsMTAsXCLqtp5cIiw1LFwi6ralXCIsMTcsXCLqtrhcIiw3LFwi6reC6reD6reF6reG6reH6reJXCIsNixcIuq3kuq3lFwiLDcsXCLqt53qt57qt5/qt6Hqt6Lqt6Pqt6VcIiwxOF0sXG5bXCI4MzQxXCIsXCLqt7rqt7vqt73qt77quIJcIiw1LFwi6riK6riM6riOXCIsNSxcIuq4lVwiLDddLFxuW1wiODM2MVwiLFwi6ridXCIsMTgsXCLquLLquLPquLXquLbquLnquLvquLxcIl0sXG5bXCI4MzgxXCIsXCLquL3quL7quL/quYLquYTquYfquYjquYnquYvquY/quZHquZLquZPquZXquZdcIiw0LFwi6rme6rmi6rmj6rmk6rmm6rmn6rmq6rmr6rmt6rmu6rmv6rmxXCIsNixcIuq5uuq5vlwiLDUsXCLquoZcIiw1LFwi6rqNXCIsNDYsXCLqur/qu4Hqu4Lqu4Pqu4VcIiw2LFwi6ruO6ruSXCIsNSxcIuq7muq7m+q7nVwiLDhdLFxuW1wiODQ0MVwiLFwi6rum6run6rup6ruq6rus6ruuXCIsNSxcIuq7teq7tuq7t+q7ueq7uuq7u+q7vVwiLDhdLFxuW1wiODQ2MVwiLFwi6ryG6ryJ6ryK6ryL6ryM6ryO6ryP6ryRXCIsMThdLFxuW1wiODQ4MVwiLFwi6rykXCIsNyxcIuq8ruq8r+q8seq8s+q8tVwiLDYsXCLqvL7qvYDqvYTqvYXqvYbqvYfqvYpcIiw1LFwi6r2RXCIsMTAsXCLqvZ5cIiw1LFwi6r2mXCIsMTgsXCLqvbpcIiw1LFwi6r6B6r6C6r6D6r6F6r6G6r6H6r6JXCIsNixcIuq+kuq+k+q+lOq+llwiLDUsXCLqvp1cIiwyNixcIuq+uuq+u+q+veq+vlwiXSxcbltcIjg1NDFcIixcIuq+v+q/gVwiLDUsXCLqv4rqv4zqv49cIiw0LFwi6r+VXCIsNixcIuq/nVwiLDRdLFxuW1wiODU2MVwiLFwi6r+iXCIsNSxcIuq/qlwiLDUsXCLqv7Lqv7Pqv7Xqv7bqv7fqv7lcIiw2LFwi64CC64CDXCJdLFxuW1wiODU4MVwiLFwi64CFXCIsNixcIuuAjeuAjuuAj+uAkeuAkuuAk+uAlVwiLDYsXCLrgJ5cIiw5LFwi64CpXCIsMjYsXCLrgYbrgYfrgYnrgYvrgY3rgY/rgZDrgZHrgZLrgZbrgZjrgZrrgZvrgZzrgZ5cIiwyOSxcIuuBvuuBv+uCgeuCguuCg+uChVwiLDYsXCLrgo7rgpDrgpJcIiw1LFwi64Kb64Kd64Ke64Kj64KkXCJdLFxuW1wiODY0MVwiLFwi64Kl64Km64Kn64Kq64Kw64Ky64K264K364K564K664K764K9XCIsNixcIuuDhuuDilwiLDUsXCLrg5JcIl0sXG5bXCI4NjYxXCIsXCLrg5Prg5Xrg5brg5frg5lcIiw2LFwi64Oh64Oi64Oj64Ok64OmXCIsMTBdLFxuW1wiODY4MVwiLFwi64OxXCIsMjIsXCLrhIrrhI3rhI7rhI/rhJHrhJTrhJXrhJbrhJfrhJrrhJ5cIiw0LFwi64Sm64Sn64Sp64Sq64Sr64StXCIsNixcIuuEtuuEulwiLDUsXCLrhYLrhYPrhYXrhYbrhYfrhYlcIiw2LFwi64WS64WT64WW64WX64WZ64Wa64Wb64Wd64We64Wf64WhXCIsMjIsXCLrhbrrhbvrhb3rhb7rhb/rhoHrhoNcIiw0LFwi64aK64aM64aO64aP64aQ64aR64aV64aW64aX64aZ64aa64ab64adXCJdLFxuW1wiODc0MVwiLFwi64aeXCIsOSxcIuuGqVwiLDE1XSxcbltcIjg3NjFcIixcIuuGuVwiLDE4LFwi64eN64eO64eP64eR64eS64eT64eVXCJdLFxuW1wiODc4MVwiLFwi64eWXCIsNSxcIuuHnuuHoFwiLDcsXCLrh6rrh6vrh63rh67rh6/rh7FcIiw3LFwi64e664e864e+XCIsNSxcIuuIhuuIh+uIieuIiuuIjVwiLDYsXCLriJbriJjriJpcIiw1LFwi64ihXCIsMTgsXCLriLVcIiw2LFwi64i9XCIsMjYsXCLriZnriZrriZvriZ3riZ7riZ/riaFcIiw2LFwi64mqXCIsNF0sXG5bXCI4ODQxXCIsXCLria9cIiw0LFwi64m2XCIsNSxcIuuJvVwiLDYsXCLriobriofriojriopcIiw0XSxcbltcIjg4NjFcIixcIuuKj+uKkuuKk+uKleuKluuKl+uKm1wiLDQsXCLriqLriqTriqfriqjriqnriqvriq3riq7riq/rirHrirLrirPrirXrirbrirdcIl0sXG5bXCI4ODgxXCIsXCLrirhcIiwxNSxcIuuLiuuLi+uLjeuLjuuLj+uLkeuLk1wiLDQsXCLri5rri5zri57ri5/ri6Dri6Hri6Pri6fri6nri6rri7Dri7Hri7Lri7bri7zri73ri77rjILrjIPrjIXrjIbrjIfrjIlcIiw2LFwi64yS64yWXCIsNSxcIuuMnVwiLDU0LFwi642X642Z642a642d642g642h642i642jXCJdLFxuW1wiODk0MVwiLFwi642m642o642q642s642t642v642y642z6421642264236425XCIsNixcIuuOguuOhlwiLDUsXCLrjo1cIl0sXG5bXCI4OTYxXCIsXCLrjo7rjo/rjpHrjpLrjpPrjpVcIiwxMCxcIuuOolwiLDUsXCLrjqnrjqrrjqvrjq1cIl0sXG5bXCI4OTgxXCIsXCLrjq5cIiwyMSxcIuuPhuuPh+uPieuPiuuPjeuPj+uPkeuPkuuPk+uPluuPmOuPmuuPnOuPnuuPn+uPoeuPouuPo+uPpeuPpuuPp+uPqVwiLDE4LFwi64+9XCIsMTgsXCLrkJFcIiw2LFwi65CZ65Ca65Cb65Cd65Ce65Cf65ChXCIsNixcIuuQquuQrFwiLDcsXCLrkLVcIiwxNV0sXG5bXCI4YTQxXCIsXCLrkYVcIiwxMCxcIuuRkuuRk+uRleuRluuRl+uRmVwiLDYsXCLrkaLrkaTrkaZcIl0sXG5bXCI4YTYxXCIsXCLrkadcIiw0LFwi65GtXCIsMTgsXCLrkoHrkoJcIl0sXG5bXCI4YTgxXCIsXCLrkoNcIiw0LFwi65KJXCIsMTksXCLrkp5cIiw1LFwi65Kl65Km65Kn65Kp65Kq65Kr65KtXCIsNyxcIuuStuuSuOuSulwiLDUsXCLrk4Hrk4Lrk4Prk4Xrk4brk4frk4lcIiw2LFwi65OR65OS65OT65OU65OWXCIsNSxcIuuTnuuTn+uToeuTouuTpeuTp1wiLDQsXCLrk67rk7Drk7JcIiw1LFwi65O5XCIsMjYsXCLrlJbrlJfrlJnrlJrrlJ1cIl0sXG5bXCI4YjQxXCIsXCLrlJ5cIiw1LFwi65Sm65SrXCIsNCxcIuuUsuuUs+uUteuUtuuUt+uUuVwiLDYsXCLrlYLrlYZcIl0sXG5bXCI4YjYxXCIsXCLrlYfrlYjrlYnrlYrrlY7rlY/rlZHrlZLrlZPrlZVcIiw2LFwi65We65WiXCIsOF0sXG5bXCI4YjgxXCIsXCLrlatcIiw1MixcIuuWouuWo+uWpeuWpuuWp+uWqeuWrOuWreuWruuWr+uWsuuWtlwiLDQsXCLrlr7rlr/rl4Hrl4Lrl4Prl4VcIiw2LFwi65eO65eSXCIsNSxcIuuXmVwiLDE4LFwi65etXCIsMThdLFxuW1wiOGM0MVwiLFwi65iAXCIsMTUsXCLrmJLrmJPrmJXrmJbrmJfrmJlcIiw0XSxcbltcIjhjNjFcIixcIuuYnlwiLDYsXCLrmKZcIiw1LFwi65itXCIsNixcIuuYtVwiLDVdLFxuW1wiOGM4MVwiLFwi65i7XCIsMTIsXCLrmYlcIiwyNixcIuuZpeuZpuuZp+uZqVwiLDUwLFwi65qe65qf65qh65qi65qj65qlXCIsNSxcIuuareuaruuar+uasOuaslwiLDE2XSxcbltcIjhkNDFcIixcIuubg1wiLDE2LFwi65uVXCIsOF0sXG5bXCI4ZDYxXCIsXCLrm55cIiwxNyxcIuubseubsuubs+ubteubtuubt+ubueubulwiXSxcbltcIjhkODFcIixcIuubu1wiLDQsXCLrnILrnIPrnITrnIZcIiwzMyxcIuucquucq+ucreucruucsVwiLDYsXCLrnLrrnLxcIiw3LFwi652F652G652H652J652K652L652NXCIsNixcIuudllwiLDksXCLrnaHrnaLrnaPrnaXrnabrnafrnalcIiw2LFwi652y65206522XCIsNSxcIuudvuudv+uegeueguueg+uehVwiLDYsXCLrno7rnpPrnpTrnpXrnprrnpvrnp3rnp5cIl0sXG5bXCI4ZTQxXCIsXCLrnp/rnqFcIiw2LFwi656q656uXCIsNSxcIuuetuuet+ueuVwiLDhdLFxuW1wiOGU2MVwiLFwi65+CXCIsNCxcIuufiOufilwiLDE5XSxcbltcIjhlODFcIixcIuufnlwiLDEzLFwi65+u65+v65+x65+y65+z65+1XCIsNixcIuufvuugglwiLDQsXCLroIrroIvroI3roI7roI/roJFcIiw2LFwi66Ca66Cc66CeXCIsNSxcIuugpuugp+ugqeugquugq+ugrVwiLDYsXCLroLbroLpcIiw1LFwi66GB66GC66GD66GFXCIsMTEsXCLroZLroZRcIiw3LFwi66Ge66Gf66Gh66Gi66Gj66GlXCIsNixcIuuhruuhsOuhslwiLDUsXCLrobnrobrrobvrob1cIiw3XSxcbltcIjhmNDFcIixcIuuihVwiLDcsXCLroo5cIiwxN10sXG5bXCI4ZjYxXCIsXCLroqBcIiw3LFwi66KpXCIsNixcIuuiseuisuuis+uiteuituuit+uiuVwiLDRdLFxuW1wiOGY4MVwiLFwi66K+66K/66OC66OE66OGXCIsNSxcIuujjeujjuujj+ujkeujkuujk+ujlVwiLDcsXCLro57ro6Dro6JcIiw1LFwi66Oq66Or66Ot66Ou66Ov66OxXCIsNixcIuujuuujvOujvlwiLDUsXCLrpIVcIiwxOCxcIuukmVwiLDYsXCLrpKFcIiwyNixcIuukvuukv+ulgeulguulg+ulhVwiLDYsXCLrpY3rpY7rpZDrpZJcIiw1XSxcbltcIjkwNDFcIixcIuulmuulm+ulneulnuuln+uloVwiLDYsXCLrparrpazrpa5cIiw1LFwi66W266W366W566W666W766W9XCJdLFxuW1wiOTA2MVwiLFwi66W+XCIsNSxcIuumhuumiOumi+umjOumj1wiLDE1XSxcbltcIjkwODFcIixcIuumn1wiLDEyLFwi66au66av66ax66ay66az66a1XCIsNixcIuumvuungOunglwiLDUsXCLrp4rrp4vrp43rp5NcIiw0LFwi66ea66ec66ef66eg66ei66em66en66ep66eq66er66etXCIsNixcIuuntuunu1wiLDQsXCLrqIJcIiw1LFwi66iJXCIsMTEsXCLrqJZcIiwzMyxcIuuouuuou+uoveuovuuov+upgeupg+uphOupheuphlwiXSxcbltcIjkxNDFcIixcIuuph+upiuupjOupj+upkOupkeupkuupluupl+upmeupmuupm+upnVwiLDYsXCLrqabrqapcIiw1XSxcbltcIjkxNjFcIixcIuupsuups+upteuptuupt+upuVwiLDksXCLrqobrqojrqonrqorrqovrqo1cIiw1XSxcbltcIjkxODFcIixcIuuqk1wiLDIwLFwi66qq66qt66qu66qv66qx66qzXCIsNCxcIuuquuuqvOuqvlwiLDUsXCLrq4Xrq4brq4frq4lcIiwxNCxcIuurmlwiLDMzLFwi66u966u+66u/66yB66yC66yD66yFXCIsNyxcIuusjuuskOusklwiLDUsXCLrrJnrrJrrrJvrrJ3rrJ7rrJ/rrKFcIiw2XSxcbltcIjkyNDFcIixcIuusqOusquusrFwiLDcsXCLrrLfrrLnrrLrrrL9cIiw0LFwi662G662I662K662L662M662O662R662SXCJdLFxuW1wiOTI2MVwiLFwi662T662V662W662X662ZXCIsNyxcIuutouutpFwiLDcsXCLrra1cIiw0XSxcbltcIjkyODFcIixcIuutslwiLDIxLFwi666J666K666L666N666O666P666RXCIsMTgsXCLrrqXrrqbrrqfrrqnrrqrrrqvrrq1cIiw2LFwi666166626664XCIsNyxcIuuvgeuvguuvg+uvheuvhuuvh+uviVwiLDYsXCLrr5Hrr5Lrr5RcIiwzNSxcIuuvuuuvu+uvveuvvuuwgVwiXSxcbltcIjkzNDFcIixcIuuwg1wiLDQsXCLrsIrrsI7rsJDrsJLrsJPrsJnrsJrrsKDrsKHrsKLrsKPrsKbrsKjrsKrrsKvrsKzrsK7rsK/rsLLrsLPrsLVcIl0sXG5bXCI5MzYxXCIsXCLrsLbrsLfrsLlcIiw2LFwi67GC67GG67GH67GI67GK67GL67GO67GP67GRXCIsOF0sXG5bXCI5MzgxXCIsXCLrsZrrsZvrsZzrsZ5cIiwzNyxcIuuyhuuyh+uyieuyiuuyjeuyj1wiLDQsXCLrspbrspjrsptcIiw0LFwi67Ki67Kj67Kl67Km67KpXCIsNixcIuuysuuytlwiLDUsXCLrsr7rsr/rs4Hrs4Lrs4Prs4VcIiw3LFwi67OO67OS67OT67OU67OW67OX67OZ67Oa67Ob67OdXCIsMjIsXCLrs7frs7nrs7rrs7vrs71cIl0sXG5bXCI5NDQxXCIsXCLrs75cIiw1LFwi67SG67SI67SKXCIsNSxcIuu0keu0kuu0k+u0lVwiLDhdLFxuW1wiOTQ2MVwiLFwi67SeXCIsNSxcIuu0pVwiLDYsXCLrtK1cIiwxMl0sXG5bXCI5NDgxXCIsXCLrtLpcIiw1LFwi67WBXCIsNixcIuu1iuu1i+u1jeu1juu1j+u1kVwiLDYsXCLrtZpcIiw5LFwi67Wl67Wm67Wn67WpXCIsMjIsXCLrtoLrtoPrtoXrtobrtotcIiw0LFwi67aS67aU67aW67aX67aY67ab67adXCIsNixcIuu2pVwiLDEwLFwi67axXCIsNixcIuu2uVwiLDI0XSxcbltcIjk1NDFcIixcIuu3kuu3k+u3luu3l+u3meu3muu3m+u3nVwiLDExLFwi67eqXCIsNSxcIuu3sVwiXSxcbltcIjk1NjFcIixcIuu3suu3s+u3teu3tuu3t+u3uVwiLDYsXCLruIHruILruITruIZcIiw1LFwi67iO67iP67iR67iS67iTXCJdLFxuW1wiOTU4MVwiLFwi67iVXCIsNixcIuu4nuu4oFwiLDM1LFwi67mG67mH67mJ67mK67mL67mN67mPXCIsNCxcIuu5luu5mOu5nOu5neu5nuu5n+u5ouu5o+u5peu5puu5p+u5qeu5q1wiLDQsXCLrubLrubZcIiw0LFwi67m+67m/67qB67qC67qD67qFXCIsNixcIuu6juu6klwiLDUsXCLruppcIiwxMyxcIuu6qVwiLDE0XSxcbltcIjk2NDFcIixcIuu6uFwiLDIzLFwi67uS67uTXCJdLFxuW1wiOTY2MVwiLFwi67uV67uW67uZXCIsNixcIuu7oeu7ouu7plwiLDUsXCLru61cIiw4XSxcbltcIjk2ODFcIixcIuu7tlwiLDEwLFwi67yCXCIsNSxcIuu8ilwiLDEzLFwi67ya67yeXCIsMzMsXCLrvYLrvYPrvYXrvYbrvYfrvYlcIiw2LFwi672S672T672U672WXCIsNDRdLFxuW1wiOTc0MVwiLFwi676DXCIsMTYsXCLrvpVcIiw4XSxcbltcIjk3NjFcIixcIuu+nlwiLDE3LFwi676xXCIsN10sXG5bXCI5NzgxXCIsXCLrvrlcIiwxMSxcIuu/hlwiLDUsXCLrv47rv4/rv5Hrv5Lrv5Prv5VcIiw2LFwi67+d67+e67+g67+iXCIsODksXCLsgL3sgL7sgL9cIl0sXG5bXCI5ODQxXCIsXCLsgYBcIiwxNixcIuyBklwiLDUsXCLsgZnsgZrsgZtcIl0sXG5bXCI5ODYxXCIsXCLsgZ3sgZ7sgZ/sgaFcIiw2LFwi7IGqXCIsMTVdLFxuW1wiOTg4MVwiLFwi7IG6XCIsMjEsXCLsgpLsgpPsgpXsgpbsgpfsgplcIiw2LFwi7IKi7IKk7IKmXCIsNSxcIuyCruyCseyCsuyCt1wiLDQsXCLsgr7sg4Lsg4Psg4Tsg4bsg4fsg4rsg4vsg43sg47sg4/sg5FcIiw2LFwi7IOa7IOeXCIsNSxcIuyDpuyDp+yDqeyDquyDq+yDrVwiLDYsXCLsg7bsg7jsg7pcIiw1LFwi7ISB7ISC7ISD7ISF7ISG7ISH7ISJXCIsNixcIuyEkeyEkuyEk+yElOyEllwiLDUsXCLshKHshKLshKXshKjshKnshKrshKvshK5cIl0sXG5bXCI5OTQxXCIsXCLshLLshLPshLTshLXshLfshLrshLvshL3shL7shL/shYFcIiw2LFwi7IWK7IWOXCIsNSxcIuyFluyFl1wiXSxcbltcIjk5NjFcIixcIuyFmeyFmuyFm+yFnVwiLDYsXCLshabshapcIiw1LFwi7IWx7IWy7IWz7IW17IW27IW37IW57IW67IW7XCJdLFxuW1wiOTk4MVwiLFwi7IW8XCIsOCxcIuyGhlwiLDUsXCLsho/shpHshpLshpPshpXshpdcIiw0LFwi7Iae7Iag7Iai7Iaj7Iak7Iam7Ian7Iaq7Iar7Iat7Iau7Iav7IaxXCIsMTEsXCLshr5cIiw1LFwi7IeF7IeG7IeH7IeJ7IeK7IeL7IeNXCIsNixcIuyHleyHluyHmVwiLDYsXCLsh6Hsh6Lsh6Psh6Xsh6bsh6fsh6lcIiw2LFwi7Iey7Ie0XCIsNyxcIuyHvuyHv+yIgeyIguyIg+yIhVwiLDYsXCLsiI7siJDsiJJcIiw1LFwi7Iia7Iib7Iid7Iie7Iih7Iii7IijXCJdLFxuW1wiOWE0MVwiLFwi7Iik7Iil7Iim7Iin7Iiq7Iis7Iiu7Iiw7Iiz7Ii1XCIsMTZdLFxuW1wiOWE2MVwiLFwi7ImG7ImH7ImJXCIsNixcIuyJkuyJk+yJleyJluyJl+yJmVwiLDYsXCLsiaHsiaLsiaPsiaTsiaZcIl0sXG5bXCI5YTgxXCIsXCLsiadcIiw0LFwi7Imu7Imv7Imx7Imy7Imz7Im1XCIsNixcIuyJvuyKgOyKglwiLDUsXCLsiopcIiw1LFwi7IqRXCIsNixcIuyKmeyKmuyKnOyKnlwiLDUsXCLsiqbsiqfsiqnsiqrsiqvsiq5cIiw1LFwi7Iq27Iq47Iq6XCIsMzMsXCLsi57si5/si6Hsi6Lsi6VcIiw1LFwi7Iuu7Iuw7Iuy7Iuz7Iu07Iu17Iu37Iu67Iu97Iu+7Iu/7IyBXCIsNixcIuyMiuyMi+yMjuyMj1wiXSxcbltcIjliNDFcIixcIuyMkOyMkeyMkuyMluyMl+yMmeyMmuyMm+yMnVwiLDYsXCLsjKbsjKfsjKpcIiw4XSxcbltcIjliNjFcIixcIuyMs1wiLDE3LFwi7I2GXCIsN10sXG5bXCI5YjgxXCIsXCLsjY5cIiwyNSxcIuyNquyNq+yNreyNruyNr+yNseyNs1wiLDQsXCLsjbrsjbvsjb5cIiw1LFwi7I6F7I6G7I6H7I6J7I6K7I6L7I6NXCIsNTAsXCLsj4FcIiwyMixcIuyPmlwiXSxcbltcIjljNDFcIixcIuyPm+yPneyPnuyPoeyPo1wiLDQsXCLsj6rsj6vsj6zsj65cIiw1LFwi7I+27I+37I+5XCIsNV0sXG5bXCI5YzYxXCIsXCLsj79cIiw4LFwi7JCJXCIsNixcIuyQkVwiLDldLFxuW1wiOWM4MVwiLFwi7JCbXCIsOCxcIuyQpVwiLDYsXCLskK3skK7skK/skLHskLLskLPskLVcIiw2LFwi7JC+XCIsOSxcIuyRiVwiLDI2LFwi7JGm7JGn7JGp7JGq7JGr7JGtXCIsNixcIuyRtuyRt+yRuOyRulwiLDUsXCLskoFcIiwxOCxcIuySlVwiLDYsXCLskp1cIiwxMl0sXG5bXCI5ZDQxXCIsXCLskqpcIiwxMyxcIuySueySuuySu+ySvVwiLDhdLFxuW1wiOWQ2MVwiLFwi7JOGXCIsMjVdLFxuW1wiOWQ4MVwiLFwi7JOgXCIsOCxcIuyTqlwiLDUsXCLsk7Lsk7Psk7Xsk7bsk7fsk7nsk7vsk7zsk73sk77slIJcIiw5LFwi7JSN7JSO7JSP7JSR7JSS7JST7JSVXCIsNixcIuyUnVwiLDEwLFwi7JSq7JSr7JSt7JSu7JSv7JSxXCIsNixcIuyUuuyUvOyUvlwiLDUsXCLslYbslYfslYvslY/slZDslZHslZLslZbslZrslZvslZzslZ/slaLslaPslaXslabslafslalcIiw2LFwi7JWy7JW2XCIsNSxcIuyVvuyVv+yWgeyWguyWg+yWheyWhuyWiOyWieyWiuyWi+yWjuyWkOyWkuyWk+yWlFwiXSxcbltcIjllNDFcIixcIuyWluyWmeyWmuyWm+yWneyWnuyWn+yWoVwiLDcsXCLslqpcIiw5LFwi7Ja2XCJdLFxuW1wiOWU2MVwiLFwi7Ja37Ja67Ja/XCIsNCxcIuyXi+yXjeyXj+yXkuyXk+yXleyXluyXl+yXmVwiLDYsXCLsl6Lsl6Tsl6bsl6dcIl0sXG5bXCI5ZTgxXCIsXCLsl6jsl6nsl6rsl6vsl6/sl7Hsl7Lsl7Psl7Xsl7jsl7nsl7rsl7vsmILsmIPsmITsmInsmIrsmIvsmI3smI7smI/smJFcIiw2LFwi7Jia7JidXCIsNixcIuyYpuyYp+yYqeyYquyYq+yYr+yYseyYsuyYtuyYuOyYuuyYvOyYveyYvuyYv+yZguyZg+yZheyZhuyZh+yZiVwiLDYsXCLsmZLsmZZcIiw1LFwi7Jme7Jmf7JmhXCIsMTAsXCLsma3sma7smbDsmbJcIiw1LFwi7Jm67Jm77Jm97Jm+7Jm/7JqBXCIsNixcIuyaiuyajOyajlwiLDUsXCLsmpbsmpfsmpnsmprsmpvsmp1cIiw2LFwi7JqmXCJdLFxuW1wiOWY0MVwiLFwi7Jqo7JqqXCIsNSxcIuyasuyas+yateyatuyat+yau1wiLDQsXCLsm4Lsm4Tsm4ZcIiw1LFwi7JuOXCJdLFxuW1wiOWY2MVwiLFwi7JuP7JuR7JuS7JuT7JuVXCIsNixcIuybnuybn+ybolwiLDUsXCLsm6rsm6vsm63sm67sm6/sm7Hsm7JcIl0sXG5bXCI5ZjgxXCIsXCLsm7NcIiw0LFwi7Ju67Ju77Ju87Ju+XCIsNSxcIuychuych+ycieyciuyci+ycjVwiLDYsXCLsnJbsnJjsnJpcIiw1LFwi7Jyi7Jyj7Jyl7Jym7Jyn7JypXCIsNixcIuycsuyctOyctuycuOycueycuuycu+ycvuycv+ydgeydguydg+ydhVwiLDQsXCLsnYvsnY7snZDsnZnsnZrsnZvsnZ3snZ7snZ/snaFcIiw2LFwi7J2p7J2q7J2sXCIsNyxcIuydtuydt+ydueyduuydu+ydv+yegOyegeyeguyehuyei+yejOyejeyej+yekuyek+yeleyemeyem1wiLDQsXCLsnqLsnqdcIiw0LFwi7J6u7J6v7J6x7J6y7J6z7J617J627J63XCJdLFxuW1wiYTA0MVwiLFwi7J647J657J667J677J6+7J+CXCIsNSxcIuyfiuyfi+yfjeyfj+yfkVwiLDYsXCLsn5nsn5rsn5vsn5xcIl0sXG5bXCJhMDYxXCIsXCLsn55cIiw1LFwi7J+l7J+m7J+n7J+p7J+q7J+r7J+tXCIsMTNdLFxuW1wiYTA4MVwiLFwi7J+7XCIsNCxcIuygguygg+ygheyghuygh+ygieygi1wiLDQsXCLsoJLsoJTsoJdcIiw0LFwi7KCe7KCf7KCh7KCi7KCj7KClXCIsNixcIuygruygsOygslwiLDUsXCLsoLnsoLrsoLvsoL3soL7soL/soYFcIiw2LFwi7KGK7KGL7KGOXCIsNSxcIuyhlVwiLDI2LFwi7KGy7KGz7KG17KG27KG37KG57KG7XCIsNCxcIuyiguyihOyiiOyiieyiiuyijlwiLDUsXCLsopVcIiw3LFwi7KKe7KKg7KKi7KKj7KKkXCJdLFxuW1wiYTE0MVwiLFwi7KKl7KKm7KKn7KKpXCIsMTgsXCLsor7sor/so4Dso4FcIl0sXG5bXCJhMTYxXCIsXCLso4Lso4Pso4Xso4bso4fso4nso4rso4vso41cIiw2LFwi7KOW7KOY7KOaXCIsNSxcIuyjouyjo+yjpVwiXSxcbltcImExODFcIixcIuyjplwiLDE0LFwi7KO2XCIsNSxcIuyjvuyjv+ykgeykguykg+ykh1wiLDQsXCLspI7jgIDjgIHjgILCt+KApeKApsKo44CDwq3igJXiiKXvvLziiLzigJjigJnigJzigJ3jgJTjgJXjgIhcIiw5LFwiwrHDl8O34omg4omk4oml4oie4oi0wrDigLLigLPihIPihKvvv6Dvv6Hvv6XimYLimYDiiKDiiqXijJLiiILiiIfiiaHiiZLCp+KAu+KYhuKYheKXi+KXj+KXjuKXh+KXhuKWoeKWoOKWs+KWsuKWveKWvOKGkuKGkOKGkeKGk+KGlOOAk+KJquKJq+KImuKIveKIneKIteKIq+KIrOKIiOKIi+KKhuKKh+KKguKKg+KIquKIqeKIp+KIqO+/olwiXSxcbltcImEyNDFcIixcIuykkOykklwiLDUsXCLspJlcIiwxOF0sXG5bXCJhMjYxXCIsXCLspK1cIiw2LFwi7KS1XCIsMThdLFxuW1wiYTI4MVwiLFwi7KWIXCIsNyxcIuylkuylk+ylleylluyll+ylmVwiLDYsXCLspaLspaRcIiw3LFwi7KWt7KWu7KWv4oeS4oeU4oiA4oiDwrTvvZ7Lh8uYy53LmsuZwrjLm8Khwr/LkOKIruKIkeKIj8Kk4oSJ4oCw4peB4peA4pa34pa24pmk4pmg4pmh4pml4pmn4pmj4oqZ4peI4paj4peQ4peR4paS4pak4pal4pao4pan4pam4pap4pmo4piP4piO4pic4piewrbigKDigKHihpXihpfihpnihpbihpjima3imanimarimazjib/jiJzihJbjj4fihKLjj4Ljj5jihKHigqzCrlwiXSxcbltcImEzNDFcIixcIuylseylsuyls+yltVwiLDYsXCLspb1cIiwxMCxcIuymiuymi+ymjeymjuymj1wiXSxcbltcImEzNjFcIixcIuymkVwiLDYsXCLspprsppzspp5cIiwxNl0sXG5bXCJhMzgxXCIsXCLspq9cIiwxNixcIuynguyng+ynheynhuynieyni1wiLDQsXCLsp5Lsp5Tsp5fsp5jsp5vvvIFcIiw1OCxcIu+/pu+8vVwiLDMyLFwi77+jXCJdLFxuW1wiYTQ0MVwiLFwi7Kee7Kef7Keh7Kej7Kel7Kem7Keo7Kep7Keq7Ker7Keu7KeyXCIsNSxcIuynuuynu+ynveynvuynv+yogeyoguyog+yohFwiXSxcbltcImE0NjFcIixcIuyoheyohuyoh+yoiuyojlwiLDUsXCLsqJXsqJbsqJfsqJlcIiwxMl0sXG5bXCJhNDgxXCIsXCLsqKbsqKfsqKjsqKpcIiwyOCxcIuOEsVwiLDkzXSxcbltcImE1NDFcIixcIuyph1wiLDQsXCLsqY7sqY/sqZHsqZLsqZPsqZVcIiw2LFwi7Kme7KmiXCIsNSxcIuypqeypqlwiXSxcbltcImE1NjFcIixcIuypq1wiLDE3LFwi7Km+XCIsNSxcIuyqheyqhlwiXSxcbltcImE1ODFcIixcIuyqh1wiLDE2LFwi7KqZXCIsMTQsXCLihbBcIiw5XSxcbltcImE1YjBcIixcIuKFoFwiLDldLFxuW1wiYTVjMVwiLFwizpFcIiwxNixcIs6jXCIsNl0sXG5bXCJhNWUxXCIsXCLOsVwiLDE2LFwiz4NcIiw2XSxcbltcImE2NDFcIixcIuyqqFwiLDE5LFwi7Kq+7Kq/7KuB7KuC7KuD7KuFXCJdLFxuW1wiYTY2MVwiLFwi7KuGXCIsNSxcIuyrjuyrkOyrkuyrlOyrleyrluyrl+yrmlwiLDUsXCLsq6FcIiw2XSxcbltcImE2ODFcIixcIuyrqOyrqeyrquyrq+yrrVwiLDYsXCLsq7VcIiwxOCxcIuysieysiuKUgOKUguKUjOKUkOKUmOKUlOKUnOKUrOKUpOKUtOKUvOKUgeKUg+KUj+KUk+KUm+KUl+KUo+KUs+KUq+KUu+KVi+KUoOKUr+KUqOKUt+KUv+KUneKUsOKUpeKUuOKVguKUkuKUkeKUmuKUmeKUluKUleKUjuKUjeKUnuKUn+KUoeKUouKUpuKUp+KUqeKUquKUreKUruKUseKUsuKUteKUtuKUueKUuuKUveKUvuKVgOKVgeKVg1wiLDddLFxuW1wiYTc0MVwiLFwi7KyLXCIsNCxcIuyskeyskuysk+ysleysluysl+ysmVwiLDYsXCLsrKJcIiw3XSxcbltcImE3NjFcIixcIuysqlwiLDIyLFwi7K2C7K2D7K2EXCJdLFxuW1wiYTc4MVwiLFwi7K2F7K2G7K2H7K2K7K2L7K2N7K2O7K2P7K2RXCIsNixcIuytmuytm+ytnOytnlwiLDUsXCLsraVcIiw3LFwi446V446W446X4oST446Y44+E446j446k446l446m446ZXCIsOSxcIuOPiuOOjeOOjuOOj+OPj+OOiOOOieOPiOOOp+OOqOOOsFwiLDksXCLjjoBcIiw0LFwi4466XCIsNSxcIuOOkFwiLDQsXCLihKbjj4Djj4Hjjorjjovjjozjj5bjj4Xjjq3jjq7jjq/jj5vjjqnjjqrjjqvjjqzjj53jj5Djj5Pjj4Pjj4njj5zjj4ZcIl0sXG5bXCJhODQxXCIsXCLsra1cIiwxMCxcIuytulwiLDE0XSxcbltcImE4NjFcIixcIuyuiVwiLDE4LFwi7K6dXCIsNl0sXG5bXCJhODgxXCIsXCLsrqRcIiwxOSxcIuyuuVwiLDExLFwiw4bDkMKqxKZcIl0sXG5bXCJhOGE2XCIsXCLEslwiXSxcbltcImE4YThcIixcIsS/xYHDmMWSwrrDnsWmxYpcIl0sXG5bXCJhOGIxXCIsXCLjiaBcIiwyNyxcIuKTkFwiLDI1LFwi4pGgXCIsMTQsXCLCveKFk+KFlMK8wr7ihZvihZzihZ3ihZ5cIl0sXG5bXCJhOTQxXCIsXCLsr4VcIiwxNCxcIuyvlVwiLDEwXSxcbltcImE5NjFcIixcIuyvoOyvoeyvouyvo+yvpeyvpuyvqOyvqlwiLDE4XSxcbltcImE5ODFcIixcIuyvvVwiLDE0LFwi7LCO7LCP7LCR7LCS7LCT7LCVXCIsNixcIuywnuywn+ywoOywo+ywpMOmxJHDsMSnxLHEs8S4xYDFgsO4xZPDn8O+xafFi8WJ44iAXCIsMjcsXCLikpxcIiwyNSxcIuKRtFwiLDE0LFwiwrnCssKz4oG04oG/4oKB4oKC4oKD4oKEXCJdLFxuW1wiYWE0MVwiLFwi7LCl7LCm7LCq7LCr7LCt7LCv7LCxXCIsNixcIuywuuywv1wiLDQsXCLssYbssYfssYnssYrssYvssY3ssY5cIl0sXG5bXCJhYTYxXCIsXCLssY9cIiw0LFwi7LGW7LGaXCIsNSxcIuyxoeyxouyxo+yxpeyxp+yxqVwiLDYsXCLssbHssbJcIl0sXG5bXCJhYTgxXCIsXCLssbPssbTssbZcIiwyOSxcIuOBgVwiLDgyXSxcbltcImFiNDFcIixcIuyylOyyleyyluyyl+yymuyym+yyneyynuyyn+yyoVwiLDYsXCLssqrssq5cIiw1LFwi7LK27LK37LK5XCJdLFxuW1wiYWI2MVwiLFwi7LK67LK77LK9XCIsNixcIuyzhuyziOyzilwiLDUsXCLss5Hss5Lss5Pss5VcIiw1XSxcbltcImFiODFcIixcIuyzm1wiLDgsXCLss6VcIiw2LFwi7LOt7LOu7LOv7LOxXCIsMTIsXCLjgqFcIiw4NV0sXG5bXCJhYzQxXCIsXCLss77ss7/stIDstIJcIiw1LFwi7LSK7LSL7LSN7LSO7LSP7LSRXCIsNixcIuy0muy0nOy0nuy0n+y0oFwiXSxcbltcImFjNjFcIixcIuy0oey0ouy0o+y0pey0puy0p+y0qey0quy0q+y0rVwiLDExLFwi7LS6XCIsNF0sXG5bXCJhYzgxXCIsXCLstL9cIiwyOCxcIuy1ney1nuy1n9CQXCIsNSxcItCB0JZcIiwyNV0sXG5bXCJhY2QxXCIsXCLQsFwiLDUsXCLRkdC2XCIsMjVdLFxuW1wiYWQ0MVwiLFwi7LWh7LWi7LWj7LWlXCIsNixcIuy1ruy1sOy1slwiLDUsXCLstblcIiw3XSxcbltcImFkNjFcIixcIuy2gVwiLDYsXCLstolcIiwxMCxcIuy2luy2l+y2mey2muy2m+y2ney2nuy2n1wiXSxcbltcImFkODFcIixcIuy2oOy2oey2ouy2o+y2puy2qOy2qlwiLDUsXCLstrFcIiwxOCxcIuy3hVwiXSxcbltcImFlNDFcIixcIuy3hlwiLDUsXCLst43st47st4/st5FcIiwxNl0sXG5bXCJhZTYxXCIsXCLst6JcIiw1LFwi7Lep7Leq7Ler7Let7Leu7Lev7LexXCIsNixcIuy3uuy3vOy3vlwiLDRdLFxuW1wiYWU4MVwiLFwi7LiD7LiF7LiG7LiH7LiJ7LiK7LiL7LiNXCIsNixcIuy4ley4luy4l+y4mOy4mlwiLDUsXCLsuKLsuKPsuKXsuKbsuKfsuKnsuKrsuKtcIl0sXG5bXCJhZjQxXCIsXCLsuKzsuK3suK7suK/suLLsuLTsuLZcIiwxOV0sXG5bXCJhZjYxXCIsXCLsuYpcIiwxMyxcIuy5muy5m+y5ney5nuy5olwiLDUsXCLsuarsuaxcIl0sXG5bXCJhZjgxXCIsXCLsua5cIiw1LFwi7Lm27Lm37Lm57Lm67Lm77Lm9XCIsNixcIuy6huy6iOy6ilwiLDUsXCLsupLsupPsupXsupbsupfsuplcIl0sXG5bXCJiMDQxXCIsXCLsuppcIiw1LFwi7Lqi7LqmXCIsNSxcIuy6rlwiLDEyXSxcbltcImIwNjFcIixcIuy6u1wiLDUsXCLsu4JcIiwxOV0sXG5bXCJiMDgxXCIsXCLsu5ZcIiwxMyxcIuy7puy7p+y7qey7quy7rVwiLDYsXCLsu7bsu7pcIiw1LFwi6rCA6rCB6rCE6rCH6rCI6rCJ6rCK6rCQXCIsNyxcIuqwmVwiLDQsXCLqsKDqsKTqsKzqsK3qsK/qsLDqsLHqsLjqsLnqsLzqsYDqsYvqsY3qsZTqsZjqsZzqsbDqsbHqsbTqsbfqsbjqsbrqsoDqsoHqsoPqsoTqsoXqsobqsonqsorqsovqsozqspDqspTqspzqsp3qsp/qsqDqsqHqsqjqsqnqsqrqsqzqsq/qsrDqsrjqsrnqsrvqsrzqsr3qs4Hqs4Tqs4jqs4zqs5Xqs5fqs6Dqs6Hqs6Tqs6fqs6jqs6rqs6zqs6/qs7Dqs7Hqs7Pqs7Xqs7bqs7zqs73qtIDqtITqtIZcIl0sXG5bXCJiMTQxXCIsXCLsvILsvIPsvIXsvIbsvIfsvIlcIiw2LFwi7LyS7LyU7LyWXCIsNSxcIuy8ney8nuy8n+y8oey8ouy8o1wiXSxcbltcImIxNjFcIixcIuy8pVwiLDYsXCLsvK7svLJcIiw1LFwi7Ly5XCIsMTFdLFxuW1wiYjE4MVwiLFwi7L2FXCIsMTQsXCLsvZbsvZfsvZnsvZrsvZvsvZ1cIiw2LFwi7L2m7L2o7L2q7L2r7L2s6rSM6rSN6rSP6rSR6rSY6rSc6rSg6rSp6rSs6rSt6rS06rS16rS46rS86rWE6rWF6rWH6rWJ6rWQ6rWU6rWY6rWh6rWj6rWs6rWt6rWw6rWz6rW06rW16rW26rW76rW86rW96rW/6raB6raC6raI6raJ6raM6raQ6rac6rad6rak6ra36reA6reB6reE6reI6reQ6reR6reT6rec6reg6rek6re46re56re86re/6riA6riB6riI6riJ6riL6riN6riU6riw6rix6ri06ri36ri46ri66rmA6rmB6rmD6rmF6rmG6rmK6rmM6rmN6rmO6rmQ6rmU6rmW6rmc6rmd6rmf6rmg6rmh6rml6rmo6rmp6rms6rmw6rm4XCJdLFxuW1wiYjI0MVwiLFwi7L2t7L2u7L2v7L2y7L2z7L217L227L237L25XCIsNixcIuy+gey+guy+g+y+hOy+hlwiLDUsXCLsvo1cIl0sXG5bXCJiMjYxXCIsXCLsvo5cIiwxOCxcIuy+olwiLDUsXCLsvqlcIl0sXG5bXCJiMjgxXCIsXCLsvqpcIiw1LFwi7L6xXCIsMTgsXCLsv4VcIiw2LFwi6rm56rm76rm86rm96rqE6rqF6rqM6rq86rq96rq+6ruA6ruE6ruM6ruN6ruP6ruQ6ruR6ruY6ruZ6ruc6ruo6rur6rut6ru06ru46ru86ryH6ryI6ryN6ryQ6rys6ryt6ryw6ryy6ry06ry86ry96ry/6r2B6r2C6r2D6r2I6r2J6r2Q6r2c6r2d6r2k6r2l6r256r6A6r6E6r6I6r6Q6r6R6r6V6r6c6r646r656r686r+A6r+H6r+I6r+J6r+L6r+N6r+O6r+U6r+c6r+o6r+p6r+w6r+x6r+06r+464CA64CB64CE64CM64CQ64CU64Cc64Cd64Co64GE64GF64GI64GK64GM64GO64GT64GU64GV64GX64GZXCJdLFxuW1wiYjM0MVwiLFwi7L+MXCIsMTksXCLsv6Lsv6Psv6Xsv6bsv6fsv6lcIl0sXG5bXCJiMzYxXCIsXCLsv6pcIiw1LFwi7L+y7L+07L+2XCIsNSxcIuy/vey/vuy/v+2Age2Agu2Ag+2AhVwiLDVdLFxuW1wiYjM4MVwiLFwi7YCLXCIsNSxcIu2AklwiLDUsXCLtgJlcIiwxOSxcIuuBneuBvOuBveuCgOuChOuCjOuCjeuCj+uCkeuCmOuCmeuCmuuCnOuCn+uCoOuCoeuCouuCqOuCqeuCq1wiLDQsXCLrgrHrgrPrgrTrgrXrgrjrgrzrg4Trg4Xrg4frg4jrg4nrg5Drg5Hrg5Trg5jrg6Drg6XrhIjrhInrhIvrhIzrhJDrhJLrhJPrhJjrhJnrhJvrhJzrhJ3rhKPrhKTrhKXrhKjrhKzrhLTrhLXrhLfrhLjrhLnrhYDrhYHrhYTrhYjrhZDrhZHrhZTrhZXrhZjrhZzrhaDrhbjrhbnrhbzrhoDrhoLrhojrhonrhovrho3rhpLrhpPrhpTrhpjrhpzrhqjrh4zrh5Drh5Trh5zrh51cIl0sXG5bXCJiNDQxXCIsXCLtgK5cIiw1LFwi7YC27YC37YC57YC67YC77YC9XCIsNixcIu2Bhu2BiO2BilwiLDVdLFxuW1wiYjQ2MVwiLFwi7YGR7YGS7YGT7YGV7YGW7YGX7YGZXCIsNixcIu2BoVwiLDEwLFwi7YGu7YGvXCJdLFxuW1wiYjQ4MVwiLFwi7YGx7YGy7YGz7YG1XCIsNixcIu2Bvu2Bv+2CgO2CglwiLDE4LFwi64ef64eo64ep64es64ew64e564e764e964iE64iF64iI64iL64iM64iU64iV64iX64iZ64ig64i064i864mY64mc64mg64mo64mp64m064m164m864qE64qF64qJ64qQ64qR64qU64qY64qZ64qa64qg64qh64qj64ql64qm64qq64qs64qw64q064uI64uJ64uM64uQ64uS64uY64uZ64ub64ud64ui64uk64ul64um64uo64urXCIsNCxcIuuLs+uLtOuLteuLt1wiLDQsXCLri7/rjIDrjIHrjITrjIjrjJDrjJHrjJPrjJTrjJXrjJzrjZTrjZXrjZbrjZjrjZvrjZzrjZ7rjZ/rjaTrjaVcIl0sXG5bXCJiNTQxXCIsXCLtgpVcIiwxNCxcIu2Cpu2Cp+2Cqe2Cqu2Cq+2CrVwiLDVdLFxuW1wiYjU2MVwiLFwi7YKz7YK27YK47YK6XCIsNSxcIu2Dgu2Dg+2Dhe2Dhu2Dh+2DilwiLDUsXCLtg5Ltg5ZcIiw0XSxcbltcImI1ODFcIixcIu2Dm+2Dnu2Dn+2Doe2Dou2Do+2DpVwiLDYsXCLtg67tg7JcIiw1LFwi7YO5XCIsMTEsXCLrjafrjanrjavrja7rjbDrjbHrjbTrjbjrjoDrjoHrjoPrjoTrjoXrjozrjpDrjpTrjqDrjqHrjqjrjqzrj4Trj4Xrj4jrj4vrj4zrj47rj5Drj5Trj5Xrj5frj5nrj5vrj53rj6Drj6Trj6jrj7zrkJDrkJjrkJzrkKDrkKjrkKnrkKvrkLTrkZDrkZHrkZTrkZjrkaDrkaHrkaPrkaXrkazrkoDrkojrkp3rkqTrkqjrkqzrkrXrkrfrkrnrk4Drk4Trk4jrk5Drk5Xrk5zrk53rk6Drk6Prk6Trk6brk6zrk63rk6/rk7Hrk7jrlJTrlJXrlJjrlJvrlJzrlKTrlKXrlKfrlKjrlKnrlKrrlLDrlLHrlLTrlLhcIl0sXG5bXCJiNjQxXCIsXCLthIVcIiw3LFwi7YSOXCIsMTddLFxuW1wiYjY2MVwiLFwi7YSgXCIsMTUsXCLthLLthLPthLXthLbthLfthLnthLvthLzthL3thL5cIl0sXG5bXCJiNjgxXCIsXCLthL/thYLthYZcIiw1LFwi7YWO7YWP7YWR7YWS7YWT7YWVXCIsNixcIu2Fnu2FoO2FolwiLDUsXCLthantharthavtha3rlYDrlYHrlYPrlYTrlYXrlYvrlYzrlY3rlZDrlZTrlZzrlZ3rlZ/rlaDrlaHrlqDrlqHrlqTrlqjrlqrrlqvrlrDrlrHrlrPrlrTrlrXrlrvrlrzrlr3rl4Drl4Trl4zrl43rl4/rl5Drl5Hrl5jrl6zrmJDrmJHrmJTrmJjrmKXrmKzrmLTrmYjrmaTrmajrmpzrmp3rmqDrmqTrmqvrmqzrmrHrm5Trm7Drm7Trm7jrnIDrnIHrnIXrnKjrnKnrnKzrnK/rnLDrnLjrnLnrnLvrnYTrnYjrnYzrnZTrnZXrnaDrnaTrnajrnbDrnbHrnbPrnbXrnbzrnb3rnoDrnoTrnozrno3rno/rnpDrnpHrnpLrnpbrnpdcIl0sXG5bXCJiNzQxXCIsXCLtha5cIiwxMyxcIu2FvVwiLDYsXCLthoXthobthofthonthopcIl0sXG5bXCJiNzYxXCIsXCLthotcIiwyMCxcIu2Gou2Go+2Gpe2Gpu2Gp1wiXSxcbltcImI3ODFcIixcIu2GqVwiLDYsXCLthrLthrTthrbthrfthrjthrnthrvthr3thr7thr/th4FcIiwxNCxcIuuemOuemeuenOueoOueqOueqeueq+uerOuereuetOueteueuOufh+ufieufrOufreufsOuftOufvOufveufv+uggOuggeugh+ugiOugieugjOugkOugmOugmeugm+ugneugpOugpeugqOugrOugtOugteugt+uguOugueuhgOuhhOuhkeuhk+uhnOuhneuhoOuhpOuhrOuhreuhr+uhseuhuOuhvOuijeuiqOuisOuitOuiuOujgOujgeujg+ujheujjOujkOujlOujneujn+ujoeujqOujqeujrOujsOujuOujueuju+ujveukhOukmOukoOukvOukveulgOulhOuljOulj+ulkeulmOulmeulnOuloOulqOulqVwiXSxcbltcImI4NDFcIixcIu2HkFwiLDcsXCLth5lcIiwxN10sXG5bXCJiODYxXCIsXCLth6tcIiw4LFwi7Ye17Ye27Ye37Ye5XCIsMTNdLFxuW1wiYjg4MVwiLFwi7YiI7YiKXCIsNSxcIu2IkVwiLDI0LFwi66Wr66Wt66W066W166W466W866aE66aF66aH66aJ66aK66aN66aO66as66at66aw66a066a866a966a/66eB66eI66eJ66eM66eOXCIsNCxcIuunmOunmeunm+unneunnuunoeuno+unpOunpeunqOunrOuntOunteunt+unuOunueunuuuogOuogeuoiOuoleuouOuoueuovOupgOupguupiOupieupi+upjeupjuupk+uplOupleupmOupnOuppOuppeupp+upqOupqeupsOupseuptOupuOuqg+uqhOuqheuqh+uqjOuqqOuqqeuqq+uqrOuqsOuqsuuquOuqueuqu+uqveurhOuriOurmOurmeurvFwiXSxcbltcImI5NDFcIixcIu2Iqu2Iq+2Iru2Ir+2Ise2Isu2Is+2ItVwiLDYsXCLtiL7tiYDtiYJcIiw1LFwi7YmJ7YmK7YmL7YmMXCJdLFxuW1wiYjk2MVwiLFwi7YmNXCIsMTQsXCLtiZ1cIiw2LFwi7Yml7Ymm7Ymn7YmoXCJdLFxuW1wiYjk4MVwiLFwi7YmpXCIsMjIsXCLtioLtioPtioXtiobtioftiontiortiovtiozrrIDrrITrrI3rrI/rrJHrrJjrrJzrrKDrrKnrrKvrrLTrrLXrrLbrrLjrrLvrrLzrrL3rrL7rrYTrrYXrrYfrrYnrrY3rrY/rrZDrrZTrrZjrraHrraPrrazrrojrrozrrpDrrqTrrqjrrqzrrrTrrrfrr4Drr4Trr4jrr5Drr5Prr7jrr7nrr7zrr7/rsIDrsILrsIjrsInrsIvrsIzrsI3rsI/rsJHrsJRcIiw0LFwi67CbXCIsNCxcIuuwpOuwpeuwp+uwqeuwreuwsOuwseuwtOuwuOuxgOuxgeuxg+uxhOuxheuxieuxjOuxjeuxkOuxneuyhOuyheuyiOuyi+uyjOuyjuuylOuyleuyl1wiXSxcbltcImJhNDFcIixcIu2Kje2Kju2Kj+2Kku2Kk+2KlO2KllwiLDUsXCLtip3tip7tip/tiqHtiqLtiqPtiqVcIiw2LFwi7YqtXCJdLFxuW1wiYmE2MVwiLFwi7Yqu7Yqv7Yqw7YqyXCIsNSxcIu2Kuu2Ku+2Kve2Kvu2Lge2Lg1wiLDQsXCLti4rti4xcIiw1XSxcbltcImJhODFcIixcIu2Lku2Lk+2Lle2Llu2Ll+2Lme2Lmu2Lm+2LnVwiLDYsXCLti6ZcIiw5LFwi7Yuy7Yuz7Yu17Yu27Yu37Yu57Yu667KZ67Ka67Kg67Kh67Kk67Kn67Ko67Kw67Kx67Kz67K067K167K867K967OA67OE67ON67OP67OQ67OR67OV67OY67Oc67O067O167O267O467O867SE67SF67SH67SJ67SQ67SU67Sk67Ss67WA67WI67WJ67WM67WQ67WY67WZ67Wk67Wo67aA67aB67aE67aH67aI67aJ67aK67aQ67aR67aT67aV67aZ67aa67ac67ak67aw67a467eU67eV67eY67ec67ep67ew67e067e467iA67iD67iF67iM67iN67iQ67iU67ic67id67if67mE67mF67mI67mM67mO67mU67mV67mX67mZ67ma67mb67mg67mh67mkXCJdLFxuW1wiYmI0MVwiLFwi7Yu7XCIsNCxcIu2Mgu2MhO2MhlwiLDUsXCLtjI/tjJHtjJLtjJPtjJXtjJdcIiw0LFwi7Yye7Yyi7YyjXCJdLFxuW1wiYmI2MVwiLFwi7Yyk7Yym7Yyn7Yyq7Yyr7Yyt7Yyu7Yyv7YyxXCIsNixcIu2Muu2MvlwiLDUsXCLtjYbtjYftjYjtjYlcIl0sXG5bXCJiYjgxXCIsXCLtjYpcIiwzMSxcIuu5qOu5quu5sOu5seu5s+u5tOu5teu5u+u5vOu5veu6gOu6hOu6jOu6jeu6j+u6kOu6keu6mOu6meu6qOu7kOu7keu7lOu7l+u7mOu7oOu7o+u7pOu7peu7rOu8geu8iOu8ieu8mOu8meu8m+u8nOu8neu9gOu9geu9hOu9iOu9kOu9keu9leu+lOu+sOu/heu/jOu/jeu/kOu/lOu/nOu/n+u/oeyAvOyBkeyBmOyBnOyBoOyBqOyBqeyCkOyCkeyClOyCmOyCoOyCoeyCo+yCpeyCrOyCreyCr+yCsOyCs+yCtOyCteyCtuyCvOyCveyCv+yDgOyDgeyDheyDiOyDieyDjOyDkOyDmOyDmeyDm+yDnOyDneyDpFwiXSxcbltcImJjNDFcIixcIu2NqlwiLDE3LFwi7Y2+7Y2/7Y6B7Y6C7Y6D7Y6F7Y6G7Y6HXCJdLFxuW1wiYmM2MVwiLFwi7Y6I7Y6J7Y6K7Y6L7Y6O7Y6SXCIsNSxcIu2Omu2Om+2One2Onu2On+2OoVwiLDYsXCLtjqrtjqztjq5cIl0sXG5bXCJiYzgxXCIsXCLtjq9cIiw0LFwi7Y617Y627Y637Y657Y667Y677Y69XCIsNixcIu2Phu2Ph+2PilwiLDUsXCLtj5FcIiw1LFwi7IOl7IOo7IOs7IO07IO17IO37IO57ISA7ISE7ISI7ISQ7ISV7IScXCIsNCxcIuyEo+yEpOyEpuyEp+yErOyEreyEr+yEsOyEseyEtuyEuOyEueyEvOyFgOyFiOyFieyFi+yFjOyFjeyFlOyFleyFmOyFnOyFpOyFpeyFp+yFqOyFqeyFsOyFtOyFuOyGheyGjOyGjeyGjuyGkOyGlOyGluyGnOyGneyGn+yGoeyGpeyGqOyGqeyGrOyGsOyGveyHhOyHiOyHjOyHlOyHl+yHmOyHoOyHpOyHqOyHsOyHseyHs+yHvOyHveyIgOyIhOyIjOyIjeyIj+yIkeyImOyImeyInOyIn+yIoOyIqOyIqeyIq+yIrVwiXSxcbltcImJkNDFcIixcIu2Pl+2PmVwiLDcsXCLtj6Ltj6RcIiw3LFwi7Y+u7Y+v7Y+x7Y+y7Y+z7Y+17Y+27Y+3XCJdLFxuW1wiYmQ2MVwiLFwi7Y+47Y+57Y+67Y+77Y++7ZCA7ZCCXCIsNSxcIu2QiVwiLDEzXSxcbltcImJkODFcIixcIu2Ql1wiLDUsXCLtkJ5cIiwyNSxcIuyIr+yIseyIsuyItOyJiOyJkOyJkeyJlOyJmOyJoOyJpeyJrOyJreyJsOyJtOyJvOyJveyJv+yKgeyKiOyKieyKkOyKmOyKm+yKneyKpOyKpeyKqOyKrOyKreyKtOyKteyKt+yKueyLnOyLneyLoOyLo+yLpOyLq+yLrOyLreyLr+yLseyLtuyLuOyLueyLu+yLvOyMgOyMiOyMieyMjOyMjeyMk+yMlOyMleyMmOyMnOyMpOyMpeyMqOyMqeyNheyNqOyNqeyNrOyNsOyNsuyNuOyNueyNvOyNveyOhOyOiOyOjOyPgOyPmOyPmeyPnOyPn+yPoOyPouyPqOyPqeyPreyPtOyPteyPuOyQiOyQkOyQpOyQrOyQsFwiXSxcbltcImJlNDFcIixcIu2QuFwiLDcsXCLtkYHtkYLtkYPtkYVcIiwxNF0sXG5bXCJiZTYxXCIsXCLtkZRcIiw3LFwi7ZGd7ZGe7ZGf7ZGh7ZGi7ZGj7ZGlXCIsNyxcIu2Rru2RsO2Rse2RslwiXSxcbltcImJlODFcIixcIu2Rs1wiLDQsXCLtkbrtkbvtkb3tkb7tkoHtkoNcIiw0LFwi7ZKK7ZKM7ZKOXCIsNSxcIu2SlVwiLDgsXCLskLTskLzskL3skYjskaTskaXskajskazskbTskbXskbnskoDskpTskpzskrjskrzsk6nsk7Dsk7Hsk7Tsk7jsk7rsk7/slIDslIHslIzslJDslJTslJzslKjslKnslKzslLDslLjslLnslLvslL3slYTslYXslYjslYnslYrslYzslY3slY7slZPslZTslZXslZfslZjslZnslZ3slZ7slaDslaHslaTslajslbDslbHslbPslbTslbXslbzslb3sloDsloTslofslozslo3slo/slpHslpXslpfslpjslpzslqDslqnslrTslrXslrjslrnslrvslrzslr3slr7sl4RcIiw2LFwi7JeM7JeOXCJdLFxuW1wiYmY0MVwiLFwi7ZKeXCIsMTAsXCLtkqpcIiwxNF0sXG5bXCJiZjYxXCIsXCLtkrlcIiwxOCxcIu2Tje2Tju2Tj+2Tke2Tku2Tk+2TlVwiXSxcbltcImJmODFcIixcIu2TllwiLDUsXCLtk53tk57tk6BcIiw3LFwi7ZOp7ZOq7ZOr7ZOt7ZOu7ZOv7ZOxXCIsNixcIu2Tue2Tuu2TvOyXkOyXkeyXlOyXmOyXoOyXoeyXo+yXpeyXrOyXreyXruyXsOyXtOyXtuyXt+yXvFwiLDUsXCLsmIXsmIbsmIfsmIjsmIzsmJDsmJjsmJnsmJvsmJzsmKTsmKXsmKjsmKzsmK3smK7smLDsmLPsmLTsmLXsmLfsmLnsmLvsmYDsmYHsmYTsmYjsmZDsmZHsmZPsmZTsmZXsmZzsmZ3smaDsmazsma/smbHsmbjsmbnsmbzsmoDsmojsmonsmovsmo3smpTsmpXsmpjsmpzsmqTsmqXsmqfsmqnsmrDsmrHsmrTsmrjsmrnsmrrsm4Dsm4Hsm4Psm4Xsm4zsm43sm5Dsm5Tsm5zsm53sm6Dsm6Hsm6hcIl0sXG5bXCJjMDQxXCIsXCLtk75cIiw1LFwi7ZSF7ZSG7ZSH7ZSJ7ZSK7ZSL7ZSNXCIsNixcIu2Ulu2UmFwiLDVdLFxuW1wiYzA2MVwiLFwi7ZSeXCIsMjVdLFxuW1wiYzA4MVwiLFwi7ZS47ZS57ZS67ZS77ZS+7ZS/7ZWB7ZWC7ZWD7ZWFXCIsNixcIu2Vju2VkO2VklwiLDUsXCLtlZrtlZvtlZ3tlZ7tlZ/tlaHtlaLtlaPsm6nsm6zsm7Dsm7jsm7nsm73snITsnIXsnIjsnIzsnJTsnJXsnJfsnJnsnKDsnKHsnKTsnKjsnLDsnLHsnLPsnLXsnLfsnLzsnL3snYDsnYTsnYrsnYzsnY3snY/snZFcIiw3LFwi7J2c7J2g7J2o7J2r7J207J217J247J287J297J2+7J6D7J6E7J6F7J6H7J6I7J6J7J6K7J6O7J6Q7J6R7J6U7J6W7J6X7J6Y7J6a7J6g7J6h7J6j7J6k7J6l7J6m7J6s7J6t7J6w7J607J687J697J6/7J+A7J+B7J+I7J+J7J+M7J+O7J+Q7J+Y7J+d7J+k7J+o7J+s7KCA7KCB7KCE7KCI7KCKXCJdLFxuW1wiYzE0MVwiLFwi7ZWk7ZWm7ZWn7ZWq7ZWs7ZWuXCIsNSxcIu2Vtu2Vt+2Vue2Vuu2Vu+2VvVwiLDYsXCLtlobtlortlotcIl0sXG5bXCJjMTYxXCIsXCLtloztlo3tlo7tlo/tlpFcIiwxOSxcIu2Wpu2Wp1wiXSxcbltcImMxODFcIixcIu2WqFwiLDMxLFwi7KCQ7KCR7KCT7KCV7KCW7KCc7KCd7KCg7KCk7KCs7KCt7KCv7KCx7KC47KC87KGA7KGI7KGJ7KGM7KGN7KGU7KGw7KGx7KG07KG47KG67KKA7KKB7KKD7KKF7KKG7KKH7KKL7KKM7KKN7KKU7KKd7KKf7KKh7KKo7KK87KK97KOE7KOI7KOM7KOU7KOV7KOX7KOZ7KOg7KOh7KOk7KO17KO87KO97KSA7KSE7KSF7KSG7KSM7KSN7KSP7KSR7KSY7KSs7KS07KWQ7KWR7KWU7KWY7KWg7KWh7KWj7KWs7KWw7KW07KW87KaI7KaJ7KaM7KaQ7KaY7KaZ7Kab7Kad7KeA7KeB7KeE7KeH7KeI7KeK7KeQ7KeR7KeTXCJdLFxuW1wiYzI0MVwiLFwi7ZeK7ZeL7ZeN7ZeO7ZeP7ZeR7ZeTXCIsNCxcIu2Xmu2XnO2XnlwiLDUsXCLtl6btl6ftl6ntl6rtl6vtl63tl65cIl0sXG5bXCJjMjYxXCIsXCLtl69cIiw0LFwi7Ze27Ze47Ze6XCIsNSxcIu2Ygu2Yg+2Yhe2Yhu2Yh+2YiVwiLDYsXCLtmJJcIl0sXG5bXCJjMjgxXCIsXCLtmJZcIiw1LFwi7Zid7Zie7Zif7Zih7Zii7Zij7ZilXCIsNyxcIu2YrlwiLDksXCLtmLrtmLvsp5Xsp5bsp5nsp5rsp5zsp53sp6Dsp6Lsp6Tsp6fsp6zsp63sp6/sp7Dsp7Hsp7jsp7nsp7zsqIDsqIjsqInsqIvsqIzsqI3sqJTsqJjsqKnsqYzsqY3sqZDsqZTsqZzsqZ3sqZ/sqaDsqaHsqajsqb3sqoTsqpjsqrzsqr3sq4Dsq4Tsq4zsq43sq4/sq5Hsq5Psq5jsq5nsq6Dsq6zsq7TsrIjsrJDsrJTsrJjsrKDsrKHsrYHsrYjsrYnsrYzsrZDsrZjsrZnsrZ3sraTsrbjsrbnsrpzsrrjsr5Tsr6Tsr6fsr6nssIzssI3ssJDssJTssJzssJ3ssKHssKLssKfssKjssKnssKzssK7ssLDssLjssLnssLtcIl0sXG5bXCJjMzQxXCIsXCLtmL3tmL7tmL/tmYHtmYLtmYPtmYTtmYbtmYftmYrtmYztmY7tmY/tmZDtmZLtmZPtmZbtmZftmZntmZrtmZvtmZ1cIiw0XSxcbltcImMzNjFcIixcIu2ZolwiLDQsXCLtmajtmapcIiw1LFwi7Zmy7Zmz7Zm1XCIsMTFdLFxuW1wiYzM4MVwiLFwi7ZqB7ZqC7ZqE7ZqGXCIsNSxcIu2aju2aj+2ake2aku2ak+2alVwiLDcsXCLtmp7tmqDtmqJcIiw1LFwi7Zqp7Zqq7LC87LC97LC+7LGE7LGF7LGI7LGM7LGU7LGV7LGX7LGY7LGZ7LGg7LGk7LGm7LGo7LGw7LG17LKY7LKZ7LKc7LKg7LKo7LKp7LKr7LKs7LKt7LK07LK17LK47LK87LOE7LOF7LOH7LOJ7LOQ7LOU7LOk7LOs7LOw7LSB7LSI7LSJ7LSM7LSQ7LSY7LSZ7LSb7LSd7LSk7LSo7LSs7LS57LWc7LWg7LWk7LWs7LWt7LWv7LWx7LW47LaI7LaU7LaV7LaY7Lac7Lak7Lal7Lan7Lap7Law7LeE7LeM7LeQ7Leo7Les7Lew7Le47Le57Le77Le97LiE7LiI7LiM7LiU7LiZ7Lig7Lih7Lik7Lio7Liw7Lix7Liz7Li1XCJdLFxuW1wiYzQ0MVwiLFwi7Zqr7Zqt7Zqu7Zqv7ZqxXCIsNyxcIu2auu2avFwiLDcsXCLtm4btm4ftm4ntm4rtm4tcIl0sXG5bXCJjNDYxXCIsXCLtm43tm47tm4/tm5Dtm5Ltm5Ptm5Xtm5btm5jtm5pcIiw1LFwi7Zuh7Zui7Zuj7Zul7Zum7Zun7ZupXCIsNF0sXG5bXCJjNDgxXCIsXCLtm67tm6/tm7Htm7Ltm7Ptm7Ttm7ZcIiw1LFwi7Zu+7Zu/7ZyB7ZyC7ZyD7ZyFXCIsMTEsXCLtnJLtnJPtnJTsuZjsuZnsuZzsuZ/suaDsuaHsuajsuansuavsua3subTsubXsubjsubzsuoTsuoXsuofsuonsupDsupHsupTsupjsuqDsuqHsuqPsuqTsuqXsuqzsuq3su4Hsu6Tsu6Xsu6jsu6vsu6zsu7Tsu7Xsu7fsu7jsu7nsvIDsvIHsvITsvIjsvJDsvJHsvJPsvJXsvJzsvKDsvKTsvKzsvK3svK/svLDsvLHsvLjsvZTsvZXsvZjsvZzsvaTsvaXsvafsvansvbDsvbHsvbTsvbjsvoDsvoXsvozsvqHsvqjsvrDsv4Tsv6Dsv6Hsv6Tsv6jsv7Dsv7Hsv7Psv7Xsv7ztgIDtgITtgJHtgJjtgK3tgLTtgLXtgLjtgLxcIl0sXG5bXCJjNTQxXCIsXCLtnJXtnJbtnJftnJrtnJvtnJ3tnJ7tnJ/tnKFcIiw2LFwi7Zyq7Zys7ZyuXCIsNSxcIu2ctu2ct+2cuVwiXSxcbltcImM1NjFcIixcIu2cuu2cu+2cvVwiLDYsXCLtnYXtnYbtnYjtnYpcIiw1LFwi7Z2S7Z2T7Z2V7Z2aXCIsNF0sXG5bXCJjNTgxXCIsXCLtnZ/tnaLtnaTtnabtnaftnajtnartnavtna3tna7tna/tnbHtnbLtnbPtnbVcIiw2LFwi7Z2+7Z2/7Z6A7Z6CXCIsNSxcIu2eiu2ei+2BhO2Bhe2Bh+2Bie2BkO2BlO2BmO2BoO2BrO2Bre2BsO2BtO2BvO2Bve2Cge2CpO2Cpe2CqO2CrO2CtO2Cte2Ct+2Cue2DgO2Dge2DhO2DiO2Die2DkO2Dke2Dk+2DlO2Dle2DnO2Dne2DoO2DpO2DrO2Dre2Dr+2DsO2Dse2DuO2Eje2EsO2Ese2EtO2EuO2Euu2FgO2Fge2Fg+2FhO2Fhe2FjO2Fje2FkO2FlO2FnO2Fne2Fn+2Foe2FqO2FrO2FvO2GhO2GiO2GoO2Goe2GpO2GqO2GsO2Gse2Gs+2Gte2Guu2GvO2HgO2HmO2HtO2HuO2Ih+2Iie2IkO2IrO2Ire2IsO2ItO2IvO2Ive2Iv+2Jge2JiO2JnFwiXSxcbltcImM2NDFcIixcIu2eje2eju2ej+2ekVwiLDYsXCLtnprtnpztnp5cIiw1XSxcbltcImM2YTFcIixcIu2JpO2KgO2Kge2KhO2KiO2KkO2Kke2Kle2KnO2KoO2KpO2KrO2Kse2KuO2Kue2KvO2Kv+2LgO2Lgu2LiO2Lie2Li+2LlO2LmO2LnO2LpO2Lpe2LsO2Lse2LtO2LuO2MgO2Mge2Mg+2Mhe2MjO2Mje2Mju2MkO2MlO2Mlu2MnO2Mne2Mn+2MoO2Moe2Mpe2MqO2Mqe2MrO2MsO2MuO2Mue2Mu+2MvO2Mve2NhO2Nhe2NvO2Nve2OgO2OhO2OjO2Oje2Oj+2OkO2Oke2OmO2Ome2OnO2OoO2OqO2Oqe2Oq+2Ore2OtO2OuO2OvO2PhO2Phe2PiO2Pie2PkO2PmO2Poe2Po+2PrO2Pre2PsO2PtO2PvO2Pve2Pv+2QgVwiXSxcbltcImM3YTFcIixcIu2QiO2Qne2RgO2RhO2RnO2RoO2RpO2Rre2Rr+2RuO2Rue2RvO2Rv+2SgO2Sgu2SiO2Sie2Si+2Sje2SlO2Sqe2TjO2TkO2TlO2TnO2Tn+2TqO2TrO2TsO2TuO2Tu+2Tve2UhO2UiO2UjO2UlO2Ule2Ul+2UvO2Uve2VgO2VhO2VjO2Vje2Vj+2Vke2VmO2Vme2VnO2VoO2Vpe2VqO2Vqe2Vq+2Vre2VtO2Vte2VuO2VvO2WhO2Whe2Wh+2WiO2Wie2WkO2Wpe2XiO2Xie2XjO2XkO2Xku2XmO2Xme2Xm+2Xne2XpO2Xpe2XqO2XrO2XtO2Xte2Xt+2Xue2YgO2Yge2YhO2YiO2YkO2Yke2Yk+2YlO2Yle2YnO2YoFwiXSxcbltcImM4YTFcIixcIu2YpO2Yre2YuO2Yue2YvO2ZgO2Zhe2ZiO2Zie2Zi+2Zje2Zke2ZlO2Zle2ZmO2ZnO2Zp+2Zqe2ZsO2Zse2ZtO2ag+2ahe2ajO2aje2akO2alO2ane2an+2aoe2aqO2arO2asO2aue2au+2bhO2bhe2biO2bjO2bke2blO2bl+2bme2boO2bpO2bqO2bsO2bte2bvO2bve2cgO2chO2cke2cmO2cme2cnO2coO2cqO2cqe2cq+2cre2ctO2cte2cuO2cvO2dhO2dh+2die2dkO2dke2dlO2dlu2dl+2dmO2dme2doO2doe2do+2dpe2dqe2drO2dsO2dtO2dvO2dve2ege2eiO2eie2ejO2ekO2emO2eme2em+2enVwiXSxcbltcImNhYTFcIixcIuS8veS9s+WBh+WDueWKoOWPr+WRteWTpeWYieWrgeWutuaah+aetuaet+afr+atjOePgueXgueovOiLm+iMhOihl+iiiOiotuiziOi3j+i7u+i/pumnleWIu+WNtOWQhOaBquaFpOauvOePj+iEmuimuuinkumWo+S+g+WIiuWivuWluOWnpuW5suW5ueaHh+aPgOadhuafrOahv+a+l+eZjueci+ejteeoiOerv+ewoeiCneiJruiJseirq+mWk+S5q+WWneabt+a4tOeio+erreiRm+ikkOidjumeqOWLmOWdjuWgquW1jOaEn+aGvuaIoeaVouafkeaphOa4m+eUmOeWs+ebo+eesOe0uumCr+mRkemRkum+lVwiXSxcbltcImNiYTFcIixcIuWMo+WyrOeUsuiDm+mJgOmWmOWJm+WgiOWnnOWyoeW0l+W6t+W8uuW9iuaFt+axn+eVuueWhuezoOe1s+e2see+jOiFlOiIoeiWkeilgeism+mLvOmZjemxh+S7i+S7t+WAi+WHseWhj+aEt+aEvuaFqOaUueanqua8keeWpeeahueblueuh+iKpeiTi++kgOmOp+mWi+WWgOWuouWdke+kgeeys+e+uemGteWAqOWOu+WxheW3qOaLkuaNruaTmuaTp+a4oOeCrOelm+i3nei4nu+kgumBvemJhemLuOS5vuS7tuWBpeW3vuW7uuaEhuall+iFseiZlOi5h+mNtemoq+S5nuWCkeadsOahgOWEieWKjeWKkuaqolwiXSxcbltcImNjYTFcIixcIueevOmIkOm7lOWKq+aAr+i/suWBiOaGqeaPreaTiuagvOaqhOa/gOiGiOimoemalOWgheeJveeKrOeUhOe1uee5reiCqeimi+ittOmBo+m1keaKieaxuua9lOe1kOe8uuioo+WFvOaFiueuneismemJl+mOjOS6rOS/k+WAnuWCvuWEhuWLgeWLjeWNv+WdsOWig+W6muW+keaFtuaGrOaTjuaVrOaZr+aau+abtOail+a2h+eCheeDseeSn+eSpeeTiueXmeehrOejrOern+ertue1hee2k+iAleiAv+iEm+iOluitpui8lemAlemPoemgg+mguOmpmumvqOS/guWVk+WguuWlkeWto+WxhuaCuOaIkuahguaisFwiXSxcbltcImNkYTFcIixcIuajqOa6queVjOeZuOejjueoveezu+e5q+e5vOioiOiqoeiwv+majum3hOWPpOWPqeWRiuWRseWbuuWnkeWtpOWwu+W6q+aLt+aUt+aVheaVsuaaoOaer+angeayveeXvOeakOedvueov+e+lOiAg+iCoeiGj+iLpuiLveiPsOiXgeigseiitOiqpe+kg+i+nOmMrumbh+mhp+mrmOm8k+WTreaWm+absuaij+epgOiwt+m1oOWbsOWdpOW0keaYhuaiseajjea7vueQqOiinumvpOaxqO+khOmqqOS+m+WFrOWFseWKn+WtlOW3peaBkOaBreaLseaOp+aUu+ePmeepuuiao+iyoumej+S4suWvoeaIiOaenOeTnFwiXSxcbltcImNlYTFcIixcIuenkeiPk+iqh+iqsui3qOmBjumNi+mhhuW7k+anqOiXv+mDre+kheWGoOWumOWvrOaFo+ajuuasvueBjOeQr+eTmOeuoee9kOiPheingOiyq+mXnOmkqOWIruaBneaLrOmAguS+iuWFieWMoeWjmeW7o+aboOa0uOeCmueLguePluetkOiDsemRm+WNpuaOm+e9q+S5luWCgOWhiuWjnuaAquaEp+aLkOankOmtgeWuj+e0mOiCsei9n+S6pOWDkeWSrOWWrOWsjOW2oOW3p+aUquaVjuagoeapi+eLoeeajuefr+e1nue/ueiGoOiVjuibn+i8g+i9jumDiumkg+mplemuq+S4mOS5heS5neS7h+S/seWFt+WLvlwiXSxcbltcImNmYTFcIixcIuWNgOWPo+WPpeWSjuWYlOWdteWeouWvh+W2h+W7kOaHvOaLmOaVkeaeuOafqeani+atkOavhuavrOaxgua6neeBuOeLl+eOlueQg+eev+efqeeptue1v+iAieiHvOiIheiIiuiLn+ihouiss+izvOi7gOmAkemCsemJpOmKtumnkumphemzqem3l+m+nOWci+WxgOiPiumeoOmeq+m6tOWQm+eqmOe+pOijmei7jemDoeWggOWxiOaOmOeqn+WuruW8k+epueeqruiKjui6rOWApuWIuOWLuOWNt+WciOaLs+aNsuasiua3g+ect+WOpeeNl+iVqOi5tumXleacuuarg+a9sOiprei7jOmli++khuaZt+atuOiytFwiXSxcbltcImQwYTFcIixcIumsvO+kh+WPq+WcreWljuaPhuanu+ePquehheequuerheezvuiRteimj+i1s+mAtemWqOWLu+Wdh+eVh+etoOiPjOmInu+kiOapmOWFi+WJi+WKh+aIn+ajmOaltemameWDheWKpOWLpOaHg+aWpOagueanv+eRvueti+iKueiPq+imsuisuei/kemlie+kieS7iuWml+aTkuaYkeaqjueQtOemgeemveiKqeihvuihv+iln++kiumMpuS8i+WPiuaApeaJseaxsue0mue1puS6mOWFouefnOiCr+S8geS8juWFtuWGgOWXnOWZqOWcu+WfuuWfvOWklOWlh+Wmk+WvhOWykOW0juW3seW5vuW/jOaKgOaXl+aXo1wiXSxcbltcImQxYTFcIixcIuacnuacn+adnuaji+ajhOapn+asuuawo+axveaygua3h+eOmOeQpueQqueSgueSo+eVuOeVv+eigeejr+elgeelh+eliOeluueulee0gOe2uue+iOiAhuiAreiCjOiomOitj+ixiOi1t+mMoemMpOmjoumlkemojumoj+mppem6kue3iuS9tuWQieaLruahlOmHkeWWq+WEuu+ki++kjOWonOaHpu+kjeaLj+aLv++kjlwiLDUsXCLpgqPvpJRcIiw0LFwi6Ku+76SZ76Sa76Sb76Sc5pqW76Sd54WW76Se76Sf6Zuj76Sg5o2P5o265Y2X76Sh5p6P5qWg5rmz76Si55S376Sj76Sk76SlXCJdLFxuW1wiZDJhMVwiLFwi57SN76Sm76Sn6KGy5ZuK5aiY76SoXCIsNCxcIuS5g++kreWFp+WliOafsOiAkO+kruWls+W5tOaSmueniuW/teaBrOaLiOaNu+Wvp+Wvl+WKqu+kr+WltOW8qeaAku+ksO+kse+ksueRme+ks1wiLDUsXCLpp5HvpLlcIiwxMCxcIua/g++lhO+lheiGv+i+suaDse+lhu+lh+iFpu+liO+lieWwv++lilwiLDcsXCLlq6noqKXmnbvntJDvpZJcIiw1LFwi6IO976WY76WZ5bC85rOl5Yy/5rq65aSa6Iy2XCJdLFxuW1wiZDNhMVwiLFwi5Li55Lq25L2G5Zau5ZyY5aOH5b2W5pa35pem5qqA5q615rmN55+t56uv57Ce57ee6JuL6KKS6YSy6Y2b5pK75r6+542655a46YGU5ZWW5Z2N5oa65pOU5puH5reh5rmb5r2t5r6555ew6IGD6Ia96JWB6KaD6KuH6K2a6Yyf5rKT55WT562U6LiP6YGd5ZSQ5aCC5aGY5bmi5oiH5pKe5qOg55W257OW6J6z6buo5Luj5Z6I5Z2u5aSn5bCN5bKx5bi25b6F5oi05pOh546z6Ie66KKL6LK46ZqK6bub5a6F5b635oKz5YCS5YiA5Yiw5ZyW5aC15aGX5bCO5bGg5bO25baL5bqm5b6S5oK85oyR5o6J5pCX5qGDXCJdLFxuW1wiZDRhMVwiLFwi5qO55quC5reY5rih5ruU5r+k54e+55uc552556ax56i76JCE6Kap6LOt6Lez6LmI6YCD6YCU6YGT6YO96Y2N6Zm26Z+c5q+S54CG54mY54qi542o552j56a/56+k57qb6K6A5aKp5oOH5pWm5pe95pq+5rKM54Se54eJ6LGa6aCT5Lmt56qB5Lud5Yas5YeN5YuV5ZCM5oan5p2x5qGQ5qOf5rSe5r2855a8556z56ul6IO06JGj6YqF5YWc5paX5p2c5p6T55eY56uH6I2z76Wa6LGG6YCX6aCt5bGv6IeA6Iqa6YGB6YGv6YiN5b6X5bad5qmZ54eI55m7562J6Jek6KyE6YSn6aiw5ZaH5oe276Wb55mp576FXCJdLFxuW1wiZDVhMVwiLFwi6Ji/6J666KO46YKP76Wc5rSb54OZ54+e57Wh6JC976Wd6YWq6aex76We5LqC5Y215qyE5qyS54C+54ib6Jit6bie5YmM6L6j5bWQ5pOl5pSs5qyW5r+r57GD57qc6JeN6KWk6Ka95ouJ6IeY6KCf5buK5pyX5rWq54u855CF55Gv6J6C6YOe5L6G5bSN5b6g6JCK5Ya35o6g55Wl5Lqu5YCG5YWp5YeJ5qKB5qiR57Ku57Kx57On6Imv6KuS6Lyb6YeP5L625YS35Yu15ZGC5bus5oWu5oi+5peF5qua5r++56Sq6Jec6KCj6Zat6ami6amq6bqX6buO5Yqb5puG5q2354Cd56Sr6L2i6Z2C5oaQ5oiA5pSj5ryjXCJdLFxuW1wiZDZhMVwiLFwi54WJ55KJ57e06IGv6JOu6Lym6YCj6Y2K5Ya95YiX5Yqj5rSM54OI6KOC5buJ5paC5q6u5r+C57C+54215Luk5Ly25Zu576Wf5bK65ba65oCc546y56yt576a57+O6IGG6YCe6Yi06Zu26Z2I6aCY6b2h5L6L5r6n56au6Ya06Zq35Yue76Wg5pKI5pOE5quT5r2e54CY54iQ55un6ICB6JiG6Jmc6Lev6LyF6Zyy6a2v6be66bm156KM56W/57ag6I+J6YyE6bm/6bqT6KuW5aOf5byE5pyn54Cn55OP57Gg6IG+5YSh54Co54mi56OK6LOC6LOa6LO06Zu35LqG5YOa5a+u5buW5paZ54eO55mC556t6IGK6JO8XCJdLFxuW1wiZDdhMVwiLFwi6YG86ayn6b6N5aOY5amB5bGi5qiT5rea5ryP55i757Sv57i36JSe6KS46Y+k6ZmL5YqJ5peS5p+z5qa05rWB5rqc54CP55CJ55Gg55WZ55ik56Gr6Kys6aGe5YWt5oiu6Zm45L6W5YCr5bSZ5req57a46Lyq5b6L5oWE5qCX76Wh6ZqG5YuS6IKL5Yec5YeM5qWe56ic57a+6I+x6Zm15L+a5Yip5Y6Y5ZCP5ZSO5bGl5oKn5p2O5qKo5rWs54qB54u455CG55KD76Wi55ei57Gs572557646I6J6KOP6KOh6YeM6YeQ6Zui6a+J5ZCd5r2+54eQ55KY6Je66Lqq6Zqj6bGX6bqf5p6X5reL55Cz6Ieo6ZyW56CsXCJdLFxuW1wiZDhhMVwiLFwi56uL56yg57KS5pGp55Gq55ey56K856Oo6aas6a2U6bq75a+e5bmV5ryg6Iac6I6r6YKI5LiH5Y2N5aip5beS5b2O5oWi5oy95pmp5pu85ru/5ryr54Gj556e6JCs6JST6KC76LyT6aWF6bC75ZSc5oq55pyr5rKr6IyJ6KWq6Z265Lqh5aaE5b+Y5b+Z5pyb57ay572U6IqS6Iyr6I696Lye6YKZ5Z+L5aa55aqS5a+Q5pin5p6a5qKF5q+P54Wk57216LK36LOj6YKB6a2F6ISI6LKK6ZmM6amA6bql5a2f5rCT54yb55uy55uf6JCM5Yaq6KaT5YWN5YaV5YuJ5qOJ5rKU55yE55yg57a/57es6Z2i6bq15ruFXCJdLFxuW1wiZDlhMVwiLFwi6JSR5Yal5ZCN5ZG95piO5pqd5qSn5rqf55q/556R6IyX6JOC6J6f6YWp6YqY6bO06KKC5L6u5YaS5Yuf5aeG5bi95oWV5pG45pG55pqu5p+Q5qih5q+N5q+b54mf54mh55GB55y455+b6ICX6Iq86IyF6KyA6Kyo6LKM5pyo5rKQ54mn55uu552m56mG6bap5q2/5rKS5aSi5pym6JKZ5Y2v5aKT5aaZ5buf5o+P5pi05p2z5ri654yr56uX6IuX6Yyo5YuZ5ber5oau5oeL5oiK5ouH5pKr5peg5qWZ5q2m5q+L54Sh54+355Wd57mG6Iie6IyC6JWq6Kqj6LK/6Zyn6bWh5aKo6buY5YCR5YiO5ZC75ZWP5paHXCJdLFxuW1wiZGFhMVwiLFwi5rG257SK57SL6IGe6JqK6ZaA6Zuv5Yu/5rKV54mp5ZGz5aqa5bC+5bWL5b2M5b6u5pyq5qK25qWj5ri85rmE55yJ57Gz576O6JaH6KyO6L+36Z2h6bu05bK35oK25oSN5oar5pWP5pe75pe85rCR5rOv546f54+J57eh6ZaU5a+G6Jyc6KyQ5Ymd5Y2a5ouN5pCP5pKy5py05qi45rOK54+A55Ke566U57KV57ib6IaK6Ii26JaE6L+r6Zu56aeB5Ly05Y2K5Y+N5Y+b5ouM5pCs5pSA5paR5qeD5rOu5r2Y54+t55WU55ii55uk55u856OQ56O756Ss57WG6Iis6J+g6L+U6aCS6aOv5YuD5ouU5pKl5rik5r2RXCJdLFxuW1wiZGJhMVwiLFwi55m86LeL6Yax6Ymi6auu6a2D5YCj5YKN5Z2K5aao5bCo5bmH5b235oi/5pS+5pa55peB5piJ5p6L5qac5ruC56OF57Sh6IKq6IaA6Iir6Iqz6JKh6JqM6Kiq6KyX6YKm6Ziy6b6Q5YCN5L+z76Wj5Z+55b6Y5ouc5o6S5p2v5rmD54SZ55uD6IOM6IOa6KO06KO16KSZ6LOg6Lyp6YWN6Zmq5Lyv5L2w5bib5p+P5qCi55m955m+6a2E5bmh5qiK54Wp54eU55Wq76Wk57mB6JWD6Jep6aOc5LyQ562P572w6Zal5Yeh5biG5qK15rC+5rGO5rOb54qv56+E6IyD5rOV55C65YO75YqI5aOB5pOY5qqX55Kn55mWXCJdLFxuW1wiZGNhMVwiLFwi56Kn6JiX6Zei6Zy576Wl5Y2e5byB6K6K6L6o6L6v6YKK5Yil556l6bGJ6byI5LiZ5YCC5YW15bGb5bm35pie5pi65p+E5qOF54Kz55SB55eF56eJ56ud6Lyn6aSg6aiI5L+d5aCh5aCx5a+25pmu5q2l5rSR5rm65r2954+k55Sr6I+p6KOc6KST6K2c6LyU5LyP5YOV5YyQ5Y2c5a6T5b6p5pyN56aP6IW56Iyv6JSU6KSH6KaG6Ly56Ly76aal6bCS5pys5Lm25L+45aWJ5bCB5bOv5bOw5o2n5qOS54O954ai55Cr57ir6JOs6JyC6YCi6YuS6bOz5LiN5LuY5L+v5YKF5YmW5Ymv5ZCm5ZKQ5Z+g5aSr5ammXCJdLFxuW1wiZGRhMVwiLFwi5a2a5a215a+M5bqc76Wm5om25pW35pan5rWu5rql54i256ym57C/57y26IWQ6IWR6Iaa6ImA6IqZ6I6p6KiD6LKg6LOm6LO76LW06La66YOo6Yec6Zic6ZmE6aeZ6bOn5YyX5YiG5ZCp5Zm05aKz5aWU5aWu5b+/5oak5omu5piQ5rG+54Sa55uG57KJ57Oe57Sb6Iqs6LOB6Zuw76Wn5L2b5byX5b2/5ouC5bSp5pyL5qOa56G857mD6bWs5LiV5YKZ5YyV5Yyq5Y2R5aaD5ami5bqH5oKy5oaK5omJ5om55paQ5p6H5qan5q+U5q+W5q+X5q+Y5rK476Wo55C155e656CS56KR56eV56eY57KD57eL57+h6IKlXCJdLFxuW1wiZGVhMVwiLFwi6IS+6IeC6I+y6Jya6KOo6Kq56K2s6LK76YSZ6Z2e6aOb6by75Zqs5ayq5b2s5paM5qqz5q6v5rWc5r+x54CV54md546t6LKn6LOT6aC75oaR5rC36IGY6aiB5LmN5LqL5Lqb5LuV5Ly65Ly85L2/5L+f5YO/5Y+y5Y+45ZSG5Zej5Zub5aOr5aWi5aiR5a+r5a+65bCE5bez5bir5b6Z5oCd5o2o5pac5pav5p+25p+75qKt5q275rKZ5rOX5rij54CJ542F56CC56S+56WA56Wg56eB56+p57SX57Wy6IKG6IiN6I6O6JOR6JuH6KOf6KmQ6Kme6Kyd6LOc6LWm6L6t6YKq6aO86aef6bqd5YmK76Wp5pyU76WqXCJdLFxuW1wiZGZhMVwiLFwi5YKY5Yiq5bGx5pWj5rGV54+K55Sj55ad566X6JKc6YW46Zyw5Lm35pKS5q6654We6Jap5LiJ76Wr5p2J5qOu5riX6Iqf6JSY6KGr5o+35r6B6YiS6aKv5LiK5YK35YOP5YSf5ZWG5Zaq5ZiX5a2A5bCZ5bOg5bi45bqK5bqg5buC5oOz5qGR5qmh5rmY54i954mA54uA55u456Wl566x57+U6KOz6Ke06Kmz6LGh6LOe6Zyc5aGe55K96LO95ZeH76Ws56mh57Si6Imy54my55Sf55Sl76Wt56yZ5aKF5aO75ba85bqP5bq25b6Q5oGV5oqS5o2/5pWN5pqR5puZ5pu45qCW5qOy54qA55Ge562u57Wu57eW572yXCJdLFxuW1wiZTBhMVwiLFwi6IOl6IiS6Jav6KW/6KqT6YCd6Yuk6buN6byg5aSV5aWt5bit5oOc5piU5pmz5p6Q5rGQ5reF5r2f55+z56Kp6JOG6YeL6Yyr5LuZ5YOK5YWI5ZaE5ayL5a6j5omH5pW+5peL5riy54W955CB55GE55KH55K/55ms56aq57ea57mV576o6IW66Iaz6Ii56Jia6J+s6Km16Lej6YG46YqR6ZCl6aWN6a6u5Y2o5bGR5qWU5rOE5rSp5rir6IiM6Jab6KS76Kit6Kqq6Zuq6b2n5Ymh5pq55q6y57qW6J++6LSN6ZaD6Zmd5pSd5raJ54eu76Wu5Z+O5aeT5a6s5oCn5oO65oiQ5pif5pmf54yp54+555ub55yB562sXCJdLFxuW1wiZTFhMVwiLFwi6IGW6IGy6IWl6Kqg6YaS5LiW5Yui5q2y5rSX56iF56y557Sw76Wv6LKw5Y+s5Ziv5aGR5a615bCP5bCR5bei5omA5o6D5pCU5pit5qKz5rK85raI5rqv54Cf54Kk54eS55Sm55aP55aO55iZ56yR56+g57Cr57Sg57S56JSs6JWt6JiH6Ki06YCN6YGh6YK16Yq36Z+26ai35L+X5bGs5p2f5raR57Kf57qM6KyW6LSW6YCf5a2r5be95pCN6JOA6YGc6aOh546H5a6L5oKa5p2+5ree6Kif6Kqm6YCB6aCM5Yi376Ww54GR56KO6Y6W6KGw6YeX5L+u5Y+X5Ze95Zua5Z6C5aO95auC5a6I5bKr5bOA5bil5oSBXCJdLFxuW1wiZTJhMVwiLFwi5oiN5omL5o6I5pCc5pS25pW45qi55q6K5rC05rSZ5ryx54en54up542455CH55Ky55im552h56eA56mX56uq57K557aP57as57mh576e6ISp6Iyx6JKQ6JOa6Jeq6KKW6Kqw6K6Q6Ly46YGC6YKD6YWs6YqW6Yq56ZqL6Zqn6Zqo6ZuW6ZyA6aCI6aaW6auT6aya5Y+U5aG+5aSZ5a2w5a6/5reR5r2a54af55Ch55K56IKF6I+95beh5b6H5b6q5oGC5pes5qCS5qWv5qmT5q6J5rS15rez54+j55u+556s562N57SU6ISj6Iic6I2A6JO06JWj6Kmi6KuE6YaH6Yye6aCG6aa05oiM6KGT6L+w6Yml5bSH5bSnXCJdLFxuW1wiZTNhMVwiLFwi5bWp55Gf6Iad6J2o5r+V5ou+57+S6KS26KWy5Lie5LmY5YOn5Yud5Y2H5om/5piH57mp6KCF6Zme5L6N5YyZ5Zi25aeL5aqk5bC45bGO5bGN5biC5byR5oGD5pa95piv5pmC5p6+5p+054yc55+i56S657+F6JKU6JON6KaW6Kmm6Kmp6Kuh6LGV6LG65Z+05a+U5byP5oGv5out5qSN5q6W5rmc54aE56+S6J2V6K2Y6Lu+6aOf6aO+5Ly45L6B5L+h5ZG75aig5a645oS85paw5pmo54e855Sz56We57Sz6IWO6Iej6I6Y6Jaq6JeO6JyD6KiK6Lqr6L6b76Wx6L+F5aSx5a6k5a+m5oKJ5a+p5bCL5b+D5rKBXCJdLFxuW1wiZTRhMVwiLFwi76Wy5rex54CL55Sa6Iqv6Ku25LuA5Y2B76Wz6ZuZ5rCP5Lqe5L+E5YWS5ZWe5ail5bOo5oiR54mZ6Iq96I6q6Ju+6KGZ6Kid6Zi/6ZuF6aST6bSJ6bWd5aCK5bKz5ba95bmE5oOh5oSV5o+h5qiC5ril6YSC6Y2U6aGO6bCQ6b235a6J5bK45oyJ5pmP5qGI55y86ZuB6Z6N6aGU6a6f5pah6KyB6LuL6Za85ZS15bKp5beW5bq15pqX55mM6I+06ZeH5aOT5oq854uO6bSo5Luw5aSu5oCP5pi75q6D56en6bSm5Y6T5ZOA5Z+D5bSW5oSb5puW5rav56KN6Im+6ZqY6Z2E5Y6E5om85o6W5ray57iK6IWL6aGNXCJdLFxuW1wiZTVhMVwiLFwi5qu7572M6bav6bia5Lmf5YC75Ya25aSc5oO55o+25qSw54i66IC276W06YeO5byx76W176W257SE6Iul6JGv6JK76Jel6LqN76W35L2v76W476W55aOk5a2D5oGZ5o+a5pSY5pWt5pqY76W65qWK5qij5rSL54CB54Ws55eS55iN56az56mw76W7576K76W86KWE76W96K6T6YeA6Zm976W+6aSK5ZyE5b6h5pa85ryB55iA56am6Kqe6aat6a2a6b2s5YSE5oa25oqR5qqN6IeG5YGD5aCw5b2m54SJ6KiA6Ku65a286JiW5L+65YS85Zq05aWE5o6p5re55baq5qWt5YaG5LqI5L2Z76W/76aA76aB5aaC76aCXCJdLFxuW1wiZTZhMVwiLFwi76aD5q2f5rGd76aE55K156SW76aF6IiH6ImF6Iy56Ly/6L2d76aG6aSY76aH76aI76aJ5Lqm76aK5Z+f5b255piT76aL76aM55ar57m56K2v76aN6YCG6amb5Zql5aCn5ae45aif5a6076aO5bu276aP76aQ5o2Q5oy776aR5qS95rKH5rK/5raO5raT5re15ryU76aS54Of54S254WZ76aT54eD54eV76aU56GP56Gv76aV562157ej76aW57iv76aX6KGN6Luf76aY76aZ76aa6Ymb76ab6bO276ac76ad76ae5oKF5raF76af54ax76ag76ah6Zax5Y6t76ai76aj76ak5p+T76al54KO54Sw55Cw6Im26IuSXCJdLFxuW1wiZTdhMVwiLFwi76am6Za76aul6bm95puE76an54eB6JGJ76ao76ap5aGL76aq76ar5ba45b2x76as5pig5pqO5qW55qau5rC45rOz5ri25r2B5r+a54Cb54Cv54WQ54ef542w76at55Gb76au55OU55uI56mO57qT76av76aw6Iux6Kmg6L+O76ax6Y2I76ay6ZyZ76az76a05LmC5YCq76a15YiI5Y+h5puz5rGt5r+K54yK552/56mi6Iqu6Jed6JiC76a26KOU6Kmj6K296LGr76a36Yqz76a46ZyT6aCQ5LqU5LyN5L+J5YKy5Y2I5ZC+5ZCz5Zea5aGi5aK65aWn5aib5a+k5oKf76a55oeK5pWW5pe/5pmk5qKn5rGa5r6zXCJdLFxuW1wiZThhMVwiLFwi54OP54as542S56296JyI6Kqk6bCy6byH5bGL5rKD542E546J6Yi65rqr55Gl55if56mp57iV6JiK5YWA5aOF5pOB55Ou55SV55mw57+B6YKV6ZuN6aWU5rim55Om56qp56qq6Iel6JuZ6J246Kib5amJ5a6M5a6b5qKh5qSA5rWj546p55CT55Cs56KX57ep57+r6ISY6IWV6I6e6LGM6Ziu6aCR5puw5b6A5pe65p6J5rGq546L5YCt5aiD5q2q55+u5aSW5bWs5beN54yl55WP76a676a75YOl5Ye55aCv5aSt5aaW5aea5a+l76a876a95bai5ouX5pCW5pKT5pO+76a+5puc76a/5qmI76eA54e/55Gk76eBXCJdLFxuW1wiZTlhMVwiLFwi56qI56qv57mH57me6ICA6IWw76eC6J+v6KaB6Kyg6YGZ76eD6YKA6aWS5oW+5qyy5rW057if6KSl6L6x5L+R5YKt5YaX5YuH5Z+H5aKJ5a655bq45oWC5qaV5raM5rmn5rq254aU55Gi55So55Ss6IGz6Iy46JOJ6LiK6Y6U6Y+e76eE5LqO5L2R5YG25YSq5Y+I5Y+L5Y+z5a6H5a+T5bCk5oSa5oaC5pe054mb546X55GA55uC56WQ56aR56a557SG57696IqL6JeV6Jme6L+C6YGH6YO16Yeq6ZqF6Zuo6Zup5YuW5b2n5pet5pix5qCv54Wc56i26YOB6aCK5LqR76eF5qmS5q6e5r6Q54aJ6ICY6Iq46JWTXCJdLFxuW1wiZWFhMVwiLFwi6YGL6ZqV6Zuy6Z+76JSa6ayx5LqQ54aK6ZuE5YWD5Y6f5ZOh5ZyT5ZyS5Z6j5aqb5auE5a+D5oCo5oS/5o+05rKF5rS55rmy5rqQ54iw54y/55GX6IuR6KKB6L2F6YGg76eG6Zmi6aGY6bSb5pyI6LaK6Yme5L2N5YGJ5YOe5Y2x5ZyN5aeU5aiB5bCJ5oWw5pqQ5rit54iy55GL57ev6IOD6JCO6JGm6JS/6J2f6KGb6KSY6KyC6YGV6Z+L6a2P5Lmz5L6R5YSS5YWq76eH5ZSv5Zap5a265a6l5bm85bm95bq+5oKg5oOf5oSI5oSJ5o+E5pS45pyJ76eI5p+U5p+a76eJ5qWh5qWi5rK55rSn76eK5ri476eLXCJdLFxuW1wiZWJhMVwiLFwi5r+h54y254y376eM55Gc55Sx76eN55mS76eO76eP57at6Ie+6JC46KOV6KqY6Kub6Kut6Liw6LmC6YGK6YC+6YG66YWJ6YeJ6Y2u76eQ76eR5aCJ76eS5q+T6IKJ6IKy76eT76eU5YWB5aWr5bC576eV76eW5r2k546n6IOk6LSH76eX6YiX6ZaP76eY76eZ76ea76eb6IG/5oiO54Cc57Wo6J6N76ec5Z6g5oGp5oWH5q636Kq+6YqA6Zqx5LmZ5ZCf5rer6JSt6Zmw6Z+z6aOu5o+W5rOj6YKR5Yed5oeJ6Ia66be55L6d5YCa5YSA5a6c5oSP5oe/5pOs5qSF5q+F55aR55+j576p6Imk6JaP6J+76KGj6Kq8XCJdLFxuW1wiZWNhMVwiLFwi6K2w6Yar5LqM5Lul5LyK76ed76ee5aS35aeo76ef5bey5byb5b2b5oCh76eg76eh76ei76ej54i+54+l76ek55Ww55eN76el56e776em6ICM6ICz6IKE6Iuh6I2R76en76eo6LK96LKz6YKH76ep76eq6aO06aSM76er76es54C355uK57+K57+M57+86Kya5Lq65LuB5YiD5Y2w76et5ZK95Zug5ae75a+F5byV5b+N5rmu76eu76ev57Wq6Iy176ew6JqT6KqN76ex6Z2t6Z2376ey76ez5LiA5L2a5L2+5aO55pel5rqi6YC46Y6w6aa55Lu75aOs5aaK5aeZ5oGB76e076e156iU76e26I2P6LOD5YWl5Y2EXCJdLFxuW1wiZWRhMVwiLFwi76e376e476e55LuN5Ymp5a2V6Iq/5LuU5Yi65ZKo5aeJ5ae/5a2Q5a2X5a2c5oGj5oWI5ruL54KZ54Wu546G55O355a156OB57Sr6ICF6Ieq6Iyo6JSX6JeJ6Kuu6LOH6ZuM5L2c5Yu65Zq85par5pio54G854K454i157a96IqN6YWM6ZuA6bWy5a2x5qOn5q6Y5r2655ue5bKR5pqr5r2b566057Cq6KC26Zuc5LiI5LuX5Yyg5aC05aK75aOv5aWs5bCH5biz5bqE5by15o6M5pqy5p2W5qif5qqj5qyM5ry/54mG76e6542Q55KL56ug57Kn6IW46Ief6Ien6I6K6JGs6JSj6JaU6JeP6KOd6LST6Yas6ZW3XCJdLFxuW1wiZWVhMVwiLFwi6Zqc5YaN5ZOJ5Zyo5a6w5omN5p2Q5qC95qKT5ri95ruT54G957ih6KOB6LKh6LyJ6b2L6b2O54it566P6KuN6Yya5L2H5L2O5YSy5ZKA5aeQ5bqV5oq15p215qWu5qiX5rKu5ria54uZ54yq55a9566457S16Iun6I+56JGX6Je36Kmb6LKv6LqH6YCZ6YK46ZuO6b2f5Yuj5ZCK5auh5a+C5pGY5pW15ru054uE76e755qE56mN56yb57GN57i+57+f6I276Kyr6LOK6LWk6Leh6Lmf6L+q6L+56YGp6Y+R5L2D5L265YKz5YWo5YW45YmN5Ymq5aGh5aG85aWg5bCI5bGV5bub5oKb5oiw5qCT5q6/5rCI5r6xXCJdLFxuW1wiZWZhMVwiLFwi54WO55Cg55Sw55S455WR55my562M566L566t56+G57qP6Kmu6Ly+6L2J6Yi/6YqT6Yyi6ZCr6Zu76aGa6aGr6aSe5YiH5oiq5oqY5rWZ55mk56uK56+A57W25Y2g5bK+5bqX5ry454K557KY6ZyR6a6O6bue5o6l5pG66J225LiB5LqV5Lqt5YGc5YG15ZGI5aeD5a6a5bmA5bqt5bu35b6B5oOF5oy65pS/5pW05peM5pm25pm45p++5qWo5qqJ5q2j5rGA5reA5reo5rif5rme54Ce54Kh546O54+955S6552b56KH56aO56iL56m957K+57aO6ImH6KiC6Kuq6LKe6YSt6YWK6YeY6Ymm6YuM6Yyg6ZyG6Z2WXCJdLFxuW1wiZjBhMVwiLFwi6Z2c6aCC6byO5Yi25YqR5ZW85aCk5bid5byf5oKM5o+Q5qKv5r+f56Wt56ys6IeN6Ja66KO96Ku46LmE6YaN6Zmk6Zqb6Zy96aGM6b2K5L+O5YWG5YeL5Yqp5Ziy5byU5b2r5o6q5pON5pep5pmB5pu65pu55pyd5qKd5qOX5qe95ryV5r2u54Wn54el54iq55Kq55y656WW56Wa56ef56ig56qV57KX57Of57WE57mw6IKH6Je76Jqk6KmU6Kq/6LaZ6LqB6YCg6YGt6Yej6Zi76ZuV6bOl5peP57CH6Laz6Y+D5a2Y5bCK5Y2S5ouZ54yd5YCn5a6X5b6e5oKw5oWr5qOV5reZ55Cu56iu57WC57ac57ix6IWrXCJdLFxuW1wiZjFhMVwiLFwi6Liq6Li16Y2+6ZCY5L2Q5Z2Q5bem5bqn5oyr572q5Li75L2P5L6P5YGa5aed6IOE5ZGq5ZGo5Ze+5aWP5a6Z5bee5bua5pmd5pyx5p+x5qCq5rOo5rSy5rmK5r6N54K354+g55aH57GM57SC57Ss57ai6Iif6Jub6Ki76KqF6LWw6LqK6Lyz6YCx6YWO6YWS6ZGE6aeQ56u557Kl5L+K5YSB5YeG5Z+I5a+v5bO75pmZ5qi95rWa5rqW5r+s54SM55Wv56uj6KCi6YCh6YG16ZuL6ae/6IyB5Lit5Luy6KGG6YeN5Y295qub5qWr5rGB6JG65aKe5oaO5pu+5ouv54Od55SR55eH57mS6JK46K2J6LSI5LmL5Y+qXCJdLFxuW1wiZjJhMVwiLFwi5ZKr5Zyw5Z2A5b+X5oyB5oyH5pGv5pSv5peo5pm65p6d5p6z5q2i5rGg5rKa5rys55+l56Cl56WJ56WX57SZ6IKi6ISC6Iez6Iqd6Iq36JyY6KqM76e86LSE6La+6YGy55u056iZ56i357mU6IG35ZSH5ZeU5aG15oyv5pCi5pmJ5pmL5qGt5qab5q6E5rSl5rqx54+N55Go55Kh55Wb55a555uh55ye556L56em57iJ57id6Ie76JSv6KKX6Ki66LOR6Lur6L6w6YCy6Y6t6Zmj6Zmz6ZyH5L6E5Y+x5aeq5auJ5biZ5qGO55OG55a+56ep56qS6Iaj6Jut6LOq6LeM6L+t5paf5pyV76e95Z+35r2X57ed6LyvXCJdLFxuW1wiZjNhMVwiLFwi6Y+26ZuG5b615oey5r6E5LiU5L6Y5YCf5Y+J5Zef5bWv5beu5qyh5q2k56OL566a76e+6LmJ6LuK6YGu5o2J5pC+552A56qE6Yyv6ZG/6b2q5pKw5r6v54em55Ko55Oa56uE57CS57qC57Ky57qY6K6a6LSK6ZG96aSQ6aWM5Yi55a+f5pOm5pyt57Su5YOt5Y+D5aG55oWY5oWZ5oe65pas56uZ6K6S6K6W5YCJ5YCh5Ym15ZSx5ai85bug5b2w5oS05pWe5piM5pi25pqi5qeN5ruE5ryy54yW55ih56qT6IS56ImZ6I+W6JK85YK15Z+w5a+A5a+o5b2p5o6h56Cm57a16I+c6JSh6YeH6Ye15YaK5p+1562WXCJdLFxuW1wiZjRhMVwiLFwi6LKs5YeE5aa75oK96JmV5YCc76e/5YmU5bC65oW95oia5ouT5pOy5pal5ruM55ig6ISK6Lmg6Zmf6Zq75Luf5Y2D5ZaY5aSp5bed5pOF5rOJ5re6546U56m/6Iib6Jam6LOk6LiQ6YG36Yen6Zeh6Zih6Z+G5Ye45ZOy5ZaG5b655pKk5r6I57a06Lyf6L2N6ZC15YOJ5bCW5rK+5re755Sb556757C957Gk6Km56KuC5aCe5aa+5biW5o2354mS55aK552r6Kuc6LK86LyS5buz5pm05re46IG96I+B6KuL6Z2R6a+W76iA5YmD5pu/5raV5ruv57eg6Kum6YCu6YGe6auU5Yid5Ym/5ZOo5oaU5oqE5oub5qKiXCJdLFxuW1wiZjVhMVwiLFwi5qSS5qWa5qi154KS54Sm56Gd56SB56SO56eS56iN6IKW6Im46IuV6I2J6JWJ6LKC6LaF6YWi6YaL6Yau5L+D5ZuR54et55+X6JyA6Ke45a+45b+W5p2R6YKo5Y+i5aGa5a+15oKk5oaB5pGg57i96IGw6JSl6YqD5pKu5YKs5bSU5pyA5aKc5oq95o6o5qSO5qW45qie5rmr55q656eL6Iq76JCp6KuP6Lao6L+96YSS6YWL6Yac6YyQ6YyY6Y6a6Zub6ai26bCN5LiR55Wc56Wd56u6562R56+J57iu6JOE6LmZ6Lm06Lu46YCQ5pil5qS/55GD5Ye65pyu6buc5YWF5b+g5rKW6J+y6KGd6KG35oK06Ia16JCDXCJdLFxuW1wiZjZhMVwiLFwi6LSF5Y+W5ZC55Zi05ai25bCx54KK57+g6IGa6ISG6Iet6Laj6YaJ6amf6bey5YG05LuE5Y6g5oO75ris5bGk5L6I5YCk5Zek5bOZ5bmf5oGl5qKU5rK75reE54a+55eU55e055mh56ia56mJ57eH57e7572u6Ie06Jqp6Lyc6ZuJ6aaz6b2S5YmH5YuF6aOt6Kaq5LiD5p+S5ryG5L615a+i5p6V5rKI5rW455Cb56Cn6Yed6Y286J+E56ek56ix5b+r5LuW5ZKk5ZS+5aKu5aal5oOw5omT5ouW5py25qWV6Ii16ZmA6aax6aed5YCs5Y2T5ZWE5Z2876iB5omY76iC5pOi5pmr5p+d5r+B5r+v55Ci55C46KiXXCJdLFxuW1wiZjdhMVwiLFwi6ZC45ZGR5ZiG5Z2m5b2I5oaa5q2O54GY54Kt57a76KqV5aWq6ISr5o6i55yI6IC96LKq5aGU5pCt5qa75a6V5biR5rmv76iD6JWp5YWM5Y+w5aSq5oCg5oWL5q6G5rGw5rOw56ye6IOO6IuU6LeG6YKw6aKx76iE5pOH5r6k5pKR5pSE5YWO5ZCQ5Zyf6KiO5oWf5qG276iF55eb562S57Wx6YCa5aCG5qeM6IW/6KSq6YCA6aC55YG45aWX5aas5oqV6YCP6ayq5oWd54m56ZeW5Z2h5amG5be05oqK5pKt5pO65p235rOi5rS+54is55C256C057236Iqt6Leb6aCX5Yik5Z2C5p2/54mI55Oj6LKp6L6m6YiRXCJdLFxuW1wiZjhhMVwiLFwi6Ziq5YWr5Y+t5o2M5L2p5ZSE5oKW5pWX5rKb5rW/54mM54u956iX6KaH6LKd5b2t5r6O54O56Iao5oSO5L6/5YGP5omB54mH56+H57eo57+p6YGN6Z6t6aiZ6LK25Z2q5bmz5p6w6JCN6KmV5ZCg5ayW5bmj5bui5byK5paD6IK66JS96ZaJ6Zmb5L2I5YyF5YyN5YyP5ZKG5ZO65ZyD5biD5oCW5oqb5oqx5o2V76iG5rOh5rWm55ax56Cy6IOe6ISv6Iue6JGh6JKy6KKN6KSS6YCL6Yuq6aO96a6R5bmF5pq05pud54CR54iG76iH5L+15Ym95b2q5oWT5p2T5qiZ5ryC55Oi56Wo6KGo6LG56aOH6aOE6amDXCJdLFxuW1wiZjlhMVwiLFwi5ZOB56if5qWT6Ku36LGK6aKo6aau5b285oqr55ay55qu6KKr6YG/6ZmC5Yy55by85b+F5rOM54+M55Wi55aL562G6Iu+6aad5LmP6YC85LiL5L2V5Y6m5aSP5buI5piw5rKz55GV6I236J2m6LOA6YGQ6Zye6bCV5aOR5a246JmQ6KyU6ba05a+S5oGo5oKN5pex5rGX5ryi5r6j54Ca572V57+w6ZaR6ZaS6ZmQ6Z+T5Ymy6L2E5Ye95ZCr5ZK45ZWj5ZaK5qq75ra157eY6Imm6Yqc6Zm36bm55ZCI5ZOI55uS6Juk6Zak6ZeU6Zmc5Lqi5LyJ5aeu5aum5be35oGS5oqX5p2t5qGB5rKG5riv57y46IKb6IiqXCJdLFxuW1wiZmFhMVwiLFwi76iI76iJ6aCF5Lql5YGV5ZKz5Z6T5aWa5a2p5a6z5oeI5qW35rW354Cj6J+56Kej6Kmy6Kun6YKC6aet6aq45Yq+5qC45YCW5bm45p2P6I2H6KGM5Lqr5ZCR5Zqu54+m6YSV6Z+/6aSJ6aWX6aaZ5ZmT5aKf6Jmb6Kix5oay5qu254276LuS5q2H6Zqq6amX5aWV54iA6LWr6Z2p5L+U5bO05bym5oe45pmb5rOr54Kr546E546554++55yp552N57WD57Wi57ij6Ii36KGS76iK6LOi6YmJ6aGv5a2R56m06KGA6aCB5auM5L+g5Y2U5aS+5bO95oy+5rW554u56ISF6ISH6I6i6YuP6aCw5Lqo5YWE5YiR5Z6LXCJdLFxuW1wiZmJhMVwiLFwi5b2i5rOC5ruO54CF54GQ54Kv54aS54+p55Gp6I2K6J6i6KGh6YCI6YKi6Y6j6aao5YWu5b2X5oOg5oWn5pqz6JWZ6LmK6Yav6Z6L5LmO5LqS5ZG85aOV5aO65aW95bK15byn5oi25omI5piK5pmn5q+r5rWp5reP5rmW5ru45r6U5r+g5r+p54Gd54uQ55Cl55Ga55Og55qT56Wc57OK57ie6IOh6Iqm6JGr6JK/6JmO6Jmf6J206K236LGq6Y6s6aCA6aGl5oOR5oiW6YW35ama5piP5re35ri+55C/6a2C5b+95oOa56yP5ZOE5byY5rGe5rOT5rSq54OY57SF6Jm56KiM6bS75YyW5ZKM5ayF5qi654Gr55W1XCJdLFxuW1wiZmNhMVwiLFwi56aN56a+6Iqx6I+v6Kmx6K2B6LKo6Z2076iL5pO05pSr56K656K756mr5Li45Zaa5aWQ5a6m5bm75oKj5o+b5q2h5pml5qGT5riZ54Wl55Kw57SI6YKE6amp6bCl5rS75ruR54y+6LGB6ZeK5Yew5bmM5b6o5oGN5oO25oSw5oWM5pmD5pmE5qal5rOB5rmf5ruJ5r2i54WM55Kc55qH56+B57Cn6I2S6J2X6YGR6ZqN6buD5Yyv5Zue5bu75b6K5oGi5oKU5oe35pmm5pyD5qqc5reu5r6u54Gw542q57mq6Ia+6Iy06JuU6Kqo6LOE5YqD542y5a6W5qmr6ZCE5ZOu5ZqG5a2d5pWI5paF5puJ5qKf5raN5reGXCJdLFxuW1wiZmRhMVwiLFwi54i76IK06YW16amN5L6v5YCZ5Y6a5ZCO5ZC85ZaJ5ZeF5bi/5b6M5py954Wm54+d6YCF5Yub5Yuz5aGk5aOO54SE54aP54e76Jaw6KiT5pqI6Jao5Zan5pqE54WK6JCx5Y2J5ZaZ5q+B5b2Z5b695o+u5pqJ54WH6Kux6Lyd6bq+5LyR5pC654OL55Wm6Jmn5oGk6K2O6be45YWH5Ye25YyI5rS26IO46buR5piV5qyj54KY55eV5ZCD5bG557SH6KiW5qyg5qy95q2G5ZC45oGw5rS957+V6IiI5YOW5Yee5Zac5Zmr5ZuN5aes5ayJ5biM5oaZ5oaY5oix5pme5pum54aZ54a554a654qn56an56iA576y6KmwXCJdXG5dXG4iLCJtb2R1bGUuZXhwb3J0cz1bXG5bXCIwXCIsXCJcXHUwMDAwXCIsMTI3XSxcbltcImExNDBcIixcIuOAgO+8jOOAgeOAgu+8juKAp++8m++8mu+8n++8ge+4sOKApuKApe+5kO+5ke+5ksK377mU77mV77mW77mX772c4oCT77ix4oCU77iz4pW077i077mP77yI77yJ77i177i2772b772d77i377i444CU44CV77i577i644CQ44CR77i777i844CK44CL77i977i+44CI44CJ77i/77mA44CM44CN77mB77mC44CO44CP77mD77mE77mZ77maXCJdLFxuW1wiYTFhMVwiLFwi77mb77mc77md77me4oCY4oCZ4oCc4oCd44Cd44Ce4oC14oCy77yD77yG77yK4oC7wqfjgIPil4vil4/ilrPilrLil47imIbimIXil4fil4bilqHilqDilr3ilrzjiqPihIXCr++/o++8v8uN77mJ77mK77mN77mO77mL77mM77mf77mg77mh77yL77yNw5fDt8Kx4oia77yc77ye77yd4omm4omn4omg4oie4omS4omh77miXCIsNCxcIu+9nuKIqeKIquKKpeKIoOKIn+KKv+OPkuOPkeKIq+KIruKIteKItOKZgOKZguKKleKKmeKGkeKGk+KGkOKGkuKGluKGl+KGmeKGmOKIpeKIo++8j1wiXSxcbltcImEyNDBcIixcIu+8vOKIle+5qO+8hO+/peOAku+/oO+/oe+8he+8oOKEg+KEie+5qe+5qu+5q+OPleOOnOOOneOOnuOPjuOOoeOOjuOOj+OPhMKw5YWZ5YWb5YWe5YWd5YWh5YWj5Zen55Op57OO4paBXCIsNyxcIuKWj+KWjuKWjeKWjOKWi+KWiuKWieKUvOKUtOKUrOKUpOKUnOKWlOKUgOKUguKWleKUjOKUkOKUlOKUmOKVrVwiXSxcbltcImEyYTFcIixcIuKVruKVsOKVr+KVkOKVnuKVquKVoeKXouKXo+KXpeKXpOKVseKVsuKVs++8kFwiLDksXCLihaBcIiw5LFwi44ChXCIsOCxcIuWNgeWNhOWNhe+8oVwiLDI1LFwi772BXCIsMjFdLFxuW1wiYTM0MFwiLFwi772X772Y772Z772azpFcIiwxNixcIs6jXCIsNixcIs6xXCIsMTYsXCLPg1wiLDYsXCLjhIVcIiwxMF0sXG5bXCJhM2ExXCIsXCLjhJBcIiwyNSxcIsuZy4nLisuHy4tcIl0sXG5bXCJhM2UxXCIsXCLigqxcIl0sXG5bXCJhNDQwXCIsXCLkuIDkuZnkuIHkuIPkuYPkuZ3kuobkuozkurrlhL/lhaXlhavlh6DliIDliIHlipvljJXljYHljZzlj4jkuInkuIvkuIjkuIrkuKvkuLjlh6HkuYXkuYjkuZ/kuZ7kuo7kuqHlhYDliIPli7rljYPlj4nlj6PlnJ/lo6vlpJXlpKflpbPlrZDlrZHlrZPlr7jlsI/lsKLlsLjlsbHlt53lt6Xlt7Hlt7Llt7Plt77lubLlu77lvIvlvJPmiY1cIl0sXG5bXCJhNGExXCIsXCLkuJHkuJDkuI3kuK3kuLDkuLnkuYvlsLnkuojkupHkupXkupLkupTkuqLku4Hku4Dku4Pku4bku4fku43ku4rku4vku4TlhYPlhYHlhaflha3lha7lhazlhpflh7bliIbliIfliIjli7vli77li7/ljJbljLnljYjljYfljYXljZ7ljoTlj4vlj4rlj43lo6zlpKnlpKvlpKrlpK3lrZTlsJHlsKTlsLrlsa/lt7Tlubvlu7/lvJTlvJXlv4PmiIjmiLbmiYvmiY7mlK/mlofmlpfmlqTmlrnml6Xmm7DmnIjmnKjmrKDmraLmrbnmr4vmr5Tmr5vmsI/msLTngavniKrniLbniLvniYfniZnniZvniqznjovkuJlcIl0sXG5bXCJhNTQwXCIsXCLkuJbkuJXkuJTkuJjkuLvkuY3kuY/kuY7ku6Xku5jku5Tku5Xku5bku5fku6Pku6Tku5nku57lhYXlhYTlhonlhorlhqzlh7nlh7rlh7jliIrliqDlip/ljIXljIbljJfljJ3ku5/ljYrljYnljaHljaDlja/lja7ljrvlj6/lj6Tlj7Plj6zlj67lj6nlj6jlj7zlj7jlj7Xlj6vlj6blj6rlj7Llj7Hlj7Dlj6Xlj63lj7vlm5vlm5rlpJZcIl0sXG5bXCJhNWExXCIsXCLlpK7lpLHlpbTlpbblrZXlroPlsLzlt6jlt6flt6bluILluIPlubPlubzlvIHlvJjlvJflv4XmiIrmiZPmiZTmiZLmiZHmlqXml6bmnK7mnKzmnKrmnKvmnK3mraPmr43msJHmsJDmsLjmsYHmsYDmsL7niq/njoTnjonnk5znk6bnlJjnlJ/nlKjnlKnnlLDnlLHnlLLnlLPnlovnmb3nmq7nmr/nm67nn5vnn6Lnn7PnpLrnpr7nqbTnq4vkuJ7kuJ/kuZLkuZPkuankupnkuqTkuqbkuqXku7/kvInkvJnkvIrkvJXkvI3kvJDkvJHkvI/ku7Lku7bku7vku7Dku7Pku73kvIHkvIvlhYnlhYflhYblhYjlhahcIl0sXG5bXCJhNjQwXCIsXCLlhbHlho3lhrDliJfliJHliJLliI7liJbliqPljIjljKHljKDljbDljbHlkInlkI/lkIzlkIrlkJDlkIHlkIvlkITlkJHlkI3lkIjlkIPlkI7lkIblkJLlm6Dlm57lm53lnLPlnLDlnKjlnK3lnKzlnK/lnKnlpJnlpJrlpLflpLjlpoTlpbjlpoPlpb3lpbnlpoLlpoHlrZflrZjlroflrojlroXlronlr7rlsJblsbnlt57luIblubblubRcIl0sXG5bXCJhNmExXCIsXCLlvI/lvJvlv5nlv5bmiI7miIzmiI3miJDmiaPmiZvmiZjmlLbml6nml6jml6zml63mm7Lmm7PmnInmnL3mnLTmnLHmnLXmrKHmraTmrbvmsJbmsZ3msZfmsZnmsZ/msaDmsZDmsZXmsaHmsZvmsY3msY7ngbDniZ/niZ3nmb7nq7nnsbPns7jnvLbnvornvr3ogIHogIPogIzogJLogLPogb/ogonogovogozoh6Poh6roh7Poh7zoiIzoiJvoiJ/oia7oibLoib7omavooYDooYzooaPopb/pmKHkuLLkuqjkvY3kvY/kvYfkvZfkvZ7kvLTkvZvkvZXkvLDkvZDkvZHkvL3kvLrkvLjkvYPkvZTkvLzkvYbkvaNcIl0sXG5bXCJhNzQwXCIsXCLkvZzkvaDkvK/kvY7kvLbkvZnkvZ3kvYjkvZrlhYzlhYvlhY3lhbXlhrblhrfliKXliKTliKnliKrliKjliqvliqnliqrliqzljKPljbPljbXlkJ3lkK3lkJ7lkL7lkKblkY7lkKflkYblkYPlkLPlkYjlkYLlkJvlkKnlkYrlkLnlkLvlkLjlkK7lkLXlkLblkKDlkLzlkYDlkLHlkKvlkJ/lkKzlm6rlm7Dlm6Tlm6vlnYrlnZHlnYDlnY1cIl0sXG5bXCJhN2ExXCIsXCLlnYflnY7lnL7lnZDlnY/lnLvlo6/lpL7lpp3lppLlpqjlpp7lpqPlppnlppblpo3lpqTlppPlporlpqXlrZ3lrZzlrZrlrZvlrozlrovlro/lsKzlsYDlsYHlsL/lsL7lspDlspHlspTlsozlt6vluIzluo/luofluorlu7flvITlvJ/lvaTlvaLlvbflvbnlv5jlv4zlv5flv43lv7Hlv6vlv7jlv6rmiJLmiJHmioTmipfmipbmioDmibbmionmia3miormibzmib7mibnmibPmipLmia/mipjmia7mipXmipPmipHmiobmlLnmlLvmlLjml7Hmm7TmnZ/mnY7mnY/mnZDmnZHmnZzmnZbmnZ7mnYnmnYbmnaBcIl0sXG5bXCJhODQwXCIsXCLmnZPmnZfmraXmr4/msYLmsZ7mspnmsoHmsojmsonmsoXmspvmsarmsbrmspDmsbDmsozmsajmspbmspLmsb3msoPmsbLmsb7msbTmsobmsbbmso3mspTmspjmsoLngbbngbzngb3ngbjniaLniaHniaDni4Tni4LnjpbnlKznlKvnlLfnlLjnmoLnm6/nn6Pnp4Hnp4Dnpr/nqbbns7vnvZXogpbogpPogp3ogpjogpvogprogrLoia/oipJcIl0sXG5bXCJhOGExXCIsXCLoiovoio3opovop5LoqIDosLfosYbosZXosp3otaTotbDotrPouqvou4rovpvovrDov4Lov4bov4Xov4Tlt6HpgpHpgqLpgqrpgqbpgqPphYnph4bph4zpmLLpmK7pmLHpmKrpmKzkuKbkuZbkubPkuovkupvkup7kuqvkuqzkva/kvp3kvo3kvbPkvb/kvazkvpvkvovkvobkvoPkvbDkvbXkvojkvankvbvkvpbkvb7kvo/kvpHkvbrlhZTlhZLlhZXlhanlhbflhbblhbjlhr3lh73liLvliLjliLfliLrliLDliK7liLbliYHlir7lirvljZLljZTljZPljZHljabljbfljbjljbnlj5blj5Tlj5flkbPlkbVcIl0sXG5bXCJhOTQwXCIsXCLlkpblkbjlkpXlkoDlkbvlkbflkoTlkpLlkoblkbzlkpDlkbHlkbblkozlkprlkaLlkajlkovlkb3lko7lm7rlnoPlnbflnarlnanlnaHlnablnaTlnbzlpJzlpYnlpYflpYjlpYTlpZTlpr7lprvlp5Tlprnlpq7lp5Hlp4blp5Dlp43lp4vlp5Plp4rlpq/lprPlp5Llp4XlrZ/lraTlraPlrpflrprlrpjlrpzlrpnlrpvlsJrlsYjlsYVcIl0sXG5bXCJhOWExXCIsXCLlsYblsrflsqHlsrjlsqnlsqvlsrHlsrPluJjluJrluJbluJXluJvluJHlubjluprlupflupzlupXlupblu7blvKblvKflvKnlvoDlvoHlvb/lvbzlv53lv6Dlv73lv7Xlv7/mgI/mgJTmgK/mgLXmgJbmgKrmgJXmgKHmgKfmgKnmgKvmgJvmiJbmiJXmiL/miL7miYDmib/mi4nmi4zmi4Tmir/mi4Lmirnmi5Lmi5vmiqvmi5Pmi5Tmi4vmi4jmiqjmir3mirzmi5Dmi5nmi4fmi43mirXmi5rmirHmi5jmi5bmi5fmi4bmiqzmi47mlL7mlqfmlrzml7rmmJTmmJPmmIzmmIbmmILmmI7mmIDmmI/mmJXmmIpcIl0sXG5bXCJhYTQwXCIsXCLmmIfmnI3mnIvmna3mnovmnpXmnbHmnpzmnbPmnbfmnofmnp3mnpfmna/mnbDmnb/mnonmnb7mnpDmnbXmnprmnpPmnbzmnarmnbLmrKPmrabmrafmrb/msJPmsJvms6Pms6jms7PmsrHms4zms6XmsrPmsr3msr7msrzms6Lmsqvms5Xms5Pmsrjms4Tmsrnms4Hmsq7ms5fms4Xms7Hmsr/msrvms6Hms5vms4rmsqzms6/ms5zms5bms6BcIl0sXG5bXCJhYWExXCIsXCLngpXngo7ngpLngorngpnniKzniK3niLjniYjniafnianni4Dni47ni5nni5fni5Dnjqnnjqjnjp/njqvnjqXnlL3nlp3nlpnnlprnmoTnm4Lnm7Lnm7Tnn6Xnn73npL7npYDnpYHnp4nnp4jnqbrnqbnnq7rns77nvZTnvoznvovogIXogrrogqXogqLogrHogqHogqvogqnogrTogqrogq/oh6Xoh77oiI3oirPoip3oipnoiq3oir3oip/oirnoirHoiqzoiqXoiq/oirjoiqPoirDoir7oirfomY7ombHliJ3ooajou4vov47ov5Tov5HpgrXpgrjpgrHpgrbph4fph5HplbfploDpmJzpmYDpmL/pmLvpmYRcIl0sXG5bXCJhYjQwXCIsXCLpmYLpmrnpm6jpnZLpnZ7kup/kuq3kuq7kv6HkvrXkvq/kvr/kv6Dkv5Hkv4/kv53kv4Pkvrbkv5jkv5/kv4rkv5fkvq7kv5Dkv4Tkv4Lkv5rkv47kv57kvrflhZflhpLlhpHlhqDliY7liYPliYrliY3liYzliYvliYfli4fli4nli4Pli4HljI3ljZfljbvljprlj5vlkqzlk4Dlkqjlk47lk4nlkrjlkqblkrPlk4flk4Llkr3lkqrlk4FcIl0sXG5bXCJhYmExXCIsXCLlk4Tlk4jlkq/lkqvlkrHlkrvlkqnlkqflkr/lm7/lnoLlnovlnqDlnqPlnqLln47lnq7lnpPlpZXlpZHlpY/lpY7lpZDlp5zlp5jlp7/lp6Plp6jlqIPlp6Xlp6rlp5rlp6blqIHlp7vlranlrqPlrqblrqTlrqLlrqXlsIHlsY7lsY/lsY3lsYvls5nls5Llt7fluJ3luKXluJ/lub3luqDluqblu7rlvIjlvK3lvaXlvojlvoXlvorlvovlvoflvozlvonmgJLmgJ3mgKDmgKXmgI7mgKjmgY3mgbDmgajmgaLmgYbmgYPmgazmgavmgarmgaTmiYHmi5zmjJbmjInmi7zmi63mjIHmi67mi73mjIfmi7Hmi7dcIl0sXG5bXCJhYzQwXCIsXCLmi6/mi6zmi77mi7TmjJHmjILmlL/mlYXmlqvmlr3ml6LmmKXmmK3mmKDmmKfmmK/mmJ/mmKjmmLHmmKTmm7fmn7/mn5Pmn7Hmn5Tmn5Dmn6zmnrbmnq/mn7Xmn6nmn6/mn4Tmn5HmnrTmn5rmn6Xmnrjmn4/mn57mn7PmnrDmn5nmn6Lmn53mn5LmrarmroPmrobmrrXmr5Lmr5fmsJ/ms4nmtIvmtLLmtKrmtYHmtKXmtIzmtLHmtJ7mtJdcIl0sXG5bXCJhY2ExXCIsXCLmtLvmtL3mtL7mtLbmtJvms7XmtLnmtKfmtLjmtKnmtK7mtLXmtI7mtKvngqvngrrngrPngqzngq/ngq3ngrjngq7ngqTniLDnibLnia/nibTni6nni6Dni6Hnjrfnj4rnjrvnjrLnj43nj4DnjrPnlJrnlK3nlY/nlYznlY7nlYvnlqvnlqTnlqXnlqLnlqPnmbjnmobnmofnmojnm4jnm4bnm4Pnm4XnnIHnm7nnm7jnnInnnIvnm77nm7znnIfnn5znoILnoJTnoIznoI3npYbnpYnnpYjnpYfnprnnprrnp5Hnp5Lnp4vnqb/nqoHnq7/nq73nsb3ntILntIXntIDntInntIfntITntIbnvLjnvo7nvr/ogIRcIl0sXG5bXCJhZDQwXCIsXCLogJDogI3ogJHogLbog5bog6Xog5rog4Pog4Tog4zog6Hog5vog47og57og6Tog53oh7ToiKLoi6fojIPojIXoi6Poi5voi6bojIToi6XojILojInoi5Loi5foi7HojIHoi5zoi5Toi5Hoi57oi5Poi5/oi6/ojIbomZDombnombvombrooY3ooavopoHop5ToqIjoqILoqIPosp7osqDotbTotbPotrTou43ou4zov7Dov6bov6Lov6rov6VcIl0sXG5bXCJhZGExXCIsXCLov63ov6vov6Tov6jpg4rpg47pg4Hpg4PphYvphYrph43ploLpmZDpmYvpmYzpmY3pnaLpnanpn4vpn63pn7PpoIHpoqjpo5vpo5/pppbpppnkuZjkurPlgIzlgI3lgKPkv6/lgKblgKXkv7jlgKnlgJblgIblgLzlgJ/lgJrlgJLlgJHkv7rlgIDlgJTlgKjkv7HlgKHlgIvlgJnlgJjkv7Pkv67lgK3lgKrkv77lgKvlgInlhbzlhqTlhqXlhqLlh43lh4zlh4blh4vliZbliZzliZTliZvliZ3ljKrljb/ljp/ljp3lj5/lk6jllJDllIHllLflk7zlk6Xlk7LllIblk7rllJTlk6nlk63lk6HllInlk67lk6pcIl0sXG5bXCJhZTQwXCIsXCLlk6bllKfllIflk73llI/lnIPlnITln4Lln5Tln4vln4PloInlpI/lpZflpZjlpZrlqJHlqJjlqJzlqJ/lqJvlqJPlp6zlqKDlqKPlqKnlqKXlqIzlqInlravlsZjlrrDlrrPlrrblrrTlrq7lrrXlrrnlrrjlsITlsZHlsZXlsZDls63ls73ls7vls6rls6jls7Dls7bltIHls7Tlt67luK3luKvluqvluq3luqflvLHlvpLlvpHlvpDmgZlcIl0sXG5bXCJhZWExXCIsXCLmgaPmgaXmgZDmgZXmga3mganmga/mgoTmgp/mgprmgo3mgpTmgozmgoXmgpbmiYfmi7PmjIjmi7/mjY7mjL7mjK/mjZXmjYLmjYbmjY/mjYnmjLrmjZDmjL3mjKrmjKvmjKjmjY3mjYzmlYjmlYnmlpnml4Hml4XmmYLmmYnmmY/mmYPmmZLmmYzmmYXmmYHmm7jmnJTmnJXmnJfmoKHmoLjmoYjmoYbmoZPmoLnmoYLmoZTmoKnmorPmoJfmoYzmoZHmoL3mn7TmoZDmoYDmoLzmoYPmoKrmoYXmoJPmoJjmoYHmrormronmrrfmsKPmsKfmsKjmsKbmsKTms7DmtarmtpXmtojmtofmtabmtbjmtbfmtZnmtpNcIl0sXG5bXCJhZjQwXCIsXCLmtazmtonmta7mtZrmtbTmtanmtozmtormtbnmtoXmtaXmtpTng4rng5jng6Tng5nng4jng4/niLnnibnni7zni7nni73ni7jni7fnjobnj63nkInnj67nj6Dnj6rnj57nlZTnlZ3nlZznlZrnlZnnlr7nl4Xnl4fnlrLnlrPnlr3nlrznlrnnl4LnlrjnmovnmrDnm4rnm43nm47nnKnnnJ/nnKDnnKjnn6nnoLDnoKfnoLjnoJ3noLTnoLdcIl0sXG5bXCJhZmExXCIsXCLnoKXnoK3noKDnoJ/noLLnpZXnpZDnpaDnpZ/npZbnpZ7npZ3npZfnpZrnp6Tnp6Pnp6fnp5/np6bnp6nnp5jnqoTnqojnq5nnrIbnrJHnsonntKHntJfntIvntIrntKDntKLntJTntJDntJXntJrntJzntI3ntJnntJvnvLrnvZ/nvpTnv4Xnv4HogIbogJjogJXogJnogJfogL3ogL/og7HohILog7DohIXog63og7TohIbog7jog7PohIjog73ohIrog7zog6/oh63oh6zoiIDoiJDoiKroiKvoiKjoiKzoirvojKvojZLojZTojYrojLjojZDojYnojLXojLTojY/ojLLojLnojLbojJfojYDojLHojKjojYNcIl0sXG5bXCJiMDQwXCIsXCLomZTomoromqrompPomqTomqnomozomqPompzoobDoobfoooHoooLoob3oobnoqJjoqJDoqI7oqIzoqJXoqIroqJfoqJPoqJboqI/oqJHosYjosbrosbnosqHosqLotbfouqzou5Lou5Tou4/ovrHpgIHpgIbov7fpgIDov7rov7TpgIPov73pgIXov7jpgpXpg6Hpg53pg6LphZLphY3phYzph5jph53ph5fph5zph5nploPpmaLpmaPpmaFcIl0sXG5bXCJiMGExXCIsXCLpmZvpmZ3pmaTpmZjpmZ7pmrvpo6Lppqzpqqjpq5jprKXprLLprLzkub7lgbrlgb3lgZzlgYflgYPlgYzlgZrlgYnlgaXlgbblgY7lgZXlgbXlgbTlgbflgY/lgI/lga/lga3lhZzlhpXlh7Dliarlia/li5Lli5nli5jli5XljJDljI/ljJnljL/ljYDljL7lj4Pmm7zllYbllarllabllYTllZ7llaHllYPllYrllLHllZbllY/llZXllK/llaTllLjllK7llZzllKzllaPllLPllYHllZflnIjlnIvlnInln5/loIXloIrloIbln6Dln6Tln7rloILloLXln7fln7nlpKDlpaLlqLblqYHlqYnlqablqarlqYBcIl0sXG5bXCJiMTQwXCIsXCLlqLzlqaLlqZrlqYblqYrlrbDlr4flr4Xlr4Tlr4Llrr/lr4blsInlsIjlsIflsaDlsZzlsZ3ltIfltIbltI7ltJvltJbltKLltJHltKnltJTltJnltKTltKfltJflt6LluLjluLbluLPluLflurflurjlurblurXlur7lvLXlvLflvZflvazlvanlvavlvpflvpnlvp7lvpjlvqHlvqDlvpzmgb/mgqPmgonmgqDmgqjmg4vmgrTmg6bmgr1cIl0sXG5bXCJiMWExXCIsXCLmg4XmgrvmgrXmg5zmgrzmg5jmg5Xmg4bmg5/mgrjmg5rmg4fmiJrmiJvmiYjmjqDmjqfmjbLmjpbmjqLmjqXmjbfmjafmjpjmjqrmjbHmjqnmjonmjoPmjpvmjavmjqjmjoTmjojmjpnmjqHmjqzmjpLmjo/mjoDmjbvmjanmjajmjbrmlZ3mlZbmlZHmlZnmlZfllZ/mlY/mlZjmlZXmlZTmlpzmlpvmlqzml4/ml4vml4zml47mmZ3mmZrmmaTmmajmmabmmZ7mm7nli5fmnJvmooHmoq/moqLmopPmorXmob/mobbmorHmoqfmopfmorDmooPmo4Tmoq3moobmooXmopTmop3moqjmop/moqHmooLmrLLmrrpcIl0sXG5bXCJiMjQwXCIsXCLmr6vmr6zmsKvmto7mtrzmt7Pmt5nmtrLmt6Hmt4zmt6Tmt7vmt7rmuIXmt4fmt4vmtq/mt5Hmtq7mt57mt7nmtrjmt7fmt7Xmt4Xmt5LmuJrmtrXmt5rmt6vmt5jmt6rmt7Hmt67mt6jmt4bmt4Tmtqrmt6zmtr/mt6bng7nnhInnhIrng73ng6/niL3nib3nioHnjJznjJvnjJbnjJPnjJnnjofnkIXnkIrnkIPnkIbnj77nkI3nk6Dnk7ZcIl0sXG5bXCJiMmExXCIsXCLnk7fnlJznlKLnlaXnlabnlaLnlbDnlo/nl5Tnl5XnlrXnl4rnl43nmo7nm5Tnm5Lnm5vnnLfnnL7nnLznnLbnnLjnnLrnoavnoYPnoY7npaXnpajnpa3np7vnqpLnqpXnrKDnrKjnrJvnrKznrKbnrJnnrJ7nrK7nspLnspfnspXntYbntYPntbHntK7ntLnntLzntYDntLDntLPntYTntK/ntYLntLLntLHnvL3nvp7nvprnv4znv47nv5LogJzogYrogYbohK/ohJbohKPohKvohKnohLDohKToiILoiLXoiLfoiLboiLnojo7ojp7ojpjojbjojqLojpbojr3ojqvojpLojorojpPojonojqDojbfojbvojbxcIl0sXG5bXCJiMzQwXCIsXCLojobojqfomZXlvarom4fom4Domrbom4TomrXom4bom4vomrHomq/om4nooZPoop7ooojooqvoopLoopbooo3ooovoppPopo/oqKroqJ3oqKPoqKXoqLHoqK3oqJ/oqJvoqKLosYnosZrosqnosqzosqvosqjosqrosqfotafotabotr7otrrou5vou5/pgJnpgI3pgJrpgJfpgKPpgJ/pgJ3pgJDpgJXpgJ7pgKDpgI/pgKLpgJbpgJvpgJRcIl0sXG5bXCJiM2ExXCIsXCLpg6jpg63pg73phZfph47ph7Xph6bph6Pph6fph63ph6nplonpmarpmbXpmbPpmbjpmbDpmbTpmbbpmbfpmazpm4Dpm6rpm6nnq6Dnq5/poILpoIPprZrps6XpubXpub/puqXpurvlgqLlgo3lgoXlgpnlgpHlgoDlgpblgpjlgprmnIDlh7HlibLlibTlibXlianli57li53li5vljZrljqXllbvlloDllqfllbzllorllp3llpjlloLllpzllqrllpTllofllovlloPllrPllq7llp/llL7llrLllprllrvllqzllrHllb7llonllqvllpnlnI3loK/loKrloLTloKTloLDloLHloKHloJ3loKDlo7nlo7rlpaBcIl0sXG5bXCJiNDQwXCIsXCLlqbflqprlqb/lqpLlqpvlqqflrbPlrbHlr5Llr4zlr5Plr5DlsIrlsIvlsLHltYzltZDltLTltYflt73luYXluL3luYDluYPlub7lu4rlu4Hlu4Llu4TlvLzlva3lvqnlvqrlvqjmg5Hmg6HmgrLmgrbmg6DmhJzmhKPmg7rmhJXmg7Dmg7vmg7Tmhajmg7HmhI7mg7bmhInmhIDmhJLmiJ/miYnmjqPmjozmj4/mj4Dmj6nmj4nmj4bmj41cIl0sXG5bXCJiNGExXCIsXCLmj5Lmj6Pmj5Dmj6Hmj5bmj63mj67mjbbmj7Tmj6rmj5vmkZLmj5rmj7nmlZ7mlabmlaLmlaPmlpHmlpDmlq/mma7mmbDmmbTmmbbmma/mmpHmmbrmmb7mmbfmm77mm7/mnJ/mnJ3mo7rmo5Xmo6Dmo5jmo5fmpIXmo5/mo7Xmo67mo6fmo7nmo5Lmo7Lmo6Pmo4vmo43mpI3mpJLmpI7mo4nmo5rmpa7mo7vmrL7mrLrmrL3mrpjmrpbmrrzmr6/msK7msK/msKzmuK/muLjmuZTmuKHmuLLmuafmuYrmuKDmuKXmuKPmuJvmuZvmuZjmuKTmuZbmua7muK3muKbmua/muLTmuY3muLrmuKzmuYPmuJ3muL7mu4tcIl0sXG5bXCJiNTQwXCIsXCLmuonmuJnmuY7muaPmuYTmubLmuanmuZ/nhJnnhJrnhKbnhLDnhKHnhLbnha7nhJzniYznioTnioDnjLbnjKXnjLTnjKnnkLrnkKrnkLPnkKLnkKXnkLXnkLbnkLTnkK/nkJvnkKbnkKjnlKXnlKbnlavnlarnl6Lnl5vnl6Pnl5nnl5jnl57nl6DnmbvnmbznmpbnmpPnmrTnm5znnY/nn63noZ3noaznoa/nqI3nqIjnqIvnqIXnqIDnqphcIl0sXG5bXCJiNWExXCIsXCLnqpfnqpbnq6Xnq6PnrYnnrZbnrYbnrZDnrZLnrZTnrY3nrYvnrY/nrZHnsp/nsqXntZ7ntZDntajntZXntKvnta7ntbLntaHntabntaLntbDntbPlloTnv5Tnv5XogIvogZLogoXohZXohZTohYvohZHohY7ohLnohYbohL7ohYzohZPohbToiJLoiJzoj6nokIPoj7jokI3oj6Doj4XokIvoj4Hoj6/oj7Hoj7TokZfokIroj7DokIzoj4zoj73oj7Loj4rokLjokI7okIToj5zokIfoj5Toj5/omZvom5/om5nom63om5Tom5vom6Tom5Dom57ooZfoo4Hoo4LoorHopoPoppboqLvoqaDoqZXoqZ7oqLzoqYFcIl0sXG5bXCJiNjQwXCIsXCLoqZToqZvoqZDoqYboqLToqLroqLboqZbosaHosoLosq/osrzosrPosr3os4Hosrvos4DosrTosrfosrbosr/osrjotorotoXotoHot47ot53ot4vot5rot5Hot4zot5vot4bou7vou7jou7zovpzpgK7pgLXpgLHpgLjpgLLpgLbphILpg7XphInpg77phaPphaXph4/piJTpiJXpiKPpiInpiJ7piI3piJDpiIfpiJHplpTplo/plovplpFcIl0sXG5bXCJiNmExXCIsXCLplpPplpLplo7pmorpmo7pmovpmb3pmoXpmobpmo3pmbLpmoTpm4Hpm4Xpm4Tpm4bpm4fpm6/pm7Lpn4zpoIXpoIbpoIjpo6fpo6rpo6/po6npo7Lpo63ppq7ppq3pu4Ppu43pu5HkuoLlgq3lgrXlgrLlgrPlg4Xlgr7lgqzlgrflgrvlgq/lg4flib/libflib3li5/li6bli6Tli6Lli6PljK/ll5/ll6jll5Pll6bll47ll5zll4fll5Hll6Pll6Tll6/ll5rll6Hll4Xll4bll6Xll4nlnJLlnJPloZ7loZHloZjloZfloZrloZTloavloYzloa3loYrloaLloZLloYvlpaflq4Hlq4nlq4zlqr7lqr3lqrxcIl0sXG5bXCJiNzQwXCIsXCLlqrPlq4LlqrLltanlta/luYzlubnlu4nlu4jlvJLlvZnlvqzlvq7mhJrmhI/mhYjmhJ/mg7PmhJvmg7nmhIHmhIjmhY7mhYzmhYTmhY3mhL7mhLTmhKfmhI3mhIbmhLfmiKHmiKLmkJPmkL7mkJ7mkKrmkK3mkL3mkKzmkI/mkJzmkJTmkI3mkLbmkJbmkJfmkIbmlazmlp/mlrDmmpfmmonmmofmmojmmpbmmoTmmpjmmo3mnIPmppTmpa1cIl0sXG5bXCJiN2ExXCIsXCLmpZrmpbfmpaDmpZTmpbXmpLDmpoLmpYrmpajmpavmpZ7mpZPmpbnmpobmpZ3mpaPmpZvmrYfmrbLmr4Dmrr/mr5Pmr73muqLmuq/mu5Pmurbmu4LmupDmup3mu4fmu4XmuqXmupjmurzmurrmuqvmu5Hmupbmupzmu4Tmu5TmuqrmuqfmurTnhY7nhZnnhannhaTnhYnnhafnhZznhaznhabnhYznhaXnhZ7nhYbnhajnhZbniLrniZLnjLfnjYXnjL/njL7nka/nkZrnkZXnkZ/nkZ7nkYHnkL/nkZnnkZvnkZznlbbnlbjnmIDnl7DnmIHnl7Lnl7Hnl7rnl7/nl7Tnl7Pnm57nm5/nnZvnnavnnabnnZ7nnaNcIl0sXG5bXCJiODQwXCIsXCLnnbnnnarnnaznnZznnaXnnajnnaLnn67noo7norDnopfnopjnooznoonnobznopHnopPnob/npbrnpb/npoHokKznpr3nqJznqJrnqKDnqJTnqJ/nqJ7nqp/nqqDnrbfnr4DnraDnra7nrafnsrHnsrPnsrXntpPntbnntpHntoHnto/ntZvnva7nvannvarnvbLnvqnnvqjnvqTogZbogZjogobogoTohbHohbDohbjohaXoha7ohbPohatcIl0sXG5bXCJiOGExXCIsXCLohbnohbrohaboiIXoiYfokoLokbfokL3okLHokbXokabokavokYnokazokZvokLzokLXokaHokaPokanoka3okYbomZ7omZzomZ/om7nonJPonIjonIfonIDom77om7vonILonIPonIbonIrooZnoo5/oo5Too5noo5zoo5joo53oo6Hoo4roo5Xoo5Loppzop6PoqavoqbLoqbPoqaboqanoqbDoqofoqbzoqaPoqqDoqbHoqoXoqa3oqaLoqa7oqazoqbnoqbvoqL7oqajosaLosorosonos4ros4fos4jos4TosrLos4Pos4Los4Xot6Hot5/ot6jot6/ot7Pot7rot6rot6Tot6bourLovIPovInou77ovIpcIl0sXG5bXCJiOTQwXCIsXCLovp/ovrLpgYvpgYrpgZPpgYLpgZTpgLzpgZXpgZDpgYfpgY/pgY7pgY3pgZHpgL7pgYHphJLphJfphazpharphanph4npiLfpiZfpiLjpiL3piYDpiL7piZvpiYvpiaTpiZHpiLTpiYnpiY3piYXpiLnpiL/piZrplpjpmpjpmpTpmpXpm43pm4vpm4npm4rpm7fpm7vpm7npm7bpnZbpnbTpnbbpoJDpoJHpoJPpoIrpoJLpoIzpo7zpo7RcIl0sXG5bXCJiOWExXCIsXCLpo73po77pprPpprHpprTpq6Hps6npuoLpvI7pvJPpvKDlg6flg67lg6Xlg5blg63lg5rlg5Xlg4/lg5Hlg7Hlg47lg6nlhaLlh7PlioPlioLljLHljq3ll77lmIDlmJvlmJfll73lmJTlmIblmInlmI3lmI7ll7flmJblmJ/lmIjlmJDll7blnJjlnJblobXlob7looPlopPloorlobnlooXlob3lo73lpKXlpKLlpKTlparlpanlq6Hlq6blq6nlq5flq5blq5jlq6PlrbXlr57lr6flr6Hlr6Xlr6blr6jlr6Llr6Tlr5/lsI3lsaLltoTltofluZvluaPluZXluZfluZTlu5Plu5blvIrlvYblvbDlvrnmhYdcIl0sXG5bXCJiYTQwXCIsXCLmhL/mhYvmhbfmhaLmhaPmhZ/mhZrmhZjmhbXmiKrmkofmkZjmkZTmkqTmkbjmkZ/mkbrmkZHmkafmkLTmka3mkbvmlbLmlqHml5fml5bmmqLmmqjmmp3mppzmpqjmppXmp4Hmpq7mp5Pmp4vmppvmprfmprvmpqvmprTmp5Dmp43mpq3mp4zmpqbmp4PmpqPmrYnmrYzmsLPmvLPmvJTmu77mvJPmu7TmvKnmvL7mvKDmvKzmvI/mvILmvKJcIl0sXG5bXCJiYWExXCIsXCLmu7/mu6/mvIbmvLHmvLjmvLLmvKPmvJXmvKvmvK/mvojmvKrmu6zmvIHmu7Lmu4zmu7fnhpTnhpnnhb3nhornhoTnhpLniL7nipLnipbnjYTnjZDnkaTnkaPnkarnkbDnka3nlITnlpHnmKfnmI3nmIvnmInnmJPnm6Hnm6PnnoTnnb3nnb/nnaHno4Hnop/noqfnorPnoqnnoqPnpo7npo/npo3nqK7nqLHnqqrnqqnnq63nq6/nrqHnrpXnrovnrbXnrpfnrp3nrpTnro/nrrjnrofnroTnsrnnsr3nsr7ntrvntrDntpzntr3ntr7ntqDnt4rntrTntrLntrHntrrntqLntr/ntrXntrjntq3nt5Lnt4fntqxcIl0sXG5bXCJiYjQwXCIsXCLnvbDnv6Dnv6Hnv5/ogZ7ogZrogofohZDohoDoho/ohojohorohb/ohoLoh6foh7roiIfoiJToiJ7oiYvok4nokr/ok4bok4Tokpnokp7okrLokpzok4vokrjok4Dok5PokpDokrzok5Hok4ronL/onJzonLvonKLonKXonLTonJjonZXonLfonKnoo7PopILoo7Too7noo7joo73oo6jopJroo6/oqqboqozoqp7oqqPoqo3oqqHoqpPoqqRcIl0sXG5bXCJiYmExXCIsXCLoqqroqqXoqqjoqpjoqpHoqproqqfosaroso3osozos5Pos5Hos5LotavotpnotpXot7zovJTovJLovJXovJPovqPpgaDpgZjpgZzpgaPpgZnpgZ7pgaLpgZ3pgZvphJnphJjphJ7phbXphbjphbfphbTpibjpioDpioXpipjpipbpibvpipPpipzpiqjpibzpipHplqHplqjplqnplqPplqXplqTpmpnpmpzpmpvpm4zpm5LpnIDpnbzpnoXpn7bpoJfpoJjpoq/porHppIPppIXppIzppInpp4Hpqq/pqrDpq6bprYHprYLps7Tps7bps7PpurzpvLvpvYrlhITlhIDlg7vlg7Xlg7nlhILlhIjlhInlhIXlh5xcIl0sXG5bXCJiYzQwXCIsXCLliofliojlionlio3liorli7DljrLlmK7lmLvlmLnlmLLlmL/lmLTlmKnlmZPlmY7lmZflmbTlmLblmK/lmLDlooDlop/lop7lorPlopzloq7loqnloqblpa3lrInlq7vlrIvlq7XlrIzlrIjlr67lr6zlr6nlr6vlsaTlsaXltp3ltpTluaLluZ/luaHlu6Llu5rlu5/lu53lu6Plu6DlvYjlvbHlvrflvrXmhbbmhafmha7mhZ3mhZXmhoJcIl0sXG5bXCJiY2ExXCIsXCLmhbzmhbDmhavmhb7mhqfmhpDmhqvmho7mhqzmhprmhqTmhpTmhq7miK7mkanmka/mkbnmkp7mkrLmkojmkpDmkrDmkqXmkpPmkpXmkqnmkpLmkq7mkq3mkqvmkprmkqzmkpnmkqLmkrPmlbXmlbfmlbjmmq7mmqvmmrTmmrHmqKPmqJ/mp6jmqIHmqJ7mqJnmp73mqKHmqJPmqIrmp7PmqILmqIXmp63mqJHmrZDmrY7mrqTmr4Xmr4bmvL/mvbzmvoTmvZHmvabmvZTmvobmva3mvZvmvbjmva7mvo7mvbrmvbDmvaTmvpfmvZjmu5Xmva/mvaDmvZ/nhp/nhqznhrHnhqjniZbnipvnjY7njZfnkannkovnkoNcIl0sXG5bXCJiZDQwXCIsXCLnkb7nkoDnlb/nmKDnmKnnmJ/nmKTnmKbnmKHnmKLnmprnmrrnm6Tnno7nnofnnoznnpHnnovno4vno4Xnorrno4rnor7no5Xnorzno5DnqL/nqLznqYDnqL3nqLfnqLvnqq/nqq7nrq3nrrHnr4TnrrTnr4bnr4fnr4HnrqDnr4zns4rnt6Dnt7Tnt6/nt7vnt5jnt6znt53nt6jnt6Pnt5rnt57nt6nntp7nt5nnt7Lnt7nnvbXnvbfnvq9cIl0sXG5bXCJiZGExXCIsXCLnv6nogKbohpvohpzohp3ohqDohprohpjolJfolL3olJrok67olKzolK3olJPolJHolKPolKHolJTok6zolKXok7/olIbonoLonbTonbbonaDonabonbjonajonZnonZfonYzonZPooZvooZ3opJDopIfopJLopJPopJXopIroqrzoq5Loq4foq4ToqpXoq4voq7joqrLoq4noq4Loqr/oqrDoq5boq43oqrboqrnoq5vosYzosY7osazos6Dos57os6bos6Tos6zos63os6Los6Pos5zos6ros6Hota3otp/otqPouKvouJDouJ3ouKLouI/ouKnouJ/ouKHouJ7ourrovJ3ovJvovJ/ovKnovKbovKrovJzovJ5cIl0sXG5bXCJiZTQwXCIsXCLovKXpganpga7pgajpga3pgbfphLDphK3phKfphLHphofphonphovphoPpi4Xpirvpirfpi6rpiqzpi6Tpi4HpirPpirzpi5Lpi4fpi7DpirLplq3plrHpnITpnIbpnIfpnInpnaDpno3pnovpno/poKHpoKvpoJzporPppIrppJPppJLppJjpp53pp5Dpp5/pp5vpp5Hpp5Xpp5Lpp5npqrfpq67pq6/prKfprYXprYTprbfpra/ptIbptIlcIl0sXG5bXCJiZWExXCIsXCLptIPpuqnpur7pu47loqjpvZLlhJLlhJjlhJTlhJDlhJXlhoDlhqrlh53lipHlipPli7PlmZnlmavlmbnlmanlmaTlmbjlmarlmajlmaXlmbHlma/lmazlmaLlmbblo4Hlor7lo4flo4Xlpa7lrJ3lrLTlrbjlr7DlsI7lvYrmhrLmhpHmhqnmhormh43mhrbmhr7mh4rmh4jmiLDmk4Xmk4Hmk4vmkrvmkrzmk5rmk4Tmk4fmk4Lmk43mkr/mk5Lmk5Tmkr7mlbTmm4bmm4nmmrnmm4Tmm4fmmrjmqL3mqLjmqLrmqZnmqavmqZjmqLnmqYTmqaLmqaHmqYvmqYfmqLXmqZ/mqYjmrZnmrbfmsIXmv4LmvrHmvqFcIl0sXG5bXCJiZjQwXCIsXCLmv4PmvqTmv4HmvqfmvrPmv4DmvrnmvrbmvqbmvqDmvrTnhr7nh4nnh5Dnh5Lnh4jnh5Xnhrnnh47nh5nnh5znh4Pnh4TnjajnkpznkqPnkpjnkp/nkp7nk6LnlIznlI3nmLTnmLjnmLrnm6fnm6XnnqDnnp7nnp/nnqXno6jno5rno6zno6fnpqbnqY3nqY7nqYbnqYznqYvnqrrnr5nnsJHnr4nnr6Tnr5vnr6Hnr6nnr6bns5Xns5bnuIpcIl0sXG5bXCJiZmExXCIsXCLnuJHnuIjnuJvnuKPnuJ7nuJ3nuInnuJDnvbnnvrLnv7Dnv7Hnv67ogKjohrPohqnohqjoh7voiIjoiZjoiZnolYrolZnolYjolajolanolYPolYnola3olarolZ7onoPonp/onp7onqLono3ooaHopKropLLopKXopKvopKHopqropqboq6boq7roq6voq7HorIDoq5zoq6foq67oq77orIHorILoq7foq63oq7Poq7boq7zosavosa3ospPos7TouYTouLHouLTouYLouLnouLXovLvovK/ovLjovLPovqjovqbpgbXpgbTpgbjpgbLpgbzpgbrphLTphpLpjKDpjLbpi7jpjLPpjK/pjKLpi7zpjKvpjITpjJpcIl0sXG5bXCJjMDQwXCIsXCLpjJDpjKbpjKHpjJXpjK7pjJnplrvpmqfpmqjpmqrpm5XpnI7pnJHpnJbpnI3pnJPpnI/pnZvpnZzpnabpnpjpoLDpoLjpoLvpoLfpoK3poLnpoKTppJDppKjppJ7ppJvppKHppJrpp63pp6Lpp7Hpqrjpqrzpq7vpq63prKjprpHptJXptKPptKbptKjptJLptJvpu5jpu5Tpvo3pvpzlhKrlhJ/lhKHlhLLli7Xlmo7lmoDlmpDlmoXlmodcIl0sXG5bXCJjMGExXCIsXCLlmo/lo5Xlo5Plo5Hlo47lrLDlrKrlrKTlrbrlsLflsajltrzltrrltr3ltrjluavlvYzlvr3mh4nmh4Lmh4fmh6bmh4vmiLLmiLTmk47mk4rmk5jmk6Dmk7Dmk6bmk6zmk7Hmk6Lmk63mloLmloPmm5nmm5bmqoDmqpTmqoTmqqLmqpzmq5vmqqPmqb7mqpfmqpDmqqDmrZzmrq7mr5rmsIjmv5jmv7Hmv5/mv6Dmv5vmv6Tmv6vmv6/mvoDmv6zmv6Hmv6nmv5Xmv67mv7Dnh6fnh5/nh67nh6bnh6Xnh63nh6znh7Tnh6DniLXniYbnjbDnjbLnkqnnkrDnkqbnkqjnmYbnmYLnmYznm6rnnrPnnqrnnrDnnqxcIl0sXG5bXCJjMTQwXCIsXCLnnqfnnq3nn6/no7fno7rno7Tno6/npIHnpqfnpqrnqZfnqr/nsIfnsI3nr77nr7fnsIznr6Dns6Dns5zns57ns6Lns5/ns5nns53nuK7nuL7nuYbnuLfnuLLnuYPnuKvnuL3nuLHnuYXnuYHnuLTnuLnnuYjnuLXnuL/nuK/nvYTnv7Pnv7zogbHogbLogbDoga/ogbPoh4boh4Pohrroh4Loh4Dohr/ohr3oh4nohr7oh6joiInoibHolqpcIl0sXG5bXCJjMWExXCIsXCLoloTolb7olpzolpHolpTolq/olpvolofolqjoloromafon4Don5HonrPon5Lon4bonqvonrvonrron4jon4vopLvopLbopYTopLjopL3opqzorI7orJforJnorJvorIrorKDorJ3orITorJDosYHosL/osbPos7ros73os7zos7jos7votqjouYnouYvouYjouYrovYTovL7ovYLovYXovL/pgb/pgb3pgoTpgoHpgoLpgoDphLnphqPphp7phpzpjY3pjoLpjKjpjbXpjYrpjaXpjYvpjJjpjb7pjazpjZvpjbDpjZrpjZTpl4rpl4vpl4zpl4jpl4bpmrHpmrjpm5bpnJzpnJ7pnqDpn5PpoYbporbppLXpqIFcIl0sXG5bXCJjMjQwXCIsXCLpp7/prq7prqvprqrprq3ptLvptL/puovpu4/pu57pu5zpu53pu5vpvL7pvYvlj6LlmpXlmq7lo5nlo5jlrLjlvZ3mh6PmiLPmk7Tmk7Lmk77mlIbmk7rmk7vmk7fmlrfmm5zmnKbmqrPmqqzmq4Pmqrvmqrjmq4Lmqq7mqq/mrZ/mrbjmrq/ngInngIvmv77ngIbmv7rngJHngI/nh7vnh7znh77nh7jnjbfnjbXnkqfnkr/nlJXnmZbnmZhcIl0sXG5bXCJjMmExXCIsXCLnmZLnnr3nnr/nnrvnnrznpI7npq7nqaHnqaLnqaDnq4Tnq4XnsKvnsKfnsKrnsJ7nsKPnsKHns6fnuZTnuZXnuZ7nuZrnuaHnuZLnuZnnvYjnv7nnv7vogbfogbboh43oh4/oiIrol4/olqnol43ol5Dol4nolrDolrrolrnolqbon6/on6zon7Lon6DopoboprLop7TorKjorLnorKzorKvosZDotIXouZnouaPouabouaTouZ/ouZXou4DovYnovY3pgofpgoPpgojphqvphqzph5DpjpTpjorpjpbpjqLpjrPpjq7pjqzpjrDpjpjpjprpjpfpl5Tpl5bpl5Dpl5Xpm6Lpm5zpm5npm5vpm57pnKTpnqPpnqZcIl0sXG5bXCJjMzQwXCIsXCLpnq3pn7npoY3poY/poYzpoY7poZPporrppL7ppL/ppL3ppK7ppqXpqI7pq4HprIPprIbprY/prY7prY3pr4rpr4npr73pr4jpr4DptZHptZ3ptaDpu6DpvJXpvKzlhLPlmqXlo57lo5/lo6Llr7XpvpDlu6zmh7Lmh7fmh7bmh7XmlIDmlI/mm6Dmm53mq6Xmq53mq5rmq5PngJvngJ/ngKjngJrngJ3ngJXngJjniIbniI3niZjniqLnjbhcIl0sXG5bXCJjM2ExXCIsXCLnjbrnkr3nk4rnk6PnlofnlobnmZ/nmaHnn4fnpJnnprHnqavnqannsL7nsL/nsLjnsL3nsLfnsYDnuavnua3nubnnuannuarnvoXnubPnvrbnvrnnvrjoh5jol6nol53ol6rol5Xol6Tol6Xol7fon7vooIXooI3on7non77opaDopZ/opZbopZ7orYHorZzorZjorYnorZrorY7orY/orYborZnotIjotIroubzoubLouofoubbouazoubroubTovZTovY7ovq3pgorpgovphrHphq7pj6Hpj5Hpj5/pj4Ppj4jpj5zpj53pj5bpj6Lpj43pj5jpj6Tpj5fpj6jpl5zpmrTpm6PpnKrpnKfpnaHpn5zpn7vpoZ5cIl0sXG5bXCJjNDQwXCIsXCLpoZjpoZvporzppYXppYnpqJbpqJnprI3pr6jpr6fpr5bpr5vptonptaHptbLptarptazpupLpupfpupPpurTli7jlmqjlmrflmrblmrTlmrzlo6TlrYDlrYPlrb3lr7blt4nmh7jmh7rmlJjmlJTmlJnmm6bmnKfmq6zngL7ngLDngLLniJDnjbvnk4/nmaLnmaXnpKbnpKrnpKznpKvnq4fnq7bnsYznsYPnsY3ns6/ns7Dovq7nub3nubxcIl0sXG5bXCJjNGExXCIsXCLnuoLnvYzogIDoh5roiabol7vol7nomJHol7romIbomIvomIfomIrooJTooJXopaToprrop7jorbDorazorabora/orZ/oravotI/otI3ouonouoHouoXouoLphrTph4vpkJjpkIPpj73pl6HpnLDpo4TppZLppZHppqjpqKvpqLDpqLfpqLXpsJPpsI3pubnpurXpu6jpvK/pvZ/pvaPpvaHlhLflhLjlm4Hlm4Dlm4LlpJTlsazlt43mh7zmh77mlJ3mlJzmlpXmm6nmq7vmrITmq7rmrrLngYzniJvniqfnk5bnk5Tnmannn5PnsZDnuo/nuoznvrzomJfomK3omJrooKPooKLooKHooJ/oparopazopr3orbRcIl0sXG5bXCJjNTQwXCIsXCLorbforb3otJPouorouo3ouovovZ/ovq/phrrpkK7pkLPpkLXpkLrpkLjpkLLpkKvpl6LpnLjpnLnpnLLpn7/poafpoaXppZfpqYXpqYPpqYDpqL7pq4/prZTprZHpsK3psKXptq/ptrTpt4Lptrjpup3pu6/pvJnpvZzpvabpvaflhLzlhLvlm4jlm4rlm4nlrb/lt5Tlt5LlvY7mh7/mlKTmrIrmraHngZHngZjnjoDnk6Tnlornma7nmaxcIl0sXG5bXCJjNWExXCIsXCLnprPnsaDnsZ/ogb7ogb3oh5/opbLopa/op7zoroDotJbotJfoupHoupPovaHphYjpkYTpkZHpkZLpnL3pnL7pn4Ppn4HpoavppZXpqZXpqY3pq5LprJrpsYnpsLHpsL7psLvpt5Ppt5fpvLTpvazpvarpvpTlm4zlt5bmiIDmlKPmlKvmlKrmm6zmrJDnk5rnq4rnsaTnsaPnsaXnupPnupbnupToh6LomLjomL/ooLHororpgpDpgo/pkaPpkaDpkaTpnajpoa/ppZzpqZrpqZvpqZfpq5Ppq5Tpq5HpsZTpsZfpsZbpt6Xpup/pu7Tlm5Hlo6nmlKzngZ7nmbHnmbLnn5fnvZDnvojooLbooLnooaLorpPorpJcIl0sXG5bXCJjNjQwXCIsXCLorpboibfotJvph4DpkarpnYLpnYjpnYTpn4bpobDpqZ/prKLprZjpsZ/pt7npt7rpubzpub3pvIfpvbfpvbLlu7PmrJbngaPnsaznsa7ooLvop4DouqHph4HpkbLpkbDpobHppZ7pq5bprKPpu4zngaTnn5rorprpkbfpn4npqaLpqaXnupzorpzouqrph4Xpkb3pkb7pkbzpsbfpsbjpu7fosZTpkb/puJrniKjpqarprLHpuJvpuJ7nsbJcIl0sXG5bXCJjOTQwXCIsXCLkuYLkuZzlh7XljJrljoLkuIfkuIzkuYfkuo3lm5fvqIzlsa7lvbPkuI/lhofkuI7kuK7kupPku4Lku4nku4jlhpjli7zljazljrnlnKDlpIPlpKzlsJDlt7/ml6HmrrPmr4zmsJTniL/kuLHkuLzku6jku5zku6nku6Hku53ku5rliIzljJzljYzlnKLlnKPlpJflpK/lroHlroTlsJLlsLvlsbTlsbPluITluoDluoLlv4nmiInmiZDmsJVcIl0sXG5bXCJjOWExXCIsXCLmsLbmsYPmsL/msLvniq7nirDnjornprjogorpmJ7kvI7kvJjkvKzku7XkvJTku7HkvIDku7fkvIjkvJ3kvILkvIXkvKLkvJPkvITku7TkvJLlhrHliJPliInliJDliqbljKLljJ/ljY3ljorlkIflm6Hlm5/lnK7lnKrlnLTlpLzlpoDlpbzlpoXlpbvlpb7lpbflpb/lrZblsJXlsKXlsbzlsbrlsbvlsb7lt5/lubXluoTlvILlvJrlvbTlv5Xlv5Tlv4/miZzmiZ7miaTmiaHmiabmiaLmiZnmiaDmiZrmiaXml6/ml67mnL7mnLnmnLjmnLvmnLrmnL/mnLzmnLPmsJjmsYbmsZLmsZzmsY/msYrmsZTmsYtcIl0sXG5bXCJjYTQwXCIsXCLmsYzngbHniZ7nirTnirXnjo7nlKrnmb/nqbXnvZHoibjoibzoioDoib3oib/omY3opb7pgpnpgpfpgpjpgpvpgpTpmKLpmKTpmKDpmKPkvZbkvLvkvaLkvYnkvZPkvaTkvL7kvafkvZLkvZ/kvYHkvZjkvK3kvLPkvL/kvaHlho/lhrnliJzliJ7liKHliq3liq7ljInljaPljbLljo7ljo/lkLDlkLflkKrlkZTlkYXlkJnlkJzlkKXlkJhcIl0sXG5bXCJjYWExXCIsXCLlkL3lkY/lkYHlkKjlkKTlkYflm67lm6flm6XlnYHlnYXlnYzlnYnlnYvlnZLlpIblpYDlpqblppjlpqDlppflpo7lpqLlppDlpo/lpqflpqHlro7lrpLlsKjlsKrlso3lso/lsojlsovlsonlspLlsorlsoblspPlspXlt6DluIrluI7luovluonluozluojluo3lvIXlvJ3lvbjlvbblv5Llv5Hlv5Dlv63lv6jlv67lv7Plv6Hlv6Tlv6Plv7rlv6/lv7flv7vmgIDlv7TmiLrmioPmiozmio7mio/mipTmiofmibHmibvmibrmibDmioHmiojmibfmib3mibLmibTmlLfml7Dml7Tml7Pml7Lml7XmnYXmnYdcIl0sXG5bXCJjYjQwXCIsXCLmnZnmnZXmnYzmnYjmnZ3mnY3mnZrmnYvmr5DmsJnmsJrmsbjmsafmsavmsoTmsovmso/msbHmsa/msanmsprmsa3msofmspXmspzmsabmsbPmsaXmsbvmso7ngbTngbrniaPnir/nir3ni4Pni4bni4Hnirrni4XnjpXnjpfnjpPnjpTnjpLnlLrnlLnnlpTnlpXnmoHnpL3ogLTogpXogpnogpDogpLogpzoipDoio/oioXoio7oipHoipNcIl0sXG5bXCJjYmExXCIsXCLoioroioPoioTosbjov4novr/pgp/pgqHpgqXpgp7pgqfpgqDpmLDpmKjpmK/pmK3kuLPkvpjkvbzkvoXkvb3kvoDkvofkvbbkvbTkvonkvoTkvbfkvYzkvpfkvarkvprkvbnkvoHkvbjkvpDkvpzkvpTkvp7kvpLkvoLkvpXkvavkva7lhp7lhrzlhr7liLXliLLliLPliYbliLHlirzljIrljIvljLzljpLljpTlkoflkb/lkoHlkpHlkoLlkojlkavlkbrlkb7lkaXlkazlkbTlkablko3lka/lkaHlkaDlkpjlkaPlkaflkaTlm7flm7nlna/lnbLlna3lnavlnbHlnbDlnbblnoDlnbXlnbvlnbPlnbTlnaJcIl0sXG5bXCJjYzQwXCIsXCLlnajlnb3lpIzlpYXlprXlprrlp4/lp47lprLlp4zlp4Hlprblprzlp4Plp5blprHlpr3lp4Dlp4jlprTlp4flraLlraXlrpPlrpXlsYTlsYflsq7lsqTlsqDlsrXlsq/lsqjlsqzlsp/lsqPlsq3lsqLlsqrlsqflsp3lsqXlsrblsrDlsqbluJfluJTluJnlvKjlvKLlvKPlvKTlvZTlvoLlvb7lvb3lv57lv6XmgK3mgKbmgJnmgLLmgItcIl0sXG5bXCJjY2ExXCIsXCLmgLTmgIrmgJfmgLPmgJrmgJ7mgKzmgKLmgI3mgJDmgK7mgJPmgJHmgIzmgInmgJzmiJTmiL3miq3mirTmi5Hmir7miqrmirbmi4rmiq7mirPmiq/mirvmiqnmirDmirjmlL3mlqjmlrvmmInml7zmmITmmJLmmIjml7vmmIPmmIvmmI3mmIXml73mmJHmmJDmm7bmnIrmnoXmnazmno7mnpLmnbbmnbvmnpjmnobmnoTmnbTmno3mnozmnbrmnp/mnpHmnpnmnoPmnb3mnoHmnbjmnbnmnpTmrKXmroDmrb7mr57msJ3mspPms6zms6vms67ms5nmsrbms5Tmsq3ms6fmsrfms5Dms4Lmsrrms4Pms4bms63ms7JcIl0sXG5bXCJjZDQwXCIsXCLms5Lms53msrTmsormsp3msoDms57ms4DmtLDms43ms4fmsrDms7nms4/ms6nms5HngpTngpjngoXngpPngobngoTngpHngpbngoLngprngoPniarni5bni4vni5jni4nni5zni5Lni5Tni5rni4zni5HnjqTnjqHnjq3njqbnjqLnjqDnjqznjp3nk53nk6jnlL/nlYDnlL7nloznlpjnmq/nm7Pnm7Hnm7Dnm7Xnn7jnn7znn7nnn7vnn7pcIl0sXG5bXCJjZGExXCIsXCLnn7fnpYLnpL/np4Xnqbjnqbvnq7vnsbXns73ogLXogo/ogq7ogqPogrjogrXogq3oiKDoiqDoi4DoiqvoiproipjoipvoirXoiqfoiq7oirzoip7oirroirToiqjoiqHoiqnoi4LoiqToi4PoirboiqLombDoma/oma3oma7osZbov5Lov4vov5Pov43ov5bov5Xov5fpgrLpgrTpgq/pgrPpgrDpmLnpmL3pmLzpmLrpmYPkv43kv4Xkv5PkvrLkv4nkv4vkv4Hkv5Tkv5zkv5nkvrvkvrPkv5vkv4fkv5bkvrrkv4Dkvrnkv6zliYTliYnli4Dli4LljL3ljbzljpfljpbljpnljpjlkrrlkqHlkq3lkqXlk49cIl0sXG5bXCJjZTQwXCIsXCLlk4PojI3lkrflkq7lk5blkrblk4Xlk4blkqDlkbDlkrzlkqLlkr7lkbLlk57lkrDlnrXlnp7lnp/lnqTlnozlnpflnp3lnpvlnpTlnpjlno/lnpnlnqXlnprlnpXlo7TlpI3lpZPlp6Hlp57lp67lqIDlp7Hlp53lp7rlp73lp7zlp7blp6Tlp7Llp7flp5vlp6nlp7Plp7Xlp6Dlp77lp7Tlp63lrqjlsYzls5Dls5jls4zls5fls4vls5tcIl0sXG5bXCJjZWExXCIsXCLls57ls5rls4nls4fls4rls5bls5Pls5Tls4/ls4jls4bls47ls5/ls7jlt7nluKHluKLluKPluKDluKTlurDluqTluqLlupvluqPluqXlvIflvK7lvZblvobmgLfmgLnmgZTmgbLmgZ7mgYXmgZPmgYfmgYnmgZvmgYzmgYDmgYLmgZ/mgKTmgYTmgZjmgabmga7miYLmiYPmi4/mjI3mjIvmi7XmjI7mjIPmi6vmi7nmjI/mjIzmi7jmi7bmjIDmjJPmjJTmi7rmjJXmi7vmi7DmlYHmlYPmlqrmlr/mmLbmmKHmmLLmmLXmmJzmmKbmmKLmmLPmmKvmmLrmmJ3mmLTmmLnmmK7mnI/mnJDmn4Hmn7Lmn4jmnrpcIl0sXG5bXCJjZjQwXCIsXCLmn5zmnrvmn7jmn5jmn4Dmnrfmn4Xmn6vmn6Tmn5/mnrXmn43mnrPmn7fmn7bmn67mn6Pmn4Lmnrnmn47mn6fmn7DmnrLmn7zmn4bmn63mn4zmnq7mn6bmn5vmn7rmn4nmn4rmn4Pmn6rmn4vmrKjmroLmroTmrrbmr5bmr5jmr6DmsKDmsKHmtKjmtLTmtK3mtJ/mtLzmtL/mtJLmtIrms5rmtLPmtITmtJnmtLrmtJrmtJHmtIDmtJ3mtYJcIl0sXG5bXCJjZmExXCIsXCLmtIHmtJjmtLfmtIPmtI/mtYDmtIfmtKDmtKzmtIjmtKLmtInmtJDngrfngp/ngr7ngrHngrDngqHngrTngrXngqnniYHniYnniYrniaznibDnibPnia7ni4rni6Tni6jni6vni5/ni6rni6bni6PnjoXnj4znj4Lnj4jnj4XnjrnnjrbnjrXnjrTnj6vnjr/nj4fnjr7nj4Pnj4bnjrjnj4vnk6znk67nlK7nlYfnlYjnlqfnlqrnmbnnm4TnnIjnnIPnnITnnIXnnIrnm7fnm7vnm7rnn6fnn6jnoIbnoJHnoJLnoIXnoJDnoI/noI7noInnoIPnoJPnpYrnpYznpYvnpYXnpYTnp5Xnp43np4/np5bnp47nqoBcIl0sXG5bXCJkMDQwXCIsXCLnqb7nq5HnrIDnrIHnsbrnsbjnsbnnsb/nsoDnsoHntIPntIjntIHnvZjnvpHnvo3nvr7ogIfogI7ogI/ogJTogLfog5jog4fog6Dog5Hog4jog4Log5Dog4Xog6Pog5nog5zog4rog5Xog4nog4/og5fog6bog43oh7/oiKHoipToi5noi77oi7nojIfoi6jojIDoi5XojLroi6voi5boi7Toi6zoi6Hoi7Loi7XojIzoi7voi7boi7Doi6pcIl0sXG5bXCJkMGExXCIsXCLoi6Toi6Doi7roi7Poi63ombfombTombzombPooYHooY7ooafooarooanop5PoqIToqIfotbLov6Pov6Hov67ov6Dpg7Hpgr3pgr/pg5Xpg4Xpgr7pg4fpg4vpg4jph5Tph5PpmZTpmY/pmZHpmZPpmYrpmY7lgJ7lgIXlgIflgJPlgKLlgLDlgJvkv7Xkv7TlgLPlgLflgKzkv7bkv7flgJflgJzlgKDlgKflgLXlgK/lgLHlgI7lhZrlhpTlhpPlh4rlh4Tlh4Xlh4jlh47liaHliZrliZLliZ7liZ/liZXliaLli43ljI7ljp7llKblk6LllJfllJLlk6flk7Plk6TllJrlk7/llITllIjlk6vllJHllIXlk7FcIl0sXG5bXCJkMTQwXCIsXCLllIrlk7vlk7flk7jlk6DllI7llIPllIvlnIHlnILln4zloLLln5Xln5Llnrrln4blnr3lnrzlnrjlnrblnr/ln4fln5Dlnrnln4HlpI7lpYrlqJnlqJblqK3lqK7lqJXlqI/lqJflqIrlqJ7lqLPlrazlrqflrq3lrqzlsIPlsZblsZTls6zls7/ls67ls7Hls7fltIDls7nluKnluKjluqjluq7luqrluqzlvLPlvLDlvafmgZ3mgZrmgadcIl0sXG5bXCJkMWExXCIsXCLmgYHmgqLmgojmgoDmgpLmgoHmgp3mgoPmgpXmgpvmgpfmgofmgpzmgo7miJnmiYbmi7LmjJDmjZbmjKzmjYTmjYXmjLbmjYPmj6TmjLnmjYvmjYrmjLzmjKnmjYHmjLTmjZjmjZTmjZnmjK3mjYfmjLPmjZrmjZHmjLjmjZfmjYDmjYjmlYrmlYbml4bml4Pml4Tml4LmmYrmmZ/mmYfmmZHmnJLmnJPmoJ/moJrmoYnmoLLmoLPmoLvmoYvmoY/moJbmoLHmoJzmoLXmoKvmoK3moK/moY7moYTmoLTmoJ3moJLmoJTmoKbmoKjmoK7moY3moLrmoKXmoKDmrKzmrK/mrK3mrLHmrLTmra3ogoLmrojmr6bmr6RcIl0sXG5bXCJkMjQwXCIsXCLmr6jmr6Pmr6Lmr6fmsKXmtbrmtaPmtaTmtbbmtI3mtaHmtpLmtZjmtaLmta3mta/mtpHmto3mt6/mtb/mtobmtZ7mtafmtaDmtpfmtbDmtbzmtZ/mtoLmtpjmtK/mtajmtovmtb7mtoDmtoTmtJbmtoPmtbvmtb3mtbXmtpDng5zng5Png5Hng53ng4vnvLnng6Lng5fng5Lng57ng6Dng5Tng43ng4Xng4bng4fng5rng47ng6HniYLnibhcIl0sXG5bXCJkMmExXCIsXCLnibfnibbnjIDni7rni7Tni77ni7bni7Pni7vnjIHnj5Pnj5nnj6Xnj5bnjrznj6fnj6Pnj6nnj5znj5Lnj5vnj5Tnj53nj5rnj5fnj5jnj6jnk57nk5/nk7Tnk7XnlKHnlZvnlZ/nlrDnl4Hnlrvnl4Tnl4Dnlr/nlrbnlrrnmornm4nnnJ3nnJvnnJDnnJPnnJLnnKPnnJHnnJXnnJnnnJrnnKLnnKfnoKPnoKznoKLnoLXnoK/noKjnoK7noKvnoKHnoKnnoLPnoKrnoLHnpZTnpZvnpY/npZznpZPnpZLnpZHnp6vnp6znp6Dnp67np63np6rnp5znp57np53nqobnqonnqoXnqovnqoznqornqofnq5jnrJBcIl0sXG5bXCJkMzQwXCIsXCLnrITnrJPnrIXnrI/nrIjnrIrnrI7nrInnrJLnsoTnspHnsornsoznsojnso3nsoXntJ7ntJ3ntJHntI7ntJjntJbntJPntJ/ntJLntI/ntIznvZznvaHnvZ7nvaDnvZ3nvZvnvpbnvpLnv4Pnv4Lnv4DogJbogL7ogLnog7rog7Log7nog7XohIHog7vohIDoiIHoiK/oiKXojLPojK3ojYTojJnojZHojKXojZbojL/ojYHojKbojJzojKJcIl0sXG5bXCJkM2ExXCIsXCLojYLojY7ojJvojKrojIjojLzojY3ojJbojKTojKDojLfojK/ojKnojYfojYXojYzojZPojJ7ojKzojYvojKfojYjomZPomZLomqLomqjompbomo3ompHomp7omofompfomobomovompromoXomqXompnomqHomqfompXompjomo7omp3ompDompTooYPooYTooa3oobXoobboobLoooDoobHoob/ooa/oooPoob7oobToobzoqJLosYfosZfosbvosqTosqPotbbotbjotrXotrfotrbou5Hou5Pov77ov7XpgILov7/ov7vpgITov7zov7bpg5bpg6Dpg5npg5rpg6Ppg5/pg6Xpg5jpg5vpg5fpg5zpg6TphZBcIl0sXG5bXCJkNDQwXCIsXCLphY7phY/ph5Xph6Lph5rpmZzpmZ/pmrzpo6Ppq5/prK/kub/lgbDlgarlgaHlgZ7lgaDlgZPlgYvlgZ3lgbLlgYjlgY3lgYHlgZvlgYrlgaLlgJXlgYXlgZ/lganlgavlgaPlgaTlgYblgYDlga7lgbPlgZflgZHlh5Dliavlia3liazlia7li5bli5PljK3ljpzllbXllbbllLzllY3llZDllLTllKrllZHllaLllLbllLXllLDllZLllYVcIl0sXG5bXCJkNGExXCIsXCLllIzllLLllaXllY7llLnllYjllK3llLvllYDllYvlnIrlnIfln7vloJTln6Lln7bln5zln7TloIDln63ln73loIjln7jloIvln7Pln4/loIfln67ln6Pln7Lln6Xln6zln6HloI7ln7zloJDln6floIHloIzln7Hln6nln7DloI3loITlpZzlqaDlqZjlqZXlqaflqZ7lqLjlqLXlqa3lqZDlqZ/lqaXlqazlqZPlqaTlqZflqYPlqZ3lqZLlqYTlqZvlqYjlqo7lqL7lqY3lqLnlqYzlqbDlqanlqYflqZHlqZblqYLlqZzlrbLlra7lr4Hlr4DlsZnltJ7ltIvltJ3ltJrltKDltIzltKjltI3ltKbltKXltI9cIl0sXG5bXCJkNTQwXCIsXCLltLDltJLltKPltJ/ltK7luL7luLTlurHlurTlurnlurLlurPlvLblvLjlvpvlvpblvp/mgormgpDmgobmgr7mgrDmgrrmg5Pmg5Tmg4/mg6Tmg5nmg53mg4jmgrHmg5vmgrfmg4rmgr/mg4Pmg43mg4DmjLLmjaXmjormjoLmjb3mjr3mjp7mjq3mjp3mjpfmjqvmjo7mja/mjofmjpDmja7mjq/mjbXmjpzmja3mjq7mjbzmjqTmjLvmjp9cIl0sXG5bXCJkNWExXCIsXCLmjbjmjoXmjoHmjpHmjo3mjbDmlZPml43mmaXmmaHmmZvmmZnmmZzmmaLmnJjmobnmoofmopDmopzmoa3moa7moq7moqvmpZbmoa/moqPmoqzmoqnmobXmobTmorLmoo/mobfmopLmobzmoavmobLmoqrmooDmobHmob7mopvmopbmoovmoqDmoonmoqTmobjmobvmopHmoozmoormob3mrLbmrLPmrLfmrLjmrpHmro/mro3mro7mrozmsKrmt4DmtqvmtrTmtrPmubTmtqzmt6nmt6Lmtrfmt7bmt5TmuIDmt4jmt6Dmt5/mt5bmtr7mt6Xmt5zmt53mt5vmt7Tmt4rmtr3mt63mt7Dmtrrmt5Xmt4Lmt4/mt4lcIl0sXG5bXCJkNjQwXCIsXCLmt5Dmt7Lmt5Pmt73mt5fmt43mt6Pmtrvng7rnhI3ng7fnhJfng7TnhIzng7DnhITng7PnhJDng7zng7/nhIbnhJPnhIDng7jng7bnhIvnhILnhI7nib7nibvnibznib/njJ3njJfnjIfnjJHnjJjnjIrnjIjni7/njI/njJ7njojnj7bnj7jnj7XnkITnkIHnj73nkIfnkIDnj7rnj7znj7/nkIznkIvnj7TnkIjnlaTnlaPnl47nl5Lnl49cIl0sXG5bXCJkNmExXCIsXCLnl4vnl4znl5Hnl5Dnmo/nmonnm5PnnLnnnK/nnK3nnLHnnLLnnLTnnLPnnL3nnKXnnLvnnLXnoYjnoZLnoYnnoY3noYrnoYznoKbnoYXnoZDnpaTnpafnpannparnpaPnpavnpaHnprvnp7rnp7jnp7bnp7fnqo/nqpTnqpDnrLXnrYfnrLTnrKXnrLDnrKLnrKTnrLPnrJjnrKrnrJ3nrLHnrKvnrK3nrK/nrLLnrLjnrJrnrKPnspTnspjnspbnsqPntLXntL3ntLjntLbntLrntYXntKzntKnntYHntYfntL7ntL/ntYrntLvntKjnvaPnvpXnvpznvp3nvpvnv4rnv4vnv43nv5Dnv5Hnv4fnv4/nv4nogJ9cIl0sXG5bXCJkNzQwXCIsXCLogJ7ogJvogYfogYPogYjohJjohKXohJnohJvohK3ohJ/ohKzohJ7ohKHohJXohKfohJ3ohKLoiJHoiLjoiLPoiLroiLToiLLoibTojpDojqPojqjojo3ojbrojbPojqTojbTojo/ojoHojpXojpnojbXojpTojqnojb3ojoPojozojp3ojpvojqrojovojb7ojqXojq/ojojojpfojrDojb/ojqbojofojq7ojbbojpromZnomZbomr/omrdcIl0sXG5bXCJkN2ExXCIsXCLom4Lom4Hom4XomrromrDom4jomrnomrPomrjom4zomrTomrvomrzom4Pomr3omr7ooZLooonoopXooqjooqLooqrooproopHooqHoop/oopjooqfoopnoopvoopfooqTooqzooozoopPooo7opoLop5bop5nop5XoqLDoqKfoqKzoqJ7osLnosLvosZzosZ3osb3osqXotb3otbvotbnotrzot4Lotrnotr/ot4Hou5jou57ou53ou5zou5fou6Dou6HpgKTpgIvpgJHpgJzpgIzpgKHpg6/pg6rpg7Dpg7Tpg7Lpg7Ppg5Tpg6vpg6zpg6nphZbphZjphZrphZPphZXph6zph7Tph7Hph7Pph7jph6Tph7nph6pcIl0sXG5bXCJkODQwXCIsXCLph6vph7fph6jph67plbrplobplojpmbzpma3pmavpmbHpma/pmr/pnarpoITpo6XpppflgpvlgpXlgpTlgp7lgovlgqPlgoPlgozlgo7lgp3lgajlgpzlgpLlgoLlgoflhZ/lh5TljJLljJHljqTljqfllpHllqjllqXllq3llbflmYXllqLllpPllojllo/llrXlloHllqPllpLllqTllb3llozllqbllb/llpXllqHllo7lnIzloKnloLdcIl0sXG5bXCJkOGExXCIsXCLloJnloJ7loKfloKPloKjln7XloYjloKXloJzloJvloLPloL/loLbloK7loLnloLjloK3loKzloLvlpaHlqq/lqpTlqp/lqbrlqqLlqp7lqbjlqqblqbzlqqXlqqzlqpXlqq7lqLflqoTlqorlqpflqoPlqovlqqnlqbvlqb3lqozlqpzlqo/lqpPlqp3lr6rlr43lr4vlr5Tlr5Hlr4rlr47lsIzlsLDltLfltYPltavltYHltYvltL/ltLXltZHltY7ltZXltLPltLrltZLltL3ltLHltZnltYLltLnltYnltLjltLzltLLltLbltYDltYXluYTluYHlvZjlvqblvqXlvqvmg4nmgrnmg4zmg6Lmg47mg4TmhJRcIl0sXG5bXCJkOTQwXCIsXCLmg7LmhIrmhJbmhIXmg7XmhJPmg7jmg7zmg77mg4HmhIPmhJjmhJ3mhJDmg7/mhITmhIvmiYrmjpTmjrHmjrDmj47mj6Xmj6jmj6/mj4Pmkp3mj7Pmj4rmj6Dmj7bmj5Xmj7Lmj7XmkaHmj5/mjr7mj53mj5zmj4Tmj5jmj5Pmj4Lmj4fmj4zmj4vmj4jmj7Dmj5fmj5nmlLLmlafmlarmlaTmlZzmlajmlaXmlozmlp3mlp7mlq7ml5Dml5JcIl0sXG5bXCJkOWExXCIsXCLmmbzmmazmmbvmmoDmmbHmmbnmmarmmbLmnIHmpIzmo5PmpITmo5zmpKrmo6zmo6rmo7HmpI/mo5bmo7fmo6vmo6Tmo7bmpJPmpJDmo7Pmo6HmpIfmo4zmpIjmpbDmorTmpJHmo6/mo4bmpJTmo7jmo5Dmo73mo7zmo6jmpIvmpIrmpJfmo47mo4jmo53mo57mo6bmo7Tmo5HmpIbmo5Tmo6nmpJXmpKXmo4fmrLnmrLvmrL/mrLzmrpTmrpfmrpnmrpXmrr3mr7Dmr7Lmr7PmsLDmt7zmuYbmuYfmuJ/muYnmuojmuLzmuL3muYXmuaLmuKvmuL/muYHmuZ3mubPmuJzmuLPmuYvmuYDmuZHmuLvmuIPmuK7muZ5cIl0sXG5bXCJkYTQwXCIsXCLmuajmuZzmuaHmuLHmuKjmuaDmubHmuavmuLnmuKLmuLDmuZPmuaXmuKfmubjmuaTmubfmuZXmubnmuZLmuabmuLXmuLbmuZrnhKDnhJ7nhK/ng7vnhK7nhLHnhKPnhKXnhKLnhLLnhJ/nhKjnhLrnhJvniYvniZrniojnionniobnioXniovnjJLnjIvnjLDnjKLnjLHnjLPnjKfnjLLnjK3njKbnjKPnjLXnjIznkK7nkKznkLDnkKvnkJZcIl0sXG5bXCJkYWExXCIsXCLnkJrnkKHnkK3nkLHnkKTnkKPnkJ3nkKnnkKDnkLLnk7vnlK/nla/nlaznl6fnl5rnl6Hnl6bnl53nl5/nl6Tnl5fnmpXnmpLnm5rnnYbnnYfnnYTnnY3nnYXnnYrnnY7nnYvnnYznn57nn6znoaDnoaTnoaXnoZznoa3nobHnoarnoa7nobDnoannoajnoZ7noaLnpbTnpbPnpbLnpbDnqILnqIrnqIPnqIznqITnqpnnq6bnq6TnrYrnrLvnrYTnrYjnrYznrY7nrYDnrZjnrYXnsqLnsp7nsqjnsqHntZjnta/ntaPntZPntZbntafntarntY/nta3ntZzntavntZLntZTntanntZHntZ/ntY7nvL7nvL/nvaVcIl0sXG5bXCJkYjQwXCIsXCLnvabnvqLnvqDnvqHnv5fogZHogY/ogZDog77og5TohYPohYrohZLohY/ohYfohL3ohY3ohLroh6boh67oh7foh7joh7noiIToiLzoiL3oiL/oibXojLvoj4/oj7nokKPoj4Doj6jokJLoj6foj6Toj7zoj7bokJDoj4boj4joj6voj6Pojr/okIHoj53oj6Xoj5joj7/oj6Hoj4voj47oj5boj7Xoj4nokInokI/oj57okJHokIboj4Loj7NcIl0sXG5bXCJkYmExXCIsXCLoj5Xoj7roj4foj5Hoj6rokJPoj4Poj6zoj67oj4Toj7voj5foj6LokJvoj5voj77om5jom6Lom6bom5Pom6Pom5rom6rom53om6vom5zom6zom6nom5fom6jom5HooYjooZbooZXoorroo5foornoorjoo4Door7oorboorzoorfoor3oorLopIHoo4noppXoppjoppfop53op5rop5voqY7oqY3oqLnoqZnoqYDoqZfoqZjoqYToqYXoqZLoqYjoqZHoqYroqYzoqY/osZ/osoHosoDosrrosr7osrDosrnosrXotoTotoDotonot5jot5Pot43ot4fot5bot5zot4/ot5Xot5not4jot5fot4Xou6/ou7fou7pcIl0sXG5bXCJkYzQwXCIsXCLou7nou6bou67ou6Xou7Xou6fou6jou7bou6vou7Hou6zou7Tou6npgK3pgLTpgK/phIbphKzphITpg7/pg7zphIjpg7npg7vphIHphIDphIfphIXphIPphaHphaTphZ/phaLphaDpiIHpiIrpiKXpiIPpiJrpiKbpiI/piIzpiIDpiJLph7/ph73piIbpiITpiKfpiILpiJzpiKTpiJnpiJfpiIXpiJbplbvplo3plozplpDpmofpmb7pmohcIl0sXG5bXCJkY2ExXCIsXCLpmonpmoPpmoDpm4Lpm4jpm4Ppm7Hpm7DpnazpnbDpna7poIfpoqnpo6vps6bpu7nkuoPkuoTkurblgr3lgr/lg4blgq7lg4Tlg4rlgrTlg4jlg4LlgrDlg4HlgrrlgrHlg4vlg4nlgrblgrjlh5flibrlibjlibvlibzll4Pll5vll4zll5Dll4vll4rll53ll4Dll5Tll4Tll6nllr/ll5Lllo3ll4/ll5Xll6Lll5bll4jll7Lll43ll5nll4LlnJTloZPloajloaTloY/loY3loYnloa/loZXloY7loZ3loZnloaXloZvloL3loaPlobHlo7zlq4flq4Tlq4vlqrrlqrjlqrHlqrXlqrDlqr/lq4jlqrvlq4ZcIl0sXG5bXCJkZDQwXCIsXCLlqrflq4Dlq4rlqrTlqrblq43lqrnlqpDlr5blr5jlr5nlsJ/lsLPltbHltaPltYrltaXltbLltazltZ7ltajltafltaLlt7DluY/luY7luYrluY3luYvlu4Xlu4zlu4blu4vlu4flvYDlvq/lvq3mg7fmhYnmhYrmhKvmhYXmhLbmhLLmhK7mhYbmhK/mhY/mhKnmhYDmiKDphajmiKPmiKXmiKTmj4Xmj7Hmj6vmkJDmkJLmkInmkKDmkKRcIl0sXG5bXCJkZGExXCIsXCLmkLPmkYPmkJ/mkJXmkJjmkLnmkLfmkKLmkKPmkIzmkKbmkLDmkKjmkYHmkLXmkK/mkIrmkJrmkYDmkKXmkKfmkIvmj6fmkJvmkK7mkKHmkI7mla/mlpLml5PmmobmmozmmpXmmpDmmovmmormmpnmmpTmmbjmnKDmpabmpZ/mpLjmpY7mpaLmpbHmpL/mpYXmparmpLnmpYLmpZfmpZnmpbrmpYjmpYnmpLXmpazmpLPmpL3mpaXmo7DmpbjmpLTmpanmpYDmpa/mpYTmpbbmpZjmpYHmpbTmpYzmpLvmpYvmpLfmpZzmpY/mpZHmpLLmpZLmpK/mpbvmpLzmrYbmrYXmrYPmrYLmrYjmrYHmrpvvqI3mr7vmr7xcIl0sXG5bXCJkZTQwXCIsXCLmr7nmr7fmr7jmupvmu5bmu4jmuo/mu4Dmup/mupPmupTmuqDmurHmurnmu4bmu5Lmur3mu4Hmup7mu4nmurfmurDmu43muqbmu4/murLmur7mu4Pmu5zmu5jmupnmupLmuo7muo3muqTmuqHmur/murPmu5Dmu4rmupfmuq7muqPnhYfnhZTnhZLnhaPnhaDnhYHnhZ3nhaLnhbLnhbjnharnhaHnhYLnhZjnhYPnhYvnhbDnhZ/nhZDnhZNcIl0sXG5bXCJkZWExXCIsXCLnhYTnhY3nhZrniY/nio3nioznipHnipDnio7njLznjYLnjLvnjLrnjYDnjYrnjYnnkYTnkYrnkYvnkZLnkZHnkZfnkYDnkY/nkZDnkY7nkYLnkYbnkY3nkZTnk6Hnk7/nk77nk73nlJ3nlbnnlbfmpoPnl6/nmI/nmIPnl7fnl77nl7znl7nnl7jnmJDnl7vnl7bnl63nl7Xnl73nmpnnmrXnm53nnZXnnZ/nnaDnnZLnnZbnnZrnnannnafnnZTnnZnnna3nn6DnoofnoprnopTnoo/nooTnopXnooXnoobnoqHnooPnobnnopnnooDnopbnobvnpbznpoLnpb3npbnnqJHnqJjnqJnnqJLnqJfnqJXnqKLnqJNcIl0sXG5bXCJkZjQwXCIsXCLnqJvnqJDnqqPnqqLnqp7nq6vnrabnraTnra3nrbTnrannrbLnraXnrbPnrbHnrbDnraHnrbjnrbbnraPnsrLnsrTnsq/ntojntobntoDnto3ntb/ntoXntbrnto7ntbvntoPntbzntozntpTntoTntb3ntpLnva3nvavnvafnvajnvaznvqbnvqXnvqfnv5vnv5zogKHohaTohaDohbfohZzohanohZvohaLohbLmnKHohZ7ohbbohafoha9cIl0sXG5bXCJkZmExXCIsXCLohYTohaHoiJ3oiYnoiYToiYDoiYLoiYXok7HokL/okZbokbbokbnoko/oko3okaXokZHokYDokobokafokLDokY3okb3okZrokZnokbTokbPokZ3olIfokZ7okLfokLrokLTokbrokYPokbjokLLokYXokKnoj5nokYvokK/okYLokK3okZ/okbDokLnokY7okYzokZLoka/ok4Xoko7okLvokYfokLbokLPokajokb7okYTokKvokaDokZToka7okZDonIvonITom7fonIzom7rom5bom7XonY3om7jonI7onInonIHom7bonI3onIXoo5boo4voo43oo47oo57oo5voo5roo4zoo5DopoXoppvop5/op6Xop6RcIl0sXG5bXCJlMDQwXCIsXCLop6Hop6Dop6Lop5zop6boqbboqoboqb/oqaHoqL/oqbfoqoLoqoToqbXoqoPoqoHoqbToqbrosLzosYvosYrosaXosaTosabosobosoTosoXos4zotajotanotpHotozoto7oto/oto3otpPotpTotpDotpLot7Dot6Dot6zot7Hot67ot5Dot6not6Pot6Lot6fot7Lot6vot7TovIbou7/ovIHovIDovIXovIfovIjovILovIvpgZLpgL9cIl0sXG5bXCJlMGExXCIsXCLpgYTpgYnpgL3phJDphI3phI/phJHphJbphJTphIvphI7pha7pha/piYjpiZLpiLDpiLrpiabpiLPpiaXpiZ7pioPpiK7piYrpiYbpia3piazpiY/piaDpiafpia/piLbpiaHpibDpiLHpiZTpiaPpiZDpibLpiY7piZPpiYzpiZbpiLLplp/plpzplp7plpvpmpLpmpPpmpHpmpfpm47pm7rpm73pm7jpm7XpnbPpnbfpnbjpnbLpoI/poI3poI7poqzpo7bpo7nppq/pprLpprDpprXpqq3pqqvprZvps6rps63ps6fpuoDpu73lg6blg5Tlg5flg6jlg7Plg5vlg6rlg53lg6Tlg5Plg6zlg7Dlg6/lg6Plg6BcIl0sXG5bXCJlMTQwXCIsXCLlh5jlioDlioHli6nli6vljLDljqzlmKflmJXlmIzlmJLll7zlmI/lmJzlmIHlmJPlmILll7rlmJ3lmITll7/ll7nloonlobzlopDlopjlooblooHlob/lobTloovlobrlooflopHloo7lobblooLloojlobvlopTloo/lo77lpavlq5zlq67lq6Xlq5Xlq6rlq5rlq63lq6vlq7Plq6Llq6Dlq5vlq6zlq57lq53lq5nlq6jlq5/lrbflr6BcIl0sXG5bXCJlMWExXCIsXCLlr6PlsaPltoLltoDltb3ltobltbrltoHltbfltorltonltojltb7ltbzlto3ltbnltb/luZjluZnluZPlu5jlu5Hlu5flu47lu5zlu5Xlu5nlu5Llu5TlvYTlvYPlva/lvrbmhKzmhKjmhYHmhZ7mhbHmhbPmhZLmhZPmhbLmhazmhoDmhbTmhZTmhbrmhZvmhaXmhLvmharmhaHmhZbmiKnmiKfmiKvmkKvmkY3mkZvmkZ3mkbTmkbbmkbLmkbPmkb3mkbXmkabmkqbmkY7mkoLmkZ7mkZzmkYvmkZPmkaDmkZDmkb/mkL/mkazmkavmkZnmkaXmkbfmlbPmlqDmmqHmmqDmmp/mnIXmnITmnKLmprHmprbmp4lcIl0sXG5bXCJlMjQwXCIsXCLmpqDmp47mppbmprDmpqzmprzmppHmppnmpo7mpqfmpo3mpqnmpr7mpq/mpr/mp4Tmpr3mpqTmp5Tmprnmp4rmpprmp4/mprPmppPmpqrmpqHmpp7mp5nmppfmppDmp4LmprXmpqXmp4bmrYrmrY3mrYvmrp7mrp/mrqDmr4Pmr4Tmr77mu47mu7Xmu7HmvIPmvKXmu7jmvLfmu7vmvK7mvInmvY7mvJnmvJrmvKfmvJjmvLvmvJLmu63mvIpcIl0sXG5bXCJlMmExXCIsXCLmvLbmvbPmu7nmu67mvK3mvYDmvLDmvLzmvLXmu6vmvIfmvI7mvYPmvIXmu73mu7bmvLnmvJzmu7zmvLrmvJ/mvI3mvJ7mvIjmvKHnhofnhpDnhonnhoDnhoXnhoLnho/nhbvnhobnhoHnhpfniYTniZPnipfnipXnipPnjYPnjY3njZHnjYznkaLnkbPnkbHnkbXnkbLnkafnka7nlIDnlILnlIPnlb3nlpDnmJbnmIjnmIznmJXnmJHnmIrnmJTnmrjnnoHnnbznnoXnnoLnna7nnoDnna/nnb7nnoPnorLnoqrnorTnoq3noqjnob7noqvnop7noqXnoqDnoqznoqLnoqTnppjnpornpovnppbnppXnppTnppNcIl0sXG5bXCJlMzQwXCIsXCLnppfnpojnppLnppDnqKvnqYrnqLDnqK/nqKjnqKbnqqjnqqvnqqznq67nrojnrpznrornrpHnrpDnrpbnro3nroznrpvnro7nroXnrpjlioTnrpnnrqTnroLnsrvnsr/nsrznsrrntqfntrfnt4LntqPntqrnt4Hnt4Dnt4Xntp3nt47nt4Tnt4bnt4vnt4zntq/ntrnntpbntrzntp/ntqbntq7ntqnntqHnt4nnvbPnv6Lnv6Pnv6Xnv55cIl0sXG5bXCJlM2ExXCIsXCLogKTogZ3ogZzohonohobohoPohofoho3ohozohovoiJXokpfokqTokqHokp/okrrok47ok4Lokqzokq7okqvokrnokrTok4Hok43okqrokprokrHok5Dokp3okqfokrvokqLokpTok4fok4zokpvokqnokq/okqjok5bokpjokrbok4/okqDok5fok5Tok5Lok5vokrDokpHomaHonLPonKPonKjonavonYDonK7onJ7onKHonJnonJvonYPonKzonYHonL7onYbonKDonLLonKronK3onLzonJLonLronLHonLXonYLonKbonKfonLjonKTonJronLDonJHoo7foo6foo7Hoo7Loo7roo77oo67oo7zoo7boo7tcIl0sXG5bXCJlNDQwXCIsXCLoo7Doo6zoo6vopp3opqHopp/opp7op6nop6vop6joqqvoqpnoqovoqpLoqo/oqpbosL3osajosanos5Xos4/os5fotpbouInouILot7/ouI3ot73ouIrouIPouIfouIbouIXot77ouIDouITovJDovJHovI7ovI3phKPphJzphKDphKLphJ/phJ3phJrphKTphKHphJvphbrphbLphbnphbPpiqXpiqTpibbpipvpibrpiqDpipTpiqrpio1cIl0sXG5bXCJlNGExXCIsXCLpiqbpiprpiqvpibnpipfpib/piqPpi67pio7pioLpipXpiqLpib3piojpiqHpiorpiobpiozpipnpiqfpib7piofpiqnpip3piovpiK3pmp7pmqHpm7/pnZjpnb3pnbrpnb7pnoPpnoDpnoLpnbvpnoTpnoHpnb/pn47pn43poJbpoq3poq7ppILppIDppIfppp3pppzpp4Ppprnpprvpprrpp4Lppr3pp4fpqrHpq6Ppq6fprL7prL/praDpraHprZ/ps7Hps7Lps7Xpuqflg7/lhIPlhLDlg7jlhIblhIflg7blg77lhIvlhIzlg73lhIrliovliozli7Hli6/lmYjlmYLlmYzlmLXlmYHlmYrlmYnlmYblmZhcIl0sXG5bXCJlNTQwXCIsXCLlmZrlmYDlmLPlmL3lmKzlmL7lmLjlmKrlmLrlnJrloqvlop3lorHloqDloqPloq/loqzloqXloqHlo7/lq7/lq7Tlq73lq7flq7blrIPlq7jlrILlq7nlrIHlrIflrIXlrI/lsafltpnltpfltp/ltpLltqLltpPltpXltqDltpzltqHltprltp7luanluZ3luaDluZznt7Plu5vlu57lu6HlvYnlvrLmhovmhoPmhbnmhrHmhrDmhqLmholcIl0sXG5bXCJlNWExXCIsXCLmhpvmhpPmhq/mhq3mhp/mhpLmhqrmhqHmho3mhabmhrPmiK3mka7mkbDmkpbmkqDmkoXmkpfmkpzmko/mkovmkormkozmkqPmkp/mkajmkrHmkpjmlbbmlbrmlbnmlbvmlrLmlrPmmrXmmrDmmqnmmrLmmrfmmqrmmq/mqIDmqIbmqJfmp6Xmp7jmqJXmp7Hmp6TmqKDmp7/mp6zmp6LmqJvmqJ3mp77mqKfmp7Lmp67mqJTmp7fmp6fmqYDmqIjmp6bmp7vmqI3mp7zmp6vmqInmqITmqJjmqKXmqI/mp7bmqKbmqIfmp7TmqJbmrZHmrqXmrqPmrqLmrqbmsIHmsIDmr7/msILmvYHmvKbmvb7mvofmv4bmvpJcIl0sXG5bXCJlNjQwXCIsXCLmvo3mvonmvozmvaLmvY/mvoXmvZrmvpbmvbbmvazmvoLmvZXmvbLmvZLmvZDmvZfmvpTmvpPmvZ3mvIDmvaHmvavmvb3mvafmvpDmvZPmvovmvanmvb/mvpXmvaPmvbfmvarmvbvnhrLnhq/nhpvnhrDnhqDnhprnhqnnhrXnhp3nhqXnhp7nhqTnhqHnhqrnhpznhqfnhrPnipjniprnjZjnjZLnjZ7njZ/njaDnjZ3njZvnjaHnjZrnjZlcIl0sXG5bXCJlNmExXCIsXCLnjaLnkofnkonnkornkobnkoHnkb3nkoXnkojnkbznkbnnlIjnlIfnlb7nmKXnmJ7nmJnnmJ3nmJznmKPnmJrnmKjnmJvnmpznmp3nmp7nmpvnno3nno/nnonnnojno43norvno4/no4zno5Hno47no5Tno4jno4Pno4Tno4nnpprnpqHnpqDnppznpqLnppvmrbbnqLnnqrLnqrTnqrPnrrfnr4vnrr7nrqznr47nrq/nrrnnr4rnrrXns4Xns4jns4zns4vnt7fnt5vnt6rnt6fnt5fnt6HnuIPnt7rnt6bnt7bnt7Hnt7Dnt67nt5/nvbbnvqznvrDnvq3nv63nv6vnv6rnv6znv6bnv6jogaTogafohqPohp9cIl0sXG5bXCJlNzQwXCIsXCLohp7ohpXohqLohpnohpfoiJboiY/oiZPoiZLoiZDoiY7oiZHolKTolLvolI/olIDolKnolI7olInolI3olJ/olIrolKfolJzok7volKvok7rolIjolIzok7TolKrok7LolJXok7fok6vok7Pok7zolJLok6rok6nolJbok77olKjolJ3olK7olILok73olJ7ok7bolLHolKbok6fok6jok7Dok6/ok7nolJjolKDolLDolIvolJnolK/omaJcIl0sXG5bXCJlN2ExXCIsXCLonZbonaPonaTonbfon6HonbPonZjonZTonZvonZLonaHonZronZHonZ7ona3onaronZDonY7onZ/onZ3ona/onazonbrona7onZzonaXonY/onbvonbXonaLonafonanooZropIXopIzopJTopIvopJfopJjopJnopIbopJbopJHopI7opInopqLopqTopqPop63op7Dop6zoq4/oq4boqrjoq5Poq5Hoq5Toq5Xoqrvoq5foqr7oq4Doq4Xoq5joq4Poqrroqr3oq5nosL7osY3oso/os6Xos5/os5nos6jos5ros53os6fotqDotpzotqHotpvouKDouKPouKXouKTouK7ouJXouJvouJbouJHouJnouKbouKdcIl0sXG5bXCJlODQwXCIsXCLouJTouJLouJjouJPouJzouJfouJrovKzovKTovJjovJrovKDovKPovJbovJfpgbPpgbDpga/pgafpgavphK/phKvphKnphKrphLLphKbphK7phoXphobphorphoHphoLphoTphoDpi5Dpi4Ppi4Tpi4Dpi5npirbpi4/pi7Hpi5/pi5jpi6npi5fpi53pi4zpi6/pi4Lpi6jpi4rpi4jpi47pi6bpi43pi5Xpi4npi6Dpi57pi6fpi5Hpi5NcIl0sXG5bXCJlOGExXCIsXCLpirXpi6Hpi4bpirTplbzplqzplqvplq7plrDpmqTpmqLpm5PpnIXpnIjpnILpnZrpnorpno7pnojpn5Dpn4/poJ7poJ3poKbpoKnpoKjpoKDpoJvpoKfporLppIjpo7rppJHppJTppJbppJfppJXpp5zpp43pp4/pp5Ppp5Tpp47pp4npp5bpp5jpp4vpp5fpp4zpqrPpq6zpq6vpq7Ppq7Lpq7HprYbprYPprafprbTprbHprabprbbprbXprbDprajpraTprazps7zps7rps73ps7/ps7fptIfptIDps7nps7vptIjptIXptITpuoPpu5PpvI/pvJDlhJzlhJPlhJflhJrlhJHlh57ljLTlj6HlmbDlmaDlma5cIl0sXG5bXCJlOTQwXCIsXCLlmbPlmablmaPlma3lmbLlmZ7lmbflnJzlnJvlo4jlor3lo4nlor/lorrlo4Llorzlo4blrJflrJnlrJvlrKHlrJTlrJPlrJDlrJblrKjlrJrlrKDlrJ7lr6/ltqzltrHltqnltqfltrXltrDltq7ltqrltqjltrLltq3ltq/ltrTluafluajluablua/lu6nlu6flu6blu6jlu6XlvYvlvrzmhp3mhqjmhpbmh4XmhrTmh4bmh4Hmh4zmhrpcIl0sXG5bXCJlOWExXCIsXCLmhr/mhrjmhozmk5fmk5bmk5Dmk4/mk4nmkr3mkonmk4Pmk5vmk7Pmk5nmlLPmlb/mlbzmlqLmm4jmmr7mm4Dmm4rmm4vmm4/mmr3mmrvmmrrmm4zmnKPmqLTmqabmqYnmqafmqLLmqajmqL7mqZ3mqa3mqbbmqZvmqZHmqKjmqZrmqLvmqL/mqYHmqarmqaTmqZDmqY/mqZTmqa/mqanmqaDmqLzmqZ7mqZbmqZXmqY3mqY7mqYbmrZXmrZTmrZbmrqfmrqrmrqvmr4jmr4fmsITmsIPmsIbmvq3mv4vmvqPmv4fmvrzmv47mv4jmvZ7mv4Tmvr3mvp7mv4rmvqjngITmvqXmvq7mvrrmvqzmvqrmv4/mvr/mvrhcIl0sXG5bXCJlYTQwXCIsXCLmvqLmv4nmvqvmv43mvq/mvrLmvrDnh4Xnh4Lnhr/nhrjnh5bnh4Dnh4Hnh4vnh5Tnh4rnh4fnh4/nhr3nh5jnhrznh4bnh5rnh5vnip3nip7njannjabnjafnjaznjaXnjavnjarnkb/nkprnkqDnkpTnkpLnkpXnkqHnlIvnloDnmK/nmK3nmLHnmL3nmLPnmLznmLXnmLLnmLDnmrvnm6bnnprnnp3nnqHnnpznnpvnnqLnnqPnnpXnnplcIl0sXG5bXCJlYWExXCIsXCLnnpfno53no6nno6Xno6rno57no6Pno5vno6Hno6Lno63no5/no6DnpqTnqYTnqYjnqYfnqrbnqrjnqrXnqrHnqrfnr57nr6Pnr6fnr53nr5Xnr6Xnr5rnr6jnr7nnr5Tnr6rnr6Lnr5znr6vnr5jnr5/ns5Lns5Tns5fns5Dns5HnuJLnuKHnuJfnuIznuJ/nuKDnuJPnuI7nuJznuJXnuJrnuKLnuIvnuI/nuJbnuI3nuJTnuKXnuKTnvYPnvbvnvbznvbrnvrHnv6/ogKrogKnogazohrHohqbohq7ohrnohrXohqvohrDohqzohrTohrLohrfohqfoh7LoiZXoiZboiZfolZbolYXolavolY3olZPolaHolZhcIl0sXG5bXCJlYjQwXCIsXCLolYDolYbolaTolYHolaLolYTolZHolYfolaPolL7olZvolbHolY7ola7olbXolZXolafolaDolozolabolZ3olZTolaXolazomaPomaXomaTonpvono/onpfonpPonpLonojonoHonpbonpjonbnonofonqPonoXonpDonpHonp3onoTonpTonpzonprononopJ7opKbopLDopK3opK7opKfopLHopKLopKnopKPopK/opKzopJ/op7Hoq6BcIl0sXG5bXCJlYmExXCIsXCLoq6Loq7Loq7Toq7Xoq53orJToq6Toq5/oq7Doq4joq57oq6Hoq6joq7/oq6/oq7vospHospLospDos7Xos67os7Hos7Dos7Potazota7otqXotqfouLPouL7ouLjouYDouYXouLbouLzouL3ouYHouLDouL/our3ovLbovK7ovLXovLLovLnovLfovLTpgbbpgbnpgbvpgobpg7rphLPphLXphLbphpPphpDphpHpho3pho/pjKfpjJ7pjIjpjJ/pjIbpjI/pjbrpjLjpjLzpjJvpjKPpjJLpjIHpjYbpjK3pjI7pjI3pi4vpjJ3pi7rpjKXpjJPpi7npi7fpjLTpjILpjKTpi7/pjKnpjLnpjLXpjKrpjJTpjIxcIl0sXG5bXCJlYzQwXCIsXCLpjIvpi77pjInpjIDpi7vpjJbplrzpl43plr7plrnplrrplrbplr/plrXplr3pmqnpm5TpnIvpnJLpnJDpnpnpnpfpnpTpn7Dpn7jpoLXpoK/poLLppKTppJ/ppKfppKnppp7pp67pp6zpp6Xpp6Tpp7Dpp6Ppp6rpp6npp6fpqrnpqr/pqrTpqrvpq7bpq7rpq7npq7fprLPproDproXprofprbzprb7prbvproLprpPprpLprpDprbrprpVcIl0sXG5bXCJlY2ExXCIsXCLprb3projptKXptJfptKDptJ7ptJTptKnptJ3ptJjptKLptJDptJnptJ/puojpuobpuofpuq7puq3pu5Xpu5bpu7rpvJLpvL3lhKblhKXlhKLlhKTlhKDlhKnli7TlmpPlmozlmo3lmoblmoTlmoPlmb7lmoLlmb/lmoHlo5blo5Tlo4/lo5LlrK3lrKXlrLLlrKPlrKzlrKflrKblrK/lrK7lrbvlr7Hlr7Lltrfluazluarlvr7lvrvmh4PmhrXmhrzmh6fmh6Dmh6Xmh6Tmh6jmh57mk6/mk6nmk6Pmk6vmk6Tmk6jmloHmloDmlrbml5rmm5Lmqo3mqpbmqoHmqqXmqonmqp/mqpvmqqHmqp7mqofmqpPmqo5cIl0sXG5bXCJlZDQwXCIsXCLmqpXmqoPmqqjmqqTmqpHmqb/mqqbmqprmqoXmqozmqpLmrZvmrq3msInmv4zmvqnmv7Tmv5Tmv6Pmv5zmv63mv6fmv6bmv57mv7Lmv53mv6Lmv6jnh6Hnh7Hnh6jnh7Lnh6Tnh7Dnh6LnjbPnja7nja/nkpfnkrLnkqvnkpDnkqrnkq3nkrHnkqXnkq/nlJDnlJHnlJLnlI/nloTnmYPnmYjnmYnnmYfnmqTnm6nnnrXnnqvnnrLnnrfnnrZcIl0sXG5bXCJlZGExXCIsXCLnnrTnnrHnnqjnn7Dno7Pno73npILno7vno7zno7LnpIXno7nno77npITnpqvnpqjnqZznqZvnqZbnqZjnqZTnqZrnqr7nq4Dnq4HnsIXnsI/nr7LnsIDnr7/nr7vnsI7nr7TnsIvnr7PnsILnsInnsIPnsIHnr7jnr73nsIbnr7Dnr7HnsJDnsIrns6jnuK3nuLznuYLnuLPpoYjnuLjnuKrnuYnnuYDnuYfnuKnnuYznuLDnuLvnuLbnuYTnuLrnvYXnvb/nvb7nvb3nv7Tnv7LogKzohrvoh4Toh4zoh4roh4Xoh4fohrzoh6noiZvoiZroiZzoloPoloDolo/olqfolpXolqDolovolqPolbvolqTolprolp5cIl0sXG5bXCJlZTQwXCIsXCLolbfolbzolonolqHolbrolbjolZfolo7olpbolobolo3olpnolp3oloHolqLoloLolojoloXolbnolbbolpjolpDolp/omajonr7onqronq3on4XonrDonqzonrnonrXonrzonq7on4non4Pon4Lon4zonrfonq/on4Ton4ronrTonrbonr/onrjonr3on57onrLopLXopLPopLzopL7opYHopZLopLfopYLopq3opq/opq7op7Lop7PorJ5cIl0sXG5bXCJlZWExXCIsXCLorJjorJborJHorIXorIvorKLorI/orJLorJXorIforI3orIjorIborJzorJPorJrosY/osbDosbLosbHosa/ospXospTos7nota/ouY7ouY3ouZPouZDouYzouYfovYPovYDpgoXpgb7phLjphprphqLphpvphpnphp/phqHphp3phqDpjqHpjoPpjq/pjaTpjZbpjYfpjbzpjZjpjZzpjbbpjYnpjZDpjZHpjaDpja3pjo/pjYzpjarpjbnpjZfpjZXpjZLpjY/pjbHpjbfpjbvpjaHpjZ7pjaPpjafpjoDpjY7pjZnpl4fpl4Dpl4npl4Ppl4Xplrfpmq7pmrDpmqzpnKDpnJ/pnJjpnJ3pnJnpnprpnqHpnpxcIl0sXG5bXCJlZjQwXCIsXCLpnp7pnp3pn5Xpn5Tpn7HpoYHpoYTpoYrpoYnpoYXpoYPppKXppKvppKzppKrppLPppLLppK/ppK3ppLHppLDpppjppqPppqHpqILpp7rpp7Tpp7fpp7npp7jpp7bpp7vpp73pp77pp7zpqIPpqr7pq77pq73prIHpq7zprYjprprprqjprp7prpvprqbprqHprqXprqTprobprqLprqDprq/ptLPptYHptafptLbptK7ptK/ptLHptLjptLBcIl0sXG5bXCJlZmExXCIsXCLptYXptYLptYPptL7ptLfptYDptL3nv7XptK3puorpuonpuo3purDpu4jpu5rpu7vpu7/pvKTpvKPpvKLpvZTpvqDlhLHlhK3lhK7lmpjlmpzlmpflmprlmp3lmpnlpbDlrLzlsanlsarlt4Dlua3lua7mh5jmh5/mh63mh67mh7Hmh6rmh7Dmh6vmh5bmh6nmk7/mlITmk73mk7jmlIHmlIPmk7zmlpTml5vmm5rmm5vmm5jmq4Xmqrnmqr3mq6Hmq4bmqrrmqrbmqrfmq4fmqrTmqq3mrZ7mr4nmsIvngIfngIzngI3ngIHngIXngJTngI7mv7/ngIDmv7vngKbmv7zmv7fngIrniIHnh7/nh7nniIPnh73njbZcIl0sXG5bXCJmMDQwXCIsXCLnkrjnk4DnkrXnk4Hnkr7nkrbnkrvnk4LnlJTnlJPnmZznmaTnmZnnmZDnmZPnmZfnmZrnmqbnmr3nm6znn4Lnnrrno7/npIznpJPnpJTnpInnpJDnpJLnpJHnpq3npqznqZ/nsJznsKnnsJnnsKDnsJ/nsK3nsJ3nsKbnsKjnsKLnsKXnsLDnuZznuZDnuZbnuaPnuZjnuaLnuZ/nuZHnuaDnuZfnuZPnvrXnvrPnv7fnv7jogbXoh5Hoh5JcIl0sXG5bXCJmMGExXCIsXCLoh5DoiZ/oiZ7olrTol4bol4Dol4Pol4LolrPolrXolr3ol4fol4Tolr/ol4vol47ol4jol4XolrHolrbol5LomKTolrjolrfolr7omanon6fon6bon6Lon5von6von6ron6Xon5/on7Pon6Ton5Ton5zon5Pon63on5jon6PonqTon5fon5nooIHon7Ton6jon53opZPopYvopY/opYzopYbopZDopZHopYnorKrorKforKPorLPorLDorLXorYforK/orLzorL7orLHorKXorLforKborLborK7orKTorLvorL3orLrosYLosbXospnospjospfos77otITotILotIDouZzouaLouaDouZfouZbouZ7ouaXouadcIl0sXG5bXCJmMTQwXCIsXCLouZvouZrouaHouZ3ouanouZTovYbovYfovYjovYvphKjphLrphLvphL7phqjphqXphqfphq/phqrpjrXpjozpjpLpjrfpjpvpjp3pjonpjqfpjo7pjqrpjp7pjqbpjpXpjojpjpnpjp/pjo3pjrHpjpHpjrLpjqTpjqjpjrTpjqPpjqXpl5Lpl5Ppl5HpmrPpm5fpm5rlt4Lpm5/pm5jpm53pnKPpnKLpnKXpnqzpnq7pnqjpnqvpnqTpnqpcIl0sXG5bXCJmMWExXCIsXCLpnqLpnqXpn5fpn5npn5bpn5jpn7rpoZDpoZHpoZLporjppYHppLzppLrpqI/pqIvpqInpqI3pqITpqJHpqIrpqIXpqIfpqIbpq4Dpq5zprIjprITprIXprKnprLXprYrprYzprYvpr4fpr4bpr4Pprr/pr4HprrXprrjpr5Pprrbpr4Tprrnprr3ptZzptZPptY/ptYrptZvptYvptZnptZbptYzptZfptZLptZTptZ/ptZjptZrpuo7puozpu5/pvIHpvIDpvJbpvKXpvKvpvKrpvKnpvKjpvYzpvZXlhLTlhLXlipbli7fljrTlmqvlmq3lmqblmqflmqrlmqzlo5rlo53lo5vlpJLlrL3lrL7lrL/lt4PlubBcIl0sXG5bXCJmMjQwXCIsXCLlvr/mh7vmlIfmlJDmlI3mlInmlIzmlI7mloTml57ml53mm57mq6fmq6Dmq4zmq5Hmq5nmq4vmq5/mq5zmq5Dmq6vmq4/mq43mq57mraDmrrDmsIzngJnngKfngKDngJbngKvngKHngKLngKPngKnngJfngKTngJzngKrniIzniIrniIfniILniIXniqXniqbniqTniqPniqHnk4vnk4Xnkrfnk4PnlJbnmaDnn4nnn4rnn4Tnn7HnpJ3npJtcIl0sXG5bXCJmMmExXCIsXCLnpKHnpJznpJfnpJ7nprDnqafnqajnsLPnsLznsLnnsKznsLvns6zns6rnubbnubXnubjnubDnubfnua/nubrnubLnubTnuajnvYvnvYrnvoPnvobnvrfnv73nv77ogbjoh5foh5XoiaToiaHoiaPol6vol7Hol63ol5nol6Hol6jol5rol5fol6zol7Lol7jol5jol5/ol6Pol5zol5Hol7Dol6bol6/ol57ol6LooIDon7rooIPon7bon7fooInooIzooIvooIbon7zooIjon7/ooIrooILopaLopZropZvopZfopaHopZzopZjopZ3opZnopojoprfoprbop7borZDorYjorYrorYDorZPorZborZTorYvorZVcIl0sXG5bXCJmMzQwXCIsXCLorZHorYLorZLorZfosYPosbfosbbosprotIbotIfotInotqzotqrotq3otqvoua3oubjoubPouaroua/oubvou4LovZLovZHovY/ovZDovZPovrTphYDphL/phrDphq3pj57pj4fpj4/pj4Lpj5rpj5Dpj7npj6zpj4zpj5npjqnpj6bpj4rpj5Tpj67pj6Ppj5Xpj4Tpj47pj4Dpj5Lpj6fplb3pl5rpl5vpm6HpnKnpnKvpnKzpnKjpnKZcIl0sXG5bXCJmM2ExXCIsXCLpnrPpnrfpnrbpn53pn57pn5/poZzpoZnpoZ3poZfpor/por3porvpor7ppYjppYfppYPppqbppqfpqJrpqJXpqKXpqJ3pqKTpqJvpqKLpqKDpqKfpqKPpqJ7pqJzpqJTpq4LprIvprIrprI7prIzprLfpr6rpr6vpr6Dpr57pr6Tpr6bpr6Lpr7Dpr5Tpr5fpr6zpr5zpr5npr6Xpr5Xpr6Hpr5rptbfptoHptorptoTptojptbHptoDptbjptobptovptozptb3ptavptbTptbXptbDptanptoXptbPptbvptoLpta/ptbnptb/ptofptajpupTpupHpu4Dpu7zpvK3pvYDpvYHpvY3pvZbpvZfpvZjljLflmrJcIl0sXG5bXCJmNDQwXCIsXCLlmrXlmrPlo6PlrYXlt4blt4flu67lu6/lv4Dlv4Hmh7nmlJfmlJbmlJXmlJPml5/mm6jmm6Pmm6Tmq7Pmq7Dmq6rmq6jmq7nmq7Hmq67mq6/ngLzngLXngK/ngLfngLTngLHngYLngLjngL/ngLrngLnngYDngLvngLPngYHniJPniJTniqjnjb3njbznkrrnmqvnmqrnmr7nm63nn4znn47nn4/nn43nn7LnpKXnpKPnpKfnpKjnpKTnpKlcIl0sXG5bXCJmNGExXCIsXCLnprLnqa7nqaznqa3nq7fnsYnnsYjnsYrnsYfnsYXns67nubvnub7nuoHnuoDnvrrnv7/ogbnoh5voh5noiIvoiajoianomKLol7/omIHol77omJvomIDol7bomITomInomIXomIzol73ooJnooJDooJHooJfooJPooJbopaPopaboprnop7foraDorarorZ3orajoraPoraXorafora3otq7ouobouojouoTovZnovZbovZfovZXovZjovZrpgo3phYPphYHphrfphrXphrLphrPpkIvpkJPpj7vpkKDpkI/pkJTpj77pkJXpkJDpkKjpkJnpkI3pj7XpkIDpj7fpkIfpkI7pkJbpkJLpj7rpkInpj7jpkIrpj79cIl0sXG5bXCJmNTQwXCIsXCLpj7zpkIzpj7bpkJHpkIbpl57pl6Dpl5/pnK7pnK/pnrnpnrvpn73pn77poaDpoaLpoaPpoZ/po4Hpo4LppZDppY7ppZnppYzppYvppZPpqLLpqLTpqLHpqKzpqKrpqLbpqKnpqK7pqLjpqK3pq4fpq4rpq4bprJDprJLprJHpsIvpsIjpr7fpsIXpsJLpr7jpsYDpsIfpsI7psIbpsJfpsJTpsInptp/ptpnptqTptp3ptpLptpjptpDptptcIl0sXG5bXCJmNWExXCIsXCLptqDptpTptpzptqrptpfptqHptprptqLptqjptp7ptqPptr/ptqnptpbptqbptqfpupnpupvpuprpu6Xpu6Tpu6fpu6bpvLDpvK7pvZvpvaDpvZ7pvZ3pvZnpvpHlhLrlhLnlipjlipflm4Plmr3lmr7lrYjlrYflt4vlt4/lu7Hmh73mlJvmrILmq7zmrIPmq7jmrIDngYPngYTngYrngYjngYnngYXngYbniJ3niJrniJnnjb7nlJfnmarnn5DnpK3npLHnpK/nsZTnsZPns7Lnuornuofnuojnuovnuobnuo3nvY3nvrvogLDoh53omJjomKromKbomJ/omKPomJzomJnomKfomK7omKHomKDomKnomJ7omKVcIl0sXG5bXCJmNjQwXCIsXCLooKnooJ3ooJvooKDooKTooJzooKvooYropa3opanopa7opavop7rorbnorbjorYXorbrorbvotJDotJTotq/ouo7ouozovZ7ovZvovZ3phYbphYTphYXphrnpkL/pkLvpkLbpkKnpkL3pkLzpkLDpkLnpkKrpkLfpkKzpkYDpkLHpl6Xpl6Tpl6PpnLXpnLrpnr/pn6HpoaTpo4npo4bpo4DppZjppZbpqLnpqL3pqYbpqYTpqYLpqYHpqLpcIl0sXG5bXCJmNmExXCIsXCLpqL/pq43prJXprJfprJjprJbprLrprZLpsKvpsJ3psJzpsKzpsKPpsKjpsKnpsKTpsKHptrfptrbptrzpt4Hpt4fpt4rpt4/ptr7pt4Xpt4PptrvptrXpt47ptrnptrrptqzpt4jptrHptq3pt4zptrPpt43ptrLpubrpupzpu6vpu67pu63pvJvpvJjpvJrpvLHpvY7pvaXpvaTpvpLkurnlm4blm4Xlm4vlpbHlrYvlrYzlt5Xlt5Hlu7LmlKHmlKDmlKbmlKLmrIvmrIjmrInmsI3ngZXngZbngZfngZLniJ7niJ/niqnnjb/nk5jnk5Xnk5nnk5fnma3nmq3npLXnprTnqbDnqbHnsZfnsZznsZnnsZvnsZpcIl0sXG5bXCJmNzQwXCIsXCLns7Tns7HnupHnvY/nvofoh57oiavomLTomLXomLPomKzomLLomLbooKzooKjooKbooKrooKXopbHopr/opr7op7vorb7oroToroLoroboroXorb/otJXoupXoupTouproupLoupDoupboupfovaDovaLphYfpkYzpkZDpkYrpkYvpkY/pkYfpkYXpkYjpkYnpkYbpnL/pn6Ppoarpoanpo4vppZTppZvpqY7pqZPpqZTpqYzpqY/pqYjpqYpcIl0sXG5bXCJmN2ExXCIsXCLpqYnpqZLpqZDpq5DprJnprKvprLvprZbprZXpsYbpsYjpsL/psYTpsLnpsLPpsYHpsLzpsLfpsLTpsLLpsL3psLbpt5vpt5Lpt57pt5rpt4vpt5Dpt5zpt5Hpt5/pt6npt5npt5jpt5bpt7Xpt5Xpt53purbpu7DpvLXpvLPpvLLpvYLpvavpvpXpvqLlhL3lipnlo6jlo6flpbLlrY3lt5jooK/lvY/miIHmiIPmiITmlKnmlKXmlpbmm6vmrJHmrJLmrI/mr4rngZvngZrniKLnjoLnjoHnjoPnmbDnn5TnsafnsabnupXoiazomLromYDomLnomLzomLHomLvomL7ooLDooLLooK7ooLPopbbopbTopbPop75cIl0sXG5bXCJmODQwXCIsXCLorozoro7orovorojosYXotJnoupjovaTovaPphrzpkaLpkZXpkZ3pkZfpkZ7pn4Tpn4XpoIDpqZbpqZnprJ7prJ/prKDpsZLpsZjpsZDpsYrpsY3psYvpsZXpsZnpsYzpsY7pt7vpt7fpt6/pt6Ppt6vpt7jpt6Tpt7bpt6Hpt67pt6bpt7Lpt7Dpt6Lpt6zpt7Tpt7Ppt6jpt63pu4Lpu5Dpu7Lpu7PpvIbpvJzpvLjpvLfpvLbpvYPpvY9cIl0sXG5bXCJmOGExXCIsXCLpvbHpvbDpva7pva/lm5Plm43lrY7lsa3mlK3mm63mm67mrJPngZ/ngaHngZ3ngaDniKPnk5vnk6Xnn5XnpLjnprfnprbnsarnupfnvonoia3omYPooLjooLfooLXooYvorpTorpXoup7oup/ouqDoup3phr7phr3ph4Lpkavpkajpkanpm6XpnYbpnYPpnYfpn4fpn6XpqZ7pq5XprZnpsaPpsafpsabpsaLpsZ7psaDpuILpt77puIfpuIPpuIbpuIXpuIDpuIHpuInpt7/pt73puITpuqDpvJ7pvYbpvbTpvbXpvbblm5TmlK7mlrjmrJjmrJnmrJfmrJrngaLniKbniqrnn5jnn5nnpLnnsannsavns7bnuppcIl0sXG5bXCJmOTQwXCIsXCLnupjnupvnupnoh6Doh6HomYbomYfomYjopbnopbropbzopbvop7/orpjorpnouqXouqTouqPpka7pka3pka/pkbHpkbPpnYnpobLppZ/psajpsa7psa3puIvpuI3puJDpuI/puJLpuJHpuqHpu7XpvInpvYfpvbjpvbvpvbrpvbnlnJ7ngabnsa/ooLzotrLouqbph4PpkbTpkbjpkbbpkbXpqaDpsbTpsbPpsbHpsbXpuJTpuJPpu7bpvIpcIl0sXG5bXCJmOWExXCIsXCLpvqTngajngaXns7fomarooL7ooL3ooL/orp7ospzouqnou4npnYvpobPpobTpo4zppaHppqvpqaTpqabpqafprKTpuJXpuJfpvYjmiIfmrJ7niKfomYzouqjpkoLpkoDpkoHpqanpqajprK7puJnniKnomYvorp/pkoPpsbnpurfnmbXpqavpsbrpuJ3nganngarpuqTpvb7pvYnpvpjnooHpirnoo4/lorvmgZLnsqflq7rilZTilabilZfilaDilazilaPilZrilanilZ3ilZLilaTilZXilZ7ilarilaHilZjilafilZvilZPilaXilZbilZ/ilavilaLilZnilajilZzilZHilZDila3ila7ilbDila/ilpNcIl1cbl1cbiIsIm1vZHVsZS5leHBvcnRzPVtcbltcIjBcIixcIlxcdTAwMDBcIiwxMjddLFxuW1wiOGVhMVwiLFwi772hXCIsNjJdLFxuW1wiYTFhMVwiLFwi44CA44CB44CC77yM77yO44O777ya77yb77yf77yB44Kb44KcwrTvvYDCqO+8vu+/o++8v+ODveODvuOCneOCnuOAg+S7neOAheOAhuOAh+ODvOKAleKAkO+8j++8vO+9nuKIpe+9nOKApuKApeKAmOKAmeKAnOKAne+8iO+8ieOAlOOAle+8u++8ve+9m++9neOAiFwiLDksXCLvvIvvvI3CscOXw7fvvJ3iiaDvvJzvvJ7iiabiiafiiJ7iiLTimYLimYDCsOKAsuKAs+KEg++/pe+8hO+/oO+/oe+8he+8g++8hu+8iu+8oMKn4piG4piF4peL4peP4peO4peHXCJdLFxuW1wiYTJhMVwiLFwi4peG4pah4pag4paz4pay4pa94pa84oC744CS4oaS4oaQ4oaR4oaT44CTXCJdLFxuW1wiYTJiYVwiLFwi4oiI4oiL4oqG4oqH4oqC4oqD4oiq4oipXCJdLFxuW1wiYTJjYVwiLFwi4oin4oio77+i4oeS4oeU4oiA4oiDXCJdLFxuW1wiYTJkY1wiLFwi4oig4oql4oyS4oiC4oiH4omh4omS4omq4omr4oia4oi94oid4oi14oir4oisXCJdLFxuW1wiYTJmMlwiLFwi4oSr4oCw4pmv4pmt4pmq4oCg4oChwrZcIl0sXG5bXCJhMmZlXCIsXCLil69cIl0sXG5bXCJhM2IwXCIsXCLvvJBcIiw5XSxcbltcImEzYzFcIixcIu+8oVwiLDI1XSxcbltcImEzZTFcIixcIu+9gVwiLDI1XSxcbltcImE0YTFcIixcIuOBgVwiLDgyXSxcbltcImE1YTFcIixcIuOCoVwiLDg1XSxcbltcImE2YTFcIixcIs6RXCIsMTYsXCLOo1wiLDZdLFxuW1wiYTZjMVwiLFwizrFcIiwxNixcIs+DXCIsNl0sXG5bXCJhN2ExXCIsXCLQkFwiLDUsXCLQgdCWXCIsMjVdLFxuW1wiYTdkMVwiLFwi0LBcIiw1LFwi0ZHQtlwiLDI1XSxcbltcImE4YTFcIixcIuKUgOKUguKUjOKUkOKUmOKUlOKUnOKUrOKUpOKUtOKUvOKUgeKUg+KUj+KUk+KUm+KUl+KUo+KUs+KUq+KUu+KVi+KUoOKUr+KUqOKUt+KUv+KUneKUsOKUpeKUuOKVglwiXSxcbltcImFkYTFcIixcIuKRoFwiLDE5LFwi4oWgXCIsOV0sXG5bXCJhZGMwXCIsXCLjjYnjjJTjjKLjjY3jjJjjjKfjjIPjjLbjjZHjjZfjjI3jjKbjjKPjjKvjjYrjjLvjjpzjjp3jjp7jjo7jjo/jj4TjjqFcIl0sXG5bXCJhZGRmXCIsXCLjjbvjgJ3jgJ/ihJbjj43ihKHjiqRcIiw0LFwi44ix44iy44i5442+442944284omS4omh4oir4oiu4oiR4oia4oql4oig4oif4oq/4oi14oip4oiqXCJdLFxuW1wiYjBhMVwiLFwi5Lqc5ZSW5aiD6Zi/5ZOA5oSb5oyo5ae26YCi6JG16Iyc56mQ5oKq5o+h5ril5pet6JGm6Iqm6a+15qKT5Zyn5pah5omx5a6b5aeQ6Jm76aO057Wi57a+6a6O5oiW57Kf6KK35a6J5bq15oyJ5pqX5qGI6ZeH6Z6N5p2P5Lul5LyK5L2N5L6d5YGJ5Zuy5aS35aeU5aiB5bCJ5oOf5oSP5oWw5piT5qSF54K655WP55Ww56e757at57ev6IOD6JCO6KGj6KyC6YGV6YG65Yy75LqV5Lql5Z+f6IKy6YOB56Ov5LiA5aOx5rqi6YC456iy6Iyo6IqL6bCv5YWB5Y2w5ZK95ZOh5Zug5ae75byV6aOy5rer6IOk6JStXCJdLFxuW1wiYjFhMVwiLFwi6Zmi6Zmw6Zqg6Z+75ZCL5Y+z5a6H54OP57696L+C6Zuo5Y2v6bWc56q65LiR56KT6Ie85rim5ZiY5ZSE5qyd6JSa6bC75ael5Y6p5rWm55Oc6ZaP5ZmC5LqR6YGL6Zuy6I2P6aSM5Y+h5Za25ayw5b2x5pig5puz5qCE5rC45rOz5rSp55Gb55uI56mO6aC06Iux6KGb6Kmg6Yut5ray55ar55uK6aeF5oKm6KyB6LaK6Zay5qaO5Y6t5YaG5ZyS5aCw5aWE5a605bu25oCo5o6p5o+05rK/5ryU54KO54SU54WZ54eV54y/57iB6Im26IuR6JaX6YGg6Ymb6bSb5aGp5pa85rGa55Sl5Ye55aSu5aWl5b6A5b+cXCJdLFxuW1wiYjJhMVwiLFwi5oq85pe65qiq5qyn5q60546L57+B6KWW6bSs6bSO6buE5bKh5rKW6I275YSE5bGL5oa26IeG5qG254mh5LmZ5L+65Y245oGp5rip56mP6Z+z5LiL5YyW5Luu5L2V5Ly95L6h5L2z5Yqg5Y+v5ZiJ5aSP5auB5a625a+h56eR5pqH5p6c5p625q2M5rKz54Gr54+C56aN56a+56i8566H6Iqx6Iub6IyE6I236I+v6I+T6J2m6Kqy5Zip6LKo6L+m6YGO6Zye6JqK5L+E5bOo5oiR54mZ55S76Iel6Iq96Ju+6LOA6ZuF6aST6aeV5LuL5Lya6Kej5Zue5aGK5aOK5bu75b+r5oCq5oKU5oGi5oeQ5oiS5ouQ5pS5XCJdLFxuW1wiYjNhMVwiLFwi6a2B5pmm5qKw5rW354Gw55WM55qG57W16Iql6J+56ZaL6ZqO6LKd5Yex5Yq+5aSW5ZKz5a6z5bSW5oWo5qaC5rav56KN6JOL6KGX6Kmy6Y6n6aq45rWs6aao6JuZ5Z6j5p+/6JuO6YiO5YqD5ZqH5ZCE5buT5ouh5pK55qC85qC45q67542y56K656mr6Kaa6KeS6LWr6LyD6YOt6Zaj6ZqU6Z2p5a2m5bKz5qW96aGN6aGO5o6b56yg5qir5qm/5qK26bCN5r2f5Ymy5Zad5oGw5ous5rS75riH5ruR6JGb6KSQ6L2E5LiU6bC55Y+25qSb5qi66Z6E5qCq5YWc56uD6JKy6Yec6Y6M5Zmb6bSo5qCi6IyF6JCxXCJdLFxuW1wiYjRhMVwiLFwi57Kl5YiI6IuF55Om5Lm+5L6D5Yag5a+S5YiK5YuY5Yun5be75Zaa5aCq5aem5a6M5a6Y5a+b5bmy5bm55oKj5oSf5oWj5oa+5o+b5pWi5p+R5qGT5qO65qy+5q2T5rGX5ryi5r6X5r2F55Kw55SY55uj55yL56u/566h57Ch57ep57y257+w6IKd6Imm6I6e6Kaz6KuM6LKr6YKE6ZGR6ZaT6ZaR6Zai6Zml6Z+T6aSo6IiY5Li45ZCr5bK45beM546p55mM55y85bKp57+r6LSL6ZuB6aCR6aGU6aGY5LyB5LyO5Y2x5Zac5Zmo5Z+65aWH5ayJ5a+E5bKQ5biM5bm+5b+M5o+u5py65peX5pei5pyf5qOL5qOEXCJdLFxuW1wiYjVhMVwiLFwi5qmf5biw5q+F5rCX5rG955W/56WI5a2j56iA57SA5b696KaP6KiY6LK06LW36LuM6Lyd6aOi6aiO6ay85LqA5YG95YSA5aaT5a6c5oiv5oqA5pOs5qy654qg55aR56WH576p6J+76Kq86K2w5o6s6I+K6Z6g5ZCJ5ZCD5Zar5qGU5qmY6Kmw56Cn5p216buN5Y205a6i6ISa6JmQ6YCG5LiY5LmF5LuH5LyR5Y+K5ZC45a6u5byT5oCl5pWR5py95rGC5rGy5rOj54G455CD56m256qu56yI57Sa57O+57Wm5pen54mb5Y675bGF5beo5ouS5oug5oyZ5rig6Jma6Kix6Led6Yu45ryB56am6a2a5Lqo5Lqr5LqsXCJdLFxuW1wiYjZhMVwiLFwi5L6b5L6g5YOR5YWH56u25YWx5Ye25Y2U5Yyh5Y2/5Y+r5Zas5aKD5bOh5by35b2K5oCv5oGQ5oGt5oyf5pWZ5qmL5rOB54uC54ut55+v6IO46ISF6IiI6JWO6YO36Y+h6Z+/6aWX6ama5Luw5Yed5bCt5pqB5qWt5bGA5puy5qW1546J5qGQ57KB5YOF5Yuk5Z2H5be+6Yym5pak5qyj5qy955C056aB56a9562L57eK6Iq56I+M6KG/6KWf6Ky56L+R6YeR5ZCf6YqA5Lmd5YC25Y+l5Yy654uX546W55+p6Ium6Lqv6aeG6aeI6aeS5YW35oSa6Jme5Zaw56m65YG25a+T6YGH6ZqF5Liy5qub6Yen5bGR5bGIXCJdLFxuW1wiYjdhMVwiLFwi5o6Y56qf5rKT6Z206L2h56qq54aK6ZqI57KC5qCX57mw5qGR6Y2s5Yuy5ZCb6Jar6KiT576k6LuN6YOh5Y2m6KKI56WB5L+C5YK+5YiR5YWE5ZWT5Zyt54+q5Z6L5aWR5b2i5b6E5oG15oW25oWn5oap5o6y5pC65pWs5pmv5qGC5riT55Wm56i957O757WM57aZ57mL572r6IyO6I2K6JuN6KiI6Kmj6K2m6Lu96aCa6baP6Iq46L+O6a+o5YqH5oif5pKD5r+A6ZqZ5qGB5YKR5qyg5rG65r2U56m057WQ6KGA6Kij5pyI5Lu25YC55YCm5YGl5YW85Yi45Ymj5Zan5ZyP5aCF5auM5bu65oay5oe45ouz5o2yXCJdLFxuW1wiYjhhMVwiLFwi5qSc5qip54m954qs54yu56CU56Gv57W555yM6IKp6KaL6KyZ6LOi6LuS6YGj6Y216Zm66aGV6aiT6bm45YWD5Y6f5Y6z5bm75bym5rib5rqQ546E54++57WD6Ii36KiA6Ku66ZmQ5LmO5YCL5Y+k5ZG85Zu65aeR5a2k5bex5bqr5byn5oi45pWF5p6v5rmW54uQ57OK6KK06IKh6IOh6I+w6JmO6KqH6Leo6Yi36ZuH6aGn6byT5LqU5LqS5LyN5Y2I5ZGJ5ZC+5aiv5b6M5b6h5oKf5qKn5qqO55Ga56KB6Kqe6Kqk6K236YaQ5Lme6a+J5Lqk5L285L6v5YCZ5YCW5YWJ5YWs5Yqf5Yq55Yu+5Y6a5Y+j5ZCRXCJdLFxuW1wiYjlhMVwiLFwi5ZCO5ZaJ5Z2R5Z6i5aW95a2U5a2d5a6P5bel5ben5be35bm45bqD5bqa5bq35byY5oGS5oWM5oqX5ouY5o6n5pS75piC5pmD5pu05p2t5qCh5qKX5qeL5rGf5rSq5rWp5riv5rqd55Sy55qH56Gs56i/57Og57SF57SY57We57ax6ICV6ICD6IKv6IKx6IWU6IaP6Iiq6I2S6KGM6KGh6Kyb6LKi6LO86YOK6YW16Ymx56C/6Yu86Zak6ZmN6aCF6aaZ6auY6bS75Ymb5Yqr5Y+35ZCI5aOV5ou35r+g6LGq6L2f6bq55YWL5Yi75ZGK5Zu956mA6YW36bWg6buS542E5ryJ6IWw55SR5b+95oOa6aqo54ub6L68XCJdLFxuW1wiYmFhMVwiLFwi5q2k6aCD5LuK5Zuw5Z2k5aK+5ama5oGo5oeH5piP5piG5qC55qKx5re355eV57S66Imu6a2C5Lqb5L2Q5Y+J5ZSG5bWv5bem5beu5p+75rKZ55Gz56CC6KmQ6Y6W6KOf5Z2Q5bqn5oyr5YK15YKs5YaN5pyA5ZOJ5aGe5aa75a6w5b2p5omN5o6h5qC95q2z5riI54G96YeH54qA56CV56Cm56Wt5paO57Sw6I+c6KOB6LyJ6Zqb5Ymk5Zyo5p2Q572q6LKh5Ya05Z2C6Ziq5aC65qaK6IK05ZKy5bSO5Z+856KV6be65L2c5YmK5ZKL5pC+5pio5pyU5p+156qE562W57Si6Yyv5qGc6a6t56y55YyZ5YaK5Yi3XCJdLFxuW1wiYmJhMVwiLFwi5a+f5ou25pKu5pOm5pyt5q666Jap6ZuR55qQ6a+W5o2M6YyG6a6r55q/5pmS5LiJ5YKY5Y+C5bGx5oOo5pKS5pWj5qGf54em54+K55Sj566X57qC6JqV6K6D6LOb6YW46aSQ5pas5pqr5q6L5LuV5LuU5Ly65L2/5Yi65Y+45Y+y5Zej5Zub5aOr5aeL5aeJ5ae/5a2Q5bGN5biC5bir5b+X5oCd5oyH5pSv5a2c5pav5pa95peo5p6d5q2i5q275rCP542F56WJ56eB57O457SZ57Sr6IKi6ISC6Iez6KaW6Kme6Kmp6Kmm6KqM6Kuu6LOH6LOc6ZuM6aO85q2v5LqL5Ly85L6N5YWQ5a2X5a+65oWI5oyB5pmCXCJdLFxuW1wiYmNhMVwiLFwi5qyh5ruL5rK754i+55K955eU56OB56S66ICM6ICz6Ieq6JKU6L6e5rGQ6bm/5byP6K2Y6bSr56u66Lu45a6N6Zur5LiD5Y+x5Z+35aSx5auJ5a6k5oKJ5rm/5ryG55a+6LOq5a6f6JSA56+g5YGy5p+06Iqd5bGh6JWK57ie6IiO5YaZ5bCE5o2o6LWm5pac54Wu56S+57SX6ICF6Kyd6LuK6YGu6JuH6YKq5YCf5Yu65bC65p2T54G854i16YWM6YeI6Yyr6Iul5a+C5byx5oO55Li75Y+W5a6I5omL5pyx5q6K54up54+g56iu6IWr6Laj6YWS6aaW5YSS5Y+X5ZGq5a+/5o6I5qi557as6ZyA5Zua5Y+O5ZGoXCJdLFxuW1wiYmRhMVwiLFwi5a6X5bCx5bee5L+u5oSB5ou+5rSy56eA56eL57WC57mN57+S6Iet6Iif6JKQ6KGG6KWy6K6Q6Lm06Lyv6YCx6YWL6YWs6ZuG6Yac5LuA5L2P5YWF5Y2B5b6T5oiO5p+U5rGB5riL542j57im6YeN6YqD5Y+U5aSZ5a6/5reR56Wd57iu57Kb5aG+54af5Ye66KGT6L+w5L+K5bO75pil556s56uj6Iic6ae/5YeG5b6q5pes5qWv5q6J5rez5rqW5r2k55u+57SU5beh6YG16YaH6aCG5Yem5Yid5omA5pqR5puZ5ria5bq257eS572y5pu46Jav6Je36Ku45Yqp5Y+Z5aWz5bqP5b6Q5oGV6Yuk6Zmk5YK35YSfXCJdLFxuW1wiYmVhMVwiLFwi5Yud5Yyg5Y2H5Y+s5ZOo5ZWG5ZSx5ZiX5aWo5aa+5ai85a615bCG5bCP5bCR5bCa5bqE5bqK5bug5b2w5om/5oqE5oub5o6M5o235piH5piM5pit5pm25p2+5qKi5qif5qi15rK85raI5riJ5rmY54S854Sm54Wn55eH55yB56Gd56SB56Wl56ew56ug56yR57Kn57S56IKW6I+W6JKL6JWJ6KGd6KOz6Kif6Ki86KmU6Kmz6LGh6LOe6Yak6Ymm6Y2+6ZCY6Zqc6Z6Y5LiK5LiI5Lie5LmX5YaX5Ymw5Z+O5aC05aOM5ayi5bi45oOF5pO+5p2h5p2W5rWE54q255Wz56mj6JK46K2y6Ya46Yyg5Zix5Z+06aO+XCJdLFxuW1wiYmZhMVwiLFwi5out5qSN5q6W54et57mU6IG36Imy6Kem6aOf6J2V6L6x5bC75Ly45L+h5L615ZSH5aig5a+d5a+p5b+D5oWO5oyv5paw5pmL5qOu5qab5rW45rex55Sz55a555yf56We56em57Sz6Iej6Iqv6Jaq6Kaq6Ki66Lqr6L6b6YCy6Yed6ZyH5Lq65LuB5YiD5aG15aOs5bCL55Sa5bC96IWO6KiK6L+F6Zmj6Z2t56yl6KuP6aCI6YWi5Zuz5Y6o6YCX5ZC55Z6C5bil5o6o5rC054KK552h57KL57+g6KGw6YGC6YWU6YyQ6YyY6ZqP55Ge6auE5bSH5bWp5pWw5p6i6Lao6Zub5o2u5p2J5qSZ6I+F6aCX6ZuA6KO+XCJdLFxuW1wiYzBhMVwiLFwi5r6E5pG65a+45LiW54Cs55Wd5piv5YeE5Yi25Yui5aeT5b6B5oCn5oiQ5pS/5pW05pif5pm05qOy5qCW5q2j5riF54my55Sf55ub57K+6IGW5aOw6KO96KW/6Kqg6KqT6KuL6YCd6YaS6Z2S6Z2Z5paJ56iO6ISG6Zq75bit5oOc5oia5pal5piU5p6Q55+z56mN57GN57i+6ISK6LKs6LWk6Leh6Lmf56Kp5YiH5ouZ5o6l5pGC5oqY6Kit56qD56+A6Kqs6Zuq57W26IiM6J2J5LuZ5YWI5Y2D5Y2g5a6j5bCC5bCW5bed5oim5omH5pKw5qCT5qC05rOJ5rWF5rSX5p+T5r2c54WO54W95peL56m/566t57eaXCJdLFxuW1wiYzFhMVwiLFwi57mK576o6IW66Iib6Ii56Jam6Kmu6LOO6Le16YG46YG36Yqt6YqR6ZaD6a6u5YmN5ZaE5ry454S25YWo56aF57mV6Iaz57OO5ZmM5aGR5bKo5o6q5pu+5pu95qWa54uZ55aP55aO56SO56WW56ef57KX57Sg57WE6JiH6Ki06Zi76YGh6byg5YOn5Ym15Y+M5Y+i5YCJ5Zaq5aOu5aWP54i95a6L5bGk5Yyd5oOj5oOz5o2c5o6D5oy/5o675pON5pep5pu55bej5qeN5qe95ryV54el5LqJ55ep55u456qT57Of57eP57ac6IGh6I2J6I2Y6JGs6JK86Je76KOF6LWw6YCB6YGt6Y6X6Zyc6aiS5YOP5aKX5oaOXCJdLFxuW1wiYzJhMVwiLFwi6IeT6JS16LSI6YCg5L+D5YG05YmH5Y2z5oGv5o2J5p2f5ris6Laz6YCf5L+X5bGe6LOK5peP57aa5Y2S6KKW5YW25o+D5a2Y5a2r5bCK5pCN5p2R6YGc5LuW5aSa5aSq5rGw6KmR5ZS+5aCV5aal5oOw5omT5p+B6Ii15qWV6ZmA6aeE6aio5L2T5aCG5a++6ICQ5bKx5biv5b6F5oCg5oWL5oi05pu/5rOw5rue6IOO6IW/6IuU6KKL6LK46YCA6YCu6ZqK6bub6a+b5Luj5Y+w5aSn56ys6YaN6aGM6be55rud54Cn5Y2T5ZWE5a6F5omY5oqe5ouT5rKi5r+v55Ci6KiX6ZC45r+B6Ku+6Iy45Yen6Ju45Y+qXCJdLFxuW1wiYzNhMVwiLFwi5Y+p5L2G6YGU6L6w5aWq6ISx5be956uq6L6/5qOa6LC354u46bGI5qi96Kqw5Li55Y2Y5ZiG5Z2m5ouF5o6i5pem5q2O5reh5rmb54Kt55+t56uv566q57a76IC96IOG6JuL6KqV6Y2b5Zuj5aOH5by+5pat5pqW5qqA5q6155S36KuH5YCk55+l5Zyw5byb5oGl5pm65rGg55e056ia572u6Ie06JyY6YGF6aaz56+J55Wc56u5562R6JOE6YCQ56ep56qS6Iy25auh552A5Lit5Luy5a6Z5b+g5oq95pi85p+x5rOo6Jmr6KG36Ki76YWO6Yuz6aeQ5qiX54Cm54yq6Iun6JGX6LKv5LiB5YWG5YeL5ZaL5a+1XCJdLFxuW1wiYzRhMVwiLFwi5biW5biz5bqB5byU5by15b2r5b605oey5oyR5pqi5pyd5r2u54mS55S655y66IG06IS56IW46J226Kq/6Kuc6LaF6Lez6Yqa6ZW36aCC6bOl5YuF5o2X55u05pyV5rKI54+N6LOD6Y6u6Zmz5rSl5aKc5qSO5qeM6L+96Y6a55eb6YCa5aGa5qCC5o605qe75L2D5rys5p+Y6L676JSm57a06Y2U5qS/5r2w5Z2q5aO35ays57Ss54iq5ZCK6Yej6ba05Lqt5L2O5YGc5YG15YmD6LKe5ZGI5aCk5a6a5bid5bqV5bqt5bu35byf5oKM5oq15oy65o+Q5qKv5rGA56KH56aO56iL57eg6ImH6KiC6Kum6LmE6YCTXCJdLFxuW1wiYzVhMVwiLFwi6YK46YSt6YeY6byO5rOl5pGY5pOi5pW15ru055qE56yb6YGp6Y+R5rq65ZOy5b655pKk6L2N6L+t6YmE5YW45aGr5aSp5bGV5bqX5re757qP55Sc6LK86Lui6aGb54K55Lyd5q6/5r6x55Sw6Zu75YWO5ZCQ5aC15aGX5aas5bGg5b6S5paX5p2c5rih55m76I+f6LOt6YCU6YO96Y2N56Cl56C65Yqq5bqm5Zyf5aW05oCS5YCS5YWa5Yas5YeN5YiA5ZSQ5aGU5aGY5aWX5a6V5bO25baL5oK85oqV5pCt5p2x5qGD5qK85qOf55uX5reY5rmv5rab54Gv54eI5b2T55eY56W3562J562U562S57OW57Wx5YiwXCJdLFxuW1wiYzZhMVwiLFwi6JGj6JWp6Jek6KiO6KyE6LGG6LiP6YCD6YCP6ZCZ6Zm26aCt6aiw6ZeY5YON5YuV5ZCM5aCC5bCO5oan5pKe5rSe556z56ul6IO06JCE6YGT6YqF5bOg6bSH5Yy/5b6X5b6z5rac54m5552j56a/56+k5q+S54us6Kqt5qCD5qmh5Ye456qB5qS05bGK6bO26Iur5a+F6YWJ54Ce5Zm45bGv5oOH5pWm5rKM6LGa6YGB6aCT5ZGR5puH6YiN5aWI6YKj5YaF5LmN5Yeq6JaZ6KyO54GY5o266Y2L5qWi6aa057iE55W35Y2X5qWg6Luf6Zuj5rGd5LqM5bC85byQ6L+p5YyC6LOR6IKJ6Jm55bu/5pel5Lmz5YWlXCJdLFxuW1wiYzdhMVwiLFwi5aaC5bC/6Z+u5Lu75aaK5b+N6KqN5r+h56aw56Wi5a+n6JGx54yr54ax5bm05b+15o275pKa54eD57KY5LmD5bu85LmL5Z+c5Zqi5oKp5r+D57SN6IO96ISz6Ia/6L6y6KaX6Jqk5be05oqK5pKt6KaH5p235rOi5rS+55C256C05amG57216Iqt6aas5L+z5buD5oud5o6S5pWX5p2v55uD54mM6IOM6IK66Lyp6YWN5YCN5Z+55aqS5qKF5qWz54Wk54u96LK35aOy6LOg6Zmq6YCZ6J2/56ek55+n6JCp5Lyv5Yml5Y2a5ouN5p+P5rOK55m9566U57KV6Ii26JaE6L+r5pud5ryg54iG57ib6I6r6aeB6bqmXCJdLFxuW1wiYzhhMVwiLFwi5Ye9566x56Gy56646IKH562I5quo5bmh6IKM55WR55Wg5YWr6Ymi5rqM55m66YaX6auq5LyQ572w5oqc562P6Zal6bOp5Zm65aGZ6Juk6Zq85Ly05Yik5Y2K5Y+N5Y+b5biG5pCs5paR5p2/5rC+5rGO54mI54qv54+t55WU57mB6Iis6Jep6LKp56+E6YeG54Wp6aCS6aOv5oy95pmp55Wq55uk56OQ6JWD6Juu5Yyq5Y2R5ZCm5aaD5bqH5b285oKy5omJ5om55oqr5paQ5q+U5rOM55ay55qu56KR56eY57eL57236IKl6KKr6Kq56LK76YG/6Z2e6aOb5qiL57C45YKZ5bC+5b6u5p6H5q+Y55C155yJ576OXCJdLFxuW1wiYzlhMVwiLFwi6by75p+K56iX5Yy555aL6aut5b2m6Iad6I+x6IKY5by85b+F55Wi562G6YC85qGn5aer5aqb57SQ55m+6Kys5L+15b2q5qiZ5rC35ryC55Oi56Wo6KGo6KmV6LG55buf5o+P55eF56eS6IuX6Yyo6Yuy6JKc6Jut6bCt5ZOB5b2s5paM5rWc54CV6LKn6LOT6aC75pWP55O25LiN5LuY5Z+g5aSr5amm5a+M5Yao5biD5bqc5oCW5om25pW35pan5pmu5rWu54i256ym6IWQ6Iaa6IqZ6K2c6LKg6LOm6LW06Zic6ZmE5L6u5pKr5q2m6Iie6JGh6JWq6YOo5bCB5qWT6aKo6JG66JWX5LyP5Ymv5b6p5bmF5pyNXCJdLFxuW1wiY2FhMVwiLFwi56aP6IW56KSH6KaG5re15byX5omV5rK45LuP54mp6a6S5YiG5ZC75Zm05aKz5oak5omu54Sa5aWu57KJ57Oe57Sb6Zuw5paH6IGe5LiZ5L215YW15aGA5bmj5bmz5byK5p+E5Lim6JS96ZaJ6Zmb57Gz6aCB5YO75aOB55mW56Kn5Yil556l6JSR566G5YGP5aSJ54mH56+H57eo6L666L+U6YGN5L6/5YuJ5aip5byB6Z6t5L+d6IiX6Yuq5ZyD5o2V5q2p55Sr6KOc6LyU56mC5Yuf5aKT5oWV5oiK5pqu5q+N57C/6I+p5YCj5L+45YyF5ZGG5aCx5aWJ5a6d5bOw5bOv5bSp5bqW5oqx5o2n5pS+5pa55pyLXCJdLFxuW1wiY2JhMVwiLFwi5rOV5rOh54O556Cy57ir6IOe6Iqz6JCM6JOs6JyC6KSS6Kiq6LGK6YKm6YuS6aO96bOz6bWs5LmP5Lqh5YKN5YmW5Z2K5aao5bi95b+Y5b+Z5oi/5pq05pyb5p+Q5qOS5YaS57Sh6IKq6Iao6KyA6LKM6LK/6Ym+6Ziy5ZCg6aCs5YyX5YOV5Y2c5aKo5pKy5py054mn552m56mG6Yem5YuD5rKh5q6G5aCA5bmM5aWU5pys57+75Yeh55uG5pGp56Oo6a2U6bq75Z+L5aa55pin5p6a5q+O5ZOp5qeZ5bmV6Iac5p6V6a6q5p++6bGS5qGd5Lqm5L+j5Y+I5oq55pyr5rKr6L+E5L6t57mt6bq/5LiH5oWi5rqAXCJdLFxuW1wiY2NhMVwiLFwi5ryr6JST5ZGz5pyq6a2F5bez566V5bKs5a+G6Jyc5rmK6JOR56iU6ISI5aaZ57KN5rCR55yg5YuZ5aSi54Sh54mf55+b6Zyn6bWh5qSL5am/5aiY5Yal5ZCN5ZG95piO55uf6L+36YqY6bO05aeq54md5ruF5YWN5qOJ57a/57es6Z2i6bq65pG45qih6IyC5aaE5a2f5q+b54yb55uy57ay6ICX6JKZ5YSy5pyo6buZ55uu5p2i5Yu/6aSF5bCk5oi757G+6LKw5ZWP5oK257SL6ZaA5YyB5Lmf5Ya25aSc54i66IC26YeO5byl55+i5Y6E5b2557SE6Jas6Kiz6LqN6Z2W5p+z6Jau6ZGT5oSJ5oSI5rK555mSXCJdLFxuW1wiY2RhMVwiLFwi6Kut6Ly45ZSv5L2R5YSq5YuH5Y+L5a6l5bm95oKg5oaC5o+W5pyJ5p+a5rmn5raM54y254y355Sx56WQ6KOV6KqY6YGK6YKR6YO16ZuE6J6N5aSV5LqI5L2Z5LiO6KqJ6Ly/6aCQ5YKt5bm85aaW5a655bq45o+a5o+65pOB5puc5qWK5qeY5rSL5rq254aU55So56qv576K6ICA6JGJ6JOJ6KaB6Kyh6LiK6YGl6Zm96aSK5oW+5oqR5qyy5rKD5rW057+M57+85reA576F6J666KO45p2l6I6x6aC86Zu35rSb57Wh6JC96YWq5Lmx5Y215bWQ5qyE5r+r6JeN6Jit6Kan5Yip5ZCP5bGl5p2O5qKo55CG55KDXCJdLFxuW1wiY2VhMVwiLFwi55ei6KOP6KOh6YeM6Zui6Zm45b6L546H56uL6JGO5o6g55Wl5YqJ5rWB5rqc55CJ55WZ56Gr57KS6ZqG56uc6b6N5L625oWu5peF6Jmc5LqG5Lqu5YOa5Lih5YeM5a+u5paZ5qKB5ra854yf55mC556t56ic57On6Imv6KuS6YG86YeP6Zm16aCY5Yqb57eR5YCr5Y6Y5p6X5reL54eQ55Cz6Ieo6Lyq6Zqj6bGX6bqf55Gg5aGB5raZ57Sv6aGe5Luk5Ly25L6L5Ya35Yqx5ba65oCc546y56S86IuT6Yi06Zq36Zu26ZyK6bqX6b2i5pqm5q205YiX5Yqj54OI6KOC5buJ5oGL5oaQ5ryj54WJ57C+57e06IGvXCJdLFxuW1wiY2ZhMVwiLFwi6JOu6YCj6Yys5ZGC6a2v5quT54KJ6LOC6Lev6Zyy5Yq05amB5buK5byE5pyX5qW85qaU5rWq5ryP54mi54u856+t6ICB6IG+6J2L6YOO5YWt6bqT56aE6IKL6Yyy6KuW5YCt5ZKM6Kmx5q2q6LOE6ISH5oOR5p6g6bey5LqZ5LqY6bCQ6Kmr6JeB6JWo5qSA5rm+56KX6IWVXCJdLFxuW1wiZDBhMVwiLFwi5byM5LiQ5LiV5Liq5Lix5Li25Li85Li/5LmC5LmW5LmY5LqC5LqF6LGr5LqK6IiS5byN5LqO5Lqe5Lqf5Lqg5Lqi5Lqw5Lqz5Lq25LuO5LuN5LuE5LuG5LuC5LuX5Lue5Lut5Luf5Lu35LyJ5L2a5Lyw5L2b5L2d5L2X5L2H5L225L6I5L6P5L6Y5L275L2p5L2w5L6R5L2v5L6G5L6W5YSY5L+U5L+f5L+O5L+Y5L+b5L+R5L+a5L+Q5L+k5L+l5YCa5YCo5YCU5YCq5YCl5YCF5Lyc5L+25YCh5YCp5YCs5L++5L+v5YCR5YCG5YGD5YGH5pyD5YGV5YGQ5YGI5YGa5YGW5YGs5YG45YKA5YKa5YKF5YK05YKyXCJdLFxuW1wiZDFhMVwiLFwi5YOJ5YOK5YKz5YOC5YOW5YOe5YOl5YOt5YOj5YOu5YO55YO15YSJ5YSB5YSC5YSW5YSV5YSU5YSa5YSh5YS65YS35YS85YS75YS/5YWA5YWS5YWM5YWU5YWi56u45YWp5YWq5YWu5YaA5YaC5ZuY5YaM5YaJ5YaP5YaR5YaT5YaV5YaW5Yak5Yam5Yai5Yap5Yaq5Yar5Yaz5Yax5Yay5Yaw5Ya15Ya95YeF5YeJ5Yeb5Yeg6JmV5Yep5Yet5Yew5Ye15Ye+5YiE5YiL5YiU5YiO5Yin5Yiq5Yiu5Yiz5Yi55YmP5YmE5YmL5YmM5Yme5YmU5Ymq5Ym05Ymp5Ymz5Ym/5Ym95YqN5YqU5YqS5Ymx5YqI5YqR6L6oXCJdLFxuW1wiZDJhMVwiLFwi6L6n5Yqs5Yqt5Yq85Yq15YuB5YuN5YuX5Yue5Yuj5Yum6aOt5Yug5Yuz5Yu15Yu45Yu55YyG5YyI55S45YyN5YyQ5YyP5YyV5Yya5Yyj5Yyv5Yyx5Yyz5Yy45Y2A5Y2G5Y2F5LiX5Y2J5Y2N5YeW5Y2e5Y2p5Y2u5aSY5Y275Y235Y6C5Y6W5Y6g5Y6m5Y6l5Y6u5Y6w5Y625Y+D57CS6ZuZ5Y+f5pu854eu5Y+u5Y+o5Y+t5Y+65ZCB5ZC95ZGA5ZCs5ZCt5ZC85ZCu5ZC25ZCp5ZCd5ZGO5ZKP5ZG15ZKO5ZGf5ZGx5ZG35ZGw5ZKS5ZG75ZKA5ZG25ZKE5ZKQ5ZKG5ZOH5ZKi5ZK45ZKl5ZKs5ZOE5ZOI5ZKoXCJdLFxuW1wiZDNhMVwiLFwi5ZKr5ZOC5ZKk5ZK+5ZK85ZOY5ZOl5ZOm5ZSP5ZSU5ZO95ZOu5ZOt5ZO65ZOi5ZS55ZWA5ZWj5ZWM5ZSu5ZWc5ZWF5ZWW5ZWX5ZS45ZSz5ZWd5ZaZ5ZaA5ZKv5ZaK5Zaf5ZW75ZW+5ZaY5Zae5Zau5ZW85ZaD5Zap5ZaH5Zao5Zea5ZeF5Zef5ZeE5Zec5Zek5ZeU5ZiU5Ze35ZiW5Ze+5Ze95Zib5Ze55ZmO5ZmQ54ef5Zi05Zi25Ziy5Zi45Zmr5Zmk5Ziv5Zms5Zmq5ZqG5ZqA5ZqK5Zqg5ZqU5ZqP5Zql5Zqu5Zq25Zq05ZuC5Zq85ZuB5ZuD5ZuA5ZuI5ZuO5ZuR5ZuT5ZuX5Zuu5Zu55ZyA5Zu/5ZyE5ZyJXCJdLFxuW1wiZDRhMVwiLFwi5ZyI5ZyL5ZyN5ZyT5ZyY5ZyW5ZeH5Zyc5Zym5Zy35Zy45Z2O5Zy75Z2A5Z2P5Z2p5Z+A5Z6I5Z2h5Z2/5Z6J5Z6T5Z6g5Z6z5Z6k5Z6q5Z6w5Z+D5Z+G5Z+U5Z+S5Z+T5aCK5Z+W5Z+j5aCL5aCZ5aCd5aGy5aCh5aGi5aGL5aGw5q+A5aGS5aC95aG55aKF5aK55aKf5aKr5aK65aOe5aK75aK45aKu5aOF5aOT5aOR5aOX5aOZ5aOY5aOl5aOc5aOk5aOf5aOv5aO65aO55aO75aO85aO95aSC5aSK5aSQ5aSb5qKm5aSl5aSs5aSt5aSy5aS45aS+56uS5aWV5aWQ5aWO5aWa5aWY5aWi5aWg5aWn5aWs5aWpXCJdLFxuW1wiZDVhMVwiLFwi5aW45aaB5aad5L2e5L6r5aaj5aay5aeG5aeo5aec5aaN5aeZ5aea5ail5aif5aiR5aic5aiJ5aia5amA5ams5amJ5ai15ai25ami5amq5aqa5aq85aq+5auL5auC5aq95auj5auX5aum5aup5auW5au65au75ayM5ayL5ayW5ayy5auQ5ayq5ay25ay+5a2D5a2F5a2A5a2R5a2V5a2a5a2b5a2l5a2p5a2w5a2z5a215a245paI5a265a6A5a6D5a6m5a645a+D5a+H5a+J5a+U5a+Q5a+k5a+m5a+i5a+e5a+l5a+r5a+w5a+25a+z5bCF5bCH5bCI5bCN5bCT5bCg5bCi5bCo5bC45bC55bGB5bGG5bGO5bGTXCJdLFxuW1wiZDZhMVwiLFwi5bGQ5bGP5a2x5bGs5bGu5Lmi5bG25bG55bKM5bKR5bKU5aab5bKr5bK75bK25bK85bK35bOF5bK+5bOH5bOZ5bOp5bO95bO65bOt5baM5bOq5bSL5bSV5bSX5bWc5bSf5bSb5bSR5bSU5bSi5bSa5bSZ5bSY5bWM5bWS5bWO5bWL5bWs5bWz5bW25baH5baE5baC5bai5bad5bas5bau5ba95baQ5ba35ba85beJ5beN5beT5beS5beW5beb5ber5bey5be15biL5bia5biZ5biR5bib5bi25bi35bmE5bmD5bmA5bmO5bmX5bmU5bmf5bmi5bmk5bmH5bm15bm25bm66bq85bm/5bqg5buB5buC5buI5buQ5buPXCJdLFxuW1wiZDdhMVwiLFwi5buW5buj5bud5bua5bub5bui5buh5buo5bup5bus5bux5buz5buw5bu05bu45bu+5byD5byJ5b2d5b2c5byL5byR5byW5byp5byt5by45b2B5b2I5b2M5b2O5byv5b2R5b2W5b2X5b2Z5b2h5b2t5b2z5b235b6D5b6C5b2/5b6K5b6I5b6R5b6H5b6e5b6Z5b6Y5b6g5b6o5b6t5b685b+W5b+75b+k5b+45b+x5b+d5oKz5b+/5oCh5oGg5oCZ5oCQ5oCp5oCO5oCx5oCb5oCV5oCr5oCm5oCP5oC65oGa5oGB5oGq5oG35oGf5oGK5oGG5oGN5oGj5oGD5oGk5oGC5oGs5oGr5oGZ5oKB5oKN5oOn5oKD5oKaXCJdLFxuW1wiZDhhMVwiLFwi5oKE5oKb5oKW5oKX5oKS5oKn5oKL5oOh5oK45oOg5oOT5oK05b+w5oK95oOG5oK15oOY5oWN5oSV5oSG5oO25oO35oSA5oO05oO65oSD5oSh5oO75oOx5oSN5oSO5oWH5oS+5oSo5oSn5oWK5oS/5oS85oSs5oS05oS95oWC5oWE5oWz5oW35oWY5oWZ5oWa5oWr5oW05oWv5oWl5oWx5oWf5oWd5oWT5oW15oaZ5oaW5oaH5oas5oaU5oaa5oaK5oaR5oar5oau5oeM5oeK5oeJ5oe35oeI5oeD5oeG5oa65oeL57255oeN5oem5oej5oe25oe65oe05oe/5oe95oe85oe+5oiA5oiI5oiJ5oiN5oiM5oiU5oibXCJdLFxuW1wiZDlhMVwiLFwi5oie5oih5oiq5oiu5oiw5oiy5oiz5omB5omO5ome5omj5omb5omg5omo5om85oqC5oqJ5om+5oqS5oqT5oqW5ouU5oqD5oqU5ouX5ouR5oq75ouP5ou/5ouG5pOU5ouI5ouc5ouM5ouK5ouC5ouH5oqb5ouJ5oyM5ouu5oux5oyn5oyC5oyI5ouv5ou15o2Q5oy+5o2N5pCc5o2P5o6W5o6O5o6A5o6r5o225o6j5o6P5o6J5o6f5o615o2r5o2p5o6+5o+p5o+A5o+G5o+j5o+J5o+S5o+25o+E5pCW5pC05pCG5pCT5pCm5pC25pSd5pCX5pCo5pCP5pGn5pGv5pG25pGO5pSq5pKV5pKT5pKl5pKp5pKI5pK8XCJdLFxuW1wiZGFhMVwiLFwi5pOa5pOS5pOF5pOH5pK75pOY5pOC5pOx5pOn6IiJ5pOg5pOh5oqs5pOj5pOv5pSs5pO25pO05pOy5pO65pSA5pO95pSY5pSc5pSF5pSk5pSj5pSr5pS05pS15pS35pS25pS455WL5pWI5pWW5pWV5pWN5pWY5pWe5pWd5pWy5pW45paC5paD6K6K5pab5paf5par5pa35peD5peG5peB5peE5peM5peS5peb5peZ5peg5peh5pex5p2y5piK5piD5pe75p2z5pi15pi25pi05pic5pmP5pmE5pmJ5pmB5pme5pmd5pmk5pmn5pmo5pmf5pmi5pmw5pqD5pqI5pqO5pqJ5pqE5pqY5pqd5puB5pq55puJ5pq+5pq8XCJdLFxuW1wiZGJhMVwiLFwi5puE5pq45puW5pua5pug5pi/5pum5pup5puw5pu15pu35pyP5pyW5pye5pym5pyn6Zy45pyu5py/5py25p2B5py45py35p2G5p2e5p2g5p2Z5p2j5p2k5p6J5p2w5p6p5p285p2q5p6M5p6L5p6m5p6h5p6F5p635p+v5p605p+s5p6z5p+p5p645p+k5p+e5p+d5p+i5p+u5p655p+O5p+G5p+n5qqc5qCe5qGG5qCp5qGA5qGN5qCy5qGO5qKz5qCr5qGZ5qGj5qG35qG/5qKf5qKP5qKt5qKU5qKd5qKb5qKD5qqu5qK55qG05qK15qKg5qK65qSP5qKN5qG+5qSB5qOK5qSI5qOY5qSi5qSm5qOh5qSM5qONXCJdLFxuW1wiZGNhMVwiLFwi5qOU5qOn5qOV5qS25qSS5qSE5qOX5qOj5qSl5qO55qOg5qOv5qSo5qSq5qSa5qSj5qSh5qOG5qW55qW35qWc5qW45qWr5qWU5qW+5qWu5qS55qW05qS95qWZ5qSw5qWh5qWe5qWd5qaB5qWq5qay5qau5qeQ5qa/5qeB5qeT5qa+5qeO5a+o5qeK5qed5qa75qeD5qan5qiu5qaR5qag5qac5qaV5qa05qee5qeo5qiC5qib5qe/5qyK5qe55qey5qen5qiF5qax5qie5qet5qiU5qer5qiK5qiS5quB5qij5qiT5qmE5qiM5qmy5qi25qm45qmH5qmi5qmZ5qmm5qmI5qi45qii5qqQ5qqN5qqg5qqE5qqi5qqjXCJdLFxuW1wiZGRhMVwiLFwi5qqX6JiX5qq75quD5quC5qq45qqz5qqs5que5quR5quf5qqq5qua5quq5qu75qyF6JiW5qu65qyS5qyW6ayx5qyf5qy45qy355uc5qy56aOu5q2H5q2D5q2J5q2Q5q2Z5q2U5q2b5q2f5q2h5q245q255q2/5q6A5q6E5q6D5q6N5q6Y5q6V5q6e5q6k5q6q5q6r5q6v5q6y5q6x5q6z5q635q685q+G5q+L5q+T5q+f5q+s5q+r5q+z5q+v6bq+5rCI5rCT5rCU5rCb5rCk5rCj5rGe5rGV5rGi5rGq5rKC5rKN5rKa5rKB5rKb5rG+5rGo5rGz5rKS5rKQ5rOE5rOx5rOT5rK95rOX5rOF5rOd5rKu5rKx5rK+XCJdLFxuW1wiZGVhMVwiLFwi5rK65rOb5rOv5rOZ5rOq5rSf6KGN5rS25rSr5rS95rS45rSZ5rS15rSz5rSS5rSM5rWj5raT5rWk5rWa5rW55rWZ5raO5raV5r+k5raF5re55riV5riK5ra15reH5rem5ra45reG5res5ree5reM5reo5reS5reF5re65reZ5rek5reV5req5reu5rit5rmu5riu5riZ5rmy5rmf5ri+5rij5rmr5rir5rm25rmN5rif5rmD5ri65rmO5rik5ru/5rid5ri45rqC5rqq5rqY5ruJ5rq35ruT5rq95rqv5ruE5rqy5ruU5ruV5rqP5rql5ruC5rqf5r2B5ryR54GM5rus5ru45ru+5ry/5ruy5ryx5ruv5ryy5ruMXCJdLFxuW1wiZGZhMVwiLFwi5ry+5ryT5ru35r6G5r265r245r6B5r6A5r2v5r2b5r+z5r2t5r6C5r285r2Y5r6O5r6R5r+C5r2m5r6z5r6j5r6h5r6k5r655r+G5r6q5r+f5r+V5r+s5r+U5r+Y5r+x5r+u5r+b54CJ54CL5r+654CR54CB54CP5r++54Cb54Ca5r2054Cd54CY54Cf54Cw54C+54Cy54GR54Gj54KZ54KS54Kv54Ox54Ks54K454Kz54Ku54Of54OL54Od54OZ54SJ54O954Sc54SZ54Wl54WV54aI54Wm54Wi54WM54WW54Ws54aP54e754aE54aV54ao54as54eX54a554a+54eS54eJ54eU54eO54eg54es54en54e154e8XCJdLFxuW1wiZTBhMVwiLFwi54e554e/54iN54iQ54ib54io54it54is54iw54iy54i754i854i/54mA54mG54mL54mY54m054m+54qC54qB54qH54qS54qW54qi54qn54q554qy54uD54uG54uE54uO54uS54ui54ug54uh54u554u35YCP54yX54yK54yc54yW54yd54y054yv54yp54yl54y+542O542P6buY542X542q542o542w542454215427542654+I546z54+O546754+A54+l54+u54+e55Ki55CF55Gv55Cl54+455Cy55C655GV55C/55Gf55GZ55GB55Gc55Gp55Gw55Gj55Gq55G255G+55KL55Ke55Kn55OK55OP55OU54+xXCJdLFxuW1wiZTFhMVwiLFwi55Og55Oj55On55Op55Ou55Oy55Ow55Ox55O455O355SE55SD55SF55SM55SO55SN55SV55ST55Se55Sm55Ss55S855WE55WN55WK55WJ55Wb55WG55Wa55Wp55Wk55Wn55Wr55Wt55W455W255aG55aH55W055aK55aJ55aC55aU55aa55ad55al55aj55eC55az55eD55a155a955a455a855ax55eN55eK55eS55eZ55ej55ee55e+55e/55e855iB55ew55e655ey55ez55iL55iN55iJ55if55in55ig55ih55ii55ik55i055iw55i755mH55mI55mG55mc55mY55mh55mi55mo55mp55mq55mn55ms55mwXCJdLFxuW1wiZTJhMVwiLFwi55my55m255m455m855qA55qD55qI55qL55qO55qW55qT55qZ55qa55qw55q055q455q555q655uC55uN55uW55uS55ue55uh55ul55un55uq6Jiv55u755yI55yH55yE55yp55yk55ye55yl55ym55yb55y355y4552H552a552o552r552b552l552/552+5525556O556L556R556g556e556w55625565556/55685569556755+H55+N55+X55+a55+c55+j55+u55+856CM56CS56Sm56Cg56Sq56GF56KO56G056KG56G856Ka56KM56Kj56K156Kq56Kv56OR56OG56OL56OU56K+56K856OF56OK56OsXCJdLFxuW1wiZTNhMVwiLFwi56On56Oa56O956O056SH56SS56SR56SZ56Ss56Sr56WA56Wg56WX56Wf56Wa56WV56WT56W656W/56aK56ad56an6b2L56aq56au56az56a556a656eJ56eV56en56es56eh56ej56iI56iN56iY56iZ56ig56if56aA56ix56i756i+56i356mD56mX56mJ56mh56mi56mp6b6d56mw56m556m956qI56qX56qV56qY56qW56qp56uI56qw56q256uF56uE56q/6YKD56uH56uK56uN56uP56uV56uT56uZ56ua56ud56uh56ui56um56ut56uw56yC56yP56yK56yG56yz56yY56yZ56ye56y156yo56y2562QXCJdLFxuW1wiZTRhMVwiLFwi562656yE562N56yL562M562F5621562l5620562n562w562x562s562u566d566Y566f566N566c566a566L566S566P562d566Z56+L56+B56+M56+P566056+G56+d56+p57CR57CU56+m56+l57Gg57CA57CH57CT56+z56+357CX57CN56+257Cj57Cn57Cq57Cf57C357Cr57C957GM57GD57GU57GP57GA57GQ57GY57Gf57Gk57GW57Gl57Gs57G157KD57KQ57Kk57Kt57Ki57Kr57Kh57Ko57Kz57Ky57Kx57Ku57K557K957OA57OF57OC57OY57OS57Oc57Oi6ay757Ov57Oy57O057O257O657SGXCJdLFxuW1wiZTVhMVwiLFwi57SC57Sc57SV57SK57WF57WL57Su57Sy57S/57S157WG57Wz57WW57WO57Wy57Wo57Wu57WP57Wj57aT57aJ57Wb57aP57W957ab57a657au57aj57a157eH57a957ar57i957ai57av57ec57a457af57aw57eY57ed57ek57ee57e757ey57eh57iF57iK57ij57ih57iS57ix57if57iJ57iL57ii57mG57mm57i757i157i557mD57i357iy57i657mn57md57mW57me57mZ57ma57m557mq57mp57m857m757qD57eV57m96L6u57m/57qI57qJ57qM57qS57qQ57qT57qU57qW57qO57qb57qc57y457y6XCJdLFxuW1wiZTZhMVwiLFwi572F572M572N572O572Q572R572V572U572Y572f572g572o572p572n5724576C576G576D576I576H576M576U576e576d576a576j576v576y5765576u576257646K2x57+F57+G57+K57+V57+U57+h57+m57+p57+z57+56aOc6ICG6ICE6ICL6ICS6ICY6ICZ6ICc6ICh6ICo6IC/6IC76IGK6IGG6IGS6IGY6IGa6IGf6IGi6IGo6IGz6IGy6IGw6IG26IG56IG96IG/6IKE6IKG6IKF6IKb6IKT6IKa6IKt5YaQ6IKs6IOb6IOl6IOZ6IOd6IOE6IOa6IOW6ISJ6IOv6IOx6ISb6ISp6ISj6ISv6IWLXCJdLFxuW1wiZTdhMVwiLFwi6ZqL6IWG6IS+6IWT6IWR6IO86IWx6IWu6IWl6IWm6IW06IaD6IaI6IaK6IaA6IaC6Iag6IaV6Iak6Iaj6IWf6IaT6Iap6Iaw6Ia16Ia+6Ia46Ia96IeA6IeC6Ia66IeJ6IeN6IeR6IeZ6IeY6IeI6Iea6Ief6Ieg6Ien6Ie66Ie76Ie+6IiB6IiC6IiF6IiH6IiK6IiN6IiQ6IiW6Iip6Iir6Ii46Iiz6ImA6ImZ6ImY6Imd6Ima6Imf6Imk6Imi6Imo6Imq6Imr6Iiu6Imx6Im36Im46Im+6IqN6IqS6Iqr6Iqf6Iq76Iqs6Iuh6Iuj6Iuf6IuS6Iu06Iuz6Iu66I6T6IyD6Iu76Iu56Iue6IyG6Iuc6IyJ6IuZXCJdLFxuW1wiZThhMVwiLFwi6Iy16Iy06IyW6Iyy6Iyx6I2A6Iy56I2Q6I2F6Iyv6Iyr6IyX6IyY6I6F6I6a6I6q6I6f6I6i6I6W6Iyj6I6O6I6H6I6K6I286I616I2z6I216I6g6I6J6I6o6I+06JCT6I+r6I+O6I+96JCD6I+Y6JCL6I+B6I+36JCH6I+g6I+y6JCN6JCi6JCg6I696JC46JSG6I+76JGt6JCq6JC86JWa6JKE6JG36JGr6JKt6JGu6JKC6JGp6JGG6JCs6JGv6JG56JC16JOK6JGi6JK56JK/6JKf6JOZ6JON6JK76JOa6JOQ6JOB6JOG6JOW6JKh6JSh6JO/6JO06JSX6JSY6JSs6JSf6JSV6JSU6JO86JWA6JWj6JWY6JWIXCJdLFxuW1wiZTlhMVwiLFwi6JWB6JiC6JWL6JWV6JaA6Jak6JaI6JaR6JaK6Jao6JWt6JaU6Jab6Jeq6JaH6Jac6JW36JW+6JaQ6JeJ6Ja66JeP6Ja56JeQ6JeV6Jed6Jel6Jec6Je56JiK6JiT6JiL6Je+6Je66JiG6Jii6Jia6Jiw6Ji/6JmN5LmV6JmU6Jmf6Jmn6Jmx6JqT6Jqj6Jqp6Jqq6JqL6JqM6Jq26Jqv6JuE6JuG6Jqw6JuJ6KCj6Jqr6JuU6Jue6Jup6Jus6Juf6Jub6Juv6JyS6JyG6JyI6JyA6JyD6Ju76JyR6JyJ6JyN6Ju56JyK6Jy06Jy/6Jy36Jy76Jyl6Jyp6Jya6J2g6J2f6J246J2M6J2O6J206J2X6J2o6J2u6J2ZXCJdLFxuW1wiZWFhMVwiLFwi6J2T6J2j6J2q6KCF6J6i6J6f6J6C6J6v6J+L6J696J+A6J+Q6ZuW6J6r6J+E6J6z6J+H6J+G6J676J+v6J+y6J+g6KCP6KCN6J++6J+26J+36KCO6J+S6KCR6KCW6KCV6KCi6KCh6KCx6KC26KC56KCn6KC76KGE6KGC6KGS6KGZ6KGe6KGi6KGr6KKB6KG+6KKe6KG16KG96KK16KGy6KKC6KKX6KKS6KKu6KKZ6KKi6KKN6KKk6KKw6KK/6KKx6KOD6KOE6KOU6KOY6KOZ6KOd6KO56KSC6KO86KO06KOo6KOy6KSE6KSM6KSK6KST6KWD6KSe6KSl6KSq6KSr6KWB6KWE6KS76KS26KS46KWM6KSd6KWg6KWeXCJdLFxuW1wiZWJhMVwiLFwi6KWm6KWk6KWt6KWq6KWv6KW06KW36KW+6KaD6KaI6KaK6KaT6KaY6Kah6Kap6Kam6Kas6Kav6Kay6Ka66Ka96Ka/6KeA6Kea6Kec6Ked6Ken6Ke06Ke46KiD6KiW6KiQ6KiM6Kib6Kid6Kil6Ki26KmB6Kmb6KmS6KmG6KmI6Km86Kmt6Kms6Kmi6KqF6KqC6KqE6Kqo6Kqh6KqR6Kql6Kqm6Kqa6Kqj6KuE6KuN6KuC6Kua6Kur6Kuz6Kun6Kuk6Kux6KyU6Kug6Kui6Ku36Kue6Kub6KyM6KyH6Kya6Kuh6KyW6KyQ6KyX6Kyg6Kyz6Z6r6Kym6Kyr6Ky+6Kyo6K2B6K2M6K2P6K2O6K2J6K2W6K2b6K2a6K2rXCJdLFxuW1wiZWNhMVwiLFwi6K2f6K2s6K2v6K206K296K6A6K6M6K6O6K6S6K6T6K6W6K6Z6K6a6LC66LGB6LC/6LGI6LGM6LGO6LGQ6LGV6LGi6LGs6LG46LG66LKC6LKJ6LKF6LKK6LKN6LKO6LKU6LG86LKY5oid6LKt6LKq6LK96LKy6LKz6LKu6LK26LOI6LOB6LOk6LOj6LOa6LO96LO66LO76LSE6LSF6LSK6LSH6LSP6LSN6LSQ6b2O6LST6LON6LSU6LSW6LWn6LWt6LWx6LWz6LaB6LaZ6LeC6La+6La66LeP6Lea6LeW6LeM6Leb6LeL6Leq6Ler6Lef6Lej6Le86LiI6LiJ6Le/6Lid6Lie6LiQ6Lif6LmC6Li16Liw6Li06LmKXCJdLFxuW1wiZWRhMVwiLFwi6LmH6LmJ6LmM6LmQ6LmI6LmZ6Lmk6Lmg6Liq6Lmj6LmV6Lm26Lmy6Lm86LqB6LqH6LqF6LqE6LqL6LqK6LqT6LqR6LqU6LqZ6Lqq6Lqh6Lqs6Lqw6LuG6Lqx6Lq+6LuF6LuI6LuL6Lub6Luj6Lu86Lu76Lur6Lu+6LyK6LyF6LyV6LyS6LyZ6LyT6Lyc6Lyf6Lyb6LyM6Lym6Lyz6Ly76Ly56L2F6L2C6Ly+6L2M6L2J6L2G6L2O6L2X6L2c6L2i6L2j6L2k6L6c6L6f6L6j6L6t6L6v6L636L+a6L+l6L+i6L+q6L+v6YKH6L+06YCF6L+56L+66YCR6YCV6YCh6YCN6YCe6YCW6YCL6YCn6YC26YC16YC56L+4XCJdLFxuW1wiZWVhMVwiLFwi6YGP6YGQ6YGR6YGS6YCO6YGJ6YC+6YGW6YGY6YGe6YGo6YGv6YG26Zqo6YGy6YKC6YG96YKB6YKA6YKK6YKJ6YKP6YKo6YKv6YKx6YK16YOi6YOk5omI6YOb6YSC6YSS6YSZ6YSy6YSw6YWK6YWW6YWY6YWj6YWl6YWp6YWz6YWy6YaL6YaJ6YaC6Yai6Yar6Yav6Yaq6Ya16Ya06Ya66YeA6YeB6YeJ6YeL6YeQ6YeW6Yef6Yeh6Yeb6Ye86Ye16Ye26Yie6Ye/6YiU6Yis6YiV6YiR6Yme6YmX6YmF6YmJ6Ymk6YmI6YqV6Yi/6YmL6YmQ6Yqc6YqW6YqT6Yqb6Yma6YuP6Yq56Yq36Yup6YyP6Yu66Y2E6YyuXCJdLFxuW1wiZWZhMVwiLFwi6YyZ6Yyi6Yya6Yyj6Yy66Yy16Yy76Y2c6Y2g6Y286Y2u6Y2W6Y6w6Y6s6Y6t6Y6U6Y656Y+W6Y+X6Y+o6Y+l6Y+Y6Y+D6Y+d6Y+Q6Y+I6Y+k6ZCa6ZCU6ZCT6ZCD6ZCH6ZCQ6ZC26ZCr6ZC16ZCh6ZC66ZGB6ZGS6ZGE6ZGb6ZGg6ZGi6ZGe6ZGq6Yip6ZGw6ZG16ZG36ZG96ZGa6ZG86ZG+6ZKB6ZG/6ZaC6ZaH6ZaK6ZaU6ZaW6ZaY6ZaZ6Zag6Zao6Zan6Zat6Za86Za76Za56Za+6ZeK5r+26ZeD6ZeN6ZeM6ZeV6ZeU6ZeW6Zec6Zeh6Zel6Zei6Zih6Zio6Ziu6Ziv6ZmC6ZmM6ZmP6ZmL6Zm36Zmc6ZmeXCJdLFxuW1wiZjBhMVwiLFwi6Zmd6Zmf6Zmm6Zmy6Zms6ZqN6ZqY6ZqV6ZqX6Zqq6Zqn6Zqx6Zqy6Zqw6Zq06Zq26Zq46Zq56ZuO6ZuL6ZuJ6ZuN6KWN6Zuc6ZyN6ZuV6Zu56ZyE6ZyG6ZyI6ZyT6ZyO6ZyR6ZyP6ZyW6ZyZ6Zyk6Zyq6Zyw6Zy56Zy96Zy+6Z2E6Z2G6Z2I6Z2C6Z2J6Z2c6Z2g6Z2k6Z2m6Z2o5YuS6Z2r6Z2x6Z256Z6F6Z286Z6B6Z266Z6G6Z6L6Z6P6Z6Q6Z6c6Z6o6Z6m6Z6j6Z6z6Z606Z+D6Z+G6Z+I6Z+L6Z+c6Z+t6b2P6Z+y56uf6Z+26Z+16aCP6aCM6aC46aCk6aCh6aC36aC96aGG6aGP6aGL6aGr6aGv6aGwXCJdLFxuW1wiZjFhMVwiLFwi6aGx6aG06aGz6aKq6aKv6aKx6aK26aOE6aOD6aOG6aOp6aOr6aSD6aSJ6aSS6aSU6aSY6aSh6aSd6aSe6aSk6aSg6aSs6aSu6aS96aS+6aWC6aWJ6aWF6aWQ6aWL6aWR6aWS6aWM6aWV6aaX6aaY6aal6aat6aau6aa86aef6aeb6aed6aeY6aeR6aet6aeu6aex6aey6ae76ae46aiB6aiP6aiF6aei6aiZ6air6ai36amF6amC6amA6amD6ai+6amV6amN6amb6amX6amf6ami6aml6amk6amp6amr6amq6aqt6aqw6aq86auA6auP6auR6auT6auU6aue6auf6aui6auj6aum6auv6aur6auu6au06aux6au3XCJdLFxuW1wiZjJhMVwiLFwi6au76ayG6ayY6aya6ayf6ayi6ayj6ayl6ayn6ayo6ayp6ayq6ayu6ayv6ayy6a2E6a2D6a2P6a2N6a2O6a2R6a2Y6a206a6T6a6D6a6R6a6W6a6X6a6f6a6g6a6o6a606a+A6a+K6a656a+G6a+P6a+R6a+S6a+j6a+i6a+k6a+U6a+h6bC66a+y6a+x6a+w6bCV6bCU6bCJ6bCT6bCM6bCG6bCI6bCS6bCK6bCE6bCu6bCb6bCl6bCk6bCh6bCw6bGH6bCy6bGG6bC+6bGa6bGg6bGn6bG26bG46bOn6bOs6bOw6bSJ6bSI6bOr6bSD6bSG6bSq6bSm6bav6bSj6bSf6bWE6bSV6bSS6bWB6bS/6bS+6bWG6bWIXCJdLFxuW1wiZjNhMVwiLFwi6bWd6bWe6bWk6bWR6bWQ6bWZ6bWy6baJ6baH6bar6bWv6bW66baa6bak6bap6bay6beE6beB6ba76ba46ba66beG6beP6beC6beZ6beT6be46bem6bet6bev6be96bia6bib6bie6bm16bm56bm96bqB6bqI6bqL6bqM6bqS6bqV6bqR6bqd6bql6bqp6bq46bqq6bqt6Z2h6buM6buO6buP6buQ6buU6buc6bue6bud6bug6bul6buo6buv6bu06bu26bu36bu56bu76bu86bu96byH6byI55q36byV6byh6bys6by+6b2K6b2S6b2U6b2j6b2f6b2g6b2h6b2m6b2n6b2s6b2q6b236b2y6b226b6V6b6c6b6gXCJdLFxuW1wiZjRhMVwiLFwi5aCv5qeH6YGZ55Gk5Yec54aZXCJdLFxuW1wiZjlhMVwiLFwi57qK6KSc6Y2I6YqI6JOc5L+J54K75pix5qOI6Yu55pu75b2F5Lio5Luh5Lu85LyA5LyD5Ly55L2W5L6S5L6K5L6a5L6U5L+N5YGA5YCi5L+/5YCe5YGG5YGw5YGC5YKU5YO05YOY5YWK5YWk5Yad5Ya+5Yes5YiV5Yqc5Yqm5YuA5Yub5YyA5YyH5Yyk5Y2y5Y6T5Y6y5Y+d76iO5ZKc5ZKK5ZKp5ZO/5ZaG5Z2Z5Z2l5Z6s5Z+I5Z+H76iP76iQ5aKe5aKy5aSL5aWT5aWb5aWd5aWj5aak5aa65a2W5a+A55Sv5a+Y5a+s5bCe5bKm5bK65bO15bSn5bWT76iR5bWC5bWt5ba45ba55beQ5byh5by05b2n5b63XCJdLFxuW1wiZmFhMVwiLFwi5b+e5oGd5oKF5oKK5oOe5oOV5oSg5oOy5oSR5oS35oSw5oaY5oiT5oqm5o+15pGg5pKd5pOO5pWO5piA5piV5pi75piJ5piu5pie5pik5pml5pmX5pmZ76iS5pmz5pqZ5pqg5pqy5pq/5pu65pyO76Sp5p2m5p675qGS5p+A5qCB5qGE5qOP76iT5qWo76iU5qaY5qei5qiw5qmr5qmG5qmz5qm+5qui5quk5q+W5rC/5rGc5rKG5rGv5rOa5rSE5raH5rWv5raW5ras5reP5re45rey5re85ri55rmc5rin5ri85rq/5r6I5r615r+154CF54CH54Co54KF54Kr54SP54SE54Wc54WG54WH76iV54eB54e+54qxXCJdLFxuW1wiZmJhMVwiLFwi54q+54yk76iW5423546954+J54+W54+j54+S55CH54+155Cm55Cq55Cp55Cu55Gi55KJ55Kf55SB55Wv55qC55qc55qe55qb55qm76iX552G5Yqv56Ch56GO56Gk56G656Sw76iY76iZ76ia56aU76ib56ab56uR56un76ic56ur566e76id57WI57Wc57a357ag57eW57mS572H576h76ie6IyB6I2i6I2/6I+H6I+26JGI6JK06JWT6JWZ6JWr76if6Jaw76ig76ih6KCH6KO16KiS6Ki36Km56Kqn6Kq+6Kuf76ii6Ku26K2T6K2/6LOw6LO06LSS6LW276ij6LuP76ik76il6YGn6YOe76im6YSV6YSn6YeaXCJdLFxuW1wiZmNhMVwiLFwi6YeX6Yee6Yet6Yeu6Yek6Yel6YiG6YiQ6YiK6Yi66YmA6Yi86YmO6YmZ6YmR6Yi56Ymn6Yqn6Ym36Ym46Yun6YuX6YuZ6YuQ76in6YuV6Yug6YuT6Yyl6Yyh6Yu776io6Yye6Yu/6Yyd6YyC6Y2w6Y2X6Y6k6Y+G6Y+e6Y+46ZCx6ZGF6ZGI6ZaS76ec76ip6Zqd6Zqv6Zyz6Zy76Z2D6Z2N6Z2P6Z2R6Z2V6aGX6aGl76iq76ir6aSn76is6aae6amO6auZ6auc6a216a2y6a6P6a6x6a676bCA6bWw6bWr76it6biZ6buRXCJdLFxuW1wiZmNmMVwiLFwi4oWwXCIsOSxcIu+/ou+/pO+8h++8glwiXSxcbltcIjhmYTJhZlwiLFwiy5jLh8K4y5nLncKvy5vLmu+9ns6EzoVcIl0sXG5bXCI4ZmEyYzJcIixcIsKhwqbCv1wiXSxcbltcIjhmYTJlYlwiLFwiwrrCqsKpwq7ihKLCpOKEllwiXSxcbltcIjhmYTZlMVwiLFwizobOiM6JzorOqlwiXSxcbltcIjhmYTZlN1wiLFwizoxcIl0sXG5bXCI4ZmE2ZTlcIixcIs6OzqtcIl0sXG5bXCI4ZmE2ZWNcIixcIs6PXCJdLFxuW1wiOGZhNmYxXCIsXCLOrM6tzq7Or8+KzpDPjM+Cz43Pi86wz45cIl0sXG5bXCI4ZmE3YzJcIixcItCCXCIsMTAsXCLQjtCPXCJdLFxuW1wiOGZhN2YyXCIsXCLRklwiLDEwLFwi0Z7Rn1wiXSxcbltcIjhmYTlhMVwiLFwiw4bEkFwiXSxcbltcIjhmYTlhNFwiLFwixKZcIl0sXG5bXCI4ZmE5YTZcIixcIsSyXCJdLFxuW1wiOGZhOWE4XCIsXCLFgcS/XCJdLFxuW1wiOGZhOWFiXCIsXCLFisOYxZJcIl0sXG5bXCI4ZmE5YWZcIixcIsWmw55cIl0sXG5bXCI4ZmE5YzFcIixcIsOmxJHDsMSnxLHEs8S4xYLFgMWJxYvDuMWTw5/Fp8O+XCJdLFxuW1wiOGZhYWExXCIsXCLDgcOAw4TDgsSCx43EgMSEw4XDg8SGxIjEjMOHxIrEjsOJw4jDi8OKxJrElsSSxJhcIl0sXG5bXCI4ZmFhYmFcIixcIsScxJ7EosSgxKTDjcOMw4/DjsePxLDEqsSuxKjEtMS2xLnEvcS7xYPFh8WFw5HDk8OSw5bDlMeRxZDFjMOVxZTFmMWWxZrFnMWgxZ7FpMWiw5rDmcOcw5vFrMeTxbDFqsWyxa7FqMeXx5vHmceVxbTDncW4xbbFucW9xbtcIl0sXG5bXCI4ZmFiYTFcIixcIsOhw6DDpMOixIPHjsSBxIXDpcOjxIfEicSNw6fEi8SPw6nDqMOrw6rEm8SXxJPEmce1xJ3En1wiXSxcbltcIjhmYWJiZFwiLFwixKHEpcOtw6zDr8Oux5BcIl0sXG5bXCI4ZmFiYzVcIixcIsSrxK/EqcS1xLfEusS+xLzFhMWIxYbDscOzw7LDtsO0x5LFkcWNw7XFlcWZxZfFm8WdxaHFn8WlxaPDusO5w7zDu8Wtx5TFscWrxbPFr8Wpx5jHnMeax5bFtcO9w7/Ft8W6xb7FvFwiXSxcbltcIjhmYjBhMVwiLFwi5LiC5LiE5LiF5LiM5LiS5Lif5Lij5Lik5Lio5Lir5Liu5Liv5Liw5Li15LmA5LmB5LmE5LmH5LmR5Lma5Lmc5Lmj5Lmo5Lmp5Lm05Lm15Lm55Lm/5LqN5LqW5LqX5Lqd5Lqv5Lq55LuD5LuQ5Lua5Lub5Lug5Luh5Lui5Luo5Luv5Lux5Luz5Lu15Lu95Lu+5Lu/5LyA5LyC5LyD5LyI5LyL5LyM5LyS5LyV5LyW5LyX5LyZ5Lyu5Lyx5L2g5Lyz5Ly15Ly35Ly55Ly75Ly+5L2A5L2C5L2I5L2J5L2L5L2M5L2S5L2U5L2W5L2Y5L2f5L2j5L2q5L2s5L2u5L2x5L235L245L255L265L295L2+5L6B5L6C5L6EXCJdLFxuW1wiOGZiMWExXCIsXCLkvoXkvonkvorkvozkvo7kvpDkvpLkvpPkvpTkvpfkvpnkvprkvp7kvp/kvrLkvrfkvrnkvrvkvrzkvr3kvr7kv4Dkv4Hkv4Xkv4bkv4jkv4nkv4vkv4zkv43kv4/kv5Lkv5zkv6Dkv6Lkv7Dkv7Lkv7zkv73kv7/lgIDlgIHlgITlgIflgIrlgIzlgI7lgJDlgJPlgJflgJjlgJvlgJzlgJ3lgJ7lgKLlgKflgK7lgLDlgLLlgLPlgLXlgYDlgYHlgYLlgYXlgYblgYrlgYzlgY7lgZHlgZLlgZPlgZflgZnlgZ/lgaDlgaLlgaPlgablgaflgarlga3lgbDlgbHlgLvlgoHlgoPlgoTlgoblgorlgo7lgo/lgpBcIl0sXG5bXCI4ZmIyYTFcIixcIuWCkuWCk+WClOWCluWCm+WCnOWCnlwiLDQsXCLlgqrlgq/lgrDlgrnlgrrlgr3lg4Dlg4Plg4Tlg4flg4zlg47lg5Dlg5Plg5Tlg5jlg5zlg53lg5/lg6Llg6Tlg6blg6jlg6nlg6/lg7Hlg7blg7rlg77lhIPlhIblhIflhIjlhIvlhIzlhI3lhI7lg7LlhJDlhJflhJnlhJvlhJzlhJ3lhJ7lhKPlhKflhKjlhKzlhK3lhK/lhLHlhLPlhLTlhLXlhLjlhLnlhYLlhYrlhY/lhZPlhZXlhZflhZjlhZ/lhaTlhablhb7lhoPlhoTlhovlho7lhpjlhp3lhqHlhqPlhq3lhrjlhrrlhrzlhr7lhr/lh4JcIl0sXG5bXCI4ZmIzYTFcIixcIuWHiOWHj+WHkeWHkuWHk+WHleWHmOWHnuWHouWHpeWHruWHsuWHs+WHtOWHt+WIgeWIguWIheWIkuWIk+WIleWIluWImOWIouWIqOWIseWIsuWIteWIvOWJheWJieWJleWJl+WJmOWJmuWJnOWJn+WJoOWJoeWJpuWJruWJt+WJuOWJueWKgOWKguWKheWKiuWKjOWKk+WKleWKluWKl+WKmOWKmuWKnOWKpOWKpeWKpuWKp+WKr+WKsOWKtuWKt+WKuOWKuuWKu+WKveWLgOWLhOWLhuWLiOWLjOWLj+WLkeWLlOWLluWLm+WLnOWLoeWLpeWLqOWLqeWLquWLrOWLsOWLseWLtOWLtuWLt+WMgOWMg+WMiuWMi1wiXSxcbltcIjhmYjRhMVwiLFwi5YyM5YyR5YyT5YyY5Yyb5Yyc5Yye5Yyf5Yyl5Yyn5Yyo5Yyp5Yyr5Yys5Yyt5Yyw5Yyy5Yy15Yy85Yy95Yy+5Y2C5Y2M5Y2L5Y2Z5Y2b5Y2h5Y2j5Y2l5Y2s5Y2t5Y2y5Y255Y2+5Y6D5Y6H5Y6I5Y6O5Y6T5Y6U5Y6Z5Y6d5Y6h5Y6k5Y6q5Y6r5Y6v5Y6y5Y605Y615Y635Y645Y665Y695Y+A5Y+F5Y+P5Y+S5Y+T5Y+V5Y+a5Y+d5Y+e5Y+g5Y+m5Y+n5Y+15ZCC5ZCT5ZCa5ZCh5ZCn5ZCo5ZCq5ZCv5ZCx5ZC05ZC15ZGD5ZGE5ZGH5ZGN5ZGP5ZGe5ZGi5ZGk5ZGm5ZGn5ZGp5ZGr5ZGt5ZGu5ZG05ZG/XCJdLFxuW1wiOGZiNWExXCIsXCLlkoHlkoPlkoXlkojlkonlko3lkpHlkpXlkpblkpzlkp/lkqHlkqblkqflkqnlkqrlkq3lkq7lkrHlkrflkrnlkrrlkrvlkr/lk4blk4rlk43lk47lk6Dlk6rlk6zlk6/lk7blk7zlk77lk7/llIDllIHllIXllIjllInllIzllI3llI7llJXllKrllKvllLLllLXllLbllLvllLzllL3llYHllYfllYnllYrllY3llZDllZHllZjllZrllZvllZ7llaDllaHllaTllabllb/lloHlloLllobllojllo7llo/llpHllpLllpPllpTllpfllqPllqTllq3llrLllr/ll4Hll4Pll4bll4nll4vll4zll47ll5Hll5JcIl0sXG5bXCI4ZmI2YTFcIixcIuWXk+WXl+WXmOWXm+WXnuWXouWXqeWXtuWXv+WYheWYiOWYiuWYjVwiLDUsXCLlmJnlmKzlmLDlmLPlmLXlmLflmLnlmLvlmLzlmL3lmL/lmYDlmYHlmYPlmYTlmYblmYnlmYvlmY3lmY/lmZTlmZ7lmaDlmaHlmaLlmaPlmablmanlma3lma/lmbHlmbLlmbXlmoTlmoXlmojlmovlmozlmpXlmpnlmprlmp3lmp7lmp/lmqblmqflmqjlmqnlmqvlmqzlmq3lmrHlmrPlmrflmr7lm4Xlm4nlm4rlm4vlm4/lm5Dlm4zlm43lm5nlm5zlm53lm5/lm6Hlm6RcIiw0LFwi5Zux5Zur5ZutXCJdLFxuW1wiOGZiN2ExXCIsXCLlm7blm7flnIHlnILlnIflnIrlnIzlnJHlnJXlnJrlnJvlnJ3lnKDlnKLlnKPlnKTlnKXlnKnlnKrlnKzlnK7lnK/lnLPlnLTlnL3lnL7lnL/lnYXlnYblnYzlnY3lnZLlnaLlnaXlnaflnajlnavlna1cIiw0LFwi5Z2z5Z205Z215Z235Z255Z265Z275Z285Z2+5Z6B5Z6D5Z6M5Z6U5Z6X5Z6Z5Z6a5Z6c5Z6d5Z6e5Z6f5Z6h5Z6V5Z6n5Z6o5Z6p5Z6s5Z645Z695Z+H5Z+I5Z+M5Z+P5Z+V5Z+d5Z+e5Z+k5Z+m5Z+n5Z+p5Z+t5Z+w5Z+15Z+25Z+45Z+95Z++5Z+/5aCD5aCE5aCI5aCJ5Z+hXCJdLFxuW1wiOGZiOGExXCIsXCLloIzloI3loJvloJ7loJ/loKDloKbloKfloK3loLLloLnloL/loYnloYzloY3loY/loZDloZXloZ/loaHloaTloafloajlobjlobzlob/looDlooHloofloojloonloorloozloo3loo/lopDlopTlopblop3loqDloqHloqLloqbloqnlorHlorLlo4Tlorzlo4Llo4jlo43lo47lo5Dlo5Llo5Tlo5blo5rlo53lo6Hlo6Llo6nlo7PlpIXlpIblpIvlpIzlpJLlpJPlpJTomYHlpJ3lpKHlpKPlpKTlpKjlpK/lpLDlpLPlpLXlpLblpL/lpYPlpYblpZLlpZPlpZnlpZvlpZ3lpZ7lpZ/lpaHlpaPlpavlpa1cIl0sXG5bXCI4ZmI5YTFcIixcIuWlr+WlsuWlteWltuWlueWlu+WlvOWmi+WmjOWmjuWmkuWmleWml+Wmn+WmpOWmp+WmreWmruWmr+WmsOWms+Wmt+WmuuWmvOWngeWng+WnhOWniOWniuWnjeWnkuWnneWnnuWnn+Wno+WnpOWnp+WnruWnr+WnseWnsuWntOWnt+WogOWohOWojOWojeWojuWokuWok+WonuWoo+WopOWop+WoqOWoquWoreWosOWphOWpheWph+WpiOWpjOWpkOWpleWpnuWpo+WppeWpp+WpreWpt+WpuuWpu+WpvuWqi+WqkOWqk+WqluWqmeWqnOWqnuWqn+WqoOWqouWqp+WqrOWqseWqsuWqs+WqteWquOWquuWqu+Wqv1wiXSxcbltcIjhmYmFhMVwiLFwi5auE5auG5auI5auP5aua5auc5aug5aul5auq5auu5au15au25au95ayA5ayB5ayI5ayX5ay05ayZ5ayb5ayd5ayh5ayl5ayt5ay45a2B5a2L5a2M5a2S5a2W5a2e5a2o5a2u5a2v5a285a295a2+5a2/5a6B5a6E5a6G5a6K5a6O5a6Q5a6R5a6T5a6U5a6W5a6o5a6p5a6s5a6t5a6v5a6x5a6y5a635a665a685a+A5a+B5a+N5a+P5a+WXCIsNCxcIuWvoOWvr+WvseWvtOWvveWwjOWwl+WwnuWwn+Wwo+WwpuWwqeWwq+WwrOWwruWwsOWwsuWwteWwtuWxmeWxmuWxnOWxouWxo+Wxp+WxqOWxqVwiXSxcbltcIjhmYmJhMVwiLFwi5bGt5bGw5bG05bG15bG65bG75bG85bG95bKH5bKI5bKK5bKP5bKS5bKd5bKf5bKg5bKi5bKj5bKm5bKq5bKy5bK05bK15bK65bOJ5bOL5bOS5bOd5bOX5bOu5bOx5bOy5bO05bSB5bSG5bSN5bSS5bSr5bSj5bSk5bSm5bSn5bSx5bS05bS55bS95bS/5bWC5bWD5bWG5bWI5bWV5bWR5bWZ5bWK5bWf5bWg5bWh5bWi5bWk5bWq5bWt5bWw5bW55bW65bW+5bW/5baB5baD5baI5baK5baS5baT5baU5baV5baZ5bab5baf5bag5ban5bar5baw5ba05ba45ba55beD5beH5beL5beQ5beO5beY5beZ5beg5bekXCJdLFxuW1wiOGZiY2ExXCIsXCLlt6nlt7jlt7nluIDluIfluI3luJLluJTluJXluJjluJ/luKDluK7luKjluLLluLXluL7luYvluZDluYnluZHluZbluZjluZvluZzluZ7luajluapcIiw0LFwi5bmw5bqA5bqL5bqO5bqi5bqk5bql5bqo5bqq5bqs5bqx5bqz5bq95bq+5bq/5buG5buM5buL5buO5buR5buS5buU5buV5buc5bue5bul5bur5byC5byG5byH5byI5byO5byZ5byc5byd5byh5byi5byj5byk5byo5byr5bys5byu5byw5by05by25by75by95by/5b2A5b2E5b2F5b2H5b2N5b2Q5b2U5b2Y5b2b5b2g5b2j5b2k5b2nXCJdLFxuW1wiOGZiZGExXCIsXCLlva/lvbLlvbTlvbXlvbjlvbrlvb3lvb7lvonlvo3lvo/lvpblvpzlvp3lvqLlvqflvqvlvqTlvqzlvq/lvrDlvrHlvrjlv4Tlv4flv4jlv4nlv4vlv5BcIiw0LFwi5b+e5b+h5b+i5b+o5b+p5b+q5b+s5b+t5b+u5b+v5b+y5b+z5b+25b+65b+85oCH5oCK5oCN5oCT5oCU5oCX5oCY5oCa5oCf5oCk5oCt5oCz5oC15oGA5oGH5oGI5oGJ5oGM5oGR5oGU5oGW5oGX5oGd5oGh5oGn5oGx5oG+5oG/5oKC5oKG5oKI5oKK5oKO5oKR5oKT5oKV5oKY5oKd5oKe5oKi5oKk5oKl5oKo5oKw5oKx5oK3XCJdLFxuW1wiOGZiZWExXCIsXCLmgrvmgr7mg4Lmg4Tmg4jmg4nmg4rmg4vmg47mg4/mg5Tmg5Xmg5nmg5vmg53mg57mg6Lmg6Xmg7Lmg7Xmg7jmg7zmg73mhILmhIfmhIrmhIzmhJBcIiw0LFwi5oSW5oSX5oSZ5oSc5oSe5oSi5oSq5oSr5oSw5oSx5oS15oS25oS35oS55oWB5oWF5oWG5oWJ5oWe5oWg5oWs5oWy5oW45oW75oW85oW/5oaA5oaB5oaD5oaE5oaL5oaN5oaS5oaT5oaX5oaY5oac5oad5oaf5oag5oal5oao5oaq5oat5oa45oa55oa85oeA5oeB5oeC5oeO5oeP5oeV5oec5oed5oee5oef5oeh5oei5oen5oep5oelXCJdLFxuW1wiOGZiZmExXCIsXCLmh6zmh63mh6/miIHmiIPmiITmiIfmiJPmiJXmiJzmiKDmiKLmiKPmiKfmiKnmiKvmiLnmiL3miYLmiYPmiYTmiYbmiYzmiZDmiZHmiZLmiZTmiZbmiZrmiZzmiaTmia3mia/mibPmibrmib3mio3mio7mio/mipDmiqbmiqjmirPmirbmirfmirrmir7mir/mi4Tmi47mi5Xmi5bmi5rmi6rmi7Lmi7Tmi7zmi73mjIPmjITmjIrmjIvmjI3mjJDmjJPmjJbmjJjmjKnmjKrmjK3mjLXmjLbmjLnmjLzmjYHmjYLmjYPmjYTmjYbmjYrmjYvmjY7mjZLmjZPmjZTmjZjmjZvmjaXmjabmjazmja3mjbHmjbTmjbVcIl0sXG5bXCI4ZmMwYTFcIixcIuaNuOaNvOaNveaNv+aOguaOhOaOh+aOiuaOkOaOlOaOleaOmeaOmuaOnuaOpOaOpuaOreaOruaOr+aOveaPgeaPheaPiOaPjuaPkeaPk+aPlOaPleaPnOaPoOaPpeaPquaPrOaPsuaPs+aPteaPuOaPueaQieaQiuaQkOaQkuaQlOaQmOaQnuaQoOaQouaQpOaQpeaQqeaQquaQr+aQsOaQteaQveaQv+aRi+aRj+aRkeaRkuaRk+aRlOaRmuaRm+aRnOaRneaRn+aRoOaRoeaRo+aRreaRs+aRtOaRu+aRveaSheaSh+aSj+aSkOaSkeaSmOaSmeaSm+aSneaSn+aSoeaSo+aSpuaSqOaSrOaSs+aSveaSvuaSv1wiXSxcbltcIjhmYzFhMVwiLFwi5pOE5pOJ5pOK5pOL5pOM5pOO5pOQ5pOR5pOV5pOX5pOk5pOl5pOp5pOq5pOt5pOw5pO15pO35pO75pO/5pSB5pSE5pSI5pSJ5pSK5pSP5pST5pSU5pSW5pSZ5pSb5pSe5pSf5pSi5pSm5pSp5pSu5pSx5pS65pS85pS95pWD5pWH5pWJ5pWQ5pWS5pWU5pWf5pWg5pWn5pWr5pW65pW95paB5paF5paK5paS5paV5paY5pad5pag5paj5pam5pau5pay5paz5pa05pa/5peC5peI5peJ5peO5peQ5peU5peW5peY5pef5pew5pey5pe05pe15pe55pe+5pe/5piA5piE5piI5piJ5piN5piR5piS5piV5piW5pidXCJdLFxuW1wiOGZjMmExXCIsXCLmmJ7mmKHmmKLmmKPmmKTmmKbmmKnmmKrmmKvmmKzmmK7mmLDmmLHmmLPmmLnmmLfmmYDmmYXmmYbmmYrmmYzmmZHmmY7mmZfmmZjmmZnmmZvmmZzmmaDmmaHmm7vmmarmmavmmazmmb7mmbPmmbXmmb/mmbfmmbjmmbnmmbvmmoDmmbzmmovmmozmmo3mmpDmmpLmmpnmmprmmpvmmpzmmp/mmqDmmqTmmq3mmrHmmrLmmrXmmrvmmr/mm4Dmm4Lmm4Pmm4jmm4zmm47mm4/mm5Tmm5vmm5/mm6jmm6vmm6zmm67mm7rmnIXmnIfmnI7mnJPmnJnmnJzmnKDmnKLmnLPmnL7mnYXmnYfmnYjmnYzmnZTmnZXmnZ1cIl0sXG5bXCI4ZmMzYTFcIixcIuadpuadrOadruadtOadtuadu+aegeaehOaejuaej+aekeaek+aeluaemOaemeaem+aesOaeseaesuaeteaeu+aevOaeveafueafgOafguafg+afheafiOafieafkuafl+afmeafnOafoeafpuafsOafsuaftuaft+ahkuaglOagmeagneagn+agqOagp+agrOagreagr+agsOagseags+agu+agv+ahhOahheahiuahjOahleahl+ahmOahm+ahq+ahrlwiLDQsXCLmobXmobnmobrmobvmobzmooLmooTmoobmoojmopbmopjmoprmopzmoqHmoqPmoqXmoqnmoqrmoq7morLmorvmo4Xmo4jmo4zmo49cIl0sXG5bXCI4ZmM0YTFcIixcIuajkOajkeajk+ajluajmeajnOajneajpeajqOajquajq+ajrOajreajsOajseajteajtuaju+ajvOajveakhuakieakiuakkOakkeakk+akluakl+akseaks+akteakuOaku+algualhealiealjuall+alm+alo+alpOalpealpualqOalqealrOalsOalsealsualuualu+alv+amgOamjeamkuamluammOamoeampeampuamqOamq+amreamr+amt+amuOamuuamvOanheaniOankeanluanl+anouanpeanruanr+anseans+anteanvuaogOaogeaog+aoj+aokeaoleaomuaoneaooOaopOaoqOaosOaoslwiXSxcbltcIjhmYzVhMVwiLFwi5qi05qi35qi75qi+5qi/5qmF5qmG5qmJ5qmK5qmO5qmQ5qmR5qmS5qmV5qmW5qmb5qmk5qmn5qmq5qmx5qmz5qm+5qqB5qqD5qqG5qqH5qqJ5qqL5qqR5qqb5qqd5qqe5qqf5qql5qqr5qqv5qqw5qqx5qq05qq95qq+5qq/5quG5quJ5quI5quM5quQ5quU5quV5quW5quc5qud5quk5qun5qus5quw5qux5quy5qu85qu95qyC5qyD5qyG5qyH5qyJ5qyP5qyQ5qyR5qyX5qyb5qye5qyk5qyo5qyr5qys5qyv5qy15qy25qy75qy/5q2G5q2K5q2N5q2S5q2W5q2Y5q2d5q2g5q2n5q2r5q2u5q2w5q215q29XCJdLFxuW1wiOGZjNmExXCIsXCLmrb7mroLmroXmrpfmrpvmrp/mrqDmrqLmrqPmrqjmrqnmrqzmrq3mrq7mrrDmrrjmrrnmrr3mrr7mr4Pmr4Tmr4nmr4zmr5bmr5rmr6Hmr6Pmr6bmr6fmr67mr7Hmr7fmr7nmr7/msILmsITmsIXmsInmsI3msI7msJDmsJLmsJnmsJ/msKbmsKfmsKjmsKzmsK7msLPmsLXmsLbmsLrmsLvmsL/msYrmsYvmsY3msY/msZLmsZTmsZnmsZvmsZzmsavmsa3msa/msbTmsbbmsbjmsbnmsbvmsoXmsobmsofmsonmspTmspXmspfmspjmspzmsp/msrDmsrLmsrTms4Lms4bms43ms4/ms5Dms5Hms5Lms5Tms5ZcIl0sXG5bXCI4ZmM3YTFcIixcIuazmuaznOazoOazp+azqeazq+azrOazruazsuaztOa0hOa0h+a0iua0jua0j+a0kea0k+a0mua0pua0p+a0qOaxp+a0rua0r+a0sea0uea0vOa0v+a1l+a1nua1n+a1oea1pea1p+a1r+a1sOa1vOa2gua2h+a2kea2kua2lOa2lua2l+a2mOa2qua2rOa2tOa2t+a2uea2vea2v+a3hOa3iOa3iua3jua3j+a3lua3m+a3nea3n+a3oOa3oua3pea3qea3r+a3sOa3tOa3tua3vOa4gOa4hOa4nua4oua4p+a4sua4tua4uea4u+a4vOa5hOa5hea5iOa5iea5i+a5j+a5kea5kua5k+a5lOa5l+a5nOa5nea5nlwiXSxcbltcIjhmYzhhMVwiLFwi5rmi5rmj5rmo5rmz5rm75rm95rqN5rqT5rqZ5rqg5rqn5rqt5rqu5rqx5rqz5rq75rq/5ruA5ruB5ruD5ruH5ruI5ruK5ruN5ruO5ruP5rur5rut5ruu5ru55ru75ru95ryE5ryI5ryK5ryM5ryN5ryW5ryY5rya5ryb5rym5ryp5ryq5ryv5ryw5ryz5ry25ry75ry85ryt5r2P5r2R5r2S5r2T5r2X5r2Z5r2a5r2d5r2e5r2h5r2i5r2o5r2s5r295r2+5r6D5r6H5r6I5r6L5r6M5r6N5r6Q5r6S5r6T5r6U5r6W5r6a5r6f5r6g5r6l5r6m5r6n5r6o5r6u5r6v5r6w5r615r625r685r+F5r+H5r+I5r+KXCJdLFxuW1wiOGZjOWExXCIsXCLmv5rmv57mv6jmv6nmv7Dmv7Xmv7nmv7zmv73ngIDngIXngIbngIfngI3ngJfngKDngKPngK/ngLTngLfngLnngLzngYPngYTngYjngYnngYrngYvngZTngZXngZ3ngZ7ngY7ngaTngaXngaznga7ngbXngbbngb7ngoHngoXngobngpRcIiw0LFwi54Kb54Kk54Kr54Kw54Kx54K054K354OK54OR54OT54OU54OV54OW54OY54Oc54Ok54O654SDXCIsNCxcIueEi+eEjOeEj+eEnueEoOeEq+eEreeEr+eEsOeEseeEuOeFgeeFheeFhueFh+eFiueFi+eFkOeFkueFl+eFmueFnOeFnueFoFwiXSxcbltcIjhmY2FhMVwiLFwi54Wo54W554aA54aF54aH54aM54aS54aa54ab54ag54ai54av54aw54ay54az54a654a/54eA54eB54eE54eL54eM54eT54eW54eZ54ea54ec54e454e+54iA54iH54iI54iJ54iT54iX54ia54id54if54ik54ir54iv54i054i454i554mB54mC54mD54mF54mO54mP54mQ54mT54mV54mW54ma54mc54me54mg54mj54mo54mr54mu54mv54mx54m354m454m754m854m/54qE54qJ54qN54qO54qT54qb54qo54qt54qu54qx54q054q+54uB54uH54uJ54uM54uV54uW54uY54uf54ul54uz54u054u654u7XCJdLFxuW1wiOGZjYmExXCIsXCLni77njILnjITnjIXnjIfnjIvnjI3njJLnjJPnjJjnjJnnjJ7njKLnjKTnjKfnjKjnjKznjLHnjLLnjLXnjLrnjLvnjL3njYPnjY3njZDnjZLnjZbnjZjnjZ3njZ7njZ/njaDnjabnjafnjannjavnjaznja7nja/njbHnjbfnjbnnjbznjoDnjoHnjoPnjoXnjobnjo7njpDnjpPnjpXnjpfnjpjnjpznjp7njp/njqDnjqLnjqXnjqbnjqrnjqvnjq3njrXnjrfnjrnnjrznjr3njr/nj4Xnj4bnj4nnj4vnj4znj4/nj5Lnj5Pnj5bnj5nnj53nj6Hnj6Pnj6bnj6fnj6nnj7Tnj7Xnj7fnj7nnj7rnj7vnj71cIl0sXG5bXCI4ZmNjYTFcIixcIuePv+eQgOeQgeeQhOeQh+eQiueQkeeQmueQm+eQpOeQpueQqFwiLDksXCLnkLnnkYDnkYPnkYTnkYbnkYfnkYvnkY3nkZHnkZLnkZfnkZ3nkaLnkabnkafnkajnkavnka3nka7nkbHnkbLnkoDnkoHnkoXnkobnkofnkonnko/nkpDnkpHnkpLnkpjnkpnnkprnkpznkp/nkqDnkqHnkqPnkqbnkqjnkqnnkqrnkqvnkq7nkq/nkrHnkrLnkrXnkrnnkrvnkr/nk4jnk4nnk4znk5Dnk5Pnk5jnk5rnk5vnk57nk5/nk6Tnk6jnk6rnk6vnk6/nk7Tnk7rnk7vnk7znk7/nlIZcIl0sXG5bXCI4ZmNkYTFcIixcIueUkueUlueUl+eUoOeUoeeUpOeUp+eUqeeUqueUr+eUtueUueeUveeUvueUv+eVgOeVg+eVh+eViOeVjueVkOeVkueVl+eVnueVn+eVoeeVr+eVseeVuVwiLDUsXCLnloHnloXnlpDnlpLnlpPnlpXnlpnnlpznlqLnlqTnlrTnlrrnlr/nl4Dnl4Hnl4Tnl4bnl4znl47nl4/nl5fnl5znl5/nl6Dnl6Hnl6Tnl6fnl6znl67nl6/nl7Hnl7nnmIDnmILnmIPnmITnmIfnmIjnmIrnmIznmI/nmJLnmJPnmJXnmJbnmJnnmJvnmJznmJ3nmJ7nmKPnmKXnmKbnmKnnmK3nmLLnmLPnmLXnmLjnmLlcIl0sXG5bXCI4ZmNlYTFcIixcIueYuueYvOeZiueZgOeZgeeZg+eZhOeZheeZieeZi+eZleeZmeeZn+eZpOeZpeeZreeZrueZr+eZseeZtOeageeaheeajOeajeealeeam+eanOeaneean+eaoOeaolwiLDYsXCLnmqrnmq3nmr3nm4Hnm4Xnm4nnm4vnm4znm47nm5Tnm5nnm6Dnm6bnm6jnm6znm7Dnm7Hnm7bnm7nnm7znnIDnnIbnnIrnnI7nnJLnnJTnnJXnnJfnnJnnnJrnnJznnKLnnKjnnK3nnK7nnK/nnLTnnLXnnLbnnLnnnL3nnL7nnYLnnYXnnYbnnYrnnY3nnY7nnY/nnZLnnZbnnZfnnZznnZ7nnZ/nnaDnnaJcIl0sXG5bXCI4ZmNmYTFcIixcIuedpOedp+edquedrOedsOedsueds+edtOeduuedveeegOeehOeejOeejeeelOeeleeelueemueen+eeoueep+eequeerueer+eeseeeteeevuefg+efieefkeefkuefleefmeefnuefn+efoOefpOefpuefquefrOefsOefseeftOefuOefu+egheeghuegieegjeegjuegkeegneegoeegouego+egreegruegsOegteegt+ehg+ehhOehh+ehiOehjOehjuehkuehnOehnuehoOehoeeho+ehpOehqOehquehruehuuehvueiiueij+eilOeimOeioeeineeinuein+eipOeiqOeirOeireeisOeiseeisueis1wiXSxcbltcIjhmZDBhMVwiLFwi56K756K956K/56OH56OI56OJ56OM56OO56OS56OT56OV56OW56Ok56Ob56Of56Og56Oh56Om56Oq56Oy56Oz56SA56O256O356O656O756O/56SG56SM56SQ56Sa56Sc56Se56Sf56Sg56Sl56Sn56Sp56St56Sx56S056S156S756S956S/56WE56WF56WG56WK56WL56WP56WR56WU56WY56Wb56Wc56Wn56Wp56Wr56Wy56W556W756W856W+56aL56aM56aR56aT56aU56aV56aW56aY56ab56ac56ah56ao56ap56ar56av56ax56a056a456a756eC56eE56eH56eI56eK56eP56eU56eW56ea56ed56eeXCJdLFxuW1wiOGZkMWExXCIsXCLnp6Dnp6Lnp6Xnp6rnp6vnp63np7Hnp7jnp7znqILnqIPnqIfnqInnqIrnqIznqJHnqJXnqJvnqJ7nqKHnqKfnqKvnqK3nqK/nqLDnqLTnqLXnqLjnqLnnqLrnqYTnqYXnqYfnqYjnqYznqZXnqZbnqZnnqZznqZ3nqZ/nqaDnqaXnqafnqarnqa3nqbXnqbjnqb7nqoDnqoLnqoXnqobnqornqovnqpDnqpHnqpTnqp7nqqDnqqPnqqznqrPnqrXnqrnnqrvnqrznq4bnq4nnq4znq47nq5Hnq5vnq6jnq6nnq6vnq6znq7Hnq7Tnq7vnq73nq77nrIfnrJTnrJ/nrKPnrKfnrKnnrKrnrKvnrK3nrK7nrK/nrLBcIl0sXG5bXCI4ZmQyYTFcIixcIuesseestOesveesv+etgOetgeeth+etjuetleetoOetpOetpuetqeetquetreetr+etsuets+ett+euhOeuieeujueukOeukeeulueum+eunueuoOeupeeurOeur+eusOeusueuteeutueuuueuu+euvOeuveevguevheeviOeviuevlOevluevl+evmeevmuevm+evqOevquevsuevtOevteevuOevueevuuevvOevvuewgeewguewg+ewhOewhuewieewi+ewjOewjuewj+ewmeewm+ewoOewpeewpuewqOewrOewseews+ewtOewtuewueewuuexhuexiuexleexkeexkuexk+exmVwiLDVdLFxuW1wiOGZkM2ExXCIsXCLnsaHnsaPnsafnsannsa3nsa7nsbDnsbLnsbnnsbznsb3nsobnsofnso/nspTnsp7nsqDnsqbnsrDnsrbnsrfnsrrnsrvnsrznsr/ns4Tns4fns4jns4nns43ns4/ns5Pns5Tns5Xns5fns5nns5rns53ns6bns6nns6vns7XntIPntIfntIjntInntI/ntJHntJLntJPntJbntJ3ntJ7ntKPntKbntKrntK3ntLHntLzntL3ntL7ntYDntYHntYfntYjntY3ntZHntZPntZfntZnntZrntZzntZ3ntaXntafntarntbDntbjntbrntbvntb/ntoHntoLntoPntoXntobntojntovntoznto3ntpHntpbntpfntp1cIl0sXG5bXCI4ZmQ0YTFcIixcIue2nue2pue2p+e2que2s+e2tue2t+e2uee3glwiLDQsXCLnt4znt43nt47nt5fnt5nnuIDnt6Lnt6Xnt6bnt6rnt6vnt63nt7Hnt7Xnt7bnt7nnt7rnuIjnuJDnuJHnuJXnuJfnuJznuJ3nuKDnuKfnuKjnuKznuK3nuK/nuLPnuLbnuL/nuYTnuYXnuYfnuY7nuZDnuZLnuZjnuZ/nuaHnuaLnuaXnuavnua7nua/nubPnubjnub7nuoHnuobnuofnuornuo3nupHnupXnupjnuprnup3nup7nvLznvLvnvL3nvL7nvL/nvYPnvYTnvYfnvY/nvZLnvZPnvZvnvZznvZ3nvaHnvaPnvaTnvaXnvabnva1cIl0sXG5bXCI4ZmQ1YTFcIixcIue9see9vee9vue9v+e+gOe+i+e+jee+j+e+kOe+kee+lue+l+e+nOe+oee+oue+pue+que+ree+tOe+vOe+v+e/gOe/g+e/iOe/jue/j+e/m+e/n+e/o+e/pee/qOe/rOe/rue/r+e/sue/uue/vee/vue/v+iAh+iAiOiAiuiAjeiAjuiAj+iAkeiAk+iAlOiAluiAneiAnuiAn+iAoOiApOiApuiArOiAruiAsOiAtOiAteiAt+iAueiAuuiAvOiAvuiBgOiBhOiBoOiBpOiBpuiBreiBseiBteiCgeiCiOiCjuiCnOiCnuiCpuiCp+iCq+iCuOiCueiDiOiDjeiDj+iDkuiDlOiDleiDl+iDmOiDoOiDreiDrlwiXSxcbltcIjhmZDZhMVwiLFwi6IOw6IOy6IOz6IO26IO56IO66IO+6ISD6ISL6ISW6ISX6ISY6ISc6ISe6ISg6ISk6ISn6ISs6ISw6IS16IS66IS86IWF6IWH6IWK6IWM6IWS6IWX6IWg6IWh6IWn6IWo6IWp6IWt6IWv6IW36IaB6IaQ6IaE6IaF6IaG6IaL6IaO6IaW6IaY6Iab6Iae6Iai6Iau6Iay6Ia06Ia76IeL6IeD6IeF6IeK6IeO6IeP6IeV6IeX6Ieb6Ied6Iee6Ieh6Iek6Ier6Ies6Iew6Iex6Iey6Ie16Ie26Ie46Ie56Ie96Ie/6IiA6IiD6IiP6IiT6IiU6IiZ6Iia6Iid6Iih6Iii6Iio6Iiy6Ii06Ii66ImD6ImE6ImF6ImGXCJdLFxuW1wiOGZkN2ExXCIsXCLoiYvoiY7oiY/oiZHoiZboiZzoiaDoiaPoiafoia3oibToibvoib3oib/oioDoioHoioPoioToiofoionoioroio7oipHoipToipboipjoiproipvoiqDoiqHoiqPoiqToiqfoiqjoiqnoiqroiq7oirDoirLoirToirfoirroirzoir7oir/oi4boi5Doi5Xoi5roi6Doi6Loi6Toi6joi6roi63oi6/oi7boi7foi73oi77ojIDojIHojIfojIjojIrojIvojZTojJvojJ3ojJ7ojJ/ojKHojKLojKzojK3ojK7ojLDojLPojLfojLrojLzojL3ojYLojYPojYTojYfojY3ojY7ojZHojZXojZbojZfojbDojbhcIl0sXG5bXCI4ZmQ4YTFcIixcIuiNveiNv+iOgOiOguiOhOiOhuiOjeiOkuiOlOiOleiOmOiOmeiOm+iOnOiOneiOpuiOp+iOqeiOrOiOvuiOv+iPgOiPh+iPieiPj+iPkOiPkeiPlOiPneiNk+iPqOiPquiPtuiPuOiPueiPvOiQgeiQhuiQiuiQj+iQkeiQleiQmeiOreiQr+iQueiRheiRh+iRiOiRiuiRjeiRj+iRkeiRkuiRluiRmOiRmeiRmuiRnOiRoOiRpOiRpeiRp+iRquiRsOiRs+iRtOiRtuiRuOiRvOiRveiSgeiSheiSkuiSk+iSleiSnuiSpuiSqOiSqeiSquiSr+iSseiStOiSuuiSveiSvuiTgOiTguiTh+iTiOiTjOiTj+iTk1wiXSxcbltcIjhmZDlhMVwiLFwi6JOc6JOn6JOq6JOv6JOw6JOx6JOy6JO36JSy6JO66JO76JO96JSC6JSD6JSH6JSM6JSO6JSQ6JSc6JSe6JSi6JSj6JSk6JSl6JSn6JSq6JSr6JSv6JSz6JS06JS26JS/6JWG6JWPXCIsNCxcIuiVluiVmeiVnFwiLDYsXCLolaTolavola/olbnolbrolbvolb3olb/oloHoloXolobolonolovolozolo/olpPolpjolp3olp/olqDolqLolqXolqfolrTolrbolrfolrjolrzolr3olr7olr/ol4Lol4fol4rol4vol47olq3ol5jol5rol5/ol6Dol6bol6jol63ol7Pol7bol7xcIl0sXG5bXCI4ZmRhYTFcIixcIuiXv+iYgOiYhOiYheiYjeiYjuiYkOiYkeiYkuiYmOiYmeiYm+iYnuiYoeiYp+iYqeiYtuiYuOiYuuiYvOiYveiZgOiZguiZhuiZkuiZk+iZluiZl+iZmOiZmeiZneiZoFwiLDQsXCLomanomazoma/ombXombbombfombromo3ompHompbompjomprompzomqHomqbomqfomqjomq3omrHomrPomrTomrXomrfomrjomrnomr/om4Dom4Hom4Pom4Xom5Hom5Lom5Xom5fom5rom5zom6Dom6Pom6Xom6fomojom7rom7zom73onITonIXonIfonIvonI7onI/onJDonJPonJTonJnonJ7onJ/onKHonKNcIl0sXG5bXCI4ZmRiYTFcIixcIuicqOicruicr+icseicsuicueicuuicvOicveicvuidgOidg+idheidjeidmOidneidoeidpOidpeidr+idseidsuidu+ieg1wiLDYsXCLonovonozonpDonpPonpXonpfonpjonpnonp7onqDonqPonqfonqzonq3onq7onrHonrXonr7onr/on4Hon4jon4non4ron47on5Xon5bon5non5ron5zon5/on6Lon6Pon6Ton6ron6von63on7Hon7Pon7jon7ron7/ooIHooIPooIbooInooIrooIvooJDooJnooJLooJPooJTooJjooJrooJvooJzooJ7ooJ/ooKjooK3ooK7ooLDooLLooLVcIl0sXG5bXCI4ZmRjYTFcIixcIuiguuigvOihgeihg+ihheihiOihieihiuihi+ihjuihkeihleihluihmOihmuihnOihn+ihoOihpOihqeihseihueihu+iigOiimOiimuiim+iinOiin+iioOiiqOiiquiiuuiiveiivuijgOijilwiLDQsXCLoo5Hoo5Loo5Poo5voo57oo6foo6/oo7Doo7Hoo7Xoo7fopIHopIbopI3opI7opI/opJXopJbopJjopJnopJropJzopKDopKbopKfopKjopLDopLHopLLopLXopLnopLropL7opYDopYLopYXopYbopYnopY/opZLopZfopZropZvopZzopaHopaLopaPopavopa7opbDopbPopbXopbpcIl0sXG5bXCI4ZmRkYTFcIixcIuilu+ilvOilveimieimjeimkOimlOimleimm+imnOimn+imoOimpeimsOimtOimteimtuimt+imvOinlFwiLDQsXCLop6Xop6nop6vop63op7Hop7Pop7bop7nop73op7/oqIToqIXoqIfoqI/oqJHoqJLoqJToqJXoqJ7oqKDoqKLoqKToqKboqKvoqKzoqK/oqLXoqLfoqL3oqL7oqYDoqYPoqYXoqYfoqYnoqY3oqY7oqZPoqZboqZfoqZjoqZzoqZ3oqaHoqaXoqafoqbXoqbboqbfoqbnoqbroqbvoqb7oqb/oqoDoqoPoqoboqovoqo/oqpDoqpLoqpboqpfoqpnoqp/oqqfoqqnoqq7oqq/oqrNcIl0sXG5bXCI4ZmRlYTFcIixcIuiqtuiqt+iqu+iqvuirg+irhuiriOirieiriuirkeirk+irlOirleirl+irneirn+irrOirsOirtOirteirtuirvOirv+isheishuisi+iskeisnOisnuisn+isiuisreissOist+isvOitglwiLDQsXCLorYjorZLorZPorZTorZnorY3orZ7oraPora3orbborbjorbnorbzorb7oroHoroToroXorovoro3oro/orpTorpXorpzorp7orp/osLjosLnosL3osL7osYXosYfosYnosYvosY/osZHosZPosZTosZfosZjosZvosZ3osZnosaPosaTosabosajosanosa3osbPosbXosbbosbvosb7osoZcIl0sXG5bXCI4ZmRmYTFcIixcIuiyh+iyi+iykOiykuiyk+iymeiym+iynOiypOiyueiyuuizheizhuizieizi+izj+izluizleizmeizneizoeizqOizrOizr+izsOizsuizteizt+izuOizvuizv+i0gei0g+i0iei0kui0l+i0m+i1pei1qei1rOi1rui1v+i2gui2hOi2iOi2jei2kOi2kei2lei2nui2n+i2oOi2pui2q+i2rOi2r+i2sui2tei2t+i2uei2u+i3gOi3hei3hui3h+i3iOi3iui3jui3kei3lOi3lei3l+i3mei3pOi3pei3p+i3rOi3sOi2vOi3sei3sui3tOi3vei4gei4hOi4hei4hui4i+i4kei4lOi4lui4oOi4oei4olwiXSxcbltcIjhmZTBhMVwiLFwi6Lij6Lim6Lin6Lix6Liz6Li26Li36Li46Li56Li96LmA6LmB6LmL6LmN6LmO6LmP6LmU6Lmb6Lmc6Lmd6Lme6Lmh6Lmi6Lmp6Lms6Lmt6Lmv6Lmw6Lmx6Lm56Lm66Lm76LqC6LqD6LqJ6LqQ6LqS6LqV6Lqa6Lqb6Lqd6Lqe6Lqi6Lqn6Lqp6Lqt6Lqu6Lqz6Lq16Lq66Lq76LuA6LuB6LuD6LuE6LuH6LuP6LuR6LuU6Luc6Luo6Luu6Luw6Lux6Lu36Lu56Lu66Lut6LyA6LyC6LyH6LyI6LyP6LyQ6LyW6LyX6LyY6Lye6Lyg6Lyh6Lyj6Lyl6Lyn6Lyo6Lys6Lyt6Lyu6Ly06Ly16Ly26Ly36Ly66L2A6L2BXCJdLFxuW1wiOGZlMWExXCIsXCLovYPovYfovY/ovZFcIiw0LFwi6L2Y6L2d6L2e6L2l6L6d6L6g6L6h6L6k6L6l6L6m6L616L626L646L6+6L+A6L+B6L+G6L+K6L+L6L+N6L+Q6L+S6L+T6L+V6L+g6L+j6L+k6L+o6L+u6L+x6L+16L+26L+76L++6YCC6YCE6YCI6YCM6YCY6YCb6YCo6YCp6YCv6YCq6YCs6YCt6YCz6YC06YC36YC/6YGD6YGE6YGM6YGb6YGd6YGi6YGm6YGn6YGs6YGw6YG06YG56YKF6YKI6YKL6YKM6YKO6YKQ6YKV6YKX6YKY6YKZ6YKb6YKg6YKh6YKi6YKl6YKw6YKy6YKz6YK06YK26YK96YOM6YK+6YODXCJdLFxuW1wiOGZlMmExXCIsXCLpg4Tpg4Xpg4fpg4jpg5Xpg5fpg5jpg5npg5zpg53pg5/pg6Xpg5Lpg7bpg6vpg6/pg7Dpg7Tpg77pg7/phIDphITphIXphIbphIjphI3phJDphJTphJbphJfphJjphJrphJzphJ7phKDphKXphKLphKPphKfphKnphK7phK/phLHphLTphLbphLfphLnphLrphLzphL3phYPphYfphYjphY/phZPphZfphZnphZrphZvphaHphaTphafpha3phbTphbnphbrphbvphoHphoPphoXphobphorpho7phpHphpPphpTphpXphpjphp7phqHphqbphqjphqzphq3phq7phrDphrHphrLphrPphrbphrvphrzphr3phr9cIl0sXG5bXCI4ZmUzYTFcIixcIumHgumHg+mHhemHk+mHlOmHl+mHmemHmumHnumHpOmHpemHqemHqumHrFwiLDUsXCLph7fph7nph7vph73piIDpiIHpiITpiIXpiIbpiIfpiInpiIrpiIzpiJDpiJLpiJPpiJbpiJjpiJzpiJ3piKPpiKTpiKXpiKbpiKjpiK7piK/piLDpiLPpiLXpiLbpiLjpiLnpiLrpiLzpiL7piYDpiYLpiYPpiYbpiYfpiYrpiY3piY7piY/piZHpiZjpiZnpiZzpiZ3piaDpiaHpiaXpiafpiajpianpia7pia/pibDpibVcIiw0LFwi6Ym76Ym86Ym96Ym/6YqI6YqJ6YqK6YqN6YqO6YqS6YqXXCJdLFxuW1wiOGZlNGExXCIsXCLpipnpip/piqDpiqTpiqXpiqfpiqjpiqvpiq/pirLpirbpirjpirrpirvpirzpir3pir9cIiw0LFwi6YuF6YuG6YuH6YuI6YuL6YuM6YuN6YuO6YuQ6YuT6YuV6YuX6YuY6YuZ6Yuc6Yud6Yuf6Yug6Yuh6Yuj6Yul6Yun6Yuo6Yus6Yuu6Yuw6Yu56Yu76Yu/6YyA6YyC6YyI6YyN6YyR6YyU6YyV6Yyc6Yyd6Yye6Yyf6Yyh6Yyk6Yyl6Yyn6Yyp6Yyq6Yyz6Yy06Yy26Yy36Y2H6Y2I6Y2J6Y2Q6Y2R6Y2S6Y2V6Y2X6Y2Y6Y2a6Y2e6Y2k6Y2l6Y2n6Y2p6Y2q6Y2t6Y2v6Y2w6Y2x6Y2z6Y206Y22XCJdLFxuW1wiOGZlNWExXCIsXCLpjbrpjb3pjb/pjoDpjoHpjoLpjojpjorpjovpjo3pjo/pjpLpjpXpjpjpjpvpjp7pjqHpjqPpjqTpjqbpjqjpjqvpjrTpjrXpjrbpjrrpjqnpj4Hpj4Tpj4Xpj4bpj4fpj4lcIiw0LFwi6Y+T6Y+Z6Y+c6Y+e6Y+f6Y+i6Y+m6Y+n6Y+56Y+36Y+46Y+66Y+76Y+96ZCB6ZCC6ZCE6ZCI6ZCJ6ZCN6ZCO6ZCP6ZCV6ZCW6ZCX6ZCf6ZCu6ZCv6ZCx6ZCy6ZCz6ZC06ZC76ZC/6ZC96ZGD6ZGF6ZGI6ZGK6ZGM6ZGV6ZGZ6ZGc6ZGf6ZGh6ZGj6ZGo6ZGr6ZGt6ZGu6ZGv6ZGx6ZGy6ZKE6ZKD6ZW46ZW5XCJdLFxuW1wiOGZlNmExXCIsXCLplb7ploTplojplozplo3plo7plp3plp7plp/plqHplqbplqnplqvplqzplrTplrbplrrplr3plr/pl4bpl4jpl4npl4vpl5Dpl5Hpl5Lpl5Ppl5npl5rpl53pl57pl5/pl6Dpl6Tpl6bpmJ3pmJ7pmKLpmKTpmKXpmKbpmKzpmLHpmLPpmLfpmLjpmLnpmLrpmLzpmL3pmYHpmZLpmZTpmZbpmZfpmZjpmaHpma7pmbTpmbvpmbzpmb7pmb/pmoHpmoLpmoPpmoTpmonpmpHpmpbpmprpmp3pmp/pmqTpmqXpmqbpmqnpmq7pmq/pmrPpmrrpm4rpm5LltrLpm5jpm5rpm53pm57pm5/pm6npm6/pm7Hpm7rpnIJcIl0sXG5bXCI4ZmU3YTFcIixcIumcg+mchemciemcmumcm+mcnemcoemcoumco+mcqOmcsemcs+mdgemdg+mdiumdjumdj+mdlemdl+mdmOmdmumdm+mdo+mdp+mdqumdrumds+mdtumdt+mduOmdu+mdvemdv+megOmeiemelemelumel+memememumenumen+meoumerOmerumesemesumetemetumeuOmeuemeuumevOmevumev+mfgemfhOmfhemfh+mfiemfiumfjOmfjemfjumfkOmfkemflOmfl+mfmOmfmemfnemfnumfoOmfm+mfoemfpOmfr+mfsemftOmft+mfuOmfuumgh+mgiumgmemgjemgjumglOmglumgnOmgnumgoOmgo+mgplwiXSxcbltcIjhmZThhMVwiLFwi6aCr6aCu6aCv6aCw6aCy6aCz6aC16aCl6aC+6aGE6aGH6aGK6aGR6aGS6aGT6aGW6aGX6aGZ6aGa6aGi6aGj6aGl6aGm6aGq6aGs6aKr6aKt6aKu6aKw6aK06aK36aK46aK66aK76aK/6aOC6aOF6aOI6aOM6aOh6aOj6aOl6aOm6aOn6aOq6aOz6aO26aSC6aSH6aSI6aSR6aSV6aSW6aSX6aSa6aSb6aSc6aSf6aSi6aSm6aSn6aSr6aSxXCIsNCxcIumkuemkuumku+mkvOmlgOmlgemlhumlh+mliOmljemljumllOmlmOmlmemlm+mlnOmlnumln+mloOmmm+mmnemmn+mmpummsOmmsemmsummtVwiXSxcbltcIjhmZTlhMVwiLFwi6aa56aa66aa96aa/6aeD6aeJ6aeT6aeU6aeZ6aea6aec6aee6aen6aeq6aer6aes6aew6ae06ae16ae56ae96ae+6aiC6aiD6aiE6aiL6aiM6aiQ6aiR6aiW6aie6aig6aii6aij6aik6ain6ait6aiu6aiz6ai16ai26ai46amH6amB6amE6amK6amL6amM6amO6amR6amU6amW6amd6aqq6aqs6aqu6aqv6aqy6aq06aq16aq26aq56aq76aq+6aq/6auB6auD6auG6auI6auO6auQ6auS6auV6auW6auX6aub6auc6aug6auk6aul6aun6aup6aus6auy6auz6au16au56au66au96au/XCIsNF0sXG5bXCI4ZmVhYTFcIixcIumshOmshemsiOmsiemsi+msjOmsjemsjumskOmskumslumsmemsm+msnOmsoOmspumsq+msremss+mstOmstemst+msuemsuumsvemtiOmti+mtjOmtlemtlumtl+mtm+mtnumtoemto+mtpemtpumtqOmtqlwiLDQsXCLprbPprbXprbfprbjprbnprb/proDproTproXprobprofpronprorprovpro3pro/prpDprpTprprprp3prp7prqbprqfprqnprqzprrDprrHprrLprrfprrjprrvprrzprr7prr/pr4Hpr4fpr4jpr47pr5Dpr5fpr5jpr53pr5/pr6Xpr6fpr6rpr6vpr6/pr7Ppr7fpr7hcIl0sXG5bXCI4ZmViYTFcIixcIumvuemvuumvvemvv+mwgOmwgumwi+mwj+mwkemwlumwmOmwmemwmumwnOmwnumwoumwo+mwplwiLDQsXCLpsLHpsLXpsLbpsLfpsL3psYHpsYPpsYTpsYXpsYnpsYrpsY7psY/psZDpsZPpsZTpsZbpsZjpsZvpsZ3psZ7psZ/psaPpsanpsarpsZzpsavpsajpsa7psbDpsbLpsbXpsbfpsbvps6bps7Lps7fps7nptIvptILptJHptJfptJjptJzptJ3ptJ7ptK/ptLDptLLptLPptLTptLrptLzptYXptL3ptYLptYPptYfptYrptZPptZTptZ/ptaPptaLptaXptanptarptavptbDptbbptbfptbtcIl0sXG5bXCI4ZmVjYTFcIixcIum1vOm1vum2g+m2hOm2hum2ium2jem2jum2kum2k+m2lem2lum2l+m2mOm2oem2qum2rOm2rum2sem2tem2uem2vOm2v+m3g+m3h+m3iem3ium3lOm3lem3lum3l+m3mum3num3n+m3oOm3pem3p+m3qem3q+m3rum3sOm3s+m3tOm3vum4ium4gum4h+m4jum4kOm4kem4kum4lem4lum4mem4nOm4nem5uum5u+m5vOm6gOm6gum6g+m6hOm6hem6h+m6jum6j+m6lum6mOm6m+m6num6pOm6qOm6rOm6rum6r+m6sOm6s+m6tOm6tem7hum7iOm7i+m7lem7n+m7pOm7p+m7rOm7rem7rum7sOm7sem7sum7tVwiXSxcbltcIjhmZWRhMVwiLFwi6bu46bu/6byC6byD6byJ6byP6byQ6byR6byS6byU6byW6byX6byZ6bya6byb6byf6byi6bym6byq6byr6byv6byx6byy6by06by36by56by66by86by96by/6b2B6b2DXCIsNCxcIum9k+m9lem9lum9l+m9mOm9mum9nem9num9qOm9qem9rVwiLDQsXCLpvbPpvbXpvbrpvb3pvo/pvpDpvpHpvpLpvpTpvpbpvpfpvp7pvqHpvqLpvqPpvqVcIl1cbl1cbiIsIm1vZHVsZS5leHBvcnRzPXtcInVDaGFyc1wiOlsxMjgsMTY1LDE2OSwxNzgsMTg0LDIxNiwyMjYsMjM1LDIzOCwyNDQsMjQ4LDI1MSwyNTMsMjU4LDI3NiwyODQsMzAwLDMyNSwzMjksMzM0LDM2NCw0NjMsNDY1LDQ2Nyw0NjksNDcxLDQ3Myw0NzUsNDc3LDUwNiw1OTQsNjEwLDcxMiw3MTYsNzMwLDkzMCw5MzgsOTYyLDk3MCwxMDI2LDExMDQsMTEwNiw4MjA5LDgyMTUsODIxOCw4MjIyLDgyMzEsODI0MSw4MjQ0LDgyNDYsODI1Miw4MzY1LDg0NTIsODQ1NCw4NDU4LDg0NzEsODQ4Miw4NTU2LDg1NzAsODU5Niw4NjAyLDg3MTMsODcyMCw4NzIyLDg3MjYsODczMSw4NzM3LDg3NDAsODc0Miw4NzQ4LDg3NTEsODc2MCw4NzY2LDg3NzcsODc4MSw4Nzg3LDg4MDIsODgwOCw4ODE2LDg4NTQsODg1OCw4ODcwLDg4OTYsODk3OSw5MzIyLDkzNzIsOTU0OCw5NTg4LDk2MTYsOTYyMiw5NjM0LDk2NTIsOTY2Miw5NjcyLDk2NzYsOTY4MCw5NzAyLDk3MzUsOTczOCw5NzkzLDk3OTUsMTE5MDYsMTE5MDksMTE5MTMsMTE5MTcsMTE5MjgsMTE5NDQsMTE5NDcsMTE5NTEsMTE5NTYsMTE5NjAsMTE5NjQsMTE5NzksMTIyODQsMTIyOTIsMTIzMTIsMTIzMTksMTIzMzAsMTIzNTEsMTI0MzYsMTI0NDcsMTI1MzUsMTI1NDMsMTI1ODYsMTI4NDIsMTI4NTAsMTI5NjQsMTMyMDAsMTMyMTUsMTMyMTgsMTMyNTMsMTMyNjMsMTMyNjcsMTMyNzAsMTMzODQsMTM0MjgsMTM3MjcsMTM4MzksMTM4NTEsMTQ2MTcsMTQ3MDMsMTQ4MDEsMTQ4MTYsMTQ5NjQsMTUxODMsMTU0NzEsMTU1ODUsMTY0NzEsMTY3MzYsMTcyMDgsMTczMjUsMTczMzAsMTczNzQsMTc2MjMsMTc5OTcsMTgwMTgsMTgyMTIsMTgyMTgsMTgzMDEsMTgzMTgsMTg3NjAsMTg4MTEsMTg4MTQsMTg4MjAsMTg4MjMsMTg4NDQsMTg4NDgsMTg4NzIsMTk1NzYsMTk2MjAsMTk3MzgsMTk4ODcsNDA4NzAsNTkyNDQsNTkzMzYsNTkzNjcsNTk0MTMsNTk0MTcsNTk0MjMsNTk0MzEsNTk0MzcsNTk0NDMsNTk0NTIsNTk0NjAsNTk0NzgsNTk0OTMsNjM3ODksNjM4NjYsNjM4OTQsNjM5NzYsNjM5ODYsNjQwMTYsNjQwMTgsNjQwMjEsNjQwMjUsNjQwMzQsNjQwMzcsNjQwNDIsNjUwNzQsNjUwOTMsNjUxMDcsNjUxMTIsNjUxMjcsNjUxMzIsNjUzNzUsNjU1MTAsNjU1MzZdLFwiZ2JDaGFyc1wiOlswLDM2LDM4LDQ1LDUwLDgxLDg5LDk1LDk2LDEwMCwxMDMsMTA0LDEwNSwxMDksMTI2LDEzMywxNDgsMTcyLDE3NSwxNzksMjA4LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzQxLDQyOCw0NDMsNTQ0LDU0NSw1NTgsNzQxLDc0Miw3NDksNzUwLDgwNSw4MTksODIwLDc5MjIsNzkyNCw3OTI1LDc5MjcsNzkzNCw3OTQzLDc5NDQsNzk0NSw3OTUwLDgwNjIsODE0OCw4MTQ5LDgxNTIsODE2NCw4MTc0LDgyMzYsODI0MCw4MjYyLDgyNjQsODM3NCw4MzgwLDgzODEsODM4NCw4Mzg4LDgzOTAsODM5Miw4MzkzLDgzOTQsODM5Niw4NDAxLDg0MDYsODQxNiw4NDE5LDg0MjQsODQzNyw4NDM5LDg0NDUsODQ4Miw4NDg1LDg0OTYsODUyMSw4NjAzLDg5MzYsODk0Niw5MDQ2LDkwNTAsOTA2Myw5MDY2LDkwNzYsOTA5Miw5MTAwLDkxMDgsOTExMSw5MTEzLDkxMzEsOTE2Miw5MTY0LDkyMTgsOTIxOSwxMTMyOSwxMTMzMSwxMTMzNCwxMTMzNiwxMTM0NiwxMTM2MSwxMTM2MywxMTM2NiwxMTM3MCwxMTM3MiwxMTM3NSwxMTM4OSwxMTY4MiwxMTY4NiwxMTY4NywxMTY5MiwxMTY5NCwxMTcxNCwxMTcxNiwxMTcyMywxMTcyNSwxMTczMCwxMTczNiwxMTk4MiwxMTk4OSwxMjEwMiwxMjMzNiwxMjM0OCwxMjM1MCwxMjM4NCwxMjM5MywxMjM5NSwxMjM5NywxMjUxMCwxMjU1MywxMjg1MSwxMjk2MiwxMjk3MywxMzczOCwxMzgyMywxMzkxOSwxMzkzMywxNDA4MCwxNDI5OCwxNDU4NSwxNDY5OCwxNTU4MywxNTg0NywxNjMxOCwxNjQzNCwxNjQzOCwxNjQ4MSwxNjcyOSwxNzEwMiwxNzEyMiwxNzMxNSwxNzMyMCwxNzQwMiwxNzQxOCwxNzg1OSwxNzkwOSwxNzkxMSwxNzkxNSwxNzkxNiwxNzkzNiwxNzkzOSwxNzk2MSwxODY2NCwxODcwMywxODgxNCwxODk2MiwxOTA0MywzMzQ2OSwzMzQ3MCwzMzQ3MSwzMzQ4NCwzMzQ4NSwzMzQ5MCwzMzQ5NywzMzUwMSwzMzUwNSwzMzUxMywzMzUyMCwzMzUzNiwzMzU1MCwzNzg0NSwzNzkyMSwzNzk0OCwzODAyOSwzODAzOCwzODA2NCwzODA2NSwzODA2NiwzODA2OSwzODA3NSwzODA3NiwzODA3OCwzOTEwOCwzOTEwOSwzOTExMywzOTExNCwzOTExNSwzOTExNiwzOTI2NSwzOTM5NCwxODkwMDBdfSIsIm1vZHVsZS5leHBvcnRzPVtcbltcImExNDBcIixcIu6ThlwiLDYyXSxcbltcImExODBcIixcIu6UhVwiLDMyXSxcbltcImEyNDBcIixcIu6UplwiLDYyXSxcbltcImEyODBcIixcIu6VpVwiLDMyXSxcbltcImEyYWJcIixcIu6dplwiLDVdLFxuW1wiYTJlM1wiLFwi4oKs7p2tXCJdLFxuW1wiYTJlZlwiLFwi7p2u7p2vXCJdLFxuW1wiYTJmZFwiLFwi7p2w7p2xXCJdLFxuW1wiYTM0MFwiLFwi7paGXCIsNjJdLFxuW1wiYTM4MFwiLFwi7peFXCIsMzEsXCLjgIBcIl0sXG5bXCJhNDQwXCIsXCLul6ZcIiw2Ml0sXG5bXCJhNDgwXCIsXCLumKVcIiwzMl0sXG5bXCJhNGY0XCIsXCLunbJcIiwxMF0sXG5bXCJhNTQwXCIsXCLumYZcIiw2Ml0sXG5bXCJhNTgwXCIsXCLumoVcIiwzMl0sXG5bXCJhNWY3XCIsXCLunb1cIiw3XSxcbltcImE2NDBcIixcIu6aplwiLDYyXSxcbltcImE2ODBcIixcIu6bpVwiLDMyXSxcbltcImE2YjlcIixcIu6ehVwiLDddLFxuW1wiYTZkOVwiLFwi7p6NXCIsNl0sXG5bXCJhNmVjXCIsXCLunpTunpVcIl0sXG5bXCJhNmYzXCIsXCLunpZcIl0sXG5bXCJhNmY2XCIsXCLunpdcIiw4XSxcbltcImE3NDBcIixcIu6chlwiLDYyXSxcbltcImE3ODBcIixcIu6dhVwiLDMyXSxcbltcImE3YzJcIixcIu6eoFwiLDE0XSxcbltcImE3ZjJcIixcIu6er1wiLDEyXSxcbltcImE4OTZcIixcIu6evFwiLDEwXSxcbltcImE4YmNcIixcIu6fh1wiXSxcbltcImE4YmZcIixcIse5XCJdLFxuW1wiYThjMVwiLFwi7p+J7p+K7p+L7p+MXCJdLFxuW1wiYThlYVwiLFwi7p+NXCIsMjBdLFxuW1wiYTk1OFwiLFwi7p+iXCJdLFxuW1wiYTk1YlwiLFwi7p+jXCJdLFxuW1wiYTk1ZFwiLFwi7p+k7p+l7p+mXCJdLFxuW1wiYTk4OVwiLFwi44C+4r+wXCIsMTFdLFxuW1wiYTk5N1wiLFwi7p+0XCIsMTJdLFxuW1wiYTlmMFwiLFwi7qCBXCIsMTRdLFxuW1wiYWFhMVwiLFwi7oCAXCIsOTNdLFxuW1wiYWJhMVwiLFwi7oGeXCIsOTNdLFxuW1wiYWNhMVwiLFwi7oK8XCIsOTNdLFxuW1wiYWRhMVwiLFwi7oSaXCIsOTNdLFxuW1wiYWVhMVwiLFwi7oW4XCIsOTNdLFxuW1wiYWZhMVwiLFwi7oeWXCIsOTNdLFxuW1wiZDdmYVwiLFwi7qCQXCIsNF0sXG5bXCJmOGExXCIsXCLuiLRcIiw5M10sXG5bXCJmOWExXCIsXCLuipJcIiw5M10sXG5bXCJmYWExXCIsXCLui7BcIiw5M10sXG5bXCJmYmExXCIsXCLujY5cIiw5M10sXG5bXCJmY2ExXCIsXCLujqxcIiw5M10sXG5bXCJmZGExXCIsXCLukIpcIiw5M10sXG5bXCJmZTUwXCIsXCLiuoHuoJbuoJfuoJjiuoTjkbPjkYfiuojiuovuoJ7jlp7jmJrjmI7iuoziupfjpa7jpJjuoKbjp4/jp5/jqbPjp5DuoKvuoKzjrY7jsa7js6DiuqfuoLHuoLLiuqrkgZbkhZ/iuq7kjLfiurPiurbiurfuoLvkjrHkjqziurvkj53kk5bkmaHkmYzuoYNcIl0sXG5bXCJmZTgwXCIsXCLknKPknKnknbzkno3iu4rkpYfkpbrkpb3kpoLkpoPkpoXkpobkpp/kppvkprfkprbuoZTuoZXksqPksp/ksqDksqHksbfksqLktJNcIiw2LFwi5Lau7qGk7pGoXCIsOTNdXG5dXG4iLCJtb2R1bGUuZXhwb3J0cz1bXG5bXCIwXCIsXCJcXHUwMDAwXCIsMTI4XSxcbltcImExXCIsXCLvvaFcIiw2Ml0sXG5bXCI4MTQwXCIsXCLjgIDjgIHjgILvvIzvvI7jg7vvvJrvvJvvvJ/vvIHjgpvjgpzCtO+9gMKo77y+77+j77y/44O944O+44Kd44Ke44CD5Lud44CF44CG44CH44O84oCV4oCQ77yP77y8772e4oil772c4oCm4oCl4oCY4oCZ4oCc4oCd77yI77yJ44CU44CV77y777y9772b772d44CIXCIsOSxcIu+8i++8jcKxw5dcIl0sXG5bXCI4MTgwXCIsXCLDt++8neKJoO+8nO+8nuKJpuKJp+KInuKItOKZguKZgMKw4oCy4oCz4oSD77+l77yE77+g77+h77yF77yD77yG77yK77ygwqfimIbimIXil4vil4/il47il4fil4bilqHilqDilrPilrLilr3ilrzigLvjgJLihpLihpDihpHihpPjgJNcIl0sXG5bXCI4MWI4XCIsXCLiiIjiiIviiobiiofiioLiioPiiKriiKlcIl0sXG5bXCI4MWM4XCIsXCLiiKfiiKjvv6Lih5Lih5TiiIDiiINcIl0sXG5bXCI4MWRhXCIsXCLiiKDiiqXijJLiiILiiIfiiaHiiZLiiariiaviiJriiL3iiJ3iiLXiiKviiKxcIl0sXG5bXCI4MWYwXCIsXCLihKvigLDima/ima3imarigKDigKHCtlwiXSxcbltcIjgxZmNcIixcIuKXr1wiXSxcbltcIjgyNGZcIixcIu+8kFwiLDldLFxuW1wiODI2MFwiLFwi77yhXCIsMjVdLFxuW1wiODI4MVwiLFwi772BXCIsMjVdLFxuW1wiODI5ZlwiLFwi44GBXCIsODJdLFxuW1wiODM0MFwiLFwi44KhXCIsNjJdLFxuW1wiODM4MFwiLFwi44OgXCIsMjJdLFxuW1wiODM5ZlwiLFwizpFcIiwxNixcIs6jXCIsNl0sXG5bXCI4M2JmXCIsXCLOsVwiLDE2LFwiz4NcIiw2XSxcbltcIjg0NDBcIixcItCQXCIsNSxcItCB0JZcIiwyNV0sXG5bXCI4NDcwXCIsXCLQsFwiLDUsXCLRkdC2XCIsN10sXG5bXCI4NDgwXCIsXCLQvlwiLDE3XSxcbltcIjg0OWZcIixcIuKUgOKUguKUjOKUkOKUmOKUlOKUnOKUrOKUpOKUtOKUvOKUgeKUg+KUj+KUk+KUm+KUl+KUo+KUs+KUq+KUu+KVi+KUoOKUr+KUqOKUt+KUv+KUneKUsOKUpeKUuOKVglwiXSxcbltcIjg3NDBcIixcIuKRoFwiLDE5LFwi4oWgXCIsOV0sXG5bXCI4NzVmXCIsXCLjjYnjjJTjjKLjjY3jjJjjjKfjjIPjjLbjjZHjjZfjjI3jjKbjjKPjjKvjjYrjjLvjjpzjjp3jjp7jjo7jjo/jj4TjjqFcIl0sXG5bXCI4NzdlXCIsXCLjjbtcIl0sXG5bXCI4NzgwXCIsXCLjgJ3jgJ/ihJbjj43ihKHjiqRcIiw0LFwi44ix44iy44i5442+442944284omS4omh4oir4oiu4oiR4oia4oql4oig4oif4oq/4oi14oip4oiqXCJdLFxuW1wiODg5ZlwiLFwi5Lqc5ZSW5aiD6Zi/5ZOA5oSb5oyo5ae26YCi6JG16Iyc56mQ5oKq5o+h5ril5pet6JGm6Iqm6a+15qKT5Zyn5pah5omx5a6b5aeQ6Jm76aO057Wi57a+6a6O5oiW57Kf6KK35a6J5bq15oyJ5pqX5qGI6ZeH6Z6N5p2P5Lul5LyK5L2N5L6d5YGJ5Zuy5aS35aeU5aiB5bCJ5oOf5oSP5oWw5piT5qSF54K655WP55Ww56e757at57ev6IOD6JCO6KGj6KyC6YGV6YG65Yy75LqV5Lql5Z+f6IKy6YOB56Ov5LiA5aOx5rqi6YC456iy6Iyo6IqL6bCv5YWB5Y2w5ZK95ZOh5Zug5ae75byV6aOy5rer6IOk6JStXCJdLFxuW1wiODk0MFwiLFwi6Zmi6Zmw6Zqg6Z+75ZCL5Y+z5a6H54OP57696L+C6Zuo5Y2v6bWc56q65LiR56KT6Ie85rim5ZiY5ZSE5qyd6JSa6bC75ael5Y6p5rWm55Oc6ZaP5ZmC5LqR6YGL6Zuy6I2P6aSM5Y+h5Za25ayw5b2x5pig5puz5qCE5rC45rOz5rSp55Gb55uI56mO6aC06Iux6KGb6Kmg6Yut5ray55ar55uK6aeF5oKm6KyB6LaK6Zay5qaO5Y6t5YaGXCJdLFxuW1wiODk4MFwiLFwi5ZyS5aCw5aWE5a605bu25oCo5o6p5o+05rK/5ryU54KO54SU54WZ54eV54y/57iB6Im26IuR6JaX6YGg6Ymb6bSb5aGp5pa85rGa55Sl5Ye55aSu5aWl5b6A5b+c5oq85pe65qiq5qyn5q60546L57+B6KWW6bSs6bSO6buE5bKh5rKW6I275YSE5bGL5oa26IeG5qG254mh5LmZ5L+65Y245oGp5rip56mP6Z+z5LiL5YyW5Luu5L2V5Ly95L6h5L2z5Yqg5Y+v5ZiJ5aSP5auB5a625a+h56eR5pqH5p6c5p625q2M5rKz54Gr54+C56aN56a+56i8566H6Iqx6Iub6IyE6I236I+v6I+T6J2m6Kqy5Zip6LKo6L+m6YGO6Zye6JqK5L+E5bOo5oiR54mZ55S76Iel6Iq96Ju+6LOA6ZuF6aST6aeV5LuL5Lya6Kej5Zue5aGK5aOK5bu75b+r5oCq5oKU5oGi5oeQ5oiS5ouQ5pS5XCJdLFxuW1wiOGE0MFwiLFwi6a2B5pmm5qKw5rW354Gw55WM55qG57W16Iql6J+56ZaL6ZqO6LKd5Yex5Yq+5aSW5ZKz5a6z5bSW5oWo5qaC5rav56KN6JOL6KGX6Kmy6Y6n6aq45rWs6aao6JuZ5Z6j5p+/6JuO6YiO5YqD5ZqH5ZCE5buT5ouh5pK55qC85qC45q67542y56K656mr6Kaa6KeS6LWr6LyD6YOt6Zaj6ZqU6Z2p5a2m5bKz5qW96aGN6aGO5o6b56yg5qirXCJdLFxuW1wiOGE4MFwiLFwi5qm/5qK26bCN5r2f5Ymy5Zad5oGw5ous5rS75riH5ruR6JGb6KSQ6L2E5LiU6bC55Y+25qSb5qi66Z6E5qCq5YWc56uD6JKy6Yec6Y6M5Zmb6bSo5qCi6IyF6JCx57Kl5YiI6IuF55Om5Lm+5L6D5Yag5a+S5YiK5YuY5Yun5be75Zaa5aCq5aem5a6M5a6Y5a+b5bmy5bm55oKj5oSf5oWj5oa+5o+b5pWi5p+R5qGT5qO65qy+5q2T5rGX5ryi5r6X5r2F55Kw55SY55uj55yL56u/566h57Ch57ep57y257+w6IKd6Imm6I6e6Kaz6KuM6LKr6YKE6ZGR6ZaT6ZaR6Zai6Zml6Z+T6aSo6IiY5Li45ZCr5bK45beM546p55mM55y85bKp57+r6LSL6ZuB6aCR6aGU6aGY5LyB5LyO5Y2x5Zac5Zmo5Z+65aWH5ayJ5a+E5bKQ5biM5bm+5b+M5o+u5py65peX5pei5pyf5qOL5qOEXCJdLFxuW1wiOGI0MFwiLFwi5qmf5biw5q+F5rCX5rG955W/56WI5a2j56iA57SA5b696KaP6KiY6LK06LW36LuM6Lyd6aOi6aiO6ay85LqA5YG95YSA5aaT5a6c5oiv5oqA5pOs5qy654qg55aR56WH576p6J+76Kq86K2w5o6s6I+K6Z6g5ZCJ5ZCD5Zar5qGU5qmY6Kmw56Cn5p216buN5Y205a6i6ISa6JmQ6YCG5LiY5LmF5LuH5LyR5Y+K5ZC45a6u5byT5oCl5pWRXCJdLFxuW1wiOGI4MFwiLFwi5py95rGC5rGy5rOj54G455CD56m256qu56yI57Sa57O+57Wm5pen54mb5Y675bGF5beo5ouS5oug5oyZ5rig6Jma6Kix6Led6Yu45ryB56am6a2a5Lqo5Lqr5Lqs5L6b5L6g5YOR5YWH56u25YWx5Ye25Y2U5Yyh5Y2/5Y+r5Zas5aKD5bOh5by35b2K5oCv5oGQ5oGt5oyf5pWZ5qmL5rOB54uC54ut55+v6IO46ISF6IiI6JWO6YO36Y+h6Z+/6aWX6ama5Luw5Yed5bCt5pqB5qWt5bGA5puy5qW1546J5qGQ57KB5YOF5Yuk5Z2H5be+6Yym5pak5qyj5qy955C056aB56a9562L57eK6Iq56I+M6KG/6KWf6Ky56L+R6YeR5ZCf6YqA5Lmd5YC25Y+l5Yy654uX546W55+p6Ium6Lqv6aeG6aeI6aeS5YW35oSa6Jme5Zaw56m65YG25a+T6YGH6ZqF5Liy5qub6Yen5bGR5bGIXCJdLFxuW1wiOGM0MFwiLFwi5o6Y56qf5rKT6Z206L2h56qq54aK6ZqI57KC5qCX57mw5qGR6Y2s5Yuy5ZCb6Jar6KiT576k6LuN6YOh5Y2m6KKI56WB5L+C5YK+5YiR5YWE5ZWT5Zyt54+q5Z6L5aWR5b2i5b6E5oG15oW25oWn5oap5o6y5pC65pWs5pmv5qGC5riT55Wm56i957O757WM57aZ57mL572r6IyO6I2K6JuN6KiI6Kmj6K2m6Lu96aCa6baP6Iq46L+O6a+oXCJdLFxuW1wiOGM4MFwiLFwi5YqH5oif5pKD5r+A6ZqZ5qGB5YKR5qyg5rG65r2U56m057WQ6KGA6Kij5pyI5Lu25YC55YCm5YGl5YW85Yi45Ymj5Zan5ZyP5aCF5auM5bu65oay5oe45ouz5o2y5qSc5qip54m954qs54yu56CU56Gv57W555yM6IKp6KaL6KyZ6LOi6LuS6YGj6Y216Zm66aGV6aiT6bm45YWD5Y6f5Y6z5bm75bym5rib5rqQ546E54++57WD6Ii36KiA6Ku66ZmQ5LmO5YCL5Y+k5ZG85Zu65aeR5a2k5bex5bqr5byn5oi45pWF5p6v5rmW54uQ57OK6KK06IKh6IOh6I+w6JmO6KqH6Leo6Yi36ZuH6aGn6byT5LqU5LqS5LyN5Y2I5ZGJ5ZC+5aiv5b6M5b6h5oKf5qKn5qqO55Ga56KB6Kqe6Kqk6K236YaQ5Lme6a+J5Lqk5L285L6v5YCZ5YCW5YWJ5YWs5Yqf5Yq55Yu+5Y6a5Y+j5ZCRXCJdLFxuW1wiOGQ0MFwiLFwi5ZCO5ZaJ5Z2R5Z6i5aW95a2U5a2d5a6P5bel5ben5be35bm45bqD5bqa5bq35byY5oGS5oWM5oqX5ouY5o6n5pS75piC5pmD5pu05p2t5qCh5qKX5qeL5rGf5rSq5rWp5riv5rqd55Sy55qH56Gs56i/57Og57SF57SY57We57ax6ICV6ICD6IKv6IKx6IWU6IaP6Iiq6I2S6KGM6KGh6Kyb6LKi6LO86YOK6YW16Ymx56C/6Yu86Zak6ZmNXCJdLFxuW1wiOGQ4MFwiLFwi6aCF6aaZ6auY6bS75Ymb5Yqr5Y+35ZCI5aOV5ou35r+g6LGq6L2f6bq55YWL5Yi75ZGK5Zu956mA6YW36bWg6buS542E5ryJ6IWw55SR5b+95oOa6aqo54ub6L685q2k6aCD5LuK5Zuw5Z2k5aK+5ama5oGo5oeH5piP5piG5qC55qKx5re355eV57S66Imu6a2C5Lqb5L2Q5Y+J5ZSG5bWv5bem5beu5p+75rKZ55Gz56CC6KmQ6Y6W6KOf5Z2Q5bqn5oyr5YK15YKs5YaN5pyA5ZOJ5aGe5aa75a6w5b2p5omN5o6h5qC95q2z5riI54G96YeH54qA56CV56Cm56Wt5paO57Sw6I+c6KOB6LyJ6Zqb5Ymk5Zyo5p2Q572q6LKh5Ya05Z2C6Ziq5aC65qaK6IK05ZKy5bSO5Z+856KV6be65L2c5YmK5ZKL5pC+5pio5pyU5p+156qE562W57Si6Yyv5qGc6a6t56y55YyZ5YaK5Yi3XCJdLFxuW1wiOGU0MFwiLFwi5a+f5ou25pKu5pOm5pyt5q666Jap6ZuR55qQ6a+W5o2M6YyG6a6r55q/5pmS5LiJ5YKY5Y+C5bGx5oOo5pKS5pWj5qGf54em54+K55Sj566X57qC6JqV6K6D6LOb6YW46aSQ5pas5pqr5q6L5LuV5LuU5Ly65L2/5Yi65Y+45Y+y5Zej5Zub5aOr5aeL5aeJ5ae/5a2Q5bGN5biC5bir5b+X5oCd5oyH5pSv5a2c5pav5pa95peo5p6d5q2iXCJdLFxuW1wiOGU4MFwiLFwi5q275rCP542F56WJ56eB57O457SZ57Sr6IKi6ISC6Iez6KaW6Kme6Kmp6Kmm6KqM6Kuu6LOH6LOc6ZuM6aO85q2v5LqL5Ly85L6N5YWQ5a2X5a+65oWI5oyB5pmC5qyh5ruL5rK754i+55K955eU56OB56S66ICM6ICz6Ieq6JKU6L6e5rGQ6bm/5byP6K2Y6bSr56u66Lu45a6N6Zur5LiD5Y+x5Z+35aSx5auJ5a6k5oKJ5rm/5ryG55a+6LOq5a6f6JSA56+g5YGy5p+06Iqd5bGh6JWK57ie6IiO5YaZ5bCE5o2o6LWm5pac54Wu56S+57SX6ICF6Kyd6LuK6YGu6JuH6YKq5YCf5Yu65bC65p2T54G854i16YWM6YeI6Yyr6Iul5a+C5byx5oO55Li75Y+W5a6I5omL5pyx5q6K54up54+g56iu6IWr6Laj6YWS6aaW5YSS5Y+X5ZGq5a+/5o6I5qi557as6ZyA5Zua5Y+O5ZGoXCJdLFxuW1wiOGY0MFwiLFwi5a6X5bCx5bee5L+u5oSB5ou+5rSy56eA56eL57WC57mN57+S6Iet6Iif6JKQ6KGG6KWy6K6Q6Lm06Lyv6YCx6YWL6YWs6ZuG6Yac5LuA5L2P5YWF5Y2B5b6T5oiO5p+U5rGB5riL542j57im6YeN6YqD5Y+U5aSZ5a6/5reR56Wd57iu57Kb5aG+54af5Ye66KGT6L+w5L+K5bO75pil556s56uj6Iic6ae/5YeG5b6q5pes5qWv5q6J5rezXCJdLFxuW1wiOGY4MFwiLFwi5rqW5r2k55u+57SU5beh6YG16YaH6aCG5Yem5Yid5omA5pqR5puZ5ria5bq257eS572y5pu46Jav6Je36Ku45Yqp5Y+Z5aWz5bqP5b6Q5oGV6Yuk6Zmk5YK35YSf5Yud5Yyg5Y2H5Y+s5ZOo5ZWG5ZSx5ZiX5aWo5aa+5ai85a615bCG5bCP5bCR5bCa5bqE5bqK5bug5b2w5om/5oqE5oub5o6M5o235piH5piM5pit5pm25p2+5qKi5qif5qi15rK85raI5riJ5rmY54S854Sm54Wn55eH55yB56Gd56SB56Wl56ew56ug56yR57Kn57S56IKW6I+W6JKL6JWJ6KGd6KOz6Kif6Ki86KmU6Kmz6LGh6LOe6Yak6Ymm6Y2+6ZCY6Zqc6Z6Y5LiK5LiI5Lie5LmX5YaX5Ymw5Z+O5aC05aOM5ayi5bi45oOF5pO+5p2h5p2W5rWE54q255Wz56mj6JK46K2y6Ya46Yyg5Zix5Z+06aO+XCJdLFxuW1wiOTA0MFwiLFwi5out5qSN5q6W54et57mU6IG36Imy6Kem6aOf6J2V6L6x5bC75Ly45L+h5L615ZSH5aig5a+d5a+p5b+D5oWO5oyv5paw5pmL5qOu5qab5rW45rex55Sz55a555yf56We56em57Sz6Iej6Iqv6Jaq6Kaq6Ki66Lqr6L6b6YCy6Yed6ZyH5Lq65LuB5YiD5aG15aOs5bCL55Sa5bC96IWO6KiK6L+F6Zmj6Z2t56yl6KuP6aCI6YWi5Zuz5Y6oXCJdLFxuW1wiOTA4MFwiLFwi6YCX5ZC55Z6C5bil5o6o5rC054KK552h57KL57+g6KGw6YGC6YWU6YyQ6YyY6ZqP55Ge6auE5bSH5bWp5pWw5p6i6Lao6Zub5o2u5p2J5qSZ6I+F6aCX6ZuA6KO+5r6E5pG65a+45LiW54Cs55Wd5piv5YeE5Yi25Yui5aeT5b6B5oCn5oiQ5pS/5pW05pif5pm05qOy5qCW5q2j5riF54my55Sf55ub57K+6IGW5aOw6KO96KW/6Kqg6KqT6KuL6YCd6YaS6Z2S6Z2Z5paJ56iO6ISG6Zq75bit5oOc5oia5pal5piU5p6Q55+z56mN57GN57i+6ISK6LKs6LWk6Leh6Lmf56Kp5YiH5ouZ5o6l5pGC5oqY6Kit56qD56+A6Kqs6Zuq57W26IiM6J2J5LuZ5YWI5Y2D5Y2g5a6j5bCC5bCW5bed5oim5omH5pKw5qCT5qC05rOJ5rWF5rSX5p+T5r2c54WO54W95peL56m/566t57eaXCJdLFxuW1wiOTE0MFwiLFwi57mK576o6IW66Iib6Ii56Jam6Kmu6LOO6Le16YG46YG36Yqt6YqR6ZaD6a6u5YmN5ZaE5ry454S25YWo56aF57mV6Iaz57OO5ZmM5aGR5bKo5o6q5pu+5pu95qWa54uZ55aP55aO56SO56WW56ef57KX57Sg57WE6JiH6Ki06Zi76YGh6byg5YOn5Ym15Y+M5Y+i5YCJ5Zaq5aOu5aWP54i95a6L5bGk5Yyd5oOj5oOz5o2c5o6D5oy/5o67XCJdLFxuW1wiOTE4MFwiLFwi5pON5pep5pu55bej5qeN5qe95ryV54el5LqJ55ep55u456qT57Of57eP57ac6IGh6I2J6I2Y6JGs6JK86Je76KOF6LWw6YCB6YGt6Y6X6Zyc6aiS5YOP5aKX5oaO6IeT6JS16LSI6YCg5L+D5YG05YmH5Y2z5oGv5o2J5p2f5ris6Laz6YCf5L+X5bGe6LOK5peP57aa5Y2S6KKW5YW25o+D5a2Y5a2r5bCK5pCN5p2R6YGc5LuW5aSa5aSq5rGw6KmR5ZS+5aCV5aal5oOw5omT5p+B6Ii15qWV6ZmA6aeE6aio5L2T5aCG5a++6ICQ5bKx5biv5b6F5oCg5oWL5oi05pu/5rOw5rue6IOO6IW/6IuU6KKL6LK46YCA6YCu6ZqK6bub6a+b5Luj5Y+w5aSn56ys6YaN6aGM6be55rud54Cn5Y2T5ZWE5a6F5omY5oqe5ouT5rKi5r+v55Ci6KiX6ZC45r+B6Ku+6Iy45Yen6Ju45Y+qXCJdLFxuW1wiOTI0MFwiLFwi5Y+p5L2G6YGU6L6w5aWq6ISx5be956uq6L6/5qOa6LC354u46bGI5qi96Kqw5Li55Y2Y5ZiG5Z2m5ouF5o6i5pem5q2O5reh5rmb54Kt55+t56uv566q57a76IC96IOG6JuL6KqV6Y2b5Zuj5aOH5by+5pat5pqW5qqA5q6155S36KuH5YCk55+l5Zyw5byb5oGl5pm65rGg55e056ia572u6Ie06JyY6YGF6aaz56+J55Wc56u5562R6JOEXCJdLFxuW1wiOTI4MFwiLFwi6YCQ56ep56qS6Iy25auh552A5Lit5Luy5a6Z5b+g5oq95pi85p+x5rOo6Jmr6KG36Ki76YWO6Yuz6aeQ5qiX54Cm54yq6Iun6JGX6LKv5LiB5YWG5YeL5ZaL5a+15biW5biz5bqB5byU5by15b2r5b605oey5oyR5pqi5pyd5r2u54mS55S655y66IG06IS56IW46J226Kq/6Kuc6LaF6Lez6Yqa6ZW36aCC6bOl5YuF5o2X55u05pyV5rKI54+N6LOD6Y6u6Zmz5rSl5aKc5qSO5qeM6L+96Y6a55eb6YCa5aGa5qCC5o605qe75L2D5rys5p+Y6L676JSm57a06Y2U5qS/5r2w5Z2q5aO35ays57Ss54iq5ZCK6Yej6ba05Lqt5L2O5YGc5YG15YmD6LKe5ZGI5aCk5a6a5bid5bqV5bqt5bu35byf5oKM5oq15oy65o+Q5qKv5rGA56KH56aO56iL57eg6ImH6KiC6Kum6LmE6YCTXCJdLFxuW1wiOTM0MFwiLFwi6YK46YSt6YeY6byO5rOl5pGY5pOi5pW15ru055qE56yb6YGp6Y+R5rq65ZOy5b655pKk6L2N6L+t6YmE5YW45aGr5aSp5bGV5bqX5re757qP55Sc6LK86Lui6aGb54K55Lyd5q6/5r6x55Sw6Zu75YWO5ZCQ5aC15aGX5aas5bGg5b6S5paX5p2c5rih55m76I+f6LOt6YCU6YO96Y2N56Cl56C65Yqq5bqm5Zyf5aW05oCS5YCS5YWa5YasXCJdLFxuW1wiOTM4MFwiLFwi5YeN5YiA5ZSQ5aGU5aGY5aWX5a6V5bO25baL5oK85oqV5pCt5p2x5qGD5qK85qOf55uX5reY5rmv5rab54Gv54eI5b2T55eY56W3562J562U562S57OW57Wx5Yiw6JGj6JWp6Jek6KiO6KyE6LGG6LiP6YCD6YCP6ZCZ6Zm26aCt6aiw6ZeY5YON5YuV5ZCM5aCC5bCO5oan5pKe5rSe556z56ul6IO06JCE6YGT6YqF5bOg6bSH5Yy/5b6X5b6z5rac54m5552j56a/56+k5q+S54us6Kqt5qCD5qmh5Ye456qB5qS05bGK6bO26Iur5a+F6YWJ54Ce5Zm45bGv5oOH5pWm5rKM6LGa6YGB6aCT5ZGR5puH6YiN5aWI6YKj5YaF5LmN5Yeq6JaZ6KyO54GY5o266Y2L5qWi6aa057iE55W35Y2X5qWg6Luf6Zuj5rGd5LqM5bC85byQ6L+p5YyC6LOR6IKJ6Jm55bu/5pel5Lmz5YWlXCJdLFxuW1wiOTQ0MFwiLFwi5aaC5bC/6Z+u5Lu75aaK5b+N6KqN5r+h56aw56Wi5a+n6JGx54yr54ax5bm05b+15o275pKa54eD57KY5LmD5bu85LmL5Z+c5Zqi5oKp5r+D57SN6IO96ISz6Ia/6L6y6KaX6Jqk5be05oqK5pKt6KaH5p235rOi5rS+55C256C05amG57216Iqt6aas5L+z5buD5oud5o6S5pWX5p2v55uD54mM6IOM6IK66Lyp6YWN5YCN5Z+55aqS5qKFXCJdLFxuW1wiOTQ4MFwiLFwi5qWz54Wk54u96LK35aOy6LOg6Zmq6YCZ6J2/56ek55+n6JCp5Lyv5Yml5Y2a5ouN5p+P5rOK55m9566U57KV6Ii26JaE6L+r5pud5ryg54iG57ib6I6r6aeB6bqm5Ye9566x56Gy56646IKH562I5quo5bmh6IKM55WR55Wg5YWr6Ymi5rqM55m66YaX6auq5LyQ572w5oqc562P6Zal6bOp5Zm65aGZ6Juk6Zq85Ly05Yik5Y2K5Y+N5Y+b5biG5pCs5paR5p2/5rC+5rGO54mI54qv54+t55WU57mB6Iis6Jep6LKp56+E6YeG54Wp6aCS6aOv5oy95pmp55Wq55uk56OQ6JWD6Juu5Yyq5Y2R5ZCm5aaD5bqH5b285oKy5omJ5om55oqr5paQ5q+U5rOM55ay55qu56KR56eY57eL57236IKl6KKr6Kq56LK76YG/6Z2e6aOb5qiL57C45YKZ5bC+5b6u5p6H5q+Y55C155yJ576OXCJdLFxuW1wiOTU0MFwiLFwi6by75p+K56iX5Yy555aL6aut5b2m6Iad6I+x6IKY5by85b+F55Wi562G6YC85qGn5aer5aqb57SQ55m+6Kys5L+15b2q5qiZ5rC35ryC55Oi56Wo6KGo6KmV6LG55buf5o+P55eF56eS6IuX6Yyo6Yuy6JKc6Jut6bCt5ZOB5b2s5paM5rWc54CV6LKn6LOT6aC75pWP55O25LiN5LuY5Z+g5aSr5amm5a+M5Yao5biD5bqc5oCW5om25pW3XCJdLFxuW1wiOTU4MFwiLFwi5pan5pmu5rWu54i256ym6IWQ6Iaa6IqZ6K2c6LKg6LOm6LW06Zic6ZmE5L6u5pKr5q2m6Iie6JGh6JWq6YOo5bCB5qWT6aKo6JG66JWX5LyP5Ymv5b6p5bmF5pyN56aP6IW56KSH6KaG5re15byX5omV5rK45LuP54mp6a6S5YiG5ZC75Zm05aKz5oak5omu54Sa5aWu57KJ57Oe57Sb6Zuw5paH6IGe5LiZ5L215YW15aGA5bmj5bmz5byK5p+E5Lim6JS96ZaJ6Zmb57Gz6aCB5YO75aOB55mW56Kn5Yil556l6JSR566G5YGP5aSJ54mH56+H57eo6L666L+U6YGN5L6/5YuJ5aip5byB6Z6t5L+d6IiX6Yuq5ZyD5o2V5q2p55Sr6KOc6LyU56mC5Yuf5aKT5oWV5oiK5pqu5q+N57C/6I+p5YCj5L+45YyF5ZGG5aCx5aWJ5a6d5bOw5bOv5bSp5bqW5oqx5o2n5pS+5pa55pyLXCJdLFxuW1wiOTY0MFwiLFwi5rOV5rOh54O556Cy57ir6IOe6Iqz6JCM6JOs6JyC6KSS6Kiq6LGK6YKm6YuS6aO96bOz6bWs5LmP5Lqh5YKN5YmW5Z2K5aao5bi95b+Y5b+Z5oi/5pq05pyb5p+Q5qOS5YaS57Sh6IKq6Iao6KyA6LKM6LK/6Ym+6Ziy5ZCg6aCs5YyX5YOV5Y2c5aKo5pKy5py054mn552m56mG6Yem5YuD5rKh5q6G5aCA5bmM5aWU5pys57+75Yeh55uGXCJdLFxuW1wiOTY4MFwiLFwi5pGp56Oo6a2U6bq75Z+L5aa55pin5p6a5q+O5ZOp5qeZ5bmV6Iac5p6V6a6q5p++6bGS5qGd5Lqm5L+j5Y+I5oq55pyr5rKr6L+E5L6t57mt6bq/5LiH5oWi5rqA5ryr6JST5ZGz5pyq6a2F5bez566V5bKs5a+G6Jyc5rmK6JOR56iU6ISI5aaZ57KN5rCR55yg5YuZ5aSi54Sh54mf55+b6Zyn6bWh5qSL5am/5aiY5Yal5ZCN5ZG95piO55uf6L+36YqY6bO05aeq54md5ruF5YWN5qOJ57a/57es6Z2i6bq65pG45qih6IyC5aaE5a2f5q+b54yb55uy57ay6ICX6JKZ5YSy5pyo6buZ55uu5p2i5Yu/6aSF5bCk5oi757G+6LKw5ZWP5oK257SL6ZaA5YyB5Lmf5Ya25aSc54i66IC26YeO5byl55+i5Y6E5b2557SE6Jas6Kiz6LqN6Z2W5p+z6Jau6ZGT5oSJ5oSI5rK555mSXCJdLFxuW1wiOTc0MFwiLFwi6Kut6Ly45ZSv5L2R5YSq5YuH5Y+L5a6l5bm95oKg5oaC5o+W5pyJ5p+a5rmn5raM54y254y355Sx56WQ6KOV6KqY6YGK6YKR6YO16ZuE6J6N5aSV5LqI5L2Z5LiO6KqJ6Ly/6aCQ5YKt5bm85aaW5a655bq45o+a5o+65pOB5puc5qWK5qeY5rSL5rq254aU55So56qv576K6ICA6JGJ6JOJ6KaB6Kyh6LiK6YGl6Zm96aSK5oW+5oqR5qyyXCJdLFxuW1wiOTc4MFwiLFwi5rKD5rW057+M57+85reA576F6J666KO45p2l6I6x6aC86Zu35rSb57Wh6JC96YWq5Lmx5Y215bWQ5qyE5r+r6JeN6Jit6Kan5Yip5ZCP5bGl5p2O5qKo55CG55KD55ei6KOP6KOh6YeM6Zui6Zm45b6L546H56uL6JGO5o6g55Wl5YqJ5rWB5rqc55CJ55WZ56Gr57KS6ZqG56uc6b6N5L625oWu5peF6Jmc5LqG5Lqu5YOa5Lih5YeM5a+u5paZ5qKB5ra854yf55mC556t56ic57On6Imv6KuS6YG86YeP6Zm16aCY5Yqb57eR5YCr5Y6Y5p6X5reL54eQ55Cz6Ieo6Lyq6Zqj6bGX6bqf55Gg5aGB5raZ57Sv6aGe5Luk5Ly25L6L5Ya35Yqx5ba65oCc546y56S86IuT6Yi06Zq36Zu26ZyK6bqX6b2i5pqm5q205YiX5Yqj54OI6KOC5buJ5oGL5oaQ5ryj54WJ57C+57e06IGvXCJdLFxuW1wiOTg0MFwiLFwi6JOu6YCj6Yys5ZGC6a2v5quT54KJ6LOC6Lev6Zyy5Yq05amB5buK5byE5pyX5qW85qaU5rWq5ryP54mi54u856+t6ICB6IG+6J2L6YOO5YWt6bqT56aE6IKL6Yyy6KuW5YCt5ZKM6Kmx5q2q6LOE6ISH5oOR5p6g6bey5LqZ5LqY6bCQ6Kmr6JeB6JWo5qSA5rm+56KX6IWVXCJdLFxuW1wiOTg5ZlwiLFwi5byM5LiQ5LiV5Liq5Lix5Li25Li85Li/5LmC5LmW5LmY5LqC5LqF6LGr5LqK6IiS5byN5LqO5Lqe5Lqf5Lqg5Lqi5Lqw5Lqz5Lq25LuO5LuN5LuE5LuG5LuC5LuX5Lue5Lut5Luf5Lu35LyJ5L2a5Lyw5L2b5L2d5L2X5L2H5L225L6I5L6P5L6Y5L275L2p5L2w5L6R5L2v5L6G5L6W5YSY5L+U5L+f5L+O5L+Y5L+b5L+R5L+a5L+Q5L+k5L+l5YCa5YCo5YCU5YCq5YCl5YCF5Lyc5L+25YCh5YCp5YCs5L++5L+v5YCR5YCG5YGD5YGH5pyD5YGV5YGQ5YGI5YGa5YGW5YGs5YG45YKA5YKa5YKF5YK05YKyXCJdLFxuW1wiOTk0MFwiLFwi5YOJ5YOK5YKz5YOC5YOW5YOe5YOl5YOt5YOj5YOu5YO55YO15YSJ5YSB5YSC5YSW5YSV5YSU5YSa5YSh5YS65YS35YS85YS75YS/5YWA5YWS5YWM5YWU5YWi56u45YWp5YWq5YWu5YaA5YaC5ZuY5YaM5YaJ5YaP5YaR5YaT5YaV5YaW5Yak5Yam5Yai5Yap5Yaq5Yar5Yaz5Yax5Yay5Yaw5Ya15Ya95YeF5YeJ5Yeb5Yeg6JmV5Yep5YetXCJdLFxuW1wiOTk4MFwiLFwi5Yew5Ye15Ye+5YiE5YiL5YiU5YiO5Yin5Yiq5Yiu5Yiz5Yi55YmP5YmE5YmL5YmM5Yme5YmU5Ymq5Ym05Ymp5Ymz5Ym/5Ym95YqN5YqU5YqS5Ymx5YqI5YqR6L6o6L6n5Yqs5Yqt5Yq85Yq15YuB5YuN5YuX5Yue5Yuj5Yum6aOt5Yug5Yuz5Yu15Yu45Yu55YyG5YyI55S45YyN5YyQ5YyP5YyV5Yya5Yyj5Yyv5Yyx5Yyz5Yy45Y2A5Y2G5Y2F5LiX5Y2J5Y2N5YeW5Y2e5Y2p5Y2u5aSY5Y275Y235Y6C5Y6W5Y6g5Y6m5Y6l5Y6u5Y6w5Y625Y+D57CS6ZuZ5Y+f5pu854eu5Y+u5Y+o5Y+t5Y+65ZCB5ZC95ZGA5ZCs5ZCt5ZC85ZCu5ZC25ZCp5ZCd5ZGO5ZKP5ZG15ZKO5ZGf5ZGx5ZG35ZGw5ZKS5ZG75ZKA5ZG25ZKE5ZKQ5ZKG5ZOH5ZKi5ZK45ZKl5ZKs5ZOE5ZOI5ZKoXCJdLFxuW1wiOWE0MFwiLFwi5ZKr5ZOC5ZKk5ZK+5ZK85ZOY5ZOl5ZOm5ZSP5ZSU5ZO95ZOu5ZOt5ZO65ZOi5ZS55ZWA5ZWj5ZWM5ZSu5ZWc5ZWF5ZWW5ZWX5ZS45ZSz5ZWd5ZaZ5ZaA5ZKv5ZaK5Zaf5ZW75ZW+5ZaY5Zae5Zau5ZW85ZaD5Zap5ZaH5Zao5Zea5ZeF5Zef5ZeE5Zec5Zek5ZeU5ZiU5Ze35ZiW5Ze+5Ze95Zib5Ze55ZmO5ZmQ54ef5Zi05Zi25Ziy5Zi4XCJdLFxuW1wiOWE4MFwiLFwi5Zmr5Zmk5Ziv5Zms5Zmq5ZqG5ZqA5ZqK5Zqg5ZqU5ZqP5Zql5Zqu5Zq25Zq05ZuC5Zq85ZuB5ZuD5ZuA5ZuI5ZuO5ZuR5ZuT5ZuX5Zuu5Zu55ZyA5Zu/5ZyE5ZyJ5ZyI5ZyL5ZyN5ZyT5ZyY5ZyW5ZeH5Zyc5Zym5Zy35Zy45Z2O5Zy75Z2A5Z2P5Z2p5Z+A5Z6I5Z2h5Z2/5Z6J5Z6T5Z6g5Z6z5Z6k5Z6q5Z6w5Z+D5Z+G5Z+U5Z+S5Z+T5aCK5Z+W5Z+j5aCL5aCZ5aCd5aGy5aCh5aGi5aGL5aGw5q+A5aGS5aC95aG55aKF5aK55aKf5aKr5aK65aOe5aK75aK45aKu5aOF5aOT5aOR5aOX5aOZ5aOY5aOl5aOc5aOk5aOf5aOv5aO65aO55aO75aO85aO95aSC5aSK5aSQ5aSb5qKm5aSl5aSs5aSt5aSy5aS45aS+56uS5aWV5aWQ5aWO5aWa5aWY5aWi5aWg5aWn5aWs5aWpXCJdLFxuW1wiOWI0MFwiLFwi5aW45aaB5aad5L2e5L6r5aaj5aay5aeG5aeo5aec5aaN5aeZ5aea5ail5aif5aiR5aic5aiJ5aia5amA5ams5amJ5ai15ai25ami5amq5aqa5aq85aq+5auL5auC5aq95auj5auX5aum5aup5auW5au65au75ayM5ayL5ayW5ayy5auQ5ayq5ay25ay+5a2D5a2F5a2A5a2R5a2V5a2a5a2b5a2l5a2p5a2w5a2z5a215a245paI5a265a6AXCJdLFxuW1wiOWI4MFwiLFwi5a6D5a6m5a645a+D5a+H5a+J5a+U5a+Q5a+k5a+m5a+i5a+e5a+l5a+r5a+w5a+25a+z5bCF5bCH5bCI5bCN5bCT5bCg5bCi5bCo5bC45bC55bGB5bGG5bGO5bGT5bGQ5bGP5a2x5bGs5bGu5Lmi5bG25bG55bKM5bKR5bKU5aab5bKr5bK75bK25bK85bK35bOF5bK+5bOH5bOZ5bOp5bO95bO65bOt5baM5bOq5bSL5bSV5bSX5bWc5bSf5bSb5bSR5bSU5bSi5bSa5bSZ5bSY5bWM5bWS5bWO5bWL5bWs5bWz5bW25baH5baE5baC5bai5bad5bas5bau5ba95baQ5ba35ba85beJ5beN5beT5beS5beW5beb5ber5bey5be15biL5bia5biZ5biR5bib5bi25bi35bmE5bmD5bmA5bmO5bmX5bmU5bmf5bmi5bmk5bmH5bm15bm25bm66bq85bm/5bqg5buB5buC5buI5buQ5buPXCJdLFxuW1wiOWM0MFwiLFwi5buW5buj5bud5bua5bub5bui5buh5buo5bup5bus5bux5buz5buw5bu05bu45bu+5byD5byJ5b2d5b2c5byL5byR5byW5byp5byt5by45b2B5b2I5b2M5b2O5byv5b2R5b2W5b2X5b2Z5b2h5b2t5b2z5b235b6D5b6C5b2/5b6K5b6I5b6R5b6H5b6e5b6Z5b6Y5b6g5b6o5b6t5b685b+W5b+75b+k5b+45b+x5b+d5oKz5b+/5oCh5oGgXCJdLFxuW1wiOWM4MFwiLFwi5oCZ5oCQ5oCp5oCO5oCx5oCb5oCV5oCr5oCm5oCP5oC65oGa5oGB5oGq5oG35oGf5oGK5oGG5oGN5oGj5oGD5oGk5oGC5oGs5oGr5oGZ5oKB5oKN5oOn5oKD5oKa5oKE5oKb5oKW5oKX5oKS5oKn5oKL5oOh5oK45oOg5oOT5oK05b+w5oK95oOG5oK15oOY5oWN5oSV5oSG5oO25oO35oSA5oO05oO65oSD5oSh5oO75oOx5oSN5oSO5oWH5oS+5oSo5oSn5oWK5oS/5oS85oSs5oS05oS95oWC5oWE5oWz5oW35oWY5oWZ5oWa5oWr5oW05oWv5oWl5oWx5oWf5oWd5oWT5oW15oaZ5oaW5oaH5oas5oaU5oaa5oaK5oaR5oar5oau5oeM5oeK5oeJ5oe35oeI5oeD5oeG5oa65oeL57255oeN5oem5oej5oe25oe65oe05oe/5oe95oe85oe+5oiA5oiI5oiJ5oiN5oiM5oiU5oibXCJdLFxuW1wiOWQ0MFwiLFwi5oie5oih5oiq5oiu5oiw5oiy5oiz5omB5omO5ome5omj5omb5omg5omo5om85oqC5oqJ5om+5oqS5oqT5oqW5ouU5oqD5oqU5ouX5ouR5oq75ouP5ou/5ouG5pOU5ouI5ouc5ouM5ouK5ouC5ouH5oqb5ouJ5oyM5ouu5oux5oyn5oyC5oyI5ouv5ou15o2Q5oy+5o2N5pCc5o2P5o6W5o6O5o6A5o6r5o225o6j5o6P5o6J5o6f5o615o2rXCJdLFxuW1wiOWQ4MFwiLFwi5o2p5o6+5o+p5o+A5o+G5o+j5o+J5o+S5o+25o+E5pCW5pC05pCG5pCT5pCm5pC25pSd5pCX5pCo5pCP5pGn5pGv5pG25pGO5pSq5pKV5pKT5pKl5pKp5pKI5pK85pOa5pOS5pOF5pOH5pK75pOY5pOC5pOx5pOn6IiJ5pOg5pOh5oqs5pOj5pOv5pSs5pO25pO05pOy5pO65pSA5pO95pSY5pSc5pSF5pSk5pSj5pSr5pS05pS15pS35pS25pS455WL5pWI5pWW5pWV5pWN5pWY5pWe5pWd5pWy5pW45paC5paD6K6K5pab5paf5par5pa35peD5peG5peB5peE5peM5peS5peb5peZ5peg5peh5pex5p2y5piK5piD5pe75p2z5pi15pi25pi05pic5pmP5pmE5pmJ5pmB5pme5pmd5pmk5pmn5pmo5pmf5pmi5pmw5pqD5pqI5pqO5pqJ5pqE5pqY5pqd5puB5pq55puJ5pq+5pq8XCJdLFxuW1wiOWU0MFwiLFwi5puE5pq45puW5pua5pug5pi/5pum5pup5puw5pu15pu35pyP5pyW5pye5pym5pyn6Zy45pyu5py/5py25p2B5py45py35p2G5p2e5p2g5p2Z5p2j5p2k5p6J5p2w5p6p5p285p2q5p6M5p6L5p6m5p6h5p6F5p635p+v5p605p+s5p6z5p+p5p645p+k5p+e5p+d5p+i5p+u5p655p+O5p+G5p+n5qqc5qCe5qGG5qCp5qGA5qGN5qCy5qGOXCJdLFxuW1wiOWU4MFwiLFwi5qKz5qCr5qGZ5qGj5qG35qG/5qKf5qKP5qKt5qKU5qKd5qKb5qKD5qqu5qK55qG05qK15qKg5qK65qSP5qKN5qG+5qSB5qOK5qSI5qOY5qSi5qSm5qOh5qSM5qON5qOU5qOn5qOV5qS25qSS5qSE5qOX5qOj5qSl5qO55qOg5qOv5qSo5qSq5qSa5qSj5qSh5qOG5qW55qW35qWc5qW45qWr5qWU5qW+5qWu5qS55qW05qS95qWZ5qSw5qWh5qWe5qWd5qaB5qWq5qay5qau5qeQ5qa/5qeB5qeT5qa+5qeO5a+o5qeK5qed5qa75qeD5qan5qiu5qaR5qag5qac5qaV5qa05qee5qeo5qiC5qib5qe/5qyK5qe55qey5qen5qiF5qax5qie5qet5qiU5qer5qiK5qiS5quB5qij5qiT5qmE5qiM5qmy5qi25qm45qmH5qmi5qmZ5qmm5qmI5qi45qii5qqQ5qqN5qqg5qqE5qqi5qqjXCJdLFxuW1wiOWY0MFwiLFwi5qqX6JiX5qq75quD5quC5qq45qqz5qqs5que5quR5quf5qqq5qua5quq5qu75qyF6JiW5qu65qyS5qyW6ayx5qyf5qy45qy355uc5qy56aOu5q2H5q2D5q2J5q2Q5q2Z5q2U5q2b5q2f5q2h5q245q255q2/5q6A5q6E5q6D5q6N5q6Y5q6V5q6e5q6k5q6q5q6r5q6v5q6y5q6x5q6z5q635q685q+G5q+L5q+T5q+f5q+s5q+r5q+z5q+vXCJdLFxuW1wiOWY4MFwiLFwi6bq+5rCI5rCT5rCU5rCb5rCk5rCj5rGe5rGV5rGi5rGq5rKC5rKN5rKa5rKB5rKb5rG+5rGo5rGz5rKS5rKQ5rOE5rOx5rOT5rK95rOX5rOF5rOd5rKu5rKx5rK+5rK65rOb5rOv5rOZ5rOq5rSf6KGN5rS25rSr5rS95rS45rSZ5rS15rSz5rSS5rSM5rWj5raT5rWk5rWa5rW55rWZ5raO5raV5r+k5raF5re55riV5riK5ra15reH5rem5ra45reG5res5ree5reM5reo5reS5reF5re65reZ5rek5reV5req5reu5rit5rmu5riu5riZ5rmy5rmf5ri+5rij5rmr5rir5rm25rmN5rif5rmD5ri65rmO5rik5ru/5rid5ri45rqC5rqq5rqY5ruJ5rq35ruT5rq95rqv5ruE5rqy5ruU5ruV5rqP5rql5ruC5rqf5r2B5ryR54GM5rus5ru45ru+5ry/5ruy5ryx5ruv5ryy5ruMXCJdLFxuW1wiZTA0MFwiLFwi5ry+5ryT5ru35r6G5r265r245r6B5r6A5r2v5r2b5r+z5r2t5r6C5r285r2Y5r6O5r6R5r+C5r2m5r6z5r6j5r6h5r6k5r655r+G5r6q5r+f5r+V5r+s5r+U5r+Y5r+x5r+u5r+b54CJ54CL5r+654CR54CB54CP5r++54Cb54Ca5r2054Cd54CY54Cf54Cw54C+54Cy54GR54Gj54KZ54KS54Kv54Ox54Ks54K454Kz54Ku54Of54OL54OdXCJdLFxuW1wiZTA4MFwiLFwi54OZ54SJ54O954Sc54SZ54Wl54WV54aI54Wm54Wi54WM54WW54Ws54aP54e754aE54aV54ao54as54eX54a554a+54eS54eJ54eU54eO54eg54es54en54e154e854e554e/54iN54iQ54ib54io54it54is54iw54iy54i754i854i/54mA54mG54mL54mY54m054m+54qC54qB54qH54qS54qW54qi54qn54q554qy54uD54uG54uE54uO54uS54ui54ug54uh54u554u35YCP54yX54yK54yc54yW54yd54y054yv54yp54yl54y+542O542P6buY542X542q542o542w542454215427542654+I546z54+O546754+A54+l54+u54+e55Ki55CF55Gv55Cl54+455Cy55C655GV55C/55Gf55GZ55GB55Gc55Gp55Gw55Gj55Gq55G255G+55KL55Ke55Kn55OK55OP55OU54+xXCJdLFxuW1wiZTE0MFwiLFwi55Og55Oj55On55Op55Ou55Oy55Ow55Ox55O455O355SE55SD55SF55SM55SO55SN55SV55ST55Se55Sm55Ss55S855WE55WN55WK55WJ55Wb55WG55Wa55Wp55Wk55Wn55Wr55Wt55W455W255aG55aH55W055aK55aJ55aC55aU55aa55ad55al55aj55eC55az55eD55a155a955a455a855ax55eN55eK55eS55eZ55ej55ee55e+55e/XCJdLFxuW1wiZTE4MFwiLFwi55e855iB55ew55e655ey55ez55iL55iN55iJ55if55in55ig55ih55ii55ik55i055iw55i755mH55mI55mG55mc55mY55mh55mi55mo55mp55mq55mn55ms55mw55my55m255m455m855qA55qD55qI55qL55qO55qW55qT55qZ55qa55qw55q055q455q555q655uC55uN55uW55uS55ue55uh55ul55un55uq6Jiv55u755yI55yH55yE55yp55yk55ye55yl55ym55yb55y355y4552H552a552o552r552b552l552/552+5525556O556L556R556g556e556w55625565556/55685569556755+H55+N55+X55+a55+c55+j55+u55+856CM56CS56Sm56Cg56Sq56GF56KO56G056KG56G856Ka56KM56Kj56K156Kq56Kv56OR56OG56OL56OU56K+56K856OF56OK56OsXCJdLFxuW1wiZTI0MFwiLFwi56On56Oa56O956O056SH56SS56SR56SZ56Ss56Sr56WA56Wg56WX56Wf56Wa56WV56WT56W656W/56aK56ad56an6b2L56aq56au56az56a556a656eJ56eV56en56es56eh56ej56iI56iN56iY56iZ56ig56if56aA56ix56i756i+56i356mD56mX56mJ56mh56mi56mp6b6d56mw56m556m956qI56qX56qV56qY56qW56qp56uI56qwXCJdLFxuW1wiZTI4MFwiLFwi56q256uF56uE56q/6YKD56uH56uK56uN56uP56uV56uT56uZ56ua56ud56uh56ui56um56ut56uw56yC56yP56yK56yG56yz56yY56yZ56ye56y156yo56y2562Q562656yE562N56yL562M562F5621562l5620562n562w562x562s562u566d566Y566f566N566c566a566L566S566P562d566Z56+L56+B56+M56+P566056+G56+d56+p57CR57CU56+m56+l57Gg57CA57CH57CT56+z56+357CX57CN56+257Cj57Cn57Cq57Cf57C357Cr57C957GM57GD57GU57GP57GA57GQ57GY57Gf57Gk57GW57Gl57Gs57G157KD57KQ57Kk57Kt57Ki57Kr57Kh57Ko57Kz57Ky57Kx57Ku57K557K957OA57OF57OC57OY57OS57Oc57Oi6ay757Ov57Oy57O057O257O657SGXCJdLFxuW1wiZTM0MFwiLFwi57SC57Sc57SV57SK57WF57WL57Su57Sy57S/57S157WG57Wz57WW57WO57Wy57Wo57Wu57WP57Wj57aT57aJ57Wb57aP57W957ab57a657au57aj57a157eH57a957ar57i957ai57av57ec57a457af57aw57eY57ed57ek57ee57e757ey57eh57iF57iK57ij57ih57iS57ix57if57iJ57iL57ii57mG57mm57i757i157i557mD57i3XCJdLFxuW1wiZTM4MFwiLFwi57iy57i657mn57md57mW57me57mZ57ma57m557mq57mp57m857m757qD57eV57m96L6u57m/57qI57qJ57qM57qS57qQ57qT57qU57qW57qO57qb57qc57y457y6572F572M572N572O572Q572R572V572U572Y572f572g572o572p572n5724576C576G576D576I576H576M576U576e576d576a576j576v576y5765576u576257646K2x57+F57+G57+K57+V57+U57+h57+m57+p57+z57+56aOc6ICG6ICE6ICL6ICS6ICY6ICZ6ICc6ICh6ICo6IC/6IC76IGK6IGG6IGS6IGY6IGa6IGf6IGi6IGo6IGz6IGy6IGw6IG26IG56IG96IG/6IKE6IKG6IKF6IKb6IKT6IKa6IKt5YaQ6IKs6IOb6IOl6IOZ6IOd6IOE6IOa6IOW6ISJ6IOv6IOx6ISb6ISp6ISj6ISv6IWLXCJdLFxuW1wiZTQ0MFwiLFwi6ZqL6IWG6IS+6IWT6IWR6IO86IWx6IWu6IWl6IWm6IW06IaD6IaI6IaK6IaA6IaC6Iag6IaV6Iak6Iaj6IWf6IaT6Iap6Iaw6Ia16Ia+6Ia46Ia96IeA6IeC6Ia66IeJ6IeN6IeR6IeZ6IeY6IeI6Iea6Ief6Ieg6Ien6Ie66Ie76Ie+6IiB6IiC6IiF6IiH6IiK6IiN6IiQ6IiW6Iip6Iir6Ii46Iiz6ImA6ImZ6ImY6Imd6Ima6Imf6ImkXCJdLFxuW1wiZTQ4MFwiLFwi6Imi6Imo6Imq6Imr6Iiu6Imx6Im36Im46Im+6IqN6IqS6Iqr6Iqf6Iq76Iqs6Iuh6Iuj6Iuf6IuS6Iu06Iuz6Iu66I6T6IyD6Iu76Iu56Iue6IyG6Iuc6IyJ6IuZ6Iy16Iy06IyW6Iyy6Iyx6I2A6Iy56I2Q6I2F6Iyv6Iyr6IyX6IyY6I6F6I6a6I6q6I6f6I6i6I6W6Iyj6I6O6I6H6I6K6I286I616I2z6I216I6g6I6J6I6o6I+06JCT6I+r6I+O6I+96JCD6I+Y6JCL6I+B6I+36JCH6I+g6I+y6JCN6JCi6JCg6I696JC46JSG6I+76JGt6JCq6JC86JWa6JKE6JG36JGr6JKt6JGu6JKC6JGp6JGG6JCs6JGv6JG56JC16JOK6JGi6JK56JK/6JKf6JOZ6JON6JK76JOa6JOQ6JOB6JOG6JOW6JKh6JSh6JO/6JO06JSX6JSY6JSs6JSf6JSV6JSU6JO86JWA6JWj6JWY6JWIXCJdLFxuW1wiZTU0MFwiLFwi6JWB6JiC6JWL6JWV6JaA6Jak6JaI6JaR6JaK6Jao6JWt6JaU6Jab6Jeq6JaH6Jac6JW36JW+6JaQ6JeJ6Ja66JeP6Ja56JeQ6JeV6Jed6Jel6Jec6Je56JiK6JiT6JiL6Je+6Je66JiG6Jii6Jia6Jiw6Ji/6JmN5LmV6JmU6Jmf6Jmn6Jmx6JqT6Jqj6Jqp6Jqq6JqL6JqM6Jq26Jqv6JuE6JuG6Jqw6JuJ6KCj6Jqr6JuU6Jue6Jup6JusXCJdLFxuW1wiZTU4MFwiLFwi6Juf6Jub6Juv6JyS6JyG6JyI6JyA6JyD6Ju76JyR6JyJ6JyN6Ju56JyK6Jy06Jy/6Jy36Jy76Jyl6Jyp6Jya6J2g6J2f6J246J2M6J2O6J206J2X6J2o6J2u6J2Z6J2T6J2j6J2q6KCF6J6i6J6f6J6C6J6v6J+L6J696J+A6J+Q6ZuW6J6r6J+E6J6z6J+H6J+G6J676J+v6J+y6J+g6KCP6KCN6J++6J+26J+36KCO6J+S6KCR6KCW6KCV6KCi6KCh6KCx6KC26KC56KCn6KC76KGE6KGC6KGS6KGZ6KGe6KGi6KGr6KKB6KG+6KKe6KG16KG96KK16KGy6KKC6KKX6KKS6KKu6KKZ6KKi6KKN6KKk6KKw6KK/6KKx6KOD6KOE6KOU6KOY6KOZ6KOd6KO56KSC6KO86KO06KOo6KOy6KSE6KSM6KSK6KST6KWD6KSe6KSl6KSq6KSr6KWB6KWE6KS76KS26KS46KWM6KSd6KWg6KWeXCJdLFxuW1wiZTY0MFwiLFwi6KWm6KWk6KWt6KWq6KWv6KW06KW36KW+6KaD6KaI6KaK6KaT6KaY6Kah6Kap6Kam6Kas6Kav6Kay6Ka66Ka96Ka/6KeA6Kea6Kec6Ked6Ken6Ke06Ke46KiD6KiW6KiQ6KiM6Kib6Kid6Kil6Ki26KmB6Kmb6KmS6KmG6KmI6Km86Kmt6Kms6Kmi6KqF6KqC6KqE6Kqo6Kqh6KqR6Kql6Kqm6Kqa6Kqj6KuE6KuN6KuC6Kua6Kur6Kuz6KunXCJdLFxuW1wiZTY4MFwiLFwi6Kuk6Kux6KyU6Kug6Kui6Ku36Kue6Kub6KyM6KyH6Kya6Kuh6KyW6KyQ6KyX6Kyg6Kyz6Z6r6Kym6Kyr6Ky+6Kyo6K2B6K2M6K2P6K2O6K2J6K2W6K2b6K2a6K2r6K2f6K2s6K2v6K206K296K6A6K6M6K6O6K6S6K6T6K6W6K6Z6K6a6LC66LGB6LC/6LGI6LGM6LGO6LGQ6LGV6LGi6LGs6LG46LG66LKC6LKJ6LKF6LKK6LKN6LKO6LKU6LG86LKY5oid6LKt6LKq6LK96LKy6LKz6LKu6LK26LOI6LOB6LOk6LOj6LOa6LO96LO66LO76LSE6LSF6LSK6LSH6LSP6LSN6LSQ6b2O6LST6LON6LSU6LSW6LWn6LWt6LWx6LWz6LaB6LaZ6LeC6La+6La66LeP6Lea6LeW6LeM6Leb6LeL6Leq6Ler6Lef6Lej6Le86LiI6LiJ6Le/6Lid6Lie6LiQ6Lif6LmC6Li16Liw6Li06LmKXCJdLFxuW1wiZTc0MFwiLFwi6LmH6LmJ6LmM6LmQ6LmI6LmZ6Lmk6Lmg6Liq6Lmj6LmV6Lm26Lmy6Lm86LqB6LqH6LqF6LqE6LqL6LqK6LqT6LqR6LqU6LqZ6Lqq6Lqh6Lqs6Lqw6LuG6Lqx6Lq+6LuF6LuI6LuL6Lub6Luj6Lu86Lu76Lur6Lu+6LyK6LyF6LyV6LyS6LyZ6LyT6Lyc6Lyf6Lyb6LyM6Lym6Lyz6Ly76Ly56L2F6L2C6Ly+6L2M6L2J6L2G6L2O6L2X6L2cXCJdLFxuW1wiZTc4MFwiLFwi6L2i6L2j6L2k6L6c6L6f6L6j6L6t6L6v6L636L+a6L+l6L+i6L+q6L+v6YKH6L+06YCF6L+56L+66YCR6YCV6YCh6YCN6YCe6YCW6YCL6YCn6YC26YC16YC56L+46YGP6YGQ6YGR6YGS6YCO6YGJ6YC+6YGW6YGY6YGe6YGo6YGv6YG26Zqo6YGy6YKC6YG96YKB6YKA6YKK6YKJ6YKP6YKo6YKv6YKx6YK16YOi6YOk5omI6YOb6YSC6YSS6YSZ6YSy6YSw6YWK6YWW6YWY6YWj6YWl6YWp6YWz6YWy6YaL6YaJ6YaC6Yai6Yar6Yav6Yaq6Ya16Ya06Ya66YeA6YeB6YeJ6YeL6YeQ6YeW6Yef6Yeh6Yeb6Ye86Ye16Ye26Yie6Ye/6YiU6Yis6YiV6YiR6Yme6YmX6YmF6YmJ6Ymk6YmI6YqV6Yi/6YmL6YmQ6Yqc6YqW6YqT6Yqb6Yma6YuP6Yq56Yq36Yup6YyP6Yu66Y2E6YyuXCJdLFxuW1wiZTg0MFwiLFwi6YyZ6Yyi6Yya6Yyj6Yy66Yy16Yy76Y2c6Y2g6Y286Y2u6Y2W6Y6w6Y6s6Y6t6Y6U6Y656Y+W6Y+X6Y+o6Y+l6Y+Y6Y+D6Y+d6Y+Q6Y+I6Y+k6ZCa6ZCU6ZCT6ZCD6ZCH6ZCQ6ZC26ZCr6ZC16ZCh6ZC66ZGB6ZGS6ZGE6ZGb6ZGg6ZGi6ZGe6ZGq6Yip6ZGw6ZG16ZG36ZG96ZGa6ZG86ZG+6ZKB6ZG/6ZaC6ZaH6ZaK6ZaU6ZaW6ZaY6ZaZXCJdLFxuW1wiZTg4MFwiLFwi6Zag6Zao6Zan6Zat6Za86Za76Za56Za+6ZeK5r+26ZeD6ZeN6ZeM6ZeV6ZeU6ZeW6Zec6Zeh6Zel6Zei6Zih6Zio6Ziu6Ziv6ZmC6ZmM6ZmP6ZmL6Zm36Zmc6Zme6Zmd6Zmf6Zmm6Zmy6Zms6ZqN6ZqY6ZqV6ZqX6Zqq6Zqn6Zqx6Zqy6Zqw6Zq06Zq26Zq46Zq56ZuO6ZuL6ZuJ6ZuN6KWN6Zuc6ZyN6ZuV6Zu56ZyE6ZyG6ZyI6ZyT6ZyO6ZyR6ZyP6ZyW6ZyZ6Zyk6Zyq6Zyw6Zy56Zy96Zy+6Z2E6Z2G6Z2I6Z2C6Z2J6Z2c6Z2g6Z2k6Z2m6Z2o5YuS6Z2r6Z2x6Z256Z6F6Z286Z6B6Z266Z6G6Z6L6Z6P6Z6Q6Z6c6Z6o6Z6m6Z6j6Z6z6Z606Z+D6Z+G6Z+I6Z+L6Z+c6Z+t6b2P6Z+y56uf6Z+26Z+16aCP6aCM6aC46aCk6aCh6aC36aC96aGG6aGP6aGL6aGr6aGv6aGwXCJdLFxuW1wiZTk0MFwiLFwi6aGx6aG06aGz6aKq6aKv6aKx6aK26aOE6aOD6aOG6aOp6aOr6aSD6aSJ6aSS6aSU6aSY6aSh6aSd6aSe6aSk6aSg6aSs6aSu6aS96aS+6aWC6aWJ6aWF6aWQ6aWL6aWR6aWS6aWM6aWV6aaX6aaY6aal6aat6aau6aa86aef6aeb6aed6aeY6aeR6aet6aeu6aex6aey6ae76ae46aiB6aiP6aiF6aei6aiZ6air6ai36amF6amC6amA6amDXCJdLFxuW1wiZTk4MFwiLFwi6ai+6amV6amN6amb6amX6amf6ami6aml6amk6amp6amr6amq6aqt6aqw6aq86auA6auP6auR6auT6auU6aue6auf6aui6auj6aum6auv6aur6auu6au06aux6au36au76ayG6ayY6aya6ayf6ayi6ayj6ayl6ayn6ayo6ayp6ayq6ayu6ayv6ayy6a2E6a2D6a2P6a2N6a2O6a2R6a2Y6a206a6T6a6D6a6R6a6W6a6X6a6f6a6g6a6o6a606a+A6a+K6a656a+G6a+P6a+R6a+S6a+j6a+i6a+k6a+U6a+h6bC66a+y6a+x6a+w6bCV6bCU6bCJ6bCT6bCM6bCG6bCI6bCS6bCK6bCE6bCu6bCb6bCl6bCk6bCh6bCw6bGH6bCy6bGG6bC+6bGa6bGg6bGn6bG26bG46bOn6bOs6bOw6bSJ6bSI6bOr6bSD6bSG6bSq6bSm6bav6bSj6bSf6bWE6bSV6bSS6bWB6bS/6bS+6bWG6bWIXCJdLFxuW1wiZWE0MFwiLFwi6bWd6bWe6bWk6bWR6bWQ6bWZ6bWy6baJ6baH6bar6bWv6bW66baa6bak6bap6bay6beE6beB6ba76ba46ba66beG6beP6beC6beZ6beT6be46bem6bet6bev6be96bia6bib6bie6bm16bm56bm96bqB6bqI6bqL6bqM6bqS6bqV6bqR6bqd6bql6bqp6bq46bqq6bqt6Z2h6buM6buO6buP6buQ6buU6buc6bue6bud6bug6bul6buo6buvXCJdLFxuW1wiZWE4MFwiLFwi6bu06bu26bu36bu56bu76bu86bu96byH6byI55q36byV6byh6bys6by+6b2K6b2S6b2U6b2j6b2f6b2g6b2h6b2m6b2n6b2s6b2q6b236b2y6b226b6V6b6c6b6g5aCv5qeH6YGZ55Gk5Yec54aZXCJdLFxuW1wiZWQ0MFwiLFwi57qK6KSc6Y2I6YqI6JOc5L+J54K75pix5qOI6Yu55pu75b2F5Lio5Luh5Lu85LyA5LyD5Ly55L2W5L6S5L6K5L6a5L6U5L+N5YGA5YCi5L+/5YCe5YGG5YGw5YGC5YKU5YO05YOY5YWK5YWk5Yad5Ya+5Yes5YiV5Yqc5Yqm5YuA5Yub5YyA5YyH5Yyk5Y2y5Y6T5Y6y5Y+d76iO5ZKc5ZKK5ZKp5ZO/5ZaG5Z2Z5Z2l5Z6s5Z+I5Z+H76iPXCJdLFxuW1wiZWQ4MFwiLFwi76iQ5aKe5aKy5aSL5aWT5aWb5aWd5aWj5aak5aa65a2W5a+A55Sv5a+Y5a+s5bCe5bKm5bK65bO15bSn5bWT76iR5bWC5bWt5ba45ba55beQ5byh5by05b2n5b635b+e5oGd5oKF5oKK5oOe5oOV5oSg5oOy5oSR5oS35oSw5oaY5oiT5oqm5o+15pGg5pKd5pOO5pWO5piA5piV5pi75piJ5piu5pie5pik5pml5pmX5pmZ76iS5pmz5pqZ5pqg5pqy5pq/5pu65pyO76Sp5p2m5p675qGS5p+A5qCB5qGE5qOP76iT5qWo76iU5qaY5qei5qiw5qmr5qmG5qmz5qm+5qui5quk5q+W5rC/5rGc5rKG5rGv5rOa5rSE5raH5rWv5raW5ras5reP5re45rey5re85ri55rmc5rin5ri85rq/5r6I5r615r+154CF54CH54Co54KF54Kr54SP54SE54Wc54WG54WH76iV54eB54e+54qxXCJdLFxuW1wiZWU0MFwiLFwi54q+54yk76iW5423546954+J54+W54+j54+S55CH54+155Cm55Cq55Cp55Cu55Gi55KJ55Kf55SB55Wv55qC55qc55qe55qb55qm76iX552G5Yqv56Ch56GO56Gk56G656Sw76iY76iZ76ia56aU76ib56ab56uR56un76ic56ur566e76id57WI57Wc57a357ag57eW57mS572H576h76ie6IyB6I2i6I2/6I+H6I+26JGI6JK06JWT6JWZXCJdLFxuW1wiZWU4MFwiLFwi6JWr76if6Jaw76ig76ih6KCH6KO16KiS6Ki36Km56Kqn6Kq+6Kuf76ii6Ku26K2T6K2/6LOw6LO06LSS6LW276ij6LuP76ik76il6YGn6YOe76im6YSV6YSn6Yea6YeX6Yee6Yet6Yeu6Yek6Yel6YiG6YiQ6YiK6Yi66YmA6Yi86YmO6YmZ6YmR6Yi56Ymn6Yqn6Ym36Ym46Yun6YuX6YuZ6YuQ76in6YuV6Yug6YuT6Yyl6Yyh6Yu776io6Yye6Yu/6Yyd6YyC6Y2w6Y2X6Y6k6Y+G6Y+e6Y+46ZCx6ZGF6ZGI6ZaS76ec76ip6Zqd6Zqv6Zyz6Zy76Z2D6Z2N6Z2P6Z2R6Z2V6aGX6aGl76iq76ir6aSn76is6aae6amO6auZ6auc6a216a2y6a6P6a6x6a676bCA6bWw6bWr76it6biZ6buRXCJdLFxuW1wiZWVlZlwiLFwi4oWwXCIsOSxcIu+/ou+/pO+8h++8glwiXSxcbltcImYwNDBcIixcIu6AgFwiLDYyXSxcbltcImYwODBcIixcIu6Av1wiLDEyNF0sXG5bXCJmMTQwXCIsXCLugrxcIiw2Ml0sXG5bXCJmMTgwXCIsXCLug7tcIiwxMjRdLFxuW1wiZjI0MFwiLFwi7oW4XCIsNjJdLFxuW1wiZjI4MFwiLFwi7oa3XCIsMTI0XSxcbltcImYzNDBcIixcIu6ItFwiLDYyXSxcbltcImYzODBcIixcIu6Js1wiLDEyNF0sXG5bXCJmNDQwXCIsXCLui7BcIiw2Ml0sXG5bXCJmNDgwXCIsXCLujK9cIiwxMjRdLFxuW1wiZjU0MFwiLFwi7o6sXCIsNjJdLFxuW1wiZjU4MFwiLFwi7o+rXCIsMTI0XSxcbltcImY2NDBcIixcIu6RqFwiLDYyXSxcbltcImY2ODBcIixcIu6Sp1wiLDEyNF0sXG5bXCJmNzQwXCIsXCLulKRcIiw2Ml0sXG5bXCJmNzgwXCIsXCLulaNcIiwxMjRdLFxuW1wiZjg0MFwiLFwi7pegXCIsNjJdLFxuW1wiZjg4MFwiLFwi7pifXCIsMTI0XSxcbltcImY5NDBcIixcIu6anFwiXSxcbltcImZhNDBcIixcIuKFsFwiLDksXCLihaBcIiw5LFwi77+i77+k77yH77yC44ix4oSW4oSh4oi157qK6KSc6Y2I6YqI6JOc5L+J54K75pix5qOI6Yu55pu75b2F5Lio5Luh5Lu85LyA5LyD5Ly55L2W5L6S5L6K5L6a5L6U5L+N5YGA5YCi5L+/5YCe5YGG5YGw5YGC5YKU5YO05YOY5YWKXCJdLFxuW1wiZmE4MFwiLFwi5YWk5Yad5Ya+5Yes5YiV5Yqc5Yqm5YuA5Yub5YyA5YyH5Yyk5Y2y5Y6T5Y6y5Y+d76iO5ZKc5ZKK5ZKp5ZO/5ZaG5Z2Z5Z2l5Z6s5Z+I5Z+H76iP76iQ5aKe5aKy5aSL5aWT5aWb5aWd5aWj5aak5aa65a2W5a+A55Sv5a+Y5a+s5bCe5bKm5bK65bO15bSn5bWT76iR5bWC5bWt5ba45ba55beQ5byh5by05b2n5b635b+e5oGd5oKF5oKK5oOe5oOV5oSg5oOy5oSR5oS35oSw5oaY5oiT5oqm5o+15pGg5pKd5pOO5pWO5piA5piV5pi75piJ5piu5pie5pik5pml5pmX5pmZ76iS5pmz5pqZ5pqg5pqy5pq/5pu65pyO76Sp5p2m5p675qGS5p+A5qCB5qGE5qOP76iT5qWo76iU5qaY5qei5qiw5qmr5qmG5qmz5qm+5qui5quk5q+W5rC/5rGc5rKG5rGv5rOa5rSE5raH5rWvXCJdLFxuW1wiZmI0MFwiLFwi5raW5ras5reP5re45rey5re85ri55rmc5rin5ri85rq/5r6I5r615r+154CF54CH54Co54KF54Kr54SP54SE54Wc54WG54WH76iV54eB54e+54qx54q+54yk76iW5423546954+J54+W54+j54+S55CH54+155Cm55Cq55Cp55Cu55Gi55KJ55Kf55SB55Wv55qC55qc55qe55qb55qm76iX552G5Yqv56Ch56GO56Gk56G656Sw76iY76iZXCJdLFxuW1wiZmI4MFwiLFwi76ia56aU76ib56ab56uR56un76ic56ur566e76id57WI57Wc57a357ag57eW57mS572H576h76ie6IyB6I2i6I2/6I+H6I+26JGI6JK06JWT6JWZ6JWr76if6Jaw76ig76ih6KCH6KO16KiS6Ki36Km56Kqn6Kq+6Kuf76ii6Ku26K2T6K2/6LOw6LO06LSS6LW276ij6LuP76ik76il6YGn6YOe76im6YSV6YSn6Yea6YeX6Yee6Yet6Yeu6Yek6Yel6YiG6YiQ6YiK6Yi66YmA6Yi86YmO6YmZ6YmR6Yi56Ymn6Yqn6Ym36Ym46Yun6YuX6YuZ6YuQ76in6YuV6Yug6YuT6Yyl6Yyh6Yu776io6Yye6Yu/6Yyd6YyC6Y2w6Y2X6Y6k6Y+G6Y+e6Y+46ZCx6ZGF6ZGI6ZaS76ec76ip6Zqd6Zqv6Zyz6Zy76Z2D6Z2N6Z2P6Z2R6Z2V6aGX6aGl76iq76ir6aSn76is6aae6amO6auZXCJdLFxuW1wiZmM0MFwiLFwi6auc6a216a2y6a6P6a6x6a676bCA6bWw6bWr76it6biZ6buRXCJdXG5dXG4iLCJcInVzZSBzdHJpY3RcIlxuXG4vLyA9PSBVVEYxNi1CRSBjb2RlYy4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnRzLnV0ZjE2YmUgPSBVdGYxNkJFQ29kZWM7XG5mdW5jdGlvbiBVdGYxNkJFQ29kZWMoKSB7XG59XG5cblV0ZjE2QkVDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjE2QkVFbmNvZGVyO1xuVXRmMTZCRUNvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmMTZCRURlY29kZXI7XG5VdGYxNkJFQ29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcblxuXG4vLyAtLSBFbmNvZGluZ1xuXG5mdW5jdGlvbiBVdGYxNkJFRW5jb2RlcigpIHtcbn1cblxuVXRmMTZCRUVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIGJ1ZiA9IG5ldyBCdWZmZXIoc3RyLCAndWNzMicpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHZhciB0bXAgPSBidWZbaV07IGJ1ZltpXSA9IGJ1ZltpKzFdOyBidWZbaSsxXSA9IHRtcDtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuVXRmMTZCRUVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xufVxuXG5cbi8vIC0tIERlY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjE2QkVEZWNvZGVyKCkge1xuICAgIHRoaXMub3ZlcmZsb3dCeXRlID0gLTE7XG59XG5cblV0ZjE2QkVEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIGlmIChidWYubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiAnJztcblxuICAgIHZhciBidWYyID0gbmV3IEJ1ZmZlcihidWYubGVuZ3RoICsgMSksXG4gICAgICAgIGkgPSAwLCBqID0gMDtcblxuICAgIGlmICh0aGlzLm92ZXJmbG93Qnl0ZSAhPT0gLTEpIHtcbiAgICAgICAgYnVmMlswXSA9IGJ1ZlswXTtcbiAgICAgICAgYnVmMlsxXSA9IHRoaXMub3ZlcmZsb3dCeXRlO1xuICAgICAgICBpID0gMTsgaiA9IDI7XG4gICAgfVxuXG4gICAgZm9yICg7IGkgPCBidWYubGVuZ3RoLTE7IGkgKz0gMiwgais9IDIpIHtcbiAgICAgICAgYnVmMltqXSA9IGJ1ZltpKzFdO1xuICAgICAgICBidWYyW2orMV0gPSBidWZbaV07XG4gICAgfVxuXG4gICAgdGhpcy5vdmVyZmxvd0J5dGUgPSAoaSA9PSBidWYubGVuZ3RoLTEpID8gYnVmW2J1Zi5sZW5ndGgtMV0gOiAtMTtcblxuICAgIHJldHVybiBidWYyLnNsaWNlKDAsIGopLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cblV0ZjE2QkVEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vLyA9PSBVVEYtMTYgY29kZWMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjb2RlciBjaG9vc2VzIGF1dG9tYXRpY2FsbHkgZnJvbSBVVEYtMTZMRSBhbmQgVVRGLTE2QkUgdXNpbmcgQk9NIGFuZCBzcGFjZS1iYXNlZCBoZXVyaXN0aWMuXG4vLyBEZWZhdWx0cyB0byBVVEYtMTZMRSwgYXMgaXQncyBwcmV2YWxlbnQgYW5kIGRlZmF1bHQgaW4gTm9kZS5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTE2IGFuZCBodHRwOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtMTZsZVxuLy8gRGVjb2RlciBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkOiBpY29udi5kZWNvZGUoYnVmLCAndXRmMTYnLCB7ZGVmYXVsdEVuY29kaW5nOiAndXRmLTE2YmUnfSk7XG5cbi8vIEVuY29kZXIgdXNlcyBVVEYtMTZMRSBhbmQgcHJlcGVuZHMgQk9NICh3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIGFkZEJPTTogZmFsc2UpLlxuXG5leHBvcnRzLnV0ZjE2ID0gVXRmMTZDb2RlYztcbmZ1bmN0aW9uIFV0ZjE2Q29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuaWNvbnYgPSBpY29udjtcbn1cblxuVXRmMTZDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjE2RW5jb2RlcjtcblV0ZjE2Q29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGYxNkRlY29kZXI7XG5cblxuLy8gLS0gRW5jb2RpbmcgKHBhc3MtdGhyb3VnaClcblxuZnVuY3Rpb24gVXRmMTZFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKG9wdGlvbnMuYWRkQk9NID09PSB1bmRlZmluZWQpXG4gICAgICAgIG9wdGlvbnMuYWRkQk9NID0gdHJ1ZTtcbiAgICB0aGlzLmVuY29kZXIgPSBjb2RlYy5pY29udi5nZXRFbmNvZGVyKCd1dGYtMTZsZScsIG9wdGlvbnMpO1xufVxuXG5VdGYxNkVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShzdHIpO1xufVxuXG5VdGYxNkVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmVuY29kZXIuZW5kKCk7XG59XG5cblxuLy8gLS0gRGVjb2RpbmdcblxuZnVuY3Rpb24gVXRmMTZEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgICB0aGlzLmluaXRpYWxCeXRlcyA9IFtdO1xuICAgIHRoaXMuaW5pdGlhbEJ5dGVzTGVuID0gMDtcblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xufVxuXG5VdGYxNkRlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgaWYgKCF0aGlzLmRlY29kZXIpIHtcbiAgICAgICAgLy8gQ29kZWMgaXMgbm90IGNob3NlbiB5ZXQuIEFjY3VtdWxhdGUgaW5pdGlhbCBieXRlcy5cbiAgICAgICAgdGhpcy5pbml0aWFsQnl0ZXMucHVzaChidWYpO1xuICAgICAgICB0aGlzLmluaXRpYWxCeXRlc0xlbiArPSBidWYubGVuZ3RoO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbEJ5dGVzTGVuIDwgMTYpIC8vIFdlIG5lZWQgbW9yZSBieXRlcyB0byB1c2Ugc3BhY2UgaGV1cmlzdGljIChzZWUgYmVsb3cpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG5cbiAgICAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggYnl0ZXMgLT4gZGV0ZWN0IGVuZGlhbm5lc3MuXG4gICAgICAgIHZhciBidWYgPSBCdWZmZXIuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxcbiAgICAgICAgICAgIGVuY29kaW5nID0gZGV0ZWN0RW5jb2RpbmcoYnVmLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gdGhpcy5pY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGggPSB0aGlzLmluaXRpYWxCeXRlc0xlbiA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZShidWYpO1xufVxuXG5VdGYxNkRlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5kZWNvZGVyKSB7XG4gICAgICAgIHZhciBidWYgPSBCdWZmZXIuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxcbiAgICAgICAgICAgIGVuY29kaW5nID0gZGV0ZWN0RW5jb2RpbmcoYnVmLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gdGhpcy5pY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgICAgIHZhciByZXMgPSB0aGlzLmRlY29kZXIud3JpdGUoYnVmKSxcbiAgICAgICAgICAgIHRyYWlsID0gdGhpcy5kZWNvZGVyLmVuZCgpO1xuXG4gICAgICAgIHJldHVybiB0cmFpbCA/IChyZXMgKyB0cmFpbCkgOiByZXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZXIuZW5kKCk7XG59XG5cbmZ1bmN0aW9uIGRldGVjdEVuY29kaW5nKGJ1ZiwgZGVmYXVsdEVuY29kaW5nKSB7XG4gICAgdmFyIGVuYyA9IGRlZmF1bHRFbmNvZGluZyB8fCAndXRmLTE2bGUnO1xuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPj0gMikge1xuICAgICAgICAvLyBDaGVjayBCT00uXG4gICAgICAgIGlmIChidWZbMF0gPT0gMHhGRSAmJiBidWZbMV0gPT0gMHhGRikgLy8gVVRGLTE2QkUgQk9NXG4gICAgICAgICAgICBlbmMgPSAndXRmLTE2YmUnO1xuICAgICAgICBlbHNlIGlmIChidWZbMF0gPT0gMHhGRiAmJiBidWZbMV0gPT0gMHhGRSkgLy8gVVRGLTE2TEUgQk9NXG4gICAgICAgICAgICBlbmMgPSAndXRmLTE2bGUnO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIEJPTSBmb3VuZC4gVHJ5IHRvIGRlZHVjZSBlbmNvZGluZyBmcm9tIGluaXRpYWwgY29udGVudC5cbiAgICAgICAgICAgIC8vIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBjb250ZW50IGhhcyBBU0NJSSBjaGFycyAoVSswMCoqKSwgYnV0IHRoZSBvcHBvc2l0ZSAoVSsqKjAwKSBpcyB1bmNvbW1vbi5cbiAgICAgICAgICAgIC8vIFNvLCB3ZSBjb3VudCBBU0NJSSBhcyBpZiBpdCB3YXMgTEUgb3IgQkUsIGFuZCBkZWNpZGUgZnJvbSB0aGF0LlxuICAgICAgICAgICAgdmFyIGFzY2lpQ2hhcnNMRSA9IDAsIGFzY2lpQ2hhcnNCRSA9IDAsIC8vIENvdW50cyBvZiBjaGFycyBpbiBib3RoIHBvc2l0aW9uc1xuICAgICAgICAgICAgICAgIF9sZW4gPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gKGJ1Zi5sZW5ndGggJSAyKSwgNjQpOyAvLyBMZW4gaXMgYWx3YXlzIGV2ZW4uXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2xlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PT0gMCAmJiBidWZbaSsxXSAhPT0gMCkgYXNjaWlDaGFyc0JFKys7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSAhPT0gMCAmJiBidWZbaSsxXSA9PT0gMCkgYXNjaWlDaGFyc0xFKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhc2NpaUNoYXJzQkUgPiBhc2NpaUNoYXJzTEUpXG4gICAgICAgICAgICAgICAgZW5jID0gJ3V0Zi0xNmJlJztcbiAgICAgICAgICAgIGVsc2UgaWYgKGFzY2lpQ2hhcnNCRSA8IGFzY2lpQ2hhcnNMRSlcbiAgICAgICAgICAgICAgICBlbmMgPSAndXRmLTE2bGUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuYztcbn1cblxuXG4iLCJcInVzZSBzdHJpY3RcIlxuXG4vLyBVVEYtNyBjb2RlYywgYWNjb3JkaW5nIHRvIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMTUyXG4vLyBTZWUgYWxzbyBiZWxvdyBhIFVURi03LUlNQVAgY29kZWMsIGFjY29yZGluZyB0byBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNTAxI3NlY3Rpb24tNS4xLjNcblxuZXhwb3J0cy51dGY3ID0gVXRmN0NvZGVjO1xuZXhwb3J0cy51bmljb2RlMTF1dGY3ID0gJ3V0ZjcnOyAvLyBBbGlhcyBVTklDT0RFLTEtMS1VVEYtN1xuZnVuY3Rpb24gVXRmN0NvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICB0aGlzLmljb252ID0gaWNvbnY7XG59O1xuXG5VdGY3Q29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBVdGY3RW5jb2RlcjtcblV0ZjdDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFV0ZjdEZWNvZGVyO1xuVXRmN0NvZGVjLnByb3RvdHlwZS5ib21Bd2FyZSA9IHRydWU7XG5cblxuLy8gLS0gRW5jb2RpbmdcblxudmFyIG5vbkRpcmVjdENoYXJzID0gL1teQS1aYS16MC05J1xcKFxcKSwtXFwuXFwvOlxcPyBcXG5cXHJcXHRdKy9nO1xuXG5mdW5jdGlvbiBVdGY3RW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuaWNvbnYgPSBjb2RlYy5pY29udjtcbn1cblxuVXRmN0VuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgLy8gTmFpdmUgaW1wbGVtZW50YXRpb24uXG4gICAgLy8gTm9uLWRpcmVjdCBjaGFycyBhcmUgZW5jb2RlZCBhcyBcIis8YmFzZTY0Pi1cIjsgc2luZ2xlIFwiK1wiIGNoYXIgaXMgZW5jb2RlZCBhcyBcIistXCIuXG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoc3RyLnJlcGxhY2Uobm9uRGlyZWN0Q2hhcnMsIGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgICAgIHJldHVybiBcIitcIiArIChjaHVuayA9PT0gJysnID8gJycgOiBcbiAgICAgICAgICAgIHRoaXMuaWNvbnYuZW5jb2RlKGNodW5rLCAndXRmMTYtYmUnKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvPSskLywgJycpKSBcbiAgICAgICAgICAgICsgXCItXCI7XG4gICAgfS5iaW5kKHRoaXMpKSk7XG59XG5cblV0ZjdFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGY3RGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuaWNvbnYgPSBjb2RlYy5pY29udjtcbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9ICcnO1xufVxuXG52YXIgYmFzZTY0UmVnZXggPSAvW0EtWmEtejAtOVxcLytdLztcbnZhciBiYXNlNjRDaGFycyA9IFtdO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKylcbiAgICBiYXNlNjRDaGFyc1tpXSA9IGJhc2U2NFJlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7XG5cbnZhciBwbHVzQ2hhciA9ICcrJy5jaGFyQ29kZUF0KDApLCBcbiAgICBtaW51c0NoYXIgPSAnLScuY2hhckNvZGVBdCgwKSxcbiAgICBhbmRDaGFyID0gJyYnLmNoYXJDb2RlQXQoMCk7XG5cblV0ZjdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciByZXMgPSBcIlwiLCBsYXN0SSA9IDAsXG4gICAgICAgIGluQmFzZTY0ID0gdGhpcy5pbkJhc2U2NCxcbiAgICAgICAgYmFzZTY0QWNjdW0gPSB0aGlzLmJhc2U2NEFjY3VtO1xuXG4gICAgLy8gVGhlIGRlY29kZXIgaXMgbW9yZSBpbnZvbHZlZCBhcyB3ZSBtdXN0IGhhbmRsZSBjaHVua3MgaW4gc3RyZWFtLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpbkJhc2U2NCkgeyAvLyBXZSdyZSBpbiBkaXJlY3QgbW9kZS5cbiAgICAgICAgICAgIC8vIFdyaXRlIGRpcmVjdCBjaGFycyB1bnRpbCAnKydcbiAgICAgICAgICAgIGlmIChidWZbaV0gPT0gcGx1c0NoYXIpIHtcbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJLCBpKSwgXCJhc2NpaVwiKTsgLy8gV3JpdGUgZGlyZWN0IGNoYXJzLlxuICAgICAgICAgICAgICAgIGxhc3RJID0gaSsxO1xuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy8gV2UgZGVjb2RlIGJhc2U2NC5cbiAgICAgICAgICAgIGlmICghYmFzZTY0Q2hhcnNbYnVmW2ldXSkgeyAvLyBCYXNlNjQgZW5kZWQuXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGFzdEkgJiYgYnVmW2ldID09IG1pbnVzQ2hhcikgey8vIFwiKy1cIiAtPiBcIitcIlxuICAgICAgICAgICAgICAgICAgICByZXMgKz0gXCIrXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGI2NHN0ciA9IGJhc2U2NEFjY3VtICsgYnVmLnNsaWNlKGxhc3RJLCBpKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUobmV3IEJ1ZmZlcihiNjRzdHIsICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYnVmW2ldICE9IG1pbnVzQ2hhcikgLy8gTWludXMgaXMgYWJzb3JiZWQgYWZ0ZXIgYmFzZTY0LlxuICAgICAgICAgICAgICAgICAgICBpLS07XG5cbiAgICAgICAgICAgICAgICBsYXN0SSA9IGkrMTtcbiAgICAgICAgICAgICAgICBpbkJhc2U2NCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWluQmFzZTY0KSB7XG4gICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEkpLCBcImFzY2lpXCIpOyAvLyBXcml0ZSBkaXJlY3QgY2hhcnMuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGI2NHN0ciA9IGJhc2U2NEFjY3VtICsgYnVmLnNsaWNlKGxhc3RJKS50b1N0cmluZygpO1xuXG4gICAgICAgIHZhciBjYW5CZURlY29kZWQgPSBiNjRzdHIubGVuZ3RoIC0gKGI2NHN0ci5sZW5ndGggJSA4KTsgLy8gTWluaW1hbCBjaHVuazogMiBxdWFkcyAtPiAyeDMgYnl0ZXMgLT4gMyBjaGFycy5cbiAgICAgICAgYmFzZTY0QWNjdW0gPSBiNjRzdHIuc2xpY2UoY2FuQmVEZWNvZGVkKTsgLy8gVGhlIHJlc3Qgd2lsbCBiZSBkZWNvZGVkIGluIGZ1dHVyZS5cbiAgICAgICAgYjY0c3RyID0gYjY0c3RyLnNsaWNlKDAsIGNhbkJlRGVjb2RlZCk7XG5cbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKG5ldyBCdWZmZXIoYjY0c3RyLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG4gICAgfVxuXG4gICAgdGhpcy5pbkJhc2U2NCA9IGluQmFzZTY0O1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSBiYXNlNjRBY2N1bTtcblxuICAgIHJldHVybiByZXM7XG59XG5cblV0ZjdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVzID0gXCJcIjtcbiAgICBpZiAodGhpcy5pbkJhc2U2NCAmJiB0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aCA+IDApXG4gICAgICAgIHJlcyA9IHRoaXMuaWNvbnYuZGVjb2RlKG5ldyBCdWZmZXIodGhpcy5iYXNlNjRBY2N1bSwgJ2Jhc2U2NCcpLCBcInV0ZjE2LWJlXCIpO1xuXG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSAnJztcbiAgICByZXR1cm4gcmVzO1xufVxuXG5cbi8vIFVURi03LUlNQVAgY29kZWMuXG4vLyBSRkMzNTAxIFNlYy4gNS4xLjMgTW9kaWZpZWQgVVRGLTcgKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1MDEjc2VjdGlvbi01LjEuMylcbi8vIERpZmZlcmVuY2VzOlxuLy8gICogQmFzZTY0IHBhcnQgaXMgc3RhcnRlZCBieSBcIiZcIiBpbnN0ZWFkIG9mIFwiK1wiXG4vLyAgKiBEaXJlY3QgY2hhcmFjdGVycyBhcmUgMHgyMC0weDdFLCBleGNlcHQgXCImXCIgKDB4MjYpXG4vLyAgKiBJbiBCYXNlNjQsIFwiLFwiIGlzIHVzZWQgaW5zdGVhZCBvZiBcIi9cIlxuLy8gICogQmFzZTY0IG11c3Qgbm90IGJlIHVzZWQgdG8gcmVwcmVzZW50IGRpcmVjdCBjaGFyYWN0ZXJzLlxuLy8gICogTm8gaW1wbGljaXQgc2hpZnQgYmFjayBmcm9tIEJhc2U2NCAoc2hvdWxkIGFsd2F5cyBlbmQgd2l0aCAnLScpXG4vLyAgKiBTdHJpbmcgbXVzdCBlbmQgaW4gbm9uLXNoaWZ0ZWQgcG9zaXRpb24uXG4vLyAgKiBcIi0mXCIgd2hpbGUgaW4gYmFzZTY0IGlzIG5vdCBhbGxvd2VkLlxuXG5cbmV4cG9ydHMudXRmN2ltYXAgPSBVdGY3SU1BUENvZGVjO1xuZnVuY3Rpb24gVXRmN0lNQVBDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5pY29udiA9IGljb252O1xufTtcblxuVXRmN0lNQVBDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjdJTUFQRW5jb2RlcjtcblV0ZjdJTUFQQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGY3SU1BUERlY29kZXI7XG5VdGY3SU1BUENvZGVjLnByb3RvdHlwZS5ib21Bd2FyZSA9IHRydWU7XG5cblxuLy8gLS0gRW5jb2RpbmdcblxuZnVuY3Rpb24gVXRmN0lNQVBFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xuICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gbmV3IEJ1ZmZlcig2KTtcbiAgICB0aGlzLmJhc2U2NEFjY3VtSWR4ID0gMDtcbn1cblxuVXRmN0lNQVBFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBpbkJhc2U2NCA9IHRoaXMuaW5CYXNlNjQsXG4gICAgICAgIGJhc2U2NEFjY3VtID0gdGhpcy5iYXNlNjRBY2N1bSxcbiAgICAgICAgYmFzZTY0QWNjdW1JZHggPSB0aGlzLmJhc2U2NEFjY3VtSWR4LFxuICAgICAgICBidWYgPSBuZXcgQnVmZmVyKHN0ci5sZW5ndGgqNSArIDEwKSwgYnVmSWR4ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB1Q2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoMHgyMCA8PSB1Q2hhciAmJiB1Q2hhciA8PSAweDdFKSB7IC8vIERpcmVjdCBjaGFyYWN0ZXIgb3IgJyYnLlxuICAgICAgICAgICAgaWYgKGluQmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGJhc2U2NEFjY3VtSWR4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBidWZJZHggKz0gYnVmLndyaXRlKGJhc2U2NEFjY3VtLnNsaWNlKDAsIGJhc2U2NEFjY3VtSWR4KS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwvL2csICcsJykucmVwbGFjZSgvPSskLywgJycpLCBidWZJZHgpO1xuICAgICAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bUlkeCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IG1pbnVzQ2hhcjsgLy8gV3JpdGUgJy0nLCB0aGVuIGdvIHRvIGRpcmVjdCBtb2RlLlxuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gdUNoYXI7IC8vIFdyaXRlIGRpcmVjdCBjaGFyYWN0ZXJcblxuICAgICAgICAgICAgICAgIGlmICh1Q2hhciA9PT0gYW5kQ2hhcikgIC8vIEFtcGVyc2FuZCAtPiAnJi0nXG4gICAgICAgICAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHsgLy8gTm9uLWRpcmVjdCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gYW5kQ2hhcjsgLy8gV3JpdGUgJyYnLCB0aGVuIGdvIHRvIGJhc2U2NCBtb2RlLlxuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbkJhc2U2NCkge1xuICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtW2Jhc2U2NEFjY3VtSWR4KytdID0gdUNoYXIgPj4gODtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bVtiYXNlNjRBY2N1bUlkeCsrXSA9IHVDaGFyICYgMHhGRjtcblxuICAgICAgICAgICAgICAgIGlmIChiYXNlNjRBY2N1bUlkeCA9PSBiYXNlNjRBY2N1bS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmSWR4ICs9IGJ1Zi53cml0ZShiYXNlNjRBY2N1bS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwvL2csICcsJyksIGJ1ZklkeCk7XG4gICAgICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gaW5CYXNlNjQ7XG4gICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IGJhc2U2NEFjY3VtSWR4O1xuXG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwLCBidWZJZHgpO1xufVxuXG5VdGY3SU1BUEVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBidWYgPSBuZXcgQnVmZmVyKDEwKSwgYnVmSWR4ID0gMDtcbiAgICBpZiAodGhpcy5pbkJhc2U2NCkge1xuICAgICAgICBpZiAodGhpcy5iYXNlNjRBY2N1bUlkeCA+IDApIHtcbiAgICAgICAgICAgIGJ1ZklkeCArPSBidWYud3JpdGUodGhpcy5iYXNlNjRBY2N1bS5zbGljZSgwLCB0aGlzLmJhc2U2NEFjY3VtSWR4KS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwvL2csICcsJykucmVwbGFjZSgvPSskLywgJycpLCBidWZJZHgpO1xuICAgICAgICAgICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBidWZbYnVmSWR4KytdID0gbWludXNDaGFyOyAvLyBXcml0ZSAnLScsIHRoZW4gZ28gdG8gZGlyZWN0IG1vZGUuXG4gICAgICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmLnNsaWNlKDAsIGJ1ZklkeCk7XG59XG5cblxuLy8gLS0gRGVjb2RpbmdcblxuZnVuY3Rpb24gVXRmN0lNQVBEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xuICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gJyc7XG59XG5cbnZhciBiYXNlNjRJTUFQQ2hhcnMgPSBiYXNlNjRDaGFycy5zbGljZSgpO1xuYmFzZTY0SU1BUENoYXJzWycsJy5jaGFyQ29kZUF0KDApXSA9IHRydWU7XG5cblV0ZjdJTUFQRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICB2YXIgcmVzID0gXCJcIiwgbGFzdEkgPSAwLFxuICAgICAgICBpbkJhc2U2NCA9IHRoaXMuaW5CYXNlNjQsXG4gICAgICAgIGJhc2U2NEFjY3VtID0gdGhpcy5iYXNlNjRBY2N1bTtcblxuICAgIC8vIFRoZSBkZWNvZGVyIGlzIG1vcmUgaW52b2x2ZWQgYXMgd2UgbXVzdCBoYW5kbGUgY2h1bmtzIGluIHN0cmVhbS5cbiAgICAvLyBJdCBpcyBmb3JnaXZpbmcsIGNsb3NlciB0byBzdGFuZGFyZCBVVEYtNyAoZm9yIGV4YW1wbGUsICctJyBpcyBvcHRpb25hbCBhdCB0aGUgZW5kKS5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaW5CYXNlNjQpIHsgLy8gV2UncmUgaW4gZGlyZWN0IG1vZGUuXG4gICAgICAgICAgICAvLyBXcml0ZSBkaXJlY3QgY2hhcnMgdW50aWwgJyYnXG4gICAgICAgICAgICBpZiAoYnVmW2ldID09IGFuZENoYXIpIHtcbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJLCBpKSwgXCJhc2NpaVwiKTsgLy8gV3JpdGUgZGlyZWN0IGNoYXJzLlxuICAgICAgICAgICAgICAgIGxhc3RJID0gaSsxO1xuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy8gV2UgZGVjb2RlIGJhc2U2NC5cbiAgICAgICAgICAgIGlmICghYmFzZTY0SU1BUENoYXJzW2J1ZltpXV0pIHsgLy8gQmFzZTY0IGVuZGVkLlxuICAgICAgICAgICAgICAgIGlmIChpID09IGxhc3RJICYmIGJ1ZltpXSA9PSBtaW51c0NoYXIpIHsgLy8gXCImLVwiIC0+IFwiJlwiXG4gICAgICAgICAgICAgICAgICAgIHJlcyArPSBcIiZcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYjY0c3RyID0gYmFzZTY0QWNjdW0gKyBidWYuc2xpY2UobGFzdEksIGkpLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCAnLycpO1xuICAgICAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUobmV3IEJ1ZmZlcihiNjRzdHIsICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYnVmW2ldICE9IG1pbnVzQ2hhcikgLy8gTWludXMgbWF5IGJlIGFic29yYmVkIGFmdGVyIGJhc2U2NC5cbiAgICAgICAgICAgICAgICAgICAgaS0tO1xuXG4gICAgICAgICAgICAgICAgbGFzdEkgPSBpKzE7XG4gICAgICAgICAgICAgICAgaW5CYXNlNjQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbkJhc2U2NCkge1xuICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJKSwgXCJhc2NpaVwiKTsgLy8gV3JpdGUgZGlyZWN0IGNoYXJzLlxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIGJ1Zi5zbGljZShsYXN0SSkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csICcvJyk7XG5cbiAgICAgICAgdmFyIGNhbkJlRGVjb2RlZCA9IGI2NHN0ci5sZW5ndGggLSAoYjY0c3RyLmxlbmd0aCAlIDgpOyAvLyBNaW5pbWFsIGNodW5rOiAyIHF1YWRzIC0+IDJ4MyBieXRlcyAtPiAzIGNoYXJzLlxuICAgICAgICBiYXNlNjRBY2N1bSA9IGI2NHN0ci5zbGljZShjYW5CZURlY29kZWQpOyAvLyBUaGUgcmVzdCB3aWxsIGJlIGRlY29kZWQgaW4gZnV0dXJlLlxuICAgICAgICBiNjRzdHIgPSBiNjRzdHIuc2xpY2UoMCwgY2FuQmVEZWNvZGVkKTtcblxuICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUobmV3IEJ1ZmZlcihiNjRzdHIsICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gaW5CYXNlNjQ7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9IGJhc2U2NEFjY3VtO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuVXRmN0lNQVBEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVzID0gXCJcIjtcbiAgICBpZiAodGhpcy5pbkJhc2U2NCAmJiB0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aCA+IDApXG4gICAgICAgIHJlcyA9IHRoaXMuaWNvbnYuZGVjb2RlKG5ldyBCdWZmZXIodGhpcy5iYXNlNjRBY2N1bSwgJ2Jhc2U2NCcpLCBcInV0ZjE2LWJlXCIpO1xuXG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSAnJztcbiAgICByZXR1cm4gcmVzO1xufVxuXG5cbiIsIlwidXNlIHN0cmljdFwiXG5cbnZhciBCT01DaGFyID0gJ1xcdUZFRkYnO1xuXG5leHBvcnRzLlByZXBlbmRCT00gPSBQcmVwZW5kQk9NV3JhcHBlclxuZnVuY3Rpb24gUHJlcGVuZEJPTVdyYXBwZXIoZW5jb2Rlciwgb3B0aW9ucykge1xuICAgIHRoaXMuZW5jb2RlciA9IGVuY29kZXI7XG4gICAgdGhpcy5hZGRCT00gPSB0cnVlO1xufVxuXG5QcmVwZW5kQk9NV3JhcHBlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAodGhpcy5hZGRCT00pIHtcbiAgICAgICAgc3RyID0gQk9NQ2hhciArIHN0cjtcbiAgICAgICAgdGhpcy5hZGRCT00gPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKHN0cik7XG59XG5cblByZXBlbmRCT01XcmFwcGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpO1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydHMuU3RyaXBCT00gPSBTdHJpcEJPTVdyYXBwZXI7XG5mdW5jdGlvbiBTdHJpcEJPTVdyYXBwZXIoZGVjb2Rlciwgb3B0aW9ucykge1xuICAgIHRoaXMuZGVjb2RlciA9IGRlY29kZXI7XG4gICAgdGhpcy5wYXNzID0gZmFsc2U7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbn1cblxuU3RyaXBCT01XcmFwcGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciByZXMgPSB0aGlzLmRlY29kZXIud3JpdGUoYnVmKTtcbiAgICBpZiAodGhpcy5wYXNzIHx8ICFyZXMpXG4gICAgICAgIHJldHVybiByZXM7XG5cbiAgICBpZiAocmVzWzBdID09PSBCT01DaGFyKSB7XG4gICAgICAgIHJlcyA9IHJlcy5zbGljZSgxKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuc3RyaXBCT00gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RyaXBCT00oKTtcbiAgICB9XG5cbiAgICB0aGlzLnBhc3MgPSB0cnVlO1xuICAgIHJldHVybiByZXM7XG59XG5cblN0cmlwQk9NV3JhcHBlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKTtcbn1cblxuIiwiXCJ1c2Ugc3RyaWN0XCJcblxuLy8gPT0gRXh0ZW5kIE5vZGUgcHJpbWl0aXZlcyB0byB1c2UgaWNvbnYtbGl0ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaWNvbnYpIHtcbiAgICB2YXIgb3JpZ2luYWwgPSB1bmRlZmluZWQ7IC8vIFBsYWNlIHRvIGtlZXAgb3JpZ2luYWwgbWV0aG9kcy5cblxuICAgIC8vIE5vZGUgYXV0aG9ycyByZXdyb3RlIEJ1ZmZlciBpbnRlcm5hbHMgdG8gbWFrZSBpdCBjb21wYXRpYmxlIHdpdGhcbiAgICAvLyBVaW50OEFycmF5IGFuZCB3ZSBjYW5ub3QgcGF0Y2gga2V5IGZ1bmN0aW9ucyBzaW5jZSB0aGVuLlxuICAgIGljb252LnN1cHBvcnRzTm9kZUVuY29kaW5nc0V4dGVuc2lvbiA9ICEobmV3IEJ1ZmZlcigwKSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpO1xuXG4gICAgaWNvbnYuZXh0ZW5kTm9kZUVuY29kaW5ncyA9IGZ1bmN0aW9uIGV4dGVuZE5vZGVFbmNvZGluZ3MoKSB7XG4gICAgICAgIGlmIChvcmlnaW5hbCkgcmV0dXJuO1xuICAgICAgICBvcmlnaW5hbCA9IHt9O1xuXG4gICAgICAgIGlmICghaWNvbnYuc3VwcG9ydHNOb2RlRW5jb2RpbmdzRXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQUNUSU9OIE5FRURFRDogcmVxdWlyZSgnaWNvbnYtbGl0ZScpLmV4dGVuZE5vZGVFbmNvZGluZ3MoKSBpcyBub3Qgc3VwcG9ydGVkIGluIHlvdXIgdmVyc2lvbiBvZiBOb2RlXCIpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlNlZSBtb3JlIGluZm8gYXQgaHR0cHM6Ly9naXRodWIuY29tL2FzaHR1Y2hraW4vaWNvbnYtbGl0ZS93aWtpL05vZGUtdjQtY29tcGF0aWJpbGl0eVwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBub2RlTmF0aXZlRW5jb2RpbmdzID0ge1xuICAgICAgICAgICAgJ2hleCc6IHRydWUsICd1dGY4JzogdHJ1ZSwgJ3V0Zi04JzogdHJ1ZSwgJ2FzY2lpJzogdHJ1ZSwgJ2JpbmFyeSc6IHRydWUsIFxuICAgICAgICAgICAgJ2Jhc2U2NCc6IHRydWUsICd1Y3MyJzogdHJ1ZSwgJ3Vjcy0yJzogdHJ1ZSwgJ3V0ZjE2bGUnOiB0cnVlLCAndXRmLTE2bGUnOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nID0gZnVuY3Rpb24oZW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jICYmIG5vZGVOYXRpdmVFbmNvZGluZ3NbZW5jLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gLS0gU2xvd0J1ZmZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICB2YXIgU2xvd0J1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLlNsb3dCdWZmZXI7XG5cbiAgICAgICAgb3JpZ2luYWwuU2xvd0J1ZmZlclRvU3RyaW5nID0gU2xvd0J1ZmZlci5wcm90b3R5cGUudG9TdHJpbmc7XG4gICAgICAgIFNsb3dCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgLy8gVXNlIG5hdGl2ZSBjb252ZXJzaW9uIHdoZW4gcG9zc2libGVcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyhlbmNvZGluZykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLlNsb3dCdWZmZXJUb1N0cmluZy5jYWxsKHRoaXMsIGVuY29kaW5nLCBzdGFydCwgZW5kKTtcblxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB1c2Ugb3VyIGRlY29kaW5nIG1ldGhvZC5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhcnQgPT0gJ3VuZGVmaW5lZCcpIHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZW5kID09ICd1bmRlZmluZWQnKSBlbmQgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBpY29udi5kZWNvZGUodGhpcy5zbGljZShzdGFydCwgZW5kKSwgZW5jb2RpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3JpZ2luYWwuU2xvd0J1ZmZlcldyaXRlID0gU2xvd0J1ZmZlci5wcm90b3R5cGUud3JpdGU7XG4gICAgICAgIFNsb3dCdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIC8vIFN1cHBvcnQgYm90aCAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpXG4gICAgICAgICAgICAvLyBhbmQgdGhlIGxlZ2FjeSAoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpXG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7ICAvLyBsZWdhY3lcbiAgICAgICAgICAgICAgICB2YXIgc3dhcCA9IGVuY29kaW5nO1xuICAgICAgICAgICAgICAgIGVuY29kaW5nID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IGxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSBzd2FwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvZmZzZXQgPSArb2Zmc2V0IHx8IDA7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gK2xlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZyB8fCAndXRmOCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIC8vIFVzZSBuYXRpdmUgY29udmVyc2lvbiB3aGVuIHBvc3NpYmxlXG4gICAgICAgICAgICBpZiAoQnVmZmVyLmlzTmF0aXZlRW5jb2RpbmcoZW5jb2RpbmcpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5TbG93QnVmZmVyV3JpdGUuY2FsbCh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZyk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYXR0ZW1wdCB0byB3cml0ZSBiZXlvbmQgYnVmZmVyIGJvdW5kcycpO1xuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHVzZSBvdXIgZW5jb2RpbmcgbWV0aG9kLlxuICAgICAgICAgICAgdmFyIGJ1ZiA9IGljb252LmVuY29kZShzdHJpbmcsIGVuY29kaW5nKTtcbiAgICAgICAgICAgIGlmIChidWYubGVuZ3RoIDwgbGVuZ3RoKSBsZW5ndGggPSBidWYubGVuZ3RoO1xuICAgICAgICAgICAgYnVmLmNvcHkodGhpcywgb2Zmc2V0LCAwLCBsZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tIEJ1ZmZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgICAgICBvcmlnaW5hbC5CdWZmZXJJc0VuY29kaW5nID0gQnVmZmVyLmlzRW5jb2Rpbmc7XG4gICAgICAgIEJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyhlbmNvZGluZykgfHwgaWNvbnYuZW5jb2RpbmdFeGlzdHMoZW5jb2RpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3JpZ2luYWwuQnVmZmVyQnl0ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgICAgICBCdWZmZXIuYnl0ZUxlbmd0aCA9IFNsb3dCdWZmZXIuYnl0ZUxlbmd0aCA9IGZ1bmN0aW9uKHN0ciwgZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgLy8gVXNlIG5hdGl2ZSBjb252ZXJzaW9uIHdoZW4gcG9zc2libGVcbiAgICAgICAgICAgIGlmIChCdWZmZXIuaXNOYXRpdmVFbmNvZGluZyhlbmNvZGluZykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLkJ1ZmZlckJ5dGVMZW5ndGguY2FsbCh0aGlzLCBzdHIsIGVuY29kaW5nKTtcblxuICAgICAgICAgICAgLy8gU2xvdywgSSBrbm93LCBidXQgd2UgZG9uJ3QgaGF2ZSBhIGJldHRlciB3YXkgeWV0LlxuICAgICAgICAgICAgcmV0dXJuIGljb252LmVuY29kZShzdHIsIGVuY29kaW5nKS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBvcmlnaW5hbC5CdWZmZXJUb1N0cmluZyA9IEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmc7XG4gICAgICAgIEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcgfHwgJ3V0ZjgnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAvLyBVc2UgbmF0aXZlIGNvbnZlcnNpb24gd2hlbiBwb3NzaWJsZVxuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nKGVuY29kaW5nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuQnVmZmVyVG9TdHJpbmcuY2FsbCh0aGlzLCBlbmNvZGluZywgc3RhcnQsIGVuZCk7XG5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIG91ciBkZWNvZGluZyBtZXRob2QuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN0YXJ0ID09ICd1bmRlZmluZWQnKSBzdGFydCA9IDA7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVuZCA9PSAndW5kZWZpbmVkJykgZW5kID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gaWNvbnYuZGVjb2RlKHRoaXMuc2xpY2Uoc3RhcnQsIGVuZCksIGVuY29kaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9yaWdpbmFsLkJ1ZmZlcldyaXRlID0gQnVmZmVyLnByb3RvdHlwZS53cml0ZTtcbiAgICAgICAgQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gICAgICAgICAgICB2YXIgX29mZnNldCA9IG9mZnNldCwgX2xlbmd0aCA9IGxlbmd0aCwgX2VuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICAvLyBTdXBwb3J0IGJvdGggKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKVxuICAgICAgICAgICAgLy8gYW5kIHRoZSBsZWdhY3kgKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldCwgbGVuZ3RoKVxuICAgICAgICAgICAgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgeyAgLy8gbGVnYWN5XG4gICAgICAgICAgICAgICAgdmFyIHN3YXAgPSBlbmNvZGluZztcbiAgICAgICAgICAgICAgICBlbmNvZGluZyA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gc3dhcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcgfHwgJ3V0ZjgnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICAvLyBVc2UgbmF0aXZlIGNvbnZlcnNpb24gd2hlbiBwb3NzaWJsZVxuICAgICAgICAgICAgaWYgKEJ1ZmZlci5pc05hdGl2ZUVuY29kaW5nKGVuY29kaW5nKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuQnVmZmVyV3JpdGUuY2FsbCh0aGlzLCBzdHJpbmcsIF9vZmZzZXQsIF9sZW5ndGgsIF9lbmNvZGluZyk7XG5cbiAgICAgICAgICAgIG9mZnNldCA9ICtvZmZzZXQgfHwgMDtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVtYWluaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSArbGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVtYWluaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhdHRlbXB0IHRvIHdyaXRlIGJleW9uZCBidWZmZXIgYm91bmRzJyk7XG5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIG91ciBlbmNvZGluZyBtZXRob2QuXG4gICAgICAgICAgICB2YXIgYnVmID0gaWNvbnYuZW5jb2RlKHN0cmluZywgZW5jb2RpbmcpO1xuICAgICAgICAgICAgaWYgKGJ1Zi5sZW5ndGggPCBsZW5ndGgpIGxlbmd0aCA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgICAgICBidWYuY29weSh0aGlzLCBvZmZzZXQsIDAsIGxlbmd0aCk7XG4gICAgICAgICAgICByZXR1cm4gbGVuZ3RoO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBTZXQgX2NoYXJzV3JpdHRlbi5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gLS0gUmVhZGFibGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICBpZiAoaWNvbnYuc3VwcG9ydHNTdHJlYW1zKSB7XG4gICAgICAgICAgICB2YXIgUmVhZGFibGUgPSByZXF1aXJlKCdzdHJlYW0nKS5SZWFkYWJsZTtcblxuICAgICAgICAgICAgb3JpZ2luYWwuUmVhZGFibGVTZXRFbmNvZGluZyA9IFJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZztcbiAgICAgICAgICAgIFJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldEVuY29kaW5nKGVuYywgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBvdXIgb3duIGRlY29kZXIsIGl0IGhhcyB0aGUgc2FtZSBpbnRlcmZhY2UuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2Fubm90IHVzZSBvcmlnaW5hbCBmdW5jdGlvbiBhcyBpdCBkb2Vzbid0IGhhbmRsZSBCT00tcy5cbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBpY29udi5nZXREZWNvZGVyKGVuYywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IGVuYztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgUmVhZGFibGUucHJvdG90eXBlLmNvbGxlY3QgPSBpY29udi5fY29sbGVjdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBpY29udi1saXRlIE5vZGUgcHJpbWl0aXZlIGV4dGVuc2lvbnMuXG4gICAgaWNvbnYudW5kb0V4dGVuZE5vZGVFbmNvZGluZ3MgPSBmdW5jdGlvbiB1bmRvRXh0ZW5kTm9kZUVuY29kaW5ncygpIHtcbiAgICAgICAgaWYgKCFpY29udi5zdXBwb3J0c05vZGVFbmNvZGluZ3NFeHRlbnNpb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICghb3JpZ2luYWwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXF1aXJlKCdpY29udi1saXRlJykudW5kb0V4dGVuZE5vZGVFbmNvZGluZ3MoKTogTm90aGluZyB0byB1bmRvOyBleHRlbmROb2RlRW5jb2RpbmdzKCkgaXMgbm90IGNhbGxlZC5cIilcblxuICAgICAgICBkZWxldGUgQnVmZmVyLmlzTmF0aXZlRW5jb2Rpbmc7XG5cbiAgICAgICAgdmFyIFNsb3dCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5TbG93QnVmZmVyO1xuXG4gICAgICAgIFNsb3dCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gb3JpZ2luYWwuU2xvd0J1ZmZlclRvU3RyaW5nO1xuICAgICAgICBTbG93QnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IG9yaWdpbmFsLlNsb3dCdWZmZXJXcml0ZTtcblxuICAgICAgICBCdWZmZXIuaXNFbmNvZGluZyA9IG9yaWdpbmFsLkJ1ZmZlcklzRW5jb2Rpbmc7XG4gICAgICAgIEJ1ZmZlci5ieXRlTGVuZ3RoID0gb3JpZ2luYWwuQnVmZmVyQnl0ZUxlbmd0aDtcbiAgICAgICAgQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IG9yaWdpbmFsLkJ1ZmZlclRvU3RyaW5nO1xuICAgICAgICBCdWZmZXIucHJvdG90eXBlLndyaXRlID0gb3JpZ2luYWwuQnVmZmVyV3JpdGU7XG5cbiAgICAgICAgaWYgKGljb252LnN1cHBvcnRzU3RyZWFtcykge1xuICAgICAgICAgICAgdmFyIFJlYWRhYmxlID0gcmVxdWlyZSgnc3RyZWFtJykuUmVhZGFibGU7XG5cbiAgICAgICAgICAgIFJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IG9yaWdpbmFsLlJlYWRhYmxlU2V0RW5jb2Rpbmc7XG4gICAgICAgICAgICBkZWxldGUgUmVhZGFibGUucHJvdG90eXBlLmNvbGxlY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBvcmlnaW5hbCA9IHVuZGVmaW5lZDtcbiAgICB9XG59XG4iLCJcInVzZSBzdHJpY3RcIlxuXG52YXIgYm9tSGFuZGxpbmcgPSByZXF1aXJlKCcuL2JvbS1oYW5kbGluZycpLFxuICAgIGljb252ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8vIEFsbCBjb2RlY3MgYW5kIGFsaWFzZXMgYXJlIGtlcHQgaGVyZSwga2V5ZWQgYnkgZW5jb2RpbmcgbmFtZS9hbGlhcy5cbi8vIFRoZXkgYXJlIGxhenkgbG9hZGVkIGluIGBpY29udi5nZXRDb2RlY2AgZnJvbSBgZW5jb2RpbmdzL2luZGV4LmpzYC5cbmljb252LmVuY29kaW5ncyA9IG51bGw7XG5cbi8vIENoYXJhY3RlcnMgZW1pdHRlZCBpbiBjYXNlIG9mIGVycm9yLlxuaWNvbnYuZGVmYXVsdENoYXJVbmljb2RlID0gJ++/vSc7XG5pY29udi5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUgPSAnPyc7XG5cbi8vIFB1YmxpYyBBUEkuXG5pY29udi5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyLCBlbmNvZGluZywgb3B0aW9ucykge1xuICAgIHN0ciA9IFwiXCIgKyAoc3RyIHx8IFwiXCIpOyAvLyBFbnN1cmUgc3RyaW5nLlxuXG4gICAgdmFyIGVuY29kZXIgPSBpY29udi5nZXRFbmNvZGVyKGVuY29kaW5nLCBvcHRpb25zKTtcblxuICAgIHZhciByZXMgPSBlbmNvZGVyLndyaXRlKHN0cik7XG4gICAgdmFyIHRyYWlsID0gZW5jb2Rlci5lbmQoKTtcbiAgICBcbiAgICByZXR1cm4gKHRyYWlsICYmIHRyYWlsLmxlbmd0aCA+IDApID8gQnVmZmVyLmNvbmNhdChbcmVzLCB0cmFpbF0pIDogcmVzO1xufVxuXG5pY29udi5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoYnVmLCBlbmNvZGluZywgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgYnVmID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoIWljb252LnNraXBEZWNvZGVXYXJuaW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJY29udi1saXRlIHdhcm5pbmc6IGRlY29kZSgpLWluZyBzdHJpbmdzIGlzIGRlcHJlY2F0ZWQuIFJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9Vc2UtQnVmZmVycy13aGVuLWRlY29kaW5nJyk7XG4gICAgICAgICAgICBpY29udi5za2lwRGVjb2RlV2FybmluZyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBidWYgPSBuZXcgQnVmZmVyKFwiXCIgKyAoYnVmIHx8IFwiXCIpLCBcImJpbmFyeVwiKTsgLy8gRW5zdXJlIGJ1ZmZlci5cbiAgICB9XG5cbiAgICB2YXIgZGVjb2RlciA9IGljb252LmdldERlY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpO1xuXG4gICAgdmFyIHJlcyA9IGRlY29kZXIud3JpdGUoYnVmKTtcbiAgICB2YXIgdHJhaWwgPSBkZWNvZGVyLmVuZCgpO1xuXG4gICAgcmV0dXJuIHRyYWlsID8gKHJlcyArIHRyYWlsKSA6IHJlcztcbn1cblxuaWNvbnYuZW5jb2RpbmdFeGlzdHMgPSBmdW5jdGlvbiBlbmNvZGluZ0V4aXN0cyhlbmMpIHtcbiAgICB0cnkge1xuICAgICAgICBpY29udi5nZXRDb2RlYyhlbmMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8vIExlZ2FjeSBhbGlhc2VzIHRvIGNvbnZlcnQgZnVuY3Rpb25zXG5pY29udi50b0VuY29kaW5nID0gaWNvbnYuZW5jb2RlO1xuaWNvbnYuZnJvbUVuY29kaW5nID0gaWNvbnYuZGVjb2RlO1xuXG4vLyBTZWFyY2ggZm9yIGEgY29kZWMgaW4gaWNvbnYuZW5jb2RpbmdzLiBDYWNoZSBjb2RlYyBkYXRhIGluIGljb252Ll9jb2RlY0RhdGFDYWNoZS5cbmljb252Ll9jb2RlY0RhdGFDYWNoZSA9IHt9O1xuaWNvbnYuZ2V0Q29kZWMgPSBmdW5jdGlvbiBnZXRDb2RlYyhlbmNvZGluZykge1xuICAgIGlmICghaWNvbnYuZW5jb2RpbmdzKVxuICAgICAgICBpY29udi5lbmNvZGluZ3MgPSByZXF1aXJlKFwiLi4vZW5jb2RpbmdzXCIpOyAvLyBMYXp5IGxvYWQgYWxsIGVuY29kaW5nIGRlZmluaXRpb25zLlxuICAgIFxuICAgIC8vIENhbm9uaWNhbGl6ZSBlbmNvZGluZyBuYW1lOiBzdHJpcCBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFycyBhbmQgYXBwZW5kZWQgeWVhci5cbiAgICB2YXIgZW5jID0gKCcnK2VuY29kaW5nKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teMC05YS16XXw6XFxkezR9JC9nLCBcIlwiKTtcblxuICAgIC8vIFRyYXZlcnNlIGljb252LmVuY29kaW5ncyB0byBmaW5kIGFjdHVhbCBjb2RlYy5cbiAgICB2YXIgY29kZWNPcHRpb25zID0ge307XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGNvZGVjID0gaWNvbnYuX2NvZGVjRGF0YUNhY2hlW2VuY107XG4gICAgICAgIGlmIChjb2RlYylcbiAgICAgICAgICAgIHJldHVybiBjb2RlYztcblxuICAgICAgICB2YXIgY29kZWNEZWYgPSBpY29udi5lbmNvZGluZ3NbZW5jXTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBjb2RlY0RlZikge1xuICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOiAvLyBEaXJlY3QgYWxpYXMgdG8gb3RoZXIgZW5jb2RpbmcuXG4gICAgICAgICAgICAgICAgZW5jID0gY29kZWNEZWY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjogLy8gQWxpYXMgd2l0aCBvcHRpb25zLiBDYW4gYmUgbGF5ZXJlZC5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gY29kZWNEZWYpXG4gICAgICAgICAgICAgICAgICAgIGNvZGVjT3B0aW9uc1trZXldID0gY29kZWNEZWZba2V5XTtcblxuICAgICAgICAgICAgICAgIGlmICghY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSA9IGVuYztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBlbmMgPSBjb2RlY0RlZi50eXBlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjogLy8gQ29kZWMgaXRzZWxmLlxuICAgICAgICAgICAgICAgIGlmICghY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZSA9IGVuYztcblxuICAgICAgICAgICAgICAgIC8vIFRoZSBjb2RlYyBmdW5jdGlvbiBtdXN0IGxvYWQgYWxsIHRhYmxlcyBhbmQgcmV0dXJuIG9iamVjdCB3aXRoIC5lbmNvZGVyIGFuZCAuZGVjb2RlciBtZXRob2RzLlxuICAgICAgICAgICAgICAgIC8vIEl0J2xsIGJlIGNhbGxlZCBvbmx5IG9uY2UgKGZvciBlYWNoIGRpZmZlcmVudCBvcHRpb25zIG9iamVjdCkuXG4gICAgICAgICAgICAgICAgY29kZWMgPSBuZXcgY29kZWNEZWYoY29kZWNPcHRpb25zLCBpY29udik7XG5cbiAgICAgICAgICAgICAgICBpY29udi5fY29kZWNEYXRhQ2FjaGVbY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZV0gPSBjb2RlYzsgLy8gU2F2ZSBpdCB0byBiZSByZXVzZWQgbGF0ZXIuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVjO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVuY29kaW5nIG5vdCByZWNvZ25pemVkOiAnXCIgKyBlbmNvZGluZyArIFwiJyAoc2VhcmNoZWQgYXM6ICdcIitlbmMrXCInKVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuaWNvbnYuZ2V0RW5jb2RlciA9IGZ1bmN0aW9uIGdldEVuY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29kZWMgPSBpY29udi5nZXRDb2RlYyhlbmNvZGluZyksXG4gICAgICAgIGVuY29kZXIgPSBuZXcgY29kZWMuZW5jb2RlcihvcHRpb25zLCBjb2RlYyk7XG5cbiAgICBpZiAoY29kZWMuYm9tQXdhcmUgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmFkZEJPTSlcbiAgICAgICAgZW5jb2RlciA9IG5ldyBib21IYW5kbGluZy5QcmVwZW5kQk9NKGVuY29kZXIsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGVuY29kZXI7XG59XG5cbmljb252LmdldERlY29kZXIgPSBmdW5jdGlvbiBnZXREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgdmFyIGNvZGVjID0gaWNvbnYuZ2V0Q29kZWMoZW5jb2RpbmcpLFxuICAgICAgICBkZWNvZGVyID0gbmV3IGNvZGVjLmRlY29kZXIob3B0aW9ucywgY29kZWMpO1xuXG4gICAgaWYgKGNvZGVjLmJvbUF3YXJlICYmICEob3B0aW9ucyAmJiBvcHRpb25zLnN0cmlwQk9NID09PSBmYWxzZSkpXG4gICAgICAgIGRlY29kZXIgPSBuZXcgYm9tSGFuZGxpbmcuU3RyaXBCT00oZGVjb2Rlciwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVjb2Rlcjtcbn1cblxuXG4vLyBMb2FkIGV4dGVuc2lvbnMgaW4gTm9kZS4gQWxsIG9mIHRoZW0gYXJlIG9taXR0ZWQgaW4gQnJvd3NlcmlmeSBidWlsZCB2aWEgJ2Jyb3dzZXInIGZpZWxkIGluIHBhY2thZ2UuanNvbi5cbnZhciBub2RlVmVyID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO1xuaWYgKG5vZGVWZXIpIHtcblxuICAgIC8vIExvYWQgc3RyZWFtaW5nIHN1cHBvcnQgaW4gTm9kZSB2MC4xMCtcbiAgICB2YXIgbm9kZVZlckFyciA9IG5vZGVWZXIuc3BsaXQoXCIuXCIpLm1hcChOdW1iZXIpO1xuICAgIGlmIChub2RlVmVyQXJyWzBdID4gMCB8fCBub2RlVmVyQXJyWzFdID49IDEwKSB7XG4gICAgICAgIHJlcXVpcmUoXCIuL3N0cmVhbXNcIikoaWNvbnYpO1xuICAgIH1cblxuICAgIC8vIExvYWQgTm9kZSBwcmltaXRpdmUgZXh0ZW5zaW9ucy5cbiAgICByZXF1aXJlKFwiLi9leHRlbmQtbm9kZVwiKShpY29udik7XG59XG5cbiIsIlwidXNlIHN0cmljdFwiXG5cbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKFwic3RyZWFtXCIpLlRyYW5zZm9ybTtcblxuXG4vLyA9PSBFeHBvcnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpY29udikge1xuICAgIFxuICAgIC8vIEFkZGl0aW9uYWwgUHVibGljIEFQSS5cbiAgICBpY29udi5lbmNvZGVTdHJlYW0gPSBmdW5jdGlvbiBlbmNvZGVTdHJlYW0oZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJY29udkxpdGVFbmNvZGVyU3RyZWFtKGljb252LmdldEVuY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpY29udi5kZWNvZGVTdHJlYW0gPSBmdW5jdGlvbiBkZWNvZGVTdHJlYW0oZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJY29udkxpdGVEZWNvZGVyU3RyZWFtKGljb252LmdldERlY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpY29udi5zdXBwb3J0c1N0cmVhbXMgPSB0cnVlO1xuXG5cbiAgICAvLyBOb3QgcHVibGlzaGVkIHlldC5cbiAgICBpY29udi5JY29udkxpdGVFbmNvZGVyU3RyZWFtID0gSWNvbnZMaXRlRW5jb2RlclN0cmVhbTtcbiAgICBpY29udi5JY29udkxpdGVEZWNvZGVyU3RyZWFtID0gSWNvbnZMaXRlRGVjb2RlclN0cmVhbTtcbiAgICBpY29udi5fY29sbGVjdCA9IEljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLmNvbGxlY3Q7XG59O1xuXG5cbi8vID09IEVuY29kZXIgc3RyZWFtID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmZ1bmN0aW9uIEljb252TGl0ZUVuY29kZXJTdHJlYW0oY29udiwgb3B0aW9ucykge1xuICAgIHRoaXMuY29udiA9IGNvbnY7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5kZWNvZGVTdHJpbmdzID0gZmFsc2U7IC8vIFdlIGFjY2VwdCBvbmx5IHN0cmluZ3MsIHNvIHdlIGRvbid0IG5lZWQgdG8gZGVjb2RlIHRoZW0uXG4gICAgVHJhbnNmb3JtLmNhbGwodGhpcywgb3B0aW9ucyk7XG59XG5cbkljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm0ucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IEljb252TGl0ZUVuY29kZXJTdHJlYW0gfVxufSk7XG5cbkljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGRvbmUpIHtcbiAgICBpZiAodHlwZW9mIGNodW5rICE9ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4gZG9uZShuZXcgRXJyb3IoXCJJY29udiBlbmNvZGluZyBzdHJlYW0gbmVlZHMgc3RyaW5ncyBhcyBpdHMgaW5wdXQuXCIpKTtcbiAgICB0cnkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jb252LndyaXRlKGNodW5rKTtcbiAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoKSB0aGlzLnB1c2gocmVzKTtcbiAgICAgICAgZG9uZSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkb25lKGUpO1xuICAgIH1cbn1cblxuSWNvbnZMaXRlRW5jb2RlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24oZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmNvbnYuZW5kKCk7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkgdGhpcy5wdXNoKHJlcyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZG9uZShlKTtcbiAgICB9XG59XG5cbkljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlLmNvbGxlY3QgPSBmdW5jdGlvbihjYikge1xuICAgIHZhciBjaHVua3MgPSBbXTtcbiAgICB0aGlzLm9uKCdlcnJvcicsIGNiKTtcbiAgICB0aGlzLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHsgY2h1bmtzLnB1c2goY2h1bmspOyB9KTtcbiAgICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgY2IobnVsbCwgQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuXG4vLyA9PSBEZWNvZGVyIHN0cmVhbSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5mdW5jdGlvbiBJY29udkxpdGVEZWNvZGVyU3RyZWFtKGNvbnYsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNvbnYgPSBjb252O1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMuZW5jb2RpbmcgPSB0aGlzLmVuY29kaW5nID0gJ3V0ZjgnOyAvLyBXZSBvdXRwdXQgc3RyaW5ncy5cbiAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuSWNvbnZMaXRlRGVjb2RlclN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zZm9ybS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogSWNvbnZMaXRlRGVjb2RlclN0cmVhbSB9XG59KTtcblxuSWNvbnZMaXRlRGVjb2RlclN0cmVhbS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgZG9uZSkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGNodW5rKSlcbiAgICAgICAgcmV0dXJuIGRvbmUobmV3IEVycm9yKFwiSWNvbnYgZGVjb2Rpbmcgc3RyZWFtIG5lZWRzIGJ1ZmZlcnMgYXMgaXRzIGlucHV0LlwiKSk7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi53cml0ZShjaHVuayk7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkgdGhpcy5wdXNoKHJlcywgdGhpcy5lbmNvZGluZyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZG9uZShlKTtcbiAgICB9XG59XG5cbkljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLl9mbHVzaCA9IGZ1bmN0aW9uKGRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jb252LmVuZCgpO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMsIHRoaXMuZW5jb2RpbmcpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgZG9uZSgpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkb25lKGUpO1xuICAgIH1cbn1cblxuSWNvbnZMaXRlRGVjb2RlclN0cmVhbS5wcm90b3R5cGUuY29sbGVjdCA9IGZ1bmN0aW9uKGNiKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHRoaXMub24oJ2Vycm9yJywgY2IpO1xuICAgIHRoaXMub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykgeyByZXMgKz0gY2h1bms7IH0pO1xuICAgIHRoaXMub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICBjYihudWxsLCByZXMpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIlxudmFyIGluZGV4T2YgPSBbXS5pbmRleE9mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGFyciwgb2JqKXtcbiAgaWYgKGluZGV4T2YpIHJldHVybiBhcnIuaW5kZXhPZihvYmopO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhcnJbaV0gPT09IG9iaikgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufTsiLCJpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIG9sZCBzY2hvb2wgc2hpbSBmb3Igb2xkIGJyb3dzZXJzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICBjdG9yLnByb3RvdHlwZSA9IG5ldyBUZW1wQ3RvcigpXG4gICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gIH1cbn1cbiIsIi8qIVxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlclxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5cbi8vIFRoZSBfaXNCdWZmZXIgY2hlY2sgaXMgZm9yIFNhZmFyaSA1LTcgc3VwcG9ydCwgYmVjYXVzZSBpdCdzIG1pc3Npbmdcbi8vIE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuIFJlbW92ZSB0aGlzIGV2ZW50dWFsbHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICE9IG51bGwgJiYgKGlzQnVmZmVyKG9iaikgfHwgaXNTbG93QnVmZmVyKG9iaikgfHwgISFvYmouX2lzQnVmZmVyKVxufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiAhIW9iai5jb25zdHJ1Y3RvciAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopXG59XG5cbi8vIEZvciBOb2RlIHYwLjEwIHN1cHBvcnQuIFJlbW92ZSB0aGlzIGV2ZW50dWFsbHkuXG5mdW5jdGlvbiBpc1Nsb3dCdWZmZXIgKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iai5yZWFkRmxvYXRMRSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLnNsaWNlID09PSAnZnVuY3Rpb24nICYmIGlzQnVmZmVyKG9iai5zbGljZSgwLCAwKSlcbn1cbiIsIm1vZHVsZS5leHBvcnRzICAgICAgPSBpc1R5cGVkQXJyYXlcbmlzVHlwZWRBcnJheS5zdHJpY3QgPSBpc1N0cmljdFR5cGVkQXJyYXlcbmlzVHlwZWRBcnJheS5sb29zZSAgPSBpc0xvb3NlVHlwZWRBcnJheVxuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG52YXIgbmFtZXMgPSB7XG4gICAgJ1tvYmplY3QgSW50OEFycmF5XSc6IHRydWVcbiAgLCAnW29iamVjdCBJbnQxNkFycmF5XSc6IHRydWVcbiAgLCAnW29iamVjdCBJbnQzMkFycmF5XSc6IHRydWVcbiAgLCAnW29iamVjdCBVaW50OEFycmF5XSc6IHRydWVcbiAgLCAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nOiB0cnVlXG4gICwgJ1tvYmplY3QgVWludDE2QXJyYXldJzogdHJ1ZVxuICAsICdbb2JqZWN0IFVpbnQzMkFycmF5XSc6IHRydWVcbiAgLCAnW29iamVjdCBGbG9hdDMyQXJyYXldJzogdHJ1ZVxuICAsICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nOiB0cnVlXG59XG5cbmZ1bmN0aW9uIGlzVHlwZWRBcnJheShhcnIpIHtcbiAgcmV0dXJuIChcbiAgICAgICBpc1N0cmljdFR5cGVkQXJyYXkoYXJyKVxuICAgIHx8IGlzTG9vc2VUeXBlZEFycmF5KGFycilcbiAgKVxufVxuXG5mdW5jdGlvbiBpc1N0cmljdFR5cGVkQXJyYXkoYXJyKSB7XG4gIHJldHVybiAoXG4gICAgICAgYXJyIGluc3RhbmNlb2YgSW50OEFycmF5XG4gICAgfHwgYXJyIGluc3RhbmNlb2YgSW50MTZBcnJheVxuICAgIHx8IGFyciBpbnN0YW5jZW9mIEludDMyQXJyYXlcbiAgICB8fCBhcnIgaW5zdGFuY2VvZiBVaW50OEFycmF5XG4gICAgfHwgYXJyIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXlcbiAgICB8fCBhcnIgaW5zdGFuY2VvZiBVaW50MTZBcnJheVxuICAgIHx8IGFyciBpbnN0YW5jZW9mIFVpbnQzMkFycmF5XG4gICAgfHwgYXJyIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5XG4gICAgfHwgYXJyIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5XG4gIClcbn1cblxuZnVuY3Rpb24gaXNMb29zZVR5cGVkQXJyYXkoYXJyKSB7XG4gIHJldHVybiBuYW1lc1t0b1N0cmluZy5jYWxsKGFycildXG59XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsInZhciBzdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxuXG5cbmZ1bmN0aW9uIGlzU3RyZWFtIChvYmopIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHN0cmVhbS5TdHJlYW1cbn1cblxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlIChvYmopIHtcbiAgcmV0dXJuIGlzU3RyZWFtKG9iaikgJiYgdHlwZW9mIG9iai5fcmVhZCA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouX3JlYWRhYmxlU3RhdGUgPT0gJ29iamVjdCdcbn1cblxuXG5mdW5jdGlvbiBpc1dyaXRhYmxlIChvYmopIHtcbiAgcmV0dXJuIGlzU3RyZWFtKG9iaikgJiYgdHlwZW9mIG9iai5fd3JpdGUgPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLl93cml0YWJsZVN0YXRlID09ICdvYmplY3QnXG59XG5cblxuZnVuY3Rpb24gaXNEdXBsZXggKG9iaikge1xuICByZXR1cm4gaXNSZWFkYWJsZShvYmopICYmIGlzV3JpdGFibGUob2JqKVxufVxuXG5cbm1vZHVsZS5leHBvcnRzICAgICAgICAgICAgPSBpc1N0cmVhbVxubW9kdWxlLmV4cG9ydHMuaXNSZWFkYWJsZSA9IGlzUmVhZGFibGVcbm1vZHVsZS5leHBvcnRzLmlzV3JpdGFibGUgPSBpc1dyaXRhYmxlXG5tb2R1bGUuZXhwb3J0cy5pc0R1cGxleCAgID0gaXNEdXBsZXhcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZ2EgTGltaXRlZFxuICogdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICogXG4gKiBBdXRob3JzOiBHdXkgSy4gS2xvc3NcbiAqIFxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS5cbiAqL1xuXG52YXIgZGggPSByZXF1aXJlKCcuL2xpYi9kaCcpO1xudmFyIGVkZHNhID0gcmVxdWlyZSgnLi9saWIvZWRkc2EnKTtcbnZhciBjdXJ2ZTI1NSA9IHJlcXVpcmUoJy4vbGliL2N1cnZlMjU1Jyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL2xpYi91dGlscycpO1xuICAgIFxuICAgIC8qKlxuICAgICAqIEBleHBvcnRzIGpvZGlkMjU1MTlcbiAgICAgKiBDdXJ2ZSAyNTUxOS1iYXNlZCBjcnlwdG9ncmFwaHkgY29sbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIEVDIERpZmZpZS1IZWxsbWFuIChFQ0RIKSBiYXNlZCBvbiBDdXJ2ZTI1NTE5IGFuZCBkaWdpdGFsIHNpZ25hdHVyZXNcbiAgICAgKiAoRWREU0EpIGJhc2VkIG9uIEVkMjU1MTkuXG4gICAgICovXG4gICAgdmFyIG5zID0ge307XG4gICAgXG4gICAgLyoqIE1vZHVsZSB2ZXJzaW9uIGluZGljYXRvciBhcyBzdHJpbmcgKGZvcm1hdDogW21ham9yLm1pbm9yLnBhdGNoXSkuICovXG4gICAgbnMuVkVSU0lPTiA9ICcwLjcuMSc7XG5cbiAgICBucy5kaCA9IGRoO1xuICAgIG5zLmVkZHNhID0gZWRkc2E7XG4gICAgbnMuY3VydmUyNTUgPSBjdXJ2ZTI1NTtcbiAgICBucy51dGlscyA9IHV0aWxzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5zO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIEBmaWxlT3ZlcnZpZXdcbiAqIENvcmUgb3BlcmF0aW9ucyBvbiBjdXJ2ZSAyNTUxOSByZXF1aXJlZCBmb3IgdGhlIGhpZ2hlciBsZXZlbCBtb2R1bGVzLlxuICovXG5cbi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTMsIDIwMTQgTWljaGVsZSBCaW5pXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVnYSBMaW1pdGVkXG4gKiB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQXV0aG9yczogR3V5IEsuIEtsb3NzLCBNaWNoZWxlIEJpbmlcbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLlxuICovXG5cbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblxuICAgIC8qKlxuICAgICAqIEBleHBvcnRzIGpvZGlkMjU1MTkvY29yZVxuICAgICAqIENvcmUgb3BlcmF0aW9ucyBvbiBjdXJ2ZSAyNTUxOSByZXF1aXJlZCBmb3IgdGhlIGhpZ2hlciBsZXZlbCBtb2R1bGVzLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogQ29yZSBvcGVyYXRpb25zIG9uIGN1cnZlIDI1NTE5IHJlcXVpcmVkIGZvciB0aGUgaGlnaGVyIGxldmVsIG1vZHVsZXMuXG4gICAgICpcbiAgICAgKiA8cD5cbiAgICAgKiBUaGlzIGNvcmUgY29kZSBpcyBleHRyYWN0ZWQgZnJvbSBNaWNoZWxlIEJpbmkncyBjdXJ2ZTI1NS5qcyBpbXBsZW1lbnRhdGlvbixcbiAgICAgKiB3aGljaCBpcyB1c2VkIGFzIGEgYmFzZSBmb3IgQ3VydmUyNTUxOSBFQ0RIIGFuZCBFZDI1NTE5IEVkRFNBIG9wZXJhdGlvbnMuXG4gICAgICogPC9wPlxuICAgICAqL1xuICAgIHZhciBucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gX3NldGJpdChuLCBjLCB2KSB7XG4gICAgICAgIHZhciBpID0gYyA+PiA0O1xuICAgICAgICB2YXIgYSA9IG5baV07XG4gICAgICAgIGEgPSBhICsgKDEgPDwgKGMgJiAweGYpKSAqIHY7XG4gICAgICAgIG5baV0gPSBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9nZXRiaXQobiwgYykge1xuICAgICAgICByZXR1cm4gKG5bYyA+PiA0XSA+PiAoYyAmIDB4ZikpICYgMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfWkVSTygpIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfT05FKCkge1xuICAgICAgICByZXR1cm4gWzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuICAgIH1cblxuICAgIC8vIEJhc2Vwb2ludC5cbiAgICBmdW5jdGlvbiBfQkFTRSgpIHtcbiAgICAgICAgcmV0dXJuIFs5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gLTEsIDAsICsxIHdoZW4gYSBpcyBsZXNzIHRoYW4sIGVxdWFsLCBvciBncmVhdGVyIHRoYW4gYlxuICAgIGZ1bmN0aW9uIF9iaWdpbnRjbXAoYSwgYikge1xuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYSBiaXQgdHJpY2t5IHRvIGF2b2lkIGNvZGUgYnJhbmNoaW5nXG4gICAgICAgIHZhciBjLCBhYnNfciwgbWFzaztcbiAgICAgICAgdmFyIHIgPSAwO1xuICAgICAgICBmb3IgKGMgPSAxNTsgYyA+PSAwOyBjLS0pIHtcbiAgICAgICAgICAgIHZhciB4ID0gYVtjXTtcbiAgICAgICAgICAgIHZhciB5ID0gYltjXTtcbiAgICAgICAgICAgIHIgPSByICsgKHggLSB5KSAqICgxIC0gciAqIHIpO1xuICAgICAgICAgICAgLy8gaHR0cDovL2dyYXBoaWNzLnN0YW5mb3JkLmVkdS9+c2VhbmRlci9iaXRoYWNrcy5odG1sI0ludGVnZXJBYnNcbiAgICAgICAgICAgIC8vIGNvcnJlY3QgZm9yIFstMjk0OTY3Mjk1LCAyOTQ5NjcyOTVdXG4gICAgICAgICAgICBtYXNrID0gciA+PiAzMTtcbiAgICAgICAgICAgIGFic19yID0gKHIgKyBtYXNrKSBeIG1hc2s7XG4gICAgICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU5NjQ2Ny9ob3ctZG8taS1jb252ZXJ0LWEtbnVtYmVyLXRvLWFuLWludGVnZXItaW4tamF2YXNjcmlwdFxuICAgICAgICAgICAgLy8gdGhpcyByb3VuZHMgdG93YXJkcyB6ZXJvXG4gICAgICAgICAgICByID0gfn4oKHIgPDwgMSkgLyAoYWJzX3IgKyAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2JpZ2ludGFkZChhLCBiKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIHZhciB2O1xuICAgICAgICByWzBdID0gKHYgPSBhWzBdICsgYlswXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMV0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzFdICsgYlsxXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMl0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzJdICsgYlsyXSkgJiAweGZmZmY7XG4gICAgICAgIHJbM10gPSAodiA9ICh2ID4+PiAxNikgKyBhWzNdICsgYlszXSkgJiAweGZmZmY7XG4gICAgICAgIHJbNF0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzRdICsgYls0XSkgJiAweGZmZmY7XG4gICAgICAgIHJbNV0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzVdICsgYls1XSkgJiAweGZmZmY7XG4gICAgICAgIHJbNl0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzZdICsgYls2XSkgJiAweGZmZmY7XG4gICAgICAgIHJbN10gPSAodiA9ICh2ID4+PiAxNikgKyBhWzddICsgYls3XSkgJiAweGZmZmY7XG4gICAgICAgIHJbOF0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzhdICsgYls4XSkgJiAweGZmZmY7XG4gICAgICAgIHJbOV0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzldICsgYls5XSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTBdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsxMF0gKyBiWzEwXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTFdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsxMV0gKyBiWzExXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTJdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsxMl0gKyBiWzEyXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTNdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsxM10gKyBiWzEzXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTRdID0gKHYgPSAodiA+Pj4gMTYpICsgYVsxNF0gKyBiWzE0XSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTVdID0gKHYgPj4+IDE2KSArIGFbMTVdICsgYlsxNV07XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9iaWdpbnRzdWIoYSwgYikge1xuICAgICAgICB2YXIgciA9IFtdO1xuICAgICAgICB2YXIgdjtcbiAgICAgICAgclswXSA9ICh2ID0gMHg4MDAwMCArIGFbMF0gLSBiWzBdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxXSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzFdIC0gYlsxXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMl0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVsyXSAtIGJbMl0pICYgMHhmZmZmO1xuICAgICAgICByWzNdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbM10gLSBiWzNdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls0XSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzRdIC0gYls0XSkgJiAweGZmZmY7XG4gICAgICAgIHJbNV0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVs1XSAtIGJbNV0pICYgMHhmZmZmO1xuICAgICAgICByWzZdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbNl0gLSBiWzZdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls3XSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzddIC0gYls3XSkgJiAweGZmZmY7XG4gICAgICAgIHJbOF0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVs4XSAtIGJbOF0pICYgMHhmZmZmO1xuICAgICAgICByWzldID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbOV0gLSBiWzldKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMF0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVsxMF0gLSBiWzEwXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTFdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbMTFdIC0gYlsxMV0pICYgMHhmZmZmO1xuICAgICAgICByWzEyXSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzEyXSAtIGJbMTJdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxM10gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVsxM10gLSBiWzEzXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTRdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbMTRdIC0gYlsxNF0pICYgMHhmZmZmO1xuICAgICAgICByWzE1XSA9ICh2ID4+PiAxNikgLSA4ICsgYVsxNV0gLSBiWzE1XTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3NxcjhoKGE3LCBhNiwgYTUsIGE0LCBhMywgYTIsIGExLCBhMCkge1xuICAgICAgICAvLyAnZGl2aXNpb24gYnkgMHgxMDAwMCcgY2FuIG5vdCBiZSByZXBsYWNlZCBieSAnPj4gMTYnIGJlY2F1c2VcbiAgICAgICAgLy8gbW9yZSB0aGFuIDMyIGJpdHMgb2YgcHJlY2lzaW9uIGFyZSBuZWVkZWQgc2ltaWxhcmx5XG4gICAgICAgIC8vICdtdWx0aXBsaWNhdGlvbiBieSAyJyBjYW5ub3QgYmUgcmVwbGFjZWQgYnkgJzw8IDEnXG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIHZhciB2O1xuICAgICAgICByWzBdID0gKHYgPSBhMCAqIGEwKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxXSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIDIgKiBhMCAqIGExKSAmIDB4ZmZmZjtcbiAgICAgICAgclsyXSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIDIgKiBhMCAqIGEyICsgYTEgKiBhMSkgJiAweGZmZmY7XG4gICAgICAgIHJbM10gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyAyICogYTAgKiBhMyArIDIgKiBhMSAqIGEyKSAmIDB4ZmZmZjtcbiAgICAgICAgcls0XSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIDIgKiBhMCAqIGE0ICsgMiAqIGExICogYTMgKyBhMlxuICAgICAgICAgICAgICAgICAgICAqIGEyKSAmIDB4ZmZmZjtcbiAgICAgICAgcls1XSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIDIgKiBhMCAqIGE1ICsgMiAqIGExICogYTQgKyAyXG4gICAgICAgICAgICAgICAgICAgICogYTIgKiBhMykgJiAweGZmZmY7XG4gICAgICAgIHJbNl0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyAyICogYTAgKiBhNiArIDIgKiBhMSAqIGE1ICsgMlxuICAgICAgICAgICAgICAgICAgICAqIGEyICogYTQgKyBhMyAqIGEzKSAmIDB4ZmZmZjtcbiAgICAgICAgcls3XSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIDIgKiBhMCAqIGE3ICsgMiAqIGExICogYTYgKyAyXG4gICAgICAgICAgICAgICAgICAgICogYTIgKiBhNSArIDIgKiBhMyAqIGE0KSAmIDB4ZmZmZjtcbiAgICAgICAgcls4XSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIDIgKiBhMSAqIGE3ICsgMiAqIGEyICogYTYgKyAyXG4gICAgICAgICAgICAgICAgICAgICogYTMgKiBhNSArIGE0ICogYTQpICYgMHhmZmZmO1xuICAgICAgICByWzldID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgMiAqIGEyICogYTcgKyAyICogYTMgKiBhNiArIDJcbiAgICAgICAgICAgICAgICAgICAgKiBhNCAqIGE1KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMF0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyAyICogYTMgKiBhNyArIDIgKiBhNCAqIGE2XG4gICAgICAgICAgICAgICAgICAgICArIGE1ICogYTUpICYgMHhmZmZmO1xuICAgICAgICByWzExXSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIDIgKiBhNCAqIGE3ICsgMiAqIGE1ICogYTYpICYgMHhmZmZmO1xuICAgICAgICByWzEyXSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIDIgKiBhNSAqIGE3ICsgYTYgKiBhNikgJiAweGZmZmY7XG4gICAgICAgIHJbMTNdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgMiAqIGE2ICogYTcpICYgMHhmZmZmO1xuICAgICAgICByWzE0XSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIGE3ICogYTcpICYgMHhmZmZmO1xuICAgICAgICByWzE1XSA9IDAgfCAodiAvIDB4MTAwMDApO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfc3FybW9kcChhKSB7XG4gICAgICAgIHZhciB4ID0gX3NxcjhoKGFbMTVdLCBhWzE0XSwgYVsxM10sIGFbMTJdLCBhWzExXSwgYVsxMF0sIGFbOV0sXG4gICAgICAgICAgICAgICAgICAgICAgIGFbOF0pO1xuICAgICAgICB2YXIgeiA9IF9zcXI4aChhWzddLCBhWzZdLCBhWzVdLCBhWzRdLCBhWzNdLCBhWzJdLCBhWzFdLCBhWzBdKTtcbiAgICAgICAgdmFyIHkgPSBfc3FyOGgoYVsxNV0gKyBhWzddLCBhWzE0XSArIGFbNl0sIGFbMTNdICsgYVs1XSwgYVsxMl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICBhWzExXSArIGFbM10sIGFbMTBdICsgYVsyXSwgYVs5XSArIGFbMV0sIGFbOF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFbMF0pO1xuICAgICAgICB2YXIgciA9IFtdO1xuICAgICAgICB2YXIgdjtcbiAgICAgICAgclswXSA9ICh2ID0gMHg4MDAwMDAgKyB6WzBdICsgKHlbOF0gLSB4WzhdIC0gels4XSArIHhbMF0gLSAweDgwKVxuICAgICAgICAgICAgICAgICAgICAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsxXVxuICAgICAgICAgICAgICAgICAgICArICh5WzldIC0geFs5XSAtIHpbOV0gKyB4WzFdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsyXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsyXVxuICAgICAgICAgICAgICAgICAgICArICh5WzEwXSAtIHhbMTBdIC0gelsxMF0gKyB4WzJdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclszXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelszXVxuICAgICAgICAgICAgICAgICAgICArICh5WzExXSAtIHhbMTFdIC0gelsxMV0gKyB4WzNdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgcls0XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgels0XVxuICAgICAgICAgICAgICAgICAgICArICh5WzEyXSAtIHhbMTJdIC0gelsxMl0gKyB4WzRdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgcls1XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgels1XVxuICAgICAgICAgICAgICAgICAgICArICh5WzEzXSAtIHhbMTNdIC0gelsxM10gKyB4WzVdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgcls2XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgels2XVxuICAgICAgICAgICAgICAgICAgICArICh5WzE0XSAtIHhbMTRdIC0gelsxNF0gKyB4WzZdKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgcls3XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgels3XVxuICAgICAgICAgICAgICAgICAgICArICh5WzE1XSAtIHhbMTVdIC0gelsxNV0gKyB4WzddKSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgcls4XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgels4XSArIHlbMF0gLSB4WzBdIC0gelswXVxuICAgICAgICAgICAgICAgICAgICArIHhbOF0gKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbOV0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbOV0gKyB5WzFdIC0geFsxXSAtIHpbMV1cbiAgICAgICAgICAgICAgICAgICAgKyB4WzldICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzEwXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsxMF0gKyB5WzJdIC0geFsyXSAtIHpbMl1cbiAgICAgICAgICAgICAgICAgICAgICsgeFsxMF0gKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbMTFdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzExXSArIHlbM10gLSB4WzNdIC0gelszXVxuICAgICAgICAgICAgICAgICAgICAgKyB4WzExXSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMl0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbMTJdICsgeVs0XSAtIHhbNF0gLSB6WzRdXG4gICAgICAgICAgICAgICAgICAgICArIHhbMTJdICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzEzXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsxM10gKyB5WzVdIC0geFs1XSAtIHpbNV1cbiAgICAgICAgICAgICAgICAgICAgICsgeFsxM10gKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbMTRdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzE0XSArIHlbNl0gLSB4WzZdIC0gels2XVxuICAgICAgICAgICAgICAgICAgICAgKyB4WzE0XSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNV0gPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzE1XSArIHlbN10gLSB4WzddIC0gels3XVxuICAgICAgICAgICAgICAgICsgeFsxNV0gKiAzODtcbiAgICAgICAgX3JlZHVjZShyKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX211bDhoKGE3LCBhNiwgYTUsIGE0LCBhMywgYTIsIGExLCBhMCwgYjcsIGI2LCBiNSwgYjQsIGIzLFxuICAgICAgICAgICAgICAgICAgICBiMiwgYjEsIGIwKSB7XG4gICAgICAgIC8vICdkaXZpc2lvbiBieSAweDEwMDAwJyBjYW4gbm90IGJlIHJlcGxhY2VkIGJ5ICc+PiAxNicgYmVjYXVzZVxuICAgICAgICAvLyBtb3JlIHRoYW4gMzIgYml0cyBvZiBwcmVjaXNpb24gYXJlIG5lZWRlZFxuICAgICAgICB2YXIgciA9IFtdO1xuICAgICAgICB2YXIgdjtcbiAgICAgICAgclswXSA9ICh2ID0gYTAgKiBiMCkgJiAweGZmZmY7XG4gICAgICAgIHJbMV0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhMCAqIGIxICsgYTEgKiBiMCkgJiAweGZmZmY7XG4gICAgICAgIHJbMl0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhMCAqIGIyICsgYTEgKiBiMSArIGEyICogYjApICYgMHhmZmZmO1xuICAgICAgICByWzNdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTAgKiBiMyArIGExICogYjIgKyBhMiAqIGIxXG4gICAgICAgICAgICAgICAgICAgICsgYTMgKiBiMCkgJiAweGZmZmY7XG4gICAgICAgIHJbNF0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhMCAqIGI0ICsgYTEgKiBiMyArIGEyICogYjJcbiAgICAgICAgICAgICAgICAgICAgKyBhMyAqIGIxICsgYTQgKiBiMCkgJiAweGZmZmY7XG4gICAgICAgIHJbNV0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhMCAqIGI1ICsgYTEgKiBiNCArIGEyICogYjNcbiAgICAgICAgICAgICAgICAgICAgKyBhMyAqIGIyICsgYTQgKiBiMSArIGE1ICogYjApICYgMHhmZmZmO1xuICAgICAgICByWzZdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTAgKiBiNiArIGExICogYjUgKyBhMiAqIGI0XG4gICAgICAgICAgICAgICAgICAgICsgYTMgKiBiMyArIGE0ICogYjIgKyBhNSAqIGIxICsgYTYgKiBiMCkgJiAweGZmZmY7XG4gICAgICAgIHJbN10gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhMCAqIGI3ICsgYTEgKiBiNiArIGEyICogYjVcbiAgICAgICAgICAgICAgICAgICAgKyBhMyAqIGI0ICsgYTQgKiBiMyArIGE1ICogYjIgKyBhNiAqIGIxICsgYTcgKiBiMCkgJiAweGZmZmY7XG4gICAgICAgIHJbOF0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhMSAqIGI3ICsgYTIgKiBiNiArIGEzICogYjVcbiAgICAgICAgICAgICAgICAgICAgKyBhNCAqIGI0ICsgYTUgKiBiMyArIGE2ICogYjIgKyBhNyAqIGIxKSAmIDB4ZmZmZjtcbiAgICAgICAgcls5XSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIGEyICogYjcgKyBhMyAqIGI2ICsgYTQgKiBiNVxuICAgICAgICAgICAgICAgICAgICArIGE1ICogYjQgKyBhNiAqIGIzICsgYTcgKiBiMikgJiAweGZmZmY7XG4gICAgICAgIHJbMTBdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTMgKiBiNyArIGE0ICogYjYgKyBhNSAqIGI1XG4gICAgICAgICAgICAgICAgICAgICArIGE2ICogYjQgKyBhNyAqIGIzKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMV0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhNCAqIGI3ICsgYTUgKiBiNiArIGE2ICogYjVcbiAgICAgICAgICAgICAgICAgICAgICsgYTcgKiBiNCkgJiAweGZmZmY7XG4gICAgICAgIHJbMTJdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTUgKiBiNyArIGE2ICogYjYgKyBhNyAqIGI1KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxM10gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhNiAqIGI3ICsgYTcgKiBiNikgJiAweGZmZmY7XG4gICAgICAgIHJbMTRdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYTcgKiBiNykgJiAweGZmZmY7XG4gICAgICAgIHJbMTVdID0gKDAgfCAodiAvIDB4MTAwMDApKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX211bG1vZHAoYSwgYikge1xuICAgICAgICAvLyBLYXJhdHN1YmEgbXVsdGlwbGljYXRpb24gc2NoZW1lOiB4KnkgPSAoYl4yK2IpKngxKnkxIC1cbiAgICAgICAgLy8gYiooeDEteDApKih5MS15MCkgKyAoYisxKSp4MCp5MFxuICAgICAgICB2YXIgeCA9IF9tdWw4aChhWzE1XSwgYVsxNF0sIGFbMTNdLCBhWzEyXSwgYVsxMV0sIGFbMTBdLCBhWzldLFxuICAgICAgICAgICAgICAgICAgICAgICBhWzhdLCBiWzE1XSwgYlsxNF0sIGJbMTNdLCBiWzEyXSwgYlsxMV0sIGJbMTBdLFxuICAgICAgICAgICAgICAgICAgICAgICBiWzldLCBiWzhdKTtcbiAgICAgICAgdmFyIHogPSBfbXVsOGgoYVs3XSwgYVs2XSwgYVs1XSwgYVs0XSwgYVszXSwgYVsyXSwgYVsxXSwgYVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgYls3XSwgYls2XSwgYls1XSwgYls0XSwgYlszXSwgYlsyXSwgYlsxXSwgYlswXSk7XG4gICAgICAgIHZhciB5ID0gX211bDhoKGFbMTVdICsgYVs3XSwgYVsxNF0gKyBhWzZdLCBhWzEzXSArIGFbNV0sIGFbMTJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYVs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgYVsxMV0gKyBhWzNdLCBhWzEwXSArIGFbMl0sIGFbOV0gKyBhWzFdLCBhWzhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICBiWzE1XSArIGJbN10sIGJbMTRdICsgYls2XSwgYlsxM10gKyBiWzVdLCBiWzEyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGJbNF0sXG4gICAgICAgICAgICAgICAgICAgICAgIGJbMTFdICsgYlszXSwgYlsxMF0gKyBiWzJdLCBiWzldICsgYlsxXSwgYls4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYlswXSk7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIHZhciB2O1xuICAgICAgICByWzBdID0gKHYgPSAweDgwMDAwMCArIHpbMF0gKyAoeVs4XSAtIHhbOF0gLSB6WzhdICsgeFswXSAtIDB4ODApXG4gICAgICAgICAgICAgICAgICAgICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzFdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzFdXG4gICAgICAgICAgICAgICAgICAgICsgKHlbOV0gLSB4WzldIC0gels5XSArIHhbMV0pICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzJdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzJdXG4gICAgICAgICAgICAgICAgICAgICsgKHlbMTBdIC0geFsxMF0gLSB6WzEwXSArIHhbMl0pICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzNdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzNdXG4gICAgICAgICAgICAgICAgICAgICsgKHlbMTFdIC0geFsxMV0gLSB6WzExXSArIHhbM10pICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzRdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzRdXG4gICAgICAgICAgICAgICAgICAgICsgKHlbMTJdIC0geFsxMl0gLSB6WzEyXSArIHhbNF0pICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzVdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzVdXG4gICAgICAgICAgICAgICAgICAgICsgKHlbMTNdIC0geFsxM10gLSB6WzEzXSArIHhbNV0pICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzZdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzZdXG4gICAgICAgICAgICAgICAgICAgICsgKHlbMTRdIC0geFsxNF0gLSB6WzE0XSArIHhbNl0pICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzddID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzddXG4gICAgICAgICAgICAgICAgICAgICsgKHlbMTVdIC0geFsxNV0gLSB6WzE1XSArIHhbN10pICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzhdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzhdICsgeVswXSAtIHhbMF0gLSB6WzBdXG4gICAgICAgICAgICAgICAgICAgICsgeFs4XSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgcls5XSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgels5XSArIHlbMV0gLSB4WzFdIC0gelsxXVxuICAgICAgICAgICAgICAgICAgICArIHhbOV0gKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbMTBdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzEwXSArIHlbMl0gLSB4WzJdIC0gelsyXVxuICAgICAgICAgICAgICAgICAgICAgKyB4WzEwXSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMV0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbMTFdICsgeVszXSAtIHhbM10gLSB6WzNdXG4gICAgICAgICAgICAgICAgICAgICArIHhbMTFdICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzEyXSA9ICh2ID0gMHg3ZmZmODAgKyAodiA+Pj4gMTYpICsgelsxMl0gKyB5WzRdIC0geFs0XSAtIHpbNF1cbiAgICAgICAgICAgICAgICAgICAgICsgeFsxMl0gKiAzOCkgJiAweGZmZmY7XG4gICAgICAgIHJbMTNdID0gKHYgPSAweDdmZmY4MCArICh2ID4+PiAxNikgKyB6WzEzXSArIHlbNV0gLSB4WzVdIC0gels1XVxuICAgICAgICAgICAgICAgICAgICAgKyB4WzEzXSAqIDM4KSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNF0gPSAodiA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbMTRdICsgeVs2XSAtIHhbNl0gLSB6WzZdXG4gICAgICAgICAgICAgICAgICAgICArIHhbMTRdICogMzgpICYgMHhmZmZmO1xuICAgICAgICByWzE1XSA9IDB4N2ZmZjgwICsgKHYgPj4+IDE2KSArIHpbMTVdICsgeVs3XSAtIHhbN10gLSB6WzddXG4gICAgICAgICAgICAgICAgKyB4WzE1XSAqIDM4O1xuICAgICAgICBfcmVkdWNlKHIpO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcmVkdWNlKGFycikge1xuICAgICAgICB2YXIgYUNvcHkgPSBhcnIuc2xpY2UoMCk7XG4gICAgICAgIHZhciBjaG9pY2UgPSBbYXJyLCBhQ29weV07XG4gICAgICAgIHZhciB2ID0gYXJyWzE1XTtcbiAgICAgICAgLy8gVXNlIHRoZSBkdW1teSBjb3B5IGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgdG8gYmUgbW9yZSBjb25zdGFudCB0aW1lLlxuICAgICAgICB2YXIgYSA9IGNob2ljZVsodiA8IDB4ODAwMCkgJiAxXTtcbiAgICAgICAgYVsxNV0gPSB2ICYgMHg3ZmZmO1xuICAgICAgICAvLyA+MzItYml0cyBvZiBwcmVjaXNpb24gYXJlIHJlcXVpcmVkIGhlcmUgc28gJy8gMHg4MDAwJyBjYW4gbm90IGJlXG4gICAgICAgIC8vIHJlcGxhY2VkIGJ5IHRoZSBhcml0aG1ldGljIGVxdWl2YWxlbnQgJz4+PiAxNSdcbiAgICAgICAgdiA9ICgwIHwgKHYgLyAweDgwMDApKSAqIDE5O1xuICAgICAgICBhWzBdID0gKHYgKz0gYVswXSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVsxXSA9ICh2ICs9IGFbMV0pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbMl0gPSAodiArPSBhWzJdKSAmIDB4ZmZmZjtcbiAgICAgICAgdiA9IHYgPj4+IDE2O1xuICAgICAgICBhWzNdID0gKHYgKz0gYVszXSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVs0XSA9ICh2ICs9IGFbNF0pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbNV0gPSAodiArPSBhWzVdKSAmIDB4ZmZmZjtcbiAgICAgICAgdiA9IHYgPj4+IDE2O1xuICAgICAgICBhWzZdID0gKHYgKz0gYVs2XSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVs3XSA9ICh2ICs9IGFbN10pICYgMHhmZmZmO1xuICAgICAgICB2ID0gdiA+Pj4gMTY7XG4gICAgICAgIGFbOF0gPSAodiArPSBhWzhdKSAmIDB4ZmZmZjtcbiAgICAgICAgdiA9IHYgPj4+IDE2O1xuICAgICAgICBhWzldID0gKHYgKz0gYVs5XSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVsxMF0gPSAodiArPSBhWzEwXSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVsxMV0gPSAodiArPSBhWzExXSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVsxMl0gPSAodiArPSBhWzEyXSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVsxM10gPSAodiArPSBhWzEzXSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVsxNF0gPSAodiArPSBhWzE0XSkgJiAweGZmZmY7XG4gICAgICAgIHYgPSB2ID4+PiAxNjtcbiAgICAgICAgYVsxNV0gKz0gdjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYWRkbW9kcChhLCBiKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIHZhciB2O1xuICAgICAgICByWzBdID0gKHYgPSAoKDAgfCAoYVsxNV0gPj4+IDE1KSkgKyAoMCB8IChiWzE1XSA+Pj4gMTUpKSkgKiAxOVxuICAgICAgICAgICAgICAgICAgICArIGFbMF0gKyBiWzBdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxXSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbMV0gKyBiWzFdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsyXSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbMl0gKyBiWzJdKSAmIDB4ZmZmZjtcbiAgICAgICAgclszXSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbM10gKyBiWzNdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls0XSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbNF0gKyBiWzRdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls1XSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbNV0gKyBiWzVdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls2XSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbNl0gKyBiWzZdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls3XSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbN10gKyBiWzddKSAmIDB4ZmZmZjtcbiAgICAgICAgcls4XSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbOF0gKyBiWzhdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls5XSA9ICh2ID0gKHYgPj4+IDE2KSArIGFbOV0gKyBiWzldKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMF0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzEwXSArIGJbMTBdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMV0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzExXSArIGJbMTFdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMl0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzEyXSArIGJbMTJdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxM10gPSAodiA9ICh2ID4+PiAxNikgKyBhWzEzXSArIGJbMTNdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNF0gPSAodiA9ICh2ID4+PiAxNikgKyBhWzE0XSArIGJbMTRdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNV0gPSAodiA+Pj4gMTYpICsgKGFbMTVdICYgMHg3ZmZmKSArIChiWzE1XSAmIDB4N2ZmZik7XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9zdWJtb2RwKGEsIGIpIHtcbiAgICAgICAgdmFyIHIgPSBbXTtcbiAgICAgICAgdmFyIHY7XG4gICAgICAgIHJbMF0gPSAodiA9IDB4ODAwMDBcbiAgICAgICAgICAgICAgICAgICAgKyAoKDAgfCAoYVsxNV0gPj4+IDE1KSkgLSAoMCB8IChiWzE1XSA+Pj4gMTUpKSAtIDEpXG4gICAgICAgICAgICAgICAgICAgICogMTkgKyBhWzBdIC0gYlswXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMV0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVsxXSAtIGJbMV0pICYgMHhmZmZmO1xuICAgICAgICByWzJdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbMl0gLSBiWzJdKSAmIDB4ZmZmZjtcbiAgICAgICAgclszXSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzNdIC0gYlszXSkgJiAweGZmZmY7XG4gICAgICAgIHJbNF0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVs0XSAtIGJbNF0pICYgMHhmZmZmO1xuICAgICAgICByWzVdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbNV0gLSBiWzVdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls2XSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzZdIC0gYls2XSkgJiAweGZmZmY7XG4gICAgICAgIHJbN10gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVs3XSAtIGJbN10pICYgMHhmZmZmO1xuICAgICAgICByWzhdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbOF0gLSBiWzhdKSAmIDB4ZmZmZjtcbiAgICAgICAgcls5XSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzldIC0gYls5XSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTBdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbMTBdIC0gYlsxMF0pICYgMHhmZmZmO1xuICAgICAgICByWzExXSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzExXSAtIGJbMTFdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMl0gPSAodiA9ICh2ID4+PiAxNikgKyAweDdmZmY4ICsgYVsxMl0gLSBiWzEyXSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTNdID0gKHYgPSAodiA+Pj4gMTYpICsgMHg3ZmZmOCArIGFbMTNdIC0gYlsxM10pICYgMHhmZmZmO1xuICAgICAgICByWzE0XSA9ICh2ID0gKHYgPj4+IDE2KSArIDB4N2ZmZjggKyBhWzE0XSAtIGJbMTRdKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNV0gPSAodiA+Pj4gMTYpICsgMHg3ZmY4ICsgKGFbMTVdICYgMHg3ZmZmKVxuICAgICAgICAgICAgICAgIC0gKGJbMTVdICYgMHg3ZmZmKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ludm1vZHAoYSkge1xuICAgICAgICB2YXIgYyA9IGE7XG4gICAgICAgIHZhciBpID0gMjUwO1xuICAgICAgICB3aGlsZSAoLS1pKSB7XG4gICAgICAgICAgICBhID0gX3Nxcm1vZHAoYSk7XG4gICAgICAgICAgICBhID0gX211bG1vZHAoYSwgYyk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IF9zcXJtb2RwKGEpO1xuICAgICAgICBhID0gX3Nxcm1vZHAoYSk7XG4gICAgICAgIGEgPSBfbXVsbW9kcChhLCBjKTtcbiAgICAgICAgYSA9IF9zcXJtb2RwKGEpO1xuICAgICAgICBhID0gX3Nxcm1vZHAoYSk7XG4gICAgICAgIGEgPSBfbXVsbW9kcChhLCBjKTtcbiAgICAgICAgYSA9IF9zcXJtb2RwKGEpO1xuICAgICAgICBhID0gX211bG1vZHAoYSwgYyk7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9tdWxhc21hbGwoYSkge1xuICAgICAgICAvLyAnZGl2aXNpb24gYnkgMHgxMDAwMCcgY2FuIG5vdCBiZSByZXBsYWNlZCBieSAnPj4gMTYnIGJlY2F1c2VcbiAgICAgICAgLy8gbW9yZSB0aGFuIDMyIGJpdHMgb2YgcHJlY2lzaW9uIGFyZSBuZWVkZWRcbiAgICAgICAgdmFyIG0gPSAxMjE2NjU7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIHZhciB2O1xuICAgICAgICByWzBdID0gKHYgPSBhWzBdICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbMV0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzFdICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbMl0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzJdICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbM10gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzNdICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbNF0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzRdICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbNV0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzVdICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbNl0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzZdICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbN10gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzddICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbOF0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzhdICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbOV0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzldICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTBdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVsxMF0gKiBtKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxMV0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzExXSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzEyXSA9ICh2ID0gKDAgfCAodiAvIDB4MTAwMDApKSArIGFbMTJdICogbSkgJiAweGZmZmY7XG4gICAgICAgIHJbMTNdID0gKHYgPSAoMCB8ICh2IC8gMHgxMDAwMCkpICsgYVsxM10gKiBtKSAmIDB4ZmZmZjtcbiAgICAgICAgclsxNF0gPSAodiA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzE0XSAqIG0pICYgMHhmZmZmO1xuICAgICAgICByWzE1XSA9ICgwIHwgKHYgLyAweDEwMDAwKSkgKyBhWzE1XSAqIG07XG4gICAgICAgIF9yZWR1Y2Uocik7XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9kYmwoeCwgeikge1xuICAgICAgICB2YXIgeF8yLCB6XzIsIG0sIG4sIG87XG4gICAgICAgIG0gPSBfc3FybW9kcChfYWRkbW9kcCh4LCB6KSk7XG4gICAgICAgIG4gPSBfc3FybW9kcChfc3VibW9kcCh4LCB6KSk7XG4gICAgICAgIG8gPSBfc3VibW9kcChtLCBuKTtcbiAgICAgICAgeF8yID0gX211bG1vZHAobiwgbSk7XG4gICAgICAgIHpfMiA9IF9tdWxtb2RwKF9hZGRtb2RwKF9tdWxhc21hbGwobyksIG0pLCBvKTtcbiAgICAgICAgcmV0dXJuIFt4XzIsIHpfMl07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3N1bSh4LCB6LCB4X3AsIHpfcCwgeF8xKSB7XG4gICAgICAgIHZhciB4XzMsIHpfMywgcCwgcTtcbiAgICAgICAgcCA9IF9tdWxtb2RwKF9zdWJtb2RwKHgsIHopLCBfYWRkbW9kcCh4X3AsIHpfcCkpO1xuICAgICAgICBxID0gX211bG1vZHAoX2FkZG1vZHAoeCwgeiksIF9zdWJtb2RwKHhfcCwgel9wKSk7XG4gICAgICAgIHhfMyA9IF9zcXJtb2RwKF9hZGRtb2RwKHAsIHEpKTtcbiAgICAgICAgel8zID0gX211bG1vZHAoX3Nxcm1vZHAoX3N1Ym1vZHAocCwgcSkpLCB4XzEpO1xuICAgICAgICByZXR1cm4gW3hfMywgel8zXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZ2VuZXJhdGVLZXkoY3VydmUyNTUxOSkge1xuICAgICAgICB2YXIgYnVmZmVyID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKTtcblxuICAgICAgICAvLyBGb3IgQ3VydmUyNTUxOSBESCBrZXlzLCB3ZSBuZWVkIHRvIGFwcGx5IHNvbWUgYml0IG1hc2sgb24gZ2VuZXJhdGVkXG4gICAgICAgIC8vIGtleXM6XG4gICAgICAgIC8vICogY2xlYXIgYml0IDAsIDEsIDIgb2YgZmlyc3QgYnl0ZVxuICAgICAgICAvLyAqIGNsZWFyIGJpdCA3IG9mIGxhc3QgYnl0ZVxuICAgICAgICAvLyAqIHNldCBiaXQgNiBvZiBsYXN0IGJ5dGVcbiAgICAgICAgaWYgKGN1cnZlMjU1MTkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGJ1ZmZlclswXSAmPSAweGY4O1xuICAgICAgICAgICAgYnVmZmVyWzMxXSA9IChidWZmZXJbMzFdICYgMHg3ZikgfCAweDQwO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmZmVyW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2Ugc29tZSBmdW5jdGlvbnMgdG8gdGhlIG91dHNpZGUgdGhyb3VnaCB0aGlzIG5hbWUgc3BhY2UuXG4gICAgLy8gTm90ZTogVGhpcyBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljIEFQSS5cbiAgICBucy5nZXRiaXQgPSBfZ2V0Yml0O1xuICAgIG5zLnNldGJpdCA9IF9zZXRiaXQ7XG4gICAgbnMuYWRkbW9kcCA9IF9hZGRtb2RwO1xuICAgIG5zLmludm1vZHAgPSBfaW52bW9kcDtcbiAgICBucy5tdWxtb2RwID0gX211bG1vZHA7XG4gICAgbnMucmVkdWNlID0gX3JlZHVjZTtcbiAgICBucy5kYmwgPSBfZGJsO1xuICAgIG5zLnN1bSA9IF9zdW07XG4gICAgbnMuWkVSTyA9IF9aRVJPO1xuICAgIG5zLk9ORSA9IF9PTkU7XG4gICAgbnMuQkFTRSA9IF9CQVNFO1xuICAgIG5zLmJpZ2ludGFkZCA9IF9iaWdpbnRhZGQ7XG4gICAgbnMuYmlnaW50c3ViID0gX2JpZ2ludHN1YjtcbiAgICBucy5iaWdpbnRjbXAgPSBfYmlnaW50Y21wO1xuICAgIG5zLm11bG1vZHAgPSBfbXVsbW9kcDtcbiAgICBucy5zcXJtb2RwID0gX3Nxcm1vZHA7XG4gICAgbnMuZ2VuZXJhdGVLZXkgPSBfZ2VuZXJhdGVLZXk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBucztcbiIsIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBAZmlsZU92ZXJ2aWV3XG4gKiBDb3JlIG9wZXJhdGlvbnMgb24gY3VydmUgMjU1MTkgcmVxdWlyZWQgZm9yIHRoZSBoaWdoZXIgbGV2ZWwgbW9kdWxlcy5cbiAqL1xuXG4vKlxuICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDEzLCAyMDE0IE1pY2hlbGUgQmluaVxuICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZ2EgTGltaXRlZFxuICogdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICpcbiAqIEF1dGhvcnM6IEd1eSBLLiBLbG9zcywgTWljaGVsZSBCaW5pXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS5cbiAqL1xuXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG4gICAgLyoqXG4gICAgICogQGV4cG9ydHMgam9kaWQyNTUxOS9jdXJ2ZTI1NVxuICAgICAqIExlZ2FjeSBjb21wYXRpYmlsaXR5IG1vZHVsZSBmb3IgTWljaGVsZSBCaW5pJ3MgcHJldmlvdXMgY3VydmUyNTUuanMuXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBMZWdhY3kgY29tcGF0aWJpbGl0eSBtb2R1bGUgZm9yIE1pY2hlbGUgQmluaSdzIHByZXZpb3VzIGN1cnZlMjU1LmpzLlxuICAgICAqXG4gICAgICogPHA+XG4gICAgICogVGhpcyBjb2RlIHByZXNlbnRzIGFuIEFQSSB3aXRoIGFsbCBrZXkgZm9ybWF0cyBhcyBwcmV2aW91c2x5IGF2YWlsYWJsZVxuICAgICAqIGZyb20gTWljaGVsZSBCaW5pJ3MgY3VydmUyNTUuanMgaW1wbGVtZW50YXRpb24uXG4gICAgICogPC9wPlxuICAgICAqL1xuICAgIHZhciBucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gY3VydmUyNTUxOV9yYXcoZiwgYykge1xuICAgICAgICB2YXIgYSwgeF8xLCBxO1xuXG4gICAgICAgIHhfMSA9IGM7XG4gICAgICAgIGEgPSBjb3JlLmRibCh4XzEsIGNvcmUuT05FKCkpO1xuICAgICAgICBxID0gW3hfMSwgY29yZS5PTkUoKV07XG5cbiAgICAgICAgdmFyIG4gPSAyNTU7XG5cbiAgICAgICAgd2hpbGUgKGNvcmUuZ2V0Yml0KGYsIG4pID09IDApIHtcbiAgICAgICAgICAgIG4tLTtcbiAgICAgICAgICAgIC8vIEZvciBjb3JyZWN0IGNvbnN0YW50LXRpbWUgb3BlcmF0aW9uLCBiaXQgMjU1IHNob3VsZCBhbHdheXMgYmVcbiAgICAgICAgICAgIC8vIHNldCB0byAxIHNvIHRoZSBmb2xsb3dpbmcgJ3doaWxlJyBsb29wIGlzIG5ldmVyIGVudGVyZWQuXG4gICAgICAgICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29yZS5aRVJPKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbi0tO1xuXG4gICAgICAgIHZhciBhcSA9IFthLCBxXTtcblxuICAgICAgICB3aGlsZSAobiA+PSAwKSB7XG4gICAgICAgICAgICB2YXIgciwgcztcbiAgICAgICAgICAgIHZhciBiID0gY29yZS5nZXRiaXQoZiwgbik7XG4gICAgICAgICAgICByID0gY29yZS5zdW0oYXFbMF1bMF0sIGFxWzBdWzFdLCBhcVsxXVswXSwgYXFbMV1bMV0sIHhfMSk7XG4gICAgICAgICAgICBzID0gY29yZS5kYmwoYXFbMSAtIGJdWzBdLCBhcVsxIC0gYl1bMV0pO1xuICAgICAgICAgICAgYXFbMSAtIGJdID0gcztcbiAgICAgICAgICAgIGFxW2JdID0gcjtcbiAgICAgICAgICAgIG4tLTtcbiAgICAgICAgfVxuICAgICAgICBxID0gYXFbMV07XG5cbiAgICAgICAgcVsxXSA9IGNvcmUuaW52bW9kcChxWzFdKTtcbiAgICAgICAgcVswXSA9IGNvcmUubXVsbW9kcChxWzBdLCBxWzFdKTtcbiAgICAgICAgY29yZS5yZWR1Y2UocVswXSk7XG4gICAgICAgIHJldHVybiBxWzBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnZlMjU1MTliMzIoYSwgYikge1xuICAgICAgICByZXR1cm4gX2Jhc2UzMmVuY29kZShjdXJ2ZTI1NTE5KF9iYXNlMzJkZWNvZGUoYSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Jhc2UzMmRlY29kZShiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnZlMjU1MTkoZiwgYykge1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIGMgPSBjb3JlLkJBU0UoKTtcbiAgICAgICAgfVxuICAgICAgICBmWzBdICY9IDB4RkZGODtcbiAgICAgICAgZlsxNV0gPSAoZlsxNV0gJiAweDdGRkYpIHwgMHg0MDAwO1xuICAgICAgICByZXR1cm4gY3VydmUyNTUxOV9yYXcoZiwgYyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2hleEVuY29kZVZlY3RvcihrKSB7XG4gICAgICAgIHZhciBoZXhLZXkgPSB1dGlscy5oZXhFbmNvZGUoayk7XG4gICAgICAgIC8vIFBhZCB3aXRoICcwJyBhdCB0aGUgZnJvbnQuXG4gICAgICAgIGhleEtleSA9IG5ldyBBcnJheSg2NCArIDEgLSBoZXhLZXkubGVuZ3RoKS5qb2luKCcwJykgKyBoZXhLZXk7XG4gICAgICAgIC8vIEludmVydCBieXRlcy5cbiAgICAgICAgcmV0dXJuIGhleEtleS5zcGxpdCgvKC4uKS8pLnJldmVyc2UoKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaGV4RGVjb2RlVmVjdG9yKHYpIHtcbiAgICAgICAgLy8gYXNzZXJ0KGxlbmd0aCh4KSA9PSA2NCk7XG4gICAgICAgIC8vIEludmVydCBieXRlcy5cbiAgICAgICAgdmFyIGhleEtleSA9IHYuc3BsaXQoLyguLikvKS5yZXZlcnNlKCkuam9pbignJyk7XG4gICAgICAgIHJldHVybiB1dGlscy5oZXhEZWNvZGUoaGV4S2V5KTtcbiAgICB9XG5cblxuICAgIC8vIEV4cG9zZSBzb21lIGZ1bmN0aW9ucyB0byB0aGUgb3V0c2lkZSB0aHJvdWdoIHRoaXMgbmFtZSBzcGFjZS5cblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBzY2FsYXIgcHJvZHVjdCBvZiBhIHBvaW50IG9uIHRoZSBjdXJ2ZSAyNTUxOS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdGhlIERIIGtleS1leGNoYW5nZSBwcm90b2NvbC5cbiAgICAgKlxuICAgICAqIEJlZm9yZSBtdWx0aXBsaWNhdGlvbiwgc29tZSBiaXQgb3BlcmF0aW9ucyBhcmUgYXBwbGllZCB0byB0aGVcbiAgICAgKiBwcml2YXRlIGtleSB0byBlbnN1cmUgaXQgaXMgYSB2YWxpZCBDdXJ2ZTI1NTE5IHNlY3JldCBrZXkuXG4gICAgICogSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcHJpdmF0ZVxuICAgICAqIGtleSBpcyBhIHVuaWZvcm1seSByYW5kb20sIHNlY3JldCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBmIHthcnJheX1cbiAgICAgKiAgICAgUHJpdmF0ZSBrZXkuXG4gICAgICogQHBhcmFtIGMge2FycmF5fVxuICAgICAqICAgICBQdWJsaWMgcG9pbnQgb24gdGhlIGN1cnZlLiBJZiBub3QgZ2l2ZW4sIHRoZSBjdXJ2ZSdzIGJhc2UgcG9pbnQgaXMgdXNlZC5cbiAgICAgKiBAcmV0dXJucyB7YXJyYXl9XG4gICAgICogICAgIEtleSBwb2ludCByZXN1bHRpbmcgZnJvbSBzY2FsYXIgcHJvZHVjdC5cbiAgICAgKi9cbiAgICBucy5jdXJ2ZTI1NTE5ID0gY3VydmUyNTUxOTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBzY2FsYXIgcHJvZHVjdCBvZiBhIHBvaW50IG9uIHRoZSBjdXJ2ZSAyNTUxOS5cbiAgICAgKlxuICAgICAqIFRoaXMgdmFyaWFudCBkb2VzIG5vdCBtYWtlIHN1cmUgdGhhdCB0aGUgcHJpdmF0ZSBrZXkgaXMgdmFsaWQuXG4gICAgICogVGhlIHVzZXIgaGFzIHRoZSByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhlIHByaXZhdGUga2V5IGlzXG4gICAgICogdmFsaWQgb3IgdGhhdCB0aGlzIHJlc3VsdHMgaW4gYSBzYWZlIHByb3RvY29sLiAgVW5sZXNzIHlvdSBrbm93XG4gICAgICogZXhhY3RseSB3aGF0IHlvdSBhcmUgZG9pbmcsIHlvdSBzaG91bGQgbm90IHVzZSB0aGlzIHZhcmlhbnQsXG4gICAgICogcGxlYXNlIHVzZSAnY3VydmUyNTUxOScgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBmIHthcnJheX1cbiAgICAgKiAgICAgUHJpdmF0ZSBrZXkuXG4gICAgICogQHBhcmFtIGMge2FycmF5fVxuICAgICAqICAgICBQdWJsaWMgcG9pbnQgb24gdGhlIGN1cnZlLiBJZiBub3QgZ2l2ZW4sIHRoZSBjdXJ2ZSdzIGJhc2UgcG9pbnQgaXMgdXNlZC5cbiAgICAgKiBAcmV0dXJucyB7YXJyYXl9XG4gICAgICogICAgIEtleSBwb2ludCByZXN1bHRpbmcgZnJvbSBzY2FsYXIgcHJvZHVjdC5cbiAgICAgKi9cbiAgICBucy5jdXJ2ZTI1NTE5X3JhdyA9IGN1cnZlMjU1MTlfcmF3O1xuXG4gICAgLyoqXG4gICAgICogRW5jb2RlcyB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBrZXkgdG8gYSBjYW5vbmljYWwgaGV4XG4gICAgICogcmVwcmVzZW50YXRpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHRoZSBmb3JtYXQgY29tbW9ubHkgdXNlZCBpbiBvdGhlciBsaWJyYXJpZXMgYW5kIGZvclxuICAgICAqIHRlc3QgdmVjdG9ycywgYW5kIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGhleCBkdW1wIG9mIHRoZSBrZXkgaW5cbiAgICAgKiBsaXR0bGUtZW5kaWFuIGJpbmFyeSBmb3JtYXQuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gbiB7YXJyYXl9XG4gICAgICogICAgIEFycmF5IHJlcHJlc2VudGF0aW9uIG9mIGtleS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqICAgICBIZXhhZGVjaW1hbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Yga2V5LlxuICAgICAqL1xuICAgIG5zLmhleEVuY29kZVZlY3RvciA9IF9oZXhFbmNvZGVWZWN0b3I7XG5cbiAgICAvKipcbiAgICAgKiBEZWNvZGVzIGEgY2Fub25pY2FsIGhleCByZXByZXNlbnRhdGlvbiBvZiBhIGtleVxuICAgICAqIHRvIGFuIGludGVybmFsbHkgY29tcGF0aWJsZSBhcnJheSByZXByZXNlbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBuIHtzdHJpbmd9XG4gICAgICogICAgIEhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBrZXkuXG4gICAgICogQHJldHVybnMge2FycmF5fVxuICAgICAqICAgICBBcnJheSByZXByZXNlbnRhdGlvbiBvZiBrZXkuXG4gICAgICovXG4gICAgbnMuaGV4RGVjb2RlVmVjdG9yID0gX2hleERlY29kZVZlY3RvcjtcblxuICAgIC8qKlxuICAgICAqIEVuY29kZXMgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGEga2V5IGludG8gYVxuICAgICAqIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhIHN0cmljdCBwb3NpdGlvbmFsIG5vdGF0aW9uLCBtb3N0IHNpZ25pZmljYW50IGRpZ2l0IGZpcnN0LlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIG4ge2FycmF5fVxuICAgICAqICAgICBBcnJheSByZXByZXNlbnRhdGlvbiBvZiBrZXkuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgICAgSGV4YWRlY2ltYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGtleS5cbiAgICAgKi9cbiAgICBucy5oZXhlbmNvZGUgPSB1dGlscy5oZXhFbmNvZGU7XG5cbiAgICAvKipcbiAgICAgKiBEZWNvZGVzIGEgaGV4IHJlcHJlc2VudGF0aW9uIG9mIGEga2V5IHRvIGFuIGludGVybmFsbHlcbiAgICAgKiBjb21wYXRpYmxlIGFycmF5IHJlcHJlc2VudGF0aW9uLlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIG4ge3N0cmluZ31cbiAgICAgKiAgICAgSGV4YWRlY2ltYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGtleS5cbiAgICAgKiBAcmV0dXJucyB7YXJyYXl9XG4gICAgICogICAgIEFycmF5IHJlcHJlc2VudGF0aW9uIG9mIGtleS5cbiAgICAgKi9cbiAgICBucy5oZXhkZWNvZGUgPSB1dGlscy5oZXhEZWNvZGU7XG5cbiAgICAvKipcbiAgICAgKiBFbmNvZGVzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIGtleSB0byBhIGJhc2UzMlxuICAgICAqIHJlcHJlc2VudGF0aW9uLlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIG4ge2FycmF5fVxuICAgICAqICAgICBBcnJheSByZXByZXNlbnRhdGlvbiBvZiBrZXkuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgICAgQmFzZTMyIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBrZXkuXG4gICAgICovXG4gICAgbnMuYmFzZTMyZW5jb2RlID0gdXRpbHMuYmFzZTMyZW5jb2RlO1xuXG4gICAgLyoqXG4gICAgICogRGVjb2RlcyBhIGJhc2UzMiByZXByZXNlbnRhdGlvbiBvZiBhIGtleSB0byBhbiBpbnRlcm5hbGx5XG4gICAgICogY29tcGF0aWJsZSBhcnJheSByZXByZXNlbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBuIHtzdHJpbmd9XG4gICAgICogICAgIEJhc2UzMiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Yga2V5LlxuICAgICAqIEByZXR1cm5zIHthcnJheX1cbiAgICAgKiAgICAgQXJyYXkgcmVwcmVzZW50YXRpb24gb2Yga2V5LlxuICAgICAqL1xuICAgIG5zLmJhc2UzMmRlY29kZSA9IHV0aWxzLmJhc2UzMmRlY29kZTtcblxubW9kdWxlLmV4cG9ydHMgPSBucztcbiIsIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBAZmlsZU92ZXJ2aWV3XG4gKiBFQyBEaWZmaWUtSGVsbG1hbiBvcGVyYXRpb25zIG9uIEN1cnZlMjU1MTkuXG4gKi9cblxuLypcbiAqIENvcHlyaWdodCAoYykgMjAxNCBNZWdhIExpbWl0ZWRcbiAqIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqXG4gKiBBdXRob3JzOiBHdXkgSy4gS2xvc3NcbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLlxuICovXG5cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY3VydmUyNTUgPSByZXF1aXJlKCcuL2N1cnZlMjU1Jyk7XG5cblxuICAgIC8qKlxuICAgICAqIEBleHBvcnRzIGpvZGlkMjU1MTkvZGhcbiAgICAgKiBFQyBEaWZmaWUtSGVsbG1hbiBvcGVyYXRpb25zIG9uIEN1cnZlMjU1MTkuXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBFQyBEaWZmaWUtSGVsbG1hbiBvcGVyYXRpb25zIG9uIEN1cnZlMjU1MTkuXG4gICAgICovXG4gICAgdmFyIG5zID0ge307XG5cblxuICAgIGZ1bmN0aW9uIF90b1N0cmluZyh2ZWN0b3IpIHtcbiAgICAgICAgdmFyIHUgPSBuZXcgVWludDE2QXJyYXkodmVjdG9yKTtcbiAgICAgICAgcmV0dXJuIChuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KHUuYnVmZmVyKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9mcm9tU3RyaW5nKHZlY3Rvcikge1xuICAgICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZlY3RvcikpIHtcbiAgICAgICAgICAgIHZhciB1ID0gbmV3IFVpbnQ4QXJyYXkodmVjdG9yKTtcbiAgICAgICAgICAgIHJldHVybiAobmV3IFVpbnQxNkFycmF5KHUuYnVmZmVyKSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KDE2KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSAwOyBpIDwgdmVjdG9yLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICByZXN1bHRbbF0gPSAodmVjdG9yLmNoYXJDb2RlQXQoaSArIDEpIDw8IDgpIHwgdmVjdG9yLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBsKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIGEga2V5IHRocm91Z2ggc2NhbGFyIG11bHRpcGxpY2F0aW9uIG9mIGEgcG9pbnQgb24gdGhlIGN1cnZlIDI1NTE5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciB0aGUgREgga2V5LWV4Y2hhbmdlIHByb3RvY29sLiBJdCBjb21wdXRlcyBhXG4gICAgICoga2V5IGJhc2VkIG9uIGEgc2VjcmV0IGtleSB3aXRoIGEgcHVibGljIGNvbXBvbmVudCAob3Bwb25lbnQncyBwdWJsaWMga2V5XG4gICAgICogb3IgY3VydmUgYmFzZSBwb2ludCBpZiBub3QgZ2l2ZW4pIGJ5IHVzaW5nIHNjYWxhciBtdWx0aXBsaWNhdGlvbi5cbiAgICAgKlxuICAgICAqIEJlZm9yZSBtdWx0aXBsaWNhdGlvbiwgc29tZSBiaXQgb3BlcmF0aW9ucyBhcmUgYXBwbGllZCB0byB0aGVcbiAgICAgKiBwcml2YXRlIGtleSB0byBlbnN1cmUgaXQgaXMgYSB2YWxpZCBDdXJ2ZTI1NTE5IHNlY3JldCBrZXkuXG4gICAgICogSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcHJpdmF0ZVxuICAgICAqIGtleSBpcyBhIHVuaWZvcm1seSByYW5kb20sIHNlY3JldCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBwcml2YXRlQ29tcG9uZW50IHtzdHJpbmd9XG4gICAgICogICAgIFByaXZhdGUgcG9pbnQgYXMgYnl0ZSBzdHJpbmcgb24gdGhlIGN1cnZlLlxuICAgICAqIEBwYXJhbSBwdWJsaWNDb21wb25lbnQge3N0cmluZ31cbiAgICAgKiAgICAgUHVibGljIHBvaW50IGFzIGJ5dGUgc3RyaW5nIG9uIHRoZSBjdXJ2ZS4gSWYgbm90IGdpdmVuLCB0aGUgY3VydmUnc1xuICAgICAqICAgICBiYXNlIHBvaW50IGlzIHVzZWQuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgICAgS2V5IHBvaW50IGFzIGJ5dGUgc3RyaW5nIHJlc3VsdGluZyBmcm9tIHNjYWxhciBwcm9kdWN0LlxuICAgICAqL1xuICAgIG5zLmNvbXB1dGVLZXkgPSBmdW5jdGlvbihwcml2YXRlQ29tcG9uZW50LCBwdWJsaWNDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKHB1YmxpY0NvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF90b1N0cmluZyhjdXJ2ZTI1NS5jdXJ2ZTI1NTE5KF9mcm9tU3RyaW5nKHByaXZhdGVDb21wb25lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9mcm9tU3RyaW5nKHB1YmxpY0NvbXBvbmVudCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfdG9TdHJpbmcoY3VydmUyNTUuY3VydmUyNTUxOShfZnJvbVN0cmluZyhwcml2YXRlQ29tcG9uZW50KSkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBwdWJsaWMga2V5IHRvIGEgcHJpdmF0ZSBrZXkgb24gdGhlIGN1cnZlIDI1NTE5LlxuICAgICAqXG4gICAgICogQmVmb3JlIG11bHRpcGxpY2F0aW9uLCBzb21lIGJpdCBvcGVyYXRpb25zIGFyZSBhcHBsaWVkIHRvIHRoZVxuICAgICAqIHByaXZhdGUga2V5IHRvIGVuc3VyZSBpdCBpcyBhIHZhbGlkIEN1cnZlMjU1MTkgc2VjcmV0IGtleS5cbiAgICAgKiBJdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwcml2YXRlXG4gICAgICoga2V5IGlzIGEgdW5pZm9ybWx5IHJhbmRvbSwgc2VjcmV0IHZhbHVlLlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHByaXZhdGVLZXkge3N0cmluZ31cbiAgICAgKiAgICAgUHJpdmF0ZSBwb2ludCBhcyBieXRlIHN0cmluZyBvbiB0aGUgY3VydmUuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgICAgUHVibGljIGtleSBwb2ludCBhcyBieXRlIHN0cmluZyByZXN1bHRpbmcgZnJvbSBzY2FsYXIgcHJvZHVjdC5cbiAgICAgKi9cbiAgICBucy5wdWJsaWNLZXkgPSBmdW5jdGlvbihwcml2YXRlS2V5KSB7XG4gICAgICAgIHJldHVybiBfdG9TdHJpbmcoY3VydmUyNTUuY3VydmUyNTUxOShfZnJvbVN0cmluZyhwcml2YXRlS2V5KSkpO1xuICAgIH07XG5cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIG5ldyByYW5kb20gcHJpdmF0ZSBrZXkgb2YgMzIgYnl0ZXMgbGVuZ3RoICgyNTYgYml0KS5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICogICAgIEJ5dGUgc3RyaW5nIGNvbnRhaW5pbmcgYSBuZXcgcmFuZG9tIHByaXZhdGUga2V5IHNlZWQuXG4gICAgICovXG4gICAgbnMuZ2VuZXJhdGVLZXkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNvcmUuZ2VuZXJhdGVLZXkodHJ1ZSk7XG4gICAgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBucztcbiIsIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBAZmlsZU92ZXJ2aWV3XG4gKiBEaWdpdGFsIHNpZ25hdHVyZSBzY2hlbWUgYmFzZWQgb24gQ3VydmUyNTUxOSAoRWQyNTUxOSBvciBFZERTQSkuXG4gKi9cblxuLypcbiAqIENvcHlyaWdodCAoYykgMjAxMSwgMjAxMiwgMjAxNCBSb24gR2FycmV0XG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVnYSBMaW1pdGVkXG4gKiB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQXV0aG9yczogR3V5IEsuIEtsb3NzLCBSb24gR2FycmV0XG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS5cbiAqL1xuXG52YXIgY29yZSA9IHJlcXVpcmUoJy4vY29yZScpO1xudmFyIGN1cnZlMjU1ID0gcmVxdWlyZSgnLi9jdXJ2ZTI1NScpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIEJpZ0ludGVnZXIgPSByZXF1aXJlKCdqc2JuJykuQmlnSW50ZWdlcjtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblxuICAgIC8qKlxuICAgICAqIEBleHBvcnRzIGpvZGlkMjU1MTkvZWRkc2FcbiAgICAgKiBEaWdpdGFsIHNpZ25hdHVyZSBzY2hlbWUgYmFzZWQgb24gQ3VydmUyNTUxOSAoRWQyNTUxOSBvciBFZERTQSkuXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBEaWdpdGFsIHNpZ25hdHVyZSBzY2hlbWUgYmFzZWQgb24gQ3VydmUyNTUxOSAoRWQyNTUxOSBvciBFZERTQSkuXG4gICAgICpcbiAgICAgKiA8cD5cbiAgICAgKiBUaGlzIGNvZGUgaXMgYWRhcHRlZCBmcm9tIGZhc3QtZGpiZWMuanMsIGEgZmFzdGVyIGJ1dCBtb3JlIGNvbXBsaWNhdGVkXG4gICAgICogdmVyc2lvbiBvZiB0aGUgRWQyNTUxOSBlbmNyeXB0aW9uIHNjaGVtZSAoYXMgY29tcGFyZWQgdG8gZGpiZWMuanMpLlxuICAgICAqIEl0IHVzZXMgdHdvIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgZm9yIGJpZyBpbnRlZ2VyczogVGhlIGpzYm5cbiAgICAgKiBCaWdJbnRlZ2VyIGNsYXNzLCB3aGljaCBjYW4gcmVwcmVzZW50IGFyYml0cmFyeS1sZW5ndGggbnVtYmVycywgYW5kIGFcbiAgICAgKiBzcGVjaWFsIGZpeGVkLWxlbmd0aCByZXByZXNlbnRhdGlvbiBvcHRpbWlzZWQgZm9yIDI1Ni1iaXQgaW50ZWdlcnMuXG4gICAgICogVGhlIHJlYXNvbiBib3RoIGFyZSBuZWVkZWQgaXMgdGhhdCB0aGUgRWQyNTUxOSBhbGdvcml0aG0gcmVxdWlyZXMgc29tZVxuICAgICAqIDUxMi1iaXQgbnVtYmVycy48L3A+XG4gICAgKi9cbiAgICB2YXIgbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIF9iaTI1NSh2YWx1ZSkge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgX2JpMjU1KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfYmkyNTUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gX1pFUk87XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGMgPSB2YWx1ZS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgaWYgKChjID09PSBBcnJheSB8fCBjID09PSBVaW50MTZBcnJheSB8fCBjID09PSBVaW50MzJBcnJheSkgJiYgKHZhbHVlLmxlbmd0aCA9PT0gMTYpKSB7XG4gICAgICAgICAgICB0aGlzLm4gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICgoYyA9PT0gQXJyYXkpICYmICh2YWx1ZS5sZW5ndGggPT09IDMyKSkge1xuICAgICAgICAgICAgdGhpcy5uID0gX2J5dGVzMmJpMjU1KHZhbHVlKS5uO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPT09IFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5uID0gdXRpbHMuaGV4RGVjb2RlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChjID09PSBOdW1iZXIpIHtcbiAgICAgICAgICAgIHRoaXMubiA9IFt2YWx1ZSAmIDB4ZmZmZixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA+PiAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBfYmkyNTUpIHtcbiAgICAgICAgICAgIHRoaXMubiA9IHZhbHVlLm4uc2xpY2UoMCk7IC8vIENvcHkgY29uc3RydWN0b3JcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IFwiQmFkIGFyZ3VtZW50IGZvciBiaWdudW06IFwiICsgdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgIF9iaTI1NS5wcm90b3R5cGUgPSB7XG4gICAgICAgICd0b1N0cmluZycgOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlscy5oZXhFbmNvZGUodGhpcy5uKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3RvU291cmNlJyA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuICdfJyArIHV0aWxzLmhleEVuY29kZSh0aGlzLm4pO1xuICAgICAgICB9LFxuICAgICAgICAncGx1cycgOiBmdW5jdGlvbihuMSkge1xuICAgICAgICAgICAgcmV0dXJuIF9iaTI1NShjb3JlLmJpZ2ludGFkZCh0aGlzLm4sIG4xLm4pKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ21pbnVzJyA6IGZ1bmN0aW9uKG4xKSB7XG4gICAgICAgICAgICByZXR1cm4gX2JpMjU1KGNvcmUuYmlnaW50c3ViKHRoaXMubiwgbjEubikpLm1vZHEoKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3RpbWVzJyA6IGZ1bmN0aW9uKG4xKSB7XG4gICAgICAgICAgICByZXR1cm4gX2JpMjU1KGNvcmUubXVsbW9kcCh0aGlzLm4sIG4xLm4pKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ2RpdmlkZScgOiBmdW5jdGlvbihuMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGltZXMobjEuaW52KCkpO1xuICAgICAgICB9LFxuICAgICAgICAnc3FyJyA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9iaTI1NShjb3JlLnNxcm1vZHAodGhpcy5uKSk7XG4gICAgICAgIH0sXG4gICAgICAgICdjbXAnIDogZnVuY3Rpb24objEpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLmJpZ2ludGNtcCh0aGlzLm4sIG4xLm4pO1xuICAgICAgICB9LFxuICAgICAgICAnZXF1YWxzJyA6IGZ1bmN0aW9uKG4xKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbXAobjEpID09PSAwO1xuICAgICAgICB9LFxuICAgICAgICAnaXNPZGQnIDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMublswXSAmIDEpID09PSAxO1xuICAgICAgICB9LFxuICAgICAgICAnc2hpZnRMZWZ0JyA6IGZ1bmN0aW9uKGNudCkge1xuICAgICAgICAgICAgX3NoaWZ0TCh0aGlzLm4sIGNudCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgJ3NoaWZ0UmlnaHQnIDogZnVuY3Rpb24oY250KSB7XG4gICAgICAgICAgICBfc2hpZnRSKHRoaXMubiwgY250KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICAnaW52JyA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9iaTI1NShjb3JlLmludm1vZHAodGhpcy5uKSk7XG4gICAgICAgIH0sXG4gICAgICAgICdwb3cnIDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIF9iaTI1NShfcG93KHRoaXMubiwgZS5uKSk7XG4gICAgICAgIH0sXG4gICAgICAgICdtb2RxJyA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9tb2RxKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICAnYnl0ZXMnIDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gX2JpMjU1X2J5dGVzKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9zaGlmdEwobiwgY250KSB7XG4gICAgICAgIHZhciBsYXN0Y2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjYXJyeSA9IG5baV0gPj4gKDE2IC0gY250KTtcbiAgICAgICAgICAgIG5baV0gPSAobltpXSA8PCBjbnQpICYgMHhmZmZmIHwgbGFzdGNhcnJ5O1xuICAgICAgICAgICAgbGFzdGNhcnJ5ID0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3NoaWZ0UihuLCBjbnQpIHtcbiAgICAgICAgdmFyIGxhc3RjYXJyeSA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAxNTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHZhciBjYXJyeSA9IG5baV0gPDwgKDE2IC0gY250KSAmIDB4ZmZmZjtcbiAgICAgICAgICAgIG5baV0gPSAobltpXSA+PiBjbnQpIHwgbGFzdGNhcnJ5O1xuICAgICAgICAgICAgbGFzdGNhcnJ5ID0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2JpMjU1X2J5dGVzKG4pIHtcbiAgICAgICAgbiA9IF9iaTI1NShuKTsgLy8gTWFrZSBhIGNvcHkgYmVjYXVzZSBzaGlmdFJpZ2h0IGlzIGRlc3RydWN0aXZlXG4gICAgICAgIHZhciBhID0gbmV3IEFycmF5KDMyKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDMxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgYVtpXSA9IG4ublswXSAmIDB4ZmY7XG4gICAgICAgICAgICBuLnNoaWZ0UmlnaHQoOCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2J5dGVzMmJpMjU1KGEpIHtcbiAgICAgICAgdmFyIG4gPSBfWkVSTztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgICAgICAgICBuLnNoaWZ0TGVmdCg4KTtcbiAgICAgICAgICAgIG4gPSBuLnBsdXMoX2JpMjU1KGFbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcG93KG4sIGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNvcmUuT05FKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjb3JlLmdldGJpdChlLCBpKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcmUubXVsbW9kcChyZXN1bHQsIG4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbiA9IGNvcmUuc3FybW9kcChuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBfWkVSTyA9IF9iaTI1NSgwKTtcbiAgICB2YXIgX09ORSA9IF9iaTI1NSgxKTtcbiAgICB2YXIgX1RXTyA9IF9iaTI1NSgyKTtcbiAgICAvLyBUaGlzIGlzIHRoZSBjb3JlIHByaW1lLlxuICAgIHZhciBfUSA9IF9iaTI1NShbMHhmZmZmIC0gMTgsIDB4ZmZmZiwgMHhmZmZmLCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmLFxuICAgICAgICAgICAgICAgICAgICAgMHhmZmZmLCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmLCAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmLFxuICAgICAgICAgICAgICAgICAgICAgMHhmZmZmLCAweGZmZmYsIDB4N2ZmZl0pO1xuXG4gICAgZnVuY3Rpb24gX21vZHEobikge1xuICAgICAgICBjb3JlLnJlZHVjZShuLm4pO1xuICAgICAgICBpZiAobi5jbXAoX1EpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBfbW9kcShuLm1pbnVzKF9RKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG4uY21wKF9aRVJPKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBfbW9kcShuLnBsdXMoX1EpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gX1JFQ09WRVJZX0VYUE9ORU5UID0gX1EucGx1cyhfYmkyNTUoMykpLmRpdmlkZShfYmkyNTUoOCkpO1xuICAgIHZhciBfUkVDT1ZFUllfRVhQT05FTlQgPSBfYmkyNTUoJzBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUnKTtcbiAgICAvLyBfRCA9IF9RLm1pbnVzKF9iaTI1NSgxMjE2NjUpKS5kaXZpZGUoX2JpMjU1KDEyMTY2NikpO1xuICAgIHZhciBfRCA9IF9iaTI1NSgnNTIwMzZjZWUyYjZmZmU3MzhjYzc0MDc5Nzc3OWU4OTgwMDcwMGE0ZDQxNDFkOGFiNzVlYjRkY2ExMzU5NzhhMycpO1xuICAgIC8vIF9JID0gX1RXTy5wb3coX1EubWludXMoX09ORSkuZGl2aWRlKF9iaTI1NSg0KSkpO1xuICAgIHZhciBfSSA9IF9iaTI1NSgnMmI4MzI0ODA0ZmMxZGYwYjJiNGQwMDk5M2RmYmQ3YTcyZjQzMTgwNmFkMmZlNDc4YzRlZTFiMjc0YTBlYTBiMCcpO1xuICAgIC8vIF9MID0gX1RXTy5wb3coX2JpMjU1KDI1MikpLnBsdXMoX2JpMjU1KCcxNGRlZjlkZWEyZjc5Y2Q2NTgxMjYzMWE1Y2Y1ZDNlZCcpKTtcbiAgICB2YXIgX0wgPSBfYmkyNTUoJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTRkZWY5ZGVhMmY3OWNkNjU4MTI2MzFhNWNmNWQzZWQnKTtcbiAgICB2YXIgX0xfQkkgPSBfYmkoJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTRkZWY5ZGVhMmY3OWNkNjU4MTI2MzFhNWNmNWQzZWQnLCAxNik7XG5cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgZnVuY3Rpb24gX2lzb25jdXJ2ZShwKSB7XG4gICAgICAgIHZhciB4ID0gcFswXTtcbiAgICAgICAgdmFyIHkgPSBwWzFdO1xuICAgICAgICB2YXIgeHNxciA9IHguc3FyKCk7XG4gICAgICAgIHZhciB5c3FyID0geS5zcXIoKTtcbiAgICAgICAgdmFyIHYgPSBfRC50aW1lcyh4c3FyKS50aW1lcyh5c3FyKTtcbiAgICAgICAgcmV0dXJuIHlzcXIubWludXMoeHNxcikubWludXMoX09ORSkubWludXModikubW9kcSgpLmVxdWFscyhfWkVSTyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3hyZWNvdmVyKHkpIHtcbiAgICAgICAgdmFyIHlzcXVhcmVkID0geS5zcXIoKTtcbiAgICAgICAgdmFyIHh4ID0geXNxdWFyZWQubWludXMoX09ORSkuZGl2aWRlKF9PTkUucGx1cyhfRC50aW1lcyh5c3F1YXJlZCkpKTtcbiAgICAgICAgdmFyIHggPSB4eC5wb3coX1JFQ09WRVJZX0VYUE9ORU5UKTtcbiAgICAgICAgaWYgKCEoeC50aW1lcyh4KS5taW51cyh4eCkuZXF1YWxzKF9aRVJPKSkpIHtcbiAgICAgICAgICAgIHggPSB4LnRpbWVzKF9JKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeC5pc09kZCgpKSB7XG4gICAgICAgICAgICB4ID0gX1EubWludXMoeCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3hfcHRfYWRkKHB0MSwgcHQyKSB7XG4gICAgICAgIHZhciB4MSA9IHB0MVswXTtcbiAgICAgICAgdmFyIHkxID0gcHQxWzFdO1xuICAgICAgICB2YXIgejEgPSBwdDFbMl07XG4gICAgICAgIHZhciB0MSA9IHB0MVszXTtcbiAgICAgICAgdmFyIHgyID0gcHQyWzBdO1xuICAgICAgICB2YXIgeTIgPSBwdDJbMV07XG4gICAgICAgIHZhciB6MiA9IHB0MlsyXTtcbiAgICAgICAgdmFyIHQyID0gcHQyWzNdO1xuICAgICAgICB2YXIgQSA9IHkxLm1pbnVzKHgxKS50aW1lcyh5Mi5wbHVzKHgyKSk7XG4gICAgICAgIHZhciBCID0geTEucGx1cyh4MSkudGltZXMoeTIubWludXMoeDIpKTtcbiAgICAgICAgdmFyIEMgPSB6MS50aW1lcyhfVFdPKS50aW1lcyh0Mik7XG4gICAgICAgIHZhciBEID0gdDEudGltZXMoX1RXTykudGltZXMoejIpO1xuICAgICAgICB2YXIgRSA9IEQucGx1cyhDKTtcbiAgICAgICAgdmFyIEYgPSBCLm1pbnVzKEEpO1xuICAgICAgICB2YXIgRyA9IEIucGx1cyhBKTtcbiAgICAgICAgdmFyIEggPSBELm1pbnVzKEMpO1xuICAgICAgICByZXR1cm4gW0UudGltZXMoRiksIEcudGltZXMoSCksIEYudGltZXMoRyksIEUudGltZXMoSCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF94cHRfZG91YmxlKHB0MSkge1xuICAgICAgICB2YXIgeDEgPSBwdDFbMF07XG4gICAgICAgIHZhciB5MSA9IHB0MVsxXTtcbiAgICAgICAgdmFyIHoxID0gcHQxWzJdO1xuICAgICAgICB2YXIgQSA9IHgxLnRpbWVzKHgxKTtcbiAgICAgICAgdmFyIEIgPSB5MS50aW1lcyh5MSk7XG4gICAgICAgIHZhciBDID0gX1RXTy50aW1lcyh6MSkudGltZXMoejEpO1xuICAgICAgICB2YXIgRCA9IF9RLm1pbnVzKEEpO1xuICAgICAgICB2YXIgSiA9IHgxLnBsdXMoeTEpO1xuICAgICAgICB2YXIgRSA9IEoudGltZXMoSikubWludXMoQSkubWludXMoQik7XG4gICAgICAgIHZhciBHID0gRC5wbHVzKEIpO1xuICAgICAgICB2YXIgRiA9IEcubWludXMoQyk7XG4gICAgICAgIHZhciBIID0gRC5taW51cyhCKTtcbiAgICAgICAgcmV0dXJuIFtFLnRpbWVzKEYpLCBHLnRpbWVzKEgpLCBGLnRpbWVzKEcpLCBFLnRpbWVzKEgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfeHB0X211bHQocHQsIG4pIHtcbiAgICAgICAgaWYgKG4uZXF1YWxzKF9aRVJPKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtfWkVSTywgX09ORSwgX09ORSwgX1pFUk9dO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvZGQgPSBuLmlzT2RkKCk7XG4gICAgICAgIG4uc2hpZnRSaWdodCgxKTtcbiAgICAgICAgdmFyIHZhbHVlID0gX3hwdF9kb3VibGUoX3hwdF9tdWx0KHB0LCBuKSk7XG4gICAgICAgIHJldHVybiBvZGQgPyBfeF9wdF9hZGQodmFsdWUsIHB0KSA6IHZhbHVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9wdF94Zm9ybShwdCkge1xuICAgICAgICB2YXIgeCA9IHB0WzBdO1xuICAgICAgICB2YXIgeSA9IHB0WzFdO1xuICAgICAgICByZXR1cm4gW3gsIHksIF9PTkUsIHgudGltZXMoeSldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9wdF91bnhmb3JtKHB0KSB7XG4gICAgICAgIHZhciB4ID0gcHRbMF07XG4gICAgICAgIHZhciB5ID0gcHRbMV07XG4gICAgICAgIHZhciB6ID0gcHRbMl07XG4gICAgICAgIHZhciBpbnZ6ID0gei5pbnYoKTtcbiAgICAgICAgcmV0dXJuIFt4LnRpbWVzKGludnopLCB5LnRpbWVzKGludnopXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfc2NhbGFybXVsdChwdCwgbikge1xuICAgICAgICByZXR1cm4gX3B0X3VueGZvcm0oX3hwdF9tdWx0KF9wdF94Zm9ybShwdCksIG4pKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYnl0ZXNnZXRiaXQoYnl0ZXMsIG4pIHtcbiAgICAgICAgcmV0dXJuIChieXRlc1tieXRlcy5sZW5ndGggLSAobiA+Pj4gMykgLSAxXSA+PiAobiAmIDcpKSAmIDE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3hwdF9tdWx0X2J5dGVzKHB0LCBieXRlcykge1xuICAgICAgICB2YXIgciA9IFtfWkVSTywgX09ORSwgX09ORSwgX1pFUk9dO1xuICAgICAgICBmb3IgKHZhciBpID0gKGJ5dGVzLmxlbmd0aCA8PCAzKSAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICByID0gX3hwdF9kb3VibGUocik7XG4gICAgICAgICAgICBpZiAoX2J5dGVzZ2V0Yml0KGJ5dGVzLCBpKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHIgPSBfeF9wdF9hZGQociwgcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9zY2FsYXJtdWx0Qnl0ZXMocHQsIGJ5dGVzKSB7XG4gICAgICAgIHJldHVybiBfcHRfdW54Zm9ybShfeHB0X211bHRfYnl0ZXMoX3B0X3hmb3JtKHB0KSwgYnl0ZXMpKTtcbiAgICB9XG5cbiAgICB2YXIgX2J5ID0gX2JpMjU1KDQpLmRpdmlkZShfYmkyNTUoNSkpO1xuICAgIHZhciBfYnggPSBfeHJlY292ZXIoX2J5KTtcbiAgICB2YXIgX2JwID0gW19ieCwgX2J5XTtcblxuICAgIGZ1bmN0aW9uIF9lbmNvZGVpbnQobikge1xuICAgICAgICByZXR1cm4gbi5ieXRlcygzMikucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBfZGVjb2RlaW50KGIpIHtcbiAgICAgICAgcmV0dXJuIF9iaTI1NShiLnNsaWNlKDApLnJldmVyc2UoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2VuY29kZXBvaW50KHApIHtcbiAgICAgICAgdmFyIHYgPSBfZW5jb2RlaW50KHBbMV0pO1xuICAgICAgICBpZiAocFswXS5pc09kZCgpKSB7XG4gICAgICAgICAgICB2WzMxXSB8PSAweDgwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9kZWNvZGVwb2ludCh2KSB7XG4gICAgICAgIHYgPSB2LnNsaWNlKDApO1xuICAgICAgICB2YXIgc2lnbmJpdCA9IHZbMzFdID4+IDc7XG4gICAgICAgIHZbMzFdICY9IDEyNztcbiAgICAgICAgdmFyIHkgPSBfZGVjb2RlaW50KHYpO1xuICAgICAgICB2YXIgeCA9IF94cmVjb3Zlcih5KTtcbiAgICAgICAgaWYgKCh4Lm5bMF0gJiAxKSAhPT0gc2lnbmJpdCkge1xuICAgICAgICAgICAgeCA9IF9RLm1pbnVzKHgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwID0gW3gsIHldO1xuICAgICAgICBpZiAoIV9pc29uY3VydmUocCkpIHtcbiAgICAgICAgICAgIHRocm93ICgnUG9pbnQgaXMgbm90IG9uIGN1cnZlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIC8qKlxuICAgICAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgc3VpdGFibGUgQmlnSW50ZWdlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqICAgICBUaGUgdmFsdWUgZm9yIHRoZSBiaWcgaW50ZWdlci5cbiAgICAgKiBAcGFyYW0gYmFzZSB7aW50ZWdlcn1cbiAgICAgKiAgICAgQmFzZSBvZiB0aGUgY29udmVyc2lvbiBvZiBlbGVtZW50cyBpbiBgYHZhbHVlYGAuXG4gICAgICogQHJldHVybnNcbiAgICAgKiAgICAgQSBCaWdJbnRlZ2VyIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfYmkodmFsdWUsIGJhc2UpIHtcbiAgICAgICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGJhc2UgPT09IDI1Nikge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYmkodXRpbHMuc3RyaW5nMmJ5dGVzKHZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIodmFsdWUsIGJhc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcih2YWx1ZSwgMTApO1xuICAgICAgICB9IGVsc2UgaWYgKCh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB8fCAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KVxuICAgICAgICAgIHx8IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKHZhbHVlLnRvU3RyaW5nKCksIDEwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IFwiQ2FuJ3QgY29udmVydCBcIiArIHZhbHVlICsgXCIgdG8gQmlnSW50ZWdlclwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2JpMmJ5dGVzKG4sIGNudCkge1xuICAgICAgICBpZiAoY250ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNudCA9IChuLmJpdExlbmd0aCgpICsgNykgPj4+IDM7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJ5dGVzID0gbmV3IEFycmF5KGNudCk7XG4gICAgICAgIGZvciAodmFyIGkgPSBjbnQgLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgYnl0ZXNbaV0gPSBuWzBdICYgMjU1OyAvLyBuLmFuZCgweGZmKTtcbiAgICAgICAgICAgIG4gPSBuLnNoaWZ0UmlnaHQoOCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH1cblxuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24obikge1xuICAgICAgICByZXR1cm4gX2JpMmJ5dGVzKHRoaXMsIG4pO1xuICAgIH07XG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGZ1bmN0aW9uIF9ieXRlaGFzaChzKSB7XG4gICAgICAgIHZhciBzaGEgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHMpLmRpZ2VzdCgpO1xuICAgICAgICByZXR1cm4gX2JpMmJ5dGVzKF9iaShzaGEpLCA2NCkucmV2ZXJzZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9zdHJpbmdoYXNoKHMpIHtcbiAgICAgICAgdmFyIHNoYSA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUocykuZGlnZXN0KCk7XG4gICAgICAgIHJldHVybiBfbWFwKF9jaHIsIF9iaTJieXRlcyhfYmkoc2hhKSwgNjQpKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW50aGFzaChzKSB7XG4gICAgICAgIC8vIE5lZWQgYSBsZWFkaW5nIDAgdG8gcHJldmVudCBzaWduIGV4dGVuc2lvblxuICAgICAgICByZXR1cm4gX2JpKFswXS5jb25jYXQoX2J5dGVoYXNoKHMpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ludGhhc2hfbG8ocykge1xuICAgICAgICByZXR1cm4gX2JpMjU1KF9ieXRlaGFzaChzKS5zbGljZSgzMiwgNjQpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW50aGFzaF9tb2RfbChzKSB7XG4gICAgICAgIHJldHVybiBfaW50aGFzaChzKS5tb2QoX0xfQkkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9nZXRfYShzaykge1xuICAgICAgICB2YXIgYSA9IF9pbnRoYXNoX2xvKHNrKTtcbiAgICAgICAgYS5uWzBdICY9IDB4ZmZmODtcbiAgICAgICAgYS5uWzE1XSAmPSAweDNmZmY7XG4gICAgICAgIGEublsxNV0gfD0gMHg0MDAwO1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcHVibGlja2V5KHNrKSB7XG4gICAgICAgIHJldHVybiBfZW5jb2RlcG9pbnQoX3NjYWxhcm11bHQoX2JwLCBfZ2V0X2Eoc2spKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX21hcChmLCBsKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkobC5sZW5ndGgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdFtpXSA9IGYobFtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY2hyKG4pIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX29yZChjKSB7XG4gICAgICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3B0X2FkZChwMSwgcDIpIHtcbiAgICAgICAgcmV0dXJuIF9wdF91bnhmb3JtKF94X3B0X2FkZChfcHRfeGZvcm0ocDEpLCBfcHRfeGZvcm0ocDIpKSk7XG4gICAgfVxuXG5cbiAgICAvLyBFeHBvcnRzIGZvciB0aGUgQVBJLlxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgYSBwb2ludCBpcyBvbiB0aGUgY3VydmUuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gcG9pbnQge3N0cmluZ31cbiAgICAgKiAgICAgVGhlIHBvaW50IHRvIGNoZWNrIGZvciBpbiBhIGJ5dGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqICAgICB0cnVlIGlmIHRoZSBwb2ludCBpcyBvbiB0aGUgY3VydmUsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBucy5pc09uQ3VydmUgPSBmdW5jdGlvbihwb2ludCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgX2lzb25jdXJ2ZShfZGVjb2RlcG9pbnQodXRpbHMuc3RyaW5nMmJ5dGVzKHBvaW50KSkpO1xuICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgIGlmIChlID09PSAnUG9pbnQgaXMgbm90IG9uIGN1cnZlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgRWREU0EgcHVibGljIGtleS5cbiAgICAgKlxuICAgICAqIDxwPk5vdGU6IFNlZWRzIHNob3VsZCBiZSBhIGJ5dGUgc3RyaW5nLCBub3QgYSB1bmljb2RlIHN0cmluZyBjb250YWluaW5nXG4gICAgICogbXVsdGktYnl0ZSBjaGFyYWN0ZXJzLjwvcD5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSBrZXlTZWVkIHtzdHJpbmd9XG4gICAgICogICAgIFByaXZhdGUga2V5IHNlZWQgaW4gdGhlIGZvcm0gb2YgYSBieXRlIHN0cmluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqICAgICBQdWJsaWMga2V5IGFzIGJ5dGUgc3RyaW5nIGNvbXB1dGVkIGZyb20gdGhlIHByaXZhdGUga2V5IHNlZWRcbiAgICAgKiAgICAgKDMyIGJ5dGVzKS5cbiAgICAgKi9cbiAgICBucy5wdWJsaWNLZXkgPSBmdW5jdGlvbihrZXlTZWVkKSB7XG4gICAgICAgIHJldHVybiB1dGlscy5ieXRlczJzdHJpbmcoX3B1YmxpY2tleShrZXlTZWVkKSk7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYW4gRWREU0Egc2lnbmF0dXJlIG9mIGEgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIDxwPk5vdGVzOjwvcD5cbiAgICAgKlxuICAgICAqIDx1bD5cbiAgICAgKiAgIDxsaT5Vbmljb2RlIG1lc3NhZ2VzIG5lZWQgdG8gYmUgY29udmVydGVkIHRvIGEgYnl0ZSByZXByZXNlbnRhdGlvblxuICAgICAqICAgKGUuIGcuIFVURi04KS48L2xpPlxuICAgICAqICAgPGxpPklmIGBwdWJsaWNLZXlgIGlzIGdpdmVuLCBhbmQgaXQgaXMgKm5vdCogYSBwb2ludCBvZiB0aGUgY3VydmUsXG4gICAgICogICB0aGUgc2lnbmF0dXJlIHdpbGwgYmUgZmF1bHR5LCBidXQgbm8gZXJyb3Igd2lsbCBiZSB0aHJvd24uPC9saT5cbiAgICAgKiA8L3VsPlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIG1lc3NhZ2Uge3N0cmluZ31cbiAgICAgKiAgICAgTWVzc2FnZSBpbiB0aGUgZm9ybSBvZiBhIGJ5dGUgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBrZXlTZWVkIHtzdHJpbmd9XG4gICAgICogICAgIFByaXZhdGUga2V5IHNlZWQgaW4gdGhlIGZvcm0gb2YgYSBieXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gcHVibGljS2V5IHtzdHJpbmd9XG4gICAgICogICAgIFB1YmxpYyBrZXkgYXMgYnl0ZSBzdHJpbmcgKGlmIG5vdCBwcmVzZW50LCBpdCB3aWxsIGJlIGNvbXB1dGVkIGZyb21cbiAgICAgKiAgICAgdGhlIHByaXZhdGUga2V5IHNlZWQpLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICogICAgIERldGFjaGVkIG1lc3NhZ2Ugc2lnbmF0dXJlIGluIHRoZSBmb3JtIG9mIGEgYnl0ZSBzdHJpbmcgKDY0IGJ5dGVzKS5cbiAgICAgKi9cbiAgICBucy5zaWduID0gZnVuY3Rpb24obWVzc2FnZSwga2V5U2VlZCwgcHVibGljS2V5KSB7XG4gICAgICAgIGlmIChwdWJsaWNLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcHVibGljS2V5ID0gX3B1YmxpY2tleShrZXlTZWVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHB1YmxpY0tleSA9IHV0aWxzLnN0cmluZzJieXRlcyhwdWJsaWNLZXkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhID0gX2JpKF9nZXRfYShrZXlTZWVkKS50b1N0cmluZygpLCAxNik7XG4gICAgICAgIHZhciBocyA9IF9zdHJpbmdoYXNoKGtleVNlZWQpO1xuICAgICAgICB2YXIgciA9IF9ieXRlaGFzaChocy5zbGljZSgzMiwgNjQpICsgbWVzc2FnZSk7XG4gICAgICAgIHZhciBycCA9IF9zY2FsYXJtdWx0Qnl0ZXMoX2JwLCByKTtcbiAgICAgICAgdmFyIGVycCA9IF9lbmNvZGVwb2ludChycCk7XG4gICAgICAgIHIgPSBfYmkocikubW9kKF9iaSgxLCAxMCkuc2hpZnRMZWZ0KDUxMikpO1xuICAgICAgICB2YXIgcyA9IF9tYXAoX2NociwgZXJwKS5qb2luKCcnKSArIF9tYXAoX2NociwgcHVibGljS2V5KS5qb2luKCcnKSArIG1lc3NhZ2U7XG4gICAgICAgIHMgPSBfaW50aGFzaF9tb2RfbChzKS5tdWx0aXBseShhKS5hZGQocikubW9kKF9MX0JJKTtcbiAgICAgICAgcmV0dXJuIHV0aWxzLmJ5dGVzMnN0cmluZyhlcnAuY29uY2F0KF9lbmNvZGVpbnQocykpKTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBWZXJpZmllcyBhbiBFZERTQSBzaWduYXR1cmUgb2YgYSBtZXNzYWdlIHdpdGggdGhlIHB1YmxpYyBrZXkuXG4gICAgICpcbiAgICAgKiA8cD5Ob3RlOiBVbmljb2RlIG1lc3NhZ2VzIG5lZWQgdG8gYmUgY29udmVydGVkIHRvIGEgYnl0ZSByZXByZXNlbnRhdGlvblxuICAgICAqIChlLiBnLiBVVEYtOCkuPC9wPlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHNpZ25hdHVyZSB7c3RyaW5nfVxuICAgICAqICAgICBNZXNzYWdlIHNpZ25hdHVyZSBpbiB0aGUgZm9ybSBvZiBhIGJ5dGUgc3RyaW5nLiBDYW4gYmUgZGV0YWNoZWRcbiAgICAgKiAgICAgKDY0IGJ5dGVzKSwgb3IgYXR0YWNoZWQgdG8gYmUgc2xpY2VkIG9mZi5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSB7c3RyaW5nfVxuICAgICAqICAgICBNZXNzYWdlIGluIHRoZSBmb3JtIG9mIGEgYnl0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIHB1YmxpY0tleSB7c3RyaW5nfVxuICAgICAqICAgICBQdWJsaWMga2V5IGFzIGJ5dGUgc3RyaW5nIChpZiBub3QgcHJlc2VudCwgaXQgd2lsbCBiZSBjb21wdXRlZCBmcm9tXG4gICAgICogICAgIHRoZSBwcml2YXRlIGtleSBzZWVkKS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKiAgICAgdHJ1ZSwgaWYgdGhlIHNpZ25hdHVyZSB2ZXJpZmllcy5cbiAgICAgKi9cbiAgICBucy52ZXJpZnkgPSBmdW5jdGlvbihzaWduYXR1cmUsIG1lc3NhZ2UsIHB1YmxpY0tleSkge1xuICAgICAgICBzaWduYXR1cmUgPSB1dGlscy5zdHJpbmcyYnl0ZXMoc2lnbmF0dXJlLnNsaWNlKDAsIDY0KSk7XG4gICAgICAgIHB1YmxpY0tleSA9IHV0aWxzLnN0cmluZzJieXRlcyhwdWJsaWNLZXkpO1xuICAgICAgICB2YXIgcnBlID0gc2lnbmF0dXJlLnNsaWNlKDAsIDMyKTtcbiAgICAgICAgdmFyIHJwID0gX2RlY29kZXBvaW50KHJwZSk7XG4gICAgICAgIHZhciBhID0gX2RlY29kZXBvaW50KHB1YmxpY0tleSk7XG4gICAgICAgIHZhciBzID0gX2RlY29kZWludChzaWduYXR1cmUuc2xpY2UoMzIsIDY0KSk7XG4gICAgICAgIHZhciBoID0gX2ludGhhc2godXRpbHMuYnl0ZXMyc3RyaW5nKHJwZS5jb25jYXQocHVibGljS2V5KSkgKyBtZXNzYWdlKTtcbiAgICAgICAgdmFyIHYxID0gX3NjYWxhcm11bHQoX2JwLCBzKTtcbiAgICAgICAgdmFyIHZhbHVlID0gX3NjYWxhcm11bHRCeXRlcyhhLCBfYmkyYnl0ZXMoaCkpO1xuICAgICAgICB2YXIgdjIgPSBfcHRfYWRkKHJwLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB2MVswXS5lcXVhbHModjJbMF0pICYmIHYxWzFdLmVxdWFscyh2MlsxXSk7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgbmV3IHJhbmRvbSBwcml2YXRlIGtleSBzZWVkIG9mIDMyIGJ5dGVzIGxlbmd0aCAoMjU2IGJpdCkuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqICAgICBCeXRlIHN0cmluZyBjb250YWluaW5nIGEgbmV3IHJhbmRvbSBwcml2YXRlIGtleSBzZWVkLlxuICAgICAqL1xuICAgIG5zLmdlbmVyYXRlS2V5U2VlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY29yZS5nZW5lcmF0ZUtleShmYWxzZSk7XG4gICAgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBucztcbiIsIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBAZmlsZU92ZXJ2aWV3XG4gKiBBIGNvbGxlY3Rpb24gb2YgZ2VuZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucy4uXG4gKi9cblxuLypcbiAqIENvcHlyaWdodCAoYykgMjAxMSwgMjAxMiwgMjAxNCBSb24gR2FycmV0XG4gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTMsIDIwMTQgTWljaGVsZSBCaW5pXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVnYSBMaW1pdGVkXG4gKiB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKlxuICogQXV0aG9yczogR3V5IEsuIEtsb3NzLCBNaWNoZWxlIEJpbmksIFJvbiBHYXJyZXRcbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLlxuICovXG5cbnZhciBjb3JlID0gcmVxdWlyZSgnLi9jb3JlJyk7XG5cbiAgICAvKipcbiAgICAgKiBAZXhwb3J0cyBqb2RpZDI1NTE5L3V0aWxzXG4gICAgICogQSBjb2xsZWN0aW9uIG9mIGdlbmVyYWwgdXRpbGl0eSBmdW5jdGlvbnMuLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogQSBjb2xsZWN0aW9uIG9mIGdlbmVyYWwgdXRpbGl0eSBmdW5jdGlvbnMuLlxuICAgICAqL1xuICAgIHZhciBucyA9IHt9O1xuXG4gICAgdmFyIF9IRVhDSEFSUyA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuXG4gICAgZnVuY3Rpb24gX2hleGVuY29kZSh2ZWN0b3IpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gdmVjdG9yLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB2ZWN0b3JbaV07XG4gICAgICAgICAgICByZXN1bHQucHVzaChfSEVYQ0hBUlMuc3Vic3RyKCh2YWx1ZSA+Pj4gMTIpICYgMHgwZiwgMSkpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goX0hFWENIQVJTLnN1YnN0cigodmFsdWUgPj4+IDgpICYgMHgwZiwgMSkpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goX0hFWENIQVJTLnN1YnN0cigodmFsdWUgPj4+IDQpICYgMHgwZiwgMSkpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goX0hFWENIQVJTLnN1YnN0cih2YWx1ZSAmIDB4MGYsIDEpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9oZXhkZWNvZGUodmVjdG9yKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gICAgICAgIGZvciAodmFyIGkgPSB2ZWN0b3IubGVuZ3RoIC0gMSwgbCA9IDA7IGkgPj0gMDsgaSAtPSA0KSB7XG4gICAgICAgICAgICByZXN1bHRbbF0gPSAoX0hFWENIQVJTLmluZGV4T2YodmVjdG9yLmNoYXJBdChpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgfCAoX0hFWENIQVJTLmluZGV4T2YodmVjdG9yLmNoYXJBdChpIC0gMSkpIDw8IDQpXG4gICAgICAgICAgICAgICAgICAgICAgfCAoX0hFWENIQVJTLmluZGV4T2YodmVjdG9yLmNoYXJBdChpIC0gMikpIDw8IDgpXG4gICAgICAgICAgICAgICAgICAgICAgfCAoX0hFWENIQVJTLmluZGV4T2YodmVjdG9yLmNoYXJBdChpIC0gMykpIDw8IDEyKTtcbiAgICAgICAgICAgIGwrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBfQkFTRTMyQ0hBUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MjM0NTY3XCI7XG5cbiAgICB2YXIgX0JBU0UzMlZBTFVFUyA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfQkFTRTMyQ0hBUlMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdFtfQkFTRTMyQ0hBUlMuY2hhckF0KGkpXSA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSgpO1xuXG4gICAgZnVuY3Rpb24gX2Jhc2UzMmVuY29kZShuKSB7XG4gICAgICAgIHZhciBjO1xuICAgICAgICB2YXIgciA9IFwiXCI7XG4gICAgICAgIGZvciAoYyA9IDA7IGMgPCAyNTU7IGMgKz0gNSkge1xuICAgICAgICAgICAgciA9IF9CQVNFMzJDSEFSUy5zdWJzdHIoY29yZS5nZXRiaXQobiwgYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGNvcmUuZ2V0Yml0KG4sIGMgKyAxKSA8PCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoY29yZS5nZXRiaXQobiwgYyArIDIpIDw8IDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChjb3JlLmdldGJpdChuLCBjICsgMykgPDwgMylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGNvcmUuZ2V0Yml0KG4sIGMgKyA0KSA8PCA0KSwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfYmFzZTMyZGVjb2RlKG4pIHtcbiAgICAgICAgdmFyIGMgPSAwO1xuICAgICAgICB2YXIgciA9IGNvcmUuWkVSTygpO1xuICAgICAgICB2YXIgbCA9IG4ubGVuZ3RoO1xuICAgICAgICBmb3IgKGMgPSAwOyAobCA+IDApICYmIChjIDwgMjU1KTsgYyArPSA1KSB7XG4gICAgICAgICAgICBsLS07XG4gICAgICAgICAgICB2YXIgdiA9IF9CQVNFMzJWQUxVRVNbbi5zdWJzdHIobCwgMSldO1xuICAgICAgICAgICAgY29yZS5zZXRiaXQociwgYywgdiAmIDEpO1xuICAgICAgICAgICAgdiA+Pj0gMTtcbiAgICAgICAgICAgIGNvcmUuc2V0Yml0KHIsIGMgKyAxLCB2ICYgMSk7XG4gICAgICAgICAgICB2ID4+PSAxO1xuICAgICAgICAgICAgY29yZS5zZXRiaXQociwgYyArIDIsIHYgJiAxKTtcbiAgICAgICAgICAgIHYgPj49IDE7XG4gICAgICAgICAgICBjb3JlLnNldGJpdChyLCBjICsgMywgdiAmIDEpO1xuICAgICAgICAgICAgdiA+Pj0gMTtcbiAgICAgICAgICAgIGNvcmUuc2V0Yml0KHIsIGMgKyA0LCB2ICYgMSk7XG4gICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX21hcChmLCBsKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkobC5sZW5ndGgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc3VsdFtpXSA9IGYobFtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY2hyKG4pIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX29yZChjKSB7XG4gICAgICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2J5dGVzMnN0cmluZyhieXRlcykge1xuICAgICAgICByZXR1cm4gX21hcChfY2hyLCBieXRlcykuam9pbignJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3N0cmluZzJieXRlcyhzKSB7XG4gICAgICAgIHJldHVybiBfbWFwKF9vcmQsIHMpO1xuICAgIH1cblxuXG4gICAgLy8gRXhwb3NlIHNvbWUgZnVuY3Rpb25zIHRvIHRoZSBvdXRzaWRlIHRocm91Z2ggdGhpcyBuYW1lIHNwYWNlLlxuXG4gICAgLyoqXG4gICAgICogRW5jb2RlcyBhbiBhcnJheSBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycyB0byBhIGhleCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gdmVjdG9yIHthcnJheX1cbiAgICAgKiAgICAgQXJyYXkgY29udGFpbmluZyB0aGUgYnl0ZSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgICAgU3RyaW5nIGNvbnRhaW5pbmcgdmVjdG9yIGluIGEgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uXG4gICAgICovXG4gICAgbnMuaGV4RW5jb2RlID0gX2hleGVuY29kZTtcblxuXG4gICAgLyoqXG4gICAgICogRGVjb2RlcyBhIGhleCBzdHJpbmcgdG8gYW4gYXJyYXkgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gdmVjdG9yIHtzdHJpbmd9XG4gICAgICogICAgIFN0cmluZyBjb250YWluaW5nIHZlY3RvciBpbiBhIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqIEByZXR1cm5zIHthcnJheX1cbiAgICAgKiAgICAgQXJyYXkgY29udGFpbmluZyB0aGUgYnl0ZSB2YWx1ZXMuXG4gICAgICovXG4gICAgbnMuaGV4RGVjb2RlID0gX2hleGRlY29kZTtcblxuXG4gICAgLyoqXG4gICAgICogRW5jb2RlcyBhbiBhcnJheSBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycyB1c2luZyBiYXNlMzIgZW5jb2RpbmcuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gdmVjdG9yIHthcnJheX1cbiAgICAgKiAgICAgQXJyYXkgY29udGFpbmluZyB0aGUgYnl0ZSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgICAgU3RyaW5nIGNvbnRhaW5pbmcgdmVjdG9yIGluIGEgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uXG4gICAgICovXG4gICAgbnMuYmFzZTMyZW5jb2RlID0gX2Jhc2UzMmVuY29kZTtcblxuXG4gICAgLyoqXG4gICAgICogRGVjb2RlcyBhIGJhc2UzMiBlbmNvZGVkIHN0cmluZyB0byBhbiBhcnJheSBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2Vycy5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB2ZWN0b3Ige3N0cmluZ31cbiAgICAgKiAgICAgU3RyaW5nIGNvbnRhaW5pbmcgdmVjdG9yIGluIGEgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uXG4gICAgICogQHJldHVybnMge2FycmF5fVxuICAgICAqICAgICBBcnJheSBjb250YWluaW5nIHRoZSBieXRlIHZhbHVlcy5cbiAgICAgKi9cbiAgICBucy5iYXNlMzJkZWNvZGUgPSBfYmFzZTMyZGVjb2RlO1xuXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhbiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyIGFycmF5IHJlcHJlc2VudGF0aW9uIHRvIGEgYnl0ZSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0gdmVjdG9yIHthcnJheX1cbiAgICAgKiAgICAgQXJyYXkgY29udGFpbmluZyB0aGUgYnl0ZSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgICAgQnl0ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdmVjdG9yLlxuICAgICAqL1xuICAgIG5zLmJ5dGVzMnN0cmluZyA9IF9ieXRlczJzdHJpbmc7XG5cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgYnl0ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8gYW4gYXJyYXkgb2YgdW5zaWduZWRcbiAgICAgKiA4LWJpdCBpbnRlZ2Vycy5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB2ZWN0b3Ige2FycmF5fVxuICAgICAqICAgICBBcnJheSBjb250YWluaW5nIHRoZSBieXRlIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqICAgICBCeXRlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB2ZWN0b3IuXG4gICAgICovXG4gICAgbnMuc3RyaW5nMmJ5dGVzID0gX3N0cmluZzJieXRlcztcblxubW9kdWxlLmV4cG9ydHMgPSBucztcbiIsIlxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9qcXVlcnktZGVmZXJyZWQnKTsiLCJ2YXIgalF1ZXJ5ID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9qcXVlcnktY29yZS5qc1wiKSxcblx0Y29yZV9yc3BhY2UgPSAvXFxzKy87XG4vKipcbiogalF1ZXJ5IENhbGxiYWNrc1xuKlxuKiBDb2RlIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvbWFzdGVyL3NyYy9jYWxsYmFja3MuanNcbipcbiovXG5cblxuLy8gU3RyaW5nIHRvIE9iamVjdCBvcHRpb25zIGZvcm1hdCBjYWNoZVxudmFyIG9wdGlvbnNDYWNoZSA9IHt9O1xuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcyBhbmQgc3RvcmUgaW4gY2FjaGVcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSBvcHRpb25zQ2FjaGVbIG9wdGlvbnMgXSA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5zcGxpdCggY29yZV9yc3BhY2UgKSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9KTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHQoIG9wdGlvbnNDYWNoZVsgb3B0aW9ucyBdIHx8IGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBMYXN0IGZpcmUgdmFsdWUgKGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHMpXG5cdFx0bWVtb3J5LFxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblx0XHQvLyBGaXJzdCBjYWxsYmFjayB0byBmaXJlICh1c2VkIGludGVybmFsbHkgYnkgYWRkIGFuZCBmaXJlV2l0aClcblx0XHRmaXJpbmdTdGFydCxcblx0XHQvLyBFbmQgb2YgdGhlIGxvb3Agd2hlbiBmaXJpbmdcblx0XHRmaXJpbmdMZW5ndGgsXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgcmVtb3ZlIGlmIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCxcblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblx0XHQvLyBTdGFjayBvZiBmaXJlIGNhbGxzIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0c3RhY2sgPSAhb3B0aW9ucy5vbmNlICYmIFtdLFxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRcdFx0bWVtb3J5ID0gb3B0aW9ucy5tZW1vcnkgJiYgZGF0YTtcblx0XHRcdGZpcmVkID0gdHJ1ZTtcblx0XHRcdGZpcmluZ0luZGV4ID0gZmlyaW5nU3RhcnQgfHwgMDtcblx0XHRcdGZpcmluZ1N0YXJ0ID0gMDtcblx0XHRcdGZpcmluZ0xlbmd0aCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0ZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgbGlzdCAmJiBmaXJpbmdJbmRleCA8IGZpcmluZ0xlbmd0aDsgZmlyaW5nSW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBkYXRhWyAwIF0sIGRhdGFbIDEgXSApID09PSBmYWxzZSAmJiBvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlOyAvLyBUbyBwcmV2ZW50IGZ1cnRoZXIgY2FsbHMgdXNpbmcgYWRkXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRpZiAoIHN0YWNrICkge1xuXHRcdFx0XHRcdGlmICggc3RhY2subGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0ZmlyZSggc3RhY2suc2hpZnQoKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZWxmLmRpc2FibGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdC8vIEZpcnN0LCB3ZSBzYXZlIHRoZSBjdXJyZW50IGxlbmd0aFxuXHRcdFx0XHRcdHZhciBzdGFydCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdChmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggYXJnICk7XG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSkoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdC8vIERvIHdlIG5lZWQgdG8gYWRkIHRoZSBjYWxsYmFja3MgdG8gdGhlXG5cdFx0XHRcdFx0Ly8gY3VycmVudCBmaXJpbmcgYmF0Y2g/XG5cdFx0XHRcdFx0aWYgKCBmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdMZW5ndGggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHQvLyBXaXRoIG1lbW9yeSwgaWYgd2UncmUgbm90IGZpcmluZyB0aGVuXG5cdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIGNhbGwgcmlnaHQgYXdheVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRcdGZpcmluZ1N0YXJ0ID0gc3RhcnQ7XG5cdFx0XHRcdFx0XHRmaXJlKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0XHR3aGlsZSggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRcdGlmICggZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nTGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmlyaW5nTGVuZ3RoLS07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdC8vIENvbnRyb2wgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdFxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xO1xuXHRcdFx0fSxcblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHQvLyBIYXZlIHRoZSBsaXN0IGRvIG5vdGhpbmcgYW55bW9yZVxuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxpc3QgPSBzdGFjayA9IG1lbW9yeSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0Ly8gSXMgaXQgZGlzYWJsZWQ/XG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cdFx0XHQvLyBMb2NrIHRoZSBsaXN0IGluIGl0cyBjdXJyZW50IHN0YXRlXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c3RhY2sgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmICggIW1lbW9yeSApIHtcblx0XHRcdFx0XHRzZWxmLmRpc2FibGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHQvLyBJcyBpdCBsb2NrZWQ/XG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIXN0YWNrO1xuXHRcdFx0fSxcblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdGlmICggbGlzdCAmJiAoICFmaXJlZCB8fCBzdGFjayApICkge1xuXHRcdFx0XHRcdGlmICggZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0c3RhY2sucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRmaXJlKCBhcmdzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuIiwiLyoqXG4qIGpRdWVyeSBjb3JlIG9iamVjdC5cbipcbiogV29ya2VyIHdpdGggalF1ZXJ5IGRlZmVycmVkXG4qXG4qIENvZGUgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvYmxvYi9tYXN0ZXIvc3JjL2NvcmUuanNcbipcbiovXG5cbnZhciBqUXVlcnkgPSBtb2R1bGUuZXhwb3J0cyA9IHtcblx0dHlwZTogdHlwZVxuXHQsIGlzQXJyYXk6IGlzQXJyYXlcblx0LCBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uXG5cdCwgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdFxuXHQsIGVhY2g6IGVhY2hcblx0LCBleHRlbmQ6IGV4dGVuZFxuXHQsIG5vb3A6IGZ1bmN0aW9uKCkge31cbn07XG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcblwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdFwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59KTtcblxuXG5mdW5jdGlvbiB0eXBlKCBvYmogKSB7XG5cdHJldHVybiBvYmogPT0gbnVsbCA/XG5cdFx0U3RyaW5nKCBvYmogKSA6XG5cdFx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKG9iaikgXSB8fCBcIm9iamVjdFwiO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cdHJldHVybiBqUXVlcnkudHlwZShvYmopID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkoIG9iaiApIHtcblx0cmV0dXJuIGpRdWVyeS50eXBlKG9iaikgPT09IFwiYXJyYXlcIjtcbn1cblxuZnVuY3Rpb24gZWFjaCggb2JqZWN0LCBjYWxsYmFjaywgYXJncyApIHtcblx0dmFyIG5hbWUsIGkgPSAwLFxuXHRsZW5ndGggPSBvYmplY3QubGVuZ3RoLFxuXHRpc09iaiA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGlzRnVuY3Rpb24oIG9iamVjdCApO1xuXG5cdGlmICggYXJncyApIHtcblx0XHRpZiAoIGlzT2JqICkge1xuXHRcdFx0Zm9yICggbmFtZSBpbiBvYmplY3QgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suYXBwbHkoIG9iamVjdFsgbmFtZSBdLCBhcmdzICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suYXBwbHkoIG9iamVjdFsgaSsrIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBIHNwZWNpYWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgZWFjaFxuXHR9IGVsc2Uge1xuXHRcdGlmICggaXNPYmogKSB7XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9iamVjdCApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmplY3RbIG5hbWUgXSwgbmFtZSwgb2JqZWN0WyBuYW1lIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmplY3RbIGkgXSwgaSwgb2JqZWN0WyBpKysgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvYmplY3Q7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QoIG9iaiApIHtcblx0Ly8gTXVzdCBiZSBhbiBPYmplY3QuXG5cdGlmICggIW9iaiB8fCBqUXVlcnkudHlwZShvYmopICE9PSBcIm9iamVjdFwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSxcblx0aSA9IDEsXG5cdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307XG5cdFx0Ly8gc2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdGkgPSAyO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIGV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGxlbmd0aCA9PT0gaSApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdC0taTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoIChvcHRpb25zID0gYXJndW1lbnRzWyBpIF0pICE9IG51bGwgKSB7XG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBqUXVlcnkuaXNBcnJheShjb3B5KSkgKSApIHtcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICkge1xuXHRcdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGpRdWVyeS5pc0FycmF5KHNyYykgPyBzcmMgOiBbXTtcblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cblxuIiwiXG4vKiFcbioganF1ZXJ5LWRlZmVycmVkXG4qIENvcHlyaWdodChjKSAyMDExIEhpZGRlbiA8enpkaGlkZGVuQGdtYWlsLmNvbT5cbiogTUlUIExpY2Vuc2VkXG4qL1xuXG4vKipcbiogTGlicmFyeSB2ZXJzaW9uLlxuKi9cblxudmFyIGpRdWVyeSA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vanF1ZXJ5LWNhbGxiYWNrcy5qc1wiKSxcblx0Y29yZV9zbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuLyoqXG4qIGpRdWVyeSBkZWZlcnJlZFxuKlxuKiBDb2RlIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvbWFzdGVyL3NyYy9kZWZlcnJlZC5qc1xuKiBEb2M6IGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9jYXRlZ29yeS9kZWZlcnJlZC1vYmplY3QvXG4qXG4qL1xuXG5qUXVlcnkuZXh0ZW5kKHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGxpc3RlbmVyIGxpc3QsIGZpbmFsIHN0YXRlXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksIFwicmVqZWN0ZWRcIiBdLFxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyhcIm1lbW9yeVwiKSBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYWN0aW9uID0gdHVwbGVbIDAgXSxcblx0XHRcdFx0XHRcdFx0XHRmbiA9IGZuc1sgaSBdO1xuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZFsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdIGZvciBmb3J3YXJkaW5nIGFjdGlvbnMgdG8gbmV3RGVmZXJcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWzFdIF0oIGpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApID9cblx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5ICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgYWN0aW9uICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyBuZXdEZWZlciA6IHRoaXMsIFsgcmV0dXJuZWQgXSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gOlxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyBhY3Rpb24gXVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0pLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRwcm9taXNlLnBpcGUgPSBwcm9taXNlLnRoZW47XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyAzIF07XG5cblx0XHRcdC8vIHByb21pc2VbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsxXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0Ly8gc3RhdGUgPSBbIHJlc29sdmVkIHwgcmVqZWN0ZWQgXVxuXHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cblx0XHRcdFx0Ly8gWyByZWplY3RfbGlzdCB8IHJlc29sdmVfbGlzdCBdLmRpc2FibGU7IHByb2dyZXNzX2xpc3QubG9ja1xuXHRcdFx0XHR9LCB0dXBsZXNbIGkgXiAxIF1bIDIgXS5kaXNhYmxlLCB0dXBsZXNbIDIgXVsgMiBdLmxvY2sgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZGVmZXJyZWRbIHJlc29sdmUgfCByZWplY3QgfCBub3RpZnkgXSA9IGxpc3QuZmlyZVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWzBdIF0gPSBsaXN0LmZpcmU7XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbMF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9KTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHN1Ym9yZGluYXRlIC8qICwgLi4uLCBzdWJvcmRpbmF0ZU4gKi8gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cdFx0XHRsZW5ndGggPSByZXNvbHZlVmFsdWVzLmxlbmd0aCxcblxuXHRcdFx0Ly8gdGhlIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gbGVuZ3RoICE9PSAxIHx8ICggc3Vib3JkaW5hdGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHN1Ym9yZGluYXRlLnByb21pc2UgKSApID8gbGVuZ3RoIDogMCxcblxuXHRcdFx0Ly8gdGhlIG1hc3RlciBEZWZlcnJlZC4gSWYgcmVzb2x2ZVZhbHVlcyBjb25zaXN0IG9mIG9ubHkgYSBzaW5nbGUgRGVmZXJyZWQsIGp1c3QgdXNlIHRoYXQuXG5cdFx0XHRkZWZlcnJlZCA9IHJlbWFpbmluZyA9PT0gMSA/IHN1Ym9yZGluYXRlIDogalF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIFVwZGF0ZSBmdW5jdGlvbiBmb3IgYm90aCByZXNvbHZlIGFuZCBwcm9ncmVzcyB2YWx1ZXNcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSwgY29udGV4dHMsIHZhbHVlcyApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRjb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHR2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmKCB2YWx1ZXMgPT09IHByb2dyZXNzVmFsdWVzICkge1xuXHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggY29udGV4dHMsIHZhbHVlcyApO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY29udGV4dHMsIHZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH0sXG5cblx0XHRcdHByb2dyZXNzVmFsdWVzLCBwcm9ncmVzc0NvbnRleHRzLCByZXNvbHZlQ29udGV4dHM7XG5cblx0XHQvLyBhZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGluYXRlczsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkXG5cdFx0aWYgKCBsZW5ndGggPiAxICkge1xuXHRcdFx0cHJvZ3Jlc3NWYWx1ZXMgPSBuZXcgQXJyYXkoIGxlbmd0aCApO1xuXHRcdFx0cHJvZ3Jlc3NDb250ZXh0cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7XG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlKClcblx0XHRcdFx0XHRcdC5kb25lKCB1cGRhdGVGdW5jKCBpLCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKSApXG5cdFx0XHRcdFx0XHQuZmFpbCggZGVmZXJyZWQucmVqZWN0IClcblx0XHRcdFx0XHRcdC5wcm9ncmVzcyggdXBkYXRlRnVuYyggaSwgcHJvZ3Jlc3NDb250ZXh0cywgcHJvZ3Jlc3NWYWx1ZXMgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC0tcmVtYWluaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gaWYgd2UncmUgbm90IHdhaXRpbmcgb24gYW55dGhpbmcsIHJlc29sdmUgdGhlIG1hc3RlclxuXHRcdGlmICggIXJlbWFpbmluZyApIHtcblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xuXHR9XG59KTtcbiIsIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My4yLjFcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDE3LTAzLTIwVDE4OjU5WlxuICovXG4oIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2Bcblx0XHQvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LlxuXHRcdC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgXG5cdFx0Ly8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuXG5cdFx0Ly8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC5cblx0XHQvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKFwianF1ZXJ5XCIpKHdpbmRvdyk7XG5cdFx0Ly8gU2VlIHRpY2tldCAjMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0gKSggdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcbi8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZVxuLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb25cbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnIgPSBbXTtcblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGNvbmNhdCA9IGFyci5jb25jYXQ7XG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZztcblxudmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxuXG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy4yLjFcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxuXHRydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZyxcblxuXHQvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcblx0cm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nLFxuXG5cdC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcblx0ZmNhbWVsQ2FzZSA9IGZ1bmN0aW9uKCBhbGwsIGxldHRlciApIHtcblx0XHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFqUXVlcnkuaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSApIHtcblx0XHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBBcnJheS5pc0FycmF5KCBzcmMgKSA/IHNyYyA6IFtdO1xuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSA/IHNyYyA6IHt9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzRnVuY3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gXCJmdW5jdGlvblwiO1xuXHR9LFxuXG5cdGlzV2luZG93OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH0sXG5cblx0aXNOdW1lcmljOiBmdW5jdGlvbiggb2JqICkge1xuXG5cdFx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0XHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXG5cdFx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0XHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0XHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxuXG5cdFx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xuXHR9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2lzc3Vlcy82MTI1XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0dHlwZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0XHR0eXBlb2Ygb2JqO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0XG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlICkge1xuXHRcdERPTUV2YWwoIGNvZGUgKTtcblx0fSxcblxuXHQvLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTNcblx0Ly8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKVxuXHRjYW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7XG5cdFx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcblx0dHJpbTogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XHRcIlwiIDpcblx0XHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG5cdC8vIGFyZ3VtZW50cy5cblx0cHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0XHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRcdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdFx0Y29udGV4dCA9IGZuO1xuXHRcdFx0Zm4gPSB0bXA7XG5cdFx0fVxuXG5cdFx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0XHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRcdGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBTaW11bGF0ZWQgYmluZFxuXHRcdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0XHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdFx0fTtcblxuXHRcdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRcdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdFx0cmV0dXJuIHByb3h5O1xuXHR9LFxuXG5cdG5vdzogRGF0ZS5ub3csXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5mdW5jdGlvbiggaSwgbmFtZSApIHtcblx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG59ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cblx0aWYgKCB0eXBlID09PSBcImZ1bmN0aW9uXCIgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy4zXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAxNi0wOC0wOFxuICovXG4oZnVuY3Rpb24oIHdpbmRvdyApIHtcblxudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gSW5zdGFuY2UgbWV0aG9kc1xuXHRoYXNPd24gPSAoe30pLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaF9uYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblx0Ly8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlXG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcblx0aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0aWYgKCBsaXN0W2ldID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllclxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXDAtXFxcXHhhMF0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXG5cdHJhdHRyaWJ1dGVRdW90ZXMgPSBuZXcgUmVnRXhwKCBcIj1cIiArIHdoaXRlc3BhY2UgKyBcIiooW15cXFxcXSdcXFwiXSo/KVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsIFwiZ1wiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJUQUdcIjogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRcIm5lZWRzQ29udGV4dFwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFwoW1xcXFxkYS1mXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICsgXCI/fChcIiArIHdoaXRlc3BhY2UgKyBcIil8LilcIiwgXCJpZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkLCBlc2NhcGVkV2hpdGVzcGFjZSApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZWQgLSAweDEwMDAwO1xuXHRcdC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50XG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveDwyNFxuXHRcdC8vIFdvcmthcm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24gb2YgK1wiMHhcIlxuXHRcdHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID9cblx0XHRcdGVzY2FwZWQgOlxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHQvLyBCTVAgY29kZXBvaW50XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHQvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFpcilcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG5cdHJjc3Nlc2NhcGUgPSAvKFtcXDAtXFx4MWZcXHg3Zl18Xi0/XFxkKXxeLSR8W15cXDAtXFx4MWZcXHg3Zi1cXHVGRkZGXFx3LV0vZyxcblx0ZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdFx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArIGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0XHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXG5cdC8vIFNlZSBzZXREb2N1bWVudCgpXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRVxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fSxcblxuXHRkaXNhYmxlZEFuY2VzdG9yID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIChcImZvcm1cIiBpbiBlbGVtIHx8IFwibGFiZWxcIiBpbiBlbGVtKTtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoX25hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKGVscykgKTtcblx0XHR9IDpcblxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxuXHRcdFx0XHRpID0gMDtcblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAodGFyZ2V0W2orK10gPSBlbHNbaSsrXSkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXG5cdFx0aWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHtcblx0XHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0fVxuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAobSA9IG1hdGNoWzFdKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXG5cdFx0XHRcdC8vIHFTQSBsb29rcyBvdXRzaWRlIEVsZW1lbnQgY29udGV4dCwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudFxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB3b3JrYXJvdW5kIHRlY2huaXF1ZVxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PThcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0fSBlbHNlIGlmICggY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRpZiAoIChuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkpICkge1xuXHRcdFx0XHRcdFx0bmlkID0gbmlkLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKG5pZCA9IGV4cGFuZG8pICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbaV0gPSBcIiNcIiArIG5pZCArIFwiIFwiICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIG5ld1NlbGVjdG9yICkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcblx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07XG5cdFx0fVxuXHRcdHJldHVybiAoY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmaWVsZHNldFwiKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdChcInxcIiksXG5cdFx0aSA9IGFyci5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0RXhwci5hdHRySGFuZGxlWyBhcnJbaV0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykgKSB7XG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhID8gMSA6IC0xO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gKG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkge1xuXG5cdC8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZVxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxuXHRcdGlmICggXCJmb3JtXCIgaW4gZWxlbSApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxuXHRcdFx0Ly8gKiBsaXN0ZWQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXG5cdFx0XHQvLyAqIG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWRcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XG5cdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTFcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0LyoganNoaW50IC1XMDE4ICovXG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdGRpc2FibGVkQW5jZXN0b3IoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcblx0XHRcdFx0XHRzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHQvLyBkb2N1bWVudEVsZW1lbnQgaXMgdmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0IGV4aXN0XG5cdC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKVxuXHR2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDtcblx0cmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gXCJIVE1MXCIgOiBmYWxzZTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHRpZiAoIGRvYyA9PT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5LTExLCBFZGdlXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNilcblx0aWYgKCBwcmVmZXJyZWREb2MgIT09IGRvY3VtZW50ICYmXG5cdFx0KHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllc1xuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZShcImNsYXNzTmFtZVwiKTtcblx0fSk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudChcIlwiKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aDtcblx0fSk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lXG5cdFx0XHRcdFx0ZWxlbXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApO1xuXHRcdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtc1tpKytdKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZFtcIlRBR1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kW1wiQ0xBU1NcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdGlmICggKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkpICkge1xuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbChcIltzZWxlY3RlZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwifj1cIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiOmNoZWNrZWRcIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIi4jLitbK35dXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdFx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmRpc2FibGVkXCIpLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIik7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaChcIiwuKjpcIik7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZWwsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKFwifFwiKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKFwifFwiKSApO1xuXG5cdC8qIENvbnRhaW5zXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xuXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxuXHQvLyBQdXJwb3NlZnVsbHkgc2VsZi1leGNsdXNpdmVcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXHRcdFx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxuXHRcdFx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHRcdFx0KSk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkge1xuXHRcdFx0XHRcdGlmICggYiA9PT0gYSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBoYXNDb21wYXJlID9cblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUpICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdGlmICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBhKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBiID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cdFx0XHRyZXR1cm4gYSA9PT0gZG9jdW1lbnQgPyAtMSA6XG5cdFx0XHRcdGIgPT09IGRvY3VtZW50ID8gMSA6XG5cdFx0XHRcdGF1cCA/IC0xIDpcblx0XHRcdFx0YnVwID8gMSA6XG5cdFx0XHRcdHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXG5cdFx0fSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cblx0XHRjdXIgPSBhO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHRhcFtpXSA9PT0gcHJlZmVycmVkRG9jID8gLTEgOlxuXHRcdFx0YnBbaV0gPT09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0Ly8gTWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkXG5cdGV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRyaWJ1dGVRdW90ZXMsIFwiPSckMSddXCIgKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IWNvbXBpbGVyQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblx0XHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoc2VsICsgXCJcIikucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbNl0gJiYgbWF0Y2hbMl07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWzNdICkge1xuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJlxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWzJdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSkgJiZcblx0XHRcdFx0Y2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIiApO1xuXHRcdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WzBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgXCJcIikgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKSB8fCBlbGVtLmdldEF0dHJpYnV0ZShcImxhbmdcIikpICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQpO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zW1wiZW1wdHlcIl0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9KSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSlcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zW1wibnRoXCJdID0gRXhwci5wc2V1ZG9zW1wiZXFcIl07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkpICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0pO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoZWxlbVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8IChvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAobmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1swXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCBcIipcIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcblx0XHRcdFx0XHRcdCh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbXCIgXCJdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0pXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbXCJJRFwiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwgY29udGV4dCApIHx8IFtdIClbMF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByW1wibmVlZHNDb250ZXh0XCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zW2ldO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkge1xuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0XHRcdFx0KSkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoXCJcIikuc29ydCggc29ydE9yZGVyICkuam9pbihcIlwiKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIikgKSAmIDE7XG59KTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIgO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydChmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSA9PSBudWxsO1xufSkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdFx0KHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0pKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cbiAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn07XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbnZhciByaXNTaW1wbGUgPSAvXi5bXjojXFxbXFwuLF0qJC87XG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbXBsZSBzZWxlY3RvciB0aGF0IGNhbiBiZSBmaWx0ZXJlZCBkaXJlY3RseSwgcmVtb3Zpbmcgbm9uLUVsZW1lbnRzXG5cdGlmICggcmlzU2ltcGxlLnRlc3QoIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcblx0fVxuXG5cdC8vIENvbXBsZXggc2VsZWN0b3IsIGNvbXBhcmUgdGhlIHR3byBzZXRzLCByZW1vdmluZyBub24tRWxlbWVudHNcblx0cXVhbGlmaWVyID0galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cyApO1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90ICYmIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGVcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgIGlmICggbm9kZU5hbWUoIGVsZW0sIFwiaWZyYW1lXCIgKSApIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuICAgICAgICAvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcbiAgICAgICAgLy8gZG9uJ3Qgc3VwcG9ydCBpdC5cbiAgICAgICAgaWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG4gICAgICAgICAgICBlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgalF1ZXJ5LnR5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXG5cdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIG9uUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0dmFyIG1heERlcHRoID0gMDtcblx0XHRcdFx0XHRmdW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRhcmdzID0gYXJndW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCwgdGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHNcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggPCBtYXhEZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNDhcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggXCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb25cIiApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9ucyAyLjMuMy4xLCAzLjVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC03NVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmV0cmlldmUgYHRoZW5gIG9ubHkgb25jZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbiA9IHJldHVybmVkICYmXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02NFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IGNoZWNrIG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCB0eXBlb2YgcmV0dXJuZWQgPT09IFwib2JqZWN0XCIgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgcmV0dXJuZWQgPT09IFwiZnVuY3Rpb25cIiApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhIHJldHVybmVkIHRoZW5hYmxlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuaXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIubm90aWZ5V2l0aFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAxIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuaXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5pc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2tcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdGxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzaW5nbGVWYWx1ZSApIHtcblx0XHR2YXJcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHNcblx0XHRcdGkgPSByZW1haW5pbmcsXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGFcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cblx0XHRcdC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWRcblx0XHRcdG1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRtYXN0ZXIucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH07XG5cblx0XHQvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmVcblx0XHRpZiAoIHJlbWFpbmluZyA8PSAxICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUsIG1hc3Rlci5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBtYXN0ZXIucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggbWFzdGVyLnN0YXRlKCkgPT09IFwicGVuZGluZ1wiIHx8XG5cdFx0XHRcdGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gbWFzdGVyLnRoZW4oKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBNdWx0aXBsZSBhcmd1bWVudHMgYXJlIGFnZ3JlZ2F0ZWQgbGlrZSBQcm9taXNlLmFsbCBhcnJheSBlbGVtZW50c1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggcmVzb2x2ZVZhbHVlc1sgaSBdLCB1cGRhdGVGdW5jKCBpICksIG1hc3Rlci5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWFzdGVyLnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIHN0YWNrICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIHN0YWNrICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIGpRdWVyeS50eXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwga2V5LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGZuKFxuXHRcdFx0XHRcdGVsZW1zWyBpIF0sIGtleSwgcmF3ID9cblx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxuXG5cdFx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGpRdWVyeS5jYW1lbENhc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IGpRdWVyeS5jYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2Vcblx0XHRcdFx0a2V5ID0ga2V5IGluIGNhY2hlID9cblx0XHRcdFx0XHRbIGtleSBdIDpcblx0XHRcdFx0XHQoIGtleS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBrZXkubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDVcblx0XHRcdC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzXG5cdFx0XHQvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKVxuXHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0cmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApO1xuXHR9XG59O1xudmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcblxuXG5cbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XG4vL1xuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2Vcbi8vXHRcdHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS5cbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcbi8vXHQ1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcylcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcblxudmFyIHJicmFjZSA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xuXG5mdW5jdGlvbiBnZXREYXRhKCBkYXRhICkge1xuXHRpZiAoIGRhdGEgPT09IFwidHJ1ZVwiICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcImZhbHNlXCIgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcIm51bGxcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXG5cdGlmICggZGF0YSA9PT0gK2RhdGEgKyBcIlwiICkge1xuXHRcdHJldHVybiArZGF0YTtcblx0fVxuXG5cdGlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApO1xuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcblxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkYXRhID0gZ2V0RGF0YSggZGF0YSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApO1xuXHR9LFxuXG5cdGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fSxcblxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC5cblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgaSwgbmFtZSwgZGF0YSxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdGhpcy5sZW5ndGggKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAoIzE0ODk0KVxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyc1sgaSBdICkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgJiZcblxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrLCBhcmdzICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCxcblx0XHRzY2FsZSA9IDEsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0ZG8ge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyBpdGVyYXRpb24gemVyb2VkIG91dCwgZG91YmxlIHVudGlsIHdlIGdldCAqc29tZXRoaW5nKi5cblx0XHRcdC8vIFVzZSBzdHJpbmcgZm9yIGRvdWJsaW5nIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBzZWUgc2NhbGUgYXMgdW5jaGFuZ2VkIGJlbG93XG5cdFx0XHRzY2FsZSA9IHNjYWxlIHx8IFwiLjVcIjtcblxuXHRcdFx0Ly8gQWRqdXN0IGFuZCBhcHBseVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIFVwZGF0ZSBzY2FsZSwgdG9sZXJhdGluZyB6ZXJvIG9yIE5hTiBmcm9tIHR3ZWVuLmN1cigpXG5cdFx0Ly8gQnJlYWsgdGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3ZlIGp1c3QgaGFkIGVub3VnaC5cblx0XHR9IHdoaWxlIChcblx0XHRcdHNjYWxlICE9PSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsICkgJiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRpb25zXG5cdFx0KTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKykvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRvcHRpb246IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXSxcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG53cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBjb250YWlucywgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIGpRdWVyeS50eXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG5cdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDtcblx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07XG5cblx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdGogPSB3cmFwWyAwIF07XG5cdFx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAoIzEyMzkyKVxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdGkgPSAwO1xuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xuXG5cdFx0Ly8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0IGNvbGxlY3Rpb24gKHRyYWMtNDA4Nylcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcblx0XHRcdGlmICggaWdub3JlZCApIHtcblx0XHRcdFx0aWdub3JlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb250YWlucyA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGNvbnRhaW5zICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG59ICkoKTtcbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG52YXJcblx0cmtleUV2ZW50ID0gL15rZXkvLFxuXHRybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxcblx0cnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFNlZSAjMTMzOTMgZm9yIG1vcmUgaW5mb1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKVxuXHRcdGlmICggIWVsZW1EYXRhICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdFxuXHRcdHZhciBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICk7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblx0XHRcdGhhbmRsZXJzID0gKCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10sXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcblxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XG5cblx0XHRmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIgMSkgaGF2ZSBubyBuYW1lc3BhY2UsIG9yIDIpIGhhdmUgbmFtZXNwYWNlKHMpXG5cdFx0XHRcdC8vIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzID0ge307XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGpRdWVyeS5pc0Z1bmN0aW9uKCBob29rICkgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Zm9jdXM6IHtcblxuXHRcdFx0Ly8gRmlyZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCB0aGlzICE9PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuZm9jdXMgKSB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGVnYXRlVHlwZTogXCJmb2N1c2luXCJcblx0XHR9LFxuXHRcdGJsdXI6IHtcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIHRoaXMgPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5ibHVyICkge1xuXHRcdFx0XHRcdHRoaXMuYmx1cigpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlbGVnYXRlVHlwZTogXCJmb2N1c291dFwiXG5cdFx0fSxcblx0XHRjbGljazoge1xuXG5cdFx0XHQvLyBGb3IgY2hlY2tib3gsIGZpcmUgbmF0aXZlIGV2ZW50IHNvIGNoZWNrZWQgc3RhdGUgd2lsbCBiZSByaWdodFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggdGhpcy50eXBlID09PSBcImNoZWNrYm94XCIgJiYgdGhpcy5jbGljayAmJiBub2RlTmFtZSggdGhpcywgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dGhpcy5jbGljaygpO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIGRvbid0IGZpcmUgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHRyZXR1cm4gbm9kZU5hbWUoIGV2ZW50LnRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApO1xuXHR9XG59O1xuXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcblxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIEV2ZW50IG9iamVjdFxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XG5cdFx0dGhpcy50eXBlID0gc3JjLnR5cGU7XG5cblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuXHRcdC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLlxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seVxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cblx0XHRcdHJldHVyblRydWUgOlxuXHRcdFx0cmV0dXJuRmFsc2U7XG5cblx0XHQvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXNcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0Mylcblx0XHR0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgP1xuXHRcdFx0c3JjLnRhcmdldC5wYXJlbnROb2RlIDpcblx0XHRcdHNyYy50YXJnZXQ7XG5cblx0XHR0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDtcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVlcnkubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cblx0d2hpY2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYnV0dG9uID0gZXZlbnQuYnV0dG9uO1xuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzXG5cdFx0aWYgKCBldmVudC53aGljaCA9PSBudWxsICYmIHJrZXlFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRyZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTtcblx0XHR9XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XG5cdFx0aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgcm1vdXNlRXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0aWYgKCBidXR0b24gJiAxICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiAyICkge1xuXHRcdFx0XHRyZXR1cm4gMztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiA0ICkge1xuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LndoaWNoO1xuXHR9XG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG4vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3Ncbi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxuLy9cbi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHlcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4XG4vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLlxualF1ZXJ5LmVhY2goIHtcblx0bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIixcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcblx0cG9pbnRlcmxlYXZlOiBcInBvaW50ZXJvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcblx0XHRkZWxlZ2F0ZVR5cGU6IGZpeCxcblx0XHRiaW5kVHlwZTogZml4LFxuXG5cdFx0aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxuXHRcdFx0XHRyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xuXG5cdFx0XHQvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTtcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXG5cdC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxuXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvaXNzdWVzLzMyMjlcblx0cnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKVtePl0qKVxcLz4vZ2ksXG5cblx0LyogZXNsaW50LWVuYWJsZSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzXG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cdHJzY3JpcHRUeXBlTWFza2VkID0gL150cnVlXFwvKC4qKS8sXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBcIj50Ym9keVwiLCBlbGVtIClbIDAgXSB8fCBlbGVtO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XG5cdGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgIT09IG51bGwgKSArIFwiL1wiICsgZWxlbS50eXBlO1xuXHRyZXR1cm4gZWxlbTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XG5cdHZhciBtYXRjaCA9IHJzY3JpcHRUeXBlTWFza2VkLmV4ZWMoIGVsZW0udHlwZSApO1xuXG5cdGlmICggbWF0Y2ggKSB7XG5cdFx0ZWxlbS50eXBlID0gbWF0Y2hbIDEgXTtcblx0fSBlbHNlIHtcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggXCJ0eXBlXCIgKTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmFjY2Vzcyggc3JjICk7XG5cdFx0cGRhdGFDdXIgPSBkYXRhUHJpdi5zZXQoIGRlc3QsIHBkYXRhT2xkICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkZWxldGUgcGRhdGFDdXIuaGFuZGxlO1xuXHRcdFx0cGRhdGFDdXIuZXZlbnRzID0ge307XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBjb25jYXQuYXBwbHkoIFtdLCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCBpc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudFxuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5fZXZhbFVybCApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICksIGRvYyApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgalF1ZXJ5LmNvbnRhaW5zKCBub2RlLm93bmVyRG9jdW1lbnQsIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgXCI8JDE+PC8kMj5cIiApO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJtYXJnaW4gPSAoIC9ebWFyZ2luLyApO1xuXG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJib3gtc2l6aW5nOmJvcmRlci1ib3g7XCIgK1xuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcInRvcDoxJTt3aWR0aDo1MCVcIjtcblx0XHRkaXYuaW5uZXJIVE1MID0gXCJcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSBkaXZTdHlsZS5tYXJnaW5MZWZ0ID09PSBcIjJweFwiO1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gZGl2U3R5bGUud2lkdGggPT09IFwiNHB4XCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gXCI1MCVcIjtcblx0XHRwaXhlbE1hcmdpblJpZ2h0VmFsID0gZGl2U3R5bGUubWFyZ2luUmlnaHQgPT09IFwiNHB4XCI7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0Ly8gTnVsbGlmeSB0aGUgZGl2IHNvIGl0IHdvdWxkbid0IGJlIHN0b3JlZCBpbiB0aGUgbWVtb3J5IGFuZFxuXHRcdC8vIGl0IHdpbGwgYWxzbyBiZSBhIHNpZ24gdGhhdCBjaGVja3MgYWxyZWFkeSBwZXJmb3JtZWRcblx0XHRkaXYgPSBudWxsO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBwaXhlbE1hcmdpblJpZ2h0VmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwiYm9yZGVyOjA7d2lkdGg6OHB4O2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweDtcIiArXG5cdFx0XCJwYWRkaW5nOjA7bWFyZ2luLXRvcDoxcHg7cG9zaXRpb246YWJzb2x1dGVcIjtcblx0Y29udGFpbmVyLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxNYXJnaW5SaWdodDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsTWFyZ2luUmlnaHRWYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxNYXJnaW5SaWdodCgpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiBybWFyZ2luLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH0sXG5cblx0Y3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlO1xuXG4vLyBSZXR1cm4gYSBjc3MgcHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBTaG9ydGN1dCBmb3IgbmFtZXMgdGhhdCBhcmUgbm90IHZlbmRvciBwcmVmaXhlZFxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwcm9wZXJ0eSBtYXBwZWQgYWxvbmcgd2hhdCBqUXVlcnkuY3NzUHJvcHMgc3VnZ2VzdHMgb3IgdG9cbi8vIGEgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5LlxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIHJldCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdO1xuXHRpZiAoICFyZXQgKSB7XG5cdFx0cmV0ID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG5cdH1cblx0cmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYXVnbWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhLCBpc0JvcmRlckJveCwgc3R5bGVzICkge1xuXHR2YXIgaSxcblx0XHR2YWwgPSAwO1xuXG5cdC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgbWVhc3VyZW1lbnQsIGF2b2lkIGF1Z21lbnRhdGlvblxuXHRpZiAoIGV4dHJhID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0aSA9IDQ7XG5cblx0Ly8gT3RoZXJ3aXNlIGluaXRpYWxpemUgZm9yIGhvcml6b250YWwgb3IgdmVydGljYWwgcHJvcGVydGllc1xuXHR9IGVsc2Uge1xuXHRcdGkgPSBuYW1lID09PSBcIndpZHRoXCIgPyAxIDogMDtcblx0fVxuXG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHtcblxuXHRcdC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpbiwgc28gYWRkIGl0IGlmIHdlIHdhbnQgaXRcblx0XHRpZiAoIGV4dHJhID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdGlmICggaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdhbnQgY29udGVudFxuXHRcdFx0aWYgKCBleHRyYSA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgYm9yZGVyIG5vciBtYXJnaW4sIHNvIHJlbW92ZSBib3JkZXJcblx0XHRcdGlmICggZXh0cmEgIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQsIHNvIGFkZCBwYWRkaW5nXG5cdFx0XHR2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQgbm9yIHBhZGRpbmcsIHNvIGFkZCBib3JkZXJcblx0XHRcdGlmICggZXh0cmEgIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHR2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdmFsO1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciB2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICksXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdC8vIENvbXB1dGVkIHVuaXQgaXMgbm90IHBpeGVscy4gU3RvcCBoZXJlIGFuZCByZXR1cm4uXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHQvLyBDaGVjayBmb3Igc3R5bGUgaW4gY2FzZSBhIGJyb3dzZXIgd2hpY2ggcmV0dXJucyB1bnJlbGlhYmxlIHZhbHVlc1xuXHQvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlXG5cdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCAmJlxuXHRcdCggc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IHZhbCA9PT0gZWxlbS5zdHlsZVsgbmFtZSBdICk7XG5cblx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL0hlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0aWYgKCB2YWwgPT09IFwiYXV0b1wiICkge1xuXHRcdHZhbCA9IGVsZW1bIFwib2Zmc2V0XCIgKyBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSBdO1xuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYVxuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIFVzZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZhbnQgc3R5bGVzXG5cdHJldHVybiAoIHZhbCArXG5cdFx0YXVnbWVudFdpZHRoT3JIZWlnaHQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0bmFtZSxcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXNcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImxpbmVIZWlnaHRcIjogdHJ1ZSxcblx0XHRcIm9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcIm9yZGVyXCI6IHRydWUsXG5cdFx0XCJvcnBoYW5zXCI6IHRydWUsXG5cdFx0XCJ3aWRvd3NcIjogdHJ1ZSxcblx0XHRcInpJbmRleFwiOiB0cnVlLFxuXHRcdFwiem9vbVwiOiB0cnVlXG5cdH0sXG5cblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxuXHQvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlXG5cdGNzc1Byb3BzOiB7XG5cdFx0XCJmbG9hdFwiOiBcImNzc0Zsb2F0XCJcblx0fSxcblxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxuXHRzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHtcblxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXNcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fFxuXHRcdFx0XHQoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0aWYgKCBpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdFx0c3R5bGUuc2V0UHJvcGVydHkoIG5hbWUsIHZhbHVlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0XG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcblx0XHR2YXIgdmFsLCBudW0sIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRcdHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTtcblx0XHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZXh0cmEgJiYgZ2V0U3R5bGVzKCBlbGVtICksXG5cdFx0XHRcdHN1YnRyYWN0ID0gZXh0cmEgJiYgYXVnbWVudFdpZHRoT3JIZWlnaHQoXG5cdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdFx0c3R5bGVzXG5cdFx0XHRcdCk7XG5cblx0XHRcdC8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1lbnQgaXMgbmVlZGVkXG5cdFx0XHRpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmXG5cdFx0XHRcdCggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApICE9PSBcInB4XCIgKSB7XG5cblx0XHRcdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7XG5cdFx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdHZhciBzdHlsZXMsIGxlbixcblx0XHRcdFx0bWFwID0ge30sXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG5hbWUgKSApIHtcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDpcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9XG59ICk7XG5cblxuZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkge1xuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xufVxualF1ZXJ5LlR3ZWVuID0gVHdlZW47XG5cblR3ZWVuLnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IFR3ZWVuLFxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XG5cdFx0dGhpcy5lbGVtID0gZWxlbTtcblx0XHR0aGlzLnByb3AgPSBwcm9wO1xuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpO1xuXHRcdHRoaXMuZW5kID0gZW5kO1xuXHRcdHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdH0sXG5cdGN1cjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xuXHRcdFx0aG9va3MuZ2V0KCB0aGlzICkgOlxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApO1xuXHR9LFxuXHRydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkge1xuXHRcdHZhciBlYXNlZCxcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXG5cdFx0XHRcdHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7XG5cdFx0fVxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XG5cdFx0XHRob29rcy5zZXQoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufTtcblxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xuXG5Ud2Vlbi5wcm9wSG9va3MgPSB7XG5cdF9kZWZhdWx0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXG5cdFx0XHQvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LFxuXHRcdFx0Ly8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy5cblx0XHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fFxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5XG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxuXHRcdFx0Ly8gU2ltcGxlIHZhbHVlcyBzdWNoIGFzIFwiMTBweFwiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7XG5cdFx0XHQvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzIFwicm90YXRlKDFyYWQpXCIgYXJlIHJldHVybmVkIGFzLWlzLlxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xuXG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cblx0XHRcdC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LlxuXHRcdFx0Ly8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLlxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cblx0XHRcdGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHtcblx0XHRcdFx0alF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSggdHdlZW4gKTtcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCB0d2Vlbi5lbGVtLnN0eWxlWyBqUXVlcnkuY3NzUHJvcHNbIHR3ZWVuLnByb3AgXSBdICE9IG51bGwgfHxcblx0XHRcdFx0XHRqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDEzXG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1lcblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRcdC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgXCJoaWRlXCIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoICFoaWRkZW4gKSB7XG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXG5cdFx0cHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHByb3BUd2Vlbi5lbmQgPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggaW5kZXggKTtcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XG5cdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcblx0XHR9XG5cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XG5cblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xuXHR2YXIgcmVzdWx0LFxuXHRcdHN0b3BwZWQsXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCxcblx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxuXHRcdFx0ZGVsZXRlIHRpY2suZWxlbTtcblx0XHR9ICksXG5cdFx0dGljayA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0XHRyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjMgb25seVxuXHRcdFx0XHQvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxuXHRcdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0Ly8gSWYgdGhlcmUncyBtb3JlIHRvIGRvLCB5aWVsZFxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgd2FzIGFuIGVtcHR5IGFuaW1hdGlvbiwgc3ludGhlc2l6ZSBhIGZpbmFsIHByb2dyZXNzIG5vdGlmaWNhdGlvblxuXHRcdFx0aWYgKCAhbGVuZ3RoICkge1xuXHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGFuaW1hdGlvbiBhbmQgcmVwb3J0IGl0cyBjb25jbHVzaW9uXG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSgge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0XHRzcGVjaWFsRWFzaW5nOiB7fSxcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XG5cdFx0XHR9LCBvcHRpb25zICksXG5cdFx0XHRvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdHR3ZWVuczogW10sXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcblx0XHRcdFx0dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLFxuXHRcdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdGpRdWVyeS5wcm94eSggcmVzdWx0LnN0b3AsIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRhbmltYXRpb25cblx0XHQucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdHJldHVybiBhbmltYXRpb247XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblxuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcblx0aWYgKCBqUXVlcnkuZngub2ZmICkge1xuXHRcdG9wdC5kdXJhdGlvbiA9IDA7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBqUXVlcnkubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBSdW4gdGhlIHRpbWVyIGFuZCBzYWZlbHkgcmVtb3ZlIGl0IHdoZW4gZG9uZSAoYWxsb3dpbmcgZm9yIGV4dGVybmFsIHJlbW92YWwpXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5Qcm9ncmVzcyA9IHRydWU7XG5cdHNjaGVkdWxlKCk7XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRpblByb2dyZXNzID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG4vLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seVxuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArIFwiXCIgKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcblx0fSxcblxuXHRhdHRySG9va3M6IHtcblx0XHR0eXBlOiB7XG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcblx0XHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSxcblx0XHRcdGkgPSAwLFxuXG5cdFx0XHQvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG5cdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTJcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcbmJvb2xIb29rID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZVxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5cbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xuXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgcmV0LCBoYW5kbGUsXG5cdFx0XHRsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cblx0XHRcdC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IHJldDtcblx0XHRcdHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID9cblx0XHRcdFx0bG93ZXJjYXNlTmFtZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSBoYW5kbGU7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG59ICk7XG5cblxuXG5cbnZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzXG5cdFx0XHRuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuXHRcdFx0aG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdO1xuXHR9LFxuXG5cdHByb3BIb29rczoge1xuXHRcdHRhYkluZGV4OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHRcdFx0Ly8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlXG5cdFx0XHRcdC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldFxuXHRcdFx0XHQvLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNDExMTYyMzMzNDcvaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC9cblx0XHRcdFx0Ly8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsKCMxMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUgKSB7XG5cdFx0XHRjbGFzc2VzID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZSApIHtcblx0XHRcdGNsYXNzZXMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgdHlwZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGNsYXNzTmFtZSwgaSwgc2VsZiwgY2xhc3NOYW1lcztcblxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0XHRcdHdoaWxlICggKCBjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFwiXCIgOlxuXHRcdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZSwgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Y2xhc3NOYW1lID0gXCIgXCIgKyBzZWxlY3RvciArIFwiIFwiO1xuXHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgXCIgXCIgKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgcnJldHVybiA9IC9cXHIvZztcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgaG9va3MsIHJldCwgaXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHR2YXIgdmFsO1xuXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLztcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTtcblx0XHRcdGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7XG5cdFx0XHRcdGN1ciA9IGN1ci5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggY3VyICk7XG5cdFx0XHRcdHRtcCA9IGN1cjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pXG5cdFx0XHRpZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIHRtcC5kZWZhdWx0VmlldyB8fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGhcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRldmVudC50eXBlID0gaSA+IDEgP1xuXHRcdFx0XHRidWJibGVUeXBlIDpcblx0XHRcdFx0c3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBqUXVlcnkgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSAmJlxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xuXHRcdFx0aWYgKCBoYW5kbGUgKSB7XG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcblx0XHRcdGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHtcblx0XHRcdFx0ZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IHR5cGU7XG5cblx0XHQvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblxuXHRcdFx0aWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8XG5cdFx0XHRcdHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYmXG5cdFx0XHRcdGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblxuXHRcdFx0XHQvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbmpRdWVyeS5lYWNoKCAoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cblx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NFxuLy8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcbi8vXG4vLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcbi8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuaWYgKCAhc3VwcG9ydC5mb2N1c2luICkge1xuXHRqUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXG5cdFx0Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXRcblx0XHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTtcblx0XHR9O1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0ge1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0sXG5cdFx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSApO1xufVxudmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuXG52YXIgbm9uY2UgPSBqUXVlcnkubm93KCk7XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbDtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHhtbCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgalF1ZXJ5LnR5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9IClcblx0XHQuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApXG5cdFx0Lm1hcCggZnVuY3Rpb24oIGksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cjIwID0gLyUyMC9nLFxuXHRyaGFzaCA9IC8jLiokLyxcblx0cmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXG5cblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cdG9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjtcblxuLy8gQmFzZSBcImNvbnN0cnVjdG9yXCIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydFxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XG5cblx0Ly8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBcIipcIlxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcblxuXHRcdGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcblx0XHR9XG5cblx0XHR2YXIgZGF0YVR5cGUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2g7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTNcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UrKyApICsgdW5jYWNoZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFB1dCBoYXNoIGFuZCBhbnRpLWNhY2hlIG9uIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCAoZ2gtMTczMilcblx0XHRcdHMudXJsID0gY2FjaGVVUkwgKyB1bmNhY2hlZDtcblxuXHRcdC8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVkIGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KVxuXHRcdH0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmXG5cdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApLmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCApIHtcblx0XHRcdHMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnRcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXG5cdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlcihcblx0XHRcdFwiQWNjZXB0XCIsXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gK1xuXHRcdFx0XHRcdCggcy5kYXRhVHlwZXNbIDAgXSAhPT0gXCIqXCIgPyBcIiwgXCIgKyBhbGxUeXBlcyArIFwiOyBxPTAuMDFcIiA6IFwiXCIgKSA6XG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxuXHRcdCk7XG5cblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydFxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXG5cdFx0XHQoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkge1xuXG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXG5cdFx0Y29tcGxldGVEZWZlcnJlZC5hZGQoIHMuY29tcGxldGUgKTtcblx0XHRqcVhIUi5kb25lKCBzLnN1Y2Nlc3MgKTtcblx0XHRqcVhIUi5mYWlsKCBzLmVycm9yICk7XG5cblx0XHQvLyBHZXQgdHJhbnNwb3J0XG5cdFx0dHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcblx0XHRpZiAoICF0cmFuc3BvcnQgKSB7XG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gMTtcblxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwgc3RvcCB0aGVyZVxuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybiBqcVhIUjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGltZW91dFxuXHRcdFx0aWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7XG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRqcVhIUi5hYm9ydCggXCJ0aW1lb3V0XCIgKTtcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBsZXRlZCA9IGZhbHNlO1xuXHRcdFx0XHR0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIFJldGhyb3cgcG9zdC1jb21wbGV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0c1xuXHRcdFx0XHRkb25lKCAtMSwgZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZVxuXHRcdGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xuXHRcdFx0dmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCxcblx0XHRcdFx0c3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7XG5cblx0XHRcdC8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnNcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBsZXRlZCA9IHRydWU7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdFx0XHQvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKVxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XG5cblx0XHRcdC8vIFNldCByZWFkeVN0YXRlXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bFxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XG5cblx0XHRcdC8vIEdldCByZXNwb25zZSBkYXRhXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXHRcdFwidGhyb3dzXCI6IHRydWVcblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xuXHR9XG59ICk7XG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiICkucHJvcCgge1xuXHRcdFx0XHRcdGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCxcblx0XHRcdFx0XHRzcmM6IHMudXJsXG5cdFx0XHRcdH0gKS5vbihcblx0XHRcdFx0XHRcImxvYWQgZXJyb3JcIixcblx0XHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxuLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHNcbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBpLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbmpRdWVyeS5vZmZzZXQgPSB7XG5cdHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXG5cdFx0XHRjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksXG5cdFx0XHRwcm9wcyA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbVxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH1cblxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XG5cdFx0Y3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgXCJ0b3BcIiApO1xuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxuXHRcdFx0KCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggXCJhdXRvXCIgKSA+IC0xO1xuXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuXHRcdH1cblxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciBkb2MsIGRvY0VsZW0sIHJlY3QsIHdpbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB6ZXJvcyBmb3IgZGlzY29ubmVjdGVkIGFuZCBoaWRkZW4gKGRpc3BsYXk6IG5vbmUpIGVsZW1lbnRzIChnaC0yMzEwKVxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGFcblx0XHQvLyBkaXNjb25uZWN0ZWQgbm9kZSBpbiBJRSB0aHJvd3MgYW4gZXJyb3Jcblx0XHRpZiAoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0ZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0d2luID0gZG9jLmRlZmF1bHRWaWV3O1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQgLSBkb2NFbGVtLmNsaWVudFRvcCxcblx0XHRcdGxlZnQ6IHJlY3QubGVmdCArIHdpbi5wYWdlWE9mZnNldCAtIGRvY0VsZW0uY2xpZW50TGVmdFxuXHRcdH07XG5cdH0sXG5cblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0cGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuXHRcdC8vIEZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB3aW5kb3cgKHBhcmVudE9mZnNldCA9IHt0b3A6MCwgbGVmdDogMH0sXG5cdFx0Ly8gYmVjYXVzZSBpdCBpcyBpdHMgb25seSBvZmZzZXQgcGFyZW50XG5cdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiICkge1xuXG5cdFx0XHQvLyBBc3N1bWUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlzIHRoZXJlIHdoZW4gY29tcHV0ZWQgcG9zaXRpb24gaXMgZml4ZWRcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudFxuXHRcdFx0b2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKTtcblxuXHRcdFx0Ly8gR2V0IGNvcnJlY3Qgb2Zmc2V0c1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblx0XHRcdGlmICggIW5vZGVOYW1lKCBvZmZzZXRQYXJlbnRbIDAgXSwgXCJodG1sXCIgKSApIHtcblx0XHRcdFx0cGFyZW50T2Zmc2V0ID0gb2Zmc2V0UGFyZW50Lm9mZnNldCgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb2Zmc2V0UGFyZW50IGJvcmRlcnNcblx0XHRcdHBhcmVudE9mZnNldCA9IHtcblx0XHRcdFx0dG9wOiBwYXJlbnRPZmZzZXQudG9wICsgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0sIFwiYm9yZGVyVG9wV2lkdGhcIiwgdHJ1ZSApLFxuXHRcdFx0XHRsZWZ0OiBwYXJlbnRPZmZzZXQubGVmdCArIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlIClcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCBcIlwiOiBcIm91dGVyXCIgKyBuYW1lIH0sXG5cdFx0ZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xuXG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxuaWYgKCAhbm9HbG9iYWwgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiIsIihmdW5jdGlvbigpe1xuXG4gICAgLy8gQ29weXJpZ2h0IChjKSAyMDA1ICBUb20gV3VcbiAgICAvLyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAgIC8vIFNlZSBcIkxJQ0VOU0VcIiBmb3IgZGV0YWlscy5cblxuICAgIC8vIEJhc2ljIEphdmFTY3JpcHQgQk4gbGlicmFyeSAtIHN1YnNldCB1c2VmdWwgZm9yIFJTQSBlbmNyeXB0aW9uLlxuXG4gICAgLy8gQml0cyBwZXIgZGlnaXRcbiAgICB2YXIgZGJpdHM7XG5cbiAgICAvLyBKYXZhU2NyaXB0IGVuZ2luZSBhbmFseXNpc1xuICAgIHZhciBjYW5hcnkgPSAweGRlYWRiZWVmY2FmZTtcbiAgICB2YXIgal9sbSA9ICgoY2FuYXJ5JjB4ZmZmZmZmKT09MHhlZmNhZmUpO1xuXG4gICAgLy8gKHB1YmxpYykgQ29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBCaWdJbnRlZ2VyKGEsYixjKSB7XG4gICAgICBpZihhICE9IG51bGwpXG4gICAgICAgIGlmKFwibnVtYmVyXCIgPT0gdHlwZW9mIGEpIHRoaXMuZnJvbU51bWJlcihhLGIsYyk7XG4gICAgICAgIGVsc2UgaWYoYiA9PSBudWxsICYmIFwic3RyaW5nXCIgIT0gdHlwZW9mIGEpIHRoaXMuZnJvbVN0cmluZyhhLDI1Nik7XG4gICAgICAgIGVsc2UgdGhpcy5mcm9tU3RyaW5nKGEsYik7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIG5ldywgdW5zZXQgQmlnSW50ZWdlclxuICAgIGZ1bmN0aW9uIG5iaSgpIHsgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKG51bGwpOyB9XG5cbiAgICAvLyBhbTogQ29tcHV0ZSB3X2ogKz0gKHgqdGhpc19pKSwgcHJvcGFnYXRlIGNhcnJpZXMsXG4gICAgLy8gYyBpcyBpbml0aWFsIGNhcnJ5LCByZXR1cm5zIGZpbmFsIGNhcnJ5LlxuICAgIC8vIGMgPCAzKmR2YWx1ZSwgeCA8IDIqZHZhbHVlLCB0aGlzX2kgPCBkdmFsdWVcbiAgICAvLyBXZSBuZWVkIHRvIHNlbGVjdCB0aGUgZmFzdGVzdCBvbmUgdGhhdCB3b3JrcyBpbiB0aGlzIGVudmlyb25tZW50LlxuXG4gICAgLy8gYW0xOiB1c2UgYSBzaW5nbGUgbXVsdCBhbmQgZGl2aWRlIHRvIGdldCB0aGUgaGlnaCBiaXRzLFxuICAgIC8vIG1heCBkaWdpdCBiaXRzIHNob3VsZCBiZSAyNiBiZWNhdXNlXG4gICAgLy8gbWF4IGludGVybmFsIHZhbHVlID0gMipkdmFsdWVeMi0yKmR2YWx1ZSAoPCAyXjUzKVxuICAgIGZ1bmN0aW9uIGFtMShpLHgsdyxqLGMsbikge1xuICAgICAgd2hpbGUoLS1uID49IDApIHtcbiAgICAgICAgdmFyIHYgPSB4KnRoaXNbaSsrXSt3W2pdK2M7XG4gICAgICAgIGMgPSBNYXRoLmZsb29yKHYvMHg0MDAwMDAwKTtcbiAgICAgICAgd1tqKytdID0gdiYweDNmZmZmZmY7XG4gICAgICB9XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgLy8gYW0yIGF2b2lkcyBhIGJpZyBtdWx0LWFuZC1leHRyYWN0IGNvbXBsZXRlbHkuXG4gICAgLy8gTWF4IGRpZ2l0IGJpdHMgc2hvdWxkIGJlIDw9IDMwIGJlY2F1c2Ugd2UgZG8gYml0d2lzZSBvcHNcbiAgICAvLyBvbiB2YWx1ZXMgdXAgdG8gMipoZHZhbHVlXjItaGR2YWx1ZS0xICg8IDJeMzEpXG4gICAgZnVuY3Rpb24gYW0yKGkseCx3LGosYyxuKSB7XG4gICAgICB2YXIgeGwgPSB4JjB4N2ZmZiwgeGggPSB4Pj4xNTtcbiAgICAgIHdoaWxlKC0tbiA+PSAwKSB7XG4gICAgICAgIHZhciBsID0gdGhpc1tpXSYweDdmZmY7XG4gICAgICAgIHZhciBoID0gdGhpc1tpKytdPj4xNTtcbiAgICAgICAgdmFyIG0gPSB4aCpsK2gqeGw7XG4gICAgICAgIGwgPSB4bCpsKygobSYweDdmZmYpPDwxNSkrd1tqXSsoYyYweDNmZmZmZmZmKTtcbiAgICAgICAgYyA9IChsPj4+MzApKyhtPj4+MTUpK3hoKmgrKGM+Pj4zMCk7XG4gICAgICAgIHdbaisrXSA9IGwmMHgzZmZmZmZmZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICAvLyBBbHRlcm5hdGVseSwgc2V0IG1heCBkaWdpdCBiaXRzIHRvIDI4IHNpbmNlIHNvbWVcbiAgICAvLyBicm93c2VycyBzbG93IGRvd24gd2hlbiBkZWFsaW5nIHdpdGggMzItYml0IG51bWJlcnMuXG4gICAgZnVuY3Rpb24gYW0zKGkseCx3LGosYyxuKSB7XG4gICAgICB2YXIgeGwgPSB4JjB4M2ZmZiwgeGggPSB4Pj4xNDtcbiAgICAgIHdoaWxlKC0tbiA+PSAwKSB7XG4gICAgICAgIHZhciBsID0gdGhpc1tpXSYweDNmZmY7XG4gICAgICAgIHZhciBoID0gdGhpc1tpKytdPj4xNDtcbiAgICAgICAgdmFyIG0gPSB4aCpsK2gqeGw7XG4gICAgICAgIGwgPSB4bCpsKygobSYweDNmZmYpPDwxNCkrd1tqXStjO1xuICAgICAgICBjID0gKGw+PjI4KSsobT4+MTQpK3hoKmg7XG4gICAgICAgIHdbaisrXSA9IGwmMHhmZmZmZmZmO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIHZhciBpbkJyb3dzZXIgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xuICAgIGlmKGluQnJvd3NlciAmJiBqX2xtICYmIChuYXZpZ2F0b3IuYXBwTmFtZSA9PSBcIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlclwiKSkge1xuICAgICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYW0gPSBhbTI7XG4gICAgICBkYml0cyA9IDMwO1xuICAgIH1cbiAgICBlbHNlIGlmKGluQnJvd3NlciAmJiBqX2xtICYmIChuYXZpZ2F0b3IuYXBwTmFtZSAhPSBcIk5ldHNjYXBlXCIpKSB7XG4gICAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbSA9IGFtMTtcbiAgICAgIGRiaXRzID0gMjY7XG4gICAgfVxuICAgIGVsc2UgeyAvLyBNb3ppbGxhL05ldHNjYXBlIHNlZW1zIHRvIHByZWZlciBhbTNcbiAgICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFtID0gYW0zO1xuICAgICAgZGJpdHMgPSAyODtcbiAgICB9XG5cbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5EQiA9IGRiaXRzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkRNID0gKCgxPDxkYml0cyktMSk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuRFYgPSAoMTw8ZGJpdHMpO1xuXG4gICAgdmFyIEJJX0ZQID0gNTI7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuRlYgPSBNYXRoLnBvdygyLEJJX0ZQKTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5GMSA9IEJJX0ZQLWRiaXRzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkYyID0gMipkYml0cy1CSV9GUDtcblxuICAgIC8vIERpZ2l0IGNvbnZlcnNpb25zXG4gICAgdmFyIEJJX1JNID0gXCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcbiAgICB2YXIgQklfUkMgPSBuZXcgQXJyYXkoKTtcbiAgICB2YXIgcnIsdnY7XG4gICAgcnIgPSBcIjBcIi5jaGFyQ29kZUF0KDApO1xuICAgIGZvcih2diA9IDA7IHZ2IDw9IDk7ICsrdnYpIEJJX1JDW3JyKytdID0gdnY7XG4gICAgcnIgPSBcImFcIi5jaGFyQ29kZUF0KDApO1xuICAgIGZvcih2diA9IDEwOyB2diA8IDM2OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2O1xuICAgIHJyID0gXCJBXCIuY2hhckNvZGVBdCgwKTtcbiAgICBmb3IodnYgPSAxMDsgdnYgPCAzNjsgKyt2dikgQklfUkNbcnIrK10gPSB2djtcblxuICAgIGZ1bmN0aW9uIGludDJjaGFyKG4pIHsgcmV0dXJuIEJJX1JNLmNoYXJBdChuKTsgfVxuICAgIGZ1bmN0aW9uIGludEF0KHMsaSkge1xuICAgICAgdmFyIGMgPSBCSV9SQ1tzLmNoYXJDb2RlQXQoaSldO1xuICAgICAgcmV0dXJuIChjPT1udWxsKT8tMTpjO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGNvcHkgdGhpcyB0byByXG4gICAgZnVuY3Rpb24gYm5wQ29weVRvKHIpIHtcbiAgICAgIGZvcih2YXIgaSA9IHRoaXMudC0xOyBpID49IDA7IC0taSkgcltpXSA9IHRoaXNbaV07XG4gICAgICByLnQgPSB0aGlzLnQ7XG4gICAgICByLnMgPSB0aGlzLnM7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgc2V0IGZyb20gaW50ZWdlciB2YWx1ZSB4LCAtRFYgPD0geCA8IERWXG4gICAgZnVuY3Rpb24gYm5wRnJvbUludCh4KSB7XG4gICAgICB0aGlzLnQgPSAxO1xuICAgICAgdGhpcy5zID0gKHg8MCk/LTE6MDtcbiAgICAgIGlmKHggPiAwKSB0aGlzWzBdID0geDtcbiAgICAgIGVsc2UgaWYoeCA8IC0xKSB0aGlzWzBdID0geCt0aGlzLkRWO1xuICAgICAgZWxzZSB0aGlzLnQgPSAwO1xuICAgIH1cblxuICAgIC8vIHJldHVybiBiaWdpbnQgaW5pdGlhbGl6ZWQgdG8gdmFsdWVcbiAgICBmdW5jdGlvbiBuYnYoaSkgeyB2YXIgciA9IG5iaSgpOyByLmZyb21JbnQoaSk7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBzZXQgZnJvbSBzdHJpbmcgYW5kIHJhZGl4XG4gICAgZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhzLGIpIHtcbiAgICAgIHZhciBrO1xuICAgICAgaWYoYiA9PSAxNikgayA9IDQ7XG4gICAgICBlbHNlIGlmKGIgPT0gOCkgayA9IDM7XG4gICAgICBlbHNlIGlmKGIgPT0gMjU2KSBrID0gODsgLy8gYnl0ZSBhcnJheVxuICAgICAgZWxzZSBpZihiID09IDIpIGsgPSAxO1xuICAgICAgZWxzZSBpZihiID09IDMyKSBrID0gNTtcbiAgICAgIGVsc2UgaWYoYiA9PSA0KSBrID0gMjtcbiAgICAgIGVsc2UgeyB0aGlzLmZyb21SYWRpeChzLGIpOyByZXR1cm47IH1cbiAgICAgIHRoaXMudCA9IDA7XG4gICAgICB0aGlzLnMgPSAwO1xuICAgICAgdmFyIGkgPSBzLmxlbmd0aCwgbWkgPSBmYWxzZSwgc2ggPSAwO1xuICAgICAgd2hpbGUoLS1pID49IDApIHtcbiAgICAgICAgdmFyIHggPSAoaz09OCk/c1tpXSYweGZmOmludEF0KHMsaSk7XG4gICAgICAgIGlmKHggPCAwKSB7XG4gICAgICAgICAgaWYocy5jaGFyQXQoaSkgPT0gXCItXCIpIG1pID0gdHJ1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBtaSA9IGZhbHNlO1xuICAgICAgICBpZihzaCA9PSAwKVxuICAgICAgICAgIHRoaXNbdGhpcy50KytdID0geDtcbiAgICAgICAgZWxzZSBpZihzaCtrID4gdGhpcy5EQikge1xuICAgICAgICAgIHRoaXNbdGhpcy50LTFdIHw9ICh4JigoMTw8KHRoaXMuREItc2gpKS0xKSk8PHNoO1xuICAgICAgICAgIHRoaXNbdGhpcy50KytdID0gKHg+Pih0aGlzLkRCLXNoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXNbdGhpcy50LTFdIHw9IHg8PHNoO1xuICAgICAgICBzaCArPSBrO1xuICAgICAgICBpZihzaCA+PSB0aGlzLkRCKSBzaCAtPSB0aGlzLkRCO1xuICAgICAgfVxuICAgICAgaWYoayA9PSA4ICYmIChzWzBdJjB4ODApICE9IDApIHtcbiAgICAgICAgdGhpcy5zID0gLTE7XG4gICAgICAgIGlmKHNoID4gMCkgdGhpc1t0aGlzLnQtMV0gfD0gKCgxPDwodGhpcy5EQi1zaCkpLTEpPDxzaDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xhbXAoKTtcbiAgICAgIGlmKG1pKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyx0aGlzKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBjbGFtcCBvZmYgZXhjZXNzIGhpZ2ggd29yZHNcbiAgICBmdW5jdGlvbiBibnBDbGFtcCgpIHtcbiAgICAgIHZhciBjID0gdGhpcy5zJnRoaXMuRE07XG4gICAgICB3aGlsZSh0aGlzLnQgPiAwICYmIHRoaXNbdGhpcy50LTFdID09IGMpIC0tdGhpcy50O1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gZ2l2ZW4gcmFkaXhcbiAgICBmdW5jdGlvbiBiblRvU3RyaW5nKGIpIHtcbiAgICAgIGlmKHRoaXMucyA8IDApIHJldHVybiBcIi1cIit0aGlzLm5lZ2F0ZSgpLnRvU3RyaW5nKGIpO1xuICAgICAgdmFyIGs7XG4gICAgICBpZihiID09IDE2KSBrID0gNDtcbiAgICAgIGVsc2UgaWYoYiA9PSA4KSBrID0gMztcbiAgICAgIGVsc2UgaWYoYiA9PSAyKSBrID0gMTtcbiAgICAgIGVsc2UgaWYoYiA9PSAzMikgayA9IDU7XG4gICAgICBlbHNlIGlmKGIgPT0gNCkgayA9IDI7XG4gICAgICBlbHNlIHJldHVybiB0aGlzLnRvUmFkaXgoYik7XG4gICAgICB2YXIga20gPSAoMTw8ayktMSwgZCwgbSA9IGZhbHNlLCByID0gXCJcIiwgaSA9IHRoaXMudDtcbiAgICAgIHZhciBwID0gdGhpcy5EQi0oaSp0aGlzLkRCKSVrO1xuICAgICAgaWYoaS0tID4gMCkge1xuICAgICAgICBpZihwIDwgdGhpcy5EQiAmJiAoZCA9IHRoaXNbaV0+PnApID4gMCkgeyBtID0gdHJ1ZTsgciA9IGludDJjaGFyKGQpOyB9XG4gICAgICAgIHdoaWxlKGkgPj0gMCkge1xuICAgICAgICAgIGlmKHAgPCBrKSB7XG4gICAgICAgICAgICBkID0gKHRoaXNbaV0mKCgxPDxwKS0xKSk8PChrLXApO1xuICAgICAgICAgICAgZCB8PSB0aGlzWy0taV0+PihwKz10aGlzLkRCLWspO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGQgPSAodGhpc1tpXT4+KHAtPWspKSZrbTtcbiAgICAgICAgICAgIGlmKHAgPD0gMCkgeyBwICs9IHRoaXMuREI7IC0taTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkID4gMCkgbSA9IHRydWU7XG4gICAgICAgICAgaWYobSkgciArPSBpbnQyY2hhcihkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG0/cjpcIjBcIjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSAtdGhpc1xuICAgIGZ1bmN0aW9uIGJuTmVnYXRlKCkgeyB2YXIgciA9IG5iaSgpOyBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHx0aGlzfFxuICAgIGZ1bmN0aW9uIGJuQWJzKCkgeyByZXR1cm4gKHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXM7IH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiArIGlmIHRoaXMgPiBhLCAtIGlmIHRoaXMgPCBhLCAwIGlmIGVxdWFsXG4gICAgZnVuY3Rpb24gYm5Db21wYXJlVG8oYSkge1xuICAgICAgdmFyIHIgPSB0aGlzLnMtYS5zO1xuICAgICAgaWYociAhPSAwKSByZXR1cm4gcjtcbiAgICAgIHZhciBpID0gdGhpcy50O1xuICAgICAgciA9IGktYS50O1xuICAgICAgaWYociAhPSAwKSByZXR1cm4gKHRoaXMuczwwKT8tcjpyO1xuICAgICAgd2hpbGUoLS1pID49IDApIGlmKChyPXRoaXNbaV0tYVtpXSkgIT0gMCkgcmV0dXJuIHI7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGJpdCBsZW5ndGggb2YgdGhlIGludGVnZXIgeFxuICAgIGZ1bmN0aW9uIG5iaXRzKHgpIHtcbiAgICAgIHZhciByID0gMSwgdDtcbiAgICAgIGlmKCh0PXg+Pj4xNikgIT0gMCkgeyB4ID0gdDsgciArPSAxNjsgfVxuICAgICAgaWYoKHQ9eD4+OCkgIT0gMCkgeyB4ID0gdDsgciArPSA4OyB9XG4gICAgICBpZigodD14Pj40KSAhPSAwKSB7IHggPSB0OyByICs9IDQ7IH1cbiAgICAgIGlmKCh0PXg+PjIpICE9IDApIHsgeCA9IHQ7IHIgKz0gMjsgfVxuICAgICAgaWYoKHQ9eD4+MSkgIT0gMCkgeyB4ID0gdDsgciArPSAxOyB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIGluIFwidGhpc1wiXG4gICAgZnVuY3Rpb24gYm5CaXRMZW5ndGgoKSB7XG4gICAgICBpZih0aGlzLnQgPD0gMCkgcmV0dXJuIDA7XG4gICAgICByZXR1cm4gdGhpcy5EQioodGhpcy50LTEpK25iaXRzKHRoaXNbdGhpcy50LTFdXih0aGlzLnMmdGhpcy5ETSkpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIDw8IG4qREJcbiAgICBmdW5jdGlvbiBibnBETFNoaWZ0VG8obixyKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGZvcihpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSByW2krbl0gPSB0aGlzW2ldO1xuICAgICAgZm9yKGkgPSBuLTE7IGkgPj0gMDsgLS1pKSByW2ldID0gMDtcbiAgICAgIHIudCA9IHRoaXMudCtuO1xuICAgICAgci5zID0gdGhpcy5zO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzID4+IG4qREJcbiAgICBmdW5jdGlvbiBibnBEUlNoaWZ0VG8obixyKSB7XG4gICAgICBmb3IodmFyIGkgPSBuOyBpIDwgdGhpcy50OyArK2kpIHJbaS1uXSA9IHRoaXNbaV07XG4gICAgICByLnQgPSBNYXRoLm1heCh0aGlzLnQtbiwwKTtcbiAgICAgIHIucyA9IHRoaXMucztcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyA8PCBuXG4gICAgZnVuY3Rpb24gYm5wTFNoaWZ0VG8obixyKSB7XG4gICAgICB2YXIgYnMgPSBuJXRoaXMuREI7XG4gICAgICB2YXIgY2JzID0gdGhpcy5EQi1icztcbiAgICAgIHZhciBibSA9ICgxPDxjYnMpLTE7XG4gICAgICB2YXIgZHMgPSBNYXRoLmZsb29yKG4vdGhpcy5EQiksIGMgPSAodGhpcy5zPDxicykmdGhpcy5ETSwgaTtcbiAgICAgIGZvcihpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHJbaStkcysxXSA9ICh0aGlzW2ldPj5jYnMpfGM7XG4gICAgICAgIGMgPSAodGhpc1tpXSZibSk8PGJzO1xuICAgICAgfVxuICAgICAgZm9yKGkgPSBkcy0xOyBpID49IDA7IC0taSkgcltpXSA9IDA7XG4gICAgICByW2RzXSA9IGM7XG4gICAgICByLnQgPSB0aGlzLnQrZHMrMTtcbiAgICAgIHIucyA9IHRoaXMucztcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyA+PiBuXG4gICAgZnVuY3Rpb24gYm5wUlNoaWZ0VG8obixyKSB7XG4gICAgICByLnMgPSB0aGlzLnM7XG4gICAgICB2YXIgZHMgPSBNYXRoLmZsb29yKG4vdGhpcy5EQik7XG4gICAgICBpZihkcyA+PSB0aGlzLnQpIHsgci50ID0gMDsgcmV0dXJuOyB9XG4gICAgICB2YXIgYnMgPSBuJXRoaXMuREI7XG4gICAgICB2YXIgY2JzID0gdGhpcy5EQi1icztcbiAgICAgIHZhciBibSA9ICgxPDxicyktMTtcbiAgICAgIHJbMF0gPSB0aGlzW2RzXT4+YnM7XG4gICAgICBmb3IodmFyIGkgPSBkcysxOyBpIDwgdGhpcy50OyArK2kpIHtcbiAgICAgICAgcltpLWRzLTFdIHw9ICh0aGlzW2ldJmJtKTw8Y2JzO1xuICAgICAgICByW2ktZHNdID0gdGhpc1tpXT4+YnM7XG4gICAgICB9XG4gICAgICBpZihicyA+IDApIHJbdGhpcy50LWRzLTFdIHw9ICh0aGlzLnMmYm0pPDxjYnM7XG4gICAgICByLnQgPSB0aGlzLnQtZHM7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgLSBhXG4gICAgZnVuY3Rpb24gYm5wU3ViVG8oYSxyKSB7XG4gICAgICB2YXIgaSA9IDAsIGMgPSAwLCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7XG4gICAgICB3aGlsZShpIDwgbSkge1xuICAgICAgICBjICs9IHRoaXNbaV0tYVtpXTtcbiAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgfVxuICAgICAgaWYoYS50IDwgdGhpcy50KSB7XG4gICAgICAgIGMgLT0gYS5zO1xuICAgICAgICB3aGlsZShpIDwgdGhpcy50KSB7XG4gICAgICAgICAgYyArPSB0aGlzW2ldO1xuICAgICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgICB9XG4gICAgICAgIGMgKz0gdGhpcy5zO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGMgKz0gdGhpcy5zO1xuICAgICAgICB3aGlsZShpIDwgYS50KSB7XG4gICAgICAgICAgYyAtPSBhW2ldO1xuICAgICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgICB9XG4gICAgICAgIGMgLT0gYS5zO1xuICAgICAgfVxuICAgICAgci5zID0gKGM8MCk/LTE6MDtcbiAgICAgIGlmKGMgPCAtMSkgcltpKytdID0gdGhpcy5EVitjO1xuICAgICAgZWxzZSBpZihjID4gMCkgcltpKytdID0gYztcbiAgICAgIHIudCA9IGk7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgKiBhLCByICE9IHRoaXMsYSAoSEFDIDE0LjEyKVxuICAgIC8vIFwidGhpc1wiIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG9uZSBpZiBhcHByb3ByaWF0ZS5cbiAgICBmdW5jdGlvbiBibnBNdWx0aXBseVRvKGEscikge1xuICAgICAgdmFyIHggPSB0aGlzLmFicygpLCB5ID0gYS5hYnMoKTtcbiAgICAgIHZhciBpID0geC50O1xuICAgICAgci50ID0gaSt5LnQ7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkgcltpXSA9IDA7XG4gICAgICBmb3IoaSA9IDA7IGkgPCB5LnQ7ICsraSkgcltpK3gudF0gPSB4LmFtKDAseVtpXSxyLGksMCx4LnQpO1xuICAgICAgci5zID0gMDtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICAgIGlmKHRoaXMucyAhPSBhLnMpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyhyLHIpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzXjIsIHIgIT0gdGhpcyAoSEFDIDE0LjE2KVxuICAgIGZ1bmN0aW9uIGJucFNxdWFyZVRvKHIpIHtcbiAgICAgIHZhciB4ID0gdGhpcy5hYnMoKTtcbiAgICAgIHZhciBpID0gci50ID0gMip4LnQ7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkgcltpXSA9IDA7XG4gICAgICBmb3IoaSA9IDA7IGkgPCB4LnQtMTsgKytpKSB7XG4gICAgICAgIHZhciBjID0geC5hbShpLHhbaV0sciwyKmksMCwxKTtcbiAgICAgICAgaWYoKHJbaSt4LnRdKz14LmFtKGkrMSwyKnhbaV0sciwyKmkrMSxjLHgudC1pLTEpKSA+PSB4LkRWKSB7XG4gICAgICAgICAgcltpK3gudF0gLT0geC5EVjtcbiAgICAgICAgICByW2kreC50KzFdID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoci50ID4gMCkgcltyLnQtMV0gKz0geC5hbShpLHhbaV0sciwyKmksMCwxKTtcbiAgICAgIHIucyA9IDA7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgZGl2aWRlIHRoaXMgYnkgbSwgcXVvdGllbnQgYW5kIHJlbWFpbmRlciB0byBxLCByIChIQUMgMTQuMjApXG4gICAgLy8gciAhPSBxLCB0aGlzICE9IG0uICBxIG9yIHIgbWF5IGJlIG51bGwuXG4gICAgZnVuY3Rpb24gYm5wRGl2UmVtVG8obSxxLHIpIHtcbiAgICAgIHZhciBwbSA9IG0uYWJzKCk7XG4gICAgICBpZihwbS50IDw9IDApIHJldHVybjtcbiAgICAgIHZhciBwdCA9IHRoaXMuYWJzKCk7XG4gICAgICBpZihwdC50IDwgcG0udCkge1xuICAgICAgICBpZihxICE9IG51bGwpIHEuZnJvbUludCgwKTtcbiAgICAgICAgaWYociAhPSBudWxsKSB0aGlzLmNvcHlUbyhyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYociA9PSBudWxsKSByID0gbmJpKCk7XG4gICAgICB2YXIgeSA9IG5iaSgpLCB0cyA9IHRoaXMucywgbXMgPSBtLnM7XG4gICAgICB2YXIgbnNoID0gdGhpcy5EQi1uYml0cyhwbVtwbS50LTFdKTsgICAvLyBub3JtYWxpemUgbW9kdWx1c1xuICAgICAgaWYobnNoID4gMCkgeyBwbS5sU2hpZnRUbyhuc2gseSk7IHB0LmxTaGlmdFRvKG5zaCxyKTsgfVxuICAgICAgZWxzZSB7IHBtLmNvcHlUbyh5KTsgcHQuY29weVRvKHIpOyB9XG4gICAgICB2YXIgeXMgPSB5LnQ7XG4gICAgICB2YXIgeTAgPSB5W3lzLTFdO1xuICAgICAgaWYoeTAgPT0gMCkgcmV0dXJuO1xuICAgICAgdmFyIHl0ID0geTAqKDE8PHRoaXMuRjEpKygoeXM+MSk/eVt5cy0yXT4+dGhpcy5GMjowKTtcbiAgICAgIHZhciBkMSA9IHRoaXMuRlYveXQsIGQyID0gKDE8PHRoaXMuRjEpL3l0LCBlID0gMTw8dGhpcy5GMjtcbiAgICAgIHZhciBpID0gci50LCBqID0gaS15cywgdCA9IChxPT1udWxsKT9uYmkoKTpxO1xuICAgICAgeS5kbFNoaWZ0VG8oaix0KTtcbiAgICAgIGlmKHIuY29tcGFyZVRvKHQpID49IDApIHtcbiAgICAgICAgcltyLnQrK10gPSAxO1xuICAgICAgICByLnN1YlRvKHQscik7XG4gICAgICB9XG4gICAgICBCaWdJbnRlZ2VyLk9ORS5kbFNoaWZ0VG8oeXMsdCk7XG4gICAgICB0LnN1YlRvKHkseSk7ICAvLyBcIm5lZ2F0aXZlXCIgeSBzbyB3ZSBjYW4gcmVwbGFjZSBzdWIgd2l0aCBhbSBsYXRlclxuICAgICAgd2hpbGUoeS50IDwgeXMpIHlbeS50KytdID0gMDtcbiAgICAgIHdoaWxlKC0taiA+PSAwKSB7XG4gICAgICAgIC8vIEVzdGltYXRlIHF1b3RpZW50IGRpZ2l0XG4gICAgICAgIHZhciBxZCA9IChyWy0taV09PXkwKT90aGlzLkRNOk1hdGguZmxvb3IocltpXSpkMSsocltpLTFdK2UpKmQyKTtcbiAgICAgICAgaWYoKHJbaV0rPXkuYW0oMCxxZCxyLGosMCx5cykpIDwgcWQpIHsgICAvLyBUcnkgaXQgb3V0XG4gICAgICAgICAgeS5kbFNoaWZ0VG8oaix0KTtcbiAgICAgICAgICByLnN1YlRvKHQscik7XG4gICAgICAgICAgd2hpbGUocltpXSA8IC0tcWQpIHIuc3ViVG8odCxyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYocSAhPSBudWxsKSB7XG4gICAgICAgIHIuZHJTaGlmdFRvKHlzLHEpO1xuICAgICAgICBpZih0cyAhPSBtcykgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHEscSk7XG4gICAgICB9XG4gICAgICByLnQgPSB5cztcbiAgICAgIHIuY2xhbXAoKTtcbiAgICAgIGlmKG5zaCA+IDApIHIuclNoaWZ0VG8obnNoLHIpOyAvLyBEZW5vcm1hbGl6ZSByZW1haW5kZXJcbiAgICAgIGlmKHRzIDwgMCkgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHIscik7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyBtb2QgYVxuICAgIGZ1bmN0aW9uIGJuTW9kKGEpIHtcbiAgICAgIHZhciByID0gbmJpKCk7XG4gICAgICB0aGlzLmFicygpLmRpdlJlbVRvKGEsbnVsbCxyKTtcbiAgICAgIGlmKHRoaXMucyA8IDAgJiYgci5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA+IDApIGEuc3ViVG8ocixyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIE1vZHVsYXIgcmVkdWN0aW9uIHVzaW5nIFwiY2xhc3NpY1wiIGFsZ29yaXRobVxuICAgIGZ1bmN0aW9uIENsYXNzaWMobSkgeyB0aGlzLm0gPSBtOyB9XG4gICAgZnVuY3Rpb24gY0NvbnZlcnQoeCkge1xuICAgICAgaWYoeC5zIDwgMCB8fCB4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHJldHVybiB4Lm1vZCh0aGlzLm0pO1xuICAgICAgZWxzZSByZXR1cm4geDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY1JldmVydCh4KSB7IHJldHVybiB4OyB9XG4gICAgZnVuY3Rpb24gY1JlZHVjZSh4KSB7IHguZGl2UmVtVG8odGhpcy5tLG51bGwseCk7IH1cbiAgICBmdW5jdGlvbiBjTXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9XG4gICAgZnVuY3Rpb24gY1NxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4gICAgQ2xhc3NpYy5wcm90b3R5cGUuY29udmVydCA9IGNDb252ZXJ0O1xuICAgIENsYXNzaWMucHJvdG90eXBlLnJldmVydCA9IGNSZXZlcnQ7XG4gICAgQ2xhc3NpYy5wcm90b3R5cGUucmVkdWNlID0gY1JlZHVjZTtcbiAgICBDbGFzc2ljLnByb3RvdHlwZS5tdWxUbyA9IGNNdWxUbztcbiAgICBDbGFzc2ljLnByb3RvdHlwZS5zcXJUbyA9IGNTcXJUbztcblxuICAgIC8vIChwcm90ZWN0ZWQpIHJldHVybiBcIi0xL3RoaXMgJSAyXkRCXCI7IHVzZWZ1bCBmb3IgTW9udC4gcmVkdWN0aW9uXG4gICAgLy8ganVzdGlmaWNhdGlvbjpcbiAgICAvLyAgICAgICAgIHh5ID09IDEgKG1vZCBtKVxuICAgIC8vICAgICAgICAgeHkgPSAgMStrbVxuICAgIC8vICAgeHkoMi14eSkgPSAoMStrbSkoMS1rbSlcbiAgICAvLyB4W3koMi14eSldID0gMS1rXjJtXjJcbiAgICAvLyB4W3koMi14eSldID09IDEgKG1vZCBtXjIpXG4gICAgLy8gaWYgeSBpcyAxL3ggbW9kIG0sIHRoZW4geSgyLXh5KSBpcyAxL3ggbW9kIG1eMlxuICAgIC8vIHNob3VsZCByZWR1Y2UgeCBhbmQgeSgyLXh5KSBieSBtXjIgYXQgZWFjaCBzdGVwIHRvIGtlZXAgc2l6ZSBib3VuZGVkLlxuICAgIC8vIEpTIG11bHRpcGx5IFwib3ZlcmZsb3dzXCIgZGlmZmVyZW50bHkgZnJvbSBDL0MrKywgc28gY2FyZSBpcyBuZWVkZWQgaGVyZS5cbiAgICBmdW5jdGlvbiBibnBJbnZEaWdpdCgpIHtcbiAgICAgIGlmKHRoaXMudCA8IDEpIHJldHVybiAwO1xuICAgICAgdmFyIHggPSB0aGlzWzBdO1xuICAgICAgaWYoKHgmMSkgPT0gMCkgcmV0dXJuIDA7XG4gICAgICB2YXIgeSA9IHgmMzsgICAgICAgLy8geSA9PSAxL3ggbW9kIDJeMlxuICAgICAgeSA9ICh5KigyLSh4JjB4ZikqeSkpJjB4ZjsgLy8geSA9PSAxL3ggbW9kIDJeNFxuICAgICAgeSA9ICh5KigyLSh4JjB4ZmYpKnkpKSYweGZmOyAgIC8vIHkgPT0gMS94IG1vZCAyXjhcbiAgICAgIHkgPSAoeSooMi0oKCh4JjB4ZmZmZikqeSkmMHhmZmZmKSkpJjB4ZmZmZjsgICAgLy8geSA9PSAxL3ggbW9kIDJeMTZcbiAgICAgIC8vIGxhc3Qgc3RlcCAtIGNhbGN1bGF0ZSBpbnZlcnNlIG1vZCBEViBkaXJlY3RseTtcbiAgICAgIC8vIGFzc3VtZXMgMTYgPCBEQiA8PSAzMiBhbmQgYXNzdW1lcyBhYmlsaXR5IHRvIGhhbmRsZSA0OC1iaXQgaW50c1xuICAgICAgeSA9ICh5KigyLXgqeSV0aGlzLkRWKSkldGhpcy5EVjsgICAgICAgLy8geSA9PSAxL3ggbW9kIDJeZGJpdHNcbiAgICAgIC8vIHdlIHJlYWxseSB3YW50IHRoZSBuZWdhdGl2ZSBpbnZlcnNlLCBhbmQgLURWIDwgeSA8IERWXG4gICAgICByZXR1cm4gKHk+MCk/dGhpcy5EVi15Oi15O1xuICAgIH1cblxuICAgIC8vIE1vbnRnb21lcnkgcmVkdWN0aW9uXG4gICAgZnVuY3Rpb24gTW9udGdvbWVyeShtKSB7XG4gICAgICB0aGlzLm0gPSBtO1xuICAgICAgdGhpcy5tcCA9IG0uaW52RGlnaXQoKTtcbiAgICAgIHRoaXMubXBsID0gdGhpcy5tcCYweDdmZmY7XG4gICAgICB0aGlzLm1waCA9IHRoaXMubXA+PjE1O1xuICAgICAgdGhpcy51bSA9ICgxPDwobS5EQi0xNSkpLTE7XG4gICAgICB0aGlzLm10MiA9IDIqbS50O1xuICAgIH1cblxuICAgIC8vIHhSIG1vZCBtXG4gICAgZnVuY3Rpb24gbW9udENvbnZlcnQoeCkge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIHguYWJzKCkuZGxTaGlmdFRvKHRoaXMubS50LHIpO1xuICAgICAgci5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxyKTtcbiAgICAgIGlmKHgucyA8IDAgJiYgci5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA+IDApIHRoaXMubS5zdWJUbyhyLHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8geC9SIG1vZCBtXG4gICAgZnVuY3Rpb24gbW9udFJldmVydCh4KSB7XG4gICAgICB2YXIgciA9IG5iaSgpO1xuICAgICAgeC5jb3B5VG8ocik7XG4gICAgICB0aGlzLnJlZHVjZShyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIHggPSB4L1IgbW9kIG0gKEhBQyAxNC4zMilcbiAgICBmdW5jdGlvbiBtb250UmVkdWNlKHgpIHtcbiAgICAgIHdoaWxlKHgudCA8PSB0aGlzLm10MikgLy8gcGFkIHggc28gYW0gaGFzIGVub3VnaCByb29tIGxhdGVyXG4gICAgICAgIHhbeC50KytdID0gMDtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm0udDsgKytpKSB7XG4gICAgICAgIC8vIGZhc3RlciB3YXkgb2YgY2FsY3VsYXRpbmcgdTAgPSB4W2ldKm1wIG1vZCBEVlxuICAgICAgICB2YXIgaiA9IHhbaV0mMHg3ZmZmO1xuICAgICAgICB2YXIgdTAgPSAoaip0aGlzLm1wbCsoKChqKnRoaXMubXBoKyh4W2ldPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJnguRE07XG4gICAgICAgIC8vIHVzZSBhbSB0byBjb21iaW5lIHRoZSBtdWx0aXBseS1zaGlmdC1hZGQgaW50byBvbmUgY2FsbFxuICAgICAgICBqID0gaSt0aGlzLm0udDtcbiAgICAgICAgeFtqXSArPSB0aGlzLm0uYW0oMCx1MCx4LGksMCx0aGlzLm0udCk7XG4gICAgICAgIC8vIHByb3BhZ2F0ZSBjYXJyeVxuICAgICAgICB3aGlsZSh4W2pdID49IHguRFYpIHsgeFtqXSAtPSB4LkRWOyB4Wysral0rKzsgfVxuICAgICAgfVxuICAgICAgeC5jbGFtcCgpO1xuICAgICAgeC5kclNoaWZ0VG8odGhpcy5tLnQseCk7XG4gICAgICBpZih4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHguc3ViVG8odGhpcy5tLHgpO1xuICAgIH1cblxuICAgIC8vIHIgPSBcInheMi9SIG1vZCBtXCI7IHggIT0gclxuICAgIGZ1bmN0aW9uIG1vbnRTcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuICAgIC8vIHIgPSBcInh5L1IgbW9kIG1cIjsgeCx5ICE9IHJcbiAgICBmdW5jdGlvbiBtb250TXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9XG5cbiAgICBNb250Z29tZXJ5LnByb3RvdHlwZS5jb252ZXJ0ID0gbW9udENvbnZlcnQ7XG4gICAgTW9udGdvbWVyeS5wcm90b3R5cGUucmV2ZXJ0ID0gbW9udFJldmVydDtcbiAgICBNb250Z29tZXJ5LnByb3RvdHlwZS5yZWR1Y2UgPSBtb250UmVkdWNlO1xuICAgIE1vbnRnb21lcnkucHJvdG90eXBlLm11bFRvID0gbW9udE11bFRvO1xuICAgIE1vbnRnb21lcnkucHJvdG90eXBlLnNxclRvID0gbW9udFNxclRvO1xuXG4gICAgLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZmYgdGhpcyBpcyBldmVuXG4gICAgZnVuY3Rpb24gYm5wSXNFdmVuKCkgeyByZXR1cm4gKCh0aGlzLnQ+MCk/KHRoaXNbMF0mMSk6dGhpcy5zKSA9PSAwOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0aGlzXmUsIGUgPCAyXjMyLCBkb2luZyBzcXIgYW5kIG11bCB3aXRoIFwiclwiIChIQUMgMTQuNzkpXG4gICAgZnVuY3Rpb24gYm5wRXhwKGUseikge1xuICAgICAgaWYoZSA+IDB4ZmZmZmZmZmYgfHwgZSA8IDEpIHJldHVybiBCaWdJbnRlZ2VyLk9ORTtcbiAgICAgIHZhciByID0gbmJpKCksIHIyID0gbmJpKCksIGcgPSB6LmNvbnZlcnQodGhpcyksIGkgPSBuYml0cyhlKS0xO1xuICAgICAgZy5jb3B5VG8ocik7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkge1xuICAgICAgICB6LnNxclRvKHIscjIpO1xuICAgICAgICBpZigoZSYoMTw8aSkpID4gMCkgei5tdWxUbyhyMixnLHIpO1xuICAgICAgICBlbHNlIHsgdmFyIHQgPSByOyByID0gcjI7IHIyID0gdDsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHoucmV2ZXJ0KHIpO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXNeZSAlIG0sIDAgPD0gZSA8IDJeMzJcbiAgICBmdW5jdGlvbiBibk1vZFBvd0ludChlLG0pIHtcbiAgICAgIHZhciB6O1xuICAgICAgaWYoZSA8IDI1NiB8fCBtLmlzRXZlbigpKSB6ID0gbmV3IENsYXNzaWMobSk7IGVsc2UgeiA9IG5ldyBNb250Z29tZXJ5KG0pO1xuICAgICAgcmV0dXJuIHRoaXMuZXhwKGUseik7XG4gICAgfVxuXG4gICAgLy8gcHJvdGVjdGVkXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY29weVRvID0gYm5wQ29weVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21JbnQgPSBibnBGcm9tSW50O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21TdHJpbmcgPSBibnBGcm9tU3RyaW5nO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNsYW1wID0gYm5wQ2xhbXA7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZGxTaGlmdFRvID0gYm5wRExTaGlmdFRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmRyU2hpZnRUbyA9IGJucERSU2hpZnRUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5sU2hpZnRUbyA9IGJucExTaGlmdFRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnJTaGlmdFRvID0gYm5wUlNoaWZ0VG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc3ViVG8gPSBibnBTdWJUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseVRvID0gYm5wTXVsdGlwbHlUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmVUbyA9IGJucFNxdWFyZVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmRpdlJlbVRvID0gYm5wRGl2UmVtVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuaW52RGlnaXQgPSBibnBJbnZEaWdpdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5pc0V2ZW4gPSBibnBJc0V2ZW47XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZXhwID0gYm5wRXhwO1xuXG4gICAgLy8gcHVibGljXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUudG9TdHJpbmcgPSBiblRvU3RyaW5nO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm5lZ2F0ZSA9IGJuTmVnYXRlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFicyA9IGJuQWJzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNvbXBhcmVUbyA9IGJuQ29tcGFyZVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJpdExlbmd0aCA9IGJuQml0TGVuZ3RoO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1vZCA9IGJuTW9kO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvd0ludCA9IGJuTW9kUG93SW50O1xuXG4gICAgLy8gXCJjb25zdGFudHNcIlxuICAgIEJpZ0ludGVnZXIuWkVSTyA9IG5idigwKTtcbiAgICBCaWdJbnRlZ2VyLk9ORSA9IG5idigxKTtcblxuICAgIC8vIENvcHlyaWdodCAoYykgMjAwNS0yMDA5ICBUb20gV3VcbiAgICAvLyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAgIC8vIFNlZSBcIkxJQ0VOU0VcIiBmb3IgZGV0YWlscy5cblxuICAgIC8vIEV4dGVuZGVkIEphdmFTY3JpcHQgQk4gZnVuY3Rpb25zLCByZXF1aXJlZCBmb3IgUlNBIHByaXZhdGUgb3BzLlxuXG4gICAgLy8gVmVyc2lvbiAxLjE6IG5ldyBCaWdJbnRlZ2VyKFwiMFwiLCAxMCkgcmV0dXJucyBcInByb3BlclwiIHplcm9cbiAgICAvLyBWZXJzaW9uIDEuMjogc3F1YXJlKCkgQVBJLCBpc1Byb2JhYmxlUHJpbWUgZml4XG5cbiAgICAvLyAocHVibGljKVxuICAgIGZ1bmN0aW9uIGJuQ2xvbmUoKSB7IHZhciByID0gbmJpKCk7IHRoaXMuY29weVRvKHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHZhbHVlIGFzIGludGVnZXJcbiAgICBmdW5jdGlvbiBibkludFZhbHVlKCkge1xuICAgICAgaWYodGhpcy5zIDwgMCkge1xuICAgICAgICBpZih0aGlzLnQgPT0gMSkgcmV0dXJuIHRoaXNbMF0tdGhpcy5EVjtcbiAgICAgICAgZWxzZSBpZih0aGlzLnQgPT0gMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgZWxzZSBpZih0aGlzLnQgPT0gMSkgcmV0dXJuIHRoaXNbMF07XG4gICAgICBlbHNlIGlmKHRoaXMudCA9PSAwKSByZXR1cm4gMDtcbiAgICAgIC8vIGFzc3VtZXMgMTYgPCBEQiA8IDMyXG4gICAgICByZXR1cm4gKCh0aGlzWzFdJigoMTw8KDMyLXRoaXMuREIpKS0xKSk8PHRoaXMuREIpfHRoaXNbMF07XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHZhbHVlIGFzIGJ5dGVcbiAgICBmdW5jdGlvbiBibkJ5dGVWYWx1ZSgpIHsgcmV0dXJuICh0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MjQpPj4yNDsgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHZhbHVlIGFzIHNob3J0IChhc3N1bWVzIERCPj0xNilcbiAgICBmdW5jdGlvbiBiblNob3J0VmFsdWUoKSB7IHJldHVybiAodGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDE2KT4+MTY7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHJldHVybiB4IHMudC4gcl54IDwgRFZcbiAgICBmdW5jdGlvbiBibnBDaHVua1NpemUocikgeyByZXR1cm4gTWF0aC5mbG9vcihNYXRoLkxOMip0aGlzLkRCL01hdGgubG9nKHIpKTsgfVxuXG4gICAgLy8gKHB1YmxpYykgMCBpZiB0aGlzID09IDAsIDEgaWYgdGhpcyA+IDBcbiAgICBmdW5jdGlvbiBiblNpZ051bSgpIHtcbiAgICAgIGlmKHRoaXMucyA8IDApIHJldHVybiAtMTtcbiAgICAgIGVsc2UgaWYodGhpcy50IDw9IDAgfHwgKHRoaXMudCA9PSAxICYmIHRoaXNbMF0gPD0gMCkpIHJldHVybiAwO1xuICAgICAgZWxzZSByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBjb252ZXJ0IHRvIHJhZGl4IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGJucFRvUmFkaXgoYikge1xuICAgICAgaWYoYiA9PSBudWxsKSBiID0gMTA7XG4gICAgICBpZih0aGlzLnNpZ251bSgpID09IDAgfHwgYiA8IDIgfHwgYiA+IDM2KSByZXR1cm4gXCIwXCI7XG4gICAgICB2YXIgY3MgPSB0aGlzLmNodW5rU2l6ZShiKTtcbiAgICAgIHZhciBhID0gTWF0aC5wb3coYixjcyk7XG4gICAgICB2YXIgZCA9IG5idihhKSwgeSA9IG5iaSgpLCB6ID0gbmJpKCksIHIgPSBcIlwiO1xuICAgICAgdGhpcy5kaXZSZW1UbyhkLHkseik7XG4gICAgICB3aGlsZSh5LnNpZ251bSgpID4gMCkge1xuICAgICAgICByID0gKGErei5pbnRWYWx1ZSgpKS50b1N0cmluZyhiKS5zdWJzdHIoMSkgKyByO1xuICAgICAgICB5LmRpdlJlbVRvKGQseSx6KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB6LmludFZhbHVlKCkudG9TdHJpbmcoYikgKyByO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGNvbnZlcnQgZnJvbSByYWRpeCBzdHJpbmdcbiAgICBmdW5jdGlvbiBibnBGcm9tUmFkaXgocyxiKSB7XG4gICAgICB0aGlzLmZyb21JbnQoMCk7XG4gICAgICBpZihiID09IG51bGwpIGIgPSAxMDtcbiAgICAgIHZhciBjcyA9IHRoaXMuY2h1bmtTaXplKGIpO1xuICAgICAgdmFyIGQgPSBNYXRoLnBvdyhiLGNzKSwgbWkgPSBmYWxzZSwgaiA9IDAsIHcgPSAwO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHggPSBpbnRBdChzLGkpO1xuICAgICAgICBpZih4IDwgMCkge1xuICAgICAgICAgIGlmKHMuY2hhckF0KGkpID09IFwiLVwiICYmIHRoaXMuc2lnbnVtKCkgPT0gMCkgbWkgPSB0cnVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHcgPSBiKncreDtcbiAgICAgICAgaWYoKytqID49IGNzKSB7XG4gICAgICAgICAgdGhpcy5kTXVsdGlwbHkoZCk7XG4gICAgICAgICAgdGhpcy5kQWRkT2Zmc2V0KHcsMCk7XG4gICAgICAgICAgaiA9IDA7XG4gICAgICAgICAgdyA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKGogPiAwKSB7XG4gICAgICAgIHRoaXMuZE11bHRpcGx5KE1hdGgucG93KGIsaikpO1xuICAgICAgICB0aGlzLmRBZGRPZmZzZXQodywwKTtcbiAgICAgIH1cbiAgICAgIGlmKG1pKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyx0aGlzKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBhbHRlcm5hdGUgY29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBibnBGcm9tTnVtYmVyKGEsYixjKSB7XG4gICAgICBpZihcIm51bWJlclwiID09IHR5cGVvZiBiKSB7XG4gICAgICAgIC8vIG5ldyBCaWdJbnRlZ2VyKGludCxpbnQsUk5HKVxuICAgICAgICBpZihhIDwgMikgdGhpcy5mcm9tSW50KDEpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZyb21OdW1iZXIoYSxjKTtcbiAgICAgICAgICBpZighdGhpcy50ZXN0Qml0KGEtMSkpXHQvLyBmb3JjZSBNU0Igc2V0XG4gICAgICAgICAgICB0aGlzLmJpdHdpc2VUbyhCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQoYS0xKSxvcF9vcix0aGlzKTtcbiAgICAgICAgICBpZih0aGlzLmlzRXZlbigpKSB0aGlzLmRBZGRPZmZzZXQoMSwwKTsgLy8gZm9yY2Ugb2RkXG4gICAgICAgICAgd2hpbGUoIXRoaXMuaXNQcm9iYWJsZVByaW1lKGIpKSB7XG4gICAgICAgICAgICB0aGlzLmRBZGRPZmZzZXQoMiwwKTtcbiAgICAgICAgICAgIGlmKHRoaXMuYml0TGVuZ3RoKCkgPiBhKSB0aGlzLnN1YlRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChhLTEpLHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIG5ldyBCaWdJbnRlZ2VyKGludCxSTkcpXG4gICAgICAgIHZhciB4ID0gbmV3IEFycmF5KCksIHQgPSBhJjc7XG4gICAgICAgIHgubGVuZ3RoID0gKGE+PjMpKzE7XG4gICAgICAgIGIubmV4dEJ5dGVzKHgpO1xuICAgICAgICBpZih0ID4gMCkgeFswXSAmPSAoKDE8PHQpLTEpOyBlbHNlIHhbMF0gPSAwO1xuICAgICAgICB0aGlzLmZyb21TdHJpbmcoeCwyNTYpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIGNvbnZlcnQgdG8gYmlnZW5kaWFuIGJ5dGUgYXJyYXlcbiAgICBmdW5jdGlvbiBiblRvQnl0ZUFycmF5KCkge1xuICAgICAgdmFyIGkgPSB0aGlzLnQsIHIgPSBuZXcgQXJyYXkoKTtcbiAgICAgIHJbMF0gPSB0aGlzLnM7XG4gICAgICB2YXIgcCA9IHRoaXMuREItKGkqdGhpcy5EQiklOCwgZCwgayA9IDA7XG4gICAgICBpZihpLS0gPiAwKSB7XG4gICAgICAgIGlmKHAgPCB0aGlzLkRCICYmIChkID0gdGhpc1tpXT4+cCkgIT0gKHRoaXMucyZ0aGlzLkRNKT4+cClcbiAgICAgICAgICByW2srK10gPSBkfCh0aGlzLnM8PCh0aGlzLkRCLXApKTtcbiAgICAgICAgd2hpbGUoaSA+PSAwKSB7XG4gICAgICAgICAgaWYocCA8IDgpIHtcbiAgICAgICAgICAgIGQgPSAodGhpc1tpXSYoKDE8PHApLTEpKTw8KDgtcCk7XG4gICAgICAgICAgICBkIHw9IHRoaXNbLS1pXT4+KHArPXRoaXMuREItOCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZCA9ICh0aGlzW2ldPj4ocC09OCkpJjB4ZmY7XG4gICAgICAgICAgICBpZihwIDw9IDApIHsgcCArPSB0aGlzLkRCOyAtLWk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoKGQmMHg4MCkgIT0gMCkgZCB8PSAtMjU2O1xuICAgICAgICAgIGlmKGsgPT0gMCAmJiAodGhpcy5zJjB4ODApICE9IChkJjB4ODApKSArK2s7XG4gICAgICAgICAgaWYoayA+IDAgfHwgZCAhPSB0aGlzLnMpIHJbaysrXSA9IGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJuRXF1YWxzKGEpIHsgcmV0dXJuKHRoaXMuY29tcGFyZVRvKGEpPT0wKTsgfVxuICAgIGZ1bmN0aW9uIGJuTWluKGEpIHsgcmV0dXJuKHRoaXMuY29tcGFyZVRvKGEpPDApP3RoaXM6YTsgfVxuICAgIGZ1bmN0aW9uIGJuTWF4KGEpIHsgcmV0dXJuKHRoaXMuY29tcGFyZVRvKGEpPjApP3RoaXM6YTsgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgb3AgYSAoYml0d2lzZSlcbiAgICBmdW5jdGlvbiBibnBCaXR3aXNlVG8oYSxvcCxyKSB7XG4gICAgICB2YXIgaSwgZiwgbSA9IE1hdGgubWluKGEudCx0aGlzLnQpO1xuICAgICAgZm9yKGkgPSAwOyBpIDwgbTsgKytpKSByW2ldID0gb3AodGhpc1tpXSxhW2ldKTtcbiAgICAgIGlmKGEudCA8IHRoaXMudCkge1xuICAgICAgICBmID0gYS5zJnRoaXMuRE07XG4gICAgICAgIGZvcihpID0gbTsgaSA8IHRoaXMudDsgKytpKSByW2ldID0gb3AodGhpc1tpXSxmKTtcbiAgICAgICAgci50ID0gdGhpcy50O1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGYgPSB0aGlzLnMmdGhpcy5ETTtcbiAgICAgICAgZm9yKGkgPSBtOyBpIDwgYS50OyArK2kpIHJbaV0gPSBvcChmLGFbaV0pO1xuICAgICAgICByLnQgPSBhLnQ7XG4gICAgICB9XG4gICAgICByLnMgPSBvcCh0aGlzLnMsYS5zKTtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzICYgYVxuICAgIGZ1bmN0aW9uIG9wX2FuZCh4LHkpIHsgcmV0dXJuIHgmeTsgfVxuICAgIGZ1bmN0aW9uIGJuQW5kKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3aXNlVG8oYSxvcF9hbmQscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIHwgYVxuICAgIGZ1bmN0aW9uIG9wX29yKHgseSkgeyByZXR1cm4geHx5OyB9XG4gICAgZnVuY3Rpb24gYm5PcihhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3Bfb3Iscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIF4gYVxuICAgIGZ1bmN0aW9uIG9wX3hvcih4LHkpIHsgcmV0dXJuIHheeTsgfVxuICAgIGZ1bmN0aW9uIGJuWG9yKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3aXNlVG8oYSxvcF94b3Iscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzICYgfmFcbiAgICBmdW5jdGlvbiBvcF9hbmRub3QoeCx5KSB7IHJldHVybiB4Jn55OyB9XG4gICAgZnVuY3Rpb24gYm5BbmROb3QoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX2FuZG5vdCxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIH50aGlzXG4gICAgZnVuY3Rpb24gYm5Ob3QoKSB7XG4gICAgICB2YXIgciA9IG5iaSgpO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMudDsgKytpKSByW2ldID0gdGhpcy5ETSZ+dGhpc1tpXTtcbiAgICAgIHIudCA9IHRoaXMudDtcbiAgICAgIHIucyA9IH50aGlzLnM7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIDw8IG5cbiAgICBmdW5jdGlvbiBiblNoaWZ0TGVmdChuKSB7XG4gICAgICB2YXIgciA9IG5iaSgpO1xuICAgICAgaWYobiA8IDApIHRoaXMuclNoaWZ0VG8oLW4scik7IGVsc2UgdGhpcy5sU2hpZnRUbyhuLHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyA+PiBuXG4gICAgZnVuY3Rpb24gYm5TaGlmdFJpZ2h0KG4pIHtcbiAgICAgIHZhciByID0gbmJpKCk7XG4gICAgICBpZihuIDwgMCkgdGhpcy5sU2hpZnRUbygtbixyKTsgZWxzZSB0aGlzLnJTaGlmdFRvKG4scik7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gaW5kZXggb2YgbG93ZXN0IDEtYml0IGluIHgsIHggPCAyXjMxXG4gICAgZnVuY3Rpb24gbGJpdCh4KSB7XG4gICAgICBpZih4ID09IDApIHJldHVybiAtMTtcbiAgICAgIHZhciByID0gMDtcbiAgICAgIGlmKCh4JjB4ZmZmZikgPT0gMCkgeyB4ID4+PSAxNjsgciArPSAxNjsgfVxuICAgICAgaWYoKHgmMHhmZikgPT0gMCkgeyB4ID4+PSA4OyByICs9IDg7IH1cbiAgICAgIGlmKCh4JjB4ZikgPT0gMCkgeyB4ID4+PSA0OyByICs9IDQ7IH1cbiAgICAgIGlmKCh4JjMpID09IDApIHsgeCA+Pj0gMjsgciArPSAyOyB9XG4gICAgICBpZigoeCYxKSA9PSAwKSArK3I7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm5zIGluZGV4IG9mIGxvd2VzdCAxLWJpdCAob3IgLTEgaWYgbm9uZSlcbiAgICBmdW5jdGlvbiBibkdldExvd2VzdFNldEJpdCgpIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnQ7ICsraSlcbiAgICAgICAgaWYodGhpc1tpXSAhPSAwKSByZXR1cm4gaSp0aGlzLkRCK2xiaXQodGhpc1tpXSk7XG4gICAgICBpZih0aGlzLnMgPCAwKSByZXR1cm4gdGhpcy50KnRoaXMuREI7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIG51bWJlciBvZiAxIGJpdHMgaW4geFxuICAgIGZ1bmN0aW9uIGNiaXQoeCkge1xuICAgICAgdmFyIHIgPSAwO1xuICAgICAgd2hpbGUoeCAhPSAwKSB7IHggJj0geC0xOyArK3I7IH1cbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiBudW1iZXIgb2Ygc2V0IGJpdHNcbiAgICBmdW5jdGlvbiBibkJpdENvdW50KCkge1xuICAgICAgdmFyIHIgPSAwLCB4ID0gdGhpcy5zJnRoaXMuRE07XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy50OyArK2kpIHIgKz0gY2JpdCh0aGlzW2ldXngpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdHJ1ZSBpZmYgbnRoIGJpdCBpcyBzZXRcbiAgICBmdW5jdGlvbiBiblRlc3RCaXQobikge1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKG4vdGhpcy5EQik7XG4gICAgICBpZihqID49IHRoaXMudCkgcmV0dXJuKHRoaXMucyE9MCk7XG4gICAgICByZXR1cm4oKHRoaXNbal0mKDE8PChuJXRoaXMuREIpKSkhPTApO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXMgb3AgKDE8PG4pXG4gICAgZnVuY3Rpb24gYm5wQ2hhbmdlQml0KG4sb3ApIHtcbiAgICAgIHZhciByID0gQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KG4pO1xuICAgICAgdGhpcy5iaXR3aXNlVG8ocixvcCxyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgfCAoMTw8bilcbiAgICBmdW5jdGlvbiBiblNldEJpdChuKSB7IHJldHVybiB0aGlzLmNoYW5nZUJpdChuLG9wX29yKTsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAmIH4oMTw8bilcbiAgICBmdW5jdGlvbiBibkNsZWFyQml0KG4pIHsgcmV0dXJuIHRoaXMuY2hhbmdlQml0KG4sb3BfYW5kbm90KTsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyBeICgxPDxuKVxuICAgIGZ1bmN0aW9uIGJuRmxpcEJpdChuKSB7IHJldHVybiB0aGlzLmNoYW5nZUJpdChuLG9wX3hvcik7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzICsgYVxuICAgIGZ1bmN0aW9uIGJucEFkZFRvKGEscikge1xuICAgICAgdmFyIGkgPSAwLCBjID0gMCwgbSA9IE1hdGgubWluKGEudCx0aGlzLnQpO1xuICAgICAgd2hpbGUoaSA8IG0pIHtcbiAgICAgICAgYyArPSB0aGlzW2ldK2FbaV07XG4gICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgYyA+Pj0gdGhpcy5EQjtcbiAgICAgIH1cbiAgICAgIGlmKGEudCA8IHRoaXMudCkge1xuICAgICAgICBjICs9IGEucztcbiAgICAgICAgd2hpbGUoaSA8IHRoaXMudCkge1xuICAgICAgICAgIGMgKz0gdGhpc1tpXTtcbiAgICAgICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICAgICAgYyA+Pj0gdGhpcy5EQjtcbiAgICAgICAgfVxuICAgICAgICBjICs9IHRoaXMucztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjICs9IHRoaXMucztcbiAgICAgICAgd2hpbGUoaSA8IGEudCkge1xuICAgICAgICAgIGMgKz0gYVtpXTtcbiAgICAgICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICAgICAgYyA+Pj0gdGhpcy5EQjtcbiAgICAgICAgfVxuICAgICAgICBjICs9IGEucztcbiAgICAgIH1cbiAgICAgIHIucyA9IChjPDApPy0xOjA7XG4gICAgICBpZihjID4gMCkgcltpKytdID0gYztcbiAgICAgIGVsc2UgaWYoYyA8IC0xKSByW2krK10gPSB0aGlzLkRWK2M7XG4gICAgICByLnQgPSBpO1xuICAgICAgci5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgKyBhXG4gICAgZnVuY3Rpb24gYm5BZGQoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmFkZFRvKGEscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIC0gYVxuICAgIGZ1bmN0aW9uIGJuU3VidHJhY3QoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLnN1YlRvKGEscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzICogYVxuICAgIGZ1bmN0aW9uIGJuTXVsdGlwbHkoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLm11bHRpcGx5VG8oYSxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXNeMlxuICAgIGZ1bmN0aW9uIGJuU3F1YXJlKCkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLnNxdWFyZVRvKHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAvIGFcbiAgICBmdW5jdGlvbiBibkRpdmlkZShhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuZGl2UmVtVG8oYSxyLG51bGwpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAlIGFcbiAgICBmdW5jdGlvbiBiblJlbWFpbmRlcihhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuZGl2UmVtVG8oYSxudWxsLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgW3RoaXMvYSx0aGlzJWFdXG4gICAgZnVuY3Rpb24gYm5EaXZpZGVBbmRSZW1haW5kZXIoYSkge1xuICAgICAgdmFyIHEgPSBuYmkoKSwgciA9IG5iaSgpO1xuICAgICAgdGhpcy5kaXZSZW1UbyhhLHEscik7XG4gICAgICByZXR1cm4gbmV3IEFycmF5KHEscik7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgdGhpcyAqPSBuLCB0aGlzID49IDAsIDEgPCBuIDwgRFZcbiAgICBmdW5jdGlvbiBibnBETXVsdGlwbHkobikge1xuICAgICAgdGhpc1t0aGlzLnRdID0gdGhpcy5hbSgwLG4tMSx0aGlzLDAsMCx0aGlzLnQpO1xuICAgICAgKyt0aGlzLnQ7XG4gICAgICB0aGlzLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgdGhpcyArPSBuIDw8IHcgd29yZHMsIHRoaXMgPj0gMFxuICAgIGZ1bmN0aW9uIGJucERBZGRPZmZzZXQobix3KSB7XG4gICAgICBpZihuID09IDApIHJldHVybjtcbiAgICAgIHdoaWxlKHRoaXMudCA8PSB3KSB0aGlzW3RoaXMudCsrXSA9IDA7XG4gICAgICB0aGlzW3ddICs9IG47XG4gICAgICB3aGlsZSh0aGlzW3ddID49IHRoaXMuRFYpIHtcbiAgICAgICAgdGhpc1t3XSAtPSB0aGlzLkRWO1xuICAgICAgICBpZigrK3cgPj0gdGhpcy50KSB0aGlzW3RoaXMudCsrXSA9IDA7XG4gICAgICAgICsrdGhpc1t3XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBIFwibnVsbFwiIHJlZHVjZXJcbiAgICBmdW5jdGlvbiBOdWxsRXhwKCkge31cbiAgICBmdW5jdGlvbiBuTm9wKHgpIHsgcmV0dXJuIHg7IH1cbiAgICBmdW5jdGlvbiBuTXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IH1cbiAgICBmdW5jdGlvbiBuU3FyVG8oeCxyKSB7IHguc3F1YXJlVG8ocik7IH1cblxuICAgIE51bGxFeHAucHJvdG90eXBlLmNvbnZlcnQgPSBuTm9wO1xuICAgIE51bGxFeHAucHJvdG90eXBlLnJldmVydCA9IG5Ob3A7XG4gICAgTnVsbEV4cC5wcm90b3R5cGUubXVsVG8gPSBuTXVsVG87XG4gICAgTnVsbEV4cC5wcm90b3R5cGUuc3FyVG8gPSBuU3FyVG87XG5cbiAgICAvLyAocHVibGljKSB0aGlzXmVcbiAgICBmdW5jdGlvbiBiblBvdyhlKSB7IHJldHVybiB0aGlzLmV4cChlLG5ldyBOdWxsRXhwKCkpOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gbG93ZXIgbiB3b3JkcyBvZiBcInRoaXMgKiBhXCIsIGEudCA8PSBuXG4gICAgLy8gXCJ0aGlzXCIgc2hvdWxkIGJlIHRoZSBsYXJnZXIgb25lIGlmIGFwcHJvcHJpYXRlLlxuICAgIGZ1bmN0aW9uIGJucE11bHRpcGx5TG93ZXJUbyhhLG4scikge1xuICAgICAgdmFyIGkgPSBNYXRoLm1pbih0aGlzLnQrYS50LG4pO1xuICAgICAgci5zID0gMDsgLy8gYXNzdW1lcyBhLHRoaXMgPj0gMFxuICAgICAgci50ID0gaTtcbiAgICAgIHdoaWxlKGkgPiAwKSByWy0taV0gPSAwO1xuICAgICAgdmFyIGo7XG4gICAgICBmb3IoaiA9IHIudC10aGlzLnQ7IGkgPCBqOyArK2kpIHJbaSt0aGlzLnRdID0gdGhpcy5hbSgwLGFbaV0scixpLDAsdGhpcy50KTtcbiAgICAgIGZvcihqID0gTWF0aC5taW4oYS50LG4pOyBpIDwgajsgKytpKSB0aGlzLmFtKDAsYVtpXSxyLGksMCxuLWkpO1xuICAgICAgci5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSBcInRoaXMgKiBhXCIgd2l0aG91dCBsb3dlciBuIHdvcmRzLCBuID4gMFxuICAgIC8vIFwidGhpc1wiIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG9uZSBpZiBhcHByb3ByaWF0ZS5cbiAgICBmdW5jdGlvbiBibnBNdWx0aXBseVVwcGVyVG8oYSxuLHIpIHtcbiAgICAgIC0tbjtcbiAgICAgIHZhciBpID0gci50ID0gdGhpcy50K2EudC1uO1xuICAgICAgci5zID0gMDsgLy8gYXNzdW1lcyBhLHRoaXMgPj0gMFxuICAgICAgd2hpbGUoLS1pID49IDApIHJbaV0gPSAwO1xuICAgICAgZm9yKGkgPSBNYXRoLm1heChuLXRoaXMudCwwKTsgaSA8IGEudDsgKytpKVxuICAgICAgICByW3RoaXMudCtpLW5dID0gdGhpcy5hbShuLWksYVtpXSxyLDAsMCx0aGlzLnQraS1uKTtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICAgIHIuZHJTaGlmdFRvKDEscik7XG4gICAgfVxuXG4gICAgLy8gQmFycmV0dCBtb2R1bGFyIHJlZHVjdGlvblxuICAgIGZ1bmN0aW9uIEJhcnJldHQobSkge1xuICAgICAgLy8gc2V0dXAgQmFycmV0dFxuICAgICAgdGhpcy5yMiA9IG5iaSgpO1xuICAgICAgdGhpcy5xMyA9IG5iaSgpO1xuICAgICAgQmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKDIqbS50LHRoaXMucjIpO1xuICAgICAgdGhpcy5tdSA9IHRoaXMucjIuZGl2aWRlKG0pO1xuICAgICAgdGhpcy5tID0gbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiYXJyZXR0Q29udmVydCh4KSB7XG4gICAgICBpZih4LnMgPCAwIHx8IHgudCA+IDIqdGhpcy5tLnQpIHJldHVybiB4Lm1vZCh0aGlzLm0pO1xuICAgICAgZWxzZSBpZih4LmNvbXBhcmVUbyh0aGlzLm0pIDwgMCkgcmV0dXJuIHg7XG4gICAgICBlbHNlIHsgdmFyIHIgPSBuYmkoKTsgeC5jb3B5VG8ocik7IHRoaXMucmVkdWNlKHIpOyByZXR1cm4gcjsgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJhcnJldHRSZXZlcnQoeCkgeyByZXR1cm4geDsgfVxuXG4gICAgLy8geCA9IHggbW9kIG0gKEhBQyAxNC40MilcbiAgICBmdW5jdGlvbiBiYXJyZXR0UmVkdWNlKHgpIHtcbiAgICAgIHguZHJTaGlmdFRvKHRoaXMubS50LTEsdGhpcy5yMik7XG4gICAgICBpZih4LnQgPiB0aGlzLm0udCsxKSB7IHgudCA9IHRoaXMubS50KzE7IHguY2xhbXAoKTsgfVxuICAgICAgdGhpcy5tdS5tdWx0aXBseVVwcGVyVG8odGhpcy5yMix0aGlzLm0udCsxLHRoaXMucTMpO1xuICAgICAgdGhpcy5tLm11bHRpcGx5TG93ZXJUbyh0aGlzLnEzLHRoaXMubS50KzEsdGhpcy5yMik7XG4gICAgICB3aGlsZSh4LmNvbXBhcmVUbyh0aGlzLnIyKSA8IDApIHguZEFkZE9mZnNldCgxLHRoaXMubS50KzEpO1xuICAgICAgeC5zdWJUbyh0aGlzLnIyLHgpO1xuICAgICAgd2hpbGUoeC5jb21wYXJlVG8odGhpcy5tKSA+PSAwKSB4LnN1YlRvKHRoaXMubSx4KTtcbiAgICB9XG5cbiAgICAvLyByID0geF4yIG1vZCBtOyB4ICE9IHJcbiAgICBmdW5jdGlvbiBiYXJyZXR0U3FyVG8oeCxyKSB7IHguc3F1YXJlVG8ocik7IHRoaXMucmVkdWNlKHIpOyB9XG5cbiAgICAvLyByID0geCp5IG1vZCBtOyB4LHkgIT0gclxuICAgIGZ1bmN0aW9uIGJhcnJldHRNdWxUbyh4LHkscikgeyB4Lm11bHRpcGx5VG8oeSxyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuICAgIEJhcnJldHQucHJvdG90eXBlLmNvbnZlcnQgPSBiYXJyZXR0Q29udmVydDtcbiAgICBCYXJyZXR0LnByb3RvdHlwZS5yZXZlcnQgPSBiYXJyZXR0UmV2ZXJ0O1xuICAgIEJhcnJldHQucHJvdG90eXBlLnJlZHVjZSA9IGJhcnJldHRSZWR1Y2U7XG4gICAgQmFycmV0dC5wcm90b3R5cGUubXVsVG8gPSBiYXJyZXR0TXVsVG87XG4gICAgQmFycmV0dC5wcm90b3R5cGUuc3FyVG8gPSBiYXJyZXR0U3FyVG87XG5cbiAgICAvLyAocHVibGljKSB0aGlzXmUgJSBtIChIQUMgMTQuODUpXG4gICAgZnVuY3Rpb24gYm5Nb2RQb3coZSxtKSB7XG4gICAgICB2YXIgaSA9IGUuYml0TGVuZ3RoKCksIGssIHIgPSBuYnYoMSksIHo7XG4gICAgICBpZihpIDw9IDApIHJldHVybiByO1xuICAgICAgZWxzZSBpZihpIDwgMTgpIGsgPSAxO1xuICAgICAgZWxzZSBpZihpIDwgNDgpIGsgPSAzO1xuICAgICAgZWxzZSBpZihpIDwgMTQ0KSBrID0gNDtcbiAgICAgIGVsc2UgaWYoaSA8IDc2OCkgayA9IDU7XG4gICAgICBlbHNlIGsgPSA2O1xuICAgICAgaWYoaSA8IDgpXG4gICAgICAgIHogPSBuZXcgQ2xhc3NpYyhtKTtcbiAgICAgIGVsc2UgaWYobS5pc0V2ZW4oKSlcbiAgICAgICAgeiA9IG5ldyBCYXJyZXR0KG0pO1xuICAgICAgZWxzZVxuICAgICAgICB6ID0gbmV3IE1vbnRnb21lcnkobSk7XG5cbiAgICAgIC8vIHByZWNvbXB1dGF0aW9uXG4gICAgICB2YXIgZyA9IG5ldyBBcnJheSgpLCBuID0gMywgazEgPSBrLTEsIGttID0gKDE8PGspLTE7XG4gICAgICBnWzFdID0gei5jb252ZXJ0KHRoaXMpO1xuICAgICAgaWYoayA+IDEpIHtcbiAgICAgICAgdmFyIGcyID0gbmJpKCk7XG4gICAgICAgIHouc3FyVG8oZ1sxXSxnMik7XG4gICAgICAgIHdoaWxlKG4gPD0ga20pIHtcbiAgICAgICAgICBnW25dID0gbmJpKCk7XG4gICAgICAgICAgei5tdWxUbyhnMixnW24tMl0sZ1tuXSk7XG4gICAgICAgICAgbiArPSAyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBqID0gZS50LTEsIHcsIGlzMSA9IHRydWUsIHIyID0gbmJpKCksIHQ7XG4gICAgICBpID0gbmJpdHMoZVtqXSktMTtcbiAgICAgIHdoaWxlKGogPj0gMCkge1xuICAgICAgICBpZihpID49IGsxKSB3ID0gKGVbal0+PihpLWsxKSkma207XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHcgPSAoZVtqXSYoKDE8PChpKzEpKS0xKSk8PChrMS1pKTtcbiAgICAgICAgICBpZihqID4gMCkgdyB8PSBlW2otMV0+Pih0aGlzLkRCK2ktazEpO1xuICAgICAgICB9XG5cbiAgICAgICAgbiA9IGs7XG4gICAgICAgIHdoaWxlKCh3JjEpID09IDApIHsgdyA+Pj0gMTsgLS1uOyB9XG4gICAgICAgIGlmKChpIC09IG4pIDwgMCkgeyBpICs9IHRoaXMuREI7IC0tajsgfVxuICAgICAgICBpZihpczEpIHtcdC8vIHJldCA9PSAxLCBkb24ndCBib3RoZXIgc3F1YXJpbmcgb3IgbXVsdGlwbHlpbmcgaXRcbiAgICAgICAgICBnW3ddLmNvcHlUbyhyKTtcbiAgICAgICAgICBpczEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB3aGlsZShuID4gMSkgeyB6LnNxclRvKHIscjIpOyB6LnNxclRvKHIyLHIpOyBuIC09IDI7IH1cbiAgICAgICAgICBpZihuID4gMCkgei5zcXJUbyhyLHIyKTsgZWxzZSB7IHQgPSByOyByID0gcjI7IHIyID0gdDsgfVxuICAgICAgICAgIHoubXVsVG8ocjIsZ1t3XSxyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlKGogPj0gMCAmJiAoZVtqXSYoMTw8aSkpID09IDApIHtcbiAgICAgICAgICB6LnNxclRvKHIscjIpOyB0ID0gcjsgciA9IHIyOyByMiA9IHQ7XG4gICAgICAgICAgaWYoLS1pIDwgMCkgeyBpID0gdGhpcy5EQi0xOyAtLWo7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHoucmV2ZXJ0KHIpO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIGdjZCh0aGlzLGEpIChIQUMgMTQuNTQpXG4gICAgZnVuY3Rpb24gYm5HQ0QoYSkge1xuICAgICAgdmFyIHggPSAodGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpcy5jbG9uZSgpO1xuICAgICAgdmFyIHkgPSAoYS5zPDApP2EubmVnYXRlKCk6YS5jbG9uZSgpO1xuICAgICAgaWYoeC5jb21wYXJlVG8oeSkgPCAwKSB7IHZhciB0ID0geDsgeCA9IHk7IHkgPSB0OyB9XG4gICAgICB2YXIgaSA9IHguZ2V0TG93ZXN0U2V0Qml0KCksIGcgPSB5LmdldExvd2VzdFNldEJpdCgpO1xuICAgICAgaWYoZyA8IDApIHJldHVybiB4O1xuICAgICAgaWYoaSA8IGcpIGcgPSBpO1xuICAgICAgaWYoZyA+IDApIHtcbiAgICAgICAgeC5yU2hpZnRUbyhnLHgpO1xuICAgICAgICB5LnJTaGlmdFRvKGcseSk7XG4gICAgICB9XG4gICAgICB3aGlsZSh4LnNpZ251bSgpID4gMCkge1xuICAgICAgICBpZigoaSA9IHguZ2V0TG93ZXN0U2V0Qml0KCkpID4gMCkgeC5yU2hpZnRUbyhpLHgpO1xuICAgICAgICBpZigoaSA9IHkuZ2V0TG93ZXN0U2V0Qml0KCkpID4gMCkgeS5yU2hpZnRUbyhpLHkpO1xuICAgICAgICBpZih4LmNvbXBhcmVUbyh5KSA+PSAwKSB7XG4gICAgICAgICAgeC5zdWJUbyh5LHgpO1xuICAgICAgICAgIHguclNoaWZ0VG8oMSx4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB5LnN1YlRvKHgseSk7XG4gICAgICAgICAgeS5yU2hpZnRUbygxLHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihnID4gMCkgeS5sU2hpZnRUbyhnLHkpO1xuICAgICAgcmV0dXJuIHk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgdGhpcyAlIG4sIG4gPCAyXjI2XG4gICAgZnVuY3Rpb24gYm5wTW9kSW50KG4pIHtcbiAgICAgIGlmKG4gPD0gMCkgcmV0dXJuIDA7XG4gICAgICB2YXIgZCA9IHRoaXMuRFYlbiwgciA9ICh0aGlzLnM8MCk/bi0xOjA7XG4gICAgICBpZih0aGlzLnQgPiAwKVxuICAgICAgICBpZihkID09IDApIHIgPSB0aGlzWzBdJW47XG4gICAgICAgIGVsc2UgZm9yKHZhciBpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSByID0gKGQqcit0aGlzW2ldKSVuO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgMS90aGlzICUgbSAoSEFDIDE0LjYxKVxuICAgIGZ1bmN0aW9uIGJuTW9kSW52ZXJzZShtKSB7XG4gICAgICB2YXIgYWMgPSBtLmlzRXZlbigpO1xuICAgICAgaWYoKHRoaXMuaXNFdmVuKCkgJiYgYWMpIHx8IG0uc2lnbnVtKCkgPT0gMCkgcmV0dXJuIEJpZ0ludGVnZXIuWkVSTztcbiAgICAgIHZhciB1ID0gbS5jbG9uZSgpLCB2ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgdmFyIGEgPSBuYnYoMSksIGIgPSBuYnYoMCksIGMgPSBuYnYoMCksIGQgPSBuYnYoMSk7XG4gICAgICB3aGlsZSh1LnNpZ251bSgpICE9IDApIHtcbiAgICAgICAgd2hpbGUodS5pc0V2ZW4oKSkge1xuICAgICAgICAgIHUuclNoaWZ0VG8oMSx1KTtcbiAgICAgICAgICBpZihhYykge1xuICAgICAgICAgICAgaWYoIWEuaXNFdmVuKCkgfHwgIWIuaXNFdmVuKCkpIHsgYS5hZGRUbyh0aGlzLGEpOyBiLnN1YlRvKG0sYik7IH1cbiAgICAgICAgICAgIGEuclNoaWZ0VG8oMSxhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZighYi5pc0V2ZW4oKSkgYi5zdWJUbyhtLGIpO1xuICAgICAgICAgIGIuclNoaWZ0VG8oMSxiKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSh2LmlzRXZlbigpKSB7XG4gICAgICAgICAgdi5yU2hpZnRUbygxLHYpO1xuICAgICAgICAgIGlmKGFjKSB7XG4gICAgICAgICAgICBpZighYy5pc0V2ZW4oKSB8fCAhZC5pc0V2ZW4oKSkgeyBjLmFkZFRvKHRoaXMsYyk7IGQuc3ViVG8obSxkKTsgfVxuICAgICAgICAgICAgYy5yU2hpZnRUbygxLGMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmKCFkLmlzRXZlbigpKSBkLnN1YlRvKG0sZCk7XG4gICAgICAgICAgZC5yU2hpZnRUbygxLGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHUuY29tcGFyZVRvKHYpID49IDApIHtcbiAgICAgICAgICB1LnN1YlRvKHYsdSk7XG4gICAgICAgICAgaWYoYWMpIGEuc3ViVG8oYyxhKTtcbiAgICAgICAgICBiLnN1YlRvKGQsYik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdi5zdWJUbyh1LHYpO1xuICAgICAgICAgIGlmKGFjKSBjLnN1YlRvKGEsYyk7XG4gICAgICAgICAgZC5zdWJUbyhiLGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih2LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgIT0gMCkgcmV0dXJuIEJpZ0ludGVnZXIuWkVSTztcbiAgICAgIGlmKGQuY29tcGFyZVRvKG0pID49IDApIHJldHVybiBkLnN1YnRyYWN0KG0pO1xuICAgICAgaWYoZC5zaWdudW0oKSA8IDApIGQuYWRkVG8obSxkKTsgZWxzZSByZXR1cm4gZDtcbiAgICAgIGlmKGQuc2lnbnVtKCkgPCAwKSByZXR1cm4gZC5hZGQobSk7IGVsc2UgcmV0dXJuIGQ7XG4gICAgfVxuXG4gICAgdmFyIGxvd3ByaW1lcyA9IFsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTddO1xuICAgIHZhciBscGxpbSA9ICgxPDwyNikvbG93cHJpbWVzW2xvd3ByaW1lcy5sZW5ndGgtMV07XG5cbiAgICAvLyAocHVibGljKSB0ZXN0IHByaW1hbGl0eSB3aXRoIGNlcnRhaW50eSA+PSAxLS41XnRcbiAgICBmdW5jdGlvbiBibklzUHJvYmFibGVQcmltZSh0KSB7XG4gICAgICB2YXIgaSwgeCA9IHRoaXMuYWJzKCk7XG4gICAgICBpZih4LnQgPT0gMSAmJiB4WzBdIDw9IGxvd3ByaW1lc1tsb3dwcmltZXMubGVuZ3RoLTFdKSB7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGxvd3ByaW1lcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICBpZih4WzBdID09IGxvd3ByaW1lc1tpXSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmKHguaXNFdmVuKCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGkgPSAxO1xuICAgICAgd2hpbGUoaSA8IGxvd3ByaW1lcy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG0gPSBsb3dwcmltZXNbaV0sIGogPSBpKzE7XG4gICAgICAgIHdoaWxlKGogPCBsb3dwcmltZXMubGVuZ3RoICYmIG0gPCBscGxpbSkgbSAqPSBsb3dwcmltZXNbaisrXTtcbiAgICAgICAgbSA9IHgubW9kSW50KG0pO1xuICAgICAgICB3aGlsZShpIDwgaikgaWYobSVsb3dwcmltZXNbaSsrXSA9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4geC5taWxsZXJSYWJpbih0KTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0cnVlIGlmIHByb2JhYmx5IHByaW1lIChIQUMgNC4yNCwgTWlsbGVyLVJhYmluKVxuICAgIGZ1bmN0aW9uIGJucE1pbGxlclJhYmluKHQpIHtcbiAgICAgIHZhciBuMSA9IHRoaXMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpO1xuICAgICAgdmFyIGsgPSBuMS5nZXRMb3dlc3RTZXRCaXQoKTtcbiAgICAgIGlmKGsgPD0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIHIgPSBuMS5zaGlmdFJpZ2h0KGspO1xuICAgICAgdCA9ICh0KzEpPj4xO1xuICAgICAgaWYodCA+IGxvd3ByaW1lcy5sZW5ndGgpIHQgPSBsb3dwcmltZXMubGVuZ3RoO1xuICAgICAgdmFyIGEgPSBuYmkoKTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0OyArK2kpIHtcbiAgICAgICAgLy9QaWNrIGJhc2VzIGF0IHJhbmRvbSwgaW5zdGVhZCBvZiBzdGFydGluZyBhdCAyXG4gICAgICAgIGEuZnJvbUludChsb3dwcmltZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxvd3ByaW1lcy5sZW5ndGgpXSk7XG4gICAgICAgIHZhciB5ID0gYS5tb2RQb3cocix0aGlzKTtcbiAgICAgICAgaWYoeS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpICE9IDAgJiYgeS5jb21wYXJlVG8objEpICE9IDApIHtcbiAgICAgICAgICB2YXIgaiA9IDE7XG4gICAgICAgICAgd2hpbGUoaisrIDwgayAmJiB5LmNvbXBhcmVUbyhuMSkgIT0gMCkge1xuICAgICAgICAgICAgeSA9IHkubW9kUG93SW50KDIsdGhpcyk7XG4gICAgICAgICAgICBpZih5LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZih5LmNvbXBhcmVUbyhuMSkgIT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBwcm90ZWN0ZWRcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jaHVua1NpemUgPSBibnBDaHVua1NpemU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUudG9SYWRpeCA9IGJucFRvUmFkaXg7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbVJhZGl4ID0gYm5wRnJvbVJhZGl4O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21OdW1iZXIgPSBibnBGcm9tTnVtYmVyO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbyA9IGJucEJpdHdpc2VUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jaGFuZ2VCaXQgPSBibnBDaGFuZ2VCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYWRkVG8gPSBibnBBZGRUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kTXVsdGlwbHkgPSBibnBETXVsdGlwbHk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZEFkZE9mZnNldCA9IGJucERBZGRPZmZzZXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlMb3dlclRvID0gYm5wTXVsdGlwbHlMb3dlclRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VXBwZXJUbyA9IGJucE11bHRpcGx5VXBwZXJUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnQgPSBibnBNb2RJbnQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubWlsbGVyUmFiaW4gPSBibnBNaWxsZXJSYWJpbjtcblxuICAgIC8vIHB1YmxpY1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNsb25lID0gYm5DbG9uZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5pbnRWYWx1ZSA9IGJuSW50VmFsdWU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlID0gYm5CeXRlVmFsdWU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc2hvcnRWYWx1ZSA9IGJuU2hvcnRWYWx1ZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaWdudW0gPSBiblNpZ051bTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheSA9IGJuVG9CeXRlQXJyYXk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZXF1YWxzID0gYm5FcXVhbHM7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubWluID0gYm5NaW47XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubWF4ID0gYm5NYXg7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYW5kID0gYm5BbmQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUub3IgPSBibk9yO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnhvciA9IGJuWG9yO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFuZE5vdCA9IGJuQW5kTm90O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm5vdCA9IGJuTm90O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdCA9IGJuU2hpZnRMZWZ0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0UmlnaHQgPSBiblNoaWZ0UmlnaHQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZ2V0TG93ZXN0U2V0Qml0ID0gYm5HZXRMb3dlc3RTZXRCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQgPSBibkJpdENvdW50O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnRlc3RCaXQgPSBiblRlc3RCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc2V0Qml0ID0gYm5TZXRCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQgPSBibkNsZWFyQml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZsaXBCaXQgPSBibkZsaXBCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYWRkID0gYm5BZGQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJhY3QgPSBiblN1YnRyYWN0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5ID0gYm5NdWx0aXBseTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZpZGUgPSBibkRpdmlkZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5yZW1haW5kZXIgPSBiblJlbWFpbmRlcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZpZGVBbmRSZW1haW5kZXIgPSBibkRpdmlkZUFuZFJlbWFpbmRlcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RQb3cgPSBibk1vZFBvdztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZlcnNlID0gYm5Nb2RJbnZlcnNlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnBvdyA9IGJuUG93O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmdjZCA9IGJuR0NEO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmlzUHJvYmFibGVQcmltZSA9IGJuSXNQcm9iYWJsZVByaW1lO1xuXG4gICAgLy8gSlNCTi1zcGVjaWZpYyBleHRlbnNpb25cbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmUgPSBiblNxdWFyZTtcblxuICAgIC8vIEV4cG9zZSB0aGUgQmFycmV0dCBmdW5jdGlvblxuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkJhcnJldHQgPSBCYXJyZXR0XG5cbiAgICAvLyBCaWdJbnRlZ2VyIGludGVyZmFjZXMgbm90IGltcGxlbWVudGVkIGluIGpzYm46XG5cbiAgICAvLyBCaWdJbnRlZ2VyKGludCBzaWdudW0sIGJ5dGVbXSBtYWduaXR1ZGUpXG4gICAgLy8gZG91YmxlIGRvdWJsZVZhbHVlKClcbiAgICAvLyBmbG9hdCBmbG9hdFZhbHVlKClcbiAgICAvLyBpbnQgaGFzaENvZGUoKVxuICAgIC8vIGxvbmcgbG9uZ1ZhbHVlKClcbiAgICAvLyBzdGF0aWMgQmlnSW50ZWdlciB2YWx1ZU9mKGxvbmcgdmFsKVxuXG5cdC8vIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIC0gcmVxdWlyZXMgYSBQUk5HIGJhY2tlbmQsIGUuZy4gcHJuZzQuanNcblxuXHQvLyBGb3IgYmVzdCByZXN1bHRzLCBwdXQgY29kZSBsaWtlXG5cdC8vIDxib2R5IG9uQ2xpY2s9J3JuZ19zZWVkX3RpbWUoKTsnIG9uS2V5UHJlc3M9J3JuZ19zZWVkX3RpbWUoKTsnPlxuXHQvLyBpbiB5b3VyIG1haW4gSFRNTCBkb2N1bWVudC5cblxuXHR2YXIgcm5nX3N0YXRlO1xuXHR2YXIgcm5nX3Bvb2w7XG5cdHZhciBybmdfcHB0cjtcblxuXHQvLyBNaXggaW4gYSAzMi1iaXQgaW50ZWdlciBpbnRvIHRoZSBwb29sXG5cdGZ1bmN0aW9uIHJuZ19zZWVkX2ludCh4KSB7XG5cdCAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0geCAmIDI1NTtcblx0ICBybmdfcG9vbFtybmdfcHB0cisrXSBePSAoeCA+PiA4KSAmIDI1NTtcblx0ICBybmdfcG9vbFtybmdfcHB0cisrXSBePSAoeCA+PiAxNikgJiAyNTU7XG5cdCAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4gMjQpICYgMjU1O1xuXHQgIGlmKHJuZ19wcHRyID49IHJuZ19wc2l6ZSkgcm5nX3BwdHIgLT0gcm5nX3BzaXplO1xuXHR9XG5cblx0Ly8gTWl4IGluIHRoZSBjdXJyZW50IHRpbWUgKHcvbWlsbGlzZWNvbmRzKSBpbnRvIHRoZSBwb29sXG5cdGZ1bmN0aW9uIHJuZ19zZWVkX3RpbWUoKSB7XG5cdCAgcm5nX3NlZWRfaW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcblx0fVxuXG5cdC8vIEluaXRpYWxpemUgdGhlIHBvb2wgd2l0aCBqdW5rIGlmIG5lZWRlZC5cblx0aWYocm5nX3Bvb2wgPT0gbnVsbCkge1xuXHQgIHJuZ19wb29sID0gbmV3IEFycmF5KCk7XG5cdCAgcm5nX3BwdHIgPSAwO1xuXHQgIHZhciB0O1xuXHQgIGlmKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmNyeXB0bykge1xuXHRcdGlmICh3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuXHRcdCAgLy8gVXNlIHdlYmNyeXB0byBpZiBhdmFpbGFibGVcblx0XHQgIHZhciB1YSA9IG5ldyBVaW50OEFycmF5KDMyKTtcblx0XHQgIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHVhKTtcblx0XHQgIGZvcih0ID0gMDsgdCA8IDMyOyArK3QpXG5cdFx0XHRybmdfcG9vbFtybmdfcHB0cisrXSA9IHVhW3RdO1xuXHRcdH1cblx0XHRlbHNlIGlmKG5hdmlnYXRvci5hcHBOYW1lID09IFwiTmV0c2NhcGVcIiAmJiBuYXZpZ2F0b3IuYXBwVmVyc2lvbiA8IFwiNVwiKSB7XG5cdFx0ICAvLyBFeHRyYWN0IGVudHJvcHkgKDI1NiBiaXRzKSBmcm9tIE5TNCBSTkcgaWYgYXZhaWxhYmxlXG5cdFx0ICB2YXIgeiA9IHdpbmRvdy5jcnlwdG8ucmFuZG9tKDMyKTtcblx0XHQgIGZvcih0ID0gMDsgdCA8IHoubGVuZ3RoOyArK3QpXG5cdFx0XHRybmdfcG9vbFtybmdfcHB0cisrXSA9IHouY2hhckNvZGVBdCh0KSAmIDI1NTtcblx0XHR9XG5cdCAgfVxuXHQgIHdoaWxlKHJuZ19wcHRyIDwgcm5nX3BzaXplKSB7ICAvLyBleHRyYWN0IHNvbWUgcmFuZG9tbmVzcyBmcm9tIE1hdGgucmFuZG9tKClcblx0XHR0ID0gTWF0aC5mbG9vcig2NTUzNiAqIE1hdGgucmFuZG9tKCkpO1xuXHRcdHJuZ19wb29sW3JuZ19wcHRyKytdID0gdCA+Pj4gODtcblx0XHRybmdfcG9vbFtybmdfcHB0cisrXSA9IHQgJiAyNTU7XG5cdCAgfVxuXHQgIHJuZ19wcHRyID0gMDtcblx0ICBybmdfc2VlZF90aW1lKCk7XG5cdCAgLy9ybmdfc2VlZF9pbnQod2luZG93LnNjcmVlblgpO1xuXHQgIC8vcm5nX3NlZWRfaW50KHdpbmRvdy5zY3JlZW5ZKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJuZ19nZXRfYnl0ZSgpIHtcblx0ICBpZihybmdfc3RhdGUgPT0gbnVsbCkge1xuXHRcdHJuZ19zZWVkX3RpbWUoKTtcblx0XHRybmdfc3RhdGUgPSBwcm5nX25ld3N0YXRlKCk7XG5cdFx0cm5nX3N0YXRlLmluaXQocm5nX3Bvb2wpO1xuXHRcdGZvcihybmdfcHB0ciA9IDA7IHJuZ19wcHRyIDwgcm5nX3Bvb2wubGVuZ3RoOyArK3JuZ19wcHRyKVxuXHRcdCAgcm5nX3Bvb2xbcm5nX3BwdHJdID0gMDtcblx0XHRybmdfcHB0ciA9IDA7XG5cdFx0Ly9ybmdfcG9vbCA9IG51bGw7XG5cdCAgfVxuXHQgIC8vIFRPRE86IGFsbG93IHJlc2VlZGluZyBhZnRlciBmaXJzdCByZXF1ZXN0XG5cdCAgcmV0dXJuIHJuZ19zdGF0ZS5uZXh0KCk7XG5cdH1cblxuXHRmdW5jdGlvbiBybmdfZ2V0X2J5dGVzKGJhKSB7XG5cdCAgdmFyIGk7XG5cdCAgZm9yKGkgPSAwOyBpIDwgYmEubGVuZ3RoOyArK2kpIGJhW2ldID0gcm5nX2dldF9ieXRlKCk7XG5cdH1cblxuXHRmdW5jdGlvbiBTZWN1cmVSYW5kb20oKSB7fVxuXG5cdFNlY3VyZVJhbmRvbS5wcm90b3R5cGUubmV4dEJ5dGVzID0gcm5nX2dldF9ieXRlcztcblxuXHQvLyBwcm5nNC5qcyAtIHVzZXMgQXJjZm91ciBhcyBhIFBSTkdcblxuXHRmdW5jdGlvbiBBcmNmb3VyKCkge1xuXHQgIHRoaXMuaSA9IDA7XG5cdCAgdGhpcy5qID0gMDtcblx0ICB0aGlzLlMgPSBuZXcgQXJyYXkoKTtcblx0fVxuXG5cdC8vIEluaXRpYWxpemUgYXJjZm91ciBjb250ZXh0IGZyb20ga2V5LCBhbiBhcnJheSBvZiBpbnRzLCBlYWNoIGZyb20gWzAuLjI1NV1cblx0ZnVuY3Rpb24gQVJDNGluaXQoa2V5KSB7XG5cdCAgdmFyIGksIGosIHQ7XG5cdCAgZm9yKGkgPSAwOyBpIDwgMjU2OyArK2kpXG5cdFx0dGhpcy5TW2ldID0gaTtcblx0ICBqID0gMDtcblx0ICBmb3IoaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuXHRcdGogPSAoaiArIHRoaXMuU1tpXSArIGtleVtpICUga2V5Lmxlbmd0aF0pICYgMjU1O1xuXHRcdHQgPSB0aGlzLlNbaV07XG5cdFx0dGhpcy5TW2ldID0gdGhpcy5TW2pdO1xuXHRcdHRoaXMuU1tqXSA9IHQ7XG5cdCAgfVxuXHQgIHRoaXMuaSA9IDA7XG5cdCAgdGhpcy5qID0gMDtcblx0fVxuXG5cdGZ1bmN0aW9uIEFSQzRuZXh0KCkge1xuXHQgIHZhciB0O1xuXHQgIHRoaXMuaSA9ICh0aGlzLmkgKyAxKSAmIDI1NTtcblx0ICB0aGlzLmogPSAodGhpcy5qICsgdGhpcy5TW3RoaXMuaV0pICYgMjU1O1xuXHQgIHQgPSB0aGlzLlNbdGhpcy5pXTtcblx0ICB0aGlzLlNbdGhpcy5pXSA9IHRoaXMuU1t0aGlzLmpdO1xuXHQgIHRoaXMuU1t0aGlzLmpdID0gdDtcblx0ICByZXR1cm4gdGhpcy5TWyh0ICsgdGhpcy5TW3RoaXMuaV0pICYgMjU1XTtcblx0fVxuXG5cdEFyY2ZvdXIucHJvdG90eXBlLmluaXQgPSBBUkM0aW5pdDtcblx0QXJjZm91ci5wcm90b3R5cGUubmV4dCA9IEFSQzRuZXh0O1xuXG5cdC8vIFBsdWcgaW4geW91ciBSTkcgY29uc3RydWN0b3IgaGVyZVxuXHRmdW5jdGlvbiBwcm5nX25ld3N0YXRlKCkge1xuXHQgIHJldHVybiBuZXcgQXJjZm91cigpO1xuXHR9XG5cblx0Ly8gUG9vbCBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGFuZCBncmVhdGVyIHRoYW4gMzIuXG5cdC8vIEFuIGFycmF5IG9mIGJ5dGVzIHRoZSBzaXplIG9mIHRoZSBwb29sIHdpbGwgYmUgcGFzc2VkIHRvIGluaXQoKVxuXHR2YXIgcm5nX3BzaXplID0gMjU2O1xuXG4gIEJpZ0ludGVnZXIuU2VjdXJlUmFuZG9tID0gU2VjdXJlUmFuZG9tO1xuICBCaWdJbnRlZ2VyLkJpZ0ludGVnZXIgPSBCaWdJbnRlZ2VyO1xuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gQmlnSW50ZWdlcjtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLkJpZ0ludGVnZXIgPSBCaWdJbnRlZ2VyO1xuICAgIHRoaXMuU2VjdXJlUmFuZG9tID0gU2VjdXJlUmFuZG9tO1xuICB9XG5cbn0pLmNhbGwodGhpcyk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IGZzID0gcmVxdWlyZShcInBuL2ZzXCIpO1xuY29uc3Qgdm0gPSByZXF1aXJlKFwidm1cIik7XG5jb25zdCB0b3VnaENvb2tpZSA9IHJlcXVpcmUoXCJ0b3VnaC1jb29raWVcIik7XG5jb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3QtcHJvbWlzZS1uYXRpdmVcIik7XG5jb25zdCBzbmlmZkhUTUxFbmNvZGluZyA9IHJlcXVpcmUoXCJodG1sLWVuY29kaW5nLXNuaWZmZXJcIik7XG5jb25zdCB3aGF0d2dVUkwgPSByZXF1aXJlKFwid2hhdHdnLXVybFwiKTtcbmNvbnN0IHdoYXR3Z0VuY29kaW5nID0gcmVxdWlyZShcIndoYXR3Zy1lbmNvZGluZ1wiKTtcbmNvbnN0IHsgVVJMIH0gPSByZXF1aXJlKFwid2hhdHdnLXVybFwiKTtcbmNvbnN0IHBhcnNlQ29udGVudFR5cGUgPSByZXF1aXJlKFwiY29udGVudC10eXBlLXBhcnNlclwiKTtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4vanNkb20vbGl2aW5nL2dlbmVyYXRlZC91dGlscy5qc1wiKTtcbmNvbnN0IFZpcnR1YWxDb25zb2xlID0gcmVxdWlyZShcIi4vanNkb20vdmlydHVhbC1jb25zb2xlLmpzXCIpO1xuY29uc3QgV2luZG93ID0gcmVxdWlyZShcIi4vanNkb20vYnJvd3Nlci9XaW5kb3cuanNcIik7XG5jb25zdCB7IGxvY2F0aW9uSW5mbyB9ID0gcmVxdWlyZShcIi4vanNkb20vbGl2aW5nL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzLmpzXCIpO1xuY29uc3QgeyBkb21Ub0h0bWwgfSA9IHJlcXVpcmUoXCIuL2pzZG9tL2Jyb3dzZXIvZG9tdG9odG1sLmpzXCIpO1xuY29uc3QgeyBhcHBseURvY3VtZW50RmVhdHVyZXMgfSA9IHJlcXVpcmUoXCIuL2pzZG9tL2Jyb3dzZXIvZG9jdW1lbnRmZWF0dXJlcy5qc1wiKTtcbmNvbnN0IHsgd3JhcENvb2tpZUphckZvclJlcXVlc3QgfSA9IHJlcXVpcmUoXCIuL2pzZG9tL2Jyb3dzZXIvcmVzb3VyY2UtbG9hZGVyLmpzXCIpO1xuY29uc3QgeyB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9ID0gcmVxdWlyZShcIi4uL3BhY2thZ2UuanNvblwiKTtcblxuY29uc3QgREVGQVVMVF9VU0VSX0FHRU5UID0gYE1vemlsbGEvNS4wICgke3Byb2Nlc3MucGxhdGZvcm19KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBqc2RvbS8ke3BhY2thZ2VWZXJzaW9ufWA7XG5cbi8vIFRoaXMgc3ltYm9sIGFsbG93cyB1cyB0byBzbXVnZ2xlIGEgbm9uLXB1YmxpYyBvcHRpb24gdGhyb3VnaCB0byB0aGUgSlNET00gY29uc3RydWN0b3IsIGZvciB1c2UgYnkgSlNET00uZnJvbVVSTC5cbmNvbnN0IHRyYW5zcG9ydExheWVyRW5jb2RpbmdMYWJlbEhpZGRlbk9wdGlvbiA9IFN5bWJvbChcInRyYW5zcG9ydExheWVyRW5jb2RpbmdMYWJlbFwiKTtcblxuY2xhc3MgQ29va2llSmFyIGV4dGVuZHMgdG91Z2hDb29raWUuQ29va2llSmFyIHtcbiAgY29uc3RydWN0b3Ioc3RvcmUsIG9wdGlvbnMpIHtcbiAgICAvLyBqc2RvbSBjb29raWUgamFycyBtdXN0IGJlIGxvb3NlIGJ5IGRlZmF1bHRcbiAgICBzdXBlcihzdG9yZSwgT2JqZWN0LmFzc2lnbih7IGxvb3NlTW9kZTogdHJ1ZSB9LCBvcHRpb25zKSk7XG4gIH1cbn1cblxuY29uc3Qgd2luZG93ID0gU3ltYm9sKFwid2luZG93XCIpO1xubGV0IHNoYXJlZEZyYWdtZW50RG9jdW1lbnQgPSBudWxsO1xuXG5jbGFzcyBKU0RPTSB7XG4gIGNvbnN0cnVjdG9yKGlucHV0LCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7IGh0bWwsIGVuY29kaW5nIH0gPSBub3JtYWxpemVIVE1MKGlucHV0LCBvcHRpb25zW3RyYW5zcG9ydExheWVyRW5jb2RpbmdMYWJlbEhpZGRlbk9wdGlvbl0pO1xuICAgIG9wdGlvbnMgPSB0cmFuc2Zvcm1PcHRpb25zKG9wdGlvbnMsIGVuY29kaW5nKTtcblxuICAgIHRoaXNbd2luZG93XSA9IG5ldyBXaW5kb3cob3B0aW9ucy53aW5kb3dPcHRpb25zKTtcblxuICAgIC8vIFRPRE8gTkVXQVBJOiB0aGUgd2hvbGUgXCJmZWF0dXJlc1wiIGluZnJhc3RydWN0dXJlIGlzIGhvcnJpYmxlIGFuZCBzaG91bGQgYmUgcmUtYnVpbHQuIFdoZW4gd2Ugc3dpdGNoIHRvIG5ld2FwaVxuICAgIC8vIHdob2xlc2FsZSwgb3IgcGVyaGFwcyBiZWZvcmUsIHdlIHNob3VsZCByZS1kbyBpdC4gRm9yIG5vdywganVzdCBhZGFwdCB0aGUgbmV3LCBuaWNlLCBwdWJsaWMgQVBJIGludG8gdGhlIG9sZCxcbiAgICAvLyB1Z2x5LCBpbnRlcm5hbCBBUEkuXG4gICAgY29uc3QgZmVhdHVyZXMgPSB7XG4gICAgICBGZXRjaEV4dGVybmFsUmVzb3VyY2VzOiBbXSxcbiAgICAgIFNraXBFeHRlcm5hbFJlc291cmNlczogZmFsc2VcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMucmVzb3VyY2VzID09PSBcInVzYWJsZVwiKSB7XG4gICAgICBmZWF0dXJlcy5GZXRjaEV4dGVybmFsUmVzb3VyY2VzID0gW1wibGlua1wiLCBcImltZ1wiLCBcImZyYW1lXCIsIFwiaWZyYW1lXCJdO1xuICAgICAgaWYgKG9wdGlvbnMud2luZG93T3B0aW9ucy5ydW5TY3JpcHRzID09PSBcImRhbmdlcm91c2x5XCIpIHtcbiAgICAgICAgZmVhdHVyZXMuRmV0Y2hFeHRlcm5hbFJlc291cmNlcy5wdXNoKFwic2NyaXB0XCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3RlIHRoYXQgXCJpbWdcIiB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNvZGUgaW4gSFRNTEltYWdlRWxlbWVudC1pbXBsLmpzIGlmIGNhbnZhcyBpcyBub3QgaW5zdGFsbGVkLlxuICAgICAgLy8gVE9ETyBORVdBUEk6IGNsZWFuIHRoYXQgdXAgYW5kIGNlbnRyYWxpemUgdGhlIGxvZ2ljIGhlcmUuXG4gICAgfVxuXG4gICAgY29uc3QgZG9jdW1lbnRJbXBsID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpc1t3aW5kb3ddLl9kb2N1bWVudCk7XG4gICAgYXBwbHlEb2N1bWVudEZlYXR1cmVzKGRvY3VtZW50SW1wbCwgZmVhdHVyZXMpO1xuXG4gICAgb3B0aW9ucy5iZWZvcmVQYXJzZSh0aGlzW3dpbmRvd10uX2dsb2JhbFByb3h5KTtcblxuICAgIC8vIFRPRE8gTkVXQVBJOiB0aGlzIGlzIHN0aWxsIHByZXR0eSBoYWNreS4gSXQncyBhbHNvIGRpZmZlcmVudCB0aGFuIGpzZG9tLmpzZG9tLiBEb2VzIGl0IHdvcms/IENhbiBpdCBiZSBiZXR0ZXI/XG4gICAgZG9jdW1lbnRJbXBsLl9odG1sVG9Eb20uYXBwZW5kSHRtbFRvRG9jdW1lbnQoaHRtbCwgZG9jdW1lbnRJbXBsKTtcbiAgICBkb2N1bWVudEltcGwuY2xvc2UoKTtcbiAgfVxuXG4gIGdldCB3aW5kb3coKSB7XG4gICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ3JhYiB0aGUgZ2xvYmFsIHByb3h5LCBpbnN0ZWFkIG9mIGp1c3QgdGhlIHJlc3VsdCBvZiBgbmV3IFdpbmRvdyguLi4pYCwgc2luY2Ugb3RoZXJ3aXNlIHRoaW5nc1xuICAgIC8vIGxpa2UgYHdpbmRvdy5ldmFsYCBkb24ndCBleGlzdC5cbiAgICByZXR1cm4gdGhpc1t3aW5kb3ddLl9nbG9iYWxQcm94eTtcbiAgfVxuXG4gIGdldCB2aXJ0dWFsQ29uc29sZSgpIHtcbiAgICByZXR1cm4gdGhpc1t3aW5kb3ddLl92aXJ0dWFsQ29uc29sZTtcbiAgfVxuXG4gIGdldCBjb29raWVKYXIoKSB7XG4gICAgLy8gVE9ETyBORVdBUEkgbW92ZSBfY29va2llSmFyIHRvIHdpbmRvdyBwcm9iYWJseVxuICAgIHJldHVybiBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzW3dpbmRvd10uX2RvY3VtZW50KS5fY29va2llSmFyO1xuICB9XG5cbiAgc2VyaWFsaXplKCkge1xuICAgIHJldHVybiBkb21Ub0h0bWwoW3RoaXNbd2luZG93XS5fZG9jdW1lbnRdKTtcbiAgfVxuXG4gIG5vZGVMb2NhdGlvbihub2RlKSB7XG4gICAgaWYgKCFpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzW3dpbmRvd10uX2RvY3VtZW50KS5fcGFyc2VPcHRpb25zLmxvY2F0aW9uSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9jYXRpb24gaW5mb3JtYXRpb24gd2FzIG5vdCBzYXZlZCBmb3IgdGhpcyBqc2RvbS4gVXNlIGluY2x1ZGVOb2RlTG9jYXRpb25zIGR1cmluZyBjcmVhdGlvbi5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKG5vZGUpW2xvY2F0aW9uSW5mb107XG4gIH1cblxuICBydW5WTVNjcmlwdChzY3JpcHQpIHtcbiAgICBpZiAoIXZtLmlzQ29udGV4dCh0aGlzW3dpbmRvd10pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhpcyBqc2RvbSB3YXMgbm90IGNvbmZpZ3VyZWQgdG8gYWxsb3cgc2NyaXB0IHJ1bm5pbmcuIFwiICtcbiAgICAgICAgXCJVc2UgdGhlIHJ1blNjcmlwdHMgb3B0aW9uIGR1cmluZyBjcmVhdGlvbi5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjcmlwdC5ydW5JbkNvbnRleHQodGhpc1t3aW5kb3ddKTtcbiAgfVxuXG4gIHJlY29uZmlndXJlKHNldHRpbmdzKSB7XG4gICAgaWYgKFwid2luZG93VG9wXCIgaW4gc2V0dGluZ3MpIHtcbiAgICAgIHRoaXNbd2luZG93XS5fdG9wID0gc2V0dGluZ3Mud2luZG93VG9wO1xuICAgIH1cblxuICAgIGlmIChcInVybFwiIGluIHNldHRpbmdzKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXNbd2luZG93XS5fZG9jdW1lbnQpO1xuXG4gICAgICBjb25zdCB1cmwgPSB3aGF0d2dVUkwucGFyc2VVUkwoc2V0dGluZ3MudXJsKTtcbiAgICAgIGlmICh1cmwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBcIiR7c2V0dGluZ3MudXJsfVwiIGFzIGEgVVJMYCk7XG4gICAgICB9XG5cbiAgICAgIGRvY3VtZW50Ll9VUkwgPSB1cmw7XG4gICAgICBkb2N1bWVudC5fb3JpZ2luID0gd2hhdHdnVVJMLnNlcmlhbGl6ZVVSTFRvVW5pY29kZU9yaWdpbihkb2N1bWVudC5fVVJMKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJhZ21lbnQoc3RyaW5nKSB7XG4gICAgaWYgKCFzaGFyZWRGcmFnbWVudERvY3VtZW50KSB7XG4gICAgICBzaGFyZWRGcmFnbWVudERvY3VtZW50ID0gKG5ldyBKU0RPTSgpKS53aW5kb3cuZG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBzaGFyZWRGcmFnbWVudERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBzdHJpbmc7XG4gICAgcmV0dXJuIHRlbXBsYXRlLmNvbnRlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVVSTCh1cmwsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIHVybCA9IHBhcnNlZFVSTC5ocmVmO1xuICAgICAgb3B0aW9ucyA9IG5vcm1hbGl6ZUZyb21VUkxPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWUsXG4gICAgICAgIGVuY29kaW5nOiBudWxsLCAvLyBpLmUuLCBnaXZlIG1lIHRoZSByYXcgQnVmZmVyXG4gICAgICAgIGd6aXA6IHRydWUsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIlVzZXItQWdlbnRcIjogb3B0aW9ucy51c2VyQWdlbnQsXG4gICAgICAgICAgUmVmZXJlcjogb3B0aW9ucy5yZWZlcnJlcixcbiAgICAgICAgICBBY2NlcHQ6IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44XCIsXG4gICAgICAgICAgXCJBY2NlcHQtTGFuZ3VhZ2VcIjogXCJlblwiXG4gICAgICAgIH0sXG4gICAgICAgIGphcjogd3JhcENvb2tpZUphckZvclJlcXVlc3Qob3B0aW9ucy5jb29raWVKYXIpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcmVxdWVzdCh1cmwsIHJlcXVlc3RPcHRpb25zKS50aGVuKHJlcyA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZENvbnRlbnRUeXBlID0gcGFyc2VDb250ZW50VHlwZShyZXMuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSk7XG4gICAgICAgIGNvbnN0IHRyYW5zcG9ydExheWVyRW5jb2RpbmdMYWJlbCA9IHBhcnNlZENvbnRlbnRUeXBlICYmIHBhcnNlZENvbnRlbnRUeXBlLmdldChcImNoYXJzZXRcIik7XG5cbiAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3B0aW9ucywge1xuICAgICAgICAgIHVybDogcmVzLnJlcXVlc3QuaHJlZiArIHBhcnNlZFVSTC5oYXNoLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiByZXMuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSxcbiAgICAgICAgICByZWZlcnJlcjogcmVzLnJlcXVlc3QuZ2V0SGVhZGVyKFwicmVmZXJlclwiKSxcbiAgICAgICAgICBbdHJhbnNwb3J0TGF5ZXJFbmNvZGluZ0xhYmVsSGlkZGVuT3B0aW9uXTogdHJhbnNwb3J0TGF5ZXJFbmNvZGluZ0xhYmVsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXcgSlNET00ocmVzLmJvZHksIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUZpbGUoZmlsZW5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIG9wdGlvbnMgPSBub3JtYWxpemVGcm9tRmlsZU9wdGlvbnMoZmlsZW5hbWUsIG9wdGlvbnMpO1xuXG4gICAgICByZXR1cm4gZnMucmVhZEZpbGUoZmlsZW5hbWUpLnRoZW4oYnVmZmVyID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBKU0RPTShidWZmZXIsIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRnJvbVVSTE9wdGlvbnMob3B0aW9ucykge1xuICAvLyBDaGVja3Mgb24gb3B0aW9ucyB0aGF0IGFyZSBpbnZhbGlkIGZvciBgZnJvbVVSTGBcbiAgaWYgKG9wdGlvbnMudXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHN1cHBseSBhIHVybCBvcHRpb24gd2hlbiB1c2luZyBmcm9tVVJMXCIpO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHN1cHBseSBhIGNvbnRlbnRUeXBlIG9wdGlvbiB3aGVuIHVzaW5nIGZyb21VUkxcIik7XG4gIH1cblxuICAvLyBOb3JtYWxpemF0aW9uIG9mIG9wdGlvbnMgd2hpY2ggbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgcmVzdCBvZiB0aGUgZnJvbVVSTCBjb2RlIGNhbiB1c2UgdGhlbSwgYmVjYXVzZSB0aGV5IGFyZVxuICAvLyBnaXZlbiB0byByZXF1ZXN0KClcbiAgY29uc3Qgbm9ybWFsaXplZCA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy51c2VyQWdlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgIG5vcm1hbGl6ZWQudXNlckFnZW50ID0gREVGQVVMVF9VU0VSX0FHRU5UO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMucmVmZXJyZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIG5vcm1hbGl6ZWQucmVmZXJyZXIgPSAobmV3IFVSTChvcHRpb25zLnJlZmVycmVyKSkuaHJlZjtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmNvb2tpZUphciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbm9ybWFsaXplZC5jb29raWVKYXIgPSBuZXcgQ29va2llSmFyKCk7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZDtcblxuICAvLyBBbGwgb3RoZXIgb3B0aW9ucyBkb24ndCBuZWVkIHRvIGJlIHByb2Nlc3NlZCB5ZXQsIGFuZCBjYW4gYmUgdGFrZW4gY2FyZSBvZiBpbiB0aGUgbm9ybWFsIGNvdXJzZSBvZiB0aGluZ3Mgd2hlblxuICAvLyBgZnJvbVVSTGAgY2FsbHMgYG5ldyBKU0RPTShodG1sLCBvcHRpb25zKWAuXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZyb21GaWxlT3B0aW9ucyhmaWxlbmFtZSwgb3B0aW9ucykge1xuICBjb25zdCBub3JtYWxpemVkID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG5cbiAgaWYgKG5vcm1hbGl6ZWQuY29udGVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGV4dG5hbWUgPSBwYXRoLmV4dG5hbWUoZmlsZW5hbWUpO1xuICAgIGlmIChleHRuYW1lID09PSBcIi54aHRtbFwiIHx8IGV4dG5hbWUgPT09IFwiLnhtbFwiKSB7XG4gICAgICBub3JtYWxpemVkLmNvbnRlbnRUeXBlID0gXCJhcHBsaWNhdGlvbi94aHRtbCt4bWxcIjtcbiAgICB9XG4gIH1cblxuICBpZiAobm9ybWFsaXplZC51cmwgPT09IHVuZGVmaW5lZCkge1xuICAgIG5vcm1hbGl6ZWQudXJsID0gbmV3IFVSTChcImZpbGU6XCIgKyBwYXRoLnJlc29sdmUoZmlsZW5hbWUpKTtcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1PcHRpb25zKG9wdGlvbnMsIGVuY29kaW5nKSB7XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0ge1xuICAgIHdpbmRvd09wdGlvbnM6IHtcbiAgICAgIC8vIERlZmF1bHRzXG4gICAgICB1cmw6IFwiYWJvdXQ6YmxhbmtcIixcbiAgICAgIHJlZmVycmVyOiBcIlwiLFxuICAgICAgY29udGVudFR5cGU6IFwidGV4dC9odG1sXCIsXG4gICAgICBwYXJzaW5nTW9kZTogXCJodG1sXCIsXG4gICAgICB1c2VyQWdlbnQ6IERFRkFVTFRfVVNFUl9BR0VOVCxcbiAgICAgIHBhcnNlT3B0aW9uczogeyBsb2NhdGlvbkluZm86IGZhbHNlIH0sXG4gICAgICBydW5TY3JpcHRzOiB1bmRlZmluZWQsXG4gICAgICBlbmNvZGluZyxcblxuICAgICAgLy8gRGVmYXVsdHMgZmlsbGVkIGluIGxhdGVyXG4gICAgICB2aXJ0dWFsQ29uc29sZTogdW5kZWZpbmVkLFxuICAgICAgY29va2llSmFyOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgLy8gRGVmYXVsdHNcbiAgICByZXNvdXJjZXM6IHVuZGVmaW5lZCxcbiAgICBiZWZvcmVQYXJzZSgpIHsgfVxuICB9O1xuXG4gIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZVBhcnNlZCA9IHBhcnNlQ29udGVudFR5cGUob3B0aW9ucy5jb250ZW50VHlwZSk7XG4gICAgaWYgKGNvbnRlbnRUeXBlUGFyc2VkID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDb3VsZCBub3QgcGFyc2UgdGhlIGdpdmVuIGNvbnRlbnQgdHlwZSBvZiBcIiR7b3B0aW9ucy5jb250ZW50VHlwZX1cImApO1xuICAgIH1cblxuICAgIGlmICghY29udGVudFR5cGVQYXJzZWQuaXNIVE1MKCkgJiYgIWNvbnRlbnRUeXBlUGFyc2VkLmlzWE1MKCkpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBUaGUgZ2l2ZW4gY29udGVudCB0eXBlIG9mIFwiJHtvcHRpb25zLmNvbnRlbnRUeXBlfVwiIHdhcyBub3QgYSBIVE1MIG9yIFhNTCBjb250ZW50IHR5cGVgKTtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm1lZC53aW5kb3dPcHRpb25zLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVQYXJzZWQudHlwZSArIFwiL1wiICsgY29udGVudFR5cGVQYXJzZWQuc3VidHlwZTtcbiAgICB0cmFuc2Zvcm1lZC53aW5kb3dPcHRpb25zLnBhcnNpbmdNb2RlID0gY29udGVudFR5cGVQYXJzZWQuaXNIVE1MKCkgPyBcImh0bWxcIiA6IFwieG1sXCI7XG4gIH1cblxuICBpZiAob3B0aW9ucy51cmwgIT09IHVuZGVmaW5lZCkge1xuICAgIHRyYW5zZm9ybWVkLndpbmRvd09wdGlvbnMudXJsID0gKG5ldyBVUkwob3B0aW9ucy51cmwpKS5ocmVmO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMucmVmZXJyZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHRyYW5zZm9ybWVkLndpbmRvd09wdGlvbnMucmVmZXJyZXIgPSAobmV3IFVSTChvcHRpb25zLnJlZmVycmVyKSkuaHJlZjtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnVzZXJBZ2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdHJhbnNmb3JtZWQud2luZG93T3B0aW9ucy51c2VyQWdlbnQgPSBTdHJpbmcob3B0aW9ucy51c2VyQWdlbnQpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuaW5jbHVkZU5vZGVMb2NhdGlvbnMpIHtcbiAgICBpZiAodHJhbnNmb3JtZWQud2luZG93T3B0aW9ucy5wYXJzaW5nTW9kZSA9PT0gXCJ4bWxcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBzZXQgaW5jbHVkZU5vZGVMb2NhdGlvbnMgdG8gdHJ1ZSB3aXRoIGFuIFhNTCBjb250ZW50IHR5cGVcIik7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtZWQud2luZG93T3B0aW9ucy5wYXJzZU9wdGlvbnMgPSB7IGxvY2F0aW9uSW5mbzogdHJ1ZSB9O1xuICB9XG5cbiAgdHJhbnNmb3JtZWQud2luZG93T3B0aW9ucy5jb29raWVKYXIgPSBvcHRpb25zLmNvb2tpZUphciA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb29raWVKYXIoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvb2tpZUphcjtcblxuICB0cmFuc2Zvcm1lZC53aW5kb3dPcHRpb25zLnZpcnR1YWxDb25zb2xlID0gb3B0aW9ucy52aXJ0dWFsQ29uc29sZSA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldyBWaXJ0dWFsQ29uc29sZSgpKS5zZW5kVG8oY29uc29sZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnZpcnR1YWxDb25zb2xlO1xuXG4gIGlmIChvcHRpb25zLnJlc291cmNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdHJhbnNmb3JtZWQucmVzb3VyY2VzID0gU3RyaW5nKG9wdGlvbnMucmVzb3VyY2VzKTtcbiAgICBpZiAodHJhbnNmb3JtZWQucmVzb3VyY2VzICE9PSBcInVzYWJsZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgcmVzb3VyY2VzIG11c3QgYmUgdW5kZWZpbmVkIG9yIFwidXNhYmxlXCJgKTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy5ydW5TY3JpcHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB0cmFuc2Zvcm1lZC53aW5kb3dPcHRpb25zLnJ1blNjcmlwdHMgPSBTdHJpbmcob3B0aW9ucy5ydW5TY3JpcHRzKTtcbiAgICBpZiAodHJhbnNmb3JtZWQud2luZG93T3B0aW9ucy5ydW5TY3JpcHRzICE9PSBcImRhbmdlcm91c2x5XCIgJiZcbiAgICAgICAgdHJhbnNmb3JtZWQud2luZG93T3B0aW9ucy5ydW5TY3JpcHRzICE9PSBcIm91dHNpZGUtb25seVwiKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgcnVuU2NyaXB0cyBtdXN0IGJlIHVuZGVmaW5lZCwgXCJkYW5nZXJvdXNseVwiLCBvciBcIm91dHNpZGUtb25seVwiYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuYmVmb3JlUGFyc2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHRyYW5zZm9ybWVkLmJlZm9yZVBhcnNlID0gb3B0aW9ucy5iZWZvcmVQYXJzZTtcbiAgfVxuXG4gIC8vIGNvbmN1cnJlbnROb2RlSXRlcmF0b3JzPz9cblxuICByZXR1cm4gdHJhbnNmb3JtZWQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhUTUwoaHRtbCA9IFwiXCIsIHRyYW5zcG9ydExheWVyRW5jb2RpbmdMYWJlbCkge1xuICBsZXQgZW5jb2RpbmcgPSBcIlVURi04XCI7XG5cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhodG1sKSkge1xuICAgIGh0bWwgPSBCdWZmZXIuZnJvbShodG1sLmJ1ZmZlciwgaHRtbC5ieXRlT2Zmc2V0LCBodG1sLmJ5dGVMZW5ndGgpO1xuICB9IGVsc2UgaWYgKGh0bWwgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIGh0bWwgPSBCdWZmZXIuZnJvbShodG1sKTtcbiAgfVxuXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoaHRtbCkpIHtcbiAgICBlbmNvZGluZyA9IHNuaWZmSFRNTEVuY29kaW5nKGh0bWwsIHsgZGVmYXVsdEVuY29kaW5nOiBcIndpbmRvd3MtMTI1MlwiLCB0cmFuc3BvcnRMYXllckVuY29kaW5nTGFiZWwgfSk7XG4gICAgaHRtbCA9IHdoYXR3Z0VuY29kaW5nLmRlY29kZShodG1sLCBlbmNvZGluZyk7XG4gIH0gZWxzZSB7XG4gICAgaHRtbCA9IFN0cmluZyhodG1sKTtcbiAgfVxuXG4gIHJldHVybiB7IGh0bWwsIGVuY29kaW5nIH07XG59XG5cbmV4cG9ydHMuSlNET00gPSBKU0RPTTtcblxuZXhwb3J0cy5WaXJ0dWFsQ29uc29sZSA9IFZpcnR1YWxDb25zb2xlO1xuZXhwb3J0cy5Db29raWVKYXIgPSBDb29raWVKYXI7XG5cbmV4cG9ydHMudG91Z2hDb29raWUgPSB0b3VnaENvb2tpZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB3ZWJJRExDb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB7IENTU1N0eWxlRGVjbGFyYXRpb24gfSA9IHJlcXVpcmUoXCJjc3NzdHlsZVwiKTtcbmNvbnN0IG5vdEltcGxlbWVudGVkID0gcmVxdWlyZShcIi4vbm90LWltcGxlbWVudGVkXCIpO1xuY29uc3QgVmlydHVhbENvbnNvbGUgPSByZXF1aXJlKFwiLi4vdmlydHVhbC1jb25zb2xlXCIpO1xuY29uc3QgeyBkZWZpbmUgfSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmNvbnN0IEV2ZW50VGFyZ2V0ID0gcmVxdWlyZShcIi4uL2xpdmluZy9nZW5lcmF0ZWQvRXZlbnRUYXJnZXRcIik7XG5jb25zdCBuYW1lZFByb3BlcnRpZXNXaW5kb3cgPSByZXF1aXJlKFwiLi4vbGl2aW5nL25hbWVkLXByb3BlcnRpZXMtd2luZG93XCIpO1xuY29uc3QgY3Nzb20gPSByZXF1aXJlKFwiY3Nzb21cIik7XG5jb25zdCBwb3N0TWVzc2FnZSA9IHJlcXVpcmUoXCIuLi9saXZpbmcvcG9zdC1tZXNzYWdlXCIpO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgYnRvYSA9IHJlcXVpcmUoXCJhYmFiXCIpLmJ0b2E7XG5jb25zdCBhdG9iID0gcmVxdWlyZShcImFiYWJcIikuYXRvYjtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2xpdmluZy9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBjcmVhdGVYTUxIdHRwUmVxdWVzdCA9IHJlcXVpcmUoXCIuLi9saXZpbmcveG1saHR0cHJlcXVlc3RcIik7XG5jb25zdCBjcmVhdGVGaWxlUmVhZGVyID0gcmVxdWlyZShcIi4uL2xpdmluZy9nZW5lcmF0ZWQvRmlsZVJlYWRlclwiKS5jcmVhdGVJbnRlcmZhY2U7XG5jb25zdCBEb2N1bWVudCA9IHJlcXVpcmUoXCIuLi9saXZpbmcvZ2VuZXJhdGVkL0RvY3VtZW50XCIpO1xuY29uc3QgTmF2aWdhdG9yID0gcmVxdWlyZShcIi4uL2xpdmluZy9nZW5lcmF0ZWQvTmF2aWdhdG9yXCIpO1xuY29uc3QgcmVwb3J0RXhjZXB0aW9uID0gcmVxdWlyZShcIi4uL2xpdmluZy9oZWxwZXJzL3J1bnRpbWUtc2NyaXB0LWVycm9yc1wiKTtcbmNvbnN0IHsgY29udGV4dGlmeVdpbmRvdyB9ID0gcmVxdWlyZShcIi4vZG9jdW1lbnRmZWF0dXJlcy5qc1wiKTtcblxuLy8gTkI6IHRoZSByZXF1aXJlKCkgbXVzdCBiZSBhZnRlciBhc3NpZ25pbmcgYG1vZHVsZS5leHBvcnRzYCBiZWNhdXNlIHRoaXMgcmVxdWlyZSgpIGlzIGNpcmN1bGFyXG4vLyBUT0RPOiB0aGlzIGFib3ZlIG5vdGUgbWlnaHQgbm90IGV2ZW4gYmUgdHJ1ZSBhbnltb3JlLi4uIGZpZ3VyZSBvdXQgdGhlIGN5Y2xlIGFuZCBkb2N1bWVudCBpdCwgb3IgY2xlYW4gdXAuXG5tb2R1bGUuZXhwb3J0cyA9IFdpbmRvdztcbmNvbnN0IGRvbSA9IHJlcXVpcmUoXCIuLi9saXZpbmdcIik7XG5cbmNvbnN0IGNzc1NlbGVjdG9yU3BsaXRSRSA9IC8oKD86W14sXCInXXxcIlteXCJdKlwifCdbXiddKicpKykvO1xuXG5jb25zdCBkZWZhdWx0U3R5bGVTaGVldCA9IGNzc29tLnBhcnNlKHJlcXVpcmUoXCIuL2RlZmF1bHQtc3R5bGVzaGVldFwiKSk7XG5cbmRvbS5XaW5kb3cgPSBXaW5kb3c7XG5cbi8vIE5PVEU6IHBlciBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNHbG9iYWwsIGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBXaW5kb3cgb2JqZWN0IG11c3QgYmUgb3duLXByb3BlcnRpZXMuXG4vLyBUaGF0IGlzIHdoeSB3ZSBhc3NpZ24gZXZlcnl0aGluZyBpbnNpZGUgb2YgdGhlIGNvbnN0cnVjdG9yLCBpbnN0ZWFkIG9mIHVzaW5nIGEgc2hhcmVkIHByb3RvdHlwZS5cbi8vIFlvdSBjYW4gdmVyaWZ5IHRoaXMgaW4gZS5nLiBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyLCB3aGljaCBkbyBhIGdvb2Qgam9iIHdpdGggV2ViIElETCBjb21wbGlhbmNlLlxuXG5mdW5jdGlvbiBXaW5kb3cob3B0aW9ucykge1xuICBFdmVudFRhcmdldC5zZXR1cCh0aGlzKTtcblxuICBjb25zdCB3aW5kb3cgPSB0aGlzO1xuXG4gIC8vLy8vIElOVEVSRkFDRVMgRlJPTSBUSEUgRE9NXG4gIC8vIFRPRE86IGNvbnNpZGVyIGEgbW9kZSBvZiBzb21lIHNvcnQgd2hlcmUgdGhlc2UgYXJlIG5vdCBzaGFyZWQgYmV0d2VlbiBhbGwgRE9NIGluc3RhbmNlc1xuICAvLyBJdCdkIGJlIHZlcnkgbWVtb3J5LWV4cGVuc2l2ZSBpbiBtb3N0IGNhc2VzLCB0aG91Z2guXG4gIGZvciAoY29uc3QgbmFtZSBpbiBkb20pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCBuYW1lLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGRvbVtuYW1lXVxuICAgIH0pO1xuICB9XG4gIHRoaXMuX2NvcmUgPSBkb207XG5cbiAgLy8vLy8gUFJJVkFURSBEQVRBIFBST1BFUlRJRVNcblxuICAvLyB2bSBpbml0aWFsaXphdGlvbiBpcyBkZWZlcmVkIHVudGlsIHNjcmlwdCBwcm9jZXNzaW5nIGlzIGFjdGl2YXRlZFxuICB0aGlzLl9nbG9iYWxQcm94eSA9IHRoaXM7XG5cbiAgdGhpcy5fX3RpbWVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgLy8gTGlzdCBvcHRpb25zIGV4cGxpY2l0bHkgdG8gYmUgY2xlYXIgd2hpY2ggYXJlIHBhc3NlZCB0aHJvdWdoXG4gIHRoaXMuX2RvY3VtZW50ID0gRG9jdW1lbnQuY3JlYXRlKFtdLCB7XG4gICAgY29yZTogZG9tLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHBhcnNpbmdNb2RlOiBvcHRpb25zLnBhcnNpbmdNb2RlLFxuICAgICAgY29udGVudFR5cGU6IG9wdGlvbnMuY29udGVudFR5cGUsXG4gICAgICBlbmNvZGluZzogb3B0aW9ucy5lbmNvZGluZyxcbiAgICAgIGNvb2tpZUphcjogb3B0aW9ucy5jb29raWVKYXIsXG4gICAgICBwYXJzZXI6IG9wdGlvbnMucGFyc2VyLFxuICAgICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICAgIGxhc3RNb2RpZmllZDogb3B0aW9ucy5sYXN0TW9kaWZpZWQsXG4gICAgICByZWZlcnJlcjogb3B0aW9ucy5yZWZlcnJlcixcbiAgICAgIGNvb2tpZTogb3B0aW9ucy5jb29raWUsXG4gICAgICBkZWZlckNsb3NlOiBvcHRpb25zLmRlZmVyQ2xvc2UsXG4gICAgICByZXNvdXJjZUxvYWRlcjogb3B0aW9ucy5yZXNvdXJjZUxvYWRlcixcbiAgICAgIGNvbmN1cnJlbnROb2RlSXRlcmF0b3JzOiBvcHRpb25zLmNvbmN1cnJlbnROb2RlSXRlcmF0b3JzLFxuICAgICAgcG9vbDogb3B0aW9ucy5wb29sLFxuICAgICAgYWdlbnQ6IG9wdGlvbnMuYWdlbnQsXG4gICAgICBhZ2VudENsYXNzOiBvcHRpb25zLmFnZW50Q2xhc3MsXG4gICAgICBhZ2VudE9wdGlvbnM6IG9wdGlvbnMuYWdlbnRPcHRpb25zLFxuICAgICAgc3RyaWN0U1NMOiBvcHRpb25zLnN0cmljdFNTTCxcbiAgICAgIHByb3h5OiBvcHRpb25zLnByb3h5LFxuICAgICAgcGFyc2VPcHRpb25zOiBvcHRpb25zLnBhcnNlT3B0aW9ucyxcbiAgICAgIGRlZmF1bHRWaWV3OiB0aGlzLl9nbG9iYWxQcm94eSxcbiAgICAgIGdsb2JhbDogdGhpc1xuICAgIH1cbiAgfSk7XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3Nlc3Npb24taGlzdG9yeVxuICB0aGlzLl9zZXNzaW9uSGlzdG9yeSA9IFt7XG4gICAgZG9jdW1lbnQ6IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXMuX2RvY3VtZW50KSxcbiAgICB1cmw6IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXMuX2RvY3VtZW50KS5fVVJMLFxuICAgIHN0YXRlT2JqZWN0OiBudWxsXG4gIH1dO1xuICB0aGlzLl9jdXJyZW50U2Vzc2lvbkhpc3RvcnlFbnRyeUluZGV4ID0gMDtcblxuICAvLyBUT0RPIE5FV0FQSSBjYW4gcmVtb3ZlIHRoaXNcbiAgaWYgKG9wdGlvbnMudmlydHVhbENvbnNvbGUpIHtcbiAgICBpZiAob3B0aW9ucy52aXJ0dWFsQ29uc29sZSBpbnN0YW5jZW9mIFZpcnR1YWxDb25zb2xlKSB7XG4gICAgICB0aGlzLl92aXJ0dWFsQ29uc29sZSA9IG9wdGlvbnMudmlydHVhbENvbnNvbGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwib3B0aW9ucy52aXJ0dWFsQ29uc29sZSBtdXN0IGJlIGEgVmlydHVhbENvbnNvbGUgKGZyb20gY3JlYXRlVmlydHVhbENvbnNvbGUpXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl92aXJ0dWFsQ29uc29sZSA9IG5ldyBWaXJ0dWFsQ29uc29sZSgpO1xuICB9XG5cbiAgdGhpcy5fcnVuU2NyaXB0cyA9IG9wdGlvbnMucnVuU2NyaXB0cztcbiAgaWYgKHRoaXMuX3J1blNjcmlwdHMgPT09IFwib3V0c2lkZS1vbmx5XCIgfHwgdGhpcy5fcnVuU2NyaXB0cyA9PT0gXCJkYW5nZXJvdXNseVwiKSB7XG4gICAgY29udGV4dGlmeVdpbmRvdyh0aGlzKTtcbiAgfVxuXG4gIC8vIFNldCB1cCB0aGUgd2luZG93IGFzIGlmIGl0J3MgYSB0b3AgbGV2ZWwgd2luZG93LlxuICAvLyBJZiBpdCdzIG5vdCwgdGhlbiByZWZlcmVuY2VzIHdpbGwgYmUgY29ycmVjdGVkIGJ5IGZyYW1lL2lmcmFtZSBjb2RlLlxuICB0aGlzLl9wYXJlbnQgPSB0aGlzLl90b3AgPSB0aGlzLl9nbG9iYWxQcm94eTtcbiAgdGhpcy5fZnJhbWVFbGVtZW50ID0gbnVsbDtcblxuICAvLyBUaGlzIGltcGxlbWVudHMgd2luZG93LmZyYW1lcy5sZW5ndGgsIHNpbmNlIHdpbmRvdy5mcmFtZXMgcmV0dXJucyBhXG4gIC8vIHNlbGYgcmVmZXJlbmNlIHRvIHRoZSB3aW5kb3cgb2JqZWN0LiAgVGhpcyB2YWx1ZSBpcyBpbmNyZW1lbnRlZCBpbiB0aGVcbiAgLy8gSFRNTEZyYW1lRWxlbWVudCBpbXBsZW1lbnRhdGlvbi5cbiAgdGhpcy5fbGVuZ3RoID0gMDtcblxuICAvLy8vLyBHRVRURVJTXG5cbiAgY29uc3QgbmF2aWdhdG9yID0gTmF2aWdhdG9yLmNyZWF0ZShbXSwgeyB1c2VyQWdlbnQ6IG9wdGlvbnMudXNlckFnZW50IH0pO1xuXG4gIGRlZmluZSh0aGlzLCB7XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgIHJldHVybiB3aW5kb3cuX2xlbmd0aDtcbiAgICB9LFxuICAgIGdldCB3aW5kb3coKSB7XG4gICAgICByZXR1cm4gd2luZG93Ll9nbG9iYWxQcm94eTtcbiAgICB9LFxuICAgIGdldCBmcmFtZUVsZW1lbnQoKSB7XG4gICAgICByZXR1cm4gd2luZG93Ll9mcmFtZUVsZW1lbnQ7XG4gICAgfSxcbiAgICBnZXQgZnJhbWVzKCkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5fZ2xvYmFsUHJveHk7XG4gICAgfSxcbiAgICBnZXQgc2VsZigpIHtcbiAgICAgIHJldHVybiB3aW5kb3cuX2dsb2JhbFByb3h5O1xuICAgIH0sXG4gICAgZ2V0IHBhcmVudCgpIHtcbiAgICAgIHJldHVybiB3aW5kb3cuX3BhcmVudDtcbiAgICB9LFxuICAgIGdldCB0b3AoKSB7XG4gICAgICByZXR1cm4gd2luZG93Ll90b3A7XG4gICAgfSxcbiAgICBnZXQgZG9jdW1lbnQoKSB7XG4gICAgICByZXR1cm4gd2luZG93Ll9kb2N1bWVudDtcbiAgICB9LFxuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgIHJldHVybiBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih3aW5kb3cuX2RvY3VtZW50KS5fbG9jYXRpb24pO1xuICAgIH0sXG4gICAgZ2V0IGhpc3RvcnkoKSB7XG4gICAgICByZXR1cm4gaWRsVXRpbHMud3JhcHBlckZvckltcGwoaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIod2luZG93Ll9kb2N1bWVudCkuX2hpc3RvcnkpO1xuICAgIH0sXG4gICAgZ2V0IG5hdmlnYXRvcigpIHtcbiAgICAgIHJldHVybiBuYXZpZ2F0b3I7XG4gICAgfVxuICB9KTtcblxuICBuYW1lZFByb3BlcnRpZXNXaW5kb3cuaW5pdGlhbGl6ZVdpbmRvdyh0aGlzLCBkb20uSFRNTENvbGxlY3Rpb24pO1xuXG4gIC8vLy8vIE1FVEhPRFMgZm9yIFtJbXBsaWNpdFRoaXNdIGhhY2tcbiAgLy8gU2VlIGh0dHBzOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy9wdWJsaWMtc2NyaXB0LWNvb3JkLzIwMTVKYW5NYXIvMDEwOS5odG1sXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lciA9IHRoaXMuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMpO1xuICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh0aGlzKTtcbiAgdGhpcy5kaXNwYXRjaEV2ZW50ID0gdGhpcy5kaXNwYXRjaEV2ZW50LmJpbmQodGhpcyk7XG5cbiAgLy8vLy8gTUVUSE9EU1xuXG4gIGxldCBsYXRlc3RUaW1lcklkID0gMDtcblxuICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAoZm4sIG1zKSB7XG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcmdzW2kgLSAyXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0VGltZXIod2luZG93LCBzZXRUaW1lb3V0LCBjbGVhclRpbWVvdXQsICsrbGF0ZXN0VGltZXJJZCwgZm4sIG1zLCBhcmdzKTtcbiAgfTtcbiAgdGhpcy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uIChmbiwgbXMpIHtcbiAgICBjb25zdCBhcmdzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFyZ3NbaSAtIDJdID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gc3RhcnRUaW1lcih3aW5kb3csIHNldEludGVydmFsLCBjbGVhckludGVydmFsLCArK2xhdGVzdFRpbWVySWQsIGZuLCBtcywgYXJncyk7XG4gIH07XG4gIHRoaXMuY2xlYXJJbnRlcnZhbCA9IHN0b3BUaW1lci5iaW5kKHRoaXMsIHdpbmRvdyk7XG4gIHRoaXMuY2xlYXJUaW1lb3V0ID0gc3RvcFRpbWVyLmJpbmQodGhpcywgd2luZG93KTtcbiAgdGhpcy5fX3N0b3BBbGxUaW1lcnMgPSBzdG9wQWxsVGltZXJzLmJpbmQodGhpcywgd2luZG93KTtcblxuICBmdW5jdGlvbiBPcHRpb24odGV4dCwgdmFsdWUsIGRlZmF1bHRTZWxlY3RlZCwgc2VsZWN0ZWQpIHtcbiAgICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0ZXh0ID0gXCJcIjtcbiAgICB9XG4gICAgdGV4dCA9IHdlYklETENvbnZlcnNpb25zLkRPTVN0cmluZyh0ZXh0KTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9IHdlYklETENvbnZlcnNpb25zLkRPTVN0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZGVmYXVsdFNlbGVjdGVkID0gd2ViSURMQ29udmVyc2lvbnMuYm9vbGVhbihkZWZhdWx0U2VsZWN0ZWQpO1xuICAgIHNlbGVjdGVkID0gd2ViSURMQ29udmVyc2lvbnMuYm9vbGVhbihzZWxlY3RlZCk7XG5cbiAgICBjb25zdCBvcHRpb24gPSB3aW5kb3cuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIik7XG4gICAgY29uc3QgaW1wbCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKG9wdGlvbik7XG5cbiAgICBpZiAodGV4dCAhPT0gXCJcIikge1xuICAgICAgaW1wbC50ZXh0ID0gdGV4dDtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGltcGwuc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAoZGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICBpbXBsLnNldEF0dHJpYnV0ZShcInNlbGVjdGVkXCIsIFwiXCIpO1xuICAgIH1cbiAgICBpbXBsLl9zZWxlY3RlZG5lc3MgPSBzZWxlY3RlZDtcblxuICAgIHJldHVybiBvcHRpb247XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9wdGlvbiwgXCJwcm90b3R5cGVcIiwge1xuICAgIHZhbHVlOiB0aGlzLkhUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgXCJPcHRpb25cIiwge1xuICAgIHZhbHVlOiBPcHRpb24sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIEltYWdlKCkge1xuICAgIGNvbnN0IGltZyA9IHdpbmRvdy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICBjb25zdCBpbXBsID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIoaW1nKTtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgaW1wbC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBTdHJpbmcoYXJndW1lbnRzWzBdKSk7XG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgaW1wbC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgU3RyaW5nKGFyZ3VtZW50c1sxXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBpbWc7XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEltYWdlLCBcInByb3RvdHlwZVwiLCB7XG4gICAgdmFsdWU6IHRoaXMuSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIFwiSW1hZ2VcIiwge1xuICAgIHZhbHVlOiBJbWFnZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gQXVkaW8oc3JjKSB7XG4gICAgY29uc3QgYXVkaW8gPSB3aW5kb3cuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhdWRpb1wiKTtcbiAgICBjb25zdCBpbXBsID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIoYXVkaW8pO1xuICAgIGltcGwuc2V0QXR0cmlidXRlKFwicHJlbG9hZFwiLCBcImF1dG9cIik7XG5cbiAgICBpZiAoc3JjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGltcGwuc2V0QXR0cmlidXRlKFwic3JjXCIsIFN0cmluZyhzcmMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXVkaW87XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEF1ZGlvLCBcInByb3RvdHlwZVwiLCB7XG4gICAgdmFsdWU6IHRoaXMuSFRNTEF1ZGlvRWxlbWVudC5wcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIFwiQXVkaW9cIiwge1xuICAgIHZhbHVlOiBBdWRpbyxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gd3JhcENvbnNvbGVNZXRob2QobWV0aG9kKSB7XG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICB3aW5kb3cuX3ZpcnR1YWxDb25zb2xlLmVtaXQobWV0aG9kLCAuLi5hcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgdGhpcy5wb3N0TWVzc2FnZSA9IHBvc3RNZXNzYWdlO1xuXG4gIHRoaXMuYXRvYiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhdG9iKHN0cik7XG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9DSEFSQUNURVJfRVJSLFxuICAgICAgICBcIlRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHRoaXMuYnRvYSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBidG9hKHN0cik7XG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9DSEFSQUNURVJfRVJSLFxuICAgICAgICBcIlRoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHRoaXMuRmlsZVJlYWRlciA9IGNyZWF0ZUZpbGVSZWFkZXIoe1xuICAgIHdpbmRvdzogdGhpc1xuICB9KS5pbnRlcmZhY2U7XG5cbiAgdGhpcy5YTUxIdHRwUmVxdWVzdCA9IGNyZWF0ZVhNTEh0dHBSZXF1ZXN0KHRoaXMpO1xuXG4gIC8vIFRPRE86IG5lY2Vzc2FyeSBmb3IgQmxvYiBhbmQgRmlsZVJlYWRlciBkdWUgdG8gZGlmZmVyZW50LWdsb2JhbHMgd2VpcmRuZXNzOyBpbnZlc3RpZ2F0ZSBob3cgdG8gYXZvaWQgdGhpcy5cbiAgdGhpcy5BcnJheUJ1ZmZlciA9IEFycmF5QnVmZmVyO1xuICB0aGlzLkludDhBcnJheSA9IEludDhBcnJheTtcbiAgdGhpcy5VaW50OEFycmF5ID0gVWludDhBcnJheTtcbiAgdGhpcy5VaW50OENsYW1wZWRBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5O1xuICB0aGlzLkludDE2QXJyYXkgPSBJbnQxNkFycmF5O1xuICB0aGlzLlVpbnQxNkFycmF5ID0gVWludDE2QXJyYXk7XG4gIHRoaXMuSW50MzJBcnJheSA9IEludDMyQXJyYXk7XG4gIHRoaXMuVWludDMyQXJyYXkgPSBVaW50MzJBcnJheTtcbiAgdGhpcy5GbG9hdDMyQXJyYXkgPSBGbG9hdDMyQXJyYXk7XG4gIHRoaXMuRmxvYXQ2NEFycmF5ID0gRmxvYXQ2NEFycmF5O1xuXG4gIHRoaXMuc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtYW5hZ2VyID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpcy5fZG9jdW1lbnQpLl9yZXF1ZXN0TWFuYWdlcjtcbiAgICBpZiAobWFuYWdlcikge1xuICAgICAgbWFuYWdlci5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNsb3NlIGNoaWxkIGZyYW1lIHdpbmRvd3MsIHRoZW4gb3Vyc2VsdmVzLlxuICAgIGNvbnN0IGN1cnJlbnRXaW5kb3cgPSB0aGlzO1xuICAgIChmdW5jdGlvbiB3aW5kb3dDbGVhbmVyKHdpbmRvd1RvQ2xlYW4pIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2luZG93VG9DbGVhbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB3aW5kb3dDbGVhbmVyKHdpbmRvd1RvQ2xlYW5baV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBXZVwicmUgYWxyZWFkeSBpbiBvdXIgb3duIHdpbmRvdy5jbG9zZSgpLlxuICAgICAgaWYgKHdpbmRvd1RvQ2xlYW4gIT09IGN1cnJlbnRXaW5kb3cpIHtcbiAgICAgICAgd2luZG93VG9DbGVhbi5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0odGhpcykpO1xuXG4gICAgLy8gQ2xlYXIgb3V0IGFsbCBsaXN0ZW5lcnMuIEFueSBpbi1mbGlnaHQgb3IgdXBjb21pbmcgZXZlbnRzIHNob3VsZCBub3QgZ2V0IGRlbGl2ZXJlZC5cbiAgICBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzKS5fZXZlbnRMaXN0ZW5lcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgaWYgKHRoaXMuX2RvY3VtZW50KSB7XG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnQuYm9keSkge1xuICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmlubmVySFRNTCA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9kb2N1bWVudC5jbG9zZSkge1xuICAgICAgICAvLyBJdCdzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIGNsZWFyIG91dCB0aGUgbGlzdGVuZXJzIGhlcmUgYmVjYXVzZSBkb2N1bWVudC5jbG9zZSgpIGNhdXNlcyBhIFwibG9hZFwiIGV2ZW50IHRvXG4gICAgICAgIC8vIGZpcmUuXG4gICAgICAgIGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXMuX2RvY3VtZW50KS5fZXZlbnRMaXN0ZW5lcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9kb2N1bWVudC5jbG9zZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgZG9jID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpcy5fZG9jdW1lbnQpO1xuICAgICAgaWYgKGRvYy5fcmVxdWVzdE1hbmFnZXIpIHtcbiAgICAgICAgZG9jLl9yZXF1ZXN0TWFuYWdlci5jbG9zZSgpO1xuICAgICAgfVxuICAgICAgZGVsZXRlIHRoaXMuX2RvY3VtZW50O1xuICAgIH1cblxuICAgIHN0b3BBbGxUaW1lcnMoY3VycmVudFdpbmRvdyk7XG4gIH07XG5cbiAgdGhpcy5nZXRDb21wdXRlZFN0eWxlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBjb25zdCBzID0gbm9kZS5zdHlsZTtcbiAgICBjb25zdCBjcyA9IG5ldyBDU1NTdHlsZURlY2xhcmF0aW9uKCk7XG4gICAgY29uc3QgZm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xuXG4gICAgZnVuY3Rpb24gc2V0UHJvcGVydGllc0Zyb21SdWxlKHJ1bGUpIHtcbiAgICAgIGlmICghcnVsZS5zZWxlY3RvclRleHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWxlY3RvcnMgPSBydWxlLnNlbGVjdG9yVGV4dC5zcGxpdChjc3NTZWxlY3RvclNwbGl0UkUpO1xuICAgICAgbGV0IG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3Qgc2VsZWN0b3JUZXh0IG9mIHNlbGVjdG9ycykge1xuICAgICAgICBpZiAoc2VsZWN0b3JUZXh0ICE9PSBcIlwiICYmIHNlbGVjdG9yVGV4dCAhPT0gXCIsXCIgJiYgIW1hdGNoZWQgJiYgbWF0Y2hlc0RvbnRUaHJvdyhub2RlLCBzZWxlY3RvclRleHQpKSB7XG4gICAgICAgICAgbWF0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgZm9yRWFjaC5jYWxsKHJ1bGUuc3R5bGUsIHByb3BlcnR5ID0+IHtcbiAgICAgICAgICAgIGNzLnNldFByb3BlcnR5KHByb3BlcnR5LCBydWxlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpLCBydWxlLnN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkocHJvcGVydHkpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRTdHlsZXNGcm9tU3R5bGVTaGVldChzaGVldCkge1xuICAgICAgZm9yRWFjaC5jYWxsKHNoZWV0LmNzc1J1bGVzLCBydWxlID0+IHtcbiAgICAgICAgaWYgKHJ1bGUubWVkaWEpIHtcbiAgICAgICAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChydWxlLm1lZGlhLCBcInNjcmVlblwiKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGZvckVhY2guY2FsbChydWxlLmNzc1J1bGVzLCBzZXRQcm9wZXJ0aWVzRnJvbVJ1bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRQcm9wZXJ0aWVzRnJvbVJ1bGUocnVsZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlYWRTdHlsZXNGcm9tU3R5bGVTaGVldChkZWZhdWx0U3R5bGVTaGVldCk7XG4gICAgZm9yRWFjaC5jYWxsKG5vZGUub3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cywgcmVhZFN0eWxlc0Zyb21TdHlsZVNoZWV0KTtcblxuICAgIGZvckVhY2guY2FsbChzLCBwcm9wZXJ0eSA9PiB7XG4gICAgICBjcy5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgcy5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSwgcy5nZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BlcnR5KSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3M7XG4gIH07XG5cbiAgLy8vLy8gUFVCTElDIERBVEEgUFJPUEVSVElFUyAoVE9ETzogc2hvdWxkIGJlIGdldHRlcnMpXG5cbiAgdGhpcy5jb25zb2xlID0ge1xuICAgIGFzc2VydDogd3JhcENvbnNvbGVNZXRob2QoXCJhc3NlcnRcIiksXG4gICAgY2xlYXI6IHdyYXBDb25zb2xlTWV0aG9kKFwiY2xlYXJcIiksXG4gICAgY291bnQ6IHdyYXBDb25zb2xlTWV0aG9kKFwiY291bnRcIiksXG4gICAgZGVidWc6IHdyYXBDb25zb2xlTWV0aG9kKFwiZGVidWdcIiksXG4gICAgZXJyb3I6IHdyYXBDb25zb2xlTWV0aG9kKFwiZXJyb3JcIiksXG4gICAgZ3JvdXA6IHdyYXBDb25zb2xlTWV0aG9kKFwiZ3JvdXBcIiksXG4gICAgZ3JvdXBDb2xsYXBzZWQ6IHdyYXBDb25zb2xlTWV0aG9kKFwiZ3JvdXBDb2xsYXBzZWRcIiksXG4gICAgZ3JvdXBFbmQ6IHdyYXBDb25zb2xlTWV0aG9kKFwiZ3JvdXBFbmRcIiksXG4gICAgaW5mbzogd3JhcENvbnNvbGVNZXRob2QoXCJpbmZvXCIpLFxuICAgIGxvZzogd3JhcENvbnNvbGVNZXRob2QoXCJsb2dcIiksXG4gICAgdGFibGU6IHdyYXBDb25zb2xlTWV0aG9kKFwidGFibGVcIiksXG4gICAgdGltZTogd3JhcENvbnNvbGVNZXRob2QoXCJ0aW1lXCIpLFxuICAgIHRpbWVFbmQ6IHdyYXBDb25zb2xlTWV0aG9kKFwidGltZUVuZFwiKSxcbiAgICB0cmFjZTogd3JhcENvbnNvbGVNZXRob2QoXCJ0cmFjZVwiKSxcbiAgICB3YXJuOiB3cmFwQ29uc29sZU1ldGhvZChcIndhcm5cIilcbiAgfTtcblxuICBmdW5jdGlvbiBub3RJbXBsZW1lbnRlZE1ldGhvZChuYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vdEltcGxlbWVudGVkKG5hbWUsIHdpbmRvdyk7XG4gICAgfTtcbiAgfVxuXG4gIGRlZmluZSh0aGlzLCB7XG4gICAgbmFtZTogXCJub2RlanNcIixcbiAgICBpbm5lcldpZHRoOiAxMDI0LFxuICAgIGlubmVySGVpZ2h0OiA3NjgsXG4gICAgb3V0ZXJXaWR0aDogMTAyNCxcbiAgICBvdXRlckhlaWdodDogNzY4LFxuICAgIHBhZ2VYT2Zmc2V0OiAwLFxuICAgIHBhZ2VZT2Zmc2V0OiAwLFxuICAgIHNjcmVlblg6IDAsXG4gICAgc2NyZWVuWTogMCxcbiAgICBzY3JlZW5MZWZ0OiAwLFxuICAgIHNjcmVlblRvcDogMCxcbiAgICBzY3JvbGxYOiAwLFxuICAgIHNjcm9sbFk6IDAsXG4gICAgc2Nyb2xsVG9wOiAwLFxuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2NyZWVuOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH0sXG5cbiAgICBhbGVydDogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cuYWxlcnRcIiksXG4gICAgYmx1cjogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cuYmx1clwiKSxcbiAgICBjb25maXJtOiBub3RJbXBsZW1lbnRlZE1ldGhvZChcIndpbmRvdy5jb25maXJtXCIpLFxuICAgIGNyZWF0ZVBvcHVwOiBub3RJbXBsZW1lbnRlZE1ldGhvZChcIndpbmRvdy5jcmVhdGVQb3B1cFwiKSxcbiAgICBmb2N1czogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cuZm9jdXNcIiksXG4gICAgbW92ZUJ5OiBub3RJbXBsZW1lbnRlZE1ldGhvZChcIndpbmRvdy5tb3ZlQnlcIiksXG4gICAgbW92ZVRvOiBub3RJbXBsZW1lbnRlZE1ldGhvZChcIndpbmRvdy5tb3ZlVG9cIiksXG4gICAgb3Blbjogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cub3BlblwiKSxcbiAgICBwcmludDogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cucHJpbnRcIiksXG4gICAgcHJvbXB0OiBub3RJbXBsZW1lbnRlZE1ldGhvZChcIndpbmRvdy5wcm9tcHRcIiksXG4gICAgcmVzaXplQnk6IG5vdEltcGxlbWVudGVkTWV0aG9kKFwid2luZG93LnJlc2l6ZUJ5XCIpLFxuICAgIHJlc2l6ZVRvOiBub3RJbXBsZW1lbnRlZE1ldGhvZChcIndpbmRvdy5yZXNpemVUb1wiKSxcbiAgICBzY3JvbGw6IG5vdEltcGxlbWVudGVkTWV0aG9kKFwid2luZG93LnNjcm9sbFwiKSxcbiAgICBzY3JvbGxCeTogbm90SW1wbGVtZW50ZWRNZXRob2QoXCJ3aW5kb3cuc2Nyb2xsQnlcIiksXG4gICAgc2Nyb2xsVG86IG5vdEltcGxlbWVudGVkTWV0aG9kKFwid2luZG93LnNjcm9sbFRvXCIpXG4gIH0pO1xuXG4gIC8vLy8vIElOSVRJQUxJWkFUSU9OXG5cbiAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgaWYgKCF3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybjsgLy8gd2luZG93IG1pZ2h0J3ZlIGJlZW4gY2xvc2VkIGFscmVhZHlcbiAgICB9XG5cbiAgICBpZiAod2luZG93LmRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgY29uc3QgZXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO1xuICAgICAgZXYuaW5pdEV2ZW50KFwibG9hZFwiLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXYpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBldiA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7XG4gICAgICAgIGV2LmluaXRFdmVudChcImxvYWRcIiwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXYpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKFdpbmRvdywgRXZlbnRUYXJnZXQuaW50ZXJmYWNlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihXaW5kb3cucHJvdG90eXBlLCBFdmVudFRhcmdldC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbldpbmRvdy5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiV2luZG93XCI7XG5cbmZ1bmN0aW9uIG1hdGNoZXNEb250VGhyb3coZWwsIHNlbGVjdG9yKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVsLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0VGltZXIod2luZG93LCBzdGFydEZuLCBzdG9wRm4sIHRpbWVySWQsIGNhbGxiYWNrLCBtcywgYXJncykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zdCBjb2RlID0gU3RyaW5nKGNhbGxiYWNrKTtcbiAgICBjYWxsYmFjayA9IHdpbmRvdy5fZ2xvYmFsUHJveHkuZXZhbC5iaW5kKHdpbmRvdywgY29kZSArIGBcXG4vLyMgc291cmNlVVJMPSR7d2luZG93LmxvY2F0aW9uLmhyZWZ9YCk7XG4gIH1cblxuICBjb25zdCBvbGRDYWxsYmFjayA9IGNhbGxiYWNrO1xuICBjYWxsYmFjayA9ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgb2xkQ2FsbGJhY2suYXBwbHkod2luZG93Ll9nbG9iYWxQcm94eSwgYXJncyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVwb3J0RXhjZXB0aW9uKHdpbmRvdywgZSwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZXMgPSBzdGFydEZuKGNhbGxiYWNrLCBtcyk7XG4gIHdpbmRvdy5fX3RpbWVyc1t0aW1lcklkXSA9IFtyZXMsIHN0b3BGbl07XG4gIHJldHVybiB0aW1lcklkO1xufVxuXG5mdW5jdGlvbiBzdG9wVGltZXIod2luZG93LCBpZCkge1xuICBjb25zdCB0aW1lciA9IHdpbmRvdy5fX3RpbWVyc1tpZF07XG4gIGlmICh0aW1lcikge1xuICAgIC8vIE5lZWQgdG8gLmNhbGwoKSB3aXRoIHVuZGVmaW5lZCB0byBlbnN1cmUgdGhlIHRoaXNBcmcgaXMgbm90IHRpbWVyIGl0c2VsZlxuICAgIHRpbWVyWzFdLmNhbGwodW5kZWZpbmVkLCB0aW1lclswXSk7XG4gICAgZGVsZXRlIHdpbmRvdy5fX3RpbWVyc1tpZF07XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcEFsbFRpbWVycyh3aW5kb3cpIHtcbiAgT2JqZWN0LmtleXMod2luZG93Ll9fdGltZXJzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgY29uc3QgdGltZXIgPSB3aW5kb3cuX190aW1lcnNba2V5XTtcbiAgICAvLyBOZWVkIHRvIC5jYWxsKCkgd2l0aCB1bmRlZmluZWQgdG8gZW5zdXJlIHRoZSB0aGlzQXJnIGlzIG5vdCB0aW1lciBpdHNlbGZcbiAgICB0aW1lclsxXS5jYWxsKHVuZGVmaW5lZCwgdGltZXJbMF0pO1xuICB9KTtcbiAgd2luZG93Ll9fdGltZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cbiIsIi8vIElkZWFsbHksIHdlIHdvdWxkIHVzZVxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcmVuZGVyaW5nLmh0bWwjdGhlLWNzcy11c2VyLWFnZW50LXN0eWxlLXNoZWV0LWFuZC1wcmVzZW50YXRpb25hbC1oaW50c1xuLy8gYnV0IGZvciBub3csIGp1c3QgdXNlIHRoZSB2ZXJzaW9uIGZyb20gYmxpbmsuIFRoaXMgZmlsZSBpcyBjb3BpZWQgZnJvbVxuLy8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvOTZhYTNhMjgwYWI3ZDY3MTc4YzhmMTIyYTA0OTQ5Y2U1Zjg1NzllMC9Tb3VyY2UvY29yZS9jc3MvaHRtbC5jc3Ncbi8vIChyZW1vdmVkIGEgbGluZSB3aGljaCBoYWQgb2N0YWwgbGl0ZXJhbHMgaW5zaWRlIHNpbmNlIG9jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiB0ZW1wbGF0ZSBzdHJpbmdzKVxuXG4vLyBXZSB1c2UgYSAuanMgZmlsZSBiZWNhdXNlIG90aGVyd2lzZSB3ZSBjYW4ndCBicm93c2VyaWZ5IHRoaXMuIChicmZzIGlzIHVudXNhYmxlIGR1ZSB0byBsYWNrIG9mIEVTMjAxNSBzdXBwb3J0KVxuXG5tb2R1bGUuZXhwb3J0cyA9IGBcbi8qXG4gKiBUaGUgZGVmYXVsdCBzdHlsZSBzaGVldCB1c2VkIHRvIHJlbmRlciBIVE1MLlxuICpcbiAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKVxuICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpY1xuICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyXG4gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlVcbiAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLFxuICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuXG4gKlxuICovXG5cbkBuYW1lc3BhY2UgXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG5cbmh0bWwge1xuICAgIGRpc3BsYXk6IGJsb2NrXG59XG5cbjpyb290IHtcbiAgICBzY3JvbGwtYmxvY2tzLW9uOiBzdGFydC10b3VjaCB3aGVlbC1ldmVudFxufVxuXG4vKiBjaGlsZHJlbiBvZiB0aGUgPGhlYWQ+IGVsZW1lbnQgYWxsIGhhdmUgZGlzcGxheTpub25lICovXG5oZWFkIHtcbiAgICBkaXNwbGF5OiBub25lXG59XG5cbm1ldGEge1xuICAgIGRpc3BsYXk6IG5vbmVcbn1cblxudGl0bGUge1xuICAgIGRpc3BsYXk6IG5vbmVcbn1cblxubGluayB7XG4gICAgZGlzcGxheTogbm9uZVxufVxuXG5zdHlsZSB7XG4gICAgZGlzcGxheTogbm9uZVxufVxuXG5zY3JpcHQge1xuICAgIGRpc3BsYXk6IG5vbmVcbn1cblxuLyogZ2VuZXJpYyBibG9jay1sZXZlbCBlbGVtZW50cyAqL1xuXG5ib2R5IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDhweFxufVxuXG5ib2R5Oi13ZWJraXQtZnVsbC1wYWdlLW1lZGlhIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgMCwgMClcbn1cblxucCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLXdlYmtpdC1tYXJnaW4tYmVmb3JlOiAxX19xZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYWZ0ZXI6IDFfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1zdGFydDogMDtcbiAgICAtd2Via2l0LW1hcmdpbi1lbmQ6IDA7XG59XG5cbmRpdiB7XG4gICAgZGlzcGxheTogYmxvY2tcbn1cblxubGF5ZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrXG59XG5cbmFydGljbGUsIGFzaWRlLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtYWluLCBuYXYsIHNlY3Rpb24ge1xuICAgIGRpc3BsYXk6IGJsb2NrXG59XG5cbm1hcnF1ZWUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuYWRkcmVzcyB7XG4gICAgZGlzcGxheTogYmxvY2tcbn1cblxuYmxvY2txdW90ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLXdlYmtpdC1tYXJnaW4tYmVmb3JlOiAxX19xZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYWZ0ZXI6IDFlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1zdGFydDogNDBweDtcbiAgICAtd2Via2l0LW1hcmdpbi1lbmQ6IDQwcHg7XG59XG5cbmZpZ2NhcHRpb24ge1xuICAgIGRpc3BsYXk6IGJsb2NrXG59XG5cbmZpZ3VyZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLXdlYmtpdC1tYXJnaW4tYmVmb3JlOiAxZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYWZ0ZXI6IDFlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1zdGFydDogNDBweDtcbiAgICAtd2Via2l0LW1hcmdpbi1lbmQ6IDQwcHg7XG59XG5cbnEge1xuICAgIGRpc3BsYXk6IGlubGluZVxufVxuXG5xOmJlZm9yZSB7XG4gICAgY29udGVudDogb3Blbi1xdW90ZTtcbn1cblxucTphZnRlciB7XG4gICAgY29udGVudDogY2xvc2UtcXVvdGU7XG59XG5cbmNlbnRlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLyogc3BlY2lhbCBjZW50ZXJpbmcgdG8gYmUgYWJsZSB0byBlbXVsYXRlIHRoZSBodG1sNC9uZXRzY2FwZSBiZWhhdmlvdXIgKi9cbiAgICB0ZXh0LWFsaWduOiAtd2Via2l0LWNlbnRlclxufVxuXG5ociB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLXdlYmtpdC1tYXJnaW4tYmVmb3JlOiAwLjVlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMC41ZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IGF1dG87XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiBhdXRvO1xuICAgIGJvcmRlci1zdHlsZTogaW5zZXQ7XG4gICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxufVxuXG5tYXAge1xuICAgIGRpc3BsYXk6IGlubGluZVxufVxuXG52aWRlbyB7XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbn1cblxuLyogaGVhZGluZyBlbGVtZW50cyAqL1xuXG5oMSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAyZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYmVmb3JlOiAwLjY3X19xZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYWZ0ZXI6IDAuNjdlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1zdGFydDogMDtcbiAgICAtd2Via2l0LW1hcmdpbi1lbmQ6IDA7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbn1cblxuOi13ZWJraXQtYW55KGFydGljbGUsYXNpZGUsbmF2LHNlY3Rpb24pIGgxIHtcbiAgICBmb250LXNpemU6IDEuNWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMC44M19fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAwLjgzZW07XG59XG5cbjotd2Via2l0LWFueShhcnRpY2xlLGFzaWRlLG5hdixzZWN0aW9uKSA6LXdlYmtpdC1hbnkoYXJ0aWNsZSxhc2lkZSxuYXYsc2VjdGlvbikgaDEge1xuICAgIGZvbnQtc2l6ZTogMS4xN2VtO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMV9fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAxZW07XG59XG5cbjotd2Via2l0LWFueShhcnRpY2xlLGFzaWRlLG5hdixzZWN0aW9uKSA6LXdlYmtpdC1hbnkoYXJ0aWNsZSxhc2lkZSxuYXYsc2VjdGlvbikgOi13ZWJraXQtYW55KGFydGljbGUsYXNpZGUsbmF2LHNlY3Rpb24pIGgxIHtcbiAgICBmb250LXNpemU6IDEuMDBlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDEuMzNfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMS4zM2VtO1xufVxuXG46LXdlYmtpdC1hbnkoYXJ0aWNsZSxhc2lkZSxuYXYsc2VjdGlvbikgOi13ZWJraXQtYW55KGFydGljbGUsYXNpZGUsbmF2LHNlY3Rpb24pIDotd2Via2l0LWFueShhcnRpY2xlLGFzaWRlLG5hdixzZWN0aW9uKSA6LXdlYmtpdC1hbnkoYXJ0aWNsZSxhc2lkZSxuYXYsc2VjdGlvbikgaDEge1xuICAgIGZvbnQtc2l6ZTogLjgzZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYmVmb3JlOiAxLjY3X19xZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYWZ0ZXI6IDEuNjdlbTtcbn1cblxuOi13ZWJraXQtYW55KGFydGljbGUsYXNpZGUsbmF2LHNlY3Rpb24pIDotd2Via2l0LWFueShhcnRpY2xlLGFzaWRlLG5hdixzZWN0aW9uKSA6LXdlYmtpdC1hbnkoYXJ0aWNsZSxhc2lkZSxuYXYsc2VjdGlvbikgOi13ZWJraXQtYW55KGFydGljbGUsYXNpZGUsbmF2LHNlY3Rpb24pIDotd2Via2l0LWFueShhcnRpY2xlLGFzaWRlLG5hdixzZWN0aW9uKSBoMSB7XG4gICAgZm9udC1zaXplOiAuNjdlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDIuMzNfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMi4zM2VtO1xufVxuXG5oMiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1iZWZvcmU6IDAuODNfX3FlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMC44M2VtO1xuICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiAwO1xuICAgIC13ZWJraXQtbWFyZ2luLWVuZDogMDtcbiAgICBmb250LXdlaWdodDogYm9sZFxufVxuXG5oMyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAxLjE3ZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYmVmb3JlOiAxX19xZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tYWZ0ZXI6IDFlbTtcbiAgICAtd2Via2l0LW1hcmdpbi1zdGFydDogMDtcbiAgICAtd2Via2l0LW1hcmdpbi1lbmQ6IDA7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbn1cblxuaDQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMS4zM19fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAxLjMzZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDA7XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG59XG5cbmg1IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IC44M2VtO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMS42N19fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAxLjY3ZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDA7XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG59XG5cbmg2IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IC42N2VtO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMi4zM19fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAyLjMzZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDA7XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG59XG5cbi8qIHRhYmxlcyAqL1xuXG50YWJsZSB7XG4gICAgZGlzcGxheTogdGFibGU7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgICBib3JkZXItc3BhY2luZzogMnB4O1xuICAgIGJvcmRlci1jb2xvcjogZ3JheVxufVxuXG50aGVhZCB7XG4gICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0XG59XG5cbnRib2R5IHtcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBib3JkZXItY29sb3I6IGluaGVyaXRcbn1cblxudGZvb3Qge1xuICAgIGRpc3BsYXk6IHRhYmxlLWZvb3Rlci1ncm91cDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdFxufVxuXG4vKiBmb3IgdGFibGVzIHdpdGhvdXQgdGFibGUgc2VjdGlvbiBlbGVtZW50cyAoY2FuIGhhcHBlbiB3aXRoIFhIVE1MIG9yIGR5bmFtaWNhbGx5IGNyZWF0ZWQgdGFibGVzKSAqL1xudGFibGUgPiB0ciB7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuY29sIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jb2x1bW5cbn1cblxuY29sZ3JvdXAge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNvbHVtbi1ncm91cFxufVxuXG50ciB7XG4gICAgZGlzcGxheTogdGFibGUtcm93O1xuICAgIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0O1xuICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdFxufVxuXG50ZCwgdGgge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgdmVydGljYWwtYWxpZ246IGluaGVyaXRcbn1cblxudGgge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG59XG5cbmNhcHRpb24ge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNhcHRpb247XG4gICAgdGV4dC1hbGlnbjogLXdlYmtpdC1jZW50ZXJcbn1cblxuLyogbGlzdHMgKi9cblxudWwsIG1lbnUsIGRpciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMV9fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAxZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDA7XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiAwO1xuICAgIC13ZWJraXQtcGFkZGluZy1zdGFydDogNDBweFxufVxuXG5vbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMV9fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAxZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDA7XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiAwO1xuICAgIC13ZWJraXQtcGFkZGluZy1zdGFydDogNDBweFxufVxuXG5saSB7XG4gICAgZGlzcGxheTogbGlzdC1pdGVtO1xuICAgIHRleHQtYWxpZ246IC13ZWJraXQtbWF0Y2gtcGFyZW50O1xufVxuXG51bCB1bCwgb2wgdWwge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlXG59XG5cbm9sIG9sIHVsLCBvbCB1bCB1bCwgdWwgb2wgdWwsIHVsIHVsIHVsIHtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZVxufVxuXG5kZCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDQwcHhcbn1cblxuZGwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMV9fcWVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWFmdGVyOiAxZW07XG4gICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDA7XG4gICAgLXdlYmtpdC1tYXJnaW4tZW5kOiAwO1xufVxuXG5kdCB7XG4gICAgZGlzcGxheTogYmxvY2tcbn1cblxub2wgdWwsIHVsIG9sLCB1bCB1bCwgb2wgb2wge1xuICAgIC13ZWJraXQtbWFyZ2luLWJlZm9yZTogMDtcbiAgICAtd2Via2l0LW1hcmdpbi1hZnRlcjogMFxufVxuXG4vKiBmb3JtIGVsZW1lbnRzICovXG5cbmZvcm0ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi10b3A6IDBfX3FlbTtcbn1cblxubGFiZWwge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cblxubGVnZW5kIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICAtd2Via2l0LXBhZGRpbmctc3RhcnQ6IDJweDtcbiAgICAtd2Via2l0LXBhZGRpbmctZW5kOiAycHg7XG4gICAgYm9yZGVyOiBub25lXG59XG5cbmZpZWxkc2V0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICAtd2Via2l0LW1hcmdpbi1zdGFydDogMnB4O1xuICAgIC13ZWJraXQtbWFyZ2luLWVuZDogMnB4O1xuICAgIC13ZWJraXQtcGFkZGluZy1iZWZvcmU6IDAuMzVlbTtcbiAgICAtd2Via2l0LXBhZGRpbmctc3RhcnQ6IDAuNzVlbTtcbiAgICAtd2Via2l0LXBhZGRpbmctZW5kOiAwLjc1ZW07XG4gICAgLXdlYmtpdC1wYWRkaW5nLWFmdGVyOiAwLjYyNWVtO1xuICAgIGJvcmRlcjogMnB4IGdyb292ZSBUaHJlZURGYWNlO1xuICAgIG1pbi13aWR0aDogLXdlYmtpdC1taW4tY29udGVudDtcbn1cblxuYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbn1cblxuLyogRm9ybSBjb250cm9scyBkb24ndCBnbyB2ZXJ0aWNhbC4gKi9cbmlucHV0LCB0ZXh0YXJlYSwga2V5Z2VuLCBzZWxlY3QsIGJ1dHRvbiwgbWV0ZXIsIHByb2dyZXNzIHtcbiAgICAtd2Via2l0LXdyaXRpbmctbW9kZTogaG9yaXpvbnRhbC10YiAhaW1wb3J0YW50O1xufVxuXG5pbnB1dCwgdGV4dGFyZWEsIGtleWdlbiwgc2VsZWN0LCBidXR0b24ge1xuICAgIG1hcmdpbjogMF9fcWVtO1xuICAgIGZvbnQ6IC13ZWJraXQtc21hbGwtY29udHJvbDtcbiAgICB0ZXh0LXJlbmRlcmluZzogYXV0bzsgLyogRklYTUU6IFJlbW92ZSB3aGVuIHRhYnMgd29yayB3aXRoIG9wdGltaXplTGVnaWJpbGl0eS4gKi9cbiAgICBjb2xvcjogaW5pdGlhbDtcbiAgICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICAgIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgdGV4dC1pbmRlbnQ6IDA7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHRleHQtYWxpZ246IHN0YXJ0O1xufVxuXG5pbnB1dFt0eXBlPVwiaGlkZGVuXCIgaV0ge1xuICAgIGRpc3BsYXk6IG5vbmVcbn1cblxuaW5wdXQge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICAgIHBhZGRpbmc6IDFweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICBib3JkZXI6IDJweCBpbnNldDtcbiAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O1xuICAgIGN1cnNvcjogYXV0bztcbn1cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiIGldIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNlYXJjaGZpZWxkO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbmlucHV0Ojotd2Via2l0LXRleHRmaWVsZC1kZWNvcmF0aW9uLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIGNvbnRlbnQ6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiIGldOjotd2Via2l0LXRleHRmaWVsZC1kZWNvcmF0aW9uLWNvbnRhaW5lciB7XG4gICAgZGlyZWN0aW9uOiBsdHI7XG59XG5cbmlucHV0Ojotd2Via2l0LWNsZWFyLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmbGV4OiBub25lO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiAycHg7XG4gICAgb3BhY2l0eTogMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuaW5wdXQ6ZW5hYmxlZDpyZWFkLXdyaXRlOi13ZWJraXQtYW55KDpmb2N1cyw6aG92ZXIpOjotd2Via2l0LWNsZWFyLWJ1dHRvbiB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbn1cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiIGldOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNlYXJjaGZpZWxkLWNhbmNlbC1idXR0b247XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogbm9uZTtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbiAgICAtd2Via2l0LW1hcmdpbi1zdGFydDogMXB4O1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIiBpXTplbmFibGVkOnJlYWQtd3JpdGU6LXdlYmtpdC1hbnkoOmZvY3VzLDpob3Zlcik6Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIiBpXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZC1kZWNvcmF0aW9uO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsZXg6IG5vbmU7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICAgIG1hcmdpbjogYXV0byAwO1xufVxuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCIgaV06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZC1yZXN1bHRzLWRlY29yYXRpb247XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogbm9uZTtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbiAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gICAgbWFyZ2luOiBhdXRvIDA7XG59XG5cbmlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGlubmVyLXNwaW4tYnV0dG9uO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgZmxleDogbm9uZTtcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgb3BhY2l0eTogMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuaW5wdXQ6ZW5hYmxlZDpyZWFkLXdyaXRlOi13ZWJraXQtYW55KDpmb2N1cyw6aG92ZXIpOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xufVxuXG5rZXlnZW4sIHNlbGVjdCB7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG5rZXlnZW46Oi13ZWJraXQta2V5Z2VuLXNlbGVjdCB7XG4gICAgbWFyZ2luOiAwcHg7XG59XG5cbnRleHRhcmVhIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkO1xuICAgIC13ZWJraXQtcnRsLW9yZGVyaW5nOiBsb2dpY2FsO1xuICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICByZXNpemU6IGF1dG87XG4gICAgY3Vyc29yOiBhdXRvO1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xufVxuXG46Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIC13ZWJraXQtdGV4dC1zZWN1cml0eTogbm9uZTtcbiAgICBjb2xvcjogZGFya0dyYXk7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5pbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgd2hpdGUtc3BhY2U6IHByZTtcbiAgICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xufVxuXG5pbnB1dFt0eXBlPVwicGFzc3dvcmRcIiBpXSB7XG4gICAgLXdlYmtpdC10ZXh0LXNlY3VyaXR5OiBkaXNjICFpbXBvcnRhbnQ7XG59XG5cbmlucHV0W3R5cGU9XCJoaWRkZW5cIiBpXSwgaW5wdXRbdHlwZT1cImltYWdlXCIgaV0sIGlucHV0W3R5cGU9XCJmaWxlXCIgaV0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogaW5pdGlhbDtcbiAgICBwYWRkaW5nOiBpbml0aWFsO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7XG4gICAgYm9yZGVyOiBpbml0aWFsO1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiIGldIHtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgdGV4dC1hbGlnbjogc3RhcnQgIWltcG9ydGFudDtcbn1cblxuaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbCwgdGV4dGFyZWE6LXdlYmtpdC1hdXRvZmlsbCwgc2VsZWN0Oi13ZWJraXQtYXV0b2ZpbGwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGQUZGQkQgIWltcG9ydGFudDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmUgIWltcG9ydGFudDtcbiAgICBjb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50O1xufVxuXG5pbnB1dFt0eXBlPVwicmFkaW9cIiBpXSwgaW5wdXRbdHlwZT1cImNoZWNrYm94XCIgaV0ge1xuICAgIG1hcmdpbjogM3B4IDAuNWV4O1xuICAgIHBhZGRpbmc6IGluaXRpYWw7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbDtcbiAgICBib3JkZXI6IGluaXRpYWw7XG59XG5cbmlucHV0W3R5cGU9XCJidXR0b25cIiBpXSwgaW5wdXRbdHlwZT1cInN1Ym1pdFwiIGldLCBpbnB1dFt0eXBlPVwicmVzZXRcIiBpXSB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBwdXNoLWJ1dHRvbjtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgIHdoaXRlLXNwYWNlOiBwcmVcbn1cblxuaW5wdXRbdHlwZT1cImZpbGVcIiBpXTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogcHVzaC1idXR0b247XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xufVxuXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCIgaV0sIGlucHV0W3R5cGU9XCJzdWJtaXRcIiBpXSwgaW5wdXRbdHlwZT1cInJlc2V0XCIgaV0sIGlucHV0W3R5cGU9XCJmaWxlXCIgaV06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uLCBidXR0b24ge1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgY29sb3I6IEJ1dHRvblRleHQ7XG4gICAgcGFkZGluZzogMnB4IDZweCAzcHggNnB4O1xuICAgIGJvcmRlcjogMnB4IG91dHNldCBCdXR0b25GYWNlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEJ1dHRvbkZhY2U7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxufVxuXG5pbnB1dFt0eXBlPVwicmFuZ2VcIiBpXSB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzbGlkZXItaG9yaXpvbnRhbDtcbiAgICBwYWRkaW5nOiBpbml0aWFsO1xuICAgIGJvcmRlcjogaW5pdGlhbDtcbiAgICBtYXJnaW46IDJweDtcbiAgICBjb2xvcjogIzkwOTA5MDtcbn1cblxuaW5wdXRbdHlwZT1cInJhbmdlXCIgaV06Oi13ZWJraXQtc2xpZGVyLWNvbnRhaW5lciwgaW5wdXRbdHlwZT1cInJhbmdlXCIgaV06Oi13ZWJraXQtbWVkaWEtc2xpZGVyLWNvbnRhaW5lciB7XG4gICAgZmxleDogMTtcbiAgICBtaW4td2lkdGg6IDA7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbiAgICBkaXNwbGF5OiBmbGV4O1xufVxuXG5pbnB1dFt0eXBlPVwicmFuZ2VcIiBpXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2sge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIC13ZWJraXQtYWxpZ24tc2VsZjogY2VudGVyO1xuXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuaW5wdXRbdHlwZT1cInJhbmdlXCIgaV06Oi13ZWJraXQtc2xpZGVyLXRodW1iLCBpbnB1dFt0eXBlPVwicmFuZ2VcIiBpXTo6LXdlYmtpdC1tZWRpYS1zbGlkZXItdGh1bWIge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2xpZGVydGh1bWItaG9yaXpvbnRhbDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCIgaV06ZGlzYWJsZWQsIGlucHV0W3R5cGU9XCJzdWJtaXRcIiBpXTpkaXNhYmxlZCwgaW5wdXRbdHlwZT1cInJlc2V0XCIgaV06ZGlzYWJsZWQsXG5pbnB1dFt0eXBlPVwiZmlsZVwiIGldOmRpc2FibGVkOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiwgYnV0dG9uOmRpc2FibGVkLFxuc2VsZWN0OmRpc2FibGVkLCBrZXlnZW46ZGlzYWJsZWQsIG9wdGdyb3VwOmRpc2FibGVkLCBvcHRpb246ZGlzYWJsZWQsXG5zZWxlY3RbZGlzYWJsZWRdPm9wdGlvbiB7XG4gICAgY29sb3I6IEdyYXlUZXh0XG59XG5cbmlucHV0W3R5cGU9XCJidXR0b25cIiBpXTphY3RpdmUsIGlucHV0W3R5cGU9XCJzdWJtaXRcIiBpXTphY3RpdmUsIGlucHV0W3R5cGU9XCJyZXNldFwiIGldOmFjdGl2ZSwgaW5wdXRbdHlwZT1cImZpbGVcIiBpXTphY3RpdmU6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uLCBidXR0b246YWN0aXZlIHtcbiAgICBib3JkZXItc3R5bGU6IGluc2V0XG59XG5cbmlucHV0W3R5cGU9XCJidXR0b25cIiBpXTphY3RpdmU6ZGlzYWJsZWQsIGlucHV0W3R5cGU9XCJzdWJtaXRcIiBpXTphY3RpdmU6ZGlzYWJsZWQsIGlucHV0W3R5cGU9XCJyZXNldFwiIGldOmFjdGl2ZTpkaXNhYmxlZCwgaW5wdXRbdHlwZT1cImZpbGVcIiBpXTphY3RpdmU6ZGlzYWJsZWQ6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uLCBidXR0b246YWN0aXZlOmRpc2FibGVkIHtcbiAgICBib3JkZXItc3R5bGU6IG91dHNldFxufVxuXG5vcHRpb246LWludGVybmFsLXNwYXRpYWwtbmF2aWdhdGlvbi1mb2N1cyB7XG4gICAgb3V0bGluZTogYmxhY2sgZGFzaGVkIDFweDtcbiAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcbn1cblxuZGF0YWxpc3Qge1xuICAgIGRpc3BsYXk6IG5vbmVcbn1cblxuYXJlYSB7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxucGFyYW0ge1xuICAgIGRpc3BsYXk6IG5vbmVcbn1cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCIgaV0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogY2hlY2tib3g7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuaW5wdXRbdHlwZT1cInJhZGlvXCIgaV0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogcmFkaW87XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuaW5wdXRbdHlwZT1cImNvbG9yXCIgaV0ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc3F1YXJlLWJ1dHRvbjtcbiAgICB3aWR0aDogNDRweDtcbiAgICBoZWlnaHQ6IDIzcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQnV0dG9uRmFjZTtcbiAgICAvKiBTYW1lIGFzIG5hdGl2ZV90aGVtZV9iYXNlLiAqL1xuICAgIGJvcmRlcjogMXB4ICNhOWE5YTkgc29saWQ7XG4gICAgcGFkZGluZzogMXB4IDJweDtcbn1cblxuaW5wdXRbdHlwZT1cImNvbG9yXCIgaV06Oi13ZWJraXQtY29sb3Itc3dhdGNoLXdyYXBwZXIge1xuICAgIGRpc3BsYXk6ZmxleDtcbiAgICBwYWRkaW5nOiA0cHggMnB4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlXG59XG5cbmlucHV0W3R5cGU9XCJjb2xvclwiIGldOjotd2Via2l0LWNvbG9yLXN3YXRjaCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNzc3Nzc3O1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xufVxuXG5pbnB1dFt0eXBlPVwiY29sb3JcIiBpXVtsaXN0XSB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdDtcbiAgICB3aWR0aDogODhweDtcbiAgICBoZWlnaHQ6IDIzcHhcbn1cblxuaW5wdXRbdHlwZT1cImNvbG9yXCIgaV1bbGlzdF06Oi13ZWJraXQtY29sb3Itc3dhdGNoLXdyYXBwZXIge1xuICAgIHBhZGRpbmctbGVmdDogOHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDI0cHg7XG59XG5cbmlucHV0W3R5cGU9XCJjb2xvclwiIGldW2xpc3RdOjotd2Via2l0LWNvbG9yLXN3YXRjaCB7XG4gICAgYm9yZGVyLWNvbG9yOiAjMDAwMDAwO1xufVxuXG5pbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDAuNjZlbTtcbiAgICBoZWlnaHQ6IDAuNjZlbTtcbiAgICBwYWRkaW5nOiAwLjE3ZW0gMC4zNGVtO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbmlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3I6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG59XG5cbmlucHV0OmVuYWJsZWQ6cmVhZC13cml0ZTotd2Via2l0LWFueSg6Zm9jdXMsOmhvdmVyKTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yLFxuaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcjpmb2N1cyB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbn1cblxuaW5wdXRbdHlwZT1cImRhdGVcIiBpXTpkaXNhYmxlZDo6LXdlYmtpdC1jbGVhci1idXR0b24sXG5pbnB1dFt0eXBlPVwiZGF0ZVwiIGldOmRpc2FibGVkOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgaV06ZGlzYWJsZWQ6Oi13ZWJraXQtY2xlYXItYnV0dG9uLFxuaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgaV06ZGlzYWJsZWQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5pbnB1dFt0eXBlPVwibW9udGhcIiBpXTpkaXNhYmxlZDo6LXdlYmtpdC1jbGVhci1idXR0b24sXG5pbnB1dFt0eXBlPVwibW9udGhcIiBpXTpkaXNhYmxlZDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJ3ZWVrXCIgaV06ZGlzYWJsZWQ6Oi13ZWJraXQtY2xlYXItYnV0dG9uLFxuaW5wdXRbdHlwZT1cIndlZWtcIiBpXTpkaXNhYmxlZDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0OmRpc2FibGVkOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3IsXG5pbnB1dFt0eXBlPVwiZGF0ZVwiIGldW3JlYWRvbmx5XTo6LXdlYmtpdC1jbGVhci1idXR0b24sXG5pbnB1dFt0eXBlPVwiZGF0ZVwiIGldW3JlYWRvbmx5XTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiIGldW3JlYWRvbmx5XTo6LXdlYmtpdC1jbGVhci1idXR0b24sXG5pbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBpXVtyZWFkb25seV06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5pbnB1dFt0eXBlPVwibW9udGhcIiBpXVtyZWFkb25seV06Oi13ZWJraXQtY2xlYXItYnV0dG9uLFxuaW5wdXRbdHlwZT1cIm1vbnRoXCIgaV1bcmVhZG9ubHldOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuaW5wdXRbdHlwZT1cIndlZWtcIiBpXVtyZWFkb25seV06Oi13ZWJraXQtY2xlYXItYnV0dG9uLFxuaW5wdXRbdHlwZT1cIndlZWtcIiBpXVtyZWFkb25seV06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5pbnB1dFtyZWFkb25seV06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG5zZWxlY3Qge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3Q7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkO1xuICAgIHdoaXRlLXNwYWNlOiBwcmU7XG4gICAgLXdlYmtpdC1ydGwtb3JkZXJpbmc6IGxvZ2ljYWw7XG4gICAgY29sb3I6IGJsYWNrO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuc2VsZWN0Om5vdCg6LWludGVybmFsLWxpc3QtYm94KSB7XG4gICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDtcbn1cblxuc2VsZWN0Oi1pbnRlcm5hbC1saXN0LWJveCB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBsaXN0Ym94O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGJvcmRlcjogMXB4IGluc2V0IGdyYXk7XG4gICAgYm9yZGVyLXJhZGl1czogaW5pdGlhbDtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbm9wdGdyb3VwIHtcbiAgICBmb250LXdlaWdodDogYm9sZGVyO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5vcHRpb24ge1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMCAycHggMXB4IDJweDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIG1pbi1oZWlnaHQ6IDEuMmVtO1xufVxuXG5zZWxlY3Q6LWludGVybmFsLWxpc3QtYm94IG9wdGlvbixcbnNlbGVjdDotaW50ZXJuYWwtbGlzdC1ib3ggb3B0Z3JvdXAge1xuICAgIGxpbmUtaGVpZ2h0OiBpbml0aWFsICFpbXBvcnRhbnQ7XG59XG5cbnNlbGVjdDotaW50ZXJuYWwtbGlzdC1ib3g6Zm9jdXMgb3B0aW9uOmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IC1pbnRlcm5hbC1hY3RpdmUtbGlzdC1ib3gtc2VsZWN0aW9uICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6IC1pbnRlcm5hbC1hY3RpdmUtbGlzdC1ib3gtc2VsZWN0aW9uLXRleHQgIWltcG9ydGFudDtcbn1cblxuc2VsZWN0Oi1pbnRlcm5hbC1saXN0LWJveCBvcHRpb246Y2hlY2tlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogLWludGVybmFsLWluYWN0aXZlLWxpc3QtYm94LXNlbGVjdGlvbiAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiAtaW50ZXJuYWwtaW5hY3RpdmUtbGlzdC1ib3gtc2VsZWN0aW9uLXRleHQgIWltcG9ydGFudDtcbn1cblxuc2VsZWN0Oi1pbnRlcm5hbC1saXN0LWJveDpkaXNhYmxlZCBvcHRpb246Y2hlY2tlZCxcbnNlbGVjdDotaW50ZXJuYWwtbGlzdC1ib3ggb3B0aW9uOmNoZWNrZWQ6ZGlzYWJsZWQge1xuICAgIGNvbG9yOiBncmF5ICFpbXBvcnRhbnQ7XG59XG5cbnNlbGVjdDotaW50ZXJuYWwtbGlzdC1ib3ggaHIge1xuICAgIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cblxub3V0cHV0IHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG59XG5cbi8qIG1ldGVyICovXG5cbm1ldGVyIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1ldGVyO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGhlaWdodDogMWVtO1xuICAgIHdpZHRoOiA1ZW07XG4gICAgdmVydGljYWwtYWxpZ246IC0wLjJlbTtcbn1cblxubWV0ZXI6Oi13ZWJraXQtbWV0ZXItaW5uZXItZWxlbWVudCB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBpbmhlcml0O1xuICAgIGJveC1zaXppbmc6IGluaGVyaXQ7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG5tZXRlcjo6LXdlYmtpdC1tZXRlci1iYXIge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNkZGQsICNlZWUgMjAlLCAjY2NjIDQ1JSwgI2NjYyA1NSUsICNkZGQpO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLW9ubHkgIWltcG9ydGFudDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG5tZXRlcjo6LXdlYmtpdC1tZXRlci1vcHRpbXVtLXZhbHVlIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjYWQ3LCAjY2VhIDIwJSwgIzdhMyA0NSUsICM3YTMgNTUlLCAjYWQ3KTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxubWV0ZXI6Oi13ZWJraXQtbWV0ZXItc3Vib3B0aW11bS12YWx1ZSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2ZlNywgI2ZmYyAyMCUsICNkYjMgNDUlLCAjZGIzIDU1JSwgI2ZlNyk7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbm1ldGVyOjotd2Via2l0LW1ldGVyLWV2ZW4tbGVzcy1nb29kLXZhbHVlIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjc3LCAjZmNjIDIwJSwgI2Q0NCA0NSUsICNkNDQgNTUlLCAjZjc3KTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLyogcHJvZ3Jlc3MgKi9cblxucHJvZ3Jlc3Mge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogcHJvZ3Jlc3MtYmFyO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGhlaWdodDogMWVtO1xuICAgIHdpZHRoOiAxMGVtO1xuICAgIHZlcnRpY2FsLWFsaWduOiAtMC4yZW07XG59XG5cbnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWlubmVyLWVsZW1lbnQge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogaW5oZXJpdDtcbiAgICBib3gtc2l6aW5nOiBpbmhlcml0O1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG59XG5cbnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWJhciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLXdlYmtpdC11c2VyLW1vZGlmeTogcmVhZC1vbmx5ICFpbXBvcnRhbnQ7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxucHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogNTAlOyAvKiBzaG91bGQgYmUgcmVtb3ZlZCBsYXRlciAqL1xuICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtb25seSAhaW1wb3J0YW50O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8qIGlubGluZSBlbGVtZW50cyAqL1xuXG51LCBpbnMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lXG59XG5cbnN0cm9uZywgYiB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbn1cblxuaSwgY2l0ZSwgZW0sIHZhciwgYWRkcmVzcywgZGZuIHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWNcbn1cblxudHQsIGNvZGUsIGtiZCwgc2FtcCB7XG4gICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZVxufVxuXG5wcmUsIHhtcCwgcGxhaW50ZXh0LCBsaXN0aW5nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICAgIHdoaXRlLXNwYWNlOiBwcmU7XG4gICAgbWFyZ2luOiAxX19xZW0gMFxufVxuXG5tYXJrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7XG4gICAgY29sb3I6IGJsYWNrXG59XG5cbmJpZyB7XG4gICAgZm9udC1zaXplOiBsYXJnZXJcbn1cblxuc21hbGwge1xuICAgIGZvbnQtc2l6ZTogc21hbGxlclxufVxuXG5zLCBzdHJpa2UsIGRlbCB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2hcbn1cblxuc3ViIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogc3ViO1xuICAgIGZvbnQtc2l6ZTogc21hbGxlclxufVxuXG5zdXAge1xuICAgIHZlcnRpY2FsLWFsaWduOiBzdXBlcjtcbiAgICBmb250LXNpemU6IHNtYWxsZXJcbn1cblxubm9iciB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxufVxuXG4vKiBzdGF0ZXMgKi9cblxuOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBhdXRvIDVweCAtd2Via2l0LWZvY3VzLXJpbmctY29sb3Jcbn1cblxuLyogUmVhZC1vbmx5IHRleHQgZmllbGRzIGRvIG5vdCBzaG93IGEgZm9jdXMgcmluZyBidXQgZG8gc3RpbGwgcmVjZWl2ZSBmb2N1cyAqL1xuaHRtbDpmb2N1cywgYm9keTpmb2N1cywgaW5wdXRbcmVhZG9ubHldOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lXG59XG5cbmFwcGxldDpmb2N1cywgZW1iZWQ6Zm9jdXMsIGlmcmFtZTpmb2N1cywgb2JqZWN0OmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lXG59XG5cbmlucHV0OmZvY3VzLCB0ZXh0YXJlYTpmb2N1cywga2V5Z2VuOmZvY3VzLCBzZWxlY3Q6Zm9jdXMge1xuICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4XG59XG5cbmlucHV0W3R5cGU9XCJidXR0b25cIiBpXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiIGldOmZvY3VzLFxuaW5wdXRbdHlwZT1cImZpbGVcIiBpXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJoaWRkZW5cIiBpXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJpbWFnZVwiIGldOmZvY3VzLFxuaW5wdXRbdHlwZT1cInJhZGlvXCIgaV06Zm9jdXMsXG5pbnB1dFt0eXBlPVwicmVzZXRcIiBpXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJzZWFyY2hcIiBpXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJzdWJtaXRcIiBpXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJmaWxlXCIgaV06Zm9jdXM6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgICBvdXRsaW5lLW9mZnNldDogMFxufVxuXG5hOi13ZWJraXQtYW55LWxpbmsge1xuICAgIGNvbG9yOiAtd2Via2l0LWxpbms7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgY3Vyc29yOiBhdXRvO1xufVxuXG5hOi13ZWJraXQtYW55LWxpbms6YWN0aXZlIHtcbiAgICBjb2xvcjogLXdlYmtpdC1hY3RpdmVsaW5rXG59XG5cbi8qIEhUTUw1IHJ1YnkgZWxlbWVudHMgKi9cblxucnVieSwgcnQge1xuICAgIHRleHQtaW5kZW50OiAwOyAvKiBibG9ja3MgdXNlZCBmb3IgcnVieSByZW5kZXJpbmcgc2hvdWxkIG5vdCB0cmlnZ2VyIHRoaXMgKi9cbn1cblxucnQge1xuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgLXdlYmtpdC10ZXh0LWVtcGhhc2lzOiBub25lO1xufVxuXG5ydWJ5ID4gcnQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogNTAlO1xuICAgIHRleHQtYWxpZ246IHN0YXJ0O1xufVxuXG5ydWJ5ID4gcnAge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIG90aGVyIGVsZW1lbnRzICovXG5cbm5vZnJhbWVzIHtcbiAgICBkaXNwbGF5OiBub25lXG59XG5cbmZyYW1lc2V0LCBmcmFtZSB7XG4gICAgZGlzcGxheTogYmxvY2tcbn1cblxuZnJhbWVzZXQge1xuICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdFxufVxuXG5pZnJhbWUge1xuICAgIGJvcmRlcjogMnB4IGluc2V0XG59XG5cbmRldGFpbHMge1xuICAgIGRpc3BsYXk6IGJsb2NrXG59XG5cbnN1bW1hcnkge1xuICAgIGRpc3BsYXk6IGJsb2NrXG59XG5cbnN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXIge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMC42NmVtO1xuICAgIGhlaWdodDogMC42NmVtO1xuICAgIC13ZWJraXQtbWFyZ2luLWVuZDogMC40ZW07XG59XG5cbnRlbXBsYXRlIHtcbiAgICBkaXNwbGF5OiBub25lXG59XG5cbmJkaSwgb3V0cHV0IHtcbiAgICB1bmljb2RlLWJpZGk6IC13ZWJraXQtaXNvbGF0ZTtcbn1cblxuYmRvIHtcbiAgICB1bmljb2RlLWJpZGk6IGJpZGktb3ZlcnJpZGU7XG59XG5cbnRleHRhcmVhW2Rpcj1hdXRvIGldIHtcbiAgICB1bmljb2RlLWJpZGk6IC13ZWJraXQtcGxhaW50ZXh0O1xufVxuXG5kaWFsb2c6bm90KFtvcGVuXSkge1xuICAgIGRpc3BsYXk6IG5vbmVcbn1cblxuZGlhbG9nIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICB3aWR0aDogLXdlYmtpdC1maXQtY29udGVudDtcbiAgICBoZWlnaHQ6IC13ZWJraXQtZml0LWNvbnRlbnQ7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIGJvcmRlcjogc29saWQ7XG4gICAgcGFkZGluZzogMWVtO1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGNvbG9yOiBibGFja1xufVxuXG5kaWFsb2c6OmJhY2tkcm9wIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKVxufVxuXG4vKiBwYWdlICovXG5cbkBwYWdlIHtcbiAgICAvKiBGSVhNRTogRGVmaW5lIHRoZSByaWdodCBkZWZhdWx0IHZhbHVlcyBmb3IgcGFnZSBwcm9wZXJ0aWVzLiAqL1xuICAgIHNpemU6IGF1dG87XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHBhZGRpbmc6IDBweDtcbiAgICBib3JkZXItd2lkdGg6IDBweDtcbn1cblxuLyogbm9zY3JpcHQgaXMgaGFuZGxlZCBpbnRlcm5hbGx5LCBhcyBpdCBkZXBlbmRzIG9uIHNldHRpbmdzLiAqL1xuXG5gO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2xpdmluZy9nZW5lcmF0ZWQvdXRpbHNcIik7XG5cbi8vIFRyZWUgdHJhdmVyc2luZ1xuZXhwb3J0cy5nZXRGaXJzdENoaWxkID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlc1swXTtcbn07XG5cbmV4cG9ydHMuZ2V0Q2hpbGROb2RlcyA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIC8vIHBhcnNlNSB0cmVhdHMgdGVtcGxhdGUgZWxlbWVudHMgc3BlY2lhbGx5LCBhc3N1bWluZyB5b3UgcmV0dXJuIGFuIGFycmF5IHdob3NlIHNpbmdsZSBpdGVtIGlzIHRoZSBkb2N1bWVudCBmcmFnbWVudFxuICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuX3RlbXBsYXRlQ29udGVudHMgPyBbbm9kZS5fdGVtcGxhdGVDb250ZW50c10gOiBbXTtcbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKG5vZGUuY2hpbGROb2Rlc1tpXSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2hpbGRyZW47XG59O1xuXG5leHBvcnRzLmdldFBhcmVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZS5wYXJlbnROb2RlO1xufTtcblxuZXhwb3J0cy5nZXRBdHRyTGlzdCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHJldHVybiBub2RlLmF0dHJpYnV0ZXM7XG59O1xuXG4vLyBOb2RlIGRhdGFcbmV4cG9ydHMuZ2V0VGFnTmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbn07XG5cbmV4cG9ydHMuZ2V0TmFtZXNwYWNlVVJJID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQubmFtZXNwYWNlVVJJIHx8IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xufTtcblxuZXhwb3J0cy5nZXRUZXh0Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAodGV4dE5vZGUpIHtcbiAgcmV0dXJuIHRleHROb2RlLm5vZGVWYWx1ZTtcbn07XG5cbmV4cG9ydHMuZ2V0Q29tbWVudE5vZGVDb250ZW50ID0gZnVuY3Rpb24gKGNvbW1lbnROb2RlKSB7XG4gIHJldHVybiBjb21tZW50Tm9kZS5ub2RlVmFsdWU7XG59O1xuXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVOYW1lID0gZnVuY3Rpb24gKGRvY3R5cGVOb2RlKSB7XG4gIHJldHVybiBkb2N0eXBlTm9kZS5uYW1lO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlUHVibGljSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcbiAgcmV0dXJuIGRvY3R5cGVOb2RlLnB1YmxpY0lkIHx8IG51bGw7XG59O1xuXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVTeXN0ZW1JZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xuICByZXR1cm4gZG9jdHlwZU5vZGUuc3lzdGVtSWQgfHwgbnVsbDtcbn07XG5cbi8vIE5vZGUgdHlwZXNcbmV4cG9ydHMuaXNUZXh0Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lID09PSBcIiN0ZXh0XCI7XG59O1xuXG5leHBvcnRzLmlzQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gXCIjY29tbWVudFwiO1xufTtcblxuZXhwb3J0cy5pc0RvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gMTA7XG59O1xuXG5leHBvcnRzLmlzRWxlbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gQm9vbGVhbihub2RlLnRhZ05hbWUpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3Qgdm0gPSByZXF1aXJlKFwidm1cIik7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9saXZpbmcvZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG5leHBvcnRzLmF2YWlsYWJsZURvY3VtZW50RmVhdHVyZXMgPSBbXG4gIFwiRmV0Y2hFeHRlcm5hbFJlc291cmNlc1wiLFxuICBcIlNraXBFeHRlcm5hbFJlc291cmNlc1wiXG5dO1xuXG5leHBvcnRzLmRlZmF1bHREb2N1bWVudEZlYXR1cmVzID0ge1xuICBGZXRjaEV4dGVybmFsUmVzb3VyY2VzOiBbXCJzY3JpcHRcIiwgXCJsaW5rXCJdLCAvLyBvbWl0dGVkIGJ5IGRlZmF1bHQ6IFwiZnJhbWVcIlxuICBTa2lwRXh0ZXJuYWxSZXNvdXJjZXM6IGZhbHNlXG59O1xuXG5leHBvcnRzLmFwcGx5RG9jdW1lbnRGZWF0dXJlcyA9IChkb2N1bWVudEltcGwsIGZlYXR1cmVzID0ge30pID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBvcnRzLmF2YWlsYWJsZURvY3VtZW50RmVhdHVyZXMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBmZWF0dXJlTmFtZSA9IGV4cG9ydHMuYXZhaWxhYmxlRG9jdW1lbnRGZWF0dXJlc1tpXTtcbiAgICBsZXQgZmVhdHVyZVNvdXJjZTtcblxuICAgIGlmIChmZWF0dXJlc1tmZWF0dXJlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZmVhdHVyZVNvdXJjZSA9IGZlYXR1cmVzW2ZlYXR1cmVOYW1lXTtcbiAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uIGFsc28gYmVjYXVzZSB0aGUgRG9jdW1lbnQgZmVhdHVyZVxuICAgICAgLy8gbWV0aG9kcyBjb252ZXJ0IGV2ZXJ5dGhpbmcgdG8gbG93ZXJjYXNlLlxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZlYXR1cmVzW2ZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCldICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBmZWF0dXJlU291cmNlID0gZmVhdHVyZXNbZmVhdHVyZU5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgfSBlbHNlIGlmIChleHBvcnRzLmRlZmF1bHREb2N1bWVudEZlYXR1cmVzW2ZlYXR1cmVOYW1lXSkge1xuICAgICAgZmVhdHVyZVNvdXJjZSA9IGV4cG9ydHMuZGVmYXVsdERvY3VtZW50RmVhdHVyZXNbZmVhdHVyZU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBsSW1wbCA9IGRvY3VtZW50SW1wbC5faW1wbGVtZW50YXRpb247XG4gICAgaW1wbEltcGwuX3JlbW92ZUZlYXR1cmUoZmVhdHVyZU5hbWUpO1xuXG4gICAgaWYgKGZlYXR1cmVTb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmVhdHVyZVNvdXJjZSkpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmZWF0dXJlU291cmNlLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgaW1wbEltcGwuX2FkZEZlYXR1cmUoZmVhdHVyZU5hbWUsIGZlYXR1cmVTb3VyY2Vbal0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbXBsSW1wbC5fYWRkRmVhdHVyZShmZWF0dXJlTmFtZSwgZmVhdHVyZVNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnRzLmNvbnRleHRpZnlXaW5kb3cgPSB3aW5kb3cgPT4ge1xuICBpZiAodm0uaXNDb250ZXh0KHdpbmRvdykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2bS5jcmVhdGVDb250ZXh0KHdpbmRvdyk7XG4gIGNvbnN0IGRvY3VtZW50SW1wbCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHdpbmRvdy5fZG9jdW1lbnQpO1xuICBkb2N1bWVudEltcGwuX2RlZmF1bHRWaWV3ID0gd2luZG93Ll9nbG9iYWxQcm94eSA9IHZtLnJ1bkluQ29udGV4dChcInRoaXNcIiwgd2luZG93KTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHBhcnNlNSA9IHJlcXVpcmUoXCJwYXJzZTVcIik7XG5jb25zdCBkb2N1bWVudEFkYXB0ZXIgPSByZXF1aXJlKFwiLi9kb2N1bWVudEFkYXB0ZXJcIik7XG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbGl2aW5nL25vZGUtdHlwZVwiKTtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2xpdmluZy9nZW5lcmF0ZWQvdXRpbHNcIik7XG5cbmNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgcGFyc2U1LlRyZWVTZXJpYWxpemVyKGRvY3VtZW50QWRhcHRlcik7XG5cbmV4cG9ydHMuZG9tVG9IdG1sID0gZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIGxldCByZXQgPSBcIlwiO1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgaXRlcmFibGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkRPQ1VNRU5UX05PREUpIHtcbiAgICAgIHJldCArPSBzZXJpYWxpemVyLnNlcmlhbGl6ZShub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0ICs9IHNlcmlhbGl6ZXIuc2VyaWFsaXplKHsgY2hpbGROb2RlczogW2lkbFV0aWxzLndyYXBwZXJGb3JJbXBsKG5vZGUpXSB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgcGFyc2U1ID0gcmVxdWlyZShcInBhcnNlNVwiKTtcbmNvbnN0IHNheCA9IHJlcXVpcmUoXCJzYXhcIik7XG5jb25zdCBhdHRyaWJ1dGVzID0gcmVxdWlyZShcIi4uL2xpdmluZy9hdHRyaWJ1dGVzXCIpO1xuY29uc3QgRG9jdW1lbnRUeXBlID0gcmVxdWlyZShcIi4uL2xpdmluZy9nZW5lcmF0ZWQvRG9jdW1lbnRUeXBlXCIpO1xuY29uc3QgbG9jYXRpb25JbmZvID0gcmVxdWlyZShcIi4uL2xpdmluZy9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5sb2NhdGlvbkluZm87XG5cbmNsYXNzIEh0bWxUb0RvbSB7XG4gIGNvbnN0cnVjdG9yKGNvcmUsIHBhcnNlciwgcGFyc2luZ01vZGUpIHtcbiAgICBpZiAoIXBhcnNlcikge1xuICAgICAgaWYgKHBhcnNpbmdNb2RlID09PSBcInhtbFwiKSB7XG4gICAgICAgIHBhcnNlciA9IHNheDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlciA9IHBhcnNlNTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvcmUgPSBjb3JlO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucGFyc2luZ01vZGUgPSBwYXJzaW5nTW9kZTtcblxuICAgIGlmIChwYXJzZXIuRGVmYXVsdEhhbmRsZXIpIHtcbiAgICAgIHRoaXMucGFyc2VyVHlwZSA9IFwiaHRtbHBhcnNlcjJcIjtcbiAgICB9IGVsc2UgaWYgKHBhcnNlci5QYXJzZXIgJiYgcGFyc2VyLlRyZWVBZGFwdGVycykge1xuICAgICAgdGhpcy5wYXJzZXJUeXBlID0gXCJwYXJzZTV2MVwiO1xuICAgIH0gZWxzZSBpZiAocGFyc2VyLm1vZHVsZU5hbWUgPT09IFwiSFRNTDVcIikge1xuICAgICAgdGhpcy5wYXJzZXJUeXBlID0gXCJodG1sNVwiO1xuICAgIH0gZWxzZSBpZiAocGFyc2VyLnBhcnNlcikge1xuICAgICAgdGhpcy5wYXJzZXJUeXBlID0gXCJzYXhcIjtcbiAgICB9XG4gIH1cblxuICBhcHBlbmRIdG1sVG9FbGVtZW50KGh0bWwsIGVsZW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIGh0bWwgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGh0bWwgPSBTdHJpbmcoaHRtbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbXCJfcGFyc2VXaXRoXCIgKyB0aGlzLnBhcnNlclR5cGVdKGh0bWwsIHRydWUsIGVsZW1lbnQpO1xuICB9XG5cbiAgYXBwZW5kSHRtbFRvRG9jdW1lbnQoaHRtbCwgZG9jdW1lbnRJbXBsKSB7XG4gICAgaWYgKHR5cGVvZiBodG1sICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICBodG1sID0gU3RyaW5nKGh0bWwpO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSBkb2N1bWVudEltcGwuX3BhcnNlT3B0aW9ucztcbiAgICByZXR1cm4gdGhpc1tcIl9wYXJzZVdpdGhcIiArIHRoaXMucGFyc2VyVHlwZV0oaHRtbCwgZmFsc2UsIGRvY3VtZW50SW1wbCwgb3B0aW9ucyk7XG4gIH1cblxuICBfcGFyc2VXaXRoaHRtbHBhcnNlcjIoaHRtbCwgZnJhZ21lbnQsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IHRoaXMucGFyc2VyLkRlZmF1bHRIYW5kbGVyKCk7XG4gICAgLy8gQ2hlY2sgaWYgZG9jdW1lbnQgaXMgWE1MXG4gICAgY29uc3QgaXNYTUwgPSB0aGlzLnBhcnNpbmdNb2RlID09PSBcInhtbFwiO1xuICAgIGNvbnN0IHBhcnNlckluc3RhbmNlID0gbmV3IHRoaXMucGFyc2VyLlBhcnNlcihoYW5kbGVyLCB7XG4gICAgICB4bWxNb2RlOiBpc1hNTCxcbiAgICAgIGxvd2VyQ2FzZVRhZ3M6ICFpc1hNTCxcbiAgICAgIGxvd2VyQ2FzZUF0dHJpYnV0ZU5hbWVzOiAhaXNYTUwsXG4gICAgICBkZWNvZGVFbnRpdGllczogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcGFyc2VySW5zdGFuY2UuaW5jbHVkZUxvY2F0aW9uID0gZmFsc2U7XG4gICAgcGFyc2VySW5zdGFuY2UucGFyc2VDb21wbGV0ZShodG1sKTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IGhhbmRsZXIuZG9tO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyc2VkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzZXRDaGlsZCh0aGlzLmNvcmUsIGVsZW1lbnQsIHBhcnNlZFtpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBfcGFyc2VXaXRocGFyc2U1djEoaHRtbCwgZnJhZ21lbnQsIGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5wYXJzaW5nTW9kZSA9PT0gXCJ4bWxcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgcGFyc2UgWE1MIHdpdGggcGFyc2U1LCBwbGVhc2UgdXNlIGh0bWxwYXJzZXIyIGluc3RlYWQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGh0bWxwYXJzZXIyQWRhcHRlciA9IHRoaXMucGFyc2VyLlRyZWVBZGFwdGVycy5odG1scGFyc2VyMjtcbiAgICBsZXQgZG9tO1xuICAgIGlmIChmcmFnbWVudCkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgdGhpcy5wYXJzZXIuUGFyc2VyKGh0bWxwYXJzZXIyQWRhcHRlcik7XG4gICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gaHRtbHBhcnNlcjJBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCksIGVsZW1lbnQubmFtZXNwYWNlVVJJLCBbXSk7XG4gICAgICBkb20gPSBpbnN0YW5jZS5wYXJzZUZyYWdtZW50KGh0bWwsIHBhcmVudEVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB0aGlzLnBhcnNlci5QYXJzZXIoaHRtbHBhcnNlcjJBZGFwdGVyLCBvcHRpb25zKTtcbiAgICAgIGRvbSA9IGluc3RhbmNlLnBhcnNlKGh0bWwpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IGRvbS5jaGlsZHJlbjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnNlZC5sZW5ndGg7IGkrKykge1xuICAgICAgc2V0Q2hpbGQodGhpcy5jb3JlLCBlbGVtZW50LCBwYXJzZWRbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgX3BhcnNlV2l0aGh0bWw1KGh0bWwsIGZyYWdtZW50LCBlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT09IDkpIHtcbiAgICAgIG5ldyB0aGlzLnBhcnNlci5QYXJzZXIoeyBkb2N1bWVudDogZWxlbWVudCB9KS5wYXJzZShodG1sKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcCA9IG5ldyB0aGlzLnBhcnNlci5QYXJzZXIoeyBkb2N1bWVudDogZWxlbWVudC5vd25lckRvY3VtZW50IH0pO1xuICAgICAgcC5wYXJzZV9mcmFnbWVudChodG1sLCBlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBfcGFyc2VXaXRoc2F4KGh0bWwsIGZyYWdtZW50LCBlbGVtZW50KSB7XG4gICAgY29uc3QgU2F4UGFyc2VyID0gdGhpcy5wYXJzZXIucGFyc2VyO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTYXhQYXJzZXIoLyogc3RyaWN0ID0gKi90cnVlLCB7IHhtbG5zOiB0cnVlIH0pO1xuICAgIHBhcnNlci5ub3NjcmlwdCA9IGZhbHNlO1xuICAgIHBhcnNlci5sb29zZUNhc2UgPSBcInRvU3RyaW5nXCI7XG4gICAgY29uc3Qgb3BlblN0YWNrID0gW2VsZW1lbnRdO1xuICAgIHBhcnNlci5vbnRleHQgPSB0ZXh0ID0+IHtcbiAgICAgIHNldENoaWxkKHRoaXMuY29yZSwgb3BlblN0YWNrW29wZW5TdGFjay5sZW5ndGggLSAxXSwge1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgZGF0YTogdGV4dFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBwYXJzZXIub25vcGVudGFnID0gYXJnID0+IHtcbiAgICAgIGNvbnN0IGF0dHJWYWx1ZXMgPSB7fTtcbiAgICAgIGNvbnN0IGF0dHJQcmVmaXhlcyA9IHt9O1xuICAgICAgY29uc3QgYXR0ck5hbWVzcGFjZXMgPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKGFyZy5hdHRyaWJ1dGVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IGxvY2FsTmFtZSA9IGFyZy5hdHRyaWJ1dGVzW2tleV0ubG9jYWw7XG4gICAgICAgIGF0dHJWYWx1ZXNbbG9jYWxOYW1lXSA9IGFyZy5hdHRyaWJ1dGVzW2tleV0udmFsdWU7XG4gICAgICAgIGF0dHJQcmVmaXhlc1tsb2NhbE5hbWVdID0gYXJnLmF0dHJpYnV0ZXNba2V5XS5wcmVmaXggfHwgbnVsbDtcbiAgICAgICAgYXR0ck5hbWVzcGFjZXNbbG9jYWxOYW1lXSA9IGFyZy5hdHRyaWJ1dGVzW2tleV0udXJpIHx8IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGFyZy5sb2NhbCA9PT0gXCJzY3JpcHRcIiAmJiBhcmcudXJpID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIikge1xuICAgICAgICBvcGVuU3RhY2sucHVzaCh7XG4gICAgICAgICAgdHlwZTogXCJ0YWdcIixcbiAgICAgICAgICBuYW1lOiBhcmcubG9jYWwsXG4gICAgICAgICAgcHJlZml4OiBhcmcucHJlZml4LFxuICAgICAgICAgIG5hbWVzcGFjZTogYXJnLnVyaSxcbiAgICAgICAgICBhdHRyaWJzOiBhdHRyVmFsdWVzLFxuICAgICAgICAgIFwieC1hdHRyaWJzUHJlZml4XCI6IGF0dHJQcmVmaXhlcyxcbiAgICAgICAgICBcIngtYXR0cmlic05hbWVzcGFjZVwiOiBhdHRyTmFtZXNwYWNlc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBzZXRDaGlsZCh0aGlzLmNvcmUsIG9wZW5TdGFja1tvcGVuU3RhY2subGVuZ3RoIC0gMV0sIHtcbiAgICAgICAgICB0eXBlOiBcInRhZ1wiLFxuICAgICAgICAgIG5hbWU6IGFyZy5sb2NhbCxcbiAgICAgICAgICBwcmVmaXg6IGFyZy5wcmVmaXgsXG4gICAgICAgICAgbmFtZXNwYWNlOiBhcmcudXJpLFxuICAgICAgICAgIGF0dHJpYnM6IGF0dHJWYWx1ZXMsXG4gICAgICAgICAgXCJ4LWF0dHJpYnNQcmVmaXhcIjogYXR0clByZWZpeGVzLFxuICAgICAgICAgIFwieC1hdHRyaWJzTmFtZXNwYWNlXCI6IGF0dHJOYW1lc3BhY2VzXG4gICAgICAgIH0pO1xuICAgICAgICBvcGVuU3RhY2sucHVzaChlbGVtKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHBhcnNlci5vbmNsb3NldGFnID0gKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbSA9IG9wZW5TdGFjay5wb3AoKTtcbiAgICAgIGlmIChlbGVtLmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiT2JqZWN0XCIpIHsgLy8gd2UgaGF2ZSBhbiBlbXB0eSBzY3JpcHQgdGFnXG4gICAgICAgIHNldENoaWxkKHRoaXMuY29yZSwgb3BlblN0YWNrW29wZW5TdGFjay5sZW5ndGggLSAxXSwgZWxlbSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBwYXJzZXIub25zY3JpcHQgPSBzY3JpcHRUZXh0ID0+IHtcbiAgICAgIGNvbnN0IHRhZyA9IG9wZW5TdGFjay5wb3AoKTtcbiAgICAgIHRhZy5jaGlsZHJlbiA9IFt7IHR5cGU6IFwidGV4dFwiLCBkYXRhOiBzY3JpcHRUZXh0IH1dO1xuICAgICAgY29uc3QgZWxlbSA9IHNldENoaWxkKHRoaXMuY29yZSwgb3BlblN0YWNrW29wZW5TdGFjay5sZW5ndGggLSAxXSwgdGFnKTtcbiAgICAgIG9wZW5TdGFjay5wdXNoKGVsZW0pO1xuICAgIH07XG4gICAgcGFyc2VyLm9uY29tbWVudCA9IGNvbW1lbnQgPT4ge1xuICAgICAgc2V0Q2hpbGQodGhpcy5jb3JlLCBvcGVuU3RhY2tbb3BlblN0YWNrLmxlbmd0aCAtIDFdLCB7XG4gICAgICAgIHR5cGU6IFwiY29tbWVudFwiLFxuICAgICAgICBkYXRhOiBjb21tZW50XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHBhcnNlci5vbnByb2Nlc3NpbmdpbnN0cnVjdGlvbiA9IHBpID0+IHtcbiAgICAgIHNldENoaWxkKHRoaXMuY29yZSwgb3BlblN0YWNrW29wZW5TdGFjay5sZW5ndGggLSAxXSwge1xuICAgICAgICB0eXBlOiBcImRpcmVjdGl2ZVwiLFxuICAgICAgICBuYW1lOiBcIj9cIiArIHBpLm5hbWUsXG4gICAgICAgIGRhdGE6IFwiP1wiICsgcGkubmFtZSArIFwiIFwiICsgcGkuYm9keSArIFwiP1wiXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHBhcnNlci5vbmRvY3R5cGUgPSBkdCA9PiB7XG4gICAgICBzZXRDaGlsZCh0aGlzLmNvcmUsIG9wZW5TdGFja1tvcGVuU3RhY2subGVuZ3RoIC0gMV0sIHtcbiAgICAgICAgdHlwZTogXCJkaXJlY3RpdmVcIixcbiAgICAgICAgbmFtZTogXCIhZG9jdHlwZVwiLFxuICAgICAgICBkYXRhOiBcIiFkb2N0eXBlIFwiICsgZHRcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBlbnRpdHlNYXRjaGVyID0gLzwhRU5USVRZIChbXiBdKykgXCIoW15cIl0rKVwiPi9nO1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gZW50aXR5TWF0Y2hlci5leGVjKGR0KSkpIHtcbiAgICAgICAgY29uc3QgWywgbmFtZSwgdmFsdWVdID0gcmVzdWx0O1xuICAgICAgICBpZiAoIShuYW1lIGluIHBhcnNlci5FTlRJVElFUykpIHtcbiAgICAgICAgICBwYXJzZXIuRU5USVRJRVNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBwYXJzZXIub25lcnJvciA9IGVyciA9PiB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfTtcbiAgICBwYXJzZXIud3JpdGUoaHRtbCkuY2xvc2UoKTtcbiAgfVxufVxuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uIGZvciBmb3JnaXZpbmcgcGFyc2VyXG5mdW5jdGlvbiBzZXRDaGlsZChjb3JlLCBwYXJlbnRJbXBsLCBub2RlKSB7XG4gIGNvbnN0IGN1cnJlbnREb2N1bWVudCA9IHBhcmVudEltcGwgJiYgcGFyZW50SW1wbC5fb3duZXJEb2N1bWVudCB8fCBwYXJlbnRJbXBsO1xuXG4gIGxldCBuZXdOb2RlO1xuICBsZXQgaXNUZW1wbGF0ZUNvbnRlbnRzID0gZmFsc2U7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSBcInRhZ1wiOlxuICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgIG5ld05vZGUgPSBjdXJyZW50RG9jdW1lbnQuX2NyZWF0ZUVsZW1lbnRXaXRoQ29ycmVjdEVsZW1lbnRJbnRlcmZhY2Uobm9kZS5uYW1lLCBub2RlLm5hbWVzcGFjZSk7XG4gICAgICBuZXdOb2RlLl9wcmVmaXggPSBub2RlLnByZWZpeCB8fCBudWxsO1xuICAgICAgbmV3Tm9kZS5fbmFtZXNwYWNlVVJJID0gbm9kZS5uYW1lc3BhY2UgfHwgbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInJvb3RcIjpcbiAgICAgIC8vIElmIHdlIGFyZSBpbiA8dGVtcGxhdGU+IHRoZW4gYWRkIGFsbCBjaGlsZHJlbiB0byB0aGUgcGFyZW50J3MgX3RlbXBsYXRlQ29udGVudHM7IHNraXAgdGhpcyB2aXJ0dWFsIHJvb3Qgbm9kZS5cbiAgICAgIGlmIChwYXJlbnRJbXBsLnRhZ05hbWUgPT09IFwiVEVNUExBVEVcIiAmJiBwYXJlbnRJbXBsLl9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSB7XG4gICAgICAgIG5ld05vZGUgPSBwYXJlbnRJbXBsLl90ZW1wbGF0ZUNvbnRlbnRzO1xuICAgICAgICBpc1RlbXBsYXRlQ29udGVudHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgLy8gSFRNTCBlbnRpdGllcyBzaG91bGQgYWxyZWFkeSBiZSBkZWNvZGVkIGJ5IHRoZSBwYXJzZXIsIHNvIG5vIG5lZWQgdG8gZGVjb2RlIHRoZW1cbiAgICAgIG5ld05vZGUgPSBjdXJyZW50RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZS5kYXRhKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImNvbW1lbnRcIjpcbiAgICAgIG5ld05vZGUgPSBjdXJyZW50RG9jdW1lbnQuY3JlYXRlQ29tbWVudChub2RlLmRhdGEpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiZGlyZWN0aXZlXCI6XG4gICAgICBpZiAobm9kZS5uYW1lWzBdID09PSBcIj9cIiAmJiBub2RlLm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCI/eG1sXCIpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG5vZGUuZGF0YS5zbGljZShub2RlLm5hbWUubGVuZ3RoICsgMSwgLTEpO1xuICAgICAgICBuZXdOb2RlID0gY3VycmVudERvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihub2RlLm5hbWUuc3Vic3RyaW5nKDEpLCBkYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiIWRvY3R5cGVcIikge1xuICAgICAgICBpZiAobm9kZVtcIngtbmFtZVwiXSAhPT0gdW5kZWZpbmVkKSB7IC8vIHBhcnNlNSBzdXBwb3J0cyBkb2N0eXBlcyBkaXJlY3RseVxuICAgICAgICAgIG5ld05vZGUgPSBjcmVhdGVEb2N1bWVudFR5cGVJbnRlcm5hbChjb3JlLCBjdXJyZW50RG9jdW1lbnQsXG4gICAgICAgICAgICBub2RlW1wieC1uYW1lXCJdIHx8IFwiXCIsXG4gICAgICAgICAgICBub2RlW1wieC1wdWJsaWNJZFwiXSB8fCBcIlwiLFxuICAgICAgICAgICAgbm9kZVtcIngtc3lzdGVtSWRcIl0gfHwgXCJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3Tm9kZSA9IHBhcnNlRG9jVHlwZShjb3JlLCBjdXJyZW50RG9jdW1lbnQsIFwiPFwiICsgbm9kZS5kYXRhICsgXCI+XCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmICghbmV3Tm9kZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbmV3Tm9kZVtsb2NhdGlvbkluZm9dID0gbm9kZS5fX2xvY2F0aW9uO1xuXG4gIGlmIChub2RlLmF0dHJpYnMpIHtcbiAgICBPYmplY3Qua2V5cyhub2RlLmF0dHJpYnMpLmZvckVhY2gobG9jYWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gbm9kZS5hdHRyaWJzW2xvY2FsTmFtZV07XG4gICAgICBsZXQgcHJlZml4ID1cbiAgICAgICAgbm9kZVtcIngtYXR0cmlic1ByZWZpeFwiXSAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZVtcIngtYXR0cmlic1ByZWZpeFwiXSwgbG9jYWxOYW1lKSAmJlxuICAgICAgICBub2RlW1wieC1hdHRyaWJzUHJlZml4XCJdW2xvY2FsTmFtZV0gfHwgbnVsbDtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZSA9XG4gICAgICAgIG5vZGVbXCJ4LWF0dHJpYnNOYW1lc3BhY2VcIl0gJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVbXCJ4LWF0dHJpYnNOYW1lc3BhY2VcIl0sIGxvY2FsTmFtZSkgJiZcbiAgICAgICAgbm9kZVtcIngtYXR0cmlic05hbWVzcGFjZVwiXVtsb2NhbE5hbWVdIHx8IG51bGw7XG4gICAgICBpZiAocHJlZml4ID09PSBcInhtbG5zXCIgJiYgbG9jYWxOYW1lID09PSBcIlwiKSB7XG4gICAgICAgICAvLyBpbnRlbmRlZCB3ZWlyZG5lc3MgaW4gbm9kZS1zYXgsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL3NheC1qcy9pc3N1ZXMvMTY1XG4gICAgICAgIGxvY2FsTmFtZSA9IHByZWZpeDtcbiAgICAgICAgcHJlZml4ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGF0dHJpYnV0ZXMuc2V0QXR0cmlidXRlVmFsdWUobmV3Tm9kZSwgbG9jYWxOYW1lLCB2YWx1ZSwgcHJlZml4LCBuYW1lc3BhY2UpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICBmb3IgKGxldCBjID0gMDsgYyA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBjKyspIHtcbiAgICAgIHNldENoaWxkKGNvcmUsIG5ld05vZGUsIG5vZGUuY2hpbGRyZW5bY10pO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaXNUZW1wbGF0ZUNvbnRlbnRzKSB7XG4gICAgaWYgKHBhcmVudEltcGwuX3RlbXBsYXRlQ29udGVudHMpIHtcbiAgICAgIC8vIFNldHRpbmcgaW5uZXJIVE1MIG9uIGEgPHRlbXBsYXRlPlxuICAgICAgcGFyZW50SW1wbC5fdGVtcGxhdGVDb250ZW50cy5hcHBlbmRDaGlsZChuZXdOb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50SW1wbC5hcHBlbmRDaGlsZChuZXdOb2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Tm9kZTtcbn1cblxuY29uc3QgSFRNTDVfRE9DVFlQRSA9IC88IWRvY3R5cGUgaHRtbD4vaTtcbmNvbnN0IFBVQkxJQ19ET0NUWVBFID0gLzwhZG9jdHlwZVxccysoW15cXHNdKylcXHMrcHVibGljXFxzK1wiKFteXCJdKylcIlxccytcIihbXlwiXSspXCIvaTtcbmNvbnN0IFNZU1RFTV9ET0NUWVBFID0gLzwhZG9jdHlwZVxccysoW15cXHNdKylcXHMrc3lzdGVtXFxzK1wiKFteXCJdKylcIi9pO1xuXG5mdW5jdGlvbiBwYXJzZURvY1R5cGUoY29yZSwgZG9jLCBodG1sKSB7XG4gIGlmIChIVE1MNV9ET0NUWVBFLnRlc3QoaHRtbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRG9jdW1lbnRUeXBlSW50ZXJuYWwoY29yZSwgZG9jLCBcImh0bWxcIiwgXCJcIiwgXCJcIik7XG4gIH1cblxuICBjb25zdCBwdWJsaWNQaWVjZXMgPSBQVUJMSUNfRE9DVFlQRS5leGVjKGh0bWwpO1xuICBpZiAocHVibGljUGllY2VzKSB7XG4gICAgcmV0dXJuIGNyZWF0ZURvY3VtZW50VHlwZUludGVybmFsKGNvcmUsIGRvYywgcHVibGljUGllY2VzWzFdLCBwdWJsaWNQaWVjZXNbMl0sIHB1YmxpY1BpZWNlc1szXSk7XG4gIH1cblxuICBjb25zdCBzeXN0ZW1QaWVjZXMgPSBTWVNURU1fRE9DVFlQRS5leGVjKGh0bWwpO1xuICBpZiAoc3lzdGVtUGllY2VzKSB7XG4gICAgcmV0dXJuIGNyZWF0ZURvY3VtZW50VHlwZUludGVybmFsKGNvcmUsIGRvYywgc3lzdGVtUGllY2VzWzFdLCBcIlwiLCBzeXN0ZW1QaWVjZXNbMl0pO1xuICB9XG5cbiAgLy8gU2hvdWxkbid0IGdldCBoZXJlICh0aGUgcGFyc2VyIHNob3VsZG4ndCBsZXQgdXMga25vdyBhYm91dCBpbnZhbGlkIGRvY3R5cGVzKSwgYnV0IG91ciBsb2dpYyBsaWtlbHkgaXNuJ3RcbiAgLy8gcmVhbC13b3JsZCBwZXJmZWN0LCBzbyBsZXQncyBmYWxsYmFjay5cbiAgcmV0dXJuIGNyZWF0ZURvY3VtZW50VHlwZUludGVybmFsKGNvcmUsIGRvYywgXCJodG1sXCIsIFwiXCIsIFwiXCIpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEb2N1bWVudFR5cGVJbnRlcm5hbChjb3JlLCBvd25lckRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcbiAgcmV0dXJuIERvY3VtZW50VHlwZS5jcmVhdGVJbXBsKFtdLCB7IGNvcmUsIG93bmVyRG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCB9KTtcbn1cblxuZXhwb3J0cy5IdG1sVG9Eb20gPSBIdG1sVG9Eb207XG4iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZUZvckVycm9yTWVzc2FnZSwgd2luZG93KSB7XG4gIGlmICghd2luZG93KSB7XG4gICAgLy8gRG8gbm90aGluZyBmb3Igd2luZG93LWxlc3MgZG9jdW1lbnRzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBOb3QgaW1wbGVtZW50ZWQ6ICR7bmFtZUZvckVycm9yTWVzc2FnZX1gKTtcbiAgZXJyb3IudHlwZSA9IFwibm90IGltcGxlbWVudGVkXCI7XG5cbiAgd2luZG93Ll92aXJ0dWFsQ29uc29sZS5lbWl0KFwianNkb21FcnJvclwiLCBlcnJvcik7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHBhcnNlQ29udGVudFR5cGUgPSByZXF1aXJlKFwiY29udGVudC10eXBlLXBhcnNlclwiKTtcbmNvbnN0IHNuaWZmSFRNTEVuY29kaW5nID0gcmVxdWlyZShcImh0bWwtZW5jb2Rpbmctc25pZmZlclwiKTtcbmNvbnN0IHdoYXR3Z0VuY29kaW5nID0gcmVxdWlyZShcIndoYXR3Zy1lbmNvZGluZ1wiKTtcbmNvbnN0IHBhcnNlRGF0YVVybCA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKS5wYXJzZURhdGFVcmw7XG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKFwicmVxdWVzdFwiKTtcbmNvbnN0IGRvY3VtZW50QmFzZVVSTFNlcmlhbGl6ZWQgPSByZXF1aXJlKFwiLi4vbGl2aW5nL2hlbHBlcnMvZG9jdW1lbnQtYmFzZS11cmxcIikuZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZDtcbmNvbnN0IE5PREVfVFlQRSA9IHJlcXVpcmUoXCIuLi9saXZpbmcvbm9kZS10eXBlXCIpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLW1vZHVsZXMgKi9cbi8vIFRPRE86IHN0b3AgdXNpbmcgdGhlIGJ1aWx0LWluIFVSTCBpbiBmYXZvciBvZiB0aGUgc3BlYy1jb21wbGlhbnQgd2hhdHdnLXVybCBwYWNrYWdlXG4vLyBUaGlzIGxlZ2FjeSB1c2FnZSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBwdXJnZWQuXG5jb25zdCBVUkwgPSByZXF1aXJlKFwidXJsXCIpO1xuLyogZXNsaW50LWVuYWJsZSBuby1yZXN0cmljdGVkLW1vZHVsZXMgKi9cblxuY29uc3QgSVNfQlJPV1NFUiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9jZXNzKSAhPT0gXCJbb2JqZWN0IHByb2Nlc3NdXCI7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlTG9hZEhhbmRsZXIoZWxlbWVudCwgcmVzb3VyY2VVcmwsIGRvY3VtZW50LCBsb2FkQ2FsbGJhY2spIHtcbiAgaWYgKGxvYWRDYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbG9hZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIChlcnIsIGRhdGEsIHJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3QgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7XG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9hZENhbGxiYWNrLmNhbGwoZWxlbWVudCwgZGF0YSwgcmVzb3VyY2VVcmwsIHJlc3BvbnNlKTtcbiAgICAgICAgZXYuaW5pdEV2ZW50KFwibG9hZFwiLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlcnIgPSBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIGlmICghZXJyLmlzQWJvcnRFcnJvcikge1xuICAgICAgICBldi5pbml0RXZlbnQoXCJlcnJvclwiLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICBldi5lcnJvciA9IGVycjtcbiAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2KTtcblxuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgQ291bGQgbm90IGxvYWQgJHtlbGVtZW50LmxvY2FsTmFtZX06IFwiJHtyZXNvdXJjZVVybH1cImApO1xuICAgICAgICBlcnJvci5kZXRhaWwgPSBlcnI7XG4gICAgICAgIGVycm9yLnR5cGUgPSBcInJlc291cmNlIGxvYWRpbmdcIjtcblxuICAgICAgICBkb2N1bWVudC5fZGVmYXVsdFZpZXcuX3ZpcnR1YWxDb25zb2xlLmVtaXQoXCJqc2RvbUVycm9yXCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2KTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydHMucmVhZEZpbGUgPSBmdW5jdGlvbiAoZmlsZVBhdGgsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCk7XG5cbiAgbGV0IGRhdGEgPSBuZXcgQnVmZmVyKDApO1xuXG4gIHJlYWRhYmxlU3RyZWFtLm9uKFwiZXJyb3JcIiwgY2FsbGJhY2spO1xuXG4gIHJlYWRhYmxlU3RyZWFtLm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XG4gICAgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW2RhdGEsIGNodW5rXSk7XG4gIH0pO1xuXG4gIGNvbnN0IGRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nO1xuICBjb25zdCBkZXRlY3RNZXRhQ2hhcnNldCA9IG9wdGlvbnMuZGV0ZWN0TWV0YUNoYXJzZXQ7XG5cbiAgcmVhZGFibGVTdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgIC8vIE5vdCBwYXNzaW5nIGRlZmF1bHQgZW5jb2RpbmcgbWVhbnMgYmluYXJ5XG4gICAgaWYgKGRlZmF1bHRFbmNvZGluZykge1xuICAgICAgY29uc3QgZW5jb2RpbmcgPSBkZXRlY3RNZXRhQ2hhcnNldCA/IHNuaWZmSFRNTEVuY29kaW5nKGRhdGEsIHsgZGVmYXVsdEVuY29kaW5nIH0pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgd2hhdHdnRW5jb2RpbmcuZ2V0Qk9NRW5jb2RpbmcoZGF0YSkgfHwgZGVmYXVsdEVuY29kaW5nO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IHdoYXR3Z0VuY29kaW5nLmRlY29kZShkYXRhLCBlbmNvZGluZyk7XG4gICAgICBjYWxsYmFjayhudWxsLCBkZWNvZGVkLCB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9XCIgKyBlbmNvZGluZyB9IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsLCBkYXRhKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYWJvcnQoKSB7XG4gICAgICByZWFkYWJsZVN0cmVhbS5kZXN0cm95KCk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcInJlcXVlc3QgY2FuY2VsZWQgYnkgdXNlclwiKTtcbiAgICAgIGVycm9yLmlzQWJvcnRFcnJvciA9IHRydWU7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gcmVhZERhdGFVcmwoZGF0YVVybCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgY29uc3QgZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2Rpbmc7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlRGF0YVVybChkYXRhVXJsKTtcbiAgICAvLyBJZiBkZWZhdWx0IGVuY29kaW5nIGRvZXMgbm90IGV4aXN0LCBwYXNzIG9uIGJpbmFyeSBkYXRhLlxuICAgIGlmIChkZWZhdWx0RW5jb2RpbmcpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VDb250ZW50VHlwZShkYXRhLnR5cGUpIHx8IHBhcnNlQ29udGVudFR5cGUoXCJ0ZXh0L3BsYWluXCIpO1xuICAgICAgY29uc3Qgc25pZmZPcHRpb25zID0ge1xuICAgICAgICB0cmFuc3BvcnRMYXllckVuY29kaW5nTGFiZWw6IGNvbnRlbnRUeXBlLmdldChcImNoYXJzZXRcIiksXG4gICAgICAgIGRlZmF1bHRFbmNvZGluZ1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZW5jb2RpbmcgPSBvcHRpb25zLmRldGVjdE1ldGFDaGFyc2V0ID8gc25pZmZIVE1MRW5jb2RpbmcoZGF0YS5idWZmZXIsIHNuaWZmT3B0aW9ucykgOlxuICAgICAgICAgICAgICAgICAgICAgICB3aGF0d2dFbmNvZGluZy5nZXRCT01FbmNvZGluZyhkYXRhLmJ1ZmZlcikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgd2hhdHdnRW5jb2RpbmcubGFiZWxUb05hbWUoY29udGVudFR5cGUuZ2V0KFwiY2hhcnNldFwiKSkgfHwgZGVmYXVsdEVuY29kaW5nO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IHdoYXR3Z0VuY29kaW5nLmRlY29kZShkYXRhLmJ1ZmZlciwgZW5jb2RpbmcpO1xuXG4gICAgICBjb250ZW50VHlwZS5zZXQoXCJjaGFyc2V0XCIsIGVuY29kaW5nKTtcbiAgICAgIGRhdGEudHlwZSA9IGNvbnRlbnRUeXBlLnRvU3RyaW5nKCk7XG5cbiAgICAgIGNhbGxiYWNrKG51bGwsIGRlY29kZWQsIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBkYXRhLnR5cGUgfSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sobnVsbCwgZGF0YS5idWZmZXIsIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBkYXRhLnR5cGUgfSB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbGxiYWNrKGVyciwgbnVsbCk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIE5PVEU6IHJlcXVlc3Qgd3JhcHMgdG91Z2gtY29va2llIGNvb2tpZSBqYXJcbi8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1ZXN0L3JlcXVlc3QvYmxvYi9tYXN0ZXIvbGliL2Nvb2tpZXMuanMpLlxuLy8gVGhlcmVmb3JlLCB0byBwYXNzIG91ciBjb29raWUgamFyIHRvIHRoZSByZXF1ZXN0LCB3ZSBuZWVkIHRvIGNyZWF0ZVxuLy8gcmVxdWVzdCdzIHdyYXBwZXIgYW5kIG1vbmtleSBwYXRjaCBpdCB3aXRoIG91ciBqYXIuXG5leHBvcnRzLndyYXBDb29raWVKYXJGb3JSZXF1ZXN0ID0gY29va2llSmFyID0+IHtcbiAgY29uc3QgamFyV3JhcHBlciA9IHJlcXVlc3QuamFyKCk7XG4gIGphcldyYXBwZXIuX2phciA9IGNvb2tpZUphcjtcbiAgcmV0dXJuIGphcldyYXBwZXI7XG59O1xuXG5mdW5jdGlvbiBmZXRjaCh1cmxPYmosIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGlmICh1cmxPYmoucHJvdG9jb2wgPT09IFwiZGF0YTpcIikge1xuICAgIHJldHVybiByZWFkRGF0YVVybCh1cmxPYmouaHJlZiwgb3B0aW9ucywgY2FsbGJhY2spO1xuICB9IGVsc2UgaWYgKHVybE9iai5ob3N0bmFtZSkge1xuICAgIHJldHVybiBleHBvcnRzLmRvd25sb2FkKHVybE9iaiwgb3B0aW9ucywgY2FsbGJhY2spO1xuICB9XG4gIGNvbnN0IGZpbGVQYXRoID0gdXJsT2JqLnBhdGhuYW1lXG4gICAgLnJlcGxhY2UoL15maWxlOlxcL1xcLy8sIFwiXCIpXG4gICAgLnJlcGxhY2UoL15cXC8oW2Etel0pOlxcLy9pLCBcIiQxOi9cIilcbiAgICAucmVwbGFjZSgvJTIwL2csIFwiIFwiKTtcbiAgcmV0dXJuIGV4cG9ydHMucmVhZEZpbGUoZmlsZVBhdGgsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0cy5lbnF1ZXVlID0gZnVuY3Rpb24gKGVsZW1lbnQsIHJlc291cmNlVXJsLCBjYWxsYmFjaykge1xuICBjb25zdCBkb2N1bWVudCA9IGVsZW1lbnQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5ET0NVTUVOVF9OT0RFID8gZWxlbWVudCA6IGVsZW1lbnQuX293bmVyRG9jdW1lbnQ7XG5cbiAgaWYgKGRvY3VtZW50Ll9xdWV1ZSkge1xuICAgIGNvbnN0IGxvYWRIYW5kbGVyID0gY3JlYXRlUmVzb3VyY2VMb2FkSGFuZGxlcihlbGVtZW50LCByZXNvdXJjZVVybCB8fCBkb2N1bWVudC5VUkwsIGRvY3VtZW50LCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIGRvY3VtZW50Ll9xdWV1ZS5wdXNoKGxvYWRIYW5kbGVyKTtcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgLy8gZG8gbm90aGluZyBpbiBxdWV1ZS1sZXNzIGRvY3VtZW50c1xuICB9O1xufTtcblxuZXhwb3J0cy5kb3dubG9hZCA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgIHBvb2w6IG9wdGlvbnMucG9vbCxcbiAgICBhZ2VudDogb3B0aW9ucy5hZ2VudCxcbiAgICBhZ2VudE9wdGlvbnM6IG9wdGlvbnMuYWdlbnRPcHRpb25zLFxuICAgIGFnZW50Q2xhc3M6IG9wdGlvbnMuYWdlbnRDbGFzcyxcbiAgICBzdHJpY3RTU0w6IG9wdGlvbnMuc3RyaWN0U1NMLFxuICAgIGd6aXA6IHRydWUsXG4gICAgamFyOiBleHBvcnRzLndyYXBDb29raWVKYXJGb3JSZXF1ZXN0KG9wdGlvbnMuY29va2llSmFyKSxcbiAgICBlbmNvZGluZzogbnVsbCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBcIlVzZXItQWdlbnRcIjogb3B0aW9ucy51c2VyQWdlbnQsXG4gICAgICBcIkFjY2VwdC1MYW5ndWFnZVwiOiBcImVuXCIsXG4gICAgICBBY2NlcHQ6IG9wdGlvbnMuYWNjZXB0IHx8IFwiKi8qXCJcbiAgICB9XG4gIH07XG4gIGlmIChvcHRpb25zLnJlZmVycmVyICYmICFJU19CUk9XU0VSKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVycy5yZWZlcmVyID0gb3B0aW9ucy5yZWZlcnJlcjtcbiAgfVxuICBpZiAob3B0aW9ucy5wcm94eSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eTtcbiAgfVxuICBPYmplY3QuYXNzaWduKHJlcXVlc3RPcHRpb25zLmhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycyk7XG5cbiAgY29uc3QgZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2Rpbmc7XG4gIGNvbnN0IGRldGVjdE1ldGFDaGFyc2V0ID0gb3B0aW9ucy5kZXRlY3RNZXRhQ2hhcnNldDtcblxuICBjb25zdCByZXEgPSByZXF1ZXN0KHVybCwgcmVxdWVzdE9wdGlvbnMsIChlcnJvciwgcmVzcG9uc2UsIGJ1ZmZlckRhdGEpID0+IHtcbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICAvLyBJZiBkZWZhdWx0IGVuY29kaW5nIGRvZXMgbm90IGV4aXN0LCBwYXNzIG9uIGJpbmFyeSBkYXRhLlxuICAgICAgaWYgKGRlZmF1bHRFbmNvZGluZykge1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhcnNlQ29udGVudFR5cGUocmVzcG9uc2UuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSkgfHwgcGFyc2VDb250ZW50VHlwZShcInRleHQvcGxhaW5cIik7XG4gICAgICAgIGNvbnN0IHNuaWZmT3B0aW9ucyA9IHtcbiAgICAgICAgICB0cmFuc3BvcnRMYXllckVuY29kaW5nTGFiZWw6IGNvbnRlbnRUeXBlLmdldChcImNoYXJzZXRcIiksXG4gICAgICAgICAgZGVmYXVsdEVuY29kaW5nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZW5jb2RpbmcgPSBkZXRlY3RNZXRhQ2hhcnNldCA/IHNuaWZmSFRNTEVuY29kaW5nKGJ1ZmZlckRhdGEsIHNuaWZmT3B0aW9ucykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgd2hhdHdnRW5jb2RpbmcuZ2V0Qk9NRW5jb2RpbmcoYnVmZmVyRGF0YSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKGNvbnRlbnRUeXBlLmdldChcImNoYXJzZXRcIikpIHx8IGRlZmF1bHRFbmNvZGluZztcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IHdoYXR3Z0VuY29kaW5nLmRlY29kZShidWZmZXJEYXRhLCBlbmNvZGluZyk7XG5cbiAgICAgICAgY29udGVudFR5cGUuc2V0KFwiY2hhcnNldFwiLCBlbmNvZGluZyk7XG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gPSBjb250ZW50VHlwZS50b1N0cmluZygpO1xuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGRlY29kZWQsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGJ1ZmZlckRhdGEsIHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZXJyb3IsIG51bGwsIHJlc3BvbnNlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGFib3J0KCkge1xuICAgICAgcmVxLmFib3J0KCk7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcInJlcXVlc3QgY2FuY2VsZWQgYnkgdXNlclwiKTtcbiAgICAgIGVycm9yLmlzQWJvcnRFcnJvciA9IHRydWU7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0cy5sb2FkID0gZnVuY3Rpb24gKGVsZW1lbnQsIHVybFN0cmluZywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBlbGVtZW50Ll9vd25lckRvY3VtZW50O1xuICBjb25zdCBkb2N1bWVudEltcGwgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbjtcblxuICBpZiAoIWRvY3VtZW50SW1wbC5faGFzRmVhdHVyZShcIkZldGNoRXh0ZXJuYWxSZXNvdXJjZXNcIiwgZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGRvY3VtZW50SW1wbC5faGFzRmVhdHVyZShcIlNraXBFeHRlcm5hbFJlc291cmNlc1wiLCB1cmxTdHJpbmcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdXJsT2JqID0gVVJMLnBhcnNlKHVybFN0cmluZyk7XG4gIGNvbnN0IGVucXVldWVkID0gZXhwb3J0cy5lbnF1ZXVlKGVsZW1lbnQsIHVybFN0cmluZywgY2FsbGJhY2spO1xuICBjb25zdCBjdXN0b21Mb2FkZXIgPSBkb2N1bWVudC5fY3VzdG9tUmVzb3VyY2VMb2FkZXI7XG4gIGNvbnN0IHJlcXVlc3RNYW5hZ2VyID0gZG9jdW1lbnQuX3JlcXVlc3RNYW5hZ2VyO1xuICBjb25zdCBjb29raWVKYXIgPSBkb2N1bWVudC5fY29va2llSmFyO1xuXG4gIG9wdGlvbnMuYWNjZXB0ID0gZWxlbWVudC5fYWNjZXB0O1xuICBvcHRpb25zLmNvb2tpZUphciA9IGNvb2tpZUphcjtcbiAgb3B0aW9ucy5yZWZlcnJlciA9IGRvY3VtZW50LlVSTDtcbiAgb3B0aW9ucy5wb29sID0gZG9jdW1lbnQuX3Bvb2w7XG4gIG9wdGlvbnMuYWdlbnRPcHRpb25zID0gZG9jdW1lbnQuX2FnZW50T3B0aW9ucztcbiAgb3B0aW9ucy5zdHJpY3RTU0wgPSBkb2N1bWVudC5fc3RyaWN0U1NMO1xuICBvcHRpb25zLnByb3h5ID0gZG9jdW1lbnQuX3Byb3h5O1xuICBvcHRpb25zLnVzZXJBZ2VudCA9IGRvY3VtZW50Ll9kZWZhdWx0Vmlldy5uYXZpZ2F0b3IudXNlckFnZW50O1xuXG4gIGxldCByZXEgPSBudWxsO1xuICBmdW5jdGlvbiB3cmFwcGVkRW5xdWV1ZWQoKSB7XG4gICAgaWYgKHJlcSAmJiByZXF1ZXN0TWFuYWdlcikge1xuICAgICAgcmVxdWVzdE1hbmFnZXIucmVtb3ZlKHJlcSk7XG4gICAgfVxuICAgIC8vIGRvIG5vdCB0cmlnZ2VyIGlmIHRoZSB3aW5kb3cgaXMgY2xvc2VkXG4gICAgaWYgKGVsZW1lbnQuX293bmVyRG9jdW1lbnQgJiYgZWxlbWVudC5fb3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5kb2N1bWVudCkge1xuICAgICAgZW5xdWV1ZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBjdXN0b21Mb2FkZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJlcSA9IGN1c3RvbUxvYWRlcih7XG4gICAgICBlbGVtZW50LFxuICAgICAgdXJsOiB1cmxPYmosXG4gICAgICBjb29raWU6IGNvb2tpZUphci5nZXRDb29raWVTdHJpbmdTeW5jKHVybE9iaiwgeyBodHRwOiB0cnVlIH0pLFxuICAgICAgYmFzZVVybDogZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZChkb2N1bWVudCksXG4gICAgICBkZWZhdWx0RmV0Y2goZmV0Y2hDYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZmV0Y2godXJsT2JqLCBvcHRpb25zLCBmZXRjaENhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdyYXBwZWRFbnF1ZXVlZCk7XG4gIH0gZWxzZSB7XG4gICAgcmVxID0gZmV0Y2godXJsT2JqLCBvcHRpb25zLCB3cmFwcGVkRW5xdWV1ZWQpO1xuICB9XG4gIGlmIChyZXEgJiYgcmVxdWVzdE1hbmFnZXIpIHtcbiAgICByZXF1ZXN0TWFuYWdlci5hZGQocmVxKTtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgY3Nzb20gPSByZXF1aXJlKFwiY3Nzb21cIik7XG5jb25zdCBjc3NzdHlsZSA9IHJlcXVpcmUoXCJjc3NzdHlsZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlID0+IHtcblxuICAvLyBXaGF0IHdvcmtzIG5vdzpcbiAgLy8gLSBBY2Nlc3NpbmcgdGhlIHJ1bGVzIGRlZmluZWQgaW4gaW5kaXZpZHVhbCBzdHlsZXNoZWV0c1xuICAvLyAtIE1vZGlmaWNhdGlvbnMgdG8gc3R5bGUgY29udGVudCBhdHRyaWJ1dGUgYXJlIHJlZmxlY3RlZCBpbiBzdHlsZSBwcm9wZXJ0eVxuICAvLyAtIE1vZGlmaWNhdGlvbnMgdG8gc3R5bGUgcHJvcGVydHkgYXJlIHJlZmxlY3RlZCBpbiBzdHlsZSBjb250ZW50IGF0dHJpYnV0ZVxuICAvLyBUT0RPXG4gIC8vIC0gTW9kaWZpY2F0aW9ucyB0byBzdHlsZSBlbGVtZW50J3MgdGV4dENvbnRlbnQgYXJlIHJlZmxlY3RlZCBpbiBzaGVldCBwcm9wZXJ0eS5cbiAgLy8gLSBNb2RpZmljYXRpb25zIHRvIHN0eWxlIGVsZW1lbnQncyBzaGVldCBwcm9wZXJ0eSBhcmUgcmVmbGVjdGVkIGluIHRleHRDb250ZW50LlxuICAvLyAtIE1vZGlmaWNhdGlvbnMgdG8gbGluay5ocmVmIHByb3BlcnR5IGFyZSByZWZsZWN0ZWQgaW4gc2hlZXQgcHJvcGVydHkuXG4gIC8vIC0gTGVzcy11c2VkIGZlYXR1cmVzIG9mIGxpbms6IGRpc2FibGVkXG4gIC8vIC0gTGVzcy11c2VkIGZlYXR1cmVzIG9mIHN0eWxlOiBkaXNhYmxlZCwgc2NvcGVkLCB0aXRsZVxuICAvLyAtIENTU09NLVZpZXdcbiAgLy8gICAtIGdldENvbXB1dGVkU3R5bGUoKTogcmVxdWlyZXMgZGVmYXVsdCBzdHlsZXNoZWV0LCBjYXNjYWRpbmcsIGluaGVyaXRhbmNlLFxuICAvLyAgICAgZmlsdGVyaW5nIGJ5IEBtZWRpYSAoc2NyZWVuPyBwcmludD8pLCBsYXlvdXQgZm9yIHdpZHRocy9oZWlnaHRzXG4gIC8vIC0gTG9hZCBldmVudHMgYXJlIG5vdCBpbiB0aGUgc3BlY3MsIGJ1dCBhcHBhcmVudGx5IHNvbWUgYnJvd3NlcnNcbiAgLy8gICBpbXBsZW1lbnQgc29tZXRoaW5nLiBTaG91bGQgb25sb2FkIG9ubHkgZmlyZSBhZnRlciBhbGwgQGltcG9ydHMgaGF2ZSBiZWVuXG4gIC8vICAgbG9hZGVkLCBvciBvbmx5IHRoZSBwcmltYXJ5IHNoZWV0P1xuXG4gIGNvcmUuU3R5bGVTaGVldCA9IGNzc29tLlN0eWxlU2hlZXQ7XG4gIGNvcmUuTWVkaWFMaXN0ID0gY3Nzb20uTWVkaWFMaXN0O1xuICBjb3JlLkNTU1N0eWxlU2hlZXQgPSBjc3NvbS5DU1NTdHlsZVNoZWV0O1xuICBjb3JlLkNTU1J1bGUgPSBjc3NvbS5DU1NSdWxlO1xuICBjb3JlLkNTU1N0eWxlUnVsZSA9IGNzc29tLkNTU1N0eWxlUnVsZTtcbiAgY29yZS5DU1NNZWRpYVJ1bGUgPSBjc3NvbS5DU1NNZWRpYVJ1bGU7XG4gIGNvcmUuQ1NTSW1wb3J0UnVsZSA9IGNzc29tLkNTU0ltcG9ydFJ1bGU7XG4gIGNvcmUuQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IGNzc3N0eWxlLkNTU1N0eWxlRGVjbGFyYXRpb247XG5cbiAgLy8gUmVsYXZhbnQgc3BlY3NcbiAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItU3R5bGUgKDIwMDApXG4gIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2Nzc29tLXZpZXcvICgyMDA4KVxuICAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8gKDIwMTApIE1lYW50IHRvIHJlcGxhY2UgRE9NIExldmVsIDIgU3R5bGVcbiAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvIEhUTUw1LCBvZiBjb3Vyc2VcbiAgLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLXN0eWxlLWF0dHIvICBub3Qgc3VyZSB3aGF0J3MgbmV3IGhlcmVcblxuICAvLyBPYmplY3RzIHRoYXQgYXJlbid0IGluIGNzc29tIGxpYnJhcnkgYnV0IHNob3VsZCBiZTpcbiAgLy8gICBDU1NSdWxlTGlzdCAgKGNzc29tIGp1c3QgdXNlcyBhcnJheSlcbiAgLy8gICBDU1NGb250RmFjZVJ1bGVcbiAgLy8gICBDU1NQYWdlUnVsZVxuXG4gIC8vIFRoZXNlIHJ1bGVzIGRvbid0IHJlYWxseSBtYWtlIHNlbnNlIHRvIGltcGxlbWVudCwgc28gQ1NTT00gZHJhZnQgbWFrZXMgdGhlbVxuICAvLyBvYnNvbGV0ZS5cbiAgLy8gICBDU1NDaGFyc2V0UnVsZVxuICAvLyAgIENTU1Vua25vd25SdWxlXG5cbiAgLy8gVGhlc2Ugb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBvYnNvbGV0ZSBieSBDU1NPTSBkcmFmdCwgYWx0aG91Z2ggbW9kZXJuXG4gIC8vIGJyb3dzZXJzIGltcGxlbWVudCB0aGVtLlxuICAvLyAgIENTU1ZhbHVlXG4gIC8vICAgQ1NTUHJpbWl0aXZlVmFsdWVcbiAgLy8gICBDU1NWYWx1ZUxpc3RcbiAgLy8gICBSR0JDb2xvclxuICAvLyAgIFJlY3RcbiAgLy8gICBDb3VudGVyXG5cbiAgLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3N0eWxlc2hlZXRsaXN0XG4gIGZ1bmN0aW9uIFN0eWxlU2hlZXRMaXN0KCkge31cblxuICBTdHlsZVNoZWV0TGlzdC5wcm90b3R5cGUuX19wcm90b19fID0gQXJyYXkucHJvdG90eXBlO1xuXG4gIFN0eWxlU2hlZXRMaXN0LnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24gaXRlbShpKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCBpKSA/IHRoaXNbaV0gOiBudWxsO1xuICB9O1xuXG4gIGNvcmUuU3R5bGVTaGVldExpc3QgPSBTdHlsZVNoZWV0TGlzdDtcbn07XG4iLCIvKiogSGVyZSBpcyB5ZXQgYW5vdGhlciBpbXBsZW1lbnRhdGlvbiBvZiBYUGF0aCAxLjAgaW4gSmF2YXNjcmlwdC5cbiAqXG4gKiBNeSBnb2FsIHdhcyB0byBtYWtlIGl0IHJlbGF0aXZlbHkgY29tcGFjdCwgYnV0IGFzIEkgZml4ZWQgYWxsIHRoZSBheGlzIGJ1Z3NcbiAqIHRoZSBheGVzIGJlY2FtZSBtb3JlIGFuZCBtb3JlIGNvbXBsaWNhdGVkLiA6LSguXG4gKlxuICogSSBoYXZlIG5vdCBpbXBsZW1lbnRlZCBuYW1lc3BhY2VzIG9yIGNhc2Utc2Vuc2l0aXZlIGF4ZXMgZm9yIFhNTCB5ZXQuXG4gKlxuICogSG93IHRvIHRlc3QgaXQgaW4gQ2hyb21lOiBZb3UgY2FuIG1ha2UgYSBDaHJvbWUgZXh0ZW5zaW9uIHRoYXQgcmVwbGFjZXNcbiAqIHRoZSBXZWJLaXQgWFBhdGggcGFyc2VyIHdpdGggdGhpcyBvbmUuIEJ1dCBpdCB0YWtlcyBhIGJpdCBvZiBlZmZvcnQgdG9cbiAqIGdldCBhcm91bmQgaXNvbGF0ZWQgd29ybGQgYW5kIHNhbWUtb3JpZ2luIHJlc3RyaWN0aW9uczpcbiAqIG1hbmlmZXN0Lmpzb246XG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiWFBhdGhUZXN0XCIsXG4gICAgICBcInZlcnNpb25cIjogXCIwLjFcIixcbiAgICAgIFwiY29udGVudF9zY3JpcHRzXCI6IFt7XG4gICAgICAgIFwibWF0Y2hlc1wiOiBbXCJodHRwOi8vbG9jYWxob3N0LypcIl0sICAvLyBvciB3aWxkY2FyZCBob3N0XG4gICAgICAgIFwianNcIjogW1wieHBhdGguanNcIiwgXCJpbmplY3Rpb24uanNcIl0sXG4gICAgICAgIFwiYWxsX2ZyYW1lc1wiOiB0cnVlLCBcInJ1bl9hdFwiOiBcImRvY3VtZW50X3N0YXJ0XCJcbiAgICAgIH1dXG4gICAgfVxuICogaW5qZWN0aW9uLmpzOlxuICAgIC8vIGdvYWw6IGdpdmUgbXkgeHBhdGggb2JqZWN0IHRvIHRoZSB3ZWJzaXRlJ3MgSlMgY29udGV4dC5cbiAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgc2NyaXB0LnRleHRDb250ZW50ID1cbiAgICAgICAgXCJkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd4cGF0aGV4dGVuZCcsIGZ1bmN0aW9uKGUpIHtcXG5cIiArXG4gICAgICAgIFwiICBjb25zb2xlLmxvZygnZXh0ZW5kaW5nIGRvY3VtZW50IHdpdGggeHBhdGguLi4nKTtcXG5cIiArXG4gICAgICAgIFwiICBlLmRldGFpbCh3aW5kb3cpO1wiICtcbiAgICAgICAgXCJ9KTtcIjtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gICAgZXZ0LmluaXRDdXN0b21FdmVudCgneHBhdGhleHRlbmQnLCB0cnVlLCB0cnVlLCB0aGlzLnhwYXRoLmV4dGVuZCk7XG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldnQpO1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmUgPT4ge1xuICB2YXIgeHBhdGggPSB7fTtcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBtaWdyYXRpb24gb2YgQXR0ciB0byBubyBsb25nZXIgaGF2ZSBhIG5vZGVOYW1lIHByb3BlcnR5IGRlc3BpdGUgdGhpcyBjb2RlYmFzZVxuICAvLyBhc3N1bWluZyBpdCBkb2VzLlxuICBmdW5jdGlvbiBnZXROb2RlTmFtZShub2RlT3JBdHRyKSB7XG4gICAgcmV0dXJuIG5vZGVPckF0dHIuY29uc3RydWN0b3IubmFtZSA9PT0gJ0F0dHInID8gbm9kZU9yQXR0ci5uYW1lIDogbm9kZU9yQXR0ci5ub2RlTmFtZTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5pemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICAvKipcbiAgICogVGhlIFhQYXRoIGxleGVyIGlzIGJhc2ljYWxseSBhIHNpbmdsZSByZWd1bGFyIGV4cHJlc3Npb24sIGFsb25nIHdpdGhcbiAgICogc29tZSBoZWxwZXIgZnVuY3Rpb25zIHRvIHBvcCBkaWZmZXJlbnQgdHlwZXMuXG4gICAqL1xuICB2YXIgU3RyZWFtID0geHBhdGguU3RyZWFtID0gZnVuY3Rpb24gU3RyZWFtKHN0cikge1xuICAgIHRoaXMub3JpZ2luYWwgPSB0aGlzLnN0ciA9IHN0cjtcbiAgICB0aGlzLnBlZWtlZCA9IG51bGw7XG4gICAgLy8gVE9ETzogbm90IHJlYWxseSBuZWVkZWQsIGJ1dCBzdXBwb3NlZGx5IHRva2VuaXplciBhbHNvIGRpc2FtYmlndWF0ZXNcbiAgICAvLyBhICogYiB2cy4gbm9kZSB0ZXN0ICpcbiAgICB0aGlzLnByZXYgPSBudWxsOyAgLy8gZm9yIGRlYnVnZ2luZ1xuICAgIHRoaXMucHJldnByZXYgPSBudWxsO1xuICB9XG4gIFN0cmVhbS5wcm90b3R5cGUgPSB7XG4gICAgcGVlazogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5wZWVrZWQpIHJldHVybiB0aGlzLnBlZWtlZDtcbiAgICAgIHZhciBtID0gdGhpcy5yZS5leGVjKHRoaXMuc3RyKTtcbiAgICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG4gICAgICB0aGlzLnN0ciA9IHRoaXMuc3RyLnN1YnN0cihtWzBdLmxlbmd0aCk7XG4gICAgICByZXR1cm4gdGhpcy5wZWVrZWQgPSBtWzFdO1xuICAgIH0sXG4gICAgLyoqIFBlZWsgMiB0b2tlbnMgYWhlYWQuICovXG4gICAgcGVlazI6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5wZWVrKCk7ICAvLyBtYWtlIHN1cmUgdGhpcy5wZWVrZWQgaXMgc2V0XG4gICAgICB2YXIgbSA9IHRoaXMucmUuZXhlYyh0aGlzLnN0cik7XG4gICAgICBpZiAoIW0pIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIG1bMV07XG4gICAgfSxcbiAgICBwb3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHIgPSB0aGlzLnBlZWsoKTtcbiAgICAgIHRoaXMucGVla2VkID0gbnVsbDtcbiAgICAgIHRoaXMucHJldnByZXYgPSB0aGlzLnByZXY7XG4gICAgICB0aGlzLnByZXYgPSByO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSxcbiAgICB0cnlwb3A6IGZ1bmN0aW9uKHRva2Vucykge1xuICAgICAgdmFyIHRvayA9IHRoaXMucGVlaygpO1xuICAgICAgaWYgKHRvayA9PT0gdG9rZW5zKSByZXR1cm4gdGhpcy5wb3AoKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRva2VucykpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICB2YXIgdCA9IHRva2Vuc1tpXTtcbiAgICAgICAgICBpZiAodCA9PSB0b2spIHJldHVybiB0aGlzLnBvcCgpOztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgdHJ5cG9wZnVuY25hbWU6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHRvayA9IHRoaXMucGVlaygpO1xuICAgICAgaWYgKCF0aGlzLmlzUW5hbWVSZS50ZXN0KHRvaykpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgc3dpdGNoICh0b2spIHtcbiAgICAgICAgY2FzZSAnY29tbWVudCc6IGNhc2UgJ3RleHQnOiBjYXNlICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJzogY2FzZSAnbm9kZSc6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoJygnICE9IHRoaXMucGVlazIoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gdGhpcy5wb3AoKTtcbiAgICB9LFxuICAgIHRyeXBvcGF4aXNuYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0b2sgPSB0aGlzLnBlZWsoKTtcbiAgICAgIHN3aXRjaCAodG9rKSB7XG4gICAgICAgIGNhc2UgJ2FuY2VzdG9yJzogY2FzZSAnYW5jZXN0b3Itb3Itc2VsZic6IGNhc2UgJ2F0dHJpYnV0ZSc6XG4gICAgICAgIGNhc2UgJ2NoaWxkJzogY2FzZSAnZGVzY2VuZGFudCc6IGNhc2UgJ2Rlc2NlbmRhbnQtb3Itc2VsZic6XG4gICAgICAgIGNhc2UgJ2ZvbGxvd2luZyc6IGNhc2UgJ2ZvbGxvd2luZy1zaWJsaW5nJzogY2FzZSAnbmFtZXNwYWNlJzpcbiAgICAgICAgY2FzZSAncGFyZW50JzogY2FzZSAncHJlY2VkaW5nJzogY2FzZSAncHJlY2VkaW5nLXNpYmxpbmcnOiBjYXNlICdzZWxmJzpcbiAgICAgICAgICBpZiAoJzo6JyA9PSB0aGlzLnBlZWsyKCkpIHJldHVybiB0aGlzLnBvcCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICB0cnlwb3BuYW1ldGVzdDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdG9rID0gdGhpcy5wZWVrKCk7XG4gICAgICBpZiAoJyonID09PSB0b2sgfHwgdGhpcy5zdGFydHNXaXRoTmNOYW1lUmUudGVzdCh0b2spKSByZXR1cm4gdGhpcy5wb3AoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgdHJ5cG9wbGl0ZXJhbDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdG9rID0gdGhpcy5wZWVrKCk7XG4gICAgICBpZiAobnVsbCA9PSB0b2spIHJldHVybiBudWxsO1xuICAgICAgdmFyIGZpcnN0ID0gdG9rLmNoYXJBdCgwKTtcbiAgICAgIHZhciBsYXN0ID0gdG9rLmNoYXJBdCh0b2subGVuZ3RoIC0gMSk7XG4gICAgICBpZiAoJ1wiJyA9PT0gZmlyc3QgJiYgJ1wiJyA9PT0gbGFzdCB8fFxuICAgICAgICAgIFwiJ1wiID09PSBmaXJzdCAmJiBcIidcIiA9PT0gbGFzdCkge1xuICAgICAgICB0aGlzLnBvcCgpO1xuICAgICAgICByZXR1cm4gdG9rLnN1YnN0cigxLCB0b2subGVuZ3RoIC0gMik7XG4gICAgICB9XG4gICAgfSxcbiAgICB0cnlwb3BudW1iZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHRvayA9IHRoaXMucGVlaygpO1xuICAgICAgaWYgKHRoaXMuaXNOdW1iZXJSZS50ZXN0KHRvaykpIHJldHVybiBwYXJzZUZsb2F0KHRoaXMucG9wKCkpO1xuICAgICAgZWxzZSByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHRyeXBvcHZhcnJlZjogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdG9rID0gdGhpcy5wZWVrKCk7XG4gICAgICBpZiAobnVsbCA9PSB0b2spIHJldHVybiBudWxsO1xuICAgICAgaWYgKCckJyA9PT0gdG9rLmNoYXJBdCgwKSkgcmV0dXJuIHRoaXMucG9wKCkuc3Vic3RyKDEpO1xuICAgICAgZWxzZSByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsLmxlbmd0aCAtIHRoaXMuc3RyLmxlbmd0aDtcbiAgICB9XG4gIH07XG4gIChmdW5jdGlvbigpIHtcbiAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLyNOVC1OQ05hbWVcbiAgICB2YXIgbmFtZVN0YXJ0Q2hhcnNFeGNlcHRDb2xvbiA9XG4gICAgICAgICdBLVpfYS16XFx4YzAtXFx4ZDZcXHhkOC1cXHhmNlxceEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkYnICtcbiAgICAgICAgJ1xcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRicgK1xuICAgICAgICAnXFx1RkRGMC1cXHVGRkZEJzsgIC8vIEpTIGRvZXNuJ3Qgc3VwcG9ydCBbI3gxMDAwMC0jeEVGRkZGXVxuICAgIHZhciBuYW1lQ2hhckV4Y2VwdENvbG9uID0gbmFtZVN0YXJ0Q2hhcnNFeGNlcHRDb2xvbiArXG4gICAgICAgICdcXFxcLVxcXFwuMC05XFx4YjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDAnO1xuICAgIHZhciBuY05hbWVDaGFycyA9ICdbJyArIG5hbWVTdGFydENoYXJzRXhjZXB0Q29sb24gK1xuICAgICAgICAnXVsnICsgbmFtZUNoYXJFeGNlcHRDb2xvbiArICddKidcbiAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLyNOVC1RTmFtZVxuICAgIHZhciBxTmFtZUNoYXJzID0gbmNOYW1lQ2hhcnMgKyAnKD86OicgKyBuY05hbWVDaGFycyArICcpPyc7XG4gICAgdmFyIG90aGVyQ2hhcnMgPSAnXFxcXC5cXFxcLnxbXFxcXChcXFxcKVxcXFxbXFxcXF0uQCxdfDo6JzsgIC8vIC4uIG11c3QgY29tZSBiZWZvcmUgWy5dXG4gICAgdmFyIG9wZXJhdG9yQ2hhcnMgPVxuICAgICAgICAnYW5kfG9yfG1vZHxkaXZ8JyArXG4gICAgICAgICcvL3whPXw8PXw+PXxbKi98K1xcXFwtPTw+XSc7ICAvLyAvLywgIT0sIDw9LCA+PSBiZWZvcmUgaW5kaXZpZHVhbCBvbmVzLlxuICAgIHZhciBsaXRlcmFsID0gJ1wiW15cIl0qXCJ8JyArIFwiJ1teJ10qJ1wiO1xuICAgIHZhciBudW1iZXJDaGFycyA9ICdbMC05XSsoPzpcXFxcLlswLTldKik/fFxcXFwuWzAtOV0rJztcbiAgICB2YXIgdmFyaWFibGVSZWZlcmVuY2UgPSAnXFxcXCQnICsgcU5hbWVDaGFycztcbiAgICB2YXIgbmFtZVRlc3RDaGFycyA9ICdcXFxcKnwnICsgbmNOYW1lQ2hhcnMgKyAnOlxcXFwqfCcgKyBxTmFtZUNoYXJzO1xuICAgIHZhciBvcHRpb25hbFNwYWNlID0gJ1sgXFx0XFxyXFxuXSonOyAgLy8gc3RyaWN0ZXIgdGhhbiByZWdleHAgXFxzLlxuICAgIHZhciBub2RlVHlwZSA9ICdjb21tZW50fHRleHR8cHJvY2Vzc2luZy1pbnN0cnVjdGlvbnxub2RlJztcbiAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKFxuICAgICAgICAvLyBudW1iZXJDaGFycyBiZWZvcmUgb3RoZXJDaGFycyBzbyB0aGF0IGxlYWRpbmctZGVjaW1hbCBkb2Vzbid0IGJlY29tZSAuXG4gICAgICAgICdeJyArIG9wdGlvbmFsU3BhY2UgKyAnKCcgKyBudW1iZXJDaGFycyArICd8JyArIG90aGVyQ2hhcnMgKyAnfCcgK1xuICAgICAgICBuYW1lVGVzdENoYXJzICsgJ3wnICsgb3BlcmF0b3JDaGFycyArICd8JyArIGxpdGVyYWwgKyAnfCcgK1xuICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZSArICcpJ1xuICAgICAgICAvLyBvcGVyYXRvck5hbWUgfCBub2RlVHlwZSB8IGZ1bmN0aW9uTmFtZSB8IGF4aXNOYW1lIGFyZSBsdW1wZWQgaW50b1xuICAgICAgICAvLyBxTmFtZSBmb3Igbm93OyB3ZSdsbCBjaGVjayB0aGVtIG9uIHBvcC5cbiAgICApO1xuICAgIFN0cmVhbS5wcm90b3R5cGUucmUgPSByZTtcbiAgICBTdHJlYW0ucHJvdG90eXBlLnN0YXJ0c1dpdGhOY05hbWVSZSA9IG5ldyBSZWdFeHAoJ14nICsgbmNOYW1lQ2hhcnMpO1xuICAgIFN0cmVhbS5wcm90b3R5cGUuaXNRbmFtZVJlID0gbmV3IFJlZ0V4cCgnXicgKyBxTmFtZUNoYXJzICsgJyQnKTtcbiAgICBTdHJlYW0ucHJvdG90eXBlLmlzTnVtYmVyUmUgPSBuZXcgUmVnRXhwKCdeJyArIG51bWJlckNoYXJzICsgJyQnKTtcbiAgfSkoKTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgdmFyIHBhcnNlID0geHBhdGgucGFyc2UgPSBmdW5jdGlvbiBwYXJzZShzdHJlYW0sIGEpIHtcbiAgICB2YXIgciA9IG9yRXhwcihzdHJlYW0sYSk7XG4gICAgdmFyIHgsIHVucGFyc2VkID0gW107XG4gICAgd2hpbGUgKHggPSBzdHJlYW0ucG9wKCkpIHtcbiAgICAgIHVucGFyc2VkLnB1c2goeCk7XG4gICAgfVxuICAgIGlmICh1bnBhcnNlZC5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBVbnBhcnNlZCB0b2tlbnM6ICcgKyB1bnBhcnNlZC5qb2luKCcgJykpO1xuICAgIHJldHVybiByO1xuICB9XG5cbiAgLyoqXG4gICAqIGJpbmFyeUwgIDo6PSBzdWJFeHByXG4gICAqICAgICAgICAgICAgfCBiaW5hcnlMIG9wIHN1YkV4cHJcbiAgICogc28gYSBvcCBiIG9wIGMgYmVjb21lcyAoKGEgb3AgYikgb3AgYylcbiAgICovXG4gIGZ1bmN0aW9uIGJpbmFyeUwoc3ViRXhwciwgc3RyZWFtLCBhLCBvcHMpIHtcbiAgICB2YXIgbGhzID0gc3ViRXhwcihzdHJlYW0sIGEpO1xuICAgIGlmIChsaHMgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wO1xuICAgIHdoaWxlIChvcCA9IHN0cmVhbS50cnlwb3Aob3BzKSkge1xuICAgICAgdmFyIHJocyA9IHN1YkV4cHIoc3RyZWFtLCBhKTtcbiAgICAgIGlmIChyaHMgPT0gbnVsbClcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IEV4cGVjdGVkIHNvbWV0aGluZyBhZnRlciAnICsgb3ApO1xuICAgICAgbGhzID0gYS5ub2RlKG9wLCBsaHMsIHJocyk7XG4gICAgfVxuICAgIHJldHVybiBsaHM7XG4gIH1cbiAgLyoqXG4gICAqIFRvbyBiYWQgdGhpcyBpcyBuZXZlciB1c2VkLiBJZiB0aGV5IG1hZGUgYSAqKiBvcGVyYXRvciAocmFpc2UgdG8gcG93ZXIpLFxuICAgKCB3ZSB3b3VsZCB1c2UgaXQuXG4gICAqIGJpbmFyeVIgIDo6PSBzdWJFeHByXG4gICAqICAgICAgICAgICAgfCBzdWJFeHByIG9wIGJpbmFyeVJcbiAgICogc28gYSBvcCBiIG9wIGMgYmVjb21lcyAoYSBvcCAoYiBvcCBjKSlcbiAgICovXG4gIGZ1bmN0aW9uIGJpbmFyeVIoc3ViRXhwciwgc3RyZWFtLCBhLCBvcHMpIHtcbiAgICB2YXIgbGhzID0gc3ViRXhwcihzdHJlYW0sIGEpO1xuICAgIGlmIChsaHMgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wID0gc3RyZWFtLnRyeXBvcChvcHMpO1xuICAgIGlmIChvcCkge1xuICAgICAgdmFyIHJocyA9IGJpbmFyeVIoc3RyZWFtLCBhKTtcbiAgICAgIGlmIChyaHMgPT0gbnVsbClcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IEV4cGVjdGVkIHNvbWV0aGluZyBhZnRlciAnICsgb3ApO1xuICAgICAgcmV0dXJuIGEubm9kZShvcCwgbGhzLCByaHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbGhzOy8vIFRPRE9cbiAgICB9XG4gIH1cbiAgLyoqIFsxXSBMb2NhdGlvblBhdGg6Oj0gUmVsYXRpdmVMb2NhdGlvblBhdGggfCBBYnNvbHV0ZUxvY2F0aW9uUGF0aFxuICAgKiBlLmcuIGEsIGEvYiwgLy9hL2JcbiAgICovXG4gIGZ1bmN0aW9uIGxvY2F0aW9uUGF0aChzdHJlYW0sIGEpIHtcbiAgICByZXR1cm4gYWJzb2x1dGVMb2NhdGlvblBhdGgoc3RyZWFtLCBhKSB8fFxuICAgICAgICAgICByZWxhdGl2ZUxvY2F0aW9uUGF0aChudWxsLCBzdHJlYW0sIGEpO1xuICB9XG4gIC8qKiBbMl0gQWJzb2x1dGVMb2NhdGlvblBhdGg6Oj0gJy8nIFJlbGF0aXZlTG9jYXRpb25QYXRoPyB8IEFiYnJldmlhdGVkQWJzb2x1dGVMb2NhdGlvblBhdGhcbiAgICogIFsxMF0gQWJicmV2aWF0ZWRBYnNvbHV0ZUxvY2F0aW9uUGF0aDo6PSAnLy8nIFJlbGF0aXZlTG9jYXRpb25QYXRoXG4gICAqL1xuICBmdW5jdGlvbiBhYnNvbHV0ZUxvY2F0aW9uUGF0aChzdHJlYW0sIGEpIHtcbiAgICB2YXIgb3AgPSBzdHJlYW0ucGVlaygpO1xuICAgIGlmICgnLycgPT09IG9wIHx8ICcvLycgPT09IG9wKSB7XG4gICAgICB2YXIgbGhzID0gYS5ub2RlKCdSb290Jyk7XG4gICAgICByZXR1cm4gcmVsYXRpdmVMb2NhdGlvblBhdGgobGhzLCBzdHJlYW0sIGEsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqIFszXSBSZWxhdGl2ZUxvY2F0aW9uUGF0aDo6PSBTdGVwIHwgUmVsYXRpdmVMb2NhdGlvblBhdGggJy8nIFN0ZXAgfFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFiYnJldmlhdGVkUmVsYXRpdmVMb2NhdGlvblBhdGhcbiAgICogIFsxMV0gQWJicmV2aWF0ZWRSZWxhdGl2ZUxvY2F0aW9uUGF0aDo6PSBSZWxhdGl2ZUxvY2F0aW9uUGF0aCAnLy8nIFN0ZXBcbiAgICogZS5nLiBwL2EsIGV0Yy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbGF0aXZlTG9jYXRpb25QYXRoKGxocywgc3RyZWFtLCBhLCBpc09ubHlSb290T2spIHtcbiAgICBpZiAobnVsbCA9PSBsaHMpIHtcbiAgICAgIGxocyA9IHN0ZXAoc3RyZWFtLCBhKTtcbiAgICAgIGlmIChudWxsID09IGxocykgcmV0dXJuIGxocztcbiAgICB9XG4gICAgdmFyIG9wO1xuICAgIHdoaWxlIChvcCA9IHN0cmVhbS50cnlwb3AoWycvJywgJy8vJ10pKSB7XG4gICAgICBpZiAoJy8vJyA9PT0gb3ApIHtcbiAgICAgICAgbGhzID0gYS5ub2RlKCcvJywgbGhzLFxuICAgICAgICAgICAgICAgICAgICAgYS5ub2RlKCdBeGlzJywgJ2Rlc2NlbmRhbnQtb3Itc2VsZicsICdub2RlJywgdW5kZWZpbmVkKSk7XG4gICAgICB9XG4gICAgICB2YXIgcmhzID0gc3RlcChzdHJlYW0sIGEpO1xuICAgICAgaWYgKG51bGwgPT0gcmhzICYmICcvJyA9PT0gb3AgJiYgaXNPbmx5Um9vdE9rKSByZXR1cm4gbGhzO1xuICAgICAgZWxzZSBpc09ubHlSb290T2sgPSBmYWxzZTtcbiAgICAgIGlmIChudWxsID09IHJocylcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IEV4cGVjdGVkIHN0ZXAgYWZ0ZXIgJyArIG9wKTtcbiAgICAgIGxocyA9IGEubm9kZSgnLycsIGxocywgcmhzKTtcbiAgICB9XG4gICAgcmV0dXJuIGxocztcbiAgfVxuICAvKiogWzRdIFN0ZXA6Oj0gQXhpc1NwZWNpZmllciBOb2RlVGVzdCBQcmVkaWNhdGUqIHwgQWJicmV2aWF0ZWRTdGVwXG4gICAqICBbMTJdIEFiYnJldmlhdGVkU3RlcDo6PSAnLicgfCAnLi4nXG4gICAqIGUuZy4gQGhyZWYsIHNlbGY6OnAsIHAsIGFbQGhyZWZdLCAuLCAuLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RlcChzdHJlYW0sIGEpIHtcbiAgICB2YXIgYWJiclN0ZXAgPSBzdHJlYW0udHJ5cG9wKFsnLicsICcuLiddKTtcbiAgICBpZiAoJy4nID09PSBhYmJyU3RlcCkgIC8vIEEgbG9jYXRpb24gc3RlcCBvZiAuIGlzIHNob3J0IGZvciBzZWxmOjpub2RlKCkuXG4gICAgICByZXR1cm4gYS5ub2RlKCdBeGlzJywgJ3NlbGYnLCAnbm9kZScpO1xuICAgIGlmICgnLi4nID09PSBhYmJyU3RlcCkgIC8vIEEgbG9jYXRpb24gc3RlcCBvZiAuLiBpcyBzaG9ydCBmb3IgcGFyZW50Ojpub2RlKClcbiAgICAgIHJldHVybiBhLm5vZGUoJ0F4aXMnLCAncGFyZW50JywgJ25vZGUnKTtcblxuICAgIHZhciBheGlzID0gYXhpc1NwZWNpZmllcihzdHJlYW0sIGEpO1xuICAgIHZhciBub2RlVHlwZSA9IG5vZGVUeXBlVGVzdChzdHJlYW0sIGEpO1xuICAgIHZhciBub2RlTmFtZTtcbiAgICBpZiAobnVsbCA9PSBub2RlVHlwZSkgbm9kZU5hbWUgPSBub2RlTmFtZVRlc3Qoc3RyZWFtLCBhKTtcbiAgICBpZiAobnVsbCA9PSBheGlzICYmIG51bGwgPT0gbm9kZVR5cGUgJiYgbnVsbCA9PSBub2RlTmFtZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKG51bGwgPT0gbm9kZVR5cGUgJiYgbnVsbCA9PSBub2RlTmFtZSlcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFxuICAgICAgICAgICAgWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICdQb3NpdGlvbiAnICsgc3RyZWFtLnBvc2l0aW9uKCkgK1xuICAgICAgICAgICAgJzogRXhwZWN0ZWQgbm9kZVRlc3QgYWZ0ZXIgYXhpc1NwZWNpZmllciAnICsgYXhpcyk7XG4gICAgaWYgKG51bGwgPT0gYXhpcykgYXhpcyA9ICdjaGlsZCc7XG4gICAgaWYgKG51bGwgPT0gbm9kZVR5cGUpIHtcbiAgICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IGEgbm9kZSBuYW1lLCB0aGVuIHRoZSBub2RlIHR5cGUgaXMgZm9yY2VkIHRvIGJlIHRoZVxuICAgICAgLy8gcHJpbmNpcGFsIG5vZGUgdHlwZSBvZiB0aGUgYXhpcy5cbiAgICAgIC8vIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aC8jZHQtcHJpbmNpcGFsLW5vZGUtdHlwZVxuICAgICAgaWYgKCdhdHRyaWJ1dGUnID09PSBheGlzKSBub2RlVHlwZSA9ICdhdHRyaWJ1dGUnO1xuICAgICAgZWxzZSBpZiAoJ25hbWVzcGFjZScgPT09IGF4aXMpIG5vZGVUeXBlID0gJ25hbWVzcGFjZSc7XG4gICAgICBlbHNlIG5vZGVUeXBlID0gJ2VsZW1lbnQnO1xuICAgIH1cbiAgICB2YXIgbGhzID0gYS5ub2RlKCdBeGlzJywgYXhpcywgbm9kZVR5cGUsIG5vZGVOYW1lKTtcbiAgICB2YXIgcHJlZDtcbiAgICB3aGlsZSAobnVsbCAhPSAocHJlZCA9IHByZWRpY2F0ZShsaHMsIHN0cmVhbSwgYSkpKSB7XG4gICAgICBsaHMgPSBwcmVkO1xuICAgIH1cbiAgICByZXR1cm4gbGhzO1xuICB9XG4gIC8qKiBbNV0gQXhpc1NwZWNpZmllcjo6PSBBeGlzTmFtZSAnOjonIHwgQWJicmV2aWF0ZWRBeGlzU3BlY2lmaWVyXG4gICAqICBbNl0gQXhpc05hbWU6Oj0gJ2FuY2VzdG9yJyB8ICdhbmNlc3Rvci1vci1zZWxmJyB8ICdhdHRyaWJ1dGUnIHwgJ2NoaWxkJ1xuICAgKiAgICAgICAgICAgICAgICB8ICdkZXNjZW5kYW50JyB8ICdkZXNjZW5kYW50LW9yLXNlbGYnIHwgJ2ZvbGxvd2luZydcbiAgICogICAgICAgICAgICAgICAgfCAnZm9sbG93aW5nLXNpYmxpbmcnIHwgJ25hbWVzcGFjZScgfCAncGFyZW50JyB8XG4gICAqICAgICAgICAgICAgICAgIHwgJ3ByZWNlZGluZycgfCAncHJlY2VkaW5nLXNpYmxpbmcnIHwgJ3NlbGYnXG4gICAqICBbMTNdIEFiYnJldmlhdGVkQXhpc1NwZWNpZmllcjo6PSAnQCc/XG4gICAqL1xuICBmdW5jdGlvbiBheGlzU3BlY2lmaWVyKHN0cmVhbSwgYSkge1xuICAgIHZhciBhdHRyID0gc3RyZWFtLnRyeXBvcCgnQCcpO1xuICAgIGlmIChudWxsICE9IGF0dHIpIHJldHVybiAnYXR0cmlidXRlJztcbiAgICB2YXIgYXhpc05hbWUgPSBzdHJlYW0udHJ5cG9wYXhpc25hbWUoKTtcbiAgICBpZiAobnVsbCAhPSBheGlzTmFtZSkge1xuICAgICAgdmFyIGNvbG9uY29sb24gPSBzdHJlYW0udHJ5cG9wKCc6OicpO1xuICAgICAgaWYgKG51bGwgPT0gY29sb25jb2xvbilcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IFNob3VsZCBub3QgaGFwcGVuLiBTaG91bGQgYmUgOjouJyk7XG4gICAgICByZXR1cm4gYXhpc05hbWU7XG4gICAgfVxuICB9XG4gIC8qKiBbN10gTm9kZVRlc3Q6Oj0gTmFtZVRlc3QgfCBOb2RlVHlwZSAnKCcgJyknIHwgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICcoJyBMaXRlcmFsICcpJ1xuICAgKiAgWzM4XSBOb2RlVHlwZTo6PSAnY29tbWVudCcgfCAndGV4dCcgfCAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgfCAnbm9kZSdcbiAgICogSSd2ZSBzcGxpdCBub2RlVHlwZVRlc3QgZnJvbSBub2RlTmFtZVRlc3QgZm9yIGNvbnZlbmllbmNlLlxuICAgKi9cbiAgZnVuY3Rpb24gbm9kZVR5cGVUZXN0KHN0cmVhbSwgYSkge1xuICAgIGlmICgnKCcgIT09IHN0cmVhbS5wZWVrMigpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHR5cGUgPSBzdHJlYW0udHJ5cG9wKFsnY29tbWVudCcsICd0ZXh0JywgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nLCAnbm9kZSddKTtcbiAgICBpZiAobnVsbCAhPSB0eXBlKSB7XG4gICAgICBpZiAobnVsbCA9PSBzdHJlYW0udHJ5cG9wKCcoJykpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBTaG91bGQgbm90IGhhcHBlbi4nKTtcbiAgICAgIHZhciBwYXJhbSA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0eXBlID09ICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJykge1xuICAgICAgICBwYXJhbSA9IHN0cmVhbS50cnlwb3BsaXRlcmFsKCk7XG4gICAgICB9XG4gICAgICBpZiAobnVsbCA9PSBzdHJlYW0udHJ5cG9wKCcpJykpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBFeHBlY3RlZCBjbG9zZSBwYXJlbnMuJyk7XG4gICAgICByZXR1cm4gdHlwZVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBub2RlTmFtZVRlc3Qoc3RyZWFtLCBhKSB7XG4gICAgdmFyIG5hbWUgPSBzdHJlYW0udHJ5cG9wbmFtZXRlc3QoKTtcbiAgICBpZiAobmFtZSAhPSBudWxsKSByZXR1cm4gbmFtZTtcbiAgICBlbHNlIHJldHVybiBudWxsO1xuICB9XG4gIC8qKiBbOF0gUHJlZGljYXRlOjo9ICdbJyBQcmVkaWNhdGVFeHByICddJ1xuICAgKiAgWzldIFByZWRpY2F0ZUV4cHI6Oj0gRXhwclxuICAgKi9cbiAgZnVuY3Rpb24gcHJlZGljYXRlKGxocywgc3RyZWFtLCBhKSB7XG4gICAgaWYgKG51bGwgPT0gc3RyZWFtLnRyeXBvcCgnWycpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgZXhwciA9IG9yRXhwcihzdHJlYW0sIGEpO1xuICAgIGlmIChudWxsID09IGV4cHIpXG4gICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBFeHBlY3RlZCBleHByZXNzaW9uIGFmdGVyIFsnKTtcbiAgICBpZiAobnVsbCA9PSBzdHJlYW0udHJ5cG9wKCddJykpXG4gICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBFeHBlY3RlZCBdIGFmdGVyIGV4cHJlc3Npb24uJyk7XG4gICAgcmV0dXJuIGEubm9kZSgnUHJlZGljYXRlJywgbGhzLCBleHByKTtcbiAgfVxuICAvKiogWzE0XSBFeHByOjo9IE9yRXhwclxuICAgKi9cbiAgLyoqIFsxNV0gUHJpbWFyeUV4cHI6Oj0gVmFyaWFibGVSZWZlcmVuY2UgfCAnKCcgRXhwciAnKScgfCBMaXRlcmFsIHwgTnVtYmVyIHwgRnVuY3Rpb25DYWxsXG4gICAqIGUuZy4gJHgsICAoMys0KSwgIFwiaGlcIiwgIDMyLCAgZih4KVxuICAgKi9cbiAgZnVuY3Rpb24gcHJpbWFyeUV4cHIoc3RyZWFtLCBhKSB7XG4gICAgdmFyIHggPSBzdHJlYW0udHJ5cG9wbGl0ZXJhbCgpO1xuICAgIGlmIChudWxsID09IHgpXG4gICAgICB4ID0gc3RyZWFtLnRyeXBvcG51bWJlcigpO1xuICAgIGlmIChudWxsICE9IHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgICB2YXIgdmFyUmVmID0gc3RyZWFtLnRyeXBvcHZhcnJlZigpO1xuICAgIGlmIChudWxsICE9IHZhclJlZikgcmV0dXJuIGEubm9kZSgnVmFyaWFibGVSZWZlcmVuY2UnLCB2YXJSZWYpO1xuICAgIHZhciBmdW5DYWxsID0gZnVuY3Rpb25DYWxsKHN0cmVhbSwgYSk7XG4gICAgaWYgKG51bGwgIT0gZnVuQ2FsbCkge1xuICAgICAgcmV0dXJuIGZ1bkNhbGw7XG4gICAgfVxuICAgIGlmIChzdHJlYW0udHJ5cG9wKCcoJykpIHtcbiAgICAgIHZhciBlID0gb3JFeHByKHN0cmVhbSwgYSk7XG4gICAgICBpZiAobnVsbCA9PSBlKVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQb3NpdGlvbiAnICsgc3RyZWFtLnBvc2l0aW9uKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogRXhwZWN0ZWQgZXhwcmVzc2lvbiBhZnRlciAoLicpO1xuICAgICAgaWYgKG51bGwgPT0gc3RyZWFtLnRyeXBvcCgnKScpKVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQb3NpdGlvbiAnICsgc3RyZWFtLnBvc2l0aW9uKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogRXhwZWN0ZWQgKSBhZnRlciBleHByZXNzaW9uLicpO1xuICAgICAgcmV0dXJuIGU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKiBbMTZdIEZ1bmN0aW9uQ2FsbDo6PSBGdW5jdGlvbk5hbWUgJygnICggQXJndW1lbnQgKCAnLCcgQXJndW1lbnQgKSogKT8gJyknXG4gICAqICBbMTddIEFyZ3VtZW50Ojo9IEV4cHJcbiAgICovXG4gIGZ1bmN0aW9uIGZ1bmN0aW9uQ2FsbChzdHJlYW0sIGEpIHtcbiAgICB2YXIgbmFtZSA9IHN0cmVhbS50cnlwb3BmdW5jbmFtZShzdHJlYW0sIGEpO1xuICAgIGlmIChudWxsID09IG5hbWUpIHJldHVybiBudWxsO1xuICAgIGlmIChudWxsID09IHN0cmVhbS50cnlwb3AoJygnKSlcbiAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQb3NpdGlvbiAnICsgc3RyZWFtLnBvc2l0aW9uKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IEV4cGVjdGVkICggKSBhZnRlciBmdW5jdGlvbiBuYW1lLicpO1xuICAgIHZhciBwYXJhbXMgPSBbXTtcbiAgICB2YXIgZmlyc3QgPSB0cnVlO1xuICAgIHdoaWxlIChudWxsID09IHN0cmVhbS50cnlwb3AoJyknKSkge1xuICAgICAgaWYgKCFmaXJzdCAmJiBudWxsID09IHN0cmVhbS50cnlwb3AoJywnKSlcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IEV4cGVjdGVkICwgYmV0d2VlbiBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLicpO1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgIHZhciBwYXJhbSA9IG9yRXhwcihzdHJlYW0sIGEpO1xuICAgICAgaWYgKHBhcmFtID09IG51bGwpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBFeHBlY3RlZCBleHByZXNzaW9uIGFzIGFyZ3VtZW50IG9mIGZ1bmN0aW9uLicpO1xuICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgIH1cbiAgICByZXR1cm4gYS5ub2RlKCdGdW5jdGlvbkNhbGwnLCBuYW1lLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqIFsxOF0gVW5pb25FeHByOjo9IFBhdGhFeHByIHwgVW5pb25FeHByICd8JyBQYXRoRXhwclxuICAgKi9cbiAgZnVuY3Rpb24gdW5pb25FeHByKHN0cmVhbSwgYSkgeyByZXR1cm4gYmluYXJ5TChwYXRoRXhwciwgc3RyZWFtLCBhLCAnfCcpOyB9XG4gIC8qKiBbMTldIFBhdGhFeHByIDo6PSBMb2NhdGlvblBhdGhcbiAgICogICAgICAgICAgICAgICAgICB8IEZpbHRlckV4cHJcbiAgICogICAgICAgICAgICAgICAgICB8IEZpbHRlckV4cHIgJy8nIFJlbGF0aXZlTG9jYXRpb25QYXRoXG4gICAqICAgICAgICAgICAgICAgICAgfCBGaWx0ZXJFeHByICcvLycgUmVsYXRpdmVMb2NhdGlvblBhdGhcbiAgICogVW5saWtlIG1vc3Qgb3RoZXIgbm9kZXMsIHRoaXMgb25lIGFsd2F5cyBnZW5lcmF0ZXMgYSBub2RlIGJlY2F1c2VcbiAgICogYXQgdGhpcyBwb2ludCBhbGwgcmV2ZXJzZSBub2Rlc2V0cyBtdXN0IHR1cm4gaW50byBhIGZvcndhcmQgbm9kZXNldFxuICAgKi9cbiAgZnVuY3Rpb24gcGF0aEV4cHIoc3RyZWFtLCBhKSB7XG4gICAgLy8gV2UgaGF2ZSB0byBkbyBGaWx0ZXJFeHByIGJlZm9yZSBMb2NhdGlvblBhdGggYmVjYXVzZSBvdGhlcndpc2VcbiAgICAvLyBMb2NhdGlvblBhdGggd2lsbCBlYXQgdXAgdGhlIG5hbWUgZnJvbSBhIGZ1bmN0aW9uIGNhbGwuXG4gICAgdmFyIGZpbHRlciA9IGZpbHRlckV4cHIoc3RyZWFtLCBhKTtcbiAgICBpZiAobnVsbCA9PSBmaWx0ZXIpIHtcbiAgICAgIHZhciBsb2MgPSBsb2NhdGlvblBhdGgoc3RyZWFtLCBhKTtcbiAgICAgIGlmIChudWxsID09IGxvYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3JcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gJyArIHN0cmVhbS5wb3NpdGlvbigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IFRoZSBleHByZXNzaW9uIHNob3VsZG5cXCd0IGJlIGVtcHR5Li4uJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYS5ub2RlKCdQYXRoRXhwcicsIGxvYyk7XG4gICAgfVxuICAgIHZhciByZWwgPSByZWxhdGl2ZUxvY2F0aW9uUGF0aChmaWx0ZXIsIHN0cmVhbSwgYSwgZmFsc2UpO1xuICAgIGlmIChmaWx0ZXIgPT09IHJlbCkgcmV0dXJuIHJlbDtcbiAgICBlbHNlIHJldHVybiBhLm5vZGUoJ1BhdGhFeHByJywgcmVsKTtcbiAgfVxuICAvKiogWzIwXSBGaWx0ZXJFeHByOjo9IFByaW1hcnlFeHByIHwgRmlsdGVyRXhwciBQcmVkaWNhdGVcbiAgICogYWthLiBGaWx0ZXJFeHByIDo6PSBQcmltYXJ5RXhwciBQcmVkaWNhdGUqXG4gICAqL1xuICBmdW5jdGlvbiBmaWx0ZXJFeHByKHN0cmVhbSwgYSkge1xuICAgIHZhciBwcmltYXJ5ID0gcHJpbWFyeUV4cHIoc3RyZWFtLCBhKTtcbiAgICBpZiAocHJpbWFyeSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcHJlZCwgbGhzID0gcHJpbWFyeTtcbiAgICB3aGlsZSAobnVsbCAhPSAocHJlZCA9IHByZWRpY2F0ZShsaHMsIHN0cmVhbSwgYSkpKSB7XG4gICAgICBsaHMgPSBwcmVkO1xuICAgIH1cbiAgICByZXR1cm4gbGhzO1xuICB9XG5cbiAgLyoqIFsyMV0gT3JFeHByOjo9IEFuZEV4cHIgfCBPckV4cHIgJ29yJyBBbmRFeHByXG4gICAqL1xuICBmdW5jdGlvbiBvckV4cHIoc3RyZWFtLCBhKSB7XG4gICAgdmFyIG9yaWcgPSAoc3RyZWFtLnBlZWtlZCB8fCAnJykgKyBzdHJlYW0uc3RyXG4gICAgdmFyIHIgPSBiaW5hcnlMKGFuZEV4cHIsIHN0cmVhbSwgYSwgJ29yJyk7XG4gICAgdmFyIG5vdyA9IChzdHJlYW0ucGVla2VkIHx8ICcnKSArIHN0cmVhbS5zdHI7XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgLyoqIFsyMl0gQW5kRXhwcjo6PSBFcXVhbGl0eUV4cHIgfCBBbmRFeHByICdhbmQnIEVxdWFsaXR5RXhwclxuICAgKi9cbiAgZnVuY3Rpb24gYW5kRXhwcihzdHJlYW0sIGEpIHsgcmV0dXJuIGJpbmFyeUwoZXF1YWxpdHlFeHByLCBzdHJlYW0sIGEsICdhbmQnKTsgfVxuICAvKiogWzIzXSBFcXVhbGl0eUV4cHI6Oj0gUmVsYXRpb25hbEV4cHIgfCBFcXVhbGl0eUV4cHIgJz0nIFJlbGF0aW9uYWxFeHByXG4gICAqICAgICAgICAgICAgICAgICAgICAgfCBFcXVhbGl0eUV4cHIgJyE9JyBSZWxhdGlvbmFsRXhwclxuICAgKi9cbiAgZnVuY3Rpb24gZXF1YWxpdHlFeHByKHN0cmVhbSwgYSkgeyByZXR1cm4gYmluYXJ5TChyZWxhdGlvbmFsRXhwciwgc3RyZWFtLCBhLCBbJz0nLCchPSddKTsgfVxuICAvKiogWzI0XSBSZWxhdGlvbmFsRXhwcjo6PSBBZGRpdGl2ZUV4cHIgfCBSZWxhdGlvbmFsRXhwciAnPCcgQWRkaXRpdmVFeHByXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB8IFJlbGF0aW9uYWxFeHByICc+JyBBZGRpdGl2ZUV4cHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHwgUmVsYXRpb25hbEV4cHIgJzw9JyBBZGRpdGl2ZUV4cHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHwgUmVsYXRpb25hbEV4cHIgJz49JyBBZGRpdGl2ZUV4cHJcbiAgICovXG4gIGZ1bmN0aW9uIHJlbGF0aW9uYWxFeHByKHN0cmVhbSwgYSkgeyByZXR1cm4gYmluYXJ5TChhZGRpdGl2ZUV4cHIsIHN0cmVhbSwgYSwgWyc8JywnPicsJzw9JywnPj0nXSk7IH1cbiAgLyoqIFsyNV0gQWRkaXRpdmVFeHByOjo9IE11bHRpcGxpY2F0aXZlRXhwclxuICAgKiAgICAgICAgICAgICAgICAgICAgIHwgQWRkaXRpdmVFeHByICcrJyBNdWx0aXBsaWNhdGl2ZUV4cHJcbiAgICogICAgICAgICAgICAgICAgICAgICB8IEFkZGl0aXZlRXhwciAnLScgTXVsdGlwbGljYXRpdmVFeHByXG4gICAqL1xuICBmdW5jdGlvbiBhZGRpdGl2ZUV4cHIoc3RyZWFtLCBhKSB7IHJldHVybiBiaW5hcnlMKG11bHRpcGxpY2F0aXZlRXhwciwgc3RyZWFtLCBhLCBbJysnLCctJ10pOyB9XG4gIC8qKiBbMjZdIE11bHRpcGxpY2F0aXZlRXhwcjo6PSBVbmFyeUV4cHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aXZlRXhwciBNdWx0aXBseU9wZXJhdG9yIFVuYXJ5RXhwclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTXVsdGlwbGljYXRpdmVFeHByICdkaXYnIFVuYXJ5RXhwclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTXVsdGlwbGljYXRpdmVFeHByICdtb2QnIFVuYXJ5RXhwclxuICAgKi9cbiAgZnVuY3Rpb24gbXVsdGlwbGljYXRpdmVFeHByKHN0cmVhbSwgYSkgeyByZXR1cm4gYmluYXJ5TCh1bmFyeUV4cHIsIHN0cmVhbSwgYSwgWycqJywnZGl2JywnbW9kJ10pOyB9XG4gIC8qKiBbMjddIFVuYXJ5RXhwcjo6PSBVbmlvbkV4cHIgfCAnLScgVW5hcnlFeHByXG4gICAqL1xuICBmdW5jdGlvbiB1bmFyeUV4cHIoc3RyZWFtLCBhKSB7XG4gICAgaWYgKHN0cmVhbS50cnlwb3AoJy0nKSkge1xuICAgICAgdmFyIGUgPSB1bmFyeUV4cHIoc3RyZWFtLCBhKTtcbiAgICAgIGlmIChudWxsID09IGUpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBFeHBlY3RlZCB1bmFyeSBleHByZXNzaW9uIGFmdGVyIC0nKTtcbiAgICAgIHJldHVybiBhLm5vZGUoJ1VuYXJ5TWludXMnLCBlKTtcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gdW5pb25FeHByKHN0cmVhbSwgYSk7XG4gIH1cbiAgdmFyIGFzdEZhY3RvcnkgPSB7XG4gICAgbm9kZTogZnVuY3Rpb24oKSB7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7fVxuICB9O1xuXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpbWl6YXRpb25zIChUT0RPKSAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gIC8qKlxuICAgKiBTb21lIHRoaW5ncyBJJ3ZlIGJlZW4gY29uc2lkZXJpbmc6XG4gICAqIDEpIGEvL2IgYmVjb21lcyBhL2Rlc2NlbmRhbnQ6OmIgaWYgdGhlcmUncyBubyBwcmVkaWNhdGUgdGhhdCB1c2VzXG4gICAqICAgIHBvc2l0aW9uKCkgb3IgbGFzdCgpXG4gICAqIDIpIGF4aXNbcHJlZF06IHdoZW4gcHJlZCBkb2Vzbid0IHVzZSBwb3NpdGlvbiwgZXZhbHVhdGUgaXQganVzdCBvbmNlIHBlclxuICAgKiAgICBub2RlIGluIHRoZSBub2RlLXNldCByYXRoZXIgdGhhbiBvbmNlIHBlciAobm9kZSwgcG9zaXRpb24sIGxhc3QpLlxuICAgKiBGb3IgbW9yZSBvcHRpbWl6YXRpb25zLCBsb29rIHVwIEdlY2tvJ3Mgb3B0aW1pemVyOlxuICAgKiBodHRwOi8vbXhyLm1vemlsbGEub3JnL21vemlsbGEtY2VudHJhbC9zb3VyY2UvY29udGVudC94c2x0L3NyYy94cGF0aC90eFhQYXRoT3B0aW1pemVyLmNwcFxuICAgKi9cbiAgLy8gVE9ET1xuICBmdW5jdGlvbiBvcHRpbWl6ZShhc3QpIHtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBFdmFsdWF0aW9uOiBheGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBEYXRhIHR5cGVzOiBGb3Igc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIHdlIGp1c3QgdXNlIEphdmFzY3JpcHQgdHlwZXMuXG4gICAqIE5vZGUtc2V0cyBoYXZlIHRoZSBmb3JtXG4gICAqICAgIHtub2RlczogW25vZGUsIC4uLl19XG4gICAqIG9yIHtub2RlczogW25vZGUsIC4uLl0sIHBvczogW1sxXSwgWzJdLCAuLi5dLCBsYXN0czogW1sxXSwgWzJdLCAuLi5dfVxuICAgKlxuICAgKiBNb3N0IG9mIHRoZSB0aW1lLCBvbmx5IHRoZSBub2RlIGlzIHVzZWQgYW5kIHRoZSBwb3NpdGlvbiBpbmZvcm1hdGlvbiBpc1xuICAgKiBkaXNjYXJkZWQuIEJ1dCBpZiB5b3UgdXNlIGEgcHJlZGljYXRlLCB3ZSBuZWVkIHRvIHRyeSBldmVyeSB2YWx1ZSBvZlxuICAgKiBwb3NpdGlvbiBhbmQgbGFzdCBpbiBjYXNlIHRoZSBwcmVkaWNhdGUgY2FsbHMgcG9zaXRpb24oKSBvciBsYXN0KCkuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZU11bHRpU2V0IGlzIGEgaGVscGVyIGNsYXNzIHRvIGhlbHAgZ2VuZXJhdGVcbiAgICoge25vZGVzOltdLCBwb3M6W10sIGxhc3RzOltdfSBzdHJ1Y3R1cmVzLiBJdCBpcyB1c2VmdWwgZm9yIHRoZVxuICAgKiBkZXNjZW5kYW50LCBkZXNjZW5kYW50LW9yLXNlbGYsIGZvbGxvd2luZy1zaWJsaW5nLCBhbmRcbiAgICogcHJlY2VkaW5nLXNpYmxpbmcgYXhlcyBmb3Igd2hpY2ggd2UgY2FuIHVzZSBhIHN0YWNrIHRvIG9yZ2FuaXplIHRoaW5ncy5cbiAgICovXG4gIGZ1bmN0aW9uIE5vZGVNdWx0aVNldChpc1JldmVyc2VBeGlzKSB7XG4gICAgdGhpcy5ub2RlcyA9IFtdO1xuICAgIHRoaXMucG9zID0gW107XG4gICAgdGhpcy5sYXN0cyA9IFtdO1xuICAgIHRoaXMubmV4dFBvcyA9IFtdO1xuICAgIHRoaXMuc2VyaWVzSW5kZXhlcyA9IFtdOyAgLy8gaW5kZXggd2l0aGluIG5vZGVzIHRoYXQgZWFjaCBzZXJpZXMgYmVnaW5zLlxuICAgIHRoaXMuaXNSZXZlcnNlQXhpcyA9IGlzUmV2ZXJzZUF4aXM7XG4gICAgdGhpcy5fcHVzaFRvTm9kZXMgPSBpc1JldmVyc2VBeGlzID8gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQgOiBBcnJheS5wcm90b3R5cGUucHVzaDtcbiAgfVxuICBOb2RlTXVsdGlTZXQucHJvdG90eXBlID0ge1xuICAgIHB1c2hTZXJpZXM6IGZ1bmN0aW9uIHB1c2hTZXJpZXMoKSB7XG4gICAgICB0aGlzLm5leHRQb3MucHVzaCgxKTtcbiAgICAgIHRoaXMuc2VyaWVzSW5kZXhlcy5wdXNoKHRoaXMubm9kZXMubGVuZ3RoKTtcbiAgICB9LFxuICAgIHBvcFNlcmllczogZnVuY3Rpb24gcG9wU2VyaWVzKCkge1xuICAgICAgY29uc29sZS5hc3NlcnQoMCA8IHRoaXMubmV4dFBvcy5sZW5ndGgsIHRoaXMubmV4dFBvcyk7XG4gICAgICB2YXIgbGFzdCA9IHRoaXMubmV4dFBvcy5wb3AoKSAtIDEsXG4gICAgICAgICAgaW5kZXhJblBvcyA9IHRoaXMubmV4dFBvcy5sZW5ndGgsXG4gICAgICAgICAgc2VyaWVzQmVnaW5JbmRleCA9IHRoaXMuc2VyaWVzSW5kZXhlcy5wb3AoKSxcbiAgICAgICAgICBzZXJpZXNFbmRJbmRleCA9IHRoaXMubm9kZXMubGVuZ3RoO1xuICAgICAgZm9yICh2YXIgaSA9IHNlcmllc0JlZ2luSW5kZXg7IGkgPCBzZXJpZXNFbmRJbmRleDsgKytpKSB7XG4gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGluZGV4SW5Qb3MgPCB0aGlzLmxhc3RzW2ldLmxlbmd0aCk7XG4gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHVuZGVmaW5lZCA9PT0gdGhpcy5sYXN0c1tpXVtpbmRleEluUG9zXSk7XG4gICAgICAgIHRoaXMubGFzdHNbaV1baW5kZXhJblBvc10gPSBsYXN0O1xuICAgICAgfVxuICAgIH0sXG4gICAgZmluYWxpemU6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG51bGwgPT0gdGhpcy5uZXh0UG9zKSByZXR1cm4gdGhpcztcbiAgICAgIGNvbnNvbGUuYXNzZXJ0KDAgPT09IHRoaXMubmV4dFBvcy5sZW5ndGgpO1xuICAgICAgdmFyIGxhc3RzSlNPTiA9IEpTT04uc3RyaW5naWZ5KHRoaXMubGFzdHMpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxhc3RzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5sYXN0c1tpXS5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG51bGwgIT0gdGhpcy5sYXN0c1tpXVtqXSwgaSArICcsJyArIGogKyAnOicgKyBsYXN0c0pTT04pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnB1c2hTZXJpZXMgPSB0aGlzLnBvcFNlcmllcyA9IHRoaXMuYWRkTm9kZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FscmVhZHkgZmluYWxpemVkLicpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYWRkTm9kZTogZnVuY3Rpb24gYWRkTm9kZShub2RlKSB7XG4gICAgICBjb25zb2xlLmFzc2VydChub2RlKTtcbiAgICAgIHRoaXMuX3B1c2hUb05vZGVzLmNhbGwodGhpcy5ub2Rlcywgbm9kZSlcbiAgICAgIHRoaXMuX3B1c2hUb05vZGVzLmNhbGwodGhpcy5wb3MsIHRoaXMubmV4dFBvcy5zbGljZSgpKTtcbiAgICAgIHRoaXMuX3B1c2hUb05vZGVzLmNhbGwodGhpcy5sYXN0cywgbmV3IEFycmF5KHRoaXMubmV4dFBvcy5sZW5ndGgpKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5uZXh0UG9zLmxlbmd0aDsgKytpKSB0aGlzLm5leHRQb3NbaV0rKztcbiAgICB9LFxuICAgIHNpbXBsaWZ5OiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZmluYWxpemUoKTtcbiAgICAgIHJldHVybiB7bm9kZXM6dGhpcy5ub2RlcywgcG9zOnRoaXMucG9zLCBsYXN0czp0aGlzLmxhc3RzfTtcbiAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIGVhY2hDb250ZXh0KG5vZGVNdWx0aVNldCkge1xuICAgIHZhciByID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlTXVsdGlTZXQubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbm9kZU11bHRpU2V0Lm5vZGVzW2ldO1xuICAgICAgaWYgKCFub2RlTXVsdGlTZXQucG9zKSB7XG4gICAgICAgIHIucHVzaCh7bm9kZXM6W25vZGVdLCBwb3M6IFtbaSArIDFdXSwgbGFzdHM6IFtbbm9kZU11bHRpU2V0Lm5vZGVzLmxlbmd0aF1dfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vZGVNdWx0aVNldC5wb3NbaV0ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICByLnB1c2goe25vZGVzOltub2RlXSwgcG9zOiBbW25vZGVNdWx0aVNldC5wb3NbaV1bal1dXSwgbGFzdHM6IFtbbm9kZU11bHRpU2V0Lmxhc3RzW2ldW2pdXV19KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICAvKiogTWF0Y2hlciB1c2VkIGluIHRoZSBheGVzLlxuICAgKi9cbiAgZnVuY3Rpb24gTm9kZU1hdGNoZXIobm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpIHtcbiAgICB0aGlzLm5vZGVUeXBlTnVtID0gbm9kZVR5cGVOdW07XG4gICAgdGhpcy5ub2RlTmFtZSA9IG5vZGVOYW1lO1xuICAgIHRoaXMuc2hvdWxkTG93ZXJDYXNlID0gc2hvdWxkTG93ZXJDYXNlO1xuICAgIHRoaXMubm9kZU5hbWVUZXN0ID1cbiAgICAgIG51bGwgPT0gbm9kZU5hbWUgPyB0aGlzLl9hbHdheXNUcnVlIDpcbiAgICAgIHNob3VsZExvd2VyQ2FzZSA/IHRoaXMuX25vZGVOYW1lTG93ZXJDYXNlRXF1YWxzIDpcbiAgICAgIHRoaXMuX25vZGVOYW1lRXF1YWxzO1xuICB9XG4gIE5vZGVNYXRjaGVyLnByb3RvdHlwZSA9IHtcbiAgICBtYXRjaGVzOiBmdW5jdGlvbiBtYXRjaGVzKG5vZGUpIHtcbiAgICAgIGlmICgwID09PSB0aGlzLm5vZGVUeXBlTnVtIHx8IHRoaXMuX25vZGVUeXBlTWF0Y2hlcyhub2RlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlTmFtZVRlc3QoZ2V0Tm9kZU5hbWUobm9kZSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBfbm9kZVR5cGVNYXRjaGVzKG5vZGVPckF0dHIpIHtcbiAgICAgIGlmIChub2RlT3JBdHRyLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBdHRyJyAmJiB0aGlzLm5vZGVUeXBlTnVtID09PSAyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGVPckF0dHIubm9kZVR5cGUgPT09IHRoaXMubm9kZVR5cGVOdW07XG4gICAgfSxcbiAgICBfYWx3YXlzVHJ1ZTogZnVuY3Rpb24obmFtZSkge3JldHVybiB0cnVlO30sXG4gICAgX25vZGVOYW1lRXF1YWxzOiBmdW5jdGlvbiBfbm9kZU5hbWVFcXVhbHMobmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZU5hbWUgPT09IG5hbWU7XG4gICAgfSxcbiAgICBfbm9kZU5hbWVMb3dlckNhc2VFcXVhbHM6IGZ1bmN0aW9uIF9ub2RlTmFtZUxvd2VyQ2FzZUVxdWFscyhuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlTmFtZSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBmb2xsb3dpbmdTaWJsaW5nSGVscGVyKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSwgc2hpZnQsIHBlZWssIGZvbGxvd2luZ05vZGUsIGFuZFNlbGYsIGlzUmV2ZXJzZUF4aXMpIHtcbiAgICB2YXIgbWF0Y2hlciA9IG5ldyBOb2RlTWF0Y2hlcihub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSk7XG4gICAgdmFyIG5vZGVNdWx0aVNldCA9IG5ldyBOb2RlTXVsdGlTZXQoaXNSZXZlcnNlQXhpcyk7XG4gICAgd2hpbGUgKDAgPCBub2RlTGlzdC5sZW5ndGgpIHsgIC8vIGNhbiBiZSBpZiBmb3IgZm9sbG93aW5nLCBwcmVjZWRpbmdcbiAgICAgIHZhciBub2RlID0gc2hpZnQuY2FsbChub2RlTGlzdCk7XG4gICAgICBjb25zb2xlLmFzc2VydChub2RlICE9IG51bGwpO1xuICAgICAgbm9kZSA9IGZvbGxvd2luZ05vZGUobm9kZSk7XG4gICAgICBub2RlTXVsdGlTZXQucHVzaFNlcmllcygpO1xuICAgICAgdmFyIG51bVB1c2hlZCA9IDE7XG4gICAgICB3aGlsZSAobnVsbCAhPSBub2RlKSB7XG4gICAgICAgIGlmICghIGFuZFNlbGYgJiYgbWF0Y2hlci5tYXRjaGVzKG5vZGUpKVxuICAgICAgICAgIG5vZGVNdWx0aVNldC5hZGROb2RlKG5vZGUpO1xuICAgICAgICBpZiAobm9kZSA9PT0gcGVlay5jYWxsKG5vZGVMaXN0KSkge1xuICAgICAgICAgIHNoaWZ0LmNhbGwobm9kZUxpc3QpO1xuICAgICAgICAgIG5vZGVNdWx0aVNldC5wdXNoU2VyaWVzKCk7XG4gICAgICAgICAgbnVtUHVzaGVkKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFuZFNlbGYgJiYgbWF0Y2hlci5tYXRjaGVzKG5vZGUpKVxuICAgICAgICAgIG5vZGVNdWx0aVNldC5hZGROb2RlKG5vZGUpO1xuICAgICAgICBub2RlID0gZm9sbG93aW5nTm9kZShub2RlKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgwIDwgbnVtUHVzaGVkLS0pXG4gICAgICAgIG5vZGVNdWx0aVNldC5wb3BTZXJpZXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVNdWx0aVNldDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBuZXh0IG5vbi1kZXNjZW5kYW50IG5vZGUgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAqIFRoaXMgaXMgdGhlIGZpcnN0IG5vZGUgaW4gZm9sbG93aW5nOjpub2RlKCksIGlmIG5vZGUgaXMgdGhlIGNvbnRleHQuXG4gICAqL1xuICBmdW5jdGlvbiBmb2xsb3dpbmdOb25EZXNjZW5kYW50Tm9kZShub2RlKSB7XG4gICAgaWYgKG5vZGUub3duZXJFbGVtZW50KSB7XG4gICAgICBpZiAobm9kZS5vd25lckVsZW1lbnQuZmlyc3RDaGlsZClcbiAgICAgICAgcmV0dXJuIG5vZGUub3duZXJFbGVtZW50LmZpcnN0Q2hpbGQ7XG4gICAgICBub2RlID0gbm9kZS5vd25lckVsZW1lbnQ7XG4gICAgfVxuICAgIGRvIHtcbiAgICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICB9IHdoaWxlIChub2RlID0gbm9kZS5wYXJlbnROb2RlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBuZXh0IG5vZGUgaW4gYSBkb2N1bWVudC1vcmRlciBkZXB0aC1maXJzdCBzZWFyY2guXG4gICAqIFNlZSB0aGUgZGVmaW5pdGlvbiBvZiBkb2N1bWVudCBvcmRlclsxXTpcbiAgICogICAxKSBlbGVtZW50XG4gICAqICAgMikgbmFtZXNwYWNlIG5vZGVzXG4gICAqICAgMykgYXR0cmlidXRlc1xuICAgKiAgIDQpIGNoaWxkcmVuXG4gICAqICAgWzFdOiBodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aC8jZHQtZG9jdW1lbnQtb3JkZXJcbiAgICovXG4gIGZ1bmN0aW9uIGZvbGxvd2luZ05vZGUobm9kZSkge1xuICAgIGlmIChub2RlLm93bmVyRWxlbWVudCkgIC8vIGF0dHJpYnV0ZXM6IGZvbGxvd2luZyBub2RlIG9mIGVsZW1lbnQuXG4gICAgICBub2RlID0gbm9kZS5vd25lckVsZW1lbnQ7XG4gICAgaWYgKG51bGwgIT0gbm9kZS5maXJzdENoaWxkKVxuICAgICAgcmV0dXJuIG5vZGUuZmlyc3RDaGlsZDtcbiAgICBkbyB7XG4gICAgICBpZiAobnVsbCAhPSBub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgfVxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9IHdoaWxlIChub2RlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKiogUmV0dXJucyB0aGUgcHJldmlvdXMgbm9kZSBpbiBkb2N1bWVudCBvcmRlciAoZXhjbHVkaW5nIGF0dHJpYnV0ZXNcbiAgICogYW5kIG5hbWVzcGFjZSBub2RlcykuXG4gICAqL1xuICBmdW5jdGlvbiBwcmVjZWRpbmdOb2RlKG5vZGUpIHtcbiAgICBpZiAobm9kZS5vd25lckVsZW1lbnQpXG4gICAgICByZXR1cm4gbm9kZS5vd25lckVsZW1lbnQ7XG4gICAgaWYgKG51bGwgIT0gbm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgIHdoaWxlIChudWxsICE9IG5vZGUubGFzdENoaWxkKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLmxhc3RDaGlsZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBpZiAobnVsbCAhPSBub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKiBUaGlzIGF4aXMgaXMgaW5lZmZpY2llbnQgaWYgdGhlcmUgYXJlIG1hbnkgbm9kZXMgaW4gdGhlIG5vZGVMaXN0LlxuICAgKiBCdXQgSSB0aGluayBpdCdzIGEgcHJldHR5IHVzZWxlc3MgYXhpcyBzbyBpdCdzIG9rLiAqL1xuICBmdW5jdGlvbiBmb2xsb3dpbmdIZWxwZXIobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgdmFyIG1hdGNoZXIgPSBuZXcgTm9kZU1hdGNoZXIobm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpO1xuICAgIHZhciBub2RlTXVsdGlTZXQgPSBuZXcgTm9kZU11bHRpU2V0KGZhbHNlKTtcbiAgICB2YXIgY3Vyc29yID0gbm9kZUxpc3RbMF07XG4gICAgdmFyIHVub3JkZXJlZEZvbGxvd2luZ1N0YXJ0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbm9kZUxpc3RbaV07XG4gICAgICB2YXIgc3RhcnQgPSBmb2xsb3dpbmdOb25EZXNjZW5kYW50Tm9kZShub2RlKTtcbiAgICAgIGlmIChzdGFydClcbiAgICAgICAgdW5vcmRlcmVkRm9sbG93aW5nU3RhcnRzLnB1c2goc3RhcnQpO1xuICAgIH1cbiAgICBpZiAoMCA9PT0gdW5vcmRlcmVkRm9sbG93aW5nU3RhcnRzLmxlbmd0aClcbiAgICAgIHJldHVybiB7bm9kZXM6W119O1xuICAgIHZhciBwb3MgPSBbXSwgbmV4dFBvcyA9IFtdO1xuICAgIHZhciBzdGFydGVkID0gMDtcbiAgICB3aGlsZSAoY3Vyc29yID0gZm9sbG93aW5nTm9kZShjdXJzb3IpKSB7XG4gICAgICBmb3IgKHZhciBpID0gdW5vcmRlcmVkRm9sbG93aW5nU3RhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcbiAgICAgICAgaWYgKGN1cnNvciA9PT0gdW5vcmRlcmVkRm9sbG93aW5nU3RhcnRzW2ldKSB7XG4gICAgICAgICAgbm9kZU11bHRpU2V0LnB1c2hTZXJpZXMoKTtcbiAgICAgICAgICB1bm9yZGVyZWRGb2xsb3dpbmdTdGFydHMuc3BsaWNlKGksaSsxKTtcbiAgICAgICAgICBzdGFydGVkKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdGFydGVkICYmIG1hdGNoZXIubWF0Y2hlcyhjdXJzb3IpKSB7XG4gICAgICAgIG5vZGVNdWx0aVNldC5hZGROb2RlKGN1cnNvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUuYXNzZXJ0KDAgPT09IHVub3JkZXJlZEZvbGxvd2luZ1N0YXJ0cy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhcnRlZDsgaSsrKVxuICAgICAgbm9kZU11bHRpU2V0LnBvcFNlcmllcygpO1xuICAgIHJldHVybiBub2RlTXVsdGlTZXQuZmluYWxpemUoKTtcbiAgfVxuICBmdW5jdGlvbiBwcmVjZWRpbmdIZWxwZXIobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgdmFyIG1hdGNoZXIgPSBuZXcgTm9kZU1hdGNoZXIobm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpO1xuICAgIHZhciBjdXJzb3IgPSBub2RlTGlzdC5wb3AoKTtcbiAgICBpZiAobnVsbCA9PSBjdXJzb3IpIHJldHVybiB7bm9kZXM6e319O1xuICAgIHZhciByID0ge25vZGVzOltdLCBwb3M6W10sIGxhc3RzOltdfTtcbiAgICB2YXIgbmV4dFBhcmVudHMgPSBbY3Vyc29yLnBhcmVudE5vZGUgfHwgY3Vyc29yLm93bmVyRWxlbWVudF0sIG5leHRQb3MgPSBbMV07XG4gICAgd2hpbGUgKGN1cnNvciA9IHByZWNlZGluZ05vZGUoY3Vyc29yKSkge1xuICAgICAgaWYgKGN1cnNvciA9PT0gbm9kZUxpc3Rbbm9kZUxpc3QubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgbmV4dFBhcmVudHMucHVzaChub2RlTGlzdC5wb3AoKSk7XG4gICAgICAgIG5leHRQb3MucHVzaCgxKTtcbiAgICAgIH1cbiAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hlci5tYXRjaGVzKGN1cnNvcik7XG4gICAgICB2YXIgcG9zLCBzb21lb25lVXNlZCA9IGZhbHNlO1xuICAgICAgaWYgKG1hdGNoZXMpXG4gICAgICAgIHBvcyA9IG5leHRQb3Muc2xpY2UoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0UGFyZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoY3Vyc29yID09PSBuZXh0UGFyZW50c1tpXSkge1xuICAgICAgICAgIG5leHRQYXJlbnRzW2ldID0gY3Vyc29yLnBhcmVudE5vZGUgfHwgY3Vyc29yLm93bmVyRWxlbWVudDtcbiAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgcG9zW2ldID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgIHBvc1tpXSA9IG5leHRQb3NbaV0rKztcbiAgICAgICAgICAgIHNvbWVvbmVVc2VkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzb21lb25lVXNlZCkge1xuICAgICAgICByLm5vZGVzLnVuc2hpZnQoY3Vyc29yKTtcbiAgICAgICAgci5wb3MudW5zaGlmdChwb3MpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHIucG9zLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgbGFzdHMgPSBbXTtcbiAgICAgIHIubGFzdHMucHVzaChsYXN0cyk7XG4gICAgICBmb3IgKHZhciBqID0gci5wb3NbaV0ubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgaWYgKG51bGwgPT0gci5wb3NbaV1bal0pIHtcbiAgICAgICAgICByLnBvc1tpXS5zcGxpY2UoaiwgaisxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXN0cy51bnNoaWZ0KG5leHRQb3Nbal0gLSAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIC8qKiBub2RlLXNldCwgYXhpcyAtPiBub2RlLXNldCAqL1xuICBmdW5jdGlvbiBkZXNjZW5kYW50RGZzKG5vZGVNdWx0aVNldCwgbm9kZSwgcmVtYWluaW5nLCBtYXRjaGVyLCBhbmRTZWxmLCBhdHRySW5kaWNlcywgYXR0ck5vZGVzKSB7XG4gICAgd2hpbGUgKDAgPCByZW1haW5pbmcubGVuZ3RoICYmIG51bGwgIT0gcmVtYWluaW5nWzBdLm93bmVyRWxlbWVudCkge1xuICAgICAgdmFyIGF0dHIgPSByZW1haW5pbmcuc2hpZnQoKTtcbiAgICAgIGlmIChhbmRTZWxmICYmIG1hdGNoZXIubWF0Y2hlcyhhdHRyKSkge1xuICAgICAgICBhdHRyTm9kZXMucHVzaChhdHRyKTtcbiAgICAgICAgYXR0ckluZGljZXMucHVzaChub2RlTXVsdGlTZXQubm9kZXMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG51bGwgIT0gbm9kZSAmJiAhYW5kU2VsZikge1xuICAgICAgaWYgKG1hdGNoZXIubWF0Y2hlcyhub2RlKSlcbiAgICAgICAgbm9kZU11bHRpU2V0LmFkZE5vZGUobm9kZSk7XG4gICAgfVxuICAgIHZhciBwdXNoZWQgPSBmYWxzZTtcbiAgICBpZiAobnVsbCA9PSBub2RlKSB7XG4gICAgICBpZiAoMCA9PT0gcmVtYWluaW5nLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgbm9kZSA9IHJlbWFpbmluZy5zaGlmdCgpO1xuICAgICAgbm9kZU11bHRpU2V0LnB1c2hTZXJpZXMoKTtcbiAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICgwIDwgcmVtYWluaW5nLmxlbmd0aCAmJiBub2RlID09PSByZW1haW5pbmdbMF0pIHtcbiAgICAgIG5vZGVNdWx0aVNldC5wdXNoU2VyaWVzKCk7XG4gICAgICBwdXNoZWQgPSB0cnVlO1xuICAgICAgcmVtYWluaW5nLnNoaWZ0KCk7XG4gICAgfVxuICAgIGlmIChhbmRTZWxmKSB7XG4gICAgICBpZiAobWF0Y2hlci5tYXRjaGVzKG5vZGUpKVxuICAgICAgICBub2RlTXVsdGlTZXQuYWRkTm9kZShub2RlKTtcbiAgICB9XG4gICAgLy8gVE9ETzogdXNlIG9wdGltaXphdGlvbi4gQWxzbyB0cnkgZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZVxuICAgIC8vIHZhciBub2RlTGlzdCA9IDEgPT09IG5vZGVUeXBlTnVtICYmIG51bGwgIT0gbm9kZS5jaGlsZHJlbiA/IG5vZGUuY2hpbGRyZW4gOiBub2RlLmNoaWxkTm9kZXM7XG4gICAgdmFyIG5vZGVMaXN0ID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbm9kZUxpc3QubGVuZ3RoOyArK2opIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVMaXN0W2pdO1xuICAgICAgZGVzY2VuZGFudERmcyhub2RlTXVsdGlTZXQsIGNoaWxkLCByZW1haW5pbmcsIG1hdGNoZXIsIGFuZFNlbGYsIGF0dHJJbmRpY2VzLCBhdHRyTm9kZXMpO1xuICAgIH1cbiAgICBpZiAocHVzaGVkKSB7XG4gICAgICBub2RlTXVsdGlTZXQucG9wU2VyaWVzKCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGRlc2NlbmFudEhlbHBlcihub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UsIGFuZFNlbGYpIHtcbiAgICB2YXIgbWF0Y2hlciA9IG5ldyBOb2RlTWF0Y2hlcihub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSk7XG4gICAgdmFyIG5vZGVNdWx0aVNldCA9IG5ldyBOb2RlTXVsdGlTZXQoZmFsc2UpO1xuICAgIHZhciBhdHRySW5kaWNlcyA9IFtdLCBhdHRyTm9kZXMgPSBbXTtcbiAgICB3aGlsZSAoMCA8IG5vZGVMaXN0Lmxlbmd0aCkge1xuICAgICAgLy8gdmFyIG5vZGUgPSBub2RlTGlzdC5zaGlmdCgpO1xuICAgICAgZGVzY2VuZGFudERmcyhub2RlTXVsdGlTZXQsIG51bGwsIG5vZGVMaXN0LCBtYXRjaGVyLCBhbmRTZWxmLCBhdHRySW5kaWNlcywgYXR0ck5vZGVzKTtcbiAgICB9XG4gICAgbm9kZU11bHRpU2V0LmZpbmFsaXplKCk7XG4gICAgZm9yICh2YXIgaSA9IGF0dHJOb2Rlcy5sZW5ndGgtMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIG5vZGVNdWx0aVNldC5ub2Rlcy5zcGxpY2UoYXR0ckluZGljZXNbaV0sIGF0dHJJbmRpY2VzW2ldLCBhdHRyTm9kZXNbaV0pO1xuICAgICAgbm9kZU11bHRpU2V0LnBvcy5zcGxpY2UoYXR0ckluZGljZXNbaV0sIGF0dHJJbmRpY2VzW2ldLCBbMV0pO1xuICAgICAgbm9kZU11bHRpU2V0Lmxhc3RzLnNwbGljZShhdHRySW5kaWNlc1tpXSwgYXR0ckluZGljZXNbaV0sIFsxXSk7XG4gICAgfVxuICAgIHJldHVybiBub2RlTXVsdGlTZXQ7XG4gIH1cbiAgLyoqXG4gICAqL1xuICBmdW5jdGlvbiBhbmNlc3RvckhlbHBlcihub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UsIGFuZFNlbGYpIHtcbiAgICB2YXIgbWF0Y2hlciA9IG5ldyBOb2RlTWF0Y2hlcihub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSk7XG4gICAgdmFyIGFuY2VzdG9ycyA9IFtdOyAvLyBhcnJheSBvZiBub24tZW1wdHkgYXJyYXlzIG9mIG1hdGNoaW5nIGFuY2VzdG9yc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gbm9kZUxpc3RbaV07XG4gICAgICB2YXIgaXNGaXJzdCA9IHRydWU7XG4gICAgICB2YXIgYSA9IFtdO1xuICAgICAgd2hpbGUgKG51bGwgIT0gbm9kZSkge1xuICAgICAgICBpZiAoIWlzRmlyc3QgfHwgYW5kU2VsZikge1xuICAgICAgICAgIGlmIChtYXRjaGVyLm1hdGNoZXMobm9kZSkpXG4gICAgICAgICAgICBhLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaXNGaXJzdCA9IGZhbHNlO1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlIHx8IG5vZGUub3duZXJFbGVtZW50O1xuICAgICAgfVxuICAgICAgaWYgKDAgPCBhLmxlbmd0aClcbiAgICAgICAgYW5jZXN0b3JzLnB1c2goYSk7XG4gICAgfVxuICAgIHZhciBsYXN0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5jZXN0b3JzLmxlbmd0aDsgKytpKSBsYXN0cy5wdXNoKGFuY2VzdG9yc1tpXS5sZW5ndGgpO1xuICAgIHZhciBub2RlTXVsdGlTZXQgPSBuZXcgTm9kZU11bHRpU2V0KHRydWUpO1xuICAgIHZhciBuZXdDdHggPSB7bm9kZXM6W10sIHBvczpbXSwgbGFzdHM6W119O1xuICAgIHdoaWxlICgwIDwgYW5jZXN0b3JzLmxlbmd0aCkge1xuICAgICAgdmFyIHBvcyA9IFthbmNlc3RvcnNbMF0ubGVuZ3RoXTtcbiAgICAgIHZhciBsYXN0ID0gW2xhc3RzWzBdXTtcbiAgICAgIHZhciBub2RlID0gYW5jZXN0b3JzWzBdLnBvcCgpO1xuICAgICAgZm9yICh2YXIgaSA9IGFuY2VzdG9ycy5sZW5ndGggLSAxOyBpID4gMDsgLS1pKSB7XG4gICAgICAgIGlmIChub2RlID09PSBhbmNlc3RvcnNbaV1bYW5jZXN0b3JzW2ldLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgcG9zLnB1c2goYW5jZXN0b3JzW2ldLmxlbmd0aCk7XG4gICAgICAgICAgbGFzdC5wdXNoKGxhc3RzW2ldKTtcbiAgICAgICAgICBhbmNlc3RvcnNbaV0ucG9wKCk7XG4gICAgICAgICAgaWYgKDAgPT09IGFuY2VzdG9yc1tpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFuY2VzdG9ycy5zcGxpY2UoaSwgaSsxKTtcbiAgICAgICAgICAgIGxhc3RzLnNwbGljZShpLCBpKzEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKDAgPT09IGFuY2VzdG9yc1swXS5sZW5ndGgpIHtcbiAgICAgICAgYW5jZXN0b3JzLnNoaWZ0KCk7XG4gICAgICAgIGxhc3RzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgICBuZXdDdHgubm9kZXMucHVzaChub2RlKTtcbiAgICAgIG5ld0N0eC5wb3MucHVzaChwb3MpO1xuICAgICAgbmV3Q3R4Lmxhc3RzLnB1c2gobGFzdCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdDdHg7XG4gIH1cbiAgLyoqIEhlbHBlciBmdW5jdGlvbiBmb3Igc29ydERvY3VtZW50T3JkZXIuIFJldHVybnMgYSBsaXN0IG9mIGluZGljZXMsIGZyb20gdGhlXG4gICAqIG5vZGUgdG8gdGhlIHJvb3QsIG9mIHBvc2l0aW9ucyB3aXRoaW4gcGFyZW50LlxuICAgKiBGb3IgY29udmVuaWVuY2UsIHRoZSBub2RlIGlzIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZHJlc3NWZWN0b3Iobm9kZSkge1xuICAgIHZhciByID0gW25vZGVdO1xuICAgIGlmIChudWxsICE9IG5vZGUub3duZXJFbGVtZW50KSB7XG4gICAgICBub2RlID0gbm9kZS5vd25lckVsZW1lbnQ7XG4gICAgICByLnB1c2goLTEpO1xuICAgIH1cbiAgICB3aGlsZSAobnVsbCAhPSBub2RlKSB7XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB3aGlsZSAobnVsbCAhPSBub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICAgIHIucHVzaChpKTtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGVcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgZnVuY3Rpb24gYWRkcmVzc0NvbXBhcmF0b3IoYSwgYikge1xuICAgIHZhciBtaW5sZW4gPSBNYXRoLm1pbihhLmxlbmd0aCAtIDEsIGIubGVuZ3RoIC0gMSksICAvLyBub3QgaW5jbHVkaW5nIFswXT1ub2RlXG4gICAgICAgIGFsZW4gPSBhLmxlbmd0aCxcbiAgICAgICAgYmxlbiA9IGIubGVuZ3RoO1xuICAgIGlmIChhWzBdID09PSBiWzBdKSByZXR1cm4gMDtcbiAgICB2YXIgYztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbmxlbjsgKytpKSB7XG4gICAgICBjID0gYVthbGVuIC0gaSAtIDFdIC0gYltibGVuIC0gaSAtIDFdO1xuICAgICAgaWYgKDAgIT09IGMpXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAobnVsbCA9PSBjIHx8IDAgPT09IGMpIHtcbiAgICAgIC8vIEFsbCBlcXVhbCB1bnRpbCBvbmUgb2YgdGhlIG5vZGVzLiBUaGUgbG9uZ2VyIG9uZSBpcyB0aGUgZGVzY2VuZGFudC5cbiAgICAgIGMgPSBhbGVuIC0gYmxlbjtcbiAgICB9XG4gICAgaWYgKDAgPT09IGMpXG4gICAgICBjID0gZ2V0Tm9kZU5hbWUoYSkgLSBnZXROb2RlTmFtZShiKTtcbiAgICBpZiAoMCA9PT0gYylcbiAgICAgIGMgPSAxO1xuICAgIHJldHVybiBjO1xuICB9XG4gIHZhciBzb3J0VW5pcURvY3VtZW50T3JkZXIgPSB4cGF0aC5zb3J0VW5pcURvY3VtZW50T3JkZXIgPSBmdW5jdGlvbihub2Rlcykge1xuICAgIHZhciBhID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIHZhciB2ID0gYWRkcmVzc1ZlY3Rvcihub2RlKTtcbiAgICAgIGEucHVzaCh2KTtcbiAgICB9XG4gICAgYS5zb3J0KGFkZHJlc3NDb21wYXJhdG9yKTtcbiAgICB2YXIgYiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKDAgPCBpICYmIGFbaV1bMF0gPT09IGFbaSAtIDFdWzBdKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGIucHVzaChhW2ldWzBdKTtcbiAgICB9XG4gICAgcmV0dXJuIGI7XG4gIH1cbiAgLyoqIFNvcnQgbm9kZSBtdWx0aXNldC4gRG9lcyBub3QgZG8gYW55IGRlLWR1cGluZy4gKi9cbiAgZnVuY3Rpb24gc29ydE5vZGVNdWx0aVNldChub2RlTXVsdGlTZXQpIHtcbiAgICB2YXIgYSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZU11bHRpU2V0Lm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdiA9IGFkZHJlc3NWZWN0b3Iobm9kZU11bHRpU2V0Lm5vZGVzW2ldKTtcbiAgICAgIGEucHVzaCh7djp2LCBuOm5vZGVNdWx0aVNldC5ub2Rlc1tpXSxcbiAgICAgICAgICAgICAgcDpub2RlTXVsdGlTZXQucG9zW2ldLCBsOm5vZGVNdWx0aVNldC5sYXN0c1tpXX0pO1xuICAgIH1cbiAgICBhLnNvcnQoY29tcGFyZSk7XG4gICAgdmFyIHIgPSB7bm9kZXM6W10sIHBvczpbXSwgbGFzdHM6W119O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgICAgci5ub2Rlcy5wdXNoKGFbaV0ubik7XG4gICAgICByLnBvcy5wdXNoKGFbaV0ucCk7XG4gICAgICByLmxhc3RzLnB1c2goYVtpXS5sKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGFyZSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWRkcmVzc0NvbXBhcmF0b3IoeC52LCB5LnYpO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICAvKiogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYW5jZXN0b3JzIGRvd24gdG8gYSBub2RlLlxuICAgKiBUaGUgYXJyYXkgc3RhcnRzIHdpdGggZG9jdW1lbnQuXG4gICAqL1xuICBmdW5jdGlvbiBub2RlQW5kQW5jZXN0b3JzKG5vZGUpIHtcbiAgICB2YXIgYW5jZXN0b3JzID0gW25vZGVdO1xuICAgIHZhciBwID0gbm9kZTtcbiAgICB3aGlsZSAocCA9IHAucGFyZW50Tm9kZSB8fCBwLm93bmVyRWxlbWVudCkge1xuICAgICAgYW5jZXN0b3JzLnVuc2hpZnQocCk7XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvcnM7XG4gIH1cbiAgZnVuY3Rpb24gY29tcGFyZVNpYmxpbmdzKGEsIGIpIHtcbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIDA7XG4gICAgdmFyIGMgPSBhO1xuICAgIHdoaWxlIChjID0gYy5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgIGlmIChjID09PSBiKVxuICAgICAgICByZXR1cm4gMTsgIC8vIGIgPCBhXG4gICAgfVxuICAgIGMgPSBiO1xuICAgIHdoaWxlIChjID0gYy5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgIGlmIChjID09PSBhKVxuICAgICAgICByZXR1cm4gLTE7ICAvLyBhIDwgYlxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2EgYW5kIGIgYXJlIG5vdCBzaWJsaW5nczogJyArIHhwYXRoLnN0cmluZ2lmeU9iamVjdChhKSArICcgdnMgJyArIHhwYXRoLnN0cmluZ2lmeU9iamVjdChiKSk7XG4gIH1cbiAgLyoqIFRoZSBtZXJnZSBpbiBtZXJnZS1zb3J0LiovXG4gIGZ1bmN0aW9uIG1lcmdlTm9kZUxpc3RzKHgsIHkpIHtcbiAgICB2YXIgYSwgYiwgYWFuYywgYmFuYywgciA9IFtdO1xuICAgIGlmICgnb2JqZWN0JyAhPT0gdHlwZW9mIHgpXG4gICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBMSFMgZm9yIHwgb3BlcmF0b3IgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhleHBlY3RlZCBub2RlLXNldCk6ICcgKyB4KTtcbiAgICBpZiAoJ29iamVjdCcgIT09IHR5cGVvZiB5KVxuICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQgTEhTIGZvciB8IG9wZXJhdG9yICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoZXhwZWN0ZWQgbm9kZS1zZXQpOiAnICsgeSk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChudWxsID09IGEpIHtcbiAgICAgICAgYSA9IHguc2hpZnQoKTtcbiAgICAgICAgaWYgKG51bGwgIT0gYSlcbiAgICAgICAgICBhYW5jID0gYWRkcmVzc1ZlY3RvcihhKTtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsID09IGIpIHtcbiAgICAgICAgYiA9IHkuc2hpZnQoKTtcbiAgICAgICAgaWYgKG51bGwgIT0gYilcbiAgICAgICAgICBiYW5jID0gYWRkcmVzc1ZlY3RvcihiKTtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsID09IGEgfHwgbnVsbCA9PSBiKSBicmVhaztcbiAgICAgIHZhciBjID0gYWRkcmVzc0NvbXBhcmF0b3IoYWFuYywgYmFuYyk7XG4gICAgICBpZiAoYyA8IDApIHtcbiAgICAgICAgci5wdXNoKGEpO1xuICAgICAgICBhID0gbnVsbDtcbiAgICAgICAgYWFuYyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKGMgPiAwKSB7XG4gICAgICAgIHIucHVzaChiKTtcbiAgICAgICAgYiA9IG51bGw7XG4gICAgICAgIGJhbmMgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChnZXROb2RlTmFtZShhKSA8IGdldE5vZGVOYW1lKGIpKSB7ICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHIucHVzaChhKTtcbiAgICAgICAgYSA9IG51bGw7XG4gICAgICAgIGFhbmMgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChnZXROb2RlTmFtZShhKSA+IGdldE5vZGVOYW1lKGIpKSB7ICAvLyBhdHRyaWJ1dGVzXG4gICAgICAgIHIucHVzaChiKTtcbiAgICAgICAgYiA9IG51bGw7XG4gICAgICAgIGJhbmMgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChhICE9PSBiKSB7XG4gICAgICAgIC8vIGNob29zZSBiIGFyYml0cmFyaWx5XG4gICAgICAgIHIucHVzaChiKTtcbiAgICAgICAgYiA9IG51bGw7XG4gICAgICAgIGJhbmMgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5hc3NlcnQoYSA9PT0gYiwgYyk7XG4gICAgICAgIC8vIGp1c3Qgc2tpcCBiIHdpdGhvdXQgcHVzaGluZyBpdC5cbiAgICAgICAgYiA9IG51bGw7XG4gICAgICAgIGJhbmMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB3aGlsZSAoYSkge1xuICAgICAgci5wdXNoKGEpO1xuICAgICAgYSA9IHguc2hpZnQoKTtcbiAgICB9XG4gICAgd2hpbGUgKGIpIHtcbiAgICAgIHIucHVzaChiKTtcbiAgICAgIGIgPSB5LnNoaWZ0KCk7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIGZ1bmN0aW9uIGNvbXBhcmlzb25IZWxwZXIodGVzdCwgeCwgeSwgaXNOdW1lcmljQ29tcGFyaXNvbikge1xuICAgIHZhciBjb2Vyc2lvbjtcbiAgICBpZiAoaXNOdW1lcmljQ29tcGFyaXNvbilcbiAgICAgIGNvZXJzaW9uID0gZm4ubnVtYmVyO1xuICAgIGVsc2UgY29lcnNpb24gPVxuICAgICAgJ2Jvb2xlYW4nID09PSB0eXBlb2YgeCB8fCAnYm9vbGVhbicgPT09IHR5cGVvZiB5ID8gZm5bJ2Jvb2xlYW4nXSA6XG4gICAgICAnbnVtYmVyJyA9PT0gdHlwZW9mIHggfHwgJ251bWJlcicgPT09IHR5cGVvZiB5ID8gZm4ubnVtYmVyIDpcbiAgICAgIGZuLnN0cmluZztcbiAgICBpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB4ICYmICdvYmplY3QnID09PSB0eXBlb2YgeSkge1xuICAgICAgdmFyIGFNYXAgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5ub2Rlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgeGkgPSBjb2Vyc2lvbih7bm9kZXM6W3gubm9kZXNbaV1dfSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgeS5ub2Rlcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIHZhciB5aiA9IGNvZXJzaW9uKHtub2RlczpbeS5ub2Rlc1tqXV19KTtcbiAgICAgICAgICBpZiAodGVzdCh4aSwgeWopKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB4ICYmIHgubm9kZXMgJiYgeC5ub2Rlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5ub2Rlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgeGkgPSBjb2Vyc2lvbih7bm9kZXM6W3gubm9kZXNbaV1dfSksIHljID0gY29lcnNpb24oeSk7XG4gICAgICAgIGlmICh0ZXN0KHhpLCB5YykpXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIHkgJiYgeC5ub2RlcyAmJiB4Lm5vZGVzLmxlbmd0aCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lm5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciB5aSA9IGNvZXJzaW9uKHtub2RlczpbeS5ub2Rlc1tpXV19KSwgeGMgPSBjb2Vyc2lvbih4KTtcbiAgICAgICAgaWYgKHRlc3QoeGMsIHlpKSlcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHhjID0gY29lcnNpb24oeCksIHljID0gY29lcnNpb24oeSk7XG4gICAgICByZXR1cm4gdGVzdCh4YywgeWMpO1xuICAgIH1cbiAgfVxuICB2YXIgYXhlcyA9IHhwYXRoLmF4ZXMgPSB7XG4gICAgJ2FuY2VzdG9yJzpcbiAgICAgIGZ1bmN0aW9uIGFuY2VzdG9yKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSkge1xuICAgICAgICByZXR1cm4gYW5jZXN0b3JIZWxwZXIoXG4gICAgICAgICAgbm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlLCBmYWxzZSk7XG4gICAgICB9LFxuICAgICdhbmNlc3Rvci1vci1zZWxmJzpcbiAgICAgIGZ1bmN0aW9uIGFuY2VzdG9yT3JTZWxmKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSkge1xuICAgICAgICByZXR1cm4gYW5jZXN0b3JIZWxwZXIoXG4gICAgICAgICAgbm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlLCB0cnVlKTtcbiAgICAgIH0sXG4gICAgJ2F0dHJpYnV0ZSc6XG4gICAgICBmdW5jdGlvbiBhdHRyaWJ1dGUobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgd2hldGhlciBwb3NpdGlvbnMgc2hvdWxkIGJlIHVuZGVmaW5lZCBoZXJlLlxuICAgICAgICB2YXIgbWF0Y2hlciA9IG5ldyBOb2RlTWF0Y2hlcihub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSk7XG4gICAgICAgIHZhciBub2RlTXVsdGlTZXQgPSBuZXcgTm9kZU11bHRpU2V0KGZhbHNlKTtcbiAgICAgICAgaWYgKG51bGwgIT0gbm9kZU5hbWUpIHtcbiAgICAgICAgICAvLyBUT0RPOiB3aXRoIG5hbWVzcGFjZVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gbm9kZUxpc3RbaV07XG4gICAgICAgICAgICBpZiAobnVsbCA9PSBub2RlLmdldEF0dHJpYnV0ZU5vZGUpXG4gICAgICAgICAgICAgIGNvbnRpbnVlOyAgLy8gb25seSBFbGVtZW50IGhhcyAuZ2V0QXR0cmlidXRlTm9kZVxuICAgICAgICAgICAgdmFyIGF0dHIgPSBub2RlLmdldEF0dHJpYnV0ZU5vZGUobm9kZU5hbWUpO1xuICAgICAgICAgICAgaWYgKG51bGwgIT0gYXR0ciAmJiBtYXRjaGVyLm1hdGNoZXMoYXR0cikpIHtcbiAgICAgICAgICAgICAgbm9kZU11bHRpU2V0LnB1c2hTZXJpZXMoKTtcbiAgICAgICAgICAgICAgbm9kZU11bHRpU2V0LmFkZE5vZGUoYXR0cik7XG4gICAgICAgICAgICAgIG5vZGVNdWx0aVNldC5wb3BTZXJpZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBub2RlTGlzdFtpXTtcbiAgICAgICAgICAgIGlmIChudWxsICE9IG5vZGUuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBub2RlTXVsdGlTZXQucHVzaFNlcmllcygpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5vZGUuYXR0cmlidXRlcy5sZW5ndGg7IGorKykgeyAgLy8gYWxsIG5vZGVzIGhhdmUgLmF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IG5vZGUuYXR0cmlidXRlc1tqXTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlci5tYXRjaGVzKGF0dHIpKSAgLy8gVE9ETzogSSB0aGluayB0aGlzIGNoZWNrIGlzIHVubmVjZXNzYXJ5XG4gICAgICAgICAgICAgICAgICBub2RlTXVsdGlTZXQuYWRkTm9kZShhdHRyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBub2RlTXVsdGlTZXQucG9wU2VyaWVzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlTXVsdGlTZXQuZmluYWxpemUoKTtcbiAgICAgIH0sXG4gICAgJ2NoaWxkJzpcbiAgICAgIGZ1bmN0aW9uIGNoaWxkKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSkge1xuICAgICAgICB2YXIgbWF0Y2hlciA9IG5ldyBOb2RlTWF0Y2hlcihub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSk7XG4gICAgICAgIHZhciBub2RlTXVsdGlTZXQgPSBuZXcgTm9kZU11bHRpU2V0KGZhbHNlKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHZhciBuID0gbm9kZUxpc3RbaV07XG4gICAgICAgICAgaWYgKG4ub3duZXJFbGVtZW50KSAgLy8gc2tpcCBhdHRyaWJ1dGUgbm9kZXMnIHRleHQgY2hpbGQuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBpZiAobi5jaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICBub2RlTXVsdGlTZXQucHVzaFNlcmllcygpO1xuICAgICAgICAgICAgdmFyIGNoaWxkTGlzdCA9IDEgPT09IG5vZGVUeXBlTnVtICYmIG51bGwgIT0gbi5jaGlsZHJlbiA/XG4gICAgICAgICAgICAgICAgbi5jaGlsZHJlbiA6IG4uY2hpbGROb2RlcztcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGRMaXN0Lmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkTGlzdFtqXTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoZXIubWF0Y2hlcyhjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICBub2RlTXVsdGlTZXQuYWRkTm9kZShjaGlsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZG9uJ3QgaGF2ZSB0byBkbyBkZS1kdXBpbmcgYmVjYXVzZSBjaGlsZHJlbiBoYXZlIHBhcmVudCxcbiAgICAgICAgICAgICAgLy8gd2hpY2ggYXJlIGN1cnJlbnQgY29udGV4dC5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGVNdWx0aVNldC5wb3BTZXJpZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbm9kZU11bHRpU2V0LmZpbmFsaXplKCk7XG4gICAgICAgIHJldHVybiBzb3J0Tm9kZU11bHRpU2V0KG5vZGVNdWx0aVNldCk7XG4gICAgICB9LFxuICAgICdkZXNjZW5kYW50JzpcbiAgICAgIGZ1bmN0aW9uIGRlc2NlbmFudChub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpIHtcbiAgICAgICAgcmV0dXJuIGRlc2NlbmFudEhlbHBlcihcbiAgICAgICAgICBub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UsIGZhbHNlKTtcbiAgICAgIH0sXG4gICAgJ2Rlc2NlbmRhbnQtb3Itc2VsZic6XG4gICAgICBmdW5jdGlvbiBkZXNjZW5hbnRPclNlbGYobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgICAgIHJldHVybiBkZXNjZW5hbnRIZWxwZXIoXG4gICAgICAgICAgbm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlLCB0cnVlKTtcbiAgICAgIH0sXG4gICAgJ2ZvbGxvd2luZyc6XG4gICAgICBmdW5jdGlvbiBmb2xsb3dpbmcobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgICAgIHJldHVybiBmb2xsb3dpbmdIZWxwZXIobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKTtcbiAgICAgIH0sXG4gICAgJ2ZvbGxvd2luZy1zaWJsaW5nJzpcbiAgICAgIGZ1bmN0aW9uIGZvbGxvd2luZ1NpYmxpbmcobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgICAgIHJldHVybiBmb2xsb3dpbmdTaWJsaW5nSGVscGVyKFxuICAgICAgICAgIG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSxcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2hpZnQsIGZ1bmN0aW9uKCkge3JldHVybiB0aGlzWzBdO30sXG4gICAgICAgICAgZnVuY3Rpb24obm9kZSkge3JldHVybiBub2RlLm5leHRTaWJsaW5nO30pO1xuICAgICAgfSxcbiAgICAnbmFtZXNwYWNlJzpcbiAgICAgIGZ1bmN0aW9uIG5hbWVzcGFjZShub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpIHtcbiAgICAgICAgLy8gVE9ET1xuICAgICAgfSxcbiAgICAncGFyZW50JzpcbiAgICAgIGZ1bmN0aW9uIHBhcmVudChub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpIHtcbiAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgTm9kZU1hdGNoZXIobm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpO1xuICAgICAgICB2YXIgbm9kZXMgPSBbXSwgcG9zID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gbm9kZUxpc3RbaV0ucGFyZW50Tm9kZSB8fCBub2RlTGlzdFtpXS5vd25lckVsZW1lbnQ7XG4gICAgICAgICAgaWYgKG51bGwgPT0gcGFyZW50KVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgaWYgKCFtYXRjaGVyLm1hdGNoZXMocGFyZW50KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChub2Rlcy5sZW5ndGggPiAwICYmIHBhcmVudCA9PT0gbm9kZXNbbm9kZXMubGVuZ3RoLTFdKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgbm9kZXMucHVzaChwYXJlbnQpO1xuICAgICAgICAgIHBvcy5wdXNoKFsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtub2Rlczpub2RlcywgcG9zOnBvcywgbGFzdHM6cG9zfTtcbiAgICAgIH0sXG4gICAgJ3ByZWNlZGluZyc6XG4gICAgICBmdW5jdGlvbiBwcmVjZWRpbmcobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgICAgIHJldHVybiBwcmVjZWRpbmdIZWxwZXIoXG4gICAgICAgICAgbm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKTtcbiAgICAgIH0sXG4gICAgJ3ByZWNlZGluZy1zaWJsaW5nJzpcbiAgICAgIGZ1bmN0aW9uIHByZWNlZGluZ1NpYmxpbmcobm9kZUxpc3QgIC8qZGVzdHJ1Y3RpdmUhKi8sIG5vZGVUeXBlTnVtLCBub2RlTmFtZSwgc2hvdWxkTG93ZXJDYXNlKSB7XG4gICAgICAgIHJldHVybiBmb2xsb3dpbmdTaWJsaW5nSGVscGVyKFxuICAgICAgICAgIG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSxcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucG9wLCBmdW5jdGlvbigpIHtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXTt9LFxuICAgICAgICAgIGZ1bmN0aW9uKG5vZGUpIHtyZXR1cm4gbm9kZS5wcmV2aW91c1NpYmxpbmd9LFxuICAgICAgICAgIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0sXG4gICAgJ3NlbGYnOlxuICAgICAgZnVuY3Rpb24gc2VsZihub2RlTGlzdCAgLypkZXN0cnVjdGl2ZSEqLywgbm9kZVR5cGVOdW0sIG5vZGVOYW1lLCBzaG91bGRMb3dlckNhc2UpIHtcbiAgICAgICAgdmFyIG5vZGVzID0gW10sIHBvcyA9IFtdO1xuICAgICAgICB2YXIgbWF0Y2hlciA9IG5ldyBOb2RlTWF0Y2hlcihub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBpZiAobWF0Y2hlci5tYXRjaGVzKG5vZGVMaXN0W2ldKSkge1xuICAgICAgICAgICAgbm9kZXMucHVzaChub2RlTGlzdFtpXSk7XG4gICAgICAgICAgICBwb3MucHVzaChbMV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge25vZGVzOiBub2RlcywgcG9zOiBwb3MsIGxhc3RzOiBwb3N9XG4gICAgICB9XG4gIH07XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBFdmFsdWF0aW9uOiBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gIHZhciBmbiA9IHtcbiAgICAnbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyKG9wdE9iamVjdCkge1xuICAgICAgaWYgKCdudW1iZXInID09PSB0eXBlb2Ygb3B0T2JqZWN0KVxuICAgICAgICByZXR1cm4gb3B0T2JqZWN0O1xuICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2Ygb3B0T2JqZWN0KVxuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChvcHRPYmplY3QpOyAgLy8gbm90ZTogcGFyc2VGbG9hdCgnICcpIC0+IE5hTiwgdW5saWtlICsnICcgLT4gMC5cbiAgICAgIGlmICgnYm9vbGVhbicgPT09IHR5cGVvZiBvcHRPYmplY3QpXG4gICAgICAgIHJldHVybiArb3B0T2JqZWN0O1xuICAgICAgcmV0dXJuIGZuLm51bWJlcihmbi5zdHJpbmcuY2FsbCh0aGlzLCBvcHRPYmplY3QpKTsgIC8vIGZvciBub2RlLXNldHNcbiAgICB9LFxuICAgICdzdHJpbmcnOiBmdW5jdGlvbiBzdHJpbmcob3B0T2JqZWN0KSB7XG4gICAgICBpZiAobnVsbCA9PSBvcHRPYmplY3QpXG4gICAgICAgIHJldHVybiBmbi5zdHJpbmcodGhpcyk7XG4gICAgICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBvcHRPYmplY3QgfHwgJ2Jvb2xlYW4nID09PSB0eXBlb2Ygb3B0T2JqZWN0IHx8XG4gICAgICAgICAgJ251bWJlcicgPT09IHR5cGVvZiBvcHRPYmplY3QpXG4gICAgICAgIHJldHVybiAnJyArIG9wdE9iamVjdDtcbiAgICAgIGlmICgwID09IG9wdE9iamVjdC5ub2Rlcy5sZW5ndGgpIHJldHVybiAnJztcbiAgICAgIGlmIChudWxsICE9IG9wdE9iamVjdC5ub2Rlc1swXS50ZXh0Q29udGVudClcbiAgICAgICAgcmV0dXJuIG9wdE9iamVjdC5ub2Rlc1swXS50ZXh0Q29udGVudDtcbiAgICAgIHJldHVybiBvcHRPYmplY3Qubm9kZXNbMF0ubm9kZVZhbHVlO1xuICAgIH0sXG4gICAgJ2Jvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuVmFsKHgpIHtcbiAgICAgIHJldHVybiAnb2JqZWN0JyA9PT0gdHlwZW9mIHggPyB4Lm5vZGVzLmxlbmd0aCA+IDAgOiAhIXg7XG4gICAgfSxcbiAgICAnbGFzdCc6IGZ1bmN0aW9uIGxhc3QoKSB7XG4gICAgICBjb25zb2xlLmFzc2VydChBcnJheS5pc0FycmF5KHRoaXMucG9zKSk7XG4gICAgICBjb25zb2xlLmFzc2VydChBcnJheS5pc0FycmF5KHRoaXMubGFzdHMpKTtcbiAgICAgIGNvbnNvbGUuYXNzZXJ0KDEgPT09IHRoaXMucG9zLmxlbmd0aCk7XG4gICAgICBjb25zb2xlLmFzc2VydCgxID09PSB0aGlzLmxhc3RzLmxlbmd0aCk7XG4gICAgICBjb25zb2xlLmFzc2VydCgxID09PSB0aGlzLmxhc3RzWzBdLmxlbmd0aCk7XG4gICAgICByZXR1cm4gdGhpcy5sYXN0c1swXVswXTtcbiAgICB9LFxuICAgICdwb3NpdGlvbic6IGZ1bmN0aW9uIHBvc2l0aW9uKCkge1xuICAgICAgY29uc29sZS5hc3NlcnQoQXJyYXkuaXNBcnJheSh0aGlzLnBvcykpO1xuICAgICAgY29uc29sZS5hc3NlcnQoQXJyYXkuaXNBcnJheSh0aGlzLmxhc3RzKSk7XG4gICAgICBjb25zb2xlLmFzc2VydCgxID09PSB0aGlzLnBvcy5sZW5ndGgpO1xuICAgICAgY29uc29sZS5hc3NlcnQoMSA9PT0gdGhpcy5sYXN0cy5sZW5ndGgpO1xuICAgICAgY29uc29sZS5hc3NlcnQoMSA9PT0gdGhpcy5wb3NbMF0ubGVuZ3RoKTtcbiAgICAgIHJldHVybiB0aGlzLnBvc1swXVswXTtcbiAgICB9LFxuICAgICdjb3VudCc6IGZ1bmN0aW9uIGNvdW50KG5vZGVTZXQpIHtcbiAgICAgIGlmICgnb2JqZWN0JyAhPT0gdHlwZW9mIG5vZGVTZXQpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uICcgKyBzdHJlYW0ucG9zaXRpb24oKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiBGdW5jdGlvbiBjb3VudChub2RlLXNldCkgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ290IHdyb25nIGFyZ3VtZW50IHR5cGU6ICcgKyBub2RlU2V0KTtcbiAgICAgIHJldHVybiBub2RlU2V0Lm5vZGVzLmxlbmd0aDtcbiAgICB9LFxuICAgICdpZCc6IGZ1bmN0aW9uIGlkKG9iamVjdCkge1xuICAgICAgdmFyIHIgPSB7bm9kZXM6IFtdfTtcbiAgICAgIHZhciBkb2MgPSB0aGlzLm5vZGVzWzBdLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5ub2Rlc1swXTtcbiAgICAgIGNvbnNvbGUuYXNzZXJ0KGRvYyk7XG4gICAgICB2YXIgaWRzO1xuICAgICAgaWYgKCdvYmplY3QnID09PSB0eXBlb2Ygb2JqZWN0KSB7XG4gICAgICAgIC8vIGZvciBub2RlLXNldHMsIG1hcCBpZCBvdmVyIGVhY2ggbm9kZSB2YWx1ZS5cbiAgICAgICAgaWRzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0Lm5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgdmFyIGlkTm9kZSA9IG9iamVjdC5ub2Rlc1tpXTtcbiAgICAgICAgICB2YXIgaWRzU3RyaW5nID0gZm4uc3RyaW5nKHtub2RlczpbaWROb2RlXX0pO1xuICAgICAgICAgIHZhciBhID0gaWRzU3RyaW5nLnNwbGl0KC9bIFxcdFxcclxcbl0rL2cpO1xuICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGlkcywgYSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpZHNTdHJpbmcgPSBmbi5zdHJpbmcob2JqZWN0KTtcbiAgICAgICAgdmFyIGEgPSBpZHNTdHJpbmcuc3BsaXQoL1sgXFx0XFxyXFxuXSsvZyk7XG4gICAgICAgIGlkcyA9IGE7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgaWQgPSBpZHNbaV07XG4gICAgICAgIGlmICgwID09PSBpZC5sZW5ndGgpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIHZhciBub2RlID0gZG9jLmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgICAgaWYgKG51bGwgIT0gbm9kZSlcbiAgICAgICAgICByLm5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgICByLm5vZGVzID0gc29ydFVuaXFEb2N1bWVudE9yZGVyKHIubm9kZXMpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSxcbiAgICAnbG9jYWwtbmFtZSc6IGZ1bmN0aW9uKG5vZGVTZXQpIHtcbiAgICAgIGlmIChudWxsID09IG5vZGVTZXQpXG4gICAgICAgIHJldHVybiBmbi5uYW1lKHRoaXMpO1xuICAgICAgaWYgKG51bGwgPT0gbm9kZVNldC5ub2Rlcykge1xuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uSU5WQUxJRF9FWFBSRVNTSU9OX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmd1bWVudCB0byBuYW1lKCkgbXVzdCBiZSBhIG5vZGUtc2V0LiBnb3QgJyArIG5vZGVTZXQpO1xuICAgICAgfVxuICAgICAgLy8gVE9ETzogbmFtZXNwYWNlZCB2ZXJzaW9uXG4gICAgICByZXR1cm4gbm9kZVNldC5ub2Rlc1swXS5sb2NhbE5hbWU7XG4gICAgfSxcbiAgICAnbmFtZXNwYWNlLXVyaSc6IGZ1bmN0aW9uKG5vZGVTZXQpIHtcbiAgICAgIC8vIFRPRE9cbiAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkIHlldCcpO1xuICAgIH0sXG4gICAgJ25hbWUnOiBmdW5jdGlvbihub2RlU2V0KSB7XG4gICAgICBpZiAobnVsbCA9PSBub2RlU2V0KVxuICAgICAgICByZXR1cm4gZm4ubmFtZSh0aGlzKTtcbiAgICAgIGlmIChudWxsID09IG5vZGVTZXQubm9kZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJndW1lbnQgdG8gbmFtZSgpIG11c3QgYmUgYSBub2RlLXNldC4gZ290ICcgKyBub2RlU2V0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlU2V0Lm5vZGVzWzBdLm5hbWU7XG4gICAgfSxcbiAgICAnY29uY2F0JzogZnVuY3Rpb24gY29uY2F0KHgpIHtcbiAgICAgIHZhciBsID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBsLnB1c2goZm4uc3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGwuam9pbignJyk7XG4gICAgfSxcbiAgICAnc3RhcnRzLXdpdGgnOiBmdW5jdGlvbiBzdGFydHNXaXRoKGEsIGIpIHtcbiAgICAgIHZhciBhcyA9IGZuLnN0cmluZyhhKSwgYnMgPSBmbi5zdHJpbmcoYik7XG4gICAgICByZXR1cm4gYXMuc3Vic3RyKDAsIGJzLmxlbmd0aCkgPT09IGJzO1xuICAgIH0sXG4gICAgJ2NvbnRhaW5zJzogZnVuY3Rpb24gY29udGFpbnMoYSwgYikge1xuICAgICAgdmFyIGFzID0gZm4uc3RyaW5nKGEpLCBicyA9IGZuLnN0cmluZyhiKTtcbiAgICAgIHZhciBpID0gYXMuaW5kZXhPZihicyk7XG4gICAgICBpZiAoLTEgPT09IGkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgJ3N1YnN0cmluZy1iZWZvcmUnOiBmdW5jdGlvbiBzdWJzdHJpbmdCZWZvcmUoYSwgYikge1xuICAgICAgdmFyIGFzID0gZm4uc3RyaW5nKGEpLCBicyA9IGZuLnN0cmluZyhiKTtcbiAgICAgIHZhciBpID0gYXMuaW5kZXhPZihicyk7XG4gICAgICBpZiAoLTEgPT09IGkpIHJldHVybiAnJztcbiAgICAgIHJldHVybiBhcy5zdWJzdHIoMCwgaSk7XG4gICAgfSxcbiAgICAnc3Vic3RyaW5nLWFmdGVyJzogZnVuY3Rpb24gc3Vic3RyaW5nQmVmb3JlKGEsIGIpIHtcbiAgICAgIHZhciBhcyA9IGZuLnN0cmluZyhhKSwgYnMgPSBmbi5zdHJpbmcoYik7XG4gICAgICB2YXIgaSA9IGFzLmluZGV4T2YoYnMpO1xuICAgICAgaWYgKC0xID09PSBpKSByZXR1cm4gJyc7XG4gICAgICByZXR1cm4gYXMuc3Vic3RyKGkgKyBicy5sZW5ndGgpO1xuICAgIH0sXG4gICAgJ3N1YnN0cmluZyc6IGZ1bmN0aW9uIHN1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBvcHRFbmQpIHtcbiAgICAgIGlmIChudWxsID09IHN0cmluZyB8fCBudWxsID09IHN0YXJ0KSB7XG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011c3QgYmUgYXQgbGVhc3QgMiBhcmd1bWVudHMgdG8gc3RyaW5nKCknKTtcbiAgICAgIH1cbiAgICAgIHZhciBzU3RyaW5nID0gZm4uc3RyaW5nKHN0cmluZyksXG4gICAgICAgICAgaVN0YXJ0ID0gZm4ucm91bmQoc3RhcnQpLFxuICAgICAgICAgIGlFbmQgPSBvcHRFbmQgPT0gbnVsbCA/IG51bGwgOiBmbi5yb3VuZChvcHRFbmQpO1xuICAgICAgLy8gTm90ZSB0aGF0IHhwYXRoIHN0cmluZyBwb3NpdGlvbnMgdXNlciAxLWJhc2VkIGluZGV4XG4gICAgICBpZiAoaUVuZCA9PSBudWxsKVxuICAgICAgICByZXR1cm4gc1N0cmluZy5zdWJzdHIoaVN0YXJ0IC0gMSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBzU3RyaW5nLnN1YnN0cihpU3RhcnQgLSAxLCBpRW5kKTtcbiAgICB9LFxuICAgICdzdHJpbmctbGVuZ3RoJzogZnVuY3Rpb24gc3RyaW5nTGVuZ3RoKG9wdFN0cmluZykge1xuICAgICAgcmV0dXJuIGZuLnN0cmluZy5jYWxsKHRoaXMsIG9wdFN0cmluZykubGVuZ3RoO1xuICAgIH0sXG4gICAgJ25vcm1hbGl6ZS1zcGFjZSc6IGZ1bmN0aW9uIG5vcm1hbGl6ZVNwYWNlKG9wdFN0cmluZykge1xuICAgICAgdmFyIHMgPSBmbi5zdHJpbmcuY2FsbCh0aGlzLCBvcHRTdHJpbmcpO1xuICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWyBcXHRcXHJcXG5dKy9nLCAnICcpLnJlcGxhY2UoL14gfCAkL2csICcnKTtcbiAgICB9LFxuICAgICd0cmFuc2xhdGUnOiBmdW5jdGlvbiB0cmFuc2xhdGUoc3RyaW5nLCBmcm9tLCB0bykge1xuICAgICAgdmFyIHNTdHJpbmcgPSBmbi5zdHJpbmcuY2FsbCh0aGlzLCBzdHJpbmcpLFxuICAgICAgICAgIHNGcm9tID0gZm4uc3RyaW5nKGZyb20pLFxuICAgICAgICAgIHNUbyA9IGZuLnN0cmluZyh0byk7XG4gICAgICB2YXIgZWFjaENoYXJSZSA9IFtdO1xuICAgICAgdmFyIG1hcCA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzRnJvbS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgYyA9IHNGcm9tLmNoYXJBdChpKTtcbiAgICAgICAgbWFwW2NdID0gc1RvLmNoYXJBdChpKTsgIC8vIHJldHVybnMgJycgaWYgYmV5b25kIGxlbmd0aCBvZiBzVG8uXG4gICAgICAgIC8vIGNvcGllZCBmcm9tIGdvb2cuc3RyaW5nLnJlZ0V4cEVzY2FwZSBpbiB0aGUgQ2xvc3VyZSBsaWJyYXJ5LlxuICAgICAgICBlYWNoQ2hhclJlLnB1c2goXG4gICAgICAgICAgYy5yZXBsYWNlKC8oWy0oKVxcW1xcXXt9Kz8qLiRcXF58LDojPCFcXFxcXSkvZywgJ1xcXFwkMScpLlxuICAgICAgICAgICAgcmVwbGFjZSgvXFx4MDgvZywgJ1xcXFx4MDgnKSk7XG4gICAgICB9XG4gICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKGVhY2hDaGFyUmUuam9pbignfCcpLCAnZycpO1xuICAgICAgcmV0dXJuIHNTdHJpbmcucmVwbGFjZShyZSwgZnVuY3Rpb24oYykge3JldHVybiBtYXBbY107fSk7XG4gICAgfSxcbiAgICAvLy8gQm9vbGVhbiBmdW5jdGlvbnNcbiAgICAnbm90JzogZnVuY3Rpb24gbm90KHgpIHtcbiAgICAgIHZhciBieCA9IGZuWydib29sZWFuJ10oeCk7XG4gICAgICByZXR1cm4gIWJ4O1xuICAgIH0sXG4gICAgJ3RydWUnOiBmdW5jdGlvbiB0cnVlVmFsKCkgeyByZXR1cm4gdHJ1ZTsgfSxcbiAgICAnZmFsc2UnOiBmdW5jdGlvbiBmYWxzZVZhbCgpIHsgcmV0dXJuIGZhbHNlOyB9LFxuICAgIC8vIFRPRE9cbiAgICAnbGFuZyc6IGZ1bmN0aW9uIGxhbmcoc3RyaW5nKSB7IHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxcbiAgICAnc3VtJzogZnVuY3Rpb24gc3VtKG9wdE5vZGVTZXQpIHtcbiAgICAgIGlmIChudWxsID09IG9wdE5vZGVTZXQpIHJldHVybiBmbi5zdW0odGhpcyk7XG4gICAgICAvLyBmb3Igbm9kZS1zZXRzLCBtYXAgaWQgb3ZlciBlYWNoIG5vZGUgdmFsdWUuXG4gICAgICB2YXIgc3VtID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0Tm9kZVNldC5ub2Rlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgbm9kZSA9IG9wdE5vZGVTZXQubm9kZXNbaV07XG4gICAgICAgIHZhciB4ID0gZm4ubnVtYmVyKHtub2Rlczpbbm9kZV19KTtcbiAgICAgICAgc3VtICs9IHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH0sXG4gICAgJ2Zsb29yJzogZnVuY3Rpb24gZmxvb3IobnVtYmVyKSB7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihmbi5udW1iZXIobnVtYmVyKSk7XG4gICAgfSxcbiAgICAnY2VpbGluZyc6IGZ1bmN0aW9uIGNlaWxpbmcobnVtYmVyKSB7XG4gICAgICByZXR1cm4gTWF0aC5jZWlsKGZuLm51bWJlcihudW1iZXIpKTtcbiAgICB9LFxuICAgICdyb3VuZCc6IGZ1bmN0aW9uIHJvdW5kKG51bWJlcikge1xuICAgICAgcmV0dXJuIE1hdGgucm91bmQoZm4ubnVtYmVyKG51bWJlcikpO1xuICAgIH1cbiAgfTtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBFdmFsdWF0aW9uOiBvcGVyYXRvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gIHZhciBtb3JlID0ge1xuICAgIFVuYXJ5TWludXM6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIC1mbi5udW1iZXIoeCk7IH0sXG4gICAgJysnOiBmdW5jdGlvbih4LCB5KSB7IHJldHVybiBmbi5udW1iZXIoeCkgKyBmbi5udW1iZXIoeSk7IH0sXG4gICAgJy0nOiBmdW5jdGlvbih4LCB5KSB7IHJldHVybiBmbi5udW1iZXIoeCkgLSBmbi5udW1iZXIoeSk7IH0sXG4gICAgJyonOiBmdW5jdGlvbih4LCB5KSB7IHJldHVybiBmbi5udW1iZXIoeCkgKiBmbi5udW1iZXIoeSk7IH0sXG4gICAgJ2Rpdic6IGZ1bmN0aW9uKHgsIHkpIHsgcmV0dXJuIGZuLm51bWJlcih4KSAvIGZuLm51bWJlcih5KTsgfSxcbiAgICAnbW9kJzogZnVuY3Rpb24oeCwgeSkgeyByZXR1cm4gZm4ubnVtYmVyKHgpICUgZm4ubnVtYmVyKHkpOyB9LFxuICAgICc8JzogZnVuY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmlzb25IZWxwZXIoZnVuY3Rpb24oeCwgeSkgeyByZXR1cm4gZm4ubnVtYmVyKHgpIDwgZm4ubnVtYmVyKHkpO30sIHgsIHksIHRydWUpO1xuICAgIH0sXG4gICAgJzw9JzogZnVuY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmlzb25IZWxwZXIoZnVuY3Rpb24oeCwgeSkgeyByZXR1cm4gZm4ubnVtYmVyKHgpIDw9IGZuLm51bWJlcih5KTt9LCB4LCB5LCB0cnVlKTtcbiAgICB9LFxuICAgICc+JzogIGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiBjb21wYXJpc29uSGVscGVyKGZ1bmN0aW9uKHgsIHkpIHsgcmV0dXJuIGZuLm51bWJlcih4KSA+IGZuLm51bWJlcih5KTt9LCB4LCB5LCB0cnVlKTtcbiAgICB9LFxuICAgICc+PSc6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiBjb21wYXJpc29uSGVscGVyKGZ1bmN0aW9uKHgsIHkpIHsgcmV0dXJuIGZuLm51bWJlcih4KSA+PSBmbi5udW1iZXIoeSk7fSwgeCwgeSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW5kJzogZnVuY3Rpb24oeCwgeSkgeyByZXR1cm4gZm5bJ2Jvb2xlYW4nXSh4KSAmJiBmblsnYm9vbGVhbiddKHkpOyB9LFxuICAgICdvcic6IGZ1bmN0aW9uKHgsIHkpIHsgcmV0dXJuIGZuWydib29sZWFuJ10oeCkgfHwgZm5bJ2Jvb2xlYW4nXSh5KTsgfSxcbiAgICAnfCc6IGZ1bmN0aW9uKHgsIHkpIHsgcmV0dXJuIHtub2RlczogbWVyZ2VOb2RlTGlzdHMoeC5ub2RlcywgeS5ub2Rlcyl9OyB9LFxuICAgICc9JzogZnVuY3Rpb24oeCwgeSkge1xuICAgICAgLy8gb3B0aW1pemF0aW9uIGZvciB0d28gbm9kZS1zZXRzIGNhc2U6IGF2b2lkIG5eMiBjb21wYXJpc29ucy5cbiAgICAgIGlmICgnb2JqZWN0JyA9PT0gdHlwZW9mIHggJiYgJ29iamVjdCcgPT09IHR5cGVvZiB5KSB7XG4gICAgICAgIHZhciBhTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeC5ub2Rlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHZhciBzID0gZm4uc3RyaW5nKHtub2RlczpbeC5ub2Rlc1tpXV19KTtcbiAgICAgICAgICBhTWFwW3NdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHkubm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICB2YXIgcyA9IGZuLnN0cmluZyh7bm9kZXM6W3kubm9kZXNbaV1dfSk7XG4gICAgICAgICAgaWYgKGFNYXBbc10pIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21wYXJpc29uSGVscGVyKGZ1bmN0aW9uKHgsIHkpIHtyZXR1cm4geCA9PT0geTt9LCB4LCB5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgICchPSc6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIC8vIG9wdGltaXphdGlvbiBmb3IgdHdvIG5vZGUtc2V0cyBjYXNlOiBhdm9pZCBuXjIgY29tcGFyaXNvbnMuXG4gICAgICBpZiAoJ29iamVjdCcgPT09IHR5cGVvZiB4ICYmICdvYmplY3QnID09PSB0eXBlb2YgeSkge1xuICAgICAgICBpZiAoMCA9PT0geC5ub2Rlcy5sZW5ndGggfHwgMCA9PT0geS5ub2Rlcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGFNYXAgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lm5vZGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgdmFyIHMgPSBmbi5zdHJpbmcoe25vZGVzOlt4Lm5vZGVzW2ldXX0pO1xuICAgICAgICAgIGFNYXBbc10gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeS5ub2Rlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHZhciBzID0gZm4uc3RyaW5nKHtub2RlczpbeS5ub2Rlc1tpXV19KTtcbiAgICAgICAgICBpZiAoIWFNYXBbc10pIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21wYXJpc29uSGVscGVyKGZ1bmN0aW9uKHgsIHkpIHtyZXR1cm4geCAhPT0geTt9LCB4LCB5KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciBub2RlVHlwZXMgPSB4cGF0aC5ub2RlVHlwZXMgPSB7XG4gICAgJ25vZGUnOiAwLFxuICAgICdhdHRyaWJ1dGUnOiAyLFxuICAgICdjb21tZW50JzogOCwgLy8gdGhpcy5kb2MuQ09NTUVOVF9OT0RFLFxuICAgICd0ZXh0JzogMywgLy8gdGhpcy5kb2MuVEVYVF9OT0RFLFxuICAgICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJzogNywgLy8gdGhpcy5kb2MuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFLFxuICAgICdlbGVtZW50JzogMSAgLy90aGlzLmRvYy5FTEVNRU5UX05PREVcbiAgfTtcbiAgLyoqIEZvciBkZWJ1Z2dpbmcgYW5kIHVuaXQgdGVzdHM6IHJldHVybmpzIGEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGVcbiAgICogYXJndW1lbnQuICovXG4gIHZhciBzdHJpbmdpZnlPYmplY3QgPSB4cGF0aC5zdHJpbmdpZnlPYmplY3QgPSBmdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QoY3R4KSB7XG4gICAgdmFyIHNlZW5LZXkgPSAnc2VlbicgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTAwMDAwMDAwMCk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGhlbHBlcihjdHgpKTtcblxuICAgIGZ1bmN0aW9uIGhlbHBlcihjdHgpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGN0eCkpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5tYXAoZnVuY3Rpb24oeCkge3JldHVybiBoZWxwZXIoeCk7fSk7XG4gICAgICB9XG4gICAgICBpZiAoJ29iamVjdCcgIT09IHR5cGVvZiBjdHgpIHJldHVybiBjdHg7XG4gICAgICBpZiAobnVsbCA9PSBjdHgpIHJldHVybiBjdHg7XG4gICAgLy8gIGlmIChjdHgudG9TdHJpbmcpIHJldHVybiBjdHgudG9TdHJpbmcoKTtcbiAgICAgIGlmIChudWxsICE9IGN0eC5vdXRlckhUTUwpIHJldHVybiBjdHgub3V0ZXJIVE1MO1xuICAgICAgaWYgKG51bGwgIT0gY3R4Lm5vZGVWYWx1ZSkgcmV0dXJuIGN0eC5ub2RlTmFtZSArICc9JyArIGN0eC5ub2RlVmFsdWU7XG4gICAgICBpZiAoY3R4W3NlZW5LZXldKSByZXR1cm4gJ1tjaXJjdWxhcl0nO1xuICAgICAgY3R4W3NlZW5LZXldID0gdHJ1ZTtcbiAgICAgIHZhciBuaWNlciA9IHt9O1xuICAgICAgZm9yICh2YXIga2V5IGluIGN0eCkge1xuICAgICAgICBpZiAoc2VlbktleSA9PT0ga2V5KVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG5pY2VyW2tleV0gPSBoZWxwZXIoY3R4W2tleV0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbmljZXJba2V5XSA9ICdbZXhjZXB0aW9uOiAnICsgZS5tZXNzYWdlICsgJ10nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWxldGUgY3R4W3NlZW5LZXldO1xuICAgICAgcmV0dXJuIG5pY2VyO1xuICAgIH1cbiAgfVxuICB2YXIgRXZhbHVhdG9yID0geHBhdGguRXZhbHVhdG9yID0gZnVuY3Rpb24gRXZhbHVhdG9yKGRvYykge1xuICAgIHRoaXMuZG9jID0gZG9jO1xuICB9XG4gIEV2YWx1YXRvci5wcm90b3R5cGUgPSB7XG4gICAgdmFsOiBmdW5jdGlvbiB2YWwoYXN0LCBjdHgpIHtcbiAgICAgIGNvbnNvbGUuYXNzZXJ0KGN0eC5ub2Rlcyk7XG5cbiAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIGFzdCB8fCAnc3RyaW5nJyA9PT0gdHlwZW9mIGFzdCkgcmV0dXJuIGFzdDtcbiAgICAgIGlmIChtb3JlW2FzdFswXV0pIHtcbiAgICAgICAgdmFyIGV2YWx1YXRlZFBhcmFtcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGV2YWx1YXRlZFBhcmFtcy5wdXNoKHRoaXMudmFsKGFzdFtpXSwgY3R4KSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHIgPSBtb3JlW2FzdFswXV0uYXBwbHkoY3R4LCBldmFsdWF0ZWRQYXJhbXMpO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoYXN0WzBdKSB7XG4gICAgICAgIGNhc2UgJ1Jvb3QnOiByZXR1cm4ge25vZGVzOiBbdGhpcy5kb2NdfTtcbiAgICAgICAgY2FzZSAnRnVuY3Rpb25DYWxsJzpcbiAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gYXN0WzFdLCBmdW5jdGlvblBhcmFtcyA9IGFzdFsyXTtcbiAgICAgICAgICBpZiAobnVsbCA9PSBmbltmdW5jdGlvbk5hbWVdKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLklOVkFMSURfRVhQUkVTU0lPTl9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Vua25vd24gZnVuY3Rpb246ICcgKyBmdW5jdGlvbk5hbWUpO1xuICAgICAgICAgIHZhciBldmFsdWF0ZWRQYXJhbXMgPSBbXTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmN0aW9uUGFyYW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBldmFsdWF0ZWRQYXJhbXMucHVzaCh0aGlzLnZhbChmdW5jdGlvblBhcmFtc1tpXSwgY3R4KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciByID0gZm5bZnVuY3Rpb25OYW1lXS5hcHBseShjdHgsIGV2YWx1YXRlZFBhcmFtcyk7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIGNhc2UgJ1ByZWRpY2F0ZSc6XG4gICAgICAgICAgdmFyIGxocyA9IHRoaXMudmFsKGFzdFsxXSwgY3R4KTtcbiAgICAgICAgICB2YXIgcmV0ID0ge25vZGVzOiBbXX07XG4gICAgICAgICAgdmFyIGNvbnRleHRzID0gZWFjaENvbnRleHQobGhzKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRleHRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB2YXIgc2luZ2xlTm9kZVNldCA9IGNvbnRleHRzW2ldO1xuICAgICAgICAgICAgdmFyIHJocyA9IHRoaXMudmFsKGFzdFsyXSwgc2luZ2xlTm9kZVNldCk7XG4gICAgICAgICAgICB2YXIgc3VjY2VzcztcbiAgICAgICAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIHJocykge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gcmhzID09PSBzaW5nbGVOb2RlU2V0LnBvc1swXVswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmblsnYm9vbGVhbiddKHJocyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICB2YXIgbm9kZSA9IHNpbmdsZU5vZGVTZXQubm9kZXNbMF07XG4gICAgICAgICAgICAgIHJldC5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAvLyBza2lwIG92ZXIgYWxsIHRoZSByZXN0IG9mIHRoZSBzYW1lIG5vZGUuXG4gICAgICAgICAgICAgIHdoaWxlIChpKzEgPCBjb250ZXh0cy5sZW5ndGggJiYgbm9kZSA9PT0gY29udGV4dHNbaSsxXS5ub2Rlc1swXSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICBjYXNlICdQYXRoRXhwcic6XG4gICAgICAgICAgLy8gdHVybiB0aGUgcGF0aCBpbnRvIGFuIGV4cHJlc3NvaW47IGkuZS4sIHJlbW92ZSB0aGUgcG9zaXRpb25cbiAgICAgICAgICAvLyBpbmZvcm1hdGlvbiBvZiB0aGUgbGFzdCBheGlzLlxuICAgICAgICAgIHZhciB4ID0gdGhpcy52YWwoYXN0WzFdLCBjdHgpO1xuICAgICAgICAgIC8vIE1ha2UgdGhlIG5vZGVzZXQgYSBmb3J3YXJkLWRpcmVjdGlvbi1vbmx5IG9uZS5cbiAgICAgICAgICBpZiAoeC5maW5hbGl6ZSkgeyAgLy8gaXQgaXMgYSBOb2RlTXVsdGlTZXRcbiAgICAgICAgICAgIHJldHVybiB7bm9kZXM6IHgubm9kZXN9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJy8nOlxuICAgICAgICAgIC8vIFRPRE86IGRvbid0IGdlbmVyYXRlICcvJyBub2RlcywganVzdCBBeGlzIG5vZGVzLlxuICAgICAgICAgIHZhciBsaHMgPSB0aGlzLnZhbChhc3RbMV0sIGN0eCk7XG4gICAgICAgICAgY29uc29sZS5hc3NlcnQobnVsbCAhPSBsaHMpO1xuICAgICAgICAgIHZhciByID0gdGhpcy52YWwoYXN0WzJdLCBsaHMpO1xuICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG51bGwgIT0gcik7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIGNhc2UgJ0F4aXMnOlxuICAgICAgICAgIC8vIEFsbCB0aGUgYXhpcyB0ZXN0cyBmcm9tIFN0ZXAuIFdlIG9ubHkgZ2V0IEF4aXNTcGVjaWZpZXIgTm9kZVRlc3QsXG4gICAgICAgICAgLy8gbm90IHRoZSBwcmVkaWNhdGUgKHdoaWNoIGlzIGFwcGxpZWQgbGF0ZXIpXG4gICAgICAgICAgdmFyIGF4aXMgPSBhc3RbMV0sXG4gICAgICAgICAgICAgIG5vZGVUeXBlID0gYXN0WzJdLFxuICAgICAgICAgICAgICBub2RlVHlwZU51bSA9IG5vZGVUeXBlc1tub2RlVHlwZV0sXG4gICAgICAgICAgICAgIHNob3VsZExvd2VyQ2FzZSA9IHRydWUsICAvLyBUT0RPOiBnaXZlIG9wdGlvblxuICAgICAgICAgICAgICBub2RlTmFtZSA9IGFzdFszXSAmJiBzaG91bGRMb3dlckNhc2UgPyBhc3RbM10udG9Mb3dlckNhc2UoKSA6IGFzdFszXTtcbiAgICAgICAgICBub2RlTmFtZSA9IG5vZGVOYW1lID09PSAnKicgPyBudWxsIDogbm9kZU5hbWU7XG4gICAgICAgICAgaWYgKCdvYmplY3QnICE9PSB0eXBlb2YgY3R4KSByZXR1cm4ge25vZGVzOltdLCBwb3M6W119O1xuICAgICAgICAgIHZhciBub2RlTGlzdCA9IGN0eC5ub2Rlcy5zbGljZSgpOyAgLy8gVE9ETzogaXMgY29weSBuZWVkZWQ/XG4gICAgICAgICAgdmFyIHIgPSBheGVzW2F4aXNdKG5vZGVMaXN0ICAvKmRlc3RydWN0aXZlISovLCBub2RlVHlwZU51bSwgbm9kZU5hbWUsIHNob3VsZExvd2VyQ2FzZSk7XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICB2YXIgZXZhbHVhdGUgPSB4cGF0aC5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlKGV4cHIsIGRvYywgY29udGV4dCkge1xuICAgIC8vdmFyIGFzdEZhY3RvcnkgPSBuZXcgQXN0RXZhbHVhdG9yRmFjdG9yeShkb2MsIGNvbnRleHQpO1xuICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyZWFtKGV4cHIpO1xuICAgIHZhciBhc3QgPSBwYXJzZShzdHJlYW0sIGFzdEZhY3RvcnkpO1xuICAgIHZhciB2YWwgPSBuZXcgRXZhbHVhdG9yKGRvYykudmFsKGFzdCwge25vZGVzOiBbY29udGV4dF19KTtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERPTSBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gIHZhciBYUGF0aEV4Y2VwdGlvbiA9IHhwYXRoLlhQYXRoRXhjZXB0aW9uID0gZnVuY3Rpb24gWFBhdGhFeGNlcHRpb24oY29kZSwgbWVzc2FnZSkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIGUubmFtZSA9ICdYUGF0aEV4Y2VwdGlvbic7XG4gICAgZS5jb2RlID0gY29kZTtcbiAgICByZXR1cm4gZTtcbiAgfVxuICBYUGF0aEV4Y2VwdGlvbi5JTlZBTElEX0VYUFJFU1NJT05fRVJSID0gNTE7XG4gIFhQYXRoRXhjZXB0aW9uLlRZUEVfRVJSID0gNTI7XG5cblxuICB2YXIgWFBhdGhFdmFsdWF0b3IgPSB4cGF0aC5YUGF0aEV2YWx1YXRvciA9IGZ1bmN0aW9uIFhQYXRoRXZhbHVhdG9yKCkge31cbiAgWFBhdGhFdmFsdWF0b3IucHJvdG90eXBlID0ge1xuICAgIGNyZWF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uKGV4cHJlc3Npb24sIHJlc29sdmVyKSB7XG4gICAgICByZXR1cm4gbmV3IFhQYXRoRXhwcmVzc2lvbihleHByZXNzaW9uLCByZXNvbHZlcik7XG4gICAgfSxcbiAgICBjcmVhdGVOU1Jlc29sdmVyOiBmdW5jdGlvbihub2RlUmVzb2x2ZXIpIHtcbiAgICAgIC8vIFRPRE9cbiAgICB9LFxuICAgIGV2YWx1YXRlOiBmdW5jdGlvbiBldmFsdWF0ZShleHByZXNzaW9uLCBjb250ZXh0Tm9kZSwgcmVzb2x2ZXIsIHR5cGUsIHJlc3VsdCkge1xuICAgICAgdmFyIGV4cHIgPSBuZXcgWFBhdGhFeHByZXNzaW9uKGV4cHJlc3Npb24sIHJlc29sdmVyKTtcbiAgICAgIHJldHVybiBleHByLmV2YWx1YXRlKGNvbnRleHROb2RlLCB0eXBlLCByZXN1bHQpO1xuICAgIH1cbiAgfTtcblxuXG4gIHZhciBYUGF0aEV4cHJlc3Npb24gPSB4cGF0aC5YUGF0aEV4cHJlc3Npb24gPSBmdW5jdGlvbiBYUGF0aEV4cHJlc3Npb24oZXhwcmVzc2lvbiwgcmVzb2x2ZXIsIG9wdERvYykge1xuICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyZWFtKGV4cHJlc3Npb24pO1xuICAgIHRoaXMuX2FzdCA9IHBhcnNlKHN0cmVhbSwgYXN0RmFjdG9yeSk7XG4gICAgdGhpcy5fZG9jID0gb3B0RG9jO1xuICB9XG4gIFhQYXRoRXhwcmVzc2lvbi5wcm90b3R5cGUgPSB7XG4gICAgZXZhbHVhdGU6IGZ1bmN0aW9uIGV2YWx1YXRlKGNvbnRleHROb2RlLCB0eXBlLCByZXN1bHQpIHtcbiAgICAgIGlmIChudWxsID09IGNvbnRleHROb2RlLm5vZGVUeXBlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBhcmd1bWVudCAoZXhwZWN0ZWQgY29udGV4dCBub2RlKTogJyArIGNvbnRleHROb2RlKTtcbiAgICAgIHZhciBkb2MgPSBjb250ZXh0Tm9kZS5vd25lckRvY3VtZW50IHx8IGNvbnRleHROb2RlO1xuICAgICAgaWYgKG51bGwgIT0gdGhpcy5fZG9jICYmIHRoaXMuX2RvYyAhPT0gZG9jKSB7XG4gICAgICAgIHRocm93IG5ldyBjb3JlLkRPTUV4Y2VwdGlvbihcbiAgICAgICAgICAgIGNvcmUuRE9NRXhjZXB0aW9uLldST05HX0RPQ1VNRU5UX0VSUixcbiAgICAgICAgICAgICdUaGUgZG9jdW1lbnQgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgY29udGV4dCBub2RlXFwncyBkb2N1bWVudC4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBldmFsdWF0b3IgPSBuZXcgRXZhbHVhdG9yKGRvYyk7XG4gICAgICB2YXIgdmFsdWUgPSBldmFsdWF0b3IudmFsKHRoaXMuX2FzdCwge25vZGVzOiBbY29udGV4dE5vZGVdfSk7XG4gICAgICBpZiAoWFBhdGhSZXN1bHQuTlVNQkVSX1RZUEUgPT09IHR5cGUpXG4gICAgICAgIHZhbHVlID0gZm4ubnVtYmVyKHZhbHVlKTtcbiAgICAgIGVsc2UgaWYgKFhQYXRoUmVzdWx0LlNUUklOR19UWVBFID09PSB0eXBlKVxuICAgICAgICB2YWx1ZSA9IGZuLnN0cmluZyh2YWx1ZSk7XG4gICAgICBlbHNlIGlmIChYUGF0aFJlc3VsdC5CT09MRUFOX1RZUEUgPT09IHR5cGUpXG4gICAgICAgIHZhbHVlID0gZm5bJ2Jvb2xlYW4nXSh2YWx1ZSk7XG4gICAgICBlbHNlIGlmIChYUGF0aFJlc3VsdC5BTllfVFlQRSAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQuVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0LlVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgICBYUGF0aFJlc3VsdC5BTllfVU5PUkRFUkVEX05PREVfVFlQRSAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgWFBhdGhSZXN1bHQuRklSU1RfT1JERVJFRF9OT0RFX1RZUEUgIT09IHR5cGUpXG4gICAgICAgIHRocm93IG5ldyBjb3JlLkRPTUV4Y2VwdGlvbihcbiAgICAgICAgICAgIGNvcmUuRE9NRXhjZXB0aW9uLk5PVF9TVVBQT1JURURfRVJSLFxuICAgICAgICAgICAgJ1lvdSBtdXN0IHByb3ZpZGUgYW4gWFBhdGggcmVzdWx0IHR5cGUgKDA9YW55KS4nKTtcbiAgICAgIGVsc2UgaWYgKFhQYXRoUmVzdWx0LkFOWV9UWVBFICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgICAnb2JqZWN0JyAhPT0gdHlwZW9mIHZhbHVlKVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oXG4gICAgICAgICAgICBYUGF0aEV4Y2VwdGlvbi5UWVBFX0VSUixcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBub2RlLXNldDogJyArIHZhbHVlKTtcbiAgICAgIHJldHVybiBuZXcgWFBhdGhSZXN1bHQoZG9jLCB2YWx1ZSwgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIFhQYXRoUmVzdWx0ID0geHBhdGguWFBhdGhSZXN1bHQgPSBmdW5jdGlvbiBYUGF0aFJlc3VsdChkb2MsIHZhbHVlLCByZXN1bHRUeXBlKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl9yZXN1bHRUeXBlID0gcmVzdWx0VHlwZTtcbiAgICB0aGlzLl9pID0gMDtcblxuICAgIC8vIFRPRE86IHdlIHJlbW92ZWQgbXV0YXRpb24gZXZlbnRzIGJ1dCBkaWRuJ3QgdGFrZSBjYXJlIG9mIHRoaXMuIE5vIHRlc3RzIGZhaWwsIHNvIHRoYXQncyBuaWNlLCBidXQgZXZlbnR1YWxseSB3ZVxuICAgIC8vIHNob3VsZCBmaXggdGhpcywgcHJlZmVyYWJseSBieSBlbnRpcmVseSByZXBsYWNpbmcgb3VyIFhQYXRoIGltcGxlbWVudGF0aW9uLlxuICAgIC8vIHRoaXMuX2ludmFsaWRhdGVkID0gZmFsc2U7XG4gICAgLy8gaWYgKHRoaXMucmVzdWx0VHlwZSA9PT0gWFBhdGhSZXN1bHQuVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSB8fFxuICAgIC8vICAgICB0aGlzLnJlc3VsdFR5cGUgPT09IFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFKSB7XG4gICAgLy8gICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignRE9NU3VidHJlZU1vZGlmaWVkJywgaW52YWxpZGF0ZSwgdHJ1ZSk7XG4gICAgLy8gICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy8gICBmdW5jdGlvbiBpbnZhbGlkYXRlKCkge1xuICAgIC8vICAgICBzZWxmLl9pbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgLy8gICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdET01TdWJ0cmVlTW9kaWZpZWQnLCBpbnZhbGlkYXRlLCB0cnVlKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gIH1cbiAgWFBhdGhSZXN1bHQuQU5ZX1RZUEUgPSAwO1xuICBYUGF0aFJlc3VsdC5OVU1CRVJfVFlQRSA9IDE7XG4gIFhQYXRoUmVzdWx0LlNUUklOR19UWVBFID0gMjtcbiAgWFBhdGhSZXN1bHQuQk9PTEVBTl9UWVBFID0gMztcbiAgWFBhdGhSZXN1bHQuVU5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSA9IDQ7XG4gIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFID0gNTtcbiAgWFBhdGhSZXN1bHQuVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSA9IDY7XG4gIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFID0gNztcbiAgWFBhdGhSZXN1bHQuQU5ZX1VOT1JERVJFRF9OT0RFX1RZUEUgPSA4O1xuICBYUGF0aFJlc3VsdC5GSVJTVF9PUkRFUkVEX05PREVfVFlQRSA9IDk7XG4gIHZhciBwcm90byA9IHtcbiAgICAvLyBYUGF0aFJlc3VsdFR5cGVcbiAgICBnZXQgcmVzdWx0VHlwZSgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXN1bHRUeXBlKSByZXR1cm4gdGhpcy5fcmVzdWx0VHlwZTtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHRoaXMuX3ZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ251bWJlcic6IHJldHVybiBYUGF0aFJlc3VsdC5OVU1CRVJfVFlQRTtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuIFhQYXRoUmVzdWx0LlNUUklOR19UWVBFO1xuICAgICAgICBjYXNlICdib29sZWFuJzogcmV0dXJuIFhQYXRoUmVzdWx0LkJPT0xFQU5fVFlQRTtcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIFhQYXRoUmVzdWx0LlVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEU7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXQgbnVtYmVyVmFsdWUoKSB7XG4gICAgICBpZiAoWFBhdGhSZXN1bHQuTlVNQkVSX1RZUEUgIT09IHRoaXMucmVzdWx0VHlwZSlcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLlRZUEVfRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1lvdSBzaG91bGQgaGF2ZSBhc2tlZCBmb3IgYSBOVU1CRVJfVFlQRS4nKTtcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9LFxuICAgIGdldCBzdHJpbmdWYWx1ZSgpIHtcbiAgICAgIGlmIChYUGF0aFJlc3VsdC5TVFJJTkdfVFlQRSAhPT0gdGhpcy5yZXN1bHRUeXBlKVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oWFBhdGhFeGNlcHRpb24uVFlQRV9FUlIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWW91IHNob3VsZCBoYXZlIGFza2VkIGZvciBhIFNUUklOR19UWVBFLicpO1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH0sXG4gICAgZ2V0IGJvb2xlYW5WYWx1ZSgpIHtcbiAgICAgIGlmIChYUGF0aFJlc3VsdC5CT09MRUFOX1RZUEUgIT09IHRoaXMucmVzdWx0VHlwZSlcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFhQYXRoRXhjZXB0aW9uLlRZUEVfRVJSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1lvdSBzaG91bGQgaGF2ZSBhc2tlZCBmb3IgYSBCT09MRUFOX1RZUEUuJyk7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfSxcbiAgICBnZXQgc2luZ2xlTm9kZVZhbHVlKCkge1xuICAgICAgaWYgKFhQYXRoUmVzdWx0LkFOWV9VTk9SREVSRURfTk9ERV9UWVBFICE9PSB0aGlzLnJlc3VsdFR5cGUgJiZcbiAgICAgICAgICBYUGF0aFJlc3VsdC5GSVJTVF9PUkRFUkVEX05PREVfVFlQRSAhPT0gdGhpcy5yZXN1bHRUeXBlKVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oXG4gICAgICAgICAgICBYUGF0aEV4Y2VwdGlvbi5UWVBFX0VSUixcbiAgICAgICAgICAgICdZb3Ugc2hvdWxkIGhhdmUgYXNrZWQgZm9yIGEgRklSU1RfT1JERVJFRF9OT0RFX1RZUEUuJyk7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWUubm9kZXNbMF0gfHwgbnVsbDtcbiAgICB9LFxuICAgIGdldCBpbnZhbGlkSXRlcmF0b3JTdGF0ZSgpIHtcbiAgICAgIGlmIChYUGF0aFJlc3VsdC5VTk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFICE9PSB0aGlzLnJlc3VsdFR5cGUgJiZcbiAgICAgICAgICBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRSAhPT0gdGhpcy5yZXN1bHRUeXBlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gISF0aGlzLl9pbnZhbGlkYXRlZDtcbiAgICB9LFxuICAgIGdldCBzbmFwc2hvdExlbmd0aCgpIHtcbiAgICAgIGlmIChYUGF0aFJlc3VsdC5VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFICE9PSB0aGlzLnJlc3VsdFR5cGUgJiZcbiAgICAgICAgICBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSAhPT0gdGhpcy5yZXN1bHRUeXBlKVxuICAgICAgICB0aHJvdyBuZXcgWFBhdGhFeGNlcHRpb24oXG4gICAgICAgICAgICBYUGF0aEV4Y2VwdGlvbi5UWVBFX0VSUixcbiAgICAgICAgICAgICdZb3Ugc2hvdWxkIGhhdmUgYXNrZWQgZm9yIGEgT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUuJyk7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWUubm9kZXMubGVuZ3RoO1xuICAgIH0sXG4gICAgaXRlcmF0ZU5leHQ6IGZ1bmN0aW9uIGl0ZXJhdGVOZXh0KCkge1xuICAgICAgaWYgKFhQYXRoUmVzdWx0LlVOT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUgIT09IHRoaXMucmVzdWx0VHlwZSAmJlxuICAgICAgICAgIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9JVEVSQVRPUl9UWVBFICE9PSB0aGlzLnJlc3VsdFR5cGUpXG4gICAgICAgIHRocm93IG5ldyBYUGF0aEV4Y2VwdGlvbihcbiAgICAgICAgICAgIFhQYXRoRXhjZXB0aW9uLlRZUEVfRVJSLFxuICAgICAgICAgICAgJ1lvdSBzaG91bGQgaGF2ZSBhc2tlZCBmb3IgYSBPUkRFUkVEX05PREVfSVRFUkFUT1JfVFlQRS4nKTtcbiAgICAgIGlmICh0aGlzLmludmFsaWRJdGVyYXRvclN0YXRlKVxuICAgICAgICB0aHJvdyBuZXcgY29yZS5ET01FeGNlcHRpb24oXG4gICAgICAgICAgICBjb3JlLkRPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUixcbiAgICAgICAgICAgICdUaGUgZG9jdW1lbnQgaGFzIGJlZW4gbXV0YXRlZCBzaW5jZSB0aGUgcmVzdWx0IHdhcyByZXR1cm5lZCcpO1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLm5vZGVzW3RoaXMuX2krK10gfHwgbnVsbDtcbiAgICB9LFxuICAgIHNuYXBzaG90SXRlbTogZnVuY3Rpb24gc25hcHNob3RJdGVtKGluZGV4KSB7XG4gICAgICBpZiAoWFBhdGhSZXN1bHQuVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSAhPT0gdGhpcy5yZXN1bHRUeXBlICYmXG4gICAgICAgICAgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUgIT09IHRoaXMucmVzdWx0VHlwZSlcbiAgICAgICAgdGhyb3cgbmV3IFhQYXRoRXhjZXB0aW9uKFxuICAgICAgICAgICAgWFBhdGhFeGNlcHRpb24uVFlQRV9FUlIsXG4gICAgICAgICAgICAnWW91IHNob3VsZCBoYXZlIGFza2VkIGZvciBhIE9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLicpO1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlLm5vZGVzW2luZGV4XSB8fCBudWxsO1xuICAgIH1cbiAgfTtcbiAgLy8gc28geW91IGNhbiBhY2Nlc3MgQU5ZX1RZUEUgZXRjLiBmcm9tIHRoZSBpbnN0YW5jZXM6XG4gIFhQYXRoUmVzdWx0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoWFBhdGhSZXN1bHQsXG4gICAgICBPYmplY3Qua2V5cyhwcm90bykucmVkdWNlKGZ1bmN0aW9uIChkZXNjcmlwdG9ycywgbmFtZSkge1xuICAgICAgICBkZXNjcmlwdG9yc1tuYW1lXSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIG5hbWUpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcnM7XG4gICAgICB9LCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IFhQYXRoUmVzdWx0LFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KSk7XG5cbiAgY29yZS5YUGF0aEV4Y2VwdGlvbiA9IFhQYXRoRXhjZXB0aW9uO1xuICBjb3JlLlhQYXRoRXhwcmVzc2lvbiA9IFhQYXRoRXhwcmVzc2lvbjtcbiAgY29yZS5YUGF0aFJlc3VsdCA9IFhQYXRoUmVzdWx0O1xuICBjb3JlLlhQYXRoRXZhbHVhdG9yID0gWFBhdGhFdmFsdWF0b3I7XG5cbiAgY29yZS5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRXhwcmVzc2lvbiA9XG4gICAgWFBhdGhFdmFsdWF0b3IucHJvdG90eXBlLmNyZWF0ZUV4cHJlc3Npb247XG5cbiAgY29yZS5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlTlNSZXNvbHZlciA9XG4gICAgICBYUGF0aEV2YWx1YXRvci5wcm90b3R5cGUuY3JlYXRlTlNSZXNvbHZlcjtcblxuICBjb3JlLkRvY3VtZW50LnByb3RvdHlwZS5ldmFsdWF0ZSA9IFhQYXRoRXZhbHVhdG9yLnByb3RvdHlwZS5ldmFsdWF0ZTtcblxuICByZXR1cm4geHBhdGg7IC8vIGZvciB0ZXN0c1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgZGVmaW5lR2V0dGVyID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpLmRlZmluZUdldHRlcjtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgYXR0ckdlbmVyYXRlZCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9BdHRyXCIpO1xuY29uc3QgY2hhbmdlQXR0cmlidXRlSW1wbCA9IHJlcXVpcmUoXCIuL2F0dHJpYnV0ZXMvQXR0ci1pbXBsXCIpLmNoYW5nZUF0dHJpYnV0ZUltcGw7XG5jb25zdCBnZXRBdHRySW1wbFF1YWxpZmllZE5hbWUgPSByZXF1aXJlKFwiLi9hdHRyaWJ1dGVzL0F0dHItaW1wbFwiKS5nZXRBdHRySW1wbFF1YWxpZmllZE5hbWU7XG5cbi8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jbmFtZWRub2RlbWFwXG5cbmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKFwiTmFtZWROb2RlTWFwIGludGVybmFsXCIpO1xuXG4vLyBUT0RPOiB1c2UgTmFtZWRQcm9wZXJ0eVRyYWNrZXIgd2hlbiBodHRwczovL2dpdGh1Yi5jb20vdG1wdmFyL2pzZG9tL3B1bGwvMTExNiBsYW5kcz9cblxuLy8gRG9uJ3QgZW11bGF0ZSBuYW1lZCBnZXR0ZXJzIGZvciB0aGVzZSBwcm9wZXJ0aWVzLlxuLy8gQ29tcGlsZWQgbGF0ZXIgYWZ0ZXIgTmFtZWROb2RlTWFwIGlzIGFsbCBzZXQgdXAuXG5jb25zdCByZXNlcnZlZE5hbWVzID0gbmV3IFNldCgpO1xuXG5mdW5jdGlvbiBOYW1lZE5vZGVNYXAoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5kZWZpbmVHZXR0ZXIoTmFtZWROb2RlTWFwLnByb3RvdHlwZSwgXCJsZW5ndGhcIiwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpc1tJTlRFUk5BTF0uYXR0cmlidXRlTGlzdC5sZW5ndGg7XG59KTtcblxuTmFtZWROb2RlTWFwLnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgZW5vdWdoIGFyZ3VtZW50cyB0byBOYW1lZE5vZGVNYXAucHJvdG90eXBlLml0ZW1cIik7XG4gIH1cblxuICAvLyBEb24ndCBib3RoZXIgd2l0aCBmdWxsIHVuc2lnbmVkIGxvbmcgbG9uZyBjb252ZXJzaW9uLiBXaGVuIHdlIGhhdmUgYmV0dGVyIFdlYklETCBzdXBwb3J0IGdlbmVyYWxseSwgcmV2aXNpdC5cbiAgaW5kZXggPSBOdW1iZXIoaW5kZXgpO1xuXG4gIHJldHVybiB0aGlzW2luZGV4XSB8fCBudWxsO1xufTtcblxuTmFtZWROb2RlTWFwLnByb3RvdHlwZS5nZXROYW1lZEl0ZW0gPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm90IGVub3VnaCBhcmd1bWVudHMgdG8gTmFtZWROb2RlTWFwLnByb3RvdHlwZS5nZXROYW1lZEl0ZW1cIik7XG4gIH1cbiAgbmFtZSA9IFN0cmluZyhuYW1lKTtcblxuICByZXR1cm4gaWRsVXRpbHMud3JhcHBlckZvckltcGwoZXhwb3J0cy5nZXRBdHRyaWJ1dGVCeU5hbWUodGhpc1tJTlRFUk5BTF0uZWxlbWVudCwgbmFtZSkpO1xufTtcblxuTmFtZWROb2RlTWFwLnByb3RvdHlwZS5nZXROYW1lZEl0ZW1OUyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIGxvY2FsTmFtZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm90IGVub3VnaCBhcmd1bWVudHMgdG8gTmFtZWROb2RlTWFwLnByb3RvdHlwZS5nZXROYW1lZEl0ZW1OU1wiKTtcbiAgfVxuICBpZiAobmFtZXNwYWNlID09PSB1bmRlZmluZWQgfHwgbmFtZXNwYWNlID09PSBudWxsKSB7XG4gICAgbmFtZXNwYWNlID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBuYW1lc3BhY2UgPSBTdHJpbmcobmFtZXNwYWNlKTtcbiAgfVxuICBsb2NhbE5hbWUgPSBTdHJpbmcobG9jYWxOYW1lKTtcblxuICByZXR1cm4gaWRsVXRpbHMud3JhcHBlckZvckltcGwoZXhwb3J0cy5nZXRBdHRyaWJ1dGVCeU5hbWVOUyh0aGlzW0lOVEVSTkFMXS5lbGVtZW50LCBuYW1lc3BhY2UsIGxvY2FsTmFtZSkpO1xufTtcblxuTmFtZWROb2RlTWFwLnByb3RvdHlwZS5zZXROYW1lZEl0ZW0gPSBmdW5jdGlvbiAoYXR0cikge1xuICBpZiAoIWF0dHJHZW5lcmF0ZWQuaXMoYXR0cikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgdG8gTmFtZWROb2RlTWFwLnByb3RvdHlwZS5zZXROYW1lZEl0ZW0gbXVzdCBiZSBhbiBBdHRyXCIpO1xuICB9XG5cbiAgcmV0dXJuIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGV4cG9ydHMuc2V0QXR0cmlidXRlKHRoaXNbSU5URVJOQUxdLmVsZW1lbnQsIGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKGF0dHIpKSk7XG59O1xuXG5OYW1lZE5vZGVNYXAucHJvdG90eXBlLnNldE5hbWVkSXRlbU5TID0gZnVuY3Rpb24gKGF0dHIpIHtcbiAgaWYgKCFhdHRyR2VuZXJhdGVkLmlzKGF0dHIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IHRvIE5hbWVkTm9kZU1hcC5wcm90b3R5cGUuc2V0TmFtZWRJdGVtTlMgbXVzdCBiZSBhbiBBdHRyXCIpO1xuICB9XG5cbiAgcmV0dXJuIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGV4cG9ydHMuc2V0QXR0cmlidXRlKHRoaXNbSU5URVJOQUxdLmVsZW1lbnQsIGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKGF0dHIpKSk7XG59O1xuXG5OYW1lZE5vZGVNYXAucHJvdG90eXBlLnJlbW92ZU5hbWVkSXRlbSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgZW5vdWdoIGFyZ3VtZW50cyB0byBOYW1lZE5vZGVNYXAucHJvdG90eXBlLmdldE5hbWVkSXRlbVwiKTtcbiAgfVxuICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuXG4gIGNvbnN0IGF0dHIgPSBleHBvcnRzLnJlbW92ZUF0dHJpYnV0ZUJ5TmFtZSh0aGlzW0lOVEVSTkFMXS5lbGVtZW50LCBuYW1lKTtcblxuICBpZiAoYXR0ciA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIsIFwiVHJpZWQgdG8gcmVtb3ZlIGFuIGF0dHJpYnV0ZSB0aGF0IHdhcyBub3QgcHJlc2VudFwiKTtcbiAgfVxuXG4gIHJldHVybiBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChhdHRyKTtcbn07XG5cbk5hbWVkTm9kZU1hcC5wcm90b3R5cGUucmVtb3ZlTmFtZWRJdGVtTlMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vdCBlbm91Z2ggYXJndW1lbnRzIHRvIE5hbWVkTm9kZU1hcC5wcm90b3R5cGUucmVtb3ZlTmFtZWRJdGVtTlNcIik7XG4gIH1cbiAgaWYgKG5hbWVzcGFjZSA9PT0gdW5kZWZpbmVkIHx8IG5hbWVzcGFjZSA9PT0gbnVsbCkge1xuICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgbmFtZXNwYWNlID0gU3RyaW5nKG5hbWVzcGFjZSk7XG4gIH1cbiAgbG9jYWxOYW1lID0gU3RyaW5nKGxvY2FsTmFtZSk7XG5cbiAgY29uc3QgYXR0ciA9IGV4cG9ydHMucmVtb3ZlQXR0cmlidXRlQnlOYW1lTlModGhpc1tJTlRFUk5BTF0uZWxlbWVudCwgbmFtZXNwYWNlLCBsb2NhbE5hbWUpO1xuXG4gIGlmIChhdHRyID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX0ZPVU5EX0VSUiwgXCJUcmllZCB0byByZW1vdmUgYW4gYXR0cmlidXRlIHRoYXQgd2FzIG5vdCBwcmVzZW50XCIpO1xuICB9XG5cbiAgcmV0dXJuIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGF0dHIpO1xufTtcblxuZXhwb3J0cy5OYW1lZE5vZGVNYXAgPSBOYW1lZE5vZGVNYXA7XG5cbntcbiAgbGV0IHByb3RvdHlwZSA9IE5hbWVkTm9kZU1hcC5wcm90b3R5cGU7XG4gIHdoaWxlIChwcm90b3R5cGUpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlKSkge1xuICAgICAgcmVzZXJ2ZWROYW1lcy5hZGQobmFtZSk7XG4gICAgfVxuICAgIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICB9XG59XG5cbmV4cG9ydHMuY3JlYXRlTmFtZWROb2RlTWFwID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgY29uc3Qgbm5tID0gT2JqZWN0LmNyZWF0ZShOYW1lZE5vZGVNYXAucHJvdG90eXBlKTtcbiAgbm5tW0lOVEVSTkFMXSA9IHtcbiAgICBlbGVtZW50LFxuICAgIGF0dHJpYnV0ZUxpc3Q6IFtdLFxuICAgIGF0dHJpYnV0ZXNCeU5hbWVNYXA6IG5ldyBNYXAoKVxuICB9O1xuICByZXR1cm4gbm5tO1xufTtcblxuLy8gVGhlIGZvbGxvd2luZyB0aHJlZSBhcmUgZm9yIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbGVtZW50LWF0dHJpYnV0ZS1oYXMuIFdlIGRvbid0IGp1c3QgaGF2ZSBhXG4vLyBwcmVkaWNhdGUgdGVzdGVyIHNpbmNlIHJlbW92aW5nIHRoYXQga2luZCBvZiBmbGV4aWJpbGl0eSBnaXZlcyB1cyB0aGUgcG90ZW50aWFsIGZvciBiZXR0ZXIgZnV0dXJlIG9wdGltaXphdGlvbnMuXG5cbmV4cG9ydHMuaGFzQXR0cmlidXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIEEpIHtcbiAgY29uc3QgYXR0cmlidXRlc05OTSA9IGVsZW1lbnQuX2F0dHJpYnV0ZXM7XG4gIGNvbnN0IGF0dHJpYnV0ZUxpc3QgPSBhdHRyaWJ1dGVzTk5NW0lOVEVSTkFMXS5hdHRyaWJ1dGVMaXN0O1xuXG4gIHJldHVybiBhdHRyaWJ1dGVMaXN0LmluY2x1ZGVzKEEpO1xufTtcblxuZXhwb3J0cy5oYXNBdHRyaWJ1dGVCeU5hbWUgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSkge1xuICBjb25zdCBhdHRyaWJ1dGVzTk5NID0gZWxlbWVudC5fYXR0cmlidXRlcztcbiAgY29uc3QgYXR0cmlidXRlc0J5TmFtZU1hcCA9IGF0dHJpYnV0ZXNOTk1bSU5URVJOQUxdLmF0dHJpYnV0ZXNCeU5hbWVNYXA7XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXNCeU5hbWVNYXAuaGFzKG5hbWUpO1xufTtcblxuZXhwb3J0cy5oYXNBdHRyaWJ1dGVCeU5hbWVOUyA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lc3BhY2UsIGxvY2FsTmFtZSkge1xuICBjb25zdCBhdHRyaWJ1dGVzTk5NID0gZWxlbWVudC5fYXR0cmlidXRlcztcbiAgY29uc3QgYXR0cmlidXRlTGlzdCA9IGF0dHJpYnV0ZXNOTk1bSU5URVJOQUxdLmF0dHJpYnV0ZUxpc3Q7XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZUxpc3Quc29tZShhdHRyaWJ1dGUgPT4ge1xuICAgIHJldHVybiBhdHRyaWJ1dGUuX2xvY2FsTmFtZSA9PT0gbG9jYWxOYW1lICYmIGF0dHJpYnV0ZS5fbmFtZXNwYWNlID09PSBuYW1lc3BhY2U7XG4gIH0pO1xufTtcblxuZXhwb3J0cy5jaGFuZ2VBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZWxlbWVudC1hdHRyaWJ1dGVzLWNoYW5nZVxuXG4gIC8vIFRoZSBwYXJ0aXRpb25pbmcgaGVyZSB3b3JrcyBhcm91bmQgYSBwYXJ0aWN1bGFybHkgYmFkIGNpcmN1bGFyIHJlcXVpcmUgcHJvYmxlbS4gU2VlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90bXB2YXIvanNkb20vcHVsbC8xMjQ3I2lzc3VlY29tbWVudC0xNDkwNjA0NzBcbiAgY2hhbmdlQXR0cmlidXRlSW1wbChlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKTtcbn07XG5cbmV4cG9ydHMuYXBwZW5kQXR0cmlidXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIGF0dHJpYnV0ZSkge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZWxlbWVudC1hdHRyaWJ1dGVzLWFwcGVuZFxuXG4gIGNvbnN0IGF0dHJpYnV0ZXNOTk0gPSBlbGVtZW50Ll9hdHRyaWJ1dGVzO1xuICBjb25zdCBhdHRyaWJ1dGVMaXN0ID0gYXR0cmlidXRlc05OTVtJTlRFUk5BTF0uYXR0cmlidXRlTGlzdDtcblxuICAvLyBUT0RPIG11dGF0aW9uIG9ic2VydmVyIHN0dWZmXG5cbiAgYXR0cmlidXRlTGlzdC5wdXNoKGF0dHJpYnV0ZSk7XG4gIGF0dHJpYnV0ZS5fZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgLy8gU3luYyB0YXJnZXQgaW5kZXhlZCBwcm9wZXJ0aWVzXG4gIGF0dHJpYnV0ZXNOTk1bYXR0cmlidXRlTGlzdC5sZW5ndGggLSAxXSA9IGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGF0dHJpYnV0ZSk7XG5cbiAgY29uc3QgbmFtZSA9IGdldEF0dHJJbXBsUXVhbGlmaWVkTmFtZShhdHRyaWJ1dGUpO1xuXG4gIC8vIFN5bmMgdGFyZ2V0IG5hbWVkIHByb3BlcnRpZXNcbiAgaWYgKCFyZXNlcnZlZE5hbWVzLmhhcyhuYW1lKSAmJiBzaG91bGROYW1lQmVJbk5OTVByb3BzKGVsZW1lbnQsIG5hbWUpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGF0dHJpYnV0ZXNOTk0sIG5hbWUsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogaWRsVXRpbHMud3JhcHBlckZvckltcGwoYXR0cmlidXRlKVxuICAgIH0pO1xuICB9XG5cbiAgLy8gU3luYyBuYW1lIGNhY2hlXG4gIGNvbnN0IGNhY2hlID0gYXR0cmlidXRlc05OTVtJTlRFUk5BTF0uYXR0cmlidXRlc0J5TmFtZU1hcDtcbiAgbGV0IGVudHJ5ID0gY2FjaGUuZ2V0KG5hbWUpO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgZW50cnkgPSBbXTtcbiAgICBjYWNoZS5zZXQobmFtZSwgZW50cnkpO1xuICB9XG4gIGVudHJ5LnB1c2goYXR0cmlidXRlKTtcblxuICAvLyBSdW4ganNkb20gaG9va3M7IHJvdWdobHkgY29ycmVzcG9uZCB0byBzcGVjJ3MgXCJBbiBhdHRyaWJ1dGUgaXMgc2V0IGFuZCBhbiBhdHRyaWJ1dGUgaXMgYWRkZWQuXCJcbiAgZWxlbWVudC5fYXR0ck1vZGlmaWVkKG5hbWUsIGF0dHJpYnV0ZS5fdmFsdWUsIG51bGwpO1xufTtcblxuZXhwb3J0cy5yZW1vdmVBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgYXR0cmlidXRlKSB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbGVtZW50LWF0dHJpYnV0ZXMtcmVtb3ZlXG5cbiAgY29uc3QgYXR0cmlidXRlc05OTSA9IGVsZW1lbnQuX2F0dHJpYnV0ZXM7XG4gIGNvbnN0IGF0dHJpYnV0ZUxpc3QgPSBhdHRyaWJ1dGVzTk5NW0lOVEVSTkFMXS5hdHRyaWJ1dGVMaXN0O1xuXG4gIC8vIFRPRE8gbXV0YXRpb24gb2JzZXJ2ZXIgc3R1ZmZcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoYXR0cmlidXRlTGlzdFtpXSA9PT0gYXR0cmlidXRlKSB7XG4gICAgICBhdHRyaWJ1dGVMaXN0LnNwbGljZShpLCAxKTtcbiAgICAgIGF0dHJpYnV0ZS5fZWxlbWVudCA9IG51bGw7XG5cbiAgICAgIC8vIFN5bmMgdGFyZ2V0IGluZGV4ZWQgcHJvcGVydGllc1xuICAgICAgZm9yIChsZXQgaiA9IGk7IGogPCBhdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNOTk1bal0gPSBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChhdHRyaWJ1dGVMaXN0W2pdKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBhdHRyaWJ1dGVzTk5NW2F0dHJpYnV0ZUxpc3QubGVuZ3RoXTtcblxuICAgICAgY29uc3QgbmFtZSA9IGdldEF0dHJJbXBsUXVhbGlmaWVkTmFtZShhdHRyaWJ1dGUpO1xuXG4gICAgICAvLyBTeW5jIHRhcmdldCBuYW1lZCBwcm9wZXJ0aWVzXG4gICAgICBpZiAoIXJlc2VydmVkTmFtZXMuaGFzKG5hbWUpICYmIHNob3VsZE5hbWVCZUluTk5NUHJvcHMoZWxlbWVudCwgbmFtZSkpIHtcbiAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNOTk1bbmFtZV07XG4gICAgICB9XG5cbiAgICAgIC8vIFN5bmMgbmFtZSBjYWNoZVxuICAgICAgY29uc3QgY2FjaGUgPSBhdHRyaWJ1dGVzTk5NW0lOVEVSTkFMXS5hdHRyaWJ1dGVzQnlOYW1lTWFwO1xuICAgICAgY29uc3QgZW50cnkgPSBjYWNoZS5nZXQobmFtZSk7XG4gICAgICBlbnRyeS5zcGxpY2UoZW50cnkuaW5kZXhPZihhdHRyaWJ1dGUpLCAxKTtcbiAgICAgIGlmIChlbnRyeS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2FjaGUuZGVsZXRlKG5hbWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBSdW4ganNkb20gaG9va3M7IHJvdWdobHkgY29ycmVzcG9uZCB0byBzcGVjJ3MgXCJBbiBhdHRyaWJ1dGUgaXMgcmVtb3ZlZC5cIlxuICAgICAgZWxlbWVudC5fYXR0ck1vZGlmaWVkKG5hbWUsIG51bGwsIGF0dHJpYnV0ZS5fdmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnRzLnJlcGxhY2VBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgb2xkQXR0ciwgbmV3QXR0cikge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZWxlbWVudC1hdHRyaWJ1dGVzLXJlcGxhY2VcblxuICBjb25zdCBhdHRyaWJ1dGVzTk5NID0gZWxlbWVudC5fYXR0cmlidXRlcztcbiAgY29uc3QgYXR0cmlidXRlTGlzdCA9IGF0dHJpYnV0ZXNOTk1bSU5URVJOQUxdLmF0dHJpYnV0ZUxpc3Q7XG5cbiAgLy8gVE9ETyBtdXRhdGlvbiBvYnNlcnZlciBzdHVmZlxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhdHRyaWJ1dGVMaXN0W2ldID09PSBvbGRBdHRyKSB7XG4gICAgICBhdHRyaWJ1dGVMaXN0LnNwbGljZShpLCAxLCBuZXdBdHRyKTtcbiAgICAgIG9sZEF0dHIuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgbmV3QXR0ci5fZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAgIC8vIFN5bmMgdGFyZ2V0IGluZGV4ZWQgcHJvcGVydGllc1xuICAgICAgYXR0cmlidXRlc05OTVtpXSA9IGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKG5ld0F0dHIpO1xuXG4gICAgICBjb25zdCBuYW1lID0gZ2V0QXR0ckltcGxRdWFsaWZpZWROYW1lKG5ld0F0dHIpO1xuXG4gICAgICAvLyBTeW5jIHRhcmdldCBuYW1lZCBwcm9wZXJ0aWVzXG4gICAgICBpZiAoIXJlc2VydmVkTmFtZXMuaGFzKG5hbWUpICYmIHNob3VsZE5hbWVCZUluTk5NUHJvcHMoZWxlbWVudCwgbmFtZSkpIHtcbiAgICAgICAgYXR0cmlidXRlc05OTVtuYW1lXSA9IG5ld0F0dHI7XG4gICAgICB9XG5cbiAgICAgIC8vIFN5bmMgbmFtZSBjYWNoZVxuICAgICAgY29uc3QgY2FjaGUgPSBhdHRyaWJ1dGVzTk5NW0lOVEVSTkFMXS5hdHRyaWJ1dGVzQnlOYW1lTWFwO1xuICAgICAgbGV0IGVudHJ5ID0gY2FjaGUuZ2V0KG5hbWUpO1xuICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICBlbnRyeSA9IFtdO1xuICAgICAgICBjYWNoZS5zZXQobmFtZSwgZW50cnkpO1xuICAgICAgfVxuICAgICAgZW50cnkuc3BsaWNlKGVudHJ5LmluZGV4T2Yob2xkQXR0ciksIDEsIG5ld0F0dHIpO1xuXG4gICAgICAvLyBSdW4ganNkb20gaG9va3M7IHJvdWdobHkgY29ycmVzcG9uZCB0byBzcGVjJ3MgXCJBbiBhdHRyaWJ1dGUgaXMgc2V0IGFuZCBhbiBhdHRyaWJ1dGUgaXMgY2hhbmdlZC5cIlxuICAgICAgZWxlbWVudC5fYXR0ck1vZGlmaWVkKG5hbWUsIG5ld0F0dHIuX3ZhbHVlLCBvbGRBdHRyLl92YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydHMuZ2V0QXR0cmlidXRlQnlOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUpIHtcbiAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVsZW1lbnQtYXR0cmlidXRlcy1nZXQtYnktbmFtZVxuXG4gIGlmIChlbGVtZW50Ll9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiICYmXG4gICAgICBlbGVtZW50Ll9vd25lckRvY3VtZW50Ll9wYXJzaW5nTW9kZSA9PT0gXCJodG1sXCIpIHtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgY29uc3QgY2FjaGUgPSBlbGVtZW50Ll9hdHRyaWJ1dGVzW0lOVEVSTkFMXS5hdHRyaWJ1dGVzQnlOYW1lTWFwO1xuICBjb25zdCBlbnRyeSA9IGNhY2hlLmdldChuYW1lKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVudHJ5WzBdO1xufTtcblxuZXhwb3J0cy5nZXRBdHRyaWJ1dGVWYWx1ZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lKSB7XG4gIGNvbnN0IGF0dHIgPSBleHBvcnRzLmdldEF0dHJpYnV0ZUJ5TmFtZShlbGVtZW50LCBuYW1lKTtcblxuICBpZiAoIWF0dHIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBhdHRyLl92YWx1ZTtcbn07XG5cbmV4cG9ydHMuZ2V0QXR0cmlidXRlQnlOYW1lTlMgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVsZW1lbnQtYXR0cmlidXRlcy1nZXQtYnktbmFtZXNwYWNlXG5cbiAgaWYgKG5hbWVzcGFjZSA9PT0gXCJcIikge1xuICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gIH1cblxuICBjb25zdCBhdHRyaWJ1dGVMaXN0ID0gZWxlbWVudC5fYXR0cmlidXRlc1tJTlRFUk5BTF0uYXR0cmlidXRlTGlzdDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYXR0ciA9IGF0dHJpYnV0ZUxpc3RbaV07XG4gICAgaWYgKGF0dHIuX25hbWVzcGFjZSA9PT0gbmFtZXNwYWNlICYmIGF0dHIuX2xvY2FsTmFtZSA9PT0gbG9jYWxOYW1lKSB7XG4gICAgICByZXR1cm4gYXR0cjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydHMuZ2V0QXR0cmlidXRlVmFsdWVCeU5hbWVOUyA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lc3BhY2UsIGxvY2FsTmFtZSkge1xuICBjb25zdCBhdHRyID0gZXhwb3J0cy5nZXRBdHRyaWJ1dGVCeU5hbWVOUyhlbGVtZW50LCBuYW1lc3BhY2UsIGxvY2FsTmFtZSk7XG5cbiAgaWYgKCFhdHRyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYXR0ci5fdmFsdWU7XG59O1xuXG5leHBvcnRzLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBhdHRyKSB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbGVtZW50LWF0dHJpYnV0ZXMtc2V0XG5cbiAgaWYgKGF0dHIuX2VsZW1lbnQgIT09IG51bGwgJiYgYXR0ci5fZWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVVNFX0FUVFJJQlVURV9FUlIpO1xuICB9XG5cbiAgY29uc3Qgb2xkQXR0ciA9IGV4cG9ydHMuZ2V0QXR0cmlidXRlQnlOYW1lTlMoZWxlbWVudCwgYXR0ci5fbmFtZXNwYWNlLCBhdHRyLl9sb2NhbE5hbWUpO1xuICBpZiAob2xkQXR0ciA9PT0gYXR0cikge1xuICAgIHJldHVybiBhdHRyO1xuICB9XG5cbiAgaWYgKG9sZEF0dHIgIT09IG51bGwpIHtcbiAgICBleHBvcnRzLnJlcGxhY2VBdHRyaWJ1dGUoZWxlbWVudCwgb2xkQXR0ciwgYXR0cik7XG4gIH0gZWxzZSB7XG4gICAgZXhwb3J0cy5hcHBlbmRBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cik7XG4gIH1cblxuICByZXR1cm4gb2xkQXR0cjtcbn07XG5cbmV4cG9ydHMuc2V0QXR0cmlidXRlVmFsdWUgPSBmdW5jdGlvbiAoZWxlbWVudCwgbG9jYWxOYW1lLCB2YWx1ZSwgcHJlZml4LCBuYW1lc3BhY2UpIHtcbiAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVsZW1lbnQtYXR0cmlidXRlcy1zZXQtdmFsdWVcblxuICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICBwcmVmaXggPSBudWxsO1xuICB9XG4gIGlmIChuYW1lc3BhY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gIH1cblxuICBjb25zdCBhdHRyaWJ1dGUgPSBleHBvcnRzLmdldEF0dHJpYnV0ZUJ5TmFtZU5TKGVsZW1lbnQsIG5hbWVzcGFjZSwgbG9jYWxOYW1lKTtcbiAgaWYgKGF0dHJpYnV0ZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IG5ld0F0dHJpYnV0ZSA9IGF0dHJHZW5lcmF0ZWQuY3JlYXRlSW1wbChbXSwgeyBuYW1lc3BhY2UsIG5hbWVzcGFjZVByZWZpeDogcHJlZml4LCBsb2NhbE5hbWUsIHZhbHVlIH0pO1xuICAgIGV4cG9ydHMuYXBwZW5kQXR0cmlidXRlKGVsZW1lbnQsIG5ld0F0dHJpYnV0ZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXhwb3J0cy5jaGFuZ2VBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSk7XG59O1xuXG5leHBvcnRzLnJlbW92ZUF0dHJpYnV0ZUJ5TmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lKSB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbGVtZW50LWF0dHJpYnV0ZXMtcmVtb3ZlLWJ5LW5hbWVcblxuICBjb25zdCBhdHRyID0gZXhwb3J0cy5nZXRBdHRyaWJ1dGVCeU5hbWUoZWxlbWVudCwgbmFtZSk7XG5cbiAgaWYgKGF0dHIgIT09IG51bGwpIHtcbiAgICBleHBvcnRzLnJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCBhdHRyKTtcbiAgfVxuXG4gIHJldHVybiBhdHRyO1xufTtcblxuZXhwb3J0cy5yZW1vdmVBdHRyaWJ1dGVCeU5hbWVOUyA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lc3BhY2UsIGxvY2FsTmFtZSkge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZWxlbWVudC1hdHRyaWJ1dGVzLXJlbW92ZS1ieS1uYW1lc3BhY2VcblxuICBjb25zdCBhdHRyID0gZXhwb3J0cy5nZXRBdHRyaWJ1dGVCeU5hbWVOUyhlbGVtZW50LCBuYW1lc3BhY2UsIGxvY2FsTmFtZSk7XG5cbiAgaWYgKGF0dHIgIT09IG51bGwpIHtcbiAgICBleHBvcnRzLnJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCBhdHRyKTtcbiAgfVxuXG4gIHJldHVybiBhdHRyO1xufTtcblxuZXhwb3J0cy5jb3B5QXR0cmlidXRlTGlzdCA9IGZ1bmN0aW9uIChzb3VyY2VFbGVtZW50LCBkZXN0RWxlbWVudCkge1xuICAvLyBOZWVkZWQgYnkgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW5vZGUtY2xvbmVcblxuICBmb3IgKGNvbnN0IHNvdXJjZUF0dHIgb2Ygc291cmNlRWxlbWVudC5fYXR0cmlidXRlc1tJTlRFUk5BTF0uYXR0cmlidXRlTGlzdCkge1xuICAgIGNvbnN0IGRlc3RBdHRyID0gYXR0ckdlbmVyYXRlZC5jcmVhdGVJbXBsKFtdLCB7XG4gICAgICBuYW1lc3BhY2U6IHNvdXJjZUF0dHIuX25hbWVzcGFjZSxcbiAgICAgIG5hbWVzcGFjZVByZWZpeDogc291cmNlQXR0ci5fbmFtZXNwYWNlUHJlZml4LFxuICAgICAgbG9jYWxOYW1lOiBzb3VyY2VBdHRyLl9sb2NhbE5hbWUsXG4gICAgICB2YWx1ZTogc291cmNlQXR0ci5fdmFsdWVcbiAgICB9KTtcblxuICAgIGV4cG9ydHMuYXBwZW5kQXR0cmlidXRlKGRlc3RFbGVtZW50LCBkZXN0QXR0cik7XG4gIH1cbn07XG5cbmV4cG9ydHMuYXR0cmlidXRlTGlzdHNFcXVhbCA9IGZ1bmN0aW9uIChlbGVtZW50QSwgZWxlbWVudEIpIHtcbiAgLy8gTmVlZGVkIGJ5IGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ub2RlLWVxdWFsc1xuXG4gIGNvbnN0IGxpc3RBID0gZWxlbWVudEEuX2F0dHJpYnV0ZXNbSU5URVJOQUxdLmF0dHJpYnV0ZUxpc3Q7XG4gIGNvbnN0IGxpc3RCID0gZWxlbWVudEIuX2F0dHJpYnV0ZXNbSU5URVJOQUxdLmF0dHJpYnV0ZUxpc3Q7XG5cbiAgaWYgKGxpc3RBLmxlbmd0aCAhPT0gbGlzdEIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0QS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGF0dHJBID0gbGlzdEFbaV07XG5cbiAgICBpZiAoIWxpc3RCLnNvbWUoYXR0ckIgPT4gZXF1YWxzQShhdHRyQikpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXF1YWxzQShhdHRyQikge1xuICAgICAgcmV0dXJuIGF0dHJBLl9uYW1lc3BhY2UgPT09IGF0dHJCLl9uYW1lc3BhY2UgJiYgYXR0ckEuX2xvY2FsTmFtZSA9PT0gYXR0ckIuX2xvY2FsTmFtZSAmJlxuICAgICAgICAgICAgIGF0dHJBLl92YWx1ZSA9PT0gYXR0ckIuX3ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0cy5hdHRyaWJ1dGVOYW1lcyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIC8vIE5lZWRlZCBieSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1lbGVtZW50LWdldGF0dHJpYnV0ZW5hbWVzXG5cbiAgcmV0dXJuIGVsZW1lbnQuX2F0dHJpYnV0ZXNbSU5URVJOQUxdLmF0dHJpYnV0ZUxpc3QubWFwKGdldEF0dHJJbXBsUXVhbGlmaWVkTmFtZSk7XG59O1xuXG5leHBvcnRzLmhhc0F0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAvLyBOZWVkZWQgYnkgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZWxlbWVudC1oYXNhdHRyaWJ1dGVzXG5cbiAgcmV0dXJuIGVsZW1lbnQuX2F0dHJpYnV0ZXNbSU5URVJOQUxdLmF0dHJpYnV0ZUxpc3QubGVuZ3RoID4gMDtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZE5hbWVCZUluTk5NUHJvcHMoZWxlbWVudCwgbmFtZSkge1xuICBpZiAoZWxlbWVudC5fb3duZXJEb2N1bWVudC5fcGFyc2luZ01vZGUgPT09IFwiaHRtbFwiICYmIGVsZW1lbnQuX25hbWVzcGFjZVVSSSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpIHtcbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBBdHRySW1wbCB7XG4gIGNvbnN0cnVjdG9yKF8sIHByaXZhdGVEYXRhKSB7XG4gICAgdGhpcy5fbmFtZXNwYWNlID0gcHJpdmF0ZURhdGEubmFtZXNwYWNlICE9PSB1bmRlZmluZWQgPyBwcml2YXRlRGF0YS5uYW1lc3BhY2UgOiBudWxsO1xuICAgIHRoaXMuX25hbWVzcGFjZVByZWZpeCA9IHByaXZhdGVEYXRhLm5hbWVzcGFjZVByZWZpeCAhPT0gdW5kZWZpbmVkID8gcHJpdmF0ZURhdGEubmFtZXNwYWNlUHJlZml4IDogbnVsbDtcbiAgICB0aGlzLl9sb2NhbE5hbWUgPSBwcml2YXRlRGF0YS5sb2NhbE5hbWU7XG4gICAgdGhpcy5fdmFsdWUgPSBwcml2YXRlRGF0YS52YWx1ZSAhPT0gdW5kZWZpbmVkID8gcHJpdmF0ZURhdGEudmFsdWUgOiBcIlwiO1xuICAgIHRoaXMuX2VsZW1lbnQgPSBwcml2YXRlRGF0YS5lbGVtZW50ICE9PSB1bmRlZmluZWQgPyBwcml2YXRlRGF0YS5lbGVtZW50IDogbnVsbDtcblxuICAgIHRoaXMuc3BlY2lmaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBuYW1lc3BhY2VVUkkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWVzcGFjZTtcbiAgfVxuXG4gIGdldCBwcmVmaXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWVzcGFjZVByZWZpeDtcbiAgfVxuXG4gIGdldCBsb2NhbE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsTmFtZTtcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBleHBvcnRzLmdldEF0dHJJbXBsUXVhbGlmaWVkTmFtZSh0aGlzKTtcbiAgfVxuXG4gIC8vIERlbGVnYXRlIHRvIG5hbWVcbiAgZ2V0IG5vZGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2KSB7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwb3J0cy5jaGFuZ2VBdHRyaWJ1dGVJbXBsKHRoaXMuX2VsZW1lbnQsIHRoaXMsIHYpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlbGVnYXRlIHRvIHZhbHVlXG4gIGdldCBub2RlVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgc2V0IG5vZGVWYWx1ZSh2KSB7XG4gICAgdGhpcy52YWx1ZSA9IHY7XG4gIH1cblxuICAvLyBEZWxlZ2F0ZSB0byB2YWx1ZVxuICBnZXQgdGV4dENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgc2V0IHRleHRDb250ZW50KHYpIHtcbiAgICB0aGlzLnZhbHVlID0gdjtcbiAgfVxuXG4gIGdldCBvd25lckVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gIH1cbn07XG5cbmV4cG9ydHMuY2hhbmdlQXR0cmlidXRlSW1wbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBhdHRyaWJ1dGVJbXBsLCB2YWx1ZSkge1xuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZWxlbWVudC1hdHRyaWJ1dGVzLWNoYW5nZVxuXG4gIC8vIFRPRE8gbXV0YXRpb24gb2JzZXJ2ZXIgc3R1ZmZcblxuICBjb25zdCBvbGRWYWx1ZSA9IGF0dHJpYnV0ZUltcGwuX3ZhbHVlO1xuICBhdHRyaWJ1dGVJbXBsLl92YWx1ZSA9IHZhbHVlO1xuXG4gIC8vIFJ1biBqc2RvbSBob29rczsgcm91Z2hseSBjb3JyZXNwb25kIHRvIHNwZWMncyBcIkFuIGF0dHJpYnV0ZSBpcyBzZXQgYW5kIGFuIGF0dHJpYnV0ZSBpcyBjaGFuZ2VkLlwiXG4gIGVsZW1lbnQuX2F0dHJNb2RpZmllZChleHBvcnRzLmdldEF0dHJJbXBsUXVhbGlmaWVkTmFtZShhdHRyaWJ1dGVJbXBsKSwgdmFsdWUsIG9sZFZhbHVlKTtcbn07XG5cbmV4cG9ydHMuZ2V0QXR0ckltcGxRdWFsaWZpZWROYW1lID0gZnVuY3Rpb24gKGF0dHJpYnV0ZUltcGwpIHtcbiAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWF0dHJpYnV0ZS1xdWFsaWZpZWQtbmFtZVxuXG4gIGlmIChhdHRyaWJ1dGVJbXBsLl9uYW1lc3BhY2VQcmVmaXggPT09IG51bGwpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlSW1wbC5fbG9jYWxOYW1lO1xuICB9XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZUltcGwuX25hbWVzcGFjZVByZWZpeCArIFwiOlwiICsgYXR0cmlidXRlSW1wbC5fbG9jYWxOYW1lO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5jb25zdCBvcmRlcmVkU2V0UGFyc2VyID0gcmVxdWlyZShcIi4vaGVscGVycy9vcmRlcmVkLXNldC1wYXJzZXJcIik7XG5cbi8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tdG9rZW5saXN0XG5cbmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKFwiRE9NVG9rZW5MaXN0IGludGVybmFsXCIpO1xuXG5jbGFzcyBET01Ub2tlbkxpc3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbiAgfVxuXG4gIGl0ZW0oaW5kZXgpIHtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbGVuZ3RoIDw9IGluZGV4IHx8IGluZGV4IDwgMCA/IG51bGwgOiB0aGlzW2luZGV4XTtcbiAgfVxuXG4gIGNvbnRhaW5zKHRva2VuKSB7XG4gICAgdG9rZW4gPSBTdHJpbmcodG9rZW4pO1xuICAgIHJldHVybiBpbmRleE9mKHRoaXMsIHRva2VuKSAhPT0gLTE7XG4gIH1cblxuICByZXBsYWNlKHRva2VuLCBuZXdUb2tlbikge1xuICAgIHRva2VuID0gU3RyaW5nKHRva2VuKTtcbiAgICBuZXdUb2tlbiA9IFN0cmluZyhuZXdUb2tlbik7XG4gICAgdmFsaWRhdGVUb2tlbnModG9rZW4sIG5ld1Rva2VuKTtcbiAgICBjb25zdCB0b2tlbkluZGV4ID0gaW5kZXhPZih0aGlzLCB0b2tlbik7XG4gICAgaWYgKHRva2VuSW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld1Rva2VuSW5kZXggPSBpbmRleE9mKHRoaXMsIG5ld1Rva2VuKTtcbiAgICBpZiAobmV3VG9rZW5JbmRleCAhPT0gLTEpIHtcbiAgICAgIHNwbGljZUxpdGUodGhpcywgbmV3VG9rZW5JbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXNbSU5URVJOQUxdLnRva2Vuc1t0b2tlbkluZGV4XSA9IG5ld1Rva2VuO1xuICAgIHVwZGF0ZSh0aGlzKTtcbiAgfVxuXG4gIGFkZCgvKiB0b2tlbnMuLi4gKi8pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdG9rZW4gPSBTdHJpbmcoYXJndW1lbnRzW2ldKTtcbiAgICAgIHZhbGlkYXRlVG9rZW5zKHRva2VuKTtcblxuICAgICAgaWYgKGluZGV4T2YodGhpcywgdG9rZW4pID09PSAtMSkge1xuICAgICAgICBwdXNoKHRoaXMsIHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlKHRoaXMpO1xuICB9XG5cbiAgcmVtb3ZlKC8qIHRva2Vucy4uLiAqLykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IFN0cmluZyhhcmd1bWVudHNbaV0pO1xuICAgICAgdmFsaWRhdGVUb2tlbnModG9rZW4pO1xuXG4gICAgICBjb25zdCBpbmRleCA9IGluZGV4T2YodGhpcywgdG9rZW4pO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBzcGxpY2VMaXRlKHRoaXMsIGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlKHRoaXMpO1xuICB9XG5cbiAgLy8gaWYgZm9yY2UgaXMgdHJ1ZSwgdGhpcyBiZWhhdmVzIGxpa2UgYWRkXG4gIC8vIGlmIGZvcmNlIGlzIGZhbHNlLCB0aGlzIGJlaGF2ZXMgbGlrZSByZW1vdmVcbiAgLy8gaWYgZm9yY2UgaXMgdW5kZWZpbmVkLCB0aGlzIGJlaGF2ZXMgYXMgb25lIHdvdWxkIGV4cGVjdCB0b2dnbGUgdG9cbiAgLy8gYWx3YXlzIHJldHVybnMgd2hldGhlciBjbGFzc0xpc3QgY29udGFpbnMgdG9rZW4gYWZ0ZXIgdG9nZ2xpbmdcbiAgdG9nZ2xlKHRva2VuLCBmb3JjZSkge1xuICAgIHRva2VuID0gU3RyaW5nKHRva2VuKTtcbiAgICBmb3JjZSA9IGZvcmNlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBCb29sZWFuKGZvcmNlKTtcblxuICAgIHZhbGlkYXRlVG9rZW5zKHRva2VuKTtcblxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhPZih0aGlzLCB0b2tlbik7XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoZm9yY2UgPT09IGZhbHNlIHx8IGZvcmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3BsaWNlTGl0ZSh0aGlzLCBpbmRleCwgMSk7XG4gICAgICAgIHVwZGF0ZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZm9yY2UgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVzaCh0aGlzLCB0b2tlbik7XG4gICAgdXBkYXRlKHRoaXMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpc1tJTlRFUk5BTF0udG9rZW5zLmxlbmd0aDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplKHRoaXMpO1xuICB9XG5cbiAgc2V0IHZhbHVlKHYpIHtcbiAgICB0aGlzW0lOVEVSTkFMXS5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzW0lOVEVSTkFMXS5hdHRyaWJ1dGUsIHYpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZSh0aGlzKTtcbiAgfVxufVxuXG5ET01Ub2tlbkxpc3QucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkRPTVRva2VuTGlzdFwiO1xuXG5mdW5jdGlvbiBzZXJpYWxpemUobGlzdCkge1xuICBjb25zdCB2YWx1ZSA9IGxpc3RbSU5URVJOQUxdLmVsZW1lbnQuZ2V0QXR0cmlidXRlKGxpc3RbSU5URVJOQUxdLmF0dHJpYnV0ZSk7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUb2tlbnMoLyogdG9rZW5zLi4uICovKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSBTdHJpbmcoYXJndW1lbnRzW2ldKTtcbiAgICBpZiAodG9rZW4gPT09IFwiXCIpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIsIFwiVGhlIHRva2VuIHByb3ZpZGVkIG11c3Qgbm90IGJlIGVtcHR5LlwiKTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0b2tlbiA9IFN0cmluZyhhcmd1bWVudHNbaV0pO1xuICAgIGlmICgvXFxzLy50ZXN0KHRva2VuKSkge1xuICAgICAgY29uc3Qgd2hpdGVzcGFjZU1zZyA9IFwiVGhlIHRva2VuIHByb3ZpZGVkIGNvbnRhaW5zIEhUTUwgc3BhY2UgY2hhcmFjdGVycywgd2hpY2ggYXJlIG5vdCB2YWxpZCBpbiB0b2tlbnMuXCI7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX0NIQVJBQ1RFUl9FUlIsIHdoaXRlc3BhY2VNc2cpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGUobGlzdCkge1xuICBjb25zdCBhdHRyaWJ1dGUgPSBsaXN0W0lOVEVSTkFMXS5hdHRyaWJ1dGU7XG4gIGxpc3RbSU5URVJOQUxdLmVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgbGlzdFtJTlRFUk5BTF0udG9rZW5zLmpvaW4oXCIgXCIpKTtcbn1cblxuLy8gY2FsbHMgaW5kZXhPZiBvbiBpbnRlcm5hbCBhcnJheVxuZnVuY3Rpb24gaW5kZXhPZihkdGwsIHRva2VuKSB7XG4gIHJldHVybiBkdGxbSU5URVJOQUxdLnRva2Vucy5pbmRleE9mKHRva2VuKTtcbn1cblxuLy8gY2FsbHMgcHVzaCBvbiBpbnRlcm5hbCBhcnJheSwgdGhlbiBtYW51YWxseSBhZGRzIGluZGV4ZWQgcHJvcGVydHkgdG8gZHRsXG5mdW5jdGlvbiBwdXNoKGR0bCwgdG9rZW4pIHtcbiAgY29uc3QgbGVuID0gZHRsW0lOVEVSTkFMXS50b2tlbnMucHVzaCh0b2tlbik7XG4gIGR0bFtsZW4gLSAxXSA9IHRva2VuO1xuXG4gIHJldHVybiBsZW47XG59XG5cbi8vIGNhbGxzIHNwbGljZSBvbiBpbnRlcm5hbCBhcnJheSB0aGVuIHJld3JpdGVzIGluZGV4ZWQgcHJvcGVydGllcyBvZiBkdGxcbi8vIGRvZXMgbm90IGFsbG93IGl0ZW1zIHRvIGJlIGFkZGVkLCBvbmx5IHJlbW92ZWQsIHNvIHNwbGljZS1saXRlXG5mdW5jdGlvbiBzcGxpY2VMaXRlKGR0bCwgc3RhcnQsIGRlbGV0ZUNvdW50KSB7XG4gIGNvbnN0IHRva2VucyA9IGR0bFtJTlRFUk5BTF0udG9rZW5zO1xuICBjb25zdCByZW1vdmVkVG9rZW5zID0gdG9rZW5zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuXG4gIC8vIHJlbW92ZSBpbmRleGVkIHByb3BlcnRpZXMgZnJvbSBsaXN0XG4gIGNvbnN0IHJlID0gL15cXGQrJC87XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIGR0bCkge1xuICAgIGlmIChyZS50ZXN0KHByb3ApKSB7XG4gICAgICBkZWxldGUgZHRsW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNvcHkgaW5kZXhlZCBwcm9wZXJ0aWVzIGZyb20gaW50ZXJuYWwgYXJyYXlcbiAgY29uc3QgbGVuID0gdG9rZW5zLmxlbmd0aDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgZHRsW2ldID0gdG9rZW5zW2ldO1xuICB9XG5cbiAgcmV0dXJuIHJlbW92ZWRUb2tlbnM7XG59XG5cbmV4cG9ydHMuRE9NVG9rZW5MaXN0ID0gRE9NVG9rZW5MaXN0O1xuXG4vLyBzZXQgZG9tIHRva2VuIGxpc3Qgd2l0aG91dCBydW5uaW5nIHVwZGF0ZSBzdGVwc1xuZXhwb3J0cy5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0RE9NVG9rZW5MaXN0KGxpc3QsIHZhbHVlKSB7XG4gIGNvbnN0IHRva2VucyA9IGxpc3RbSU5URVJOQUxdLnRva2VucztcblxuICBzcGxpY2VMaXRlKGxpc3QsIDAsIHRva2Vucy5sZW5ndGgpO1xuXG4gIGlmICh2YWx1ZSkge1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2Ygb3JkZXJlZFNldFBhcnNlcih2YWx1ZSkpIHtcbiAgICAgIHB1c2gobGlzdCwgdG9rZW4pO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0cy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGVET01Ub2tlbkxpc3QoZWxlbWVudCwgYXR0cmlidXRlKSB7XG4gIGNvbnN0IGxpc3QgPSBPYmplY3QuY3JlYXRlKERPTVRva2VuTGlzdC5wcm90b3R5cGUpO1xuXG4gIGxpc3RbSU5URVJOQUxdID0ge1xuICAgIGVsZW1lbnQsXG4gICAgYXR0cmlidXRlLFxuICAgIHRva2VuczogW11cbiAgfTtcblxuICBleHBvcnRzLnJlc2V0KGxpc3QsIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkpO1xuXG4gIHJldHVybiBsaXN0O1xufTtcblxuZXhwb3J0cy5jb250YWlucyA9IGZ1bmN0aW9uIGRvbVRva2VuTGlzdENvbnRhaW5zKGxpc3QsIHRva2VuLCBvcHRpb25zKSB7XG4gIGNvbnN0IGNhc2VJbnNlbnNpdGl2ZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jYXNlSW5zZW5zaXRpdmU7XG5cbiAgaWYgKCFjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICByZXR1cm4gaW5kZXhPZihsaXN0LCB0b2tlbikgIT09IC0xO1xuICB9XG5cbiAgY29uc3QgdG9rZW5zID0gbGlzdFtJTlRFUk5BTF0udG9rZW5zO1xuICBjb25zdCBsb3dlclRva2VuID0gdG9rZW4udG9Mb3dlckNhc2UoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAodG9rZW5zW2ldLnRvTG93ZXJDYXNlKCkgPT09IGxvd2VyVG9rZW4pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBEb2N1bWVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvRG9jdW1lbnRcIik7XG5jb25zdCBjb3JlID0gcmVxdWlyZShcIi4uXCIpO1xuY29uc3QgYXBwbHlEb2N1bWVudEZlYXR1cmVzID0gcmVxdWlyZShcIi4uLy4uL2Jyb3dzZXIvZG9jdW1lbnRmZWF0dXJlc1wiKS5hcHBseURvY3VtZW50RmVhdHVyZXM7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBET01QYXJzZXJJbXBsIHtcbiAgcGFyc2VGcm9tU3RyaW5nKHN0cmluZywgY29udGVudFR5cGUpIHtcbiAgICBzd2l0Y2ggKFN0cmluZyhjb250ZW50VHlwZSkpIHtcbiAgICAgIGNhc2UgXCJ0ZXh0L2h0bWxcIjoge1xuICAgICAgICByZXR1cm4gY3JlYXRlU2NyaXB0aW5nRGlzYWJsZWREb2N1bWVudChcImh0bWxcIiwgY29udGVudFR5cGUsIHN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgXCJ0ZXh0L3htbFwiOlxuICAgICAgY2FzZSBcImFwcGxpY2F0aW9uL3htbFwiOlxuICAgICAgY2FzZSBcImFwcGxpY2F0aW9uL3hodG1sK3htbFwiOlxuICAgICAgY2FzZSBcImltYWdlL3N2Zyt4bWxcIjoge1xuICAgICAgICAvLyBUT0RPOiB1c2UgYSBzdHJpY3QgWE1MIHBhcnNlciAoc2F4J3Mgc3RyaWN0IG1vZGUgbWlnaHQgd29yaz8pIGFuZCBjcmVhdGUgcGFyc2VyZXJyb3IgZWxlbWVudHNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlU2NyaXB0aW5nRGlzYWJsZWREb2N1bWVudChcInhtbFwiLCBjb250ZW50VHlwZSwgc3RyaW5nKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGNyZWF0ZVNjcmlwdGluZ0Rpc2FibGVkRG9jdW1lbnQoXCJ4bWxcIiwgY29udGVudFR5cGUpO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgICBcImh0dHA6Ly93d3cubW96aWxsYS5vcmcvbmV3bGF5b3V0L3htbC9wYXJzZXJlcnJvci54bWxcIiwgXCJwYXJzZXJlcnJvclwiKTtcblxuICAgICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSBlcnJvci5tZXNzYWdlO1xuXG4gICAgICAgICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGNvbnRlbnRUeXBlXCIpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2NyaXB0aW5nRGlzYWJsZWREb2N1bWVudChwYXJzaW5nTW9kZSwgY29udGVudFR5cGUsIHN0cmluZykge1xuICBjb25zdCBkb2N1bWVudCA9IERvY3VtZW50LmNyZWF0ZUltcGwoW10sIHtcbiAgICBjb3JlLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHBhcnNpbmdNb2RlLFxuICAgICAgZW5jb2Rpbmc6IFwiVVRGLThcIixcbiAgICAgIGNvbnRlbnRUeXBlXG4gICAgICAvLyBUT0RPOiBzb21laG93IHNldCBVUkwgdG8gYWN0aXZlIGRvY3VtZW50J3MgVVJMXG4gICAgfVxuICB9KTtcblxuICAvLyBcInNjcmlwdGluZyBlbmFibGVkXCIgc2V0IHRvIGZhbHNlXG4gIGFwcGx5RG9jdW1lbnRGZWF0dXJlcyhkb2N1bWVudCwge1xuICAgIEZldGNoRXh0ZXJuYWxSZXNvdXJjZXM6IFtdLFxuICAgIFNraXBFeHRlcm5hbFJlc291cmNlczogZmFsc2VcbiAgfSk7XG5cbiAgaWYgKHN0cmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZG9jdW1lbnQuX2h0bWxUb0RvbS5hcHBlbmRIdG1sVG9Eb2N1bWVudChzdHJpbmcsIGRvY3VtZW50KTtcbiAgfVxuICBkb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gZG9jdW1lbnQ7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRXZlbnRJbXBsID0gcmVxdWlyZShcIi4vRXZlbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgQ3VzdG9tRXZlbnRJbXBsIGV4dGVuZHMgRXZlbnRJbXBsIHtcbiAgaW5pdEN1c3RvbUV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIGRldGFpbCkge1xuICAgIGlmICh0aGlzLl9kaXNwYXRjaEZsYWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRFdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlKTtcbiAgICB0aGlzLmRldGFpbCA9IGRldGFpbDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEN1c3RvbUV2ZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBFdmVudEltcGwgPSByZXF1aXJlKFwiLi9FdmVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBFcnJvckV2ZW50SW1wbCBleHRlbmRzIEV2ZW50SW1wbCB7XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBFcnJvckV2ZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBFdmVudEluaXQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0V2ZW50SW5pdFwiKTtcblxuY2xhc3MgRXZlbnRJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBjb25zdCBbdHlwZSwgZXZlbnRJbml0RGljdCA9IEV2ZW50SW5pdC5jb252ZXJ0KHVuZGVmaW5lZCldID0gYXJncztcblxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG5cbiAgICBjb25zdCB3cmFwcGVyID0gcHJpdmF0ZURhdGEud3JhcHBlcjtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudEluaXREaWN0KSB7XG4gICAgICBpZiAoa2V5IGluIHdyYXBwZXIpIHtcbiAgICAgICAgdGhpc1trZXldID0gZXZlbnRJbml0RGljdFtrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuZXZlbnRQaGFzZSA9IDA7XG5cbiAgICB0aGlzLl9pbml0aWFsaXplZEZsYWcgPSB0cnVlO1xuICAgIHRoaXMuX3N0b3BQcm9wYWdhdGlvbkZsYWcgPSBmYWxzZTtcbiAgICB0aGlzLl9zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25GbGFnID0gZmFsc2U7XG4gICAgdGhpcy5fY2FuY2VsZWRGbGFnID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcGF0Y2hGbGFnID0gZmFsc2U7XG5cbiAgICB0aGlzLmlzVHJ1c3RlZCA9IHByaXZhdGVEYXRhLmlzVHJ1c3RlZCB8fCBmYWxzZTtcbiAgICB0aGlzLnRpbWVTdGFtcCA9IERhdGUubm93KCk7XG4gIH1cblxuICBnZXQgZGVmYXVsdFByZXZlbnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FuY2VsZWRGbGFnO1xuICB9XG5cbiAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgIHRoaXMuX3N0b3BQcm9wYWdhdGlvbkZsYWcgPSB0cnVlO1xuICB9XG5cbiAgZ2V0IGNhbmNlbEJ1YmJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcFByb3BhZ2F0aW9uRmxhZztcbiAgfVxuXG4gIHNldCBjYW5jZWxCdWJibGUodikge1xuICAgIGlmICh2KSB7XG4gICAgICB0aGlzLl9zdG9wUHJvcGFnYXRpb25GbGFnID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG4gICAgdGhpcy5fc3RvcFByb3BhZ2F0aW9uRmxhZyA9IHRydWU7XG4gICAgdGhpcy5fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uRmxhZyA9IHRydWU7XG4gIH1cblxuICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxhYmxlKSB7XG4gICAgICB0aGlzLl9jYW5jZWxlZEZsYWcgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIF9pbml0aWFsaXplKHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuX2luaXRpYWxpemVkRmxhZyA9IHRydWU7XG5cbiAgICB0aGlzLl9zdG9wUHJvcGFnYXRpb25GbGFnID0gZmFsc2U7XG4gICAgdGhpcy5fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uRmxhZyA9IGZhbHNlO1xuICAgIHRoaXMuX2NhbmNlbGVkRmxhZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5pc1RydXN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XG4gICAgdGhpcy5idWJibGVzID0gYnViYmxlcztcbiAgICB0aGlzLmNhbmNlbGFibGUgPSBjYW5jZWxhYmxlO1xuICB9XG5cbiAgaW5pdEV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUpIHtcbiAgICBpZiAodGhpcy5fZGlzcGF0Y2hGbGFnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdGlhbGl6ZSh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEV2ZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgcmVwb3J0RXhjZXB0aW9uID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcnVudGltZS1zY3JpcHQtZXJyb3JzXCIpO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG5jb25zdCBFdmVudEltcGwgPSByZXF1aXJlKFwiLi9FdmVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0V2ZW50XCIpLmludGVyZmFjZTtcblxuY2xhc3MgRXZlbnRUYXJnZXRJbXBsIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICAgIC8vIHdlYmlkbDJqcyBjdXJyZW50bHkgY2FuJ3QgaGFuZGxlIG5laXRoZXIgb3B0aW9uYWwgYXJndW1lbnRzIG5vciBjYWxsYmFjayBpbnRlcmZhY2VzXG4gICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQgfHwgY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgIGNhbGxiYWNrID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9ubHkgdW5kZWZpbmVkLCBudWxsLCBhbiBvYmplY3QsIG9yIGEgZnVuY3Rpb24gYXJlIGFsbG93ZWQgZm9yIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXJcIik7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IG5vcm1hbGl6ZUV2ZW50SGFuZGxlck9wdGlvbnMob3B0aW9ucywgW1wiY2FwdHVyZVwiLCBcIm9uY2VcIl0pO1xuXG4gICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9ldmVudExpc3RlbmVyc1t0eXBlXSkge1xuICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbdHlwZV0gPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2V2ZW50TGlzdGVuZXJzW3R5cGVdLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lciA9IHRoaXMuX2V2ZW50TGlzdGVuZXJzW3R5cGVdW2ldO1xuICAgICAgaWYgKGxpc3RlbmVyLm9wdGlvbnMuY2FwdHVyZSA9PT0gb3B0aW9ucy5jYXB0dXJlICYmIGxpc3RlbmVyLmNhbGxiYWNrID09PSBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbdHlwZV0ucHVzaCh7XG4gICAgICBjYWxsYmFjayxcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCB8fCBjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgY2FsbGJhY2sgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT25seSB1bmRlZmluZWQsIG51bGwsIGFuIG9iamVjdCwgb3IgYSBmdW5jdGlvbiBhcmUgYWxsb3dlZCBmb3IgdGhlIGNhbGxiYWNrIHBhcmFtZXRlclwiKTtcbiAgICB9XG5cbiAgICBvcHRpb25zID0gbm9ybWFsaXplRXZlbnRIYW5kbGVyT3B0aW9ucyhvcHRpb25zLCBbXCJjYXB0dXJlXCJdKTtcblxuICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgLy8gT3B0aW1pemF0aW9uLCBub3QgaW4gdGhlIHNwZWMuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9ldmVudExpc3RlbmVyc1t0eXBlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbdHlwZV0ubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gdGhpcy5fZXZlbnRMaXN0ZW5lcnNbdHlwZV1baV07XG4gICAgICBpZiAobGlzdGVuZXIuY2FsbGJhY2sgPT09IGNhbGxiYWNrICYmIGxpc3RlbmVyLm9wdGlvbnMuY2FwdHVyZSA9PT0gb3B0aW9ucy5jYXB0dXJlKSB7XG4gICAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzW3R5cGVdLnNwbGljZShpLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2hFdmVudChldmVudEltcGwpIHtcbiAgICBpZiAoIShldmVudEltcGwgaW5zdGFuY2VvZiBFdmVudEltcGwpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgdG8gZGlzcGF0Y2hFdmVudCBtdXN0IGJlIGFuIEV2ZW50XCIpO1xuICAgIH1cblxuICAgIGlmIChldmVudEltcGwuX2Rpc3BhdGNoRmxhZyB8fCAhZXZlbnRJbXBsLl9pbml0aWFsaXplZEZsYWcpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSLCBcIlRyaWVkIHRvIGRpc3BhdGNoIGFuIHVuaW5pdGlhbGl6ZWQgZXZlbnRcIik7XG4gICAgfVxuICAgIGlmIChldmVudEltcGwuZXZlbnRQaGFzZSAhPT0gRXZlbnQuTk9ORSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIsIFwiVHJpZWQgdG8gZGlzcGF0Y2ggYSBkaXNwYXRjaGluZyBldmVudFwiKTtcbiAgICB9XG5cbiAgICBldmVudEltcGwuaXNUcnVzdGVkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2goZXZlbnRJbXBsKTtcbiAgfVxuXG4gIF9kaXNwYXRjaChldmVudEltcGwsIHRhcmdldE92ZXJyaWRlKSB7XG4gICAgZXZlbnRJbXBsLl9kaXNwYXRjaEZsYWcgPSB0cnVlO1xuICAgIGV2ZW50SW1wbC50YXJnZXQgPSB0YXJnZXRPdmVycmlkZSB8fCB0aGlzO1xuXG4gICAgY29uc3QgZXZlbnRQYXRoID0gW107XG4gICAgbGV0IHRhcmdldFBhcmVudCA9IGRvbVN5bWJvbFRyZWUucGFyZW50KGV2ZW50SW1wbC50YXJnZXQpO1xuICAgIGxldCB0YXJnZXQgPSBldmVudEltcGwudGFyZ2V0O1xuICAgIHdoaWxlICh0YXJnZXRQYXJlbnQpIHtcbiAgICAgIGV2ZW50UGF0aC5wdXNoKHRhcmdldFBhcmVudCk7XG4gICAgICB0YXJnZXQgPSB0YXJnZXRQYXJlbnQ7XG4gICAgICB0YXJnZXRQYXJlbnQgPSBkb21TeW1ib2xUcmVlLnBhcmVudCh0YXJnZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoZXZlbnRJbXBsLnR5cGUgIT09IFwibG9hZFwiICYmIHRhcmdldC5fZGVmYXVsdFZpZXcpIHtcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2V2ZW50cy1hbmQtdGhlLXdpbmRvdy1vYmplY3RcbiAgICAgIGV2ZW50UGF0aC5wdXNoKGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRhcmdldC5fZGVmYXVsdFZpZXcpKTtcbiAgICB9XG5cbiAgICBldmVudEltcGwuZXZlbnRQaGFzZSA9IEV2ZW50LkNBUFRVUklOR19QSEFTRTtcbiAgICBmb3IgKGxldCBpID0gZXZlbnRQYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBpZiAoZXZlbnRJbXBsLl9zdG9wUHJvcGFnYXRpb25GbGFnKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvYmplY3QgPSBldmVudFBhdGhbaV07XG4gICAgICBjb25zdCBvYmplY3RJbXBsID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIob2JqZWN0KSB8fCBvYmplY3Q7IC8vIHdpbmRvdyA6KFxuICAgICAgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSBvYmplY3RJbXBsLl9ldmVudExpc3RlbmVyc1tldmVudEltcGwudHlwZV07XG4gICAgICBpbnZva2VFdmVudExpc3RlbmVycyhldmVudExpc3RlbmVycywgb2JqZWN0LCBldmVudEltcGwpO1xuICAgIH1cblxuICAgIGV2ZW50SW1wbC5ldmVudFBoYXNlID0gRXZlbnQuQVRfVEFSR0VUO1xuXG4gICAgaWYgKCFldmVudEltcGwuX3N0b3BQcm9wYWdhdGlvbkZsYWcpIHtcbiAgICAgIGludm9rZUlubGluZUxpc3RlbmVycyhldmVudEltcGwudGFyZ2V0LCBldmVudEltcGwpO1xuXG4gICAgICBpZiAodGhpcy5fZXZlbnRMaXN0ZW5lcnNbZXZlbnRJbXBsLnR5cGVdKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJzID0gdGhpcy5fZXZlbnRMaXN0ZW5lcnNbZXZlbnRJbXBsLnR5cGVdO1xuICAgICAgICBpbnZva2VFdmVudExpc3RlbmVycyhldmVudExpc3RlbmVycywgZXZlbnRJbXBsLnRhcmdldCwgZXZlbnRJbXBsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXZlbnRJbXBsLmJ1YmJsZXMpIHtcbiAgICAgIGV2ZW50SW1wbC5ldmVudFBoYXNlID0gRXZlbnQuQlVCQkxJTkdfUEhBU0U7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50UGF0aC5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoZXZlbnRJbXBsLl9zdG9wUHJvcGFnYXRpb25GbGFnKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvYmplY3QgPSBldmVudFBhdGhbaV07XG4gICAgICAgIGNvbnN0IG9iamVjdEltcGwgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihvYmplY3QpIHx8IG9iamVjdDsgLy8gd2luZG93IDooXG4gICAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJzID0gb2JqZWN0SW1wbC5fZXZlbnRMaXN0ZW5lcnNbZXZlbnRJbXBsLnR5cGVdO1xuICAgICAgICBpbnZva2VJbmxpbmVMaXN0ZW5lcnMob2JqZWN0LCBldmVudEltcGwpO1xuICAgICAgICBpbnZva2VFdmVudExpc3RlbmVycyhldmVudExpc3RlbmVycywgb2JqZWN0LCBldmVudEltcGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGV2ZW50SW1wbC5fZGlzcGF0Y2hGbGFnID0gZmFsc2U7XG4gICAgZXZlbnRJbXBsLl9zdG9wUHJvcGFnYXRpb25GbGFnID0gZmFsc2U7XG4gICAgZXZlbnRJbXBsLl9zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25GbGFnID0gZmFsc2U7XG4gICAgZXZlbnRJbXBsLmV2ZW50UGhhc2UgPSBFdmVudC5OT05FO1xuICAgIGV2ZW50SW1wbC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgICByZXR1cm4gIWV2ZW50SW1wbC5fY2FuY2VsZWRGbGFnO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogRXZlbnRUYXJnZXRJbXBsXG59O1xuXG5mdW5jdGlvbiBpbnZva2VJbmxpbmVMaXN0ZW5lcnMob2JqZWN0LCBldmVudCkge1xuICBjb25zdCB3cmFwcGVyID0gaWRsVXRpbHMud3JhcHBlckZvckltcGwob2JqZWN0KTtcbiAgY29uc3QgaW5saW5lTGlzdGVuZXIgPSBnZXRMaXN0ZW5lckZvcklubGluZUV2ZW50SGFuZGxlcih3cmFwcGVyLCBldmVudC50eXBlKTtcbiAgaWYgKGlubGluZUxpc3RlbmVyKSB7XG4gICAgLy8gV2lsbCBiZSBmYWxzeSBmb3Igd2luZG93cyB0aGF0IGhhdmUgY2xvc2VkXG4gICAgY29uc3QgZG9jdW1lbnQgPSBvYmplY3QuX293bmVyRG9jdW1lbnQgfHwgKHdyYXBwZXIgJiYgKHdyYXBwZXIuX2RvY3VtZW50IHx8IHdyYXBwZXIuX293bmVyRG9jdW1lbnQpKTtcblxuICAgIGNvbnN0IHJ1blNjcmlwdHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5fZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQuX2RlZmF1bHRWaWV3Ll9ydW5TY3JpcHRzID09PSBcImRhbmdlcm91c2x5XCI7XG4gICAgaWYgKCFvYmplY3Qubm9kZU5hbWUgfHwgcnVuU2NyaXB0cykge1xuICAgICAgaW52b2tlRXZlbnRMaXN0ZW5lcnMoW3tcbiAgICAgICAgY2FsbGJhY2s6IGlubGluZUxpc3RlbmVyLFxuICAgICAgICBvcHRpb25zOiBub3JtYWxpemVFdmVudEhhbmRsZXJPcHRpb25zKGZhbHNlLCBbXCJjYXB0dXJlXCIsIFwib25jZVwiXSlcbiAgICAgIH1dLCBvYmplY3QsIGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlRXZlbnRMaXN0ZW5lcnMobGlzdGVuZXJzLCB0YXJnZXQsIGV2ZW50SW1wbCkge1xuICBjb25zdCB3cmFwcGVyID0gaWRsVXRpbHMud3JhcHBlckZvckltcGwodGFyZ2V0KTtcbiAgY29uc3QgZG9jdW1lbnQgPSB0YXJnZXQuX293bmVyRG9jdW1lbnQgfHwgKHdyYXBwZXIgJiYgKHdyYXBwZXIuX2RvY3VtZW50IHx8IHdyYXBwZXIuX293bmVyRG9jdW1lbnQpKTtcbiAgLy8gV2lsbCBiZSBmYWxzeSBmb3Igd2luZG93cyB0aGF0IGhhdmUgY2xvc2VkXG4gIGlmICghZG9jdW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyB3b3JrYXJvdW5kIGZvciBldmVudHMgZW1pdHRlZCBvbiB3aW5kb3cgKHdpbmRvdy1wcm94eSlcbiAgLy8gdGhlIHdyYXBwZXIgaXMgdGhlIHJvb3Qgd2luZG93IGluc3RhbmNlLCBidXQgd2Ugb25seSB3YW50IHRvIGV4cG9zZSB0aGUgdm0gcHJveHkgYXQgYWxsIHRpbWVzXG4gIGlmICh3cmFwcGVyLl9kb2N1bWVudCkge1xuICAgIHRhcmdldCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHdyYXBwZXIuX2RvY3VtZW50KS5fZGVmYXVsdFZpZXc7XG4gIH1cbiAgZXZlbnRJbXBsLmN1cnJlbnRUYXJnZXQgPSB0YXJnZXQ7XG4gIGlmICghbGlzdGVuZXJzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaGFuZGxlcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7ICsraSkge1xuICAgIGlmIChldmVudEltcGwuX3N0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbkZsYWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaXN0ZW5lciA9IGhhbmRsZXJzW2ldO1xuICAgIGNvbnN0IGNhcHR1cmUgPSBsaXN0ZW5lci5vcHRpb25zLmNhcHR1cmU7XG4gICAgY29uc3Qgb25jZSA9IGxpc3RlbmVyLm9wdGlvbnMub25jZTtcbiAgICAvLyBjb25zdCBwYXNzaXZlID0gbGlzdGVuZXIub3B0aW9ucy5wYXNzaXZlO1xuXG4gICAgaWYgKGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKSA9PT0gLTEgfHxcbiAgICAgICAgKGV2ZW50SW1wbC5ldmVudFBoYXNlID09PSBFdmVudC5DQVBUVVJJTkdfUEhBU0UgJiYgIWNhcHR1cmUpIHx8XG4gICAgICAgIChldmVudEltcGwuZXZlbnRQaGFzZSA9PT0gRXZlbnQuQlVCQkxJTkdfUEhBU0UgJiYgY2FwdHVyZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChvbmNlKSB7XG4gICAgICBsaXN0ZW5lcnMuc3BsaWNlKGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKSwgMSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXIuY2FsbGJhY2sgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lci5jYWxsYmFjay5oYW5kbGVFdmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgbGlzdGVuZXIuY2FsbGJhY2suaGFuZGxlRXZlbnQoaWRsVXRpbHMud3JhcHBlckZvckltcGwoZXZlbnRJbXBsKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3RlbmVyLmNhbGxiYWNrLmNhbGwoaWRsVXRpbHMud3JhcHBlckZvckltcGwoZXZlbnRJbXBsLmN1cnJlbnRUYXJnZXQpLCBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChldmVudEltcGwpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsZXQgd2luZG93ID0gbnVsbDtcbiAgICAgIGlmICh3cmFwcGVyICYmIHdyYXBwZXIuX2RvY3VtZW50KSB7XG4gICAgICAgIC8vIFRyaWdnZXJlZCBieSBXaW5kb3dcbiAgICAgICAgd2luZG93ID0gd3JhcHBlcjtcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0Ll9vd25lckRvY3VtZW50KSB7XG4gICAgICAgIC8vIFRyaWdnZXJlZCBieSBtb3N0IHdlYmlkbDJqcydlZCBpbnN0YW5jZXNcbiAgICAgICAgd2luZG93ID0gdGFyZ2V0Ll9vd25lckRvY3VtZW50Ll9kZWZhdWx0VmlldztcbiAgICAgIH0gZWxzZSBpZiAod3JhcHBlci5fb3duZXJEb2N1bWVudCkge1xuICAgICAgICAvLyBDdXJyZW50bHkgdHJpZ2dlcmVkIGJ5IFhIUiBhbmQgc29tZSBvdGhlciBub24td2ViaWRsMmpzIHRoaW5nc1xuICAgICAgICB3aW5kb3cgPSB3cmFwcGVyLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0VmlldztcbiAgICAgIH1cblxuICAgICAgaWYgKHdpbmRvdykge1xuICAgICAgICByZXBvcnRFeGNlcHRpb24od2luZG93LCBlKTtcbiAgICAgIH1cbiAgICAgIC8vIEVycm9ycyBpbiB3aW5kb3ctbGVzcyBkb2N1bWVudHMganVzdCBnZXQgc3dhbGxvd2VkLi4uIGNhbiB5b3UgdGhpbmsgb2YgYW55dGhpbmcgYmV0dGVyP1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCB3cmFwcGVkTGlzdGVuZXIgPSBTeW1ib2woXCJpbmxpbmUgZXZlbnQgbGlzdGVuZXIgd3JhcHBlclwiKTtcblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIGV2ZW50IGxpc3RlbmVycyBvcHRpb25zIGFyZ3VtZW50IGluIG9yZGVyIHRvIGdldCBhbHdheXMgYSB2YWxpZCBvcHRpb25zIG9iamVjdFxuICogQHBhcmFtICAge09iamVjdH0gb3B0aW9ucyAgICAgICAgIC0gdXNlciBkZWZpbmVkIG9wdGlvbnNcbiAqIEBwYXJhbSAgIHtBcnJheX0gZGVmYXVsdEJvb2xLZXlzICAtIGJvb2xlYW4gcHJvcGVydGllcyB0aGF0IHNob3VsZCBiZWxvbmcgdG8gdGhlIG9wdGlvbnMgb2JqZWN0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3QgY29udGFpbmluZyBhdCBsZWFzdCB0aGUgXCJkZWZhdWx0Qm9vbEtleXNcIlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVFdmVudEhhbmRsZXJPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRCb29sS2V5cykge1xuICBjb25zdCByZXR1cm5WYWx1ZSA9IHt9O1xuXG4gIC8vIG5vIG5lZWQgdG8gZ28gZnVydGhlciBoZXJlXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIgfHwgb3B0aW9ucyA9PT0gbnVsbCB8fCB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVyblZhbHVlLmNhcHR1cmUgPSBCb29sZWFuKG9wdGlvbnMpO1xuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIC8vIG5vbiBvYmplY3RzIG9wdGlvbnMgc28gd2UgdHlwZWNhc3QgaXRzIHZhbHVlIGFzIFwiY2FwdHVyZVwiIHZhbHVlXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVyblZhbHVlLmNhcHR1cmUgPSBCb29sZWFuKG9wdGlvbnMpO1xuICAgIC8vIGF0IHRoaXMgcG9pbnQgd2UgZG9uJ3QgbmVlZCB0byBsb29wIHRoZSBcImNhcHR1cmVcIiBrZXkgYW55bW9yZVxuICAgIGRlZmF1bHRCb29sS2V5cyA9IGRlZmF1bHRCb29sS2V5cy5maWx0ZXIoayA9PiBrICE9PSBcImNhcHR1cmVcIik7XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBkZWZhdWx0Qm9vbEtleXMpIHtcbiAgICByZXR1cm5WYWx1ZVtrZXldID0gQm9vbGVhbihvcHRpb25zW2tleV0pO1xuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRMaXN0ZW5lckZvcklubGluZUV2ZW50SGFuZGxlcih0YXJnZXQsIHR5cGUpIHtcbiAgY29uc3QgY2FsbGJhY2sgPSB0YXJnZXRbXCJvblwiICsgdHlwZV07XG5cbiAgaWYgKCFjYWxsYmFjaykgeyAvLyBUT0RPIGV2ZW50IGhhbmRsZXJzOiBvbmx5IGNoZWNrIG51bGxcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghY2FsbGJhY2tbd3JhcHBlZExpc3RlbmVyXSkge1xuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtZXZlbnQtaGFuZGxlci1wcm9jZXNzaW5nLWFsZ29yaXRobVxuICAgIGNhbGxiYWNrW3dyYXBwZWRMaXN0ZW5lcl0gPSBmdW5jdGlvbiAoRSkge1xuICAgICAgY29uc3QgaXNXaW5kb3dFcnJvciA9IEUuY29uc3RydWN0b3IubmFtZSA9PT0gXCJFcnJvckV2ZW50XCIgJiYgdHlwZSA9PT0gXCJlcnJvclwiOyAvLyBUT0RPIGJyYW5kaW5nXG5cbiAgICAgIGxldCByZXR1cm5WYWx1ZTtcbiAgICAgIGlmIChpc1dpbmRvd0Vycm9yKSB7XG4gICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2suY2FsbChFLmN1cnJlbnRUYXJnZXQsIEUubWVzc2FnZSwgRS5maWxlbmFtZSwgRS5saW5lbm8sIEUuY29sbm8sIEUuZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjay5jYWxsKEUuY3VycmVudFRhcmdldCwgRSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSBcIm1vdXNlb3ZlclwiIHx8IGlzV2luZG93RXJyb3IpIHtcbiAgICAgICAgaWYgKHJldHVyblZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgRS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJldHVyblZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBFLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBjYWxsYmFja1t3cmFwcGVkTGlzdGVuZXJdO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBFdmVudEltcGwgPSByZXF1aXJlKFwiLi9FdmVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgRm9jdXNFdmVudEltcGwgZXh0ZW5kcyBFdmVudEltcGwgeyB9O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEV2ZW50SW1wbCA9IHJlcXVpcmUoXCIuL0V2ZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhhc2hDaGFuZ2VFdmVudEltcGwgZXh0ZW5kcyBFdmVudEltcGwge1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSGFzaENoYW5nZUV2ZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBVSUV2ZW50SW1wbCA9IHJlcXVpcmUoXCIuL1VJRXZlbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgS2V5Ym9hcmRFdmVudEltcGwgZXh0ZW5kcyBVSUV2ZW50SW1wbCB7XG4gIGluaXRLZXlib2FyZEV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIHZpZXcsIGtleSwgbG9jYXRpb24sIG1vZGlmaWVyc0xpc3QsIHJlcGVhdCwgbG9jYWxlKSB7XG4gICAgaWYgKHRoaXMuX2Rpc3BhdGNoRmxhZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFVJRXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgdmlldywga2V5KTtcbiAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgdGhpcy5tb2RpZmllcnNMaXN0ID0gbW9kaWZpZXJzTGlzdDtcbiAgICB0aGlzLnJlcGVhdCA9IHJlcGVhdDtcbiAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEtleWJvYXJkRXZlbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEV2ZW50SW1wbCA9IHJlcXVpcmUoXCIuL0V2ZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIE1lc3NhZ2VFdmVudEltcGwgZXh0ZW5kcyBFdmVudEltcGwge1xuICBpbml0TWVzc2FnZUV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIGRhdGEsIG9yaWdpbiwgbGFzdEV2ZW50SWQsIHNvdXJjZSwgcG9ydHMpIHtcbiAgICBpZiAodGhpcy5fZGlzcGF0Y2hGbGFnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbml0RXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLm9yaWdpbiA9IG9yaWdpbjtcbiAgICB0aGlzLmxhc3RFdmVudElkID0gbGFzdEV2ZW50SWQ7XG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgdGhpcy5wb3J0cyA9IHBvcnRzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogTWVzc2FnZUV2ZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBVSUV2ZW50SW1wbCA9IHJlcXVpcmUoXCIuL1VJRXZlbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgTW91c2VFdmVudEltcGwgZXh0ZW5kcyBVSUV2ZW50SW1wbCB7XG4gIGluaXRNb3VzZUV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIHZpZXcsIGRldGFpbCwgc2NyZWVuWCwgc2NyZWVuWSwgY2xpZW50WCwgY2xpZW50WSxcbiAgICAgICAgICAgICAgICAgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0YUtleSwgYnV0dG9uLCByZWxhdGVkVGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2Rpc3BhdGNoRmxhZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFVJRXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgdmlldywgZGV0YWlsKTtcbiAgICB0aGlzLnNjcmVlblggPSBzY3JlZW5YO1xuICAgIHRoaXMuc2NyZWVuWSA9IHNjcmVlblk7XG4gICAgdGhpcy5jbGllbnRYID0gY2xpZW50WDtcbiAgICB0aGlzLmNsaWVudFkgPSBjbGllbnRZO1xuICAgIHRoaXMuY3RybEtleSA9IGN0cmxLZXk7XG4gICAgdGhpcy5hbHRLZXkgPSBhbHRLZXk7XG4gICAgdGhpcy5zaGlmdEtleSA9IHNoaWZ0S2V5O1xuICAgIHRoaXMubWV0YUtleSA9IG1ldGFLZXk7XG4gICAgdGhpcy5idXR0b24gPSBidXR0b247XG4gICAgdGhpcy5yZWxhdGVkVGFyZ2V0ID0gcmVsYXRlZFRhcmdldDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IE1vdXNlRXZlbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBFdmVudEltcGwgPSByZXF1aXJlKFwiLi9FdmVudC1pbXBsLmpzXCIpLmltcGxlbWVudGF0aW9uO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgUG9wU3RhdGVFdmVudEltcGwgZXh0ZW5kcyBFdmVudEltcGwge307XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRXZlbnRJbXBsID0gcmVxdWlyZShcIi4vRXZlbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgUHJvZ3Jlc3NFdmVudEltcGwgZXh0ZW5kcyBFdmVudEltcGwge1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogUHJvZ3Jlc3NFdmVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgVUlFdmVudEltcGwgPSByZXF1aXJlKFwiLi9VSUV2ZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIFRvdWNoRXZlbnRJbXBsIGV4dGVuZHMgVUlFdmVudEltcGwge1xuXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogVG91Y2hFdmVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRXZlbnRJbXBsID0gcmVxdWlyZShcIi4vRXZlbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgVUlFdmVudEltcGwgZXh0ZW5kcyBFdmVudEltcGwge1xuICBpbml0VUlFdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCB2aWV3LCBkZXRhaWwpIHtcbiAgICBpZiAodGhpcy5fZGlzcGF0Y2hGbGFnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbml0RXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSk7XG4gICAgdGhpcy52aWV3ID0gdmlldztcbiAgICB0aGlzLmRldGFpbCA9IGRldGFpbDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IFVJRXZlbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCBCbG9iID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9CbG9iXCIpO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgQmxvYkltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzKSB7XG4gICAgY29uc3QgcGFydHMgPSBhcmdzWzBdO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBhcmdzWzFdO1xuXG4gICAgY29uc3QgYnVmZmVycyA9IFtdO1xuXG4gICAgaWYgKHBhcnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwYXJ0cyA9PT0gbnVsbCB8fCB0eXBlb2YgcGFydHMgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIHBhcnRzW1N5bWJvbC5pdGVyYXRvcl0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicGFydHMgbXVzdCBiZSBhbiBpdGVyYWJsZSBvYmplY3RcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KHBhcnQpIHx8IEJsb2IuaXMocGFydCkpIHtcbiAgICAgICAgICBhcnIucHVzaChpZGxVdGlscy50cnlJbXBsRm9yV3JhcHBlcihwYXJ0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJyLnB1c2goY29udmVyc2lvbnMuVVNWU3RyaW5nKHBhcnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYXJyKSB7XG4gICAgICAgIGxldCBidWZmZXI7XG4gICAgICAgIGlmIChwYXJ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICBidWZmZXIgPSBuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KHBhcnQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcocGFydCkpIHtcbiAgICAgICAgICBidWZmZXIgPSBuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KHBhcnQuYnVmZmVyLCBwYXJ0LmJ5dGVPZmZzZXQsIHBhcnQuYnl0ZUxlbmd0aCkpO1xuICAgICAgICB9IGVsc2UgaWYgKEJsb2IuaXNJbXBsKHBhcnQpKSB7XG4gICAgICAgICAgYnVmZmVyID0gcGFydC5fYnVmZmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlciA9IG5ldyBCdWZmZXIocGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fYnVmZmVyID0gQnVmZmVyLmNvbmNhdChidWZmZXJzKTtcblxuICAgIHRoaXMudHlwZSA9IHByb3BlcnRpZXMudHlwZTtcbiAgICBpZiAoL1teXFx1MDAyMC1cXHUwMDdFXS8udGVzdCh0aGlzLnR5cGUpKSB7XG4gICAgICB0aGlzLnR5cGUgPSBcIlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnR5cGUgPSB0aGlzLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzQ2xvc2VkID0gZmFsc2U7XG4gIH1cblxuICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0Nsb3NlZCA/IDAgOiB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICB9XG5cbiAgc2xpY2Uoc3RhcnQsIGVuZCwgY29udGVudFR5cGUpIHtcbiAgICBjb25zdCBzaXplID0gdGhpcy5zaXplO1xuXG4gICAgbGV0IHJlbGF0aXZlU3RhcnQ7XG4gICAgbGV0IHJlbGF0aXZlRW5kO1xuICAgIGxldCByZWxhdGl2ZUNvbnRlbnRUeXBlO1xuXG4gICAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlbGF0aXZlU3RhcnQgPSAwO1xuICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICByZWxhdGl2ZVN0YXJ0ID0gTWF0aC5tYXgoc2l6ZSArIHN0YXJ0LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVsYXRpdmVTdGFydCA9IE1hdGgubWluKHN0YXJ0LCBzaXplKTtcbiAgICB9XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWxhdGl2ZUVuZCA9IHNpemU7XG4gICAgfSBlbHNlIGlmIChlbmQgPCAwKSB7XG4gICAgICByZWxhdGl2ZUVuZCA9IE1hdGgubWF4KHNpemUgKyBlbmQsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWxhdGl2ZUVuZCA9IE1hdGgubWluKGVuZCwgc2l6ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlbGF0aXZlQ29udGVudFR5cGUgPSBcIlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzYW5pdGl6YXRpb24gKGxvd2VyIGNhc2UgYW5kIGludmFsaWQgY2hhciBjaGVjaykgaXMgZG9uZSBpbiB0aGVcbiAgICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICByZWxhdGl2ZUNvbnRlbnRUeXBlID0gY29udGVudFR5cGU7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BhbiA9IE1hdGgubWF4KHJlbGF0aXZlRW5kIC0gcmVsYXRpdmVTdGFydCwgMCk7XG5cbiAgICBjb25zdCBidWZmZXIgPSB0aGlzLl9idWZmZXI7XG4gICAgY29uc3Qgc2xpY2VkQnVmZmVyID0gYnVmZmVyLnNsaWNlKFxuICAgICAgcmVsYXRpdmVTdGFydCxcbiAgICAgIHJlbGF0aXZlU3RhcnQgKyBzcGFuXG4gICAgKTtcblxuICAgIGNvbnN0IGJsb2IgPSBCbG9iLmNyZWF0ZUltcGwoW1tdLCB7IHR5cGU6IHJlbGF0aXZlQ29udGVudFR5cGUgfV0sIHt9KTtcbiAgICBibG9iLmlzQ2xvc2VkID0gdGhpcy5pc0Nsb3NlZDtcbiAgICBibG9iLl9idWZmZXIgPSBzbGljZWRCdWZmZXI7XG4gICAgcmV0dXJuIGJsb2I7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLmlzQ2xvc2VkID0gdHJ1ZTtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBCbG9iSW1wbCA9IHJlcXVpcmUoXCIuL0Jsb2ItaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIEZpbGVJbXBsIGV4dGVuZHMgQmxvYkltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGNvbnN0IGZpbGVCaXRzID0gYXJnc1swXTtcbiAgICBjb25zdCBmaWxlTmFtZSA9IGFyZ3NbMV07XG4gICAgY29uc3Qgb3B0aW9ucyA9IGFyZ3NbMl07XG4gICAgc3VwZXIoW2ZpbGVCaXRzLCBvcHRpb25zXSwgcHJpdmF0ZURhdGEpO1xuXG4gICAgdGhpcy5uYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvXFwvL2csIFwiOlwiKTtcbiAgICB0aGlzLmxhc3RNb2RpZmllZCA9IFwibGFzdE1vZGlmaWVkXCIgaW4gb3B0aW9ucyA/IG9wdGlvbnMubGFzdE1vZGlmaWVkIDogRGF0ZS5ub3coKTtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgRmlsZUxpc3RJbXBsIGV4dGVuZHMgQXJyYXkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigwKTtcbiAgfVxuICBpdGVtKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXNbaW5kZXhdIHx8IG51bGw7XG4gIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3Qgd2hhdHdnRW5jb2RpbmcgPSByZXF1aXJlKFwid2hhdHdnLWVuY29kaW5nXCIpO1xuY29uc3QgcGFyc2VDb250ZW50VHlwZSA9IHJlcXVpcmUoXCJjb250ZW50LXR5cGUtcGFyc2VyXCIpO1xuY29uc3QgcXVlcnlzdHJpbmcgPSByZXF1aXJlKFwicXVlcnlzdHJpbmdcIik7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5jb25zdCBFdmVudFRhcmdldEltcGwgPSByZXF1aXJlKFwiLi4vZXZlbnRzL0V2ZW50VGFyZ2V0LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBCbG9iID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9CbG9iXCIpO1xuY29uc3QgUHJvZ3Jlc3NFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvUHJvZ3Jlc3NFdmVudFwiKTtcblxuY29uc3QgUkVBRFlfU1RBVEVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEVNUFRZOiAwLFxuICBMT0FESU5HOiAxLFxuICBET05FOiAyXG59KTtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIEZpbGVSZWFkZXJJbXBsIGV4dGVuZHMgRXZlbnRUYXJnZXRJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihbXSwgcHJpdmF0ZURhdGEpO1xuXG4gICAgdGhpcy5lcnJvciA9IG51bGw7XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gUkVBRFlfU1RBVEVTLkVNUFRZO1xuICAgIHRoaXMucmVzdWx0ID0gbnVsbDtcblxuICAgIHRoaXMub25sb2Fkc3RhcnQgPSBudWxsO1xuICAgIHRoaXMub25wcm9ncmVzcyA9IG51bGw7XG4gICAgdGhpcy5vbmxvYWQgPSBudWxsO1xuICAgIHRoaXMub25hYm9ydCA9IG51bGw7XG4gICAgdGhpcy5vbmVycm9yID0gbnVsbDtcbiAgICB0aGlzLm9ubG9hZGVuZCA9IG51bGw7XG5cbiAgICB0aGlzLl9vd25lckRvY3VtZW50ID0gcHJpdmF0ZURhdGEud2luZG93LmRvY3VtZW50O1xuICB9XG5cbiAgcmVhZEFzQXJyYXlCdWZmZXIoZmlsZSkge1xuICAgIHRoaXMuX3JlYWRGaWxlKGZpbGUsIFwiYnVmZmVyXCIpO1xuICB9XG4gIHJlYWRBc0RhdGFVUkwoZmlsZSkge1xuICAgIHRoaXMuX3JlYWRGaWxlKGZpbGUsIFwiZGF0YVVSTFwiKTtcbiAgfVxuICByZWFkQXNUZXh0KGZpbGUsIGVuY29kaW5nKSB7XG4gICAgdGhpcy5fcmVhZEZpbGUoZmlsZSwgXCJ0ZXh0XCIsIHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKGVuY29kaW5nKSB8fCBcIlVURi04XCIpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gUkVBRFlfU1RBVEVTLkRPTkUgfHwgdGhpcy5yZWFkeVN0YXRlID09PSBSRUFEWV9TVEFURVMuRU1QVFkpIHtcbiAgICAgIHRoaXMucmVzdWx0ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSBSRUFEWV9TVEFURVMuTE9BRElORykge1xuICAgICAgdGhpcy5yZWFkeVN0YXRlID0gUkVBRFlfU1RBVEVTLkRPTkU7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlyZVByb2dyZXNzRXZlbnQoXCJhYm9ydFwiKTtcbiAgICB0aGlzLl9maXJlUHJvZ3Jlc3NFdmVudChcImxvYWRlbmRcIik7XG4gIH1cblxuICBfZmlyZVByb2dyZXNzRXZlbnQobmFtZSwgcHJvcHMpIHtcbiAgICBjb25zdCBldmVudCA9IFByb2dyZXNzRXZlbnQuY3JlYXRlSW1wbChbbmFtZSwgT2JqZWN0LmFzc2lnbih7IGJ1YmJsZXM6IGZhbHNlLCBjYW5jZWxhYmxlOiBmYWxzZSB9LCBwcm9wcyldLCB7fSk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIF9yZWFkRmlsZShmaWxlLCBmb3JtYXQsIGVuY29kaW5nKSB7XG4gICAgaWYgKCFCbG9iLmlzSW1wbChmaWxlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImZpbGUgYXJndW1lbnQgbXVzdCBiZSBhIEJsb2JcIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gUkVBRFlfU1RBVEVTLkxPQURJTkcpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtcbiAgICB9XG4gICAgaWYgKGZpbGUuaXNDbG9zZWQpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgICB0aGlzLl9maXJlUHJvZ3Jlc3NFdmVudChcImVycm9yXCIpO1xuICAgIH1cblxuICAgIHRoaXMucmVhZHlTdGF0ZSA9IFJFQURZX1NUQVRFUy5MT0FESU5HO1xuICAgIHRoaXMuX2ZpcmVQcm9ncmVzc0V2ZW50KFwibG9hZHN0YXJ0XCIpO1xuXG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICBsZXQgZGF0YSA9IGZpbGUuX2J1ZmZlcjtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gbmV3IEJ1ZmZlcihcIlwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZpcmVQcm9ncmVzc0V2ZW50KFwicHJvZ3Jlc3NcIiwge1xuICAgICAgICBsZW5ndGhDb21wdXRhYmxlOiAhaXNOYU4oZmlsZS5zaXplKSxcbiAgICAgICAgdG90YWw6IGZpbGUuc2l6ZSxcbiAgICAgICAgbG9hZGVkOiBkYXRhLmxlbmd0aFxuICAgICAgfSk7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2FzZSBcImJ1ZmZlclwiOiB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdCA9IChuZXcgVWludDhBcnJheShkYXRhKSkuYnVmZmVyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJkYXRhVVJMXCI6IHtcbiAgICAgICAgICAgIGxldCBkYXRhVXJsID0gXCJkYXRhOlwiO1xuICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZUNvbnRlbnRUeXBlKGZpbGUudHlwZSk7XG4gICAgICAgICAgICBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaXNUZXh0KCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZmFsbGJhY2tFbmNvZGluZyA9IHdoYXR3Z0VuY29kaW5nLmdldEJPTUVuY29kaW5nKGRhdGEpIHx8XG4gICAgICAgICAgICAgICAgd2hhdHdnRW5jb2RpbmcubGFiZWxUb05hbWUoY29udGVudFR5cGUuZ2V0KFwiY2hhcnNldFwiKSkgfHwgXCJVVEYtOFwiO1xuICAgICAgICAgICAgICBjb25zdCBkZWNvZGVkID0gd2hhdHdnRW5jb2RpbmcuZGVjb2RlKGRhdGEsIGZhbGxiYWNrRW5jb2RpbmcpO1xuXG4gICAgICAgICAgICAgIGNvbnRlbnRUeXBlLnNldChcImNoYXJzZXRcIiwgZW5jb2RpbmcpO1xuICAgICAgICAgICAgICBkYXRhVXJsICs9IGNvbnRlbnRUeXBlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIGRhdGFVcmwgKz0gXCIsXCI7XG4gICAgICAgICAgICAgIGRhdGFVcmwgKz0gcXVlcnlzdHJpbmcuZXNjYXBlKGRlY29kZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgZGF0YVVybCArPSBjb250ZW50VHlwZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRhdGFVcmwgKz0gXCI7YmFzZTY0LFwiO1xuICAgICAgICAgICAgICBkYXRhVXJsICs9IGRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlc3VsdCA9IGRhdGFVcmw7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcInRleHRcIjoge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSB3aGF0d2dFbmNvZGluZy5kZWNvZGUoZGF0YSwgZW5jb2RpbmcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFJFQURZX1NUQVRFUy5ET05FO1xuICAgICAgICB0aGlzLl9maXJlUHJvZ3Jlc3NFdmVudChcImxvYWRcIik7XG4gICAgICAgIHRoaXMuX2ZpcmVQcm9ncmVzc0V2ZW50KFwibG9hZGVuZFwiKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gQXR0cigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdHRyLnByb3RvdHlwZSwgXCJuYW1lc3BhY2VVUklcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubmFtZXNwYWNlVVJJO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQXR0ci5wcm90b3R5cGUsIFwicHJlZml4XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnByZWZpeDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEF0dHIucHJvdG90eXBlLCBcImxvY2FsTmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5sb2NhbE5hbWU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdHRyLnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm5hbWU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdHRyLnByb3RvdHlwZSwgXCJub2RlTmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ub2RlTmFtZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEF0dHIucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnZhbHVlID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEF0dHIucHJvdG90eXBlLCBcIm5vZGVWYWx1ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ub2RlVmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzW2ltcGxdLm5vZGVWYWx1ZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdHRyLnByb3RvdHlwZSwgXCJ0ZXh0Q29udGVudFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS50ZXh0Q29udGVudDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXNbaW1wbF0udGV4dENvbnRlbnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQXR0ci5wcm90b3R5cGUsIFwib3duZXJFbGVtZW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm93bmVyRWxlbWVudCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBdHRyLnByb3RvdHlwZSwgXCJzcGVjaWZpZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc3BlY2lmaWVkO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkF0dHIucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkF0dHJcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEF0dHIucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoQXR0ci5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBBdHRyLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgQXR0cjogQXR0ciB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2F0dHJpYnV0ZXMvQXR0ci1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IGNvbnZlcnRCbG9iUHJvcGVydHlCYWcgPSByZXF1aXJlKFwiLi9CbG9iUHJvcGVydHlCYWdcIikuY29udmVydDtcblxuZnVuY3Rpb24gQmxvYigpIHtcblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1sxXSA9IGNvbnZlcnRCbG9iUHJvcGVydHlCYWcoYXJnc1sxXSk7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5cblxuQmxvYi5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJsb25nIGxvbmdcIl0oYXJnc1swXSwgeyBjbGFtcDogdHJ1ZSB9KTtcbiAgfVxuICBpZiAoYXJnc1sxXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcImxvbmcgbG9uZ1wiXShhcmdzWzFdLCB7IGNsYW1wOiB0cnVlIH0pO1xuICB9XG4gIGlmIChhcmdzWzJdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnNsaWNlKC4uLmFyZ3MpKTtcbn07XG5cbkJsb2IucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmNsb3NlKCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJsb2IucHJvdG90eXBlLCBcInNpemVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2l6ZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJsb2IucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udHlwZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJsb2IucHJvdG90eXBlLCBcImlzQ2xvc2VkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmlzQ2xvc2VkO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkJsb2IucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkJsb2JcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEJsb2IucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoQmxvYi5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBCbG9iLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgQmxvYjogQmxvYiB9LFxuICAgIFdvcmtlcjogeyBCbG9iOiBCbG9iIH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vZmlsZS1hcGkvQmxvYi1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KSB7XG4gICAgbGV0IGtleSwgdmFsdWU7XG5cbiAgICBrZXkgPSBcInR5cGVcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBcIlwiO1xuICAgIH1cbiAgfSxcblxuICBjb252ZXJ0KG9iaikge1xuICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBoYXMgdG8gYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSB8fCBvYmogaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IG1heSBub3QgYmUgYSBEYXRlIG9yIFJlZ0V4cCBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBtb2R1bGUuZXhwb3J0cy5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IFRleHQgPSByZXF1aXJlKFwiLi9UZXh0LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIENEQVRBU2VjdGlvbigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQ0RBVEFTZWN0aW9uLnByb3RvdHlwZSwgVGV4dC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihDREFUQVNlY3Rpb24sIFRleHQuaW50ZXJmYWNlKTtcblxuXG5DREFUQVNlY3Rpb24ucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkNEQVRBU2VjdGlvblwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoQ0RBVEFTZWN0aW9uLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKENEQVRBU2VjdGlvbi5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgVGV4dC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBDREFUQVNlY3Rpb24sXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBDREFUQVNlY3Rpb246IENEQVRBU2VjdGlvbiB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0NEQVRBU2VjdGlvbi1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBOb2RlID0gcmVxdWlyZShcIi4vTm9kZS5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgbWl4aW4gPSB1dGlscy5taXhpbjtcbmNvbnN0IENoaWxkTm9kZSA9IHJlcXVpcmUoXCIuL0NoaWxkTm9kZS5qc1wiKTtcbmNvbnN0IE5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZSA9IHJlcXVpcmUoXCIuL05vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS5qc1wiKTtcblxuZnVuY3Rpb24gQ2hhcmFjdGVyRGF0YSgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUsIE5vZGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQ2hhcmFjdGVyRGF0YSwgTm9kZS5pbnRlcmZhY2UpO1xuXG5taXhpbihDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZSwgQ2hpbGROb2RlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuQ2hpbGROb2RlLm1peGVkSW50by5wdXNoKENoYXJhY3RlckRhdGEpO1xubWl4aW4oQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUsIE5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS5taXhlZEludG8ucHVzaChDaGFyYWN0ZXJEYXRhKTtcblxuQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuc3Vic3RyaW5nRGF0YSA9IGZ1bmN0aW9uIHN1YnN0cmluZ0RhdGEob2Zmc2V0LCBjb3VudCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3N1YnN0cmluZ0RhdGEnIG9uICdDaGFyYWN0ZXJEYXRhJzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oYXJnc1sxXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLnN1YnN0cmluZ0RhdGEoLi4uYXJncyk7XG59O1xuXG5DaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5hcHBlbmREYXRhID0gZnVuY3Rpb24gYXBwZW5kRGF0YShkYXRhKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnYXBwZW5kRGF0YScgb24gJ0NoYXJhY3RlckRhdGEnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmFwcGVuZERhdGEoLi4uYXJncyk7XG59O1xuXG5DaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5pbnNlcnREYXRhID0gZnVuY3Rpb24gaW5zZXJ0RGF0YShvZmZzZXQsIGRhdGEpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdpbnNlcnREYXRhJyBvbiAnQ2hhcmFjdGVyRGF0YSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmluc2VydERhdGEoLi4uYXJncyk7XG59O1xuXG5DaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5kZWxldGVEYXRhID0gZnVuY3Rpb24gZGVsZXRlRGF0YShvZmZzZXQsIGNvdW50KSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlRGF0YScgb24gJ0NoYXJhY3RlckRhdGEnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShhcmdzWzFdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uZGVsZXRlRGF0YSguLi5hcmdzKTtcbn07XG5cbkNoYXJhY3RlckRhdGEucHJvdG90eXBlLnJlcGxhY2VEYXRhID0gZnVuY3Rpb24gcmVwbGFjZURhdGEob2Zmc2V0LCBjb3VudCwgZGF0YSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlcGxhY2VEYXRhJyBvbiAnQ2hhcmFjdGVyRGF0YSc6IDMgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMV0pO1xuICBhcmdzWzJdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1syXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLnJlcGxhY2VEYXRhKC4uLmFyZ3MpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZSwgXCJkYXRhXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmRhdGE7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzW2ltcGxdLmRhdGEgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUsIFwibGVuZ3RoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmxlbmd0aDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5DaGFyYWN0ZXJEYXRhLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJDaGFyYWN0ZXJEYXRhXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKENoYXJhY3RlckRhdGEucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIE5vZGUuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogQ2hhcmFjdGVyRGF0YSxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IENoYXJhY3RlckRhdGE6IENoYXJhY3RlckRhdGEgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9DaGFyYWN0ZXJEYXRhLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBDaGlsZE5vZGUoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5cbkNoaWxkTm9kZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5yZW1vdmUoKTtcbn07XG5cbkNoaWxkTm9kZS5wcm90b3R5cGVbU3ltYm9sLnVuc2NvcGFibGVzXSA9IHtcbiAgXCJyZW1vdmVcIjogdHJ1ZVxufTtcblxuQ2hpbGROb2RlLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJDaGlsZE5vZGVcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKENoaWxkTm9kZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShDaGlsZE5vZGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogQ2hpbGROb2RlLFxuICBleHBvc2U6IHtcbiAgICBcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvQ2hpbGROb2RlLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IENoYXJhY3RlckRhdGEgPSByZXF1aXJlKFwiLi9DaGFyYWN0ZXJEYXRhLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIENvbW1lbnQoKSB7XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMF0gPSBcIlwiO1xuICB9XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQ29tbWVudC5wcm90b3R5cGUsIENoYXJhY3RlckRhdGEuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQ29tbWVudCwgQ2hhcmFjdGVyRGF0YS5pbnRlcmZhY2UpO1xuXG5cbkNvbW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkNvbW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKENvbW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoQ29tbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgQ2hhcmFjdGVyRGF0YS5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBDb21tZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgQ29tbWVudDogQ29tbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0NvbW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgRXZlbnQgPSByZXF1aXJlKFwiLi9FdmVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgY29udmVydEN1c3RvbUV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL0N1c3RvbUV2ZW50SW5pdFwiKS5jb252ZXJ0O1xuXG5mdW5jdGlvbiBDdXN0b21FdmVudCh0eXBlKSB7XG4gIGlmICghbmV3LnRhcmdldCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdDdXN0b21FdmVudCcuIFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yOyB0aGlzIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0N1c3RvbUV2ZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVydEN1c3RvbUV2ZW50SW5pdChhcmdzWzFdKTtcblxuICBpZmFjZS5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihDdXN0b21FdmVudC5wcm90b3R5cGUsIEV2ZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEN1c3RvbUV2ZW50LCBFdmVudC5pbnRlcmZhY2UpO1xuXG5cbkN1c3RvbUV2ZW50LnByb3RvdHlwZS5pbml0Q3VzdG9tRXZlbnQgPSBmdW5jdGlvbiBpbml0Q3VzdG9tRXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgZGV0YWlsKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgNCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5pdEN1c3RvbUV2ZW50JyBvbiAnQ3VzdG9tRXZlbnQnOiA0IGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgNDsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMV0pO1xuICBhcmdzWzJdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMl0pO1xuICBhcmdzWzNdID0gY29udmVyc2lvbnNbXCJhbnlcIl0oYXJnc1szXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmluaXRDdXN0b21FdmVudCguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ3VzdG9tRXZlbnQucHJvdG90eXBlLCBcImRldGFpbFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5kZXRhaWw7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuQ3VzdG9tRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkN1c3RvbUV2ZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShDdXN0b21FdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShDdXN0b21FdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgRXZlbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogQ3VzdG9tRXZlbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBDdXN0b21FdmVudDogQ3VzdG9tRXZlbnQgfSxcbiAgICBXb3JrZXI6IHsgQ3VzdG9tRXZlbnQ6IEN1c3RvbUV2ZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vZXZlbnRzL0N1c3RvbUV2ZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxuY29uc3QgRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vRXZlbnRJbml0XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29udmVydEluaGVyaXQob2JqLCByZXQpIHtcbiAgICBFdmVudEluaXQuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJkZXRhaWxcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYW55XCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBudWxsO1xuICAgIH1cbiAgfSxcblxuICBjb252ZXJ0KG9iaikge1xuICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBoYXMgdG8gYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSB8fCBvYmogaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IG1heSBub3QgYmUgYSBEYXRlIG9yIFJlZ0V4cCBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBtb2R1bGUuZXhwb3J0cy5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBET01JbXBsZW1lbnRhdGlvbigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cblxuRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50VHlwZSA9IGZ1bmN0aW9uIGNyZWF0ZURvY3VtZW50VHlwZShxdWFsaWZpZWROYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVEb2N1bWVudFR5cGUnIG9uICdET01JbXBsZW1lbnRhdGlvbic6IDMgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMl0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jcmVhdGVEb2N1bWVudFR5cGUoLi4uYXJncykpO1xufTtcblxuRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50ID0gZnVuY3Rpb24gY3JlYXRlRG9jdW1lbnQobmFtZXNwYWNlLCBxdWFsaWZpZWROYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlRG9jdW1lbnQnIG9uICdET01JbXBsZW1lbnRhdGlvbic6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSA9PT0gbnVsbCB8fCBhcmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzBdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gIGlmIChhcmdzWzJdID09PSBudWxsIHx8IGFyZ3NbMl0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMl0gPSBudWxsO1xuICB9IGVsc2Uge1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZURvY3VtZW50KC4uLmFyZ3MpKTtcbn07XG5cbkRPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5jcmVhdGVIVE1MRG9jdW1lbnQgPSBmdW5jdGlvbiBjcmVhdGVIVE1MRG9jdW1lbnQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZUhUTUxEb2N1bWVudCguLi5hcmdzKSk7XG59O1xuXG5ET01JbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuaGFzRmVhdHVyZSA9IGZ1bmN0aW9uIGhhc0ZlYXR1cmUoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmhhc0ZlYXR1cmUoKTtcbn07XG5cbkRPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJET01JbXBsZW1lbnRhdGlvblwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogRE9NSW1wbGVtZW50YXRpb24sXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBET01JbXBsZW1lbnRhdGlvbjogRE9NSW1wbGVtZW50YXRpb24gfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9ET01JbXBsZW1lbnRhdGlvbi1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gRE9NUGFyc2VyKCkge1xuXG4gIGlmYWNlLnNldHVwKHRoaXMpO1xufVxuXG5cbkRPTVBhcnNlci5wcm90b3R5cGUucGFyc2VGcm9tU3RyaW5nID0gZnVuY3Rpb24gcGFyc2VGcm9tU3RyaW5nKHN0ciwgdHlwZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3BhcnNlRnJvbVN0cmluZycgb24gJ0RPTVBhcnNlcic6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnBhcnNlRnJvbVN0cmluZyguLi5hcmdzKSk7XG59O1xuXG5ET01QYXJzZXIucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkRPTVBhcnNlclwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRE9NUGFyc2VyLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKERPTVBhcnNlci5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBET01QYXJzZXIsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBET01QYXJzZXI6IERPTVBhcnNlciB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2RvbXBhcnNpbmcvRE9NUGFyc2VyLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IE5vZGUgPSByZXF1aXJlKFwiLi9Ob2RlLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBtaXhpbiA9IHV0aWxzLm1peGluO1xuY29uc3QgR2xvYmFsRXZlbnRIYW5kbGVycyA9IHJlcXVpcmUoXCIuL0dsb2JhbEV2ZW50SGFuZGxlcnMuanNcIik7XG5jb25zdCBOb25FbGVtZW50UGFyZW50Tm9kZSA9IHJlcXVpcmUoXCIuL05vbkVsZW1lbnRQYXJlbnROb2RlLmpzXCIpO1xuY29uc3QgUGFyZW50Tm9kZSA9IHJlcXVpcmUoXCIuL1BhcmVudE5vZGUuanNcIik7XG5cbmZ1bmN0aW9uIERvY3VtZW50KCkge1xuXG4gIGlmYWNlLnNldHVwKHRoaXMpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKERvY3VtZW50LnByb3RvdHlwZSwgTm9kZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihEb2N1bWVudCwgTm9kZS5pbnRlcmZhY2UpO1xuXG5taXhpbihEb2N1bWVudC5wcm90b3R5cGUsIEdsb2JhbEV2ZW50SGFuZGxlcnMuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5HbG9iYWxFdmVudEhhbmRsZXJzLm1peGVkSW50by5wdXNoKERvY3VtZW50KTtcbm1peGluKERvY3VtZW50LnByb3RvdHlwZSwgTm9uRWxlbWVudFBhcmVudE5vZGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5Ob25FbGVtZW50UGFyZW50Tm9kZS5taXhlZEludG8ucHVzaChEb2N1bWVudCk7XG5taXhpbihEb2N1bWVudC5wcm90b3R5cGUsIFBhcmVudE5vZGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5QYXJlbnROb2RlLm1peGVkSW50by5wdXNoKERvY3VtZW50KTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWUobG9jYWxOYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0RWxlbWVudHNCeVRhZ05hbWUnIG9uICdEb2N1bWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoLi4uYXJncykpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMgPSBmdW5jdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0RWxlbWVudHNCeVRhZ05hbWVOUycgb24gJ0RvY3VtZW50JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdID09PSBudWxsIHx8IGFyZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMF0gPSBudWxsO1xuICB9IGVsc2Uge1xuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIH1cbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gZnVuY3Rpb24gZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWVzKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0RWxlbWVudHNCeUNsYXNzTmFtZScgb24gJ0RvY3VtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gY3JlYXRlRWxlbWVudChsb2NhbE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVFbGVtZW50JyBvbiAnRG9jdW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZUVsZW1lbnQoLi4uYXJncykpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnROUyA9IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2UsIHF1YWxpZmllZE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVFbGVtZW50TlMnIG9uICdEb2N1bWVudCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSA9PT0gbnVsbCB8fCBhcmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzBdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY3JlYXRlRWxlbWVudE5TKC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rpb24gY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVUZXh0Tm9kZSA9IGZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKGRhdGEpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVUZXh0Tm9kZScgb24gJ0RvY3VtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jcmVhdGVUZXh0Tm9kZSguLi5hcmdzKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlQ0RBVEFTZWN0aW9uID0gZnVuY3Rpb24gY3JlYXRlQ0RBVEFTZWN0aW9uKGRhdGEpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVDREFUQVNlY3Rpb24nIG9uICdEb2N1bWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY3JlYXRlQ0RBVEFTZWN0aW9uKC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVDb21tZW50ID0gZnVuY3Rpb24gY3JlYXRlQ29tbWVudChkYXRhKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlQ29tbWVudCcgb24gJ0RvY3VtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jcmVhdGVDb21tZW50KC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBmdW5jdGlvbiBjcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uJyBvbiAnRG9jdW1lbnQnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbiguLi5hcmdzKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZSA9IGZ1bmN0aW9uIGltcG9ydE5vZGUobm9kZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ltcG9ydE5vZGUnIG9uICdEb2N1bWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzFdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzFdID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uaW1wb3J0Tm9kZSguLi5hcmdzKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuYWRvcHROb2RlID0gZnVuY3Rpb24gYWRvcHROb2RlKG5vZGUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdhZG9wdE5vZGUnIG9uICdEb2N1bWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmFkb3B0Tm9kZSguLi5hcmdzKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlQXR0cmlidXRlID0gZnVuY3Rpb24gY3JlYXRlQXR0cmlidXRlKGxvY2FsTmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUF0dHJpYnV0ZScgb24gJ0RvY3VtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jcmVhdGVBdHRyaWJ1dGUoLi4uYXJncykpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUF0dHJpYnV0ZU5TID0gZnVuY3Rpb24gY3JlYXRlQXR0cmlidXRlTlMobmFtZXNwYWNlLCBxdWFsaWZpZWROYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlQXR0cmlidXRlTlMnIG9uICdEb2N1bWVudCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSA9PT0gbnVsbCB8fCBhcmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzBdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY3JlYXRlQXR0cmlidXRlTlMoLi4uYXJncykpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUV2ZW50ID0gZnVuY3Rpb24gY3JlYXRlRXZlbnQoX2ludGVyZmFjZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUV2ZW50JyBvbiAnRG9jdW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZUV2ZW50KC4uLmFyZ3MpKTtcbn07XG5cbkRvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVUcmVlV2Fsa2VyID0gZnVuY3Rpb24gY3JlYXRlVHJlZVdhbGtlcihyb290KSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlVHJlZVdhbGtlcicgb24gJ0RvY3VtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMV0pO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMV0gPSA0Mjk0OTY3Mjk1O1xuICB9XG4gIGlmIChhcmdzWzJdID09PSBudWxsIHx8IGFyZ3NbMl0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMl0gPSBudWxsO1xuICB9IGVsc2Uge1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZVRyZWVXYWxrZXIoLi4uYXJncykpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlOYW1lID0gZnVuY3Rpb24gZ2V0RWxlbWVudHNCeU5hbWUoZWxlbWVudE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRFbGVtZW50c0J5TmFtZScgb24gJ0RvY3VtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5nZXRFbGVtZW50c0J5TmFtZSguLi5hcmdzKSk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uIG9wZW4oKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMF0gPSBcInRleHQvaHRtbFwiO1xuICB9XG4gIGlmIChhcmdzWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMV0gPSBcIlwiO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9wZW4oLi4uYXJncykpO1xufTtcblxuRG9jdW1lbnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmNsb3NlKCk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0ud3JpdGUoLi4uYXJncyk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUud3JpdGVsbiA9IGZ1bmN0aW9uIHdyaXRlbG4oKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLndyaXRlbG4oLi4uYXJncyk7XG59O1xuXG5Eb2N1bWVudC5wcm90b3R5cGUuaGFzRm9jdXMgPSBmdW5jdGlvbiBoYXNGb2N1cygpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uaGFzRm9jdXMoKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImltcGxlbWVudGF0aW9uXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmltcGxlbWVudGF0aW9uKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJVUkxcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uVVJMO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImRvY3VtZW50VVJJXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmRvY3VtZW50VVJJO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcIm9yaWdpblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5vcmlnaW47XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiY29tcGF0TW9kZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jb21wYXRNb2RlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImNoYXJhY3RlclNldFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jaGFyYWN0ZXJTZXQ7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiY2hhcnNldFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jaGFyc2V0O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImlucHV0RW5jb2RpbmdcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaW5wdXRFbmNvZGluZztcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJjb250ZW50VHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jb250ZW50VHlwZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJkb2N0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmRvY3R5cGUpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImRvY3VtZW50RWxlbWVudFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5kb2N1bWVudEVsZW1lbnQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcInJlZmVycmVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnJlZmVycmVyO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImNvb2tpZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jb29raWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uY29va2llID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJsYXN0TW9kaWZpZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubGFzdE1vZGlmaWVkO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcInJlYWR5U3RhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucmVhZHlTdGF0ZSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwidGl0bGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udGl0bGU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0udGl0bGUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImRpclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5kaXI7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uZGlyID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJib2R5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmJvZHkpO1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICB9XG4gICAgdGhpc1tpbXBsXS5ib2R5ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiaGVhZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5oZWFkKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJpbWFnZXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uaW1hZ2VzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJlbWJlZHNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZW1iZWRzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJwbHVnaW5zXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnBsdWdpbnMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImxpbmtzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmxpbmtzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJmb3Jtc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5mb3Jtcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwic2NyaXB0c1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5zY3JpcHRzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJjdXJyZW50U2NyaXB0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmN1cnJlbnRTY3JpcHQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcImRlZmF1bHRWaWV3XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmRlZmF1bHRWaWV3KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJhY3RpdmVFbGVtZW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmFjdGl2ZUVsZW1lbnQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnJlYWR5c3RhdGVjaGFuZ2UpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25yZWFkeXN0YXRlY2hhbmdlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudC5wcm90b3R5cGUsIFwiYW5jaG9yc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5hbmNob3JzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJhcHBsZXRzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmFwcGxldHMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcInN0eWxlU2hlZXRzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnN0eWxlU2hlZXRzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50LnByb3RvdHlwZSwgXCJoaWRkZW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaGlkZGVuO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcInZpc2liaWxpdHlTdGF0ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS52aXNpYmlsaXR5U3RhdGUpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRG9jdW1lbnQucHJvdG90eXBlLCBcIm9udmlzaWJpbGl0eWNoYW5nZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnZpc2liaWxpdHljaGFuZ2UpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub252aXNpYmlsaXR5Y2hhbmdlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuRG9jdW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkRvY3VtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShEb2N1bWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShEb2N1bWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgTm9kZS5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgXCJsb2NhdGlvblwiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbChvYmpbaW1wbF0ubG9jYXRpb24pO1xuICAgICAgfSxcbiAgICAgIHNldChWKSB7XG4gICAgICAgIHRoaXMubG9jYXRpb24uaHJlZiA9IFY7XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KTtcbiAgICBcbiAgICBcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IERvY3VtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgRG9jdW1lbnQ6IERvY3VtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvRG9jdW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgTm9kZSA9IHJlcXVpcmUoXCIuL05vZGUuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IG1peGluID0gdXRpbHMubWl4aW47XG5jb25zdCBQYXJlbnROb2RlID0gcmVxdWlyZShcIi4vUGFyZW50Tm9kZS5qc1wiKTtcblxuZnVuY3Rpb24gRG9jdW1lbnRGcmFnbWVudCgpIHtcblxuICBpZmFjZS5zZXR1cCh0aGlzKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSwgTm9kZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihEb2N1bWVudEZyYWdtZW50LCBOb2RlLmludGVyZmFjZSk7XG5cbm1peGluKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLCBQYXJlbnROb2RlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuUGFyZW50Tm9kZS5taXhlZEludG8ucHVzaChEb2N1bWVudEZyYWdtZW50KTtcblxuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiRG9jdW1lbnRGcmFnbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBOb2RlLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IERvY3VtZW50RnJhZ21lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBEb2N1bWVudEZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvRG9jdW1lbnRGcmFnbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBOb2RlID0gcmVxdWlyZShcIi4vTm9kZS5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgbWl4aW4gPSB1dGlscy5taXhpbjtcbmNvbnN0IENoaWxkTm9kZSA9IHJlcXVpcmUoXCIuL0NoaWxkTm9kZS5qc1wiKTtcblxuZnVuY3Rpb24gRG9jdW1lbnRUeXBlKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihEb2N1bWVudFR5cGUucHJvdG90eXBlLCBOb2RlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKERvY3VtZW50VHlwZSwgTm9kZS5pbnRlcmZhY2UpO1xuXG5taXhpbihEb2N1bWVudFR5cGUucHJvdG90eXBlLCBDaGlsZE5vZGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5DaGlsZE5vZGUubWl4ZWRJbnRvLnB1c2goRG9jdW1lbnRUeXBlKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudFR5cGUucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubmFtZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERvY3VtZW50VHlwZS5wcm90b3R5cGUsIFwicHVibGljSWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucHVibGljSWQ7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEb2N1bWVudFR5cGUucHJvdG90eXBlLCBcInN5c3RlbUlkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnN5c3RlbUlkO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkRvY3VtZW50VHlwZS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiRG9jdW1lbnRUeXBlXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShEb2N1bWVudFR5cGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRG9jdW1lbnRUeXBlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBOb2RlLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IERvY3VtZW50VHlwZSxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IERvY3VtZW50VHlwZTogRG9jdW1lbnRUeXBlIH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvRG9jdW1lbnRUeXBlLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IE5vZGUgPSByZXF1aXJlKFwiLi9Ob2RlLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBtaXhpbiA9IHV0aWxzLm1peGluO1xuY29uc3QgQ2hpbGROb2RlID0gcmVxdWlyZShcIi4vQ2hpbGROb2RlLmpzXCIpO1xuY29uc3QgTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlID0gcmVxdWlyZShcIi4vTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLmpzXCIpO1xuY29uc3QgUGFyZW50Tm9kZSA9IHJlcXVpcmUoXCIuL1BhcmVudE5vZGUuanNcIik7XG5cbmZ1bmN0aW9uIEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEVsZW1lbnQucHJvdG90eXBlLCBOb2RlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEVsZW1lbnQsIE5vZGUuaW50ZXJmYWNlKTtcblxubWl4aW4oRWxlbWVudC5wcm90b3R5cGUsIENoaWxkTm9kZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbkNoaWxkTm9kZS5taXhlZEludG8ucHVzaChFbGVtZW50KTtcbm1peGluKEVsZW1lbnQucHJvdG90eXBlLCBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5Ob25Eb2N1bWVudFR5cGVDaGlsZE5vZGUubWl4ZWRJbnRvLnB1c2goRWxlbWVudCk7XG5taXhpbihFbGVtZW50LnByb3RvdHlwZSwgUGFyZW50Tm9kZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcblBhcmVudE5vZGUubWl4ZWRJbnRvLnB1c2goRWxlbWVudCk7XG5cbkVsZW1lbnQucHJvdG90eXBlLmhhc0F0dHJpYnV0ZXMgPSBmdW5jdGlvbiBoYXNBdHRyaWJ1dGVzKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5oYXNBdHRyaWJ1dGVzKCk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOYW1lcyA9IGZ1bmN0aW9uIGdldEF0dHJpYnV0ZU5hbWVzKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5nZXRBdHRyaWJ1dGVOYW1lcygpKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIGdldEF0dHJpYnV0ZShxdWFsaWZpZWROYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0QXR0cmlidXRlJyBvbiAnRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uZ2V0QXR0cmlidXRlKC4uLmFyZ3MpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTlMgPSBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIGxvY2FsTmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEF0dHJpYnV0ZU5TJyBvbiAnRWxlbWVudCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSA9PT0gbnVsbCB8fCBhcmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzBdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uZ2V0QXR0cmlidXRlTlMoLi4uYXJncyk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSwgdmFsdWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdzZXRBdHRyaWJ1dGUnIG9uICdFbGVtZW50JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5zZXRBdHRyaWJ1dGUoLi4uYXJncyk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVOUyA9IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgcXVhbGlmaWVkTmFtZSwgdmFsdWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdzZXRBdHRyaWJ1dGVOUycgb24gJ0VsZW1lbnQnOiAzIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gPT09IG51bGwgfHwgYXJnc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1swXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgfVxuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIGFyZ3NbMl0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzJdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uc2V0QXR0cmlidXRlTlMoLi4uYXJncyk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUgPSBmdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlbW92ZUF0dHJpYnV0ZScgb24gJ0VsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLnJlbW92ZUF0dHJpYnV0ZSguLi5hcmdzKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5TID0gZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlTlMobmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdyZW1vdmVBdHRyaWJ1dGVOUycgb24gJ0VsZW1lbnQnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gPT09IG51bGwgfHwgYXJnc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1swXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgfVxuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLnJlbW92ZUF0dHJpYnV0ZU5TKC4uLmFyZ3MpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuaGFzQXR0cmlidXRlID0gZnVuY3Rpb24gaGFzQXR0cmlidXRlKHF1YWxpZmllZE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdoYXNBdHRyaWJ1dGUnIG9uICdFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5oYXNBdHRyaWJ1dGUoLi4uYXJncyk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5oYXNBdHRyaWJ1dGVOUyA9IGZ1bmN0aW9uIGhhc0F0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaGFzQXR0cmlidXRlTlMnIG9uICdFbGVtZW50JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdID09PSBudWxsIHx8IGFyZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMF0gPSBudWxsO1xuICB9IGVsc2Uge1xuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIH1cbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5oYXNBdHRyaWJ1dGVOUyguLi5hcmdzKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5vZGUgPSBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOb2RlKHF1YWxpZmllZE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRBdHRyaWJ1dGVOb2RlJyBvbiAnRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0QXR0cmlidXRlTm9kZSguLi5hcmdzKSk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOb2RlTlMgPSBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOb2RlTlMobmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRBdHRyaWJ1dGVOb2RlTlMnIG9uICdFbGVtZW50JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdID09PSBudWxsIHx8IGFyZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMF0gPSBudWxsO1xuICB9IGVsc2Uge1xuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIH1cbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5nZXRBdHRyaWJ1dGVOb2RlTlMoLi4uYXJncykpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTm9kZSA9IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZU5vZGUoYXR0cikge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldEF0dHJpYnV0ZU5vZGUnIG9uICdFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uc2V0QXR0cmlidXRlTm9kZSguLi5hcmdzKSk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVOb2RlTlMgPSBmdW5jdGlvbiBzZXRBdHRyaWJ1dGVOb2RlTlMoYXR0cikge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldEF0dHJpYnV0ZU5vZGVOUycgb24gJ0VsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5zZXRBdHRyaWJ1dGVOb2RlTlMoLi4uYXJncykpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTm9kZSA9IGZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0ZU5vZGUoYXR0cikge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlbW92ZUF0dHJpYnV0ZU5vZGUnIG9uICdFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucmVtb3ZlQXR0cmlidXRlTm9kZSguLi5hcmdzKSk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24gbWF0Y2hlcyhzZWxlY3RvcnMpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdtYXRjaGVzJyBvbiAnRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0ubWF0Y2hlcyguLi5hcmdzKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uIHdlYmtpdE1hdGNoZXNTZWxlY3RvcihzZWxlY3RvcnMpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICd3ZWJraXRNYXRjaGVzU2VsZWN0b3InIG9uICdFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS53ZWJraXRNYXRjaGVzU2VsZWN0b3IoLi4uYXJncyk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKGxvY2FsTmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEVsZW1lbnRzQnlUYWdOYW1lJyBvbiAnRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoLi4uYXJncykpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyA9IGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lTlMobmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRFbGVtZW50c0J5VGFnTmFtZU5TJyBvbiAnRWxlbWVudCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSA9PT0gbnVsbCB8fCBhcmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzBdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICB9XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyguLi5hcmdzKSk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gZnVuY3Rpb24gZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWVzKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0RWxlbWVudHNCeUNsYXNzTmFtZScgb24gJ0VsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoLi4uYXJncykpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRIVE1MID0gZnVuY3Rpb24gaW5zZXJ0QWRqYWNlbnRIVE1MKHBvc2l0aW9uLCB0ZXh0KSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5zZXJ0QWRqYWNlbnRIVE1MJyBvbiAnRWxlbWVudCc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uaW5zZXJ0QWRqYWNlbnRIVE1MKC4uLmFyZ3MpO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuZ2V0Q2xpZW50UmVjdHMgPSBmdW5jdGlvbiBnZXRDbGllbnRSZWN0cygpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0Q2xpZW50UmVjdHMoKSk7XG59O1xuXG5FbGVtZW50LnByb3RvdHlwZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPSBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwibmFtZXNwYWNlVVJJXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm5hbWVzcGFjZVVSSTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcInByZWZpeFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wcmVmaXg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJsb2NhbE5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubG9jYWxOYW1lO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwidGFnTmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS50YWdOYW1lO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwiaWRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcImNsYXNzTmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwiY2xhc3NMaXN0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNsYXNzTGlzdCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpcy5jbGFzc0xpc3QudmFsdWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwiYXR0cmlidXRlc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5hdHRyaWJ1dGVzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcImlubmVySFRNTFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5pbm5lckhUTUw7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzW2ltcGxdLmlubmVySFRNTCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJvdXRlckhUTUxcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub3V0ZXJIVE1MO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpc1tpbXBsXS5vdXRlckhUTUwgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwic2Nyb2xsVG9wXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNjcm9sbFRvcDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnJlc3RyaWN0ZWQgZG91YmxlXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc2Nyb2xsVG9wID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcInNjcm9sbExlZnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2Nyb2xsTGVmdDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnJlc3RyaWN0ZWQgZG91YmxlXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc2Nyb2xsTGVmdCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJzY3JvbGxXaWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zY3JvbGxXaWR0aDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcInNjcm9sbEhlaWdodFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zY3JvbGxIZWlnaHQ7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJjbGllbnRUb3BcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2xpZW50VG9wO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwiY2xpZW50TGVmdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jbGllbnRMZWZ0O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIFwiY2xpZW50V2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2xpZW50V2lkdGg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwgXCJjbGllbnRIZWlnaHRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2xpZW50SGVpZ2h0O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgTm9kZS5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgRWxlbWVudDogRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0VsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEVsZW1lbnRDU1NJbmxpbmVTdHlsZSgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50Q1NTSW5saW5lU3R5bGUucHJvdG90eXBlLCBcInN0eWxlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnN0eWxlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzLnN0eWxlLmNzc1RleHQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkVsZW1lbnRDU1NJbmxpbmVTdHlsZS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiRWxlbWVudENTU0lubGluZVN0eWxlXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShFbGVtZW50Q1NTSW5saW5lU3R5bGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRWxlbWVudENTU0lubGluZVN0eWxlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEVsZW1lbnRDU1NJbmxpbmVTdHlsZSxcbiAgZXhwb3NlOiB7XG4gICAgXG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0VsZW1lbnRDU1NJbmxpbmVTdHlsZS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gRWxlbWVudENvbnRlbnRFZGl0YWJsZSgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cblxuRWxlbWVudENvbnRlbnRFZGl0YWJsZS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiRWxlbWVudENvbnRlbnRFZGl0YWJsZVwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRWxlbWVudENvbnRlbnRFZGl0YWJsZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShFbGVtZW50Q29udGVudEVkaXRhYmxlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEVsZW1lbnRDb250ZW50RWRpdGFibGUsXG4gIGV4cG9zZToge1xuICAgIFxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9FbGVtZW50Q29udGVudEVkaXRhYmxlLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEV2ZW50ID0gcmVxdWlyZShcIi4vRXZlbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IGNvbnZlcnRFcnJvckV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL0Vycm9yRXZlbnRJbml0XCIpLmNvbnZlcnQ7XG5cbmZ1bmN0aW9uIEVycm9yRXZlbnQodHlwZSkge1xuICBpZiAoIW5ldy50YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnRXJyb3JFdmVudCcuIFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yOyB0aGlzIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0Vycm9yRXZlbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJ0RXJyb3JFdmVudEluaXQoYXJnc1sxXSk7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoRXJyb3JFdmVudC5wcm90b3R5cGUsIEV2ZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEVycm9yRXZlbnQsIEV2ZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFcnJvckV2ZW50LnByb3RvdHlwZSwgXCJtZXNzYWdlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm1lc3NhZ2U7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFcnJvckV2ZW50LnByb3RvdHlwZSwgXCJmaWxlbmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5maWxlbmFtZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVycm9yRXZlbnQucHJvdG90eXBlLCBcImxpbmVub1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5saW5lbm87XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFcnJvckV2ZW50LnByb3RvdHlwZSwgXCJjb2xub1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jb2xubztcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEVycm9yRXZlbnQucHJvdG90eXBlLCBcImVycm9yXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmVycm9yO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkVycm9yRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkVycm9yRXZlbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEVycm9yRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRXJyb3JFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgRXZlbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogRXJyb3JFdmVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEVycm9yRXZlbnQ6IEVycm9yRXZlbnQgfSxcbiAgICBXb3JrZXI6IHsgRXJyb3JFdmVudDogRXJyb3JFdmVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9FcnJvckV2ZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxuY29uc3QgRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vRXZlbnRJbml0XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29udmVydEluaGVyaXQob2JqLCByZXQpIHtcbiAgICBFdmVudEluaXQuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJjb2xub1wiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKHZhbHVlKTtcbiAgICB9XG5cbiAgICBrZXkgPSBcImVycm9yXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImFueVwiXSh2YWx1ZSk7XG4gICAgfVxuXG4gICAga2V5ID0gXCJmaWxlbmFtZVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0odmFsdWUpO1xuICAgIH1cblxuICAgIGtleSA9IFwibGluZW5vXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0odmFsdWUpO1xuICAgIH1cblxuICAgIGtleSA9IFwibWVzc2FnZVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0odmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBjb252ZXJ0KG9iaikge1xuICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBoYXMgdG8gYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSB8fCBvYmogaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IG1heSBub3QgYmUgYSBEYXRlIG9yIFJlZ0V4cCBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBtb2R1bGUuZXhwb3J0cy5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgY29udmVydEV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL0V2ZW50SW5pdFwiKS5jb252ZXJ0O1xuXG5mdW5jdGlvbiBFdmVudCh0eXBlKSB7XG4gIGlmICghbmV3LnRhcmdldCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdFdmVudCcuIFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yOyB0aGlzIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0V2ZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVydEV2ZW50SW5pdChhcmdzWzFdKTtcblxuICBpZmFjZS5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cblxuXG5FdmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5zdG9wUHJvcGFnYXRpb24oKTtcbn07XG5cbkV2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSBmdW5jdGlvbiBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufTtcblxuRXZlbnQucHJvdG90eXBlLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gcHJldmVudERlZmF1bHQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnByZXZlbnREZWZhdWx0KCk7XG59O1xuXG5FdmVudC5wcm90b3R5cGUuaW5pdEV2ZW50ID0gZnVuY3Rpb24gaW5pdEV2ZW50KHR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdpbml0RXZlbnQnIG9uICdFdmVudCc6IDMgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1sxXSk7XG4gIGFyZ3NbMl0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1syXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmluaXRFdmVudCguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udHlwZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgXCJ0YXJnZXRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0udGFyZ2V0KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgXCJjdXJyZW50VGFyZ2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmN1cnJlbnRUYXJnZXQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQsIFwiTk9ORVwiLCB7XG4gIHZhbHVlOiAwLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiTk9ORVwiLCB7XG4gIHZhbHVlOiAwLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LCBcIkNBUFRVUklOR19QSEFTRVwiLCB7XG4gIHZhbHVlOiAxLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiQ0FQVFVSSU5HX1BIQVNFXCIsIHtcbiAgdmFsdWU6IDEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQsIFwiQVRfVEFSR0VUXCIsIHtcbiAgdmFsdWU6IDIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgXCJBVF9UQVJHRVRcIiwge1xuICB2YWx1ZTogMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudCwgXCJCVUJCTElOR19QSEFTRVwiLCB7XG4gIHZhbHVlOiAzLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiQlVCQkxJTkdfUEhBU0VcIiwge1xuICB2YWx1ZTogMyxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiZXZlbnRQaGFzZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ldmVudFBoYXNlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcImNhbmNlbEJ1YmJsZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jYW5jZWxCdWJibGU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICB0aGlzW2ltcGxdLmNhbmNlbEJ1YmJsZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwiYnViYmxlc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5idWJibGVzO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnQucHJvdG90eXBlLCBcImNhbmNlbGFibGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2FuY2VsYWJsZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgXCJkZWZhdWx0UHJldmVudGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmRlZmF1bHRQcmV2ZW50ZWQ7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudC5wcm90b3R5cGUsIFwidGltZVN0YW1wXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnRpbWVTdGFtcDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5FdmVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiRXZlbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEV2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEV2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBcImlzVHJ1c3RlZFwiLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBvYmpbaW1wbF0uaXNUcnVzdGVkO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSk7XG4gICAgXG4gICAgXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBFdmVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEV2ZW50OiBFdmVudCB9LFxuICAgIFdvcmtlcjogeyBFdmVudDogRXZlbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ldmVudHMvRXZlbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb252ZXJ0SW5oZXJpdChvYmosIHJldCkge1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJidWJibGVzXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwiY2FuY2VsYWJsZVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG4gIH0sXG5cbiAgY29udmVydChvYmopIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgaGFzIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgb2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBtYXkgbm90IGJlIGEgRGF0ZSBvciBSZWdFeHAgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbW9kdWxlLmV4cG9ydHMuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbmNvbnN0IFVJRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vVUlFdmVudEluaXRcIik7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb252ZXJ0SW5oZXJpdChvYmosIHJldCkge1xuICAgIFVJRXZlbnRJbml0LmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcblxuICAgIGtleSA9IFwiYWx0S2V5XCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwiY3RybEtleVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIm1ldGFLZXlcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ID0gXCJtb2RpZmllckFsdEdyYXBoXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwibW9kaWZpZXJDYXBzTG9ja1wiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIm1vZGlmaWVyRm5cIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ID0gXCJtb2RpZmllckZuTG9ja1wiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIm1vZGlmaWVySHlwZXJcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ID0gXCJtb2RpZmllck51bUxvY2tcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ID0gXCJtb2RpZmllck9TXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwibW9kaWZpZXJTY3JvbGxMb2NrXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwibW9kaWZpZXJTdXBlclwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcIm1vZGlmaWVyU3ltYm9sXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwibW9kaWZpZXJTeW1ib2xMb2NrXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwic2hpZnRLZXlcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gZmFsc2U7XG4gICAgfVxuICB9LFxuXG4gIGNvbnZlcnQob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IGhhcyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlIHx8IG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgbWF5IG5vdCBiZSBhIERhdGUgb3IgUmVnRXhwIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIG1vZHVsZS5leHBvcnRzLmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEV2ZW50VGFyZ2V0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuXG5FdmVudFRhcmdldC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdhZGRFdmVudExpc3RlbmVyJyBvbiAnRXZlbnRUYXJnZXQnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBpZiAoYXJnc1sxXSA9PT0gbnVsbCB8fCBhcmdzWzFdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzFdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5hZGRFdmVudExpc3RlbmVyKC4uLmFyZ3MpO1xufTtcblxuRXZlbnRUYXJnZXQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAncmVtb3ZlRXZlbnRMaXN0ZW5lcicgb24gJ0V2ZW50VGFyZ2V0JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDM7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgaWYgKGFyZ3NbMV0gPT09IG51bGwgfHwgYXJnc1sxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1sxXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lciguLi5hcmdzKTtcbn07XG5cbkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChldmVudCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Rpc3BhdGNoRXZlbnQnIG9uICdFdmVudFRhcmdldCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmRpc3BhdGNoRXZlbnQoLi4uYXJncyk7XG59O1xuXG5FdmVudFRhcmdldC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiRXZlbnRUYXJnZXRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEV2ZW50VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEV2ZW50VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEV2ZW50VGFyZ2V0LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgRXZlbnRUYXJnZXQ6IEV2ZW50VGFyZ2V0IH0sXG4gICAgV29ya2VyOiB7IEV2ZW50VGFyZ2V0OiBFdmVudFRhcmdldCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9FdmVudFRhcmdldC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBCbG9iID0gcmVxdWlyZShcIi4vQmxvYi5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgY29udmVydEZpbGVQcm9wZXJ0eUJhZyA9IHJlcXVpcmUoXCIuL0ZpbGVQcm9wZXJ0eUJhZ1wiKS5jb252ZXJ0O1xuXG5mdW5jdGlvbiBGaWxlKGZpbGVCaXRzLCBmaWxlTmFtZSkge1xuICBpZiAoIW5ldy50YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnRmlsZScuIFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yOyB0aGlzIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0ZpbGUnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMzsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICBhcmdzWzJdID0gY29udmVydEZpbGVQcm9wZXJ0eUJhZyhhcmdzWzJdKTtcblxuICBpZmFjZS5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihGaWxlLnByb3RvdHlwZSwgQmxvYi5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihGaWxlLCBCbG9iLmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlLnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm5hbWU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlLnByb3RvdHlwZSwgXCJsYXN0TW9kaWZpZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubGFzdE1vZGlmaWVkO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkZpbGUucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkZpbGVcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEZpbGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRmlsZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgQmxvYi5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBGaWxlLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgRmlsZTogRmlsZSB9LFxuICAgIFdvcmtlcjogeyBGaWxlOiBGaWxlIH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vZmlsZS1hcGkvRmlsZS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gRmlsZUxpc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5cbkZpbGVMaXN0LnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24gaXRlbShpbmRleCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2l0ZW0nIG9uICdGaWxlTGlzdCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLml0ZW0oLi4uYXJncykpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlTGlzdC5wcm90b3R5cGUsIFwibGVuZ3RoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmxlbmd0aDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5GaWxlTGlzdC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiRmlsZUxpc3RcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEZpbGVMaXN0LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEZpbGVMaXN0LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEZpbGVMaXN0LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgRmlsZUxpc3Q6IEZpbGVMaXN0IH0sXG4gICAgV29ya2VyOiB7IEZpbGVMaXN0OiBGaWxlTGlzdCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2ZpbGUtYXBpL0ZpbGVMaXN0LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxuY29uc3QgQmxvYlByb3BlcnR5QmFnID0gcmVxdWlyZShcIi4vQmxvYlByb3BlcnR5QmFnXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29udmVydEluaGVyaXQob2JqLCByZXQpIHtcbiAgICBCbG9iUHJvcGVydHlCYWcuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJsYXN0TW9kaWZpZWRcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wibG9uZyBsb25nXCJdKHZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgY29udmVydChvYmopIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgaGFzIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgb2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBtYXkgbm90IGJlIGEgRGF0ZSBvciBSZWdFeHAgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbW9kdWxlLmV4cG9ydHMuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBFdmVudFRhcmdldCA9IHJlcXVpcmUoXCIuL0V2ZW50VGFyZ2V0LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZUludGVyZmFjZTogZnVuY3Rpb24gKGRlZmF1bHRQcml2YXRlRGF0YSA9IHt9KSB7XG5cbmZ1bmN0aW9uIEZpbGVSZWFkZXIoKSB7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoRmlsZVJlYWRlci5wcm90b3R5cGUsIEV2ZW50VGFyZ2V0LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEZpbGVSZWFkZXIsIEV2ZW50VGFyZ2V0LmludGVyZmFjZSk7XG5cblxuRmlsZVJlYWRlci5wcm90b3R5cGUucmVhZEFzQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiByZWFkQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAncmVhZEFzQXJyYXlCdWZmZXInIG9uICdGaWxlUmVhZGVyJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0ucmVhZEFzQXJyYXlCdWZmZXIoLi4uYXJncyk7XG59O1xuXG5GaWxlUmVhZGVyLnByb3RvdHlwZS5yZWFkQXNUZXh0ID0gZnVuY3Rpb24gcmVhZEFzVGV4dChibG9iKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAncmVhZEFzVGV4dCcgb24gJ0ZpbGVSZWFkZXInOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1sxXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5yZWFkQXNUZXh0KC4uLmFyZ3MpO1xufTtcblxuRmlsZVJlYWRlci5wcm90b3R5cGUucmVhZEFzRGF0YVVSTCA9IGZ1bmN0aW9uIHJlYWRBc0RhdGFVUkwoYmxvYikge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlYWRBc0RhdGFVUkwnIG9uICdGaWxlUmVhZGVyJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0ucmVhZEFzRGF0YVVSTCguLi5hcmdzKTtcbn07XG5cbkZpbGVSZWFkZXIucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gYWJvcnQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmFib3J0KCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpbGVSZWFkZXIsIFwiRU1QVFlcIiwge1xuICB2YWx1ZTogMCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZVJlYWRlci5wcm90b3R5cGUsIFwiRU1QVFlcIiwge1xuICB2YWx1ZTogMCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlUmVhZGVyLCBcIkxPQURJTkdcIiwge1xuICB2YWx1ZTogMSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZVJlYWRlci5wcm90b3R5cGUsIFwiTE9BRElOR1wiLCB7XG4gIHZhbHVlOiAxLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpbGVSZWFkZXIsIFwiRE9ORVwiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlUmVhZGVyLnByb3RvdHlwZSwgXCJET05FXCIsIHtcbiAgdmFsdWU6IDIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZVJlYWRlci5wcm90b3R5cGUsIFwicmVhZHlTdGF0ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5yZWFkeVN0YXRlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZVJlYWRlci5wcm90b3R5cGUsIFwicmVzdWx0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnJlc3VsdCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlUmVhZGVyLnByb3RvdHlwZSwgXCJlcnJvclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5lcnJvcik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlUmVhZGVyLnByb3RvdHlwZSwgXCJvbmxvYWRzdGFydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmxvYWRzdGFydCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmxvYWRzdGFydCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZVJlYWRlci5wcm90b3R5cGUsIFwib25wcm9ncmVzc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnByb2dyZXNzKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucHJvZ3Jlc3MgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpbGVSZWFkZXIucHJvdG90eXBlLCBcIm9ubG9hZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmxvYWQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25sb2FkID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGaWxlUmVhZGVyLnByb3RvdHlwZSwgXCJvbmFib3J0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uYWJvcnQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25hYm9ydCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZVJlYWRlci5wcm90b3R5cGUsIFwib25lcnJvclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmVycm9yKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uZXJyb3IgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZpbGVSZWFkZXIucHJvdG90eXBlLCBcIm9ubG9hZGVuZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmxvYWRlbmQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25sb2FkZW5kID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuRmlsZVJlYWRlci5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiRmlsZVJlYWRlclwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShGaWxlUmVhZGVyLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEZpbGVSZWFkZXIucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEV2ZW50VGFyZ2V0Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRQcml2YXRlRGF0YSkge1xuICAgICAgaWYgKCEocHJvcCBpbiBwcml2YXRlRGF0YSkpIHtcbiAgICAgICAgcHJpdmF0ZURhdGFbcHJvcF0gPSBkZWZhdWx0UHJpdmF0ZURhdGFbcHJvcF07XG4gICAgICB9XG4gICAgfVxuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogRmlsZVJlYWRlcixcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEZpbGVSZWFkZXI6IEZpbGVSZWFkZXIgfSxcbiAgICBXb3JrZXI6IHsgRmlsZVJlYWRlcjogRmlsZVJlYWRlciB9XG4gIH1cbn07XG5yZXR1cm4gaWZhY2U7XG4gIH0sXG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxufTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9maWxlLWFwaS9GaWxlUmVhZGVyLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IFVJRXZlbnQgPSByZXF1aXJlKFwiLi9VSUV2ZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBjb252ZXJ0Rm9jdXNFdmVudEluaXQgPSByZXF1aXJlKFwiLi9Gb2N1c0V2ZW50SW5pdFwiKS5jb252ZXJ0O1xuXG5mdW5jdGlvbiBGb2N1c0V2ZW50KHR5cGUpIHtcbiAgaWYgKCFuZXcudGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0ZvY3VzRXZlbnQnLiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvcjsgdGhpcyBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdGb2N1c0V2ZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVydEZvY3VzRXZlbnRJbml0KGFyZ3NbMV0pO1xuXG4gIGlmYWNlLnNldHVwKHRoaXMsIGFyZ3MpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEZvY3VzRXZlbnQucHJvdG90eXBlLCBVSUV2ZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEZvY3VzRXZlbnQsIFVJRXZlbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvY3VzRXZlbnQucHJvdG90eXBlLCBcInJlbGF0ZWRUYXJnZXRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucmVsYXRlZFRhcmdldCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuRm9jdXNFdmVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiRm9jdXNFdmVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoRm9jdXNFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShGb2N1c0V2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBVSUV2ZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEZvY3VzRXZlbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBGb2N1c0V2ZW50OiBGb2N1c0V2ZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vZXZlbnRzL0ZvY3VzRXZlbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuXG5jb25zdCBVSUV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL1VJRXZlbnRJbml0XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29udmVydEluaGVyaXQob2JqLCByZXQpIHtcbiAgICBVSUV2ZW50SW5pdC5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgbGV0IGtleSwgdmFsdWU7XG5cbiAgICBrZXkgPSBcInJlbGF0ZWRUYXJnZXRcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9ICh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgY29udmVydChvYmopIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgaGFzIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgb2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBtYXkgbm90IGJlIGEgRGF0ZSBvciBSZWdFeHAgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbW9kdWxlLmV4cG9ydHMuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuXG5jb25zdCBJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodXRpbHMuSXRlcmF0b3JQcm90b3R5cGUsIHtcbiAgbmV4dDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgY29uc3QgaW50ZXJuYWwgPSB0aGlzW3V0aWxzLml0ZXJJbnRlcm5hbFN5bWJvbF07XG4gICAgICBjb25zdCB0YXJnZXQgPSBpbnRlcm5hbC50YXJnZXQ7XG4gICAgICBjb25zdCBraW5kID0gaW50ZXJuYWwua2luZDtcbiAgICAgIGNvbnN0IGluZGV4ID0gaW50ZXJuYWwuaW5kZXg7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5mcm9tKHRhcmdldFtpbXBsXSk7XG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoO1xuICAgICAgaWYgKGluZGV4ID49IGxlbikge1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhaXIgPSB2YWx1ZXNbaW5kZXhdO1xuICAgICAgaW50ZXJuYWwuaW5kZXggPSBpbmRleCArIDE7XG5cbiAgICAgIGxldCByZXN1bHQ7XG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSBcImtleVwiOlxuICAgICAgICAgIHJlc3VsdCA9IHBhaXJbMF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgIHJlc3VsdCA9IHBhaXJbMV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJrZXkrdmFsdWVcIjpcbiAgICAgICAgICByZXN1bHQgPSBbcGFpclswXSwgcGFpclsxXV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9O1xuICAgIH0sXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogXCJGb3JtRGF0YUl0ZXJhdG9yXCIsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KTtcblxuZnVuY3Rpb24gRm9ybURhdGEoKSB7XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5cblxuRm9ybURhdGEucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2FwcGVuZCcgb24gJ0Zvcm1EYXRhJzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDM7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzBdKTtcbiAgaWYgKGFyZ3NbMl0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzJdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uYXBwZW5kKC4uLmFyZ3MpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIF8obmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0Zvcm1EYXRhJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5kZWxldGUoLi4uYXJncyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXQnIG9uICdGb3JtRGF0YSc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZ2V0KC4uLmFyZ3MpKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwobmFtZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEFsbCcgb24gJ0Zvcm1EYXRhJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5nZXRBbGwoLi4uYXJncykpO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIGhhcyhuYW1lKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaGFzJyBvbiAnRm9ybURhdGEnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmhhcyguLi5hcmdzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBzZXQobmFtZSwgdmFsdWUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdzZXQnIG9uICdGb3JtRGF0YSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1swXSk7XG4gIGlmIChhcmdzWzJdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnNldCguLi5hcmdzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gZW50cmllcygpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzLmNyZWF0ZURlZmF1bHRJdGVyYXRvcih0aGlzLCBcImtleSt2YWx1ZVwiKTtcbn1cbkZvcm1EYXRhLnByb3RvdHlwZS5lbnRyaWVzID0gRm9ybURhdGEucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl07XG5Gb3JtRGF0YS5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uIGtleXMoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cy5jcmVhdGVEZWZhdWx0SXRlcmF0b3IodGhpcywgXCJrZXlcIik7XG59XG5Gb3JtRGF0YS5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gdmFsdWVzKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuY3JlYXRlRGVmYXVsdEl0ZXJhdG9yKHRoaXMsIFwidmFsdWVcIik7XG59XG5Gb3JtRGF0YS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2spIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnRm9ybURhdGEnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuXCIpO1xuICB9XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJ0Zvcm1EYXRhJzogVGhlIGNhbGxiYWNrIHByb3ZpZGVkIGFzIHBhcmFtZXRlciAxIGlzIG5vdCBhIGZ1bmN0aW9uLlwiKTtcbiAgfVxuICBjb25zdCB0aGlzQXJnID0gYXJndW1lbnRzWzFdO1xuICBsZXQgcGFpcnMgPSBBcnJheS5mcm9tKHRoaXNbaW1wbF0pO1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChpIDwgcGFpcnMubGVuZ3RoKSB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFpcnNbaV07XG4gICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2YWx1ZSwga2V5LCB0aGlzKTtcbiAgICBwYWlycyA9IEFycmF5LmZyb20odGhpc1tpbXBsXSk7XG4gICAgaSsrO1xuICB9XG59O1xuRm9ybURhdGEucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkZvcm1EYXRhXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlRGVmYXVsdEl0ZXJhdG9yKHRhcmdldCwga2luZCkge1xuICAgIGNvbnN0IGl0ZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgaXRlcmF0b3JbdXRpbHMuaXRlckludGVybmFsU3ltYm9sXSA9IHtcbiAgICAgIHRhcmdldCxcbiAgICAgIGtpbmQsXG4gICAgICBpbmRleDogMFxuICAgIH07XG4gICAgcmV0dXJuIGl0ZXJhdG9yO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEZvcm1EYXRhLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEZvcm1EYXRhLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEZvcm1EYXRhLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgRm9ybURhdGE6IEZvcm1EYXRhIH0sXG4gICAgV29ya2VyOiB7IEZvcm1EYXRhOiBGb3JtRGF0YSB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL3hoci9Gb3JtRGF0YS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gR2xvYmFsRXZlbnRIYW5kbGVycygpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmFib3J0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uYWJvcnQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25hYm9ydCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25hdXRvY29tcGxldGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25hdXRvY29tcGxldGUpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25hdXRvY29tcGxldGUgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uYXV0b2NvbXBsZXRlZXJyb3JcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25hdXRvY29tcGxldGVlcnJvcik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmF1dG9jb21wbGV0ZWVycm9yID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmJsdXJcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25ibHVyKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uYmx1ciA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25jYW5jZWxcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25jYW5jZWwpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25jYW5jZWwgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uY2FucGxheVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmNhbnBsYXkpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25jYW5wbGF5ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmNhbnBsYXl0aHJvdWdoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uY2FucGxheXRocm91Z2gpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25jYW5wbGF5dGhyb3VnaCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25jaGFuZ2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25jaGFuZ2UpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25jaGFuZ2UgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uY2xpY2tcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25jbGljayk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmNsaWNrID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmNsb3NlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uY2xvc2UpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25jbG9zZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25jb250ZXh0bWVudVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmNvbnRleHRtZW51KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uY29udGV4dG1lbnUgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uY3VlY2hhbmdlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uY3VlY2hhbmdlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uY3VlY2hhbmdlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmRibGNsaWNrXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uZGJsY2xpY2spO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25kYmxjbGljayA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25kcmFnXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uZHJhZyk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmRyYWcgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uZHJhZ2VuZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmRyYWdlbmQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25kcmFnZW5kID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmRyYWdlbnRlclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmRyYWdlbnRlcik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmRyYWdlbnRlciA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25kcmFnZXhpdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmRyYWdleGl0KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uZHJhZ2V4aXQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uZHJhZ2xlYXZlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uZHJhZ2xlYXZlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uZHJhZ2xlYXZlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmRyYWdvdmVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uZHJhZ292ZXIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25kcmFnb3ZlciA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25kcmFnc3RhcnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25kcmFnc3RhcnQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25kcmFnc3RhcnQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uZHJvcFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmRyb3ApO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25kcm9wID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmR1cmF0aW9uY2hhbmdlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uZHVyYXRpb25jaGFuZ2UpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25kdXJhdGlvbmNoYW5nZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25lbXB0aWVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uZW1wdGllZCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmVtcHRpZWQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uZW5kZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25lbmRlZCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmVuZGVkID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmVycm9yXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uZXJyb3IpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25lcnJvciA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25mb2N1c1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmZvY3VzKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uZm9jdXMgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uaW5wdXRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25pbnB1dCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmlucHV0ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmludmFsaWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25pbnZhbGlkKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uaW52YWxpZCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25rZXlkb3duXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ua2V5ZG93bik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmtleWRvd24gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ua2V5cHJlc3NcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25rZXlwcmVzcyk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmtleXByZXNzID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmtleXVwXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ua2V5dXApO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25rZXl1cCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25sb2FkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ubG9hZCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbmxvYWQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ubG9hZGVkZGF0YVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmxvYWRlZGRhdGEpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25sb2FkZWRkYXRhID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmxvYWRlZG1ldGFkYXRhXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ubG9hZGVkbWV0YWRhdGEpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25sb2FkZWRtZXRhZGF0YSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25sb2Fkc3RhcnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25sb2Fkc3RhcnQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25sb2Fkc3RhcnQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ubW91c2Vkb3duXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ubW91c2Vkb3duKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubW91c2Vkb3duID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbm1vdXNlZW50ZXJcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25tb3VzZWVudGVyKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubW91c2VlbnRlciA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25tb3VzZWxlYXZlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ubW91c2VsZWF2ZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbm1vdXNlbGVhdmUgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ubW91c2Vtb3ZlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ubW91c2Vtb3ZlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubW91c2Vtb3ZlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbm1vdXNlb3V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ubW91c2VvdXQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25tb3VzZW91dCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25tb3VzZW92ZXJcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25tb3VzZW92ZXIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25tb3VzZW92ZXIgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ubW91c2V1cFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbm1vdXNldXApO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25tb3VzZXVwID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbndoZWVsXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ud2hlZWwpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub253aGVlbCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25wYXVzZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnBhdXNlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucGF1c2UgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ucGxheVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnBsYXkpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25wbGF5ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnBsYXlpbmdcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25wbGF5aW5nKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucGxheWluZyA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25wcm9ncmVzc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnByb2dyZXNzKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucHJvZ3Jlc3MgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ucmF0ZWNoYW5nZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnJhdGVjaGFuZ2UpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25yYXRlY2hhbmdlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnJlc2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ucmVzZXQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25yZXNldCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25yZXNpemVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25yZXNpemUpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25yZXNpemUgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uc2Nyb2xsXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uc2Nyb2xsKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uc2Nyb2xsID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnNlZWtlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnNlZWtlZCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnNlZWtlZCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25zZWVraW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uc2Vla2luZyk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnNlZWtpbmcgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uc2VsZWN0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uc2VsZWN0KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uc2VsZWN0ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnNob3dcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25zaG93KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uc2hvdyA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25zb3J0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uc29ydCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnNvcnQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uc3RhbGxlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnN0YWxsZWQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25zdGFsbGVkID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnN1Ym1pdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnN1Ym1pdCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnN1Ym1pdCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25zdXNwZW5kXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uc3VzcGVuZCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnN1c3BlbmQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9udGltZXVwZGF0ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnRpbWV1cGRhdGUpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub250aW1ldXBkYXRlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnRvZ2dsZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnRvZ2dsZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnRvZ2dsZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib252b2x1bWVjaGFuZ2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub252b2x1bWVjaGFuZ2UpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub252b2x1bWVjaGFuZ2UgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEdsb2JhbEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ud2FpdGluZ1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbndhaXRpbmcpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub253YWl0aW5nID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiR2xvYmFsRXZlbnRIYW5kbGVyc1wiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoR2xvYmFsRXZlbnRIYW5kbGVycy5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShHbG9iYWxFdmVudEhhbmRsZXJzLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEdsb2JhbEV2ZW50SGFuZGxlcnMsXG4gIGV4cG9zZToge1xuICAgIFxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9HbG9iYWxFdmVudEhhbmRsZXJzLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IG1peGluID0gdXRpbHMubWl4aW47XG5jb25zdCBIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzID0gcmVxdWlyZShcIi4vSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5qc1wiKTtcblxuZnVuY3Rpb24gSFRNTEFuY2hvckVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEFuY2hvckVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbm1peGluKEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSwgSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5pbnRlcmZhY2UucHJvdG90eXBlKTtcbkhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMubWl4ZWRJbnRvLnB1c2goSFRNTEFuY2hvckVsZW1lbnQpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSwgXCJ0YXJnZXRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInRhcmdldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLCBcImRvd25sb2FkXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJkb3dubG9hZFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUsIFwicmVsXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJyZWxcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInJlbFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSwgXCJocmVmbGFuZ1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiaHJlZmxhbmdcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhyZWZsYW5nXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInR5cGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS50ZXh0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnRleHQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLCBcImNvb3Jkc1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY29vcmRzXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb29yZHNcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUsIFwiY2hhcnNldFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY2hhcnNldFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFuY2hvckVsZW1lbnQucHJvdG90eXBlLCBcInJldlwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwicmV2XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJyZXZcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUsIFwic2hhcGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNoYXBlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzaGFwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEFuY2hvckVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxBbmNob3JFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MQW5jaG9yRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxBbmNob3JFbGVtZW50OiBIVE1MQW5jaG9yRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxBbmNob3JFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTEFwcGxldEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEFwcGxldEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZSwgXCJhbHRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsdFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWx0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLCBcImFyY2hpdmVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFyY2hpdmVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFyY2hpdmVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUsIFwiY29kZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY29kZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29kZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZSwgXCJjb2RlQmFzZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jb2RlQmFzZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5jb2RlQmFzZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZSwgXCJoc3BhY2VcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcImhzcGFjZVwiKSk7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDAgfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3ID8gMCA6IHZhbHVlXG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICBWID0gViA+IDIxNDc0ODM2NDcgPyAwIDogVjtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhzcGFjZVwiLCBTdHJpbmcoVikpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUsIFwib2JqZWN0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9iamVjdDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5vYmplY3QgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFwcGxldEVsZW1lbnQucHJvdG90eXBlLCBcInZzcGFjZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwidnNwYWNlXCIpKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDIxNDc0ODM2NDcgPyAwIDogdmFsdWVcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIFYgPSBWID4gMjE0NzQ4MzY0NyA/IDAgOiBWO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidnNwYWNlXCIsIFN0cmluZyhWKSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGUsIFwid2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MQXBwbGV0RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEFwcGxldEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxBcHBsZXRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MQXBwbGV0RWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxBcHBsZXRFbGVtZW50OiBIVE1MQXBwbGV0RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxBcHBsZXRFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IG1peGluID0gdXRpbHMubWl4aW47XG5jb25zdCBIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzID0gcmVxdWlyZShcIi4vSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5qc1wiKTtcblxuZnVuY3Rpb24gSFRNTEFyZWFFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQXJlYUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQXJlYUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbm1peGluKEhUTUxBcmVhRWxlbWVudC5wcm90b3R5cGUsIEhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLm1peGVkSW50by5wdXNoKEhUTUxBcmVhRWxlbWVudCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJhbHRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsdFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWx0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJjb29yZHNcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNvb3Jkc1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29vcmRzXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJzaGFwZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwic2hhcGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNoYXBlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJ0YXJnZXRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInRhcmdldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJyZWxcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInJlbFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwicmVsXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJub0hyZWZcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwibm9IcmVmXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5vSHJlZlwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcIm5vSHJlZlwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxBcmVhRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEFyZWFFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQXJlYUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEFyZWFFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MQXJlYUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MQXJlYUVsZW1lbnQ6IEhUTUxBcmVhRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxBcmVhRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MTWVkaWFFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTE1lZGlhRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MQXVkaW9FbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQXVkaW9FbGVtZW50LnByb3RvdHlwZSwgSFRNTE1lZGlhRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQXVkaW9FbGVtZW50LCBIVE1MTWVkaWFFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTEF1ZGlvRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEF1ZGlvRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEF1ZGlvRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQXVkaW9FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MTWVkaWFFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxBdWRpb0VsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MQXVkaW9FbGVtZW50OiBIVE1MQXVkaW9FbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEF1ZGlvRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxCUkVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxCUkVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQlJFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEJSRWxlbWVudC5wcm90b3R5cGUsIFwiY2xlYXJcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNsZWFyXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjbGVhclwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MQlJFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MQlJFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQlJFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxCUkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxCUkVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MQlJFbGVtZW50OiBIVE1MQlJFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEJSRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxCYXNlRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEJhc2VFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEJhc2VFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEJhc2VFbGVtZW50LnByb3RvdHlwZSwgXCJocmVmXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhyZWY7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaHJlZiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQmFzZUVsZW1lbnQucHJvdG90eXBlLCBcInRhcmdldFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidGFyZ2V0XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEJhc2VFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MQmFzZUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxCYXNlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQmFzZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxCYXNlRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxCYXNlRWxlbWVudDogSFRNTEJhc2VFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEJhc2VFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IG1peGluID0gdXRpbHMubWl4aW47XG5jb25zdCBXaW5kb3dFdmVudEhhbmRsZXJzID0gcmVxdWlyZShcIi4vV2luZG93RXZlbnRIYW5kbGVycy5qc1wiKTtcblxuZnVuY3Rpb24gSFRNTEJvZHlFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQm9keUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbm1peGluKEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsIFdpbmRvd0V2ZW50SGFuZGxlcnMuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5XaW5kb3dFdmVudEhhbmRsZXJzLm1peGVkSW50by5wdXNoKEhUTUxCb2R5RWxlbWVudCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0ZXh0XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidGV4dFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsIFwibGlua1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibGlua1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImxpbmtcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLCBcInZMaW5rXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2TGlua1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZMaW5rXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSwgXCJhTGlua1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYUxpbmtcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhTGlua1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUsIFwiYmdDb2xvclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYmdDb2xvclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImJnQ29sb3JcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlLCBcImJhY2tncm91bmRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImJhY2tncm91bmRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImJhY2tncm91bmRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MQm9keUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxCb2R5RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MQm9keUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxCb2R5RWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxCb2R5RWxlbWVudDogSFRNTEJvZHlFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEJvZHlFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTEJ1dHRvbkVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEJ1dHRvbkVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUsIFwiYXV0b2ZvY3VzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImF1dG9mb2N1c1wiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhdXRvZm9jdXNcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJhdXRvZm9jdXNcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZSwgXCJkaXNhYmxlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUsIFwiZm9ybVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5mb3JtKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZSwgXCJmb3JtTm9WYWxpZGF0ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJmb3JtTm9WYWxpZGF0ZVwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJmb3JtTm9WYWxpZGF0ZVwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImZvcm1Ob1ZhbGlkYXRlXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQnV0dG9uRWxlbWVudC5wcm90b3R5cGUsIFwiZm9ybVRhcmdldFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZm9ybVRhcmdldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZm9ybVRhcmdldFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udHlwZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS50eXBlID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxCdXR0b25FbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MQnV0dG9uRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEJ1dHRvbkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxCdXR0b25FbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTEJ1dHRvbkVsZW1lbnQ6IEhUTUxCdXR0b25FbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEJ1dHRvbkVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MQ2FudmFzRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MQ2FudmFzRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuXG5IVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uIGdldENvbnRleHQoY29udGV4dElkKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0Q29udGV4dCcgb24gJ0hUTUxDYW52YXNFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBpZiAoYXJnc1sxXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcImFueVwiXShhcmdzWzFdKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5nZXRDb250ZXh0KC4uLmFyZ3MpKTtcbn07XG5cbkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCA9IGZ1bmN0aW9uIHByb2JhYmx5U3VwcG9ydHNDb250ZXh0KGNvbnRleHRJZCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3Byb2JhYmx5U3VwcG9ydHNDb250ZXh0JyBvbiAnSFRNTENhbnZhc0VsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGlmIChhcmdzWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiYW55XCJdKGFyZ3NbMV0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KC4uLmFyZ3MpO1xufTtcblxuSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLnNldENvbnRleHQgPSBmdW5jdGlvbiBzZXRDb250ZXh0KGNvbnRleHQpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdzZXRDb250ZXh0JyBvbiAnSFRNTENhbnZhc0VsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5zZXRDb250ZXh0KC4uLmFyZ3MpO1xufTtcblxuSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLnRvRGF0YVVSTCA9IGZ1bmN0aW9uIHRvRGF0YVVSTCgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJhbnlcIl0oYXJnc1sxXSk7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0udG9EYXRhVVJMKC4uLmFyZ3MpO1xufTtcblxuSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLnRvQmxvYiA9IGZ1bmN0aW9uIHRvQmxvYihjYWxsYmFjaykge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RvQmxvYicgb24gJ0hUTUxDYW52YXNFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMV0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1sxXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMl0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzJdID0gY29udmVyc2lvbnNbXCJhbnlcIl0oYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0udG9CbG9iKC4uLmFyZ3MpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUsIFwid2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ud2lkdGg7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLndpZHRoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZSwgXCJoZWlnaHRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaGVpZ2h0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5oZWlnaHQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MQ2FudmFzRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxDYW52YXNFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTENhbnZhc0VsZW1lbnQ6IEhUTUxDYW52YXNFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTENhbnZhc0VsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MRExpc3RFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRExpc3RFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTERMaXN0RWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxETGlzdEVsZW1lbnQucHJvdG90eXBlLCBcImNvbXBhY3RcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiY29tcGFjdFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb21wYWN0XCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiY29tcGFjdFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxETGlzdEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxETGlzdEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxETGlzdEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTERMaXN0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTERMaXN0RWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxETGlzdEVsZW1lbnQ6IEhUTUxETGlzdEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MRExpc3RFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTERhdGFFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRGF0YUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRGF0YUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRGF0YUVsZW1lbnQucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTERhdGFFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MRGF0YUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxEYXRhRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRGF0YUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxEYXRhRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxEYXRhRWxlbWVudDogSFRNTERhdGFFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTERhdGFFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTERhdGFMaXN0RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTERhdGFMaXN0RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxEYXRhTGlzdEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTERhdGFMaXN0RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTERhdGFMaXN0RWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTERhdGFMaXN0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRGF0YUxpc3RFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MRGF0YUxpc3RFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTERhdGFMaXN0RWxlbWVudDogSFRNTERhdGFMaXN0RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxEYXRhTGlzdEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MRGlhbG9nRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTERpYWxvZ0VsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRGlhbG9nRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxEaWFsb2dFbGVtZW50LnByb3RvdHlwZSwgXCJvcGVuXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm9wZW5cIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwib3BlblwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcIm9wZW5cIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MRGlhbG9nRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTERpYWxvZ0VsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxEaWFsb2dFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxEaWFsb2dFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MRGlhbG9nRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxEaWFsb2dFbGVtZW50OiBIVE1MRGlhbG9nRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxEaWFsb2dFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTERpcmVjdG9yeUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxEaXJlY3RvcnlFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTERpcmVjdG9yeUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRGlyZWN0b3J5RWxlbWVudC5wcm90b3R5cGUsIFwiY29tcGFjdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJjb21wYWN0XCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvbXBhY3RcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJjb21wYWN0XCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTERpcmVjdG9yeUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxEaXJlY3RvcnlFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRGlyZWN0b3J5RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRGlyZWN0b3J5RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTERpcmVjdG9yeUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MRGlyZWN0b3J5RWxlbWVudDogSFRNTERpcmVjdG9yeUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MRGlyZWN0b3J5RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxEaXZFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxEaXZFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTERpdkVsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTERpdkVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxEaXZFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTERpdkVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MRGl2RWxlbWVudDogSFRNTERpdkVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MRGl2RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBFbGVtZW50ID0gcmVxdWlyZShcIi4vRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgbWl4aW4gPSB1dGlscy5taXhpbjtcbmNvbnN0IEVsZW1lbnRDU1NJbmxpbmVTdHlsZSA9IHJlcXVpcmUoXCIuL0VsZW1lbnRDU1NJbmxpbmVTdHlsZS5qc1wiKTtcbmNvbnN0IEdsb2JhbEV2ZW50SGFuZGxlcnMgPSByZXF1aXJlKFwiLi9HbG9iYWxFdmVudEhhbmRsZXJzLmpzXCIpO1xuY29uc3QgRWxlbWVudENvbnRlbnRFZGl0YWJsZSA9IHJlcXVpcmUoXCIuL0VsZW1lbnRDb250ZW50RWRpdGFibGUuanNcIik7XG5cbmZ1bmN0aW9uIEhUTUxFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRWxlbWVudC5wcm90b3R5cGUsIEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEVsZW1lbnQsIEVsZW1lbnQuaW50ZXJmYWNlKTtcblxubWl4aW4oSFRNTEVsZW1lbnQucHJvdG90eXBlLCBFbGVtZW50Q1NTSW5saW5lU3R5bGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5FbGVtZW50Q1NTSW5saW5lU3R5bGUubWl4ZWRJbnRvLnB1c2goSFRNTEVsZW1lbnQpO1xubWl4aW4oSFRNTEVsZW1lbnQucHJvdG90eXBlLCBHbG9iYWxFdmVudEhhbmRsZXJzLmludGVyZmFjZS5wcm90b3R5cGUpO1xuR2xvYmFsRXZlbnRIYW5kbGVycy5taXhlZEludG8ucHVzaChIVE1MRWxlbWVudCk7XG5taXhpbihIVE1MRWxlbWVudC5wcm90b3R5cGUsIEVsZW1lbnRDb250ZW50RWRpdGFibGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5FbGVtZW50Q29udGVudEVkaXRhYmxlLm1peGVkSW50by5wdXNoKEhUTUxFbGVtZW50KTtcblxuSFRNTEVsZW1lbnQucHJvdG90eXBlLmNsaWNrID0gZnVuY3Rpb24gY2xpY2soKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmNsaWNrKCk7XG59O1xuXG5IVE1MRWxlbWVudC5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbiBmb2N1cygpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uZm9jdXMoKTtcbn07XG5cbkhUTUxFbGVtZW50LnByb3RvdHlwZS5ibHVyID0gZnVuY3Rpb24gYmx1cigpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uYmx1cigpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsIFwidGl0bGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInRpdGxlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbGVtZW50LnByb3RvdHlwZSwgXCJsYW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJsYW5nXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVsZW1lbnQucHJvdG90eXBlLCBcImRpclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5kaXI7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uZGlyID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbGVtZW50LnByb3RvdHlwZSwgXCJoaWRkZW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiaGlkZGVuXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhpZGRlblwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImhpZGRlblwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVsZW1lbnQucHJvdG90eXBlLCBcInRhYkluZGV4XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnRhYkluZGV4O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS50YWJJbmRleCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRWxlbWVudC5wcm90b3R5cGUsIFwiYWNjZXNzS2V5XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhY2Nlc3NLZXlcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFjY2Vzc0tleVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbGVtZW50LnByb3RvdHlwZSwgXCJvZmZzZXRQYXJlbnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub2Zmc2V0UGFyZW50KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbGVtZW50LnByb3RvdHlwZSwgXCJvZmZzZXRUb3BcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub2Zmc2V0VG9wO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVsZW1lbnQucHJvdG90eXBlLCBcIm9mZnNldExlZnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub2Zmc2V0TGVmdDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbGVtZW50LnByb3RvdHlwZSwgXCJvZmZzZXRXaWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5vZmZzZXRXaWR0aDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbGVtZW50LnByb3RvdHlwZSwgXCJvZmZzZXRIZWlnaHRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub2Zmc2V0SGVpZ2h0O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MRWxlbWVudDogSFRNTEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxFbWJlZEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxFbWJlZEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRW1iZWRFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVtYmVkRWxlbWVudC5wcm90b3R5cGUsIFwic3JjXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNyYztcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zcmMgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVtYmVkRWxlbWVudC5wcm90b3R5cGUsIFwidHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbWJlZEVsZW1lbnQucHJvdG90eXBlLCBcIndpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRW1iZWRFbGVtZW50LnByb3RvdHlwZSwgXCJoZWlnaHRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImhlaWdodFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVtYmVkRWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxFbWJlZEVsZW1lbnQucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEVtYmVkRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEVtYmVkRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEVtYmVkRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRW1iZWRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MRW1iZWRFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTEVtYmVkRWxlbWVudDogSFRNTEVtYmVkRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxFbWJlZEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MRmllbGRTZXRFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRmllbGRTZXRFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEZpZWxkU2V0RWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGaWVsZFNldEVsZW1lbnQucHJvdG90eXBlLCBcImRpc2FibGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGaWVsZFNldEVsZW1lbnQucHJvdG90eXBlLCBcImZvcm1cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZm9ybSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRmllbGRTZXRFbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxGaWVsZFNldEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxGaWVsZFNldEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxGaWVsZFNldEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEZpZWxkU2V0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTEZpZWxkU2V0RWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxGaWVsZFNldEVsZW1lbnQ6IEhUTUxGaWVsZFNldEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MRmllbGRTZXRFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTEZvbnRFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRm9udEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MRm9udEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRm9udEVsZW1lbnQucHJvdG90eXBlLCBcImNvbG9yXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjb2xvclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvbG9yXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvbnRFbGVtZW50LnByb3RvdHlwZSwgXCJmYWNlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJmYWNlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJmYWNlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvbnRFbGVtZW50LnByb3RvdHlwZSwgXCJzaXplXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzaXplXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzaXplXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxGb250RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEZvbnRFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRm9udEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEZvbnRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MRm9udEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MRm9udEVsZW1lbnQ6IEhUTUxGb250RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxGb250RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxGb3JtRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEZvcm1FbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5cbkhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuc3VibWl0ID0gZnVuY3Rpb24gc3VibWl0KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5zdWJtaXQoKTtcbn07XG5cbkhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0ucmVzZXQoKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgXCJhY2NlcHRDaGFyc2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhY2NlcHQtY2hhcnNldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWNjZXB0LWNoYXJzZXRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCBcImFjdGlvblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5hY3Rpb247XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uYWN0aW9uID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsIFwiZW5jdHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5lbmN0eXBlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmVuY3R5cGUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgXCJtZXRob2RcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubWV0aG9kO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLm1ldGhvZCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCBcIm5vVmFsaWRhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwibm9WYWxpZGF0ZVwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJub1ZhbGlkYXRlXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwibm9WYWxpZGF0ZVwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgXCJ0YXJnZXRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInRhcmdldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZSwgXCJlbGVtZW50c1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5lbGVtZW50cyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5sZW5ndGg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MRm9ybUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxGb3JtRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxGb3JtRWxlbWVudDogSFRNTEZvcm1FbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEZvcm1FbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTEZyYW1lRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxGcmFtZUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwic2Nyb2xsaW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzY3JvbGxpbmdcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNjcm9sbGluZ1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcInNyY1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zcmM7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc3JjID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImZyYW1lQm9yZGVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJmcmFtZUJvcmRlclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZnJhbWVCb3JkZXJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJsb25nRGVzY1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5sb25nRGVzYztcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5sb25nRGVzYyA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJub1Jlc2l6ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJub1Jlc2l6ZVwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJub1Jlc2l6ZVwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcIm5vUmVzaXplXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50RG9jdW1lbnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY29udGVudERvY3VtZW50KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY29udGVudFdpbmRvdyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJtYXJnaW5IZWlnaHRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm1hcmdpbkhlaWdodFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm1hcmdpbkhlaWdodFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcIm1hcmdpbldpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJtYXJnaW5XaWR0aFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm1hcmdpbldpZHRoXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxGcmFtZUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxGcmFtZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTEZyYW1lRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxGcmFtZUVsZW1lbnQ6IEhUTUxGcmFtZUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MRnJhbWVFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IG1peGluID0gdXRpbHMubWl4aW47XG5jb25zdCBXaW5kb3dFdmVudEhhbmRsZXJzID0gcmVxdWlyZShcIi4vV2luZG93RXZlbnRIYW5kbGVycy5qc1wiKTtcblxuZnVuY3Rpb24gSFRNTEZyYW1lU2V0RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEZyYW1lU2V0RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxGcmFtZVNldEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbm1peGluKEhUTUxGcmFtZVNldEVsZW1lbnQucHJvdG90eXBlLCBXaW5kb3dFdmVudEhhbmRsZXJzLmludGVyZmFjZS5wcm90b3R5cGUpO1xuV2luZG93RXZlbnRIYW5kbGVycy5taXhlZEludG8ucHVzaChIVE1MRnJhbWVTZXRFbGVtZW50KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSwgXCJjb2xzXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjb2xzXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb2xzXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEZyYW1lU2V0RWxlbWVudC5wcm90b3R5cGUsIFwicm93c1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwicm93c1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwicm93c1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MRnJhbWVTZXRFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxGcmFtZVNldEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxGcmFtZVNldEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MRnJhbWVTZXRFbGVtZW50OiBIVE1MRnJhbWVTZXRFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEZyYW1lU2V0RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxIUkVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxIUkVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MSFJFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEhSRWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxIUkVsZW1lbnQucHJvdG90eXBlLCBcImNvbG9yXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjb2xvclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29sb3JcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSFJFbGVtZW50LnByb3RvdHlwZSwgXCJub1NoYWRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm5vU2hhZGVcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibm9TaGFkZVwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcIm5vU2hhZGVcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxIUkVsZW1lbnQucHJvdG90eXBlLCBcInNpemVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNpemVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNpemVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSFJFbGVtZW50LnByb3RvdHlwZSwgXCJ3aWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwid2lkdGhcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxIUkVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxIUkVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxIUkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEhSRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTEhSRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxIUkVsZW1lbnQ6IEhUTUxIUkVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MSFJFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTEhlYWRFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MSGVhZEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MSGVhZEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTEhlYWRFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MSGVhZEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxIZWFkRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MSGVhZEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxIZWFkRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxIZWFkRWxlbWVudDogSFRNTEhlYWRFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEhlYWRFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTEhlYWRpbmdFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MSGVhZGluZ0VsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MSGVhZGluZ0VsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSGVhZGluZ0VsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEhlYWRpbmdFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MSGVhZGluZ0VsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxIZWFkaW5nRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MSGVhZGluZ0VsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxIZWFkaW5nRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxIZWFkaW5nRWxlbWVudDogSFRNTEhlYWRpbmdFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEhlYWRpbmdFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTEh0bWxFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MSHRtbEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MSHRtbEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHRtbEVsZW1lbnQucHJvdG90eXBlLCBcInZlcnNpb25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZlcnNpb25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZlcnNpb25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEh0bWxFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MSHRtbEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxIdG1sRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MSHRtbEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxIdG1sRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxIdG1sRWxlbWVudDogSFRNTEh0bWxFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTEh0bWxFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMucHJvdG90eXBlLCBcImhyZWZcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaHJlZjtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5ocmVmID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmhyZWY7O1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMucHJvdG90eXBlLCBcIm9yaWdpblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5vcmlnaW47XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSwgXCJwcm90b2NvbFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wcm90b2NvbDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wcm90b2NvbCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSwgXCJ1c2VybmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS51c2VybmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS51c2VybmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSwgXCJwYXNzd29yZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wYXNzd29yZDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wYXNzd29yZCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSwgXCJob3N0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3Q7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaG9zdCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSwgXCJob3N0bmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0bmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5ob3N0bmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSwgXCJwb3J0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnBvcnQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucG9ydCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSwgXCJwYXRobmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wYXRobmFtZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wYXRobmFtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSwgXCJzZWFyY2hcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VhcmNoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNlYXJjaCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSwgXCJoYXNoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhhc2g7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaGFzaCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEh5cGVybGlua0VsZW1lbnRVdGlsc1wiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHMsXG4gIGV4cG9zZToge1xuICAgIFxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTElGcmFtZUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTElGcmFtZUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLmdldFNWR0RvY3VtZW50ID0gZnVuY3Rpb24gZ2V0U1ZHRG9jdW1lbnQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmdldFNWR0RvY3VtZW50KCkpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwic3JjXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNyYztcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zcmMgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcInNyY2RvY1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwic3JjZG9jXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzcmNkb2NcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJzZWFtbGVzc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWFtbGVzcztcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc2VhbWxlc3MgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImFsbG93RnVsbHNjcmVlblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJhbGxvd0Z1bGxzY3JlZW5cIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxsb3dGdWxsc2NyZWVuXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiYWxsb3dGdWxsc2NyZWVuXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwid2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJoZWlnaHRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImhlaWdodFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnREb2N1bWVudFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jb250ZW50RG9jdW1lbnQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY29udGVudFdpbmRvdyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJzY3JvbGxpbmdcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNjcm9sbGluZ1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic2Nyb2xsaW5nXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImZyYW1lQm9yZGVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJmcmFtZUJvcmRlclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZnJhbWVCb3JkZXJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwibG9uZ0Rlc2NcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubG9uZ0Rlc2M7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ubG9uZ0Rlc2MgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcIm1hcmdpbkhlaWdodFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibWFyZ2luSGVpZ2h0XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibWFyZ2luSGVpZ2h0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcIm1hcmdpbldpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJtYXJnaW5XaWR0aFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm1hcmdpbldpZHRoXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MSUZyYW1lRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxJRnJhbWVFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTElGcmFtZUVsZW1lbnQ6IEhUTUxJRnJhbWVFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTElGcmFtZUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MSW1hZ2VFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTEltYWdlRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcImFsdFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWx0XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbHRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJzcmNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc3JjO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNyYyA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJzcmNzZXRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNyY3NldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3Jjc2V0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwic2l6ZXNcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNpemVzXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzaXplc1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcImNyb3NzT3JpZ2luXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjcm9zc09yaWdpblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgaWYgKFYgPT09IG51bGwgfHwgViA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBWID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB9XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjcm9zc09yaWdpblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcInVzZU1hcFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidXNlTWFwXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ1c2VNYXBcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJpc01hcFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJpc01hcFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJpc01hcFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImlzTWFwXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJ3aWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS53aWR0aDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ud2lkdGggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhlaWdodDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaGVpZ2h0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcIm5hdHVyYWxXaWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5uYXR1cmFsV2lkdGg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJuYXR1cmFsSGVpZ2h0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm5hdHVyYWxIZWlnaHQ7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJjb21wbGV0ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jb21wbGV0ZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcImN1cnJlbnRTcmNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY3VycmVudFNyYztcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJsb3dzcmNcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImxvd3NyY1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibG93c3JjXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlLCBcImhzcGFjZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwiaHNwYWNlXCIpKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgLTIxNDc0ODM2NDggfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3ID8gMCA6IHZhbHVlXG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhzcGFjZVwiLCBTdHJpbmcoVikpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwidnNwYWNlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJ2c3BhY2VcIikpO1xuICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAtMjE0NzQ4MzY0OCB8fCB2YWx1ZSA+IDIxNDc0ODM2NDcgPyAwIDogdmFsdWVcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJsb25nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidnNwYWNlXCIsIFN0cmluZyhWKSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSwgXCJsb25nRGVzY1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibG9uZ0Rlc2NcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImxvbmdEZXNjXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUsIFwiYm9yZGVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJib3JkZXJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJib3JkZXJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTEltYWdlRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MSW1hZ2VFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MSW1hZ2VFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTEltYWdlRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxJbWFnZUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MSW5wdXRFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTElucHV0RWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuXG5IVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbiBzZWxlY3QoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnNlbGVjdCgpO1xufTtcblxuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuc2V0UmFuZ2VUZXh0ID0gZnVuY3Rpb24gc2V0UmFuZ2VUZXh0KHJlcGxhY2VtZW50KSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0UmFuZ2VUZXh0JyBvbiAnSFRNTElucHV0RWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDQ7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uc2V0UmFuZ2VUZXh0KC4uLmFyZ3MpO1xufTtcblxuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUuc2V0U2VsZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbiBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0U2VsZWN0aW9uUmFuZ2UnIG9uICdIVE1MSW5wdXRFbGVtZW50JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDM7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oYXJnc1sxXSk7XG4gIGlmIChhcmdzWzJdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnNldFNlbGVjdGlvblJhbmdlKC4uLmFyZ3MpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJhY2NlcHRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFjY2VwdFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWNjZXB0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiYWx0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbHRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsdFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImF1dG9jb21wbGV0ZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYXV0b2NvbXBsZXRlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhdXRvY29tcGxldGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJhdXRvZm9jdXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiYXV0b2ZvY3VzXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImF1dG9mb2N1c1wiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImF1dG9mb2N1c1wiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiZGVmYXVsdENoZWNrZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiY2hlY2tlZFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiY2hlY2tlZFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiY2hlY2tlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jaGVja2VkO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgdGhpc1tpbXBsXS5jaGVja2VkID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImRpck5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImRpck5hbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRpck5hbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJkaXNhYmxlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJmb3JtXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmZvcm0pO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiZmlsZXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZmlsZXMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiZm9ybU5vVmFsaWRhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiZm9ybU5vVmFsaWRhdGVcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZm9ybU5vVmFsaWRhdGVcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJmb3JtTm9WYWxpZGF0ZVwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiZm9ybVRhcmdldFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZm9ybVRhcmdldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZm9ybVRhcmdldFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImlucHV0TW9kZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiaW5wdXRNb2RlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJpbnB1dE1vZGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJtYXhcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm1heFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibWF4XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibWF4TGVuZ3RoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm1heExlbmd0aDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJsb25nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ubWF4TGVuZ3RoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcIm1pblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibWluXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJtaW5MZW5ndGhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubWluTGVuZ3RoO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5taW5MZW5ndGggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibXVsdGlwbGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwibXVsdGlwbGVcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibXVsdGlwbGVcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcInBhdHRlcm5cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInBhdHRlcm5cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInBhdHRlcm5cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJwbGFjZWhvbGRlclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInBsYWNlaG9sZGVyXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwicmVhZE9ubHlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwicmVhZE9ubHlcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwicmVhZE9ubHlcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJyZWFkT25seVwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwicmVxdWlyZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwicmVxdWlyZWRcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwicmVxdWlyZWRcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zaXplO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zaXplID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcInNyY1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwic3JjXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJzdGVwXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwidHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS50eXBlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnR5cGUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiZGVmYXVsdFZhbHVlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS52YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXNbaW1wbF0udmFsdWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwic2VsZWN0aW9uU3RhcnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VsZWN0aW9uU3RhcnQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgaWYgKFYgPT09IG51bGwgfHwgViA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBWID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgfVxuICAgIHRoaXNbaW1wbF0uc2VsZWN0aW9uU3RhcnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwic2VsZWN0aW9uRW5kXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNlbGVjdGlvbkVuZDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBpZiAoViA9PT0gbnVsbCB8fCBWID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFYgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICB9XG4gICAgdGhpc1tpbXBsXS5zZWxlY3Rpb25FbmQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwic2VsZWN0aW9uRGlyZWN0aW9uXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNlbGVjdGlvbkRpcmVjdGlvbjtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBpZiAoViA9PT0gbnVsbCB8fCBWID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFYgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIH1cbiAgICB0aGlzW2ltcGxdLnNlbGVjdGlvbkRpcmVjdGlvbiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSwgXCJhbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwidXNlTWFwXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ1c2VNYXBcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInVzZU1hcFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MSW5wdXRFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxJbnB1dEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MSW5wdXRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTElucHV0RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxMSUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxMSUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTElFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTExJRWxlbWVudC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgLTIxNDc0ODM2NDggfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3ID8gMCA6IHZhbHVlXG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIFN0cmluZyhWKSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTElFbGVtZW50LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxMSUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxMSUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxMSUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTExJRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTExJRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxMSUVsZW1lbnQ6IEhUTUxMSUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MTElFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTExhYmVsRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTExhYmVsRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxMYWJlbEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTGFiZWxFbGVtZW50LnByb3RvdHlwZSwgXCJmb3JtXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmZvcm0pO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTExhYmVsRWxlbWVudC5wcm90b3R5cGUsIFwiaHRtbEZvclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZm9yXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJmb3JcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTExhYmVsRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTExhYmVsRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTExhYmVsRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTGFiZWxFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MTGFiZWxFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTExhYmVsRWxlbWVudDogSFRNTExhYmVsRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxMYWJlbEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MTGVnZW5kRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTExlZ2VuZEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTGVnZW5kRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMZWdlbmRFbGVtZW50LnByb3RvdHlwZSwgXCJmb3JtXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmZvcm0pO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTExlZ2VuZEVsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTExlZ2VuZEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxMZWdlbmRFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTGVnZW5kRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTGVnZW5kRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTExlZ2VuZEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MTGVnZW5kRWxlbWVudDogSFRNTExlZ2VuZEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MTGVnZW5kRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBtaXhpbiA9IHV0aWxzLm1peGluO1xuY29uc3QgTGlua1N0eWxlID0gcmVxdWlyZShcIi4vTGlua1N0eWxlLmpzXCIpO1xuXG5mdW5jdGlvbiBIVE1MTGlua0VsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxMaW5rRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxubWl4aW4oSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZSwgTGlua1N0eWxlLmludGVyZmFjZS5wcm90b3R5cGUpO1xuTGlua1N0eWxlLm1peGVkSW50by5wdXNoKEhUTUxMaW5rRWxlbWVudCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZSwgXCJocmVmXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhyZWY7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaHJlZiA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTGlua0VsZW1lbnQucHJvdG90eXBlLCBcImNyb3NzT3JpZ2luXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjcm9zc09yaWdpblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgaWYgKFYgPT09IG51bGwgfHwgViA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBWID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB9XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjcm9zc09yaWdpblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsIFwicmVsXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJyZWxcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInJlbFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsIFwibWVkaWFcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm1lZGlhXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsIFwiaHJlZmxhbmdcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImhyZWZsYW5nXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJocmVmbGFuZ1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsIFwidHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsIFwiY2hhcnNldFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY2hhcnNldFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsIFwicmV2XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJyZXZcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInJldlwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUsIFwidGFyZ2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInRhcmdldFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MTGlua0VsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxMaW5rRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTExpbmtFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxMaW5rRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTExpbmtFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTExpbmtFbGVtZW50OiBIVE1MTGlua0VsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MTGlua0VsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MTWFwRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE1hcEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTWFwRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNYXBFbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1hcEVsZW1lbnQucHJvdG90eXBlLCBcImFyZWFzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmFyZWFzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MTWFwRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTE1hcEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxNYXBFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxNYXBFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MTWFwRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxNYXBFbGVtZW50OiBIVE1MTWFwRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxNYXBFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTE1lZGlhRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxNZWRpYUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIGxvYWQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmxvYWQoKTtcbn07XG5cbkhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmNhblBsYXlUeXBlID0gZnVuY3Rpb24gY2FuUGxheVR5cGUodHlwZSkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NhblBsYXlUeXBlJyBvbiAnSFRNTE1lZGlhRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY2FuUGxheVR5cGUoLi4uYXJncykpO1xufTtcblxuSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uIHBsYXkoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnBsYXkoKTtcbn07XG5cbkhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gcGF1c2UoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnBhdXNlKCk7XG59O1xuXG5IVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5hZGRUZXh0VHJhY2sgPSBmdW5jdGlvbiBhZGRUZXh0VHJhY2soa2luZCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2FkZFRleHRUcmFjaycgb24gJ0hUTUxNZWRpYUVsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1sxXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzFdID0gXCJcIjtcbiAgfVxuICBpZiAoYXJnc1syXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMl0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzJdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzJdID0gXCJcIjtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5hZGRUZXh0VHJhY2soLi4uYXJncykpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJzcmNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc3JjO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNyYyA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJjdXJyZW50U3JjXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmN1cnJlbnRTcmM7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJjcm9zc09yaWdpblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY3Jvc3NPcmlnaW5cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgfVxuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY3Jvc3NPcmlnaW5cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LCBcIk5FVFdPUktfRU1QVFlcIiwge1xuICB2YWx1ZTogMCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiTkVUV09SS19FTVBUWVwiLCB7XG4gIHZhbHVlOiAwLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQsIFwiTkVUV09SS19JRExFXCIsIHtcbiAgdmFsdWU6IDEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcIk5FVFdPUktfSURMRVwiLCB7XG4gIHZhbHVlOiAxLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQsIFwiTkVUV09SS19MT0FESU5HXCIsIHtcbiAgdmFsdWU6IDIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcIk5FVFdPUktfTE9BRElOR1wiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQsIFwiTkVUV09SS19OT19TT1VSQ0VcIiwge1xuICB2YWx1ZTogMyxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiTkVUV09SS19OT19TT1VSQ0VcIiwge1xuICB2YWx1ZTogMyxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJuZXR3b3JrU3RhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubmV0d29ya1N0YXRlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwicHJlbG9hZFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwicHJlbG9hZFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwicHJlbG9hZFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcImJ1ZmZlcmVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmJ1ZmZlcmVkKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQsIFwiSEFWRV9OT1RISU5HXCIsIHtcbiAgdmFsdWU6IDAsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcIkhBVkVfTk9USElOR1wiLCB7XG4gIHZhbHVlOiAwLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQsIFwiSEFWRV9NRVRBREFUQVwiLCB7XG4gIHZhbHVlOiAxLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJIQVZFX01FVEFEQVRBXCIsIHtcbiAgdmFsdWU6IDEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudCwgXCJIQVZFX0NVUlJFTlRfREFUQVwiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJIQVZFX0NVUlJFTlRfREFUQVwiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQsIFwiSEFWRV9GVVRVUkVfREFUQVwiLCB7XG4gIHZhbHVlOiAzLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJIQVZFX0ZVVFVSRV9EQVRBXCIsIHtcbiAgdmFsdWU6IDMsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudCwgXCJIQVZFX0VOT1VHSF9EQVRBXCIsIHtcbiAgdmFsdWU6IDQsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcIkhBVkVfRU5PVUdIX0RBVEFcIiwge1xuICB2YWx1ZTogNCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJyZWFkeVN0YXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnJlYWR5U3RhdGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJzZWVraW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNlZWtpbmc7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJjdXJyZW50VGltZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jdXJyZW50VGltZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJkb3VibGVcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5jdXJyZW50VGltZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJkdXJhdGlvblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5kdXJhdGlvbjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcInBhdXNlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wYXVzZWQ7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJkZWZhdWx0UGxheWJhY2tSYXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmRlZmF1bHRQbGF5YmFja1JhdGU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiZG91YmxlXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uZGVmYXVsdFBsYXliYWNrUmF0ZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJwbGF5YmFja1JhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGxheWJhY2tSYXRlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImRvdWJsZVwiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBsYXliYWNrUmF0ZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJwbGF5ZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucGxheWVkKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcInNlZWthYmxlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnNlZWthYmxlKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcImVuZGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmVuZGVkO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiYXV0b3BsYXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiYXV0b3BsYXlcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYXV0b3BsYXlcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJhdXRvcGxheVwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwibG9vcFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJsb29wXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImxvb3BcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJsb29wXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJjb250cm9sc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJjb250cm9sc1wiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb250cm9sc1wiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImNvbnRyb2xzXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJ2b2x1bWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udm9sdW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImRvdWJsZVwiXShWKTtcbiAgICB0aGlzW2ltcGxdLnZvbHVtZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSwgXCJtdXRlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5tdXRlZDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ubXV0ZWQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUsIFwiZGVmYXVsdE11dGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm11dGVkXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm11dGVkXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwibXV0ZWRcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcImF1ZGlvVHJhY2tzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmF1ZGlvVHJhY2tzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcInZpZGVvVHJhY2tzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnZpZGVvVHJhY2tzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLCBcInRleHRUcmFja3NcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0udGV4dFRyYWNrcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTE1lZGlhRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTE1lZGlhRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MTWVkaWFFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTE1lZGlhRWxlbWVudDogSFRNTE1lZGlhRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxNZWRpYUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MTWVudUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxNZW51RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxNZW51RWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZW51RWxlbWVudC5wcm90b3R5cGUsIFwidHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZW51RWxlbWVudC5wcm90b3R5cGUsIFwibGFiZWxcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImxhYmVsXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJsYWJlbFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZW51RWxlbWVudC5wcm90b3R5cGUsIFwiY29tcGFjdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJjb21wYWN0XCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvbXBhY3RcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJjb21wYWN0XCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTE1lbnVFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MTWVudUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxNZW51RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTWVudUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxNZW51RWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxNZW51RWxlbWVudDogSFRNTE1lbnVFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTE1lbnVFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTE1ldGFFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTWV0YUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlLCBcImh0dHBFcXVpdlwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiaHR0cC1lcXVpdlwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaHR0cC1lcXVpdlwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZXRhRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29udGVudFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxNZXRhRWxlbWVudC5wcm90b3R5cGUsIFwic2NoZW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzY2hlbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNjaGVtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MTWV0YUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxNZXRhRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTE1ldGFFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxNZXRhRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTE1ldGFFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTE1ldGFFbGVtZW50OiBIVE1MTWV0YUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MTWV0YUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MTWV0ZXJFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTWV0ZXJFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE1ldGVyRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuXG5IVE1MTWV0ZXJFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MTWV0ZXJFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MTWV0ZXJFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxNZXRlckVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxNZXRlckVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MTWV0ZXJFbGVtZW50OiBIVE1MTWV0ZXJFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTE1ldGVyRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxNb2RFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MTW9kRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxNb2RFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE1vZEVsZW1lbnQucHJvdG90eXBlLCBcImNpdGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNpdGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNpdGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MTW9kRWxlbWVudC5wcm90b3R5cGUsIFwiZGF0ZVRpbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImRhdGVUaW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkYXRlVGltZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MTW9kRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTE1vZEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxNb2RFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxNb2RFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MTW9kRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxNb2RFbGVtZW50OiBIVE1MTW9kRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxNb2RFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTE9MaXN0RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE9MaXN0RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxPTGlzdEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT0xpc3RFbGVtZW50LnByb3RvdHlwZSwgXCJyZXZlcnNlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJyZXZlcnNlZFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJyZXZlcnNlZFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcInJldmVyc2VkXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT0xpc3RFbGVtZW50LnByb3RvdHlwZSwgXCJzdGFydFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwic3RhcnRcIikpO1xuICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAtMjE0NzQ4MzY0OCB8fCB2YWx1ZSA+IDIxNDc0ODM2NDcgPyAwIDogdmFsdWVcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJsb25nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3RhcnRcIiwgU3RyaW5nKFYpKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPTGlzdEVsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInR5cGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT0xpc3RFbGVtZW50LnByb3RvdHlwZSwgXCJjb21wYWN0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImNvbXBhY3RcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29tcGFjdFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImNvbXBhY3RcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MT0xpc3RFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MT0xpc3RFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MT0xpc3RFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxPTGlzdEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxPTGlzdEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MT0xpc3RFbGVtZW50OiBIVE1MT0xpc3RFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTE9MaXN0RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxPYmplY3RFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxPYmplY3RFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLCBcImRhdGFcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uZGF0YTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5kYXRhID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwidXNlTWFwXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ1c2VNYXBcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInVzZU1hcFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJmb3JtXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmZvcm0pO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLCBcIndpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiaGVpZ2h0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50RG9jdW1lbnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY29udGVudERvY3VtZW50KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJhbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLCBcImFyY2hpdmVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFyY2hpdmVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFyY2hpdmVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiY29kZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY29kZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29kZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJkZWNsYXJlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImRlY2xhcmVcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGVjbGFyZVwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRlY2xhcmVcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJoc3BhY2VcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcImhzcGFjZVwiKSk7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDAgfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3ID8gMCA6IHZhbHVlXG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICBWID0gViA+IDIxNDc0ODM2NDcgPyAwIDogVjtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhzcGFjZVwiLCBTdHJpbmcoVikpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9iamVjdEVsZW1lbnQucHJvdG90eXBlLCBcInN0YW5kYnlcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInN0YW5kYnlcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInN0YW5kYnlcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwidnNwYWNlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJ2c3BhY2VcIikpO1xuICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAwIHx8IHZhbHVlID4gMjE0NzQ4MzY0NyA/IDAgOiB2YWx1ZVxuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgViA9IFYgPiAyMTQ3NDgzNjQ3ID8gMCA6IFY7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ2c3BhY2VcIiwgU3RyaW5nKFYpKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJjb2RlQmFzZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jb2RlQmFzZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5jb2RlQmFzZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGUsIFwiY29kZVR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNvZGVUeXBlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb2RlVHlwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSwgXCJib3JkZXJcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImJvcmRlclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYsIHsgdHJlYXROdWxsQXNFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImJvcmRlclwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MT2JqZWN0RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTE9iamVjdEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxPYmplY3RFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MT2JqZWN0RWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxPYmplY3RFbGVtZW50OiBIVE1MT2JqZWN0RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxPYmplY3RFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTE9wdEdyb3VwRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE9wdEdyb3VwRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxPcHRHcm91cEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT3B0R3JvdXBFbGVtZW50LnByb3RvdHlwZSwgXCJkaXNhYmxlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT3B0R3JvdXBFbGVtZW50LnByb3RvdHlwZSwgXCJsYWJlbFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibGFiZWxcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImxhYmVsXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxPcHRHcm91cEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxPcHRHcm91cEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxPcHRHcm91cEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTE9wdEdyb3VwRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTE9wdEdyb3VwRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxPcHRHcm91cEVsZW1lbnQ6IEhUTUxPcHRHcm91cEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MT3B0R3JvdXBFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTE9wdGlvbkVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE9wdGlvbkVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUsIFwiZGlzYWJsZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLCBcImZvcm1cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZm9ybSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUsIFwibGFiZWxcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubGFiZWw7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ubGFiZWwgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLCBcImRlZmF1bHRTZWxlY3RlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJzZWxlY3RlZFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzZWxlY3RlZFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcInNlbGVjdGVkXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VsZWN0ZWQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNlbGVjdGVkID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS52YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS52YWx1ZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS50ZXh0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnRleHQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlLCBcImluZGV4XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmluZGV4O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxPcHRpb25FbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MT3B0aW9uRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTE9wdGlvbkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxPcHRpb25FbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTE9wdGlvbkVsZW1lbnQ6IEhUTUxPcHRpb25FbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTE9wdGlvbkVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MT3V0cHV0RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTE91dHB1dEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MT3V0cHV0RWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxPdXRwdXRFbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxPdXRwdXRFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MT3V0cHV0RWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTE91dHB1dEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTE91dHB1dEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxPdXRwdXRFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTE91dHB1dEVsZW1lbnQ6IEhUTUxPdXRwdXRFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTE91dHB1dEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MUGFyYWdyYXBoRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFBhcmFncmFwaEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MUGFyYWdyYXBoRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxQYXJhZ3JhcGhFbGVtZW50LnByb3RvdHlwZSwgXCJhbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxQYXJhZ3JhcGhFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MUGFyYWdyYXBoRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFBhcmFncmFwaEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFBhcmFncmFwaEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxQYXJhZ3JhcGhFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFBhcmFncmFwaEVsZW1lbnQ6IEhUTUxQYXJhZ3JhcGhFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFBhcmFncmFwaEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MUGFyYW1FbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MUGFyYW1FbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFBhcmFtRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxQYXJhbUVsZW1lbnQucHJvdG90eXBlLCBcIm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MUGFyYW1FbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFBhcmFtRWxlbWVudC5wcm90b3R5cGUsIFwidHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxQYXJhbUVsZW1lbnQucHJvdG90eXBlLCBcInZhbHVlVHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVUeXBlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVR5cGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFBhcmFtRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFBhcmFtRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFBhcmFtRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MUGFyYW1FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MUGFyYW1FbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFBhcmFtRWxlbWVudDogSFRNTFBhcmFtRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxQYXJhbUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MUHJlRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFByZUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MUHJlRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxQcmVFbGVtZW50LnByb3RvdHlwZSwgXCJ3aWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwid2lkdGhcIikpO1xuICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAtMjE0NzQ4MzY0OCB8fCB2YWx1ZSA+IDIxNDc0ODM2NDcgPyAwIDogdmFsdWVcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJsb25nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgU3RyaW5nKFYpKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MUHJlRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFByZUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxQcmVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxQcmVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MUHJlRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxQcmVFbGVtZW50OiBIVE1MUHJlRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxQcmVFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFByb2dyZXNzRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFByb2dyZXNzRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxQcm9ncmVzc0VsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTFByb2dyZXNzRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFByb2dyZXNzRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFByb2dyZXNzRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MUHJvZ3Jlc3NFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MUHJvZ3Jlc3NFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFByb2dyZXNzRWxlbWVudDogSFRNTFByb2dyZXNzRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxQcm9ncmVzc0VsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MUXVvdGVFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MUXVvdGVFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFF1b3RlRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxRdW90ZUVsZW1lbnQucHJvdG90eXBlLCBcImNpdGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNpdGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNpdGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFF1b3RlRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFF1b3RlRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFF1b3RlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MUXVvdGVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MUXVvdGVFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFF1b3RlRWxlbWVudDogSFRNTFF1b3RlRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxRdW90ZUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MU2NyaXB0RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MU2NyaXB0RWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSwgXCJzcmNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc3JjO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNyYyA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUsIFwidHlwZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSwgXCJjaGFyc2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjaGFyc2V0XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjaGFyc2V0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLCBcImRlZmVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImRlZmVyXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRlZmVyXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZGVmZXJcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSwgXCJjcm9zc09yaWdpblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY3Jvc3NPcmlnaW5cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgfVxuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY3Jvc3NPcmlnaW5cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS50ZXh0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnRleHQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLCBcIm5vbmNlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJub25jZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGUsIFwiZXZlbnRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImV2ZW50XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJldmVudFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSwgXCJodG1sRm9yXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJmb3JcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImZvclwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MU2NyaXB0RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFNjcmlwdEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxTY3JpcHRFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MU2NyaXB0RWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxTY3JpcHRFbGVtZW50OiBIVE1MU2NyaXB0RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxTY3JpcHRFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFNlbGVjdEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFNlbGVjdEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIGFkZChlbGVtZW50KSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWRkJyBvbiAnSFRNTFNlbGVjdEVsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1sxXSA9PT0gbnVsbCB8fCBhcmdzWzFdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzFdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5hZGQoLi4uYXJncyk7XG59O1xuXG5IVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5yZW1vdmUoLi4uYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgXCJhdXRvZm9jdXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiYXV0b2ZvY3VzXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImF1dG9mb2N1c1wiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImF1dG9mb2N1c1wiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLCBcImRpc2FibGVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgXCJmb3JtXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmZvcm0pO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLCBcIm11bHRpcGxlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm11bHRpcGxlXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm11bHRpcGxlXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwibXVsdGlwbGVcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgXCJuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLCBcInJlcXVpcmVkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcInJlcXVpcmVkXCIpO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oVik7XG4gICAgaWYgKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInJlcXVpcmVkXCIsIFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwicmVxdWlyZWRcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgXCJzaXplXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNpemU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnNpemUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udHlwZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgXCJvcHRpb25zXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9wdGlvbnMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5sZW5ndGg7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmxlbmd0aCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRPcHRpb25zXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnNlbGVjdGVkT3B0aW9ucyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRJbmRleFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWxlY3RlZEluZGV4O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zZWxlY3RlZEluZGV4ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS52YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS52YWx1ZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxTZWxlY3RFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFNlbGVjdEVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MU2VsZWN0RWxlbWVudDogSFRNTFNlbGVjdEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MU2VsZWN0RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxTb3VyY2VFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MU291cmNlRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxTb3VyY2VFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNvdXJjZUVsZW1lbnQucHJvdG90eXBlLCBcInNyY1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zcmM7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc3JjID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTb3VyY2VFbGVtZW50LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFNvdXJjZUVsZW1lbnQucHJvdG90eXBlLCBcInNyY3NldFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwic3Jjc2V0XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzcmNzZXRcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU291cmNlRWxlbWVudC5wcm90b3R5cGUsIFwic2l6ZXNcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNpemVzXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzaXplc1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTb3VyY2VFbGVtZW50LnByb3RvdHlwZSwgXCJtZWRpYVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibWVkaWFcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxTb3VyY2VFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MU291cmNlRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFNvdXJjZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFNvdXJjZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxTb3VyY2VFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFNvdXJjZUVsZW1lbnQ6IEhUTUxTb3VyY2VFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFNvdXJjZUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MU3BhbkVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxTcGFuRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuXG5IVE1MU3BhbkVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxTcGFuRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFNwYW5FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxTcGFuRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFNwYW5FbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFNwYW5FbGVtZW50OiBIVE1MU3BhbkVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MU3BhbkVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgbWl4aW4gPSB1dGlscy5taXhpbjtcbmNvbnN0IExpbmtTdHlsZSA9IHJlcXVpcmUoXCIuL0xpbmtTdHlsZS5qc1wiKTtcblxuZnVuY3Rpb24gSFRNTFN0eWxlRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFN0eWxlRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxTdHlsZUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbm1peGluKEhUTUxTdHlsZUVsZW1lbnQucHJvdG90eXBlLCBMaW5rU3R5bGUuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5MaW5rU3R5bGUubWl4ZWRJbnRvLnB1c2goSFRNTFN0eWxlRWxlbWVudCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFN0eWxlRWxlbWVudC5wcm90b3R5cGUsIFwibWVkaWFcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm1lZGlhXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTdHlsZUVsZW1lbnQucHJvdG90eXBlLCBcIm5vbmNlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJub25jZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MU3R5bGVFbGVtZW50LnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxTdHlsZUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxTdHlsZUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxTdHlsZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFN0eWxlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFN0eWxlRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxTdHlsZUVsZW1lbnQ6IEhUTUxTdHlsZUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MU3R5bGVFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUYWJsZUNhcHRpb25FbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVGFibGVDYXB0aW9uRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZUNhcHRpb25FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZUNhcHRpb25FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFRhYmxlQ2VsbEVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRhYmxlQ2VsbEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUsIFwiY29sU3BhblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jb2xTcGFuO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5jb2xTcGFuID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSwgXCJyb3dTcGFuXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnJvd1NwYW47XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnJvd1NwYW4gPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcImhlYWRlcnNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uaGVhZGVycyk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpcy5oZWFkZXJzLnZhbHVlID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSwgXCJjZWxsSW5kZXhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2VsbEluZGV4O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUsIFwiYXhpc1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYXhpc1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYXhpc1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSwgXCJoZWlnaHRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImhlaWdodFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcIndpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUsIFwiY2hcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNoYXJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUsIFwiY2hPZmZcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJvZmZcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNoYXJvZmZcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDZWxsRWxlbWVudC5wcm90b3R5cGUsIFwibm9XcmFwXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm5vV3JhcFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJub1dyYXBcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJub1dyYXBcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZSwgXCJ2QWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZBbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidkFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcImJnQ29sb3JcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImJnQ29sb3JcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJiZ0NvbG9yXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxUYWJsZUNlbGxFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVGFibGVDZWxsRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRhYmxlQ2VsbEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxUYWJsZUNlbGxFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6IEhUTUxUYWJsZUNlbGxFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFRhYmxlQ2VsbEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MVGFibGVDb2xFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRhYmxlQ29sRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUNvbEVsZW1lbnQucHJvdG90eXBlLCBcInNwYW5cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcInNwYW5cIikpO1xuICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAwIHx8IHZhbHVlID4gMjE0NzQ4MzY0NyA/IDAgOiB2YWx1ZVxuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oVik7XG4gICAgViA9IFYgPiAyMTQ3NDgzNjQ3ID8gMCA6IFY7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzcGFuXCIsIFN0cmluZyhWKSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZSwgXCJhbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlQ29sRWxlbWVudC5wcm90b3R5cGUsIFwiY2hcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNoYXJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZSwgXCJjaE9mZlwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY2hhcm9mZlwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY2hhcm9mZlwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUNvbEVsZW1lbnQucHJvdG90eXBlLCBcInZBbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidkFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ2QWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVDb2xFbGVtZW50LnByb3RvdHlwZSwgXCJ3aWR0aFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwid2lkdGhcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxUYWJsZUNvbEVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxUYWJsZUNvbEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZUNvbEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRhYmxlQ29sRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFRhYmxlQ29sRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxUYWJsZUNvbEVsZW1lbnQ6IEhUTUxUYWJsZUNvbEVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MVGFibGVDb2xFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxUYWJsZUNlbGxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTFRhYmxlQ2VsbEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBIVE1MVGFibGVDZWxsRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQsIEhUTUxUYWJsZUNlbGxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcImFiYnJcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFiYnJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFiYnJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudDogSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFRhYmxlRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUYWJsZUVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cblxuSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlQ2FwdGlvbiA9IGZ1bmN0aW9uIGNyZWF0ZUNhcHRpb24oKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNyZWF0ZUNhcHRpb24oKSk7XG59O1xuXG5IVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5kZWxldGVDYXB0aW9uID0gZnVuY3Rpb24gZGVsZXRlQ2FwdGlvbigpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uZGVsZXRlQ2FwdGlvbigpO1xufTtcblxuSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlVEhlYWQgPSBmdW5jdGlvbiBjcmVhdGVUSGVhZCgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY3JlYXRlVEhlYWQoKSk7XG59O1xuXG5IVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5kZWxldGVUSGVhZCA9IGZ1bmN0aW9uIGRlbGV0ZVRIZWFkKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5kZWxldGVUSGVhZCgpO1xufTtcblxuSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlVEZvb3QgPSBmdW5jdGlvbiBjcmVhdGVURm9vdCgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY3JlYXRlVEZvb3QoKSk7XG59O1xuXG5IVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5kZWxldGVURm9vdCA9IGZ1bmN0aW9uIGRlbGV0ZVRGb290KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5kZWxldGVURm9vdCgpO1xufTtcblxuSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0Um93ID0gZnVuY3Rpb24gaW5zZXJ0Um93KCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBpZiAoYXJnc1swXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oYXJnc1swXSk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc1swXSA9IC0xO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmluc2VydFJvdyguLi5hcmdzKSk7XG59O1xuXG5IVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZS5kZWxldGVSb3cgPSBmdW5jdGlvbiBkZWxldGVSb3coaW5kZXgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVSb3cnIG9uICdIVE1MVGFibGVFbGVtZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uZGVsZXRlUm93KC4uLmFyZ3MpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSwgXCJjYXB0aW9uXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNhcHRpb24pO1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICB9XG4gICAgdGhpc1tpbXBsXS5jYXB0aW9uID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSwgXCJ0SGVhZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS50SGVhZCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgaWYgKFYgPT09IG51bGwgfHwgViA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBWID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgIH1cbiAgICB0aGlzW2ltcGxdLnRIZWFkID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSwgXCJ0Rm9vdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS50Rm9vdCk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgaWYgKFYgPT09IG51bGwgfHwgViA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBWID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgIH1cbiAgICB0aGlzW2ltcGxdLnRGb290ID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSwgXCJ0Qm9kaWVzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnRCb2RpZXMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIFwicm93c1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5yb3dzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLCBcImFsaWduXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSwgXCJib3JkZXJcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImJvcmRlclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYm9yZGVyXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIFwiZnJhbWVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImZyYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJmcmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLCBcInJ1bGVzXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJydWxlc1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwicnVsZXNcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSwgXCJzdW1tYXJ5XCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzdW1tYXJ5XCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzdW1tYXJ5XCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIFwid2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlLCBcImJnQ29sb3JcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImJnQ29sb3JcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJiZ0NvbG9yXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlRWxlbWVudC5wcm90b3R5cGUsIFwiY2VsbFBhZGRpbmdcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNlbGxQYWRkaW5nXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY2VsbFBhZGRpbmdcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSwgXCJjZWxsU3BhY2luZ1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY2VsbFNwYWNpbmdcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjZWxsU3BhY2luZ1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVGFibGVFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGFibGVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxUYWJsZUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MVGFibGVFbGVtZW50OiBIVE1MVGFibGVFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFRhYmxlRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MVGFibGVDZWxsRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxUYWJsZUNlbGxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudC5wcm90b3R5cGUsIEhUTUxUYWJsZUNlbGxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LCBIVE1MVGFibGVDZWxsRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQucHJvdG90eXBlLCBcInNjb3BlXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzY29wZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic2NvcGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudC5wcm90b3R5cGUsIFwiYWJiclwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWJiclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWJiclwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LnByb3RvdHlwZSwgXCJzb3J0ZWRcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInNvcnRlZFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic29ydGVkXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ6IEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MVGFibGVSb3dFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRhYmxlUm93RWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuXG5IVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZS5pbnNlcnRDZWxsID0gZnVuY3Rpb24gaW5zZXJ0Q2VsbCgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJsb25nXCJdKGFyZ3NbMF0pO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMF0gPSAtMTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5pbnNlcnRDZWxsKC4uLmFyZ3MpKTtcbn07XG5cbkhUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLmRlbGV0ZUNlbGwgPSBmdW5jdGlvbiBkZWxldGVDZWxsKGluZGV4KSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlQ2VsbCcgb24gJ0hUTUxUYWJsZVJvd0VsZW1lbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJsb25nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5kZWxldGVDZWxsKC4uLmFyZ3MpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZSwgXCJyb3dJbmRleFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5yb3dJbmRleDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLCBcInNlY3Rpb25Sb3dJbmRleFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWN0aW9uUm93SW5kZXg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZSwgXCJjZWxsc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jZWxscyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZSwgXCJhbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiYWxpZ25cIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlUm93RWxlbWVudC5wcm90b3R5cGUsIFwiY2hcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImNoYXJcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNoYXJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZSwgXCJjaE9mZlwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY2hhcm9mZlwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY2hhcm9mZlwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlLCBcInZBbGlnblwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidkFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ2QWxpZ25cIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZSwgXCJiZ0NvbG9yXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJiZ0NvbG9yXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oViwgeyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nOiB0cnVlIH0pO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYmdDb2xvclwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVGFibGVSb3dFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGFibGVSb3dFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUYWJsZVJvd0VsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxUYWJsZVJvd0VsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MVGFibGVSb3dFbGVtZW50OiBIVE1MVGFibGVSb3dFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFRhYmxlUm93RWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5cbkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LnByb3RvdHlwZS5pbnNlcnRSb3cgPSBmdW5jdGlvbiBpbnNlcnRSb3coKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShhcmdzWzBdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzBdID0gLTE7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uaW5zZXJ0Um93KC4uLmFyZ3MpKTtcbn07XG5cbkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LnByb3RvdHlwZS5kZWxldGVSb3cgPSBmdW5jdGlvbiBkZWxldGVSb3coaW5kZXgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVSb3cnIG9uICdIVE1MVGFibGVTZWN0aW9uRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmRlbGV0ZVJvdyguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQucHJvdG90eXBlLCBcInJvd3NcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucm93cyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5wcm90b3R5cGUsIFwiYWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImFsaWduXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhbGlnblwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LnByb3RvdHlwZSwgXCJjaFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY2hhclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY2hhclwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LnByb3RvdHlwZSwgXCJjaE9mZlwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiY2hhcm9mZlwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY2hhcm9mZlwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LnByb3RvdHlwZSwgXCJ2QWxpZ25cIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZBbGlnblwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidkFsaWduXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVGFibGVTZWN0aW9uRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MVGVtcGxhdGVFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGVtcGxhdGVFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRlbXBsYXRlRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY29udGVudCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFRlbXBsYXRlRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGVtcGxhdGVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MVGVtcGxhdGVFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFRlbXBsYXRlRWxlbWVudDogSFRNTFRlbXBsYXRlRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxUZW1wbGF0ZUVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MVGV4dEFyZWFFbGVtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRleHRBcmVhRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuXG5IVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZS5zZWxlY3QgPSBmdW5jdGlvbiBzZWxlY3QoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnNlbGVjdCgpO1xufTtcblxuSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUuc2V0UmFuZ2VUZXh0ID0gZnVuY3Rpb24gc2V0UmFuZ2VUZXh0KHJlcGxhY2VtZW50KSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0UmFuZ2VUZXh0JyBvbiAnSFRNTFRleHRBcmVhRWxlbWVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDQ7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uc2V0UmFuZ2VUZXh0KC4uLmFyZ3MpO1xufTtcblxuSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUuc2V0U2VsZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbiBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0U2VsZWN0aW9uUmFuZ2UnIG9uICdIVE1MVGV4dEFyZWFFbGVtZW50JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDM7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oYXJnc1sxXSk7XG4gIGlmIChhcmdzWzJdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnNldFNlbGVjdGlvblJhbmdlKC4uLmFyZ3MpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJhdXRvY29tcGxldGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImF1dG9jb21wbGV0ZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYXV0b2NvbXBsZXRlXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwiYXV0b2ZvY3VzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImF1dG9mb2N1c1wiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhdXRvZm9jdXNcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJhdXRvZm9jdXNcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcImNvbHNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY29scztcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uY29scyA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJkaXJOYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJkaXJOYW1lXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJkaXJOYW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwiZGlzYWJsZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJcIik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgfVxuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwiZm9ybVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5mb3JtKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcImlucHV0TW9kZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiaW5wdXRNb2RlXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJpbnB1dE1vZGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJtYXhMZW5ndGhcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcIm1heExlbmd0aFwiKSk7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IC0yMTQ3NDgzNjQ4IHx8IHZhbHVlID4gMjE0NzQ4MzY0NyA/IDAgOiB2YWx1ZVxuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcImxvbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtYXhMZW5ndGhcIiwgU3RyaW5nKFYpKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcIm1pbkxlbmd0aFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwibWluTGVuZ3RoXCIpKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgLTIxNDc0ODM2NDggfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3ID8gMCA6IHZhbHVlXG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm1pbkxlbmd0aFwiLCBTdHJpbmcoVikpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwibmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcInBsYWNlaG9sZGVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJyZWFkT25seVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJyZWFkT25seVwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJyZWFkT25seVwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcInJlYWRPbmx5XCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJyZXF1aXJlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKFYpO1xuICAgIGlmIChWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcInJlcXVpcmVkXCIpO1xuICB9XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJyb3dzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnJvd3M7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnJvd3MgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwid3JhcFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwid3JhcFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwid3JhcFwiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udHlwZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcImRlZmF1bHRWYWx1ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5kZWZhdWx0VmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uZGVmYXVsdFZhbHVlID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLCBcInZhbHVlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWLCB7IHRyZWF0TnVsbEFzRW1wdHlTdHJpbmc6IHRydWUgfSk7XG4gICAgdGhpc1tpbXBsXS52YWx1ZSA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJ0ZXh0TGVuZ3RoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnRleHRMZW5ndGg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJzZWxlY3Rpb25TdGFydFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWxlY3Rpb25TdGFydDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBpZiAoViA9PT0gbnVsbCB8fCBWID09PSB1bmRlZmluZWQpIHtcbiAgICAgIFYgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXShWKTtcbiAgICB9XG4gICAgdGhpc1tpbXBsXS5zZWxlY3Rpb25TdGFydCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJzZWxlY3Rpb25FbmRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VsZWN0aW9uRW5kO1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIH1cbiAgICB0aGlzW2ltcGxdLnNlbGVjdGlvbkVuZCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSwgXCJzZWxlY3Rpb25EaXJlY3Rpb25cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2VsZWN0aW9uRGlyZWN0aW9uO1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgfVxuICAgIHRoaXNbaW1wbF0uc2VsZWN0aW9uRGlyZWN0aW9uID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVGV4dEFyZWFFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxFbGVtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IEhUTUxUZXh0QXJlYUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MVGV4dEFyZWFFbGVtZW50OiBIVE1MVGV4dEFyZWFFbGVtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvSFRNTFRleHRBcmVhRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxUaW1lRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRpbWVFbGVtZW50LnByb3RvdHlwZSwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRpbWVFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRpbWVFbGVtZW50LnByb3RvdHlwZSwgXCJkYXRlVGltZVwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiZGF0ZVRpbWVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRhdGVUaW1lXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxUaW1lRWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFRpbWVFbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVGltZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRpbWVFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MVGltZUVsZW1lbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIVE1MVGltZUVsZW1lbnQ6IEhUTUxUaW1lRWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxUaW1lRWxlbWVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBIVE1MRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhUTUxUaXRsZUVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUaXRsZUVsZW1lbnQucHJvdG90eXBlLCBIVE1MRWxlbWVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihIVE1MVGl0bGVFbGVtZW50LCBIVE1MRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRpdGxlRWxlbWVudC5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS50ZXh0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnRleHQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxUaXRsZUVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxUaXRsZUVsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUaXRsZUVsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRpdGxlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFRpdGxlRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxUaXRsZUVsZW1lbnQ6IEhUTUxUaXRsZUVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MVGl0bGVFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFRyYWNrRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFRyYWNrRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxUcmFja0VsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVHJhY2tFbGVtZW50LnByb3RvdHlwZSwgXCJraW5kXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJraW5kXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJraW5kXCIsIFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRyYWNrRWxlbWVudC5wcm90b3R5cGUsIFwic3JjXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNyYztcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zcmMgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRyYWNrRWxlbWVudC5wcm90b3R5cGUsIFwic3JjbGFuZ1wiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwic3JjbGFuZ1wiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3JjbGFuZ1wiLCBWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUcmFja0VsZW1lbnQucHJvdG90eXBlLCBcImxhYmVsXCIsIHtcbiAgZ2V0KCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJsYWJlbFwiKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBcIlwiIDogdmFsdWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibGFiZWxcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVHJhY2tFbGVtZW50LnByb3RvdHlwZSwgXCJkZWZhdWx0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImRlZmF1bHRcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGVmYXVsdFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRlZmF1bHRcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUcmFja0VsZW1lbnQsIFwiTk9ORVwiLCB7XG4gIHZhbHVlOiAwLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVHJhY2tFbGVtZW50LnByb3RvdHlwZSwgXCJOT05FXCIsIHtcbiAgdmFsdWU6IDAsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRyYWNrRWxlbWVudCwgXCJMT0FESU5HXCIsIHtcbiAgdmFsdWU6IDEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUcmFja0VsZW1lbnQucHJvdG90eXBlLCBcIkxPQURJTkdcIiwge1xuICB2YWx1ZTogMSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVHJhY2tFbGVtZW50LCBcIkxPQURFRFwiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVHJhY2tFbGVtZW50LnByb3RvdHlwZSwgXCJMT0FERURcIiwge1xuICB2YWx1ZTogMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVHJhY2tFbGVtZW50LCBcIkVSUk9SXCIsIHtcbiAgdmFsdWU6IDMsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxUcmFja0VsZW1lbnQucHJvdG90eXBlLCBcIkVSUk9SXCIsIHtcbiAgdmFsdWU6IDMsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFRyYWNrRWxlbWVudC5wcm90b3R5cGUsIFwicmVhZHlTdGF0ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5yZWFkeVN0YXRlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhUTUxUcmFja0VsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxUcmFja0VsZW1lbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxUcmFja0VsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFRyYWNrRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFRyYWNrRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxUcmFja0VsZW1lbnQ6IEhUTUxUcmFja0VsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MVHJhY2tFbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEhUTUxFbGVtZW50ID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFVMaXN0RWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFVMaXN0RWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxVTGlzdEVsZW1lbnQsIEhUTUxFbGVtZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVUxpc3RFbGVtZW50LnByb3RvdHlwZSwgXCJjb21wYWN0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcImNvbXBhY3RcIik7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShWKTtcbiAgICBpZiAoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiY29tcGFjdFwiLCBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImNvbXBhY3RcIik7XG4gIH1cbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxVTGlzdEVsZW1lbnQucHJvdG90eXBlLCBcInR5cGVcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInR5cGVcIik7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gXCJcIiA6IHZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShWKTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuSFRNTFVMaXN0RWxlbWVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSFRNTFVMaXN0RWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFVMaXN0RWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVUxpc3RFbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBIVE1MRWxlbWVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIVE1MVUxpc3RFbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFVMaXN0RWxlbWVudDogSFRNTFVMaXN0RWxlbWVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0hUTUxVTGlzdEVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBIVE1MVW5rbm93bkVsZW1lbnQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxVbmtub3duRWxlbWVudC5wcm90b3R5cGUsIEhUTUxFbGVtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxVbmtub3duRWxlbWVudCwgSFRNTEVsZW1lbnQuaW50ZXJmYWNlKTtcblxuXG5IVE1MVW5rbm93bkVsZW1lbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxVbmtub3duRWxlbWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSFRNTFVua25vd25FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxVbmtub3duRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgSFRNTEVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFVua25vd25FbGVtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSFRNTFVua25vd25FbGVtZW50OiBIVE1MVW5rbm93bkVsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MVW5rbm93bkVsZW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgSFRNTE1lZGlhRWxlbWVudCA9IHJlcXVpcmUoXCIuL0hUTUxNZWRpYUVsZW1lbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gSFRNTFZpZGVvRWxlbWVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUsIEhUTUxNZWRpYUVsZW1lbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSFRNTFZpZGVvRWxlbWVudCwgSFRNTE1lZGlhRWxlbWVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUsIFwid2lkdGhcIiwge1xuICBnZXQoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDIxNDc0ODM2NDcgPyAwIDogdmFsdWVcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIFYgPSBWID4gMjE0NzQ4MzY0NyA/IDAgOiBWO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgU3RyaW5nKFYpKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlLCBcImhlaWdodFwiLCB7XG4gIGdldCgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIpKTtcbiAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDIxNDc0ODM2NDcgPyAwIDogdmFsdWVcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKFYpO1xuICAgIFYgPSBWID4gMjE0NzQ4MzY0NyA/IDAgOiBWO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIFN0cmluZyhWKSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZSwgXCJ2aWRlb1dpZHRoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnZpZGVvV2lkdGg7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZSwgXCJ2aWRlb0hlaWdodFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS52aWRlb0hlaWdodDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlLCBcInBvc3RlclwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wb3N0ZXI7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucG9zdGVyID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5IVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJIVE1MVmlkZW9FbGVtZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIEhUTUxNZWRpYUVsZW1lbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogSFRNTFZpZGVvRWxlbWVudCxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IEhUTUxWaWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9IVE1MVmlkZW9FbGVtZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEV2ZW50ID0gcmVxdWlyZShcIi4vRXZlbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IGNvbnZlcnRIYXNoQ2hhbmdlRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vSGFzaENoYW5nZUV2ZW50SW5pdFwiKS5jb252ZXJ0O1xuXG5mdW5jdGlvbiBIYXNoQ2hhbmdlRXZlbnQodHlwZSkge1xuICBpZiAoIW5ldy50YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnSGFzaENoYW5nZUV2ZW50Jy4gUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3I7IHRoaXMgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnSGFzaENoYW5nZUV2ZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVydEhhc2hDaGFuZ2VFdmVudEluaXQoYXJnc1sxXSk7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSGFzaENoYW5nZUV2ZW50LnByb3RvdHlwZSwgRXZlbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoSGFzaENoYW5nZUV2ZW50LCBFdmVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSGFzaENoYW5nZUV2ZW50LnByb3RvdHlwZSwgXCJvbGRVUkxcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub2xkVVJMO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSGFzaENoYW5nZUV2ZW50LnByb3RvdHlwZSwgXCJuZXdVUkxcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubmV3VVJMO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhhc2hDaGFuZ2VFdmVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiSGFzaENoYW5nZUV2ZW50XCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShIYXNoQ2hhbmdlRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSGFzaENoYW5nZUV2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBFdmVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIYXNoQ2hhbmdlRXZlbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBIYXNoQ2hhbmdlRXZlbnQ6IEhhc2hDaGFuZ2VFdmVudCB9LFxuICAgIFdvcmtlcjogeyBIYXNoQ2hhbmdlRXZlbnQ6IEhhc2hDaGFuZ2VFdmVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9IYXNoQ2hhbmdlRXZlbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuXG5jb25zdCBFdmVudEluaXQgPSByZXF1aXJlKFwiLi9FdmVudEluaXRcIik7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb252ZXJ0SW5oZXJpdChvYmosIHJldCkge1xuICAgIEV2ZW50SW5pdC5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgbGV0IGtleSwgdmFsdWU7XG5cbiAgICBrZXkgPSBcIm5ld1VSTFwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0odmFsdWUpO1xuICAgIH1cblxuICAgIGtleSA9IFwib2xkVVJMXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXSh2YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIGNvbnZlcnQob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IGhhcyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlIHx8IG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgbWF5IG5vdCBiZSBhIERhdGUgb3IgUmVnRXhwIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIG1vZHVsZS5leHBvcnRzLmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIEhpc3RvcnkoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5cbkhpc3RvcnkucHJvdG90eXBlLmdvID0gZnVuY3Rpb24gZ28oKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShhcmdzWzBdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzBdID0gMDtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5nbyguLi5hcmdzKTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLmJhY2sgPSBmdW5jdGlvbiBiYWNrKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5iYWNrKCk7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5mb3J3YXJkID0gZnVuY3Rpb24gZm9yd2FyZCgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uZm9yd2FyZCgpO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUucHVzaFN0YXRlID0gZnVuY3Rpb24gcHVzaFN0YXRlKGRhdGEsIHRpdGxlKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAncHVzaFN0YXRlJyBvbiAnSGlzdG9yeSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAzOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJhbnlcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzFdKTtcbiAgaWYgKGFyZ3NbMl0gPT09IG51bGwgfHwgYXJnc1syXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1syXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIGlmIChhcmdzWzJdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMl0pO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMl0gPSB1bmRlZmluZWQ7XG4gIH1cbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5wdXNoU3RhdGUoLi4uYXJncyk7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS5yZXBsYWNlU3RhdGUgPSBmdW5jdGlvbiByZXBsYWNlU3RhdGUoZGF0YSwgdGl0bGUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdyZXBsYWNlU3RhdGUnIG9uICdIaXN0b3J5JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDM7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcImFueVwiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMV0pO1xuICBpZiAoYXJnc1syXSA9PT0gbnVsbCB8fCBhcmdzWzJdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzJdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgaWYgKGFyZ3NbMl0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzJdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1syXSk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc1syXSA9IHVuZGVmaW5lZDtcbiAgfVxuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLnJlcGxhY2VTdGF0ZSguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSGlzdG9yeS5wcm90b3R5cGUsIFwibGVuZ3RoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmxlbmd0aDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhpc3RvcnkucHJvdG90eXBlLCBcInN0YXRlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnN0YXRlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkhpc3RvcnkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhpc3RvcnlcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEhpc3RvcnkucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoSGlzdG9yeS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBIaXN0b3J5LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgSGlzdG9yeTogSGlzdG9yeSB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL3dpbmRvdy9IaXN0b3J5LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IFVJRXZlbnQgPSByZXF1aXJlKFwiLi9VSUV2ZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBjb252ZXJ0S2V5Ym9hcmRFdmVudEluaXQgPSByZXF1aXJlKFwiLi9LZXlib2FyZEV2ZW50SW5pdFwiKS5jb252ZXJ0O1xuXG5mdW5jdGlvbiBLZXlib2FyZEV2ZW50KHR5cGVBcmcpIHtcbiAgaWYgKCFuZXcudGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ0tleWJvYXJkRXZlbnQnLiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvcjsgdGhpcyBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdLZXlib2FyZEV2ZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVydEtleWJvYXJkRXZlbnRJbml0KGFyZ3NbMV0pO1xuXG4gIGlmYWNlLnNldHVwKHRoaXMsIGFyZ3MpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKEtleWJvYXJkRXZlbnQucHJvdG90eXBlLCBVSUV2ZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKEtleWJvYXJkRXZlbnQsIFVJRXZlbnQuaW50ZXJmYWNlKTtcblxuXG5LZXlib2FyZEV2ZW50LnByb3RvdHlwZS5nZXRNb2RpZmllclN0YXRlID0gZnVuY3Rpb24gZ2V0TW9kaWZpZXJTdGF0ZShrZXlBcmcpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRNb2RpZmllclN0YXRlJyBvbiAnS2V5Ym9hcmRFdmVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgcmV0dXJuIHRoaXNbaW1wbF0uZ2V0TW9kaWZpZXJTdGF0ZSguLi5hcmdzKTtcbn07XG5cbktleWJvYXJkRXZlbnQucHJvdG90eXBlLmluaXRLZXlib2FyZEV2ZW50ID0gZnVuY3Rpb24gaW5pdEtleWJvYXJkRXZlbnQodHlwZUFyZywgYnViYmxlc0FyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywga2V5QXJnLCBsb2NhdGlvbkFyZywgbW9kaWZpZXJzTGlzdEFyZywgcmVwZWF0LCBsb2NhbGUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCA5KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdpbml0S2V5Ym9hcmRFdmVudCcgb24gJ0tleWJvYXJkRXZlbnQnOiA5IGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgOTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMV0pO1xuICBhcmdzWzJdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMl0pO1xuICBpZiAoYXJnc1szXSA9PT0gbnVsbCB8fCBhcmdzWzNdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzNdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgfVxuICBhcmdzWzRdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1s0XSk7XG4gIGFyZ3NbNV0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0oYXJnc1s1XSk7XG4gIGFyZ3NbNl0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzZdKTtcbiAgYXJnc1s3XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzddKTtcbiAgYXJnc1s4XSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbOF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5pbml0S2V5Ym9hcmRFdmVudCguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudCwgXCJET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEXCIsIHtcbiAgdmFsdWU6IDAsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEtleWJvYXJkRXZlbnQucHJvdG90eXBlLCBcIkRPTV9LRVlfTE9DQVRJT05fU1RBTkRBUkRcIiwge1xuICB2YWx1ZTogMCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LCBcIkRPTV9LRVlfTE9DQVRJT05fTEVGVFwiLCB7XG4gIHZhbHVlOiAxLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgXCJET01fS0VZX0xPQ0FUSU9OX0xFRlRcIiwge1xuICB2YWx1ZTogMSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LCBcIkRPTV9LRVlfTE9DQVRJT05fUklHSFRcIiwge1xuICB2YWx1ZTogMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwiRE9NX0tFWV9MT0NBVElPTl9SSUdIVFwiLCB7XG4gIHZhbHVlOiAyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEtleWJvYXJkRXZlbnQsIFwiRE9NX0tFWV9MT0NBVElPTl9OVU1QQURcIiwge1xuICB2YWx1ZTogMyxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwiRE9NX0tFWV9MT0NBVElPTl9OVU1QQURcIiwge1xuICB2YWx1ZTogMyxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgXCJrZXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ua2V5O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwiY29kZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jb2RlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwibG9jYXRpb25cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubG9jYXRpb247XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgXCJjdHJsS2V5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmN0cmxLZXk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgXCJzaGlmdEtleVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zaGlmdEtleTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEtleWJvYXJkRXZlbnQucHJvdG90eXBlLCBcImFsdEtleVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5hbHRLZXk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgXCJtZXRhS2V5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm1ldGFLZXk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgXCJyZXBlYXRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucmVwZWF0O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUsIFwiaXNDb21wb3NpbmdcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaXNDb21wb3Npbmc7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShLZXlib2FyZEV2ZW50LnByb3RvdHlwZSwgXCJjaGFyQ29kZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jaGFyQ29kZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEtleWJvYXJkRXZlbnQucHJvdG90eXBlLCBcImtleUNvZGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ua2V5Q29kZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEtleWJvYXJkRXZlbnQucHJvdG90eXBlLCBcIndoaWNoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLndoaWNoO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbktleWJvYXJkRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIktleWJvYXJkRXZlbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKEtleWJvYXJkRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgVUlFdmVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBLZXlib2FyZEV2ZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgS2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9LZXlib2FyZEV2ZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxuY29uc3QgRXZlbnRNb2RpZmllckluaXQgPSByZXF1aXJlKFwiLi9FdmVudE1vZGlmaWVySW5pdFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KSB7XG4gICAgRXZlbnRNb2RpZmllckluaXQuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJjaGFyQ29kZVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSAwO1xuICAgIH1cblxuICAgIGtleSA9IFwiY29kZVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IFwiXCI7XG4gICAgfVxuXG4gICAga2V5ID0gXCJpc0NvbXBvc2luZ1wiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcImtleVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IFwiXCI7XG4gICAgfVxuXG4gICAga2V5ID0gXCJrZXlDb2RlXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIGxvbmdcIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IDA7XG4gICAgfVxuXG4gICAga2V5ID0gXCJsb2NhdGlvblwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSAwO1xuICAgIH1cblxuICAgIGtleSA9IFwicmVwZWF0XCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGtleSA9IFwid2hpY2hcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gMDtcbiAgICB9XG4gIH0sXG5cbiAgY29udmVydChvYmopIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgaGFzIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgb2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBtYXkgbm90IGJlIGEgRGF0ZSBvciBSZWdFeHAgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbW9kdWxlLmV4cG9ydHMuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gTGlua1N0eWxlKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExpbmtTdHlsZS5wcm90b3R5cGUsIFwic2hlZXRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uc2hlZXQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbkxpbmtTdHlsZS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiTGlua1N0eWxlXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShMaW5rU3R5bGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTGlua1N0eWxlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IExpbmtTdHlsZSxcbiAgZXhwb3NlOiB7XG4gICAgXG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL0xpbmtTdHlsZS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gTG9jYXRpb24oKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5cbkxvY2F0aW9uLnByb3RvdHlwZS5hc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24odXJsKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnYXNzaWduJyBvbiAnTG9jYXRpb24nOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmFzc2lnbiguLi5hcmdzKTtcbn07XG5cbkxvY2F0aW9uLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSh1cmwpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdyZXBsYWNlJyBvbiAnTG9jYXRpb24nOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLnJlcGxhY2UoLi4uYXJncyk7XG59O1xuXG5Mb2NhdGlvbi5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24gcmVsb2FkKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5yZWxvYWQoKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYXRpb24ucHJvdG90eXBlLCBcImhyZWZcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaHJlZjtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5ocmVmID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuTG9jYXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdGhpc1tpbXBsXS5ocmVmOztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhdGlvbi5wcm90b3R5cGUsIFwib3JpZ2luXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm9yaWdpbjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2F0aW9uLnByb3RvdHlwZSwgXCJwcm90b2NvbFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wcm90b2NvbDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wcm90b2NvbCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhdGlvbi5wcm90b3R5cGUsIFwiaG9zdFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5ob3N0O1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3QgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYXRpb24ucHJvdG90eXBlLCBcImhvc3RuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhvc3RuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLmhvc3RuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2F0aW9uLnByb3RvdHlwZSwgXCJwb3J0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnBvcnQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucG9ydCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb2NhdGlvbi5wcm90b3R5cGUsIFwicGF0aG5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ucGF0aG5hbWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucGF0aG5hbWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTG9jYXRpb24ucHJvdG90eXBlLCBcInNlYXJjaFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5zZWFyY2g7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uc2VhcmNoID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExvY2F0aW9uLnByb3RvdHlwZSwgXCJoYXNoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhhc2g7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaGFzaCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuTG9jYXRpb24ucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkxvY2F0aW9uXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShMb2NhdGlvbi5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShMb2NhdGlvbi5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgXCJ2YWx1ZU9mXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZU9mKCkgeyByZXR1cm4gdGhpczsgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICB9KTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogTG9jYXRpb24sXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBMb2NhdGlvbjogTG9jYXRpb24gfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi93aW5kb3cvTG9jYXRpb24taW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgRXZlbnQgPSByZXF1aXJlKFwiLi9FdmVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgY29udmVydE1lc3NhZ2VFdmVudEluaXQgPSByZXF1aXJlKFwiLi9NZXNzYWdlRXZlbnRJbml0XCIpLmNvbnZlcnQ7XG5cbmZ1bmN0aW9uIE1lc3NhZ2VFdmVudCh0eXBlKSB7XG4gIGlmICghbmV3LnRhcmdldCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdNZXNzYWdlRXZlbnQnLiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvcjsgdGhpcyBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdNZXNzYWdlRXZlbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJ0TWVzc2FnZUV2ZW50SW5pdChhcmdzWzFdKTtcblxuICBpZmFjZS5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihNZXNzYWdlRXZlbnQucHJvdG90eXBlLCBFdmVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihNZXNzYWdlRXZlbnQsIEV2ZW50LmludGVyZmFjZSk7XG5cblxuTWVzc2FnZUV2ZW50LnByb3RvdHlwZS5pbml0TWVzc2FnZUV2ZW50ID0gZnVuY3Rpb24gaW5pdE1lc3NhZ2VFdmVudCh0eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCBkYXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgOCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5pdE1lc3NhZ2VFdmVudCcgb24gJ01lc3NhZ2VFdmVudCc6IDggYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCA4OyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1sxXSk7XG4gIGFyZ3NbMl0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1syXSk7XG4gIGFyZ3NbM10gPSBjb252ZXJzaW9uc1tcImFueVwiXShhcmdzWzNdKTtcbiAgYXJnc1s0XSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbNF0pO1xuICBhcmdzWzVdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1s1XSk7XG4gIGlmIChhcmdzWzZdID09PSBudWxsIHx8IGFyZ3NbNl0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbNl0gPSBudWxsO1xuICB9IGVsc2Uge1xuICB9XG4gIGlmIChhcmdzWzddID09PSBudWxsIHx8IGFyZ3NbN10gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbN10gPSBudWxsO1xuICB9IGVsc2Uge1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmluaXRNZXNzYWdlRXZlbnQoLi4uYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1lc3NhZ2VFdmVudC5wcm90b3R5cGUsIFwiZGF0YVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5kYXRhO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwgXCJvcmlnaW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub3JpZ2luO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwgXCJsYXN0RXZlbnRJZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5sYXN0RXZlbnRJZDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1lc3NhZ2VFdmVudC5wcm90b3R5cGUsIFwic291cmNlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnNvdXJjZSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXNzYWdlRXZlbnQucHJvdG90eXBlLCBcInBvcnRzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnBvcnRzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5NZXNzYWdlRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk1lc3NhZ2VFdmVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE1lc3NhZ2VFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgRXZlbnQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogTWVzc2FnZUV2ZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgTWVzc2FnZUV2ZW50OiBNZXNzYWdlRXZlbnQgfSxcbiAgICBXb3JrZXI6IHsgTWVzc2FnZUV2ZW50OiBNZXNzYWdlRXZlbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ldmVudHMvTWVzc2FnZUV2ZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxuY29uc3QgRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vRXZlbnRJbml0XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29udmVydEluaGVyaXQob2JqLCByZXQpIHtcbiAgICBFdmVudEluaXQuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJkYXRhXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImFueVwiXSh2YWx1ZSk7XG4gICAgfVxuXG4gICAga2V5ID0gXCJsYXN0RXZlbnRJZFwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0odmFsdWUpO1xuICAgIH1cblxuICAgIGtleSA9IFwib3JpZ2luXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXSh2YWx1ZSk7XG4gICAgfVxuXG4gICAga2V5ID0gXCJwb3J0c1wiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gKHZhbHVlKTtcbiAgICB9XG5cbiAgICBrZXkgPSBcInNvdXJjZVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gKHZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgY29udmVydChvYmopIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgaGFzIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgb2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBtYXkgbm90IGJlIGEgRGF0ZSBvciBSZWdFeHAgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbW9kdWxlLmV4cG9ydHMuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBVSUV2ZW50ID0gcmVxdWlyZShcIi4vVUlFdmVudC5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgY29udmVydE1vdXNlRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vTW91c2VFdmVudEluaXRcIikuY29udmVydDtcblxuZnVuY3Rpb24gTW91c2VFdmVudCh0eXBlQXJnKSB7XG4gIGlmICghbmV3LnRhcmdldCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdNb3VzZUV2ZW50Jy4gUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3I7IHRoaXMgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnTW91c2VFdmVudCc6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnRNb3VzZUV2ZW50SW5pdChhcmdzWzFdKTtcblxuICBpZmFjZS5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihNb3VzZUV2ZW50LnByb3RvdHlwZSwgVUlFdmVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihNb3VzZUV2ZW50LCBVSUV2ZW50LmludGVyZmFjZSk7XG5cblxuTW91c2VFdmVudC5wcm90b3R5cGUuZ2V0TW9kaWZpZXJTdGF0ZSA9IGZ1bmN0aW9uIGdldE1vZGlmaWVyU3RhdGUoa2V5QXJnKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0TW9kaWZpZXJTdGF0ZScgb24gJ01vdXNlRXZlbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIHJldHVybiB0aGlzW2ltcGxdLmdldE1vZGlmaWVyU3RhdGUoLi4uYXJncyk7XG59O1xuXG5Nb3VzZUV2ZW50LnByb3RvdHlwZS5pbml0TW91c2VFdmVudCA9IGZ1bmN0aW9uIGluaXRNb3VzZUV2ZW50KHR5cGVBcmcsIGJ1YmJsZXNBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZywgc2NyZWVuWEFyZywgc2NyZWVuWUFyZywgY2xpZW50WEFyZywgY2xpZW50WUFyZywgY3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlmdEtleUFyZywgbWV0YUtleUFyZywgYnV0dG9uQXJnLCByZWxhdGVkVGFyZ2V0QXJnKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMTUpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luaXRNb3VzZUV2ZW50JyBvbiAnTW91c2VFdmVudCc6IDE1IGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTU7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGFyZ3NbMF0gPSBjb252ZXJzaW9uc1tcIkRPTVN0cmluZ1wiXShhcmdzWzBdKTtcbiAgYXJnc1sxXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzFdKTtcbiAgYXJnc1syXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzJdKTtcbiAgaWYgKGFyZ3NbM10gPT09IG51bGwgfHwgYXJnc1szXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1szXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIH1cbiAgYXJnc1s0XSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShhcmdzWzRdKTtcbiAgYXJnc1s1XSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShhcmdzWzVdKTtcbiAgYXJnc1s2XSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShhcmdzWzZdKTtcbiAgYXJnc1s3XSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShhcmdzWzddKTtcbiAgYXJnc1s4XSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXShhcmdzWzhdKTtcbiAgYXJnc1s5XSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzldKTtcbiAgYXJnc1sxMF0gPSBjb252ZXJzaW9uc1tcImJvb2xlYW5cIl0oYXJnc1sxMF0pO1xuICBhcmdzWzExXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzExXSk7XG4gIGFyZ3NbMTJdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMTJdKTtcbiAgYXJnc1sxM10gPSBjb252ZXJzaW9uc1tcInNob3J0XCJdKGFyZ3NbMTNdKTtcbiAgaWYgKGFyZ3NbMTRdID09PSBudWxsIHx8IGFyZ3NbMTRdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzE0XSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uaW5pdE1vdXNlRXZlbnQoLi4uYXJncyk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vdXNlRXZlbnQucHJvdG90eXBlLCBcInNjcmVlblhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2NyZWVuWDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vdXNlRXZlbnQucHJvdG90eXBlLCBcInNjcmVlbllcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2NyZWVuWTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vdXNlRXZlbnQucHJvdG90eXBlLCBcImNsaWVudFhcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2xpZW50WDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vdXNlRXZlbnQucHJvdG90eXBlLCBcImNsaWVudFlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY2xpZW50WTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vdXNlRXZlbnQucHJvdG90eXBlLCBcImN0cmxLZXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY3RybEtleTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vdXNlRXZlbnQucHJvdG90eXBlLCBcInNoaWZ0S2V5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNoaWZ0S2V5O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTW91c2VFdmVudC5wcm90b3R5cGUsIFwiYWx0S2V5XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmFsdEtleTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vdXNlRXZlbnQucHJvdG90eXBlLCBcIm1ldGFLZXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubWV0YUtleTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vdXNlRXZlbnQucHJvdG90eXBlLCBcImJ1dHRvblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5idXR0b247XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3VzZUV2ZW50LnByb3RvdHlwZSwgXCJyZWxhdGVkVGFyZ2V0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnJlbGF0ZWRUYXJnZXQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTW91c2VFdmVudC5wcm90b3R5cGUsIFwiYnV0dG9uc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5idXR0b25zO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbk1vdXNlRXZlbnQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk1vdXNlRXZlbnRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE1vdXNlRXZlbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTW91c2VFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgVUlFdmVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBNb3VzZUV2ZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgTW91c2VFdmVudDogTW91c2VFdmVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9Nb3VzZUV2ZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxuY29uc3QgRXZlbnRNb2RpZmllckluaXQgPSByZXF1aXJlKFwiLi9FdmVudE1vZGlmaWVySW5pdFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KSB7XG4gICAgRXZlbnRNb2RpZmllckluaXQuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJidXR0b25cIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wic2hvcnRcIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IDA7XG4gICAgfVxuXG4gICAga2V5ID0gXCJidXR0b25zXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIHNob3J0XCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSAwO1xuICAgIH1cblxuICAgIGtleSA9IFwiY2xpZW50WFwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJsb25nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSAwO1xuICAgIH1cblxuICAgIGtleSA9IFwiY2xpZW50WVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJsb25nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSAwO1xuICAgIH1cblxuICAgIGtleSA9IFwicmVsYXRlZFRhcmdldFwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBudWxsO1xuICAgIH1cblxuICAgIGtleSA9IFwic2NyZWVuWFwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJsb25nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSAwO1xuICAgIH1cblxuICAgIGtleSA9IFwic2NyZWVuWVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJsb25nXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSAwO1xuICAgIH1cbiAgfSxcblxuICBjb252ZXJ0KG9iaikge1xuICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBoYXMgdG8gYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSB8fCBvYmogaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IG1heSBub3QgYmUgYSBEYXRlIG9yIFJlZ0V4cCBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBtb2R1bGUuZXhwb3J0cy5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuY29uc3QgbWl4aW4gPSB1dGlscy5taXhpbjtcbmNvbnN0IE5hdmlnYXRvcklEID0gcmVxdWlyZShcIi4vTmF2aWdhdG9ySUQuanNcIik7XG5jb25zdCBOYXZpZ2F0b3JMYW5ndWFnZSA9IHJlcXVpcmUoXCIuL05hdmlnYXRvckxhbmd1YWdlLmpzXCIpO1xuY29uc3QgTmF2aWdhdG9yT25MaW5lID0gcmVxdWlyZShcIi4vTmF2aWdhdG9yT25MaW5lLmpzXCIpO1xuY29uc3QgTmF2aWdhdG9yQ29va2llcyA9IHJlcXVpcmUoXCIuL05hdmlnYXRvckNvb2tpZXMuanNcIik7XG5jb25zdCBOYXZpZ2F0b3JQbHVnaW5zID0gcmVxdWlyZShcIi4vTmF2aWdhdG9yUGx1Z2lucy5qc1wiKTtcbmNvbnN0IE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZSA9IHJlcXVpcmUoXCIuL05hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZS5qc1wiKTtcblxuZnVuY3Rpb24gTmF2aWdhdG9yKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxubWl4aW4oTmF2aWdhdG9yLnByb3RvdHlwZSwgTmF2aWdhdG9ySUQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5OYXZpZ2F0b3JJRC5taXhlZEludG8ucHVzaChOYXZpZ2F0b3IpO1xubWl4aW4oTmF2aWdhdG9yLnByb3RvdHlwZSwgTmF2aWdhdG9yTGFuZ3VhZ2UuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5OYXZpZ2F0b3JMYW5ndWFnZS5taXhlZEludG8ucHVzaChOYXZpZ2F0b3IpO1xubWl4aW4oTmF2aWdhdG9yLnByb3RvdHlwZSwgTmF2aWdhdG9yT25MaW5lLmludGVyZmFjZS5wcm90b3R5cGUpO1xuTmF2aWdhdG9yT25MaW5lLm1peGVkSW50by5wdXNoKE5hdmlnYXRvcik7XG5taXhpbihOYXZpZ2F0b3IucHJvdG90eXBlLCBOYXZpZ2F0b3JDb29raWVzLmludGVyZmFjZS5wcm90b3R5cGUpO1xuTmF2aWdhdG9yQ29va2llcy5taXhlZEludG8ucHVzaChOYXZpZ2F0b3IpO1xubWl4aW4oTmF2aWdhdG9yLnByb3RvdHlwZSwgTmF2aWdhdG9yUGx1Z2lucy5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk5hdmlnYXRvclBsdWdpbnMubWl4ZWRJbnRvLnB1c2goTmF2aWdhdG9yKTtcbm1peGluKE5hdmlnYXRvci5wcm90b3R5cGUsIE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZS5taXhlZEludG8ucHVzaChOYXZpZ2F0b3IpO1xuXG5OYXZpZ2F0b3IucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk5hdmlnYXRvclwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTmF2aWdhdG9yLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5hdmlnYXRvci5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBOYXZpZ2F0b3IsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBOYXZpZ2F0b3I6IE5hdmlnYXRvciB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25hdmlnYXRvci9OYXZpZ2F0b3ItaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZSgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmUucHJvdG90eXBlLCBcImhhcmR3YXJlQ29uY3VycmVuY3lcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaGFyZHdhcmVDb25jdXJyZW5jeTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5OYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmUucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZVwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTmF2aWdhdG9yQ29uY3VycmVudEhhcmR3YXJlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmUsXG4gIGV4cG9zZToge1xuICAgIFxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9uYXZpZ2F0b3IvTmF2aWdhdG9yQ29uY3VycmVudEhhcmR3YXJlLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBOYXZpZ2F0b3JDb29raWVzKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdmlnYXRvckNvb2tpZXMucHJvdG90eXBlLCBcImNvb2tpZUVuYWJsZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uY29va2llRW5hYmxlZDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5OYXZpZ2F0b3JDb29raWVzLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJOYXZpZ2F0b3JDb29raWVzXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOYXZpZ2F0b3JDb29raWVzLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5hdmlnYXRvckNvb2tpZXMucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogTmF2aWdhdG9yQ29va2llcyxcbiAgZXhwb3NlOiB7XG4gICAgXG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25hdmlnYXRvci9OYXZpZ2F0b3JDb29raWVzLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBOYXZpZ2F0b3JJRCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXZpZ2F0b3JJRC5wcm90b3R5cGUsIFwiYXBwQ29kZU5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uYXBwQ29kZU5hbWU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXZpZ2F0b3JJRC5wcm90b3R5cGUsIFwiYXBwTmFtZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5hcHBOYW1lO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTmF2aWdhdG9ySUQucHJvdG90eXBlLCBcImFwcFZlcnNpb25cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uYXBwVmVyc2lvbjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdmlnYXRvcklELnByb3RvdHlwZSwgXCJwbGF0Zm9ybVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wbGF0Zm9ybTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdmlnYXRvcklELnByb3RvdHlwZSwgXCJwcm9kdWN0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnByb2R1Y3Q7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXZpZ2F0b3JJRC5wcm90b3R5cGUsIFwicHJvZHVjdFN1YlwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wcm9kdWN0U3ViO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTmF2aWdhdG9ySUQucHJvdG90eXBlLCBcInVzZXJBZ2VudFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS51c2VyQWdlbnQ7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXZpZ2F0b3JJRC5wcm90b3R5cGUsIFwidmVuZG9yXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnZlbmRvcjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdmlnYXRvcklELnByb3RvdHlwZSwgXCJ2ZW5kb3JTdWJcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udmVuZG9yU3ViO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbk5hdmlnYXRvcklELnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJOYXZpZ2F0b3JJRFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTmF2aWdhdG9ySUQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTmF2aWdhdG9ySUQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogTmF2aWdhdG9ySUQsXG4gIGV4cG9zZToge1xuICAgIFxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9uYXZpZ2F0b3IvTmF2aWdhdG9ySUQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIE5hdmlnYXRvckxhbmd1YWdlKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdmlnYXRvckxhbmd1YWdlLnByb3RvdHlwZSwgXCJsYW5ndWFnZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5sYW5ndWFnZTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdmlnYXRvckxhbmd1YWdlLnByb3RvdHlwZSwgXCJsYW5ndWFnZXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ubGFuZ3VhZ2VzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5OYXZpZ2F0b3JMYW5ndWFnZS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiTmF2aWdhdG9yTGFuZ3VhZ2VcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5hdmlnYXRvckxhbmd1YWdlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5hdmlnYXRvckxhbmd1YWdlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IE5hdmlnYXRvckxhbmd1YWdlLFxuICBleHBvc2U6IHtcbiAgICBcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbmF2aWdhdG9yL05hdmlnYXRvckxhbmd1YWdlLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBOYXZpZ2F0b3JPbkxpbmUoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTmF2aWdhdG9yT25MaW5lLnByb3RvdHlwZSwgXCJvbkxpbmVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ub25MaW5lO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cbk5hdmlnYXRvck9uTGluZS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiTmF2aWdhdG9yT25MaW5lXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOYXZpZ2F0b3JPbkxpbmUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTmF2aWdhdG9yT25MaW5lLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IE5hdmlnYXRvck9uTGluZSxcbiAgZXhwb3NlOiB7XG4gICAgXG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25hdmlnYXRvci9OYXZpZ2F0b3JPbkxpbmUtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIE5hdmlnYXRvclBsdWdpbnMoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5cbk5hdmlnYXRvclBsdWdpbnMucHJvdG90eXBlLmphdmFFbmFibGVkID0gZnVuY3Rpb24gamF2YUVuYWJsZWQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmphdmFFbmFibGVkKCk7XG59O1xuXG5OYXZpZ2F0b3JQbHVnaW5zLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJOYXZpZ2F0b3JQbHVnaW5zXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShOYXZpZ2F0b3JQbHVnaW5zLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5hdmlnYXRvclBsdWdpbnMucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogTmF2aWdhdG9yUGx1Z2lucyxcbiAgZXhwb3NlOiB7XG4gICAgXG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25hdmlnYXRvci9OYXZpZ2F0b3JQbHVnaW5zLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEV2ZW50VGFyZ2V0ID0gcmVxdWlyZShcIi4vRXZlbnRUYXJnZXQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gTm9kZSgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoTm9kZS5wcm90b3R5cGUsIEV2ZW50VGFyZ2V0LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKE5vZGUsIEV2ZW50VGFyZ2V0LmludGVyZmFjZSk7XG5cblxuTm9kZS5wcm90b3R5cGUuaGFzQ2hpbGROb2RlcyA9IGZ1bmN0aW9uIGhhc0NoaWxkTm9kZXMoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB0aGlzW2ltcGxdLmhhc0NoaWxkTm9kZXMoKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZSgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0ubm9ybWFsaXplKCk7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbiBjbG9uZU5vZGUoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDE7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiYm9vbGVhblwiXShhcmdzWzBdKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzWzBdID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY2xvbmVOb2RlKC4uLmFyZ3MpKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLmlzRXF1YWxOb2RlID0gZnVuY3Rpb24gaXNFcXVhbE5vZGUob3RoZXJOb2RlKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnaXNFcXVhbE5vZGUnIG9uICdOb2RlJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gPT09IG51bGwgfHwgYXJnc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1swXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uaXNFcXVhbE5vZGUoLi4uYXJncyk7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA9IGZ1bmN0aW9uIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG90aGVyKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29tcGFyZURvY3VtZW50UG9zaXRpb24nIG9uICdOb2RlJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uY29tcGFyZURvY3VtZW50UG9zaXRpb24oLi4uYXJncyk7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKG90aGVyKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGFpbnMnIG9uICdOb2RlJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gPT09IG51bGwgfHwgYXJnc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJnc1swXSA9IG51bGw7XG4gIH0gZWxzZSB7XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0uY29udGFpbnMoLi4uYXJncyk7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUgPSBmdW5jdGlvbiBpbnNlcnRCZWZvcmUobm9kZSwgY2hpbGQpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdpbnNlcnRCZWZvcmUnIG9uICdOb2RlJzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIGlmIChhcmdzWzFdID09PSBudWxsIHx8IGFyZ3NbMV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3NbMV0gPSBudWxsO1xuICB9IGVsc2Uge1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmluc2VydEJlZm9yZSguLi5hcmdzKSk7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZCA9IGZ1bmN0aW9uIGFwcGVuZENoaWxkKG5vZGUpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmRDaGlsZCcgb24gJ05vZGUnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5hcHBlbmRDaGlsZCguLi5hcmdzKSk7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQgPSBmdW5jdGlvbiByZXBsYWNlQ2hpbGQobm9kZSwgY2hpbGQpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdyZXBsYWNlQ2hpbGQnIG9uICdOb2RlJzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IFwiICsgYXJndW1lbnRzLmxlbmd0aCArIFwiIHByZXNlbnQuXCIpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnJlcGxhY2VDaGlsZCguLi5hcmdzKSk7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIHJlbW92ZUNoaWxkKGNoaWxkKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAncmVtb3ZlQ2hpbGQnIG9uICdOb2RlJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucmVtb3ZlQ2hpbGQoLi4uYXJncykpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLCBcIkVMRU1FTlRfTk9ERVwiLCB7XG4gIHZhbHVlOiAxLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJFTEVNRU5UX05PREVcIiwge1xuICB2YWx1ZTogMSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLCBcIkFUVFJJQlVURV9OT0RFXCIsIHtcbiAgdmFsdWU6IDIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIkFUVFJJQlVURV9OT0RFXCIsIHtcbiAgdmFsdWU6IDIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJURVhUX05PREVcIiwge1xuICB2YWx1ZTogMyxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiVEVYVF9OT0RFXCIsIHtcbiAgdmFsdWU6IDMsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJDREFUQV9TRUNUSU9OX05PREVcIiwge1xuICB2YWx1ZTogNCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiQ0RBVEFfU0VDVElPTl9OT0RFXCIsIHtcbiAgdmFsdWU6IDQsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJFTlRJVFlfUkVGRVJFTkNFX05PREVcIiwge1xuICB2YWx1ZTogNSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiRU5USVRZX1JFRkVSRU5DRV9OT0RFXCIsIHtcbiAgdmFsdWU6IDUsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJFTlRJVFlfTk9ERVwiLCB7XG4gIHZhbHVlOiA2LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJFTlRJVFlfTk9ERVwiLCB7XG4gIHZhbHVlOiA2LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFXCIsIHtcbiAgdmFsdWU6IDcsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERVwiLCB7XG4gIHZhbHVlOiA3LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiQ09NTUVOVF9OT0RFXCIsIHtcbiAgdmFsdWU6IDgsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIkNPTU1FTlRfTk9ERVwiLCB7XG4gIHZhbHVlOiA4LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiRE9DVU1FTlRfTk9ERVwiLCB7XG4gIHZhbHVlOiA5LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJET0NVTUVOVF9OT0RFXCIsIHtcbiAgdmFsdWU6IDksXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJET0NVTUVOVF9UWVBFX05PREVcIiwge1xuICB2YWx1ZTogMTAsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIkRPQ1VNRU5UX1RZUEVfTk9ERVwiLCB7XG4gIHZhbHVlOiAxMCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLCBcIkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcIiwge1xuICB2YWx1ZTogMTEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcIiwge1xuICB2YWx1ZTogMTEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJOT1RBVElPTl9OT0RFXCIsIHtcbiAgdmFsdWU6IDEyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJOT1RBVElPTl9OT0RFXCIsIHtcbiAgdmFsdWU6IDEyLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcIm5vZGVUeXBlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLm5vZGVUeXBlO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwibm9kZU5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubm9kZU5hbWU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJiYXNlVVJJXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmJhc2VVUkk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJvd25lckRvY3VtZW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm93bmVyRG9jdW1lbnQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwicGFyZW50Tm9kZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5wYXJlbnROb2RlKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcInBhcmVudEVsZW1lbnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucGFyZW50RWxlbWVudCk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJjaGlsZE5vZGVzXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmNoaWxkTm9kZXMpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiZmlyc3RDaGlsZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5maXJzdENoaWxkKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcImxhc3RDaGlsZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5sYXN0Q2hpbGQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwicHJldmlvdXNTaWJsaW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnByZXZpb3VzU2libGluZyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJuZXh0U2libGluZ1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5uZXh0U2libGluZyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJub2RlVmFsdWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubm9kZVZhbHVlO1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgfVxuICAgIHRoaXNbaW1wbF0ubm9kZVZhbHVlID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCBcInRleHRDb250ZW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnRleHRDb250ZW50O1xuICB9LFxuICBzZXQoVikge1xuICAgIGlmIChWID09PSBudWxsIHx8IFYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgViA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oVik7XG4gICAgfVxuICAgIHRoaXNbaW1wbF0udGV4dENvbnRlbnQgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURURcIiwge1xuICB2YWx1ZTogMSxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEXCIsIHtcbiAgdmFsdWU6IDEsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkdcIiwge1xuICB2YWx1ZTogMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HXCIsIHtcbiAgdmFsdWU6IDIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkdcIiwge1xuICB2YWx1ZTogNCxcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HXCIsIHtcbiAgdmFsdWU6IDQsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOU1wiLCB7XG4gIHZhbHVlOiA4LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOU1wiLCB7XG4gIHZhbHVlOiA4LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZXCIsIHtcbiAgdmFsdWU6IDE2LFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwgXCJET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQllcIiwge1xuICB2YWx1ZTogMTYsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZSwgXCJET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJQ1wiLCB7XG4gIHZhbHVlOiAzMixcbiAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsIFwiRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVNRU5UQVRJT05fU1BFQ0lGSUNcIiwge1xuICB2YWx1ZTogMzIsXG4gIGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5cbk5vZGUucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk5vZGVcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5vZGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTm9kZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgRXZlbnRUYXJnZXQuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICB0aGlzLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogTm9kZSxcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IE5vZGU6IE5vZGUgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9Ob2RlLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IGltcGwgPSB1dGlscy5pbXBsU3ltYm9sO1xuXG5mdW5jdGlvbiBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGUoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLnByb3RvdHlwZSwgXCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLnByb3RvdHlwZSwgXCJuZXh0RWxlbWVudFNpYmxpbmdcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ubmV4dEVsZW1lbnRTaWJsaW5nKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuXG5Ob25Eb2N1bWVudFR5cGVDaGlsZE5vZGUucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZVwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGUsXG4gIGV4cG9zZToge1xuICAgIFxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ub2Rlcy9Ob25Eb2N1bWVudFR5cGVDaGlsZE5vZGUtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIE5vbkVsZW1lbnRQYXJlbnROb2RlKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cblxuXG5Ob25FbGVtZW50UGFyZW50Tm9kZS5wcm90b3R5cGUuZ2V0RWxlbWVudEJ5SWQgPSBmdW5jdGlvbiBnZXRFbGVtZW50QnlJZChlbGVtZW50SWQpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRFbGVtZW50QnlJZCcgb24gJ05vbkVsZW1lbnRQYXJlbnROb2RlJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5nZXRFbGVtZW50QnlJZCguLi5hcmdzKSk7XG59O1xuXG5Ob25FbGVtZW50UGFyZW50Tm9kZS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiTm9uRWxlbWVudFBhcmVudE5vZGVcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5vbkVsZW1lbnRQYXJlbnROb2RlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGNyZWF0ZUltcGwoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKE5vbkVsZW1lbnRQYXJlbnROb2RlLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IE5vbkVsZW1lbnRQYXJlbnROb2RlLFxuICBleHBvc2U6IHtcbiAgICBcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvTm9uRWxlbWVudFBhcmVudE5vZGUtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFBhcmVudE5vZGUoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5cblBhcmVudE5vZGUucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IgPSBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yKHNlbGVjdG9ycykge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3F1ZXJ5U2VsZWN0b3InIG9uICdQYXJlbnROb2RlJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5xdWVyeVNlbGVjdG9yKC4uLmFyZ3MpKTtcbn07XG5cblBhcmVudE5vZGUucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwgPSBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ycykge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3F1ZXJ5U2VsZWN0b3JBbGwnIG9uICdQYXJlbnROb2RlJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5xdWVyeVNlbGVjdG9yQWxsKC4uLmFyZ3MpKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUGFyZW50Tm9kZS5wcm90b3R5cGUsIFwiY2hpbGRyZW5cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uY2hpbGRyZW4pO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUGFyZW50Tm9kZS5wcm90b3R5cGUsIFwiZmlyc3RFbGVtZW50Q2hpbGRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0uZmlyc3RFbGVtZW50Q2hpbGQpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUGFyZW50Tm9kZS5wcm90b3R5cGUsIFwibGFzdEVsZW1lbnRDaGlsZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5sYXN0RWxlbWVudENoaWxkKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFBhcmVudE5vZGUucHJvdG90eXBlLCBcImNoaWxkRWxlbWVudENvdW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmNoaWxkRWxlbWVudENvdW50O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cblBhcmVudE5vZGUucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIlBhcmVudE5vZGVcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFBhcmVudE5vZGUucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoUGFyZW50Tm9kZS5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBQYXJlbnROb2RlLFxuICBleHBvc2U6IHtcbiAgICBcbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvUGFyZW50Tm9kZS1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBFdmVudCA9IHJlcXVpcmUoXCIuL0V2ZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5jb25zdCBjb252ZXJ0UG9wU3RhdGVFdmVudEluaXQgPSByZXF1aXJlKFwiLi9Qb3BTdGF0ZUV2ZW50SW5pdFwiKS5jb252ZXJ0O1xuXG5mdW5jdGlvbiBQb3BTdGF0ZUV2ZW50KHR5cGUpIHtcbiAgaWYgKCFuZXcudGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1BvcFN0YXRlRXZlbnQnLiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvcjsgdGhpcyBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQb3BTdGF0ZUV2ZW50JzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMjsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVydFBvcFN0YXRlRXZlbnRJbml0KGFyZ3NbMV0pO1xuXG4gIGlmYWNlLnNldHVwKHRoaXMsIGFyZ3MpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKFBvcFN0YXRlRXZlbnQucHJvdG90eXBlLCBFdmVudC5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihQb3BTdGF0ZUV2ZW50LCBFdmVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wU3RhdGVFdmVudC5wcm90b3R5cGUsIFwic3RhdGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc3RhdGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuUG9wU3RhdGVFdmVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiUG9wU3RhdGVFdmVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoUG9wU3RhdGVFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShQb3BTdGF0ZUV2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBFdmVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBQb3BTdGF0ZUV2ZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgUG9wU3RhdGVFdmVudDogUG9wU3RhdGVFdmVudCB9LFxuICAgIFdvcmtlcjogeyBQb3BTdGF0ZUV2ZW50OiBQb3BTdGF0ZUV2ZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vZXZlbnRzL1BvcFN0YXRlRXZlbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuXG5jb25zdCBFdmVudEluaXQgPSByZXF1aXJlKFwiLi9FdmVudEluaXRcIik7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb252ZXJ0SW5oZXJpdChvYmosIHJldCkge1xuICAgIEV2ZW50SW5pdC5jb252ZXJ0SW5oZXJpdChvYmosIHJldCk7XG4gICAgbGV0IGtleSwgdmFsdWU7XG5cbiAgICBrZXkgPSBcInN0YXRlXCI7XG4gICAgdmFsdWUgPSBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGwgPyB1bmRlZmluZWQgOiBvYmpba2V5XTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tleV0gPSBjb252ZXJzaW9uc1tcImFueVwiXSh2YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIGNvbnZlcnQob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IGhhcyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlIHx8IG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgbWF5IG5vdCBiZSBhIERhdGUgb3IgUmVnRXhwIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIG1vZHVsZS5leHBvcnRzLmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgQ2hhcmFjdGVyRGF0YSA9IHJlcXVpcmUoXCIuL0NoYXJhY3RlckRhdGEuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gUHJvY2Vzc2luZ0luc3RydWN0aW9uKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLCBDaGFyYWN0ZXJEYXRhLmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgQ2hhcmFjdGVyRGF0YS5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvY2Vzc2luZ0luc3RydWN0aW9uLnByb3RvdHlwZSwgXCJ0YXJnZXRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udGFyZ2V0O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cblByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiUHJvY2Vzc2luZ0luc3RydWN0aW9uXCI7XG5cbmNvbnN0IGlmYWNlID0ge1xuICBtaXhlZEludG86IFtdLFxuICBpcyhvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqW2ltcGxdIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGlzSW1wbChvYmopIHtcbiAgICBpZiAob2JqKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgSW1wbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHV0aWxzLndyYXBwZXJGb3JJbXBsKG9iaik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgY3JlYXRlKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoUHJvY2Vzc2luZ0luc3RydWN0aW9uLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBDaGFyYWN0ZXJEYXRhLl9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IFByb2Nlc3NpbmdJbnN0cnVjdGlvbixcbiAgZXhwb3NlOiB7XG4gICAgV2luZG93OiB7IFByb2Nlc3NpbmdJbnN0cnVjdGlvbjogUHJvY2Vzc2luZ0luc3RydWN0aW9uIH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvUHJvY2Vzc2luZ0luc3RydWN0aW9uLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEV2ZW50ID0gcmVxdWlyZShcIi4vRXZlbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IGNvbnZlcnRQcm9ncmVzc0V2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL1Byb2dyZXNzRXZlbnRJbml0XCIpLmNvbnZlcnQ7XG5cbmZ1bmN0aW9uIFByb2dyZXNzRXZlbnQodHlwZSkge1xuICBpZiAoIW5ldy50YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvZ3Jlc3NFdmVudCcuIFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yOyB0aGlzIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb2dyZXNzRXZlbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJ0UHJvZ3Jlc3NFdmVudEluaXQoYXJnc1sxXSk7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoUHJvZ3Jlc3NFdmVudC5wcm90b3R5cGUsIEV2ZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKFByb2dyZXNzRXZlbnQsIEV2ZW50LmludGVyZmFjZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcm9ncmVzc0V2ZW50LnByb3RvdHlwZSwgXCJsZW5ndGhDb21wdXRhYmxlXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmxlbmd0aENvbXB1dGFibGU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcm9ncmVzc0V2ZW50LnByb3RvdHlwZSwgXCJsb2FkZWRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ubG9hZGVkO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUHJvZ3Jlc3NFdmVudC5wcm90b3R5cGUsIFwidG90YWxcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udG90YWw7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuUHJvZ3Jlc3NFdmVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiUHJvZ3Jlc3NFdmVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoUHJvZ3Jlc3NFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShQcm9ncmVzc0V2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBFdmVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBQcm9ncmVzc0V2ZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgUHJvZ3Jlc3NFdmVudDogUHJvZ3Jlc3NFdmVudCB9LFxuICAgIERlZGljYXRlZFdvcmtlcjogeyBQcm9ncmVzc0V2ZW50OiBQcm9ncmVzc0V2ZW50IH0sXG4gICAgU2hhcmVkV29ya2VyOiB7IFByb2dyZXNzRXZlbnQ6IFByb2dyZXNzRXZlbnQgfVxuICB9XG59O1xubW9kdWxlLmV4cG9ydHMgPSBpZmFjZTtcblxuY29uc3QgSW1wbCA9IHJlcXVpcmUoXCIuLi9ldmVudHMvUHJvZ3Jlc3NFdmVudC1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbmNvbnN0IEV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL0V2ZW50SW5pdFwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KSB7XG4gICAgRXZlbnRJbml0LmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICBsZXQga2V5LCB2YWx1ZTtcblxuICAgIGtleSA9IFwibGVuZ3RoQ29tcHV0YWJsZVwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2tleV0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBrZXkgPSBcImxvYWRlZFwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nIGxvbmdcIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IDA7XG4gICAgfVxuXG4gICAga2V5ID0gXCJ0b3RhbFwiO1xuICAgIHZhbHVlID0gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldFtrZXldID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nIGxvbmdcIl0odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRba2V5XSA9IDA7XG4gICAgfVxuICB9LFxuXG4gIGNvbnZlcnQob2JqKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEaWN0aW9uYXJ5IGhhcyB0byBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlIHx8IG9iaiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgbWF5IG5vdCBiZSBhIERhdGUgb3IgUmVnRXhwIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIG1vZHVsZS5leHBvcnRzLmNvbnZlcnRJbmhlcml0KG9iaiwgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgQ2hhcmFjdGVyRGF0YSA9IHJlcXVpcmUoXCIuL0NoYXJhY3RlckRhdGEuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gVGV4dCgpIHtcblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgMTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgaWYgKGFyZ3NbMF0gIT09IHVuZGVmaW5lZCkge1xuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc1swXSA9IFwiXCI7XG4gIH1cblxuICBpZmFjZS5zZXR1cCh0aGlzLCBhcmdzKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihUZXh0LnByb3RvdHlwZSwgQ2hhcmFjdGVyRGF0YS5pbnRlcmZhY2UucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihUZXh0LCBDaGFyYWN0ZXJEYXRhLmludGVyZmFjZSk7XG5cblxuVGV4dC5wcm90b3R5cGUuc3BsaXRUZXh0ID0gZnVuY3Rpb24gc3BsaXRUZXh0KG9mZnNldCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NwbGl0VGV4dCcgb24gJ1RleHQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAxOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdKGFyZ3NbMF0pO1xuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5zcGxpdFRleHQoLi4uYXJncykpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0LnByb3RvdHlwZSwgXCJ3aG9sZVRleHRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0ud2hvbGVUZXh0O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cblRleHQucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIlRleHRcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFRleHQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoVGV4dC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gICAgQ2hhcmFjdGVyRGF0YS5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBUZXh0LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgVGV4dDogVGV4dCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL25vZGVzL1RleHQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgVUlFdmVudCA9IHJlcXVpcmUoXCIuL1VJRXZlbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gVG91Y2hFdmVudCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoVG91Y2hFdmVudC5wcm90b3R5cGUsIFVJRXZlbnQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoVG91Y2hFdmVudCwgVUlFdmVudC5pbnRlcmZhY2UpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVG91Y2hFdmVudC5wcm90b3R5cGUsIFwidG91Y2hlc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS50b3VjaGVzKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRvdWNoRXZlbnQucHJvdG90eXBlLCBcInRhcmdldFRvdWNoZXNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0udGFyZ2V0VG91Y2hlcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb3VjaEV2ZW50LnByb3RvdHlwZSwgXCJjaGFuZ2VkVG91Y2hlc1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jaGFuZ2VkVG91Y2hlcyk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb3VjaEV2ZW50LnByb3RvdHlwZSwgXCJhbHRLZXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uYWx0S2V5O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVG91Y2hFdmVudC5wcm90b3R5cGUsIFwibWV0YUtleVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5tZXRhS2V5O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVG91Y2hFdmVudC5wcm90b3R5cGUsIFwiY3RybEtleVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5jdHJsS2V5O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVG91Y2hFdmVudC5wcm90b3R5cGUsIFwic2hpZnRLZXlcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uc2hpZnRLZXk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuVG91Y2hFdmVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiVG91Y2hFdmVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoVG91Y2hFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShUb3VjaEV2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBVSUV2ZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IFRvdWNoRXZlbnQsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBUb3VjaEV2ZW50OiBUb3VjaEV2ZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vZXZlbnRzL1RvdWNoRXZlbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzLmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFRyZWVXYWxrZXIoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xufVxuXG5cblRyZWVXYWxrZXIucHJvdG90eXBlLnBhcmVudE5vZGUgPSBmdW5jdGlvbiBwYXJlbnROb2RlKCkge1xuICBpZiAoIXRoaXMgfHwgIW1vZHVsZS5leHBvcnRzLmlzKHRoaXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgaW52b2NhdGlvblwiKTtcbiAgfVxuICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5wYXJlbnROb2RlKCkpO1xufTtcblxuVHJlZVdhbGtlci5wcm90b3R5cGUuZmlyc3RDaGlsZCA9IGZ1bmN0aW9uIGZpcnN0Q2hpbGQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmZpcnN0Q2hpbGQoKSk7XG59O1xuXG5UcmVlV2Fsa2VyLnByb3RvdHlwZS5sYXN0Q2hpbGQgPSBmdW5jdGlvbiBsYXN0Q2hpbGQoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmxhc3RDaGlsZCgpKTtcbn07XG5cblRyZWVXYWxrZXIucHJvdG90eXBlLnByZXZpb3VzU2libGluZyA9IGZ1bmN0aW9uIHByZXZpb3VzU2libGluZygpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ucHJldmlvdXNTaWJsaW5nKCkpO1xufTtcblxuVHJlZVdhbGtlci5wcm90b3R5cGUubmV4dFNpYmxpbmcgPSBmdW5jdGlvbiBuZXh0U2libGluZygpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ubmV4dFNpYmxpbmcoKSk7XG59O1xuXG5UcmVlV2Fsa2VyLnByb3RvdHlwZS5wcmV2aW91c05vZGUgPSBmdW5jdGlvbiBwcmV2aW91c05vZGUoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnByZXZpb3VzTm9kZSgpKTtcbn07XG5cblRyZWVXYWxrZXIucHJvdG90eXBlLm5leHROb2RlID0gZnVuY3Rpb24gbmV4dE5vZGUoKSB7XG4gIGlmICghdGhpcyB8fCAhbW9kdWxlLmV4cG9ydHMuaXModGhpcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uXCIpO1xuICB9XG4gIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm5leHROb2RlKCkpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmVlV2Fsa2VyLnByb3RvdHlwZSwgXCJyb290XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLnJvb3QpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZVdhbGtlci5wcm90b3R5cGUsIFwid2hhdFRvU2hvd1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS53aGF0VG9TaG93O1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZVdhbGtlci5wcm90b3R5cGUsIFwiZmlsdGVyXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLmZpbHRlcik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmVlV2Fsa2VyLnByb3RvdHlwZSwgXCJjdXJyZW50Tm9kZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5jdXJyZW50Tm9kZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5jdXJyZW50Tm9kZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5cblRyZWVXYWxrZXIucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIlRyZWVXYWxrZXJcIjtcblxuY29uc3QgaWZhY2UgPSB7XG4gIG1peGVkSW50bzogW10sXG4gIGlzKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIG1vZHVsZS5leHBvcnRzLm1peGVkSW50b1tpXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNJbXBsKG9iaikge1xuICAgIGlmIChvYmopIHtcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVyID0gdXRpbHMud3JhcHBlckZvckltcGwob2JqKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFRyZWVXYWxrZXIucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoVHJlZVdhbGtlci5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gdXRpbHMuaW1wbEZvcldyYXBwZXIob2JqKTtcbiAgfSxcbiAgX2ludGVybmFsU2V0dXAob2JqKSB7XG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBUcmVlV2Fsa2VyLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgVHJlZVdhbGtlcjogVHJlZVdhbGtlciB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL3RyYXZlcnNhbC9UcmVlV2Fsa2VyLWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcbmNvbnN0IEV2ZW50ID0gcmVxdWlyZShcIi4vRXZlbnQuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcbmNvbnN0IGNvbnZlcnRVSUV2ZW50SW5pdCA9IHJlcXVpcmUoXCIuL1VJRXZlbnRJbml0XCIpLmNvbnZlcnQ7XG5cbmZ1bmN0aW9uIFVJRXZlbnQodHlwZSkge1xuICBpZiAoIW5ldy50YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnVUlFdmVudCcuIFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yOyB0aGlzIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1VJRXZlbnQnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSBcIiArIGFyZ3VtZW50cy5sZW5ndGggKyBcIiBwcmVzZW50LlwiKTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoICYmIGkgPCAyOyArK2kpIHtcbiAgICBhcmdzW2ldID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoYXJndW1lbnRzW2ldKTtcbiAgfVxuICBhcmdzWzBdID0gY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0oYXJnc1swXSk7XG4gIGFyZ3NbMV0gPSBjb252ZXJ0VUlFdmVudEluaXQoYXJnc1sxXSk7XG5cbiAgaWZhY2Uuc2V0dXAodGhpcywgYXJncyk7XG59XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoVUlFdmVudC5wcm90b3R5cGUsIEV2ZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKFVJRXZlbnQsIEV2ZW50LmludGVyZmFjZSk7XG5cblxuVUlFdmVudC5wcm90b3R5cGUuaW5pdFVJRXZlbnQgPSBmdW5jdGlvbiBpbml0VUlFdmVudCh0eXBlQXJnLCBidWJibGVzQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCA1KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdpbml0VUlFdmVudCcgb24gJ1VJRXZlbnQnOiA1IGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAmJiBpIDwgNTsgKytpKSB7XG4gICAgYXJnc1tpXSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKGFyZ3VtZW50c1tpXSk7XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiRE9NU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBhcmdzWzFdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMV0pO1xuICBhcmdzWzJdID0gY29udmVyc2lvbnNbXCJib29sZWFuXCJdKGFyZ3NbMl0pO1xuICBpZiAoYXJnc1szXSA9PT0gbnVsbCB8fCBhcmdzWzNdID09PSB1bmRlZmluZWQpIHtcbiAgICBhcmdzWzNdID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgfVxuICBhcmdzWzRdID0gY29udmVyc2lvbnNbXCJsb25nXCJdKGFyZ3NbNF0pO1xuICByZXR1cm4gdGhpc1tpbXBsXS5pbml0VUlFdmVudCguLi5hcmdzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVUlFdmVudC5wcm90b3R5cGUsIFwidmlld1wiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS52aWV3KTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVJRXZlbnQucHJvdG90eXBlLCBcImRldGFpbFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5kZXRhaWw7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuVUlFdmVudC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiVUlFdmVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoVUlFdmVudC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShVSUV2ZW50LnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgICBFdmVudC5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gIH0sXG4gIHNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGlmICghcHJpdmF0ZURhdGEpIHByaXZhdGVEYXRhID0ge307XG4gICAgcHJpdmF0ZURhdGEud3JhcHBlciA9IG9iajtcblxuICAgIHRoaXMuX2ludGVybmFsU2V0dXAob2JqKTtcblxuICAgIG9ialtpbXBsXSA9IG5ldyBJbXBsLmltcGxlbWVudGF0aW9uKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIG9ialtpbXBsXVt1dGlscy53cmFwcGVyU3ltYm9sXSA9IG9iajtcbiAgfSxcbiAgaW50ZXJmYWNlOiBVSUV2ZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgVUlFdmVudDogVUlFdmVudCB9XG4gIH1cbn07XG5tb2R1bGUuZXhwb3J0cyA9IGlmYWNlO1xuXG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4uL2V2ZW50cy9VSUV2ZW50LWltcGwuanNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxuY29uc3QgRXZlbnRJbml0ID0gcmVxdWlyZShcIi4vRXZlbnRJbml0XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29udmVydEluaGVyaXQob2JqLCByZXQpIHtcbiAgICBFdmVudEluaXQuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIGxldCBrZXksIHZhbHVlO1xuXG4gICAga2V5ID0gXCJkZXRhaWxcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9IGNvbnZlcnNpb25zW1wibG9uZ1wiXSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gMDtcbiAgICB9XG5cbiAgICBrZXkgPSBcInZpZXdcIjtcbiAgICB2YWx1ZSA9IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXRba2V5XSA9ICh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFtrZXldID0gbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgY29udmVydChvYmopIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRpY3Rpb25hcnkgaGFzIHRvIGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUgfHwgb2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGljdGlvbmFyeSBtYXkgbm90IGJlIGEgRGF0ZSBvciBSZWdFeHAgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbW9kdWxlLmV4cG9ydHMuY29udmVydEluaGVyaXQob2JqLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gV2luZG93RXZlbnRIYW5kbGVycygpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmFmdGVycHJpbnRcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25hZnRlcnByaW50KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uYWZ0ZXJwcmludCA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25iZWZvcmVwcmludFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmJlZm9yZXByaW50KTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uYmVmb3JlcHJpbnQgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9uYmVmb3JldW5sb2FkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9uYmVmb3JldW5sb2FkKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uYmVmb3JldW5sb2FkID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbmhhc2hjaGFuZ2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25oYXNoY2hhbmdlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uaGFzaGNoYW5nZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25sYW5ndWFnZWNoYW5nZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbmxhbmd1YWdlY2hhbmdlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ubGFuZ3VhZ2VjaGFuZ2UgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ubWVzc2FnZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbm1lc3NhZ2UpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25tZXNzYWdlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbm9mZmxpbmVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25vZmZsaW5lKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ub2ZmbGluZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25vbmxpbmVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25vbmxpbmUpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25vbmxpbmUgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ucGFnZWhpZGVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25wYWdlaGlkZSk7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgdGhpc1tpbXBsXS5vbnBhZ2VoaWRlID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnBhZ2VzaG93XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9ucGFnZXNob3cpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25wYWdlc2hvdyA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib25wb3BzdGF0ZVwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnBvcHN0YXRlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9ucG9wc3RhdGUgPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9ucmVqZWN0aW9uaGFuZGxlZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdXRpbHMudHJ5V3JhcHBlckZvckltcGwodGhpc1tpbXBsXS5vbnJlamVjdGlvbmhhbmRsZWQpO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub25yZWplY3Rpb25oYW5kbGVkID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXaW5kb3dFdmVudEhhbmRsZXJzLnByb3RvdHlwZSwgXCJvbnN0b3JhZ2VcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub25zdG9yYWdlKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9uc3RvcmFnZSA9IHV0aWxzLnRyeUltcGxGb3JXcmFwcGVyKFYpO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUsIFwib251bmhhbmRsZWRyZWplY3Rpb25cIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKHRoaXNbaW1wbF0ub251bmhhbmRsZWRyZWplY3Rpb24pO1xuICB9LFxuICBzZXQoVikge1xuICAgIHRoaXNbaW1wbF0ub251bmhhbmRsZWRyZWplY3Rpb24gPSB1dGlscy50cnlJbXBsRm9yV3JhcHBlcihWKTtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdpbmRvd0V2ZW50SGFuZGxlcnMucHJvdG90eXBlLCBcIm9udW5sb2FkXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB1dGlscy50cnlXcmFwcGVyRm9ySW1wbCh0aGlzW2ltcGxdLm9udW5sb2FkKTtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICB0aGlzW2ltcGxdLm9udW5sb2FkID0gdXRpbHMudHJ5SW1wbEZvcldyYXBwZXIoVik7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxuV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiV2luZG93RXZlbnRIYW5kbGVyc1wiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoV2luZG93RXZlbnRIYW5kbGVycy5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBjcmVhdGVJbXBsKGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBsZXQgb2JqID0gT2JqZWN0LmNyZWF0ZShXaW5kb3dFdmVudEhhbmRsZXJzLnByb3RvdHlwZSk7XG4gICAgdGhpcy5zZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpO1xuICAgIHJldHVybiB1dGlscy5pbXBsRm9yV3JhcHBlcihvYmopO1xuICB9LFxuICBfaW50ZXJuYWxTZXR1cChvYmopIHtcbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IFdpbmRvd0V2ZW50SGFuZGxlcnMsXG4gIGV4cG9zZToge1xuICAgIFdpbmRvdzogeyBXaW5kb3dFdmVudEhhbmRsZXJzOiBXaW5kb3dFdmVudEhhbmRsZXJzIH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvV2luZG93RXZlbnRIYW5kbGVycy1pbXBsLmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBEb2N1bWVudCA9IHJlcXVpcmUoXCIuL0RvY3VtZW50LmpzXCIpO1xuY29uc3QgaW1wbCA9IHV0aWxzLmltcGxTeW1ib2w7XG5cbmZ1bmN0aW9uIFhNTERvY3VtZW50KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3RvclwiKTtcbn1cbk9iamVjdC5zZXRQcm90b3R5cGVPZihYTUxEb2N1bWVudC5wcm90b3R5cGUsIERvY3VtZW50LmludGVyZmFjZS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKFhNTERvY3VtZW50LCBEb2N1bWVudC5pbnRlcmZhY2UpO1xuXG5cblhNTERvY3VtZW50LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJYTUxEb2N1bWVudFwiO1xuXG5jb25zdCBpZmFjZSA9IHtcbiAgbWl4ZWRJbnRvOiBbXSxcbiAgaXMob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9ialtpbXBsXSBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZHVsZS5leHBvcnRzLm1peGVkSW50by5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgbW9kdWxlLmV4cG9ydHMubWl4ZWRJbnRvW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc0ltcGwob2JqKSB7XG4gICAgaWYgKG9iaikge1xuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEltcGwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB1dGlscy53cmFwcGVyRm9ySW1wbChvYmopO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2R1bGUuZXhwb3J0cy5taXhlZEludG8ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBtb2R1bGUuZXhwb3J0cy5taXhlZEludG9baV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGNyZWF0ZShjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoWE1MRG9jdW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgY3JlYXRlSW1wbChjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgbGV0IG9iaiA9IE9iamVjdC5jcmVhdGUoWE1MRG9jdW1lbnQucHJvdG90eXBlKTtcbiAgICB0aGlzLnNldHVwKG9iaiwgY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgcmV0dXJuIHV0aWxzLmltcGxGb3JXcmFwcGVyKG9iaik7XG4gIH0sXG4gIF9pbnRlcm5hbFNldHVwKG9iaikge1xuICAgIERvY3VtZW50Ll9pbnRlcm5hbFNldHVwKG9iaik7XG5cbiAgfSxcbiAgc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgaWYgKCFwcml2YXRlRGF0YSkgcHJpdmF0ZURhdGEgPSB7fTtcbiAgICBwcml2YXRlRGF0YS53cmFwcGVyID0gb2JqO1xuXG4gICAgdGhpcy5faW50ZXJuYWxTZXR1cChvYmopO1xuXG4gICAgb2JqW2ltcGxdID0gbmV3IEltcGwuaW1wbGVtZW50YXRpb24oY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgb2JqW2ltcGxdW3V0aWxzLndyYXBwZXJTeW1ib2xdID0gb2JqO1xuICB9LFxuICBpbnRlcmZhY2U6IFhNTERvY3VtZW50LFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgWE1MRG9jdW1lbnQ6IFhNTERvY3VtZW50IH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gaWZhY2U7XG5cbmNvbnN0IEltcGwgPSByZXF1aXJlKFwiLi4vbm9kZXMvWE1MRG9jdW1lbnQtaW1wbC5qc1wiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoa2V5c1tpXSBpbiB0YXJnZXQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleXNbaV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXlzW2ldKSk7XG4gIH1cbn07XG5cbmNvbnN0IHdyYXBwZXJTeW1ib2wgPSBTeW1ib2woXCJ3cmFwcGVyXCIpO1xuY29uc3QgaW1wbFN5bWJvbCA9IFN5bWJvbChcImltcGxcIik7XG5cbmZ1bmN0aW9uIHdyYXBwZXJGb3JJbXBsKGltcGwpIHtcbiAgcmV0dXJuIGltcGwgPyBpbXBsW3dyYXBwZXJTeW1ib2xdIDogbnVsbDtcbn07XG5cbmZ1bmN0aW9uIGltcGxGb3JXcmFwcGVyKHdyYXBwZXIpIHtcbiAgcmV0dXJuIHdyYXBwZXIgPyB3cmFwcGVyW2ltcGxTeW1ib2xdIDogbnVsbDtcbn07XG5cbmZ1bmN0aW9uIHRyeVdyYXBwZXJGb3JJbXBsKGltcGwpIHtcbiAgY29uc3Qgd3JhcHBlciA9IHdyYXBwZXJGb3JJbXBsKGltcGwpO1xuICByZXR1cm4gd3JhcHBlciA/IHdyYXBwZXIgOiBpbXBsO1xufTtcblxuZnVuY3Rpb24gdHJ5SW1wbEZvcldyYXBwZXIod3JhcHBlcikge1xuICBjb25zdCBpbXBsID0gaW1wbEZvcldyYXBwZXIod3JhcHBlcik7XG4gIHJldHVybiBpbXBsID8gaW1wbCA6IHdyYXBwZXI7XG59O1xuXG5jb25zdCBpdGVySW50ZXJuYWxTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbFwiKTtcbmNvbnN0IEl0ZXJhdG9yUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKTtcblxubW9kdWxlLmV4cG9ydHMud3JhcHBlclN5bWJvbCA9IHdyYXBwZXJTeW1ib2w7XG5tb2R1bGUuZXhwb3J0cy5pbXBsU3ltYm9sID0gaW1wbFN5bWJvbDtcbm1vZHVsZS5leHBvcnRzLndyYXBwZXJGb3JJbXBsID0gd3JhcHBlckZvckltcGw7XG5tb2R1bGUuZXhwb3J0cy5pbXBsRm9yV3JhcHBlciA9IGltcGxGb3JXcmFwcGVyO1xubW9kdWxlLmV4cG9ydHMudHJ5V3JhcHBlckZvckltcGwgPSB0cnlXcmFwcGVyRm9ySW1wbDtcbm1vZHVsZS5leHBvcnRzLnRyeUltcGxGb3JXcmFwcGVyID0gdHJ5SW1wbEZvcldyYXBwZXI7XG5tb2R1bGUuZXhwb3J0cy5pdGVySW50ZXJuYWxTeW1ib2wgPSBpdGVySW50ZXJuYWxTeW1ib2w7XG5tb2R1bGUuZXhwb3J0cy5JdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yUHJvdG90eXBlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBpbnRlcm5hbFF1ZXJ5U2VsZWN0b3IgPSByZXF1aXJlKFwiLi9zZWxlY3RvcnNcIikucXVlcnlTZWxlY3RvcjtcbmNvbnN0IHdoYXR3Z1VSTCA9IHJlcXVpcmUoXCJ3aGF0d2ctdXJsXCIpO1xuXG5leHBvcnRzLmRvY3VtZW50QmFzZVVSTCA9IGRvY3VtZW50ID0+IHtcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCNkb2N1bWVudC1iYXNlLXVybFxuXG4gIGNvbnN0IGZpcnN0QmFzZSA9IGludGVybmFsUXVlcnlTZWxlY3Rvcihkb2N1bWVudCwgXCJiYXNlW2hyZWZdXCIpO1xuICBjb25zdCBmYWxsYmFja0Jhc2VVUkwgPSBleHBvcnRzLmZhbGxiYWNrQmFzZVVSTChkb2N1bWVudCk7XG5cbiAgaWYgKGZpcnN0QmFzZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxsYmFja0Jhc2VVUkw7XG4gIH1cblxuICByZXR1cm4gZnJvemVuQmFzZVVSTChmaXJzdEJhc2UsIGZhbGxiYWNrQmFzZVVSTCk7XG59O1xuXG5leHBvcnRzLmRvY3VtZW50QmFzZVVSTFNlcmlhbGl6ZWQgPSBkb2N1bWVudCA9PiB7XG4gIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplVVJMKGV4cG9ydHMuZG9jdW1lbnRCYXNlVVJMKGRvY3VtZW50KSk7XG59O1xuXG5leHBvcnRzLmZhbGxiYWNrQmFzZVVSTCA9IGRvY3VtZW50ID0+IHtcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCNmYWxsYmFjay1iYXNlLXVybFxuXG4gIC8vIFVuaW1wbGVtZW50ZWQ6IDxpZnJhbWUgc3JjZG9jPlxuXG4gIGlmIChkb2N1bWVudC5VUkwgPT09IFwiYWJvdXQ6YmxhbmtcIiAmJiBkb2N1bWVudC5fZGVmYXVsdFZpZXcgJiZcbiAgICAgIGRvY3VtZW50Ll9kZWZhdWx0Vmlldy5fcGFyZW50ICE9PSBkb2N1bWVudC5fZGVmYXVsdFZpZXcpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5kb2N1bWVudEJhc2VVUkwoZG9jdW1lbnQuX2RlZmF1bHRWaWV3Ll9wYXJlbnQuX2RvY3VtZW50KTtcbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudC5fVVJMO1xufTtcblxuZXhwb3J0cy5wYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkID0gKHVybCwgZG9jdW1lbnQpID0+IHtcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jcmVzb2x2ZS1hLXVybFxuXG4gIC8vIEVuY29kaW5nIHN0dWZmIGlnbm9yZWQ7IGFsd2F5cyBVVEYtOCBmb3IgdXMsIGZvciBub3cuXG5cbiAgY29uc3QgYmFzZVVSTCA9IGV4cG9ydHMuZG9jdW1lbnRCYXNlVVJMKGRvY3VtZW50KTtcblxuICByZXR1cm4gd2hhdHdnVVJMLnBhcnNlVVJMKHVybCwgeyBiYXNlVVJMIH0pO1xuICAvLyBUaGlzIHJldHVybnMgdGhlIHJlc3VsdGluZyBVUkwgcmVjb3JkOyB0byBnZXQgdGhlIHJlc3VsdGluZyBVUkwgc3RyaW5nLCBqdXN0IHNlcmlhbGl6ZSBpdC5cbn07XG5cbmZ1bmN0aW9uIGZyb3plbkJhc2VVUkwoYmFzZUVsZW1lbnQsIGZhbGxiYWNrQmFzZVVSTCkge1xuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZW1hbnRpY3MuaHRtbCNmcm96ZW4tYmFzZS11cmxcbiAgLy8gVGhlIHNwZWMgaXMgZWFnZXIgKHNldHRpbmcgdGhlIGZyb3plbiBiYXNlIFVSTCB3aGVuIHRoaW5ncyBjaGFuZ2UpOyB3ZSBhcmUgbGF6eSAoZ2V0dGluZyBpdCB3aGVuIHdlIG5lZWQgdG8pXG5cbiAgY29uc3QgYmFzZUhyZWZBdHRyaWJ1dGUgPSBiYXNlRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpO1xuICBjb25zdCByZXN1bHQgPSB3aGF0d2dVUkwucGFyc2VVUkwoYmFzZUhyZWZBdHRyaWJ1dGUsIHsgYmFzZVVSTDogZmFsbGJhY2tCYXNlVVJMIH0pO1xuICByZXR1cm4gcmVzdWx0ID09PSBcImZhaWx1cmVcIiA/IGZhbGxiYWNrQmFzZVVSTCA6IHJlc3VsdDtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3Qgbm9kZVR5cGUgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlLmpzXCIpO1xuY29uc3QgRm9jdXNFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvRm9jdXNFdmVudC5qc1wiKTtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlscy5qc1wiKTtcbmNvbnN0IGlzRGlzYWJsZWQgPSByZXF1aXJlKFwiLi9mb3JtLWNvbnRyb2xzLmpzXCIpLmlzRGlzYWJsZWQ7XG5cbmNvbnN0IGZvY3VzYWJsZUZvcm1FbGVtZW50cyA9IG5ldyBTZXQoW1wiaW5wdXRcIiwgXCJzZWxlY3RcIiwgXCJ0ZXh0YXJlYVwiLCBcImJ1dHRvblwiXSk7XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2ludGVyYWN0aW9uLmh0bWwjZm9jdXNhYmxlLWFyZWEsIGJ1dCBhbHNvIHNvbWUgb2Zcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2ludGVyYWN0aW9uLmh0bWwjZm9jdXNpbmctc3RlcHM6IGUuZy4sIERvY3VtZW50cyBhcmUgbm90IGFjdHVhbGx5IGZvY3VzYWJsZVxuLy8gYXJlYXMsIGJ1dCB0aGVpciB2aWV3cG9ydHMgYXJlLCBhbmQgdGhlIGZpcnN0IHN0ZXAgb2YgdGhlIGxhdHRlciBhbGdvcml0aG0gdHJhbnNsYXRlcyBEb2N1bWVudHMgdG8gdGhlaXIgdmlld3BvcnRzLlxuLy8gQW5kIGFsc28gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNzcGVjaWFsbHktZm9jdXNhYmxlIVxuZXhwb3J0cy5pc0ZvY3VzYWJsZUFyZWFFbGVtZW50ID0gZWxJbXBsID0+IHtcbiAgaWYgKCFlbEltcGwuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3ICYmICFlbEltcGwuX2RlZmF1bHRWaWV3KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGVsSW1wbC5fbm9kZVR5cGUgPT09IG5vZGVUeXBlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghTnVtYmVyLmlzTmFOKHBhcnNlSW50KGVsSW1wbC5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSkpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoZWxJbXBsLl9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSB7XG4gICAgaWYgKGVsSW1wbC5fbG9jYWxOYW1lID09PSBcImlmcmFtZVwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZWxJbXBsLl9sb2NhbE5hbWUgPT09IFwiYVwiICYmIGVsSW1wbC5oYXNBdHRyaWJ1dGUoXCJocmVmXCIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZm9jdXNhYmxlRm9ybUVsZW1lbnRzLmhhcyhlbEltcGwuX2xvY2FsTmFtZSkgJiYgIWlzRGlzYWJsZWQoZWxJbXBsKSkge1xuICAgICAgaWYgKGVsSW1wbC5fbG9jYWxOYW1lID09PSBcImlucHV0XCIgJiYgZWxJbXBsLnR5cGUgPT09IFwiaGlkZGVuXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbnRlcmFjdGlvbi5odG1sI2ZpcmUtYS1mb2N1cy1ldmVudCBwbHVzIHRoZSBzdGVwcyBvZlxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNmb2N1cy11cGRhdGUtc3RlcHMgdGhhdCBhZGp1c3QgRG9jdW1lbnRzIHRvIFdpbmRvd3NcbmV4cG9ydHMuZmlyZUZvY3VzRXZlbnRXaXRoVGFyZ2V0QWRqdXN0bWVudCA9IChuYW1lLCB0YXJnZXQsIHJlbGF0ZWRUYXJnZXQpID0+IHtcbiAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgIC8vIEUuZy4gZmlyaW5nIGJsdXIgd2l0aCBub3RoaW5nIHByZXZpb3VzbHkgZm9jdXNlZC5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBldmVudCA9IEZvY3VzRXZlbnQuY3JlYXRlSW1wbChcbiAgICBbbmFtZSwge1xuICAgICAgYnViYmxlczogZmFsc2UsXG4gICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgIHJlbGF0ZWRUYXJnZXQsXG4gICAgICB2aWV3OiB0YXJnZXQuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3LFxuICAgICAgZGV0YWlsOiAwXG4gICAgfV0sXG4gICAge1xuICAgICAgaXNUcnVzdGVkOiB0cnVlXG4gICAgfVxuICApO1xuXG4gIGlmICh0YXJnZXQuX2RlZmF1bHRWaWV3KSB7XG4gICAgdGFyZ2V0ID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGFyZ2V0Ll9kZWZhdWx0Vmlldyk7XG4gIH1cblxuICAvLyBfZGlzcGF0Y2ggYWxsb3dzIHNldHRpbmcgaXNUcnVzdGVkXG4gIHRhcmdldC5fZGlzcGF0Y2goZXZlbnQpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB7IGlzVmFsaWRTaW1wbGVDb2xvciwgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdBU0NJSVdoaXRlc3BhY2UsIHN0cmlwTmV3bGluZXMgfSA9IHJlcXVpcmUoXCIuL3N0cmluZ3NcIik7XG5cbmNvbnN0IHN1Ym1pdHRhYmxlTG9jYWxOYW1lcyA9IG5ldyBTZXQoW1wiYnV0dG9uXCIsIFwiaW5wdXRcIiwgXCJrZXlnZW5cIiwgXCJvYmplY3RcIiwgXCJzZWxlY3RcIiwgXCJ0ZXh0YXJlYVwiXSk7XG5cbmV4cG9ydHMuaXNEaXNhYmxlZCA9IGZvcm1Db250cm9sID0+IHtcbiAgaWYgKGZvcm1Db250cm9sLmxvY2FsTmFtZSA9PT0gXCJidXR0b25cIiB8fCBmb3JtQ29udHJvbC5sb2NhbE5hbWUgPT09IFwiaW5wdXRcIiB8fCBmb3JtQ29udHJvbC5sb2NhbE5hbWUgPT09IFwic2VsZWN0XCIgfHxcbiAgICAgIGZvcm1Db250cm9sLmxvY2FsTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiKSB7XG4gICAgaWYgKGZvcm1Db250cm9sLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBsZXQgZSA9IGZvcm1Db250cm9sLnBhcmVudE5vZGU7XG4gIHdoaWxlIChlKSB7XG4gICAgaWYgKGUubG9jYWxOYW1lID09PSBcImZpZWxkc2V0XCIgJiYgZS5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkge1xuICAgICAgY29uc3QgZmlyc3RMZWdlbmRFbGVtZW50Q2hpbGQgPSBlLnF1ZXJ5U2VsZWN0b3IoXCJsZWdlbmRcIik7XG4gICAgICBpZiAoIWZpcnN0TGVnZW5kRWxlbWVudENoaWxkIHx8ICFmaXJzdExlZ2VuZEVsZW1lbnRDaGlsZC5jb250YWlucyhmb3JtQ29udHJvbCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGUgPSBlLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnRzLmlzU3VibWl0dGFibGUgPSBmb3JtQ29udHJvbCA9PiB7XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktc3VibWl0XG4gIHJldHVybiBzdWJtaXR0YWJsZUxvY2FsTmFtZXMuaGFzKGZvcm1Db250cm9sLmxvY2FsTmFtZSk7XG59O1xuXG5leHBvcnRzLmlzQnV0dG9uID0gZm9ybUNvbnRyb2wgPT4ge1xuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtYnV0dG9uXG4gIHJldHVybiBmb3JtQ29udHJvbC50eXBlID09PSBcImJ1dHRvblwiIHx8IGZvcm1Db250cm9sLnR5cGUgPT09IFwic3VibWl0XCIgfHwgZm9ybUNvbnRyb2wudHlwZSA9PT0gXCJyZXNldFwiIHx8XG4gICAgICAgICBmb3JtQ29udHJvbC50eXBlID09PSBcImltYWdlXCIgfHwgZm9ybUNvbnRyb2wubG9jYWxOYW1lID09PSBcImJ1dHRvblwiO1xufTtcblxuZXhwb3J0cy5ub3JtYWxpemVUb0NSTEYgPSBzdHJpbmcgPT4ge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xccihbXlxcbl0pL2csIFwiXFxyXFxuJDFcIilcbiAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHIkLywgXCJcXHJcXG5cIilcbiAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oW15cXHJdKVxcbi9nLCBcIiQxXFxyXFxuXCIpXG4gICAgICAgICAgICAgICAucmVwbGFjZSgvXlxcbi8sIFwiXFxyXFxuXCIpO1xufTtcblxuZXhwb3J0cy5zYW5pdGl6ZVZhbHVlQnlUeXBlID0gKGlucHV0LCB2YWwpID0+IHtcbiAgc3dpdGNoIChpbnB1dC50eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlIFwicGFzc3dvcmRcIjpcbiAgICBjYXNlIFwic2VhcmNoXCI6XG4gICAgY2FzZSBcInRlbFwiOlxuICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICB2YWwgPSBzdHJpcE5ld2xpbmVzKHZhbCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJjb2xvclwiOlxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb2xvci1zdGF0ZS0odHlwZT1jb2xvcik6dmFsdWUtc2FuaXRpemF0aW9uLWFsZ29yaXRobVxuICAgICAgdmFsID0gaXNWYWxpZFNpbXBsZUNvbG9yKHZhbCkgPyB2YWwudG9Mb3dlckNhc2UoKSA6IFwiIzAwMDAwMFwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiZW1haWxcIjpcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjZS1tYWlsLXN0YXRlLSh0eXBlPWVtYWlsKTp2YWx1ZS1zYW5pdGl6YXRpb24tYWxnb3JpdGhtXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2UtbWFpbC1zdGF0ZS0odHlwZT1lbWFpbCk6dmFsdWUtc2FuaXRpemF0aW9uLWFsZ29yaXRobS0yXG4gICAgICBpZiAoaW5wdXQuaGFzQXR0cmlidXRlKFwibXVsdGlwbGVcIikpIHtcbiAgICAgICAgdmFsID0gdmFsLnNwbGl0KFwiLFwiKS5tYXAodG9rZW4gPT4gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdBU0NJSVdoaXRlc3BhY2UodG9rZW4pKS5qb2luKFwiLFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IHN0cmlwTmV3bGluZXModmFsKTtcbiAgICAgICAgdmFsID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdBU0NJSVdoaXRlc3BhY2UodmFsKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInVybFwiOlxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCN1cmwtc3RhdGUtKHR5cGU9dXJsKTp2YWx1ZS1zYW5pdGl6YXRpb24tYWxnb3JpdGhtXG4gICAgICB2YWwgPSBzdHJpcE5ld2xpbmVzKHZhbCk7XG4gICAgICB2YWwgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0FTQ0lJV2hpdGVzcGFjZSh2YWwpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICAvLyBUT0RPOiBTYW5pdGl6ZSB2YWx1ZXMgZm9yIGRhdGUsIGRhdGV0aW1lLWxvY2FsLCBtb250aCwgbnVtYmVyLCByYW5nZSwgdGltZSBhbmQgd2Vlay5cblxuICByZXR1cm4gdmFsO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCJzeW1ib2wtdHJlZVwiKTtcblxuZXhwb3J0cy5jbG9uaW5nU3RlcHMgPSBTeW1ib2woXCJjbG9uaW5nIHN0ZXBzXCIpO1xuZXhwb3J0cy5sb2NhdGlvbkluZm8gPSBTeW1ib2woXCJsb2NhdGlvbiBpbmZvXCIpO1xuXG4vLyBUT0RPOiB0aGUgbWFueSB1bmRlcnNjb3JlLXByZWZpeGVkIGhvb2tzIHNob3VsZCBtb3ZlIGhlcmVcbi8vIEUuZy4gX2F0dHJNb2RpZmllZCAod2hpY2ggbWF5YmUgc2hvdWxkIGJlIHNwbGl0IGludG8gaXRzIHBlci1zcGVjIHZhcmlhbnRzKVxuXG4vKipcbiAqIFRoaXMgU3ltYm9sVHJlZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSB0cmVlIGZvciBhbGwgTm9kZSBpbiBhIGRvY3VtZW50XG4gKi9cbmV4cG9ydHMuZG9tU3ltYm9sVHJlZSA9IG5ldyBTeW1ib2xUcmVlKFwiRE9NIFN5bWJvbFRyZWVcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvcmRlcmVkU2V0UGFyc2VyKGlucHV0KSB7XG4gIHJldHVybiBuZXcgU2V0KGlucHV0LnNwbGl0KC9bXFx0XFxuXFxmXFxyIF0rLykuZmlsdGVyKEJvb2xlYW4pKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2V2ZW50LWhhbmRsZXJzLW9uLWVsZW1lbnRzLC1kb2N1bWVudC1vYmplY3RzLC1hbmQtd2luZG93LW9iamVjdHNcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgU2V0KFtcIm9uYmx1clwiLCBcIm9uZXJyb3JcIiwgXCJvbmZvY3VzXCIsIFwib25sb2FkXCIsIFwib25yZXNpemVcIiwgXCJvbnNjcm9sbFwiLCBcIm9uYWZ0ZXJwcmludFwiLFxuICBcIm9uYmVmb3JlcHJpbnRcIiwgXCJvbmJlZm9yZXVubG9hZFwiLCBcIm9uaGFzaGNoYW5nZVwiLCBcIm9ubGFuZ3VhZ2VjaGFuZ2VcIiwgXCJvbm1lc3NhZ2VcIiwgXCJvbm9mZmxpbmVcIiwgXCJvbm9ubGluZVwiLFxuICBcIm9ucGFnZWhpZGVcIiwgXCJvbnBhZ2VzaG93XCIsIFwib25wb3BzdGF0ZVwiLCBcIm9uc3RvcmFnZVwiLCBcIm9udW5sb2FkXCJdKTtcblxuLy8gbGV2ZWwyL2h0bWwgc2V0cyB1cCBzZXR0ZXJzL2dldHRlcnMgb24gSFRNTEJvZHlFbGVtZW50IHRoYXQgcHJveHkgdG8gdGhlIHdpbmRvdyAoc2V0dGluZyBkYXRhIHByb3BlcnRpZXMgdGhlcmUpXG4vLyBsZXZlbDEvY29yZSBzZXRzIHVwIHNvIHRoYXQgbW9kaWZ5aW5nIHRoZSBhcHByb3ByaWF0ZSBhdHRyaWJ1dGVzIG9uIGJvZHkgZWxlbWVudHMgd2lsbCBmb3J3YXJkIHRvIHNldHRpbmcgb25cbi8vIHRoZSB3aW5kb3csIHdpdGggdGhlIGFwcHJvcHJpYXRlIGB0aGlzYC5cbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoXCJ1dGlsXCIpO1xuY29uc3QgRXJyb3JFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvRXJyb3JFdmVudFwiKTtcblxuY29uc3QgZXJyb3JSZXBvcnRpbmdNb2RlID0gU3ltYm9sKFwiZXJyb3IgcmVwb3J0aW5nIG1vZGVcIik7XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNyZXBvcnQtdGhlLWVycm9yXG4vLyBPbWl0cyBzY3JpcHQgcGFyYW1ldGVyIGFuZCBhbnkgY2hlY2sgZm9yIG11dGVkIGVycm9yczsgdGFrZXMgZXJyb3Igb2JqZWN0LCBtZXNzYWdlLCBhbmQgbG9jYXRpb24gYXMgcGFyYW1zLCB1bmxpa2Vcbi8vIHRoZSBzcGVjLiBSZXR1cm5zIHdoZXRoZXIgdGhlIGV2ZW50IHdhcyBoYW5kbGVkIG9yIG5vdC5cbmZ1bmN0aW9uIHJlcG9ydEFuRXJyb3IobGluZSwgY29sLCB0YXJnZXQsIGVycm9yT2JqZWN0LCBtZXNzYWdlLCBsb2NhdGlvbikge1xuICBpZiAodGFyZ2V0W2Vycm9yUmVwb3J0aW5nTW9kZV0pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0YXJnZXRbZXJyb3JSZXBvcnRpbmdNb2RlXSA9IHRydWU7XG5cbiAgLy8gVE9ETyBFdmVudHM6IHVzZSBjb25zdHJ1Y3RvciBkaXJlY3RseSwgb25jZSB0aGV5IGFyZSBubyBsb25nZXIgdGllZCB0byBhIHdpbmRvdy5cbiAgY29uc3QgZXZlbnQgPSBFcnJvckV2ZW50LmNyZWF0ZUltcGwoW1wiZXJyb3JcIiwge1xuICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgbWVzc2FnZSxcbiAgICBmaWxlbmFtZTogbG9jYXRpb24sXG4gICAgbGluZW5vOiBsaW5lLFxuICAgIGNvbG5vOiBjb2wsXG4gICAgZXJyb3I6IGVycm9yT2JqZWN0XG4gIH1dKTtcblxuICB0cnkge1xuICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0YXJnZXRbZXJyb3JSZXBvcnRpbmdNb2RlXSA9IGZhbHNlO1xuICAgIHJldHVybiBldmVudC5kZWZhdWx0UHJldmVudGVkO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwb3J0RXhjZXB0aW9uKHdpbmRvdywgZXJyb3IsIGZpbGVuYW1lSGludCkge1xuICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2l2ZSBnb29kIHJlc3VsdHMgb24gcmVhbCBFcnJvciBvYmplY3RzIHdpdGggc3RhY2tzOyBwb29yIG9uZXMgb3RoZXJ3aXNlXG5cbiAgY29uc3Qgc3RhY2sgPSBlcnJvciAmJiBlcnJvci5zdGFjaztcbiAgY29uc3QgbGluZXMgPSBzdGFjayAmJiBzdGFjay5zcGxpdChcIlxcblwiKTtcblxuICAvLyBGaW5kIHRoZSBmaXJzdCBsaW5lIHRoYXQgbWF0Y2hlczsgaW1wb3J0YW50IGZvciBtdWx0aS1saW5lIG1lc3NhZ2VzXG4gIGxldCBwaWVjZXM7XG4gIGlmIChsaW5lcykge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoICYmICFwaWVjZXM7ICsraSkge1xuICAgICAgcGllY2VzID0gbGluZXNbaV0ubWF0Y2goL2F0ICg/OiguKylcXHMrKT9cXCg/KD86KC4rPyk6KFxcZCspOihcXGQrKXwoW14pXSspKVxcKT8vKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBmaWxlTmFtZSA9IHBpZWNlcyAmJiBwaWVjZXNbMl0gfHwgZmlsZW5hbWVIaW50IHx8IHdpbmRvdy5fZG9jdW1lbnQuVVJMO1xuICBjb25zdCBsaW5lTnVtYmVyID0gcGllY2VzICYmIHBhcnNlSW50KHBpZWNlc1szXSkgfHwgMDtcbiAgY29uc3QgY29sdW1uTnVtYmVyID0gcGllY2VzICYmIHBhcnNlSW50KHBpZWNlc1s0XSkgfHwgMDtcblxuICBjb25zdCBoYW5kbGVkID0gcmVwb3J0QW5FcnJvcihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHdpbmRvdywgZXJyb3IsIGVycm9yLm1lc3NhZ2UsIGZpbGVOYW1lKTtcblxuICBpZiAoIWhhbmRsZWQpIHtcbiAgICBjb25zdCBlcnJvclN0cmluZyA9IHNob3VsZEJlRGlzcGxheWVkQXNFcnJvcihlcnJvcikgPyBgWyR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1dYCA6IHV0aWwuaW5zcGVjdChlcnJvcik7XG4gICAgY29uc3QganNkb21FcnJvciA9IG5ldyBFcnJvcihgVW5jYXVnaHQgJHtlcnJvclN0cmluZ31gKTtcbiAgICBqc2RvbUVycm9yLmRldGFpbCA9IGVycm9yO1xuICAgIGpzZG9tRXJyb3IudHlwZSA9IFwidW5oYW5kbGVkIGV4Y2VwdGlvblwiO1xuXG4gICAgd2luZG93Ll92aXJ0dWFsQ29uc29sZS5lbWl0KFwianNkb21FcnJvclwiLCBqc2RvbUVycm9yKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gc2hvdWxkQmVEaXNwbGF5ZWRBc0Vycm9yKHgpIHtcbiAgcmV0dXJuIHgubmFtZSAmJiB4Lm1lc3NhZ2UgIT09IHVuZGVmaW5lZCAmJiB4LnN0YWNrO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcbmNvbnN0IG53bWF0Y2hlciA9IHJlcXVpcmUoXCJud21hdGNoZXIvc3JjL253bWF0Y2hlci1ub3FzYVwiKTtcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcblxuLy8gSW50ZXJuYWwgbWV0aG9kIHNvIHlvdSBkb24ndCBoYXZlIHRvIGdvIHRocm91Z2ggdGhlIHB1YmxpYyBBUElcbmV4cG9ydHMucXVlcnlTZWxlY3RvciA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBzZWxlY3RvcnMpIHtcbiAgaWYgKCFkb21TeW1ib2xUcmVlLmhhc0NoaWxkcmVuKHBhcmVudE5vZGUpIHx8XG4gICAgICAocGFyZW50Tm9kZSA9PT0gcGFyZW50Tm9kZS5fb3duZXJEb2N1bWVudCAmJiAhcGFyZW50Tm9kZS5kb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gYXZvaWQgdGhlIGV4cGxvc2lvbiB0aGF0IG9jY3VycyBpZiB5b3UgdHJ5IHRvIGFkZCBud21hdGNoZXIgdG8gYSBkb2N1bWVudCB0aGF0IGlzIG5vdCB5ZXRcbiAgICAvLyBpbml0aWFsaXplZC5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBhZGROd21hdGNoZXIocGFyZW50Tm9kZSkuZmlyc3Qoc2VsZWN0b3JzLCBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChwYXJlbnROb2RlKSk7XG59O1xuXG4vLyBud21hdGNoZXIgZ2V0cyBgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50YCBhdCBjcmVhdGlvbi10aW1lLCBzbyB3ZSBoYXZlIHRvIGluaXRpYWxpemUgbGF6aWx5LCBzaW5jZSBpbiB0aGUgaW5pdGlhbFxuLy8gc3RhZ2VzIG9mIERvY3VtZW50IGluaXRpYWxpemF0aW9uLCB0aGVyZSBpcyBubyBkb2N1bWVudEVsZW1lbnQgcHJlc2VudCB5ZXQuXG5mdW5jdGlvbiBhZGROd21hdGNoZXIocGFyZW50Tm9kZSkge1xuICBjb25zdCBkb2N1bWVudCA9IHBhcmVudE5vZGUuX293bmVyRG9jdW1lbnQ7XG5cbiAgaWYgKCFkb2N1bWVudC5fbndtYXRjaGVyKSB7XG4gICAgZG9jdW1lbnQuX253bWF0Y2hlciA9IG53bWF0Y2hlcih7IGRvY3VtZW50IH0pO1xuICAgIGRvY3VtZW50Ll9ud21hdGNoZXIuY29uZmlndXJlKHsgVU5JUVVFX0lEOiBmYWxzZSB9KTtcbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudC5fbndtYXRjaGVyO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1uZXdsaW5lc1xuZXhwb3J0cy5zdHJpcE5ld2xpbmVzID0gcyA9PiB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1tcXG5cXHJdKy9nLCBcIlwiKTtcbn07XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1sZWFkaW5nLWFuZC10cmFpbGluZy1hc2NpaS13aGl0ZXNwYWNlXG5leHBvcnRzLnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nQVNDSUlXaGl0ZXNwYWNlID0gcyA9PiB7XG4gIHJldHVybiBzLnJlcGxhY2UoL15bIFxcdFxcblxcZlxccl0rLywgXCJcIikucmVwbGFjZSgvWyBcXHRcXG5cXGZcXHJdKyQvLCBcIlwiKTtcbn07XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuZXhwb3J0cy5zdHJpcEFuZENvbGxhcHNlQVNDSUlXaGl0ZXNwYWNlID0gcyA9PiB7XG4gIHJldHVybiBzLnJlcGxhY2UoL1sgXFx0XFxuXFxmXFxyXSsvZywgXCIgXCIpLnJlcGxhY2UoL15bIFxcdFxcblxcZlxccl0rLywgXCJcIikucmVwbGFjZSgvWyBcXHRcXG5cXGZcXHJdKyQvLCBcIlwiKTtcbn07XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjdmFsaWQtc2ltcGxlLWNvbG91clxuZXhwb3J0cy5pc1ZhbGlkU2ltcGxlQ29sb3IgPSBzID0+IHtcbiAgcmV0dXJuIC9eI1thLWZBLUZcXGRdezZ9JC8udGVzdChzKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGNzc29tID0gcmVxdWlyZShcImNzc29tXCIpO1xuY29uc3Qgd2hhdHdnRW5jb2RpbmcgPSByZXF1aXJlKFwid2hhdHdnLWVuY29kaW5nXCIpO1xuY29uc3Qgd2hhdHdnVVJMID0gcmVxdWlyZShcIndoYXR3Zy11cmxcIik7XG5jb25zdCByZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoXCIuLi8uLi9icm93c2VyL3Jlc291cmNlLWxvYWRlclwiKTtcblxuZXhwb3J0cy5mZXRjaFN0eWxlc2hlZXQgPSAoZWxlbWVudEltcGwsIHVybFN0cmluZywgc2hlZXQpID0+IHtcbiAgY29uc3QgcGFyc2VkVVJMID0gd2hhdHdnVVJMLnBhcnNlVVJMKHVybFN0cmluZyk7XG4gIHJldHVybiBmZXRjaFN0eWxlc2hlZXRJbnRlcm5hbChlbGVtZW50SW1wbCwgdXJsU3RyaW5nLCBwYXJzZWRVUkwsIHNoZWV0KTtcbn07XG5cbmV4cG9ydHMuZXZhbHVhdGVTdHlsZXNoZWV0ID0gKGVsZW1lbnRJbXBsLCBkYXRhLCBzaGVldCwgYmFzZVVSTCkgPT4ge1xuICBsZXQgbmV3U3R5bGVTaGVldDtcbiAgdHJ5IHtcbiAgICBuZXdTdHlsZVNoZWV0ID0gY3Nzb20ucGFyc2UoZGF0YSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZWxlbWVudEltcGwuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3KSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBwYXJzZSBDU1Mgc3R5bGVzaGVldFwiKTtcbiAgICAgIGVycm9yLmRldGFpbCA9IGRhdGE7XG4gICAgICBlcnJvci50eXBlID0gXCJjc3MgcGFyc2luZ1wiO1xuXG4gICAgICBlbGVtZW50SW1wbC5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXcuX3ZpcnR1YWxDb25zb2xlLmVtaXQoXCJqc2RvbUVycm9yXCIsIGVycm9yKTtcbiAgICB9XG5cbiAgICBlbGVtZW50SW1wbC5fb3duZXJEb2N1bWVudC5zdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzcGxpY2VBcmdzID0gbmV3U3R5bGVTaGVldC5jc3NSdWxlcztcbiAgc3BsaWNlQXJncy51bnNoaWZ0KDAsIHNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7XG4gIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoc2hlZXQuY3NzUnVsZXMsIHNwbGljZUFyZ3MpO1xuXG4gIHNjYW5Gb3JJbXBvcnRSdWxlcyhlbGVtZW50SW1wbCwgc2hlZXQuY3NzUnVsZXMsIGJhc2VVUkwpO1xuXG4gIGVsZW1lbnRJbXBsLl9vd25lckRvY3VtZW50LnN0eWxlU2hlZXRzLnB1c2goc2hlZXQpO1xufTtcblxuZnVuY3Rpb24gZmV0Y2hTdHlsZXNoZWV0SW50ZXJuYWwoZWxlbWVudEltcGwsIHVybFN0cmluZywgcGFyc2VkVVJMLCBzaGVldCkge1xuICBsZXQgZGVmYXVsdEVuY29kaW5nID0gZWxlbWVudEltcGwuX293bmVyRG9jdW1lbnQuX2VuY29kaW5nO1xuICBpZiAoZWxlbWVudEltcGwubG9jYWxOYW1lID09PSBcImxpbmtcIiAmJiBlbGVtZW50SW1wbC5oYXNBdHRyaWJ1dGUoXCJjaGFyc2V0XCIpKSB7XG4gICAgZGVmYXVsdEVuY29kaW5nID0gd2hhdHdnRW5jb2RpbmcubGFiZWxUb05hbWUoZWxlbWVudEltcGwuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKSk7XG4gIH1cblxuICByZXNvdXJjZUxvYWRlci5sb2FkKGVsZW1lbnRJbXBsLCB1cmxTdHJpbmcsIHsgZGVmYXVsdEVuY29kaW5nIH0sIGRhdGEgPT4ge1xuICAgIC8vIFRPRE86IE1JTUUgdHlwZSBjaGVja2luZz9cbiAgICBleHBvcnRzLmV2YWx1YXRlU3R5bGVzaGVldChlbGVtZW50SW1wbCwgZGF0YSwgc2hlZXQsIHBhcnNlZFVSTCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzY2FuRm9ySW1wb3J0UnVsZXMoZWxlbWVudEltcGwsIGNzc1J1bGVzLCBiYXNlVVJMKSB7XG4gIGlmICghY3NzUnVsZXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNzc1J1bGVzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGNzc1J1bGVzW2ldLmNzc1J1bGVzKSB7XG4gICAgICAvLyBAbWVkaWEgcnVsZToga2VlcCBzZWFyY2hpbmcgaW5zaWRlIGl0LlxuICAgICAgc2NhbkZvckltcG9ydFJ1bGVzKGVsZW1lbnRJbXBsLCBjc3NSdWxlc1tpXS5jc3NSdWxlcywgYmFzZVVSTCk7XG4gICAgfSBlbHNlIGlmIChjc3NSdWxlc1tpXS5ocmVmKSB7XG4gICAgICAvLyBAaW1wb3J0IHJ1bGU6IGZldGNoIHRoZSByZXNvdXJjZSBhbmQgZXZhbHVhdGUgaXQuXG4gICAgICAvLyBTZWUgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI2Nzcy1pbXBvcnQtcnVsZVxuICAgICAgLy8gICAgIElmIGxvYWRpbmcgb2YgdGhlIHN0eWxlIHNoZWV0IGZhaWxzIGl0cyBjc3NSdWxlcyBsaXN0IGlzIHNpbXBseVxuICAgICAgLy8gICAgIGVtcHR5LiBJLmUuIGFuIEBpbXBvcnQgcnVsZSBhbHdheXMgaGFzIGFuIGFzc29jaWF0ZWQgc3R5bGUgc2hlZXQuXG4gICAgICBjb25zdCBwYXJzZWQgPSB3aGF0d2dVUkwucGFyc2VVUkwoY3NzUnVsZXNbaV0uaHJlZiwgeyBiYXNlVVJMIH0pO1xuICAgICAgaWYgKHBhcnNlZCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gZWxlbWVudEltcGwuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3O1xuICAgICAgICBpZiAod2luZG93KSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBDU1MgQGltcG9ydCBVUkwgJHtjc3NSdWxlc1tpXS5ocmVmfSByZWxhdGl2ZSB0byBiYXNlIFVSTCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXCIke3doYXR3Z1VSTC5zZXJpYWxpemVVUkwoYmFzZVVSTCl9XCJgKTtcbiAgICAgICAgICBlcnJvci50eXBlID0gXCJjc3MgQGltcG9ydCBVUkwgcGFyc2luZ1wiO1xuICAgICAgICAgIHdpbmRvdy5fdmlydHVhbENvbnNvbGUuZW1pdChcImpzZG9tRXJyb3JcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaFN0eWxlc2hlZXRJbnRlcm5hbChlbGVtZW50SW1wbCwgd2hhdHdnVVJMLnNlcmlhbGl6ZVVSTChwYXJzZWQpLCBwYXJzZWQsIGVsZW1lbnRJbXBsLnNoZWV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuXG4vLyBBbGwgdGhlc2Ugb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGltcGxzLCBub3Qgd3JhcHBlcnMhXG5cbmV4cG9ydHMuY2xvc2VzdCA9IChlLCBsb2NhbE5hbWUpID0+IHtcbiAgd2hpbGUgKGUpIHtcbiAgICBpZiAoZS5sb2NhbE5hbWUgPT09IGxvY2FsTmFtZSkge1xuICAgICAgcmV0dXJuIGU7XG4gICAgfVxuICAgIGUgPSBkb21TeW1ib2xUcmVlLnBhcmVudChlKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0cy5jaGlsZHJlbkJ5SFRNTExvY2FsTmFtZSA9IChwYXJlbnQsIGxvY2FsTmFtZSkgPT4ge1xuICByZXR1cm4gZG9tU3ltYm9sVHJlZS5jaGlsZHJlblRvQXJyYXkocGFyZW50LCB7IGZpbHRlcihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuX2xvY2FsTmFtZSA9PT0gbG9jYWxOYW1lICYmIG5vZGUuX25hbWVzcGFjZVVSSSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG4gIH0gfSk7XG59O1xuXG5leHBvcnRzLmRlc2NlbmRhbnRzQnlIVE1MTG9jYWxOYW1lID0gKHBhcmVudCwgbG9jYWxOYW1lKSA9PiB7XG4gIHJldHVybiBkb21TeW1ib2xUcmVlLnRyZWVUb0FycmF5KHBhcmVudCwgeyBmaWx0ZXIobm9kZSkge1xuICAgIHJldHVybiBub2RlLl9sb2NhbE5hbWUgPT09IGxvY2FsTmFtZSAmJiBub2RlLl9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiICYmIG5vZGUgIT09IHBhcmVudDtcbiAgfSB9KTtcbn07XG5cbmV4cG9ydHMuY2hpbGRyZW5CeUhUTUxMb2NhbE5hbWVzID0gKHBhcmVudCwgbG9jYWxOYW1lc1NldCkgPT4ge1xuICByZXR1cm4gZG9tU3ltYm9sVHJlZS5jaGlsZHJlblRvQXJyYXkocGFyZW50LCB7IGZpbHRlcihub2RlKSB7XG4gICAgcmV0dXJuIGxvY2FsTmFtZXNTZXQuaGFzKG5vZGUuX2xvY2FsTmFtZSkgJiYgbm9kZS5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcbiAgfSB9KTtcbn07XG5cbmV4cG9ydHMuZGVzY2VuZGFudHNCeUhUTUxMb2NhbE5hbWVzID0gKHBhcmVudCwgbG9jYWxOYW1lc1NldCkgPT4ge1xuICByZXR1cm4gZG9tU3ltYm9sVHJlZS50cmVlVG9BcnJheShwYXJlbnQsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICByZXR1cm4gbG9jYWxOYW1lc1NldC5oYXMobm9kZS5fbG9jYWxOYW1lKSAmJlxuICAgICAgICAgICBub2RlLl9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiICYmXG4gICAgICAgICAgIG5vZGUgIT09IHBhcmVudDtcbiAgfSB9KTtcbn07XG5cbmV4cG9ydHMuZmlyc3RDaGlsZFdpdGhIVE1MTG9jYWxOYW1lID0gKHBhcmVudCwgbG9jYWxOYW1lKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHBhcmVudCk7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgaXRlcmF0b3IpIHtcbiAgICBpZiAoY2hpbGQuX2xvY2FsTmFtZSA9PT0gbG9jYWxOYW1lICYmIGNoaWxkLl9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSB7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0cy5maXJzdENoaWxkV2l0aEhUTUxMb2NhbE5hbWVzID0gKHBhcmVudCwgbG9jYWxOYW1lc1NldCkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcihwYXJlbnQpO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGl0ZXJhdG9yKSB7XG4gICAgaWYgKGxvY2FsTmFtZXNTZXQuaGFzKGNoaWxkLl9sb2NhbE5hbWUpICYmIGNoaWxkLl9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSB7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0cy5maXJzdERlc2NlbmRhbnRXaXRoSFRNTExvY2FsTmFtZSA9IChwYXJlbnQsIGxvY2FsTmFtZSkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IGRvbVN5bWJvbFRyZWUudHJlZUl0ZXJhdG9yKHBhcmVudCk7XG4gIGZvciAoY29uc3QgZGVzY2VuZGFudCBvZiBpdGVyYXRvcikge1xuICAgIGlmIChkZXNjZW5kYW50Ll9sb2NhbE5hbWUgPT09IGxvY2FsTmFtZSAmJiBkZXNjZW5kYW50Ll9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSB7XG4gICAgICByZXR1cm4gZGVzY2VuZGFudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHhudiA9IHJlcXVpcmUoXCJ4bWwtbmFtZS12YWxpZGF0b3JcIik7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5cbi8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jdmFsaWRhdGVcblxuZXhwb3J0cy5uYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgY29uc3QgcmVzdWx0ID0geG52Lm5hbWUobmFtZSk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX0NIQVJBQ1RFUl9FUlIsXG4gICAgICBcIlxcXCJcIiArIG5hbWUgKyBcIlxcXCIgZGlkIG5vdCBtYXRjaCB0aGUgTmFtZSBwcm9kdWN0aW9uOiBcIiArIHJlc3VsdC5lcnJvcik7XG4gIH1cbn07XG5cbmV4cG9ydHMucW5hbWUgPSBmdW5jdGlvbiAocW5hbWUpIHtcbiAgZXhwb3J0cy5uYW1lKHFuYW1lKTtcblxuICBjb25zdCByZXN1bHQgPSB4bnYucW5hbWUocW5hbWUpO1xuICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTkFNRVNQQUNFX0VSUixcbiAgICAgIFwiXFxcIlwiICsgcW5hbWUgKyBcIlxcXCIgZGlkIG5vdCBtYXRjaCB0aGUgUU5hbWUgcHJvZHVjdGlvbjogXCIgKyByZXN1bHQuZXJyb3IpO1xuICB9XG59O1xuXG5leHBvcnRzLnZhbGlkYXRlQW5kRXh0cmFjdCA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIHF1YWxpZmllZE5hbWUpIHtcbiAgaWYgKG5hbWVzcGFjZSA9PT0gXCJcIikge1xuICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gIH1cblxuICBleHBvcnRzLnFuYW1lKHF1YWxpZmllZE5hbWUpO1xuXG4gIGxldCBwcmVmaXggPSBudWxsO1xuICBsZXQgbG9jYWxOYW1lID0gcXVhbGlmaWVkTmFtZTtcblxuICBjb25zdCBjb2xvbkluZGV4ID0gcXVhbGlmaWVkTmFtZS5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGNvbG9uSW5kZXggIT09IC0xKSB7XG4gICAgcHJlZml4ID0gcXVhbGlmaWVkTmFtZS5zdWJzdHJpbmcoMCwgY29sb25JbmRleCk7XG4gICAgbG9jYWxOYW1lID0gcXVhbGlmaWVkTmFtZS5zdWJzdHJpbmcoY29sb25JbmRleCArIDEpO1xuICB9XG5cbiAgaWYgKHByZWZpeCAhPT0gbnVsbCAmJiBuYW1lc3BhY2UgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OQU1FU1BBQ0VfRVJSLFxuICAgICAgXCJBIG5hbWVzcGFjZSB3YXMgZ2l2ZW4gYnV0IGEgcHJlZml4IHdhcyBhbHNvIGV4dHJhY3RlZCBmcm9tIHRoZSBxdWFsaWZpZWROYW1lXCIpO1xuICB9XG5cbiAgaWYgKHByZWZpeCA9PT0gXCJ4bWxcIiAmJiBuYW1lc3BhY2UgIT09IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OQU1FU1BBQ0VfRVJSLFxuICAgICAgXCJBIHByZWZpeCBvZiBcXFwieG1sXFxcIiB3YXMgZ2l2ZW4gYnV0IHRoZSBuYW1lc3BhY2Ugd2FzIG5vdCB0aGUgWE1MIG5hbWVzcGFjZVwiKTtcbiAgfVxuXG4gIGlmICgocXVhbGlmaWVkTmFtZSA9PT0gXCJ4bWxuc1wiIHx8IHByZWZpeCA9PT0gXCJ4bWxuc1wiKSAmJiBuYW1lc3BhY2UgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIikge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5BTUVTUEFDRV9FUlIsXG4gICAgICBcIkEgcHJlZml4IG9yIHF1YWxpZmllZE5hbWUgb2YgXFxcInhtbG5zXFxcIiB3YXMgZ2l2ZW4gYnV0IHRoZSBuYW1lc3BhY2Ugd2FzIG5vdCB0aGUgWE1MTlMgbmFtZXNwYWNlXCIpO1xuICB9XG5cbiAgaWYgKG5hbWVzcGFjZSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiICYmIHF1YWxpZmllZE5hbWUgIT09IFwieG1sbnNcIiAmJiBwcmVmaXggIT09IFwieG1sbnNcIikge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5BTUVTUEFDRV9FUlIsXG4gICAgICBcIlRoZSBYTUxOUyBuYW1lc3BhY2Ugd2FzIGdpdmVuIGJ1dCBuZWl0aGVyIHRoZSBwcmVmaXggbm9yIHF1YWxpZmllZE5hbWUgd2FzIFxcXCJ4bWxuc1xcXCJcIik7XG4gIH1cblxuICByZXR1cm4geyBuYW1lc3BhY2UsIHByZWZpeCwgbG9jYWxOYW1lIH07XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBsZW5ndGhGcm9tUHJvcGVydGllcyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKS5sZW5ndGhGcm9tUHJvcGVydGllcztcbmNvbnN0IGdldEF0dHJpYnV0ZVZhbHVlID0gcmVxdWlyZShcIi4vYXR0cmlidXRlc1wiKS5nZXRBdHRyaWJ1dGVWYWx1ZTtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG5jb25zdCBwcml2YXRlcyA9IFN5bWJvbChcIkhUTUxDb2xsZWN0aW9uIGludGVybmFsIHNsb3RzXCIpO1xuXG5jb25zdCBjb25mbGljdEtleXMgPSBuZXcgU2V0KFtcImxlbmd0aFwiLCBcIml0ZW1cIiwgXCJuYW1lZEl0ZW1cIl0pO1xuXG5jbGFzcyBIVE1MQ29sbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNlY3JldCwgZWxlbWVudCwgcXVlcnkpIHtcbiAgICBpZiAoc2VjcmV0ICE9PSBwcml2YXRlcykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgY29uc3RydWN0b3JcIik7XG4gICAgfVxuXG4gICAgdGhpc1twcml2YXRlc10gPSB7IGVsZW1lbnQsIHF1ZXJ5LCBrZXlzOiBbXSwgbGVuZ3RoOiAwLCB2ZXJzaW9uOiAtMSwgY29uZmxpY3RFbGVtZW50czogT2JqZWN0LmNyZWF0ZShudWxsKSB9O1xuICAgIHVwZGF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMpO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICB1cGRhdGVIVE1MQ29sbGVjdGlvbih0aGlzKTtcbiAgICByZXR1cm4gdGhpc1twcml2YXRlc10ubGVuZ3RoO1xuICB9XG5cbiAgaXRlbShpbmRleCkge1xuICAgIHVwZGF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMpO1xuICAgIHJldHVybiB0aGlzW2luZGV4XSB8fCBudWxsO1xuICB9XG5cbiAgbmFtZWRJdGVtKG5hbWUpIHtcbiAgICB1cGRhdGVIVE1MQ29sbGVjdGlvbih0aGlzKTtcblxuICAgIGlmIChjb25mbGljdEtleXMuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpc1twcml2YXRlc10uY29uZmxpY3RFbGVtZW50c1tuYW1lXSB8fCBudWxsO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcywgbmFtZSkpIHtcbiAgICAgIHJldHVybiB0aGlzW25hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5IVE1MQ29sbGVjdGlvbi5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEFycmF5LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdO1xuSFRNTENvbGxlY3Rpb24ucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIkhUTUxDb2xsZWN0aW9uXCI7XG5cbmZ1bmN0aW9uIHVwZGF0ZUhUTUxDb2xsZWN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgaWYgKGNvbGxlY3Rpb25bcHJpdmF0ZXNdLnZlcnNpb24gPCBjb2xsZWN0aW9uW3ByaXZhdGVzXS5lbGVtZW50Ll92ZXJzaW9uKSB7XG4gICAgcmVzZXRIVE1MQ29sbGVjdGlvblRvKGNvbGxlY3Rpb24sIGNvbGxlY3Rpb25bcHJpdmF0ZXNdLnF1ZXJ5KCkpO1xuICAgIGNvbGxlY3Rpb25bcHJpdmF0ZXNdLnZlcnNpb24gPSBjb2xsZWN0aW9uW3ByaXZhdGVzXS5lbGVtZW50Ll92ZXJzaW9uO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SFRNTENvbGxlY3Rpb25Ubyhjb2xsZWN0aW9uLCBpbXBscykge1xuICBjb25zdCB3cmFwcGVycyA9IGltcGxzLm1hcChpZGxVdGlscy53cmFwcGVyRm9ySW1wbCk7XG5cbiAgY29uc3Qgc3RhcnRpbmdMZW5ndGggPSBsZW5ndGhGcm9tUHJvcGVydGllcyhjb2xsZWN0aW9uKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFydGluZ0xlbmd0aDsgKytpKSB7XG4gICAgZGVsZXRlIGNvbGxlY3Rpb25baV07XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHdyYXBwZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgY29sbGVjdGlvbltpXSA9IHdyYXBwZXJzW2ldO1xuICB9XG4gIGNvbGxlY3Rpb25bcHJpdmF0ZXNdLmxlbmd0aCA9IHdyYXBwZXJzLmxlbmd0aDtcblxuICBjb25zdCBrZXlzID0gY29sbGVjdGlvbltwcml2YXRlc10ua2V5cztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgZGVsZXRlIGNvbGxlY3Rpb25ba2V5c1tpXV07XG4gIH1cbiAga2V5cy5sZW5ndGggPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW1wbHMubGVuZ3RoOyArK2kpIHtcbiAgICBhZGRJZkF0dHJQcmVzZW50KGltcGxzW2ldLCB3cmFwcGVyc1tpXSwgXCJuYW1lXCIpO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW1wbHMubGVuZ3RoOyArK2kpIHtcbiAgICBhZGRJZkF0dHJQcmVzZW50KGltcGxzW2ldLCB3cmFwcGVyc1tpXSwgXCJpZFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZElmQXR0clByZXNlbnQoaW1wbCwgd3JhcHBlciwgYXR0cikge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0QXR0cmlidXRlVmFsdWUoaW1wbCwgYXR0cik7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEb24ndCBvdmVyd3JpdGUgbnVtZXJpYyBpbmRpY2VzIHdpdGggbmFtZWQgb25lcy5cbiAgICBjb25zdCB2YWx1ZUFzTnVtYmVyID0gTnVtYmVyKHZhbHVlKTtcbiAgICBpZiAoIU51bWJlci5pc05hTih2YWx1ZUFzTnVtYmVyKSAmJiB2YWx1ZUFzTnVtYmVyID49IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEb24ndCBvdmVycmlkZSBleGlzdGluZyBuYW1lZCBvbmVzXG4gICAgaWYgKGtleXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNvbmZsaWN0S2V5cy5oYXModmFsdWUpKSB7XG4gICAgICBjb2xsZWN0aW9uW3ByaXZhdGVzXS5jb25mbGljdEVsZW1lbnRzW3ZhbHVlXSA9IHdyYXBwZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbGxlY3Rpb25bdmFsdWVdID0gd3JhcHBlcjtcbiAgICB9XG4gICAga2V5cy5wdXNoKHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb3JlKSB7XG4gIGNvcmUuSFRNTENvbGxlY3Rpb24gPSBIVE1MQ29sbGVjdGlvbjtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBxdWVyeSkge1xuICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHByaXZhdGVzLCBlbGVtZW50LCBxdWVyeSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy51cGRhdGUgPSB1cGRhdGVIVE1MQ29sbGVjdGlvbjtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLkRPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcbmV4cG9ydHMuTmFtZWROb2RlTWFwID0gcmVxdWlyZShcIi4vYXR0cmlidXRlc1wiKS5OYW1lZE5vZGVNYXA7XG5leHBvcnRzLkF0dHIgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvQXR0clwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLk5vZGUgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvTm9kZVwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkVsZW1lbnQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvRWxlbWVudFwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkRvY3VtZW50RnJhZ21lbnQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvRG9jdW1lbnRGcmFnbWVudFwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkRvY3VtZW50ID0gZXhwb3J0cy5IVE1MRG9jdW1lbnQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvRG9jdW1lbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5YTUxEb2N1bWVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9YTUxEb2N1bWVudFwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkNoYXJhY3RlckRhdGEgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvQ2hhcmFjdGVyRGF0YVwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLlRleHQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvVGV4dFwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkNEQVRBU2VjdGlvbiA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9DREFUQVNlY3Rpb25cIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvUHJvY2Vzc2luZ0luc3RydWN0aW9uXCIpLmludGVyZmFjZTtcbmV4cG9ydHMuQ29tbWVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9Db21tZW50XCIpLmludGVyZmFjZTtcbmV4cG9ydHMuRG9jdW1lbnRUeXBlID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0RvY3VtZW50VHlwZVwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkRPTUltcGxlbWVudGF0aW9uID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0RPTUltcGxlbWVudGF0aW9uXCIpLmludGVyZmFjZTtcblxuZXhwb3J0cy5FdmVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9FdmVudFwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkN1c3RvbUV2ZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0N1c3RvbUV2ZW50XCIpLmludGVyZmFjZTtcbmV4cG9ydHMuTWVzc2FnZUV2ZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL01lc3NhZ2VFdmVudFwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkVycm9yRXZlbnQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvRXJyb3JFdmVudFwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkhhc2hDaGFuZ2VFdmVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IYXNoQ2hhbmdlRXZlbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5Gb2N1c0V2ZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0ZvY3VzRXZlbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5Qb3BTdGF0ZUV2ZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL1BvcFN0YXRlRXZlbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5VSUV2ZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL1VJRXZlbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5Nb3VzZUV2ZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL01vdXNlRXZlbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5LZXlib2FyZEV2ZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0tleWJvYXJkRXZlbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5Ub3VjaEV2ZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL1RvdWNoRXZlbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5Qcm9ncmVzc0V2ZW50ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL1Byb2dyZXNzRXZlbnRcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5FdmVudFRhcmdldCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9FdmVudFRhcmdldFwiKS5pbnRlcmZhY2U7XG5cbmV4cG9ydHMuTG9jYXRpb24gPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvTG9jYXRpb25cIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5IaXN0b3J5ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hpc3RvcnlcIikuaW50ZXJmYWNlO1xuXG5leHBvcnRzLkJsb2IgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvQmxvYlwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkZpbGUgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvRmlsZVwiKS5pbnRlcmZhY2U7XG5leHBvcnRzLkZpbGVMaXN0ID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0ZpbGVMaXN0XCIpLmludGVyZmFjZTtcblxuZXhwb3J0cy5ET01QYXJzZXIgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvRE9NUGFyc2VyXCIpLmludGVyZmFjZTtcblxuZXhwb3J0cy5Gb3JtRGF0YSA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9Gb3JtRGF0YVwiKS5pbnRlcmZhY2U7XG5cbnJlcXVpcmUoXCIuL3JlZ2lzdGVyLWVsZW1lbnRzXCIpKGV4cG9ydHMpO1xuXG4vLyBUaGVzZSBuZWVkIHRvIGJlIGNsZWFuZWQgdXAuLi5cbnJlcXVpcmUoXCIuLi9sZXZlbDIvc3R5bGVcIikoZXhwb3J0cyk7XG5yZXF1aXJlKFwiLi4vbGV2ZWwzL3hwYXRoXCIpKGV4cG9ydHMpO1xuXG4vLyBUaGVzZSBhcmUgT0sgYnV0IG5lZWQgbWlncmF0aW9uIHRvIHdlYmlkbDJqcyBldmVudHVhbGx5LlxucmVxdWlyZShcIi4vaHRtbC1jb2xsZWN0aW9uXCIpKGV4cG9ydHMpO1xucmVxdWlyZShcIi4vbm9kZS1maWx0ZXJcIikoZXhwb3J0cyk7XG5yZXF1aXJlKFwiLi9ub2RlLWl0ZXJhdG9yXCIpKGV4cG9ydHMpO1xucmVxdWlyZShcIi4vbm9kZS1saXN0XCIpKGV4cG9ydHMpO1xucmVxdWlyZShcIi4veG1saHR0cHJlcXVlc3QtZXZlbnQtdGFyZ2V0XCIpKGV4cG9ydHMpO1xucmVxdWlyZShcIi4veG1saHR0cHJlcXVlc3QtdXBsb2FkXCIpKGV4cG9ydHMpO1xuXG5leHBvcnRzLkRPTVRva2VuTGlzdCA9IHJlcXVpcmUoXCIuL2RvbS10b2tlbi1saXN0XCIpLkRPTVRva2VuTGlzdDtcbmV4cG9ydHMuVVJMID0gcmVxdWlyZShcIndoYXR3Zy11cmxcIikuVVJMO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBoYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmNvbnN0IG5hbWVkUHJvcGVydGllc1RyYWNrZXIgPSByZXF1aXJlKFwiLi4vbmFtZWQtcHJvcGVydGllcy10cmFja2VyXCIpO1xuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4vbm9kZS10eXBlXCIpO1xuY29uc3QgY3JlYXRlSFRNTENvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi9odG1sLWNvbGxlY3Rpb25cIikuY3JlYXRlO1xuY29uc3QgdHJlZU9yZGVyU29ydGVyID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpLnRyZWVPcmRlclNvcnRlcjtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG5mdW5jdGlvbiBpc05hbWVkUHJvcGVydHlFbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gKGZvciB0aGUgbmFtZSBhdHRyaWJ1dGUpXG5cbiAgLy8gdXNlIGhhc093blByb3BlcnR5IHRvIG1ha2Ugc3VyZSBjb250ZW50V2luZG93IGNvbWVzIGZyb20gdGhlIHByb3RvdHlwZSxcbiAgLy8gYW5kIGlzIG5vdCBzZXQgZGlyZWN0bHkgb24gdGhlIG5vZGUgYnkgYSBzY3JpcHQuXG4gIGlmIChcImNvbnRlbnRXaW5kb3dcIiBpbiBlbGVtZW50ICYmICFoYXNPd25Qcm9wLmNhbGwoZWxlbWVudCwgXCJjb250ZW50V2luZG93XCIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzd2l0Y2ggKGVsZW1lbnQubm9kZU5hbWUpIHtcbiAgICBjYXNlIFwiQVwiOlxuICAgIGNhc2UgXCJBUFBMRVRcIjpcbiAgICBjYXNlIFwiQVJFQVwiOlxuICAgIGNhc2UgXCJFTUJFRFwiOlxuICAgIGNhc2UgXCJGT1JNXCI6XG4gICAgY2FzZSBcIkZSQU1FU0VUXCI6XG4gICAgY2FzZSBcIklNR1wiOlxuICAgIGNhc2UgXCJPQkpFQ1RcIjpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gbmFtZWRQcm9wZXJ0eVJlc29sdmVyKEhUTUxDb2xsZWN0aW9uLCB3aW5kb3csIG5hbWUsIHZhbHVlcykge1xuICBmdW5jdGlvbiBnZXRSZXN1bHQoKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIHZhbHVlcygpLmtleXMoKSkge1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBuYW1lKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaChub2RlKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpID09PSBuYW1lICYmIGlzTmFtZWRQcm9wZXJ0eUVsZW1lbnQobm9kZSkpIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdHMuc29ydCh0cmVlT3JkZXJTb3J0ZXIpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5fZG9jdW1lbnQ7XG4gIGNvbnN0IG9iamVjdHMgPSBjcmVhdGVIVE1MQ29sbGVjdGlvbihpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLCBnZXRSZXN1bHQpO1xuXG4gIGNvbnN0IGxlbmd0aCA9IG9iamVjdHMubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29uc3Qgbm9kZSA9IG9iamVjdHNbaV07XG5cbiAgICBpZiAoXCJjb250ZW50V2luZG93XCIgaW4gbm9kZSAmJiAhaGFzT3duUHJvcC5jYWxsKG5vZGUsIFwiY29udGVudFdpbmRvd1wiKSAmJlxuICAgICAgIG5vZGUuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIG5vZGUuY29udGVudFdpbmRvdztcbiAgICB9XG4gIH1cblxuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gb2JqZWN0c1swXTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3RzO1xufVxuXG5leHBvcnRzLmluaXRpYWxpemVXaW5kb3cgPSBmdW5jdGlvbiAod2luZG93LCBIVE1MQ29sbGVjdGlvbikge1xuICBuYW1lZFByb3BlcnRpZXNUcmFja2VyLmNyZWF0ZSh3aW5kb3csIG5hbWVkUHJvcGVydHlSZXNvbHZlci5iaW5kKG51bGwsIEhUTUxDb2xsZWN0aW9uKSk7XG59O1xuXG5leHBvcnRzLmVsZW1lbnRBdHRyaWJ1dGVNb2RpZmllZCA9IGZ1bmN0aW9uIChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgb2xkVmFsdWUpIHtcbiAgaWYgKCFlbGVtZW50Ll9hdHRhY2hlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHVzZU5hbWUgPSBpc05hbWVkUHJvcGVydHlFbGVtZW50KGVsZW1lbnQpO1xuXG4gIGlmIChuYW1lID09PSBcImlkXCIgfHwgKG5hbWUgPT09IFwibmFtZVwiICYmIHVzZU5hbWUpKSB7XG4gICAgY29uc3QgdHJhY2tlciA9IG5hbWVkUHJvcGVydGllc1RyYWNrZXIuZ2V0KGVsZW1lbnQuX293bmVyRG9jdW1lbnQuX2dsb2JhbCk7XG5cbiAgICAvLyAodHJhY2tlciB3aWxsIGJlIG51bGwgaWYgdGhlIGRvY3VtZW50IGhhcyBubyBXaW5kb3cpXG4gICAgaWYgKHRyYWNrZXIpIHtcbiAgICAgIGlmIChuYW1lID09PSBcImlkXCIgJiYgKCF1c2VOYW1lIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSAhPT0gb2xkVmFsdWUpKSB7XG4gICAgICAgIHRyYWNrZXIudW50cmFjayhvbGRWYWx1ZSwgZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSBcIm5hbWVcIiAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICB0cmFja2VyLnVudHJhY2sob2xkVmFsdWUsIGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICB0cmFja2VyLnRyYWNrKHZhbHVlLCBlbGVtZW50KTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydHMubm9kZUF0dGFjaGVkVG9Eb2N1bWVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdHJhY2tlciA9IG5hbWVkUHJvcGVydGllc1RyYWNrZXIuZ2V0KG5vZGUuX293bmVyRG9jdW1lbnQuX2dsb2JhbCk7XG4gIGlmICghdHJhY2tlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyYWNrZXIudHJhY2sobm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSwgbm9kZSk7XG5cbiAgaWYgKGlzTmFtZWRQcm9wZXJ0eUVsZW1lbnQobm9kZSkpIHtcbiAgICB0cmFja2VyLnRyYWNrKG5vZGUuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSwgbm9kZSk7XG4gIH1cbn07XG5cbmV4cG9ydHMubm9kZURldGFjaGVkRnJvbURvY3VtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0cmFja2VyID0gbmFtZWRQcm9wZXJ0aWVzVHJhY2tlci5nZXQobm9kZS5fb3duZXJEb2N1bWVudC5fZ2xvYmFsKTtcbiAgaWYgKCF0cmFja2VyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJhY2tlci51bnRyYWNrKG5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIiksIG5vZGUpO1xuXG4gIGlmIChpc05hbWVkUHJvcGVydHlFbGVtZW50KG5vZGUpKSB7XG4gICAgdHJhY2tlci51bnRyYWNrKG5vZGUuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSwgbm9kZSk7XG4gIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcbmNvbnN0IE5hdmlnYXRvcklESW1wbCA9IHJlcXVpcmUoXCIuL05hdmlnYXRvcklELWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBOYXZpZ2F0b3JMYW5ndWFnZUltcGwgPSByZXF1aXJlKFwiLi9OYXZpZ2F0b3JMYW5ndWFnZS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgTmF2aWdhdG9yT25MaW5lSW1wbCA9IHJlcXVpcmUoXCIuL05hdmlnYXRvck9uTGluZS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgTmF2aWdhdG9yQ29va2llc0ltcGwgPSByZXF1aXJlKFwiLi9OYXZpZ2F0b3JDb29raWVzLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBOYXZpZ2F0b3JQbHVnaW5zSW1wbCA9IHJlcXVpcmUoXCIuL05hdmlnYXRvclBsdWdpbnMtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZUltcGwgPSByZXF1aXJlKFwiLi9OYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgTmF2aWdhdG9ySW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgdGhpcy51c2VyQWdlbnQgPSBwcml2YXRlRGF0YS51c2VyQWdlbnQ7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSBPYmplY3QuZnJlZXplKFtcImVuLVVTXCIsIFwiZW5cIl0pO1xuICB9XG59XG5cbmlkbFV0aWxzLm1peGluKE5hdmlnYXRvckltcGwucHJvdG90eXBlLCBOYXZpZ2F0b3JJREltcGwucHJvdG90eXBlKTtcbmlkbFV0aWxzLm1peGluKE5hdmlnYXRvckltcGwucHJvdG90eXBlLCBOYXZpZ2F0b3JMYW5ndWFnZUltcGwucHJvdG90eXBlKTtcbmlkbFV0aWxzLm1peGluKE5hdmlnYXRvckltcGwucHJvdG90eXBlLCBOYXZpZ2F0b3JPbkxpbmVJbXBsLnByb3RvdHlwZSk7XG5pZGxVdGlscy5taXhpbihOYXZpZ2F0b3JJbXBsLnByb3RvdHlwZSwgTmF2aWdhdG9yQ29va2llc0ltcGwucHJvdG90eXBlKTtcbmlkbFV0aWxzLm1peGluKE5hdmlnYXRvckltcGwucHJvdG90eXBlLCBOYXZpZ2F0b3JQbHVnaW5zSW1wbC5wcm90b3R5cGUpO1xuaWRsVXRpbHMubWl4aW4oTmF2aWdhdG9ySW1wbC5wcm90b3R5cGUsIE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZUltcGwucHJvdG90eXBlKTtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IE5hdmlnYXRvckltcGw7XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IG9zID0gcmVxdWlyZShcIm9zXCIpO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgTmF2aWdhdG9yQ29uY3VycmVudEhhcmR3YXJlSW1wbCB7XG4gIGdldCBoYXJkd2FyZUNvbmN1cnJlbmN5KCkge1xuICAgIHJldHVybiBvcy5jcHVzKCkubGVuZ3RoO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBOYXZpZ2F0b3JDb29raWVzSW1wbCB7XG4gIGdldCBjb29raWVFbmFibGVkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBOYXZpZ2F0b3JJREltcGwge1xuICBnZXQgYXBwQ29kZU5hbWUoKSB7XG4gICAgcmV0dXJuIFwiTW96aWxsYVwiO1xuICB9XG5cbiAgZ2V0IGFwcE5hbWUoKSB7XG4gICAgcmV0dXJuIFwiTmV0c2NhcGVcIjtcbiAgfVxuXG4gIGdldCBhcHBWZXJzaW9uKCkge1xuICAgIHJldHVybiBcIjQuMFwiO1xuICB9XG5cbiAgZ2V0IHBsYXRmb3JtKCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0IHByb2R1Y3QoKSB7XG4gICAgcmV0dXJuIFwiR2Vja29cIjtcbiAgfVxuXG4gIGdldCBwcm9kdWN0U3ViKCkge1xuICAgIHJldHVybiBcIjIwMDMwMTA3XCI7XG4gIH1cblxuICAvLyBzZWUgTmF2aWdhdG9yIGNvbnN0cnVjdG9yIGZvciB1c2VyQWdlbnRcblxuICBnZXQgdmVuZG9yKCkge1xuICAgIHJldHVybiBcIkFwcGxlIENvbXB1dGVyLCBJbmMuXCI7XG4gIH1cblxuICBnZXQgdmVuZG9yU3ViKCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBOYXZpZ2F0b3JMYW5ndWFnZUltcGwge1xuICBnZXQgbGFuZ3VhZ2UoKSB7XG4gICAgcmV0dXJuIFwiZW4tVVNcIjtcbiAgfVxuXG4gIC8vIFNlZSBOYXZpZ2F0b3IgY29uc3RydWN0b3IgZm9yIGxhbmd1YWdlc1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgTmF2aWdhdG9yT25MaW5lSW1wbCB7XG4gIGdldCBvbkxpbmUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIE5hdmlnYXRvclBsdWdpbnNJbXBsIHtcbiAgamF2YUVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIERPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRDogMSxcbiAgRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HOiAyLFxuICBET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc6IDQsXG4gIERPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TOiA4LFxuICBET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlk6IDE2LFxuICBET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJQzogMzJcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBhZGRDb25zdGFudHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIikuYWRkQ29uc3RhbnRzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb3JlKSB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLW5vZGVmaWx0ZXJcbiAgY29yZS5Ob2RlRmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdG9yXCIpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIHVuc2lnbmVkIHNob3J0IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHRlbGwgaWYgYSBnaXZlbiBOb2RlIG11c3RcbiAgICogYmUgYWNjZXB0ZWQgb3Igbm90IGJ5IHRoZSBOb2RlSXRlcmF0b3Igb3IgVHJlZVdhbGtlciBpdGVyYXRpb25cbiAgICogYWxnb3JpdGhtLiBUaGlzIG1ldGhvZCBpcyBleHBlY3RlZCB0byBiZSB3cml0dGVuIGJ5IHRoZSB1c2VyIG9mIGFcbiAgICogTm9kZUZpbHRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTm9kZUZpbHRlclxuICAgKiBAaW50ZXJmYWNlXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV9IG5vZGUgRE9NIE5vZGVcbiAgICogQHJldHVybiB7RklMVEVSX0FDQ0VQVHxGSUxURVJfUkVKRUNUfEZJTFRFUl9TS0lQfVxuICAgKi9cbiAgY29yZS5Ob2RlRmlsdGVyLmFjY2VwdE5vZGUgPSBmdW5jdGlvbiAoLyogbm9kZSAqLykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgbWV0aG9kIGlzIGV4cGVjdGVkIHRvIGJlIHdyaXR0ZW4gYnkgdGhlIHVzZXIgb2YgYSBOb2RlRmlsdGVyLlwiKTtcbiAgfTtcblxuICBhZGRDb25zdGFudHMoY29yZS5Ob2RlRmlsdGVyLCB7XG4gICAgLy8gQ29uc3RhbnRzIGZvciB3aGF0VG9TaG93XG4gICAgU0hPV19BTEw6IDB4RkZGRkZGRkYsXG4gICAgU0hPV19FTEVNRU5UOiAweDAwMDAwMDAxLFxuICAgIFNIT1dfQVRUUklCVVRFOiAweDAwMDAwMDAyLFxuICAgIFNIT1dfVEVYVDogMHgwMDAwMDAwNCxcbiAgICBTSE9XX0NEQVRBX1NFQ1RJT046IDB4MDAwMDAwMDgsXG4gICAgU0hPV19FTlRJVFlfUkVGRVJFTkNFOiAweDAwMDAwMDEwLFxuICAgIFNIT1dfRU5USVRZOiAweDAwMDAwMDIwLFxuICAgIFNIT1dfUFJPQ0VTU0lOR19JTlNUUlVDVElPTjogMHgwMDAwMDA0MCxcbiAgICBTSE9XX0NPTU1FTlQ6IDB4MDAwMDAwODAsXG4gICAgU0hPV19ET0NVTUVOVDogMHgwMDAwMDEwMCxcbiAgICBTSE9XX0RPQ1VNRU5UX1RZUEU6IDB4MDAwMDAyMDAsXG4gICAgU0hPV19ET0NVTUVOVF9GUkFHTUVOVDogMHgwMDAwMDQwMCxcbiAgICBTSE9XX05PVEFUSU9OOiAweDAwMDAwODAwLFxuXG4gICAgLy8gQ29uc3RhbnRzIHJldHVybmVkIGJ5IGFjY2VwdE5vZGVcbiAgICBGSUxURVJfQUNDRVBUOiAxLFxuICAgIEZJTFRFUl9SRUpFQ1Q6IDIsXG4gICAgRklMVEVSX1NLSVA6IDNcbiAgfSk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBkZWZpbmVHZXR0ZXIgPSByZXF1aXJlKFwiLi4vdXRpbHNcIikuZGVmaW5lR2V0dGVyO1xuY29uc3QgSU5URVJOQUwgPSBTeW1ib2woXCJOb2RlSXRlcmF0b3IgaW50ZXJuYWxcIik7XG5jb25zdCBEb2N1bWVudEltcGwgPSByZXF1aXJlKFwiLi9ub2Rlcy9Eb2N1bWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb3JlKSB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLW5vZGVpdGVyYXRvclxuXG4gIGZ1bmN0aW9uIE5vZGVJdGVyYXRvckludGVybmFsKGRvY3VtZW50LCByb290LCB3aGF0VG9TaG93LCBmaWx0ZXIpIHtcbiAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5yZWZlcmVuY2VOb2RlID0gcm9vdDtcbiAgICB0aGlzLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlID0gdHJ1ZTtcbiAgICB0aGlzLndoYXRUb1Nob3cgPSB3aGF0VG9TaG93O1xuICAgIHRoaXMuZmlsdGVyID0gZmlsdGVyO1xuICB9XG5cbiAgTm9kZUl0ZXJhdG9ySW50ZXJuYWwucHJvdG90eXBlLnRocm93SWZOb3RBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gKG9ubHkgdGhyb3duIGZvciBnZXR0ZXJzL21ldGhvZHMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgcmVtb3Zpbmcgc3RlcHMpXG4gICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJUaGlzIE5vZGVJdGVyYXRvciBpcyBubyBsb25nZXIgYWN0aXZlLiBcIiArXG4gICAgICAgICAgICAgICAgICBcIk1vcmUgdGhhbiBcIiArIHRoaXMuZG9jdW1lbnQuX2FjdGl2ZU5vZGVJdGVyYXRvcnNNYXggK1xuICAgICAgICAgICAgICAgICAgXCIgaXRlcmF0b3JzIGFyZSBiZWluZyB1c2VkIGNvbmN1cnJlbnRseS4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJZb3UgY2FuIGluY3JlYXNlIHRoZSAnY29uY3VycmVudE5vZGVJdGVyYXRvcnMnIG9wdGlvbiB0byBcIiArXG4gICAgICAgICAgICAgICAgICBcIm1ha2UgdGhpcyBlcnJvciBnbyBhd2F5LlwiXG4gICAgICApO1xuICAgICAgLy8gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBwZXN0ZXIgRWNtYSB0byBhZGQgc3VwcG9ydCBmb3Igd2VhayByZWZlcmVuY2VzLFxuICAgICAgLy8gdGhlIERPTSBzdGFuZGFyZCBhc3N1bWVzIHRoZSBpbXBsZW1lbnRvciBoYXMgY29udHJvbCBvdmVyIG9iamVjdCBsaWZlIGN5Y2xlcy5cbiAgICB9XG4gIH07XG5cbiAgTm9kZUl0ZXJhdG9ySW50ZXJuYWwucHJvdG90eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24gKG5leHQpIHtcbiAgICBsZXQgbm9kZSA9IHRoaXMucmVmZXJlbmNlTm9kZTtcbiAgICBsZXQgYmVmb3JlTm9kZSA9IHRoaXMucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGU7XG5cbiAgICBkbyB7XG4gICAgICBpZiAobmV4dCkge1xuICAgICAgICBpZiAoIWJlZm9yZU5vZGUpIHtcbiAgICAgICAgICBub2RlID0gZG9tU3ltYm9sVHJlZS5mb2xsb3dpbmcobm9kZSwgeyByb290OiB0aGlzLnJvb3QgfSk7XG5cbiAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJlZm9yZU5vZGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7IC8vIHByZXZpb3VzXG4gICAgICAgIGlmIChiZWZvcmVOb2RlKSB7XG4gICAgICAgICAgbm9kZSA9IGRvbVN5bWJvbFRyZWUucHJlY2VkaW5nKG5vZGUsIHsgcm9vdDogdGhpcy5yb290IH0pO1xuXG4gICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBiZWZvcmVOb2RlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKHRoaXMuZmlsdGVyTm9kZShub2RlKSAhPT0gY29yZS5Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQpO1xuXG4gICAgdGhpcy5wb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSA9IGJlZm9yZU5vZGU7XG4gICAgdGhpcy5yZWZlcmVuY2VOb2RlID0gbm9kZTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBOb2RlSXRlcmF0b3JJbnRlcm5hbC5wcm90b3R5cGUuZmlsdGVyTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgY29uc3QgbiA9IG5vZGUubm9kZVR5cGUgLSAxO1xuICAgIGlmICghKHRoaXMud2hhdFRvU2hvdyAmICgxIDw8IG4pKSkge1xuICAgICAgcmV0dXJuIGNvcmUuTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICB9XG5cbiAgICBsZXQgcmV0ID0gY29yZS5Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5maWx0ZXI7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0ID0gZmlsdGVyKG5vZGUpO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyICYmIHR5cGVvZiBmaWx0ZXIuYWNjZXB0Tm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXQgPSBmaWx0ZXIuYWNjZXB0Tm9kZShub2RlKTtcbiAgICB9XG5cbiAgICBpZiAocmV0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gY29yZS5Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ7XG4gICAgfSBlbHNlIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gY29yZS5Ob2RlRmlsdGVyLkZJTFRFUl9SRUpFQ1Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfTtcblxuICBOb2RlSXRlcmF0b3JJbnRlcm5hbC5wcm90b3R5cGUucnVuUmVtb3ZpbmdTdGVwcyA9IGZ1bmN0aW9uIChvbGROb2RlLCBvbGRQYXJlbnQsIG9sZFByZXZpb3VzU2libGluZykge1xuICAgIGlmIChvbGROb2RlLmNvbnRhaW5zKHRoaXMucm9vdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBvbGROb2RlIGlzIG5vdCBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIHJlZmVyZW5jZU5vZGVcbiAgICAvLyBhdHRyaWJ1dGUgdmFsdWUsIHRlcm1pbmF0ZSB0aGVzZSBzdGVwcy5cbiAgICBpZiAoIW9sZE5vZGUuY29udGFpbnModGhpcy5yZWZlcmVuY2VOb2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKSB7XG4gICAgICAvLyBMZXQgbmV4dFNpYmxpbmcgYmUgb2xkUHJldmlvdXNTaWJsaW5n4oCZcyBuZXh0IHNpYmxpbmcsIGlmIG9sZFByZXZpb3VzU2libGluZyBpcyBub24tbnVsbCxcbiAgICAgIC8vIGFuZCBvbGRQYXJlbnTigJlzIGZpcnN0IGNoaWxkIG90aGVyd2lzZS5cbiAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gb2xkUHJldmlvdXNTaWJsaW5nID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkUHJldmlvdXNTaWJsaW5nLm5leHRTaWJsaW5nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkUGFyZW50LmZpcnN0Q2hpbGQ7XG5cbiAgICAgIC8vIElmIG5leHRTaWJsaW5nIGlzIG5vbi1udWxsLCBzZXQgdGhlIHJlZmVyZW5jZU5vZGUgYXR0cmlidXRlIHRvIG5leHRTaWJsaW5nXG4gICAgICAvLyBhbmQgdGVybWluYXRlIHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKG5leHRTaWJsaW5nKSB7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IG5leHRTaWJsaW5nO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIExldCBuZXh0IGJlIHRoZSBmaXJzdCBub2RlIGZvbGxvd2luZyBvbGRQYXJlbnQgKGV4Y2x1ZGluZyBhbnkgY2hpbGRyZW4gb2Ygb2xkUGFyZW50KS5cbiAgICAgIGNvbnN0IG5leHQgPSBkb21TeW1ib2xUcmVlLmZvbGxvd2luZyhvbGRQYXJlbnQsIHsgc2tpcENoaWxkcmVuOiB0cnVlIH0pO1xuXG4gICAgICAvLyBJZiByb290IGlzIGFuIGluY2x1c2l2ZSBhbmNlc3RvciBvZiBuZXh0LCBzZXQgdGhlIHJlZmVyZW5jZU5vZGVcbiAgICAgIC8vIGF0dHJpYnV0ZSB0byBuZXh0IGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAodGhpcy5yb290LmNvbnRhaW5zKG5leHQpKSB7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IG5leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gT3RoZXJ3aXNlLCBzZXQgdGhlIHBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlIGF0dHJpYnV0ZSB0byBmYWxzZS5cbiAgICAgIHRoaXMucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUgPSBmYWxzZTtcblxuICAgICAgLy8gTm90ZTogU3RlcHMgYXJlIG5vdCB0ZXJtaW5hdGVkIGhlcmUuXG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSByZWZlcmVuY2VOb2RlIGF0dHJpYnV0ZSB0byB0aGUgbGFzdCBpbmNsdXNpdmUgZGVzY2VuZGFudCBpbiB0cmVlIG9yZGVyIG9mIG9sZFByZXZpb3VzU2libGluZyxcbiAgICAvLyBpZiBvbGRQcmV2aW91c1NpYmxpbmcgaXMgbm9uLW51bGwsIGFuZCB0byBvbGRQYXJlbnQgb3RoZXJ3aXNlLlxuICAgIHRoaXMucmVmZXJlbmNlTm9kZSA9IG9sZFByZXZpb3VzU2libGluZyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVN5bWJvbFRyZWUubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQob2xkUHJldmlvdXNTaWJsaW5nKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFBhcmVudDtcbiAgfTtcblxuICBEb2N1bWVudEltcGwuX3JlbW92aW5nU3RlcHMucHVzaCgoZG9jdW1lbnQsIG9sZE5vZGUsIG9sZFBhcmVudCwgb2xkUHJldmlvdXNTaWJsaW5nKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2N1bWVudC5fYWN0aXZlTm9kZUl0ZXJhdG9ycy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgaW50ZXJuYWwgPSBkb2N1bWVudC5fYWN0aXZlTm9kZUl0ZXJhdG9yc1tpXTtcbiAgICAgIGludGVybmFsLnJ1blJlbW92aW5nU3RlcHMob2xkTm9kZSwgb2xkUGFyZW50LCBvbGRQcmV2aW91c1NpYmxpbmcpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29yZS5Eb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlTm9kZUl0ZXJhdG9yID0gZnVuY3Rpb24gKHJvb3QsIHdoYXRUb1Nob3csIGZpbHRlcikge1xuICAgIGlmICghcm9vdCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vdCBlbm91Z2ggYXJndW1lbnRzIHRvIERvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvci5cIik7XG4gICAgfVxuICAgIHJvb3QgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihyb290KTtcblxuICAgIGlmIChmaWx0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsdGVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBmaWx0ZXIgIT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2YgZmlsdGVyLmFjY2VwdE5vZGUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IDMgb2YgRG9jdW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9yIGltcGxlbWVudCBOb2RlRmlsdGVyLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkb2N1bWVudCA9IHJvb3QuX293bmVyRG9jdW1lbnQ7XG5cbiAgICB3aGF0VG9TaG93ID0gd2hhdFRvU2hvdyA9PT0gdW5kZWZpbmVkID9cbiAgICAgIGNvcmUuTm9kZUZpbHRlci5TSE9XX0FMTCA6XG4gICAgICAod2hhdFRvU2hvdyAmIGNvcmUuTm9kZUZpbHRlci5TSE9XX0FMTCkgPj4+IDA7IC8vID4+PiBtYWtlcyBzdXJlIHRoZSByZXN1bHQgaXMgdW5zaWduZWRcblxuICAgIGZpbHRlciA9IGZpbHRlciB8fCBudWxsO1xuXG4gICAgY29uc3QgaXQgPSBPYmplY3QuY3JlYXRlKGNvcmUuTm9kZUl0ZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgY29uc3QgaW50ZXJuYWwgPSBuZXcgTm9kZUl0ZXJhdG9ySW50ZXJuYWwoZG9jdW1lbnQsIHJvb3QsIHdoYXRUb1Nob3csIGZpbHRlcik7XG4gICAgaXRbSU5URVJOQUxdID0gaW50ZXJuYWw7XG5cbiAgICBkb2N1bWVudC5fYWN0aXZlTm9kZUl0ZXJhdG9ycy5wdXNoKGludGVybmFsKTtcbiAgICB3aGlsZSAoZG9jdW1lbnQuX2FjdGl2ZU5vZGVJdGVyYXRvcnMubGVuZ3RoID4gZG9jdW1lbnQuX2FjdGl2ZU5vZGVJdGVyYXRvcnNNYXgpIHtcbiAgICAgIGNvbnN0IGludGVybmFsT3RoZXIgPSBkb2N1bWVudC5fYWN0aXZlTm9kZUl0ZXJhdG9ycy5zaGlmdCgpO1xuICAgICAgaW50ZXJuYWxPdGhlci5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXQ7XG4gIH07XG5cbiAgY29yZS5Ob2RlSXRlcmF0b3IgPSBmdW5jdGlvbiBOb2RlSXRlcmF0b3IoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7XG4gIH07XG5cbiAgZGVmaW5lR2V0dGVyKGNvcmUuTm9kZUl0ZXJhdG9yLnByb3RvdHlwZSwgXCJyb290XCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaWRsVXRpbHMud3JhcHBlckZvckltcGwodGhpc1tJTlRFUk5BTF0ucm9vdCk7XG4gIH0pO1xuXG4gIGRlZmluZUdldHRlcihjb3JlLk5vZGVJdGVyYXRvci5wcm90b3R5cGUsIFwicmVmZXJlbmNlTm9kZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaW50ZXJuYWwgPSB0aGlzW0lOVEVSTkFMXTtcbiAgICBpbnRlcm5hbC50aHJvd0lmTm90QWN0aXZlKCk7XG4gICAgcmV0dXJuIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGludGVybmFsLnJlZmVyZW5jZU5vZGUpO1xuICB9KTtcblxuICBkZWZpbmVHZXR0ZXIoY29yZS5Ob2RlSXRlcmF0b3IucHJvdG90eXBlLCBcInBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbnRlcm5hbCA9IHRoaXNbSU5URVJOQUxdO1xuICAgIGludGVybmFsLnRocm93SWZOb3RBY3RpdmUoKTtcbiAgICByZXR1cm4gaW50ZXJuYWwucG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGU7XG4gIH0pO1xuXG4gIGRlZmluZUdldHRlcihjb3JlLk5vZGVJdGVyYXRvci5wcm90b3R5cGUsIFwid2hhdFRvU2hvd1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXNbSU5URVJOQUxdLndoYXRUb1Nob3c7XG4gIH0pO1xuXG4gIGRlZmluZUdldHRlcihjb3JlLk5vZGVJdGVyYXRvci5wcm90b3R5cGUsIFwiZmlsdGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpc1tJTlRFUk5BTF0uZmlsdGVyO1xuICB9KTtcblxuICBjb3JlLk5vZGVJdGVyYXRvci5wcm90b3R5cGUucHJldmlvdXNOb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGludGVybmFsID0gdGhpc1tJTlRFUk5BTF07XG4gICAgaW50ZXJuYWwudGhyb3dJZk5vdEFjdGl2ZSgpO1xuICAgIHJldHVybiBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChpbnRlcm5hbC50cmF2ZXJzZShmYWxzZSkpO1xuICB9O1xuXG4gIGNvcmUuTm9kZUl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0Tm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbnRlcm5hbCA9IHRoaXNbSU5URVJOQUxdO1xuICAgIGludGVybmFsLnRocm93SWZOb3RBY3RpdmUoKTtcbiAgICByZXR1cm4gaWRsVXRpbHMud3JhcHBlckZvckltcGwoaW50ZXJuYWwudHJhdmVyc2UodHJ1ZSkpO1xuICB9O1xuXG4gIGNvcmUuTm9kZUl0ZXJhdG9yLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbm9vcFxuICB9O1xuXG4gIGNvcmUuTm9kZUl0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJOb2RlSXRlcmF0b3JcIjtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGxlbmd0aEZyb21Qcm9wZXJ0aWVzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpLmxlbmd0aEZyb21Qcm9wZXJ0aWVzO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5cbmNvbnN0IHByaXZhdGVzID0gU3ltYm9sKFwiTm9kZUxpc3QgaW50ZXJuYWwgc2xvdHNcIik7XG5cbmNsYXNzIE5vZGVMaXN0IHtcbiAgY29uc3RydWN0b3Ioc2VjcmV0LCBjb25maWcpIHtcbiAgICBpZiAoc2VjcmV0ICE9PSBwcml2YXRlcykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgY29uc3RydWN0b3JcIik7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5ub2Rlcykge1xuICAgICAgdGhpc1twcml2YXRlc10gPSB7XG4gICAgICAgIGlzTGl2ZTogZmFsc2UsXG4gICAgICAgIGxlbmd0aDogY29uZmlnLm5vZGVzLmxlbmd0aFxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWcubm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdGhpc1tpXSA9IGNvbmZpZy5ub2Rlc1tpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1twcml2YXRlc10gPSB7XG4gICAgICAgIGlzTGl2ZTogdHJ1ZSxcbiAgICAgICAgZWxlbWVudDogY29uZmlnLmVsZW1lbnQsXG4gICAgICAgIHF1ZXJ5OiBjb25maWcucXVlcnksXG4gICAgICAgIHNuYXBzaG90OiB1bmRlZmluZWQsXG4gICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgdmVyc2lvbjogLTFcbiAgICAgIH07XG4gICAgICB1cGRhdGVOb2RlTGlzdCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHVwZGF0ZU5vZGVMaXN0KHRoaXMpO1xuICAgIHJldHVybiB0aGlzW3ByaXZhdGVzXS5sZW5ndGg7XG4gIH1cblxuICBpdGVtKGluZGV4KSB7XG4gICAgdXBkYXRlTm9kZUxpc3QodGhpcyk7XG4gICAgcmV0dXJuIHRoaXNbaW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICAvLyBUT0RPIHJlaW1wbGVtZW50IHRoaXMgaW4gd2ViaWRsMmpzIHNvIHRoZXNlIGJlY29tZSBtb3JlIHBlci1zcGVjXG4gICoga2V5cygpIHtcbiAgICB1cGRhdGVOb2RlTGlzdCh0aGlzKTtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzW3ByaXZhdGVzXS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgeWllbGQgaTtcbiAgICB9XG4gIH1cblxuICAqIGVudHJpZXMoKSB7XG4gICAgdXBkYXRlTm9kZUxpc3QodGhpcyk7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpc1twcml2YXRlc10ubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIHlpZWxkIFtpLCB0aGlzW2ldXTtcbiAgICB9XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrLCB0aGlzQXJnID0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IHZhbHVlcyA9IEFycmF5LmZyb20odGhpcyk7XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgdmFsdWVzLmxlbmd0aCkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2YWx1ZXNbaV0sIGksIHRoaXMpO1xuICAgICAgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzKTtcbiAgICAgICsraTtcbiAgICB9XG4gIH1cbn1cblxuTm9kZUxpc3QucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBOb2RlTGlzdC5wcm90b3R5cGUudmFsdWVzID0gQXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl07XG5Ob2RlTGlzdC5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9IFwiTm9kZUxpc3RcIjtcblxuZnVuY3Rpb24gdXBkYXRlTm9kZUxpc3Qobm9kZUxpc3QpIHtcbiAgaWYgKG5vZGVMaXN0W3ByaXZhdGVzXS5pc0xpdmUpIHtcbiAgICBpZiAobm9kZUxpc3RbcHJpdmF0ZXNdLnZlcnNpb24gPCBub2RlTGlzdFtwcml2YXRlc10uZWxlbWVudC5fdmVyc2lvbikge1xuICAgICAgbm9kZUxpc3RbcHJpdmF0ZXNdLnNuYXBzaG90ID0gbm9kZUxpc3RbcHJpdmF0ZXNdLnF1ZXJ5KCk7XG4gICAgICByZXNldE5vZGVMaXN0VG8obm9kZUxpc3QsIG5vZGVMaXN0W3ByaXZhdGVzXS5zbmFwc2hvdCk7XG4gICAgICBub2RlTGlzdFtwcml2YXRlc10udmVyc2lvbiA9IG5vZGVMaXN0W3ByaXZhdGVzXS5lbGVtZW50Ll92ZXJzaW9uO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBub2RlTGlzdFtwcml2YXRlc10ubGVuZ3RoID0gbGVuZ3RoRnJvbVByb3BlcnRpZXMobm9kZUxpc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Tm9kZUxpc3RUbyhub2RlTGlzdCwgbm9kZXMpIHtcbiAgY29uc3Qgc3RhcnRpbmdMZW5ndGggPSBsZW5ndGhGcm9tUHJvcGVydGllcyhub2RlTGlzdCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhcnRpbmdMZW5ndGg7ICsraSkge1xuICAgIGRlbGV0ZSBub2RlTGlzdFtpXTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCB3cmFwcGVyID0gaWRsVXRpbHMud3JhcHBlckZvckltcGwobm9kZXNbaV0pO1xuICAgIG5vZGVMaXN0W2ldID0gd3JhcHBlciA/IHdyYXBwZXIgOiBub2Rlc1tpXTtcbiAgfVxuICBub2RlTGlzdFtwcml2YXRlc10ubGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb3JlKSB7XG4gIGNvcmUuTm9kZUxpc3QgPSBOb2RlTGlzdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZUxpdmUgPSBmdW5jdGlvbiAoZWxlbWVudCwgcXVlcnkpIHtcbiAgcmV0dXJuIG5ldyBOb2RlTGlzdChwcml2YXRlcywgeyBlbGVtZW50LCBxdWVyeSB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZVN0YXRpYyA9IGZ1bmN0aW9uIChub2Rlcykge1xuICByZXR1cm4gbmV3IE5vZGVMaXN0KHByaXZhdGVzLCB7IG5vZGVzIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMudXBkYXRlID0gdXBkYXRlTm9kZUxpc3Q7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKHtcbiAgRUxFTUVOVF9OT0RFOiAxLFxuICBBVFRSSUJVVEVfTk9ERTogMiwgLy8gaGlzdG9yaWNhbFxuICBURVhUX05PREU6IDMsXG4gIENEQVRBX1NFQ1RJT05fTk9ERTogNCwgLy8gaGlzdG9yaWNhbFxuICBFTlRJVFlfUkVGRVJFTkNFX05PREU6IDUsIC8vIGhpc3RvcmljYWxcbiAgRU5USVRZX05PREU6IDYsIC8vIGhpc3RvcmljYWxcbiAgUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOiA3LFxuICBDT01NRU5UX05PREU6IDgsXG4gIERPQ1VNRU5UX05PREU6IDksXG4gIERPQ1VNRU5UX1RZUEVfTk9ERTogMTAsXG4gIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6IDExLFxuICBOT1RBVElPTl9OT0RFOiAxMiAvLyBoaXN0b3JpY2FsXG59KTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgYXR0cmlidXRlcyA9IHJlcXVpcmUoXCIuL2F0dHJpYnV0ZXNcIik7XG5jb25zdCBjbG9uaW5nU3RlcHMgPSByZXF1aXJlKFwiLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5jbG9uaW5nU3RlcHM7XG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcbmNvbnN0IE5PREVfVFlQRSA9IHJlcXVpcmUoXCIuL25vZGUtdHlwZVwiKTtcbmNvbnN0IG9yZGVyZWRTZXRQYXJzZXIgPSByZXF1aXJlKFwiLi9oZWxwZXJzL29yZGVyZWQtc2V0LXBhcnNlclwiKTtcbmNvbnN0IGNyZWF0ZUhUTUxDb2xsZWN0aW9uID0gcmVxdWlyZShcIi4vaHRtbC1jb2xsZWN0aW9uXCIpLmNyZWF0ZTtcbmNvbnN0IGRvbVRva2VuTGlzdENvbnRhaW5zID0gcmVxdWlyZShcIi4vZG9tLXRva2VuLWxpc3RcIikuY29udGFpbnM7XG5cbm1vZHVsZS5leHBvcnRzLmNsb25lID0gZnVuY3Rpb24gKGNvcmUsIG5vZGUsIGRvY3VtZW50LCBjbG9uZUNoaWxkcmVuKSB7XG4gIGlmIChkb2N1bWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZG9jdW1lbnQgPSBub2RlLl9vd25lckRvY3VtZW50O1xuICB9XG5cbiAgbGV0IGNvcHk7XG4gIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgIGNhc2UgTk9ERV9UWVBFLkRPQ1VNRU5UX05PREU6XG4gICAgICAvLyBUT0RPOiBqdXN0IHVzZSBEb2N1bWVudCB3aGVuIHdlIGVsaW1pbmF0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIERvY3VtZW50IGFuZCBIVE1MRG9jdW1lbnQuXG4gICAgICBpZiAobm9kZS5jb250ZW50VHlwZSA9PT0gXCJ0ZXh0L2h0bWxcIikgeyAvLyBuZWVkIHRvIGRpZmZlcmVudGlhdGUgZHVlIHRvIHBhcnNpbmcgbW9kZVxuICAgICAgICBjb3B5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7XG4gICAgICAgIGNvcHkucmVtb3ZlQ2hpbGQoY29weS5kb2N1bWVudEVsZW1lbnQpOyAvLyA7XztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvcHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudChcIlwiLCBcIlwiLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50ID0gY29weTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOT0RFX1RZUEUuRE9DVU1FTlRfVFlQRV9OT0RFOlxuICAgICAgY29weSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50VHlwZShub2RlLm5hbWUsIG5vZGUucHVibGljSWQsIG5vZGUuc3lzdGVtSWQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE5PREVfVFlQRS5FTEVNRU5UX05PREU6XG4gICAgICBjb3B5ID0gZG9jdW1lbnQuX2NyZWF0ZUVsZW1lbnRXaXRoQ29ycmVjdEVsZW1lbnRJbnRlcmZhY2Uobm9kZS5fbG9jYWxOYW1lLCBub2RlLl9uYW1lc3BhY2VVUkkpO1xuICAgICAgY29weS5fbmFtZXNwYWNlVVJJID0gbm9kZS5fbmFtZXNwYWNlVVJJO1xuICAgICAgY29weS5fcHJlZml4ID0gbm9kZS5fcHJlZml4O1xuICAgICAgY29weS5fbG9jYWxOYW1lID0gbm9kZS5fbG9jYWxOYW1lO1xuICAgICAgYXR0cmlidXRlcy5jb3B5QXR0cmlidXRlTGlzdChub2RlLCBjb3B5KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOT0RFX1RZUEUuVEVYVF9OT0RFOlxuICAgICAgY29weSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5vZGUuX2RhdGEpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE5PREVfVFlQRS5DREFUQV9TRUNUSU9OX05PREU6XG4gICAgICBjb3B5ID0gZG9jdW1lbnQuY3JlYXRlQ0RBVEFTZWN0aW9uKG5vZGUuX2RhdGEpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE5PREVfVFlQRS5DT01NRU5UX05PREU6XG4gICAgICBjb3B5ID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChub2RlLl9kYXRhKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOT0RFX1RZUEUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOlxuICAgICAgY29weSA9IGRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihub2RlLnRhcmdldCwgbm9kZS5fZGF0YSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTk9ERV9UWVBFLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG4gICAgICBjb3B5ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBpZiAobm9kZVtjbG9uaW5nU3RlcHNdKSB7XG4gICAgbm9kZVtjbG9uaW5nU3RlcHNdKGNvcHksIG5vZGUsIGRvY3VtZW50LCBjbG9uZUNoaWxkcmVuKTtcbiAgfVxuXG4gIGlmIChjbG9uZUNoaWxkcmVuKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBkb21TeW1ib2xUcmVlLmNoaWxkcmVuSXRlcmF0b3Iobm9kZSkpIHtcbiAgICAgIGNvbnN0IGNoaWxkQ29weSA9IG1vZHVsZS5leHBvcnRzLmNsb25lKGNvcmUsIGNoaWxkLCBkb2N1bWVudCwgdHJ1ZSk7XG4gICAgICBjb3B5LmFwcGVuZENoaWxkKGNoaWxkQ29weSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvcHk7XG59O1xuXG4vLyBGb3IgdGhlIGZvbGxvd2luZywgbWVtb2l6YXRpb24gaXMgbm90IGFwcGxpZWQgaGVyZSBzaW5jZSB0aGUgbWVtb2l6ZWQgcmVzdWx0cyBhcmUgc3RvcmVkIG9uIGB0aGlzYC5cblxubW9kdWxlLmV4cG9ydHMubGlzdE9mRWxlbWVudHNXaXRoQ2xhc3NOYW1lcyA9IChjbGFzc05hbWVzLCByb290KSA9PiB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1nZXRFbGVtZW50c0J5Q2xhc3NOYW1lXG5cbiAgY29uc3QgY2xhc3NlcyA9IG9yZGVyZWRTZXRQYXJzZXIoY2xhc3NOYW1lcyk7XG5cbiAgaWYgKGNsYXNzZXMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MQ29sbGVjdGlvbihyb290LCAoKSA9PiBbXSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlSFRNTENvbGxlY3Rpb24ocm9vdCwgKCkgPT4ge1xuICAgIGNvbnN0IGlzUXVpcmtzTW9kZSA9IHJvb3QuX293bmVyRG9jdW1lbnQuY29tcGF0TW9kZSA9PT0gXCJCYWNrQ29tcGF0XCI7XG5cbiAgICByZXR1cm4gZG9tU3ltYm9sVHJlZS50cmVlVG9BcnJheShyb290LCB7IGZpbHRlcihub2RlKSB7XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSB8fCBub2RlID09PSByb290KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjbGFzc05hbWUgb2YgY2xhc3Nlcykge1xuICAgICAgICBpZiAoIWRvbVRva2VuTGlzdENvbnRhaW5zKG5vZGUuY2xhc3NMaXN0LCBjbGFzc05hbWUsIHsgY2FzZUluc2Vuc2l0aXZlOiBpc1F1aXJrc01vZGUgfSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSB9KTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5saXN0T2ZFbGVtZW50c1dpdGhRdWFsaWZpZWROYW1lID0gKHF1YWxpZmllZE5hbWUsIHJvb3QpID0+IHtcbiAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWdldGVsZW1lbnRzYnl0YWduYW1lXG5cbiAgaWYgKHF1YWxpZmllZE5hbWUgPT09IFwiKlwiKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHJvb3QsICgpID0+IHtcbiAgICAgIHJldHVybiBkb21TeW1ib2xUcmVlLnRyZWVUb0FycmF5KHJvb3QsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUgJiYgbm9kZSAhPT0gcm9vdDtcbiAgICAgIH0gfSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAocm9vdC5fb3duZXJEb2N1bWVudC5fcGFyc2luZ01vZGUgPT09IFwiaHRtbFwiKSB7XG4gICAgY29uc3QgbG93ZXJRdWFsaWZpZWROYW1lID0gcXVhbGlmaWVkTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHJvb3QsICgpID0+IHtcbiAgICAgIHJldHVybiBkb21TeW1ib2xUcmVlLnRyZWVUb0FycmF5KHJvb3QsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUgfHwgbm9kZSA9PT0gcm9vdCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLl9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUuX3F1YWxpZmllZE5hbWUgPT09IGxvd2VyUXVhbGlmaWVkTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlLl9xdWFsaWZpZWROYW1lID09PSBxdWFsaWZpZWROYW1lO1xuICAgICAgfSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVIVE1MQ29sbGVjdGlvbihyb290LCAoKSA9PiB7XG4gICAgcmV0dXJuIGRvbVN5bWJvbFRyZWUudHJlZVRvQXJyYXkocm9vdCwgeyBmaWx0ZXIobm9kZSkge1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUgfHwgbm9kZSA9PT0gcm9vdCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBub2RlLl9xdWFsaWZpZWROYW1lID09PSBxdWFsaWZpZWROYW1lO1xuICAgIH0gfSk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMubGlzdE9mRWxlbWVudHNXaXRoTmFtZXNwYWNlQW5kTG9jYWxOYW1lID0gKG5hbWVzcGFjZSwgbG9jYWxOYW1lLCByb290KSA9PiB7XG4gIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1nZXRlbGVtZW50c2J5dGFnbmFtZW5zXG5cbiAgaWYgKG5hbWVzcGFjZSA9PT0gXCJcIikge1xuICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gIH1cblxuICBpZiAobmFtZXNwYWNlID09PSBcIipcIiAmJiBsb2NhbE5hbWUgPT09IFwiKlwiKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHJvb3QsICgpID0+IHtcbiAgICAgIHJldHVybiBkb21TeW1ib2xUcmVlLnRyZWVUb0FycmF5KHJvb3QsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUgJiYgbm9kZSAhPT0gcm9vdDtcbiAgICAgIH0gfSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAobmFtZXNwYWNlID09PSBcIipcIikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MQ29sbGVjdGlvbihyb290LCAoKSA9PiB7XG4gICAgICByZXR1cm4gZG9tU3ltYm9sVHJlZS50cmVlVG9BcnJheShyb290LCB7IGZpbHRlcihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFIHx8IG5vZGUgPT09IHJvb3QpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZS5fbG9jYWxOYW1lID09PSBsb2NhbE5hbWU7XG4gICAgICB9IH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKGxvY2FsTmFtZSA9PT0gXCIqXCIpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTENvbGxlY3Rpb24ocm9vdCwgKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvbVN5bWJvbFRyZWUudHJlZVRvQXJyYXkocm9vdCwgeyBmaWx0ZXIobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSB8fCBub2RlID09PSByb290KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGUuX25hbWVzcGFjZVVSSSA9PT0gbmFtZXNwYWNlO1xuICAgICAgfSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVIVE1MQ29sbGVjdGlvbihyb290LCAoKSA9PiB7XG4gICAgcmV0dXJuIGRvbVN5bWJvbFRyZWUudHJlZVRvQXJyYXkocm9vdCwgeyBmaWx0ZXIobm9kZSkge1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUgfHwgbm9kZSA9PT0gcm9vdCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBub2RlLl9sb2NhbE5hbWUgPT09IGxvY2FsTmFtZSAmJiBub2RlLl9uYW1lc3BhY2VVUkkgPT09IG5hbWVzcGFjZTtcbiAgICB9IH0pO1xuICB9KTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgVGV4dEltcGwgPSByZXF1aXJlKFwiLi9UZXh0LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlXCIpO1xuXG5jbGFzcyBDREFUQVNlY3Rpb25JbXBsIGV4dGVuZHMgVGV4dEltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMubm9kZVR5cGUgPSBOT0RFX1RZUEUuQ0RBVEFfU0VDVElPTl9OT0RFO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogQ0RBVEFTZWN0aW9uSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBOb2RlSW1wbCA9IHJlcXVpcmUoXCIuL05vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IENoaWxkTm9kZUltcGwgPSByZXF1aXJlKFwiLi9DaGlsZE5vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IE5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZUltcGwgPSByZXF1aXJlKFwiLi9Ob25Eb2N1bWVudFR5cGVDaGlsZE5vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcblxuY2xhc3MgQ2hhcmFjdGVyRGF0YUltcGwgZXh0ZW5kcyBOb2RlSW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoYXJncywgcHJpdmF0ZURhdGEpO1xuXG4gICAgdGhpcy5fZGF0YSA9IHByaXZhdGVEYXRhLmRhdGE7XG4gIH1cblxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuICBzZXQgZGF0YShkYXRhKSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmxlbmd0aDtcbiAgfVxuXG4gIHN1YnN0cmluZ0RhdGEob2Zmc2V0LCBjb3VudCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXG4gICAgaWYgKG9mZnNldCA+IGxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpO1xuICAgIH1cblxuICAgIGlmIChvZmZzZXQgKyBjb3VudCA+IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuc3Vic3RyaW5nKG9mZnNldCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuc3Vic3RyaW5nKG9mZnNldCwgb2Zmc2V0ICsgY291bnQpO1xuICB9XG5cbiAgYXBwZW5kRGF0YShkYXRhKSB7XG4gICAgdGhpcy5yZXBsYWNlRGF0YSh0aGlzLmxlbmd0aCwgMCwgZGF0YSk7XG4gIH1cblxuICBpbnNlcnREYXRhKG9mZnNldCwgZGF0YSkge1xuICAgIHRoaXMucmVwbGFjZURhdGEob2Zmc2V0LCAwLCBkYXRhKTtcbiAgfVxuXG4gIGRlbGV0ZURhdGEob2Zmc2V0LCBjb3VudCkge1xuICAgIHRoaXMucmVwbGFjZURhdGEob2Zmc2V0LCBjb3VudCwgXCJcIik7XG4gIH1cblxuICByZXBsYWNlRGF0YShvZmZzZXQsIGNvdW50LCBkYXRhKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cbiAgICBpZiAob2Zmc2V0ID4gbGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUik7XG4gICAgfVxuXG4gICAgaWYgKG9mZnNldCArIGNvdW50ID4gbGVuZ3RoKSB7XG4gICAgICBjb3VudCA9IGxlbmd0aCAtIG9mZnNldDtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuX2RhdGEuc3Vic3RyaW5nKDAsIG9mZnNldCk7XG4gICAgY29uc3QgZW5kID0gdGhpcy5fZGF0YS5zdWJzdHJpbmcob2Zmc2V0ICsgY291bnQpO1xuXG4gICAgdGhpcy5fZGF0YSA9IHN0YXJ0ICsgZGF0YSArIGVuZDtcblxuICAgIC8vIFRPRE86IHJhbmdlIHN0dWZmXG4gIH1cbn1cblxuaWRsVXRpbHMubWl4aW4oQ2hhcmFjdGVyRGF0YUltcGwucHJvdG90eXBlLCBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGVJbXBsLnByb3RvdHlwZSk7XG5pZGxVdGlscy5taXhpbihDaGFyYWN0ZXJEYXRhSW1wbC5wcm90b3R5cGUsIENoaWxkTm9kZUltcGwucHJvdG90eXBlKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBDaGFyYWN0ZXJEYXRhSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jbGFzcyBDaGlsZE5vZGVJbXBsIHtcbiAgcmVtb3ZlKCkge1xuICAgIGlmICghdGhpcy5wYXJlbnROb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogQ2hpbGROb2RlSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBDaGFyYWN0ZXJEYXRhSW1wbCA9IHJlcXVpcmUoXCIuL0NoYXJhY3RlckRhdGEtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcblxuY2xhc3MgQ29tbWVudEltcGwgZXh0ZW5kcyBDaGFyYWN0ZXJEYXRhSW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoYXJncywgcHJpdmF0ZURhdGEpO1xuXG4gICAgdGhpcy5ub2RlVHlwZSA9IE5PREVfVFlQRS5DT01NRU5UX05PREU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBDb21tZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCB2YWxpZGF0ZU5hbWVzID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdmFsaWRhdGUtbmFtZXNcIik7XG5jb25zdCBEb2N1bWVudFR5cGUgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0RvY3VtZW50VHlwZVwiKTtcbmNvbnN0IERvY3VtZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9Eb2N1bWVudFwiKTtcblxuY2xhc3MgRE9NSW1wbGVtZW50YXRpb25JbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICB0aGlzLmNvcmUgPSBwcml2YXRlRGF0YS5jb3JlO1xuICAgIHRoaXMuX293bmVyRG9jdW1lbnQgPSBwcml2YXRlRGF0YS5vd25lckRvY3VtZW50O1xuICAgIHRoaXMuX2ZlYXR1cmVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGhhc0ZlYXR1cmUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjcmVhdGVEb2N1bWVudFR5cGUocXVhbGlmaWVkTmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XG4gICAgdmFsaWRhdGVOYW1lcy5xbmFtZShxdWFsaWZpZWROYW1lKTtcblxuICAgIHJldHVybiBEb2N1bWVudFR5cGUuY3JlYXRlSW1wbChbXSwge1xuICAgICAgY29yZTogdGhpcy5jb3JlLFxuICAgICAgb3duZXJEb2N1bWVudDogdGhpcy5fb3duZXJEb2N1bWVudCxcbiAgICAgIG5hbWU6IHF1YWxpZmllZE5hbWUsXG4gICAgICBwdWJsaWNJZCxcbiAgICAgIHN5c3RlbUlkXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVEb2N1bWVudChuYW1lc3BhY2UsIHF1YWxpZmllZE5hbWUsIGRvY3R5cGUpIHtcbiAgICBuYW1lc3BhY2UgPSBuYW1lc3BhY2UgIT09IG51bGwgPyBTdHJpbmcobmFtZXNwYWNlKSA6IG5hbWVzcGFjZTtcbiAgICBxdWFsaWZpZWROYW1lID0gcXVhbGlmaWVkTmFtZSA9PT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcocXVhbGlmaWVkTmFtZSk7XG4gICAgaWYgKGRvY3R5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9jdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZG9jdW1lbnQgPSBEb2N1bWVudC5jcmVhdGVJbXBsKFtdLCB7XG4gICAgICBjb3JlOiB0aGlzLmNvcmUsXG4gICAgICBvcHRpb25zOiB7IHBhcnNpbmdNb2RlOiBcInhtbFwiLCBlbmNvZGluZzogXCJVVEYtOFwiIH1cbiAgICB9KTtcblxuICAgIGxldCBlbGVtZW50ID0gbnVsbDtcbiAgICBpZiAocXVhbGlmaWVkTmFtZSAhPT0gXCJcIikge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2UsIHF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGlmIChkb2N0eXBlICE9PSBudWxsKSB7XG4gICAgICBkb2N1bWVudC5hcHBlbmRDaGlsZChkb2N0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvY3VtZW50O1xuICB9XG5cbiAgY3JlYXRlSFRNTERvY3VtZW50KHRpdGxlKSB7XG4gICAgLy8gTGV0IGRvYyBiZSBhIG5ldyBkb2N1bWVudCB0aGF0IGlzIGFuIEhUTUwgZG9jdW1lbnQuXG4gICAgLy8gU2V0IGRvYydzIGNvbnRlbnQgdHlwZSB0byBcInRleHQvaHRtbFwiLlxuICAgIGNvbnN0IGRvY3VtZW50ID0gRG9jdW1lbnQuY3JlYXRlSW1wbChbXSwge1xuICAgICAgY29yZTogdGhpcy5jb3JlLFxuICAgICAgb3B0aW9uczogeyBwYXJzaW5nTW9kZTogXCJodG1sXCIsIGVuY29kaW5nOiBcIlVURi04XCIgfVxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGEgZG9jdHlwZSwgd2l0aCBcImh0bWxcIiBhcyBpdHMgbmFtZSBhbmQgd2l0aCBpdHMgbm9kZSBkb2N1bWVudCBzZXRcbiAgICAvLyB0byBkb2MuIEFwcGVuZCB0aGUgbmV3bHkgY3JlYXRlZCBub2RlIHRvIGRvYy5cbiAgICBjb25zdCBkb2N0eXBlID0gRG9jdW1lbnRUeXBlLmNyZWF0ZUltcGwoW10sIHtcbiAgICAgIGNvcmU6IHRoaXMuY29yZSxcbiAgICAgIG93bmVyRG9jdW1lbnQ6IHRoaXMsXG4gICAgICBuYW1lOiBcImh0bWxcIixcbiAgICAgIHB1YmxpY0lkOiBcIlwiLFxuICAgICAgc3lzdGVtSWQ6IFwiXCJcbiAgICB9KTtcblxuICAgIGRvY3VtZW50LmFwcGVuZENoaWxkKGRvY3R5cGUpO1xuXG4gICAgLy8gQ3JlYXRlIGFuIGh0bWwgZWxlbWVudCBpbiB0aGUgSFRNTCBuYW1lc3BhY2UsIGFuZCBhcHBlbmQgaXQgdG8gZG9jLlxuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLCBcImh0bWxcIik7XG4gICAgZG9jdW1lbnQuYXBwZW5kQ2hpbGQoaHRtbEVsZW1lbnQpO1xuXG4gICAgLy8gQ3JlYXRlIGEgaGVhZCBlbGVtZW50IGluIHRoZSBIVE1MIG5hbWVzcGFjZSwgYW5kIGFwcGVuZCBpdCB0byB0aGUgaHRtbFxuICAgIC8vIGVsZW1lbnQgY3JlYXRlZCBpbiB0aGUgcHJldmlvdXMgc3RlcC5cbiAgICBjb25zdCBoZWFkRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoZWFkXCIpO1xuICAgIGh0bWxFbGVtZW50LmFwcGVuZENoaWxkKGhlYWRFbGVtZW50KTtcblxuICAgIC8vIElmIHRoZSB0aXRsZSBhcmd1bWVudCBpcyBub3Qgb21pdHRlZDpcbiAgICBpZiAodGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3JlYXRlIGEgdGl0bGUgZWxlbWVudCBpbiB0aGUgSFRNTCBuYW1lc3BhY2UsIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGhlYWRcbiAgICAgIC8vIGVsZW1lbnQgY3JlYXRlZCBpbiB0aGUgcHJldmlvdXMgc3RlcC5cbiAgICAgIGNvbnN0IHRpdGxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0aXRsZVwiKTtcbiAgICAgIGhlYWRFbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbWVudCk7XG5cbiAgICAgIC8vIENyZWF0ZSBhIFRleHQgbm9kZSwgc2V0IGl0cyBkYXRhIHRvIHRpdGxlICh3aGljaCBjb3VsZCBiZSB0aGUgZW1wdHlcbiAgICAgIC8vIHN0cmluZyksIGFuZCBhcHBlbmQgaXQgdG8gdGhlIHRpdGxlIGVsZW1lbnQgY3JlYXRlZCBpbiB0aGUgcHJldmlvdXMgc3RlcC5cbiAgICAgIHRpdGxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aXRsZSkpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIGJvZHkgZWxlbWVudCBpbiB0aGUgSFRNTCBuYW1lc3BhY2UsIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGh0bWxcbiAgICAvLyBlbGVtZW50IGNyZWF0ZWQgaW4gdGhlIGVhcmxpZXIgc3RlcC5cbiAgICBodG1sRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYm9keVwiKSk7XG5cbiAgICAvLyBkb2MncyBvcmlnaW4gaXMgYW4gYWxpYXMgdG8gdGhlIG9yaWdpbiBvZiB0aGUgY29udGV4dCBvYmplY3QncyBhc3NvY2lhdGVkXG4gICAgLy8gZG9jdW1lbnQsIGFuZCBkb2MncyBlZmZlY3RpdmUgc2NyaXB0IG9yaWdpbiBpcyBhbiBhbGlhcyB0byB0aGUgZWZmZWN0aXZlXG4gICAgLy8gc2NyaXB0IG9yaWdpbiBvZiB0aGUgY29udGV4dCBvYmplY3QncyBhc3NvY2lhdGVkIGRvY3VtZW50LlxuXG4gICAgcmV0dXJuIGRvY3VtZW50O1xuICB9XG5cbiAgX3JlbW92ZUZlYXR1cmUoZmVhdHVyZSwgdmVyc2lvbikge1xuICAgIGZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzW2ZlYXR1cmVdKSB7XG4gICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICBjb25zdCB2ZXJzaW9ucyA9IHRoaXMuX2ZlYXR1cmVzW2ZlYXR1cmVdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZlcnNpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKHZlcnNpb25zW2pdID09PSB2ZXJzaW9uKSB7XG4gICAgICAgICAgICB2ZXJzaW9ucy5zcGxpY2UoaiwgMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5fZmVhdHVyZXNbZmVhdHVyZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2FkZEZlYXR1cmUoZmVhdHVyZSwgdmVyc2lvbikge1xuICAgIGZlYXR1cmUgPSBmZWF0dXJlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAodmVyc2lvbikge1xuICAgICAgaWYgKCF0aGlzLl9mZWF0dXJlc1tmZWF0dXJlXSkge1xuICAgICAgICB0aGlzLl9mZWF0dXJlc1tmZWF0dXJlXSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuX2ZlYXR1cmVzW2ZlYXR1cmVdLCB2ZXJzaW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2ZlYXR1cmVzW2ZlYXR1cmVdLnB1c2godmVyc2lvbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2ZlYXR1cmVzW2ZlYXR1cmVdID0gW107XG4gICAgfVxuICB9XG5cbiAgX2hhc0ZlYXR1cmUoZmVhdHVyZSwgdmVyc2lvbikge1xuICAgIGZlYXR1cmUgPSBmZWF0dXJlID8gZmVhdHVyZS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcbiAgICBjb25zdCB2ZXJzaW9ucyA9IHRoaXMuX2ZlYXR1cmVzW2ZlYXR1cmVdIHx8IGZhbHNlO1xuXG4gICAgaWYgKCF2ZXJzaW9uICYmIHZlcnNpb25zLmxlbmd0aCAmJiB2ZXJzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ZXJzaW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHZlcnNpb25zID09PSB2ZXJzaW9uO1xuICAgIH0gZWxzZSBpZiAodmVyc2lvbnMuaW5kZXhPZiAmJiB2ZXJzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZlcnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdmVyc2lvbnNbaV0gaW5zdGFuY2VvZiBSZWdFeHAgPyB2ZXJzaW9uc1tpXS50ZXN0KHZlcnNpb24pIDogdmVyc2lvbnNbaV0gPT09IHZlcnNpb247XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogRE9NSW1wbGVtZW50YXRpb25JbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IENvb2tpZUphciA9IHJlcXVpcmUoXCJ0b3VnaC1jb29raWVcIikuQ29va2llSmFyO1xuXG5jb25zdCBOb2RlSW1wbCA9IHJlcXVpcmUoXCIuL05vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IGlzTm9kZUltcGwgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL05vZGVcIikuaXNJbXBsO1xuXG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlXCIpO1xuY29uc3QgbWVtb2l6ZVF1ZXJ5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLm1lbW9pemVRdWVyeTtcbmNvbnN0IGZpcnN0Q2hpbGRXaXRoSFRNTExvY2FsTmFtZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5maXJzdENoaWxkV2l0aEhUTUxMb2NhbE5hbWU7XG5jb25zdCBmaXJzdENoaWxkV2l0aEhUTUxMb2NhbE5hbWVzID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmZpcnN0Q2hpbGRXaXRoSFRNTExvY2FsTmFtZXM7XG5jb25zdCBmaXJzdERlc2NlbmRhbnRXaXRoSFRNTExvY2FsTmFtZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5maXJzdERlc2NlbmRhbnRXaXRoSFRNTExvY2FsTmFtZTtcbmNvbnN0IHdoYXR3Z1VSTCA9IHJlcXVpcmUoXCJ3aGF0d2ctdXJsXCIpO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuY29uc3Qgc3RyaXBBbmRDb2xsYXBzZUFTQ0lJV2hpdGVzcGFjZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3N0cmluZ3NcIikuc3RyaXBBbmRDb2xsYXBzZUFTQ0lJV2hpdGVzcGFjZTtcbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcbmNvbnN0IEh0bWxUb0RvbSA9IHJlcXVpcmUoXCIuLi8uLi9icm93c2VyL2h0bWx0b2RvbVwiKS5IdG1sVG9Eb207XG5jb25zdCBIaXN0b3J5ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9IaXN0b3J5XCIpO1xuY29uc3QgTG9jYXRpb24gPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0xvY2F0aW9uXCIpO1xuY29uc3QgY3JlYXRlSFRNTENvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vaHRtbC1jb2xsZWN0aW9uXCIpLmNyZWF0ZTtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcbmNvbnN0IHZhbGlkYXRlTmFtZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3ZhbGlkYXRlLW5hbWVzXCIpLm5hbWU7XG5jb25zdCB2YWxpZGF0ZUFuZEV4dHJhY3QgPSByZXF1aXJlKFwiLi4vaGVscGVycy92YWxpZGF0ZS1uYW1lc1wiKS52YWxpZGF0ZUFuZEV4dHJhY3Q7XG5jb25zdCByZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoXCIuLi8uLi9icm93c2VyL3Jlc291cmNlLWxvYWRlclwiKTtcblxuY29uc3QgY2xvbmUgPSByZXF1aXJlKFwiLi4vbm9kZVwiKS5jbG9uZTtcbmNvbnN0IGdlbmVyYXRlZEF0dHIgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0F0dHJcIik7XG5jb25zdCBsaXN0T2ZFbGVtZW50c1dpdGhRdWFsaWZpZWROYW1lID0gcmVxdWlyZShcIi4uL25vZGVcIikubGlzdE9mRWxlbWVudHNXaXRoUXVhbGlmaWVkTmFtZTtcbmNvbnN0IGxpc3RPZkVsZW1lbnRzV2l0aE5hbWVzcGFjZUFuZExvY2FsTmFtZSA9IHJlcXVpcmUoXCIuLi9ub2RlXCIpLmxpc3RPZkVsZW1lbnRzV2l0aE5hbWVzcGFjZUFuZExvY2FsTmFtZTtcbmNvbnN0IGxpc3RPZkVsZW1lbnRzV2l0aENsYXNzTmFtZXMgPSByZXF1aXJlKFwiLi4vbm9kZVwiKS5saXN0T2ZFbGVtZW50c1dpdGhDbGFzc05hbWVzO1xuY29uc3QgQ29tbWVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvQ29tbWVudFwiKTtcbmNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvUHJvY2Vzc2luZ0luc3RydWN0aW9uXCIpO1xuY29uc3QgQ0RBVEFTZWN0aW9uID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9DREFUQVNlY3Rpb25cIik7XG5jb25zdCBUZXh0ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9UZXh0XCIpO1xuY29uc3QgRG9jdW1lbnRGcmFnbWVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvRG9jdW1lbnRGcmFnbWVudFwiKTtcbmNvbnN0IERPTUltcGxlbWVudGF0aW9uID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9ET01JbXBsZW1lbnRhdGlvblwiKTtcbmNvbnN0IFBhcmVudE5vZGVJbXBsID0gcmVxdWlyZShcIi4vUGFyZW50Tm9kZS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgSFRNTEVsZW1lbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0hUTUxFbGVtZW50XCIpO1xuY29uc3QgSFRNTFVua25vd25FbGVtZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9IVE1MVW5rbm93bkVsZW1lbnRcIik7XG5jb25zdCBUcmVlV2Fsa2VyID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9UcmVlV2Fsa2VyXCIpO1xuXG5jb25zdCBDdXN0b21FdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvQ3VzdG9tRXZlbnRcIik7XG5jb25zdCBFcnJvckV2ZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9FcnJvckV2ZW50XCIpO1xuY29uc3QgRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0V2ZW50XCIpO1xuY29uc3QgRm9jdXNFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvRm9jdXNFdmVudFwiKTtcbmNvbnN0IEhhc2hDaGFuZ2VFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvSGFzaENoYW5nZUV2ZW50XCIpO1xuY29uc3QgS2V5Ym9hcmRFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvS2V5Ym9hcmRFdmVudFwiKTtcbmNvbnN0IE1lc3NhZ2VFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvTWVzc2FnZUV2ZW50XCIpO1xuY29uc3QgTW91c2VFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvTW91c2VFdmVudFwiKTtcbmNvbnN0IFBvcFN0YXRlRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL1BvcFN0YXRlRXZlbnRcIik7XG5jb25zdCBQcm9ncmVzc0V2ZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9Qcm9ncmVzc0V2ZW50XCIpO1xuY29uc3QgVG91Y2hFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvVG91Y2hFdmVudFwiKTtcbmNvbnN0IFVJRXZlbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL1VJRXZlbnRcIik7XG5cbmZ1bmN0aW9uIGNsZWFyQ2hpbGROb2Rlcyhub2RlKSB7XG4gIGZvciAobGV0IGNoaWxkID0gZG9tU3ltYm9sVHJlZS5maXJzdENoaWxkKG5vZGUpOyBjaGlsZDsgY2hpbGQgPSBkb21TeW1ib2xUcmVlLmZpcnN0Q2hpbGQobm9kZSkpIHtcbiAgICBub2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRJbm5lckhUTUwoZG9jdW1lbnQsIG5vZGUsIGh0bWwpIHtcbiAgLy8gQ2xlYXIgdGhlIGNoaWxkcmVuIGZpcnN0OlxuICBpZiAobm9kZS5fdGVtcGxhdGVDb250ZW50cykge1xuICAgIGNsZWFyQ2hpbGROb2Rlcyhub2RlLl90ZW1wbGF0ZUNvbnRlbnRzKTtcbiAgfSBlbHNlIHtcbiAgICBjbGVhckNoaWxkTm9kZXMobm9kZSk7XG4gIH1cblxuICBpZiAoaHRtbCAhPT0gXCJcIikge1xuICAgIGlmIChub2RlLm5vZGVOYW1lID09PSBcIiNkb2N1bWVudFwiKSB7XG4gICAgICBkb2N1bWVudC5faHRtbFRvRG9tLmFwcGVuZEh0bWxUb0RvY3VtZW50KGh0bWwsIG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5faHRtbFRvRG9tLmFwcGVuZEh0bWxUb0VsZW1lbnQoaHRtbCwgbm9kZSk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFJlc291cmNlUXVldWUge1xuICBjb25zdHJ1Y3RvcihwYXVzZWQpIHtcbiAgICB0aGlzLnBhdXNlZCA9IEJvb2xlYW4ocGF1c2VkKTtcbiAgfVxuXG4gIHB1c2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBxID0gdGhpcztcbiAgICBjb25zdCBpdGVtID0ge1xuICAgICAgcHJldjogcS50YWlsLFxuICAgICAgY2hlY2soKSB7XG4gICAgICAgIGlmICghcS5wYXVzZWQgJiYgIXRoaXMucHJldiAmJiB0aGlzLmZpcmVkKSB7XG4gICAgICAgICAgY2FsbGJhY2sodGhpcy5lcnIsIHRoaXMuZGF0YSwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgaWYgKHRoaXMubmV4dCkge1xuICAgICAgICAgICAgdGhpcy5uZXh0LnByZXYgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5uZXh0LmNoZWNrKCk7XG4gICAgICAgICAgfSBlbHNlIHsgLy8gcS50YWlsPT09dGhpc1xuICAgICAgICAgICAgcS50YWlsID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChxLnRhaWwpIHtcbiAgICAgIHEudGFpbC5uZXh0ID0gaXRlbTtcbiAgICB9XG4gICAgcS50YWlsID0gaXRlbTtcbiAgICByZXR1cm4gKGVyciwgZGF0YSwgcmVzcG9uc2UpID0+IHtcbiAgICAgIGl0ZW0uZmlyZWQgPSAxO1xuICAgICAgaXRlbS5lcnIgPSBlcnI7XG4gICAgICBpdGVtLmRhdGEgPSBkYXRhO1xuICAgICAgaXRlbS5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgaXRlbS5jaGVjaygpO1xuICAgIH07XG4gIH1cblxuICByZXN1bWUoKSB7XG4gICAgaWYgKCF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuXG4gICAgbGV0IGhlYWQgPSB0aGlzLnRhaWw7XG4gICAgd2hpbGUgKGhlYWQgJiYgaGVhZC5wcmV2KSB7XG4gICAgICBoZWFkID0gaGVhZC5wcmV2O1xuICAgIH1cbiAgICBpZiAoaGVhZCkge1xuICAgICAgaGVhZC5jaGVjaygpO1xuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0TWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMub3BlbmVkUmVxdWVzdHMgPSBbXTtcbiAgfVxuXG4gIGFkZChyZXEpIHtcbiAgICB0aGlzLm9wZW5lZFJlcXVlc3RzLnB1c2gocmVxKTtcbiAgfVxuXG4gIHJlbW92ZShyZXEpIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLm9wZW5lZFJlcXVlc3RzLmluZGV4T2YocmVxKTtcbiAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgdGhpcy5vcGVuZWRSZXF1ZXN0cy5zcGxpY2UoaWR4LCAxKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBmb3IgKGNvbnN0IG9wZW5lZFJlcXVlc3Qgb2YgdGhpcy5vcGVuZWRSZXF1ZXN0cykge1xuICAgICAgb3BlbmVkUmVxdWVzdC5hYm9ydCgpO1xuICAgIH1cbiAgICB0aGlzLm9wZW5lZFJlcXVlc3RzID0gW107XG4gIH1cblxuICBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLm9wZW5lZFJlcXVlc3RzLmxlbmd0aDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYWQobnVtYmVyKSB7XG4gIGlmIChudW1iZXIgPCAxMCkge1xuICAgIHJldHVybiBcIjBcIiArIG51bWJlcjtcbiAgfVxuICByZXR1cm4gbnVtYmVyO1xufVxuXG5mdW5jdGlvbiB0b0xhc3RNb2RpZmllZFN0cmluZyhkYXRlKSB7XG4gIHJldHVybiBwYWQoZGF0ZS5nZXRNb250aCgpICsgMSkgK1xuICAgIFwiL1wiICsgcGFkKGRhdGUuZ2V0RGF0ZSgpKSArXG4gICAgXCIvXCIgKyBkYXRlLmdldEZ1bGxZZWFyKCkgK1xuICAgIFwiIFwiICsgcGFkKGRhdGUuZ2V0SG91cnMoKSkgK1xuICAgIFwiOlwiICsgcGFkKGRhdGUuZ2V0TWludXRlcygpKSArXG4gICAgXCI6XCIgKyBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpO1xufVxuXG5jb25zdCBub25Jbmhlcml0ZWRUYWdzID0gbmV3IFNldChbXG4gIFwiYXJ0aWNsZVwiLCBcInNlY3Rpb25cIiwgXCJuYXZcIiwgXCJhc2lkZVwiLCBcImhncm91cFwiLCBcImhlYWRlclwiLCBcImZvb3RlclwiLCBcImFkZHJlc3NcIiwgXCJkdFwiLFxuICBcImRkXCIsIFwiZmlndXJlXCIsIFwiZmlnY2FwdGlvblwiLCBcIm1haW5cIiwgXCJlbVwiLCBcInN0cm9uZ1wiLCBcInNtYWxsXCIsIFwic1wiLCBcImNpdGVcIiwgXCJkZm5cIiwgXCJhYmJyXCIsXG4gIFwicnVieVwiLCBcInJ0XCIsIFwicnBcIiwgXCJjb2RlXCIsIFwidmFyXCIsIFwic2FtcFwiLCBcImtiZFwiLCBcImlcIiwgXCJiXCIsIFwidVwiLCBcIm1hcmtcIiwgXCJiZGlcIiwgXCJiZG9cIiwgXCJ3YnJcIlxuXSk7XG5cbmNvbnN0IGV2ZW50SW50ZXJmYWNlVGFibGUgPSB7XG4gIGN1c3RvbWV2ZW50OiBDdXN0b21FdmVudCxcbiAgZXJyb3JldmVudDogRXJyb3JFdmVudCxcbiAgZXZlbnQ6IEV2ZW50LFxuICBldmVudHM6IEV2ZW50LFxuICBmb2N1c2V2ZW50OiBGb2N1c0V2ZW50LFxuICBoYXNoY2hhbmdlZXZlbnQ6IEhhc2hDaGFuZ2VFdmVudCxcbiAgaHRtbGV2ZW50czogRXZlbnQsXG4gIGtleWJvYXJkZXZlbnQ6IEtleWJvYXJkRXZlbnQsXG4gIG1lc3NhZ2VldmVudDogTWVzc2FnZUV2ZW50LFxuICBtb3VzZWV2ZW50OiBNb3VzZUV2ZW50LFxuICBtb3VzZWV2ZW50czogTW91c2VFdmVudCxcbiAgcG9wc3RhdGVldmVudDogUG9wU3RhdGVFdmVudCxcbiAgcHJvZ3Jlc3NldmVudDogUHJvZ3Jlc3NFdmVudCxcbiAgc3ZnZXZlbnRzOiBFdmVudCxcbiAgdG91Y2hldmVudDogVG91Y2hFdmVudCxcbiAgdWlldmVudDogVUlFdmVudCxcbiAgdWlldmVudHM6IFVJRXZlbnRcbn07XG5cbmNsYXNzIERvY3VtZW50SW1wbCBleHRlbmRzIE5vZGVJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG5cbiAgICB0aGlzLl9vd25lckRvY3VtZW50ID0gdGhpcztcbiAgICB0aGlzLm5vZGVUeXBlID0gTk9ERV9UWVBFLkRPQ1VNRU5UX05PREU7XG4gICAgaWYgKCFwcml2YXRlRGF0YS5vcHRpb25zKSB7XG4gICAgICBwcml2YXRlRGF0YS5vcHRpb25zID0ge307XG4gICAgfVxuICAgIGlmICghcHJpdmF0ZURhdGEub3B0aW9ucy5wYXJzaW5nTW9kZSkge1xuICAgICAgcHJpdmF0ZURhdGEub3B0aW9ucy5wYXJzaW5nTW9kZSA9IFwieG1sXCI7XG4gICAgfVxuXG4gICAgdGhpcy5fcGFyc2luZ01vZGUgPSBwcml2YXRlRGF0YS5vcHRpb25zLnBhcnNpbmdNb2RlO1xuICAgIHRoaXMuX2h0bWxUb0RvbSA9IG5ldyBIdG1sVG9Eb20ocHJpdmF0ZURhdGEuY29yZSwgcHJpdmF0ZURhdGEub3B0aW9ucy5wYXJzZXIsIHByaXZhdGVEYXRhLm9wdGlvbnMucGFyc2luZ01vZGUpO1xuXG4gICAgdGhpcy5faW1wbGVtZW50YXRpb24gPSBET01JbXBsZW1lbnRhdGlvbi5jcmVhdGVJbXBsKFtdLCB7XG4gICAgICBjb3JlOiB0aGlzLl9jb3JlLFxuICAgICAgb3duZXJEb2N1bWVudDogdGhpc1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGVmYXVsdFZpZXcgPSBwcml2YXRlRGF0YS5vcHRpb25zLmRlZmF1bHRWaWV3IHx8IG51bGw7XG4gICAgdGhpcy5fZ2xvYmFsID0gcHJpdmF0ZURhdGEub3B0aW9ucy5nbG9iYWw7XG4gICAgdGhpcy5fZG9jdW1lbnRFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9pZHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2F0dGFjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9jdXJyZW50U2NyaXB0ID0gbnVsbDtcbiAgICB0aGlzLl9jb29raWVKYXIgPSBwcml2YXRlRGF0YS5vcHRpb25zLmNvb2tpZUphcjtcbiAgICB0aGlzLl9wYXJzZU9wdGlvbnMgPSBwcml2YXRlRGF0YS5vcHRpb25zLnBhcnNlT3B0aW9ucztcbiAgICBpZiAodGhpcy5fY29va2llSmFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2Nvb2tpZUphciA9IG5ldyBDb29raWVKYXIobnVsbCwgeyBsb29zZU1vZGU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGVudFR5cGUgPSBwcml2YXRlRGF0YS5vcHRpb25zLmNvbnRlbnRUeXBlO1xuICAgIHRoaXMuX2VuY29kaW5nID0gcHJpdmF0ZURhdGEub3B0aW9ucy5lbmNvZGluZztcblxuICAgIGNvbnN0IHVybE9wdGlvbiA9IHByaXZhdGVEYXRhLm9wdGlvbnMudXJsID09PSB1bmRlZmluZWQgPyBcImFib3V0OmJsYW5rXCIgOiBwcml2YXRlRGF0YS5vcHRpb25zLnVybDtcbiAgICBjb25zdCBwYXJzZWQgPSB3aGF0d2dVUkwucGFyc2VVUkwodXJsT3B0aW9uKTtcbiAgICBpZiAocGFyc2VkID09PSBcImZhaWx1cmVcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IHBhcnNlIFwiJHt1cmxPcHRpb259XCIgYXMgYSBVUkxgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9VUkwgPSBwYXJzZWQ7XG4gICAgdGhpcy5fb3JpZ2luID0gd2hhdHdnVVJMLnNlcmlhbGl6ZVVSTFRvVW5pY29kZU9yaWdpbihwYXJzZWQpO1xuXG4gICAgdGhpcy5fbG9jYXRpb24gPSBMb2NhdGlvbi5jcmVhdGVJbXBsKFtdLCB7IHJlbGV2YW50RG9jdW1lbnQ6IHRoaXMgfSk7XG4gICAgdGhpcy5faGlzdG9yeSA9IEhpc3RvcnkuY3JlYXRlSW1wbChbXSwge1xuICAgICAgd2luZG93OiB0aGlzLl9kZWZhdWx0VmlldyxcbiAgICAgIGRvY3VtZW50OiB0aGlzLFxuICAgICAgYWN0QXNJZkxvY2F0aW9uUmVsb2FkQ2FsbGVkOiAoKSA9PiB0aGlzLl9sb2NhdGlvbi5yZWxvYWQoKVxuICAgIH0pO1xuXG4gICAgaWYgKHByaXZhdGVEYXRhLm9wdGlvbnMuY29va2llKSB7XG4gICAgICBjb25zdCBjb29raWVzID0gQXJyYXkuaXNBcnJheShwcml2YXRlRGF0YS5vcHRpb25zLmNvb2tpZSkgP1xuICAgICAgICBwcml2YXRlRGF0YS5vcHRpb25zLmNvb2tpZSA6IFtwcml2YXRlRGF0YS5vcHRpb25zLmNvb2tpZV07XG4gICAgICBjb25zdCBkb2N1bWVudCA9IHRoaXM7XG5cbiAgICAgIGNvb2tpZXMuZm9yRWFjaChjb29raWVTdHIgPT4ge1xuICAgICAgICBkb2N1bWVudC5fY29va2llSmFyLnNldENvb2tpZVN5bmMoY29va2llU3RyLCBkb2N1bWVudC5VUkwsIHsgaWdub3JlRXJyb3I6IHRydWUgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9hY3RpdmVOb2RlSXRlcmF0b3JzID0gW107XG4gICAgdGhpcy5fYWN0aXZlTm9kZUl0ZXJhdG9yc01heCA9IHByaXZhdGVEYXRhLm9wdGlvbnMuY29uY3VycmVudE5vZGVJdGVyYXRvcnMgPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihwcml2YXRlRGF0YS5vcHRpb25zLmNvbmN1cnJlbnROb2RlSXRlcmF0b3JzKTtcblxuICAgIGlmIChpc05hTih0aGlzLl9hY3RpdmVOb2RlSXRlcmF0b3JzTWF4KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSAnY29uY3VycmVudE5vZGVJdGVyYXRvcnMnIG9wdGlvbiBtdXN0IGJlIGEgTnVtYmVyXCIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9hY3RpdmVOb2RlSXRlcmF0b3JzTWF4IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgJ2NvbmN1cnJlbnROb2RlSXRlcmF0b3JzJyBvcHRpb24gbXVzdCBiZSBhIG5vbiBuZWdhdGl2ZSBOdW1iZXJcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVmZXJyZXIgPSBwcml2YXRlRGF0YS5vcHRpb25zLnJlZmVycmVyIHx8IFwiXCI7XG4gICAgdGhpcy5fbGFzdE1vZGlmaWVkID0gdG9MYXN0TW9kaWZpZWRTdHJpbmcocHJpdmF0ZURhdGEub3B0aW9ucy5sYXN0TW9kaWZpZWQgfHwgbmV3IERhdGUoKSk7XG4gICAgdGhpcy5fcXVldWUgPSBuZXcgUmVzb3VyY2VRdWV1ZShwcml2YXRlRGF0YS5vcHRpb25zLmRlZmVyQ2xvc2UpO1xuICAgIHRoaXMuX2N1c3RvbVJlc291cmNlTG9hZGVyID0gcHJpdmF0ZURhdGEub3B0aW9ucy5yZXNvdXJjZUxvYWRlcjtcbiAgICB0aGlzLl9wb29sID0gcHJpdmF0ZURhdGEub3B0aW9ucy5wb29sO1xuICAgIHRoaXMuX2FnZW50T3B0aW9ucyA9IHByaXZhdGVEYXRhLm9wdGlvbnMuYWdlbnRPcHRpb25zO1xuICAgIHRoaXMuX3N0cmljdFNTTCA9IHByaXZhdGVEYXRhLm9wdGlvbnMuc3RyaWN0U1NMO1xuICAgIHRoaXMuX3Byb3h5ID0gcHJpdmF0ZURhdGEub3B0aW9ucy5wcm94eTtcbiAgICB0aGlzLl9yZXF1ZXN0TWFuYWdlciA9IG5ldyBSZXF1ZXN0TWFuYWdlcigpO1xuICAgIHRoaXMucmVhZHlTdGF0ZSA9IFwibG9hZGluZ1wiO1xuXG4gICAgdGhpcy5fbGFzdEZvY3VzZWRFbGVtZW50ID0gbnVsbDtcbiAgfVxuXG4gIF9kZWZhdWx0RWxlbWVudEJ1aWxkZXIoZG9jdW1lbnQsIHRhZ05hbWUpIHtcbiAgICBpZiAobm9uSW5oZXJpdGVkVGFncy5oYXModGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgcmV0dXJuIEhUTUxFbGVtZW50LmNyZWF0ZShbXSwge1xuICAgICAgICBjb3JlOiB0aGlzLl9jb3JlLFxuICAgICAgICBvd25lckRvY3VtZW50OiB0aGlzLFxuICAgICAgICBsb2NhbE5hbWU6IHRhZ05hbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gSFRNTFVua25vd25FbGVtZW50LmNyZWF0ZShbXSwge1xuICAgICAgY29yZTogdGhpcy5fY29yZSxcbiAgICAgIG93bmVyRG9jdW1lbnQ6IHRoaXMsXG4gICAgICBsb2NhbE5hbWU6IHRhZ05hbWVcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBjb250ZW50VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGVudFR5cGUgfHwgKHRoaXMuX3BhcnNpbmdNb2RlID09PSBcInhtbFwiID8gXCJhcHBsaWNhdGlvbi94bWxcIiA6IFwidGV4dC9odG1sXCIpO1xuICB9XG4gIGdldCBjb21wYXRNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJzaW5nTW9kZSA9PT0gXCJ4bWxcIiB8fCB0aGlzLmRvY3R5cGUgPyBcIkNTUzFDb21wYXRcIiA6IFwiQmFja0NvbXBhdFwiO1xuICB9XG4gIGdldCBjaGFyc2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9lbmNvZGluZztcbiAgfVxuICBnZXQgY2hhcmFjdGVyU2V0KCkge1xuICAgIHJldHVybiB0aGlzLl9lbmNvZGluZztcbiAgfVxuICBnZXQgaW5wdXRFbmNvZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5jb2Rpbmc7XG4gIH1cbiAgZ2V0IGRvY3R5cGUoKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2YgZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHRoaXMpKSB7XG4gICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRE9DVU1FTlRfVFlQRV9OT0RFKSB7XG4gICAgICAgIHJldHVybiBjaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldCBVUkwoKSB7XG4gICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVVUkwodGhpcy5fVVJMKTtcbiAgfVxuICBnZXQgZG9jdW1lbnRVUkkoKSB7XG4gICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVVUkwodGhpcy5fVVJMKTtcbiAgfVxuICBnZXQgb3JpZ2luKCkge1xuICAgIHJldHVybiB0aGlzLl9vcmlnaW47XG4gIH1cbiAgZ2V0IGxvY2F0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmlldyA/IHRoaXMuX2xvY2F0aW9uIDogbnVsbDtcbiAgfVxuICBnZXQgZG9jdW1lbnRFbGVtZW50KCkge1xuICAgIGlmICh0aGlzLl9kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2YgZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHRoaXMpKSB7XG4gICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIHRoaXMuX2RvY3VtZW50RWxlbWVudCA9IGNoaWxkTm9kZTtcbiAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBpbXBsZW1lbnRhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5faW1wbGVtZW50YXRpb247XG4gIH1cbiAgc2V0IGltcGxlbWVudGF0aW9uKGltcGxlbWVudGF0aW9uKSB7XG4gICAgdGhpcy5faW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvbjtcbiAgfVxuXG4gIGdldCBkZWZhdWx0VmlldygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZpZXc7XG4gIH1cblxuICBnZXQgY3VycmVudFNjcmlwdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFNjcmlwdDtcbiAgfVxuXG4gIGdldCBhY3RpdmVFbGVtZW50KCkge1xuICAgIGlmICh0aGlzLl9sYXN0Rm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9sYXN0Rm9jdXNlZEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYm9keTtcbiAgfVxuXG4gIGhhc0ZvY3VzKCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2xhc3RGb2N1c2VkRWxlbWVudCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEhUTUxEb2N1bWVudF1cIjtcbiAgfVxuXG4gIF9jcmVhdGVFbGVtZW50V2l0aENvcnJlY3RFbGVtZW50SW50ZXJmYWNlKG5hbWUsIG5hbWVzcGFjZSkge1xuICAgIC8vIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbGVtZW50LWludGVyZmFjZVxuICAgIC8vIFRPRE86IGV2ZW50dWFsbHkgd2Ugc2hvdWxkIHJlLXdyaXRlIHRoZSBlbGVtZW50LWJ1aWxkZXIgc3lzdGVtIHRvIGJlIG5hbWVzcGFjZSBhd2FyZSwgYnV0IGZvciBub3cgaXQgaXMgbm90LlxuICAgIGNvbnN0IGJ1aWxkZXIgPSB0aGlzLl9lbGVtZW50QnVpbGRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXSB8fCB0aGlzLl9kZWZhdWx0RWxlbWVudEJ1aWxkZXIuYmluZCh0aGlzKTtcbiAgICBjb25zdCBlbGVtID0gYnVpbGRlcih0aGlzLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgIHJldHVybiBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihlbGVtKTtcbiAgfVxuXG4gIGFwcGVuZENoaWxkKC8qIE5vZGUgKi8gYXJnKSB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRFbGVtZW50ICYmIGFyZy5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKGFyZyk7XG4gIH1cblxuICByZW1vdmVDaGlsZCgvKiBOb2RlICovIGFyZykge1xuICAgIGNvbnN0IHJldCA9IHN1cGVyLnJlbW92ZUNoaWxkKGFyZyk7XG4gICAgaWYgKGFyZyA9PT0gdGhpcy5fZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICB0aGlzLl9kb2N1bWVudEVsZW1lbnQgPSBudWxsOy8vIGZvcmNlIGEgcmVjYWxjdWxhdGlvblxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgX2Rlc2NlbmRhbnRSZW1vdmVkKHBhcmVudCwgY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gXCJTVFlMRVwiKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc3R5bGVTaGVldHMuaW5kZXhPZihjaGlsZC5zaGVldCk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLnN0eWxlU2hlZXRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd3JpdGUoKSB7XG4gICAgbGV0IHRleHQgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB0ZXh0ICs9IFN0cmluZyhhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wYXJzaW5nTW9kZSA9PT0gXCJ4bWxcIikge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIsIFwiQ2Fubm90IHVzZSBkb2N1bWVudC53cml0ZSBvbiBYTUwgZG9jdW1lbnRzXCIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl93cml0ZUFmdGVyRWxlbWVudCkge1xuICAgICAgLy8gSWYgY2FsbGVkIGZyb20gYW4gc2NyaXB0IGVsZW1lbnQgZGlyZWN0bHkgKGR1cmluZyB0aGUgZmlyc3QgdGljayksXG4gICAgICAvLyB0aGUgbmV3IGVsZW1lbnRzIGFyZSBpbnNlcnRlZCByaWdodCBhZnRlciB0aGF0IGVsZW1lbnQuXG4gICAgICBjb25zdCB0ZW1wRGl2ID0gdGhpcy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgc2V0SW5uZXJIVE1MKHRoaXMsIHRlbXBEaXYsIHRleHQpO1xuXG4gICAgICBsZXQgY2hpbGQgPSB0ZW1wRGl2LmZpcnN0Q2hpbGQ7XG4gICAgICBsZXQgcHJldmlvdXMgPSB0aGlzLl93cml0ZUFmdGVyRWxlbWVudDtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX3dyaXRlQWZ0ZXJFbGVtZW50LnBhcmVudE5vZGU7XG5cbiAgICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgICBjb25zdCBub2RlID0gY2hpbGQ7XG4gICAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgcHJldmlvdXMubmV4dFNpYmxpbmcpO1xuICAgICAgICBwcmV2aW91cyA9IG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFwibG9hZGluZ1wiKSB7XG4gICAgICAvLyBEdXJpbmcgcGFnZSBsb2FkaW5nLCBkb2N1bWVudC53cml0ZSBhcHBlbmRzIHRvIHRoZSBjdXJyZW50IGVsZW1lbnRcbiAgICAgIC8vIEZpbmQgdGhlIGxhc3QgY2hpbGQgdGhhdCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgZG9jdW1lbnQuXG4gICAgICBsZXQgbm9kZSA9IHRoaXM7XG4gICAgICB3aGlsZSAobm9kZS5sYXN0Q2hpbGQgJiYgbm9kZS5sYXN0Q2hpbGQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUubGFzdENoaWxkO1xuICAgICAgfVxuICAgICAgc2V0SW5uZXJIVE1MKHRoaXMsIG5vZGUsIHRleHQpO1xuICAgIH0gZWxzZSBpZiAodGV4dCkge1xuICAgICAgc2V0SW5uZXJIVE1MKHRoaXMsIHRoaXMsIHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlbG4oKSB7XG4gICAgdGhpcy53cml0ZSguLi5hcmd1bWVudHMsIFwiXFxuXCIpO1xuICB9XG5cbiAgZ2V0RWxlbWVudEJ5SWQoaWQpIHtcbiAgICAvLyByZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnRcbiAgICByZXR1cm4gdGhpcy5faWRzW2lkXSAmJiB0aGlzLl9pZHNbaWRdLmxlbmd0aCA+IDAgPyB0aGlzLl9pZHNbaWRdWzBdIDogbnVsbDtcbiAgfVxuXG4gIGdldCByZWZlcnJlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVmZXJyZXIgfHwgXCJcIjtcbiAgfVxuICBnZXQgbGFzdE1vZGlmaWVkKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0TW9kaWZpZWQ7XG4gIH1cbiAgZ2V0IGltYWdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcIklNR1wiKTtcbiAgfVxuICBnZXQgZW1iZWRzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiRU1CRURcIik7XG4gIH1cbiAgZ2V0IHBsdWdpbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW1iZWRzO1xuICB9XG4gIGdldCBsaW5rcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTENvbGxlY3Rpb24odGhpcywgKCkgPT4gZG9tU3ltYm9sVHJlZS50cmVlVG9BcnJheSh0aGlzLCB7IGZpbHRlcihub2RlKSB7XG4gICAgICByZXR1cm4gKG5vZGUuX2xvY2FsTmFtZSA9PT0gXCJhXCIgfHwgbm9kZS5fbG9jYWxOYW1lID09PSBcImFyZWFcIikgJiZcbiAgICAgICAgICAgICBub2RlLmhhc0F0dHJpYnV0ZShcImhyZWZcIikgJiZcbiAgICAgICAgICAgICBub2RlLl9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuICAgIH0gfSkpO1xuICB9XG4gIGdldCBmb3JtcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcIkZPUk1cIik7XG4gIH1cbiAgZ2V0IHNjcmlwdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJTQ1JJUFRcIik7XG4gIH1cbiAgZ2V0IGFuY2hvcnMoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMsICgpID0+IGRvbVN5bWJvbFRyZWUudHJlZVRvQXJyYXkodGhpcywgeyBmaWx0ZXIobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuX2xvY2FsTmFtZSA9PT0gXCJhXCIgJiZcbiAgICAgICAgICAgICBub2RlLmhhc0F0dHJpYnV0ZShcIm5hbWVcIikgJiZcbiAgICAgICAgICAgICBub2RlLl9uYW1lc3BhY2VVUkkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuICAgIH0gfSkpO1xuICB9XG4gIGdldCBhcHBsZXRzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiQVBQTEVUXCIpO1xuICB9XG4gIG9wZW4oKSB7XG4gICAgbGV0IGNoaWxkID0gZG9tU3ltYm9sVHJlZS5maXJzdENoaWxkKHRoaXMpO1xuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICBjaGlsZCA9IGRvbVN5bWJvbFRyZWUuZmlyc3RDaGlsZCh0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5fZG9jdW1lbnRFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9tb2RpZmllZCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGNsb3NlKCkge1xuICAgIHRoaXMuX3F1ZXVlLnJlc3VtZSgpO1xuXG4gICAgLy8gU2V0IHRoZSByZWFkeVN0YXRlIHRvICdjb21wbGV0ZScgb25jZSBhbGwgcmVzb3VyY2VzIGFyZSBsb2FkZWQuXG4gICAgLy8gQXMgYSBzaWRlLWVmZmVjdCB0aGUgZG9jdW1lbnQncyBsb2FkLWV2ZW50IHdpbGwgYmUgZGlzcGF0Y2hlZC5cbiAgICByZXNvdXJjZUxvYWRlci5lbnF1ZXVlKHRoaXMsIG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFwiY29tcGxldGVcIjtcbiAgICAgIGNvbnN0IGV2ID0gdGhpcy5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7XG4gICAgICBldi5pbml0RXZlbnQoXCJET01Db250ZW50TG9hZGVkXCIsIGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXYpO1xuICAgIH0pKG51bGwsIHRydWUpO1xuICB9XG5cbiAgZ2V0RWxlbWVudHNCeU5hbWUoZWxlbWVudE5hbWUpIHtcbiAgICAvLyBUT0RPOiBzaG91bGQgYmUgTm9kZUxpc3QsIHNob3VsZCBiZSBtZW1vaXplZFxuICAgIHJldHVybiBjcmVhdGVIVE1MQ29sbGVjdGlvbih0aGlzLCAoKSA9PiBkb21TeW1ib2xUcmVlLnRyZWVUb0FycmF5KHRoaXMsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZShcIm5hbWVcIikgPT09IGVsZW1lbnROYW1lO1xuICAgIH0gfSkpO1xuICB9XG5cbiAgZ2V0IHRpdGxlKCkge1xuICAgIC8vIFRPRE8gU1ZHXG5cbiAgICBjb25zdCB0aXRsZUVsZW1lbnQgPSBmaXJzdERlc2NlbmRhbnRXaXRoSFRNTExvY2FsTmFtZSh0aGlzLCBcInRpdGxlXCIpO1xuICAgIGxldCB2YWx1ZSA9IHRpdGxlRWxlbWVudCAhPT0gbnVsbCA/IHRpdGxlRWxlbWVudC50ZXh0Q29udGVudCA6IFwiXCI7XG4gICAgdmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlQVNDSUlXaGl0ZXNwYWNlKHZhbHVlKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXQgdGl0bGUodmFsKSB7XG4gICAgLy8gVE9ETyBTVkdcblxuICAgIGNvbnN0IHRpdGxlRWxlbWVudCA9IGZpcnN0RGVzY2VuZGFudFdpdGhIVE1MTG9jYWxOYW1lKHRoaXMsIFwidGl0bGVcIik7XG4gICAgY29uc3QgaGVhZEVsZW1lbnQgPSB0aGlzLmhlYWQ7XG5cbiAgICBpZiAodGl0bGVFbGVtZW50ID09PSBudWxsICYmIGhlYWRFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGVsZW1lbnQ7XG4gICAgaWYgKHRpdGxlRWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgZWxlbWVudCA9IHRpdGxlRWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudCA9IHRoaXMuY3JlYXRlRWxlbWVudChcInRpdGxlXCIpO1xuICAgICAgaGVhZEVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHZhbDtcbiAgfVxuXG4gIGdldCBkaXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRFbGVtZW50ID8gdGhpcy5kb2N1bWVudEVsZW1lbnQuZGlyIDogXCJcIjtcbiAgfVxuICBzZXQgZGlyKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICB0aGlzLmRvY3VtZW50RWxlbWVudC5kaXIgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgaGVhZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudEVsZW1lbnQgPyBmaXJzdENoaWxkV2l0aEhUTUxMb2NhbE5hbWUodGhpcy5kb2N1bWVudEVsZW1lbnQsIFwiaGVhZFwiKSA6IG51bGw7XG4gIH1cblxuICBnZXQgYm9keSgpIHtcbiAgICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50RWxlbWVudDtcbiAgICBpZiAoIWRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudEVsZW1lbnQuX2xvY2FsTmFtZSAhPT0gXCJodG1sXCIgfHxcbiAgICAgICAgZG9jdW1lbnRFbGVtZW50Ll9uYW1lc3BhY2VVUkkgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3RDaGlsZFdpdGhIVE1MTG9jYWxOYW1lcyh0aGlzLmRvY3VtZW50RWxlbWVudCwgbmV3IFNldChbXCJib2R5XCIsIFwiZnJhbWVzZXRcIl0pKTtcbiAgfVxuXG4gIHNldCBib2R5KHZhbHVlKSB7XG4gICAgaWYgKCFIVE1MRWxlbWVudC5pc0ltcGwodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEhUTUxFbGVtZW50XCIpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuX25hbWVzcGFjZVVSSSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIgfHxcbiAgICAgICAgKHZhbHVlLl9sb2NhbE5hbWUgIT09IFwiYm9keVwiICYmIHZhbHVlLl9sb2NhbE5hbWUgIT09IFwiZnJhbWVzZXRcIikpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLkhJRVJBUkNIWV9SRVFVRVNUX0VSUiwgXCJDYW5ub3Qgc2V0IHRoZSBib2R5IHRvIGEgbm9uLWJvZHkvZnJhbWVzZXQgZWxlbWVudFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5RWxlbWVudCA9IHRoaXMuYm9keTtcbiAgICBpZiAodmFsdWUgPT09IGJvZHlFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJvZHlFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBib2R5RWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh2YWx1ZSwgYm9keUVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IHRoaXMuZG9jdW1lbnRFbGVtZW50O1xuICAgIGlmIChkb2N1bWVudEVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLkhJRVJBUkNIWV9SRVFVRVNUX0VSUixcbiAgICAgICAgXCJDYW5ub3Qgc2V0IHRoZSBib2R5IHdoZW4gdGhlcmUgaXMgbm8gZG9jdW1lbnQgZWxlbWVudFwiKTtcbiAgICB9XG5cbiAgICBkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWUpO1xuICB9XG5cbiAgX3J1blJlbW92aW5nU3RlcHMob2xkTm9kZSwgb2xkUGFyZW50LCBvbGRQcmV2aW91c1NpYmxpbmcpIHtcbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBEb2N1bWVudEltcGwuX3JlbW92aW5nU3RlcHM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxpc3RlbmVyc1tpXSh0aGlzLCBvbGROb2RlLCBvbGRQYXJlbnQsIG9sZFByZXZpb3VzU2libGluZyk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlRXZlbnQodHlwZSkge1xuICAgIGNvbnN0IHR5cGVMb3dlciA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBldmVudFdyYXBwZXIgPSBldmVudEludGVyZmFjZVRhYmxlW3R5cGVMb3dlcl0gfHwgbnVsbDtcblxuICAgIGlmICghZXZlbnRXcmFwcGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixcbiAgICAgICAgXCJUaGUgcHJvdmlkZWQgZXZlbnQgdHlwZSAoXFxcIlwiICsgdHlwZSArIFwiXFxcIikgaXMgaW52YWxpZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBsID0gZXZlbnRXcmFwcGVyLmNyZWF0ZUltcGwoW1wiXCJdKTtcbiAgICBpbXBsLl9pbml0aWFsaXplZEZsYWcgPSBmYWxzZTtcbiAgICByZXR1cm4gaW1wbDtcbiAgfVxuXG4gIGNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXQsIGRhdGEpIHtcbiAgICB2YWxpZGF0ZU5hbWUodGFyZ2V0KTtcblxuICAgIGlmIChkYXRhLmluY2x1ZGVzKFwiPz5cIikpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfQ0hBUkFDVEVSX0VSUixcbiAgICAgICAgXCJQcm9jZXNzaW5nIGluc3RydWN0aW9uIGRhdGEgY2Fubm90IGNvbnRhaW4gdGhlIHN0cmluZyBcXFwiPz5cXFwiXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3JlYXRlSW1wbChbXSwge1xuICAgICAgY29yZTogdGhpcy5fY29yZSxcbiAgICAgIG93bmVyRG9jdW1lbnQ6IHRoaXMsXG4gICAgICB0YXJnZXQsXG4gICAgICBkYXRhXG4gICAgfSk7XG4gIH1cblxuICAvLyBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1kb2N1bWVudC1jcmVhdGVjZGF0YXNlY3Rpb25cbiAgY3JlYXRlQ0RBVEFTZWN0aW9uKGRhdGEpIHtcbiAgICBpZiAodGhpcy5fcGFyc2luZ01vZGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixcbiAgICAgICAgXCJDYW5ub3QgY3JlYXRlIENEQVRBIHNlY3Rpb25zIGluIEhUTUwgZG9jdW1lbnRzXCIpO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmluY2x1ZGVzKFwiXV0+XCIpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX0NIQVJBQ1RFUl9FUlIsXG4gICAgICAgIFwiQ0RBVEEgc2VjdGlvbiBkYXRhIGNhbm5vdCBjb250YWluIHRoZSBzdHJpbmcgXFxcIl1dPlxcXCJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIENEQVRBU2VjdGlvbi5jcmVhdGVJbXBsKFtdLCB7XG4gICAgICBjb3JlOiB0aGlzLl9jb3JlLFxuICAgICAgb3duZXJEb2N1bWVudDogdGhpcyxcbiAgICAgIGRhdGFcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZVRleHROb2RlKGRhdGEpIHtcbiAgICByZXR1cm4gVGV4dC5jcmVhdGVJbXBsKFtdLCB7XG4gICAgICBjb3JlOiB0aGlzLl9jb3JlLFxuICAgICAgb3duZXJEb2N1bWVudDogdGhpcyxcbiAgICAgIGRhdGFcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUNvbW1lbnQoZGF0YSkge1xuICAgIHJldHVybiBDb21tZW50LmNyZWF0ZUltcGwoW10sIHtcbiAgICAgIGNvcmU6IHRoaXMuX2NvcmUsXG4gICAgICBvd25lckRvY3VtZW50OiB0aGlzLFxuICAgICAgZGF0YVxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlRWxlbWVudChsb2NhbE5hbWUpIHtcbiAgICB2YWxpZGF0ZU5hbWUobG9jYWxOYW1lKTtcbiAgICBpZiAodGhpcy5fcGFyc2luZ01vZGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICBsb2NhbE5hbWUgPSBsb2NhbE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fY3JlYXRlRWxlbWVudFdpdGhDb3JyZWN0RWxlbWVudEludGVyZmFjZShsb2NhbE5hbWUsIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKTtcbiAgICBlbGVtZW50Ll9uYW1lc3BhY2VVUkkgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcbiAgICBlbGVtZW50Ll9sb2NhbE5hbWUgPSBsb2NhbE5hbWU7XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2UsIHF1YWxpZmllZE5hbWUpIHtcbiAgICBuYW1lc3BhY2UgPSBuYW1lc3BhY2UgIT09IG51bGwgPyBTdHJpbmcobmFtZXNwYWNlKSA6IG5hbWVzcGFjZTtcblxuICAgIGNvbnN0IGV4dHJhY3RlZCA9IHZhbGlkYXRlQW5kRXh0cmFjdChuYW1lc3BhY2UsIHF1YWxpZmllZE5hbWUpO1xuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2NyZWF0ZUVsZW1lbnRXaXRoQ29ycmVjdEVsZW1lbnRJbnRlcmZhY2UoZXh0cmFjdGVkLmxvY2FsTmFtZSwgZXh0cmFjdGVkLm5hbWVzcGFjZSk7XG4gICAgZWxlbWVudC5fbmFtZXNwYWNlVVJJID0gZXh0cmFjdGVkLm5hbWVzcGFjZTtcbiAgICBlbGVtZW50Ll9wcmVmaXggPSBleHRyYWN0ZWQucHJlZml4O1xuICAgIGVsZW1lbnQuX2xvY2FsTmFtZSA9IGV4dHJhY3RlZC5sb2NhbE5hbWU7XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSB7XG4gICAgcmV0dXJuIERvY3VtZW50RnJhZ21lbnQuY3JlYXRlSW1wbChbXSwgeyBvd25lckRvY3VtZW50OiB0aGlzIH0pO1xuICB9XG5cbiAgY3JlYXRlQXR0cmlidXRlKGxvY2FsTmFtZSkge1xuICAgIHZhbGlkYXRlTmFtZShsb2NhbE5hbWUpO1xuXG4gICAgaWYgKHRoaXMuX3BhcnNpbmdNb2RlID09PSBcImh0bWxcIikge1xuICAgICAgbG9jYWxOYW1lID0gbG9jYWxOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdlbmVyYXRlZEF0dHIuY3JlYXRlSW1wbChbXSwgeyBsb2NhbE5hbWUgfSk7XG4gIH1cblxuICBjcmVhdGVBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIG5hbWUpIHtcbiAgICBpZiAobmFtZXNwYWNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVzcGFjZSA9IG51bGw7XG4gICAgfVxuICAgIG5hbWVzcGFjZSA9IG5hbWVzcGFjZSAhPT0gbnVsbCA/IFN0cmluZyhuYW1lc3BhY2UpIDogbmFtZXNwYWNlO1xuXG4gICAgY29uc3QgZXh0cmFjdGVkID0gdmFsaWRhdGVBbmRFeHRyYWN0KG5hbWVzcGFjZSwgbmFtZSk7XG4gICAgcmV0dXJuIGdlbmVyYXRlZEF0dHIuY3JlYXRlSW1wbChbXSwge1xuICAgICAgbmFtZXNwYWNlOiBleHRyYWN0ZWQubmFtZXNwYWNlLFxuICAgICAgbmFtZXNwYWNlUHJlZml4OiBleHRyYWN0ZWQucHJlZml4LFxuICAgICAgbG9jYWxOYW1lOiBleHRyYWN0ZWQubG9jYWxOYW1lXG4gICAgfSk7XG4gIH1cblxuICAvLyBUT0RPOiBBZGQgY2FsbGJhY2sgaW50ZXJmYWNlIHN1cHBvcnQgdG8gYHdlYmlkbDJqc2BcbiAgY3JlYXRlVHJlZVdhbGtlcihyb290LCB3aGF0VG9TaG93LCBmaWx0ZXIpIHtcbiAgICBpZiAoIWlzTm9kZUltcGwocm9vdCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCB0byBjcmVhdGVUcmVlV2Fsa2VyIG11c3QgYmUgYSBOb2RlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBUcmVlV2Fsa2VyLmNyZWF0ZUltcGwoW10sIHtcbiAgICAgIHJvb3QsXG4gICAgICB3aGF0VG9TaG93LFxuICAgICAgZmlsdGVyXG4gICAgfSk7XG4gIH1cblxuICBpbXBvcnROb2RlKG5vZGUsIGRlZXApIHtcbiAgICBpZiAoIWlzTm9kZUltcGwobm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCB0byBpbXBvcnROb2RlIG11c3QgYmUgYSBOb2RlXCIpO1xuICAgIH1cbiAgICBkZWVwID0gQm9vbGVhbihkZWVwKTtcblxuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRE9DVU1FTlRfTk9ERSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsIFwiQ2Fubm90IGltcG9ydCBhIGRvY3VtZW50IG5vZGVcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lKHRoaXMuX2NvcmUsIG5vZGUsIHRoaXMsIGRlZXApO1xuICB9XG5cbiAgYWRvcHROb2RlKG5vZGUpIHtcbiAgICBpZiAoIWlzTm9kZUltcGwobm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCB0byBhZG9wdE5vZGUgbXVzdCBiZSBhIE5vZGVcIik7XG4gICAgfVxuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRE9DVU1FTlRfTk9ERSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsIFwiQ2Fubm90IGFkb3B0IGEgZG9jdW1lbnQgbm9kZVwiKTtcbiAgICB9XG4gICAgLy8gVE9ETzogRGV0ZXJtaW5lIGNvcnJlY3Qgd2F5IHRvIGRldGVjdCBhIHNoYWRvdyByb290XG4gICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9naXRodWIuY29tL3czYy93ZWJjb21wb25lbnRzL2lzc3Vlcy8xODJcblxuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gICAgbm9kZS5fb3duZXJEb2N1bWVudCA9IHRoaXM7XG4gICAgZm9yIChjb25zdCBkZXNjZW5kYW50IG9mIGRvbVN5bWJvbFRyZWUudHJlZUl0ZXJhdG9yKG5vZGUpKSB7XG4gICAgICBkZXNjZW5kYW50Ll9vd25lckRvY3VtZW50ID0gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIGdldCBjb29raWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvb2tpZUphci5nZXRDb29raWVTdHJpbmdTeW5jKHRoaXMuVVJMLCB7IGh0dHA6IGZhbHNlIH0pO1xuICB9XG4gIHNldCBjb29raWUoY29va2llU3RyKSB7XG4gICAgY29va2llU3RyID0gU3RyaW5nKGNvb2tpZVN0cik7XG4gICAgdGhpcy5fY29va2llSmFyLnNldENvb2tpZVN5bmMoY29va2llU3RyLCB0aGlzLlVSTCwge1xuICAgICAgaHR0cDogZmFsc2UsXG4gICAgICBpZ25vcmVFcnJvcjogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHN0eWxlU2hlZXRzKCkge1xuICAgIGlmICghdGhpcy5fc3R5bGVTaGVldHMpIHtcbiAgICAgIHRoaXMuX3N0eWxlU2hlZXRzID0gbmV3IHRoaXMuX2NvcmUuU3R5bGVTaGVldExpc3QoKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBlYWNoIHN0eWxlIGFuZCBsaW5rIGVsZW1lbnQgc2hvdWxkIHJlZ2lzdGVyIGl0cyBzaGVldCBvbiBjcmVhdGlvblxuICAgIC8vIGFuZCByZW1vdmUgaXQgb24gcmVtb3ZhbC5cbiAgICByZXR1cm4gdGhpcy5fc3R5bGVTaGVldHM7XG4gIH1cblxuICBnZXQgaGlkZGVuKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0IHZpc2liaWxpdHlTdGF0ZSgpIHtcbiAgICByZXR1cm4gXCJwcmVyZW5kZXJcIjtcbiAgfVxufVxuXG5pZGxVdGlscy5taXhpbihEb2N1bWVudEltcGwucHJvdG90eXBlLCBQYXJlbnROb2RlSW1wbC5wcm90b3R5cGUpO1xuXG5Eb2N1bWVudEltcGwuX3JlbW92aW5nU3RlcHMgPSBbXTtcblxuRG9jdW1lbnRJbXBsLnByb3RvdHlwZS5fZWxlbWVudEJ1aWxkZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuRG9jdW1lbnRJbXBsLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IG1lbW9pemVRdWVyeShmdW5jdGlvbiAocXVhbGlmaWVkTmFtZSkge1xuICByZXR1cm4gbGlzdE9mRWxlbWVudHNXaXRoUXVhbGlmaWVkTmFtZShxdWFsaWZpZWROYW1lLCB0aGlzKTtcbn0pO1xuXG5Eb2N1bWVudEltcGwucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMgPSBtZW1vaXplUXVlcnkoZnVuY3Rpb24gKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gIHJldHVybiBsaXN0T2ZFbGVtZW50c1dpdGhOYW1lc3BhY2VBbmRMb2NhbE5hbWUobmFtZXNwYWNlLCBsb2NhbE5hbWUsIHRoaXMpO1xufSk7XG5cbkRvY3VtZW50SW1wbC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IG1lbW9pemVRdWVyeShmdW5jdGlvbiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZXMpIHtcbiAgcmV0dXJuIGxpc3RPZkVsZW1lbnRzV2l0aENsYXNzTmFtZXMoY2xhc3NOYW1lcywgdGhpcyk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBEb2N1bWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgTm9kZUltcGwgPSByZXF1aXJlKFwiLi9Ob2RlLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBQYXJlbnROb2RlSW1wbCA9IHJlcXVpcmUoXCIuL1BhcmVudE5vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcblxuY2xhc3MgRG9jdW1lbnRGcmFnbWVudEltcGwgZXh0ZW5kcyBOb2RlSW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoYXJncywgcHJpdmF0ZURhdGEpO1xuXG4gICAgdGhpcy5ub2RlVHlwZSA9IE5PREVfVFlQRS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFO1xuICB9XG59XG5cbmlkbFV0aWxzLm1peGluKERvY3VtZW50RnJhZ21lbnRJbXBsLnByb3RvdHlwZSwgUGFyZW50Tm9kZUltcGwucHJvdG90eXBlKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBEb2N1bWVudEZyYWdtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5cbmNvbnN0IE5vZGVJbXBsID0gcmVxdWlyZShcIi4vTm9kZS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgQ2hpbGROb2RlSW1wbCA9IHJlcXVpcmUoXCIuL0NoaWxkTm9kZS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlXCIpO1xuXG5jbGFzcyBEb2N1bWVudFR5cGVJbXBsIGV4dGVuZHMgTm9kZUltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMubm9kZVR5cGUgPSBOT0RFX1RZUEUuRE9DVU1FTlRfVFlQRV9OT0RFO1xuXG4gICAgdGhpcy5uYW1lID0gcHJpdmF0ZURhdGEubmFtZTtcbiAgICB0aGlzLnB1YmxpY0lkID0gcHJpdmF0ZURhdGEucHVibGljSWQ7XG4gICAgdGhpcy5zeXN0ZW1JZCA9IHByaXZhdGVEYXRhLnN5c3RlbUlkO1xuICB9XG59XG5cbmlkbFV0aWxzLm1peGluKERvY3VtZW50VHlwZUltcGwucHJvdG90eXBlLCBDaGlsZE5vZGVJbXBsLnByb3RvdHlwZSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogRG9jdW1lbnRUeXBlSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3Qgdm0gPSByZXF1aXJlKFwidm1cIik7XG5jb25zdCBud21hdGNoZXIgPSByZXF1aXJlKFwibndtYXRjaGVyL3NyYy9ud21hdGNoZXItbm9xc2FcIik7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBOb2RlSW1wbCA9IHJlcXVpcmUoXCIuL05vZGUtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IFBhcmVudE5vZGVJbXBsID0gcmVxdWlyZShcIi4vUGFyZW50Tm9kZS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgQ2hpbGROb2RlSW1wbCA9IHJlcXVpcmUoXCIuL0NoaWxkTm9kZS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgYXR0cmlidXRlcyA9IHJlcXVpcmUoXCIuLi9hdHRyaWJ1dGVzXCIpO1xuY29uc3QgbmFtZWRQcm9wZXJ0aWVzV2luZG93ID0gcmVxdWlyZShcIi4uL25hbWVkLXByb3BlcnRpZXMtd2luZG93XCIpO1xuY29uc3QgTk9ERV9UWVBFID0gcmVxdWlyZShcIi4uL25vZGUtdHlwZVwiKTtcbmNvbnN0IGRvbVRvSHRtbCA9IHJlcXVpcmUoXCIuLi8uLi9icm93c2VyL2RvbXRvaHRtbFwiKS5kb21Ub0h0bWw7XG5jb25zdCBtZW1vaXplUXVlcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikubWVtb2l6ZVF1ZXJ5O1xuY29uc3QgY2xvbmUgPSByZXF1aXJlKFwiLi4vbm9kZVwiKS5jbG9uZTtcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcbmNvbnN0IHJlc2V0RE9NVG9rZW5MaXN0ID0gcmVxdWlyZShcIi4uL2RvbS10b2tlbi1saXN0XCIpLnJlc2V0O1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgY3JlYXRlRE9NVG9rZW5MaXN0ID0gcmVxdWlyZShcIi4uL2RvbS10b2tlbi1saXN0XCIpLmNyZWF0ZTtcbmNvbnN0IGF0dHJHZW5lcmF0ZWQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0F0dHJcIik7XG5jb25zdCB2YWxpZGF0ZU5hbWVzID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdmFsaWRhdGUtbmFtZXNcIik7XG5jb25zdCBsaXN0T2ZFbGVtZW50c1dpdGhRdWFsaWZpZWROYW1lID0gcmVxdWlyZShcIi4uL25vZGVcIikubGlzdE9mRWxlbWVudHNXaXRoUXVhbGlmaWVkTmFtZTtcbmNvbnN0IGxpc3RPZkVsZW1lbnRzV2l0aE5hbWVzcGFjZUFuZExvY2FsTmFtZSA9IHJlcXVpcmUoXCIuLi9ub2RlXCIpLmxpc3RPZkVsZW1lbnRzV2l0aE5hbWVzcGFjZUFuZExvY2FsTmFtZTtcbmNvbnN0IGxpc3RPZkVsZW1lbnRzV2l0aENsYXNzTmFtZXMgPSByZXF1aXJlKFwiLi4vbm9kZVwiKS5saXN0T2ZFbGVtZW50c1dpdGhDbGFzc05hbWVzO1xuY29uc3QgcHJveGllZFdpbmRvd0V2ZW50SGFuZGxlcnMgPSByZXF1aXJlKFwiLi4vaGVscGVycy9wcm94aWVkLXdpbmRvdy1ldmVudC1oYW5kbGVyc1wiKTtcbmNvbnN0IE5vbkRvY3VtZW50VHlwZUNoaWxkTm9kZSA9IHJlcXVpcmUoXCIuL05vbkRvY3VtZW50VHlwZUNoaWxkTm9kZS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG4vLyBud21hdGNoZXIgZ2V0cyBgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50YCBhdCBjcmVhdGlvbi10aW1lLCBzbyB3ZSBoYXZlIHRvIGluaXRpYWxpemUgbGF6aWx5LCBzaW5jZSBpbiB0aGUgaW5pdGlhbFxuLy8gc3RhZ2VzIG9mIERvY3VtZW50IGluaXRpYWxpemF0aW9uLCB0aGVyZSBpcyBubyBkb2N1bWVudEVsZW1lbnQgcHJlc2VudCB5ZXQuXG5mdW5jdGlvbiBhZGROd21hdGNoZXIocGFyZW50Tm9kZSkge1xuICBjb25zdCBkb2N1bWVudCA9IHBhcmVudE5vZGUuX293bmVyRG9jdW1lbnQ7XG5cbiAgaWYgKCFkb2N1bWVudC5fbndtYXRjaGVyKSB7XG4gICAgZG9jdW1lbnQuX253bWF0Y2hlciA9IG53bWF0Y2hlcih7IGRvY3VtZW50IH0pO1xuICAgIGRvY3VtZW50Ll9ud21hdGNoZXIuY29uZmlndXJlKHsgVU5JUVVFX0lEOiBmYWxzZSB9KTtcbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudC5fbndtYXRjaGVyO1xufVxuXG5mdW5jdGlvbiBjbGVhckNoaWxkTm9kZXMobm9kZSkge1xuICBmb3IgKGxldCBjaGlsZCA9IGRvbVN5bWJvbFRyZWUuZmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNoaWxkID0gZG9tU3ltYm9sVHJlZS5maXJzdENoaWxkKG5vZGUpKSB7XG4gICAgbm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0SW5uZXJIVE1MKGRvY3VtZW50LCBub2RlLCBodG1sKSB7XG4gIC8vIENsZWFyIHRoZSBjaGlsZHJlbiBmaXJzdDpcbiAgaWYgKG5vZGUuX3RlbXBsYXRlQ29udGVudHMpIHtcbiAgICBjbGVhckNoaWxkTm9kZXMobm9kZS5fdGVtcGxhdGVDb250ZW50cyk7XG4gIH0gZWxzZSB7XG4gICAgY2xlYXJDaGlsZE5vZGVzKG5vZGUpO1xuICB9XG5cbiAgaWYgKG5vZGUubm9kZU5hbWUgPT09IFwiI2RvY3VtZW50XCIpIHtcbiAgICBkb2N1bWVudC5faHRtbFRvRG9tLmFwcGVuZEh0bWxUb0RvY3VtZW50KGh0bWwsIG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50Ll9odG1sVG9Eb20uYXBwZW5kSHRtbFRvRWxlbWVudChodG1sLCBub2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRhY2hJZChpZCwgZWxtLCBkb2MpIHtcbiAgaWYgKGlkICYmIGVsbSAmJiBkb2MpIHtcbiAgICBpZiAoIWRvYy5faWRzW2lkXSkge1xuICAgICAgZG9jLl9pZHNbaWRdID0gW107XG4gICAgfVxuICAgIGRvYy5faWRzW2lkXS5wdXNoKGVsbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoSWQoaWQsIGVsbSwgZG9jKSB7XG4gIGlmIChpZCAmJiBlbG0gJiYgZG9jKSB7XG4gICAgaWYgKGRvYy5faWRzICYmIGRvYy5faWRzW2lkXSkge1xuICAgICAgY29uc3QgZWxtcyA9IGRvYy5faWRzW2lkXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZWxtc1tpXSA9PT0gZWxtKSB7XG4gICAgICAgICAgZWxtcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgLS1pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZWxtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIGRvYy5faWRzW2lkXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgRWxlbWVudEltcGwgZXh0ZW5kcyBOb2RlSW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoYXJncywgcHJpdmF0ZURhdGEpO1xuXG4gICAgdGhpcy5ub2RlVHlwZSA9IE5PREVfVFlQRS5FTEVNRU5UX05PREU7XG4gICAgdGhpcy5zY3JvbGxUb3AgPSAwO1xuICAgIHRoaXMuc2Nyb2xsTGVmdCA9IDA7XG5cbiAgICB0aGlzLl9uYW1lc3BhY2VVUkkgPSBudWxsO1xuICAgIHRoaXMuX3ByZWZpeCA9IG51bGw7XG4gICAgdGhpcy5fbG9jYWxOYW1lID0gcHJpdmF0ZURhdGEubG9jYWxOYW1lO1xuICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmNyZWF0ZU5hbWVkTm9kZU1hcCh0aGlzKTtcbiAgfVxuXG4gIF9hdHRhY2goKSB7XG4gICAgbmFtZWRQcm9wZXJ0aWVzV2luZG93Lm5vZGVBdHRhY2hlZFRvRG9jdW1lbnQodGhpcyk7XG5cbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG4gICAgaWYgKGlkKSB7XG4gICAgICBhdHRhY2hJZChpZCwgdGhpcywgdGhpcy5fb3duZXJEb2N1bWVudCk7XG4gICAgfVxuXG4gICAgc3VwZXIuX2F0dGFjaCgpO1xuICB9XG5cbiAgX2RldGFjaCgpIHtcbiAgICBzdXBlci5fZGV0YWNoKCk7XG5cbiAgICBuYW1lZFByb3BlcnRpZXNXaW5kb3cubm9kZURldGFjaGVkRnJvbURvY3VtZW50KHRoaXMpO1xuXG4gICAgY29uc3QgaWQgPSB0aGlzLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICAgIGlmIChpZCkge1xuICAgICAgZGV0YWNoSWQoaWQsIHRoaXMsIHRoaXMuX293bmVyRG9jdW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIF9hdHRyTW9kaWZpZWQobmFtZSwgdmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgdGhpcy5fbW9kaWZpZWQoKTtcbiAgICBuYW1lZFByb3BlcnRpZXNXaW5kb3cuZWxlbWVudEF0dHJpYnV0ZU1vZGlmaWVkKHRoaXMsIG5hbWUsIHZhbHVlLCBvbGRWYWx1ZSk7XG5cbiAgICBpZiAobmFtZSA9PT0gXCJpZFwiICYmIHRoaXMuX2F0dGFjaGVkKSB7XG4gICAgICBjb25zdCBkb2MgPSB0aGlzLl9vd25lckRvY3VtZW50O1xuICAgICAgZGV0YWNoSWQob2xkVmFsdWUsIHRoaXMsIGRvYyk7XG4gICAgICBhdHRhY2hJZCh2YWx1ZSwgdGhpcywgZG9jKTtcbiAgICB9XG5cbiAgICBjb25zdCB3ID0gdGhpcy5fb3duZXJEb2N1bWVudC5fZ2xvYmFsO1xuXG4gICAgLy8gVE9ETyBldmVudCBoYW5kbGVyczpcbiAgICAvLyBUaGUgY29ycmVjdCB3YXkgdG8gZG8gdGhpcyBpcyBsYXp5LCBhbmQgYSBiaXQgbW9yZSBjb21wbGljYXRlZDsgc2VlXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2V2ZW50LWhhbmRsZXItY29udGVudC1hdHRyaWJ1dGVzXG4gICAgLy8gSXQgd291bGQgb25seSBiZSBwb3NzaWJsZSBpZiB3ZSBoYWQgcHJvcGVyIGdldHRlcnMvc2V0dGVycyBmb3IgZXZlcnkgZXZlbnQgaGFuZGxlciwgd2hpY2ggd2UgZG9uJ3QgcmlnaHQgbm93LlxuICAgIGlmIChuYW1lLmxlbmd0aCA+IDIgJiYgbmFtZVswXSA9PT0gXCJvXCIgJiYgbmFtZVsxXSA9PT0gXCJuXCIpIHtcbiAgICAgIC8vIElmIHRoaXMgZG9jdW1lbnQgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdywgc2V0IElETCBhdHRyaWJ1dGUgdG8gbnVsbFxuICAgICAgLy8gc3RlcCAyOiBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjZ2V0dGluZy10aGUtY3VycmVudC12YWx1ZS1vZi10aGUtZXZlbnQtaGFuZGxlclxuICAgICAgaWYgKHZhbHVlICYmIHcpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHByb3hpZWRXaW5kb3dFdmVudEhhbmRsZXJzLmhhcyhuYW1lKSAmJiB0aGlzLl9sb2NhbE5hbWUgPT09IFwiYm9keVwiID8gdyA6IHRoaXM7XG4gICAgICAgIGNvbnN0IHZtT3B0aW9ucyA9IHsgZmlsZW5hbWU6IHRoaXMuX293bmVyRG9jdW1lbnQuVVJMLCBkaXNwbGF5RXJyb3JzOiBmYWxzZSB9O1xuXG4gICAgICAgIC8vIFRoZSBoYW5kbGVyIGNvZGUgcHJvYmFibHkgcmVmZXJzIHRvIGZ1bmN0aW9ucyBkZWNsYXJlZCBnbG9iYWxseSBvbiB0aGUgd2luZG93LCBzbyB3ZSBuZWVkIHRvIHJ1biBpdCBpblxuICAgICAgICAvLyB0aGF0IGNvbnRleHQuIEluIGZhY3QsIGl0J3Mgd29yc2U7IHNlZVxuICAgICAgICAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2NvZGVzZWFyY2gjY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9Tb3VyY2UvYmluZGluZ3MvY29yZS92OC9WOExhenlFdmVudExpc3RlbmVyLmNwcFxuICAgICAgICAvLyBwbHVzIHRoZSBzcGVjLCB3aGljaCBzaG93IGhvdyBtdWx0aXBsZSBuZXN0ZWQgc2NvcGVzIGFyZSB0ZWNobmljYWxseSByZXF1aXJlZC4gV2Ugd29uJ3QgaW1wbGVtZW50IHRoYXRcbiAgICAgICAgLy8gdW50aWwgc29tZW9uZSBhc2tzIGZvciBpdCwgdGhvdWdoLlxuXG4gICAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtZXZlbnQtaGFuZGxlci1wcm9jZXNzaW5nLWFsZ29yaXRobVxuXG4gICAgICAgIGlmIChuYW1lID09PSBcIm9uZXJyb3JcIiAmJiBzZWxmID09PSB3KSB7XG4gICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2dldHRpbmctdGhlLWN1cnJlbnQtdmFsdWUtb2YtdGhlLWV2ZW50LWhhbmRsZXJcbiAgICAgICAgICAvLyBzdGVwIDEwXG5cbiAgICAgICAgICBzZWxmW25hbWVdID0gZnVuY3Rpb24gKGV2ZW50LCBzb3VyY2UsIGxpbmVubywgY29sbm8sIGVycm9yKSB7XG4gICAgICAgICAgICB3Ll9fdGVtcEV2ZW50SGFuZGxlclRoaXMgPSB0aGlzO1xuICAgICAgICAgICAgdy5fX3RlbXBFdmVudEhhbmRsZXJFdmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgdy5fX3RlbXBFdmVudEhhbmRsZXJTb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgICAgICB3Ll9fdGVtcEV2ZW50SGFuZGxlckxpbmVubyA9IGxpbmVubztcbiAgICAgICAgICAgIHcuX190ZW1wRXZlbnRIYW5kbGVyQ29sbm8gPSBjb2xubztcbiAgICAgICAgICAgIHcuX190ZW1wRXZlbnRIYW5kbGVyRXJyb3IgPSBlcnJvcjtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZtLnJ1bkluQ29udGV4dChgXG4gICAgICAgICAgICAgICAgKGZ1bmN0aW9uIChldmVudCwgc291cmNlLCBsaW5lbm8sIGNvbG5vLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgJHt2YWx1ZX1cbiAgICAgICAgICAgICAgICB9KS5jYWxsKF9fdGVtcEV2ZW50SGFuZGxlclRoaXMsIF9fdGVtcEV2ZW50SGFuZGxlckV2ZW50LCBfX3RlbXBFdmVudEhhbmRsZXJTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3RlbXBFdmVudEhhbmRsZXJMaW5lbm8sIF9fdGVtcEV2ZW50SGFuZGxlckNvbG5vLCBfX3RlbXBFdmVudEhhbmRsZXJFcnJvcilgLCB3LCB2bU9wdGlvbnMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgZGVsZXRlIHcuX190ZW1wRXZlbnRIYW5kbGVyVGhpcztcbiAgICAgICAgICAgICAgZGVsZXRlIHcuX190ZW1wRXZlbnRIYW5kbGVyRXZlbnQ7XG4gICAgICAgICAgICAgIGRlbGV0ZSB3Ll9fdGVtcEV2ZW50SGFuZGxlclNvdXJjZTtcbiAgICAgICAgICAgICAgZGVsZXRlIHcuX190ZW1wRXZlbnRIYW5kbGVyTGluZW5vO1xuICAgICAgICAgICAgICBkZWxldGUgdy5fX3RlbXBFdmVudEhhbmRsZXJDb2xubztcbiAgICAgICAgICAgICAgZGVsZXRlIHcuX190ZW1wRXZlbnRIYW5kbGVyRXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmW25hbWVdID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB3Ll9fdGVtcEV2ZW50SGFuZGxlclRoaXMgPSB0aGlzO1xuICAgICAgICAgICAgdy5fX3RlbXBFdmVudEhhbmRsZXJFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gdm0ucnVuSW5Db250ZXh0KGBcbiAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAke3ZhbHVlfVxuICAgICAgICAgICAgICAgIH0pLmNhbGwoX190ZW1wRXZlbnRIYW5kbGVyVGhpcywgX190ZW1wRXZlbnRIYW5kbGVyRXZlbnQpYCwgdywgdm1PcHRpb25zKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB3Ll9fdGVtcEV2ZW50SGFuZGxlclRoaXM7XG4gICAgICAgICAgICAgIGRlbGV0ZSB3Ll9fdGVtcEV2ZW50SGFuZGxlckV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVwZGF0ZSBjbGFzc0xpc3RcbiAgICBpZiAobmFtZSA9PT0gXCJjbGFzc1wiKSB7XG4gICAgICByZXNldERPTVRva2VuTGlzdCh0aGlzLmNsYXNzTGlzdCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBuYW1lc3BhY2VVUkkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWVzcGFjZVVSSTtcbiAgfVxuICBnZXQgcHJlZml4KCkge1xuICAgIHJldHVybiB0aGlzLl9wcmVmaXg7XG4gIH1cbiAgZ2V0IGxvY2FsTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxOYW1lO1xuICB9XG4gIGdldCBfcXVhbGlmaWVkTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4ICE9PSBudWxsID8gdGhpcy5fcHJlZml4ICsgXCI6XCIgKyB0aGlzLl9sb2NhbE5hbWUgOiB0aGlzLl9sb2NhbE5hbWU7XG4gIH1cbiAgZ2V0IHRhZ05hbWUoKSB7XG4gICAgbGV0IHF1YWxpZmllZE5hbWUgPSB0aGlzLl9xdWFsaWZpZWROYW1lO1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZVVSSSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIgJiYgdGhpcy5fb3duZXJEb2N1bWVudC5fcGFyc2luZ01vZGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICBxdWFsaWZpZWROYW1lID0gcXVhbGlmaWVkTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gcXVhbGlmaWVkTmFtZTtcbiAgfVxuXG4gIGdldCBhdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiB0aGlzLl9hdHRyaWJ1dGVzO1xuICB9XG5cbiAgZ2V0IG91dGVySFRNTCgpIHtcbiAgICByZXR1cm4gZG9tVG9IdG1sKFt0aGlzXSk7XG4gIH1cblxuICBzZXQgb3V0ZXJIVE1MKGh0bWwpIHtcbiAgICBpZiAoaHRtbCA9PT0gbnVsbCkge1xuICAgICAgaHRtbCA9IFwiXCI7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gZG9tU3ltYm9sVHJlZS5wYXJlbnQodGhpcyk7XG4gICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLl9vd25lckRvY3VtZW50O1xuXG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29udGV4dEVsZW1lbnQ7XG4gICAgaWYgKHBhcmVudC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkRPQ1VNRU5UX05PREUpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIk1vZGlmaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIGRvY3VtZW50XCIpO1xuICAgIH0gZWxzZSBpZiAocGFyZW50Lm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkge1xuICAgICAgY29udGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsIFwiYm9keVwiKTtcbiAgICB9IGVsc2UgaWYgKHBhcmVudC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGV4dEVsZW1lbnQgPSBjbG9uZSh0aGlzLl9jb3JlLCBwYXJlbnQsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXCIpO1xuICAgIH1cblxuICAgIGRvY3VtZW50Ll9odG1sVG9Eb20uYXBwZW5kSHRtbFRvRWxlbWVudChodG1sLCBjb250ZXh0RWxlbWVudCk7XG5cbiAgICB3aGlsZSAoY29udGV4dEVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShjb250ZXh0RWxlbWVudC5maXJzdENoaWxkLCB0aGlzKTtcbiAgICB9XG5cbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG4gIH1cblxuICBnZXQgaW5uZXJIVE1MKCkge1xuICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzLnRhZ05hbWU7XG4gICAgaWYgKHRhZ05hbWUgPT09IFwiU0NSSVBUXCIgfHwgdGFnTmFtZSA9PT0gXCJTVFlMRVwiKSB7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgICAgaWYgKCF0eXBlIHx8IC9edGV4dFxcLy9pLnRlc3QodHlwZSkgfHwgL1xcL2phdmFzY3JpcHQkL2kudGVzdCh0eXBlKSkge1xuICAgICAgICByZXR1cm4gZG9tVG9IdG1sKGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcih0aGlzKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSBvZiA8dGVtcGxhdGU+IHdlIHNob3VsZCBwYXNzIGl0cyBcInRlbXBsYXRlIGNvbnRlbnRzXCIgZnJhZ21lbnQgYXMgYSBzZXJpYWxpemF0aW9uIHJvb3QgaWYgd2UgaGF2ZSBvbmVcbiAgICBpZiAodGhpcy5fdGVtcGxhdGVDb250ZW50cykge1xuICAgICAgcmV0dXJuIGRvbVRvSHRtbChkb21TeW1ib2xUcmVlLmNoaWxkcmVuSXRlcmF0b3IodGhpcy5fdGVtcGxhdGVDb250ZW50cykpO1xuICAgIH1cblxuICAgIHJldHVybiBkb21Ub0h0bWwoZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHRoaXMpKTtcbiAgfVxuXG4gIHNldCBpbm5lckhUTUwoaHRtbCkge1xuICAgIGlmIChodG1sID09PSBudWxsKSB7XG4gICAgICBodG1sID0gXCJcIjtcbiAgICB9XG5cbiAgICBzZXRJbm5lckhUTUwodGhpcy5vd25lckRvY3VtZW50LCB0aGlzLCBodG1sKTtcbiAgfVxuXG4gIGdldCBjbGFzc0xpc3QoKSB7XG4gICAgaWYgKHRoaXMuX2NsYXNzTGlzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jbGFzc0xpc3QgPSBjcmVhdGVET01Ub2tlbkxpc3QodGhpcywgXCJjbGFzc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsYXNzTGlzdDtcbiAgfVxuXG4gIGhhc0F0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXMuaGFzQXR0cmlidXRlcyh0aGlzKTtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZU5hbWVzKCkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzLmF0dHJpYnV0ZU5hbWVzKHRoaXMpO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlKG5hbWUpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlcy5nZXRBdHRyaWJ1dGVWYWx1ZSh0aGlzLCBuYW1lKTtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXMuZ2V0QXR0cmlidXRlVmFsdWVCeU5hbWVOUyh0aGlzLCBuYW1lc3BhY2UsIGxvY2FsTmFtZSk7XG4gIH1cblxuICBzZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHtcbiAgICB2YWxpZGF0ZU5hbWVzLm5hbWUobmFtZSk7XG5cbiAgICBpZiAodGhpcy5fbmFtZXNwYWNlVVJJID09PSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiAmJiB0aGlzLl9vd25lckRvY3VtZW50Ll9wYXJzaW5nTW9kZSA9PT0gXCJodG1sXCIpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlcy5nZXRBdHRyaWJ1dGVCeU5hbWUodGhpcywgbmFtZSk7XG5cbiAgICBpZiAoYXR0cmlidXRlID09PSBudWxsKSB7XG4gICAgICBjb25zdCBuZXdBdHRyID0gYXR0ckdlbmVyYXRlZC5jcmVhdGVJbXBsKFtdLCB7IGxvY2FsTmFtZTogbmFtZSwgdmFsdWUgfSk7XG4gICAgICBhdHRyaWJ1dGVzLmFwcGVuZEF0dHJpYnV0ZSh0aGlzLCBuZXdBdHRyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhdHRyaWJ1dGVzLmNoYW5nZUF0dHJpYnV0ZSh0aGlzLCBhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgfVxuXG4gIHNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpIHtcbiAgICBjb25zdCBleHRyYWN0ZWQgPSB2YWxpZGF0ZU5hbWVzLnZhbGlkYXRlQW5kRXh0cmFjdChuYW1lc3BhY2UsIG5hbWUpO1xuXG4gICAgYXR0cmlidXRlcy5zZXRBdHRyaWJ1dGVWYWx1ZSh0aGlzLCBleHRyYWN0ZWQubG9jYWxOYW1lLCB2YWx1ZSwgZXh0cmFjdGVkLnByZWZpeCwgZXh0cmFjdGVkLm5hbWVzcGFjZSk7XG4gIH1cblxuICByZW1vdmVBdHRyaWJ1dGUobmFtZSkge1xuICAgIGF0dHJpYnV0ZXMucmVtb3ZlQXR0cmlidXRlQnlOYW1lKHRoaXMsIG5hbWUpO1xuICB9XG5cbiAgcmVtb3ZlQXR0cmlidXRlTlMobmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgICBhdHRyaWJ1dGVzLnJlbW92ZUF0dHJpYnV0ZUJ5TmFtZU5TKHRoaXMsIG5hbWVzcGFjZSwgbG9jYWxOYW1lKTtcbiAgfVxuXG4gIGhhc0F0dHJpYnV0ZShuYW1lKSB7XG4gICAgaWYgKHRoaXMuX25hbWVzcGFjZVVSSSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIgJiYgdGhpcy5fb3duZXJEb2N1bWVudC5fcGFyc2luZ01vZGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhdHRyaWJ1dGVzLmhhc0F0dHJpYnV0ZUJ5TmFtZSh0aGlzLCBuYW1lKTtcbiAgfVxuXG4gIGhhc0F0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbG9jYWxOYW1lKSB7XG4gICAgaWYgKG5hbWVzcGFjZSA9PT0gXCJcIikge1xuICAgICAgbmFtZXNwYWNlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlcy5oYXNBdHRyaWJ1dGVCeU5hbWVOUyh0aGlzLCBuYW1lc3BhY2UsIGxvY2FsTmFtZSk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVOb2RlKG5hbWUpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlcy5nZXRBdHRyaWJ1dGVCeU5hbWUodGhpcywgbmFtZSk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVOb2RlTlMobmFtZXNwYWNlLCBsb2NhbE5hbWUpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlcy5nZXRBdHRyaWJ1dGVCeU5hbWVOUyh0aGlzLCBuYW1lc3BhY2UsIGxvY2FsTmFtZSk7XG4gIH1cblxuICBzZXRBdHRyaWJ1dGVOb2RlKGF0dHIpIHtcbiAgICBpZiAoIWF0dHJHZW5lcmF0ZWQuaXNJbXBsKGF0dHIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgdG8gRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTm9kZSBtdXN0IGJlIGFuIEF0dHJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXMuc2V0QXR0cmlidXRlKHRoaXMsIGF0dHIpO1xuICB9XG5cbiAgc2V0QXR0cmlidXRlTm9kZU5TKGF0dHIpIHtcbiAgICBpZiAoIWF0dHJHZW5lcmF0ZWQuaXNJbXBsKGF0dHIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgdG8gRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTm9kZU5TIG11c3QgYmUgYW4gQXR0clwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlcy5zZXRBdHRyaWJ1dGUodGhpcywgYXR0cik7XG4gIH1cblxuICByZW1vdmVBdHRyaWJ1dGVOb2RlKGF0dHIpIHtcbiAgICBpZiAoIWF0dHJHZW5lcmF0ZWQuaXNJbXBsKGF0dHIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgdG8gRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTm9kZSBtdXN0IGJlIGFuIEF0dHJcIik7XG4gICAgfVxuXG4gICAgaWYgKCFhdHRyaWJ1dGVzLmhhc0F0dHJpYnV0ZSh0aGlzLCBhdHRyKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX0ZPVU5EX0VSUiwgXCJUcmllZCB0byByZW1vdmUgYW4gYXR0cmlidXRlIHRoYXQgd2FzIG5vdCBwcmVzZW50XCIpO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMucmVtb3ZlQXR0cmlidXRlKHRoaXMsIGF0dHIpO1xuXG4gICAgcmV0dXJuIGF0dHI7XG4gIH1cblxuICBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRvcDogMCxcbiAgICAgIHdpZHRoOiAwXG4gICAgfTtcbiAgfVxuXG4gIGdldENsaWVudFJlY3RzKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldCBzY3JvbGxXaWR0aCgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldCBzY3JvbGxIZWlnaHQoKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBnZXQgY2xpZW50VG9wKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IGNsaWVudExlZnQoKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBnZXQgY2xpZW50V2lkdGgoKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBnZXQgY2xpZW50SGVpZ2h0KCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyNkb20tZWxlbWVudC1pbnNlcnRhZGphY2VudGh0bWxcbiAgaW5zZXJ0QWRqYWNlbnRIVE1MKHBvc2l0aW9uLCB0ZXh0KSB7XG4gICAgcG9zaXRpb24gPSBwb3NpdGlvbi50b0xvd2VyQ2FzZSgpO1xuXG4gICAgbGV0IGNvbnRleHQ7XG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgY2FzZSBcImJlZm9yZWJlZ2luXCI6XG4gICAgICBjYXNlIFwiYWZ0ZXJlbmRcIjoge1xuICAgICAgICBjb250ZXh0ID0gdGhpcy5wYXJlbnROb2RlO1xuICAgICAgICBpZiAoY29udGV4dCA9PT0gbnVsbCB8fCBjb250ZXh0Lm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRE9DVU1FTlRfTk9ERSkge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLk5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiwgXCJDYW5ub3QgaW5zZXJ0IEhUTUwgYWRqYWNlbnQgdG8gXCIgK1xuICAgICAgICAgICAgXCJwYXJlbnQtbGVzcyBub2RlcyBvciBjaGlsZHJlbiBvZiBkb2N1bWVudCBub2Rlcy5cIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYWZ0ZXJiZWdpblwiOlxuICAgICAgY2FzZSBcImJlZm9yZWVuZFwiOiB7XG4gICAgICAgIGNvbnRleHQgPSB0aGlzO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uU1lOVEFYX0VSUiwgXCJNdXN0IHByb3ZpZGUgb25lIG9mIFxcXCJiZWZvcmViZWdpblxcXCIsIFxcXCJhZnRlcmVuZFxcXCIsIFwiICtcbiAgICAgICAgICBcIlxcXCJhZnRlcmJlZ2luXFxcIiwgb3IgXFxcImJlZm9yZWVuZFxcXCIuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IHVzZSBjb250ZXh0IGZvciBwYXJzaW5nIGluc3RlYWQgb2YgYSA8dGVtcGxhdGU+LlxuICAgIGNvbnN0IGZyYWdtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICBmcmFnbWVudC5pbm5lckhUTUwgPSB0ZXh0O1xuXG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgY2FzZSBcImJlZm9yZWJlZ2luXCI6IHtcbiAgICAgICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShmcmFnbWVudC5jb250ZW50LCB0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYWZ0ZXJiZWdpblwiOiB7XG4gICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKGZyYWdtZW50LmNvbnRlbnQsIHRoaXMuZmlyc3RDaGlsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImJlZm9yZWVuZFwiOiB7XG4gICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoZnJhZ21lbnQuY29udGVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcImFmdGVyZW5kXCI6IHtcbiAgICAgICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShmcmFnbWVudC5jb250ZW50LCB0aGlzLm5leHRTaWJsaW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmlkbFV0aWxzLm1peGluKEVsZW1lbnRJbXBsLnByb3RvdHlwZSwgTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlLnByb3RvdHlwZSk7XG5pZGxVdGlscy5taXhpbihFbGVtZW50SW1wbC5wcm90b3R5cGUsIFBhcmVudE5vZGVJbXBsLnByb3RvdHlwZSk7XG5pZGxVdGlscy5taXhpbihFbGVtZW50SW1wbC5wcm90b3R5cGUsIENoaWxkTm9kZUltcGwucHJvdG90eXBlKTtcblxuRWxlbWVudEltcGwucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gbWVtb2l6ZVF1ZXJ5KGZ1bmN0aW9uIChxdWFsaWZpZWROYW1lKSB7XG4gIHJldHVybiBsaXN0T2ZFbGVtZW50c1dpdGhRdWFsaWZpZWROYW1lKHF1YWxpZmllZE5hbWUsIHRoaXMpO1xufSk7XG5cbkVsZW1lbnRJbXBsLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TID0gbWVtb2l6ZVF1ZXJ5KGZ1bmN0aW9uIChuYW1lc3BhY2UsIGxvY2FsTmFtZSkge1xuICByZXR1cm4gbGlzdE9mRWxlbWVudHNXaXRoTmFtZXNwYWNlQW5kTG9jYWxOYW1lKG5hbWVzcGFjZSwgbG9jYWxOYW1lLCB0aGlzKTtcbn0pO1xuXG5FbGVtZW50SW1wbC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IG1lbW9pemVRdWVyeShmdW5jdGlvbiAoY2xhc3NOYW1lcykge1xuICByZXR1cm4gbGlzdE9mRWxlbWVudHNXaXRoQ2xhc3NOYW1lcyhjbGFzc05hbWVzLCB0aGlzKTtcbn0pO1xuXG5FbGVtZW50SW1wbC5wcm90b3R5cGUubWF0Y2hlcyA9IG1lbW9pemVRdWVyeShmdW5jdGlvbiAoc2VsZWN0b3JzKSB7XG4gIGNvbnN0IG1hdGNoZXIgPSBhZGROd21hdGNoZXIodGhpcyk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbWF0Y2hlci5tYXRjaChpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKSwgc2VsZWN0b3JzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIsIGUubWVzc2FnZSk7XG4gIH1cbn0pO1xuXG5FbGVtZW50SW1wbC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yID0gRWxlbWVudEltcGwucHJvdG90eXBlLm1hdGNoZXM7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY2xhc3MgRWxlbWVudENTU0lubGluZVN0eWxlIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEVsZW1lbnRDU1NJbmxpbmVTdHlsZVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jbGFzcyBFbGVtZW50Q29udGVudEVkaXRhYmxlSW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBFbGVtZW50Q29udGVudEVkaXRhYmxlSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jbGFzcyBHbG9iYWxFdmVudEhhbmRsZXJzSW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBHbG9iYWxFdmVudEhhbmRsZXJzSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IEhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHNJbXBsID0gcmVxdWlyZShcIi4vSFRNTEh5cGVybGlua0VsZW1lbnRVdGlscy1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MQW5jaG9yRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMuX2h0bWxIeXBlcmxpbmtFbGVtZW50VXRpbHNTZXR1cCgpO1xuICB9XG5cbiAgZ2V0IHRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dENvbnRlbnQ7XG4gIH1cbiAgc2V0IHRleHQodikge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2O1xuICB9XG59XG5cbmlkbFV0aWxzLm1peGluKEhUTUxBbmNob3JFbGVtZW50SW1wbC5wcm90b3R5cGUsIEhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHNJbXBsLnByb3RvdHlwZSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEFuY2hvckVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCByZWZsZWN0VVJMQXR0cmlidXRlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLnJlZmxlY3RVUkxBdHRyaWJ1dGU7XG5cbmNsYXNzIEhUTUxBcHBsZXRFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGdldCBvYmplY3QoKSB7XG4gICAgcmV0dXJuIHJlZmxlY3RVUkxBdHRyaWJ1dGUodGhpcywgXCJvYmplY3RcIik7XG4gIH1cblxuICBzZXQgb2JqZWN0KFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm9iamVjdFwiLCBWKTtcbiAgfVxuXG4gIGdldCBjb2RlQmFzZSgpIHtcbiAgICByZXR1cm4gcmVmbGVjdFVSTEF0dHJpYnV0ZSh0aGlzLCBcImNvZGViYXNlXCIpO1xuICB9XG5cbiAgc2V0IGNvZGVCYXNlKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvZGViYXNlXCIsIFYpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEFwcGxldEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgSFRNTEh5cGVybGlua0VsZW1lbnRVdGlsc0ltcGwgPSByZXF1aXJlKFwiLi9IVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxBcmVhRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMuX2h0bWxIeXBlcmxpbmtFbGVtZW50VXRpbHNTZXR1cCgpO1xuICB9XG59XG5cbmlkbFV0aWxzLm1peGluKEhUTUxBcmVhRWxlbWVudEltcGwucHJvdG90eXBlLCBIVE1MSHlwZXJsaW5rRWxlbWVudFV0aWxzSW1wbC5wcm90b3R5cGUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxBcmVhRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTE1lZGlhRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MTWVkaWFFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxBdWRpb0VsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTE1lZGlhRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEF1ZGlvRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTEJSRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEJSRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCB3aGF0d2dVUkwgPSByZXF1aXJlKFwid2hhdHdnLXVybFwiKTtcbmNvbnN0IGZhbGxiYWNrQmFzZVVSTCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsXCIpLmZhbGxiYWNrQmFzZVVSTDtcblxuY2xhc3MgSFRNTEJhc2VFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgZ2V0IGhyZWYoKSB7XG4gICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLl9vd25lckRvY3VtZW50O1xuXG4gICAgY29uc3QgdXJsID0gdGhpcy5oYXNBdHRyaWJ1dGUoXCJocmVmXCIpID8gdGhpcy5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpIDogXCJcIjtcbiAgICBjb25zdCBwYXJzZWQgPSB3aGF0d2dVUkwucGFyc2VVUkwodXJsLCB7IGJhc2VVUkw6IGZhbGxiYWNrQmFzZVVSTChkb2N1bWVudCkgfSk7XG5cbiAgICBpZiAocGFyc2VkID09PSBcImZhaWx1cmVcIikge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICByZXR1cm4gd2hhdHdnVVJMLnNlcmlhbGl6ZVVSTChwYXJzZWQpO1xuICB9XG5cbiAgc2V0IGhyZWYodmFsdWUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEJhc2VFbGVtZW50XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgcHJveGllZFdpbmRvd0V2ZW50SGFuZGxlcnMgPSByZXF1aXJlKFwiLi4vaGVscGVycy9wcm94aWVkLXdpbmRvdy1ldmVudC1oYW5kbGVyc1wiKTtcblxuY2xhc3MgSFRNTEJvZHlFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7fVxuXG5mb3IgKGNvbnN0IG5hbWUgb2YgcHJveGllZFdpbmRvd0V2ZW50SGFuZGxlcnMpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxCb2R5RWxlbWVudEltcGwucHJvdG90eXBlLCBuYW1lLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgY29uc3Qgd2luZG93ID0gdGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXc7XG4gICAgICByZXR1cm4gd2luZG93ID8gd2luZG93W25hbWVdIDogbnVsbDtcbiAgICB9LFxuICAgIHNldChoYW5kbGVyKSB7XG4gICAgICBjb25zdCB3aW5kb3cgPSB0aGlzLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0VmlldztcbiAgICAgIGlmICh3aW5kb3cpIHtcbiAgICAgICAgd2luZG93W25hbWVdID0gaGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxCb2R5RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY29uc3QgY2xvc2VzdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5jbG9zZXN0O1xuY29uc3QgaXNEaXNhYmxlZCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2Zvcm0tY29udHJvbHNcIikuaXNEaXNhYmxlZDtcblxuY2xhc3MgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgX2FjdGl2YXRpb25CZWhhdmlvcigpIHtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtO1xuICAgIGlmIChmb3JtKSB7XG4gICAgICBpZiAodGhpcy50eXBlID09PSBcInN1Ym1pdFwiICYmICFpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgICAgIGZvcm0uX2Rpc3BhdGNoU3VibWl0RXZlbnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfZ2V0VmFsdWUoKSB7XG4gICAgY29uc3QgdmFsdWVBdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgICByZXR1cm4gdmFsdWVBdHRyID09PSBudWxsID8gXCJcIiA6IHZhbHVlQXR0cjtcbiAgfVxuXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiBjbG9zZXN0KHRoaXMsIFwiZm9ybVwiKTtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIGNvbnN0IHR5cGVBdHRyID0gKHRoaXMuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCAodHlwZUF0dHIpIHtcbiAgICAgIGNhc2UgXCJzdWJtaXRcIjpcbiAgICAgIGNhc2UgXCJyZXNldFwiOlxuICAgICAgY2FzZSBcImJ1dHRvblwiOlxuICAgICAgY2FzZSBcIm1lbnVcIjpcbiAgICAgICAgcmV0dXJuIHR5cGVBdHRyO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwic3VibWl0XCI7XG4gICAgfVxuICB9XG5cbiAgc2V0IHR5cGUodikge1xuICAgIHYgPSBTdHJpbmcodikudG9Mb3dlckNhc2UoKTtcbiAgICBzd2l0Y2ggKHYpIHtcbiAgICAgIGNhc2UgXCJzdWJtaXRcIjpcbiAgICAgIGNhc2UgXCJyZXNldFwiOlxuICAgICAgY2FzZSBcImJ1dHRvblwiOlxuICAgICAgY2FzZSBcIm1lbnVcIjpcbiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIHYpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInN1Ym1pdFwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEJ1dHRvbkVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3Qgbm90SW1wbGVtZW50ZWQgPSByZXF1aXJlKFwiLi4vLi4vYnJvd3Nlci9ub3QtaW1wbGVtZW50ZWRcIik7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBDYW52YXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikuQ2FudmFzO1xuXG5jbGFzcyBIVE1MQ2FudmFzRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBfYXR0ck1vZGlmaWVkKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuX2NhbnZhcyAmJiAobmFtZSA9PT0gXCJ3aWR0aFwiIHx8IG5hbWUgPT09IFwiaGVpZ2h0XCIpKSB7XG4gICAgICB0aGlzLl9jYW52YXNbbmFtZV0gPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLl9hdHRyTW9kaWZpZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9nZXRDYW52YXMoKSB7XG4gICAgaWYgKENhbnZhcyAmJiAhdGhpcy5fY2FudmFzKSB7XG4gICAgICB0aGlzLl9jYW52YXMgPSBuZXcgQ2FudmFzKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NhbnZhcztcbiAgfVxuXG4gIGdldENvbnRleHQoY29udGV4dElkKSB7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5fZ2V0Q2FudmFzKCk7XG4gICAgaWYgKGNhbnZhcykge1xuICAgICAgaWYgKCF0aGlzLl9jb250ZXh0KSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChjb250ZXh0SWQpIHx8IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0KSB7XG4gICAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIG5hdGl2ZSBjYW52YXMgcmVmZXJlbmNlIHdpdGggb3VyIHdyYXBwZXIuIFRoaXMgaXMgdGhlXG4gICAgICAgICAgLy8gcmVhc29uIHdoeSB3ZSBuZWVkIHRvIGxvY2FsbHkgY2FjaGUgX2NvbnRleHQsIHNpbmNlIGVhY2ggY2FsbCB0b1xuICAgICAgICAgIC8vIGNhbnZhcy5nZXRDb250ZXh0KGNvbnRleHRJZCkgd291bGQgcmVwbGFjZSB0aGlzIHJlZmVyZW5jZSBhZ2Fpbi5cbiAgICAgICAgICAvLyBQZXJoYXBzIGluIHRoZSBsb25nZXIgdGVybSwgYSBiZXR0ZXIgc29sdXRpb24gd291bGQgYmUgdG8gY3JlYXRlIGFcbiAgICAgICAgICAvLyBmdWxsIHdyYXBwZXIgZm9yIHRoZSBDb250ZXh0IG9iamVjdCBhcyB3ZWxsLlxuICAgICAgICAgIHRoaXMuX2NvbnRleHQuY2FudmFzID0gaWRsVXRpbHMud3JhcHBlckZvckltcGwodGhpcyk7XG4gICAgICAgICAgd3JhcE5vZGVDYW52YXNNZXRob2QodGhpcy5fY29udGV4dCwgXCJjcmVhdGVQYXR0ZXJuXCIpO1xuICAgICAgICAgIHdyYXBOb2RlQ2FudmFzTWV0aG9kKHRoaXMuX2NvbnRleHQsIFwiZHJhd0ltYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fY29udGV4dDtcbiAgICB9XG5cbiAgICBub3RJbXBsZW1lbnRlZChcIkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5nZXRDb250ZXh0ICh3aXRob3V0IGluc3RhbGxpbmcgdGhlIGNhbnZhcyBucG0gcGFja2FnZSlcIixcbiAgICAgIHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByb2JhYmx5U3VwcG9ydHNDb250ZXh0KGNvbnRleHRJZCkge1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuX2dldENhbnZhcygpO1xuICAgIHJldHVybiBjYW52YXMgPyBjb250ZXh0SWQgPT09IFwiMmRcIiA6IGZhbHNlO1xuICB9XG5cbiAgc2V0Q29udGV4dCgpIHtcbiAgICBub3RJbXBsZW1lbnRlZChcIkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5zZXRDb250ZXh0XCIpO1xuICB9XG5cbiAgdG9EYXRhVVJMKCkge1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuX2dldENhbnZhcygpO1xuICAgIGlmIChjYW52YXMpIHtcbiAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMLmFwcGx5KHRoaXMuX2NhbnZhcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBub3RJbXBsZW1lbnRlZChcIkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS50b0RhdGFVUkwgKHdpdGhvdXQgaW5zdGFsbGluZyB0aGUgY2FudmFzIG5wbSBwYWNrYWdlKVwiLFxuICAgICAgdGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdG9CbG9iKGNhbGxiYWNrLCB0eXBlLCBxdWFsaXR5QXJndW1lbnQpIHtcbiAgICBjb25zdCB3aW5kb3cgPSB0aGlzLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0VmlldztcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLl9nZXRDYW52YXMoKTtcbiAgICBpZiAoY2FudmFzKSB7XG4gICAgICBsZXQgc3RyZWFtO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJpbWFnZS9qcGdcIjpcbiAgICAgICAgY2FzZSBcImltYWdlL2pwZWdcIjpcbiAgICAgICAgICBzdHJlYW0gPSBjYW52YXMuY3JlYXRlSlBFR1N0cmVhbSh7XG4gICAgICAgICAgICBxdWFsaXR5OiBNYXRoLm1pbigwLCBNYXRoLm1heCgxLCBxdWFsaXR5QXJndW1lbnQpKSAqIDEwMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIFRPRE86IFBhdGNoIG5vZGUtY2FudmFzIHRvIHJlY2VpdmUgcXVhbGl0eUFyZ3VtZW50IGZvciBQTkcgc3RyZWFtXG4gICAgICAgICAgdHlwZSA9IFwiaW1hZ2UvcG5nXCI7XG4gICAgICAgICAgc3RyZWFtID0gY2FudmFzLmNyZWF0ZVBOR1N0cmVhbSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgYnVmZmVycyA9IFtdO1xuICAgICAgc3RyZWFtLm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XG4gICAgICAgIGJ1ZmZlcnMucHVzaChjaHVuayk7XG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyB3aW5kb3cuQmxvYihidWZmZXJzLCB7IHR5cGUgfSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdEltcGxlbWVudGVkKFwiSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLnRvQmxvYiAod2l0aG91dCBpbnN0YWxsaW5nIHRoZSBjYW52YXMgbnBtIHBhY2thZ2UpXCIsXG4gICAgICAgIHdpbmRvdyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHdpZHRoKCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwid2lkdGhcIikpO1xuICAgIHJldHVybiBpc05hTihwYXJzZWQpIHx8IHBhcnNlZCA8IDAgfHwgcGFyc2VkID4gMjE0NzQ4MzY0NyA/IDMwMCA6IHBhcnNlZDtcbiAgfVxuXG4gIHNldCB3aWR0aCh2KSB7XG4gICAgdiA9IHYgPiAyMTQ3NDgzNjQ3ID8gMzAwIDogdjtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFN0cmluZyh2KSk7XG4gIH1cblxuICBnZXQgaGVpZ2h0KCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIpKTtcbiAgICByZXR1cm4gaXNOYU4ocGFyc2VkKSB8fCBwYXJzZWQgPCAwIHx8IHBhcnNlZCA+IDIxNDc0ODM2NDcgPyAxNTAgOiBwYXJzZWQ7XG4gIH1cblxuICBzZXQgaGVpZ2h0KHYpIHtcbiAgICB2ID0gdiA+IDIxNDc0ODM2NDcgPyAxNTAgOiB2O1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIFN0cmluZyh2KSk7XG4gIH1cbn1cblxuLy8gV2UgbmVlZCB0byB3cmFwIHRoZSBtZXRob2RzIHRoYXQgcmVjZWl2ZSBhbiBpbWFnZSBvciBjYW52YXMgb2JqZWN0XG4vLyAobHVja2lseSwgYWx3YXlzIGFzIHRoZSBmaXJzdCBhcmd1bWVudCksIHNvIHRoYXQgdGhlc2Ugb2JqZWN0cyBjYW4gYmVcbi8vIHVud3JhcHBlZCBhbiB0aGUgZXhwZWN0ZWQgdHlwZXMgcGFzc2VkLlxuZnVuY3Rpb24gd3JhcE5vZGVDYW52YXNNZXRob2QoY3R4LCBuYW1lKSB7XG4gIGNvbnN0IHByZXYgPSBjdHhbbmFtZV07XG4gIGN0eFtuYW1lXSA9IGZ1bmN0aW9uIChpbWFnZSkge1xuICAgIGNvbnN0IGltcGwgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihpbWFnZSk7XG4gICAgaWYgKGltcGwpIHtcbiAgICAgIGFyZ3VtZW50c1swXSA9IGltcGwuX2ltYWdlIHx8IGltcGwuX2NhbnZhcztcbiAgICB9XG4gICAgcmV0dXJuIHByZXYuYXBwbHkoY3R4LCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxDYW52YXNFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MRExpc3RFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MRExpc3RFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MRGF0YUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxEYXRhRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTERhdGFMaXN0RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTERhdGFMaXN0RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTERpYWxvZ0VsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxEaWFsb2dFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxEaXZFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MRGl2RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9FbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBNb3VzZUV2ZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9Nb3VzZUV2ZW50XCIpO1xuY29uc3QgZm9jdXNpbmcgPSByZXF1aXJlKFwiLi4vaGVscGVycy9mb2N1c2luZy5qc1wiKTtcbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IGlzRGlzYWJsZWQgPSByZXF1aXJlKFwiLi4vaGVscGVycy9mb3JtLWNvbnRyb2xzXCIpLmlzRGlzYWJsZWQ7XG5cbmNsYXNzIEhUTUxFbGVtZW50SW1wbCBleHRlbmRzIEVsZW1lbnRJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG5cbiAgICB0aGlzLl90YWJJbmRleCA9IDA7XG5cbiAgICB0aGlzLl9zZXR0aW5nQ3NzVGV4dCA9IGZhbHNlO1xuICAgIHRoaXMuX2NsaWNrSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fc3R5bGUgPSBuZXcgdGhpcy5fY29yZS5DU1NTdHlsZURlY2xhcmF0aW9uKG5ld0Nzc1RleHQgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zZXR0aW5nQ3NzVGV4dCkge1xuICAgICAgICB0aGlzLl9zZXR0aW5nQ3NzVGV4dCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgbmV3Q3NzVGV4dCk7XG4gICAgICAgIHRoaXMuX3NldHRpbmdDc3NUZXh0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBBZGQgZGVmYXVsdCBldmVudCBiZWhhdmlvciAoY2xpY2sgbGluayB0byBuYXZpZ2F0ZSwgY2xpY2sgYnV0dG9uIHRvIHN1Ym1pdFxuICAvLyBmb3JtLCBldGMpLiBXZSBzdGFydCBieSB3cmFwcGluZyBkaXNwYXRjaEV2ZW50IHNvIHdlIGNhbiBmb3J3YXJkIGV2ZW50cyB0b1xuICAvLyB0aGUgZWxlbWVudCdzIGRlZmF1bHQgZnVuY3Rpb25zIChvbmx5IGV2ZW50cyB0aGF0IGRpZCBub3QgaW5jdXJcbiAgLy8gcHJldmVudERlZmF1bHQpLlxuICBkaXNwYXRjaEV2ZW50KGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikge1xuICAgICAgY2FsbEV2ZW50QmVoYXZpb3JIb29rKGV2ZW50LCBcIl9wcmVDbGlja0FjdGl2YXRpb25TdGVwc1wiLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRjb21lID0gc3VwZXIuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSB7XG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICBjYWxsRXZlbnRCZWhhdmlvckhvb2soZXZlbnQsIFwiX2NhbmNlbGVkQWN0aXZhdGlvblN0ZXBzXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbEV2ZW50QmVoYXZpb3JIb29rKGV2ZW50LCBcIl9hY3RpdmF0aW9uQmVoYXZpb3JcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dGNvbWU7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBpZiAoIWZvY3VzaW5nLmlzRm9jdXNhYmxlQXJlYUVsZW1lbnQodGhpcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuX293bmVyRG9jdW1lbnQuX2xhc3RGb2N1c2VkRWxlbWVudDtcblxuICAgIGZvY3VzaW5nLmZpcmVGb2N1c0V2ZW50V2l0aFRhcmdldEFkanVzdG1lbnQoXCJibHVyXCIsIHByZXZpb3VzLCB0aGlzKTtcbiAgICB0aGlzLl9vd25lckRvY3VtZW50Ll9sYXN0Rm9jdXNlZEVsZW1lbnQgPSB0aGlzO1xuICAgIGZvY3VzaW5nLmZpcmVGb2N1c0V2ZW50V2l0aFRhcmdldEFkanVzdG1lbnQoXCJmb2N1c1wiLCB0aGlzLCBwcmV2aW91cyk7XG5cbiAgICBpZiAodGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXcuX2ZyYW1lRWxlbWVudCkge1xuICAgICAgdGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXcuX2ZyYW1lRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGJsdXIoKSB7XG4gICAgaWYgKHRoaXMuX293bmVyRG9jdW1lbnQuX2xhc3RGb2N1c2VkRWxlbWVudCAhPT0gdGhpcyB8fCAhZm9jdXNpbmcuaXNGb2N1c2FibGVBcmVhRWxlbWVudCh0aGlzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvY3VzaW5nLmZpcmVGb2N1c0V2ZW50V2l0aFRhcmdldEFkanVzdG1lbnQoXCJibHVyXCIsIHRoaXMsIHRoaXMuX293bmVyRG9jdW1lbnQpO1xuICAgIHRoaXMuX293bmVyRG9jdW1lbnQuX2xhc3RGb2N1c2VkRWxlbWVudCA9IG51bGw7XG4gICAgZm9jdXNpbmcuZmlyZUZvY3VzRXZlbnRXaXRoVGFyZ2V0QWRqdXN0bWVudChcImZvY3VzXCIsIHRoaXMuX293bmVyRG9jdW1lbnQsIHRoaXMpO1xuICB9XG5cbiAgY2xpY2soKSB7XG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW50ZXJhY3Rpb24uaHRtbCNkb20tY2xpY2tcbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbnRlcmFjdGlvbi5odG1sI3J1bi1zeW50aGV0aWMtY2xpY2stYWN0aXZhdGlvbi1zdGVwc1xuICAgIC8vIE5vdCBjb21wbGV0ZWx5IHNwZWMgY29tcGxpYW50IGR1ZSB0byBlLmcuIGluY29tcGxldGUgaW1wbGVtZW50YXRpb25zIG9mIGRpc2FibGVkIGZvciBmb3JtIGNvbnRyb2xzLCBvciBub1xuICAgIC8vIGltcGxlbWVudGF0aW9uIGF0IGFsbCBvZiBpc1RydXN0ZWQuXG5cbiAgICBpZiAodGhpcy5fY2xpY2tJblByb2dyZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2xpY2tJblByb2dyZXNzID0gdHJ1ZTtcblxuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnQgPSBNb3VzZUV2ZW50LmNyZWF0ZUltcGwoW1wiY2xpY2tcIiwgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH1dLCB7fSk7XG5cbiAgICAvLyBSdW4gc3ludGhldGljIGNsaWNrIGFjdGl2YXRpb24gc3RlcHMuIEFjY29yZGluZyB0byB0aGUgc3BlYyxcbiAgICAvLyB0aGlzIHNob3VsZCBub3QgYmUgY2FsbGluZyBkaXNwYXRjaEV2ZW50LCBidXQgaXQgbWF0Y2hlcyBicm93c2VyIGJlaGF2aW9yLlxuICAgIC8vIFNlZTogaHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xMjIzMFxuICAgIC8vIFNlZSBhbHNvOiBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzgwNVxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cblxuICAgIHRoaXMuX2NsaWNrSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGRpcigpIHtcbiAgICBsZXQgZGlyVmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcImRpclwiKTtcbiAgICBpZiAoZGlyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgIGRpclZhbHVlID0gZGlyVmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgaWYgKFtcImx0clwiLCBcInJ0bFwiLCBcImF1dG9cIl0uaW5jbHVkZXMoZGlyVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBkaXJWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgc2V0IGRpcih2YWx1ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGlyXCIsIHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzdHlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3R5bGU7XG4gIH1cbiAgc2V0IHN0eWxlKHZhbHVlKSB7XG4gICAgdGhpcy5fc3R5bGUuY3NzVGV4dCA9IHZhbHVlO1xuICB9XG5cbiAgX2F0dHJNb2RpZmllZChuYW1lLCB2YWx1ZSwgb2xkVmFsdWUpIHtcbiAgICBpZiAobmFtZSA9PT0gXCJzdHlsZVwiICYmIHZhbHVlICE9PSBvbGRWYWx1ZSAmJiAhdGhpcy5fc2V0dGluZ0Nzc1RleHQpIHtcbiAgICAgIHRoaXMuX3NldHRpbmdDc3NUZXh0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3N0eWxlLmNzc1RleHQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuX3NldHRpbmdDc3NUZXh0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc3VwZXIuX2F0dHJNb2RpZmllZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgLy8gVE9ETyB0aGlzIHNob3VsZCBiZSBbUmVmbGVjdF1hYmxlIGlmIHdlIGFkZGVkIGRlZmF1bHQgdmFsdWUgc3VwcG9ydCB0byB3ZWJpZGwyanMncyBbUmVmbGVjdF1cbiAgZ2V0IHRhYkluZGV4KCkge1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSkge1xuICAgICAgcmV0dXJuIGZvY3VzaW5nLmlzRm9jdXNhYmxlQXJlYUVsZW1lbnQodGhpcykgPyAwIDogLTE7XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJzaW9ucy5sb25nKHRoaXMuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIikpO1xuICB9XG5cbiAgc2V0IHRhYkluZGV4KHZhbHVlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJ0YWJJbmRleFwiLCBTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIGdldCBvZmZzZXRQYXJlbnQoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgb2Zmc2V0VG9wKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IG9mZnNldExlZnQoKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBnZXQgb2Zmc2V0V2lkdGgoKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBnZXQgb2Zmc2V0SGVpZ2h0KCkge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxFdmVudEJlaGF2aW9ySG9vayhldmVudCwgbmFtZSwgdGFyZ2V0T3ZlcnJpZGUpIHtcbiAgaWYgKGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0T3ZlcnJpZGUgfHwgZXZlbnQudGFyZ2V0O1xuICAgIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldFtuYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0YXJnZXRbbmFtZV0oKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IHJlZmxlY3RVUkxBdHRyaWJ1dGUgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikucmVmbGVjdFVSTEF0dHJpYnV0ZTtcblxuY2xhc3MgSFRNTEVtYmVkRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBnZXQgc3JjKCkge1xuICAgIHJldHVybiByZWZsZWN0VVJMQXR0cmlidXRlKHRoaXMsIFwic3JjXCIpO1xuICB9XG5cbiAgc2V0IHNyYyh2YWx1ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3JjXCIsIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxFbWJlZEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBjbG9zZXN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmNsb3Nlc3Q7XG5cbmNsYXNzIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIGNsb3Nlc3QodGhpcywgXCJmb3JtXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEZpZWxkU2V0RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTEZvbnRFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MRm9udEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBkZXNjZW5kYW50c0J5SFRNTExvY2FsTmFtZXMgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuZGVzY2VuZGFudHNCeUhUTUxMb2NhbE5hbWVzO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuY29uc3QgY3JlYXRlSFRNTENvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vbGl2aW5nL2h0bWwtY29sbGVjdGlvblwiKS5jcmVhdGU7XG5jb25zdCBub3RJbXBsZW1lbnRlZCA9IHJlcXVpcmUoXCIuLi8uLi9icm93c2VyL25vdC1pbXBsZW1lbnRlZFwiKTtcbmNvbnN0IHJlZmxlY3RVUkxBdHRyaWJ1dGUgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikucmVmbGVjdFVSTEF0dHJpYnV0ZTtcblxuLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jY2F0ZWdvcnktbGlzdGVkXG5jb25zdCBsaXN0ZWRFbGVtZW50cyA9IG5ldyBTZXQoW1wiYnV0dG9uXCIsIFwiZmllbGRzZXRcIiwgXCJpbnB1dFwiLCBcImtleWdlblwiLCBcIm9iamVjdFwiLCBcInNlbGVjdFwiLCBcInRleHRhcmVhXCJdKTtcblxuY29uc3QgZW5jVHlwZXMgPSBuZXcgU2V0KFtcbiAgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIixcbiAgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsXG4gIFwidGV4dC9wbGFpblwiXG5dKTtcblxuY29uc3QgbWV0aG9kcyA9IG5ldyBTZXQoW1xuICBcImdldFwiLFxuICBcInBvc3RcIixcbiAgXCJkaWFsb2dcIlxuXSk7XG5cbmNsYXNzIEhUTUxGb3JtRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBfZGVzY2VuZGFudEFkZGVkKHBhcmVudCwgY2hpbGQpIHtcbiAgICBjb25zdCBmb3JtID0gdGhpcztcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGRvbVN5bWJvbFRyZWUudHJlZUl0ZXJhdG9yKGNoaWxkKSkge1xuICAgICAgaWYgKHR5cGVvZiBlbC5fY2hhbmdlZEZvcm1Pd25lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGVsLl9jaGFuZ2VkRm9ybU93bmVyKGZvcm0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyLl9kZXNjZW5kYW50QWRkZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9kZXNjZW5kYW50UmVtb3ZlZChwYXJlbnQsIGNoaWxkKSB7XG4gICAgZm9yIChjb25zdCBlbCBvZiBkb21TeW1ib2xUcmVlLnRyZWVJdGVyYXRvcihjaGlsZCkpIHtcbiAgICAgIGlmICh0eXBlb2YgZWwuX2NoYW5nZWRGb3JtT3duZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBlbC5fY2hhbmdlZEZvcm1Pd25lcihudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlci5fZGVzY2VuZGFudFJlbW92ZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIGdldCBlbGVtZW50cygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTENvbGxlY3Rpb24odGhpcywgKCkgPT4gZGVzY2VuZGFudHNCeUhUTUxMb2NhbE5hbWVzKHRoaXMsIGxpc3RlZEVsZW1lbnRzKSk7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzLmxlbmd0aDtcbiAgfVxuXG4gIF9kaXNwYXRjaFN1Ym1pdEV2ZW50KCkge1xuICAgIGNvbnN0IGV2ID0gdGhpcy5fb3duZXJEb2N1bWVudC5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7XG4gICAgZXYuaW5pdEV2ZW50KFwic3VibWl0XCIsIHRydWUsIHRydWUpO1xuICAgIGlmICh0aGlzLmRpc3BhdGNoRXZlbnQoZXYpKSB7XG4gICAgICB0aGlzLnN1Ym1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBub3RJbXBsZW1lbnRlZChcIkhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuc3VibWl0XCIsIHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3KTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodGhpcy5lbGVtZW50cywgZWwgPT4ge1xuICAgICAgZWwgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihlbCk7XG4gICAgICBpZiAodHlwZW9mIGVsLl9mb3JtUmVzZXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBlbC5fZm9ybVJlc2V0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgbWV0aG9kKCkge1xuICAgIGxldCBtZXRob2QgPSB0aGlzLmdldEF0dHJpYnV0ZShcIm1ldGhvZFwiKTtcbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICBtZXRob2QgPSBtZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kcy5oYXMobWV0aG9kKSkge1xuICAgICAgcmV0dXJuIG1ldGhvZDtcbiAgICB9XG4gICAgcmV0dXJuIFwiZ2V0XCI7XG4gIH1cblxuICBzZXQgbWV0aG9kKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm1ldGhvZFwiLCBWKTtcbiAgfVxuXG4gIGdldCBlbmN0eXBlKCkge1xuICAgIGxldCB0eXBlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJlbmN0eXBlXCIpO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmIChlbmNUeXBlcy5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgICByZXR1cm4gXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjtcbiAgfVxuXG4gIHNldCBlbmN0eXBlKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImVuY3R5cGVcIiwgVik7XG4gIH1cblxuICBnZXQgYWN0aW9uKCkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIik7XG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlID09PSBudWxsIHx8IGF0dHJpYnV0ZVZhbHVlID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5fb3duZXJEb2N1bWVudC5VUkw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmxlY3RVUkxBdHRyaWJ1dGUodGhpcywgXCJhY3Rpb25cIik7XG4gIH1cblxuICBzZXQgYWN0aW9uKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFjdGlvblwiLCBWKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxGb3JtRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgcGFyc2VDb250ZW50VHlwZSA9IHJlcXVpcmUoXCJjb250ZW50LXR5cGUtcGFyc2VyXCIpO1xuY29uc3QgVVJMID0gcmVxdWlyZShcIndoYXR3Zy11cmxcIikuVVJMO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgYXBwbHlEb2N1bWVudEZlYXR1cmVzID0gcmVxdWlyZShcIi4uLy4uL2Jyb3dzZXIvZG9jdW1lbnRmZWF0dXJlc1wiKS5hcHBseURvY3VtZW50RmVhdHVyZXM7XG5jb25zdCByZXNvdXJjZUxvYWRlciA9IHJlcXVpcmUoXCIuLi8uLi9icm93c2VyL3Jlc291cmNlLWxvYWRlclwiKTtcbmNvbnN0IGRlZmluZUdldHRlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5kZWZpbmVHZXR0ZXI7XG5jb25zdCBkb2N1bWVudEJhc2VVUkxTZXJpYWxpemVkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZG9jdW1lbnQtYmFzZS11cmxcIikuZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZDtcbmNvbnN0IGdldEF0dHJpYnV0ZVZhbHVlID0gcmVxdWlyZShcIi4uL2F0dHJpYnV0ZXNcIikuZ2V0QXR0cmlidXRlVmFsdWU7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCByZWZsZWN0VVJMQXR0cmlidXRlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLnJlZmxlY3RVUkxBdHRyaWJ1dGU7XG5cbmZ1bmN0aW9uIGxvYWRGcmFtZShmcmFtZSkge1xuICBpZiAoZnJhbWUuX2NvbnRlbnREb2N1bWVudCkge1xuICAgIGlmIChmcmFtZS5fY29udGVudERvY3VtZW50Ll9kZWZhdWx0Vmlldykge1xuICAgICAgLy8gY2xvc2UgY2FsbHMgZGVsZXRlIG9uIGl0cyBkb2N1bWVudC5cbiAgICAgIGZyYW1lLl9jb250ZW50RG9jdW1lbnQuX2RlZmF1bHRWaWV3LmNsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBmcmFtZS5fY29udGVudERvY3VtZW50O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBhcmVudERvYyA9IGZyYW1lLl9vd25lckRvY3VtZW50O1xuXG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3Byb2Nlc3MtdGhlLWlmcmFtZS1hdHRyaWJ1dGVzXG4gIGxldCB1cmw7XG4gIGNvbnN0IHNyY0F0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKGZyYW1lLCBcInNyY1wiKTtcbiAgaWYgKHNyY0F0dHJpYnV0ZSA9PT0gbnVsbCB8fCBzcmNBdHRyaWJ1dGUgPT09IFwiXCIpIHtcbiAgICB1cmwgPSBuZXcgVVJMKFwiYWJvdXQ6YmxhbmtcIik7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHVybCA9IG5ldyBVUkwoc3JjQXR0cmlidXRlLCBkb2N1bWVudEJhc2VVUkxTZXJpYWxpemVkKHBhcmVudERvYykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHVybCA9IG5ldyBVUkwoXCJhYm91dDpibGFua1wiKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGlzIGlzIG5vdCBncmVhdCwgYnV0IHByZXZlbnRzIGEgcmVxdWlyZSBjeWNsZSBkdXJpbmcgd2ViaWRsMmpzIGdlbmVyYXRpb25cbiAgY29uc3Qgd25kID0gbmV3IHBhcmVudERvYy5fZGVmYXVsdFZpZXcuY29uc3RydWN0b3Ioe1xuICAgIHBhcnNpbmdNb2RlOiBcImh0bWxcIixcbiAgICB1cmw6IHVybC5wcm90b2NvbCA9PT0gXCJqYXZhc2NyaXB0OlwiIHx8IHVybC5ocmVmID09PSBcImFib3V0OmJsYW5rXCIgPyBwYXJlbnREb2MuVVJMIDogdXJsLmhyZWYsXG4gICAgcmVzb3VyY2VMb2FkZXI6IHBhcmVudERvYy5fY3VzdG9tUmVzb3VyY2VMb2FkZXIsXG4gICAgdXNlckFnZW50OiBwYXJlbnREb2MuX2RlZmF1bHRWaWV3Lm5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgcmVmZXJyZXI6IHBhcmVudERvYy5VUkwsXG4gICAgY29va2llSmFyOiBwYXJlbnREb2MuX2Nvb2tpZUphcixcbiAgICBwb29sOiBwYXJlbnREb2MuX3Bvb2wsXG4gICAgZW5jb2Rpbmc6IHBhcmVudERvYy5fZW5jb2RpbmcsXG4gICAgYWdlbnRPcHRpb25zOiBwYXJlbnREb2MuX2FnZW50T3B0aW9ucyxcbiAgICBzdHJpY3RTU0w6IHBhcmVudERvYy5fc3RyaWN0U1NMLFxuICAgIHByb3h5OiBwYXJlbnREb2MuX3Byb3h5LFxuICAgIHJ1blNjcmlwdHM6IHBhcmVudERvYy5fZGVmYXVsdFZpZXcuX3J1blNjcmlwdHNcbiAgfSk7XG4gIGNvbnN0IGNvbnRlbnREb2MgPSBmcmFtZS5fY29udGVudERvY3VtZW50ID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIod25kLl9kb2N1bWVudCk7XG4gIGFwcGx5RG9jdW1lbnRGZWF0dXJlcyhjb250ZW50RG9jLCBwYXJlbnREb2MuX2ltcGxlbWVudGF0aW9uLl9mZWF0dXJlcyk7XG5cbiAgY29uc3QgcGFyZW50ID0gcGFyZW50RG9jLl9kZWZhdWx0VmlldztcbiAgY29uc3QgY29udGVudFdpbmRvdyA9IGNvbnRlbnREb2MuX2RlZmF1bHRWaWV3O1xuICBjb250ZW50V2luZG93Ll9wYXJlbnQgPSBwYXJlbnQ7XG4gIGNvbnRlbnRXaW5kb3cuX3RvcCA9IHBhcmVudC50b3A7XG4gIGNvbnRlbnRXaW5kb3cuX2ZyYW1lRWxlbWVudCA9IGZyYW1lO1xuICBjb250ZW50V2luZG93Ll92aXJ0dWFsQ29uc29sZSA9IHBhcmVudC5fdmlydHVhbENvbnNvbGU7XG5cbiAgLy8gSGFuZGxlIGFib3V0OmJsYW5rIHdpdGggYSBzaW11bGF0ZWQgbG9hZCBvZiBhbiBlbXB0eSBkb2N1bWVudC5cbiAgaWYgKHVybC5ocmVmID09PSBcImFib3V0OmJsYW5rXCIpIHtcbiAgICAvLyBDYW5ub3QgYmUgZG9uZSBpbnNpZGUgdGhlIGVucXVldWVkIGNhbGxiYWNrOyB0aGUgZG9jdW1lbnRFbGVtZW50IGV0Yy4gbmVlZCB0byBiZSBpbW1lZGlhdGVseSBhdmFpbGFibGUuXG4gICAgY29udGVudERvYy53cml0ZShcIjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPlwiKTtcbiAgICBjb250ZW50RG9jLmNsb3NlKCk7XG4gICAgcmVzb3VyY2VMb2FkZXIuZW5xdWV1ZShmcmFtZSkoKTsgLy8gdG8gZmlyZSB0aGUgbG9hZCBldmVudFxuICB9IGVsc2UgaWYgKHVybC5wcm90b2NvbCA9PT0gXCJqYXZhc2NyaXB0OlwiKSB7XG4gICAgLy8gQ2Fubm90IGJlIGRvbmUgaW5zaWRlIHRoZSBlbnF1ZXVlZCBjYWxsYmFjazsgdGhlIGRvY3VtZW50RWxlbWVudCBldGMuIG5lZWQgdG8gYmUgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLlxuICAgIGNvbnRlbnREb2Mud3JpdGUoXCI8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD5cIik7XG4gICAgY29udGVudERvYy5jbG9zZSgpO1xuICAgIGNvbnRlbnRXaW5kb3cuZXZhbCh1cmwucGF0aG5hbWUpO1xuICAgIHJlc291cmNlTG9hZGVyLmVucXVldWUoZnJhbWUpKCk7IC8vIHRvIGZpcmUgdGhlIGxvYWQgZXZlbnRcbiAgfSBlbHNlIHtcbiAgICByZXNvdXJjZUxvYWRlci5sb2FkKFxuICAgICAgZnJhbWUsXG4gICAgICB1cmwuaHJlZixcbiAgICAgIHsgZGVmYXVsdEVuY29kaW5nOiBwYXJlbnREb2MuX2VuY29kaW5nLCBkZXRlY3RNZXRhQ2hhcnNldDogdHJ1ZSB9LFxuICAgICAgKGh0bWwsIHJlc3BvbnNlVVJMLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhcnNlQ29udGVudFR5cGUocmVzcG9uc2UuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSk7XG4gICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICBpZiAoY29udGVudFR5cGUuaXNYTUwoKSkge1xuICAgICAgICAgICAgICBjb250ZW50RG9jLl9wYXJzaW5nTW9kZSA9IFwieG1sXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250ZW50RG9jLl9lbmNvZGluZyA9IGNvbnRlbnRUeXBlLmdldChcImNoYXJzZXRcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnREb2Mud3JpdGUoaHRtbCk7XG4gICAgICAgIGNvbnRlbnREb2MuY2xvc2UoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hBY2Nlc3NvcnMoZG9jdW1lbnQpIHtcbiAgY29uc3Qgd2luZG93ID0gZG9jdW1lbnQuX2RlZmF1bHRWaWV3O1xuXG4gIGlmICghd2luZG93KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZnJhbWVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcImlmcmFtZSxmcmFtZVwiKTtcblxuICAvLyBkZWxldGUgYWNjZXNzb3JzIGZvciBhbGwgZnJhbWVzXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgd2luZG93Ll9sZW5ndGg7ICsraSkge1xuICAgIGRlbGV0ZSB3aW5kb3dbaV07XG4gIH1cblxuICB3aW5kb3cuX2xlbmd0aCA9IGZyYW1lcy5sZW5ndGg7XG4gIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZnJhbWVzLCAoZnJhbWUsIGkpID0+IHtcbiAgICBkZWZpbmVHZXR0ZXIod2luZG93LCBpLCAoKSA9PiBmcmFtZS5jb250ZW50V2luZG93KTtcbiAgfSk7XG59XG5cbmNsYXNzIEhUTUxGcmFtZUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgdGhpcy5fY29udGVudERvY3VtZW50ID0gbnVsbDtcbiAgfVxuICBfYXR0ck1vZGlmaWVkKG5hbWUsIHZhbHVlLCBvbGRWYWwpIHtcbiAgICBzdXBlci5fYXR0ck1vZGlmaWVkKG5hbWUsIHZhbHVlLCBvbGRWYWwpO1xuICAgIGlmIChuYW1lID09PSBcInNyY1wiKSB7XG4gICAgICAvLyBpZnJhbWUgc2hvdWxkIG5ldmVyIGxvYWQgaW4gYSBkb2N1bWVudCB3aXRob3V0IGEgV2luZG93XG4gICAgICAvLyAoZS5nLiBpbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQpXG4gICAgICBpZiAodGhpcy5fYXR0YWNoZWQgJiYgdGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXcpIHtcbiAgICAgICAgbG9hZEZyYW1lKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9kZXRhY2goKSB7XG4gICAgc3VwZXIuX2RldGFjaCgpO1xuXG4gICAgaWYgKHRoaXMuY29udGVudFdpbmRvdykge1xuICAgICAgdGhpcy5jb250ZW50V2luZG93LmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaEFjY2Vzc29ycyh0aGlzLl9vd25lckRvY3VtZW50KTtcbiAgfVxuXG4gIF9hdHRhY2goKSB7XG4gICAgc3VwZXIuX2F0dGFjaCgpO1xuXG4gICAgaWYgKHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3KSB7XG4gICAgICBsb2FkRnJhbWUodGhpcyk7XG4gICAgfVxuICAgIHJlZnJlc2hBY2Nlc3NvcnModGhpcy5fb3duZXJEb2N1bWVudCk7XG4gIH1cblxuICBnZXQgY29udGVudERvY3VtZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZW50RG9jdW1lbnQ7XG4gIH1cblxuICBnZXQgY29udGVudFdpbmRvdygpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50RG9jdW1lbnQgPyB0aGlzLmNvbnRlbnREb2N1bWVudC5fZGVmYXVsdFZpZXcgOiBudWxsO1xuICB9XG5cbiAgZ2V0IHNyYygpIHtcbiAgICByZXR1cm4gcmVmbGVjdFVSTEF0dHJpYnV0ZSh0aGlzLCBcInNyY1wiKTtcbiAgfVxuXG4gIHNldCBzcmModmFsdWUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNyY1wiLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQgbG9uZ0Rlc2MoKSB7XG4gICAgcmV0dXJuIHJlZmxlY3RVUkxBdHRyaWJ1dGUodGhpcywgXCJsb25nZGVzY1wiKTtcbiAgfVxuXG4gIHNldCBsb25nRGVzYyh2YWx1ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibG9uZ2Rlc2NcIiwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEZyYW1lRWxlbWVudEltcGxcbn07XG5cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MRnJhbWVzZXRFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MRnJhbWVzZXRFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MSFJFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MSFJFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MSGVhZEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxIZWFkRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxIdG1sRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTEh0bWxFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3Qgd2hhdHdnVVJMID0gcmVxdWlyZShcIndoYXR3Zy11cmxcIik7XG5jb25zdCBwYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZG9jdW1lbnQtYmFzZS11cmxcIikucGFyc2VVUkxUb1Jlc3VsdGluZ1VSTFJlY29yZDtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIEhUTUxIeXBlcmxpbmtFbGVtZW50VXRpbHNJbXBsIHtcbiAgX2h0bWxIeXBlcmxpbmtFbGVtZW50VXRpbHNTZXR1cCgpIHtcbiAgICB0aGlzLnVybCA9IG51bGw7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5ocmVmO1xuICB9XG5cbiAgZ2V0IGhyZWYoKSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgaHJlZiA9IHRoaXMuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTtcbiAgICAgIHJldHVybiBocmVmID09PSBudWxsID8gXCJcIiA6IGhyZWY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVVUkwodXJsKTtcbiAgfVxuXG4gIHNldCBocmVmKHYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdik7XG4gIH1cblxuICBnZXQgb3JpZ2luKCkge1xuICAgIHJlaW5pdGlhbGl6ZVVSTCh0aGlzKTtcblxuICAgIGlmICh0aGlzLnVybCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVVUkxUb1VuaWNvZGVPcmlnaW4odGhpcy51cmwpO1xuICB9XG5cbiAgZ2V0IHByb3RvY29sKCkge1xuICAgIHJlaW5pdGlhbGl6ZVVSTCh0aGlzKTtcblxuICAgIGlmICh0aGlzLnVybCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiOlwiO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVybC5zY2hlbWUgKyBcIjpcIjtcbiAgfVxuXG4gIHNldCBwcm90b2NvbCh2KSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuXG4gICAgaWYgKHRoaXMudXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hhdHdnVVJMLmJhc2ljVVJMUGFyc2UodiArIFwiOlwiLCB7IHVybDogdGhpcy51cmwsIHN0YXRlT3ZlcnJpZGU6IFwic2NoZW1lIHN0YXJ0XCIgfSk7XG4gICAgdXBkYXRlSHJlZih0aGlzKTtcbiAgfVxuXG4gIGdldCB1c2VybmFtZSgpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG5cbiAgICBpZiAodGhpcy51cmwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVybC51c2VybmFtZTtcbiAgfVxuXG4gIHNldCB1c2VybmFtZSh2KSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gXCJcIiB8fCB1cmwuY2Fubm90QmVBQmFzZVVSTCB8fCB1cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoYXR3Z1VSTC5zZXRUaGVVc2VybmFtZSh1cmwsIHYpO1xuICAgIHVwZGF0ZUhyZWYodGhpcyk7XG4gIH1cblxuICBnZXQgcGFzc3dvcmQoKSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC5wYXNzd29yZDtcbiAgfVxuXG4gIHNldCBwYXNzd29yZCh2KSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gXCJcIiB8fCB1cmwuY2Fubm90QmVBQmFzZVVSTCB8fCB1cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoYXR3Z1VSTC5zZXRUaGVQYXNzd29yZCh1cmwsIHYpO1xuICAgIHVwZGF0ZUhyZWYodGhpcyk7XG4gIH1cblxuICBnZXQgaG9zdCgpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG5cbiAgICBpZiAodXJsID09PSBudWxsIHx8IHVybC5ob3N0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBpZiAodXJsLnBvcnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplSG9zdCh1cmwuaG9zdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVIb3N0KHVybC5ob3N0KSArIFwiOlwiICsgd2hhdHdnVVJMLnNlcmlhbGl6ZUludGVnZXIodXJsLnBvcnQpO1xuICB9XG5cbiAgc2V0IGhvc3Qodikge1xuICAgIHJlaW5pdGlhbGl6ZVVSTCh0aGlzKTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcblxuICAgIGlmICh1cmwgPT09IG51bGwgfHwgdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGF0d2dVUkwuYmFzaWNVUkxQYXJzZSh2LCB7IHVybCwgc3RhdGVPdmVycmlkZTogXCJob3N0XCIgfSk7XG4gICAgdXBkYXRlSHJlZih0aGlzKTtcbiAgfVxuXG4gIGdldCBob3N0bmFtZSgpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG5cbiAgICBpZiAodXJsID09PSBudWxsIHx8IHVybC5ob3N0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gd2hhdHdnVVJMLnNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xuICB9XG5cbiAgc2V0IGhvc3RuYW1lKHYpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG5cbiAgICBpZiAodXJsID09PSBudWxsIHx8IHVybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hhdHdnVVJMLmJhc2ljVVJMUGFyc2UodiwgeyB1cmwsIHN0YXRlT3ZlcnJpZGU6IFwiaG9zdG5hbWVcIiB9KTtcbiAgICB1cGRhdGVIcmVmKHRoaXMpO1xuICB9XG5cbiAgZ2V0IHBvcnQoKSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCB8fCB1cmwucG9ydCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVJbnRlZ2VyKHVybC5wb3J0KTtcbiAgfVxuXG4gIHNldCBwb3J0KHYpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG5cbiAgICBpZiAodXJsID09PSBudWxsIHx8IHVybC5ob3N0ID09PSBudWxsIHx8IHVybC5ob3N0ID09PSBcIlwiIHx8IHVybC5jYW5ub3RCZUFCYXNlVVJMIHx8IHVybC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIHVybC5wb3J0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hhdHdnVVJMLmJhc2ljVVJMUGFyc2UodiwgeyB1cmwsIHN0YXRlT3ZlcnJpZGU6IFwicG9ydFwiIH0pO1xuICAgIH1cbiAgICB1cGRhdGVIcmVmKHRoaXMpO1xuICB9XG5cbiAgZ2V0IHBhdGhuYW1lKCkge1xuICAgIHJlaW5pdGlhbGl6ZVVSTCh0aGlzKTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVybDtcblxuICAgIGlmICh1cmwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGlmICh1cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuIHVybC5wYXRoWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBcIi9cIiArIHVybC5wYXRoLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgc2V0IHBhdGhuYW1lKHYpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG5cbiAgICBpZiAodXJsID09PSBudWxsIHx8IHVybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXJsLnBhdGggPSBbXTtcbiAgICB3aGF0d2dVUkwuYmFzaWNVUkxQYXJzZSh2LCB7IHVybCwgc3RhdGVPdmVycmlkZTogXCJwYXRoIHN0YXJ0XCIgfSk7XG4gICAgdXBkYXRlSHJlZih0aGlzKTtcbiAgfVxuXG4gIGdldCBzZWFyY2goKSB7XG4gICAgcmVpbml0aWFsaXplVVJMKHRoaXMpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsO1xuXG4gICAgaWYgKHVybCA9PT0gbnVsbCB8fCB1cmwucXVlcnkgPT09IG51bGwgfHwgdXJsLnF1ZXJ5ID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCI/XCIgKyB1cmwucXVlcnk7XG4gIH1cblxuICBzZXQgc2VhcmNoKHYpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIHVybC5xdWVyeSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdlswXSA9PT0gXCI/XCIgPyB2LnN1YnN0cmluZygxKSA6IHY7XG4gICAgICB1cmwucXVlcnkgPSBcIlwiO1xuICAgICAgd2hhdHdnVVJMLmJhc2ljVVJMUGFyc2UoaW5wdXQsIHtcbiAgICAgICAgdXJsLFxuICAgICAgICBzdGF0ZU92ZXJyaWRlOiBcInF1ZXJ5XCIsXG4gICAgICAgIGVuY29kaW5nT3ZlcnJpZGU6IHRoaXMuX293bmVyRG9jdW1lbnQuY2hhcnNldFxuICAgICAgfSk7XG4gICAgfVxuICAgIHVwZGF0ZUhyZWYodGhpcyk7XG4gIH1cblxuICBnZXQgaGFzaCgpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG5cbiAgICBpZiAodXJsID09PSBudWxsIHx8IHVybC5mcmFnbWVudCA9PT0gbnVsbCB8fCB1cmwuZnJhZ21lbnQgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIiNcIiArIHVybC5mcmFnbWVudDtcbiAgfVxuXG4gIHNldCBoYXNoKHYpIHtcbiAgICByZWluaXRpYWxpemVVUkwodGhpcyk7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cmw7XG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIHVybC5mcmFnbWVudCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdlswXSA9PT0gXCIjXCIgPyB2LnN1YnN0cmluZygxKSA6IHY7XG4gICAgICB1cmwuZnJhZ21lbnQgPSBcIlwiO1xuICAgICAgd2hhdHdnVVJMLmJhc2ljVVJMUGFyc2UoaW5wdXQsIHsgdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImZyYWdtZW50XCIgfSk7XG4gICAgfVxuICAgIHVwZGF0ZUhyZWYodGhpcyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlaW5pdGlhbGl6ZVVSTChoaGV1KSB7XG4gIGlmIChoaGV1LnVybCAhPT0gbnVsbCAmJiBoaGV1LnVybC5zY2hlbWUgPT09IFwiYmxvYlwiICYmIGhoZXUudXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzZXRUaGVVUkwoaGhldSk7XG59XG5cbmZ1bmN0aW9uIHNldFRoZVVSTChoaGV1KSB7XG4gIGNvbnN0IGhyZWYgPSBoaGV1LmdldEF0dHJpYnV0ZShcImhyZWZcIik7XG4gIGlmIChocmVmID09PSBudWxsKSB7XG4gICAgaGhldS51cmwgPSBudWxsO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlVVJMVG9SZXN1bHRpbmdVUkxSZWNvcmQoaHJlZiwgaGhldS5fb3duZXJEb2N1bWVudCk7XG5cbiAgaGhldS51cmwgPSBwYXJzZWQgPT09IFwiZmFpbHVyZVwiID8gbnVsbCA6IHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSHJlZihoaGV1KSB7XG4gIGhoZXUuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB3aGF0d2dVUkwuc2VyaWFsaXplVVJMKGhoZXUudXJsKSk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEZyYW1lRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRnJhbWVFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxJRnJhbWVFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxGcmFtZUVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxJRnJhbWVFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IHJlc291cmNlTG9hZGVyID0gcmVxdWlyZShcIi4uLy4uL2Jyb3dzZXIvcmVzb3VyY2UtbG9hZGVyXCIpO1xuY29uc3QgY29udmVyc2lvbnMgPSByZXF1aXJlKFwid2ViaWRsLWNvbnZlcnNpb25zXCIpO1xuY29uc3QgQ2FudmFzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLkNhbnZhcztcbmNvbnN0IHJlZmxlY3RVUkxBdHRyaWJ1dGUgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikucmVmbGVjdFVSTEF0dHJpYnV0ZTtcblxuY2xhc3MgSFRNTEltYWdlRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBfYXR0ck1vZGlmaWVkKG5hbWUsIHZhbHVlLCBvbGRWYWwpIHtcbiAgICBpZiAobmFtZSA9PT0gXCJzcmNcIiAmJiB2YWx1ZSAhPT0gb2xkVmFsKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IHRoaXMuX293bmVyRG9jdW1lbnQ7XG4gICAgICBpZiAoQ2FudmFzICYmIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLl9oYXNGZWF0dXJlKFwiRmV0Y2hFeHRlcm5hbFJlc291cmNlc1wiLCBcImltZ1wiKSkge1xuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIGlmICghdGhpcy5faW1hZ2UpIHtcbiAgICAgICAgICB0aGlzLl9pbWFnZSA9IG5ldyBDYW52YXMuSW1hZ2UoKTtcbiAgICAgICAgICAvLyBJbnN0YWxsIGFuIGVycm9yIGhhbmRsZXIgdGhhdCBqdXN0IHJlbWVtYmVycyB0aGUgZXJyb3IuIEl0IGlzIHRoZW5cbiAgICAgICAgICAvLyB0aHJvd24gaW4gdGhlIGNhbGxiYWNrIG9mIHJlc291cmNlTG9hZGVyLmxvYWQoKSBiZWxvdy5cbiAgICAgICAgICB0aGlzLl9pbWFnZS5vbmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50U3JjID0gbnVsbDtcbiAgICAgICAgcmVzb3VyY2VMb2FkZXIubG9hZCh0aGlzLCB0aGlzLnNyYywge30sIChkYXRhLCB1cmwsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXR1cyBjb2RlOiBcIiArIHJlc3BvbnNlLnN0YXR1c0NvZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5faW1hZ2Uuc291cmNlID0gZGF0YTtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcmMgPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VwZXIuX2F0dHJNb2RpZmllZChuYW1lLCB2YWx1ZSwgb2xkVmFsKTtcbiAgfVxuXG4gIGdldCBfYWNjZXB0KCkge1xuICAgIHJldHVybiBcImltYWdlL3BuZyxpbWFnZS8qO3E9MC44LCovKjtxPTAuNVwiO1xuICB9XG5cbiAgZ2V0IHNyYygpIHtcbiAgICByZXR1cm4gcmVmbGVjdFVSTEF0dHJpYnV0ZSh0aGlzLCBcInNyY1wiKTtcbiAgfVxuXG4gIHNldCBzcmModmFsdWUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNyY1wiLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQgaGVpZ2h0KCkge1xuICAgIC8vIEp1c3QgbGlrZSBvbiBicm93c2VycywgaWYgbm8gd2lkdGggLyBoZWlnaHQgaXMgZGVmaW5lZCwgd2UgZmFsbCBiYWNrIG9uIHRoZVxuICAgIC8vIGRpbWVuc2lvbnMgb2YgdGhlIGludGVybmFsIGltYWdlIGRhdGEuXG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiaGVpZ2h0XCIpID9cbiAgICAgIGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXSh0aGlzLmdldEF0dHJpYnV0ZShcImhlaWdodFwiKSkgOiB0aGlzLm5hdHVyYWxIZWlnaHQ7XG4gIH1cblxuICBzZXQgaGVpZ2h0KFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBTdHJpbmcoVikpO1xuICB9XG5cbiAgZ2V0IHdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIndpZHRoXCIpID9cbiAgICAgIGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXSh0aGlzLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpKSA6IHRoaXMubmF0dXJhbFdpZHRoO1xuICB9XG5cbiAgc2V0IHdpZHRoKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFN0cmluZyhWKSk7XG4gIH1cblxuICBnZXQgbmF0dXJhbEhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW1hZ2UgPyB0aGlzLl9pbWFnZS5oZWlnaHQgOiAwO1xuICB9XG5cbiAgZ2V0IG5hdHVyYWxXaWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW1hZ2UgPyB0aGlzLl9pbWFnZS53aWR0aCA6IDA7XG4gIH1cblxuICBnZXQgY29tcGxldGUoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5faW1hZ2UgJiYgdGhpcy5faW1hZ2UuY29tcGxldGUpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTcmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTcmMgfHwgXCJcIjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxJbWFnZUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5cbmNvbnN0IEV2ZW50ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9FdmVudFwiKTtcbmNvbnN0IEZpbGVMaXN0ID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC9GaWxlTGlzdFwiKTtcbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcbmNvbnN0IGludGVybmFsQ29uc3RhbnRzID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IGludGVybmFsQ29uc3RhbnRzLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBjbG9uaW5nU3RlcHMgPSBpbnRlcm5hbENvbnN0YW50cy5jbG9uaW5nU3RlcHM7XG5jb25zdCBjbG9zZXN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmNsb3Nlc3Q7XG5jb25zdCBpc0Rpc2FibGVkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZm9ybS1jb250cm9sc1wiKS5pc0Rpc2FibGVkO1xuY29uc3Qgc2FuaXRpemVWYWx1ZUJ5VHlwZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2Zvcm0tY29udHJvbHNcIikuc2FuaXRpemVWYWx1ZUJ5VHlwZTtcblxuY29uc3QgZmlsZXNTeW1ib2wgPSBTeW1ib2woXCJmaWxlc1wiKTtcblxuY29uc3Qgc2VsZWN0QWxsb3dlZFR5cGVzID0gbmV3IFNldChbXCJ0ZXh0XCIsIFwic2VhcmNoXCIsIFwidGVsXCIsIFwidXJsXCIsIFwicGFzc3dvcmRcIiwgXCJlbWFpbFwiLCBcImRhdGVcIiwgXCJtb250aFwiLCBcIndlZWtcIixcbiAgXCJ0aW1lXCIsIFwiZGF0ZXRpbWUtbG9jYWxcIiwgXCJjb2xvclwiLCBcImZpbGVcIiwgXCJudW1iZXJcIl0pO1xuXG5jb25zdCB2YXJpYWJsZUxlbmd0aFNlbGVjdGlvbkFsbG93ZWRUeXBlcyA9IG5ldyBTZXQoW1widGV4dFwiLCBcInNlYXJjaFwiLCBcInRlbFwiLCBcInVybFwiLCBcInBhc3N3b3JkXCJdKTtcblxuZnVuY3Rpb24gYWxsb3dTZWxlY3QodHlwZSkge1xuICByZXR1cm4gc2VsZWN0QWxsb3dlZFR5cGVzLmhhcyh0eXBlLnRvTG93ZXJDYXNlKCkpO1xufVxuXG5mdW5jdGlvbiBhbGxvd1ZhcmlhYmxlTGVuZ3RoU2VsZWN0aW9uKHR5cGUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTGVuZ3RoU2VsZWN0aW9uQWxsb3dlZFR5cGVzLmhhcyh0eXBlLnRvTG93ZXJDYXNlKCkpO1xufVxuXG5jbGFzcyBIVE1MSW5wdXRFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoYXJncywgcHJpdmF0ZURhdGEpO1xuXG4gICAgaWYgKCF0aGlzLnR5cGUpIHtcbiAgICAgIHRoaXMudHlwZSA9IFwidGV4dFwiO1xuICAgIH1cbiAgICB0aGlzLl9zZWxlY3Rpb25TdGFydCA9IHRoaXMuX3NlbGVjdGlvbkVuZCA9IDA7XG4gICAgdGhpcy5fc2VsZWN0aW9uRGlyZWN0aW9uID0gXCJub25lXCI7XG4gICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2RpcnR5VmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGVja2VkbmVzcyA9IGZhbHNlO1xuICAgIHRoaXMuX2RpcnR5Q2hlY2tlZG5lc3MgPSBmYWxzZTtcblxuICAgIC8vIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgdGhlIGNhbmNlbGVkIGFjdGl2YXRpb24gc3RlcHMgZm9yIHJhZGlvIGlucHV0czpcbiAgICAvLyBcIlRoZSBjYW5jZWxlZCBhY3RpdmF0aW9uIHN0ZXBzIGNvbnNpc3Qgb2Ygc2V0dGluZyB0aGUgY2hlY2tlZG5lc3MgYW5kIHRoZSBlbGVtZW50J3MgaW5kZXRlcm1pbmF0ZSBJRExcbiAgICAvLyBhdHRyaWJ1dGUgYmFjayB0byB0aGUgdmFsdWVzIHRoZXkgaGFkIGJlZm9yZSB0aGUgcHJlLWNsaWNrIGFjdGl2YXRpb24gc3RlcHMgd2VyZSBydW4uXCJcbiAgICB0aGlzLl9wcmVDYW5jZWxTdGF0ZSA9IG51bGw7XG4gIH1cblxuICBfZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgX3ByZUNsaWNrQWN0aXZhdGlvblN0ZXBzKCkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiY2hlY2tib3hcIikge1xuICAgICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJyYWRpb1wiKSB7XG4gICAgICB0aGlzLl9wcmVDYW5jZWxTdGF0ZSA9IHRoaXMuY2hlY2tlZDtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgX2NhbmNlbGVkQWN0aXZhdGlvblN0ZXBzKCkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiY2hlY2tib3hcIikge1xuICAgICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJyYWRpb1wiKSB7XG4gICAgICBpZiAodGhpcy5fcHJlQ2FuY2VsU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gdGhpcy5fcHJlQ2FuY2VsU3RhdGU7XG4gICAgICAgIHRoaXMuX3ByZUNhbmNlbFN0YXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfYWN0aXZhdGlvbkJlaGF2aW9yKCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiKSB7XG4gICAgICBjb25zdCBpbnB1dEV2ZW50ID0gRXZlbnQuY3JlYXRlSW1wbChbXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfV0sIHt9KTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChpbnB1dEV2ZW50KTtcblxuICAgICAgY29uc3QgY2hhbmdlRXZlbnQgPSBFdmVudC5jcmVhdGVJbXBsKFtcImNoYW5nZVwiLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfV0sIHt9KTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChjaGFuZ2VFdmVudCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwic3VibWl0XCIpIHtcbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm07XG4gICAgICBpZiAoZm9ybSkge1xuICAgICAgICBmb3JtLl9kaXNwYXRjaFN1Ym1pdEV2ZW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2F0dHJNb2RpZmllZChuYW1lKSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRoaXMpO1xuICAgIGlmICghdGhpcy5fZGlydHlWYWx1ZSAmJiBuYW1lID09PSBcInZhbHVlXCIpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gc2FuaXRpemVWYWx1ZUJ5VHlwZSh0aGlzLCB3cmFwcGVyLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fZGlydHlDaGVja2VkbmVzcyAmJiBuYW1lID09PSBcImNoZWNrZWRcIikge1xuICAgICAgdGhpcy5fY2hlY2tlZG5lc3MgPSB3cmFwcGVyLmRlZmF1bHRDaGVja2VkO1xuICAgICAgaWYgKHRoaXMuX2NoZWNrZWRuZXNzKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZU90aGVyUmFkaW9DaGVja2VkbmVzcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuYW1lID09PSBcIm5hbWVcIiB8fCBuYW1lID09PSBcInR5cGVcIikge1xuICAgICAgaWYgKHRoaXMuX2NoZWNrZWRuZXNzKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZU90aGVyUmFkaW9DaGVja2VkbmVzcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyLl9hdHRyTW9kaWZpZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICBfZm9ybVJlc2V0KCkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKTtcbiAgICB0aGlzLl92YWx1ZSA9IHNhbml0aXplVmFsdWVCeVR5cGUodGhpcywgd3JhcHBlci5kZWZhdWx0VmFsdWUpO1xuICAgIHRoaXMuX2RpcnR5VmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGVja2VkbmVzcyA9IHdyYXBwZXIuZGVmYXVsdENoZWNrZWQ7XG4gICAgdGhpcy5fZGlydHlDaGVja2VkbmVzcyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLl9jaGVja2VkbmVzcykge1xuICAgICAgdGhpcy5fcmVtb3ZlT3RoZXJSYWRpb0NoZWNrZWRuZXNzKCk7XG4gICAgfVxuICB9XG4gIF9jaGFuZ2VkRm9ybU93bmVyKCkge1xuICAgIGlmICh0aGlzLl9jaGVja2VkbmVzcykge1xuICAgICAgdGhpcy5fcmVtb3ZlT3RoZXJSYWRpb0NoZWNrZWRuZXNzKCk7XG4gICAgfVxuICB9XG4gIF9yZW1vdmVPdGhlclJhZGlvQ2hlY2tlZG5lc3MoKSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRoaXMpO1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9yYWRpb0J1dHRvbkdyb3VwUm9vdDtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gd3JhcHBlci5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IGRvbVN5bWJvbFRyZWUudHJlZUl0ZXJhdG9yKHJvb3QpO1xuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGRlc2NlbmRhbnRzKSB7XG4gICAgICBpZiAoY2FuZGlkYXRlLl9yYWRpb0J1dHRvbkdyb3VwUm9vdCAhPT0gcm9vdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FuZGlkYXRlV3JhcHBlciA9IGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKGNhbmRpZGF0ZSk7XG4gICAgICBpZiAoIWNhbmRpZGF0ZVdyYXBwZXIubmFtZSB8fCBjYW5kaWRhdGVXcmFwcGVyLm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gbmFtZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhbmRpZGF0ZSAhPT0gdGhpcykge1xuICAgICAgICBjYW5kaWRhdGUuX2NoZWNrZWRuZXNzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCBfcmFkaW9CdXR0b25Hcm91cFJvb3QoKSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRoaXMpO1xuICAgIGlmICh0aGlzLnR5cGUgIT09IFwicmFkaW9cIiB8fCAhd3JhcHBlci5uYW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgZSA9IGRvbVN5bWJvbFRyZWUucGFyZW50KHRoaXMpO1xuICAgIHdoaWxlIChlKSB7XG4gICAgICAvLyByb290IG5vZGUgb2YgdGhpcyBob21lIHN1YiB0cmVlXG4gICAgICAvLyBvciB0aGUgZm9ybSBlbGVtZW50IHdlIGJlbG9uZyB0b1xuICAgICAgaWYgKCFkb21TeW1ib2xUcmVlLnBhcmVudChlKSB8fCBlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09IFwiRk9STVwiKSB7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfVxuICAgICAgZSA9IGRvbVN5bWJvbFRyZWUucGFyZW50KGUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gY2xvc2VzdCh0aGlzLCBcImZvcm1cIik7XG4gIH1cbiAgZ2V0IGNoZWNrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoZWNrZWRuZXNzO1xuICB9XG4gIHNldCBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICB0aGlzLl9jaGVja2VkbmVzcyA9IEJvb2xlYW4oY2hlY2tlZCk7XG4gICAgdGhpcy5fZGlydHlDaGVja2VkbmVzcyA9IHRydWU7XG4gICAgaWYgKHRoaXMuX2NoZWNrZWRuZXNzKSB7XG4gICAgICB0aGlzLl9yZW1vdmVPdGhlclJhZGlvQ2hlY2tlZG5lc3MoKTtcbiAgICB9XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIGlmICh0aGlzLl92YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodmFsKSB7XG4gICAgdGhpcy5fZGlydHlWYWx1ZSA9IHRydWU7XG5cbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gc2FuaXRpemVWYWx1ZUJ5VHlwZSh0aGlzLCBTdHJpbmcodmFsKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2VsZWN0aW9uU3RhcnQgPSAwO1xuICAgIHRoaXMuX3NlbGVjdGlvbkVuZCA9IDA7XG4gICAgdGhpcy5fc2VsZWN0aW9uRGlyZWN0aW9uID0gXCJub25lXCI7XG4gIH1cbiAgZ2V0IGZpbGVzKCkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiZmlsZVwiKSB7XG4gICAgICB0aGlzW2ZpbGVzU3ltYm9sXSA9IHRoaXNbZmlsZXNTeW1ib2xdIHx8IEZpbGVMaXN0LmNyZWF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2ZpbGVzU3ltYm9sXSA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzW2ZpbGVzU3ltYm9sXTtcbiAgfVxuICBnZXQgdHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgIHJldHVybiB0eXBlID8gdHlwZS50b0xvd2VyQ2FzZSgpIDogXCJ0ZXh0XCI7XG4gIH1cbiAgc2V0IHR5cGUodHlwZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwidHlwZVwiLCB0eXBlKTtcbiAgfVxuXG4gIF9kaXNwYXRjaFNlbGVjdEV2ZW50KCkge1xuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5fb3duZXJEb2N1bWVudC5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7XG4gICAgZXZlbnQuaW5pdEV2ZW50KFwic2VsZWN0XCIsIHRydWUsIHRydWUpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH1cbiAgX2dldFZhbHVlTGVuZ3RoKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy52YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHRoaXMudmFsdWUubGVuZ3RoIDogMDtcbiAgfVxuXG4gIHNlbGVjdCgpIHtcbiAgICBpZiAoIWFsbG93U2VsZWN0KHRoaXMudHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgdGhpcy5fc2VsZWN0aW9uRW5kID0gdGhpcy5fZ2V0VmFsdWVMZW5ndGgoKTtcbiAgICB0aGlzLl9zZWxlY3Rpb25EaXJlY3Rpb24gPSBcIm5vbmVcIjtcbiAgICB0aGlzLl9kaXNwYXRjaFNlbGVjdEV2ZW50KCk7XG4gIH1cblxuICBnZXQgc2VsZWN0aW9uU3RhcnQoKSB7XG4gICAgaWYgKCFhbGxvd1ZhcmlhYmxlTGVuZ3RoU2VsZWN0aW9uKHRoaXMudHlwZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25TdGFydDtcbiAgfVxuXG4gIHNldCBzZWxlY3Rpb25TdGFydChzdGFydCkge1xuICAgIGlmICghYWxsb3dWYXJpYWJsZUxlbmd0aFNlbGVjdGlvbih0aGlzLnR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgTWF0aC5tYXgoc3RhcnQsIHRoaXMuX3NlbGVjdGlvbkVuZCksIHRoaXMuX3NlbGVjdGlvbkRpcmVjdGlvbik7XG4gIH1cblxuICBnZXQgc2VsZWN0aW9uRW5kKCkge1xuICAgIGlmICghYWxsb3dWYXJpYWJsZUxlbmd0aFNlbGVjdGlvbih0aGlzLnR5cGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uRW5kO1xuICB9XG5cbiAgc2V0IHNlbGVjdGlvbkVuZChlbmQpIHtcbiAgICBpZiAoIWFsbG93VmFyaWFibGVMZW5ndGhTZWxlY3Rpb24odGhpcy50eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5fc2VsZWN0aW9uU3RhcnQsIGVuZCwgdGhpcy5fc2VsZWN0aW9uRGlyZWN0aW9uKTtcbiAgfVxuXG4gIGdldCBzZWxlY3Rpb25EaXJlY3Rpb24oKSB7XG4gICAgaWYgKCFhbGxvd1ZhcmlhYmxlTGVuZ3RoU2VsZWN0aW9uKHRoaXMudHlwZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25EaXJlY3Rpb247XG4gIH1cblxuICBzZXQgc2VsZWN0aW9uRGlyZWN0aW9uKGRpcikge1xuICAgIGlmICghYWxsb3dWYXJpYWJsZUxlbmd0aFNlbGVjdGlvbih0aGlzLnR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLl9zZWxlY3Rpb25TdGFydCwgdGhpcy5fc2VsZWN0aW9uRW5kLCBkaXIpO1xuICB9XG5cbiAgc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCwgZGlyKSB7XG4gICAgaWYgKCFhbGxvd1ZhcmlhYmxlTGVuZ3RoU2VsZWN0aW9uKHRoaXMudHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZWxlY3Rpb25FbmQgPSBNYXRoLm1pbihlbmQsIHRoaXMuX2dldFZhbHVlTGVuZ3RoKCkpO1xuICAgIHRoaXMuX3NlbGVjdGlvblN0YXJ0ID0gTWF0aC5taW4oc3RhcnQsIHRoaXMuX3NlbGVjdGlvbkVuZCk7XG4gICAgdGhpcy5fc2VsZWN0aW9uRGlyZWN0aW9uID0gZGlyID09PSBcImZvcndhcmRcIiB8fCBkaXIgPT09IFwiYmFja3dhcmRcIiA/IGRpciA6IFwibm9uZVwiO1xuICAgIHRoaXMuX2Rpc3BhdGNoU2VsZWN0RXZlbnQoKTtcbiAgfVxuXG4gIHNldFJhbmdlVGV4dChyZXBsLCBzdGFydCwgZW5kLCBzZWxlY3Rpb25Nb2RlKSB7XG4gICAgaWYgKCFhbGxvd1ZhcmlhYmxlTGVuZ3RoU2VsZWN0aW9uKHRoaXMudHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtcbiAgICB9XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uU3RhcnQ7XG4gICAgICBlbmQgPSB0aGlzLl9zZWxlY3Rpb25FbmQ7XG4gICAgfSBlbHNlIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpO1xuICAgIH1cblxuICAgIHN0YXJ0ID0gTWF0aC5taW4oc3RhcnQsIHRoaXMuX2dldFZhbHVlTGVuZ3RoKCkpO1xuICAgIGVuZCA9IE1hdGgubWluKGVuZCwgdGhpcy5fZ2V0VmFsdWVMZW5ndGgoKSk7XG5cbiAgICBjb25zdCB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGxldCBzZWxTdGFydCA9IHRoaXMuX3NlbGVjdGlvblN0YXJ0O1xuICAgIGxldCBzZWxFbmQgPSB0aGlzLl9zZWxlY3Rpb25FbmQ7XG5cbiAgICB0aGlzLnZhbHVlID0gdmFsLnNsaWNlKDAsIHN0YXJ0KSArIHJlcGwgKyB2YWwuc2xpY2UoZW5kKTtcblxuICAgIGNvbnN0IG5ld0VuZCA9IHN0YXJ0ICsgdGhpcy52YWx1ZS5sZW5ndGg7XG5cbiAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgbmV3RW5kKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbk1vZGUgPT09IFwic3RhcnRcIikge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgc3RhcnQpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gXCJlbmRcIikge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShuZXdFbmQsIG5ld0VuZCk7XG4gICAgfSBlbHNlIHsgLy8gcHJlc2VydmVcbiAgICAgIGNvbnN0IGRlbHRhID0gcmVwbC5sZW5ndGggLSAoZW5kIC0gc3RhcnQpO1xuXG4gICAgICBpZiAoc2VsU3RhcnQgPiBlbmQpIHtcbiAgICAgICAgc2VsU3RhcnQgKz0gZGVsdGE7XG4gICAgICB9IGVsc2UgaWYgKHNlbFN0YXJ0ID4gc3RhcnQpIHtcbiAgICAgICAgc2VsU3RhcnQgPSBzdGFydDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbEVuZCA+IGVuZCkge1xuICAgICAgICBzZWxFbmQgKz0gZGVsdGE7XG4gICAgICB9IGVsc2UgaWYgKHNlbEVuZCA+IHN0YXJ0KSB7XG4gICAgICAgIHNlbEVuZCA9IG5ld0VuZDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShzZWxTdGFydCwgc2VsRW5kKTtcbiAgICB9XG4gIH1cblxuICBzZXQgbWF4TGVuZ3RoKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpO1xuICAgIH1cbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcIm1heGxlbmd0aFwiLCBTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIGdldCBtYXhMZW5ndGgoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcIm1heGxlbmd0aFwiKSkge1xuICAgICAgcmV0dXJuIDUyNDI4ODsgLy8gc3RvbGUgdGhpcyBmcm9tIGNocm9tZVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIikpO1xuICB9XG5cbiAgc2V0IG1pbkxlbmd0aCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSKTtcbiAgICB9XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJtaW5sZW5ndGhcIiwgU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICBnZXQgbWluTGVuZ3RoKCkge1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJtaW5sZW5ndGhcIikpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5nZXRBdHRyaWJ1dGUoXCJtaW5sZW5ndGhcIikpO1xuICB9XG5cbiAgZ2V0IHNpemUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcInNpemVcIikpIHtcbiAgICAgIHJldHVybiAyMDtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKFwic2l6ZVwiKSk7XG4gIH1cblxuICBzZXQgc2l6ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUik7XG4gICAgfVxuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic2l6ZVwiLCBTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIFtjbG9uaW5nU3RlcHNdKGNvcHksIG5vZGUpIHtcbiAgICBjb3B5Ll92YWx1ZSA9IG5vZGUuX3ZhbHVlO1xuICAgIGNvcHkuX2NoZWNrZWRuZXNzID0gbm9kZS5fY2hlY2tlZG5lc3M7XG4gICAgY29weS5fZGlydHlWYWx1ZSA9IG5vZGUuX2RpcnR5VmFsdWU7XG4gICAgY29weS5fZGlydHlDaGVja2VkbmVzcyA9IG5vZGUuX2RpcnR5Q2hlY2tlZG5lc3M7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MSW5wdXRFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MTElFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MTElFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgTW91c2VFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvTW91c2VFdmVudFwiKTtcbmNvbnN0IGNsb3Nlc3QgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuY2xvc2VzdDtcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcblxuZnVuY3Rpb24gaXNMYWJlbGFibGUobm9kZSkge1xuICAvLyBsYWJlbGFibGUgbG9naWMgZGVmaW5lZCBhdDogaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1sYWJlbFxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gMSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaCAobm9kZS50YWdOYW1lKSB7XG4gICAgY2FzZSBcIkJVVFRPTlwiOlxuICAgIGNhc2UgXCJLRVlHRU5cIjpcbiAgICBjYXNlIFwiTUVURVJcIjpcbiAgICBjYXNlIFwiT1VUUFVUXCI6XG4gICAgY2FzZSBcIlBST0dSRVNTXCI6XG4gICAgY2FzZSBcIlNFTEVDVFwiOlxuICAgIGNhc2UgXCJURVhUQVJFQVwiOlxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIFwiSU5QVVRcIjpcbiAgICAgIHJldHVybiBub2RlLnR5cGUgIT09IFwiaGlkZGVuXCI7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNlbmRDbGlja1RvQXNzb2NpYXRlZE5vZGUobm9kZSkge1xuICBub2RlLmRpc3BhdGNoRXZlbnQoXG4gICAgTW91c2VFdmVudC5jcmVhdGVJbXBsKFtcImNsaWNrXCIsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgdmlldzogbm9kZS5vd25lckRvY3VtZW50ID8gbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IDogbnVsbCxcbiAgICAgIHNjcmVlblg6IDAsXG4gICAgICBzY3JlZW5ZOiAwLFxuICAgICAgY2xpZW50WDogMCxcbiAgICAgIGNsaWVudFk6IDAsXG4gICAgICBidXR0b246IDAsXG4gICAgICBkZXRhaWw6IDEsXG4gICAgICByZWxhdGVkVGFyZ2V0OiBudWxsXG4gICAgfV0pXG4gICk7XG59XG5cbmNsYXNzIEhUTUxMYWJlbEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgX2FjdGl2YXRpb25CZWhhdmlvcigpIHtcbiAgICBpZiAodGhpcy5oYXNBdHRyaWJ1dGUoXCJmb3JcIikpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRBdHRyaWJ1dGUoXCJmb3JcIikpO1xuICAgICAgaWYgKG5vZGUgJiYgaXNMYWJlbGFibGUobm9kZSkpIHtcbiAgICAgICAgc2VuZENsaWNrVG9Bc3NvY2lhdGVkTm9kZShub2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBkZXNjZW5kYW50IG9mIGRvbVN5bWJvbFRyZWUudHJlZUl0ZXJhdG9yKHRoaXMpKSB7XG4gICAgICAgIGlmIChpc0xhYmVsYWJsZShkZXNjZW5kYW50KSkge1xuICAgICAgICAgIHNlbmRDbGlja1RvQXNzb2NpYXRlZE5vZGUoZGVzY2VuZGFudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gY2xvc2VzdCh0aGlzLCBcImZvcm1cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MTGFiZWxFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgY2xvc2VzdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5jbG9zZXN0O1xuXG5jbGFzcyBIVE1MTGVnZW5kRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gY2xvc2VzdCh0aGlzLCBcImZvcm1cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MTGVnZW5kRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBMaW5rU3R5bGVJbXBsID0gcmVxdWlyZShcIi4vTGlua1N0eWxlLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCByZWZsZWN0VVJMQXR0cmlidXRlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLnJlZmxlY3RVUkxBdHRyaWJ1dGU7XG5jb25zdCBmZXRjaFN0eWxlc2hlZXQgPSByZXF1aXJlKFwiLi4vaGVscGVycy9zdHlsZXNoZWV0c1wiKS5mZXRjaFN0eWxlc2hlZXQ7XG5jb25zdCBwYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZG9jdW1lbnQtYmFzZS11cmxcIikucGFyc2VVUkxUb1Jlc3VsdGluZ1VSTFJlY29yZDtcbmNvbnN0IHdoYXR3Z1VSTCA9IHJlcXVpcmUoXCJ3aGF0d2ctdXJsXCIpO1xuXG4vLyBJbXBvcnRhbnQgcmVhZGluZzogXCJhcHByb3ByaWF0ZSB0aW1lcyB0byBvYnRhaW4gdGhlIHJlc291cmNlXCIgaW5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlbWFudGljcy5odG1sI2xpbmstdHlwZS1zdHlsZXNoZWV0XG5cbmNsYXNzIEhUTUxMaW5rRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBfYXR0YWNoKCkge1xuICAgIHN1cGVyLl9hdHRhY2goKTtcblxuICAgIGlmIChpc0V4dGVybmFsUmVzb3VyY2VMaW5rKHRoaXMpKSB7XG4gICAgICBvYnRhaW5UaGVSZXNvdXJjZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBfYXR0ck1vZGlmaWVkKG5hbWUsIHZhbHVlLCBvbGRWYWx1ZSkge1xuICAgIHN1cGVyLl9hdHRyTW9kaWZpZWQobmFtZSwgdmFsdWUsIG9sZFZhbHVlKTtcblxuICAgIGlmIChuYW1lID09PSBcImhyZWZcIiAmJiB0aGlzLl9hdHRhY2hlZCAmJiBpc0V4dGVybmFsUmVzb3VyY2VMaW5rKHRoaXMpKSB7XG4gICAgICBvYnRhaW5UaGVSZXNvdXJjZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBnZXQgX2FjY2VwdCgpIHtcbiAgICByZXR1cm4gXCJ0ZXh0L2NzcywqLyo7cT0wLjFcIjtcbiAgfVxuXG4gIGdldCBocmVmKCkge1xuICAgIHJldHVybiByZWZsZWN0VVJMQXR0cmlidXRlKHRoaXMsIFwiaHJlZlwiKTtcbiAgfVxuXG4gIHNldCBocmVmKHZhbHVlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHZhbHVlKTtcbiAgfVxufVxuXG5pZGxVdGlscy5taXhpbihIVE1MTGlua0VsZW1lbnRJbXBsLnByb3RvdHlwZSwgTGlua1N0eWxlSW1wbC5wcm90b3R5cGUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxMaW5rRWxlbWVudEltcGxcbn07XG5cbmZ1bmN0aW9uIG9idGFpblRoZVJlc291cmNlKGVsKSB7XG4gIGNvbnN0IGhyZWYgPSBlbC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpO1xuXG4gIGlmIChocmVmID09PSBudWxsIHx8IGhyZWYgPT09IFwiXCIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB1cmwgPSBwYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkKGhyZWYsIGVsLl9vd25lckRvY3VtZW50KTtcbiAgaWYgKHVybCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzZXJpYWxpemVkID0gd2hhdHdnVVJMLnNlcmlhbGl6ZVVSTCh1cmwpO1xuXG4gIGZldGNoU3R5bGVzaGVldChlbCwgc2VyaWFsaXplZCwgZWwuc2hlZXQpO1xufVxuXG5mdW5jdGlvbiBpc0V4dGVybmFsUmVzb3VyY2VMaW5rKGVsKSB7XG4gIC8vIGZvciBvdXIgcHVycG9zZXMsIG9ubHkgc3R5bGVzaGVldHMgY2FuIGJlIGV4dGVybmFsIHJlc291cmNlIGxpbmtzXG4gIGNvbnN0IHdyYXBwZXIgPSBpZGxVdGlscy53cmFwcGVyRm9ySW1wbChlbCk7XG4gIGlmICghLyg/OlsgXFx0XFxuXFxyXFxmXXxeKXN0eWxlc2hlZXQoPzpbIFxcdFxcblxcclxcZl18JCkvaS50ZXN0KHdyYXBwZXIucmVsKSkge1xuICAgIC8vIHJlbCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRva2VucywgYW5kIHRoZSBvcmlnaW5hbCByZWwgdHlwZXNcbiAgICAvLyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQm9vbGVhbihlbC5ocmVmKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MTWFwRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBnZXQgYXJlYXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJBUkVBXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTE1hcEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3Qgbm90SW1wbGVtZW50ZWQgPSByZXF1aXJlKFwiLi4vLi4vYnJvd3Nlci9ub3QtaW1wbGVtZW50ZWRcIik7XG5jb25zdCByZWZsZWN0VVJMQXR0cmlidXRlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzXCIpLnJlZmxlY3RVUkxBdHRyaWJ1dGU7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5cbmZ1bmN0aW9uIGdldFRpbWVSYW5nZUR1bW15KCkge1xuICByZXR1cm4ge1xuICAgIGxlbmd0aDogMCxcbiAgICBzdGFydCgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0sXG4gICAgZW5kKCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9O1xufVxuXG5jbGFzcyBIVE1MTWVkaWFFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgc3VwZXIoYXJncywgcHJpdmF0ZURhdGEpO1xuXG4gICAgdGhpcy5fbXV0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl92b2x1bWUgPSAxLjA7XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gMDtcbiAgICB0aGlzLm5ldHdvcmtTdGF0ZSA9IDA7XG4gICAgdGhpcy5jdXJyZW50VGltZSA9IDA7XG4gICAgdGhpcy5jdXJyZW50U3JjID0gXCJcIjtcbiAgICB0aGlzLmJ1ZmZlcmVkID0gZ2V0VGltZVJhbmdlRHVtbXkoKTtcbiAgICB0aGlzLnNlZWtpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmR1cmF0aW9uID0gMDtcbiAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gICAgdGhpcy5wbGF5ZWQgPSBnZXRUaW1lUmFuZ2VEdW1teSgpO1xuICAgIHRoaXMuc2Vla2FibGUgPSBnZXRUaW1lUmFuZ2VEdW1teSgpO1xuICAgIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLmF1ZGlvVHJhY2tzID0gW107XG4gICAgdGhpcy52aWRlb1RyYWNrcyA9IFtdO1xuICAgIHRoaXMudGV4dFRyYWNrcyA9IFtdO1xuICB9XG4gIC8vIEltcGxlbWVudGVkIGFjY29yaW5nIHRvIFczQyBEcmFmdCAyMiBBdWd1c3QgMjAxMlxuICBzZXQgZGVmYXVsdFBsYXliYWNrUmF0ZSh2KSB7XG4gICAgaWYgKHYgPT09IDAuMCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVmYXVsdFBsYXliYWNrUmF0ZSAhPT0gdikge1xuICAgICAgdGhpcy5fZGVmYXVsdFBsYXliYWNrUmF0ZSA9IHY7XG4gICAgICB0aGlzLl9kaXNwYXRjaFJhdGVDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBfZGlzcGF0Y2hSYXRlQ2hhbmdlKCkge1xuICAgIGNvbnN0IGV2ID0gdGhpcy5fb3duZXJEb2N1bWVudC5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7XG4gICAgZXYuaW5pdEV2ZW50KFwicmF0ZWNoYW5nZVwiLCBmYWxzZSwgZmFsc2UpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldik7XG4gIH1cbiAgZ2V0IGRlZmF1bHRQbGF5YmFja1JhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRQbGF5YmFja1JhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIDEuMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRQbGF5YmFja1JhdGU7XG4gIH1cbiAgZ2V0IHBsYXliYWNrUmF0ZSgpIHtcbiAgICBpZiAodGhpcy5fcGxheWJhY2tSYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAxLjA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9wbGF5YmFja1JhdGU7XG4gIH1cbiAgc2V0IHBsYXliYWNrUmF0ZSh2KSB7XG4gICAgaWYgKHYgIT09IHRoaXMuX3BsYXliYWNrUmF0ZSkge1xuICAgICAgdGhpcy5fcGxheWJhY2tSYXRlID0gdjtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoUmF0ZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuICBnZXQgbXV0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX211dGVkO1xuICB9XG4gIF9kaXNwYXRjaFZvbHVtZUNoYW5nZSgpIHtcbiAgICBjb25zdCBldiA9IHRoaXMuX293bmVyRG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO1xuICAgIGV2LmluaXRFdmVudChcInZvbHVtZWNoYW5nZVwiLCBmYWxzZSwgZmFsc2UpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldik7XG4gIH1cbiAgc2V0IG11dGVkKHYpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5fbXV0ZWQpIHtcbiAgICAgIHRoaXMuX211dGVkID0gdjtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoVm9sdW1lQ2hhbmdlKCk7XG4gICAgfVxuICB9XG4gIGdldCBkZWZhdWx0TXV0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwibXV0ZWRcIikgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRlZmF1bHRNdXRlZCh2KSB7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwibXV0ZWRcIiwgdik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwibXV0ZWRcIik7XG4gICAgfVxuICB9XG4gIGdldCB2b2x1bWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZvbHVtZTtcbiAgfVxuICBzZXQgdm9sdW1lKHYpIHtcbiAgICBpZiAodiA8IDAgfHwgdiA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3ZvbHVtZSAhPT0gdikge1xuICAgICAgdGhpcy5fdm9sdW1lID0gdjtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoVm9sdW1lQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgICAvLyBOb3QgKHlldCkgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHNwZWNcbiAgICAvLyBTaG91bGQgcmV0dXJuIHNhbmUgZGVmYXVsdCB2YWx1ZXNcbiAgbG9hZCgpIHtcbiAgICBub3RJbXBsZW1lbnRlZChcIkhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLmxvYWRcIiwgdGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXcpO1xuICB9XG4gIGNhblBsYXlUeXBlKCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHBsYXkoKSB7XG4gICAgbm90SW1wbGVtZW50ZWQoXCJIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5wbGF5XCIsIHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3KTtcbiAgfVxuICBwYXVzZSgpIHtcbiAgICBub3RJbXBsZW1lbnRlZChcIkhUTUxNZWRpYUVsZW1lbnQucHJvdG90eXBlLnBhdXNlXCIsIHRoaXMuX293bmVyRG9jdW1lbnQuX2RlZmF1bHRWaWV3KTtcbiAgfVxuICBhZGRUZXh0VHJhY2soKSB7XG4gICAgbm90SW1wbGVtZW50ZWQoXCJIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZS5hZGROZXh0VHJhY2tcIiwgdGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXcpO1xuICB9XG5cbiAgZ2V0IHNyYygpIHtcbiAgICByZXR1cm4gcmVmbGVjdFVSTEF0dHJpYnV0ZSh0aGlzLCBcInNyY1wiKTtcbiAgfVxuXG4gIHNldCBzcmModmFsdWUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNyY1wiLCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MTWVkaWFFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MTWVudUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxNZW51RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTE1ldGFFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MTWV0YUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxNZXRlckVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxNZXRlckVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxNb2RFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MTW9kRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTE9MaXN0RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTE9MaXN0RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IHJlZmxlY3RVUkxBdHRyaWJ1dGUgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikucmVmbGVjdFVSTEF0dHJpYnV0ZTtcbmNvbnN0IGNsb3Nlc3QgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuY2xvc2VzdDtcblxuY2xhc3MgSFRNTE9iamVjdEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIGNsb3Nlc3QodGhpcywgXCJmb3JtXCIpO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnREb2N1bWVudCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiByZWZsZWN0VVJMQXR0cmlidXRlKHRoaXMsIFwiZGF0YVwiKTtcbiAgfVxuXG4gIHNldCBkYXRhKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImRhdGFcIiwgVik7XG4gIH1cblxuICBnZXQgY29kZUJhc2UoKSB7XG4gICAgcmV0dXJuIHJlZmxlY3RVUkxBdHRyaWJ1dGUodGhpcywgXCJjb2RlYmFzZVwiKTtcbiAgfVxuXG4gIHNldCBjb2RlQmFzZShWKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJjb2RlYmFzZVwiLCBWKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxPYmplY3RFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3Qgc3RyaXBBbmRDb2xsYXBzZUFTQ0lJV2hpdGVzcGFjZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3N0cmluZ3NcIikuc3RyaXBBbmRDb2xsYXBzZUFTQ0lJV2hpdGVzcGFjZTtcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcbmNvbnN0IGNsb3Nlc3QgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuY2xvc2VzdDtcblxuY2xhc3MgSFRNTE9wdGlvbkVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG5cbiAgICAvLyB3aGVuZXZlciBzZWxlY3RlZG5lc3MgaXMgc2V0IHRvIHRydWUsIG1ha2Ugc3VyZSBhbGxcbiAgICAvLyBvdGhlciBvcHRpb25zIHNldCBzZWxlY3RlZG5lc3MgdG8gZmFsc2VcbiAgICB0aGlzLl9zZWxlY3RlZG5lc3MgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXJ0eW5lc3MgPSBmYWxzZTtcbiAgfVxuICBfcmVtb3ZlT3RoZXJTZWxlY3RlZG5lc3MoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBzZWxlY3RlZG5lc3MgZmxhZyBmcm9tIGFsbCBvdGhlciBvcHRpb25zIGluIHRoaXMgc2VsZWN0XG4gICAgY29uc3Qgc2VsZWN0ID0gdGhpcy5fc2VsZWN0Tm9kZTtcblxuICAgIGlmIChzZWxlY3QgJiYgIXNlbGVjdC5oYXNBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiKSkge1xuICAgICAgY29uc3QgbyA9IHNlbGVjdC5vcHRpb25zO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKG9baV0pO1xuICAgICAgICBpZiAob3B0aW9uICE9PSB0aGlzKSB7XG4gICAgICAgICAgb3B0aW9uLl9zZWxlY3RlZG5lc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBfYXNrRm9yQVJlc2V0KCkge1xuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuX3NlbGVjdE5vZGU7XG4gICAgaWYgKHNlbGVjdCkge1xuICAgICAgc2VsZWN0Ll9hc2tlZEZvckFSZXNldCgpO1xuICAgIH1cbiAgfVxuICBfYXR0ck1vZGlmaWVkKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMuX2RpcnR5bmVzcyAmJiBuYW1lID09PSBcInNlbGVjdGVkXCIpIHtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKTtcbiAgICAgIHRoaXMuX3NlbGVjdGVkbmVzcyA9IHdyYXBwZXIuZGVmYXVsdFNlbGVjdGVkO1xuICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkbmVzcykge1xuICAgICAgICB0aGlzLl9yZW1vdmVPdGhlclNlbGVjdGVkbmVzcygpO1xuICAgICAgfVxuICAgICAgdGhpcy5fYXNrRm9yQVJlc2V0KCk7XG4gICAgfVxuICAgIHN1cGVyLl9hdHRyTW9kaWZpZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICBnZXQgX3NlbGVjdE5vZGUoKSB7XG4gICAgbGV0IHNlbGVjdCA9IGRvbVN5bWJvbFRyZWUucGFyZW50KHRoaXMpO1xuICAgIGlmICghc2VsZWN0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgIT09IFwiU0VMRUNUXCIpIHtcbiAgICAgIHNlbGVjdCA9IGRvbVN5bWJvbFRyZWUucGFyZW50KHNlbGVjdCk7XG4gICAgICBpZiAoIXNlbGVjdCB8fCBzZWxlY3Qubm9kZU5hbWUudG9VcHBlckNhc2UoKSAhPT0gXCJTRUxFQ1RcIikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdDtcbiAgfVxuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gY2xvc2VzdCh0aGlzLCBcImZvcm1cIik7XG4gIH1cbiAgZ2V0IHRleHQoKSB7XG4gICAgLy8gVE9ETyBpcyBub3QgY29ycmVjdGx5IGV4Y2x1ZGluZyBzY3JpcHQgYW5kIFNWRyBzY3JpcHQgZGVzY2VuZGFudHNcbiAgICByZXR1cm4gc3RyaXBBbmRDb2xsYXBzZUFTQ0lJV2hpdGVzcGFjZSh0aGlzLnRleHRDb250ZW50KTtcbiAgfVxuICBzZXQgdGV4dChWKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IFY7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwidmFsdWVcIikgPyB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCB2YWx1ZSh2YWwpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGluZGV4KCkge1xuICAgIGNvbnN0IHNlbGVjdCA9IGNsb3Nlc3QodGhpcywgXCJzZWxlY3RcIik7XG4gICAgaWYgKHNlbGVjdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoc2VsZWN0Lm9wdGlvbnMsIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRoaXMpKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkbmVzcztcbiAgfVxuICBzZXQgc2VsZWN0ZWQocykge1xuICAgIHRoaXMuX2RpcnR5bmVzcyA9IHRydWU7XG4gICAgdGhpcy5fc2VsZWN0ZWRuZXNzID0gQm9vbGVhbihzKTtcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRuZXNzKSB7XG4gICAgICB0aGlzLl9yZW1vdmVPdGhlclNlbGVjdGVkbmVzcygpO1xuICAgIH1cbiAgICB0aGlzLl9hc2tGb3JBUmVzZXQoKTtcbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBpcyBxdWl0ZSB3cm9uZ1xuICBnZXQgbGFiZWwoKSB7XG4gICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKFwibGFiZWxcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcImxhYmVsXCIpO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLl9zZWxlY3ROb2RlO1xuICAgIGlmIChzZWxlY3QpIHtcbiAgICAgIHJldHVybiBzZWxlY3QuZ2V0QXR0cmlidXRlKFwibGFiZWxcIik7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2V0IGxhYmVsKFYpIHtcbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLl9zZWxlY3ROb2RlO1xuICAgIGlmIChzZWxlY3QpIHtcbiAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoXCJsYWJlbFwiLCBWKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MT3B0aW9uRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTE91dHB1dEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxPdXRwdXRFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxQYXJhbUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxQYXJhbUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxQcmVFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MUHJlRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTFByb2dyZXNzRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFByb2dyZXNzRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTFF1b3RlRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFF1b3RlRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHZtID0gcmVxdWlyZShcInZtXCIpO1xuY29uc3Qgd2hhdHdnRW5jb2RpbmcgPSByZXF1aXJlKFwid2hhdHdnLWVuY29kaW5nXCIpO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgcmVmbGVjdFVSTEF0dHJpYnV0ZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5yZWZsZWN0VVJMQXR0cmlidXRlO1xuY29uc3QgcmVzb3VyY2VMb2FkZXIgPSByZXF1aXJlKFwiLi4vLi4vYnJvd3Nlci9yZXNvdXJjZS1sb2FkZXJcIik7XG5jb25zdCByZXBvcnRFeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vaGVscGVycy9ydW50aW1lLXNjcmlwdC1lcnJvcnNcIik7XG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBub2RlVHlwZXMgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlXCIpO1xuXG5jb25zdCBqc01JTUVUeXBlcyA9IG5ldyBTZXQoW1xuICBcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIixcbiAgXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCIsXG4gIFwiYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCIsXG4gIFwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0XCIsXG4gIFwidGV4dC9lY21hc2NyaXB0XCIsXG4gIFwidGV4dC9qYXZhc2NyaXB0XCIsXG4gIFwidGV4dC9qYXZhc2NyaXB0MS4wXCIsXG4gIFwidGV4dC9qYXZhc2NyaXB0MS4xXCIsXG4gIFwidGV4dC9qYXZhc2NyaXB0MS4yXCIsXG4gIFwidGV4dC9qYXZhc2NyaXB0MS4zXCIsXG4gIFwidGV4dC9qYXZhc2NyaXB0MS40XCIsXG4gIFwidGV4dC9qYXZhc2NyaXB0MS41XCIsXG4gIFwidGV4dC9qc2NyaXB0XCIsXG4gIFwidGV4dC9saXZlc2NyaXB0XCIsXG4gIFwidGV4dC94LWVjbWFzY3JpcHRcIixcbiAgXCJ0ZXh0L3gtamF2YXNjcmlwdFwiXG5dKTtcblxuY2xhc3MgSFRNTFNjcmlwdEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgX2F0dGFjaCgpIHtcbiAgICBzdXBlci5fYXR0YWNoKCk7XG4gICAgaWYgKHRoaXMuc3JjKSB7XG4gICAgICByZXNvdXJjZUxvYWRlci5sb2FkKFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLnNyYyxcbiAgICAgICAgeyBkZWZhdWx0RW5jb2Rpbmc6IHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKHRoaXMuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKSkgfHwgdGhpcy5fb3duZXJEb2N1bWVudC5fZW5jb2RpbmcgfSxcbiAgICAgICAgdGhpcy5fZXZhbFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudGV4dC50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgcmVzb3VyY2VMb2FkZXIuZW5xdWV1ZSh0aGlzLCB0aGlzLl9vd25lckRvY3VtZW50LlVSTCwgdGhpcy5fZXZhbCkobnVsbCwgdGhpcy50ZXh0KTtcbiAgICB9XG4gIH1cblxuICBfYXR0ck1vZGlmaWVkKG5hbWUsIHZhbHVlLCBvbGRWYWx1ZSkge1xuICAgIHN1cGVyLl9hdHRyTW9kaWZpZWQobmFtZSwgdmFsdWUsIG9sZFZhbHVlKTtcblxuICAgIGlmICh0aGlzLl9hdHRhY2hlZCAmJiBuYW1lID09PSBcInNyY1wiICYmIG9sZFZhbHVlID09PSBudWxsICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICByZXNvdXJjZUxvYWRlci5sb2FkKFxuICAgICAgICB0aGlzLFxuICAgICAgICB0aGlzLnNyYyxcbiAgICAgICAgeyBkZWZhdWx0RW5jb2Rpbmc6IHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKHRoaXMuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKSkgfHwgdGhpcy5fb3duZXJEb2N1bWVudC5fZW5jb2RpbmcgfSxcbiAgICAgICAgdGhpcy5fZXZhbFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBfZXZhbCh0ZXh0LCBmaWxlbmFtZSkge1xuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLl9nZXRUeXBlU3RyaW5nKCk7XG5cbiAgICBpZiAodGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXcgJiYgdGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXcuX3J1blNjcmlwdHMgPT09IFwiZGFuZ2Vyb3VzbHlcIiAmJlxuICAgICAgICBqc01JTUVUeXBlcy5oYXModHlwZVN0cmluZy50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgdGhpcy5fb3duZXJEb2N1bWVudC5fd3JpdGVBZnRlckVsZW1lbnQgPSB0aGlzO1xuICAgICAgcHJvY2Vzc0phdmFTY3JpcHQodGhpcywgdGV4dCwgZmlsZW5hbWUpO1xuICAgICAgZGVsZXRlIHRoaXMuX293bmVyRG9jdW1lbnQuX3dyaXRlQWZ0ZXJFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIF9nZXRUeXBlU3RyaW5nKCkge1xuICAgIGNvbnN0IHR5cGVBdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgIGNvbnN0IGxhbmdBdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJsYW5ndWFnZVwiKTtcblxuICAgIGlmICh0eXBlQXR0ciA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwidGV4dC9qYXZhc2NyaXB0XCI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVBdHRyID09PSBudWxsICYmIGxhbmdBdHRyID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcbiAgICB9XG5cbiAgICBpZiAodHlwZUF0dHIgPT09IG51bGwgJiYgbGFuZ0F0dHIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcInRleHQvamF2YXNjcmlwdFwiO1xuICAgIH1cblxuICAgIGlmICh0eXBlQXR0ciAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHR5cGVBdHRyLnRyaW0oKTtcbiAgICB9XG5cbiAgICBpZiAobGFuZ0F0dHIgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcInRleHQvXCIgKyBsYW5nQXR0cjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCB0ZXh0KCkge1xuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcih0aGlzKSkge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSBub2RlVHlwZXMuVEVYVF9OT0RFKSB7XG4gICAgICAgIHRleHQgKz0gY2hpbGQubm9kZVZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuXG4gIGdldCBzcmMoKSB7XG4gICAgcmV0dXJuIHJlZmxlY3RVUkxBdHRyaWJ1dGUodGhpcywgXCJzcmNcIik7XG4gIH1cblxuICBzZXQgc3JjKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInNyY1wiLCBWKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSmF2YVNjcmlwdChlbGVtZW50LCBjb2RlLCBmaWxlbmFtZSkge1xuICBjb25zdCBkb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgY29uc3Qgd2luZG93ID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuX2dsb2JhbDtcblxuICBpZiAod2luZG93KSB7XG4gICAgZG9jdW1lbnQuX2N1cnJlbnRTY3JpcHQgPSBlbGVtZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHZtLnJ1bkluQ29udGV4dChjb2RlLCB3aW5kb3csIHsgZmlsZW5hbWUsIGRpc3BsYXlFcnJvcnM6IGZhbHNlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlcG9ydEV4Y2VwdGlvbih3aW5kb3csIGUsIGZpbGVuYW1lKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZG9jdW1lbnQuX2N1cnJlbnRTY3JpcHQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxTY3JpcHRFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlXCIpO1xuY29uc3QgY3JlYXRlSFRNTENvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vaHRtbC1jb2xsZWN0aW9uXCIpLmNyZWF0ZTtcbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcbmNvbnN0IGRlc2NlbmRhbnRzQnlIVE1MTG9jYWxOYW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmRlc2NlbmRhbnRzQnlIVE1MTG9jYWxOYW1lO1xuY29uc3QgY2xvc2VzdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5jbG9zZXN0O1xuXG5jbGFzcyBIVE1MU2VsZWN0RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBfZm9ybVJlc2V0KCkge1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodGhpcy5vcHRpb25zLCBvcHRpb24gPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uSW1wbCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKG9wdGlvbik7XG4gICAgICBvcHRpb25JbXBsLl9zZWxlY3RlZG5lc3MgPSBvcHRpb24uZGVmYXVsdFNlbGVjdGVkO1xuICAgICAgb3B0aW9uSW1wbC5fZGlydHluZXNzID0gZmFsc2U7XG4gICAgfSk7XG4gICAgdGhpcy5fYXNrZWRGb3JBUmVzZXQoKTtcbiAgfVxuXG4gIF9hc2tlZEZvckFSZXNldCgpIHtcbiAgICBpZiAodGhpcy5oYXNBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkID0gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHRoaXMub3B0aW9ucywgb3B0aW9uID0+IHtcbiAgICAgIG9wdGlvbiA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKG9wdGlvbik7XG4gICAgICByZXR1cm4gb3B0aW9uLl9zZWxlY3RlZG5lc3M7XG4gICAgfSk7XG5cbiAgICAvLyBzaXplID0gMSBpcyBkZWZhdWx0IGlmIG5vdCBtdWx0aXBsZVxuICAgIGlmICgoIXRoaXMuc2l6ZSB8fCB0aGlzLnNpemUgPT09IDEpICYmICFzZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIC8vIHNlbGVjdCB0aGUgZmlyc3Qgb3B0aW9uIHRoYXQgaXMgbm90IGRpc2FibGVkXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzLm9wdGlvbnNbaV0pO1xuICAgICAgICBsZXQgZGlzYWJsZWQgPSB0aGlzLm9wdGlvbnNbaV0uZGlzYWJsZWQ7XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBkb21TeW1ib2xUcmVlLnBhcmVudChvcHRpb24pO1xuICAgICAgICBpZiAocGFyZW50Tm9kZSAmJlxuICAgICAgICAgICAgcGFyZW50Tm9kZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSBcIk9QVEdST1VQXCIgJiZcbiAgICAgICAgICAgIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHBhcmVudE5vZGUpLmRpc2FibGVkKSB7XG4gICAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgIC8vIChkbyBub3Qgc2V0IGRpcnR5KVxuICAgICAgICAgIG9wdGlvbi5fc2VsZWN0ZWRuZXNzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQubGVuZ3RoID49IDIpIHtcbiAgICAgIC8vIHNlbGVjdCB0aGUgbGFzdCBzZWxlY3RlZCBvcHRpb25cbiAgICAgIHNlbGVjdGVkLmZvckVhY2goKG9wdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgb3B0aW9uID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIob3B0aW9uKTtcbiAgICAgICAgb3B0aW9uLl9zZWxlY3RlZG5lc3MgPSBpbmRleCA9PT0gc2VsZWN0ZWQubGVuZ3RoIC0gMTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9kZXNjZW5kYW50QWRkZWQocGFyZW50LCBjaGlsZCkge1xuICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSkge1xuICAgICAgdGhpcy5fYXNrZWRGb3JBUmVzZXQoKTtcbiAgICB9XG5cbiAgICBzdXBlci5fZGVzY2VuZGFudEFkZGVkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBfZGVzY2VuZGFudFJlbW92ZWQocGFyZW50LCBjaGlsZCkge1xuICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSkge1xuICAgICAgdGhpcy5fYXNrZWRGb3JBUmVzZXQoKTtcbiAgICB9XG5cbiAgICBzdXBlci5fZGVzY2VuZGFudFJlbW92ZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9hdHRyTW9kaWZpZWQobmFtZSkge1xuICAgIGlmIChuYW1lID09PSBcIm11bHRpcGxlXCIgfHwgbmFtZSA9PT0gXCJzaXplXCIpIHtcbiAgICAgIHRoaXMuX2Fza2VkRm9yQVJlc2V0KCk7XG4gICAgfVxuICAgIHN1cGVyLl9hdHRyTW9kaWZpZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIC8vIFRPRE86IGltcGxlbWVudCBIVE1MT3B0aW9uc0NvbGxlY3Rpb25cbiAgICByZXR1cm4gY3JlYXRlSFRNTENvbGxlY3Rpb24odGhpcywgKCkgPT4gZGVzY2VuZGFudHNCeUhUTUxMb2NhbE5hbWUodGhpcywgXCJvcHRpb25cIikpO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMsICgpID0+IGRvbVN5bWJvbFRyZWUudHJlZVRvQXJyYXkodGhpcywgeyBmaWx0ZXIobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuX2xvY2FsTmFtZSA9PT0gXCJvcHRpb25cIiAmJiBub2RlLl9zZWxlY3RlZG5lc3MgPT09IHRydWU7XG4gICAgfSB9KSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0LmNhbGwodGhpcy5vcHRpb25zLCAocHJldiwgb3B0aW9uLCBpKSA9PiB7XG4gICAgICBvcHRpb24gPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihvcHRpb24pO1xuICAgICAgcmV0dXJuIG9wdGlvbi5zZWxlY3RlZCA/IGkgOiBwcmV2O1xuICAgIH0sIC0xKTtcbiAgfVxuXG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0aGlzLm9wdGlvbnMsIChvcHRpb24sIGkpID0+IHtcbiAgICAgIG9wdGlvbiA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKG9wdGlvbik7XG4gICAgICBvcHRpb24uc2VsZWN0ZWQgPSBpID09PSBpbmRleDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICBsZXQgaSA9IHRoaXMuc2VsZWN0ZWRJbmRleDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCAmJiAoaSA9PT0gLTEpKSB7XG4gICAgICBpID0gMDtcbiAgICB9XG4gICAgaWYgKGkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1tpXS52YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWwpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRoaXMub3B0aW9ucywgb3B0aW9uID0+IHtcbiAgICAgIG9wdGlvbiA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKG9wdGlvbik7XG4gICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWwpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIXNlbGYuaGFzQXR0cmlidXRlKFwibXVsdGlwbGVcIikpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZWxlY3RlZCBiaXQgZnJvbSBhbGwgb3RoZXIgb3B0aW9ucyBpbiB0aGlzIGdyb3VwXG4gICAgICAgIC8vIGlmIHRoZSBtdWx0aXBsZSBhdHRyIGlzIG5vdCBwcmVzZW50IG9uIHRoZSBzZWxlY3RcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gY2xvc2VzdCh0aGlzLCBcImZvcm1cIik7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiKSA/IFwic2VsZWN0LW11bHRpcGxlXCIgOiBcInNlbGVjdC1vbmVcIjtcbiAgfVxuXG4gIGFkZChvcHQsIGJlZm9yZSkge1xuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKG9wdCwgYmVmb3JlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBlbmRDaGlsZChvcHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZShpbmRleCkge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBvcHRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZWwgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihvcHRzW2luZGV4XSk7XG4gICAgICBkb21TeW1ib2xUcmVlLnBhcmVudChlbCkucmVtb3ZlQ2hpbGQoZWwpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaXplKCkge1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJzaXplXCIpKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3Qgc2l6ZSA9IGNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZ1wiXSh0aGlzLmdldEF0dHJpYnV0ZShcInNpemVcIikpO1xuICAgIGlmIChpc05hTihzaXplKSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBzaXplO1xuICB9XG5cbiAgc2V0IHNpemUoVikge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic2l6ZVwiLCBWKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxTZWxlY3RFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgcmVmbGVjdFVSTEF0dHJpYnV0ZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5yZWZsZWN0VVJMQXR0cmlidXRlO1xuXG5jbGFzcyBIVE1MU291cmNlRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBnZXQgc3JjKCkge1xuICAgIHJldHVybiByZWZsZWN0VVJMQXR0cmlidXRlKHRoaXMsIFwic3JjXCIpO1xuICB9XG5cbiAgc2V0IHNyYyh2YWx1ZSkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3JjXCIsIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxTb3VyY2VFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MU3BhbkVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxTcGFuRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBMaW5rU3R5bGVJbXBsID0gcmVxdWlyZShcIi4vTGlua1N0eWxlLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlXCIpO1xuY29uc3QgZXZhbHVhdGVTdHlsZXNoZWV0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvc3R5bGVzaGVldHNcIikuZXZhbHVhdGVTdHlsZXNoZWV0O1xuY29uc3QgZG9jdW1lbnRCYXNlVVJMID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZG9jdW1lbnQtYmFzZS11cmxcIikuZG9jdW1lbnRCYXNlVVJMO1xuXG5jbGFzcyBIVE1MU3R5bGVFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIF9hdHRhY2goKSB7XG4gICAgaWYgKHRoaXMudHlwZSAmJiB0aGlzLnR5cGUgIT09IFwidGV4dC9jc3NcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjb250ZW50ID0gXCJcIjtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcih0aGlzKSkge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuVEVYVF9OT0RFKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gY2hpbGQubm9kZVZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGV2YWx1YXRlU3R5bGVzaGVldCh0aGlzLCBjb250ZW50LCB0aGlzLnNoZWV0LCBkb2N1bWVudEJhc2VVUkwodGhpcy5fb3duZXJEb2N1bWVudCkpO1xuXG4gICAgc3VwZXIuX2F0dGFjaCgpO1xuICB9XG59XG5cbmlkbFV0aWxzLm1peGluKEhUTUxTdHlsZUVsZW1lbnRJbXBsLnByb3RvdHlwZSwgTGlua1N0eWxlSW1wbC5wcm90b3R5cGUpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxTdHlsZUVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcblxuY29uc3QgY2xvc2VzdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5jbG9zZXN0O1xuY29uc3QgY3JlYXRlRE9NVG9rZW5MaXN0ID0gcmVxdWlyZShcIi4uL2RvbS10b2tlbi1saXN0XCIpLmNyZWF0ZTtcbmNvbnN0IHJlc2V0RE9NVG9rZW5MaXN0ID0gcmVxdWlyZShcIi4uL2RvbS10b2tlbi1saXN0XCIpLnJlc2V0O1xuXG5jbGFzcyBIVE1MVGFibGVDZWxsSW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGdldCBoZWFkZXJzKCkge1xuICAgIGlmICh0aGlzLl9oZWFkZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2hlYWRlcnMgPSBjcmVhdGVET01Ub2tlbkxpc3QodGhpcywgXCJoZWFkZXJzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGVhZGVycztcbiAgfVxuXG4gIGdldCBjZWxsSW5kZXgoKSB7XG4gICAgY29uc3QgdHIgPSBjbG9zZXN0KHRoaXMsIFwidHJcIik7XG4gICAgaWYgKHRyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodHIuY2VsbHMsIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRoaXMpKTtcbiAgfVxuXG4gIGdldCBjb2xTcGFuKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjb2xzcGFuXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IDEgOiB2YWx1ZTtcbiAgfVxuXG4gIHNldCBjb2xTcGFuKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvbHNwYW5cIiwgU3RyaW5nKFYpKTtcbiAgfVxuXG4gIGdldCByb3dTcGFuKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJyb3dzcGFuXCIpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IDEgOiB2YWx1ZTtcbiAgfVxuXG4gIHNldCByb3dTcGFuKFYpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInJvd3NwYW5cIiwgU3RyaW5nKFYpKTtcbiAgfVxuXG4gIF9hdHRyTW9kaWZpZWQobmFtZSwgdmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgaWYgKG5hbWUgPT09IFwiaGVhZGVyc1wiICYmIHRoaXMuX2hlYWRlcnMpIHtcbiAgICAgIHJlc2V0RE9NVG9rZW5MaXN0KHRoaXMuX2hlYWRlcnMsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBzdXBlci5fYXR0ck1vZGlmaWVkKG5hbWUsIHZhbHVlLCBvbGRWYWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MVGFibGVDZWxsSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MVGFibGVDb2xFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MVGFibGVDZWxsRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY29uc3QgZmlyc3RDaGlsZFdpdGhIVE1MTG9jYWxOYW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmZpcnN0Q2hpbGRXaXRoSFRNTExvY2FsTmFtZTtcbmNvbnN0IGNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lO1xuY29uc3QgY3JlYXRlSFRNTENvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vbGl2aW5nL2h0bWwtY29sbGVjdGlvblwiKS5jcmVhdGU7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5cbmNsYXNzIEhUTUxUYWJsZUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgZ2V0IGNhcHRpb24oKSB7XG4gICAgcmV0dXJuIGZpcnN0Q2hpbGRXaXRoSFRNTExvY2FsTmFtZSh0aGlzLCBcImNhcHRpb25cIik7XG4gIH1cblxuICBnZXQgdEhlYWQoKSB7XG4gICAgcmV0dXJuIGZpcnN0Q2hpbGRXaXRoSFRNTExvY2FsTmFtZSh0aGlzLCBcInRoZWFkXCIpO1xuICB9XG5cbiAgZ2V0IHRGb290KCkge1xuICAgIHJldHVybiBmaXJzdENoaWxkV2l0aEhUTUxMb2NhbE5hbWUodGhpcywgXCJ0Zm9vdFwiKTtcbiAgfVxuXG4gIGdldCByb3dzKCkge1xuICAgIGlmICghdGhpcy5fcm93cykge1xuICAgICAgdGhpcy5fcm93cyA9IGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMsICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMudEhlYWQpIHtcbiAgICAgICAgICBzZWN0aW9ucy5wdXNoKHRoaXMudEhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHNlY3Rpb25zLnB1c2goLi4uY2hpbGRyZW5CeUhUTUxMb2NhbE5hbWUodGhpcywgXCJ0Ym9keVwiKSk7XG4gICAgICAgIGlmICh0aGlzLnRGb290KSB7XG4gICAgICAgICAgc2VjdGlvbnMucHVzaCh0aGlzLnRGb290KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gY2hpbGRyZW5CeUhUTUxMb2NhbE5hbWUodGhpcywgXCJ0clwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgICAgcm93cy5wdXNoKC4uLmNoaWxkcmVuQnlIVE1MTG9jYWxOYW1lKHMsIFwidHJcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dzO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yb3dzO1xuICB9XG5cbiAgZ2V0IHRCb2RpZXMoKSB7XG4gICAgaWYgKCF0aGlzLl90Qm9kaWVzKSB7XG4gICAgICB0aGlzLl90Qm9kaWVzID0gY3JlYXRlSFRNTENvbGxlY3Rpb24odGhpcywgKCkgPT4gY2hpbGRyZW5CeUhUTUxMb2NhbE5hbWUodGhpcywgXCJ0Ym9keVwiKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90Qm9kaWVzO1xuICB9XG5cbiAgY3JlYXRlVEhlYWQoKSB7XG4gICAgbGV0IGVsID0gdGhpcy50SGVhZDtcbiAgICBpZiAoIWVsKSB7XG4gICAgICBlbCA9IHRoaXMuX293bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIlRIRUFEXCIpO1xuICAgICAgdGhpcy5hcHBlbmRDaGlsZChlbCk7XG4gICAgfVxuICAgIHJldHVybiBlbDtcbiAgfVxuXG4gIGRlbGV0ZVRIZWFkKCkge1xuICAgIGNvbnN0IGVsID0gdGhpcy50SGVhZDtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZVRGb290KCkge1xuICAgIGxldCBlbCA9IHRoaXMudEZvb3Q7XG4gICAgaWYgKCFlbCkge1xuICAgICAgZWwgPSB0aGlzLl9vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJURk9PVFwiKTtcbiAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIH1cbiAgICByZXR1cm4gZWw7XG4gIH1cblxuICBkZWxldGVURm9vdCgpIHtcbiAgICBjb25zdCBlbCA9IHRoaXMudEZvb3Q7XG4gICAgaWYgKGVsKSB7XG4gICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVDYXB0aW9uKCkge1xuICAgIGxldCBlbCA9IHRoaXMuY2FwdGlvbjtcbiAgICBpZiAoIWVsKSB7XG4gICAgICBlbCA9IHRoaXMuX293bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkNBUFRJT05cIik7XG4gICAgICB0aGlzLmFwcGVuZENoaWxkKGVsKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsO1xuICB9XG5cbiAgZGVsZXRlQ2FwdGlvbigpIHtcbiAgICBjb25zdCBjID0gdGhpcy5jYXB0aW9uO1xuICAgIGlmIChjKSB7XG4gICAgICBjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyk7XG4gICAgfVxuICB9XG5cbiAgaW5zZXJ0Um93KGluZGV4KSB7XG4gICAgaWYgKGluZGV4IDwgLTEgfHwgaW5kZXggPiB0aGlzLnJvd3MubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUixcbiAgICAgICAgXCJDYW5ub3QgaW5zZXJ0IGEgcm93IGF0IGFuIGluZGV4IHRoYXQgaXMgbGVzcyB0aGFuIC0xIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGV4aXN0aW5nIHJvd3NcIik7XG4gICAgfVxuXG4gICAgY29uc3QgdHIgPSB0aGlzLl9vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0clwiKTtcblxuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID09PSAwICYmIHRoaXMudEJvZGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHRCb2R5ID0gdGhpcy5fb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGJvZHlcIik7XG4gICAgICB0Qm9keS5hcHBlbmRDaGlsZCh0cik7XG4gICAgICB0aGlzLmFwcGVuZENoaWxkKHRCb2R5KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHRCb2R5ID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpcy50Qm9kaWVzW3RoaXMudEJvZGllcy5sZW5ndGggLSAxXSk7XG4gICAgICB0Qm9keS5hcHBlbmRDaGlsZCh0cik7XG4gICAgfSBlbHNlIGlmIChpbmRleCA9PT0gLTEgfHwgaW5kZXggPT09IHRoaXMucm93cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRTZWN0aW9uID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpcy5yb3dzW3RoaXMucm93cy5sZW5ndGggLSAxXSkucGFyZW50Tm9kZTtcbiAgICAgIHRTZWN0aW9uLmFwcGVuZENoaWxkKHRyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYmVmb3JlVFIgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzLnJvd3NbaW5kZXhdKTtcbiAgICAgIGNvbnN0IHRTZWN0aW9uID0gYmVmb3JlVFIucGFyZW50Tm9kZTtcbiAgICAgIHRTZWN0aW9uLmluc2VydEJlZm9yZSh0ciwgYmVmb3JlVFIpO1xuICAgIH1cblxuICAgIHJldHVybiB0cjtcbiAgfVxuXG4gIGRlbGV0ZVJvdyhpbmRleCkge1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIGluZGV4ID0gdGhpcy5yb3dzLmxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnJvd3MubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUiwgYENhbm5vdCBkZWxldGUgYSByb3cgYXQgaW5kZXggJHtpbmRleH0sIHdoZXJlIG5vIHJvdyBleGlzdHNgKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ciA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXMucm93c1tpbmRleF0pO1xuICAgIHRyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodHIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFRhYmxlRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTFRhYmxlQ2VsbEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsIHsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgY3JlYXRlSFRNTENvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vbGl2aW5nL2h0bWwtY29sbGVjdGlvblwiKS5jcmVhdGU7XG5jb25zdCBjaGlsZHJlbkJ5SFRNTExvY2FsTmFtZXMgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuY2hpbGRyZW5CeUhUTUxMb2NhbE5hbWVzO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgZG9tU3ltYm9sVHJlZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2ludGVybmFsLWNvbnN0YW50c1wiKS5kb21TeW1ib2xUcmVlO1xuY29uc3QgY2xvc2VzdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5jbG9zZXN0O1xuXG5jb25zdCBjZWxsTG9jYWxOYW1lcyA9IG5ldyBTZXQoW1widGRcIiwgXCJ0aFwiXSk7XG5cbmNsYXNzIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgZ2V0IGNlbGxzKCkge1xuICAgIGlmICghdGhpcy5fY2VsbHMpIHtcbiAgICAgIHRoaXMuX2NlbGxzID0gY3JlYXRlSFRNTENvbGxlY3Rpb24odGhpcywgKCkgPT4gY2hpbGRyZW5CeUhUTUxMb2NhbE5hbWVzKHRoaXMsIGNlbGxMb2NhbE5hbWVzKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jZWxscztcbiAgfVxuXG4gIGdldCByb3dJbmRleCgpIHtcbiAgICBjb25zdCB0YWJsZSA9IGNsb3Nlc3QodGhpcywgXCJ0YWJsZVwiKTtcbiAgICByZXR1cm4gdGFibGUgPyBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRhYmxlLnJvd3MsIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRoaXMpKSA6IC0xO1xuICB9XG5cbiAgZ2V0IHNlY3Rpb25Sb3dJbmRleCgpIHtcbiAgICBjb25zdCBwYXJlbnQgPSBkb21TeW1ib2xUcmVlLnBhcmVudCh0aGlzKTtcbiAgICBpZiAocGFyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93cyA9IHBhcmVudC5yb3dzO1xuICAgIGlmICghcm93cykge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHJvd3MsIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRoaXMpKTtcbiAgfVxuXG4gIGluc2VydENlbGwoaW5kZXgpIHtcbiAgICBjb25zdCB0ZCA9IHRoaXMuX293bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIlREXCIpO1xuICAgIGNvbnN0IGNlbGxzID0gdGhpcy5jZWxscztcbiAgICBpZiAoaW5kZXggPCAtMSB8fCBpbmRleCA+IGNlbGxzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSBjZWxscy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZWYgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihjZWxsc1tpbmRleF0pO1xuICAgICAgdGhpcy5pbnNlcnRCZWZvcmUodGQsIHJlZik7XG4gICAgfVxuICAgIHJldHVybiB0ZDtcbiAgfVxuXG4gIGRlbGV0ZUNlbGwoaW5kZXgpIHtcbiAgICBjb25zdCBjZWxscyA9IHRoaXMuY2VsbHM7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgaW5kZXggPSBjZWxscy5sZW5ndGggLSAxO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGNlbGxzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpO1xuICAgIH1cbiAgICBjb25zdCB0ZCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKGNlbGxzW2luZGV4XSk7XG4gICAgdGhpcy5yZW1vdmVDaGlsZCh0ZCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MVGFibGVSb3dFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuY29uc3QgY2hpbGRyZW5CeUhUTUxMb2NhbE5hbWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy90cmF2ZXJzYWxcIikuY2hpbGRyZW5CeUhUTUxMb2NhbE5hbWU7XG5jb25zdCBjcmVhdGVIVE1MQ29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi9saXZpbmcvaHRtbC1jb2xsZWN0aW9uXCIpLmNyZWF0ZTtcbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcblxuY2xhc3MgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgZ2V0IHJvd3MoKSB7XG4gICAgaWYgKCF0aGlzLl9yb3dzKSB7XG4gICAgICB0aGlzLl9yb3dzID0gY3JlYXRlSFRNTENvbGxlY3Rpb24odGhpcywgKCkgPT4gY2hpbGRyZW5CeUhUTUxMb2NhbE5hbWUodGhpcywgXCJ0clwiKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yb3dzO1xuICB9XG5cbiAgaW5zZXJ0Um93KGluZGV4KSB7XG4gICAgaWYgKGluZGV4IDwgLTEgfHwgaW5kZXggPiB0aGlzLnJvd3MubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUixcbiAgICAgICAgXCJDYW5ub3QgaW5zZXJ0IGEgcm93IGF0IGFuIGluZGV4IHRoYXQgaXMgbGVzcyB0aGFuIC0xIG9yIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGV4aXN0aW5nIHJvd3NcIik7XG4gICAgfVxuXG4gICAgY29uc3QgdHIgPSB0aGlzLl9vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0clwiKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEgfHwgaW5kZXggPT09IHRoaXMucm93cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBiZWZvcmVUUiA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHRoaXMucm93c1tpbmRleF0pO1xuICAgICAgdGhpcy5pbnNlcnRCZWZvcmUodHIsIGJlZm9yZVRSKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHI7XG4gIH1cblxuICBkZWxldGVSb3coaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPCAtMSB8fCBpbmRleCA+PSB0aGlzLnJvd3MubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUiwgYENhbm5vdCBkZWxldGUgYSByb3cgYXQgaW5kZXggJHtpbmRleH0sIHdoZXJlIG5vIHJvdyBleGlzdHNgKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBpZiAodGhpcy5yb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdHIgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih0aGlzLnJvd3NbdGhpcy5yb3dzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0cik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRyID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIodGhpcy5yb3dzW2luZGV4XSk7XG4gICAgICB0aGlzLnJlbW92ZUNoaWxkKHRyKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY29uc3QgY2xvbmluZ1N0ZXBzID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmNsb25pbmdTdGVwcztcbmNvbnN0IGNsb25lID0gcmVxdWlyZShcIi4uL25vZGVcIikuY2xvbmU7XG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5cbmNsYXNzIEhUTUxUZW1wbGF0ZUVsZW1lbnRJbXBsIGV4dGVuZHMgSFRNTEVsZW1lbnRJbXBsIHtcbiAgY29uc3RydWN0b3IoYXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBzdXBlcihhcmdzLCBwcml2YXRlRGF0YSk7XG4gICAgdGhpcy5fdGVtcGxhdGVDb250ZW50cyA9IHRoaXMuX293bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlQ29udGVudHM7XG4gIH1cblxuICBbY2xvbmluZ1N0ZXBzXShjb3B5LCBub2RlLCBkb2N1bWVudCwgY2xvbmVDaGlsZHJlbikge1xuICAgIGlmICghY2xvbmVDaGlsZHJlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKG5vZGUuX3RlbXBsYXRlQ29udGVudHMpKSB7XG4gICAgICBjb25zdCBjaGlsZENvcHkgPSBjbG9uZSh0aGlzLl9jb3JlLCBjaGlsZCwgY29weS5fdGVtcGxhdGVDb250ZW50cy5fb3duZXJEb2N1bWVudCwgdHJ1ZSk7XG4gICAgICBjb3B5Ll90ZW1wbGF0ZUNvbnRlbnRzLmFwcGVuZENoaWxkKGNoaWxkQ29weSk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFRlbXBsYXRlRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uLy4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuY29uc3QgY2xvc2VzdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3RyYXZlcnNhbFwiKS5jbG9zZXN0O1xuY29uc3Qgbm9ybWFsaXplVG9DUkxGID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZm9ybS1jb250cm9sc1wiKS5ub3JtYWxpemVUb0NSTEY7XG5cbmNsYXNzIEhUTUxUZXh0QXJlYUVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMuX3Jhd1ZhbHVlID0gXCJcIjtcbiAgICB0aGlzLl9kaXJ0eVZhbHVlID0gZmFsc2U7XG4gIH1cblxuICBfZm9ybVJlc2V0KCkge1xuICAgIHRoaXMuX3Jhd1ZhbHVlID0gdGhpcy50ZXh0Q29udGVudDtcbiAgICB0aGlzLl9kaXJ0eVZhbHVlID0gZmFsc2U7XG4gIH1cblxuICBfZ2V0QVBJVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jhd1ZhbHVlLnJlcGxhY2UoL1xcclxcbi9nLCBcIlxcblwiKS5yZXBsYWNlKC9cXHIvZywgXCJcXG5cIik7XG4gIH1cblxuICBfZ2V0VmFsdWUoKSB7XG4gICAgLy8gSGFyZC13cmFwcGluZyBvbWl0dGVkLCBmb3Igbm93LlxuICAgIHJldHVybiBub3JtYWxpemVUb0NSTEYodGhpcy5fcmF3VmFsdWUpO1xuICB9XG5cbiAgX21vZGlmaWVkKCkge1xuICAgIHN1cGVyLl9tb2RpZmllZCgpO1xuXG4gICAgaWYgKHRoaXMuX2RpcnR5VmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9yYXdWYWx1ZSA9IHRoaXMudGV4dENvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIGNsb3Nlc3QodGhpcywgXCJmb3JtXCIpO1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0Q29udGVudDtcbiAgfVxuXG4gIHNldCBkZWZhdWx0VmFsdWUodmFsKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0QVBJVmFsdWUoKTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWwpIHtcbiAgICB0aGlzLl9yYXdWYWx1ZSA9IHZhbDtcbiAgICB0aGlzLl9kaXJ0eVZhbHVlID0gdHJ1ZTtcblxuICAgIHRoaXMuX3NlbGVjdGlvblN0YXJ0ID0gMDtcbiAgICB0aGlzLl9zZWxlY3Rpb25FbmQgPSAwO1xuICAgIHRoaXMuX3NlbGVjdGlvbkRpcmVjdGlvbiA9IFwibm9uZVwiO1xuICB9XG5cbiAgZ2V0IHRleHRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoOyAvLyBjb2RlIHVuaXQgbGVuZ3RoICgxNiBiaXQpXG4gIH1cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIFwidGV4dGFyZWFcIjtcbiAgfVxuXG4gIF9kaXNwYXRjaFNlbGVjdEV2ZW50KCkge1xuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5fb3duZXJEb2N1bWVudC5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7XG4gICAgZXZlbnQuaW5pdEV2ZW50KFwic2VsZWN0XCIsIHRydWUsIHRydWUpO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH1cbiAgX2dldFZhbHVlTGVuZ3RoKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy52YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHRoaXMudmFsdWUubGVuZ3RoIDogMDtcbiAgfVxuICBzZWxlY3QoKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uU3RhcnQgPSAwO1xuICAgIHRoaXMuX3NlbGVjdGlvbkVuZCA9IHRoaXMuX2dldFZhbHVlTGVuZ3RoKCk7XG4gICAgdGhpcy5fc2VsZWN0aW9uRGlyZWN0aW9uID0gXCJub25lXCI7XG4gICAgdGhpcy5fZGlzcGF0Y2hTZWxlY3RFdmVudCgpO1xuICB9XG4gIGdldCBzZWxlY3Rpb25TdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uU3RhcnQ7XG4gIH1cbiAgc2V0IHNlbGVjdGlvblN0YXJ0KHN0YXJ0KSB7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgTWF0aC5tYXgoc3RhcnQsIHRoaXMuX3NlbGVjdGlvbkVuZCksIHRoaXMuX3NlbGVjdGlvbkRpcmVjdGlvbik7XG4gIH1cbiAgZ2V0IHNlbGVjdGlvbkVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uRW5kO1xuICB9XG4gIHNldCBzZWxlY3Rpb25FbmQoZW5kKSB7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLl9zZWxlY3Rpb25TdGFydCwgZW5kLCB0aGlzLl9zZWxlY3Rpb25EaXJlY3Rpb24pO1xuICB9XG4gIGdldCBzZWxlY3Rpb25EaXJlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkRpcmVjdGlvbjtcbiAgfVxuICBzZXQgc2VsZWN0aW9uRGlyZWN0aW9uKGRpcikge1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5fc2VsZWN0aW9uU3RhcnQsIHRoaXMuX3NlbGVjdGlvbkVuZCwgZGlyKTtcbiAgfVxuICBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kLCBkaXIpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25FbmQgPSBNYXRoLm1pbihlbmQsIHRoaXMuX2dldFZhbHVlTGVuZ3RoKCkpO1xuICAgIHRoaXMuX3NlbGVjdGlvblN0YXJ0ID0gTWF0aC5taW4oc3RhcnQsIHRoaXMuX3NlbGVjdGlvbkVuZCk7XG4gICAgdGhpcy5fc2VsZWN0aW9uRGlyZWN0aW9uID0gZGlyID09PSBcImZvcndhcmRcIiB8fCBkaXIgPT09IFwiYmFja3dhcmRcIiA/IGRpciA6IFwibm9uZVwiO1xuICAgIHRoaXMuX2Rpc3BhdGNoU2VsZWN0RXZlbnQoKTtcbiAgfVxuICBzZXRSYW5nZVRleHQocmVwbCwgc3RhcnQsIGVuZCwgc2VsZWN0aW9uTW9kZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgc3RhcnQgPSB0aGlzLl9zZWxlY3Rpb25TdGFydDtcbiAgICAgIGVuZCA9IHRoaXMuX3NlbGVjdGlvbkVuZDtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0ID4gZW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUik7XG4gICAgfVxuXG4gICAgc3RhcnQgPSBNYXRoLm1pbihzdGFydCwgdGhpcy5fZ2V0VmFsdWVMZW5ndGgoKSk7XG4gICAgZW5kID0gTWF0aC5taW4oZW5kLCB0aGlzLl9nZXRWYWx1ZUxlbmd0aCgpKTtcblxuICAgIGNvbnN0IHZhbCA9IHRoaXMudmFsdWU7XG4gICAgbGV0IHNlbFN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uU3RhcnQ7XG4gICAgbGV0IHNlbEVuZCA9IHRoaXMuX3NlbGVjdGlvbkVuZDtcblxuICAgIHRoaXMudmFsdWUgPSB2YWwuc2xpY2UoMCwgc3RhcnQpICsgcmVwbCArIHZhbC5zbGljZShlbmQpO1xuXG4gICAgY29uc3QgbmV3RW5kID0gc3RhcnQgKyB0aGlzLnZhbHVlLmxlbmd0aDtcblxuICAgIGlmIChzZWxlY3Rpb25Nb2RlID09PSBcInNlbGVjdFwiKSB7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBuZXdFbmQpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gXCJzdGFydFwiKSB7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBzdGFydCk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09PSBcImVuZFwiKSB7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKG5ld0VuZCwgbmV3RW5kKTtcbiAgICB9IGVsc2UgeyAvLyBwcmVzZXJ2ZVxuICAgICAgY29uc3QgZGVsdGEgPSByZXBsLmxlbmd0aCAtIChlbmQgLSBzdGFydCk7XG5cbiAgICAgIGlmIChzZWxTdGFydCA+IGVuZCkge1xuICAgICAgICBzZWxTdGFydCArPSBkZWx0YTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsU3RhcnQgPiBzdGFydCkge1xuICAgICAgICBzZWxTdGFydCA9IHN0YXJ0O1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsRW5kID4gZW5kKSB7XG4gICAgICAgIHNlbEVuZCArPSBkZWx0YTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsRW5kID4gc3RhcnQpIHtcbiAgICAgICAgc2VsRW5kID0gbmV3RW5kO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHNlbFN0YXJ0LCBzZWxFbmQpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjb2xzKCkge1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJjb2xzXCIpKSB7XG4gICAgICByZXR1cm4gMjA7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcImNvbHNcIikpO1xuICB9XG5cbiAgc2V0IGNvbHModmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpO1xuICAgIH1cbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImNvbHNcIiwgU3RyaW5nKHZhbHVlKSk7XG4gIH1cblxuICBnZXQgcm93cygpIHtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm93c1wiKSkge1xuICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludCh0aGlzLmdldEF0dHJpYnV0ZShcInJvd3NcIikpO1xuICB9XG5cbiAgc2V0IHJvd3ModmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5ERVhfU0laRV9FUlIpO1xuICAgIH1cbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInJvd3NcIiwgU3RyaW5nKHZhbHVlKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MVGV4dEFyZWFFbGVtZW50XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxFbGVtZW50SW1wbCA9IHJlcXVpcmUoXCIuL0hUTUxFbGVtZW50LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNsYXNzIEhUTUxUaW1lRWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFRpbWVFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jbGFzcyBIVE1MVGl0bGVFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGdldCB0ZXh0KCkge1xuICAgIC8vIFRPRE8gdGhpcyBpcyBxdWl0ZSBpbmNvcnJlY3RcbiAgICByZXR1cm4gdGhpcy5pbm5lckhUTUw7XG4gIH1cblxuICBzZXQgdGV4dChzKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHM7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MVGl0bGVFbGVtZW50SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVE1MRWxlbWVudEltcGwgPSByZXF1aXJlKFwiLi9IVE1MRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgcmVmbGVjdFVSTEF0dHJpYnV0ZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5yZWZsZWN0VVJMQXR0cmlidXRlO1xuXG5jbGFzcyBIVE1MVHJhY2tFbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7XG4gIGdldCByZWFkeVN0YXRlKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZ2V0IHNyYygpIHtcbiAgICByZXR1cm4gcmVmbGVjdFVSTEF0dHJpYnV0ZSh0aGlzLCBcInNyY1wiKTtcbiAgfVxuICBzZXQgc3JjKHZhbHVlKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFRyYWNrRWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTFVMaXN0RWxlbWVudEltcGwgZXh0ZW5kcyBIVE1MRWxlbWVudEltcGwgeyB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogSFRNTFVMaXN0RWxlbWVudEltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgSFRNTEVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTEVsZW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuY2xhc3MgSFRNTFVua25vd25FbGVtZW50SW1wbCBleHRlbmRzIEhUTUxFbGVtZW50SW1wbCB7IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBIVE1MVW5rbm93bkVsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IEhUTUxNZWRpYUVsZW1lbnRJbXBsID0gcmVxdWlyZShcIi4vSFRNTE1lZGlhRWxlbWVudC1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuY29uc3QgcmVmbGVjdFVSTEF0dHJpYnV0ZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5yZWZsZWN0VVJMQXR0cmlidXRlO1xuXG5jbGFzcyBIVE1MVmlkZW9FbGVtZW50SW1wbCBleHRlbmRzIEhUTUxNZWRpYUVsZW1lbnRJbXBsIHtcbiAgZ2V0IHBvc3RlcigpIHtcbiAgICByZXR1cm4gcmVmbGVjdFVSTEF0dHJpYnV0ZSh0aGlzLCBcInBvc3RlclwiKTtcbiAgfVxuXG4gIHNldCBwb3N0ZXIodmFsdWUpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcInBvc3RlclwiLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQgdmlkZW9XaWR0aCgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldCB2aWRlb0hlaWdodCgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IEhUTUxWaWRlb0VsZW1lbnRJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNzc29tID0gcmVxdWlyZShcImNzc29tXCIpO1xuXG5jbGFzcyBMaW5rU3R5bGVJbXBsIHtcbiAgZ2V0IHNoZWV0KCkge1xuICAgIGlmICghdGhpcy5fY3NzU3R5bGVTaGVldCkge1xuICAgICAgdGhpcy5fY3NzU3R5bGVTaGVldCA9IG5ldyBjc3NvbS5DU1NTdHlsZVNoZWV0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jc3NTdHlsZVNoZWV0O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbXBsZW1lbnRhdGlvbjogTGlua1N0eWxlSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBFdmVudFRhcmdldEltcGwgPSByZXF1aXJlKFwiLi4vZXZlbnRzL0V2ZW50VGFyZ2V0LWltcGxcIikuaW1wbGVtZW50YXRpb247XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5cbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcbmNvbnN0IHNpbXVsdGFuZW91c0l0ZXJhdG9ycyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKS5zaW11bHRhbmVvdXNJdGVyYXRvcnM7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlXCIpO1xuY29uc3QgTk9ERV9ET0NVTUVOVF9QT1NJVElPTiA9IHJlcXVpcmUoXCIuLi9ub2RlLWRvY3VtZW50LXBvc2l0aW9uXCIpO1xuY29uc3QgY3JlYXRlTGl2ZU5vZGVMaXN0ID0gcmVxdWlyZShcIi4uL25vZGUtbGlzdFwiKS5jcmVhdGVMaXZlO1xuY29uc3QgdXBkYXRlTm9kZUxpc3QgPSByZXF1aXJlKFwiLi4vbm9kZS1saXN0XCIpLnVwZGF0ZTtcbmNvbnN0IHVwZGF0ZUhUTUxDb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uL2h0bWwtY29sbGVjdGlvblwiKS51cGRhdGU7XG5jb25zdCBkb2N1bWVudEJhc2VVUkxTZXJpYWxpemVkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZG9jdW1lbnQtYmFzZS11cmxcIikuZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZDtcbmNvbnN0IGNsb25lTm9kZSA9IHJlcXVpcmUoXCIuLi9ub2RlXCIpLmNsb25lO1xuY29uc3QgYXR0cmlidXRlcyA9IHJlcXVpcmUoXCIuLi9hdHRyaWJ1dGVzXCIpO1xuXG5mdW5jdGlvbiBpc09ic29sZXRlTm9kZVR5cGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkVOVElUWV9OT0RFIHx8XG4gICAgbm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkVOVElUWV9SRUZFUkVOQ0VfTk9ERSB8fFxuICAgIG5vZGUubm9kZVR5cGUgPT09IE5PREVfVFlQRS5OT1RBVElPTl9OT0RFIHx8XG4vLyAgbm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkFUVFJJQlVURV9OT0RFIHx8ICAvLyB0aGlzIGlzIG1pc3NpbmcgaG93IGRvIHdlIGhhbmRsZT9cbiAgICBub2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuQ0RBVEFfU0VDVElPTl9OT0RFO1xufVxuXG5mdW5jdGlvbiBub2RlRXF1YWxzKGEsIGIpIHtcbiAgaWYgKGEubm9kZVR5cGUgIT09IGIubm9kZVR5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKGEubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5PREVfVFlQRS5ET0NVTUVOVF9UWVBFX05PREU6XG4gICAgICBpZiAoYS5uYW1lICE9PSBiLm5hbWUgfHwgYS5wdWJsaWNJZCAhPT0gYi5wdWJsaWNJZCB8fFxuICAgICAgICAgIGEuc3lzdGVtSWQgIT09IGIuc3lzdGVtSWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFOlxuICAgICAgaWYgKGEuX25hbWVzcGFjZVVSSSAhPT0gYi5fbmFtZXNwYWNlVVJJIHx8IGEuX3ByZWZpeCAhPT0gYi5fcHJlZml4IHx8IGEuX2xvY2FsTmFtZSAhPT0gYi5fbG9jYWxOYW1lIHx8XG4gICAgICAgICAgYS5fYXR0cmlidXRlcy5sZW5ndGggIT09IGIuX2F0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTk9ERV9UWVBFLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTpcbiAgICAgIGlmIChhLl90YXJnZXQgIT09IGIuX3RhcmdldCB8fCBhLl9kYXRhICE9PSBiLl9kYXRhKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTk9ERV9UWVBFLlRFWFRfTk9ERTpcbiAgICBjYXNlIE5PREVfVFlQRS5DT01NRU5UX05PREU6XG4gICAgICBpZiAoYS5fZGF0YSAhPT0gYi5fZGF0YSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChhLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFICYmICFhdHRyaWJ1dGVzLmF0dHJpYnV0ZUxpc3RzRXF1YWwoYSwgYikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IG5vZGVzIG9mIHNpbXVsdGFuZW91c0l0ZXJhdG9ycyhkb21TeW1ib2xUcmVlLmNoaWxkcmVuSXRlcmF0b3IoYSksIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcihiKSkpIHtcbiAgICBpZiAoIW5vZGVzWzBdIHx8ICFub2Rlc1sxXSkge1xuICAgICAgLy8gbWlzbWF0Y2ggaW4gdGhlIGFtb3VudCBvZiBjaGlsZE5vZGVzXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFub2RlRXF1YWxzKG5vZGVzWzBdLCBub2Rlc1sxXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuY2xhc3MgTm9kZUltcGwgZXh0ZW5kcyBFdmVudFRhcmdldEltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBkb21TeW1ib2xUcmVlLmluaXRpYWxpemUodGhpcyk7XG5cbiAgICB0aGlzLl9jb3JlID0gcHJpdmF0ZURhdGEuY29yZTtcbiAgICB0aGlzLl9vd25lckRvY3VtZW50ID0gcHJpdmF0ZURhdGEub3duZXJEb2N1bWVudDtcblxuICAgIHRoaXMuX2NoaWxkTm9kZXNMaXN0ID0gbnVsbDtcbiAgICB0aGlzLl9jaGlsZHJlbkxpc3QgPSBudWxsO1xuICAgIHRoaXMuX3ZlcnNpb24gPSAwO1xuICAgIHRoaXMuX21lbW9pemVkUXVlcmllcyA9IHt9O1xuICB9XG5cbiAgZ2V0IG5vZGVWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLlRFWFRfTk9ERSB8fFxuICAgICAgdGhpcy5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkNPTU1FTlRfTk9ERSB8fFxuICAgICAgdGhpcy5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkNEQVRBX1NFQ1RJT05fTk9ERSB8fFxuICAgICAgdGhpcy5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzZXQgbm9kZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMubm9kZVR5cGUgPT09IE5PREVfVFlQRS5URVhUX05PREUgfHxcbiAgICAgIHRoaXMubm9kZVR5cGUgPT09IE5PREVfVFlQRS5DT01NRU5UX05PREUgfHxcbiAgICAgIHRoaXMubm9kZVR5cGUgPT09IE5PREVfVFlQRS5DREFUQV9TRUNUSU9OX05PREUgfHxcbiAgICAgIHRoaXMubm9kZVR5cGUgPT09IE5PREVfVFlQRS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpIHtcbiAgICAgIHRoaXMucmVwbGFjZURhdGEoMCwgdGhpcy5sZW5ndGgsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFyZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gZG9tU3ltYm9sVHJlZS5wYXJlbnQodGhpcyk7XG4gIH1cblxuICBnZXQgbm9kZU5hbWUoKSB7XG4gICAgc3dpdGNoICh0aGlzLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5PREVfVFlQRS5FTEVNRU5UX05PREU6XG4gICAgICAgIHJldHVybiB0aGlzLnRhZ05hbWU7XG4gICAgICBjYXNlIE5PREVfVFlQRS5URVhUX05PREU6XG4gICAgICAgIHJldHVybiBcIiN0ZXh0XCI7XG4gICAgICBjYXNlIE5PREVfVFlQRS5DREFUQV9TRUNUSU9OX05PREU6XG4gICAgICAgIHJldHVybiBcIiNjZGF0YS1zZWN0aW9uXCI7XG4gICAgICBjYXNlIE5PREVfVFlQRS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6XG4gICAgICAgIHJldHVybiB0aGlzLnRhcmdldDtcbiAgICAgIGNhc2UgTk9ERV9UWVBFLkNPTU1FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIFwiI2NvbW1lbnRcIjtcbiAgICAgIGNhc2UgTk9ERV9UWVBFLkRPQ1VNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBcIiNkb2N1bWVudFwiO1xuICAgICAgY2FzZSBOT0RFX1RZUEUuRE9DVU1FTlRfVFlQRV9OT0RFOlxuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgICAgY2FzZSBOT0RFX1RZUEUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIFwiI2RvY3VtZW50LWZyYWdtZW50XCI7XG4gICAgfVxuXG4gICAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgcmV0dXJuIGRvbVN5bWJvbFRyZWUuZmlyc3RDaGlsZCh0aGlzKTtcbiAgfVxuXG4gIGdldCBvd25lckRvY3VtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRE9DVU1FTlRfTk9ERSA/IG51bGwgOiB0aGlzLl9vd25lckRvY3VtZW50O1xuICB9XG5cbiAgZ2V0IGxhc3RDaGlsZCgpIHtcbiAgICByZXR1cm4gZG9tU3ltYm9sVHJlZS5sYXN0Q2hpbGQodGhpcyk7XG4gIH1cblxuICBnZXQgY2hpbGROb2RlcygpIHtcbiAgICBpZiAoIXRoaXMuX2NoaWxkTm9kZXNMaXN0KSB7XG4gICAgICB0aGlzLl9jaGlsZE5vZGVzTGlzdCA9IGNyZWF0ZUxpdmVOb2RlTGlzdCh0aGlzLCAoKSA9PiBkb21TeW1ib2xUcmVlLmNoaWxkcmVuVG9BcnJheSh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZU5vZGVMaXN0KHRoaXMuX2NoaWxkTm9kZXNMaXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY2hpbGROb2Rlc0xpc3Q7XG4gIH1cblxuICBnZXQgbmV4dFNpYmxpbmcoKSB7XG4gICAgcmV0dXJuIGRvbVN5bWJvbFRyZWUubmV4dFNpYmxpbmcodGhpcyk7XG4gIH1cblxuICBnZXQgcHJldmlvdXNTaWJsaW5nKCkge1xuICAgIHJldHVybiBkb21TeW1ib2xUcmVlLnByZXZpb3VzU2libGluZyh0aGlzKTtcbiAgfVxuXG4gIGluc2VydEJlZm9yZShuZXdDaGlsZEltcGwsIHJlZkNoaWxkSW1wbCkge1xuICAgIC8vIFRPRE8gYnJhbmRpbmdcbiAgICBpZiAoIW5ld0NoaWxkSW1wbCB8fCAhKG5ld0NoaWxkSW1wbCBpbnN0YW5jZW9mIE5vZGVJbXBsKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IHRvIE5vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZSBtdXN0IGJlIGEgTm9kZVwiKTtcbiAgICB9XG4gICAgaWYgKHJlZkNoaWxkSW1wbCAhPT0gbnVsbCAmJiAhKHJlZkNoaWxkSW1wbCBpbnN0YW5jZW9mIE5vZGVJbXBsKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlNlY29uZCBhcmd1bWVudCB0byBOb2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUgbXVzdCBiZSBhIE5vZGUgb3IgbnVsbCBvciB1bmRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgLy8gRG9jdW1lbnRUeXBlIG11c3QgYmUgaW1wbGljaXRseSBhZG9wdGVkXG4gICAgaWYgKG5ld0NoaWxkSW1wbC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkRPQ1VNRU5UX1RZUEVfTk9ERSkge1xuICAgICAgbmV3Q2hpbGRJbXBsLl9vd25lckRvY3VtZW50ID0gdGhpcy5fb3duZXJEb2N1bWVudDtcbiAgICB9XG5cbiAgICBpZiAobmV3Q2hpbGRJbXBsLm5vZGVUeXBlICYmIG5ld0NoaWxkSW1wbC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkFUVFJJQlVURV9OT0RFKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5ISUVSQVJDSFlfUkVRVUVTVF9FUlIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9vd25lckRvY3VtZW50ICE9PSBuZXdDaGlsZEltcGwuX293bmVyRG9jdW1lbnQpIHtcbiAgICAgIC8vIGFkb3B0IHRoZSBub2RlIHdoZW4gaXQncyBub3QgaW4gdGhpcyBkb2N1bWVudFxuICAgICAgdGhpcy5fb3duZXJEb2N1bWVudC5hZG9wdE5vZGUobmV3Q2hpbGRJbXBsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2VhcmNoIGZvciBwYXJlbnRzIG1hdGNoaW5nIHRoZSBuZXdDaGlsZFxuICAgICAgZm9yIChjb25zdCBhbmNlc3RvciBvZiBkb21TeW1ib2xUcmVlLmFuY2VzdG9yc0l0ZXJhdG9yKHRoaXMpKSB7XG4gICAgICAgIGlmIChhbmNlc3RvciA9PT0gbmV3Q2hpbGRJbXBsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZyYWdtZW50cyBhcmUgbWVyZ2VkIGludG8gdGhlIGVsZW1lbnQgKGV4Y2VwdCBwYXJzZXItY3JlYXRlZCBmcmFnbWVudHMgaW4gPHRlbXBsYXRlPilcbiAgICBpZiAobmV3Q2hpbGRJbXBsLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkge1xuICAgICAgbGV0IGdyYW5kQ2hpbGRJbXBsO1xuICAgICAgd2hpbGUgKChncmFuZENoaWxkSW1wbCA9IGRvbVN5bWJvbFRyZWUuZmlyc3RDaGlsZChuZXdDaGlsZEltcGwpKSkge1xuICAgICAgICBuZXdDaGlsZEltcGwucmVtb3ZlQ2hpbGQoZ3JhbmRDaGlsZEltcGwpO1xuICAgICAgICB0aGlzLmluc2VydEJlZm9yZShncmFuZENoaWxkSW1wbCwgcmVmQ2hpbGRJbXBsKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5ld0NoaWxkSW1wbCA9PT0gcmVmQ2hpbGRJbXBsKSB7XG4gICAgICByZXR1cm4gbmV3Q2hpbGRJbXBsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvbGRQYXJlbnRJbXBsID0gZG9tU3ltYm9sVHJlZS5wYXJlbnQobmV3Q2hpbGRJbXBsKTtcbiAgICAgIC8vIGlmIHRoZSBuZXdDaGlsZCBpcyBhbHJlYWR5IGluIHRoZSB0cmVlIGVsc2V3aGVyZSwgcmVtb3ZlIGl0IGZpcnN0XG4gICAgICBpZiAob2xkUGFyZW50SW1wbCkge1xuICAgICAgICBvbGRQYXJlbnRJbXBsLnJlbW92ZUNoaWxkKG5ld0NoaWxkSW1wbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWZDaGlsZEltcGwgPT09IG51bGwpIHtcbiAgICAgICAgZG9tU3ltYm9sVHJlZS5hcHBlbmRDaGlsZCh0aGlzLCBuZXdDaGlsZEltcGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRvbVN5bWJvbFRyZWUucGFyZW50KHJlZkNoaWxkSW1wbCkgIT09IHRoaXMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT1RfRk9VTkRfRVJSKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvbVN5bWJvbFRyZWUuaW5zZXJ0QmVmb3JlKHJlZkNoaWxkSW1wbCwgbmV3Q2hpbGRJbXBsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbW9kaWZpZWQoKTtcblxuICAgICAgaWYgKHRoaXMuX2F0dGFjaGVkICYmIG5ld0NoaWxkSW1wbC5fYXR0YWNoKSB7XG4gICAgICAgIG5ld0NoaWxkSW1wbC5fYXR0YWNoKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2Rlc2NlbmRhbnRBZGRlZCh0aGlzLCBuZXdDaGlsZEltcGwpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdDaGlsZEltcGw7XG4gIH0gLy8gcmFpc2VzKERPTUV4Y2VwdGlvbik7XG5cbiAgX21vZGlmaWVkKCkge1xuICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICBmb3IgKGNvbnN0IGFuY2VzdG9yIG9mIGRvbVN5bWJvbFRyZWUuYW5jZXN0b3JzSXRlcmF0b3IodGhpcykpIHtcbiAgICAgIGFuY2VzdG9yLl92ZXJzaW9uKys7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NoaWxkcmVuTGlzdCkge1xuICAgICAgdXBkYXRlSFRNTENvbGxlY3Rpb24odGhpcy5fY2hpbGRyZW5MaXN0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NoaWxkTm9kZXNMaXN0KSB7XG4gICAgICB1cGRhdGVOb2RlTGlzdCh0aGlzLl9jaGlsZE5vZGVzTGlzdCk7XG4gICAgfVxuICAgIHRoaXMuX2NsZWFyTWVtb2l6ZWRRdWVyaWVzKCk7XG4gIH1cblxuICBfY2xlYXJNZW1vaXplZFF1ZXJpZXMoKSB7XG4gICAgdGhpcy5fbWVtb2l6ZWRRdWVyaWVzID0ge307XG4gICAgY29uc3QgbXlQYXJlbnQgPSBkb21TeW1ib2xUcmVlLnBhcmVudCh0aGlzKTtcbiAgICBpZiAobXlQYXJlbnQpIHtcbiAgICAgIG15UGFyZW50Ll9jbGVhck1lbW9pemVkUXVlcmllcygpO1xuICAgIH1cbiAgfVxuXG4gIF9kZXNjZW5kYW50UmVtb3ZlZChwYXJlbnQsIGNoaWxkKSB7XG4gICAgY29uc3QgbXlQYXJlbnQgPSBkb21TeW1ib2xUcmVlLnBhcmVudCh0aGlzKTtcbiAgICBpZiAobXlQYXJlbnQpIHtcbiAgICAgIG15UGFyZW50Ll9kZXNjZW5kYW50UmVtb3ZlZChwYXJlbnQsIGNoaWxkKTtcbiAgICB9XG4gIH1cblxuICBfZGVzY2VuZGFudEFkZGVkKHBhcmVudCwgY2hpbGQpIHtcbiAgICBjb25zdCBteVBhcmVudCA9IGRvbVN5bWJvbFRyZWUucGFyZW50KHRoaXMpO1xuICAgIGlmIChteVBhcmVudCkge1xuICAgICAgbXlQYXJlbnQuX2Rlc2NlbmRhbnRBZGRlZChwYXJlbnQsIGNoaWxkKTtcbiAgICB9XG4gIH1cblxuICByZXBsYWNlQ2hpbGQobm9kZSwgY2hpbGQpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgZW5vdWdoIGFyZ3VtZW50cyB0byBOb2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGRcIik7XG4gICAgfVxuICAgIC8vIFRPRE8gYnJhbmRpbmdcbiAgICBpZiAoIW5vZGUgfHwgIShub2RlIGluc3RhbmNlb2YgTm9kZUltcGwpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgdG8gTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkIG11c3QgYmUgYSBOb2RlXCIpO1xuICAgIH1cbiAgICBpZiAoIWNoaWxkIHx8ICEoY2hpbGQgaW5zdGFuY2VvZiBOb2RlSW1wbCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTZWNvbmQgYXJndW1lbnQgdG8gTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkIG11c3QgYmUgYSBOb2RlXCIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKG5vZGUsIGNoaWxkKTtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH1cblxuICBfYXR0YWNoKCkge1xuICAgIHRoaXMuX2F0dGFjaGVkID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHRoaXMpKSB7XG4gICAgICBpZiAoY2hpbGQuX2F0dGFjaCkge1xuICAgICAgICBjaGlsZC5fYXR0YWNoKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2RldGFjaCgpIHtcbiAgICB0aGlzLl9hdHRhY2hlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX293bmVyRG9jdW1lbnQgJiYgdGhpcy5fb3duZXJEb2N1bWVudC5fbGFzdEZvY3VzZWRFbGVtZW50ID09PSB0aGlzKSB7XG4gICAgICB0aGlzLl9vd25lckRvY3VtZW50Ll9sYXN0Rm9jdXNlZEVsZW1lbnQgPSBudWxsO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHRoaXMpKSB7XG4gICAgICBpZiAoY2hpbGQuX2RldGFjaCkge1xuICAgICAgICBjaGlsZC5fZGV0YWNoKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlQ2hpbGQoLyogTm9kZSAqLyBvbGRDaGlsZEltcGwpIHtcbiAgICBpZiAoIW9sZENoaWxkSW1wbCB8fCBkb21TeW1ib2xUcmVlLnBhcmVudChvbGRDaGlsZEltcGwpICE9PSB0aGlzKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5OT1RfRk9VTkRfRVJSKTtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRQcmV2aW91c1NpYmxpbmcgPSBvbGRDaGlsZEltcGwucHJldmlvdXNTaWJsaW5nO1xuICAgIGRvbVN5bWJvbFRyZWUucmVtb3ZlKG9sZENoaWxkSW1wbCk7XG4gICAgdGhpcy5fbW9kaWZpZWQoKTtcbiAgICBvbGRDaGlsZEltcGwuX2RldGFjaCgpO1xuICAgIHRoaXMuX2Rlc2NlbmRhbnRSZW1vdmVkKHRoaXMsIG9sZENoaWxkSW1wbCk7XG4gICAgaWYgKHRoaXMuX293bmVyRG9jdW1lbnQpIHtcbiAgICAgIHRoaXMuX293bmVyRG9jdW1lbnQuX3J1blJlbW92aW5nU3RlcHMob2xkQ2hpbGRJbXBsLCB0aGlzLCBvbGRQcmV2aW91c1NpYmxpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gb2xkQ2hpbGRJbXBsO1xuICB9IC8vIHJhaXNlcyhET01FeGNlcHRpb24pO1xuXG4gIGFwcGVuZENoaWxkKG5ld0NoaWxkKSB7XG4gICAgaWYgKCEoXCJub2RlVHlwZVwiIGluIG5ld0NoaWxkKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZpcnN0IGFyZ3VtZW50IHRvIE5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkIG11c3QgYmUgYSBOb2RlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluc2VydEJlZm9yZShuZXdDaGlsZCwgbnVsbCk7XG4gIH1cblxuICBoYXNDaGlsZE5vZGVzKCkge1xuICAgIHJldHVybiBkb21TeW1ib2xUcmVlLmhhc0NoaWxkcmVuKHRoaXMpO1xuICB9XG5cbiAgbm9ybWFsaXplKCkge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHRoaXMpKSB7XG4gICAgICBpZiAoY2hpbGQubm9ybWFsaXplKSB7XG4gICAgICAgIGNoaWxkLm5vcm1hbGl6ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGQubm9kZVZhbHVlID09PSBcIlwiKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJldkNoaWxkID0gZG9tU3ltYm9sVHJlZS5wcmV2aW91c1NpYmxpbmcoY2hpbGQpO1xuXG4gICAgICBpZiAocHJldkNoaWxkICYmIHByZXZDaGlsZC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLlRFWFRfTk9ERSAmJiBjaGlsZC5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLlRFWFRfTk9ERSkge1xuICAgICAgICAvLyBtZXJnZSB0ZXh0IG5vZGVzXG4gICAgICAgIHByZXZDaGlsZC5hcHBlbmREYXRhKGNoaWxkLm5vZGVWYWx1ZSk7XG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBwYXJlbnRFbGVtZW50KCkge1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSBkb21TeW1ib2xUcmVlLnBhcmVudCh0aGlzKTtcbiAgICByZXR1cm4gcGFyZW50Tm9kZSAhPT0gbnVsbCAmJiBwYXJlbnROb2RlLm5vZGVUeXBlID09PSBOT0RFX1RZUEUuRUxFTUVOVF9OT0RFID8gcGFyZW50Tm9kZSA6IG51bGw7XG4gIH1cblxuICBnZXQgYmFzZVVSSSgpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZCh0aGlzLl9vd25lckRvY3VtZW50KTtcbiAgfVxuXG4gIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG90aGVySW1wbCkge1xuICAgIC8vIExldCByZWZlcmVuY2UgYmUgdGhlIGNvbnRleHQgb2JqZWN0LlxuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXM7XG5cbiAgICBpZiAoIShvdGhlckltcGwgaW5zdGFuY2VvZiBOb2RlSW1wbCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbXBhcmluZyBwb3NpdGlvbiBhZ2FpbnN0IG5vbi1Ob2RlIHZhbHVlcyBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYnNvbGV0ZU5vZGVUeXBlKHJlZmVyZW5jZSkgfHwgaXNPYnNvbGV0ZU5vZGVUeXBlKG90aGVySW1wbCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ic29sZXRlIG5vZGUgdHlwZVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBkb21TeW1ib2xUcmVlLmNvbXBhcmVUcmVlUG9zaXRpb24ocmVmZXJlbmNlLCBvdGhlckltcGwpO1xuXG4gICAgLy8g4oCcSWYgb3RoZXIgYW5kIHJlZmVyZW5jZSBhcmUgbm90IGluIHRoZSBzYW1lIHRyZWUsIHJldHVybiB0aGUgcmVzdWx0IG9mIGFkZGluZyBET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQsXG4gICAgLy8gIERPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDLCBhbmQgZWl0aGVyIERPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORyBvclxuICAgIC8vIERPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORywgd2l0aCB0aGUgY29uc3RyYWludCB0aGF0IHRoaXMgaXMgdG8gYmUgY29uc2lzdGVudCwgdG9nZXRoZXIu4oCdXG4gICAgaWYgKHJlc3VsdCA9PT0gTk9ERV9ET0NVTUVOVF9QT1NJVElPTi5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQpIHtcbiAgICAgIC8vIHN5bWJvbC10cmVlIGRvZXMgbm90IGFkZCB0aGVzZSBiaXRzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjOlxuICAgICAgcmV0dXJuIE5PREVfRE9DVU1FTlRfUE9TSVRJT04uRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEIHxcbiAgICAgICAgTk9ERV9ET0NVTUVOVF9QT1NJVElPTi5ET0NVTUVOVF9QT1NJVElPTl9JTVBMRU1FTlRBVElPTl9TUEVDSUZJQyB8XG4gICAgICAgIE5PREVfRE9DVU1FTlRfUE9TSVRJT04uRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb250YWlucyhvdGhlcikge1xuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgTm9kZUltcGwpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHRoaXMuY29tcGFyZURvY3VtZW50UG9zaXRpb24ob3RoZXIpICYgTk9ERV9ET0NVTUVOVF9QT1NJVElPTi5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpO1xuICB9XG5cbiAgaXNFcXVhbE5vZGUobm9kZSkge1xuICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRmFzdC1wYXRoLCBub3QgaW4gdGhlIHNwZWNcbiAgICBpZiAodGhpcyA9PT0gbm9kZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVFcXVhbHModGhpcywgbm9kZSk7XG4gIH1cblxuICBjbG9uZU5vZGUoZGVlcCkge1xuICAgIGRlZXAgPSBCb29sZWFuKGRlZXApO1xuXG4gICAgcmV0dXJuIGNsb25lTm9kZSh0aGlzLl9jb3JlLCB0aGlzLCB1bmRlZmluZWQsIGRlZXApO1xuICB9XG5cbiAgZ2V0IHRleHRDb250ZW50KCkge1xuICAgIGxldCB0ZXh0O1xuICAgIHN3aXRjaCAodGhpcy5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOT0RFX1RZUEUuQ09NTUVOVF9OT0RFOlxuICAgICAgY2FzZSBOT0RFX1RZUEUuQ0RBVEFfU0VDVElPTl9OT0RFOlxuICAgICAgY2FzZSBOT0RFX1RZUEUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOlxuICAgICAgY2FzZSBOT0RFX1RZUEUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gdGhpcy5ub2RlVmFsdWU7XG5cbiAgICAgIGNhc2UgTk9ERV9UWVBFLkFUVFJJQlVURV9OT0RFOlxuICAgICAgY2FzZSBOT0RFX1RZUEUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpcbiAgICAgIGNhc2UgTk9ERV9UWVBFLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgdGV4dCA9IFwiXCI7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZG9tU3ltYm9sVHJlZS50cmVlSXRlcmF0b3IodGhpcykpIHtcbiAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5URVhUX05PREUgfHwgY2hpbGQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5DREFUQV9TRUNUSU9OX05PREUpIHtcbiAgICAgICAgICAgIHRleHQgKz0gY2hpbGQubm9kZVZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgc2V0IHRleHRDb250ZW50KHR4dCkge1xuICAgIHN3aXRjaCAodGhpcy5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOT0RFX1RZUEUuQ09NTUVOVF9OT0RFOlxuICAgICAgY2FzZSBOT0RFX1RZUEUuQ0RBVEFfU0VDVElPTl9OT0RFOlxuICAgICAgY2FzZSBOT0RFX1RZUEUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOlxuICAgICAgY2FzZSBOT0RFX1RZUEUuVEVYVF9OT0RFOlxuICAgICAgICB0aGlzLm5vZGVWYWx1ZSA9IFN0cmluZyh0eHQpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGNoaWxkID0gZG9tU3ltYm9sVHJlZS5maXJzdENoaWxkKHRoaXMpO1xuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICBjaGlsZCA9IGRvbVN5bWJvbFRyZWUuZmlyc3RDaGlsZCh0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodHh0ICE9PSBcIlwiICYmIHR4dCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5hcHBlbmRDaGlsZCh0aGlzLl9vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHR4dCkpO1xuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBpZGxVdGlscy53cmFwcGVyRm9ySW1wbCh0aGlzKTtcbiAgICByZXR1cm4gYFtvYmplY3QgJHt3cmFwcGVyLmNvbnN0cnVjdG9yLm5hbWV9XWA7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBOb2RlSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlXCIpO1xuXG5jbGFzcyBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGVJbXBsIHtcbiAgZ2V0IG5leHRFbGVtZW50U2libGluZygpIHtcbiAgICBmb3IgKGNvbnN0IHNpYmxpbmcgb2YgZG9tU3ltYm9sVHJlZS5uZXh0U2libGluZ3NJdGVyYXRvcih0aGlzKSkge1xuICAgICAgaWYgKHNpYmxpbmcubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIHNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSB7XG4gICAgZm9yIChjb25zdCBzaWJsaW5nIG9mIGRvbVN5bWJvbFRyZWUucHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKHRoaXMpKSB7XG4gICAgICBpZiAoc2libGluZy5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICByZXR1cm4gc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGVJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNsYXNzIE5vbkVsZW1lbnRQYXJlbnROb2RlSW1wbCB7XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBOb25FbGVtZW50UGFyZW50Tm9kZUltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL3V0aWxzXCIpO1xuXG5jb25zdCBud21hdGNoZXIgPSByZXF1aXJlKFwibndtYXRjaGVyL3NyYy9ud21hdGNoZXItbm9xc2FcIik7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlXCIpO1xuY29uc3QgY3JlYXRlSFRNTENvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vaHRtbC1jb2xsZWN0aW9uXCIpLmNyZWF0ZTtcbmNvbnN0IHVwZGF0ZUhUTUxDb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uL2h0bWwtY29sbGVjdGlvblwiKS51cGRhdGU7XG5jb25zdCBtZW1vaXplUXVlcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIikubWVtb2l6ZVF1ZXJ5O1xuY29uc3QgY3JlYXRlU3RhdGljTm9kZUxpc3QgPSByZXF1aXJlKFwiLi4vbm9kZS1saXN0XCIpLmNyZWF0ZVN0YXRpYztcblxuLy8gbndtYXRjaGVyIGdldHMgYGRvY3VtZW50LmRvY3VtZW50RWxlbWVudGAgYXQgY3JlYXRpb24tdGltZSwgc28gd2UgaGF2ZSB0byBpbml0aWFsaXplIGxhemlseSwgc2luY2UgaW4gdGhlIGluaXRpYWxcbi8vIHN0YWdlcyBvZiBEb2N1bWVudCBpbml0aWFsaXphdGlvbiwgdGhlcmUgaXMgbm8gZG9jdW1lbnRFbGVtZW50IHByZXNlbnQgeWV0LlxuZnVuY3Rpb24gYWRkTndtYXRjaGVyKHBhcmVudE5vZGUpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBwYXJlbnROb2RlLl9vd25lckRvY3VtZW50O1xuXG4gIGlmICghZG9jdW1lbnQuX253bWF0Y2hlcikge1xuICAgIGRvY3VtZW50Ll9ud21hdGNoZXIgPSBud21hdGNoZXIoeyBkb2N1bWVudCB9KTtcbiAgICBkb2N1bWVudC5fbndtYXRjaGVyLmNvbmZpZ3VyZSh7IFVOSVFVRV9JRDogZmFsc2UgfSk7XG4gIH1cblxuICByZXR1cm4gZG9jdW1lbnQuX253bWF0Y2hlcjtcbn1cblxuY2xhc3MgUGFyZW50Tm9kZUltcGwge1xuICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgaWYgKCF0aGlzLl9jaGlsZHJlbkxpc3QpIHtcbiAgICAgIHRoaXMuX2NoaWxkcmVuTGlzdCA9IGNyZWF0ZUhUTUxDb2xsZWN0aW9uKHRoaXMsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGRvbVN5bWJvbFRyZWUuY2hpbGRyZW5Ub0FycmF5KHRoaXMsIHsgZmlsdGVyKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gTk9ERV9UWVBFLkVMRU1FTlRfTk9ERTtcbiAgICAgICAgfSB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVIVE1MQ29sbGVjdGlvbih0aGlzLl9jaGlsZHJlbkxpc3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW5MaXN0O1xuICB9XG5cbiAgZ2V0IGZpcnN0RWxlbWVudENoaWxkKCkge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZG9tU3ltYm9sVHJlZS5jaGlsZHJlbkl0ZXJhdG9yKHRoaXMpKSB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IGxhc3RFbGVtZW50Q2hpbGQoKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBkb21TeW1ib2xUcmVlLmNoaWxkcmVuSXRlcmF0b3IodGhpcywgeyByZXZlcnNlOiB0cnVlIH0pKSB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IGNoaWxkRWxlbWVudENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgfVxufVxuXG5QYXJlbnROb2RlSW1wbC5wcm90b3R5cGUucXVlcnlTZWxlY3RvciA9IG1lbW9pemVRdWVyeShmdW5jdGlvbiAoc2VsZWN0b3JzKSB7XG4gIGNvbnN0IG1hdGNoZXIgPSBhZGROd21hdGNoZXIodGhpcyk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gbWF0Y2hlci5maXJzdChzZWxlY3RvcnMsIGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKHRoaXMpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIsIGUubWVzc2FnZSk7XG4gIH1cbn0pO1xuXG5QYXJlbnROb2RlSW1wbC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCA9IG1lbW9pemVRdWVyeShmdW5jdGlvbiAoc2VsZWN0b3JzKSB7XG4gIGNvbnN0IG1hdGNoZXIgPSBhZGROd21hdGNoZXIodGhpcyk7XG5cbiAgbGV0IGxpc3Q7XG4gIHRyeSB7XG4gICAgbGlzdCA9IG1hdGNoZXIuc2VsZWN0KHNlbGVjdG9ycywgaWRsVXRpbHMud3JhcHBlckZvckltcGwodGhpcykpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uU1lOVEFYX0VSUiwgZS5tZXNzYWdlKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVTdGF0aWNOb2RlTGlzdChsaXN0KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IFBhcmVudE5vZGVJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IENoYXJhY3RlckRhdGFJbXBsID0gcmVxdWlyZShcIi4vQ2hhcmFjdGVyRGF0YS1pbXBsXCIpLmltcGxlbWVudGF0aW9uO1xuXG5jb25zdCBOT0RFX1RZUEUgPSByZXF1aXJlKFwiLi4vbm9kZS10eXBlXCIpO1xuXG5jbGFzcyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsIGV4dGVuZHMgQ2hhcmFjdGVyRGF0YUltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMubm9kZVR5cGUgPSBOT0RFX1RZUEUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFO1xuICAgIHRoaXMuX3RhcmdldCA9IHByaXZhdGVEYXRhLnRhcmdldDtcbiAgfVxuXG4gIGdldCB0YXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IFByb2Nlc3NpbmdJbnN0cnVjdGlvbkltcGxcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgQ2hhcmFjdGVyRGF0YUltcGwgPSByZXF1aXJlKFwiLi9DaGFyYWN0ZXJEYXRhLWltcGxcIikuaW1wbGVtZW50YXRpb247XG5cbmNvbnN0IGRvbVN5bWJvbFRyZWUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9pbnRlcm5hbC1jb25zdGFudHNcIikuZG9tU3ltYm9sVHJlZTtcbmNvbnN0IERPTUV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi93ZWItaWRsL0RPTUV4Y2VwdGlvblwiKTtcbmNvbnN0IE5PREVfVFlQRSA9IHJlcXVpcmUoXCIuLi9ub2RlLXR5cGVcIik7XG5cbmNsYXNzIFRleHRJbXBsIGV4dGVuZHMgQ2hhcmFjdGVyRGF0YUltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHN1cGVyKGFyZ3MsIHByaXZhdGVEYXRhKTtcblxuICAgIHRoaXMubm9kZVR5cGUgPSBOT0RFX1RZUEUuVEVYVF9OT0RFO1xuICB9XG5cbiAgc3BsaXRUZXh0KG9mZnNldCkge1xuICAgIG9mZnNldCA+Pj49IDA7XG5cbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aDtcblxuICAgIGlmIChvZmZzZXQgPiBsZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb3VudCA9IGxlbmd0aCAtIG9mZnNldDtcbiAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5zdWJzdHJpbmdEYXRhKG9mZnNldCwgY291bnQpO1xuXG4gICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuX293bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3RGF0YSk7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBkb21TeW1ib2xUcmVlLnBhcmVudCh0aGlzKTtcblxuICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgdGhpcy5uZXh0U2libGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXBsYWNlRGF0YShvZmZzZXQsIGNvdW50LCBcIlwiKTtcblxuICAgIHJldHVybiBuZXdOb2RlO1xuXG4gICAgLy8gVE9ETzogcmFuZ2Ugc3R1ZmZcbiAgfVxuXG4gIGdldCB3aG9sZVRleHQoKSB7XG4gICAgbGV0IHdob2xlVGV4dCA9IHRoaXMudGV4dENvbnRlbnQ7XG4gICAgbGV0IG5leHQ7XG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzO1xuICAgIHdoaWxlICgobmV4dCA9IGRvbVN5bWJvbFRyZWUucHJldmlvdXNTaWJsaW5nKGN1cnJlbnQpKSAmJiBuZXh0Lm5vZGVUeXBlID09PSBOT0RFX1RZUEUuVEVYVF9OT0RFKSB7XG4gICAgICB3aG9sZVRleHQgPSBuZXh0LnRleHRDb250ZW50ICsgd2hvbGVUZXh0O1xuICAgICAgY3VycmVudCA9IG5leHQ7XG4gICAgfVxuICAgIGN1cnJlbnQgPSB0aGlzO1xuICAgIHdoaWxlICgobmV4dCA9IGRvbVN5bWJvbFRyZWUubmV4dFNpYmxpbmcoY3VycmVudCkpICYmIG5leHQubm9kZVR5cGUgPT09IE5PREVfVFlQRS5URVhUX05PREUpIHtcbiAgICAgIHdob2xlVGV4dCArPSBuZXh0LnRleHRDb250ZW50O1xuICAgICAgY3VycmVudCA9IG5leHQ7XG4gICAgfVxuICAgIHJldHVybiB3aG9sZVRleHQ7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBUZXh0SW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jbGFzcyBXaW5kb3dFdmVudEhhbmRsZXJzSW1wbCB7XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGltcGxlbWVudGF0aW9uOiBXaW5kb3dFdmVudEhhbmRsZXJzSW1wbFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgRG9jdW1lbnRJbXBsID0gcmVxdWlyZShcIi4vRG9jdW1lbnQtaW1wbFwiKS5pbXBsZW1lbnRhdGlvbjtcblxuZXhwb3J0cy5pbXBsZW1lbnRhdGlvbiA9IGNsYXNzIFhNTERvY3VtZW50SW1wbCBleHRlbmRzIERvY3VtZW50SW1wbCB7fTtcbiIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgaXNWYWxpZFRhcmdldE9yaWdpbiA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKS5pc1ZhbGlkVGFyZ2V0T3JpZ2luO1xuY29uc3QgRE9NRXhjZXB0aW9uID0gcmVxdWlyZShcIi4uL3dlYi1pZGwvRE9NRXhjZXB0aW9uXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXNzYWdlLCB0YXJnZXRPcmlnaW4pIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIidwb3N0TWVzc2FnZScgcmVxdWlyZXMgMiBhcmd1bWVudHM6ICdtZXNzYWdlJyBhbmQgJ3RhcmdldE9yaWdpbidcIik7XG4gIH1cblxuICB0YXJnZXRPcmlnaW4gPSBTdHJpbmcodGFyZ2V0T3JpZ2luKTtcblxuICBpZiAoIWlzVmFsaWRUYXJnZXRPcmlnaW4odGFyZ2V0T3JpZ2luKSkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIsIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3Bvc3RNZXNzYWdlJyBvbiAnV2luZG93JzogXCIgK1xuICAgICAgXCJJbnZhbGlkIHRhcmdldCBvcmlnaW4gJ1wiICsgdGFyZ2V0T3JpZ2luICsgXCInIGluIGEgY2FsbCB0byAncG9zdE1lc3NhZ2UnLlwiKTtcbiAgfVxuXG4gIC8vIFRPRE86IHRhcmdldE9yaWdpbiA9PT0gJy8nIC0gcmVxdWlyZXMgcmVmZXJlbmNlIHRvIHNvdXJjZSB3aW5kb3dcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90bXB2YXIvanNkb20vcHVsbC8xMTQwI2lzc3VlY29tbWVudC0xMTE1ODc0OTlcbiAgaWYgKHRhcmdldE9yaWdpbiAhPT0gXCIqXCIgJiYgdGFyZ2V0T3JpZ2luICE9PSB0aGlzLmxvY2F0aW9uLm9yaWdpbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRPRE86IGV2ZW50LnNvdXJjZSAtIHJlcXVpcmVzIHJlZmVyZW5jZSB0byBzb3VyY2Ugd2luZG93XG4gIC8vIFRPRE86IGV2ZW50Lm9yaWdpbiAtIHJlcXVpcmVzIHJlZmVyZW5jZSB0byBzb3VyY2Ugd2luZG93XG4gIC8vIFRPRE86IGV2ZW50LnBvcnRzXG4gIC8vIFRPRE86IGV2ZW50LmRhdGEgLSBzdHJ1Y3R1cmVkIGNsb25lIG1lc3NhZ2UgLSByZXF1aXJlcyBjbG9uaW5nIERPTSBub2Rlc1xuICBjb25zdCBldmVudCA9IG5ldyB0aGlzLk1lc3NhZ2VFdmVudChcIm1lc3NhZ2VcIiwge1xuICAgIGRhdGE6IG1lc3NhZ2VcbiAgfSk7XG5cbiAgZXZlbnQuaW5pdEV2ZW50KFwibWVzc2FnZVwiLCBmYWxzZSwgZmFsc2UpO1xuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0sIDApO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuLyogZXNsaW50IGdsb2JhbC1yZXF1aXJlOiAwICovXG5cbmNvbnN0IERvY3VtZW50SW1wbCA9IHJlcXVpcmUoXCIuL25vZGVzL0RvY3VtZW50LWltcGwuanNcIik7XG5cbmNvbnN0IG1hcHBpbmdzID0ge1xuICBIVE1MRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXVxuICB9LFxuICBIVE1MQW5jaG9yRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MQW5jaG9yRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJhXCJdXG4gIH0sXG4gIEhUTUxBcHBsZXRFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxBcHBsZXRFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImFwcGxldFwiXVxuICB9LFxuICBIVE1MQXJlYUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEFyZWFFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImFyZWFcIl1cbiAgfSxcbiAgSFRNTEF1ZGlvRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MQXVkaW9FbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImF1ZGlvXCJdXG4gIH0sXG4gIEhUTUxCYXNlRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MQmFzZUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiYmFzZVwiXVxuICB9LFxuICBIVE1MQm9keUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEJvZHlFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImJvZHlcIl1cbiAgfSxcbiAgSFRNTEJSRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MQlJFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImJyXCJdXG4gIH0sXG4gIEhUTUxCdXR0b25FbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxCdXR0b25FbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImJ1dHRvblwiXVxuICB9LFxuICBIVE1MQ2FudmFzRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MQ2FudmFzRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJjYW52YXNcIl1cbiAgfSxcbiAgSFRNTERhdGFFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxEYXRhRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJkYXRhXCJdXG4gIH0sXG4gIEhUTUxEYXRhTGlzdEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTERhdGFMaXN0RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJkYXRhbGlzdFwiXVxuICB9LFxuICBIVE1MRGlhbG9nRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MRGlhbG9nRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJkaWFsb2dcIl1cbiAgfSxcbiAgSFRNTERpcmVjdG9yeUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTERpcmVjdG9yeUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiZGlyXCJdXG4gIH0sXG4gIEhUTUxEaXZFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxEaXZFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImRpdlwiXVxuICB9LFxuICBIVE1MRExpc3RFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxETGlzdEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiZGxcIl1cbiAgfSxcbiAgSFRNTEVtYmVkRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MRW1iZWRFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImVtYmVkXCJdXG4gIH0sXG4gIEhUTUxGaWVsZFNldEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEZpZWxkU2V0RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJmaWVsZHNldFwiXVxuICB9LFxuICBIVE1MRm9udEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEZvbnRFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImZvbnRcIl1cbiAgfSxcbiAgSFRNTEZvcm1FbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxGb3JtRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJmb3JtXCJdXG4gIH0sXG4gIEhUTUxGcmFtZUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEZyYW1lRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJmcmFtZVwiXVxuICB9LFxuICBIVE1MRnJhbWVTZXRFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxGcmFtZVNldEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiZnJhbWVzZXRcIl1cbiAgfSxcbiAgSFRNTEhlYWRpbmdFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxIZWFkaW5nRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJoMVwiLCBcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIl1cbiAgfSxcbiAgSFRNTEhlYWRFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxIZWFkRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJoZWFkXCJdXG4gIH0sXG4gIEhUTUxIUkVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEhSRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJoclwiXVxuICB9LFxuICBIVE1MSHRtbEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEh0bWxFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImh0bWxcIl1cbiAgfSxcbiAgSFRNTElGcmFtZUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTElGcmFtZUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiaWZyYW1lXCJdXG4gIH0sXG4gIEhUTUxJbWFnZUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTEltYWdlRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJpbWdcIl1cbiAgfSxcbiAgSFRNTElucHV0RWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MSW5wdXRFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImlucHV0XCJdXG4gIH0sXG4gIEhUTUxMYWJlbEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTExhYmVsRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJsYWJlbFwiXVxuICB9LFxuICBIVE1MTGVnZW5kRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MTGVnZW5kRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJsZWdlbmRcIl1cbiAgfSxcbiAgSFRNTExJRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MTElFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImxpXCJdXG4gIH0sXG4gIEhUTUxMaW5rRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MTGlua0VsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wibGlua1wiXVxuICB9LFxuICBIVE1MTWFwRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MTWFwRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJtYXBcIl1cbiAgfSxcbiAgSFRNTE1lZGlhRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MTWVkaWFFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtdXG4gIH0sXG4gIEhUTUxNZW51RWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MTWVudUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wibWVudVwiXVxuICB9LFxuICBIVE1MTWV0YUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTE1ldGFFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcIm1ldGFcIl1cbiAgfSxcbiAgSFRNTE1ldGVyRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MTWV0ZXJFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcIm1ldGVyXCJdXG4gIH0sXG4gIEhUTUxNb2RFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxNb2RFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImRlbFwiLCBcImluc1wiXVxuICB9LFxuICBIVE1MT2JqZWN0RWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MT2JqZWN0RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJvYmplY3RcIl1cbiAgfSxcbiAgSFRNTE9MaXN0RWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MT0xpc3RFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcIm9sXCJdXG4gIH0sXG4gIEhUTUxPcHRHcm91cEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTE9wdEdyb3VwRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJvcHRncm91cFwiXVxuICB9LFxuICBIVE1MT3B0aW9uRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MT3B0aW9uRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJvcHRpb25cIl1cbiAgfSxcbiAgSFRNTE91dHB1dEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTE91dHB1dEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wib3V0cHV0XCJdXG4gIH0sXG4gIEhUTUxQYXJhZ3JhcGhFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInBcIl1cbiAgfSxcbiAgSFRNTFBhcmFtRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MUGFyYW1FbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInBhcmFtXCJdXG4gIH0sXG4gIEhUTUxQcmVFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxQcmVFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInByZVwiXVxuICB9LFxuICBIVE1MUHJvZ3Jlc3NFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxQcm9ncmVzc0VsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wicHJvZ3Jlc3NcIl1cbiAgfSxcbiAgSFRNTFF1b3RlRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MUXVvdGVFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcImJsb2NrcXVvdGVcIiwgXCJxXCJdXG4gIH0sXG4gIEhUTUxTY3JpcHRFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxTY3JpcHRFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInNjcmlwdFwiXVxuICB9LFxuICBIVE1MU2VsZWN0RWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MU2VsZWN0RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJzZWxlY3RcIl1cbiAgfSxcbiAgSFRNTFNvdXJjZUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFNvdXJjZUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wic291cmNlXCJdXG4gIH0sXG4gIEhUTUxTcGFuRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MU3BhbkVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wic3BhblwiXVxuICB9LFxuICBIVE1MU3R5bGVFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxTdHlsZUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wic3R5bGVcIl1cbiAgfSxcbiAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiY2FwdGlvblwiXVxuICB9LFxuICBIVE1MVGFibGVDZWxsRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MVGFibGVDZWxsRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXVxuICB9LFxuICBIVE1MVGFibGVDb2xFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxUYWJsZUNvbEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1wiY29sXCIsIFwiY29sZ3JvdXBcIl1cbiAgfSxcbiAgSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxUYWJsZURhdGFDZWxsRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJ0ZFwiXVxuICB9LFxuICBIVE1MVGFibGVFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxUYWJsZUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1widGFibGVcIl1cbiAgfSxcbiAgSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1widGhcIl1cbiAgfSxcbiAgSFRNTFRpbWVFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxUaW1lRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJ0aW1lXCJdXG4gIH0sXG4gIEhUTUxUaXRsZUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFRpdGxlRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJ0aXRsZVwiXVxuICB9LFxuICBIVE1MVGFibGVSb3dFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxUYWJsZVJvd0VsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1widHJcIl1cbiAgfSxcbiAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1widGhlYWRcIiwgXCJ0Ym9keVwiLCBcInRmb290XCJdXG4gIH0sXG4gIEhUTUxUZW1wbGF0ZUVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFRlbXBsYXRlRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJ0ZW1wbGF0ZVwiXVxuICB9LFxuICBIVE1MVGV4dEFyZWFFbGVtZW50OiB7XG4gICAgZmlsZTogcmVxdWlyZShcIi4vZ2VuZXJhdGVkL0hUTUxUZXh0QXJlYUVsZW1lbnQuanNcIiksXG4gICAgdGFnczogW1widGV4dGFyZWFcIl1cbiAgfSxcbiAgSFRNTFRyYWNrRWxlbWVudDoge1xuICAgIGZpbGU6IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9IVE1MVHJhY2tFbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtcInRyYWNrXCJdXG4gIH0sXG4gIEhUTUxVTGlzdEVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFVMaXN0RWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJ1bFwiXVxuICB9LFxuICBIVE1MVW5rbm93bkVsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFVua25vd25FbGVtZW50LmpzXCIpLFxuICAgIHRhZ3M6IFtdXG4gIH0sXG4gIEhUTUxWaWRlb0VsZW1lbnQ6IHtcbiAgICBmaWxlOiByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvSFRNTFZpZGVvRWxlbWVudC5qc1wiKSxcbiAgICB0YWdzOiBbXCJ2aWRlb1wiXVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmUgPT4ge1xuICBmb3IgKGNvbnN0IGludGVyZmFjZU5hbWUgb2YgT2JqZWN0LmtleXMobWFwcGluZ3MpKSB7XG4gICAgY29uc3QgZmlsZSA9IG1hcHBpbmdzW2ludGVyZmFjZU5hbWVdLmZpbGU7XG4gICAgY29uc3QgdGFncyA9IG1hcHBpbmdzW2ludGVyZmFjZU5hbWVdLnRhZ3M7XG5cbiAgICBjb3JlW2ludGVyZmFjZU5hbWVdID0gZmlsZS5pbnRlcmZhY2U7XG5cbiAgICBmb3IgKGNvbnN0IHRhZ05hbWUgb2YgdGFncykge1xuICAgICAgRG9jdW1lbnRJbXBsLmltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5fZWxlbWVudEJ1aWxkZXJzW3RhZ05hbWVdID0gKGRvY3VtZW50LCBlbE5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbGUuY3JlYXRlKFtdLCB7XG4gICAgICAgICAgY29yZSxcbiAgICAgICAgICBvd25lckRvY3VtZW50OiBkb2N1bWVudCxcbiAgICAgICAgICBsb2NhbE5hbWU6IGVsTmFtZSB8fCB0YWdOYW1lLnRvVXBwZXJDYXNlKClcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5jb25zdCBpZGxVdGlscyA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5cbi8vIEZJWE1FOiBPbmNlIE5vZGVGaWx0ZXIgaXMgcG9ydGVkIHRvIElETCBtZXRob2QsIHVuY29tbWVudCB0aGVzZS5cbmNvbnN0IEZJTFRFUl9BQ0NFUFQgPSAxOyAvLyBOb2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ7XG5jb25zdCBGSUxURVJfUkVKRUNUID0gMjsgLy8gTm9kZUZpbHRlci5GSUxURVJfUkVKRUNUO1xuY29uc3QgRklMVEVSX1NLSVAgPSAzOyAvLyBOb2RlRmlsdGVyLkZJTFRFUl9TS0lQO1xuY29uc3QgRklSU1QgPSBmYWxzZTtcbmNvbnN0IExBU1QgPSB0cnVlO1xuY29uc3QgTkVYVCA9IGZhbHNlO1xuY29uc3QgUFJFVklPVVMgPSB0cnVlO1xuXG5mdW5jdGlvbiBpc051bGwobykge1xuICByZXR1cm4gbyA9PT0gbnVsbCB8fCB0eXBlb2YgbyA9PT0gXCJ1bmRlZmluZWRcIjtcbn1cblxuY2xhc3MgVHJlZVdhbGtlckltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHRoaXMucm9vdCA9IHByaXZhdGVEYXRhLnJvb3Q7XG4gICAgdGhpcy53aGF0VG9TaG93ID0gcHJpdmF0ZURhdGEud2hhdFRvU2hvdztcbiAgICB0aGlzLmZpbHRlciA9IHByaXZhdGVEYXRhLmZpbHRlcjtcbiAgICB0aGlzLmN1cnJlbnROb2RlID0gdGhpcy5yb290O1xuICB9XG5cbiAgZ2V0IGN1cnJlbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Tm9kZTtcbiAgfVxuXG4gIHNldCBjdXJyZW50Tm9kZShub2RlKSB7XG4gICAgaWYgKGlzTnVsbChub2RlKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsIFwiQ2Fubm90IHNldCBjdXJyZW50Tm9kZSB0byBudWxsXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnROb2RlID0gbm9kZTtcbiAgfVxuXG4gIHBhcmVudE5vZGUoKSB7XG4gICAgbGV0IG5vZGUgPSB0aGlzLl9jdXJyZW50Tm9kZTtcbiAgICB3aGlsZSAoIWlzTnVsbChub2RlKSAmJiBub2RlICE9PSB0aGlzLnJvb3QpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgICAgIGlmICghaXNOdWxsKG5vZGUpICYmIHRoaXMuX2ZpbHRlck5vZGUobm9kZSkgPT09IEZJTFRFUl9BQ0NFUFQpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9jdXJyZW50Tm9kZSA9IG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZpcnN0Q2hpbGQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYXZlcnNlQ2hpbGRyZW4oRklSU1QpO1xuICB9XG5cbiAgbGFzdENoaWxkKCkge1xuICAgIHJldHVybiB0aGlzLl90cmF2ZXJzZUNoaWxkcmVuKExBU1QpO1xuICB9XG5cbiAgcHJldmlvdXNTaWJsaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl90cmF2ZXJzZVNpYmxpbmdzKFBSRVZJT1VTKTtcbiAgfVxuXG4gIG5leHRTaWJsaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl90cmF2ZXJzZVNpYmxpbmdzKE5FWFQpO1xuICB9XG5cbiAgcHJldmlvdXNOb2RlKCkge1xuICAgIGxldCBub2RlID0gdGhpcy5fY3VycmVudE5vZGU7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gdGhpcy5yb290KSB7XG4gICAgICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuXG4gICAgICB3aGlsZSAoIWlzTnVsbChzaWJsaW5nKSkge1xuICAgICAgICBub2RlID0gc2libGluZztcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX2ZpbHRlck5vZGUobm9kZSk7XG5cbiAgICAgICAgd2hpbGUgKHJlc3VsdCAhPT0gRklMVEVSX1JFSkVDVCAmJiBub2RlLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgIG5vZGUgPSBub2RlLmxhc3RDaGlsZDtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLl9maWx0ZXJOb2RlKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gRklMVEVSX0FDQ0VQVCkge1xuICAgICAgICAgIHJldHVybiAodGhpcy5fY3VycmVudE5vZGUgPSBub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IHRoaXMucm9vdCB8fCBpc051bGwobm9kZS5wYXJlbnROb2RlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblxuICAgICAgaWYgKHRoaXMuX2ZpbHRlck5vZGUobm9kZSkgPT09IEZJTFRFUl9BQ0NFUFQpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9jdXJyZW50Tm9kZSA9IG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbmV4dE5vZGUoKSB7XG4gICAgbGV0IG5vZGUgPSB0aGlzLl9jdXJyZW50Tm9kZTtcbiAgICBsZXQgcmVzdWx0ID0gRklMVEVSX0FDQ0VQVDtcblxuICAgIGZvciAoOzspIHtcbiAgICAgIHdoaWxlIChyZXN1bHQgIT09IEZJTFRFUl9SRUpFQ1QgJiYgbm9kZS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5fZmlsdGVyTm9kZShub2RlKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gRklMVEVSX0FDQ0VQVCkge1xuICAgICAgICAgIHJldHVybiAodGhpcy5fY3VycmVudE5vZGUgPSBub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChub2RlID09PSB0aGlzLnJvb3QpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpYmxpbmcgPSBub2RlLm5leHRTaWJsaW5nO1xuXG4gICAgICAgIGlmICghaXNOdWxsKHNpYmxpbmcpKSB7XG4gICAgICAgICAgbm9kZSA9IHNpYmxpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgfSB3aGlsZSAoIWlzTnVsbChub2RlKSk7XG5cbiAgICAgIGlmIChpc051bGwobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpbHRlck5vZGUobm9kZSk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IEZJTFRFUl9BQ0NFUFQpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9jdXJyZW50Tm9kZSA9IG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgVHJlZVdhbGtlcl1cIjtcbiAgfVxuXG4gIF9maWx0ZXJOb2RlKG5vZGUpIHtcbiAgICBjb25zdCBuID0gbm9kZS5ub2RlVHlwZSAtIDE7XG5cbiAgICBpZiAoISgoMSA8PCBuKSAmIHRoaXMud2hhdFRvU2hvdykpIHtcbiAgICAgIHJldHVybiBGSUxURVJfU0tJUDtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlcjtcblxuICAgIGlmIChpc051bGwoZmlsdGVyKSkge1xuICAgICAgcmV0dXJuIEZJTFRFUl9BQ0NFUFQ7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDtcblxuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJlc3VsdCA9IGZpbHRlcihpZGxVdGlscy53cmFwcGVyRm9ySW1wbChub2RlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGZpbHRlci5hY2NlcHROb2RlKGlkbFV0aWxzLndyYXBwZXJGb3JJbXBsKG5vZGUpKTtcbiAgICB9XG5cbiAgICByZXN1bHQgPSBjb252ZXJzaW9uc1tcInVuc2lnbmVkIHNob3J0XCJdKHJlc3VsdCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgX3RyYXZlcnNlQ2hpbGRyZW4odHlwZSkge1xuICAgIGxldCBub2RlID0gdGhpcy5fY3VycmVudE5vZGU7XG4gICAgbm9kZSA9IHR5cGUgPT09IEZJUlNUID8gbm9kZS5maXJzdENoaWxkIDogbm9kZS5sYXN0Q2hpbGQ7XG5cbiAgICBpZiAoaXNOdWxsKG5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBtYWluOiBmb3IgKDs7KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9maWx0ZXJOb2RlKG5vZGUpO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSBGSUxURVJfQUNDRVBUKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fY3VycmVudE5vZGUgPSBub2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdCA9PT0gRklMVEVSX1NLSVApIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSB0eXBlID09PSBGSVJTVCA/IG5vZGUuZmlyc3RDaGlsZCA6IG5vZGUubGFzdENoaWxkO1xuXG4gICAgICAgIGlmICghaXNOdWxsKGNoaWxkKSkge1xuICAgICAgICAgIG5vZGUgPSBjaGlsZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKDs7KSB7XG4gICAgICAgIGNvbnN0IHNpYmxpbmcgPSB0eXBlID09PSBGSVJTVCA/IG5vZGUubmV4dFNpYmxpbmcgOiBub2RlLnByZXZpb3VzU2libGluZztcblxuICAgICAgICBpZiAoIWlzTnVsbChzaWJsaW5nKSkge1xuICAgICAgICAgIG5vZGUgPSBzaWJsaW5nO1xuICAgICAgICAgIGNvbnRpbnVlIG1haW47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgICAgICAgaWYgKGlzTnVsbChwYXJlbnQpIHx8IHBhcmVudCA9PT0gdGhpcy5yb290IHx8IHBhcmVudCA9PT0gdGhpcy5fY3VycmVudE5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX3RyYXZlcnNlU2libGluZ3ModHlwZSkge1xuICAgIGxldCBub2RlID0gdGhpcy5fY3VycmVudE5vZGU7XG5cbiAgICBpZiAobm9kZSA9PT0gdGhpcy5yb290KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKDs7KSB7XG4gICAgICBsZXQgc2libGluZyA9IHR5cGUgPT09IE5FWFQgPyBub2RlLm5leHRTaWJsaW5nIDogbm9kZS5wcmV2aW91c1NpYmxpbmc7XG5cbiAgICAgIHdoaWxlICghaXNOdWxsKHNpYmxpbmcpKSB7XG4gICAgICAgIG5vZGUgPSBzaWJsaW5nO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9maWx0ZXJOb2RlKG5vZGUpO1xuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IEZJTFRFUl9BQ0NFUFQpIHtcbiAgICAgICAgICByZXR1cm4gKHRoaXMuX2N1cnJlbnROb2RlID0gbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzaWJsaW5nID0gdHlwZSA9PT0gTkVYVCA/IG5vZGUuZmlyc3RDaGlsZCA6IG5vZGUubGFzdENoaWxkO1xuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IEZJTFRFUl9SRUpFQ1QgfHwgaXNOdWxsKHNpYmxpbmcpKSB7XG4gICAgICAgICAgc2libGluZyA9IHR5cGUgPT09IE5FWFQgPyBub2RlLm5leHRTaWJsaW5nIDogbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblxuICAgICAgaWYgKGlzTnVsbChub2RlKSB8fCBub2RlID09PSB0aGlzLnJvb3QpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9maWx0ZXJOb2RlKG5vZGUpID09PSBGSUxURVJfQUNDRVBUKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW1wbGVtZW50YXRpb246IFRyZWVXYWxrZXJJbXBsXG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb24uanNcIik7XG5jb25zdCBkb2N1bWVudEJhc2VVUkxTZXJpYWxpemVkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZG9jdW1lbnQtYmFzZS11cmwuanNcIikuZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZDtcbmNvbnN0IHBhcnNlVVJMVG9SZXN1bHRpbmdVUkxSZWNvcmQgPSByZXF1aXJlKFwiLi4vaGVscGVycy9kb2N1bWVudC1iYXNlLXVybC5qc1wiKS5wYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkO1xuY29uc3QgdHJhdmVyc2VIaXN0b3J5ID0gcmVxdWlyZShcIi4vbmF2aWdhdGlvbi5qc1wiKS50cmF2ZXJzZUhpc3Rvcnk7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBIaXN0b3J5SW1wbCB7XG4gIGNvbnN0cnVjdG9yKGFyZ3MsIHByaXZhdGVEYXRhKSB7XG4gICAgdGhpcy5fd2luZG93ID0gcHJpdmF0ZURhdGEud2luZG93O1xuICAgIHRoaXMuX2RvY3VtZW50ID0gcHJpdmF0ZURhdGEuZG9jdW1lbnQ7XG4gICAgdGhpcy5fYWN0QXNJZkxvY2F0aW9uUmVsb2FkQ2FsbGVkID0gcHJpdmF0ZURhdGEuYWN0QXNJZkxvY2F0aW9uUmVsb2FkQ2FsbGVkO1xuICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcbiAgICB0aGlzLl9sYXRlc3RFbnRyeSA9IG51bGw7XG5cbiAgICB0aGlzLl9oaXN0b3J5VHJhdmVyc2FsUXVldWUgPSBuZXcgU2V0KCk7XG4gIH1cblxuICBfZ3VhcmRBZ2FpbnN0SW5hY3RpdmVEb2N1bWVudHMoKSB7XG4gICAgaWYgKCF0aGlzLl93aW5kb3cpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNFQ1VSSVRZX0VSUixcbiAgICAgICAgXCJIaXN0b3J5IG9iamVjdCBpcyBhc3NvY2lhdGVkIHdpdGggYSBkb2N1bWVudCB0aGF0IGlzIG5vdCBmdWxseSBhY3RpdmUuXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGgoKSB7XG4gICAgdGhpcy5fZ3VhcmRBZ2FpbnN0SW5hY3RpdmVEb2N1bWVudHMoKTtcblxuICAgIHJldHVybiB0aGlzLl93aW5kb3cuX3Nlc3Npb25IaXN0b3J5Lmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpIHtcbiAgICB0aGlzLl9ndWFyZEFnYWluc3RJbmFjdGl2ZURvY3VtZW50cygpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICB9XG5cbiAgZ28oZGVsdGEpIHtcbiAgICB0aGlzLl9ndWFyZEFnYWluc3RJbmFjdGl2ZURvY3VtZW50cygpO1xuXG4gICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICB0aGlzLl9hY3RBc0lmTG9jYXRpb25SZWxvYWRDYWxsZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWVIaXN0b3J5VHJhdmVyc2FsVGFzaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5fd2luZG93Ll9jdXJyZW50U2Vzc2lvbkhpc3RvcnlFbnRyeUluZGV4ICsgZGVsdGE7XG4gICAgICAgIGlmIChuZXdJbmRleCA8IDAgfHwgbmV3SW5kZXggPj0gdGhpcy5fd2luZG93Ll9zZXNzaW9uSGlzdG9yeS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGVjaWZpZWRFbnRyeSA9IHRoaXMuX3dpbmRvdy5fc2Vzc2lvbkhpc3RvcnlbbmV3SW5kZXhdO1xuXG4gICAgICAgIC8vIE5vdCBpbXBsZW1lbnRlZDogdW5sb2FkIGEgZG9jdW1lbnQgZ3VhcmRcblxuICAgICAgICAvLyBOb3QgY2xlYXIgdGhhdCB0aGlzIHNob3VsZCBiZSBxdWV1ZWQuIGh0bWwvYnJvd3NlcnMvaGlzdG9yeS90aGUtaGlzdG9yeS1pbnRlcmZhY2UvMDA0Lmh0bWwgY2FuIGJlIGZpeGVkXG4gICAgICAgIC8vIGJ5IHJlbW92aW5nIHRoZSBxdWV1ZSwgYnV0IGRvaW5nIHNvIGJyZWFrcyBzb21lIHRlc3RzIGluIGhpc3RvcnkuanMgdGhhdCBhbHNvIHBhc3MgaW4gYnJvd3NlcnMuXG4gICAgICAgIHRoaXMuX3F1ZXVlSGlzdG9yeVRyYXZlcnNhbFRhc2soKCkgPT4gdHJhdmVyc2VIaXN0b3J5KHRoaXMuX3dpbmRvdywgc3BlY2lmaWVkRW50cnkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGJhY2soKSB7XG4gICAgdGhpcy5nbygtMSk7XG4gIH1cblxuICBmb3J3YXJkKCkge1xuICAgIHRoaXMuZ28oKzEpO1xuICB9XG5cbiAgcHVzaFN0YXRlKGRhdGEsIHRpdGxlLCB1cmwpIHtcbiAgICB0aGlzLl9zaGFyZWRQdXNoQW5kUmVwbGFjZVN0YXRlKGRhdGEsIHRpdGxlLCB1cmwsIFwicHVzaFN0YXRlXCIpO1xuICB9XG4gIHJlcGxhY2VTdGF0ZShkYXRhLCB0aXRsZSwgdXJsKSB7XG4gICAgdGhpcy5fc2hhcmVkUHVzaEFuZFJlcGxhY2VTdGF0ZShkYXRhLCB0aXRsZSwgdXJsLCBcInJlcGxhY2VTdGF0ZVwiKTtcbiAgfVxuXG4gIF9zaGFyZWRQdXNoQW5kUmVwbGFjZVN0YXRlKGRhdGEsIHRpdGxlLCB1cmwsIG1ldGhvZE5hbWUpIHtcbiAgICB0aGlzLl9ndWFyZEFnYWluc3RJbmFjdGl2ZURvY3VtZW50cygpO1xuXG4gICAgLy8gVE9ETyBzdHJ1Y3R1cmVkIGNsb25lIGRhdGFcblxuICAgIGxldCBuZXdVUkw7XG4gICAgaWYgKHVybCAhPT0gbnVsbCkge1xuICAgICAgLy8gTm90IGltcGxlbWVudGVkOiB1c2Ugb2YgZW50cnkgc2V0dGluZ3Mgb2JqZWN0J3MgQVBJIGJhc2UgVVJMLiBJbnN0ZWFkIHdlIGp1c3QgdXNlIHRoZSBkb2N1bWVudCBiYXNlIFVSTC4gVGhlXG4gICAgICAvLyBkaWZmZXJlbmNlIG1hdHRlcnMgaW4gdGhlIGNhc2Ugb2YgY3Jvc3MtZnJhbWUgY2FsbHMuXG4gICAgICBuZXdVUkwgPSBwYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkKHVybCwgdGhpcy5fZG9jdW1lbnQpO1xuXG4gICAgICBpZiAobmV3VVJMID09PSBcImZhaWx1cmVcIikge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TRUNVUklUWV9FUlIsIGBDb3VsZCBub3QgcGFyc2UgdXJsIGFyZ3VtZW50IFwiJHt1cmx9XCIgdG8gJHttZXRob2ROYW1lfSBgICtcbiAgICAgICAgICBgYWdhaW5zdCBiYXNlIFVSTCBcIiR7ZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZCh0aGlzLl9kb2N1bWVudCl9XCIuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdVUkwuc2NoZW1lICE9PSB0aGlzLl9kb2N1bWVudC5fVVJMLnNjaGVtZSB8fFxuICAgICAgICAgIG5ld1VSTC51c2VybmFtZSAhPT0gdGhpcy5fZG9jdW1lbnQuX1VSTC51c2VybmFtZSB8fFxuICAgICAgICAgIG5ld1VSTC5wYXNzd29yZCAhPT0gdGhpcy5fZG9jdW1lbnQuX1VSTC5wYXNzd29yZCB8fFxuICAgICAgICAgIG5ld1VSTC5ob3N0ICE9PSB0aGlzLl9kb2N1bWVudC5fVVJMLmhvc3QgfHxcbiAgICAgICAgICBuZXdVUkwucG9ydCAhPT0gdGhpcy5fZG9jdW1lbnQuX1VSTC5wb3J0IHx8XG4gICAgICAgICAgbmV3VVJMLmNhbm5vdEJlQUJhc2VVUkwgIT09IHRoaXMuX2RvY3VtZW50Ll9VUkwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TRUNVUklUWV9FUlIsIGAke21ldGhvZE5hbWV9IGNhbm5vdCB1cGRhdGUgaGlzdG9yeSB0byBhIFVSTCB3aGljaCBgICtcbiAgICAgICAgICBgZGlmZmVycyBpbiBjb21wb25lbnRzIG90aGVyIHRoYW4gaW4gcGF0aCwgcXVlcnksIG9yIGZyYWdtZW50LmApO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3QgaW1wbGVtZW50ZWQ6IG9yaWdpbiBjaGVjayAoc2VlbXMgdG8gb25seSBhcHBseSB0byBkb2N1bWVudHMgd2l0aCB3ZWlyZCBvcmlnaW5zLCBlLmcuIHNhbmRib3hlZCBvbmVzKVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdVUkwgPSB0aGlzLl93aW5kb3cuX3Nlc3Npb25IaXN0b3J5W3RoaXMuX3dpbmRvdy5fY3VycmVudFNlc3Npb25IaXN0b3J5RW50cnlJbmRleF0udXJsO1xuICAgIH1cblxuICAgIGlmIChtZXRob2ROYW1lID09PSBcInB1c2hTdGF0ZVwiKSB7XG4gICAgICB0aGlzLl93aW5kb3cuX3Nlc3Npb25IaXN0b3J5LnNwbGljZSh0aGlzLl93aW5kb3cuX2N1cnJlbnRTZXNzaW9uSGlzdG9yeUVudHJ5SW5kZXggKyAxLCBJbmZpbml0eSk7XG5cbiAgICAgIHRoaXMuX2NsZWFySGlzdG9yeVRyYXZlcnNhbFRhc2tzKCk7XG5cbiAgICAgIHRoaXMuX3dpbmRvdy5fc2Vzc2lvbkhpc3RvcnkucHVzaCh7XG4gICAgICAgIGRvY3VtZW50OiB0aGlzLl9kb2N1bWVudCxcbiAgICAgICAgc3RhdGVPYmplY3Q6IGRhdGEsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICB1cmw6IG5ld1VSTFxuICAgICAgfSk7XG4gICAgICB0aGlzLl93aW5kb3cuX2N1cnJlbnRTZXNzaW9uSGlzdG9yeUVudHJ5SW5kZXggPSB0aGlzLl93aW5kb3cuX3Nlc3Npb25IaXN0b3J5Lmxlbmd0aCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbnRyeSA9IHRoaXMuX3dpbmRvdy5fc2Vzc2lvbkhpc3RvcnlbdGhpcy5fd2luZG93Ll9jdXJyZW50U2Vzc2lvbkhpc3RvcnlFbnRyeUluZGV4XTtcbiAgICAgIGN1cnJlbnRFbnRyeS5zdGF0ZU9iamVjdCA9IGRhdGE7XG4gICAgICBjdXJyZW50RW50cnkudGl0bGUgPSB0aXRsZTtcbiAgICAgIGN1cnJlbnRFbnRyeS51cmwgPSBuZXdVUkw7XG4gICAgfVxuXG4gICAgdGhpcy5fZG9jdW1lbnQuX1VSTCA9IG5ld1VSTDtcbiAgICB0aGlzLl9zdGF0ZSA9IGRhdGE7IC8vIFRPRE8gY2xvbmUgYWdhaW4hISBPX29cbiAgICB0aGlzLl9sYXRlc3RFbnRyeSA9IHRoaXMuX3dpbmRvdy5fc2Vzc2lvbkhpc3RvcnlbdGhpcy5fd2luZG93Ll9jdXJyZW50U2Vzc2lvbkhpc3RvcnlFbnRyeUluZGV4XTtcbiAgfVxuXG4gIF9xdWV1ZUhpc3RvcnlUcmF2ZXJzYWxUYXNrKGZuKSB7XG4gICAgY29uc3QgdGltZW91dElkID0gdGhpcy5fd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5faGlzdG9yeVRyYXZlcnNhbFF1ZXVlLmRlbGV0ZSh0aW1lb3V0SWQpO1xuICAgICAgZm4oKTtcbiAgICB9LCAwKTtcblxuICAgIHRoaXMuX2hpc3RvcnlUcmF2ZXJzYWxRdWV1ZS5hZGQodGltZW91dElkKTtcbiAgfVxuXG4gIF9jbGVhckhpc3RvcnlUcmF2ZXJzYWxUYXNrcygpIHtcbiAgICBmb3IgKGNvbnN0IHRpbWVvdXRJZCBvZiB0aGlzLl9oaXN0b3J5VHJhdmVyc2FsUXVldWUpIHtcbiAgICAgIHRoaXMuX3dpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICB9XG4gICAgdGhpcy5faGlzdG9yeVRyYXZlcnNhbFF1ZXVlLmNsZWFyKCk7XG4gIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHdoYXR3Z1VSTCA9IHJlcXVpcmUoXCJ3aGF0d2ctdXJsXCIpO1xuY29uc3QgZG9jdW1lbnRCYXNlVVJMID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZG9jdW1lbnQtYmFzZS11cmwuanNcIikuZG9jdW1lbnRCYXNlVVJMO1xuY29uc3QgcGFyc2VVUkxUb1Jlc3VsdGluZ1VSTFJlY29yZCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2RvY3VtZW50LWJhc2UtdXJsLmpzXCIpLnBhcnNlVVJMVG9SZXN1bHRpbmdVUkxSZWNvcmQ7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vLi4vd2ViLWlkbC9ET01FeGNlcHRpb24uanNcIik7XG5jb25zdCBub3RJbXBsZW1lbnRlZCA9IHJlcXVpcmUoXCIuLi8uLi9icm93c2VyL25vdC1pbXBsZW1lbnRlZC5qc1wiKTtcbmNvbnN0IG5hdmlnYXRlID0gcmVxdWlyZShcIi4vbmF2aWdhdGlvbi5qc1wiKS5uYXZpZ2F0ZTtcblxuLy8gTm90IGltcGxlbWVudGVkOiB1c2Ugb2YgZW50cnkgc2V0dGluZ3Mgb2JqZWN0J3MgQVBJIGJhc2UgVVJMIGluIGhyZWYgc2V0dGVyLCBhc3NpZ24sIGFuZCByZXBsYWNlLiBJbnN0ZWFkIHdlIGp1c3Rcbi8vIHVzZSB0aGUgZG9jdW1lbnQgYmFzZSBVUkwuIFRoZSBkaWZmZXJlbmNlIG1hdHRlcnMgaW4gdGhlIGNhc2Ugb2YgY3Jvc3MtZnJhbWUgY2FsbHMuXG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBMb2NhdGlvbkltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIHRoaXMuX3JlbGV2YW50RG9jdW1lbnQgPSBwcml2YXRlRGF0YS5yZWxldmFudERvY3VtZW50O1xuICAgIHRoaXMudXJsID0gbnVsbDtcbiAgfVxuXG4gIGdldCBfdXJsKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWxldmFudERvY3VtZW50Ll9VUkw7XG4gIH1cblxuICBfbG9jYXRpb25PYmplY3RTZXR0ZXJOYXZpZ2F0ZSh1cmwpIHtcbiAgICAvLyBOb3QgaW1wbGVtZW50ZWQ6IGV4dHJhIHN0ZXBzIGhlcmUgdG8gZGV0ZXJtaW5lIHJlcGxhY2VtZW50IGZsYWcsIHNpbmNlIHRoZXkgYXJlIG5vdCBhcHBsaWNhYmxlIHRvIG91clxuICAgIC8vIHJ1ZGltZW50YXJ5IFwibmF2aWdhdGlvblwiIGltcGxlbWVudGF0aW9uLlxuXG4gICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uT2JqZWN0TmF2aWdhdGUodXJsKTtcbiAgfVxuXG4gIF9sb2NhdGlvbk9iamVjdE5hdmlnYXRlKHVybC8qICwgeyByZXBsYWNlbWVudCA9IGZhbHNlIH0gPSB7fSAqLykge1xuICAgIC8vIE5vdCBpbXBsZW1lbnRlZDogdGhlIHNldHVwIGZvciBjYWxsaW5nIG5hdmlnYXRlLCB3aGljaCBkb2Vzbid0IGFwcGx5IHRvIG91ciBzdHViIG5hdmlnYXRlIGFueXdheS5cbiAgICAvLyBOb3QgaW1wbGVtZW50ZWQ6IHVzaW5nIHRoZSByZXBsYWNlbWVudCBmbGFnLlxuXG4gICAgbmF2aWdhdGUodGhpcy5fcmVsZXZhbnREb2N1bWVudC5fZGVmYXVsdFZpZXcsIHVybCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5ocmVmO1xuICB9XG5cbiAgZ2V0IGhyZWYoKSB7XG4gICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVVUkwodGhpcy5fdXJsKTtcbiAgfVxuICBzZXQgaHJlZih2KSB7XG4gICAgY29uc3QgbmV3VVJMID0gd2hhdHdnVVJMLnBhcnNlVVJMKHYsIHsgYmFzZVVSTDogZG9jdW1lbnRCYXNlVVJMKHRoaXMuX3JlbGV2YW50RG9jdW1lbnQpIH0pO1xuICAgIGlmIChuZXdVUkwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDb3VsZCBub3QgcGFyc2UgXCIke3Z9XCIgYXMgYSBVUkxgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2NhdGlvbk9iamVjdFNldHRlck5hdmlnYXRlKG5ld1VSTCk7XG4gIH1cblxuICBnZXQgb3JpZ2luKCkge1xuICAgIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplVVJMVG9Vbmljb2RlT3JpZ2luKHRoaXMuX3VybCk7XG4gIH1cblxuICBnZXQgcHJvdG9jb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VybC5zY2hlbWUgKyBcIjpcIjtcbiAgfVxuICBzZXQgcHJvdG9jb2wodikge1xuICAgIGNvbnN0IGNvcHlVUkwgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl91cmwpO1xuXG4gICAgY29uc3QgcG9zc2libGVGYWlsdXJlID0gd2hhdHdnVVJMLmJhc2ljVVJMUGFyc2UodiArIFwiOlwiLCB7IHVybDogY29weVVSTCwgc3RhdGVPdmVycmlkZTogXCJzY2hlbWUgc3RhcnRcIiB9KTtcbiAgICBpZiAocG9zc2libGVGYWlsdXJlID09PSBcImZhaWx1cmVcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IHBhcnNlIHRoZSBVUkwgYWZ0ZXIgc2V0dGluZyB0aGUgcHJvY29sIHRvIFwiJHt2fVwiYCk7XG4gICAgfVxuXG4gICAgaWYgKGNvcHlVUkwuc2NoZW1lICE9PSBcImh0dHBcIiAmJiBjb3B5VVJMLnNjaGVtZSAhPT0gXCJodHRwc1wiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9jYXRpb25PYmplY3RTZXR0ZXJOYXZpZ2F0ZShjb3B5VVJMKTtcbiAgfVxuXG4gIGdldCBob3N0KCkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuX3VybDtcblxuICAgIGlmICh1cmwuaG9zdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICh1cmwucG9ydCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVIb3N0KHVybC5ob3N0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2hhdHdnVVJMLnNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpICsgXCI6XCIgKyB3aGF0d2dVUkwuc2VyaWFsaXplSW50ZWdlcih1cmwucG9ydCk7XG4gIH1cbiAgc2V0IGhvc3Qodikge1xuICAgIGNvbnN0IGNvcHlVUkwgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl91cmwpO1xuXG4gICAgaWYgKGNvcHlVUkwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiBjb3B5VVJMLCBzdGF0ZU92ZXJyaWRlOiBcImhvc3RcIiB9KTtcblxuICAgIHRoaXMuX2xvY2F0aW9uT2JqZWN0U2V0dGVyTmF2aWdhdGUoY29weVVSTCk7XG4gIH1cblxuICBnZXQgaG9zdG5hbWUoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5ob3N0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gd2hhdHdnVVJMLnNlcmlhbGl6ZUhvc3QodGhpcy5fdXJsLmhvc3QpO1xuICB9XG4gIHNldCBob3N0bmFtZSh2KSB7XG4gICAgY29uc3QgY29weVVSTCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3VybCk7XG5cbiAgICBpZiAoY29weVVSTC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hhdHdnVVJMLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IGNvcHlVUkwsIHN0YXRlT3ZlcnJpZGU6IFwiaG9zdG5hbWVcIiB9KTtcblxuICAgIHRoaXMuX2xvY2F0aW9uT2JqZWN0U2V0dGVyTmF2aWdhdGUoY29weVVSTCk7XG4gIH1cblxuICBnZXQgcG9ydCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLnBvcnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB3aGF0d2dVUkwuc2VyaWFsaXplSW50ZWdlcih0aGlzLl91cmwucG9ydCk7XG4gIH1cbiAgc2V0IHBvcnQodikge1xuICAgIGNvbnN0IGNvcHlVUkwgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl91cmwpO1xuXG4gICAgaWYgKGNvcHlVUkwuaG9zdCA9PT0gbnVsbCB8fCBjb3B5VVJMLmNhbm5vdEJlQUJhc2VVUkwgfHwgY29weVVSTC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hhdHdnVVJMLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IGNvcHlVUkwsIHN0YXRlT3ZlcnJpZGU6IFwicG9ydFwiIH0pO1xuXG4gICAgdGhpcy5fbG9jYXRpb25PYmplY3RTZXR0ZXJOYXZpZ2F0ZShjb3B5VVJMKTtcbiAgfVxuXG4gIGdldCBwYXRobmFtZSgpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG5cbiAgICBpZiAodXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybiB1cmwucGF0aFswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCIvXCIgKyB1cmwucGF0aC5qb2luKFwiL1wiKTtcbiAgfVxuICBzZXQgcGF0aG5hbWUodikge1xuICAgIGNvbnN0IGNvcHlVUkwgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl91cmwpO1xuXG4gICAgaWYgKGNvcHlVUkwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvcHlVUkwucGF0aCA9IFtdO1xuICAgIHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKHYsIHsgdXJsOiBjb3B5VVJMLCBzdGF0ZU92ZXJyaWRlOiBcInBhdGggc3RhcnRcIiB9KTtcblxuICAgIHRoaXMuX2xvY2F0aW9uT2JqZWN0U2V0dGVyTmF2aWdhdGUoY29weVVSTCk7XG4gIH1cblxuICBnZXQgc2VhcmNoKCkge1xuICAgIGlmICh0aGlzLl91cmwucXVlcnkgPT09IG51bGwgfHwgdGhpcy5fdXJsLnF1ZXJ5ID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCI/XCIgKyB0aGlzLl91cmwucXVlcnk7XG4gIH1cbiAgc2V0IHNlYXJjaCh2KSB7XG4gICAgY29uc3QgY29weVVSTCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3VybCk7XG5cbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgY29weVVSTC5xdWVyeSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdlswXSA9PT0gXCI/XCIgPyB2LnN1YnN0cmluZygxKSA6IHY7XG4gICAgICBjb3B5VVJMLnF1ZXJ5ID0gXCJcIjtcbiAgICAgIHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKGlucHV0LCB7XG4gICAgICAgIHVybDogY29weVVSTCxcbiAgICAgICAgc3RhdGVPdmVycmlkZTogXCJxdWVyeVwiLFxuICAgICAgICBlbmNvZGluZ092ZXJyaWRlOiB0aGlzLl9yZWxldmFudERvY3VtZW50LmNoYXJzZXRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2xvY2F0aW9uT2JqZWN0U2V0dGVyTmF2aWdhdGUoY29weVVSTCk7XG4gIH1cblxuICBnZXQgaGFzaCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLmZyYWdtZW50ID09PSBudWxsIHx8IHRoaXMuX3VybC5mcmFnbWVudCA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiI1wiICsgdGhpcy5fdXJsLmZyYWdtZW50O1xuICB9XG4gIHNldCBoYXNoKHYpIHtcbiAgICBjb25zdCBjb3B5VVJMID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fdXJsKTtcblxuICAgIGlmIChjb3B5VVJMLnNjaGVtZSA9PT0gXCJqYXZhc2NyaXB0XCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgY29weVVSTC5mcmFnbWVudCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdlswXSA9PT0gXCIjXCIgPyB2LnN1YnN0cmluZygxKSA6IHY7XG4gICAgICBjb3B5VVJMLmZyYWdtZW50ID0gXCJcIjtcbiAgICAgIHdoYXR3Z1VSTC5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IHVybDogY29weVVSTCwgc3RhdGVPdmVycmlkZTogXCJmcmFnbWVudFwiIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2xvY2F0aW9uT2JqZWN0U2V0dGVyTmF2aWdhdGUoY29weVVSTCk7XG4gIH1cblxuICBhc3NpZ24odXJsKSB7XG4gICAgLy8gU2hvdWxkIGJlIGVudHJ5IHNldHRpbmdzIG9iamVjdDsgb2ggd2VsbFxuICAgIGNvbnN0IHBhcnNlZFVSTCA9IHBhcnNlVVJMVG9SZXN1bHRpbmdVUkxSZWNvcmQodXJsLCB0aGlzLl9yZWxldmFudERvY3VtZW50KTtcblxuICAgIGlmIChwYXJzZWRVUkwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSLCBgQ291bGQgbm90IHJlc29sdmUgdGhlIGdpdmVuIHN0cmluZyBcIiR7dXJsfVwiIHJlbGF0aXZlIHRvIHRoZSBgICtcbiAgICAgICAgYGJhc2UgVVJMIFwiJHt0aGlzLl9yZWxldmFudERvY3VtZW50LlVSTH1cImApO1xuICAgIH1cblxuICAgIHRoaXMuX2xvY2F0aW9uT2JqZWN0TmF2aWdhdGUocGFyc2VkVVJMKTtcbiAgfVxuXG4gIHJlcGxhY2UodXJsKSB7XG4gICAgLy8gU2hvdWxkIGJlIGVudHJ5IHNldHRpbmdzIG9iamVjdDsgb2ggd2VsbFxuICAgIGNvbnN0IHBhcnNlZFVSTCA9IHBhcnNlVVJMVG9SZXN1bHRpbmdVUkxSZWNvcmQodXJsLCB0aGlzLl9yZWxldmFudERvY3VtZW50KTtcblxuICAgIGlmIChwYXJzZWRVUkwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSLCBgQ291bGQgbm90IHJlc29sdmUgdGhlIGdpdmVuIHN0cmluZyBcIiR7dXJsfVwiIHJlbGF0aXZlIHRvIHRoZSBgICtcbiAgICAgICAgYGJhc2UgVVJMIFwiJHt0aGlzLl9yZWxldmFudERvY3VtZW50LlVSTH1cImApO1xuICAgIH1cblxuICAgIHRoaXMuX2xvY2F0aW9uT2JqZWN0TmF2aWdhdGUocGFyc2VkVVJMLCB7IHJlcGxhY2VtZW50OiB0cnVlIH0pO1xuICB9XG5cbiAgcmVsb2FkKCkge1xuICAgIG5vdEltcGxlbWVudGVkKFwibG9jYXRpb24ucmVsb2FkKClcIiwgdGhpcy5fcmVsZXZhbnREb2N1bWVudC5fZGVmYXVsdFZpZXcpO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCB3aGF0d2dVUkwgPSByZXF1aXJlKFwid2hhdHdnLXVybFwiKTtcbmNvbnN0IGFycmF5RXF1YWwgPSByZXF1aXJlKFwiYXJyYXktZXF1YWxcIik7XG5jb25zdCBub3RJbXBsZW1lbnRlZCA9IHJlcXVpcmUoXCIuLi8uLi9icm93c2VyL25vdC1pbXBsZW1lbnRlZC5qc1wiKTtcbmNvbnN0IEhhc2hDaGFuZ2VFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvSGFzaENoYW5nZUV2ZW50LmpzXCIpO1xuY29uc3QgUG9wU3RhdGVFdmVudCA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvUG9wU3RhdGVFdmVudC5qc1wiKTtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcblxuZXhwb3J0cy50cmF2ZXJzZUhpc3RvcnkgPSAod2luZG93LCBzcGVjaWZpZWRFbnRyeSwgZmxhZ3MpID0+IHtcbiAgLy8gTm90IHNwZWMgY29tcGxpYW50LCBqdXN0IG1pbmltYWwuIExvdHMgb2YgbWlzc2luZyBzdGVwcy5cblxuICBpZiAoZmxhZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgIGZsYWdzID0ge307XG4gIH1cbiAgY29uc3Qgbm9uQmxvY2tpbmdFdmVudHMgPSBCb29sZWFuKGZsYWdzLm5vbkJsb2NraW5nRXZlbnRzKTtcblxuICBjb25zdCBkb2N1bWVudCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKHdpbmRvdy5fZG9jdW1lbnQpO1xuXG4gIGNvbnN0IGN1cnJlbnRFbnRyeSA9IHdpbmRvdy5fc2Vzc2lvbkhpc3Rvcnlbd2luZG93Ll9jdXJyZW50U2Vzc2lvbkhpc3RvcnlFbnRyeUluZGV4XTtcblxuICBpZiAoY3VycmVudEVudHJ5LnRpdGxlID09PSB1bmRlZmluZWQpIHtcbiAgICBjdXJyZW50RW50cnkudGl0bGUgPSBkb2N1bWVudC50aXRsZTtcbiAgfVxuXG4gIGRvY3VtZW50Ll9VUkwgPSBzcGVjaWZpZWRFbnRyeS51cmw7XG5cbiAgbGV0IGhhc2hDaGFuZ2VkID0gZmFsc2U7XG4gIGxldCBvbGRVUkw7XG4gIGxldCBuZXdVUkw7XG4gIGlmIChzcGVjaWZpZWRFbnRyeS51cmwuZnJhZ21lbnQgIT09IGN1cnJlbnRFbnRyeS51cmwuZnJhZ21lbnQpIHtcbiAgICBoYXNoQ2hhbmdlZCA9IHRydWU7XG4gICAgb2xkVVJMID0gY3VycmVudEVudHJ5LnVybDtcbiAgICBuZXdVUkwgPSBzcGVjaWZpZWRFbnRyeS51cmw7XG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IHNwZWNpZmllZEVudHJ5LnN0YXRlT2JqZWN0OyAvLyBUT0RPIHN0cnVjdHVyZWQgY2xvbmVcbiAgZG9jdW1lbnQuX2hpc3RvcnkuX3N0YXRlID0gc3RhdGU7XG5cbiAgY29uc3Qgc3RhdGVDaGFuZ2VkID0gc3BlY2lmaWVkRW50cnkuZG9jdW1lbnQuX2hpc3RvcnkuX2xhdGVzdEVudHJ5ICE9PSBzcGVjaWZpZWRFbnRyeTtcbiAgc3BlY2lmaWVkRW50cnkuZG9jdW1lbnQuX2hpc3RvcnkuX2xhdGVzdEVudHJ5ID0gc3BlY2lmaWVkRW50cnk7XG5cbiAgaWYgKG5vbkJsb2NraW5nRXZlbnRzKSB7XG4gICAgd2luZG93LnNldFRpbWVvdXQoZmlyZUV2ZW50cywgMCk7XG4gIH0gZWxzZSB7XG4gICAgZmlyZUV2ZW50cygpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlyZUV2ZW50cygpIHtcbiAgICBpZiAoc3RhdGVDaGFuZ2VkKSB7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChQb3BTdGF0ZUV2ZW50LmNyZWF0ZShbXCJwb3BzdGF0ZVwiLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBzdGF0ZVxuICAgICAgfV0pKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzaENoYW5nZWQpIHtcbiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KEhhc2hDaGFuZ2VFdmVudC5jcmVhdGUoW1wiaGFzaGNoYW5nZVwiLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBvbGRVUkw6IHdoYXR3Z1VSTC5zZXJpYWxpemVVUkwob2xkVVJMKSxcbiAgICAgICAgbmV3VVJMOiB3aGF0d2dVUkwuc2VyaWFsaXplVVJMKG5ld1VSTClcbiAgICAgIH1dKSk7XG4gICAgfVxuICB9XG5cbiAgd2luZG93Ll9jdXJyZW50U2Vzc2lvbkhpc3RvcnlFbnRyeUluZGV4ID0gd2luZG93Ll9zZXNzaW9uSGlzdG9yeS5pbmRleE9mKHNwZWNpZmllZEVudHJ5KTtcbn07XG5cbmV4cG9ydHMubmF2aWdhdGUgPSAod2luZG93LCBuZXdVUkwpID0+IHtcbiAgLy8gVGhpcyBpcyBOT1QgYSBzcGVjLWNvbXBsaWFudCBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0aW9uIGluIGFueSB3YXkuIEl0IGltcGxlbWVudHMgYSBmZXcgc2VsZWN0aXZlIHN0ZXBzIHRoYXRcbiAgLy8gYXJlIG5pY2UgZm9yIGpzZG9tIHVzZXJzLCByZWdhcmRpbmcgaGFzaCBjaGFuZ2VzLiBXZSBjb3VsZCBtYXliZSBpbXBsZW1lbnQgamF2YXNjcmlwdDogVVJMcyBpbiB0aGUgZnV0dXJlLCBidXRcbiAgLy8gdGhlIHJlc3QgaXMgdG9vIGhhcmQuXG5cbiAgY29uc3QgZG9jdW1lbnQgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih3aW5kb3cuX2RvY3VtZW50KTtcblxuICBjb25zdCBjdXJyZW50VVJMID0gZG9jdW1lbnQuX1VSTDtcblxuICBpZiAobmV3VVJMLnNjaGVtZSAhPT0gY3VycmVudFVSTC5zY2hlbWUgfHxcbiAgICAgIG5ld1VSTC51c2VybmFtZSAhPT0gY3VycmVudFVSTC51c2VybmFtZSB8fFxuICAgICAgbmV3VVJMLnBhc3N3b3JkICE9PSBjdXJyZW50VVJMLnBhc3N3b3JkIHx8XG4gICAgICBuZXdVUkwuaG9zdCAhPT0gY3VycmVudFVSTC5ob3N0IHx8XG4gICAgICBuZXdVUkwucG9ydCAhPT0gY3VycmVudFVSTC5wb3J0IHx8XG4gICAgICAhYXJyYXlFcXVhbChuZXdVUkwucGF0aCwgY3VycmVudFVSTC5wYXRoKSB8fFxuICAgICAgbmV3VVJMLnF1ZXJ5ICE9PSBjdXJyZW50VVJMLnF1ZXJ5IHx8XG4gICAgICAvLyBPbWl0dGVkIHBlciBzcGVjOiB1cmwuZnJhZ21lbnQgIT09IHRoaXMuX3VybC5mcmFnbWVudCB8fFxuICAgICAgbmV3VVJMLmNhbm5vdEJlQUJhc2VVUkwgIT09IGN1cnJlbnRVUkwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgIG5vdEltcGxlbWVudGVkKFwibmF2aWdhdGlvbiAoZXhjZXB0IGhhc2ggY2hhbmdlcylcIiwgd2luZG93KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV3VVJMLmZyYWdtZW50ICE9PSBjdXJyZW50VVJMLmZyYWdtZW50KSB7XG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc2Nyb2xsLXRvLWZyYWdpZFxuXG4gICAgd2luZG93Ll9zZXNzaW9uSGlzdG9yeS5zcGxpY2Uod2luZG93Ll9jdXJyZW50U2Vzc2lvbkhpc3RvcnlFbnRyeUluZGV4ICsgMSwgSW5maW5pdHkpO1xuXG4gICAgZG9jdW1lbnQuX2hpc3RvcnkuX2NsZWFySGlzdG9yeVRyYXZlcnNhbFRhc2tzKCk7XG5cbiAgICBjb25zdCBuZXdFbnRyeSA9IHsgZG9jdW1lbnQsIHVybDogbmV3VVJMIH07XG4gICAgd2luZG93Ll9zZXNzaW9uSGlzdG9yeS5wdXNoKG5ld0VudHJ5KTtcbiAgICBleHBvcnRzLnRyYXZlcnNlSGlzdG9yeSh3aW5kb3csIG5ld0VudHJ5LCB7IG5vbkJsb2NraW5nRXZlbnRzOiB0cnVlIH0pO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKFwicmVxdWVzdFwiKTtcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCJldmVudHNcIikuRXZlbnRFbWl0dGVyO1xuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5jb25zdCBVUkwgPSByZXF1aXJlKFwid2hhdHdnLXVybFwiKS5VUkw7XG5cbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuY29uc3QgeGhyU3ltYm9scyA9IHJlcXVpcmUoXCIuL3htbGh0dHByZXF1ZXN0LXN5bWJvbHNcIik7XG5cbmZ1bmN0aW9uIHdyYXBDb29raWVKYXJGb3JSZXF1ZXN0KGNvb2tpZUphcikge1xuICBjb25zdCBqYXJXcmFwcGVyID0gcmVxdWVzdC5qYXIoKTtcbiAgamFyV3JhcHBlci5famFyID0gY29va2llSmFyO1xuICByZXR1cm4gamFyV3JhcHBlcjtcbn1cblxuZnVuY3Rpb24gZ2V0UmVxdWVzdEhlYWRlcihyZXF1ZXN0SGVhZGVycywgaGVhZGVyKSB7XG4gIGNvbnN0IGxjSGVhZGVyID0gaGVhZGVyLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZXF1ZXN0SGVhZGVycyk7XG4gIGxldCBuID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChuLS0pIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW25dO1xuICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gbGNIZWFkZXIpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVxdWVzdEhlYWRlcihyZXF1ZXN0SGVhZGVycywgaGVhZGVyLCBuZXdWYWx1ZSkge1xuICBjb25zdCBsY0hlYWRlciA9IGhlYWRlci50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVxdWVzdEhlYWRlcnMpO1xuICBsZXQgbiA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAobi0tKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tuXTtcbiAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09IGxjSGVhZGVyKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1trZXldID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSGVhZGVycyhsaHMsIHJocykge1xuICBjb25zdCByaHNQYXJ0cyA9IHJocy5zcGxpdChcIixcIik7XG4gIGNvbnN0IGxoc1BhcnRzID0gbGhzLnNwbGl0KFwiLFwiKTtcbiAgcmV0dXJuIHJoc1BhcnRzLmNvbmNhdChsaHNQYXJ0cy5maWx0ZXIocCA9PiByaHNQYXJ0cy5pbmRleE9mKHApIDwgMCkpLmpvaW4oXCIsXCIpO1xufVxuXG5jb25zdCBzaW1wbGVNZXRob2RzID0gbmV3IFNldChbXCJHRVRcIiwgXCJIRUFEXCIsIFwiUE9TVFwiXSk7XG5jb25zdCBzaW1wbGVIZWFkZXJzID0gbmV3IFNldChbXCJhY2NlcHRcIiwgXCJhY2NlcHQtbGFuZ3VhZ2VcIiwgXCJjb250ZW50LWxhbmd1YWdlXCIsIFwiY29udGVudC10eXBlXCJdKTtcbmNvbnN0IHByZWZsaWdodEhlYWRlcnMgPSBuZXcgU2V0KFtcbiAgXCJhY2Nlc3MtY29udHJvbC1leHBvc2UtaGVhZGVyc1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnNcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1jcmVkZW50aWFsc1wiLFxuICBcImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpblwiXG5dKTtcblxuZXhwb3J0cy5nZXRSZXF1ZXN0SGVhZGVyID0gZ2V0UmVxdWVzdEhlYWRlcjtcbmV4cG9ydHMudXBkYXRlUmVxdWVzdEhlYWRlciA9IHVwZGF0ZVJlcXVlc3RIZWFkZXI7XG5leHBvcnRzLnNpbXBsZUhlYWRlcnMgPSBzaW1wbGVIZWFkZXJzO1xuZXhwb3J0cy5wcmVmbGlnaHRIZWFkZXJzID0gcHJlZmxpZ2h0SGVhZGVycztcblxuLy8gcmV0dXJuIGEgXCJyZXF1ZXN0XCIgY2xpZW50IG9iamVjdCBvciBhbiBldmVudCBlbWl0dGVyIG1hdGNoaW5nIHRoZSBzYW1lIGJlaGF2aW91ciBmb3IgdW5zdXBwb3J0ZWQgcHJvdG9jb2xzXG4vLyB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGEgXCJyZXF1ZXN0XCIgcmVzcG9uc2Ugb2JqZWN0IG9yIGFuIGV2ZW50IGVtaXR0ZXIgbWF0Y2hpbmcgdGhlIHNhbWUgYmVoYXZpb3VyIHRvb1xuZXhwb3J0cy5jcmVhdGVDbGllbnQgPSBmdW5jdGlvbiBjcmVhdGVDbGllbnQoeGhyKSB7XG4gIGNvbnN0IGZsYWcgPSB4aHJbeGhyU3ltYm9scy5mbGFnXTtcbiAgY29uc3QgcHJvcGVydGllcyA9IHhoclt4aHJTeW1ib2xzLnByb3BlcnRpZXNdO1xuICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKGZsYWcudXJpKTtcbiAgY29uc3QgdXJpID0gdXJsT2JqLmhyZWY7XG4gIGNvbnN0IHVjTWV0aG9kID0gZmxhZy5tZXRob2QudG9VcHBlckNhc2UoKTtcblxuICBjb25zdCByZXF1ZXN0TWFuYWdlciA9IGZsYWcucmVxdWVzdE1hbmFnZXI7XG5cbiAgaWYgKHVybE9iai5wcm90b2NvbCA9PT0gXCJmaWxlOlwiKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICByZXNwb25zZS5yYXdIZWFkZXJzID0gW107XG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IHt9O1xuICAgIHJlc3BvbnNlLnJlcXVlc3QgPSB7IHVyaTogdXJsT2JqIH07XG4gICAgY29uc3QgZmlsZVBhdGggPSB1cmxPYmoucGF0aG5hbWVcbiAgICAgIC5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoL15cXC8oW2Etel0pOlxcLy9pLCBcIiQxOi9cIilcbiAgICAgIC5yZXBsYWNlKC8lMjAvZywgXCIgXCIpO1xuXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgY29uc3QgcmVhZGFibGVTdHJlYW0gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoLCB7IGVuY29kaW5nOiBudWxsIH0pO1xuXG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJkYXRhXCIsIGNodW5rID0+IHtcbiAgICAgIHJlc3BvbnNlLmVtaXQoXCJkYXRhXCIsIGNodW5rKTtcbiAgICAgIGNsaWVudC5lbWl0KFwiZGF0YVwiLCBjaHVuayk7XG4gICAgfSk7XG5cbiAgICByZWFkYWJsZVN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICByZXNwb25zZS5lbWl0KFwiZW5kXCIpO1xuICAgICAgY2xpZW50LmVtaXQoXCJlbmRcIik7XG4gICAgfSk7XG5cbiAgICByZWFkYWJsZVN0cmVhbS5vbihcImVycm9yXCIsIGVyciA9PiB7XG4gICAgICByZXNwb25zZS5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgIGNsaWVudC5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICB9KTtcblxuICAgIGNsaWVudC5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlYWRhYmxlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIGNsaWVudC5lbWl0KFwiYWJvcnRcIik7XG4gICAgfTtcblxuICAgIGlmIChyZXF1ZXN0TWFuYWdlcikge1xuICAgICAgY29uc3QgcmVxID0ge1xuICAgICAgICBhYm9ydCgpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLmFib3J0RXJyb3IgPSB0cnVlO1xuICAgICAgICAgIHhoci5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmVxdWVzdE1hbmFnZXIuYWRkKHJlcSk7XG4gICAgICBjb25zdCBybVJlcSA9IHJlcXVlc3RNYW5hZ2VyLnJlbW92ZS5iaW5kKHJlcXVlc3RNYW5hZ2VyLCByZXEpO1xuICAgICAgY2xpZW50Lm9uKFwiYWJvcnRcIiwgcm1SZXEpO1xuICAgICAgY2xpZW50Lm9uKFwiZXJyb3JcIiwgcm1SZXEpO1xuICAgICAgY2xpZW50Lm9uKFwiZW5kXCIsIHJtUmVxKTtcbiAgICB9XG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IGNsaWVudC5lbWl0KFwicmVzcG9uc2VcIiwgcmVzcG9uc2UpKTtcblxuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cblxuICBpZiAodXJsT2JqLnByb3RvY29sID09PSBcImRhdGE6XCIpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHJlc3BvbnNlLnJlcXVlc3QgPSB7IHVyaTogdXJsT2JqIH07XG5cbiAgICBjb25zdCBjbGllbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBsZXQgYnVmZmVyO1xuICAgIGlmICh1Y01ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YVVybENvbnRlbnQgPSB1dGlscy5wYXJzZURhdGFVcmwodXJpKTtcbiAgICAgICAgYnVmZmVyID0gZGF0YVVybENvbnRlbnQuYnVmZmVyO1xuICAgICAgICByZXNwb25zZS5zdGF0dXNDb2RlID0gMjAwO1xuICAgICAgICByZXNwb25zZS5yYXdIZWFkZXJzID0gZGF0YVVybENvbnRlbnQudHlwZSA/IFtcIkNvbnRlbnQtVHlwZVwiLCBkYXRhVXJsQ29udGVudC50eXBlXSA6IFtdO1xuICAgICAgICByZXNwb25zZS5oZWFkZXJzID0gZGF0YVVybENvbnRlbnQudHlwZSA/IHsgXCJjb250ZW50LXR5cGVcIjogZGF0YVVybENvbnRlbnQudHlwZSB9IDoge307XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiBjbGllbnQuZW1pdChcImVycm9yXCIsIGVycikpO1xuICAgICAgICByZXR1cm4gY2xpZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXIgPSBuZXcgQnVmZmVyKFwiXCIpO1xuICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDA7XG4gICAgICByZXNwb25zZS5yYXdIZWFkZXJzID0ge307XG4gICAgICByZXNwb25zZS5oZWFkZXJzID0ge307XG4gICAgfVxuXG4gICAgY2xpZW50LmFib3J0ID0gKCkgPT4ge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH07XG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgIGNsaWVudC5lbWl0KFwicmVzcG9uc2VcIiwgcmVzcG9uc2UpO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHJlc3BvbnNlLmVtaXQoXCJkYXRhXCIsIGJ1ZmZlcik7XG4gICAgICAgIGNsaWVudC5lbWl0KFwiZGF0YVwiLCBidWZmZXIpO1xuICAgICAgICByZXNwb25zZS5lbWl0KFwiZW5kXCIpO1xuICAgICAgICBjbGllbnQuZW1pdChcImVuZFwiKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0ge307XG5cbiAgZm9yIChjb25zdCBoZWFkZXIgaW4gZmxhZy5yZXF1ZXN0SGVhZGVycykge1xuICAgIHJlcXVlc3RIZWFkZXJzW2hlYWRlcl0gPSBmbGFnLnJlcXVlc3RIZWFkZXJzW2hlYWRlcl07XG4gIH1cblxuICBpZiAoZ2V0UmVxdWVzdEhlYWRlcihmbGFnLnJlcXVlc3RIZWFkZXJzLCBcInJlZmVyZXJcIikgPT09IG51bGwpIHtcbiAgICByZXF1ZXN0SGVhZGVycy5SZWZlcmVyID0gZmxhZy5yZWZlcnJlcjtcbiAgfVxuICBpZiAoZ2V0UmVxdWVzdEhlYWRlcihmbGFnLnJlcXVlc3RIZWFkZXJzLCBcInVzZXItYWdlbnRcIikgPT09IG51bGwpIHtcbiAgICByZXF1ZXN0SGVhZGVyc1tcIlVzZXItQWdlbnRcIl0gPSBmbGFnLnVzZXJBZ2VudDtcbiAgfVxuICBpZiAoZ2V0UmVxdWVzdEhlYWRlcihmbGFnLnJlcXVlc3RIZWFkZXJzLCBcImFjY2VwdC1sYW5ndWFnZVwiKSA9PT0gbnVsbCkge1xuICAgIHJlcXVlc3RIZWFkZXJzW1wiQWNjZXB0LUxhbmd1YWdlXCJdID0gXCJlblwiO1xuICB9XG4gIGlmIChnZXRSZXF1ZXN0SGVhZGVyKGZsYWcucmVxdWVzdEhlYWRlcnMsIFwiYWNjZXB0XCIpID09PSBudWxsKSB7XG4gICAgcmVxdWVzdEhlYWRlcnMuQWNjZXB0ID0gXCIqLypcIjtcbiAgfVxuXG4gIGNvbnN0IGNyb3NzT3JpZ2luID0gZmxhZy5vcmlnaW4gIT09IHVybE9iai5vcmlnaW47XG4gIGlmIChjcm9zc09yaWdpbikge1xuICAgIHJlcXVlc3RIZWFkZXJzLk9yaWdpbiA9IGZsYWcub3JpZ2luO1xuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICB1cmksXG4gICAgbWV0aG9kOiBmbGFnLm1ldGhvZCxcbiAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICBnemlwOiB0cnVlLFxuICAgIG1heFJlZGlyZWN0czogMjEsXG4gICAgZm9sbG93QWxsUmVkaXJlY3RzOiB0cnVlLFxuICAgIGVuY29kaW5nOiBudWxsLFxuICAgIHBvb2w6IGZsYWcucG9vbCxcbiAgICBhZ2VudE9wdGlvbnM6IGZsYWcuYWdlbnRPcHRpb25zLFxuICAgIHN0cmljdFNTTDogZmxhZy5zdHJpY3RTU0xcbiAgfTtcbiAgaWYgKGZsYWcuYXV0aCkge1xuICAgIG9wdGlvbnMuYXV0aCA9IHtcbiAgICAgIHVzZXI6IGZsYWcuYXV0aC51c2VyIHx8IFwiXCIsXG4gICAgICBwYXNzOiBmbGFnLmF1dGgucGFzcyB8fCBcIlwiLFxuICAgICAgc2VuZEltbWVkaWF0ZWx5OiBmYWxzZVxuICAgIH07XG4gIH1cbiAgaWYgKGZsYWcuY29va2llSmFyICYmICghY3Jvc3NPcmlnaW4gfHwgZmxhZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgb3B0aW9ucy5qYXIgPSB3cmFwQ29va2llSmFyRm9yUmVxdWVzdChmbGFnLmNvb2tpZUphcik7XG4gIH1cblxuICBpZiAoZmxhZy5wcm94eSkge1xuICAgIG9wdGlvbnMucHJveHkgPSBmbGFnLnByb3h5O1xuICB9XG5cbiAgY29uc3QgYm9keSA9IGZsYWcuYm9keTtcbiAgY29uc3QgaGFzQm9keSA9IGJvZHkgIT09IHVuZGVmaW5lZCAmJlxuICAgIGJvZHkgIT09IG51bGwgJiZcbiAgICBib2R5ICE9PSBcIlwiICYmXG4gICAgISh1Y01ldGhvZCA9PT0gXCJIRUFEXCIgfHwgdWNNZXRob2QgPT09IFwiR0VUXCIpO1xuXG4gIGlmIChoYXNCb2R5ICYmICFmbGFnLmZvcm1EYXRhKSB7XG4gICAgb3B0aW9ucy5ib2R5ID0gYm9keTtcbiAgfVxuXG4gIGlmIChoYXNCb2R5ICYmIGdldFJlcXVlc3RIZWFkZXIoZmxhZy5yZXF1ZXN0SGVhZGVycywgXCJjb250ZW50LXR5cGVcIikgPT09IG51bGwpIHtcbiAgICByZXF1ZXN0SGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04XCI7XG4gIH1cblxuICBmdW5jdGlvbiBkb1JlcXVlc3QoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlcXVlc3Qob3B0aW9ucyk7XG5cbiAgICAgIGlmIChoYXNCb2R5ICYmIGZsYWcuZm9ybURhdGEpIHtcbiAgICAgICAgY29uc3QgZm9ybSA9IGNsaWVudC5mb3JtKCk7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgYm9keSkge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGVudHJ5Lm5hbWUsIGVudHJ5LnZhbHVlLCBlbnRyeS5vcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4gY2xpZW50LmVtaXQoXCJlcnJvclwiLCBlKSk7XG4gICAgICByZXR1cm4gY2xpZW50O1xuICAgIH1cbiAgfVxuXG4gIGxldCBjbGllbnQ7XG5cbiAgY29uc3Qgbm9uU2ltcGxlSGVhZGVycyA9IE9iamVjdC5rZXlzKGZsYWcucmVxdWVzdEhlYWRlcnMpXG4gICAgLmZpbHRlcihoZWFkZXIgPT4gIXNpbXBsZUhlYWRlcnMuaGFzKGhlYWRlci50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgaWYgKGNyb3NzT3JpZ2luICYmICghc2ltcGxlTWV0aG9kcy5oYXModWNNZXRob2QpIHx8IG5vblNpbXBsZUhlYWRlcnMubGVuZ3RoID4gMCkpIHtcbiAgICBjbGllbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdCBwcmVmbGlnaHRSZXF1ZXN0SGVhZGVycyA9IFtdO1xuICAgIGZvciAoY29uc3QgaGVhZGVyIGluIHJlcXVlc3RIZWFkZXJzKSB7XG4gICAgICBwcmVmbGlnaHRSZXF1ZXN0SGVhZGVyc1toZWFkZXJdID0gcmVxdWVzdEhlYWRlcnNbaGVhZGVyXTtcbiAgICB9XG5cbiAgICBwcmVmbGlnaHRSZXF1ZXN0SGVhZGVyc1tcIkFjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kXCJdID0gZmxhZy5tZXRob2Q7XG4gICAgaWYgKG5vblNpbXBsZUhlYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgcHJlZmxpZ2h0UmVxdWVzdEhlYWRlcnNbXCJBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnNcIl0gPSBub25TaW1wbGVIZWFkZXJzLmpvaW4oXCIsIFwiKTtcbiAgICB9XG5cbiAgICBmbGFnLnByZWZsaWdodCA9IHRydWU7XG5cbiAgICBjb25zdCBwcmVmbGlnaHRPcHRpb25zID0ge1xuICAgICAgdXJpLFxuICAgICAgbWV0aG9kOiBcIk9QVElPTlNcIixcbiAgICAgIGhlYWRlcnM6IHByZWZsaWdodFJlcXVlc3RIZWFkZXJzLFxuICAgICAgZm9sbG93UmVkaXJlY3Q6IGZhbHNlLFxuICAgICAgZW5jb2Rpbmc6IG51bGwsXG4gICAgICBwb29sOiBmbGFnLnBvb2wsXG4gICAgICBhZ2VudE9wdGlvbnM6IGZsYWcuYWdlbnRPcHRpb25zLFxuICAgICAgc3RyaWN0U1NMOiBmbGFnLnN0cmljdFNTTFxuICAgIH07XG5cbiAgICBpZiAoZmxhZy5wcm94eSkge1xuICAgICAgcHJlZmxpZ2h0T3B0aW9ucy5wcm94eSA9IGZsYWcucHJveHk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlZmxpZ2h0Q2xpZW50ID0gcmVxdWVzdChwcmVmbGlnaHRPcHRpb25zKTtcblxuICAgIHByZWZsaWdodENsaWVudC5vbihcInJlc3BvbnNlXCIsIHJlc3AgPT4ge1xuICAgICAgaWYgKHJlc3Auc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzcC5zdGF0dXNDb2RlIDw9IDI5OSkge1xuICAgICAgICBjb25zdCByZWFsQ2xpZW50ID0gZG9SZXF1ZXN0KCk7XG4gICAgICAgIHJlYWxDbGllbnQub24oXCJyZXNwb25zZVwiLCByZXMgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgaGVhZGVyIGluIHJlc3AuaGVhZGVycykge1xuICAgICAgICAgICAgaWYgKHByZWZsaWdodEhlYWRlcnMuaGFzKGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgcmVzLmhlYWRlcnNbaGVhZGVyXSA9IHJlcy5oZWFkZXJzLmhhc093blByb3BlcnR5KGhlYWRlcikgP1xuICAgICAgICAgICAgICAgIG1lcmdlSGVhZGVycyhyZXMuaGVhZGVyc1toZWFkZXJdLCByZXNwLmhlYWRlcnNbaGVhZGVyXSkgOiByZXNwLmhlYWRlcnNbaGVhZGVyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2xpZW50LmVtaXQoXCJyZXNwb25zZVwiLCByZXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVhbENsaWVudC5vbihcImRhdGFcIiwgY2h1bmsgPT4gY2xpZW50LmVtaXQoXCJkYXRhXCIsIGNodW5rKSk7XG4gICAgICAgIHJlYWxDbGllbnQub24oXCJlbmRcIiwgKCkgPT4gY2xpZW50LmVtaXQoXCJlbmRcIikpO1xuICAgICAgICByZWFsQ2xpZW50Lm9uKFwiYWJvcnRcIiwgKCkgPT4gY2xpZW50LmVtaXQoXCJhYm9ydFwiKSk7XG4gICAgICAgIHJlYWxDbGllbnQub24oXCJyZXF1ZXN0XCIsIHJlcSA9PiB7XG4gICAgICAgICAgY2xpZW50LmhlYWRlcnMgPSByZWFsQ2xpZW50LmhlYWRlcnM7XG4gICAgICAgICAgY2xpZW50LmVtaXQoXCJyZXF1ZXN0XCIsIHJlcSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZWFsQ2xpZW50Lm9uKFwicmVkaXJlY3RcIiwgKCkgPT4ge1xuICAgICAgICAgIGNsaWVudC5yZXNwb25zZSA9IHJlYWxDbGllbnQucmVzcG9uc2U7XG4gICAgICAgICAgY2xpZW50LmVtaXQoXCJyZWRpcmVjdFwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlYWxDbGllbnQub24oXCJlcnJvclwiLCBlcnIgPT4gY2xpZW50LmVtaXQoXCJlcnJvclwiLCBlcnIpKTtcbiAgICAgICAgY2xpZW50LmFib3J0ID0gKCkgPT4ge1xuICAgICAgICAgIHJlYWxDbGllbnQuYWJvcnQoKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsaWVudC5lbWl0KFwiZXJyb3JcIiwgbmV3IEVycm9yKFwiUmVzcG9uc2UgZm9yIHByZWZsaWdodCBoYXMgaW52YWxpZCBIVFRQIHN0YXR1cyBjb2RlIFwiICsgcmVzcC5zdGF0dXNDb2RlKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBwcmVmbGlnaHRDbGllbnQub24oXCJlcnJvclwiLCBlcnIgPT4gY2xpZW50LmVtaXQoXCJlcnJvclwiLCBlcnIpKTtcblxuICAgIGNsaWVudC5hYm9ydCA9ICgpID0+IHtcbiAgICAgIHByZWZsaWdodENsaWVudC5hYm9ydCgpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY2xpZW50ID0gZG9SZXF1ZXN0KCk7XG4gIH1cblxuICBpZiAocmVxdWVzdE1hbmFnZXIpIHtcbiAgICBjb25zdCByZXEgPSB7XG4gICAgICBhYm9ydCgpIHtcbiAgICAgICAgcHJvcGVydGllcy5hYm9ydEVycm9yID0gdHJ1ZTtcbiAgICAgICAgeGhyLmFib3J0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXF1ZXN0TWFuYWdlci5hZGQocmVxKTtcbiAgICBjb25zdCBybVJlcSA9IHJlcXVlc3RNYW5hZ2VyLnJlbW92ZS5iaW5kKHJlcXVlc3RNYW5hZ2VyLCByZXEpO1xuICAgIGNsaWVudC5vbihcImFib3J0XCIsIHJtUmVxKTtcbiAgICBjbGllbnQub24oXCJlcnJvclwiLCBybVJlcSk7XG4gICAgY2xpZW50Lm9uKFwiZW5kXCIsIHJtUmVxKTtcbiAgfVxuXG4gIHJldHVybiBjbGllbnQ7XG59O1xuXG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGlkbFV0aWxzID0gcmVxdWlyZShcIi4uL2dlbmVyYXRlZC91dGlsc1wiKTtcbmNvbnN0IGlzRm9ybUVsZW1lbnQgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0hUTUxGb3JtRWxlbWVudFwiKS5pc0ltcGw7XG5jb25zdCBjbG9zZXN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHJhdmVyc2FsXCIpLmNsb3Nlc3Q7XG5jb25zdCBpc0Rpc2FibGVkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZm9ybS1jb250cm9sc1wiKS5pc0Rpc2FibGVkO1xuY29uc3QgaXNTdWJtaXR0YWJsZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2Zvcm0tY29udHJvbHNcIikuaXNTdWJtaXR0YWJsZTtcbmNvbnN0IGlzQnV0dG9uID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZm9ybS1jb250cm9sc1wiKS5pc0J1dHRvbjtcbmNvbnN0IG5vcm1hbGl6ZVRvQ1JMRiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2Zvcm0tY29udHJvbHNcIikubm9ybWFsaXplVG9DUkxGO1xuY29uc3QgQmxvYiA9IHJlcXVpcmUoXCIuLi9nZW5lcmF0ZWQvQmxvYi5qc1wiKTtcbmNvbnN0IEZpbGUgPSByZXF1aXJlKFwiLi4vZ2VuZXJhdGVkL0ZpbGUuanNcIik7XG5jb25zdCBjb252ZXJzaW9ucyA9IHJlcXVpcmUoXCJ3ZWJpZGwtY29udmVyc2lvbnNcIik7XG5cbmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBjbGFzcyBGb3JtRGF0YUltcGwge1xuICBjb25zdHJ1Y3RvcihhcmdzKSB7XG4gICAgdGhpcy5fZW50cmllcyA9IFtdO1xuXG4gICAgaWYgKGFyZ3NbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFpc0Zvcm1FbGVtZW50KGFyZ3NbMF0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCBtdXN0IHVuZGVmaW5lZCBvciBhIEhUTUxGb3JtRWxlbWVudFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZW50cmllcyA9IGNvbnN0cnVjdFRoZUZvcm1EYXRhU2V0KGFyZ3NbMF0pO1xuICAgIH1cbiAgfVxuXG4gIGFwcGVuZChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgICAvLyBIYW5kbGluZyB0aGlzIG1hbnVhbGx5IGZvciBub3c6IGh0dHBzOi8vZ2l0aHViLmNvbS9qc2RvbS93ZWJpZGwyanMvaXNzdWVzLzI5XG4gICAgaWYgKCFCbG9iLmlzSW1wbCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gY29udmVyc2lvbnMuVVNWU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeSA9IGNyZWF0ZUFuRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKTtcbiAgICB0aGlzLl9lbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZGVsZXRlKG5hbWUpIHtcbiAgICB0aGlzLl9lbnRyaWVzID0gdGhpcy5fZW50cmllcy5maWx0ZXIoZW50cnkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSk7XG4gIH1cblxuICBnZXQobmFtZSkge1xuICAgIGNvbnN0IGZvdW5kRW50cnkgPSB0aGlzLl9lbnRyaWVzLmZpbmQoZW50cnkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSk7XG4gICAgcmV0dXJuIGZvdW5kRW50cnkgIT09IHVuZGVmaW5lZCA/IGZvdW5kRW50cnkudmFsdWUgOiBudWxsO1xuICB9XG5cbiAgZ2V0QWxsKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fZW50cmllcy5maWx0ZXIoZW50cnkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSkubWFwKGVudHJ5ID0+IGVudHJ5LnZhbHVlKTtcbiAgfVxuXG4gIGhhcyhuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VudHJpZXMuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpICE9PSAtMTtcbiAgfVxuXG4gIHNldChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgICAvLyBIYW5kbGluZyB0aGlzIG1hbnVhbGx5IGZvciBub3c6IGh0dHBzOi8vZ2l0aHViLmNvbS9qc2RvbS93ZWJpZGwyanMvaXNzdWVzLzI5XG4gICAgaWYgKCFCbG9iLmlzSW1wbCh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gY29udmVyc2lvbnMuVVNWU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeSA9IGNyZWF0ZUFuRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKTtcblxuICAgIGNvbnN0IGZvdW5kSW5kZXggPSB0aGlzLl9lbnRyaWVzLmZpbmRJbmRleChlID0+IGUubmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9lbnRyaWVzW2ZvdW5kSW5kZXhdID0gZW50cnk7XG4gICAgICB0aGlzLl9lbnRyaWVzID0gdGhpcy5fZW50cmllcy5maWx0ZXIoKGUsIGkpID0+IGUubmFtZSAhPT0gbmFtZSB8fCBpID09PSBmb3VuZEluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB9XG4gIH1cblxuICAqIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5fZW50cmllcykge1xuICAgICAgeWllbGQgW2VudHJ5Lm5hbWUsIGlkbFV0aWxzLnRyeVdyYXBwZXJGb3JJbXBsKGVudHJ5LnZhbHVlKV07XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVBbkVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSkge1xuICBjb25zdCBlbnRyeSA9IHsgbmFtZSB9O1xuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cveGhyL2lzc3Vlcy83NVxuXG4gIGlmIChCbG9iLmlzSW1wbCh2YWx1ZSkgJiYgIUZpbGUuaXNJbXBsKHZhbHVlKSkge1xuICAgIGNvbnN0IG9sZFZhbHVlID0gdmFsdWU7XG4gICAgdmFsdWUgPSBGaWxlLmNyZWF0ZUltcGwoW1xuICAgICAgW10sXG4gICAgICBcImJsb2JcIixcbiAgICAgIHsgdHlwZTogb2xkVmFsdWUudHlwZSB9XG4gICAgXSk7XG4gICAgLy8gXCJyZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXNcIlxuICAgIHZhbHVlLl9idWZmZXIgPSBvbGRWYWx1ZS5fYnVmZmVyO1xuICB9XG5cbiAgaWYgKEZpbGUuaXNJbXBsKHZhbHVlKSAmJiBmaWxlbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB2YWx1ZTtcbiAgICB2YWx1ZSA9IEZpbGUuY3JlYXRlSW1wbChbXG4gICAgICBbXSxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgLy8gc3BlYyBtYWtlcyBubyBtZW50aW9uIG9mIGBsYXN0TW9kaWZpZWRgOyBhc3N1bWUgaXQgaXMgaW5oZXJpdGVkXG4gICAgICAvLyAoQ2hyb21lJ3MgYmVoYXZpb3IpXG4gICAgICB7IHR5cGU6IG9sZFZhbHVlLnR5cGUsIGxhc3RNb2RpZmllZDogb2xkVmFsdWUubGFzdE1vZGlmaWVkIH1cbiAgICBdKTtcbiAgICAvLyBcInJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlc1wiXG4gICAgdmFsdWUuX2J1ZmZlciA9IG9sZFZhbHVlLl9idWZmZXI7XG4gIH1cblxuICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuXG4gIHJldHVybiBlbnRyeTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0VGhlRm9ybURhdGFTZXQoZm9ybSwgc3VibWl0dGVyKSB7XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uc3RydWN0aW5nLWZvcm0tZGF0YS1zZXRcblxuICBjb25zdCBjb250cm9scyA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChmb3JtLmVsZW1lbnRzLCBpc1N1Ym1pdHRhYmxlKTsgLy8gc3VibWl0dGFibGUgaXMgYSBzdWJzZXQgb2YgbGlzdGVkXG4gIGNvbnN0IGZvcm1EYXRhU2V0ID0gW107XG5cbiAgZm9yIChjb25zdCBmaWVsZFdyYXBwZXIgb2YgY29udHJvbHMpIHtcbiAgICBjb25zdCBmaWVsZCA9IGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKGZpZWxkV3JhcHBlcik7XG5cbiAgICBpZiAoY2xvc2VzdChmaWVsZCwgXCJkYXRhbGlzdFwiKSAhPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpc0Rpc2FibGVkKGZpZWxkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpc0J1dHRvbihmaWVsZCkgJiYgZmllbGQgIT09IHN1Ym1pdHRlcikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChmaWVsZC50eXBlID09PSBcImNoZWNrYm94XCIgJiYgZmllbGQuX2NoZWNrZWRuZXNzID09PSBmYWxzZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChmaWVsZC50eXBlID09PSBcInJhZGlvXCIgJiYgZmllbGQuX2NoZWNrZWRuZXNzID09PSBmYWxzZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChmaWVsZC50eXBlICE9PSBcImltYWdlXCIgJiYgKCFmaWVsZC5oYXNBdHRyaWJ1dGUoXCJuYW1lXCIpIHx8IGZpZWxkLmdldEF0dHJpYnV0ZShcIm5hbWVcIikgPT09IFwiXCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGZpZWxkLmxvY2FsTmFtZSA9PT0gXCJvYmplY3RcIikgeyAvLyBpbiBqc2RvbSwgbm8gb2JqZWN0cyBhcmUgXCJ1c2luZyBhIHBsdWdpblwiXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gZmllbGQudHlwZTtcblxuICAgIC8vIE9taXQgc3BlY2lhbCBwcm9jZXNzaW5nIG9mIDxpbnB1dCB0eXBlPVwiaW1hZ2VcIj4gc2luY2Ugc28gZmFyIHdlIGRvbid0IGFjdHVhbGx5IGV2ZXIgcGFzcyBzdWJtaXR0ZXJcblxuICAgIGNvbnN0IG5hbWVBdHRyID0gZmllbGQuZ2V0QXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICBjb25zdCBuYW1lID0gbmFtZUF0dHIgPT09IG51bGwgPyBcIlwiIDogbmFtZUF0dHI7XG5cbiAgICBpZiAoZmllbGQubG9jYWxOYW1lID09PSBcInNlbGVjdFwiKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkLm9wdGlvbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIoZmllbGQub3B0aW9uc1tpXSk7XG4gICAgICAgIGlmIChvcHRpb24uX3NlbGVjdGVkbmVzcyA9PT0gdHJ1ZSAmJiAhaXNEaXNhYmxlZChmaWVsZCkpIHtcbiAgICAgICAgICBmb3JtRGF0YVNldC5wdXNoKHsgbmFtZSwgdmFsdWU6IG9wdGlvbi52YWx1ZSwgdHlwZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmllbGQubG9jYWxOYW1lID09PSBcImlucHV0XCIgJiYgKHR5cGUgPT09IFwiY2hlY2tib3hcIiB8fCB0eXBlID09PSBcInJhZGlvXCIpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLmhhc0F0dHJpYnV0ZShcInZhbHVlXCIpID8gZmllbGQuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikgOiBcIm9uXCI7XG4gICAgICBmb3JtRGF0YVNldC5wdXNoKHsgbmFtZSwgdmFsdWUsIHR5cGUgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImZpbGVcIikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWVsZC5maWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBmb3JtRGF0YVNldC5wdXNoKHsgbmFtZSwgdmFsdWU6IGZpZWxkLmZpbGVzLml0ZW0oaSksIHR5cGUgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC5maWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZm9ybURhdGFTZXQucHVzaCh7IG5hbWUsIHZhbHVlOiBcIlwiLCB0eXBlOiBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiIH0pO1xuICAgICAgfVxuICAgIH0gLyogc2tpcCBwbHVnaW5zICovIGVsc2Uge1xuICAgICAgZm9ybURhdGFTZXQucHVzaCh7IG5hbWUsIHZhbHVlOiBmaWVsZC5fZ2V0VmFsdWUoKSwgdHlwZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXJuYW1lID0gZmllbGQuZ2V0QXR0cmlidXRlKFwiZGlybmFtZVwiKTtcbiAgICBpZiAoZGlybmFtZSAhPT0gbnVsbCAmJiBkaXJuYW1lICE9PSBcIlwiKSB7XG4gICAgICBjb25zdCBkaXIgPSBcImx0clwiOyAvLyBqc2RvbSBkb2VzIG5vdCAoeWV0PykgaW1wbGVtZW50IGFjdHVhbCBkaXJlY3Rpb25hbGl0eVxuICAgICAgZm9ybURhdGFTZXQucHVzaCh7IG5hbWU6IGRpcm5hbWUsIHZhbHVlOiBkaXIsIHR5cGU6IFwiZGlyZWN0aW9uXCIgfSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBmb3JtRGF0YVNldCkge1xuICAgIGVudHJ5Lm5hbWUgPSBjb252ZXJzaW9ucy5VU1ZTdHJpbmcobm9ybWFsaXplVG9DUkxGKGVudHJ5Lm5hbWUpKTtcblxuICAgIGlmIChlbnRyeS50eXBlICE9PSBcImZpbGVcIiAmJiBlbnRyeS50eXBlICE9PSBcInRleHRhcmVhXCIpIHtcbiAgICAgIGVudHJ5LnZhbHVlID0gbm9ybWFsaXplVG9DUkxGKGVudHJ5LnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZW50cnkudHlwZSAhPT0gXCJmaWxlXCIpIHtcbiAgICAgIGVudHJ5LnZhbHVlID0gY29udmVyc2lvbnMuVVNWU3RyaW5nKGVudHJ5LnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm9ybURhdGFTZXQ7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgRXZlbnRUYXJnZXQgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvRXZlbnRUYXJnZXRcIik7XG5cbmZ1bmN0aW9uIFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQoKSB7XG4gIGlmICghbmV3LnRhcmdldCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgRXZlbnRUYXJnZXQuc2V0dXAodGhpcyk7XG4gIHRoaXMub25hYm9ydCA9IG51bGw7XG4gIHRoaXMub25lcnJvciA9IG51bGw7XG4gIHRoaXMub25sb2FkID0gbnVsbDtcbiAgdGhpcy5vbmxvYWRlbmQgPSBudWxsO1xuICB0aGlzLm9ubG9hZHN0YXJ0ID0gbnVsbDtcbiAgdGhpcy5vbnByb2dyZXNzID0gbnVsbDtcbiAgdGhpcy5vbnRpbWVvdXQgPSBudWxsO1xufVxuXG5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXZlbnRUYXJnZXQuaW50ZXJmYWNlLnByb3RvdHlwZSk7XG5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvcmUpIHtcbiAgY29yZS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0ID0gWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5mbGFnID0gU3ltYm9sKFwiZmxhZ1wiKTtcbmV4cG9ydHMucHJvcGVydGllcyA9IFN5bWJvbChcInByb3BlcnRpZXNcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29yZSkge1xuICBjb25zdCBYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0ID0gY29yZS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O1xuXG4gIGNsYXNzIFhNTEh0dHBSZXF1ZXN0VXBsb2FkIGV4dGVuZHMgWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgaWYgKCFuZXcudGFyZ2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFhNTEh0dHBSZXF1ZXN0VXBsb2FkLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJYTUxIdHRwUmVxdWVzdFVwbG9hZFwiO1xuXG4gIGNvcmUuWE1MSHR0cFJlcXVlc3RVcGxvYWQgPSBYTUxIdHRwUmVxdWVzdFVwbG9hZDtcbn07XG5cbiIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBIVFRQX1NUQVRVU19DT0RFUyA9IHJlcXVpcmUoXCJodHRwXCIpLlNUQVRVU19DT0RFUztcbmNvbnN0IHNwYXduU3luYyA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpLnNwYXduU3luYztcbmNvbnN0IFVSTCA9IHJlcXVpcmUoXCJ3aGF0d2ctdXJsXCIpLlVSTDtcbmNvbnN0IHdoYXR3Z0VuY29kaW5nID0gcmVxdWlyZShcIndoYXR3Zy1lbmNvZGluZ1wiKTtcbmNvbnN0IHRvdWdoID0gcmVxdWlyZShcInRvdWdoLWNvb2tpZVwiKTtcbmNvbnN0IHBhcnNlQ29udGVudFR5cGUgPSByZXF1aXJlKFwiY29udGVudC10eXBlLXBhcnNlclwiKTtcblxuY29uc3QgeGhyVXRpbHMgPSByZXF1aXJlKFwiLi94aHItdXRpbHNcIik7XG5jb25zdCBET01FeGNlcHRpb24gPSByZXF1aXJlKFwiLi4vd2ViLWlkbC9ET01FeGNlcHRpb25cIik7XG5jb25zdCB4aHJTeW1ib2xzID0gcmVxdWlyZShcIi4veG1saHR0cHJlcXVlc3Qtc3ltYm9sc1wiKTtcbmNvbnN0IGFkZENvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKS5hZGRDb25zdGFudHM7XG5jb25zdCBkb2N1bWVudEJhc2VVUkxTZXJpYWxpemVkID0gcmVxdWlyZShcIi4vaGVscGVycy9kb2N1bWVudC1iYXNlLXVybFwiKS5kb2N1bWVudEJhc2VVUkxTZXJpYWxpemVkO1xuY29uc3QgaWRsVXRpbHMgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvdXRpbHNcIik7XG5jb25zdCBEb2N1bWVudCA9IHJlcXVpcmUoXCIuL2dlbmVyYXRlZC9Eb2N1bWVudFwiKTtcbmNvbnN0IEJsb2IgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQvQmxvYlwiKTtcbmNvbnN0IGRvbVRvSHRtbCA9IHJlcXVpcmUoXCIuLi9icm93c2VyL2RvbXRvaHRtbFwiKS5kb21Ub0h0bWw7XG5cbmNvbnN0IHN5bmNXb3JrZXJGaWxlID0gcmVxdWlyZS5yZXNvbHZlID8gcmVxdWlyZS5yZXNvbHZlKFwiLi94aHItc3luYy13b3JrZXIuanNcIikgOiBudWxsO1xuXG5jb25zdCB0b2tlblJlZ2V4cCA9IC9eWyEjJCUmJyorXFwtLl5fYHx+MC05QS1aYS16XSskLztcbmNvbnN0IGhlYWRlckxpc3RTZXBhcmF0b3JSZWdleHAgPSAvLFsgXFx0XSovO1xuY29uc3QgZmllbGRWYWx1ZVJlZ2V4cCA9IC9eWyBcXHRdKig/OltcXHgyMS1cXHg3RVxceDgwLVxceEZGXSg/OlsgXFx0XVtcXHgyMS1cXHg3RVxceDgwLVxceEZGXSk/KSpbIFxcdF0qJC87XG5cbmNvbnN0IGZvcmJpZGRlblJlcXVlc3RIZWFkZXJzID0gbmV3IFNldChbXG4gIFwiYWNjZXB0LWNoYXJzZXRcIixcbiAgXCJhY2NlcHQtZW5jb2RpbmdcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LWhlYWRlcnNcIixcbiAgXCJhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZFwiLFxuICBcImNvbm5lY3Rpb25cIixcbiAgXCJjb250ZW50LWxlbmd0aFwiLFxuICBcImNvb2tpZVwiLFxuICBcImNvb2tpZTJcIixcbiAgXCJkYXRlXCIsXG4gIFwiZG50XCIsXG4gIFwiZXhwZWN0XCIsXG4gIFwiaG9zdFwiLFxuICBcImtlZXAtYWxpdmVcIixcbiAgXCJvcmlnaW5cIixcbiAgXCJyZWZlcmVyXCIsXG4gIFwidGVcIixcbiAgXCJ0cmFpbGVyXCIsXG4gIFwidHJhbnNmZXItZW5jb2RpbmdcIixcbiAgXCJ1cGdyYWRlXCIsXG4gIFwidmlhXCJcbl0pO1xuY29uc3QgZm9yYmlkZGVuUmVzcG9uc2VIZWFkZXJzID0gbmV3IFNldChbXG4gIFwic2V0LWNvb2tpZVwiLFxuICBcInNldC1jb29raWUyXCJcbl0pO1xuY29uc3QgdW5pcXVlUmVzcG9uc2VIZWFkZXJzID0gbmV3IFNldChbXG4gIFwiY29udGVudC10eXBlXCIsXG4gIFwiY29udGVudC1sZW5ndGhcIixcbiAgXCJ1c2VyLWFnZW50XCIsXG4gIFwicmVmZXJlclwiLFxuICBcImhvc3RcIixcbiAgXCJhdXRob3JpemF0aW9uXCIsXG4gIFwicHJveHktYXV0aG9yaXphdGlvblwiLFxuICBcImlmLW1vZGlmaWVkLXNpbmNlXCIsXG4gIFwiaWYtdW5tb2RpZmllZC1zaW5jZVwiLFxuICBcImZyb21cIixcbiAgXCJsb2NhdGlvblwiLFxuICBcIm1heC1mb3J3YXJkc1wiXG5dKTtcbmNvbnN0IGNvcnNTYWZlUmVzcG9uc2VIZWFkZXJzID0gbmV3IFNldChbXG4gIFwiY2FjaGUtY29udHJvbFwiLFxuICBcImNvbnRlbnQtbGFuZ3VhZ2VcIixcbiAgXCJjb250ZW50LXR5cGVcIixcbiAgXCJleHBpcmVzXCIsXG4gIFwibGFzdC1tb2RpZmllZFwiLFxuICBcInByYWdtYVwiXG5dKTtcblxuXG5jb25zdCBhbGxvd2VkUmVxdWVzdE1ldGhvZHMgPSBuZXcgU2V0KFtcIk9QVElPTlNcIiwgXCJHRVRcIiwgXCJIRUFEXCIsIFwiUE9TVFwiLCBcIlBVVFwiLCBcIkRFTEVURVwiXSk7XG5jb25zdCBmb3JiaWRkZW5SZXF1ZXN0TWV0aG9kcyA9IG5ldyBTZXQoW1wiVFJBQ0tcIiwgXCJUUkFDRVwiLCBcIkNPTk5FQ1RcIl0pO1xuXG5jb25zdCBYTUxIdHRwUmVxdWVzdFJlc3BvbnNlVHlwZSA9IG5ldyBTZXQoW1xuICBcIlwiLFxuICBcImFycmF5YnVmZmVyXCIsXG4gIFwiYmxvYlwiLFxuICBcImRvY3VtZW50XCIsXG4gIFwianNvblwiLFxuICBcInRleHRcIlxuXSk7XG5cbmNvbnN0IHNpbXBsZUhlYWRlcnMgPSB4aHJVdGlscy5zaW1wbGVIZWFkZXJzO1xuXG5jb25zdCByZWRpcmVjdFN0YXR1c2VzID0gbmV3IFNldChbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGVYTUxIdHRwUmVxdWVzdCh3aW5kb3cpIHtcbiAgY29uc3QgRXZlbnQgPSB3aW5kb3cuRXZlbnQ7XG4gIGNvbnN0IFByb2dyZXNzRXZlbnQgPSB3aW5kb3cuUHJvZ3Jlc3NFdmVudDtcbiAgY29uc3QgRm9ybURhdGEgPSB3aW5kb3cuRm9ybURhdGE7XG4gIGNvbnN0IFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQgPSB3aW5kb3cuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtcbiAgY29uc3QgWE1MSHR0cFJlcXVlc3RVcGxvYWQgPSB3aW5kb3cuWE1MSHR0cFJlcXVlc3RVcGxvYWQ7XG5cbiAgY2xhc3MgWE1MSHR0cFJlcXVlc3QgZXh0ZW5kcyBYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgWE1MSHR0cFJlcXVlc3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgICB9XG4gICAgICB0aGlzLnVwbG9hZCA9IG5ldyBYTUxIdHRwUmVxdWVzdFVwbG9hZCgpO1xuICAgICAgdGhpcy51cGxvYWQuX293bmVyRG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cbiAgICAgIHRoaXNbeGhyU3ltYm9scy5mbGFnXSA9IHtcbiAgICAgICAgc3luY2hyb25vdXM6IGZhbHNlLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgICAgICBtaW1lVHlwZTogbnVsbCxcbiAgICAgICAgYXV0aDogbnVsbCxcbiAgICAgICAgbWV0aG9kOiB1bmRlZmluZWQsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogXCJcIixcbiAgICAgICAgcmVxdWVzdEhlYWRlcnM6IHt9LFxuICAgICAgICByZWZlcnJlcjogdGhpcy5fb3duZXJEb2N1bWVudC5VUkwsXG4gICAgICAgIHVyaTogXCJcIixcbiAgICAgICAgdGltZW91dDogMCxcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICBmb3JtRGF0YTogZmFsc2UsXG4gICAgICAgIHByZWZsaWdodDogZmFsc2UsXG4gICAgICAgIHJlcXVlc3RNYW5hZ2VyOiB0aGlzLl9vd25lckRvY3VtZW50Ll9yZXF1ZXN0TWFuYWdlcixcbiAgICAgICAgcG9vbDogdGhpcy5fb3duZXJEb2N1bWVudC5fcG9vbCxcbiAgICAgICAgYWdlbnRPcHRpb25zOiB0aGlzLl9vd25lckRvY3VtZW50Ll9hZ2VudE9wdGlvbnMsXG4gICAgICAgIHN0cmljdFNTTDogdGhpcy5fb3duZXJEb2N1bWVudC5fc3RyaWN0U1NMLFxuICAgICAgICBwcm94eTogdGhpcy5fb3duZXJEb2N1bWVudC5fcHJveHksXG4gICAgICAgIGNvb2tpZUphcjogdGhpcy5fb3duZXJEb2N1bWVudC5fY29va2llSmFyLFxuICAgICAgICBlbmNvZGluZzogdGhpcy5fb3duZXJEb2N1bWVudC5fZW5jb2RpbmcsXG4gICAgICAgIG9yaWdpbjogdGhpcy5fb3duZXJEb2N1bWVudC5vcmlnaW4sXG4gICAgICAgIHVzZXJBZ2VudDogdGhpcy5fb3duZXJEb2N1bWVudC5fZGVmYXVsdFZpZXcubmF2aWdhdG9yLnVzZXJBZ2VudFxuICAgICAgfTtcblxuICAgICAgdGhpc1t4aHJTeW1ib2xzLnByb3BlcnRpZXNdID0ge1xuICAgICAgICBiZWZvcmVTZW5kOiBmYWxzZSxcbiAgICAgICAgc2VuZDogZmFsc2UsXG4gICAgICAgIHRpbWVvdXRTdGFydDogMCxcbiAgICAgICAgdGltZW91dElkOiAwLFxuICAgICAgICB0aW1lb3V0Rm46IG51bGwsXG4gICAgICAgIGNsaWVudDogbnVsbCxcbiAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiB7fSxcbiAgICAgICAgZmlsdGVyZWRSZXNwb25zZUhlYWRlcnM6IFtdLFxuICAgICAgICByZXNwb25zZUJ1ZmZlcjogbnVsbCxcbiAgICAgICAgcmVzcG9uc2VDYWNoZTogbnVsbCxcbiAgICAgICAgcmVzcG9uc2VUZXh0Q2FjaGU6IG51bGwsXG4gICAgICAgIHJlc3BvbnNlWE1MQ2FjaGU6IG51bGwsXG4gICAgICAgIHJlc3BvbnNlVVJMOiBcIlwiLFxuICAgICAgICByZWFkeVN0YXRlOiBYTUxIdHRwUmVxdWVzdC5VTlNFTlQsXG4gICAgICAgIHN0YXR1czogMCxcbiAgICAgICAgc3RhdHVzVGV4dDogXCJcIixcbiAgICAgICAgZXJyb3I6IFwiXCIsXG4gICAgICAgIHVwbG9hZENvbXBsZXRlOiB0cnVlLFxuICAgICAgICBhYm9ydEVycm9yOiBmYWxzZSxcbiAgICAgICAgY29va2llSmFyOiB0aGlzLl9vd25lckRvY3VtZW50Ll9jb29raWVKYXIsXG4gICAgICAgIGJ1ZmZlclN0ZXBTaXplOiAxICogMTAyNCAqIDEwMjQsIC8vIHByZS1hbGxvY2F0ZSBidWZmZXIgaW5jcmVhc2Ugc3RlcCBzaXplLiBpbml0IHZhbHVlIGlzIDFNQlxuICAgICAgICB0b3RhbFJlY2VpdmVkQ2h1bmtTaXplOiAwXG4gICAgICB9O1xuICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgIH1cbiAgICBnZXQgcmVhZHlTdGF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc10ucmVhZHlTdGF0ZTtcbiAgICB9XG4gICAgZ2V0IHN0YXR1cygpIHtcbiAgICAgIHJldHVybiB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc10uc3RhdHVzO1xuICAgIH1cbiAgICBnZXQgc3RhdHVzVGV4dCgpIHtcbiAgICAgIHJldHVybiB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc10uc3RhdHVzVGV4dDtcbiAgICB9XG4gICAgZ2V0IHJlc3BvbnNlVHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzW3hoclN5bWJvbHMuZmxhZ10ucmVzcG9uc2VUeXBlO1xuICAgIH1cbiAgICBzZXQgcmVzcG9uc2VUeXBlKHJlc3BvbnNlVHlwZSkge1xuICAgICAgY29uc3QgZmxhZyA9IHRoaXNbeGhyU3ltYm9scy5mbGFnXTtcbiAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkxPQURJTkcgfHwgdGhpcy5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5ET05FKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0Lk9QRU5FRCAmJiBmbGFnLnN5bmNocm9ub3VzKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfQUNDRVNTX0VSUik7XG4gICAgICB9XG4gICAgICBpZiAoIVhNTEh0dHBSZXF1ZXN0UmVzcG9uc2VUeXBlLmhhcyhyZXNwb25zZVR5cGUpKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZSA9IFwiXCI7XG4gICAgICB9XG4gICAgICBmbGFnLnJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZTtcbiAgICB9XG4gICAgZ2V0IHJlc3BvbnNlKCkge1xuICAgICAgY29uc3QgZmxhZyA9IHRoaXNbeGhyU3ltYm9scy5mbGFnXTtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc107XG4gICAgICBpZiAocHJvcGVydGllcy5yZXNwb25zZUNhY2hlKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLnJlc3BvbnNlQ2FjaGU7XG4gICAgICB9XG4gICAgICBsZXQgcmVzID0gXCJcIjtcblxuICAgICAgY29uc3QgcmVzcG9uc2VCdWZmZXIgPSAhcHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlciA/IG51bGwgOlxuICAgICAgICAgICAgcHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlci5zbGljZSgwLCBwcm9wZXJ0aWVzLnRvdGFsUmVjZWl2ZWRDaHVua1NpemUpO1xuXG4gICAgICBzd2l0Y2ggKHRoaXMucmVzcG9uc2VUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJcIjpcbiAgICAgICAgY2FzZSBcInRleHRcIjoge1xuICAgICAgICAgIHJlcyA9IHRoaXMucmVzcG9uc2VUZXh0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheWJ1ZmZlclwiOiB7XG4gICAgICAgICAgaWYgKCFyZXNwb25zZUJ1ZmZlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcyA9IChuZXcgVWludDhBcnJheShyZXNwb25zZUJ1ZmZlcikpLmJ1ZmZlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYmxvYlwiOiB7XG4gICAgICAgICAgaWYgKCFyZXNwb25zZUJ1ZmZlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gZ2V0Q29udGVudFR5cGUodGhpcyk7XG4gICAgICAgICAgcmVzID0gQmxvYi5jcmVhdGUoW1tuZXcgVWludDhBcnJheShyZXNwb25zZUJ1ZmZlcildLCB7XG4gICAgICAgICAgICB0eXBlOiBjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS50b1N0cmluZygpIHx8IFwiXCJcbiAgICAgICAgICB9XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImRvY3VtZW50XCI6IHtcbiAgICAgICAgICByZXMgPSB0aGlzLnJlc3BvbnNlWE1MO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJqc29uXCI6IHtcbiAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlICE9PSBYTUxIdHRwUmVxdWVzdC5ET05FIHx8ICFyZXNwb25zZUJ1ZmZlcikge1xuICAgICAgICAgICAgcmVzID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IGdldENvbnRlbnRUeXBlKHRoaXMpO1xuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrRW5jb2RpbmcgPSB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZShcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLmdldChcImNoYXJzZXRcIikgfHwgZmxhZy5lbmNvZGluZyk7XG4gICAgICAgICAgY29uc3QganNvblN0ciA9IHdoYXR3Z0VuY29kaW5nLmRlY29kZShyZXNwb25zZUJ1ZmZlciwgZmFsbGJhY2tFbmNvZGluZyk7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzID0gSlNPTi5wYXJzZShqc29uU3RyKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXMgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcHJvcGVydGllcy5yZXNwb25zZUNhY2hlID0gcmVzO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgZ2V0IHJlc3BvbnNlVGV4dCgpIHtcbiAgICAgIGNvbnN0IGZsYWcgPSB0aGlzW3hoclN5bWJvbHMuZmxhZ107XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpc1t4aHJTeW1ib2xzLnByb3BlcnRpZXNdO1xuICAgICAgaWYgKHRoaXMucmVzcG9uc2VUeXBlICE9PSBcIlwiICYmIHRoaXMucmVzcG9uc2VUeXBlICE9PSBcInRleHRcIikge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZWFkeVN0YXRlICE9PSBYTUxIdHRwUmVxdWVzdC5MT0FESU5HICYmIHRoaXMucmVhZHlTdGF0ZSAhPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wZXJ0aWVzLnJlc3BvbnNlVGV4dENhY2hlKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLnJlc3BvbnNlVGV4dENhY2hlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2VCdWZmZXIgPSAhcHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlciA/IG51bGwgOlxuICAgICAgICAgICAgcHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlci5zbGljZSgwLCBwcm9wZXJ0aWVzLnRvdGFsUmVjZWl2ZWRDaHVua1NpemUpO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlQnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IGdldENvbnRlbnRUeXBlKHRoaXMpO1xuICAgICAgY29uc3QgZmFsbGJhY2tFbmNvZGluZyA9IHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLmdldChcImNoYXJzZXRcIikgfHwgZmxhZy5lbmNvZGluZyk7XG4gICAgICBjb25zdCByZXMgPSB3aGF0d2dFbmNvZGluZy5kZWNvZGUocmVzcG9uc2VCdWZmZXIsIGZhbGxiYWNrRW5jb2RpbmcpO1xuXG4gICAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlVGV4dENhY2hlID0gcmVzO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgZ2V0IHJlc3BvbnNlWE1MKCkge1xuICAgICAgY29uc3QgZmxhZyA9IHRoaXNbeGhyU3ltYm9scy5mbGFnXTtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzW3hoclN5bWJvbHMucHJvcGVydGllc107XG4gICAgICBpZiAodGhpcy5yZXNwb25zZVR5cGUgIT09IFwiXCIgJiYgdGhpcy5yZXNwb25zZVR5cGUgIT09IFwiZG9jdW1lbnRcIikge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZWFkeVN0YXRlICE9PSBYTUxIdHRwUmVxdWVzdC5ET05FKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BlcnRpZXMucmVzcG9uc2VYTUxDYWNoZSkge1xuICAgICAgICByZXR1cm4gcHJvcGVydGllcy5yZXNwb25zZVhNTENhY2hlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2VCdWZmZXIgPSAhcHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlciA/IG51bGwgOlxuICAgICAgICAgICAgcHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlci5zbGljZSgwLCBwcm9wZXJ0aWVzLnRvdGFsUmVjZWl2ZWRDaHVua1NpemUpO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlQnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBnZXRDb250ZW50VHlwZSh0aGlzKTtcbiAgICAgIGxldCBpc0hUTUwgPSBmYWxzZTtcbiAgICAgIGxldCBpc1hNTCA9IGZhbHNlO1xuICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGlzSFRNTCA9IGNvbnRlbnRUeXBlLmlzSFRNTCgpO1xuICAgICAgICBpc1hNTCA9IGNvbnRlbnRUeXBlLmlzWE1MKCk7XG4gICAgICAgIGlmICghaXNYTUwgJiYgIWlzSFRNTCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuY29kaW5nID0gd2hhdHdnRW5jb2RpbmcuZ2V0Qk9NRW5jb2RpbmcocmVzcG9uc2VCdWZmZXIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLmdldChcImNoYXJzZXRcIikgfHwgZmxhZy5lbmNvZGluZyk7XG4gICAgICBjb25zdCByZXNUZXh0ID0gd2hhdHdnRW5jb2RpbmcuZGVjb2RlKHJlc3BvbnNlQnVmZmVyLCBlbmNvZGluZyk7XG5cbiAgICAgIGlmICghcmVzVGV4dCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJlc3BvbnNlVHlwZSA9PT0gXCJcIiAmJiBpc0hUTUwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCByZXMgPSBEb2N1bWVudC5jcmVhdGUoW10sIHsgY29yZTogd2luZG93Ll9jb3JlLCBvcHRpb25zOiB7XG4gICAgICAgIHVybDogZmxhZy51cmksXG4gICAgICAgIGxhc3RNb2RpZmllZDogbmV3IERhdGUoZ2V0UmVzcG9uc2VIZWFkZXIodGhpcywgXCJsYXN0LW1vZGlmaWVkXCIpKSxcbiAgICAgICAgcGFyc2luZ01vZGU6IGlzSFRNTCA/IFwiaHRtbFwiIDogXCJ4bWxcIixcbiAgICAgICAgY29va2llSmFyOiB7IHNldENvb2tpZVN5bmM6ICgpID0+IHVuZGVmaW5lZCwgZ2V0Q29va2llU3RyaW5nU3luYzogKCkgPT4gXCJcIiB9LFxuICAgICAgICBlbmNvZGluZyxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLl9vd25lckRvY3VtZW50Ll9wYXJzZU9wdGlvbnNcbiAgICAgIH0gfSk7XG4gICAgICBjb25zdCByZXNJbXBsID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIocmVzKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc0ltcGwuX2h0bWxUb0RvbS5hcHBlbmRIdG1sVG9Eb2N1bWVudChyZXNUZXh0LCByZXNJbXBsKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcHJvcGVydGllcy5yZXNwb25zZVhNTENhY2hlID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXMuY2xvc2UoKTtcbiAgICAgIHByb3BlcnRpZXMucmVzcG9uc2VYTUxDYWNoZSA9IHJlcztcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZ2V0IHJlc3BvbnNlVVJMKCkge1xuICAgICAgcmV0dXJuIHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXS5yZXNwb25zZVVSTDtcbiAgICB9XG5cbiAgICBnZXQgdGltZW91dCgpIHtcbiAgICAgIHJldHVybiB0aGlzW3hoclN5bWJvbHMuZmxhZ10udGltZW91dDtcbiAgICB9XG4gICAgc2V0IHRpbWVvdXQodmFsKSB7XG4gICAgICBjb25zdCBmbGFnID0gdGhpc1t4aHJTeW1ib2xzLmZsYWddO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcbiAgICAgIGlmIChmbGFnLnN5bmNocm9ub3VzKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfQUNDRVNTX0VSUik7XG4gICAgICB9XG4gICAgICBmbGFnLnRpbWVvdXQgPSB2YWw7XG4gICAgICBjbGVhclRpbWVvdXQocHJvcGVydGllcy50aW1lb3V0SWQpO1xuICAgICAgaWYgKHZhbCA+IDAgJiYgcHJvcGVydGllcy50aW1lb3V0Rm4pIHtcbiAgICAgICAgcHJvcGVydGllcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KFxuICAgICAgICAgIHByb3BlcnRpZXMudGltZW91dEZuLFxuICAgICAgICAgIE1hdGgubWF4KDAsIHZhbCAtICgobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gcHJvcGVydGllcy50aW1lb3V0U3RhcnQpKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcGVydGllcy50aW1lb3V0Rm4gPSBudWxsO1xuICAgICAgICBwcm9wZXJ0aWVzLnRpbWVvdXRTdGFydCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGdldCB3aXRoQ3JlZGVudGlhbHMoKSB7XG4gICAgICByZXR1cm4gdGhpc1t4aHJTeW1ib2xzLmZsYWddLndpdGhDcmVkZW50aWFscztcbiAgICB9XG4gICAgc2V0IHdpdGhDcmVkZW50aWFscyh2YWwpIHtcbiAgICAgIGNvbnN0IGZsYWcgPSB0aGlzW3hoclN5bWJvbHMuZmxhZ107XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpc1t4aHJTeW1ib2xzLnByb3BlcnRpZXNdO1xuICAgICAgaWYgKCEodGhpcy5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5VTlNFTlQgfHwgdGhpcy5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5PUEVORUQpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wZXJ0aWVzLnNlbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgICAgfVxuICAgICAgZmxhZy53aXRoQ3JlZGVudGlhbHMgPSB2YWw7XG4gICAgfVxuXG4gICAgYWJvcnQoKSB7XG4gICAgICBjb25zdCBmbGFnID0gdGhpc1t4aHJTeW1ib2xzLmZsYWddO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcblxuICAgICAgLy8gVGVybWluYXRlIHRoZSByZXF1ZXN0XG4gICAgICBjbGVhclRpbWVvdXQocHJvcGVydGllcy50aW1lb3V0SWQpO1xuICAgICAgcHJvcGVydGllcy50aW1lb3V0Rm4gPSBudWxsO1xuICAgICAgcHJvcGVydGllcy50aW1lb3V0U3RhcnQgPSAwO1xuXG4gICAgICBjb25zdCBjbGllbnQgPSBwcm9wZXJ0aWVzLmNsaWVudDtcbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgY2xpZW50LmFib3J0KCk7XG4gICAgICAgIHByb3BlcnRpZXMuY2xpZW50ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCh0aGlzLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0Lk9QRU5FRCAmJiBwcm9wZXJ0aWVzLnNlbmQpIHx8XG4gICAgICAgICAgdGhpcy5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEIHx8XG4gICAgICAgICAgdGhpcy5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5MT0FESU5HKSB7XG4gICAgICAgIC8vIFJ1biB0aGUgcmVxdWVzdCBlcnJvciBzdGVwcyBmb3IgZXZlbnQgYWJvcnRcbiAgICAgICAgcHJvcGVydGllcy5yZWFkeVN0YXRlID0gWE1MSHR0cFJlcXVlc3QuRE9ORTtcbiAgICAgICAgcHJvcGVydGllcy5zZW5kID0gZmFsc2U7XG5cbiAgICAgICAgcHJvcGVydGllcy5zdGF0dXMgPSAwO1xuICAgICAgICBwcm9wZXJ0aWVzLnN0YXR1c1RleHQgPSBcIlwiO1xuICAgICAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlQ2FjaGUgPSBwcm9wZXJ0aWVzLnJlc3BvbnNlVGV4dENhY2hlID0gcHJvcGVydGllcy5yZXNwb25zZVhNTENhY2hlID0gbnVsbDtcblxuICAgICAgICBpZiAoZmxhZy5zeW5jaHJvbm91cykge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLkFCT1JUX0VSUik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicmVhZHlzdGF0ZWNoYW5nZVwiKSk7XG5cbiAgICAgICAgLy8gVE9ETzogc3BlYyBzYXlzIHRoaXMgc2hvdWxkIG9ubHkgYmUgY2hlY2tpbmcgdXBsb2FkIGNvbXBsZXRlIGZsYWc/XG4gICAgICAgIGlmICghKGZsYWcubWV0aG9kID09PSBcIkhFQURcIiB8fCBmbGFnLm1ldGhvZCA9PT0gXCJHRVRcIikpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnVwbG9hZENvbXBsZXRlID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIFRPRE8gdXBsb2FkIGxpc3RlbmVyXG5cbiAgICAgICAgICB0aGlzLnVwbG9hZC5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwiYWJvcnRcIikpO1xuICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmFib3J0RXJyb3IpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gZG9jdW1lbnQgd2hhdCB0aGlzIGlzIGFib3V0IChoZXJlIGFuZCBiZWxvdylcbiAgICAgICAgICAgIHRoaXMudXBsb2FkLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJlcnJvclwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBsb2FkLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImFib3J0XCIpKTtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMuYWJvcnRFcnJvcikge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImVycm9yXCIpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xuICAgICAgICBwcm9wZXJ0aWVzLnJlYWR5U3RhdGUgPSBYTUxIdHRwUmVxdWVzdC5VTlNFTlQ7XG5cbiAgICAgICAgcHJvcGVydGllcy5zdGF0dXMgPSAwO1xuICAgICAgICBwcm9wZXJ0aWVzLnN0YXR1c1RleHQgPSBcIlwiO1xuICAgICAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlQ2FjaGUgPSBwcm9wZXJ0aWVzLnJlc3BvbnNlVGV4dENhY2hlID0gcHJvcGVydGllcy5yZXNwb25zZVhNTENhY2hlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcbiAgICAgIGNvbnN0IHJlYWR5U3RhdGUgPSB0aGlzLnJlYWR5U3RhdGU7XG4gICAgICBpZiAocmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuVU5TRU5UIHx8IHJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0Lk9QRU5FRCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzLnJlc3BvbnNlSGVhZGVycylcbiAgICAgICAgLmZpbHRlcihrZXkgPT4gcHJvcGVydGllcy5maWx0ZXJlZFJlc3BvbnNlSGVhZGVycy5pbmRleE9mKGtleSkgPT09IC0xKVxuICAgICAgICAubWFwKGtleSA9PiBba2V5LCBwcm9wZXJ0aWVzLnJlc3BvbnNlSGVhZGVyc1trZXldXS5qb2luKFwiOiBcIikpLmpvaW4oXCJcXHJcXG5cIik7XG4gICAgfVxuXG4gICAgZ2V0UmVzcG9uc2VIZWFkZXIoaGVhZGVyKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpc1t4aHJTeW1ib2xzLnByb3BlcnRpZXNdO1xuICAgICAgY29uc3QgcmVhZHlTdGF0ZSA9IHRoaXMucmVhZHlTdGF0ZTtcbiAgICAgIGlmIChyZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5VTlNFTlQgfHwgcmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuT1BFTkVEKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbGNIZWFkZXIgPSB0b0J5dGVTdHJpbmcoaGVhZGVyKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHByb3BlcnRpZXMuZmlsdGVyZWRSZXNwb25zZUhlYWRlcnMuZmluZChmaWx0ZXJlZCA9PiBsY0hlYWRlciA9PT0gZmlsdGVyZWQudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0UmVzcG9uc2VIZWFkZXIodGhpcywgbGNIZWFkZXIpO1xuICAgIH1cblxuICAgIG9wZW4obWV0aG9kLCB1cmksIGFzeW5jaHJvbm91cywgdXNlciwgcGFzc3dvcmQpIHtcbiAgICAgIGlmICghdGhpcy5fb3duZXJEb2N1bWVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgICB9XG4gICAgICBjb25zdCBmbGFnID0gdGhpc1t4aHJTeW1ib2xzLmZsYWddO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcbiAgICAgIGNvbnN0IGFyZ3VtZW50Q291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgZW5vdWdoIGFyZ3VtZW50cyAoZXhwZWN0ZWQgYXQgbGVhc3QgMilcIik7XG4gICAgICB9XG4gICAgICBtZXRob2QgPSB0b0J5dGVTdHJpbmcobWV0aG9kKTtcbiAgICAgIGlmICghdG9rZW5SZWdleHAudGVzdChtZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIpO1xuICAgICAgfVxuICAgICAgY29uc3QgdXBwZXJDYXNlTWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgICBpZiAoZm9yYmlkZGVuUmVxdWVzdE1ldGhvZHMuaGFzKHVwcGVyQ2FzZU1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uU0VDVVJJVFlfRVJSKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xpZW50ID0gcHJvcGVydGllcy5jbGllbnQ7XG4gICAgICBpZiAoY2xpZW50ICYmIHR5cGVvZiBjbGllbnQuYWJvcnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjbGllbnQuYWJvcnQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFsbG93ZWRSZXF1ZXN0TWV0aG9kcy5oYXModXBwZXJDYXNlTWV0aG9kKSkge1xuICAgICAgICBtZXRob2QgPSB1cHBlckNhc2VNZXRob2Q7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGFzeW5jaHJvbm91cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBmbGFnLnN5bmNocm9ub3VzID0gIWFzeW5jaHJvbm91cztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZsYWcuc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChmbGFnLnJlc3BvbnNlVHlwZSAmJiBmbGFnLnN5bmNocm9ub3VzKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfQUNDRVNTX0VSUik7XG4gICAgICB9XG4gICAgICBpZiAoZmxhZy5zeW5jaHJvbm91cyAmJiBmbGFnLnRpbWVvdXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9BQ0NFU1NfRVJSKTtcbiAgICAgIH1cbiAgICAgIGZsYWcubWV0aG9kID0gbWV0aG9kO1xuXG4gICAgICBsZXQgdXJsT2JqO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc29sZS5sb2codXJpLCBkb2N1bWVudEJhc2VVUkxTZXJpYWxpemVkKHRoaXMuX293bmVyRG9jdW1lbnQpKVxuICAgICAgICB1cmxPYmogPSBuZXcgVVJMKHVyaSwgZG9jdW1lbnRCYXNlVVJMU2VyaWFsaXplZCh0aGlzLl9vd25lckRvY3VtZW50KSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlciB8fCAocGFzc3dvcmQgJiYgIXVybE9iai51c2VybmFtZSkpIHtcbiAgICAgICAgZmxhZy5hdXRoID0ge1xuICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgcGFzczogcGFzc3dvcmRcbiAgICAgICAgfTtcbiAgICAgICAgdXJsT2JqLnVzZXJuYW1lID0gXCJcIjtcbiAgICAgICAgdXJsT2JqLnBhc3N3b3JkID0gXCJcIjtcbiAgICAgIH1cblxuICAgICAgZmxhZy51cmkgPSB1cmxPYmouaHJlZjtcbiAgICAgIGZsYWcucmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICAgIGZsYWcucHJlZmxpZ2h0ID0gZmFsc2U7XG5cbiAgICAgIHByb3BlcnRpZXMuc2VuZCA9IGZhbHNlO1xuICAgICAgcHJvcGVydGllcy5yZXF1ZXN0QnVmZmVyID0gbnVsbDtcbiAgICAgIHByb3BlcnRpZXMucmVxdWVzdENhY2hlID0gbnVsbDtcbiAgICAgIHByb3BlcnRpZXMuYWJvcnRFcnJvciA9IGZhbHNlO1xuICAgICAgcHJvcGVydGllcy5yZXNwb25zZVVSTCA9IFwiXCI7XG4gICAgICByZWFkeVN0YXRlQ2hhbmdlKHRoaXMsIFhNTEh0dHBSZXF1ZXN0Lk9QRU5FRCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGVNaW1lVHlwZShtaW1lKSB7XG4gICAgICBjb25zdCByZWFkeVN0YXRlID0gdGhpcy5yZWFkeVN0YXRlO1xuICAgICAgaWYgKHJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkxPQURJTkcgfHwgcmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgICB9XG4gICAgICBpZiAoIW1pbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uU1lOVEFYX0VSUik7XG4gICAgICB9XG4gICAgICBtaW1lID0gU3RyaW5nKG1pbWUpO1xuICAgICAgaWYgKCFwYXJzZUNvbnRlbnRUeXBlKG1pbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIpO1xuICAgICAgfVxuICAgICAgdGhpc1t4aHJTeW1ib2xzLmZsYWddLm1pbWVUeXBlID0gbWltZTtcbiAgICB9XG5cbiAgICBzZW5kKGJvZHkpIHtcbiAgICAgIGlmICghdGhpcy5fb3duZXJEb2N1bWVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgICB9XG4gICAgICBjb25zdCBmbGFnID0gdGhpc1t4aHJTeW1ib2xzLmZsYWddO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcblxuICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPT0gWE1MSHR0cFJlcXVlc3QuT1BFTkVEIHx8IHByb3BlcnRpZXMuc2VuZCkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbi5JTlZBTElEX1NUQVRFX0VSUik7XG4gICAgICB9XG5cbiAgICAgIHByb3BlcnRpZXMuYmVmb3JlU2VuZCA9IHRydWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZmxhZy5ib2R5ICYmXG4gICAgICAgICAgICBib2R5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGJvZHkgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGJvZHkgIT09IFwiXCIgJiZcbiAgICAgICAgICAgICEoZmxhZy5tZXRob2QgPT09IFwiSEVBRFwiIHx8IGZsYWcubWV0aG9kID09PSBcIkdFVFwiKSkge1xuICAgICAgICAgIGxldCBjb250ZW50VHlwZSA9IG51bGw7XG4gICAgICAgICAgbGV0IGVuY29kaW5nID0gbnVsbDtcbiAgICAgICAgICBpZiAoYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICBmbGFnLmZvcm1EYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGlkbFV0aWxzLmltcGxGb3JXcmFwcGVyKGJvZHkpLl9lbnRyaWVzKSB7XG4gICAgICAgICAgICAgIGxldCB2YWw7XG4gICAgICAgICAgICAgIGlmIChCbG9iLmlzSW1wbChlbnRyeS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gZW50cnkudmFsdWU7XG4gICAgICAgICAgICAgICAgdmFsID0ge1xuICAgICAgICAgICAgICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBibG9iLl9idWZmZXIsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBibG9iLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBibG9iLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGtub3duTGVuZ3RoOiBibG9iLnNpemVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbCA9IGVudHJ5O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvcm1EYXRhLnB1c2godmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZsYWcuYm9keSA9IGZvcm1EYXRhO1xuICAgICAgICAgICAgLy8gVE9ETyBjb250ZW50IHR5cGU7IHdoYXQgaXMgdGhlIGZvcm0gYm91bmRhcnk/XG4gICAgICAgICAgfSBlbHNlIGlmIChCbG9iLmlzKGJvZHkpKSB7XG4gICAgICAgICAgICBjb25zdCBibG9iID0gaWRsVXRpbHMuaW1wbEZvcldyYXBwZXIoYm9keSk7XG4gICAgICAgICAgICBmbGFnLmJvZHkgPSBibG9iLl9idWZmZXI7XG4gICAgICAgICAgICBpZiAoYmxvYi50eXBlICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gYmxvYi50eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBmbGFnLmJvZHkgPSBuZXcgQnVmZmVyKG5ldyBVaW50OEFycmF5KGJvZHkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBEb2N1bWVudC5pbnRlcmZhY2UpIHtcbiAgICAgICAgICAgIGlmIChib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZsYWcuYm9keSA9IGRvbVRvSHRtbChbYm9keV0pO1xuXG4gICAgICAgICAgICBlbmNvZGluZyA9IFwiVVRGLThcIjtcblxuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRCb2R5UGFyc2luZ01vZGUgPSBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcihib2R5KS5fcGFyc2luZ01vZGU7XG4gICAgICAgICAgICBjb250ZW50VHlwZSA9IGRvY3VtZW50Qm9keVBhcnNpbmdNb2RlID09PSBcImh0bWxcIiA/IFwidGV4dC9odG1sXCIgOiBcImFwcGxpY2F0aW9uL3htbFwiO1xuICAgICAgICAgICAgY29udGVudFR5cGUgKz0gXCI7Y2hhcnNldD1VVEYtOFwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGZsYWcuYm9keSA9IFN0cmluZyhib2R5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmxhZy5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThcIjtcbiAgICAgICAgICAgIGVuY29kaW5nID0gXCJVVEYtOFwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQ29udGVudFR5cGUgPSB4aHJVdGlscy5nZXRSZXF1ZXN0SGVhZGVyKGZsYWcucmVxdWVzdEhlYWRlcnMsIFwiY29udGVudC10eXBlXCIpO1xuICAgICAgICAgIGlmIChjb250ZW50VHlwZSAhPT0gbnVsbCAmJiBleGlzdGluZ0NvbnRlbnRUeXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICBmbGFnLnJlcXVlc3RIZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gY29udGVudFR5cGU7XG4gICAgICAgICAgfSBlbHNlIGlmIChleGlzdGluZ0NvbnRlbnRUeXBlICE9PSBudWxsICYmIGVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNvbnRlbnRUeXBlKGV4aXN0aW5nQ29udGVudFR5cGUpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBwYXJzZWQucGFyYW1ldGVyTGlzdFxuICAgICAgICAgICAgICAgIC5maWx0ZXIodiA9PiB2LmtleSAmJiB2LmtleS50b0xvd2VyQ2FzZSgpID09PSBcImNoYXJzZXRcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgd2hhdHdnRW5jb2RpbmcubGFiZWxUb05hbWUodi52YWx1ZSkgIT09IFwiVVRGLThcIilcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCh2ID0+IHtcbiAgICAgICAgICAgICAgICAgIHYudmFsdWUgPSBcIlVURi04XCI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHhoclV0aWxzLnVwZGF0ZVJlcXVlc3RIZWFkZXIoZmxhZy5yZXF1ZXN0SGVhZGVycywgXCJjb250ZW50LXR5cGVcIiwgcGFyc2VkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMuYmVmb3JlU2VuZCkge1xuICAgICAgICAgIHByb3BlcnRpZXMuYmVmb3JlU2VuZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uLklOVkFMSURfU1RBVEVfRVJSKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmxhZy5zeW5jaHJvbm91cykge1xuICAgICAgICBjb25zdCBmbGFnU3RyID0gSlNPTi5zdHJpbmdpZnkoZmxhZywgZnVuY3Rpb24gKGssIHYpIHtcbiAgICAgICAgICBpZiAodGhpcyA9PT0gZmxhZyAmJiBrID09PSBcInJlcXVlc3RNYW5hZ2VyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcyA9PT0gZmxhZyAmJiBrID09PSBcInBvb2xcIiAmJiB2KSB7XG4gICAgICAgICAgICByZXR1cm4geyBtYXhTb2NrZXRzOiB2Lm1heFNvY2tldHMgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXMgPSBzcGF3blN5bmMoXG4gICAgICAgICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgICAgICBbc3luY1dvcmtlckZpbGVdLFxuICAgICAgICAgIHsgaW5wdXQ6IGZsYWdTdHIgfVxuICAgICAgICApO1xuICAgICAgICBpZiAocmVzLnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuc3RkZXJyLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMuZXJyb3IpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcy5lcnJvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVzLmVycm9yID0gbmV3IEVycm9yKHJlcy5lcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IHJlcy5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UocmVzLnN0ZG91dC50b1N0cmluZygpLCAoaywgdikgPT4ge1xuICAgICAgICAgIGlmIChrID09PSBcInJlc3BvbnNlQnVmZmVyXCIgJiYgdiAmJiB2LmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKHYuZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChrID09PSBcImNvb2tpZUphclwiICYmIHYpIHtcbiAgICAgICAgICAgIHJldHVybiB0b3VnaC5Db29raWVKYXIuZGVzZXJpYWxpemVTeW5jKHYsIHRoaXMuX293bmVyRG9jdW1lbnQuX2Nvb2tpZUphci5zdG9yZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzcG9uc2UucHJvcGVydGllcy5yZWFkeVN0YXRlID0gWE1MSHR0cFJlcXVlc3QuTE9BRElORztcbiAgICAgICAgdGhpc1t4aHJTeW1ib2xzLnByb3BlcnRpZXNdID0gcmVzcG9uc2UucHJvcGVydGllcztcblxuICAgICAgICBpZiAocmVzcG9uc2UucHJvcGVydGllcy5lcnJvcikge1xuICAgICAgICAgIGRpc3BhdGNoRXJyb3IodGhpcyk7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uTkVUV09SS19FUlIsIHJlc3BvbnNlLnByb3BlcnRpZXMuZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQnVmZmVyID0gdGhpc1t4aHJTeW1ib2xzLnByb3BlcnRpZXNdLnJlc3BvbnNlQnVmZmVyO1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBnZXRSZXNwb25zZUhlYWRlcih0aGlzLCBcImNvbnRlbnQtbGVuZ3RoXCIpIHx8IFwiMFwiO1xuICAgICAgICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHBhcnNlSW50KGNvbnRlbnRMZW5ndGgpIHx8IHJlc3BvbnNlQnVmZmVyLmxlbmd0aDtcbiAgICAgICAgICBjb25zdCBwcm9ncmVzc09iaiA9IHsgbGVuZ3RoQ29tcHV0YWJsZTogZmFsc2UgfTtcbiAgICAgICAgICBpZiAoYnVmZmVyTGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBwcm9ncmVzc09iai50b3RhbCA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgIHByb2dyZXNzT2JqLmxvYWRlZCA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgIHByb2dyZXNzT2JqLmxlbmd0aENvbXB1dGFibGUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJwcm9ncmVzc1wiLCBwcm9ncmVzc09iaikpO1xuICAgICAgICAgIHJlYWR5U3RhdGVDaGFuZ2UodGhpcywgWE1MSHR0cFJlcXVlc3QuRE9ORSk7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwibG9hZFwiLCBwcm9ncmVzc09iaikpO1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImxvYWRlbmRcIiwgcHJvZ3Jlc3NPYmopKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcGVydGllcy5zZW5kID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2Fkc3RhcnRcIikpO1xuXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IHhoclV0aWxzLmNyZWF0ZUNsaWVudCh0aGlzKTtcblxuICAgICAgICBwcm9wZXJ0aWVzLmNsaWVudCA9IGNsaWVudDtcbiAgICAgICAgLy8gRm9yIG5ldyBjbGllbnQsIHJlc2V0IHRvdGFsUmVjZWl2ZWRDaHVua1NpemUgYW5kIGJ1ZmZlclN0ZXBTaXplXG4gICAgICAgIHByb3BlcnRpZXMudG90YWxSZWNlaXZlZENodW5rU2l6ZSA9IDA7XG4gICAgICAgIHByb3BlcnRpZXMuYnVmZmVyU3RlcFNpemUgPSAxICogMTAyNCAqIDEwMjQ7XG5cbiAgICAgICAgcHJvcGVydGllcy5vcmlnaW4gPSBmbGFnLm9yaWdpbjtcblxuICAgICAgICBjbGllbnQub24oXCJlcnJvclwiLCBlcnIgPT4ge1xuICAgICAgICAgIGNsaWVudC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICBwcm9wZXJ0aWVzLmVycm9yID0gZXJyO1xuICAgICAgICAgIGRpc3BhdGNoRXJyb3IodGhpcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNsaWVudC5vbihcInJlc3BvbnNlXCIsIHJlcyA9PiByZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzKSk7XG5cbiAgICAgICAgY2xpZW50Lm9uKFwicmVkaXJlY3RcIiwgKCkgPT4ge1xuICAgICAgICAgIGlmIChmbGFnLnByZWZsaWdodCkge1xuICAgICAgICAgICAgcHJvcGVydGllcy5lcnJvciA9IFwiUmVkaXJlY3QgYWZ0ZXIgcHJlZmxpZ2h0IGZvcmJpZGRlblwiO1xuICAgICAgICAgICAgZGlzcGF0Y2hFcnJvcih0aGlzKTtcbiAgICAgICAgICAgIGNsaWVudC5hYm9ydCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gY2xpZW50LnJlc3BvbnNlO1xuICAgICAgICAgIGNvbnN0IGRlc3RVcmxPYmogPSBuZXcgVVJMKHJlc3BvbnNlLnJlcXVlc3QuaGVhZGVycy5SZWZlcmVyKTtcblxuICAgICAgICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwocmVzcG9uc2UucmVxdWVzdC51cmkuaHJlZik7XG5cbiAgICAgICAgICBpZiAoZGVzdFVybE9iai5vcmlnaW4gIT09IHVybE9iai5vcmlnaW4gJiYgZGVzdFVybE9iai5vcmlnaW4gIT09IGZsYWcub3JpZ2luKSB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLm9yaWdpbiA9IFwibnVsbFwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc3BvbnNlLnJlcXVlc3QuaGVhZGVycy5PcmlnaW4gPSBwcm9wZXJ0aWVzLm9yaWdpbjtcblxuICAgICAgICAgIGlmIChmbGFnLm9yaWdpbiAhPT0gZGVzdFVybE9iai5vcmlnaW4gJiZcbiAgICAgICAgICAgICAgZGVzdFVybE9iai5wcm90b2NvbCAhPT0gXCJkYXRhOlwiKSB7XG4gICAgICAgICAgICBpZiAoIXZhbGlkQ09SU0hlYWRlcnModGhpcywgcmVzcG9uc2UsIGZsYWcsIHByb3BlcnRpZXMsIGZsYWcub3JpZ2luKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXJsT2JqLnVzZXJuYW1lIHx8IHVybE9iai5wYXNzd29yZCB8fCByZXNwb25zZS5yZXF1ZXN0LnVyaS5ocmVmLm1hdGNoKC9eaHR0cHM/OlxcL1xcLzpALykpIHtcbiAgICAgICAgICAgICAgcHJvcGVydGllcy5lcnJvciA9IFwiVXNlcmluZm8gZm9yYmlkZGVuIGluIGNvcnMgcmVkaXJlY3RcIjtcbiAgICAgICAgICAgICAgZGlzcGF0Y2hFcnJvcih0aGlzKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChib2R5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBib2R5ICE9PSBudWxsICYmXG4gICAgICAgICAgYm9keSAhPT0gXCJcIiAmJlxuICAgICAgICAgICEoZmxhZy5tZXRob2QgPT09IFwiSEVBRFwiIHx8IGZsYWcubWV0aG9kID09PSBcIkdFVFwiKSkge1xuICAgICAgICAgIHByb3BlcnRpZXMudXBsb2FkQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgICBzZXREaXNwYXRjaFByb2dyZXNzRXZlbnRzKHRoaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnRpZXMudXBsb2FkQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgcHJvcGVydGllcy50aW1lb3V0U3RhcnQgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgICAgICAgIHByb3BlcnRpZXMudGltZW91dEZuID0gKCkgPT4ge1xuICAgICAgICAgICAgY2xpZW50LmFib3J0KCk7XG4gICAgICAgICAgICBpZiAoISh0aGlzLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LlVOU0VOVCB8fFxuICAgICAgICAgICAgICAgICh0aGlzLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0Lk9QRU5FRCAmJiAhcHJvcGVydGllcy5zZW5kKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkpIHtcbiAgICAgICAgICAgICAgcHJvcGVydGllcy5zZW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgIGxldCBzdGF0ZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKCEoZmxhZy5tZXRob2QgPT09IFwiSEVBRFwiIHx8IGZsYWcubWV0aG9kID09PSBcIkdFVFwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJwcm9ncmVzc1wiKSk7XG4gICAgICAgICAgICAgICAgcmVhZHlTdGF0ZUNoYW5nZSh0aGlzLCBYTUxIdHRwUmVxdWVzdC5ET05FKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZC5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwidGltZW91dFwiKSk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWQuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImxvYWRlbmRcIikpO1xuICAgICAgICAgICAgICAgIHN0YXRlQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwicHJvZ3Jlc3NcIikpO1xuICAgICAgICAgICAgICBpZiAoIXN0YXRlQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIHJlYWR5U3RhdGVDaGFuZ2UodGhpcywgWE1MSHR0cFJlcXVlc3QuRE9ORSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwidGltZW91dFwiKSk7XG4gICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImxvYWRlbmRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvcGVydGllcy5yZWFkeVN0YXRlID0gWE1MSHR0cFJlcXVlc3QuVU5TRU5UO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcHJvcGVydGllcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHByb3BlcnRpZXMudGltZW91dEZuLCB0aGlzLnRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmbGFnLmJvZHkgPSB1bmRlZmluZWQ7XG4gICAgICBmbGFnLmZvcm1EYXRhID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIHZhbHVlKSB7XG4gICAgICBjb25zdCBmbGFnID0gdGhpc1t4aHJTeW1ib2xzLmZsYWddO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXNbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcblxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIjIgYXJndW1lbnRzIHJlcXVpcmVkIGZvciBzZXRSZXF1ZXN0SGVhZGVyXCIpO1xuICAgICAgfVxuICAgICAgaGVhZGVyID0gdG9CeXRlU3RyaW5nKGhlYWRlcik7XG4gICAgICB2YWx1ZSA9IHRvQnl0ZVN0cmluZyh2YWx1ZSk7XG5cbiAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgIT09IFhNTEh0dHBSZXF1ZXN0Lk9QRU5FRCB8fCBwcm9wZXJ0aWVzLnNlbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uSU5WQUxJRF9TVEFURV9FUlIpO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IG5vcm1hbGl6ZUhlYWRlclZhbHVlKHZhbHVlKTtcblxuICAgICAgaWYgKCF0b2tlblJlZ2V4cC50ZXN0KGhlYWRlcikgfHwgIWZpZWxkVmFsdWVSZWdleHAudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb24uU1lOVEFYX0VSUik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxjSGVhZGVyID0gaGVhZGVyLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChmb3JiaWRkZW5SZXF1ZXN0SGVhZGVycy5oYXMobGNIZWFkZXIpIHx8IGxjSGVhZGVyLnN0YXJ0c1dpdGgoXCJzZWMtXCIpIHx8IGxjSGVhZGVyLnN0YXJ0c1dpdGgoXCJwcm94eS1cIikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmxhZy5yZXF1ZXN0SGVhZGVycyk7XG4gICAgICBsZXQgbiA9IGtleXMubGVuZ3RoO1xuICAgICAgd2hpbGUgKG4tLSkge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW25dO1xuICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09IGxjSGVhZGVyKSB7XG4gICAgICAgICAgZmxhZy5yZXF1ZXN0SGVhZGVyc1trZXldICs9IFwiLFwiICsgdmFsdWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmbGFnLnJlcXVlc3RIZWFkZXJzW2xjSGVhZGVyXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBfb3duZXJEb2N1bWVudCgpIHtcbiAgICAgIHJldHVybiBpZGxVdGlscy5pbXBsRm9yV3JhcHBlcih3aW5kb3cuZG9jdW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXG4gIGFkZENvbnN0YW50cyhYTUxIdHRwUmVxdWVzdCwge1xuICAgIFVOU0VOVDogMCxcbiAgICBPUEVORUQ6IDEsXG4gICAgSEVBREVSU19SRUNFSVZFRDogMixcbiAgICBMT0FESU5HOiAzLFxuICAgIERPTkU6IDRcbiAgfSk7XG5cbiAgZnVuY3Rpb24gcmVhZHlTdGF0ZUNoYW5nZSh4aHIsIHJlYWR5U3RhdGUpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0geGhyW3hoclN5bWJvbHMucHJvcGVydGllc107XG4gICAgaWYgKHByb3BlcnRpZXMucmVhZHlTdGF0ZSA9PT0gcmVhZHlTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb3BlcnRpZXMucmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7XG5cbiAgICBjb25zdCByZWFkeVN0YXRlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnQoXCJyZWFkeXN0YXRlY2hhbmdlXCIpO1xuICAgIHhoci5kaXNwYXRjaEV2ZW50KHJlYWR5U3RhdGVDaGFuZ2VFdmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZWNlaXZlUmVzcG9uc2UoeGhyLCByZXNwb25zZSkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB4aHJbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcbiAgICBjb25zdCBmbGFnID0geGhyW3hoclN5bWJvbHMuZmxhZ107XG5cbiAgICBjb25zdCBzdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcblxuICAgIGlmIChmbGFnLnByZWZsaWdodCAmJiByZWRpcmVjdFN0YXR1c2VzLmhhcyhzdGF0dXNDb2RlKSkge1xuICAgICAgcHJvcGVydGllcy5lcnJvciA9IFwiUmVkaXJlY3QgYWZ0ZXIgcHJlZmxpZ2h0IGZvcmJpZGRlblwiO1xuICAgICAgZGlzcGF0Y2hFcnJvcih0aGlzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgYnl0ZU9mZnNldCA9IDA7XG5cbiAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgY29uc3QgZmlsdGVyZWRSZXNwb25zZUhlYWRlcnMgPSBbXTtcbiAgICBjb25zdCBoZWFkZXJNYXAgPSB7fTtcbiAgICBjb25zdCByYXdIZWFkZXJzID0gcmVzcG9uc2UucmF3SGVhZGVycztcbiAgICBjb25zdCBuID0gTnVtYmVyKHJhd0hlYWRlcnMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkgKz0gMikge1xuICAgICAgY29uc3QgayA9IHJhd0hlYWRlcnNbaV07XG4gICAgICBjb25zdCBrbCA9IGsudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHYgPSByYXdIZWFkZXJzW2kgKyAxXTtcbiAgICAgIGlmICh1bmlxdWVSZXNwb25zZUhlYWRlcnMuaGFzKGtsKSkge1xuICAgICAgICBpZiAoaGVhZGVyTWFwW2tsXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIGhlYWRlcnNbaGVhZGVyTWFwW2tsXV07XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVyc1trXSA9IHY7XG4gICAgICB9IGVsc2UgaWYgKGhlYWRlck1hcFtrbF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW2hlYWRlck1hcFtrbF1dICs9IFwiLCBcIiArIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWFkZXJzW2tdID0gdjtcbiAgICAgIH1cbiAgICAgIGhlYWRlck1hcFtrbF0gPSBrO1xuICAgIH1cblxuICAgIGNvbnN0IGRlc3RVcmxPYmogPSBuZXcgVVJMKHJlc3BvbnNlLnJlcXVlc3QudXJpLmhyZWYpO1xuICAgIGlmIChwcm9wZXJ0aWVzLm9yaWdpbiAhPT0gZGVzdFVybE9iai5vcmlnaW4gJiZcbiAgICAgICAgZGVzdFVybE9iai5wcm90b2NvbCAhPT0gXCJkYXRhOlwiKSB7XG4gICAgICBpZiAoIXZhbGlkQ09SU0hlYWRlcnMoeGhyLCByZXNwb25zZSwgZmxhZywgcHJvcGVydGllcywgcHJvcGVydGllcy5vcmlnaW4pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjZWhTdHIgPSByZXNwb25zZS5oZWFkZXJzW1wiYWNjZXNzLWNvbnRyb2wtZXhwb3NlLWhlYWRlcnNcIl07XG4gICAgICBjb25zdCBhY2VoID0gbmV3IFNldChhY2VoU3RyID8gYWNlaFN0ci50cmltKCkudG9Mb3dlckNhc2UoKS5zcGxpdChoZWFkZXJMaXN0U2VwYXJhdG9yUmVnZXhwKSA6IFtdKTtcbiAgICAgIGZvciAoY29uc3QgaGVhZGVyIGluIGhlYWRlcnMpIHtcbiAgICAgICAgY29uc3QgbGNIZWFkZXIgPSBoZWFkZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFjb3JzU2FmZVJlc3BvbnNlSGVhZGVycy5oYXMobGNIZWFkZXIpICYmICFhY2VoLmhhcyhsY0hlYWRlcikpIHtcbiAgICAgICAgICBmaWx0ZXJlZFJlc3BvbnNlSGVhZGVycy5wdXNoKGhlYWRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGhlYWRlciBpbiBoZWFkZXJzKSB7XG4gICAgICBjb25zdCBsY0hlYWRlciA9IGhlYWRlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGZvcmJpZGRlblJlc3BvbnNlSGVhZGVycy5oYXMobGNIZWFkZXIpKSB7XG4gICAgICAgIGZpbHRlcmVkUmVzcG9uc2VIZWFkZXJzLnB1c2goaGVhZGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlVVJMID0gZGVzdFVybE9iai5ocmVmO1xuXG4gICAgcHJvcGVydGllcy5zdGF0dXMgPSBzdGF0dXNDb2RlO1xuICAgIHByb3BlcnRpZXMuc3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXR1c01lc3NhZ2UgfHwgSFRUUF9TVEFUVVNfQ09ERVNbc3RhdHVzQ29kZV0gfHwgXCJcIjtcblxuICAgIHByb3BlcnRpZXMucmVzcG9uc2VIZWFkZXJzID0gaGVhZGVycztcbiAgICBwcm9wZXJ0aWVzLmZpbHRlcmVkUmVzcG9uc2VIZWFkZXJzID0gZmlsdGVyZWRSZXNwb25zZUhlYWRlcnM7XG5cbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gZ2V0UmVzcG9uc2VIZWFkZXIoeGhyLCBcImNvbnRlbnQtbGVuZ3RoXCIpIHx8IFwiMFwiO1xuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHBhcnNlSW50KGNvbnRlbnRMZW5ndGgpIHx8IDA7XG4gICAgY29uc3QgcHJvZ3Jlc3NPYmogPSB7IGxlbmd0aENvbXB1dGFibGU6IGZhbHNlIH07XG4gICAgbGV0IGxhc3RQcm9ncmVzc1JlcG9ydGVkO1xuICAgIGlmIChidWZmZXJMZW5ndGggIT09IDApIHtcbiAgICAgIHByb2dyZXNzT2JqLnRvdGFsID0gYnVmZmVyTGVuZ3RoO1xuICAgICAgcHJvZ3Jlc3NPYmoubG9hZGVkID0gMDtcbiAgICAgIHByb2dyZXNzT2JqLmxlbmd0aENvbXB1dGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBwcmUtYWxsb2NhdGUgYnVmZmVyLlxuICAgIHByb3BlcnRpZXMucmVzcG9uc2VCdWZmZXIgPSBCdWZmZXIuYWxsb2MocHJvcGVydGllcy5idWZmZXJTdGVwU2l6ZSk7XG4gICAgcHJvcGVydGllcy5yZXNwb25zZUNhY2hlID0gbnVsbDtcbiAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlVGV4dENhY2hlID0gbnVsbDtcbiAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlWE1MQ2FjaGUgPSBudWxsO1xuICAgIHJlYWR5U3RhdGVDaGFuZ2UoeGhyLCBYTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEKTtcblxuICAgIGlmICghcHJvcGVydGllcy5jbGllbnQpIHtcbiAgICAgIC8vIFRoZSByZXF1ZXN0IHdhcyBhYm9ydGVkIGluIHJlYWN0aW9uIHRvIHRoZSByZWFkeXN0YXRlY2hhbmdlIGV2ZW50LlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENhbid0IHVzZSB0aGUgY2xpZW50IHNpbmNlIHRoZSBjbGllbnQgZ2V0cyB0aGUgcG9zdC11bmd6aXBwaW5nIGJ5dGVzICh3aGljaCBjYW4gYmUgZ3JlYXRlciB0aGFuIHRoZVxuICAgIC8vIENvbnRlbnQtTGVuZ3RoKS5cbiAgICByZXNwb25zZS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xuICAgICAgYnl0ZU9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gICAgICBwcm9ncmVzc09iai5sb2FkZWQgPSBieXRlT2Zmc2V0O1xuICAgIH0pO1xuXG4gICAgcHJvcGVydGllcy5jbGllbnQub24oXCJkYXRhXCIsIGNodW5rID0+IHtcbiAgICAgIHByb3BlcnRpZXMudG90YWxSZWNlaXZlZENodW5rU2l6ZSArPSBjaHVuay5sZW5ndGg7XG4gICAgICBpZiAocHJvcGVydGllcy50b3RhbFJlY2VpdmVkQ2h1bmtTaXplID49IHByb3BlcnRpZXMuYnVmZmVyU3RlcFNpemUpIHtcbiAgICAgICAgcHJvcGVydGllcy5idWZmZXJTdGVwU2l6ZSAqPSAyO1xuICAgICAgICB3aGlsZSAocHJvcGVydGllcy50b3RhbFJlY2VpdmVkQ2h1bmtTaXplID49IHByb3BlcnRpZXMuYnVmZmVyU3RlcFNpemUpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzLmJ1ZmZlclN0ZXBTaXplICo9IDI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG1wQnVmID0gQnVmZmVyLmFsbG9jKHByb3BlcnRpZXMuYnVmZmVyU3RlcFNpemUpO1xuICAgICAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbcHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlciwgY2h1bmtdKTtcbiAgICAgICAgcHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlci5jb3B5KHRtcEJ1ZiwgMCwgMCwgcHJvcGVydGllcy5yZXNwb25zZUJ1ZmZlci5sZW5ndGgpO1xuICAgICAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlQnVmZmVyID0gdG1wQnVmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2h1bmsuY29weShwcm9wZXJ0aWVzLnJlc3BvbnNlQnVmZmVyLCBwcm9wZXJ0aWVzLnRvdGFsUmVjZWl2ZWRDaHVua1NpemUgLSBjaHVuay5sZW5ndGgsIDAsIGNodW5rLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlQ2FjaGUgPSBudWxsO1xuICAgICAgcHJvcGVydGllcy5yZXNwb25zZVRleHRDYWNoZSA9IG51bGw7XG4gICAgICBwcm9wZXJ0aWVzLnJlc3BvbnNlWE1MQ2FjaGUgPSBudWxsO1xuXG4gICAgICBpZiAocHJvcGVydGllcy5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5IRUFERVJTX1JFQ0VJVkVEKSB7XG4gICAgICAgIHByb3BlcnRpZXMucmVhZHlTdGF0ZSA9IFhNTEh0dHBSZXF1ZXN0LkxPQURJTkc7XG4gICAgICB9XG4gICAgICB4aHIuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJyZWFkeXN0YXRlY2hhbmdlXCIpKTtcblxuICAgICAgaWYgKHByb2dyZXNzT2JqLnRvdGFsICE9PSBwcm9ncmVzc09iai5sb2FkZWQgfHwgcHJvcGVydGllcy50b3RhbFJlY2VpdmVkQ2h1bmtTaXplID09PSBieXRlT2Zmc2V0KSB7XG4gICAgICAgIGlmIChsYXN0UHJvZ3Jlc3NSZXBvcnRlZCAhPT0gcHJvZ3Jlc3NPYmoubG9hZGVkKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIG5lY2Vzc2FyeSBjaGVjayBpbiB0aGUgZ3ppcCBjYXNlIHdoZXJlIHdlIGNhbiBiZSBnZXR0aW5nIG5ldyBkYXRhIGZyb20gdGhlIGNsaWVudCwgYXMgaXRcbiAgICAgICAgICAvLyB1bi1nemlwcywgYnV0IG5vIG5ldyBkYXRhIGhhcyBiZWVuIGdvdHRlbiBmcm9tIHRoZSByZXNwb25zZSwgc28gd2Ugc2hvdWxkIG5vdCBmaXJlIGEgcHJvZ3Jlc3MgZXZlbnQuXG4gICAgICAgICAgbGFzdFByb2dyZXNzUmVwb3J0ZWQgPSBwcm9ncmVzc09iai5sb2FkZWQ7XG4gICAgICAgICAgeGhyLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJwcm9ncmVzc1wiLCBwcm9ncmVzc09iaikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcHJvcGVydGllcy5jbGllbnQub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHByb3BlcnRpZXMudGltZW91dElkKTtcbiAgICAgIHByb3BlcnRpZXMudGltZW91dEZuID0gbnVsbDtcbiAgICAgIHByb3BlcnRpZXMudGltZW91dFN0YXJ0ID0gMDtcbiAgICAgIHByb3BlcnRpZXMuY2xpZW50ID0gbnVsbDtcbiAgICAgIHhoci5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwicHJvZ3Jlc3NcIiwgcHJvZ3Jlc3NPYmopKTtcbiAgICAgIHJlYWR5U3RhdGVDaGFuZ2UoeGhyLCBYTUxIdHRwUmVxdWVzdC5ET05FKTtcbiAgICAgIHhoci5kaXNwYXRjaEV2ZW50KG5ldyBQcm9ncmVzc0V2ZW50KFwibG9hZFwiLCBwcm9ncmVzc09iaikpO1xuICAgICAgeGhyLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIsIHByb2dyZXNzT2JqKSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXREaXNwYXRjaFByb2dyZXNzRXZlbnRzKHhocikge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB4aHJbeGhyU3ltYm9scy5wcm9wZXJ0aWVzXTtcbiAgICBjb25zdCBjbGllbnQgPSBwcm9wZXJ0aWVzLmNsaWVudDtcbiAgICBjb25zdCB1cGxvYWQgPSB4aHIudXBsb2FkO1xuXG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBsZXQgbGVuZ3RoQ29tcHV0YWJsZSA9IGZhbHNlO1xuICAgIGNvbnN0IGxlbmd0aCA9IGNsaWVudC5oZWFkZXJzICYmIHBhcnNlSW50KHhoclV0aWxzLmdldFJlcXVlc3RIZWFkZXIoY2xpZW50LmhlYWRlcnMsIFwiY29udGVudC1sZW5ndGhcIikpO1xuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIHRvdGFsID0gbGVuZ3RoO1xuICAgICAgbGVuZ3RoQ29tcHV0YWJsZSA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGluaXRQcm9ncmVzcyA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgICB0b3RhbCxcbiAgICAgIGxvYWRlZDogMFxuICAgIH07XG4gICAgdXBsb2FkLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2Fkc3RhcnRcIiwgaW5pdFByb2dyZXNzKSk7XG5cbiAgICBjbGllbnQub24oXCJyZXF1ZXN0XCIsIHJlcSA9PiB7XG4gICAgICByZXEub24oXCJyZXNwb25zZVwiLCAoKSA9PiB7XG4gICAgICAgIHByb3BlcnRpZXMudXBsb2FkQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IHtcbiAgICAgICAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgICAgICAgIHRvdGFsLFxuICAgICAgICAgIGxvYWRlZDogdG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgdXBsb2FkLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJwcm9ncmVzc1wiLCBwcm9ncmVzcykpO1xuICAgICAgICB1cGxvYWQuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImxvYWRcIiwgcHJvZ3Jlc3MpKTtcbiAgICAgICAgdXBsb2FkLmRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoXCJsb2FkZW5kXCIsIHByb2dyZXNzKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoRXJyb3IoeGhyKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHhoclt4aHJTeW1ib2xzLnByb3BlcnRpZXNdO1xuICAgIHJlYWR5U3RhdGVDaGFuZ2UoeGhyLCBYTUxIdHRwUmVxdWVzdC5ET05FKTtcbiAgICBpZiAoIXByb3BlcnRpZXMudXBsb2FkQ29tcGxldGUpIHtcbiAgICAgIHhoci51cGxvYWQuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImVycm9yXCIpKTtcbiAgICAgIHhoci51cGxvYWQuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImxvYWRlbmRcIikpO1xuICAgIH1cbiAgICB4aHIuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImVycm9yXCIpKTtcbiAgICB4aHIuZGlzcGF0Y2hFdmVudChuZXcgUHJvZ3Jlc3NFdmVudChcImxvYWRlbmRcIikpO1xuICAgIGlmICh4aHIuX293bmVyRG9jdW1lbnQpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHByb3BlcnRpZXMuZXJyb3IpO1xuICAgICAgZXJyb3IudHlwZSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblxuICAgICAgeGhyLl9vd25lckRvY3VtZW50Ll9kZWZhdWx0Vmlldy5fdmlydHVhbENvbnNvbGUuZW1pdChcImpzZG9tRXJyb3JcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkQ09SU0hlYWRlcnMoeGhyLCByZXNwb25zZSwgZmxhZywgcHJvcGVydGllcywgb3JpZ2luKSB7XG4gICAgY29uc3QgYWNhb1N0ciA9IHJlc3BvbnNlLmhlYWRlcnNbXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIl07XG4gICAgY29uc3QgYWNhbyA9IGFjYW9TdHIgPyBhY2FvU3RyLnRyaW0oKSA6IG51bGw7XG4gICAgaWYgKGFjYW8gIT09IFwiKlwiICYmIGFjYW8gIT09IG9yaWdpbikge1xuICAgICAgcHJvcGVydGllcy5lcnJvciA9IFwiQ3Jvc3Mgb3JpZ2luIFwiICsgb3JpZ2luICsgXCIgZm9yYmlkZGVuXCI7XG4gICAgICBkaXNwYXRjaEVycm9yKHhocik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFjYWNTdHIgPSByZXNwb25zZS5oZWFkZXJzW1wiYWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHNcIl07XG4gICAgY29uc3QgYWNhYyA9IGFjYWNTdHIgPyBhY2FjU3RyLnRyaW0oKSA6IG51bGw7XG4gICAgaWYgKGZsYWcud2l0aENyZWRlbnRpYWxzICYmIGFjYWMgIT09IFwidHJ1ZVwiKSB7XG4gICAgICBwcm9wZXJ0aWVzLmVycm9yID0gXCJDcmVkZW50aWFscyBmb3JiaWRkZW5cIjtcbiAgICAgIGRpc3BhdGNoRXJyb3IoeGhyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYWNhaFN0ciA9IHJlc3BvbnNlLmhlYWRlcnNbXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCJdO1xuICAgIGNvbnN0IGFjYWggPSBuZXcgU2V0KGFjYWhTdHIgPyBhY2FoU3RyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnNwbGl0KGhlYWRlckxpc3RTZXBhcmF0b3JSZWdleHApIDogW10pO1xuICAgIGNvbnN0IGZvcmJpZGRlbkhlYWRlcnMgPSBPYmplY3Qua2V5cyhmbGFnLnJlcXVlc3RIZWFkZXJzKS5maWx0ZXIoaGVhZGVyID0+IHtcbiAgICAgIGNvbnN0IGxjSGVhZGVyID0gaGVhZGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gIXNpbXBsZUhlYWRlcnMuaGFzKGxjSGVhZGVyKSAmJiAhYWNhaC5oYXMobGNIZWFkZXIpO1xuICAgIH0pO1xuICAgIGlmIChmb3JiaWRkZW5IZWFkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnRpZXMuZXJyb3IgPSBcIkhlYWRlcnMgXCIgKyBmb3JiaWRkZW5IZWFkZXJzICsgXCIgZm9yYmlkZGVuXCI7XG4gICAgICBkaXNwYXRjaEVycm9yKHhocik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9CeXRlU3RyaW5nKHZhbHVlKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIGlmICghL15bXFwwLVxceEZGXSokLy50ZXN0KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgQnl0ZVN0cmluZ1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q29udGVudFR5cGUoeGhyKSB7XG4gICAgY29uc3QgZmxhZyA9IHhoclt4aHJTeW1ib2xzLmZsYWddO1xuICAgIHJldHVybiBwYXJzZUNvbnRlbnRUeXBlKGZsYWcubWltZVR5cGUgfHwgZ2V0UmVzcG9uc2VIZWFkZXIoeGhyLCBcImNvbnRlbnQtdHlwZVwiKSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSZXNwb25zZUhlYWRlcih4aHIsIGxjSGVhZGVyKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHhoclt4aHJTeW1ib2xzLnByb3BlcnRpZXNdO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzLnJlc3BvbnNlSGVhZGVycyk7XG4gICAgbGV0IG4gPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAobi0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW25dO1xuICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBsY0hlYWRlcikge1xuICAgICAgICByZXR1cm4gcHJvcGVydGllcy5yZXNwb25zZUhlYWRlcnNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9eW1xceDA5XFx4MEFcXHgwRFxceDIwXSsvLCBcIlwiKS5yZXBsYWNlKC9bXFx4MDlcXHgwQVxceDBEXFx4MjBdKyQvLCBcIlwiKTtcbiAgfVxuXG4gIHJldHVybiBYTUxIdHRwUmVxdWVzdDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1uYW1lZC1wcm9wZXJ0aWVzXG5cbmNvbnN0IElTX05BTUVEX1BST1BFUlRZID0gU3ltYm9sKCk7XG5jb25zdCBUUkFDS0VSID0gU3ltYm9sKCk7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IE5hbWVkUHJvcGVydGllc1RyYWNrZXIgZm9yIHRoZSBnaXZlbiBgb2JqZWN0YC5cbiAqXG4gKiBOYW1lZCBwcm9wZXJ0aWVzIGFyZSB1c2VkIGluIERPTSB0byBsZXQgeW91IGxvb2t1cCAoZm9yIGV4YW1wbGUpIGEgTm9kZSBieSBhY2Nlc3NpbmcgYSBwcm9wZXJ0eSBvbiBhbm90aGVyIG9iamVjdC5cbiAqIEZvciBleGFtcGxlIGB3aW5kb3cuZm9vYCBtaWdodCByZXNvbHZlIHRvIGFuIGltYWdlIGVsZW1lbnQgd2l0aCBpZCBcImZvb1wiLlxuICpcbiAqIFRoaXMgdHJhY2tlciBpcyBhIHdvcmthcm91bmQgYmVjYXVzZSB0aGUgRVM2IFByb3h5IGZlYXR1cmUgaXMgbm90IHlldCBhdmFpbGFibGUuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZXJGdW5jIEVhY2ggdGltZSBhIHByb3BlcnR5IGlzIGFjY2Vzc2VkLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mXG4gKiAgICAgICAgdGhlIHByb3BlcnR5LiBUaGUgZnVuY3Rpb24gaXMgcGFzc2VkIDMgYXJndW1lbnRzOiAob2JqZWN0LCBuYW1lLCB2YWx1ZXMpLlxuICogICAgICAgIGBvYmplY3RgIGlzIGlkZW50aWNhbCB0byB0aGUgYG9iamVjdGAgcGFyYW1ldGVyIG9mIHRoaXMgYGNyZWF0ZWAgZnVuY3Rpb24uXG4gKiAgICAgICAgYG5hbWVgIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS5cbiAqICAgICAgICBgdmFsdWVzYCBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIFNldCB3aXRoIGFsbCB0aGUgdHJhY2tlZCB2YWx1ZXMgZm9yIHRoaXMgbmFtZS4gVGhlIG9yZGVyIG9mIHRoZXNlXG4gKiAgICAgICAgdmFsdWVzIGlzIHVuZGVmaW5lZC5cbiAqXG4gKiBAcmV0dXJucyB7TmFtZWRQcm9wZXJ0aWVzVHJhY2tlcn1cbiAqL1xuZXhwb3J0cy5jcmVhdGUgPSBmdW5jdGlvbiAob2JqZWN0LCByZXNvbHZlckZ1bmMpIHtcbiAgaWYgKG9iamVjdFtUUkFDS0VSXSkge1xuICAgIHRocm93IEVycm9yKFwiQSBOYW1lZFByb3BlcnRpZXNUcmFja2VyIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBmb3IgdGhpcyBvYmplY3RcIik7XG4gIH1cblxuICBjb25zdCB0cmFja2VyID0gbmV3IE5hbWVkUHJvcGVydGllc1RyYWNrZXIob2JqZWN0LCByZXNvbHZlckZ1bmMpO1xuICBvYmplY3RbVFJBQ0tFUl0gPSB0cmFja2VyO1xuICByZXR1cm4gdHJhY2tlcjtcbn07XG5cbmV4cG9ydHMuZ2V0ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICBpZiAoIW9iamVjdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdFtUUkFDS0VSXSB8fCBudWxsO1xufTtcblxuZnVuY3Rpb24gTmFtZWRQcm9wZXJ0aWVzVHJhY2tlcihvYmplY3QsIHJlc29sdmVyRnVuYykge1xuICB0aGlzLm9iamVjdCA9IG9iamVjdDtcbiAgdGhpcy5yZXNvbHZlckZ1bmMgPSByZXNvbHZlckZ1bmM7XG4gIHRoaXMudHJhY2tlZFZhbHVlcyA9IG5ldyBNYXAoKTsgLy8gTWFwPFNldDx2YWx1ZT4+XG59XG5cbmZ1bmN0aW9uIG5ld1Byb3BlcnR5RGVzY3JpcHRvcih0cmFja2VyLCBuYW1lKSB7XG4gIGNvbnN0IGVtcHR5U2V0ID0gbmV3IFNldCgpO1xuXG4gIGZ1bmN0aW9uIGdldFZhbHVlcygpIHtcbiAgICByZXR1cm4gdHJhY2tlci50cmFja2VkVmFsdWVzLmdldChuYW1lKSB8fCBlbXB0eVNldDtcbiAgfVxuXG4gIGNvbnN0IGRlc2NyaXB0b3IgPSB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRyYWNrZXIucmVzb2x2ZXJGdW5jKHRyYWNrZXIub2JqZWN0LCBuYW1lLCBnZXRWYWx1ZXMpO1xuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHJhY2tlci5vYmplY3QsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBkZXNjcmlwdG9yLmdldFtJU19OQU1FRF9QUk9QRVJUWV0gPSB0cnVlO1xuICBkZXNjcmlwdG9yLnNldFtJU19OQU1FRF9QUk9QRVJUWV0gPSB0cnVlO1xuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBUcmFjayBhIHZhbHVlIChlLmcuIGEgTm9kZSkgZm9yIGEgc3BlY2lmaWVkIG5hbWUuXG4gKlxuICogVmFsdWVzIGNhbiBiZSB0cmFja2VkIGVhZ2VybHksIHdoaWNoIG1lYW5zIHRoYXQgbm90IGFsbCB0cmFja2VkIHZhbHVlcyAqaGF2ZSogdG8gYXBwZWFyIGluIHRoZSBvdXRwdXQuIFRoZSByZXNvbHZlclxuICogZnVuY3Rpb24gdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSBvdXRwdXQgbWF5IGZpbHRlciB0aGUgdmFsdWUuXG4gKlxuICogVHJhY2tpbmcgdGhlIHNhbWUgYG5hbWVgIGFuZCBgdmFsdWVgIHBhaXIgbXVsdGlwbGUgdGltZXMgaGFzIG5vIGVmZmVjdFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cbk5hbWVkUHJvcGVydGllc1RyYWNrZXIucHJvdG90eXBlLnRyYWNrID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gIGlmIChuYW1lID09PSB1bmRlZmluZWQgfHwgbmFtZSA9PT0gbnVsbCB8fCBuYW1lID09PSBcIlwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHZhbHVlU2V0ID0gdGhpcy50cmFja2VkVmFsdWVzLmdldChuYW1lKTtcbiAgaWYgKCF2YWx1ZVNldCkge1xuICAgIHZhbHVlU2V0ID0gbmV3IFNldCgpO1xuICAgIHRoaXMudHJhY2tlZFZhbHVlcy5zZXQobmFtZSwgdmFsdWVTZXQpO1xuICB9XG5cbiAgdmFsdWVTZXQuYWRkKHZhbHVlKTtcblxuICBpZiAobmFtZSBpbiB0aGlzLm9iamVjdCkge1xuICAgIC8vIGFscmVhZHkgYWRkZWQgb3VyIGdldHRlciBvciBpdCBpcyBub3QgYSBuYW1lZCBwcm9wZXJ0eSAoZS5nLiBcImFkZEV2ZW50TGlzdGVuZXJcIilcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBkZXNjcmlwdG9yID0gbmV3UHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIG5hbWUpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5vYmplY3QsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcblxuLyoqXG4gKiBTdG9wIHRyYWNraW5nIGEgcHJldmlvdXNseSB0cmFja2VkIGBuYW1lYCAmIGB2YWx1ZWAgcGFpciwgc2VlIHRyYWNrKCkuXG4gKlxuICogVW50cmFja2luZyB0aGUgc2FtZSBgbmFtZWAgYW5kIGB2YWx1ZWAgcGFpciBtdWx0aXBsZSB0aW1lcyBoYXMgbm8gZWZmZWN0XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuTmFtZWRQcm9wZXJ0aWVzVHJhY2tlci5wcm90b3R5cGUudW50cmFjayA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkIHx8IG5hbWUgPT09IG51bGwgfHwgbmFtZSA9PT0gXCJcIikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlU2V0ID0gdGhpcy50cmFja2VkVmFsdWVzLmdldChuYW1lKTtcbiAgaWYgKCF2YWx1ZVNldCkge1xuICAgIC8vIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudFxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghdmFsdWVTZXQuZGVsZXRlKHZhbHVlKSkge1xuICAgIC8vIHRoZSB2YWx1ZSB3YXMgbm90IHByZXNlbnRcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodmFsdWVTZXQuc2l6ZSA9PT0gMCkge1xuICAgIHRoaXMudHJhY2tlZFZhbHVlcy5kZWxldGUobmFtZSk7XG4gIH1cblxuICBpZiAodmFsdWVTZXQuc2l6ZSA+IDApIHtcbiAgICAvLyBvdGhlciB2YWx1ZXMgZm9yIHRoaXMgbmFtZSBhcmUgc3RpbGwgcHJlc2VudFxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGF0IHRoaXMgcG9pbnQgdGhlcmUgYXJlIG5vIG1vcmUgdmFsdWVzLCBkZWxldGUgdGhlIHByb3BlcnR5XG5cbiAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcy5vYmplY3QsIG5hbWUpO1xuXG4gIGlmICghZGVzY3JpcHRvciB8fCAhZGVzY3JpcHRvci5nZXQgfHwgZGVzY3JpcHRvci5nZXRbSVNfTkFNRURfUFJPUEVSVFldICE9PSB0cnVlKSB7XG4gICAgLy8gTm90IGRlZmluZWQgYnkgTmFtZWRQcm9wZXJ0eVRyYWNrZXJcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBub3RlOiBkZWxldGUgcHV0cyB0aGUgb2JqZWN0IGluIGRpY3Rpb25hcnkgbW9kZS5cbiAgLy8gaWYgdGhpcyB0dXJucyBvdXQgdG8gYmUgYSBwZXJmb3JtYW5jZSBpc3N1ZSwgbWF5YmUgYWRkOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL2Jsb2IvM2UzNmZjODYxYWM1Nzk1MTkzYmEzNzkzNTMzM2ViNmVmMzcxNjM5MC9zcmMvdXRpbC5qcyNMMTc3XG4gIGRlbGV0ZSB0aGlzLm9iamVjdFtuYW1lXTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbmNvbnN0IHdoYXR3Z1VSTCA9IHJlcXVpcmUoXCJ3aGF0d2ctdXJsXCIpO1xuY29uc3QgcXVlcnlzdHJpbmcgPSByZXF1aXJlKFwicXVlcnlzdHJpbmdcIik7XG5jb25zdCBkb21TeW1ib2xUcmVlID0gcmVxdWlyZShcIi4vbGl2aW5nL2hlbHBlcnMvaW50ZXJuYWwtY29uc3RhbnRzXCIpLmRvbVN5bWJvbFRyZWU7XG5jb25zdCBTWU1CT0xfVFJFRV9QT1NJVElPTiA9IHJlcXVpcmUoXCJzeW1ib2wtdHJlZVwiKS5UcmVlUG9zaXRpb247XG5jb25zdCBwYXJzZVVSTFRvUmVzdWx0aW5nVVJMUmVjb3JkID0gcmVxdWlyZShcIi4vbGl2aW5nL2hlbHBlcnMvZG9jdW1lbnQtYmFzZS11cmxcIikucGFyc2VVUkxUb1Jlc3VsdGluZ1VSTFJlY29yZDtcblxuZXhwb3J0cy50b0ZpbGVVcmwgPSBmdW5jdGlvbiAoZmlsZU5hbWUpIHtcbiAgLy8gQmV5b25kIGp1c3QgdGhlIGBwYXRoLnJlc29sdmVgLCB0aGlzIGlzIG1vc3RseSBmb3IgdGhlIGJlbmVmaXQgb2YgV2luZG93cyxcbiAgLy8gd2hlcmUgd2UgbmVlZCB0byBjb252ZXJ0IFwiXFxcIiB0byBcIi9cIiBhbmQgYWRkIGFuIGV4dHJhIFwiL1wiIHByZWZpeCBiZWZvcmUgdGhlXG4gIC8vIGRyaXZlIGxldHRlci5cbiAgbGV0IHBhdGhuYW1lID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGZpbGVOYW1lKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbiAgaWYgKHBhdGhuYW1lWzBdICE9PSBcIi9cIikge1xuICAgIHBhdGhuYW1lID0gXCIvXCIgKyBwYXRobmFtZTtcbiAgfVxuXG4gIC8vIHBhdGggbWlnaHQgY29udGFpbiBzcGFjZXMsIHNvIGNvbnZlcnQgdGhvc2UgdG8gJTIwXG4gIHJldHVybiBcImZpbGU6Ly9cIiArIGVuY29kZVVSSShwYXRobmFtZSk7XG59O1xuXG4vKipcbiAqIERlZmluZSBhIGdldHRlciBvbiBhbiBvYmplY3RcbiAqXG4gKiBUaGlzIG1ldGhvZCByZXBsYWNlcyBhbnkgZXhpc3RpbmcgZ2V0dGVyIGJ1dCBsZWF2ZXMgc2V0dGVycyBpbiBwbGFjZS5cbiAqXG4gKiAtIGBvYmplY3RgIHtPYmplY3R9IHRoZSBvYmplY3QgdG8gZGVmaW5lIHRoZSBnZXR0ZXIgb25cbiAqIC0gYHByb3BlcnR5YCB7U3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgZ2V0dGVyXG4gKiAtIGBnZXR0ZXJGbmAge0Z1bmN0aW9ufSB0aGUgZ2V0dGVyXG4gKi9cbmV4cG9ydHMuZGVmaW5lR2V0dGVyID0gZnVuY3Rpb24gZGVmaW5lR2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGdldHRlckZuKSB7XG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpIHx8IHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxuICB9O1xuXG4gIGRlc2NyaXB0b3IuZ2V0ID0gZ2V0dGVyRm47XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpO1xufTtcblxuLyoqXG4gKiBEZWZpbmUgYSBzZXQgb2YgcHJvcGVydGllcyBvbiBhbiBvYmplY3QsIGJ5IGNvcHlpbmcgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzXG4gKiBmcm9tIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gKlxuICogLSBgb2JqZWN0YCB7T2JqZWN0fSB0aGUgdGFyZ2V0IG9iamVjdFxuICogLSBgcHJvcGVydGllc2Age09iamVjdH0gdGhlIHNvdXJjZSBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydHkgZGVzY3JpcHRvcnNcbiAqL1xuZXhwb3J0cy5kZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUob2JqZWN0LCBwcm9wZXJ0aWVzKSB7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm9wZXJ0aWVzKSkge1xuICAgIGNvbnN0IHByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm9wZXJ0aWVzLCBuYW1lKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBuYW1lLCBwcm9wRGVzYyk7XG4gIH1cbn07XG5cbi8qKlxuICogRGVmaW5lIGEgbGlzdCBvZiBjb25zdGFudHMgb24gYSBjb25zdHJ1Y3RvciBhbmQgaXRzIC5wcm90b3R5cGVcbiAqXG4gKiAtIGBDb25zdHJ1Y3RvcmAge0Z1bmN0aW9ufSB0aGUgY29uc3RydWN0b3IgdG8gZGVmaW5lIHRoZSBjb25zdGFudHMgb25cbiAqIC0gYHByb3BlcnR5TWFwYCB7T2JqZWN0fSAga2V5L3ZhbHVlIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGRlZmluZVxuICovXG5leHBvcnRzLmFkZENvbnN0YW50cyA9IGZ1bmN0aW9uIGFkZENvbnN0YW50cyhDb25zdHJ1Y3RvciwgcHJvcGVydHlNYXApIHtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCkge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvcGVydHlNYXBbcHJvcGVydHldO1xuICAgIGFkZENvbnN0YW50KENvbnN0cnVjdG9yLCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIGFkZENvbnN0YW50KENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcGVydHksIHZhbHVlKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYWRkQ29uc3RhbnQob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHtcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIHZhbHVlXG4gIH0pO1xufVxuXG5sZXQgbWVtb2l6ZVF1ZXJ5VHlwZUNvdW50ZXIgPSAwO1xuXG4vKipcbiAqIFJldHVybnMgYSB2ZXJzaW9uIG9mIGEgbWV0aG9kIHRoYXQgbWVtb2l6ZXMgc3BlY2lmaWMgdHlwZXMgb2YgY2FsbHMgb24gdGhlIG9iamVjdFxuICpcbiAqIC0gYGZuYCB7RnVuY3Rpb259IHRoZSBtZXRob2QgdG8gYmUgbWVtb3ppZWRcbiAqL1xuZXhwb3J0cy5tZW1vaXplUXVlcnkgPSBmdW5jdGlvbiBtZW1vaXplUXVlcnkoZm4pIHtcbiAgLy8gT25seSBtZW1vaXplIHF1ZXJ5IGZ1bmN0aW9ucyB3aXRoIGFyaXR5IDw9IDJcbiAgaWYgKGZuLmxlbmd0aCA+IDIpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBjb25zdCB0eXBlID0gbWVtb2l6ZVF1ZXJ5VHlwZUNvdW50ZXIrKztcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fbWVtb2l6ZWRRdWVyaWVzKSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX21lbW9pemVkUXVlcmllc1t0eXBlXSkge1xuICAgICAgdGhpcy5fbWVtb2l6ZWRRdWVyaWVzW3R5cGVdID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgICBsZXQga2V5O1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmd1bWVudHNbMF0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGtleSA9IGFyZ3VtZW50c1swXTtcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYXJndW1lbnRzWzFdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBrZXkgPSBhcmd1bWVudHNbMF0gKyBcIjo6XCIgKyBhcmd1bWVudHNbMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIGlmICghKGtleSBpbiB0aGlzLl9tZW1vaXplZFF1ZXJpZXNbdHlwZV0pKSB7XG4gICAgICB0aGlzLl9tZW1vaXplZFF1ZXJpZXNbdHlwZV1ba2V5XSA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9tZW1vaXplZFF1ZXJpZXNbdHlwZV1ba2V5XTtcbiAgfTtcbn07XG5cbmV4cG9ydHMucmVmbGVjdFVSTEF0dHJpYnV0ZSA9IChlbGVtZW50SW1wbCwgY29udGVudEF0dHJpYnV0ZU5hbWUpID0+IHtcbiAgY29uc3QgYXR0cmlidXRlVmFsdWUgPSBlbGVtZW50SW1wbC5nZXRBdHRyaWJ1dGUoY29udGVudEF0dHJpYnV0ZU5hbWUpO1xuICBpZiAoYXR0cmlidXRlVmFsdWUgPT09IG51bGwgfHwgYXR0cmlidXRlVmFsdWUgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHVybFJlY29yZCA9IHBhcnNlVVJMVG9SZXN1bHRpbmdVUkxSZWNvcmQoYXR0cmlidXRlVmFsdWUsIGVsZW1lbnRJbXBsLl9vd25lckRvY3VtZW50KTtcbiAgaWYgKHVybFJlY29yZCA9PT0gXCJmYWlsdXJlXCIpIHtcbiAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHdoYXR3Z1VSTC5zZXJpYWxpemVVUkwodXJsUmVjb3JkKTtcbn07XG5cbmZ1bmN0aW9uIGlzVmFsaWRBYnNvbHV0ZVVSTChzdHIpIHtcbiAgcmV0dXJuIHdoYXR3Z1VSTC5wYXJzZVVSTChzdHIpICE9PSBcImZhaWx1cmVcIjtcbn1cblxuZXhwb3J0cy5pc1ZhbGlkVGFyZ2V0T3JpZ2luID0gZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyID09PSBcIipcIiB8fCBzdHIgPT09IFwiL1wiIHx8IGlzVmFsaWRBYnNvbHV0ZVVSTChzdHIpO1xufTtcblxuZXhwb3J0cy5zaW11bHRhbmVvdXNJdGVyYXRvcnMgPSBmdW5jdGlvbiogKGZpcnN0LCBzZWNvbmQpIHtcbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGZpcnN0UmVzdWx0ID0gZmlyc3QubmV4dCgpO1xuICAgIGNvbnN0IHNlY29uZFJlc3VsdCA9IHNlY29uZC5uZXh0KCk7XG5cbiAgICBpZiAoZmlyc3RSZXN1bHQuZG9uZSAmJiBzZWNvbmRSZXN1bHQuZG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHlpZWxkIFtcbiAgICAgIGZpcnN0UmVzdWx0LmRvbmUgPyBudWxsIDogZmlyc3RSZXN1bHQudmFsdWUsXG4gICAgICBzZWNvbmRSZXN1bHQuZG9uZSA/IG51bGwgOiBzZWNvbmRSZXN1bHQudmFsdWVcbiAgICBdO1xuICB9XG59O1xuXG5leHBvcnRzLnRyZWVPcmRlclNvcnRlciA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIGNvbnN0IGNvbXBhcmUgPSBkb21TeW1ib2xUcmVlLmNvbXBhcmVUcmVlUG9zaXRpb24oYSwgYik7XG5cbiAgaWYgKGNvbXBhcmUgJiBTWU1CT0xfVFJFRV9QT1NJVElPTi5QUkVDRURJTkcpIHsgLy8gYiBpcyBwcmVjZWRpbmcgYVxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYgKGNvbXBhcmUgJiBTWU1CT0xfVFJFRV9QT1NJVElPTi5GT0xMT1dJTkcpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvLyBkaXNjb25uZWN0ZWQgb3IgZXF1YWw6XG4gIHJldHVybiAwO1xufTtcblxuZXhwb3J0cy5sZW5ndGhGcm9tUHJvcGVydGllcyA9IGZ1bmN0aW9uIChhcnJheUxpa2UpIHtcbiAgbGV0IG1heCA9IC0xO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyYXlMaWtlKTtcbiAgY29uc3QgaGlnaGVzdEtleUluZGV4ID0ga2V5cy5sZW5ndGggLSAxO1xuXG4gIC8vIEFidXNlcyBhIHY4IGltcGxlbWVudGF0aW9uIGRldGFpbCBmb3IgYSB2ZXJ5IGZhc3QgY2FzZVxuICAvLyAoaWYgdGhpcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgY2hhbmdlcywgdGhpcyBtZXRob2Qgd2lsbCBzdGlsbFxuICAvLyAgcmV0dXJuIGNvcnJlY3QgcmVzdWx0cylcbiAgLyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG4gIGlmIChoaWdoZXN0S2V5SW5kZXggPT0ga2V5c1toaWdoZXN0S2V5SW5kZXhdKSB7IC8vIG5vdCA9PT1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuICAgIHJldHVybiBrZXlzLmxlbmd0aDtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBoaWdoZXN0S2V5SW5kZXg7IGkgPj0gMDsgLS1pKSB7XG4gICAgY29uc3QgYXNOdW1iZXIgPSBOdW1iZXIoa2V5c1tpXSk7XG5cbiAgICBpZiAoIU51bWJlci5pc05hTihhc051bWJlcikgJiYgYXNOdW1iZXIgPiBtYXgpIHtcbiAgICAgIG1heCA9IGFzTnVtYmVyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWF4ICsgMTtcbn07XG5cbmNvbnN0IGJhc2U2NFJlZ2V4cCA9IC9eKD86W0EtWjAtOSsvXXs0fSkqKD86W0EtWjAtOSsvXXsyfT09fFtBLVowLTkrL117M309fFtBLVowLTkrL117NH0pJC9pO1xuXG5leHBvcnRzLnBhcnNlRGF0YVVybCA9IGZ1bmN0aW9uIHBhcnNlRGF0YVVybCh1cmwpIHtcbiAgY29uc3QgdXJsUGFydHMgPSB1cmwubWF0Y2goL15kYXRhOiguKz8pKD86OyhiYXNlNjQpKT8sKC4qKSQvKTtcbiAgbGV0IGJ1ZmZlcjtcbiAgaWYgKHVybFBhcnRzWzJdID09PSBcImJhc2U2NFwiKSB7XG4gICAgaWYgKHVybFBhcnRzWzNdICYmICFiYXNlNjRSZWdleHAudGVzdCh1cmxQYXJ0c1szXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBhIGJhc2U2NCBzdHJpbmdcIik7XG4gICAgfVxuICAgIGJ1ZmZlciA9IG5ldyBCdWZmZXIodXJsUGFydHNbM10sIFwiYmFzZTY0XCIpO1xuICB9IGVsc2Uge1xuICAgIGJ1ZmZlciA9IG5ldyBCdWZmZXIocXVlcnlzdHJpbmcudW5lc2NhcGUodXJsUGFydHNbM10pKTtcbiAgfVxuICByZXR1cm4geyBidWZmZXIsIHR5cGU6IHVybFBhcnRzWzFdIH07XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBnbG9iYWwtcmVxdWlyZSAqL1xuXG5leHBvcnRzLkNhbnZhcyA9IG51bGw7XG5bXCJjYW52YXNcIiwgXCJjYW52YXMtcHJlYnVpbHRcIl0uc29tZShtb2R1bGVOYW1lID0+IHtcbiAgdHJ5IHtcbiAgICBleHBvcnRzLkNhbnZhcyA9IHJlcXVpcmUobW9kdWxlTmFtZSk7XG4gICAgaWYgKHR5cGVvZiBleHBvcnRzLkNhbnZhcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAvLyBJbiBicm93c2VyaWZ5LCB0aGUgcmVxdWlyZSB3aWxsIHN1Y2NlZWQgYnV0IHJldHVybiBhbiBlbXB0eSBvYmplY3RcbiAgICAgIGV4cG9ydHMuQ2FudmFzID0gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBleHBvcnRzLkNhbnZhcyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGV4cG9ydHMuQ2FudmFzICE9PSBudWxsO1xufSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCJldmVudHNcIikuRXZlbnRFbWl0dGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFZpcnR1YWxDb25zb2xlIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMub24oXCJlcnJvclwiLCAoKSA9PiB7XG4gICAgICAvLyBJZiBcImVycm9yXCIgZXZlbnQgaGFzIG5vIGxpc3RlbmVycyxcbiAgICAgIC8vIEV2ZW50RW1pdHRlciB0aHJvd3MgYW4gZXhjZXB0aW9uXG4gICAgfSk7XG4gIH1cblxuICBzZW5kVG8oYW55Q29uc29sZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBPYmplY3Qua2V5cyhhbnlDb25zb2xlKSkge1xuICAgICAgaWYgKHR5cGVvZiBhbnlDb25zb2xlW21ldGhvZF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBmdW5jdGlvbiBvbk1ldGhvZENhbGwoKSB7XG4gICAgICAgICAgYW55Q29uc29sZVttZXRob2RdKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbihtZXRob2QsIG9uTWV0aG9kQ2FsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLm9taXRKU0RPTUVycm9ycykge1xuICAgICAgdGhpcy5vbihcImpzZG9tRXJyb3JcIiwgZSA9PiBhbnlDb25zb2xlLmVycm9yKGUuc3RhY2ssIGUuZGV0YWlsKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy1mdW5jICovXG5jb25zdCBhY29ybiA9IHJlcXVpcmUoXCJhY29yblwiKTtcbmNvbnN0IGZpbmRHbG9iYWxzID0gcmVxdWlyZShcImFjb3JuLWdsb2JhbHNcIik7XG5jb25zdCBlc2NvZGVnZW4gPSByZXF1aXJlKFwiZXNjb2RlZ2VuXCIpO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhlIGRlZmF1bHQgYnJvd3NlcmlmeSB2bSBzaGltIGJlY2F1c2UgaXQgZG9lc24ndCB3b3JrIGluIGEgd2ViIHdvcmtlci5cblxuLy8gRnJvbSBFUyBzcGVjIHRhYmxlIG9mIGNvbnRlbnRzLiBBbHNvLCBkb24ndCBmb3JnZXQgdGhlIEFubmV4IEIgYWRkaXRpb25zLlxuLy8gSWYgc29tZW9uZSBmZWVscyBhbWJpdGlvdXMgbWF5YmUgbWFrZSB0aGlzIGludG8gYW4gbnBtIHBhY2thZ2UuXG5jb25zdCBidWlsdEluQ29uc3RzID0gW1wiSW5maW5pdHlcIiwgXCJOYU5cIiwgXCJ1bmRlZmluZWRcIl07XG5jb25zdCBvdGhlckJ1aWx0SW5zID0gW1wiaXNGaW5pdGVcIiwgXCJpc05hTlwiLCBcInBhcnNlRmxvYXRcIiwgXCJwYXJzZUludFwiLCBcImRlY29kZVVSSVwiLCBcImRlY29kZVVSSUNvbXBvbmVudFwiLFxuICBcImVuY29kZVVSSVwiLCBcImVuY29kZVVSSUNvbXBvbmVudFwiLCBcIkFycmF5XCIsIFwiQXJyYXlCdWZmZXJcIiwgXCJCb29sZWFuXCIsIFwiRGF0YVZpZXdcIiwgXCJEYXRlXCIsIFwiRXJyb3JcIiwgXCJFdmFsRXJyb3JcIixcbiAgXCJGbG9hdDMyQXJyYXlcIiwgXCJGbG9hdDY0QXJyYXlcIiwgXCJGdW5jdGlvblwiLCBcIkludDhBcnJheVwiLCBcIkludDE2QXJyYXlcIiwgXCJJbnQzMkFycmF5XCIsIFwiTWFwXCIsIFwiTnVtYmVyXCIsIFwiT2JqZWN0XCIsXG4gIFwiUHJveHlcIiwgXCJQcm9taXNlXCIsIFwiUmFuZ2VFcnJvclwiLCBcIlJlZmVyZW5jZUVycm9yXCIsIFwiUmVnRXhwXCIsIFwiU2V0XCIsIFwiU3RyaW5nXCIsIFwiU3ltYm9sXCIsIFwiU3ludGF4RXJyb3JcIiwgXCJUeXBlRXJyb3JcIixcbiAgXCJVaW50OEFycmF5XCIsIFwiVWludDhDbGFtcGVkQXJyYXlcIiwgXCJVaW50MTZBcnJheVwiLCBcIlVpbnQzMkFycmF5XCIsIFwiVVJJRXJyb3JcIiwgXCJXZWFrTWFwXCIsIFwiV2Vha1NldFwiLCBcIkpTT05cIiwgXCJNYXRoXCIsXG4gIFwiUmVmbGVjdFwiLCBcImVzY2FwZVwiLCBcInVuZXNjYXBlXCJdO1xuXG5leHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbiAoc2FuZGJveCkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2FuZGJveCwgXCJfX2lzVk1TaGltQ29udGV4dFwiLCB7XG4gICAgdmFsdWU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pO1xuXG4gIGZvciAoY29uc3QgYnVpbHRJbiBvZiBidWlsdEluQ29uc3RzKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNhbmRib3gsIGJ1aWx0SW4sIHtcbiAgICAgIHZhbHVlOiBnbG9iYWxbYnVpbHRJbl0sXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgYnVpbHRJbiBvZiBvdGhlckJ1aWx0SW5zKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNhbmRib3gsIGJ1aWx0SW4sIHtcbiAgICAgIHZhbHVlOiBnbG9iYWxbYnVpbHRJbl0sXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2FuZGJveCwgXCJldmFsXCIsIHtcbiAgICB2YWx1ZShjb2RlKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy5ydW5JbkNvbnRleHQoY29kZSwgc2FuZGJveCk7XG4gICAgfSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2VcbiAgfSk7XG59O1xuXG5leHBvcnRzLmlzQ29udGV4dCA9IGZ1bmN0aW9uIChzYW5kYm94KSB7XG4gIHJldHVybiBzYW5kYm94Ll9faXNWTVNoaW1Db250ZXh0O1xufTtcblxuZXhwb3J0cy5ydW5JbkNvbnRleHQgPSBmdW5jdGlvbiAoY29kZSwgY29udGV4dGlmaWVkU2FuZGJveCwgb3B0aW9ucykge1xuICBpZiAoY29kZSA9PT0gXCJ0aGlzXCIpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGR1cmluZyB3aW5kb3cgY3JlYXRpb24uXG4gICAgcmV0dXJuIGNvbnRleHRpZmllZFNhbmRib3g7XG4gIH1cblxuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgY29uc3QgY29tbWVudHMgPSBbXTtcbiAgY29uc3QgdG9rZW5zID0gW107XG4gIGNvbnN0IGFzdCA9IGFjb3JuLnBhcnNlKGNvZGUsIHtcbiAgICBhbGxvd1JldHVybk91dHNpZGVGdW5jdGlvbjogdHJ1ZSxcbiAgICByYW5nZXM6IHRydWUsXG4gICAgLy8gY29sbGVjdCBjb21tZW50cyBpbiBFc3ByaW1hJ3MgZm9ybWF0XG4gICAgb25Db21tZW50OiBjb21tZW50cyxcbiAgICAvLyBjb2xsZWN0IHRva2VuIHJhbmdlc1xuICAgIG9uVG9rZW46IHRva2Vuc1xuICB9KTtcblxuICAvLyBtYWtlIHN1cmUgd2Uga2VlcCBjb21tZW50c1xuICBlc2NvZGVnZW4uYXR0YWNoQ29tbWVudHMoYXN0LCBjb21tZW50cywgdG9rZW5zKTtcblxuICBjb25zdCBnbG9iYWxzID0gZmluZEdsb2JhbHMoYXN0KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iYWxzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGdsb2JhbHNbaV0ubmFtZSA9PT0gXCJ3aW5kb3dcIiB8fCBnbG9iYWxzW2ldLm5hbWUgPT09IFwidGhpc1wiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlcyA9IGdsb2JhbHNbaV0ubm9kZXM7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2Rlcy5sZW5ndGg7ICsraikge1xuICAgICAgY29uc3QgdHlwZSA9IG5vZGVzW2pdLnR5cGU7XG4gICAgICBjb25zdCBuYW1lID0gbm9kZXNbal0ubmFtZTtcbiAgICAgIG5vZGVzW2pdLnR5cGUgPSBcIk1lbWJlckV4cHJlc3Npb25cIjtcbiAgICAgIG5vZGVzW2pdLnByb3BlcnR5ID0geyBuYW1lLCB0eXBlIH07XG4gICAgICBub2Rlc1tqXS5jb21wdXRlZCA9IGZhbHNlO1xuICAgICAgbm9kZXNbal0ub2JqZWN0ID0ge1xuICAgICAgICBuYW1lOiBcIndpbmRvd1wiLFxuICAgICAgICB0eXBlOiBcIklkZW50aWZpZXJcIlxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBsYXN0Tm9kZSA9IGFzdC5ib2R5W2FzdC5ib2R5Lmxlbmd0aCAtIDFdO1xuICBpZiAobGFzdE5vZGUudHlwZSA9PT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHtcbiAgICBsYXN0Tm9kZS50eXBlID0gXCJSZXR1cm5TdGF0ZW1lbnRcIjtcbiAgICBsYXN0Tm9kZS5hcmd1bWVudCA9IGxhc3ROb2RlLmV4cHJlc3Npb247XG4gICAgZGVsZXRlIGxhc3ROb2RlLmV4cHJlc3Npb247XG4gIH1cblxuICBjb25zdCByZXdyaXR0ZW5Db2RlID0gZXNjb2RlZ2VuLmdlbmVyYXRlKGFzdCwgeyBjb21tZW50OiB0cnVlIH0pO1xuICBjb25zdCBzdWZmaXggPSBvcHRpb25zLmZpbGVuYW1lICE9PSB1bmRlZmluZWQgPyBcIlxcbi8vIyBzb3VyY2VVUkw9XCIgKyBvcHRpb25zLmZpbGVuYW1lIDogXCJcIjtcblxuICByZXR1cm4gRnVuY3Rpb24oXCJ3aW5kb3dcIiwgcmV3cml0dGVuQ29kZSArIHN1ZmZpeCkuYmluZChjb250ZXh0aWZpZWRTYW5kYm94KShjb250ZXh0aWZpZWRTYW5kYm94KTtcbn07XG5cbmV4cG9ydHMuU2NyaXB0ID0gY2xhc3MgVk1TaGltU2NyaXB0IHtcbiAgY29uc3RydWN0b3IoY29kZSwgb3B0aW9ucykge1xuICAgIHRoaXMuX2NvZGUgPSBjb2RlO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgcnVuSW5Db250ZXh0KHNhbmRib3gsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5ydW5JbkNvbnRleHQodGhpcy5fY29kZSwgc2FuZGJveCwgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fb3B0aW9ucywgb3B0aW9ucykpO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCBhZGRDb25zdGFudHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIikuYWRkQ29uc3RhbnRzO1xuY29uc3QgdGFibGUgPSByZXF1aXJlKFwiLi9kb20tZXhjZXB0aW9uLXRhYmxlLmpzb25cIik7IC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1ET01FeGNlcHRpb24tZXJyb3ItbmFtZXNcblxuLy8gUHJlY29tcHV0ZSBzb21lIHN0dWZmLiBNb3N0bHkgdW5uZWNlc3Nhcnkgb25jZSB3ZSB0YWtlIGNhcmUgb2YgdGhlIFRPRE8gYmVsb3cuXG5jb25zdCBuYW1lc1dpdGhDb2RlcyA9IE9iamVjdC5rZXlzKHRhYmxlKS5maWx0ZXIobmFtZSA9PiBcImxlZ2FjeUNvZGVWYWx1ZVwiIGluIHRhYmxlW25hbWVdKTtcblxuY29uc3QgY29kZXNUb05hbWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZvciAoY29uc3QgbmFtZSBvZiBuYW1lc1dpdGhDb2Rlcykge1xuICBjb2Rlc1RvTmFtZXNbdGFibGVbbmFtZV0ubGVnYWN5Q29kZVZhbHVlXSA9IG5hbWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRE9NRXhjZXB0aW9uO1xuXG4vLyBUT0RPOiB1cGRhdGUgY29uc3RydWN0b3Igc2lnbmF0dXJlIHRvIG1hdGNoIFdlYklETCBzcGVjXG4vLyBTZWUgYWxzbyBodHRwczovL2dpdGh1Yi5jb20vaGV5Y2FtL3dlYmlkbC9wdWxsLzIyIHdoaWNoIGlzbid0IG1lcmdlZCBhcyBvZiB5ZXRcbmZ1bmN0aW9uIERPTUV4Y2VwdGlvbihjb2RlLCBtZXNzYWdlKSB7XG4gIGNvbnN0IG5hbWUgPSBjb2Rlc1RvTmFtZXNbY29kZV07XG5cbiAgaWYgKG1lc3NhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgIG1lc3NhZ2UgPSB0YWJsZVtuYW1lXS5kZXNjcmlwdGlvbjtcbiAgfVxuICBFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvZGVcIiwgeyB2YWx1ZTogY29kZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRE9NRXhjZXB0aW9uKTtcbiAgfVxufVxuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoRE9NRXhjZXB0aW9uLCBFcnJvcik7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoRE9NRXhjZXB0aW9uLnByb3RvdHlwZSwgRXJyb3IucHJvdG90eXBlKTtcblxuY29uc3QgY29uc3RhbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmZvciAoY29uc3QgbmFtZSBvZiBuYW1lc1dpdGhDb2Rlcykge1xuICBjb25zdGFudHNbdGFibGVbbmFtZV0ubGVnYWN5Q29kZU5hbWVdID0gdGFibGVbbmFtZV0ubGVnYWN5Q29kZVZhbHVlO1xufVxuXG5hZGRDb25zdGFudHMoRE9NRXhjZXB0aW9uLCBjb25zdGFudHMpO1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIkluZGV4U2l6ZUVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIGluZGV4IGlzIG5vdCBpbiB0aGUgYWxsb3dlZCByYW5nZS5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiSU5ERVhfU0laRV9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiAxXG4gIH0sXG4gIFwiSGllcmFyY2h5UmVxdWVzdEVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG9wZXJhdGlvbiB3b3VsZCB5aWVsZCBhbiBpbmNvcnJlY3Qgbm9kZSB0cmVlLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJISUVSQVJDSFlfUkVRVUVTVF9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiAzXG4gIH0sXG4gIFwiV3JvbmdEb2N1bWVudEVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG9iamVjdCBpcyBpbiB0aGUgd3JvbmcgZG9jdW1lbnQuXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIldST05HX0RPQ1VNRU5UX0VSUlwiLFxuICAgIFwibGVnYWN5Q29kZVZhbHVlXCI6IDRcbiAgfSxcbiAgXCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgc3RyaW5nIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiSU5WQUxJRF9DSEFSQUNURVJfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogNVxuICB9LFxuICBcIk5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG9iamVjdCBjYW4gbm90IGJlIG1vZGlmaWVkLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiA3XG4gIH0sXG4gIFwiTm90Rm91bmRFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvYmplY3QgY2FuIG5vdCBiZSBmb3VuZCBoZXJlLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJOT1RfRk9VTkRfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogOFxuICB9LFxuICBcIk5vdFN1cHBvcnRlZEVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJOT1RfU1VQUE9SVEVEX0VSUlwiLFxuICAgIFwibGVnYWN5Q29kZVZhbHVlXCI6IDlcbiAgfSxcbiAgXCJJblVzZUF0dHJpYnV0ZUVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIGF0dHJpYnV0ZSBpcyBpbiB1c2UuXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIklOVVNFX0FUVFJJQlVURV9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiAxMFxuICB9LFxuICBcIkludmFsaWRTdGF0ZUVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG9iamVjdCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJJTlZBTElEX1NUQVRFX0VSUlwiLFxuICAgIFwibGVnYWN5Q29kZVZhbHVlXCI6IDExXG4gIH0sXG4gIFwiU3ludGF4RXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgc3RyaW5nIGRpZCBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHBhdHRlcm4uXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIlNZTlRBWF9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiAxMlxuICB9LFxuICBcIkludmFsaWRNb2RpZmljYXRpb25FcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvYmplY3QgY2FuIG5vdCBiZSBtb2RpZmllZCBpbiB0aGlzIHdheS5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMTNcbiAgfSxcbiAgXCJOYW1lc3BhY2VFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgYnkgTmFtZXNwYWNlcyBpbiBYTUwuXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIk5BTUVTUEFDRV9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiAxNFxuICB9LFxuICBcIkludmFsaWRBY2Nlc3NFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvYmplY3QgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIG9yIGFyZ3VtZW50LlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJJTlZBTElEX0FDQ0VTU19FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiAxNVxuICB9LFxuICBcIlNlY3VyaXR5RXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgb3BlcmF0aW9uIGlzIGluc2VjdXJlLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJTRUNVUklUWV9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiAxOFxuICB9LFxuICBcIk5ldHdvcmtFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgbmV0d29yayBlcnJvciBvY2N1cnJlZC5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiTkVUV09SS19FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiAxOVxuICB9LFxuICBcIkFib3J0RXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJBQk9SVF9FUlJcIixcbiAgICBcImxlZ2FjeUNvZGVWYWx1ZVwiOiAyMFxuICB9LFxuICBcIlVSTE1pc21hdGNoRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgZ2l2ZW4gVVJMIGRvZXMgbm90IG1hdGNoIGFub3RoZXIgVVJMLlwiLFxuICAgIFwibGVnYWN5Q29kZU5hbWVcIjogXCJVUkxfTUlTTUFUQ0hfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMjFcbiAgfSxcbiAgXCJRdW90YUV4Y2VlZGVkRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgcXVvdGEgaGFzIGJlZW4gZXhjZWVkZWQuXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIlFVT1RBX0VYQ0VFREVEX0VSUlwiLFxuICAgIFwibGVnYWN5Q29kZVZhbHVlXCI6IDIyXG4gIH0sXG4gIFwiVGltZW91dEVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG9wZXJhdGlvbiB0aW1lZCBvdXQuXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIlRJTUVPVVRfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMjNcbiAgfSxcbiAgXCJJbnZhbGlkTm9kZVR5cGVFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBzdXBwbGllZCBub2RlIGlzIGluY29ycmVjdCBvciBoYXMgYW4gaW5jb3JyZWN0IGFuY2VzdG9yIGZvciB0aGlzIG9wZXJhdGlvbi5cIixcbiAgICBcImxlZ2FjeUNvZGVOYW1lXCI6IFwiSU5WQUxJRF9OT0RFX1RZUEVfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMjRcbiAgfSxcbiAgXCJEYXRhQ2xvbmVFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvYmplY3QgY2FuIG5vdCBiZSBjbG9uZWQuXCIsXG4gICAgXCJsZWdhY3lDb2RlTmFtZVwiOiBcIkRBVEFfQ0xPTkVfRVJSXCIsXG4gICAgXCJsZWdhY3lDb2RlVmFsdWVcIjogMjVcbiAgfSxcbiAgXCJFbmNvZGluZ0Vycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIGVuY29kaW5nIG9wZXJhdGlvbiAoZWl0aGVyIGVuY29kZWQgb3IgZGVjb2RpbmcpIGZhaWxlZC5cIlxuICB9LFxuICBcIk5vdFJlYWRhYmxlRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgSS9PIHJlYWQgb3BlcmF0aW9uIGZhaWxlZC5cIlxuICB9LFxuICBcIlVua25vd25FcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlRoZSBvcGVyYXRpb24gZmFpbGVkIGZvciBhbiB1bmtub3duIHRyYW5zaWVudCByZWFzb24gKGUuZy4gb3V0IG9mIG1lbW9yeSkuXCJcbiAgfSxcbiAgXCJDb25zdHJhaW50RXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIG11dGF0aW9uIG9wZXJhdGlvbiBpbiBhIHRyYW5zYWN0aW9uIGZhaWxlZCBiZWNhdXNlIGEgY29uc3RyYWludCB3YXMgbm90IHNhdGlzZmllZC5cIlxuICB9LFxuICBcIkRhdGFFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIlByb3ZpZGVkIGRhdGEgaXMgaW5hZGVxdWF0ZS5cIlxuICB9LFxuICBcIlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIkEgcmVxdWVzdCB3YXMgcGxhY2VkIGFnYWluc3QgYSB0cmFuc2FjdGlvbiB3aGljaCBpcyBjdXJyZW50bHkgbm90IGFjdGl2ZSwgb3Igd2hpY2ggaXMgZmluaXNoZWQuXCJcbiAgfSxcbiAgXCJSZWFkT25seUVycm9yXCI6IHtcbiAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGhlIG11dGF0aW5nIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIGluIGEgXFxcInJlYWRvbmx5XFxcIiB0cmFuc2FjdGlvbi5cIlxuICB9LFxuICBcIlZlcnNpb25FcnJvclwiOiB7XG4gICAgXCJkZXNjcmlwdGlvblwiOiBcIkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gb3BlbiBhIGRhdGFiYXNlIHVzaW5nIGEgbG93ZXIgdmVyc2lvbiB0aGFuIHRoZSBleGlzdGluZyB2ZXJzaW9uLlwiXG4gIH0sXG4gIFwiT3BlcmF0aW9uRXJyb3JcIjoge1xuICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaGUgb3BlcmF0aW9uIGZhaWxlZCBmb3IgYW4gb3BlcmF0aW9uLXNwZWNpZmljIHJlYXNvbi5cIlxuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiX2FyZ3NcIjogW1xuICAgIFtcbiAgICAgIHtcbiAgICAgICAgXCJyYXdcIjogXCJqc2RvbUBeMTAuMS4wXCIsXG4gICAgICAgIFwic2NvcGVcIjogbnVsbCxcbiAgICAgICAgXCJlc2NhcGVkTmFtZVwiOiBcImpzZG9tXCIsXG4gICAgICAgIFwibmFtZVwiOiBcImpzZG9tXCIsXG4gICAgICAgIFwicmF3U3BlY1wiOiBcIl4xMC4xLjBcIixcbiAgICAgICAgXCJzcGVjXCI6IFwiPj0xMC4xLjAgPDExLjAuMFwiLFxuICAgICAgICBcInR5cGVcIjogXCJyYW5nZVwiXG4gICAgICB9LFxuICAgICAgXCIvaG9tZS9nYWJyaWVsL0RvY3VtZW50cy93ZWItc2NyYXBlci1jaHJvbWUtZXh0ZW5zaW9uXCJcbiAgICBdXG4gIF0sXG4gIFwiX2Zyb21cIjogXCJqc2RvbUA+PTEwLjEuMCA8MTEuMC4wXCIsXG4gIFwiX2lkXCI6IFwianNkb21AMTAuMS4wXCIsXG4gIFwiX2luQ2FjaGVcIjogdHJ1ZSxcbiAgXCJfbG9jYXRpb25cIjogXCIvanNkb21cIixcbiAgXCJfbm9kZVZlcnNpb25cIjogXCI3LjUuMFwiLFxuICBcIl9ucG1PcGVyYXRpb25hbEludGVybmFsXCI6IHtcbiAgICBcImhvc3RcIjogXCJwYWNrYWdlcy0xMi13ZXN0LmludGVybmFsLm5wbWpzLmNvbVwiLFxuICAgIFwidG1wXCI6IFwidG1wL2pzZG9tLTEwLjEuMC50Z3pfMTQ5MzYwNzQ3NDUzNl8wLjg4MDI4OTYwMjA5MzM5ODZcIlxuICB9LFxuICBcIl9ucG1Vc2VyXCI6IHtcbiAgICBcIm5hbWVcIjogXCJkb21lbmljXCIsXG4gICAgXCJlbWFpbFwiOiBcImRAZG9tZW5pYy5tZVwiXG4gIH0sXG4gIFwiX25wbVZlcnNpb25cIjogXCI0LjEuMlwiLFxuICBcIl9waGFudG9tQ2hpbGRyZW5cIjoge30sXG4gIFwiX3JlcXVlc3RlZFwiOiB7XG4gICAgXCJyYXdcIjogXCJqc2RvbUBeMTAuMS4wXCIsXG4gICAgXCJzY29wZVwiOiBudWxsLFxuICAgIFwiZXNjYXBlZE5hbWVcIjogXCJqc2RvbVwiLFxuICAgIFwibmFtZVwiOiBcImpzZG9tXCIsXG4gICAgXCJyYXdTcGVjXCI6IFwiXjEwLjEuMFwiLFxuICAgIFwic3BlY1wiOiBcIj49MTAuMS4wIDwxMS4wLjBcIixcbiAgICBcInR5cGVcIjogXCJyYW5nZVwiXG4gIH0sXG4gIFwiX3JlcXVpcmVkQnlcIjogW1xuICAgIFwiL1wiXG4gIF0sXG4gIFwiX3Jlc29sdmVkXCI6IFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNkb20vLS9qc2RvbS0xMC4xLjAudGd6XCIsXG4gIFwiX3NoYXN1bVwiOiBcIjc3NjVlMDBmZDVjMzU2N2YzNDk4NWExYzg2ZmY0NjZhNjFkYWNjNmFcIixcbiAgXCJfc2hyaW5rd3JhcFwiOiBudWxsLFxuICBcIl9zcGVjXCI6IFwianNkb21AXjEwLjEuMFwiLFxuICBcIl93aGVyZVwiOiBcIi9ob21lL2dhYnJpZWwvRG9jdW1lbnRzL3dlYi1zY3JhcGVyLWNocm9tZS1leHRlbnNpb25cIixcbiAgXCJicm93c2VyXCI6IHtcbiAgICBcImNhbnZhc1wiOiBmYWxzZSxcbiAgICBcInZtXCI6IFwiLi9saWIvanNkb20vdm0tc2hpbS5qc1wiXG4gIH0sXG4gIFwiYnVnc1wiOiB7XG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vdG1wdmFyL2pzZG9tL2lzc3Vlc1wiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImFiYWJcIjogXCJeMS4wLjNcIixcbiAgICBcImFjb3JuXCI6IFwiXjQuMC40XCIsXG4gICAgXCJhY29ybi1nbG9iYWxzXCI6IFwiXjMuMS4wXCIsXG4gICAgXCJhcnJheS1lcXVhbFwiOiBcIl4xLjAuMFwiLFxuICAgIFwiY29udGVudC10eXBlLXBhcnNlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwiY3Nzb21cIjogXCI+PSAwLjMuMiA8IDAuNC4wXCIsXG4gICAgXCJjc3NzdHlsZVwiOiBcIj49IDAuMi4zNyA8IDAuMy4wXCIsXG4gICAgXCJlc2NvZGVnZW5cIjogXCJeMS42LjFcIixcbiAgICBcImh0bWwtZW5jb2Rpbmctc25pZmZlclwiOiBcIl4xLjAuMVwiLFxuICAgIFwibndtYXRjaGVyXCI6IFwiPj0gMS4zLjkgPCAyLjAuMFwiLFxuICAgIFwicGFyc2U1XCI6IFwiXjEuNS4xXCIsXG4gICAgXCJwblwiOiBcIl4xLjAuMFwiLFxuICAgIFwicmVxdWVzdFwiOiBcIl4yLjc5LjBcIixcbiAgICBcInJlcXVlc3QtcHJvbWlzZS1uYXRpdmVcIjogXCJeMS4wLjNcIixcbiAgICBcInNheFwiOiBcIl4xLjIuMVwiLFxuICAgIFwic3ltYm9sLXRyZWVcIjogXCJeMy4yLjFcIixcbiAgICBcInRvdWdoLWNvb2tpZVwiOiBcIl4yLjMuMlwiLFxuICAgIFwid2ViaWRsLWNvbnZlcnNpb25zXCI6IFwiXjQuMC4wXCIsXG4gICAgXCJ3aGF0d2ctZW5jb2RpbmdcIjogXCJeMS4wLjFcIixcbiAgICBcIndoYXR3Zy11cmxcIjogXCJeNC4zLjBcIixcbiAgICBcInhtbC1uYW1lLXZhbGlkYXRvclwiOiBcIl4yLjAuMVwiXG4gIH0sXG4gIFwiZGVzY3JpcHRpb25cIjogXCJBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgbWFueSB3ZWIgc3RhbmRhcmRzXCIsXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImJlbmNobWFya1wiOiBcIjEuMC4wXCIsXG4gICAgXCJicm93c2VyaWZ5XCI6IFwiXjE0LjAuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4zLjUuMFwiLFxuICAgIFwiY29sb3JzXCI6IFwiXjEuMS4yXCIsXG4gICAgXCJlY3N0YXRpY1wiOiBcIl4yLjEuMFwiLFxuICAgIFwiZXNsaW50XCI6IFwiXjMuMTQuMVwiLFxuICAgIFwiZXNsaW50LXBsdWdpbi1odG1sXCI6IFwiXjIuMC4wXCIsXG4gICAgXCJmcy1yZWFkZGlyLXJlY3Vyc2l2ZVwiOiBcIl4xLjAuMFwiLFxuICAgIFwia2FybWFcIjogXCJeMS40LjFcIixcbiAgICBcImthcm1hLWJyb3dzZXJpZnlcIjogXCJeNS4xLjFcIixcbiAgICBcImthcm1hLWNocm9tZS1sYXVuY2hlclwiOiBcIl4yLjAuMFwiLFxuICAgIFwia2FybWEtbW9jaGFcIjogXCJeMS4zLjBcIixcbiAgICBcImthcm1hLW1vY2hhLXdlYndvcmtlclwiOiBcIl4xLjMuMFwiLFxuICAgIFwia2FybWEtc2F1Y2UtbGF1bmNoZXJcIjogXCJeMS4xLjBcIixcbiAgICBcIm1vY2hhXCI6IFwiXjMuMi4wXCIsXG4gICAgXCJtb2NoYS1zdWdhci1mcmVlXCI6IFwiXjEuMy4xXCIsXG4gICAgXCJub2RldW5pdFwiOiBcIjAuMTAuMlwiLFxuICAgIFwib3B0aW1pc3RcIjogXCIwLjYuMVwiLFxuICAgIFwicG9ydGZpbmRlclwiOiBcIl4xLjAuMTNcIixcbiAgICBcInFcIjogXCJeMS40LjFcIixcbiAgICBcInJpbXJhZlwiOiBcIl4yLjYuMVwiLFxuICAgIFwic2VsZW5pdW0tc3RhbmRhbG9uZVwiOiBcIl42LjAuMVwiLFxuICAgIFwic2VydmVyLWRlc3Ryb3lcIjogXCJeMS4wLjFcIixcbiAgICBcInN0XCI6IFwiXjEuMi4wXCIsXG4gICAgXCJ3YXRjaGlmeVwiOiBcIl4zLjkuMFwiLFxuICAgIFwid2RcIjogXCJeMS4xLjNcIixcbiAgICBcIndlYmlkbDJqc1wiOiBcIl42LjEuMFwiXG4gIH0sXG4gIFwiZGlyZWN0b3JpZXNcIjoge30sXG4gIFwiZGlzdFwiOiB7XG4gICAgXCJzaGFzdW1cIjogXCI3NzY1ZTAwZmQ1YzM1NjdmMzQ5ODVhMWM4NmZmNDY2YTYxZGFjYzZhXCIsXG4gICAgXCJ0YXJiYWxsXCI6IFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNkb20vLS9qc2RvbS0xMC4xLjAudGd6XCJcbiAgfSxcbiAgXCJnaXRIZWFkXCI6IFwiZDA3ODgzMGVhZmQxN2VjMzhhYTgxNmNmMjgzZGEzOWVjNTMxNmUzMVwiLFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3RtcHZhci9qc2RvbSNyZWFkbWVcIixcbiAgXCJrZXl3b3Jkc1wiOiBbXG4gICAgXCJkb21cIixcbiAgICBcImh0bWxcIixcbiAgICBcIndoYXR3Z1wiLFxuICAgIFwidzNjXCJcbiAgXSxcbiAgXCJsaWNlbnNlXCI6IFwiTUlUXCIsXG4gIFwibWFpblwiOiBcIi4vbGliL2FwaS5qc1wiLFxuICBcIm1haW50YWluZXJzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJ0bXB2YXJcIixcbiAgICAgIFwiZW1haWxcIjogXCJ0bXB2YXJAZ21haWwuY29tXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcImRvbWVuaWNcIixcbiAgICAgIFwiZW1haWxcIjogXCJkb21lbmljQGRvbWVuaWNkZW5pY29sYS5jb21cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwic2VibWFzdGVyXCIsXG4gICAgICBcImVtYWlsXCI6IFwic2VibWFzdGVyMTZAZ21haWwuY29tXCJcbiAgICB9XG4gIF0sXG4gIFwibmFtZVwiOiBcImpzZG9tXCIsXG4gIFwib3B0aW9uYWxEZXBlbmRlbmNpZXNcIjoge30sXG4gIFwicmVhZG1lXCI6IFwiRVJST1I6IE5vIFJFQURNRSBkYXRhIGZvdW5kIVwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90bXB2YXIvanNkb20uZ2l0XCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcImJlbmNobWFya1wiOiBcIm5vZGUgLi9iZW5jaG1hcmsvcnVubmVyXCIsXG4gICAgXCJiZW5jaG1hcmstYnJvd3NlclwiOiBcIm5vZGUgLi9iZW5jaG1hcmsvcnVubmVyIC0tYnVuZGxlXCIsXG4gICAgXCJjb252ZXJ0LWlkbFwiOiBcIm5vZGUgLi9zY3JpcHRzL3dlYmlkbC9jb252ZXJ0XCIsXG4gICAgXCJsaW50XCI6IFwiZXNsaW50IC4gJiYgZXNsaW50IHRlc3Qvd2ViLXBsYXRmb3JtLXRlc3RzL3RvLXVwc3RyZWFtIC0tZXh0IC5odG1sXCIsXG4gICAgXCJwcmVwdWJsaXNoXCI6IFwibnBtIHJ1biBjb252ZXJ0LWlkbFwiLFxuICAgIFwicHJldGVzdFwiOiBcIm5wbSBydW4gY29udmVydC1pZGwgJiYgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlXCIsXG4gICAgXCJ0ZXN0XCI6IFwibnBtIHJ1biB0ZXN0LW1vY2hhLWFsbCAmJiBucG0gcnVuIHRlc3Qtb2xkXCIsXG4gICAgXCJ0ZXN0LWFwaVwiOiBcIm1vY2hhIHRlc3QvYXBpXCIsXG4gICAgXCJ0ZXN0LWJyb3dzZXJcIjogXCJucG0gcnVuIHRlc3Qta2FybWEgJiYgbnBtIHJ1biB0ZXN0LWthcm1hLXdvcmtlciAmJiBucG0gcnVuIHRlc3QtYnJvd3Nlci1vbGRcIixcbiAgICBcInRlc3QtYnJvd3Nlci1vbGRcIjogXCJub2RlIC4vdGVzdC9icm93c2VyLXJ1bm5lclwiLFxuICAgIFwidGVzdC1rYXJtYVwiOiBcImthcm1hIHN0YXJ0IHRlc3Qva2FybWEuY29uZi5qc1wiLFxuICAgIFwidGVzdC1rYXJtYS13b3JrZXJcIjogXCJrYXJtYSBzdGFydCB0ZXN0L2thcm1hLXdlYndvcmtlci5jb25mLmpzXCIsXG4gICAgXCJ0ZXN0LW1vY2hhXCI6IFwibW9jaGFcIixcbiAgICBcInRlc3QtbW9jaGEtYWxsXCI6IFwibW9jaGEgdGVzdC9pbmRleC5qc1wiLFxuICAgIFwidGVzdC1vbGRcIjogXCJub2RlIC4vdGVzdC9ydW5uZXJcIixcbiAgICBcInRlc3QtdHV3cHRcIjogXCJtb2NoYSB0ZXN0L3dlYi1wbGF0Zm9ybS10ZXN0cy90by11cHN0cmVhbS5qc1wiLFxuICAgIFwidGVzdC13cHRcIjogXCJtb2NoYSB0ZXN0L3dlYi1wbGF0Zm9ybS10ZXN0cy9pbmRleC5qc1wiLFxuICAgIFwidXBkYXRlLWF1dGhvcnNcIjogXCJnaXQgbG9nIC0tZm9ybWF0PVxcXCIlYU4gPCVhRT5cXFwiIHwgc29ydCAtZiB8IHVuaXEgPiBBVVRIT1JTLnR4dFwiXG4gIH0sXG4gIFwidmVyc2lvblwiOiBcIjEwLjEuMFwiXG59XG4iLCIvKipcclxuICogSlNPTlNjaGVtYSBWYWxpZGF0b3IgLSBWYWxpZGF0ZXMgSmF2YVNjcmlwdCBvYmplY3RzIHVzaW5nIEpTT04gU2NoZW1hc1xyXG4gKlx0KGh0dHA6Ly93d3cuanNvbi5jb20vanNvbi1zY2hlbWEtcHJvcG9zYWwvKVxyXG4gKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDcgS3JpcyBaeXAgU2l0ZVBlbiAod3d3LnNpdGVwZW4uY29tKVxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIChNSVQtTElDRU5TRS50eHQpIGxpY2Vuc2UuXHJcblRvIHVzZSB0aGUgdmFsaWRhdG9yIGNhbGwgdGhlIHZhbGlkYXRlIGZ1bmN0aW9uIHdpdGggYW4gaW5zdGFuY2Ugb2JqZWN0IGFuZCBhbiBvcHRpb25hbCBzY2hlbWEgb2JqZWN0LlxyXG5JZiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgaXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlLiBJZiB0aGUgaW5zdGFuY2Ugb2JqZWN0IHJlZmVycyB0byBhIHNjaGVtYSAoc2VsZi12YWxpZGF0aW5nKSxcclxudGhhdCBzY2hlbWEgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIGFuZCB0aGUgc2NoZW1hIHBhcmFtZXRlciBpcyBub3QgbmVjZXNzYXJ5IChpZiBib3RoIGV4aXN0LFxyXG5ib3RoIHZhbGlkYXRpb25zIHdpbGwgb2NjdXIpLlxyXG5UaGUgdmFsaWRhdGUgbWV0aG9kIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3JzLiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzLCB0aGVuIGFuXHJcbmVtcHR5IGxpc3Qgd2lsbCBiZSByZXR1cm5lZC4gQSB2YWxpZGF0aW9uIGVycm9yIHdpbGwgaGF2ZSB0d28gcHJvcGVydGllczpcclxuXCJwcm9wZXJ0eVwiIHdoaWNoIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0eSBoYWQgdGhlIGVycm9yXHJcblwibWVzc2FnZVwiIHdoaWNoIGluZGljYXRlcyB3aGF0IHRoZSBlcnJvciB3YXNcclxuICovXHJcbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xyXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cclxuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgICAgICAvLyBOb2RlLiBEb2VzIG5vdCB3b3JrIHdpdGggc3RyaWN0IENvbW1vbkpTLCBidXRcclxuICAgICAgICAvLyBvbmx5IENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cyxcclxuICAgICAgICAvLyBsaWtlIE5vZGUuXHJcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsc1xyXG4gICAgICAgIHJvb3QuanNvblNjaGVtYSA9IGZhY3RvcnkoKTtcclxuICAgIH1cclxufSh0aGlzLCBmdW5jdGlvbiAoKSB7Ly8gc2V0dXAgcHJpbWl0aXZlIGNsYXNzZXMgdG8gYmUgSlNPTiBTY2hlbWEgdHlwZXNcclxudmFyIGV4cG9ydHMgPSB2YWxpZGF0ZVxyXG5leHBvcnRzLkludGVnZXIgPSB7dHlwZTpcImludGVnZXJcIn07XHJcbnZhciBwcmltaXRpdmVDb25zdHJ1Y3RvcnMgPSB7XHJcblx0U3RyaW5nOiBTdHJpbmcsXHJcblx0Qm9vbGVhbjogQm9vbGVhbixcclxuXHROdW1iZXI6IE51bWJlcixcclxuXHRPYmplY3Q6IE9iamVjdCxcclxuXHRBcnJheTogQXJyYXksXHJcblx0RGF0ZTogRGF0ZVxyXG59XHJcbmV4cG9ydHMudmFsaWRhdGUgPSB2YWxpZGF0ZTtcclxuZnVuY3Rpb24gdmFsaWRhdGUoLypBbnkqL2luc3RhbmNlLC8qT2JqZWN0Ki9zY2hlbWEpIHtcclxuXHRcdC8vIFN1bW1hcnk6XHJcblx0XHQvLyAgXHRUbyB1c2UgdGhlIHZhbGlkYXRvciBjYWxsIEpTT05TY2hlbWEudmFsaWRhdGUgd2l0aCBhbiBpbnN0YW5jZSBvYmplY3QgYW5kIGFuIG9wdGlvbmFsIHNjaGVtYSBvYmplY3QuXHJcblx0XHQvLyBcdFx0SWYgYSBzY2hlbWEgaXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZS4gSWYgdGhlIGluc3RhbmNlIG9iamVjdCByZWZlcnMgdG8gYSBzY2hlbWEgKHNlbGYtdmFsaWRhdGluZyksXHJcblx0XHQvLyBcdFx0dGhhdCBzY2hlbWEgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIGFuZCB0aGUgc2NoZW1hIHBhcmFtZXRlciBpcyBub3QgbmVjZXNzYXJ5IChpZiBib3RoIGV4aXN0LFxyXG5cdFx0Ly8gXHRcdGJvdGggdmFsaWRhdGlvbnMgd2lsbCBvY2N1cikuXHJcblx0XHQvLyBcdFx0VGhlIHZhbGlkYXRlIG1ldGhvZCB3aWxsIHJldHVybiBhbiBvYmplY3Qgd2l0aCB0d28gcHJvcGVydGllczpcclxuXHRcdC8vIFx0XHRcdHZhbGlkOiBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgaW5zdGFuY2UgaXMgdmFsaWQgYnkgdGhlIHNjaGVtYVxyXG5cdFx0Ly8gXHRcdFx0ZXJyb3JzOiBBbiBhcnJheSBvZiB2YWxpZGF0aW9uIGVycm9ycy4gSWYgdGhlcmUgYXJlIG5vIGVycm9ycywgdGhlbiBhblxyXG5cdFx0Ly8gXHRcdFx0XHRcdGVtcHR5IGxpc3Qgd2lsbCBiZSByZXR1cm5lZC4gQSB2YWxpZGF0aW9uIGVycm9yIHdpbGwgaGF2ZSB0d28gcHJvcGVydGllczpcclxuXHRcdC8vIFx0XHRcdFx0XHRcdHByb3BlcnR5OiB3aGljaCBpbmRpY2F0ZXMgd2hpY2ggcHJvcGVydHkgaGFkIHRoZSBlcnJvclxyXG5cdFx0Ly8gXHRcdFx0XHRcdFx0bWVzc2FnZTogd2hpY2ggaW5kaWNhdGVzIHdoYXQgdGhlIGVycm9yIHdhc1xyXG5cdFx0Ly9cclxuXHRcdHJldHVybiB2YWxpZGF0ZShpbnN0YW5jZSwgc2NoZW1hLCB7Y2hhbmdpbmc6IGZhbHNlfSk7Ly8sIGNvZXJjZTogZmFsc2UsIGV4aXN0aW5nT25seTogZmFsc2V9KTtcclxuXHR9O1xyXG5leHBvcnRzLmNoZWNrUHJvcGVydHlDaGFuZ2UgPSBmdW5jdGlvbigvKkFueSovdmFsdWUsLypPYmplY3QqL3NjaGVtYSwgLypTdHJpbmcqL3Byb3BlcnR5KSB7XHJcblx0XHQvLyBTdW1tYXJ5OlxyXG5cdFx0Ly8gXHRcdFRoZSBjaGVja1Byb3BlcnR5Q2hhbmdlIG1ldGhvZCB3aWxsIGNoZWNrIHRvIHNlZSBpZiBhbiB2YWx1ZSBjYW4gbGVnYWxseSBiZSBpbiBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBzY2hlbWFcclxuXHRcdC8vIFx0XHRUaGlzIGlzIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIHRoZSB2YWxpZGF0ZSBtZXRob2QgaW4gdGhhdCBpdCB3aWxsIGZhaWwgaWYgdGhlIHNjaGVtYSBpcyByZWFkb25seSBhbmQgaXQgd2lsbFxyXG5cdFx0Ly8gXHRcdG5vdCBjaGVjayBmb3Igc2VsZi12YWxpZGF0aW9uLCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHBhc3NlZCBpbiB2YWx1ZSBpcyBhbHJlYWR5IGludGVybmFsbHkgdmFsaWQuXHJcblx0XHQvLyBcdFx0VGhlIGNoZWNrUHJvcGVydHlDaGFuZ2UgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB0eXBlIGFzIHZhbGlkYXRlLCBzZWUgSlNPTlNjaGVtYS52YWxpZGF0ZSBmb3JcclxuXHRcdC8vIFx0XHRpbmZvcm1hdGlvbi5cclxuXHRcdC8vXHJcblx0XHRyZXR1cm4gdmFsaWRhdGUodmFsdWUsIHNjaGVtYSwge2NoYW5naW5nOiBwcm9wZXJ0eSB8fCBcInByb3BlcnR5XCJ9KTtcclxuXHR9O1xyXG52YXIgdmFsaWRhdGUgPSBleHBvcnRzLl92YWxpZGF0ZSA9IGZ1bmN0aW9uKC8qQW55Ki9pbnN0YW5jZSwvKk9iamVjdCovc2NoZW1hLC8qT2JqZWN0Ki9vcHRpb25zKSB7XHJcblxyXG5cdGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xyXG5cdHZhciBfY2hhbmdpbmcgPSBvcHRpb25zLmNoYW5naW5nO1xyXG5cclxuXHRmdW5jdGlvbiBnZXRUeXBlKHNjaGVtYSl7XHJcblx0XHRyZXR1cm4gc2NoZW1hLnR5cGUgfHwgKHByaW1pdGl2ZUNvbnN0cnVjdG9yc1tzY2hlbWEubmFtZV0gPT0gc2NoZW1hICYmIHNjaGVtYS5uYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG5cdH1cclxuXHR2YXIgZXJyb3JzID0gW107XHJcblx0Ly8gdmFsaWRhdGUgYSB2YWx1ZSBhZ2FpbnN0IGEgcHJvcGVydHkgZGVmaW5pdGlvblxyXG5cdGZ1bmN0aW9uIGNoZWNrUHJvcCh2YWx1ZSwgc2NoZW1hLCBwYXRoLGkpe1xyXG5cclxuXHRcdHZhciBsO1xyXG5cdFx0cGF0aCArPSBwYXRoID8gdHlwZW9mIGkgPT0gJ251bWJlcicgPyAnWycgKyBpICsgJ10nIDogdHlwZW9mIGkgPT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICcuJyArIGkgOiBpO1xyXG5cdFx0ZnVuY3Rpb24gYWRkRXJyb3IobWVzc2FnZSl7XHJcblx0XHRcdGVycm9ycy5wdXNoKHtwcm9wZXJ0eTpwYXRoLG1lc3NhZ2U6bWVzc2FnZX0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmKCh0eXBlb2Ygc2NoZW1hICE9ICdvYmplY3QnIHx8IHNjaGVtYSBpbnN0YW5jZW9mIEFycmF5KSAmJiAocGF0aCB8fCB0eXBlb2Ygc2NoZW1hICE9ICdmdW5jdGlvbicpICYmICEoc2NoZW1hICYmIGdldFR5cGUoc2NoZW1hKSkpe1xyXG5cdFx0XHRpZih0eXBlb2Ygc2NoZW1hID09ICdmdW5jdGlvbicpe1xyXG5cdFx0XHRcdGlmKCEodmFsdWUgaW5zdGFuY2VvZiBzY2hlbWEpKXtcclxuXHRcdFx0XHRcdGFkZEVycm9yKFwiaXMgbm90IGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcy9jb25zdHJ1Y3RvciBcIiArIHNjaGVtYS5uYW1lKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1lbHNlIGlmKHNjaGVtYSl7XHJcblx0XHRcdFx0YWRkRXJyb3IoXCJJbnZhbGlkIHNjaGVtYS9wcm9wZXJ0eSBkZWZpbml0aW9uIFwiICsgc2NoZW1hKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHRcdGlmKF9jaGFuZ2luZyAmJiBzY2hlbWEucmVhZG9ubHkpe1xyXG5cdFx0XHRhZGRFcnJvcihcImlzIGEgcmVhZG9ubHkgZmllbGQsIGl0IGNhbiBub3QgYmUgY2hhbmdlZFwiKTtcclxuXHRcdH1cclxuXHRcdGlmKHNjaGVtYVsnZXh0ZW5kcyddKXsgLy8gaWYgaXQgZXh0ZW5kcyBhbm90aGVyIHNjaGVtYSwgaXQgbXVzdCBwYXNzIHRoYXQgc2NoZW1hIGFzIHdlbGxcclxuXHRcdFx0Y2hlY2tQcm9wKHZhbHVlLHNjaGVtYVsnZXh0ZW5kcyddLHBhdGgsaSk7XHJcblx0XHR9XHJcblx0XHQvLyB2YWxpZGF0ZSBhIHZhbHVlIGFnYWluc3QgYSB0eXBlIGRlZmluaXRpb25cclxuXHRcdGZ1bmN0aW9uIGNoZWNrVHlwZSh0eXBlLHZhbHVlKXtcclxuXHRcdFx0aWYodHlwZSl7XHJcblx0XHRcdFx0aWYodHlwZW9mIHR5cGUgPT0gJ3N0cmluZycgJiYgdHlwZSAhPSAnYW55JyAmJlxyXG5cdFx0XHRcdFx0XHQodHlwZSA9PSAnbnVsbCcgPyB2YWx1ZSAhPT0gbnVsbCA6IHR5cGVvZiB2YWx1ZSAhPSB0eXBlKSAmJlxyXG5cdFx0XHRcdFx0XHQhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdHlwZSA9PSAnYXJyYXknKSAmJlxyXG5cdFx0XHRcdFx0XHQhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiB0eXBlID09ICdkYXRlJykgJiZcclxuXHRcdFx0XHRcdFx0ISh0eXBlID09ICdpbnRlZ2VyJyAmJiB2YWx1ZSUxPT09MCkpe1xyXG5cdFx0XHRcdFx0cmV0dXJuIFt7cHJvcGVydHk6cGF0aCxtZXNzYWdlOih0eXBlb2YgdmFsdWUpICsgXCIgdmFsdWUgZm91bmQsIGJ1dCBhIFwiICsgdHlwZSArIFwiIGlzIHJlcXVpcmVkXCJ9XTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYodHlwZSBpbnN0YW5jZW9mIEFycmF5KXtcclxuXHRcdFx0XHRcdHZhciB1bmlvbkVycm9ycz1bXTtcclxuXHRcdFx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCB0eXBlLmxlbmd0aDsgaisrKXsgLy8gYSB1bmlvbiB0eXBlXHJcblx0XHRcdFx0XHRcdGlmKCEodW5pb25FcnJvcnM9Y2hlY2tUeXBlKHR5cGVbal0sdmFsdWUpKS5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZih1bmlvbkVycm9ycy5sZW5ndGgpe1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdW5pb25FcnJvcnM7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fWVsc2UgaWYodHlwZW9mIHR5cGUgPT0gJ29iamVjdCcpe1xyXG5cdFx0XHRcdFx0dmFyIHByaW9yRXJyb3JzID0gZXJyb3JzO1xyXG5cdFx0XHRcdFx0ZXJyb3JzID0gW107XHJcblx0XHRcdFx0XHRjaGVja1Byb3AodmFsdWUsdHlwZSxwYXRoKTtcclxuXHRcdFx0XHRcdHZhciB0aGVzZUVycm9ycyA9IGVycm9ycztcclxuXHRcdFx0XHRcdGVycm9ycyA9IHByaW9yRXJyb3JzO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoZXNlRXJyb3JzO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblx0XHR9XHJcblx0XHRpZih2YWx1ZSA9PT0gdW5kZWZpbmVkKXtcclxuXHRcdFx0aWYoc2NoZW1hLnJlcXVpcmVkKXtcclxuXHRcdFx0XHRhZGRFcnJvcihcImlzIG1pc3NpbmcgYW5kIGl0IGlzIHJlcXVpcmVkXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9ZWxzZXtcclxuXHRcdFx0ZXJyb3JzID0gZXJyb3JzLmNvbmNhdChjaGVja1R5cGUoZ2V0VHlwZShzY2hlbWEpLHZhbHVlKSk7XHJcblx0XHRcdGlmKHNjaGVtYS5kaXNhbGxvdyAmJiAhY2hlY2tUeXBlKHNjaGVtYS5kaXNhbGxvdyx2YWx1ZSkubGVuZ3RoKXtcclxuXHRcdFx0XHRhZGRFcnJvcihcIiBkaXNhbGxvd2VkIHZhbHVlIHdhcyBtYXRjaGVkXCIpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKHZhbHVlICE9PSBudWxsKXtcclxuXHRcdFx0XHRpZih2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KXtcclxuXHRcdFx0XHRcdGlmKHNjaGVtYS5pdGVtcyl7XHJcblx0XHRcdFx0XHRcdHZhciBpdGVtc0lzQXJyYXkgPSBzY2hlbWEuaXRlbXMgaW5zdGFuY2VvZiBBcnJheTtcclxuXHRcdFx0XHRcdFx0dmFyIHByb3BEZWYgPSBzY2hlbWEuaXRlbXM7XHJcblx0XHRcdFx0XHRcdGZvciAoaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpICs9IDEpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbXNJc0FycmF5KVxyXG5cdFx0XHRcdFx0XHRcdFx0cHJvcERlZiA9IHNjaGVtYS5pdGVtc1tpXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5jb2VyY2UpXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZVtpXSA9IG9wdGlvbnMuY29lcmNlKHZhbHVlW2ldLCBwcm9wRGVmKTtcclxuXHRcdFx0XHRcdFx0XHRlcnJvcnMuY29uY2F0KGNoZWNrUHJvcCh2YWx1ZVtpXSxwcm9wRGVmLHBhdGgsaSkpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZihzY2hlbWEubWluSXRlbXMgJiYgdmFsdWUubGVuZ3RoIDwgc2NoZW1hLm1pbkl0ZW1zKXtcclxuXHRcdFx0XHRcdFx0YWRkRXJyb3IoXCJUaGVyZSBtdXN0IGJlIGEgbWluaW11bSBvZiBcIiArIHNjaGVtYS5taW5JdGVtcyArIFwiIGluIHRoZSBhcnJheVwiKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmKHNjaGVtYS5tYXhJdGVtcyAmJiB2YWx1ZS5sZW5ndGggPiBzY2hlbWEubWF4SXRlbXMpe1xyXG5cdFx0XHRcdFx0XHRhZGRFcnJvcihcIlRoZXJlIG11c3QgYmUgYSBtYXhpbXVtIG9mIFwiICsgc2NoZW1hLm1heEl0ZW1zICsgXCIgaW4gdGhlIGFycmF5XCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1lbHNlIGlmKHNjaGVtYS5wcm9wZXJ0aWVzIHx8IHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyl7XHJcblx0XHRcdFx0XHRlcnJvcnMuY29uY2F0KGNoZWNrT2JqKHZhbHVlLCBzY2hlbWEucHJvcGVydGllcywgcGF0aCwgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHNjaGVtYS5wYXR0ZXJuICYmIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyAmJiAhdmFsdWUubWF0Y2goc2NoZW1hLnBhdHRlcm4pKXtcclxuXHRcdFx0XHRcdGFkZEVycm9yKFwiZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ2V4IHBhdHRlcm4gXCIgKyBzY2hlbWEucGF0dGVybik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHNjaGVtYS5tYXhMZW5ndGggJiYgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IHNjaGVtYS5tYXhMZW5ndGgpe1xyXG5cdFx0XHRcdFx0YWRkRXJyb3IoXCJtYXkgb25seSBiZSBcIiArIHNjaGVtYS5tYXhMZW5ndGggKyBcIiBjaGFyYWN0ZXJzIGxvbmdcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmKHNjaGVtYS5taW5MZW5ndGggJiYgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA8IHNjaGVtYS5taW5MZW5ndGgpe1xyXG5cdFx0XHRcdFx0YWRkRXJyb3IoXCJtdXN0IGJlIGF0IGxlYXN0IFwiICsgc2NoZW1hLm1pbkxlbmd0aCArIFwiIGNoYXJhY3RlcnMgbG9uZ1wiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYodHlwZW9mIHNjaGVtYS5taW5pbXVtICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09IHR5cGVvZiBzY2hlbWEubWluaW11bSAmJlxyXG5cdFx0XHRcdFx0XHRzY2hlbWEubWluaW11bSA+IHZhbHVlKXtcclxuXHRcdFx0XHRcdGFkZEVycm9yKFwibXVzdCBoYXZlIGEgbWluaW11bSB2YWx1ZSBvZiBcIiArIHNjaGVtYS5taW5pbXVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYodHlwZW9mIHNjaGVtYS5tYXhpbXVtICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09IHR5cGVvZiBzY2hlbWEubWF4aW11bSAmJlxyXG5cdFx0XHRcdFx0XHRzY2hlbWEubWF4aW11bSA8IHZhbHVlKXtcclxuXHRcdFx0XHRcdGFkZEVycm9yKFwibXVzdCBoYXZlIGEgbWF4aW11bSB2YWx1ZSBvZiBcIiArIHNjaGVtYS5tYXhpbXVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYoc2NoZW1hWydlbnVtJ10pe1xyXG5cdFx0XHRcdFx0dmFyIGVudW1lciA9IHNjaGVtYVsnZW51bSddO1xyXG5cdFx0XHRcdFx0bCA9IGVudW1lci5sZW5ndGg7XHJcblx0XHRcdFx0XHR2YXIgZm91bmQ7XHJcblx0XHRcdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgbDsgaisrKXtcclxuXHRcdFx0XHRcdFx0aWYoZW51bWVyW2pdPT09dmFsdWUpe1xyXG5cdFx0XHRcdFx0XHRcdGZvdW5kPTE7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmKCFmb3VuZCl7XHJcblx0XHRcdFx0XHRcdGFkZEVycm9yKFwiZG9lcyBub3QgaGF2ZSBhIHZhbHVlIGluIHRoZSBlbnVtZXJhdGlvbiBcIiArIGVudW1lci5qb2luKFwiLCBcIikpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZih0eXBlb2Ygc2NoZW1hLm1heERlY2ltYWwgPT0gJ251bWJlcicgJiZcclxuXHRcdFx0XHRcdCh2YWx1ZS50b1N0cmluZygpLm1hdGNoKG5ldyBSZWdFeHAoXCJcXFxcLlswLTlde1wiICsgKHNjaGVtYS5tYXhEZWNpbWFsICsgMSkgKyBcIix9XCIpKSkpe1xyXG5cdFx0XHRcdFx0YWRkRXJyb3IoXCJtYXkgb25seSBoYXZlIFwiICsgc2NoZW1hLm1heERlY2ltYWwgKyBcIiBkaWdpdHMgb2YgZGVjaW1hbCBwbGFjZXNcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblx0Ly8gdmFsaWRhdGUgYW4gb2JqZWN0IGFnYWluc3QgYSBzY2hlbWFcclxuXHRmdW5jdGlvbiBjaGVja09iaihpbnN0YW5jZSxvYmpUeXBlRGVmLHBhdGgsYWRkaXRpb25hbFByb3Ape1xyXG5cclxuXHRcdGlmKHR5cGVvZiBvYmpUeXBlRGVmID09J29iamVjdCcpe1xyXG5cdFx0XHRpZih0eXBlb2YgaW5zdGFuY2UgIT0gJ29iamVjdCcgfHwgaW5zdGFuY2UgaW5zdGFuY2VvZiBBcnJheSl7XHJcblx0XHRcdFx0ZXJyb3JzLnB1c2goe3Byb3BlcnR5OnBhdGgsbWVzc2FnZTpcImFuIG9iamVjdCBpcyByZXF1aXJlZFwifSk7XHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblx0XHRcdGZvcih2YXIgaSBpbiBvYmpUeXBlRGVmKXsgXHJcblx0XHRcdFx0aWYob2JqVHlwZURlZi5oYXNPd25Qcm9wZXJ0eShpKSl7XHJcblx0XHRcdFx0XHR2YXIgdmFsdWUgPSBpbnN0YW5jZVtpXTtcclxuXHRcdFx0XHRcdC8vIHNraXAgX25vdF8gc3BlY2lmaWVkIHByb3BlcnRpZXNcclxuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuZXhpc3RpbmdPbmx5KSBjb250aW51ZTtcclxuXHRcdFx0XHRcdHZhciBwcm9wRGVmID0gb2JqVHlwZURlZltpXTtcclxuXHRcdFx0XHRcdC8vIHNldCBkZWZhdWx0XHJcblx0XHRcdFx0XHRpZih2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIHByb3BEZWZbXCJkZWZhdWx0XCJdKXtcclxuXHRcdFx0XHRcdFx0dmFsdWUgPSBpbnN0YW5jZVtpXSA9IHByb3BEZWZbXCJkZWZhdWx0XCJdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYob3B0aW9ucy5jb2VyY2UgJiYgaSBpbiBpbnN0YW5jZSl7XHJcblx0XHRcdFx0XHRcdHZhbHVlID0gaW5zdGFuY2VbaV0gPSBvcHRpb25zLmNvZXJjZSh2YWx1ZSwgcHJvcERlZik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjaGVja1Byb3AodmFsdWUscHJvcERlZixwYXRoLGkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Zm9yKGkgaW4gaW5zdGFuY2Upe1xyXG5cdFx0XHRpZihpbnN0YW5jZS5oYXNPd25Qcm9wZXJ0eShpKSAmJiAhKGkuY2hhckF0KDApID09ICdfJyAmJiBpLmNoYXJBdCgxKSA9PSAnXycpICYmIG9ialR5cGVEZWYgJiYgIW9ialR5cGVEZWZbaV0gJiYgYWRkaXRpb25hbFByb3A9PT1mYWxzZSl7XHJcblx0XHRcdFx0aWYgKG9wdGlvbnMuZmlsdGVyKSB7XHJcblx0XHRcdFx0XHRkZWxldGUgaW5zdGFuY2VbaV07XHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0ZXJyb3JzLnB1c2goe3Byb3BlcnR5OnBhdGgsbWVzc2FnZToodHlwZW9mIHZhbHVlKSArIFwiVGhlIHByb3BlcnR5IFwiICsgaSArXHJcblx0XHRcdFx0XHRcdFwiIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBzY2hlbWEgYW5kIHRoZSBzY2hlbWEgZG9lcyBub3QgYWxsb3cgYWRkaXRpb25hbCBwcm9wZXJ0aWVzXCJ9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIHJlcXVpcmVzID0gb2JqVHlwZURlZiAmJiBvYmpUeXBlRGVmW2ldICYmIG9ialR5cGVEZWZbaV0ucmVxdWlyZXM7XHJcblx0XHRcdGlmKHJlcXVpcmVzICYmICEocmVxdWlyZXMgaW4gaW5zdGFuY2UpKXtcclxuXHRcdFx0XHRlcnJvcnMucHVzaCh7cHJvcGVydHk6cGF0aCxtZXNzYWdlOlwidGhlIHByZXNlbmNlIG9mIHRoZSBwcm9wZXJ0eSBcIiArIGkgKyBcIiByZXF1aXJlcyB0aGF0IFwiICsgcmVxdWlyZXMgKyBcIiBhbHNvIGJlIHByZXNlbnRcIn0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlID0gaW5zdGFuY2VbaV07XHJcblx0XHRcdGlmKGFkZGl0aW9uYWxQcm9wICYmICghKG9ialR5cGVEZWYgJiYgdHlwZW9mIG9ialR5cGVEZWYgPT0gJ29iamVjdCcpIHx8ICEoaSBpbiBvYmpUeXBlRGVmKSkpe1xyXG5cdFx0XHRcdGlmKG9wdGlvbnMuY29lcmNlKXtcclxuXHRcdFx0XHRcdHZhbHVlID0gaW5zdGFuY2VbaV0gPSBvcHRpb25zLmNvZXJjZSh2YWx1ZSwgYWRkaXRpb25hbFByb3ApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjaGVja1Byb3AodmFsdWUsYWRkaXRpb25hbFByb3AscGF0aCxpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZighX2NoYW5naW5nICYmIHZhbHVlICYmIHZhbHVlLiRzY2hlbWEpe1xyXG5cdFx0XHRcdGVycm9ycyA9IGVycm9ycy5jb25jYXQoY2hlY2tQcm9wKHZhbHVlLHZhbHVlLiRzY2hlbWEscGF0aCxpKSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBlcnJvcnM7XHJcblx0fVxyXG5cdGlmKHNjaGVtYSl7XHJcblx0XHRjaGVja1Byb3AoaW5zdGFuY2Usc2NoZW1hLCcnLF9jaGFuZ2luZyB8fCAnJyk7XHJcblx0fVxyXG5cdGlmKCFfY2hhbmdpbmcgJiYgaW5zdGFuY2UgJiYgaW5zdGFuY2UuJHNjaGVtYSl7XHJcblx0XHRjaGVja1Byb3AoaW5zdGFuY2UsaW5zdGFuY2UuJHNjaGVtYSwnJywnJyk7XHJcblx0fVxyXG5cdHJldHVybiB7dmFsaWQ6IWVycm9ycy5sZW5ndGgsZXJyb3JzOmVycm9yc307XHJcbn07XHJcbmV4cG9ydHMubXVzdEJlVmFsaWQgPSBmdW5jdGlvbihyZXN1bHQpe1xyXG5cdC8vXHRzdW1tYXJ5OlxyXG5cdC8vXHRcdFRoaXMgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IHRoZSByZXN1bHQgaXMgdmFsaWQgYW5kIHdpbGwgdGhyb3cgYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSBpZiBpdCBpcyBub3RcclxuXHQvLyByZXN1bHQ6IHRoZSByZXN1bHQgcmV0dXJuZWQgZnJvbSBjaGVja1Byb3BlcnR5Q2hhbmdlIG9yIHZhbGlkYXRlXHJcblx0aWYoIXJlc3VsdC52YWxpZCl7XHJcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKHJlc3VsdC5lcnJvcnMubWFwKGZ1bmN0aW9uKGVycm9yKXtyZXR1cm4gXCJmb3IgcHJvcGVydHkgXCIgKyBlcnJvci5wcm9wZXJ0eSArICc6ICcgKyBlcnJvci5tZXNzYWdlO30pLmpvaW4oXCIsIFxcblwiKSk7XHJcblx0fVxyXG59XHJcblxyXG5yZXR1cm4gZXhwb3J0cztcclxufSkpO1xyXG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdpZnlcbmV4cG9ydHMuZ2V0U2VyaWFsaXplID0gc2VyaWFsaXplclxuXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqLCByZXBsYWNlciwgc3BhY2VzLCBjeWNsZVJlcGxhY2VyKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIHNlcmlhbGl6ZXIocmVwbGFjZXIsIGN5Y2xlUmVwbGFjZXIpLCBzcGFjZXMpXG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZXIocmVwbGFjZXIsIGN5Y2xlUmVwbGFjZXIpIHtcbiAgdmFyIHN0YWNrID0gW10sIGtleXMgPSBbXVxuXG4gIGlmIChjeWNsZVJlcGxhY2VyID09IG51bGwpIGN5Y2xlUmVwbGFjZXIgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgaWYgKHN0YWNrWzBdID09PSB2YWx1ZSkgcmV0dXJuIFwiW0NpcmN1bGFyIH5dXCJcbiAgICByZXR1cm4gXCJbQ2lyY3VsYXIgfi5cIiArIGtleXMuc2xpY2UoMCwgc3RhY2suaW5kZXhPZih2YWx1ZSkpLmpvaW4oXCIuXCIpICsgXCJdXCJcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB0aGlzUG9zID0gc3RhY2suaW5kZXhPZih0aGlzKVxuICAgICAgfnRoaXNQb3MgPyBzdGFjay5zcGxpY2UodGhpc1BvcyArIDEpIDogc3RhY2sucHVzaCh0aGlzKVxuICAgICAgfnRoaXNQb3MgPyBrZXlzLnNwbGljZSh0aGlzUG9zLCBJbmZpbml0eSwga2V5KSA6IGtleXMucHVzaChrZXkpXG4gICAgICBpZiAofnN0YWNrLmluZGV4T2YodmFsdWUpKSB2YWx1ZSA9IGN5Y2xlUmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKVxuICAgIH1cbiAgICBlbHNlIHN0YWNrLnB1c2godmFsdWUpXG5cbiAgICByZXR1cm4gcmVwbGFjZXIgPT0gbnVsbCA/IHZhbHVlIDogcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKVxuICB9XG59XG4iLCJleHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9saWIvcGFyc2UnKTtcbmV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9saWIvc3RyaW5naWZ5Jyk7XG4iLCJ2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgZXNjYXBlZSA9IHtcbiAgICAgICAgJ1wiJzogICdcIicsXG4gICAgICAgICdcXFxcJzogJ1xcXFwnLFxuICAgICAgICAnLyc6ICAnLycsXG4gICAgICAgIGI6ICAgICdcXGInLFxuICAgICAgICBmOiAgICAnXFxmJyxcbiAgICAgICAgbjogICAgJ1xcbicsXG4gICAgICAgIHI6ICAgICdcXHInLFxuICAgICAgICB0OiAgICAnXFx0J1xuICAgIH0sXG4gICAgdGV4dCxcblxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogICAgJ1N5bnRheEVycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG0sXG4gICAgICAgICAgICBhdDogICAgICBhdCxcbiAgICAgICAgICAgIHRleHQ6ICAgIHRleHRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHtcbiAgICAgICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgICBcbiAgICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICAgIGF0ICs9IDE7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9LFxuICAgIFxuICAgIG51bWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG4gICAgICAgIHZhciBudW1iZXIsXG4gICAgICAgICAgICBzdHJpbmcgPSAnJztcbiAgICAgICAgXG4gICAgICAgIGlmIChjaCA9PT0gJy0nKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgICAgICBuZXh0KCctJyk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgICAgIHdoaWxlIChuZXh0KCkgJiYgY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBudW1iZXIgPSArc3RyaW5nO1xuICAgICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgICAgIGVycm9yKFwiQmFkIG51bWJlclwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFxuICAgIHN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG4gICAgICAgIHZhciBoZXgsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgc3RyaW5nID0gJycsXG4gICAgICAgICAgICB1ZmZmZjtcbiAgICAgICAgXG4gICAgICAgIC8vIFdoZW4gcGFyc2luZyBmb3Igc3RyaW5nIHZhbHVlcywgd2UgbXVzdCBsb29rIGZvciBcIiBhbmQgXFwgY2hhcmFjdGVycy5cbiAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICB3aGlsZSAobmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd1Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodWZmZmYpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBlc2NhcGVlW2NoXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBzdHJpbmdcIik7XG4gICAgfSxcblxuICAgIHdoaXRlID0gZnVuY3Rpb24gKCkge1xuXG4vLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHdvcmQgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICBuZXh0KCd0Jyk7XG4gICAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICBuZXh0KCdmJyk7XG4gICAgICAgICAgICBuZXh0KCdhJyk7XG4gICAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgICBuZXh0KCdzJyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgICAgbmV4dCgnbicpO1xuICAgICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIGNoICsgXCInXCIpO1xuICAgIH0sXG5cbiAgICB2YWx1ZSwgIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLlxuXG4gICAgYXJyYXkgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICAgIGlmIChjaCA9PT0gJ1snKSB7XG4gICAgICAgICAgICBuZXh0KCdbJyk7XG4gICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OyAgIC8vIGVtcHR5IGFycmF5XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVycm9yKFwiQmFkIGFycmF5XCIpO1xuICAgIH0sXG5cbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgb2JqZWN0ID0ge307XG5cbiAgICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OyAgIC8vIGVtcHR5IG9iamVjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcignRHVwbGljYXRlIGtleSBcIicgKyBrZXkgKyAnXCInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBvYmplY3RcIik7XG4gICAgfTtcblxudmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGEgSlNPTiB2YWx1ZS4gSXQgY291bGQgYmUgYW4gb2JqZWN0LCBhbiBhcnJheSwgYSBzdHJpbmcsIGEgbnVtYmVyLFxuLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgY2FzZSAneyc6XG4gICAgICAgIHJldHVybiBvYmplY3QoKTtcbiAgICBjYXNlICdbJzpcbiAgICAgICAgcmV0dXJuIGFycmF5KCk7XG4gICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgY2FzZSAnLSc6XG4gICAgICAgIHJldHVybiBudW1iZXIoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiB0aGUganNvbl9wYXJzZSBmdW5jdGlvbi4gSXQgd2lsbCBoYXZlIGFjY2VzcyB0byBhbGwgb2YgdGhlIGFib3ZlXG4vLyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc291cmNlLCByZXZpdmVyKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBcbiAgICB0ZXh0ID0gc291cmNlO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICAgIGVycm9yKFwiU3ludGF4IGVycm9yXCIpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmV2aXZlciBmdW5jdGlvbiwgd2UgcmVjdXJzaXZlbHkgd2FsayB0aGUgbmV3IHN0cnVjdHVyZSxcbiAgICAvLyBwYXNzaW5nIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZVxuICAgIC8vIHRyYW5zZm9ybWF0aW9uLCBzdGFydGluZyB3aXRoIGEgdGVtcG9yYXJ5IHJvb3Qgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHJlc3VsdFxuICAgIC8vIGluIGFuIGVtcHR5IGtleS4gSWYgdGhlcmUgaXMgbm90IGEgcmV2aXZlciBmdW5jdGlvbiwgd2Ugc2ltcGx5IHJldHVybiB0aGVcbiAgICAvLyByZXN1bHQuXG5cbiAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICB2YXIgaywgdiwgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICB9KHsnJzogcmVzdWx0fSwgJycpKSA6IHJlc3VsdDtcbn07XG4iLCJ2YXIgY3ggPSAvW1xcdTAwMDBcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl0vZyxcbiAgICBlc2NhcGFibGUgPSAvW1xcXFxcXFwiXFx4MDAtXFx4MWZcXHg3Zi1cXHg5ZlxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgIGdhcCxcbiAgICBpbmRlbnQsXG4gICAgbWV0YSA9IHsgICAgLy8gdGFibGUgb2YgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgJ1xcYic6ICdcXFxcYicsXG4gICAgICAgICdcXHQnOiAnXFxcXHQnLFxuICAgICAgICAnXFxuJzogJ1xcXFxuJyxcbiAgICAgICAgJ1xcZic6ICdcXFxcZicsXG4gICAgICAgICdcXHInOiAnXFxcXHInLFxuICAgICAgICAnXCInIDogJ1xcXFxcIicsXG4gICAgICAgICdcXFxcJzogJ1xcXFxcXFxcJ1xuICAgIH0sXG4gICAgcmVwO1xuXG5mdW5jdGlvbiBxdW90ZShzdHJpbmcpIHtcbiAgICAvLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vXG4gICAgLy8gYmFja3NsYXNoIGNoYXJhY3RlcnMsIHRoZW4gd2UgY2FuIHNhZmVseSBzbGFwIHNvbWUgcXVvdGVzIGFyb3VuZCBpdC5cbiAgICAvLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGVcbiAgICAvLyBzZXF1ZW5jZXMuXG4gICAgXG4gICAgZXNjYXBhYmxlLmxhc3RJbmRleCA9IDA7XG4gICAgcmV0dXJuIGVzY2FwYWJsZS50ZXN0KHN0cmluZykgPyAnXCInICsgc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICB2YXIgYyA9IG1ldGFbYV07XG4gICAgICAgIHJldHVybiB0eXBlb2YgYyA9PT0gJ3N0cmluZycgPyBjIDpcbiAgICAgICAgICAgICdcXFxcdScgKyAoJzAwMDAnICsgYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xuICAgIH0pICsgJ1wiJyA6ICdcIicgKyBzdHJpbmcgKyAnXCInO1xufVxuXG5mdW5jdGlvbiBzdHIoa2V5LCBob2xkZXIpIHtcbiAgICAvLyBQcm9kdWNlIGEgc3RyaW5nIGZyb20gaG9sZGVyW2tleV0uXG4gICAgdmFyIGksICAgICAgICAgIC8vIFRoZSBsb29wIGNvdW50ZXIuXG4gICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LlxuICAgICAgICB2LCAgICAgICAgICAvLyBUaGUgbWVtYmVyIHZhbHVlLlxuICAgICAgICBsZW5ndGgsXG4gICAgICAgIG1pbmQgPSBnYXAsXG4gICAgICAgIHBhcnRpYWwsXG4gICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV07XG4gICAgXG4gICAgLy8gSWYgdGhlIHZhbHVlIGhhcyBhIHRvSlNPTiBtZXRob2QsIGNhbGwgaXQgdG8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTT04oa2V5KTtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBhIHJlcGxhY2VyIGZ1bmN0aW9uLCB0aGVuIGNhbGwgdGhlIHJlcGxhY2VyIHRvXG4gICAgLy8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuXG4gICAgaWYgKHR5cGVvZiByZXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsdWUgPSByZXAuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBcbiAgICAvLyBXaGF0IGhhcHBlbnMgbmV4dCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSdzIHR5cGUuXG4gICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIHJldHVybiBxdW90ZSh2YWx1ZSk7XG4gICAgICAgIFxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRlLiBFbmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuXG4gICAgICAgICAgICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6ICdudWxsJztcbiAgICAgICAgXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4gb3IgbnVsbCwgY29udmVydCBpdCB0byBhIHN0cmluZy4gTm90ZTpcbiAgICAgICAgICAgIC8vIHR5cGVvZiBudWxsIGRvZXMgbm90IHByb2R1Y2UgJ251bGwnLiBUaGUgY2FzZSBpcyBpbmNsdWRlZCBoZXJlIGluXG4gICAgICAgICAgICAvLyB0aGUgcmVtb3RlIGNoYW5jZSB0aGF0IHRoaXMgZ2V0cyBmaXhlZCBzb21lZGF5LlxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICBnYXAgKz0gaW5kZW50O1xuICAgICAgICAgICAgcGFydGlhbCA9IFtdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBcnJheS5pc0FycmF5XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxbaV0gPSBzdHIoaSwgdmFsdWUpIHx8ICdudWxsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSm9pbiBhbGwgb2YgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsIGFuZFxuICAgICAgICAgICAgICAgIC8vIHdyYXAgdGhlbSBpbiBicmFja2V0cy5cbiAgICAgICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAgPyAnW10nIDogZ2FwID9cbiAgICAgICAgICAgICAgICAgICAgJ1tcXG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXFxuJyArIGdhcCkgKyAnXFxuJyArIG1pbmQgKyAnXScgOlxuICAgICAgICAgICAgICAgICAgICAnWycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICddJztcbiAgICAgICAgICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBJZiB0aGUgcmVwbGFjZXIgaXMgYW4gYXJyYXksIHVzZSBpdCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmVcbiAgICAgICAgICAgIC8vIHN0cmluZ2lmaWVkLlxuICAgICAgICAgICAgaWYgKHJlcCAmJiB0eXBlb2YgcmVwID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGsgPSByZXBbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUga2V5cyBpbiB0aGUgb2JqZWN0LlxuICAgICAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIC8vIEpvaW4gYWxsIG9mIHRoZSBtZW1iZXIgdGV4dHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcyxcbiAgICAgICAgLy8gYW5kIHdyYXAgdGhlbSBpbiBicmFjZXMuXG5cbiAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwID8gJ3t9JyA6IGdhcCA/XG4gICAgICAgICAgICAne1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICd9JyA6XG4gICAgICAgICAgICAneycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICd9JztcbiAgICAgICAgZ2FwID0gbWluZDtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgdmFyIGk7XG4gICAgZ2FwID0gJyc7XG4gICAgaW5kZW50ID0gJyc7XG4gICAgXG4gICAgLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgbWFrZSBhbiBpbmRlbnQgc3RyaW5nIGNvbnRhaW5pbmcgdGhhdFxuICAgIC8vIG1hbnkgc3BhY2VzLlxuICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcGFjZTsgaSArPSAxKSB7XG4gICAgICAgICAgICBpbmRlbnQgKz0gJyAnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5kZW50IHN0cmluZy5cbiAgICBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGluZGVudCA9IHNwYWNlO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmVwbGFjZXIsIGl0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJheS5cbiAgICAvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLlxuICAgIHJlcCA9IHJlcGxhY2VyO1xuICAgIGlmIChyZXBsYWNlciAmJiB0eXBlb2YgcmVwbGFjZXIgIT09ICdmdW5jdGlvbidcbiAgICAmJiAodHlwZW9mIHJlcGxhY2VyICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgcmVwbGFjZXIubGVuZ3RoICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeScpO1xuICAgIH1cbiAgICBcbiAgICAvLyBNYWtlIGEgZmFrZSByb290IG9iamVjdCBjb250YWluaW5nIG91ciB2YWx1ZSB1bmRlciB0aGUga2V5IG9mICcnLlxuICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUuXG4gICAgcmV0dXJuIHN0cignJywgeycnOiB2YWx1ZX0pO1xufTtcbiIsIi8qXG4gKiBsaWIvanNwcmltLmpzOiB1dGlsaXRpZXMgZm9yIHByaW1pdGl2ZSBKYXZhU2NyaXB0IHR5cGVzXG4gKi9cblxudmFyIG1vZF9hc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIG1vZF91dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG52YXIgbW9kX2V4dHNwcmludGYgPSByZXF1aXJlKCdleHRzcHJpbnRmJyk7XG52YXIgbW9kX3ZlcnJvciA9IHJlcXVpcmUoJ3ZlcnJvcicpO1xudmFyIG1vZF9qc29uc2NoZW1hID0gcmVxdWlyZSgnanNvbi1zY2hlbWEnKTtcblxuLypcbiAqIFB1YmxpYyBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0cy5kZWVwQ29weSA9IGRlZXBDb3B5O1xuZXhwb3J0cy5kZWVwRXF1YWwgPSBkZWVwRXF1YWw7XG5leHBvcnRzLmlzRW1wdHkgPSBpc0VtcHR5O1xuZXhwb3J0cy5oYXNLZXkgPSBoYXNLZXk7XG5leHBvcnRzLmZvckVhY2hLZXkgPSBmb3JFYWNoS2V5O1xuZXhwb3J0cy5wbHVjayA9IHBsdWNrO1xuZXhwb3J0cy5mbGF0dGVuT2JqZWN0ID0gZmxhdHRlbk9iamVjdDtcbmV4cG9ydHMuZmxhdHRlbkl0ZXIgPSBmbGF0dGVuSXRlcjtcbmV4cG9ydHMudmFsaWRhdGVKc29uT2JqZWN0ID0gdmFsaWRhdGVKc29uT2JqZWN0SlM7XG5leHBvcnRzLnZhbGlkYXRlSnNvbk9iamVjdEpTID0gdmFsaWRhdGVKc29uT2JqZWN0SlM7XG5leHBvcnRzLnJhbmRFbHQgPSByYW5kRWx0O1xuZXhwb3J0cy5leHRyYVByb3BlcnRpZXMgPSBleHRyYVByb3BlcnRpZXM7XG5leHBvcnRzLm1lcmdlT2JqZWN0cyA9IG1lcmdlT2JqZWN0cztcblxuZXhwb3J0cy5zdGFydHNXaXRoID0gc3RhcnRzV2l0aDtcbmV4cG9ydHMuZW5kc1dpdGggPSBlbmRzV2l0aDtcblxuZXhwb3J0cy5wYXJzZUludGVnZXIgPSBwYXJzZUludGVnZXI7XG5cbmV4cG9ydHMuaXNvODYwMSA9IGlzbzg2MDE7XG5leHBvcnRzLnJmYzExMjMgPSByZmMxMTIzO1xuZXhwb3J0cy5wYXJzZURhdGVUaW1lID0gcGFyc2VEYXRlVGltZTtcblxuZXhwb3J0cy5ocnRpbWVkaWZmID0gaHJ0aW1lRGlmZjtcbmV4cG9ydHMuaHJ0aW1lRGlmZiA9IGhydGltZURpZmY7XG5leHBvcnRzLmhydGltZUFjY3VtID0gaHJ0aW1lQWNjdW07XG5leHBvcnRzLmhydGltZUFkZCA9IGhydGltZUFkZDtcbmV4cG9ydHMuaHJ0aW1lTmFub3NlYyA9IGhydGltZU5hbm9zZWM7XG5leHBvcnRzLmhydGltZU1pY3Jvc2VjID0gaHJ0aW1lTWljcm9zZWM7XG5leHBvcnRzLmhydGltZU1pbGxpc2VjID0gaHJ0aW1lTWlsbGlzZWM7XG5cblxuLypcbiAqIERlZXAgY29weSBhbiBhY3ljbGljICpiYXNpYyogSmF2YXNjcmlwdCBvYmplY3QuICBUaGlzIG9ubHkgaGFuZGxlcyBiYXNpY1xuICogc2NhbGFycyAoc3RyaW5ncywgbnVtYmVycywgYm9vbGVhbnMpIGFuZCBhcmJpdHJhcmlseSBkZWVwIGFycmF5cyBhbmQgb2JqZWN0c1xuICogY29udGFpbmluZyB0aGVzZS4gIFRoaXMgZG9lcyAqbm90KiBoYW5kbGUgaW5zdGFuY2VzIG9mIG90aGVyIGNsYXNzZXMuXG4gKi9cbmZ1bmN0aW9uIGRlZXBDb3B5KG9iailcbntcblx0dmFyIHJldCwga2V5O1xuXHR2YXIgbWFya2VyID0gJ19fZGVlcENvcHknO1xuXG5cdGlmIChvYmogJiYgb2JqW21hcmtlcl0pXG5cdFx0dGhyb3cgKG5ldyBFcnJvcignYXR0ZW1wdGVkIGRlZXAgY29weSBvZiBjeWNsaWMgb2JqZWN0JykpO1xuXG5cdGlmIChvYmogJiYgb2JqLmNvbnN0cnVjdG9yID09IE9iamVjdCkge1xuXHRcdHJldCA9IHt9O1xuXHRcdG9ialttYXJrZXJdID0gdHJ1ZTtcblxuXHRcdGZvciAoa2V5IGluIG9iaikge1xuXHRcdFx0aWYgKGtleSA9PSBtYXJrZXIpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHRyZXRba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTtcblx0XHR9XG5cblx0XHRkZWxldGUgKG9ialttYXJrZXJdKTtcblx0XHRyZXR1cm4gKHJldCk7XG5cdH1cblxuXHRpZiAob2JqICYmIG9iai5jb25zdHJ1Y3RvciA9PSBBcnJheSkge1xuXHRcdHJldCA9IFtdO1xuXHRcdG9ialttYXJrZXJdID0gdHJ1ZTtcblxuXHRcdGZvciAoa2V5ID0gMDsga2V5IDwgb2JqLmxlbmd0aDsga2V5KyspXG5cdFx0XHRyZXQucHVzaChkZWVwQ29weShvYmpba2V5XSkpO1xuXG5cdFx0ZGVsZXRlIChvYmpbbWFya2VyXSk7XG5cdFx0cmV0dXJuIChyZXQpO1xuXHR9XG5cblx0Lypcblx0ICogSXQgbXVzdCBiZSBhIHByaW1pdGl2ZSB0eXBlIC0tIGp1c3QgcmV0dXJuIGl0LlxuXHQgKi9cblx0cmV0dXJuIChvYmopO1xufVxuXG5mdW5jdGlvbiBkZWVwRXF1YWwob2JqMSwgb2JqMilcbntcblx0aWYgKHR5cGVvZiAob2JqMSkgIT0gdHlwZW9mIChvYmoyKSlcblx0XHRyZXR1cm4gKGZhbHNlKTtcblxuXHRpZiAob2JqMSA9PT0gbnVsbCB8fCBvYmoyID09PSBudWxsIHx8IHR5cGVvZiAob2JqMSkgIT0gJ29iamVjdCcpXG5cdFx0cmV0dXJuIChvYmoxID09PSBvYmoyKTtcblxuXHRpZiAob2JqMS5jb25zdHJ1Y3RvciAhPSBvYmoyLmNvbnN0cnVjdG9yKVxuXHRcdHJldHVybiAoZmFsc2UpO1xuXG5cdHZhciBrO1xuXHRmb3IgKGsgaW4gb2JqMSkge1xuXHRcdGlmICghb2JqMi5oYXNPd25Qcm9wZXJ0eShrKSlcblx0XHRcdHJldHVybiAoZmFsc2UpO1xuXG5cdFx0aWYgKCFkZWVwRXF1YWwob2JqMVtrXSwgb2JqMltrXSkpXG5cdFx0XHRyZXR1cm4gKGZhbHNlKTtcblx0fVxuXG5cdGZvciAoayBpbiBvYmoyKSB7XG5cdFx0aWYgKCFvYmoxLmhhc093blByb3BlcnR5KGspKVxuXHRcdFx0cmV0dXJuIChmYWxzZSk7XG5cdH1cblxuXHRyZXR1cm4gKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5KG9iailcbntcblx0dmFyIGtleTtcblx0Zm9yIChrZXkgaW4gb2JqKVxuXHRcdHJldHVybiAoZmFsc2UpO1xuXHRyZXR1cm4gKHRydWUpO1xufVxuXG5mdW5jdGlvbiBoYXNLZXkob2JqLCBrZXkpXG57XG5cdG1vZF9hc3NlcnQuZXF1YWwodHlwZW9mIChrZXkpLCAnc3RyaW5nJyk7XG5cdHJldHVybiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSk7XG59XG5cbmZ1bmN0aW9uIGZvckVhY2hLZXkob2JqLCBjYWxsYmFjaylcbntcblx0Zm9yICh2YXIga2V5IGluIG9iaikge1xuXHRcdGlmIChoYXNLZXkob2JqLCBrZXkpKSB7XG5cdFx0XHRjYWxsYmFjayhrZXksIG9ialtrZXldKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcGx1Y2sob2JqLCBrZXkpXG57XG5cdG1vZF9hc3NlcnQuZXF1YWwodHlwZW9mIChrZXkpLCAnc3RyaW5nJyk7XG5cdHJldHVybiAocGx1Y2t2KG9iaiwga2V5KSk7XG59XG5cbmZ1bmN0aW9uIHBsdWNrdihvYmosIGtleSlcbntcblx0aWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2YgKG9iaikgIT09ICdvYmplY3QnKVxuXHRcdHJldHVybiAodW5kZWZpbmVkKTtcblxuXHRpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpXG5cdFx0cmV0dXJuIChvYmpba2V5XSk7XG5cblx0dmFyIGkgPSBrZXkuaW5kZXhPZignLicpO1xuXHRpZiAoaSA9PSAtMSlcblx0XHRyZXR1cm4gKHVuZGVmaW5lZCk7XG5cblx0dmFyIGtleTEgPSBrZXkuc3Vic3RyKDAsIGkpO1xuXHRpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkxKSlcblx0XHRyZXR1cm4gKHVuZGVmaW5lZCk7XG5cblx0cmV0dXJuIChwbHVja3Yob2JqW2tleTFdLCBrZXkuc3Vic3RyKGkgKyAxKSkpO1xufVxuXG4vKlxuICogSW52b2tlIGNhbGxiYWNrKHJvdykgZm9yIGVhY2ggZW50cnkgaW4gdGhlIGFycmF5IHRoYXQgd291bGQgYmUgcmV0dXJuZWQgYnlcbiAqIGZsYXR0ZW5PYmplY3QoZGF0YSwgZGVwdGgpLiAgVGhpcyBpcyBqdXN0IGxpa2UgZmxhdHRlbk9iamVjdChkYXRhLFxuICogZGVwdGgpLmZvckVhY2goY2FsbGJhY2spLCBleGNlcHQgdGhhdCB0aGUgaW50ZXJtZWRpYXRlIGFycmF5IGlzIG5ldmVyXG4gKiBjcmVhdGVkLlxuICovXG5mdW5jdGlvbiBmbGF0dGVuSXRlcihkYXRhLCBkZXB0aCwgY2FsbGJhY2spXG57XG5cdGRvRmxhdHRlbkl0ZXIoZGF0YSwgZGVwdGgsIFtdLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGRvRmxhdHRlbkl0ZXIoZGF0YSwgZGVwdGgsIGFjY3VtLCBjYWxsYmFjaylcbntcblx0dmFyIGVhY2g7XG5cdHZhciBrZXk7XG5cblx0aWYgKGRlcHRoID09PSAwKSB7XG5cdFx0ZWFjaCA9IGFjY3VtLnNsaWNlKDApO1xuXHRcdGVhY2gucHVzaChkYXRhKTtcblx0XHRjYWxsYmFjayhlYWNoKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRtb2RfYXNzZXJ0Lm9rKGRhdGEgIT09IG51bGwpO1xuXHRtb2RfYXNzZXJ0LmVxdWFsKHR5cGVvZiAoZGF0YSksICdvYmplY3QnKTtcblx0bW9kX2Fzc2VydC5lcXVhbCh0eXBlb2YgKGRlcHRoKSwgJ251bWJlcicpO1xuXHRtb2RfYXNzZXJ0Lm9rKGRlcHRoID49IDApO1xuXG5cdGZvciAoa2V5IGluIGRhdGEpIHtcblx0XHRlYWNoID0gYWNjdW0uc2xpY2UoMCk7XG5cdFx0ZWFjaC5wdXNoKGtleSk7XG5cdFx0ZG9GbGF0dGVuSXRlcihkYXRhW2tleV0sIGRlcHRoIC0gMSwgZWFjaCwgY2FsbGJhY2spO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW5PYmplY3QoZGF0YSwgZGVwdGgpXG57XG5cdGlmIChkZXB0aCA9PT0gMClcblx0XHRyZXR1cm4gKFsgZGF0YSBdKTtcblxuXHRtb2RfYXNzZXJ0Lm9rKGRhdGEgIT09IG51bGwpO1xuXHRtb2RfYXNzZXJ0LmVxdWFsKHR5cGVvZiAoZGF0YSksICdvYmplY3QnKTtcblx0bW9kX2Fzc2VydC5lcXVhbCh0eXBlb2YgKGRlcHRoKSwgJ251bWJlcicpO1xuXHRtb2RfYXNzZXJ0Lm9rKGRlcHRoID49IDApO1xuXG5cdHZhciBydiA9IFtdO1xuXHR2YXIga2V5O1xuXG5cdGZvciAoa2V5IGluIGRhdGEpIHtcblx0XHRmbGF0dGVuT2JqZWN0KGRhdGFba2V5XSwgZGVwdGggLSAxKS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG5cdFx0XHRydi5wdXNoKFsga2V5IF0uY29uY2F0KHApKTtcblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiAocnYpO1xufVxuXG5mdW5jdGlvbiBzdGFydHNXaXRoKHN0ciwgcHJlZml4KVxue1xuXHRyZXR1cm4gKHN0ci5zdWJzdHIoMCwgcHJlZml4Lmxlbmd0aCkgPT0gcHJlZml4KTtcbn1cblxuZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzdWZmaXgpXG57XG5cdHJldHVybiAoc3RyLnN1YnN0cihcblx0ICAgIHN0ci5sZW5ndGggLSBzdWZmaXgubGVuZ3RoLCBzdWZmaXgubGVuZ3RoKSA9PSBzdWZmaXgpO1xufVxuXG5mdW5jdGlvbiBpc284NjAxKGQpXG57XG5cdGlmICh0eXBlb2YgKGQpID09ICdudW1iZXInKVxuXHRcdGQgPSBuZXcgRGF0ZShkKTtcblx0bW9kX2Fzc2VydC5vayhkLmNvbnN0cnVjdG9yID09PSBEYXRlKTtcblx0cmV0dXJuIChtb2RfZXh0c3ByaW50Zi5zcHJpbnRmKCclNGQtJTAyZC0lMDJkVCUwMmQ6JTAyZDolMDJkLiUwM2RaJyxcblx0ICAgIGQuZ2V0VVRDRnVsbFllYXIoKSwgZC5nZXRVVENNb250aCgpICsgMSwgZC5nZXRVVENEYXRlKCksXG5cdCAgICBkLmdldFVUQ0hvdXJzKCksIGQuZ2V0VVRDTWludXRlcygpLCBkLmdldFVUQ1NlY29uZHMoKSxcblx0ICAgIGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpKTtcbn1cblxudmFyIFJGQzExMjNfTU9OVEhTID0gW1xuICAgICdKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsXG4gICAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ107XG52YXIgUkZDMTEyM19EQVlTID0gW1xuICAgICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXTtcblxuZnVuY3Rpb24gcmZjMTEyMyhkYXRlKSB7XG5cdHJldHVybiAobW9kX2V4dHNwcmludGYuc3ByaW50ZignJXMsICUwMmQgJXMgJTA0ZCAlMDJkOiUwMmQ6JTAyZCBHTVQnLFxuXHQgICAgUkZDMTEyM19EQVlTW2RhdGUuZ2V0VVRDRGF5KCldLCBkYXRlLmdldFVUQ0RhdGUoKSxcblx0ICAgIFJGQzExMjNfTU9OVEhTW2RhdGUuZ2V0VVRDTW9udGgoKV0sIGRhdGUuZ2V0VVRDRnVsbFllYXIoKSxcblx0ICAgIGRhdGUuZ2V0VVRDSG91cnMoKSwgZGF0ZS5nZXRVVENNaW51dGVzKCksXG5cdCAgICBkYXRlLmdldFVUQ1NlY29uZHMoKSkpO1xufVxuXG4vKlxuICogUGFyc2VzIGEgZGF0ZSBleHByZXNzZWQgYXMgYSBzdHJpbmcsIGFzIGVpdGhlciBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAqIHRoZSBlcG9jaCBvciBhbnkgc3RyaW5nIGZvcm1hdCB0aGF0IERhdGUgYWNjZXB0cywgZ2l2aW5nIHByZWZlcmVuY2UgdG8gdGhlXG4gKiBmb3JtZXIgd2hlcmUgdGhlc2UgdHdvIHNldHMgb3ZlcmxhcCAoZS5nLiwgc21hbGwgbnVtYmVycykuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGF0ZVRpbWUoc3RyKVxue1xuXHQvKlxuXHQgKiBUaGlzIGlzIGlycml0YXRpbmdseSBpbXBsaWNpdCwgYnV0IHNpZ25pZmljYW50bHkgbW9yZSBjb25jaXNlIHRoYW5cblx0ICogYWx0ZXJuYXRpdmVzLiAgVGhlIFwiK3N0clwiIHdpbGwgY29udmVydCBhIHN0cmluZyBjb250YWluaW5nIG9ubHkgYVxuXHQgKiBudW1iZXIgZGlyZWN0bHkgdG8gYSBOdW1iZXIsIG9yIE5hTiBmb3Igb3RoZXIgc3RyaW5ncy4gIFRodXMsIGlmIHRoZVxuXHQgKiBjb252ZXJzaW9uIHN1Y2NlZWRzLCB3ZSB1c2UgaXQgKHRoaXMgaXMgdGhlIG1pbGxpc2Vjb25kcy1zaW5jZS1lcG9jaFxuXHQgKiBjYXNlKS4gIE90aGVyd2lzZSwgd2UgcGFzcyB0aGUgc3RyaW5nIGRpcmVjdGx5IHRvIHRoZSBEYXRlXG5cdCAqIGNvbnN0cnVjdG9yIHRvIHBhcnNlLlxuXHQgKi9cblx0dmFyIG51bWVyaWMgPSArc3RyO1xuXHRpZiAoIWlzTmFOKG51bWVyaWMpKSB7XG5cdFx0cmV0dXJuIChuZXcgRGF0ZShudW1lcmljKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIChuZXcgRGF0ZShzdHIpKTtcblx0fVxufVxuXG5cbi8qXG4gKiBOdW1iZXIuKl9TQUZFX0lOVEVHRVIgaXNuJ3QgcHJlc2VudCBiZWZvcmUgbm9kZSB2MC4xMiwgc28gd2UgaGFyZGNvZGVcbiAqIHRoZSBFUzYgZGVmaW5pdGlvbnMgaGVyZSwgd2hpbGUgYWxsb3dpbmcgZm9yIHRoZW0gdG8gc29tZWRheSBiZSBoaWdoZXIuXG4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHwgOTAwNzE5OTI1NDc0MDk5MTtcbnZhciBNSU5fU0FGRV9JTlRFR0VSID0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgfHwgLTkwMDcxOTkyNTQ3NDA5OTE7XG5cblxuLypcbiAqIERlZmF1bHQgb3B0aW9ucyBmb3IgcGFyc2VJbnRlZ2VyKCkuXG4gKi9cbnZhciBQSV9ERUZBVUxUUyA9IHtcblx0YmFzZTogMTAsXG5cdGFsbG93U2lnbjogdHJ1ZSxcblx0YWxsb3dQcmVmaXg6IGZhbHNlLFxuXHRhbGxvd1RyYWlsaW5nOiBmYWxzZSxcblx0YWxsb3dJbXByZWNpc2U6IGZhbHNlLFxuXHR0cmltV2hpdGVzcGFjZTogZmFsc2UsXG5cdGxlYWRpbmdaZXJvSXNPY3RhbDogZmFsc2Vcbn07XG5cbnZhciBDUF8wID0gMHgzMDtcbnZhciBDUF85ID0gMHgzOTtcblxudmFyIENQX0EgPSAweDQxO1xudmFyIENQX0IgPSAweDQyO1xudmFyIENQX08gPSAweDRmO1xudmFyIENQX1QgPSAweDU0O1xudmFyIENQX1ggPSAweDU4O1xudmFyIENQX1ogPSAweDVhO1xuXG52YXIgQ1BfYSA9IDB4NjE7XG52YXIgQ1BfYiA9IDB4NjI7XG52YXIgQ1BfbyA9IDB4NmY7XG52YXIgQ1BfdCA9IDB4NzQ7XG52YXIgQ1BfeCA9IDB4Nzg7XG52YXIgQ1BfeiA9IDB4N2E7XG5cbnZhciBQSV9DT05WX0RFQyA9IDB4MzA7XG52YXIgUElfQ09OVl9VQyA9IDB4Mzc7XG52YXIgUElfQ09OVl9MQyA9IDB4NTc7XG5cblxuLypcbiAqIEEgc3RyaWN0ZXIgdmVyc2lvbiBvZiBwYXJzZUludCgpIHRoYXQgcHJvdmlkZXMgb3B0aW9ucyBmb3IgY2hhbmdpbmcgd2hhdFxuICogaXMgYW4gYWNjZXB0YWJsZSBzdHJpbmcgKGZvciBleGFtcGxlLCBkaXNhbGxvd2luZyB0cmFpbGluZyBjaGFyYWN0ZXJzKS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VJbnRlZ2VyKHN0ciwgdW9wdHMpXG57XG5cdG1vZF9hc3NlcnQuc3RyaW5nKHN0ciwgJ3N0cicpO1xuXHRtb2RfYXNzZXJ0Lm9wdGlvbmFsT2JqZWN0KHVvcHRzLCAnb3B0aW9ucycpO1xuXG5cdHZhciBiYXNlT3ZlcnJpZGUgPSBmYWxzZTtcblx0dmFyIG9wdGlvbnMgPSBQSV9ERUZBVUxUUztcblxuXHRpZiAodW9wdHMpIHtcblx0XHRiYXNlT3ZlcnJpZGUgPSBoYXNLZXkodW9wdHMsICdiYXNlJyk7XG5cdFx0b3B0aW9ucyA9IG1lcmdlT2JqZWN0cyhvcHRpb25zLCB1b3B0cyk7XG5cdFx0bW9kX2Fzc2VydC5udW1iZXIob3B0aW9ucy5iYXNlLCAnb3B0aW9ucy5iYXNlJyk7XG5cdFx0bW9kX2Fzc2VydC5vayhvcHRpb25zLmJhc2UgPj0gMiwgJ29wdGlvbnMuYmFzZSA+PSAyJyk7XG5cdFx0bW9kX2Fzc2VydC5vayhvcHRpb25zLmJhc2UgPD0gMzYsICdvcHRpb25zLmJhc2UgPD0gMzYnKTtcblx0XHRtb2RfYXNzZXJ0LmJvb2wob3B0aW9ucy5hbGxvd1NpZ24sICdvcHRpb25zLmFsbG93U2lnbicpO1xuXHRcdG1vZF9hc3NlcnQuYm9vbChvcHRpb25zLmFsbG93UHJlZml4LCAnb3B0aW9ucy5hbGxvd1ByZWZpeCcpO1xuXHRcdG1vZF9hc3NlcnQuYm9vbChvcHRpb25zLmFsbG93VHJhaWxpbmcsXG5cdFx0ICAgICdvcHRpb25zLmFsbG93VHJhaWxpbmcnKTtcblx0XHRtb2RfYXNzZXJ0LmJvb2wob3B0aW9ucy5hbGxvd0ltcHJlY2lzZSxcblx0XHQgICAgJ29wdGlvbnMuYWxsb3dJbXByZWNpc2UnKTtcblx0XHRtb2RfYXNzZXJ0LmJvb2wob3B0aW9ucy50cmltV2hpdGVzcGFjZSxcblx0XHQgICAgJ29wdGlvbnMudHJpbVdoaXRlc3BhY2UnKTtcblx0XHRtb2RfYXNzZXJ0LmJvb2wob3B0aW9ucy5sZWFkaW5nWmVyb0lzT2N0YWwsXG5cdFx0ICAgICdvcHRpb25zLmxlYWRpbmdaZXJvSXNPY3RhbCcpO1xuXG5cdFx0aWYgKG9wdGlvbnMubGVhZGluZ1plcm9Jc09jdGFsKSB7XG5cdFx0XHRtb2RfYXNzZXJ0Lm9rKCFiYXNlT3ZlcnJpZGUsXG5cdFx0XHQgICAgJ1wiYmFzZVwiIGFuZCBcImxlYWRpbmdaZXJvSXNPY3RhbFwiIGFyZSAnICtcblx0XHRcdCAgICAnbXV0dWFsbHkgZXhjbHVzaXZlJyk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGM7XG5cdHZhciBwYmFzZSA9IC0xO1xuXHR2YXIgYmFzZSA9IG9wdGlvbnMuYmFzZTtcblx0dmFyIHN0YXJ0O1xuXHR2YXIgbXVsdCA9IDE7XG5cdHZhciB2YWx1ZSA9IDA7XG5cdHZhciBpZHggPSAwO1xuXHR2YXIgbGVuID0gc3RyLmxlbmd0aDtcblxuXHQvKiBUcmltIGFueSB3aGl0ZXNwYWNlIG9uIHRoZSBsZWZ0IHNpZGUuICovXG5cdGlmIChvcHRpb25zLnRyaW1XaGl0ZXNwYWNlKSB7XG5cdFx0d2hpbGUgKGlkeCA8IGxlbiAmJiBpc1NwYWNlKHN0ci5jaGFyQ29kZUF0KGlkeCkpKSB7XG5cdFx0XHQrK2lkeDtcblx0XHR9XG5cdH1cblxuXHQvKiBDaGVjayB0aGUgbnVtYmVyIGZvciBhIGxlYWRpbmcgc2lnbi4gKi9cblx0aWYgKG9wdGlvbnMuYWxsb3dTaWduKSB7XG5cdFx0aWYgKHN0cltpZHhdID09PSAnLScpIHtcblx0XHRcdGlkeCArPSAxO1xuXHRcdFx0bXVsdCA9IC0xO1xuXHRcdH0gZWxzZSBpZiAoc3RyW2lkeF0gPT09ICcrJykge1xuXHRcdFx0aWR4ICs9IDE7XG5cdFx0fVxuXHR9XG5cblx0LyogUGFyc2UgdGhlIGJhc2UtaW5kaWNhdGluZyBwcmVmaXggaWYgdGhlcmUgaXMgb25lLiAqL1xuXHRpZiAoc3RyW2lkeF0gPT09ICcwJykge1xuXHRcdGlmIChvcHRpb25zLmFsbG93UHJlZml4KSB7XG5cdFx0XHRwYmFzZSA9IHByZWZpeFRvQmFzZShzdHIuY2hhckNvZGVBdChpZHggKyAxKSk7XG5cdFx0XHRpZiAocGJhc2UgIT09IC0xICYmICghYmFzZU92ZXJyaWRlIHx8IHBiYXNlID09PSBiYXNlKSkge1xuXHRcdFx0XHRiYXNlID0gcGJhc2U7XG5cdFx0XHRcdGlkeCArPSAyO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYmFzZSA9PT0gLTEgJiYgb3B0aW9ucy5sZWFkaW5nWmVyb0lzT2N0YWwpIHtcblx0XHRcdGJhc2UgPSA4O1xuXHRcdH1cblx0fVxuXG5cdC8qIFBhcnNlIHRoZSBhY3R1YWwgZGlnaXRzLiAqL1xuXHRmb3IgKHN0YXJ0ID0gaWR4OyBpZHggPCBsZW47ICsraWR4KSB7XG5cdFx0YyA9IHRyYW5zbGF0ZURpZ2l0KHN0ci5jaGFyQ29kZUF0KGlkeCkpO1xuXHRcdGlmIChjICE9PSAtMSAmJiBjIDwgYmFzZSkge1xuXHRcdFx0dmFsdWUgKj0gYmFzZTtcblx0XHRcdHZhbHVlICs9IGM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8qIElmIHdlIGRpZG4ndCBwYXJzZSBhbnkgZGlnaXRzLCB3ZSBoYXZlIGFuIGludmFsaWQgbnVtYmVyLiAqL1xuXHRpZiAoc3RhcnQgPT09IGlkeCkge1xuXHRcdHJldHVybiAobmV3IEVycm9yKCdpbnZhbGlkIG51bWJlcjogJyArIEpTT04uc3RyaW5naWZ5KHN0cikpKTtcblx0fVxuXG5cdC8qIFRyaW0gYW55IHdoaXRlc3BhY2Ugb24gdGhlIHJpZ2h0IHNpZGUuICovXG5cdGlmIChvcHRpb25zLnRyaW1XaGl0ZXNwYWNlKSB7XG5cdFx0d2hpbGUgKGlkeCA8IGxlbiAmJiBpc1NwYWNlKHN0ci5jaGFyQ29kZUF0KGlkeCkpKSB7XG5cdFx0XHQrK2lkeDtcblx0XHR9XG5cdH1cblxuXHQvKiBDaGVjayBmb3IgdHJhaWxpbmcgY2hhcmFjdGVycy4gKi9cblx0aWYgKGlkeCA8IGxlbiAmJiAhb3B0aW9ucy5hbGxvd1RyYWlsaW5nKSB7XG5cdFx0cmV0dXJuIChuZXcgRXJyb3IoJ3RyYWlsaW5nIGNoYXJhY3RlcnMgYWZ0ZXIgbnVtYmVyOiAnICtcblx0XHQgICAgSlNPTi5zdHJpbmdpZnkoc3RyLnNsaWNlKGlkeCkpKSk7XG5cdH1cblxuXHQvKiBJZiBvdXIgdmFsdWUgaXMgMCwgd2UgcmV0dXJuIG5vdywgdG8gYXZvaWQgcmV0dXJuaW5nIC0wLiAqL1xuXHRpZiAodmFsdWUgPT09IDApIHtcblx0XHRyZXR1cm4gKDApO1xuXHR9XG5cblx0LyogQ2FsY3VsYXRlIG91ciBmaW5hbCB2YWx1ZS4gKi9cblx0dmFyIHJlc3VsdCA9IHZhbHVlICogbXVsdDtcblxuXHQvKlxuXHQgKiBJZiB0aGUgc3RyaW5nIHJlcHJlc2VudHMgYSB2YWx1ZSB0aGF0IGNhbm5vdCBiZSBwcmVjaXNlbHkgcmVwcmVzZW50ZWRcblx0ICogYnkgSmF2YVNjcmlwdCwgdGhlbiB3ZSB3YW50IHRvIGNoZWNrIHRoYXQ6XG5cdCAqXG5cdCAqIC0gV2UgbmV2ZXIgaW5jcmVhc2VkIHRoZSB2YWx1ZSBwYXN0IE1BWF9TQUZFX0lOVEVHRVJcblx0ICogLSBXZSBkb24ndCBtYWtlIHRoZSByZXN1bHQgbmVnYXRpdmUgYW5kIGJlbG93IE1JTl9TQUZFX0lOVEVHRVJcblx0ICpcblx0ICogQmVjYXVzZSB3ZSBvbmx5IGV2ZXIgaW5jcmVtZW50IHRoZSB2YWx1ZSBkdXJpbmcgcGFyc2luZywgdGhlcmUncyBub1xuXHQgKiBjaGFuY2Ugb2YgbW92aW5nIHBhc3QgTUFYX1NBRkVfSU5URUdFUiBhbmQgdGhlbiBkcm9wcGluZyBiZWxvdyBpdFxuXHQgKiBhZ2FpbiwgbG9zaW5nIHByZWNpc2lvbiBpbiB0aGUgcHJvY2Vzcy4gVGhpcyBtZWFucyB0aGF0IHdlIG9ubHkgbmVlZFxuXHQgKiB0byBkbyBvdXIgY2hlY2tzIGhlcmUsIGF0IHRoZSBlbmQuXG5cdCAqL1xuXHRpZiAoIW9wdGlvbnMuYWxsb3dJbXByZWNpc2UgJiZcblx0ICAgICh2YWx1ZSA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgcmVzdWx0IDwgTUlOX1NBRkVfSU5URUdFUikpIHtcblx0XHRyZXR1cm4gKG5ldyBFcnJvcignbnVtYmVyIGlzIG91dHNpZGUgb2YgdGhlIHN1cHBvcnRlZCByYW5nZTogJyArXG5cdFx0ICAgIEpTT04uc3RyaW5naWZ5KHN0ci5zbGljZShzdGFydCwgaWR4KSkpKTtcblx0fVxuXG5cdHJldHVybiAocmVzdWx0KTtcbn1cblxuXG4vKlxuICogSW50ZXJwcmV0IGEgY2hhcmFjdGVyIGNvZGUgYXMgYSBiYXNlLTM2IGRpZ2l0LlxuICovXG5mdW5jdGlvbiB0cmFuc2xhdGVEaWdpdChkKVxue1xuXHRpZiAoZCA+PSBDUF8wICYmIGQgPD0gQ1BfOSkge1xuXHRcdC8qICcwJyB0byAnOScgLT4gMCB0byA5ICovXG5cdFx0cmV0dXJuIChkIC0gUElfQ09OVl9ERUMpO1xuXHR9IGVsc2UgaWYgKGQgPj0gQ1BfQSAmJiBkIDw9IENQX1opIHtcblx0XHQvKiAnQScgLSAnWicgLT4gMTAgdG8gMzUgKi9cblx0XHRyZXR1cm4gKGQgLSBQSV9DT05WX1VDKTtcblx0fSBlbHNlIGlmIChkID49IENQX2EgJiYgZCA8PSBDUF96KSB7XG5cdFx0LyogJ2EnIC0gJ3onIC0+IDEwIHRvIDM1ICovXG5cdFx0cmV0dXJuIChkIC0gUElfQ09OVl9MQyk7XG5cdH0gZWxzZSB7XG5cdFx0LyogSW52YWxpZCBjaGFyYWN0ZXIgY29kZSAqL1xuXHRcdHJldHVybiAoLTEpO1xuXHR9XG59XG5cblxuLypcbiAqIFRlc3QgaWYgYSB2YWx1ZSBtYXRjaGVzIHRoZSBFQ01BU2NyaXB0IGRlZmluaXRpb24gb2YgdHJpbW1hYmxlIHdoaXRlc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIGlzU3BhY2UoYylcbntcblx0cmV0dXJuIChjID09PSAweDIwKSB8fFxuXHQgICAgKGMgPj0gMHgwMDA5ICYmIGMgPD0gMHgwMDBkKSB8fFxuXHQgICAgKGMgPT09IDB4MDBhMCkgfHxcblx0ICAgIChjID09PSAweDE2ODApIHx8XG5cdCAgICAoYyA9PT0gMHgxODBlKSB8fFxuXHQgICAgKGMgPj0gMHgyMDAwICYmIGMgPD0gMHgyMDBhKSB8fFxuXHQgICAgKGMgPT09IDB4MjAyOCkgfHxcblx0ICAgIChjID09PSAweDIwMjkpIHx8XG5cdCAgICAoYyA9PT0gMHgyMDJmKSB8fFxuXHQgICAgKGMgPT09IDB4MjA1ZikgfHxcblx0ICAgIChjID09PSAweDMwMDApIHx8XG5cdCAgICAoYyA9PT0gMHhmZWZmKTtcbn1cblxuXG4vKlxuICogRGV0ZXJtaW5lIHdoaWNoIGJhc2UgYSBjaGFyYWN0ZXIgaW5kaWNhdGVzIChlLmcuLCAneCcgaW5kaWNhdGVzIGhleCkuXG4gKi9cbmZ1bmN0aW9uIHByZWZpeFRvQmFzZShjKVxue1xuXHRpZiAoYyA9PT0gQ1BfYiB8fCBjID09PSBDUF9CKSB7XG5cdFx0LyogMGIvMEIgKGJpbmFyeSkgKi9cblx0XHRyZXR1cm4gKDIpO1xuXHR9IGVsc2UgaWYgKGMgPT09IENQX28gfHwgYyA9PT0gQ1BfTykge1xuXHRcdC8qIDBvLzBPIChvY3RhbCkgKi9cblx0XHRyZXR1cm4gKDgpO1xuXHR9IGVsc2UgaWYgKGMgPT09IENQX3QgfHwgYyA9PT0gQ1BfVCkge1xuXHRcdC8qIDB0LzBUIChkZWNpbWFsKSAqL1xuXHRcdHJldHVybiAoMTApO1xuXHR9IGVsc2UgaWYgKGMgPT09IENQX3ggfHwgYyA9PT0gQ1BfWCkge1xuXHRcdC8qIDB4LzBYIChoZXhhZGVjaW1hbCkgKi9cblx0XHRyZXR1cm4gKDE2KTtcblx0fSBlbHNlIHtcblx0XHQvKiBOb3QgYSBtZWFuaW5nZnVsIGNoYXJhY3RlciAqL1xuXHRcdHJldHVybiAoLTEpO1xuXHR9XG59XG5cblxuZnVuY3Rpb24gdmFsaWRhdGVKc29uT2JqZWN0SlMoc2NoZW1hLCBpbnB1dClcbntcblx0dmFyIHJlcG9ydCA9IG1vZF9qc29uc2NoZW1hLnZhbGlkYXRlKGlucHV0LCBzY2hlbWEpO1xuXG5cdGlmIChyZXBvcnQuZXJyb3JzLmxlbmd0aCA9PT0gMClcblx0XHRyZXR1cm4gKG51bGwpO1xuXG5cdC8qIEN1cnJlbnRseSwgd2Ugb25seSBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCB0aGUgZmlyc3QgZXJyb3IuICovXG5cdHZhciBlcnJvciA9IHJlcG9ydC5lcnJvcnNbMF07XG5cblx0LyogVGhlIGZhaWxlZCBwcm9wZXJ0eSBpcyBnaXZlbiBieSBhIFVSSSB3aXRoIGFuIGlycmVsZXZhbnQgcHJlZml4LiAqL1xuXHR2YXIgcHJvcG5hbWUgPSBlcnJvclsncHJvcGVydHknXTtcblx0dmFyIHJlYXNvbiA9IGVycm9yWydtZXNzYWdlJ10udG9Mb3dlckNhc2UoKTtcblx0dmFyIGksIGo7XG5cblx0Lypcblx0ICogVGhlcmUncyBhdCBsZWFzdCBvbmUgY2FzZSB3aGVyZSB0aGUgcHJvcGVydHkgZXJyb3IgbWVzc2FnZSBpc1xuXHQgKiBjb25mdXNpbmcgYXQgYmVzdC4gIFdlIHdvcmsgYXJvdW5kIHRoaXMgaGVyZS5cblx0ICovXG5cdGlmICgoaSA9IHJlYXNvbi5pbmRleE9mKCd0aGUgcHJvcGVydHkgJykpICE9IC0xICYmXG5cdCAgICAoaiA9IHJlYXNvbi5pbmRleE9mKCcgaXMgbm90IGRlZmluZWQgaW4gdGhlIHNjaGVtYSBhbmQgdGhlICcgK1xuXHQgICAgJ3NjaGVtYSBkb2VzIG5vdCBhbGxvdyBhZGRpdGlvbmFsIHByb3BlcnRpZXMnKSkgIT0gLTEpIHtcblx0XHRpICs9ICd0aGUgcHJvcGVydHkgJy5sZW5ndGg7XG5cdFx0aWYgKHByb3BuYW1lID09PSAnJylcblx0XHRcdHByb3BuYW1lID0gcmVhc29uLnN1YnN0cihpLCBqIC0gaSk7XG5cdFx0ZWxzZVxuXHRcdFx0cHJvcG5hbWUgPSBwcm9wbmFtZSArICcuJyArIHJlYXNvbi5zdWJzdHIoaSwgaiAtIGkpO1xuXG5cdFx0cmVhc29uID0gJ3Vuc3VwcG9ydGVkIHByb3BlcnR5Jztcblx0fVxuXG5cdHZhciBydiA9IG5ldyBtb2RfdmVycm9yLlZFcnJvcigncHJvcGVydHkgXCIlc1wiOiAlcycsIHByb3BuYW1lLCByZWFzb24pO1xuXHRydi5qc3ZfZGV0YWlscyA9IGVycm9yO1xuXHRyZXR1cm4gKHJ2KTtcbn1cblxuZnVuY3Rpb24gcmFuZEVsdChhcnIpXG57XG5cdG1vZF9hc3NlcnQub2soQXJyYXkuaXNBcnJheShhcnIpICYmIGFyci5sZW5ndGggPiAwLFxuXHQgICAgJ3JhbmRFbHQgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheScpO1xuXG5cdHJldHVybiAoYXJyW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFyci5sZW5ndGgpXSk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydEhydGltZShhKVxue1xuXHRtb2RfYXNzZXJ0Lm9rKGFbMF0gPj0gMCAmJiBhWzFdID49IDAsXG5cdCAgICAnbmVnYXRpdmUgbnVtYmVycyBub3QgYWxsb3dlZCBpbiBocnRpbWVzJyk7XG5cdG1vZF9hc3NlcnQub2soYVsxXSA8IDFlOSwgJ25hbm9zZWNvbmRzIGNvbHVtbiBvdmVyZmxvdycpO1xufVxuXG4vKlxuICogQ29tcHV0ZSB0aGUgdGltZSBlbGFwc2VkIGJldHdlZW4gaHJ0aW1lIHJlYWRpbmdzIEEgYW5kIEIsIHdoZXJlIEEgaXMgbGF0ZXJcbiAqIHRoYW4gQi4gIGhydGltZSByZWFkaW5ncyBjb21lIGZyb20gTm9kZSdzIHByb2Nlc3MuaHJ0aW1lKCkuICBUaGVyZSBpcyBub1xuICogZGVmaW5lZCB3YXkgdG8gcmVwcmVzZW50IG5lZ2F0aXZlIGRlbHRhcywgc28gaXQncyBpbGxlZ2FsIHRvIGRpZmYgQiBmcm9tIEFcbiAqIHdoZXJlIHRoZSB0aW1lIGRlbm90ZWQgYnkgQiBpcyBsYXRlciB0aGFuIHRoZSB0aW1lIGRlbm90ZWQgYnkgQS4gIElmIHRoaXNcbiAqIGJlY29tZXMgdmFsdWFibGUsIHdlIGNhbiBkZWZpbmUgYSByZXByZXNlbnRhdGlvbiBhbmQgZXh0ZW5kIHRoZVxuICogaW1wbGVtZW50YXRpb24gdG8gc3VwcG9ydCBpdC5cbiAqL1xuZnVuY3Rpb24gaHJ0aW1lRGlmZihhLCBiKVxue1xuXHRhc3NlcnRIcnRpbWUoYSk7XG5cdGFzc2VydEhydGltZShiKTtcblx0bW9kX2Fzc2VydC5vayhhWzBdID4gYlswXSB8fCAoYVswXSA9PSBiWzBdICYmIGFbMV0gPj0gYlsxXSksXG5cdCAgICAnbmVnYXRpdmUgZGlmZmVyZW5jZXMgbm90IGFsbG93ZWQnKTtcblxuXHR2YXIgcnYgPSBbIGFbMF0gLSBiWzBdLCAwIF07XG5cblx0aWYgKGFbMV0gPj0gYlsxXSkge1xuXHRcdHJ2WzFdID0gYVsxXSAtIGJbMV07XG5cdH0gZWxzZSB7XG5cdFx0cnZbMF0tLTtcblx0XHRydlsxXSA9IDFlOSAtIChiWzFdIC0gYVsxXSk7XG5cdH1cblxuXHRyZXR1cm4gKHJ2KTtcbn1cblxuLypcbiAqIENvbnZlcnQgYSBocnRpbWUgcmVhZGluZyBmcm9tIHRoZSBhcnJheSBmb3JtYXQgcmV0dXJuZWQgYnkgTm9kZSdzXG4gKiBwcm9jZXNzLmhydGltZSgpIGludG8gYSBzY2FsYXIgbnVtYmVyIG9mIG5hbm9zZWNvbmRzLlxuICovXG5mdW5jdGlvbiBocnRpbWVOYW5vc2VjKGEpXG57XG5cdGFzc2VydEhydGltZShhKTtcblxuXHRyZXR1cm4gKE1hdGguZmxvb3IoYVswXSAqIDFlOSArIGFbMV0pKTtcbn1cblxuLypcbiAqIENvbnZlcnQgYSBocnRpbWUgcmVhZGluZyBmcm9tIHRoZSBhcnJheSBmb3JtYXQgcmV0dXJuZWQgYnkgTm9kZSdzXG4gKiBwcm9jZXNzLmhydGltZSgpIGludG8gYSBzY2FsYXIgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcy5cbiAqL1xuZnVuY3Rpb24gaHJ0aW1lTWljcm9zZWMoYSlcbntcblx0YXNzZXJ0SHJ0aW1lKGEpO1xuXG5cdHJldHVybiAoTWF0aC5mbG9vcihhWzBdICogMWU2ICsgYVsxXSAvIDFlMykpO1xufVxuXG4vKlxuICogQ29udmVydCBhIGhydGltZSByZWFkaW5nIGZyb20gdGhlIGFycmF5IGZvcm1hdCByZXR1cm5lZCBieSBOb2RlJ3NcbiAqIHByb2Nlc3MuaHJ0aW1lKCkgaW50byBhIHNjYWxhciBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICovXG5mdW5jdGlvbiBocnRpbWVNaWxsaXNlYyhhKVxue1xuXHRhc3NlcnRIcnRpbWUoYSk7XG5cblx0cmV0dXJuIChNYXRoLmZsb29yKGFbMF0gKiAxZTMgKyBhWzFdIC8gMWU2KSk7XG59XG5cbi8qXG4gKiBBZGQgdHdvIGhydGltZSByZWFkaW5ncyBBIGFuZCBCLCBvdmVyd3JpdGluZyBBIHdpdGggdGhlIHJlc3VsdCBvZiB0aGVcbiAqIGFkZGl0aW9uLiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIGFjY3VtdWxhdGluZyBzZXZlcmFsIGhydGltZSBpbnRlcnZhbHNcbiAqIGludG8gYSBjb3VudGVyLiAgUmV0dXJucyBBLlxuICovXG5mdW5jdGlvbiBocnRpbWVBY2N1bShhLCBiKVxue1xuXHRhc3NlcnRIcnRpbWUoYSk7XG5cdGFzc2VydEhydGltZShiKTtcblxuXHQvKlxuXHQgKiBBY2N1bXVsYXRlIHRoZSBuYW5vc2Vjb25kIGNvbXBvbmVudC5cblx0ICovXG5cdGFbMV0gKz0gYlsxXTtcblx0aWYgKGFbMV0gPj0gMWU5KSB7XG5cdFx0Lypcblx0XHQgKiBUaGUgbmFub3NlY29uZCBjb21wb25lbnQgb3ZlcmZsb3dlZCwgc28gY2FycnkgdG8gdGhlIHNlY29uZHNcblx0XHQgKiBmaWVsZC5cblx0XHQgKi9cblx0XHRhWzBdKys7XG5cdFx0YVsxXSAtPSAxZTk7XG5cdH1cblxuXHQvKlxuXHQgKiBBY2N1bXVsYXRlIHRoZSBzZWNvbmRzIGNvbXBvbmVudC5cblx0ICovXG5cdGFbMF0gKz0gYlswXTtcblxuXHRyZXR1cm4gKGEpO1xufVxuXG4vKlxuICogQWRkIHR3byBocnRpbWUgcmVhZGluZ3MgQSBhbmQgQiwgcmV0dXJuaW5nIHRoZSByZXN1bHQgYXMgYSBuZXcgaHJ0aW1lIGFycmF5LlxuICogRG9lcyBub3QgbW9kaWZ5IGVpdGhlciBpbnB1dCBhcmd1bWVudC5cbiAqL1xuZnVuY3Rpb24gaHJ0aW1lQWRkKGEsIGIpXG57XG5cdGFzc2VydEhydGltZShhKTtcblxuXHR2YXIgcnYgPSBbIGFbMF0sIGFbMV0gXTtcblxuXHRyZXR1cm4gKGhydGltZUFjY3VtKHJ2LCBiKSk7XG59XG5cblxuLypcbiAqIENoZWNrIGFuIG9iamVjdCBmb3IgdW5leHBlY3RlZCBwcm9wZXJ0aWVzLiAgQWNjZXB0cyB0aGUgb2JqZWN0IHRvIGNoZWNrLCBhbmRcbiAqIGFuIGFycmF5IG9mIGFsbG93ZWQgcHJvcGVydHkgbmFtZXMgKHN0cmluZ3MpLiAgUmV0dXJucyBhbiBhcnJheSBvZiBrZXkgbmFtZXNcbiAqIHRoYXQgd2VyZSBmb3VuZCBvbiB0aGUgb2JqZWN0LCBidXQgZGlkIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3Qgb2YgYWxsb3dlZFxuICogcHJvcGVydGllcy4gIElmIG5vIHByb3BlcnRpZXMgd2VyZSBmb3VuZCwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgb2ZcbiAqIHplcm8gbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBleHRyYVByb3BlcnRpZXMob2JqLCBhbGxvd2VkKVxue1xuXHRtb2RfYXNzZXJ0Lm9rKHR5cGVvZiAob2JqKSA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsLFxuXHQgICAgJ29iaiBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLW51bGwgb2JqZWN0Jyk7XG5cdG1vZF9hc3NlcnQub2soQXJyYXkuaXNBcnJheShhbGxvd2VkKSxcblx0ICAgICdhbGxvd2VkIGFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncycpO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGFsbG93ZWQubGVuZ3RoOyBpKyspIHtcblx0XHRtb2RfYXNzZXJ0Lm9rKHR5cGVvZiAoYWxsb3dlZFtpXSkgPT09ICdzdHJpbmcnLFxuXHRcdCAgICAnYWxsb3dlZCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcblx0fVxuXG5cdHJldHVybiAoT2JqZWN0LmtleXMob2JqKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuXHRcdHJldHVybiAoYWxsb3dlZC5pbmRleE9mKGtleSkgPT09IC0xKTtcblx0fSkpO1xufVxuXG4vKlxuICogR2l2ZW4gdGhyZWUgc2V0cyBvZiBwcm9wZXJ0aWVzIFwicHJvdmlkZWRcIiAobWF5IGJlIHVuZGVmaW5lZCksIFwib3ZlcnJpZGVzXCJcbiAqIChyZXF1aXJlZCksIGFuZCBcImRlZmF1bHRzXCIgKG1heSBiZSB1bmRlZmluZWQpLCBjb25zdHJ1Y3QgYW4gb2JqZWN0IGNvbnRhaW5pbmdcbiAqIHRoZSB1bmlvbiBvZiB0aGVzZSBzZXRzIHdpdGggXCJvdmVycmlkZXNcIiBvdmVycmlkaW5nIFwicHJvdmlkZWRcIiwgYW5kXG4gKiBcInByb3ZpZGVkXCIgb3ZlcnJpZGluZyBcImRlZmF1bHRzXCIuICBOb25lIG9mIHRoZSBpbnB1dCBvYmplY3RzIGFyZSBtb2RpZmllZC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPYmplY3RzKHByb3ZpZGVkLCBvdmVycmlkZXMsIGRlZmF1bHRzKVxue1xuXHR2YXIgcnYsIGs7XG5cblx0cnYgPSB7fTtcblx0aWYgKGRlZmF1bHRzKSB7XG5cdFx0Zm9yIChrIGluIGRlZmF1bHRzKVxuXHRcdFx0cnZba10gPSBkZWZhdWx0c1trXTtcblx0fVxuXG5cdGlmIChwcm92aWRlZCkge1xuXHRcdGZvciAoayBpbiBwcm92aWRlZClcblx0XHRcdHJ2W2tdID0gcHJvdmlkZWRba107XG5cdH1cblxuXHRpZiAob3ZlcnJpZGVzKSB7XG5cdFx0Zm9yIChrIGluIG92ZXJyaWRlcylcblx0XHRcdHJ2W2tdID0gb3ZlcnJpZGVzW2tdO1xuXHR9XG5cblx0cmV0dXJuIChydik7XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIE1hcmsgQ2F2YWdlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuXG4vLy8tLS0gR2xvYmFsc1xuXG4vKiBKU1NUWUxFRCAqL1xudmFyIFVVSURfUkVHRVhQID0gL15bYS1mQS1GMC05XXs4fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXsxMn0kLztcblxuXG4vLy8tLS0gSW50ZXJuYWxcblxuZnVuY3Rpb24gX2NhcGl0YWxpemUoc3RyKSB7XG4gICAgcmV0dXJuIChzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSkpO1xufVxuXG5mdW5jdGlvbiBfdG9zcyhuYW1lLCBleHBlY3RlZCwgb3BlciwgYXJnLCBhY3R1YWwpIHtcbiAgICB0aHJvdyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHtcbiAgICAgICAgbWVzc2FnZTogdXRpbC5mb3JtYXQoJyVzICglcykgaXMgcmVxdWlyZWQnLCBuYW1lLCBleHBlY3RlZCksXG4gICAgICAgIGFjdHVhbDogKGFjdHVhbCA9PT0gdW5kZWZpbmVkKSA/IHR5cGVvZiAoYXJnKSA6IGFjdHVhbChhcmcpLFxuICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgICAgIG9wZXJhdG9yOiBvcGVyIHx8ICc9PT0nLFxuICAgICAgICBzdGFja1N0YXJ0RnVuY3Rpb246IF90b3NzLmNhbGxlclxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0Q2xhc3MoYXJnKSB7XG4gICAgcmV0dXJuIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKS5zbGljZSg4LCAtMSkpO1xufVxuXG5mdW5jdGlvbiBub29wKCkge1xuICAgIC8vIFdoeSBldmVuIGJvdGhlciB3aXRoIGFzc2VydHM/XG59XG5cblxuLy8vLS0tIEV4cG9ydHNcblxudmFyIHR5cGVzID0ge1xuICAgIGJvb2w6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ2Jvb2xlYW4nOyB9XG4gICAgfSxcbiAgICBmdW5jOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdmdW5jdGlvbic7IH1cbiAgICB9LFxuICAgIHN0cmluZzoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnc3RyaW5nJzsgfVxuICAgIH0sXG4gICAgb2JqZWN0OiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG51bWJlcjoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKGFyZyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGZpbml0ZToge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKGFyZykgJiYgaXNGaW5pdGUoYXJnKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYnVmZmVyOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBCdWZmZXIuaXNCdWZmZXIoYXJnKTsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdCdWZmZXIuaXNCdWZmZXInXG4gICAgfSxcbiAgICBhcnJheToge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpOyB9LFxuICAgICAgICBvcGVyYXRvcjogJ0FycmF5LmlzQXJyYXknXG4gICAgfSxcbiAgICBzdHJlYW06IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIFN0cmVhbTsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdpbnN0YW5jZW9mJyxcbiAgICAgICAgYWN0dWFsOiBfZ2V0Q2xhc3NcbiAgICB9LFxuICAgIGRhdGU6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIERhdGU7IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaW5zdGFuY2VvZicsXG4gICAgICAgIGFjdHVhbDogX2dldENsYXNzXG4gICAgfSxcbiAgICByZWdleHA6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIFJlZ0V4cDsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdpbnN0YW5jZW9mJyxcbiAgICAgICAgYWN0dWFsOiBfZ2V0Q2xhc3NcbiAgICB9LFxuICAgIHV1aWQ6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdzdHJpbmcnICYmIFVVSURfUkVHRVhQLnRlc3QoYXJnKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdpc1VVSUQnXG4gICAgfVxufTtcblxuZnVuY3Rpb24gX3NldEV4cG9ydHMobmRlYnVnKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0eXBlcyk7XG4gICAgdmFyIG91dDtcblxuICAgIC8qIHJlLWV4cG9ydCBzdGFuZGFyZCBhc3NlcnQgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9OREVCVUcpIHtcbiAgICAgICAgb3V0ID0gbm9vcDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgPSBmdW5jdGlvbiAoYXJnLCBtc2cpIHtcbiAgICAgICAgICAgIGlmICghYXJnKSB7XG4gICAgICAgICAgICAgICAgX3Rvc3MobXNnLCAndHJ1ZScsIGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyogc3RhbmRhcmQgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtrXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgb3V0W2tdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoIXR5cGUuY2hlY2soYXJnKSkge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgaywgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKiBvcHRpb25hbCBjaGVja3MgKi9cbiAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgdmFyIG5hbWUgPSAnb3B0aW9uYWwnICsgX2NhcGl0YWxpemUoayk7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtuYW1lXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgb3V0W25hbWVdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZykpIHtcbiAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGssIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogYXJyYXlPZiBjaGVja3MgKi9cbiAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgdmFyIG5hbWUgPSAnYXJyYXlPZicgKyBfY2FwaXRhbGl6ZShrKTtcbiAgICAgICAgaWYgKG5kZWJ1Zykge1xuICAgICAgICAgICAgb3V0W25hbWVdID0gbm9vcDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2tdO1xuICAgICAgICB2YXIgZXhwZWN0ZWQgPSAnWycgKyBrICsgJ10nO1xuICAgICAgICBvdXRbbmFtZV0gPSBmdW5jdGlvbiAoYXJnLCBtc2cpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBleHBlY3RlZCwgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXR5cGUuY2hlY2soYXJnW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGV4cGVjdGVkLCB0eXBlLm9wZXJhdG9yLCBhcmcsIHR5cGUuYWN0dWFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKiBvcHRpb25hbEFycmF5T2YgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBuYW1lID0gJ29wdGlvbmFsQXJyYXlPZicgKyBfY2FwaXRhbGl6ZShrKTtcbiAgICAgICAgaWYgKG5kZWJ1Zykge1xuICAgICAgICAgICAgb3V0W25hbWVdID0gbm9vcDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2tdO1xuICAgICAgICB2YXIgZXhwZWN0ZWQgPSAnWycgKyBrICsgJ10nO1xuICAgICAgICBvdXRbbmFtZV0gPSBmdW5jdGlvbiAoYXJnLCBtc2cpIHtcbiAgICAgICAgICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgZXhwZWN0ZWQsIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZ1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBleHBlY3RlZCwgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogcmUtZXhwb3J0IGJ1aWx0LWluIGFzc2VydGlvbnMgKi9cbiAgICBPYmplY3Qua2V5cyhhc3NlcnQpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaWYgKGsgPT09ICdBc3NlcnRpb25FcnJvcicpIHtcbiAgICAgICAgICAgIG91dFtrXSA9IGFzc2VydFtrXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmRlYnVnKSB7XG4gICAgICAgICAgICBvdXRba10gPSBub29wO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG91dFtrXSA9IGFzc2VydFtrXTtcbiAgICB9KTtcblxuICAgIC8qIGV4cG9ydCBvdXJzZWx2ZXMgKGZvciB1bml0IHRlc3RzIF9vbmx5XykgKi9cbiAgICBvdXQuX3NldEV4cG9ydHMgPSBfc2V0RXhwb3J0cztcblxuICAgIHJldHVybiBvdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldEV4cG9ydHMocHJvY2Vzcy5lbnYuTk9ERV9OREVCVUcpO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3RyaW5nYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTdHJpbmcoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTdHJpbmcoMSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8XG4gICAgKCFpc0FycmF5KHZhbHVlKSAmJiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN0cmluZ1RhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTdHJpbmc7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNVbmRlZmluZWQodm9pZCAwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVW5kZWZpbmVkKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNVbmRlZmluZWQ7XG4iLCJ2YXIgYm4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGJyb3JhbmQgPSByZXF1aXJlKCdicm9yYW5kJyk7XG5cbmZ1bmN0aW9uIE1pbGxlclJhYmluKHJhbmQpIHtcbiAgdGhpcy5yYW5kID0gcmFuZCB8fCBuZXcgYnJvcmFuZC5SYW5kKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IE1pbGxlclJhYmluO1xuXG5NaWxsZXJSYWJpbi5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocmFuZCkge1xuICByZXR1cm4gbmV3IE1pbGxlclJhYmluKHJhbmQpO1xufTtcblxuTWlsbGVyUmFiaW4ucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICB2YXIgbGVuID0gbi5iaXRMZW5ndGgoKTtcbiAgdmFyIGJ1ZiA9IHRoaXMucmFuZC5nZW5lcmF0ZShNYXRoLmNlaWwobGVuIC8gOCkpO1xuXG4gIC8vIFNldCBsb3cgYml0c1xuICBidWZbMF0gfD0gMztcblxuICAvLyBNYXNrIGhpZ2ggYml0c1xuICB2YXIgbWFzayA9IGxlbiAmIDB4NztcbiAgaWYgKG1hc2sgIT09IDApXG4gICAgYnVmW2J1Zi5sZW5ndGggLSAxXSA+Pj0gNyAtIG1hc2s7XG5cbiAgcmV0dXJuIG5ldyBibihidWYpO1xufVxuXG5NaWxsZXJSYWJpbi5wcm90b3R5cGUudGVzdCA9IGZ1bmN0aW9uIHRlc3QobiwgaywgY2IpIHtcbiAgdmFyIGxlbiA9IG4uYml0TGVuZ3RoKCk7XG4gIHZhciByZWQgPSBibi5tb250KG4pO1xuICB2YXIgcm9uZSA9IG5ldyBibigxKS50b1JlZChyZWQpO1xuXG4gIGlmICghaylcbiAgICBrID0gTWF0aC5tYXgoMSwgKGxlbiAvIDQ4KSB8IDApO1xuXG4gIC8vIEZpbmQgZCBhbmQgcywgKG4gLSAxKSA9ICgyIF4gcykgKiBkO1xuICB2YXIgbjEgPSBuLnN1Ym4oMSk7XG4gIHZhciBuMiA9IG4xLnN1Ym4oMSk7XG4gIGZvciAodmFyIHMgPSAwOyAhbjEudGVzdG4ocyk7IHMrKykge31cbiAgdmFyIGQgPSBuLnNocm4ocyk7XG5cbiAgdmFyIHJuMSA9IG4xLnRvUmVkKHJlZCk7XG5cbiAgdmFyIHByaW1lID0gdHJ1ZTtcbiAgZm9yICg7IGsgPiAwOyBrLS0pIHtcbiAgICB2YXIgYSA9IHRoaXMuX3JhbmQobjIpO1xuICAgIGlmIChjYilcbiAgICAgIGNiKGEpO1xuXG4gICAgdmFyIHggPSBhLnRvUmVkKHJlZCkucmVkUG93KGQpO1xuICAgIGlmICh4LmNtcChyb25lKSA9PT0gMCB8fCB4LmNtcChybjEpID09PSAwKVxuICAgICAgY29udGludWU7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHM7IGkrKykge1xuICAgICAgeCA9IHgucmVkU3FyKCk7XG5cbiAgICAgIGlmICh4LmNtcChyb25lKSA9PT0gMClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHguY21wKHJuMSkgPT09IDApXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChpID09PSBzKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHByaW1lO1xufTtcblxuTWlsbGVyUmFiaW4ucHJvdG90eXBlLmdldERpdmlzb3IgPSBmdW5jdGlvbiBnZXREaXZpc29yKG4sIGspIHtcbiAgdmFyIGxlbiA9IG4uYml0TGVuZ3RoKCk7XG4gIHZhciByZWQgPSBibi5tb250KG4pO1xuICB2YXIgcm9uZSA9IG5ldyBibigxKS50b1JlZChyZWQpO1xuXG4gIGlmICghaylcbiAgICBrID0gTWF0aC5tYXgoMSwgKGxlbiAvIDQ4KSB8IDApO1xuXG4gIC8vIEZpbmQgZCBhbmQgcywgKG4gLSAxKSA9ICgyIF4gcykgKiBkO1xuICB2YXIgbjEgPSBuLnN1Ym4oMSk7XG4gIHZhciBuMiA9IG4xLnN1Ym4oMSk7XG4gIGZvciAodmFyIHMgPSAwOyAhbjEudGVzdG4ocyk7IHMrKykge31cbiAgdmFyIGQgPSBuLnNocm4ocyk7XG5cbiAgdmFyIHJuMSA9IG4xLnRvUmVkKHJlZCk7XG5cbiAgZm9yICg7IGsgPiAwOyBrLS0pIHtcbiAgICB2YXIgYSA9IHRoaXMuX3JhbmQobjIpO1xuXG4gICAgdmFyIGcgPSBuLmdjZChhKTtcbiAgICBpZiAoZy5jbXBuKDEpICE9PSAwKVxuICAgICAgcmV0dXJuIGc7XG5cbiAgICB2YXIgeCA9IGEudG9SZWQocmVkKS5yZWRQb3coZCk7XG4gICAgaWYgKHguY21wKHJvbmUpID09PSAwIHx8IHguY21wKHJuMSkgPT09IDApXG4gICAgICBjb250aW51ZTtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgczsgaSsrKSB7XG4gICAgICB4ID0geC5yZWRTcXIoKTtcblxuICAgICAgaWYgKHguY21wKHJvbmUpID09PSAwKVxuICAgICAgICByZXR1cm4geC5mcm9tUmVkKCkuc3VibigxKS5nY2Qobik7XG4gICAgICBpZiAoeC5jbXAocm4xKSA9PT0gMClcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IHMpIHtcbiAgICAgIHggPSB4LnJlZFNxcigpO1xuICAgICAgcmV0dXJuIHguZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKG4pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiYXBwbGljYXRpb24vMWQtaW50ZXJsZWF2ZWQtcGFyaXR5ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uLzNncGRhc2gtcW9lLXJlcG9ydCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vM2dwcC1pbXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2EybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hY3RpdmVtZXNzYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tY29zdG1hcCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1jb3N0bWFwZmlsdGVyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWRpcmVjdG9yeStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1lbmRwb2ludGNvc3QranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tZW5kcG9pbnRjb3N0cGFyYW1zK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWVuZHBvaW50cHJvcCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1lbmRwb2ludHByb3BwYXJhbXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tZXJyb3IranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tbmV0d29ya21hcCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1uZXR3b3JrbWFwZmlsdGVyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYW5kcmV3LWluc2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hcHBsZWZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXBwbGl4d2FyZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRmeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdG9tK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXRvbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0b21jYXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXRvbWNhdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0b21kZWxldGVkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdG9taWNtYWlsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0b21zdmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXRvbXN2Y1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0eG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F1dGgtcG9saWN5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9iYWNuZXQteGRkK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9iYXRjaC1zbXRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Jkb2NcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiZG9jXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYmVlcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2FsZW5kYXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NhbGVuZGFyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jYWxsLWNvbXBsZXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2Fscy0xODQwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2NtcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2N4bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2N4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZGZ4K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG1pLWNhcGFiaWxpdHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZG1pYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkbWktY29udGFpbmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RtaWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG1pLWRvbWFpblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkbWlkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2RtaS1vYmplY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZG1pb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkbWktcXVldWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZG1pcVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkbmlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2VhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NlYS0yMDE4K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZWxsbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nmd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jbHVlX2luZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Ntc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jbnJwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb2FwLWdyb3VwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb2FwLXBheWxvYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY29tbW9uZ3JvdW5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NvbmZlcmVuY2UtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY29zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb3NlLWtleVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb3NlLWtleS1zZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3BsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jc3JhdHRyc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jc3RhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jc3RhZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3N2bStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3Utc2VlbWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImN1XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY3liZXJjYXNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RhcnRcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kYXNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rhc2hkZWx0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kYXZtb3VudCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkYXZtb3VudFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RjYS1yZnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RlYy1keFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kaWFsb2ctaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGljb21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGljb20ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RpY29tK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kaWlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGl0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Ruc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kb2Nib29rK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGJrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZHNrcHAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rzc2MrZGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHNzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rzc2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGRzc2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kdmNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVjbWFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lZGktY29uc2VudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lZGkteDEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VkaWZhY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZWZpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLmNvbW1lbnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLmNvbnRyb2wreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLmRldmljZWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLmVjYWxsLm1zZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5wcm92aWRlcmluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLnNlcnZpY2VpbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5zdWJzY3JpYmVyaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEudmVkcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1tYSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlbW1hXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1vdGlvbm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbmNhcHJ0cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lcHAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VwdWIremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXB1YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VzaG9wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2V4aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV4aVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Zhc3RpbmZvc2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Zhc3Rzb2FwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZkdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZml0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mb250LXNmbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZm9udC10ZHBmclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBmclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZvbnQtd29mZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndvZmZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mb250LXdvZmYyXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid29mZjJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mcmFtZXdvcmstYXR0cmlidXRlcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ2VvK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdlb2pzb25cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9nZW8ranNvbi1zZXFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2dweCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdweFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2d4ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3hmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9oMjI0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2hlbGQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2h0dHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaHlwZXJzdHVkaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGtcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pYmUta2V5LXJlcXVlc3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2liZS1wa2ctcmVwbHkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2liZS1wcC1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lnZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW0taXNjb21wb3NpbmcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2luZGV4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2luZGV4LmNtZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pbmRleC5vYmpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW5kZXgucmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW5kZXgudm5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lua21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlua1wiLFwiaW5rbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pb3RwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lwZml4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXBmaXhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pcHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaXN1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pdHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2phdmEtYXJjaGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamFyXCIsXCJ3YXJcIixcImVhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2phdmEtc2VyaWFsaXplZC1vYmplY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2phdmEtdm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsYXNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pvc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vam9zZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanJkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpzb25cIixcIm1hcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pzb24tc2VxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pzb241XCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianNvbjVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qc29ubWwranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc29ubWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qd2sranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2p3ay1zZXQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2p3dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9rcG1sLXJlcXVlc3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2twbWwtcmVzcG9uc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpzb25sZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xncit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbGluay1mb3JtYXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbG9hZC1jb250cm9sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9sb3N0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxvc3R4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9sb3N0c3luYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbHhmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hYy1iaW5oZXg0MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhxeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hYy1jb21wYWN0cHJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYWN3cml0ZWlpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hZHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWFkc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hbmlmZXN0K2pzb25cIjoge1xuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2VibWFuaWZlc3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYXJjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXJjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWFyY3htbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcmN4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWF0aGVtYXRpY2FcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYVwiLFwibmJcIixcIm1iXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWF0aG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1hdGhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhtbC1jb250ZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYXRobWwtcHJlc2VudGF0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLWFzc29jaWF0ZWQtcHJvY2VkdXJlLWRlc2NyaXB0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLWRlcmVnaXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtZW52ZWxvcGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtbXNrK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLW1zay1yZXNwb25zZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1wcm90ZWN0aW9uLWRlc2NyaXB0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXJlY2VwdGlvbi1yZXBvcnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtcmVnaXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtcmVnaXN0ZXItcmVzcG9uc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtc2NoZWR1bGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtdXNlci1zZXJ2aWNlLWRlc2NyaXB0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm94XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWJveFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21lZGlhLXBvbGljeS1kYXRhc2V0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZWRpYV9jb250cm9sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZWRpYXNlcnZlcmNvbnRyb2wreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXNjbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZXJnZS1wYXRjaCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWV0YWxpbmsreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZXRhbGlua1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ldGFsaW5rNCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZXRhNFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ldHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWV0c1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21mNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9taWtleVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tb2RzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1vZHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tb3NzLWtleXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9zcy1zaWduYXR1cmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9zc2tleS1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21vc3NrZXktcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcDIxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTIxXCIsXCJtcDIxXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXA0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXA0c1wiLFwibTRwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXBlZzQtZ2VuZXJpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcGVnNC1pb2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXBlZzQtaW9kLXhtdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcmItY29uc3VtZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21yYi1wdWJsaXNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tc2MtaXZyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tc2MtbWl4ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21zd29yZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvY1wiLFwiZG90XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXVkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9teGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uLXF1YWRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL24tdHJpcGxlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uYXNkYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL25ld3MtY2hlY2tncm91cHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbmV3cy1ncm91cGluZm9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbmV3cy10cmFuc21pc3Npb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbmxzbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL25zc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vY3NwLXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2NzcC1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiaW5cIixcImRtc1wiLFwibHJmXCIsXCJtYXJcIixcInNvXCIsXCJkaXN0XCIsXCJkaXN0elwiLFwicGtnXCIsXCJicGtcIixcImR1bXBcIixcImVsY1wiLFwiZGVwbG95XCIsXCJleGVcIixcImRsbFwiLFwiZGViXCIsXCJkbWdcIixcImlzb1wiLFwiaW1nXCIsXCJtc2lcIixcIm1zcFwiLFwibXNtXCIsXCJidWZmZXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vZGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vZHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2VicHMtcGFja2FnZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvcGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vZ2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZ3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vbWRvYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9tZG9jXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb25lbm90ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib25ldG9jXCIsXCJvbmV0b2MyXCIsXCJvbmV0bXBcIixcIm9uZXBrZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL294cHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJveHBzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcDJwLW92ZXJsYXkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wYXRjaC1vcHMtZXJyb3IreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGVyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BncC1lbmNyeXB0ZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwZ3BcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wZ3Ata2V5c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXNjXCIsXCJzaWdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9waWNzLXJ1bGVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcmZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9waWRmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9waWRmLWRpZmYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BrY3MxMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInAxMFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BrY3MxMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzNy1taW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicDdtXCIsXCJwN2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwN3NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInA4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGtpeC1hdHRyLWNlcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BraXgtY2VydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNlclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BraXgtY3JsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3JsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGtpeC1wa2lwYXRoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGtpcGF0aFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BraXhjbXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwa2lcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wbHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGxzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcG9jLXNldHRpbmdzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaVwiLFwiZXBzXCIsXCJwc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bwc3AtdHJhY2tlcitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJvYmxlbStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJvYmxlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJvdmVuYW5jZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLmFsdmVzdHJhbmQudGl0cmF4LXNoZWV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5jd3dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjd3dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcnMuaHB1Yit6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLm5wcmVuZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcnMucGx1Y2tlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcnMucmRmLXhtbC1jcnlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcnMueHNmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wc2tjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBza2N4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9xc2lnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JhcHRvcmZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZGFwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZGYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyZGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZWdpbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJpZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JlbGF4LW5nLWNvbXBhY3Qtc3ludGF4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicm5jXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmVtb3RlLXByaW50aW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JlcHV0b24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMtZGlmZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jpc2Nvc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ybG1pK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ybHMtc2VydmljZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ycGtpLWdob3N0YnVzdGVyc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdiclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jwa2ktbWFuaWZlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZnRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ycGtpLXJvYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJvYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jwa2ktdXBkb3duXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JzZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJzZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jzcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJydGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ydHBsb29wYmFja1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ydHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2FtbGFzc2VydGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2FtbG1ldGFkYXRhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zYm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNibWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zY2FpcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2NpbStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2N2cC1jdi1yZXF1ZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2NxXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2N2cC1jdi1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjdnAtdnAtcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNwcVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjdnAtdnAtcmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NlcC1leGlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2Vzc2lvbi1pbmZvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NldC1wYXltZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NldC1wYXltZW50LWluaXRpYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZXRwYXlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXQtcmVnaXN0cmF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NldC1yZWdpc3RyYXRpb24taW5pdGlhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNldHJlZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NnbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2dtbC1vcGVuLWNhdGFsb2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2hmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNoZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NpZXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NpbXBsZS1maWx0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NpbXBsZS1tZXNzYWdlLXN1bW1hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2ltcGxlc3ltYm9sY29udGFpbmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NtaWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc21pbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbWlcIixcInNtaWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zbXB0ZTMzNm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc29hcCtmYXN0aW5mb3NldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zb2FwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NwYXJxbC1xdWVyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJxXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3BhcnFsLXJlc3VsdHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3J4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3Bpcml0cy1ldmVudCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NyZ3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJncmFtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3Jncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJncnhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NydSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcnVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zc2RsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3NkbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NzbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3NtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtYXBleC11cGRhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1hcGV4LXVwZGF0ZS1jb25maXJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtY29tbXVuaXR5LXVwZGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLWNvbW11bml0eS11cGRhdGUtY29uZmlybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLWVycm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtc2VxdWVuY2UtYWRqdXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtc2VxdWVuY2UtYWRqdXN0LWNvbmZpcm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1zdGF0dXMtcXVlcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1zdGF0dXMtcmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC11cGRhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC11cGRhdGUtY29uZmlybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YXJcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90ZWkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGVpXCIsXCJ0ZWljb3JwdXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90aHJhdWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGZpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGltZXN0YW1wLXF1ZXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RpbWVzdGFtcC1yZXBseVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90aW1lc3RhbXBlZC1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHNkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdHJpZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90dG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90dmUtdHJpZ2dlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91bHBmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdXJjLWdycHNoZWV0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91cmMtcmVzc2hlZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3VyYy10YXJnZXRkZXNjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91cmMtdWlzb2NrZXRkZXNjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92Y2FyZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdmNhcmQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZlbW1pXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZpdmlkZW5jZS5zY3JpcHRmaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAtcHJvc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLXByb3NlLXBjM2NoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5hY2Nlc3MtdHJhbnNmZXItZXZlbnRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5ic2YreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1pZC1jYWxsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5waWMtYnctbGFyZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwbGJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5waWMtYnctc21hbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwc2JcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5waWMtYnctdmFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHZiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc21zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnNtcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc3J2Y2MtZXh0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zcnZjYy1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zdGF0ZS1hbmQtZXZlbnQtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAudXNzZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAyLmJjbWNzaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAyLnNtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcDIudGNhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRjYXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2xpZ2h0c3NvZnR3YXJlLmltYWdlc2NhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM20ucG9zdC1pdC1ub3Rlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB3blwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY2NwYWMuc2ltcGx5LmFzb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFzb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY2NwYWMuc2ltcGx5LmltcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImltcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY3Vjb2JvbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFjdVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY3Vjb3JwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXRjXCIsXCJhY3V0Y1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5haXItYXBwbGljYXRpb24taW5zdGFsbGVyLXBhY2thZ2UremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUuZmxhc2gubW92aWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLmZvcm1zY2VudHJhbC5mY2R0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmNkdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5meHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmeHBcIixcImZ4cGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUucGFydGlhbC11cGxvYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLnhkcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUueGZkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhmZGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWV0aGVyLmltcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWgtYmFyY29kZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWhlYWQuc3BhY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaGVhZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5haXJ6aXAuZmlsZXNlY3VyZS5hemZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhemZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWlyemlwLmZpbGVzZWN1cmUuYXpzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXpzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtYXpvbi5lYm9va1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXp3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtYXpvbi5tb2JpOC1lYm9va1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYW1lcmljYW5keW5hbWljcy5hY2NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhY2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYW1pZ2EuYW1pXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYW1pXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtdW5kc2VuLm1hemUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLnBhY2thZ2UtYXJjaGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXBrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFua2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFuc2VyLXdlYi1jZXJ0aWZpY2F0ZS1pc3N1ZS1pbml0aWF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2lpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFuc2VyLXdlYi1mdW5kcy10cmFuc2Zlci1pbml0aWF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmdGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYW50aXguZ2FtZS1jb21wb25lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhdHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBhY2hlLnRocmlmdC5iaW5hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwYWNoZS50aHJpZnQuY29tcGFjdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBhY2hlLnRocmlmdC5qc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcGkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcG90aGVrZW5kZS5yZXNlcnZhdGlvbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwcGxlLmluc3RhbGxlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGtnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtM3U4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwcGxlLnBrcGFzc1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBrcGFzc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcmFzdHJhLnN3aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXJpc3RhbmV0d29ya3Muc3dpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3dpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFydHNxdWFyZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXN0cmFlYS1zb2Z0d2FyZS5pb3RhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaW90YVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hdWRpb2dyYXBoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWVwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmF1dG9wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hdmlzdGFyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYmFsc2FtaXEuYm1tbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJhbHNhbWlxLmJtcHJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJla2l0enVyLXN0ZWNoK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYmlvcGF4LnJkZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJsdWVpY2UubXVsdGlwYXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJsdWV0b290aC5lcC5vb2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJsdWV0b290aC5sZS5vb2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJtaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJtaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5idXNpbmVzc29iamVjdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyZXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2FiLWpzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNhbm9uLWNwZGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNhbm9uLWxpcHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNlbmRpby50aGlubGluYy5jbGllbnRjb25mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jZW50dXJ5LXN5c3RlbXMudGNwX3N0cmVhbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2hlbWRyYXcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2R4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2hlc3MtcGduXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaGlwbnV0cy5rYXJhb2tlLW1tZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1tZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaW5kZXJlbGxhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2R5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNpcnBhY2suaXNkbi1leHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNpdGF0aW9uc3R5bGVzLnN0eWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2xheW1vcmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbGFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2xvYW50by5ycDlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJycDlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2xvbmsuYzRncm91cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImM0Z1wiLFwiYzRkXCIsXCJjNGZcIixcImM0cFwiLFwiYzR1XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNsdWV0cnVzdC5jYXJ0b21vYmlsZS1jb25maWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjMTFhbWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2x1ZXRydXN0LmNhcnRvbW9iaWxlLWNvbmZpZy1wa2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjMTFhbXpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29mZmVlc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsZWN0aW9uK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29sbGVjdGlvbi5kb2MranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsZWN0aW9uLm5leHQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb21pY2Jvb2sremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb21tZXJjZS1iYXR0ZWxsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29tbW9uc3BhY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjc3BcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29udGFjdC5jbXNnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RiY21zZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb3Jlb3MuaWduaXRpb24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb3Ntb2NhbGxlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNtY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xreFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLmtleWJvYXJkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xra1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLnBhbGV0dGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbGtwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNyaWNrLmNsaWNrZXIudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbGt0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNyaWNrLmNsaWNrZXIud29yZGJhbmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbGt3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNyaXRpY2FsdG9vbHMud2JzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndic1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdGMtcG9zbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3RjdC53cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcGRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXBvc3RzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcHBkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHBkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcmFzdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXJhd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3VybC5jYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXJsLnBjdXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwY3VybFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jeWFuLmRlYW4ucm9vdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN5YmFua1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZDJsLmNvdXJzZXBhY2thZ2UxcDAremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkYXJ0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRhdGEtdmlzaW9uLnJkelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJkelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kYXRhcmVzb3VyY2UranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZWJpYW4uYmluYXJ5LXBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlY2UuZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2ZlwiLFwidXZ2ZlwiLFwidXZkXCIsXCJ1dnZkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlY2UudHRtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnRcIixcInV2dnRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGVjZS51bnNwZWNpZmllZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2eFwiLFwidXZ2eFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZWNlLnppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2elwiLFwidXZ2elwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZW5vdm8uZmNzZWxheW91dC1saW5rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmVfbGF1bmNoXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlc211bWUtbW92aWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlc211bWUubW92aWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGlyLWJpLnBsYXRlLWRsLW5vc3VmZml4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kbS5kZWxlZ2F0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZG5hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZG5hXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRvY3VtZW50K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZG9sYnkubWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZG9sYnkubW9iaWxlLjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRvbGJ5Lm1vYmlsZS4yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kb3JlbWlyLnNjb3JlY2xvdWQtYmluYXJ5LWRvY3VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kcGdyYXBoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHBnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRyZWFtZmFjdG9yeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRmYWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHJpdmUranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kcy1rZXlwb2ludFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3B4eFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdGcubG9jYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR0Zy5sb2NhbC5mbGFzaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHRnLmxvY2FsLmh0bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5haXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaXRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmR2YmpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5lc2djb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcGRjZGZ0bm90aWZhY2Nlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcGRjZXNnYWNjZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuaXBkY2VzZ2FjY2VzczJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcGRjZXNncGRkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuaXBkY3JvYW1pbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcHR2LmFsZmVjLWJhc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcHR2LmFsZmVjLWVuaGFuY2VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtYWdncmVnYXRlLXJvb3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtY29udGFpbmVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWdlbmVyaWMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtaWEtbXNnbGlzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pYS1yZWdpc3RyYXRpb24tcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pYS1yZWdpc3RyYXRpb24tcmVzcG9uc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtaW5pdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5wZnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5zZXJ2aWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3ZjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR4clwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHluYWdlb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdlb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kenJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVhc3lrYXJhb2tlLmNkZ2Rvd25sb2FkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY2Rpcy11cGRhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5jaGFydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1hZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uZmlsZXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5maWxldXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uc2VyaWVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uc2VyaWVzcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNvd2luLnNlcmllc3VwZGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWZpLmltZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWZpLmlzb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZW1jbGllbnQuYWNjZXNzcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVubGl2ZW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJubWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZW5waGFzZS5lbnZveVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXByaW50cy5kYXRhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXBzb24uZXNmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXNmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVwc29uLm1zZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5xdWlja2FuaW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicWFtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVwc29uLnNhbHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXBzb24uc3NmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3NmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVyaWNzc29uLnF1aWNrY2FsbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXNwYXNzLWVzcGFzcyt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVzemlnbm8zK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzM1wiLFwiZXQzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuYW9jK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5hc2ljLWUremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmFzaWMtcyt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuY3VnK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2Y29tbWFuZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dmRpc2NvdmVyeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dnByb2ZpbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZzYWQtYmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZzYWQtY29kK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2FkLW5wdnIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZzZXJ2aWNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c3luYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dnVlcHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kubWNpZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kubWhlZzVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kub3ZlcmxvYWQtY29udHJvbC1wb2xpY3ktZGF0YXNldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kucHN0bit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuc2NpK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5zaW1zZXJ2cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kudGltZXN0YW1wLXRva2VuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnRzbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kudHNsLmRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXVkb3JhLmRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV6cGl4LWFsYnVtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXoyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV6cGl4LXBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlejNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZi1zZWN1cmUubW9iaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mYXN0Y29weS1kaXNrLWltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmZGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmRzbi5tc2VlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zZWVkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZkc24uc2VlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlZWRcIixcImRhdGFsZXNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZmc25zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5maWxtaXQuemZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5maW50c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmlyZW1vbmtleXMuY2xvdWRjZWxsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mbG9ncmFwaGl0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3BoXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZsdXh0aW1lLmNsaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmdGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZm9udC1mb250Zm9yZ2Utc2ZkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mcmFtZW1ha2VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZm1cIixcImZyYW1lXCIsXCJtYWtlclwiLFwiYm9va1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mcm9nYW5zLmZuY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZuY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mcm9nYW5zLmx0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImx0ZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mc2Mud2VibGF1bmNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnNjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5czJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYTJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5czNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYTNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5c2dwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmc1XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXNwcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiaDJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmFydC1leFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmFydDRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kZGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRvY3V3b3Jrc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guZG9jdXdvcmtzLmJpbmRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhiZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guZG9jdXdvcmtzLmNvbnRhaW5lclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmhicGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1dC1taXNuZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1enp5c2hlZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmenNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2Vub21hdGl4LnR1eGVkb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR4ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW8ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9jdWJlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VvZ2VicmEuZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdnYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS50b29sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2d0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb21ldHJ5LWV4cGxvcmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2V4XCIsXCJncmVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VvbmV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd4dFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9wbGFuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZzJ3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb3NwYWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZzN3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlcmJlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2xvYmFscGxhdGZvcm0uY2FyZC1jb250ZW50LW1ndFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2xvYmFscGxhdGZvcm0uY2FyZC1jb250ZW50LW1ndC1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ214XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ214XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLmRvY3VtZW50XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2RvY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5wcmVzZW50YXRpb25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnc2xpZGVzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLnNwcmVhZHNoZWV0XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3NoZWV0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1lYXJ0aC5rbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWVhcnRoLmttelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImttelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb3Yuc2suZS1mb3JtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ292LnNrLmUtZm9ybSt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvdi5zay54bWxkYXRhY29udGFpbmVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3JhZmVxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3FmXCIsXCJncXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3JpZG1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtYWNjb3VudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdhY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtaGVscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdoZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtaWRlbnRpdHktbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdpbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtaW5qZWN0b3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJncnZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLXRvb2wtbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd0bVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtdG9vbC10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRwbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtdmNhcmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Y2dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGFsK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGFsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhhbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oYW5kaGVsZC1lbnRlcnRhaW5tZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInptbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oYmNpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGJjaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oYytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhjbC1iaXJlcG9ydHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhkdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGVyb2t1K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGhlLmxlc3Nvbi1wbGF5ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsZXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtaHBnbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhwZ2xcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtaHBpZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhwaWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtaHBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHBzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLWpseXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqbHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtcGNsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLXBjbHhsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNseGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHR0cGhvbmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh5ZHJvc3RhdGl4LnNvZi1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2ZkLWhkc3R4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh5cGVyZHJpdmUranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oem4tM2QtY3Jvc3N3b3JkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0uYWZwbGluZWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlibS5lbGVjdHJvbmljLW1lZGlhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0ubWluaXBheVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1weVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0ubW9kY2FwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWZwXCIsXCJsaXN0YWZwXCIsXCJsaXN0MzgyMFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0ucmlnaHRzLW1hbmFnZW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpcm1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWJtLnNlY3VyZS1jb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pY2Nwcm9maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWNjXCIsXCJpY21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWVlZS4xOTA1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pZ2xvYWRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlnbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbWFnZW1ldGVyLmltYWdlK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1tZXJ2aXNpb24taXZwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXZwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltbWVydmlzaW9uLWl2dVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIml2dVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMuaW1zY2N2MXAxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMuaW1zY2N2MXAyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMuaW1zY2N2MXAzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMubGlzLnYyLnJlc3VsdCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5sdGkudjIudG9vbGNvbnN1bWVycHJvZmlsZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5sdGkudjIudG9vbHByb3h5K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmx0aS52Mi50b29scHJveHkuaWQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xzZXR0aW5ncytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5sdGkudjIudG9vbHNldHRpbmdzLnNpbXBsZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmluZm9ybWVkY29udHJvbC5ybXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbmZvcm1peC12aXNpb25hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmluZm90ZWNoLnByb2plY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmluZm90ZWNoLnByb2plY3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbm5vcGF0aC53YW1wLm5vdGlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW5zb3JzLmlnbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlnbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbnRlcmNvbi5mb3JtbmV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHB3XCIsXCJ4cHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW50ZXJnZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpMmdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW50ZXJ0cnVzdC5kaWdpYm94XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbnRlcnRydXN0Lm5uY3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmludHUucWJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicWJvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmludHUucWZ4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicWZ4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIuY2F0YWxvZ2l0ZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcHRjLmcyLmNvbmNlcHRpdGVtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5rbm93bGVkZ2VpdGVtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5uZXdzaXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIubmV3c21lc3NhZ2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcHRjLmcyLnBhY2thZ2VpdGVtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5wbGFubmluZ2l0ZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcHVucGx1Z2dlZC5yY3Byb2ZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyY3Byb2ZpbGVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXJlcG9zaXRvcnkucGFja2FnZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpcnBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXMteHByXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHByXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlzYWMuZmNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmphbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImphbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1kaXJlY3Rvcnktc2VydmljZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtanBuc3RvcmUtd2FrZXVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1wYXltZW50LXdha2V1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtcmVnaXN0cmF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1yZWdpc3RyYXRpb24td2FrZXVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1zZXRzdG9yZS13YWtldXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmphcGFubmV0LXZlcmlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtdmVyaWZpY2F0aW9uLXdha2V1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamNwLmphdmFtZS5taWRsZXQtcm1zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicm1zXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmppc3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqaXNwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmpvb3N0LmpvZGEtYXJjaGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpvZGFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuanNrLmlzZG4tbmduXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rYWhvb3R6XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3R6XCIsXCJrdHJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmthcmJvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImthcmJvblwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2NoYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2hydFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2Zvcm11bGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrZm9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmtpdmlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmx3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rb250b3VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia29uXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rcHJlc2VudGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3ByXCIsXCJrcHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmtzcHJlYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrc3BcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmt3b3JkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3dkXCIsXCJrd3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2VuYW1lYWFwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh0a2VcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2lkc3BpcmF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia2lhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtpbmFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia25lXCIsXCJrbnBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua29hblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNrcFwiLFwic2tkXCIsXCJza3RcIixcInNrbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rb2Rhay1kZXNjcmlwdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3NlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxhcy5sYXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sYXMubGFzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxhc3htbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5saWJlcnR5LXJlcXVlc3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sbGFtYWdyYXBoaWNzLmxpZmUtYmFsYW5jZS5kZXNrdG9wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGJkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxsYW1hZ3JhcGhpY3MubGlmZS1iYWxhbmNlLmV4Y2hhbmdlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxiZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy0xLTItM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjEyM1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy1hcHByb2FjaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy1mcmVlbGFuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcmVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtbm90ZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuc2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtb3JnYW5pemVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3JnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxvdHVzLXNjcmVlbmNhbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy13b3JkcHJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibHdwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hY3BvcnRzLnBvcnRwa2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwb3J0cGtnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hcGJveC12ZWN0b3ItdGlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWFybGluLmRybS5hY3Rpb250b2tlbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hcmxpbi5kcm0uY29uZnRva2VuK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWFybGluLmRybS5saWNlbnNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWFybGluLmRybS5tZGNmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXNvbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1heG1pbmQubWF4bWluZC1kYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWNkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1lZGNhbGNkYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWMxXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1lZGlhc3RhdGlvbi5jZGtleVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNka2V5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1lcmlkaWFuLXNsaW5nc2hvdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWZlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm13ZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tZm1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWZtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3JvK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWljcm9ncmFmeC5mbG9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbG9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWljcm9ncmFmeC5pZ3hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpZ3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LnBvcnRhYmxlLWV4ZWN1dGFibGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pZWxlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWlmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWlmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pbmlzb2Z0LWhwMzAwMC1zYXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taXRzdWJpc2hpLm1pc3R5LWd1YXJkLnRydXN0d2ViXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMuZGFmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGFmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5kaXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkaXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLm1ia1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ia1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMubXF5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXF5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tc2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2xcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLnBsY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBsY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMudHhmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHhmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vcGh1bi5hcHBsaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wblwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3BodW4uY2VydGlmaWNhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUuYWRzaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLmZpc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLmdvdGFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUua21yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUudHRjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUud2VtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5pcHJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3ppbGxhLnh1bCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInh1bFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy0zbWZkb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtYXJ0Z2FscnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjaWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtYXNmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNhYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1jb2xvci5pY2Nwcm9maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGxzXCIsXCJ4bG1cIixcInhsYVwiLFwieGxjXCIsXCJ4bHRcIixcInhsd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bGFtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bHNiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsc21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGx0bVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlb3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtaHRtbGhlbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjaG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtaW1zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaW1zXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWxybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxybVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZleCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZXRoZW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGhteFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1vcGVudHlwZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXBhY2thZ2Uub2JmdXNjYXRlZC1vcGVudHlwZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wa2kuc2VjY2F0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjYXRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcGtpLnN0bFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXBsYXlyZWFkeS5pbml0aWF0b3IreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHB0XCIsXCJwcHNcIixcInBvdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LmFkZGluLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwYW1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5wcmVzZW50YXRpb24ubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHB0bVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnNsaWRlLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNsZG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5zbGlkZXNob3cubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHBzbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnRlbXBsYXRlLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBvdG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcHJpbnRkZXZpY2VjYXBhYmlsaXRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wcmludGluZy5wcmludHRpY2tldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcHJpbnRzY2hlbWF0aWNrZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wcm9qZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBwXCIsXCJtcHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtdG5lZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd2luZG93cy5kZXZpY2VwYWlyaW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLm53cHJpbnRpbmcub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLnByaW50ZXJwYWlyaW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLndzZC5vb2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdtZHJtLmxpYy1jaGxnLXJlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd21kcm0ubGljLXJlc3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdtZHJtLm1ldGVyLWNobGctcmVxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13bWRybS5tZXRlci1yZXNwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13b3JkLmRvY3VtZW50Lm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvY21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd29yZC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkb3RtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdvcmtzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3BzXCIsXCJ3a3NcIixcIndjbVwiLFwid2RiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdwbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndwbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy14cHNkb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tc2EtZGlzay1pbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXNlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zZXFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXNpZ25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm11bHRpYWQuY3JlYXRvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXVsdGlhZC5jcmVhdG9yLmNpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXVzaWMtbmlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXVzaWNpYW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXV2ZWUuc3R5bGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc3R5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm15bmZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGFnbGV0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5jZC5jb250cm9sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uY2QucmVmZXJlbmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uZWFyc3QuaW52K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmVydmFuYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmV0ZnB4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uZXVyb2xhbmd1YWdlLm5sdVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5sdVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uaW50ZW5kby5uaXRyby5yb21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5pbnRlbmRvLnNuZXMucm9tXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uaXRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibnRmXCIsXCJuaXRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5vYmxlbmV0LWRpcmVjdG9yeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5uZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2JsZW5ldC1zZWFsZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJubnNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9ibGVuZXQtd2ViXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibm53XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmNhdGFsb2dzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5jb25tbCt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEuY29ubWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5pcHR2LmNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmlzZHMtcmFkaW8tcHJlc2V0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubGFuZG1hcmsrd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmxhbmRtYXJrK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubGFuZG1hcmtjb2xsZWN0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubi1nYWdlLmFjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubi1nYWdlLmRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuZ2RhdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2Uuc3ltYmlhbi5pbnN0YWxsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibi1nYWdlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLm5jZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEucGNkK3dieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5wY2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5yYWRpby1wcmVzZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJycHN0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLnJhZGlvLXByZXNldHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJycHNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmVkbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVkbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub3ZhZGlnbS5lZHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlZHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm92YWRpZ20uZXh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXh0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm50dC1sb2NhbC5jb250ZW50LXNoYXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwuZmlsZS10cmFuc2ZlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubnR0LWxvY2FsLm9nd19yZW1vdGUtYWNjZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwuc2lwLXRhX3JlbW90ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubnR0LWxvY2FsLnNpcC10YV90Y3Bfc3RyZWFtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuY2hhcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmNoYXJ0LXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3RjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5kYXRhYmFzZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZm9ybXVsYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZm9ybXVsYS10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kZnRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmdyYXBoaWNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5ncmFwaGljcy10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90Z1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuaW1hZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmltYWdlLXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3RpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvbi10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90cFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0LXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3RzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2R0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LW1hc3RlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90dFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC13ZWJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2JuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vY2YrY2JvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2Z0bi5sMTBuK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5jb250ZW50YWNjZXNzZG93bmxvYWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmNvbnRlbnRhY2Nlc3NzdHJlYW1pbmcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmNzcGctaGV4YmluYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmRhZS5zdmcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmRhZS54aHRtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9pcGYubWlwcHZjb250cm9sbWVzc2FnZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9pcGYucGFlLmdlbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5zcGRpc2NvdmVyeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9pcGYuc3BkbGlzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9pcGYudWVwcm9maWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi51c2VycHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9scGMtc3VnYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4b1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEtc2N3cy1jb25maWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS1zY3dzLWh0dHAtcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLXNjd3MtaHR0cC1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LmFzc29jaWF0ZWQtcHJvY2VkdXJlLXBhcmFtZXRlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5kcm0tdHJpZ2dlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5pbWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3QubHRrbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0Lm5vdGlmaWNhdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5wcm92aXNpb25pbmd0cmlnZ2VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc2dib290XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc2dkZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zZ2R1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc2ltcGxlLXN5bWJvbC1jb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zbWFydGNhcmQtdHJpZ2dlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zcHJvdit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zdGttXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuY2FiLWFkZHJlc3MtYm9vayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5jYWItZmVhdHVyZS1oYW5kbGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi1wY2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuY2FiLXN1YnMtaW52aXRlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi11c2VyLXByZWZzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmRjZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmRjZGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5kZDIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGQyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5kcm0ucmlzZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5ncm91cC11c2FnZS1saXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmx3bTJtK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmx3bTJtK3RsdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnBhbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2MuZGV0YWlsZWQtcHJvZ3Jlc3MtcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnBvYy5maW5hbC1yZXBvcnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEucG9jLmdyb3Vwcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2MuaW52b2NhdGlvbi1kZXNjcmlwdG9yK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnBvYy5vcHRpbWl6ZWQtcHJvZ3Jlc3MtcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnB1c2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5zY2lkbS5tZXNzYWdlcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS54Y2FwLWRpcmVjdG9yeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYWRzLWVtYWlsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hZHMtZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYWRzLWZvbGRlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYWxvYy1zdXBsLWluaXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9uZXBhZ2VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVuYmxveC5nYW1lK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbmJsb3guZ2FtZS1iaW5hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW5leWUub2ViXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVub2ZmaWNlb3JnLmV4dGVuc2lvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3h0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW5zdHJlZXRtYXAuZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbS1wcm9wZXJ0aWVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9teG1scHJvcGVydGllcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnRzaGFwZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbWNvbG9ycyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtbGF5b3V0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1zdHlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuY29tbWVudGF1dGhvcnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5jb21tZW50cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLmhhbmRvdXRtYXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5ub3Rlc21hc3Rlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLm5vdGVzc2xpZGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcHR4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbi5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc3Byb3BzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbGR4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVsYXlvdXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZW1hc3Rlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlc2hvd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwc3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVzaG93Lm1haW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZXVwZGF0ZWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50YWJsZXN0eWxlcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnRhZ3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG90eFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50ZW1wbGF0ZS5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudmlld3Byb3BzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jYWxjY2hhaW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbW1lbnRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmV4dGVybmFsbGluayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RjYWNoZWRlZmluaXRpb24reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Y2FjaGVyZWNvcmRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdHRhYmxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5xdWVyeXRhYmxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbmhlYWRlcnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9ubG9nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRzdHJpbmdzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsc3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldG1ldGFkYXRhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZXNpbmdsZWNlbGxzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGx0eFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnVzZXJuYW1lcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudm9sYXRpbGVkZXBlbmRlbmNpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWVvdmVycmlkZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbGRyYXdpbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuY29tbWVudHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZG9jeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50Lmdsb3NzYXJ5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudC5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5lbmRub3Rlcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZm9udHRhYmxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5mb290ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmZvb3Rub3Rlcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwubnVtYmVyaW5nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5zZXR0aW5ncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuc3R5bGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC50ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZG90eFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlLm1haW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLndlYnNldHRpbmdzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5jb3JlLXByb3BlcnRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmRpZ2l0YWwtc2lnbmF0dXJlLXhtbHNpZ25hdHVyZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UucmVsYXRpb25zaGlwcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9yYWNsZS5yZXNvdXJjZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9yYW5nZS5pbmRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zYS5uZXRkZXBsb3lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zZ2VvLm1hcGd1aWRlLnBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZ3BcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3NnaS5idW5kbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zZ2kuZHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vc2dpLnN1YnN5c3RlbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vdHBzLmN0LWtpcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm94bGkuY291bnRncmFwaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGFnZXJkdXR5K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGFsbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBkYlwiLFwicHFhXCIsXCJvcHJjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhbm9wbHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhb3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wYW9zLnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wYXdhYWZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwYXdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGNvc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGcuZm9ybWF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBnLm9zYXNsaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVpNlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5waWFjY2Vzcy5hcHBsaWNhdGlvbi1saWNlbmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5waWNzZWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlZmlmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBtaS53aWRnZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3Z1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb2MuZ3JvdXAtYWR2ZXJ0aXNlbWVudCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvY2tldGxlYXJuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGxmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvd2VyYnVpbGRlcjZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwYmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyNi1zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI3LXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvd2VyYnVpbGRlcjc1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI3NS1zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wcmVtaW5ldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHJldmlld3N5c3RlbXMuYm94XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYm94XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnByb3RldXMubWFnYXppbmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZ3pcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHVibGlzaGFyZS1kZWx0YS10cmVlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicXBzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnB2aS5wdGlkMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB0aWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHdnLW11bHRpcGxleGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wd2cteGh0bWwtcHJpbnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5xdWFsY29tbS5icmV3LWFwcC1yZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnF1YXJhbnRhaW5lbmV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInF4ZFwiLFwicXh0XCIsXCJxd2RcIixcInF3dFwiLFwicXhsXCIsXCJxeGJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucXVvYmplY3QtcXVveGRvY3VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1vbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtYXVkaXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtYXVkaXQtY29uZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1hdWRpdC1jb25uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWF1ZGl0LWRpYWxvZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1hdWRpdC1zdHJlYW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtY29uZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2creG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLWJhc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLWZheC1kZXRlY3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLWZheC1zZW5kcmVjdit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctZ3JvdXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLXNwZWVjaCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctdHJhbnNmb3JtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFpbnN0b3IuZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFwaWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmVhbHZuYy5iZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiZWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmVjb3JkYXJlLm11c2ljeG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXhsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJlY29yZGFyZS5tdXNpY3htbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdXNpY3htbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZW5sZWFybi5ybHByaW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yaWcuY3J5cHRvbm90ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNyeXB0b25vdGVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmltLmNvZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY29kXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicm1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucm4tcmVhbG1lZGlhLXZiclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicm12YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yb3V0ZTY2Lmxpbms2Nit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsaW5rNjZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucnMtMjc0eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucnVja3VzLmRvd25sb2FkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zM3Ntc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2FpbGluZ3RyYWNrZXIudHJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zYm0uY2lkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zYm0ubWlkMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2NyaWJ1c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLjNkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLmNzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLmRvY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLmVtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLm1odFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLm5ldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLnBwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLnRpZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZC54bHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZG1lZGlhLnNvZnRzZWFsLmh0bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlYWxlZG1lZGlhLnNvZnRzZWFsLnBkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VlbWFpbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZW1hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VtYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZW1kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VtZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZW1mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VtZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5mb3JtZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlmbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5mb3JtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpdHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQuaW50ZXJjaGFuZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpaWZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQucGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlwa1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaW10ZWNoLW1pbmRtYXBwZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0d2RcIixcInR3ZHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2lyZW4ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zbWFmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibW1mXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNtYXJ0Lm5vdGVib29rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zbWFydC50ZWFjaGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGVhY2hlclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zb2Z0d2FyZTYwMi5maWxsZXIuZm9ybSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNvZnR3YXJlNjAyLmZpbGxlci5mb3JtLXhtbC16aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNvbGVudC5zZGttK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNka21cIixcInNka2RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3BvdGZpcmUuZHhwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHhwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNwb3RmaXJlLnNmc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNmc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zc3MtY29kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zc3MtZHRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zc3MtbnRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uY2FsY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2RjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5kcmF3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZGFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmltcHJlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNkZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ubWF0aFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic21mXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi53cml0ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNkd1wiLFwidm9yXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi53cml0ZXItZ2xvYmFsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZ2xcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RlcG1hbmlhLnBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbXppcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGVwbWFuaWEuc3RlcGNoYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RyZWV0LXN0cmVhbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLndhZGwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmNhbGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4Y1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmNhbGMudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN0Y1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmRyYXdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmRyYXcudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN0ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmltcHJlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4aVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmltcHJlc3MudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN0aVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLm1hdGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4bVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3h3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN1bi54bWwud3JpdGVyLmdsb2JhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3hnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN1bi54bWwud3JpdGVyLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdHdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VzLWNhbGVuZGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3VzXCIsXCJzdXNwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN2ZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN2ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zd2lmdHZpZXctaWNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW1iaWFuLmluc3RhbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpc1wiLFwic2lzeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHNtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbSt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJkbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGRtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbS5ub3RpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbWRkZit3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtZGRmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtdG5kcyt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3luY21sLmRtdG5kcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kcy5ub3RpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRhYmxlc2NoZW1hK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudGFvLmludGVudC1tb2R1bGUtYXJjaGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRhb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50Y3BkdW1wLnBjYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwY2FwXCIsXCJjYXBcIixcImRtcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50bWQubWVkaWFmbGV4LmFwaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudG1vYmlsZS1saXZldHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0bW9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudHJpLm9uZXNvdXJjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudHJpZC50cHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0cHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudHJpc2NhcGUubXhzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXhzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRydWVhcHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0cmFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudHJ1ZWRvY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudWJpc29mdC53ZWJwbGF5ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVmZGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1ZmRcIixcInVmZGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudWlxLnRoZW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXR6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVtYWppblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInVtalwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51bml0eVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInVuaXR5d2ViXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVvbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widW9tbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmFsZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmFsZXJ0LXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmJlYXJlci1jaG9pY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuYmVhcmVyLWNob2ljZS13YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5jYWNoZW9wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmNhY2hlb3Atd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuY2hhbm5lbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5jaGFubmVsLXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0Lmxpc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQubGlzdC13YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0Y21kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0Lmxpc3RjbWQtd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuc2lnbmFsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cmktbWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52YWx2ZS5zb3VyY2UubWF0ZXJpYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZjeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZjeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52ZC1zdHVkeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmVjdG9yd29ya3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlcmltYXRyaXgudmNhc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmlkc29mdC52aWRjb25mZXJlbmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52aXNpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZzZFwiLFwidnN0XCIsXCJ2c3NcIixcInZzd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52aXNpb25hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2aXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudml2aWRlbmNlLnNjcmlwdGZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZzZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53YXAuc2ljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53YXAuc2xjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53YXAud2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3YnhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53YXAud21sY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtbGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLndtbHNjcmlwdGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWxzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZWJ0dXJib1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInd0YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZmEucDJwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZmEud3NjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53aW5kb3dzLmRldmljZXBhaXJpbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndtY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud21mLmJvb3RzdHJhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud29sZnJhbS5tYXRoZW1hdGljYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud29sZnJhbS5tYXRoZW1hdGljYS5wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53b2xmcmFtLnBsYXllclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5icFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53b3JkcGVyZmVjdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndwZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53cWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud3JxLWhwMzAwMC1sYWJlbGxlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud3Quc3RmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnd2LmNzcCt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud3YuY3NwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud3Yuc3NwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueGFjbWwranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC54YXJhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGFyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhmZGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZmRsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhmZGwud2ViZm9ybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1pK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUuY3BrZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUuZHBrZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUucGxhblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUucHBrZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUueGxpbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LWRpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh2ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEuaHYtc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHZzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi12b2ljZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh2cFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEub3BlbnNjb3JlZm9ybWF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3NmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5vcGVuc2NvcmVmb3JtYXQub3NmcHZnK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9zZnB2Z1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEucmVtb3RlLXNldHVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEuc21hZi1hdWRpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNhZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEuc21hZi1waHJhc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLnRocm91Z2gtbmduXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEudHVubmVsLXVkcGVuY2FwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW93ZW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55ZWxsb3dyaXZlci1jdXN0b20tbWVudVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNtcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC56dWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ6aXJcIixcInppcnpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuenphenouZGVjayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ6YXpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92b2ljZXhtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2eG1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdnEtcnRjcHhyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dhdGNoZXJpbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93aG9pc3BwLXF1ZXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dob2lzcHAtcmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd2lkZ2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2d0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd2luaGxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJobHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93aXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dvcmRwZXJmZWN0NS4xXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dzZGwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3NkbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dzcG9saWN5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndzcG9saWN5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCI3elwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYWJpd29yZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWJ3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hY2UtY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hbWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWFwcGxlLWRpc2tpbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZG1nXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hdXRob3J3YXJlLWJpblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWFiXCIsXCJ4MzJcIixcInUzMlwiLFwidm94XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hdXRob3J3YXJlLW1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWFtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hdXRob3J3YXJlLXNlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWFzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1iY3Bpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYmNwaW9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJkb2NcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiZG9jXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1iaXR0b3JyZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0b3JyZW50XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1ibG9yYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYmxiXCIsXCJibG9yYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYnppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYnpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJ6aXAyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiejJcIixcImJvelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2JyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjYnJcIixcImNiYVwiLFwiY2J0XCIsXCJjYnpcIixcImNiN1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2RsaW5rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Y2RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNmcy1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZnNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNoYXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNoYXRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNoZXNzLXBnblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGduXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jaHJvbWUtZXh0ZW5zaW9uXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3J4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jb2NvYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjY29cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNvbXByZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jb25mZXJlbmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuc2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNwaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNwaW9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNzaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3NoXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kZWJcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kZWJpYW4tcGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGViXCIsXCJ1ZGViXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kZ2MtY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGdjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kaXJlY3RvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGlyXCIsXCJkY3JcIixcImR4clwiLFwiY3N0XCIsXCJjY3RcIixcImN4dFwiLFwidzNkXCIsXCJmZ2RcIixcInN3YVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZG9vbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2FkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kdGJuY3greG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuY3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWR0Ym9vayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR0YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZHRicmVzb3VyY2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyZXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWR2aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHZpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1lbnZveVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXZ5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1ldmFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV2YVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1iZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1kb3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtZnJhbWVtYWtlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1naG9zdHNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3NmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWxpYmdyeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1saW51eC1wc2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBzZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1vdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3RmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXBjZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXNuZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic25mXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXNwZWVkb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1zdW5vcy1uZXdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXR0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0dGZcIixcInR0Y1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC10eXBlMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGZhXCIsXCJwZmJcIixcInBmbVwiLFwiYWZtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXZmb250XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mcmVlYXJjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhcmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZ1dHVyZXNwbGFzaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3BsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1nY2EtY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2NhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1nbHVseFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widWx4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1nbnVtZXJpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ251bWVyaWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWdyYW1wcy14bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdyYW1wc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZ3RhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3RhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZ3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtaGRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoZGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWh0dHBkLXBocFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGhwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1pbnN0YWxsLWluc3RydWN0aW9uc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaW5zdGFsbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtaXNvOTY2MC1pbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXNvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1qYXZhLWFyY2hpdmUtZGlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYXJkaWZmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1qYXZhLWpubHAtZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiam5scFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbGF0ZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxhdGV4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1sdWEtYnl0ZWNvZGVcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsdWFjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1semgtY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibHpoXCIsXCJsaGFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1ha2VzZWxmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJ1blwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbWllXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtaWVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1vYmlwb2NrZXQtZWJvb2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInByY1wiLFwibW9iaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXBlZ3VybFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zLWFwcGxpY2F0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhcHBsaWNhdGlvblwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXMtc2hvcnRjdXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxua1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXMtd21kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zLXdtelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid216XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tcy14YmFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4YmFwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc2FjY2Vzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWRiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc2JpbmRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2JkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc2NhcmRmaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zY2xpcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc2Rvcy1wcm9ncmFtXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXhlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc2Rvd25sb2FkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJleGVcIixcImRsbFwiLFwiY29tXCIsXCJiYXRcIixcIm1zaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNtZWRpYXZpZXdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm12YlwiLFwibTEzXCIsXCJtMTRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zbWV0YWZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtZlwiLFwid216XCIsXCJlbWZcIixcImVtelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNtb25leVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibW55XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc3B1Ymxpc2hlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHViXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc3NjaGVkdWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY2RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zdGVybWluYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRybVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXN3cml0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3JpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1uZXRjZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5jXCIsXCJjZGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW5zLXByb3h5LWF1dG9jb25maWdcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBhY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbnpiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuemJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXBlcmxcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGxcIixcInBtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1waWxvdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcmNcIixcInBkYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtcGtjczEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwMTJcIixcInBmeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtcGtjczctY2VydGlmaWNhdGVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwN2JcIixcInNwY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtcGtjczctY2VydHJlcXJlc3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInA3clwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtcmVkaGF0LXBhY2thZ2UtbWFuYWdlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJycG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXJlc2VhcmNoLWluZm8tc3lzdGVtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmlzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zZWFcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc2hhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2hhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzd2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0LWFwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGFwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zcWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNxbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc3R1ZmZpdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2l0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zdHVmZml0eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2l0eFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc3VicmlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcnRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXN2NGNwaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN2NGNwaW9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXN2NGNyY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3Y0Y3JjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10M3ZtLWltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0M1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdGFkc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2FtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10YXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGFyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10Y2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRjbFwiLFwidGtcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXRleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGV4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10ZXgtdGZtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0Zm1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXRleGluZm9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRleGluZm9cIixcInRleGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXRnaWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9ialwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdXN0YXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInVzdGFyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC13YWlzLXNvdXJjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3JjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC13ZWItYXBwLW1hbmlmZXN0K2pzb25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYmFwcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteDUwOS1jYS1jZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZXJcIixcImNydFwiLFwicGVtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC14ZmlnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmaWdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXhsaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGxmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC14cGluc3RhbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteHpcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInh6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC16bWFjaGluZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiejFcIixcInoyXCIsXCJ6M1wiLFwiejRcIixcIno1XCIsXCJ6NlwiLFwiejdcIixcIno4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veDQwMC1icFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94YWNtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGFtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhhbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y2FwLWF0dCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGNhcC1jYXBzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y2FwLWRpZmYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGNhcC1lbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGNhcC1lcnJvcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGNhcC1ucyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGNvbi1jb25mZXJlbmNlLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjb24tY29uZmVyZW5jZS1pbmZvLWRpZmYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hlbmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGVuY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hodG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGh0bWxcIixcInhodFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hodG1sLXZvaWNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG1sXCIsXCJ4c2xcIixcInhzZFwiLFwicm5nXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG1sLWR0ZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHRkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG1sLWV4dGVybmFsLXBhcnNlZC1lbnRpdHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG1sLXBhdGNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94bXBwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94b3AreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4b3BcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94cHJvYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hzbHQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHNsdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hzcGYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4c3BmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veHYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXhtbFwiLFwieGh2bWxcIixcInh2bWxcIixcInh2bVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3lhbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ5YW5nXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veWFuZy1kYXRhK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nLWRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3lhbmctcGF0Y2granNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3lhbmctcGF0Y2greG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3lpbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ5aW5cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi96aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ6aXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi96bGliXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvLzFkLWludGVybGVhdmVkLXBhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby8zMmthZHBjbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby8zZ3BwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiM2dwcFwiXVxuICB9LFxuICBcImF1ZGlvLzNncHAyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2FjM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hZHBjbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWRwXCJdXG4gIH0sXG4gIFwiYXVkaW8vYW1yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2Ftci13YlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hbXItd2IrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2FwdHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vYXNjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2F0cmFjLWFkdmFuY2VkLWxvc3NsZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2F0cmFjLXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vYXRyYWMzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2Jhc2ljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXVcIixcInNuZFwiXVxuICB9LFxuICBcImF1ZGlvL2J2MTZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vYnYzMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9jbGVhcm1vZGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vY25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZGF0MTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZGxzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2Rzci1lczIwMTEwOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9kc3ItZXMyMDIwNTBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZHNyLWVzMjAyMjExXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2Rzci1lczIwMjIxMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9kdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9kdmk0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2VhYzNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZW5jYXBydHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjLXFjcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjYjBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY2IxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmNud1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjbncwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmNudzFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY3diXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmN3YjBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY3diMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZndkcmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MTEtMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzE5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyMjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI2LTE2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjYtMjRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyNi0zMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI2LTQwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyOVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI5MVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI5ZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI5ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nc21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZ3NtLWVmclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nc20taHItMDhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vaWxiY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9pcC1tcl92Mi41XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2lzYWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhdWRpby9sMTZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbDIwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2wyNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhdWRpby9sOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9scGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbWVscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tZWxwMTIwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tZWxwMjQwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tZWxwNjAwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL21pZGlcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1pZFwiLFwibWlkaVwiLFwia2FyXCIsXCJybWlcIl1cbiAgfSxcbiAgXCJhdWRpby9tb2JpbGUteG1mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL21wM1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wM1wiXVxuICB9LFxuICBcImF1ZGlvL21wNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm00YVwiLFwibXA0YVwiXVxuICB9LFxuICBcImF1ZGlvL21wNGEtbGF0bVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tcGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbXBhLXJvYnVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tcGVnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBnYVwiLFwibXAyXCIsXCJtcDJhXCIsXCJtcDNcIixcIm0yYVwiLFwibTNhXCJdXG4gIH0sXG4gIFwiYXVkaW8vbXBlZzQtZ2VuZXJpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tdXNlcGFja1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImF1ZGlvL29nZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9nYVwiLFwib2dnXCIsXCJzcHhcIl1cbiAgfSxcbiAgXCJhdWRpby9vcHVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3Bhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9wY21hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3BjbWEtd2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcGNtdVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9wY211LXdiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3Bycy5zaWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcWNlbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcmFwdG9yZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3JlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ydHAtZW5jLWFlc2NtMTI4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3J0cC1taWRpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3J0cGxvb3BiYWNrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3J0eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9zM21cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInMzbVwiXVxuICB9LFxuICBcImF1ZGlvL3NpbGtcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpbFwiXVxuICB9LFxuICBcImF1ZGlvL3NtdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9zbXYtcWNwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3NtdjBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vc3AtbWlkaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9zcGVleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby90MTQwY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby90MzhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdGVsZXBob25lLWV2ZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3RvbmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdWVtY2xpcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby91bHBmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdmR2aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bXItd2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLjNncHAuaXVmcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuNHNiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5hdWRpb2tvelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuY2VscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuY2lzY28ubnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5jbWxlcy5yYWRpby1ldmVudHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmNucy5hbnAxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5jbnMuaW5mMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZGVjZS5hdWRpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2YVwiLFwidXZ2YVwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5kaWdpdGFsLXdpbmRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW9sXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRsbmEuYWR0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkuaGVhYWMuMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkuaGVhYWMuMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkubWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5kb2xieS5tcHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5LnBsMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkucGwyeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkucGwyelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkucHVsc2UuMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZHJhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHJhXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmR0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR0c1wiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5kdHMuaGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdHNoZFwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5kdmIuZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZXZlcmFkLnBsalwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuaG5zLmF1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5sdWNlbnQudm9pY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsdnBcIl1cbiAgfSxcbiAgXCJhdWRpby92bmQubXMtcGxheXJlYWR5Lm1lZGlhLnB5YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB5YVwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5ub2tpYS5tb2JpbGUteG1mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5ub3J0ZWwudmJrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5udWVyYS5lY2VscDQ4MDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlY2VscDQ4MDBcIl1cbiAgfSxcbiAgXCJhdWRpby92bmQubnVlcmEuZWNlbHA3NDcwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWNlbHA3NDcwXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLm51ZXJhLmVjZWxwOTYwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVjZWxwOTYwMFwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5vY3RlbC5zYmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnFjZWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5yaGV0b3JleC4zMmthZHBjbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQucmlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmlwXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnJuLXJlYWxhdWRpb1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhdWRpby92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwubXBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQudm14LmN2c2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLndhdmVcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXVkaW8vdm9yYmlzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImF1ZGlvL3ZvcmJpcy1jb25maWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vd2F2XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2F2XCJdXG4gIH0sXG4gIFwiYXVkaW8vd2F2ZVwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhdlwiXVxuICB9LFxuICBcImF1ZGlvL3dlYm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYmFcIl1cbiAgfSxcbiAgXCJhdWRpby94LWFhY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWFjXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1haWZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaWZcIixcImFpZmZcIixcImFpZmNcIl1cbiAgfSxcbiAgXCJhdWRpby94LWNhZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2FmXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1mbGFjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbGFjXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tNGFcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTRhXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tYXRyb3NrYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWthXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tcGVndXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtM3VcIl1cbiAgfSxcbiAgXCJhdWRpby94LW1zLXdheFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2F4XCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tcy13bWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtYVwiXVxuICB9LFxuICBcImF1ZGlvL3gtcG4tcmVhbGF1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYW1cIixcInJhXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybXBcIl1cbiAgfSxcbiAgXCJhdWRpby94LXJlYWxhdWRpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYVwiXVxuICB9LFxuICBcImF1ZGlvL3gtdHRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXVkaW8veC13YXZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhdlwiXVxuICB9LFxuICBcImF1ZGlvL3htXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bVwiXVxuICB9LFxuICBcImNoZW1pY2FsL3gtY2R4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZHhcIl1cbiAgfSxcbiAgXCJjaGVtaWNhbC94LWNpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2lmXCJdXG4gIH0sXG4gIFwiY2hlbWljYWwveC1jbWRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbWRmXCJdXG4gIH0sXG4gIFwiY2hlbWljYWwveC1jbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNtbFwiXVxuICB9LFxuICBcImNoZW1pY2FsL3gtY3NtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3NtbFwiXVxuICB9LFxuICBcImNoZW1pY2FsL3gtcGRiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiY2hlbWljYWwveC14eXpcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInh5elwiXVxuICB9LFxuICBcImZvbnQvb3BlbnR5cGVcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90ZlwiXVxuICB9LFxuICBcImltYWdlL2FwbmdcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhcG5nXCJdXG4gIH0sXG4gIFwiaW1hZ2UvYm1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibXBcIl1cbiAgfSxcbiAgXCJpbWFnZS9jZ21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZ21cIl1cbiAgfSxcbiAgXCJpbWFnZS9kaWNvbS1ybGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2UvZW1mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL2ZpdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2UvZzNmYXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnM1wiXVxuICB9LFxuICBcImltYWdlL2dpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdpZlwiXVxuICB9LFxuICBcImltYWdlL2llZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImllZlwiXVxuICB9LFxuICBcImltYWdlL2psc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS9qcDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2UvanBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpwZWdcIixcImpwZ1wiLFwianBlXCJdXG4gIH0sXG4gIFwiaW1hZ2UvanBtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL2pweFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS9rdHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrdHhcIl1cbiAgfSxcbiAgXCJpbWFnZS9uYXBscHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2UvcGpwZWdcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiaW1hZ2UvcG5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG5nXCJdXG4gIH0sXG4gIFwiaW1hZ2UvcHJzLmJ0aWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJidGlmXCJdXG4gIH0sXG4gIFwiaW1hZ2UvcHJzLnB0aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS9wd2ctcmFzdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3NnaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2dpXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvc3ZnK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3ZnXCIsXCJzdmd6XCJdXG4gIH0sXG4gIFwiaW1hZ2UvdDM4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3RpZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0aWZmXCIsXCJ0aWZcIl1cbiAgfSxcbiAgXCJpbWFnZS90aWZmLWZ4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBzZFwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5haXJ6aXAuYWNjZWxlcmF0b3IuYXp2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5jbnMuaW5mMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQuZGVjZS5ncmFwaGljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZpXCIsXCJ1dnZpXCIsXCJ1dmdcIixcInV2dmdcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZGp2dVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRqdnVcIixcImRqdlwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5kdmIuc3VidGl0bGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdWJcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZHdnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHdnXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmR4ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR4ZlwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5mYXN0Ymlkc2hlZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmYnNcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZnB4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnB4XCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmZzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZzdFwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5mdWppeGVyb3guZWRtaWNzLW1tclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1tclwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5mdWppeGVyb3guZWRtaWNzLXJsY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJsY1wiXVxuICB9LFxuICBcImltYWdlL3ZuZC5nbG9iYWxncmFwaGljcy5wZ2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5taXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLm1vemlsbGEuYXBuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQubXMtbW9kaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1kaVwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5tcy1waG90b1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2RwXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLm5ldC1mcHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJucHhcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQucmFkaWFuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnNlYWxlZC5wbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnNlYWxlZG1lZGlhLnNvZnRzZWFsLmdpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwuanBnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5zdmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnRlbmNlbnQudGFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC52YWx2ZS5zb3VyY2UudGV4dHVyZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQud2FwLndibXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3Ym1wXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnhpZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4aWZcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuemJydXNoLnBjeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS93ZWJwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3ZWJwXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvd21mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3gtM2RzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCIzZHNcIl1cbiAgfSxcbiAgXCJpbWFnZS94LWNtdS1yYXN0ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJhc1wiXVxuICB9LFxuICBcImltYWdlL3gtY214XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbXhcIl1cbiAgfSxcbiAgXCJpbWFnZS94LWZyZWVoYW5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmaFwiLFwiZmhjXCIsXCJmaDRcIixcImZoNVwiLFwiZmg3XCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1pY29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImljb1wiXVxuICB9LFxuICBcImltYWdlL3gtam5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpuZ1wiXVxuICB9LFxuICBcImltYWdlL3gtbXJzaWQtaW1hZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpZFwiXVxuICB9LFxuICBcImltYWdlL3gtbXMtYm1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYm1wXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1wY3hcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBjeFwiXVxuICB9LFxuICBcImltYWdlL3gtcGljdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGljXCIsXCJwY3RcIl1cbiAgfSxcbiAgXCJpbWFnZS94LXBvcnRhYmxlLWFueW1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG5tXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1wb3J0YWJsZS1iaXRtYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBibVwiXVxuICB9LFxuICBcImltYWdlL3gtcG9ydGFibGUtZ3JheW1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGdtXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1wb3J0YWJsZS1waXhtYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwbVwiXVxuICB9LFxuICBcImltYWdlL3gtcmdiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyZ2JcIl1cbiAgfSxcbiAgXCJpbWFnZS94LXRnYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGdhXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC14Yml0bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4Ym1cIl1cbiAgfSxcbiAgXCJpbWFnZS94LXhjZlwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJpbWFnZS94LXhwaXhtYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwbVwiXVxuICB9LFxuICBcImltYWdlL3gteHdpbmRvd2R1bXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInh3ZFwiXVxuICB9LFxuICBcIm1lc3NhZ2UvY3BpbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL2RlbGl2ZXJ5LXN0YXR1c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL2Rpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL2V4dGVybmFsLWJvZHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9mZWVkYmFjay1yZXBvcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9nbG9iYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9nbG9iYWwtZGVsaXZlcnktc3RhdHVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2UvZ2xvYmFsLWRpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL2dsb2JhbC1oZWFkZXJzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2UvaHR0cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtZXNzYWdlL2ltZG4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwibWVzc2FnZS9uZXdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2UvcGFydGlhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtZXNzYWdlL3JmYzgyMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW1sXCIsXCJtaW1lXCJdXG4gIH0sXG4gIFwibWVzc2FnZS9zLWh0dHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9zaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9zaXBmcmFnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2UvdHJhY2tpbmctc3RhdHVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2Uvdm5kLnNpLnNpbXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS92bmQud2ZhLndzY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtb2RlbC9nbHRmK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJtb2RlbC9pZ2VzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWdzXCIsXCJpZ2VzXCJdXG4gIH0sXG4gIFwibW9kZWwvbWVzaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zaFwiLFwibWVzaFwiLFwic2lsb1wiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5jb2xsYWRhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRhZVwiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5kd2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkd2ZcIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQuZmxhdGxhbmQuM2RtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtb2RlbC92bmQuZ2RsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2RsXCJdXG4gIH0sXG4gIFwibW9kZWwvdm5kLmdzLWdkbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC5ncy5nZGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibW9kZWwvdm5kLmd0d1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd0d1wiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5tb21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtb2RlbC92bmQubXRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXRzXCJdXG4gIH0sXG4gIFwibW9kZWwvdm5kLm9wZW5nZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibW9kZWwvdm5kLnBhcmFzb2xpZC50cmFuc21pdC5iaW5hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibW9kZWwvdm5kLnBhcmFzb2xpZC50cmFuc21pdC50ZXh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC5yb3NldHRlLmFubm90YXRlZC1kYXRhLW1vZGVsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC52YWx2ZS5zb3VyY2UuY29tcGlsZWQtbWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC52dHVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2dHVcIl1cbiAgfSxcbiAgXCJtb2RlbC92cm1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3JsXCIsXCJ2cm1sXCJdXG4gIH0sXG4gIFwibW9kZWwveDNkK2JpbmFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieDNkYlwiLFwieDNkYnpcIl1cbiAgfSxcbiAgXCJtb2RlbC94M2QrZmFzdGluZm9zZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibW9kZWwveDNkK3ZybWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIngzZHZcIixcIngzZHZ6XCJdXG4gIH0sXG4gIFwibW9kZWwveDNkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieDNkXCIsXCJ4M2R6XCJdXG4gIH0sXG4gIFwibW9kZWwveDNkLXZybWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2FsdGVybmF0aXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcIm11bHRpcGFydC9hcHBsZWRvdWJsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtdWx0aXBhcnQvYnl0ZXJhbmdlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtdWx0aXBhcnQvZGlnZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9lbmNyeXB0ZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtdWx0aXBhcnQvaGVhZGVyLXNldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtdWx0aXBhcnQvbWl4ZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwibXVsdGlwYXJ0L3BhcmFsbGVsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9yZWxhdGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcIm11bHRpcGFydC9yZXBvcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibXVsdGlwYXJ0L3NpZ25lZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtdWx0aXBhcnQvdm9pY2UtbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvMWQtaW50ZXJsZWF2ZWQtcGFyaXR5ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvY2FjaGUtbWFuaWZlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwcGNhY2hlXCIsXCJtYW5pZmVzdFwiXVxuICB9LFxuICBcInRleHQvY2FsZW5kYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpY3NcIixcImlmYlwiXVxuICB9LFxuICBcInRleHQvY2FsZW5kZXJcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJ0ZXh0L2NtZFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcInRleHQvY29mZmVlc2NyaXB0XCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY29mZmVlXCIsXCJsaXRjb2ZmZWVcIl1cbiAgfSxcbiAgXCJ0ZXh0L2Nzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3NzXCJdXG4gIH0sXG4gIFwidGV4dC9jc3ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNzdlwiXVxuICB9LFxuICBcInRleHQvY3N2LXNjaGVtYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2RpcmVjdG9yeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2Ruc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2VjbWFzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9lbmNhcHJ0cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2VucmljaGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZndkcmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZ3JhbW1hci1yZWYtbGlzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2hqc29uXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGpzb25cIl1cbiAgfSxcbiAgXCJ0ZXh0L2h0bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh0bWxcIixcImh0bVwiLFwic2h0bWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L2phZGVcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYWRlXCJdXG4gIH0sXG4gIFwidGV4dC9qYXZhc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwidGV4dC9qY3ItY25kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvanN4XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc3hcIl1cbiAgfSxcbiAgXCJ0ZXh0L2xlc3NcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsZXNzXCJdXG4gIH0sXG4gIFwidGV4dC9tYXJrZG93blwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L21hdGhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L21pemFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvbjNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm4zXCJdXG4gIH0sXG4gIFwidGV4dC9wYXJhbWV0ZXJzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcGFyaXR5ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcGxhaW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR4dFwiLFwidGV4dFwiLFwiY29uZlwiLFwiZGVmXCIsXCJsaXN0XCIsXCJsb2dcIixcImluXCIsXCJpbmlcIl1cbiAgfSxcbiAgXCJ0ZXh0L3Byb3ZlbmFuY2Utbm90YXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9wcnMuZmFsbGVuc3RlaW4ucnN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcHJzLmxpbmVzLnRhZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRzY1wiXVxuICB9LFxuICBcInRleHQvcHJzLnByb3AubG9naWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9yYXB0b3JmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9yZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9yZmM4MjItaGVhZGVyc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3JpY2h0ZXh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJydHhcIl1cbiAgfSxcbiAgXCJ0ZXh0L3J0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnRmXCJdXG4gIH0sXG4gIFwidGV4dC9ydHAtZW5jLWFlc2NtMTI4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcnRwbG9vcGJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9ydHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9zZ21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2dtbFwiLFwic2dtXCJdXG4gIH0sXG4gIFwidGV4dC9zbGltXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2xpbVwiLFwic2xtXCJdXG4gIH0sXG4gIFwidGV4dC9zdHlsdXNcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdHlsdXNcIixcInN0eWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3QxNDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHN2XCJdXG4gIH0sXG4gIFwidGV4dC90cm9mZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRcIixcInRyXCIsXCJyb2ZmXCIsXCJtYW5cIixcIm1lXCIsXCJtc1wiXVxuICB9LFxuICBcInRleHQvdHVydGxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHRsXCJdXG4gIH0sXG4gIFwidGV4dC91bHBmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC91cmktbGlzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXJpXCIsXCJ1cmlzXCIsXCJ1cmxzXCJdXG4gIH0sXG4gIFwidGV4dC92Y2FyZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNhcmRcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLmFiY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5hc2NpaS1hcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImN1cmxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5jdXJsLmRjdXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkY3VybFwiXVxuICB9LFxuICBcInRleHQvdm5kLmN1cmwubWN1cmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1jdXJsXCJdXG4gIH0sXG4gIFwidGV4dC92bmQuY3VybC5zY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2N1cmxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5kZWJpYW4uY29weXJpZ2h0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLmRtY2xpZW50c2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLmR2Yi5zdWJ0aXRsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN1YlwiXVxuICB9LFxuICBcInRleHQvdm5kLmVzbWVydGVjLnRoZW1lLWRlc2NyaXB0b3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuZmx5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmx5XCJdXG4gIH0sXG4gIFwidGV4dC92bmQuZm1pLmZsZXhzdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmx4XCJdXG4gIH0sXG4gIFwidGV4dC92bmQuZ3JhcGh2aXpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJndlwiXVxuICB9LFxuICBcInRleHQvdm5kLmluM2QuM2RtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjNkbWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5pbjNkLnNwb3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcG90XCJdXG4gIH0sXG4gIFwidGV4dC92bmQuaXB0Yy5uZXdzbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuaXB0Yy5uaXRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLmxhdGV4LXpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQubW90b3JvbGEucmVmbGV4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLm1zLW1lZGlhcGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5uZXQycGhvbmUuY29tbWNlbnRlci5jb21tYW5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLnJhZGlzeXMubXNtbC1iYXNpYy1sYXlvdXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuc2kudXJpY2F0YWxvZ3VlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLnN1bi5qMm1lLmFwcC1kZXNjcmlwdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamFkXCJdXG4gIH0sXG4gIFwidGV4dC92bmQudHJvbGx0ZWNoLmxpbmd1aXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLndhcC5zaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC53YXAuc2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQud2FwLndtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtbFwiXVxuICB9LFxuICBcInRleHQvdm5kLndhcC53bWxzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWxzXCJdXG4gIH0sXG4gIFwidGV4dC92dHRcIjoge1xuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widnR0XCJdXG4gIH0sXG4gIFwidGV4dC94LWFzbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic1wiLFwiYXNtXCJdXG4gIH0sXG4gIFwidGV4dC94LWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNcIixcImNjXCIsXCJjeHhcIixcImNwcFwiLFwiaFwiLFwiaGhcIixcImRpY1wiXVxuICB9LFxuICBcInRleHQveC1jb21wb25lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHRjXCJdXG4gIH0sXG4gIFwidGV4dC94LWZvcnRyYW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZcIixcImZvclwiLFwiZjc3XCIsXCJmOTBcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtZ3d0LXJwY1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcInRleHQveC1oYW5kbGViYXJzLXRlbXBsYXRlXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGJzXCJdXG4gIH0sXG4gIFwidGV4dC94LWphdmEtc291cmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYXZhXCJdXG4gIH0sXG4gIFwidGV4dC94LWpxdWVyeS10bXBsXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwidGV4dC94LWx1YVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImx1YVwiXVxuICB9LFxuICBcInRleHQveC1tYXJrZG93blwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWFya2Rvd25cIixcIm1kXCIsXCJta2RcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtbmZvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuZm9cIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtb3BtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3BtbFwiXVxuICB9LFxuICBcInRleHQveC1wYXNjYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBcIixcInBhc1wiXVxuICB9LFxuICBcInRleHQveC1wcm9jZXNzaW5nXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwZGVcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtc2Fzc1wiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNhc3NcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtc2Nzc1wiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjc3NcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtc2V0ZXh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJldHhcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtc2Z2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZnZcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtc3VzZS15bXBcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInltcFwiXVxuICB9LFxuICBcInRleHQveC11dWVuY29kZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXVcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtdmNhbGVuZGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Y3NcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtdmNhcmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZjZlwiXVxuICB9LFxuICBcInRleHQveG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3htbC1leHRlcm5hbC1wYXJzZWQtZW50aXR5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQveWFtbFwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcInlhbWxcIixcInltbFwiXVxuICB9LFxuICBcInZpZGVvLzFkLWludGVybGVhdmVkLXBhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvLzNncHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjNncFwiLFwiM2dwcFwiXVxuICB9LFxuICBcInZpZGVvLzNncHAtdHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby8zZ3BwMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiM2cyXCJdXG4gIH0sXG4gIFwidmlkZW8vYm1wZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9idDY1NlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL2NlbGJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9kdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL2VuY2FwcnRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vaDI2MVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaDI2MVwiXVxuICB9LFxuICBcInZpZGVvL2gyNjNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImgyNjNcIl1cbiAgfSxcbiAgXCJ2aWRlby9oMjYzLTE5OThcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9oMjYzLTIwMDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9oMjY0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoMjY0XCJdXG4gIH0sXG4gIFwidmlkZW8vaDI2NC1yY2RvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vaDI2NC1zdmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9oMjY1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vaXNvLnNlZ21lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9qcGVnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqcGd2XCJdXG4gIH0sXG4gIFwidmlkZW8vanBlZzIwMDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9qcG1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpwbVwiLFwianBnbVwiXVxuICB9LFxuICBcInZpZGVvL21qMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWoyXCIsXCJtanAyXCJdXG4gIH0sXG4gIFwidmlkZW8vbXAxc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL21wMnBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9tcDJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0c1wiXVxuICB9LFxuICBcInZpZGVvL21wNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXA0XCIsXCJtcDR2XCIsXCJtcGc0XCJdXG4gIH0sXG4gIFwidmlkZW8vbXA0di1lc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL21wZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wZWdcIixcIm1wZ1wiLFwibXBlXCIsXCJtMXZcIixcIm0ydlwiXVxuICB9LFxuICBcInZpZGVvL21wZWc0LWdlbmVyaWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9tcHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9udlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL29nZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2d2XCJdXG4gIH0sXG4gIFwidmlkZW8vcGFyaXR5ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vcG9pbnRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3F1aWNrdGltZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicXRcIixcIm1vdlwiXVxuICB9LFxuICBcInZpZGVvL3JhcHRvcmZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3Jhd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3J0cC1lbmMtYWVzY20xMjhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby9ydHBsb29wYmFja1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3J0eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3NtcHRlMjkybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3VscGZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZjMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5jY3R2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRlY2UuaGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2aFwiLFwidXZ2aFwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLm1vYmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZtXCIsXCJ1dnZtXCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRlY2UubXA0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRlY2UucGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2cFwiLFwidXZ2cFwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLnNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnNcIixcInV2dnNcIl1cbiAgfSxcbiAgXCJ2aWRlby92bmQuZGVjZS52aWRlb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZ2XCIsXCJ1dnZ2XCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRpcmVjdHYubXBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5kaXJlY3R2Lm1wZWctdHRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRsbmEubXBlZy10dHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuZHZiLmZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR2YlwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5mdnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZ2dFwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5obnMudmlkZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuaXB0dmZvcnVtLjFkcGFyaXR5ZmVjLTEwMTBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuaXB0dmZvcnVtLjFkcGFyaXR5ZmVjLTIwMDVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuaXB0dmZvcnVtLjJkcGFyaXR5ZmVjLTEwMTBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuaXB0dmZvcnVtLjJkcGFyaXR5ZmVjLTIwMDVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuaXB0dmZvcnVtLnR0c2F2Y1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5pcHR2Zm9ydW0udHRzbXBlZzJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQubW90b3JvbGEudmlkZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQubW90b3JvbGEudmlkZW9wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm1wZWd1cmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm14dVwiLFwibTR1XCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLm1zLXBsYXlyZWFkeS5tZWRpYS5weXZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB5dlwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5ub2tpYS5pbnRlcmxlYXZlZC1tdWx0aW1lZGlhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm5va2lhLnZpZGVvdm9pcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5vYmplY3R2aWRlb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5yYWRnYW1ldHRvb2xzLmJpbmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQucmFkZ2FtZXR0b29scy5zbWFja2VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLnNlYWxlZC5tcGVnMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5zZWFsZWQubXBlZzRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuc2VhbGVkLnN3ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5zZWFsZWRtZWRpYS5zb2Z0c2VhbC5tb3ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQudXZ2dS5tcDRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2dVwiLFwidXZ2dVwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC52aXZvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2aXZcIl1cbiAgfSxcbiAgXCJ2aWRlby92cDhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJ2aWRlby93ZWJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3ZWJtXCJdXG4gIH0sXG4gIFwidmlkZW8veC1mNHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImY0dlwiXVxuICB9LFxuICBcInZpZGVvL3gtZmxpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbGlcIl1cbiAgfSxcbiAgXCJ2aWRlby94LWZsdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmx2XCJdXG4gIH0sXG4gIFwidmlkZW8veC1tNHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm00dlwiXVxuICB9LFxuICBcInZpZGVvL3gtbWF0cm9za2FcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1rdlwiLFwibWszZFwiLFwibWtzXCJdXG4gIH0sXG4gIFwidmlkZW8veC1tbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1uZ1wiXVxuICB9LFxuICBcInZpZGVvL3gtbXMtYXNmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhc2ZcIixcImFzeFwiXVxuICB9LFxuICBcInZpZGVvL3gtbXMtdm9iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2b2JcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zLXdtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bVwiXVxuICB9LFxuICBcInZpZGVvL3gtbXMtd212XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bXZcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zLXdteFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid214XCJdXG4gIH0sXG4gIFwidmlkZW8veC1tcy13dnhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInd2eFwiXVxuICB9LFxuICBcInZpZGVvL3gtbXN2aWRlb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXZpXCJdXG4gIH0sXG4gIFwidmlkZW8veC1zZ2ktbW92aWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1vdmllXCJdXG4gIH0sXG4gIFwidmlkZW8veC1zbXZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNtdlwiXVxuICB9LFxuICBcIngtY29uZmVyZW5jZS94LWNvb2x0YWxrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpY2VcIl1cbiAgfSxcbiAgXCJ4LXNoYWRlci94LWZyYWdtZW50XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwieC1zaGFkZXIveC12ZXJ0ZXhcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfVxufVxuIiwiLyohXG4gKiBtaW1lLWRiXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RiLmpzb24nKVxuIiwiLyohXG4gKiBtaW1lLXR5cGVzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGIgPSByZXF1aXJlKCdtaW1lLWRiJylcbnZhciBleHRuYW1lID0gcmVxdWlyZSgncGF0aCcpLmV4dG5hbWVcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZXh0cmFjdFR5cGVSZWdFeHAgPSAvXlxccyooW147XFxzXSopKD86O3xcXHN8JCkvXG52YXIgdGV4dFR5cGVSZWdFeHAgPSAvXnRleHRcXC8vaVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY2hhcnNldCA9IGNoYXJzZXRcbmV4cG9ydHMuY2hhcnNldHMgPSB7IGxvb2t1cDogY2hhcnNldCB9XG5leHBvcnRzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbmV4cG9ydHMuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uXG5leHBvcnRzLmV4dGVuc2lvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5leHBvcnRzLmxvb2t1cCA9IGxvb2t1cFxuZXhwb3J0cy50eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuLy8gUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMvdHlwZXMgbWFwc1xucG9wdWxhdGVNYXBzKGV4cG9ydHMuZXh0ZW5zaW9ucywgZXhwb3J0cy50eXBlcylcblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgY2hhcnNldCBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNoYXJzZXQgKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IGV4dHJhY3RUeXBlUmVnRXhwLmV4ZWModHlwZSlcbiAgdmFyIG1pbWUgPSBtYXRjaCAmJiBkYlttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmIChtaW1lICYmIG1pbWUuY2hhcnNldCkge1xuICAgIHJldHVybiBtaW1lLmNoYXJzZXRcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdGV4dC8qIHRvIHV0Zi04XG4gIGlmIChtYXRjaCAmJiB0ZXh0VHlwZVJlZ0V4cC50ZXN0KG1hdGNoWzFdKSkge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmdWxsIENvbnRlbnQtVHlwZSBoZWFkZXIgZ2l2ZW4gYSBNSU1FIHR5cGUgb3IgZXh0ZW5zaW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNvbnRlbnRUeXBlIChzdHIpIHtcbiAgLy8gVE9ETzogc2hvdWxkIHRoaXMgZXZlbiBiZSBpbiB0aGlzIG1vZHVsZT9cbiAgaWYgKCFzdHIgfHwgdHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHZhciBtaW1lID0gc3RyLmluZGV4T2YoJy8nKSA9PT0gLTFcbiAgICA/IGV4cG9ydHMubG9va3VwKHN0cilcbiAgICA6IHN0clxuXG4gIGlmICghbWltZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIGNvbnRlbnQtdHlwZSBvciBvdGhlciBtb2R1bGVcbiAgaWYgKG1pbWUuaW5kZXhPZignY2hhcnNldCcpID09PSAtMSkge1xuICAgIHZhciBjaGFyc2V0ID0gZXhwb3J0cy5jaGFyc2V0KG1pbWUpXG4gICAgaWYgKGNoYXJzZXQpIG1pbWUgKz0gJzsgY2hhcnNldD0nICsgY2hhcnNldC50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICByZXR1cm4gbWltZVxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVmYXVsdCBleHRlbnNpb24gZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBleHRlbnNpb24gKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IGV4dHJhY3RUeXBlUmVnRXhwLmV4ZWModHlwZSlcblxuICAvLyBnZXQgZXh0ZW5zaW9uc1xuICB2YXIgZXh0cyA9IG1hdGNoICYmIGV4cG9ydHMuZXh0ZW5zaW9uc1ttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHRzWzBdXG59XG5cbi8qKlxuICogTG9va3VwIHRoZSBNSU1FIHR5cGUgZm9yIGEgZmlsZSBwYXRoL2V4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gbG9va3VwIChwYXRoKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGdldCB0aGUgZXh0ZW5zaW9uIChcImV4dFwiIG9yIFwiLmV4dFwiIG9yIGZ1bGwgcGF0aClcbiAgdmFyIGV4dGVuc2lvbiA9IGV4dG5hbWUoJ3guJyArIHBhdGgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3Vic3RyKDEpXG5cbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLnR5cGVzW2V4dGVuc2lvbl0gfHwgZmFsc2Vcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucyBhbmQgdHlwZXMgbWFwcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcG9wdWxhdGVNYXBzIChleHRlbnNpb25zLCB0eXBlcykge1xuICAvLyBzb3VyY2UgcHJlZmVyZW5jZSAobGVhc3QgLT4gbW9zdClcbiAgdmFyIHByZWZlcmVuY2UgPSBbJ25naW54JywgJ2FwYWNoZScsIHVuZGVmaW5lZCwgJ2lhbmEnXVxuXG4gIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hNaW1lVHlwZSAodHlwZSkge1xuICAgIHZhciBtaW1lID0gZGJbdHlwZV1cbiAgICB2YXIgZXh0cyA9IG1pbWUuZXh0ZW5zaW9uc1xuXG4gICAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gbWltZSAtPiBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uc1t0eXBlXSA9IGV4dHNcblxuICAgIC8vIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0c1tpXVxuXG4gICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSkge1xuICAgICAgICB2YXIgZnJvbSA9IHByZWZlcmVuY2UuaW5kZXhPZihkYlt0eXBlc1tleHRlbnNpb25dXS5zb3VyY2UpXG4gICAgICAgIHZhciB0byA9IHByZWZlcmVuY2UuaW5kZXhPZihtaW1lLnNvdXJjZSlcblxuICAgICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSAhPT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgJiZcbiAgICAgICAgICAoZnJvbSA+IHRvIHx8IChmcm9tID09PSB0byAmJiB0eXBlc1tleHRlbnNpb25dLnN1YnN0cigwLCAxMikgPT09ICdhcHBsaWNhdGlvbi8nKSkpIHtcbiAgICAgICAgICAvLyBza2lwIHRoZSByZW1hcHBpbmdcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCB0aGUgZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICAgIHR5cGVzW2V4dGVuc2lvbl0gPSB0eXBlXG4gICAgfVxuICB9KVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBhc3NlcnQ7XG5cbmZ1bmN0aW9uIGFzc2VydCh2YWwsIG1zZykge1xuICBpZiAoIXZhbClcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICdBc3NlcnRpb24gZmFpbGVkJyk7XG59XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGFzc2VydEVxdWFsKGwsIHIsIG1zZykge1xuICBpZiAobCAhPSByKVxuICAgIHRocm93IG5ldyBFcnJvcihtc2cgfHwgKCdBc3NlcnRpb24gZmFpbGVkOiAnICsgbCArICcgIT0gJyArIHIpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IGV4cG9ydHM7XG5cbmZ1bmN0aW9uIHRvQXJyYXkobXNnLCBlbmMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobXNnKSlcbiAgICByZXR1cm4gbXNnLnNsaWNlKCk7XG4gIGlmICghbXNnKVxuICAgIHJldHVybiBbXTtcbiAgdmFyIHJlcyA9IFtdO1xuICBpZiAodHlwZW9mIG1zZyAhPT0gJ3N0cmluZycpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKylcbiAgICAgIHJlc1tpXSA9IG1zZ1tpXSB8IDA7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZiAoZW5jID09PSAnaGV4Jykge1xuICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9bXmEtejAtOV0rL2lnLCAnJyk7XG4gICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgbXNnID0gJzAnICsgbXNnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgcmVzLnB1c2gocGFyc2VJbnQobXNnW2ldICsgbXNnW2kgKyAxXSwgMTYpKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICAgIHZhciBoaSA9IGMgPj4gODtcbiAgICAgIHZhciBsbyA9IGMgJiAweGZmO1xuICAgICAgaWYgKGhpKVxuICAgICAgICByZXMucHVzaChoaSwgbG8pO1xuICAgICAgZWxzZVxuICAgICAgICByZXMucHVzaChsbyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG51dGlscy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gemVybzIod29yZCkge1xuICBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgcmV0dXJuICcwJyArIHdvcmQ7XG4gIGVsc2VcbiAgICByZXR1cm4gd29yZDtcbn1cbnV0aWxzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHRvSGV4KG1zZykge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgIHJlcyArPSB6ZXJvMihtc2dbaV0udG9TdHJpbmcoMTYpKTtcbiAgcmV0dXJuIHJlcztcbn1cbnV0aWxzLnRvSGV4ID0gdG9IZXg7XG5cbnV0aWxzLmVuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShhcnIsIGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdG9IZXgoYXJyKTtcbiAgZWxzZVxuICAgIHJldHVybiBhcnI7XG59O1xuIiwiLypcbiAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE2IERpZWdvIFBlcmluaVxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBud21hdGNoZXItbm9xc2EuanMgLSBBIGZhc3QgQ1NTIHNlbGVjdG9yIGVuZ2luZSBhbmQgbWF0Y2hlclxuICpcbiAqIEF1dGhvcjogRGllZ28gUGVyaW5pIDxkaWVnby5wZXJpbmkgYXQgZ21haWwgY29tPlxuICogVmVyc2lvbjogMS4zLjlcbiAqIENyZWF0ZWQ6IDIwMDcwNzIyXG4gKiBSZWxlYXNlOiAyMDE2MTAyNlxuICpcbiAqIExpY2Vuc2U6XG4gKiAgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL05XTWF0Y2hlci9NSVQtTElDRU5TRVxuICogRG93bmxvYWQ6XG4gKiAgaHR0cDovL2phdmFzY3JpcHQubndib3guY29tL05XTWF0Y2hlci9ud21hdGNoZXIuanNcbiAqL1xuXG4oZnVuY3Rpb24oZ2xvYmFsLCBmYWN0b3J5KSB7XG5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3Rvcnk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbXCJhbWRcIl0pIHtcbiAgICBkZWZpbmUoZmFjdG9yeSk7XG4gIH0gZWxzZSB7XG4gICAgZ2xvYmFsLk5XIHx8IChnbG9iYWwuTlcgPSB7IH0pO1xuICAgIGdsb2JhbC5OVy5Eb20gPSBmYWN0b3J5KGdsb2JhbCk7XG4gIH1cblxufSkodGhpcywgZnVuY3Rpb24oZ2xvYmFsKSB7XG5cbiAgdmFyIHZlcnNpb24gPSAnbndtYXRjaGVyLTEuMy45JyxcblxuICBkb2MgPSBnbG9iYWwuZG9jdW1lbnQsXG4gIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50LFxuXG4gIGlzU2luZ2xlTWF0Y2gsXG4gIGlzU2luZ2xlU2VsZWN0LFxuXG4gIGxhc3RTbGljZSxcbiAgbGFzdENvbnRleHQsXG4gIGxhc3RQb3NpdGlvbixcblxuICBsYXN0TWF0Y2hlcixcbiAgbGFzdFNlbGVjdG9yLFxuXG4gIGxhc3RQYXJ0c01hdGNoLFxuICBsYXN0UGFydHNTZWxlY3QsXG5cbiAgcHJlZml4ZXMgPSAnWyMuOl0/JyxcbiAgb3BlcmF0b3JzID0gJyhbfipeJHwhXT89ezF9KScsXG4gIHdoaXRlc3BhY2UgPSAnW1xcXFx4MjBcXFxcdFxcXFxuXFxcXHJcXFxcZl0nLFxuICBjb21iaW5hdG9ycyA9ICdcXFxceDIwfFs+K35dKD89W14+K35dKScsXG4gIHBzZXVkb3Bhcm1zID0gJyg/OlstK10/XFxcXGQqbik/Wy0rXT9cXFxcZConLFxuICBza2lwX2dyb3VwcyA9ICdcXFxcWy4qXFxcXF18XFxcXCguKlxcXFwpfFxcXFx7LipcXFxcfScsXG5cbiAgYW55X2VzY19jaHIgPSAnXFxcXFxcXFwuJyxcbiAgYWxwaGFsb2Rhc2ggPSAnW19hLXpBLVpdJyxcbiAgbm9uX2FzY19jaHIgPSAnW15cXFxceDAwLVxcXFx4OWZdJyxcbiAgZXNjYXBlZF9jaHIgPSAnXFxcXFxcXFxbXlxcXFxuXFxcXHJcXFxcZjAtOWEtZkEtRl0nLFxuICB1bmljb2RlX2NociA9ICdcXFxcXFxcXFswLTlhLWZBLUZdezEsNn0oPzpcXFxcclxcXFxufCcgKyB3aGl0ZXNwYWNlICsgJyk/JyxcblxuICBxdW90ZWR2YWx1ZSA9ICdcIlteXCJcXFxcXFxcXF0qKD86XFxcXFxcXFwuW15cIlxcXFxcXFxcXSopKlwiJyArIFwifCdbXidcXFxcXFxcXF0qKD86XFxcXFxcXFwuW14nXFxcXFxcXFxdKikqJ1wiLFxuXG4gIHJlU3BsaXRHcm91cCA9IC8oW14sXFxcXCgpW1xcXV0rfFxcW1teW1xcXV0qXFxdfFxcWy4qXFxdfFxcKFteKCldK1xcKXxcXCguKlxcKXxcXHtbXnt9XStcXH18XFx7LipcXH18XFxcXC4pKy9nLFxuXG4gIHJlVHJpbVNwYWNlcyA9IFJlZ0V4cCgnW1xcXFxuXFxcXHJcXFxcZl18XicgKyB3aGl0ZXNwYWNlICsgJyt8JyArIHdoaXRlc3BhY2UgKyAnKyQnLCAnZycpLFxuXG4gIHJlRXNjYXBlZENoYXJzID0gL1xcXFwoWzAtOWEtZkEtRl17MSw2fVtcXHgyMFxcdFxcblxcclxcZl0/fC4pfChbXFx4MjJcXHgyN10pL2csXG5cbiAgc3RhbmRhcmRWYWxpZGF0b3IsIGV4dGVuZGVkVmFsaWRhdG9yLCByZVZhbGlkYXRvcixcblxuICBhdHRyY2hlY2ssIGF0dHJpYnV0ZXMsIGF0dHJtYXRjaGVyLCBwc2V1ZG9jbGFzcyxcblxuICByZU9wdGltaXplU2VsZWN0b3IsIHJlU2ltcGxlTm90LCByZVNwbGl0VG9rZW4sXG5cbiAgT3B0aW1pemUsIGlkZW50aWZpZXIsIGV4dGVuc2lvbnMgPSAnLisnLFxuXG4gIFBhdHRlcm5zID0ge1xuICAgIHNwc2V1ZG9zOiAvXlxcOihyb290fGVtcHR5fCg/OmZpcnN0fGxhc3R8b25seSkoPzotY2hpbGR8LW9mLXR5cGUpfG50aCg/Oi1sYXN0KT8oPzotY2hpbGR8LW9mLXR5cGUpXFwoXFxzKihldmVufG9kZHwoPzpbLStdezAsMX1cXGQqblxccyopP1stK117MCwxfVxccypcXGQqKVxccypcXCkpPyguKikvaSxcbiAgICBkcHNldWRvczogL15cXDoobGlua3x2aXNpdGVkfHRhcmdldHxhY3RpdmV8Zm9jdXN8aG92ZXJ8Y2hlY2tlZHxkaXNhYmxlZHxlbmFibGVkfHNlbGVjdGVkfGxhbmdcXCgoWy1cXHddezIsfSlcXCl8bm90XFwoXFxzKig6bnRoKD86LWxhc3QpPyg/Oi1jaGlsZHwtb2YtdHlwZSlcXChcXHMqKD86ZXZlbnxvZGR8KD86Wy0rXXswLDF9XFxkKm5cXHMqKT9bLStdezAsMX1cXHMqXFxkKilcXHMqXFwpfFteKCldKilcXHMqXFwpKT8oLiopL2ksXG4gICAgY2hpbGRyZW46IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgJypcXFxcPicgKyB3aGl0ZXNwYWNlICsgJyooLiopJyksXG4gICAgYWRqYWNlbnQ6IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgJypcXFxcKycgKyB3aGl0ZXNwYWNlICsgJyooLiopJyksXG4gICAgcmVsYXRpdmU6IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgJypcXFxcficgKyB3aGl0ZXNwYWNlICsgJyooLiopJyksXG4gICAgYW5jZXN0b3I6IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgJysoLiopJyksXG4gICAgdW5pdmVyc2FsOiBSZWdFeHAoJ15cXFxcKiguKiknKVxuICB9LFxuXG4gIFRva2VucyA9IHtcbiAgICBwcmVmaXhlczogcHJlZml4ZXMsXG4gICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzXG4gIH0sXG5cbiAgUVVJUktTX01PREUsXG4gIFhNTF9ET0NVTUVOVCxcblxuICBHRUJUTiA9ICdnZXRFbGVtZW50c0J5VGFnTmFtZScgaW4gZG9jLFxuICBHRUJDTiA9ICdnZXRFbGVtZW50c0J5Q2xhc3NOYW1lJyBpbiBkb2MsXG5cbiAgSUVfTFRfOSA9IHR5cGVvZiBkb2MuYWRkRXZlbnRMaXN0ZW5lciAhPSAnZnVuY3Rpb24nLFxuXG4gIExJTktfTk9ERVMgPSB7IGE6IDEsIEE6IDEsIGFyZWE6IDEsIEFSRUE6IDEsIGxpbms6IDEsIExJTks6IDEgfSxcblxuICBBVFRSX0JPT0xFQU4gPSB7XG4gICAgY2hlY2tlZDogMSwgZGlzYWJsZWQ6IDEsIGlzbWFwOiAxLFxuICAgIG11bHRpcGxlOiAxLCByZWFkb25seTogMSwgc2VsZWN0ZWQ6IDFcbiAgfSxcblxuICBBVFRSX0RFRkFVTFQgPSB7XG4gICAgdmFsdWU6ICdkZWZhdWx0VmFsdWUnLFxuICAgIGNoZWNrZWQ6ICdkZWZhdWx0Q2hlY2tlZCcsXG4gICAgc2VsZWN0ZWQ6ICdkZWZhdWx0U2VsZWN0ZWQnXG4gIH0sXG5cbiAgQVRUUl9VUklEQVRBID0ge1xuICAgIGFjdGlvbjogMiwgY2l0ZTogMiwgY29kZWJhc2U6IDIsIGRhdGE6IDIsIGhyZWY6IDIsXG4gICAgbG9uZ2Rlc2M6IDIsIGxvd3NyYzogMiwgc3JjOiAyLCB1c2VtYXA6IDJcbiAgfSxcblxuICBJTlNFTlNJVElWRV9NQVAgPSB7XG4gICAgJ2NsYXNzJzogMCxcbiAgICAnaHJlZic6IDEsICdsYW5nJzogMSwgJ3NyYyc6IDEsICdzdHlsZSc6IDEsICd0aXRsZSc6IDEsXG4gICAgJ3R5cGUnOiAxLCAneG1sbnMnOiAxLCAneG1sOmxhbmcnOiAxLCAneG1sOnNwYWNlJzogMVxuICB9LFxuXG4gIFNlbGVjdG9ycyA9IHsgfSxcblxuICBPcGVyYXRvcnMgPSB7XG4gICAgICc9JzogXCJuPT0nJW0nXCIsXG4gICAgJ149JzogXCJuLmluZGV4T2YoJyVtJyk9PTBcIixcbiAgICAnKj0nOiBcIm4uaW5kZXhPZignJW0nKT4tMVwiLFxuICAgICd8PSc6IFwiKG4rJy0nKS5pbmRleE9mKCclbS0nKT09MFwiLFxuICAgICd+PSc6IFwiKCcgJytuKycgJykuaW5kZXhPZignICVtICcpPi0xXCIsXG4gICAgJyQ9JzogXCJuLnN1YnN0cihuLmxlbmd0aC0nJW0nLmxlbmd0aCk9PSclbSdcIlxuICB9LFxuXG4gIGNvbmNhdENhbGwgPVxuICAgIGZ1bmN0aW9uKGRhdGEsIGVsZW1lbnRzLCBjYWxsYmFjaykge1xuICAgICAgdmFyIGkgPSAtMSwgZWxlbWVudDtcbiAgICAgIHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnRzWysraV0pKSB7XG4gICAgICAgIGlmIChmYWxzZSA9PT0gY2FsbGJhY2soZGF0YVtkYXRhLmxlbmd0aF0gPSBlbGVtZW50KSkgeyBicmVhazsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcblxuICBzd2l0Y2hDb250ZXh0ID1cbiAgICBmdW5jdGlvbihmcm9tLCBmb3JjZSkge1xuICAgICAgdmFyIG9sZERvYyA9IGRvYztcbiAgICAgIGxhc3RDb250ZXh0ID0gZnJvbTtcbiAgICAgIGRvYyA9IGZyb20ub3duZXJEb2N1bWVudCB8fCBmcm9tO1xuICAgICAgaWYgKGZvcmNlIHx8IG9sZERvYyAhPT0gZG9jKSB7XG4gICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBYTUxfRE9DVU1FTlQgPSBkb2MuY3JlYXRlRWxlbWVudCgnRGlWJykubm9kZU5hbWUgPT0gJ0RpVic7XG4gICAgICAgIFFVSVJLU19NT0RFID0gIVhNTF9ET0NVTUVOVCAmJlxuICAgICAgICAgIHR5cGVvZiBkb2MuY29tcGF0TW9kZSA9PSAnc3RyaW5nJyA/XG4gICAgICAgICAgZG9jLmNvbXBhdE1vZGUuaW5kZXhPZignQ1NTJykgPCAwIDpcbiAgICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgc3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGUgJiYgKHN0eWxlLndpZHRoID0gMSkgJiYgc3R5bGUud2lkdGggPT0gJzFweCc7XG4gICAgICAgICAgfSkoKTtcblxuICAgICAgICBDb25maWcuQ0FDSElORyAmJiBEb20uc2V0Q2FjaGUodHJ1ZSwgZG9jKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gIGNvZGVQb2ludFRvVVRGMTYgPVxuICAgIGZ1bmN0aW9uKGNvZGVQb2ludCkge1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDEgfHwgY29kZVBvaW50ID4gMHgxMGZmZmYgfHxcbiAgICAgICAgKGNvZGVQb2ludCA+IDB4ZDdmZiAmJiBjb2RlUG9pbnQgPCAweGUwMDApKSB7XG4gICAgICAgIHJldHVybiAnXFxcXHVmZmZkJztcbiAgICAgIH1cbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICAgIHZhciBsb3dIZXggPSAnMDAwJyArIGNvZGVQb2ludC50b1N0cmluZygxNik7XG4gICAgICAgIHJldHVybiAnXFxcXHUnICsgbG93SGV4LnN1YnN0cihsb3dIZXgubGVuZ3RoIC0gNCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcXFx1JyArICgoKGNvZGVQb2ludCAtIDB4MTAwMDApID4+IDB4MGEpICsgMHhkODAwKS50b1N0cmluZygxNikgK1xuICAgICAgICAgICAgICdcXFxcdScgKyAoKChjb2RlUG9pbnQgLSAweDEwMDAwKSAlIDB4NDAwKSArIDB4ZGMwMCkudG9TdHJpbmcoMTYpO1xuICAgIH0sXG5cbiAgc3RyaW5nRnJvbUNvZGVQb2ludCA9XG4gICAgZnVuY3Rpb24oY29kZVBvaW50KSB7XG4gICAgICBpZiAoY29kZVBvaW50IDwgMSB8fCBjb2RlUG9pbnQgPiAweDEwZmZmZiB8fFxuICAgICAgICAoY29kZVBvaW50ID4gMHhkN2ZmICYmIGNvZGVQb2ludCA8IDB4ZTAwMCkpIHtcbiAgICAgICAgcmV0dXJuICdcXHVmZmZkJztcbiAgICAgIH1cbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQgP1xuICAgICAgICBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpIDpcbiAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZShcbiAgICAgICAgICAoKGNvZGVQb2ludCAtIDB4MTAwMDApID4+IDB4MGEpICsgMHhkODAwLFxuICAgICAgICAgICgoY29kZVBvaW50IC0gMHgxMDAwMCkgJSAweDQwMCkgKyAweGRjMDApO1xuICAgIH0sXG5cbiAgY29udmVydEVzY2FwZXMgPVxuICAgIGZ1bmN0aW9uKHN0cikge1xuICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlRXNjYXBlZENoYXJzLFxuICAgICAgICAgIGZ1bmN0aW9uKHN1YnN0cmluZywgcDEsIHAyKSB7XG4gICAgICAgICAgICByZXR1cm4gcDIgPyAnXFxcXCcgKyBwMiA6XG4gICAgICAgICAgICAgIC9eWzAtOWEtZkEtRl0vLnRlc3QocDEpID8gY29kZVBvaW50VG9VVEYxNihwYXJzZUludChwMSwgMTYpKSA6XG4gICAgICAgICAgICAgIC9eW1xcXFxcXHgyMlxceDI3XS8udGVzdChwMSkgPyBzdWJzdHJpbmcgOlxuICAgICAgICAgICAgICBwMTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSxcblxuICB1bmVzY2FwZUlkZW50aWZpZXIgPVxuICAgIGZ1bmN0aW9uKHN0cikge1xuICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlRXNjYXBlZENoYXJzLFxuICAgICAgICAgIGZ1bmN0aW9uKHN1YnN0cmluZywgcDEsIHAyKSB7XG4gICAgICAgICAgICByZXR1cm4gcDIgPyBwMiA6XG4gICAgICAgICAgICAgIC9eWzAtOWEtZkEtRl0vLnRlc3QocDEpID8gc3RyaW5nRnJvbUNvZGVQb2ludChwYXJzZUludChwMSwgMTYpKSA6XG4gICAgICAgICAgICAgIC9eW1xcXFxcXHgyMlxceDI3XS8udGVzdChwMSkgPyBzdWJzdHJpbmcgOlxuICAgICAgICAgICAgICBwMTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSxcblxuICBieUlkUmF3ID1cbiAgICBmdW5jdGlvbihpZCwgZWxlbWVudHMpIHtcbiAgICAgIHZhciBpID0gLTEsIGVsZW1lbnQ7XG4gICAgICB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50c1srK2ldKSkge1xuICAgICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgPT0gaWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnQgfHwgbnVsbDtcbiAgICB9LFxuXG4gIF9ieUlkID0gIUlFX0xUXzkgP1xuICAgIGZ1bmN0aW9uKGlkLCBmcm9tKSB7XG4gICAgICBpZCA9ICgvXFxcXC8pLnRlc3QoaWQpID8gdW5lc2NhcGVJZGVudGlmaWVyKGlkKSA6IGlkO1xuICAgICAgcmV0dXJuIGZyb20uZ2V0RWxlbWVudEJ5SWQgJiYgZnJvbS5nZXRFbGVtZW50QnlJZChpZCkgfHxcbiAgICAgICAgYnlJZFJhdyhpZCwgZnJvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKTtcbiAgICB9IDpcbiAgICBmdW5jdGlvbihpZCwgZnJvbSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBudWxsO1xuICAgICAgaWQgPSAoL1xcXFwvKS50ZXN0KGlkKSA/IHVuZXNjYXBlSWRlbnRpZmllcihpZCkgOiBpZDtcbiAgICAgIGlmIChYTUxfRE9DVU1FTlQgfHwgZnJvbS5ub2RlVHlwZSAhPSA5KSB7XG4gICAgICAgIHJldHVybiBieUlkUmF3KGlkLCBmcm9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpO1xuICAgICAgfVxuICAgICAgaWYgKChlbGVtZW50ID0gZnJvbS5nZXRFbGVtZW50QnlJZChpZCkpICYmXG4gICAgICAgIGVsZW1lbnQubmFtZSA9PSBpZCAmJiBmcm9tLmdldEVsZW1lbnRzQnlOYW1lKSB7XG4gICAgICAgIHJldHVybiBieUlkUmF3KGlkLCBmcm9tLmdldEVsZW1lbnRzQnlOYW1lKGlkKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9LFxuXG4gIGJ5SWQgPVxuICAgIGZ1bmN0aW9uKGlkLCBmcm9tKSB7XG4gICAgICBmcm9tIHx8IChmcm9tID0gZG9jKTtcbiAgICAgIGlmIChsYXN0Q29udGV4dCAhPT0gZnJvbSkgeyBzd2l0Y2hDb250ZXh0KGZyb20pOyB9XG4gICAgICByZXR1cm4gX2J5SWQoaWQsIGZyb20pO1xuICAgIH0sXG5cbiAgYnlUYWdSYXcgPVxuICAgIGZ1bmN0aW9uKHRhZywgZnJvbSkge1xuICAgICAgdmFyIGFueSA9IHRhZyA9PSAnKicsIGVsZW1lbnQgPSBmcm9tLCBlbGVtZW50cyA9IFsgXSwgbmV4dCA9IGVsZW1lbnQuZmlyc3RDaGlsZDtcbiAgICAgIGFueSB8fCAodGFnID0gdGFnLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgd2hpbGUgKChlbGVtZW50ID0gbmV4dCkpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQudGFnTmFtZSA+ICdAJyAmJiAoYW55IHx8IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09IHRhZykpIHtcbiAgICAgICAgICBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGhdID0gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKG5leHQgPSBlbGVtZW50LmZpcnN0Q2hpbGQgfHwgZWxlbWVudC5uZXh0U2libGluZykpIGNvbnRpbnVlO1xuICAgICAgICB3aGlsZSAoIW5leHQgJiYgKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpICYmIGVsZW1lbnQgIT09IGZyb20pIHtcbiAgICAgICAgICBuZXh0ID0gZWxlbWVudC5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgIH0sXG5cbiAgY29udGFpbnMgPSAnY29tcGFyZURvY3VtZW50UG9zaXRpb24nIGluIHJvb3QgP1xuICAgIGZ1bmN0aW9uKGNvbnRhaW5lciwgZWxlbWVudCkge1xuICAgICAgcmV0dXJuIChjb250YWluZXIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWxlbWVudCkgJiAxNikgPT0gMTY7XG4gICAgfSA6ICdjb250YWlucycgaW4gcm9vdCA/XG4gICAgZnVuY3Rpb24oY29udGFpbmVyLCBlbGVtZW50KSB7XG4gICAgICByZXR1cm4gY29udGFpbmVyICE9PSBlbGVtZW50ICYmIGNvbnRhaW5lci5jb250YWlucyhlbGVtZW50KTtcbiAgICB9IDpcbiAgICBmdW5jdGlvbihjb250YWluZXIsIGVsZW1lbnQpIHtcbiAgICAgIHdoaWxlICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IGNvbnRhaW5lcikgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICBnZXRBdHRyaWJ1dGUgPSAhSUVfTFRfOSA/XG4gICAgZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICB9IDpcbiAgICBmdW5jdGlvbihub2RlLCBhdHRyaWJ1dGUpIHtcbiAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHR5cGVvZiBub2RlW2F0dHJpYnV0ZV0gPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuYXR0cmlidXRlc1thdHRyaWJ1dGVdICYmXG4gICAgICAgICAgbm9kZS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0udmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICBhdHRyaWJ1dGUgPT0gJ3R5cGUnID8gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKSA6XG4gICAgICAgIEFUVFJfVVJJREFUQVthdHRyaWJ1dGVdID8gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCAyKSA6XG4gICAgICAgIEFUVFJfQk9PTEVBTlthdHRyaWJ1dGVdID8gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKSA/IGF0dHJpYnV0ZSA6ICdmYWxzZScgOlxuICAgICAgICAgIChub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZSkpICYmIG5vZGUudmFsdWUpO1xuICAgIH0sXG5cbiAgaGFzQXR0cmlidXRlID0gIUlFX0xUXzkgJiYgcm9vdC5oYXNBdHRyaWJ1dGUgP1xuICAgIGZ1bmN0aW9uKG5vZGUsIGF0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgfSA6XG4gICAgZnVuY3Rpb24obm9kZSwgYXR0cmlidXRlKSB7XG4gICAgICB2YXIgb2JqID0gbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIHJldHVybiBBVFRSX0RFRkFVTFRbYXR0cmlidXRlXSAmJiBhdHRyaWJ1dGUgIT0gJ3ZhbHVlJyA/XG4gICAgICAgIG5vZGVbQVRUUl9ERUZBVUxUW2F0dHJpYnV0ZV1dIDogb2JqICYmIG9iai5zcGVjaWZpZWQ7XG4gICAgfSxcblxuICBpc0VtcHR5ID1cbiAgICBmdW5jdGlvbihub2RlKSB7XG4gICAgICBub2RlID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMyB8fCBub2RlLm5vZGVOYW1lID4gJ0AnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICBpc0xpbmsgPVxuICAgIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBoYXNBdHRyaWJ1dGUoZWxlbWVudCwgJ2hyZWYnKSAmJiBMSU5LX05PREVTW2VsZW1lbnQubm9kZU5hbWVdO1xuICAgIH0sXG5cbiAgbnRoRWxlbWVudCA9XG4gICAgZnVuY3Rpb24oZWxlbWVudCwgbGFzdCkge1xuICAgICAgdmFyIGNvdW50ID0gMSwgc3VjYyA9IGxhc3QgPyAnbmV4dFNpYmxpbmcnIDogJ3ByZXZpb3VzU2libGluZyc7XG4gICAgICB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50W3N1Y2NdKSkge1xuICAgICAgICBpZiAoZWxlbWVudC5ub2RlTmFtZSA+ICdAJykgKytjb3VudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9LFxuXG4gIG50aE9mVHlwZSA9XG4gICAgZnVuY3Rpb24oZWxlbWVudCwgbGFzdCkge1xuICAgICAgdmFyIGNvdW50ID0gMSwgc3VjYyA9IGxhc3QgPyAnbmV4dFNpYmxpbmcnIDogJ3ByZXZpb3VzU2libGluZycsIHR5cGUgPSBlbGVtZW50Lm5vZGVOYW1lO1xuICAgICAgd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudFtzdWNjXSkpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT0gdHlwZSkgKytjb3VudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9LFxuXG4gIGNvbmZpZ3VyZSA9XG4gICAgZnVuY3Rpb24ob3B0aW9uKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgeyByZXR1cm4gISFDb25maWdbb3B0aW9uXTsgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gIT0gJ29iamVjdCcpIHsgcmV0dXJuIENvbmZpZzsgfVxuICAgICAgZm9yICh2YXIgaSBpbiBvcHRpb24pIHtcbiAgICAgICAgQ29uZmlnW2ldID0gISFvcHRpb25baV07XG4gICAgICAgIGlmIChpID09ICdTSU1QTEVOT1QnKSB7XG4gICAgICAgICAgbWF0Y2hDb250ZXh0cyA9IHsgfTtcbiAgICAgICAgICBtYXRjaFJlc29sdmVycyA9IHsgfTtcbiAgICAgICAgICBzZWxlY3RDb250ZXh0cyA9IHsgfTtcbiAgICAgICAgICBzZWxlY3RSZXNvbHZlcnMgPSB7IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldElkZW50aWZpZXJTeW50YXgoKTtcbiAgICAgIHJlVmFsaWRhdG9yID0gUmVnRXhwKENvbmZpZy5TSU1QTEVOT1QgP1xuICAgICAgICBzdGFuZGFyZFZhbGlkYXRvciA6IGV4dGVuZGVkVmFsaWRhdG9yKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgZW1pdCA9XG4gICAgZnVuY3Rpb24obWVzc2FnZSkge1xuICAgICAgaWYgKENvbmZpZy5WRVJCT1NJVFkpIHsgdGhyb3cgRXJyb3IobWVzc2FnZSk7IH1cbiAgICAgIGlmIChjb25zb2xlICYmIGNvbnNvbGUubG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgQ29uZmlnID0ge1xuICAgIENBQ0hJTkc6IGZhbHNlLFxuICAgIEVTQ0FQRUNIUjogdHJ1ZSxcbiAgICBOT05fQVNDSUk6IHRydWUsXG4gICAgU0VMRUNUT1IzOiB0cnVlLFxuICAgIFVOSUNPREUxNjogdHJ1ZSxcbiAgICBTSE9SVENVVFM6IGZhbHNlLFxuICAgIFNJTVBMRU5PVDogdHJ1ZSxcbiAgICBVTklRVUVfSUQ6IHRydWUsXG4gICAgVVNFX0hUTUw1OiB0cnVlLFxuICAgIFZFUkJPU0lUWTogdHJ1ZVxuICB9LFxuXG4gIGluaXRpYWxpemUgPVxuICAgIGZ1bmN0aW9uKGRvYykge1xuICAgICAgc2V0SWRlbnRpZmllclN5bnRheCgpO1xuICAgICAgc3dpdGNoQ29udGV4dChkb2MsIHRydWUpO1xuICAgIH0sXG5cbiAgc2V0SWRlbnRpZmllclN5bnRheCA9XG4gICAgZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBzeW50YXggPSAnJywgc3RhcnQgPSBDb25maWdbJ1NFTEVDVE9SMyddID8gJy17Mn18JyA6ICcnO1xuXG4gICAgICBDb25maWdbJ05PTl9BU0NJSSddICYmIChzeW50YXggKz0gJ3wnICsgbm9uX2FzY19jaHIpO1xuICAgICAgQ29uZmlnWydVTklDT0RFMTYnXSAmJiAoc3ludGF4ICs9ICd8JyArIHVuaWNvZGVfY2hyKTtcbiAgICAgIENvbmZpZ1snRVNDQVBFQ0hSJ10gJiYgKHN5bnRheCArPSAnfCcgKyBlc2NhcGVkX2Nocik7XG5cbiAgICAgIHN5bnRheCArPSAoQ29uZmlnWydVTklDT0RFMTYnXSB8fCBDb25maWdbJ0VTQ0FQRUNIUiddKSA/ICcnIDogJ3wnICsgYW55X2VzY19jaHI7XG5cbiAgICAgIGlkZW50aWZpZXIgPSAnLT8oPzonICsgc3RhcnQgKyBhbHBoYWxvZGFzaCArIHN5bnRheCArICcpKD86LXxbMC05XXwnICsgYWxwaGFsb2Rhc2ggKyBzeW50YXggKyAnKSonO1xuXG4gICAgICBhdHRyY2hlY2sgPSAnKCcgKyBxdW90ZWR2YWx1ZSArICd8JyArIGlkZW50aWZpZXIgKyAnKSc7XG4gICAgICBhdHRyaWJ1dGVzID0gd2hpdGVzcGFjZSArICcqKCcgKyBpZGVudGlmaWVyICsgJzo/JyArIGlkZW50aWZpZXIgKyAnKScgK1xuICAgICAgICB3aGl0ZXNwYWNlICsgJyooPzonICsgb3BlcmF0b3JzICsgd2hpdGVzcGFjZSArICcqJyArIGF0dHJjaGVjayArICcpPycgKyB3aGl0ZXNwYWNlICsgJyonO1xuICAgICAgYXR0cm1hdGNoZXIgPSBhdHRyaWJ1dGVzLnJlcGxhY2UoYXR0cmNoZWNrLCAnKFtcXFxceDIyXFxcXHgyN10qKSgoPzpcXFxcXFxcXD8uKSo/KVxcXFwzJyk7XG5cbiAgICAgIHBzZXVkb2NsYXNzID0gJygoPzonICtcbiAgICAgICAgcHNldWRvcGFybXMgKyAnfCcgKyBxdW90ZWR2YWx1ZSArICd8JyArXG4gICAgICAgIHByZWZpeGVzICsgaWRlbnRpZmllciArICd8JyArXG4gICAgICAgICdcXFxcWycgKyBhdHRyaWJ1dGVzICsgJ1xcXFxdfCcgK1xuICAgICAgICAnXFxcXCguK1xcXFwpfCcgKyB3aGl0ZXNwYWNlICsgJyp8JyArXG4gICAgICAgICcsKSspJztcblxuICAgICAgc3RhbmRhcmRWYWxpZGF0b3IgPVxuICAgICAgICAnKD89W1xcXFx4MjBcXFxcdFxcXFxuXFxcXHJcXFxcZl0qW14+K34oKXt9PD5dKScgK1xuICAgICAgICAnKCcgK1xuICAgICAgICAnXFxcXConICtcbiAgICAgICAgJ3woPzonICsgcHJlZml4ZXMgKyBpZGVudGlmaWVyICsgJyknICtcbiAgICAgICAgJ3wnICsgY29tYmluYXRvcnMgK1xuICAgICAgICAnfFxcXFxbJyArIGF0dHJpYnV0ZXMgKyAnXFxcXF0nICtcbiAgICAgICAgJ3xcXFxcKCcgKyBwc2V1ZG9jbGFzcyArICdcXFxcKScgK1xuICAgICAgICAnfFxcXFx7JyArIGV4dGVuc2lvbnMgKyAnXFxcXH0nICtcbiAgICAgICAgJ3woPzosfCcgKyB3aGl0ZXNwYWNlICsgJyopJyArXG4gICAgICAgICcpKyc7XG5cbiAgICAgIHJlU2ltcGxlTm90ID0gUmVnRXhwKCdeKCcgK1xuICAgICAgICAnKD8hOm5vdCknICtcbiAgICAgICAgJygnICsgcHJlZml4ZXMgKyBpZGVudGlmaWVyICtcbiAgICAgICAgJ3xcXFxcKFteKCldKlxcXFwpKSsnICtcbiAgICAgICAgJ3xcXFxcWycgKyBhdHRyaWJ1dGVzICsgJ1xcXFxdJyArXG4gICAgICAgICcpJCcpO1xuXG4gICAgICByZVNwbGl0VG9rZW4gPSBSZWdFeHAoJygnICtcbiAgICAgICAgcHJlZml4ZXMgKyBpZGVudGlmaWVyICsgJ3wnICtcbiAgICAgICAgJ1xcXFxbJyArIGF0dHJpYnV0ZXMgKyAnXFxcXF18JyArXG4gICAgICAgICdcXFxcKCcgKyBwc2V1ZG9jbGFzcyArICdcXFxcKXwnICtcbiAgICAgICAgJ1xcXFxcXFxcLnxbXlxcXFx4MjBcXFxcdFxcXFxuXFxcXHJcXFxcZj4rfl0pKycsICdnJyk7XG5cbiAgICAgIHJlT3B0aW1pemVTZWxlY3RvciA9IFJlZ0V4cChpZGVudGlmaWVyICsgJ3xeJCcpO1xuXG4gICAgICBPcHRpbWl6ZSA9IHtcbiAgICAgICAgSUQ6IFJlZ0V4cCgnXlxcXFwqPyMoJyArIGlkZW50aWZpZXIgKyAnKXwnICsgc2tpcF9ncm91cHMpLFxuICAgICAgICBUQUc6IFJlZ0V4cCgnXignICsgaWRlbnRpZmllciArICcpfCcgKyBza2lwX2dyb3VwcyksXG4gICAgICAgIENMQVNTOiBSZWdFeHAoJ15cXFxcLignICsgaWRlbnRpZmllciArICckKXwnICsgc2tpcF9ncm91cHMpXG4gICAgICB9O1xuXG4gICAgICBQYXR0ZXJucy5pZCA9IFJlZ0V4cCgnXiMoJyArIGlkZW50aWZpZXIgKyAnKSguKiknKTtcbiAgICAgIFBhdHRlcm5zLnRhZ05hbWUgPSBSZWdFeHAoJ14oJyArIGlkZW50aWZpZXIgKyAnKSguKiknKTtcbiAgICAgIFBhdHRlcm5zLmNsYXNzTmFtZSA9IFJlZ0V4cCgnXlxcXFwuKCcgKyBpZGVudGlmaWVyICsgJykoLiopJyk7XG4gICAgICBQYXR0ZXJucy5hdHRyaWJ1dGUgPSBSZWdFeHAoJ15cXFxcWycgKyBhdHRybWF0Y2hlciArICdcXFxcXSguKiknKTtcblxuICAgICAgVG9rZW5zLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgVG9rZW5zLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuXG4gICAgICBleHRlbmRlZFZhbGlkYXRvciA9IHN0YW5kYXJkVmFsaWRhdG9yLnJlcGxhY2UocHNldWRvY2xhc3MsICcuKicpO1xuXG4gICAgICByZVZhbGlkYXRvciA9IFJlZ0V4cChzdGFuZGFyZFZhbGlkYXRvcik7XG4gICAgfSxcblxuICBBQ0NFUFRfTk9ERSA9ICdyW3IubGVuZ3RoXT1jW2tdO2lmKGYmJmZhbHNlPT09ZihjW2tdKSlicmVhayBtYWluO2Vsc2UgY29udGludWUgbWFpbjsnLFxuICBSRUpFQ1RfTk9ERSA9IElFX0xUXzkgPyAnaWYoZS5ub2RlTmFtZTxcIkFcIiljb250aW51ZTsnIDogJycsXG4gIFRPX1VQUEVSX0NBU0UgPSBJRV9MVF85ID8gJy50b1VwcGVyQ2FzZSgpJyA6ICcnLFxuXG4gIGNvbXBpbGUgPVxuICAgIGZ1bmN0aW9uKHNlbGVjdG9yLCBzb3VyY2UsIG1vZGUpIHtcblxuICAgICAgdmFyIHBhcnRzID0gdHlwZW9mIHNlbGVjdG9yID09ICdzdHJpbmcnID8gc2VsZWN0b3IubWF0Y2gocmVTcGxpdEdyb3VwKSA6IHNlbGVjdG9yO1xuXG4gICAgICB0eXBlb2Ygc291cmNlID09ICdzdHJpbmcnIHx8IChzb3VyY2UgPSAnJyk7XG5cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT0gMSkge1xuICAgICAgICBzb3VyY2UgKz0gY29tcGlsZVNlbGVjdG9yKHBhcnRzWzBdLCBtb2RlID8gQUNDRVBUX05PREUgOiAnZiYmZihrKTtyZXR1cm4gdHJ1ZTsnLCBtb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpID0gLTEsIHNlZW4gPSB7IH0sIHRva2VuO1xuICAgICAgICB3aGlsZSAoKHRva2VuID0gcGFydHNbKytpXSkpIHtcbiAgICAgICAgICB0b2tlbiA9IHRva2VuLnJlcGxhY2UocmVUcmltU3BhY2VzLCAnJyk7XG4gICAgICAgICAgaWYgKCFzZWVuW3Rva2VuXSAmJiAoc2Vlblt0b2tlbl0gPSB0cnVlKSkge1xuICAgICAgICAgICAgc291cmNlICs9IGNvbXBpbGVTZWxlY3Rvcih0b2tlbiwgbW9kZSA/IEFDQ0VQVF9OT0RFIDogJ2YmJmYoayk7cmV0dXJuIHRydWU7JywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RlKSB7XG4gICAgICAgIHJldHVybiBGdW5jdGlvbignYyxzLHIsZCxoLGcsZix2JyxcbiAgICAgICAgICAndmFyIE4sbix4PTAsaz0tMSxlO21haW46d2hpbGUoKGU9Y1srK2tdKSl7JyArIHNvdXJjZSArICd9cmV0dXJuIHI7Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb24oJ2UscyxyLGQsaCxnLGYsdicsXG4gICAgICAgICAgJ3ZhciBOLG4seD0wLGs9ZTsnICsgc291cmNlICsgJ3JldHVybiBmYWxzZTsnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gIEZJTFRFUiA9XG4gICAgJ3ZhciB6PXZbQF18fCh2W0BdPVtdKSxsPXoubGVuZ3RoLTE7JyArXG4gICAgJ3doaWxlKGw+PTAmJnpbbF0hPT1lKS0tbDsnICtcbiAgICAnaWYobCE9PS0xKXticmVhazt9JyArXG4gICAgJ3pbei5sZW5ndGhdPWU7JyxcblxuICBjb21waWxlU2VsZWN0b3IgPVxuICAgIGZ1bmN0aW9uKHNlbGVjdG9yLCBzb3VyY2UsIG1vZGUpIHtcblxuICAgICAgdmFyIGEsIGIsIG4sIGsgPSAwLCBleHByLCBtYXRjaCwgcmVzdWx0LCBzdGF0dXMsIHRlc3QsIHR5cGU7XG5cbiAgICAgIHdoaWxlIChzZWxlY3Rvcikge1xuXG4gICAgICAgIGsrKztcblxuICAgICAgICBpZiAoKG1hdGNoID0gc2VsZWN0b3IubWF0Y2goUGF0dGVybnMudW5pdmVyc2FsKSkpIHtcbiAgICAgICAgICBleHByID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSBzZWxlY3Rvci5tYXRjaChQYXR0ZXJucy5pZCkpKSB7XG4gICAgICAgICAgbWF0Y2hbMV0gPSAoL1xcXFwvKS50ZXN0KG1hdGNoWzFdKSA/IGNvbnZlcnRFc2NhcGVzKG1hdGNoWzFdKSA6IG1hdGNoWzFdO1xuICAgICAgICAgIHNvdXJjZSA9ICdpZignICsgKFhNTF9ET0NVTUVOVCA/XG4gICAgICAgICAgICAncy5nZXRBdHRyaWJ1dGUoZSxcImlkXCIpJyA6XG4gICAgICAgICAgICAnKGUuc3VibWl0P3MuZ2V0QXR0cmlidXRlKGUsXCJpZFwiKTplLmlkKScpICtcbiAgICAgICAgICAgICc9PVwiJyArIG1hdGNoWzFdICsgJ1wiJyArXG4gICAgICAgICAgICAnKXsnICsgc291cmNlICsgJ30nO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gc2VsZWN0b3IubWF0Y2goUGF0dGVybnMudGFnTmFtZSkpKSB7XG4gICAgICAgICAgc291cmNlID0gJ2lmKGUubm9kZU5hbWUnICsgKFhNTF9ET0NVTUVOVCA/XG4gICAgICAgICAgICAnPT1cIicgKyBtYXRjaFsxXSArICdcIicgOiBUT19VUFBFUl9DQVNFICtcbiAgICAgICAgICAgICc9PVwiJyArIG1hdGNoWzFdLnRvVXBwZXJDYXNlKCkgKyAnXCInKSArXG4gICAgICAgICAgICAnKXsnICsgc291cmNlICsgJ30nO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gc2VsZWN0b3IubWF0Y2goUGF0dGVybnMuY2xhc3NOYW1lKSkpIHtcbiAgICAgICAgICBtYXRjaFsxXSA9ICgvXFxcXC8pLnRlc3QobWF0Y2hbMV0pID8gY29udmVydEVzY2FwZXMobWF0Y2hbMV0pIDogbWF0Y2hbMV07XG4gICAgICAgICAgbWF0Y2hbMV0gPSBRVUlSS1NfTU9ERSA/IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgOiBtYXRjaFsxXTtcbiAgICAgICAgICBzb3VyY2UgPSAnaWYoKG49JyArIChYTUxfRE9DVU1FTlQgP1xuICAgICAgICAgICAgJ2UuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIiknIDogJ2UuY2xhc3NOYW1lJykgK1xuICAgICAgICAgICAgJykmJm4ubGVuZ3RoJiYoXCIgXCIrJyArIChRVUlSS1NfTU9ERSA/ICduLnRvTG93ZXJDYXNlKCknIDogJ24nKSArXG4gICAgICAgICAgICAnLnJlcGxhY2UoLycgKyB3aGl0ZXNwYWNlICsgJysvZyxcIiBcIikrXCIgXCIpLmluZGV4T2YoXCIgJyArIG1hdGNoWzFdICsgJyBcIik+LTEnICtcbiAgICAgICAgICAgICcpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSBzZWxlY3Rvci5tYXRjaChQYXR0ZXJucy5hdHRyaWJ1dGUpKSkge1xuICAgICAgICAgIGlmIChtYXRjaFsyXSAmJiAhT3BlcmF0b3JzW21hdGNoWzJdXSkge1xuICAgICAgICAgICAgZW1pdCgnVW5zdXBwb3J0ZWQgb3BlcmF0b3IgaW4gYXR0cmlidXRlIHNlbGVjdG9ycyBcIicgKyBzZWxlY3RvciArICdcIicpO1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXN0ID0gJ2ZhbHNlJztcbiAgICAgICAgICBpZiAobWF0Y2hbMl0gJiYgbWF0Y2hbNF0gJiYgKHRlc3QgPSBPcGVyYXRvcnNbbWF0Y2hbMl1dKSkge1xuICAgICAgICAgICAgbWF0Y2hbNF0gPSAoL1xcXFwvKS50ZXN0KG1hdGNoWzRdKSA/IGNvbnZlcnRFc2NhcGVzKG1hdGNoWzRdKSA6IG1hdGNoWzRdO1xuICAgICAgICAgICAgSU5TRU5TSVRJVkVfTUFQWydjbGFzcyddID0gUVVJUktTX01PREUgPyAxIDogMDtcbiAgICAgICAgICAgIHR5cGUgPSBJTlNFTlNJVElWRV9NQVBbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKC9cXCVtL2csIHR5cGUgPyBtYXRjaFs0XS50b0xvd2VyQ2FzZSgpIDogbWF0Y2hbNF0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hbMl0gPT0gJyE9JyB8fCBtYXRjaFsyXSA9PSAnPScpIHtcbiAgICAgICAgICAgIHRlc3QgPSAnbicgKyBtYXRjaFsyXSArICc9XCJcIic7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNvdXJjZSA9ICdpZihuPXMuaGFzQXR0cmlidXRlKGUsXCInICsgbWF0Y2hbMV0gKyAnXCIpKXsnICtcbiAgICAgICAgICAgIChtYXRjaFsyXSA/ICduPXMuZ2V0QXR0cmlidXRlKGUsXCInICsgbWF0Y2hbMV0gKyAnXCIpJyA6ICcnKSArXG4gICAgICAgICAgICAodHlwZSAmJiBtYXRjaFsyXSA/ICcudG9Mb3dlckNhc2UoKTsnIDogJzsnKSArXG4gICAgICAgICAgICAnaWYoJyArIChtYXRjaFsyXSA/IHRlc3QgOiAnbicpICsgJyl7JyArIHNvdXJjZSArICd9fSc7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSBzZWxlY3Rvci5tYXRjaChQYXR0ZXJucy5hZGphY2VudCkpKSB7XG4gICAgICAgICAgc291cmNlID0gKG1vZGUgPyAnJyA6IEZJTFRFUi5yZXBsYWNlKC9AL2csIGspKSArIHNvdXJjZTtcbiAgICAgICAgICBzb3VyY2UgPSAndmFyIE4nICsgayArICc9ZTt3aGlsZShlJiYoZT1lLnByZXZpb3VzU2libGluZykpe2lmKGUubm9kZU5hbWU+XCJAXCIpeycgKyBzb3VyY2UgKyAnYnJlYWs7fX1lPU4nICsgayArICc7JztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHNlbGVjdG9yLm1hdGNoKFBhdHRlcm5zLnJlbGF0aXZlKSkpIHtcbiAgICAgICAgICBzb3VyY2UgPSAobW9kZSA/ICcnIDogRklMVEVSLnJlcGxhY2UoL0AvZywgaykpICsgc291cmNlO1xuICAgICAgICAgIHNvdXJjZSA9ICd2YXIgTicgKyBrICsgJz1lO2U9ZS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQ7d2hpbGUoZSYmZSE9PU4nICsgayArICcpe2lmKGUubm9kZU5hbWU+XCJAXCIpeycgKyBzb3VyY2UgKyAnfWU9ZS5uZXh0U2libGluZzt9ZT1OJyArIGsgKyAnOyc7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSBzZWxlY3Rvci5tYXRjaChQYXR0ZXJucy5jaGlsZHJlbikpKSB7XG4gICAgICAgICAgc291cmNlID0gKG1vZGUgPyAnJyA6IEZJTFRFUi5yZXBsYWNlKC9AL2csIGspKSArIHNvdXJjZTtcbiAgICAgICAgICBzb3VyY2UgPSAndmFyIE4nICsgayArICc9ZTt3aGlsZShlJiZlIT09aCYmZSE9PWcmJihlPWUucGFyZW50Tm9kZSkpeycgKyBzb3VyY2UgKyAnYnJlYWs7fWU9TicgKyBrICsgJzsnO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gc2VsZWN0b3IubWF0Y2goUGF0dGVybnMuYW5jZXN0b3IpKSkge1xuICAgICAgICAgIHNvdXJjZSA9IChtb2RlID8gJycgOiBGSUxURVIucmVwbGFjZSgvQC9nLCBrKSkgKyBzb3VyY2U7XG4gICAgICAgICAgc291cmNlID0gJ3ZhciBOJyArIGsgKyAnPWU7d2hpbGUoZSYmZSE9PWgmJmUhPT1nJiYoZT1lLnBhcmVudE5vZGUpKXsnICsgc291cmNlICsgJ31lPU4nICsgayArICc7JztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHNlbGVjdG9yLm1hdGNoKFBhdHRlcm5zLnNwc2V1ZG9zKSkgJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdKSB7XG4gICAgICAgICAgICBjYXNlICdyb290JzpcbiAgICAgICAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgc291cmNlID0gJ2lmKGU9PT1ofHxzLmNvbnRhaW5zKGgsZSkpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc291cmNlID0gJ2lmKGU9PT1oKXsnICsgc291cmNlICsgJ30nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW1wdHknOlxuICAgICAgICAgICAgICBzb3VyY2UgPSAnaWYocy5pc0VtcHR5KGUpKXsnICsgc291cmNlICsgJ30nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGlmIChtYXRjaFsxXSAmJiBtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaFsyXSA9PSAnbicpIHtcbiAgICAgICAgICAgICAgICAgIHNvdXJjZSA9ICdpZihlIT09aCl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hbMl0gPT0gJ2V2ZW4nKSB7XG4gICAgICAgICAgICAgICAgICBhID0gMjtcbiAgICAgICAgICAgICAgICAgIGIgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hbMl0gPT0gJ29kZCcpIHtcbiAgICAgICAgICAgICAgICAgIGEgPSAyO1xuICAgICAgICAgICAgICAgICAgYiA9IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGIgPSAoKG4gPSBtYXRjaFsyXS5tYXRjaCgvKC0/XFxkKykkLykpID8gcGFyc2VJbnQoblsxXSwgMTApIDogMCk7XG4gICAgICAgICAgICAgICAgICBhID0gKChuID0gbWF0Y2hbMl0ubWF0Y2goLygtP1xcZCopbi9pKSkgPyBwYXJzZUludChuWzFdLCAxMCkgOiAwKTtcbiAgICAgICAgICAgICAgICAgIGlmIChuICYmIG5bMV0gPT0gJy0nKSBhID0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRlc3QgPSBhID4gMSA/XG4gICAgICAgICAgICAgICAgICAoL2xhc3QvaS50ZXN0KG1hdGNoWzFdKSkgPyAnKG4tKCcgKyBiICsgJykpJScgKyBhICsgJz09MCcgOlxuICAgICAgICAgICAgICAgICAgJ24+PScgKyBiICsgJyYmKG4tKCcgKyBiICsgJykpJScgKyBhICsgJz09MCcgOiBhIDwgLTEgP1xuICAgICAgICAgICAgICAgICAgKC9sYXN0L2kudGVzdChtYXRjaFsxXSkpID8gJyhuLSgnICsgYiArICcpKSUnICsgYSArICc9PTAnIDpcbiAgICAgICAgICAgICAgICAgICduPD0nICsgYiArICcmJihuLSgnICsgYiArICcpKSUnICsgYSArICc9PTAnIDogYSA9PT0gMCA/XG4gICAgICAgICAgICAgICAgICAnbj09JyArIGIgOiBhID09IC0xID8gJ248PScgKyBiIDogJ24+PScgKyBiO1xuICAgICAgICAgICAgICAgIHNvdXJjZSA9XG4gICAgICAgICAgICAgICAgICAnaWYoZSE9PWgpeycgK1xuICAgICAgICAgICAgICAgICAgICAnbj1zWycgKyAoLy1vZi10eXBlL2kudGVzdChtYXRjaFsxXSkgPyAnXCJudGhPZlR5cGVcIicgOiAnXCJudGhFbGVtZW50XCInKSArICddJyArXG4gICAgICAgICAgICAgICAgICAgICAgJyhlLCcgKyAoL2xhc3QvaS50ZXN0KG1hdGNoWzFdKSA/ICd0cnVlJyA6ICdmYWxzZScpICsgJyk7JyArXG4gICAgICAgICAgICAgICAgICAgICdpZignICsgdGVzdCArICcpeycgKyBzb3VyY2UgKyAnfScgK1xuICAgICAgICAgICAgICAgICAgJ30nO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGEgPSAvZmlyc3QvaS50ZXN0KG1hdGNoWzFdKSA/ICdwcmV2aW91cycgOiAnbmV4dCc7XG4gICAgICAgICAgICAgICAgbiA9IC9vbmx5L2kudGVzdChtYXRjaFsxXSkgPyAncHJldmlvdXMnIDogJ25leHQnO1xuICAgICAgICAgICAgICAgIGIgPSAvZmlyc3R8bGFzdC9pLnRlc3QobWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgIHR5cGUgPSAvLW9mLXR5cGUvaS50ZXN0KG1hdGNoWzFdKSA/ICcmJm4ubm9kZU5hbWUhPWUubm9kZU5hbWUnIDogJyYmbi5ub2RlTmFtZTxcIkBcIic7XG4gICAgICAgICAgICAgICAgc291cmNlID0gJ2lmKGUhPT1oKXsnICtcbiAgICAgICAgICAgICAgICAgICggJ249ZTt3aGlsZSgobj1uLicgKyBhICsgJ1NpYmxpbmcpJyArIHR5cGUgKyAnKTtpZighbil7JyArIChiID8gc291cmNlIDpcbiAgICAgICAgICAgICAgICAgICAgJ249ZTt3aGlsZSgobj1uLicgKyBuICsgJ1NpYmxpbmcpJyArIHR5cGUgKyAnKTtpZighbil7JyArIHNvdXJjZSArICd9JykgKyAnfScgKSArICd9JztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSBzZWxlY3Rvci5tYXRjaChQYXR0ZXJucy5kcHNldWRvcykpICYmIG1hdGNoWzFdKSB7XG4gICAgICAgICAgc3dpdGNoIChtYXRjaFsxXS5tYXRjaCgvXlxcdysvKVswXSkge1xuICAgICAgICAgICAgY2FzZSAnbm90JzpcbiAgICAgICAgICAgICAgZXhwciA9IG1hdGNoWzNdLnJlcGxhY2UocmVUcmltU3BhY2VzLCAnJyk7XG4gICAgICAgICAgICAgIGlmIChDb25maWcuU0lNUExFTk9UICYmICFyZVNpbXBsZU5vdC50ZXN0KGV4cHIpKSB7XG4gICAgICAgICAgICAgICAgZW1pdCgnTmVnYXRpb24gcHNldWRvLWNsYXNzIG9ubHkgYWNjZXB0cyBzaW1wbGUgc2VsZWN0b3JzIFwiJyArIHNlbGVjdG9yICsgJ1wiJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICgnY29tcGF0TW9kZScgaW4gZG9jKSB7XG4gICAgICAgICAgICAgICAgICBzb3VyY2UgPSAnaWYoIScgKyBjb21waWxlKGV4cHIsICcnLCBmYWxzZSkgKyAnKGUscyxyLGQsaCxnKSl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc291cmNlID0gJ2lmKCFzLm1hdGNoKGUsIFwiJyArIGV4cHIucmVwbGFjZSgvXFx4MjIvZywgJ1xcXFxcIicpICsgJ1wiLGcpKXsnICsgc291cmNlICsnfSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2hlY2tlZCc6XG4gICAgICAgICAgICAgIHNvdXJjZSA9ICdpZigodHlwZW9mIGUuZm9ybSE9PVwidW5kZWZpbmVkXCImJigvXig/OnJhZGlvfGNoZWNrYm94KSQvaSkudGVzdChlLnR5cGUpJiZlLmNoZWNrZWQpJyArXG4gICAgICAgICAgICAgICAgKENvbmZpZy5VU0VfSFRNTDUgPyAnfHwoL15vcHRpb24kL2kudGVzdChlLm5vZGVOYW1lKSYmKGUuc2VsZWN0ZWR8fGUuY2hlY2tlZCkpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgJyl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkaXNhYmxlZCc6XG4gICAgICAgICAgICAgIHNvdXJjZSA9ICdpZigoKHR5cGVvZiBlLmZvcm0hPT1cInVuZGVmaW5lZFwiJyArXG4gICAgICAgICAgICAgICAgKENvbmZpZy5VU0VfSFRNTDUgPyAnJyA6ICcmJiEoL15oaWRkZW4kL2kpLnRlc3QoZS50eXBlKScpICtcbiAgICAgICAgICAgICAgICAnKXx8cy5pc0xpbmsoZSkpJiZlLmRpc2FibGVkPT09dHJ1ZSl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmFibGVkJzpcbiAgICAgICAgICAgICAgc291cmNlID0gJ2lmKCgodHlwZW9mIGUuZm9ybSE9PVwidW5kZWZpbmVkXCInICtcbiAgICAgICAgICAgICAgICAoQ29uZmlnLlVTRV9IVE1MNSA/ICcnIDogJyYmISgvXmhpZGRlbiQvaSkudGVzdChlLnR5cGUpJykgK1xuICAgICAgICAgICAgICAgICcpfHxzLmlzTGluayhlKSkmJmUuZGlzYWJsZWQ9PT1mYWxzZSl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsYW5nJzpcbiAgICAgICAgICAgICAgdGVzdCA9ICcnO1xuICAgICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHRlc3QgPSBtYXRjaFsyXS5zdWJzdHIoMCwgMikgKyAnLSc7XG4gICAgICAgICAgICAgIHNvdXJjZSA9ICdkb3sobj1lLmxhbmd8fFwiXCIpLnRvTG93ZXJDYXNlKCk7JyArXG4gICAgICAgICAgICAgICAgJ2lmKChuPT1cIlwiJiZoLmxhbmc9PVwiJyArIG1hdGNoWzJdLnRvTG93ZXJDYXNlKCkgKyAnXCIpfHwnICtcbiAgICAgICAgICAgICAgICAnKG4mJihuPT1cIicgKyBtYXRjaFsyXS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAgICAgICAnXCJ8fG4uc3Vic3RyKDAsMyk9PVwiJyArIHRlc3QudG9Mb3dlckNhc2UoKSArICdcIikpKScgK1xuICAgICAgICAgICAgICAgICd7JyArIHNvdXJjZSArICdicmVhazt9fXdoaWxlKChlPWUucGFyZW50Tm9kZSkmJmUhPT1nKTsnO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RhcmdldCc6XG4gICAgICAgICAgICAgIHNvdXJjZSA9ICdpZihlLmlkPT1kLmxvY2F0aW9uLmhhc2guc2xpY2UoMSkpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGluayc6XG4gICAgICAgICAgICAgIHNvdXJjZSA9ICdpZihzLmlzTGluayhlKSYmIWUudmlzaXRlZCl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd2aXNpdGVkJzpcbiAgICAgICAgICAgICAgc291cmNlID0gJ2lmKHMuaXNMaW5rKGUpJiZlLnZpc2l0ZWQpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWN0aXZlJzpcbiAgICAgICAgICAgICAgc291cmNlID0gJ2lmKGU9PT1kLmFjdGl2ZUVsZW1lbnQpeycgKyBzb3VyY2UgKyAnfSc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG92ZXInOlxuICAgICAgICAgICAgICBzb3VyY2UgPSAnaWYoZT09PWQuaG92ZXJFbGVtZW50KXsnICsgc291cmNlICsgJ30nO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZvY3VzJzpcbiAgICAgICAgICAgICAgc291cmNlID0gJ2hhc0ZvY3VzJyBpbiBkb2MgP1xuICAgICAgICAgICAgICAgICdpZihlPT09ZC5hY3RpdmVFbGVtZW50JiZkLmhhc0ZvY3VzKCkmJihlLnR5cGV8fGUuaHJlZnx8dHlwZW9mIGUudGFiSW5kZXg9PVwibnVtYmVyXCIpKXsnICsgc291cmNlICsgJ30nIDpcbiAgICAgICAgICAgICAgICAnaWYoZT09PWQuYWN0aXZlRWxlbWVudCYmKGUudHlwZXx8ZS5ocmVmKSl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWxlY3RlZCc6XG4gICAgICAgICAgICAgIHNvdXJjZSA9ICdpZigvXm9wdGlvbiQvaS50ZXN0KGUubm9kZU5hbWUpJiYoZS5zZWxlY3RlZHx8ZS5jaGVja2VkKSl7JyArIHNvdXJjZSArICd9JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIHtcblxuICAgICAgICAgIGV4cHIgPSBmYWxzZTtcbiAgICAgICAgICBzdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgICBmb3IgKGV4cHIgaW4gU2VsZWN0b3JzKSB7XG4gICAgICAgICAgICBpZiAoKG1hdGNoID0gc2VsZWN0b3IubWF0Y2goU2VsZWN0b3JzW2V4cHJdLkV4cHJlc3Npb24pKSAmJiBtYXRjaFsxXSkge1xuICAgICAgICAgICAgICByZXN1bHQgPSBTZWxlY3RvcnNbZXhwcl0uQ2FsbGJhY2sobWF0Y2gsIHNvdXJjZSk7XG4gICAgICAgICAgICAgIHNvdXJjZSA9IHJlc3VsdC5zb3VyY2U7XG4gICAgICAgICAgICAgIHN0YXR1cyA9IHJlc3VsdC5zdGF0dXM7XG4gICAgICAgICAgICAgIGlmIChzdGF0dXMpIHsgYnJlYWs7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAgICAgZW1pdCgnVW5rbm93biBwc2V1ZG8tY2xhc3Mgc2VsZWN0b3IgXCInICsgc2VsZWN0b3IgKyAnXCInKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWV4cHIpIHtcbiAgICAgICAgICAgIGVtaXQoJ1Vua25vd24gdG9rZW4gaW4gc2VsZWN0b3IgXCInICsgc2VsZWN0b3IgKyAnXCInKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICBlbWl0KCdJbnZhbGlkIHN5bnRheCBpbiBzZWxlY3RvciBcIicgKyBzZWxlY3RvciArICdcIicpO1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGVjdG9yID0gbWF0Y2ggJiYgbWF0Y2hbbWF0Y2gubGVuZ3RoIC0gMV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgfSxcblxuICBtYXRjaCA9XG4gICAgZnVuY3Rpb24oZWxlbWVudCwgc2VsZWN0b3IsIGZyb20sIGNhbGxiYWNrKSB7XG5cbiAgICAgIHZhciBwYXJ0cztcblxuICAgICAgaWYgKCEoZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09IDEpKSB7XG4gICAgICAgIGVtaXQoJ0ludmFsaWQgZWxlbWVudCBhcmd1bWVudCcpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RvciAhPSAnc3RyaW5nJykge1xuICAgICAgICBlbWl0KCdJbnZhbGlkIHNlbGVjdG9yIGFyZ3VtZW50Jyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAobGFzdENvbnRleHQgIT09IGZyb20pIHtcbiAgICAgICAgc3dpdGNoQ29udGV4dChmcm9tIHx8IChmcm9tID0gZWxlbWVudC5vd25lckRvY3VtZW50KSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IuXG4gICAgICAgIHJlcGxhY2UocmVUcmltU3BhY2VzLCAnJykuXG4gICAgICAgIHJlcGxhY2UoL1xceDAwfFxcXFwkL2csICdcXHVmZmZkJyk7XG5cbiAgICAgIENvbmZpZy5TSE9SVENVVFMgJiYgKHNlbGVjdG9yID0gRG9tLnNob3J0Y3V0cyhzZWxlY3RvciwgZWxlbWVudCwgZnJvbSkpO1xuXG4gICAgICBpZiAobGFzdE1hdGNoZXIgIT0gc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKChwYXJ0cyA9IHNlbGVjdG9yLm1hdGNoKHJlVmFsaWRhdG9yKSkgJiYgcGFydHNbMF0gPT0gc2VsZWN0b3IpIHtcbiAgICAgICAgICBpc1NpbmdsZU1hdGNoID0gKHBhcnRzID0gc2VsZWN0b3IubWF0Y2gocmVTcGxpdEdyb3VwKSkubGVuZ3RoIDwgMjtcbiAgICAgICAgICBsYXN0TWF0Y2hlciA9IHNlbGVjdG9yO1xuICAgICAgICAgIGxhc3RQYXJ0c01hdGNoID0gcGFydHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW1pdCgnVGhlIHN0cmluZyBcIicgKyBzZWxlY3RvciArICdcIiwgaXMgbm90IGEgdmFsaWQgQ1NTIHNlbGVjdG9yJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgcGFydHMgPSBsYXN0UGFydHNNYXRjaDtcblxuICAgICAgaWYgKCFtYXRjaFJlc29sdmVyc1tzZWxlY3Rvcl0gfHwgbWF0Y2hDb250ZXh0c1tzZWxlY3Rvcl0gIT09IGZyb20pIHtcbiAgICAgICAgbWF0Y2hSZXNvbHZlcnNbc2VsZWN0b3JdID0gY29tcGlsZShpc1NpbmdsZU1hdGNoID8gW3NlbGVjdG9yXSA6IHBhcnRzLCAnJywgZmFsc2UpO1xuICAgICAgICBtYXRjaENvbnRleHRzW3NlbGVjdG9yXSA9IGZyb207XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXRjaFJlc29sdmVyc1tzZWxlY3Rvcl0oZWxlbWVudCwgU25hcHNob3QsIFsgXSwgZG9jLCByb290LCBmcm9tLCBjYWxsYmFjaywgeyB9KTtcbiAgICB9LFxuXG4gIGZpcnN0ID1cbiAgICBmdW5jdGlvbihzZWxlY3RvciwgZnJvbSkge1xuICAgICAgcmV0dXJuIHNlbGVjdChzZWxlY3RvciwgZnJvbSwgZnVuY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfSlbMF0gfHwgbnVsbDtcbiAgICB9LFxuXG4gIHNlbGVjdCA9XG4gICAgZnVuY3Rpb24oc2VsZWN0b3IsIGZyb20sIGNhbGxiYWNrKSB7XG5cbiAgICAgIHZhciBpLCBjaGFuZ2VkLCBlbGVtZW50LCBlbGVtZW50cywgcGFydHMsIHRva2VuLCBvcmlnaW5hbCA9IHNlbGVjdG9yO1xuXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBlbWl0KCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICAgICAgICByZXR1cm4gWyBdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFsgXTtcbiAgICAgIH0gZWxzZSBpZiAoZnJvbSAmJiAhKC8xfDl8MTEvKS50ZXN0KGZyb20ubm9kZVR5cGUpKSB7XG4gICAgICAgIGVtaXQoJ0ludmFsaWQgb3IgaWxsZWdhbCBjb250ZXh0IGVsZW1lbnQnKTtcbiAgICAgICAgcmV0dXJuIFsgXTtcbiAgICAgIH0gZWxzZSBpZiAobGFzdENvbnRleHQgIT09IGZyb20pIHtcbiAgICAgICAgc3dpdGNoQ29udGV4dChmcm9tIHx8IChmcm9tID0gZG9jKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChDb25maWcuQ0FDSElORyAmJiAoZWxlbWVudHMgPSBEb20ubG9hZFJlc3VsdHMob3JpZ2luYWwsIGZyb20sIGRvYywgcm9vdCkpKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayA/IGNvbmNhdENhbGwoWyBdLCBlbGVtZW50cywgY2FsbGJhY2spIDogZWxlbWVudHM7XG4gICAgICB9XG5cbiAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IuXG4gICAgICAgIHJlcGxhY2UocmVUcmltU3BhY2VzLCAnJykuXG4gICAgICAgIHJlcGxhY2UoL1xceDAwfFxcXFwkL2csICdcXHVmZmZkJyk7XG5cbiAgICAgIENvbmZpZy5TSE9SVENVVFMgJiYgKHNlbGVjdG9yID0gRG9tLnNob3J0Y3V0cyhzZWxlY3RvciwgZnJvbSkpO1xuXG4gICAgICBpZiAoKGNoYW5nZWQgPSBsYXN0U2VsZWN0b3IgIT0gc2VsZWN0b3IpKSB7XG4gICAgICAgIGlmICgocGFydHMgPSBzZWxlY3Rvci5tYXRjaChyZVZhbGlkYXRvcikpICYmIHBhcnRzWzBdID09IHNlbGVjdG9yKSB7XG4gICAgICAgICAgaXNTaW5nbGVTZWxlY3QgPSAocGFydHMgPSBzZWxlY3Rvci5tYXRjaChyZVNwbGl0R3JvdXApKS5sZW5ndGggPCAyO1xuICAgICAgICAgIGxhc3RTZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgICAgICAgIGxhc3RQYXJ0c1NlbGVjdCA9IHBhcnRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVtaXQoJ1RoZSBzdHJpbmcgXCInICsgc2VsZWN0b3IgKyAnXCIsIGlzIG5vdCBhIHZhbGlkIENTUyBzZWxlY3RvcicpO1xuICAgICAgICAgIHJldHVybiBbIF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBwYXJ0cyA9IGxhc3RQYXJ0c1NlbGVjdDtcblxuICAgICAgaWYgKGZyb20ubm9kZVR5cGUgPT0gMTEpIHtcblxuICAgICAgICBlbGVtZW50cyA9IGJ5VGFnUmF3KCcqJywgZnJvbSk7XG5cbiAgICAgIH0gZWxzZSBpZiAoaXNTaW5nbGVTZWxlY3QpIHtcblxuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgIHBhcnRzID0gc2VsZWN0b3IubWF0Y2gocmVTcGxpdFRva2VuKTtcbiAgICAgICAgICB0b2tlbiA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGxhc3RTbGljZSA9IHRva2VuLnNwbGl0KCc6bm90Jyk7XG4gICAgICAgICAgbGFzdFNsaWNlID0gbGFzdFNsaWNlW2xhc3RTbGljZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICBsYXN0UG9zaXRpb24gPSBzZWxlY3Rvci5sZW5ndGggLSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQ29uZmlnLlVOSVFVRV9JRCAmJiAocGFydHMgPSBsYXN0U2xpY2UubWF0Y2goT3B0aW1pemUuSUQpKSAmJiAodG9rZW4gPSBwYXJ0c1sxXSkpIHtcbiAgICAgICAgICBpZiAoKGVsZW1lbnQgPSBfYnlJZCh0b2tlbiwgZnJvbSkpKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2goZWxlbWVudCwgc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKGVsZW1lbnQpO1xuICAgICAgICAgICAgICBlbGVtZW50cyA9IFtlbGVtZW50XTtcbiAgICAgICAgICAgIH0gZWxzZSBlbGVtZW50cyA9IFsgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChDb25maWcuVU5JUVVFX0lEICYmIChwYXJ0cyA9IHNlbGVjdG9yLm1hdGNoKE9wdGltaXplLklEKSkgJiYgKHRva2VuID0gcGFydHNbMV0pKSB7XG4gICAgICAgICAgaWYgKChlbGVtZW50ID0gX2J5SWQodG9rZW4sIGRvYykpKSB7XG4gICAgICAgICAgICBpZiAoJyMnICsgdG9rZW4gPT0gc2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soZWxlbWVudCk7XG4gICAgICAgICAgICAgIGVsZW1lbnRzID0gW2VsZW1lbnRdO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvWz4rfl0vLnRlc3Qoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgIGZyb20gPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmcm9tID0gZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgZWxlbWVudHMgPSBbIF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgICBDb25maWcuQ0FDSElORyAmJiBEb20uc2F2ZVJlc3VsdHMob3JpZ2luYWwsIGZyb20sIGRvYywgZWxlbWVudHMpO1xuICAgICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghWE1MX0RPQ1VNRU5UICYmIEdFQlROICYmIChwYXJ0cyA9IGxhc3RTbGljZS5tYXRjaChPcHRpbWl6ZS5UQUcpKSAmJiAodG9rZW4gPSBwYXJ0c1sxXSkpIHtcbiAgICAgICAgICBpZiAoKGVsZW1lbnRzID0gZnJvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0b2tlbikpLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gWyBdOyB9XG4gICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSgwLCBsYXN0UG9zaXRpb24pICsgc2VsZWN0b3Iuc2xpY2UobGFzdFBvc2l0aW9uKS5yZXBsYWNlKHRva2VuLCAnKicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoIVhNTF9ET0NVTUVOVCAmJiBHRUJDTiAmJiAocGFydHMgPSBsYXN0U2xpY2UubWF0Y2goT3B0aW1pemUuQ0xBU1MpKSAmJiAodG9rZW4gPSBwYXJ0c1sxXSkpIHtcbiAgICAgICAgICBpZiAoKGVsZW1lbnRzID0gZnJvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHVuZXNjYXBlSWRlbnRpZmllcih0b2tlbikpKS5sZW5ndGggPT09IDApIHsgcmV0dXJuIFsgXTsgfVxuICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSgwLCBsYXN0UG9zaXRpb24pICsgc2VsZWN0b3Iuc2xpY2UobGFzdFBvc2l0aW9uKS5yZXBsYWNlKCcuJyArIHRva2VuLFxuICAgICAgICAgICAgICByZU9wdGltaXplU2VsZWN0b3IudGVzdChzZWxlY3Rvci5jaGFyQXQoc2VsZWN0b3IuaW5kZXhPZih0b2tlbikgLSAxKSkgPyAnJyA6ICcqJyk7XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICBpZiAoIWVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChJRV9MVF85KSB7XG4gICAgICAgICAgZWxlbWVudHMgPSAvXig/OmFwcGxldHxvYmplY3QpJC9pLnRlc3QoZnJvbS5ub2RlTmFtZSkgPyBmcm9tLmNoaWxkcmVuIDogYnlUYWdSYXcoJyonLCBmcm9tKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbGVtZW50cyA9IGZyb20uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXNlbGVjdFJlc29sdmVyc1tzZWxlY3Rvcl0gfHwgc2VsZWN0Q29udGV4dHNbc2VsZWN0b3JdICE9PSBmcm9tKSB7XG4gICAgICAgIHNlbGVjdFJlc29sdmVyc1tzZWxlY3Rvcl0gPSBjb21waWxlKGlzU2luZ2xlU2VsZWN0ID8gW3NlbGVjdG9yXSA6IHBhcnRzLCBSRUpFQ1RfTk9ERSwgdHJ1ZSk7XG4gICAgICAgIHNlbGVjdENvbnRleHRzW3NlbGVjdG9yXSA9IGZyb207XG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnRzID0gc2VsZWN0UmVzb2x2ZXJzW3NlbGVjdG9yXShlbGVtZW50cywgU25hcHNob3QsIFsgXSwgZG9jLCByb290LCBmcm9tLCBjYWxsYmFjaywgeyB9KTtcblxuICAgICAgQ29uZmlnLkNBQ0hJTkcgJiYgRG9tLnNhdmVSZXN1bHRzKG9yaWdpbmFsLCBmcm9tLCBkb2MsIGVsZW1lbnRzKTtcblxuICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgIH0sXG5cbiAgRk4gPSBmdW5jdGlvbih4KSB7IHJldHVybiB4OyB9LFxuXG4gIG1hdGNoQ29udGV4dHMgPSB7IH0sXG4gIG1hdGNoUmVzb2x2ZXJzID0geyB9LFxuXG4gIHNlbGVjdENvbnRleHRzID0geyB9LFxuICBzZWxlY3RSZXNvbHZlcnMgPSB7IH0sXG5cbiAgU25hcHNob3QgPSB7XG4gICAgYnlJZDogX2J5SWQsXG4gICAgbWF0Y2g6IG1hdGNoLFxuICAgIHNlbGVjdDogc2VsZWN0LFxuICAgIGlzTGluazogaXNMaW5rLFxuICAgIGlzRW1wdHk6IGlzRW1wdHksXG4gICAgY29udGFpbnM6IGNvbnRhaW5zLFxuICAgIG50aE9mVHlwZTogbnRoT2ZUeXBlLFxuICAgIG50aEVsZW1lbnQ6IG50aEVsZW1lbnQsXG4gICAgZ2V0QXR0cmlidXRlOiBnZXRBdHRyaWJ1dGUsXG4gICAgaGFzQXR0cmlidXRlOiBoYXNBdHRyaWJ1dGVcbiAgfSxcblxuICBEb20gPSB7XG5cbiAgICBBQ0NFUFRfTk9ERTogQUNDRVBUX05PREUsXG5cbiAgICBieUlkOiBieUlkLFxuICAgIG1hdGNoOiBtYXRjaCxcbiAgICBmaXJzdDogZmlyc3QsXG4gICAgc2VsZWN0OiBzZWxlY3QsXG4gICAgY29tcGlsZTogY29tcGlsZSxcbiAgICBjb250YWluczogY29udGFpbnMsXG4gICAgY29uZmlndXJlOiBjb25maWd1cmUsXG4gICAgZ2V0QXR0cmlidXRlOiBnZXRBdHRyaWJ1dGUsXG4gICAgaGFzQXR0cmlidXRlOiBoYXNBdHRyaWJ1dGUsXG5cbiAgICBzZXRDYWNoZTogRk4sXG4gICAgc2hvcnRjdXRzOiBGTixcbiAgICBsb2FkUmVzdWx0czogRk4sXG4gICAgc2F2ZVJlc3VsdHM6IEZOLFxuXG4gICAgZW1pdDogZW1pdCxcbiAgICBDb25maWc6IENvbmZpZyxcbiAgICBTbmFwc2hvdDogU25hcHNob3QsXG5cbiAgICBPcGVyYXRvcnM6IE9wZXJhdG9ycyxcbiAgICBTZWxlY3RvcnM6IFNlbGVjdG9ycyxcblxuICAgIFRva2VuczogVG9rZW5zLFxuICAgIFZlcnNpb246IHZlcnNpb24sXG5cbiAgICByZWdpc3Rlck9wZXJhdG9yOlxuICAgICAgZnVuY3Rpb24oc3ltYm9sLCByZXNvbHZlcikge1xuICAgICAgICBPcGVyYXRvcnNbc3ltYm9sXSB8fCAoT3BlcmF0b3JzW3N5bWJvbF0gPSByZXNvbHZlcik7XG4gICAgICB9LFxuXG4gICAgcmVnaXN0ZXJTZWxlY3RvcjpcbiAgICAgIGZ1bmN0aW9uKG5hbWUsIHJleHAsIGZ1bmMpIHtcbiAgICAgICAgU2VsZWN0b3JzW25hbWVdIHx8IChTZWxlY3RvcnNbbmFtZV0gPSB7XG4gICAgICAgICAgRXhwcmVzc2lvbjogcmV4cCxcbiAgICAgICAgICBDYWxsYmFjazogZnVuY1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICB9O1xuXG4gIGluaXRpYWxpemUoZG9jKTtcblxuICByZXR1cm4gRG9tO1xufSk7XG4iLCJ2YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbiAgLCBxcyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJylcbiAgO1xuXG5mdW5jdGlvbiBzaGExIChrZXksIGJvZHkpIHtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywga2V5KS51cGRhdGUoYm9keSkuZGlnZXN0KCdiYXNlNjQnKVxufVxuXG5mdW5jdGlvbiByc2EgKGtleSwgYm9keSkge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZVNpZ24oXCJSU0EtU0hBMVwiKS51cGRhdGUoYm9keSkuc2lnbihrZXksICdiYXNlNjQnKTtcbn1cblxuZnVuY3Rpb24gcmZjMzk4NiAoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKVxuICAgIC5yZXBsYWNlKC8hL2csJyUyMScpXG4gICAgLnJlcGxhY2UoL1xcKi9nLCclMkEnKVxuICAgIC5yZXBsYWNlKC9cXCgvZywnJTI4JylcbiAgICAucmVwbGFjZSgvXFwpL2csJyUyOScpXG4gICAgLnJlcGxhY2UoLycvZywnJTI3JylcbiAgICA7XG59XG5cbi8vIE1hcHMgb2JqZWN0IHRvIGJpLWRpbWVuc2lvbmFsIGFycmF5XG4vLyBDb252ZXJ0cyB7IGZvbzogJ0EnLCBiYXI6IFsgJ2InLCAnQicgXX0gdG9cbi8vIFsgWydmb28nLCAnQSddLCBbJ2JhcicsICdiJ10sIFsnYmFyJywgJ0InXSBdXG5mdW5jdGlvbiBtYXAgKG9iaikge1xuICB2YXIga2V5LCB2YWwsIGFyciA9IFtdXG4gIGZvciAoa2V5IGluIG9iaikge1xuICAgIHZhbCA9IG9ialtrZXldXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKVxuICAgICAgICBhcnIucHVzaChba2V5LCB2YWxbaV1dKVxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIpXG4gICAgICBmb3IgKHZhciBwcm9wIGluIHZhbClcbiAgICAgICAgYXJyLnB1c2goW2tleSArICdbJyArIHByb3AgKyAnXScsIHZhbFtwcm9wXV0pO1xuICAgIGVsc2VcbiAgICAgIGFyci5wdXNoKFtrZXksIHZhbF0pXG4gIH1cbiAgcmV0dXJuIGFyclxufVxuXG4vLyBDb21wYXJlIGZ1bmN0aW9uIGZvciBzb3J0XG5mdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIHJldHVybiBhID4gYiA/IDEgOiBhIDwgYiA/IC0xIDogMFxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhc2UgKGh0dHBNZXRob2QsIGJhc2VfdXJpLCBwYXJhbXMpIHtcbiAgLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZGV2LnR3aXR0ZXIuY29tL2RvY3MvYXV0aC9vYXV0aCBhbmQgXG4gIC8vIGh0dHBzOi8vZGV2LnR3aXR0ZXIuY29tL2RvY3MvYXV0aC9jcmVhdGluZy1zaWduYXR1cmVcblxuICAvLyBQYXJhbWV0ZXIgbm9ybWFsaXphdGlvblxuICAvLyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1ODQ5I3NlY3Rpb24tMy40LjEuMy4yXG4gIHZhciBub3JtYWxpemVkID0gbWFwKHBhcmFtcylcbiAgLy8gMS4gIEZpcnN0LCB0aGUgbmFtZSBhbmQgdmFsdWUgb2YgZWFjaCBwYXJhbWV0ZXIgYXJlIGVuY29kZWRcbiAgLm1hcChmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBbIHJmYzM5ODYocFswXSksIHJmYzM5ODYocFsxXSB8fCAnJykgXVxuICB9KVxuICAvLyAyLiAgVGhlIHBhcmFtZXRlcnMgYXJlIHNvcnRlZCBieSBuYW1lLCB1c2luZyBhc2NlbmRpbmcgYnl0ZSB2YWx1ZVxuICAvLyAgICAgb3JkZXJpbmcuICBJZiB0d28gb3IgbW9yZSBwYXJhbWV0ZXJzIHNoYXJlIHRoZSBzYW1lIG5hbWUsIHRoZXlcbiAgLy8gICAgIGFyZSBzb3J0ZWQgYnkgdGhlaXIgdmFsdWUuXG4gIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUoYVswXSwgYlswXSkgfHwgY29tcGFyZShhWzFdLCBiWzFdKVxuICB9KVxuICAvLyAzLiAgVGhlIG5hbWUgb2YgZWFjaCBwYXJhbWV0ZXIgaXMgY29uY2F0ZW5hdGVkIHRvIGl0cyBjb3JyZXNwb25kaW5nXG4gIC8vICAgICB2YWx1ZSB1c2luZyBhbiBcIj1cIiBjaGFyYWN0ZXIgKEFTQ0lJIGNvZGUgNjEpIGFzIGEgc2VwYXJhdG9yLCBldmVuXG4gIC8vICAgICBpZiB0aGUgdmFsdWUgaXMgZW1wdHkuXG4gIC5tYXAoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAuam9pbignPScpIH0pXG4gICAvLyA0LiAgVGhlIHNvcnRlZCBuYW1lL3ZhbHVlIHBhaXJzIGFyZSBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgaW50byBhXG4gICAvLyAgICAgc2luZ2xlIHN0cmluZyBieSB1c2luZyBhbiBcIiZcIiBjaGFyYWN0ZXIgKEFTQ0lJIGNvZGUgMzgpIGFzXG4gICAvLyAgICAgc2VwYXJhdG9yLlxuICAuam9pbignJicpXG5cbiAgdmFyIGJhc2UgPSBbXG4gICAgcmZjMzk4NihodHRwTWV0aG9kID8gaHR0cE1ldGhvZC50b1VwcGVyQ2FzZSgpIDogJ0dFVCcpLFxuICAgIHJmYzM5ODYoYmFzZV91cmkpLFxuICAgIHJmYzM5ODYobm9ybWFsaXplZClcbiAgXS5qb2luKCcmJylcblxuICByZXR1cm4gYmFzZVxufVxuXG5mdW5jdGlvbiBobWFjc2lnbiAoaHR0cE1ldGhvZCwgYmFzZV91cmksIHBhcmFtcywgY29uc3VtZXJfc2VjcmV0LCB0b2tlbl9zZWNyZXQpIHtcbiAgdmFyIGJhc2UgPSBnZW5lcmF0ZUJhc2UoaHR0cE1ldGhvZCwgYmFzZV91cmksIHBhcmFtcylcbiAgdmFyIGtleSA9IFtcbiAgICBjb25zdW1lcl9zZWNyZXQgfHwgJycsXG4gICAgdG9rZW5fc2VjcmV0IHx8ICcnXG4gIF0ubWFwKHJmYzM5ODYpLmpvaW4oJyYnKVxuXG4gIHJldHVybiBzaGExKGtleSwgYmFzZSlcbn1cblxuZnVuY3Rpb24gcnNhc2lnbiAoaHR0cE1ldGhvZCwgYmFzZV91cmksIHBhcmFtcywgcHJpdmF0ZV9rZXksIHRva2VuX3NlY3JldCkge1xuICB2YXIgYmFzZSA9IGdlbmVyYXRlQmFzZShodHRwTWV0aG9kLCBiYXNlX3VyaSwgcGFyYW1zKVxuICB2YXIga2V5ID0gcHJpdmF0ZV9rZXkgfHwgJydcblxuICByZXR1cm4gcnNhKGtleSwgYmFzZSlcbn1cblxuZnVuY3Rpb24gcGxhaW50ZXh0IChjb25zdW1lcl9zZWNyZXQsIHRva2VuX3NlY3JldCkge1xuICB2YXIga2V5ID0gW1xuICAgIGNvbnN1bWVyX3NlY3JldCB8fCAnJyxcbiAgICB0b2tlbl9zZWNyZXQgfHwgJydcbiAgXS5tYXAocmZjMzk4Nikuam9pbignJicpXG5cbiAgcmV0dXJuIGtleVxufVxuXG5mdW5jdGlvbiBzaWduIChzaWduTWV0aG9kLCBodHRwTWV0aG9kLCBiYXNlX3VyaSwgcGFyYW1zLCBjb25zdW1lcl9zZWNyZXQsIHRva2VuX3NlY3JldCkge1xuICB2YXIgbWV0aG9kXG4gIHZhciBza2lwQXJncyA9IDFcblxuICBzd2l0Y2ggKHNpZ25NZXRob2QpIHtcbiAgICBjYXNlICdSU0EtU0hBMSc6XG4gICAgICBtZXRob2QgPSByc2FzaWduXG4gICAgICBicmVha1xuICAgIGNhc2UgJ0hNQUMtU0hBMSc6XG4gICAgICBtZXRob2QgPSBobWFjc2lnblxuICAgICAgYnJlYWtcbiAgICBjYXNlICdQTEFJTlRFWFQnOlxuICAgICAgbWV0aG9kID0gcGxhaW50ZXh0XG4gICAgICBza2lwQXJncyA9IDRcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2lnbmF0dXJlIG1ldGhvZCBub3Qgc3VwcG9ydGVkOiBcIiArIHNpZ25NZXRob2QpXG4gIH1cblxuICByZXR1cm4gbWV0aG9kLmFwcGx5KG51bGwsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCBza2lwQXJncykpXG59XG5cbmV4cG9ydHMuaG1hY3NpZ24gPSBobWFjc2lnblxuZXhwb3J0cy5yc2FzaWduID0gcnNhc2lnblxuZXhwb3J0cy5wbGFpbnRleHQgPSBwbGFpbnRleHRcbmV4cG9ydHMuc2lnbiA9IHNpZ25cbmV4cG9ydHMucmZjMzk4NiA9IHJmYzM5ODZcbmV4cG9ydHMuZ2VuZXJhdGVCYXNlID0gZ2VuZXJhdGVCYXNlXG5cbiIsImV4cG9ydHMuZW5kaWFubmVzcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdMRScgfTtcblxuZXhwb3J0cy5ob3N0bmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbG9jYXRpb24uaG9zdG5hbWVcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gJyc7XG59O1xuXG5leHBvcnRzLmxvYWRhdmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXSB9O1xuXG5leHBvcnRzLnVwdGltZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDAgfTtcblxuZXhwb3J0cy5mcmVlbWVtID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBOdW1iZXIuTUFYX1ZBTFVFO1xufTtcblxuZXhwb3J0cy50b3RhbG1lbSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gTnVtYmVyLk1BWF9WQUxVRTtcbn07XG5cbmV4cG9ydHMuY3B1cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtdIH07XG5cbmV4cG9ydHMudHlwZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdCcm93c2VyJyB9O1xuXG5leHBvcnRzLnJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IuYXBwVmVyc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0cy5uZXR3b3JrSW50ZXJmYWNlc1xuPSBleHBvcnRzLmdldE5ldHdvcmtJbnRlcmZhY2VzXG49IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHt9IH07XG5cbmV4cG9ydHMuYXJjaCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICdqYXZhc2NyaXB0JyB9O1xuXG5leHBvcnRzLnBsYXRmb3JtID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJ2Jyb3dzZXInIH07XG5cbmV4cG9ydHMudG1wZGlyID0gZXhwb3J0cy50bXBEaXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICcvdG1wJztcbn07XG5cbmV4cG9ydHMuRU9MID0gJ1xcbic7XG4iLCIndXNlIHN0cmljdCc7XG5cblxudmFyIFRZUEVEX09LID0gICh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiBVaW50MTZBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyk7XG5cblxuZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiAob2JqIC8qZnJvbTEsIGZyb20yLCBmcm9tMywgLi4uKi8pIHtcbiAgdmFyIHNvdXJjZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB3aGlsZSAoc291cmNlcy5sZW5ndGgpIHtcbiAgICB2YXIgc291cmNlID0gc291cmNlcy5zaGlmdCgpO1xuICAgIGlmICghc291cmNlKSB7IGNvbnRpbnVlOyB9XG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc291cmNlICsgJ211c3QgYmUgbm9uLW9iamVjdCcpO1xuICAgIH1cblxuICAgIGZvciAodmFyIHAgaW4gc291cmNlKSB7XG4gICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgIG9ialtwXSA9IHNvdXJjZVtwXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxuXG4vLyByZWR1Y2UgYnVmZmVyIHNpemUsIGF2b2lkaW5nIG1lbSBjb3B5XG5leHBvcnRzLnNocmlua0J1ZiA9IGZ1bmN0aW9uIChidWYsIHNpemUpIHtcbiAgaWYgKGJ1Zi5sZW5ndGggPT09IHNpemUpIHsgcmV0dXJuIGJ1ZjsgfVxuICBpZiAoYnVmLnN1YmFycmF5KSB7IHJldHVybiBidWYuc3ViYXJyYXkoMCwgc2l6ZSk7IH1cbiAgYnVmLmxlbmd0aCA9IHNpemU7XG4gIHJldHVybiBidWY7XG59O1xuXG5cbnZhciBmblR5cGVkID0ge1xuICBhcnJheVNldDogZnVuY3Rpb24gKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7XG4gICAgaWYgKHNyYy5zdWJhcnJheSAmJiBkZXN0LnN1YmFycmF5KSB7XG4gICAgICBkZXN0LnNldChzcmMuc3ViYXJyYXkoc3JjX29mZnMsIHNyY19vZmZzICsgbGVuKSwgZGVzdF9vZmZzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRmFsbGJhY2sgdG8gb3JkaW5hcnkgYXJyYXlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBkZXN0W2Rlc3Rfb2ZmcyArIGldID0gc3JjW3NyY19vZmZzICsgaV07XG4gICAgfVxuICB9LFxuICAvLyBKb2luIGFycmF5IG9mIGNodW5rcyB0byBzaW5nbGUgYXJyYXkuXG4gIGZsYXR0ZW5DaHVua3M6IGZ1bmN0aW9uIChjaHVua3MpIHtcbiAgICB2YXIgaSwgbCwgbGVuLCBwb3MsIGNodW5rLCByZXN1bHQ7XG5cbiAgICAvLyBjYWxjdWxhdGUgZGF0YSBsZW5ndGhcbiAgICBsZW4gPSAwO1xuICAgIGZvciAoaSA9IDAsIGwgPSBjaHVua3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBsZW4gKz0gY2h1bmtzW2ldLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBqb2luIGNodW5rc1xuICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgcG9zID0gMDtcbiAgICBmb3IgKGkgPSAwLCBsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY2h1bmsgPSBjaHVua3NbaV07XG4gICAgICByZXN1bHQuc2V0KGNodW5rLCBwb3MpO1xuICAgICAgcG9zICs9IGNodW5rLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuXG52YXIgZm5VbnR5cGVkID0ge1xuICBhcnJheVNldDogZnVuY3Rpb24gKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgZGVzdFtkZXN0X29mZnMgKyBpXSA9IHNyY1tzcmNfb2ZmcyArIGldO1xuICAgIH1cbiAgfSxcbiAgLy8gSm9pbiBhcnJheSBvZiBjaHVua3MgdG8gc2luZ2xlIGFycmF5LlxuICBmbGF0dGVuQ2h1bmtzOiBmdW5jdGlvbiAoY2h1bmtzKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgY2h1bmtzKTtcbiAgfVxufTtcblxuXG4vLyBFbmFibGUvRGlzYWJsZSB0eXBlZCBhcnJheXMgdXNlLCBmb3IgdGVzdGluZ1xuLy9cbmV4cG9ydHMuc2V0VHlwZWQgPSBmdW5jdGlvbiAob24pIHtcbiAgaWYgKG9uKSB7XG4gICAgZXhwb3J0cy5CdWY4ICA9IFVpbnQ4QXJyYXk7XG4gICAgZXhwb3J0cy5CdWYxNiA9IFVpbnQxNkFycmF5O1xuICAgIGV4cG9ydHMuQnVmMzIgPSBJbnQzMkFycmF5O1xuICAgIGV4cG9ydHMuYXNzaWduKGV4cG9ydHMsIGZuVHlwZWQpO1xuICB9IGVsc2Uge1xuICAgIGV4cG9ydHMuQnVmOCAgPSBBcnJheTtcbiAgICBleHBvcnRzLkJ1ZjE2ID0gQXJyYXk7XG4gICAgZXhwb3J0cy5CdWYzMiA9IEFycmF5O1xuICAgIGV4cG9ydHMuYXNzaWduKGV4cG9ydHMsIGZuVW50eXBlZCk7XG4gIH1cbn07XG5cbmV4cG9ydHMuc2V0VHlwZWQoVFlQRURfT0spO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBOb3RlOiBhZGxlcjMyIHRha2VzIDEyJSBmb3IgbGV2ZWwgMCBhbmQgMiUgZm9yIGxldmVsIDYuXG4vLyBJdCBkb2Vzbid0IHdvcnRoIHRvIG1ha2UgYWRkaXRpb25hbCBvcHRpbWl6YXRpb25hIGFzIGluIG9yaWdpbmFsLlxuLy8gU21hbGwgc2l6ZSBpcyBwcmVmZXJhYmxlLlxuXG5mdW5jdGlvbiBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbiwgcG9zKSB7XG4gIHZhciBzMSA9IChhZGxlciAmIDB4ZmZmZikgfDAsXG4gICAgICBzMiA9ICgoYWRsZXIgPj4+IDE2KSAmIDB4ZmZmZikgfDAsXG4gICAgICBuID0gMDtcblxuICB3aGlsZSAobGVuICE9PSAwKSB7XG4gICAgLy8gU2V0IGxpbWl0IH4gdHdpY2UgbGVzcyB0aGFuIDU1NTIsIHRvIGtlZXBcbiAgICAvLyBzMiBpbiAzMS1iaXRzLCBiZWNhdXNlIHdlIGZvcmNlIHNpZ25lZCBpbnRzLlxuICAgIC8vIGluIG90aGVyIGNhc2UgJT0gd2lsbCBmYWlsLlxuICAgIG4gPSBsZW4gPiAyMDAwID8gMjAwMCA6IGxlbjtcbiAgICBsZW4gLT0gbjtcblxuICAgIGRvIHtcbiAgICAgIHMxID0gKHMxICsgYnVmW3BvcysrXSkgfDA7XG4gICAgICBzMiA9IChzMiArIHMxKSB8MDtcbiAgICB9IHdoaWxlICgtLW4pO1xuXG4gICAgczEgJT0gNjU1MjE7XG4gICAgczIgJT0gNjU1MjE7XG4gIH1cblxuICByZXR1cm4gKHMxIHwgKHMyIDw8IDE2KSkgfDA7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBhZGxlcjMyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gIC8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi9cbiAgWl9OT19GTFVTSDogICAgICAgICAwLFxuICBaX1BBUlRJQUxfRkxVU0g6ICAgIDEsXG4gIFpfU1lOQ19GTFVTSDogICAgICAgMixcbiAgWl9GVUxMX0ZMVVNIOiAgICAgICAzLFxuICBaX0ZJTklTSDogICAgICAgICAgIDQsXG4gIFpfQkxPQ0s6ICAgICAgICAgICAgNSxcbiAgWl9UUkVFUzogICAgICAgICAgICA2LFxuXG4gIC8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXNcbiAgKiBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuXG4gICovXG4gIFpfT0s6ICAgICAgICAgICAgICAgMCxcbiAgWl9TVFJFQU1fRU5EOiAgICAgICAxLFxuICBaX05FRURfRElDVDogICAgICAgIDIsXG4gIFpfRVJSTk86ICAgICAgICAgICAtMSxcbiAgWl9TVFJFQU1fRVJST1I6ICAgIC0yLFxuICBaX0RBVEFfRVJST1I6ICAgICAgLTMsXG4gIC8vWl9NRU1fRVJST1I6ICAgICAtNCxcbiAgWl9CVUZfRVJST1I6ICAgICAgIC01LFxuICAvL1pfVkVSU0lPTl9FUlJPUjogLTYsXG5cbiAgLyogY29tcHJlc3Npb24gbGV2ZWxzICovXG4gIFpfTk9fQ09NUFJFU1NJT046ICAgICAgICAgMCxcbiAgWl9CRVNUX1NQRUVEOiAgICAgICAgICAgICAxLFxuICBaX0JFU1RfQ09NUFJFU1NJT046ICAgICAgIDksXG4gIFpfREVGQVVMVF9DT01QUkVTU0lPTjogICAtMSxcblxuXG4gIFpfRklMVEVSRUQ6ICAgICAgICAgICAgICAgMSxcbiAgWl9IVUZGTUFOX09OTFk6ICAgICAgICAgICAyLFxuICBaX1JMRTogICAgICAgICAgICAgICAgICAgIDMsXG4gIFpfRklYRUQ6ICAgICAgICAgICAgICAgICAgNCxcbiAgWl9ERUZBVUxUX1NUUkFURUdZOiAgICAgICAwLFxuXG4gIC8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbiAgWl9CSU5BUlk6ICAgICAgICAgICAgICAgICAwLFxuICBaX1RFWFQ6ICAgICAgICAgICAgICAgICAgIDEsXG4gIC8vWl9BU0NJSTogICAgICAgICAgICAgICAgMSwgLy8gPSBaX1RFWFQgKGRlcHJlY2F0ZWQpXG4gIFpfVU5LTk9XTjogICAgICAgICAgICAgICAgMixcblxuICAvKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKi9cbiAgWl9ERUZMQVRFRDogICAgICAgICAgICAgICA4XG4gIC8vWl9OVUxMOiAgICAgICAgICAgICAgICAgbnVsbCAvLyBVc2UgLTEgb3IgbnVsbCBpbmxpbmUsIGRlcGVuZGluZyBvbiB2YXIgdHlwZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gTm90ZTogd2UgY2FuJ3QgZ2V0IHNpZ25pZmljYW50IHNwZWVkIGJvb3N0IGhlcmUuXG4vLyBTbyB3cml0ZSBjb2RlIHRvIG1pbmltaXplIHNpemUgLSBubyBwcmVnZW5lcmF0ZWQgdGFibGVzXG4vLyBhbmQgYXJyYXkgdG9vbHMgZGVwZW5kZW5jaWVzLlxuXG5cbi8vIFVzZSBvcmRpbmFyeSBhcnJheSwgc2luY2UgdW50eXBlZCBtYWtlcyBubyBib29zdCBoZXJlXG5mdW5jdGlvbiBtYWtlVGFibGUoKSB7XG4gIHZhciBjLCB0YWJsZSA9IFtdO1xuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgMjU2OyBuKyspIHtcbiAgICBjID0gbjtcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IDg7IGsrKykge1xuICAgICAgYyA9ICgoYyAmIDEpID8gKDB4RURCODgzMjAgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpKTtcbiAgICB9XG4gICAgdGFibGVbbl0gPSBjO1xuICB9XG5cbiAgcmV0dXJuIHRhYmxlO1xufVxuXG4vLyBDcmVhdGUgdGFibGUgb24gbG9hZC4gSnVzdCAyNTUgc2lnbmVkIGxvbmdzLiBOb3QgYSBwcm9ibGVtLlxudmFyIGNyY1RhYmxlID0gbWFrZVRhYmxlKCk7XG5cblxuZnVuY3Rpb24gY3JjMzIoY3JjLCBidWYsIGxlbiwgcG9zKSB7XG4gIHZhciB0ID0gY3JjVGFibGUsXG4gICAgICBlbmQgPSBwb3MgKyBsZW47XG5cbiAgY3JjIF49IC0xO1xuXG4gIGZvciAodmFyIGkgPSBwb3M7IGkgPCBlbmQ7IGkrKykge1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdFsoY3JjIF4gYnVmW2ldKSAmIDB4RkZdO1xuICB9XG5cbiAgcmV0dXJuIChjcmMgXiAoLTEpKTsgLy8gPj4+IDA7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBjcmMzMjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzICAgPSByZXF1aXJlKCcuLi91dGlscy9jb21tb24nKTtcbnZhciB0cmVlcyAgID0gcmVxdWlyZSgnLi90cmVlcycpO1xudmFyIGFkbGVyMzIgPSByZXF1aXJlKCcuL2FkbGVyMzInKTtcbnZhciBjcmMzMiAgID0gcmVxdWlyZSgnLi9jcmMzMicpO1xudmFyIG1zZyAgICAgPSByZXF1aXJlKCcuL21lc3NhZ2VzJyk7XG5cbi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbi8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi9cbnZhciBaX05PX0ZMVVNIICAgICAgPSAwO1xudmFyIFpfUEFSVElBTF9GTFVTSCA9IDE7XG4vL3ZhciBaX1NZTkNfRkxVU0ggICAgPSAyO1xudmFyIFpfRlVMTF9GTFVTSCAgICA9IDM7XG52YXIgWl9GSU5JU0ggICAgICAgID0gNDtcbnZhciBaX0JMT0NLICAgICAgICAgPSA1O1xuLy92YXIgWl9UUkVFUyAgICAgICAgID0gNjtcblxuXG4vKiBSZXR1cm4gY29kZXMgZm9yIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGZ1bmN0aW9ucy4gTmVnYXRpdmUgdmFsdWVzXG4gKiBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuXG4gKi9cbnZhciBaX09LICAgICAgICAgICAgPSAwO1xudmFyIFpfU1RSRUFNX0VORCAgICA9IDE7XG4vL3ZhciBaX05FRURfRElDVCAgICAgPSAyO1xuLy92YXIgWl9FUlJOTyAgICAgICAgID0gLTE7XG52YXIgWl9TVFJFQU1fRVJST1IgID0gLTI7XG52YXIgWl9EQVRBX0VSUk9SICAgID0gLTM7XG4vL3ZhciBaX01FTV9FUlJPUiAgICAgPSAtNDtcbnZhciBaX0JVRl9FUlJPUiAgICAgPSAtNTtcbi8vdmFyIFpfVkVSU0lPTl9FUlJPUiA9IC02O1xuXG5cbi8qIGNvbXByZXNzaW9uIGxldmVscyAqL1xuLy92YXIgWl9OT19DT01QUkVTU0lPTiAgICAgID0gMDtcbi8vdmFyIFpfQkVTVF9TUEVFRCAgICAgICAgICA9IDE7XG4vL3ZhciBaX0JFU1RfQ09NUFJFU1NJT04gICAgPSA5O1xudmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xO1xuXG5cbnZhciBaX0ZJTFRFUkVEICAgICAgICAgICAgPSAxO1xudmFyIFpfSFVGRk1BTl9PTkxZICAgICAgICA9IDI7XG52YXIgWl9STEUgICAgICAgICAgICAgICAgID0gMztcbnZhciBaX0ZJWEVEICAgICAgICAgICAgICAgPSA0O1xudmFyIFpfREVGQVVMVF9TVFJBVEVHWSAgICA9IDA7XG5cbi8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbi8vdmFyIFpfQklOQVJZICAgICAgICAgICAgICA9IDA7XG4vL3ZhciBaX1RFWFQgICAgICAgICAgICAgICAgPSAxO1xuLy92YXIgWl9BU0NJSSAgICAgICAgICAgICAgID0gMTsgLy8gPSBaX1RFWFRcbnZhciBaX1VOS05PV04gICAgICAgICAgICAgPSAyO1xuXG5cbi8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAqL1xudmFyIFpfREVGTEFURUQgID0gODtcblxuLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuXG52YXIgTUFYX01FTV9MRVZFTCA9IDk7XG4vKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi9cbnZhciBNQVhfV0JJVFMgPSAxNTtcbi8qIDMySyBMWjc3IHdpbmRvdyAqL1xudmFyIERFRl9NRU1fTEVWRUwgPSA4O1xuXG5cbnZhciBMRU5HVEhfQ09ERVMgID0gMjk7XG4vKiBudW1iZXIgb2YgbGVuZ3RoIGNvZGVzLCBub3QgY291bnRpbmcgdGhlIHNwZWNpYWwgRU5EX0JMT0NLIGNvZGUgKi9cbnZhciBMSVRFUkFMUyAgICAgID0gMjU2O1xuLyogbnVtYmVyIG9mIGxpdGVyYWwgYnl0ZXMgMC4uMjU1ICovXG52YXIgTF9DT0RFUyAgICAgICA9IExJVEVSQUxTICsgMSArIExFTkdUSF9DT0RFUztcbi8qIG51bWJlciBvZiBMaXRlcmFsIG9yIExlbmd0aCBjb2RlcywgaW5jbHVkaW5nIHRoZSBFTkRfQkxPQ0sgY29kZSAqL1xudmFyIERfQ09ERVMgICAgICAgPSAzMDtcbi8qIG51bWJlciBvZiBkaXN0YW5jZSBjb2RlcyAqL1xudmFyIEJMX0NPREVTICAgICAgPSAxOTtcbi8qIG51bWJlciBvZiBjb2RlcyB1c2VkIHRvIHRyYW5zZmVyIHRoZSBiaXQgbGVuZ3RocyAqL1xudmFyIEhFQVBfU0laRSAgICAgPSAyICogTF9DT0RFUyArIDE7XG4vKiBtYXhpbXVtIGhlYXAgc2l6ZSAqL1xudmFyIE1BWF9CSVRTICA9IDE1O1xuLyogQWxsIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQklUUyBiaXRzICovXG5cbnZhciBNSU5fTUFUQ0ggPSAzO1xudmFyIE1BWF9NQVRDSCA9IDI1ODtcbnZhciBNSU5fTE9PS0FIRUFEID0gKE1BWF9NQVRDSCArIE1JTl9NQVRDSCArIDEpO1xuXG52YXIgUFJFU0VUX0RJQ1QgPSAweDIwO1xuXG52YXIgSU5JVF9TVEFURSA9IDQyO1xudmFyIEVYVFJBX1NUQVRFID0gNjk7XG52YXIgTkFNRV9TVEFURSA9IDczO1xudmFyIENPTU1FTlRfU1RBVEUgPSA5MTtcbnZhciBIQ1JDX1NUQVRFID0gMTAzO1xudmFyIEJVU1lfU1RBVEUgPSAxMTM7XG52YXIgRklOSVNIX1NUQVRFID0gNjY2O1xuXG52YXIgQlNfTkVFRF9NT1JFICAgICAgPSAxOyAvKiBibG9jayBub3QgY29tcGxldGVkLCBuZWVkIG1vcmUgaW5wdXQgb3IgbW9yZSBvdXRwdXQgKi9cbnZhciBCU19CTE9DS19ET05FICAgICA9IDI7IC8qIGJsb2NrIGZsdXNoIHBlcmZvcm1lZCAqL1xudmFyIEJTX0ZJTklTSF9TVEFSVEVEID0gMzsgLyogZmluaXNoIHN0YXJ0ZWQsIG5lZWQgb25seSBtb3JlIG91dHB1dCBhdCBuZXh0IGRlZmxhdGUgKi9cbnZhciBCU19GSU5JU0hfRE9ORSAgICA9IDQ7IC8qIGZpbmlzaCBkb25lLCBhY2NlcHQgbm8gbW9yZSBpbnB1dCBvciBvdXRwdXQgKi9cblxudmFyIE9TX0NPREUgPSAweDAzOyAvLyBVbml4IDopIC4gRG9uJ3QgZGV0ZWN0LCB1c2UgdGhpcyBkZWZhdWx0LlxuXG5mdW5jdGlvbiBlcnIoc3RybSwgZXJyb3JDb2RlKSB7XG4gIHN0cm0ubXNnID0gbXNnW2Vycm9yQ29kZV07XG4gIHJldHVybiBlcnJvckNvZGU7XG59XG5cbmZ1bmN0aW9uIHJhbmsoZikge1xuICByZXR1cm4gKChmKSA8PCAxKSAtICgoZikgPiA0ID8gOSA6IDApO1xufVxuXG5mdW5jdGlvbiB6ZXJvKGJ1ZikgeyB2YXIgbGVuID0gYnVmLmxlbmd0aDsgd2hpbGUgKC0tbGVuID49IDApIHsgYnVmW2xlbl0gPSAwOyB9IH1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBGbHVzaCBhcyBtdWNoIHBlbmRpbmcgb3V0cHV0IGFzIHBvc3NpYmxlLiBBbGwgZGVmbGF0ZSgpIG91dHB1dCBnb2VzXG4gKiB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gc28gc29tZSBhcHBsaWNhdGlvbnMgbWF5IHdpc2ggdG8gbW9kaWZ5IGl0XG4gKiB0byBhdm9pZCBhbGxvY2F0aW5nIGEgbGFyZ2Ugc3RybS0+b3V0cHV0IGJ1ZmZlciBhbmQgY29weWluZyBpbnRvIGl0LlxuICogKFNlZSBhbHNvIHJlYWRfYnVmKCkpLlxuICovXG5mdW5jdGlvbiBmbHVzaF9wZW5kaW5nKHN0cm0pIHtcbiAgdmFyIHMgPSBzdHJtLnN0YXRlO1xuXG4gIC8vX3RyX2ZsdXNoX2JpdHMocyk7XG4gIHZhciBsZW4gPSBzLnBlbmRpbmc7XG4gIGlmIChsZW4gPiBzdHJtLmF2YWlsX291dCkge1xuICAgIGxlbiA9IHN0cm0uYXZhaWxfb3V0O1xuICB9XG4gIGlmIChsZW4gPT09IDApIHsgcmV0dXJuOyB9XG5cbiAgdXRpbHMuYXJyYXlTZXQoc3RybS5vdXRwdXQsIHMucGVuZGluZ19idWYsIHMucGVuZGluZ19vdXQsIGxlbiwgc3RybS5uZXh0X291dCk7XG4gIHN0cm0ubmV4dF9vdXQgKz0gbGVuO1xuICBzLnBlbmRpbmdfb3V0ICs9IGxlbjtcbiAgc3RybS50b3RhbF9vdXQgKz0gbGVuO1xuICBzdHJtLmF2YWlsX291dCAtPSBsZW47XG4gIHMucGVuZGluZyAtPSBsZW47XG4gIGlmIChzLnBlbmRpbmcgPT09IDApIHtcbiAgICBzLnBlbmRpbmdfb3V0ID0gMDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGZsdXNoX2Jsb2NrX29ubHkocywgbGFzdCkge1xuICB0cmVlcy5fdHJfZmx1c2hfYmxvY2socywgKHMuYmxvY2tfc3RhcnQgPj0gMCA/IHMuYmxvY2tfc3RhcnQgOiAtMSksIHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0LCBsYXN0KTtcbiAgcy5ibG9ja19zdGFydCA9IHMuc3Ryc3RhcnQ7XG4gIGZsdXNoX3BlbmRpbmcocy5zdHJtKTtcbn1cblxuXG5mdW5jdGlvbiBwdXRfYnl0ZShzLCBiKSB7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYjtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBQdXQgYSBzaG9ydCBpbiB0aGUgcGVuZGluZyBidWZmZXIuIFRoZSAxNi1iaXQgdmFsdWUgaXMgcHV0IGluIE1TQiBvcmRlci5cbiAqIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzdGF0ZSBpcyBjb3JyZWN0IGFuZCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBpblxuICogcGVuZGluZ19idWYuXG4gKi9cbmZ1bmN0aW9uIHB1dFNob3J0TVNCKHMsIGIpIHtcbi8vICBwdXRfYnl0ZShzLCAoQnl0ZSkoYiA+PiA4KSk7XG4vLyAgcHV0X2J5dGUocywgKEJ5dGUpKGIgJiAweGZmKSk7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gKGIgPj4+IDgpICYgMHhmZjtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiICYgMHhmZjtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFJlYWQgYSBuZXcgYnVmZmVyIGZyb20gdGhlIGN1cnJlbnQgaW5wdXQgc3RyZWFtLCB1cGRhdGUgdGhlIGFkbGVyMzJcbiAqIGFuZCB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gIEFsbCBkZWZsYXRlKCkgaW5wdXQgZ29lcyB0aHJvdWdoXG4gKiB0aGlzIGZ1bmN0aW9uIHNvIHNvbWUgYXBwbGljYXRpb25zIG1heSB3aXNoIHRvIG1vZGlmeSBpdCB0byBhdm9pZFxuICogYWxsb2NhdGluZyBhIGxhcmdlIHN0cm0tPmlucHV0IGJ1ZmZlciBhbmQgY29weWluZyBmcm9tIGl0LlxuICogKFNlZSBhbHNvIGZsdXNoX3BlbmRpbmcoKSkuXG4gKi9cbmZ1bmN0aW9uIHJlYWRfYnVmKHN0cm0sIGJ1Ziwgc3RhcnQsIHNpemUpIHtcbiAgdmFyIGxlbiA9IHN0cm0uYXZhaWxfaW47XG5cbiAgaWYgKGxlbiA+IHNpemUpIHsgbGVuID0gc2l6ZTsgfVxuICBpZiAobGVuID09PSAwKSB7IHJldHVybiAwOyB9XG5cbiAgc3RybS5hdmFpbF9pbiAtPSBsZW47XG5cbiAgLy8gem1lbWNweShidWYsIHN0cm0tPm5leHRfaW4sIGxlbik7XG4gIHV0aWxzLmFycmF5U2V0KGJ1Ziwgc3RybS5pbnB1dCwgc3RybS5uZXh0X2luLCBsZW4sIHN0YXJ0KTtcbiAgaWYgKHN0cm0uc3RhdGUud3JhcCA9PT0gMSkge1xuICAgIHN0cm0uYWRsZXIgPSBhZGxlcjMyKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7XG4gIH1cblxuICBlbHNlIGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDIpIHtcbiAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgYnVmLCBsZW4sIHN0YXJ0KTtcbiAgfVxuXG4gIHN0cm0ubmV4dF9pbiArPSBsZW47XG4gIHN0cm0udG90YWxfaW4gKz0gbGVuO1xuXG4gIHJldHVybiBsZW47XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTZXQgbWF0Y2hfc3RhcnQgdG8gdGhlIGxvbmdlc3QgbWF0Y2ggc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHN0cmluZyBhbmRcbiAqIHJldHVybiBpdHMgbGVuZ3RoLiBNYXRjaGVzIHNob3J0ZXIgb3IgZXF1YWwgdG8gcHJldl9sZW5ndGggYXJlIGRpc2NhcmRlZCxcbiAqIGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBpcyBlcXVhbCB0byBwcmV2X2xlbmd0aCBhbmQgbWF0Y2hfc3RhcnQgaXNcbiAqIGdhcmJhZ2UuXG4gKiBJTiBhc3NlcnRpb25zOiBjdXJfbWF0Y2ggaXMgdGhlIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gZm9yIHRoZSBjdXJyZW50XG4gKiAgIHN0cmluZyAoc3Ryc3RhcnQpIGFuZCBpdHMgZGlzdGFuY2UgaXMgPD0gTUFYX0RJU1QsIGFuZCBwcmV2X2xlbmd0aCA+PSAxXG4gKiBPVVQgYXNzZXJ0aW9uOiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIG5vdCBncmVhdGVyIHRoYW4gcy0+bG9va2FoZWFkLlxuICovXG5mdW5jdGlvbiBsb25nZXN0X21hdGNoKHMsIGN1cl9tYXRjaCkge1xuICB2YXIgY2hhaW5fbGVuZ3RoID0gcy5tYXhfY2hhaW5fbGVuZ3RoOyAgICAgIC8qIG1heCBoYXNoIGNoYWluIGxlbmd0aCAqL1xuICB2YXIgc2NhbiA9IHMuc3Ryc3RhcnQ7IC8qIGN1cnJlbnQgc3RyaW5nICovXG4gIHZhciBtYXRjaDsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1hdGNoZWQgc3RyaW5nICovXG4gIHZhciBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgbWF0Y2ggKi9cbiAgdmFyIGJlc3RfbGVuID0gcy5wcmV2X2xlbmd0aDsgICAgICAgICAgICAgIC8qIGJlc3QgbWF0Y2ggbGVuZ3RoIHNvIGZhciAqL1xuICB2YXIgbmljZV9tYXRjaCA9IHMubmljZV9tYXRjaDsgICAgICAgICAgICAgLyogc3RvcCBpZiBtYXRjaCBsb25nIGVub3VnaCAqL1xuICB2YXIgbGltaXQgPSAocy5zdHJzdGFydCA+IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSA/XG4gICAgICBzLnN0cnN0YXJ0IC0gKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkgOiAwLypOSUwqLztcblxuICB2YXIgX3dpbiA9IHMud2luZG93OyAvLyBzaG9ydGN1dFxuXG4gIHZhciB3bWFzayA9IHMud19tYXNrO1xuICB2YXIgcHJldiAgPSBzLnByZXY7XG5cbiAgLyogU3RvcCB3aGVuIGN1cl9tYXRjaCBiZWNvbWVzIDw9IGxpbWl0LiBUbyBzaW1wbGlmeSB0aGUgY29kZSxcbiAgICogd2UgcHJldmVudCBtYXRjaGVzIHdpdGggdGhlIHN0cmluZyBvZiB3aW5kb3cgaW5kZXggMC5cbiAgICovXG5cbiAgdmFyIHN0cmVuZCA9IHMuc3Ryc3RhcnQgKyBNQVhfTUFUQ0g7XG4gIHZhciBzY2FuX2VuZDEgID0gX3dpbltzY2FuICsgYmVzdF9sZW4gLSAxXTtcbiAgdmFyIHNjYW5fZW5kICAgPSBfd2luW3NjYW4gKyBiZXN0X2xlbl07XG5cbiAgLyogVGhlIGNvZGUgaXMgb3B0aW1pemVkIGZvciBIQVNIX0JJVFMgPj0gOCBhbmQgTUFYX01BVENILTIgbXVsdGlwbGUgb2YgMTYuXG4gICAqIEl0IGlzIGVhc3kgdG8gZ2V0IHJpZCBvZiB0aGlzIG9wdGltaXphdGlvbiBpZiBuZWNlc3NhcnkuXG4gICAqL1xuICAvLyBBc3NlcnQocy0+aGFzaF9iaXRzID49IDggJiYgTUFYX01BVENIID09IDI1OCwgXCJDb2RlIHRvbyBjbGV2ZXJcIik7XG5cbiAgLyogRG8gbm90IHdhc3RlIHRvbyBtdWNoIHRpbWUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgZ29vZCBtYXRjaDogKi9cbiAgaWYgKHMucHJldl9sZW5ndGggPj0gcy5nb29kX21hdGNoKSB7XG4gICAgY2hhaW5fbGVuZ3RoID4+PSAyO1xuICB9XG4gIC8qIERvIG5vdCBsb29rIGZvciBtYXRjaGVzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4gVGhpcyBpcyBuZWNlc3NhcnlcbiAgICogdG8gbWFrZSBkZWZsYXRlIGRldGVybWluaXN0aWMuXG4gICAqL1xuICBpZiAobmljZV9tYXRjaCA+IHMubG9va2FoZWFkKSB7IG5pY2VfbWF0Y2ggPSBzLmxvb2thaGVhZDsgfVxuXG4gIC8vIEFzc2VydCgodWxnKXMtPnN0cnN0YXJ0IDw9IHMtPndpbmRvd19zaXplLU1JTl9MT09LQUhFQUQsIFwibmVlZCBsb29rYWhlYWRcIik7XG5cbiAgZG8ge1xuICAgIC8vIEFzc2VydChjdXJfbWF0Y2ggPCBzLT5zdHJzdGFydCwgXCJubyBmdXR1cmVcIik7XG4gICAgbWF0Y2ggPSBjdXJfbWF0Y2g7XG5cbiAgICAvKiBTa2lwIHRvIG5leHQgbWF0Y2ggaWYgdGhlIG1hdGNoIGxlbmd0aCBjYW5ub3QgaW5jcmVhc2VcbiAgICAgKiBvciBpZiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIGxlc3MgdGhhbiAyLiAgTm90ZSB0aGF0IHRoZSBjaGVja3MgYmVsb3dcbiAgICAgKiBmb3IgaW5zdWZmaWNpZW50IGxvb2thaGVhZCBvbmx5IG9jY3VyIG9jY2FzaW9uYWxseSBmb3IgcGVyZm9ybWFuY2VcbiAgICAgKiByZWFzb25zLiAgVGhlcmVmb3JlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpbGwgYmUgYWNjZXNzZWQsIGFuZFxuICAgICAqIGNvbmRpdGlvbmFsIGp1bXBzIHdpbGwgYmUgbWFkZSB0aGF0IGRlcGVuZCBvbiB0aG9zZSB2YWx1ZXMuXG4gICAgICogSG93ZXZlciB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaCBpcyBsaW1pdGVkIHRvIHRoZSBsb29rYWhlYWQsIHNvXG4gICAgICogdGhlIG91dHB1dCBvZiBkZWZsYXRlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZXMuXG4gICAgICovXG5cbiAgICBpZiAoX3dpblttYXRjaCArIGJlc3RfbGVuXSAgICAgIT09IHNjYW5fZW5kICB8fFxuICAgICAgICBfd2luW21hdGNoICsgYmVzdF9sZW4gLSAxXSAhPT0gc2Nhbl9lbmQxIHx8XG4gICAgICAgIF93aW5bbWF0Y2hdICAgICAgICAgICAgICAgICE9PSBfd2luW3NjYW5dIHx8XG4gICAgICAgIF93aW5bKyttYXRjaF0gICAgICAgICAgICAgICE9PSBfd2luW3NjYW4gKyAxXSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyogVGhlIGNoZWNrIGF0IGJlc3RfbGVuLTEgY2FuIGJlIHJlbW92ZWQgYmVjYXVzZSBpdCB3aWxsIGJlIG1hZGVcbiAgICAgKiBhZ2FpbiBsYXRlci4gKFRoaXMgaGV1cmlzdGljIGlzIG5vdCBhbHdheXMgYSB3aW4uKVxuICAgICAqIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY29tcGFyZSBzY2FuWzJdIGFuZCBtYXRjaFsyXSBzaW5jZSB0aGV5XG4gICAgICogYXJlIGFsd2F5cyBlcXVhbCB3aGVuIHRoZSBvdGhlciBieXRlcyBtYXRjaCwgZ2l2ZW4gdGhhdFxuICAgICAqIHRoZSBoYXNoIGtleXMgYXJlIGVxdWFsIGFuZCB0aGF0IEhBU0hfQklUUyA+PSA4LlxuICAgICAqL1xuICAgIHNjYW4gKz0gMjtcbiAgICBtYXRjaCsrO1xuICAgIC8vIEFzc2VydCgqc2NhbiA9PSAqbWF0Y2gsIFwibWF0Y2hbMl0/XCIpO1xuXG4gICAgLyogV2UgY2hlY2sgZm9yIGluc3VmZmljaWVudCBsb29rYWhlYWQgb25seSBldmVyeSA4dGggY29tcGFyaXNvbjtcbiAgICAgKiB0aGUgMjU2dGggY2hlY2sgd2lsbCBiZSBtYWRlIGF0IHN0cnN0YXJ0KzI1OC5cbiAgICAgKi9cbiAgICBkbyB7XG4gICAgICAvKmpzaGludCBub2VtcHR5OmZhbHNlKi9cbiAgICB9IHdoaWxlIChfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmXG4gICAgICAgICAgICAgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJlxuICAgICAgICAgICAgIF93aW5bKytzY2FuXSA9PT0gX3dpblsrK21hdGNoXSAmJiBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiZcbiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmXG4gICAgICAgICAgICAgc2NhbiA8IHN0cmVuZCk7XG5cbiAgICAvLyBBc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVuc2lnbmVkKShzLT53aW5kb3dfc2l6ZS0xKSwgXCJ3aWxkIHNjYW5cIik7XG5cbiAgICBsZW4gPSBNQVhfTUFUQ0ggLSAoc3RyZW5kIC0gc2Nhbik7XG4gICAgc2NhbiA9IHN0cmVuZCAtIE1BWF9NQVRDSDtcblxuICAgIGlmIChsZW4gPiBiZXN0X2xlbikge1xuICAgICAgcy5tYXRjaF9zdGFydCA9IGN1cl9tYXRjaDtcbiAgICAgIGJlc3RfbGVuID0gbGVuO1xuICAgICAgaWYgKGxlbiA+PSBuaWNlX21hdGNoKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc2Nhbl9lbmQxICA9IF93aW5bc2NhbiArIGJlc3RfbGVuIC0gMV07XG4gICAgICBzY2FuX2VuZCAgID0gX3dpbltzY2FuICsgYmVzdF9sZW5dO1xuICAgIH1cbiAgfSB3aGlsZSAoKGN1cl9tYXRjaCA9IHByZXZbY3VyX21hdGNoICYgd21hc2tdKSA+IGxpbWl0ICYmIC0tY2hhaW5fbGVuZ3RoICE9PSAwKTtcblxuICBpZiAoYmVzdF9sZW4gPD0gcy5sb29rYWhlYWQpIHtcbiAgICByZXR1cm4gYmVzdF9sZW47XG4gIH1cbiAgcmV0dXJuIHMubG9va2FoZWFkO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmlsbCB0aGUgd2luZG93IHdoZW4gdGhlIGxvb2thaGVhZCBiZWNvbWVzIGluc3VmZmljaWVudC5cbiAqIFVwZGF0ZXMgc3Ryc3RhcnQgYW5kIGxvb2thaGVhZC5cbiAqXG4gKiBJTiBhc3NlcnRpb246IGxvb2thaGVhZCA8IE1JTl9MT09LQUhFQURcbiAqIE9VVCBhc3NlcnRpb25zOiBzdHJzdGFydCA8PSB3aW5kb3dfc2l6ZS1NSU5fTE9PS0FIRUFEXG4gKiAgICBBdCBsZWFzdCBvbmUgYnl0ZSBoYXMgYmVlbiByZWFkLCBvciBhdmFpbF9pbiA9PSAwOyByZWFkcyBhcmVcbiAqICAgIHBlcmZvcm1lZCBmb3IgYXQgbGVhc3QgdHdvIGJ5dGVzIChyZXF1aXJlZCBmb3IgdGhlIHppcCB0cmFuc2xhdGVfZW9sXG4gKiAgICBvcHRpb24gLS0gbm90IHN1cHBvcnRlZCBoZXJlKS5cbiAqL1xuZnVuY3Rpb24gZmlsbF93aW5kb3cocykge1xuICB2YXIgX3dfc2l6ZSA9IHMud19zaXplO1xuICB2YXIgcCwgbiwgbSwgbW9yZSwgc3RyO1xuXG4gIC8vQXNzZXJ0KHMtPmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQsIFwiYWxyZWFkeSBlbm91Z2ggbG9va2FoZWFkXCIpO1xuXG4gIGRvIHtcbiAgICBtb3JlID0gcy53aW5kb3dfc2l6ZSAtIHMubG9va2FoZWFkIC0gcy5zdHJzdGFydDtcblxuICAgIC8vIEpTIGludHMgaGF2ZSAzMiBiaXQsIGJsb2NrIGJlbG93IG5vdCBuZWVkZWRcbiAgICAvKiBEZWFsIHdpdGggIUAjJCUgNjRLIGxpbWl0OiAqL1xuICAgIC8vaWYgKHNpemVvZihpbnQpIDw9IDIpIHtcbiAgICAvLyAgICBpZiAobW9yZSA9PSAwICYmIHMtPnN0cnN0YXJ0ID09IDAgJiYgcy0+bG9va2FoZWFkID09IDApIHtcbiAgICAvLyAgICAgICAgbW9yZSA9IHdzaXplO1xuICAgIC8vXG4gICAgLy8gIH0gZWxzZSBpZiAobW9yZSA9PSAodW5zaWduZWQpKC0xKSkge1xuICAgIC8vICAgICAgICAvKiBWZXJ5IHVubGlrZWx5LCBidXQgcG9zc2libGUgb24gMTYgYml0IG1hY2hpbmUgaWZcbiAgICAvLyAgICAgICAgICogc3Ryc3RhcnQgPT0gMCAmJiBsb29rYWhlYWQgPT0gMSAoaW5wdXQgZG9uZSBhIGJ5dGUgYXQgdGltZSlcbiAgICAvLyAgICAgICAgICovXG4gICAgLy8gICAgICAgIG1vcmUtLTtcbiAgICAvLyAgICB9XG4gICAgLy99XG5cblxuICAgIC8qIElmIHRoZSB3aW5kb3cgaXMgYWxtb3N0IGZ1bGwgYW5kIHRoZXJlIGlzIGluc3VmZmljaWVudCBsb29rYWhlYWQsXG4gICAgICogbW92ZSB0aGUgdXBwZXIgaGFsZiB0byB0aGUgbG93ZXIgb25lIHRvIG1ha2Ugcm9vbSBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgKi9cbiAgICBpZiAocy5zdHJzdGFydCA+PSBfd19zaXplICsgKF93X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkge1xuXG4gICAgICB1dGlscy5hcnJheVNldChzLndpbmRvdywgcy53aW5kb3csIF93X3NpemUsIF93X3NpemUsIDApO1xuICAgICAgcy5tYXRjaF9zdGFydCAtPSBfd19zaXplO1xuICAgICAgcy5zdHJzdGFydCAtPSBfd19zaXplO1xuICAgICAgLyogd2Ugbm93IGhhdmUgc3Ryc3RhcnQgPj0gTUFYX0RJU1QgKi9cbiAgICAgIHMuYmxvY2tfc3RhcnQgLT0gX3dfc2l6ZTtcblxuICAgICAgLyogU2xpZGUgdGhlIGhhc2ggdGFibGUgKGNvdWxkIGJlIGF2b2lkZWQgd2l0aCAzMiBiaXQgdmFsdWVzXG4gICAgICAgYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlKS4gV2Ugc2xpZGUgZXZlbiB3aGVuIGxldmVsID09IDBcbiAgICAgICB0byBrZWVwIHRoZSBoYXNoIHRhYmxlIGNvbnNpc3RlbnQgaWYgd2Ugc3dpdGNoIGJhY2sgdG8gbGV2ZWwgPiAwXG4gICAgICAgbGF0ZXIuIChVc2luZyBsZXZlbCAwIHBlcm1hbmVudGx5IGlzIG5vdCBhbiBvcHRpbWFsIHVzYWdlIG9mXG4gICAgICAgemxpYiwgc28gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGlzIHBhdGhvbG9naWNhbCBjYXNlLilcbiAgICAgICAqL1xuXG4gICAgICBuID0gcy5oYXNoX3NpemU7XG4gICAgICBwID0gbjtcbiAgICAgIGRvIHtcbiAgICAgICAgbSA9IHMuaGVhZFstLXBdO1xuICAgICAgICBzLmhlYWRbcF0gPSAobSA+PSBfd19zaXplID8gbSAtIF93X3NpemUgOiAwKTtcbiAgICAgIH0gd2hpbGUgKC0tbik7XG5cbiAgICAgIG4gPSBfd19zaXplO1xuICAgICAgcCA9IG47XG4gICAgICBkbyB7XG4gICAgICAgIG0gPSBzLnByZXZbLS1wXTtcbiAgICAgICAgcy5wcmV2W3BdID0gKG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMCk7XG4gICAgICAgIC8qIElmIG4gaXMgbm90IG9uIGFueSBoYXNoIGNoYWluLCBwcmV2W25dIGlzIGdhcmJhZ2UgYnV0XG4gICAgICAgICAqIGl0cyB2YWx1ZSB3aWxsIG5ldmVyIGJlIHVzZWQuXG4gICAgICAgICAqL1xuICAgICAgfSB3aGlsZSAoLS1uKTtcblxuICAgICAgbW9yZSArPSBfd19zaXplO1xuICAgIH1cbiAgICBpZiAocy5zdHJtLmF2YWlsX2luID09PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvKiBJZiB0aGVyZSB3YXMgbm8gc2xpZGluZzpcbiAgICAgKiAgICBzdHJzdGFydCA8PSBXU0laRStNQVhfRElTVC0xICYmIGxvb2thaGVhZCA8PSBNSU5fTE9PS0FIRUFEIC0gMSAmJlxuICAgICAqICAgIG1vcmUgPT0gd2luZG93X3NpemUgLSBsb29rYWhlYWQgLSBzdHJzdGFydFxuICAgICAqID0+IG1vcmUgPj0gd2luZG93X3NpemUgLSAoTUlOX0xPT0tBSEVBRC0xICsgV1NJWkUgKyBNQVhfRElTVC0xKVxuICAgICAqID0+IG1vcmUgPj0gd2luZG93X3NpemUgLSAyKldTSVpFICsgMlxuICAgICAqIEluIHRoZSBCSUdfTUVNIG9yIE1NQVAgY2FzZSAobm90IHlldCBzdXBwb3J0ZWQpLFxuICAgICAqICAgd2luZG93X3NpemUgPT0gaW5wdXRfc2l6ZSArIE1JTl9MT09LQUhFQUQgICYmXG4gICAgICogICBzdHJzdGFydCArIHMtPmxvb2thaGVhZCA8PSBpbnB1dF9zaXplID0+IG1vcmUgPj0gTUlOX0xPT0tBSEVBRC5cbiAgICAgKiBPdGhlcndpc2UsIHdpbmRvd19zaXplID09IDIqV1NJWkUgc28gbW9yZSA+PSAyLlxuICAgICAqIElmIHRoZXJlIHdhcyBzbGlkaW5nLCBtb3JlID49IFdTSVpFLiBTbyBpbiBhbGwgY2FzZXMsIG1vcmUgPj0gMi5cbiAgICAgKi9cbiAgICAvL0Fzc2VydChtb3JlID49IDIsIFwibW9yZSA8IDJcIik7XG4gICAgbiA9IHJlYWRfYnVmKHMuc3RybSwgcy53aW5kb3csIHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCwgbW9yZSk7XG4gICAgcy5sb29rYWhlYWQgKz0gbjtcblxuICAgIC8qIEluaXRpYWxpemUgdGhlIGhhc2ggdmFsdWUgbm93IHRoYXQgd2UgaGF2ZSBzb21lIGlucHV0OiAqL1xuICAgIGlmIChzLmxvb2thaGVhZCArIHMuaW5zZXJ0ID49IE1JTl9NQVRDSCkge1xuICAgICAgc3RyID0gcy5zdHJzdGFydCAtIHMuaW5zZXJ0O1xuICAgICAgcy5pbnNfaCA9IHMud2luZG93W3N0cl07XG5cbiAgICAgIC8qIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgMV0pOyAqL1xuICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbc3RyICsgMV0pICYgcy5oYXNoX21hc2s7XG4vLyNpZiBNSU5fTUFUQ0ggIT0gM1xuLy8gICAgICAgIENhbGwgdXBkYXRlX2hhc2goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzXG4vLyNlbmRpZlxuICAgICAgd2hpbGUgKHMuaW5zZXJ0KSB7XG4gICAgICAgIC8qIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsgKi9cbiAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbc3RyICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7XG5cbiAgICAgICAgcy5wcmV2W3N0ciAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTtcbiAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gc3RyO1xuICAgICAgICBzdHIrKztcbiAgICAgICAgcy5pbnNlcnQtLTtcbiAgICAgICAgaWYgKHMubG9va2FoZWFkICsgcy5pbnNlcnQgPCBNSU5fTUFUQ0gpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKiBJZiB0aGUgd2hvbGUgaW5wdXQgaGFzIGxlc3MgdGhhbiBNSU5fTUFUQ0ggYnl0ZXMsIGluc19oIGlzIGdhcmJhZ2UsXG4gICAgICogYnV0IHRoaXMgaXMgbm90IGltcG9ydGFudCBzaW5jZSBvbmx5IGxpdGVyYWwgYnl0ZXMgd2lsbCBiZSBlbWl0dGVkLlxuICAgICAqL1xuXG4gIH0gd2hpbGUgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBzLnN0cm0uYXZhaWxfaW4gIT09IDApO1xuXG4gIC8qIElmIHRoZSBXSU5fSU5JVCBieXRlcyBhZnRlciB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGRhdGEgaGF2ZSBuZXZlciBiZWVuXG4gICAqIHdyaXR0ZW4sIHRoZW4gemVybyB0aG9zZSBieXRlcyBpbiBvcmRlciB0byBhdm9pZCBtZW1vcnkgY2hlY2sgcmVwb3J0cyBvZlxuICAgKiB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgKG9yIHVuaW5pdGlhbGlzZWQgYXMgSnVsaWFuIHdyaXRlcykgYnl0ZXMgYnlcbiAgICogdGhlIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMuICBVcGRhdGUgdGhlIGhpZ2ggd2F0ZXIgbWFyayBmb3IgdGhlIG5leHRcbiAgICogdGltZSB0aHJvdWdoIGhlcmUuICBXSU5fSU5JVCBpcyBzZXQgdG8gTUFYX01BVENIIHNpbmNlIHRoZSBsb25nZXN0IG1hdGNoXG4gICAqIHJvdXRpbmVzIGFsbG93IHNjYW5uaW5nIHRvIHN0cnN0YXJ0ICsgTUFYX01BVENILCBpZ25vcmluZyBsb29rYWhlYWQuXG4gICAqL1xuLy8gIGlmIChzLmhpZ2hfd2F0ZXIgPCBzLndpbmRvd19zaXplKSB7XG4vLyAgICB2YXIgY3VyciA9IHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZDtcbi8vICAgIHZhciBpbml0ID0gMDtcbi8vXG4vLyAgICBpZiAocy5oaWdoX3dhdGVyIDwgY3Vycikge1xuLy8gICAgICAvKiBQcmV2aW91cyBoaWdoIHdhdGVyIG1hcmsgYmVsb3cgY3VycmVudCBkYXRhIC0tIHplcm8gV0lOX0lOSVRcbi8vICAgICAgICogYnl0ZXMgb3IgdXAgdG8gZW5kIG9mIHdpbmRvdywgd2hpY2hldmVyIGlzIGxlc3MuXG4vLyAgICAgICAqL1xuLy8gICAgICBpbml0ID0gcy53aW5kb3dfc2l6ZSAtIGN1cnI7XG4vLyAgICAgIGlmIChpbml0ID4gV0lOX0lOSVQpXG4vLyAgICAgICAgaW5pdCA9IFdJTl9JTklUO1xuLy8gICAgICB6bWVtemVybyhzLT53aW5kb3cgKyBjdXJyLCAodW5zaWduZWQpaW5pdCk7XG4vLyAgICAgIHMtPmhpZ2hfd2F0ZXIgPSBjdXJyICsgaW5pdDtcbi8vICAgIH1cbi8vICAgIGVsc2UgaWYgKHMtPmhpZ2hfd2F0ZXIgPCAodWxnKWN1cnIgKyBXSU5fSU5JVCkge1xuLy8gICAgICAvKiBIaWdoIHdhdGVyIG1hcmsgYXQgb3IgYWJvdmUgY3VycmVudCBkYXRhLCBidXQgYmVsb3cgY3VycmVudCBkYXRhXG4vLyAgICAgICAqIHBsdXMgV0lOX0lOSVQgLS0gemVybyBvdXQgdG8gY3VycmVudCBkYXRhIHBsdXMgV0lOX0lOSVQsIG9yIHVwXG4vLyAgICAgICAqIHRvIGVuZCBvZiB3aW5kb3csIHdoaWNoZXZlciBpcyBsZXNzLlxuLy8gICAgICAgKi9cbi8vICAgICAgaW5pdCA9ICh1bGcpY3VyciArIFdJTl9JTklUIC0gcy0+aGlnaF93YXRlcjtcbi8vICAgICAgaWYgKGluaXQgPiBzLT53aW5kb3dfc2l6ZSAtIHMtPmhpZ2hfd2F0ZXIpXG4vLyAgICAgICAgaW5pdCA9IHMtPndpbmRvd19zaXplIC0gcy0+aGlnaF93YXRlcjtcbi8vICAgICAgem1lbXplcm8ocy0+d2luZG93ICsgcy0+aGlnaF93YXRlciwgKHVuc2lnbmVkKWluaXQpO1xuLy8gICAgICBzLT5oaWdoX3dhdGVyICs9IGluaXQ7XG4vLyAgICB9XG4vLyAgfVxuLy9cbi8vICBBc3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQsXG4vLyAgICBcIm5vdCBlbm91Z2ggcm9vbSBmb3Igc2VhcmNoXCIpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHkgd2l0aG91dCBjb21wcmVzc2lvbiBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGlucHV0IHN0cmVhbSwgcmV0dXJuXG4gKiB0aGUgY3VycmVudCBibG9jayBzdGF0ZS5cbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaW5zZXJ0IG5ldyBzdHJpbmdzIGluIHRoZSBkaWN0aW9uYXJ5IHNpbmNlXG4gKiB1bmNvbXByZXNzaWJsZSBkYXRhIGlzIHByb2JhYmx5IG5vdCB1c2VmdWwuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZFxuICogb25seSBmb3IgdGhlIGxldmVsPTAgY29tcHJlc3Npb24gb3B0aW9uLlxuICogTk9URTogdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgb3B0aW1pemVkIHRvIGF2b2lkIGV4dHJhIGNvcHlpbmcgZnJvbVxuICogd2luZG93IHRvIHBlbmRpbmdfYnVmLlxuICovXG5mdW5jdGlvbiBkZWZsYXRlX3N0b3JlZChzLCBmbHVzaCkge1xuICAvKiBTdG9yZWQgYmxvY2tzIGFyZSBsaW1pdGVkIHRvIDB4ZmZmZiBieXRlcywgcGVuZGluZ19idWYgaXMgbGltaXRlZFxuICAgKiB0byBwZW5kaW5nX2J1Zl9zaXplLCBhbmQgZWFjaCBzdG9yZWQgYmxvY2sgaGFzIGEgNSBieXRlIGhlYWRlcjpcbiAgICovXG4gIHZhciBtYXhfYmxvY2tfc2l6ZSA9IDB4ZmZmZjtcblxuICBpZiAobWF4X2Jsb2NrX3NpemUgPiBzLnBlbmRpbmdfYnVmX3NpemUgLSA1KSB7XG4gICAgbWF4X2Jsb2NrX3NpemUgPSBzLnBlbmRpbmdfYnVmX3NpemUgLSA1O1xuICB9XG5cbiAgLyogQ29weSBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gaW5wdXQgdG8gb3V0cHV0OiAqL1xuICBmb3IgKDs7KSB7XG4gICAgLyogRmlsbCB0aGUgd2luZG93IGFzIG11Y2ggYXMgcG9zc2libGU6ICovXG4gICAgaWYgKHMubG9va2FoZWFkIDw9IDEpIHtcblxuICAgICAgLy9Bc3NlcnQocy0+c3Ryc3RhcnQgPCBzLT53X3NpemUrTUFYX0RJU1QocykgfHxcbiAgICAgIC8vICBzLT5ibG9ja19zdGFydCA+PSAobG9uZylzLT53X3NpemUsIFwic2xpZGUgdG9vIGxhdGVcIik7XG4vLyAgICAgIGlmICghKHMuc3Ryc3RhcnQgPCBzLndfc2l6ZSArIChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpIHx8XG4vLyAgICAgICAgcy5ibG9ja19zdGFydCA+PSBzLndfc2l6ZSkpIHtcbi8vICAgICAgICB0aHJvdyAgbmV3IEVycm9yKFwic2xpZGUgdG9vIGxhdGVcIik7XG4vLyAgICAgIH1cblxuICAgICAgZmlsbF93aW5kb3cocyk7XG4gICAgICBpZiAocy5sb29rYWhlYWQgPT09IDAgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cblxuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi9cbiAgICB9XG4gICAgLy9Bc3NlcnQocy0+YmxvY2tfc3RhcnQgPj0gMEwsIFwiYmxvY2sgZ29uZVwiKTtcbi8vICAgIGlmIChzLmJsb2NrX3N0YXJ0IDwgMCkgdGhyb3cgbmV3IEVycm9yKFwiYmxvY2sgZ29uZVwiKTtcblxuICAgIHMuc3Ryc3RhcnQgKz0gcy5sb29rYWhlYWQ7XG4gICAgcy5sb29rYWhlYWQgPSAwO1xuXG4gICAgLyogRW1pdCBhIHN0b3JlZCBibG9jayBpZiBwZW5kaW5nX2J1ZiB3aWxsIGJlIGZ1bGw6ICovXG4gICAgdmFyIG1heF9zdGFydCA9IHMuYmxvY2tfc3RhcnQgKyBtYXhfYmxvY2tfc2l6ZTtcblxuICAgIGlmIChzLnN0cnN0YXJ0ID09PSAwIHx8IHMuc3Ryc3RhcnQgPj0gbWF4X3N0YXJ0KSB7XG4gICAgICAvKiBzdHJzdGFydCA9PSAwIGlzIHBvc3NpYmxlIHdoZW4gd3JhcGFyb3VuZCBvbiAxNi1iaXQgbWFjaGluZSAqL1xuICAgICAgcy5sb29rYWhlYWQgPSBzLnN0cnN0YXJ0IC0gbWF4X3N0YXJ0O1xuICAgICAgcy5zdHJzdGFydCA9IG1heF9zdGFydDtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG5cblxuICAgIH1cbiAgICAvKiBGbHVzaCBpZiB3ZSBtYXkgaGF2ZSB0byBzbGlkZSwgb3RoZXJ3aXNlIGJsb2NrX3N0YXJ0IG1heSBiZWNvbWVcbiAgICAgKiBuZWdhdGl2ZSBhbmQgdGhlIGRhdGEgd2lsbCBiZSBnb25lOlxuICAgICAqL1xuICAgIGlmIChzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydCA+PSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkge1xuICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgLyoqKi9cbiAgICB9XG4gIH1cblxuICBzLmluc2VydCA9IDA7XG5cbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG5cbiAgaWYgKHMuc3Ryc3RhcnQgPiBzLmJsb2NrX3N0YXJ0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG5cbiAgcmV0dXJuIEJTX05FRURfTU9SRTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb21wcmVzcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGZyb20gdGhlIGlucHV0IHN0cmVhbSwgcmV0dXJuIHRoZSBjdXJyZW50XG4gKiBibG9jayBzdGF0ZS5cbiAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBsYXp5IGV2YWx1YXRpb24gb2YgbWF0Y2hlcyBhbmQgaW5zZXJ0c1xuICogbmV3IHN0cmluZ3MgaW4gdGhlIGRpY3Rpb25hcnkgb25seSBmb3IgdW5tYXRjaGVkIHN0cmluZ3Mgb3IgZm9yIHNob3J0XG4gKiBtYXRjaGVzLiBJdCBpcyB1c2VkIG9ubHkgZm9yIHRoZSBmYXN0IGNvbXByZXNzaW9uIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGRlZmxhdGVfZmFzdChzLCBmbHVzaCkge1xuICB2YXIgaGFzaF9oZWFkOyAgICAgICAgLyogaGVhZCBvZiB0aGUgaGFzaCBjaGFpbiAqL1xuICB2YXIgYmZsdXNoOyAgICAgICAgICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovXG5cbiAgZm9yICg7Oykge1xuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdFxuICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQgTUFYX01BVENIIGJ5dGVzXG4gICAgICogZm9yIHRoZSBuZXh0IG1hdGNoLCBwbHVzIE1JTl9NQVRDSCBieXRlcyB0byBpbnNlcnQgdGhlXG4gICAgICogc3RyaW5nIGZvbGxvd2luZyB0aGUgbmV4dCBtYXRjaC5cbiAgICAgKi9cbiAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7XG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICBicmVhazsgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi9cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBJbnNlcnQgdGhlIHN0cmluZyB3aW5kb3dbc3Ryc3RhcnQgLi4gc3Ryc3RhcnQrMl0gaW4gdGhlXG4gICAgICogZGljdGlvbmFyeSwgYW5kIHNldCBoYXNoX2hlYWQgdG8gdGhlIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW46XG4gICAgICovXG4gICAgaGFzaF9oZWFkID0gMC8qTklMKi87XG4gICAgaWYgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCkge1xuICAgICAgLyoqKiBJTlNFUlRfU1RSSU5HKHMsIHMuc3Ryc3RhcnQsIGhhc2hfaGVhZCk7ICoqKi9cbiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzaztcbiAgICAgIGhhc2hfaGVhZCA9IHMucHJldltzLnN0cnN0YXJ0ICYgcy53X21hc2tdID0gcy5oZWFkW3MuaW5zX2hdO1xuICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDtcbiAgICAgIC8qKiovXG4gICAgfVxuXG4gICAgLyogRmluZCB0aGUgbG9uZ2VzdCBtYXRjaCwgZGlzY2FyZGluZyB0aG9zZSA8PSBwcmV2X2xlbmd0aC5cbiAgICAgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYWx3YXlzIG1hdGNoX2xlbmd0aCA8IE1JTl9NQVRDSFxuICAgICAqL1xuICAgIGlmIChoYXNoX2hlYWQgIT09IDAvKk5JTCovICYmICgocy5zdHJzdGFydCAtIGhhc2hfaGVhZCkgPD0gKHMud19zaXplIC0gTUlOX0xPT0tBSEVBRCkpKSB7XG4gICAgICAvKiBUbyBzaW1wbGlmeSB0aGUgY29kZSwgd2UgcHJldmVudCBtYXRjaGVzIHdpdGggdGhlIHN0cmluZ1xuICAgICAgICogb2Ygd2luZG93IGluZGV4IDAgKGluIHBhcnRpY3VsYXIgd2UgaGF2ZSB0byBhdm9pZCBhIG1hdGNoXG4gICAgICAgKiBvZiB0aGUgc3RyaW5nIHdpdGggaXRzZWxmIGF0IHRoZSBzdGFydCBvZiB0aGUgaW5wdXQgZmlsZSkuXG4gICAgICAgKi9cbiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaChzLCBoYXNoX2hlYWQpO1xuICAgICAgLyogbG9uZ2VzdF9tYXRjaCgpIHNldHMgbWF0Y2hfc3RhcnQgKi9cbiAgICB9XG4gICAgaWYgKHMubWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkge1xuICAgICAgLy8gY2hlY2tfbWF0Y2gocywgcy5zdHJzdGFydCwgcy5tYXRjaF9zdGFydCwgcy5tYXRjaF9sZW5ndGgpOyAvLyBmb3IgZGVidWcgb25seVxuXG4gICAgICAvKioqIF90cl90YWxseV9kaXN0KHMsIHMuc3Ryc3RhcnQgLSBzLm1hdGNoX3N0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgcy5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gsIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCBzLnN0cnN0YXJ0IC0gcy5tYXRjaF9zdGFydCwgcy5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gpO1xuXG4gICAgICBzLmxvb2thaGVhZCAtPSBzLm1hdGNoX2xlbmd0aDtcblxuICAgICAgLyogSW5zZXJ0IG5ldyBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIG9ubHkgaWYgdGhlIG1hdGNoIGxlbmd0aFxuICAgICAgICogaXMgbm90IHRvbyBsYXJnZS4gVGhpcyBzYXZlcyB0aW1lIGJ1dCBkZWdyYWRlcyBjb21wcmVzc2lvbi5cbiAgICAgICAqL1xuICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoIDw9IHMubWF4X2xhenlfbWF0Y2gvKm1heF9pbnNlcnRfbGVuZ3RoKi8gJiYgcy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7XG4gICAgICAgIHMubWF0Y2hfbGVuZ3RoLS07IC8qIHN0cmluZyBhdCBzdHJzdGFydCBhbHJlYWR5IGluIHRhYmxlICovXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgICAgICAgLyoqKiBJTlNFUlRfU1RSSU5HKHMsIHMuc3Ryc3RhcnQsIGhhc2hfaGVhZCk7ICoqKi9cbiAgICAgICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7XG4gICAgICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG4gICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDtcbiAgICAgICAgICAvKioqL1xuICAgICAgICAgIC8qIHN0cnN0YXJ0IG5ldmVyIGV4Y2VlZHMgV1NJWkUtTUFYX01BVENILCBzbyB0aGVyZSBhcmVcbiAgICAgICAgICAgKiBhbHdheXMgTUlOX01BVENIIGJ5dGVzIGFoZWFkLlxuICAgICAgICAgICAqL1xuICAgICAgICB9IHdoaWxlICgtLXMubWF0Y2hfbGVuZ3RoICE9PSAwKTtcbiAgICAgICAgcy5zdHJzdGFydCsrO1xuICAgICAgfSBlbHNlXG4gICAgICB7XG4gICAgICAgIHMuc3Ryc3RhcnQgKz0gcy5tYXRjaF9sZW5ndGg7XG4gICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDtcbiAgICAgICAgcy5pbnNfaCA9IHMud2luZG93W3Muc3Ryc3RhcnRdO1xuICAgICAgICAvKiBVUERBVEVfSEFTSChzLCBzLmluc19oLCBzLndpbmRvd1tzLnN0cnN0YXJ0KzFdKTsgKi9cbiAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIDFdKSAmIHMuaGFzaF9tYXNrO1xuXG4vLyNpZiBNSU5fTUFUQ0ggIT0gM1xuLy8gICAgICAgICAgICAgICAgQ2FsbCBVUERBVEVfSEFTSCgpIE1JTl9NQVRDSC0zIG1vcmUgdGltZXNcbi8vI2VuZGlmXG4gICAgICAgIC8qIElmIGxvb2thaGVhZCA8IE1JTl9NQVRDSCwgaW5zX2ggaXMgZ2FyYmFnZSwgYnV0IGl0IGRvZXMgbm90XG4gICAgICAgICAqIG1hdHRlciBzaW5jZSBpdCB3aWxsIGJlIHJlY29tcHV0ZWQgYXQgbmV4dCBkZWZsYXRlIGNhbGwuXG4gICAgICAgICAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBObyBtYXRjaCwgb3V0cHV0IGEgbGl0ZXJhbCBieXRlICovXG4gICAgICAvL1RyYWNldnYoKHN0ZGVycixcIiVjXCIsIHMud2luZG93W3Muc3Ryc3RhcnRdKSk7XG4gICAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydF0sIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7XG5cbiAgICAgIHMubG9va2FoZWFkLS07XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgfVxuICAgIGlmIChiZmx1c2gpIHtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG4gICAgfVxuICB9XG4gIHMuaW5zZXJ0ID0gKChzLnN0cnN0YXJ0IDwgKE1JTl9NQVRDSCAtIDEpKSA/IHMuc3Ryc3RhcnQgOiBNSU5fTUFUQ0ggLSAxKTtcbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLmxhc3RfbGl0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG4gIHJldHVybiBCU19CTE9DS19ET05FO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNhbWUgYXMgYWJvdmUsIGJ1dCBhY2hpZXZlcyBiZXR0ZXIgY29tcHJlc3Npb24uIFdlIHVzZSBhIGxhenlcbiAqIGV2YWx1YXRpb24gZm9yIG1hdGNoZXM6IGEgbWF0Y2ggaXMgZmluYWxseSBhZG9wdGVkIG9ubHkgaWYgdGhlcmUgaXNcbiAqIG5vIGJldHRlciBtYXRjaCBhdCB0aGUgbmV4dCB3aW5kb3cgcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGRlZmxhdGVfc2xvdyhzLCBmbHVzaCkge1xuICB2YXIgaGFzaF9oZWFkOyAgICAgICAgICAvKiBoZWFkIG9mIGhhc2ggY2hhaW4gKi9cbiAgdmFyIGJmbHVzaDsgICAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqL1xuXG4gIHZhciBtYXhfaW5zZXJ0O1xuXG4gIC8qIFByb2Nlc3MgdGhlIGlucHV0IGJsb2NrLiAqL1xuICBmb3IgKDs7KSB7XG4gICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0XG4gICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXNcbiAgICAgKiBmb3IgdGhlIG5leHQgbWF0Y2gsIHBsdXMgTUlOX01BVENIIGJ5dGVzIHRvIGluc2VydCB0aGVcbiAgICAgKiBzdHJpbmcgZm9sbG93aW5nIHRoZSBuZXh0IG1hdGNoLlxuICAgICAqL1xuICAgIGlmIChzLmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQpIHtcbiAgICAgIGZpbGxfd2luZG93KHMpO1xuICAgICAgaWYgKHMubG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7IGJyZWFrOyB9IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgfVxuXG4gICAgLyogSW5zZXJ0IHRoZSBzdHJpbmcgd2luZG93W3N0cnN0YXJ0IC4uIHN0cnN0YXJ0KzJdIGluIHRoZVxuICAgICAqIGRpY3Rpb25hcnksIGFuZCBzZXQgaGFzaF9oZWFkIHRvIHRoZSBoZWFkIG9mIHRoZSBoYXNoIGNoYWluOlxuICAgICAqL1xuICAgIGhhc2hfaGVhZCA9IDAvKk5JTCovO1xuICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHtcbiAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0LCBoYXNoX2hlYWQpOyAqKiovXG4gICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7XG4gICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTtcbiAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7XG4gICAgICAvKioqL1xuICAgIH1cblxuICAgIC8qIEZpbmQgdGhlIGxvbmdlc3QgbWF0Y2gsIGRpc2NhcmRpbmcgdGhvc2UgPD0gcHJldl9sZW5ndGguXG4gICAgICovXG4gICAgcy5wcmV2X2xlbmd0aCA9IHMubWF0Y2hfbGVuZ3RoO1xuICAgIHMucHJldl9tYXRjaCA9IHMubWF0Y2hfc3RhcnQ7XG4gICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxO1xuXG4gICAgaWYgKGhhc2hfaGVhZCAhPT0gMC8qTklMKi8gJiYgcy5wcmV2X2xlbmd0aCA8IHMubWF4X2xhenlfbWF0Y2ggJiZcbiAgICAgICAgcy5zdHJzdGFydCAtIGhhc2hfaGVhZCA8PSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKS8qTUFYX0RJU1QocykqLykge1xuICAgICAgLyogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmdcbiAgICAgICAqIG9mIHdpbmRvdyBpbmRleCAwIChpbiBwYXJ0aWN1bGFyIHdlIGhhdmUgdG8gYXZvaWQgYSBtYXRjaFxuICAgICAgICogb2YgdGhlIHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUpLlxuICAgICAgICovXG4gICAgICBzLm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2gocywgaGFzaF9oZWFkKTtcbiAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovXG5cbiAgICAgIGlmIChzLm1hdGNoX2xlbmd0aCA8PSA1ICYmXG4gICAgICAgICAocy5zdHJhdGVneSA9PT0gWl9GSUxURVJFRCB8fCAocy5tYXRjaF9sZW5ndGggPT09IE1JTl9NQVRDSCAmJiBzLnN0cnN0YXJ0IC0gcy5tYXRjaF9zdGFydCA+IDQwOTYvKlRPT19GQVIqLykpKSB7XG5cbiAgICAgICAgLyogSWYgcHJldl9tYXRjaCBpcyBhbHNvIE1JTl9NQVRDSCwgbWF0Y2hfc3RhcnQgaXMgZ2FyYmFnZVxuICAgICAgICAgKiBidXQgd2Ugd2lsbCBpZ25vcmUgdGhlIGN1cnJlbnQgbWF0Y2ggYW55d2F5LlxuICAgICAgICAgKi9cbiAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxO1xuICAgICAgfVxuICAgIH1cbiAgICAvKiBJZiB0aGVyZSB3YXMgYSBtYXRjaCBhdCB0aGUgcHJldmlvdXMgc3RlcCBhbmQgdGhlIGN1cnJlbnRcbiAgICAgKiBtYXRjaCBpcyBub3QgYmV0dGVyLCBvdXRwdXQgdGhlIHByZXZpb3VzIG1hdGNoOlxuICAgICAqL1xuICAgIGlmIChzLnByZXZfbGVuZ3RoID49IE1JTl9NQVRDSCAmJiBzLm1hdGNoX2xlbmd0aCA8PSBzLnByZXZfbGVuZ3RoKSB7XG4gICAgICBtYXhfaW5zZXJ0ID0gcy5zdHJzdGFydCArIHMubG9va2FoZWFkIC0gTUlOX01BVENIO1xuICAgICAgLyogRG8gbm90IGluc2VydCBzdHJpbmdzIGluIGhhc2ggdGFibGUgYmV5b25kIHRoaXMuICovXG5cbiAgICAgIC8vY2hlY2tfbWF0Y2gocywgcy5zdHJzdGFydC0xLCBzLnByZXZfbWF0Y2gsIHMucHJldl9sZW5ndGgpO1xuXG4gICAgICAvKioqX3RyX3RhbGx5X2Rpc3Qocywgcy5zdHJzdGFydCAtIDEgLSBzLnByZXZfbWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgICBzLnByZXZfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOyoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCBzLnN0cnN0YXJ0IC0gMSAtIHMucHJldl9tYXRjaCwgcy5wcmV2X2xlbmd0aCAtIE1JTl9NQVRDSCk7XG4gICAgICAvKiBJbnNlcnQgaW4gaGFzaCB0YWJsZSBhbGwgc3RyaW5ncyB1cCB0byB0aGUgZW5kIG9mIHRoZSBtYXRjaC5cbiAgICAgICAqIHN0cnN0YXJ0LTEgYW5kIHN0cnN0YXJ0IGFyZSBhbHJlYWR5IGluc2VydGVkLiBJZiB0aGVyZSBpcyBub3RcbiAgICAgICAqIGVub3VnaCBsb29rYWhlYWQsIHRoZSBsYXN0IHR3byBzdHJpbmdzIGFyZSBub3QgaW5zZXJ0ZWQgaW5cbiAgICAgICAqIHRoZSBoYXNoIHRhYmxlLlxuICAgICAgICovXG4gICAgICBzLmxvb2thaGVhZCAtPSBzLnByZXZfbGVuZ3RoIC0gMTtcbiAgICAgIHMucHJldl9sZW5ndGggLT0gMjtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKCsrcy5zdHJzdGFydCA8PSBtYXhfaW5zZXJ0KSB7XG4gICAgICAgICAgLyoqKiBJTlNFUlRfU1RSSU5HKHMsIHMuc3Ryc3RhcnQsIGhhc2hfaGVhZCk7ICoqKi9cbiAgICAgICAgICBzLmluc19oID0gKChzLmluc19oIDw8IHMuaGFzaF9zaGlmdCkgXiBzLndpbmRvd1tzLnN0cnN0YXJ0ICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7XG4gICAgICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG4gICAgICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDtcbiAgICAgICAgICAvKioqL1xuICAgICAgICB9XG4gICAgICB9IHdoaWxlICgtLXMucHJldl9sZW5ndGggIT09IDApO1xuICAgICAgcy5tYXRjaF9hdmFpbGFibGUgPSAwO1xuICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxO1xuICAgICAgcy5zdHJzdGFydCsrO1xuXG4gICAgICBpZiAoYmZsdXNoKSB7XG4gICAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgICAgfVxuICAgICAgICAvKioqL1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChzLm1hdGNoX2F2YWlsYWJsZSkge1xuICAgICAgLyogSWYgdGhlcmUgd2FzIG5vIG1hdGNoIGF0IHRoZSBwcmV2aW91cyBwb3NpdGlvbiwgb3V0cHV0IGFcbiAgICAgICAqIHNpbmdsZSBsaXRlcmFsLiBJZiB0aGVyZSB3YXMgYSBtYXRjaCBidXQgdGhlIGN1cnJlbnQgbWF0Y2hcbiAgICAgICAqIGlzIGxvbmdlciwgdHJ1bmNhdGUgdGhlIHByZXZpb3VzIG1hdGNoIHRvIGEgc2luZ2xlIGxpdGVyYWwuXG4gICAgICAgKi9cbiAgICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0LTFdKSk7XG4gICAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydC0xXSwgYmZsdXNoKTsgKioqL1xuICAgICAgYmZsdXNoID0gdHJlZXMuX3RyX3RhbGx5KHMsIDAsIHMud2luZG93W3Muc3Ryc3RhcnQgLSAxXSk7XG5cbiAgICAgIGlmIChiZmx1c2gpIHtcbiAgICAgICAgLyoqKiBGTFVTSF9CTE9DS19PTkxZKHMsIDApICoqKi9cbiAgICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICAgIC8qKiovXG4gICAgICB9XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgICBzLmxvb2thaGVhZC0tO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLyogVGhlcmUgaXMgbm8gcHJldmlvdXMgbWF0Y2ggdG8gY29tcGFyZSB3aXRoLCB3YWl0IGZvclxuICAgICAgICogdGhlIG5leHQgc3RlcCB0byBkZWNpZGUuXG4gICAgICAgKi9cbiAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMTtcbiAgICAgIHMuc3Ryc3RhcnQrKztcbiAgICAgIHMubG9va2FoZWFkLS07XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChmbHVzaCAhPSBaX05PX0ZMVVNILCBcIm5vIGZsdXNoP1wiKTtcbiAgaWYgKHMubWF0Y2hfYXZhaWxhYmxlKSB7XG4gICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0pKTtcbiAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydC0xXSwgYmZsdXNoKTsgKioqL1xuICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0IC0gMV0pO1xuXG4gICAgcy5tYXRjaF9hdmFpbGFibGUgPSAwO1xuICB9XG4gIHMuaW5zZXJ0ID0gcy5zdHJzdGFydCA8IE1JTl9NQVRDSCAtIDEgPyBzLnN0cnN0YXJ0IDogTUlOX01BVENIIC0gMTtcbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLmxhc3RfbGl0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG5cbiAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBGb3IgWl9STEUsIHNpbXBseSBsb29rIGZvciBydW5zIG9mIGJ5dGVzLCBnZW5lcmF0ZSBtYXRjaGVzIG9ubHkgb2YgZGlzdGFuY2VcbiAqIG9uZS4gIERvIG5vdCBtYWludGFpbiBhIGhhc2ggdGFibGUuICAoSXQgd2lsbCBiZSByZWdlbmVyYXRlZCBpZiB0aGlzIHJ1biBvZlxuICogZGVmbGF0ZSBzd2l0Y2hlcyBhd2F5IGZyb20gWl9STEUuKVxuICovXG5mdW5jdGlvbiBkZWZsYXRlX3JsZShzLCBmbHVzaCkge1xuICB2YXIgYmZsdXNoOyAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqL1xuICB2YXIgcHJldjsgICAgICAgICAgICAgIC8qIGJ5dGUgYXQgZGlzdGFuY2Ugb25lIHRvIG1hdGNoICovXG4gIHZhciBzY2FuLCBzdHJlbmQ7ICAgICAgLyogc2NhbiBnb2VzIHVwIHRvIHN0cmVuZCBmb3IgbGVuZ3RoIG9mIHJ1biAqL1xuXG4gIHZhciBfd2luID0gcy53aW5kb3c7XG5cbiAgZm9yICg7Oykge1xuICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdFxuICAgICAqIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUuIFdlIG5lZWQgTUFYX01BVENIIGJ5dGVzXG4gICAgICogZm9yIHRoZSBsb25nZXN0IHJ1biwgcGx1cyBvbmUgZm9yIHRoZSB1bnJvbGxlZCBsb29wLlxuICAgICAqL1xuICAgIGlmIChzLmxvb2thaGVhZCA8PSBNQVhfTUFUQ0gpIHtcbiAgICAgIGZpbGxfd2luZG93KHMpO1xuICAgICAgaWYgKHMubG9va2FoZWFkIDw9IE1BWF9NQVRDSCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7IGJyZWFrOyB9IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgfVxuXG4gICAgLyogU2VlIGhvdyBtYW55IHRpbWVzIHRoZSBwcmV2aW91cyBieXRlIHJlcGVhdHMgKi9cbiAgICBzLm1hdGNoX2xlbmd0aCA9IDA7XG4gICAgaWYgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCAmJiBzLnN0cnN0YXJ0ID4gMCkge1xuICAgICAgc2NhbiA9IHMuc3Ryc3RhcnQgLSAxO1xuICAgICAgcHJldiA9IF93aW5bc2Nhbl07XG4gICAgICBpZiAocHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0pIHtcbiAgICAgICAgc3RyZW5kID0gcy5zdHJzdGFydCArIE1BWF9NQVRDSDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIC8qanNoaW50IG5vZW1wdHk6ZmFsc2UqL1xuICAgICAgICB9IHdoaWxlIChwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmXG4gICAgICAgICAgICAgICAgIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiZcbiAgICAgICAgICAgICAgICAgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJlxuICAgICAgICAgICAgICAgICBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmXG4gICAgICAgICAgICAgICAgIHNjYW4gPCBzdHJlbmQpO1xuICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTtcbiAgICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoID4gcy5sb29rYWhlYWQpIHtcbiAgICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IHMubG9va2FoZWFkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL0Fzc2VydChzY2FuIDw9IHMtPndpbmRvdysodUludCkocy0+d2luZG93X3NpemUtMSksIFwid2lsZCBzY2FuXCIpO1xuICAgIH1cblxuICAgIC8qIEVtaXQgbWF0Y2ggaWYgaGF2ZSBydW4gb2YgTUlOX01BVENIIG9yIGxvbmdlciwgZWxzZSBlbWl0IGxpdGVyYWwgKi9cbiAgICBpZiAocy5tYXRjaF9sZW5ndGggPj0gTUlOX01BVENIKSB7XG4gICAgICAvL2NoZWNrX21hdGNoKHMsIHMuc3Ryc3RhcnQsIHMuc3Ryc3RhcnQgLSAxLCBzLm1hdGNoX2xlbmd0aCk7XG5cbiAgICAgIC8qKiogX3RyX3RhbGx5X2Rpc3QocywgMSwgcy5tYXRjaF9sZW5ndGggLSBNSU5fTUFUQ0gsIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAxLCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCk7XG5cbiAgICAgIHMubG9va2FoZWFkIC09IHMubWF0Y2hfbGVuZ3RoO1xuICAgICAgcy5zdHJzdGFydCArPSBzLm1hdGNoX2xlbmd0aDtcbiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogTm8gbWF0Y2gsIG91dHB1dCBhIGxpdGVyYWwgYnl0ZSAqL1xuICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsXCIlY1wiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7XG4gICAgICAvKioqIF90cl90YWxseV9saXQocywgcy53aW5kb3dbcy5zdHJzdGFydF0sIGJmbHVzaCk7ICoqKi9cbiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7XG5cbiAgICAgIHMubG9va2FoZWFkLS07XG4gICAgICBzLnN0cnN0YXJ0Kys7XG4gICAgfVxuICAgIGlmIChiZmx1c2gpIHtcbiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi9cbiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTtcbiAgICAgIH1cbiAgICAgIC8qKiovXG4gICAgfVxuICB9XG4gIHMuaW5zZXJ0ID0gMDtcbiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkge1xuICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi9cbiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7XG4gICAgfVxuICAgIC8qKiovXG4gICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FO1xuICB9XG4gIGlmIChzLmxhc3RfbGl0KSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpO1xuICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgIH1cbiAgICAvKioqL1xuICB9XG4gIHJldHVybiBCU19CTE9DS19ET05FO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZvciBaX0hVRkZNQU5fT05MWSwgZG8gbm90IGxvb2sgZm9yIG1hdGNoZXMuICBEbyBub3QgbWFpbnRhaW4gYSBoYXNoIHRhYmxlLlxuICogKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBydW4gb2YgZGVmbGF0ZSBzd2l0Y2hlcyBhd2F5IGZyb20gSHVmZm1hbi4pXG4gKi9cbmZ1bmN0aW9uIGRlZmxhdGVfaHVmZihzLCBmbHVzaCkge1xuICB2YXIgYmZsdXNoOyAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi9cblxuICBmb3IgKDs7KSB7XG4gICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGxpdGVyYWwgdG8gd3JpdGUuICovXG4gICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7XG4gICAgICBmaWxsX3dpbmRvdyhzKTtcbiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkge1xuICAgICAgICBpZiAoZmx1c2ggPT09IFpfTk9fRkxVU0gpIHtcbiAgICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrOyAgICAgIC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogT3V0cHV0IGEgbGl0ZXJhbCBieXRlICovXG4gICAgcy5tYXRjaF9sZW5ndGggPSAwO1xuICAgIC8vVHJhY2V2digoc3RkZXJyLFwiJWNcIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSkpO1xuICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSwgYmZsdXNoKTsgKioqL1xuICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSk7XG4gICAgcy5sb29rYWhlYWQtLTtcbiAgICBzLnN0cnN0YXJ0Kys7XG4gICAgaWYgKGJmbHVzaCkge1xuICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqL1xuICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFO1xuICAgICAgfVxuICAgICAgLyoqKi9cbiAgICB9XG4gIH1cbiAgcy5pbnNlcnQgPSAwO1xuICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7XG4gICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsgKioqL1xuICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDtcbiAgICB9XG4gICAgLyoqKi9cbiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7XG4gIH1cbiAgaWYgKHMubGFzdF9saXQpIHtcbiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovXG4gICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7XG4gICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHtcbiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7XG4gICAgfVxuICAgIC8qKiovXG4gIH1cbiAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7XG59XG5cbi8qIFZhbHVlcyBmb3IgbWF4X2xhenlfbWF0Y2gsIGdvb2RfbWF0Y2ggYW5kIG1heF9jaGFpbl9sZW5ndGgsIGRlcGVuZGluZyBvblxuICogdGhlIGRlc2lyZWQgcGFjayBsZXZlbCAoMC4uOSkuIFRoZSB2YWx1ZXMgZ2l2ZW4gYmVsb3cgaGF2ZSBiZWVuIHR1bmVkIHRvXG4gKiBleGNsdWRlIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2UgZm9yIHBhdGhvbG9naWNhbCBmaWxlcy4gQmV0dGVyIHZhbHVlcyBtYXkgYmVcbiAqIGZvdW5kIGZvciBzcGVjaWZpYyBmaWxlcy5cbiAqL1xuZnVuY3Rpb24gQ29uZmlnKGdvb2RfbGVuZ3RoLCBtYXhfbGF6eSwgbmljZV9sZW5ndGgsIG1heF9jaGFpbiwgZnVuYykge1xuICB0aGlzLmdvb2RfbGVuZ3RoID0gZ29vZF9sZW5ndGg7XG4gIHRoaXMubWF4X2xhenkgPSBtYXhfbGF6eTtcbiAgdGhpcy5uaWNlX2xlbmd0aCA9IG5pY2VfbGVuZ3RoO1xuICB0aGlzLm1heF9jaGFpbiA9IG1heF9jaGFpbjtcbiAgdGhpcy5mdW5jID0gZnVuYztcbn1cblxudmFyIGNvbmZpZ3VyYXRpb25fdGFibGU7XG5cbmNvbmZpZ3VyYXRpb25fdGFibGUgPSBbXG4gIC8qICAgICAgZ29vZCBsYXp5IG5pY2UgY2hhaW4gKi9cbiAgbmV3IENvbmZpZygwLCAwLCAwLCAwLCBkZWZsYXRlX3N0b3JlZCksICAgICAgICAgIC8qIDAgc3RvcmUgb25seSAqL1xuICBuZXcgQ29uZmlnKDQsIDQsIDgsIDQsIGRlZmxhdGVfZmFzdCksICAgICAgICAgICAgLyogMSBtYXggc3BlZWQsIG5vIGxhenkgbWF0Y2hlcyAqL1xuICBuZXcgQ29uZmlnKDQsIDUsIDE2LCA4LCBkZWZsYXRlX2Zhc3QpLCAgICAgICAgICAgLyogMiAqL1xuICBuZXcgQ29uZmlnKDQsIDYsIDMyLCAzMiwgZGVmbGF0ZV9mYXN0KSwgICAgICAgICAgLyogMyAqL1xuXG4gIG5ldyBDb25maWcoNCwgNCwgMTYsIDE2LCBkZWZsYXRlX3Nsb3cpLCAgICAgICAgICAvKiA0IGxhenkgbWF0Y2hlcyAqL1xuICBuZXcgQ29uZmlnKDgsIDE2LCAzMiwgMzIsIGRlZmxhdGVfc2xvdyksICAgICAgICAgLyogNSAqL1xuICBuZXcgQ29uZmlnKDgsIDE2LCAxMjgsIDEyOCwgZGVmbGF0ZV9zbG93KSwgICAgICAgLyogNiAqL1xuICBuZXcgQ29uZmlnKDgsIDMyLCAxMjgsIDI1NiwgZGVmbGF0ZV9zbG93KSwgICAgICAgLyogNyAqL1xuICBuZXcgQ29uZmlnKDMyLCAxMjgsIDI1OCwgMTAyNCwgZGVmbGF0ZV9zbG93KSwgICAgLyogOCAqL1xuICBuZXcgQ29uZmlnKDMyLCAyNTgsIDI1OCwgNDA5NiwgZGVmbGF0ZV9zbG93KSAgICAgLyogOSBtYXggY29tcHJlc3Npb24gKi9cbl07XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSBcImxvbmdlc3QgbWF0Y2hcIiByb3V0aW5lcyBmb3IgYSBuZXcgemxpYiBzdHJlYW1cbiAqL1xuZnVuY3Rpb24gbG1faW5pdChzKSB7XG4gIHMud2luZG93X3NpemUgPSAyICogcy53X3NpemU7XG5cbiAgLyoqKiBDTEVBUl9IQVNIKHMpOyAqKiovXG4gIHplcm8ocy5oZWFkKTsgLy8gRmlsbCB3aXRoIE5JTCAoPSAwKTtcblxuICAvKiBTZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOlxuICAgKi9cbiAgcy5tYXhfbGF6eV9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2xhenk7XG4gIHMuZ29vZF9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZ29vZF9sZW5ndGg7XG4gIHMubmljZV9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubmljZV9sZW5ndGg7XG4gIHMubWF4X2NoYWluX2xlbmd0aCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0ubWF4X2NoYWluO1xuXG4gIHMuc3Ryc3RhcnQgPSAwO1xuICBzLmJsb2NrX3N0YXJ0ID0gMDtcbiAgcy5sb29rYWhlYWQgPSAwO1xuICBzLmluc2VydCA9IDA7XG4gIHMubWF0Y2hfbGVuZ3RoID0gcy5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSCAtIDE7XG4gIHMubWF0Y2hfYXZhaWxhYmxlID0gMDtcbiAgcy5pbnNfaCA9IDA7XG59XG5cblxuZnVuY3Rpb24gRGVmbGF0ZVN0YXRlKCkge1xuICB0aGlzLnN0cm0gPSBudWxsOyAgICAgICAgICAgIC8qIHBvaW50ZXIgYmFjayB0byB0aGlzIHpsaWIgc3RyZWFtICovXG4gIHRoaXMuc3RhdHVzID0gMDsgICAgICAgICAgICAvKiBhcyB0aGUgbmFtZSBpbXBsaWVzICovXG4gIHRoaXMucGVuZGluZ19idWYgPSBudWxsOyAgICAgIC8qIG91dHB1dCBzdGlsbCBwZW5kaW5nICovXG4gIHRoaXMucGVuZGluZ19idWZfc2l6ZSA9IDA7ICAvKiBzaXplIG9mIHBlbmRpbmdfYnVmICovXG4gIHRoaXMucGVuZGluZ19vdXQgPSAwOyAgICAgICAvKiBuZXh0IHBlbmRpbmcgYnl0ZSB0byBvdXRwdXQgdG8gdGhlIHN0cmVhbSAqL1xuICB0aGlzLnBlbmRpbmcgPSAwOyAgICAgICAgICAgLyogbmIgb2YgYnl0ZXMgaW4gdGhlIHBlbmRpbmcgYnVmZmVyICovXG4gIHRoaXMud3JhcCA9IDA7ICAgICAgICAgICAgICAvKiBiaXQgMCB0cnVlIGZvciB6bGliLCBiaXQgMSB0cnVlIGZvciBnemlwICovXG4gIHRoaXMuZ3poZWFkID0gbnVsbDsgICAgICAgICAvKiBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiB0byB3cml0ZSAqL1xuICB0aGlzLmd6aW5kZXggPSAwOyAgICAgICAgICAgLyogd2hlcmUgaW4gZXh0cmEsIG5hbWUsIG9yIGNvbW1lbnQgKi9cbiAgdGhpcy5tZXRob2QgPSBaX0RFRkxBVEVEOyAvKiBjYW4gb25seSBiZSBERUZMQVRFRCAqL1xuICB0aGlzLmxhc3RfZmx1c2ggPSAtMTsgICAvKiB2YWx1ZSBvZiBmbHVzaCBwYXJhbSBmb3IgcHJldmlvdXMgZGVmbGF0ZSBjYWxsICovXG5cbiAgdGhpcy53X3NpemUgPSAwOyAgLyogTFo3NyB3aW5kb3cgc2l6ZSAoMzJLIGJ5IGRlZmF1bHQpICovXG4gIHRoaXMud19iaXRzID0gMDsgIC8qIGxvZzIod19zaXplKSAgKDguLjE2KSAqL1xuICB0aGlzLndfbWFzayA9IDA7ICAvKiB3X3NpemUgLSAxICovXG5cbiAgdGhpcy53aW5kb3cgPSBudWxsO1xuICAvKiBTbGlkaW5nIHdpbmRvdy4gSW5wdXQgYnl0ZXMgYXJlIHJlYWQgaW50byB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIHdpbmRvdyxcbiAgICogYW5kIG1vdmUgdG8gdGhlIGZpcnN0IGhhbGYgbGF0ZXIgdG8ga2VlcCBhIGRpY3Rpb25hcnkgb2YgYXQgbGVhc3Qgd1NpemVcbiAgICogYnl0ZXMuIFdpdGggdGhpcyBvcmdhbml6YXRpb24sIG1hdGNoZXMgYXJlIGxpbWl0ZWQgdG8gYSBkaXN0YW5jZSBvZlxuICAgKiB3U2l6ZS1NQVhfTUFUQ0ggYnl0ZXMsIGJ1dCB0aGlzIGVuc3VyZXMgdGhhdCBJTyBpcyBhbHdheXNcbiAgICogcGVyZm9ybWVkIHdpdGggYSBsZW5ndGggbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUuXG4gICAqL1xuXG4gIHRoaXMud2luZG93X3NpemUgPSAwO1xuICAvKiBBY3R1YWwgc2l6ZSBvZiB3aW5kb3c6IDIqd1NpemUsIGV4Y2VwdCB3aGVuIHRoZSB1c2VyIGlucHV0IGJ1ZmZlclxuICAgKiBpcyBkaXJlY3RseSB1c2VkIGFzIHNsaWRpbmcgd2luZG93LlxuICAgKi9cblxuICB0aGlzLnByZXYgPSBudWxsO1xuICAvKiBMaW5rIHRvIG9sZGVyIHN0cmluZyB3aXRoIHNhbWUgaGFzaCBpbmRleC4gVG8gbGltaXQgdGhlIHNpemUgb2YgdGhpc1xuICAgKiBhcnJheSB0byA2NEssIHRoaXMgbGluayBpcyBtYWludGFpbmVkIG9ubHkgZm9yIHRoZSBsYXN0IDMySyBzdHJpbmdzLlxuICAgKiBBbiBpbmRleCBpbiB0aGlzIGFycmF5IGlzIHRodXMgYSB3aW5kb3cgaW5kZXggbW9kdWxvIDMySy5cbiAgICovXG5cbiAgdGhpcy5oZWFkID0gbnVsbDsgICAvKiBIZWFkcyBvZiB0aGUgaGFzaCBjaGFpbnMgb3IgTklMLiAqL1xuXG4gIHRoaXMuaW5zX2ggPSAwOyAgICAgICAvKiBoYXNoIGluZGV4IG9mIHN0cmluZyB0byBiZSBpbnNlcnRlZCAqL1xuICB0aGlzLmhhc2hfc2l6ZSA9IDA7ICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIGhhc2ggdGFibGUgKi9cbiAgdGhpcy5oYXNoX2JpdHMgPSAwOyAgIC8qIGxvZzIoaGFzaF9zaXplKSAqL1xuICB0aGlzLmhhc2hfbWFzayA9IDA7ICAgLyogaGFzaF9zaXplLTEgKi9cblxuICB0aGlzLmhhc2hfc2hpZnQgPSAwO1xuICAvKiBOdW1iZXIgb2YgYml0cyBieSB3aGljaCBpbnNfaCBtdXN0IGJlIHNoaWZ0ZWQgYXQgZWFjaCBpbnB1dFxuICAgKiBzdGVwLiBJdCBtdXN0IGJlIHN1Y2ggdGhhdCBhZnRlciBNSU5fTUFUQ0ggc3RlcHMsIHRoZSBvbGRlc3RcbiAgICogYnl0ZSBubyBsb25nZXIgdGFrZXMgcGFydCBpbiB0aGUgaGFzaCBrZXksIHRoYXQgaXM6XG4gICAqICAgaGFzaF9zaGlmdCAqIE1JTl9NQVRDSCA+PSBoYXNoX2JpdHNcbiAgICovXG5cbiAgdGhpcy5ibG9ja19zdGFydCA9IDA7XG4gIC8qIFdpbmRvdyBwb3NpdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IG91dHB1dCBibG9jay4gR2V0c1xuICAgKiBuZWdhdGl2ZSB3aGVuIHRoZSB3aW5kb3cgaXMgbW92ZWQgYmFja3dhcmRzLlxuICAgKi9cblxuICB0aGlzLm1hdGNoX2xlbmd0aCA9IDA7ICAgICAgLyogbGVuZ3RoIG9mIGJlc3QgbWF0Y2ggKi9cbiAgdGhpcy5wcmV2X21hdGNoID0gMDsgICAgICAgIC8qIHByZXZpb3VzIG1hdGNoICovXG4gIHRoaXMubWF0Y2hfYXZhaWxhYmxlID0gMDsgICAvKiBzZXQgaWYgcHJldmlvdXMgbWF0Y2ggZXhpc3RzICovXG4gIHRoaXMuc3Ryc3RhcnQgPSAwOyAgICAgICAgICAvKiBzdGFydCBvZiBzdHJpbmcgdG8gaW5zZXJ0ICovXG4gIHRoaXMubWF0Y2hfc3RhcnQgPSAwOyAgICAgICAvKiBzdGFydCBvZiBtYXRjaGluZyBzdHJpbmcgKi9cbiAgdGhpcy5sb29rYWhlYWQgPSAwOyAgICAgICAgIC8qIG51bWJlciBvZiB2YWxpZCBieXRlcyBhaGVhZCBpbiB3aW5kb3cgKi9cblxuICB0aGlzLnByZXZfbGVuZ3RoID0gMDtcbiAgLyogTGVuZ3RoIG9mIHRoZSBiZXN0IG1hdGNoIGF0IHByZXZpb3VzIHN0ZXAuIE1hdGNoZXMgbm90IGdyZWF0ZXIgdGhhbiB0aGlzXG4gICAqIGFyZSBkaXNjYXJkZWQuIFRoaXMgaXMgdXNlZCBpbiB0aGUgbGF6eSBtYXRjaCBldmFsdWF0aW9uLlxuICAgKi9cblxuICB0aGlzLm1heF9jaGFpbl9sZW5ndGggPSAwO1xuICAvKiBUbyBzcGVlZCB1cCBkZWZsYXRpb24sIGhhc2ggY2hhaW5zIGFyZSBuZXZlciBzZWFyY2hlZCBiZXlvbmQgdGhpc1xuICAgKiBsZW5ndGguICBBIGhpZ2hlciBsaW1pdCBpbXByb3ZlcyBjb21wcmVzc2lvbiByYXRpbyBidXQgZGVncmFkZXMgdGhlXG4gICAqIHNwZWVkLlxuICAgKi9cblxuICB0aGlzLm1heF9sYXp5X21hdGNoID0gMDtcbiAgLyogQXR0ZW1wdCB0byBmaW5kIGEgYmV0dGVyIG1hdGNoIG9ubHkgd2hlbiB0aGUgY3VycmVudCBtYXRjaCBpcyBzdHJpY3RseVxuICAgKiBzbWFsbGVyIHRoYW4gdGhpcyB2YWx1ZS4gVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBvbmx5IGZvciBjb21wcmVzc2lvblxuICAgKiBsZXZlbHMgPj0gNC5cbiAgICovXG4gIC8vIFRoYXQncyBhbGlhcyB0byBtYXhfbGF6eV9tYXRjaCwgZG9uJ3QgdXNlIGRpcmVjdGx5XG4gIC8vdGhpcy5tYXhfaW5zZXJ0X2xlbmd0aCA9IDA7XG4gIC8qIEluc2VydCBuZXcgc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSBvbmx5IGlmIHRoZSBtYXRjaCBsZW5ndGggaXMgbm90XG4gICAqIGdyZWF0ZXIgdGhhbiB0aGlzIGxlbmd0aC4gVGhpcyBzYXZlcyB0aW1lIGJ1dCBkZWdyYWRlcyBjb21wcmVzc2lvbi5cbiAgICogbWF4X2luc2VydF9sZW5ndGggaXMgdXNlZCBvbmx5IGZvciBjb21wcmVzc2lvbiBsZXZlbHMgPD0gMy5cbiAgICovXG5cbiAgdGhpcy5sZXZlbCA9IDA7ICAgICAvKiBjb21wcmVzc2lvbiBsZXZlbCAoMS4uOSkgKi9cbiAgdGhpcy5zdHJhdGVneSA9IDA7ICAvKiBmYXZvciBvciBmb3JjZSBIdWZmbWFuIGNvZGluZyovXG5cbiAgdGhpcy5nb29kX21hdGNoID0gMDtcbiAgLyogVXNlIGEgZmFzdGVyIHNlYXJjaCB3aGVuIHRoZSBwcmV2aW91cyBtYXRjaCBpcyBsb25nZXIgdGhhbiB0aGlzICovXG5cbiAgdGhpcy5uaWNlX21hdGNoID0gMDsgLyogU3RvcCBzZWFyY2hpbmcgd2hlbiBjdXJyZW50IG1hdGNoIGV4Y2VlZHMgdGhpcyAqL1xuXG4gICAgICAgICAgICAgIC8qIHVzZWQgYnkgdHJlZXMuYzogKi9cblxuICAvKiBEaWRuJ3QgdXNlIGN0X2RhdGEgdHlwZWRlZiBiZWxvdyB0byBzdXBwcmVzcyBjb21waWxlciB3YXJuaW5nICovXG5cbiAgLy8gc3RydWN0IGN0X2RhdGFfcyBkeW5fbHRyZWVbSEVBUF9TSVpFXTsgICAvKiBsaXRlcmFsIGFuZCBsZW5ndGggdHJlZSAqL1xuICAvLyBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9kdHJlZVsyKkRfQ09ERVMrMV07IC8qIGRpc3RhbmNlIHRyZWUgKi9cbiAgLy8gc3RydWN0IGN0X2RhdGFfcyBibF90cmVlWzIqQkxfQ09ERVMrMV07ICAvKiBIdWZmbWFuIHRyZWUgZm9yIGJpdCBsZW5ndGhzICovXG5cbiAgLy8gVXNlIGZsYXQgYXJyYXkgb2YgRE9VQkxFIHNpemUsIHdpdGggaW50ZXJsZWF2ZWQgZmF0YSxcbiAgLy8gYmVjYXVzZSBKUyBkb2VzIG5vdCBzdXBwb3J0IGVmZmVjdGl2ZVxuICB0aGlzLmR5bl9sdHJlZSAgPSBuZXcgdXRpbHMuQnVmMTYoSEVBUF9TSVpFICogMik7XG4gIHRoaXMuZHluX2R0cmVlICA9IG5ldyB1dGlscy5CdWYxNigoMiAqIERfQ09ERVMgKyAxKSAqIDIpO1xuICB0aGlzLmJsX3RyZWUgICAgPSBuZXcgdXRpbHMuQnVmMTYoKDIgKiBCTF9DT0RFUyArIDEpICogMik7XG4gIHplcm8odGhpcy5keW5fbHRyZWUpO1xuICB6ZXJvKHRoaXMuZHluX2R0cmVlKTtcbiAgemVybyh0aGlzLmJsX3RyZWUpO1xuXG4gIHRoaXMubF9kZXNjICAgPSBudWxsOyAgICAgICAgIC8qIGRlc2MuIGZvciBsaXRlcmFsIHRyZWUgKi9cbiAgdGhpcy5kX2Rlc2MgICA9IG51bGw7ICAgICAgICAgLyogZGVzYy4gZm9yIGRpc3RhbmNlIHRyZWUgKi9cbiAgdGhpcy5ibF9kZXNjICA9IG51bGw7ICAgICAgICAgLyogZGVzYy4gZm9yIGJpdCBsZW5ndGggdHJlZSAqL1xuXG4gIC8vdXNoIGJsX2NvdW50W01BWF9CSVRTKzFdO1xuICB0aGlzLmJsX2NvdW50ID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWF9CSVRTICsgMSk7XG4gIC8qIG51bWJlciBvZiBjb2RlcyBhdCBlYWNoIGJpdCBsZW5ndGggZm9yIGFuIG9wdGltYWwgdHJlZSAqL1xuXG4gIC8vaW50IGhlYXBbMipMX0NPREVTKzFdOyAgICAgIC8qIGhlYXAgdXNlZCB0byBidWlsZCB0aGUgSHVmZm1hbiB0cmVlcyAqL1xuICB0aGlzLmhlYXAgPSBuZXcgdXRpbHMuQnVmMTYoMiAqIExfQ09ERVMgKyAxKTsgIC8qIGhlYXAgdXNlZCB0byBidWlsZCB0aGUgSHVmZm1hbiB0cmVlcyAqL1xuICB6ZXJvKHRoaXMuaGVhcCk7XG5cbiAgdGhpcy5oZWFwX2xlbiA9IDA7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoZWFwICovXG4gIHRoaXMuaGVhcF9tYXggPSAwOyAgICAgICAgICAgICAgIC8qIGVsZW1lbnQgb2YgbGFyZ2VzdCBmcmVxdWVuY3kgKi9cbiAgLyogVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVhcFsyKm5dIGFuZCBoZWFwWzIqbisxXS4gaGVhcFswXSBpcyBub3QgdXNlZC5cbiAgICogVGhlIHNhbWUgaGVhcCBhcnJheSBpcyB1c2VkIHRvIGJ1aWxkIGFsbCB0cmVlcy5cbiAgICovXG5cbiAgdGhpcy5kZXB0aCA9IG5ldyB1dGlscy5CdWYxNigyICogTF9DT0RFUyArIDEpOyAvL3VjaCBkZXB0aFsyKkxfQ09ERVMrMV07XG4gIHplcm8odGhpcy5kZXB0aCk7XG4gIC8qIERlcHRoIG9mIGVhY2ggc3VidHJlZSB1c2VkIGFzIHRpZSBicmVha2VyIGZvciB0cmVlcyBvZiBlcXVhbCBmcmVxdWVuY3lcbiAgICovXG5cbiAgdGhpcy5sX2J1ZiA9IDA7ICAgICAgICAgIC8qIGJ1ZmZlciBpbmRleCBmb3IgbGl0ZXJhbHMgb3IgbGVuZ3RocyAqL1xuXG4gIHRoaXMubGl0X2J1ZnNpemUgPSAwO1xuICAvKiBTaXplIG9mIG1hdGNoIGJ1ZmZlciBmb3IgbGl0ZXJhbHMvbGVuZ3Rocy4gIFRoZXJlIGFyZSA0IHJlYXNvbnMgZm9yXG4gICAqIGxpbWl0aW5nIGxpdF9idWZzaXplIHRvIDY0SzpcbiAgICogICAtIGZyZXF1ZW5jaWVzIGNhbiBiZSBrZXB0IGluIDE2IGJpdCBjb3VudGVyc1xuICAgKiAgIC0gaWYgY29tcHJlc3Npb24gaXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmaXJzdCBibG9jaywgYWxsIGlucHV0XG4gICAqICAgICBkYXRhIGlzIHN0aWxsIGluIHRoZSB3aW5kb3cgc28gd2UgY2FuIHN0aWxsIGVtaXQgYSBzdG9yZWQgYmxvY2sgZXZlblxuICAgKiAgICAgd2hlbiBpbnB1dCBjb21lcyBmcm9tIHN0YW5kYXJkIGlucHV0LiAgKFRoaXMgY2FuIGFsc28gYmUgZG9uZSBmb3JcbiAgICogICAgIGFsbCBibG9ja3MgaWYgbGl0X2J1ZnNpemUgaXMgbm90IGdyZWF0ZXIgdGhhbiAzMksuKVxuICAgKiAgIC0gaWYgY29tcHJlc3Npb24gaXMgbm90IHN1Y2Nlc3NmdWwgZm9yIGEgZmlsZSBzbWFsbGVyIHRoYW4gNjRLLCB3ZSBjYW5cbiAgICogICAgIGV2ZW4gZW1pdCBhIHN0b3JlZCBmaWxlIGluc3RlYWQgb2YgYSBzdG9yZWQgYmxvY2sgKHNhdmluZyA1IGJ5dGVzKS5cbiAgICogICAgIFRoaXMgaXMgYXBwbGljYWJsZSBvbmx5IGZvciB6aXAgKG5vdCBnemlwIG9yIHpsaWIpLlxuICAgKiAgIC0gY3JlYXRpbmcgbmV3IEh1ZmZtYW4gdHJlZXMgbGVzcyBmcmVxdWVudGx5IG1heSBub3QgcHJvdmlkZSBmYXN0XG4gICAqICAgICBhZGFwdGF0aW9uIHRvIGNoYW5nZXMgaW4gdGhlIGlucHV0IGRhdGEgc3RhdGlzdGljcy4gKFRha2UgZm9yXG4gICAqICAgICBleGFtcGxlIGEgYmluYXJ5IGZpbGUgd2l0aCBwb29ybHkgY29tcHJlc3NpYmxlIGNvZGUgZm9sbG93ZWQgYnlcbiAgICogICAgIGEgaGlnaGx5IGNvbXByZXNzaWJsZSBzdHJpbmcgdGFibGUuKSBTbWFsbGVyIGJ1ZmZlciBzaXplcyBnaXZlXG4gICAqICAgICBmYXN0IGFkYXB0YXRpb24gYnV0IGhhdmUgb2YgY291cnNlIHRoZSBvdmVyaGVhZCBvZiB0cmFuc21pdHRpbmdcbiAgICogICAgIHRyZWVzIG1vcmUgZnJlcXVlbnRseS5cbiAgICogICAtIEkgY2FuJ3QgY291bnQgYWJvdmUgNFxuICAgKi9cblxuICB0aGlzLmxhc3RfbGl0ID0gMDsgICAgICAvKiBydW5uaW5nIGluZGV4IGluIGxfYnVmICovXG5cbiAgdGhpcy5kX2J1ZiA9IDA7XG4gIC8qIEJ1ZmZlciBpbmRleCBmb3IgZGlzdGFuY2VzLiBUbyBzaW1wbGlmeSB0aGUgY29kZSwgZF9idWYgYW5kIGxfYnVmIGhhdmVcbiAgICogdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzLiBUbyB1c2UgZGlmZmVyZW50IGxlbmd0aHMsIGFuIGV4dHJhIGZsYWdcbiAgICogYXJyYXkgd291bGQgYmUgbmVjZXNzYXJ5LlxuICAgKi9cblxuICB0aGlzLm9wdF9sZW4gPSAwOyAgICAgICAvKiBiaXQgbGVuZ3RoIG9mIGN1cnJlbnQgYmxvY2sgd2l0aCBvcHRpbWFsIHRyZWVzICovXG4gIHRoaXMuc3RhdGljX2xlbiA9IDA7ICAgIC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3aXRoIHN0YXRpYyB0cmVlcyAqL1xuICB0aGlzLm1hdGNoZXMgPSAwOyAgICAgICAvKiBudW1iZXIgb2Ygc3RyaW5nIG1hdGNoZXMgaW4gY3VycmVudCBibG9jayAqL1xuICB0aGlzLmluc2VydCA9IDA7ICAgICAgICAvKiBieXRlcyBhdCBlbmQgb2Ygd2luZG93IGxlZnQgdG8gaW5zZXJ0ICovXG5cblxuICB0aGlzLmJpX2J1ZiA9IDA7XG4gIC8qIE91dHB1dCBidWZmZXIuIGJpdHMgYXJlIGluc2VydGVkIHN0YXJ0aW5nIGF0IHRoZSBib3R0b20gKGxlYXN0XG4gICAqIHNpZ25pZmljYW50IGJpdHMpLlxuICAgKi9cbiAgdGhpcy5iaV92YWxpZCA9IDA7XG4gIC8qIE51bWJlciBvZiB2YWxpZCBiaXRzIGluIGJpX2J1Zi4gIEFsbCBiaXRzIGFib3ZlIHRoZSBsYXN0IHZhbGlkIGJpdFxuICAgKiBhcmUgYWx3YXlzIHplcm8uXG4gICAqL1xuXG4gIC8vIFVzZWQgZm9yIHdpbmRvdyBtZW1vcnkgaW5pdC4gV2Ugc2FmZWx5IGlnbm9yZSBpdCBmb3IgSlMuIFRoYXQgbWFrZXNcbiAgLy8gc2Vuc2Ugb25seSBmb3IgcG9pbnRlcnMgYW5kIG1lbW9yeSBjaGVjayB0b29scy5cbiAgLy90aGlzLmhpZ2hfd2F0ZXIgPSAwO1xuICAvKiBIaWdoIHdhdGVyIG1hcmsgb2Zmc2V0IGluIHdpbmRvdyBmb3IgaW5pdGlhbGl6ZWQgYnl0ZXMgLS0gYnl0ZXMgYWJvdmVcbiAgICogdGhpcyBhcmUgc2V0IHRvIHplcm8gaW4gb3JkZXIgdG8gYXZvaWQgbWVtb3J5IGNoZWNrIHdhcm5pbmdzIHdoZW5cbiAgICogbG9uZ2VzdCBtYXRjaCByb3V0aW5lcyBhY2Nlc3MgYnl0ZXMgcGFzdCB0aGUgaW5wdXQuICBUaGlzIGlzIHRoZW5cbiAgICogdXBkYXRlZCB0byB0aGUgbmV3IGhpZ2ggd2F0ZXIgbWFyay5cbiAgICovXG59XG5cblxuZnVuY3Rpb24gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKSB7XG4gIHZhciBzO1xuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkge1xuICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpO1xuICB9XG5cbiAgc3RybS50b3RhbF9pbiA9IHN0cm0udG90YWxfb3V0ID0gMDtcbiAgc3RybS5kYXRhX3R5cGUgPSBaX1VOS05PV047XG5cbiAgcyA9IHN0cm0uc3RhdGU7XG4gIHMucGVuZGluZyA9IDA7XG4gIHMucGVuZGluZ19vdXQgPSAwO1xuXG4gIGlmIChzLndyYXAgPCAwKSB7XG4gICAgcy53cmFwID0gLXMud3JhcDtcbiAgICAvKiB3YXMgbWFkZSBuZWdhdGl2ZSBieSBkZWZsYXRlKC4uLiwgWl9GSU5JU0gpOyAqL1xuICB9XG4gIHMuc3RhdHVzID0gKHMud3JhcCA/IElOSVRfU1RBVEUgOiBCVVNZX1NUQVRFKTtcbiAgc3RybS5hZGxlciA9IChzLndyYXAgPT09IDIpID9cbiAgICAwICAvLyBjcmMzMigwLCBaX05VTEwsIDApXG4gIDpcbiAgICAxOyAvLyBhZGxlcjMyKDAsIFpfTlVMTCwgMClcbiAgcy5sYXN0X2ZsdXNoID0gWl9OT19GTFVTSDtcbiAgdHJlZXMuX3RyX2luaXQocyk7XG4gIHJldHVybiBaX09LO1xufVxuXG5cbmZ1bmN0aW9uIGRlZmxhdGVSZXNldChzdHJtKSB7XG4gIHZhciByZXQgPSBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pO1xuICBpZiAocmV0ID09PSBaX09LKSB7XG4gICAgbG1faW5pdChzdHJtLnN0YXRlKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5cbmZ1bmN0aW9uIGRlZmxhdGVTZXRIZWFkZXIoc3RybSwgaGVhZCkge1xuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIGlmIChzdHJtLnN0YXRlLndyYXAgIT09IDIpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIHN0cm0uc3RhdGUuZ3poZWFkID0gaGVhZDtcbiAgcmV0dXJuIFpfT0s7XG59XG5cblxuZnVuY3Rpb24gZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBtZXRob2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSkge1xuICBpZiAoIXN0cm0pIHsgLy8gPT09IFpfTlVMTFxuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuICB2YXIgd3JhcCA9IDE7XG5cbiAgaWYgKGxldmVsID09PSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pIHtcbiAgICBsZXZlbCA9IDY7XG4gIH1cblxuICBpZiAod2luZG93Qml0cyA8IDApIHsgLyogc3VwcHJlc3MgemxpYiB3cmFwcGVyICovXG4gICAgd3JhcCA9IDA7XG4gICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzO1xuICB9XG5cbiAgZWxzZSBpZiAod2luZG93Qml0cyA+IDE1KSB7XG4gICAgd3JhcCA9IDI7ICAgICAgICAgICAvKiB3cml0ZSBnemlwIHdyYXBwZXIgaW5zdGVhZCAqL1xuICAgIHdpbmRvd0JpdHMgLT0gMTY7XG4gIH1cblxuXG4gIGlmIChtZW1MZXZlbCA8IDEgfHwgbWVtTGV2ZWwgPiBNQVhfTUVNX0xFVkVMIHx8IG1ldGhvZCAhPT0gWl9ERUZMQVRFRCB8fFxuICAgIHdpbmRvd0JpdHMgPCA4IHx8IHdpbmRvd0JpdHMgPiAxNSB8fCBsZXZlbCA8IDAgfHwgbGV2ZWwgPiA5IHx8XG4gICAgc3RyYXRlZ3kgPCAwIHx8IHN0cmF0ZWd5ID4gWl9GSVhFRCkge1xuICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpO1xuICB9XG5cblxuICBpZiAod2luZG93Qml0cyA9PT0gOCkge1xuICAgIHdpbmRvd0JpdHMgPSA5O1xuICB9XG4gIC8qIHVudGlsIDI1Ni1ieXRlIHdpbmRvdyBidWcgZml4ZWQgKi9cblxuICB2YXIgcyA9IG5ldyBEZWZsYXRlU3RhdGUoKTtcblxuICBzdHJtLnN0YXRlID0gcztcbiAgcy5zdHJtID0gc3RybTtcblxuICBzLndyYXAgPSB3cmFwO1xuICBzLmd6aGVhZCA9IG51bGw7XG4gIHMud19iaXRzID0gd2luZG93Qml0cztcbiAgcy53X3NpemUgPSAxIDw8IHMud19iaXRzO1xuICBzLndfbWFzayA9IHMud19zaXplIC0gMTtcblxuICBzLmhhc2hfYml0cyA9IG1lbUxldmVsICsgNztcbiAgcy5oYXNoX3NpemUgPSAxIDw8IHMuaGFzaF9iaXRzO1xuICBzLmhhc2hfbWFzayA9IHMuaGFzaF9zaXplIC0gMTtcbiAgcy5oYXNoX3NoaWZ0ID0gfn4oKHMuaGFzaF9iaXRzICsgTUlOX01BVENIIC0gMSkgLyBNSU5fTUFUQ0gpO1xuXG4gIHMud2luZG93ID0gbmV3IHV0aWxzLkJ1Zjgocy53X3NpemUgKiAyKTtcbiAgcy5oZWFkID0gbmV3IHV0aWxzLkJ1ZjE2KHMuaGFzaF9zaXplKTtcbiAgcy5wcmV2ID0gbmV3IHV0aWxzLkJ1ZjE2KHMud19zaXplKTtcblxuICAvLyBEb24ndCBuZWVkIG1lbSBpbml0IG1hZ2ljIGZvciBKUy5cbiAgLy9zLmhpZ2hfd2F0ZXIgPSAwOyAgLyogbm90aGluZyB3cml0dGVuIHRvIHMtPndpbmRvdyB5ZXQgKi9cblxuICBzLmxpdF9idWZzaXplID0gMSA8PCAobWVtTGV2ZWwgKyA2KTsgLyogMTZLIGVsZW1lbnRzIGJ5IGRlZmF1bHQgKi9cblxuICBzLnBlbmRpbmdfYnVmX3NpemUgPSBzLmxpdF9idWZzaXplICogNDtcblxuICAvL292ZXJsYXkgPSAodXNoZiAqKSBaQUxMT0Moc3RybSwgcy0+bGl0X2J1ZnNpemUsIHNpemVvZih1c2gpKzIpO1xuICAvL3MtPnBlbmRpbmdfYnVmID0gKHVjaGYgKikgb3ZlcmxheTtcbiAgcy5wZW5kaW5nX2J1ZiA9IG5ldyB1dGlscy5CdWY4KHMucGVuZGluZ19idWZfc2l6ZSk7XG5cbiAgLy8gSXQgaXMgb2Zmc2V0IGZyb20gYHMucGVuZGluZ19idWZgIChzaXplIGlzIGBzLmxpdF9idWZzaXplICogMmApXG4gIC8vcy0+ZF9idWYgPSBvdmVybGF5ICsgcy0+bGl0X2J1ZnNpemUvc2l6ZW9mKHVzaCk7XG4gIHMuZF9idWYgPSAxICogcy5saXRfYnVmc2l6ZTtcblxuICAvL3MtPmxfYnVmID0gcy0+cGVuZGluZ19idWYgKyAoMStzaXplb2YodXNoKSkqcy0+bGl0X2J1ZnNpemU7XG4gIHMubF9idWYgPSAoMSArIDIpICogcy5saXRfYnVmc2l6ZTtcblxuICBzLmxldmVsID0gbGV2ZWw7XG4gIHMuc3RyYXRlZ3kgPSBzdHJhdGVneTtcbiAgcy5tZXRob2QgPSBtZXRob2Q7XG5cbiAgcmV0dXJuIGRlZmxhdGVSZXNldChzdHJtKTtcbn1cblxuZnVuY3Rpb24gZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwpIHtcbiAgcmV0dXJuIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgWl9ERUZMQVRFRCwgTUFYX1dCSVRTLCBERUZfTUVNX0xFVkVMLCBaX0RFRkFVTFRfU1RSQVRFR1kpO1xufVxuXG5cbmZ1bmN0aW9uIGRlZmxhdGUoc3RybSwgZmx1c2gpIHtcbiAgdmFyIG9sZF9mbHVzaCwgcztcbiAgdmFyIGJlZywgdmFsOyAvLyBmb3IgZ3ppcCBoZWFkZXIgd3JpdGUgb25seVxuXG4gIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSB8fFxuICAgIGZsdXNoID4gWl9CTE9DSyB8fCBmbHVzaCA8IDApIHtcbiAgICByZXR1cm4gc3RybSA/IGVycihzdHJtLCBaX1NUUkVBTV9FUlJPUikgOiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIHMgPSBzdHJtLnN0YXRlO1xuXG4gIGlmICghc3RybS5vdXRwdXQgfHxcbiAgICAgICghc3RybS5pbnB1dCAmJiBzdHJtLmF2YWlsX2luICE9PSAwKSB8fFxuICAgICAgKHMuc3RhdHVzID09PSBGSU5JU0hfU1RBVEUgJiYgZmx1c2ggIT09IFpfRklOSVNIKSkge1xuICAgIHJldHVybiBlcnIoc3RybSwgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSA/IFpfQlVGX0VSUk9SIDogWl9TVFJFQU1fRVJST1IpO1xuICB9XG5cbiAgcy5zdHJtID0gc3RybTsgLyoganVzdCBpbiBjYXNlICovXG4gIG9sZF9mbHVzaCA9IHMubGFzdF9mbHVzaDtcbiAgcy5sYXN0X2ZsdXNoID0gZmx1c2g7XG5cbiAgLyogV3JpdGUgdGhlIGhlYWRlciAqL1xuICBpZiAocy5zdGF0dXMgPT09IElOSVRfU1RBVEUpIHtcblxuICAgIGlmIChzLndyYXAgPT09IDIpIHsgLy8gR1pJUCBoZWFkZXJcbiAgICAgIHN0cm0uYWRsZXIgPSAwOyAgLy9jcmMzMigwTCwgWl9OVUxMLCAwKTtcbiAgICAgIHB1dF9ieXRlKHMsIDMxKTtcbiAgICAgIHB1dF9ieXRlKHMsIDEzOSk7XG4gICAgICBwdXRfYnl0ZShzLCA4KTtcbiAgICAgIGlmICghcy5nemhlYWQpIHsgLy8gcy0+Z3poZWFkID09IFpfTlVMTFxuICAgICAgICBwdXRfYnl0ZShzLCAwKTtcbiAgICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICAgIHB1dF9ieXRlKHMsIDApO1xuICAgICAgICBwdXRfYnl0ZShzLCAwKTtcbiAgICAgICAgcHV0X2J5dGUocywgMCk7XG4gICAgICAgIHB1dF9ieXRlKHMsIHMubGV2ZWwgPT09IDkgPyAyIDpcbiAgICAgICAgICAgICAgICAgICAgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIgP1xuICAgICAgICAgICAgICAgICAgICAgNCA6IDApKTtcbiAgICAgICAgcHV0X2J5dGUocywgT1NfQ09ERSk7XG4gICAgICAgIHMuc3RhdHVzID0gQlVTWV9TVEFURTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGV4dCA/IDEgOiAwKSArXG4gICAgICAgICAgICAgICAgICAgIChzLmd6aGVhZC5oY3JjID8gMiA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgKCFzLmd6aGVhZC5leHRyYSA/IDAgOiA0KSArXG4gICAgICAgICAgICAgICAgICAgICghcy5nemhlYWQubmFtZSA/IDAgOiA4KSArXG4gICAgICAgICAgICAgICAgICAgICghcy5nemhlYWQuY29tbWVudCA/IDAgOiAxNilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC50aW1lICYgMHhmZik7XG4gICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC50aW1lID4+IDgpICYgMHhmZik7XG4gICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC50aW1lID4+IDE2KSAmIDB4ZmYpO1xuICAgICAgICBwdXRfYnl0ZShzLCAocy5nemhlYWQudGltZSA+PiAyNCkgJiAweGZmKTtcbiAgICAgICAgcHV0X2J5dGUocywgcy5sZXZlbCA9PT0gOSA/IDIgOlxuICAgICAgICAgICAgICAgICAgICAocy5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLmxldmVsIDwgMiA/XG4gICAgICAgICAgICAgICAgICAgICA0IDogMCkpO1xuICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5vcyAmIDB4ZmYpO1xuICAgICAgICBpZiAocy5nemhlYWQuZXh0cmEgJiYgcy5nemhlYWQuZXh0cmEubGVuZ3RoKSB7XG4gICAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQuZXh0cmEubGVuZ3RoICYgMHhmZik7XG4gICAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLmV4dHJhLmxlbmd0aCA+PiA4KSAmIDB4ZmYpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzLmd6aGVhZC5oY3JjKSB7XG4gICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZywgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcy5nemluZGV4ID0gMDtcbiAgICAgICAgcy5zdGF0dXMgPSBFWFRSQV9TVEFURTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSAvLyBERUZMQVRFIGhlYWRlclxuICAgIHtcbiAgICAgIHZhciBoZWFkZXIgPSAoWl9ERUZMQVRFRCArICgocy53X2JpdHMgLSA4KSA8PCA0KSkgPDwgODtcbiAgICAgIHZhciBsZXZlbF9mbGFncyA9IC0xO1xuXG4gICAgICBpZiAocy5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLmxldmVsIDwgMikge1xuICAgICAgICBsZXZlbF9mbGFncyA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHMubGV2ZWwgPCA2KSB7XG4gICAgICAgIGxldmVsX2ZsYWdzID0gMTtcbiAgICAgIH0gZWxzZSBpZiAocy5sZXZlbCA9PT0gNikge1xuICAgICAgICBsZXZlbF9mbGFncyA9IDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXZlbF9mbGFncyA9IDM7XG4gICAgICB9XG4gICAgICBoZWFkZXIgfD0gKGxldmVsX2ZsYWdzIDw8IDYpO1xuICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHsgaGVhZGVyIHw9IFBSRVNFVF9ESUNUOyB9XG4gICAgICBoZWFkZXIgKz0gMzEgLSAoaGVhZGVyICUgMzEpO1xuXG4gICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7XG4gICAgICBwdXRTaG9ydE1TQihzLCBoZWFkZXIpO1xuXG4gICAgICAvKiBTYXZlIHRoZSBhZGxlcjMyIG9mIHRoZSBwcmVzZXQgZGljdGlvbmFyeTogKi9cbiAgICAgIGlmIChzLnN0cnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTtcbiAgICAgICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciAmIDB4ZmZmZik7XG4gICAgICB9XG4gICAgICBzdHJtLmFkbGVyID0gMTsgLy8gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTtcbiAgICB9XG4gIH1cblxuLy8jaWZkZWYgR1pJUFxuICBpZiAocy5zdGF0dXMgPT09IEVYVFJBX1NUQVRFKSB7XG4gICAgaWYgKHMuZ3poZWFkLmV4dHJhLyogIT0gWl9OVUxMKi8pIHtcbiAgICAgIGJlZyA9IHMucGVuZGluZzsgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi9cblxuICAgICAgd2hpbGUgKHMuZ3ppbmRleCA8IChzLmd6aGVhZC5leHRyYS5sZW5ndGggJiAweGZmZmYpKSB7XG4gICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykge1xuICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7XG4gICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQuZXh0cmFbcy5nemluZGV4XSAmIDB4ZmYpO1xuICAgICAgICBzLmd6aW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykge1xuICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgfVxuICAgICAgaWYgKHMuZ3ppbmRleCA9PT0gcy5nemhlYWQuZXh0cmEubGVuZ3RoKSB7XG4gICAgICAgIHMuZ3ppbmRleCA9IDA7XG4gICAgICAgIHMuc3RhdHVzID0gTkFNRV9TVEFURTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzLnN0YXR1cyA9IE5BTUVfU1RBVEU7XG4gICAgfVxuICB9XG4gIGlmIChzLnN0YXR1cyA9PT0gTkFNRV9TVEFURSkge1xuICAgIGlmIChzLmd6aGVhZC5uYW1lLyogIT0gWl9OVUxMKi8pIHtcbiAgICAgIGJlZyA9IHMucGVuZGluZzsgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi9cbiAgICAgIC8vaW50IHZhbDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7XG4gICAgICAgICAgYmVnID0gcy5wZW5kaW5nO1xuICAgICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgICAgdmFsID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBKUyBzcGVjaWZpYzogbGl0dGxlIG1hZ2ljIHRvIGFkZCB6ZXJvIHRlcm1pbmF0b3IgdG8gZW5kIG9mIHN0cmluZ1xuICAgICAgICBpZiAocy5nemluZGV4IDwgcy5nemhlYWQubmFtZS5sZW5ndGgpIHtcbiAgICAgICAgICB2YWwgPSBzLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQocy5nemluZGV4KyspICYgMHhmZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWwgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7XG4gICAgICB9IHdoaWxlICh2YWwgIT09IDApO1xuXG4gICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHtcbiAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWwgPT09IDApIHtcbiAgICAgICAgcy5nemluZGV4ID0gMDtcbiAgICAgICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRFO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHMuc3RhdHVzID0gQ09NTUVOVF9TVEFURTtcbiAgICB9XG4gIH1cbiAgaWYgKHMuc3RhdHVzID09PSBDT01NRU5UX1NUQVRFKSB7XG4gICAgaWYgKHMuZ3poZWFkLmNvbW1lbnQvKiAhPSBaX05VTEwqLykge1xuICAgICAgYmVnID0gcy5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqL1xuICAgICAgLy9pbnQgdmFsO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykge1xuICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7XG4gICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7XG4gICAgICAgICAgICB2YWwgPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEpTIHNwZWNpZmljOiBsaXR0bGUgbWFnaWMgdG8gYWRkIHplcm8gdGVybWluYXRvciB0byBlbmQgb2Ygc3RyaW5nXG4gICAgICAgIGlmIChzLmd6aW5kZXggPCBzLmd6aGVhZC5jb21tZW50Lmxlbmd0aCkge1xuICAgICAgICAgIHZhbCA9IHMuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChzLmd6aW5kZXgrKykgJiAweGZmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcHV0X2J5dGUocywgdmFsKTtcbiAgICAgIH0gd2hpbGUgKHZhbCAhPT0gMCk7XG5cbiAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykge1xuICAgICAgICBzdHJtLmFkbGVyID0gY3JjMzIoc3RybS5hZGxlciwgcy5wZW5kaW5nX2J1Ziwgcy5wZW5kaW5nIC0gYmVnLCBiZWcpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbCA9PT0gMCkge1xuICAgICAgICBzLnN0YXR1cyA9IEhDUkNfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcy5zdGF0dXMgPSBIQ1JDX1NUQVRFO1xuICAgIH1cbiAgfVxuICBpZiAocy5zdGF0dXMgPT09IEhDUkNfU1RBVEUpIHtcbiAgICBpZiAocy5nemhlYWQuaGNyYykge1xuICAgICAgaWYgKHMucGVuZGluZyArIDIgPiBzLnBlbmRpbmdfYnVmX3NpemUpIHtcbiAgICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICAgIH1cbiAgICAgIGlmIChzLnBlbmRpbmcgKyAyIDw9IHMucGVuZGluZ19idWZfc2l6ZSkge1xuICAgICAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyICYgMHhmZik7XG4gICAgICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDgpICYgMHhmZik7XG4gICAgICAgIHN0cm0uYWRsZXIgPSAwOyAvL2NyYzMyKDBMLCBaX05VTEwsIDApO1xuICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFO1xuICAgIH1cbiAgfVxuLy8jZW5kaWZcblxuICAvKiBGbHVzaCBhcyBtdWNoIHBlbmRpbmcgb3V0cHV0IGFzIHBvc3NpYmxlICovXG4gIGlmIChzLnBlbmRpbmcgIT09IDApIHtcbiAgICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgLyogU2luY2UgYXZhaWxfb3V0IGlzIDAsIGRlZmxhdGUgd2lsbCBiZSBjYWxsZWQgYWdhaW4gd2l0aFxuICAgICAgICogbW9yZSBvdXRwdXQgc3BhY2UsIGJ1dCBwb3NzaWJseSB3aXRoIGJvdGggcGVuZGluZyBhbmRcbiAgICAgICAqIGF2YWlsX2luIGVxdWFsIHRvIHplcm8uIFRoZXJlIHdvbid0IGJlIGFueXRoaW5nIHRvIGRvLFxuICAgICAgICogYnV0IHRoaXMgaXMgbm90IGFuIGVycm9yIHNpdHVhdGlvbiBzbyBtYWtlIHN1cmUgd2VcbiAgICAgICAqIHJldHVybiBPSyBpbnN0ZWFkIG9mIEJVRl9FUlJPUiBhdCBuZXh0IGNhbGwgb2YgZGVmbGF0ZTpcbiAgICAgICAqL1xuICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7XG4gICAgICByZXR1cm4gWl9PSztcbiAgICB9XG5cbiAgICAvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGRvIGFuZCBhdm9pZCBkdXBsaWNhdGUgY29uc2VjdXRpdmVcbiAgICAgKiBmbHVzaGVzLiBGb3IgcmVwZWF0ZWQgYW5kIHVzZWxlc3MgY2FsbHMgd2l0aCBaX0ZJTklTSCwgd2Uga2VlcFxuICAgICAqIHJldHVybmluZyBaX1NUUkVBTV9FTkQgaW5zdGVhZCBvZiBaX0JVRl9FUlJPUi5cbiAgICAgKi9cbiAgfSBlbHNlIGlmIChzdHJtLmF2YWlsX2luID09PSAwICYmIHJhbmsoZmx1c2gpIDw9IHJhbmsob2xkX2ZsdXNoKSAmJlxuICAgIGZsdXNoICE9PSBaX0ZJTklTSCkge1xuICAgIHJldHVybiBlcnIoc3RybSwgWl9CVUZfRVJST1IpO1xuICB9XG5cbiAgLyogVXNlciBtdXN0IG5vdCBwcm92aWRlIG1vcmUgaW5wdXQgYWZ0ZXIgdGhlIGZpcnN0IEZJTklTSDogKi9cbiAgaWYgKHMuc3RhdHVzID09PSBGSU5JU0hfU1RBVEUgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkge1xuICAgIHJldHVybiBlcnIoc3RybSwgWl9CVUZfRVJST1IpO1xuICB9XG5cbiAgLyogU3RhcnQgYSBuZXcgYmxvY2sgb3IgY29udGludWUgdGhlIGN1cnJlbnQgb25lLlxuICAgKi9cbiAgaWYgKHN0cm0uYXZhaWxfaW4gIT09IDAgfHwgcy5sb29rYWhlYWQgIT09IDAgfHxcbiAgICAoZmx1c2ggIT09IFpfTk9fRkxVU0ggJiYgcy5zdGF0dXMgIT09IEZJTklTSF9TVEFURSkpIHtcbiAgICB2YXIgYnN0YXRlID0gKHMuc3RyYXRlZ3kgPT09IFpfSFVGRk1BTl9PTkxZKSA/IGRlZmxhdGVfaHVmZihzLCBmbHVzaCkgOlxuICAgICAgKHMuc3RyYXRlZ3kgPT09IFpfUkxFID8gZGVmbGF0ZV9ybGUocywgZmx1c2gpIDpcbiAgICAgICAgY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5mdW5jKHMsIGZsdXNoKSk7XG5cbiAgICBpZiAoYnN0YXRlID09PSBCU19GSU5JU0hfU1RBUlRFRCB8fCBic3RhdGUgPT09IEJTX0ZJTklTSF9ET05FKSB7XG4gICAgICBzLnN0YXR1cyA9IEZJTklTSF9TVEFURTtcbiAgICB9XG4gICAgaWYgKGJzdGF0ZSA9PT0gQlNfTkVFRF9NT1JFIHx8IGJzdGF0ZSA9PT0gQlNfRklOSVNIX1NUQVJURUQpIHtcbiAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTtcbiAgICAgICAgLyogYXZvaWQgQlVGX0VSUk9SIG5leHQgY2FsbCwgc2VlIGFib3ZlICovXG4gICAgICB9XG4gICAgICByZXR1cm4gWl9PSztcbiAgICAgIC8qIElmIGZsdXNoICE9IFpfTk9fRkxVU0ggJiYgYXZhaWxfb3V0ID09IDAsIHRoZSBuZXh0IGNhbGxcbiAgICAgICAqIG9mIGRlZmxhdGUgc2hvdWxkIHVzZSB0aGUgc2FtZSBmbHVzaCBwYXJhbWV0ZXIgdG8gbWFrZSBzdXJlXG4gICAgICAgKiB0aGF0IHRoZSBmbHVzaCBpcyBjb21wbGV0ZS4gU28gd2UgZG9uJ3QgaGF2ZSB0byBvdXRwdXQgYW5cbiAgICAgICAqIGVtcHR5IGJsb2NrIGhlcmUsIHRoaXMgd2lsbCBiZSBkb25lIGF0IG5leHQgY2FsbC4gVGhpcyBhbHNvXG4gICAgICAgKiBlbnN1cmVzIHRoYXQgZm9yIGEgdmVyeSBzbWFsbCBvdXRwdXQgYnVmZmVyLCB3ZSBlbWl0IGF0IG1vc3RcbiAgICAgICAqIG9uZSBlbXB0eSBibG9jay5cbiAgICAgICAqL1xuICAgIH1cbiAgICBpZiAoYnN0YXRlID09PSBCU19CTE9DS19ET05FKSB7XG4gICAgICBpZiAoZmx1c2ggPT09IFpfUEFSVElBTF9GTFVTSCkge1xuICAgICAgICB0cmVlcy5fdHJfYWxpZ24ocyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChmbHVzaCAhPT0gWl9CTE9DSykgeyAvKiBGVUxMX0ZMVVNIIG9yIFNZTkNfRkxVU0ggKi9cblxuICAgICAgICB0cmVlcy5fdHJfc3RvcmVkX2Jsb2NrKHMsIDAsIDAsIGZhbHNlKTtcbiAgICAgICAgLyogRm9yIGEgZnVsbCBmbHVzaCwgdGhpcyBlbXB0eSBibG9jayB3aWxsIGJlIHJlY29nbml6ZWRcbiAgICAgICAgICogYXMgYSBzcGVjaWFsIG1hcmtlciBieSBpbmZsYXRlX3N5bmMoKS5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChmbHVzaCA9PT0gWl9GVUxMX0ZMVVNIKSB7XG4gICAgICAgICAgLyoqKiBDTEVBUl9IQVNIKHMpOyAqKiovICAgICAgICAgICAgIC8qIGZvcmdldCBoaXN0b3J5ICovXG4gICAgICAgICAgemVybyhzLmhlYWQpOyAvLyBGaWxsIHdpdGggTklMICg9IDApO1xuXG4gICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7XG4gICAgICAgICAgICBzLnN0cnN0YXJ0ID0gMDtcbiAgICAgICAgICAgIHMuYmxvY2tfc3RhcnQgPSAwO1xuICAgICAgICAgICAgcy5pbnNlcnQgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmx1c2hfcGVuZGluZyhzdHJtKTtcbiAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkge1xuICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTsgLyogYXZvaWQgQlVGX0VSUk9SIGF0IG5leHQgY2FsbCwgc2VlIGFib3ZlICovXG4gICAgICAgIHJldHVybiBaX09LO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvL0Fzc2VydChzdHJtLT5hdmFpbF9vdXQgPiAwLCBcImJ1ZzJcIik7XG4gIC8vaWYgKHN0cm0uYXZhaWxfb3V0IDw9IDApIHsgdGhyb3cgbmV3IEVycm9yKFwiYnVnMlwiKTt9XG5cbiAgaWYgKGZsdXNoICE9PSBaX0ZJTklTSCkgeyByZXR1cm4gWl9PSzsgfVxuICBpZiAocy53cmFwIDw9IDApIHsgcmV0dXJuIFpfU1RSRUFNX0VORDsgfVxuXG4gIC8qIFdyaXRlIHRoZSB0cmFpbGVyICovXG4gIGlmIChzLndyYXAgPT09IDIpIHtcbiAgICBwdXRfYnl0ZShzLCBzdHJtLmFkbGVyICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gOCkgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS5hZGxlciA+PiAxNikgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS5hZGxlciA+PiAyNCkgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCBzdHJtLnRvdGFsX2luICYgMHhmZik7XG4gICAgcHV0X2J5dGUocywgKHN0cm0udG90YWxfaW4gPj4gOCkgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS50b3RhbF9pbiA+PiAxNikgJiAweGZmKTtcbiAgICBwdXRfYnl0ZShzLCAoc3RybS50b3RhbF9pbiA+PiAyNCkgJiAweGZmKTtcbiAgfVxuICBlbHNlXG4gIHtcbiAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyID4+PiAxNik7XG4gICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciAmIDB4ZmZmZik7XG4gIH1cblxuICBmbHVzaF9wZW5kaW5nKHN0cm0pO1xuICAvKiBJZiBhdmFpbF9vdXQgaXMgemVybywgdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2FsbCBkZWZsYXRlIGFnYWluXG4gICAqIHRvIGZsdXNoIHRoZSByZXN0LlxuICAgKi9cbiAgaWYgKHMud3JhcCA+IDApIHsgcy53cmFwID0gLXMud3JhcDsgfVxuICAvKiB3cml0ZSB0aGUgdHJhaWxlciBvbmx5IG9uY2UhICovXG4gIHJldHVybiBzLnBlbmRpbmcgIT09IDAgPyBaX09LIDogWl9TVFJFQU1fRU5EO1xufVxuXG5mdW5jdGlvbiBkZWZsYXRlRW5kKHN0cm0pIHtcbiAgdmFyIHN0YXR1cztcblxuICBpZiAoIXN0cm0vKj09IFpfTlVMTCovIHx8ICFzdHJtLnN0YXRlLyo9PSBaX05VTEwqLykge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIHN0YXR1cyA9IHN0cm0uc3RhdGUuc3RhdHVzO1xuICBpZiAoc3RhdHVzICE9PSBJTklUX1NUQVRFICYmXG4gICAgc3RhdHVzICE9PSBFWFRSQV9TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gTkFNRV9TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gQ09NTUVOVF9TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gSENSQ19TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gQlVTWV9TVEFURSAmJlxuICAgIHN0YXR1cyAhPT0gRklOSVNIX1NUQVRFXG4gICkge1xuICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpO1xuICB9XG5cbiAgc3RybS5zdGF0ZSA9IG51bGw7XG5cbiAgcmV0dXJuIHN0YXR1cyA9PT0gQlVTWV9TVEFURSA/IGVycihzdHJtLCBaX0RBVEFfRVJST1IpIDogWl9PSztcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplcyB0aGUgY29tcHJlc3Npb24gZGljdGlvbmFyeSBmcm9tIHRoZSBnaXZlbiBieXRlXG4gKiBzZXF1ZW5jZSB3aXRob3V0IHByb2R1Y2luZyBhbnkgY29tcHJlc3NlZCBvdXRwdXQuXG4gKi9cbmZ1bmN0aW9uIGRlZmxhdGVTZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnkpIHtcbiAgdmFyIGRpY3RMZW5ndGggPSBkaWN0aW9uYXJ5Lmxlbmd0aDtcblxuICB2YXIgcztcbiAgdmFyIHN0ciwgbjtcbiAgdmFyIHdyYXA7XG4gIHZhciBhdmFpbDtcbiAgdmFyIG5leHQ7XG4gIHZhciBpbnB1dDtcbiAgdmFyIHRtcERpY3Q7XG5cbiAgaWYgKCFzdHJtLyo9PSBaX05VTEwqLyB8fCAhc3RybS5zdGF0ZS8qPT0gWl9OVUxMKi8pIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cblxuICBzID0gc3RybS5zdGF0ZTtcbiAgd3JhcCA9IHMud3JhcDtcblxuICBpZiAod3JhcCA9PT0gMiB8fCAod3JhcCA9PT0gMSAmJiBzLnN0YXR1cyAhPT0gSU5JVF9TVEFURSkgfHwgcy5sb29rYWhlYWQpIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cblxuICAvKiB3aGVuIHVzaW5nIHpsaWIgd3JhcHBlcnMsIGNvbXB1dGUgQWRsZXItMzIgZm9yIHByb3ZpZGVkIGRpY3Rpb25hcnkgKi9cbiAgaWYgKHdyYXAgPT09IDEpIHtcbiAgICAvKiBhZGxlcjMyKHN0cm0tPmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsgKi9cbiAgICBzdHJtLmFkbGVyID0gYWRsZXIzMihzdHJtLmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCAwKTtcbiAgfVxuXG4gIHMud3JhcCA9IDA7ICAgLyogYXZvaWQgY29tcHV0aW5nIEFkbGVyLTMyIGluIHJlYWRfYnVmICovXG5cbiAgLyogaWYgZGljdGlvbmFyeSB3b3VsZCBmaWxsIHdpbmRvdywganVzdCByZXBsYWNlIHRoZSBoaXN0b3J5ICovXG4gIGlmIChkaWN0TGVuZ3RoID49IHMud19zaXplKSB7XG4gICAgaWYgKHdyYXAgPT09IDApIHsgICAgICAgICAgICAvKiBhbHJlYWR5IGVtcHR5IG90aGVyd2lzZSAqL1xuICAgICAgLyoqKiBDTEVBUl9IQVNIKHMpOyAqKiovXG4gICAgICB6ZXJvKHMuaGVhZCk7IC8vIEZpbGwgd2l0aCBOSUwgKD0gMCk7XG4gICAgICBzLnN0cnN0YXJ0ID0gMDtcbiAgICAgIHMuYmxvY2tfc3RhcnQgPSAwO1xuICAgICAgcy5pbnNlcnQgPSAwO1xuICAgIH1cbiAgICAvKiB1c2UgdGhlIHRhaWwgKi9cbiAgICAvLyBkaWN0aW9uYXJ5ID0gZGljdGlvbmFyeS5zbGljZShkaWN0TGVuZ3RoIC0gcy53X3NpemUpO1xuICAgIHRtcERpY3QgPSBuZXcgdXRpbHMuQnVmOChzLndfc2l6ZSk7XG4gICAgdXRpbHMuYXJyYXlTZXQodG1wRGljdCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCAtIHMud19zaXplLCBzLndfc2l6ZSwgMCk7XG4gICAgZGljdGlvbmFyeSA9IHRtcERpY3Q7XG4gICAgZGljdExlbmd0aCA9IHMud19zaXplO1xuICB9XG4gIC8qIGluc2VydCBkaWN0aW9uYXJ5IGludG8gd2luZG93IGFuZCBoYXNoICovXG4gIGF2YWlsID0gc3RybS5hdmFpbF9pbjtcbiAgbmV4dCA9IHN0cm0ubmV4dF9pbjtcbiAgaW5wdXQgPSBzdHJtLmlucHV0O1xuICBzdHJtLmF2YWlsX2luID0gZGljdExlbmd0aDtcbiAgc3RybS5uZXh0X2luID0gMDtcbiAgc3RybS5pbnB1dCA9IGRpY3Rpb25hcnk7XG4gIGZpbGxfd2luZG93KHMpO1xuICB3aGlsZSAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7XG4gICAgc3RyID0gcy5zdHJzdGFydDtcbiAgICBuID0gcy5sb29rYWhlYWQgLSAoTUlOX01BVENIIC0gMSk7XG4gICAgZG8ge1xuICAgICAgLyogVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyBNSU5fTUFUQ0gtMV0pOyAqL1xuICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbc3RyICsgTUlOX01BVENIIC0gMV0pICYgcy5oYXNoX21hc2s7XG5cbiAgICAgIHMucHJldltzdHIgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07XG5cbiAgICAgIHMuaGVhZFtzLmluc19oXSA9IHN0cjtcbiAgICAgIHN0cisrO1xuICAgIH0gd2hpbGUgKC0tbik7XG4gICAgcy5zdHJzdGFydCA9IHN0cjtcbiAgICBzLmxvb2thaGVhZCA9IE1JTl9NQVRDSCAtIDE7XG4gICAgZmlsbF93aW5kb3cocyk7XG4gIH1cbiAgcy5zdHJzdGFydCArPSBzLmxvb2thaGVhZDtcbiAgcy5ibG9ja19zdGFydCA9IHMuc3Ryc3RhcnQ7XG4gIHMuaW5zZXJ0ID0gcy5sb29rYWhlYWQ7XG4gIHMubG9va2FoZWFkID0gMDtcbiAgcy5tYXRjaF9sZW5ndGggPSBzLnByZXZfbGVuZ3RoID0gTUlOX01BVENIIC0gMTtcbiAgcy5tYXRjaF9hdmFpbGFibGUgPSAwO1xuICBzdHJtLm5leHRfaW4gPSBuZXh0O1xuICBzdHJtLmlucHV0ID0gaW5wdXQ7XG4gIHN0cm0uYXZhaWxfaW4gPSBhdmFpbDtcbiAgcy53cmFwID0gd3JhcDtcbiAgcmV0dXJuIFpfT0s7XG59XG5cblxuZXhwb3J0cy5kZWZsYXRlSW5pdCA9IGRlZmxhdGVJbml0O1xuZXhwb3J0cy5kZWZsYXRlSW5pdDIgPSBkZWZsYXRlSW5pdDI7XG5leHBvcnRzLmRlZmxhdGVSZXNldCA9IGRlZmxhdGVSZXNldDtcbmV4cG9ydHMuZGVmbGF0ZVJlc2V0S2VlcCA9IGRlZmxhdGVSZXNldEtlZXA7XG5leHBvcnRzLmRlZmxhdGVTZXRIZWFkZXIgPSBkZWZsYXRlU2V0SGVhZGVyO1xuZXhwb3J0cy5kZWZsYXRlID0gZGVmbGF0ZTtcbmV4cG9ydHMuZGVmbGF0ZUVuZCA9IGRlZmxhdGVFbmQ7XG5leHBvcnRzLmRlZmxhdGVTZXREaWN0aW9uYXJ5ID0gZGVmbGF0ZVNldERpY3Rpb25hcnk7XG5leHBvcnRzLmRlZmxhdGVJbmZvID0gJ3Bha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCknO1xuXG4vKiBOb3QgaW1wbGVtZW50ZWRcbmV4cG9ydHMuZGVmbGF0ZUJvdW5kID0gZGVmbGF0ZUJvdW5kO1xuZXhwb3J0cy5kZWZsYXRlQ29weSA9IGRlZmxhdGVDb3B5O1xuZXhwb3J0cy5kZWZsYXRlUGFyYW1zID0gZGVmbGF0ZVBhcmFtcztcbmV4cG9ydHMuZGVmbGF0ZVBlbmRpbmcgPSBkZWZsYXRlUGVuZGluZztcbmV4cG9ydHMuZGVmbGF0ZVByaW1lID0gZGVmbGF0ZVByaW1lO1xuZXhwb3J0cy5kZWZsYXRlVHVuZSA9IGRlZmxhdGVUdW5lO1xuKi9cbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gU2VlIHN0YXRlIGRlZnMgZnJvbSBpbmZsYXRlLmpzXG52YXIgQkFEID0gMzA7ICAgICAgIC8qIGdvdCBhIGRhdGEgZXJyb3IgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi9cbnZhciBUWVBFID0gMTI7ICAgICAgLyogaTogd2FpdGluZyBmb3IgdHlwZSBiaXRzLCBpbmNsdWRpbmcgbGFzdC1mbGFnIGJpdCAqL1xuXG4vKlxuICAgRGVjb2RlIGxpdGVyYWwsIGxlbmd0aCwgYW5kIGRpc3RhbmNlIGNvZGVzIGFuZCB3cml0ZSBvdXQgdGhlIHJlc3VsdGluZ1xuICAgbGl0ZXJhbCBhbmQgbWF0Y2ggYnl0ZXMgdW50aWwgZWl0aGVyIG5vdCBlbm91Z2ggaW5wdXQgb3Igb3V0cHV0IGlzXG4gICBhdmFpbGFibGUsIGFuIGVuZC1vZi1ibG9jayBpcyBlbmNvdW50ZXJlZCwgb3IgYSBkYXRhIGVycm9yIGlzIGVuY291bnRlcmVkLlxuICAgV2hlbiBsYXJnZSBlbm91Z2ggaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGFyZSBzdXBwbGllZCB0byBpbmZsYXRlKCksIGZvclxuICAgZXhhbXBsZSwgYSAxNksgaW5wdXQgYnVmZmVyIGFuZCBhIDY0SyBvdXRwdXQgYnVmZmVyLCBtb3JlIHRoYW4gOTUlIG9mIHRoZVxuICAgaW5mbGF0ZSBleGVjdXRpb24gdGltZSBpcyBzcGVudCBpbiB0aGlzIHJvdXRpbmUuXG5cbiAgIEVudHJ5IGFzc3VtcHRpb25zOlxuXG4gICAgICAgIHN0YXRlLm1vZGUgPT09IExFTlxuICAgICAgICBzdHJtLmF2YWlsX2luID49IDZcbiAgICAgICAgc3RybS5hdmFpbF9vdXQgPj0gMjU4XG4gICAgICAgIHN0YXJ0ID49IHN0cm0uYXZhaWxfb3V0XG4gICAgICAgIHN0YXRlLmJpdHMgPCA4XG5cbiAgIE9uIHJldHVybiwgc3RhdGUubW9kZSBpcyBvbmUgb2Y6XG5cbiAgICAgICAgTEVOIC0tIHJhbiBvdXQgb2YgZW5vdWdoIG91dHB1dCBzcGFjZSBvciBlbm91Z2ggYXZhaWxhYmxlIGlucHV0XG4gICAgICAgIFRZUEUgLS0gcmVhY2hlZCBlbmQgb2YgYmxvY2sgY29kZSwgaW5mbGF0ZSgpIHRvIGludGVycHJldCBuZXh0IGJsb2NrXG4gICAgICAgIEJBRCAtLSBlcnJvciBpbiBibG9jayBkYXRhXG5cbiAgIE5vdGVzOlxuXG4gICAgLSBUaGUgbWF4aW11bSBpbnB1dCBiaXRzIHVzZWQgYnkgYSBsZW5ndGgvZGlzdGFuY2UgcGFpciBpcyAxNSBiaXRzIGZvciB0aGVcbiAgICAgIGxlbmd0aCBjb2RlLCA1IGJpdHMgZm9yIHRoZSBsZW5ndGggZXh0cmEsIDE1IGJpdHMgZm9yIHRoZSBkaXN0YW5jZSBjb2RlLFxuICAgICAgYW5kIDEzIGJpdHMgZm9yIHRoZSBkaXN0YW5jZSBleHRyYS4gIFRoaXMgdG90YWxzIDQ4IGJpdHMsIG9yIHNpeCBieXRlcy5cbiAgICAgIFRoZXJlZm9yZSBpZiBzdHJtLmF2YWlsX2luID49IDYsIHRoZW4gdGhlcmUgaXMgZW5vdWdoIGlucHV0IHRvIGF2b2lkXG4gICAgICBjaGVja2luZyBmb3IgYXZhaWxhYmxlIGlucHV0IHdoaWxlIGRlY29kaW5nLlxuXG4gICAgLSBUaGUgbWF4aW11bSBieXRlcyB0aGF0IGEgc2luZ2xlIGxlbmd0aC9kaXN0YW5jZSBwYWlyIGNhbiBvdXRwdXQgaXMgMjU4XG4gICAgICBieXRlcywgd2hpY2ggaXMgdGhlIG1heGltdW0gbGVuZ3RoIHRoYXQgY2FuIGJlIGNvZGVkLiAgaW5mbGF0ZV9mYXN0KClcbiAgICAgIHJlcXVpcmVzIHN0cm0uYXZhaWxfb3V0ID49IDI1OCBmb3IgZWFjaCBsb29wIHRvIGF2b2lkIGNoZWNraW5nIGZvclxuICAgICAgb3V0cHV0IHNwYWNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluZmxhdGVfZmFzdChzdHJtLCBzdGFydCkge1xuICB2YXIgc3RhdGU7XG4gIHZhciBfaW47ICAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmlucHV0ICovXG4gIHZhciBsYXN0OyAgICAgICAgICAgICAgICAgICAvKiBoYXZlIGVub3VnaCBpbnB1dCB3aGlsZSBpbiA8IGxhc3QgKi9cbiAgdmFyIF9vdXQ7ICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0ub3V0cHV0ICovXG4gIHZhciBiZWc7ICAgICAgICAgICAgICAgICAgICAvKiBpbmZsYXRlKCkncyBpbml0aWFsIHN0cm0ub3V0cHV0ICovXG4gIHZhciBlbmQ7ICAgICAgICAgICAgICAgICAgICAvKiB3aGlsZSBvdXQgPCBlbmQsIGVub3VnaCBzcGFjZSBhdmFpbGFibGUgKi9cbi8vI2lmZGVmIElORkxBVEVfU1RSSUNUXG4gIHZhciBkbWF4OyAgICAgICAgICAgICAgICAgICAvKiBtYXhpbXVtIGRpc3RhbmNlIGZyb20gemxpYiBoZWFkZXIgKi9cbi8vI2VuZGlmXG4gIHZhciB3c2l6ZTsgICAgICAgICAgICAgICAgICAvKiB3aW5kb3cgc2l6ZSBvciB6ZXJvIGlmIG5vdCB1c2luZyB3aW5kb3cgKi9cbiAgdmFyIHdoYXZlOyAgICAgICAgICAgICAgICAgIC8qIHZhbGlkIGJ5dGVzIGluIHRoZSB3aW5kb3cgKi9cbiAgdmFyIHduZXh0OyAgICAgICAgICAgICAgICAgIC8qIHdpbmRvdyB3cml0ZSBpbmRleCAqL1xuICAvLyBVc2UgYHNfd2luZG93YCBpbnN0ZWFkIGB3aW5kb3dgLCBhdm9pZCBjb25mbGljdCB3aXRoIGluc3RydW1lbnRhdGlvbiB0b29sc1xuICB2YXIgc193aW5kb3c7ICAgICAgICAgICAgICAgLyogYWxsb2NhdGVkIHNsaWRpbmcgd2luZG93LCBpZiB3c2l6ZSAhPSAwICovXG4gIHZhciBob2xkOyAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmhvbGQgKi9cbiAgdmFyIGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0uYml0cyAqL1xuICB2YXIgbGNvZGU7ICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5sZW5jb2RlICovXG4gIHZhciBkY29kZTsgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmRpc3Rjb2RlICovXG4gIHZhciBsbWFzazsgICAgICAgICAgICAgICAgICAvKiBtYXNrIGZvciBmaXJzdCBsZXZlbCBvZiBsZW5ndGggY29kZXMgKi9cbiAgdmFyIGRtYXNrOyAgICAgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGZpcnN0IGxldmVsIG9mIGRpc3RhbmNlIGNvZGVzICovXG4gIHZhciBoZXJlOyAgICAgICAgICAgICAgICAgICAvKiByZXRyaWV2ZWQgdGFibGUgZW50cnkgKi9cbiAgdmFyIG9wOyAgICAgICAgICAgICAgICAgICAgIC8qIGNvZGUgYml0cywgb3BlcmF0aW9uLCBleHRyYSBiaXRzLCBvciAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHdpbmRvdyBwb3NpdGlvbiwgd2luZG93IGJ5dGVzIHRvIGNvcHkgKi9cbiAgdmFyIGxlbjsgICAgICAgICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCwgdW51c2VkIGJ5dGVzICovXG4gIHZhciBkaXN0OyAgICAgICAgICAgICAgICAgICAvKiBtYXRjaCBkaXN0YW5jZSAqL1xuICB2YXIgZnJvbTsgICAgICAgICAgICAgICAgICAgLyogd2hlcmUgdG8gY29weSBtYXRjaCBmcm9tICovXG4gIHZhciBmcm9tX3NvdXJjZTtcblxuXG4gIHZhciBpbnB1dCwgb3V0cHV0OyAvLyBKUyBzcGVjaWZpYywgYmVjYXVzZSB3ZSBoYXZlIG5vIHBvaW50ZXJzXG5cbiAgLyogY29weSBzdGF0ZSB0byBsb2NhbCB2YXJpYWJsZXMgKi9cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICAvL2hlcmUgPSBzdGF0ZS5oZXJlO1xuICBfaW4gPSBzdHJtLm5leHRfaW47XG4gIGlucHV0ID0gc3RybS5pbnB1dDtcbiAgbGFzdCA9IF9pbiArIChzdHJtLmF2YWlsX2luIC0gNSk7XG4gIF9vdXQgPSBzdHJtLm5leHRfb3V0O1xuICBvdXRwdXQgPSBzdHJtLm91dHB1dDtcbiAgYmVnID0gX291dCAtIChzdGFydCAtIHN0cm0uYXZhaWxfb3V0KTtcbiAgZW5kID0gX291dCArIChzdHJtLmF2YWlsX291dCAtIDI1Nyk7XG4vLyNpZmRlZiBJTkZMQVRFX1NUUklDVFxuICBkbWF4ID0gc3RhdGUuZG1heDtcbi8vI2VuZGlmXG4gIHdzaXplID0gc3RhdGUud3NpemU7XG4gIHdoYXZlID0gc3RhdGUud2hhdmU7XG4gIHduZXh0ID0gc3RhdGUud25leHQ7XG4gIHNfd2luZG93ID0gc3RhdGUud2luZG93O1xuICBob2xkID0gc3RhdGUuaG9sZDtcbiAgYml0cyA9IHN0YXRlLmJpdHM7XG4gIGxjb2RlID0gc3RhdGUubGVuY29kZTtcbiAgZGNvZGUgPSBzdGF0ZS5kaXN0Y29kZTtcbiAgbG1hc2sgPSAoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDE7XG4gIGRtYXNrID0gKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMTtcblxuXG4gIC8qIGRlY29kZSBsaXRlcmFscyBhbmQgbGVuZ3RoL2Rpc3RhbmNlcyB1bnRpbCBlbmQtb2YtYmxvY2sgb3Igbm90IGVub3VnaFxuICAgICBpbnB1dCBkYXRhIG9yIG91dHB1dCBzcGFjZSAqL1xuXG4gIHRvcDpcbiAgZG8ge1xuICAgIGlmIChiaXRzIDwgMTUpIHtcbiAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICBiaXRzICs9IDg7XG4gICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgYml0cyArPSA4O1xuICAgIH1cblxuICAgIGhlcmUgPSBsY29kZVtob2xkICYgbG1hc2tdO1xuXG4gICAgZG9sZW46XG4gICAgZm9yICg7OykgeyAvLyBHb3RvIGVtdWxhdGlvblxuICAgICAgb3AgPSBoZXJlID4+PiAyNC8qaGVyZS5iaXRzKi87XG4gICAgICBob2xkID4+Pj0gb3A7XG4gICAgICBiaXRzIC09IG9wO1xuICAgICAgb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZi8qaGVyZS5vcCovO1xuICAgICAgaWYgKG9wID09PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXRlcmFsICovXG4gICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/XG4gICAgICAgIC8vICAgICAgICBcImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXFxuXCIgOlxuICAgICAgICAvLyAgICAgICAgXCJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XFxuXCIsIGhlcmUudmFsKSk7XG4gICAgICAgIG91dHB1dFtfb3V0KytdID0gaGVyZSAmIDB4ZmZmZi8qaGVyZS52YWwqLztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG9wICYgMTYpIHsgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggYmFzZSAqL1xuICAgICAgICBsZW4gPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovO1xuICAgICAgICBvcCAmPSAxNTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqL1xuICAgICAgICBpZiAob3ApIHtcbiAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7XG4gICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW4gKz0gaG9sZCAmICgoMSA8PCBvcCkgLSAxKTtcbiAgICAgICAgICBob2xkID4+Pj0gb3A7XG4gICAgICAgICAgYml0cyAtPSBvcDtcbiAgICAgICAgfVxuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxcblwiLCBsZW4pKTtcbiAgICAgICAgaWYgKGJpdHMgPCAxNSkge1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbX2luKytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIGhlcmUgPSBkY29kZVtob2xkICYgZG1hc2tdO1xuXG4gICAgICAgIGRvZGlzdDpcbiAgICAgICAgZm9yICg7OykgeyAvLyBnb3RvIGVtdWxhdGlvblxuICAgICAgICAgIG9wID0gaGVyZSA+Pj4gMjQvKmhlcmUuYml0cyovO1xuICAgICAgICAgIGhvbGQgPj4+PSBvcDtcbiAgICAgICAgICBiaXRzIC09IG9wO1xuICAgICAgICAgIG9wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmYvKmhlcmUub3AqLztcblxuICAgICAgICAgIGlmIChvcCAmIDE2KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhc2UgKi9cbiAgICAgICAgICAgIGRpc3QgPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovO1xuICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqL1xuICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkge1xuICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHtcbiAgICAgICAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzdCArPSBob2xkICYgKCgxIDw8IG9wKSAtIDEpO1xuLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1RcbiAgICAgICAgICAgIGlmIChkaXN0ID4gZG1heCkge1xuICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7XG4gICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICAgIGJyZWFrIHRvcDtcbiAgICAgICAgICAgIH1cbi8vI2VuZGlmXG4gICAgICAgICAgICBob2xkID4+Pj0gb3A7XG4gICAgICAgICAgICBiaXRzIC09IG9wO1xuICAgICAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBkaXN0YW5jZSAldVxcblwiLCBkaXN0KSk7XG4gICAgICAgICAgICBvcCA9IF9vdXQgLSBiZWc7ICAgICAgICAgICAgICAgIC8qIG1heCBkaXN0YW5jZSBpbiBvdXRwdXQgKi9cbiAgICAgICAgICAgIGlmIChkaXN0ID4gb3ApIHsgICAgICAgICAgICAgICAgLyogc2VlIGlmIGNvcHkgZnJvbSB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgb3AgPSBkaXN0IC0gb3A7ICAgICAgICAgICAgICAgLyogZGlzdGFuY2UgYmFjayBpbiB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgaWYgKG9wID4gd2hhdmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkge1xuICAgICAgICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2snO1xuICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDtcbiAgICAgICAgICAgICAgICB9XG5cbi8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVmYWlsdHMsXG4vLyBkb24ndCBlbmFibGUgaXQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5XG4vLyNpZmRlZiBJTkZMQVRFX0FMTE9XX0lOVkFMSURfRElTVEFOQ0VfVE9PRkFSX0FSUlJcbi8vICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gb3AgLSB3aGF2ZSkge1xuLy8gICAgICAgICAgICAgICAgICBkbyB7XG4vLyAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSAwO1xuLy8gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7XG4vLyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHRvcDtcbi8vICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgICAgIGxlbiAtPSBvcCAtIHdoYXZlO1xuLy8gICAgICAgICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IDA7XG4vLyAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wID4gd2hhdmUpO1xuLy8gICAgICAgICAgICAgICAgaWYgKG9wID09PSAwKSB7XG4vLyAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDtcbi8vICAgICAgICAgICAgICAgICAgZG8ge1xuLy8gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4vLyAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuKTtcbi8vICAgICAgICAgICAgICAgICAgY29udGludWUgdG9wO1xuLy8gICAgICAgICAgICAgICAgfVxuLy8jZW5kaWZcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmcm9tID0gMDsgLy8gd2luZG93IGluZGV4XG4gICAgICAgICAgICAgIGZyb21fc291cmNlID0gc193aW5kb3c7XG4gICAgICAgICAgICAgIGlmICh3bmV4dCA9PT0gMCkgeyAgICAgICAgICAgLyogdmVyeSBjb21tb24gY2FzZSAqL1xuICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgLSBvcDtcbiAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21lIGZyb20gd2luZG93ICovXG4gICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7XG4gICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApO1xuICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OyAgLyogcmVzdCBmcm9tIG91dHB1dCAqL1xuICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHduZXh0IDwgb3ApIHsgICAgICAvKiB3cmFwIGFyb3VuZCB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgICBmcm9tICs9IHdzaXplICsgd25leHQgLSBvcDtcbiAgICAgICAgICAgICAgICBvcCAtPSB3bmV4dDtcbiAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21lIGZyb20gZW5kIG9mIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgICAgbGVuIC09IG9wO1xuICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTtcbiAgICAgICAgICAgICAgICAgIGZyb20gPSAwO1xuICAgICAgICAgICAgICAgICAgaWYgKHduZXh0IDwgbGVuKSB7ICAvKiBzb21lIGZyb20gc3RhcnQgb2Ygd2luZG93ICovXG4gICAgICAgICAgICAgICAgICAgIG9wID0gd25leHQ7XG4gICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDtcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gc193aW5kb3dbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7XG4gICAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsgICAgICAvKiByZXN0IGZyb20gb3V0cHV0ICovXG4gICAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogY29udGlndW91cyBpbiB3aW5kb3cgKi9cbiAgICAgICAgICAgICAgICBmcm9tICs9IHduZXh0IC0gb3A7XG4gICAgICAgICAgICAgICAgaWYgKG9wIDwgbGVuKSB7ICAgICAgICAgLyogc29tZSBmcm9tIHdpbmRvdyAqL1xuICAgICAgICAgICAgICAgICAgbGVuIC09IG9wO1xuICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHNfd2luZG93W2Zyb20rK107XG4gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTtcbiAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsgIC8qIHJlc3QgZnJvbSBvdXRwdXQgKi9cbiAgICAgICAgICAgICAgICAgIGZyb21fc291cmNlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB3aGlsZSAobGVuID4gMikge1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdO1xuICAgICAgICAgICAgICAgIGxlbiAtPSAzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107XG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAgICAgICAgIC8qIGNvcHkgZGlyZWN0IGZyb20gb3V0cHV0ICovXG4gICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtaW5pbXVtIGxlbmd0aCBpcyB0aHJlZSAqL1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTtcbiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdO1xuICAgICAgICAgICAgICAgIGxlbiAtPSAzO1xuICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gPiAyKTtcbiAgICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKChvcCAmIDY0KSA9PT0gMCkgeyAgICAgICAgICAvKiAybmQgbGV2ZWwgZGlzdGFuY2UgY29kZSAqL1xuICAgICAgICAgICAgaGVyZSA9IGRjb2RlWyhoZXJlICYgMHhmZmZmKS8qaGVyZS52YWwqLyArIChob2xkICYgKCgxIDw8IG9wKSAtIDEpKV07XG4gICAgICAgICAgICBjb250aW51ZSBkb2Rpc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSBjb2RlJztcbiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgICBicmVhayB0b3A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7IC8vIG5lZWQgdG8gZW11bGF0ZSBnb3RvIHZpYSBcImNvbnRpbnVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoKG9wICYgNjQpID09PSAwKSB7ICAgICAgICAgICAgICAvKiAybmQgbGV2ZWwgbGVuZ3RoIGNvZGUgKi9cbiAgICAgICAgaGVyZSA9IGxjb2RlWyhoZXJlICYgMHhmZmZmKS8qaGVyZS52YWwqLyArIChob2xkICYgKCgxIDw8IG9wKSAtIDEpKV07XG4gICAgICAgIGNvbnRpbnVlIGRvbGVuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAob3AgJiAzMikgeyAgICAgICAgICAgICAgICAgICAgIC8qIGVuZC1vZi1ibG9jayAqL1xuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xcblwiKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFO1xuICAgICAgICBicmVhayB0b3A7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWsgdG9wO1xuICAgICAgfVxuXG4gICAgICBicmVhazsgLy8gbmVlZCB0byBlbXVsYXRlIGdvdG8gdmlhIFwiY29udGludWVcIlxuICAgIH1cbiAgfSB3aGlsZSAoX2luIDwgbGFzdCAmJiBfb3V0IDwgZW5kKTtcblxuICAvKiByZXR1cm4gdW51c2VkIGJ5dGVzIChvbiBlbnRyeSwgYml0cyA8IDgsIHNvIGluIHdvbid0IGdvIHRvbyBmYXIgYmFjaykgKi9cbiAgbGVuID0gYml0cyA+PiAzO1xuICBfaW4gLT0gbGVuO1xuICBiaXRzIC09IGxlbiA8PCAzO1xuICBob2xkICY9ICgxIDw8IGJpdHMpIC0gMTtcblxuICAvKiB1cGRhdGUgc3RhdGUgYW5kIHJldHVybiAqL1xuICBzdHJtLm5leHRfaW4gPSBfaW47XG4gIHN0cm0ubmV4dF9vdXQgPSBfb3V0O1xuICBzdHJtLmF2YWlsX2luID0gKF9pbiA8IGxhc3QgPyA1ICsgKGxhc3QgLSBfaW4pIDogNSAtIChfaW4gLSBsYXN0KSk7XG4gIHN0cm0uYXZhaWxfb3V0ID0gKF9vdXQgPCBlbmQgPyAyNTcgKyAoZW5kIC0gX291dCkgOiAyNTcgLSAoX291dCAtIGVuZCkpO1xuICBzdGF0ZS5ob2xkID0gaG9sZDtcbiAgc3RhdGUuYml0cyA9IGJpdHM7XG4gIHJldHVybjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cblxudmFyIHV0aWxzICAgICAgICAgPSByZXF1aXJlKCcuLi91dGlscy9jb21tb24nKTtcbnZhciBhZGxlcjMyICAgICAgID0gcmVxdWlyZSgnLi9hZGxlcjMyJyk7XG52YXIgY3JjMzIgICAgICAgICA9IHJlcXVpcmUoJy4vY3JjMzInKTtcbnZhciBpbmZsYXRlX2Zhc3QgID0gcmVxdWlyZSgnLi9pbmZmYXN0Jyk7XG52YXIgaW5mbGF0ZV90YWJsZSA9IHJlcXVpcmUoJy4vaW5mdHJlZXMnKTtcblxudmFyIENPREVTID0gMDtcbnZhciBMRU5TID0gMTtcbnZhciBESVNUUyA9IDI7XG5cbi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbi8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi9cbi8vdmFyIFpfTk9fRkxVU0ggICAgICA9IDA7XG4vL3ZhciBaX1BBUlRJQUxfRkxVU0ggPSAxO1xuLy92YXIgWl9TWU5DX0ZMVVNIICAgID0gMjtcbi8vdmFyIFpfRlVMTF9GTFVTSCAgICA9IDM7XG52YXIgWl9GSU5JU0ggICAgICAgID0gNDtcbnZhciBaX0JMT0NLICAgICAgICAgPSA1O1xudmFyIFpfVFJFRVMgICAgICAgICA9IDY7XG5cblxuLyogUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlIHZhbHVlc1xuICogYXJlIGVycm9ycywgcG9zaXRpdmUgdmFsdWVzIGFyZSB1c2VkIGZvciBzcGVjaWFsIGJ1dCBub3JtYWwgZXZlbnRzLlxuICovXG52YXIgWl9PSyAgICAgICAgICAgID0gMDtcbnZhciBaX1NUUkVBTV9FTkQgICAgPSAxO1xudmFyIFpfTkVFRF9ESUNUICAgICA9IDI7XG4vL3ZhciBaX0VSUk5PICAgICAgICAgPSAtMTtcbnZhciBaX1NUUkVBTV9FUlJPUiAgPSAtMjtcbnZhciBaX0RBVEFfRVJST1IgICAgPSAtMztcbnZhciBaX01FTV9FUlJPUiAgICAgPSAtNDtcbnZhciBaX0JVRl9FUlJPUiAgICAgPSAtNTtcbi8vdmFyIFpfVkVSU0lPTl9FUlJPUiA9IC02O1xuXG4vKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKi9cbnZhciBaX0RFRkxBVEVEICA9IDg7XG5cblxuLyogU1RBVEVTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cblxudmFyICAgIEhFQUQgPSAxOyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBtYWdpYyBoZWFkZXIgKi9cbnZhciAgICBGTEFHUyA9IDI7ICAgICAgLyogaTogd2FpdGluZyBmb3IgbWV0aG9kIGFuZCBmbGFncyAoZ3ppcCkgKi9cbnZhciAgICBUSU1FID0gMzsgICAgICAgLyogaTogd2FpdGluZyBmb3IgbW9kaWZpY2F0aW9uIHRpbWUgKGd6aXApICovXG52YXIgICAgT1MgPSA0OyAgICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGV4dHJhIGZsYWdzIGFuZCBvcGVyYXRpbmcgc3lzdGVtIChnemlwKSAqL1xudmFyICAgIEVYTEVOID0gNTsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBsZW5ndGggKGd6aXApICovXG52YXIgICAgRVhUUkEgPSA2OyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGV4dHJhIGJ5dGVzIChnemlwKSAqL1xudmFyICAgIE5BTUUgPSA3OyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBlbmQgb2YgZmlsZSBuYW1lIChnemlwKSAqL1xudmFyICAgIENPTU1FTlQgPSA4OyAgICAvKiBpOiB3YWl0aW5nIGZvciBlbmQgb2YgY29tbWVudCAoZ3ppcCkgKi9cbnZhciAgICBIQ1JDID0gOTsgICAgICAgLyogaTogd2FpdGluZyBmb3IgaGVhZGVyIGNyYyAoZ3ppcCkgKi9cbnZhciAgICBESUNUSUQgPSAxMDsgICAgLyogaTogd2FpdGluZyBmb3IgZGljdGlvbmFyeSBjaGVjayB2YWx1ZSAqL1xudmFyICAgIERJQ1QgPSAxMTsgICAgICAvKiB3YWl0aW5nIGZvciBpbmZsYXRlU2V0RGljdGlvbmFyeSgpIGNhbGwgKi9cbnZhciAgICAgICAgVFlQRSA9IDEyOyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIHR5cGUgYml0cywgaW5jbHVkaW5nIGxhc3QtZmxhZyBiaXQgKi9cbnZhciAgICAgICAgVFlQRURPID0gMTM7ICAgIC8qIGk6IHNhbWUsIGJ1dCBza2lwIGNoZWNrIHRvIGV4aXQgaW5mbGF0ZSBvbiBuZXcgYmxvY2sgKi9cbnZhciAgICAgICAgU1RPUkVEID0gMTQ7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIHN0b3JlZCBzaXplIChsZW5ndGggYW5kIGNvbXBsZW1lbnQpICovXG52YXIgICAgICAgIENPUFlfID0gMTU7ICAgICAvKiBpL286IHNhbWUgYXMgQ09QWSBiZWxvdywgYnV0IG9ubHkgZmlyc3QgdGltZSBpbiAqL1xudmFyICAgICAgICBDT1BZID0gMTY7ICAgICAgLyogaS9vOiB3YWl0aW5nIGZvciBpbnB1dCBvciBvdXRwdXQgdG8gY29weSBzdG9yZWQgYmxvY2sgKi9cbnZhciAgICAgICAgVEFCTEUgPSAxNzsgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGR5bmFtaWMgYmxvY2sgdGFibGUgbGVuZ3RocyAqL1xudmFyICAgICAgICBMRU5MRU5TID0gMTg7ICAgLyogaTogd2FpdGluZyBmb3IgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzICovXG52YXIgICAgICAgIENPREVMRU5TID0gMTk7ICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGgvbGl0IGFuZCBkaXN0YW5jZSBjb2RlIGxlbmd0aHMgKi9cbnZhciAgICAgICAgICAgIExFTl8gPSAyMDsgICAgICAvKiBpOiBzYW1lIGFzIExFTiBiZWxvdywgYnV0IG9ubHkgZmlyc3QgdGltZSBpbiAqL1xudmFyICAgICAgICAgICAgTEVOID0gMjE7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGxlbmd0aC9saXQvZW9iIGNvZGUgKi9cbnZhciAgICAgICAgICAgIExFTkVYVCA9IDIyOyAgICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGggZXh0cmEgYml0cyAqL1xudmFyICAgICAgICAgICAgRElTVCA9IDIzOyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGNvZGUgKi9cbnZhciAgICAgICAgICAgIERJU1RFWFQgPSAyNDsgICAvKiBpOiB3YWl0aW5nIGZvciBkaXN0YW5jZSBleHRyYSBiaXRzICovXG52YXIgICAgICAgICAgICBNQVRDSCA9IDI1OyAgICAgLyogbzogd2FpdGluZyBmb3Igb3V0cHV0IHNwYWNlIHRvIGNvcHkgc3RyaW5nICovXG52YXIgICAgICAgICAgICBMSVQgPSAyNjsgICAgICAgLyogbzogd2FpdGluZyBmb3Igb3V0cHV0IHNwYWNlIHRvIHdyaXRlIGxpdGVyYWwgKi9cbnZhciAgICBDSEVDSyA9IDI3OyAgICAgLyogaTogd2FpdGluZyBmb3IgMzItYml0IGNoZWNrIHZhbHVlICovXG52YXIgICAgTEVOR1RIID0gMjg7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIDMyLWJpdCBsZW5ndGggKGd6aXApICovXG52YXIgICAgRE9ORSA9IDI5OyAgICAgIC8qIGZpbmlzaGVkIGNoZWNrLCBkb25lIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovXG52YXIgICAgQkFEID0gMzA7ICAgICAgIC8qIGdvdCBhIGRhdGEgZXJyb3IgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi9cbnZhciAgICBNRU0gPSAzMTsgICAgICAgLyogZ290IGFuIGluZmxhdGUoKSBtZW1vcnkgZXJyb3IgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi9cbnZhciAgICBTWU5DID0gMzI7ICAgICAgLyogbG9va2luZyBmb3Igc3luY2hyb25pemF0aW9uIGJ5dGVzIHRvIHJlc3RhcnQgaW5mbGF0ZSgpICovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cblxuXG52YXIgRU5PVUdIX0xFTlMgPSA4NTI7XG52YXIgRU5PVUdIX0RJU1RTID0gNTkyO1xuLy92YXIgRU5PVUdIID0gIChFTk9VR0hfTEVOUytFTk9VR0hfRElTVFMpO1xuXG52YXIgTUFYX1dCSVRTID0gMTU7XG4vKiAzMksgTFo3NyB3aW5kb3cgKi9cbnZhciBERUZfV0JJVFMgPSBNQVhfV0JJVFM7XG5cblxuZnVuY3Rpb24genN3YXAzMihxKSB7XG4gIHJldHVybiAgKCgocSA+Pj4gMjQpICYgMHhmZikgK1xuICAgICAgICAgICgocSA+Pj4gOCkgJiAweGZmMDApICtcbiAgICAgICAgICAoKHEgJiAweGZmMDApIDw8IDgpICtcbiAgICAgICAgICAoKHEgJiAweGZmKSA8PCAyNCkpO1xufVxuXG5cbmZ1bmN0aW9uIEluZmxhdGVTdGF0ZSgpIHtcbiAgdGhpcy5tb2RlID0gMDsgICAgICAgICAgICAgLyogY3VycmVudCBpbmZsYXRlIG1vZGUgKi9cbiAgdGhpcy5sYXN0ID0gZmFsc2U7ICAgICAgICAgIC8qIHRydWUgaWYgcHJvY2Vzc2luZyBsYXN0IGJsb2NrICovXG4gIHRoaXMud3JhcCA9IDA7ICAgICAgICAgICAgICAvKiBiaXQgMCB0cnVlIGZvciB6bGliLCBiaXQgMSB0cnVlIGZvciBnemlwICovXG4gIHRoaXMuaGF2ZWRpY3QgPSBmYWxzZTsgICAgICAvKiB0cnVlIGlmIGRpY3Rpb25hcnkgcHJvdmlkZWQgKi9cbiAgdGhpcy5mbGFncyA9IDA7ICAgICAgICAgICAgIC8qIGd6aXAgaGVhZGVyIG1ldGhvZCBhbmQgZmxhZ3MgKDAgaWYgemxpYikgKi9cbiAgdGhpcy5kbWF4ID0gMDsgICAgICAgICAgICAgIC8qIHpsaWIgaGVhZGVyIG1heCBkaXN0YW5jZSAoSU5GTEFURV9TVFJJQ1QpICovXG4gIHRoaXMuY2hlY2sgPSAwOyAgICAgICAgICAgICAvKiBwcm90ZWN0ZWQgY29weSBvZiBjaGVjayB2YWx1ZSAqL1xuICB0aGlzLnRvdGFsID0gMDsgICAgICAgICAgICAgLyogcHJvdGVjdGVkIGNvcHkgb2Ygb3V0cHV0IGNvdW50ICovXG4gIC8vIFRPRE86IG1heSBiZSB7fVxuICB0aGlzLmhlYWQgPSBudWxsOyAgICAgICAgICAgLyogd2hlcmUgdG8gc2F2ZSBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiAqL1xuXG4gIC8qIHNsaWRpbmcgd2luZG93ICovXG4gIHRoaXMud2JpdHMgPSAwOyAgICAgICAgICAgICAvKiBsb2cgYmFzZSAyIG9mIHJlcXVlc3RlZCB3aW5kb3cgc2l6ZSAqL1xuICB0aGlzLndzaXplID0gMDsgICAgICAgICAgICAgLyogd2luZG93IHNpemUgb3IgemVybyBpZiBub3QgdXNpbmcgd2luZG93ICovXG4gIHRoaXMud2hhdmUgPSAwOyAgICAgICAgICAgICAvKiB2YWxpZCBieXRlcyBpbiB0aGUgd2luZG93ICovXG4gIHRoaXMud25leHQgPSAwOyAgICAgICAgICAgICAvKiB3aW5kb3cgd3JpdGUgaW5kZXggKi9cbiAgdGhpcy53aW5kb3cgPSBudWxsOyAgICAgICAgIC8qIGFsbG9jYXRlZCBzbGlkaW5nIHdpbmRvdywgaWYgbmVlZGVkICovXG5cbiAgLyogYml0IGFjY3VtdWxhdG9yICovXG4gIHRoaXMuaG9sZCA9IDA7ICAgICAgICAgICAgICAvKiBpbnB1dCBiaXQgYWNjdW11bGF0b3IgKi9cbiAgdGhpcy5iaXRzID0gMDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBiaXRzIGluIFwiaW5cIiAqL1xuXG4gIC8qIGZvciBzdHJpbmcgYW5kIHN0b3JlZCBibG9jayBjb3B5aW5nICovXG4gIHRoaXMubGVuZ3RoID0gMDsgICAgICAgICAgICAvKiBsaXRlcmFsIG9yIGxlbmd0aCBvZiBkYXRhIHRvIGNvcHkgKi9cbiAgdGhpcy5vZmZzZXQgPSAwOyAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhY2sgdG8gY29weSBzdHJpbmcgZnJvbSAqL1xuXG4gIC8qIGZvciB0YWJsZSBhbmQgY29kZSBkZWNvZGluZyAqL1xuICB0aGlzLmV4dHJhID0gMDsgICAgICAgICAgICAgLyogZXh0cmEgYml0cyBuZWVkZWQgKi9cblxuICAvKiBmaXhlZCBhbmQgZHluYW1pYyBjb2RlIHRhYmxlcyAqL1xuICB0aGlzLmxlbmNvZGUgPSBudWxsOyAgICAgICAgICAvKiBzdGFydGluZyB0YWJsZSBmb3IgbGVuZ3RoL2xpdGVyYWwgY29kZXMgKi9cbiAgdGhpcy5kaXN0Y29kZSA9IG51bGw7ICAgICAgICAgLyogc3RhcnRpbmcgdGFibGUgZm9yIGRpc3RhbmNlIGNvZGVzICovXG4gIHRoaXMubGVuYml0cyA9IDA7ICAgICAgICAgICAvKiBpbmRleCBiaXRzIGZvciBsZW5jb2RlICovXG4gIHRoaXMuZGlzdGJpdHMgPSAwOyAgICAgICAgICAvKiBpbmRleCBiaXRzIGZvciBkaXN0Y29kZSAqL1xuXG4gIC8qIGR5bmFtaWMgdGFibGUgYnVpbGRpbmcgKi9cbiAgdGhpcy5uY29kZSA9IDA7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb2RlIGxlbmd0aCBjb2RlIGxlbmd0aHMgKi9cbiAgdGhpcy5ubGVuID0gMDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBsZW5ndGggY29kZSBsZW5ndGhzICovXG4gIHRoaXMubmRpc3QgPSAwOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZSBsZW5ndGhzICovXG4gIHRoaXMuaGF2ZSA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZSBsZW5ndGhzIGluIGxlbnNbXSAqL1xuICB0aGlzLm5leHQgPSBudWxsOyAgICAgICAgICAgICAgLyogbmV4dCBhdmFpbGFibGUgc3BhY2UgaW4gY29kZXNbXSAqL1xuXG4gIHRoaXMubGVucyA9IG5ldyB1dGlscy5CdWYxNigzMjApOyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgY29kZSBsZW5ndGhzICovXG4gIHRoaXMud29yayA9IG5ldyB1dGlscy5CdWYxNigyODgpOyAvKiB3b3JrIGFyZWEgZm9yIGNvZGUgdGFibGUgYnVpbGRpbmcgKi9cblxuICAvKlxuICAgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHBvaW50ZXJzIGluIGpzLCB3ZSB1c2UgbGVuY29kZSBhbmQgZGlzdGNvZGUgZGlyZWN0bHlcbiAgIGFzIGJ1ZmZlcnMgc28gd2UgZG9uJ3QgbmVlZCBjb2Rlc1xuICAqL1xuICAvL3RoaXMuY29kZXMgPSBuZXcgdXRpbHMuQnVmMzIoRU5PVUdIKTsgICAgICAgLyogc3BhY2UgZm9yIGNvZGUgdGFibGVzICovXG4gIHRoaXMubGVuZHluID0gbnVsbDsgICAgICAgICAgICAgIC8qIGR5bmFtaWMgdGFibGUgZm9yIGxlbmd0aC9saXRlcmFsIGNvZGVzIChKUyBzcGVjaWZpYykgKi9cbiAgdGhpcy5kaXN0ZHluID0gbnVsbDsgICAgICAgICAgICAgLyogZHluYW1pYyB0YWJsZSBmb3IgZGlzdGFuY2UgY29kZXMgKEpTIHNwZWNpZmljKSAqL1xuICB0aGlzLnNhbmUgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBpZiBmYWxzZSwgYWxsb3cgaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyICovXG4gIHRoaXMuYmFjayA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGJpdHMgYmFjayBvZiBsYXN0IHVucHJvY2Vzc2VkIGxlbmd0aC9saXQgKi9cbiAgdGhpcy53YXMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbCBsZW5ndGggb2YgbWF0Y2ggKi9cbn1cblxuZnVuY3Rpb24gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKSB7XG4gIHZhciBzdGF0ZTtcblxuICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9XG4gIHN0YXRlID0gc3RybS5zdGF0ZTtcbiAgc3RybS50b3RhbF9pbiA9IHN0cm0udG90YWxfb3V0ID0gc3RhdGUudG90YWwgPSAwO1xuICBzdHJtLm1zZyA9ICcnOyAvKlpfTlVMTCovXG4gIGlmIChzdGF0ZS53cmFwKSB7ICAgICAgIC8qIHRvIHN1cHBvcnQgaWxsLWNvbmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi9cbiAgICBzdHJtLmFkbGVyID0gc3RhdGUud3JhcCAmIDE7XG4gIH1cbiAgc3RhdGUubW9kZSA9IEhFQUQ7XG4gIHN0YXRlLmxhc3QgPSAwO1xuICBzdGF0ZS5oYXZlZGljdCA9IDA7XG4gIHN0YXRlLmRtYXggPSAzMjc2ODtcbiAgc3RhdGUuaGVhZCA9IG51bGwvKlpfTlVMTCovO1xuICBzdGF0ZS5ob2xkID0gMDtcbiAgc3RhdGUuYml0cyA9IDA7XG4gIC8vc3RhdGUubGVuY29kZSA9IHN0YXRlLmRpc3Rjb2RlID0gc3RhdGUubmV4dCA9IHN0YXRlLmNvZGVzO1xuICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVuZHluID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSF9MRU5TKTtcbiAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSF9ESVNUUyk7XG5cbiAgc3RhdGUuc2FuZSA9IDE7XG4gIHN0YXRlLmJhY2sgPSAtMTtcbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiByZXNldFxcblwiKSk7XG4gIHJldHVybiBaX09LO1xufVxuXG5mdW5jdGlvbiBpbmZsYXRlUmVzZXQoc3RybSkge1xuICB2YXIgc3RhdGU7XG5cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBzdGF0ZSA9IHN0cm0uc3RhdGU7XG4gIHN0YXRlLndzaXplID0gMDtcbiAgc3RhdGUud2hhdmUgPSAwO1xuICBzdGF0ZS53bmV4dCA9IDA7XG4gIHJldHVybiBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pO1xuXG59XG5cbmZ1bmN0aW9uIGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cykge1xuICB2YXIgd3JhcDtcbiAgdmFyIHN0YXRlO1xuXG4gIC8qIGdldCB0aGUgc3RhdGUgKi9cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBzdGF0ZSA9IHN0cm0uc3RhdGU7XG5cbiAgLyogZXh0cmFjdCB3cmFwIHJlcXVlc3QgZnJvbSB3aW5kb3dCaXRzIHBhcmFtZXRlciAqL1xuICBpZiAod2luZG93Qml0cyA8IDApIHtcbiAgICB3cmFwID0gMDtcbiAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7XG4gIH1cbiAgZWxzZSB7XG4gICAgd3JhcCA9ICh3aW5kb3dCaXRzID4+IDQpICsgMTtcbiAgICBpZiAod2luZG93Qml0cyA8IDQ4KSB7XG4gICAgICB3aW5kb3dCaXRzICY9IDE1O1xuICAgIH1cbiAgfVxuXG4gIC8qIHNldCBudW1iZXIgb2Ygd2luZG93IGJpdHMsIGZyZWUgd2luZG93IGlmIGRpZmZlcmVudCAqL1xuICBpZiAod2luZG93Qml0cyAmJiAod2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSkge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuICBpZiAoc3RhdGUud2luZG93ICE9PSBudWxsICYmIHN0YXRlLndiaXRzICE9PSB3aW5kb3dCaXRzKSB7XG4gICAgc3RhdGUud2luZG93ID0gbnVsbDtcbiAgfVxuXG4gIC8qIHVwZGF0ZSBzdGF0ZSBhbmQgcmVzZXQgdGhlIHJlc3Qgb2YgaXQgKi9cbiAgc3RhdGUud3JhcCA9IHdyYXA7XG4gIHN0YXRlLndiaXRzID0gd2luZG93Qml0cztcbiAgcmV0dXJuIGluZmxhdGVSZXNldChzdHJtKTtcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZUluaXQyKHN0cm0sIHdpbmRvd0JpdHMpIHtcbiAgdmFyIHJldDtcbiAgdmFyIHN0YXRlO1xuXG4gIGlmICghc3RybSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH1cbiAgLy9zdHJtLm1zZyA9IFpfTlVMTDsgICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJuIGFuIGVycm9yICovXG5cbiAgc3RhdGUgPSBuZXcgSW5mbGF0ZVN0YXRlKCk7XG5cbiAgLy9pZiAoc3RhdGUgPT09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SO1xuICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6IGFsbG9jYXRlZFxcblwiKSk7XG4gIHN0cm0uc3RhdGUgPSBzdGF0ZTtcbiAgc3RhdGUud2luZG93ID0gbnVsbC8qWl9OVUxMKi87XG4gIHJldCA9IGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cyk7XG4gIGlmIChyZXQgIT09IFpfT0spIHtcbiAgICBzdHJtLnN0YXRlID0gbnVsbC8qWl9OVUxMKi87XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZUluaXQoc3RybSkge1xuICByZXR1cm4gaW5mbGF0ZUluaXQyKHN0cm0sIERFRl9XQklUUyk7XG59XG5cblxuLypcbiBSZXR1cm4gc3RhdGUgd2l0aCBsZW5ndGggYW5kIGRpc3RhbmNlIGRlY29kaW5nIHRhYmxlcyBhbmQgaW5kZXggc2l6ZXMgc2V0IHRvXG4gZml4ZWQgY29kZSBkZWNvZGluZy4gIE5vcm1hbGx5IHRoaXMgcmV0dXJucyBmaXhlZCB0YWJsZXMgZnJvbSBpbmZmaXhlZC5oLlxuIElmIEJVSUxERklYRUQgaXMgZGVmaW5lZCwgdGhlbiBpbnN0ZWFkIHRoaXMgcm91dGluZSBidWlsZHMgdGhlIHRhYmxlcyB0aGVcbiBmaXJzdCB0aW1lIGl0J3MgY2FsbGVkLCBhbmQgcmV0dXJucyB0aG9zZSB0YWJsZXMgdGhlIGZpcnN0IHRpbWUgYW5kXG4gdGhlcmVhZnRlci4gIFRoaXMgcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUgY29kZSBieSBhYm91dCAySyBieXRlcywgaW5cbiBleGNoYW5nZSBmb3IgYSBsaXR0bGUgZXhlY3V0aW9uIHRpbWUuICBIb3dldmVyLCBCVUlMREZJWEVEIHNob3VsZCBub3QgYmVcbiB1c2VkIGZvciB0aHJlYWRlZCBhcHBsaWNhdGlvbnMsIHNpbmNlIHRoZSByZXdyaXRpbmcgb2YgdGhlIHRhYmxlcyBhbmQgdmlyZ2luXG4gbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS5cbiAqL1xudmFyIHZpcmdpbiA9IHRydWU7XG5cbnZhciBsZW5maXgsIGRpc3RmaXg7IC8vIFdlIGhhdmUgbm8gcG9pbnRlcnMgaW4gSlMsIHNvIGtlZXAgdGFibGVzIHNlcGFyYXRlXG5cbmZ1bmN0aW9uIGZpeGVkdGFibGVzKHN0YXRlKSB7XG4gIC8qIGJ1aWxkIGZpeGVkIGh1ZmZtYW4gdGFibGVzIGlmIGZpcnN0IGNhbGwgKG1heSBub3QgYmUgdGhyZWFkIHNhZmUpICovXG4gIGlmICh2aXJnaW4pIHtcbiAgICB2YXIgc3ltO1xuXG4gICAgbGVuZml4ID0gbmV3IHV0aWxzLkJ1ZjMyKDUxMik7XG4gICAgZGlzdGZpeCA9IG5ldyB1dGlscy5CdWYzMigzMik7XG5cbiAgICAvKiBsaXRlcmFsL2xlbmd0aCB0YWJsZSAqL1xuICAgIHN5bSA9IDA7XG4gICAgd2hpbGUgKHN5bSA8IDE0NCkgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDg7IH1cbiAgICB3aGlsZSAoc3ltIDwgMjU2KSB7IHN0YXRlLmxlbnNbc3ltKytdID0gOTsgfVxuICAgIHdoaWxlIChzeW0gPCAyODApIHsgc3RhdGUubGVuc1tzeW0rK10gPSA3OyB9XG4gICAgd2hpbGUgKHN5bSA8IDI4OCkgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDg7IH1cblxuICAgIGluZmxhdGVfdGFibGUoTEVOUywgIHN0YXRlLmxlbnMsIDAsIDI4OCwgbGVuZml4LCAgIDAsIHN0YXRlLndvcmssIHsgYml0czogOSB9KTtcblxuICAgIC8qIGRpc3RhbmNlIHRhYmxlICovXG4gICAgc3ltID0gMDtcbiAgICB3aGlsZSAoc3ltIDwgMzIpIHsgc3RhdGUubGVuc1tzeW0rK10gPSA1OyB9XG5cbiAgICBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS5sZW5zLCAwLCAzMiwgICBkaXN0Zml4LCAwLCBzdGF0ZS53b3JrLCB7IGJpdHM6IDUgfSk7XG5cbiAgICAvKiBkbyB0aGlzIGp1c3Qgb25jZSAqL1xuICAgIHZpcmdpbiA9IGZhbHNlO1xuICB9XG5cbiAgc3RhdGUubGVuY29kZSA9IGxlbmZpeDtcbiAgc3RhdGUubGVuYml0cyA9IDk7XG4gIHN0YXRlLmRpc3Rjb2RlID0gZGlzdGZpeDtcbiAgc3RhdGUuZGlzdGJpdHMgPSA1O1xufVxuXG5cbi8qXG4gVXBkYXRlIHRoZSB3aW5kb3cgd2l0aCB0aGUgbGFzdCB3c2l6ZSAobm9ybWFsbHkgMzJLKSBieXRlcyB3cml0dGVuIGJlZm9yZVxuIHJldHVybmluZy4gIElmIHdpbmRvdyBkb2VzIG5vdCBleGlzdCB5ZXQsIGNyZWF0ZSBpdC4gIFRoaXMgaXMgb25seSBjYWxsZWRcbiB3aGVuIGEgd2luZG93IGlzIGFscmVhZHkgaW4gdXNlLCBvciB3aGVuIG91dHB1dCBoYXMgYmVlbiB3cml0dGVuIGR1cmluZyB0aGlzXG4gaW5mbGF0ZSBjYWxsLCBidXQgdGhlIGVuZCBvZiB0aGUgZGVmbGF0ZSBzdHJlYW0gaGFzIG5vdCBiZWVuIHJlYWNoZWQgeWV0LlxuIEl0IGlzIGFsc28gY2FsbGVkIHRvIGNyZWF0ZSBhIHdpbmRvdyBmb3IgZGljdGlvbmFyeSBkYXRhIHdoZW4gYSBkaWN0aW9uYXJ5XG4gaXMgbG9hZGVkLlxuXG4gUHJvdmlkaW5nIG91dHB1dCBidWZmZXJzIGxhcmdlciB0aGFuIDMySyB0byBpbmZsYXRlKCkgc2hvdWxkIHByb3ZpZGUgYSBzcGVlZFxuIGFkdmFudGFnZSwgc2luY2Ugb25seSB0aGUgbGFzdCAzMksgb2Ygb3V0cHV0IGlzIGNvcGllZCB0byB0aGUgc2xpZGluZyB3aW5kb3dcbiB1cG9uIHJldHVybiBmcm9tIGluZmxhdGUoKSwgYW5kIHNpbmNlIGFsbCBkaXN0YW5jZXMgYWZ0ZXIgdGhlIGZpcnN0IDMySyBvZlxuIG91dHB1dCB3aWxsIGZhbGwgaW4gdGhlIG91dHB1dCBkYXRhLCBtYWtpbmcgbWF0Y2ggY29waWVzIHNpbXBsZXIgYW5kIGZhc3Rlci5cbiBUaGUgYWR2YW50YWdlIG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIHByb2Nlc3NvcidzIGRhdGEgY2FjaGVzLlxuICovXG5mdW5jdGlvbiB1cGRhdGV3aW5kb3coc3RybSwgc3JjLCBlbmQsIGNvcHkpIHtcbiAgdmFyIGRpc3Q7XG4gIHZhciBzdGF0ZSA9IHN0cm0uc3RhdGU7XG5cbiAgLyogaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBhbHJlYWR5LCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHdpbmRvdyAqL1xuICBpZiAoc3RhdGUud2luZG93ID09PSBudWxsKSB7XG4gICAgc3RhdGUud3NpemUgPSAxIDw8IHN0YXRlLndiaXRzO1xuICAgIHN0YXRlLnduZXh0ID0gMDtcbiAgICBzdGF0ZS53aGF2ZSA9IDA7XG5cbiAgICBzdGF0ZS53aW5kb3cgPSBuZXcgdXRpbHMuQnVmOChzdGF0ZS53c2l6ZSk7XG4gIH1cblxuICAvKiBjb3B5IHN0YXRlLT53c2l6ZSBvciBsZXNzIG91dHB1dCBieXRlcyBpbnRvIHRoZSBjaXJjdWxhciB3aW5kb3cgKi9cbiAgaWYgKGNvcHkgPj0gc3RhdGUud3NpemUpIHtcbiAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csIHNyYywgZW5kIC0gc3RhdGUud3NpemUsIHN0YXRlLndzaXplLCAwKTtcbiAgICBzdGF0ZS53bmV4dCA9IDA7XG4gICAgc3RhdGUud2hhdmUgPSBzdGF0ZS53c2l6ZTtcbiAgfVxuICBlbHNlIHtcbiAgICBkaXN0ID0gc3RhdGUud3NpemUgLSBzdGF0ZS53bmV4dDtcbiAgICBpZiAoZGlzdCA+IGNvcHkpIHtcbiAgICAgIGRpc3QgPSBjb3B5O1xuICAgIH1cbiAgICAvL3ptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwgZW5kIC0gY29weSwgZGlzdCk7XG4gICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUud2luZG93LCBzcmMsIGVuZCAtIGNvcHksIGRpc3QsIHN0YXRlLnduZXh0KTtcbiAgICBjb3B5IC09IGRpc3Q7XG4gICAgaWYgKGNvcHkpIHtcbiAgICAgIC8vem1lbWNweShzdGF0ZS0+d2luZG93LCBlbmQgLSBjb3B5LCBjb3B5KTtcbiAgICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdywgc3JjLCBlbmQgLSBjb3B5LCBjb3B5LCAwKTtcbiAgICAgIHN0YXRlLnduZXh0ID0gY29weTtcbiAgICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgc3RhdGUud25leHQgKz0gZGlzdDtcbiAgICAgIGlmIChzdGF0ZS53bmV4dCA9PT0gc3RhdGUud3NpemUpIHsgc3RhdGUud25leHQgPSAwOyB9XG4gICAgICBpZiAoc3RhdGUud2hhdmUgPCBzdGF0ZS53c2l6ZSkgeyBzdGF0ZS53aGF2ZSArPSBkaXN0OyB9XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBpbmZsYXRlKHN0cm0sIGZsdXNoKSB7XG4gIHZhciBzdGF0ZTtcbiAgdmFyIGlucHV0LCBvdXRwdXQ7ICAgICAgICAgIC8vIGlucHV0L291dHB1dCBidWZmZXJzXG4gIHZhciBuZXh0OyAgICAgICAgICAgICAgICAgICAvKiBuZXh0IGlucHV0IElOREVYICovXG4gIHZhciBwdXQ7ICAgICAgICAgICAgICAgICAgICAvKiBuZXh0IG91dHB1dCBJTkRFWCAqL1xuICB2YXIgaGF2ZSwgbGVmdDsgICAgICAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi9cbiAgdmFyIGhvbGQ7ICAgICAgICAgICAgICAgICAgIC8qIGJpdCBidWZmZXIgKi9cbiAgdmFyIGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqL1xuICB2YXIgX2luLCBfb3V0OyAgICAgICAgICAgICAgLyogc2F2ZSBzdGFydGluZyBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqL1xuICB2YXIgY29weTsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHN0b3JlZCBvciBtYXRjaCBieXRlcyB0byBjb3B5ICovXG4gIHZhciBmcm9tOyAgICAgICAgICAgICAgICAgICAvKiB3aGVyZSB0byBjb3B5IG1hdGNoIGJ5dGVzIGZyb20gKi9cbiAgdmFyIGZyb21fc291cmNlO1xuICB2YXIgaGVyZSA9IDA7ICAgICAgICAgICAgICAgLyogY3VycmVudCBkZWNvZGluZyB0YWJsZSBlbnRyeSAqL1xuICB2YXIgaGVyZV9iaXRzLCBoZXJlX29wLCBoZXJlX3ZhbDsgLy8gcGFrZWQgXCJoZXJlXCIgZGVub3JtYWxpemVkIChKUyBzcGVjaWZpYylcbiAgLy92YXIgbGFzdDsgICAgICAgICAgICAgICAgICAgLyogcGFyZW50IHRhYmxlIGVudHJ5ICovXG4gIHZhciBsYXN0X2JpdHMsIGxhc3Rfb3AsIGxhc3RfdmFsOyAvLyBwYWtlZCBcImxhc3RcIiBkZW5vcm1hbGl6ZWQgKEpTIHNwZWNpZmljKVxuICB2YXIgbGVuOyAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIHRvIGNvcHkgZm9yIHJlcGVhdHMsIGJpdHMgdG8gZHJvcCAqL1xuICB2YXIgcmV0OyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi9cbiAgdmFyIGhidWYgPSBuZXcgdXRpbHMuQnVmOCg0KTsgICAgLyogYnVmZmVyIGZvciBnemlwIGhlYWRlciBjcmMgY2FsY3VsYXRpb24gKi9cbiAgdmFyIG9wdHM7XG5cbiAgdmFyIG47IC8vIHRlbXBvcmFyeSB2YXIgZm9yIE5FRURfQklUU1xuXG4gIHZhciBvcmRlciA9IC8qIHBlcm11dGF0aW9uIG9mIGNvZGUgbGVuZ3RocyAqL1xuICAgIFsgMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNSBdO1xuXG5cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlIHx8ICFzdHJtLm91dHB1dCB8fFxuICAgICAgKCFzdHJtLmlucHV0ICYmIHN0cm0uYXZhaWxfaW4gIT09IDApKSB7XG4gICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SO1xuICB9XG5cbiAgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICBpZiAoc3RhdGUubW9kZSA9PT0gVFlQRSkgeyBzdGF0ZS5tb2RlID0gVFlQRURPOyB9ICAgIC8qIHNraXAgY2hlY2sgKi9cblxuXG4gIC8vLS0tIExPQUQoKSAtLS1cbiAgcHV0ID0gc3RybS5uZXh0X291dDtcbiAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7XG4gIGxlZnQgPSBzdHJtLmF2YWlsX291dDtcbiAgbmV4dCA9IHN0cm0ubmV4dF9pbjtcbiAgaW5wdXQgPSBzdHJtLmlucHV0O1xuICBoYXZlID0gc3RybS5hdmFpbF9pbjtcbiAgaG9sZCA9IHN0YXRlLmhvbGQ7XG4gIGJpdHMgPSBzdGF0ZS5iaXRzO1xuICAvLy0tLVxuXG4gIF9pbiA9IGhhdmU7XG4gIF9vdXQgPSBsZWZ0O1xuICByZXQgPSBaX09LO1xuXG4gIGluZl9sZWF2ZTogLy8gZ290byBlbXVsYXRpb25cbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoc3RhdGUubW9kZSkge1xuICAgIGNhc2UgSEVBRDpcbiAgICAgIGlmIChzdGF0ZS53cmFwID09PSAwKSB7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFRE87XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy89PT0gTkVFREJJVFMoMTYpO1xuICAgICAgd2hpbGUgKGJpdHMgPCAxNikge1xuICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgaGF2ZS0tO1xuICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgYml0cyArPSA4O1xuICAgICAgfVxuICAgICAgLy89PT0vL1xuICAgICAgaWYgKChzdGF0ZS53cmFwICYgMikgJiYgaG9sZCA9PT0gMHg4YjFmKSB7ICAvKiBnemlwIGhlYWRlciAqL1xuICAgICAgICBzdGF0ZS5jaGVjayA9IDAvKmNyYzMyKDBMLCBaX05VTEwsIDApKi87XG4gICAgICAgIC8vPT09IENSQzIoc3RhdGUuY2hlY2ssIGhvbGQpO1xuICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7XG4gICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTtcbiAgICAgICAgLy89PT0vL1xuXG4gICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgIGhvbGQgPSAwO1xuICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5tb2RlID0gRkxBR1M7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3RhdGUuZmxhZ3MgPSAwOyAgICAgICAgICAgLyogZXhwZWN0IHpsaWIgaGVhZGVyICovXG4gICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICBzdGF0ZS5oZWFkLmRvbmUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghKHN0YXRlLndyYXAgJiAxKSB8fCAgIC8qIGNoZWNrIGlmIHpsaWIgaGVhZGVyIGFsbG93ZWQgKi9cbiAgICAgICAgKCgoaG9sZCAmIDB4ZmYpLypCSVRTKDgpKi8gPDwgOCkgKyAoaG9sZCA+PiA4KSkgJSAzMSkge1xuICAgICAgICBzdHJtLm1zZyA9ICdpbmNvcnJlY3QgaGVhZGVyIGNoZWNrJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoKGhvbGQgJiAweDBmKS8qQklUUyg0KSovICE9PSBaX0RFRkxBVEVEKSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ3Vua25vd24gY29tcHJlc3Npb24gbWV0aG9kJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLy0tLSBEUk9QQklUUyg0KSAtLS0vL1xuICAgICAgaG9sZCA+Pj49IDQ7XG4gICAgICBiaXRzIC09IDQ7XG4gICAgICAvLy0tLS8vXG4gICAgICBsZW4gPSAoaG9sZCAmIDB4MGYpLypCSVRTKDQpKi8gKyA4O1xuICAgICAgaWYgKHN0YXRlLndiaXRzID09PSAwKSB7XG4gICAgICAgIHN0YXRlLndiaXRzID0gbGVuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAobGVuID4gc3RhdGUud2JpdHMpIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCB3aW5kb3cgc2l6ZSc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3RhdGUuZG1heCA9IDEgPDwgbGVuO1xuICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgIHpsaWIgaGVhZGVyIG9rXFxuXCIpKTtcbiAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDEvKmFkbGVyMzIoMEwsIFpfTlVMTCwgMCkqLztcbiAgICAgIHN0YXRlLm1vZGUgPSBob2xkICYgMHgyMDAgPyBESUNUSUQgOiBUWVBFO1xuICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgIGhvbGQgPSAwO1xuICAgICAgYml0cyA9IDA7XG4gICAgICAvLz09PS8vXG4gICAgICBicmVhaztcbiAgICBjYXNlIEZMQUdTOlxuICAgICAgLy89PT0gTkVFREJJVFMoMTYpOyAqL1xuICAgICAgd2hpbGUgKGJpdHMgPCAxNikge1xuICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgaGF2ZS0tO1xuICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgYml0cyArPSA4O1xuICAgICAgfVxuICAgICAgLy89PT0vL1xuICAgICAgc3RhdGUuZmxhZ3MgPSBob2xkO1xuICAgICAgaWYgKChzdGF0ZS5mbGFncyAmIDB4ZmYpICE9PSBaX0RFRkxBVEVEKSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ3Vua25vd24gY29tcHJlc3Npb24gbWV0aG9kJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweGUwMDApIHtcbiAgICAgICAgc3RybS5tc2cgPSAndW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0JztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICBzdGF0ZS5oZWFkLnRleHQgPSAoKGhvbGQgPj4gOCkgJiAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkge1xuICAgICAgICAvLz09PSBDUkMyKHN0YXRlLmNoZWNrLCBob2xkKTtcbiAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmO1xuICAgICAgICBoYnVmWzFdID0gKGhvbGQgPj4+IDgpICYgMHhmZjtcbiAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgIH1cbiAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICBob2xkID0gMDtcbiAgICAgIGJpdHMgPSAwO1xuICAgICAgLy89PT0vL1xuICAgICAgc3RhdGUubW9kZSA9IFRJTUU7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBUSU1FOlxuICAgICAgLy89PT0gTkVFREJJVFMoMzIpOyAqL1xuICAgICAgd2hpbGUgKGJpdHMgPCAzMikge1xuICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgaGF2ZS0tO1xuICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgYml0cyArPSA4O1xuICAgICAgfVxuICAgICAgLy89PT0vL1xuICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgc3RhdGUuaGVhZC50aW1lID0gaG9sZDtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkge1xuICAgICAgICAvLz09PSBDUkM0KHN0YXRlLmNoZWNrLCBob2xkKVxuICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7XG4gICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmO1xuICAgICAgICBoYnVmWzJdID0gKGhvbGQgPj4+IDE2KSAmIDB4ZmY7XG4gICAgICAgIGhidWZbM10gPSAoaG9sZCA+Pj4gMjQpICYgMHhmZjtcbiAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgNCwgMCk7XG4gICAgICAgIC8vPT09XG4gICAgICB9XG4gICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgaG9sZCA9IDA7XG4gICAgICBiaXRzID0gMDtcbiAgICAgIC8vPT09Ly9cbiAgICAgIHN0YXRlLm1vZGUgPSBPUztcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIE9TOlxuICAgICAgLy89PT0gTkVFREJJVFMoMTYpOyAqL1xuICAgICAgd2hpbGUgKGJpdHMgPCAxNikge1xuICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgaGF2ZS0tO1xuICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgYml0cyArPSA4O1xuICAgICAgfVxuICAgICAgLy89PT0vL1xuICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgc3RhdGUuaGVhZC54ZmxhZ3MgPSAoaG9sZCAmIDB4ZmYpO1xuICAgICAgICBzdGF0ZS5oZWFkLm9zID0gKGhvbGQgPj4gOCk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7XG4gICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjtcbiAgICAgICAgaGJ1ZlsxXSA9IChob2xkID4+PiA4KSAmIDB4ZmY7XG4gICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApO1xuICAgICAgICAvLz09PS8vXG4gICAgICB9XG4gICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgaG9sZCA9IDA7XG4gICAgICBiaXRzID0gMDtcbiAgICAgIC8vPT09Ly9cbiAgICAgIHN0YXRlLm1vZGUgPSBFWExFTjtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIEVYTEVOOlxuICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwNDAwKSB7XG4gICAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi9cbiAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5sZW5ndGggPSBob2xkO1xuICAgICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmFfbGVuID0gaG9sZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHtcbiAgICAgICAgICAvLz09PSBDUkMyKHN0YXRlLmNoZWNrLCBob2xkKTtcbiAgICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7XG4gICAgICAgICAgaGJ1ZlsxXSA9IChob2xkID4+PiA4KSAmIDB4ZmY7XG4gICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7XG4gICAgICAgICAgLy89PT0vL1xuICAgICAgICB9XG4gICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgIGhvbGQgPSAwO1xuICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgLy89PT0vL1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhID0gbnVsbC8qWl9OVUxMKi87XG4gICAgICB9XG4gICAgICBzdGF0ZS5tb2RlID0gRVhUUkE7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBFWFRSQTpcbiAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDQwMCkge1xuICAgICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoO1xuICAgICAgICBpZiAoY29weSA+IGhhdmUpIHsgY29weSA9IGhhdmU7IH1cbiAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkge1xuICAgICAgICAgICAgbGVuID0gc3RhdGUuaGVhZC5leHRyYV9sZW4gLSBzdGF0ZS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoIXN0YXRlLmhlYWQuZXh0cmEpIHtcbiAgICAgICAgICAgICAgLy8gVXNlIHVudHlwZWQgYXJyYXkgZm9yIG1vcmUgY29udmVuaWVuZCBwcm9jZXNzaW5nIGxhdGVyXG4gICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEgPSBuZXcgQXJyYXkoc3RhdGUuaGVhZC5leHRyYV9sZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmEsXG4gICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgICAvLyBleHRyYSBmaWVsZCBpcyBsaW1pdGVkIHRvIDY1NTM2IGJ5dGVzXG4gICAgICAgICAgICAgIC8vIC0gbm8gbmVlZCBmb3IgYWRkaXRpb25hbCBzaXplIGNoZWNrXG4gICAgICAgICAgICAgIGNvcHksXG4gICAgICAgICAgICAgIC8qbGVuICsgY29weSA+IHN0YXRlLmhlYWQuZXh0cmFfbWF4IC0gbGVuID8gc3RhdGUuaGVhZC5leHRyYV9tYXggOiBjb3B5LCovXG4gICAgICAgICAgICAgIGxlblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vem1lbWNweShzdGF0ZS5oZWFkLmV4dHJhICsgbGVuLCBuZXh0LFxuICAgICAgICAgICAgLy8gICAgICAgIGxlbiArIGNvcHkgPiBzdGF0ZS5oZWFkLmV4dHJhX21heCA/XG4gICAgICAgICAgICAvLyAgICAgICAgc3RhdGUuaGVhZC5leHRyYV9tYXggLSBsZW4gOiBjb3B5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7XG4gICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhhdmUgLT0gY29weTtcbiAgICAgICAgICBuZXh0ICs9IGNvcHk7XG4gICAgICAgICAgc3RhdGUubGVuZ3RoIC09IGNvcHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmxlbmd0aCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgIH1cbiAgICAgIHN0YXRlLmxlbmd0aCA9IDA7XG4gICAgICBzdGF0ZS5tb2RlID0gTkFNRTtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIE5BTUU6XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDA4MDApIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGNvcHkgPSAwO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgLy8gVE9ETzogMiBvciAxIGJ5dGVzP1xuICAgICAgICAgIGxlbiA9IGlucHV0W25leHQgKyBjb3B5KytdO1xuICAgICAgICAgIC8qIHVzZSBjb25zdGFudCBsaW1pdCBiZWNhdXNlIGluIGpzIHdlIHNob3VsZCBub3QgcHJlYWxsb2NhdGUgbWVtb3J5ICovXG4gICAgICAgICAgaWYgKHN0YXRlLmhlYWQgJiYgbGVuICYmXG4gICAgICAgICAgICAgIChzdGF0ZS5sZW5ndGggPCA2NTUzNiAvKnN0YXRlLmhlYWQubmFtZV9tYXgqLykpIHtcbiAgICAgICAgICAgIHN0YXRlLmhlYWQubmFtZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChsZW4gJiYgY29weSA8IGhhdmUpO1xuXG4gICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkge1xuICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBoYXZlIC09IGNvcHk7XG4gICAgICAgIG5leHQgKz0gY29weTtcbiAgICAgICAgaWYgKGxlbikgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgc3RhdGUuaGVhZC5uYW1lID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHN0YXRlLmxlbmd0aCA9IDA7XG4gICAgICBzdGF0ZS5tb2RlID0gQ09NTUVOVDtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIENPTU1FTlQ6XG4gICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDEwMDApIHtcbiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgIGNvcHkgPSAwO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgbGVuID0gaW5wdXRbbmV4dCArIGNvcHkrK107XG4gICAgICAgICAgLyogdXNlIGNvbnN0YW50IGxpbWl0IGJlY2F1c2UgaW4ganMgd2Ugc2hvdWxkIG5vdCBwcmVhbGxvY2F0ZSBtZW1vcnkgKi9cbiAgICAgICAgICBpZiAoc3RhdGUuaGVhZCAmJiBsZW4gJiZcbiAgICAgICAgICAgICAgKHN0YXRlLmxlbmd0aCA8IDY1NTM2IC8qc3RhdGUuaGVhZC5jb21tX21heCovKSkge1xuICAgICAgICAgICAgc3RhdGUuaGVhZC5jb21tZW50ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobGVuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGxlbiAmJiBjb3B5IDwgaGF2ZSk7XG4gICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkge1xuICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBoYXZlIC09IGNvcHk7XG4gICAgICAgIG5leHQgKz0gY29weTtcbiAgICAgICAgaWYgKGxlbikgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgc3RhdGUuaGVhZC5jb21tZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHN0YXRlLm1vZGUgPSBIQ1JDO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgSENSQzpcbiAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkge1xuICAgICAgICAvLz09PSBORUVEQklUUygxNik7ICovXG4gICAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgaWYgKGhvbGQgIT09IChzdGF0ZS5jaGVjayAmIDB4ZmZmZikpIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICdoZWFkZXIgY3JjIG1pc21hdGNoJztcbiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vPT09IElOSVRCSVRTKCk7XG4gICAgICAgIGhvbGQgPSAwO1xuICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgLy89PT0vL1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmhlYWQpIHtcbiAgICAgICAgc3RhdGUuaGVhZC5oY3JjID0gKChzdGF0ZS5mbGFncyA+PiA5KSAmIDEpO1xuICAgICAgICBzdGF0ZS5oZWFkLmRvbmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0gMDtcbiAgICAgIHN0YXRlLm1vZGUgPSBUWVBFO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBESUNUSUQ6XG4gICAgICAvLz09PSBORUVEQklUUygzMik7ICovXG4gICAgICB3aGlsZSAoYml0cyA8IDMyKSB7XG4gICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICBoYXZlLS07XG4gICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICBiaXRzICs9IDg7XG4gICAgICB9XG4gICAgICAvLz09PS8vXG4gICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSB6c3dhcDMyKGhvbGQpO1xuICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgIGhvbGQgPSAwO1xuICAgICAgYml0cyA9IDA7XG4gICAgICAvLz09PS8vXG4gICAgICBzdGF0ZS5tb2RlID0gRElDVDtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIERJQ1Q6XG4gICAgICBpZiAoc3RhdGUuaGF2ZWRpY3QgPT09IDApIHtcbiAgICAgICAgLy8tLS0gUkVTVE9SRSgpIC0tLVxuICAgICAgICBzdHJtLm5leHRfb3V0ID0gcHV0O1xuICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7XG4gICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7XG4gICAgICAgIHN0cm0uYXZhaWxfaW4gPSBoYXZlO1xuICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDtcbiAgICAgICAgc3RhdGUuYml0cyA9IGJpdHM7XG4gICAgICAgIC8vLS0tXG4gICAgICAgIHJldHVybiBaX05FRURfRElDVDtcbiAgICAgIH1cbiAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDEvKmFkbGVyMzIoMEwsIFpfTlVMTCwgMCkqLztcbiAgICAgIHN0YXRlLm1vZGUgPSBUWVBFO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgVFlQRTpcbiAgICAgIGlmIChmbHVzaCA9PT0gWl9CTE9DSyB8fCBmbHVzaCA9PT0gWl9UUkVFUykgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIFRZUEVETzpcbiAgICAgIGlmIChzdGF0ZS5sYXN0KSB7XG4gICAgICAgIC8vLS0tIEJZVEVCSVRTKCkgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IGJpdHMgJiA3O1xuICAgICAgICBiaXRzIC09IGJpdHMgJiA3O1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIHN0YXRlLm1vZGUgPSBDSEVDSztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLz09PSBORUVEQklUUygzKTsgKi9cbiAgICAgIHdoaWxlIChiaXRzIDwgMykge1xuICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgaGF2ZS0tO1xuICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgYml0cyArPSA4O1xuICAgICAgfVxuICAgICAgLy89PT0vL1xuICAgICAgc3RhdGUubGFzdCA9IChob2xkICYgMHgwMSkvKkJJVFMoMSkqLztcbiAgICAgIC8vLS0tIERST1BCSVRTKDEpIC0tLS8vXG4gICAgICBob2xkID4+Pj0gMTtcbiAgICAgIGJpdHMgLT0gMTtcbiAgICAgIC8vLS0tLy9cblxuICAgICAgc3dpdGNoICgoaG9sZCAmIDB4MDMpLypCSVRTKDIpKi8pIHtcbiAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0b3JlZCBibG9jayAqL1xuICAgICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICBzdG9yZWQgYmxvY2slc1xcblwiLFxuICAgICAgICAvLyAgICAgICAgc3RhdGUubGFzdCA/IFwiIChsYXN0KVwiIDogXCJcIikpO1xuICAgICAgICBzdGF0ZS5tb2RlID0gU1RPUkVEO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpeGVkIGJsb2NrICovXG4gICAgICAgIGZpeGVkdGFibGVzKHN0YXRlKTtcbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgZml4ZWQgY29kZXMgYmxvY2slc1xcblwiLFxuICAgICAgICAvLyAgICAgICAgc3RhdGUubGFzdCA/IFwiIChsYXN0KVwiIDogXCJcIikpO1xuICAgICAgICBzdGF0ZS5tb2RlID0gTEVOXzsgICAgICAgICAgICAgLyogZGVjb2RlIGNvZGVzICovXG4gICAgICAgIGlmIChmbHVzaCA9PT0gWl9UUkVFUykge1xuICAgICAgICAgIC8vLS0tIERST1BCSVRTKDIpIC0tLS8vXG4gICAgICAgICAgaG9sZCA+Pj49IDI7XG4gICAgICAgICAgYml0cyAtPSAyO1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICBicmVhayBpbmZfbGVhdmU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkeW5hbWljIGJsb2NrICovXG4gICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgIGR5bmFtaWMgY29kZXMgYmxvY2slc1xcblwiLFxuICAgICAgICAvLyAgICAgICAgc3RhdGUubGFzdCA/IFwiIChsYXN0KVwiIDogXCJcIikpO1xuICAgICAgICBzdGF0ZS5tb2RlID0gVEFCTEU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGJsb2NrIHR5cGUnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgfVxuICAgICAgLy8tLS0gRFJPUEJJVFMoMikgLS0tLy9cbiAgICAgIGhvbGQgPj4+PSAyO1xuICAgICAgYml0cyAtPSAyO1xuICAgICAgLy8tLS0vL1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTVE9SRUQ6XG4gICAgICAvLy0tLSBCWVRFQklUUygpIC0tLS8vIC8qIGdvIHRvIGJ5dGUgYm91bmRhcnkgKi9cbiAgICAgIGhvbGQgPj4+PSBiaXRzICYgNztcbiAgICAgIGJpdHMgLT0gYml0cyAmIDc7XG4gICAgICAvLy0tLS8vXG4gICAgICAvLz09PSBORUVEQklUUygzMik7ICovXG4gICAgICB3aGlsZSAoYml0cyA8IDMyKSB7XG4gICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICBoYXZlLS07XG4gICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICBiaXRzICs9IDg7XG4gICAgICB9XG4gICAgICAvLz09PS8vXG4gICAgICBpZiAoKGhvbGQgJiAweGZmZmYpICE9PSAoKGhvbGQgPj4+IDE2KSBeIDB4ZmZmZikpIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3Rocyc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3RhdGUubGVuZ3RoID0gaG9sZCAmIDB4ZmZmZjtcbiAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgc3RvcmVkIGxlbmd0aCAldVxcblwiLFxuICAgICAgLy8gICAgICAgIHN0YXRlLmxlbmd0aCkpO1xuICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgIGhvbGQgPSAwO1xuICAgICAgYml0cyA9IDA7XG4gICAgICAvLz09PS8vXG4gICAgICBzdGF0ZS5tb2RlID0gQ09QWV87XG4gICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBDT1BZXzpcbiAgICAgIHN0YXRlLm1vZGUgPSBDT1BZO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgQ09QWTpcbiAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7XG4gICAgICBpZiAoY29weSkge1xuICAgICAgICBpZiAoY29weSA+IGhhdmUpIHsgY29weSA9IGhhdmU7IH1cbiAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSB7IGNvcHkgPSBsZWZ0OyB9XG4gICAgICAgIGlmIChjb3B5ID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAvLy0tLSB6bWVtY3B5KHB1dCwgbmV4dCwgY29weSk7IC0tLVxuICAgICAgICB1dGlscy5hcnJheVNldChvdXRwdXQsIGlucHV0LCBuZXh0LCBjb3B5LCBwdXQpO1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIGhhdmUgLT0gY29weTtcbiAgICAgICAgbmV4dCArPSBjb3B5O1xuICAgICAgICBsZWZ0IC09IGNvcHk7XG4gICAgICAgIHB1dCArPSBjb3B5O1xuICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvL1RyYWNldigoc3RkZXJyLCBcImluZmxhdGU6ICAgICAgIHN0b3JlZCBlbmRcXG5cIikpO1xuICAgICAgc3RhdGUubW9kZSA9IFRZUEU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFRBQkxFOlxuICAgICAgLy89PT0gTkVFREJJVFMoMTQpOyAqL1xuICAgICAgd2hpbGUgKGJpdHMgPCAxNCkge1xuICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgaGF2ZS0tO1xuICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgYml0cyArPSA4O1xuICAgICAgfVxuICAgICAgLy89PT0vL1xuICAgICAgc3RhdGUubmxlbiA9IChob2xkICYgMHgxZikvKkJJVFMoNSkqLyArIDI1NztcbiAgICAgIC8vLS0tIERST1BCSVRTKDUpIC0tLS8vXG4gICAgICBob2xkID4+Pj0gNTtcbiAgICAgIGJpdHMgLT0gNTtcbiAgICAgIC8vLS0tLy9cbiAgICAgIHN0YXRlLm5kaXN0ID0gKGhvbGQgJiAweDFmKS8qQklUUyg1KSovICsgMTtcbiAgICAgIC8vLS0tIERST1BCSVRTKDUpIC0tLS8vXG4gICAgICBob2xkID4+Pj0gNTtcbiAgICAgIGJpdHMgLT0gNTtcbiAgICAgIC8vLS0tLy9cbiAgICAgIHN0YXRlLm5jb2RlID0gKGhvbGQgJiAweDBmKS8qQklUUyg0KSovICsgNDtcbiAgICAgIC8vLS0tIERST1BCSVRTKDQpIC0tLS8vXG4gICAgICBob2xkID4+Pj0gNDtcbiAgICAgIGJpdHMgLT0gNDtcbiAgICAgIC8vLS0tLy9cbi8vI2lmbmRlZiBQS1pJUF9CVUdfV09SS0FST1VORFxuICAgICAgaWYgKHN0YXRlLm5sZW4gPiAyODYgfHwgc3RhdGUubmRpc3QgPiAzMCkge1xuICAgICAgICBzdHJtLm1zZyA9ICd0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuLy8jZW5kaWZcbiAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgdGFibGUgc2l6ZXMgb2tcXG5cIikpO1xuICAgICAgc3RhdGUuaGF2ZSA9IDA7XG4gICAgICBzdGF0ZS5tb2RlID0gTEVOTEVOUztcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIExFTkxFTlM6XG4gICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IHN0YXRlLm5jb2RlKSB7XG4gICAgICAgIC8vPT09IE5FRURCSVRTKDMpO1xuICAgICAgICB3aGlsZSAoYml0cyA8IDMpIHtcbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXSA9IChob2xkICYgMHgwNyk7Ly9CSVRTKDMpO1xuICAgICAgICAvLy0tLSBEUk9QQklUUygzKSAtLS0vL1xuICAgICAgICBob2xkID4+Pj0gMztcbiAgICAgICAgYml0cyAtPSAzO1xuICAgICAgICAvLy0tLS8vXG4gICAgICB9XG4gICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IDE5KSB7XG4gICAgICAgIHN0YXRlLmxlbnNbb3JkZXJbc3RhdGUuaGF2ZSsrXV0gPSAwO1xuICAgICAgfVxuICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC5cbiAgICAgIC8vc3RhdGUubmV4dCA9IHN0YXRlLmNvZGVzO1xuICAgICAgLy9zdGF0ZS5sZW5jb2RlID0gc3RhdGUubmV4dDtcbiAgICAgIC8vIFN3aXRjaCB0byB1c2UgZHluYW1pYyB0YWJsZVxuICAgICAgc3RhdGUubGVuY29kZSA9IHN0YXRlLmxlbmR5bjtcbiAgICAgIHN0YXRlLmxlbmJpdHMgPSA3O1xuXG4gICAgICBvcHRzID0geyBiaXRzOiBzdGF0ZS5sZW5iaXRzIH07XG4gICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKENPREVTLCBzdGF0ZS5sZW5zLCAwLCAxOSwgc3RhdGUubGVuY29kZSwgMCwgc3RhdGUud29yaywgb3B0cyk7XG4gICAgICBzdGF0ZS5sZW5iaXRzID0gb3B0cy5iaXRzO1xuXG4gICAgICBpZiAocmV0KSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgY29kZSBsZW5ndGhzIHNldCc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICBjb2RlIGxlbmd0aHMgb2tcXG5cIikpO1xuICAgICAgc3RhdGUuaGF2ZSA9IDA7XG4gICAgICBzdGF0ZS5tb2RlID0gQ09ERUxFTlM7XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBDT0RFTEVOUzpcbiAgICAgIHdoaWxlIChzdGF0ZS5oYXZlIDwgc3RhdGUubmxlbiArIHN0YXRlLm5kaXN0KSB7XG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtob2xkICYgKCgxIDw8IHN0YXRlLmxlbmJpdHMpIC0gMSldOy8qQklUUyhzdGF0ZS5sZW5iaXRzKSovXG4gICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmO1xuICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDB4ZmZmZjtcblxuICAgICAgICAgIGlmICgoaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAtLS0vL1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICB9XG4gICAgICAgIGlmIChoZXJlX3ZhbCA8IDE2KSB7XG4gICAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7XG4gICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICAgIHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSsrXSA9IGhlcmVfdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChoZXJlX3ZhbCA9PT0gMTYpIHtcbiAgICAgICAgICAgIC8vPT09IE5FRURCSVRTKGhlcmUuYml0cyArIDIpO1xuICAgICAgICAgICAgbiA9IGhlcmVfYml0cyArIDI7XG4gICAgICAgICAgICB3aGlsZSAoYml0cyA8IG4pIHtcbiAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vPT09Ly9cbiAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy9cbiAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7XG4gICAgICAgICAgICBiaXRzIC09IGhlcmVfYml0cztcbiAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlID09PSAwKSB7XG4gICAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgYml0IGxlbmd0aCByZXBlYXQnO1xuICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxlbiA9IHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSAtIDFdO1xuICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDB4MDMpOy8vQklUUygyKTtcbiAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKDIpIC0tLS8vXG4gICAgICAgICAgICBob2xkID4+Pj0gMjtcbiAgICAgICAgICAgIGJpdHMgLT0gMjtcbiAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaGVyZV92YWwgPT09IDE3KSB7XG4gICAgICAgICAgICAvLz09PSBORUVEQklUUyhoZXJlLmJpdHMgKyAzKTtcbiAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyAzO1xuICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vXG4gICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgICBsZW4gPSAwO1xuICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDB4MDcpOy8vQklUUygzKTtcbiAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKDMpIC0tLS8vXG4gICAgICAgICAgICBob2xkID4+Pj0gMztcbiAgICAgICAgICAgIGJpdHMgLT0gMztcbiAgICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLz09PSBORUVEQklUUyhoZXJlLmJpdHMgKyA3KTtcbiAgICAgICAgICAgIG4gPSBoZXJlX2JpdHMgKyA3O1xuICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLz09PS8vXG4gICAgICAgICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vXG4gICAgICAgICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgICBsZW4gPSAwO1xuICAgICAgICAgICAgY29weSA9IDExICsgKGhvbGQgJiAweDdmKTsvL0JJVFMoNyk7XG4gICAgICAgICAgICAvLy0tLSBEUk9QQklUUyg3KSAtLS0vL1xuICAgICAgICAgICAgaG9sZCA+Pj49IDc7XG4gICAgICAgICAgICBiaXRzIC09IDc7XG4gICAgICAgICAgICAvLy0tLS8vXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0ZS5oYXZlICsgY29weSA+IHN0YXRlLm5sZW4gKyBzdGF0ZS5uZGlzdCkge1xuICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCc7XG4gICAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChjb3B5LS0pIHtcbiAgICAgICAgICAgIHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSsrXSA9IGxlbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogaGFuZGxlIGVycm9yIGJyZWFrcyBpbiB3aGlsZSAqL1xuICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IEJBRCkgeyBicmVhazsgfVxuXG4gICAgICAvKiBjaGVjayBmb3IgZW5kLW9mLWJsb2NrIGNvZGUgKGJldHRlciBoYXZlIG9uZSkgKi9cbiAgICAgIGlmIChzdGF0ZS5sZW5zWzI1Nl0gPT09IDApIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8qIGJ1aWxkIGNvZGUgdGFibGVzIC0tIG5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIGxlbmJpdHMgb3IgZGlzdGJpdHNcbiAgICAgICAgIHZhbHVlcyBoZXJlICg5IGFuZCA2KSB3aXRob3V0IHJlYWRpbmcgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmhcbiAgICAgICAgIGNvbmNlcm5pbmcgdGhlIEVOT1VHSCBjb25zdGFudHMsIHdoaWNoIGRlcGVuZCBvbiB0aG9zZSB2YWx1ZXMgKi9cbiAgICAgIHN0YXRlLmxlbmJpdHMgPSA5O1xuXG4gICAgICBvcHRzID0geyBiaXRzOiBzdGF0ZS5sZW5iaXRzIH07XG4gICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLmxlbnMsIDAsIHN0YXRlLm5sZW4sIHN0YXRlLmxlbmNvZGUsIDAsIHN0YXRlLndvcmssIG9wdHMpO1xuICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC5cbiAgICAgIC8vIHN0YXRlLm5leHRfaW5kZXggPSBvcHRzLnRhYmxlX2luZGV4O1xuICAgICAgc3RhdGUubGVuYml0cyA9IG9wdHMuYml0cztcbiAgICAgIC8vIHN0YXRlLmxlbmNvZGUgPSBzdGF0ZS5uZXh0O1xuXG4gICAgICBpZiAocmV0KSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5kaXN0Yml0cyA9IDY7XG4gICAgICAvL3N0YXRlLmRpc3Rjb2RlLmNvcHkoc3RhdGUuY29kZXMpO1xuICAgICAgLy8gU3dpdGNoIHRvIHVzZSBkeW5hbWljIHRhYmxlXG4gICAgICBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLmRpc3RkeW47XG4gICAgICBvcHRzID0geyBiaXRzOiBzdGF0ZS5kaXN0Yml0cyB9O1xuICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUubGVucywgc3RhdGUubmxlbiwgc3RhdGUubmRpc3QsIHN0YXRlLmRpc3Rjb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTtcbiAgICAgIC8vIFdlIGhhdmUgc2VwYXJhdGUgdGFibGVzICYgbm8gcG9pbnRlcnMuIDIgY29tbWVudGVkIGxpbmVzIGJlbG93IG5vdCBuZWVkZWQuXG4gICAgICAvLyBzdGF0ZS5uZXh0X2luZGV4ID0gb3B0cy50YWJsZV9pbmRleDtcbiAgICAgIHN0YXRlLmRpc3RiaXRzID0gb3B0cy5iaXRzO1xuICAgICAgLy8gc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5uZXh0O1xuXG4gICAgICBpZiAocmV0KSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2VzIHNldCc7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgJ2luZmxhdGU6ICAgICAgIGNvZGVzIG9rXFxuJykpO1xuICAgICAgc3RhdGUubW9kZSA9IExFTl87XG4gICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSBMRU5fOlxuICAgICAgc3RhdGUubW9kZSA9IExFTjtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIExFTjpcbiAgICAgIGlmIChoYXZlID49IDYgJiYgbGVmdCA+PSAyNTgpIHtcbiAgICAgICAgLy8tLS0gUkVTVE9SRSgpIC0tLVxuICAgICAgICBzdHJtLm5leHRfb3V0ID0gcHV0O1xuICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7XG4gICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7XG4gICAgICAgIHN0cm0uYXZhaWxfaW4gPSBoYXZlO1xuICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDtcbiAgICAgICAgc3RhdGUuYml0cyA9IGJpdHM7XG4gICAgICAgIC8vLS0tXG4gICAgICAgIGluZmxhdGVfZmFzdChzdHJtLCBfb3V0KTtcbiAgICAgICAgLy8tLS0gTE9BRCgpIC0tLVxuICAgICAgICBwdXQgPSBzdHJtLm5leHRfb3V0O1xuICAgICAgICBvdXRwdXQgPSBzdHJtLm91dHB1dDtcbiAgICAgICAgbGVmdCA9IHN0cm0uYXZhaWxfb3V0O1xuICAgICAgICBuZXh0ID0gc3RybS5uZXh0X2luO1xuICAgICAgICBpbnB1dCA9IHN0cm0uaW5wdXQ7XG4gICAgICAgIGhhdmUgPSBzdHJtLmF2YWlsX2luO1xuICAgICAgICBob2xkID0gc3RhdGUuaG9sZDtcbiAgICAgICAgYml0cyA9IHN0YXRlLmJpdHM7XG4gICAgICAgIC8vLS0tXG5cbiAgICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IFRZUEUpIHtcbiAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzdGF0ZS5iYWNrID0gMDtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDEpXTsgIC8qQklUUyhzdGF0ZS5sZW5iaXRzKSovXG4gICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0O1xuICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7XG4gICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDB4ZmZmZjtcblxuICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsgYnJlYWs7IH1cbiAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAtLS0vL1xuICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgaGF2ZS0tO1xuICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAvLy0tLS8vXG4gICAgICB9XG4gICAgICBpZiAoaGVyZV9vcCAmJiAoaGVyZV9vcCAmIDB4ZjApID09PSAwKSB7XG4gICAgICAgIGxhc3RfYml0cyA9IGhlcmVfYml0cztcbiAgICAgICAgbGFzdF9vcCA9IGhlcmVfb3A7XG4gICAgICAgIGxhc3RfdmFsID0gaGVyZV92YWw7XG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICBoZXJlID0gc3RhdGUubGVuY29kZVtsYXN0X3ZhbCArXG4gICAgICAgICAgICAgICAgICAoKGhvbGQgJiAoKDEgPDwgKGxhc3RfYml0cyArIGxhc3Rfb3ApKSAtIDEpKS8qQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSovID4+IGxhc3RfYml0cyldO1xuICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0O1xuICAgICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgICBpZiAoKGxhc3RfYml0cyArIGhlcmVfYml0cykgPD0gYml0cykgeyBicmVhazsgfVxuICAgICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy9cbiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgICBoYXZlLS07XG4gICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgIC8vLS0tLy9cbiAgICAgICAgfVxuICAgICAgICAvLy0tLSBEUk9QQklUUyhsYXN0LmJpdHMpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSBsYXN0X2JpdHM7XG4gICAgICAgIGJpdHMgLT0gbGFzdF9iaXRzO1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIHN0YXRlLmJhY2sgKz0gbGFzdF9iaXRzO1xuICAgICAgfVxuICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vL1xuICAgICAgaG9sZCA+Pj49IGhlcmVfYml0cztcbiAgICAgIGJpdHMgLT0gaGVyZV9iaXRzO1xuICAgICAgLy8tLS0vL1xuICAgICAgc3RhdGUuYmFjayArPSBoZXJlX2JpdHM7XG4gICAgICBzdGF0ZS5sZW5ndGggPSBoZXJlX3ZhbDtcbiAgICAgIGlmIChoZXJlX29wID09PSAwKSB7XG4gICAgICAgIC8vVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/XG4gICAgICAgIC8vICAgICAgICBcImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXFxuXCIgOlxuICAgICAgICAvLyAgICAgICAgXCJpbmZsYXRlOiAgICAgICAgIGxpdGVyYWwgMHglMDJ4XFxuXCIsIGhlcmUudmFsKSk7XG4gICAgICAgIHN0YXRlLm1vZGUgPSBMSVQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGhlcmVfb3AgJiAzMikge1xuICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xcblwiKSk7XG4gICAgICAgIHN0YXRlLmJhY2sgPSAtMTtcbiAgICAgICAgc3RhdGUubW9kZSA9IFRZUEU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKGhlcmVfb3AgJiA2NCkge1xuICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUnO1xuICAgICAgICBzdGF0ZS5tb2RlID0gQkFEO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0YXRlLmV4dHJhID0gaGVyZV9vcCAmIDE1O1xuICAgICAgc3RhdGUubW9kZSA9IExFTkVYVDtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIExFTkVYVDpcbiAgICAgIGlmIChzdGF0ZS5leHRyYSkge1xuICAgICAgICAvLz09PSBORUVEQklUUyhzdGF0ZS5leHRyYSk7XG4gICAgICAgIG4gPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIHN0YXRlLmxlbmd0aCArPSBob2xkICYgKCgxIDw8IHN0YXRlLmV4dHJhKSAtIDEpLypCSVRTKHN0YXRlLmV4dHJhKSovO1xuICAgICAgICAvLy0tLSBEUk9QQklUUyhzdGF0ZS5leHRyYSkgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhO1xuICAgICAgICBiaXRzIC09IHN0YXRlLmV4dHJhO1xuICAgICAgICAvLy0tLS8vXG4gICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7XG4gICAgICB9XG4gICAgICAvL1RyYWNldnYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxcblwiLCBzdGF0ZS5sZW5ndGgpKTtcbiAgICAgIHN0YXRlLndhcyA9IHN0YXRlLmxlbmd0aDtcbiAgICAgIHN0YXRlLm1vZGUgPSBESVNUO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgRElTVDpcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgaGVyZSA9IHN0YXRlLmRpc3Rjb2RlW2hvbGQgJiAoKDEgPDwgc3RhdGUuZGlzdGJpdHMpIC0gMSldOy8qQklUUyhzdGF0ZS5kaXN0Yml0cykqL1xuICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDtcbiAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmO1xuICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7XG5cbiAgICAgICAgaWYgKChoZXJlX2JpdHMpIDw9IGJpdHMpIHsgYnJlYWs7IH1cbiAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAtLS0vL1xuICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgICAgaGF2ZS0tO1xuICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAvLy0tLS8vXG4gICAgICB9XG4gICAgICBpZiAoKGhlcmVfb3AgJiAweGYwKSA9PT0gMCkge1xuICAgICAgICBsYXN0X2JpdHMgPSBoZXJlX2JpdHM7XG4gICAgICAgIGxhc3Rfb3AgPSBoZXJlX29wO1xuICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsO1xuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgaGVyZSA9IHN0YXRlLmRpc3Rjb2RlW2xhc3RfdmFsICtcbiAgICAgICAgICAgICAgICAgICgoaG9sZCAmICgoMSA8PCAobGFzdF9iaXRzICsgbGFzdF9vcCkpIC0gMSkpLypCSVRTKGxhc3QuYml0cyArIGxhc3Qub3ApKi8gPj4gbGFzdF9iaXRzKV07XG4gICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7XG4gICAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmO1xuICAgICAgICAgIGhlcmVfdmFsID0gaGVyZSAmIDB4ZmZmZjtcblxuICAgICAgICAgIGlmICgobGFzdF9iaXRzICsgaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9XG4gICAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAtLS0vL1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgICAgLy8tLS0vL1xuICAgICAgICB9XG4gICAgICAgIC8vLS0tIERST1BCSVRTKGxhc3QuYml0cykgLS0tLy9cbiAgICAgICAgaG9sZCA+Pj49IGxhc3RfYml0cztcbiAgICAgICAgYml0cyAtPSBsYXN0X2JpdHM7XG4gICAgICAgIC8vLS0tLy9cbiAgICAgICAgc3RhdGUuYmFjayArPSBsYXN0X2JpdHM7XG4gICAgICB9XG4gICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vXG4gICAgICBob2xkID4+Pj0gaGVyZV9iaXRzO1xuICAgICAgYml0cyAtPSBoZXJlX2JpdHM7XG4gICAgICAvLy0tLS8vXG4gICAgICBzdGF0ZS5iYWNrICs9IGhlcmVfYml0cztcbiAgICAgIGlmIChoZXJlX29wICYgNjQpIHtcbiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSBjb2RlJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzdGF0ZS5vZmZzZXQgPSBoZXJlX3ZhbDtcbiAgICAgIHN0YXRlLmV4dHJhID0gKGhlcmVfb3ApICYgMTU7XG4gICAgICBzdGF0ZS5tb2RlID0gRElTVEVYVDtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIERJU1RFWFQ6XG4gICAgICBpZiAoc3RhdGUuZXh0cmEpIHtcbiAgICAgICAgLy89PT0gTkVFREJJVFMoc3RhdGUuZXh0cmEpO1xuICAgICAgICBuID0gc3RhdGUuZXh0cmE7XG4gICAgICAgIHdoaWxlIChiaXRzIDwgbikge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBzdGF0ZS5vZmZzZXQgKz0gaG9sZCAmICgoMSA8PCBzdGF0ZS5leHRyYSkgLSAxKS8qQklUUyhzdGF0ZS5leHRyYSkqLztcbiAgICAgICAgLy8tLS0gRFJPUEJJVFMoc3RhdGUuZXh0cmEpIC0tLS8vXG4gICAgICAgIGhvbGQgPj4+PSBzdGF0ZS5leHRyYTtcbiAgICAgICAgYml0cyAtPSBzdGF0ZS5leHRyYTtcbiAgICAgICAgLy8tLS0vL1xuICAgICAgICBzdGF0ZS5iYWNrICs9IHN0YXRlLmV4dHJhO1xuICAgICAgfVxuLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1RcbiAgICAgIGlmIChzdGF0ZS5vZmZzZXQgPiBzdGF0ZS5kbWF4KSB7XG4gICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrJztcbiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4vLyNlbmRpZlxuICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIFwiaW5mbGF0ZTogICAgICAgICBkaXN0YW5jZSAldVxcblwiLCBzdGF0ZS5vZmZzZXQpKTtcbiAgICAgIHN0YXRlLm1vZGUgPSBNQVRDSDtcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlIE1BVENIOlxuICAgICAgaWYgKGxlZnQgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICBjb3B5ID0gX291dCAtIGxlZnQ7XG4gICAgICBpZiAoc3RhdGUub2Zmc2V0ID4gY29weSkgeyAgICAgICAgIC8qIGNvcHkgZnJvbSB3aW5kb3cgKi9cbiAgICAgICAgY29weSA9IHN0YXRlLm9mZnNldCAtIGNvcHk7XG4gICAgICAgIGlmIChjb3B5ID4gc3RhdGUud2hhdmUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkge1xuICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2snO1xuICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbi8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVmYWlsdHMsXG4vLyBkb24ndCBlbmFibGUgaXQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5XG4vLyNpZmRlZiBJTkZMQVRFX0FMTE9XX0lOVkFMSURfRElTVEFOQ0VfVE9PRkFSX0FSUlJcbi8vICAgICAgICAgIFRyYWNlKChzdGRlcnIsIFwiaW5mbGF0ZS5jIHRvbyBmYXJcXG5cIikpO1xuLy8gICAgICAgICAgY29weSAtPSBzdGF0ZS53aGF2ZTtcbi8vICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUubGVuZ3RoKSB7IGNvcHkgPSBzdGF0ZS5sZW5ndGg7IH1cbi8vICAgICAgICAgIGlmIChjb3B5ID4gbGVmdCkgeyBjb3B5ID0gbGVmdDsgfVxuLy8gICAgICAgICAgbGVmdCAtPSBjb3B5O1xuLy8gICAgICAgICAgc3RhdGUubGVuZ3RoIC09IGNvcHk7XG4vLyAgICAgICAgICBkbyB7XG4vLyAgICAgICAgICAgIG91dHB1dFtwdXQrK10gPSAwO1xuLy8gICAgICAgICAgfSB3aGlsZSAoLS1jb3B5KTtcbi8vICAgICAgICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHsgc3RhdGUubW9kZSA9IExFTjsgfVxuLy8gICAgICAgICAgYnJlYWs7XG4vLyNlbmRpZlxuICAgICAgICB9XG4gICAgICAgIGlmIChjb3B5ID4gc3RhdGUud25leHQpIHtcbiAgICAgICAgICBjb3B5IC09IHN0YXRlLnduZXh0O1xuICAgICAgICAgIGZyb20gPSBzdGF0ZS53c2l6ZSAtIGNvcHk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZnJvbSA9IHN0YXRlLnduZXh0IC0gY29weTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29weSA+IHN0YXRlLmxlbmd0aCkgeyBjb3B5ID0gc3RhdGUubGVuZ3RoOyB9XG4gICAgICAgIGZyb21fc291cmNlID0gc3RhdGUud2luZG93O1xuICAgICAgfVxuICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29weSBmcm9tIG91dHB1dCAqL1xuICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDtcbiAgICAgICAgZnJvbSA9IHB1dCAtIHN0YXRlLm9mZnNldDtcbiAgICAgICAgY29weSA9IHN0YXRlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmIChjb3B5ID4gbGVmdCkgeyBjb3B5ID0gbGVmdDsgfVxuICAgICAgbGVmdCAtPSBjb3B5O1xuICAgICAgc3RhdGUubGVuZ3RoIC09IGNvcHk7XG4gICAgICBkbyB7XG4gICAgICAgIG91dHB1dFtwdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdO1xuICAgICAgfSB3aGlsZSAoLS1jb3B5KTtcbiAgICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHsgc3RhdGUubW9kZSA9IExFTjsgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBMSVQ6XG4gICAgICBpZiAobGVmdCA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH1cbiAgICAgIG91dHB1dFtwdXQrK10gPSBzdGF0ZS5sZW5ndGg7XG4gICAgICBsZWZ0LS07XG4gICAgICBzdGF0ZS5tb2RlID0gTEVOO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBDSEVDSzpcbiAgICAgIGlmIChzdGF0ZS53cmFwKSB7XG4gICAgICAgIC8vPT09IE5FRURCSVRTKDMyKTtcbiAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikge1xuICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfVxuICAgICAgICAgIGhhdmUtLTtcbiAgICAgICAgICAvLyBVc2UgJ3wnIGluc2RlYWQgb2YgJysnIHRvIG1ha2Ugc3VyZSB0aGF0IHJlc3VsdCBpcyBzaWduZWRcbiAgICAgICAgICBob2xkIHw9IGlucHV0W25leHQrK10gPDwgYml0cztcbiAgICAgICAgICBiaXRzICs9IDg7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0vL1xuICAgICAgICBfb3V0IC09IGxlZnQ7XG4gICAgICAgIHN0cm0udG90YWxfb3V0ICs9IF9vdXQ7XG4gICAgICAgIHN0YXRlLnRvdGFsICs9IF9vdXQ7XG4gICAgICAgIGlmIChfb3V0KSB7XG4gICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID1cbiAgICAgICAgICAgICAgLypVUERBVEUoc3RhdGUuY2hlY2ssIHB1dCAtIF9vdXQsIF9vdXQpOyovXG4gICAgICAgICAgICAgIChzdGF0ZS5mbGFncyA/IGNyYzMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHB1dCAtIF9vdXQpIDogYWRsZXIzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBwdXQgLSBfb3V0KSk7XG5cbiAgICAgICAgfVxuICAgICAgICBfb3V0ID0gbGVmdDtcbiAgICAgICAgLy8gTkI6IGNyYzMyIHN0b3JlZCBhcyBzaWduZWQgMzItYml0IGludCwgenN3YXAzMiByZXR1cm5zIHNpZ25lZCB0b29cbiAgICAgICAgaWYgKChzdGF0ZS5mbGFncyA/IGhvbGQgOiB6c3dhcDMyKGhvbGQpKSAhPT0gc3RhdGUuY2hlY2spIHtcbiAgICAgICAgICBzdHJtLm1zZyA9ICdpbmNvcnJlY3QgZGF0YSBjaGVjayc7XG4gICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLz09PSBJTklUQklUUygpO1xuICAgICAgICBob2xkID0gMDtcbiAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIC8vPT09Ly9cbiAgICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJpbmZsYXRlOiAgIGNoZWNrIG1hdGNoZXMgdHJhaWxlclxcblwiKSk7XG4gICAgICB9XG4gICAgICBzdGF0ZS5tb2RlID0gTEVOR1RIO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgTEVOR1RIOlxuICAgICAgaWYgKHN0YXRlLndyYXAgJiYgc3RhdGUuZmxhZ3MpIHtcbiAgICAgICAgLy89PT0gTkVFREJJVFMoMzIpO1xuICAgICAgICB3aGlsZSAoYml0cyA8IDMyKSB7XG4gICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9XG4gICAgICAgICAgaGF2ZS0tO1xuICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzO1xuICAgICAgICAgIGJpdHMgKz0gODtcbiAgICAgICAgfVxuICAgICAgICAvLz09PS8vXG4gICAgICAgIGlmIChob2xkICE9PSAoc3RhdGUudG90YWwgJiAweGZmZmZmZmZmKSkge1xuICAgICAgICAgIHN0cm0ubXNnID0gJ2luY29ycmVjdCBsZW5ndGggY2hlY2snO1xuICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy89PT0gSU5JVEJJVFMoKTtcbiAgICAgICAgaG9sZCA9IDA7XG4gICAgICAgIGJpdHMgPSAwO1xuICAgICAgICAvLz09PS8vXG4gICAgICAgIC8vVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICBsZW5ndGggbWF0Y2hlcyB0cmFpbGVyXFxuXCIpKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLm1vZGUgPSBET05FO1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgRE9ORTpcbiAgICAgIHJldCA9IFpfU1RSRUFNX0VORDtcbiAgICAgIGJyZWFrIGluZl9sZWF2ZTtcbiAgICBjYXNlIEJBRDpcbiAgICAgIHJldCA9IFpfREFUQV9FUlJPUjtcbiAgICAgIGJyZWFrIGluZl9sZWF2ZTtcbiAgICBjYXNlIE1FTTpcbiAgICAgIHJldHVybiBaX01FTV9FUlJPUjtcbiAgICBjYXNlIFNZTkM6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgICB9XG4gIH1cblxuICAvLyBpbmZfbGVhdmUgPC0gaGVyZSBpcyByZWFsIHBsYWNlIGZvciBcImdvdG8gaW5mX2xlYXZlXCIsIGVtdWxhdGVkIHZpYSBcImJyZWFrIGluZl9sZWF2ZVwiXG5cbiAgLypcbiAgICAgUmV0dXJuIGZyb20gaW5mbGF0ZSgpLCB1cGRhdGluZyB0aGUgdG90YWwgY291bnRzIGFuZCB0aGUgY2hlY2sgdmFsdWUuXG4gICAgIElmIHRoZXJlIHdhcyBubyBwcm9ncmVzcyBkdXJpbmcgdGhlIGluZmxhdGUoKSBjYWxsLCByZXR1cm4gYSBidWZmZXJcbiAgICAgZXJyb3IuICBDYWxsIHVwZGF0ZXdpbmRvdygpIHRvIGNyZWF0ZSBhbmQvb3IgdXBkYXRlIHRoZSB3aW5kb3cgc3RhdGUuXG4gICAgIE5vdGU6IGEgbWVtb3J5IGVycm9yIGZyb20gaW5mbGF0ZSgpIGlzIG5vbi1yZWNvdmVyYWJsZS5cbiAgICovXG5cbiAgLy8tLS0gUkVTVE9SRSgpIC0tLVxuICBzdHJtLm5leHRfb3V0ID0gcHV0O1xuICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7XG4gIHN0cm0ubmV4dF9pbiA9IG5leHQ7XG4gIHN0cm0uYXZhaWxfaW4gPSBoYXZlO1xuICBzdGF0ZS5ob2xkID0gaG9sZDtcbiAgc3RhdGUuYml0cyA9IGJpdHM7XG4gIC8vLS0tXG5cbiAgaWYgKHN0YXRlLndzaXplIHx8IChfb3V0ICE9PSBzdHJtLmF2YWlsX291dCAmJiBzdGF0ZS5tb2RlIDwgQkFEICYmXG4gICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLm1vZGUgPCBDSEVDSyB8fCBmbHVzaCAhPT0gWl9GSU5JU0gpKSkge1xuICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS5vdXRwdXQsIHN0cm0ubmV4dF9vdXQsIF9vdXQgLSBzdHJtLmF2YWlsX291dCkpIHtcbiAgICAgIHN0YXRlLm1vZGUgPSBNRU07XG4gICAgICByZXR1cm4gWl9NRU1fRVJST1I7XG4gICAgfVxuICB9XG4gIF9pbiAtPSBzdHJtLmF2YWlsX2luO1xuICBfb3V0IC09IHN0cm0uYXZhaWxfb3V0O1xuICBzdHJtLnRvdGFsX2luICs9IF9pbjtcbiAgc3RybS50b3RhbF9vdXQgKz0gX291dDtcbiAgc3RhdGUudG90YWwgKz0gX291dDtcbiAgaWYgKHN0YXRlLndyYXAgJiYgX291dCkge1xuICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IC8qVVBEQVRFKHN0YXRlLmNoZWNrLCBzdHJtLm5leHRfb3V0IC0gX291dCwgX291dCk7Ki9cbiAgICAgIChzdGF0ZS5mbGFncyA/IGNyYzMyKHN0YXRlLmNoZWNrLCBvdXRwdXQsIF9vdXQsIHN0cm0ubmV4dF9vdXQgLSBfb3V0KSA6IGFkbGVyMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgc3RybS5uZXh0X291dCAtIF9vdXQpKTtcbiAgfVxuICBzdHJtLmRhdGFfdHlwZSA9IHN0YXRlLmJpdHMgKyAoc3RhdGUubGFzdCA/IDY0IDogMCkgK1xuICAgICAgICAgICAgICAgICAgICAoc3RhdGUubW9kZSA9PT0gVFlQRSA/IDEyOCA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgKHN0YXRlLm1vZGUgPT09IExFTl8gfHwgc3RhdGUubW9kZSA9PT0gQ09QWV8gPyAyNTYgOiAwKTtcbiAgaWYgKCgoX2luID09PSAwICYmIF9vdXQgPT09IDApIHx8IGZsdXNoID09PSBaX0ZJTklTSCkgJiYgcmV0ID09PSBaX09LKSB7XG4gICAgcmV0ID0gWl9CVUZfRVJST1I7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gaW5mbGF0ZUVuZChzdHJtKSB7XG5cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlIC8qfHwgc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKi8pIHtcbiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7XG4gIH1cblxuICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlO1xuICBpZiAoc3RhdGUud2luZG93KSB7XG4gICAgc3RhdGUud2luZG93ID0gbnVsbDtcbiAgfVxuICBzdHJtLnN0YXRlID0gbnVsbDtcbiAgcmV0dXJuIFpfT0s7XG59XG5cbmZ1bmN0aW9uIGluZmxhdGVHZXRIZWFkZXIoc3RybSwgaGVhZCkge1xuICB2YXIgc3RhdGU7XG5cbiAgLyogY2hlY2sgc3RhdGUgKi9cbiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBzdGF0ZSA9IHN0cm0uc3RhdGU7XG4gIGlmICgoc3RhdGUud3JhcCAmIDIpID09PSAwKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuXG4gIC8qIHNhdmUgaGVhZGVyIHN0cnVjdHVyZSAqL1xuICBzdGF0ZS5oZWFkID0gaGVhZDtcbiAgaGVhZC5kb25lID0gZmFsc2U7XG4gIHJldHVybiBaX09LO1xufVxuXG5mdW5jdGlvbiBpbmZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5KSB7XG4gIHZhciBkaWN0TGVuZ3RoID0gZGljdGlvbmFyeS5sZW5ndGg7XG5cbiAgdmFyIHN0YXRlO1xuICB2YXIgZGljdGlkO1xuICB2YXIgcmV0O1xuXG4gIC8qIGNoZWNrIHN0YXRlICovXG4gIGlmICghc3RybSAvKiA9PSBaX05VTEwgKi8gfHwgIXN0cm0uc3RhdGUgLyogPT0gWl9OVUxMICovKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfVxuICBzdGF0ZSA9IHN0cm0uc3RhdGU7XG5cbiAgaWYgKHN0YXRlLndyYXAgIT09IDAgJiYgc3RhdGUubW9kZSAhPT0gRElDVCkge1xuICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjtcbiAgfVxuXG4gIC8qIGNoZWNrIGZvciBjb3JyZWN0IGRpY3Rpb25hcnkgaWRlbnRpZmllciAqL1xuICBpZiAoc3RhdGUubW9kZSA9PT0gRElDVCkge1xuICAgIGRpY3RpZCA9IDE7IC8qIGFkbGVyMzIoMCwgbnVsbCwgMCkqL1xuICAgIC8qIGRpY3RpZCA9IGFkbGVyMzIoZGljdGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsgKi9cbiAgICBkaWN0aWQgPSBhZGxlcjMyKGRpY3RpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCwgMCk7XG4gICAgaWYgKGRpY3RpZCAhPT0gc3RhdGUuY2hlY2spIHtcbiAgICAgIHJldHVybiBaX0RBVEFfRVJST1I7XG4gICAgfVxuICB9XG4gIC8qIGNvcHkgZGljdGlvbmFyeSB0byB3aW5kb3cgdXNpbmcgdXBkYXRld2luZG93KCksIHdoaWNoIHdpbGwgYW1lbmQgdGhlXG4gICBleGlzdGluZyBkaWN0aW9uYXJ5IGlmIGFwcHJvcHJpYXRlICovXG4gIHJldCA9IHVwZGF0ZXdpbmRvdyhzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoLCBkaWN0TGVuZ3RoKTtcbiAgaWYgKHJldCkge1xuICAgIHN0YXRlLm1vZGUgPSBNRU07XG4gICAgcmV0dXJuIFpfTUVNX0VSUk9SO1xuICB9XG4gIHN0YXRlLmhhdmVkaWN0ID0gMTtcbiAgLy8gVHJhY2V2KChzdGRlcnIsIFwiaW5mbGF0ZTogICBkaWN0aW9uYXJ5IHNldFxcblwiKSk7XG4gIHJldHVybiBaX09LO1xufVxuXG5leHBvcnRzLmluZmxhdGVSZXNldCA9IGluZmxhdGVSZXNldDtcbmV4cG9ydHMuaW5mbGF0ZVJlc2V0MiA9IGluZmxhdGVSZXNldDI7XG5leHBvcnRzLmluZmxhdGVSZXNldEtlZXAgPSBpbmZsYXRlUmVzZXRLZWVwO1xuZXhwb3J0cy5pbmZsYXRlSW5pdCA9IGluZmxhdGVJbml0O1xuZXhwb3J0cy5pbmZsYXRlSW5pdDIgPSBpbmZsYXRlSW5pdDI7XG5leHBvcnRzLmluZmxhdGUgPSBpbmZsYXRlO1xuZXhwb3J0cy5pbmZsYXRlRW5kID0gaW5mbGF0ZUVuZDtcbmV4cG9ydHMuaW5mbGF0ZUdldEhlYWRlciA9IGluZmxhdGVHZXRIZWFkZXI7XG5leHBvcnRzLmluZmxhdGVTZXREaWN0aW9uYXJ5ID0gaW5mbGF0ZVNldERpY3Rpb25hcnk7XG5leHBvcnRzLmluZmxhdGVJbmZvID0gJ3Bha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCknO1xuXG4vKiBOb3QgaW1wbGVtZW50ZWRcbmV4cG9ydHMuaW5mbGF0ZUNvcHkgPSBpbmZsYXRlQ29weTtcbmV4cG9ydHMuaW5mbGF0ZUdldERpY3Rpb25hcnkgPSBpbmZsYXRlR2V0RGljdGlvbmFyeTtcbmV4cG9ydHMuaW5mbGF0ZU1hcmsgPSBpbmZsYXRlTWFyaztcbmV4cG9ydHMuaW5mbGF0ZVByaW1lID0gaW5mbGF0ZVByaW1lO1xuZXhwb3J0cy5pbmZsYXRlU3luYyA9IGluZmxhdGVTeW5jO1xuZXhwb3J0cy5pbmZsYXRlU3luY1BvaW50ID0gaW5mbGF0ZVN5bmNQb2ludDtcbmV4cG9ydHMuaW5mbGF0ZVVuZGVybWluZSA9IGluZmxhdGVVbmRlcm1pbmU7XG4qL1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzL2NvbW1vbicpO1xuXG52YXIgTUFYQklUUyA9IDE1O1xudmFyIEVOT1VHSF9MRU5TID0gODUyO1xudmFyIEVOT1VHSF9ESVNUUyA9IDU5Mjtcbi8vdmFyIEVOT1VHSCA9IChFTk9VR0hfTEVOUytFTk9VR0hfRElTVFMpO1xuXG52YXIgQ09ERVMgPSAwO1xudmFyIExFTlMgPSAxO1xudmFyIERJU1RTID0gMjtcblxudmFyIGxiYXNlID0gWyAvKiBMZW5ndGggY29kZXMgMjU3Li4yODUgYmFzZSAqL1xuICAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEzLCAxNSwgMTcsIDE5LCAyMywgMjcsIDMxLFxuICAzNSwgNDMsIDUxLCA1OSwgNjcsIDgzLCA5OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OCwgMCwgMFxuXTtcblxudmFyIGxleHQgPSBbIC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqL1xuICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCxcbiAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDcyLCA3OFxuXTtcblxudmFyIGRiYXNlID0gWyAvKiBEaXN0YW5jZSBjb2RlcyAwLi4yOSBiYXNlICovXG4gIDEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MyxcbiAgMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LFxuICA4MTkzLCAxMjI4OSwgMTYzODUsIDI0NTc3LCAwLCAwXG5dO1xuXG52YXIgZGV4dCA9IFsgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgZXh0cmEgKi9cbiAgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTgsIDE4LCAxOSwgMTksIDIwLCAyMCwgMjEsIDIxLCAyMiwgMjIsXG4gIDIzLCAyMywgMjQsIDI0LCAyNSwgMjUsIDI2LCAyNiwgMjcsIDI3LFxuICAyOCwgMjgsIDI5LCAyOSwgNjQsIDY0XG5dO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluZmxhdGVfdGFibGUodHlwZSwgbGVucywgbGVuc19pbmRleCwgY29kZXMsIHRhYmxlLCB0YWJsZV9pbmRleCwgd29yaywgb3B0cylcbntcbiAgdmFyIGJpdHMgPSBvcHRzLmJpdHM7XG4gICAgICAvL2hlcmUgPSBvcHRzLmhlcmU7IC8qIHRhYmxlIGVudHJ5IGZvciBkdXBsaWNhdGlvbiAqL1xuXG4gIHZhciBsZW4gPSAwOyAgICAgICAgICAgICAgIC8qIGEgY29kZSdzIGxlbmd0aCBpbiBiaXRzICovXG4gIHZhciBzeW0gPSAwOyAgICAgICAgICAgICAgIC8qIGluZGV4IG9mIGNvZGUgc3ltYm9scyAqL1xuICB2YXIgbWluID0gMCwgbWF4ID0gMDsgICAgICAgICAgLyogbWluaW11bSBhbmQgbWF4aW11bSBjb2RlIGxlbmd0aHMgKi9cbiAgdmFyIHJvb3QgPSAwOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGluZGV4IGJpdHMgZm9yIHJvb3QgdGFibGUgKi9cbiAgdmFyIGN1cnIgPSAwOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGluZGV4IGJpdHMgZm9yIGN1cnJlbnQgdGFibGUgKi9cbiAgdmFyIGRyb3AgPSAwOyAgICAgICAgICAgICAgLyogY29kZSBiaXRzIHRvIGRyb3AgZm9yIHN1Yi10YWJsZSAqL1xuICB2YXIgbGVmdCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBwcmVmaXggY29kZXMgYXZhaWxhYmxlICovXG4gIHZhciB1c2VkID0gMDsgICAgICAgICAgICAgIC8qIGNvZGUgZW50cmllcyBpbiB0YWJsZSB1c2VkICovXG4gIHZhciBodWZmID0gMDsgICAgICAgICAgICAgIC8qIEh1ZmZtYW4gY29kZSAqL1xuICB2YXIgaW5jcjsgICAgICAgICAgICAgIC8qIGZvciBpbmNyZW1lbnRpbmcgY29kZSwgaW5kZXggKi9cbiAgdmFyIGZpbGw7ICAgICAgICAgICAgICAvKiBpbmRleCBmb3IgcmVwbGljYXRpbmcgZW50cmllcyAqL1xuICB2YXIgbG93OyAgICAgICAgICAgICAgIC8qIGxvdyBiaXRzIGZvciBjdXJyZW50IHJvb3QgZW50cnkgKi9cbiAgdmFyIG1hc2s7ICAgICAgICAgICAgICAvKiBtYXNrIGZvciBsb3cgcm9vdCBiaXRzICovXG4gIHZhciBuZXh0OyAgICAgICAgICAgICAvKiBuZXh0IGF2YWlsYWJsZSBzcGFjZSBpbiB0YWJsZSAqL1xuICB2YXIgYmFzZSA9IG51bGw7ICAgICAvKiBiYXNlIHZhbHVlIHRhYmxlIHRvIHVzZSAqL1xuICB2YXIgYmFzZV9pbmRleCA9IDA7XG4vLyAgdmFyIHNob2V4dHJhOyAgICAvKiBleHRyYSBiaXRzIHRhYmxlIHRvIHVzZSAqL1xuICB2YXIgZW5kOyAgICAgICAgICAgICAgICAgICAgLyogdXNlIGJhc2UgYW5kIGV4dHJhIGZvciBzeW1ib2wgPiBlbmQgKi9cbiAgdmFyIGNvdW50ID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWEJJVFMgKyAxKTsgLy9bTUFYQklUUysxXTsgICAgLyogbnVtYmVyIG9mIGNvZGVzIG9mIGVhY2ggbGVuZ3RoICovXG4gIHZhciBvZmZzID0gbmV3IHV0aWxzLkJ1ZjE2KE1BWEJJVFMgKyAxKTsgLy9bTUFYQklUUysxXTsgICAgIC8qIG9mZnNldHMgaW4gdGFibGUgZm9yIGVhY2ggbGVuZ3RoICovXG4gIHZhciBleHRyYSA9IG51bGw7XG4gIHZhciBleHRyYV9pbmRleCA9IDA7XG5cbiAgdmFyIGhlcmVfYml0cywgaGVyZV9vcCwgaGVyZV92YWw7XG5cbiAgLypcbiAgIFByb2Nlc3MgYSBzZXQgb2YgY29kZSBsZW5ndGhzIHRvIGNyZWF0ZSBhIGNhbm9uaWNhbCBIdWZmbWFuIGNvZGUuICBUaGVcbiAgIGNvZGUgbGVuZ3RocyBhcmUgbGVuc1swLi5jb2Rlcy0xXS4gIEVhY2ggbGVuZ3RoIGNvcnJlc3BvbmRzIHRvIHRoZVxuICAgc3ltYm9scyAwLi5jb2Rlcy0xLiAgVGhlIEh1ZmZtYW4gY29kZSBpcyBnZW5lcmF0ZWQgYnkgZmlyc3Qgc29ydGluZyB0aGVcbiAgIHN5bWJvbHMgYnkgbGVuZ3RoIGZyb20gc2hvcnQgdG8gbG9uZywgYW5kIHJldGFpbmluZyB0aGUgc3ltYm9sIG9yZGVyXG4gICBmb3IgY29kZXMgd2l0aCBlcXVhbCBsZW5ndGhzLiAgVGhlbiB0aGUgY29kZSBzdGFydHMgd2l0aCBhbGwgemVybyBiaXRzXG4gICBmb3IgdGhlIGZpcnN0IGNvZGUgb2YgdGhlIHNob3J0ZXN0IGxlbmd0aCwgYW5kIHRoZSBjb2RlcyBhcmUgaW50ZWdlclxuICAgaW5jcmVtZW50cyBmb3IgdGhlIHNhbWUgbGVuZ3RoLCBhbmQgemVyb3MgYXJlIGFwcGVuZGVkIGFzIHRoZSBsZW5ndGhcbiAgIGluY3JlYXNlcy4gIEZvciB0aGUgZGVmbGF0ZSBmb3JtYXQsIHRoZXNlIGJpdHMgYXJlIHN0b3JlZCBiYWNrd2FyZHNcbiAgIGZyb20gdGhlaXIgbW9yZSBuYXR1cmFsIGludGVnZXIgaW5jcmVtZW50IG9yZGVyaW5nLCBhbmQgc28gd2hlbiB0aGVcbiAgIGRlY29kaW5nIHRhYmxlcyBhcmUgYnVpbHQgaW4gdGhlIGxhcmdlIGxvb3AgYmVsb3csIHRoZSBpbnRlZ2VyIGNvZGVzXG4gICBhcmUgaW5jcmVtZW50ZWQgYmFja3dhcmRzLlxuXG4gICBUaGlzIHJvdXRpbmUgYXNzdW1lcywgYnV0IGRvZXMgbm90IGNoZWNrLCB0aGF0IGFsbCBvZiB0aGUgZW50cmllcyBpblxuICAgbGVuc1tdIGFyZSBpbiB0aGUgcmFuZ2UgMC4uTUFYQklUUy4gIFRoZSBjYWxsZXIgbXVzdCBhc3N1cmUgdGhpcy5cbiAgIDEuLk1BWEJJVFMgaXMgaW50ZXJwcmV0ZWQgYXMgdGhhdCBjb2RlIGxlbmd0aC4gIHplcm8gbWVhbnMgdGhhdCB0aGF0XG4gICBzeW1ib2wgZG9lcyBub3Qgb2NjdXIgaW4gdGhpcyBjb2RlLlxuXG4gICBUaGUgY29kZXMgYXJlIHNvcnRlZCBieSBjb21wdXRpbmcgYSBjb3VudCBvZiBjb2RlcyBmb3IgZWFjaCBsZW5ndGgsXG4gICBjcmVhdGluZyBmcm9tIHRoYXQgYSB0YWJsZSBvZiBzdGFydGluZyBpbmRpY2VzIGZvciBlYWNoIGxlbmd0aCBpbiB0aGVcbiAgIHNvcnRlZCB0YWJsZSwgYW5kIHRoZW4gZW50ZXJpbmcgdGhlIHN5bWJvbHMgaW4gb3JkZXIgaW4gdGhlIHNvcnRlZFxuICAgdGFibGUuICBUaGUgc29ydGVkIHRhYmxlIGlzIHdvcmtbXSwgd2l0aCB0aGF0IHNwYWNlIGJlaW5nIHByb3ZpZGVkIGJ5XG4gICB0aGUgY2FsbGVyLlxuXG4gICBUaGUgbGVuZ3RoIGNvdW50cyBhcmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMgYXMgd2VsbCwgaS5lLiBmaW5kaW5nXG4gICB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBsZW5ndGggY29kZXMsIGRldGVybWluaW5nIGlmIHRoZXJlIGFyZSBhbnlcbiAgIGNvZGVzIGF0IGFsbCwgY2hlY2tpbmcgZm9yIGEgdmFsaWQgc2V0IG9mIGxlbmd0aHMsIGFuZCBsb29raW5nIGFoZWFkXG4gICBhdCBsZW5ndGggY291bnRzIHRvIGRldGVybWluZSBzdWItdGFibGUgc2l6ZXMgd2hlbiBidWlsZGluZyB0aGVcbiAgIGRlY29kaW5nIHRhYmxlcy5cbiAgICovXG5cbiAgLyogYWNjdW11bGF0ZSBsZW5ndGhzIGZvciBjb2RlcyAoYXNzdW1lcyBsZW5zW10gYWxsIGluIDAuLk1BWEJJVFMpICovXG4gIGZvciAobGVuID0gMDsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7XG4gICAgY291bnRbbGVuXSA9IDA7XG4gIH1cbiAgZm9yIChzeW0gPSAwOyBzeW0gPCBjb2Rlczsgc3ltKyspIHtcbiAgICBjb3VudFtsZW5zW2xlbnNfaW5kZXggKyBzeW1dXSsrO1xuICB9XG5cbiAgLyogYm91bmQgY29kZSBsZW5ndGhzLCBmb3JjZSByb290IHRvIGJlIHdpdGhpbiBjb2RlIGxlbmd0aHMgKi9cbiAgcm9vdCA9IGJpdHM7XG4gIGZvciAobWF4ID0gTUFYQklUUzsgbWF4ID49IDE7IG1heC0tKSB7XG4gICAgaWYgKGNvdW50W21heF0gIT09IDApIHsgYnJlYWs7IH1cbiAgfVxuICBpZiAocm9vdCA+IG1heCkge1xuICAgIHJvb3QgPSBtYXg7XG4gIH1cbiAgaWYgKG1heCA9PT0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHN5bWJvbHMgdG8gY29kZSBhdCBhbGwgKi9cbiAgICAvL3RhYmxlLm9wW29wdHMudGFibGVfaW5kZXhdID0gNjQ7ICAvL2hlcmUub3AgPSAodmFyIGNoYXIpNjQ7ICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi9cbiAgICAvL3RhYmxlLmJpdHNbb3B0cy50YWJsZV9pbmRleF0gPSAxOyAgIC8vaGVyZS5iaXRzID0gKHZhciBjaGFyKTE7XG4gICAgLy90YWJsZS52YWxbb3B0cy50YWJsZV9pbmRleCsrXSA9IDA7ICAgLy9oZXJlLnZhbCA9ICh2YXIgc2hvcnQpMDtcbiAgICB0YWJsZVt0YWJsZV9pbmRleCsrXSA9ICgxIDw8IDI0KSB8ICg2NCA8PCAxNikgfCAwO1xuXG5cbiAgICAvL3RhYmxlLm9wW29wdHMudGFibGVfaW5kZXhdID0gNjQ7XG4gICAgLy90YWJsZS5iaXRzW29wdHMudGFibGVfaW5kZXhdID0gMTtcbiAgICAvL3RhYmxlLnZhbFtvcHRzLnRhYmxlX2luZGV4KytdID0gMDtcbiAgICB0YWJsZVt0YWJsZV9pbmRleCsrXSA9ICgxIDw8IDI0KSB8ICg2NCA8PCAxNikgfCAwO1xuXG4gICAgb3B0cy5iaXRzID0gMTtcbiAgICByZXR1cm4gMDsgICAgIC8qIG5vIHN5bWJvbHMsIGJ1dCB3YWl0IGZvciBkZWNvZGluZyB0byByZXBvcnQgZXJyb3IgKi9cbiAgfVxuICBmb3IgKG1pbiA9IDE7IG1pbiA8IG1heDsgbWluKyspIHtcbiAgICBpZiAoY291bnRbbWluXSAhPT0gMCkgeyBicmVhazsgfVxuICB9XG4gIGlmIChyb290IDwgbWluKSB7XG4gICAgcm9vdCA9IG1pbjtcbiAgfVxuXG4gIC8qIGNoZWNrIGZvciBhbiBvdmVyLXN1YnNjcmliZWQgb3IgaW5jb21wbGV0ZSBzZXQgb2YgbGVuZ3RocyAqL1xuICBsZWZ0ID0gMTtcbiAgZm9yIChsZW4gPSAxOyBsZW4gPD0gTUFYQklUUzsgbGVuKyspIHtcbiAgICBsZWZ0IDw8PSAxO1xuICAgIGxlZnQgLT0gY291bnRbbGVuXTtcbiAgICBpZiAobGVmdCA8IDApIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9ICAgICAgICAvKiBvdmVyLXN1YnNjcmliZWQgKi9cbiAgfVxuICBpZiAobGVmdCA+IDAgJiYgKHR5cGUgPT09IENPREVTIHx8IG1heCAhPT0gMSkpIHtcbiAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgIC8qIGluY29tcGxldGUgc2V0ICovXG4gIH1cblxuICAvKiBnZW5lcmF0ZSBvZmZzZXRzIGludG8gc3ltYm9sIHRhYmxlIGZvciBlYWNoIGxlbmd0aCBmb3Igc29ydGluZyAqL1xuICBvZmZzWzFdID0gMDtcbiAgZm9yIChsZW4gPSAxOyBsZW4gPCBNQVhCSVRTOyBsZW4rKykge1xuICAgIG9mZnNbbGVuICsgMV0gPSBvZmZzW2xlbl0gKyBjb3VudFtsZW5dO1xuICB9XG5cbiAgLyogc29ydCBzeW1ib2xzIGJ5IGxlbmd0aCwgYnkgc3ltYm9sIG9yZGVyIHdpdGhpbiBlYWNoIGxlbmd0aCAqL1xuICBmb3IgKHN5bSA9IDA7IHN5bSA8IGNvZGVzOyBzeW0rKykge1xuICAgIGlmIChsZW5zW2xlbnNfaW5kZXggKyBzeW1dICE9PSAwKSB7XG4gICAgICB3b3JrW29mZnNbbGVuc1tsZW5zX2luZGV4ICsgc3ltXV0rK10gPSBzeW07XG4gICAgfVxuICB9XG5cbiAgLypcbiAgIENyZWF0ZSBhbmQgZmlsbCBpbiBkZWNvZGluZyB0YWJsZXMuICBJbiB0aGlzIGxvb3AsIHRoZSB0YWJsZSBiZWluZ1xuICAgZmlsbGVkIGlzIGF0IG5leHQgYW5kIGhhcyBjdXJyIGluZGV4IGJpdHMuICBUaGUgY29kZSBiZWluZyB1c2VkIGlzIGh1ZmZcbiAgIHdpdGggbGVuZ3RoIGxlbi4gIFRoYXQgY29kZSBpcyBjb252ZXJ0ZWQgdG8gYW4gaW5kZXggYnkgZHJvcHBpbmcgZHJvcFxuICAgYml0cyBvZmYgb2YgdGhlIGJvdHRvbS4gIEZvciBjb2RlcyB3aGVyZSBsZW4gaXMgbGVzcyB0aGFuIGRyb3AgKyBjdXJyLFxuICAgdGhvc2UgdG9wIGRyb3AgKyBjdXJyIC0gbGVuIGJpdHMgYXJlIGluY3JlbWVudGVkIHRocm91Z2ggYWxsIHZhbHVlcyB0b1xuICAgZmlsbCB0aGUgdGFibGUgd2l0aCByZXBsaWNhdGVkIGVudHJpZXMuXG5cbiAgIHJvb3QgaXMgdGhlIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciB0aGUgcm9vdCB0YWJsZS4gIFdoZW4gbGVuIGV4Y2VlZHNcbiAgIHJvb3QsIHN1Yi10YWJsZXMgYXJlIGNyZWF0ZWQgcG9pbnRlZCB0byBieSB0aGUgcm9vdCBlbnRyeSB3aXRoIGFuIGluZGV4XG4gICBvZiB0aGUgbG93IHJvb3QgYml0cyBvZiBodWZmLiAgVGhpcyBpcyBzYXZlZCBpbiBsb3cgdG8gY2hlY2sgZm9yIHdoZW4gYVxuICAgbmV3IHN1Yi10YWJsZSBzaG91bGQgYmUgc3RhcnRlZC4gIGRyb3AgaXMgemVybyB3aGVuIHRoZSByb290IHRhYmxlIGlzXG4gICBiZWluZyBmaWxsZWQsIGFuZCBkcm9wIGlzIHJvb3Qgd2hlbiBzdWItdGFibGVzIGFyZSBiZWluZyBmaWxsZWQuXG5cbiAgIFdoZW4gYSBuZXcgc3ViLXRhYmxlIGlzIG5lZWRlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGxvb2sgYWhlYWQgaW4gdGhlXG4gICBjb2RlIGxlbmd0aHMgdG8gZGV0ZXJtaW5lIHdoYXQgc2l6ZSBzdWItdGFibGUgaXMgbmVlZGVkLiAgVGhlIGxlbmd0aFxuICAgY291bnRzIGFyZSB1c2VkIGZvciB0aGlzLCBhbmQgc28gY291bnRbXSBpcyBkZWNyZW1lbnRlZCBhcyBjb2RlcyBhcmVcbiAgIGVudGVyZWQgaW4gdGhlIHRhYmxlcy5cblxuICAgdXNlZCBrZWVwcyB0cmFjayBvZiBob3cgbWFueSB0YWJsZSBlbnRyaWVzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgZnJvbSB0aGVcbiAgIHByb3ZpZGVkICp0YWJsZSBzcGFjZS4gIEl0IGlzIGNoZWNrZWQgZm9yIExFTlMgYW5kIERJU1QgdGFibGVzIGFnYWluc3RcbiAgIHRoZSBjb25zdGFudHMgRU5PVUdIX0xFTlMgYW5kIEVOT1VHSF9ESVNUUyB0byBndWFyZCBhZ2FpbnN0IGNoYW5nZXMgaW5cbiAgIHRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSBjb25zdGFudHMuICBTZWUgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmhcbiAgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG4gICBzeW0gaW5jcmVtZW50cyB0aHJvdWdoIGFsbCBzeW1ib2xzLCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcyB3aGVuXG4gICBhbGwgY29kZXMgb2YgbGVuZ3RoIG1heCwgaS5lLiBhbGwgY29kZXMsIGhhdmUgYmVlbiBwcm9jZXNzZWQuICBUaGlzXG4gICByb3V0aW5lIHBlcm1pdHMgaW5jb21wbGV0ZSBjb2Rlcywgc28gYW5vdGhlciBsb29wIGFmdGVyIHRoaXMgb25lIGZpbGxzXG4gICBpbiB0aGUgcmVzdCBvZiB0aGUgZGVjb2RpbmcgdGFibGVzIHdpdGggaW52YWxpZCBjb2RlIG1hcmtlcnMuXG4gICAqL1xuXG4gIC8qIHNldCB1cCBmb3IgY29kZSB0eXBlICovXG4gIC8vIHBvb3IgbWFuIG9wdGltaXphdGlvbiAtIHVzZSBpZi1lbHNlIGluc3RlYWQgb2Ygc3dpdGNoLFxuICAvLyB0byBhdm9pZCBkZW9wdHMgaW4gb2xkIHY4XG4gIGlmICh0eXBlID09PSBDT0RFUykge1xuICAgIGJhc2UgPSBleHRyYSA9IHdvcms7ICAgIC8qIGR1bW15IHZhbHVlLS1ub3QgdXNlZCAqL1xuICAgIGVuZCA9IDE5O1xuXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gTEVOUykge1xuICAgIGJhc2UgPSBsYmFzZTtcbiAgICBiYXNlX2luZGV4IC09IDI1NztcbiAgICBleHRyYSA9IGxleHQ7XG4gICAgZXh0cmFfaW5kZXggLT0gMjU3O1xuICAgIGVuZCA9IDI1NjtcblxuICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogRElTVFMgKi9cbiAgICBiYXNlID0gZGJhc2U7XG4gICAgZXh0cmEgPSBkZXh0O1xuICAgIGVuZCA9IC0xO1xuICB9XG5cbiAgLyogaW5pdGlhbGl6ZSBvcHRzIGZvciBsb29wICovXG4gIGh1ZmYgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlICovXG4gIHN5bSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlIHN5bWJvbCAqL1xuICBsZW4gPSBtaW47ICAgICAgICAgICAgICAgICAgLyogc3RhcnRpbmcgY29kZSBsZW5ndGggKi9cbiAgbmV4dCA9IHRhYmxlX2luZGV4OyAgICAgICAgICAgICAgLyogY3VycmVudCB0YWJsZSB0byBmaWxsIGluICovXG4gIGN1cnIgPSByb290OyAgICAgICAgICAgICAgICAvKiBjdXJyZW50IHRhYmxlIGluZGV4IGJpdHMgKi9cbiAgZHJvcCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgYml0cyB0byBkcm9wIGZyb20gY29kZSBmb3IgaW5kZXggKi9cbiAgbG93ID0gLTE7ICAgICAgICAgICAgICAgICAgIC8qIHRyaWdnZXIgbmV3IHN1Yi10YWJsZSB3aGVuIGxlbiA+IHJvb3QgKi9cbiAgdXNlZCA9IDEgPDwgcm9vdDsgICAgICAgICAgLyogdXNlIHJvb3QgdGFibGUgZW50cmllcyAqL1xuICBtYXNrID0gdXNlZCAtIDE7ICAgICAgICAgICAgLyogbWFzayBmb3IgY29tcGFyaW5nIGxvdyAqL1xuXG4gIC8qIGNoZWNrIGF2YWlsYWJsZSB0YWJsZSBzcGFjZSAqL1xuICBpZiAoKHR5cGUgPT09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fFxuICAgICh0eXBlID09PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgdmFyIGkgPSAwO1xuICAvKiBwcm9jZXNzIGFsbCBjb2RlcyBhbmQgbWFrZSB0YWJsZSBlbnRyaWVzICovXG4gIGZvciAoOzspIHtcbiAgICBpKys7XG4gICAgLyogY3JlYXRlIHRhYmxlIGVudHJ5ICovXG4gICAgaGVyZV9iaXRzID0gbGVuIC0gZHJvcDtcbiAgICBpZiAod29ya1tzeW1dIDwgZW5kKSB7XG4gICAgICBoZXJlX29wID0gMDtcbiAgICAgIGhlcmVfdmFsID0gd29ya1tzeW1dO1xuICAgIH1cbiAgICBlbHNlIGlmICh3b3JrW3N5bV0gPiBlbmQpIHtcbiAgICAgIGhlcmVfb3AgPSBleHRyYVtleHRyYV9pbmRleCArIHdvcmtbc3ltXV07XG4gICAgICBoZXJlX3ZhbCA9IGJhc2VbYmFzZV9pbmRleCArIHdvcmtbc3ltXV07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaGVyZV9vcCA9IDMyICsgNjQ7ICAgICAgICAgLyogZW5kIG9mIGJsb2NrICovXG4gICAgICBoZXJlX3ZhbCA9IDA7XG4gICAgfVxuXG4gICAgLyogcmVwbGljYXRlIGZvciB0aG9zZSBpbmRpY2VzIHdpdGggbG93IGxlbiBiaXRzIGVxdWFsIHRvIGh1ZmYgKi9cbiAgICBpbmNyID0gMSA8PCAobGVuIC0gZHJvcCk7XG4gICAgZmlsbCA9IDEgPDwgY3VycjtcbiAgICBtaW4gPSBmaWxsOyAgICAgICAgICAgICAgICAgLyogc2F2ZSBvZmZzZXQgdG8gbmV4dCB0YWJsZSAqL1xuICAgIGRvIHtcbiAgICAgIGZpbGwgLT0gaW5jcjtcbiAgICAgIHRhYmxlW25leHQgKyAoaHVmZiA+PiBkcm9wKSArIGZpbGxdID0gKGhlcmVfYml0cyA8PCAyNCkgfCAoaGVyZV9vcCA8PCAxNikgfCBoZXJlX3ZhbCB8MDtcbiAgICB9IHdoaWxlIChmaWxsICE9PSAwKTtcblxuICAgIC8qIGJhY2t3YXJkcyBpbmNyZW1lbnQgdGhlIGxlbi1iaXQgY29kZSBodWZmICovXG4gICAgaW5jciA9IDEgPDwgKGxlbiAtIDEpO1xuICAgIHdoaWxlIChodWZmICYgaW5jcikge1xuICAgICAgaW5jciA+Pj0gMTtcbiAgICB9XG4gICAgaWYgKGluY3IgIT09IDApIHtcbiAgICAgIGh1ZmYgJj0gaW5jciAtIDE7XG4gICAgICBodWZmICs9IGluY3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGh1ZmYgPSAwO1xuICAgIH1cblxuICAgIC8qIGdvIHRvIG5leHQgc3ltYm9sLCB1cGRhdGUgY291bnQsIGxlbiAqL1xuICAgIHN5bSsrO1xuICAgIGlmICgtLWNvdW50W2xlbl0gPT09IDApIHtcbiAgICAgIGlmIChsZW4gPT09IG1heCkgeyBicmVhazsgfVxuICAgICAgbGVuID0gbGVuc1tsZW5zX2luZGV4ICsgd29ya1tzeW1dXTtcbiAgICB9XG5cbiAgICAvKiBjcmVhdGUgbmV3IHN1Yi10YWJsZSBpZiBuZWVkZWQgKi9cbiAgICBpZiAobGVuID4gcm9vdCAmJiAoaHVmZiAmIG1hc2spICE9PSBsb3cpIHtcbiAgICAgIC8qIGlmIGZpcnN0IHRpbWUsIHRyYW5zaXRpb24gdG8gc3ViLXRhYmxlcyAqL1xuICAgICAgaWYgKGRyb3AgPT09IDApIHtcbiAgICAgICAgZHJvcCA9IHJvb3Q7XG4gICAgICB9XG5cbiAgICAgIC8qIGluY3JlbWVudCBwYXN0IGxhc3QgdGFibGUgKi9cbiAgICAgIG5leHQgKz0gbWluOyAgICAgICAgICAgIC8qIGhlcmUgbWluIGlzIDEgPDwgY3VyciAqL1xuXG4gICAgICAvKiBkZXRlcm1pbmUgbGVuZ3RoIG9mIG5leHQgdGFibGUgKi9cbiAgICAgIGN1cnIgPSBsZW4gLSBkcm9wO1xuICAgICAgbGVmdCA9IDEgPDwgY3VycjtcbiAgICAgIHdoaWxlIChjdXJyICsgZHJvcCA8IG1heCkge1xuICAgICAgICBsZWZ0IC09IGNvdW50W2N1cnIgKyBkcm9wXTtcbiAgICAgICAgaWYgKGxlZnQgPD0gMCkgeyBicmVhazsgfVxuICAgICAgICBjdXJyKys7XG4gICAgICAgIGxlZnQgPDw9IDE7XG4gICAgICB9XG5cbiAgICAgIC8qIGNoZWNrIGZvciBlbm91Z2ggc3BhY2UgKi9cbiAgICAgIHVzZWQgKz0gMSA8PCBjdXJyO1xuICAgICAgaWYgKCh0eXBlID09PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUykgfHxcbiAgICAgICAgKHR5cGUgPT09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICAvKiBwb2ludCBlbnRyeSBpbiByb290IHRhYmxlIHRvIHN1Yi10YWJsZSAqL1xuICAgICAgbG93ID0gaHVmZiAmIG1hc2s7XG4gICAgICAvKnRhYmxlLm9wW2xvd10gPSBjdXJyO1xuICAgICAgdGFibGUuYml0c1tsb3ddID0gcm9vdDtcbiAgICAgIHRhYmxlLnZhbFtsb3ddID0gbmV4dCAtIG9wdHMudGFibGVfaW5kZXg7Ki9cbiAgICAgIHRhYmxlW2xvd10gPSAocm9vdCA8PCAyNCkgfCAoY3VyciA8PCAxNikgfCAobmV4dCAtIHRhYmxlX2luZGV4KSB8MDtcbiAgICB9XG4gIH1cblxuICAvKiBmaWxsIGluIHJlbWFpbmluZyB0YWJsZSBlbnRyeSBpZiBjb2RlIGlzIGluY29tcGxldGUgKGd1YXJhbnRlZWQgdG8gaGF2ZVxuICAgYXQgbW9zdCBvbmUgcmVtYWluaW5nIGVudHJ5LCBzaW5jZSBpZiB0aGUgY29kZSBpcyBpbmNvbXBsZXRlLCB0aGVcbiAgIG1heGltdW0gY29kZSBsZW5ndGggdGhhdCB3YXMgYWxsb3dlZCB0byBnZXQgdGhpcyBmYXIgaXMgb25lIGJpdCkgKi9cbiAgaWYgKGh1ZmYgIT09IDApIHtcbiAgICAvL3RhYmxlLm9wW25leHQgKyBodWZmXSA9IDY0OyAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi9cbiAgICAvL3RhYmxlLmJpdHNbbmV4dCArIGh1ZmZdID0gbGVuIC0gZHJvcDtcbiAgICAvL3RhYmxlLnZhbFtuZXh0ICsgaHVmZl0gPSAwO1xuICAgIHRhYmxlW25leHQgKyBodWZmXSA9ICgobGVuIC0gZHJvcCkgPDwgMjQpIHwgKDY0IDw8IDE2KSB8MDtcbiAgfVxuXG4gIC8qIHNldCByZXR1cm4gcGFyYW1ldGVycyAqL1xuICAvL29wdHMudGFibGVfaW5kZXggKz0gdXNlZDtcbiAgb3B0cy5iaXRzID0gcm9vdDtcbiAgcmV0dXJuIDA7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgMjogICAgICAnbmVlZCBkaWN0aW9uYXJ5JywgICAgIC8qIFpfTkVFRF9ESUNUICAgICAgIDIgICovXG4gIDE6ICAgICAgJ3N0cmVhbSBlbmQnLCAgICAgICAgICAvKiBaX1NUUkVBTV9FTkQgICAgICAxICAqL1xuICAwOiAgICAgICcnLCAgICAgICAgICAgICAgICAgICAgLyogWl9PSyAgICAgICAgICAgICAgMCAgKi9cbiAgJy0xJzogICAnZmlsZSBlcnJvcicsICAgICAgICAgIC8qIFpfRVJSTk8gICAgICAgICAoLTEpICovXG4gICctMic6ICAgJ3N0cmVhbSBlcnJvcicsICAgICAgICAvKiBaX1NUUkVBTV9FUlJPUiAgKC0yKSAqL1xuICAnLTMnOiAgICdkYXRhIGVycm9yJywgICAgICAgICAgLyogWl9EQVRBX0VSUk9SICAgICgtMykgKi9cbiAgJy00JzogICAnaW5zdWZmaWNpZW50IG1lbW9yeScsIC8qIFpfTUVNX0VSUk9SICAgICAoLTQpICovXG4gICctNSc6ICAgJ2J1ZmZlciBlcnJvcicsICAgICAgICAvKiBaX0JVRl9FUlJPUiAgICAgKC01KSAqL1xuICAnLTYnOiAgICdpbmNvbXBhdGlibGUgdmVyc2lvbicgLyogWl9WRVJTSU9OX0VSUk9SICgtNikgKi9cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvY29tbW9uJyk7XG5cbi8qIFB1YmxpYyBjb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbi8vdmFyIFpfRklMVEVSRUQgICAgICAgICAgPSAxO1xuLy92YXIgWl9IVUZGTUFOX09OTFkgICAgICA9IDI7XG4vL3ZhciBaX1JMRSAgICAgICAgICAgICAgID0gMztcbnZhciBaX0ZJWEVEICAgICAgICAgICAgICAgPSA0O1xuLy92YXIgWl9ERUZBVUxUX1NUUkFURUdZICA9IDA7XG5cbi8qIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZGF0YV90eXBlIGZpZWxkICh0aG91Z2ggc2VlIGluZmxhdGUoKSkgKi9cbnZhciBaX0JJTkFSWSAgICAgICAgICAgICAgPSAwO1xudmFyIFpfVEVYVCAgICAgICAgICAgICAgICA9IDE7XG4vL3ZhciBaX0FTQ0lJICAgICAgICAgICAgID0gMTsgLy8gPSBaX1RFWFRcbnZhciBaX1VOS05PV04gICAgICAgICAgICAgPSAyO1xuXG4vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5cbmZ1bmN0aW9uIHplcm8oYnVmKSB7IHZhciBsZW4gPSBidWYubGVuZ3RoOyB3aGlsZSAoLS1sZW4gPj0gMCkgeyBidWZbbGVuXSA9IDA7IH0gfVxuXG4vLyBGcm9tIHp1dGlsLmhcblxudmFyIFNUT1JFRF9CTE9DSyA9IDA7XG52YXIgU1RBVElDX1RSRUVTID0gMTtcbnZhciBEWU5fVFJFRVMgICAgPSAyO1xuLyogVGhlIHRocmVlIGtpbmRzIG9mIGJsb2NrIHR5cGUgKi9cblxudmFyIE1JTl9NQVRDSCAgICA9IDM7XG52YXIgTUFYX01BVENIICAgID0gMjU4O1xuLyogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gbWF0Y2ggbGVuZ3RocyAqL1xuXG4vLyBGcm9tIGRlZmxhdGUuaFxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS5cbiAqL1xuXG52YXIgTEVOR1RIX0NPREVTICA9IDI5O1xuLyogbnVtYmVyIG9mIGxlbmd0aCBjb2Rlcywgbm90IGNvdW50aW5nIHRoZSBzcGVjaWFsIEVORF9CTE9DSyBjb2RlICovXG5cbnZhciBMSVRFUkFMUyAgICAgID0gMjU2O1xuLyogbnVtYmVyIG9mIGxpdGVyYWwgYnl0ZXMgMC4uMjU1ICovXG5cbnZhciBMX0NPREVTICAgICAgID0gTElURVJBTFMgKyAxICsgTEVOR1RIX0NPREVTO1xuLyogbnVtYmVyIG9mIExpdGVyYWwgb3IgTGVuZ3RoIGNvZGVzLCBpbmNsdWRpbmcgdGhlIEVORF9CTE9DSyBjb2RlICovXG5cbnZhciBEX0NPREVTICAgICAgID0gMzA7XG4vKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMgKi9cblxudmFyIEJMX0NPREVTICAgICAgPSAxOTtcbi8qIG51bWJlciBvZiBjb2RlcyB1c2VkIHRvIHRyYW5zZmVyIHRoZSBiaXQgbGVuZ3RocyAqL1xuXG52YXIgSEVBUF9TSVpFICAgICA9IDIgKiBMX0NPREVTICsgMTtcbi8qIG1heGltdW0gaGVhcCBzaXplICovXG5cbnZhciBNQVhfQklUUyAgICAgID0gMTU7XG4vKiBBbGwgY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CSVRTIGJpdHMgKi9cblxudmFyIEJ1Zl9zaXplICAgICAgPSAxNjtcbi8qIHNpemUgb2YgYml0IGJ1ZmZlciBpbiBiaV9idWYgKi9cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbnN0YW50c1xuICovXG5cbnZhciBNQVhfQkxfQklUUyA9IDc7XG4vKiBCaXQgbGVuZ3RoIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQkxfQklUUyBiaXRzICovXG5cbnZhciBFTkRfQkxPQ0sgICA9IDI1Njtcbi8qIGVuZCBvZiBibG9jayBsaXRlcmFsIGNvZGUgKi9cblxudmFyIFJFUF8zXzYgICAgID0gMTY7XG4vKiByZXBlYXQgcHJldmlvdXMgYml0IGxlbmd0aCAzLTYgdGltZXMgKDIgYml0cyBvZiByZXBlYXQgY291bnQpICovXG5cbnZhciBSRVBaXzNfMTAgICA9IDE3O1xuLyogcmVwZWF0IGEgemVybyBsZW5ndGggMy0xMCB0aW1lcyAgKDMgYml0cyBvZiByZXBlYXQgY291bnQpICovXG5cbnZhciBSRVBaXzExXzEzOCA9IDE4O1xuLyogcmVwZWF0IGEgemVybyBsZW5ndGggMTEtMTM4IHRpbWVzICAoNyBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi9cblxuLyogZXNsaW50LWRpc2FibGUgY29tbWEtc3BhY2luZyxhcnJheS1icmFja2V0LXNwYWNpbmcgKi9cbnZhciBleHRyYV9sYml0cyA9ICAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBsZW5ndGggY29kZSAqL1xuICBbMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXTtcblxudmFyIGV4dHJhX2RiaXRzID0gICAvKiBleHRyYSBiaXRzIGZvciBlYWNoIGRpc3RhbmNlIGNvZGUgKi9cbiAgWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdO1xuXG52YXIgZXh0cmFfYmxiaXRzID0gIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggYml0IGxlbmd0aCBjb2RlICovXG4gIFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XTtcblxudmFyIGJsX29yZGVyID1cbiAgWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO1xuLyogZXNsaW50LWVuYWJsZSBjb21tYS1zcGFjaW5nLGFycmF5LWJyYWNrZXQtc3BhY2luZyAqL1xuXG4vKiBUaGUgbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcyBhcmUgc2VudCBpbiBvcmRlciBvZiBkZWNyZWFzaW5nXG4gKiBwcm9iYWJpbGl0eSwgdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBsZW5ndGhzIGZvciB1bnVzZWQgYml0IGxlbmd0aCBjb2Rlcy5cbiAqL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIExvY2FsIGRhdGEuIFRoZXNlIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuXG4gKi9cblxuLy8gV2UgcHJlLWZpbGwgYXJyYXlzIHdpdGggMCB0byBhdm9pZCB1bmluaXRpYWxpemVkIGdhcHNcblxudmFyIERJU1RfQ09ERV9MRU4gPSA1MTI7IC8qIHNlZSBkZWZpbml0aW9uIG9mIGFycmF5IGRpc3RfY29kZSBiZWxvdyAqL1xuXG4vLyAhISEhIFVzZSBmbGF0IGFycmF5IGluc2RlYWQgb2Ygc3RydWN0dXJlLCBGcmVxID0gaSoyLCBMZW4gPSBpKjIrMVxudmFyIHN0YXRpY19sdHJlZSAgPSBuZXcgQXJyYXkoKExfQ09ERVMgKyAyKSAqIDIpO1xuemVybyhzdGF0aWNfbHRyZWUpO1xuLyogVGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUuIFNpbmNlIHRoZSBiaXQgbGVuZ3RocyBhcmUgaW1wb3NlZCwgdGhlcmUgaXMgbm9cbiAqIG5lZWQgZm9yIHRoZSBMX0NPREVTIGV4dHJhIGNvZGVzIHVzZWQgZHVyaW5nIGhlYXAgY29uc3RydWN0aW9uLiBIb3dldmVyXG4gKiBUaGUgY29kZXMgMjg2IGFuZCAyODcgYXJlIG5lZWRlZCB0byBidWlsZCBhIGNhbm9uaWNhbCB0cmVlIChzZWUgX3RyX2luaXRcbiAqIGJlbG93KS5cbiAqL1xuXG52YXIgc3RhdGljX2R0cmVlICA9IG5ldyBBcnJheShEX0NPREVTICogMik7XG56ZXJvKHN0YXRpY19kdHJlZSk7XG4vKiBUaGUgc3RhdGljIGRpc3RhbmNlIHRyZWUuIChBY3R1YWxseSBhIHRyaXZpYWwgdHJlZSBzaW5jZSBhbGwgY29kZXMgdXNlXG4gKiA1IGJpdHMuKVxuICovXG5cbnZhciBfZGlzdF9jb2RlICAgID0gbmV3IEFycmF5KERJU1RfQ09ERV9MRU4pO1xuemVybyhfZGlzdF9jb2RlKTtcbi8qIERpc3RhbmNlIGNvZGVzLiBUaGUgZmlyc3QgMjU2IHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSBkaXN0YW5jZXNcbiAqIDMgLi4gMjU4LCB0aGUgbGFzdCAyNTYgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIHRvcCA4IGJpdHMgb2ZcbiAqIHRoZSAxNSBiaXQgZGlzdGFuY2VzLlxuICovXG5cbnZhciBfbGVuZ3RoX2NvZGUgID0gbmV3IEFycmF5KE1BWF9NQVRDSCAtIE1JTl9NQVRDSCArIDEpO1xuemVybyhfbGVuZ3RoX2NvZGUpO1xuLyogbGVuZ3RoIGNvZGUgZm9yIGVhY2ggbm9ybWFsaXplZCBtYXRjaCBsZW5ndGggKDAgPT0gTUlOX01BVENIKSAqL1xuXG52YXIgYmFzZV9sZW5ndGggICA9IG5ldyBBcnJheShMRU5HVEhfQ09ERVMpO1xuemVybyhiYXNlX2xlbmd0aCk7XG4vKiBGaXJzdCBub3JtYWxpemVkIGxlbmd0aCBmb3IgZWFjaCBjb2RlICgwID0gTUlOX01BVENIKSAqL1xuXG52YXIgYmFzZV9kaXN0ICAgICA9IG5ldyBBcnJheShEX0NPREVTKTtcbnplcm8oYmFzZV9kaXN0KTtcbi8qIEZpcnN0IG5vcm1hbGl6ZWQgZGlzdGFuY2UgZm9yIGVhY2ggY29kZSAoMCA9IGRpc3RhbmNlIG9mIDEpICovXG5cblxuZnVuY3Rpb24gU3RhdGljVHJlZURlc2Moc3RhdGljX3RyZWUsIGV4dHJhX2JpdHMsIGV4dHJhX2Jhc2UsIGVsZW1zLCBtYXhfbGVuZ3RoKSB7XG5cbiAgdGhpcy5zdGF0aWNfdHJlZSAgPSBzdGF0aWNfdHJlZTsgIC8qIHN0YXRpYyB0cmVlIG9yIE5VTEwgKi9cbiAgdGhpcy5leHRyYV9iaXRzICAgPSBleHRyYV9iaXRzOyAgIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggY29kZSBvciBOVUxMICovXG4gIHRoaXMuZXh0cmFfYmFzZSAgID0gZXh0cmFfYmFzZTsgICAvKiBiYXNlIGluZGV4IGZvciBleHRyYV9iaXRzICovXG4gIHRoaXMuZWxlbXMgICAgICAgID0gZWxlbXM7ICAgICAgICAvKiBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0cmVlICovXG4gIHRoaXMubWF4X2xlbmd0aCAgID0gbWF4X2xlbmd0aDsgICAvKiBtYXggYml0IGxlbmd0aCBmb3IgdGhlIGNvZGVzICovXG5cbiAgLy8gc2hvdyBpZiBgc3RhdGljX3RyZWVgIGhhcyBkYXRhIG9yIGR1bW15IC0gbmVlZGVkIGZvciBtb25vbW9ycGhpYyBvYmplY3RzXG4gIHRoaXMuaGFzX3N0cmVlICAgID0gc3RhdGljX3RyZWUgJiYgc3RhdGljX3RyZWUubGVuZ3RoO1xufVxuXG5cbnZhciBzdGF0aWNfbF9kZXNjO1xudmFyIHN0YXRpY19kX2Rlc2M7XG52YXIgc3RhdGljX2JsX2Rlc2M7XG5cblxuZnVuY3Rpb24gVHJlZURlc2MoZHluX3RyZWUsIHN0YXRfZGVzYykge1xuICB0aGlzLmR5bl90cmVlID0gZHluX3RyZWU7ICAgICAvKiB0aGUgZHluYW1pYyB0cmVlICovXG4gIHRoaXMubWF4X2NvZGUgPSAwOyAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xuICB0aGlzLnN0YXRfZGVzYyA9IHN0YXRfZGVzYzsgICAvKiB0aGUgY29ycmVzcG9uZGluZyBzdGF0aWMgdHJlZSAqL1xufVxuXG5cblxuZnVuY3Rpb24gZF9jb2RlKGRpc3QpIHtcbiAgcmV0dXJuIGRpc3QgPCAyNTYgPyBfZGlzdF9jb2RlW2Rpc3RdIDogX2Rpc3RfY29kZVsyNTYgKyAoZGlzdCA+Pj4gNyldO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogT3V0cHV0IGEgc2hvcnQgTFNCIGZpcnN0IG9uIHRoZSBzdHJlYW0uXG4gKiBJTiBhc3NlcnRpb246IHRoZXJlIGlzIGVub3VnaCByb29tIGluIHBlbmRpbmdCdWYuXG4gKi9cbmZ1bmN0aW9uIHB1dF9zaG9ydChzLCB3KSB7XG4vLyAgICBwdXRfYnl0ZShzLCAodWNoKSgodykgJiAweGZmKSk7XG4vLyAgICBwdXRfYnl0ZShzLCAodWNoKSgodXNoKSh3KSA+PiA4KSk7XG4gIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gKHcpICYgMHhmZjtcbiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSAodyA+Pj4gOCkgJiAweGZmO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIHZhbHVlIG9uIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuXG4gKiBJTiBhc3NlcnRpb246IGxlbmd0aCA8PSAxNiBhbmQgdmFsdWUgZml0cyBpbiBsZW5ndGggYml0cy5cbiAqL1xuZnVuY3Rpb24gc2VuZF9iaXRzKHMsIHZhbHVlLCBsZW5ndGgpIHtcbiAgaWYgKHMuYmlfdmFsaWQgPiAoQnVmX3NpemUgLSBsZW5ndGgpKSB7XG4gICAgcy5iaV9idWYgfD0gKHZhbHVlIDw8IHMuYmlfdmFsaWQpICYgMHhmZmZmO1xuICAgIHB1dF9zaG9ydChzLCBzLmJpX2J1Zik7XG4gICAgcy5iaV9idWYgPSB2YWx1ZSA+PiAoQnVmX3NpemUgLSBzLmJpX3ZhbGlkKTtcbiAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aCAtIEJ1Zl9zaXplO1xuICB9IGVsc2Uge1xuICAgIHMuYmlfYnVmIHw9ICh2YWx1ZSA8PCBzLmJpX3ZhbGlkKSAmIDB4ZmZmZjtcbiAgICBzLmJpX3ZhbGlkICs9IGxlbmd0aDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHNlbmRfY29kZShzLCBjLCB0cmVlKSB7XG4gIHNlbmRfYml0cyhzLCB0cmVlW2MgKiAyXS8qLkNvZGUqLywgdHJlZVtjICogMiArIDFdLyouTGVuKi8pO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogUmV2ZXJzZSB0aGUgZmlyc3QgbGVuIGJpdHMgb2YgYSBjb2RlLCB1c2luZyBzdHJhaWdodGZvcndhcmQgY29kZSAoYSBmYXN0ZXJcbiAqIG1ldGhvZCB3b3VsZCB1c2UgYSB0YWJsZSlcbiAqIElOIGFzc2VydGlvbjogMSA8PSBsZW4gPD0gMTVcbiAqL1xuZnVuY3Rpb24gYmlfcmV2ZXJzZShjb2RlLCBsZW4pIHtcbiAgdmFyIHJlcyA9IDA7XG4gIGRvIHtcbiAgICByZXMgfD0gY29kZSAmIDE7XG4gICAgY29kZSA+Pj49IDE7XG4gICAgcmVzIDw8PSAxO1xuICB9IHdoaWxlICgtLWxlbiA+IDApO1xuICByZXR1cm4gcmVzID4+PiAxO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggdGhlIGJpdCBidWZmZXIsIGtlZXBpbmcgYXQgbW9zdCA3IGJpdHMgaW4gaXQuXG4gKi9cbmZ1bmN0aW9uIGJpX2ZsdXNoKHMpIHtcbiAgaWYgKHMuYmlfdmFsaWQgPT09IDE2KSB7XG4gICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTtcbiAgICBzLmJpX2J1ZiA9IDA7XG4gICAgcy5iaV92YWxpZCA9IDA7XG5cbiAgfSBlbHNlIGlmIChzLmJpX3ZhbGlkID49IDgpIHtcbiAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMuYmlfYnVmICYgMHhmZjtcbiAgICBzLmJpX2J1ZiA+Pj0gODtcbiAgICBzLmJpX3ZhbGlkIC09IDg7XG4gIH1cbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbXB1dGUgdGhlIG9wdGltYWwgYml0IGxlbmd0aHMgZm9yIGEgdHJlZSBhbmQgdXBkYXRlIHRoZSB0b3RhbCBiaXQgbGVuZ3RoXG4gKiBmb3IgdGhlIGN1cnJlbnQgYmxvY2suXG4gKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQsIGhlYXBbaGVhcF9tYXhdIGFuZFxuICogICAgYWJvdmUgYXJlIHRoZSB0cmVlIG5vZGVzIHNvcnRlZCBieSBpbmNyZWFzaW5nIGZyZXF1ZW5jeS5cbiAqIE9VVCBhc3NlcnRpb25zOiB0aGUgZmllbGQgbGVuIGlzIHNldCB0byB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RoLCB0aGVcbiAqICAgICBhcnJheSBibF9jb3VudCBjb250YWlucyB0aGUgZnJlcXVlbmNpZXMgZm9yIGVhY2ggYml0IGxlbmd0aC5cbiAqICAgICBUaGUgbGVuZ3RoIG9wdF9sZW4gaXMgdXBkYXRlZDsgc3RhdGljX2xlbiBpcyBhbHNvIHVwZGF0ZWQgaWYgc3RyZWUgaXNcbiAqICAgICBub3QgbnVsbC5cbiAqL1xuZnVuY3Rpb24gZ2VuX2JpdGxlbihzLCBkZXNjKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIHRyZWVfZGVzYyAqZGVzYzsgICAgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqL1xue1xuICB2YXIgdHJlZSAgICAgICAgICAgID0gZGVzYy5keW5fdHJlZTtcbiAgdmFyIG1heF9jb2RlICAgICAgICA9IGRlc2MubWF4X2NvZGU7XG4gIHZhciBzdHJlZSAgICAgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTtcbiAgdmFyIGhhc19zdHJlZSAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTtcbiAgdmFyIGV4dHJhICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2JpdHM7XG4gIHZhciBiYXNlICAgICAgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5leHRyYV9iYXNlO1xuICB2YXIgbWF4X2xlbmd0aCAgICAgID0gZGVzYy5zdGF0X2Rlc2MubWF4X2xlbmd0aDtcbiAgdmFyIGg7ICAgICAgICAgICAgICAvKiBoZWFwIGluZGV4ICovXG4gIHZhciBuLCBtOyAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIHRoZSB0cmVlIGVsZW1lbnRzICovXG4gIHZhciBiaXRzOyAgICAgICAgICAgLyogYml0IGxlbmd0aCAqL1xuICB2YXIgeGJpdHM7ICAgICAgICAgIC8qIGV4dHJhIGJpdHMgKi9cbiAgdmFyIGY7ICAgICAgICAgICAgICAvKiBmcmVxdWVuY3kgKi9cbiAgdmFyIG92ZXJmbG93ID0gMDsgICAvKiBudW1iZXIgb2YgZWxlbWVudHMgd2l0aCBiaXQgbGVuZ3RoIHRvbyBsYXJnZSAqL1xuXG4gIGZvciAoYml0cyA9IDA7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykge1xuICAgIHMuYmxfY291bnRbYml0c10gPSAwO1xuICB9XG5cbiAgLyogSW4gYSBmaXJzdCBwYXNzLCBjb21wdXRlIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGhzICh3aGljaCBtYXlcbiAgICogb3ZlcmZsb3cgaW4gdGhlIGNhc2Ugb2YgdGhlIGJpdCBsZW5ndGggdHJlZSkuXG4gICAqL1xuICB0cmVlW3MuaGVhcFtzLmhlYXBfbWF4XSAqIDIgKyAxXS8qLkxlbiovID0gMDsgLyogcm9vdCBvZiB0aGUgaGVhcCAqL1xuXG4gIGZvciAoaCA9IHMuaGVhcF9tYXggKyAxOyBoIDwgSEVBUF9TSVpFOyBoKyspIHtcbiAgICBuID0gcy5oZWFwW2hdO1xuICAgIGJpdHMgPSB0cmVlW3RyZWVbbiAqIDIgKyAxXS8qLkRhZCovICogMiArIDFdLyouTGVuKi8gKyAxO1xuICAgIGlmIChiaXRzID4gbWF4X2xlbmd0aCkge1xuICAgICAgYml0cyA9IG1heF9sZW5ndGg7XG4gICAgICBvdmVyZmxvdysrO1xuICAgIH1cbiAgICB0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IGJpdHM7XG4gICAgLyogV2Ugb3ZlcndyaXRlIHRyZWVbbl0uRGFkIHdoaWNoIGlzIG5vIGxvbmdlciBuZWVkZWQgKi9cblxuICAgIGlmIChuID4gbWF4X2NvZGUpIHsgY29udGludWU7IH0gLyogbm90IGEgbGVhZiBub2RlICovXG5cbiAgICBzLmJsX2NvdW50W2JpdHNdKys7XG4gICAgeGJpdHMgPSAwO1xuICAgIGlmIChuID49IGJhc2UpIHtcbiAgICAgIHhiaXRzID0gZXh0cmFbbiAtIGJhc2VdO1xuICAgIH1cbiAgICBmID0gdHJlZVtuICogMl0vKi5GcmVxKi87XG4gICAgcy5vcHRfbGVuICs9IGYgKiAoYml0cyArIHhiaXRzKTtcbiAgICBpZiAoaGFzX3N0cmVlKSB7XG4gICAgICBzLnN0YXRpY19sZW4gKz0gZiAqIChzdHJlZVtuICogMiArIDFdLyouTGVuKi8gKyB4Yml0cyk7XG4gICAgfVxuICB9XG4gIGlmIChvdmVyZmxvdyA9PT0gMCkgeyByZXR1cm47IH1cblxuICAvLyBUcmFjZSgoc3RkZXJyLFwiXFxuYml0IGxlbmd0aCBvdmVyZmxvd1xcblwiKSk7XG4gIC8qIFRoaXMgaGFwcGVucyBmb3IgZXhhbXBsZSBvbiBvYmoyIGFuZCBwaWMgb2YgdGhlIENhbGdhcnkgY29ycHVzICovXG5cbiAgLyogRmluZCB0aGUgZmlyc3QgYml0IGxlbmd0aCB3aGljaCBjb3VsZCBpbmNyZWFzZTogKi9cbiAgZG8ge1xuICAgIGJpdHMgPSBtYXhfbGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAocy5ibF9jb3VudFtiaXRzXSA9PT0gMCkgeyBiaXRzLS07IH1cbiAgICBzLmJsX2NvdW50W2JpdHNdLS07ICAgICAgLyogbW92ZSBvbmUgbGVhZiBkb3duIHRoZSB0cmVlICovXG4gICAgcy5ibF9jb3VudFtiaXRzICsgMV0gKz0gMjsgLyogbW92ZSBvbmUgb3ZlcmZsb3cgaXRlbSBhcyBpdHMgYnJvdGhlciAqL1xuICAgIHMuYmxfY291bnRbbWF4X2xlbmd0aF0tLTtcbiAgICAvKiBUaGUgYnJvdGhlciBvZiB0aGUgb3ZlcmZsb3cgaXRlbSBhbHNvIG1vdmVzIG9uZSBzdGVwIHVwLFxuICAgICAqIGJ1dCB0aGlzIGRvZXMgbm90IGFmZmVjdCBibF9jb3VudFttYXhfbGVuZ3RoXVxuICAgICAqL1xuICAgIG92ZXJmbG93IC09IDI7XG4gIH0gd2hpbGUgKG92ZXJmbG93ID4gMCk7XG5cbiAgLyogTm93IHJlY29tcHV0ZSBhbGwgYml0IGxlbmd0aHMsIHNjYW5uaW5nIGluIGluY3JlYXNpbmcgZnJlcXVlbmN5LlxuICAgKiBoIGlzIHN0aWxsIGVxdWFsIHRvIEhFQVBfU0laRS4gKEl0IGlzIHNpbXBsZXIgdG8gcmVjb25zdHJ1Y3QgYWxsXG4gICAqIGxlbmd0aHMgaW5zdGVhZCBvZiBmaXhpbmcgb25seSB0aGUgd3Jvbmcgb25lcy4gVGhpcyBpZGVhIGlzIHRha2VuXG4gICAqIGZyb20gJ2FyJyB3cml0dGVuIGJ5IEhhcnVoaWtvIE9rdW11cmEuKVxuICAgKi9cbiAgZm9yIChiaXRzID0gbWF4X2xlbmd0aDsgYml0cyAhPT0gMDsgYml0cy0tKSB7XG4gICAgbiA9IHMuYmxfY291bnRbYml0c107XG4gICAgd2hpbGUgKG4gIT09IDApIHtcbiAgICAgIG0gPSBzLmhlYXBbLS1oXTtcbiAgICAgIGlmIChtID4gbWF4X2NvZGUpIHsgY29udGludWU7IH1cbiAgICAgIGlmICh0cmVlW20gKiAyICsgMV0vKi5MZW4qLyAhPT0gYml0cykge1xuICAgICAgICAvLyBUcmFjZSgoc3RkZXJyLFwiY29kZSAlZCBiaXRzICVkLT4lZFxcblwiLCBtLCB0cmVlW21dLkxlbiwgYml0cykpO1xuICAgICAgICBzLm9wdF9sZW4gKz0gKGJpdHMgLSB0cmVlW20gKiAyICsgMV0vKi5MZW4qLykgKiB0cmVlW20gKiAyXS8qLkZyZXEqLztcbiAgICAgICAgdHJlZVttICogMiArIDFdLyouTGVuKi8gPSBiaXRzO1xuICAgICAgfVxuICAgICAgbi0tO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogR2VuZXJhdGUgdGhlIGNvZGVzIGZvciBhIGdpdmVuIHRyZWUgYW5kIGJpdCBjb3VudHMgKHdoaWNoIG5lZWQgbm90IGJlXG4gKiBvcHRpbWFsKS5cbiAqIElOIGFzc2VydGlvbjogdGhlIGFycmF5IGJsX2NvdW50IGNvbnRhaW5zIHRoZSBiaXQgbGVuZ3RoIHN0YXRpc3RpY3MgZm9yXG4gKiB0aGUgZ2l2ZW4gdHJlZSBhbmQgdGhlIGZpZWxkIGxlbiBpcyBzZXQgZm9yIGFsbCB0cmVlIGVsZW1lbnRzLlxuICogT1VUIGFzc2VydGlvbjogdGhlIGZpZWxkIGNvZGUgaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cyBvZiBub25cbiAqICAgICB6ZXJvIGNvZGUgbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIGJsX2NvdW50KVxuLy8gICAgY3RfZGF0YSAqdHJlZTsgICAgICAgICAgICAgLyogdGhlIHRyZWUgdG8gZGVjb3JhdGUgKi9cbi8vICAgIGludCBtYXhfY29kZTsgICAgICAgICAgICAgIC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xuLy8gICAgdXNoZiAqYmxfY291bnQ7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCAqL1xue1xuICB2YXIgbmV4dF9jb2RlID0gbmV3IEFycmF5KE1BWF9CSVRTICsgMSk7IC8qIG5leHQgY29kZSB2YWx1ZSBmb3IgZWFjaCBiaXQgbGVuZ3RoICovXG4gIHZhciBjb2RlID0gMDsgICAgICAgICAgICAgIC8qIHJ1bm5pbmcgY29kZSB2YWx1ZSAqL1xuICB2YXIgYml0czsgICAgICAgICAgICAgICAgICAvKiBiaXQgaW5kZXggKi9cbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogY29kZSBpbmRleCAqL1xuXG4gIC8qIFRoZSBkaXN0cmlidXRpb24gY291bnRzIGFyZSBmaXJzdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjb2RlIHZhbHVlc1xuICAgKiB3aXRob3V0IGJpdCByZXZlcnNhbC5cbiAgICovXG4gIGZvciAoYml0cyA9IDE7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykge1xuICAgIG5leHRfY29kZVtiaXRzXSA9IGNvZGUgPSAoY29kZSArIGJsX2NvdW50W2JpdHMgLSAxXSkgPDwgMTtcbiAgfVxuICAvKiBDaGVjayB0aGF0IHRoZSBiaXQgY291bnRzIGluIGJsX2NvdW50IGFyZSBjb25zaXN0ZW50LiBUaGUgbGFzdCBjb2RlXG4gICAqIG11c3QgYmUgYWxsIG9uZXMuXG4gICAqL1xuICAvL0Fzc2VydCAoY29kZSArIGJsX2NvdW50W01BWF9CSVRTXS0xID09ICgxPDxNQVhfQklUUyktMSxcbiAgLy8gICAgICAgIFwiaW5jb25zaXN0ZW50IGJpdCBjb3VudHNcIik7XG4gIC8vVHJhY2V2KChzdGRlcnIsXCJcXG5nZW5fY29kZXM6IG1heF9jb2RlICVkIFwiLCBtYXhfY29kZSkpO1xuXG4gIGZvciAobiA9IDA7ICBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICB2YXIgbGVuID0gdHJlZVtuICogMiArIDFdLyouTGVuKi87XG4gICAgaWYgKGxlbiA9PT0gMCkgeyBjb250aW51ZTsgfVxuICAgIC8qIE5vdyByZXZlcnNlIHRoZSBiaXRzICovXG4gICAgdHJlZVtuICogMl0vKi5Db2RlKi8gPSBiaV9yZXZlcnNlKG5leHRfY29kZVtsZW5dKyssIGxlbik7XG5cbiAgICAvL1RyYWNlY3YodHJlZSAhPSBzdGF0aWNfbHRyZWUsIChzdGRlcnIsXCJcXG5uICUzZCAlYyBsICUyZCBjICU0eCAoJXgpIFwiLFxuICAgIC8vICAgICBuLCAoaXNncmFwaChuKSA/IG4gOiAnICcpLCBsZW4sIHRyZWVbbl0uQ29kZSwgbmV4dF9jb2RlW2xlbl0tMSkpO1xuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSB2YXJpb3VzICdjb25zdGFudCcgdGFibGVzLlxuICovXG5mdW5jdGlvbiB0cl9zdGF0aWNfaW5pdCgpIHtcbiAgdmFyIG47ICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIHRyZWUgZWxlbWVudHMgKi9cbiAgdmFyIGJpdHM7ICAgICAvKiBiaXQgY291bnRlciAqL1xuICB2YXIgbGVuZ3RoOyAgIC8qIGxlbmd0aCB2YWx1ZSAqL1xuICB2YXIgY29kZTsgICAgIC8qIGNvZGUgdmFsdWUgKi9cbiAgdmFyIGRpc3Q7ICAgICAvKiBkaXN0YW5jZSBpbmRleCAqL1xuICB2YXIgYmxfY291bnQgPSBuZXcgQXJyYXkoTUFYX0JJVFMgKyAxKTtcbiAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCBmb3IgYW4gb3B0aW1hbCB0cmVlICovXG5cbiAgLy8gZG8gY2hlY2sgaW4gX3RyX2luaXQoKVxuICAvL2lmIChzdGF0aWNfaW5pdF9kb25lKSByZXR1cm47XG5cbiAgLyogRm9yIHNvbWUgZW1iZWRkZWQgdGFyZ2V0cywgZ2xvYmFsIHZhcmlhYmxlcyBhcmUgbm90IGluaXRpYWxpemVkOiAqL1xuLyojaWZkZWYgTk9fSU5JVF9HTE9CQUxfUE9JTlRFUlNcbiAgc3RhdGljX2xfZGVzYy5zdGF0aWNfdHJlZSA9IHN0YXRpY19sdHJlZTtcbiAgc3RhdGljX2xfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfbGJpdHM7XG4gIHN0YXRpY19kX2Rlc2Muc3RhdGljX3RyZWUgPSBzdGF0aWNfZHRyZWU7XG4gIHN0YXRpY19kX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2RiaXRzO1xuICBzdGF0aWNfYmxfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfYmxiaXRzO1xuI2VuZGlmKi9cblxuICAvKiBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGxlbmd0aCAoMC4uMjU1KSAtPiBsZW5ndGggY29kZSAoMC4uMjgpICovXG4gIGxlbmd0aCA9IDA7XG4gIGZvciAoY29kZSA9IDA7IGNvZGUgPCBMRU5HVEhfQ09ERVMgLSAxOyBjb2RlKyspIHtcbiAgICBiYXNlX2xlbmd0aFtjb2RlXSA9IGxlbmd0aDtcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgZXh0cmFfbGJpdHNbY29kZV0pOyBuKyspIHtcbiAgICAgIF9sZW5ndGhfY29kZVtsZW5ndGgrK10gPSBjb2RlO1xuICAgIH1cbiAgfVxuICAvL0Fzc2VydCAobGVuZ3RoID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogbGVuZ3RoICE9IDI1NlwiKTtcbiAgLyogTm90ZSB0aGF0IHRoZSBsZW5ndGggMjU1IChtYXRjaCBsZW5ndGggMjU4KSBjYW4gYmUgcmVwcmVzZW50ZWRcbiAgICogaW4gdHdvIGRpZmZlcmVudCB3YXlzOiBjb2RlIDI4NCArIDUgYml0cyBvciBjb2RlIDI4NSwgc28gd2VcbiAgICogb3ZlcndyaXRlIGxlbmd0aF9jb2RlWzI1NV0gdG8gdXNlIHRoZSBiZXN0IGVuY29kaW5nOlxuICAgKi9cbiAgX2xlbmd0aF9jb2RlW2xlbmd0aCAtIDFdID0gY29kZTtcblxuICAvKiBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGRpc3QgKDAuLjMySykgLT4gZGlzdCBjb2RlICgwLi4yOSkgKi9cbiAgZGlzdCA9IDA7XG4gIGZvciAoY29kZSA9IDA7IGNvZGUgPCAxNjsgY29kZSsrKSB7XG4gICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdDtcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgZXh0cmFfZGJpdHNbY29kZV0pOyBuKyspIHtcbiAgICAgIF9kaXN0X2NvZGVbZGlzdCsrXSA9IGNvZGU7XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogZGlzdCAhPSAyNTZcIik7XG4gIGRpc3QgPj49IDc7IC8qIGZyb20gbm93IG9uLCBhbGwgZGlzdGFuY2VzIGFyZSBkaXZpZGVkIGJ5IDEyOCAqL1xuICBmb3IgKDsgY29kZSA8IERfQ09ERVM7IGNvZGUrKykge1xuICAgIGJhc2VfZGlzdFtjb2RlXSA9IGRpc3QgPDwgNztcbiAgICBmb3IgKG4gPSAwOyBuIDwgKDEgPDwgKGV4dHJhX2RiaXRzW2NvZGVdIC0gNykpOyBuKyspIHtcbiAgICAgIF9kaXN0X2NvZGVbMjU2ICsgZGlzdCsrXSA9IGNvZGU7XG4gICAgfVxuICB9XG4gIC8vQXNzZXJ0IChkaXN0ID09IDI1NiwgXCJ0cl9zdGF0aWNfaW5pdDogMjU2K2Rpc3QgIT0gNTEyXCIpO1xuXG4gIC8qIENvbnN0cnVjdCB0aGUgY29kZXMgb2YgdGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUgKi9cbiAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7XG4gICAgYmxfY291bnRbYml0c10gPSAwO1xuICB9XG5cbiAgbiA9IDA7XG4gIHdoaWxlIChuIDw9IDE0Mykge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA4O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs4XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI1NSkge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA5O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs5XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI3OSkge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA3O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs3XSsrO1xuICB9XG4gIHdoaWxlIChuIDw9IDI4Nykge1xuICAgIHN0YXRpY19sdHJlZVtuICogMiArIDFdLyouTGVuKi8gPSA4O1xuICAgIG4rKztcbiAgICBibF9jb3VudFs4XSsrO1xuICB9XG4gIC8qIENvZGVzIDI4NiBhbmQgMjg3IGRvIG5vdCBleGlzdCwgYnV0IHdlIG11c3QgaW5jbHVkZSB0aGVtIGluIHRoZVxuICAgKiB0cmVlIGNvbnN0cnVjdGlvbiB0byBnZXQgYSBjYW5vbmljYWwgSHVmZm1hbiB0cmVlIChsb25nZXN0IGNvZGVcbiAgICogYWxsIG9uZXMpXG4gICAqL1xuICBnZW5fY29kZXMoc3RhdGljX2x0cmVlLCBMX0NPREVTICsgMSwgYmxfY291bnQpO1xuXG4gIC8qIFRoZSBzdGF0aWMgZGlzdGFuY2UgdHJlZSBpcyB0cml2aWFsOiAqL1xuICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgbisrKSB7XG4gICAgc3RhdGljX2R0cmVlW24gKiAyICsgMV0vKi5MZW4qLyA9IDU7XG4gICAgc3RhdGljX2R0cmVlW24gKiAyXS8qLkNvZGUqLyA9IGJpX3JldmVyc2UobiwgNSk7XG4gIH1cblxuICAvLyBOb3cgZGF0YSByZWFkeSBhbmQgd2UgY2FuIGluaXQgc3RhdGljIHRyZWVzXG4gIHN0YXRpY19sX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2x0cmVlLCBleHRyYV9sYml0cywgTElURVJBTFMgKyAxLCBMX0NPREVTLCBNQVhfQklUUyk7XG4gIHN0YXRpY19kX2Rlc2MgPSBuZXcgU3RhdGljVHJlZURlc2Moc3RhdGljX2R0cmVlLCBleHRyYV9kYml0cywgMCwgICAgICAgICAgRF9DT0RFUywgTUFYX0JJVFMpO1xuICBzdGF0aWNfYmxfZGVzYyA9IG5ldyBTdGF0aWNUcmVlRGVzYyhuZXcgQXJyYXkoMCksIGV4dHJhX2JsYml0cywgMCwgICAgICAgICBCTF9DT0RFUywgTUFYX0JMX0JJVFMpO1xuXG4gIC8vc3RhdGljX2luaXRfZG9uZSA9IHRydWU7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIGEgbmV3IGJsb2NrLlxuICovXG5mdW5jdGlvbiBpbml0X2Jsb2NrKHMpIHtcbiAgdmFyIG47IC8qIGl0ZXJhdGVzIG92ZXIgdHJlZSBlbGVtZW50cyAqL1xuXG4gIC8qIEluaXRpYWxpemUgdGhlIHRyZWVzLiAqL1xuICBmb3IgKG4gPSAwOyBuIDwgTF9DT0RFUzsgIG4rKykgeyBzLmR5bl9sdHJlZVtuICogMl0vKi5GcmVxKi8gPSAwOyB9XG4gIGZvciAobiA9IDA7IG4gPCBEX0NPREVTOyAgbisrKSB7IHMuZHluX2R0cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH1cbiAgZm9yIChuID0gMDsgbiA8IEJMX0NPREVTOyBuKyspIHsgcy5ibF90cmVlW24gKiAyXS8qLkZyZXEqLyA9IDA7IH1cblxuICBzLmR5bl9sdHJlZVtFTkRfQkxPQ0sgKiAyXS8qLkZyZXEqLyA9IDE7XG4gIHMub3B0X2xlbiA9IHMuc3RhdGljX2xlbiA9IDA7XG4gIHMubGFzdF9saXQgPSBzLm1hdGNoZXMgPSAwO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogRmx1c2ggdGhlIGJpdCBidWZmZXIgYW5kIGFsaWduIHRoZSBvdXRwdXQgb24gYSBieXRlIGJvdW5kYXJ5XG4gKi9cbmZ1bmN0aW9uIGJpX3dpbmR1cChzKVxue1xuICBpZiAocy5iaV92YWxpZCA+IDgpIHtcbiAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpO1xuICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPiAwKSB7XG4gICAgLy9wdXRfYnl0ZShzLCAoQnl0ZSlzLT5iaV9idWYpO1xuICAgIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gcy5iaV9idWY7XG4gIH1cbiAgcy5iaV9idWYgPSAwO1xuICBzLmJpX3ZhbGlkID0gMDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5IGEgc3RvcmVkIGJsb2NrLCBzdG9yaW5nIGZpcnN0IHRoZSBsZW5ndGggYW5kIGl0c1xuICogb25lJ3MgY29tcGxlbWVudCBpZiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNvcHlfYmxvY2socywgYnVmLCBsZW4sIGhlYWRlcilcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAgICAqYnVmOyAgICAvKiB0aGUgaW5wdXQgZGF0YSAqL1xuLy91bnNpZ25lZCBsZW47ICAgICAvKiBpdHMgbGVuZ3RoICovXG4vL2ludCAgICAgIGhlYWRlcjsgIC8qIHRydWUgaWYgYmxvY2sgaGVhZGVyIG11c3QgYmUgd3JpdHRlbiAqL1xue1xuICBiaV93aW5kdXAocyk7ICAgICAgICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovXG5cbiAgaWYgKGhlYWRlcikge1xuICAgIHB1dF9zaG9ydChzLCBsZW4pO1xuICAgIHB1dF9zaG9ydChzLCB+bGVuKTtcbiAgfVxuLy8gIHdoaWxlIChsZW4tLSkge1xuLy8gICAgcHV0X2J5dGUocywgKmJ1ZisrKTtcbi8vICB9XG4gIHV0aWxzLmFycmF5U2V0KHMucGVuZGluZ19idWYsIHMud2luZG93LCBidWYsIGxlbiwgcy5wZW5kaW5nKTtcbiAgcy5wZW5kaW5nICs9IGxlbjtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb21wYXJlcyB0byBzdWJ0cmVlcywgdXNpbmcgdGhlIHRyZWUgZGVwdGggYXMgdGllIGJyZWFrZXIgd2hlblxuICogdGhlIHN1YnRyZWVzIGhhdmUgZXF1YWwgZnJlcXVlbmN5LiBUaGlzIG1pbmltaXplcyB0aGUgd29yc3QgY2FzZSBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIHNtYWxsZXIodHJlZSwgbiwgbSwgZGVwdGgpIHtcbiAgdmFyIF9uMiA9IG4gKiAyO1xuICB2YXIgX20yID0gbSAqIDI7XG4gIHJldHVybiAodHJlZVtfbjJdLyouRnJlcSovIDwgdHJlZVtfbTJdLyouRnJlcSovIHx8XG4gICAgICAgICAodHJlZVtfbjJdLyouRnJlcSovID09PSB0cmVlW19tMl0vKi5GcmVxKi8gJiYgZGVwdGhbbl0gPD0gZGVwdGhbbV0pKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBSZXN0b3JlIHRoZSBoZWFwIHByb3BlcnR5IGJ5IG1vdmluZyBkb3duIHRoZSB0cmVlIHN0YXJ0aW5nIGF0IG5vZGUgayxcbiAqIGV4Y2hhbmdpbmcgYSBub2RlIHdpdGggdGhlIHNtYWxsZXN0IG9mIGl0cyB0d28gc29ucyBpZiBuZWNlc3NhcnksIHN0b3BwaW5nXG4gKiB3aGVuIHRoZSBoZWFwIHByb3BlcnR5IGlzIHJlLWVzdGFibGlzaGVkIChlYWNoIGZhdGhlciBzbWFsbGVyIHRoYW4gaXRzXG4gKiB0d28gc29ucykuXG4gKi9cbmZ1bmN0aW9uIHBxZG93bmhlYXAocywgdHJlZSwgaylcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICBjdF9kYXRhICp0cmVlOyAgLyogdGhlIHRyZWUgdG8gcmVzdG9yZSAqL1xuLy8gICAgaW50IGs7ICAgICAgICAgICAgICAgLyogbm9kZSB0byBtb3ZlIGRvd24gKi9cbntcbiAgdmFyIHYgPSBzLmhlYXBba107XG4gIHZhciBqID0gayA8PCAxOyAgLyogbGVmdCBzb24gb2YgayAqL1xuICB3aGlsZSAoaiA8PSBzLmhlYXBfbGVuKSB7XG4gICAgLyogU2V0IGogdG8gdGhlIHNtYWxsZXN0IG9mIHRoZSB0d28gc29uczogKi9cbiAgICBpZiAoaiA8IHMuaGVhcF9sZW4gJiZcbiAgICAgIHNtYWxsZXIodHJlZSwgcy5oZWFwW2ogKyAxXSwgcy5oZWFwW2pdLCBzLmRlcHRoKSkge1xuICAgICAgaisrO1xuICAgIH1cbiAgICAvKiBFeGl0IGlmIHYgaXMgc21hbGxlciB0aGFuIGJvdGggc29ucyAqL1xuICAgIGlmIChzbWFsbGVyKHRyZWUsIHYsIHMuaGVhcFtqXSwgcy5kZXB0aCkpIHsgYnJlYWs7IH1cblxuICAgIC8qIEV4Y2hhbmdlIHYgd2l0aCB0aGUgc21hbGxlc3Qgc29uICovXG4gICAgcy5oZWFwW2tdID0gcy5oZWFwW2pdO1xuICAgIGsgPSBqO1xuXG4gICAgLyogQW5kIGNvbnRpbnVlIGRvd24gdGhlIHRyZWUsIHNldHRpbmcgaiB0byB0aGUgbGVmdCBzb24gb2YgayAqL1xuICAgIGogPDw9IDE7XG4gIH1cbiAgcy5oZWFwW2tdID0gdjtcbn1cblxuXG4vLyBpbmxpbmVkIG1hbnVhbGx5XG4vLyB2YXIgU01BTExFU1QgPSAxO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgdGhlIGJsb2NrIGRhdGEgY29tcHJlc3NlZCB1c2luZyB0aGUgZ2l2ZW4gSHVmZm1hbiB0cmVlc1xuICovXG5mdW5jdGlvbiBjb21wcmVzc19ibG9jayhzLCBsdHJlZSwgZHRyZWUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY29uc3QgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqL1xuLy8gICAgY29uc3QgY3RfZGF0YSAqZHRyZWU7IC8qIGRpc3RhbmNlIHRyZWUgKi9cbntcbiAgdmFyIGRpc3Q7ICAgICAgICAgICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqL1xuICB2YXIgbGM7ICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdCA9PSAwKSAqL1xuICB2YXIgbHggPSAwOyAgICAgICAgIC8qIHJ1bm5pbmcgaW5kZXggaW4gbF9idWYgKi9cbiAgdmFyIGNvZGU7ICAgICAgICAgICAvKiB0aGUgY29kZSB0byBzZW5kICovXG4gIHZhciBleHRyYTsgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgdG8gc2VuZCAqL1xuXG4gIGlmIChzLmxhc3RfbGl0ICE9PSAwKSB7XG4gICAgZG8ge1xuICAgICAgZGlzdCA9IChzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBseCAqIDJdIDw8IDgpIHwgKHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4ICogMiArIDFdKTtcbiAgICAgIGxjID0gcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgbHhdO1xuICAgICAgbHgrKztcblxuICAgICAgaWYgKGRpc3QgPT09IDApIHtcbiAgICAgICAgc2VuZF9jb2RlKHMsIGxjLCBsdHJlZSk7IC8qIHNlbmQgYSBsaXRlcmFsIGJ5dGUgKi9cbiAgICAgICAgLy9UcmFjZWN2KGlzZ3JhcGgobGMpLCAoc3RkZXJyLFwiICclYycgXCIsIGxjKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBIZXJlLCBsYyBpcyB0aGUgbWF0Y2ggbGVuZ3RoIC0gTUlOX01BVENIICovXG4gICAgICAgIGNvZGUgPSBfbGVuZ3RoX2NvZGVbbGNdO1xuICAgICAgICBzZW5kX2NvZGUocywgY29kZSArIExJVEVSQUxTICsgMSwgbHRyZWUpOyAvKiBzZW5kIHRoZSBsZW5ndGggY29kZSAqL1xuICAgICAgICBleHRyYSA9IGV4dHJhX2xiaXRzW2NvZGVdO1xuICAgICAgICBpZiAoZXh0cmEgIT09IDApIHtcbiAgICAgICAgICBsYyAtPSBiYXNlX2xlbmd0aFtjb2RlXTtcbiAgICAgICAgICBzZW5kX2JpdHMocywgbGMsIGV4dHJhKTsgICAgICAgLyogc2VuZCB0aGUgZXh0cmEgbGVuZ3RoIGJpdHMgKi9cbiAgICAgICAgfVxuICAgICAgICBkaXN0LS07IC8qIGRpc3QgaXMgbm93IHRoZSBtYXRjaCBkaXN0YW5jZSAtIDEgKi9cbiAgICAgICAgY29kZSA9IGRfY29kZShkaXN0KTtcbiAgICAgICAgLy9Bc3NlcnQgKGNvZGUgPCBEX0NPREVTLCBcImJhZCBkX2NvZGVcIik7XG5cbiAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUsIGR0cmVlKTsgICAgICAgLyogc2VuZCB0aGUgZGlzdGFuY2UgY29kZSAqL1xuICAgICAgICBleHRyYSA9IGV4dHJhX2RiaXRzW2NvZGVdO1xuICAgICAgICBpZiAoZXh0cmEgIT09IDApIHtcbiAgICAgICAgICBkaXN0IC09IGJhc2VfZGlzdFtjb2RlXTtcbiAgICAgICAgICBzZW5kX2JpdHMocywgZGlzdCwgZXh0cmEpOyAgIC8qIHNlbmQgdGhlIGV4dHJhIGRpc3RhbmNlIGJpdHMgKi9cbiAgICAgICAgfVxuICAgICAgfSAvKiBsaXRlcmFsIG9yIG1hdGNoIHBhaXIgPyAqL1xuXG4gICAgICAvKiBDaGVjayB0aGF0IHRoZSBvdmVybGF5IGJldHdlZW4gcGVuZGluZ19idWYgYW5kIGRfYnVmK2xfYnVmIGlzIG9rOiAqL1xuICAgICAgLy9Bc3NlcnQoKHVJbnQpKHMtPnBlbmRpbmcpIDwgcy0+bGl0X2J1ZnNpemUgKyAyKmx4LFxuICAgICAgLy8gICAgICAgXCJwZW5kaW5nQnVmIG92ZXJmbG93XCIpO1xuXG4gICAgfSB3aGlsZSAobHggPCBzLmxhc3RfbGl0KTtcbiAgfVxuXG4gIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIGx0cmVlKTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvbnN0cnVjdCBvbmUgSHVmZm1hbiB0cmVlIGFuZCBhc3NpZ25zIHRoZSBjb2RlIGJpdCBzdHJpbmdzIGFuZCBsZW5ndGhzLlxuICogVXBkYXRlIHRoZSB0b3RhbCBiaXQgbGVuZ3RoIGZvciB0aGUgY3VycmVudCBibG9jay5cbiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkIGZyZXEgaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cy5cbiAqIE9VVCBhc3NlcnRpb25zOiB0aGUgZmllbGRzIGxlbiBhbmQgY29kZSBhcmUgc2V0IHRvIHRoZSBvcHRpbWFsIGJpdCBsZW5ndGhcbiAqICAgICBhbmQgY29ycmVzcG9uZGluZyBjb2RlLiBUaGUgbGVuZ3RoIG9wdF9sZW4gaXMgdXBkYXRlZDsgc3RhdGljX2xlbiBpc1xuICogICAgIGFsc28gdXBkYXRlZCBpZiBzdHJlZSBpcyBub3QgbnVsbC4gVGhlIGZpZWxkIG1heF9jb2RlIGlzIHNldC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRfdHJlZShzLCBkZXNjKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIHRyZWVfZGVzYyAqZGVzYzsgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqL1xue1xuICB2YXIgdHJlZSAgICAgPSBkZXNjLmR5bl90cmVlO1xuICB2YXIgc3RyZWUgICAgPSBkZXNjLnN0YXRfZGVzYy5zdGF0aWNfdHJlZTtcbiAgdmFyIGhhc19zdHJlZSA9IGRlc2Muc3RhdF9kZXNjLmhhc19zdHJlZTtcbiAgdmFyIGVsZW1zICAgID0gZGVzYy5zdGF0X2Rlc2MuZWxlbXM7XG4gIHZhciBuLCBtOyAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgaGVhcCBlbGVtZW50cyAqL1xuICB2YXIgbWF4X2NvZGUgPSAtMTsgLyogbGFyZ2VzdCBjb2RlIHdpdGggbm9uIHplcm8gZnJlcXVlbmN5ICovXG4gIHZhciBub2RlOyAgICAgICAgICAvKiBuZXcgbm9kZSBiZWluZyBjcmVhdGVkICovXG5cbiAgLyogQ29uc3RydWN0IHRoZSBpbml0aWFsIGhlYXAsIHdpdGggbGVhc3QgZnJlcXVlbnQgZWxlbWVudCBpblxuICAgKiBoZWFwW1NNQUxMRVNUXS4gVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVhcFsyKm5dIGFuZCBoZWFwWzIqbisxXS5cbiAgICogaGVhcFswXSBpcyBub3QgdXNlZC5cbiAgICovXG4gIHMuaGVhcF9sZW4gPSAwO1xuICBzLmhlYXBfbWF4ID0gSEVBUF9TSVpFO1xuXG4gIGZvciAobiA9IDA7IG4gPCBlbGVtczsgbisrKSB7XG4gICAgaWYgKHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgICBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IG1heF9jb2RlID0gbjtcbiAgICAgIHMuZGVwdGhbbl0gPSAwO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWVbbiAqIDIgKyAxXS8qLkxlbiovID0gMDtcbiAgICB9XG4gIH1cblxuICAvKiBUaGUgcGt6aXAgZm9ybWF0IHJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIGRpc3RhbmNlIGNvZGUgZXhpc3RzLFxuICAgKiBhbmQgdGhhdCBhdCBsZWFzdCBvbmUgYml0IHNob3VsZCBiZSBzZW50IGV2ZW4gaWYgdGhlcmUgaXMgb25seSBvbmVcbiAgICogcG9zc2libGUgY29kZS4gU28gdG8gYXZvaWQgc3BlY2lhbCBjaGVja3MgbGF0ZXIgb24gd2UgZm9yY2UgYXQgbGVhc3RcbiAgICogdHdvIGNvZGVzIG9mIG5vbiB6ZXJvIGZyZXF1ZW5jeS5cbiAgICovXG4gIHdoaWxlIChzLmhlYXBfbGVuIDwgMikge1xuICAgIG5vZGUgPSBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IChtYXhfY29kZSA8IDIgPyArK21heF9jb2RlIDogMCk7XG4gICAgdHJlZVtub2RlICogMl0vKi5GcmVxKi8gPSAxO1xuICAgIHMuZGVwdGhbbm9kZV0gPSAwO1xuICAgIHMub3B0X2xlbi0tO1xuXG4gICAgaWYgKGhhc19zdHJlZSkge1xuICAgICAgcy5zdGF0aWNfbGVuIC09IHN0cmVlW25vZGUgKiAyICsgMV0vKi5MZW4qLztcbiAgICB9XG4gICAgLyogbm9kZSBpcyAwIG9yIDEgc28gaXQgZG9lcyBub3QgaGF2ZSBleHRyYSBiaXRzICovXG4gIH1cbiAgZGVzYy5tYXhfY29kZSA9IG1heF9jb2RlO1xuXG4gIC8qIFRoZSBlbGVtZW50cyBoZWFwW2hlYXBfbGVuLzIrMSAuLiBoZWFwX2xlbl0gYXJlIGxlYXZlcyBvZiB0aGUgdHJlZSxcbiAgICogZXN0YWJsaXNoIHN1Yi1oZWFwcyBvZiBpbmNyZWFzaW5nIGxlbmd0aHM6XG4gICAqL1xuICBmb3IgKG4gPSAocy5oZWFwX2xlbiA+PiAxLyppbnQgLzIqLyk7IG4gPj0gMTsgbi0tKSB7IHBxZG93bmhlYXAocywgdHJlZSwgbik7IH1cblxuICAvKiBDb25zdHJ1Y3QgdGhlIEh1ZmZtYW4gdHJlZSBieSByZXBlYXRlZGx5IGNvbWJpbmluZyB0aGUgbGVhc3QgdHdvXG4gICAqIGZyZXF1ZW50IG5vZGVzLlxuICAgKi9cbiAgbm9kZSA9IGVsZW1zOyAgICAgICAgICAgICAgLyogbmV4dCBpbnRlcm5hbCBub2RlIG9mIHRoZSB0cmVlICovXG4gIGRvIHtcbiAgICAvL3BxcmVtb3ZlKHMsIHRyZWUsIG4pOyAgLyogbiA9IG5vZGUgb2YgbGVhc3QgZnJlcXVlbmN5ICovXG4gICAgLyoqKiBwcXJlbW92ZSAqKiovXG4gICAgbiA9IHMuaGVhcFsxLypTTUFMTEVTVCovXTtcbiAgICBzLmhlYXBbMS8qU01BTExFU1QqL10gPSBzLmhlYXBbcy5oZWFwX2xlbi0tXTtcbiAgICBwcWRvd25oZWFwKHMsIHRyZWUsIDEvKlNNQUxMRVNUKi8pO1xuICAgIC8qKiovXG5cbiAgICBtID0gcy5oZWFwWzEvKlNNQUxMRVNUKi9dOyAvKiBtID0gbm9kZSBvZiBuZXh0IGxlYXN0IGZyZXF1ZW5jeSAqL1xuXG4gICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBuOyAvKiBrZWVwIHRoZSBub2RlcyBzb3J0ZWQgYnkgZnJlcXVlbmN5ICovXG4gICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBtO1xuXG4gICAgLyogQ3JlYXRlIGEgbmV3IG5vZGUgZmF0aGVyIG9mIG4gYW5kIG0gKi9cbiAgICB0cmVlW25vZGUgKiAyXS8qLkZyZXEqLyA9IHRyZWVbbiAqIDJdLyouRnJlcSovICsgdHJlZVttICogMl0vKi5GcmVxKi87XG4gICAgcy5kZXB0aFtub2RlXSA9IChzLmRlcHRoW25dID49IHMuZGVwdGhbbV0gPyBzLmRlcHRoW25dIDogcy5kZXB0aFttXSkgKyAxO1xuICAgIHRyZWVbbiAqIDIgKyAxXS8qLkRhZCovID0gdHJlZVttICogMiArIDFdLyouRGFkKi8gPSBub2RlO1xuXG4gICAgLyogYW5kIGluc2VydCB0aGUgbmV3IG5vZGUgaW4gdGhlIGhlYXAgKi9cbiAgICBzLmhlYXBbMS8qU01BTExFU1QqL10gPSBub2RlKys7XG4gICAgcHFkb3duaGVhcChzLCB0cmVlLCAxLypTTUFMTEVTVCovKTtcblxuICB9IHdoaWxlIChzLmhlYXBfbGVuID49IDIpO1xuXG4gIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gcy5oZWFwWzEvKlNNQUxMRVNUKi9dO1xuXG4gIC8qIEF0IHRoaXMgcG9pbnQsIHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQuIFdlIGNhbiBub3dcbiAgICogZ2VuZXJhdGUgdGhlIGJpdCBsZW5ndGhzLlxuICAgKi9cbiAgZ2VuX2JpdGxlbihzLCBkZXNjKTtcblxuICAvKiBUaGUgZmllbGQgbGVuIGlzIG5vdyBzZXQsIHdlIGNhbiBnZW5lcmF0ZSB0aGUgYml0IGNvZGVzICovXG4gIGdlbl9jb2Rlcyh0cmVlLCBtYXhfY29kZSwgcy5ibF9jb3VudCk7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTY2FuIGEgbGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVlIHRvIGRldGVybWluZSB0aGUgZnJlcXVlbmNpZXMgb2YgdGhlIGNvZGVzXG4gKiBpbiB0aGUgYml0IGxlbmd0aCB0cmVlLlxuICovXG5mdW5jdGlvbiBzY2FuX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgICAvKiB0aGUgdHJlZSB0byBiZSBzY2FubmVkICovXG4vLyAgICBpbnQgbWF4X2NvZGU7ICAgIC8qIGFuZCBpdHMgbGFyZ2VzdCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqL1xue1xuICB2YXIgbjsgICAgICAgICAgICAgICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIGFsbCB0cmVlIGVsZW1lbnRzICovXG4gIHZhciBwcmV2bGVuID0gLTE7ICAgICAgICAgIC8qIGxhc3QgZW1pdHRlZCBsZW5ndGggKi9cbiAgdmFyIGN1cmxlbjsgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgY29kZSAqL1xuXG4gIHZhciBuZXh0bGVuID0gdHJlZVswICogMiArIDFdLyouTGVuKi87IC8qIGxlbmd0aCBvZiBuZXh0IGNvZGUgKi9cblxuICB2YXIgY291bnQgPSAwOyAgICAgICAgICAgICAvKiByZXBlYXQgY291bnQgb2YgdGhlIGN1cnJlbnQgY29kZSAqL1xuICB2YXIgbWF4X2NvdW50ID0gNzsgICAgICAgICAvKiBtYXggcmVwZWF0IGNvdW50ICovXG4gIHZhciBtaW5fY291bnQgPSA0OyAgICAgICAgIC8qIG1pbiByZXBlYXQgY291bnQgKi9cblxuICBpZiAobmV4dGxlbiA9PT0gMCkge1xuICAgIG1heF9jb3VudCA9IDEzODtcbiAgICBtaW5fY291bnQgPSAzO1xuICB9XG4gIHRyZWVbKG1heF9jb2RlICsgMSkgKiAyICsgMV0vKi5MZW4qLyA9IDB4ZmZmZjsgLyogZ3VhcmQgKi9cblxuICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICBjdXJsZW4gPSBuZXh0bGVuO1xuICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV0vKi5MZW4qLztcblxuICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgY29udGludWU7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7XG4gICAgICBzLmJsX3RyZWVbY3VybGVuICogMl0vKi5GcmVxKi8gKz0gY291bnQ7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkge1xuXG4gICAgICBpZiAoY3VybGVuICE9PSBwcmV2bGVuKSB7IHMuYmxfdHJlZVtjdXJsZW4gKiAyXS8qLkZyZXEqLysrOyB9XG4gICAgICBzLmJsX3RyZWVbUkVQXzNfNiAqIDJdLyouRnJlcSovKys7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7XG4gICAgICBzLmJsX3RyZWVbUkVQWl8zXzEwICogMl0vKi5GcmVxKi8rKztcblxuICAgIH0gZWxzZSB7XG4gICAgICBzLmJsX3RyZWVbUkVQWl8xMV8xMzggKiAyXS8qLkZyZXEqLysrO1xuICAgIH1cblxuICAgIGNvdW50ID0gMDtcbiAgICBwcmV2bGVuID0gY3VybGVuO1xuXG4gICAgaWYgKG5leHRsZW4gPT09IDApIHtcbiAgICAgIG1heF9jb3VudCA9IDEzODtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2UgaWYgKGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgbWF4X2NvdW50ID0gNjtcbiAgICAgIG1pbl9jb3VudCA9IDM7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgbWF4X2NvdW50ID0gNztcbiAgICAgIG1pbl9jb3VudCA9IDQ7XG4gICAgfVxuICB9XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBTZW5kIGEgbGl0ZXJhbCBvciBkaXN0YW5jZSB0cmVlIGluIGNvbXByZXNzZWQgZm9ybSwgdXNpbmcgdGhlIGNvZGVzIGluXG4gKiBibF90cmVlLlxuICovXG5mdW5jdGlvbiBzZW5kX3RyZWUocywgdHJlZSwgbWF4X2NvZGUpXG4vLyAgICBkZWZsYXRlX3N0YXRlICpzO1xuLy8gICAgY3RfZGF0YSAqdHJlZTsgLyogdGhlIHRyZWUgdG8gYmUgc2Nhbm5lZCAqL1xuLy8gICAgaW50IG1heF9jb2RlOyAgICAgICAvKiBhbmQgaXRzIGxhcmdlc3QgY29kZSBvZiBub24gemVybyBmcmVxdWVuY3kgKi9cbntcbiAgdmFyIG47ICAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZXMgb3ZlciBhbGwgdHJlZSBlbGVtZW50cyAqL1xuICB2YXIgcHJldmxlbiA9IC0xOyAgICAgICAgICAvKiBsYXN0IGVtaXR0ZWQgbGVuZ3RoICovXG4gIHZhciBjdXJsZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IGNvZGUgKi9cblxuICB2YXIgbmV4dGxlbiA9IHRyZWVbMCAqIDIgKyAxXS8qLkxlbiovOyAvKiBsZW5ndGggb2YgbmV4dCBjb2RlICovXG5cbiAgdmFyIGNvdW50ID0gMDsgICAgICAgICAgICAgLyogcmVwZWF0IGNvdW50IG9mIHRoZSBjdXJyZW50IGNvZGUgKi9cbiAgdmFyIG1heF9jb3VudCA9IDc7ICAgICAgICAgLyogbWF4IHJlcGVhdCBjb3VudCAqL1xuICB2YXIgbWluX2NvdW50ID0gNDsgICAgICAgICAvKiBtaW4gcmVwZWF0IGNvdW50ICovXG5cbiAgLyogdHJlZVttYXhfY29kZSsxXS5MZW4gPSAtMTsgKi8gIC8qIGd1YXJkIGFscmVhZHkgc2V0ICovXG4gIGlmIChuZXh0bGVuID09PSAwKSB7XG4gICAgbWF4X2NvdW50ID0gMTM4O1xuICAgIG1pbl9jb3VudCA9IDM7XG4gIH1cblxuICBmb3IgKG4gPSAwOyBuIDw9IG1heF9jb2RlOyBuKyspIHtcbiAgICBjdXJsZW4gPSBuZXh0bGVuO1xuICAgIG5leHRsZW4gPSB0cmVlWyhuICsgMSkgKiAyICsgMV0vKi5MZW4qLztcblxuICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikge1xuICAgICAgY29udGludWU7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7XG4gICAgICBkbyB7IHNlbmRfY29kZShzLCBjdXJsZW4sIHMuYmxfdHJlZSk7IH0gd2hpbGUgKC0tY291bnQgIT09IDApO1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gIT09IDApIHtcbiAgICAgIGlmIChjdXJsZW4gIT09IHByZXZsZW4pIHtcbiAgICAgICAgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTtcbiAgICAgICAgY291bnQtLTtcbiAgICAgIH1cbiAgICAgIC8vQXNzZXJ0KGNvdW50ID49IDMgJiYgY291bnQgPD0gNiwgXCIgM182P1wiKTtcbiAgICAgIHNlbmRfY29kZShzLCBSRVBfM182LCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMik7XG5cbiAgICB9IGVsc2UgaWYgKGNvdW50IDw9IDEwKSB7XG4gICAgICBzZW5kX2NvZGUocywgUkVQWl8zXzEwLCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMywgMyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc2VuZF9jb2RlKHMsIFJFUFpfMTFfMTM4LCBzLmJsX3RyZWUpO1xuICAgICAgc2VuZF9iaXRzKHMsIGNvdW50IC0gMTEsIDcpO1xuICAgIH1cblxuICAgIGNvdW50ID0gMDtcbiAgICBwcmV2bGVuID0gY3VybGVuO1xuICAgIGlmIChuZXh0bGVuID09PSAwKSB7XG4gICAgICBtYXhfY291bnQgPSAxMzg7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIGlmIChjdXJsZW4gPT09IG5leHRsZW4pIHtcbiAgICAgIG1heF9jb3VudCA9IDY7XG4gICAgICBtaW5fY291bnQgPSAzO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIG1heF9jb3VudCA9IDc7XG4gICAgICBtaW5fY291bnQgPSA0O1xuICAgIH1cbiAgfVxufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29uc3RydWN0IHRoZSBIdWZmbWFuIHRyZWUgZm9yIHRoZSBiaXQgbGVuZ3RocyBhbmQgcmV0dXJuIHRoZSBpbmRleCBpblxuICogYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0aCBjb2RlIHRvIHNlbmQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkX2JsX3RyZWUocykge1xuICB2YXIgbWF4X2JsaW5kZXg7ICAvKiBpbmRleCBvZiBsYXN0IGJpdCBsZW5ndGggY29kZSBvZiBub24gemVybyBmcmVxICovXG5cbiAgLyogRGV0ZXJtaW5lIHRoZSBiaXQgbGVuZ3RoIGZyZXF1ZW5jaWVzIGZvciBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqL1xuICBzY2FuX3RyZWUocywgcy5keW5fbHRyZWUsIHMubF9kZXNjLm1heF9jb2RlKTtcbiAgc2Nhbl90cmVlKHMsIHMuZHluX2R0cmVlLCBzLmRfZGVzYy5tYXhfY29kZSk7XG5cbiAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZTogKi9cbiAgYnVpbGRfdHJlZShzLCBzLmJsX2Rlc2MpO1xuICAvKiBvcHRfbGVuIG5vdyBpbmNsdWRlcyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9ucywgZXhjZXB0XG4gICAqIHRoZSBsZW5ndGhzIG9mIHRoZSBiaXQgbGVuZ3RocyBjb2RlcyBhbmQgdGhlIDUrNSs0IGJpdHMgZm9yIHRoZSBjb3VudHMuXG4gICAqL1xuXG4gIC8qIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGJpdCBsZW5ndGggY29kZXMgdG8gc2VuZC4gVGhlIHBremlwIGZvcm1hdFxuICAgKiByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IDQgYml0IGxlbmd0aCBjb2RlcyBiZSBzZW50LiAoYXBwbm90ZS50eHQgc2F5c1xuICAgKiAzIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaXMgNC4pXG4gICAqL1xuICBmb3IgKG1heF9ibGluZGV4ID0gQkxfQ09ERVMgLSAxOyBtYXhfYmxpbmRleCA+PSAzOyBtYXhfYmxpbmRleC0tKSB7XG4gICAgaWYgKHMuYmxfdHJlZVtibF9vcmRlclttYXhfYmxpbmRleF0gKiAyICsgMV0vKi5MZW4qLyAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8qIFVwZGF0ZSBvcHRfbGVuIHRvIGluY2x1ZGUgdGhlIGJpdCBsZW5ndGggdHJlZSBhbmQgY291bnRzICovXG4gIHMub3B0X2xlbiArPSAzICogKG1heF9ibGluZGV4ICsgMSkgKyA1ICsgNSArIDQ7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuZHluIHRyZWVzOiBkeW4gJWxkLCBzdGF0ICVsZFwiLFxuICAvLyAgICAgICAgcy0+b3B0X2xlbiwgcy0+c3RhdGljX2xlbikpO1xuXG4gIHJldHVybiBtYXhfYmxpbmRleDtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgdGhlIGhlYWRlciBmb3IgYSBibG9jayB1c2luZyBkeW5hbWljIEh1ZmZtYW4gdHJlZXM6IHRoZSBjb3VudHMsIHRoZVxuICogbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcywgdGhlIGxpdGVyYWwgdHJlZSBhbmQgdGhlIGRpc3RhbmNlIHRyZWUuXG4gKiBJTiBhc3NlcnRpb246IGxjb2RlcyA+PSAyNTcsIGRjb2RlcyA+PSAxLCBibGNvZGVzID49IDQuXG4gKi9cbmZ1bmN0aW9uIHNlbmRfYWxsX3RyZWVzKHMsIGxjb2RlcywgZGNvZGVzLCBibGNvZGVzKVxuLy8gICAgZGVmbGF0ZV9zdGF0ZSAqcztcbi8vICAgIGludCBsY29kZXMsIGRjb2RlcywgYmxjb2RlczsgLyogbnVtYmVyIG9mIGNvZGVzIGZvciBlYWNoIHRyZWUgKi9cbntcbiAgdmFyIHJhbms7ICAgICAgICAgICAgICAgICAgICAvKiBpbmRleCBpbiBibF9vcmRlciAqL1xuXG4gIC8vQXNzZXJ0IChsY29kZXMgPj0gMjU3ICYmIGRjb2RlcyA+PSAxICYmIGJsY29kZXMgPj0gNCwgXCJub3QgZW5vdWdoIGNvZGVzXCIpO1xuICAvL0Fzc2VydCAobGNvZGVzIDw9IExfQ09ERVMgJiYgZGNvZGVzIDw9IERfQ09ERVMgJiYgYmxjb2RlcyA8PSBCTF9DT0RFUyxcbiAgLy8gICAgICAgIFwidG9vIG1hbnkgY29kZXNcIik7XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgY291bnRzOiBcIikpO1xuICBzZW5kX2JpdHMocywgbGNvZGVzIC0gMjU3LCA1KTsgLyogbm90ICsyNTUgYXMgc3RhdGVkIGluIGFwcG5vdGUudHh0ICovXG4gIHNlbmRfYml0cyhzLCBkY29kZXMgLSAxLCAgIDUpO1xuICBzZW5kX2JpdHMocywgYmxjb2RlcyAtIDQsICA0KTsgLyogbm90IC0zIGFzIHN0YXRlZCBpbiBhcHBub3RlLnR4dCAqL1xuICBmb3IgKHJhbmsgPSAwOyByYW5rIDwgYmxjb2RlczsgcmFuaysrKSB7XG4gICAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5ibCBjb2RlICUyZCBcIiwgYmxfb3JkZXJbcmFua10pKTtcbiAgICBzZW5kX2JpdHMocywgcy5ibF90cmVlW2JsX29yZGVyW3JhbmtdICogMiArIDFdLyouTGVuKi8sIDMpO1xuICB9XG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxuYmwgdHJlZTogc2VudCAlbGRcIiwgcy0+Yml0c19zZW50KSk7XG5cbiAgc2VuZF90cmVlKHMsIHMuZHluX2x0cmVlLCBsY29kZXMgLSAxKTsgLyogbGl0ZXJhbCB0cmVlICovXG4gIC8vVHJhY2V2KChzdGRlcnIsIFwiXFxubGl0IHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xuXG4gIHNlbmRfdHJlZShzLCBzLmR5bl9kdHJlZSwgZGNvZGVzIC0gMSk7IC8qIGRpc3RhbmNlIHRyZWUgKi9cbiAgLy9UcmFjZXYoKHN0ZGVyciwgXCJcXG5kaXN0IHRyZWU6IHNlbnQgJWxkXCIsIHMtPmJpdHNfc2VudCkpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ2hlY2sgaWYgdGhlIGRhdGEgdHlwZSBpcyBURVhUIG9yIEJJTkFSWSwgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG4gKiAtIFRFWFQgaWYgdGhlIHR3byBjb25kaXRpb25zIGJlbG93IGFyZSBzYXRpc2ZpZWQ6XG4gKiAgICBhKSBUaGVyZSBhcmUgbm8gbm9uLXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBiZWxvbmdpbmcgdG8gdGhlXG4gKiAgICAgICBcImJsYWNrIGxpc3RcIiAoMC4uNiwgMTQuLjI1LCAyOC4uMzEpLlxuICogICAgYikgVGhlcmUgaXMgYXQgbGVhc3Qgb25lIHByaW50YWJsZSBjaGFyYWN0ZXIgYmVsb25naW5nIHRvIHRoZVxuICogICAgICAgXCJ3aGl0ZSBsaXN0XCIgKDkge1RBQn0sIDEwIHtMRn0sIDEzIHtDUn0sIDMyLi4yNTUpLlxuICogLSBCSU5BUlkgb3RoZXJ3aXNlLlxuICogLSBUaGUgZm9sbG93aW5nIHBhcnRpYWxseS1wb3J0YWJsZSBjb250cm9sIGNoYXJhY3RlcnMgZm9ybSBhXG4gKiAgIFwiZ3JheSBsaXN0XCIgdGhhdCBpcyBpZ25vcmVkIGluIHRoaXMgZGV0ZWN0aW9uIGFsZ29yaXRobTpcbiAqICAgKDcge0JFTH0sIDgge0JTfSwgMTEge1ZUfSwgMTIge0ZGfSwgMjYge1NVQn0sIDI3IHtFU0N9KS5cbiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkcyBGcmVxIG9mIGR5bl9sdHJlZSBhcmUgc2V0LlxuICovXG5mdW5jdGlvbiBkZXRlY3RfZGF0YV90eXBlKHMpIHtcbiAgLyogYmxhY2tfbWFzayBpcyB0aGUgYml0IG1hc2sgb2YgYmxhY2stbGlzdGVkIGJ5dGVzXG4gICAqIHNldCBiaXRzIDAuLjYsIDE0Li4yNSwgYW5kIDI4Li4zMVxuICAgKiAweGYzZmZjMDdmID0gYmluYXJ5IDExMTEwMDExMTExMTExMTExMTAwMDAwMDAxMTExMTExXG4gICAqL1xuICB2YXIgYmxhY2tfbWFzayA9IDB4ZjNmZmMwN2Y7XG4gIHZhciBuO1xuXG4gIC8qIENoZWNrIGZvciBub24tdGV4dHVhbCAoXCJibGFjay1saXN0ZWRcIikgYnl0ZXMuICovXG4gIGZvciAobiA9IDA7IG4gPD0gMzE7IG4rKywgYmxhY2tfbWFzayA+Pj49IDEpIHtcbiAgICBpZiAoKGJsYWNrX21hc2sgJiAxKSAmJiAocy5keW5fbHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSkge1xuICAgICAgcmV0dXJuIFpfQklOQVJZO1xuICAgIH1cbiAgfVxuXG4gIC8qIENoZWNrIGZvciB0ZXh0dWFsIChcIndoaXRlLWxpc3RlZFwiKSBieXRlcy4gKi9cbiAgaWYgKHMuZHluX2x0cmVlWzkgKiAyXS8qLkZyZXEqLyAhPT0gMCB8fCBzLmR5bl9sdHJlZVsxMCAqIDJdLyouRnJlcSovICE9PSAwIHx8XG4gICAgICBzLmR5bl9sdHJlZVsxMyAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgcmV0dXJuIFpfVEVYVDtcbiAgfVxuICBmb3IgKG4gPSAzMjsgbiA8IExJVEVSQUxTOyBuKyspIHtcbiAgICBpZiAocy5keW5fbHRyZWVbbiAqIDJdLyouRnJlcSovICE9PSAwKSB7XG4gICAgICByZXR1cm4gWl9URVhUO1xuICAgIH1cbiAgfVxuXG4gIC8qIFRoZXJlIGFyZSBubyBcImJsYWNrLWxpc3RlZFwiIG9yIFwid2hpdGUtbGlzdGVkXCIgYnl0ZXM6XG4gICAqIHRoaXMgc3RyZWFtIGVpdGhlciBpcyBlbXB0eSBvciBoYXMgdG9sZXJhdGVkIChcImdyYXktbGlzdGVkXCIpIGJ5dGVzIG9ubHkuXG4gICAqL1xuICByZXR1cm4gWl9CSU5BUlk7XG59XG5cblxudmFyIHN0YXRpY19pbml0X2RvbmUgPSBmYWxzZTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBJbml0aWFsaXplIHRoZSB0cmVlIGRhdGEgc3RydWN0dXJlcyBmb3IgYSBuZXcgemxpYiBzdHJlYW0uXG4gKi9cbmZ1bmN0aW9uIF90cl9pbml0KHMpXG57XG5cbiAgaWYgKCFzdGF0aWNfaW5pdF9kb25lKSB7XG4gICAgdHJfc3RhdGljX2luaXQoKTtcbiAgICBzdGF0aWNfaW5pdF9kb25lID0gdHJ1ZTtcbiAgfVxuXG4gIHMubF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9sdHJlZSwgc3RhdGljX2xfZGVzYyk7XG4gIHMuZF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9kdHJlZSwgc3RhdGljX2RfZGVzYyk7XG4gIHMuYmxfZGVzYyA9IG5ldyBUcmVlRGVzYyhzLmJsX3RyZWUsIHN0YXRpY19ibF9kZXNjKTtcblxuICBzLmJpX2J1ZiA9IDA7XG4gIHMuYmlfdmFsaWQgPSAwO1xuXG4gIC8qIEluaXRpYWxpemUgdGhlIGZpcnN0IGJsb2NrIG9mIHRoZSBmaXJzdCBmaWxlOiAqL1xuICBpbml0X2Jsb2NrKHMpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2VuZCBhIHN0b3JlZCBibG9ja1xuICovXG5mdW5jdGlvbiBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdClcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jayAqL1xuLy91bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi9cbi8vaW50IGxhc3Q7ICAgICAgICAgLyogb25lIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqL1xue1xuICBzZW5kX2JpdHMocywgKFNUT1JFRF9CTE9DSyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTsgICAgLyogc2VuZCBibG9jayB0eXBlICovXG4gIGNvcHlfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCB0cnVlKTsgLyogd2l0aCBoZWFkZXIgKi9cbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNlbmQgb25lIGVtcHR5IHN0YXRpYyBibG9jayB0byBnaXZlIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUuXG4gKiBUaGlzIHRha2VzIDEwIGJpdHMsIG9mIHdoaWNoIDcgbWF5IHJlbWFpbiBpbiB0aGUgYml0IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gX3RyX2FsaWduKHMpIHtcbiAgc2VuZF9iaXRzKHMsIFNUQVRJQ19UUkVFUyA8PCAxLCAzKTtcbiAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgc3RhdGljX2x0cmVlKTtcbiAgYmlfZmx1c2gocyk7XG59XG5cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50IGJsb2NrOiBkeW5hbWljIHRyZWVzLCBzdGF0aWNcbiAqIHRyZWVzIG9yIHN0b3JlLCBhbmQgb3V0cHV0IHRoZSBlbmNvZGVkIGJsb2NrIHRvIHRoZSB6aXAgZmlsZS5cbiAqL1xuZnVuY3Rpb24gX3RyX2ZsdXNoX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdClcbi8vRGVmbGF0ZVN0YXRlICpzO1xuLy9jaGFyZiAqYnVmOyAgICAgICAvKiBpbnB1dCBibG9jaywgb3IgTlVMTCBpZiB0b28gb2xkICovXG4vL3VsZyBzdG9yZWRfbGVuOyAgIC8qIGxlbmd0aCBvZiBpbnB1dCBibG9jayAqL1xuLy9pbnQgbGFzdDsgICAgICAgICAvKiBvbmUgaWYgdGhpcyBpcyB0aGUgbGFzdCBibG9jayBmb3IgYSBmaWxlICovXG57XG4gIHZhciBvcHRfbGVuYiwgc3RhdGljX2xlbmI7ICAvKiBvcHRfbGVuIGFuZCBzdGF0aWNfbGVuIGluIGJ5dGVzICovXG4gIHZhciBtYXhfYmxpbmRleCA9IDA7ICAgICAgICAvKiBpbmRleCBvZiBsYXN0IGJpdCBsZW5ndGggY29kZSBvZiBub24gemVybyBmcmVxICovXG5cbiAgLyogQnVpbGQgdGhlIEh1ZmZtYW4gdHJlZXMgdW5sZXNzIGEgc3RvcmVkIGJsb2NrIGlzIGZvcmNlZCAqL1xuICBpZiAocy5sZXZlbCA+IDApIHtcblxuICAgIC8qIENoZWNrIGlmIHRoZSBmaWxlIGlzIGJpbmFyeSBvciB0ZXh0ICovXG4gICAgaWYgKHMuc3RybS5kYXRhX3R5cGUgPT09IFpfVU5LTk9XTikge1xuICAgICAgcy5zdHJtLmRhdGFfdHlwZSA9IGRldGVjdF9kYXRhX3R5cGUocyk7XG4gICAgfVxuXG4gICAgLyogQ29uc3RydWN0IHRoZSBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqL1xuICAgIGJ1aWxkX3RyZWUocywgcy5sX2Rlc2MpO1xuICAgIC8vIFRyYWNldigoc3RkZXJyLCBcIlxcbmxpdCBkYXRhOiBkeW4gJWxkLCBzdGF0ICVsZFwiLCBzLT5vcHRfbGVuLFxuICAgIC8vICAgICAgICBzLT5zdGF0aWNfbGVuKSk7XG5cbiAgICBidWlsZF90cmVlKHMsIHMuZF9kZXNjKTtcbiAgICAvLyBUcmFjZXYoKHN0ZGVyciwgXCJcXG5kaXN0IGRhdGE6IGR5biAlbGQsIHN0YXQgJWxkXCIsIHMtPm9wdF9sZW4sXG4gICAgLy8gICAgICAgIHMtPnN0YXRpY19sZW4pKTtcbiAgICAvKiBBdCB0aGlzIHBvaW50LCBvcHRfbGVuIGFuZCBzdGF0aWNfbGVuIGFyZSB0aGUgdG90YWwgYml0IGxlbmd0aHMgb2ZcbiAgICAgKiB0aGUgY29tcHJlc3NlZCBibG9jayBkYXRhLCBleGNsdWRpbmcgdGhlIHRyZWUgcmVwcmVzZW50YXRpb25zLlxuICAgICAqL1xuXG4gICAgLyogQnVpbGQgdGhlIGJpdCBsZW5ndGggdHJlZSBmb3IgdGhlIGFib3ZlIHR3byB0cmVlcywgYW5kIGdldCB0aGUgaW5kZXhcbiAgICAgKiBpbiBibF9vcmRlciBvZiB0aGUgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgdG8gc2VuZC5cbiAgICAgKi9cbiAgICBtYXhfYmxpbmRleCA9IGJ1aWxkX2JsX3RyZWUocyk7XG5cbiAgICAvKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcuIENvbXB1dGUgdGhlIGJsb2NrIGxlbmd0aHMgaW4gYnl0ZXMuICovXG4gICAgb3B0X2xlbmIgPSAocy5vcHRfbGVuICsgMyArIDcpID4+PiAzO1xuICAgIHN0YXRpY19sZW5iID0gKHMuc3RhdGljX2xlbiArIDMgKyA3KSA+Pj4gMztcblxuICAgIC8vIFRyYWNldigoc3RkZXJyLCBcIlxcbm9wdCAlbHUoJWx1KSBzdGF0ICVsdSglbHUpIHN0b3JlZCAlbHUgbGl0ICV1IFwiLFxuICAgIC8vICAgICAgICBvcHRfbGVuYiwgcy0+b3B0X2xlbiwgc3RhdGljX2xlbmIsIHMtPnN0YXRpY19sZW4sIHN0b3JlZF9sZW4sXG4gICAgLy8gICAgICAgIHMtPmxhc3RfbGl0KSk7XG5cbiAgICBpZiAoc3RhdGljX2xlbmIgPD0gb3B0X2xlbmIpIHsgb3B0X2xlbmIgPSBzdGF0aWNfbGVuYjsgfVxuXG4gIH0gZWxzZSB7XG4gICAgLy8gQXNzZXJ0KGJ1ZiAhPSAoY2hhciopMCwgXCJsb3N0IGJ1ZlwiKTtcbiAgICBvcHRfbGVuYiA9IHN0YXRpY19sZW5iID0gc3RvcmVkX2xlbiArIDU7IC8qIGZvcmNlIGEgc3RvcmVkIGJsb2NrICovXG4gIH1cblxuICBpZiAoKHN0b3JlZF9sZW4gKyA0IDw9IG9wdF9sZW5iKSAmJiAoYnVmICE9PSAtMSkpIHtcbiAgICAvKiA0OiB0d28gd29yZHMgZm9yIHRoZSBsZW5ndGhzICovXG5cbiAgICAvKiBUaGUgdGVzdCBidWYgIT0gTlVMTCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBMSVRfQlVGU0laRSA+IFdTSVpFLlxuICAgICAqIE90aGVyd2lzZSB3ZSBjYW4ndCBoYXZlIHByb2Nlc3NlZCBtb3JlIHRoYW4gV1NJWkUgaW5wdXQgYnl0ZXMgc2luY2VcbiAgICAgKiB0aGUgbGFzdCBibG9jayBmbHVzaCwgYmVjYXVzZSBjb21wcmVzc2lvbiB3b3VsZCBoYXZlIGJlZW5cbiAgICAgKiBzdWNjZXNzZnVsLiBJZiBMSVRfQlVGU0laRSA8PSBXU0laRSwgaXQgaXMgbmV2ZXIgdG9vIGxhdGUgdG9cbiAgICAgKiB0cmFuc2Zvcm0gYSBibG9jayBpbnRvIGEgc3RvcmVkIGJsb2NrLlxuICAgICAqL1xuICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KTtcblxuICB9IGVsc2UgaWYgKHMuc3RyYXRlZ3kgPT09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT09IG9wdF9sZW5iKSB7XG5cbiAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTtcbiAgICBjb21wcmVzc19ibG9jayhzLCBzdGF0aWNfbHRyZWUsIHN0YXRpY19kdHJlZSk7XG5cbiAgfSBlbHNlIHtcbiAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUyA8PCAxKSArIChsYXN0ID8gMSA6IDApLCAzKTtcbiAgICBzZW5kX2FsbF90cmVlcyhzLCBzLmxfZGVzYy5tYXhfY29kZSArIDEsIHMuZF9kZXNjLm1heF9jb2RlICsgMSwgbWF4X2JsaW5kZXggKyAxKTtcbiAgICBjb21wcmVzc19ibG9jayhzLCBzLmR5bl9sdHJlZSwgcy5keW5fZHRyZWUpO1xuICB9XG4gIC8vIEFzc2VydCAocy0+Y29tcHJlc3NlZF9sZW4gPT0gcy0+Yml0c19zZW50LCBcImJhZCBjb21wcmVzc2VkIHNpemVcIik7XG4gIC8qIFRoZSBhYm92ZSBjaGVjayBpcyBtYWRlIG1vZCAyXjMyLCBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gNTEyIE1CXG4gICAqIGFuZCB1TG9uZyBpbXBsZW1lbnRlZCBvbiAzMiBiaXRzLlxuICAgKi9cbiAgaW5pdF9ibG9jayhzKTtcblxuICBpZiAobGFzdCkge1xuICAgIGJpX3dpbmR1cChzKTtcbiAgfVxuICAvLyBUcmFjZXYoKHN0ZGVycixcIlxcbmNvbXBybGVuICVsdSglbHUpIFwiLCBzLT5jb21wcmVzc2VkX2xlbj4+MyxcbiAgLy8gICAgICAgcy0+Y29tcHJlc3NlZF9sZW4tNypsYXN0KSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogU2F2ZSB0aGUgbWF0Y2ggaW5mbyBhbmQgdGFsbHkgdGhlIGZyZXF1ZW5jeSBjb3VudHMuIFJldHVybiB0cnVlIGlmXG4gKiB0aGUgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQuXG4gKi9cbmZ1bmN0aW9uIF90cl90YWxseShzLCBkaXN0LCBsYylcbi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7XG4vLyAgICB1bnNpZ25lZCBkaXN0OyAgLyogZGlzdGFuY2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi9cbi8vICAgIHVuc2lnbmVkIGxjOyAgICAvKiBtYXRjaCBsZW5ndGgtTUlOX01BVENIIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0PT0wKSAqL1xue1xuICAvL3ZhciBvdXRfbGVuZ3RoLCBpbl9sZW5ndGgsIGRjb2RlO1xuXG4gIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyXSAgICAgPSAoZGlzdCA+Pj4gOCkgJiAweGZmO1xuICBzLnBlbmRpbmdfYnVmW3MuZF9idWYgKyBzLmxhc3RfbGl0ICogMiArIDFdID0gZGlzdCAmIDB4ZmY7XG5cbiAgcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgcy5sYXN0X2xpdF0gPSBsYyAmIDB4ZmY7XG4gIHMubGFzdF9saXQrKztcblxuICBpZiAoZGlzdCA9PT0gMCkge1xuICAgIC8qIGxjIGlzIHRoZSB1bm1hdGNoZWQgY2hhciAqL1xuICAgIHMuZHluX2x0cmVlW2xjICogMl0vKi5GcmVxKi8rKztcbiAgfSBlbHNlIHtcbiAgICBzLm1hdGNoZXMrKztcbiAgICAvKiBIZXJlLCBsYyBpcyB0aGUgbWF0Y2ggbGVuZ3RoIC0gTUlOX01BVENIICovXG4gICAgZGlzdC0tOyAgICAgICAgICAgICAvKiBkaXN0ID0gbWF0Y2ggZGlzdGFuY2UgLSAxICovXG4gICAgLy9Bc3NlcnQoKHVzaClkaXN0IDwgKHVzaClNQVhfRElTVChzKSAmJlxuICAgIC8vICAgICAgICh1c2gpbGMgPD0gKHVzaCkoTUFYX01BVENILU1JTl9NQVRDSCkgJiZcbiAgICAvLyAgICAgICAodXNoKWRfY29kZShkaXN0KSA8ICh1c2gpRF9DT0RFUywgIFwiX3RyX3RhbGx5OiBiYWQgbWF0Y2hcIik7XG5cbiAgICBzLmR5bl9sdHJlZVsoX2xlbmd0aF9jb2RlW2xjXSArIExJVEVSQUxTICsgMSkgKiAyXS8qLkZyZXEqLysrO1xuICAgIHMuZHluX2R0cmVlW2RfY29kZShkaXN0KSAqIDJdLyouRnJlcSovKys7XG4gIH1cblxuLy8gKCEpIFRoaXMgYmxvY2sgaXMgZGlzYWJsZWQgaW4gemxpYiBkZWZhaWx0cyxcbi8vIGRvbid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHlcblxuLy8jaWZkZWYgVFJVTkNBVEVfQkxPQ0tcbi8vICAvKiBUcnkgdG8gZ3Vlc3MgaWYgaXQgaXMgcHJvZml0YWJsZSB0byBzdG9wIHRoZSBjdXJyZW50IGJsb2NrIGhlcmUgKi9cbi8vICBpZiAoKHMubGFzdF9saXQgJiAweDFmZmYpID09PSAwICYmIHMubGV2ZWwgPiAyKSB7XG4vLyAgICAvKiBDb21wdXRlIGFuIHVwcGVyIGJvdW5kIGZvciB0aGUgY29tcHJlc3NlZCBsZW5ndGggKi9cbi8vICAgIG91dF9sZW5ndGggPSBzLmxhc3RfbGl0Kjg7XG4vLyAgICBpbl9sZW5ndGggPSBzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydDtcbi8vXG4vLyAgICBmb3IgKGRjb2RlID0gMDsgZGNvZGUgPCBEX0NPREVTOyBkY29kZSsrKSB7XG4vLyAgICAgIG91dF9sZW5ndGggKz0gcy5keW5fZHRyZWVbZGNvZGUqMl0vKi5GcmVxKi8gKiAoNSArIGV4dHJhX2RiaXRzW2Rjb2RlXSk7XG4vLyAgICB9XG4vLyAgICBvdXRfbGVuZ3RoID4+Pj0gMztcbi8vICAgIC8vVHJhY2V2KChzdGRlcnIsXCJcXG5sYXN0X2xpdCAldSwgaW4gJWxkLCBvdXQgfiVsZCglbGQlJSkgXCIsXG4vLyAgICAvLyAgICAgICBzLT5sYXN0X2xpdCwgaW5fbGVuZ3RoLCBvdXRfbGVuZ3RoLFxuLy8gICAgLy8gICAgICAgMTAwTCAtIG91dF9sZW5ndGgqMTAwTC9pbl9sZW5ndGgpKTtcbi8vICAgIGlmIChzLm1hdGNoZXMgPCAocy5sYXN0X2xpdD4+MSkvKmludCAvMiovICYmIG91dF9sZW5ndGggPCAoaW5fbGVuZ3RoPj4xKS8qaW50IC8yKi8pIHtcbi8vICAgICAgcmV0dXJuIHRydWU7XG4vLyAgICB9XG4vLyAgfVxuLy8jZW5kaWZcblxuICByZXR1cm4gKHMubGFzdF9saXQgPT09IHMubGl0X2J1ZnNpemUgLSAxKTtcbiAgLyogV2UgYXZvaWQgZXF1YWxpdHkgd2l0aCBsaXRfYnVmc2l6ZSBiZWNhdXNlIG9mIHdyYXBhcm91bmQgYXQgNjRLXG4gICAqIG9uIDE2IGJpdCBtYWNoaW5lcyBhbmQgYmVjYXVzZSBzdG9yZWQgYmxvY2tzIGFyZSByZXN0cmljdGVkIHRvXG4gICAqIDY0Sy0xIGJ5dGVzLlxuICAgKi9cbn1cblxuZXhwb3J0cy5fdHJfaW5pdCAgPSBfdHJfaW5pdDtcbmV4cG9ydHMuX3RyX3N0b3JlZF9ibG9jayA9IF90cl9zdG9yZWRfYmxvY2s7XG5leHBvcnRzLl90cl9mbHVzaF9ibG9jayAgPSBfdHJfZmx1c2hfYmxvY2s7XG5leHBvcnRzLl90cl90YWxseSA9IF90cl90YWxseTtcbmV4cG9ydHMuX3RyX2FsaWduID0gX3RyX2FsaWduO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbmZ1bmN0aW9uIFpTdHJlYW0oKSB7XG4gIC8qIG5leHQgaW5wdXQgYnl0ZSAqL1xuICB0aGlzLmlucHV0ID0gbnVsbDsgLy8gSlMgc3BlY2lmaWMsIGJlY2F1c2Ugd2UgaGF2ZSBubyBwb2ludGVyc1xuICB0aGlzLm5leHRfaW4gPSAwO1xuICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IGlucHV0ICovXG4gIHRoaXMuYXZhaWxfaW4gPSAwO1xuICAvKiB0b3RhbCBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi9cbiAgdGhpcy50b3RhbF9pbiA9IDA7XG4gIC8qIG5leHQgb3V0cHV0IGJ5dGUgc2hvdWxkIGJlIHB1dCB0aGVyZSAqL1xuICB0aGlzLm91dHB1dCA9IG51bGw7IC8vIEpTIHNwZWNpZmljLCBiZWNhdXNlIHdlIGhhdmUgbm8gcG9pbnRlcnNcbiAgdGhpcy5uZXh0X291dCA9IDA7XG4gIC8qIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG91dHB1dCAqL1xuICB0aGlzLmF2YWlsX291dCA9IDA7XG4gIC8qIHRvdGFsIG51bWJlciBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovXG4gIHRoaXMudG90YWxfb3V0ID0gMDtcbiAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovXG4gIHRoaXMubXNnID0gJycvKlpfTlVMTCovO1xuICAvKiBub3QgdmlzaWJsZSBieSBhcHBsaWNhdGlvbnMgKi9cbiAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQgKi9cbiAgdGhpcy5kYXRhX3R5cGUgPSAyLypaX1VOS05PV04qLztcbiAgLyogYWRsZXIzMiB2YWx1ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgKi9cbiAgdGhpcy5hZGxlciA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWlN0cmVhbTtcbiIsIm1vZHVsZS5leHBvcnRzPXtcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjFcIjogXCJhZXMtMTI4LWVjYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yXCI6IFwiYWVzLTEyOC1jYmNcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuM1wiOiBcImFlcy0xMjgtb2ZiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjRcIjogXCJhZXMtMTI4LWNmYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMVwiOiBcImFlcy0xOTItZWNiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIyXCI6IFwiYWVzLTE5Mi1jYmNcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjNcIjogXCJhZXMtMTkyLW9mYlwiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNFwiOiBcImFlcy0xOTItY2ZiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQxXCI6IFwiYWVzLTI1Ni1lY2JcIixcblwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDJcIjogXCJhZXMtMjU2LWNiY1wiLFxuXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40M1wiOiBcImFlcy0yNTYtb2ZiXCIsXG5cIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0XCI6IFwiYWVzLTI1Ni1jZmJcIlxufSIsIi8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvc2VsZi1zaWduZWQvYmxvYi9naC1wYWdlcy9saWIvYXNuMS5qc1xuLy8gRmVkb3IsIHlvdSBhcmUgYW1hemluZy5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYXNuMSA9IHJlcXVpcmUoJ2FzbjEuanMnKVxuXG5leHBvcnRzLmNlcnRpZmljYXRlID0gcmVxdWlyZSgnLi9jZXJ0aWZpY2F0ZScpXG5cbnZhciBSU0FQcml2YXRlS2V5ID0gYXNuMS5kZWZpbmUoJ1JTQVByaXZhdGVLZXknLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd2ZXJzaW9uJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ21vZHVsdXMnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHVibGljRXhwb25lbnQnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHJpdmF0ZUV4cG9uZW50JykuaW50KCksXG4gICAgdGhpcy5rZXkoJ3ByaW1lMScpLmludCgpLFxuICAgIHRoaXMua2V5KCdwcmltZTInKS5pbnQoKSxcbiAgICB0aGlzLmtleSgnZXhwb25lbnQxJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ2V4cG9uZW50MicpLmludCgpLFxuICAgIHRoaXMua2V5KCdjb2VmZmljaWVudCcpLmludCgpXG4gIClcbn0pXG5leHBvcnRzLlJTQVByaXZhdGVLZXkgPSBSU0FQcml2YXRlS2V5XG5cbnZhciBSU0FQdWJsaWNLZXkgPSBhc24xLmRlZmluZSgnUlNBUHVibGljS2V5JywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgnbW9kdWx1cycpLmludCgpLFxuICAgIHRoaXMua2V5KCdwdWJsaWNFeHBvbmVudCcpLmludCgpXG4gIClcbn0pXG5leHBvcnRzLlJTQVB1YmxpY0tleSA9IFJTQVB1YmxpY0tleVxuXG52YXIgUHVibGljS2V5ID0gYXNuMS5kZWZpbmUoJ1N1YmplY3RQdWJsaWNLZXlJbmZvJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgnYWxnb3JpdGhtJykudXNlKEFsZ29yaXRobUlkZW50aWZpZXIpLFxuICAgIHRoaXMua2V5KCdzdWJqZWN0UHVibGljS2V5JykuYml0c3RyKClcbiAgKVxufSlcbmV4cG9ydHMuUHVibGljS2V5ID0gUHVibGljS2V5XG5cbnZhciBBbGdvcml0aG1JZGVudGlmaWVyID0gYXNuMS5kZWZpbmUoJ0FsZ29yaXRobUlkZW50aWZpZXInLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCdhbGdvcml0aG0nKS5vYmppZCgpLFxuICAgIHRoaXMua2V5KCdub25lJykubnVsbF8oKS5vcHRpb25hbCgpLFxuICAgIHRoaXMua2V5KCdjdXJ2ZScpLm9iamlkKCkub3B0aW9uYWwoKSxcbiAgICB0aGlzLmtleSgncGFyYW1zJykuc2VxKCkub2JqKFxuICAgICAgdGhpcy5rZXkoJ3AnKS5pbnQoKSxcbiAgICAgIHRoaXMua2V5KCdxJykuaW50KCksXG4gICAgICB0aGlzLmtleSgnZycpLmludCgpXG4gICAgKS5vcHRpb25hbCgpXG4gIClcbn0pXG5cbnZhciBQcml2YXRlS2V5SW5mbyA9IGFzbjEuZGVmaW5lKCdQcml2YXRlS2V5SW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3ZlcnNpb24nKS5pbnQoKSxcbiAgICB0aGlzLmtleSgnYWxnb3JpdGhtJykudXNlKEFsZ29yaXRobUlkZW50aWZpZXIpLFxuICAgIHRoaXMua2V5KCdzdWJqZWN0UHJpdmF0ZUtleScpLm9jdHN0cigpXG4gIClcbn0pXG5leHBvcnRzLlByaXZhdGVLZXkgPSBQcml2YXRlS2V5SW5mb1xudmFyIEVuY3J5cHRlZFByaXZhdGVLZXlJbmZvID0gYXNuMS5kZWZpbmUoJ0VuY3J5cHRlZFByaXZhdGVLZXlJbmZvJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgnYWxnb3JpdGhtJykuc2VxKCkub2JqKFxuICAgICAgdGhpcy5rZXkoJ2lkJykub2JqaWQoKSxcbiAgICAgIHRoaXMua2V5KCdkZWNyeXB0Jykuc2VxKCkub2JqKFxuICAgICAgICB0aGlzLmtleSgna2RlJykuc2VxKCkub2JqKFxuICAgICAgICAgIHRoaXMua2V5KCdpZCcpLm9iamlkKCksXG4gICAgICAgICAgdGhpcy5rZXkoJ2tkZXBhcmFtcycpLnNlcSgpLm9iaihcbiAgICAgICAgICAgIHRoaXMua2V5KCdzYWx0Jykub2N0c3RyKCksXG4gICAgICAgICAgICB0aGlzLmtleSgnaXRlcnMnKS5pbnQoKVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy5rZXkoJ2NpcGhlcicpLnNlcSgpLm9iaihcbiAgICAgICAgICB0aGlzLmtleSgnYWxnbycpLm9iamlkKCksXG4gICAgICAgICAgdGhpcy5rZXkoJ2l2Jykub2N0c3RyKClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgdGhpcy5rZXkoJ3N1YmplY3RQcml2YXRlS2V5Jykub2N0c3RyKClcbiAgKVxufSlcblxuZXhwb3J0cy5FbmNyeXB0ZWRQcml2YXRlS2V5ID0gRW5jcnlwdGVkUHJpdmF0ZUtleUluZm9cblxudmFyIERTQVByaXZhdGVLZXkgPSBhc24xLmRlZmluZSgnRFNBUHJpdmF0ZUtleScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZXEoKS5vYmooXG4gICAgdGhpcy5rZXkoJ3ZlcnNpb24nKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncCcpLmludCgpLFxuICAgIHRoaXMua2V5KCdxJykuaW50KCksXG4gICAgdGhpcy5rZXkoJ2cnKS5pbnQoKSxcbiAgICB0aGlzLmtleSgncHViX2tleScpLmludCgpLFxuICAgIHRoaXMua2V5KCdwcml2X2tleScpLmludCgpXG4gIClcbn0pXG5leHBvcnRzLkRTQVByaXZhdGVLZXkgPSBEU0FQcml2YXRlS2V5XG5cbmV4cG9ydHMuRFNBcGFyYW0gPSBhc24xLmRlZmluZSgnRFNBcGFyYW0nLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaW50KClcbn0pXG5cbnZhciBFQ1ByaXZhdGVLZXkgPSBhc24xLmRlZmluZSgnRUNQcml2YXRlS2V5JywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgndmVyc2lvbicpLmludCgpLFxuICAgIHRoaXMua2V5KCdwcml2YXRlS2V5Jykub2N0c3RyKCksXG4gICAgdGhpcy5rZXkoJ3BhcmFtZXRlcnMnKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZShFQ1BhcmFtZXRlcnMpLFxuICAgIHRoaXMua2V5KCdwdWJsaWNLZXknKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpXG4gIClcbn0pXG5leHBvcnRzLkVDUHJpdmF0ZUtleSA9IEVDUHJpdmF0ZUtleVxuXG52YXIgRUNQYXJhbWV0ZXJzID0gYXNuMS5kZWZpbmUoJ0VDUGFyYW1ldGVycycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jaG9pY2Uoe1xuICAgIG5hbWVkQ3VydmU6IHRoaXMub2JqaWQoKVxuICB9KVxufSlcblxuZXhwb3J0cy5zaWduYXR1cmUgPSBhc24xLmRlZmluZSgnc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgncicpLmludCgpLFxuICAgIHRoaXMua2V5KCdzJykuaW50KClcbiAgKVxufSlcbiIsIi8vIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1JhbnRhbmVuL25vZGUtZHRscy9ibG9iLzI1YTdkYzg2MWJkYTM4Y2ZlYWM5M2E3MjM1MDBlZWE0ZjBhYzJlODYvQ2VydGlmaWNhdGUuanNcbi8vIHRoYW5rcyB0byBAUmFudGFuZW5cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBhc24gPSByZXF1aXJlKCdhc24xLmpzJylcblxudmFyIFRpbWUgPSBhc24uZGVmaW5lKCdUaW1lJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLmNob2ljZSh7XG4gICAgdXRjVGltZTogdGhpcy51dGN0aW1lKCksXG4gICAgZ2VuZXJhbFRpbWU6IHRoaXMuZ2VudGltZSgpXG4gIH0pXG59KVxuXG52YXIgQXR0cmlidXRlVHlwZVZhbHVlID0gYXNuLmRlZmluZSgnQXR0cmlidXRlVHlwZVZhbHVlJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgndHlwZScpLm9iamlkKCksXG4gICAgdGhpcy5rZXkoJ3ZhbHVlJykuYW55KClcbiAgKVxufSlcblxudmFyIEFsZ29yaXRobUlkZW50aWZpZXIgPSBhc24uZGVmaW5lKCdBbGdvcml0aG1JZGVudGlmaWVyJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgnYWxnb3JpdGhtJykub2JqaWQoKSxcbiAgICB0aGlzLmtleSgncGFyYW1ldGVycycpLm9wdGlvbmFsKClcbiAgKVxufSlcblxudmFyIFN1YmplY3RQdWJsaWNLZXlJbmZvID0gYXNuLmRlZmluZSgnU3ViamVjdFB1YmxpY0tleUluZm8nLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCdhbGdvcml0aG0nKS51c2UoQWxnb3JpdGhtSWRlbnRpZmllciksXG4gICAgdGhpcy5rZXkoJ3N1YmplY3RQdWJsaWNLZXknKS5iaXRzdHIoKVxuICApXG59KVxuXG52YXIgUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSA9IGFzbi5kZWZpbmUoJ1JlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2V0b2YoQXR0cmlidXRlVHlwZVZhbHVlKVxufSlcblxudmFyIFJETlNlcXVlbmNlID0gYXNuLmRlZmluZSgnUkROU2VxdWVuY2UnLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2Vxb2YoUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSlcbn0pXG5cbnZhciBOYW1lID0gYXNuLmRlZmluZSgnTmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jaG9pY2Uoe1xuICAgIHJkblNlcXVlbmNlOiB0aGlzLnVzZShSRE5TZXF1ZW5jZSlcbiAgfSlcbn0pXG5cbnZhciBWYWxpZGl0eSA9IGFzbi5kZWZpbmUoJ1ZhbGlkaXR5JywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgnbm90QmVmb3JlJykudXNlKFRpbWUpLFxuICAgIHRoaXMua2V5KCdub3RBZnRlcicpLnVzZShUaW1lKVxuICApXG59KVxuXG52YXIgRXh0ZW5zaW9uID0gYXNuLmRlZmluZSgnRXh0ZW5zaW9uJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgnZXh0bklEJykub2JqaWQoKSxcbiAgICB0aGlzLmtleSgnY3JpdGljYWwnKS5ib29sKCkuZGVmKGZhbHNlKSxcbiAgICB0aGlzLmtleSgnZXh0blZhbHVlJykub2N0c3RyKClcbiAgKVxufSlcblxudmFyIFRCU0NlcnRpZmljYXRlID0gYXNuLmRlZmluZSgnVEJTQ2VydGlmaWNhdGUnLCBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuc2VxKCkub2JqKFxuICAgIHRoaXMua2V5KCd2ZXJzaW9uJykuZXhwbGljaXQoMCkuaW50KCksXG4gICAgdGhpcy5rZXkoJ3NlcmlhbE51bWJlcicpLmludCgpLFxuICAgIHRoaXMua2V5KCdzaWduYXR1cmUnKS51c2UoQWxnb3JpdGhtSWRlbnRpZmllciksXG4gICAgdGhpcy5rZXkoJ2lzc3VlcicpLnVzZShOYW1lKSxcbiAgICB0aGlzLmtleSgndmFsaWRpdHknKS51c2UoVmFsaWRpdHkpLFxuICAgIHRoaXMua2V5KCdzdWJqZWN0JykudXNlKE5hbWUpLFxuICAgIHRoaXMua2V5KCdzdWJqZWN0UHVibGljS2V5SW5mbycpLnVzZShTdWJqZWN0UHVibGljS2V5SW5mbyksXG4gICAgdGhpcy5rZXkoJ2lzc3VlclVuaXF1ZUlEJykuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSxcbiAgICB0aGlzLmtleSgnc3ViamVjdFVuaXF1ZUlEJykuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSxcbiAgICB0aGlzLmtleSgnZXh0ZW5zaW9ucycpLmV4cGxpY2l0KDMpLnNlcW9mKEV4dGVuc2lvbikub3B0aW9uYWwoKVxuICApXG59KVxuXG52YXIgWDUwOUNlcnRpZmljYXRlID0gYXNuLmRlZmluZSgnWDUwOUNlcnRpZmljYXRlJywgZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcSgpLm9iaihcbiAgICB0aGlzLmtleSgndGJzQ2VydGlmaWNhdGUnKS51c2UoVEJTQ2VydGlmaWNhdGUpLFxuICAgIHRoaXMua2V5KCdzaWduYXR1cmVBbGdvcml0aG0nKS51c2UoQWxnb3JpdGhtSWRlbnRpZmllciksXG4gICAgdGhpcy5rZXkoJ3NpZ25hdHVyZVZhbHVlJykuYml0c3RyKClcbiAgKVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSBYNTA5Q2VydGlmaWNhdGVcbiIsIi8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYXBhdGlsL3BlbXN0cmlwXG52YXIgZmluZFByb2MgPSAvUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFxcblxccj9ERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspXFxuXFxyP1xcblxccj8oWzAtOUEtelxcblxcclxcK1xcL1xcPV0rKVxcblxccj8vbVxudmFyIHN0YXJ0UmVnZXggPSAvXi0tLS0tQkVHSU4gKCg/Oi4qIEtFWSl8Q0VSVElGSUNBVEUpLS0tLS1cXG4vbVxudmFyIGZ1bGxSZWdleCA9IC9eLS0tLS1CRUdJTiAoKD86LiogS0VZKXxDRVJUSUZJQ0FURSktLS0tLVxcblxccj8oWzAtOUEtelxcblxcclxcK1xcL1xcPV0rKVxcblxccj8tLS0tLUVORCBcXDEtLS0tLSQvbVxudmFyIGV2cCA9IHJlcXVpcmUoJ2V2cF9ieXRlc3Rva2V5JylcbnZhciBjaXBoZXJzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1hZXMnKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2tleSwgcGFzc3dvcmQpIHtcbiAgdmFyIGtleSA9IG9rZXkudG9TdHJpbmcoKVxuICB2YXIgbWF0Y2ggPSBrZXkubWF0Y2goZmluZFByb2MpXG4gIHZhciBkZWNyeXB0ZWRcbiAgaWYgKCFtYXRjaCkge1xuICAgIHZhciBtYXRjaDIgPSBrZXkubWF0Y2goZnVsbFJlZ2V4KVxuICAgIGRlY3J5cHRlZCA9IG5ldyBCdWZmZXIobWF0Y2gyWzJdLnJlcGxhY2UoL1xccj9cXG4vZywgJycpLCAnYmFzZTY0JylcbiAgfSBlbHNlIHtcbiAgICB2YXIgc3VpdGUgPSAnYWVzJyArIG1hdGNoWzFdXG4gICAgdmFyIGl2ID0gbmV3IEJ1ZmZlcihtYXRjaFsyXSwgJ2hleCcpXG4gICAgdmFyIGNpcGhlclRleHQgPSBuZXcgQnVmZmVyKG1hdGNoWzNdLnJlcGxhY2UoL1xccj9cXG4vZywgJycpLCAnYmFzZTY0JylcbiAgICB2YXIgY2lwaGVyS2V5ID0gZXZwKHBhc3N3b3JkLCBpdi5zbGljZSgwLCA4KSwgcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSkua2V5XG4gICAgdmFyIG91dCA9IFtdXG4gICAgdmFyIGNpcGhlciA9IGNpcGhlcnMuY3JlYXRlRGVjaXBoZXJpdihzdWl0ZSwgY2lwaGVyS2V5LCBpdilcbiAgICBvdXQucHVzaChjaXBoZXIudXBkYXRlKGNpcGhlclRleHQpKVxuICAgIG91dC5wdXNoKGNpcGhlci5maW5hbCgpKVxuICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQob3V0KVxuICB9XG4gIHZhciB0YWcgPSBrZXkubWF0Y2goc3RhcnRSZWdleClbMV1cbiAgcmV0dXJuIHtcbiAgICB0YWc6IHRhZyxcbiAgICBkYXRhOiBkZWNyeXB0ZWRcbiAgfVxufVxuIiwidmFyIGFzbjEgPSByZXF1aXJlKCcuL2FzbjEnKVxudmFyIGFlc2lkID0gcmVxdWlyZSgnLi9hZXNpZC5qc29uJylcbnZhciBmaXhQcm9jID0gcmVxdWlyZSgnLi9maXhQcm9jJylcbnZhciBjaXBoZXJzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1hZXMnKVxudmFyIGNvbXBhdCA9IHJlcXVpcmUoJ3Bia2RmMicpXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlS2V5c1xuXG5mdW5jdGlvbiBwYXJzZUtleXMgKGJ1ZmZlcikge1xuICB2YXIgcGFzc3dvcmRcbiAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdvYmplY3QnICYmICFCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKSkge1xuICAgIHBhc3N3b3JkID0gYnVmZmVyLnBhc3NwaHJhc2VcbiAgICBidWZmZXIgPSBidWZmZXIua2V5XG4gIH1cbiAgaWYgKHR5cGVvZiBidWZmZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgYnVmZmVyID0gbmV3IEJ1ZmZlcihidWZmZXIpXG4gIH1cblxuICB2YXIgc3RyaXBwZWQgPSBmaXhQcm9jKGJ1ZmZlciwgcGFzc3dvcmQpXG5cbiAgdmFyIHR5cGUgPSBzdHJpcHBlZC50YWdcbiAgdmFyIGRhdGEgPSBzdHJpcHBlZC5kYXRhXG4gIHZhciBzdWJ0eXBlLCBuZGF0YVxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdDRVJUSUZJQ0FURSc6XG4gICAgICBuZGF0YSA9IGFzbjEuY2VydGlmaWNhdGUuZGVjb2RlKGRhdGEsICdkZXInKS50YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mb1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgIGNhc2UgJ1BVQkxJQyBLRVknOlxuICAgICAgaWYgKCFuZGF0YSkge1xuICAgICAgICBuZGF0YSA9IGFzbjEuUHVibGljS2V5LmRlY29kZShkYXRhLCAnZGVyJylcbiAgICAgIH1cbiAgICAgIHN1YnR5cGUgPSBuZGF0YS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oJy4nKVxuICAgICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICAgIGNhc2UgJzEuMi44NDAuMTEzNTQ5LjEuMS4xJzpcbiAgICAgICAgICByZXR1cm4gYXNuMS5SU0FQdWJsaWNLZXkuZGVjb2RlKG5kYXRhLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwgJ2RlcicpXG4gICAgICAgIGNhc2UgJzEuMi44NDAuMTAwNDUuMi4xJzpcbiAgICAgICAgICBuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleSA9IG5kYXRhLnN1YmplY3RQdWJsaWNLZXlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2VjJyxcbiAgICAgICAgICAgIGRhdGE6IG5kYXRhXG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICcxLjIuODQwLjEwMDQwLjQuMSc6XG4gICAgICAgICAgbmRhdGEuYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5ID0gYXNuMS5EU0FwYXJhbS5kZWNvZGUobmRhdGEuc3ViamVjdFB1YmxpY0tleS5kYXRhLCAnZGVyJylcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2RzYScsXG4gICAgICAgICAgICBkYXRhOiBuZGF0YS5hbGdvcml0aG0ucGFyYW1zXG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24ga2V5IGlkICcgKyBzdWJ0eXBlKVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGtleSB0eXBlICcgKyB0eXBlKVxuICAgIGNhc2UgJ0VOQ1JZUFRFRCBQUklWQVRFIEtFWSc6XG4gICAgICBkYXRhID0gYXNuMS5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZShkYXRhLCAnZGVyJylcbiAgICAgIGRhdGEgPSBkZWNyeXB0KGRhdGEsIHBhc3N3b3JkKVxuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuICAgIGNhc2UgJ1BSSVZBVEUgS0VZJzpcbiAgICAgIG5kYXRhID0gYXNuMS5Qcml2YXRlS2V5LmRlY29kZShkYXRhLCAnZGVyJylcbiAgICAgIHN1YnR5cGUgPSBuZGF0YS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oJy4nKVxuICAgICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICAgIGNhc2UgJzEuMi44NDAuMTEzNTQ5LjEuMS4xJzpcbiAgICAgICAgICByZXR1cm4gYXNuMS5SU0FQcml2YXRlS2V5LmRlY29kZShuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleSwgJ2RlcicpXG4gICAgICAgIGNhc2UgJzEuMi44NDAuMTAwNDUuMi4xJzpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VydmU6IG5kYXRhLmFsZ29yaXRobS5jdXJ2ZSxcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IGFzbjEuRUNQcml2YXRlS2V5LmRlY29kZShuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleSwgJ2RlcicpLnByaXZhdGVLZXlcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJzEuMi44NDAuMTAwNDAuNC4xJzpcbiAgICAgICAgICBuZGF0YS5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5ID0gYXNuMS5EU0FwYXJhbS5kZWNvZGUobmRhdGEuc3ViamVjdFByaXZhdGVLZXksICdkZXInKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZHNhJyxcbiAgICAgICAgICAgIHBhcmFtczogbmRhdGEuYWxnb3JpdGhtLnBhcmFtc1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGtleSBpZCAnICsgc3VidHlwZSlcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBrZXkgdHlwZSAnICsgdHlwZSlcbiAgICBjYXNlICdSU0EgUFVCTElDIEtFWSc6XG4gICAgICByZXR1cm4gYXNuMS5SU0FQdWJsaWNLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgIGNhc2UgJ1JTQSBQUklWQVRFIEtFWSc6XG4gICAgICByZXR1cm4gYXNuMS5SU0FQcml2YXRlS2V5LmRlY29kZShkYXRhLCAnZGVyJylcbiAgICBjYXNlICdEU0EgUFJJVkFURSBLRVknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2RzYScsXG4gICAgICAgIHBhcmFtczogYXNuMS5EU0FQcml2YXRlS2V5LmRlY29kZShkYXRhLCAnZGVyJylcbiAgICAgIH1cbiAgICBjYXNlICdFQyBQUklWQVRFIEtFWSc6XG4gICAgICBkYXRhID0gYXNuMS5FQ1ByaXZhdGVLZXkuZGVjb2RlKGRhdGEsICdkZXInKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VydmU6IGRhdGEucGFyYW1ldGVycy52YWx1ZSxcbiAgICAgICAgcHJpdmF0ZUtleTogZGF0YS5wcml2YXRlS2V5XG4gICAgICB9XG4gICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGtleSB0eXBlICcgKyB0eXBlKVxuICB9XG59XG5wYXJzZUtleXMuc2lnbmF0dXJlID0gYXNuMS5zaWduYXR1cmVcbmZ1bmN0aW9uIGRlY3J5cHQgKGRhdGEsIHBhc3N3b3JkKSB7XG4gIHZhciBzYWx0ID0gZGF0YS5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHRcbiAgdmFyIGl0ZXJzID0gcGFyc2VJbnQoZGF0YS5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksIDEwKVxuICB2YXIgYWxnbyA9IGFlc2lkW2RhdGEuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9pbignLicpXVxuICB2YXIgaXYgPSBkYXRhLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdlxuICB2YXIgY2lwaGVyVGV4dCA9IGRhdGEuc3ViamVjdFByaXZhdGVLZXlcbiAgdmFyIGtleWxlbiA9IHBhcnNlSW50KGFsZ28uc3BsaXQoJy0nKVsxXSwgMTApIC8gOFxuICB2YXIga2V5ID0gY29tcGF0LnBia2RmMlN5bmMocGFzc3dvcmQsIHNhbHQsIGl0ZXJzLCBrZXlsZW4pXG4gIHZhciBjaXBoZXIgPSBjaXBoZXJzLmNyZWF0ZURlY2lwaGVyaXYoYWxnbywga2V5LCBpdilcbiAgdmFyIG91dCA9IFtdXG4gIG91dC5wdXNoKGNpcGhlci51cGRhdGUoY2lwaGVyVGV4dCkpXG4gIG91dC5wdXNoKGNpcGhlci5maW5hbCgpKVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChvdXQpXG59XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLlBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlcicpO1xyXG5leHBvcnRzLlNpbXBsZUFwaVBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3NpbXBsZV9hcGkvc2ltcGxlX2FwaV9wYXJzZXInKTtcclxuZXhwb3J0cy5UcmVlU2VyaWFsaXplciA9XHJcbmV4cG9ydHMuU2VyaWFsaXplciA9IHJlcXVpcmUoJy4vbGliL3NlcmlhbGl6YXRpb24vc2VyaWFsaXplcicpO1xyXG5leHBvcnRzLkpzRG9tUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvanNkb20vanNkb21fcGFyc2VyJyk7XHJcblxyXG5leHBvcnRzLlRyZWVBZGFwdGVycyA9IHtcclxuICAgIGRlZmF1bHQ6IHJlcXVpcmUoJy4vbGliL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxyXG4gICAgaHRtbHBhcnNlcjI6IHJlcXVpcmUoJy4vbGliL3RyZWVfYWRhcHRlcnMvaHRtbHBhcnNlcjInKVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL0NvbnN0XHJcbnZhciBWQUxJRF9ET0NUWVBFX05BTUUgPSAnaHRtbCcsXHJcbiAgICBRVUlSS1NfTU9ERV9TWVNURU1fSUQgPSAnaHR0cDovL3d3dy5pYm0uY29tL2RhdGEvZHRkL3YxMS9pYm14aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCcsXHJcbiAgICBRVUlSS1NfTU9ERV9QVUJMSUNfSURfUFJFRklYRVMgPSBbXHJcbiAgICAgICAgXCIrLy9zaWxtYXJpbC8vZHRkIGh0bWwgcHJvIHYwcjExIDE5OTcwMTAxLy9lblwiLFxyXG4gICAgICAgIFwiLS8vYWR2YXNvZnQgbHRkLy9kdGQgaHRtbCAzLjAgYXN3ZWRpdCArIGV4dGVuc2lvbnMvL2VuXCIsXHJcbiAgICAgICAgXCItLy9hcy8vZHRkIGh0bWwgMy4wIGFzd2VkaXQgKyBleHRlbnNpb25zLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDEvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMi8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMS8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMi8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjFlLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy4wLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy4wLy9lbi8vXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAzLjIgZmluYWwvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAzLjIvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAzLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMC8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvL2VuLy8yLjBcIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDEvL2VuXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy9lbi8vMi4wXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAyLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMi8vZW4vLzIuMFwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgbGV2ZWwgMy8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvL2VuLy8zLjBcIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAwLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDAvL2VuLy8yLjBcIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDEvL2VuLy8yLjBcIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAyLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvL2VuLy8yLjBcIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAzLy9lblwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDMvL2VuLy8zLjBcIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdC8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdC8vZW4vLzIuMFwiLFxyXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0Ly9lbi8vMy4wXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW5cIixcclxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sLy9lbi8vMi4wXCIsXHJcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW4vLzMuMFwiLFxyXG4gICAgICAgIFwiLS8vbWV0cml1cy8vZHRkIG1ldHJpdXMgcHJlc2VudGF0aW9uYWwvL2VuXCIsXHJcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAyLjAgaHRtbCBzdHJpY3QvL2VuXCIsXHJcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAyLjAgaHRtbC8vZW5cIixcclxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCB0YWJsZXMvL2VuXCIsXHJcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAzLjAgaHRtbCBzdHJpY3QvL2VuXCIsXHJcbiAgICAgICAgXCItLy9taWNyb3NvZnQvL2R0ZCBpbnRlcm5ldCBleHBsb3JlciAzLjAgaHRtbC8vZW5cIixcclxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCB0YWJsZXMvL2VuXCIsXHJcbiAgICAgICAgXCItLy9uZXRzY2FwZSBjb21tLiBjb3JwLi8vZHRkIGh0bWwvL2VuXCIsXHJcbiAgICAgICAgXCItLy9uZXRzY2FwZSBjb21tLiBjb3JwLi8vZHRkIHN0cmljdCBodG1sLy9lblwiLFxyXG4gICAgICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIDIuMC8vZW5cIixcclxuICAgICAgICBcIi0vL28ncmVpbGx5IGFuZCBhc3NvY2lhdGVzLy9kdGQgaHRtbCBleHRlbmRlZCAxLjAvL2VuXCIsXHJcbiAgICAgICAgXCItLy9zcHlnbGFzcy8vZHRkIGh0bWwgMi4wIGV4dGVuZGVkLy9lblwiLFxyXG4gICAgICAgIFwiLS8vc3EvL2R0ZCBodG1sIDIuMCBob3RtZXRhbCArIGV4dGVuc2lvbnMvL2VuXCIsXHJcbiAgICAgICAgXCItLy9zdW4gbWljcm9zeXN0ZW1zIGNvcnAuLy9kdGQgaG90amF2YSBodG1sLy9lblwiLFxyXG4gICAgICAgIFwiLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgc3RyaWN0IGh0bWwvL2VuXCIsXHJcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMgMTk5NS0wMy0yNC8vZW5cIixcclxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgMy4yIGRyYWZ0Ly9lblwiLFxyXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCAzLjIgZmluYWwvL2VuXCIsXHJcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMi8vZW5cIixcclxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgMy4ycyBkcmFmdC8vZW5cIixcclxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgNC4wIGZyYW1lc2V0Ly9lblwiLFxyXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsLy9lblwiLFxyXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCBleHBlcmltZW50YWwgMTk5NjA3MTIvL2VuXCIsXHJcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCA5NzA0MjEvL2VuXCIsXHJcbiAgICAgICAgXCItLy93M2MvL2R0ZCB3MyBodG1sLy9lblwiLFxyXG4gICAgICAgIFwiLS8vdzNvLy9kdGQgdzMgaHRtbCAzLjAvL2VuXCIsXHJcbiAgICAgICAgXCItLy93M28vL2R0ZCB3MyBodG1sIDMuMC8vZW4vL1wiLFxyXG4gICAgICAgIFwiLS8vd2VidGVjaHMvL2R0ZCBtb3ppbGxhIGh0bWwgMi4wLy9lblwiLFxyXG4gICAgICAgIFwiLS8vd2VidGVjaHMvL2R0ZCBtb3ppbGxhIGh0bWwvL2VuXCJcclxuICAgIF0sXHJcbiAgICBRVUlSS1NfTU9ERV9OT19TWVNURU1fSURfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xyXG4gICAgICAgICctLy93M2MvL2R0ZCBodG1sIDQuMDEgZnJhbWVzZXQvLycsXHJcbiAgICAgICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSB0cmFuc2l0aW9uYWwvLydcclxuICAgIF0sXHJcbiAgICBRVUlSS1NfTU9ERV9QVUJMSUNfSURTID0gW1xyXG4gICAgICAgICctLy93M28vL2R0ZCB3MyBodG1sIHN0cmljdCAzLjAvL2VuLy8nLFxyXG4gICAgICAgICctL3czYy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsL2VuJyxcclxuICAgICAgICAnaHRtbCdcclxuICAgIF07XHJcblxyXG5cclxuLy9VdGlsc1xyXG5mdW5jdGlvbiBlbnF1b3RlRG9jdHlwZUlkKGlkKSB7XHJcbiAgICB2YXIgcXVvdGUgPSBpZC5pbmRleE9mKCdcIicpICE9PSAtMSA/ICdcXCcnIDogJ1wiJztcclxuXHJcbiAgICByZXR1cm4gcXVvdGUgKyBpZCArIHF1b3RlO1xyXG59XHJcblxyXG5cclxuLy9BUElcclxuZXhwb3J0cy5pc1F1aXJrcyA9IGZ1bmN0aW9uIChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcclxuICAgIGlmIChuYW1lICE9PSBWQUxJRF9ET0NUWVBFX05BTUUpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgaWYgKHN5c3RlbUlkICYmIHN5c3RlbUlkLnRvTG93ZXJDYXNlKCkgPT09IFFVSVJLU19NT0RFX1NZU1RFTV9JRClcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBpZiAocHVibGljSWQgIT09IG51bGwpIHtcclxuICAgICAgICBwdWJsaWNJZCA9IHB1YmxpY0lkLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmIChRVUlSS1NfTU9ERV9QVUJMSUNfSURTLmluZGV4T2YocHVibGljSWQpID4gLTEpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgcHJlZml4ZXMgPSBRVUlSS1NfTU9ERV9QVUJMSUNfSURfUFJFRklYRVM7XHJcblxyXG4gICAgICAgIGlmIChzeXN0ZW1JZCA9PT0gbnVsbClcclxuICAgICAgICAgICAgcHJlZml4ZXMgPSBwcmVmaXhlcy5jb25jYXQoUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHB1YmxpY0lkLmluZGV4T2YocHJlZml4ZXNbaV0pID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufTtcclxuXHJcbmV4cG9ydHMuc2VyaWFsaXplQ29udGVudCA9IGZ1bmN0aW9uIChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcclxuICAgIHZhciBzdHIgPSAnIURPQ1RZUEUgJyArIG5hbWU7XHJcblxyXG4gICAgaWYgKHB1YmxpY0lkICE9PSBudWxsKVxyXG4gICAgICAgIHN0ciArPSAnIFBVQkxJQyAnICsgZW5xdW90ZURvY3R5cGVJZChwdWJsaWNJZCk7XHJcblxyXG4gICAgZWxzZSBpZiAoc3lzdGVtSWQgIT09IG51bGwpXHJcbiAgICAgICAgc3RyICs9ICcgU1lTVEVNJztcclxuXHJcbiAgICBpZiAoc3lzdGVtSWQgIT09IG51bGwpXHJcbiAgICAgICAgc3RyICs9ICcgJyArIGVucXVvdGVEb2N0eXBlSWQoc3lzdGVtSWQpO1xyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXHJcbiAgICBIVE1MID0gcmVxdWlyZSgnLi9odG1sJyk7XHJcblxyXG4vL0FsaWFzZXNcclxudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcclxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTLFxyXG4gICAgQVRUUlMgPSBIVE1MLkFUVFJTO1xyXG5cclxuXHJcbi8vTUlNRSB0eXBlc1xyXG52YXIgTUlNRV9UWVBFUyA9IHtcclxuICAgIFRFWFRfSFRNTDogJ3RleHQvaHRtbCcsXHJcbiAgICBBUFBMSUNBVElPTl9YTUw6ICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnXHJcbn07XHJcblxyXG4vL0F0dHJpYnV0ZXNcclxudmFyIERFRklOSVRJT05fVVJMX0FUVFIgPSAnZGVmaW5pdGlvbnVybCcsXHJcbiAgICBBREpVU1RFRF9ERUZJTklUSU9OX1VSTF9BVFRSID0gJ2RlZmluaXRpb25VUkwnLFxyXG4gICAgU1ZHX0FUVFJTX0FESlVTVE1FTlRfTUFQID0ge1xyXG4gICAgICAgICdhdHRyaWJ1dGVuYW1lJzogJ2F0dHJpYnV0ZU5hbWUnLFxyXG4gICAgICAgICdhdHRyaWJ1dGV0eXBlJzogJ2F0dHJpYnV0ZVR5cGUnLFxyXG4gICAgICAgICdiYXNlZnJlcXVlbmN5JzogJ2Jhc2VGcmVxdWVuY3knLFxyXG4gICAgICAgICdiYXNlcHJvZmlsZSc6ICdiYXNlUHJvZmlsZScsXHJcbiAgICAgICAgJ2NhbGNtb2RlJzogJ2NhbGNNb2RlJyxcclxuICAgICAgICAnY2xpcHBhdGh1bml0cyc6ICdjbGlwUGF0aFVuaXRzJyxcclxuICAgICAgICAnY29udGVudHNjcmlwdHR5cGUnOiAnY29udGVudFNjcmlwdFR5cGUnLFxyXG4gICAgICAgICdjb250ZW50c3R5bGV0eXBlJzogJ2NvbnRlbnRTdHlsZVR5cGUnLFxyXG4gICAgICAgICdkaWZmdXNlY29uc3RhbnQnOiAnZGlmZnVzZUNvbnN0YW50JyxcclxuICAgICAgICAnZWRnZW1vZGUnOiAnZWRnZU1vZGUnLFxyXG4gICAgICAgICdleHRlcm5hbHJlc291cmNlc3JlcXVpcmVkJzogJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLFxyXG4gICAgICAgICdmaWx0ZXJyZXMnOiAnZmlsdGVyUmVzJyxcclxuICAgICAgICAnZmlsdGVydW5pdHMnOiAnZmlsdGVyVW5pdHMnLFxyXG4gICAgICAgICdnbHlwaHJlZic6ICdnbHlwaFJlZicsXHJcbiAgICAgICAgJ2dyYWRpZW50dHJhbnNmb3JtJzogJ2dyYWRpZW50VHJhbnNmb3JtJyxcclxuICAgICAgICAnZ3JhZGllbnR1bml0cyc6ICdncmFkaWVudFVuaXRzJyxcclxuICAgICAgICAna2VybmVsbWF0cml4JzogJ2tlcm5lbE1hdHJpeCcsXHJcbiAgICAgICAgJ2tlcm5lbHVuaXRsZW5ndGgnOiAna2VybmVsVW5pdExlbmd0aCcsXHJcbiAgICAgICAgJ2tleXBvaW50cyc6ICdrZXlQb2ludHMnLFxyXG4gICAgICAgICdrZXlzcGxpbmVzJzogJ2tleVNwbGluZXMnLFxyXG4gICAgICAgICdrZXl0aW1lcyc6ICdrZXlUaW1lcycsXHJcbiAgICAgICAgJ2xlbmd0aGFkanVzdCc6ICdsZW5ndGhBZGp1c3QnLFxyXG4gICAgICAgICdsaW1pdGluZ2NvbmVhbmdsZSc6ICdsaW1pdGluZ0NvbmVBbmdsZScsXHJcbiAgICAgICAgJ21hcmtlcmhlaWdodCc6ICdtYXJrZXJIZWlnaHQnLFxyXG4gICAgICAgICdtYXJrZXJ1bml0cyc6ICdtYXJrZXJVbml0cycsXHJcbiAgICAgICAgJ21hcmtlcndpZHRoJzogJ21hcmtlcldpZHRoJyxcclxuICAgICAgICAnbWFza2NvbnRlbnR1bml0cyc6ICdtYXNrQ29udGVudFVuaXRzJyxcclxuICAgICAgICAnbWFza3VuaXRzJzogJ21hc2tVbml0cycsXHJcbiAgICAgICAgJ251bW9jdGF2ZXMnOiAnbnVtT2N0YXZlcycsXHJcbiAgICAgICAgJ3BhdGhsZW5ndGgnOiAncGF0aExlbmd0aCcsXHJcbiAgICAgICAgJ3BhdHRlcm5jb250ZW50dW5pdHMnOiAncGF0dGVybkNvbnRlbnRVbml0cycsXHJcbiAgICAgICAgJ3BhdHRlcm50cmFuc2Zvcm0nOiAncGF0dGVyblRyYW5zZm9ybScsXHJcbiAgICAgICAgJ3BhdHRlcm51bml0cyc6ICdwYXR0ZXJuVW5pdHMnLFxyXG4gICAgICAgICdwb2ludHNhdHgnOiAncG9pbnRzQXRYJyxcclxuICAgICAgICAncG9pbnRzYXR5JzogJ3BvaW50c0F0WScsXHJcbiAgICAgICAgJ3BvaW50c2F0eic6ICdwb2ludHNBdFonLFxyXG4gICAgICAgICdwcmVzZXJ2ZWFscGhhJzogJ3ByZXNlcnZlQWxwaGEnLFxyXG4gICAgICAgICdwcmVzZXJ2ZWFzcGVjdHJhdGlvJzogJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxyXG4gICAgICAgICdwcmltaXRpdmV1bml0cyc6ICdwcmltaXRpdmVVbml0cycsXHJcbiAgICAgICAgJ3JlZngnOiAncmVmWCcsXHJcbiAgICAgICAgJ3JlZnknOiAncmVmWScsXHJcbiAgICAgICAgJ3JlcGVhdGNvdW50JzogJ3JlcGVhdENvdW50JyxcclxuICAgICAgICAncmVwZWF0ZHVyJzogJ3JlcGVhdER1cicsXHJcbiAgICAgICAgJ3JlcXVpcmVkZXh0ZW5zaW9ucyc6ICdyZXF1aXJlZEV4dGVuc2lvbnMnLFxyXG4gICAgICAgICdyZXF1aXJlZGZlYXR1cmVzJzogJ3JlcXVpcmVkRmVhdHVyZXMnLFxyXG4gICAgICAgICdzcGVjdWxhcmNvbnN0YW50JzogJ3NwZWN1bGFyQ29uc3RhbnQnLFxyXG4gICAgICAgICdzcGVjdWxhcmV4cG9uZW50JzogJ3NwZWN1bGFyRXhwb25lbnQnLFxyXG4gICAgICAgICdzcHJlYWRtZXRob2QnOiAnc3ByZWFkTWV0aG9kJyxcclxuICAgICAgICAnc3RhcnRvZmZzZXQnOiAnc3RhcnRPZmZzZXQnLFxyXG4gICAgICAgICdzdGRkZXZpYXRpb24nOiAnc3RkRGV2aWF0aW9uJyxcclxuICAgICAgICAnc3RpdGNodGlsZXMnOiAnc3RpdGNoVGlsZXMnLFxyXG4gICAgICAgICdzdXJmYWNlc2NhbGUnOiAnc3VyZmFjZVNjYWxlJyxcclxuICAgICAgICAnc3lzdGVtbGFuZ3VhZ2UnOiAnc3lzdGVtTGFuZ3VhZ2UnLFxyXG4gICAgICAgICd0YWJsZXZhbHVlcyc6ICd0YWJsZVZhbHVlcycsXHJcbiAgICAgICAgJ3RhcmdldHgnOiAndGFyZ2V0WCcsXHJcbiAgICAgICAgJ3RhcmdldHknOiAndGFyZ2V0WScsXHJcbiAgICAgICAgJ3RleHRsZW5ndGgnOiAndGV4dExlbmd0aCcsXHJcbiAgICAgICAgJ3ZpZXdib3gnOiAndmlld0JveCcsXHJcbiAgICAgICAgJ3ZpZXd0YXJnZXQnOiAndmlld1RhcmdldCcsXHJcbiAgICAgICAgJ3hjaGFubmVsc2VsZWN0b3InOiAneENoYW5uZWxTZWxlY3RvcicsXHJcbiAgICAgICAgJ3ljaGFubmVsc2VsZWN0b3InOiAneUNoYW5uZWxTZWxlY3RvcicsXHJcbiAgICAgICAgJ3pvb21hbmRwYW4nOiAnem9vbUFuZFBhbidcclxuICAgIH0sXHJcbiAgICBYTUxfQVRUUlNfQURKVVNUTUVOVF9NQVAgPSB7XHJcbiAgICAgICAgJ3hsaW5rOmFjdHVhdGUnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAnYWN0dWF0ZScsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazphcmNyb2xlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2FyY3JvbGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6aHJlZic6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdocmVmJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnJvbGUnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAncm9sZScsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazpzaG93Jzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3Nob3cnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6dGl0bGUnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAndGl0bGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6dHlwZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICd0eXBlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3htbDpiYXNlJzoge3ByZWZpeDogJ3htbCcsIG5hbWU6ICdiYXNlJywgbmFtZXNwYWNlOiBOUy5YTUx9LFxyXG4gICAgICAgICd4bWw6bGFuZyc6IHtwcmVmaXg6ICd4bWwnLCBuYW1lOiAnbGFuZycsIG5hbWVzcGFjZTogTlMuWE1MfSxcclxuICAgICAgICAneG1sOnNwYWNlJzoge3ByZWZpeDogJ3htbCcsIG5hbWU6ICdzcGFjZScsIG5hbWVzcGFjZTogTlMuWE1MfSxcclxuICAgICAgICAneG1sbnMnOiB7cHJlZml4OiAnJywgbmFtZTogJ3htbG5zJywgbmFtZXNwYWNlOiBOUy5YTUxOU30sXHJcbiAgICAgICAgJ3htbG5zOnhsaW5rJzoge3ByZWZpeDogJ3htbG5zJywgbmFtZTogJ3hsaW5rJywgbmFtZXNwYWNlOiBOUy5YTUxOU31cclxuXHJcbiAgICB9O1xyXG5cclxuLy9TVkcgdGFnIG5hbWVzIGFkanVzdG1lbnQgbWFwXHJcbnZhciBTVkdfVEFHX05BTUVTX0FESlVTVE1FTlRfTUFQID0ge1xyXG4gICAgJ2FsdGdseXBoJzogJ2FsdEdseXBoJyxcclxuICAgICdhbHRnbHlwaGRlZic6ICdhbHRHbHlwaERlZicsXHJcbiAgICAnYWx0Z2x5cGhpdGVtJzogJ2FsdEdseXBoSXRlbScsXHJcbiAgICAnYW5pbWF0ZWNvbG9yJzogJ2FuaW1hdGVDb2xvcicsXHJcbiAgICAnYW5pbWF0ZW1vdGlvbic6ICdhbmltYXRlTW90aW9uJyxcclxuICAgICdhbmltYXRldHJhbnNmb3JtJzogJ2FuaW1hdGVUcmFuc2Zvcm0nLFxyXG4gICAgJ2NsaXBwYXRoJzogJ2NsaXBQYXRoJyxcclxuICAgICdmZWJsZW5kJzogJ2ZlQmxlbmQnLFxyXG4gICAgJ2ZlY29sb3JtYXRyaXgnOiAnZmVDb2xvck1hdHJpeCcsXHJcbiAgICAnZmVjb21wb25lbnR0cmFuc2Zlcic6ICdmZUNvbXBvbmVudFRyYW5zZmVyJyxcclxuICAgICdmZWNvbXBvc2l0ZSc6ICdmZUNvbXBvc2l0ZScsXHJcbiAgICAnZmVjb252b2x2ZW1hdHJpeCc6ICdmZUNvbnZvbHZlTWF0cml4JyxcclxuICAgICdmZWRpZmZ1c2VsaWdodGluZyc6ICdmZURpZmZ1c2VMaWdodGluZycsXHJcbiAgICAnZmVkaXNwbGFjZW1lbnRtYXAnOiAnZmVEaXNwbGFjZW1lbnRNYXAnLFxyXG4gICAgJ2ZlZGlzdGFudGxpZ2h0JzogJ2ZlRGlzdGFudExpZ2h0JyxcclxuICAgICdmZWZsb29kJzogJ2ZlRmxvb2QnLFxyXG4gICAgJ2ZlZnVuY2EnOiAnZmVGdW5jQScsXHJcbiAgICAnZmVmdW5jYic6ICdmZUZ1bmNCJyxcclxuICAgICdmZWZ1bmNnJzogJ2ZlRnVuY0cnLFxyXG4gICAgJ2ZlZnVuY3InOiAnZmVGdW5jUicsXHJcbiAgICAnZmVnYXVzc2lhbmJsdXInOiAnZmVHYXVzc2lhbkJsdXInLFxyXG4gICAgJ2ZlaW1hZ2UnOiAnZmVJbWFnZScsXHJcbiAgICAnZmVtZXJnZSc6ICdmZU1lcmdlJyxcclxuICAgICdmZW1lcmdlbm9kZSc6ICdmZU1lcmdlTm9kZScsXHJcbiAgICAnZmVtb3JwaG9sb2d5JzogJ2ZlTW9ycGhvbG9neScsXHJcbiAgICAnZmVvZmZzZXQnOiAnZmVPZmZzZXQnLFxyXG4gICAgJ2ZlcG9pbnRsaWdodCc6ICdmZVBvaW50TGlnaHQnLFxyXG4gICAgJ2Zlc3BlY3VsYXJsaWdodGluZyc6ICdmZVNwZWN1bGFyTGlnaHRpbmcnLFxyXG4gICAgJ2Zlc3BvdGxpZ2h0JzogJ2ZlU3BvdExpZ2h0JyxcclxuICAgICdmZXRpbGUnOiAnZmVUaWxlJyxcclxuICAgICdmZXR1cmJ1bGVuY2UnOiAnZmVUdXJidWxlbmNlJyxcclxuICAgICdmb3JlaWdub2JqZWN0JzogJ2ZvcmVpZ25PYmplY3QnLFxyXG4gICAgJ2dseXBocmVmJzogJ2dseXBoUmVmJyxcclxuICAgICdsaW5lYXJncmFkaWVudCc6ICdsaW5lYXJHcmFkaWVudCcsXHJcbiAgICAncmFkaWFsZ3JhZGllbnQnOiAncmFkaWFsR3JhZGllbnQnLFxyXG4gICAgJ3RleHRwYXRoJzogJ3RleHRQYXRoJ1xyXG59O1xyXG5cclxuLy9UYWdzIHRoYXQgY2F1c2VzIGV4aXQgZnJvbSBmb3JlaWduIGNvbnRlbnRcclxudmFyIEVYSVRTX0ZPUkVJR05fQ09OVEVOVCA9IHt9O1xyXG5cclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5CSUddID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQkxPQ0tRVU9URV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5CT0RZXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJSXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkNFTlRFUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5DT0RFXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkREXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkRJVl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5ETF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5EVF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5FTV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5FTUJFRF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5IMV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5IMl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5IM10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5INF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5INV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5INl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5IRUFEXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkhSXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkldID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSU1HXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkxJXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkxJU1RJTkddID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTUVOVV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5NRVRBXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk5PQlJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuT0xdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuUF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5QUkVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuUlVCWV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNNQUxMXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNQQU5dID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU1RST05HXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNUUklLRV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TVUJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU1VQXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlRBQkxFXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlRUXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuVUxdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuVkFSXSA9IHRydWU7XHJcblxyXG4vL0NoZWNrIGV4aXQgZnJvbSBmb3JlaWduIGNvbnRlbnRcclxuZXhwb3J0cy5jYXVzZXNFeGl0ID0gZnVuY3Rpb24gKHN0YXJ0VGFnVG9rZW4pIHtcclxuICAgIHZhciB0biA9IHN0YXJ0VGFnVG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuRk9OVCAmJiAoVG9rZW5pemVyLmdldFRva2VuQXR0cihzdGFydFRhZ1Rva2VuLCBBVFRSUy5DT0xPUikgIT09IG51bGwgfHxcclxuICAgICAgICBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHN0YXJ0VGFnVG9rZW4sIEFUVFJTLlNJWkUpICE9PSBudWxsIHx8XHJcbiAgICAgICAgVG9rZW5pemVyLmdldFRva2VuQXR0cihzdGFydFRhZ1Rva2VuLCBBVFRSUy5GQUNFKSAhPT0gbnVsbCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gRVhJVFNfRk9SRUlHTl9DT05URU5UW3RuXTtcclxufTtcclxuXHJcbi8vVG9rZW4gYWRqdXN0bWVudHNcclxuZXhwb3J0cy5hZGp1c3RUb2tlbk1hdGhNTEF0dHJzID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRva2VuLmF0dHJzW2ldLm5hbWUgPT09IERFRklOSVRJT05fVVJMX0FUVFIpIHtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZSA9IEFESlVTVEVEX0RFRklOSVRJT05fVVJMX0FUVFI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5TVkdBdHRycyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBhZGp1c3RlZEF0dHJOYW1lID0gU1ZHX0FUVFJTX0FESlVTVE1FTlRfTUFQW3Rva2VuLmF0dHJzW2ldLm5hbWVdO1xyXG5cclxuICAgICAgICBpZiAoYWRqdXN0ZWRBdHRyTmFtZSlcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZSA9IGFkanVzdGVkQXR0ck5hbWU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmFkanVzdFRva2VuWE1MQXR0cnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYWRqdXN0ZWRBdHRyRW50cnkgPSBYTUxfQVRUUlNfQURKVVNUTUVOVF9NQVBbdG9rZW4uYXR0cnNbaV0ubmFtZV07XHJcblxyXG4gICAgICAgIGlmIChhZGp1c3RlZEF0dHJFbnRyeSkge1xyXG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5wcmVmaXggPSBhZGp1c3RlZEF0dHJFbnRyeS5wcmVmaXg7XHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBhZGp1c3RlZEF0dHJFbnRyeS5uYW1lO1xyXG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lc3BhY2UgPSBhZGp1c3RlZEF0dHJFbnRyeS5uYW1lc3BhY2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5hZGp1c3RUb2tlblNWR1RhZ05hbWUgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIHZhciBhZGp1c3RlZFRhZ05hbWUgPSBTVkdfVEFHX05BTUVTX0FESlVTVE1FTlRfTUFQW3Rva2VuLnRhZ05hbWVdO1xyXG5cclxuICAgIGlmIChhZGp1c3RlZFRhZ05hbWUpXHJcbiAgICAgICAgdG9rZW4udGFnTmFtZSA9IGFkanVzdGVkVGFnTmFtZTtcclxufTtcclxuXHJcbi8vSW50ZWdyYXRpb24gcG9pbnRzXHJcbmV4cG9ydHMuaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCA9IGZ1bmN0aW9uICh0biwgbnMpIHtcclxuICAgIHJldHVybiBucyA9PT0gTlMuTUFUSE1MICYmICh0biA9PT0gJC5NSSB8fCB0biA9PT0gJC5NTyB8fCB0biA9PT0gJC5NTiB8fCB0biA9PT0gJC5NUyB8fCB0biA9PT0gJC5NVEVYVCk7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzSHRtbEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAodG4sIG5zLCBhdHRycykge1xyXG4gICAgaWYgKG5zID09PSBOUy5NQVRITUwgJiYgdG4gPT09ICQuQU5OT1RBVElPTl9YTUwpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChhdHRyc1tpXS5uYW1lID09PSBBVFRSUy5FTkNPRElORykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gYXR0cnNbaV0udmFsdWUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IE1JTUVfVFlQRVMuVEVYVF9IVE1MIHx8IHZhbHVlID09PSBNSU1FX1RZUEVTLkFQUExJQ0FUSU9OX1hNTDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnMgPT09IE5TLlNWRyAmJiAodG4gPT09ICQuRk9SRUlHTl9PQkpFQ1QgfHwgdG4gPT09ICQuREVTQyB8fCB0biA9PT0gJC5USVRMRSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBOUyA9IGV4cG9ydHMuTkFNRVNQQUNFUyA9IHtcclxuICAgIEhUTUw6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyxcclxuICAgIE1BVEhNTDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnLFxyXG4gICAgU1ZHOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxyXG4gICAgWExJTks6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyxcclxuICAgIFhNTDogJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScsXHJcbiAgICBYTUxOUzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvJ1xyXG59O1xyXG5cclxuZXhwb3J0cy5BVFRSUyA9IHtcclxuICAgIFRZUEU6ICd0eXBlJyxcclxuICAgIEFDVElPTjogJ2FjdGlvbicsXHJcbiAgICBFTkNPRElORzogJ2VuY29kaW5nJyxcclxuICAgIFBST01QVDogJ3Byb21wdCcsXHJcbiAgICBOQU1FOiAnbmFtZScsXHJcbiAgICBDT0xPUjogJ2NvbG9yJyxcclxuICAgIEZBQ0U6ICdmYWNlJyxcclxuICAgIFNJWkU6ICdzaXplJ1xyXG59O1xyXG5cclxudmFyICQgPSBleHBvcnRzLlRBR19OQU1FUyA9IHtcclxuICAgIEE6ICdhJyxcclxuICAgIEFERFJFU1M6ICdhZGRyZXNzJyxcclxuICAgIEFOTk9UQVRJT05fWE1MOiAnYW5ub3RhdGlvbi14bWwnLFxyXG4gICAgQVBQTEVUOiAnYXBwbGV0JyxcclxuICAgIEFSRUE6ICdhcmVhJyxcclxuICAgIEFSVElDTEU6ICdhcnRpY2xlJyxcclxuICAgIEFTSURFOiAnYXNpZGUnLFxyXG5cclxuICAgIEI6ICdiJyxcclxuICAgIEJBU0U6ICdiYXNlJyxcclxuICAgIEJBU0VGT05UOiAnYmFzZWZvbnQnLFxyXG4gICAgQkdTT1VORDogJ2Jnc291bmQnLFxyXG4gICAgQklHOiAnYmlnJyxcclxuICAgIEJMT0NLUVVPVEU6ICdibG9ja3F1b3RlJyxcclxuICAgIEJPRFk6ICdib2R5JyxcclxuICAgIEJSOiAnYnInLFxyXG4gICAgQlVUVE9OOiAnYnV0dG9uJyxcclxuXHJcbiAgICBDQVBUSU9OOiAnY2FwdGlvbicsXHJcbiAgICBDRU5URVI6ICdjZW50ZXInLFxyXG4gICAgQ09ERTogJ2NvZGUnLFxyXG4gICAgQ09MOiAnY29sJyxcclxuICAgIENPTEdST1VQOiAnY29sZ3JvdXAnLFxyXG4gICAgQ09NTUFORDogJ2NvbW1hbmQnLFxyXG5cclxuICAgIEREOiAnZGQnLFxyXG4gICAgREVTQzogJ2Rlc2MnLFxyXG4gICAgREVUQUlMUzogJ2RldGFpbHMnLFxyXG4gICAgRElBTE9HOiAnZGlhbG9nJyxcclxuICAgIERJUjogJ2RpcicsXHJcbiAgICBESVY6ICdkaXYnLFxyXG4gICAgREw6ICdkbCcsXHJcbiAgICBEVDogJ2R0JyxcclxuXHJcbiAgICBFTTogJ2VtJyxcclxuICAgIEVNQkVEOiAnZW1iZWQnLFxyXG5cclxuICAgIEZJRUxEU0VUOiAnZmllbGRzZXQnLFxyXG4gICAgRklHQ0FQVElPTjogJ2ZpZ2NhcHRpb24nLFxyXG4gICAgRklHVVJFOiAnZmlndXJlJyxcclxuICAgIEZPTlQ6ICdmb250JyxcclxuICAgIEZPT1RFUjogJ2Zvb3RlcicsXHJcbiAgICBGT1JFSUdOX09CSkVDVDogJ2ZvcmVpZ25PYmplY3QnLFxyXG4gICAgRk9STTogJ2Zvcm0nLFxyXG4gICAgRlJBTUU6ICdmcmFtZScsXHJcbiAgICBGUkFNRVNFVDogJ2ZyYW1lc2V0JyxcclxuXHJcbiAgICBIMTogJ2gxJyxcclxuICAgIEgyOiAnaDInLFxyXG4gICAgSDM6ICdoMycsXHJcbiAgICBINDogJ2g0JyxcclxuICAgIEg1OiAnaDUnLFxyXG4gICAgSDY6ICdoNicsXHJcbiAgICBIRUFEOiAnaGVhZCcsXHJcbiAgICBIRUFERVI6ICdoZWFkZXInLFxyXG4gICAgSEdST1VQOiAnaGdyb3VwJyxcclxuICAgIEhSOiAnaHInLFxyXG4gICAgSFRNTDogJ2h0bWwnLFxyXG5cclxuICAgIEk6ICdpJyxcclxuICAgIElNRzogJ2ltZycsXHJcbiAgICBJTUFHRTogJ2ltYWdlJyxcclxuICAgIElOUFVUOiAnaW5wdXQnLFxyXG4gICAgSUZSQU1FOiAnaWZyYW1lJyxcclxuICAgIElTSU5ERVg6ICdpc2luZGV4JyxcclxuXHJcbiAgICBLRVlHRU46ICdrZXlnZW4nLFxyXG5cclxuICAgIExBQkVMOiAnbGFiZWwnLFxyXG4gICAgTEk6ICdsaScsXHJcbiAgICBMSU5LOiAnbGluaycsXHJcbiAgICBMSVNUSU5HOiAnbGlzdGluZycsXHJcblxyXG4gICAgTUFJTjogJ21haW4nLFxyXG4gICAgTUFMSUdOTUFSSzogJ21hbGlnbm1hcmsnLFxyXG4gICAgTUFSUVVFRTogJ21hcnF1ZWUnLFxyXG4gICAgTUFUSDogJ21hdGgnLFxyXG4gICAgTUVOVTogJ21lbnUnLFxyXG4gICAgTUVOVUlURU06ICdtZW51aXRlbScsXHJcbiAgICBNRVRBOiAnbWV0YScsXHJcbiAgICBNR0xZUEg6ICdtZ2x5cGgnLFxyXG4gICAgTUk6ICdtaScsXHJcbiAgICBNTzogJ21vJyxcclxuICAgIE1OOiAnbW4nLFxyXG4gICAgTVM6ICdtcycsXHJcbiAgICBNVEVYVDogJ210ZXh0JyxcclxuXHJcbiAgICBOQVY6ICduYXYnLFxyXG4gICAgTk9CUjogJ25vYnInLFxyXG4gICAgTk9GUkFNRVM6ICdub2ZyYW1lcycsXHJcbiAgICBOT0VNQkVEOiAnbm9lbWJlZCcsXHJcbiAgICBOT1NDUklQVDogJ25vc2NyaXB0JyxcclxuXHJcbiAgICBPQkpFQ1Q6ICdvYmplY3QnLFxyXG4gICAgT0w6ICdvbCcsXHJcbiAgICBPUFRHUk9VUDogJ29wdGdyb3VwJyxcclxuICAgIE9QVElPTjogJ29wdGlvbicsXHJcblxyXG4gICAgUDogJ3AnLFxyXG4gICAgUEFSQU06ICdwYXJhbScsXHJcbiAgICBQTEFJTlRFWFQ6ICdwbGFpbnRleHQnLFxyXG4gICAgUFJFOiAncHJlJyxcclxuXHJcbiAgICBSUDogJ3JwJyxcclxuICAgIFJUOiAncnQnLFxyXG4gICAgUlVCWTogJ3J1YnknLFxyXG5cclxuICAgIFM6ICdzJyxcclxuICAgIFNDUklQVDogJ3NjcmlwdCcsXHJcbiAgICBTRUNUSU9OOiAnc2VjdGlvbicsXHJcbiAgICBTRUxFQ1Q6ICdzZWxlY3QnLFxyXG4gICAgU09VUkNFOiAnc291cmNlJyxcclxuICAgIFNNQUxMOiAnc21hbGwnLFxyXG4gICAgU1BBTjogJ3NwYW4nLFxyXG4gICAgU1RSSUtFOiAnc3RyaWtlJyxcclxuICAgIFNUUk9ORzogJ3N0cm9uZycsXHJcbiAgICBTVFlMRTogJ3N0eWxlJyxcclxuICAgIFNVQjogJ3N1YicsXHJcbiAgICBTVU1NQVJZOiAnc3VtbWFyeScsXHJcbiAgICBTVVA6ICdzdXAnLFxyXG5cclxuICAgIFRBQkxFOiAndGFibGUnLFxyXG4gICAgVEJPRFk6ICd0Ym9keScsXHJcbiAgICBURU1QTEFURTogJ3RlbXBsYXRlJyxcclxuICAgIFRFWFRBUkVBOiAndGV4dGFyZWEnLFxyXG4gICAgVEZPT1Q6ICd0Zm9vdCcsXHJcbiAgICBURDogJ3RkJyxcclxuICAgIFRIOiAndGgnLFxyXG4gICAgVEhFQUQ6ICd0aGVhZCcsXHJcbiAgICBUSVRMRTogJ3RpdGxlJyxcclxuICAgIFRSOiAndHInLFxyXG4gICAgVFJBQ0s6ICd0cmFjaycsXHJcbiAgICBUVDogJ3R0JyxcclxuXHJcbiAgICBVOiAndScsXHJcbiAgICBVTDogJ3VsJyxcclxuXHJcbiAgICBTVkc6ICdzdmcnLFxyXG5cclxuICAgIFZBUjogJ3ZhcicsXHJcblxyXG4gICAgV0JSOiAnd2JyJyxcclxuXHJcbiAgICBYTVA6ICd4bXAnXHJcbn07XHJcblxyXG52YXIgU1BFQ0lBTF9FTEVNRU5UUyA9IGV4cG9ydHMuU1BFQ0lBTF9FTEVNRU5UUyA9IHt9O1xyXG5cclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXSA9IHt9O1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQUREUkVTU10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVBQTEVUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5BUkVBXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5BUlRJQ0xFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5BU0lERV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQkFTRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQkFTRUZPTlRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJHU09VTkRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJMT0NLUVVPVEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJPRFldID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CVVRUT05dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkNBUFRJT05dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkNFTlRFUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQ09MXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DT0xHUk9VUF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRERdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRFVEFJTFNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRJUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRElWXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ETF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRFRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkVNQkVEXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GSUVMRFNFVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRklHQ0FQVElPTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRklHVVJFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GT09URVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZPUk1dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZSQU1FXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GUkFNRVNFVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkgyXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IM10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkg1XSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5INl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSEVBRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSEVBREVSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IR1JPVVBdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IVE1MXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JRlJBTUVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLklNR10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSU5QVVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLklTSU5ERVhdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkxJXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5MSU5LXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5MSVNUSU5HXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5NQUlOXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5NQVJRVUVFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5NRU5VXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5NRU5VSVRFTV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUVUQV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTkFWXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5OT0VNQkVEXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5OT0ZSQU1FU10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTk9TQ1JJUFRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk9CSkVDVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuT0xdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlBdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlBBUkFNXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QTEFJTlRFWFRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlBSRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU0NSSVBUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TRUNUSU9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TRUxFQ1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNPVVJDRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU1RZTEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNVTU1BUlldID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRBQkxFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UQk9EWV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVERdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRFTVBMQVRFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5URVhUQVJFQV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEZPT1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRIXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5USEVBRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVElUTEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UUkFDS10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVUxdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLldCUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuWE1QXSA9IHRydWU7XHJcblxyXG5TUEVDSUFMX0VMRU1FTlRTW05TLk1BVEhNTF0gPSB7fTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5NQVRITUxdWyQuTUldID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5NQVRITUxdWyQuTU9dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5NQVRITUxdWyQuTU5dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5NQVRITUxdWyQuTVNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5NQVRITUxdWyQuTVRFWFRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5NQVRITUxdWyQuQU5OT1RBVElPTl9YTUxdID0gdHJ1ZTtcclxuXHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuU1ZHXSA9IHt9O1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLlNWR11bJC5USVRMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLlNWR11bJC5GT1JFSUdOX09CSkVDVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLlNWR11bJC5ERVNDXSA9IHRydWU7XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydHMuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSID0gJ1xcdUZGRkQnO1xyXG5cclxuZXhwb3J0cy5DT0RFX1BPSU5UUyA9IHtcclxuICAgIEVPRjogLTEsXHJcbiAgICBOVUxMOiAweDAwLFxyXG4gICAgVEFCVUxBVElPTjogMHgwOSxcclxuICAgIENBUlJJQUdFX1JFVFVSTjogMHgwRCxcclxuICAgIExJTkVfRkVFRDogMHgwQSxcclxuICAgIEZPUk1fRkVFRDogMHgwQyxcclxuICAgIFNQQUNFOiAweDIwLFxyXG4gICAgRVhDTEFNQVRJT05fTUFSSzogMHgyMSxcclxuICAgIFFVT1RBVElPTl9NQVJLOiAweDIyLFxyXG4gICAgTlVNQkVSX1NJR046IDB4MjMsXHJcbiAgICBBTVBFUlNBTkQ6IDB4MjYsXHJcbiAgICBBUE9TVFJPUEhFOiAweDI3LFxyXG4gICAgSFlQSEVOX01JTlVTOiAweDJELFxyXG4gICAgU09MSURVUzogMHgyRixcclxuICAgIERJR0lUXzA6IDB4MzAsXHJcbiAgICBESUdJVF85OiAweDM5LFxyXG4gICAgU0VNSUNPTE9OOiAweDNCLFxyXG4gICAgTEVTU19USEFOX1NJR046IDB4M0MsXHJcbiAgICBFUVVBTFNfU0lHTjogMHgzRCxcclxuICAgIEdSRUFURVJfVEhBTl9TSUdOOiAweDNFLFxyXG4gICAgUVVFU1RJT05fTUFSSzogMHgzRixcclxuICAgIExBVElOX0NBUElUQUxfQTogMHg0MSxcclxuICAgIExBVElOX0NBUElUQUxfRjogMHg0NixcclxuICAgIExBVElOX0NBUElUQUxfWDogMHg1OCxcclxuICAgIExBVElOX0NBUElUQUxfWjogMHg1QSxcclxuICAgIEdSQVZFX0FDQ0VOVDogMHg2MCxcclxuICAgIExBVElOX1NNQUxMX0E6IDB4NjEsXHJcbiAgICBMQVRJTl9TTUFMTF9GOiAweDY2LFxyXG4gICAgTEFUSU5fU01BTExfWDogMHg3OCxcclxuICAgIExBVElOX1NNQUxMX1o6IDB4N0EsXHJcbiAgICBCT006IDB4RkVGRixcclxuICAgIFJFUExBQ0VNRU5UX0NIQVJBQ1RFUjogMHhGRkZEXHJcbn07XHJcblxyXG5leHBvcnRzLkNPREVfUE9JTlRfU0VRVUVOQ0VTID0ge1xyXG4gICAgREFTSF9EQVNIX1NUUklORzogWzB4MkQsIDB4MkRdLCAvLy0tXHJcbiAgICBET0NUWVBFX1NUUklORzogWzB4NDQsIDB4NEYsIDB4NDMsIDB4NTQsIDB4NTksIDB4NTAsIDB4NDVdLCAvL0RPQ1RZUEVcclxuICAgIENEQVRBX1NUQVJUX1NUUklORzogWzB4NUIsIDB4NDMsIDB4NDQsIDB4NDEsIDB4NTQsIDB4NDEsIDB4NUJdLCAvL1tDREFUQVtcclxuICAgIENEQVRBX0VORF9TVFJJTkc6IFsweDVELCAweDVELCAweDNFXSwgLy9dXT5cclxuICAgIFNDUklQVF9TVFJJTkc6IFsweDczLCAweDYzLCAweDcyLCAweDY5LCAweDcwLCAweDc0XSwgLy9zY3JpcHRcclxuICAgIFBVQkxJQ19TVFJJTkc6IFsweDUwLCAweDU1LCAweDQyLCAweDRDLCAweDQ5LCAweDQzXSwgLy9QVUJMSUNcclxuICAgIFNZU1RFTV9TVFJJTkc6IFsweDUzLCAweDU5LCAweDUzLCAweDU0LCAweDQ1LCAweDREXSAvL1NZU1RFTVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLm1lcmdlT3B0aW9ucyA9IGZ1bmN0aW9uIChkZWZhdWx0cywgb3B0aW9ucykge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgcmV0dXJuIFtkZWZhdWx0cywgb3B0aW9uc10ucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIG9wdE9iaikge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKG9wdE9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIG1lcmdlZFtrZXldID0gb3B0T2JqW2tleV07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBtZXJnZWQ7XHJcbiAgICB9LCB7fSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBQYXJzZXIgPSByZXF1aXJlKCcuLi90cmVlX2NvbnN0cnVjdGlvbi9wYXJzZXInKSxcclxuICAgIFBhcnNpbmdVbml0ID0gcmVxdWlyZSgnLi9wYXJzaW5nX3VuaXQnKTtcclxuXHJcbi8vQVBJXHJcbmV4cG9ydHMucGFyc2VEb2N1bWVudCA9IGZ1bmN0aW9uIChodG1sLCB0cmVlQWRhcHRlcikge1xyXG4gICAgLy9OT1RFOiB0aGlzIHNob3VsZCBiZSByZWVudHJhbnQsIHNvIHdlIGNyZWF0ZSBuZXcgcGFyc2VyIGhlcmVcclxuICAgIHZhciBwYXJzZXIgPSBuZXcgUGFyc2VyKHRyZWVBZGFwdGVyKSxcclxuICAgICAgICBwYXJzaW5nVW5pdCA9IG5ldyBQYXJzaW5nVW5pdChwYXJzZXIpO1xyXG5cclxuICAgIC8vTk9URTogb3ZlcnJpZGUgcGFyc2VyIGxvb3AgbWV0aG9kXHJcbiAgICBwYXJzZXIuX3J1blBhcnNpbmdMb29wID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHBhcnNpbmdVbml0LnBhcnNpbmdMb29wTG9jayA9IHRydWU7XHJcblxyXG4gICAgICAgIHdoaWxlICghcGFyc2luZ1VuaXQuc3VzcGVuZGVkICYmICF0aGlzLnN0b3BwZWQpXHJcbiAgICAgICAgICAgIHRoaXMuX2l0ZXJhdGVQYXJzaW5nTG9vcCgpO1xyXG5cclxuICAgICAgICBwYXJzaW5nVW5pdC5wYXJzaW5nTG9vcExvY2sgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZClcclxuICAgICAgICAgICAgcGFyc2luZ1VuaXQuY2FsbGJhY2sodGhpcy5kb2N1bWVudCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vTk9URTogd2FpdCB3aGlsZSBwYXJzZXJDb250cm9sbGVyIHdpbGwgYmUgYWRvcHRlZCBieSBjYWxsaW5nIGNvZGUsIHRoZW5cclxuICAgIC8vc3RhcnQgcGFyc2luZ1xyXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcGFyc2VyLnBhcnNlKGh0bWwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHBhcnNpbmdVbml0O1xyXG59O1xyXG5cclxuZXhwb3J0cy5wYXJzZUlubmVySHRtbCA9IGZ1bmN0aW9uIChpbm5lckh0bWwsIGNvbnRleHRFbGVtZW50LCB0cmVlQWRhcHRlcikge1xyXG4gICAgLy9OT1RFOiB0aGlzIHNob3VsZCBiZSByZWVudHJhbnQsIHNvIHdlIGNyZWF0ZSBuZXcgcGFyc2VyIGhlcmVcclxuICAgIHZhciBwYXJzZXIgPSBuZXcgUGFyc2VyKHRyZWVBZGFwdGVyKTtcclxuXHJcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlRnJhZ21lbnQoaW5uZXJIdG1sLCBjb250ZXh0RWxlbWVudCk7XHJcbn07IiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFBhcnNpbmdVbml0ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFyc2VyKSB7XHJcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcclxuICAgIHRoaXMuc3VzcGVuZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhcnNpbmdMb29wTG9jayA9IGZhbHNlO1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGw7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUuX3N0YXRlR3VhcmQgPSBmdW5jdGlvbiAoc3VzcGVuZCkge1xyXG4gICAgaWYgKHRoaXMuc3VzcGVuZGVkICYmIHN1c3BlbmQpXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJzZTU6IFBhcnNlciB3YXMgYWxyZWFkeSBzdXNwZW5kZWQuIFBsZWFzZSwgY2hlY2sgeW91ciBjb250cm9sIGZsb3cgbG9naWMuJyk7XHJcblxyXG4gICAgZWxzZSBpZiAoIXRoaXMuc3VzcGVuZGVkICYmICFzdXNwZW5kKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyc2U1OiBQYXJzZXIgd2FzIGFscmVhZHkgcmVzdW1lZC4gUGxlYXNlLCBjaGVjayB5b3VyIGNvbnRyb2wgZmxvdyBsb2dpYy4nKTtcclxuXHJcbiAgICByZXR1cm4gc3VzcGVuZDtcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5zdXNwZW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5zdXNwZW5kZWQgPSB0aGlzLl9zdGF0ZUd1YXJkKHRydWUpO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3VzcGVuZGVkID0gdGhpcy5fc3RhdGVHdWFyZChmYWxzZSk7XHJcblxyXG4gICAgLy9OT1RFOiBkb24ndCBlbnRlciBwYXJzaW5nIGxvb3AgaWYgaXQgaXMgbG9ja2VkLiBXaXRob3V0IHRoaXMgbG9jayBfcnVuUGFyc2luZ0xvb3AoKSBtYXkgYmUgY2FsbGVkXHJcbiAgICAvL3doaWxlIHBhcnNpbmcgbG9vcCBpcyBzdGlsbCBydW5uaW5nLiBFLmcuIHdoZW4gc3VzcGVuZCgpIGFuZCByZXN1bWUoKSBjYWxsZWQgc3luY2hyb25vdXNseS5cclxuICAgIGlmICghdGhpcy5wYXJzaW5nTG9vcExvY2spXHJcbiAgICAgICAgdGhpcy5wYXJzZXIuX3J1blBhcnNpbmdMb29wKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUuZG9jdW1lbnRXcml0ZSA9IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICB0aGlzLnBhcnNlci50b2tlbml6ZXIucHJlcHJvY2Vzc29yLndyaXRlKGh0bWwpO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLmhhbmRsZVNjcmlwdHMgPSBmdW5jdGlvbiAoc2NyaXB0SGFuZGxlcikge1xyXG4gICAgdGhpcy5wYXJzZXIuc2NyaXB0SGFuZGxlciA9IHNjcmlwdEhhbmRsZXI7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUuZG9uZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgRGVmYXVsdFRyZWVBZGFwdGVyID0gcmVxdWlyZSgnLi4vdHJlZV9hZGFwdGVycy9kZWZhdWx0JyksXHJcbiAgICBEb2N0eXBlID0gcmVxdWlyZSgnLi4vY29tbW9uL2RvY3R5cGUnKSxcclxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyksXHJcbiAgICBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxyXG4gICAgTlMgPSBIVE1MLk5BTUVTUEFDRVM7XHJcblxyXG4vL0RlZmF1bHQgc2VyaWFsaXplciBvcHRpb25zXHJcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XHJcbiAgICBlbmNvZGVIdG1sRW50aXRpZXM6IHRydWVcclxufTtcclxuXHJcbi8vRXNjYXBpbmcgcmVnZXhlc1xyXG52YXIgQU1QX1JFR0VYID0gLyYvZyxcclxuICAgIE5CU1BfUkVHRVggPSAvXFx1MDBhMC9nLFxyXG4gICAgRE9VQkxFX1FVT1RFX1JFR0VYID0gL1wiL2csXHJcbiAgICBMVF9SRUdFWCA9IC88L2csXHJcbiAgICBHVF9SRUdFWCA9IC8+L2c7XHJcblxyXG4vL0VzY2FwZSBzdHJpbmdcclxuZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0ciwgYXR0ck1vZGUpIHtcclxuICAgIHN0ciA9IHN0clxyXG4gICAgICAgIC5yZXBsYWNlKEFNUF9SRUdFWCwgJyZhbXA7JylcclxuICAgICAgICAucmVwbGFjZShOQlNQX1JFR0VYLCAnJm5ic3A7Jyk7XHJcblxyXG4gICAgaWYgKGF0dHJNb2RlKVxyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKERPVUJMRV9RVU9URV9SRUdFWCwgJyZxdW90OycpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHN0ciA9IHN0clxyXG4gICAgICAgICAgICAucmVwbGFjZShMVF9SRUdFWCwgJyZsdDsnKVxyXG4gICAgICAgICAgICAucmVwbGFjZShHVF9SRUdFWCwgJyZndDsnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5cclxuLy9FbnF1b3RlIGRvY3R5cGUgSURcclxuXHJcblxyXG5cclxuLy9TZXJpYWxpemVyXHJcbnZhciBTZXJpYWxpemVyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodHJlZUFkYXB0ZXIsIG9wdGlvbnMpIHtcclxuICAgIHRoaXMudHJlZUFkYXB0ZXIgPSB0cmVlQWRhcHRlciB8fCBEZWZhdWx0VHJlZUFkYXB0ZXI7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5tZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcclxufTtcclxuXHJcblxyXG4vL0FQSVxyXG5TZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgdGhpcy5odG1sID0gJyc7XHJcbiAgICB0aGlzLl9zZXJpYWxpemVDaGlsZE5vZGVzKG5vZGUpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0bWw7XHJcbn07XHJcblxyXG5cclxuLy9JbnRlcm5hbHNcclxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZUNoaWxkTm9kZXMgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSkge1xyXG4gICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50Tm9kZSk7XHJcblxyXG4gICAgaWYgKGNoaWxkTm9kZXMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgY25MZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGNuTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gY2hpbGROb2Rlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzRWxlbWVudE5vZGUoY3VycmVudE5vZGUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplRWxlbWVudChjdXJyZW50Tm9kZSk7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzVGV4dE5vZGUoY3VycmVudE5vZGUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplVGV4dE5vZGUoY3VycmVudE5vZGUpO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50cmVlQWRhcHRlci5pc0NvbW1lbnROb2RlKGN1cnJlbnROb2RlKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZUNvbW1lbnROb2RlKGN1cnJlbnROb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKGN1cnJlbnROb2RlKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZURvY3VtZW50VHlwZU5vZGUoY3VycmVudE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKSxcclxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKG5vZGUpO1xyXG5cclxuICAgIHRoaXMuaHRtbCArPSAnPCcgKyB0bjtcclxuICAgIHRoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXMobm9kZSk7XHJcbiAgICB0aGlzLmh0bWwgKz0gJz4nO1xyXG5cclxuICAgIGlmICh0biAhPT0gJC5BUkVBICYmIHRuICE9PSAkLkJBU0UgJiYgdG4gIT09ICQuQkFTRUZPTlQgJiYgdG4gIT09ICQuQkdTT1VORCAmJiB0biAhPT0gJC5CUiAmJiB0biAhPT0gJC5CUiAmJlxyXG4gICAgICAgIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5FTUJFRCAmJiB0biAhPT0gJC5GUkFNRSAmJiB0biAhPT0gJC5IUiAmJiB0biAhPT0gJC5JTUcgJiYgdG4gIT09ICQuSU5QVVQgJiZcclxuICAgICAgICB0biAhPT0gJC5LRVlHRU4gJiYgdG4gIT09ICQuTElOSyAmJiB0biAhPT0gJC5NRU5VSVRFTSAmJiB0biAhPT0gJC5NRVRBICYmIHRuICE9PSAkLlBBUkFNICYmIHRuICE9PSAkLlNPVVJDRSAmJlxyXG4gICAgICAgIHRuICE9PSAkLlRSQUNLICYmIHRuICE9PSAkLldCUikge1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuUFJFIHx8IHRuID09PSAkLlRFWFRBUkVBIHx8IHRuID09PSAkLkxJU1RJTkcpIHtcclxuICAgICAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEZpcnN0Q2hpbGQobm9kZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAmJiB0aGlzLnRyZWVBZGFwdGVyLmlzVGV4dE5vZGUoZmlyc3RDaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQoZmlyc3RDaGlsZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRbMF0gPT09ICdcXG4nKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbCArPSAnXFxuJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNoaWxkTm9kZXNIb2xkZXIgPSB0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMobm9kZSlbMF0gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2VyaWFsaXplQ2hpbGROb2RlcyhjaGlsZE5vZGVzSG9sZGVyKTtcclxuICAgICAgICB0aGlzLmh0bWwgKz0gJzwvJyArIHRuICsgJz4nO1xyXG4gICAgfVxyXG59O1xyXG5cclxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgdmFyIGF0dHJzID0gdGhpcy50cmVlQWRhcHRlci5nZXRBdHRyTGlzdChub2RlKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMCwgYXR0cnNMZW5ndGggPSBhdHRycy5sZW5ndGg7IGkgPCBhdHRyc0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGF0dHIgPSBhdHRyc1tpXSxcclxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZW5jb2RlSHRtbEVudGl0aWVzID8gZXNjYXBlU3RyaW5nKGF0dHIudmFsdWUsIHRydWUpIDogYXR0ci52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5odG1sICs9ICcgJztcclxuXHJcbiAgICAgICAgaWYgKCFhdHRyLm5hbWVzcGFjZSlcclxuICAgICAgICAgICAgdGhpcy5odG1sICs9IGF0dHIubmFtZTtcclxuXHJcbiAgICAgICAgZWxzZSBpZiAoYXR0ci5uYW1lc3BhY2UgPT09IE5TLlhNTClcclxuICAgICAgICAgICAgdGhpcy5odG1sICs9ICd4bWw6JyArIGF0dHIubmFtZTtcclxuXHJcbiAgICAgICAgZWxzZSBpZiAoYXR0ci5uYW1lc3BhY2UgPT09IE5TLlhNTE5TKSB7XHJcbiAgICAgICAgICAgIGlmIChhdHRyLm5hbWUgIT09ICd4bWxucycpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3htbG5zOic7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gYXR0ci5uYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAoYXR0ci5uYW1lc3BhY2UgPT09IE5TLlhMSU5LKVxyXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3hsaW5rOicgKyBhdHRyLm5hbWU7XHJcblxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5odG1sICs9IGF0dHIubmFtZXNwYWNlICsgJzonICsgYXR0ci5uYW1lO1xyXG5cclxuICAgICAgICB0aGlzLmh0bWwgKz0gJz1cIicgKyB2YWx1ZSArICdcIic7XHJcbiAgICB9XHJcbn07XHJcblxyXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRleHROb2RlQ29udGVudChub2RlKSxcclxuICAgICAgICBwYXJlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFBhcmVudE5vZGUobm9kZSksXHJcbiAgICAgICAgcGFyZW50VG4gPSB2b2lkIDA7XHJcblxyXG4gICAgaWYgKHBhcmVudCAmJiB0aGlzLnRyZWVBZGFwdGVyLmlzRWxlbWVudE5vZGUocGFyZW50KSlcclxuICAgICAgICBwYXJlbnRUbiA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwYXJlbnQpO1xyXG5cclxuICAgIGlmIChwYXJlbnRUbiA9PT0gJC5TVFlMRSB8fCBwYXJlbnRUbiA9PT0gJC5TQ1JJUFQgfHwgcGFyZW50VG4gPT09ICQuWE1QIHx8IHBhcmVudFRuID09PSAkLklGUkFNRSB8fFxyXG4gICAgICAgIHBhcmVudFRuID09PSAkLk5PRU1CRUQgfHwgcGFyZW50VG4gPT09ICQuTk9GUkFNRVMgfHwgcGFyZW50VG4gPT09ICQuUExBSU5URVhUIHx8IHBhcmVudFRuID09PSAkLk5PU0NSSVBUKSB7XHJcbiAgICAgICAgdGhpcy5odG1sICs9IGNvbnRlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuaHRtbCArPSB0aGlzLm9wdGlvbnMuZW5jb2RlSHRtbEVudGl0aWVzID8gZXNjYXBlU3RyaW5nKGNvbnRlbnQsIGZhbHNlKSA6IGNvbnRlbnQ7XHJcbn07XHJcblxyXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgdGhpcy5odG1sICs9ICc8IS0tJyArIHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q29tbWVudE5vZGVDb250ZW50KG5vZGUpICsgJy0tPic7XHJcbn07XHJcblxyXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplRG9jdW1lbnRUeXBlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICB2YXIgbmFtZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRUeXBlTm9kZU5hbWUobm9kZSksXHJcbiAgICAgICAgcHVibGljSWQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZChub2RlKSxcclxuICAgICAgICBzeXN0ZW1JZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkKG5vZGUpO1xyXG5cclxuICAgIHRoaXMuaHRtbCArPSAnPCcgKyBEb2N0eXBlLnNlcmlhbGl6ZUNvbnRlbnQobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSArICc+JztcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcclxuICAgIFRva2VuaXplclByb3h5ID0gcmVxdWlyZSgnLi90b2tlbml6ZXJfcHJveHknKSxcclxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyk7XHJcblxyXG4vL0RlZmF1bHQgb3B0aW9uc1xyXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xyXG4gICAgZGVjb2RlSHRtbEVudGl0aWVzOiB0cnVlLFxyXG4gICAgbG9jYXRpb25JbmZvOiBmYWxzZVxyXG59O1xyXG5cclxuLy9Ta2lwcGluZyBoYW5kbGVyXHJcbmZ1bmN0aW9uIHNraXAoKSB7XHJcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcclxufVxyXG5cclxuLy9TaW1wbGVBcGlQYXJzZXJcclxudmFyIFNpbXBsZUFwaVBhcnNlciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhhbmRsZXJzLCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5tZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcclxuICAgIHRoaXMuaGFuZGxlcnMgPSB7XHJcbiAgICAgICAgZG9jdHlwZTogdGhpcy5fd3JhcEhhbmRsZXIoaGFuZGxlcnMuZG9jdHlwZSksXHJcbiAgICAgICAgc3RhcnRUYWc6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLnN0YXJ0VGFnKSxcclxuICAgICAgICBlbmRUYWc6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLmVuZFRhZyksXHJcbiAgICAgICAgdGV4dDogdGhpcy5fd3JhcEhhbmRsZXIoaGFuZGxlcnMudGV4dCksXHJcbiAgICAgICAgY29tbWVudDogdGhpcy5fd3JhcEhhbmRsZXIoaGFuZGxlcnMuY29tbWVudClcclxuICAgIH07XHJcbn07XHJcblxyXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl93cmFwSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XHJcbiAgICB2YXIgcGFyc2VyID0gdGhpcztcclxuXHJcbiAgICBoYW5kbGVyID0gaGFuZGxlciB8fCBza2lwO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25JbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICBhcmdzLnB1c2gocGFyc2VyLmN1cnJlbnRUb2tlbkxvY2F0aW9uKTtcclxuICAgICAgICAgICAgaGFuZGxlci5hcHBseShoYW5kbGVyLCBhcmdzKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBoYW5kbGVyO1xyXG59O1xyXG5cclxuLy9BUElcclxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICB2YXIgdG9rZW4gPSBudWxsO1xyXG5cclxuICAgIHRoaXMuX3Jlc2V0KGh0bWwpO1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgICB0b2tlbiA9IHRoaXMudG9rZW5pemVyUHJveHkuZ2V0TmV4dFRva2VuKCk7XHJcblxyXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOIHx8XHJcbiAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiB8fFxyXG4gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4pIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25JbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nVGV4dCA9PT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XHJcblxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24uZW5kID0gdG9rZW4ubG9jYXRpb24uZW5kO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdUZXh0ID0gKHRoaXMucGVuZGluZ1RleHQgfHwgJycpICsgdG9rZW4uY2hhcnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZW1pdFBlbmRpbmdUZXh0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVRva2VuKHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICB9IHdoaWxlICh0b2tlbi50eXBlICE9PSBUb2tlbml6ZXIuRU9GX1RPS0VOKTtcclxufTtcclxuXHJcbi8vSW50ZXJuYWxzXHJcblNpbXBsZUFwaVBhcnNlci5wcm90b3R5cGUuX2hhbmRsZVRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9uSW5mbylcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XHJcblxyXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4pXHJcbiAgICAgICAgdGhpcy5oYW5kbGVycy5zdGFydFRhZyh0b2tlbi50YWdOYW1lLCB0b2tlbi5hdHRycywgdG9rZW4uc2VsZkNsb3NpbmcpO1xyXG5cclxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxyXG4gICAgICAgIHRoaXMuaGFuZGxlcnMuZW5kVGFnKHRva2VuLnRhZ05hbWUpO1xyXG5cclxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DT01NRU5UX1RPS0VOKVxyXG4gICAgICAgIHRoaXMuaGFuZGxlcnMuY29tbWVudCh0b2tlbi5kYXRhKTtcclxuXHJcbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTilcclxuICAgICAgICB0aGlzLmhhbmRsZXJzLmRvY3R5cGUodG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKTtcclxuXHJcbn07XHJcblxyXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICB0aGlzLnRva2VuaXplclByb3h5ID0gbmV3IFRva2VuaXplclByb3h5KGh0bWwsIHRoaXMub3B0aW9ucyk7XHJcbiAgICB0aGlzLnBlbmRpbmdUZXh0ID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24gPSBudWxsO1xyXG59O1xyXG5cclxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5fZW1pdFBlbmRpbmdUZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMucGVuZGluZ1RleHQgIT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZXJzLnRleHQodGhpcy5wZW5kaW5nVGV4dCk7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nVGV4dCA9IG51bGw7XHJcbiAgICB9XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXHJcbiAgICBGb3JlaWduQ29udGVudCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9mb3JlaWduX2NvbnRlbnQnKSxcclxuICAgIFVOSUNPREUgPSByZXF1aXJlKCcuLi9jb21tb24vdW5pY29kZScpLFxyXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XHJcblxyXG4vL0FsaWFzZXNcclxudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcclxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xyXG5cclxuXHJcbi8vVG9rZW5pemVyIHByb3h5XHJcbi8vTk9URTogdGhpcyBwcm94eSBzaW11bGF0ZXMgYWRqdXN0bWVudCBvZiB0aGUgVG9rZW5pemVyIHdoaWNoIHBlcmZvcm1lZCBieSBzdGFuZGFyZCBwYXJzZXIgZHVyaW5nIHRyZWUgY29uc3RydWN0aW9uLlxyXG52YXIgVG9rZW5pemVyUHJveHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChodG1sLCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLnRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoaHRtbCwgb3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5uYW1lc3BhY2VTdGFjayA9IFtdO1xyXG4gICAgdGhpcy5uYW1lc3BhY2VTdGFja1RvcCA9IC0xO1xyXG4gICAgdGhpcy5jdXJyZW50TmFtZXNwYWNlID0gbnVsbDtcclxuICAgIHRoaXMuaW5Gb3JlaWduQ29udGVudCA9IGZhbHNlO1xyXG59O1xyXG5cclxuLy9BUElcclxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB0b2tlbiA9IHRoaXMudG9rZW5pemVyLmdldE5leHRUb2tlbigpO1xyXG5cclxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxyXG4gICAgICAgIHRoaXMuX2hhbmRsZVN0YXJ0VGFnVG9rZW4odG9rZW4pO1xyXG5cclxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxyXG4gICAgICAgIHRoaXMuX2hhbmRsZUVuZFRhZ1Rva2VuKHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4gJiYgdGhpcy5pbkZvcmVpZ25Db250ZW50KSB7XHJcbiAgICAgICAgdG9rZW4udHlwZSA9IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU47XHJcbiAgICAgICAgdG9rZW4uY2hhcnMgPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9rZW47XHJcbn07XHJcblxyXG4vL05hbWVzcGFjZSBzdGFjayBtdXRhdGlvbnNcclxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9lbnRlck5hbWVzcGFjZSA9IGZ1bmN0aW9uIChuYW1lc3BhY2UpIHtcclxuICAgIHRoaXMubmFtZXNwYWNlU3RhY2tUb3ArKztcclxuICAgIHRoaXMubmFtZXNwYWNlU3RhY2sucHVzaChuYW1lc3BhY2UpO1xyXG5cclxuICAgIHRoaXMuaW5Gb3JlaWduQ29udGVudCA9IG5hbWVzcGFjZSAhPT0gTlMuSFRNTDtcclxuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcclxuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSB0aGlzLmluRm9yZWlnbkNvbnRlbnQ7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMubmFtZXNwYWNlU3RhY2tUb3AtLTtcclxuICAgIHRoaXMubmFtZXNwYWNlU3RhY2sucG9wKCk7XHJcblxyXG4gICAgdGhpcy5jdXJyZW50TmFtZXNwYWNlID0gdGhpcy5uYW1lc3BhY2VTdGFja1t0aGlzLm5hbWVzcGFjZVN0YWNrVG9wXTtcclxuICAgIHRoaXMuaW5Gb3JlaWduQ29udGVudCA9IHRoaXMuY3VycmVudE5hbWVzcGFjZSAhPT0gTlMuSFRNTDtcclxuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSB0aGlzLmluRm9yZWlnbkNvbnRlbnQ7XHJcbn07XHJcblxyXG4vL1Rva2VuIGhhbmRsZXJzXHJcblRva2VuaXplclByb3h5LnByb3RvdHlwZS5fZW5zdXJlVG9rZW5pemVyTW9kZSA9IGZ1bmN0aW9uICh0bikge1xyXG4gICAgaWYgKHRuID09PSAkLlRFWFRBUkVBIHx8IHRuID09PSAkLlRJVExFKVxyXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlBMQUlOVEVYVClcclxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXHJcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5TQ1JJUFRfREFUQTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5TVFlMRSB8fCB0biA9PT0gJC5JRlJBTUUgfHwgdG4gPT09ICQuWE1QIHx8XHJcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0VNQkVEIHx8IHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLk5PU0NSSVBUKSB7XHJcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5SQVdURVhUO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9oYW5kbGVTdGFydFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5TVkcpXHJcbiAgICAgICAgdGhpcy5fZW50ZXJOYW1lc3BhY2UoTlMuU1ZHKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5NQVRIKVxyXG4gICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLk1BVEhNTCk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xyXG4gICAgICAgICAgICBpZiAoRm9yZWlnbkNvbnRlbnQuY2F1c2VzRXhpdCh0b2tlbikpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sZWF2ZUN1cnJlbnROYW1lc3BhY2UoKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEZvcmVpZ25Db250ZW50LmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIHRoaXMuY3VycmVudE5hbWVzcGFjZSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgRm9yZWlnbkNvbnRlbnQuaXNIdG1sSW50ZWdyYXRpb25Qb2ludCh0biwgdGhpcy5jdXJyZW50TmFtZXNwYWNlLCB0b2tlbi5hdHRycykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLkhUTUwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVRva2VuaXplck1vZGUodG4pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9oYW5kbGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xyXG4gICAgICAgIHZhciBwcmV2aW91c05zID0gdGhpcy5uYW1lc3BhY2VTdGFja1t0aGlzLm5hbWVzcGFjZVN0YWNrVG9wIC0gMV07XHJcblxyXG4gICAgICAgIC8vTk9URTogY2hlY2sgZm9yIGV4aXQgZnJvbSBpbnRlZ3JhdGlvbiBwb2ludFxyXG4gICAgICAgIGlmIChGb3JlaWduQ29udGVudC5pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHRuLCBwcmV2aW91c05zKSB8fFxyXG4gICAgICAgICAgICBGb3JlaWduQ29udGVudC5pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHRuLCBwcmV2aW91c05zLCB0b2tlbi5hdHRycykpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGVhdmVDdXJyZW50TmFtZXNwYWNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXHJcbiAgICAgICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuREFUQTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICgodG4gPT09ICQuU1ZHICYmIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9PT0gTlMuU1ZHKSB8fFxyXG4gICAgICAgICAgICAgKHRuID09PSAkLk1BVEggJiYgdGhpcy5jdXJyZW50TmFtZXNwYWNlID09PSBOUy5NQVRITUwpKVxyXG4gICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLmFzc2lnbiA9IGZ1bmN0aW9uICh0b2tlbml6ZXIpIHtcclxuICAgIC8vTk9URTogb2J0YWluIFRva2VuaXplciBwcm90byB0aGlzIHdheSB0byBhdm9pZCBtb2R1bGUgY2lyY3VsYXIgcmVmZXJlbmNlc1xyXG4gICAgdmFyIHRva2VuaXplclByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRva2VuaXplcik7XHJcblxyXG4gICAgdG9rZW5pemVyLnRva2VuU3RhcnRMb2MgPSAtMTtcclxuXHJcbiAgICAvL05PVEU6IGFkZCBsb2NhdGlvbiBpbmZvIGJ1aWxkZXIgbWV0aG9kXHJcbiAgICB0b2tlbml6ZXIuX2F0dGFjaExvY2F0aW9uSW5mbyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgICAgIHRva2VuLmxvY2F0aW9uID0ge1xyXG4gICAgICAgICAgICBzdGFydDogdGhpcy50b2tlblN0YXJ0TG9jLFxyXG4gICAgICAgICAgICBlbmQ6IC0xXHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiBwYXRjaCB0b2tlbiBjcmVhdGlvbiBtZXRob2RzIGFuZCBhdHRhY2ggbG9jYXRpb24gb2JqZWN0c1xyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVTdGFydFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRhZ05hbWVGaXJzdENoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZVN0YXJ0VGFnVG9rZW4uY2FsbCh0aGlzLCB0YWdOYW1lRmlyc3RDaCk7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoTG9jYXRpb25JbmZvKHRoaXMuY3VycmVudFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVFbmRUYWdUb2tlbi5jYWxsKHRoaXMsIHRhZ05hbWVGaXJzdENoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZUNvbW1lbnRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlQ29tbWVudFRva2VuLmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoTG9jYXRpb25JbmZvKHRoaXMuY3VycmVudFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVEb2N0eXBlVG9rZW4gPSBmdW5jdGlvbiAoZG9jdHlwZU5hbWVGaXJzdENoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZURvY3R5cGVUb2tlbi5jYWxsKHRoaXMsIGRvY3R5cGVOYW1lRmlyc3RDaCk7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoTG9jYXRpb25JbmZvKHRoaXMuY3VycmVudFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbiA9IGZ1bmN0aW9uICh0eXBlLCBjaCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbi5jYWxsKHRoaXMsIHR5cGUsIGNoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvL05PVEU6IHBhdGNoIHRva2VuIGVtaXNzaW9uIG1ldGhvZHMgdG8gZGV0ZXJtaW5lIGVuZCBsb2NhdGlvblxyXG4gICAgdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBwZW5kaW5nIGNoYXJhY3RlciB0b2tlbiBtYWtlIGl0J3MgZW5kIGxvY2F0aW9uIGVxdWFsIHRvIHRoZVxyXG4gICAgICAgIC8vY3VycmVudCB0b2tlbidzIHN0YXJ0IGxvY2F0aW9uLlxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbilcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kID0gdGhpcy5jdXJyZW50VG9rZW4ubG9jYXRpb24uc3RhcnQ7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmxvY2F0aW9uLmVuZCA9IHRoaXMucHJlcHJvY2Vzc29yLnBvcyArIDE7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2VtaXRDdXJyZW50VG9rZW4uY2FsbCh0aGlzKTtcclxuICAgIH07XHJcblxyXG4gICAgdG9rZW5pemVyLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBjaGFyYWN0ZXIgdG9rZW4gYW5kIGl0J3MgbG9jYXRpb24gd2Fzbid0IHNldCBpbiB0aGUgX2VtaXRDdXJyZW50VG9rZW4oKSxcclxuICAgICAgICAvL3RoZW4gc2V0IGl0J3MgbG9jYXRpb24gYXQgdGhlIGN1cnJlbnQgcHJlcHJvY2Vzc29yIHBvc2l0aW9uXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuICYmIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgLy9OT1RFOiB3ZSBkb24ndCBuZWVkIHRvIGluY3JlbWVudCBwcmVwcm9jZXNzb3IgcG9zaXRpb24sIHNpbmNlIGNoYXJhY3RlciB0b2tlblxyXG4gICAgICAgICAgICAvL2VtaXNzaW9uIGlzIGFsd2F5cyBmb3JjZWQgYnkgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0b2tlbiBoZXJlLlxyXG4gICAgICAgICAgICAvL1NvLCB3ZSBhbHJlYWR5IGhhdmUgYWR2YW5jZWQgcG9zaXRpb24uXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZCA9IHRoaXMucHJlcHJvY2Vzc29yLnBvcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuLmNhbGwodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vTk9URTogcGF0Y2ggaW5pdGlhbCBzdGF0ZXMgZm9yIGVhY2ggbW9kZSB0byBvYnRhaW4gdG9rZW4gc3RhcnQgcG9zaXRpb25cclxuICAgIE9iamVjdC5rZXlzKHRva2VuaXplclByb3RvLk1PREUpXHJcblxyXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKG1vZGVOYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b2tlbml6ZXJQcm90by5NT0RFW21vZGVOYW1lXTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgdG9rZW5pemVyW3N0YXRlXSA9IGZ1bmN0aW9uIChjcCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2tlblN0YXJ0TG9jID0gdGhpcy5wcmVwcm9jZXNzb3IucG9zO1xyXG4gICAgICAgICAgICAgICAgdG9rZW5pemVyUHJvdG9bc3RhdGVdLmNhbGwodGhpcywgY3ApO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL05PVEU6IHRoaXMgZmlsZSBjb250YWlucyBhdXRvIGdlbmVyYXRlZCB0cmllIHN0cnVjdHVyZSB0aGF0IGlzIHVzZWQgZm9yIG5hbWVkIGVudGl0eSByZWZlcmVuY2VzIGNvbnN1bXB0aW9uXHJcbi8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjdG9rZW5pemluZy1jaGFyYWN0ZXItcmVmZXJlbmNlcyBhbmRcclxuLy9odHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9uYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlcy5odG1sI25hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VzKVxyXG5tb2R1bGUuZXhwb3J0cyA9IHs2NTp7bDp7Njk6e2w6ezEwODp7bDp7MTA1OntsOnsxMDM6e2w6ezU5OntjOlsxOThdfX0sYzpbMTk4XX19fX19fX0sNzc6e2w6ezgwOntsOns1OTp7YzpbMzhdfX0sYzpbMzhdfX19LDk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzE5M119fSxjOlsxOTNdfX19fX19fX19LDk4OntsOnsxMTQ6e2w6ezEwMTp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOlsyNThdfX19fX19fX19fX0sOTk6e2w6ezEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzE5NF19fSxjOlsxOTRdfX19fX0sMTIxOntsOns1OTp7YzpbMTA0MF19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA2OF19fX19fSwxMDM6e2w6ezExNDp7bDp7OTc6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbMTkyXX19LGM6WzE5Ml19fX19fX19fX0sMTA4OntsOnsxMTI6e2w6ezEwNDp7bDp7OTc6e2w6ezU5OntjOls5MTNdfX19fX19fX19LDEwOTp7bDp7OTc6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsyNTZdfX19fX19fX19LDExMDp7bDp7MTAwOntsOns1OTp7YzpbMTA4MzVdfX19fX0sMTExOntsOnsxMDM6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMjYwXX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMjBdfX19fX19fSwxMTI6e2w6ezExMjp7bDp7MTA4OntsOnsxMjE6e2w6ezcwOntsOnsxMTc6e2w6ezExMDp7bDp7OTk6e2w6ezExNjp7bDp7MTA1OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzgyODldfX19fX19fX19fX19fX19fX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDM6e2w6ezU5OntjOlsxOTddfX0sYzpbMTk3XX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTY0XX19fX19LDExNTp7bDp7MTA1OntsOnsxMDM6e2w6ezExMDp7bDp7NTk6e2M6Wzg3ODhdfX19fX19fX19fX0sMTE2OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOlsxOTVdfX0sYzpbMTk1XX19fX19fX19fSwxMTc6e2w6ezEwOTp7bDp7MTA4OntsOns1OTp7YzpbMTk2XX19LGM6WzE5Nl19fX19fX19LDY2OntsOns5Nzp7bDp7OTk6e2w6ezEwNzp7bDp7MTE1OntsOnsxMDg6e2w6ezk3OntsOnsxMTU6e2w6ezEwNDp7bDp7NTk6e2M6Wzg3MjZdfX19fX19fX19fX19fX19LDExNDp7bDp7MTE4OntsOns1OTp7YzpbMTA5ODNdfX19LDExOTp7bDp7MTAxOntsOnsxMDA6e2w6ezU5OntjOls4OTY2XX19fX19fX19fX19LDk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDQxXX19fX19LDEwMTp7bDp7OTk6e2w6ezk3OntsOnsxMTc6e2w6ezExNTp7bDp7MTAxOntsOns1OTp7YzpbODc1N119fX19fX19fX19fSwxMTQ6e2w6ezExMDp7bDp7MTExOntsOnsxMTc6e2w6ezEwODp7bDp7MTA4OntsOnsxMDU6e2w6ezExNTp7bDp7NTk6e2M6Wzg0OTJdfX19fX19fX19fX19fX19fX0sMTE2OntsOns5Nzp7bDp7NTk6e2M6WzkxNF19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDY5XX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMjFdfX19fX19fSwxMTQ6e2w6ezEwMTp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOls3MjhdfX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6Wzg0OTJdfX19fX19fSwxMTc6e2w6ezEwOTp7bDp7MTEyOntsOnsxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg3ODJdfX19fX19fX19fX19fSw2Nzp7bDp7NzI6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDYzXX19fX19fX0sNzk6e2w6ezgwOntsOns4OTp7bDp7NTk6e2M6WzE2OV19fSxjOlsxNjldfX19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMjYyXX19fX19fX19fSwxMTI6e2w6ezU5OntjOls4OTE0XX0sMTA1OntsOnsxMTY6e2w6ezk3OntsOnsxMDg6e2w6ezY4OntsOnsxMDU6e2w6ezEwMjp7bDp7MTAyOntsOnsxMDE6e2w6ezExNDp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7MTA1OntsOns5Nzp7bDp7MTA4OntsOns2ODp7bDp7NTk6e2M6Wzg1MTddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMjE6e2w6ezEwODp7bDp7MTAxOntsOnsxMjE6e2w6ezExNTp7bDp7NTk6e2M6Wzg0OTNdfX19fX19fX19fX19fSw5OTp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlsyNjhdfX19fX19fX19LDEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzE5OV19fSxjOlsxOTldfX19fX19fSwxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsyNjRdfX19fX19fSwxMTE6e2w6ezExMDp7bDp7MTA1OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6Wzg3NTJdfX19fX19fX19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMjY2XX19fX19fX0sMTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDg6e2w6ezk3OntsOns1OTp7YzpbMTg0XX19fX19fX19fX19LDExMDp7bDp7MTE2OntsOnsxMDE6e2w6ezExNDp7bDp7Njg6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTgzXX19fX19fX19fX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbODQ5M119fX19fSwxMDQ6e2w6ezEwNTp7bDp7NTk6e2M6WzkzNV19fX19fSwxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezEwODp7bDp7MTAxOntsOns2ODp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOls4ODU3XX19fX19fX0sNzc6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6Wzg4NTRdfX19fX19fX19fX0sODA6e2w6ezEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOls4ODUzXX19fX19fX19fSw4NDp7bDp7MTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbODg1NV19fX19fX19fX19fX19fX19fX19fX0sMTA4OntsOnsxMTE6e2w6ezk5OntsOnsxMDc6e2w6ezExOTp7bDp7MTA1OntsOnsxMTU6e2w6ezEwMTp7bDp7Njc6e2w6ezExMTp7bDp7MTEwOntsOnsxMTY6e2w6ezExMTp7bDp7MTE3OntsOnsxMTQ6e2w6ezczOntsOnsxMTA6e2w6ezExNjp7bDp7MTAxOntsOnsxMDM6e2w6ezExNDp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg3NTRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezEwMTp7bDp7Njc6e2w6ezExNzp7bDp7MTE0OntsOnsxMDg6e2w6ezEyMTp7bDp7Njg6e2w6ezExMTp7bDp7MTE3OntsOns5ODp7bDp7MTA4OntsOnsxMDE6e2w6ezgxOntsOnsxMTc6e2w6ezExMTp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOls4MjIxXX19fX19fX19fX19fX19fX19fX19fX19LDgxOntsOnsxMTc6e2w6ezExMTp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOls4MjE3XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTA4OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6Wzg3NTldfSwxMDE6e2w6ezU5OntjOlsxMDg2OF19fX19fX19fX0sMTEwOntsOnsxMDM6e2w6ezExNDp7bDp7MTE3OntsOnsxMDE6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbODgwMV19fX19fX19fX19fX19LDEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOls4NzUxXX19fX19fX0sMTE2OntsOnsxMTE6e2w6ezExNzp7bDp7MTE0OntsOns3Mzp7bDp7MTEwOntsOnsxMTY6e2w6ezEwMTp7bDp7MTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4NzUwXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTI6e2w6ezEwMjp7bDp7NTk6e2M6Wzg0NTBdfX19LDExNDp7bDp7MTExOntsOnsxMDA6e2w6ezExNzp7bDp7OTk6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MjBdfX19fX19fX19fX19fX19LDExNzp7bDp7MTEwOntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOns2Nzp7bDp7MTA4OntsOnsxMTE6e2w6ezk5OntsOnsxMDc6e2w6ezExOTp7bDp7MTA1OntsOnsxMTU6e2w6ezEwMTp7bDp7Njc6e2w6ezExMTp7bDp7MTEwOntsOnsxMTY6e2w6ezExMTp7bDp7MTE3OntsOnsxMTQ6e2w6ezczOntsOnsxMTA6e2w6ezExNjp7bDp7MTAxOntsOnsxMDM6e2w6ezExNDp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg3NTVdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTQ6e2w6ezExMTp7bDp7MTE1OntsOnsxMTU6e2w6ezU5OntjOlsxMDc5OV19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTY2XX19fX19fX0sMTE3OntsOnsxMTI6e2w6ezU5OntjOls4OTE1XX0sNjc6e2w6ezk3OntsOnsxMTI6e2w6ezU5OntjOls4NzgxXX19fX19fX19fX19fX0sNjg6e2w6ezY4OntsOns1OTp7YzpbODUxN119LDExMTp7bDp7MTE2OntsOnsxMTQ6e2w6ezk3OntsOnsxMDQ6e2w6ezEwMDp7bDp7NTk6e2M6WzEwNTEzXX19fX19fX19fX19fX19fSw3NDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwMjZdfX19fX19fSw4Mzp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwMjldfX19fX19fSw5MDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwMzldfX19fX19fSw5Nzp7bDp7MTAzOntsOnsxMDM6e2w6ezEwMTp7bDp7MTE0OntsOns1OTp7YzpbODIyNV19fX19fX19fX0sMTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjA5XX19fX19LDExNTp7bDp7MTA0OntsOnsxMTg6e2w6ezU5OntjOlsxMDk4MF19fX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMjcwXX19fX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDQ0XX19fX19LDEwMTp7bDp7MTA4OntsOns1OTp7YzpbODcxMV19LDExNjp7bDp7OTc6e2w6ezU5OntjOls5MTZdfX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDcxXX19fX19LDEwNTp7bDp7OTc6e2w6ezk5OntsOnsxMTQ6e2w6ezEwNTp7bDp7MTE2OntsOnsxMDU6e2w6ezk5OntsOns5Nzp7bDp7MTA4OntsOns2NTp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlsxODBdfX19fX19fX19fX0sNjg6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbNzI5XX19fSwxMTc6e2w6ezk4OntsOnsxMDg6e2w6ezEwMTp7bDp7NjU6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbNzMzXX19fX19fX19fX19fX19fX19fX19fX19LDcxOntsOnsxMTQ6e2w6ezk3OntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6Wzk2XX19fX19fX19fX19LDg0OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOls3MzJdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDEwOTp7bDp7MTExOntsOnsxMTA6e2w6ezEwMDp7bDp7NTk6e2M6Wzg5MDBdfX19fX19fX19fX0sMTAyOntsOnsxMDI6e2w6ezEwMTp7bDp7MTE0OntsOnsxMDE6e2w6ezExMDp7bDp7MTE2OntsOnsxMDU6e2w6ezk3OntsOnsxMDg6e2w6ezY4OntsOns1OTp7YzpbODUxOF19fX19fX19fX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMjNdfX19fX0sMTE2OntsOns1OTp7YzpbMTY4XX0sNjg6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODQxMl19fX19fX19LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg3ODRdfX19fX19fX19fX19fSwxMTc6e2w6ezk4OntsOnsxMDg6e2w6ezEwMTp7bDp7Njc6e2w6ezExMTp7bDp7MTEwOntsOnsxMTY6e2w6ezExMTp7bDp7MTE3OntsOnsxMTQ6e2w6ezczOntsOnsxMTA6e2w6ezExNjp7bDp7MTAxOntsOnsxMDM6e2w6ezExNDp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg3NTFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSw2ODp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxNjhdfX19LDExOTp7bDp7MTEwOntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY1OV19fX19fX19fX19fX19fX19fX19LDc2OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY1Nl19fX19fX19fX19fSw4Mjp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY2MF19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwMTp7bDp7MTAxOntsOns1OTp7YzpbMTA5ODBdfX19fX19fX19fX19fSwxMTE6e2w6ezExMDp7bDp7MTAzOntsOns3Njp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6WzEwMjMyXX19fX19fX19fX19LDgyOntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOlsxMDIzNF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSw4Mjp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTAyMzNdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sODI6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NThdfX19fX19fX19fX0sODQ6e2w6ezEwMTp7bDp7MTAxOntsOns1OTp7YzpbODg3Ml19fX19fX19fX19fX19fX19fSw4NTp7bDp7MTEyOntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY1N119fX19fX19fX19fSw2ODp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NjFdfX19fX19fX19fX19fX19fX19fX19fX0sODY6e2w6ezEwMTp7bDp7MTE0OntsOnsxMTY6e2w6ezEwNTp7bDp7OTk6e2w6ezk3OntsOnsxMDg6e2w6ezY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODc0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExOTp7bDp7MTEwOntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODU5NV19LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1MTVdfX19fX19fSw4NTp7bDp7MTEyOntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY5M119fX19fX19fX19fX19fX19fX19fX19fX19LDY2OntsOnsxMTQ6e2w6ezEwMTp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOls3ODVdfX19fX19fX19fX0sNzY6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezgyOntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbMTA1NzZdfX19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwMTp7bDp7MTAxOntsOns4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTkwXX19fX19fX19fX19fX19fX19fX0sODY6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOls4NjM3XX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU4Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX0sODI6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7ODQ6e2w6ezEwMTp7bDp7MTAxOntsOns4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTkxXX19fX19fX19fX19fX19fX19fX0sODY6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOls4NjQxXX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU4M119fX19fX19fX19fX19fX19fX19fX19fX19fX19fSw4NDp7bDp7MTAxOntsOnsxMDE6e2w6ezU5OntjOls4ODY4XX0sNjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MTVdfX19fX19fX19fX19fX19fX0sOTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NTldfX19fX19fX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTY3XX19fX19LDExNjp7bDp7MTE0OntsOnsxMTE6e2w6ezEwNzp7bDp7NTk6e2M6WzI3Ml19fX19fX19fX19fX19LDY5OntsOns3ODp7bDp7NzE6e2w6ezU5OntjOlszMzBdfX19fX0sODQ6e2w6ezcyOntsOns1OTp7YzpbMjA4XX19LGM6WzIwOF19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMjAxXX19LGM6WzIwMV19fX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMjgyXX19fX19fX19fSwxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsyMDJdfX0sYzpbMjAyXX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNjldfX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzI3OF19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDcyXX19fX19LDEwMzp7bDp7MTE0OntsOns5Nzp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOlsyMDBdfX0sYzpbMjAwXX19fX19fX19fSwxMDg6e2w6ezEwMTp7bDp7MTA5OntsOnsxMDE6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbODcxMl19fX19fX19fX19fX19LDEwOTp7bDp7OTc6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsyNzRdfX19fX19fSwxMTI6e2w6ezExNjp7bDp7MTIxOntsOns4Mzp7bDp7MTA5OntsOns5Nzp7bDp7MTA4OntsOnsxMDg6e2w6ezgzOntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezExNDp7bDp7MTAxOntsOns1OTp7YzpbOTcyM119fX19fX19fX19fX19fX19fX19fX19fSw4Njp7bDp7MTAxOntsOnsxMTQ6e2w6ezEyMTp7bDp7ODM6e2w6ezEwOTp7bDp7OTc6e2w6ezEwODp7bDp7MTA4OntsOns4Mzp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMTQ6e2w6ezEwMTp7bDp7NTk6e2M6Wzk2NDNdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTAzOntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzI4MF19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTI0XX19fX19fX0sMTEyOntsOnsxMTU6e2w6ezEwNTp7bDp7MTA4OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzkxN119fX19fX19fX19fX19LDExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbMTA4NjldfSw4NDp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbODc3MF19fX19fX19fX19fX19fX0sMTA1OntsOnsxMDg6e2w6ezEwNTp7bDp7OTg6e2w6ezExNDp7bDp7MTA1OntsOnsxMTc6e2w6ezEwOTp7bDp7NTk6e2M6Wzg2NTJdfX19fX19fX19fX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6Wzg0OTZdfX19fX0sMTA1OntsOnsxMDk6e2w6ezU5OntjOlsxMDg2N119fX19fX19LDExNjp7bDp7OTc6e2w6ezU5OntjOls5MTldfX19fX0sMTE3OntsOnsxMDk6e2w6ezEwODp7bDp7NTk6e2M6WzIwM119fSxjOlsyMDNdfX19fX0sMTIwOntsOnsxMDU6e2w6ezExNTp7bDp7MTE2OntsOnsxMTU6e2w6ezU5OntjOls4NzA3XX19fX19fX19fSwxMTI6e2w6ezExMTp7bDp7MTEwOntsOnsxMDE6e2w6ezExMDp7bDp7MTE2OntsOnsxMDU6e2w6ezk3OntsOnsxMDg6e2w6ezY5OntsOns1OTp7YzpbODUxOV19fX19fX19fX19fX19fX19fX19fX19fX19LDcwOntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA2MF19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA3M119fX19fSwxMDU6e2w6ezEwODp7bDp7MTA4OntsOnsxMDE6e2w6ezEwMDp7bDp7ODM6e2w6ezEwOTp7bDp7OTc6e2w6ezEwODp7bDp7MTA4OntsOns4Mzp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMTQ6e2w6ezEwMTp7bDp7NTk6e2M6Wzk3MjRdfX19fX19fX19fX19fX19fX19fX19fX0sODY6e2w6ezEwMTp7bDp7MTE0OntsOnsxMjE6e2w6ezgzOntsOnsxMDk6e2w6ezk3OntsOnsxMDg6e2w6ezEwODp7bDp7ODM6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTE0OntsOnsxMDE6e2w6ezU5OntjOls5NjQyXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMjVdfX19fX0sMTE0OntsOns2NTp7bDp7MTA4OntsOnsxMDg6e2w6ezU5OntjOls4NzA0XX19fX19fX19fSwxMTc6e2w6ezExNDp7bDp7MTA1OntsOnsxMDE6e2w6ezExNDp7bDp7MTE2OntsOnsxMTQ6e2w6ezEwMjp7bDp7NTk6e2M6Wzg0OTddfX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOls4NDk3XX19fX19fX19fSw3MTp7bDp7NzQ6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDI3XX19fX19fX0sODQ6e2w6ezU5OntjOls2Ml19fSxjOls2Ml19LDk3OntsOnsxMDk6e2w6ezEwOTp7bDp7OTc6e2w6ezU5OntjOls5MTVdfSwxMDA6e2w6ezU5OntjOls5ODhdfX19fX19fX19fX0sOTg6e2w6ezExNDp7bDp7MTAxOntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6WzI4Nl19fX19fX19fX19fSw5OTp7bDp7MTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMjkwXX19fX19fX19fSwxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsyODRdfX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDQzXX19fX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsyODhdfX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA3NF19fX19fSwxMDM6e2w6ezU5OntjOls4OTIxXX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTI2XX19fX19fX0sMTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOns2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODA1XX0sNzY6e2w6ezEwMTp7bDp7MTE1OntsOnsxMTU6e2w6ezU5OntjOls4OTIzXX19fX19fX19fX19fX19fX19fX0sNzA6e2w6ezExNzp7bDp7MTA4OntsOnsxMDg6e2w6ezY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg4MDddfX19fX19fX19fX19fX19fX19fSw3MTp7bDp7MTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOns1OTp7YzpbMTA5MTRdfX19fX19fX19fX19fX19LDc2OntsOnsxMDE6e2w6ezExNTp7bDp7MTE1OntsOns1OTp7YzpbODgyM119fX19fX19fX0sODM6e2w6ezEwODp7bDp7OTc6e2w6ezExMDp7bDp7MTE2OntsOns2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOlsxMDg3OF19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4MTldfX19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTcwXX19fX19fX0sMTE2OntsOns1OTp7YzpbODgxMV19fX19fSw3Mjp7bDp7NjU6e2w6ezgyOntsOns2ODp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNjZdfX19fX19fX19fX0sOTc6e2w6ezk5OntsOnsxMDE6e2w6ezEwNzp7bDp7NTk6e2M6WzcxMV19fX19fX19LDExNjp7bDp7NTk6e2M6Wzk0XX19fX19LDk5OntsOnsxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsyOTJdfX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbODQ2MF19fX19fSwxMDU6e2w6ezEwODp7bDp7OTg6e2w6ezEwMTp7bDp7MTE0OntsOnsxMTY6e2w6ezgzOntsOnsxMTI6e2w6ezk3OntsOns5OTp7bDp7MTAxOntsOns1OTp7YzpbODQ1OV19fX19fX19fX19fX19fX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbODQ2MV19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTIyOntsOnsxMTE6e2w6ezExMDp7bDp7MTE2OntsOns5Nzp7bDp7MTA4OntsOns3Njp7bDp7MTA1OntsOnsxMTA6e2w6ezEwMTp7bDp7NTk6e2M6Wzk0NzJdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6Wzg0NTldfX19fX0sMTE2OntsOnsxMTQ6e2w6ezExMTp7bDp7MTA3OntsOns1OTp7YzpbMjk0XX19fX19fX19fX19LDExNzp7bDp7MTA5OntsOnsxMTI6e2w6ezY4OntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns3Mjp7bDp7MTE3OntsOnsxMDk6e2w6ezExMjp7bDp7NTk6e2M6Wzg3ODJdfX19fX19fX19fX19fX19fX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODc4M119fX19fX19fX19fX19fX19fX19LDczOntsOns2OTp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNDVdfX19fX19fSw3NDp7bDp7MTA4OntsOnsxMDU6e2w6ezEwMzp7bDp7NTk6e2M6WzMwNl19fX19fX19fX0sNzk6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDI1XX19fX19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMjA1XX19LGM6WzIwNV19fX19fX19fX0sOTk6e2w6ezEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzIwNl19fSxjOlsyMDZdfX19fX0sMTIxOntsOns1OTp7YzpbMTA0OF19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMzA0XX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOls4NDY1XX19fX19LDEwMzp7bDp7MTE0OntsOns5Nzp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOlsyMDRdfX0sYzpbMjA0XX19fX19fX19fSwxMDk6e2w6ezU5OntjOls4NDY1XX0sOTc6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsyOThdfX19fX0sMTAzOntsOnsxMDU6e2w6ezExMDp7bDp7OTc6e2w6ezExNDp7bDp7MTIxOntsOns3Mzp7bDp7NTk6e2M6Wzg1MjBdfX19fX19fX19fX19fX19fX0sMTEyOntsOnsxMDg6e2w6ezEwNTp7bDp7MTAxOntsOnsxMTU6e2w6ezU5OntjOls4NjU4XX19fX19fX19fX19fX0sMTEwOntsOnsxMTY6e2w6ezU5OntjOls4NzQ4XX0sMTAxOntsOnsxMDM6e2w6ezExNDp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg3NDddfX19fX19fX19LDExNDp7bDp7MTE1OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezEwNTp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls4ODk4XX19fX19fX19fX19fX19fX19fX19fSwxMTg6e2w6ezEwNTp7bDp7MTE1OntsOnsxMDU6e2w6ezk4OntsOnsxMDg6e2w6ezEwMTp7bDp7Njc6e2w6ezExMTp7bDp7MTA5OntsOnsxMDk6e2w6ezk3OntsOns1OTp7YzpbODI5MV19fX19fX19fX19fSw4NDp7bDp7MTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbODI5MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTExOntsOnsxMDM6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzAyXX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMjhdfX19fX0sMTE2OntsOns5Nzp7bDp7NTk6e2M6WzkyMV19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6Wzg0NjRdfX19fX19fSwxMTY6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6WzI5Nl19fX19fX19fX19fSwxMTc6e2w6ezEwNzp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwMzBdfX19fX19fSwxMDk6e2w6ezEwODp7bDp7NTk6e2M6WzIwN119fSxjOlsyMDddfX19fX19fSw3NDp7bDp7OTk6e2w6ezEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzMwOF19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNDldfX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwNzddfX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDEyOV19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk3M119fX19fSwxMDE6e2w6ezExNDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwMzJdfX19fX19fX19fX0sMTE3OntsOnsxMDc6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDI4XX19fX19fX19fX19LDc1OntsOns3Mjp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNjFdfX19fX19fSw3NDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwMzZdfX19fX19fSw5Nzp7bDp7MTEyOntsOnsxMTI6e2w6ezk3OntsOns1OTp7YzpbOTIyXX19fX19fX19fSw5OTp7bDp7MTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMzEwXX19fX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDUwXX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDc4XX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMzBdfX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5NzRdfX19fX19fX19LDc2OntsOns3NDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwMzNdfX19fX19fSw4NDp7bDp7NTk6e2M6WzYwXX19LGM6WzYwXX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMzEzXX19fX19fX19fSwxMDk6e2w6ezk4OntsOnsxMDA6e2w6ezk3OntsOns1OTp7YzpbOTIzXX19fX19fX19fSwxMTA6e2w6ezEwMzp7bDp7NTk6e2M6WzEwMjE4XX19fX19LDExMjp7bDp7MTA4OntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7MTE2OntsOnsxMTQ6e2w6ezEwMjp7bDp7NTk6e2M6Wzg0NjZdfX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjA2XX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzE3XX19fX19fX19fSwxMDE6e2w6ezEwMDp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOlszMTVdfX19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNTFdfX19fX0sMTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NjU6e2w6ezExMDp7bDp7MTAzOntsOnsxMDg6e2w6ezEwMTp7bDp7NjY6e2w6ezExNDp7bDp7OTc6e2w6ezk5OntsOnsxMDc6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbMTAyMTZdfX19fX19fX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODU5Ml19LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODY3Nl19fX19fX19LDgyOntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjQ2XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sNjc6e2w6ezEwMTp7bDp7MTA1OntsOnsxMDg6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDM6e2w6ezU5OntjOls4OTY4XX19fX19fX19fX19fX19fSw2ODp7bDp7MTExOntsOnsxMTc6e2w6ezk4OntsOnsxMDg6e2w6ezEwMTp7bDp7NjY6e2w6ezExNDp7bDp7OTc6e2w6ezk5OntsOnsxMDc6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbMTAyMTRdfX19fX19fX19fX19fX19fX19fX19fX0sMTE5OntsOnsxMTA6e2w6ezg0OntsOnsxMDE6e2w6ezEwMTp7bDp7ODY6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOlsxMDU5M119fX19fX19fX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbODY0M119LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1ODVdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDcwOntsOnsxMDg6e2w6ezExMTp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOls4OTcwXX19fX19fX19fX19LDgyOntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTk2XX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbMTA1NzRdfX19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwMTp7bDp7MTAxOntsOns1OTp7YzpbODg2N119LDY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjEyXX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbMTA1ODZdfX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezk3OntsOnsxMTA6e2w6ezEwMzp7bDp7MTA4OntsOnsxMDE6e2w6ezU5OntjOls4ODgyXX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDcwM119fX19fX19LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg4ODRdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDg1OntsOnsxMTI6e2w6ezY4OntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTc3XX19fX19fX19fX19fX19fX19fX19fSw4NDp7bDp7MTAxOntsOnsxMDE6e2w6ezg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbMTA1OTJdfX19fX19fX19fX19fX19fX19fSw4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6Wzg2MzldfSw2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTg0XX19fX19fX19fX19fX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbODYzNl19LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1NzhdfX19fX19fX19fX19fX19fX19fSw5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY1Nl19fX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NjBdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezExNTp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns3MTp7bDp7MTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOns1OTp7YzpbODkyMl19fX19fX19fX19fX19fX19fX19fX19fX19LDcwOntsOnsxMTc6e2w6ezEwODp7bDp7MTA4OntsOns2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODA2XX19fX19fX19fX19fX19fX19fX0sNzE6e2w6ezExNDp7bDp7MTAxOntsOns5Nzp7bDp7MTE2OntsOnsxMDE6e2w6ezExNDp7bDp7NTk6e2M6Wzg4MjJdfX19fX19fX19fX19fX19LDc2OntsOnsxMDE6e2w6ezExNTp7bDp7MTE1OntsOns1OTp7YzpbMTA5MTNdfX19fX19fX19LDgzOntsOnsxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezExNjp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbMTA4NzddfX19fX19fX19fX19fX19fX19fX19LDg0OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOls4ODE4XX19fX19fX19fX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDc5XX19fX19LDEwODp7bDp7NTk6e2M6Wzg5MjBdfSwxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY2Nl19fX19fX19fX19fX19fX19fX19LDEwOTp7bDp7MTA1OntsOnsxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMzE5XX19fX19fX19fX19LDExMTp7bDp7MTEwOntsOnsxMDM6e2w6ezc2OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTAyMjldfX19fX19fX19fX0sODI6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6WzEwMjMxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDgyOntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOlsxMDIzMF19fX19fX19fX19fX19fX19fX19fX0sMTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTAyMzJdfX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOlsxMDIzNF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6WzEwMjMzXX19fX19fX19fX19fX19fX19fX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMzFdfX19fX0sMTE5OntsOnsxMDE6e2w6ezExNDp7bDp7NzY6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjAxXX19fX19fX19fX19fX19fX19fX0sODI6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MDBdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbODQ2Nl19fX19fSwxMDQ6e2w6ezU5OntjOls4NjI0XX19fSwxMTY6e2w6ezExNDp7bDp7MTExOntsOnsxMDc6e2w6ezU5OntjOlszMjFdfX19fX19fX19fX0sMTE2OntsOns1OTp7YzpbODgxMF19fX19fSw3Nzp7bDp7OTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwNTAxXX19fX19LDk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDUyXX19fX19LDEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezExNzp7bDp7MTA5OntsOns4Mzp7bDp7MTEyOntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6WzgyODddfX19fX19fX19fX19fX19fX19fSwxMDg6e2w6ezEwODp7bDp7MTA1OntsOnsxMTA6e2w6ezExNjp7bDp7MTE0OntsOnsxMDI6e2w6ezU5OntjOls4NDk5XX19fX19fX19fX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDgwXX19fX19LDEwNTp7bDp7MTEwOntsOnsxMTc6e2w6ezExNTp7bDp7ODA6e2w6ezEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOls4NzIzXX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMzJdfX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOls4NDk5XX19fX19fX0sMTE3OntsOns1OTp7YzpbOTI0XX19fX19LDc4OntsOns3NDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwMzRdfX19fX19fSw5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlszMjNdfX19fX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzI3XX19fX19fX19fSwxMDE6e2w6ezEwMDp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOlszMjVdfX19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNTNdfX19fX0sMTAxOntsOnsxMDM6e2w6ezk3OntsOnsxMTY6e2w6ezEwNTp7bDp7MTE4OntsOnsxMDE6e2w6ezc3OntsOnsxMDE6e2w6ezEwMDp7bDp7MTA1OntsOnsxMTc6e2w6ezEwOTp7bDp7ODM6e2w6ezExMjp7bDp7OTc6e2w6ezk5OntsOnsxMDE6e2w6ezU5OntjOls4MjAzXX19fX19fX19fX19fX19fX19fX19fX19LDg0OntsOnsxMDQ6e2w6ezEwNTp7bDp7OTk6e2w6ezEwNzp7bDp7ODM6e2w6ezExMjp7bDp7OTc6e2w6ezk5OntsOnsxMDE6e2w6ezU5OntjOls4MjAzXX19fX19fX19fX19fX19fSwxMTA6e2w6ezgzOntsOnsxMTI6e2w6ezk3OntsOns5OTp7bDp7MTAxOntsOns1OTp7YzpbODIwM119fX19fX19fX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezExNDp7bDp7MTIxOntsOns4NDp7bDp7MTA0OntsOnsxMDU6e2w6ezExMDp7bDp7ODM6e2w6ezExMjp7bDp7OTc6e2w6ezk5OntsOnsxMDE6e2w6ezU5OntjOls4MjAzXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezExNjp7bDp7MTAxOntsOnsxMDA6e2w6ezcxOntsOnsxMTQ6e2w6ezEwMTp7bDp7OTc6e2w6ezExNjp7bDp7MTAxOntsOnsxMTQ6e2w6ezcxOntsOnsxMTQ6e2w6ezEwMTp7bDp7OTc6e2w6ezExNjp7bDp7MTAxOntsOnsxMTQ6e2w6ezU5OntjOls4ODExXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDc2OntsOnsxMDE6e2w6ezExNTp7bDp7MTE1OntsOns3Njp7bDp7MTAxOntsOnsxMTU6e2w6ezExNTp7bDp7NTk6e2M6Wzg4MTBdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMTk6e2w6ezc2OntsOnsxMDU6e2w6ezExMDp7bDp7MTAxOntsOns1OTp7YzpbMTBdfX19fX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA4MV19fX19fSwxMTE6e2w6ezY2OntsOnsxMTQ6e2w6ezEwMTp7bDp7OTc6e2w6ezEwNzp7bDp7NTk6e2M6WzgyODhdfX19fX19fX19fX0sMTEwOntsOns2Njp7bDp7MTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMDc6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDM6e2w6ezgzOntsOnsxMTI6e2w6ezk3OntsOns5OTp7bDp7MTAxOntsOns1OTp7YzpbMTYwXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbODQ2OV19fX19fSwxMTY6e2w6ezU5OntjOlsxMDk4OF19LDY3OntsOnsxMTE6e2w6ezExMDp7bDp7MTAzOntsOnsxMTQ6e2w6ezExNzp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6Wzg4MDJdfX19fX19fX19fX19fX19fX0sMTE3OntsOnsxMTI6e2w6ezY3OntsOns5Nzp7bDp7MTEyOntsOns1OTp7YzpbODgxM119fX19fX19fX19fX19LDY4OntsOnsxMTE6e2w6ezExNzp7bDp7OTg6e2w6ezEwODp7bDp7MTAxOntsOns4Njp7bDp7MTAxOntsOnsxMTQ6e2w6ezExNjp7bDp7MTA1OntsOns5OTp7bDp7OTc6e2w6ezEwODp7bDp7NjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOls4NzQyXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDY5OntsOnsxMDg6e2w6ezEwMTp7bDp7MTA5OntsOnsxMDE6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbODcxM119fX19fX19fX19fX19LDExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODgwMF19LDg0OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOls4NzcwLDgyNF19fX19fX19fX19fX19fX19fX19LDEyMDp7bDp7MTA1OntsOnsxMTU6e2w6ezExNjp7bDp7MTE1OntsOns1OTp7YzpbODcwOF19fX19fX19fX19fX19LDcxOntsOnsxMTQ6e2w6ezEwMTp7bDp7OTc6e2w6ezExNjp7bDp7MTAxOntsOnsxMTQ6e2w6ezU5OntjOls4ODE1XX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODgxN119fX19fX19fX19fSw3MDp7bDp7MTE3OntsOnsxMDg6e2w6ezEwODp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODgwNyw4MjRdfX19fX19fX19fX19fX19fX19fSw3MTp7bDp7MTE0OntsOnsxMDE6e2w6ezk3OntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOns1OTp7YzpbODgxMSw4MjRdfX19fX19fX19fX19fX19LDc2OntsOnsxMDE6e2w6ezExNTp7bDp7MTE1OntsOns1OTp7YzpbODgyNV19fX19fX19fX0sODM6e2w6ezEwODp7bDp7OTc6e2w6ezExMDp7bDp7MTE2OntsOns2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOlsxMDg3OCw4MjRdfX19fX19fX19fX19fX19fX19fX19LDg0OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOls4ODIxXX19fX19fX19fX19fX19fX19fX19fX19fX0sNzI6e2w6ezExNzp7bDp7MTA5OntsOnsxMTI6e2w6ezY4OntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns3Mjp7bDp7MTE3OntsOnsxMDk6e2w6ezExMjp7bDp7NTk6e2M6Wzg3ODIsODI0XX19fX19fX19fX19fX19fX19LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg3ODMsODI0XX19fX19fX19fX19fX19fX19fX0sNzY6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezg0OntsOnsxMTQ6e2w6ezEwNTp7bDp7OTc6e2w6ezExMDp7bDp7MTAzOntsOnsxMDg6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5MzhdfSw2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNzAzLDgyNF19fX19fX19LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg5NDBdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezExNTp7bDp7NTk6e2M6Wzg4MTRdfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODE2XX19fX19fX19fX19LDcxOntsOnsxMTQ6e2w6ezEwMTp7bDp7OTc6e2w6ezExNjp7bDp7MTAxOntsOnsxMTQ6e2w6ezU5OntjOls4ODI0XX19fX19fX19fX19fX19fSw3Njp7bDp7MTAxOntsOnsxMTU6e2w6ezExNTp7bDp7NTk6e2M6Wzg4MTAsODI0XX19fX19fX19fSw4Mzp7bDp7MTA4OntsOns5Nzp7bDp7MTEwOntsOnsxMTY6e2w6ezY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6WzEwODc3LDgyNF19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4MjBdfX19fX19fX19fX19fX19fX19fSw3ODp7bDp7MTAxOntsOnsxMTU6e2w6ezExNjp7bDp7MTAxOntsOnsxMDA6e2w6ezcxOntsOnsxMTQ6e2w6ezEwMTp7bDp7OTc6e2w6ezExNjp7bDp7MTAxOntsOnsxMTQ6e2w6ezcxOntsOnsxMTQ6e2w6ezEwMTp7bDp7OTc6e2w6ezExNjp7bDp7MTAxOntsOnsxMTQ6e2w6ezU5OntjOlsxMDkxNCw4MjRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sNzY6e2w6ezEwMTp7bDp7MTE1OntsOnsxMTU6e2w6ezc2OntsOnsxMDE6e2w6ezExNTp7bDp7MTE1OntsOns1OTp7YzpbMTA5MTMsODI0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDgwOntsOnsxMTQ6e2w6ezEwMTp7bDp7OTk6e2w6ezEwMTp7bDp7MTAwOntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6Wzg4MzJdfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOlsxMDkyNyw4MjRdfX19fX19fX19fX0sODM6e2w6ezEwODp7bDp7OTc6e2w6ezExMDp7bDp7MTE2OntsOns2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4OTI4XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sODI6e2w6ezEwMTp7bDp7MTE4OntsOnsxMDE6e2w6ezExNDp7bDp7MTE1OntsOnsxMDE6e2w6ezY5OntsOnsxMDg6e2w6ezEwMTp7bDp7MTA5OntsOnsxMDE6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbODcxNl19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns4NDp7bDp7MTE0OntsOnsxMDU6e2w6ezk3OntsOnsxMTA6e2w6ezEwMzp7bDp7MTA4OntsOnsxMDE6e2w6ezU5OntjOls4OTM5XX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDcwNCw4MjRdfX19fX19fSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4OTQxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sODM6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTE0OntsOnsxMDE6e2w6ezgzOntsOnsxMTc6e2w6ezk4OntsOnsxMTU6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbODg0Nyw4MjRdfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4OTMwXX19fX19fX19fX19fX19fX19fX0sMTEyOntsOnsxMDE6e2w6ezExNDp7bDp7MTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg4NDgsODI0XX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODkzMV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LDExNzp7bDp7OTg6e2w6ezExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4ODM0LDg0MDJdfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODQwXX19fX19fX19fX19fX19fX19fX0sOTk6e2w6ezk5OntsOnsxMDE6e2w6ezEwMTp7bDp7MTAwOntsOnsxMTU6e2w6ezU5OntjOls4ODMzXX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbMTA5MjgsODI0XX19fX19fX19fX19LDgzOntsOnsxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezExNjp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODkyOV19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4MzEsODI0XX19fX19fX19fX19fX19fX19fX19fX19LDExMjp7bDp7MTAxOntsOnsxMTQ6e2w6ezExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4ODM1LDg0MDJdfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODQxXX19fX19fX19fX19fX19fX19fX19fX19fX19fSw4NDp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbODc2OV19LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg3NzJdfX19fX19fX19fX0sNzA6e2w6ezExNzp7bDp7MTA4OntsOnsxMDg6e2w6ezY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg3NzVdfX19fX19fX19fX19fX19fX19fSw4NDp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbODc3N119fX19fX19fX19fX19fX19fX19fX0sODY6e2w6ezEwMTp7bDp7MTE0OntsOnsxMTY6e2w6ezEwNTp7bDp7OTk6e2w6ezk3OntsOnsxMDg6e2w6ezY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODc0MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTc3XX19fX19fX0sMTE2OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOlsyMDldfX0sYzpbMjA5XX19fX19fX19fSwxMTc6e2w6ezU5OntjOls5MjVdfX19fX0sNzk6e2w6ezY5OntsOnsxMDg6e2w6ezEwNTp7bDp7MTAzOntsOns1OTp7YzpbMzM4XX19fX19fX19fSw5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlsyMTFdfX0sYzpbMjExXX19fX19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMjEyXX19LGM6WzIxMl19fX19fSwxMjE6e2w6ezU5OntjOlsxMDU0XX19fX19LDEwMDp7bDp7OTg6e2w6ezEwODp7bDp7OTc6e2w6ezk5OntsOns1OTp7YzpbMzM2XX19fX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDgyXX19fX19LDEwMzp7bDp7MTE0OntsOns5Nzp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOlsyMTBdfX0sYzpbMjEwXX19fX19fX19fSwxMDk6e2w6ezk3OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMzMyXX19fX19fX0sMTAxOntsOnsxMDM6e2w6ezk3OntsOns1OTp7YzpbOTM3XX19fX19fX0sMTA1OntsOns5OTp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzkyN119fX19fX19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMzRdfX19fX19fSwxMTI6e2w6ezEwMTp7bDp7MTEwOntsOns2Nzp7bDp7MTE3OntsOnsxMTQ6e2w6ezEwODp7bDp7MTIxOntsOns2ODp7bDp7MTExOntsOnsxMTc6e2w6ezk4OntsOnsxMDg6e2w6ezEwMTp7bDp7ODE6e2w6ezExNzp7bDp7MTExOntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzgyMjBdfX19fX19fX19fX19fX19fX19fX19fX0sODE6e2w6ezExNzp7bDp7MTExOntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzgyMTZdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDExNDp7bDp7NTk6e2M6WzEwODM2XX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5NzhdfX19fX0sMTA4OntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOlsyMTZdfX0sYzpbMjE2XX19fX19fX19fSwxMTY6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6WzIxM119fSxjOlsyMTNdfX19fX0sMTA5OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6WzEwODA3XX19fX19fX19fX19LDExNzp7bDp7MTA5OntsOnsxMDg6e2w6ezU5OntjOlsyMTRdfX0sYzpbMjE0XX19fX19LDExODp7bDp7MTAxOntsOnsxMTQ6e2w6ezY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODI1NF19fX19fSwxMTQ6e2w6ezk3OntsOns5OTp7bDp7MTAxOntsOns1OTp7YzpbOTE4Ml19fX0sMTA3OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6WzkxNDBdfX19fX19fX19fX19fX19LDgwOntsOns5Nzp7bDp7MTE0OntsOnsxMDE6e2w6ezExMDp7bDp7MTE2OntsOnsxMDQ6e2w6ezEwMTp7bDp7MTE1OntsOnsxMDU6e2w6ezExNTp7bDp7NTk6e2M6WzkxODBdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSw4MDp7bDp7OTc6e2w6ezExNDp7bDp7MTE2OntsOnsxMDU6e2w6ezk3OntsOnsxMDg6e2w6ezY4OntsOns1OTp7YzpbODcwNl19fX19fX19fX19fX19fX0sOTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNTVdfX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwODNdfX19fX0sMTA0OntsOnsxMDU6e2w6ezU5OntjOls5MzRdfX19fX0sMTA1OntsOns1OTp7YzpbOTI4XX19fSwxMDg6e2w6ezExNzp7bDp7MTE1OntsOns3Nzp7bDp7MTA1OntsOnsxMTA6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbMTc3XX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTA1OntsOnsxMTA6e2w6ezk5OntsOns5Nzp7bDp7MTE0OntsOnsxMDE6e2w6ezExMjp7bDp7MTA4OntsOns5Nzp7bDp7MTEwOntsOnsxMDE6e2w6ezU5OntjOls4NDYwXX19fX19fX19fX19fX19fX19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbODQ3M119fX19fX19LDExNDp7bDp7NTk6e2M6WzEwOTM5XX0sMTAxOntsOns5OTp7bDp7MTAxOntsOnsxMDA6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbODgyNl19LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6WzEwOTI3XX19fX19fX19fX19LDgzOntsOnsxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezExNjp7bDp7Njk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODgyOF19fX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4MzBdfX19fX19fX19fX19fX19fX19fX19fX0sMTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7NTk6e2M6WzgyNDNdfX19fX19fSwxMTE6e2w6ezEwMDp7bDp7MTE3OntsOns5OTp7bDp7MTE2OntsOns1OTp7YzpbODcxOV19fX19fX19fX0sMTEyOntsOnsxMTE6e2w6ezExNDp7bDp7MTE2OntsOnsxMDU6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbODc1OV19LDk3OntsOnsxMDg6e2w6ezU5OntjOls4NzMzXX19fX19fX19fX19fX19fX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk3OV19fX19fSwxMDU6e2w6ezU5OntjOls5MzZdfX19fX19fSw4MTp7bDp7ODU6e2w6ezc5OntsOns4NDp7bDp7NTk6e2M6WzM0XX19LGM6WzM0XX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDg0XX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOls4NDc0XX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTgwXX19fX19fX19fSw4Mjp7bDp7NjY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTEyXX19fX19fX19fSw2OTp7bDp7NzE6e2w6ezU5OntjOlsxNzRdfX0sYzpbMTc0XX19fSw5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlszNDBdfX19fX19fX19LDExMDp7bDp7MTAzOntsOns1OTp7YzpbMTAyMTldfX19fX0sMTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjA4XX0sMTE2OntsOnsxMDg6e2w6ezU5OntjOlsxMDUxOF19fX19fX19fX19fSw5OTp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlszNDRdfX19fX19fX19LDEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzM0Ml19fX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA1Nl19fX19fSwxMDE6e2w6ezU5OntjOls4NDc2XX0sMTE4OntsOnsxMDE6e2w6ezExNDp7bDp7MTE1OntsOnsxMDE6e2w6ezY5OntsOnsxMDg6e2w6ezEwMTp7bDp7MTA5OntsOnsxMDE6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbODcxNV19fX19fX19fX19fX19LDExMzp7bDp7MTE3OntsOnsxMDU6e2w6ezEwODp7bDp7MTA1OntsOns5ODp7bDp7MTE0OntsOnsxMDU6e2w6ezExNzp7bDp7MTA5OntsOns1OTp7YzpbODY1MV19fX19fX19fX19fX19fX19fX19fX19fSw4NTp7bDp7MTEyOntsOns2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDU6e2w6ezk4OntsOnsxMTQ6e2w6ezEwNTp7bDp7MTE3OntsOnsxMDk6e2w6ezU5OntjOlsxMDYwN119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOls4NDc2XX19fX19LDEwNDp7bDp7MTExOntsOns1OTp7YzpbOTI5XX19fX19LDEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7NjU6e2w6ezExMDp7bDp7MTAzOntsOnsxMDg6e2w6ezEwMTp7bDp7NjY6e2w6ezExNDp7bDp7OTc6e2w6ezk5OntsOnsxMDc6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbMTAyMTddfX19fX19fX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODU5NF19LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODY3N119fX19fX19LDc2OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY0NF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSw2Nzp7bDp7MTAxOntsOnsxMDU6e2w6ezEwODp7bDp7MTA1OntsOnsxMTA6e2w6ezEwMzp7bDp7NTk6e2M6Wzg5NjldfX19fX19fX19fX19fX19LDY4OntsOnsxMTE6e2w6ezExNzp7bDp7OTg6e2w6ezEwODp7bDp7MTAxOntsOns2Njp7bDp7MTE0OntsOns5Nzp7bDp7OTk6e2w6ezEwNzp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOlsxMDIxNV19fX19fX19fX19fX19fX19fX19fX19fSwxMTk6e2w6ezExMDp7bDp7ODQ6e2w6ezEwMTp7bDp7MTAxOntsOns4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTg5XX19fX19fX19fX19fX19fX19fX0sODY6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOls4NjQyXX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU4MV19fX19fX19fX19fX19fX19fX19fX19fX19fX0sNzA6e2w6ezEwODp7bDp7MTExOntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6Wzg5NzFdfX19fX19fX19fX0sODQ6e2w6ezEwMTp7bDp7MTAxOntsOns1OTp7YzpbODg2Nl19LDY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjE0XX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbMTA1ODddfX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezk3OntsOnsxMTA6e2w6ezEwMzp7bDp7MTA4OntsOnsxMDE6e2w6ezU5OntjOls4ODgzXX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDcwNF19fX19fX19LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg4ODVdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDg1OntsOnsxMTI6e2w6ezY4OntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTc1XX19fX19fX19fX19fX19fX19fX19fSw4NDp7bDp7MTAxOntsOnsxMDE6e2w6ezg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbMTA1ODhdfX19fX19fX19fX19fX19fX19fSw4Njp7bDp7MTAxOntsOns5OTp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6Wzg2MzhdfSw2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTgwXX19fX19fX19fX19fX19fX19fX19fX19LDg2OntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezExMTp7bDp7MTE0OntsOns1OTp7YzpbODY0MF19LDY2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1NzldfX19fX19fX19fX19fX19fX19fSw5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY1OF19fX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOls4NDc3XX19fX19LDExNzp7bDp7MTEwOntsOnsxMDA6e2w6ezczOntsOnsxMDk6e2w6ezExMjp7bDp7MTA4OntsOnsxMDU6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbMTA2MDhdfX19fX19fX19fX19fX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjY3XX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOls4NDc1XX19fX19LDEwNDp7bDp7NTk6e2M6Wzg2MjVdfX19fX0sMTE3OntsOnsxMDg6e2w6ezEwMTp7bDp7Njg6e2w6ezEwMTp7bDp7MTA4OntsOns5Nzp7bDp7MTIxOntsOnsxMDE6e2w6ezEwMDp7bDp7NTk6e2M6WzEwNzQwXX19fX19fX19fX19fX19fX19fX19fX19LDgzOntsOns3Mjp7bDp7Njc6e2w6ezcyOntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA2NV19fX19fX19fX0sOTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNjRdfX19fX19fSw3OTp7bDp7NzA6e2w6ezg0OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA2OF19fX19fX19fX19fSw5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlszNDZdfX19fX19fX19fX0sOTk6e2w6ezU5OntjOlsxMDk0MF19LDk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzUyXX19fX19fX19fSwxMDE6e2w6ezEwMDp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOlszNTBdfX19fX19fX19LDEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzM0OF19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNTddfX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwODZdfX19fX0sMTA0OntsOnsxMTE6e2w6ezExNDp7bDp7MTE2OntsOns2ODp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTVdfX19fX19fX19fX19fX19fX19fSw3Njp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTJdfX19fX19fX19fX19fX19fX19fSw4Mjp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODU5NF19fX19fX19fX19fX19fX19fX19fX0sODU6e2w6ezExMjp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTNdfX19fX19fX19fX19fX19fX19fX19fX0sMTA1OntsOnsxMDM6e2w6ezEwOTp7bDp7OTc6e2w6ezU5OntjOls5MzFdfX19fX19fX19LDEwOTp7bDp7OTc6e2w6ezEwODp7bDp7MTA4OntsOns2Nzp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOnsxMDg6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3MjhdfX19fX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMzhdfX19fX19fSwxMTM6e2w6ezExNDp7bDp7MTE2OntsOns1OTp7YzpbODczMF19fX19fSwxMTc6e2w6ezk3OntsOnsxMTQ6e2w6ezEwMTp7bDp7NTk6e2M6Wzk2MzNdfSw3Mzp7bDp7MTEwOntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOnsxMTU6e2w6ezEwMTp7bDp7OTk6e2w6ezExNjp7bDp7MTA1OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6Wzg4NTFdfX19fX19fX19fX19fX19fX19fX19fX19fSw4Mzp7bDp7MTE3OntsOns5ODp7bDp7MTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg4NDddfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODQ5XX19fX19fX19fX19fX19fX19fX0sMTEyOntsOnsxMDE6e2w6ezExNDp7bDp7MTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg4NDhdfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODUwXX19fX19fX19fX19fX19fX19fX19fX19fX19fSw4NTp7bDp7MTEwOntsOnsxMDU6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbODg1Ml19fX19fX19fX19fX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTgyXX19fX19fX0sMTE2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODkwMl19fX19fX19LDExNzp7bDp7OTg6e2w6ezU5OntjOls4OTEyXX0sMTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5MTJdfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODM4XX19fX19fX19fX19fX19fX19fX0sOTk6e2w6ezk5OntsOnsxMDE6e2w6ezEwMTp7bDp7MTAwOntsOnsxMTU6e2w6ezU5OntjOls4ODI3XX0sNjk6e2w6ezExMzp7bDp7MTE3OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbMTA5MjhdfX19fX19fX19fX0sODM6e2w6ezEwODp7bDp7OTc6e2w6ezExMDp7bDp7MTE2OntsOns2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODI5XX19fX19fX19fX19fX19fX19fX19fSw4NDp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbODgzMV19fX19fX19fX19fX19fX19fX19fX0sMTA0OntsOns4NDp7bDp7MTA0OntsOns5Nzp7bDp7MTE2OntsOns1OTp7YzpbODcxNV19fX19fX19fX19fX19LDEwOTp7bDp7NTk6e2M6Wzg3MjFdfX19LDExMjp7bDp7NTk6e2M6Wzg5MTNdfSwxMDE6e2w6ezExNDp7bDp7MTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg4MzVdfSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODM5XX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbODkxM119fX19fX19fX19fX19LDg0OntsOns3Mjp7bDp7Nzk6e2w6ezgyOntsOns3ODp7bDp7NTk6e2M6WzIyMl19fSxjOlsyMjJdfX19fX19fSw4Mjp7bDp7NjU6e2w6ezY4OntsOns2OTp7bDp7NTk6e2M6Wzg0ODJdfX19fX19fX19LDgzOntsOns3Mjp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwMzVdfX19fX19fSw5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA2Ml19fX19fX19LDk3OntsOns5ODp7bDp7NTk6e2M6WzldfX19LDExNzp7bDp7NTk6e2M6WzkzMl19fX19fSw5OTp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlszNTZdfX19fX19fX19LDEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzM1NF19fX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA1OF19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA4N119fX19fSwxMDQ6e2w6ezEwMTp7bDp7MTE0OntsOnsxMDE6e2w6ezEwMjp7bDp7MTExOntsOnsxMTQ6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NTZdfX19fX19fX19fX19fSwxMTY6e2w6ezk3OntsOns1OTp7YzpbOTIwXX19fX19fX0sMTA1OntsOns5OTp7bDp7MTA3OntsOns4Mzp7bDp7MTEyOntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6WzgyODcsODIwMl19fX19fX19fX19fX19fX0sMTEwOntsOns4Mzp7bDp7MTEyOntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6WzgyMDFdfX19fX19fX19fX19fX19fX0sMTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbODc2NF19LDY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg3NzFdfX19fX19fX19fX0sNzA6e2w6ezExNzp7bDp7MTA4OntsOnsxMDg6e2w6ezY5OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg3NzNdfX19fX19fX19fX19fX19fX19fSw4NDp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbODc3Nl19fX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxMzldfX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTEyOntsOnsxMDg6e2w6ezEwMTp7bDp7Njg6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODQxMV19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5ODNdfX19fX0sMTE2OntsOnsxMTQ6e2w6ezExMTp7bDp7MTA3OntsOns1OTp7YzpbMzU4XX19fX19fX19fX19fX0sODU6e2w6ezk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzIxOF19fSxjOlsyMThdfX19fX19fSwxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2MDddfSwxMTE6e2w6ezk5OntsOnsxMDU6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTY5XX19fX19fX19fX19fX19fSw5ODp7bDp7MTE0OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTAzOF19fX19fSwxMDE6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbMzY0XX19fX19fX19fX19LDk5OntsOnsxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsyMTldfX0sYzpbMjE5XX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNTldfX19fX0sMTAwOntsOns5ODp7bDp7MTA4OntsOns5Nzp7bDp7OTk6e2w6ezU5OntjOlszNjhdfX19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwODhdfX19fX0sMTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6WzIxN119fSxjOlsyMTddfX19fX19fX19LDEwOTp7bDp7OTc6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlszNjJdfX19fX19fX19LDExMDp7bDp7MTAwOntsOnsxMDE6e2w6ezExNDp7bDp7NjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOls5NV19fX19fSwxMTQ6e2w6ezk3OntsOns5OTp7bDp7MTAxOntsOns1OTp7YzpbOTE4M119fX0sMTA3OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6WzkxNDFdfX19fX19fX19fX19fX19LDgwOntsOns5Nzp7bDp7MTE0OntsOnsxMDE6e2w6ezExMDp7bDp7MTE2OntsOnsxMDQ6e2w6ezEwMTp7bDp7MTE1OntsOnsxMDU6e2w6ezExNTp7bDp7NTk6e2M6WzkxODFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTA1OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6Wzg4OTldfSw4MDp7bDp7MTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6Wzg4NDZdfX19fX19fX19fX19fX19fX0sMTExOntsOnsxMDM6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzcwXX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNDBdfX19fX19fSwxMTI6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTkzXX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDUxNF19fX19fX19LDY4OntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY0NV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSw2ODp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTddfX19fX19fX19fX19fX19fX19fSw2OTp7bDp7MTEzOntsOnsxMTc6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDU6e2w6ezk4OntsOnsxMTQ6e2w6ezEwNTp7bDp7MTE3OntsOnsxMDk6e2w6ezU5OntjOlsxMDYwNl19fX19fX19fX19fX19fX19fX19fX19fSw4NDp7bDp7MTAxOntsOnsxMDE6e2w6ezU5OntjOls4ODY5XX0sNjU6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MTNdfX19fX19fX19fX19fX19fX0sOTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NTddfX19fX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY2MV19fX19fX19fX19fX19fX19fX19LDExMjp7bDp7MTAxOntsOnsxMTQ6e2w6ezc2OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODU5OF19fX19fX19fX19fX19fX19fX19LDgyOntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NTk5XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezEwNTp7bDp7NTk6e2M6Wzk3OF19LDEwODp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls5MzNdfX19fX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDM6e2w6ezU5OntjOlszNjZdfX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk4NF19fX19fX19LDExNjp7bDp7MTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbMzYwXX19fX19fX19fX19LDExNzp7bDp7MTA5OntsOnsxMDg6e2w6ezU5OntjOlsyMjBdfX0sYzpbMjIwXX19fX19fX0sODY6e2w6ezY4OntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4ODc1XX19fX19fX19fSw5ODp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwOTg3XX19fX19fX0sOTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNDJdfX19fX0sMTAwOntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4ODczXX0sMTA4OntsOns1OTp7YzpbMTA5ODJdfX19fX19fX19fX0sMTAxOntsOnsxMDE6e2w6ezU5OntjOls4ODk3XX19fSwxMTQ6e2w6ezk4OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODIxNF19fX19fX19LDExNjp7bDp7NTk6e2M6WzgyMTRdfSwxMDU6e2w6ezk5OntsOns5Nzp7bDp7MTA4OntsOns2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6Wzg3MzldfX19fX19fSw3Njp7bDp7MTA1OntsOnsxMTA6e2w6ezEwMTp7bDp7NTk6e2M6WzEyNF19fX19fX19fX0sODM6e2w6ezEwMTp7bDp7MTEyOntsOns5Nzp7bDp7MTE0OntsOns5Nzp7bDp7MTE2OntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6WzEwMDcyXX19fX19fX19fX19fX19fX19fX0sODQ6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NjhdfX19fX19fX19fX19fX19fX19fX19LDEyMTp7bDp7ODQ6e2w6ezEwNDp7bDp7MTA1OntsOnsxMTA6e2w6ezgzOntsOnsxMTI6e2w6ezk3OntsOns5OTp7bDp7MTAxOntsOns1OTp7YzpbODIwMl19fX19fX19fX19fX19fX19fX19fX19fX19LDEwMjp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDg5XX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNDFdfX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5ODVdfX19fX19fSwxMTg6e2w6ezEwMDp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODg3NF19fX19fX19fX19fX19LDg3OntsOns5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMzcyXX19fX19fX19fSwxMDE6e2w6ezEwMDp7bDp7MTAzOntsOnsxMDE6e2w6ezU5OntjOls4ODk2XX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA5MF19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTQyXX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTg2XX19fX19fX19fSw4ODp7bDp7MTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwOTFdfX19fX0sMTA1OntsOns1OTp7YzpbOTI2XX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTQzXX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTg3XX19fX19fX19fSw4OTp7bDp7NjU6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDcxXX19fX19fX0sNzM6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDMxXX19fX19fX0sODU6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDcwXX19fX19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMjIxXX19LGM6WzIyMV19fX19fX19fX0sOTk6e2w6ezEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzM3NF19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNjddfX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwOTJdfX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE0NF19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk4OF19fX19fX19LDExNzp7bDp7MTA5OntsOnsxMDg6e2w6ezU5OntjOlszNzZdfX19fX19fX19LDkwOntsOns3Mjp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNDZdfX19fX19fSw5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlszNzddfX19fX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzgxXX19fX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDQ3XX19fX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlszNzldfX19fX19fSwxMDE6e2w6ezExNDp7bDp7MTExOntsOns4Nzp7bDp7MTA1OntsOnsxMDA6e2w6ezExNjp7bDp7MTA0OntsOns4Mzp7bDp7MTEyOntsOns5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6WzgyMDNdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMTY6e2w6ezk3OntsOns1OTp7YzpbOTE4XX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOls4NDg4XX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOls4NDg0XX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTg5XX19fX19fX19fSw5Nzp7bDp7OTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMjI1XX19LGM6WzIyNV19fX19fX19fX0sOTg6e2w6ezExNDp7bDp7MTAxOntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6WzI1OV19fX19fX19fX19fSw5OTp7bDp7NTk6e2M6Wzg3NjZdfSw2OTp7bDp7NTk6e2M6Wzg3NjYsODE5XX19fSwxMDA6e2w6ezU5OntjOls4NzY3XX19fSwxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsyMjZdfX0sYzpbMjI2XX19fX19LDExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOlsxODBdfX0sYzpbMTgwXX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNzJdfX19fX0sMTAxOntsOnsxMDg6e2w6ezEwNTp7bDp7MTAzOntsOns1OTp7YzpbMjMwXX19LGM6WzIzMF19fX19fX19LDEwMjp7bDp7NTk6e2M6WzgyODldfSwxMTQ6e2w6ezU5OntjOlsxMjAwOTRdfX19fX0sMTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6WzIyNF19fSxjOlsyMjRdfX19fX19fX19LDEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNTp7bDp7MTIxOntsOnsxMDk6e2w6ezU5OntjOls4NTAxXX19fX19fX19fSwxMTI6e2w6ezEwNDp7bDp7NTk6e2M6Wzg1MDFdfX19fX19fSwxMTI6e2w6ezEwNDp7bDp7OTc6e2w6ezU5OntjOls5NDVdfX19fX19fX19LDEwOTp7bDp7OTc6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsyNTddfX19fX0sMTA4OntsOnsxMDM6e2w6ezU5OntjOlsxMDgxNV19fX19fX19LDExMjp7bDp7NTk6e2M6WzM4XX19LGM6WzM4XX19fSwxMTA6e2w6ezEwMDp7bDp7NTk6e2M6Wzg3NDNdfSw5Nzp7bDp7MTEwOntsOnsxMDA6e2w6ezU5OntjOlsxMDgzN119fX19fX19LDEwMDp7bDp7NTk6e2M6WzEwODQ0XX19fSwxMTU6e2w6ezEwODp7bDp7MTExOntsOnsxMTI6e2w6ezEwMTp7bDp7NTk6e2M6WzEwODQwXX19fX19fX19fX19LDExODp7bDp7NTk6e2M6WzEwODQyXX19fX19LDEwMzp7bDp7NTk6e2M6Wzg3MzZdfSwxMDE6e2w6ezU5OntjOlsxMDY2MF19fX0sMTA4OntsOnsxMDE6e2w6ezU5OntjOls4NzM2XX19fX19LDEwOTp7bDp7MTE1OntsOnsxMDA6e2w6ezU5OntjOls4NzM3XX0sOTc6e2w6ezk3OntsOns1OTp7YzpbMTA2NjRdfX19LDk4OntsOns1OTp7YzpbMTA2NjVdfX19LDk5OntsOns1OTp7YzpbMTA2NjZdfX19LDEwMDp7bDp7NTk6e2M6WzEwNjY3XX19fSwxMDE6e2w6ezU5OntjOlsxMDY2OF19fX0sMTAyOntsOns1OTp7YzpbMTA2NjldfX19LDEwMzp7bDp7NTk6e2M6WzEwNjcwXX19fSwxMDQ6e2w6ezU5OntjOlsxMDY3MV19fX19fX19fX19fSwxMTQ6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MzVdfSwxMTg6e2w6ezk4OntsOns1OTp7YzpbODg5NF19LDEwMDp7bDp7NTk6e2M6WzEwNjUzXX19fX19fX19fX19LDExNTp7bDp7MTEyOntsOnsxMDQ6e2w6ezU5OntjOls4NzM4XX19fX19LDExNjp7bDp7NTk6e2M6WzE5N119fX19fSwxMjI6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzkwODRdfX19fX19fX19fX19fSwxMTE6e2w6ezEwMzp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlsyNjFdfX19fX19fSwxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE0Nl19fX19fX19LDExMjp7bDp7NTk6e2M6Wzg3NzZdfSw2OTp7bDp7NTk6e2M6WzEwODY0XX19fSw5Nzp7bDp7OTk6e2w6ezEwNTp7bDp7MTE0OntsOns1OTp7YzpbMTA4NjNdfX19fX19fX19LDEwMTp7bDp7NTk6e2M6Wzg3NzhdfX19LDEwNTp7bDp7MTAwOntsOns1OTp7YzpbODc3OV19fX19fSwxMTE6e2w6ezExNTp7bDp7NTk6e2M6WzM5XX19fX19LDExMjp7bDp7MTE0OntsOnsxMTE6e2w6ezEyMDp7bDp7NTk6e2M6Wzg3NzZdfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg3NzhdfX19fX19fX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMTA6e2w6ezEwMzp7bDp7NTk6e2M6WzIyOV19fSxjOlsyMjldfX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5OTBdfX19fX0sMTE2OntsOns1OTp7YzpbNDJdfX19LDEyMTp7bDp7MTA5OntsOnsxMTI6e2w6ezU5OntjOls4Nzc2XX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4NzgxXX19fX19fX19fX19fX0sMTE2OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOlsyMjddfX0sYzpbMjI3XX19fX19fX19fSwxMTc6e2w6ezEwOTp7bDp7MTA4OntsOns1OTp7YzpbMjI4XX19LGM6WzIyOF19fX19fSwxMTk6e2w6ezk5OntsOnsxMTE6e2w6ezExMDp7bDp7MTA1OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6Wzg3NTVdfX19fX19fX19fX19fSwxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA3NjldfX19fX19fX19fX0sOTg6e2w6ezc4OntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzEwOTg5XX19fX19fX0sOTc6e2w6ezk5OntsOnsxMDc6e2w6ezk5OntsOnsxMTE6e2w6ezExMDp7bDp7MTAzOntsOns1OTp7YzpbODc4MF19fX19fX19fX0sMTAxOntsOnsxMTI6e2w6ezExNTp7bDp7MTA1OntsOnsxMDg6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMTAxNF19fX19fX19fX19fX19fX0sMTEyOntsOnsxMTQ6e2w6ezEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezU5OntjOls4MjQ1XX19fX19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4NzY1XX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4OTA5XX19fX19fX19fX19fX19fSwxMTQ6e2w6ezExODp7bDp7MTAxOntsOnsxMDE6e2w6ezU5OntjOls4ODkzXX19fX19fX0sMTE5OntsOnsxMDE6e2w6ezEwMDp7bDp7NTk6e2M6Wzg5NjVdfSwxMDM6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5NjVdfX19fX19fX19fX19fX19LDk4OntsOnsxMTQ6e2w6ezEwNzp7bDp7NTk6e2M6WzkxNDFdfSwxMTY6e2w6ezk4OntsOnsxMTQ6e2w6ezEwNzp7bDp7NTk6e2M6WzkxNDJdfX19fX19fX19fX19fX19LDk5OntsOnsxMTE6e2w6ezExMDp7bDp7MTAzOntsOns1OTp7YzpbODc4MF19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwNzNdfX19fX0sMTAwOntsOnsxMTM6e2w6ezExNzp7bDp7MTExOntsOns1OTp7YzpbODIyMl19fX19fX19fX0sMTAxOntsOns5OTp7bDp7OTc6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbODc1N119LDEwMTp7bDp7NTk6e2M6Wzg3NTddfX19fX19fX19fX0sMTA5OntsOnsxMTI6e2w6ezExNjp7bDp7MTIxOntsOnsxMTg6e2w6ezU5OntjOlsxMDY3Ml19fX19fX19fX19fSwxMTI6e2w6ezExNTp7bDp7MTA1OntsOns1OTp7YzpbMTAxNF19fX19fX19LDExNDp7bDp7MTEwOntsOnsxMTE6e2w6ezExNzp7bDp7NTk6e2M6Wzg0OTJdfX19fX19fX19LDExNjp7bDp7OTc6e2w6ezU5OntjOls5NDZdfX19LDEwNDp7bDp7NTk6e2M6Wzg1MDJdfX19LDExOTp7bDp7MTAxOntsOnsxMDE6e2w6ezExMDp7bDp7NTk6e2M6Wzg4MTJdfX19fX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA5NV19fX19fSwxMDU6e2w6ezEwMzp7bDp7OTk6e2w6ezk3OntsOnsxMTI6e2w6ezU5OntjOls4ODk4XX19fX19LDEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6Wzk3MTFdfX19fX19fSwxMTc6e2w6ezExMjp7bDp7NTk6e2M6Wzg4OTldfX19fX19fSwxMTE6e2w6ezEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDc1Ml19fX19fX19LDExMjp7bDp7MTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6WzEwNzUzXX19fX19fX19fSwxMTY6e2w6ezEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6WzEwNzU0XX19fX19fX19fX19fX0sMTE1OntsOnsxMTM6e2w6ezk5OntsOnsxMTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwNzU4XX19fX19fX19fSwxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOls5NzMzXX19fX19fX19fSwxMTY6e2w6ezExNDp7bDp7MTA1OntsOns5Nzp7bDp7MTEwOntsOnsxMDM6e2w6ezEwODp7bDp7MTAxOntsOnsxMDA6e2w6ezExMTp7bDp7MTE5OntsOnsxMTA6e2w6ezU5OntjOls5NjYxXX19fX19fX19fSwxMTc6e2w6ezExMjp7bDp7NTk6e2M6Wzk2NTFdfX19fX19fX19fX19fX19fX19fX19LDExNzp7bDp7MTEyOntsOnsxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbMTA3NTZdfX19fX19fX19fX0sMTE4OntsOnsxMDE6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4OTddfX19fX19fSwxMTk6e2w6ezEwMTp7bDp7MTAwOntsOnsxMDM6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4OTZdfX19fX19fX19fX19fX19LDEwNzp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOlsxMDUwOV19fX19fX19fX19fSwxMDg6e2w6ezk3OntsOns5OTp7bDp7MTA3OntsOnsxMDg6e2w6ezExMTp7bDp7MTIyOntsOnsxMDE6e2w6ezExMDp7bDp7MTAzOntsOnsxMDE6e2w6ezU5OntjOlsxMDczMV19fX19fX19fX19fX19fX0sMTE1OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezExNDp7bDp7MTAxOntsOns1OTp7YzpbOTY0Ml19fX19fX19fX19fX19LDExNjp7bDp7MTE0OntsOnsxMDU6e2w6ezk3OntsOnsxMTA6e2w6ezEwMzp7bDp7MTA4OntsOnsxMDE6e2w6ezU5OntjOls5NjUyXX0sMTAwOntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns1OTp7YzpbOTY2Ml19fX19fX19fX0sMTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns1OTp7YzpbOTY2Nl19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOls5NjU2XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTEwOntsOnsxMDc6e2w6ezU5OntjOls5MjUxXX19fX19fX0sMTA3OntsOns0OTp7bDp7NTA6e2w6ezU5OntjOls5NjE4XX19fSw1Mjp7bDp7NTk6e2M6Wzk2MTddfX19fX0sNTE6e2w6ezUyOntsOns1OTp7YzpbOTYxOV19fX19fX19LDExMTp7bDp7OTk6e2w6ezEwNzp7bDp7NTk6e2M6Wzk2MDhdfX19fX19fX19LDExMDp7bDp7MTAxOntsOns1OTp7YzpbNjEsODQyMV19LDExMzp7bDp7MTE3OntsOnsxMDU6e2w6ezExODp7bDp7NTk6e2M6Wzg4MDEsODQyMV19fX19fX19fX19fSwxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5NzZdfX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTQ3XX19fX19LDExNjp7bDp7NTk6e2M6Wzg4NjldfSwxMTY6e2w6ezExMTp7bDp7MTA5OntsOns1OTp7YzpbODg2OV19fX19fX19fX0sMTE5OntsOnsxMTY6e2w6ezEwNTp7bDp7MTAxOntsOns1OTp7YzpbODkwNF19fX19fX19fX0sMTIwOntsOns2ODp7bDp7NzY6e2w6ezU5OntjOls5NTU5XX19fSw4Mjp7bDp7NTk6e2M6Wzk1NTZdfX19LDEwODp7bDp7NTk6e2M6Wzk1NThdfX19LDExNDp7bDp7NTk6e2M6Wzk1NTVdfX19fX0sNzI6e2w6ezU5OntjOls5NTUyXX0sNjg6e2w6ezU5OntjOls5NTc0XX19fSw4NTp7bDp7NTk6e2M6Wzk1NzddfX19LDEwMDp7bDp7NTk6e2M6Wzk1NzJdfX19LDExNzp7bDp7NTk6e2M6Wzk1NzVdfX19fX0sODU6e2w6ezc2OntsOns1OTp7YzpbOTU2NV19fX0sODI6e2w6ezU5OntjOls5NTYyXX19fSwxMDg6e2w6ezU5OntjOls5NTY0XX19fSwxMTQ6e2w6ezU5OntjOls5NTYxXX19fX19LDg2OntsOns1OTp7YzpbOTU1M119LDcyOntsOns1OTp7YzpbOTU4MF19fX0sNzY6e2w6ezU5OntjOls5NTcxXX19fSw4Mjp7bDp7NTk6e2M6Wzk1NjhdfX19LDEwNDp7bDp7NTk6e2M6Wzk1NzldfX19LDEwODp7bDp7NTk6e2M6Wzk1NzBdfX19LDExNDp7bDp7NTk6e2M6Wzk1NjddfX19fX0sOTg6e2w6ezExMTp7bDp7MTIwOntsOns1OTp7YzpbMTA2OTddfX19fX19fSwxMDA6e2w6ezc2OntsOns1OTp7YzpbOTU1N119fX0sODI6e2w6ezU5OntjOls5NTU0XX19fSwxMDg6e2w6ezU5OntjOls5NDg4XX19fSwxMTQ6e2w6ezU5OntjOls5NDg0XX19fX19LDEwNDp7bDp7NTk6e2M6Wzk0NzJdfSw2ODp7bDp7NTk6e2M6Wzk1NzNdfX19LDg1OntsOns1OTp7YzpbOTU3Nl19fX0sMTAwOntsOns1OTp7YzpbOTUxNl19fX0sMTE3OntsOns1OTp7YzpbOTUyNF19fX19fSwxMDk6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6Wzg4NjNdfX19fX19fX19fX0sMTEyOntsOnsxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbODg2Ml19fX19fX19fX0sMTE2OntsOnsxMDU6e2w6ezEwOTp7bDp7MTAxOntsOnsxMTU6e2w6ezU5OntjOls4ODY0XX19fX19fX19fX19LDExNzp7bDp7NzY6e2w6ezU5OntjOls5NTYzXX19fSw4Mjp7bDp7NTk6e2M6Wzk1NjBdfX19LDEwODp7bDp7NTk6e2M6Wzk0OTZdfX19LDExNDp7bDp7NTk6e2M6Wzk0OTJdfX19fX0sMTE4OntsOns1OTp7YzpbOTQ3NF19LDcyOntsOns1OTp7YzpbOTU3OF19fX0sNzY6e2w6ezU5OntjOls5NTY5XX19fSw4Mjp7bDp7NTk6e2M6Wzk1NjZdfX19LDEwNDp7bDp7NTk6e2M6Wzk1MzJdfX19LDEwODp7bDp7NTk6e2M6Wzk1MDhdfX19LDExNDp7bDp7NTk6e2M6Wzk1MDBdfX19fX19fX19LDExMjp7bDp7MTE0OntsOnsxMDU6e2w6ezEwOTp7bDp7MTAxOntsOns1OTp7YzpbODI0NV19fX19fX19fX19fSwxMTQ6e2w6ezEwMTp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOls3MjhdfX19fX19fSwxMTg6e2w6ezk4OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTY2XX19LGM6WzE2Nl19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTkxXX19fX19LDEwMTp7bDp7MTA5OntsOnsxMDU6e2w6ezU5OntjOls4MjcxXX19fX19fX0sMTA1OntsOnsxMDk6e2w6ezU5OntjOls4NzY1XX0sMTAxOntsOns1OTp7YzpbODkwOV19fX19fX19LDExMTp7bDp7MTA4OntsOns1OTp7YzpbOTJdfSw5ODp7bDp7NTk6e2M6WzEwNjkzXX19fSwxMDQ6e2w6ezExNTp7bDp7MTE3OntsOns5ODp7bDp7NTk6e2M6WzEwMTg0XX19fX19fX19fX19fX19fSwxMTc6e2w6ezEwODp7bDp7MTA4OntsOns1OTp7YzpbODIyNl19LDEwMTp7bDp7MTE2OntsOns1OTp7YzpbODIyNl19fX19fX19fX0sMTA5OntsOnsxMTI6e2w6ezU5OntjOls4NzgyXX0sNjk6e2w6ezU5OntjOlsxMDkyNl19fX0sMTAxOntsOns1OTp7YzpbODc4M119LDExMzp7bDp7NTk6e2M6Wzg3ODNdfX19fX19fX19fX19fSw5OTp7bDp7OTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMjYzXX19fX19fX19fSwxMTI6e2w6ezU5OntjOls4NzQ1XX0sOTc6e2w6ezExMDp7bDp7MTAwOntsOns1OTp7YzpbMTA4MjBdfX19fX19fSw5ODp7bDp7MTE0OntsOns5OTp7bDp7MTE3OntsOnsxMTI6e2w6ezU5OntjOlsxMDgyNV19fX19fX19fX19fSw5OTp7bDp7OTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwODI3XX19fX19LDExNzp7bDp7MTEyOntsOns1OTp7YzpbMTA4MjNdfX19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTA4MTZdfX19fX19fSwxMTU6e2w6ezU5OntjOls4NzQ1LDY1MDI0XX19fX19LDExNDp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4MjU3XX19fX19LDExMTp7bDp7MTEwOntsOns1OTp7YzpbNzExXX19fX19fX19fSw5OTp7bDp7OTc6e2w6ezExMjp7bDp7MTE1OntsOns1OTp7YzpbMTA4MjldfX19fX0sMTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzI2OV19fX19fX19fX0sMTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMjMxXX19LGM6WzIzMV19fX19fX19LDEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzI2NV19fX19fX19LDExNzp7bDp7MTEyOntsOnsxMTU6e2w6ezU5OntjOlsxMDgyOF19LDExNTp7bDp7MTA5OntsOns1OTp7YzpbMTA4MzJdfX19fX19fX19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMjY3XX19fX19fX0sMTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMTg0XX19LGM6WzE4NF19fX19fSwxMDk6e2w6ezExMjp7bDp7MTE2OntsOnsxMjE6e2w6ezExODp7bDp7NTk6e2M6WzEwNjc0XX19fX19fX19fX19LDExMDp7bDp7MTE2OntsOns1OTp7YzpbMTYyXX0sMTAxOntsOnsxMTQ6e2w6ezEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxODNdfX19fX19fX19fX19LGM6WzE2Ml19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDA5Nl19fX19fSwxMDQ6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDk1XX19fX19LDEwMTp7bDp7OTk6e2w6ezEwNzp7bDp7NTk6e2M6WzEwMDAzXX0sMTA5OntsOns5Nzp7bDp7MTE0OntsOnsxMDc6e2w6ezU5OntjOlsxMDAwM119fX19fX19fX19fX19fX0sMTA1OntsOns1OTp7YzpbOTY3XX19fX19LDEwNTp7bDp7MTE0OntsOns1OTp7YzpbOTY3NV19LDY5OntsOns1OTp7YzpbMTA2OTFdfX19LDk5OntsOns1OTp7YzpbNzEwXX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4NzkxXX19fX19LDEwODp7bDp7MTAxOntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOnsxMDg6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezU5OntjOls4NjM0XX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7NTk6e2M6Wzg2MzVdfX19fX19fX19fX19fX19fX19fX19LDEwMDp7bDp7ODI6e2w6ezU5OntjOlsxNzRdfX19LDgzOntsOns1OTp7YzpbOTQxNl19fX0sOTc6e2w6ezExNTp7bDp7MTE2OntsOns1OTp7YzpbODg1OV19fX19fX19LDk5OntsOnsxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOls4ODU4XX19fX19fX19fSwxMDA6e2w6ezk3OntsOnsxMTU6e2w6ezEwNDp7bDp7NTk6e2M6Wzg4NjFdfX19fX19fX19fX19fX19fX0sMTAxOntsOns1OTp7YzpbODc5MV19fX0sMTAyOntsOnsxMTA6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOlsxMDc2OF19fX19fX19fX19fSwxMDk6e2w6ezEwNTp7bDp7MTAwOntsOns1OTp7YzpbMTA5OTFdfX19fX19fSwxMTU6e2w6ezk5OntsOnsxMDU6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjkwXX19fX19fX19fX19fX0sMTA4OntsOnsxMTc6e2w6ezk4OntsOnsxMTU6e2w6ezU5OntjOls5ODI3XX0sMTE3OntsOnsxMDU6e2w6ezExNjp7bDp7NTk6e2M6Wzk4MjddfX19fX19fX19fX19fX19LDExMTp7bDp7MTA4OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzU4XX0sMTAxOntsOns1OTp7YzpbODc4OF19LDExMzp7bDp7NTk6e2M6Wzg3ODhdfX19fX19fX19fX0sMTA5OntsOnsxMDk6e2w6ezk3OntsOns1OTp7YzpbNDRdfSwxMTY6e2w6ezU5OntjOls2NF19fX19fX19LDExMjp7bDp7NTk6e2M6Wzg3MDVdfSwxMDI6e2w6ezExMDp7bDp7NTk6e2M6Wzg3MjhdfX19fX0sMTA4OntsOnsxMDE6e2w6ezEwOTp7bDp7MTAxOntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MDVdfX19fX19fX19LDEyMDp7bDp7MTAxOntsOnsxMTU6e2w6ezU5OntjOls4NDUwXX19fX19fX19fX19fX19fSwxMTA6e2w6ezEwMzp7bDp7NTk6e2M6Wzg3NzNdfSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMTA4NjFdfX19fX19fX19LDEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOls4NzUwXX19fX19fX19fSwxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE0OF19fX0sMTE0OntsOnsxMTE6e2w6ezEwMDp7bDp7NTk6e2M6Wzg3MjBdfX19fX19fSwxMjE6e2w6ezU5OntjOlsxNjldfSwxMTU6e2w6ezExNDp7bDp7NTk6e2M6Wzg0NzFdfX19fX19LGM6WzE2OV19fX19fSwxMTQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2MjldfX19fX19fSwxMTE6e2w6ezExNTp7bDp7MTE1OntsOns1OTp7YzpbMTAwMDddfX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk5Ml19fX19fSwxMTc6e2w6ezk4OntsOns1OTp7YzpbMTA5NTldfSwxMDE6e2w6ezU5OntjOlsxMDk2MV19fX19fSwxMTI6e2w6ezU5OntjOlsxMDk2MF19LDEwMTp7bDp7NTk6e2M6WzEwOTYyXX19fX19fX19fSwxMTY6e2w6ezEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOls4OTQzXX19fX19fX19fSwxMTc6e2w6ezEwMDp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMDg6e2w6ezU5OntjOlsxMDU1Ml19fX0sMTE0OntsOns1OTp7YzpbMTA1NDldfX19fX19fX19fX0sMTAxOntsOnsxMTI6e2w6ezExNDp7bDp7NTk6e2M6Wzg5MjZdfX19fX0sMTE1OntsOns5OTp7bDp7NTk6e2M6Wzg5MjddfX19fX19fSwxMDg6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2MzBdfSwxMTI6e2w6ezU5OntjOlsxMDU1N119fX19fX19fX19fSwxMTI6e2w6ezU5OntjOls4NzQ2XX0sOTg6e2w6ezExNDp7bDp7OTk6e2w6ezk3OntsOnsxMTI6e2w6ezU5OntjOlsxMDgyNF19fX19fX19fX19fSw5OTp7bDp7OTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwODIyXX19fX19LDExNzp7bDp7MTEyOntsOns1OTp7YzpbMTA4MjZdfX19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODg0NV19fX19fX19LDExMTp7bDp7MTE0OntsOns1OTp7YzpbMTA4MjFdfX19fX0sMTE1OntsOns1OTp7YzpbODc0Niw2NTAyNF19fX19fSwxMTQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2MzFdfSwxMDk6e2w6ezU5OntjOlsxMDU1Nl19fX19fX19fX0sMTA4OntsOnsxMjE6e2w6ezEwMTp7bDp7MTEzOntsOnsxMTI6e2w6ezExNDp7bDp7MTAxOntsOns5OTp7bDp7NTk6e2M6Wzg5MjZdfX19fX19fX19LDExNTp7bDp7MTE3OntsOns5OTp7bDp7OTk6e2w6ezU5OntjOls4OTI3XX19fX19fX19fX19fX0sMTE4OntsOnsxMDE6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5MTBdfX19fX19fSwxMTk6e2w6ezEwMTp7bDp7MTAwOntsOnsxMDM6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5MTFdfX19fX19fX19fX19fX19LDExNDp7bDp7MTAxOntsOnsxMTA6e2w6ezU5OntjOlsxNjRdfX0sYzpbMTY0XX19fX19LDExODp7bDp7MTAxOntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOnsxMDg6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezU5OntjOls4NjMwXX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7NTk6e2M6Wzg2MzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDExODp7bDp7MTAxOntsOnsxMDE6e2w6ezU5OntjOls4OTEwXX19fX19fX0sMTE5OntsOnsxMDE6e2w6ezEwMDp7bDp7NTk6e2M6Wzg5MTFdfX19fX19fX19LDExOTp7bDp7OTk6e2w6ezExMTp7bDp7MTEwOntsOnsxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbODc1NF19fX19fX19fX19fX19LDEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOls4NzUzXX19fX19fX19fSwxMjE6e2w6ezEwODp7bDp7OTk6e2w6ezExNjp7bDp7MTIxOntsOns1OTp7YzpbOTAwNV19fX19fX19fX19fX19LDEwMDp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY1OV19fX19fX19LDcyOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1OTddfX19fX19fSw5Nzp7bDp7MTAzOntsOnsxMDM6e2w6ezEwMTp7bDp7MTE0OntsOns1OTp7YzpbODIyNF19fX19fX19fX0sMTA4OntsOnsxMDE6e2w6ezExNjp7bDp7MTA0OntsOns1OTp7YzpbODUwNF19fX19fX19fX0sMTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NTk1XX19fX19LDExNTp7bDp7MTA0OntsOns1OTp7YzpbODIwOF19LDExODp7bDp7NTk6e2M6Wzg4NjddfX19fX19fX19LDk4OntsOnsxMDc6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTA1MTFdfX19fX19fX19fX0sMTA4OntsOns5Nzp7bDp7OTk6e2w6ezU5OntjOls3MzNdfX19fX19fX19LDk5OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzI3MV19fX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA3Nl19fX19fSwxMDA6e2w6ezU5OntjOls4NTE4XX0sOTc6e2w6ezEwMzp7bDp7MTAzOntsOnsxMDE6e2w6ezExNDp7bDp7NTk6e2M6WzgyMjVdfX19fX19fX19LDExNDp7bDp7MTE0OntsOns1OTp7YzpbODY1MF19fX19fX19LDExMTp7bDp7MTE2OntsOnsxMTU6e2w6ezEwMTp7bDp7MTEzOntsOns1OTp7YzpbMTA4NzFdfX19fX19fX19fX19fSwxMDE6e2w6ezEwMzp7bDp7NTk6e2M6WzE3Nl19fSxjOlsxNzZdfSwxMDg6e2w6ezExNjp7bDp7OTc6e2w6ezU5OntjOls5NDhdfX19fX19fSwxMDk6e2w6ezExMjp7bDp7MTE2OntsOnsxMjE6e2w6ezExODp7bDp7NTk6e2M6WzEwNjczXX19fX19fX19fX19fX0sMTAyOntsOnsxMDU6e2w6ezExNTp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOlsxMDYyM119fX19fX19fX0sMTE0OntsOns1OTp7YzpbMTIwMDk3XX19fX19LDEwNDp7bDp7OTc6e2w6ezExNDp7bDp7MTA4OntsOns1OTp7YzpbODY0M119fX0sMTE0OntsOns1OTp7YzpbODY0Ml19fX19fX19fX0sMTA1OntsOns5Nzp7bDp7MTA5OntsOns1OTp7YzpbODkwMF19LDExMTp7bDp7MTEwOntsOnsxMDA6e2w6ezU5OntjOls4OTAwXX0sMTE1OntsOnsxMTc6e2w6ezEwNTp7bDp7MTE2OntsOns1OTp7YzpbOTgzMF19fX19fX19fX19fX19fX0sMTE1OntsOns1OTp7YzpbOTgzMF19fX19fX19LDEwMTp7bDp7NTk6e2M6WzE2OF19fX0sMTAzOntsOns5Nzp7bDp7MTA5OntsOnsxMDk6e2w6ezk3OntsOns1OTp7YzpbOTg5XX19fX19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMTA6e2w6ezU5OntjOls4OTQ2XX19fX19fX0sMTE4OntsOns1OTp7YzpbMjQ3XX0sMTA1OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6WzI0N119LDExMTp7bDp7MTEwOntsOnsxMTY6e2w6ezEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6Wzg5MDNdfX19fX19fX19fX19fX19fSxjOlsyNDddfX19fX0sMTExOntsOnsxMTA6e2w6ezEyMDp7bDp7NTk6e2M6Wzg5MDNdfX19fX19fX19fX0sMTA2OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTEwNl19fX19fX19LDEwODp7bDp7OTk6e2w6ezExMTp7bDp7MTE0OntsOnsxMTA6e2w6ezU5OntjOls4OTkwXX19fX19fX0sMTE0OntsOnsxMTE6e2w6ezExMjp7bDp7NTk6e2M6Wzg5NzNdfX19fX19fX19fX0sMTExOntsOnsxMDg6e2w6ezEwODp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzM2XX19fX19fX19fSwxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE0OV19fX19fSwxMTY6e2w6ezU5OntjOls3MjldfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg3ODRdfSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODc4NV19fX19fX19fX19fSwxMDk6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6Wzg3NjBdfX19fX19fX19fX0sMTEyOntsOnsxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbODcyNF19fX19fX19fX0sMTE1OntsOnsxMTM6e2w6ezExNzp7bDp7OTc6e2w6ezExNDp7bDp7MTAxOntsOns1OTp7YzpbODg2NV19fX19fX19fX19fX19fX0sMTE3OntsOns5ODp7bDp7MTA4OntsOnsxMDE6e2w6ezk4OntsOns5Nzp7bDp7MTE0OntsOnsxMTk6e2w6ezEwMTp7bDp7MTAwOntsOnsxMDM6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5NjZdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMTk6e2w6ezExMDp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTVdfX19fX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOnsxMTU6e2w6ezU5OntjOls4NjUwXX19fX19fX19fX19fX19fX19fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExMjp7bDp7MTExOntsOnsxMTE6e2w6ezExMDp7bDp7MTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns1OTp7YzpbODY0M119fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOls4NjQyXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE0OntsOns5ODp7bDp7MTA3OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6WzEwNTEyXX19fX19fX19fX19fX0sOTk6e2w6ezExMTp7bDp7MTE0OntsOnsxMTA6e2w6ezU5OntjOls4OTkxXX19fX19fX0sMTE0OntsOnsxMTE6e2w6ezExMjp7bDp7NTk6e2M6Wzg5NzJdfX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTkzXX19fSwxMjE6e2w6ezU5OntjOlsxMTA5XX19fX19LDExMTp7bDp7MTA4OntsOns1OTp7YzpbMTA3NDJdfX19fX0sMTE2OntsOnsxMTQ6e2w6ezExMTp7bDp7MTA3OntsOns1OTp7YzpbMjczXX19fX19fX19fX19LDExNjp7bDp7MTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5NDVdfX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7NTk6e2M6Wzk2NjNdfSwxMDI6e2w6ezU5OntjOls5NjYyXX19fX19fX19fSwxMTc6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2OTNdfX19fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDYwN119fX19fX19fX0sMTE5OntsOns5Nzp7bDp7MTEwOntsOnsxMDM6e2w6ezEwODp7bDp7MTAxOntsOns1OTp7YzpbMTA2NjJdfX19fX19fX19fX19fSwxMjI6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMTE5XX19fX19LDEwNTp7bDp7MTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwMjM5XX19fX19fX19fX19fX19fX19LDEwMTp7bDp7Njg6e2w6ezY4OntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzEwODcxXX19fX19fX0sMTExOntsOnsxMTY6e2w6ezU5OntjOls4Nzg1XX19fX19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMjMzXX19LGM6WzIzM119fX19fX19LDExNTp7bDp7MTE2OntsOnsxMDE6e2w6ezExNDp7bDp7NTk6e2M6WzEwODYyXX19fX19fX19fX19LDk5OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzI4M119fX19fX19fX0sMTA1OntsOnsxMTQ6e2w6ezU5OntjOls4NzkwXX0sOTk6e2w6ezU5OntjOlsyMzRdfX0sYzpbMjM0XX19fX19LDExMTp7bDp7MTA4OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6Wzg3ODldfX19fX19fX19LDEyMTp7bDp7NTk6e2M6WzExMDFdfX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzI3OV19fX19fX19LDEwMTp7bDp7NTk6e2M6Wzg1MTldfX19LDEwMjp7bDp7Njg6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODc4Nl19fX19fX19LDExNDp7bDp7NTk6e2M6WzEyMDA5OF19fX19fSwxMDM6e2w6ezU5OntjOlsxMDkwNl19LDExNDp7bDp7OTc6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbMjMyXX19LGM6WzIzMl19fX19fX19LDExNTp7bDp7NTk6e2M6WzEwOTAyXX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzEwOTA0XX19fX19fX19fX19LDEwODp7bDp7NTk6e2M6WzEwOTA1XX0sMTA1OntsOnsxMTA6e2w6ezExNjp7bDp7MTAxOntsOnsxMTQ6e2w6ezExNTp7bDp7NTk6e2M6WzkxOTFdfX19fX19fX19fX19fSwxMDg6e2w6ezU5OntjOls4NDY3XX19fSwxMTU6e2w6ezU5OntjOlsxMDkwMV19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDkwM119fX19fX19fX19fSwxMDk6e2w6ezk3OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMjc1XX19fX19fX0sMTEyOntsOnsxMTY6e2w6ezEyMTp7bDp7NTk6e2M6Wzg3MDldfSwxMTU6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbODcwOV19fX19fX19LDExODp7bDp7NTk6e2M6Wzg3MDldfX19fX19fX19LDExNTp7bDp7MTEyOntsOns0OTp7bDp7NTE6e2w6ezU5OntjOls4MTk2XX19fSw1Mjp7bDp7NTk6e2M6WzgxOTddfX19fX0sNTk6e2M6WzgxOTVdfX19fX19fSwxMTA6e2w6ezEwMzp7bDp7NTk6e2M6WzMzMV19fX0sMTE1OntsOnsxMTI6e2w6ezU5OntjOls4MTk0XX19fX19fX0sMTExOntsOnsxMDM6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMjgxXX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNTBdfX19fX19fSwxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOls4OTE3XX0sMTE1OntsOnsxMDg6e2w6ezU5OntjOlsxMDcyM119fX19fX19fX0sMTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6WzEwODY1XX19fX19fX0sMTE1OntsOnsxMDU6e2w6ezU5OntjOls5NDldfSwxMDg6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbOTQ5XX19fX19fX0sMTE4OntsOns1OTp7YzpbMTAxM119fX19fX19fX0sMTEzOntsOns5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbODc5MF19fX19fX19LDExMTp7bDp7MTA4OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6Wzg3ODldfX19fX19fX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg3NzBdfX19fX0sMTA4OntsOns5Nzp7bDp7MTEwOntsOnsxMTY6e2w6ezEwMzp7bDp7MTE2OntsOnsxMTQ6e2w6ezU5OntjOlsxMDkwMl19fX19fX19LDEwODp7bDp7MTAxOntsOnsxMTU6e2w6ezExNTp7bDp7NTk6e2M6WzEwOTAxXX19fX19fX19fX19fX19fX19fX0sMTE3OntsOns5Nzp7bDp7MTA4OntsOnsxMTU6e2w6ezU5OntjOls2MV19fX19fX19LDEwMTp7bDp7MTE1OntsOnsxMTY6e2w6ezU5OntjOls4Nzk5XX19fX19fX0sMTA1OntsOnsxMTg6e2w6ezU5OntjOls4ODAxXX0sNjg6e2w6ezY4OntsOns1OTp7YzpbMTA4NzJdfX19fX19fX19fX0sMTE4OntsOnsxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezExNTp7bDp7MTA4OntsOns1OTp7YzpbMTA3MjVdfX19fX19fX19fX19fX19LDExNDp7bDp7Njg6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODc4N119fX19fX19LDk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjA5XX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOls4NDk1XX19fX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOls4Nzg0XX19fX19fX0sMTA1OntsOnsxMDk6e2w6ezU5OntjOls4NzcwXX19fX19fX0sMTE2OntsOns5Nzp7bDp7NTk6e2M6Wzk1MV19fX0sMTA0OntsOns1OTp7YzpbMjQwXX19LGM6WzI0MF19fX0sMTE3OntsOnsxMDk6e2w6ezEwODp7bDp7NTk6e2M6WzIzNV19fSxjOlsyMzVdfX19LDExNDp7bDp7MTExOntsOns1OTp7YzpbODM2NF19fX19fX19LDEyMDp7bDp7OTk6e2w6ezEwODp7bDp7NTk6e2M6WzMzXX19fX19LDEwNTp7bDp7MTE1OntsOnsxMTY6e2w6ezU5OntjOls4NzA3XX19fX19fX0sMTEyOntsOnsxMDE6e2w6ezk5OntsOnsxMTY6e2w6ezk3OntsOnsxMTY6e2w6ezEwNTp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOls4NDk2XX19fX19fX19fX19fX19fX19LDExMTp7bDp7MTEwOntsOnsxMDE6e2w6ezExMDp7bDp7MTE2OntsOnsxMDU6e2w6ezk3OntsOnsxMDg6e2w6ezEwMTp7bDp7NTk6e2M6Wzg1MTldfX19fX19fX19fX19fX19fX19fX19fX19fSwxMDI6e2w6ezk3OntsOnsxMDg6e2w6ezEwODp7bDp7MTA1OntsOnsxMTA6e2w6ezEwMzp7bDp7MTAwOntsOnsxMTE6e2w6ezExNjp7bDp7MTE1OntsOnsxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg3ODZdfX19fX19fX19fX19fX19fX19fX19fX19fSw5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA5Ml19fX19fSwxMDE6e2w6ezEwOTp7bDp7OTc6e2w6ezEwODp7bDp7MTAxOntsOns1OTp7YzpbOTc5Ml19fX19fX19fX19fSwxMDI6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDU6e2w6ezEwMzp7bDp7NTk6e2M6WzY0MjU5XX19fX19fX19fSwxMDg6e2w6ezEwNTp7bDp7MTAzOntsOns1OTp7YzpbNjQyNTZdfX19fX0sMTA4OntsOnsxMDU6e2w6ezEwMzp7bDp7NTk6e2M6WzY0MjYwXX19fX19fX19fSwxMTQ6e2w6ezU5OntjOlsxMjAwOTldfX19fX0sMTA1OntsOnsxMDg6e2w6ezEwNTp7bDp7MTAzOntsOns1OTp7YzpbNjQyNTddfX19fX19fX19LDEwNjp7bDp7MTA4OntsOnsxMDU6e2w6ezEwMzp7bDp7NTk6e2M6WzEwMiwxMDZdfX19fX19fX19LDEwODp7bDp7OTc6e2w6ezExNjp7bDp7NTk6e2M6Wzk4MzddfX19fX0sMTA4OntsOnsxMDU6e2w6ezEwMzp7bDp7NTk6e2M6WzY0MjU4XX19fX19fX0sMTE2OntsOnsxMTA6e2w6ezExNTp7bDp7NTk6e2M6Wzk2NDldfX19fX19fX19LDExMDp7bDp7MTExOntsOnsxMDI6e2w6ezU5OntjOls0MDJdfX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTUxXX19fX19LDExNDp7bDp7OTc6e2w6ezEwODp7bDp7MTA4OntsOns1OTp7YzpbODcwNF19fX19fX19LDEwNzp7bDp7NTk6e2M6Wzg5MTZdfSwxMTg6e2w6ezU5OntjOlsxMDk2OV19fX19fX19fX0sMTEyOntsOns5Nzp7bDp7MTE0OntsOnsxMTY6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOlsxMDc2NV19fX19fX19fX19fX19fX0sMTE0OntsOns5Nzp7bDp7OTk6e2w6ezQ5OntsOns1MDp7bDp7NTk6e2M6WzE4OV19fSxjOlsxODldfSw1MTp7bDp7NTk6e2M6Wzg1MzFdfX19LDUyOntsOns1OTp7YzpbMTg4XX19LGM6WzE4OF19LDUzOntsOns1OTp7YzpbODUzM119fX0sNTQ6e2w6ezU5OntjOls4NTM3XX19fSw1Njp7bDp7NTk6e2M6Wzg1MzldfX19fX0sNTA6e2w6ezUxOntsOns1OTp7YzpbODUzMl19fX0sNTM6e2w6ezU5OntjOls4NTM0XX19fX19LDUxOntsOns1Mjp7bDp7NTk6e2M6WzE5MF19fSxjOlsxOTBdfSw1Mzp7bDp7NTk6e2M6Wzg1MzVdfX19LDU2OntsOns1OTp7YzpbODU0MF19fX19fSw1Mjp7bDp7NTM6e2w6ezU5OntjOls4NTM2XX19fX19LDUzOntsOns1NDp7bDp7NTk6e2M6Wzg1MzhdfX19LDU2OntsOns1OTp7YzpbODU0MV19fX19fSw1NTp7bDp7NTY6e2w6ezU5OntjOls4NTQyXX19fX19fX0sMTE1OntsOnsxMDg6e2w6ezU5OntjOls4MjYwXX19fX19fX0sMTExOntsOnsxMTk6e2w6ezExMDp7bDp7NTk6e2M6Wzg5OTRdfX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzExOTk5NV19fX19fX19fX0sMTAzOntsOns2OTp7bDp7NTk6e2M6Wzg4MDddfSwxMDg6e2w6ezU5OntjOlsxMDg5Ml19fX19fSw5Nzp7bDp7OTk6e2w6ezExNzp7bDp7MTE2OntsOnsxMDE6e2w6ezU5OntjOls1MDFdfX19fX19fX19LDEwOTp7bDp7MTA5OntsOns5Nzp7bDp7NTk6e2M6Wzk0N119LDEwMDp7bDp7NTk6e2M6Wzk4OV19fX19fX19fX0sMTEyOntsOns1OTp7YzpbMTA4ODZdfX19fX0sOTg6e2w6ezExNDp7bDp7MTAxOntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6WzI4N119fX19fX19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMjg1XX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA3NV19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMjg5XX19fX19fX0sMTAxOntsOns1OTp7YzpbODgwNV19LDEwODp7bDp7NTk6e2M6Wzg5MjNdfX19LDExMzp7bDp7NTk6e2M6Wzg4MDVdfSwxMTM6e2w6ezU5OntjOls4ODA3XX19fSwxMTU6e2w6ezEwODp7bDp7OTc6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA4NzhdfX19fX19fX19fX19fSwxMTU6e2w6ezU5OntjOlsxMDg3OF19LDk5OntsOns5OTp7bDp7NTk6e2M6WzEwOTIxXX19fX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDg4MF19LDExMTp7bDp7NTk6e2M6WzEwODgyXX0sMTA4OntsOns1OTp7YzpbMTA4ODRdfX19fX19fX19fX0sMTA4OntsOns1OTp7YzpbODkyMyw2NTAyNF19LDEwMTp7bDp7MTE1OntsOns1OTp7YzpbMTA5MDBdfX19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMDBdfX19fX0sMTAzOntsOns1OTp7YzpbODgxMV19LDEwMzp7bDp7NTk6e2M6Wzg5MjFdfX19fX0sMTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7MTA4OntsOns1OTp7YzpbODUwM119fX19fX19fX0sMTA2OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTEwN119fX19fX19LDEwODp7bDp7NTk6e2M6Wzg4MjNdfSw2OTp7bDp7NTk6e2M6WzEwODk4XX19fSw5Nzp7bDp7NTk6e2M6WzEwOTE3XX19fSwxMDY6e2w6ezU5OntjOlsxMDkxNl19fX19fSwxMTA6e2w6ezY5OntsOns1OTp7YzpbODgwOV19fX0sOTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwODkwXX0sMTEyOntsOnsxMTQ6e2w6ezExMTp7bDp7MTIwOntsOns1OTp7YzpbMTA4OTBdfX19fX19fX19fX19fSwxMDE6e2w6ezU5OntjOlsxMDg4OF19LDExMzp7bDp7NTk6e2M6WzEwODg4XX0sMTEzOntsOns1OTp7YzpbODgwOV19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4OTM1XX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTUyXX19fX19fX0sMTE0OntsOns5Nzp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOls5Nl19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbODQ1OF19fX19fSwxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg4MTldfSwxMDE6e2w6ezU5OntjOlsxMDg5NF19fX0sMTA4OntsOns1OTp7YzpbMTA4OTZdfX19fX19fX19LDExNjp7bDp7NTk6e2M6WzYyXX0sOTk6e2w6ezk5OntsOns1OTp7YzpbMTA5MTldfX19LDEwNTp7bDp7MTE0OntsOns1OTp7YzpbMTA4NzRdfX19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODkxOV19fX19fX19LDEwODp7bDp7ODA6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDY0NV19fX19fX19fX0sMTEzOntsOnsxMTc6e2w6ezEwMTp7bDp7MTE1OntsOnsxMTY6e2w6ezU5OntjOlsxMDg3Nl19fX19fX19fX19fSwxMTQ6e2w6ezk3OntsOnsxMTI6e2w6ezExMjp7bDp7MTE0OntsOnsxMTE6e2w6ezEyMDp7bDp7NTk6e2M6WzEwODg2XX19fX19fX19fX19LDExNDp7bDp7MTE0OntsOns1OTp7YzpbMTA2MTZdfX19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODkxOV19fX19fX19LDEwMTp7bDp7MTEzOntsOnsxMDg6e2w6ezEwMTp7bDp7MTE1OntsOnsxMTU6e2w6ezU5OntjOls4OTIzXX19fX19fX19fSwxMTM6e2w6ezEwODp7bDp7MTAxOntsOnsxMTU6e2w6ezExNTp7bDp7NTk6e2M6WzEwODkyXX19fX19fX19fX19fX19fSwxMDg6e2w6ezEwMTp7bDp7MTE1OntsOnsxMTU6e2w6ezU5OntjOls4ODIzXX19fX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODgxOV19fX19fX19fX19LGM6WzYyXX0sMTE4OntsOnsxMDE6e2w6ezExNDp7bDp7MTE2OntsOnsxMTA6e2w6ezEwMTp7bDp7MTEzOntsOnsxMTM6e2w6ezU5OntjOls4ODA5LDY1MDI0XX19fX19fX19fX19fX19fSwxMTA6e2w6ezY5OntsOns1OTp7YzpbODgwOSw2NTAyNF19fX19fX19fX0sMTA0OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjYwXX19fX19fX0sOTc6e2w6ezEwNTp7bDp7MTE0OntsOnsxMTU6e2w6ezExMjp7bDp7NTk6e2M6WzgyMDJdfX19fX19fX19LDEwODp7bDp7MTAyOntsOns1OTp7YzpbMTg5XX19fX19LDEwOTp7bDp7MTA1OntsOnsxMDg6e2w6ezExNjp7bDp7NTk6e2M6Wzg0NTldfX19fX19fX19LDExNDp7bDp7MTAwOntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA5OF19fX19fX19LDExNDp7bDp7NTk6e2M6Wzg1OTZdfSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU2OF19fX19fX19LDExOTp7bDp7NTk6e2M6Wzg2MjFdfX19fX19fX19LDk4OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODQ2M119fX19fX19LDk5OntsOnsxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsyOTNdfX19fX19fX19LDEwMTp7bDp7OTc6e2w6ezExNDp7bDp7MTE2OntsOnsxMTU6e2w6ezU5OntjOls5ODI5XX0sMTE3OntsOnsxMDU6e2w6ezExNjp7bDp7NTk6e2M6Wzk4MjldfX19fX19fX19fX19fX19LDEwODp7bDp7MTA4OntsOnsxMDU6e2w6ezExMjp7bDp7NTk6e2M6WzgyMzBdfX19fX19fX19LDExNDp7bDp7OTk6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbODg4OV19fX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDEwMV19fX19fSwxMDc6e2w6ezExNTp7bDp7MTAxOntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6WzEwNTMzXX19fX19fX19fX19LDExOTp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOlsxMDUzNF19fX19fX19fX19fX19fX0sMTExOntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NzAzXX19fX19fX0sMTA5OntsOnsxMTY6e2w6ezEwNDp7bDp7MTE2OntsOns1OTp7YzpbODc2M119fX19fX19fX0sMTExOntsOnsxMDc6e2w6ezEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MTddfX19fX19fX19fX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MThdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE1M119fX19fSwxMTQ6e2w6ezk4OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODIxM119fX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5OTddfX19fX0sMTA4OntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4NDYzXX19fX19fX19fSwxMTY6e2w6ezExNDp7bDp7MTExOntsOnsxMDc6e2w6ezU5OntjOlsyOTVdfX19fX19fX19fX0sMTIxOntsOns5ODp7bDp7MTE3OntsOnsxMDg6e2w6ezEwODp7bDp7NTk6e2M6WzgyNTldfX19fX19fX19LDExMjp7bDp7MTA0OntsOnsxMDE6e2w6ezExMDp7bDp7NTk6e2M6WzgyMDhdfX19fX19fX19fX19fSwxMDU6e2w6ezk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzIzN119fSxjOlsyMzddfX19fX19fX19LDk5OntsOns1OTp7YzpbODI5MV19LDEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzIzOF19fSxjOlsyMzhdfX19fX0sMTIxOntsOns1OTp7YzpbMTA4MF19fX19fSwxMDE6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDc3XX19fX19LDEyMDp7bDp7OTk6e2w6ezEwODp7bDp7NTk6e2M6WzE2MV19fSxjOlsxNjFdfX19fX19fSwxMDI6e2w6ezEwMjp7bDp7NTk6e2M6Wzg2NjBdfX19LDExNDp7bDp7NTk6e2M6WzEyMDEwMl19fX19fSwxMDM6e2w6ezExNDp7bDp7OTc6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbMjM2XX19LGM6WzIzNl19fX19fX19fX0sMTA1OntsOns1OTp7YzpbODUyMF19LDEwNTp7bDp7MTA1OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6WzEwNzY0XX19fX19fX0sMTEwOntsOnsxMTY6e2w6ezU5OntjOls4NzQ5XX19fX19fX0sMTEwOntsOnsxMDI6e2w6ezEwNTp7bDp7MTEwOntsOns1OTp7YzpbMTA3MTZdfX19fX19fX19LDExMTp7bDp7MTE2OntsOns5Nzp7bDp7NTk6e2M6Wzg0ODldfX19fX19fX19LDEwNjp7bDp7MTA4OntsOnsxMDU6e2w6ezEwMzp7bDp7NTk6e2M6WzMwN119fX19fX19fX0sMTA5OntsOns5Nzp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzI5OV19fX19fSwxMDM6e2w6ezEwMTp7bDp7NTk6e2M6Wzg0NjVdfX19LDEwODp7bDp7MTA1OntsOnsxMTA6e2w6ezEwMTp7bDp7NTk6e2M6Wzg0NjRdfX19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7MTE2OntsOns1OTp7YzpbODQ2NV19fX19fX19fX19fSwxMTY6e2w6ezEwNDp7bDp7NTk6e2M6WzMwNV19fX19fX19LDExMTp7bDp7MTAyOntsOns1OTp7YzpbODg4N119fX19fSwxMTI6e2w6ezEwMTp7bDp7MTAwOntsOns1OTp7YzpbNDM3XX19fX19fX19fSwxMTA6e2w6ezU5OntjOls4NzEyXX0sOTk6e2w6ezk3OntsOnsxMTQ6e2w6ezEwMTp7bDp7NTk6e2M6Wzg0NTNdfX19fX19fX19LDEwMjp7bDp7MTA1OntsOnsxMTA6e2w6ezU5OntjOls4NzM0XX0sMTE2OntsOnsxMDU6e2w6ezEwMTp7bDp7NTk6e2M6WzEwNzE3XX19fX19fX19fX19fX0sMTExOntsOnsxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMzA1XX19fX19fX19fSwxMTY6e2w6ezU5OntjOls4NzQ3XX0sOTk6e2w6ezk3OntsOnsxMDg6e2w6ezU5OntjOls4ODkwXX19fX19fX0sMTAxOntsOnsxMDM6e2w6ezEwMTp7bDp7MTE0OntsOnsxMTU6e2w6ezU5OntjOls4NDg0XX19fX19fX19fSwxMTQ6e2w6ezk5OntsOns5Nzp7bDp7MTA4OntsOns1OTp7YzpbODg5MF19fX19fX19fX19fSwxMDg6e2w6ezk3OntsOnsxMTQ6e2w6ezEwNDp7bDp7MTA3OntsOns1OTp7YzpbMTA3NzVdfX19fX19fX19fX0sMTEyOntsOnsxMTQ6e2w6ezExMTp7bDp7MTAwOntsOns1OTp7YzpbMTA4MTJdfX19fX19fX19fX19fSwxMTE6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMTA1XX19fX19LDEwMzp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlszMDNdfX19fX19fSwxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE1NF19fX19fSwxMTY6e2w6ezk3OntsOns1OTp7YzpbOTUzXX19fX19fX0sMTEyOntsOnsxMTQ6e2w6ezExMTp7bDp7MTAwOntsOns1OTp7YzpbMTA4MTJdfX19fX19fX19LDExMzp7bDp7MTE3OntsOnsxMDE6e2w6ezExNTp7bDp7MTE2OntsOns1OTp7YzpbMTkxXX19LGM6WzE5MV19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTE5OTk4XX19fX19LDEwNTp7bDp7MTEwOntsOns1OTp7YzpbODcxMl19LDY5OntsOns1OTp7YzpbODk1M119fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5NDldfX19fX19fSwxMTU6e2w6ezU5OntjOls4OTQ4XX0sMTE4OntsOns1OTp7YzpbODk0N119fX19fSwxMTg6e2w6ezU5OntjOls4NzEyXX19fX19fX19fSwxMTY6e2w6ezU5OntjOls4MjkwXX0sMTA1OntsOnsxMDg6e2w6ezEwMDp7bDp7MTAxOntsOns1OTp7YzpbMjk3XX19fX19fX19fX19LDExNzp7bDp7MTA3OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTExMF19fX19fX19LDEwOTp7bDp7MTA4OntsOns1OTp7YzpbMjM5XX19LGM6WzIzOV19fX19fX19LDEwNjp7bDp7OTk6e2w6ezEwNTp7bDp7MTE0OntsOns5OTp7bDp7NTk6e2M6WzMwOV19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwODFdfX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMDNdfX19fX0sMTA5OntsOns5Nzp7bDp7MTE2OntsOnsxMDQ6e2w6ezU5OntjOls1NjddfX19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNTVdfX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMTk5OTldfX19fX0sMTAxOntsOnsxMTQ6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMTEyXX19fX19fX19fX19LDExNzp7bDp7MTA3OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTEwOF19fX19fX19fX19fSwxMDc6e2w6ezk3OntsOnsxMTI6e2w6ezExMjp7bDp7OTc6e2w6ezU5OntjOls5NTRdfSwxMTg6e2w6ezU5OntjOlsxMDA4XX19fX19fX19fX19LDk5OntsOnsxMDE6e2w6ezEwMDp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOlszMTFdfX19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwODJdfX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMDRdfX19fX0sMTAzOntsOnsxMTQ6e2w6ezEwMTp7bDp7MTAxOntsOnsxMTA6e2w6ezU5OntjOlszMTJdfX19fX19fX19fX0sMTA0OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA5M119fX19fX19LDEwNjp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzExMTZdfX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTU2XX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDAwXX19fX19fX19fSwxMDg6e2w6ezY1OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjY2XX19fX19fX0sMTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjU2XX19fX19LDExNjp7bDp7OTc6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMTA1MjNdfX19fX19fX19fX0sNjY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTEwXX19fX19fX19fSw2OTp7bDp7NTk6e2M6Wzg4MDZdfSwxMDM6e2w6ezU5OntjOlsxMDg5MV19fX19fSw3Mjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTk0XX19fX19fX0sOTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMzE0XX19fX19fX19fSwxMDE6e2w6ezEwOTp7bDp7MTEyOntsOnsxMTY6e2w6ezEyMTp7bDp7MTE4OntsOns1OTp7YzpbMTA2NzZdfX19fX19fX19fX19fSwxMDM6e2w6ezExNDp7bDp7OTc6e2w6ezExMDp7bDp7NTk6e2M6Wzg0NjZdfX19fX19fX19LDEwOTp7bDp7OTg6e2w6ezEwMDp7bDp7OTc6e2w6ezU5OntjOls5NTVdfX19fX19fX19LDExMDp7bDp7MTAzOntsOns1OTp7YzpbMTAyMTZdfSwxMDA6e2w6ezU5OntjOlsxMDY0MV19fX0sMTA4OntsOnsxMDE6e2w6ezU5OntjOlsxMDIxNl19fX19fX19fX0sMTEyOntsOns1OTp7YzpbMTA4ODVdfX19LDExMzp7bDp7MTE3OntsOnsxMTE6e2w6ezU5OntjOlsxNzFdfX0sYzpbMTcxXX19fX19LDExNDp7bDp7MTE0OntsOns1OTp7YzpbODU5Ml19LDk4OntsOns1OTp7YzpbODY3Nl19LDEwMjp7bDp7MTE1OntsOns1OTp7YzpbMTA1MjddfX19fX19fSwxMDI6e2w6ezExNTp7bDp7NTk6e2M6WzEwNTI1XX19fX19LDEwNDp7bDp7MTA3OntsOns1OTp7YzpbODYxN119fX19fSwxMDg6e2w6ezExMjp7bDp7NTk6e2M6Wzg2MTldfX19fX0sMTEyOntsOnsxMDg6e2w6ezU5OntjOlsxMDU1M119fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbMTA2MTFdfX19fX19fSwxMTY6e2w6ezEwODp7bDp7NTk6e2M6Wzg2MTBdfX19fX19fX19LDExNjp7bDp7NTk6e2M6WzEwOTIzXX0sOTc6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMTA1MjFdfX19fX19fSwxMDE6e2w6ezU5OntjOlsxMDkyNV19LDExNTp7bDp7NTk6e2M6WzEwOTI1LDY1MDI0XX19fX19fX19fSw5ODp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbMTA1MDhdfX19fX19fSw5ODp7bDp7MTE0OntsOnsxMDc6e2w6ezU5OntjOlsxMDA5OF19fX19fX19LDExNDp7bDp7OTc6e2w6ezk5OntsOnsxMDE6e2w6ezU5OntjOlsxMjNdfX19LDEwNzp7bDp7NTk6e2M6WzkxXX19fX19fX0sMTA3OntsOnsxMDE6e2w6ezU5OntjOlsxMDYzNV19fX0sMTE1OntsOnsxMDg6e2w6ezEwMDp7bDp7NTk6e2M6WzEwNjM5XX19fSwxMTc6e2w6ezU5OntjOlsxMDYzN119fX19fX19fX19fX19LDk5OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzMxOF19fX19fX19fX0sMTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMzE2XX19fX19fX0sMTA1OntsOnsxMDg6e2w6ezU5OntjOls4OTY4XX19fX19fX0sMTE3OntsOns5ODp7bDp7NTk6e2M6WzEyM119fX19fSwxMjE6e2w6ezU5OntjOlsxMDgzXX19fX19LDEwMDp7bDp7OTk6e2w6ezk3OntsOns1OTp7YzpbMTA1NTBdfX19fX0sMTEzOntsOnsxMTc6e2w6ezExMTp7bDp7NTk6e2M6WzgyMjBdfSwxMTQ6e2w6ezU5OntjOls4MjIyXX19fX19fX19fSwxMTQ6e2w6ezEwMDp7bDp7MTA0OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1OTldfX19fX19fX19LDExNzp7bDp7MTE1OntsOnsxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU3MV19fX19fX19fX19fX19LDExNTp7bDp7MTA0OntsOns1OTp7YzpbODYyNl19fX19fX19LDEwMTp7bDp7NTk6e2M6Wzg4MDRdfSwxMDI6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTJdfSwxMTY6e2w6ezk3OntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6Wzg2MTBdfX19fX19fX19fX19fX19fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExMjp7bDp7MTExOntsOnsxMTE6e2w6ezExMDp7bDp7MTAwOntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns1OTp7YzpbODYzN119fX19fX19fX0sMTE3OntsOnsxMTI6e2w6ezU5OntjOls4NjM2XX19fX19fX19fX19fX19fX19fX0sMTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOnsxMTU6e2w6ezU5OntjOls4NjQ3XX19fX19fX19fX19fX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTZdfSwxMTU6e2w6ezU5OntjOls4NjQ2XX19fX19fX19fX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOnsxMTI6e2w6ezExMTp7bDp7MTExOntsOnsxMTA6e2w6ezExNTp7bDp7NTk6e2M6Wzg2NTFdfX19fX19fX19fX19fX19fX0sMTE1OntsOnsxMTM6e2w6ezExNzp7bDp7MTA1OntsOnsxMDM6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjIxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE2OntsOnsxMDQ6e2w6ezExNDp7bDp7MTAxOntsOnsxMDE6e2w6ezExNjp7bDp7MTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbODkwN119fX19fX19fX19fX19fX19fX19fX19fX19LDEwMzp7bDp7NTk6e2M6Wzg5MjJdfX19LDExMzp7bDp7NTk6e2M6Wzg4MDRdfSwxMTM6e2w6ezU5OntjOls4ODA2XX19fSwxMTU6e2w6ezEwODp7bDp7OTc6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA4NzddfX19fX19fX19fX19fSwxMTU6e2w6ezU5OntjOlsxMDg3N119LDk5OntsOns5OTp7bDp7NTk6e2M6WzEwOTIwXX19fX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDg3OV19LDExMTp7bDp7NTk6e2M6WzEwODgxXX0sMTE0OntsOns1OTp7YzpbMTA4ODNdfX19fX19fX19fX0sMTAzOntsOns1OTp7YzpbODkyMiw2NTAyNF19LDEwMTp7bDp7MTE1OntsOns1OTp7YzpbMTA4OTldfX19fX19fSwxMTU6e2w6ezk3OntsOnsxMTI6e2w6ezExMjp7bDp7MTE0OntsOnsxMTE6e2w6ezEyMDp7bDp7NTk6e2M6WzEwODg1XX19fX19fX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5MThdfX19fX19fSwxMDE6e2w6ezExMzp7bDp7MTAzOntsOnsxMTY6e2w6ezExNDp7bDp7NTk6e2M6Wzg5MjJdfX19fX19fSwxMTM6e2w6ezEwMzp7bDp7MTE2OntsOnsxMTQ6e2w6ezU5OntjOlsxMDg5MV19fX19fX19fX19fX19LDEwMzp7bDp7MTE2OntsOnsxMTQ6e2w6ezU5OntjOls4ODIyXX19fX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg4MThdfX19fX19fX19fX19fSwxMDI6e2w6ezEwNTp7bDp7MTE1OntsOnsxMDQ6e2w6ezExNjp7bDp7NTk6e2M6WzEwNjIwXX19fX19fX19fSwxMDg6e2w6ezExMTp7bDp7MTExOntsOnsxMTQ6e2w6ezU5OntjOls4OTcwXX19fX19fX19fSwxMTQ6e2w6ezU5OntjOlsxMjAxMDVdfX19fX0sMTAzOntsOns1OTp7YzpbODgyMl19LDY5OntsOns1OTp7YzpbMTA4OTddfX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOnsxMDA6e2w6ezU5OntjOls4NjM3XX19fSwxMTc6e2w6ezU5OntjOls4NjM2XX0sMTA4OntsOns1OTp7YzpbMTA2MDJdfX19fX19fX19LDk4OntsOnsxMDg6e2w6ezEwNzp7bDp7NTk6e2M6Wzk2MDRdfX19fX19fX19LDEwNjp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzExMTNdfX19fX19fSwxMDg6e2w6ezU5OntjOls4ODEwXX0sOTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY0N119fX19fX19LDk5OntsOnsxMTE6e2w6ezExNDp7bDp7MTEwOntsOnsxMDE6e2w6ezExNDp7bDp7NTk6e2M6Wzg5OTBdfX19fX19fX19fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezEwMDp7bDp7NTk6e2M6WzEwNjAzXX19fX19fX19fSwxMTY6e2w6ezExNDp7bDp7MTA1OntsOns1OTp7YzpbOTcyMl19fX19fX19fX0sMTA5OntsOnsxMDU6e2w6ezEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlszMjBdfX19fX19fX19LDExMTp7bDp7MTE3OntsOnsxMTU6e2w6ezExNjp7bDp7NTk6e2M6WzkxMzZdfSw5Nzp7bDp7OTk6e2w6ezEwNDp7bDp7MTAxOntsOns1OTp7YzpbOTEzNl19fX19fX19fX19fX19fX19fX19LDExMDp7bDp7Njk6e2w6ezU5OntjOls4ODA4XX19fSw5Nzp7bDp7MTEyOntsOns1OTp7YzpbMTA4ODldfSwxMTI6e2w6ezExNDp7bDp7MTExOntsOnsxMjA6e2w6ezU5OntjOlsxMDg4OV19fX19fX19fX19fX19LDEwMTp7bDp7NTk6e2M6WzEwODg3XX0sMTEzOntsOns1OTp7YzpbMTA4ODddfSwxMTM6e2w6ezU5OntjOls4ODA4XX19fX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg5MzRdfX19fX19fX19LDExMTp7bDp7OTc6e2w6ezExMDp7bDp7MTAzOntsOns1OTp7YzpbMTAyMjBdfX19fX0sMTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NzAxXX19fX19fX0sOTg6e2w6ezExNDp7bDp7MTA3OntsOns1OTp7YzpbMTAyMTRdfX19fX19fSwxMTA6e2w6ezEwMzp7bDp7MTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTAyMjldfX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOlsxMDIzMV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMDk6e2w6ezk3OntsOnsxMTI6e2w6ezExNTp7bDp7MTE2OntsOnsxMTE6e2w6ezU5OntjOlsxMDIzNl19fX19fX19fX19fX19LDExNDp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbMTAyMzBdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7MTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns1OTp7YzpbODYxOV19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOls4NjIwXX19fX19fX19fX19fX19fX19fX19fX19fX0sMTEyOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA2MjldfX19fX0sMTAyOntsOns1OTp7YzpbMTIwMTU3XX19fSwxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbMTA3OTddfX19fX19fX19LDExNjp7bDp7MTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbMTA4MDRdfX19fX19fX19fX0sMTE5OntsOns5Nzp7bDp7MTE1OntsOnsxMTY6e2w6ezU5OntjOls4NzI3XX19fX19fX0sOTg6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOls5NV19fX19fX19fX0sMTIyOntsOns1OTp7YzpbOTY3NF19LDEwMTp7bDp7MTEwOntsOnsxMDM6e2w6ezEwMTp7bDp7NTk6e2M6Wzk2NzRdfX19fX19fX19LDEwMjp7bDp7NTk6e2M6WzEwNzMxXX19fX19fX0sMTEyOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbNDBdfSwxMDg6e2w6ezExNjp7bDp7NTk6e2M6WzEwNjQzXX19fX19fX19fX19LDExNDp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY0Nl19fX19fX19LDk5OntsOnsxMTE6e2w6ezExNDp7bDp7MTEwOntsOnsxMDE6e2w6ezExNDp7bDp7NTk6e2M6Wzg5OTFdfX19fX19fX19fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOls4NjUxXX0sMTAwOntsOns1OTp7YzpbMTA2MDVdfX19fX19fX19LDEwOTp7bDp7NTk6e2M6WzgyMDZdfX19LDExNjp7bDp7MTE0OntsOnsxMDU6e2w6ezU5OntjOls4ODk1XX19fX19fX19fSwxMTU6e2w6ezk3OntsOnsxMTM6e2w6ezExNzp7bDp7MTExOntsOns1OTp7YzpbODI0OV19fX19fX19fX0sOTk6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDAwMV19fX19fSwxMDQ6e2w6ezU5OntjOls4NjI0XX19fSwxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg4MThdfSwxMDE6e2w6ezU5OntjOlsxMDg5M119fX0sMTAzOntsOns1OTp7YzpbMTA4OTVdfX19fX19fSwxMTM6e2w6ezk4OntsOns1OTp7YzpbOTFdfX19LDExNzp7bDp7MTExOntsOns1OTp7YzpbODIxNl19LDExNDp7bDp7NTk6e2M6WzgyMThdfX19fX19fX19LDExNjp7bDp7MTE0OntsOnsxMTE6e2w6ezEwNzp7bDp7NTk6e2M6WzMyMl19fX19fX19fX19fSwxMTY6e2w6ezU5OntjOls2MF19LDk5OntsOns5OTp7bDp7NTk6e2M6WzEwOTE4XX19fSwxMDU6e2w6ezExNDp7bDp7NTk6e2M6WzEwODczXX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5MThdfX19fX19fSwxMDQ6e2w6ezExNDp7bDp7MTAxOntsOnsxMDE6e2w6ezU5OntjOls4OTA3XX19fX19fX19fSwxMDU6e2w6ezEwOTp7bDp7MTAxOntsOnsxMTU6e2w6ezU5OntjOls4OTA1XX19fX19fX19fSwxMDg6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjE0XX19fX19fX19fSwxMTM6e2w6ezExNzp7bDp7MTAxOntsOnsxMTU6e2w6ezExNjp7bDp7NTk6e2M6WzEwODc1XX19fX19fX19fX19LDExNDp7bDp7ODA6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDY0Nl19fX19fX19LDEwNTp7bDp7NTk6e2M6Wzk2NjddfSwxMDE6e2w6ezU5OntjOls4ODg0XX19fSwxMDI6e2w6ezU5OntjOls5NjY2XX19fX19fX19LGM6WzYwXX0sMTE3OntsOnsxMTQ6e2w6ezEwMDp7bDp7MTE1OntsOnsxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU3MF19fX19fX19fX19fSwxMTc6e2w6ezEwNDp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTk4XX19fX19fX19fX19fX0sMTE4OntsOnsxMDE6e2w6ezExNDp7bDp7MTE2OntsOnsxMTA6e2w6ezEwMTp7bDp7MTEzOntsOnsxMTM6e2w6ezU5OntjOls4ODA4LDY1MDI0XX19fX19fX19fX19fX19fSwxMTA6e2w6ezY5OntsOns1OTp7YzpbODgwOCw2NTAyNF19fX19fX19fX0sMTA5OntsOns2ODp7bDp7Njg6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODc2Ml19fX19fX19fX0sOTc6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxNzVdfX0sYzpbMTc1XX19fSwxMDg6e2w6ezEwMTp7bDp7NTk6e2M6Wzk3OTRdfX19LDExNjp7bDp7NTk6e2M6WzEwMDE2XX0sMTAxOntsOnsxMTU6e2w6ezEwMTp7bDp7NTk6e2M6WzEwMDE2XX19fX19fX19fX19LDExMjp7bDp7NTk6e2M6Wzg2MTRdfSwxMTU6e2w6ezExNjp7bDp7MTExOntsOns1OTp7YzpbODYxNF19LDEwMDp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7NTk6e2M6Wzg2MTVdfX19fX19fX19LDEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NTk6e2M6Wzg2MTJdfX19fX19fX19LDExNzp7bDp7MTEyOntsOns1OTp7YzpbODYxM119fX19fX19fX19fX19LDExNDp7bDp7MTA3OntsOnsxMDE6e2w6ezExNDp7bDp7NTk6e2M6Wzk2NDZdfX19fX19fX19fX0sOTk6e2w6ezExMTp7bDp7MTA5OntsOnsxMDk6e2w6ezk3OntsOns1OTp7YzpbMTA3OTNdfX19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwODRdfX19fX0sMTAwOntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4MjEyXX19fX19fX19fSwxMDE6e2w6ezk3OntsOnsxMTU6e2w6ezExNzp7bDp7MTE0OntsOnsxMDE6e2w6ezEwMDp7bDp7OTc6e2w6ezExMDp7bDp7MTAzOntsOnsxMDg6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3MzddfX19fX19fX19fX19fX19fX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDEwNl19fX19fSwxMDQ6e2w6ezExMTp7bDp7NTk6e2M6Wzg0ODddfX19fX0sMTA1OntsOns5OTp7bDp7MTE0OntsOnsxMTE6e2w6ezU5OntjOlsxODFdfX0sYzpbMTgxXX19fX19LDEwMDp7bDp7NTk6e2M6Wzg3MzldfSw5Nzp7bDp7MTE1OntsOnsxMTY6e2w6ezU5OntjOls0Ml19fX19fX19LDk5OntsOnsxMDU6e2w6ezExNDp7bDp7NTk6e2M6WzEwOTkyXX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzE4M119fSxjOlsxODNdfX19fX19fSwxMTA6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbODcyMl19LDk4OntsOns1OTp7YzpbODg2M119fX0sMTAwOntsOns1OTp7YzpbODc2MF19LDExNzp7bDp7NTk6e2M6WzEwNzk0XX19fX19fX19fX19fX0sMTA4OntsOns5OTp7bDp7MTEyOntsOns1OTp7YzpbMTA5NzFdfX19fX0sMTAwOntsOnsxMTQ6e2w6ezU5OntjOls4MjMwXX19fX19fX0sMTEwOntsOnsxMTI6e2w6ezEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOls4NzIzXX19fX19fX19fX19LDExMTp7bDp7MTAwOntsOnsxMDE6e2w6ezEwODp7bDp7MTE1OntsOns1OTp7YzpbODg3MV19fX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNThdfX19fX19fSwxMTI6e2w6ezU5OntjOls4NzIzXX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwMDJdfX19fX0sMTE2OntsOnsxMTI6e2w6ezExMTp7bDp7MTE1OntsOns1OTp7YzpbODc2Nl19fX19fX19fX19fSwxMTc6e2w6ezU5OntjOls5NTZdfSwxMDg6e2w6ezExNjp7bDp7MTA1OntsOnsxMDk6e2w6ezk3OntsOnsxMTI6e2w6ezU5OntjOls4ODg4XX19fX19fX19fX19fX0sMTA5OntsOns5Nzp7bDp7MTEyOntsOns1OTp7YzpbODg4OF19fX19fX19fX19fSwxMTA6e2w6ezcxOntsOnsxMDM6e2w6ezU5OntjOls4OTIxLDgyNF19fX0sMTE2OntsOns1OTp7YzpbODgxMSw4NDAyXX0sMTE4OntsOns1OTp7YzpbODgxMSw4MjRdfX19fX19fSw3Njp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2NTNdfX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjU0XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwxMDg6e2w6ezU5OntjOls4OTIwLDgyNF19fX0sMTE2OntsOns1OTp7YzpbODgxMCw4NDAyXX0sMTE4OntsOns1OTp7YzpbODgxMCw4MjRdfX19fX19fSw4Mjp7bDp7MTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODY1NV19fX19fX19fX19fX19fX19fX19fX0sODY6e2w6ezY4OntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4ODc5XX19fX19fX19fSwxMDA6e2w6ezk3OntsOnsxMTU6e2w6ezEwNDp7bDp7NTk6e2M6Wzg4NzhdfX19fX19fX19fX0sOTc6e2w6ezk4OntsOnsxMDg6e2w6ezk3OntsOns1OTp7YzpbODcxMV19fX19fX19LDk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMzI0XX19fX19fX19fSwxMTA6e2w6ezEwMzp7bDp7NTk6e2M6Wzg3MzYsODQwMl19fX19fSwxMTI6e2w6ezU5OntjOls4Nzc3XX0sNjk6e2w6ezU5OntjOlsxMDg2NCw4MjRdfX19LDEwNTp7bDp7MTAwOntsOns1OTp7YzpbODc3OSw4MjRdfX19fX0sMTExOntsOnsxMTU6e2w6ezU5OntjOlszMjldfX19fX0sMTEyOntsOnsxMTQ6e2w6ezExMTp7bDp7MTIwOntsOns1OTp7YzpbODc3N119fX19fX19fX19fSwxMTY6e2w6ezExNzp7bDp7MTE0OntsOns1OTp7YzpbOTgzOF19LDk3OntsOnsxMDg6e2w6ezU5OntjOls5ODM4XX0sMTE1OntsOns1OTp7YzpbODQ2OV19fX19fX19fX19fX19fX0sOTg6e2w6ezExNTp7bDp7MTEyOntsOns1OTp7YzpbMTYwXX19LGM6WzE2MF19fX0sMTE3OntsOnsxMDk6e2w6ezExMjp7bDp7NTk6e2M6Wzg3ODIsODI0XX0sMTAxOntsOns1OTp7YzpbODc4Myw4MjRdfX19fX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTI6e2w6ezU5OntjOlsxMDgxOV19fX0sMTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzMyOF19fX19fX19fX0sMTAxOntsOnsxMDA6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMzI2XX19fX19fX19fSwxMTE6e2w6ezExMDp7bDp7MTAzOntsOns1OTp7YzpbODc3NV19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDg2MSw4MjRdfX19fX19fX19fX19fSwxMTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwODE4XX19fX19LDEyMTp7bDp7NTk6e2M6WzEwODVdfX19fX0sMTAwOntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4MjExXX19fX19fX19fSwxMDE6e2w6ezU5OntjOls4ODAwXX0sNjU6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY2M119fX19fX19LDk3OntsOnsxMTQ6e2w6ezEwNDp7bDp7MTA3OntsOns1OTp7YzpbMTA1MzJdfX19fX0sMTE0OntsOns1OTp7YzpbODU5OV19LDExMTp7bDp7MTE5OntsOns1OTp7YzpbODU5OV19fX19fX19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODc4NCw4MjRdfX19fX19fSwxMTM6e2w6ezExNzp7bDp7MTA1OntsOnsxMTg6e2w6ezU5OntjOls4ODAyXX19fX19fX19fSwxMTU6e2w6ezEwMTp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTM2XX19fX19fX0sMTA1OntsOnsxMDk6e2w6ezU5OntjOls4NzcwLDgyNF19fX19fX19LDEyMDp7bDp7MTA1OntsOnsxMTU6e2w6ezExNjp7bDp7NTk6e2M6Wzg3MDhdfSwxMTU6e2w6ezU5OntjOls4NzA4XX19fX19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMDddfX19fX0sMTAzOntsOns2OTp7bDp7NTk6e2M6Wzg4MDcsODI0XX19fSwxMDE6e2w6ezU5OntjOls4ODE3XX0sMTEzOntsOns1OTp7YzpbODgxN119LDExMzp7bDp7NTk6e2M6Wzg4MDcsODI0XX19fSwxMTU6e2w6ezEwODp7bDp7OTc6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA4NzgsODI0XX19fX19fX19fX19fX0sMTE1OntsOns1OTp7YzpbMTA4NzgsODI0XX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4ODIxXX19fX19fX0sMTE2OntsOns1OTp7YzpbODgxNV19LDExNDp7bDp7NTk6e2M6Wzg4MTVdfX19fX19fSwxMDQ6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NTRdfX19fX19fSw5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjIyXX19fX19fX0sMTEyOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA5OTRdfX19fX19fX19LDEwNTp7bDp7NTk6e2M6Wzg3MTVdfSwxMTU6e2w6ezU5OntjOls4OTU2XX0sMTAwOntsOns1OTp7YzpbODk1NF19fX19fSwxMTg6e2w6ezU5OntjOls4NzE1XX19fX19LDEwNjp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzExMTRdfX19fX19fSwxMDg6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NTNdfX19fX19fSw2OTp7bDp7NTk6e2M6Wzg4MDYsODI0XX19fSw5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjAyXX19fX19fX0sMTAwOntsOnsxMTQ6e2w6ezU5OntjOls4MjI5XX19fX19LDEwMTp7bDp7NTk6e2M6Wzg4MTZdfSwxMDI6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MDJdfX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7MTExOntsOnsxMTk6e2w6ezU5OntjOls4NjIyXX19fX19fX19fX19fX19fX19fX19fX19fX0sMTEzOntsOns1OTp7YzpbODgxNl19LDExMzp7bDp7NTk6e2M6Wzg4MDYsODI0XX19fSwxMTU6e2w6ezEwODp7bDp7OTc6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA4NzcsODI0XX19fX19fX19fX19fX0sMTE1OntsOns1OTp7YzpbMTA4NzcsODI0XX0sMTE1OntsOns1OTp7YzpbODgxNF19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4ODIwXX19fX19fX0sMTE2OntsOns1OTp7YzpbODgxNF19LDExNDp7bDp7MTA1OntsOns1OTp7YzpbODkzOF19LDEwMTp7bDp7NTk6e2M6Wzg5NDBdfX19fX19fX19fX0sMTA5OntsOnsxMDU6e2w6ezEwMDp7bDp7NTk6e2M6Wzg3NDBdfX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTU5XX19fX19LDExNjp7bDp7NTk6e2M6WzE3Ml19LDEwNTp7bDp7MTEwOntsOns1OTp7YzpbODcxM119LDY5OntsOns1OTp7YzpbODk1Myw4MjRdfX19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOls4OTQ5LDgyNF19fX19fX19LDExODp7bDp7OTc6e2w6ezU5OntjOls4NzEzXX19fSw5ODp7bDp7NTk6e2M6Wzg5NTFdfX19LDk5OntsOns1OTp7YzpbODk1MF19fX19fX19fX0sMTEwOntsOnsxMDU6e2w6ezU5OntjOls4NzE2XX0sMTE4OntsOns5Nzp7bDp7NTk6e2M6Wzg3MTZdfX19LDk4OntsOns1OTp7YzpbODk1OF19fX0sOTk6e2w6ezU5OntjOls4OTU3XX19fX19fX19fX0sYzpbMTcyXX19fSwxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOls4NzQyXX0sOTc6e2w6ezEwODp7bDp7MTA4OntsOnsxMDE6e2w6ezEwODp7bDp7NTk6e2M6Wzg3NDJdfX19fX19fX19fX0sMTE1OntsOnsxMDg6e2w6ezU5OntjOlsxMTAwNSw4NDIxXX19fX19LDExNjp7bDp7NTk6e2M6Wzg3MDYsODI0XX19fX19fX0sMTExOntsOnsxMDg6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOlsxMDc3Ml19fX19fX19fX19fSwxMTQ6e2w6ezU5OntjOls4ODMyXX0sOTk6e2w6ezExNzp7bDp7MTAxOntsOns1OTp7YzpbODkyOF19fX19fX19LDEwMTp7bDp7NTk6e2M6WzEwOTI3LDgyNF19LDk5OntsOns1OTp7YzpbODgzMl19LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbMTA5MjcsODI0XX19fX19fX19fX19fX0sMTE0OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjU1XX19fX19fX0sOTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODYwM119LDk5OntsOns1OTp7YzpbMTA1NDcsODI0XX19fSwxMTk6e2w6ezU5OntjOls4NjA1LDgyNF19fX19fX19fX0sMTA1OntsOnsxMDM6e2w6ezEwNDp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODYwM119fX19fX19fX19fX19fX19fX19LDExNjp7bDp7MTE0OntsOnsxMDU6e2w6ezU5OntjOls4OTM5XX0sMTAxOntsOns1OTp7YzpbODk0MV19fX19fX19fX19fSwxMTU6e2w6ezk5OntsOns1OTp7YzpbODgzM119LDk5OntsOnsxMTc6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5MjldfX19fX19fSwxMDE6e2w6ezU5OntjOlsxMDkyOCw4MjRdfX19LDExNDp7bDp7NTk6e2M6WzEyMDAwM119fX19fSwxMDQ6e2w6ezExMTp7bDp7MTE0OntsOnsxMTY6e2w6ezEwOTp7bDp7MTA1OntsOnsxMDA6e2w6ezU5OntjOls4NzQwXX19fX19fX0sMTEyOntsOns5Nzp7bDp7MTE0OntsOns5Nzp7bDp7MTA4OntsOnsxMDg6e2w6ezEwMTp7bDp7MTA4OntsOns1OTp7YzpbODc0Ml19fX19fX19fX19fX19fX19fX19fX19fX19LDEwNTp7bDp7MTA5OntsOns1OTp7YzpbODc2OV19LDEwMTp7bDp7NTk6e2M6Wzg3NzJdfSwxMTM6e2w6ezU5OntjOls4NzcyXX19fX19fX19fSwxMDk6e2w6ezEwNTp7bDp7MTAwOntsOns1OTp7YzpbODc0MF19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6Wzg3NDJdfX19fX19fSwxMTM6e2w6ezExNTp7bDp7MTE3OntsOns5ODp7bDp7MTAxOntsOns1OTp7YzpbODkzMF19fX19fSwxMTI6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5MzFdfX19fX19fX19fX0sMTE3OntsOns5ODp7bDp7NTk6e2M6Wzg4MzZdfSw2OTp7bDp7NTk6e2M6WzEwOTQ5LDgyNF19fX0sMTAxOntsOns1OTp7YzpbODg0MF19fX0sMTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg4MzQsODQwMl19LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbODg0MF19LDExMzp7bDp7NTk6e2M6WzEwOTQ5LDgyNF19fX19fX19fX19fX19fX0sOTk6e2w6ezk5OntsOns1OTp7YzpbODgzM119LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbMTA5MjgsODI0XX19fX19fX19fSwxMTI6e2w6ezU5OntjOls4ODM3XX0sNjk6e2w6ezU5OntjOlsxMDk1MCw4MjRdfX19LDEwMTp7bDp7NTk6e2M6Wzg4NDFdfX19LDExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4ODM1LDg0MDJdfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg4NDFdfSwxMTM6e2w6ezU5OntjOlsxMDk1MCw4MjRdfX19fX19fX19fX19fX19fX19fSwxMTY6e2w6ezEwMzp7bDp7MTA4OntsOns1OTp7YzpbODgyNV19fX19fSwxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOlsyNDFdfX0sYzpbMjQxXX19fX19fX0sMTA4OntsOnsxMDM6e2w6ezU5OntjOls4ODI0XX19fX19LDExNDp7bDp7MTA1OntsOns5Nzp7bDp7MTEwOntsOnsxMDM6e2w6ezEwODp7bDp7MTAxOntsOnsxMDg6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezU5OntjOls4OTM4XX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4OTQwXX19fX19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOls4OTM5XX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4OTQxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE3OntsOns1OTp7YzpbOTU3XX0sMTA5OntsOns1OTp7YzpbMzVdfSwxMDE6e2w6ezExNDp7bDp7MTExOntsOns1OTp7YzpbODQ3MF19fX19fX19LDExNTp7bDp7MTEyOntsOns1OTp7YzpbODE5OV19fX19fX19fX0sMTE4OntsOns2ODp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODg3N119fX19fX19fX0sNzI6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTAwXX19fX19fX19fSw5Nzp7bDp7MTEyOntsOns1OTp7YzpbODc4MSw4NDAyXX19fX19LDEwMDp7bDp7OTc6e2w6ezExNTp7bDp7MTA0OntsOns1OTp7YzpbODg3Nl19fX19fX19fX0sMTAzOntsOnsxMDE6e2w6ezU5OntjOls4ODA1LDg0MDJdfX19LDExNjp7bDp7NTk6e2M6WzYyLDg0MDJdfX19fX0sMTA1OntsOnsxMTA6e2w6ezEwMjp7bDp7MTA1OntsOnsxMTA6e2w6ezU5OntjOlsxMDcxOF19fX19fX19fX19fSwxMDg6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNDk4XX19fX19fX0sMTAxOntsOns1OTp7YzpbODgwNCw4NDAyXX19fSwxMTY6e2w6ezU5OntjOls2MCw4NDAyXX0sMTE0OntsOnsxMDU6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4ODQsODQwMl19fX19fX19fX19fSwxMTQ6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNDk5XX19fX19fX0sMTE2OntsOnsxMTQ6e2w6ezEwNTp7bDp7MTAxOntsOns1OTp7YzpbODg4NSw4NDAyXX19fX19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4NzY0LDg0MDJdfX19fX19fX19LDExOTp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY2Ml19fX19fX19LDk3OntsOnsxMTQ6e2w6ezEwNDp7bDp7MTA3OntsOns1OTp7YzpbMTA1MzFdfX19fX0sMTE0OntsOns1OTp7YzpbODU5OF19LDExMTp7bDp7MTE5OntsOns1OTp7YzpbODU5OF19fX19fX19fX19fSwxMTA6e2w6ezEwMTp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTM1XX19fX19fX19fX19fX0sMTExOntsOns4Mzp7bDp7NTk6e2M6Wzk0MTZdfX19LDk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzI0M119fSxjOlsyNDNdfX19fX19fSwxMTU6e2w6ezExNjp7bDp7NTk6e2M6Wzg4NTldfX19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezU5OntjOls4ODU4XX0sOTk6e2w6ezU5OntjOlsyNDRdfX0sYzpbMjQ0XX19fX19LDEyMTp7bDp7NTk6e2M6WzEwODZdfX19fX0sMTAwOntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4ODYxXX19fX19fX0sOTg6e2w6ezEwODp7bDp7OTc6e2w6ezk5OntsOns1OTp7YzpbMzM3XX19fX19fX19fSwxMDU6e2w6ezExODp7bDp7NTk6e2M6WzEwODA4XX19fX19LDExMTp7bDp7MTE2OntsOns1OTp7YzpbODg1N119fX19fSwxMTU6e2w6ezExMTp7bDp7MTA4OntsOnsxMDA6e2w6ezU5OntjOlsxMDY4NF19fX19fX19fX19fSwxMDE6e2w6ezEwODp7bDp7MTA1OntsOnsxMDM6e2w6ezU5OntjOlszMzldfX19fX19fX19LDEwMjp7bDp7OTk6e2w6ezEwNTp7bDp7MTE0OntsOns1OTp7YzpbMTA2ODddfX19fX19fSwxMTQ6e2w6ezU5OntjOlsxMjAxMDhdfX19fX0sMTAzOntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzczMV19fX19fSwxMTQ6e2w6ezk3OntsOnsxMTg6e2w6ezEwMTp7bDp7NTk6e2M6WzI0Ml19fSxjOlsyNDJdfX19fX19fSwxMTY6e2w6ezU5OntjOlsxMDY4OV19fX19fSwxMDQ6e2w6ezk4OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA2NzddfX19fX19fSwxMDk6e2w6ezU5OntjOls5MzddfX19fX0sMTA1OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6Wzg3NTBdfX19fX19fSwxMDg6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2MzRdfX19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezU5OntjOlsxMDY4Nl19fX19fSwxMTQ6e2w6ezExMTp7bDp7MTE1OntsOnsxMTU6e2w6ezU5OntjOlsxMDY4M119fX19fX19fX19fSwxMDU6e2w6ezExMDp7bDp7MTAxOntsOns1OTp7YzpbODI1NF19fX19fX19LDExNjp7bDp7NTk6e2M6WzEwNjg4XX19fX19LDEwOTp7bDp7OTc6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlszMzNdfX19fX19fSwxMDE6e2w6ezEwMzp7bDp7OTc6e2w6ezU5OntjOls5NjldfX19fX19fSwxMDU6e2w6ezk5OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbOTU5XX19fX19fX19fSwxMDA6e2w6ezU5OntjOlsxMDY3OF19fX0sMTEwOntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6Wzg4NTRdfX19fX19fX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE2MF19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjc5XX19fX19LDEwMTp7bDp7MTE0OntsOnsxMTI6e2w6ezU5OntjOlsxMDY4MV19fX19fX19LDEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOls4ODUzXX19fX19fX19fSwxMTQ6e2w6ezU5OntjOls4NzQ0XX0sOTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODYzNV19fX19fX19LDEwMDp7bDp7NTk6e2M6WzEwODQ1XX0sMTAxOntsOnsxMTQ6e2w6ezU5OntjOls4NTAwXX0sMTExOntsOnsxMDI6e2w6ezU5OntjOls4NTAwXX19fX19fX19fSwxMDI6e2w6ezU5OntjOlsxNzBdfX0sYzpbMTcwXX0sMTA5OntsOns1OTp7YzpbMTg2XX19LGM6WzE4Nl19fX0sMTA1OntsOnsxMDM6e2w6ezExMTp7bDp7MTAyOntsOns1OTp7YzpbODg4Nl19fX19fX19fX0sMTExOntsOnsxMTQ6e2w6ezU5OntjOlsxMDgzOF19fX19fSwxMTU6e2w6ezEwODp7bDp7MTExOntsOnsxMTI6e2w6ezEwMTp7bDp7NTk6e2M6WzEwODM5XX19fX19fX19fX19LDExODp7bDp7NTk6e2M6WzEwODQzXX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6Wzg1MDBdfX19fX0sMTA4OntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOlsyNDhdfX0sYzpbMjQ4XX19fX19fX0sMTExOntsOnsxMDg6e2w6ezU5OntjOls4ODU2XX19fX19fX0sMTE2OntsOnsxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOlsyNDVdfX0sYzpbMjQ1XX19fX19LDEwOTp7bDp7MTAxOntsOnsxMTU6e2w6ezU5OntjOls4ODU1XX0sOTc6e2w6ezExNTp7bDp7NTk6e2M6WzEwODA2XX19fX19fX19fX19fX19fSwxMTc6e2w6ezEwOTp7bDp7MTA4OntsOns1OTp7YzpbMjQ2XX19LGM6WzI0Nl19fX19fSwxMTg6e2w6ezk4OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbOTAyMV19fX19fX19fX19fSwxMTI6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOls4NzQxXX0sOTc6e2w6ezU5OntjOlsxODJdfSwxMDg6e2w6ezEwODp7bDp7MTAxOntsOnsxMDg6e2w6ezU5OntjOls4NzQxXX19fX19fX19fX0sYzpbMTgyXX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6WzEwOTk1XX19fX19LDEwODp7bDp7NTk6e2M6WzExMDA1XX19fX19LDExNjp7bDp7NTk6e2M6Wzg3MDZdfX19fX19fSw5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA4N119fX19fSwxMDE6e2w6ezExNDp7bDp7OTk6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMzddfX19fX19fSwxMDU6e2w6ezExMTp7bDp7MTAwOntsOns1OTp7YzpbNDZdfX19fX19fSwxMDk6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbODI0MF19fX19fX19LDExMjp7bDp7NTk6e2M6Wzg4NjldfX19LDExNjp7bDp7MTAxOntsOnsxMTA6e2w6ezEwNzp7bDp7NTk6e2M6WzgyNDFdfX19fX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDEwOV19fX19fSwxMDQ6e2w6ezEwNTp7bDp7NTk6e2M6Wzk2Nl19LDExODp7bDp7NTk6e2M6Wzk4MV19fX19fSwxMDk6e2w6ezEwOTp7bDp7OTc6e2w6ezExNjp7bDp7NTk6e2M6Wzg0OTldfX19fX19fX19LDExMTp7bDp7MTEwOntsOnsxMDE6e2w6ezU5OntjOls5NzQyXX19fX19fX19fSwxMDU6e2w6ezU5OntjOls5NjBdfSwxMTY6e2w6ezk5OntsOnsxMDQ6e2w6ezEwMjp7bDp7MTExOntsOnsxMTQ6e2w6ezEwNzp7bDp7NTk6e2M6Wzg5MTZdfX19fX19fX19fX19fX19LDExODp7bDp7NTk6e2M6Wzk4Ml19fX19fSwxMDg6e2w6ezk3OntsOnsxMTA6e2w6ezk5OntsOnsxMDc6e2w6ezU5OntjOls4NDYzXX0sMTA0OntsOns1OTp7YzpbODQ2Ml19fX19fX19LDEwNzp7bDp7MTE4OntsOns1OTp7YzpbODQ2M119fX19fX19fX0sMTE3OntsOnsxMTU6e2w6ezU5OntjOls0M119LDk3OntsOns5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezU5OntjOlsxMDc4N119fX19fX19fX0sOTg6e2w6ezU5OntjOls4ODYyXX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezU5OntjOlsxMDc4Nl19fX19fX19LDEwMDp7bDp7MTExOntsOns1OTp7YzpbODcyNF19fX0sMTE3OntsOns1OTp7YzpbMTA3ODldfX19fX0sMTAxOntsOns1OTp7YzpbMTA4NjZdfX19LDEwOTp7bDp7MTEwOntsOns1OTp7YzpbMTc3XX19LGM6WzE3N119fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6WzEwNzkwXX19fX19fX0sMTE2OntsOnsxMTk6e2w6ezExMTp7bDp7NTk6e2M6WzEwNzkxXX19fX19fX19fX19fX0sMTA5OntsOns1OTp7YzpbMTc3XX19fSwxMTE6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOlsxMDc3M119fX19fX19fX19fX19LDExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTYxXX19fX19LDExNzp7bDp7MTEwOntsOnsxMDA6e2w6ezU5OntjOlsxNjNdfX0sYzpbMTYzXX19fX19fX0sMTE0OntsOns1OTp7YzpbODgyNl19LDY5OntsOns1OTp7YzpbMTA5MzFdfX19LDk3OntsOnsxMTI6e2w6ezU5OntjOlsxMDkzNV19fX19fSw5OTp7bDp7MTE3OntsOnsxMDE6e2w6ezU5OntjOls4ODI4XX19fX19fX0sMTAxOntsOns1OTp7YzpbMTA5MjddfSw5OTp7bDp7NTk6e2M6Wzg4MjZdfSw5Nzp7bDp7MTEyOntsOnsxMTI6e2w6ezExNDp7bDp7MTExOntsOnsxMjA6e2w6ezU5OntjOlsxMDkzNV19fX19fX19fX19fX19LDk5OntsOnsxMTc6e2w6ezExNDp7bDp7MTA4OntsOnsxMjE6e2w6ezEwMTp7bDp7MTEzOntsOns1OTp7YzpbODgyOF19fX19fX19fX19fX19fX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOlsxMDkyN119fX19fSwxMTA6e2w6ezk3OntsOnsxMTI6e2w6ezExMjp7bDp7MTE0OntsOnsxMTE6e2w6ezEyMDp7bDp7NTk6e2M6WzEwOTM3XX19fX19fX19fX19fX0sMTAxOntsOnsxMTM6e2w6ezExMzp7bDp7NTk6e2M6WzEwOTMzXX19fX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg5MzZdfX19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4ODMwXX19fX19fX19fX19LDEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezU5OntjOls4MjQyXX0sMTE1OntsOns1OTp7YzpbODQ3M119fX19fX19fX0sMTEwOntsOns2OTp7bDp7NTk6e2M6WzEwOTMzXX19fSw5Nzp7bDp7MTEyOntsOns1OTp7YzpbMTA5MzddfX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg5MzZdfX19fX19fX19LDExMTp7bDp7MTAwOntsOns1OTp7YzpbODcxOV19fX0sMTAyOntsOns5Nzp7bDp7MTA4OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbOTAwNl19fX19fX19fX0sMTA4OntsOnsxMDU6e2w6ezExMDp7bDp7MTAxOntsOns1OTp7YzpbODk3OF19fX19fX19fX0sMTE1OntsOnsxMTc6e2w6ezExNDp7bDp7MTAyOntsOns1OTp7YzpbODk3OV19fX19fX19fX19fSwxMTI6e2w6ezU5OntjOls4NzMzXX0sMTE2OntsOnsxMTE6e2w6ezU5OntjOls4NzMzXX19fX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODgzMF19fX19fX19LDExNzp7bDp7MTE0OntsOnsxMDE6e2w6ezEwODp7bDp7NTk6e2M6Wzg4ODBdfX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDA1XX19fX19LDEwNTp7bDp7NTk6e2M6Wzk2OF19fX19fSwxMTc6e2w6ezExMDp7bDp7OTk6e2w6ezExNTp7bDp7MTEyOntsOns1OTp7YzpbODIwMF19fX19fX19fX19fX19LDExMzp7bDp7MTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMTBdfX19fX0sMTA1OntsOnsxMTA6e2w6ezExNjp7bDp7NTk6e2M6WzEwNzY0XX19fX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE2Ml19fX19fX19LDExMjp7bDp7MTE0OntsOnsxMDU6e2w6ezEwOTp7bDp7MTAxOntsOns1OTp7YzpbODI3OV19fX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwMDZdfX19fX19fSwxMTc6e2w6ezk3OntsOnsxMTY6e2w6ezEwMTp7bDp7MTE0OntsOnsxMTA6e2w6ezEwNTp7bDp7MTExOntsOnsxMTA6e2w6ezExNTp7bDp7NTk6e2M6Wzg0NjFdfX19fX19fX19fX19fX19LDEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOlsxMDc3NF19fX19fX19fX19fSwxMDE6e2w6ezExNTp7bDp7MTE2OntsOns1OTp7YzpbNjNdfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg3OTldfX19fX19fX19fX0sMTExOntsOnsxMTY6e2w6ezU5OntjOlszNF19fSxjOlszNF19fX19fX19LDExNDp7bDp7NjU6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NjddfX19fX19fSwxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NThdfX19fX0sMTE2OntsOns5Nzp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOlsxMDUyNF19fX19fX19fX19fSw2Njp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbMTA1MTFdfX19fX19fX19LDcyOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTA1OTZdfX19fX19fSw5Nzp7bDp7OTk6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NjUsODE3XX19fSwxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMzQxXX19fX19fX19fSwxMDA6e2w6ezEwNTp7bDp7OTk6e2w6ezU5OntjOls4NzMwXX19fX19fX0sMTAxOntsOnsxMDk6e2w6ezExMjp7bDp7MTE2OntsOnsxMjE6e2w6ezExODp7bDp7NTk6e2M6WzEwNjc1XX19fX19fX19fX19fX0sMTEwOntsOnsxMDM6e2w6ezU5OntjOlsxMDIxN119LDEwMDp7bDp7NTk6e2M6WzEwNjQyXX19fSwxMDE6e2w6ezU5OntjOlsxMDY2MV19fX0sMTA4OntsOnsxMDE6e2w6ezU5OntjOlsxMDIxN119fX19fX19fX0sMTEzOntsOnsxMTc6e2w6ezExMTp7bDp7NTk6e2M6WzE4N119fSxjOlsxODddfX19fX0sMTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NTk0XX0sOTc6e2w6ezExMjp7bDp7NTk6e2M6WzEwNjEzXX19fX19LDk4OntsOns1OTp7YzpbODY3N119LDEwMjp7bDp7MTE1OntsOns1OTp7YzpbMTA1MjhdfX19fX19fSw5OTp7bDp7NTk6e2M6WzEwNTQ3XX19fSwxMDI6e2w6ezExNTp7bDp7NTk6e2M6WzEwNTI2XX19fX19LDEwNDp7bDp7MTA3OntsOns1OTp7YzpbODYxOF19fX19fSwxMDg6e2w6ezExMjp7bDp7NTk6e2M6Wzg2MjBdfX19fX0sMTEyOntsOnsxMDg6e2w6ezU5OntjOlsxMDU2NV19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbMTA2MTJdfX19fX19fSwxMTY6e2w6ezEwODp7bDp7NTk6e2M6Wzg2MTFdfX19fX0sMTE5OntsOns1OTp7YzpbODYwNV19fX19fX19LDExNjp7bDp7OTc6e2w6ezEwNTp7bDp7MTA4OntsOns1OTp7YzpbMTA1MjJdfX19fX19fSwxMDU6e2w6ezExMTp7bDp7NTk6e2M6Wzg3NThdfSwxMTA6e2w6ezk3OntsOnsxMDg6e2w6ezExNTp7bDp7NTk6e2M6Wzg0NzRdfX19fX19fX19fX19fX19fX0sOTg6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTA5XX19fX19fX0sOTg6e2w6ezExNDp7bDp7MTA3OntsOns1OTp7YzpbMTAwOTldfX19fX19fSwxMTQ6e2w6ezk3OntsOns5OTp7bDp7MTAxOntsOns1OTp7YzpbMTI1XX19fSwxMDc6e2w6ezU5OntjOls5M119fX19fX19LDEwNzp7bDp7MTAxOntsOns1OTp7YzpbMTA2MzZdfX19LDExNTp7bDp7MTA4OntsOnsxMDA6e2w6ezU5OntjOlsxMDYzOF19fX0sMTE3OntsOns1OTp7YzpbMTA2NDBdfX19fX19fX19fX19fSw5OTp7bDp7OTc6e2w6ezExNDp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlszNDVdfX19fX19fX19LDEwMTp7bDp7MTAwOntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzM0M119fX19fX19LDEwNTp7bDp7MTA4OntsOns1OTp7YzpbODk2OV19fX19fX19LDExNzp7bDp7OTg6e2w6ezU5OntjOlsxMjVdfX19fX0sMTIxOntsOns1OTp7YzpbMTA4OF19fX19fSwxMDA6e2w6ezk5OntsOns5Nzp7bDp7NTk6e2M6WzEwNTUxXX19fX19LDEwODp7bDp7MTAwOntsOnsxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDYwMV19fX19fX19fX19fSwxMTM6e2w6ezExNzp7bDp7MTExOntsOns1OTp7YzpbODIyMV19LDExNDp7bDp7NTk6e2M6WzgyMjFdfX19fX19fX19LDExNTp7bDp7MTA0OntsOns1OTp7YzpbODYyN119fX19fX19LDEwMTp7bDp7OTc6e2w6ezEwODp7bDp7NTk6e2M6Wzg0NzZdfSwxMDU6e2w6ezExMDp7bDp7MTAxOntsOns1OTp7YzpbODQ3NV19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7MTE2OntsOns1OTp7YzpbODQ3Nl19fX19fX19fX0sMTE1OntsOns1OTp7YzpbODQ3N119fX19fX19LDk5OntsOnsxMTY6e2w6ezU5OntjOls5NjQ1XX19fX19LDEwMzp7bDp7NTk6e2M6WzE3NF19fSxjOlsxNzRdfX19LDEwMjp7bDp7MTA1OntsOnsxMTU6e2w6ezEwNDp7bDp7MTE2OntsOns1OTp7YzpbMTA2MjFdfX19fX19fX19LDEwODp7bDp7MTExOntsOnsxMTE6e2w6ezExNDp7bDp7NTk6e2M6Wzg5NzFdfX19fX19fX19LDExNDp7bDp7NTk6e2M6WzEyMDExMV19fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezEwMDp7bDp7NTk6e2M6Wzg2NDFdfX19LDExNzp7bDp7NTk6e2M6Wzg2NDBdfSwxMDg6e2w6ezU5OntjOlsxMDYwNF19fX19fX19fX0sMTExOntsOns1OTp7YzpbOTYxXX0sMTE4OntsOns1OTp7YzpbMTAwOV19fX19fX19LDEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTRdfSwxMTY6e2w6ezk3OntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6Wzg2MTFdfX19fX19fX19fX19fX19fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExMjp7bDp7MTExOntsOnsxMTE6e2w6ezExMDp7bDp7MTAwOntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns1OTp7YzpbODY0MV19fX19fX19fX0sMTE3OntsOnsxMTI6e2w6ezU5OntjOls4NjQwXX19fX19fX19fX19fX19fX19fX0sMTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOnsxMTU6e2w6ezU5OntjOls4NjQ0XX19fX19fX19fX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOnsxMTI6e2w6ezExMTp7bDp7MTExOntsOnsxMTA6e2w6ezExNTp7bDp7NTk6e2M6Wzg2NTJdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7MTE1OntsOns1OTp7YzpbODY0OV19fX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezExMzp7bDp7MTE3OntsOnsxMDU6e2w6ezEwMzp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MDVdfX19fX19fX19fX19fX19fX19fX19LDExNjp7bDp7MTA0OntsOnsxMTQ6e2w6ezEwMTp7bDp7MTAxOntsOnsxMTY6e2w6ezEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6Wzg5MDhdfX19fX19fX19fX19fX19fX19fX19fX19fX19LDExMDp7bDp7MTAzOntsOns1OTp7YzpbNzMwXX19fX19LDExNTp7bDp7MTA1OntsOnsxMTA6e2w6ezEwMzp7bDp7MTAwOntsOnsxMTE6e2w6ezExNjp7bDp7MTE1OntsOnsxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg3ODddfX19fX19fX19fX19fX19fX19fX19fX0sMTA4OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjQ0XX19fX19fX0sMTA0OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbODY1Ml19fX19fX19LDEwOTp7bDp7NTk6e2M6WzgyMDddfX19fX0sMTA5OntsOnsxMTE6e2w6ezExNzp7bDp7MTE1OntsOnsxMTY6e2w6ezU5OntjOls5MTM3XX0sOTc6e2w6ezk5OntsOnsxMDQ6e2w6ezEwMTp7bDp7NTk6e2M6WzkxMzddfX19fX19fX19fX19fX19fX19fSwxMTA6e2w6ezEwOTp7bDp7MTA1OntsOnsxMDA6e2w6ezU5OntjOlsxMDk5MF19fX19fX19fX0sMTExOntsOns5Nzp7bDp7MTEwOntsOnsxMDM6e2w6ezU5OntjOlsxMDIyMV19fX19fSwxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg3MDJdfX19fX19fSw5ODp7bDp7MTE0OntsOnsxMDc6e2w6ezU5OntjOlsxMDIxNV19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjMwXX19fX19LDEwMjp7bDp7NTk6e2M6WzEyMDE2M119fX0sMTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6WzEwNzk4XX19fX19fX19fSwxMTY6e2w6ezEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezExNTp7bDp7NTk6e2M6WzEwODA1XX19fX19fX19fX19fX0sMTEyOntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbNDFdfSwxMDM6e2w6ezExNjp7bDp7NTk6e2M6WzEwNjQ0XX19fX19fX19fSwxMTI6e2w6ezExMTp7bDp7MTA4OntsOnsxMDU6e2w6ezExMDp7bDp7MTE2OntsOns1OTp7YzpbMTA3NzBdfX19fX19fX19fX19fX19LDExNDp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY0OV19fX19fX19fX0sMTE1OntsOns5Nzp7bDp7MTEzOntsOnsxMTc6e2w6ezExMTp7bDp7NTk6e2M6WzgyNTBdfX19fX19fX19LDk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwMDddfX19fX0sMTA0OntsOns1OTp7YzpbODYyNV19fX0sMTEzOntsOns5ODp7bDp7NTk6e2M6WzkzXX19fSwxMTc6e2w6ezExMTp7bDp7NTk6e2M6WzgyMTddfSwxMTQ6e2w6ezU5OntjOls4MjE3XX19fX19fX19fX19LDExNjp7bDp7MTA0OntsOnsxMTQ6e2w6ezEwMTp7bDp7MTAxOntsOns1OTp7YzpbODkwOF19fX19fX19fX0sMTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbODkwNl19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezU5OntjOls5NjU3XX0sMTAxOntsOns1OTp7YzpbODg4NV19fX0sMTAyOntsOns1OTp7YzpbOTY1Nl19fX0sMTA4OntsOnsxMTY6e2w6ezExNDp7bDp7MTA1OntsOns1OTp7YzpbMTA3MDJdfX19fX19fX19fX19fX19LDExNzp7bDp7MTA4OntsOnsxMTc6e2w6ezEwNDp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjAwXX19fX19fX19fX19fX0sMTIwOntsOns1OTp7YzpbODQ3OF19fX19fSwxMTU6e2w6ezk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzM0N119fX19fX19fX19fSw5ODp7bDp7MTEzOntsOnsxMTc6e2w6ezExMTp7bDp7NTk6e2M6WzgyMThdfX19fX19fX19LDk5OntsOns1OTp7YzpbODgyN119LDY5OntsOns1OTp7YzpbMTA5MzJdfX19LDk3OntsOnsxMTI6e2w6ezU5OntjOlsxMDkzNl19fX0sMTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzM1M119fX19fX19fX0sOTk6e2w6ezExNzp7bDp7MTAxOntsOns1OTp7YzpbODgyOV19fX19fX19LDEwMTp7bDp7NTk6e2M6WzEwOTI4XX0sMTAwOntsOnsxMDU6e2w6ezEwODp7bDp7NTk6e2M6WzM1MV19fX19fX19fX0sMTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMzQ5XX19fX19fX0sMTEwOntsOns2OTp7bDp7NTk6e2M6WzEwOTM0XX19fSw5Nzp7bDp7MTEyOntsOns1OTp7YzpbMTA5MzhdfX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg5MzddfX19fX19fX19LDExMjp7bDp7MTExOntsOnsxMDg6e2w6ezEwNTp7bDp7MTEwOntsOnsxMTY6e2w6ezU5OntjOlsxMDc3MV19fX19fX19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4ODMxXX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA4OV19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODkwMV19LDk4OntsOns1OTp7YzpbODg2NV19fX0sMTAxOntsOns1OTp7YzpbMTA4NTRdfX19fX19fX19LDEwMTp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY2NF19fX19fX19LDk3OntsOnsxMTQ6e2w6ezEwNDp7bDp7MTA3OntsOns1OTp7YzpbMTA1MzNdfX19fX0sMTE0OntsOns1OTp7YzpbODYwMF19LDExMTp7bDp7MTE5OntsOns1OTp7YzpbODYwMF19fX19fX19fX19fSw5OTp7bDp7MTE2OntsOns1OTp7YzpbMTY3XX19LGM6WzE2N119fX0sMTA5OntsOnsxMDU6e2w6ezU5OntjOls1OV19fX19fSwxMTU6e2w6ezExOTp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTM3XX19fX19fX19fSwxMTY6e2w6ezEwOTp7bDp7MTA1OntsOnsxMTA6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbODcyNl19fX19fX19fX0sMTEwOntsOns1OTp7YzpbODcyNl19fX19fX19LDEyMDp7bDp7MTE2OntsOns1OTp7YzpbMTAwMzhdfX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDExMl19LDExMTp7bDp7MTE5OntsOnsxMTA6e2w6ezU5OntjOls4OTk0XX19fX19fX19fX19LDEwNDp7bDp7OTc6e2w6ezExNDp7bDp7MTEyOntsOns1OTp7YzpbOTgzOV19fX19fX19LDk5OntsOnsxMDQ6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMDk3XX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA5Nl19fX19fSwxMTE6e2w6ezExNDp7bDp7MTE2OntsOnsxMDk6e2w6ezEwNTp7bDp7MTAwOntsOns1OTp7YzpbODczOV19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7OTc6e2w6ezEwODp7bDp7MTA4OntsOnsxMDE6e2w6ezEwODp7bDp7NTk6e2M6Wzg3NDFdfX19fX19fX19fX19fX19fX19fX19fX0sMTIxOntsOns1OTp7YzpbMTczXX19LGM6WzE3M119fX0sMTA1OntsOnsxMDM6e2w6ezEwOTp7bDp7OTc6e2w6ezU5OntjOls5NjNdfSwxMDI6e2w6ezU5OntjOls5NjJdfX19LDExODp7bDp7NTk6e2M6Wzk2Ml19fX19fX19fX0sMTA5OntsOns1OTp7YzpbODc2NF19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDg1OF19fX19fX19LDEwMTp7bDp7NTk6e2M6Wzg3NzFdfSwxMTM6e2w6ezU5OntjOls4NzcxXX19fX19LDEwMzp7bDp7NTk6e2M6WzEwOTEwXX0sNjk6e2w6ezU5OntjOlsxMDkxMl19fX19fSwxMDg6e2w6ezU5OntjOlsxMDkwOV19LDY5OntsOns1OTp7YzpbMTA5MTFdfX19fX0sMTEwOntsOnsxMDE6e2w6ezU5OntjOls4Nzc0XX19fX19LDExMjp7bDp7MTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6WzEwNzg4XX19fX19fX19fSwxMTQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwNjEwXX19fX19fX19fX19fX0sMTA4OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NTkyXX19fX19fX19fSwxMDk6e2w6ezk3OntsOnsxMDg6e2w6ezEwODp7bDp7MTE1OntsOnsxMDE6e2w6ezExNjp7bDp7MTA5OntsOnsxMDU6e2w6ezExMDp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOls4NzI2XX19fX19fX19fX19fX19fX19fX19fSwxMTU6e2w6ezEwNDp7bDp7MTEyOntsOns1OTp7YzpbMTA4MDNdfX19fX19fX19LDEwMTp7bDp7MTEyOntsOns5Nzp7bDp7MTE0OntsOnsxMTU6e2w6ezEwODp7bDp7NTk6e2M6WzEwNzI0XX19fX19fX19fX19fX0sMTA1OntsOnsxMDA6e2w6ezU5OntjOls4NzM5XX19fSwxMDg6e2w6ezEwMTp7bDp7NTk6e2M6Wzg5OTVdfX19fX19fSwxMTY6e2w6ezU5OntjOlsxMDkyMl19LDEwMTp7bDp7NTk6e2M6WzEwOTI0XX0sMTE1OntsOns1OTp7YzpbMTA5MjQsNjUwMjRdfX19fX19fX19LDExMTp7bDp7MTAyOntsOnsxMTY6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMTAwXX19fX19fX19fSwxMDg6e2w6ezU5OntjOls0N119LDk4OntsOns1OTp7YzpbMTA2OTJdfSw5Nzp7bDp7MTE0OntsOns1OTp7YzpbOTAyM119fX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNjRdfX19fX19fSwxMTI6e2w6ezk3OntsOnsxMDA6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbOTgyNF19LDExNzp7bDp7MTA1OntsOnsxMTY6e2w6ezU5OntjOls5ODI0XX19fX19fX19fX19fX0sMTE0OntsOns1OTp7YzpbODc0MV19fX19fX19LDExMzp7bDp7OTk6e2w6ezk3OntsOnsxMTI6e2w6ezU5OntjOls4ODUxXX0sMTE1OntsOns1OTp7YzpbODg1MSw2NTAyNF19fX19fX19LDExNzp7bDp7MTEyOntsOns1OTp7YzpbODg1Ml19LDExNTp7bDp7NTk6e2M6Wzg4NTIsNjUwMjRdfX19fX19fX19LDExNTp7bDp7MTE3OntsOns5ODp7bDp7NTk6e2M6Wzg4NDddfSwxMDE6e2w6ezU5OntjOls4ODQ5XX19fSwxMTU6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbODg0N119LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbODg0OV19fX19fX19fX19fX19LDExMjp7bDp7NTk6e2M6Wzg4NDhdfSwxMDE6e2w6ezU5OntjOls4ODUwXX19fSwxMTU6e2w6ezEwMTp7bDp7MTE2OntsOns1OTp7YzpbODg0OF19LDEwMTp7bDp7MTEzOntsOns1OTp7YzpbODg1MF19fX19fX19fX19fX19fX19fSwxMTc6e2w6ezU5OntjOls5NjMzXX0sOTc6e2w6ezExNDp7bDp7MTAxOntsOns1OTp7YzpbOTYzM119fX0sMTAyOntsOns1OTp7YzpbOTY0Ml19fX19fX19LDEwMjp7bDp7NTk6e2M6Wzk2NDJdfX19fX19fSwxMTQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg1OTRdfX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDAwOF19fX19fSwxMDE6e2w6ezExNjp7bDp7MTA5OntsOnsxMTA6e2w6ezU5OntjOls4NzI2XX19fX19fX19fSwxMDk6e2w6ezEwNTp7bDp7MTA4OntsOnsxMDE6e2w6ezU5OntjOls4OTk1XX19fX19fX19fSwxMTY6e2w6ezk3OntsOnsxMTQ6e2w6ezEwMjp7bDp7NTk6e2M6Wzg5MDJdfX19fX19fX19fX0sMTE2OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbOTczNF19LDEwMjp7bDp7NTk6e2M6Wzk3MzNdfX19fX19fSwxMTQ6e2w6ezk3OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezEwMTp7bDp7MTEyOntsOnsxMTU6e2w6ezEwNTp7bDp7MTA4OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzEwMTNdfX19fX19fX19fX19fX19LDExMjp7bDp7MTA0OntsOnsxMDU6e2w6ezU5OntjOls5ODFdfX19fX19fX19fX19fX19fX0sMTEwOntsOnsxMTU6e2w6ezU5OntjOlsxNzVdfX19fX19fX19LDExNzp7bDp7OTg6e2w6ezU5OntjOls4ODM0XX0sNjk6e2w6ezU5OntjOlsxMDk0OV19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzEwOTQxXX19fX19fX0sMTAxOntsOns1OTp7YzpbODgzOF19LDEwMDp7bDp7MTExOntsOnsxMTY6e2w6ezU5OntjOlsxMDk0N119fX19fX19fX0sMTA5OntsOnsxMTc6e2w6ezEwODp7bDp7MTE2OntsOns1OTp7YzpbMTA5NDVdfX19fX19fX19LDExMDp7bDp7Njk6e2w6ezU5OntjOlsxMDk1NV19fX0sMTAxOntsOns1OTp7YzpbODg0Ml19fX19fSwxMTI6e2w6ezEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOlsxMDk0M119fX19fX19fX0sMTE0OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDYxN119fX19fX19fX0sMTE1OntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg4MzRdfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg4MzhdfSwxMTM6e2w6ezU5OntjOlsxMDk0OV19fX19fX19LDExMDp7bDp7MTAxOntsOnsxMTM6e2w6ezU5OntjOls4ODQyXX0sMTEzOntsOns1OTp7YzpbMTA5NTVdfX19fX19fX19fX19fSwxMDU6e2w6ezEwOTp7bDp7NTk6e2M6WzEwOTUxXX19fX19LDExNzp7bDp7OTg6e2w6ezU5OntjOlsxMDk2NV19fX0sMTEyOntsOns1OTp7YzpbMTA5NjNdfX19fX19fX19LDk5OntsOns5OTp7bDp7NTk6e2M6Wzg4MjddfSw5Nzp7bDp7MTEyOntsOnsxMTI6e2w6ezExNDp7bDp7MTExOntsOnsxMjA6e2w6ezU5OntjOlsxMDkzNl19fX19fX19fX19fX19LDk5OntsOnsxMTc6e2w6ezExNDp7bDp7MTA4OntsOnsxMjE6e2w6ezEwMTp7bDp7MTEzOntsOns1OTp7YzpbODgyOV19fX19fX19fX19fX19fX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOlsxMDkyOF19fX19fSwxMTA6e2w6ezk3OntsOnsxMTI6e2w6ezExMjp7bDp7MTE0OntsOnsxMTE6e2w6ezEyMDp7bDp7NTk6e2M6WzEwOTM4XX19fX19fX19fX19fX0sMTAxOntsOnsxMTM6e2w6ezExMzp7bDp7NTk6e2M6WzEwOTM0XX19fX19fX0sMTE1OntsOnsxMDU6e2w6ezEwOTp7bDp7NTk6e2M6Wzg5MzddfX19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDk6e2w6ezU5OntjOls4ODMxXX19fX19fX19fX19LDEwOTp7bDp7NTk6e2M6Wzg3MjFdfX19LDExMDp7bDp7MTAzOntsOns1OTp7YzpbOTgzNF19fX19fSwxMTI6e2w6ezQ5OntsOns1OTp7YzpbMTg1XX19LGM6WzE4NV19LDUwOntsOns1OTp7YzpbMTc4XX19LGM6WzE3OF19LDUxOntsOns1OTp7YzpbMTc5XX19LGM6WzE3OV19LDU5OntjOls4ODM1XX0sNjk6e2w6ezU5OntjOlsxMDk1MF19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzEwOTQyXX19fX19LDExNTp7bDp7MTE3OntsOns5ODp7bDp7NTk6e2M6WzEwOTY4XX19fX19fX19fSwxMDE6e2w6ezU5OntjOls4ODM5XX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzEwOTQ4XX19fX19fX19fSwxMDQ6e2w6ezExNTp7bDp7MTExOntsOnsxMDg6e2w6ezU5OntjOlsxMDE4NV19fX19fSwxMTc6e2w6ezk4OntsOns1OTp7YzpbMTA5NjddfX19fX19fX19LDEwODp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbMTA2MTldfX19fX19fX19LDEwOTp7bDp7MTE3OntsOnsxMDg6e2w6ezExNjp7bDp7NTk6e2M6WzEwOTQ2XX19fX19fX19fSwxMTA6e2w6ezY5OntsOns1OTp7YzpbMTA5NTZdfX19LDEwMTp7bDp7NTk6e2M6Wzg4NDNdfX19fX0sMTEyOntsOnsxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbMTA5NDRdfX19fX19fX19LDExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezU5OntjOls4ODM1XX0sMTAxOntsOnsxMTM6e2w6ezU5OntjOls4ODM5XX0sMTEzOntsOns1OTp7YzpbMTA5NTBdfX19fX19fSwxMTA6e2w6ezEwMTp7bDp7MTEzOntsOns1OTp7YzpbODg0M119LDExMzp7bDp7NTk6e2M6WzEwOTU2XX19fX19fX19fX19fX0sMTA1OntsOnsxMDk6e2w6ezU5OntjOlsxMDk1Ml19fX19fSwxMTc6e2w6ezk4OntsOns1OTp7YzpbMTA5NjRdfX19LDExMjp7bDp7NTk6e2M6WzEwOTY2XX19fX19fX19fX19LDExOTp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbODY2NV19fX19fX19LDk3OntsOnsxMTQ6e2w6ezEwNDp7bDp7MTA3OntsOns1OTp7YzpbMTA1MzRdfX19fX0sMTE0OntsOns1OTp7YzpbODYwMV19LDExMTp7bDp7MTE5OntsOns1OTp7YzpbODYwMV19fX19fX19fX19fSwxMTA6e2w6ezExOTp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwNTM4XX19fX19fX19fX19LDEyMjp7bDp7MTA4OntsOnsxMDU6e2w6ezEwMzp7bDp7NTk6e2M6WzIyM119fSxjOlsyMjNdfX19fX19fX19LDExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTAzOntsOnsxMDE6e2w6ezExNjp7bDp7NTk6e2M6Wzg5ODJdfX19fX19fX19LDExNzp7bDp7NTk6e2M6Wzk2NF19fX19fSw5ODp7bDp7MTE0OntsOnsxMDc6e2w6ezU5OntjOls5MTQwXX19fX19fX0sOTk6e2w6ezk3OntsOnsxMTQ6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMzU3XX19fX19fX19fSwxMDE6e2w6ezEwMDp7bDp7MTA1OntsOnsxMDg6e2w6ezU5OntjOlszNTVdfX19fX19fX19LDEyMTp7bDp7NTk6e2M6WzEwOTBdfX19fX0sMTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6Wzg0MTFdfX19fX19fSwxMDE6e2w6ezEwODp7bDp7MTE0OntsOnsxMDE6e2w6ezk5OntsOns1OTp7YzpbODk4MV19fX19fX19fX19fSwxMDI6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDExM119fX19fSwxMDQ6e2w6ezEwMTp7bDp7MTE0OntsOnsxMDE6e2w6ezUyOntsOns1OTp7YzpbODc1Nl19fX0sMTAyOntsOnsxMTE6e2w6ezExNDp7bDp7MTAxOntsOns1OTp7YzpbODc1Nl19fX19fX19fX19fX19LDExNjp7bDp7OTc6e2w6ezU5OntjOls5NTJdfSwxMTU6e2w6ezEyMTp7bDp7MTA5OntsOns1OTp7YzpbOTc3XX19fX19fX0sMTE4OntsOns1OTp7YzpbOTc3XX19fX19fX19fSwxMDU6e2w6ezk5OntsOnsxMDc6e2w6ezk3OntsOnsxMTI6e2w6ezExMjp7bDp7MTE0OntsOnsxMTE6e2w6ezEyMDp7bDp7NTk6e2M6Wzg3NzZdfX19fX19fX19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODc2NF19fX19fX19fX19fSwxMTA6e2w6ezExNTp7bDp7MTEyOntsOns1OTp7YzpbODIwMV19fX19fX19fX0sMTA3OntsOns5Nzp7bDp7MTEyOntsOns1OTp7YzpbODc3Nl19fX19fSwxMTU6e2w6ezEwNTp7bDp7MTA5OntsOns1OTp7YzpbODc2NF19fX19fX19fX0sMTExOntsOnsxMTQ6e2w6ezExMDp7bDp7NTk6e2M6WzI1NF19fSxjOlsyNTRdfX19fX19fSwxMDU6e2w6ezEwODp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOls3MzJdfX19fX19fSwxMDk6e2w6ezEwMTp7bDp7MTE1OntsOns1OTp7YzpbMjE1XX0sOTg6e2w6ezU5OntjOls4ODY0XX0sOTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwODAxXX19fX19fX0sMTAwOntsOns1OTp7YzpbMTA4MDBdfX19fSxjOlsyMTVdfX19fX0sMTEwOntsOnsxMTY6e2w6ezU5OntjOls4NzQ5XX19fX19fX0sMTExOntsOnsxMDE6e2w6ezk3OntsOns1OTp7YzpbMTA1MzZdfX19fX0sMTEyOntsOns1OTp7YzpbODg2OF19LDk4OntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzkwMTRdfX19fX19fSw5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezU5OntjOlsxMDk5M119fX19fX19LDEwMjp7bDp7NTk6e2M6WzEyMDE2NV19LDExMTp7bDp7MTE0OntsOnsxMDc6e2w6ezU5OntjOlsxMDk3MF19fX19fX19fX19fSwxMTU6e2w6ezk3OntsOns1OTp7YzpbMTA1MzddfX19fX19fSwxMTI6e2w6ezExNDp7bDp7MTA1OntsOnsxMDk6e2w6ezEwMTp7bDp7NTk6e2M6WzgyNDRdfX19fX19fX19fX0sMTE0OntsOns5Nzp7bDp7MTAwOntsOnsxMDE6e2w6ezU5OntjOls4NDgyXX19fX19fX0sMTA1OntsOns5Nzp7bDp7MTEwOntsOnsxMDM6e2w6ezEwODp7bDp7MTAxOntsOns1OTp7YzpbOTY1M119LDEwMDp7bDp7MTExOntsOnsxMTk6e2w6ezExMDp7bDp7NTk6e2M6Wzk2NjNdfX19fX19fX19LDEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7NTk6e2M6Wzk2NjddfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg4ODRdfX19fX19fX19fX19fSwxMTM6e2w6ezU5OntjOls4Nzk2XX19fSwxMTQ6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7NTk6e2M6Wzk2NTddfSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg4ODVdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbOTcwOF19fX19fX19LDEwMTp7bDp7NTk6e2M6Wzg3OTZdfX19LDEwOTp7bDp7MTA1OntsOnsxMTA6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbMTA4MTBdfX19fX19fX19fX0sMTEyOntsOnsxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbMTA4MDldfX19fX19fX19LDExNTp7bDp7OTg6e2w6ezU5OntjOlsxMDcwMV19fX19fSwxMTY6e2w6ezEwNTp7bDp7MTA5OntsOnsxMDE6e2w6ezU5OntjOlsxMDgxMV19fX19fX19fX19fSwxMTI6e2w6ezEwMTp7bDp7MTIyOntsOnsxMDU6e2w6ezExNzp7bDp7MTA5OntsOns1OTp7YzpbOTE4Nl19fX19fX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDA5XX19fSwxMjE6e2w6ezU5OntjOlsxMDk0XX19fX19LDEwNDp7bDp7OTk6e2w6ezEyMTp7bDp7NTk6e2M6WzExMTVdfX19fX19fSwxMTY6e2w6ezExNDp7bDp7MTExOntsOnsxMDc6e2w6ezU5OntjOlszNTldfX19fX19fX19fX0sMTE5OntsOnsxMDU6e2w6ezEyMDp7bDp7MTE2OntsOns1OTp7YzpbODgxMl19fX19fX19LDExMTp7bDp7MTA0OntsOnsxMDE6e2w6ezk3OntsOnsxMDA6e2w6ezEwODp7bDp7MTAxOntsOnsxMDI6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MDZdfX19fX19fX19fX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg2MDhdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sMTE3OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjU3XX19fX19fX0sNzI6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDU5NV19fX19fX19LDk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzI1MF19fSxjOlsyNTBdfX19fX19fSwxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg1OTNdfX19fX19fSw5ODp7bDp7MTE0OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTExOF19fX19fSwxMDE6e2w6ezExODp7bDp7MTAxOntsOns1OTp7YzpbMzY1XX19fX19fX19fX19LDk5OntsOnsxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlsyNTFdfX0sYzpbMjUxXX19fX19LDEyMTp7bDp7NTk6e2M6WzEwOTFdfX19fX0sMTAwOntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjQ1XX19fX19fX0sOTg6e2w6ezEwODp7bDp7OTc6e2w6ezk5OntsOns1OTp7YzpbMzY5XX19fX19fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDYwNl19fX19fX19fX0sMTAyOntsOnsxMDU6e2w6ezExNTp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOlsxMDYyMl19fX19fX19fX0sMTE0OntsOns1OTp7YzpbMTIwMTE0XX19fX19LDEwMzp7bDp7MTE0OntsOns5Nzp7bDp7MTE4OntsOnsxMDE6e2w6ezU5OntjOlsyNDldfX0sYzpbMjQ5XX19fX19fX19fSwxMDQ6e2w6ezk3OntsOnsxMTQ6e2w6ezEwODp7bDp7NTk6e2M6Wzg2MzldfX19LDExNDp7bDp7NTk6e2M6Wzg2MzhdfX19fX19fSw5ODp7bDp7MTA4OntsOnsxMDc6e2w6ezU5OntjOls5NjAwXX19fX19fX19fSwxMDg6e2w6ezk5OntsOnsxMTE6e2w6ezExNDp7bDp7MTEwOntsOns1OTp7YzpbODk4OF19LDEwMTp7bDp7MTE0OntsOns1OTp7YzpbODk4OF19fX19fX19fX19fSwxMTQ6e2w6ezExMTp7bDp7MTEyOntsOns1OTp7YzpbODk3NV19fX19fX19fX0sMTE2OntsOnsxMTQ6e2w6ezEwNTp7bDp7NTk6e2M6Wzk3MjBdfX19fX19fX19LDEwOTp7bDp7OTc6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlszNjNdfX19fX19fSwxMDg6e2w6ezU5OntjOlsxNjhdfX0sYzpbMTY4XX19fSwxMTE6e2w6ezEwMzp7bDp7MTExOntsOnsxMTA6e2w6ezU5OntjOlszNzFdfX19fX19fSwxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE2Nl19fX19fX19LDExMjp7bDp7OTc6e2w6ezExNDp7bDp7MTE0OntsOnsxMTE6e2w6ezExOTp7bDp7NTk6e2M6Wzg1OTNdfX19fX19fX19fX0sMTAwOntsOnsxMTE6e2w6ezExOTp7bDp7MTEwOntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOns1OTp7YzpbODU5N119fX19fX19fX19fX19fX19fX19LDEwNDp7bDp7OTc6e2w6ezExNDp7bDp7MTEyOntsOnsxMTE6e2w6ezExMTp7bDp7MTEwOntsOnsxMDg6e2w6ezEwMTp7bDp7MTAyOntsOnsxMTY6e2w6ezU5OntjOls4NjM5XX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7MTAzOntsOnsxMDQ6e2w6ezExNjp7bDp7NTk6e2M6Wzg2MzhdfX19fX19fX19fX19fX19fX19fX19fX19fSwxMDg6e2w6ezExNzp7bDp7MTE1OntsOns1OTp7YzpbODg0Nl19fX19fX19LDExNTp7bDp7MTA1OntsOns1OTp7YzpbOTY1XX0sMTA0OntsOns1OTp7YzpbOTc4XX19fSwxMDg6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbOTY1XX19fX19fX19fX19LDExNzp7bDp7MTEyOntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezExMTp7bDp7MTE5OntsOnsxMTU6e2w6ezU5OntjOls4NjQ4XX19fX19fX19fX19fX19fX19fX0sMTE0OntsOns5OTp7bDp7MTExOntsOnsxMTQ6e2w6ezExMDp7bDp7NTk6e2M6Wzg5ODldfSwxMDE6e2w6ezExNDp7bDp7NTk6e2M6Wzg5ODldfX19fX19fX19fX0sMTE0OntsOnsxMTE6e2w6ezExMjp7bDp7NTk6e2M6Wzg5NzRdfX19fX19fX19LDEwNTp7bDp7MTEwOntsOnsxMDM6e2w6ezU5OntjOlszNjddfX19fX19fSwxMTY6e2w6ezExNDp7bDp7MTA1OntsOns1OTp7YzpbOTcyMV19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDEwXX19fX19fX0sMTE2OntsOnsxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbODk0NF19fX19fX19LDEwNTp7bDp7MTA4OntsOnsxMDA6e2w6ezEwMTp7bDp7NTk6e2M6WzM2MV19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezU5OntjOls5NjUzXX0sMTAyOntsOns1OTp7YzpbOTY1Ml19fX19fX19fX0sMTE3OntsOns5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOls4NjQ4XX19fX19fX0sMTA5OntsOnsxMDg6e2w6ezU5OntjOlsyNTJdfX0sYzpbMjUyXX19fX19LDExOTp7bDp7OTc6e2w6ezExMDp7bDp7MTAzOntsOnsxMDg6e2w6ezEwMTp7bDp7NTk6e2M6WzEwNjYzXX19fX19fX19fX19fX19fSwxMTg6e2w6ezY1OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NjFdfX19fX19fSw2Njp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6WzEwOTg0XX0sMTE4OntsOns1OTp7YzpbMTA5ODVdfX19fX19fX19LDY4OntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4ODcyXX19fX19fX19fSw5Nzp7bDp7MTEwOntsOnsxMDM6e2w6ezExNDp7bDp7MTE2OntsOns1OTp7YzpbMTA2NTJdfX19fX19fX19LDExNDp7bDp7MTAxOntsOnsxMTI6e2w6ezExNTp7bDp7MTA1OntsOnsxMDg6e2w6ezExMTp7bDp7MTEwOntsOns1OTp7YzpbMTAxM119fX19fX19fX19fX19fX0sMTA3OntsOns5Nzp7bDp7MTEyOntsOnsxMTI6e2w6ezk3OntsOns1OTp7YzpbMTAwOF19fX19fX19fX19fSwxMTA6e2w6ezExMTp7bDp7MTE2OntsOnsxMDQ6e2w6ezEwNTp7bDp7MTEwOntsOnsxMDM6e2w6ezU5OntjOls4NzA5XX19fX19fX19fX19fX19fSwxMTI6e2w6ezEwNDp7bDp7MTA1OntsOns1OTp7YzpbOTgxXX19fX19LDEwNTp7bDp7NTk6e2M6Wzk4Ml19fX0sMTE0OntsOnsxMTE6e2w6ezExMjp7bDp7MTE2OntsOnsxMTE6e2w6ezU5OntjOls4NzMzXX19fX19fX19fX19fX0sMTE0OntsOns1OTp7YzpbODU5N119LDEwNDp7bDp7MTExOntsOns1OTp7YzpbMTAwOV19fX19fX19LDExNTp7bDp7MTA1OntsOnsxMDM6e2w6ezEwOTp7bDp7OTc6e2w6ezU5OntjOls5NjJdfX19fX19fX19LDExNzp7bDp7OTg6e2w6ezExNTp7bDp7MTAxOntsOnsxMTY6e2w6ezExMDp7bDp7MTAxOntsOnsxMTM6e2w6ezU5OntjOls4ODQyLDY1MDI0XX0sMTEzOntsOns1OTp7YzpbMTA5NTUsNjUwMjRdfX19fX19fX19fX19fX19fX0sMTEyOntsOnsxMTU6e2w6ezEwMTp7bDp7MTE2OntsOnsxMTA6e2w6ezEwMTp7bDp7MTEzOntsOns1OTp7YzpbODg0Myw2NTAyNF19LDExMzp7bDp7NTk6e2M6WzEwOTU2LDY1MDI0XX19fX19fX19fX19fX19fX19fX19fSwxMTY6e2w6ezEwNDp7bDp7MTAxOntsOnsxMTY6e2w6ezk3OntsOns1OTp7YzpbOTc3XX19fX19fX19fSwxMTQ6e2w6ezEwNTp7bDp7OTc6e2w6ezExMDp7bDp7MTAzOntsOnsxMDg6e2w6ezEwMTp7bDp7MTA4OntsOnsxMDE6e2w6ezEwMjp7bDp7MTE2OntsOns1OTp7YzpbODg4Ml19fX19fX19fX0sMTE0OntsOnsxMDU6e2w6ezEwMzp7bDp7MTA0OntsOnsxMTY6e2w6ezU5OntjOls4ODgzXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sOTk6e2w6ezEyMTp7bDp7NTk6e2M6WzEwNzRdfX19fX0sMTAwOntsOns5Nzp7bDp7MTE1OntsOnsxMDQ6e2w6ezU5OntjOls4ODY2XX19fX19fX19fSwxMDE6e2w6ezEwMTp7bDp7NTk6e2M6Wzg3NDRdfSw5ODp7bDp7OTc6e2w6ezExNDp7bDp7NTk6e2M6Wzg4OTFdfX19fX19fSwxMDE6e2w6ezExMzp7bDp7NTk6e2M6Wzg3OTRdfX19fX19fSwxMDg6e2w6ezEwODp7bDp7MTA1OntsOnsxMTI6e2w6ezU5OntjOls4OTQyXX19fX19fX19fSwxMTQ6e2w6ezk4OntsOns5Nzp7bDp7MTE0OntsOns1OTp7YzpbMTI0XX19fX19fX0sMTE2OntsOns1OTp7YzpbMTI0XX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMTVdfX19fX0sMTA4OntsOnsxMTY6e2w6ezExNDp7bDp7MTA1OntsOns1OTp7YzpbODg4Ml19fX19fX19fX0sMTEwOntsOnsxMTU6e2w6ezExNzp7bDp7OTg6e2w6ezU5OntjOls4ODM0LDg0MDJdfX19LDExMjp7bDp7NTk6e2M6Wzg4MzUsODQwMl19fX19fX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE2N119fX19fX19LDExMjp7bDp7MTE0OntsOnsxMTE6e2w6ezExMjp7bDp7NTk6e2M6Wzg3MzNdfX19fX19fX19LDExNDp7bDp7MTE2OntsOnsxMTQ6e2w6ezEwNTp7bDp7NTk6e2M6Wzg4ODNdfX19fX19fX19LDExNTp7bDp7OTk6e2w6ezExNDp7bDp7NTk6e2M6WzEyMDAxMV19fX19fSwxMTc6e2w6ezk4OntsOnsxMTA6e2w6ezY5OntsOns1OTp7YzpbMTA5NTUsNjUwMjRdfX19LDEwMTp7bDp7NTk6e2M6Wzg4NDIsNjUwMjRdfX19fX19fSwxMTI6e2w6ezExMDp7bDp7Njk6e2w6ezU5OntjOlsxMDk1Niw2NTAyNF19fX0sMTAxOntsOns1OTp7YzpbODg0Myw2NTAyNF19fX19fX19fX19fSwxMjI6e2w6ezEwNTp7bDp7MTAzOntsOnsxMjI6e2w6ezk3OntsOnsxMDM6e2w6ezU5OntjOlsxMDY1MF19fX19fX19fX19fX19fX0sMTE5OntsOns5OTp7bDp7MTA1OntsOnsxMTQ6e2w6ezk5OntsOns1OTp7YzpbMzczXX19fX19fX19fSwxMDE6e2w6ezEwMDp7bDp7OTg6e2w6ezk3OntsOnsxMTQ6e2w6ezU5OntjOlsxMDg0N119fX19fX19LDEwMzp7bDp7MTAxOntsOns1OTp7YzpbODc0M119LDExMzp7bDp7NTk6e2M6Wzg3OTNdfX19fX19fX19LDEwNTp7bDp7MTAxOntsOnsxMTQ6e2w6ezExMjp7bDp7NTk6e2M6Wzg0NzJdfX19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMTZdfX19fX0sMTExOntsOnsxMTI6e2w6ezEwMjp7bDp7NTk6e2M6WzEyMDE2OF19fX19fX19LDExMjp7bDp7NTk6e2M6Wzg0NzJdfX19LDExNDp7bDp7NTk6e2M6Wzg3NjhdfSwxMDE6e2w6ezk3OntsOnsxMTY6e2w6ezEwNDp7bDp7NTk6e2M6Wzg3NjhdfX19fX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDEyXX19fX19fX19fSwxMjA6e2w6ezk5OntsOns5Nzp7bDp7MTEyOntsOns1OTp7YzpbODg5OF19fX19fSwxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOls5NzExXX19fX19fX0sMTE3OntsOnsxMTI6e2w6ezU5OntjOls4ODk5XX19fX19fX0sMTAwOntsOnsxMTY6e2w6ezExNDp7bDp7MTA1OntsOns1OTp7YzpbOTY2MV19fX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMTddfX19fX0sMTA0OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDIzNF19fX19fX19LDk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwMjMxXX19fX19fX19fSwxMDU6e2w6ezU5OntjOls5NThdfX19LDEwODp7bDp7NjU6e2w6ezExNDp7bDp7MTE0OntsOns1OTp7YzpbMTAyMzJdfX19fX19fSw5Nzp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDIyOV19fX19fX19fX0sMTA5OntsOns5Nzp7bDp7MTEyOntsOns1OTp7YzpbMTAyMzZdfX19fX19fSwxMTA6e2w6ezEwNTp7bDp7MTE1OntsOns1OTp7YzpbODk1NV19fX19fX19LDExMTp7bDp7MTAwOntsOnsxMTE6e2w6ezExNjp7bDp7NTk6e2M6WzEwNzUyXX19fX19fX0sMTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNjldfX19LDEwODp7bDp7MTE3OntsOnsxMTU6e2w6ezU5OntjOlsxMDc1M119fX19fX19fX0sMTE2OntsOnsxMDU6e2w6ezEwOTp7bDp7MTAxOntsOns1OTp7YzpbMTA3NTRdfX19fX19fX19fX0sMTE0OntsOns2NTp7bDp7MTE0OntsOnsxMTQ6e2w6ezU5OntjOlsxMDIzM119fX19fX19LDk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6WzEwMjMwXX19fX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwMTNdfX19fX0sMTEzOntsOns5OTp7bDp7MTE3OntsOnsxMTI6e2w6ezU5OntjOlsxMDc1OF19fX19fX19fX19fSwxMTc6e2w6ezExMjp7bDp7MTA4OntsOnsxMTc6e2w6ezExNTp7bDp7NTk6e2M6WzEwNzU2XX19fX19fX19fSwxMTY6e2w6ezExNDp7bDp7MTA1OntsOns1OTp7YzpbOTY1MV19fX19fX19fX0sMTE4OntsOnsxMDE6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4OTddfX19fX19fSwxMTk6e2w6ezEwMTp7bDp7MTAwOntsOnsxMDM6e2w6ezEwMTp7bDp7NTk6e2M6Wzg4OTZdfX19fX19fX19fX19fSwxMjE6e2w6ezk3OntsOns5OTp7bDp7MTE3OntsOnsxMTY6e2w6ezEwMTp7bDp7NTk6e2M6WzI1M119fSxjOlsyNTNdfX19fX0sMTIxOntsOns1OTp7YzpbMTEwM119fX19fX19LDk5OntsOnsxMDU6e2w6ezExNDp7bDp7OTk6e2w6ezU5OntjOlszNzVdfX19fX19fSwxMjE6e2w6ezU5OntjOlsxMDk5XX19fX19LDEwMTp7bDp7MTEwOntsOns1OTp7YzpbMTY1XX19LGM6WzE2NV19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMThdfX19fX0sMTA1OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTExMV19fX19fX19LDExMTp7bDp7MTEyOntsOnsxMDI6e2w6ezU5OntjOlsxMjAxNzBdfX19fX19fSwxMTU6e2w6ezk5OntsOnsxMTQ6e2w6ezU5OntjOlsxMjAwMTRdfX19fX19fSwxMTc6e2w6ezk5OntsOnsxMjE6e2w6ezU5OntjOlsxMTAyXX19fX19LDEwOTp7bDp7MTA4OntsOns1OTp7YzpbMjU1XX19LGM6WzI1NV19fX19fX19LDEyMjp7bDp7OTc6e2w6ezk5OntsOnsxMTc6e2w6ezExNjp7bDp7MTAxOntsOns1OTp7YzpbMzc4XX19fX19fX19fX19LDk5OntsOns5Nzp7bDp7MTE0OntsOnsxMTE6e2w6ezExMDp7bDp7NTk6e2M6WzM4Ml19fX19fX19fX0sMTIxOntsOns1OTp7YzpbMTA3OV19fX19fSwxMDA6e2w6ezExMTp7bDp7MTE2OntsOns1OTp7YzpbMzgwXX19fX19fX0sMTAxOntsOnsxMDE6e2w6ezExNjp7bDp7MTE0OntsOnsxMDI6e2w6ezU5OntjOls4NDg4XX19fX19fX19fSwxMTY6e2w6ezk3OntsOns1OTp7YzpbOTUwXX19fX19fX0sMTAyOntsOnsxMTQ6e2w6ezU5OntjOlsxMjAxMTldfX19fX0sMTA0OntsOns5OTp7bDp7MTIxOntsOns1OTp7YzpbMTA3OF19fX19fX19LDEwNTp7bDp7MTAzOntsOnsxMTQ6e2w6ezk3OntsOnsxMTQ6e2w6ezExNDp7bDp7NTk6e2M6Wzg2NjldfX19fX19fX19fX19fSwxMTE6e2w6ezExMjp7bDp7MTAyOntsOns1OTp7YzpbMTIwMTcxXX19fX19fX0sMTE1OntsOns5OTp7bDp7MTE0OntsOns1OTp7YzpbMTIwMDE1XX19fX19fX0sMTE5OntsOnsxMDY6e2w6ezU5OntjOls4MjA1XX19fSwxMTA6e2w6ezEwNjp7bDp7NTk6e2M6WzgyMDRdfX19fX19fX19fTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFVOSUNPREUgPSByZXF1aXJlKCcuLi9jb21tb24vdW5pY29kZScpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gVU5JQ09ERS5DT0RFX1BPSU5UUztcclxuXHJcbi8vVXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIG1vdmVkIG91dCBvZiB0aGlzIG1vZHVsZS4gVjggQ3JhbmtzaGFmdCB3aWxsIG5vdCBpbmxpbmVcclxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxyXG4vL0Fsd2F5cyBwZXJmb3JtIGlubGluaW5nIGNoZWNrIGJlZm9yZSBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbnMgKCdub2RlIC0tdHJhY2UtaW5saW5pbmcnKS5cclxuZnVuY3Rpb24gaXNSZXNlcnZlZENvZGVQb2ludChjcCkge1xyXG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCAmJiBjcCA8PSAweERGRkYgfHwgY3AgPiAweDEwRkZGRjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKGNwMSwgY3AyKSB7XHJcbiAgICByZXR1cm4gY3AxID49IDB4RDgwMCAmJiBjcDEgPD0gMHhEQkZGICYmIGNwMiA+PSAweERDMDAgJiYgY3AyIDw9IDB4REZGRjtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U3Vycm9nYXRlUGFpckNvZGVQb2ludChjcDEsIGNwMikge1xyXG4gICAgcmV0dXJuIChjcDEgLSAweEQ4MDApICogMHg0MDAgKyAweDI0MDAgKyBjcDI7XHJcbn1cclxuXHJcbi8vUHJlcHJvY2Vzc29yXHJcbi8vTk9URTogSFRNTCBpbnB1dCBwcmVwcm9jZXNzaW5nXHJcbi8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3ByZXByb2Nlc3NpbmctdGhlLWlucHV0LXN0cmVhbSlcclxudmFyIFByZXByb2Nlc3NvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgIHRoaXMud3JpdGUoaHRtbCk7XHJcblxyXG4gICAgLy9OT1RFOiBvbmUgbGVhZGluZyBVK0ZFRkYgQllURSBPUkRFUiBNQVJLIGNoYXJhY3RlciBtdXN0IGJlIGlnbm9yZWQgaWYgYW55IGFyZSBwcmVzZW50IGluIHRoZSBpbnB1dCBzdHJlYW0uXHJcbiAgICB0aGlzLnBvcyA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KDApID09PSAkLkJPTSA/IDAgOiAtMTtcclxuXHJcbiAgICB0aGlzLmdhcFN0YWNrID0gW107XHJcbiAgICB0aGlzLmxhc3RHYXBQb3MgPSAtMTtcclxuICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XHJcbn07XHJcblxyXG5QcmVwcm9jZXNzb3IucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGh0bWwpIHtcclxuICAgIGlmICh0aGlzLmh0bWwpIHtcclxuICAgICAgICB0aGlzLmh0bWwgPSB0aGlzLmh0bWwuc3Vic3RyaW5nKDAsIHRoaXMucG9zICsgMSkgK1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgK1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbC5zdWJzdHJpbmcodGhpcy5wb3MgKyAxLCB0aGlzLmh0bWwubGVuZ3RoKTtcclxuXHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5odG1sID0gaHRtbDtcclxuXHJcblxyXG4gICAgdGhpcy5sYXN0Q2hhclBvcyA9IHRoaXMuaHRtbC5sZW5ndGggLSAxO1xyXG59O1xyXG5cclxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMucG9zKys7XHJcblxyXG4gICAgaWYgKHRoaXMucG9zID4gdGhpcy5sYXN0Q2hhclBvcylcclxuICAgICAgICByZXR1cm4gJC5FT0Y7XHJcblxyXG4gICAgdmFyIGNwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MpO1xyXG5cclxuICAgIC8vTk9URTogYW55IFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXJzIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93IGEgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpIGNoYXJhY3RlclxyXG4gICAgLy9tdXN0IGJlIGlnbm9yZWQuXHJcbiAgICBpZiAodGhpcy5za2lwTmV4dE5ld0xpbmUgJiYgY3AgPT09ICQuTElORV9GRUVEKSB7XHJcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9hZGRHYXAoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vTk9URTogYWxsIFUrMDAwRCBDQVJSSUFHRSBSRVRVUk4gKENSKSBjaGFyYWN0ZXJzIG11c3QgYmUgY29udmVydGVkIHRvIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXJzXHJcbiAgICBpZiAoY3AgPT09ICQuQ0FSUklBR0VfUkVUVVJOKSB7XHJcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiAkLkxJTkVfRkVFRDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xyXG5cclxuICAgIC8vT1BUSU1JWkFUSU9OOiBmaXJzdCBwZXJmb3JtIGNoZWNrIGlmIHRoZSBjb2RlIHBvaW50IGluIHRoZSBhbGxvd2VkIHJhbmdlIHRoYXQgY292ZXJzIG1vc3QgY29tbW9uXHJcbiAgICAvL0hUTUwgaW5wdXQgKGUuZy4gQVNDSUkgY29kZXMpIHRvIGF2b2lkIHBlcmZvcm1hbmNlLWNvc3Qgb3BlcmF0aW9ucyBmb3IgaGlnaC1yYW5nZSBjb2RlIHBvaW50cy5cclxuICAgIHJldHVybiBjcCA+PSAweEQ4MDAgPyB0aGlzLl9wcm9jZXNzSGlnaFJhbmdlQ29kZVBvaW50KGNwKSA6IGNwO1xyXG59O1xyXG5cclxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5fcHJvY2Vzc0hpZ2hSYW5nZUNvZGVQb2ludCA9IGZ1bmN0aW9uIChjcCkge1xyXG4gICAgLy9OT1RFOiB0cnkgdG8gcGVlayBhIHN1cnJvZ2F0ZSBwYWlyXHJcbiAgICBpZiAodGhpcy5wb3MgIT09IHRoaXMubGFzdENoYXJQb3MpIHtcclxuICAgICAgICB2YXIgbmV4dENwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcclxuXHJcbiAgICAgICAgaWYgKGlzU3Vycm9nYXRlUGFpcihjcCwgbmV4dENwKSkge1xyXG4gICAgICAgICAgICAvL05PVEU6IHdlIGhhdmUgYSBzdXJyb2dhdGUgcGFpci4gUGVlayBwYWlyIGNoYXJhY3RlciBhbmQgcmVjYWxjdWxhdGUgY29kZSBwb2ludC5cclxuICAgICAgICAgICAgdGhpcy5wb3MrKztcclxuICAgICAgICAgICAgY3AgPSBnZXRTdXJyb2dhdGVQYWlyQ29kZVBvaW50KGNwLCBuZXh0Q3ApO1xyXG5cclxuICAgICAgICAgICAgLy9OT1RFOiBhZGQgZ2FwIHRoYXQgc2hvdWxkIGJlIGF2b2lkZWQgZHVyaW5nIHJldHJlYXRcclxuICAgICAgICAgICAgdGhpcy5fYWRkR2FwKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSlcclxuICAgICAgICBjcCA9ICQuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIHJldHVybiBjcDtcclxufTtcclxuXHJcblByZXByb2Nlc3Nvci5wcm90b3R5cGUuX2FkZEdhcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZ2FwU3RhY2sucHVzaCh0aGlzLmxhc3RHYXBQb3MpO1xyXG4gICAgdGhpcy5sYXN0R2FwUG9zID0gdGhpcy5wb3M7XHJcbn07XHJcblxyXG5QcmVwcm9jZXNzb3IucHJvdG90eXBlLnJldHJlYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy5wb3MgPT09IHRoaXMubGFzdEdhcFBvcykge1xyXG4gICAgICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMuZ2FwU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5wb3MtLTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBvcy0tO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgUHJlcHJvY2Vzc29yID0gcmVxdWlyZSgnLi9wcmVwcm9jZXNzb3InKSxcclxuICAgIExvY2F0aW9uSW5mb01peGluID0gcmVxdWlyZSgnLi9sb2NhdGlvbl9pbmZvX21peGluJyksXHJcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcclxuICAgIE5BTUVEX0VOVElUWV9UUklFID0gcmVxdWlyZSgnLi9uYW1lZF9lbnRpdHlfdHJpZScpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gVU5JQ09ERS5DT0RFX1BPSU5UUyxcclxuICAgICQkID0gVU5JQ09ERS5DT0RFX1BPSU5UX1NFUVVFTkNFUztcclxuXHJcbi8vUmVwbGFjZW1lbnQgY29kZSBwb2ludHMgZm9yIG51bWVyaWMgZW50aXRpZXNcclxudmFyIE5VTUVSSUNfRU5USVRZX1JFUExBQ0VNRU5UUyA9IHtcclxuICAgIDB4MDA6IDB4RkZGRCwgMHgwRDogMHgwMDBELCAweDgwOiAweDIwQUMsIDB4ODE6IDB4MDA4MSwgMHg4MjogMHgyMDFBLCAweDgzOiAweDAxOTIsIDB4ODQ6IDB4MjAxRSxcclxuICAgIDB4ODU6IDB4MjAyNiwgMHg4NjogMHgyMDIwLCAweDg3OiAweDIwMjEsIDB4ODg6IDB4MDJDNiwgMHg4OTogMHgyMDMwLCAweDhBOiAweDAxNjAsIDB4OEI6IDB4MjAzOSxcclxuICAgIDB4OEM6IDB4MDE1MiwgMHg4RDogMHgwMDhELCAweDhFOiAweDAxN0QsIDB4OEY6IDB4MDA4RiwgMHg5MDogMHgwMDkwLCAweDkxOiAweDIwMTgsIDB4OTI6IDB4MjAxOSxcclxuICAgIDB4OTM6IDB4MjAxQywgMHg5NDogMHgyMDFELCAweDk1OiAweDIwMjIsIDB4OTY6IDB4MjAxMywgMHg5NzogMHgyMDE0LCAweDk4OiAweDAyREMsIDB4OTk6IDB4MjEyMixcclxuICAgIDB4OUE6IDB4MDE2MSwgMHg5QjogMHgyMDNBLCAweDlDOiAweDAxNTMsIDB4OUQ6IDB4MDA5RCwgMHg5RTogMHgwMTdFLCAweDlGOiAweDAxNzhcclxufTtcclxuXHJcbi8vU3RhdGVzXHJcbnZhciBEQVRBX1NUQVRFID0gJ0RBVEFfU1RBVEUnLFxyXG4gICAgQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9EQVRBX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURScsXHJcbiAgICBSQ0RBVEFfU1RBVEUgPSAnUkNEQVRBX1NUQVRFJyxcclxuICAgIENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFJyxcclxuICAgIFJBV1RFWFRfU1RBVEUgPSAnUkFXVEVYVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9TVEFURSA9ICdTQ1JJUFRfREFUQV9TVEFURScsXHJcbiAgICBQTEFJTlRFWFRfU1RBVEUgPSAnUExBSU5URVhUX1NUQVRFJyxcclxuICAgIFRBR19PUEVOX1NUQVRFID0gJ1RBR19PUEVOX1NUQVRFJyxcclxuICAgIEVORF9UQUdfT1BFTl9TVEFURSA9ICdFTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgVEFHX05BTUVfU1RBVEUgPSAnVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1JDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBSQ0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1JDREFUQV9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFJBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEUgPSAnUkFXVEVYVF9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURScsXHJcbiAgICBSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFJyxcclxuICAgIEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEUnLFxyXG4gICAgQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEUgPSAnQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEUnLFxyXG4gICAgQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURSA9ICdBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFJyxcclxuICAgIFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEUgPSAnU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURScsXHJcbiAgICBCT0dVU19DT01NRU5UX1NUQVRFID0gJ0JPR1VTX0NPTU1FTlRfU1RBVEUnLFxyXG4gICAgTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUgPSAnTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9TVEFSVF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX1NUQVRFJyxcclxuICAgIENPTU1FTlRfU1RBUlRfREFTSF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9TVEFURSA9ICdDT01NRU5UX1NUQVRFJyxcclxuICAgIENPTU1FTlRfRU5EX0RBU0hfU1RBVEUgPSAnQ09NTUVOVF9FTkRfREFTSF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9TVEFURSA9ICdDT01NRU5UX0VORF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9CQU5HX1NUQVRFID0gJ0NPTU1FTlRfRU5EX0JBTkdfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TVEFURSA9ICdET0NUWVBFX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEUgPSAnQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURScsXHJcbiAgICBET0NUWVBFX05BTUVfU1RBVEUgPSAnRE9DVFlQRV9OQU1FX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfTkFNRV9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX05BTUVfU1RBVEUnLFxyXG4gICAgQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFID0gJ0JFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEUnLFxyXG4gICAgQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUgPSAnQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURScsXHJcbiAgICBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEUgPSAnRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURScsXHJcbiAgICBCT0dVU19ET0NUWVBFX1NUQVRFID0gJ0JPR1VTX0RPQ1RZUEVfU1RBVEUnLFxyXG4gICAgQ0RBVEFfU0VDVElPTl9TVEFURSA9ICdDREFUQV9TRUNUSU9OX1NUQVRFJztcclxuXHJcbi8vVXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIG1vdmVkIG91dCBvZiB0aGlzIG1vZHVsZS4gVjggQ3JhbmtzaGFmdCB3aWxsIG5vdCBpbmxpbmVcclxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxyXG4vL0Fsd2F5cyBwZXJmb3JtIGlubGluaW5nIGNoZWNrIGJlZm9yZSBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbnMgKCdub2RlIC0tdHJhY2UtaW5saW5pbmcnKS5cclxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPT09ICQuU1BBQ0UgfHwgY3AgPT09ICQuTElORV9GRUVEIHx8IGNwID09PSAkLlRBQlVMQVRJT04gfHwgY3AgPT09ICQuRk9STV9GRUVEO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzY2lpRGlnaXQoY3ApIHtcclxuICAgIHJldHVybiBjcCA+PSAkLkRJR0lUXzAgJiYgY3AgPD0gJC5ESUdJVF85O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzY2lpVXBwZXIoY3ApIHtcclxuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX0NBUElUQUxfQSAmJiBjcCA8PSAkLkxBVElOX0NBUElUQUxfWjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaUxvd2VyKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gJC5MQVRJTl9TTUFMTF9BICYmIGNwIDw9ICQuTEFUSU5fU01BTExfWjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaUFscGhhTnVtZXJpYyhjcCkge1xyXG4gICAgcmV0dXJuIGlzQXNjaWlEaWdpdChjcCkgfHwgaXNBc2NpaVVwcGVyKGNwKSB8fCBpc0FzY2lpTG93ZXIoY3ApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RpZ2l0KGNwLCBpc0hleCkge1xyXG4gICAgcmV0dXJuIGlzQXNjaWlEaWdpdChjcCkgfHwgKGlzSGV4ICYmICgoY3AgPj0gJC5MQVRJTl9DQVBJVEFMX0EgJiYgY3AgPD0gJC5MQVRJTl9DQVBJVEFMX0YpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcCA+PSAkLkxBVElOX1NNQUxMX0EgJiYgY3AgPD0gJC5MQVRJTl9TTUFMTF9GKSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gMHhEODAwICYmIGNwIDw9IDB4REZGRiB8fCBjcCA+IDB4MTBGRkZGO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApIHtcclxuICAgIHJldHVybiBjcCArIDB4MDAyMDtcclxufVxyXG5cclxuLy9OT1RFOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCkgZnVuY3Rpb24gY2FuIGhhbmRsZSBvbmx5IGNoYXJhY3RlcnMgZnJvbSBCTVAgc3Vic2V0LlxyXG4vL1NvLCB3ZSBuZWVkIHRvIHdvcmthcm91bmQgdGhpcyBtYW51YWxseS5cclxuLy8oc2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9mcm9tQ2hhckNvZGUjR2V0dGluZ19pdF90b193b3JrX3dpdGhfaGlnaGVyX3ZhbHVlcylcclxuZnVuY3Rpb24gdG9DaGFyKGNwKSB7XHJcbiAgICBpZiAoY3AgPD0gMHhGRkZGKVxyXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKTtcclxuXHJcbiAgICBjcCAtPSAweDEwMDAwO1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3AgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApICsgU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgfCBjcCAmIDB4M0ZGKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9Bc2NpaUxvd2VyQ2hhcihjcCkge1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbn1cclxuXHJcbi8vVG9rZW5pemVyXHJcbnZhciBUb2tlbml6ZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChodG1sLCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLmRpc2FibGVFbnRpdGllc0RlY29kaW5nID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IgPSBuZXcgUHJlcHJvY2Vzc29yKGh0bWwpO1xyXG5cclxuICAgIHRoaXMudG9rZW5RdWV1ZSA9IFtdO1xyXG5cclxuICAgIHRoaXMuYWxsb3dDREFUQSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgdGhpcy5yZXR1cm5TdGF0ZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuY29uc3VtcHRpb25Qb3MgPSAwO1xyXG5cclxuICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuICAgIHRoaXMubGFzdFN0YXJ0VGFnTmFtZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudEF0dHIgPSBudWxsO1xyXG5cclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlRW50aXRpZXNEZWNvZGluZyA9ICFvcHRpb25zLmRlY29kZUh0bWxFbnRpdGllcztcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMubG9jYXRpb25JbmZvKVxyXG4gICAgICAgICAgICBMb2NhdGlvbkluZm9NaXhpbi5hc3NpZ24odGhpcyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL1Rva2VuIHR5cGVzXHJcblRva2VuaXplci5DSEFSQUNURVJfVE9LRU4gPSAnQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOID0gJ05VTExfQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOID0gJ1dISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiA9ICdTVEFSVF9UQUdfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRU5EX1RBR19UT0tFTiA9ICdFTkRfVEFHX1RPS0VOJztcclxuVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4gPSAnQ09NTUVOVF9UT0tFTic7XHJcblRva2VuaXplci5ET0NUWVBFX1RPS0VOID0gJ0RPQ1RZUEVfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRU9GX1RPS0VOID0gJ0VPRl9UT0tFTic7XHJcblxyXG4vL1Rva2VuaXplciBpbml0aWFsIHN0YXRlcyBmb3IgZGlmZmVyZW50IG1vZGVzXHJcblRva2VuaXplci5NT0RFID0gVG9rZW5pemVyLnByb3RvdHlwZS5NT0RFID0ge1xyXG4gICAgREFUQTogREFUQV9TVEFURSxcclxuICAgIFJDREFUQTogUkNEQVRBX1NUQVRFLFxyXG4gICAgUkFXVEVYVDogUkFXVEVYVF9TVEFURSxcclxuICAgIFNDUklQVF9EQVRBOiBTQ1JJUFRfREFUQV9TVEFURSxcclxuICAgIFBMQUlOVEVYVDogUExBSU5URVhUX1NUQVRFXHJcbn07XHJcblxyXG4vL1N0YXRpY1xyXG5Ub2tlbml6ZXIuZ2V0VG9rZW5BdHRyID0gZnVuY3Rpb24gKHRva2VuLCBhdHRyTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRva2VuLmF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRva2VuLmF0dHJzW2ldLm5hbWUgPT09IGF0dHJOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdG9rZW4uYXR0cnNbaV0udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG4vL0dldCB0b2tlblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICghdGhpcy50b2tlblF1ZXVlLmxlbmd0aClcclxuICAgICAgICB0aGlzW3RoaXMuc3RhdGVdKHRoaXMuX2NvbnN1bWUoKSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudG9rZW5RdWV1ZS5zaGlmdCgpO1xyXG59O1xyXG5cclxuLy9Db25zdW1wdGlvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jb25zdW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jb25zdW1wdGlvblBvcysrO1xyXG4gICAgcmV0dXJuIHRoaXMucHJlcHJvY2Vzc29yLmFkdmFuY2VBbmRQZWVrQ29kZVBvaW50KCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl91bmNvbnN1bWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmNvbnN1bXB0aW9uUG9zLS07XHJcbiAgICB0aGlzLnByZXByb2Nlc3Nvci5yZXRyZWF0KCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl91bmNvbnN1bWVTZXZlcmFsID0gZnVuY3Rpb24gKGNvdW50KSB7XHJcbiAgICB3aGlsZSAoY291bnQtLSlcclxuICAgICAgICB0aGlzLl91bmNvbnN1bWUoKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX3JlY29uc3VtZUluU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIHRoaXMuX3VuY29uc3VtZSgpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoID0gZnVuY3Rpb24gKHBhdHRlcm4sIHN0YXJ0Q3AsIGNhc2VTZW5zaXRpdmUpIHtcclxuICAgIHZhciByb2xsYmFja1BvcyA9IHRoaXMuY29uc3VtcHRpb25Qb3MsXHJcbiAgICAgICAgaXNNYXRjaCA9IHRydWUsXHJcbiAgICAgICAgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm4ubGVuZ3RoLFxyXG4gICAgICAgIHBhdHRlcm5Qb3MgPSAwLFxyXG4gICAgICAgIGNwID0gc3RhcnRDcCxcclxuICAgICAgICBwYXR0ZXJuQ3AgPSB2b2lkIDA7XHJcblxyXG4gICAgZm9yICg7IHBhdHRlcm5Qb3MgPCBwYXR0ZXJuTGVuZ3RoOyBwYXR0ZXJuUG9zKyspIHtcclxuICAgICAgICBpZiAocGF0dGVyblBvcyA+IDApXHJcbiAgICAgICAgICAgIGNwID0gdGhpcy5fY29uc3VtZSgpO1xyXG5cclxuICAgICAgICBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXR0ZXJuQ3AgPSBwYXR0ZXJuW3BhdHRlcm5Qb3NdO1xyXG5cclxuICAgICAgICBpZiAoY3AgIT09IHBhdHRlcm5DcCAmJiAoY2FzZVNlbnNpdGl2ZSB8fCBjcCAhPT0gdG9Bc2NpaUxvd2VyQ29kZVBvaW50KHBhdHRlcm5DcCkpKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNNYXRjaClcclxuICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKHRoaXMuY29uc3VtcHRpb25Qb3MgLSByb2xsYmFja1Bvcyk7XHJcblxyXG4gICAgcmV0dXJuIGlzTWF0Y2g7XHJcbn07XHJcblxyXG4vL0xvb2thaGVhZFxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9sb29rYWhlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY3AgPSB0aGlzLnByZXByb2Nlc3Nvci5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCgpO1xyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IucmV0cmVhdCgpO1xyXG5cclxuICAgIHJldHVybiBjcDtcclxufTtcclxuXHJcbi8vVGVtcCBidWZmZXJcclxuVG9rZW5pemVyLnByb3RvdHlwZS5pc1RlbXBCdWZmZXJFcXVhbFRvU2NyaXB0U3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMudGVtcEJ1ZmYubGVuZ3RoICE9PSAkJC5TQ1JJUFRfU1RSSU5HLmxlbmd0aClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRlbXBCdWZmLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcEJ1ZmZbaV0gIT09ICQkLlNDUklQVF9TVFJJTkdbaV0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbi8vVG9rZW4gY3JlYXRpb25cclxuVG9rZW5pemVyLnByb3RvdHlwZS5idWlsZFN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgc2VsZkNsb3Npbmc6IGZhbHNlLFxyXG4gICAgICAgIGF0dHJzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuYnVpbGRFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IFRva2VuaXplci5FTkRfVEFHX1RPS0VOLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgaWdub3JlZDogZmFsc2UsXHJcbiAgICAgICAgYXR0cnM6IFtdXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlU3RhcnRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0aGlzLmJ1aWxkU3RhcnRUYWdUb2tlbih0YWdOYW1lRmlyc3RDaCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0aGlzLmJ1aWxkRW5kVGFnVG9rZW4odGFnTmFtZUZpcnN0Q2gpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQ29tbWVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB7XHJcbiAgICAgICAgdHlwZTogVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4sXHJcbiAgICAgICAgZGF0YTogJydcclxuICAgIH07XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVEb2N0eXBlVG9rZW4gPSBmdW5jdGlvbiAoZG9jdHlwZU5hbWVGaXJzdENoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTixcclxuICAgICAgICBuYW1lOiBkb2N0eXBlTmFtZUZpcnN0Q2ggfHwgJycsXHJcbiAgICAgICAgZm9yY2VRdWlya3M6IGZhbHNlLFxyXG4gICAgICAgIHB1YmxpY0lkOiBudWxsLFxyXG4gICAgICAgIHN5c3RlbUlkOiBudWxsXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQ2hhcmFjdGVyVG9rZW4gPSBmdW5jdGlvbiAodHlwZSwgY2gpIHtcclxuICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0ge1xyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgY2hhcnM6IGNoXHJcbiAgICB9O1xyXG59O1xyXG5cclxuLy9UYWcgYXR0cmlidXRlc1xyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVBdHRyID0gZnVuY3Rpb24gKGF0dHJOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50QXR0ciA9IHtcclxuICAgICAgICBuYW1lOiBhdHRyTmFtZUZpcnN0Q2gsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5faXNEdXBsaWNhdGVBdHRyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIFRva2VuaXplci5nZXRUb2tlbkF0dHIodGhpcy5jdXJyZW50VG9rZW4sIHRoaXMuY3VycmVudEF0dHIubmFtZSkgIT09IG51bGw7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9sZWF2ZUF0dHJOYW1lID0gZnVuY3Rpb24gKHRvU3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSB0b1N0YXRlO1xyXG5cclxuICAgIGlmICghdGhpcy5faXNEdXBsaWNhdGVBdHRyKCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uYXR0cnMucHVzaCh0aGlzLmN1cnJlbnRBdHRyKTtcclxufTtcclxuXHJcbi8vQXBwcm9wcmlhdGUgZW5kIHRhZyB0b2tlblxyXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI2FwcHJvcHJpYXRlLWVuZC10YWctdG9rZW4pXHJcblRva2VuaXplci5wcm90b3R5cGUuX2lzQXBwcm9wcmlhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPT09IHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWU7XHJcbn07XHJcblxyXG4vL1Rva2VuIGVtaXNzaW9uXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRDdXJyZW50VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcblxyXG4gICAgLy9OT1RFOiBzdG9yZSBlbWl0ZWQgc3RhcnQgdGFnJ3MgdGFnTmFtZSB0byBkZXRlcm1pbmUgaXMgdGhlIGZvbGxvd2luZyBlbmQgdGFnIHRva2VuIGlzIGFwcHJvcHJpYXRlLlxyXG4gICAgaWYgKHRoaXMuY3VycmVudFRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4pXHJcbiAgICAgICAgdGhpcy5sYXN0U3RhcnRUYWdOYW1lID0gdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICB0aGlzLnRva2VuUXVldWUucHVzaCh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKSB7XHJcbiAgICAgICAgdGhpcy50b2tlblF1ZXVlLnB1c2godGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcclxuICAgIH1cclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRFT0ZUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4oKTtcclxuICAgIHRoaXMudG9rZW5RdWV1ZS5wdXNoKHt0eXBlOiBUb2tlbml6ZXIuRU9GX1RPS0VOfSk7XHJcbn07XHJcblxyXG4vL0NoYXJhY3RlcnMgZW1pc3Npb25cclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBzcGVjaWZpY2F0aW9uIHVzZXMgb25seSBvbmUgdHlwZSBvZiBjaGFyYWN0ZXIgdG9rZW5zIChvbmUgdG9rZW4gcGVyIGNoYXJhY3RlcikuXHJcbi8vVGhpcyBjYXVzZXMgYSBodWdlIG1lbW9yeSBvdmVyaGVhZCBhbmQgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgcGFyc2VyIGxvb3BzLiBwYXJzZTUgdXNlcyAzIGdyb3VwcyBvZiBjaGFyYWN0ZXJzLlxyXG4vL0lmIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYmVsb25nIHRvIHRoZSBzYW1lIGdyb3VwLCBwYXJzZXIgY2FuIHByb2Nlc3MgaXRcclxuLy9hcyBhIHNpbmdsZSBzb2xpZCBjaGFyYWN0ZXIgdG9rZW4uXHJcbi8vU28sIHRoZXJlIGFyZSAzIHR5cGVzIG9mIGNoYXJhY3RlciB0b2tlbnMgaW4gcGFyc2U1OlxyXG4vLzEpTlVMTF9DSEFSQUNURVJfVE9LRU4gLSBcXHUwMDAwLWNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcdTAwMDBcXHUwMDAwXFx1MDAwMCcpXHJcbi8vMilXSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAtIGFueSB3aGl0ZXNwYWNlL25ldy1saW5lIGNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcbiAgXFxyXFx0ICAgXFxmJylcclxuLy8zKUNIQVJBQ1RFUl9UT0tFTiAtIGFueSBjaGFyYWN0ZXIgc2VxdWVuY2Ugd2hpY2ggZG9uJ3QgYmVsb25nIHRvIGdyb3VwcyAxIGFuZCAyIChlLmcuICdhYmNkZWYxMjM0QEAjJCVeJylcclxuVG9rZW5pemVyLnByb3RvdHlwZS5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gJiYgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4udHlwZSAhPT0gdHlwZSlcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKVxyXG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmNoYXJzICs9IGNoO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbih0eXBlLCBjaCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q29kZVBvaW50ID0gZnVuY3Rpb24gKGNwKSB7XHJcbiAgICB2YXIgdHlwZSA9IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdHlwZSA9IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHR5cGUgPSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgdGhpcy5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKHR5cGUsIHRvQ2hhcihjcCkpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdFNldmVyYWxDb2RlUG9pbnRzID0gZnVuY3Rpb24gKGNvZGVQb2ludHMpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNvZGVQb2ludHNbaV0pO1xyXG59O1xyXG5cclxuLy9OT1RFOiB1c2VkIHRoZW4gd2UgZW1pdCBjaGFyYWN0ZXIgZXhwbGljaXRseS4gVGhpcyBpcyBhbHdheXMgYSBub24td2hpdGVzcGFjZSBhbmQgYSBub24tbnVsbCBjaGFyYWN0ZXIuXHJcbi8vU28gd2UgY2FuIGF2b2lkIGFkZGl0aW9uYWwgY2hlY2tzIGhlcmUuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRDaGFyID0gZnVuY3Rpb24gKGNoKSB7XHJcbiAgICB0aGlzLl9hcHBlbmRDaGFyVG9DdXJyZW50Q2hhcmFjdGVyVG9rZW4oVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiwgY2gpO1xyXG59O1xyXG5cclxuLy9DaGFyYWN0ZXIgcmVmZXJlbmNlIHRva2VuaXphdGlvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jb25zdW1lTnVtZXJpY0VudGl0eSA9IGZ1bmN0aW9uIChpc0hleCkge1xyXG4gICAgdmFyIGRpZ2l0cyA9ICcnLFxyXG4gICAgICAgIG5leHRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgICAgZGlnaXRzICs9IHRvQ2hhcih0aGlzLl9jb25zdW1lKCkpO1xyXG4gICAgICAgIG5leHRDcCA9IHRoaXMuX2xvb2thaGVhZCgpO1xyXG4gICAgfSB3aGlsZSAobmV4dENwICE9PSAkLkVPRiAmJiBpc0RpZ2l0KG5leHRDcCwgaXNIZXgpKTtcclxuXHJcbiAgICBpZiAodGhpcy5fbG9va2FoZWFkKCkgPT09ICQuU0VNSUNPTE9OKVxyXG4gICAgICAgIHRoaXMuX2NvbnN1bWUoKTtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENwID0gcGFyc2VJbnQoZGlnaXRzLCBpc0hleCA/IDE2IDogMTApLFxyXG4gICAgICAgIHJlcGxhY2VtZW50ID0gTlVNRVJJQ19FTlRJVFlfUkVQTEFDRU1FTlRTW3JlZmVyZW5jZWRDcF07XHJcblxyXG4gICAgaWYgKHJlcGxhY2VtZW50KVxyXG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcclxuXHJcbiAgICBpZiAoaXNSZXNlcnZlZENvZGVQb2ludChyZWZlcmVuY2VkQ3ApKVxyXG4gICAgICAgIHJldHVybiAkLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICByZXR1cm4gcmVmZXJlbmNlZENwO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZU5hbWVkRW50aXR5ID0gZnVuY3Rpb24gKHN0YXJ0Q3AsIGluQXR0cikge1xyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gbnVsbCxcclxuICAgICAgICBlbnRpdHlDb2RlUG9pbnRzQ291bnQgPSAwLFxyXG4gICAgICAgIGNwID0gc3RhcnRDcCxcclxuICAgICAgICBsZWFmID0gTkFNRURfRU5USVRZX1RSSUVbY3BdLFxyXG4gICAgICAgIGNvbnN1bWVkQ291bnQgPSAxLFxyXG4gICAgICAgIHNlbWljb2xvblRlcm1pbmF0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKDsgbGVhZiAmJiBjcCAhPT0gJC5FT0Y7IGNwID0gdGhpcy5fY29uc3VtZSgpLCBjb25zdW1lZENvdW50KyssIGxlYWYgPSBsZWFmLmwgJiYgbGVhZi5sW2NwXSkge1xyXG4gICAgICAgIGlmIChsZWFmLmMpIHtcclxuICAgICAgICAgICAgLy9OT1RFOiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBuYW1lZCByZWZlcmVuY2UgbWF0Y2guIEJ1dCB3ZSBkb24ndCBzdG9wIGxvb2t1cCBhdCB0aGlzIHBvaW50LFxyXG4gICAgICAgICAgICAvL2JlY2F1c2UgbG9uZ2VyIG1hdGNoZXMgc3RpbGwgY2FuIGJlIGZvdW5kIChlLmcuICcmbm90JyBhbmQgJyZub3RpbjsnKSBleGNlcHQgdGhlIGNhc2VcclxuICAgICAgICAgICAgLy90aGVuIGZvdW5kIG1hdGNoIGlzIHRlcm1pbmF0ZWQgYnkgc2VtaWNvbG9uLlxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQ29kZVBvaW50cyA9IGxlYWYuYztcclxuICAgICAgICAgICAgZW50aXR5Q29kZVBvaW50c0NvdW50ID0gY29uc3VtZWRDb3VudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TRU1JQ09MT04pIHtcclxuICAgICAgICAgICAgICAgIHNlbWljb2xvblRlcm1pbmF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgaWYgKCFzZW1pY29sb25UZXJtaW5hdGVkKSB7XHJcbiAgICAgICAgICAgIC8vTk9URTogdW5jb25zdW1lIGV4Y2VzcyAoZS5nLiAnaXQnIGluICcmbm90aXQnKVxyXG4gICAgICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGNvbnN1bWVkQ291bnQgLSBlbnRpdHlDb2RlUG9pbnRzQ291bnQpO1xyXG5cclxuICAgICAgICAgICAgLy9OT1RFOiBJZiB0aGUgY2hhcmFjdGVyIHJlZmVyZW5jZSBpcyBiZWluZyBjb25zdW1lZCBhcyBwYXJ0IG9mIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIG5leHQgY2hhcmFjdGVyXHJcbiAgICAgICAgICAgIC8vaXMgZWl0aGVyIGEgVSswMDNEIEVRVUFMUyBTSUdOIGNoYXJhY3RlciAoPSkgb3IgYW4gYWxwaGFudW1lcmljIEFTQ0lJIGNoYXJhY3RlciwgdGhlbiwgZm9yIGhpc3RvcmljYWxcclxuICAgICAgICAgICAgLy9yZWFzb25zLCBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIG1hdGNoZWQgYWZ0ZXIgdGhlIFUrMDAyNiBBTVBFUlNBTkQgY2hhcmFjdGVyICgmKSBtdXN0IGJlXHJcbiAgICAgICAgICAgIC8vdW5jb25zdW1lZCwgYW5kIG5vdGhpbmcgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgICAgIC8vSG93ZXZlciwgaWYgdGhpcyBuZXh0IGNoYXJhY3RlciBpcyBpbiBmYWN0IGEgVSswMDNEIEVRVUFMUyBTSUdOIGNoYXJhY3RlciAoPSksIHRoZW4gdGhpcyBpcyBhXHJcbiAgICAgICAgICAgIC8vcGFyc2UgZXJyb3IsIGJlY2F1c2Ugc29tZSBsZWdhY3kgdXNlciBhZ2VudHMgd2lsbCBtaXNpbnRlcnByZXQgdGhlIG1hcmt1cCBpbiB0aG9zZSBjYXNlcy5cclxuICAgICAgICAgICAgLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCN0b2tlbml6aW5nLWNoYXJhY3Rlci1yZWZlcmVuY2VzKVxyXG4gICAgICAgICAgICBpZiAoaW5BdHRyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV4dENwID0gdGhpcy5fbG9va2FoZWFkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRDcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBpc0FzY2lpQWxwaGFOdW1lcmljKG5leHRDcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGVudGl0eUNvZGVQb2ludHNDb3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZWZlcmVuY2VkQ29kZVBvaW50cztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGNvbnN1bWVkQ291bnQpO1xyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZSA9IGZ1bmN0aW9uIChzdGFydENwLCBpbkF0dHIpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVFbnRpdGllc0RlY29kaW5nIHx8IGlzV2hpdGVzcGFjZShzdGFydENwKSB8fCBzdGFydENwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOIHx8XHJcbiAgICAgICAgc3RhcnRDcCA9PT0gJC5BTVBFUlNBTkQgfHwgc3RhcnRDcCA9PT0gdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwIHx8IHN0YXJ0Q3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgLy9OT1RFOiBub3QgYSBjaGFyYWN0ZXIgcmVmZXJlbmNlLiBObyBjaGFyYWN0ZXJzIGFyZSBjb25zdW1lZCwgYW5kIG5vdGhpbmcgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoc3RhcnRDcCA9PT0gJC5OVU1CRVJfU0lHTikge1xyXG4gICAgICAgIC8vTk9URTogd2UgaGF2ZSBhIG51bWVyaWMgZW50aXR5IGNhbmRpZGF0ZSwgbm93IHdlIHNob3VsZCBkZXRlcm1pbmUgaWYgaXQncyBoZXggb3IgZGVjaW1hbFxyXG4gICAgICAgIHZhciBpc0hleCA9IGZhbHNlLFxyXG4gICAgICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuXHJcbiAgICAgICAgaWYgKG5leHRDcCA9PT0gJC5MQVRJTl9TTUFMTF9YIHx8IG5leHRDcCA9PT0gJC5MQVRJTl9DQVBJVEFMX1gpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29uc3VtZSgpO1xyXG4gICAgICAgICAgICBpc0hleCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuXHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBkaWdpdCB0aGlzIGlzIGEgbnVtZXJpYyBlbnRpdHkgZm9yIHN1cmUsIHNvIHdlIGNvbnN1bWUgaXRcclxuICAgICAgICBpZiAobmV4dENwICE9PSAkLkVPRiAmJiBpc0RpZ2l0KG5leHRDcCwgaXNIZXgpKVxyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NvbnN1bWVOdW1lcmljRW50aXR5KGlzSGV4KV07XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvL05PVEU6IG90aGVyd2lzZSB0aGlzIGlzIGEgYm9ndXMgbnVtYmVyIGVudGl0eSBhbmQgYSBwYXJzZSBlcnJvci4gVW5jb25zdW1lIHRoZSBudW1iZXIgc2lnblxyXG4gICAgICAgICAgICAvL2FuZCB0aGUgJ3gnLWNoYXJhY3RlciBpZiBhcHByb3ByaWF0ZS5cclxuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChpc0hleCA/IDIgOiAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uc3VtZU5hbWVkRW50aXR5KHN0YXJ0Q3AsIGluQXR0cik7XHJcbn07XHJcblxyXG4vL1N0YXRlIG1hY2hpbmVcclxudmFyIF8gPSBUb2tlbml6ZXIucHJvdG90eXBlO1xyXG5cclxuLy8xMi4yLjQuMSBEYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bREFUQV9TVEFURV0gPSBmdW5jdGlvbiBkYXRhU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBkYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9EQVRBX1NUQVRFXSA9IGZ1bmN0aW9uIGNoYXJhY3RlclJlZmVyZW5jZUluRGF0YVN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENvZGVQb2ludHMgPSB0aGlzLl9jb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKGNwLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKVxyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyhyZWZlcmVuY2VkQ29kZVBvaW50cyk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJyYnKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zIFJDREFUQSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkFNUEVSU0FORClcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9SQ0RBVEFfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBSQ0RBVEEgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDSEFSQUNURVJfUkVGRVJFTkNFX0lOX1JDREFUQV9TVEFURV0gPSBmdW5jdGlvbiBjaGFyYWN0ZXJSZWZlcmVuY2VJblJjZGF0YVN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gUkNEQVRBX1NUQVRFO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwID0gdm9pZCAwO1xyXG5cclxuICAgIHZhciByZWZlcmVuY2VkQ29kZVBvaW50cyA9IHRoaXMuX2NvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoY3AsIGZhbHNlKTtcclxuXHJcbiAgICBpZiAocmVmZXJlbmNlZENvZGVQb2ludHMpXHJcbiAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHJlZmVyZW5jZWRDb2RlUG9pbnRzKTtcclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignJicpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUgUkFXVEVYVCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42IFNjcmlwdCBkYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNyBQTEFJTlRFWFQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tQTEFJTlRFWFRfU1RBVEVdID0gZnVuY3Rpb24gcGxhaW50ZXh0U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjggVGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tUQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiB0YWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5FWENMQU1BVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBNQVJLVVBfREVDTEFSQVRJT05fT1BFTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBFTkRfVEFHX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlU3RhcnRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVFU1RJT05fTUFSSykge1xyXG4gICAgICAgIC8vTk9URTogY2FsbCBib2d1cyBjb21tZW50IHN0YXRlIGRpcmVjdGx5IHdpdGggY3VycmVudCBjb25zdW1lZCBjaGFyYWN0ZXIgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVjb25zdW1wdGlvbi5cclxuICAgICAgICB0aGlzW0JPR1VTX0NPTU1FTlRfU1RBVEVdKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuOSBFbmQgdGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tFTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gZW5kVGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvL05PVEU6IGNhbGwgYm9ndXMgY29tbWVudCBzdGF0ZSBkaXJlY3RseSB3aXRoIGN1cnJlbnQgY29uc3VtZWQgY2hhcmFjdGVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlY29uc3VtcHRpb24uXHJcbiAgICAgICAgdGhpc1tCT0dVU19DT01NRU5UX1NUQVRFXShjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTAgVGFnIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tUQUdfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiB0YWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTEgUkNEQVRBIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHJjZGF0YUxlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkNEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xMiBSQ0RBVEEgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkNEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xMyBSQ0RBVEEgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTQgUkFXVEVYVCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE1IFJBV1RFWFQgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dEVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE2IFJBV1RFWFQgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dEVuZFRhZ05hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHRoaXMudGVtcEJ1ZmYpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkFXVEVYVF9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTcgU2NyaXB0IGRhdGEgbGVzcy10aGFuIHNpZ24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhTGVzc1RoYW5TaWduU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignIScpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTggU2NyaXB0IGRhdGEgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xOSBTY3JpcHQgZGF0YSBlbmQgdGFnIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVuZFRhZ05hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yMCBTY3JpcHQgZGF0YSBlc2NhcGUgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZVN0YXJ0U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjEgU2NyaXB0IGRhdGEgZXNjYXBlIHN0YXJ0IGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlU3RhcnREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjIgU2NyaXB0IGRhdGEgZXNjYXBlZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjMgU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNCBTY3JpcHQgZGF0YSBlc2NhcGVkIGRhc2ggZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRGFzaERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLScpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc+Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNSBTY3JpcHQgZGF0YSBlc2NhcGVkIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjYgU2NyaXB0IGRhdGEgZXNjYXBlZCBlbmQgdGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZEVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI3IFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI4IFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGUgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSB8fCBjcCA9PT0gJC5TT0xJRFVTIHx8IGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuaXNUZW1wQnVmZmVyRXF1YWxUb1NjcmlwdFN0cmluZygpID8gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEUgOiBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjkgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMCBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMSBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBkYXNoIGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YURvdWJsZUVzY2FwZWREYXNoRGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPicpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMiBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVkTGVzc1RoYW5TaWduU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMyBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlIGVuZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVFbmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkgfHwgY3AgPT09ICQuU09MSURVUyB8fCBjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmlzVGVtcEJ1ZmZlckVxdWFsVG9TY3JpcHRTdHJpbmcoKSA/IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUgOiBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaCh0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzQgQmVmb3JlIGF0dHJpYnV0ZSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZUF0dHJpYnV0ZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8IGNwID09PSAkLkVRVUFMU19TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzUgQXR0cmlidXRlIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpXHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FUVVBTFNfU0lHTilcclxuICAgICAgICB0aGlzLl9sZWF2ZUF0dHJOYW1lKEJFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShEQVRBX1NUQVRFKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdG9DaGFyKGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzYgQWZ0ZXIgYXR0cmlidXRlIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9BVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckF0dHJpYnV0ZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVRVUFMU19TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzcgQmVmb3JlIGF0dHJpYnV0ZSB2YWx1ZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEVdID0gZnVuY3Rpb24gYmVmb3JlQXR0cmlidXRlVmFsdWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8IGNwID09PSAkLkVRVUFMU19TSUdOIHx8IGNwID09PSAkLkdSQVZFX0FDQ0VOVCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM4IEF0dHJpYnV0ZSB2YWx1ZSAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKSB7XHJcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwID0gJC5RVU9UQVRJT05fTUFSSztcclxuICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzkgQXR0cmlidXRlIHZhbHVlIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuQVBPU1RST1BIRTtcclxuICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDAgQXR0cmlidXRlIHZhbHVlICh1bnF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gYXR0cmlidXRlVmFsdWVVbnF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuR1JFQVRFUl9USEFOX1NJR047XHJcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8XHJcbiAgICAgICAgICAgICBjcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBjcCA9PT0gJC5HUkFWRV9BQ0NFTlQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40MSBDaGFyYWN0ZXIgcmVmZXJlbmNlIGluIGF0dHJpYnV0ZSB2YWx1ZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFXSA9IGZ1bmN0aW9uIGNoYXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlVmFsdWVTdGF0ZShjcCkge1xyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gdGhpcy5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShjcCwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZlcmVuY2VkQ29kZVBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIocmVmZXJlbmNlZENvZGVQb2ludHNbaV0pO1xyXG4gICAgfSBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSAnJic7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucmV0dXJuU3RhdGU7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDIgQWZ0ZXIgYXR0cmlidXRlIHZhbHVlIChxdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckF0dHJpYnV0ZVZhbHVlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQzIFNlbGYtY2xvc2luZyBzdGFydCB0YWcgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFXSA9IGZ1bmN0aW9uIHNlbGZDbG9zaW5nU3RhcnRUYWdTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc2VsZkNsb3NpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ0IEJvZ3VzIGNvbW1lbnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCT0dVU19DT01NRU5UX1NUQVRFXSA9IGZ1bmN0aW9uIGJvZ3VzQ29tbWVudFN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLl9jcmVhdGVDb21tZW50VG9rZW4oKTtcclxuXHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBjcCA9PT0gJC5OVUxMID8gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIgOiB0b0NoYXIoY3ApO1xyXG4gICAgICAgICAgICBjcCA9IHRoaXMuX2NvbnN1bWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ1IE1hcmt1cCBkZWNsYXJhdGlvbiBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gbWFya3VwRGVjbGFyYXRpb25PcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmICh0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuREFTSF9EQVNIX1NUUklORywgY3AsIHRydWUpKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBUlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkRPQ1RZUEVfU1RSSU5HLCBjcCwgZmFsc2UpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuYWxsb3dDREFUQSAmJiB0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuQ0RBVEFfU1RBUlRfU1RSSU5HLCBjcCwgdHJ1ZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENEQVRBX1NFQ1RJT05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy9OT1RFOiBjYWxsIGJvZ3VzIGNvbW1lbnQgc3RhdGUgZGlyZWN0bHkgd2l0aCBjdXJyZW50IGNvbnN1bWVkIGNoYXJhY3RlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWNvbnN1bXB0aW9uLlxyXG4gICAgICAgIHRoaXNbQk9HVVNfQ09NTUVOVF9TVEFURV0oY3ApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ2IENvbW1lbnQgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ3IENvbW1lbnQgc3RhcnQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfU1RBUlRfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhcnREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40OCBDb21tZW50IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0RBU0hfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDkgQ29tbWVudCBlbmQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUwIENvbW1lbnQgZW5kIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9FTkRfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfQkFOR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTEgQ29tbWVudCBlbmQgYmFuZyBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX0JBTkdfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZEJhbmdTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0RBU0hfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MiBET0NUWVBFIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MyBCZWZvcmUgRE9DVFlQRSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU0IERPQ1RZUEUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLm5hbWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5uYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTUgQWZ0ZXIgRE9DVFlQRSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLlBVQkxJQ19TVFJJTkcsIGNwLCBmYWxzZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLlNZU1RFTV9TVFJJTkcsIGNwLCBmYWxzZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU2IEFmdGVyIERPQ1RZUEUgcHVibGljIGtleXdvcmQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZVB1YmxpY0tleXdvcmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTcgQmVmb3JlIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTggRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVB1YmxpY0lkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41OSBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlUHVibGljSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjAgQWZ0ZXIgRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlUHVibGljSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42MSBCZXR3ZWVuIERPQ1RZUEUgcHVibGljIGFuZCBzeXN0ZW0gaWRlbnRpZmllcnMgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNfU1RBVEVdID0gZnVuY3Rpb24gYmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVyc1N0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjIgQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0ga2V5d29yZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlU3lzdGVtS2V5d29yZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42MyBCZWZvcmUgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NCBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIChkb3VibGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3lzdGVtSWRlbnRpZmllckRvdWJsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjY1IERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgKHNpbmdsZS1xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU2luZ2xlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NiBBZnRlciBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NyBCb2d1cyBET0NUWVBFIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQk9HVVNfRE9DVFlQRV9TVEFURV0gPSBmdW5jdGlvbiBib2d1c0RvY3R5cGVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjY4IENEQVRBIHNlY3Rpb24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDREFUQV9TRUNUSU9OX1NUQVRFXSA9IGZ1bmN0aW9uIGNkYXRhU2VjdGlvblN0YXRlKGNwKSB7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuQ0RBVEFfRU5EX1NUUklORywgY3AsIHRydWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgICAgICAgICAgY3AgPSB0aGlzLl9jb25zdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL05vZGUgY29uc3RydWN0aW9uXHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiAnI2RvY3VtZW50JyxcclxuICAgICAgICBxdWlya3NNb2RlOiBmYWxzZSxcclxuICAgICAgICBjaGlsZE5vZGVzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnQtZnJhZ21lbnQnLFxyXG4gICAgICAgIHF1aXJrc01vZGU6IGZhbHNlLFxyXG4gICAgICAgIGNoaWxkTm9kZXM6IFtdXHJcbiAgICB9O1xyXG59O1xyXG5cclxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgdGFnTmFtZTogdGFnTmFtZSxcclxuICAgICAgICBhdHRyczogYXR0cnMsXHJcbiAgICAgICAgbmFtZXNwYWNlVVJJOiBuYW1lc3BhY2VVUkksXHJcbiAgICAgICAgY2hpbGROb2RlczogW10sXHJcbiAgICAgICAgcGFyZW50Tm9kZTogbnVsbFxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBub2RlTmFtZTogJyNjb21tZW50JyxcclxuICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH07XHJcbn07XHJcblxyXG52YXIgY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjdGV4dCcsXHJcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vL1RyZWUgbXV0YXRpb25cclxuZXhwb3J0cy5zZXREb2N1bWVudFR5cGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xyXG4gICAgdmFyIGRvY3R5cGVOb2RlID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGROb2Rlc1tpXS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnKSB7XHJcbiAgICAgICAgICAgIGRvY3R5cGVOb2RlID0gZG9jdW1lbnQuY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb2N0eXBlTm9kZSkge1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLnB1YmxpY0lkID0gcHVibGljSWQ7XHJcbiAgICAgICAgZG9jdHlwZU5vZGUuc3lzdGVtSWQgPSBzeXN0ZW1JZDtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBhcHBlbmRDaGlsZChkb2N1bWVudCwge1xyXG4gICAgICAgICAgICBub2RlTmFtZTogJyNkb2N1bWVudFR5cGUnLFxyXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICBwdWJsaWNJZDogcHVibGljSWQsXHJcbiAgICAgICAgICAgIHN5c3RlbUlkOiBzeXN0ZW1JZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5zZXRRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XHJcbiAgICBkb2N1bWVudC5xdWlya3NNb2RlID0gdHJ1ZTtcclxufTtcclxuXHJcbmV4cG9ydHMuaXNRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzTW9kZTtcclxufTtcclxuXHJcbnZhciBhcHBlbmRDaGlsZCA9IGV4cG9ydHMuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnB1c2gobmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG59O1xyXG5cclxudmFyIGluc2VydEJlZm9yZSA9IGV4cG9ydHMuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcclxuICAgIHZhciBpbnNlcnRpb25JZHggPSBwYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihyZWZlcmVuY2VOb2RlKTtcclxuXHJcbiAgICBwYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5kZXRhY2hOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICB2YXIgaWR4ID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcclxuXHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlID0gbnVsbDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dCA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0KSB7XHJcbiAgICBpZiAocGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBwcmV2Tm9kZSA9IHBhcmVudE5vZGUuY2hpbGROb2Rlc1twYXJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIGlmIChwcmV2Tm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jykge1xyXG4gICAgICAgICAgICBwcmV2Tm9kZS52YWx1ZSArPSB0ZXh0O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFwcGVuZENoaWxkKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpKTtcclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0LCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2YocmVmZXJlbmNlTm9kZSkgLSAxXTtcclxuXHJcbiAgICBpZiAocHJldk5vZGUgJiYgcHJldk5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCcpXHJcbiAgICAgICAgcHJldk5vZGUudmFsdWUgKz0gdGV4dDtcclxuICAgIGVsc2VcclxuICAgICAgICBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgY3JlYXRlVGV4dE5vZGUodGV4dCksIHJlZmVyZW5jZU5vZGUpO1xyXG59O1xyXG5cclxuZXhwb3J0cy5hZG9wdEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAocmVjaXBpZW50Tm9kZSwgYXR0cnMpIHtcclxuICAgIHZhciByZWNpcGllbnRBdHRyc01hcCA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjaXBpZW50Tm9kZS5hdHRycy5sZW5ndGg7IGkrKylcclxuICAgICAgICByZWNpcGllbnRBdHRyc01hcC5wdXNoKHJlY2lwaWVudE5vZGUuYXR0cnNbaV0ubmFtZSk7XHJcblxyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmIChyZWNpcGllbnRBdHRyc01hcC5pbmRleE9mKGF0dHJzW2pdLm5hbWUpID09PSAtMSlcclxuICAgICAgICAgICAgcmVjaXBpZW50Tm9kZS5hdHRycy5wdXNoKGF0dHJzW2pdKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vL1RyZWUgdHJhdmVyc2luZ1xyXG5leHBvcnRzLmdldEZpcnN0Q2hpbGQgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlc1swXTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0Q2hpbGROb2RlcyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldEF0dHJMaXN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLmF0dHJzO1xyXG59O1xyXG5cclxuLy9Ob2RlIGRhdGFcclxuZXhwb3J0cy5nZXRUYWdOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBlbGVtZW50LnRhZ05hbWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldE5hbWVzcGFjZVVSSSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lc3BhY2VVUkk7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldFRleHROb2RlQ29udGVudCA9IGZ1bmN0aW9uICh0ZXh0Tm9kZSkge1xyXG4gICAgcmV0dXJuIHRleHROb2RlLnZhbHVlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRDb21tZW50Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAoY29tbWVudE5vZGUpIHtcclxuICAgIHJldHVybiBjb21tZW50Tm9kZS5kYXRhO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlTmFtZSA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlLm5hbWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlLnB1YmxpY0lkO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZS5zeXN0ZW1JZDtcclxufTtcclxuXHJcbi8vTm9kZSB0eXBlc1xyXG5leHBvcnRzLmlzVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjY29tbWVudCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzRG9jdW1lbnRUeXBlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0VsZW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiAhIW5vZGUudGFnTmFtZTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIERvY3R5cGUgPSByZXF1aXJlKCcuLi9jb21tb24vZG9jdHlwZScpO1xyXG5cclxuLy9Db252ZXJzaW9uIHRhYmxlcyBmb3IgRE9NIExldmVsMSBzdHJ1Y3R1cmUgZW11bGF0aW9uXHJcbnZhciBub2RlVHlwZXMgPSB7XHJcbiAgICBlbGVtZW50OiAxLFxyXG4gICAgdGV4dDogMyxcclxuICAgIGNkYXRhOiA0LFxyXG4gICAgY29tbWVudDogOFxyXG59O1xyXG5cclxudmFyIG5vZGVQcm9wZXJ0eVNob3J0aGFuZHMgPSB7XHJcbiAgICB0YWdOYW1lOiAnbmFtZScsXHJcbiAgICBjaGlsZE5vZGVzOiAnY2hpbGRyZW4nLFxyXG4gICAgcGFyZW50Tm9kZTogJ3BhcmVudCcsXHJcbiAgICBwcmV2aW91c1NpYmxpbmc6ICdwcmV2JyxcclxuICAgIG5leHRTaWJsaW5nOiAnbmV4dCcsXHJcbiAgICBub2RlVmFsdWU6ICdkYXRhJ1xyXG59O1xyXG5cclxuLy9Ob2RlXHJcbnZhciBOb2RlID0gZnVuY3Rpb24gKHByb3BzKSB7XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcclxuICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSlcclxuICAgICAgICAgICAgdGhpc1trZXldID0gcHJvcHNba2V5XTtcclxuICAgIH1cclxufTtcclxuXHJcbk5vZGUucHJvdG90eXBlID0ge1xyXG4gICAgZ2V0IGZpcnN0Q2hpbGQoKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcclxuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW5bMF0gfHwgbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0IGxhc3RDaGlsZCgpIHtcclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbiAmJiBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXSB8fCBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXQgbm9kZVR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGVUeXBlc1t0aGlzLnR5cGVdIHx8IG5vZGVUeXBlcy5lbGVtZW50O1xyXG4gICAgfVxyXG59O1xyXG5cclxuT2JqZWN0LmtleXMobm9kZVByb3BlcnR5U2hvcnRoYW5kcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICB2YXIgc2hvcnRoYW5kID0gbm9kZVByb3BlcnR5U2hvcnRoYW5kc1trZXldO1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwga2V5LCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3Nob3J0aGFuZF0gfHwgbnVsbDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzW3Nob3J0aGFuZF0gPSB2YWw7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuXHJcbi8vTm9kZSBjb25zdHJ1Y3Rpb25cclxuZXhwb3J0cy5jcmVhdGVEb2N1bWVudCA9XHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBuZXcgTm9kZSh7XHJcbiAgICAgICAgdHlwZTogJ3Jvb3QnLFxyXG4gICAgICAgIG5hbWU6ICdyb290JyxcclxuICAgICAgICBwYXJlbnQ6IG51bGwsXHJcbiAgICAgICAgcHJldjogbnVsbCxcclxuICAgICAgICBuZXh0OiBudWxsLFxyXG4gICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG5leHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAodGFnTmFtZSwgbmFtZXNwYWNlVVJJLCBhdHRycykge1xyXG4gICAgdmFyIGF0dHJpYnMgPSB7fSxcclxuICAgICAgICBhdHRyaWJzTmFtZXNwYWNlID0ge30sXHJcbiAgICAgICAgYXR0cmlic1ByZWZpeCA9IHt9O1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYXR0ck5hbWUgPSBhdHRyc1tpXS5uYW1lO1xyXG5cclxuICAgICAgICBhdHRyaWJzW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xyXG4gICAgICAgIGF0dHJpYnNOYW1lc3BhY2VbYXR0ck5hbWVdID0gYXR0cnNbaV0ubmFtZXNwYWNlO1xyXG4gICAgICAgIGF0dHJpYnNQcmVmaXhbYXR0ck5hbWVdID0gYXR0cnNbaV0ucHJlZml4O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgTm9kZSh7XHJcbiAgICAgICAgdHlwZTogdGFnTmFtZSA9PT0gJ3NjcmlwdCcgfHwgdGFnTmFtZSA9PT0gJ3N0eWxlJyA/IHRhZ05hbWUgOiAndGFnJyxcclxuICAgICAgICBuYW1lOiB0YWdOYW1lLFxyXG4gICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlVVJJLFxyXG4gICAgICAgIGF0dHJpYnM6IGF0dHJpYnMsXHJcbiAgICAgICAgJ3gtYXR0cmlic05hbWVzcGFjZSc6IGF0dHJpYnNOYW1lc3BhY2UsXHJcbiAgICAgICAgJ3gtYXR0cmlic1ByZWZpeCc6IGF0dHJpYnNQcmVmaXgsXHJcbiAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgIHBhcmVudDogbnVsbCxcclxuICAgICAgICBwcmV2OiBudWxsLFxyXG4gICAgICAgIG5leHQ6IG51bGxcclxuICAgIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0cy5jcmVhdGVDb21tZW50Tm9kZSA9IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xyXG4gICAgICAgIHR5cGU6ICdjb21tZW50JyxcclxuICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgIHBhcmVudDogbnVsbCxcclxuICAgICAgICBwcmV2OiBudWxsLFxyXG4gICAgICAgIG5leHQ6IG51bGxcclxuICAgIH0pO1xyXG59O1xyXG5cclxudmFyIGNyZWF0ZVRleHROb2RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xyXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICBkYXRhOiB2YWx1ZSxcclxuICAgICAgICBwYXJlbnQ6IG51bGwsXHJcbiAgICAgICAgcHJldjogbnVsbCxcclxuICAgICAgICBuZXh0OiBudWxsXHJcbiAgICB9KTtcclxufTtcclxuXHJcblxyXG4vL1RyZWUgbXV0YXRpb25cclxuZXhwb3J0cy5zZXREb2N1bWVudFR5cGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xyXG4gICAgdmFyIGRhdGEgPSBEb2N0eXBlLnNlcmlhbGl6ZUNvbnRlbnQobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSxcclxuICAgICAgICBkb2N0eXBlTm9kZSA9IG51bGw7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5jaGlsZHJlbltpXS50eXBlID09PSAnZGlyZWN0aXZlJyAmJiBkb2N1bWVudC5jaGlsZHJlbltpXS5uYW1lID09PSAnIWRvY3R5cGUnKSB7XHJcbiAgICAgICAgICAgIGRvY3R5cGVOb2RlID0gZG9jdW1lbnQuY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG9jdHlwZU5vZGUpIHtcclxuICAgICAgICBkb2N0eXBlTm9kZS5kYXRhID0gZGF0YTtcclxuICAgICAgICBkb2N0eXBlTm9kZVsneC1uYW1lJ10gPSBuYW1lO1xyXG4gICAgICAgIGRvY3R5cGVOb2RlWyd4LXB1YmxpY0lkJ10gPSBwdWJsaWNJZDtcclxuICAgICAgICBkb2N0eXBlTm9kZVsneC1zeXN0ZW1JZCddID0gc3lzdGVtSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQsIG5ldyBOb2RlKHtcclxuICAgICAgICAgICAgdHlwZTogJ2RpcmVjdGl2ZScsXHJcbiAgICAgICAgICAgIG5hbWU6ICchZG9jdHlwZScsXHJcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgICAgICd4LW5hbWUnOiBuYW1lLFxyXG4gICAgICAgICAgICAneC1wdWJsaWNJZCc6IHB1YmxpY0lkLFxyXG4gICAgICAgICAgICAneC1zeXN0ZW1JZCc6IHN5c3RlbUlkXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxufTtcclxuXHJcbmV4cG9ydHMuc2V0UXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xyXG4gICAgZG9jdW1lbnQucXVpcmtzTW9kZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzUXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LnF1aXJrc01vZGU7XHJcbn07XHJcblxyXG52YXIgYXBwZW5kQ2hpbGQgPSBleHBvcnRzLmFwcGVuZENoaWxkID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUpIHtcclxuICAgIHZhciBwcmV2ID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgIGlmIChwcmV2KSB7XHJcbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcclxuICAgICAgICBuZXdOb2RlLnByZXYgPSBwcmV2O1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmVudE5vZGUuY2hpbGRyZW4ucHVzaChuZXdOb2RlKTtcclxuICAgIG5ld05vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcclxufTtcclxuXHJcbnZhciBpbnNlcnRCZWZvcmUgPSBleHBvcnRzLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICB2YXIgaW5zZXJ0aW9uSWR4ID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5pbmRleE9mKHJlZmVyZW5jZU5vZGUpLFxyXG4gICAgICAgIHByZXYgPSByZWZlcmVuY2VOb2RlLnByZXY7XHJcblxyXG4gICAgaWYgKHByZXYpIHtcclxuICAgICAgICBwcmV2Lm5leHQgPSBuZXdOb2RlO1xyXG4gICAgICAgIG5ld05vZGUucHJldiA9IHByZXY7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmZXJlbmNlTm9kZS5wcmV2ID0gbmV3Tm9kZTtcclxuICAgIG5ld05vZGUubmV4dCA9IHJlZmVyZW5jZU5vZGU7XHJcblxyXG4gICAgcGFyZW50Tm9kZS5jaGlsZHJlbi5zcGxpY2UoaW5zZXJ0aW9uSWR4LCAwLCBuZXdOb2RlKTtcclxuICAgIG5ld05vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcclxufTtcclxuXHJcbmV4cG9ydHMuZGV0YWNoTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICBpZiAobm9kZS5wYXJlbnQpIHtcclxuICAgICAgICB2YXIgaWR4ID0gbm9kZS5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlKSxcclxuICAgICAgICAgICAgcHJldiA9IG5vZGUucHJldixcclxuICAgICAgICAgICAgbmV4dCA9IG5vZGUubmV4dDtcclxuXHJcbiAgICAgICAgbm9kZS5wcmV2ID0gbnVsbDtcclxuICAgICAgICBub2RlLm5leHQgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAocHJldilcclxuICAgICAgICAgICAgcHJldi5uZXh0ID0gbmV4dDtcclxuXHJcbiAgICAgICAgaWYgKG5leHQpXHJcbiAgICAgICAgICAgIG5leHQucHJldiA9IHByZXY7XHJcblxyXG4gICAgICAgIG5vZGUucGFyZW50LmNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIG5vZGUucGFyZW50ID0gbnVsbDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dCA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0KSB7XHJcbiAgICB2YXIgbGFzdENoaWxkID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgIGlmIChsYXN0Q2hpbGQgJiYgbGFzdENoaWxkLnR5cGUgPT09ICd0ZXh0JylcclxuICAgICAgICBsYXN0Q2hpbGQuZGF0YSArPSB0ZXh0O1xyXG4gICAgZWxzZVxyXG4gICAgICAgIGFwcGVuZENoaWxkKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpKTtcclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0LCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkcmVuW3BhcmVudE5vZGUuY2hpbGRyZW4uaW5kZXhPZihyZWZlcmVuY2VOb2RlKSAtIDFdO1xyXG5cclxuICAgIGlmIChwcmV2Tm9kZSAmJiBwcmV2Tm9kZS50eXBlID09PSAndGV4dCcpXHJcbiAgICAgICAgcHJldk5vZGUuZGF0YSArPSB0ZXh0O1xyXG4gICAgZWxzZVxyXG4gICAgICAgIGluc2VydEJlZm9yZShwYXJlbnROb2RlLCBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSwgcmVmZXJlbmNlTm9kZSk7XHJcbn07XHJcblxyXG5leHBvcnRzLmFkb3B0QXR0cmlidXRlcyA9IGZ1bmN0aW9uIChyZWNpcGllbnROb2RlLCBhdHRycykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBhdHRyTmFtZSA9IGF0dHJzW2ldLm5hbWU7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgcmVjaXBpZW50Tm9kZS5hdHRyaWJzW2F0dHJOYW1lXSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmVjaXBpZW50Tm9kZS5hdHRyaWJzW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xyXG4gICAgICAgICAgICByZWNpcGllbnROb2RlWyd4LWF0dHJpYnNOYW1lc3BhY2UnXVthdHRyTmFtZV0gPSBhdHRyc1tpXS5uYW1lc3BhY2U7XHJcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGVbJ3gtYXR0cmlic1ByZWZpeCddW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnByZWZpeDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy9UcmVlIHRyYXZlcnNpbmdcclxuZXhwb3J0cy5nZXRGaXJzdENoaWxkID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLmNoaWxkcmVuWzBdO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRDaGlsZE5vZGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLmNoaWxkcmVuO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnBhcmVudDtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0QXR0ckxpc3QgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgdmFyIGF0dHJMaXN0ID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgbmFtZSBpbiBub2RlLmF0dHJpYnMpIHtcclxuICAgICAgICBpZiAobm9kZS5hdHRyaWJzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGF0dHJMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBub2RlLmF0dHJpYnNbbmFtZV0sXHJcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5vZGVbJ3gtYXR0cmlic05hbWVzcGFjZSddW25hbWVdLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiBub2RlWyd4LWF0dHJpYnNQcmVmaXgnXVtuYW1lXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGF0dHJMaXN0O1xyXG59O1xyXG5cclxuXHJcbi8vTm9kZSBkYXRhXHJcbmV4cG9ydHMuZ2V0VGFnTmFtZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXROYW1lc3BhY2VVUkkgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQubmFtZXNwYWNlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRUZXh0Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAodGV4dE5vZGUpIHtcclxuICAgIHJldHVybiB0ZXh0Tm9kZS5kYXRhO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRDb21tZW50Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAoY29tbWVudE5vZGUpIHtcclxuICAgIHJldHVybiBjb21tZW50Tm9kZS5kYXRhO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlTmFtZSA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlWyd4LW5hbWUnXTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZVB1YmxpY0lkID0gZnVuY3Rpb24gKGRvY3R5cGVOb2RlKSB7XHJcbiAgICByZXR1cm4gZG9jdHlwZU5vZGVbJ3gtcHVibGljSWQnXTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkID0gZnVuY3Rpb24gKGRvY3R5cGVOb2RlKSB7XHJcbiAgICByZXR1cm4gZG9jdHlwZU5vZGVbJ3gtc3lzdGVtSWQnXTtcclxufTtcclxuXHJcblxyXG4vL05vZGUgdHlwZXNcclxuZXhwb3J0cy5pc1RleHROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnR5cGUgPT09ICd0ZXh0JztcclxufTtcclxuXHJcbmV4cG9ydHMuaXNDb21tZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSAnY29tbWVudCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzRG9jdW1lbnRUeXBlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSAnZGlyZWN0aXZlJyAmJiBub2RlLm5hbWUgPT09ICchZG9jdHlwZSc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzRWxlbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuICEhbm9kZS5hdHRyaWJzO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL0NvbnN0XHJcbnZhciBOT0FIX0FSS19DQVBBQ0lUWSA9IDM7XHJcblxyXG4vL0xpc3Qgb2YgZm9ybWF0dGluZyBlbGVtZW50c1xyXG52YXIgRm9ybWF0dGluZ0VsZW1lbnRMaXN0ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodHJlZUFkYXB0ZXIpIHtcclxuICAgIHRoaXMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZW50cmllcyA9IFtdO1xyXG4gICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyO1xyXG4gICAgdGhpcy5ib29rbWFyayA9IG51bGw7XHJcbn07XHJcblxyXG4vL0VudHJ5IHR5cGVzXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkgPSAnTUFSS0VSX0VOVFJZJztcclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LkVMRU1FTlRfRU5UUlkgPSAnRUxFTUVOVF9FTlRSWSc7XHJcblxyXG4vL05vYWggQXJrJ3MgY29uZGl0aW9uXHJcbi8vT1BUSU1JWkFUSU9OOiBhdCBmaXJzdCB3ZSB0cnkgdG8gZmluZCBwb3NzaWJsZSBjYW5kaWRhdGVzIGZvciBleGNsdXNpb24gdXNpbmdcclxuLy9saWdodHdlaWdodCBoZXVyaXN0aWNzIHdpdGhvdXQgdGhvcm91Z2ggYXR0cmlidXRlcyBjaGVjay5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5fZ2V0Tm9haEFya0NvbmRpdGlvbkNhbmRpZGF0ZXMgPSBmdW5jdGlvbiAobmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGNhbmRpZGF0ZXMgPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5sZW5ndGggPj0gTk9BSF9BUktfQ0FQQUNJVFkpIHtcclxuICAgICAgICB2YXIgbmVBdHRyc0xlbmd0aCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QobmV3RWxlbWVudCkubGVuZ3RoLFxyXG4gICAgICAgICAgICBuZVRhZ05hbWUgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobmV3RWxlbWVudCksXHJcbiAgICAgICAgICAgIG5lTmFtZXNwYWNlVVJJID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkobmV3RWxlbWVudCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICB2YXIgZWxlbWVudCA9IGVudHJ5LmVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50QXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gbmVUYWdOYW1lICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gbmVOYW1lc3BhY2VVUkkgJiZcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRBdHRycy5sZW5ndGggPT09IG5lQXR0cnNMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7aWR4OiBpLCBhdHRyczogZWxlbWVudEF0dHJzfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhbmRpZGF0ZXMubGVuZ3RoIDwgTk9BSF9BUktfQ0FQQUNJVFkgPyBbXSA6IGNhbmRpZGF0ZXM7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLl9lbnN1cmVOb2FoQXJrQ29uZGl0aW9uID0gZnVuY3Rpb24gKG5ld0VsZW1lbnQpIHtcclxuICAgIHZhciBjYW5kaWRhdGVzID0gdGhpcy5fZ2V0Tm9haEFya0NvbmRpdGlvbkNhbmRpZGF0ZXMobmV3RWxlbWVudCksXHJcbiAgICAgICAgY0xlbmd0aCA9IGNhbmRpZGF0ZXMubGVuZ3RoO1xyXG5cclxuICAgIGlmIChjTGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIG5lQXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KG5ld0VsZW1lbnQpLFxyXG4gICAgICAgICAgICBuZUF0dHJzTGVuZ3RoID0gbmVBdHRycy5sZW5ndGgsXHJcbiAgICAgICAgICAgIG5lQXR0cnNNYXAgPSB7fTtcclxuXHJcbiAgICAgICAgLy9OT1RFOiBidWlsZCBhdHRycyBtYXAgZm9yIHRoZSBuZXcgZWxlbWVudCBzbyB3ZSBjYW4gcGVyZm9ybSBmYXN0IGxvb2t1cHNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5lQXR0cnNMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbmVBdHRyID0gbmVBdHRyc1tpXTtcclxuXHJcbiAgICAgICAgICAgIG5lQXR0cnNNYXBbbmVBdHRyLm5hbWVdID0gbmVBdHRyLnZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZUF0dHJzTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjTGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjQXR0ciA9IGNhbmRpZGF0ZXNbal0uYXR0cnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5lQXR0cnNNYXBbY0F0dHIubmFtZV0gIT09IGNBdHRyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5zcGxpY2UoaiwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY0xlbmd0aC0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA8IE5PQUhfQVJLX0NBUEFDSVRZKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9OT1RFOiByZW1vdmUgYm90dG9tbW9zdCBjYW5kaWRhdGVzIHVudGlsIE5vYWgncyBBcmsgY29uZGl0aW9uIHdpbGwgbm90IGJlIG1ldFxyXG4gICAgICAgIGZvciAodmFyIGkgPSBjTGVuZ3RoIC0gMTsgaSA+PSBOT0FIX0FSS19DQVBBQ0lUWSAtIDE7IGktLSkge1xyXG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGNhbmRpZGF0ZXNbaV0uaWR4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGgtLTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL011dGF0aW9uc1xyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmluc2VydE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZW50cmllcy5wdXNoKHt0eXBlOiBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZfSk7XHJcbiAgICB0aGlzLmxlbmd0aCsrO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5wdXNoRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCB0b2tlbikge1xyXG4gICAgdGhpcy5fZW5zdXJlTm9haEFya0NvbmRpdGlvbihlbGVtZW50KTtcclxuXHJcbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XHJcbiAgICAgICAgdHlwZTogRm9ybWF0dGluZ0VsZW1lbnRMaXN0LkVMRU1FTlRfRU5UUlksXHJcbiAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICB0b2tlbjogdG9rZW5cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubGVuZ3RoKys7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmluc2VydEVsZW1lbnRBZnRlckJvb2ttYXJrID0gZnVuY3Rpb24gKGVsZW1lbnQsIHRva2VuKSB7XHJcbiAgICB2YXIgYm9va21hcmtJZHggPSB0aGlzLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgZm9yICg7IGJvb2ttYXJrSWR4ID49IDA7IGJvb2ttYXJrSWR4LS0pIHtcclxuICAgICAgICBpZiAodGhpcy5lbnRyaWVzW2Jvb2ttYXJrSWR4XSA9PT0gdGhpcy5ib29rbWFyaylcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRyaWVzLnNwbGljZShib29rbWFya0lkeCArIDEsIDAsIHtcclxuICAgICAgICB0eXBlOiBGb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSxcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIHRva2VuOiB0b2tlblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sZW5ndGgrKztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUucmVtb3ZlRW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50cmllc1tpXSA9PT0gZW50cnkpIHtcclxuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGgtLTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5jbGVhclRvTGFzdE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllcy5wb3AoKTtcclxuXHJcbiAgICAgICAgdGhpcy5sZW5ndGgtLTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy9TZWFyY2hcclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5nZXRFbGVtZW50RW50cnlJblNjb3BlV2l0aFRhZ05hbWUgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmVudHJpZXNbaV07XHJcblxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZKVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbnRyeS5lbGVtZW50KSA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5nZXRFbGVtZW50RW50cnkgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLmVudHJpZXNbaV07XHJcblxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSAmJiBlbnRyeS5lbGVtZW50ID09IGVsZW1lbnQpXHJcbiAgICAgICAgICAgIHJldHVybiBlbnRyeTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIE9wZW5FbGVtZW50U3RhY2sgPSByZXF1aXJlKCcuL29wZW5fZWxlbWVudF9zdGFjaycpLFxyXG4gICAgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxyXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XHJcblxyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gSFRNTC5UQUdfTkFNRVM7XHJcblxyXG5cclxuZnVuY3Rpb24gc2V0RW5kTG9jYXRpb24oZWxlbWVudCwgY2xvc2luZ1Rva2VuLCB0cmVlQWRhcHRlcikge1xyXG4gICAgdmFyIGxvYyA9IGVsZW1lbnQuX19sb2NhdGlvbjtcclxuXHJcbiAgICBpZiAoIWxvYylcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKCFsb2Muc3RhcnRUYWcpIHtcclxuICAgICAgICBsb2Muc3RhcnRUYWcgPSB7XHJcbiAgICAgICAgICAgIHN0YXJ0OiBsb2Muc3RhcnQsXHJcbiAgICAgICAgICAgIGVuZDogbG9jLmVuZFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNsb3NpbmdUb2tlbi5sb2NhdGlvbikge1xyXG4gICAgICAgIHZhciB0biA9IHRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXHJcbiAgICAgICAgICAgIC8vIE5PVEU6IEZvciBjYXNlcyBsaWtlIDxwPiA8cD4gPC9wPiAtIEZpcnN0ICdwJyBjbG9zZXMgd2l0aG91dCBhIGNsb3NpbmcgdGFnIGFuZFxyXG4gICAgICAgICAgICAvLyBmb3IgY2FzZXMgbGlrZSA8dGQ+IDxwPiA8L3RkPiAtICdwJyBjbG9zZXMgd2l0aG91dCBhIGNsb3NpbmcgdGFnXHJcbiAgICAgICAgICAgIGlzQ2xvc2luZ0VuZFRhZyA9IGNsb3NpbmdUb2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0biA9PT0gY2xvc2luZ1Rva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgICAgIGlmIChpc0Nsb3NpbmdFbmRUYWcpIHtcclxuICAgICAgICAgICAgbG9jLmVuZFRhZyA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiBjbG9zaW5nVG9rZW4ubG9jYXRpb24uc3RhcnQsXHJcbiAgICAgICAgICAgICAgICBlbmQ6IGNsb3NpbmdUb2tlbi5sb2NhdGlvbi5lbmRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxvYy5lbmQgPSBjbG9zaW5nVG9rZW4ubG9jYXRpb24uZW5kO1xyXG4gICAgfVxyXG59XHJcblxyXG4vL05PVEU6IHBhdGNoIG9wZW4gZWxlbWVudHMgc3RhY2ssIHNvIHdlIGNhbiBhc3NpZ24gZW5kIGxvY2F0aW9uIGZvciB0aGUgZWxlbWVudHNcclxuZnVuY3Rpb24gcGF0Y2hPcGVuRWxlbWVudHNTdGFjayhzdGFjaywgcGFyc2VyKSB7XHJcbiAgICB2YXIgdHJlZUFkYXB0ZXIgPSBwYXJzZXIudHJlZUFkYXB0ZXI7XHJcblxyXG4gICAgc3RhY2sucG9wID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHNldEVuZExvY2F0aW9uKHRoaXMuY3VycmVudCwgcGFyc2VyLmN1cnJlbnRUb2tlbiwgdHJlZUFkYXB0ZXIpO1xyXG4gICAgICAgIE9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcC5jYWxsKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBzdGFjay5wb3BBbGxVcFRvSHRtbEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pXHJcbiAgICAgICAgICAgIHNldEVuZExvY2F0aW9uKHRoaXMuaXRlbXNbaV0sIHBhcnNlci5jdXJyZW50VG9rZW4sIHRyZWVBZGFwdGVyKTtcclxuXHJcbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wQWxsVXBUb0h0bWxFbGVtZW50LmNhbGwodGhpcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHN0YWNrLnJlbW92ZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgc2V0RW5kTG9jYXRpb24oZWxlbWVudCwgcGFyc2VyLmN1cnJlbnRUb2tlbiwgdHJlZUFkYXB0ZXIpO1xyXG4gICAgICAgIE9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnJlbW92ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiAocGFyc2VyKSB7XHJcbiAgICAvL05PVEU6IG9idGFpbiBQYXJzZXIgcHJvdG8gdGhpcyB3YXkgdG8gYXZvaWQgbW9kdWxlIGNpcmN1bGFyIHJlZmVyZW5jZXNcclxuICAgIHZhciBwYXJzZXJQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwYXJzZXIpLFxyXG4gICAgICAgIHRyZWVBZGFwdGVyID0gcGFyc2VyLnRyZWVBZGFwdGVyO1xyXG5cclxuXHJcbiAgICAvL05PVEU6IHBhdGNoIF9yZXNldCBtZXRob2RcclxuICAgIHBhcnNlci5fcmVzZXQgPSBmdW5jdGlvbiAoaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCkge1xyXG4gICAgICAgIHBhcnNlclByb3RvLl9yZXNldC5jYWxsKHRoaXMsIGh0bWwsIGRvY3VtZW50LCBmcmFnbWVudENvbnRleHQpO1xyXG5cclxuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGFzdEZvc3RlclBhcmVudGluZ0xvY2F0aW9uID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XHJcblxyXG4gICAgICAgIHBhdGNoT3BlbkVsZW1lbnRzU3RhY2sodGhpcy5vcGVuRWxlbWVudHMsIHBhcnNlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIHBhcnNlci5fcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gdG9rZW47XHJcbiAgICAgICAgcGFyc2VyUHJvdG8uX3Byb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQuY2FsbCh0aGlzLCB0b2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIHBhcnNlci5fcHJvY2Vzc1Rva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0b2tlbjtcclxuICAgICAgICBwYXJzZXJQcm90by5fcHJvY2Vzc1Rva2VuLmNhbGwodGhpcywgdG9rZW4pO1xyXG5cclxuICAgICAgICAvL05PVEU6IDxib2R5PiBhbmQgPGh0bWw+IGFyZSBuZXZlciBwb3BwZWQgZnJvbSB0aGUgc3RhY2ssIHNvIHdlIG5lZWQgdG8gdXBkYXRlZFxyXG4gICAgICAgIC8vdGhlaXIgZW5kIGxvY2F0aW9uIGV4cGxpY2l0bHkuXHJcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOICYmXHJcbiAgICAgICAgICAgICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwgfHxcclxuICAgICAgICAgICAgKHRva2VuLnRhZ05hbWUgPT09ICQuQk9EWSAmJiB0aGlzLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQk9EWSkpKSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09IHRva2VuLnRhZ05hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRFbmRMb2NhdGlvbihlbGVtZW50LCB0b2tlbiwgdHJlZUFkYXB0ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvL0RvY3R5cGVcclxuICAgIHBhcnNlci5fc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICAgICAgcGFyc2VyUHJvdG8uX3NldERvY3VtZW50VHlwZS5jYWxsKHRoaXMsIHRva2VuKTtcclxuXHJcbiAgICAgICAgdmFyIGRvY3VtZW50Q2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXModGhpcy5kb2N1bWVudCksXHJcbiAgICAgICAgICAgIGNuTGVuZ3RoID0gZG9jdW1lbnRDaGlsZHJlbi5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY25MZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGRvY3VtZW50Q2hpbGRyZW5baV07XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5pc0RvY3VtZW50VHlwZU5vZGUobm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUuX19sb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vRWxlbWVudHNcclxuICAgIHBhcnNlci5fYXR0YWNoRWxlbWVudFRvVHJlZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgLy9OT1RFOiBfYXR0YWNoRWxlbWVudFRvVHJlZSBpcyBjYWxsZWQgZnJvbSBfYXBwZW5kRWxlbWVudCwgX2luc2VydEVsZW1lbnQgYW5kIF9pbnNlcnRUZW1wbGF0ZSBtZXRob2RzLlxyXG4gICAgICAgIC8vU28gd2Ugd2lsbCB1c2UgdG9rZW4gbG9jYXRpb24gc3RvcmVkIGluIHRoaXMgbWV0aG9kcyBmb3IgdGhlIGVsZW1lbnQuXHJcbiAgICAgICAgZWxlbWVudC5fX2xvY2F0aW9uID0gdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uID0gbnVsbDtcclxuICAgICAgICBwYXJzZXJQcm90by5fYXR0YWNoRWxlbWVudFRvVHJlZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwYXJzZXIuX2FwcGVuZEVsZW1lbnQgPSBmdW5jdGlvbiAodG9rZW4sIG5hbWVzcGFjZVVSSSkge1xyXG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xyXG4gICAgICAgIHBhcnNlclByb3RvLl9hcHBlbmRFbGVtZW50LmNhbGwodGhpcywgdG9rZW4sIG5hbWVzcGFjZVVSSSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHBhcnNlci5faW5zZXJ0RWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XHJcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydEVsZW1lbnQuY2FsbCh0aGlzLCB0b2tlbiwgbmFtZXNwYWNlVVJJKTtcclxuICAgIH07XHJcblxyXG4gICAgcGFyc2VyLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xyXG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRUZW1wbGF0ZS5jYWxsKHRoaXMsIHRva2VuKTtcclxuXHJcbiAgICAgICAgdmFyIHRtcGxDb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQpWzBdO1xyXG5cclxuICAgICAgICB0bXBsQ29udGVudC5fX2xvY2F0aW9uID0gbnVsbDtcclxuICAgIH07XHJcblxyXG4gICAgcGFyc2VyLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydEZha2VSb290RWxlbWVudC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQuX19sb2NhdGlvbiA9IG51bGw7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vQ29tbWVudHNcclxuICAgIHBhcnNlci5fYXBwZW5kQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAodG9rZW4sIHBhcmVudCkge1xyXG4gICAgICAgIHBhcnNlclByb3RvLl9hcHBlbmRDb21tZW50Tm9kZS5jYWxsKHRoaXMsIHRva2VuLCBwYXJlbnQpO1xyXG5cclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcclxuICAgICAgICAgICAgY29tbWVudE5vZGUgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgY29tbWVudE5vZGUuX19sb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xyXG4gICAgfTtcclxuXHJcbiAgICAvL1RleHRcclxuICAgIHBhcnNlci5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vTk9URTogc3RvcmUgbGFzdCBmb3N0ZXIgcGFyZW50aW5nIGxvY2F0aW9uLCBzbyB3ZSB3aWxsIGJlIGFibGUgdG8gZmluZCBpbnNlcnRlZCB0ZXh0XHJcbiAgICAgICAgLy9pbiBjYXNlIG9mIGZvc3RlciBwYXJlbnRpbmdcclxuICAgICAgICB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IHBhcnNlclByb3RvLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24uY2FsbCh0aGlzKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb247XHJcbiAgICB9O1xyXG5cclxuICAgIHBhcnNlci5faW5zZXJ0Q2hhcmFjdGVycyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRDaGFyYWN0ZXJzLmNhbGwodGhpcywgdG9rZW4pO1xyXG5cclxuICAgICAgICB2YXIgaGFzRm9zdGVyUGFyZW50ID0gdGhpcy5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24oKSxcclxuICAgICAgICAgICAgcGFyZW50aW5nTG9jYXRpb24gPSB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbixcclxuICAgICAgICAgICAgcGFyZW50ID0gKGhhc0Zvc3RlclBhcmVudCAmJiBwYXJlbnRpbmdMb2NhdGlvbi5wYXJlbnQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnRUbXBsQ29udGVudCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50LFxyXG4gICAgICAgICAgICBzaWJsaW5ncyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2RlcyhwYXJlbnQpLFxyXG4gICAgICAgICAgICB0ZXh0Tm9kZUlkeCA9IGhhc0Zvc3RlclBhcmVudCAmJiBwYXJlbnRpbmdMb2NhdGlvbi5iZWZvcmVFbGVtZW50ID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5ncy5pbmRleE9mKHBhcmVudGluZ0xvY2F0aW9uLmJlZm9yZUVsZW1lbnQpIC0gMSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZ3MubGVuZ3RoIC0gMSxcclxuICAgICAgICAgICAgdGV4dE5vZGUgPSBzaWJsaW5nc1t0ZXh0Tm9kZUlkeF07XHJcblxyXG4gICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBsb2NhdGlvbiBhc3NpZ25lZCBieSBhbm90aGVyIHRva2VuLCB0aGVuIGp1c3QgdXBkYXRlIGVuZCBwb3NpdGlvblxyXG4gICAgICAgIGlmICh0ZXh0Tm9kZS5fX2xvY2F0aW9uKVxyXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uLmVuZCA9IHRva2VuLmxvY2F0aW9uLmVuZDtcclxuXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XHJcbiAgICB9O1xyXG59O1xyXG5cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIEhUTUwgPSByZXF1aXJlKCcuLi9jb21tb24vaHRtbCcpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gSFRNTC5UQUdfTkFNRVMsXHJcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUztcclxuXHJcbi8vRWxlbWVudCB1dGlsc1xyXG5cclxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxyXG4vL0l0J3MgZmFzdGVyIHRoYW4gdXNpbmcgZGljdGlvbmFyeS5cclxuZnVuY3Rpb24gaXNJbXBsaWVkRW5kVGFnUmVxdWlyZWQodG4pIHtcclxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuUDtcclxuXHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuUlAgfHwgdG4gPT09ICQuUlQgfHwgdG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQgfHwgdG4gPT09ICQuTEk7XHJcblxyXG4gICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLk9QVElPTjtcclxuXHJcbiAgICAgICAgY2FzZSA4OlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuT1BUR1JPVVA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Njb3BpbmdFbGVtZW50KHRuLCBucykge1xyXG4gICAgc3dpdGNoICh0bi5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USClcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1JIHx8IHRuID09PSAkLk1PIHx8IHRuID09ICQuTU4gfHwgdG4gPT09ICQuTVMpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLk1BVEhNTDtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5IVE1MKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuREVTQylcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuU1ZHO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlRBQkxFKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTVRFWFQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLk1BVEhNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRJVExFKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5TVkc7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICByZXR1cm4gKHRuID09PSAkLkFQUExFVCB8fCB0biA9PT0gJC5PQkpFQ1QpICYmIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICBjYXNlIDc6XHJcbiAgICAgICAgICAgIHJldHVybiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5NQVJRVUVFKSAmJiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgY2FzZSA4OlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5GT1JFSUdOX09CSkVDVCAmJiBucyA9PT0gTlMuU1ZHO1xyXG5cclxuICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuQU5OT1RBVElPTl9YTUwgJiYgbnMgPT09IE5TLk1BVEhNTDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8vU3RhY2sgb2Ygb3BlbiBlbGVtZW50c1xyXG52YXIgT3BlbkVsZW1lbnRTdGFjayA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvY3VtZW50LCB0cmVlQWRhcHRlcikge1xyXG4gICAgdGhpcy5zdGFja1RvcCA9IC0xO1xyXG4gICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgdGhpcy5jdXJyZW50ID0gZG9jdW1lbnQ7XHJcbiAgICB0aGlzLmN1cnJlbnRUYWdOYW1lID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudFRtcGxDb250ZW50ID0gbnVsbDtcclxuICAgIHRoaXMudG1wbENvdW50ID0gMDtcclxuICAgIHRoaXMudHJlZUFkYXB0ZXIgPSB0cmVlQWRhcHRlcjtcclxufTtcclxuXHJcbi8vSW5kZXggb2YgZWxlbWVudFxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5faW5kZXhPZiA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICB2YXIgaWR4ID0gLTE7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNbaV0gPT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWR4ID0gaTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkeDtcclxufTtcclxuXHJcbi8vVXBkYXRlIGN1cnJlbnQgZWxlbWVudFxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5faXNJblRlbXBsYXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEVNUExBVEUpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLmN1cnJlbnQpID09PSBOUy5IVE1MO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX3VwZGF0ZUN1cnJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jdXJyZW50ID0gdGhpcy5pdGVtc1t0aGlzLnN0YWNrVG9wXTtcclxuICAgIHRoaXMuY3VycmVudFRhZ05hbWUgPSB0aGlzLmN1cnJlbnQgJiYgdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuY3VycmVudCk7XHJcblxyXG4gICAgdGhpcy5jdXJyZW50VG1wbENvbnRlbnQgPSB0aGlzLl9pc0luVGVtcGxhdGUoKSA/IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyh0aGlzLmN1cnJlbnQpWzBdIDogbnVsbDtcclxufTtcclxuXHJcbi8vTXV0YXRpb25zXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdGhpcy5pdGVtc1srK3RoaXMuc3RhY2tUb3BdID0gZWxlbWVudDtcclxuICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzSW5UZW1wbGF0ZSgpKVxyXG4gICAgICAgIHRoaXMudG1wbENvdW50Kys7XHJcblxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5zdGFja1RvcC0tO1xyXG5cclxuICAgIGlmICh0aGlzLnRtcGxDb3VudCA+IDAgJiYgdGhpcy5faXNJblRlbXBsYXRlKCkpXHJcbiAgICAgICAgdGhpcy50bXBsQ291bnQtLTtcclxuXHJcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIChvbGRFbGVtZW50LCBuZXdFbGVtZW50KSB7XHJcbiAgICB2YXIgaWR4ID0gdGhpcy5faW5kZXhPZihvbGRFbGVtZW50KTtcclxuICAgIHRoaXMuaXRlbXNbaWR4XSA9IG5ld0VsZW1lbnQ7XHJcblxyXG4gICAgaWYgKGlkeCA9PT0gdGhpcy5zdGFja1RvcClcclxuICAgICAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXIgPSBmdW5jdGlvbiAocmVmZXJlbmNlRWxlbWVudCwgbmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGluc2VydGlvbklkeCA9IHRoaXMuX2luZGV4T2YocmVmZXJlbmNlRWxlbWVudCkgKyAxO1xyXG5cclxuICAgIHRoaXMuaXRlbXMuc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3RWxlbWVudCk7XHJcblxyXG4gICAgaWYgKGluc2VydGlvbklkeCA9PSArK3RoaXMuc3RhY2tUb3ApXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsVGFnTmFtZVBvcHBlZCA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy5jdXJyZW50VGFnTmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsVGVtcGxhdGVQb3BwZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy5jdXJyZW50VGFnTmFtZSxcclxuICAgICAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLmN1cnJlbnQpO1xyXG5cclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wVW50aWxFbGVtZW50UG9wcGVkID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHdoaWxlICh0aGlzLnN0YWNrVG9wID4gLTEpIHtcclxuICAgICAgICB2YXIgcG9wcGVkRWxlbWVudCA9IHRoaXMuY3VycmVudDtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHBvcHBlZEVsZW1lbnQgPT09IGVsZW1lbnQpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wVW50aWxOdW1iZXJlZEhlYWRlclBvcHBlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLnN0YWNrVG9wID4gLTEpIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLmN1cnJlbnRUYWdOYW1lO1xyXG5cclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wQWxsVXBUb0h0bWxFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLy9OT1RFOiBoZXJlIHdlIGFzc3VtZSB0aGF0IHJvb3QgPGh0bWw+IGVsZW1lbnQgaXMgYWx3YXlzIGZpcnN0IGluIHRoZSBvcGVuIGVsZW1lbnQgc3RhY2ssIHNvXHJcbiAgICAvL3dlIHBlcmZvcm0gdGhpcyBmYXN0IHN0YWNrIGNsZWFuIHVwLlxyXG4gICAgdGhpcy5zdGFja1RvcCA9IDA7XHJcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5UQUJMRSAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuSFRNTClcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEJPRFkgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URk9PVCAmJlxyXG4gICAgICAgICAgIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEhFQUQgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URU1QTEFURSAmJlxyXG4gICAgICAgICAgIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuSFRNTCkge1xyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5jbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRSICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEVNUExBVEUgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5IVE1MKVxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNbaV0gPT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhY2tUb3AtLTtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLy9TZWFyY2hcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUudHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAvL1Byb3Blcmx5IG5lc3RlZCA8Ym9keT4gZWxlbWVudCAoc2hvdWxkIGJlIHNlY29uZCBlbGVtZW50IGluIHN0YWNrKS5cclxuICAgIHZhciBlbGVtZW50ID0gdGhpcy5pdGVtc1sxXTtcclxuICAgIHJldHVybiBlbGVtZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gJC5CT0RZID8gZWxlbWVudCA6IG51bGw7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5kZXhPZihlbGVtZW50KSA+IC0xO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2V0Q29tbW9uQW5jZXN0b3IgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIGVsZW1lbnRJZHggPSB0aGlzLl9pbmRleE9mKGVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiAtLWVsZW1lbnRJZHggPj0gMCA/IHRoaXMuaXRlbXNbZWxlbWVudElkeF0gOiBudWxsO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaXNSb290SHRtbEVsZW1lbnRDdXJyZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tUb3AgPT09IDAgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSA9PT0gJC5IVE1MO1xyXG59O1xyXG5cclxuLy9FbGVtZW50IGluIHNjb3BlXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc0luU2NvcGUgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKGlzU2NvcGluZ0VsZW1lbnQodG4sIG5zKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoaXNTY29waW5nRWxlbWVudCh0biwgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSkpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJbkxpc3RJdGVtU2NvcGUgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKCgodG4gPT09ICQuVUwgfHwgdG4gPT09ICQuT0wpICYmIG5zID09PSBOUy5IVE1MKSB8fCBpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc0luQnV0dG9uU2NvcGUgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKCh0biA9PT0gJC5CVVRUT04gJiYgbnMgPT09IE5TLkhUTUwpIHx8IGlzU2NvcGluZ0VsZW1lbnQodG4sIG5zKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5UYWJsZVNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgodG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEVNUExBVEUgfHwgdG4gPT09ICQuSFRNTCkgJiYgbnMgPT09IE5TLkhUTUwpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc1RhYmxlQm9keUNvbnRleHRJblRhYmxlU2NvcGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5URk9PVClcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAoKHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLkhUTUwpICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJblNlbGVjdFNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biAhPT0gJC5PUFRJT04gJiYgdG4gIT09ICQuT1BUR1JPVVAgJiYgbnMgPT09IE5TLkhUTUwpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbi8vSW1wbGllZCBlbmQgdGFnc1xyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRoaXMuY3VycmVudFRhZ05hbWUpKVxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbiA9IGZ1bmN0aW9uIChleGNsdXNpb25UYWdOYW1lKSB7XHJcbiAgICB3aGlsZSAoaXNJbXBsaWVkRW5kVGFnUmVxdWlyZWQodGhpcy5jdXJyZW50VGFnTmFtZSkgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gZXhjbHVzaW9uVGFnTmFtZSlcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxyXG4gICAgT3BlbkVsZW1lbnRTdGFjayA9IHJlcXVpcmUoJy4vb3Blbl9lbGVtZW50X3N0YWNrJyksXHJcbiAgICBGb3JtYXR0aW5nRWxlbWVudExpc3QgPSByZXF1aXJlKCcuL2Zvcm1hdHRpbmdfZWxlbWVudF9saXN0JyksXHJcbiAgICBMb2NhdGlvbkluZm9NaXhpbiA9IHJlcXVpcmUoJy4vbG9jYXRpb25faW5mb19taXhpbicpLFxyXG4gICAgRGVmYXVsdFRyZWVBZGFwdGVyID0gcmVxdWlyZSgnLi4vdHJlZV9hZGFwdGVycy9kZWZhdWx0JyksXHJcbiAgICBEb2N0eXBlID0gcmVxdWlyZSgnLi4vY29tbW9uL2RvY3R5cGUnKSxcclxuICAgIEZvcmVpZ25Db250ZW50ID0gcmVxdWlyZSgnLi4vY29tbW9uL2ZvcmVpZ25fY29udGVudCcpLFxyXG4gICAgVXRpbHMgPSByZXF1aXJlKCcuLi9jb21tb24vdXRpbHMnKSxcclxuICAgIFVOSUNPREUgPSByZXF1aXJlKCcuLi9jb21tb24vdW5pY29kZScpLFxyXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XHJcblxyXG4vL0FsaWFzZXNcclxudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcclxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTLFxyXG4gICAgQVRUUlMgPSBIVE1MLkFUVFJTO1xyXG5cclxuLy9EZWZhdWx0IG9wdGlvbnNcclxudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcclxuICAgIGRlY29kZUh0bWxFbnRpdGllczogdHJ1ZSxcclxuICAgIGxvY2F0aW9uSW5mbzogZmFsc2VcclxufTtcclxuXHJcbi8vTWlzYyBjb25zdGFudHNcclxudmFyIFNFQVJDSEFCTEVfSU5ERVhfREVGQVVMVF9QUk9NUFQgPSAnVGhpcyBpcyBhIHNlYXJjaGFibGUgaW5kZXguIEVudGVyIHNlYXJjaCBrZXl3b3JkczogJyxcclxuICAgIFNFQVJDSEFCTEVfSU5ERVhfSU5QVVRfTkFNRSA9ICdpc2luZGV4JyxcclxuICAgIEhJRERFTl9JTlBVVF9UWVBFID0gJ2hpZGRlbic7XHJcblxyXG4vL0Fkb3B0aW9uIGFnZW5jeSBsb29wcyBpdGVyYXRpb24gY291bnRcclxudmFyIEFBX09VVEVSX0xPT1BfSVRFUiA9IDgsXHJcbiAgICBBQV9JTk5FUl9MT09QX0lURVIgPSAzO1xyXG5cclxuLy9JbnNlcnRpb24gbW9kZXNcclxudmFyIElOSVRJQUxfTU9ERSA9ICdJTklUSUFMX01PREUnLFxyXG4gICAgQkVGT1JFX0hUTUxfTU9ERSA9ICdCRUZPUkVfSFRNTF9NT0RFJyxcclxuICAgIEJFRk9SRV9IRUFEX01PREUgPSAnQkVGT1JFX0hFQURfTU9ERScsXHJcbiAgICBJTl9IRUFEX01PREUgPSAnSU5fSEVBRF9NT0RFJyxcclxuICAgIEFGVEVSX0hFQURfTU9ERSA9ICdBRlRFUl9IRUFEX01PREUnLFxyXG4gICAgSU5fQk9EWV9NT0RFID0gJ0lOX0JPRFlfTU9ERScsXHJcbiAgICBURVhUX01PREUgPSAnVEVYVF9NT0RFJyxcclxuICAgIElOX1RBQkxFX01PREUgPSAnSU5fVEFCTEVfTU9ERScsXHJcbiAgICBJTl9UQUJMRV9URVhUX01PREUgPSAnSU5fVEFCTEVfVEVYVF9NT0RFJyxcclxuICAgIElOX0NBUFRJT05fTU9ERSA9ICdJTl9DQVBUSU9OX01PREUnLFxyXG4gICAgSU5fQ09MVU1OX0dST1VQX01PREUgPSAnSU5fQ09MVU1OX0dST1VQX01PREUnLFxyXG4gICAgSU5fVEFCTEVfQk9EWV9NT0RFID0gJ0lOX1RBQkxFX0JPRFlfTU9ERScsXHJcbiAgICBJTl9ST1dfTU9ERSA9ICdJTl9ST1dfTU9ERScsXHJcbiAgICBJTl9DRUxMX01PREUgPSAnSU5fQ0VMTF9NT0RFJyxcclxuICAgIElOX1NFTEVDVF9NT0RFID0gJ0lOX1NFTEVDVF9NT0RFJyxcclxuICAgIElOX1NFTEVDVF9JTl9UQUJMRV9NT0RFID0gJ0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFJyxcclxuICAgIElOX1RFTVBMQVRFX01PREUgPSAnSU5fVEVNUExBVEVfTU9ERScsXHJcbiAgICBBRlRFUl9CT0RZX01PREUgPSAnQUZURVJfQk9EWV9NT0RFJyxcclxuICAgIElOX0ZSQU1FU0VUX01PREUgPSAnSU5fRlJBTUVTRVRfTU9ERScsXHJcbiAgICBBRlRFUl9GUkFNRVNFVF9NT0RFID0gJ0FGVEVSX0ZSQU1FU0VUX01PREUnLFxyXG4gICAgQUZURVJfQUZURVJfQk9EWV9NT0RFID0gJ0FGVEVSX0FGVEVSX0JPRFlfTU9ERScsXHJcbiAgICBBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFID0gJ0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREUnO1xyXG5cclxuLy9JbnNlcnRpb24gbW9kZSByZXNldCBtYXBcclxudmFyIElOU0VSVElPTl9NT0RFX1JFU0VUX01BUCA9IHt9O1xyXG5cclxuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVFJdID0gSU5fUk9XX01PREU7XHJcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRCT0RZXSA9XHJcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRIRUFEXSA9XHJcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRGT09UXSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcclxuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuQ0FQVElPTl0gPSBJTl9DQVBUSU9OX01PREU7XHJcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkNPTEdST1VQXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xyXG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5UQUJMRV0gPSBJTl9UQUJMRV9NT0RFO1xyXG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5CT0RZXSA9IElOX0JPRFlfTU9ERTtcclxuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuRlJBTUVTRVRdID0gSU5fRlJBTUVTRVRfTU9ERTtcclxuXHJcbi8vVGVtcGxhdGUgaW5zZXJ0aW9uIG1vZGUgc3dpdGNoIG1hcFxyXG52YXIgVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUCA9IHt9O1xyXG5cclxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLkNBUFRJT05dID1cclxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLkNPTEdST1VQXSA9XHJcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5UQk9EWV0gPVxyXG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVEZPT1RdID1cclxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIRUFEXSA9IElOX1RBQkxFX01PREU7XHJcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5DT0xdID0gSU5fQ09MVU1OX0dST1VQX01PREU7XHJcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5UUl0gPSBJTl9UQUJMRV9CT0RZX01PREU7XHJcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5URF0gPVxyXG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVEhdID0gSU5fUk9XX01PREU7XHJcblxyXG4vL1Rva2VuIGhhbmRsZXJzIG1hcCBmb3IgaW5zZXJ0aW9uIG1vZGVzXHJcbnZhciBfID0ge307XHJcblxyXG5fW0lOSVRJQUxfTU9ERV0gPSB7fTtcclxuX1tJTklUSUFMX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cclxuX1tJTklUSUFMX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluSW5pdGlhbE1vZGU7XHJcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gZG9jdHlwZUluSW5pdGlhbE1vZGU7XHJcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9XHJcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPVxyXG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSB0b2tlbkluSW5pdGlhbE1vZGU7XHJcblxyXG5fW0JFRk9SRV9IVE1MX01PREVdID0ge307XHJcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUh0bWw7XHJcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0JlZm9yZUh0bWw7XHJcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQmVmb3JlSHRtbDtcclxuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSHRtbDtcclxuXHJcbl9bQkVGT1JFX0hFQURfTU9ERV0gPSB7fTtcclxuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuQmVmb3JlSGVhZDtcclxuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcclxuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQmVmb3JlSGVhZDtcclxuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdCZWZvcmVIZWFkO1xyXG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gdG9rZW5CZWZvcmVIZWFkO1xyXG5cclxuX1tJTl9IRUFEX01PREVdID0ge307XHJcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5JbkhlYWQ7XHJcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcclxuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkhlYWQ7XHJcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJbkhlYWQ7XHJcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuSW5IZWFkO1xyXG5cclxuX1tBRlRFUl9IRUFEX01PREVdID0ge307XHJcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckhlYWQ7XHJcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcclxuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdBZnRlckhlYWQ7XHJcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdBZnRlckhlYWQ7XHJcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQWZ0ZXJIZWFkO1xyXG5cclxuX1tJTl9CT0RZX01PREVdID0ge307XHJcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcclxuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xyXG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcclxuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luQm9keTtcclxuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQm9keTtcclxuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xyXG5cclxuX1tURVhUX01PREVdID0ge307XHJcbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID1cclxuX1tURVhUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xyXG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID1cclxuX1tURVhUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9XHJcbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5UZXh0O1xyXG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJblRleHQ7XHJcblxyXG5fW0lOX1RBQkxFX01PREVdID0ge307XHJcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlO1xyXG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luVGFibGU7XHJcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5UYWJsZTtcclxuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcclxuXHJcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXSA9IHt9O1xyXG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlVGV4dDtcclxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5UYWJsZVRleHQ7XHJcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPVxyXG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID1cclxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID1cclxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9XHJcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuSW5UYWJsZVRleHQ7XHJcblxyXG5fW0lOX0NBUFRJT05fTU9ERV0gPSB7fTtcclxuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5Cb2R5O1xyXG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XHJcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5DYXB0aW9uO1xyXG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5DYXB0aW9uO1xyXG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XHJcblxyXG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXSA9IHt9O1xyXG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluQ29sdW1uR3JvdXA7XHJcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xyXG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luQ29sdW1uR3JvdXA7XHJcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQ29sdW1uR3JvdXA7XHJcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xyXG5cclxuX1tJTl9UQUJMRV9CT0RZX01PREVdID0ge307XHJcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID1cclxuX1tJTl9UQUJMRV9CT0RZX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlO1xyXG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcclxuX1tJTl9UQUJMRV9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luVGFibGVCb2R5O1xyXG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5UYWJsZUJvZHk7XHJcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcclxuXHJcbl9bSU5fUk9XX01PREVdID0ge307XHJcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cclxuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlO1xyXG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luUm93O1xyXG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblJvdztcclxuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XHJcblxyXG5fW0lOX0NFTExfTU9ERV0gPSB7fTtcclxuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5Cb2R5O1xyXG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XHJcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xyXG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5DZWxsO1xyXG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5DZWxsO1xyXG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XHJcblxyXG5fW0lOX1NFTEVDVF9NT0RFXSA9IHt9O1xyXG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XHJcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XHJcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5TZWxlY3Q7XHJcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luU2VsZWN0O1xyXG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcclxuXHJcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdID0ge307XHJcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcclxuX1tJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcclxuX1tJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcclxuX1tJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblNlbGVjdEluVGFibGU7XHJcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luU2VsZWN0SW5UYWJsZTtcclxuX1tJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XHJcblxyXG5fW0lOX1RFTVBMQVRFX01PREVdID0ge307XHJcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJbkJvZHk7XHJcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xyXG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luVGVtcGxhdGU7XHJcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5UZW1wbGF0ZTtcclxuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluVGVtcGxhdGU7XHJcblxyXG5fW0FGVEVSX0JPRFlfTU9ERV0gPSB7fTtcclxuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cclxuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkFmdGVyQm9keTtcclxuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xyXG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50O1xyXG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJCb2R5O1xyXG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQWZ0ZXJCb2R5O1xyXG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBzdG9wUGFyc2luZztcclxuXHJcbl9bSU5fRlJBTUVTRVRfTU9ERV0gPSB7fTtcclxuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XHJcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xyXG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XHJcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luRnJhbWVzZXQ7XHJcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5GcmFtZXNldDtcclxuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHN0b3BQYXJzaW5nO1xyXG5cclxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXSA9IHt9O1xyXG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cclxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XHJcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XHJcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcclxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJGcmFtZXNldDtcclxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdBZnRlckZyYW1lc2V0O1xyXG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XHJcblxyXG5fW0FGVEVSX0FGVEVSX0JPRFlfTU9ERV0gPSB7fTtcclxuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcclxuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkFmdGVyQWZ0ZXJCb2R5O1xyXG5fW0FGVEVSX0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XHJcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50VG9Eb2N1bWVudDtcclxuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0FGVEVSX0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0FmdGVyQWZ0ZXJCb2R5O1xyXG5fW0FGVEVSX0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcclxuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XHJcblxyXG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdID0ge307XHJcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxyXG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcclxuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50VG9Eb2N1bWVudDtcclxuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcclxuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJBZnRlckZyYW1lc2V0O1xyXG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xyXG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XHJcblxyXG4vL1NlYXJjaGFibGUgaW5kZXggYnVpbGRpbmcgdXRpbHMgKDxpc2luZGV4PiB0YWcpXHJcbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleEZvcm1BdHRycyhpc2luZGV4U3RhcnRUYWdUb2tlbikge1xyXG4gICAgdmFyIGluZGV4QWN0aW9uID0gVG9rZW5pemVyLmdldFRva2VuQXR0cihpc2luZGV4U3RhcnRUYWdUb2tlbiwgQVRUUlMuQUNUSU9OKSxcclxuICAgICAgICBhdHRycyA9IFtdO1xyXG5cclxuICAgIGlmIChpbmRleEFjdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgIGF0dHJzLnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiBBVFRSUy5BQ1RJT04sXHJcbiAgICAgICAgICAgIHZhbHVlOiBpbmRleEFjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhdHRycztcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUluZGV4TGFiZWxUZXh0KGlzaW5kZXhTdGFydFRhZ1Rva2VuKSB7XHJcbiAgICB2YXIgaW5kZXhQcm9tcHQgPSBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKGlzaW5kZXhTdGFydFRhZ1Rva2VuLCBBVFRSUy5QUk9NUFQpO1xyXG5cclxuICAgIHJldHVybiBpbmRleFByb21wdCA9PT0gbnVsbCA/IFNFQVJDSEFCTEVfSU5ERVhfREVGQVVMVF9QUk9NUFQgOiBpbmRleFByb21wdDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUluZGV4SW5wdXRBdHRycyhpc2luZGV4U3RhcnRUYWdUb2tlbikge1xyXG4gICAgdmFyIGlzaW5kZXhBdHRycyA9IGlzaW5kZXhTdGFydFRhZ1Rva2VuLmF0dHJzLFxyXG4gICAgICAgIGlucHV0QXR0cnMgPSBbXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlzaW5kZXhBdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBuYW1lID0gaXNpbmRleEF0dHJzW2ldLm5hbWU7XHJcblxyXG4gICAgICAgIGlmIChuYW1lICE9PSBBVFRSUy5OQU1FICYmIG5hbWUgIT09IEFUVFJTLkFDVElPTiAmJiBuYW1lICE9PSBBVFRSUy5QUk9NUFQpXHJcbiAgICAgICAgICAgIGlucHV0QXR0cnMucHVzaChpc2luZGV4QXR0cnNbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlucHV0QXR0cnMucHVzaCh7XHJcbiAgICAgICAgbmFtZTogQVRUUlMuTkFNRSxcclxuICAgICAgICB2YWx1ZTogU0VBUkNIQUJMRV9JTkRFWF9JTlBVVF9OQU1FXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaW5wdXRBdHRycztcclxufVxyXG5cclxuLy9QYXJzZXJcclxudmFyIFBhcnNlciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRyZWVBZGFwdGVyLCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXIgfHwgRGVmYXVsdFRyZWVBZGFwdGVyO1xyXG4gICAgdGhpcy5vcHRpb25zID0gVXRpbHMubWVyZ2VPcHRpb25zKERFRkFVTFRfT1BUSU9OUywgb3B0aW9ucyk7XHJcbiAgICB0aGlzLnNjcmlwdEhhbmRsZXIgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25JbmZvKVxyXG4gICAgICAgIExvY2F0aW9uSW5mb01peGluLmFzc2lnbih0aGlzKTtcclxufTtcclxuXHJcbi8vQVBJXHJcblBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVEb2N1bWVudCgpO1xyXG5cclxuICAgIHRoaXMuX3Jlc2V0KGh0bWwsIGRvY3VtZW50LCBudWxsKTtcclxuICAgIHRoaXMuX3J1blBhcnNpbmdMb29wKCk7XHJcblxyXG4gICAgcmV0dXJuIGRvY3VtZW50O1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZyYWdtZW50ID0gZnVuY3Rpb24gKGh0bWwsIGZyYWdtZW50Q29udGV4dCkge1xyXG4gICAgLy9OT1RFOiB1c2UgPHRlbXBsYXRlPiBlbGVtZW50IGFzIGEgZnJhZ21lbnQgY29udGV4dCBpZiBjb250ZXh0IGVsZW1lbnQgd2FzIG5vdCBwcm92aWRlZCxcclxuICAgIC8vc28gd2Ugd2lsbCBwYXJzZSBpbiBcImZvcmdpdmluZ1wiIG1hbm5lclxyXG4gICAgaWYgKCFmcmFnbWVudENvbnRleHQpXHJcbiAgICAgICAgZnJhZ21lbnRDb250ZXh0ID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KCQuVEVNUExBVEUsIE5TLkhUTUwsIFtdKTtcclxuXHJcbiAgICAvL05PVEU6IGNyZWF0ZSBmYWtlIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSB1c2VkIGFzICdkb2N1bWVudCcgZm9yIGZyYWdtZW50IHBhcnNpbmcuXHJcbiAgICAvL1RoaXMgaXMgaW1wb3J0YW50IGZvciBqc2RvbSB0aGVyZSAnZG9jdW1lbnQnIGNhbid0IGJlIHJlY3JlYXRlZCwgdGhlcmVmb3JlXHJcbiAgICAvL2ZyYWdtZW50IHBhcnNpbmcgY2F1c2VzIG1lc3Npbmcgb2YgdGhlIG1haW4gYGRvY3VtZW50YC5cclxuICAgIHZhciBkb2N1bWVudE1vY2sgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJ2RvY3VtZW50bW9jaycsIE5TLkhUTUwsIFtdKTtcclxuXHJcbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudE1vY2ssIGZyYWdtZW50Q29udGV4dCk7XHJcblxyXG4gICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShmcmFnbWVudENvbnRleHQpID09PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgIHRoaXMuX3B1c2hUbXBsSW5zZXJ0aW9uTW9kZShJTl9URU1QTEFURV9NT0RFKTtcclxuXHJcbiAgICB0aGlzLl9pbml0VG9rZW5pemVyRm9yRnJhZ21lbnRQYXJzaW5nKCk7XHJcbiAgICB0aGlzLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQoKTtcclxuICAgIHRoaXMuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xyXG4gICAgdGhpcy5fZmluZEZvcm1JbkZyYWdtZW50Q29udGV4dCgpO1xyXG4gICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcclxuXHJcbiAgICB2YXIgcm9vdEVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEZpcnN0Q2hpbGQoZG9jdW1lbnRNb2NrKSxcclxuICAgICAgICBmcmFnbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG5cclxuICAgIHRoaXMuX2Fkb3B0Tm9kZXMocm9vdEVsZW1lbnQsIGZyYWdtZW50KTtcclxuXHJcbiAgICByZXR1cm4gZnJhZ21lbnQ7XHJcbn07XHJcblxyXG4vL1Jlc2V0IHN0YXRlXHJcblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24gKGh0bWwsIGRvY3VtZW50LCBmcmFnbWVudENvbnRleHQpIHtcclxuICAgIHRoaXMudG9rZW5pemVyID0gbmV3IFRva2VuaXplcihodG1sLCB0aGlzLm9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuc3RvcHBlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOSVRJQUxfTU9ERTtcclxuICAgIHRoaXMub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gJyc7XHJcblxyXG4gICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50O1xyXG4gICAgdGhpcy5mcmFnbWVudENvbnRleHQgPSBmcmFnbWVudENvbnRleHQ7XHJcblxyXG4gICAgdGhpcy5oZWFkRWxlbWVudCA9IG51bGw7XHJcbiAgICB0aGlzLmZvcm1FbGVtZW50ID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLm9wZW5FbGVtZW50cyA9IG5ldyBPcGVuRWxlbWVudFN0YWNrKHRoaXMuZG9jdW1lbnQsIHRoaXMudHJlZUFkYXB0ZXIpO1xyXG4gICAgdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgPSBuZXcgRm9ybWF0dGluZ0VsZW1lbnRMaXN0KHRoaXMudHJlZUFkYXB0ZXIpO1xyXG5cclxuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjayA9IFtdO1xyXG4gICAgdGhpcy50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrVG9wID0gLTE7XHJcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zID0gW107XHJcbiAgICB0aGlzLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmZyYW1lc2V0T2sgPSB0cnVlO1xyXG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcclxuICAgIHRoaXMuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IGZhbHNlO1xyXG59O1xyXG5cclxuLy9QYXJzaW5nIGxvb3BcclxuUGFyc2VyLnByb3RvdHlwZS5faXRlcmF0ZVBhcnNpbmdMb29wID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUoKTtcclxuXHJcbiAgICB2YXIgdG9rZW4gPSB0aGlzLnRva2VuaXplci5nZXROZXh0VG9rZW4oKTtcclxuXHJcbiAgICBpZiAodGhpcy5za2lwTmV4dE5ld0xpbmUpIHtcclxuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOICYmIHRva2VuLmNoYXJzWzBdID09PSAnXFxuJykge1xyXG4gICAgICAgICAgICBpZiAodG9rZW4uY2hhcnMubGVuZ3RoID09PSAxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdG9rZW4uY2hhcnMgPSB0b2tlbi5jaGFycy5zdWJzdHIoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9zaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSlcclxuICAgICAgICB0aGlzLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX3J1blBhcnNpbmdMb29wID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKCF0aGlzLnN0b3BwZWQpXHJcbiAgICAgICAgdGhpcy5faXRlcmF0ZVBhcnNpbmdMb29wKCk7XHJcbn07XHJcblxyXG4vL1RleHQgcGFyc2luZ1xyXG5QYXJzZXIucHJvdG90eXBlLl9zZXR1cFRva2VuaXplckNEQVRBTW9kZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjdXJyZW50ID0gdGhpcy5fZ2V0QWRqdXN0ZWRDdXJyZW50RWxlbWVudCgpO1xyXG5cclxuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSBjdXJyZW50ICYmIGN1cnJlbnQgIT09IHRoaXMuZG9jdW1lbnQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KSAhPT0gTlMuSFRNTCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIXRoaXMuX2lzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQoY3VycmVudCkpO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fc3dpdGNoVG9UZXh0UGFyc2luZyA9IGZ1bmN0aW9uIChjdXJyZW50VG9rZW4sIG5leHRUb2tlbml6ZXJTdGF0ZSkge1xyXG4gICAgdGhpcy5faW5zZXJ0RWxlbWVudChjdXJyZW50VG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBuZXh0VG9rZW5pemVyU3RhdGU7XHJcbiAgICB0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IHRoaXMuaW5zZXJ0aW9uTW9kZTtcclxuICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IFRFWFRfTU9ERTtcclxufTtcclxuXHJcbi8vRnJhZ21lbnQgcGFyc2luZ1xyXG5QYXJzZXIucHJvdG90eXBlLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wID09PSAwICYmIHRoaXMuZnJhZ21lbnRDb250ZXh0ID9cclxuICAgICAgICAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA6XHJcbiAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbm9kZSA9IHRoaXMuZnJhZ21lbnRDb250ZXh0O1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG5vZGUpID09PSAkLkZPUk0pIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtRWxlbWVudCA9IG5vZGU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbm9kZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKTtcclxuICAgIH0gd2hpbGUgKG5vZGUpO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5faW5pdFRva2VuaXplckZvckZyYWdtZW50UGFyc2luZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLmZyYWdtZW50Q29udGV4dCk7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLlRJVExFIHx8IHRuID09PSAkLlRFWFRBUkVBKVxyXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlhNUCB8fCB0biA9PT0gJC5JRlJBTUUgfHxcclxuICAgICAgICAgICAgIHRuID09PSAkLk5PRU1CRUQgfHwgdG4gPT09ICQuTk9GUkFNRVMgfHwgdG4gPT09ICQuTk9TQ1JJUFQpIHtcclxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJBV1RFWFQ7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKVxyXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuU0NSSVBUX0RBVEE7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuUExBSU5URVhUKVxyXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUExBSU5URVhUO1xyXG59O1xyXG5cclxuLy9UcmVlIG11dGF0aW9uXHJcblBhcnNlci5wcm90b3R5cGUuX3NldERvY3VtZW50VHlwZSA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgdGhpcy50cmVlQWRhcHRlci5zZXREb2N1bWVudFR5cGUodGhpcy5kb2N1bWVudCwgdG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2F0dGFjaEVsZW1lbnRUb1RyZWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgaWYgKHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCkpXHJcbiAgICAgICAgdGhpcy5fZm9zdGVyUGFyZW50RWxlbWVudChlbGVtZW50KTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudFRtcGxDb250ZW50IHx8IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBlbGVtZW50KTtcclxuICAgIH1cclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2FwcGVuZEVsZW1lbnQgPSBmdW5jdGlvbiAodG9rZW4sIG5hbWVzcGFjZVVSSSkge1xyXG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XHJcblxyXG4gICAgdGhpcy5fYXR0YWNoRWxlbWVudFRvVHJlZShlbGVtZW50KTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2luc2VydEVsZW1lbnQgPSBmdW5jdGlvbiAodG9rZW4sIG5hbWVzcGFjZVVSSSkge1xyXG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XHJcblxyXG4gICAgdGhpcy5fYXR0YWNoRWxlbWVudFRvVHJlZShlbGVtZW50KTtcclxuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgdmFyIHRtcGwgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgTlMuSFRNTCwgdG9rZW4uYXR0cnMpLFxyXG4gICAgICAgIGNvbnRlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcclxuXHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHRtcGwsIGNvbnRlbnQpO1xyXG4gICAgdGhpcy5fYXR0YWNoRWxlbWVudFRvVHJlZSh0bXBsKTtcclxuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2godG1wbCk7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCgkLkhUTUwsIE5TLkhUTUwsIFtdKTtcclxuXHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQsIGVsZW1lbnQpO1xyXG4gICAgdGhpcy5vcGVuRWxlbWVudHMucHVzaChlbGVtZW50KTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2FwcGVuZENvbW1lbnROb2RlID0gZnVuY3Rpb24gKHRva2VuLCBwYXJlbnQpIHtcclxuICAgIHZhciBjb21tZW50Tm9kZSA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlQ29tbWVudE5vZGUodG9rZW4uZGF0YSk7XHJcblxyXG4gICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChwYXJlbnQsIGNvbW1lbnROb2RlKTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2luc2VydENoYXJhY3RlcnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIGlmICh0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpKVxyXG4gICAgICAgIHRoaXMuX2Zvc3RlclBhcmVudFRleHQodG9rZW4uY2hhcnMpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcclxuXHJcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5pbnNlcnRUZXh0KHBhcmVudCwgdG9rZW4uY2hhcnMpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fYWRvcHROb2RlcyA9IGZ1bmN0aW9uIChkb25vciwgcmVjaXBpZW50KSB7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Rmlyc3RDaGlsZChkb25vcik7XHJcblxyXG4gICAgICAgIGlmICghY2hpbGQpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUoY2hpbGQpO1xyXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocmVjaXBpZW50LCBjaGlsZCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL1Rva2VuIHByb2Nlc3NpbmdcclxuUGFyc2VyLnByb3RvdHlwZS5fc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50KCk7XHJcblxyXG4gICAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQgPT09IHRoaXMuZG9jdW1lbnQpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpO1xyXG5cclxuICAgIGlmIChucyA9PT0gTlMuSFRNTClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShjdXJyZW50KSA9PT0gJC5BTk5PVEFUSU9OX1hNTCAmJiBucyA9PT0gTlMuTUFUSE1MICYmXHJcbiAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiAmJiB0b2tlbi50YWdOYW1lID09PSAkLlNWRykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaXNDaGFyYWN0ZXJUb2tlbiA9IHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTixcclxuICAgICAgICBpc01hdGhNTFRleHRTdGFydFRhZyA9IHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnRhZ05hbWUgIT09ICQuTUdMWVBIICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi50YWdOYW1lICE9PSAkLk1BTElHTk1BUks7XHJcblxyXG4gICAgaWYgKChpc01hdGhNTFRleHRTdGFydFRhZyB8fCBpc0NoYXJhY3RlclRva2VuKSAmJiB0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gfHwgaXNDaGFyYWN0ZXJUb2tlbikgJiYgdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRva2VuLnR5cGUgIT09IFRva2VuaXplci5FT0ZfVE9LRU47XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIF9bdGhpcy5pbnNlcnRpb25Nb2RlXVt0b2tlbi50eXBlXSh0aGlzLCB0b2tlbik7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW5JbkJvZHlNb2RlID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBfW0lOX0JPRFlfTU9ERV1bdG9rZW4udHlwZV0odGhpcywgdG9rZW4pO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4pXHJcbiAgICAgICAgY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOKVxyXG4gICAgICAgIG51bGxDaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4pXHJcbiAgICAgICAgaW5zZXJ0Q2hhcmFjdGVycyh0aGlzLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4pXHJcbiAgICAgICAgYXBwZW5kQ29tbWVudCh0aGlzLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTilcclxuICAgICAgICBzdGFydFRhZ0luRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xyXG5cclxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxyXG4gICAgICAgIGVuZFRhZ0luRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc0Zha2VTdGFydFRhZ1dpdGhBdHRycyA9IGZ1bmN0aW9uICh0YWdOYW1lLCBhdHRycykge1xyXG4gICAgdmFyIGZha2VUb2tlbiA9IHRoaXMudG9rZW5pemVyLmJ1aWxkU3RhcnRUYWdUb2tlbih0YWdOYW1lKTtcclxuXHJcbiAgICBmYWtlVG9rZW4uYXR0cnMgPSBhdHRycztcclxuICAgIHRoaXMuX3Byb2Nlc3NUb2tlbihmYWtlVG9rZW4pO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc0Zha2VTdGFydFRhZyA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRTdGFydFRhZ1Rva2VuKHRhZ05hbWUpO1xyXG5cclxuICAgIHRoaXMuX3Byb2Nlc3NUb2tlbihmYWtlVG9rZW4pO1xyXG4gICAgcmV0dXJuIGZha2VUb2tlbjtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlRW5kVGFnID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIHZhciBmYWtlVG9rZW4gPSB0aGlzLnRva2VuaXplci5idWlsZEVuZFRhZ1Rva2VuKHRhZ05hbWUpO1xyXG5cclxuICAgIHRoaXMuX3Byb2Nlc3NUb2tlbihmYWtlVG9rZW4pO1xyXG4gICAgcmV0dXJuIGZha2VUb2tlbjtcclxufTtcclxuXHJcbi8vSW50ZWdyYXRpb24gcG9pbnRzXHJcblBhcnNlci5wcm90b3R5cGUuX2lzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxyXG4gICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZWxlbWVudCk7XHJcblxyXG4gICAgcmV0dXJuIEZvcmVpZ25Db250ZW50LmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2lzSHRtbEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxyXG4gICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZWxlbWVudCksXHJcbiAgICAgICAgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBGb3JlaWduQ29udGVudC5pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHRuLCBucywgYXR0cnMpO1xyXG59O1xyXG5cclxuLy9BY3RpdmUgZm9ybWF0dGluZyBlbGVtZW50cyByZWNvbnN0cnVjdGlvblxyXG5QYXJzZXIucHJvdG90eXBlLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBsaXN0TGVuZ3RoID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMubGVuZ3RoO1xyXG5cclxuICAgIGlmIChsaXN0TGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIHVub3BlbklkeCA9IGxpc3RMZW5ndGgsXHJcbiAgICAgICAgICAgIGVudHJ5ID0gbnVsbDtcclxuXHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB1bm9wZW5JZHgtLTtcclxuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5lbnRyaWVzW3Vub3BlbklkeF07XHJcblxyXG4gICAgICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWSB8fCB0aGlzLm9wZW5FbGVtZW50cy5jb250YWlucyhlbnRyeS5lbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdW5vcGVuSWR4Kys7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gd2hpbGUgKHVub3BlbklkeCA+IDApO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gdW5vcGVuSWR4OyBpIDwgbGlzdExlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZW50cmllc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5faW5zZXJ0RWxlbWVudChlbnRyeS50b2tlbiwgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZW50cnkuZWxlbWVudCkpO1xyXG4gICAgICAgICAgICBlbnRyeS5lbGVtZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL0Nsb3NlIGVsZW1lbnRzXHJcblBhcnNlci5wcm90b3R5cGUuX2Nsb3NlVGFibGVDZWxsID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSlcclxuICAgICAgICB0aGlzLl9wcm9jZXNzRmFrZUVuZFRhZygkLlREKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5USCk7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9jbG9zZVBFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24oJC5QKTtcclxuICAgIHRoaXMub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlApO1xyXG59O1xyXG5cclxuLy9JbnNlcnRpb24gbW9kZXNcclxuUGFyc2VyLnByb3RvdHlwZS5fcmVzZXRJbnNlcnRpb25Nb2RlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wLCBsYXN0ID0gZmFsc2U7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGkgPT09IDApIHtcclxuICAgICAgICAgICAgbGFzdCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5mcmFnbWVudENvbnRleHQpXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5mcmFnbWVudENvbnRleHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXHJcbiAgICAgICAgICAgIG5ld0luc2VydGlvbk1vZGUgPSBJTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbdG5dO1xyXG5cclxuICAgICAgICBpZiAobmV3SW5zZXJ0aW9uTW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBuZXdJbnNlcnRpb25Nb2RlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKCFsYXN0ICYmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fQ0VMTF9NT0RFO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKCFsYXN0ICYmIHRuID09PSAkLkhFQUQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fSEVBRF9NT0RFO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVCkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGVGb3JTZWxlY3QoaSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSFRNTCkge1xyXG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSB0aGlzLmhlYWRFbGVtZW50ID8gQUZURVJfSEVBRF9NT0RFIDogQkVGT1JFX0hFQURfTU9ERTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmIChsYXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOX0JPRFlfTU9ERTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0ID0gZnVuY3Rpb24gKHNlbGVjdElkeCkge1xyXG4gICAgaWYgKHNlbGVjdElkeCA+IDApIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0SWR4IC0gMTsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgICAgICB2YXIgYW5jZXN0b3IgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXSxcclxuICAgICAgICAgICAgICAgIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGFuY2VzdG9yKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSlcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9JTl9UQUJMRV9NT0RFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9NT0RFO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fcHVzaFRtcGxJbnNlcnRpb25Nb2RlID0gZnVuY3Rpb24gKG1vZGUpIHtcclxuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wdXNoKG1vZGUpO1xyXG4gICAgdGhpcy50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrVG9wKys7XHJcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IG1vZGU7XHJcbn07XHJcblxyXG5QYXJzZXIucHJvdG90eXBlLl9wb3BUbXBsSW5zZXJ0aW9uTW9kZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wb3AoKTtcclxuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcC0tO1xyXG4gICAgdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGUgPSB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tbdGhpcy50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrVG9wXTtcclxufTtcclxuXHJcbi8vRm9zdGVyIHBhcmVudGluZ1xyXG5QYXJzZXIucHJvdG90eXBlLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3N0ZXJQYXJlbnRpbmdFbmFibGVkICYmIHRoaXMuX2lzRWxlbWVudENhdXNlc0Zvc3RlclBhcmVudGluZyh0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50KTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBsb2NhdGlvbiA9IHtcclxuICAgICAgICBwYXJlbnQ6IG51bGwsXHJcbiAgICAgICAgYmVmb3JlRWxlbWVudDogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIG9wZW5FbGVtZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV0sXHJcbiAgICAgICAgICAgIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG9wZW5FbGVtZW50KSxcclxuICAgICAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShvcGVuRWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTCkge1xyXG4gICAgICAgICAgICBsb2NhdGlvbi5wYXJlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMob3BlbkVsZW1lbnQpWzBdO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShvcGVuRWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAobG9jYXRpb24ucGFyZW50KVxyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24uYmVmb3JlRWxlbWVudCA9IG9wZW5FbGVtZW50O1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5wYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpIC0gMV07XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFsb2NhdGlvbi5wYXJlbnQpXHJcbiAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbMF07XHJcblxyXG4gICAgcmV0dXJuIGxvY2F0aW9uO1xyXG59O1xyXG5cclxuUGFyc2VyLnByb3RvdHlwZS5fZm9zdGVyUGFyZW50RWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKTtcclxuXHJcbiAgICBpZiAobG9jYXRpb24uYmVmb3JlRWxlbWVudClcclxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGVsZW1lbnQsIGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQobG9jYXRpb24ucGFyZW50LCBlbGVtZW50KTtcclxufTtcclxuXHJcblBhcnNlci5wcm90b3R5cGUuX2Zvc3RlclBhcmVudFRleHQgPSBmdW5jdGlvbiAoY2hhcnMpIHtcclxuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbigpO1xyXG5cclxuICAgIGlmIChsb2NhdGlvbi5iZWZvcmVFbGVtZW50KVxyXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGNoYXJzLCBsb2NhdGlvbi5iZWZvcmVFbGVtZW50KTtcclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQobG9jYXRpb24ucGFyZW50LCBjaGFycyk7XHJcbn07XHJcblxyXG4vL1NwZWNpYWwgZWxlbWVudHNcclxuUGFyc2VyLnByb3RvdHlwZS5faXNTcGVjaWFsRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXHJcbiAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gSFRNTC5TUEVDSUFMX0VMRU1FTlRTW25zXVt0bl07XHJcbn07XHJcblxyXG4vL0Fkb3B0aW9uIGFnZW5jeSBhbGdvcml0aG1cclxuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90cmVlLWNvbnN0cnVjdGlvbi5odG1sI2Fkb3B0aW9uQWdlbmN5KVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuLy9TdGVwcyA1LTggb2YgdGhlIGFsZ29yaXRobVxyXG5mdW5jdGlvbiBhYU9idGFpbkZvcm1hdHRpbmdFbGVtZW50RW50cnkocCwgdG9rZW4pIHtcclxuICAgIHZhciBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5SW5TY29wZVdpdGhUYWdOYW1lKHRva2VuLnRhZ05hbWUpO1xyXG5cclxuICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XHJcbiAgICAgICAgaWYgKCFwLm9wZW5FbGVtZW50cy5jb250YWlucyhmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xyXG4gICAgICAgICAgICBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKCFwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRva2VuLnRhZ05hbWUpKVxyXG4gICAgICAgICAgICBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XHJcbn1cclxuXHJcbi8vU3RlcHMgOSBhbmQgMTAgb2YgdGhlIGFsZ29yaXRobVxyXG5mdW5jdGlvbiBhYU9idGFpbkZ1cnRoZXN0QmxvY2socCwgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSkge1xyXG4gICAgdmFyIGZ1cnRoZXN0QmxvY2sgPSBudWxsO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xyXG5cclxuICAgICAgICBpZiAoZWxlbWVudCA9PT0gZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KVxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgaWYgKHAuX2lzU3BlY2lhbEVsZW1lbnQoZWxlbWVudCkpXHJcbiAgICAgICAgICAgIGZ1cnRoZXN0QmxvY2sgPSBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZnVydGhlc3RCbG9jaykge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsRWxlbWVudFBvcHBlZChmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xyXG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdXJ0aGVzdEJsb2NrO1xyXG59XHJcblxyXG4vL1N0ZXAgMTMgb2YgdGhlIGFsZ29yaXRobVxyXG5mdW5jdGlvbiBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudCkge1xyXG4gICAgdmFyIGVsZW1lbnQgPSBudWxsLFxyXG4gICAgICAgIGxhc3RFbGVtZW50ID0gZnVydGhlc3RCbG9jayxcclxuICAgICAgICBuZXh0RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZ1cnRoZXN0QmxvY2spO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQUFfSU5ORVJfTE9PUF9JVEVSOyBpKyspIHtcclxuICAgICAgICBlbGVtZW50ID0gbmV4dEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIC8vTk9URTogc3RvcmUgbmV4dCBlbGVtZW50IGZvciB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbiAoaXQgbWF5IGJlIGRlbGV0ZWQgZnJvbSB0aGUgc3RhY2sgYnkgc3RlcCA5LjUpXHJcbiAgICAgICAgbmV4dEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5nZXRDb21tb25BbmNlc3RvcihlbGVtZW50KTtcclxuXHJcbiAgICAgICAgdmFyIGVsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeShlbGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFlbGVtZW50RW50cnkpIHtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudClcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGVsZW1lbnQgPSBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpO1xyXG5cclxuICAgICAgICBpZiAobGFzdEVsZW1lbnQgPT09IGZ1cnRoZXN0QmxvY2spXHJcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmJvb2ttYXJrID0gZWxlbWVudEVudHJ5O1xyXG5cclxuICAgICAgICBwLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUobGFzdEVsZW1lbnQpO1xyXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCwgbGFzdEVsZW1lbnQpO1xyXG4gICAgICAgIGxhc3RFbGVtZW50ID0gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGFzdEVsZW1lbnQ7XHJcbn1cclxuXHJcbi8vU3RlcCAxMy43IG9mIHRoZSBhbGdvcml0aG1cclxuZnVuY3Rpb24gYWFSZWNyZWF0ZUVsZW1lbnRGcm9tRW50cnkocCwgZWxlbWVudEVudHJ5KSB7XHJcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50RW50cnkuZWxlbWVudCksXHJcbiAgICAgICAgbmV3RWxlbWVudCA9IHAudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudChlbGVtZW50RW50cnkudG9rZW4udGFnTmFtZSwgbnMsIGVsZW1lbnRFbnRyeS50b2tlbi5hdHRycyk7XHJcblxyXG4gICAgcC5vcGVuRWxlbWVudHMucmVwbGFjZShlbGVtZW50RW50cnkuZWxlbWVudCwgbmV3RWxlbWVudCk7XHJcbiAgICBlbGVtZW50RW50cnkuZWxlbWVudCA9IG5ld0VsZW1lbnQ7XHJcblxyXG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XHJcbn1cclxuXHJcbi8vU3RlcCAxNCBvZiB0aGUgYWxnb3JpdGhtXHJcbmZ1bmN0aW9uIGFhSW5zZXJ0TGFzdE5vZGVJbkNvbW1vbkFuY2VzdG9yKHAsIGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCkge1xyXG4gICAgaWYgKHAuX2lzRWxlbWVudENhdXNlc0Zvc3RlclBhcmVudGluZyhjb21tb25BbmNlc3RvcikpXHJcbiAgICAgICAgcC5fZm9zdGVyUGFyZW50RWxlbWVudChsYXN0RWxlbWVudCk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIHRuID0gcC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGNvbW1vbkFuY2VzdG9yKSxcclxuICAgICAgICAgICAgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjb21tb25BbmNlc3Rvcik7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTClcclxuICAgICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBwLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMoY29tbW9uQW5jZXN0b3IpWzBdO1xyXG5cclxuICAgICAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vU3RlcHMgMTUtMTkgb2YgdGhlIGFsZ29yaXRobVxyXG5mdW5jdGlvbiBhYVJlcGxhY2VGb3JtYXR0aW5nRWxlbWVudChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XHJcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpLFxyXG4gICAgICAgIHRva2VuID0gZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS50b2tlbixcclxuICAgICAgICBuZXdFbGVtZW50ID0gcC50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIG5zLCB0b2tlbi5hdHRycyk7XHJcblxyXG4gICAgcC5fYWRvcHROb2RlcyhmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcclxuICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XHJcblxyXG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0RWxlbWVudEFmdGVyQm9va21hcmsobmV3RWxlbWVudCwgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS50b2tlbik7XHJcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcclxuXHJcbiAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcclxuICAgIHAub3BlbkVsZW1lbnRzLmluc2VydEFmdGVyKGZ1cnRoZXN0QmxvY2ssIG5ld0VsZW1lbnQpO1xyXG59XHJcblxyXG4vL0FsZ29yaXRobSBlbnRyeSBwb2ludFxyXG5mdW5jdGlvbiBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQUFfT1VURVJfTE9PUF9JVEVSOyBpKyspIHtcclxuICAgICAgICB2YXIgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IGFhT2J0YWluRm9ybWF0dGluZ0VsZW1lbnRFbnRyeShwLCB0b2tlbiwgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XHJcblxyXG4gICAgICAgIGlmICghZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIHZhciBmdXJ0aGVzdEJsb2NrID0gYWFPYnRhaW5GdXJ0aGVzdEJsb2NrKHAsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xyXG5cclxuICAgICAgICBpZiAoIWZ1cnRoZXN0QmxvY2spXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5ib29rbWFyayA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XHJcblxyXG4gICAgICAgIHZhciBsYXN0RWxlbWVudCA9IGFhSW5uZXJMb29wKHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCksXHJcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC5vcGVuRWxlbWVudHMuZ2V0Q29tbW9uQW5jZXN0b3IoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcclxuXHJcbiAgICAgICAgcC50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGxhc3RFbGVtZW50KTtcclxuICAgICAgICBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpO1xyXG4gICAgICAgIGFhUmVwbGFjZUZvcm1hdHRpbmdFbGVtZW50KHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuLy9HZW5lcmljIHRva2VuIGhhbmRsZXJzXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIGlnbm9yZVRva2VuKHAsIHRva2VuKSB7XHJcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcclxufVxyXG5cclxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudChwLCB0b2tlbikge1xyXG4gICAgcC5fYXBwZW5kQ29tbWVudE5vZGUodG9rZW4sIHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUbXBsQ29udGVudCB8fCBwLm9wZW5FbGVtZW50cy5jdXJyZW50KVxyXG59XHJcblxyXG5mdW5jdGlvbiBhcHBlbmRDb21tZW50VG9Sb290SHRtbEVsZW1lbnQocCwgdG9rZW4pIHtcclxuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLm9wZW5FbGVtZW50cy5pdGVtc1swXSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwcGVuZENvbW1lbnRUb0RvY3VtZW50KHAsIHRva2VuKSB7XHJcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5kb2N1bWVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluc2VydENoYXJhY3RlcnMocCwgdG9rZW4pIHtcclxuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdG9wUGFyc2luZyhwLCB0b2tlbikge1xyXG4gICAgcC5zdG9wcGVkID0gdHJ1ZTtcclxufVxyXG5cclxuLy8xMi4yLjUuNC4xIFRoZSBcImluaXRpYWxcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBkb2N0eXBlSW5Jbml0aWFsTW9kZShwLCB0b2tlbikge1xyXG4gICAgcC5fc2V0RG9jdW1lbnRUeXBlKHRva2VuKTtcclxuXHJcbiAgICBpZiAodG9rZW4uZm9yY2VRdWlya3MgfHwgRG9jdHlwZS5pc1F1aXJrcyh0b2tlbi5uYW1lLCB0b2tlbi5wdWJsaWNJZCwgdG9rZW4uc3lzdGVtSWQpKVxyXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuc2V0UXVpcmtzTW9kZShwLmRvY3VtZW50KTtcclxuXHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBCRUZPUkVfSFRNTF9NT0RFO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b2tlbkluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcclxuICAgIHAudHJlZUFkYXB0ZXIuc2V0UXVpcmtzTW9kZShwLmRvY3VtZW50KTtcclxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IVE1MX01PREU7XHJcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG5cclxuLy8xMi4yLjUuNC4yIFRoZSBcImJlZm9yZSBodG1sXCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gc3RhcnRUYWdCZWZvcmVIdG1sKHAsIHRva2VuKSB7XHJcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MKSB7XHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hFQURfTU9ERTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5IRUFEIHx8IHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuQlIpXHJcbiAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKSB7XHJcbiAgICBwLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQoKTtcclxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IRUFEX01PREU7XHJcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG5cclxuLy8xMi4yLjUuNC4zIFRoZSBcImJlZm9yZSBoZWFkXCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gc3RhcnRUYWdCZWZvcmVIZWFkKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5IRUFEKSB7XHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAgICAgcC5oZWFkRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fSEVBRF9NT0RFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0b2tlbkJlZm9yZUhlYWQocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRUYWdCZWZvcmVIZWFkKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5IRUFEIHx8IHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5CUilcclxuICAgICAgICB0b2tlbkJlZm9yZUhlYWQocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b2tlbkJlZm9yZUhlYWQocCwgdG9rZW4pIHtcclxuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5IRUFEKTtcclxuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn1cclxuXHJcblxyXG4vLzEyLjIuNS40LjQgVGhlIFwiaW4gaGVhZFwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5CQVNFIHx8IHRuID09PSAkLkJBU0VGT05UIHx8IHRuID09PSAkLkJHU09VTkQgfHxcclxuICAgICAgICAgICAgIHRuID09PSAkLkNPTU1BTkQgfHwgdG4gPT09ICQuTElOSyB8fCB0biA9PT0gJC5NRVRBKSB7XHJcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVElUTEUpXHJcbiAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkNEQVRBKTtcclxuXHJcbiAgICAvL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiBpbnRlcmFjdGl2ZSB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBzY3JpcHRpbmcsIHNvIHdlIHBhcnNlXHJcbiAgICAvLzxub3NjcmlwdD4gYXMgYSByYXd0ZXh0LlxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9TQ1JJUFQgfHwgdG4gPT09ICQuTk9GUkFNRVMgfHwgdG4gPT09ICQuU1RZTEUpXHJcbiAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKVxyXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSkge1xyXG4gICAgICAgIHAuX2luc2VydFRlbXBsYXRlKHRva2VuLCBOUy5IVE1MKTtcclxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcclxuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9URU1QTEFURV9NT0RFO1xyXG4gICAgICAgIHAuX3B1c2hUbXBsSW5zZXJ0aW9uTW9kZShJTl9URU1QTEFURV9NT0RFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biAhPT0gJC5IRUFEKVxyXG4gICAgICAgIHRva2VuSW5IZWFkKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnSW5IZWFkKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5IRUFEKSB7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfSEVBRF9NT0RFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuQlIgfHwgdG4gPT09ICQuSFRNTClcclxuICAgICAgICB0b2tlbkluSGVhZChwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCkge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkKCk7XHJcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcclxuICAgICAgICBwLl9wb3BUbXBsSW5zZXJ0aW9uTW9kZSgpO1xyXG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB0b2tlbkluSGVhZChwLCB0b2tlbikge1xyXG4gICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5IRUFEKTtcclxuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn1cclxuXHJcblxyXG4vLzEyLjIuNS40LjYgVGhlIFwiYWZ0ZXIgaGVhZFwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZKSB7XHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKSB7XHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fRlJBTUVTRVRfTU9ERTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5CQVNFIHx8IHRuID09PSAkLkJBU0VGT05UIHx8IHRuID09PSAkLkJHU09VTkQgfHwgdG4gPT09ICQuTElOSyB8fCB0biA9PT0gJC5NRVRBIHx8XHJcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TQ1JJUFQgfHwgdG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuVEVNUExBVEUgfHwgdG4gPT09ICQuVElUTEUpIHtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5wdXNoKHAuaGVhZEVsZW1lbnQpO1xyXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUocC5oZWFkRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcclxuICAgICAgICB0b2tlbkFmdGVySGVhZChwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZFRhZ0FmdGVySGVhZChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuQk9EWSB8fCB0biA9PT0gJC5IVE1MIHx8IHRuID09PSAkLkJSKVxyXG4gICAgICAgIHRva2VuQWZ0ZXJIZWFkKHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSlcclxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b2tlbkFmdGVySGVhZChwLCB0b2tlbikge1xyXG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJPRFkpO1xyXG4gICAgcC5mcmFtZXNldE9rID0gdHJ1ZTtcclxuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn1cclxuXHJcblxyXG4vLzEyLjIuNS40LjcgVGhlIFwiaW4gYm9keVwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XHJcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2hhcmFjdGVySW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XHJcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaHRtbFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKVxyXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYWRvcHRBdHRyaWJ1dGVzKHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdLCB0b2tlbi5hdHRycyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJvZHlTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgdmFyIGJvZHlFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMudHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKTtcclxuXHJcbiAgICBpZiAoYm9keUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XHJcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcbiAgICAgICAgcC50cmVlQWRhcHRlci5hZG9wdEF0dHJpYnV0ZXMoYm9keUVsZW1lbnQsIHRva2VuLmF0dHJzKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZnJhbWVzZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgdmFyIGJvZHlFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMudHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKTtcclxuXHJcbiAgICBpZiAocC5mcmFtZXNldE9rICYmIGJvZHlFbGVtZW50KSB7XHJcbiAgICAgICAgcC50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGJvZHlFbGVtZW50KTtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BBbGxVcFRvSHRtbEVsZW1lbnQoKTtcclxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9GUkFNRVNFVF9NT0RFO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXHJcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xyXG5cclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxyXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcclxuXHJcbiAgICB2YXIgdG4gPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpXHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XHJcblxyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxyXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcclxuXHJcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgIC8vTk9URTogSWYgdGhlIG5leHQgdG9rZW4gaXMgYSBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyIHRva2VuLCB0aGVuIGlnbm9yZSB0aGF0IHRva2VuIGFuZCBtb3ZlXHJcbiAgICAvL29uIHRvIHRoZSBuZXh0IG9uZS4gKE5ld2xpbmVzIGF0IHRoZSBzdGFydCBvZiBwcmUgYmxvY2tzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXHJcbiAgICBwLnNraXBOZXh0TmV3TGluZSA9IHRydWU7XHJcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZm9ybVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgaW5UZW1wbGF0ZSA9IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDA7XHJcblxyXG4gICAgaWYgKCFwLmZvcm1FbGVtZW50IHx8IGluVGVtcGxhdGUpIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxyXG4gICAgICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XHJcblxyXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG5cclxuICAgICAgICBpZiAoIWluVGVtcGxhdGUpXHJcbiAgICAgICAgICAgIHAuZm9ybUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBsaXN0SXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXSxcclxuICAgICAgICAgICAgdG4gPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmICgodG9rZW4udGFnTmFtZSA9PT0gJC5MSSAmJiB0biA9PT0gJC5MSSkgfHxcclxuICAgICAgICAgICAgKCh0b2tlbi50YWdOYW1lID09PSAkLkREIHx8IHRva2VuLnRhZ05hbWUgPT09ICQuRFQpICYmICh0biA9PT0gJC5ERCB8fCB0biA9PSAkLkRUKSkpIHtcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcodG4pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0biAhPT0gJC5BRERSRVNTICYmIHRuICE9PSAkLkRJViAmJiB0biAhPT0gJC5QICYmIHAuX2lzU3BlY2lhbEVsZW1lbnQoZWxlbWVudCkpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXHJcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xyXG5cclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcclxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XHJcblxyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICBwLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcclxufVxyXG5cclxuZnVuY3Rpb24gYnV0dG9uU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQlVUVE9OKSkge1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQlVUVE9OKTtcclxuICAgICAgICBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcclxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgYWN0aXZlRWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5SW5TY29wZVdpdGhUYWdOYW1lKCQuQSk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnRFbnRyeSkge1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQSk7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGFjdGl2ZUVsZW1lbnRFbnRyeS5lbGVtZW50KTtcclxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShhY3RpdmVFbGVtZW50RW50cnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XHJcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vYnJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcclxuXHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLk5PQlIpKSB7XHJcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5OT0JSKTtcclxuICAgICAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaEVsZW1lbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcHBsZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XHJcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKCFwLnRyZWVBZGFwdGVyLmlzUXVpcmtzTW9kZShwLmRvY3VtZW50KSAmJiBwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXHJcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xyXG5cclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XHJcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcblxyXG4gICAgdmFyIGlucHV0VHlwZSA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIodG9rZW4sIEFUVFJTLlRZUEUpO1xyXG5cclxuICAgIGlmICghaW5wdXRUeXBlIHx8IGlucHV0VHlwZS50b0xvd2VyQ2FzZSgpICE9PSBISURERU5fSU5QVVRfVFlQRSlcclxuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcmFtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxyXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcclxuXHJcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbWFnZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICB0b2tlbi50YWdOYW1lID0gJC5JTUc7XHJcbiAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc2luZGV4U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIGlmICghcC5mb3JtRWxlbWVudCB8fCBwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPiAwKSB7XHJcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZ1dpdGhBdHRycygkLkZPUk0sIGdldFNlYXJjaGFibGVJbmRleEZvcm1BdHRycyh0b2tlbikpO1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5IUik7XHJcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkxBQkVMKTtcclxuICAgICAgICBwLnRyZWVBZGFwdGVyLmluc2VydFRleHQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgZ2V0U2VhcmNoYWJsZUluZGV4TGFiZWxUZXh0KHRva2VuKSk7XHJcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZ1dpdGhBdHRycygkLklOUFVULCBnZXRTZWFyY2hhYmxlSW5kZXhJbnB1dEF0dHJzKHRva2VuKSk7XHJcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5MQUJFTCk7XHJcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkhSKTtcclxuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkZPUk0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB0ZXh0YXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgIC8vTk9URTogSWYgdGhlIG5leHQgdG9rZW4gaXMgYSBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyIHRva2VuLCB0aGVuIGlnbm9yZSB0aGF0IHRva2VuIGFuZCBtb3ZlXHJcbiAgICAvL29uIHRvIHRoZSBuZXh0IG9uZS4gKE5ld2xpbmVzIGF0IHRoZSBzdGFydCBvZiB0ZXh0YXJlYSBlbGVtZW50cyBhcmUgaWdub3JlZCBhcyBhbiBhdXRob3JpbmcgY29udmVuaWVuY2UuKVxyXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xyXG4gICAgcC50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5SQ0RBVEE7XHJcbiAgICBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IHAuaW5zZXJ0aW9uTW9kZTtcclxuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xyXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gVEVYVF9NT0RFO1xyXG59XHJcblxyXG5mdW5jdGlvbiB4bXBTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcclxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XHJcblxyXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcclxuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xyXG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlmcmFtZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xyXG59XHJcblxyXG4vL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBwbHVnaW5zLCBzbyB3ZSBwYXJzZVxyXG4vLzxub2VtYmVkPiBhcyBhIHJhd3RleHQuXHJcbmZ1bmN0aW9uIG5vZW1iZWRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlbGVjdFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAocC5pbnNlcnRpb25Nb2RlID09PSBJTl9UQUJMRV9NT0RFIHx8IHAuaW5zZXJ0aW9uTW9kZSA9PT0gSU5fQ0FQVElPTl9NT0RFIHx8XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9UQUJMRV9CT0RZX01PREUgfHwgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9ST1dfTU9ERSB8fFxyXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9PT0gSU5fQ0VMTF9NT0RFKSB7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX0lOX1RBQkxFX01PREU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9NT0RFO1xyXG59XHJcblxyXG5mdW5jdGlvbiBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUSU9OKTtcclxuXHJcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuUlVCWSkpXHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xyXG5cclxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtZW51aXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWF0aFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xyXG5cclxuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuTWF0aE1MQXR0cnModG9rZW4pO1xyXG4gICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5YTUxBdHRycyh0b2tlbik7XHJcblxyXG4gICAgaWYgKHRva2VuLnNlbGZDbG9zaW5nKVxyXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLk1BVEhNTCk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuTUFUSE1MKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3ZnU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XHJcblxyXG4gICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbik7XHJcbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcclxuXHJcbiAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpXHJcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuU1ZHKTtcclxuICAgIGVsc2VcclxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5TVkcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XHJcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxufVxyXG5cclxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxyXG4vL0l0J3MgZmFzdGVyIHRoYW4gdXNpbmcgZGljdGlvbmFyeS5cclxuZnVuY3Rpb24gc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgc3dpdGNoICh0bi5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5JIHx8IHRuID09PSAkLlMgfHwgdG4gPT09ICQuQiB8fCB0biA9PT0gJC5VKVxyXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlApXHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQSlcclxuICAgICAgICAgICAgICAgIGFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkRMIHx8IHRuID09PSAkLk9MIHx8IHRuID09PSAkLlVMKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICAgICAgbnVtYmVyZWRIZWFkZXJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5MSSB8fCB0biA9PT0gJC5ERCB8fCB0biA9PT0gJC5EVClcclxuICAgICAgICAgICAgICAgIGxpc3RJdGVtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRU0gfHwgdG4gPT09ICQuVFQpXHJcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQlIpXHJcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSFIpXHJcbiAgICAgICAgICAgICAgICBoclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlJQIHx8IHRuID09PSAkLlJUKVxyXG4gICAgICAgICAgICAgICAgcnBTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biAhPT0gJC5USCAmJiB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5UUilcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRElWIHx8IHRuID09PSAkLkRJUiB8fCB0biA9PT0gJC5OQVYpXHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuUFJFKVxyXG4gICAgICAgICAgICAgICAgcHJlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQklHKVxyXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklNRyB8fCB0biA9PT0gJC5XQlIpXHJcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuWE1QKVxyXG4gICAgICAgICAgICAgICAgeG1wU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU1ZHKVxyXG4gICAgICAgICAgICAgICAgc3ZnU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ09MKVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5IVE1MKVxyXG4gICAgICAgICAgICAgICAgaHRtbFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuTElOSyB8fCB0biA9PT0gJC5NRVRBKVxyXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQk9EWSlcclxuICAgICAgICAgICAgICAgIGJvZHlTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQUlOIHx8IHRuID09PSAkLk1FTlUpXHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRk9STSlcclxuICAgICAgICAgICAgICAgIGZvcm1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DT0RFIHx8IHRuID09PSAkLkZPTlQpXHJcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTk9CUilcclxuICAgICAgICAgICAgICAgIG5vYnJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BUkVBKVxyXG4gICAgICAgICAgICAgICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BVEgpXHJcbiAgICAgICAgICAgICAgICBtYXRoU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuVElUTEUpXHJcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BU0lERSlcclxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TTUFMTClcclxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSlcclxuICAgICAgICAgICAgICAgIHRhYmxlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRU1CRUQpXHJcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSU5QVVQpXHJcbiAgICAgICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlBBUkFNIHx8IHRuID09PSAkLlRSQUNLKVxyXG4gICAgICAgICAgICAgICAgcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTUFHRSlcclxuICAgICAgICAgICAgICAgIGltYWdlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuRlJBTUUgJiYgdG4gIT09ICQuVEJPRFkgJiYgdG4gIT09ICQuVEZPT1QgJiYgdG4gIT09ICQuVEhFQUQpXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlNDUklQVClcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkNFTlRFUiB8fCB0biA9PT0gJC5GSUdVUkUgfHwgdG4gPT09ICQuRk9PVEVSIHx8IHRuID09PSAkLkhFQURFUiB8fCB0biA9PT0gJC5IR1JPVVApXHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQlVUVE9OKVxyXG4gICAgICAgICAgICAgICAgYnV0dG9uU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU1RSSUtFIHx8IHRuID09PSAkLlNUUk9ORylcclxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKVxyXG4gICAgICAgICAgICAgICAgYXBwbGV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuS0VZR0VOKVxyXG4gICAgICAgICAgICAgICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNPVVJDRSlcclxuICAgICAgICAgICAgICAgIHBhcmFtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSUZSQU1FKVxyXG4gICAgICAgICAgICAgICAgaWZyYW1lU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU0VMRUNUKVxyXG4gICAgICAgICAgICAgICAgc2VsZWN0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuT1BUSU9OKVxyXG4gICAgICAgICAgICAgICAgb3B0Z3JvdXBTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNzpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJHU09VTkQgfHwgdG4gPT09ICQuQ09NTUFORClcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRFVEFJTFMgfHwgdG4gPT09ICQuQUREUkVTUyB8fCB0biA9PT0gJC5BUlRJQ0xFIHx8IHRuID09PSAkLlNFQ1RJT04gfHwgdG4gPT09ICQuU1VNTUFSWSlcclxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5MSVNUSU5HKVxyXG4gICAgICAgICAgICAgICAgcHJlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTUFSUVVFRSlcclxuICAgICAgICAgICAgICAgIGFwcGxldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklTSU5ERVgpXHJcbiAgICAgICAgICAgICAgICBpc2luZGV4U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTk9FTUJFRClcclxuICAgICAgICAgICAgICAgIG5vZW1iZWRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biAhPT0gJC5DQVBUSU9OKVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDg6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5NRU5VSVRFTSlcclxuICAgICAgICAgICAgICAgIG1lbnVpdGVtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUVTRVQpXHJcbiAgICAgICAgICAgICAgICBmcmFtZXNldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZJRUxEU0VUKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRFWFRBUkVBKVxyXG4gICAgICAgICAgICAgICAgdGV4dGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSlcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PU0NSSVBUKVxyXG4gICAgICAgICAgICAgICAgbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVEdST1VQKVxyXG4gICAgICAgICAgICAgICAgb3B0Z3JvdXBTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biAhPT0gJC5DT0xHUk9VUClcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA5OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuUExBSU5URVhUKVxyXG4gICAgICAgICAgICAgICAgcGxhaW50ZXh0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDEwOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkxPQ0tRVU9URSB8fCB0biA9PT0gJC5GSUdDQVBUSU9OKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYm9keUVuZFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5CT0RZKSlcclxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9CT0RZX01PREU7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBodG1sRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5CT0RZKTtcclxuXHJcbiAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxyXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG4pKSB7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1FbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIHZhciBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCxcclxuICAgICAgICBmb3JtRWxlbWVudCA9IHAuZm9ybUVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKCFpblRlbXBsYXRlKVxyXG4gICAgICAgIHAuZm9ybUVsZW1lbnQgPSBudWxsO1xyXG5cclxuICAgIGlmICgoZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkZPUk0pKSB7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xyXG5cclxuICAgICAgICBpZiAoaW5UZW1wbGF0ZSlcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuRk9STSk7XHJcblxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGZvcm1FbGVtZW50KTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuUCk7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuUCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLlApO1xyXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxpRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5MaXN0SXRlbVNjb3BlKCQuTEkpKSB7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24oJC5MSSk7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuTEkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBkZEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0bik7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbnVtYmVyZWRIZWFkZXJFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcclxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNOdW1iZXJlZEhlYWRlckluU2NvcGUoKSkge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwcGxldEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcclxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBickVuZFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJSKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xyXG5cclxuICAgICAgICBpZiAocC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0bikge1xyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0bik7XHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsRWxlbWVudFBvcHBlZChlbGVtZW50KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBJbnRlZ2VyIGNvbXBhcmlzb25zIGFyZSBsb3ctY29zdCwgc28gd2UgY2FuIHVzZSB2ZXJ5IGZhc3QgdGFnIG5hbWUgbGVuZ3RoIGZpbHRlcnMgaGVyZS5cclxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXHJcbmZ1bmN0aW9uIGVuZFRhZ0luQm9keShwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkEgfHwgdG4gPT09ICQuQiB8fCB0biA9PT0gJC5JIHx8IHRuID09PSAkLlMgfHwgdG4gPT0gJC5VKVxyXG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlApXHJcbiAgICAgICAgICAgICAgICBwRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgaWYgKHRuID09ICQuREwgfHwgdG4gPT09ICQuVUwgfHwgdG4gPT09ICQuT0wpXHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkxJKVxyXG4gICAgICAgICAgICAgICAgbGlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXHJcbiAgICAgICAgICAgICAgICBkZEVuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcclxuICAgICAgICAgICAgICAgIG51bWJlcmVkSGVhZGVyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxyXG4gICAgICAgICAgICAgICAgYnJFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRU0gfHwgdG4gPT09ICQuVFQpXHJcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQklHKVxyXG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRJUiB8fCB0biA9PT0gJC5ESVYgfHwgdG4gPT09ICQuTkFWKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CT0RZKVxyXG4gICAgICAgICAgICAgICAgYm9keUVuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IVE1MKVxyXG4gICAgICAgICAgICAgICAgaHRtbEVuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GT1JNKVxyXG4gICAgICAgICAgICAgICAgZm9ybUVuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DT0RFIHx8IHRuID09PSAkLkZPTlQgfHwgdG4gPT09ICQuTk9CUilcclxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQUlOIHx8IHRuID09PSAkLk1FTlUpXHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkFTSURFKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TTUFMTClcclxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxyXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKVxyXG4gICAgICAgICAgICAgICAgYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09ICQuU1RSSUtFIHx8IHRuID09PSAkLlNUUk9ORylcclxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDc6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5BRERSRVNTIHx8IHRuID09PSAkLkFSVElDTEUgfHwgdG4gPT09ICQuREVUQUlMUyB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXHJcbiAgICAgICAgICAgICAgICBhcHBsZXRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA4OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRklFTERTRVQpXHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgICAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgMTA6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CTE9DS1FVT1RFIHx8IHRuID09PSAkLkZJR0NBUFRJT04pXHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQgOlxyXG4gICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZW9mSW5Cb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrVG9wID4gLTEpXHJcbiAgICAgICAgZW9mSW5UZW1wbGF0ZShwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XHJcbn1cclxuXHJcbi8vMTIuMi41LjQuOCBUaGUgXCJ0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gZW5kVGFnSW5UZXh0KHAsIHRva2VuKSB7XHJcbiAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAuc2NyaXB0SGFuZGxlciAmJiB0b2tlbi50YWdOYW1lID09PSAkLlNDUklQVClcclxuICAgICAgICBwLnNjcmlwdEhhbmRsZXIocC5kb2N1bWVudCwgcC5vcGVuRWxlbWVudHMuY3VycmVudCk7XHJcblxyXG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGVvZkluVGV4dChwLCB0b2tlbikge1xyXG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZTtcclxuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn1cclxuXHJcblxyXG4vLzEyLjIuNS40LjkgVGhlIFwiaW4gdGFibGVcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBjaGFyYWN0ZXJJblRhYmxlKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgY3VyVG4gPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZTtcclxuXHJcbiAgICBpZiAoY3VyVG4gPT09ICQuVEFCTEUgfHwgY3VyVG4gPT09ICQuVEJPRFkgfHwgY3VyVG4gPT09ICQuVEZPT1QgfHwgY3VyVG4gPT09ICQuVEhFQUQgfHwgY3VyVG4gPT09ICQuVFIpIHtcclxuICAgICAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcclxuICAgICAgICBwLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSBmYWxzZTtcclxuICAgICAgICBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IHAuaW5zZXJ0aW9uTW9kZTtcclxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9URVhUX01PREU7XHJcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FwdGlvblN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xyXG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcclxuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DQVBUSU9OX01PREU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XHJcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xyXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DT0xVTU5fR1JPVVBfTU9ERTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29sU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XHJcbiAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuQ09MR1JPVVApO1xyXG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdGJvZHlTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcclxuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XHJcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcclxufVxyXG5cclxuZnVuY3Rpb24gdGRTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcclxuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UQk9EWSk7XHJcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xyXG4gICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVEFCTEUpO1xyXG5cclxuICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXHJcbiAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxyXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlucHV0U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgaW5wdXRUeXBlID0gVG9rZW5pemVyLmdldFRva2VuQXR0cih0b2tlbiwgQVRUUlMuVFlQRSk7XHJcblxyXG4gICAgaWYgKGlucHV0VHlwZSAmJiBpbnB1dFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gSElEREVOX0lOUFVUX1RZUEUpXHJcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZvcm1TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcclxuICAgIGlmICghcC5mb3JtRWxlbWVudCAmJiBwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPT09IDApIHtcclxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgICAgICBwLmZvcm1FbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEggfHwgdG4gPT09ICQuVFIpXHJcbiAgICAgICAgICAgICAgICB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkNPTClcclxuICAgICAgICAgICAgICAgIGNvbFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkZPUk0pXHJcbiAgICAgICAgICAgICAgICBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEFCTEUpXHJcbiAgICAgICAgICAgICAgICB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TVFlMRSlcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEKVxyXG4gICAgICAgICAgICAgICAgdGJvZHlTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSU5QVVQpXHJcbiAgICAgICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlNDUklQVClcclxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQ0FQVElPTilcclxuICAgICAgICAgICAgICAgIGNhcHRpb25TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDg6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DT0xHUk9VUClcclxuICAgICAgICAgICAgICAgIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnSW5UYWJsZShwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuVEFCTEUpIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuVEFCTEUpKSB7XHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlRBQkxFKTtcclxuICAgICAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCAmJiB0biAhPT0gJC5IVE1MICYmXHJcbiAgICAgICAgICAgICB0biAhPT0gJC5UQk9EWSAmJiB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5URk9PVCAmJiB0biAhPT0gJC5USCAmJiB0biAhPT0gJC5USEVBRCAmJiB0biAhPT0gJC5UUikge1xyXG4gICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRva2VuSW5UYWJsZShwLCB0b2tlbikge1xyXG4gICAgdmFyIHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGUgPSBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQ7XHJcblxyXG4gICAgcC5mb3N0ZXJQYXJlbnRpbmdFbmFibGVkID0gdHJ1ZTtcclxuICAgIHAuX3Byb2Nlc3NUb2tlbkluQm9keU1vZGUodG9rZW4pO1xyXG4gICAgcC5mb3N0ZXJQYXJlbnRpbmdFbmFibGVkID0gc2F2ZWRGb3N0ZXJQYXJlbnRpbmdTdGF0ZTtcclxufVxyXG5cclxuXHJcbi8vMTIuMi41LjQuMTAgVGhlIFwiaW4gdGFibGUgdGV4dFwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHdoaXRlc3BhY2VDaGFyYWN0ZXJJblRhYmxlVGV4dChwLCB0b2tlbikge1xyXG4gICAgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLnB1c2godG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjaGFyYWN0ZXJJblRhYmxlVGV4dChwLCB0b2tlbikge1xyXG4gICAgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLnB1c2godG9rZW4pO1xyXG4gICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9rZW5JblRhYmxlVGV4dChwLCB0b2tlbikge1xyXG4gICAgaWYgKHAuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB0b2tlbkluVGFibGUocCwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHAucGVuZGluZ0NoYXJhY3RlclRva2Vucy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgcC5faW5zZXJ0Q2hhcmFjdGVycyhwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnNbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlO1xyXG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxufVxyXG5cclxuXHJcbi8vMTIuMi41LjQuMTEgVGhlIFwiaW4gY2FwdGlvblwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnSW5DYXB0aW9uKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5DQVBUSU9OIHx8IHRuID09PSAkLkNPTCB8fCB0biA9PT0gJC5DT0xHUk9VUCB8fCB0biA9PT0gJC5UQk9EWSB8fFxyXG4gICAgICAgIHRuID09PSAkLlREIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIIHx8IHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSKSB7XHJcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQ0FQVElPTik7XHJcblxyXG4gICAgICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXHJcbiAgICAgICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRUYWdJbkNhcHRpb24ocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04pIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuQ0FQVElPTikpIHtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5DQVBUSU9OKTtcclxuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcclxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdG9rZW4uaWdub3JlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcclxuICAgICAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5DQVBUSU9OKTtcclxuXHJcbiAgICAgICAgLy9OT1RFOiBUaGUgZmFrZSBlbmQgdGFnIHRva2VuIGhlcmUgY2FuIG9ubHkgYmUgaWdub3JlZCBpbiB0aGUgZnJhZ21lbnQgY2FzZS5cclxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxyXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkJPRFkgJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwgJiYgdG4gIT09ICQuVEJPRFkgJiZcclxuICAgICAgICAgICAgIHRuICE9PSAkLlREICYmIHRuICE9PSAkLlRGT09UICYmIHRuICE9PSAkLlRIICYmIHRuICE9PSAkLlRIRUFEICYmIHRuICE9PSAkLlRSKSB7XHJcbiAgICAgICAgZW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbi8vMTIuMi41LjQuMTIgVGhlIFwiaW4gY29sdW1uIGdyb3VwXCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gc3RhcnRUYWdJbkNvbHVtbkdyb3VwKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5DT0wpXHJcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXHJcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0b2tlbkluQ29sdW1uR3JvdXAocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRUYWdJbkNvbHVtbkdyb3VwKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5DT0xHUk9VUCkge1xyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSAhPT0gJC5DT0xHUk9VUClcclxuICAgICAgICAgICAgdG9rZW4uaWdub3JlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcclxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXHJcbiAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biAhPT0gJC5DT0wpXHJcbiAgICAgICAgdG9rZW5JbkNvbHVtbkdyb3VwKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9rZW5JbkNvbHVtbkdyb3VwKHAsIHRva2VuKSB7XHJcbiAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5DT0xHUk9VUCk7XHJcblxyXG4gICAgLy9OT1RFOiBUaGUgZmFrZSBlbmQgdGFnIHRva2VuIGhlcmUgY2FuIG9ubHkgYmUgaWdub3JlZCBpbiB0aGUgZnJhZ21lbnQgY2FzZS5cclxuICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXHJcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxufVxyXG5cclxuLy8xMi4yLjUuNC4xMyBUaGUgXCJpbiB0YWJsZSBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuZnVuY3Rpb24gc3RhcnRUYWdJblRhYmxlQm9keShwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuVFIpIHtcclxuICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcclxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9ST1dfTU9ERTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5USCB8fCB0biA9PT0gJC5URCkge1xyXG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UUik7XHJcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5DQVBUSU9OIHx8IHRuID09PSAkLkNPTCB8fCB0biA9PT0gJC5DT0xHUk9VUCB8fFxyXG4gICAgICAgICAgICAgdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQpIHtcclxuXHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc1RhYmxlQm9keUNvbnRleHRJblRhYmxlU2NvcGUoKSkge1xyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUpO1xyXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEKSB7XHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xyXG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSkge1xyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lKTtcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCB8fFxyXG4gICAgICAgICAgICAgdG4gIT09ICQuSFRNTCAmJiB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5USCAmJiB0biAhPT0gJC5UUikge1xyXG4gICAgICAgIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLzEyLjIuNS40LjE0IFRoZSBcImluIHJvd1wiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Sb3cocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQoKTtcclxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DRUxMX01PREU7XHJcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHwgdG4gPT09ICQuVEJPRFkgfHxcclxuICAgICAgICAgICAgIHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSKSB7XHJcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVFIpO1xyXG5cclxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxyXG4gICAgICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZFRhZ0luUm93KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5UUikge1xyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UUikpIHtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQoKTtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XHJcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdG9rZW4uaWdub3JlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcclxuICAgICAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UUik7XHJcblxyXG4gICAgICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXHJcbiAgICAgICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVFIpO1xyXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQIHx8XHJcbiAgICAgICAgICAgICB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlREICYmIHRuICE9PSAkLlRIKSB7XHJcbiAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vLzEyLjIuNS40LjE1IFRoZSBcImluIGNlbGxcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0luQ2VsbChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHwgdG4gPT09ICQuVEJPRFkgfHxcclxuICAgICAgICB0biA9PT0gJC5URCB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USCB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUikge1xyXG5cclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuVEQpIHx8IHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRIKSkge1xyXG4gICAgICAgICAgICBwLl9jbG9zZVRhYmxlQ2VsbCgpO1xyXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRUYWdJbkNlbGwocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLlREIHx8IHRuID09PSAkLlRIKSB7XHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcclxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xyXG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xyXG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9ST1dfTU9ERTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xyXG4gICAgICAgICAgICBwLl9jbG9zZVRhYmxlQ2VsbCgpO1xyXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwpXHJcbiAgICAgICAgZW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcclxufVxyXG5cclxuLy8xMi4yLjUuNC4xNiBUaGUgXCJpbiBzZWxlY3RcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0luU2VsZWN0KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRJT04pIHtcclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxyXG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLk9QVElPTik7XHJcblxyXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVEdST1VQKSB7XHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xyXG5cclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUR1JPVVApXHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUR1JPVVApO1xyXG5cclxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmICh0biA9PT0gJC5TRUxFQ1QpXHJcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLklOUFVUIHx8IHRuID09PSAkLktFWUdFTiB8fCB0biA9PT0gJC5URVhUQVJFQSkge1xyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNlbGVjdFNjb3BlKCQuU0VMRUNUKSkge1xyXG4gICAgICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlNFTEVDVCk7XHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVCB8fCB0biA9PT0gJC5URU1QTEFURSlcclxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZFRhZ0luU2VsZWN0KHAsIHRva2VuKSB7XHJcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xyXG5cclxuICAgIGlmICh0biA9PT0gJC5PUFRHUk9VUCkge1xyXG4gICAgICAgIHZhciBwcmV2T3BlbkVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1twLm9wZW5FbGVtZW50cy5zdGFja1RvcCAtIDFdLFxyXG4gICAgICAgICAgICBwcmV2T3BlbkVsZW1lbnRUbiA9IHByZXZPcGVuRWxlbWVudCAmJiBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUocHJldk9wZW5FbGVtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTiAmJiBwcmV2T3BlbkVsZW1lbnRUbiA9PT0gJC5PUFRHUk9VUClcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xyXG5cclxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUR1JPVVApXHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTikge1xyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRJT04pXHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVCAmJiBwLm9wZW5FbGVtZW50cy5oYXNJblNlbGVjdFNjb3BlKCQuU0VMRUNUKSkge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlNFTEVDVCk7XHJcbiAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXHJcbiAgICAgICAgZW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcclxufVxyXG5cclxuLy8xMi4yLjUuNC4xNyBUaGUgXCJpbiBzZWxlY3QgaW4gdGFibGVcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0luU2VsZWN0SW5UYWJsZShwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fFxyXG4gICAgICAgIHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSIHx8IHRuID09PSAkLlREIHx8IHRuID09PSAkLlRIKSB7XHJcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xyXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHN0YXJ0VGFnSW5TZWxlY3QocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRUYWdJblNlbGVjdEluVGFibGUocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHxcclxuICAgICAgICB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUiB8fCB0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xyXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XHJcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuU0VMRUNUKTtcclxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIGVuZFRhZ0luU2VsZWN0KHAsIHRva2VuKTtcclxufVxyXG5cclxuLy8xMi4yLjUuNC4xOCBUaGUgXCJpbiB0ZW1wbGF0ZVwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnSW5UZW1wbGF0ZShwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5CR1NPVU5EIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSB8fFxyXG4gICAgICAgIHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLlNDUklQVCB8fCB0biA9PT0gJC5TVFlMRSB8fCB0biA9PT0gJC5URU1QTEFURSB8fCB0biA9PT0gJC5USVRMRSkge1xyXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgbmV3SW5zZXJ0aW9uTW9kZSA9IFRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbdG5dIHx8IElOX0JPRFlfTU9ERTtcclxuXHJcbiAgICAgICAgcC5fcG9wVG1wbEluc2VydGlvbk1vZGUoKTtcclxuICAgICAgICBwLl9wdXNoVG1wbEluc2VydGlvbk1vZGUobmV3SW5zZXJ0aW9uTW9kZSk7XHJcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gbmV3SW5zZXJ0aW9uTW9kZTtcclxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRUYWdJblRlbXBsYXRlKHAsIHRva2VuKSB7XHJcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5URU1QTEFURSlcclxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlb2ZJblRlbXBsYXRlKHAsIHRva2VuKSB7XHJcbiAgICBpZiAocC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCkge1xyXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGVtcGxhdGVQb3BwZWQoKTtcclxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xyXG4gICAgICAgIHAuX3BvcFRtcGxJbnNlcnRpb25Nb2RlKCk7XHJcbiAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XHJcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgcC5zdG9wcGVkID0gdHJ1ZTtcclxufVxyXG5cclxuXHJcbi8vMTIuMi41LjQuMTkgVGhlIFwiYWZ0ZXIgYm9keVwiIGluc2VydGlvbiBtb2RlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdG9rZW5BZnRlckJvZHkocCwgdG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbmRUYWdBZnRlckJvZHkocCwgdG9rZW4pIHtcclxuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpIHtcclxuICAgICAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0KVxyXG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9BRlRFUl9CT0RZX01PREU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9rZW5BZnRlckJvZHkocCwgdG9rZW4pIHtcclxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0JPRFlfTU9ERTtcclxuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn1cclxuXHJcbi8vMTIuMi41LjQuMjAgVGhlIFwiaW4gZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0luRnJhbWVzZXQocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkhUTUwpXHJcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKVxyXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FKVxyXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRlJBTUVTKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnSW5GcmFtZXNldChwLCB0b2tlbikge1xyXG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuRlJBTUVTRVQgJiYgIXAub3BlbkVsZW1lbnRzLmlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCgpKSB7XHJcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQgJiYgcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgIT09ICQuRlJBTUVTRVQpXHJcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0ZSQU1FU0VUX01PREU7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vMTIuMi41LjQuMjEgVGhlIFwiYWZ0ZXIgZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcclxuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkhUTUwpXHJcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xyXG5cclxuICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRlJBTUVTKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xyXG4gICAgaWYgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTClcclxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFO1xyXG59XHJcblxyXG4vLzEyLjIuNS40LjIyIFRoZSBcImFmdGVyIGFmdGVyIGJvZHlcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XHJcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MKVxyXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRva2VuQWZ0ZXJBZnRlckJvZHkocCwgdG9rZW4pIHtcclxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX0JPRFlfTU9ERTtcclxuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XHJcbn1cclxuXHJcbi8vMTIuMi41LjQuMjMgVGhlIFwiYWZ0ZXIgYWZ0ZXIgZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xyXG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XHJcblxyXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXHJcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xyXG59XHJcblxyXG5cclxuLy8xMi4yLjUuNSBUaGUgcnVsZXMgZm9yIHBhcnNpbmcgdG9rZW5zIGluIGZvcmVpZ24gY29udGVudFxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBudWxsQ2hhcmFjdGVySW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xyXG4gICAgdG9rZW4uY2hhcnMgPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XHJcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcclxuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdGFydFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcclxuICAgIGlmIChGb3JlaWduQ29udGVudC5jYXVzZXNFeGl0KHRva2VuKSAmJiAhcC5mcmFnbWVudENvbnRleHQpIHtcclxuICAgICAgICB3aGlsZSAocC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkocC5vcGVuRWxlbWVudHMuY3VycmVudCkgIT09IE5TLkhUTUwgJiZcclxuICAgICAgICAgICAgICAgKCFwLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSAmJlxyXG4gICAgICAgICAgICAgICAoIXAuX2lzSHRtbEludGVncmF0aW9uUG9pbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCkpKSB7XHJcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgY3VycmVudCA9IHAuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKSxcclxuICAgICAgICAgICAgY3VycmVudE5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY3VycmVudCk7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50TnMgPT09IE5TLk1BVEhNTClcclxuICAgICAgICAgICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyh0b2tlbik7XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnROcyA9PT0gTlMuU1ZHKSB7XHJcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHVGFnTmFtZSh0b2tlbik7XHJcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHQXR0cnModG9rZW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5YTUxBdHRycyh0b2tlbik7XHJcblxyXG4gICAgICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZylcclxuICAgICAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgY3VycmVudE5zKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGN1cnJlbnROcyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVuZFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcclxuICAgIGZvciAodmFyIGkgPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbaV07XHJcblxyXG4gICAgICAgIGlmIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gTlMuSFRNTCkge1xyXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkudG9Mb3dlckNhc2UoKSA9PT0gdG9rZW4udGFnTmFtZSkge1xyXG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gcmVzb2x2ZXMgLiBhbmQgLi4gZWxlbWVudHMgaW4gYSBwYXRoIGFycmF5IHdpdGggZGlyZWN0b3J5IG5hbWVzIHRoZXJlXG4vLyBtdXN0IGJlIG5vIHNsYXNoZXMsIGVtcHR5IGVsZW1lbnRzLCBvciBkZXZpY2UgbmFtZXMgKGM6XFwpIGluIHRoZSBhcnJheVxuLy8gKHNvIGFsc28gbm8gbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcyAtIGl0IGRvZXMgbm90IGRpc3Rpbmd1aXNoXG4vLyByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgcGF0aHMpXG5mdW5jdGlvbiBub3JtYWxpemVBcnJheShwYXJ0cywgYWxsb3dBYm92ZVJvb3QpIHtcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGxhc3QgPSBwYXJ0c1tpXTtcbiAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvblxuLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy5cbnZhciBzcGxpdFBhdGhSZSA9XG4gICAgL14oXFwvP3wpKFtcXHNcXFNdKj8pKCg/OlxcLnsxLDJ9fFteXFwvXSs/fCkoXFwuW14uXFwvXSp8KSkoPzpbXFwvXSopJC87XG52YXIgc3BsaXRQYXRoID0gZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgcmV0dXJuIHNwbGl0UGF0aFJlLmV4ZWMoZmlsZW5hbWUpLnNsaWNlKDEpO1xufTtcblxuLy8gcGF0aC5yZXNvbHZlKFtmcm9tIC4uLl0sIHRvKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5yZXNvbHZlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNvbHZlZFBhdGggPSAnJyxcbiAgICAgIHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcblxuICBmb3IgKHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1dGU7IGktLSkge1xuICAgIHZhciBwYXRoID0gKGkgPj0gMCkgPyBhcmd1bWVudHNbaV0gOiBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgLy8gU2tpcCBlbXB0eSBhbmQgaW52YWxpZCBlbnRyaWVzXG4gICAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgICB9IGVsc2UgaWYgKCFwYXRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXNvbHZlZFBhdGggPSBwYXRoICsgJy8nICsgcmVzb2x2ZWRQYXRoO1xuICAgIHJlc29sdmVkQWJzb2x1dGUgPSBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xuICB9XG5cbiAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcGF0aCBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gYSBmdWxsIGFic29sdXRlIHBhdGgsIGJ1dFxuICAvLyBoYW5kbGUgcmVsYXRpdmUgcGF0aHMgdG8gYmUgc2FmZSAobWlnaHQgaGFwcGVuIHdoZW4gcHJvY2Vzcy5jd2QoKSBmYWlscylcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHJlc29sdmVkUGF0aC5zcGxpdCgnLycpLCBmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuICEhcDtcbiAgfSksICFyZXNvbHZlZEFic29sdXRlKS5qb2luKCcvJyk7XG5cbiAgcmV0dXJuICgocmVzb2x2ZWRBYnNvbHV0ZSA/ICcvJyA6ICcnKSArIHJlc29sdmVkUGF0aCkgfHwgJy4nO1xufTtcblxuLy8gcGF0aC5ub3JtYWxpemUocGF0aClcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMubm9ybWFsaXplID0gZnVuY3Rpb24ocGF0aCkge1xuICB2YXIgaXNBYnNvbHV0ZSA9IGV4cG9ydHMuaXNBYnNvbHV0ZShwYXRoKSxcbiAgICAgIHRyYWlsaW5nU2xhc2ggPSBzdWJzdHIocGF0aCwgLTEpID09PSAnLyc7XG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHBhdGggPSBub3JtYWxpemVBcnJheShmaWx0ZXIocGF0aC5zcGxpdCgnLycpLCBmdW5jdGlvbihwKSB7XG4gICAgcmV0dXJuICEhcDtcbiAgfSksICFpc0Fic29sdXRlKS5qb2luKCcvJyk7XG5cbiAgaWYgKCFwYXRoICYmICFpc0Fic29sdXRlKSB7XG4gICAgcGF0aCA9ICcuJztcbiAgfVxuICBpZiAocGF0aCAmJiB0cmFpbGluZ1NsYXNoKSB7XG4gICAgcGF0aCArPSAnLyc7XG4gIH1cblxuICByZXR1cm4gKGlzQWJzb2x1dGUgPyAnLycgOiAnJykgKyBwYXRoO1xufTtcblxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24ocGF0aCkge1xuICByZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuam9pbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcGF0aHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICByZXR1cm4gZXhwb3J0cy5ub3JtYWxpemUoZmlsdGVyKHBhdGhzLCBmdW5jdGlvbihwLCBpbmRleCkge1xuICAgIGlmICh0eXBlb2YgcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9KS5qb2luKCcvJykpO1xufTtcblxuXG4vLyBwYXRoLnJlbGF0aXZlKGZyb20sIHRvKVxuLy8gcG9zaXggdmVyc2lvblxuZXhwb3J0cy5yZWxhdGl2ZSA9IGZ1bmN0aW9uKGZyb20sIHRvKSB7XG4gIGZyb20gPSBleHBvcnRzLnJlc29sdmUoZnJvbSkuc3Vic3RyKDEpO1xuICB0byA9IGV4cG9ydHMucmVzb2x2ZSh0bykuc3Vic3RyKDEpO1xuXG4gIGZ1bmN0aW9uIHRyaW0oYXJyKSB7XG4gICAgdmFyIHN0YXJ0ID0gMDtcbiAgICBmb3IgKDsgc3RhcnQgPCBhcnIubGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgICBpZiAoYXJyW3N0YXJ0XSAhPT0gJycpIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBlbmQgPSBhcnIubGVuZ3RoIC0gMTtcbiAgICBmb3IgKDsgZW5kID49IDA7IGVuZC0tKSB7XG4gICAgICBpZiAoYXJyW2VuZF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYXJyLnNsaWNlKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpO1xuICB9XG5cbiAgdmFyIGZyb21QYXJ0cyA9IHRyaW0oZnJvbS5zcGxpdCgnLycpKTtcbiAgdmFyIHRvUGFydHMgPSB0cmltKHRvLnNwbGl0KCcvJykpO1xuXG4gIHZhciBsZW5ndGggPSBNYXRoLm1pbihmcm9tUGFydHMubGVuZ3RoLCB0b1BhcnRzLmxlbmd0aCk7XG4gIHZhciBzYW1lUGFydHNMZW5ndGggPSBsZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZnJvbVBhcnRzW2ldICE9PSB0b1BhcnRzW2ldKSB7XG4gICAgICBzYW1lUGFydHNMZW5ndGggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIG91dHB1dFBhcnRzID0gW107XG4gIGZvciAodmFyIGkgPSBzYW1lUGFydHNMZW5ndGg7IGkgPCBmcm9tUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRwdXRQYXJ0cy5wdXNoKCcuLicpO1xuICB9XG5cbiAgb3V0cHV0UGFydHMgPSBvdXRwdXRQYXJ0cy5jb25jYXQodG9QYXJ0cy5zbGljZShzYW1lUGFydHNMZW5ndGgpKTtcblxuICByZXR1cm4gb3V0cHV0UGFydHMuam9pbignLycpO1xufTtcblxuZXhwb3J0cy5zZXAgPSAnLyc7XG5leHBvcnRzLmRlbGltaXRlciA9ICc6JztcblxuZXhwb3J0cy5kaXJuYW1lID0gZnVuY3Rpb24ocGF0aCkge1xuICB2YXIgcmVzdWx0ID0gc3BsaXRQYXRoKHBhdGgpLFxuICAgICAgcm9vdCA9IHJlc3VsdFswXSxcbiAgICAgIGRpciA9IHJlc3VsdFsxXTtcblxuICBpZiAoIXJvb3QgJiYgIWRpcikge1xuICAgIC8vIE5vIGRpcm5hbWUgd2hhdHNvZXZlclxuICAgIHJldHVybiAnLic7XG4gIH1cblxuICBpZiAoZGlyKSB7XG4gICAgLy8gSXQgaGFzIGEgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2hcbiAgICBkaXIgPSBkaXIuc3Vic3RyKDAsIGRpci5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHJldHVybiByb290ICsgZGlyO1xufTtcblxuXG5leHBvcnRzLmJhc2VuYW1lID0gZnVuY3Rpb24ocGF0aCwgZXh0KSB7XG4gIHZhciBmID0gc3BsaXRQYXRoKHBhdGgpWzJdO1xuICAvLyBUT0RPOiBtYWtlIHRoaXMgY29tcGFyaXNvbiBjYXNlLWluc2Vuc2l0aXZlIG9uIHdpbmRvd3M/XG4gIGlmIChleHQgJiYgZi5zdWJzdHIoLTEgKiBleHQubGVuZ3RoKSA9PT0gZXh0KSB7XG4gICAgZiA9IGYuc3Vic3RyKDAsIGYubGVuZ3RoIC0gZXh0Lmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIGY7XG59O1xuXG5cbmV4cG9ydHMuZXh0bmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHNwbGl0UGF0aChwYXRoKVszXTtcbn07XG5cbmZ1bmN0aW9uIGZpbHRlciAoeHMsIGYpIHtcbiAgICBpZiAoeHMuZmlsdGVyKSByZXR1cm4geHMuZmlsdGVyKGYpO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChmKHhzW2ldLCBpLCB4cykpIHJlcy5wdXNoKHhzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuLy8gU3RyaW5nLnByb3RvdHlwZS5zdWJzdHIgLSBuZWdhdGl2ZSBpbmRleCBkb24ndCB3b3JrIGluIElFOFxudmFyIHN1YnN0ciA9ICdhYicuc3Vic3RyKC0xKSA9PT0gJ2InXG4gICAgPyBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7IHJldHVybiBzdHIuc3Vic3RyKHN0YXJ0LCBsZW4pIH1cbiAgICA6IGZ1bmN0aW9uIChzdHIsIHN0YXJ0LCBsZW4pIHtcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSBzdHIubGVuZ3RoICsgc3RhcnQ7XG4gICAgICAgIHJldHVybiBzdHIuc3Vic3RyKHN0YXJ0LCBsZW4pO1xuICAgIH1cbjtcbiIsIlxuZXhwb3J0cy5wYmtkZjIgPSByZXF1aXJlKCcuL2xpYi9hc3luYycpXG5cbmV4cG9ydHMucGJrZGYyU3luYyA9IHJlcXVpcmUoJy4vbGliL3N5bmMnKVxuIiwidmFyIGNoZWNrUGFyYW1ldGVycyA9IHJlcXVpcmUoJy4vcHJlY29uZGl0aW9uJylcbnZhciBkZWZhdWx0RW5jb2RpbmcgPSByZXF1aXJlKCcuL2RlZmF1bHQtZW5jb2RpbmcnKVxudmFyIHN5bmMgPSByZXF1aXJlKCcuL3N5bmMnKVxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbnZhciBaRVJPX0JVRlxudmFyIHN1YnRsZSA9IGdsb2JhbC5jcnlwdG8gJiYgZ2xvYmFsLmNyeXB0by5zdWJ0bGVcbnZhciB0b0Jyb3dzZXIgPSB7XG4gICdzaGEnOiAnU0hBLTEnLFxuICAnc2hhLTEnOiAnU0hBLTEnLFxuICAnc2hhMSc6ICdTSEEtMScsXG4gICdzaGEyNTYnOiAnU0hBLTI1NicsXG4gICdzaGEtMjU2JzogJ1NIQS0yNTYnLFxuICAnc2hhMzg0JzogJ1NIQS0zODQnLFxuICAnc2hhLTM4NCc6ICdTSEEtMzg0JyxcbiAgJ3NoYS01MTInOiAnU0hBLTUxMicsXG4gICdzaGE1MTInOiAnU0hBLTUxMidcbn1cbnZhciBjaGVja3MgPSBbXVxuZnVuY3Rpb24gY2hlY2tOYXRpdmUgKGFsZ28pIHtcbiAgaWYgKGdsb2JhbC5wcm9jZXNzICYmICFnbG9iYWwucHJvY2Vzcy5icm93c2VyKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcbiAgfVxuICBpZiAoIXN1YnRsZSB8fCAhc3VidGxlLmltcG9ydEtleSB8fCAhc3VidGxlLmRlcml2ZUJpdHMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKVxuICB9XG4gIGlmIChjaGVja3NbYWxnb10gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjaGVja3NbYWxnb11cbiAgfVxuICBaRVJPX0JVRiA9IFpFUk9fQlVGIHx8IEJ1ZmZlci5hbGxvYyg4KVxuICB2YXIgcHJvbSA9IGJyb3dzZXJQYmtkZjIoWkVST19CVUYsIFpFUk9fQlVGLCAxMCwgMTI4LCBhbGdvKVxuICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSlcbiAgY2hlY2tzW2FsZ29dID0gcHJvbVxuICByZXR1cm4gcHJvbVxufVxuZnVuY3Rpb24gYnJvd3NlclBia2RmMiAocGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGxlbmd0aCwgYWxnbykge1xuICByZXR1cm4gc3VidGxlLmltcG9ydEtleShcbiAgICAncmF3JywgcGFzc3dvcmQsIHtuYW1lOiAnUEJLREYyJ30sIGZhbHNlLCBbJ2Rlcml2ZUJpdHMnXVxuICApLnRoZW4oZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBzdWJ0bGUuZGVyaXZlQml0cyh7XG4gICAgICBuYW1lOiAnUEJLREYyJyxcbiAgICAgIHNhbHQ6IHNhbHQsXG4gICAgICBpdGVyYXRpb25zOiBpdGVyYXRpb25zLFxuICAgICAgaGFzaDoge1xuICAgICAgICBuYW1lOiBhbGdvXG4gICAgICB9XG4gICAgfSwga2V5LCBsZW5ndGggPDwgMylcbiAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlcylcbiAgfSlcbn1cbmZ1bmN0aW9uIHJlc29sdmVQcm9taXNlIChwcm9taXNlLCBjYWxsYmFjaykge1xuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKG91dCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sobnVsbCwgb3V0KVxuICAgIH0pXG4gIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayhlKVxuICAgIH0pXG4gIH0pXG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywga2V5bGVuLCBkaWdlc3QsIGNhbGxiYWNrKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHBhc3N3b3JkKSkgcGFzc3dvcmQgPSBCdWZmZXIuZnJvbShwYXNzd29yZCwgZGVmYXVsdEVuY29kaW5nKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzYWx0KSkgc2FsdCA9IEJ1ZmZlci5mcm9tKHNhbHQsIGRlZmF1bHRFbmNvZGluZylcblxuICBjaGVja1BhcmFtZXRlcnMoaXRlcmF0aW9ucywga2V5bGVuKVxuICBpZiAodHlwZW9mIGRpZ2VzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gZGlnZXN0XG4gICAgZGlnZXN0ID0gdW5kZWZpbmVkXG4gIH1cbiAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjInKVxuXG4gIGRpZ2VzdCA9IGRpZ2VzdCB8fCAnc2hhMSdcbiAgdmFyIGFsZ28gPSB0b0Jyb3dzZXJbZGlnZXN0LnRvTG93ZXJDYXNlKCldXG4gIGlmICghYWxnbyB8fCB0eXBlb2YgZ2xvYmFsLlByb21pc2UgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgb3V0XG4gICAgICB0cnkge1xuICAgICAgICBvdXQgPSBzeW5jKHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBrZXlsZW4sIGRpZ2VzdClcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpXG4gICAgICB9XG4gICAgICBjYWxsYmFjayhudWxsLCBvdXQpXG4gICAgfSlcbiAgfVxuICByZXNvbHZlUHJvbWlzZShjaGVja05hdGl2ZShhbGdvKS50aGVuKGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgaWYgKHJlc3ApIHtcbiAgICAgIHJldHVybiBicm93c2VyUGJrZGYyKHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBrZXlsZW4sIGFsZ28pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzeW5jKHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBrZXlsZW4sIGRpZ2VzdClcbiAgICB9XG4gIH0pLCBjYWxsYmFjaylcbn1cbiIsInZhciBkZWZhdWx0RW5jb2Rpbmdcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAocHJvY2Vzcy5icm93c2VyKSB7XG4gIGRlZmF1bHRFbmNvZGluZyA9ICd1dGYtOCdcbn0gZWxzZSB7XG4gIHZhciBwVmVyc2lvbk1ham9yID0gcGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnNwbGl0KCcuJylbMF0uc2xpY2UoMSksIDEwKVxuXG4gIGRlZmF1bHRFbmNvZGluZyA9IHBWZXJzaW9uTWFqb3IgPj0gNiA/ICd1dGYtOCcgOiAnYmluYXJ5J1xufVxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0RW5jb2RpbmdcbiIsInZhciBNQVhfQUxMT0MgPSBNYXRoLnBvdygyLCAzMCkgLSAxIC8vIGRlZmF1bHQgaW4gaW9qc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0aW9ucywga2V5bGVuKSB7XG4gIGlmICh0eXBlb2YgaXRlcmF0aW9ucyAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJdGVyYXRpb25zIG5vdCBhIG51bWJlcicpXG4gIH1cblxuICBpZiAoaXRlcmF0aW9ucyA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCYWQgaXRlcmF0aW9ucycpXG4gIH1cblxuICBpZiAodHlwZW9mIGtleWxlbiAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbGVuZ3RoIG5vdCBhIG51bWJlcicpXG4gIH1cblxuICBpZiAoa2V5bGVuIDwgMCB8fCBrZXlsZW4gPiBNQVhfQUxMT0MgfHwga2V5bGVuICE9PSBrZXlsZW4pIHsgLyogZXNsaW50IG5vLXNlbGYtY29tcGFyZTogMCAqL1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JhZCBrZXkgbGVuZ3RoJylcbiAgfVxufVxuIiwidmFyIG1kNSA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoL21kNScpXG52YXIgcm1kMTYwID0gcmVxdWlyZSgncmlwZW1kMTYwJylcbnZhciBzaGEgPSByZXF1aXJlKCdzaGEuanMnKVxuXG52YXIgY2hlY2tQYXJhbWV0ZXJzID0gcmVxdWlyZSgnLi9wcmVjb25kaXRpb24nKVxudmFyIGRlZmF1bHRFbmNvZGluZyA9IHJlcXVpcmUoJy4vZGVmYXVsdC1lbmNvZGluZycpXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBaRVJPUyA9IEJ1ZmZlci5hbGxvYygxMjgpXG52YXIgc2l6ZXMgPSB7XG4gIG1kNTogMTYsXG4gIHNoYTE6IDIwLFxuICBzaGEyMjQ6IDI4LFxuICBzaGEyNTY6IDMyLFxuICBzaGEzODQ6IDQ4LFxuICBzaGE1MTI6IDY0LFxuICBybWQxNjA6IDIwLFxuICByaXBlbWQxNjA6IDIwXG59XG5mdW5jdGlvbiBIbWFjIChhbGcsIGtleSwgc2FsdExlbikge1xuICB2YXIgaGFzaCA9IGdldERpZ2VzdChhbGcpXG4gIHZhciBibG9ja3NpemUgPSAoYWxnID09PSAnc2hhNTEyJyB8fCBhbGcgPT09ICdzaGEzODQnKSA/IDEyOCA6IDY0XG5cbiAgaWYgKGtleS5sZW5ndGggPiBibG9ja3NpemUpIHtcbiAgICBrZXkgPSBoYXNoKGtleSlcbiAgfSBlbHNlIGlmIChrZXkubGVuZ3RoIDwgYmxvY2tzaXplKSB7XG4gICAga2V5ID0gQnVmZmVyLmNvbmNhdChba2V5LCBaRVJPU10sIGJsb2Nrc2l6ZSlcbiAgfVxuXG4gIHZhciBpcGFkID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJsb2Nrc2l6ZSArIHNpemVzW2FsZ10pXG4gIHZhciBvcGFkID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJsb2Nrc2l6ZSArIHNpemVzW2FsZ10pXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYmxvY2tzaXplOyBpKyspIHtcbiAgICBpcGFkW2ldID0ga2V5W2ldIF4gMHgzNlxuICAgIG9wYWRbaV0gPSBrZXlbaV0gXiAweDVDXG4gIH1cblxuICB2YXIgaXBhZDEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoYmxvY2tzaXplICsgc2FsdExlbiArIDQpXG4gIGlwYWQuY29weShpcGFkMSwgMCwgMCwgYmxvY2tzaXplKVxuICB0aGlzLmlwYWQxID0gaXBhZDFcbiAgdGhpcy5pcGFkMiA9IGlwYWRcbiAgdGhpcy5vcGFkID0gb3BhZFxuICB0aGlzLmFsZyA9IGFsZ1xuICB0aGlzLmJsb2Nrc2l6ZSA9IGJsb2Nrc2l6ZVxuICB0aGlzLmhhc2ggPSBoYXNoXG4gIHRoaXMuc2l6ZSA9IHNpemVzW2FsZ11cbn1cblxuSG1hYy5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKGRhdGEsIGlwYWQpIHtcbiAgZGF0YS5jb3B5KGlwYWQsIHRoaXMuYmxvY2tzaXplKVxuICB2YXIgaCA9IHRoaXMuaGFzaChpcGFkKVxuICBoLmNvcHkodGhpcy5vcGFkLCB0aGlzLmJsb2Nrc2l6ZSlcbiAgcmV0dXJuIHRoaXMuaGFzaCh0aGlzLm9wYWQpXG59XG5cbmZ1bmN0aW9uIGdldERpZ2VzdCAoYWxnKSB7XG4gIGlmIChhbGcgPT09ICdybWQxNjAnIHx8IGFsZyA9PT0gJ3JpcGVtZDE2MCcpIHJldHVybiBybWQxNjBcbiAgaWYgKGFsZyA9PT0gJ21kNScpIHJldHVybiBtZDVcbiAgcmV0dXJuIHNoYUZ1bmNcblxuICBmdW5jdGlvbiBzaGFGdW5jIChkYXRhKSB7XG4gICAgcmV0dXJuIHNoYShhbGcpLnVwZGF0ZShkYXRhKS5kaWdlc3QoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBrZXlsZW4sIGRpZ2VzdCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihwYXNzd29yZCkpIHBhc3N3b3JkID0gQnVmZmVyLmZyb20ocGFzc3dvcmQsIGRlZmF1bHRFbmNvZGluZylcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2FsdCkpIHNhbHQgPSBCdWZmZXIuZnJvbShzYWx0LCBkZWZhdWx0RW5jb2RpbmcpXG5cbiAgY2hlY2tQYXJhbWV0ZXJzKGl0ZXJhdGlvbnMsIGtleWxlbilcblxuICBkaWdlc3QgPSBkaWdlc3QgfHwgJ3NoYTEnXG5cbiAgdmFyIGhtYWMgPSBuZXcgSG1hYyhkaWdlc3QsIHBhc3N3b3JkLCBzYWx0Lmxlbmd0aClcblxuICB2YXIgREsgPSBCdWZmZXIuYWxsb2NVbnNhZmUoa2V5bGVuKVxuICB2YXIgYmxvY2sxID0gQnVmZmVyLmFsbG9jVW5zYWZlKHNhbHQubGVuZ3RoICsgNClcbiAgc2FsdC5jb3B5KGJsb2NrMSwgMCwgMCwgc2FsdC5sZW5ndGgpXG5cbiAgdmFyIFUsIGosIGRlc3RQb3MsIGxlblxuXG4gIHZhciBoTGVuID0gaG1hYy5zaXplXG4gIHZhciBUID0gQnVmZmVyLmFsbG9jVW5zYWZlKGhMZW4pXG4gIHZhciBsID0gTWF0aC5jZWlsKGtleWxlbiAvIGhMZW4pXG4gIHZhciByID0ga2V5bGVuIC0gKGwgLSAxKSAqIGhMZW5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8PSBsOyBpKyspIHtcbiAgICBibG9jazEud3JpdGVVSW50MzJCRShpLCBzYWx0Lmxlbmd0aClcbiAgICBVID0gaG1hYy5ydW4oYmxvY2sxLCBobWFjLmlwYWQxKVxuXG4gICAgVS5jb3B5KFQsIDAsIDAsIGhMZW4pXG5cbiAgICBmb3IgKGogPSAxOyBqIDwgaXRlcmF0aW9uczsgaisrKSB7XG4gICAgICBVID0gaG1hYy5ydW4oVSwgaG1hYy5pcGFkMilcbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgaExlbjsgaysrKSBUW2tdIF49IFVba11cbiAgICB9XG5cbiAgICBkZXN0UG9zID0gKGkgLSAxKSAqIGhMZW5cbiAgICBsZW4gPSAoaSA9PT0gbCA/IHIgOiBoTGVuKVxuICAgIFQuY29weShESywgZGVzdFBvcywgMCwgbGVuKVxuICB9XG5cbiAgcmV0dXJuIERLXG59XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuNy4xXG4oZnVuY3Rpb24oKSB7XG4gIHZhciBnZXROYW5vU2Vjb25kcywgaHJ0aW1lLCBsb2FkVGltZTtcblxuICBpZiAoKHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwZXJmb3JtYW5jZSAhPT0gbnVsbCkgJiYgcGVyZm9ybWFuY2Uubm93KSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKCh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzICE9PSBudWxsKSAmJiBwcm9jZXNzLmhydGltZSkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gKGdldE5hbm9TZWNvbmRzKCkgLSBsb2FkVGltZSkgLyAxZTY7XG4gICAgfTtcbiAgICBocnRpbWUgPSBwcm9jZXNzLmhydGltZTtcbiAgICBnZXROYW5vU2Vjb25kcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGhyO1xuICAgICAgaHIgPSBocnRpbWUoKTtcbiAgICAgIHJldHVybiBoclswXSAqIDFlOSArIGhyWzFdO1xuICAgIH07XG4gICAgbG9hZFRpbWUgPSBnZXROYW5vU2Vjb25kcygpO1xuICB9IGVsc2UgaWYgKERhdGUubm93KSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBEYXRlLm5vdygpIC0gbG9hZFRpbWU7XG4gICAgfTtcbiAgICBsb2FkVGltZSA9IERhdGUubm93KCk7XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGxvYWRUaW1lO1xuICAgIH07XG4gICAgbG9hZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfVxuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gQWxsb3cgdGhlIHVzZXIgdG8gY3VzdG9taXplIHRoZSBQcm9taXNlIHR5cGUgcmV0dXJuZWQgYnkgdGhpcyBsaWJyYXJ5LlxudmFyIG15cHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPclNldFByb21pc2UocCkge1xuICAgIGlmIChwKSB7IG15cHJvbWlzZSA9IHA7IH1cbiAgICByZXR1cm4gbXlwcm9taXNlO1xufTtcbiIsIi8vIGZyZWV6ZSBBcnJheSNzbGljZSwganVzdCBpbiBjYXNlIG9mIGZ1bm55IGJ1c2luZXNzIGxhdGVyLlxudmFyIF9zbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBnZXRQcm9taXNlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS5qcycpO1xuLy8gZGVmZXJyZWQgZ2V0cyBpdHMgb3duIHNjb3BlIHRvIHByZXZlbnQgaW5hZHZlcnRlbnQgY2FwdHVyZSBpbiB0aGUgY2xvc3VyZVxudmFyIGRlZmVycmVkID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHZhciBQcm9taXNlID0gZ2V0UHJvbWlzZSgpO1xuICAgIHZhciByZXNvbHZlLCByZWplY3QsIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihfcmVzb2x2ZSwgX3JlamVjdCkge1xuICAgICAgICByZXNvbHZlID0gX3Jlc29sdmU7IHJlamVjdCA9IF9yZWplY3Q7XG4gICAgfSk7XG4gICAgdmFyIHBhdHRlcm4gPSAob3B0aW9ucyAmJiBvcHRpb25zLnBhdHRlcm4pO1xuICAgIHZhciBub0Vycm9yID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5ub0Vycm9yKTtcbiAgICB2YXIgY2IgPSBwYXR0ZXJuID8gZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgIW5vRXJyb3IpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9XG4gICAgICAgIHZhciByZXN1bHQgPSB7fSwgaSwgb2Zmc2V0ID0gbm9FcnJvciA/IDAgOiAxO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0dGVybi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0W3BhdHRlcm5baV1dID0gYXJndW1lbnRzW2krb2Zmc2V0XTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgfSA6IG5vRXJyb3IgPyByZXNvbHZlIDogZnVuY3Rpb24oZXJyLCB2YWwpIHtcbiAgICAgICAgaWYgKGVycikgeyByZWplY3QoZXJyKTsgfSBlbHNlIHsgcmVzb2x2ZSh2YWwpOyB9XG4gICAgfTtcbiAgICByZXR1cm4geyBwcm9taXNlOiBwLCBjYWxsYmFjazogY2IgfTtcbn07XG52YXIgcHJvbWlzaWZ5ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0LCBmdW5jLCBtYW5kYXRvcnlBcmdzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2IgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodHlwZW9mKGNiKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvb2gsIHByb21pc2VzLlxuICAgICAgICB2YXIgZCA9IGRlZmVycmVkKG9wdGlvbnMpO1xuICAgICAgICB2YXIgYSA9IF9zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gICAgICAgIHdoaWxlIChhLmxlbmd0aCA8IG1hbmRhdG9yeUFyZ3MpIHsgYS5wdXNoKHVuZGVmaW5lZCk7IH1cbiAgICAgICAgYS5wdXNoKGQuY2FsbGJhY2spO1xuICAgICAgICB2YXIgcmV0dmFsID0gZnVuYy5hcHBseShjb250ZXh0LCBhKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXR1cm5zT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBpdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgYSBiZXR0ZXIgY29udmVudGlvbiBoZXJlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0dmFsLCAncHJvbWlzZScsIHsgdmFsdWU6IGQucHJvbWlzZSB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXR2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGQucHJvbWlzZTtcbiAgICB9O1xufTtcbiIsInZhciBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbnZhciBwcm9taXNpZnkgPSByZXF1aXJlKFwiLi9fcHJvbWlzaWZ5LmpzXCIpO1xudmFyIGJpbmQgPSBmdW5jdGlvbihjLCBmKSB7IHJldHVybiBmICYmIGYuYmluZChjKTsgfTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG1vZHVsZS5leHBvcnRzLCB7XG4gIEZfT0s6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGZzLkZfT0sgfSxcbiAgRmlsZVJlYWRTdHJlYW06IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGZzLkZpbGVSZWFkU3RyZWFtIH0sXG4gIEZpbGVXcml0ZVN0cmVhbTogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogZnMuRmlsZVdyaXRlU3RyZWFtIH0sXG4gIFJfT0s6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGZzLlJfT0sgfSxcbiAgUmVhZFN0cmVhbTogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogZnMuUmVhZFN0cmVhbSB9LFxuICBTdGF0czogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogZnMuU3RhdHMgfSxcbiAgV19PSzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogZnMuV19PSyB9LFxuICBXcml0ZVN0cmVhbTogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogZnMuV3JpdGVTdHJlYW0gfSxcbiAgWF9PSzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogZnMuWF9PSyB9LFxuICAvL190b1VuaXhUaW1lc3RhbXA6IC8vIHNraXBwaW5nXG4gIGFjY2VzczogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5hY2Nlc3MsIDEpIH0sXG4gIGFjY2Vzc1N5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmFjY2Vzc1N5bmMpIH0sXG4gIGFwcGVuZEZpbGU6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMuYXBwZW5kRmlsZSwgMikgfSxcbiAgYXBwZW5kRmlsZVN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmFwcGVuZEZpbGVTeW5jKSB9LFxuICBjaG1vZDogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5jaG1vZCwgMikgfSxcbiAgY2htb2RTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5jaG1vZFN5bmMpIH0sXG4gIGNob3duOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLmNob3duLCAzKSB9LFxuICBjaG93blN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmNob3duU3luYykgfSxcbiAgY2xvc2U6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMuY2xvc2UsIDEpIH0sXG4gIGNsb3NlU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMuY2xvc2VTeW5jKSB9LFxuICBjcmVhdGVSZWFkU3RyZWFtOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5jcmVhdGVSZWFkU3RyZWFtKSB9LFxuICBjcmVhdGVXcml0ZVN0cmVhbTogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMuY3JlYXRlV3JpdGVTdHJlYW0pIH0sXG4gIGV4aXN0czogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5leGlzdHMsIDEsIHtcIm5vRXJyb3JcIjp0cnVlfSkgfSxcbiAgZXhpc3RzU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMuZXhpc3RzU3luYykgfSxcbiAgZmNobW9kOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLmZjaG1vZCwgMikgfSxcbiAgZmNobW9kU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMuZmNobW9kU3luYykgfSxcbiAgZmNob3duOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLmZjaG93biwgMykgfSxcbiAgZmNob3duU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMuZmNob3duU3luYykgfSxcbiAgZmRhdGFzeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLmZkYXRhc3luYywgMSkgfSxcbiAgZmRhdGFzeW5jU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMuZmRhdGFzeW5jU3luYykgfSxcbiAgZnN0YXQ6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMuZnN0YXQsIDEpIH0sXG4gIGZzdGF0U3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMuZnN0YXRTeW5jKSB9LFxuICBmc3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5mc3luYywgMSkgfSxcbiAgZnN5bmNTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5mc3luY1N5bmMpIH0sXG4gIGZ0cnVuY2F0ZTogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5mdHJ1bmNhdGUsIDIpIH0sXG4gIGZ0cnVuY2F0ZVN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmZ0cnVuY2F0ZVN5bmMpIH0sXG4gIGZ1dGltZXM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMuZnV0aW1lcywgMykgfSxcbiAgZnV0aW1lc1N5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLmZ1dGltZXNTeW5jKSB9LFxuICBsaW5rOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLmxpbmssIDIpIH0sXG4gIGxpbmtTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5saW5rU3luYykgfSxcbiAgbHN0YXQ6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMubHN0YXQsIDEpIH0sXG4gIGxzdGF0U3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMubHN0YXRTeW5jKSB9LFxuICBta2RpcjogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5ta2RpciwgMSkgfSxcbiAgbWtkaXJTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5ta2RpclN5bmMpIH0sXG4gIG9wZW46IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMub3BlbiwgMikgfSxcbiAgb3BlblN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLm9wZW5TeW5jKSB9LFxuICByZWFkOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLnJlYWQsIDUsIHtcInBhdHRlcm5cIjpbXCJyZWFkXCIsXCJidWZmZXJcIl19KSB9LFxuICByZWFkRmlsZTogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5yZWFkRmlsZSwgMSkgfSxcbiAgcmVhZEZpbGVTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5yZWFkRmlsZVN5bmMpIH0sXG4gIHJlYWRTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5yZWFkU3luYykgfSxcbiAgcmVhZGRpcjogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5yZWFkZGlyLCAxKSB9LFxuICByZWFkZGlyU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMucmVhZGRpclN5bmMpIH0sXG4gIHJlYWRsaW5rOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLnJlYWRsaW5rLCAxKSB9LFxuICByZWFkbGlua1N5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLnJlYWRsaW5rU3luYykgfSxcbiAgcmVhbHBhdGg6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMucmVhbHBhdGgsIDEpIH0sXG4gIHJlYWxwYXRoU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMucmVhbHBhdGhTeW5jKSB9LFxuICByZW5hbWU6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMucmVuYW1lLCAyKSB9LFxuICByZW5hbWVTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5yZW5hbWVTeW5jKSB9LFxuICBybWRpcjogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy5ybWRpciwgMSkgfSxcbiAgcm1kaXJTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5ybWRpclN5bmMpIH0sXG4gIHN0YXQ6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMuc3RhdCwgMSkgfSxcbiAgc3RhdFN5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLnN0YXRTeW5jKSB9LFxuICBzeW1saW5rOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLnN5bWxpbmssIDIpIH0sXG4gIHN5bWxpbmtTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy5zeW1saW5rU3luYykgfSxcbiAgdHJ1bmNhdGU6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMudHJ1bmNhdGUsIDIpIH0sXG4gIHRydW5jYXRlU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMudHJ1bmNhdGVTeW5jKSB9LFxuICB1bmxpbms6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHByb21pc2lmeShmcywgZnMudW5saW5rLCAxKSB9LFxuICB1bmxpbmtTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy51bmxpbmtTeW5jKSB9LFxuICB1bndhdGNoRmlsZTogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMudW53YXRjaEZpbGUpIH0sXG4gIHV0aW1lczogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJvbWlzaWZ5KGZzLCBmcy51dGltZXMsIDMpIH0sXG4gIHV0aW1lc1N5bmM6IHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IGJpbmQoZnMsIGZzLnV0aW1lc1N5bmMpIH0sXG4gIHdhdGNoOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy53YXRjaCkgfSxcbiAgd2F0Y2hGaWxlOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy53YXRjaEZpbGUpIH0sXG4gIHdyaXRlOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLndyaXRlLCA1LCB7XCJwYXR0ZXJuXCI6W1wid3JpdHRlblwiLFwiYnVmZmVyXCJdfSkgfSxcbiAgd3JpdGVGaWxlOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBwcm9taXNpZnkoZnMsIGZzLndyaXRlRmlsZSwgMikgfSxcbiAgd3JpdGVGaWxlU3luYzogeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogYmluZChmcywgZnMud3JpdGVGaWxlU3luYykgfSxcbiAgd3JpdGVTeW5jOiB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiBiaW5kKGZzLCBmcy53cml0ZVN5bmMpIH0sXG59KTsiLCIndXNlIHN0cmljdCc7XG5cbmlmICghcHJvY2Vzcy52ZXJzaW9uIHx8XG4gICAgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YwLicpID09PSAwIHx8XG4gICAgcHJvY2Vzcy52ZXJzaW9uLmluZGV4T2YoJ3YxLicpID09PSAwICYmIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MS44LicpICE9PSAwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gbmV4dFRpY2s7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByb2Nlc3MubmV4dFRpY2s7XG59XG5cbmZ1bmN0aW9uIG5leHRUaWNrKGZuLCBhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImNhbGxiYWNrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBhcmdzLCBpO1xuICBzd2l0Y2ggKGxlbikge1xuICBjYXNlIDA6XG4gIGNhc2UgMTpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbik7XG4gIGNhc2UgMjpcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiBhZnRlclRpY2tPbmUoKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIGFyZzEpO1xuICAgIH0pO1xuICBjYXNlIDM6XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrVHdvKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxLCBhcmcyKTtcbiAgICB9KTtcbiAgY2FzZSA0OlxuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uIGFmdGVyVGlja1RocmVlKCkge1xuICAgICAgZm4uY2FsbChudWxsLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB9KTtcbiAgZGVmYXVsdDpcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpO1xuICAgIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYXJncy5sZW5ndGgpIHtcbiAgICAgIGFyZ3NbaSsrXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gYWZ0ZXJUaWNrKCkge1xuICAgICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJleHBvcnRzLnB1YmxpY0VuY3J5cHQgPSByZXF1aXJlKCcuL3B1YmxpY0VuY3J5cHQnKTtcbmV4cG9ydHMucHJpdmF0ZURlY3J5cHQgPSByZXF1aXJlKCcuL3ByaXZhdGVEZWNyeXB0Jyk7XG5cbmV4cG9ydHMucHJpdmF0ZUVuY3J5cHQgPSBmdW5jdGlvbiBwcml2YXRlRW5jcnlwdChrZXksIGJ1Zikge1xuICByZXR1cm4gZXhwb3J0cy5wdWJsaWNFbmNyeXB0KGtleSwgYnVmLCB0cnVlKTtcbn07XG5cbmV4cG9ydHMucHVibGljRGVjcnlwdCA9IGZ1bmN0aW9uIHB1YmxpY0RlY3J5cHQoa2V5LCBidWYpIHtcbiAgcmV0dXJuIGV4cG9ydHMucHJpdmF0ZURlY3J5cHQoa2V5LCBidWYsIHRydWUpO1xufTsiLCJ2YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWVkLCBsZW4pIHtcbiAgdmFyIHQgPSBuZXcgQnVmZmVyKCcnKTtcbiAgdmFyICBpID0gMCwgYztcbiAgd2hpbGUgKHQubGVuZ3RoIDwgbGVuKSB7XG4gICAgYyA9IGkyb3BzKGkrKyk7XG4gICAgdCA9IEJ1ZmZlci5jb25jYXQoW3QsIGNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoc2VlZCkudXBkYXRlKGMpLmRpZ2VzdCgpXSk7XG4gIH1cbiAgcmV0dXJuIHQuc2xpY2UoMCwgbGVuKTtcbn07XG5cbmZ1bmN0aW9uIGkyb3BzKGMpIHtcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIoNCk7XG4gIG91dC53cml0ZVVJbnQzMkJFKGMsMCk7XG4gIHJldHVybiBvdXQ7XG59IiwidmFyIHBhcnNlS2V5cyA9IHJlcXVpcmUoJ3BhcnNlLWFzbjEnKTtcbnZhciBtZ2YgPSByZXF1aXJlKCcuL21nZicpO1xudmFyIHhvciA9IHJlcXVpcmUoJy4veG9yJyk7XG52YXIgYm4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIGNydCA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktcnNhJyk7XG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG52YXIgd2l0aFB1YmxpYyA9IHJlcXVpcmUoJy4vd2l0aFB1YmxpYycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwcml2YXRlRGVjcnlwdChwcml2YXRlX2tleSwgZW5jLCByZXZlcnNlKSB7XG4gIHZhciBwYWRkaW5nO1xuICBpZiAocHJpdmF0ZV9rZXkucGFkZGluZykge1xuICAgIHBhZGRpbmcgPSBwcml2YXRlX2tleS5wYWRkaW5nO1xuICB9IGVsc2UgaWYgKHJldmVyc2UpIHtcbiAgICBwYWRkaW5nID0gMTtcbiAgfSBlbHNlIHtcbiAgICBwYWRkaW5nID0gNDtcbiAgfVxuICBcbiAgdmFyIGtleSA9IHBhcnNlS2V5cyhwcml2YXRlX2tleSk7XG4gIHZhciBrID0ga2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICBpZiAoZW5jLmxlbmd0aCA+IGsgfHwgbmV3IGJuKGVuYykuY21wKGtleS5tb2R1bHVzKSA+PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkZWNyeXB0aW9uIGVycm9yJyk7XG4gIH1cbiAgdmFyIG1zZztcbiAgaWYgKHJldmVyc2UpIHtcbiAgICBtc2cgPSB3aXRoUHVibGljKG5ldyBibihlbmMpLCBrZXkpO1xuICB9IGVsc2Uge1xuICAgIG1zZyA9IGNydChlbmMsIGtleSk7XG4gIH1cbiAgdmFyIHpCdWZmZXIgPSBuZXcgQnVmZmVyKGsgLSBtc2cubGVuZ3RoKTtcbiAgekJ1ZmZlci5maWxsKDApO1xuICBtc2cgPSBCdWZmZXIuY29uY2F0KFt6QnVmZmVyLCBtc2ddLCBrKTtcbiAgaWYgKHBhZGRpbmcgPT09IDQpIHtcbiAgICByZXR1cm4gb2FlcChrZXksIG1zZyk7XG4gIH0gZWxzZSBpZiAocGFkZGluZyA9PT0gMSkge1xuICAgIHJldHVybiBwa2NzMShrZXksIG1zZywgcmV2ZXJzZSk7XG4gIH0gZWxzZSBpZiAocGFkZGluZyA9PT0gMykge1xuICAgIHJldHVybiBtc2c7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHBhZGRpbmcnKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gb2FlcChrZXksIG1zZyl7XG4gIHZhciBuID0ga2V5Lm1vZHVsdXM7XG4gIHZhciBrID0ga2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICB2YXIgbUxlbiA9IG1zZy5sZW5ndGg7XG4gIHZhciBpSGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUobmV3IEJ1ZmZlcignJykpLmRpZ2VzdCgpO1xuICB2YXIgaExlbiA9IGlIYXNoLmxlbmd0aDtcbiAgdmFyIGhMZW4yID0gMiAqIGhMZW47XG4gIGlmIChtc2dbMF0gIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZXJyb3InKTtcbiAgfVxuICB2YXIgbWFza2VkU2VlZCA9IG1zZy5zbGljZSgxLCBoTGVuICsgMSk7XG4gIHZhciBtYXNrZWREYiA9ICBtc2cuc2xpY2UoaExlbiArIDEpO1xuICB2YXIgc2VlZCA9IHhvcihtYXNrZWRTZWVkLCBtZ2YobWFza2VkRGIsIGhMZW4pKTtcbiAgdmFyIGRiID0geG9yKG1hc2tlZERiLCBtZ2Yoc2VlZCwgayAtIGhMZW4gLSAxKSk7XG4gIGlmIChjb21wYXJlKGlIYXNoLCBkYi5zbGljZSgwLCBoTGVuKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZXJyb3InKTtcbiAgfVxuICB2YXIgaSA9IGhMZW47XG4gIHdoaWxlIChkYltpXSA9PT0gMCkge1xuICAgIGkrKztcbiAgfVxuICBpZiAoZGJbaSsrXSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVjcnlwdGlvbiBlcnJvcicpO1xuICB9XG4gIHJldHVybiBkYi5zbGljZShpKTtcbn1cblxuZnVuY3Rpb24gcGtjczEoa2V5LCBtc2csIHJldmVyc2Upe1xuICB2YXIgcDEgPSBtc2cuc2xpY2UoMCwgMik7XG4gIHZhciBpID0gMjtcbiAgdmFyIHN0YXR1cyA9IDA7XG4gIHdoaWxlIChtc2dbaSsrXSAhPT0gMCkge1xuICAgIGlmIChpID49IG1zZy5sZW5ndGgpIHtcbiAgICAgIHN0YXR1cysrO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHZhciBwcyA9IG1zZy5zbGljZSgyLCBpIC0gMSk7XG4gIHZhciBwMiA9IG1zZy5zbGljZShpIC0gMSwgaSk7XG5cbiAgaWYgKChwMS50b1N0cmluZygnaGV4JykgIT09ICcwMDAyJyAmJiAhcmV2ZXJzZSkgfHwgKHAxLnRvU3RyaW5nKCdoZXgnKSAhPT0gJzAwMDEnICYmIHJldmVyc2UpKXtcbiAgICBzdGF0dXMrKztcbiAgfVxuICBpZiAocHMubGVuZ3RoIDwgOCkge1xuICAgIHN0YXR1cysrO1xuICB9XG4gIGlmIChzdGF0dXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY3J5cHRpb24gZXJyb3InKTtcbiAgfVxuICByZXR1cm4gIG1zZy5zbGljZShpKTtcbn1cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYil7XG4gIGEgPSBuZXcgQnVmZmVyKGEpO1xuICBiID0gbmV3IEJ1ZmZlcihiKTtcbiAgdmFyIGRpZiA9IDA7XG4gIHZhciBsZW4gPSBhLmxlbmd0aDtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIGRpZisrO1xuICAgIGxlbiA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gIH1cbiAgdmFyIGkgPSAtMTtcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIGRpZiArPSAoYVtpXSBeIGJbaV0pO1xuICB9XG4gIHJldHVybiBkaWY7XG59IiwidmFyIHBhcnNlS2V5cyA9IHJlcXVpcmUoJ3BhcnNlLWFzbjEnKTtcbnZhciByYW5kb21CeXRlcyA9IHJlcXVpcmUoJ3JhbmRvbWJ5dGVzJyk7XG52YXIgY3JlYXRlSGFzaCA9IHJlcXVpcmUoJ2NyZWF0ZS1oYXNoJyk7XG52YXIgbWdmID0gcmVxdWlyZSgnLi9tZ2YnKTtcbnZhciB4b3IgPSByZXF1aXJlKCcuL3hvcicpO1xudmFyIGJuID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciB3aXRoUHVibGljID0gcmVxdWlyZSgnLi93aXRoUHVibGljJyk7XG52YXIgY3J0ID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1yc2EnKTtcblxudmFyIGNvbnN0YW50cyA9IHtcbiAgUlNBX1BLQ1MxX09BRVBfUEFERElORzogNCxcbiAgUlNBX1BLQ1MxX1BBRERJTjogMSxcbiAgUlNBX05PX1BBRERJTkc6IDNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcHVibGljRW5jcnlwdChwdWJsaWNfa2V5LCBtc2csIHJldmVyc2UpIHtcbiAgdmFyIHBhZGRpbmc7XG4gIGlmIChwdWJsaWNfa2V5LnBhZGRpbmcpIHtcbiAgICBwYWRkaW5nID0gcHVibGljX2tleS5wYWRkaW5nO1xuICB9IGVsc2UgaWYgKHJldmVyc2UpIHtcbiAgICBwYWRkaW5nID0gMTtcbiAgfSBlbHNlIHtcbiAgICBwYWRkaW5nID0gNDtcbiAgfVxuICB2YXIga2V5ID0gcGFyc2VLZXlzKHB1YmxpY19rZXkpO1xuICB2YXIgcGFkZGVkTXNnO1xuICBpZiAocGFkZGluZyA9PT0gNCkge1xuICAgIHBhZGRlZE1zZyA9IG9hZXAoa2V5LCBtc2cpO1xuICB9IGVsc2UgaWYgKHBhZGRpbmcgPT09IDEpIHtcbiAgICBwYWRkZWRNc2cgPSBwa2NzMShrZXksIG1zZywgcmV2ZXJzZSk7XG4gIH0gZWxzZSBpZiAocGFkZGluZyA9PT0gMykge1xuICAgIHBhZGRlZE1zZyA9IG5ldyBibihtc2cpO1xuICAgIGlmIChwYWRkZWRNc2cuY21wKGtleS5tb2R1bHVzKSA+PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHBhZGRpbmcnKTtcbiAgfVxuICBpZiAocmV2ZXJzZSkge1xuICAgIHJldHVybiBjcnQocGFkZGVkTXNnLCBrZXkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB3aXRoUHVibGljKHBhZGRlZE1zZywga2V5KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gb2FlcChrZXksIG1zZyl7XG4gIHZhciBrID0ga2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuICB2YXIgbUxlbiA9IG1zZy5sZW5ndGg7XG4gIHZhciBpSGFzaCA9IGNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUobmV3IEJ1ZmZlcignJykpLmRpZ2VzdCgpO1xuICB2YXIgaExlbiA9IGlIYXNoLmxlbmd0aDtcbiAgdmFyIGhMZW4yID0gMiAqIGhMZW47XG4gIGlmIChtTGVuID4gayAtIGhMZW4yIC0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignbWVzc2FnZSB0b28gbG9uZycpO1xuICB9XG4gIHZhciBwcyA9IG5ldyBCdWZmZXIoayAtIG1MZW4gLSBoTGVuMiAtIDIpO1xuICBwcy5maWxsKDApO1xuICB2YXIgZGJsZW4gPSBrIC0gaExlbiAtIDE7XG4gIHZhciBzZWVkID0gcmFuZG9tQnl0ZXMoaExlbik7XG4gIHZhciBtYXNrZWREYiA9IHhvcihCdWZmZXIuY29uY2F0KFtpSGFzaCwgcHMsIG5ldyBCdWZmZXIoWzFdKSwgbXNnXSwgZGJsZW4pLCBtZ2Yoc2VlZCwgZGJsZW4pKTtcbiAgdmFyIG1hc2tlZFNlZWQgPSB4b3Ioc2VlZCwgbWdmKG1hc2tlZERiLCBoTGVuKSk7XG4gIHJldHVybiBuZXcgYm4oQnVmZmVyLmNvbmNhdChbbmV3IEJ1ZmZlcihbMF0pLCBtYXNrZWRTZWVkLCBtYXNrZWREYl0sIGspKTtcbn1cbmZ1bmN0aW9uIHBrY3MxKGtleSwgbXNnLCByZXZlcnNlKXtcbiAgdmFyIG1MZW4gPSBtc2cubGVuZ3RoO1xuICB2YXIgayA9IGtleS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgaWYgKG1MZW4gPiBrIC0gMTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21lc3NhZ2UgdG9vIGxvbmcnKTtcbiAgfVxuICB2YXIgcHM7XG4gIGlmIChyZXZlcnNlKSB7XG4gICAgcHMgPSBuZXcgQnVmZmVyKGsgLSBtTGVuIC0gMyk7XG4gICAgcHMuZmlsbCgweGZmKTtcbiAgfSBlbHNlIHtcbiAgICBwcyA9IG5vblplcm8oayAtIG1MZW4gLSAzKTtcbiAgfVxuICByZXR1cm4gbmV3IGJuKEJ1ZmZlci5jb25jYXQoW25ldyBCdWZmZXIoWzAsIHJldmVyc2U/MToyXSksIHBzLCBuZXcgQnVmZmVyKFswXSksIG1zZ10sIGspKTtcbn1cbmZ1bmN0aW9uIG5vblplcm8obGVuLCBjcnlwdG8pIHtcbiAgdmFyIG91dCA9IG5ldyBCdWZmZXIobGVuKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2FjaGUgPSByYW5kb21CeXRlcyhsZW4qMik7XG4gIHZhciBjdXIgPSAwO1xuICB2YXIgbnVtO1xuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIGlmIChjdXIgPT09IGNhY2hlLmxlbmd0aCkge1xuICAgICAgY2FjaGUgPSByYW5kb21CeXRlcyhsZW4qMik7XG4gICAgICBjdXIgPSAwO1xuICAgIH1cbiAgICBudW0gPSBjYWNoZVtjdXIrK107XG4gICAgaWYgKG51bSkge1xuICAgICAgb3V0W2krK10gPSBudW07XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59IiwidmFyIGJuID0gcmVxdWlyZSgnYm4uanMnKTtcbmZ1bmN0aW9uIHdpdGhQdWJsaWMocGFkZGVkTXNnLCBrZXkpIHtcbiAgcmV0dXJuIG5ldyBCdWZmZXIocGFkZGVkTXNnXG4gICAgLnRvUmVkKGJuLm1vbnQoa2V5Lm1vZHVsdXMpKVxuICAgIC5yZWRQb3cobmV3IGJuKGtleS5wdWJsaWNFeHBvbmVudCkpXG4gICAgLmZyb21SZWQoKVxuICAgIC50b0FycmF5KCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdpdGhQdWJsaWM7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4b3IoYSwgYikge1xuICB2YXIgbGVuID0gYS5sZW5ndGg7XG4gIHZhciBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBhW2ldIF49IGJbaV07XG4gIH1cbiAgcmV0dXJuIGFcbn07IiwiLyohIGh0dHBzOi8vbXRocy5iZS9wdW55Y29kZSB2MS40LjEgYnkgQG1hdGhpYXMgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgKi9cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJlxuXHRcdCFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHQhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKFxuXHRcdGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLnNlbGYgPT09IGZyZWVHbG9iYWxcblx0KSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBwdW55Y29kZWAgb2JqZWN0LlxuXHQgKiBAbmFtZSBwdW55Y29kZVxuXHQgKiBAdHlwZSBPYmplY3Rcblx0ICovXG5cdHZhciBwdW55Y29kZSxcblxuXHQvKiogSGlnaGVzdCBwb3NpdGl2ZSBzaWduZWQgMzItYml0IGZsb2F0IHZhbHVlICovXG5cdG1heEludCA9IDIxNDc0ODM2NDcsIC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcblxuXHQvKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXG5cdGJhc2UgPSAzNixcblx0dE1pbiA9IDEsXG5cdHRNYXggPSAyNixcblx0c2tldyA9IDM4LFxuXHRkYW1wID0gNzAwLFxuXHRpbml0aWFsQmlhcyA9IDcyLFxuXHRpbml0aWFsTiA9IDEyOCwgLy8gMHg4MFxuXHRkZWxpbWl0ZXIgPSAnLScsIC8vICdcXHgyRCdcblxuXHQvKiogUmVndWxhciBleHByZXNzaW9ucyAqL1xuXHRyZWdleFB1bnljb2RlID0gL154bi0tLyxcblx0cmVnZXhOb25BU0NJSSA9IC9bXlxceDIwLVxceDdFXS8sIC8vIHVucHJpbnRhYmxlIEFTQ0lJIGNoYXJzICsgbm9uLUFTQ0lJIGNoYXJzXG5cdHJlZ2V4U2VwYXJhdG9ycyA9IC9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2csIC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuXHQvKiogRXJyb3IgbWVzc2FnZXMgKi9cblx0ZXJyb3JzID0ge1xuXHRcdCdvdmVyZmxvdyc6ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcycsXG5cdFx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0XHQnaW52YWxpZC1pbnB1dCc6ICdJbnZhbGlkIGlucHV0J1xuXHR9LFxuXG5cdC8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cblx0YmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluLFxuXHRmbG9vciA9IE1hdGguZmxvb3IsXG5cdHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUsXG5cblx0LyoqIFRlbXBvcmFyeSB2YXJpYWJsZSAqL1xuXHRrZXk7XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXJyb3IgdHlwZS5cblx0ICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuXHQgKi9cblx0ZnVuY3Rpb24gZXJyb3IodHlwZSkge1xuXHRcdHRocm93IG5ldyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSk7XG5cdH1cblxuXHQvKipcblx0ICogQSBnZW5lcmljIGBBcnJheSNtYXBgIHV0aWxpdHkgZnVuY3Rpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeSBhcnJheVxuXHQgKiBpdGVtLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IGFycmF5IG9mIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXAoYXJyYXksIGZuKSB7XG5cdFx0dmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblx0XHR2YXIgcmVzdWx0ID0gW107XG5cdFx0d2hpbGUgKGxlbmd0aC0tKSB7XG5cdFx0XHRyZXN1bHRbbGVuZ3RoXSA9IGZuKGFycmF5W2xlbmd0aF0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgc2ltcGxlIGBBcnJheSNtYXBgLWxpa2Ugd3JhcHBlciB0byB3b3JrIHdpdGggZG9tYWluIG5hbWUgc3RyaW5ncyBvciBlbWFpbFxuXHQgKiBhZGRyZXNzZXMuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MuXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeVxuXHQgKiBjaGFyYWN0ZXIuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgc3RyaW5nIG9mIGNoYXJhY3RlcnMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrXG5cdCAqIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwRG9tYWluKHN0cmluZywgZm4pIHtcblx0XHR2YXIgcGFydHMgPSBzdHJpbmcuc3BsaXQoJ0AnKTtcblx0XHR2YXIgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdC8vIEluIGVtYWlsIGFkZHJlc3Nlcywgb25seSB0aGUgZG9tYWluIG5hbWUgc2hvdWxkIGJlIHB1bnljb2RlZC4gTGVhdmVcblx0XHRcdC8vIHRoZSBsb2NhbCBwYXJ0IChpLmUuIGV2ZXJ5dGhpbmcgdXAgdG8gYEBgKSBpbnRhY3QuXG5cdFx0XHRyZXN1bHQgPSBwYXJ0c1swXSArICdAJztcblx0XHRcdHN0cmluZyA9IHBhcnRzWzFdO1xuXHRcdH1cblx0XHQvLyBBdm9pZCBgc3BsaXQocmVnZXgpYCBmb3IgSUU4IGNvbXBhdGliaWxpdHkuIFNlZSAjMTcuXG5cdFx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhTZXBhcmF0b3JzLCAnXFx4MkUnKTtcblx0XHR2YXIgbGFiZWxzID0gc3RyaW5nLnNwbGl0KCcuJyk7XG5cdFx0dmFyIGVuY29kZWQgPSBtYXAobGFiZWxzLCBmbikuam9pbignLicpO1xuXHRcdHJldHVybiByZXN1bHQgKyBlbmNvZGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtZXJpYyBjb2RlIHBvaW50cyBvZiBlYWNoIFVuaWNvZGVcblx0ICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuXHQgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHBhaXIgb2Ygc3Vycm9nYXRlIGhhbHZlcyAoZWFjaCBvZiB3aGljaFxuXHQgKiBVQ1MtMiBleHBvc2VzIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMpIGludG8gYSBzaW5nbGUgY29kZSBwb2ludCxcblx0ICogbWF0Y2hpbmcgVVRGLTE2LlxuXHQgKiBAc2VlIGBwdW55Y29kZS51Y3MyLmVuY29kZWBcblx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGRlY29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gc3RyaW5nIFRoZSBVbmljb2RlIGlucHV0IHN0cmluZyAoVUNTLTIpLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZGVjb2RlKHN0cmluZykge1xuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgY291bnRlciA9IDAsXG5cdFx0ICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG5cdFx0ICAgIHZhbHVlLFxuXHRcdCAgICBleHRyYTtcblx0XHR3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0dmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdFx0aWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0XHQvLyBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXJcblx0XHRcdFx0ZXh0cmEgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdFx0XHRpZiAoKGV4dHJhICYgMHhGQzAwKSA9PSAweERDMDApIHsgLy8gbG93IHN1cnJvZ2F0ZVxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKCgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlIG5leHRcblx0XHRcdFx0XHQvLyBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXJcblx0XHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdFx0Y291bnRlci0tO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHN0cmluZyBiYXNlZCBvbiBhbiBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAc2VlIGBwdW55Y29kZS51Y3MyLmRlY29kZWBcblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZW5jb2RlXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGNvZGVQb2ludHMgVGhlIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBuZXcgVW5pY29kZSBzdHJpbmcgKFVDUy0yKS5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJlbmNvZGUoYXJyYXkpIHtcblx0XHRyZXR1cm4gbWFwKGFycmF5LCBmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdFx0aWYgKHZhbHVlID4gMHhGRkZGKSB7XG5cdFx0XHRcdHZhbHVlIC09IDB4MTAwMDA7XG5cdFx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApO1xuXHRcdFx0XHR2YWx1ZSA9IDB4REMwMCB8IHZhbHVlICYgMHgzRkY7XG5cdFx0XHR9XG5cdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlKTtcblx0XHRcdHJldHVybiBvdXRwdXQ7XG5cdFx0fSkuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBiYXNpYyBjb2RlIHBvaW50IGludG8gYSBkaWdpdC9pbnRlZ2VyLlxuXHQgKiBAc2VlIGBkaWdpdFRvQmFzaWMoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGNvZGVQb2ludCBUaGUgYmFzaWMgbnVtZXJpYyBjb2RlIHBvaW50IHZhbHVlLlxuXHQgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQgKGZvciB1c2UgaW5cblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpbiB0aGUgcmFuZ2UgYDBgIHRvIGBiYXNlIC0gMWAsIG9yIGBiYXNlYCBpZlxuXHQgKiB0aGUgY29kZSBwb2ludCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWx1ZS5cblx0ICovXG5cdGZ1bmN0aW9uIGJhc2ljVG9EaWdpdChjb2RlUG9pbnQpIHtcblx0XHRpZiAoY29kZVBvaW50IC0gNDggPCAxMCkge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDIyO1xuXHRcdH1cblx0XHRpZiAoY29kZVBvaW50IC0gNjUgPCAyNikge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDY1O1xuXHRcdH1cblx0XHRpZiAoY29kZVBvaW50IC0gOTcgPCAyNikge1xuXHRcdFx0cmV0dXJuIGNvZGVQb2ludCAtIDk3O1xuXHRcdH1cblx0XHRyZXR1cm4gYmFzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGRpZ2l0L2ludGVnZXIgaW50byBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEBzZWUgYGJhc2ljVG9EaWdpdCgpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gZGlnaXQgVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYmFzaWMgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSAod2hlbiB1c2VkIGZvclxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGlzIGBkaWdpdGAsIHdoaWNoIG5lZWRzIHRvIGJlIGluIHRoZSByYW5nZVxuXHQgKiBgMGAgdG8gYGJhc2UgLSAxYC4gSWYgYGZsYWdgIGlzIG5vbi16ZXJvLCB0aGUgdXBwZXJjYXNlIGZvcm0gaXNcblx0ICogdXNlZDsgZWxzZSwgdGhlIGxvd2VyY2FzZSBmb3JtIGlzIHVzZWQuIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWRcblx0ICogaWYgYGZsYWdgIGlzIG5vbi16ZXJvIGFuZCBgZGlnaXRgIGhhcyBubyB1cHBlcmNhc2UgZm9ybS5cblx0ICovXG5cdGZ1bmN0aW9uIGRpZ2l0VG9CYXNpYyhkaWdpdCwgZmxhZykge1xuXHRcdC8vICAwLi4yNSBtYXAgdG8gQVNDSUkgYS4ueiBvciBBLi5aXG5cdFx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG5cdFx0cmV0dXJuIGRpZ2l0ICsgMjIgKyA3NSAqIChkaWdpdCA8IDI2KSAtICgoZmxhZyAhPSAwKSA8PCA1KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBCaWFzIGFkYXB0YXRpb24gZnVuY3Rpb24gYXMgcGVyIHNlY3Rpb24gMy40IG9mIFJGQyAzNDkyLlxuXHQgKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdFx0dmFyIGsgPSAwO1xuXHRcdGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG5cdFx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRcdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0XHRkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG5cdFx0fVxuXHRcdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scyB0byBhIHN0cmluZyBvZiBVbmljb2RlXG5cdCAqIHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHRcdC8vIERvbid0IHVzZSBVQ1MtMlxuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgsXG5cdFx0ICAgIG91dCxcblx0XHQgICAgaSA9IDAsXG5cdFx0ICAgIG4gPSBpbml0aWFsTixcblx0XHQgICAgYmlhcyA9IGluaXRpYWxCaWFzLFxuXHRcdCAgICBiYXNpYyxcblx0XHQgICAgaixcblx0XHQgICAgaW5kZXgsXG5cdFx0ICAgIG9sZGksXG5cdFx0ICAgIHcsXG5cdFx0ICAgIGssXG5cdFx0ICAgIGRpZ2l0LFxuXHRcdCAgICB0LFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgYmFzZU1pbnVzVDtcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHRcdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdFx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0XHRiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdFx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdFx0YmFzaWMgPSAwO1xuXHRcdH1cblxuXHRcdGZvciAoaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBkZWNvZGluZyBsb29wOiBzdGFydCBqdXN0IGFmdGVyIHRoZSBsYXN0IGRlbGltaXRlciBpZiBhbnkgYmFzaWMgY29kZVxuXHRcdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0XHRmb3IgKGluZGV4ID0gYmFzaWMgPiAwID8gYmFzaWMgKyAxIDogMDsgaW5kZXggPCBpbnB1dExlbmd0aDsgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqLykge1xuXG5cdFx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxuXHRcdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0XHRmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cblx0XHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ2ludmFsaWQtaW5wdXQnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGkgKz0gZGlnaXQgKiB3O1xuXHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdGlmICh3ID4gZmxvb3IobWF4SW50IC8gYmFzZU1pbnVzVCkpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcblxuXHRcdFx0fVxuXG5cdFx0XHRvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdG4gKz0gZmxvb3IoaSAvIG91dCk7XG5cdFx0XHRpICU9IG91dDtcblxuXHRcdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dFxuXHRcdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVjczJlbmNvZGUob3V0cHV0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuXHQgKiBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcblx0XHR2YXIgbixcblx0XHQgICAgZGVsdGEsXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50LFxuXHRcdCAgICBiYXNpY0xlbmd0aCxcblx0XHQgICAgYmlhcyxcblx0XHQgICAgaixcblx0XHQgICAgbSxcblx0XHQgICAgcSxcblx0XHQgICAgayxcblx0XHQgICAgdCxcblx0XHQgICAgY3VycmVudFZhbHVlLFxuXHRcdCAgICBvdXRwdXQgPSBbXSxcblx0XHQgICAgLyoqIGBpbnB1dExlbmd0aGAgd2lsbCBob2xkIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gYGlucHV0YC4gKi9cblx0XHQgICAgaW5wdXRMZW5ndGgsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsXG5cdFx0ICAgIGJhc2VNaW51c1QsXG5cdFx0ICAgIHFNaW51c1Q7XG5cblx0XHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBVbmljb2RlXG5cdFx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHRcdC8vIENhY2hlIHRoZSBsZW5ndGhcblx0XHRpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlXG5cdFx0biA9IGluaXRpYWxOO1xuXHRcdGRlbHRhID0gMDtcblx0XHRiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzXG5cdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IDB4ODApIHtcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuXG5cdFx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdFx0Ly8gYGJhc2ljTGVuZ3RoYCBpcyB0aGUgbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuXG5cdFx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgLSBpZiBpdCBpcyBub3QgZW1wdHkgLSB3aXRoIGEgZGVsaW1pdGVyXG5cdFx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0XHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0XHQvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0XG5cdFx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdFx0Zm9yIChtID0gbWF4SW50LCBqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdFx0bSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvd1xuXHRcdFx0aGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuXHRcdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0XHRuID0gbTtcblxuXHRcdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJcblx0XHRcdFx0XHRmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHFNaW51c1QgPSBxIC0gdDtcblx0XHRcdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0XHRzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCwgMCkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0XHRkZWx0YSA9IDA7XG5cdFx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQrK2RlbHRhO1xuXHRcdFx0KytuO1xuXG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzc1xuXHQgKiB0byBVbmljb2RlLiBPbmx5IHRoZSBQdW55Y29kZWQgcGFydHMgb2YgdGhlIGlucHV0IHdpbGwgYmUgY29udmVydGVkLCBpLmUuXG5cdCAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxuXHQgKiBjb252ZXJ0ZWQgdG8gVW5pY29kZS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogY29udmVydCB0byBVbmljb2RlLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgVW5pY29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUHVueWNvZGVcblx0ICogc3RyaW5nLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9Vbmljb2RlKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgVW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzcyB0b1xuXHQgKiBQdW55Y29kZS4gT25seSB0aGUgbm9uLUFTQ0lJIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCxcblx0ICogaS5lLiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQncyBhbHJlYWR5IGluXG5cdCAqIEFTQ0lJLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvIGNvbnZlcnQsIGFzIGFcblx0ICogVW5pY29kZSBzdHJpbmcuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBQdW55Y29kZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gZG9tYWluIG5hbWUgb3Jcblx0ICogZW1haWwgYWRkcmVzcy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvQVNDSUkoaW5wdXQpIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdHJldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKVxuXHRcdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXG5cdFx0XHRcdDogc3RyaW5nO1xuXHRcdH0pO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqIERlZmluZSB0aGUgcHVibGljIEFQSSAqL1xuXHRwdW55Y29kZSA9IHtcblx0XHQvKipcblx0XHQgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgUHVueWNvZGUuanMgdmVyc2lvbiBudW1iZXIuXG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgU3RyaW5nXG5cdFx0ICovXG5cdFx0J3ZlcnNpb24nOiAnMS40LjEnLFxuXHRcdC8qKlxuXHRcdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG5cdFx0ICogcmVwcmVzZW50YXRpb24gKFVDUy0yKSB0byBVbmljb2RlIGNvZGUgcG9pbnRzLCBhbmQgYmFjay5cblx0XHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHQndWNzMic6IHtcblx0XHRcdCdkZWNvZGUnOiB1Y3MyZGVjb2RlLFxuXHRcdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0XHR9LFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdFx0J3RvVW5pY29kZSc6IHRvVW5pY29kZVxuXHR9O1xuXG5cdC8qKiBFeHBvc2UgYHB1bnljb2RlYCAqL1xuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZSgncHVueWNvZGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwdW55Y29kZTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiBmcmVlTW9kdWxlKSB7XG5cdFx0aWYgKG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzKSB7XG5cdFx0XHQvLyBpbiBOb2RlLmpzLCBpby5qcywgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBwdW55Y29kZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAoa2V5IGluIHB1bnljb2RlKSB7XG5cdFx0XHRcdHB1bnljb2RlLmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBwdW55Y29kZVtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QucHVueWNvZGUgPSBwdW55Y29kZTtcblx0fVxuXG59KHRoaXMpKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG52YXIgcGVyY2VudFR3ZW50aWVzID0gLyUyMC9nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAnZGVmYXVsdCc6ICdSRkMzOTg2JyxcbiAgICBmb3JtYXR0ZXJzOiB7XG4gICAgICAgIFJGQzE3Mzg6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UuY2FsbCh2YWx1ZSwgcGVyY2VudFR3ZW50aWVzLCAnKycpO1xuICAgICAgICB9LFxuICAgICAgICBSRkMzOTg2OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgUkZDMTczODogJ1JGQzE3MzgnLFxuICAgIFJGQzM5ODY6ICdSRkMzOTg2J1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG52YXIgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dQcm90b3R5cGVzOiBmYWxzZSxcbiAgICBhcnJheUxpbWl0OiAyMCxcbiAgICBkZWNvZGVyOiB1dGlscy5kZWNvZGUsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZGVwdGg6IDUsXG4gICAgcGFyYW1ldGVyTGltaXQ6IDEwMDAsXG4gICAgcGxhaW5PYmplY3RzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgcGFyc2VWYWx1ZXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nVmFsdWVzKHN0ciwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSB7fTtcbiAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQob3B0aW9ucy5kZWxpbWl0ZXIsIG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPT09IEluZmluaXR5ID8gdW5kZWZpbmVkIDogb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG4gICAgICAgIHZhciBwb3MgPSBwYXJ0LmluZGV4T2YoJ109JykgPT09IC0xID8gcGFydC5pbmRleE9mKCc9JykgOiBwYXJ0LmluZGV4T2YoJ109JykgKyAxO1xuXG4gICAgICAgIHZhciBrZXksIHZhbDtcbiAgICAgICAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0KTtcbiAgICAgICAgICAgIHZhbCA9IG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nID8gbnVsbCA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAga2V5ID0gb3B0aW9ucy5kZWNvZGVyKHBhcnQuc2xpY2UoMCwgcG9zKSk7XG4gICAgICAgICAgICB2YWwgPSBvcHRpb25zLmRlY29kZXIocGFydC5zbGljZShwb3MgKyAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSBbXS5jb25jYXQob2JqW2tleV0pLmNvbmNhdCh2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxudmFyIHBhcnNlT2JqZWN0ID0gZnVuY3Rpb24gcGFyc2VPYmplY3RSZWN1cnNpdmUoY2hhaW4sIHZhbCwgb3B0aW9ucykge1xuICAgIGlmICghY2hhaW4ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgdmFyIHJvb3QgPSBjaGFpbi5zaGlmdCgpO1xuXG4gICAgdmFyIG9iajtcbiAgICBpZiAocm9vdCA9PT0gJ1tdJykge1xuICAgICAgICBvYmogPSBbXTtcbiAgICAgICAgb2JqID0gb2JqLmNvbmNhdChwYXJzZU9iamVjdChjaGFpbiwgdmFsLCBvcHRpb25zKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb2JqID0gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgICAgIHZhciBjbGVhblJvb3QgPSByb290LmNoYXJBdCgwKSA9PT0gJ1snICYmIHJvb3QuY2hhckF0KHJvb3QubGVuZ3RoIC0gMSkgPT09ICddJyA/IHJvb3Quc2xpY2UoMSwgLTEpIDogcm9vdDtcbiAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQoY2xlYW5Sb290LCAxMCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc05hTihpbmRleCkgJiZcbiAgICAgICAgICAgIHJvb3QgIT09IGNsZWFuUm9vdCAmJlxuICAgICAgICAgICAgU3RyaW5nKGluZGV4KSA9PT0gY2xlYW5Sb290ICYmXG4gICAgICAgICAgICBpbmRleCA+PSAwICYmXG4gICAgICAgICAgICAob3B0aW9ucy5wYXJzZUFycmF5cyAmJiBpbmRleCA8PSBvcHRpb25zLmFycmF5TGltaXQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgb2JqID0gW107XG4gICAgICAgICAgICBvYmpbaW5kZXhdID0gcGFyc2VPYmplY3QoY2hhaW4sIHZhbCwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmpbY2xlYW5Sb290XSA9IHBhcnNlT2JqZWN0KGNoYWluLCB2YWwsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBwYXJzZUtleXMgPSBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nS2V5cyhnaXZlbktleSwgdmFsLCBvcHRpb25zKSB7XG4gICAgaWYgKCFnaXZlbktleSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVHJhbnNmb3JtIGRvdCBub3RhdGlvbiB0byBicmFja2V0IG5vdGF0aW9uXG4gICAgdmFyIGtleSA9IG9wdGlvbnMuYWxsb3dEb3RzID8gZ2l2ZW5LZXkucmVwbGFjZSgvXFwuKFteLltdKykvZywgJ1skMV0nKSA6IGdpdmVuS2V5O1xuXG4gICAgLy8gVGhlIHJlZ2V4IGNodW5rc1xuXG4gICAgdmFyIGJyYWNrZXRzID0gLyhcXFtbXltcXF1dKl0pLztcbiAgICB2YXIgY2hpbGQgPSAvKFxcW1teW1xcXV0qXSkvZztcblxuICAgIC8vIEdldCB0aGUgcGFyZW50XG5cbiAgICB2YXIgc2VnbWVudCA9IGJyYWNrZXRzLmV4ZWMoa2V5KTtcbiAgICB2YXIgcGFyZW50ID0gc2VnbWVudCA/IGtleS5zbGljZSgwLCBzZWdtZW50LmluZGV4KSA6IGtleTtcblxuICAgIC8vIFN0YXNoIHRoZSBwYXJlbnQgaWYgaXQgZXhpc3RzXG5cbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlbid0IHVzaW5nIHBsYWluIG9iamVjdHMsIG9wdGlvbmFsbHkgcHJlZml4IGtleXNcbiAgICAgICAgLy8gdGhhdCB3b3VsZCBvdmVyd3JpdGUgb2JqZWN0IHByb3RvdHlwZSBwcm9wZXJ0aWVzXG4gICAgICAgIGlmICghb3B0aW9ucy5wbGFpbk9iamVjdHMgJiYgaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgcGFyZW50KSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmFsbG93UHJvdG90eXBlcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGtleXMucHVzaChwYXJlbnQpO1xuICAgIH1cblxuICAgIC8vIExvb3AgdGhyb3VnaCBjaGlsZHJlbiBhcHBlbmRpbmcgdG8gdGhlIGFycmF5IHVudGlsIHdlIGhpdCBkZXB0aFxuXG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlICgoc2VnbWVudCA9IGNoaWxkLmV4ZWMoa2V5KSkgIT09IG51bGwgJiYgaSA8IG9wdGlvbnMuZGVwdGgpIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHNlZ21lbnRbMV0uc2xpY2UoMSwgLTEpKSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmFsbG93UHJvdG90eXBlcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBrZXlzLnB1c2goc2VnbWVudFsxXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBhIHJlbWFpbmRlciwganVzdCBhZGQgd2hhdGV2ZXIgaXMgbGVmdFxuXG4gICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAga2V5cy5wdXNoKCdbJyArIGtleS5zbGljZShzZWdtZW50LmluZGV4KSArICddJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlT2JqZWN0KGtleXMsIHZhbCwgb3B0aW9ucyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIsIG9wdHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IG9wdHMgfHwge307XG5cbiAgICBpZiAob3B0aW9ucy5kZWNvZGVyICE9PSBudWxsICYmIG9wdGlvbnMuZGVjb2RlciAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLmRlY29kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRGVjb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmRlbGltaXRlciA9IHR5cGVvZiBvcHRpb25zLmRlbGltaXRlciA9PT0gJ3N0cmluZycgfHwgdXRpbHMuaXNSZWdFeHAob3B0aW9ucy5kZWxpbWl0ZXIpID8gb3B0aW9ucy5kZWxpbWl0ZXIgOiBkZWZhdWx0cy5kZWxpbWl0ZXI7XG4gICAgb3B0aW9ucy5kZXB0aCA9IHR5cGVvZiBvcHRpb25zLmRlcHRoID09PSAnbnVtYmVyJyA/IG9wdGlvbnMuZGVwdGggOiBkZWZhdWx0cy5kZXB0aDtcbiAgICBvcHRpb25zLmFycmF5TGltaXQgPSB0eXBlb2Ygb3B0aW9ucy5hcnJheUxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdGlvbnMuYXJyYXlMaW1pdCA6IGRlZmF1bHRzLmFycmF5TGltaXQ7XG4gICAgb3B0aW9ucy5wYXJzZUFycmF5cyA9IG9wdGlvbnMucGFyc2VBcnJheXMgIT09IGZhbHNlO1xuICAgIG9wdGlvbnMuZGVjb2RlciA9IHR5cGVvZiBvcHRpb25zLmRlY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmRlY29kZXIgOiBkZWZhdWx0cy5kZWNvZGVyO1xuICAgIG9wdGlvbnMuYWxsb3dEb3RzID0gdHlwZW9mIG9wdGlvbnMuYWxsb3dEb3RzID09PSAnYm9vbGVhbicgPyBvcHRpb25zLmFsbG93RG90cyA6IGRlZmF1bHRzLmFsbG93RG90cztcbiAgICBvcHRpb25zLnBsYWluT2JqZWN0cyA9IHR5cGVvZiBvcHRpb25zLnBsYWluT2JqZWN0cyA9PT0gJ2Jvb2xlYW4nID8gb3B0aW9ucy5wbGFpbk9iamVjdHMgOiBkZWZhdWx0cy5wbGFpbk9iamVjdHM7XG4gICAgb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMgPSB0eXBlb2Ygb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzIDogZGVmYXVsdHMuYWxsb3dQcm90b3R5cGVzO1xuICAgIG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPSB0eXBlb2Ygb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRpb25zLnBhcmFtZXRlckxpbWl0IDogZGVmYXVsdHMucGFyYW1ldGVyTGltaXQ7XG4gICAgb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPSB0eXBlb2Ygb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nO1xuXG4gICAgaWYgKHN0ciA9PT0gJycgfHwgc3RyID09PSBudWxsIHx8IHR5cGVvZiBzdHIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICB9XG5cbiAgICB2YXIgdGVtcE9iaiA9IHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gcGFyc2VWYWx1ZXMoc3RyLCBvcHRpb25zKSA6IHN0cjtcbiAgICB2YXIgb2JqID0gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGtleXMgYW5kIHNldHVwIHRoZSBuZXcgb2JqZWN0XG5cbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRlbXBPYmopO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgdmFyIG5ld09iaiA9IHBhcnNlS2V5cyhrZXksIHRlbXBPYmpba2V5XSwgb3B0aW9ucyk7XG4gICAgICAgIG9iaiA9IHV0aWxzLm1lcmdlKG9iaiwgbmV3T2JqLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXRpbHMuY29tcGFjdChvYmopO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcblxudmFyIGFycmF5UHJlZml4R2VuZXJhdG9ycyA9IHtcbiAgICBicmFja2V0czogZnVuY3Rpb24gYnJhY2tldHMocHJlZml4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG4gICAgICAgIHJldHVybiBwcmVmaXggKyAnW10nO1xuICAgIH0sXG4gICAgaW5kaWNlczogZnVuY3Rpb24gaW5kaWNlcyhwcmVmaXgsIGtleSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1snICsga2V5ICsgJ10nO1xuICAgIH0sXG4gICAgcmVwZWF0OiBmdW5jdGlvbiByZXBlYXQocHJlZml4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG4gICAgICAgIHJldHVybiBwcmVmaXg7XG4gICAgfVxufTtcblxudmFyIHRvSVNPID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBlbmNvZGU6IHRydWUsXG4gICAgZW5jb2RlcjogdXRpbHMuZW5jb2RlLFxuICAgIGVuY29kZVZhbHVlc09ubHk6IGZhbHNlLFxuICAgIHNlcmlhbGl6ZURhdGU6IGZ1bmN0aW9uIHNlcmlhbGl6ZURhdGUoZGF0ZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuICAgICAgICByZXR1cm4gdG9JU08uY2FsbChkYXRlKTtcbiAgICB9LFxuICAgIHNraXBOdWxsczogZmFsc2UsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nOiBmYWxzZVxufTtcblxudmFyIHN0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeSggLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcbiAgICBvYmplY3QsXG4gICAgcHJlZml4LFxuICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgIHNraXBOdWxscyxcbiAgICBlbmNvZGVyLFxuICAgIGZpbHRlcixcbiAgICBzb3J0LFxuICAgIGFsbG93RG90cyxcbiAgICBzZXJpYWxpemVEYXRlLFxuICAgIGZvcm1hdHRlcixcbiAgICBlbmNvZGVWYWx1ZXNPbmx5XG4pIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9iaiA9IGZpbHRlcihwcmVmaXgsIG9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIG9iaiA9IHNlcmlhbGl6ZURhdGUob2JqKTtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICBpZiAoc3RyaWN0TnVsbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlciAmJiAhZW5jb2RlVmFsdWVzT25seSA/IGVuY29kZXIocHJlZml4KSA6IHByZWZpeDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9iaiA9ICcnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb2JqID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicgfHwgdXRpbHMuaXNCdWZmZXIob2JqKSkge1xuICAgICAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeCA6IGVuY29kZXIocHJlZml4KTtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybWF0dGVyKGtleVZhbHVlKSArICc9JyArIGZvcm1hdHRlcihlbmNvZGVyKG9iaikpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2Zvcm1hdHRlcihwcmVmaXgpICsgJz0nICsgZm9ybWF0dGVyKFN0cmluZyhvYmopKV07XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgdmFyIG9iaktleXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgb2JqS2V5cyA9IHNvcnQgPyBrZXlzLnNvcnQoc29ydCkgOiBrZXlzO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAoc2tpcE51bGxzICYmIG9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQoc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgocHJlZml4LCBrZXkpLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgICAgICAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgICAgIHNraXBOdWxscyxcbiAgICAgICAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgICAgIGFsbG93RG90cyxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVEYXRlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5XG4gICAgICAgICAgICApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5jb25jYXQoc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAgICAgIHByZWZpeCArIChhbGxvd0RvdHMgPyAnLicgKyBrZXkgOiAnWycgKyBrZXkgKyAnXScpLFxuICAgICAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgICAgICAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgICAgIHNraXBOdWxscyxcbiAgICAgICAgICAgICAgICBlbmNvZGVyLFxuICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgICAgIGFsbG93RG90cyxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVEYXRlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5XG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG9wdHMpIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuICAgIHZhciBvcHRpb25zID0gb3B0cyB8fCB7fTtcblxuICAgIGlmIChvcHRpb25zLmVuY29kZXIgIT09IG51bGwgJiYgb3B0aW9ucy5lbmNvZGVyICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuZW5jb2RlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbmNvZGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIHZhciBkZWxpbWl0ZXIgPSB0eXBlb2Ygb3B0aW9ucy5kZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuZGVsaW1pdGVyIDogb3B0aW9ucy5kZWxpbWl0ZXI7XG4gICAgdmFyIHN0cmljdE51bGxIYW5kbGluZyA9IHR5cGVvZiBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmc7XG4gICAgdmFyIHNraXBOdWxscyA9IHR5cGVvZiBvcHRpb25zLnNraXBOdWxscyA9PT0gJ2Jvb2xlYW4nID8gb3B0aW9ucy5za2lwTnVsbHMgOiBkZWZhdWx0cy5za2lwTnVsbHM7XG4gICAgdmFyIGVuY29kZSA9IHR5cGVvZiBvcHRpb25zLmVuY29kZSA9PT0gJ2Jvb2xlYW4nID8gb3B0aW9ucy5lbmNvZGUgOiBkZWZhdWx0cy5lbmNvZGU7XG4gICAgdmFyIGVuY29kZXIgPSB0eXBlb2Ygb3B0aW9ucy5lbmNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5lbmNvZGVyIDogZGVmYXVsdHMuZW5jb2RlcjtcbiAgICB2YXIgc29ydCA9IHR5cGVvZiBvcHRpb25zLnNvcnQgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLnNvcnQgOiBudWxsO1xuICAgIHZhciBhbGxvd0RvdHMgPSB0eXBlb2Ygb3B0aW9ucy5hbGxvd0RvdHMgPT09ICd1bmRlZmluZWQnID8gZmFsc2UgOiBvcHRpb25zLmFsbG93RG90cztcbiAgICB2YXIgc2VyaWFsaXplRGF0ZSA9IHR5cGVvZiBvcHRpb25zLnNlcmlhbGl6ZURhdGUgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLnNlcmlhbGl6ZURhdGUgOiBkZWZhdWx0cy5zZXJpYWxpemVEYXRlO1xuICAgIHZhciBlbmNvZGVWYWx1ZXNPbmx5ID0gdHlwZW9mIG9wdGlvbnMuZW5jb2RlVmFsdWVzT25seSA9PT0gJ2Jvb2xlYW4nID8gb3B0aW9ucy5lbmNvZGVWYWx1ZXNPbmx5IDogZGVmYXVsdHMuZW5jb2RlVmFsdWVzT25seTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZm9ybWF0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBvcHRpb25zLmZvcm1hdCA9IGZvcm1hdHMuZGVmYXVsdDtcbiAgICB9IGVsc2UgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybWF0cy5mb3JtYXR0ZXJzLCBvcHRpb25zLmZvcm1hdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBmb3JtYXQgb3B0aW9uIHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0cy5mb3JtYXR0ZXJzW29wdGlvbnMuZm9ybWF0XTtcbiAgICB2YXIgb2JqS2V5cztcbiAgICB2YXIgZmlsdGVyO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcjtcbiAgICAgICAgb2JqID0gZmlsdGVyKCcnLCBvYmopO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmZpbHRlcikpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaktleXMgPSBmaWx0ZXI7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHZhciBhcnJheUZvcm1hdDtcbiAgICBpZiAob3B0aW9ucy5hcnJheUZvcm1hdCBpbiBhcnJheVByZWZpeEdlbmVyYXRvcnMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRpb25zLmFycmF5Rm9ybWF0O1xuICAgIH0gZWxzZSBpZiAoJ2luZGljZXMnIGluIG9wdGlvbnMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRpb25zLmluZGljZXMgPyAnaW5kaWNlcycgOiAncmVwZWF0JztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheUZvcm1hdCA9ICdpbmRpY2VzJztcbiAgICB9XG5cbiAgICB2YXIgZ2VuZXJhdGVBcnJheVByZWZpeCA9IGFycmF5UHJlZml4R2VuZXJhdG9yc1thcnJheUZvcm1hdF07XG5cbiAgICBpZiAoIW9iaktleXMpIHtcbiAgICAgICAgb2JqS2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgfVxuXG4gICAgaWYgKHNvcnQpIHtcbiAgICAgICAgb2JqS2V5cy5zb3J0KHNvcnQpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAoc2tpcE51bGxzICYmIG9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChzdHJpbmdpZnkoXG4gICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICBlbmNvZGUgPyBlbmNvZGVyIDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICBzZXJpYWxpemVEYXRlLFxuICAgICAgICAgICAgZm9ybWF0dGVyLFxuICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seVxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5cy5qb2luKGRlbGltaXRlcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGhleFRhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgICAgIGFycmF5LnB1c2goJyUnICsgKChpIDwgMTYgPyAnMCcgOiAnJykgKyBpLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufSgpKTtcblxuZXhwb3J0cy5hcnJheVRvT2JqZWN0ID0gZnVuY3Rpb24gKHNvdXJjZSwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSBvcHRpb25zICYmIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgb2JqW2ldID0gc291cmNlW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydHMubWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICB0YXJnZXQucHVzaChzb3VyY2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5wbGFpbk9iamVjdHMgfHwgb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMgfHwgIWhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbc291cmNlXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3RhcmdldCwgc291cmNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBbdGFyZ2V0XS5jb25jYXQoc291cmNlKTtcbiAgICB9XG5cbiAgICB2YXIgbWVyZ2VUYXJnZXQgPSB0YXJnZXQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiAhQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIG1lcmdlVGFyZ2V0ID0gZXhwb3J0cy5hcnJheVRvT2JqZWN0KHRhcmdldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgc291cmNlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgICAgICAgIGlmIChoYXMuY2FsbCh0YXJnZXQsIGkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFtpXSAmJiB0eXBlb2YgdGFyZ2V0W2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBleHBvcnRzLm1lcmdlKHRhcmdldFtpXSwgaXRlbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWNjLCBrZXkpKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IGV4cG9ydHMubWVyZ2UoYWNjW2tleV0sIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBtZXJnZVRhcmdldCk7XG59O1xuXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0ci5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbn07XG5cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAgIC8vIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEJyaWFuIFdoaXRlIChtc2NkZXgpIGZvciB0aGUgaW8uanMgY29yZSBxdWVyeXN0cmluZyBsaWJyYXJ5LlxuICAgIC8vIEl0IGhhcyBiZWVuIGFkYXB0ZWQgaGVyZSBmb3Igc3RyaWN0ZXIgYWRoZXJlbmNlIHRvIFJGQyAzOTg2XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBzdHIgOiBTdHJpbmcoc3RyKTtcblxuICAgIHZhciBvdXQgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgYyA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGMgPT09IDB4MkQgfHwgLy8gLVxuICAgICAgICAgICAgYyA9PT0gMHgyRSB8fCAvLyAuXG4gICAgICAgICAgICBjID09PSAweDVGIHx8IC8vIF9cbiAgICAgICAgICAgIGMgPT09IDB4N0UgfHwgLy8gflxuICAgICAgICAgICAgKGMgPj0gMHgzMCAmJiBjIDw9IDB4MzkpIHx8IC8vIDAtOVxuICAgICAgICAgICAgKGMgPj0gMHg0MSAmJiBjIDw9IDB4NUEpIHx8IC8vIGEtelxuICAgICAgICAgICAgKGMgPj0gMHg2MSAmJiBjIDw9IDB4N0EpIC8vIEEtWlxuICAgICAgICApIHtcbiAgICAgICAgICAgIG91dCArPSBzdHJpbmcuY2hhckF0KGkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIGhleFRhYmxlW2NdO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyAoaGV4VGFibGVbMHhDMCB8IChjID4+IDYpXSArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPj0gMHhFMDAwKSB7XG4gICAgICAgICAgICBvdXQgPSBvdXQgKyAoaGV4VGFibGVbMHhFMCB8IChjID4+IDEyKV0gKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaSArPSAxO1xuICAgICAgICBjID0gMHgxMDAwMCArICgoKGMgJiAweDNGRikgPDwgMTApIHwgKHN0cmluZy5jaGFyQ29kZUF0KGkpICYgMHgzRkYpKTtcbiAgICAgICAgb3V0ICs9IGhleFRhYmxlWzB4RjAgfCAoYyA+PiAxOCldICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiAxMikgJiAweDNGKV0gKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG1heC1sZW5cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuZXhwb3J0cy5jb21wYWN0ID0gZnVuY3Rpb24gKG9iaiwgcmVmZXJlbmNlcykge1xuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICB2YXIgcmVmcyA9IHJlZmVyZW5jZXMgfHwgW107XG4gICAgdmFyIGxvb2t1cCA9IHJlZnMuaW5kZXhPZihvYmopO1xuICAgIGlmIChsb29rdXAgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiByZWZzW2xvb2t1cF07XG4gICAgfVxuXG4gICAgcmVmcy5wdXNoKG9iaik7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIHZhciBjb21wYWN0ZWQgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKG9ialtpXSAmJiB0eXBlb2Ygb2JqW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNvbXBhY3RlZC5wdXNoKGV4cG9ydHMuY29tcGFjdChvYmpbaV0sIHJlZnMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9ialtpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBjb21wYWN0ZWQucHVzaChvYmpbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbXBhY3RlZDtcbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBleHBvcnRzLmNvbXBhY3Qob2JqW2tleV0sIHJlZnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydHMuaXNSZWdFeHAgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBSZWdFeHBdJztcbn07XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhKG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iaikpO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8vIElmIG9iai5oYXNPd25Qcm9wZXJ0eSBoYXMgYmVlbiBvdmVycmlkZGVuLCB0aGVuIGNhbGxpbmdcbi8vIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSB3aWxsIGJyZWFrLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzE3MDdcbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocXMsIHNlcCwgZXEsIG9wdGlvbnMpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIHZhciBvYmogPSB7fTtcblxuICBpZiAodHlwZW9mIHFzICE9PSAnc3RyaW5nJyB8fCBxcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdmFyIHJlZ2V4cCA9IC9cXCsvZztcbiAgcXMgPSBxcy5zcGxpdChzZXApO1xuXG4gIHZhciBtYXhLZXlzID0gMTAwMDtcbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4S2V5cyA9PT0gJ251bWJlcicpIHtcbiAgICBtYXhLZXlzID0gb3B0aW9ucy5tYXhLZXlzO1xuICB9XG5cbiAgdmFyIGxlbiA9IHFzLmxlbmd0aDtcbiAgLy8gbWF4S2V5cyA8PSAwIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5vdCBsaW1pdCBrZXlzIGNvdW50XG4gIGlmIChtYXhLZXlzID4gMCAmJiBsZW4gPiBtYXhLZXlzKSB7XG4gICAgbGVuID0gbWF4S2V5cztcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgeCA9IHFzW2ldLnJlcGxhY2UocmVnZXhwLCAnJTIwJyksXG4gICAgICAgIGlkeCA9IHguaW5kZXhPZihlcSksXG4gICAgICAgIGtzdHIsIHZzdHIsIGssIHY7XG5cbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIGtzdHIgPSB4LnN1YnN0cigwLCBpZHgpO1xuICAgICAgdnN0ciA9IHguc3Vic3RyKGlkeCArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrc3RyID0geDtcbiAgICAgIHZzdHIgPSAnJztcbiAgICB9XG5cbiAgICBrID0gZGVjb2RlVVJJQ29tcG9uZW50KGtzdHIpO1xuICAgIHYgPSBkZWNvZGVVUklDb21wb25lbnQodnN0cik7XG5cbiAgICBpZiAoIWhhc093blByb3BlcnR5KG9iaiwgaykpIHtcbiAgICAgIG9ialtrXSA9IHY7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KG9ialtrXSkpIHtcbiAgICAgIG9ialtrXS5wdXNoKHYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpba10gPSBbb2JqW2tdLCB2XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4cykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5UHJpbWl0aXZlID0gZnVuY3Rpb24odikge1xuICBzd2l0Y2ggKHR5cGVvZiB2KSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiB2O1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gdiA/ICd0cnVlJyA6ICdmYWxzZSc7XG5cbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIGlzRmluaXRlKHYpID8gdiA6ICcnO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHNlcCwgZXEsIG5hbWUpIHtcbiAgc2VwID0gc2VwIHx8ICcmJztcbiAgZXEgPSBlcSB8fCAnPSc7XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICBvYmogPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbWFwKG9iamVjdEtleXMob2JqKSwgZnVuY3Rpb24oaykge1xuICAgICAgdmFyIGtzID0gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShrKSkgKyBlcTtcbiAgICAgIGlmIChpc0FycmF5KG9ialtrXSkpIHtcbiAgICAgICAgcmV0dXJuIG1hcChvYmpba10sIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKHYpKTtcbiAgICAgICAgfSkuam9pbihzZXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmpba10pKTtcbiAgICAgIH1cbiAgICB9KS5qb2luKHNlcCk7XG5cbiAgfVxuXG4gIGlmICghbmFtZSkgcmV0dXJuICcnO1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShuYW1lKSkgKyBlcSArXG4gICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9iaikpO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh4cykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbmZ1bmN0aW9uIG1hcCAoeHMsIGYpIHtcbiAgaWYgKHhzLm1hcCkgcmV0dXJuIHhzLm1hcChmKTtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzLnB1c2goZih4c1tpXSwgaSkpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIgcmVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgcmVzLnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5kZWNvZGUgPSBleHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9kZWNvZGUnKTtcbmV4cG9ydHMuZW5jb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2VuY29kZScpO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIG9sZEJyb3dzZXIgKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3NlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExJylcbn1cblxudmFyIGNyeXB0byA9IGdsb2JhbC5jcnlwdG8gfHwgZ2xvYmFsLm1zQ3J5cHRvXG5cbmlmIChjcnlwdG8gJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJhbmRvbUJ5dGVzXG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IG9sZEJyb3dzZXJcbn1cblxuZnVuY3Rpb24gcmFuZG9tQnl0ZXMgKHNpemUsIGNiKSB7XG4gIC8vIHBoYW50b21qcyBuZWVkcyB0byB0aHJvd1xuICBpZiAoc2l6ZSA+IDY1NTM2KSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMnKVxuICAvLyBpbiBjYXNlIGJyb3dzZXJpZnkgIGlzbid0IHVzaW5nIHRoZSBVaW50OEFycmF5IHZlcnNpb25cbiAgdmFyIHJhd0J5dGVzID0gbmV3IGdsb2JhbC5VaW50OEFycmF5KHNpemUpXG5cbiAgLy8gVGhpcyB3aWxsIG5vdCB3b3JrIGluIG9sZGVyIGJyb3dzZXJzLlxuICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL3dpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzXG4gIGlmIChzaXplID4gMCkgeyAgLy8gZ2V0UmFuZG9tVmFsdWVzIGZhaWxzIG9uIElFIGlmIHNpemUgPT0gMFxuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmF3Qnl0ZXMpXG4gIH1cbiAgLy8gcGhhbnRvbWpzIGRvZXNuJ3QgbGlrZSBhIGJ1ZmZlciBiZWluZyBwYXNzZWQgaGVyZVxuICB2YXIgYnl0ZXMgPSBuZXcgQnVmZmVyKHJhd0J5dGVzLmJ1ZmZlcilcblxuICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgY2IobnVsbCwgYnl0ZXMpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX2R1cGxleC5qcycpO1xuIiwiLy8gYSBkdXBsZXggc3RyZWFtIGlzIGp1c3QgYSBzdHJlYW0gdGhhdCBpcyBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZS5cbi8vIFNpbmNlIEpTIGRvZXNuJ3QgaGF2ZSBtdWx0aXBsZSBwcm90b3R5cGFsIGluaGVyaXRhbmNlLCB0aGlzIGNsYXNzXG4vLyBwcm90b3R5cGFsbHkgaW5oZXJpdHMgZnJvbSBSZWFkYWJsZSwgYW5kIHRoZW4gcGFyYXNpdGljYWxseSBmcm9tXG4vLyBXcml0YWJsZS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGtleXMucHVzaChrZXkpO1xuICB9cmV0dXJuIGtleXM7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbm1vZHVsZS5leHBvcnRzID0gRHVwbGV4O1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHByb2Nlc3NOZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MtbmV4dGljay1hcmdzJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgUmVhZGFibGUgPSByZXF1aXJlKCcuL19zdHJlYW1fcmVhZGFibGUnKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoJy4vX3N0cmVhbV93cml0YWJsZScpO1xuXG51dGlsLmluaGVyaXRzKER1cGxleCwgUmVhZGFibGUpO1xuXG52YXIga2V5cyA9IG9iamVjdEtleXMoV3JpdGFibGUucHJvdG90eXBlKTtcbmZvciAodmFyIHYgPSAwOyB2IDwga2V5cy5sZW5ndGg7IHYrKykge1xuICB2YXIgbWV0aG9kID0ga2V5c1t2XTtcbiAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pIER1cGxleC5wcm90b3R5cGVbbWV0aG9kXSA9IFdyaXRhYmxlLnByb3RvdHlwZVttZXRob2RdO1xufVxuXG5mdW5jdGlvbiBEdXBsZXgob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkgcmV0dXJuIG5ldyBEdXBsZXgob3B0aW9ucyk7XG5cbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgV3JpdGFibGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcblxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlID09PSBmYWxzZSkgdGhpcy5yZWFkYWJsZSA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG5cbiAgdGhpcy5hbGxvd0hhbGZPcGVuID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG5cbiAgdGhpcy5vbmNlKCdlbmQnLCBvbmVuZCk7XG59XG5cbi8vIHRoZSBuby1oYWxmLW9wZW4gZW5mb3JjZXJcbmZ1bmN0aW9uIG9uZW5kKCkge1xuICAvLyBpZiB3ZSBhbGxvdyBoYWxmLW9wZW4gc3RhdGUsIG9yIGlmIHRoZSB3cml0YWJsZSBzaWRlIGVuZGVkLFxuICAvLyB0aGVuIHdlJ3JlIG9rLlxuICBpZiAodGhpcy5hbGxvd0hhbGZPcGVuIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQpIHJldHVybjtcblxuICAvLyBubyBtb3JlIGRhdGEgY2FuIGJlIHdyaXR0ZW4uXG4gIC8vIEJ1dCBhbGxvdyBtb3JlIHdyaXRlcyB0byBoYXBwZW4gaW4gdGhpcyB0aWNrLlxuICBwcm9jZXNzTmV4dFRpY2sob25FbmROVCwgdGhpcyk7XG59XG5cbmZ1bmN0aW9uIG9uRW5kTlQoc2VsZikge1xuICBzZWxmLmVuZCgpO1xufVxuXG5mdW5jdGlvbiBmb3JFYWNoKHhzLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZih4c1tpXSwgaSk7XG4gIH1cbn0iLCIvLyBhIHBhc3N0aHJvdWdoIHN0cmVhbS5cbi8vIGJhc2ljYWxseSBqdXN0IHRoZSBtb3N0IG1pbmltYWwgc29ydCBvZiBUcmFuc2Zvcm0gc3RyZWFtLlxuLy8gRXZlcnkgd3JpdHRlbiBjaHVuayBnZXRzIG91dHB1dCBhcy1pcy5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBhc3NUaHJvdWdoO1xuXG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnLi9fc3RyZWFtX3RyYW5zZm9ybScpO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnV0aWwuaW5oZXJpdHMoUGFzc1Rocm91Z2gsIFRyYW5zZm9ybSk7XG5cbmZ1bmN0aW9uIFBhc3NUaHJvdWdoKG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoKSkgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaChvcHRpb25zKTtcblxuICBUcmFuc2Zvcm0uY2FsbCh0aGlzLCBvcHRpb25zKTtcbn1cblxuUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjYihudWxsLCBjaHVuayk7XG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFkYWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBwcm9jZXNzTmV4dFRpY2sgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIER1cGxleDtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG5SZWFkYWJsZS5SZWFkYWJsZVN0YXRlID0gUmVhZGFibGVTdGF0ZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcblxudmFyIEVFbGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uIChlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVycyh0eXBlKS5sZW5ndGg7XG59O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgU3RyZWFtID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbScpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIGJ1ZmZlclNoaW0gPSByZXF1aXJlKCdidWZmZXItc2hpbXMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgZGVidWdVdGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGRlYnVnID0gdm9pZCAwO1xuaWYgKGRlYnVnVXRpbCAmJiBkZWJ1Z1V0aWwuZGVidWdsb2cpIHtcbiAgZGVidWcgPSBkZWJ1Z1V0aWwuZGVidWdsb2coJ3N0cmVhbScpO1xufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbiAoKSB7fTtcbn1cbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgQnVmZmVyTGlzdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0Jyk7XG52YXIgU3RyaW5nRGVjb2RlcjtcblxudXRpbC5pbmhlcml0cyhSZWFkYWJsZSwgU3RyZWFtKTtcblxudmFyIGtQcm94eUV2ZW50cyA9IFsnZXJyb3InLCAnY2xvc2UnLCAnZGVzdHJveScsICdwYXVzZScsICdyZXN1bWUnXTtcblxuZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbikge1xuICAvLyBTYWRseSB0aGlzIGlzIG5vdCBjYWNoZWFibGUgYXMgc29tZSBsaWJyYXJpZXMgYnVuZGxlIHRoZWlyIG93blxuICAvLyBldmVudCBlbWl0dGVyIGltcGxlbWVudGF0aW9uIHdpdGggdGhlbS5cbiAgaWYgKHR5cGVvZiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2Ugc3VyZSB0aGF0IG91ciBlcnJvciBoYW5kbGVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnlcbiAgICAvLyB1c2VybGFuZCBvbmVzLiAgTkVWRVIgRE8gVEhJUy4gVGhpcyBpcyBoZXJlIG9ubHkgYmVjYXVzZSB0aGlzIGNvZGUgbmVlZHNcbiAgICAvLyB0byBjb250aW51ZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgTm9kZS5qcyB0aGF0IGRvIG5vdCBpbmNsdWRlXG4gICAgLy8gdGhlIHByZXBlbmRMaXN0ZW5lcigpIG1ldGhvZC4gVGhlIGdvYWwgaXMgdG8gZXZlbnR1YWxseSByZW1vdmUgdGhpcyBoYWNrLlxuICAgIGlmICghZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbZXZlbnRdKSBlbWl0dGVyLm9uKGV2ZW50LCBmbik7ZWxzZSBpZiAoaXNBcnJheShlbWl0dGVyLl9ldmVudHNbZXZlbnRdKSkgZW1pdHRlci5fZXZlbnRzW2V2ZW50XS51bnNoaWZ0KGZuKTtlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0gPSBbZm4sIGVtaXR0ZXIuX2V2ZW50c1tldmVudF1dO1xuICB9XG59XG5cbmZ1bmN0aW9uIFJlYWRhYmxlU3RhdGUob3B0aW9ucywgc3RyZWFtKSB7XG4gIER1cGxleCA9IER1cGxleCB8fCByZXF1aXJlKCcuL19zdHJlYW1fZHVwbGV4Jyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gb2JqZWN0IHN0cmVhbSBmbGFnLiBVc2VkIHRvIG1ha2UgcmVhZChuKSBpZ25vcmUgbiBhbmQgdG9cbiAgLy8gbWFrZSBhbGwgdGhlIGJ1ZmZlciBtZXJnaW5nIGFuZCBsZW5ndGggY2hlY2tzIGdvIGF3YXlcbiAgdGhpcy5vYmplY3RNb2RlID0gISFvcHRpb25zLm9iamVjdE1vZGU7XG5cbiAgaWYgKHN0cmVhbSBpbnN0YW5jZW9mIER1cGxleCkgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGU7XG5cbiAgLy8gdGhlIHBvaW50IGF0IHdoaWNoIGl0IHN0b3BzIGNhbGxpbmcgX3JlYWQoKSB0byBmaWxsIHRoZSBidWZmZXJcbiAgLy8gTm90ZTogMCBpcyBhIHZhbGlkIHZhbHVlLCBtZWFucyBcImRvbid0IGNhbGwgX3JlYWQgcHJlZW1wdGl2ZWx5IGV2ZXJcIlxuICB2YXIgaHdtID0gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrO1xuICB2YXIgZGVmYXVsdEh3bSA9IHRoaXMub2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBod20gfHwgaHdtID09PSAwID8gaHdtIDogZGVmYXVsdEh3bTtcblxuICAvLyBjYXN0IHRvIGludHMuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IH5+dGhpcy5oaWdoV2F0ZXJNYXJrO1xuXG4gIC8vIEEgbGlua2VkIGxpc3QgaXMgdXNlZCB0byBzdG9yZSBkYXRhIGNodW5rcyBpbnN0ZWFkIG9mIGFuIGFycmF5IGJlY2F1c2UgdGhlXG4gIC8vIGxpbmtlZCBsaXN0IGNhbiByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgYmVnaW5uaW5nIGZhc3RlciB0aGFuXG4gIC8vIGFycmF5LnNoaWZ0KClcbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBudWxsO1xuICB0aGlzLnBpcGVzQ291bnQgPSAwO1xuICB0aGlzLmZsb3dpbmcgPSBudWxsO1xuICB0aGlzLmVuZGVkID0gZmFsc2U7XG4gIHRoaXMuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAvLyBhIGZsYWcgdG8gYmUgYWJsZSB0byB0ZWxsIGlmIHRoZSBvbndyaXRlIGNiIGlzIGNhbGxlZCBpbW1lZGlhdGVseSxcbiAgLy8gb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZSBhbnlcbiAgLy8gYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgY2FsbC5cbiAgdGhpcy5zeW5jID0gdHJ1ZTtcblxuICAvLyB3aGVuZXZlciB3ZSByZXR1cm4gbnVsbCwgdGhlbiB3ZSBzZXQgYSBmbGFnIHRvIHNheVxuICAvLyB0aGF0IHdlJ3JlIGF3YWl0aW5nIGEgJ3JlYWRhYmxlJyBldmVudCBlbWlzc2lvbi5cbiAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZUxpc3RlbmluZyA9IGZhbHNlO1xuICB0aGlzLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIC8vIENyeXB0byBpcyBraW5kIG9mIG9sZCBhbmQgY3J1c3R5LiAgSGlzdG9yaWNhbGx5LCBpdHMgZGVmYXVsdCBzdHJpbmdcbiAgLy8gZW5jb2RpbmcgaXMgJ2JpbmFyeScgc28gd2UgaGF2ZSB0byBtYWtlIHRoaXMgY29uZmlndXJhYmxlLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgaW4gdGhlIHVuaXZlcnNlIHVzZXMgJ3V0ZjgnLCB0aG91Z2guXG4gIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgJ3V0ZjgnO1xuXG4gIC8vIHdoZW4gcGlwaW5nLCB3ZSBvbmx5IGNhcmUgYWJvdXQgJ3JlYWRhYmxlJyBldmVudHMgdGhhdCBoYXBwZW5cbiAgLy8gYWZ0ZXIgcmVhZCgpaW5nIGFsbCB0aGUgYnl0ZXMgYW5kIG5vdCBnZXR0aW5nIGFueSBwdXNoYmFjay5cbiAgdGhpcy5yYW5PdXQgPSBmYWxzZTtcblxuICAvLyB0aGUgbnVtYmVyIG9mIHdyaXRlcnMgdGhhdCBhcmUgYXdhaXRpbmcgYSBkcmFpbiBldmVudCBpbiAucGlwZSgpc1xuICB0aGlzLmF3YWl0RHJhaW4gPSAwO1xuXG4gIC8vIGlmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWRcbiAgdGhpcy5yZWFkaW5nTW9yZSA9IGZhbHNlO1xuXG4gIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gIHRoaXMuZW5jb2RpbmcgPSBudWxsO1xuICBpZiAob3B0aW9ucy5lbmNvZGluZykge1xuICAgIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gUmVhZGFibGUob3B0aW9ucykge1xuICBEdXBsZXggPSBEdXBsZXggfHwgcmVxdWlyZSgnLi9fc3RyZWFtX2R1cGxleCcpO1xuXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMpO1xuXG4gIC8vIGxlZ2FjeVxuICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAnZnVuY3Rpb24nKSB0aGlzLl9yZWFkID0gb3B0aW9ucy5yZWFkO1xuXG4gIFN0cmVhbS5jYWxsKHRoaXMpO1xufVxuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcblxuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUgJiYgdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gZW5jb2RpbmcgfHwgc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuICAgIGlmIChlbmNvZGluZyAhPT0gc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgIGNodW5rID0gYnVmZmVyU2hpbS5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICBlbmNvZGluZyA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkYWJsZUFkZENodW5rKHRoaXMsIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGZhbHNlKTtcbn07XG5cbi8vIFVuc2hpZnQgc2hvdWxkICphbHdheXMqIGJlIHNvbWV0aGluZyBkaXJlY3RseSBvdXQgb2YgcmVhZCgpXG5SZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uIChjaHVuaykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssICcnLCB0cnVlKTtcbn07XG5cblJlYWRhYmxlLnByb3RvdHlwZS5pc1BhdXNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9PT0gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiByZWFkYWJsZUFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCkge1xuICB2YXIgZXIgPSBjaHVua0ludmFsaWQoc3RhdGUsIGNodW5rKTtcbiAgaWYgKGVyKSB7XG4gICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICB9IGVsc2UgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuayAmJiBjaHVuay5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHN0YXRlLmVuZGVkICYmICFhZGRUb0Zyb250KSB7XG4gICAgICB2YXIgZSA9IG5ldyBFcnJvcignc3RyZWFtLnB1c2goKSBhZnRlciBFT0YnKTtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGUpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUuZW5kRW1pdHRlZCAmJiBhZGRUb0Zyb250KSB7XG4gICAgICB2YXIgX2UgPSBuZXcgRXJyb3IoJ3N0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50Jyk7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBfZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBza2lwQWRkO1xuICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWFkZFRvRnJvbnQgJiYgIWVuY29kaW5nKSB7XG4gICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgICAgIHNraXBBZGQgPSAhc3RhdGUub2JqZWN0TW9kZSAmJiBjaHVuay5sZW5ndGggPT09IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICghYWRkVG9Gcm9udCkgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuXG4gICAgICAvLyBEb24ndCBhZGQgdG8gdGhlIGJ1ZmZlciBpZiB3ZSd2ZSBkZWNvZGVkIHRvIGFuIGVtcHR5IHN0cmluZyBjaHVuayBhbmRcbiAgICAgIC8vIHdlJ3JlIG5vdCBpbiBvYmplY3QgbW9kZVxuICAgICAgaWYgKCFza2lwQWRkKSB7XG4gICAgICAgIC8vIGlmIHdlIHdhbnQgdGhlIGRhdGEgbm93LCBqdXN0IGVtaXQgaXQuXG4gICAgICAgIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiAhc3RhdGUuc3luYykge1xuICAgICAgICAgIHN0cmVhbS5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICAgIHN0cmVhbS5yZWFkKDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgYnVmZmVyIGluZm8uXG4gICAgICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgICAgICAgIGlmIChhZGRUb0Zyb250KSBzdGF0ZS5idWZmZXIudW5zaGlmdChjaHVuayk7ZWxzZSBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUubmVlZFJlYWRhYmxlKSBlbWl0UmVhZGFibGUoc3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghYWRkVG9Gcm9udCkge1xuICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBuZWVkTW9yZURhdGEoc3RhdGUpO1xufVxuXG4vLyBpZiBpdCdzIHBhc3QgdGhlIGhpZ2ggd2F0ZXIgbWFyaywgd2UgY2FuIHB1c2ggaW4gc29tZSBtb3JlLlxuLy8gQWxzbywgaWYgd2UgaGF2ZSBubyBkYXRhIHlldCwgd2UgY2FuIHN0YW5kIHNvbWVcbi8vIG1vcmUgYnl0ZXMuICBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGNhc2VzIHdoZXJlIGh3bT0wLFxuLy8gc3VjaCBhcyB0aGUgcmVwbC4gIEFsc28sIGlmIHRoZSBwdXNoKCkgdHJpZ2dlcmVkIGFcbi8vIHJlYWRhYmxlIGV2ZW50LCBhbmQgdGhlIHVzZXIgY2FsbGVkIHJlYWQobGFyZ2VOdW1iZXIpIHN1Y2ggdGhhdFxuLy8gbmVlZFJlYWRhYmxlIHdhcyBzZXQsIHRoZW4gd2Ugb3VnaHQgdG8gcHVzaCBtb3JlLCBzbyB0aGF0IGFub3RoZXJcbi8vICdyZWFkYWJsZScgZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQuXG5mdW5jdGlvbiBuZWVkTW9yZURhdGEoc3RhdGUpIHtcbiAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubmVlZFJlYWRhYmxlIHx8IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUubGVuZ3RoID09PSAwKTtcbn1cblxuLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIGlmICghU3RyaW5nRGVjb2RlcikgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyLycpLlN0cmluZ0RlY29kZXI7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2RpbmcgPSBlbmM7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDhNQlxudmFyIE1BWF9IV00gPSAweDgwMDAwMDtcbmZ1bmN0aW9uIGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pIHtcbiAgaWYgKG4gPj0gTUFYX0hXTSkge1xuICAgIG4gPSBNQVhfSFdNO1xuICB9IGVsc2Uge1xuICAgIC8vIEdldCB0aGUgbmV4dCBoaWdoZXN0IHBvd2VyIG9mIDIgdG8gcHJldmVudCBpbmNyZWFzaW5nIGh3bSBleGNlc3NpdmVseSBpblxuICAgIC8vIHRpbnkgYW1vdW50c1xuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgcmV0dXJuIDA7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXR1cm4gMTtcbiAgaWYgKG4gIT09IG4pIHtcbiAgICAvLyBPbmx5IGZsb3cgb25lIGJ1ZmZlciBhdCBhIHRpbWVcbiAgICBpZiAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGgpIHJldHVybiBzdGF0ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDtlbHNlIHJldHVybiBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgc3RhdGUuaGlnaFdhdGVyTWFyayA9IGNvbXB1dGVOZXdIaWdoV2F0ZXJNYXJrKG4pO1xuICBpZiAobiA8PSBzdGF0ZS5sZW5ndGgpIHJldHVybiBuO1xuICAvLyBEb24ndCBoYXZlIGVub3VnaFxuICBpZiAoIXN0YXRlLmVuZGVkKSB7XG4gICAgc3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gc3RhdGUubGVuZ3RoO1xufVxuXG4vLyB5b3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZygncmVhZCcsIG4pO1xuICBuID0gcGFyc2VJbnQobiwgMTApO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICB2YXIgbk9yaWcgPSBuO1xuXG4gIGlmIChuICE9PSAwKSBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcblxuICAvLyBpZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG4gIGlmIChuID09PSAwICYmIHN0YXRlLm5lZWRSZWFkYWJsZSAmJiAoc3RhdGUubGVuZ3RoID49IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZW5kZWQpKSB7XG4gICAgZGVidWcoJ3JlYWQ6IGVtaXRSZWFkYWJsZScsIHN0YXRlLmxlbmd0aCwgc3RhdGUuZW5kZWQpO1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIGVuZFJlYWRhYmxlKHRoaXMpO2Vsc2UgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbiA9IGhvd011Y2hUb1JlYWQobiwgc3RhdGUpO1xuXG4gIC8vIGlmIHdlJ3ZlIGVuZGVkLCBhbmQgd2UncmUgbm93IGNsZWFyLCB0aGVuIGZpbmlzaCBpdCB1cC5cbiAgaWYgKG4gPT09IDAgJiYgc3RhdGUuZW5kZWQpIHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICB2YXIgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZygnbmVlZCByZWFkYWJsZScsIGRvUmVhZCk7XG5cbiAgLy8gaWYgd2UgY3VycmVudGx5IGhhdmUgbGVzcyB0aGFuIHRoZSBoaWdoV2F0ZXJNYXJrLCB0aGVuIGFsc28gcmVhZCBzb21lXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKCdsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyaycsIGRvUmVhZCk7XG4gIH1cblxuICAvLyBob3dldmVyLCBpZiB3ZSd2ZSBlbmRlZCwgdGhlbiB0aGVyZSdzIG5vIHBvaW50LCBhbmQgaWYgd2UncmUgYWxyZWFkeVxuICAvLyByZWFkaW5nLCB0aGVuIGl0J3MgdW5uZWNlc3NhcnkuXG4gIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoJ3JlYWRpbmcgb3IgZW5kZWQnLCBkb1JlYWQpO1xuICB9IGVsc2UgaWYgKGRvUmVhZCkge1xuICAgIGRlYnVnKCdkbyByZWFkJyk7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIC8vIGNhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuICAgIHN0YXRlLnN5bmMgPSBmYWxzZTtcbiAgICAvLyBJZiBfcmVhZCBwdXNoZWQgZGF0YSBzeW5jaHJvbm91c2x5LCB0aGVuIGByZWFkaW5nYCB3aWxsIGJlIGZhbHNlLFxuICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBtdWNoIGRhdGEgd2UgY2FuIHJldHVybiB0byB0aGUgdXNlci5cbiAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIG4gPSBob3dNdWNoVG9SZWFkKG5PcmlnLCBzdGF0ZSk7XG4gIH1cblxuICB2YXIgcmV0O1xuICBpZiAobiA+IDApIHJldCA9IGZyb21MaXN0KG4sIHN0YXRlKTtlbHNlIHJldCA9IG51bGw7XG5cbiAgaWYgKHJldCA9PT0gbnVsbCkge1xuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgbiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgc3RhdGUubGVuZ3RoIC09IG47XG4gIH1cblxuICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBub3RoaW5nIGluIHRoZSBidWZmZXIsIHRoZW4gd2Ugd2FudCB0byBrbm93XG4gICAgLy8gYXMgc29vbiBhcyB3ZSAqZG8qIGdldCBzb21ldGhpbmcgaW50byB0aGUgYnVmZmVyLlxuICAgIGlmICghc3RhdGUuZW5kZWQpIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG5cbiAgICAvLyBJZiB3ZSB0cmllZCB0byByZWFkKCkgcGFzdCB0aGUgRU9GLCB0aGVuIGVtaXQgZW5kIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgaWYgKG5PcmlnICE9PSBuICYmIHN0YXRlLmVuZGVkKSBlbmRSZWFkYWJsZSh0aGlzKTtcbiAgfVxuXG4gIGlmIChyZXQgIT09IG51bGwpIHRoaXMuZW1pdCgnZGF0YScsIHJldCk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIGNodW5rSW52YWxpZChzdGF0ZSwgY2h1bmspIHtcbiAgdmFyIGVyID0gbnVsbDtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmIHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgY2h1bmsgIT09IG51bGwgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuaycpO1xuICB9XG4gIHJldHVybiBlcjtcbn1cblxuZnVuY3Rpb24gb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5lbmRlZCkgcmV0dXJuO1xuICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgIHZhciBjaHVuayA9IHN0YXRlLmRlY29kZXIuZW5kKCk7XG4gICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkge1xuICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5lbmRlZCA9IHRydWU7XG5cbiAgLy8gZW1pdCAncmVhZGFibGUnIG5vdyB0byBtYWtlIHN1cmUgaXQgZ2V0cyBwaWNrZWQgdXAuXG4gIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xufVxuXG4vLyBEb24ndCBlbWl0IHJlYWRhYmxlIHJpZ2h0IGF3YXkgaW4gc3luYyBtb2RlLCBiZWNhdXNlIHRoaXMgY2FuIHRyaWdnZXJcbi8vIGFub3RoZXIgcmVhZCgpIGNhbGwgPT4gc3RhY2sgb3ZlcmZsb3cuICBUaGlzIHdheSwgaXQgbWlnaHQgdHJpZ2dlclxuLy8gYSBuZXh0VGljayByZWN1cnNpb24gd2FybmluZywgYnV0IHRoYXQncyBub3Qgc28gYmFkLlxuZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSkge1xuICB2YXIgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkge1xuICAgIGRlYnVnKCdlbWl0UmVhZGFibGUnLCBzdGF0ZS5mbG93aW5nKTtcbiAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSB0cnVlO1xuICAgIGlmIChzdGF0ZS5zeW5jKSBwcm9jZXNzTmV4dFRpY2soZW1pdFJlYWRhYmxlXywgc3RyZWFtKTtlbHNlIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWl0UmVhZGFibGVfKHN0cmVhbSkge1xuICBkZWJ1ZygnZW1pdCByZWFkYWJsZScpO1xuICBzdHJlYW0uZW1pdCgncmVhZGFibGUnKTtcbiAgZmxvdyhzdHJlYW0pO1xufVxuXG4vLyBhdCB0aGlzIHBvaW50LCB0aGUgdXNlciBoYXMgcHJlc3VtYWJseSBzZWVuIHRoZSAncmVhZGFibGUnIGV2ZW50LFxuLy8gYW5kIGNhbGxlZCByZWFkKCkgdG8gY29uc3VtZSBzb21lIGRhdGEuICB0aGF0IG1heSBoYXZlIHRyaWdnZXJlZFxuLy8gaW4gdHVybiBhbm90aGVyIF9yZWFkKG4pIGNhbGwsIGluIHdoaWNoIGNhc2UgcmVhZGluZyA9IHRydWUgaWZcbi8vIGl0J3MgaW4gcHJvZ3Jlc3MuXG4vLyBIb3dldmVyLCBpZiB3ZSdyZSBub3QgZW5kZWQsIG9yIHJlYWRpbmcsIGFuZCB0aGUgbGVuZ3RoIDwgaHdtLFxuLy8gdGhlbiBnbyBhaGVhZCBhbmQgdHJ5IHRvIHJlYWQgc29tZSBtb3JlIHByZWVtcHRpdmVseS5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmdNb3JlKSB7XG4gICAgc3RhdGUucmVhZGluZ01vcmUgPSB0cnVlO1xuICAgIHByb2Nlc3NOZXh0VGljayhtYXliZVJlYWRNb3JlXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF5YmVSZWFkTW9yZV8oc3RyZWFtLCBzdGF0ZSkge1xuICB2YXIgbGVuID0gc3RhdGUubGVuZ3RoO1xuICB3aGlsZSAoIXN0YXRlLnJlYWRpbmcgJiYgIXN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLmVuZGVkICYmIHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkZWJ1ZygnbWF5YmVSZWFkTW9yZSByZWFkIDAnKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpXG4gICAgICAvLyBkaWRuJ3QgZ2V0IGFueSBkYXRhLCBzdG9wIHNwaW5uaW5nLlxuICAgICAgYnJlYWs7ZWxzZSBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gIH1cbiAgc3RhdGUucmVhZGluZ01vcmUgPSBmYWxzZTtcbn1cblxuLy8gYWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdfcmVhZCgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpKTtcbn07XG5cblJlYWRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKGRlc3QsIHBpcGVPcHRzKSB7XG4gIHZhciBzcmMgPSB0aGlzO1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIHN3aXRjaCAoc3RhdGUucGlwZXNDb3VudCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHN0YXRlLnBpcGVzID0gZGVzdDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgMTpcbiAgICAgIHN0YXRlLnBpcGVzID0gW3N0YXRlLnBpcGVzLCBkZXN0XTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzdGF0ZS5waXBlcy5wdXNoKGRlc3QpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgc3RhdGUucGlwZXNDb3VudCArPSAxO1xuICBkZWJ1ZygncGlwZSBjb3VudD0lZCBvcHRzPSVqJywgc3RhdGUucGlwZXNDb3VudCwgcGlwZU9wdHMpO1xuXG4gIHZhciBkb0VuZCA9ICghcGlwZU9wdHMgfHwgcGlwZU9wdHMuZW5kICE9PSBmYWxzZSkgJiYgZGVzdCAhPT0gcHJvY2Vzcy5zdGRvdXQgJiYgZGVzdCAhPT0gcHJvY2Vzcy5zdGRlcnI7XG5cbiAgdmFyIGVuZEZuID0gZG9FbmQgPyBvbmVuZCA6IGNsZWFudXA7XG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSBwcm9jZXNzTmV4dFRpY2soZW5kRm4pO2Vsc2Ugc3JjLm9uY2UoJ2VuZCcsIGVuZEZuKTtcblxuICBkZXN0Lm9uKCd1bnBpcGUnLCBvbnVucGlwZSk7XG4gIGZ1bmN0aW9uIG9udW5waXBlKHJlYWRhYmxlKSB7XG4gICAgZGVidWcoJ29udW5waXBlJyk7XG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBkZWJ1Zygnb25lbmQnKTtcbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cbiAgLy8gd2hlbiB0aGUgZGVzdCBkcmFpbnMsIGl0IHJlZHVjZXMgdGhlIGF3YWl0RHJhaW4gY291bnRlclxuICAvLyBvbiB0aGUgc291cmNlLiAgVGhpcyB3b3VsZCBiZSBtb3JlIGVsZWdhbnQgd2l0aCBhIC5vbmNlKClcbiAgLy8gaGFuZGxlciBpbiBmbG93KCksIGJ1dCBhZGRpbmcgYW5kIHJlbW92aW5nIHJlcGVhdGVkbHkgaXNcbiAgLy8gdG9vIHNsb3cuXG4gIHZhciBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjKTtcbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICB2YXIgY2xlYW5lZFVwID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgZGVidWcoJ2NsZWFudXAnKTtcbiAgICAvLyBjbGVhbnVwIGV2ZW50IGhhbmRsZXJzIG9uY2UgdGhlIHBpcGUgaXMgYnJva2VuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdmaW5pc2gnLCBvbmZpbmlzaCk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZHJhaW4nLCBvbmRyYWluKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ3VucGlwZScsIG9udW5waXBlKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTtcbiAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIGNsZWFudXApO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uZGF0YSk7XG5cbiAgICBjbGVhbmVkVXAgPSB0cnVlO1xuXG4gICAgLy8gaWYgdGhlIHJlYWRlciBpcyB3YWl0aW5nIGZvciBhIGRyYWluIGV2ZW50IGZyb20gdGhpc1xuICAgIC8vIHNwZWNpZmljIHdyaXRlciwgdGhlbiBpdCB3b3VsZCBjYXVzZSBpdCB0byBuZXZlciBzdGFydFxuICAgIC8vIGZsb3dpbmcgYWdhaW4uXG4gICAgLy8gU28sIGlmIHRoaXMgaXMgYXdhaXRpbmcgYSBkcmFpbiwgdGhlbiB3ZSBqdXN0IGNhbGwgaXQgbm93LlxuICAgIC8vIElmIHdlIGRvbid0IGtub3csIHRoZW4gYXNzdW1lIHRoYXQgd2UgYXJlIHdhaXRpbmcgZm9yIG9uZS5cbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiAmJiAoIWRlc3QuX3dyaXRhYmxlU3RhdGUgfHwgZGVzdC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pKSBvbmRyYWluKCk7XG4gIH1cblxuICAvLyBJZiB0aGUgdXNlciBwdXNoZXMgbW9yZSBkYXRhIHdoaWxlIHdlJ3JlIHdyaXRpbmcgdG8gZGVzdCB0aGVuIHdlJ2xsIGVuZCB1cFxuICAvLyBpbiBvbmRhdGEgYWdhaW4uIEhvd2V2ZXIsIHdlIG9ubHkgd2FudCB0byBpbmNyZWFzZSBhd2FpdERyYWluIG9uY2UgYmVjYXVzZVxuICAvLyBkZXN0IHdpbGwgb25seSBlbWl0IG9uZSAnZHJhaW4nIGV2ZW50IGZvciB0aGUgbXVsdGlwbGUgd3JpdGVzLlxuICAvLyA9PiBJbnRyb2R1Y2UgYSBndWFyZCBvbiBpbmNyZWFzaW5nIGF3YWl0RHJhaW4uXG4gIHZhciBpbmNyZWFzZWRBd2FpdERyYWluID0gZmFsc2U7XG4gIHNyYy5vbignZGF0YScsIG9uZGF0YSk7XG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGRlYnVnKCdvbmRhdGEnKTtcbiAgICBpbmNyZWFzZWRBd2FpdERyYWluID0gZmFsc2U7XG4gICAgdmFyIHJldCA9IGRlc3Qud3JpdGUoY2h1bmspO1xuICAgIGlmIChmYWxzZSA9PT0gcmV0ICYmICFpbmNyZWFzZWRBd2FpdERyYWluKSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciB1bnBpcGVkIGR1cmluZyBgZGVzdC53cml0ZSgpYCwgaXQgaXMgcG9zc2libGVcbiAgICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgICAvLyBhbHNvIHJldHVybmVkIGZhbHNlLlxuICAgICAgLy8gPT4gQ2hlY2sgd2hldGhlciBgZGVzdGAgaXMgc3RpbGwgYSBwaXBpbmcgZGVzdGluYXRpb24uXG4gICAgICBpZiAoKHN0YXRlLnBpcGVzQ291bnQgPT09IDEgJiYgc3RhdGUucGlwZXMgPT09IGRlc3QgfHwgc3RhdGUucGlwZXNDb3VudCA+IDEgJiYgaW5kZXhPZihzdGF0ZS5waXBlcywgZGVzdCkgIT09IC0xKSAmJiAhY2xlYW5lZFVwKSB7XG4gICAgICAgIGRlYnVnKCdmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UnLCBzcmMuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbik7XG4gICAgICAgIHNyYy5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKys7XG4gICAgICAgIGluY3JlYXNlZEF3YWl0RHJhaW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIGRlc3QgaGFzIGFuIGVycm9yLCB0aGVuIHN0b3AgcGlwaW5nIGludG8gaXQuXG4gIC8vIGhvd2V2ZXIsIGRvbid0IHN1cHByZXNzIHRoZSB0aHJvd2luZyBiZWhhdmlvciBmb3IgdGhpcy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGRlYnVnKCdvbmVycm9yJywgZXIpO1xuICAgIHVucGlwZSgpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG4gICAgaWYgKEVFbGlzdGVuZXJDb3VudChkZXN0LCAnZXJyb3InKSA9PT0gMCkgZGVzdC5lbWl0KCdlcnJvcicsIGVyKTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSBvdXIgZXJyb3IgaGFuZGxlciBpcyBhdHRhY2hlZCBiZWZvcmUgdXNlcmxhbmQgb25lcy5cbiAgcHJlcGVuZExpc3RlbmVyKGRlc3QsICdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignZmluaXNoJywgb25maW5pc2gpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZSgnY2xvc2UnLCBvbmNsb3NlKTtcbiAgZnVuY3Rpb24gb25maW5pc2goKSB7XG4gICAgZGVidWcoJ29uZmluaXNoJyk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbmNsb3NlKTtcbiAgICB1bnBpcGUoKTtcbiAgfVxuICBkZXN0Lm9uY2UoJ2ZpbmlzaCcsIG9uZmluaXNoKTtcblxuICBmdW5jdGlvbiB1bnBpcGUoKSB7XG4gICAgZGVidWcoJ3VucGlwZScpO1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyB0ZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0b1xuICBkZXN0LmVtaXQoJ3BpcGUnLCBzcmMpO1xuXG4gIC8vIHN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cbiAgaWYgKCFzdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BpcGUgcmVzdW1lJyk7XG4gICAgc3JjLnJlc3VtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG4gICAgZGVidWcoJ3BpcGVPbkRyYWluJywgc3RhdGUuYXdhaXREcmFpbik7XG4gICAgaWYgKHN0YXRlLmF3YWl0RHJhaW4pIHN0YXRlLmF3YWl0RHJhaW4tLTtcbiAgICBpZiAoc3RhdGUuYXdhaXREcmFpbiA9PT0gMCAmJiBFRWxpc3RlbmVyQ291bnQoc3JjLCAnZGF0YScpKSB7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICAgIGZsb3coc3JjKTtcbiAgICB9XG4gIH07XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbiAoZGVzdCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIC8vIGlmIHdlJ3JlIG5vdCBwaXBpbmcgYW55d2hlcmUsIHRoZW4gZG8gbm90aGluZy5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDApIHJldHVybiB0aGlzO1xuXG4gIC8vIGp1c3Qgb25lIGRlc3RpbmF0aW9uLiAgbW9zdCBjb21tb24gY2FzZS5cbiAgaWYgKHN0YXRlLnBpcGVzQ291bnQgPT09IDEpIHtcbiAgICAvLyBwYXNzZWQgaW4gb25lLCBidXQgaXQncyBub3QgdGhlIHJpZ2h0IG9uZS5cbiAgICBpZiAoZGVzdCAmJiBkZXN0ICE9PSBzdGF0ZS5waXBlcykgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAoIWRlc3QpIGRlc3QgPSBzdGF0ZS5waXBlcztcblxuICAgIC8vIGdvdCBhIG1hdGNoLlxuICAgIHN0YXRlLnBpcGVzID0gbnVsbDtcbiAgICBzdGF0ZS5waXBlc0NvdW50ID0gMDtcbiAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgaWYgKGRlc3QpIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzbG93IGNhc2UuIG11bHRpcGxlIHBpcGUgZGVzdGluYXRpb25zLlxuXG4gIGlmICghZGVzdCkge1xuICAgIC8vIHJlbW92ZSBhbGwuXG4gICAgdmFyIGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgdmFyIGxlbiA9IHN0YXRlLnBpcGVzQ291bnQ7XG4gICAgc3RhdGUucGlwZXMgPSBudWxsO1xuICAgIHN0YXRlLnBpcGVzQ291bnQgPSAwO1xuICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGRlc3RzW2ldLmVtaXQoJ3VucGlwZScsIHRoaXMpO1xuICAgIH1yZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHRyeSB0byBmaW5kIHRoZSByaWdodCBvbmUuXG4gIHZhciBpbmRleCA9IGluZGV4T2Yoc3RhdGUucGlwZXMsIGRlc3QpO1xuICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm4gdGhpcztcblxuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICBzdGF0ZS5waXBlc0NvdW50IC09IDE7XG4gIGlmIChzdGF0ZS5waXBlc0NvdW50ID09PSAxKSBzdGF0ZS5waXBlcyA9IHN0YXRlLnBpcGVzWzBdO1xuXG4gIGRlc3QuZW1pdCgndW5waXBlJywgdGhpcyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBzZXQgdXAgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgYXNrZWQgZm9yXG4vLyBFbnN1cmUgcmVhZGFibGUgbGlzdGVuZXJzIGV2ZW50dWFsbHkgZ2V0IHNvbWV0aGluZ1xuUmVhZGFibGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICB2YXIgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsIGV2LCBmbik7XG5cbiAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAvLyBTdGFydCBmbG93aW5nIG9uIG5leHQgdGljayBpZiBzdHJlYW0gaXNuJ3QgZXhwbGljaXRseSBwYXVzZWRcbiAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nICE9PSBmYWxzZSkgdGhpcy5yZXN1bWUoKTtcbiAgfSBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gICAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIHtcbiAgICAgICAgcHJvY2Vzc05leHRUaWNrKG5SZWFkaW5nTmV4dFRpY2ssIHRoaXMpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMsIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IFJlYWRhYmxlLnByb3RvdHlwZS5vbjtcblxuZnVuY3Rpb24gblJlYWRpbmdOZXh0VGljayhzZWxmKSB7XG4gIGRlYnVnKCdyZWFkYWJsZSBuZXh0dGljayByZWFkIDAnKTtcbiAgc2VsZi5yZWFkKDApO1xufVxuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoIXN0YXRlLmZsb3dpbmcpIHtcbiAgICBkZWJ1ZygncmVzdW1lJyk7XG4gICAgc3RhdGUuZmxvd2luZyA9IHRydWU7XG4gICAgcmVzdW1lKHRoaXMsIHN0YXRlKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHJlc3VtZShzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7XG4gICAgc3RhdGUucmVzdW1lU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBwcm9jZXNzTmV4dFRpY2socmVzdW1lXywgc3RyZWFtLCBzdGF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lXyhzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucmVhZGluZykge1xuICAgIGRlYnVnKCdyZXN1bWUgcmVhZCAwJyk7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gIH1cblxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgc3RhdGUuYXdhaXREcmFpbiA9IDA7XG4gIHN0cmVhbS5lbWl0KCdyZXN1bWUnKTtcbiAgZmxvdyhzdHJlYW0pO1xuICBpZiAoc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUucmVhZGluZykgc3RyZWFtLnJlYWQoMCk7XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgZGVidWcoJ2NhbGwgcGF1c2UgZmxvd2luZz0laicsIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyk7XG4gIGlmIChmYWxzZSAhPT0gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSB7XG4gICAgZGVidWcoJ3BhdXNlJyk7XG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gZmxvdyhzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZygnZmxvdycsIHN0YXRlLmZsb3dpbmcpO1xuICB3aGlsZSAoc3RhdGUuZmxvd2luZyAmJiBzdHJlYW0ucmVhZCgpICE9PSBudWxsKSB7fVxufVxuXG4vLyB3cmFwIGFuIG9sZC1zdHlsZSBzdHJlYW0gYXMgdGhlIGFzeW5jIGRhdGEgc291cmNlLlxuLy8gVGhpcyBpcyAqbm90KiBwYXJ0IG9mIHRoZSByZWFkYWJsZSBzdHJlYW0gaW50ZXJmYWNlLlxuLy8gSXQgaXMgYW4gdWdseSB1bmZvcnR1bmF0ZSBtZXNzIG9mIGhpc3RvcnkuXG5SZWFkYWJsZS5wcm90b3R5cGUud3JhcCA9IGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgdmFyIHBhdXNlZCA9IGZhbHNlO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVidWcoJ3dyYXBwZWQgZW5kJyk7XG4gICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIXN0YXRlLmVuZGVkKSB7XG4gICAgICB2YXIgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLmVuZCgpO1xuICAgICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkgc2VsZi5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBzZWxmLnB1c2gobnVsbCk7XG4gIH0pO1xuXG4gIHN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGRlYnVnKCd3cmFwcGVkIGRhdGEnKTtcbiAgICBpZiAoc3RhdGUuZGVjb2RlcikgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTtcblxuICAgIC8vIGRvbid0IHNraXAgb3ZlciBmYWxzeSB2YWx1ZXMgaW4gb2JqZWN0TW9kZVxuICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlICYmIChjaHVuayA9PT0gbnVsbCB8fCBjaHVuayA9PT0gdW5kZWZpbmVkKSkgcmV0dXJuO2Vsc2UgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmICghY2h1bmsgfHwgIWNodW5rLmxlbmd0aCkpIHJldHVybjtcblxuICAgIHZhciByZXQgPSBzZWxmLnB1c2goY2h1bmspO1xuICAgIGlmICghcmV0KSB7XG4gICAgICBwYXVzZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBwcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuXG4gIC8vIGltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuICBmb3IgKHZhciBpIGluIHN0cmVhbSkge1xuICAgIGlmICh0aGlzW2ldID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHN0cmVhbVtpXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1tpXSA9IGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gc3RyZWFtW21ldGhvZF0uYXBwbHkoc3RyZWFtLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfShpKTtcbiAgICB9XG4gIH1cblxuICAvLyBwcm94eSBjZXJ0YWluIGltcG9ydGFudCBldmVudHMuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwga1Byb3h5RXZlbnRzLmxlbmd0aDsgbisrKSB7XG4gICAgc3RyZWFtLm9uKGtQcm94eUV2ZW50c1tuXSwgc2VsZi5lbWl0LmJpbmQoc2VsZiwga1Byb3h5RXZlbnRzW25dKSk7XG4gIH1cblxuICAvLyB3aGVuIHdlIHRyeSB0byBjb25zdW1lIHNvbWUgbW9yZSBieXRlcywgc2ltcGx5IHVucGF1c2UgdGhlXG4gIC8vIHVuZGVybHlpbmcgc3RyZWFtLlxuICBzZWxmLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgICBkZWJ1Zygnd3JhcHBlZCBfcmVhZCcsIG4pO1xuICAgIGlmIChwYXVzZWQpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2VsZjtcbn07XG5cbi8vIGV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuXG4vLyBQbHVjayBvZmYgbiBieXRlcyBmcm9tIGFuIGFycmF5IG9mIGJ1ZmZlcnMuXG4vLyBMZW5ndGggaXMgdGhlIGNvbWJpbmVkIGxlbmd0aHMgb2YgYWxsIHRoZSBidWZmZXJzIGluIHRoZSBsaXN0LlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdChuLCBzdGF0ZSkge1xuICAvLyBub3RoaW5nIGJ1ZmZlcmVkXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gIHZhciByZXQ7XG4gIGlmIChzdGF0ZS5vYmplY3RNb2RlKSByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKTtlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIHJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdFxuICAgIGlmIChzdGF0ZS5kZWNvZGVyKSByZXQgPSBzdGF0ZS5idWZmZXIuam9pbignJyk7ZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgcmV0ID0gc3RhdGUuYnVmZmVyLmhlYWQuZGF0YTtlbHNlIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTtcbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdFxuICAgIHJldCA9IGZyb21MaXN0UGFydGlhbChuLCBzdGF0ZS5idWZmZXIsIHN0YXRlLmRlY29kZXIpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gRXh0cmFjdHMgb25seSBlbm91Z2ggYnVmZmVyZWQgZGF0YSB0byBzYXRpc2Z5IHRoZSBhbW91bnQgcmVxdWVzdGVkLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBmcm9tTGlzdFBhcnRpYWwobiwgbGlzdCwgaGFzU3RyaW5ncykge1xuICB2YXIgcmV0O1xuICBpZiAobiA8IGxpc3QuaGVhZC5kYXRhLmxlbmd0aCkge1xuICAgIC8vIHNsaWNlIGlzIHRoZSBzYW1lIGZvciBidWZmZXJzIGFuZCBzdHJpbmdzXG4gICAgcmV0ID0gbGlzdC5oZWFkLmRhdGEuc2xpY2UoMCwgbik7XG4gICAgbGlzdC5oZWFkLmRhdGEgPSBsaXN0LmhlYWQuZGF0YS5zbGljZShuKTtcbiAgfSBlbHNlIGlmIChuID09PSBsaXN0LmhlYWQuZGF0YS5sZW5ndGgpIHtcbiAgICAvLyBmaXJzdCBjaHVuayBpcyBhIHBlcmZlY3QgbWF0Y2hcbiAgICByZXQgPSBsaXN0LnNoaWZ0KCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyXG4gICAgcmV0ID0gaGFzU3RyaW5ncyA/IGNvcHlGcm9tQnVmZmVyU3RyaW5nKG4sIGxpc3QpIDogY29weUZyb21CdWZmZXIobiwgbGlzdCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxpc3Qgb2YgYnVmZmVyZWQgZGF0YVxuLy8gY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlclN0cmluZyhuLCBsaXN0KSB7XG4gIHZhciBwID0gbGlzdC5oZWFkO1xuICB2YXIgYyA9IDE7XG4gIHZhciByZXQgPSBwLmRhdGE7XG4gIG4gLT0gcmV0Lmxlbmd0aDtcbiAgd2hpbGUgKHAgPSBwLm5leHQpIHtcbiAgICB2YXIgc3RyID0gcC5kYXRhO1xuICAgIHZhciBuYiA9IG4gPiBzdHIubGVuZ3RoID8gc3RyLmxlbmd0aCA6IG47XG4gICAgaWYgKG5iID09PSBzdHIubGVuZ3RoKSByZXQgKz0gc3RyO2Vsc2UgcmV0ICs9IHN0ci5zbGljZSgwLCBuKTtcbiAgICBuIC09IG5iO1xuICAgIGlmIChuID09PSAwKSB7XG4gICAgICBpZiAobmIgPT09IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgKytjO1xuICAgICAgICBpZiAocC5uZXh0KSBsaXN0LmhlYWQgPSBwLm5leHQ7ZWxzZSBsaXN0LmhlYWQgPSBsaXN0LnRhaWwgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdC5oZWFkID0gcDtcbiAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG5iKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICArK2M7XG4gIH1cbiAgbGlzdC5sZW5ndGggLT0gYztcbiAgcmV0dXJuIHJldDtcbn1cblxuLy8gQ29waWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBsaXN0IG9mIGJ1ZmZlcmVkIGRhdGEgY2h1bmtzLlxuLy8gVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmFibGUsIHNvIHBsZWFzZSB0YWtlIGNhcmUgd2hlbiBtYWtpbmdcbi8vIGNoYW5nZXMgdG8gdGhlIGZ1bmN0aW9uIGJvZHkuXG5mdW5jdGlvbiBjb3B5RnJvbUJ1ZmZlcihuLCBsaXN0KSB7XG4gIHZhciByZXQgPSBidWZmZXJTaGltLmFsbG9jVW5zYWZlKG4pO1xuICB2YXIgcCA9IGxpc3QuaGVhZDtcbiAgdmFyIGMgPSAxO1xuICBwLmRhdGEuY29weShyZXQpO1xuICBuIC09IHAuZGF0YS5sZW5ndGg7XG4gIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgdmFyIGJ1ZiA9IHAuZGF0YTtcbiAgICB2YXIgbmIgPSBuID4gYnVmLmxlbmd0aCA/IGJ1Zi5sZW5ndGggOiBuO1xuICAgIGJ1Zi5jb3B5KHJldCwgcmV0Lmxlbmd0aCAtIG4sIDAsIG5iKTtcbiAgICBuIC09IG5iO1xuICAgIGlmIChuID09PSAwKSB7XG4gICAgICBpZiAobmIgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgKytjO1xuICAgICAgICBpZiAocC5uZXh0KSBsaXN0LmhlYWQgPSBwLm5leHQ7ZWxzZSBsaXN0LmhlYWQgPSBsaXN0LnRhaWwgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGlzdC5oZWFkID0gcDtcbiAgICAgICAgcC5kYXRhID0gYnVmLnNsaWNlKG5iKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICArK2M7XG4gIH1cbiAgbGlzdC5sZW5ndGggLT0gYztcbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGUoc3RyZWFtKSB7XG4gIHZhciBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcblxuICAvLyBJZiB3ZSBnZXQgaGVyZSBiZWZvcmUgY29uc3VtaW5nIGFsbCB0aGUgYnl0ZXMsIHRoZW4gdGhhdCBpcyBhXG4gIC8vIGJ1ZyBpbiBub2RlLiAgU2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgaWYgKHN0YXRlLmxlbmd0aCA+IDApIHRocm93IG5ldyBFcnJvcignXCJlbmRSZWFkYWJsZSgpXCIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTtcblxuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgcHJvY2Vzc05leHRUaWNrKGVuZFJlYWRhYmxlTlQsIHN0YXRlLCBzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlTlQoc3RhdGUsIHN0cmVhbSkge1xuICAvLyBDaGVjayB0aGF0IHdlIGRpZG4ndCBnZXQgb25lIGxhc3QgdW5zaGlmdC5cbiAgaWYgKCFzdGF0ZS5lbmRFbWl0dGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5yZWFkYWJsZSA9IGZhbHNlO1xuICAgIHN0cmVhbS5lbWl0KCdlbmQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JFYWNoKHhzLCBmKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZih4c1tpXSwgaSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5kZXhPZih4cywgeCkge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmICh4c1tpXSA9PT0geCkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufSIsIi8vIGEgdHJhbnNmb3JtIHN0cmVhbSBpcyBhIHJlYWRhYmxlL3dyaXRhYmxlIHN0cmVhbSB3aGVyZSB5b3UgZG9cbi8vIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhLiAgU29tZXRpbWVzIGl0J3MgY2FsbGVkIGEgXCJmaWx0ZXJcIixcbi8vIGJ1dCB0aGF0J3Mgbm90IGEgZ3JlYXQgbmFtZSBmb3IgaXQsIHNpbmNlIHRoYXQgaW1wbGllcyBhIHRoaW5nIHdoZXJlXG4vLyBzb21lIGJpdHMgcGFzcyB0aHJvdWdoLCBhbmQgb3RoZXJzIGFyZSBzaW1wbHkgaWdub3JlZC4gIChUaGF0IHdvdWxkXG4vLyBiZSBhIHZhbGlkIGV4YW1wbGUgb2YgYSB0cmFuc2Zvcm0sIG9mIGNvdXJzZS4pXG4vL1xuLy8gV2hpbGUgdGhlIG91dHB1dCBpcyBjYXVzYWxseSByZWxhdGVkIHRvIHRoZSBpbnB1dCwgaXQncyBub3QgYVxuLy8gbmVjZXNzYXJpbHkgc3ltbWV0cmljIG9yIHN5bmNocm9ub3VzIHRyYW5zZm9ybWF0aW9uLiAgRm9yIGV4YW1wbGUsXG4vLyBhIHpsaWIgc3RyZWFtIG1pZ2h0IHRha2UgbXVsdGlwbGUgcGxhaW4tdGV4dCB3cml0ZXMoKSwgYW5kIHRoZW5cbi8vIGVtaXQgYSBzaW5nbGUgY29tcHJlc3NlZCBjaHVuayBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS5cbi8vXG4vLyBIZXJlJ3MgaG93IHRoaXMgd29ya3M6XG4vL1xuLy8gVGhlIFRyYW5zZm9ybSBzdHJlYW0gaGFzIGFsbCB0aGUgYXNwZWN0cyBvZiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlXG4vLyBzdHJlYW0gY2xhc3Nlcy4gIFdoZW4geW91IHdyaXRlKGNodW5rKSwgdGhhdCBjYWxscyBfd3JpdGUoY2h1bmssY2IpXG4vLyBpbnRlcm5hbGx5LCBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGVyZSdzIGEgbG90IG9mIHBlbmRpbmcgd3JpdGVzXG4vLyBidWZmZXJlZCB1cC4gIFdoZW4geW91IGNhbGwgcmVhZCgpLCB0aGF0IGNhbGxzIF9yZWFkKG4pIHVudGlsXG4vLyB0aGVyZSdzIGVub3VnaCBwZW5kaW5nIHJlYWRhYmxlIGRhdGEgYnVmZmVyZWQgdXAuXG4vL1xuLy8gSW4gYSB0cmFuc2Zvcm0gc3RyZWFtLCB0aGUgd3JpdHRlbiBkYXRhIGlzIHBsYWNlZCBpbiBhIGJ1ZmZlci4gIFdoZW5cbi8vIF9yZWFkKG4pIGlzIGNhbGxlZCwgaXQgdHJhbnNmb3JtcyB0aGUgcXVldWVkIHVwIGRhdGEsIGNhbGxpbmcgdGhlXG4vLyBidWZmZXJlZCBfd3JpdGUgY2IncyBhcyBpdCBjb25zdW1lcyBjaHVua3MuICBJZiBjb25zdW1pbmcgYSBzaW5nbGVcbi8vIHdyaXR0ZW4gY2h1bmsgd291bGQgcmVzdWx0IGluIG11bHRpcGxlIG91dHB1dCBjaHVua3MsIHRoZW4gdGhlIGZpcnN0XG4vLyBvdXRwdXR0ZWQgYml0IGNhbGxzIHRoZSByZWFkY2IsIGFuZCBzdWJzZXF1ZW50IGNodW5rcyBqdXN0IGdvIGludG9cbi8vIHRoZSByZWFkIGJ1ZmZlciwgYW5kIHdpbGwgY2F1c2UgaXQgdG8gZW1pdCAncmVhZGFibGUnIGlmIG5lY2Vzc2FyeS5cbi8vXG4vLyBUaGlzIHdheSwgYmFjay1wcmVzc3VyZSBpcyBhY3R1YWxseSBkZXRlcm1pbmVkIGJ5IHRoZSByZWFkaW5nIHNpZGUsXG4vLyBzaW5jZSBfcmVhZCBoYXMgdG8gYmUgY2FsbGVkIHRvIHN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgY2h1bmsuICBIb3dldmVyLFxuLy8gYSBwYXRob2xvZ2ljYWwgaW5mbGF0ZSB0eXBlIG9mIHRyYW5zZm9ybSBjYW4gY2F1c2UgZXhjZXNzaXZlIGJ1ZmZlcmluZ1xuLy8gaGVyZS4gIEZvciBleGFtcGxlLCBpbWFnaW5lIGEgc3RyZWFtIHdoZXJlIGV2ZXJ5IGJ5dGUgb2YgaW5wdXQgaXNcbi8vIGludGVycHJldGVkIGFzIGFuIGludGVnZXIgZnJvbSAwLTI1NSwgYW5kIHRoZW4gcmVzdWx0cyBpbiB0aGF0IG1hbnlcbi8vIGJ5dGVzIG9mIG91dHB1dC4gIFdyaXRpbmcgdGhlIDQgYnl0ZXMge2ZmLGZmLGZmLGZmfSB3b3VsZCByZXN1bHQgaW5cbi8vIDFrYiBvZiBkYXRhIGJlaW5nIG91dHB1dC4gIEluIHRoaXMgY2FzZSwgeW91IGNvdWxkIHdyaXRlIGEgdmVyeSBzbWFsbFxuLy8gYW1vdW50IG9mIGlucHV0LCBhbmQgZW5kIHVwIHdpdGggYSB2ZXJ5IGxhcmdlIGFtb3VudCBvZiBvdXRwdXQuICBJblxuLy8gc3VjaCBhIHBhdGhvbG9naWNhbCBpbmZsYXRpbmcgbWVjaGFuaXNtLCB0aGVyZSdkIGJlIG5vIHdheSB0byB0ZWxsXG4vLyB0aGUgc3lzdGVtIHRvIHN0b3AgZG9pbmcgdGhlIHRyYW5zZm9ybS4gIEEgc2luZ2xlIDRNQiB3cml0ZSBjb3VsZFxuLy8gY2F1c2UgdGhlIHN5c3RlbSB0byBydW4gb3V0IG9mIG1lbW9yeS5cbi8vXG4vLyBIb3dldmVyLCBldmVuIGluIHN1Y2ggYSBwYXRob2xvZ2ljYWwgY2FzZSwgb25seSBhIHNpbmdsZSB3cml0dGVuIGNodW5rXG4vLyB3b3VsZCBiZSBjb25zdW1lZCwgYW5kIHRoZW4gdGhlIHJlc3Qgd291bGQgd2FpdCAodW4tdHJhbnNmb3JtZWQpIHVudGlsXG4vLyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgdHJhbnNmb3JtZWQgY2h1bmsgd2VyZSBjb25zdW1lZC5cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYW5zZm9ybTtcblxudmFyIER1cGxleCA9IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciB1dGlsID0gcmVxdWlyZSgnY29yZS11dGlsLWlzJyk7XG51dGlsLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG51dGlsLmluaGVyaXRzKFRyYW5zZm9ybSwgRHVwbGV4KTtcblxuZnVuY3Rpb24gVHJhbnNmb3JtU3RhdGUoc3RyZWFtKSB7XG4gIHRoaXMuYWZ0ZXJUcmFuc2Zvcm0gPSBmdW5jdGlvbiAoZXIsIGRhdGEpIHtcbiAgICByZXR1cm4gYWZ0ZXJUcmFuc2Zvcm0oc3RyZWFtLCBlciwgZGF0YSk7XG4gIH07XG5cbiAgdGhpcy5uZWVkVHJhbnNmb3JtID0gZmFsc2U7XG4gIHRoaXMudHJhbnNmb3JtaW5nID0gZmFsc2U7XG4gIHRoaXMud3JpdGVjYiA9IG51bGw7XG4gIHRoaXMud3JpdGVjaHVuayA9IG51bGw7XG4gIHRoaXMud3JpdGVlbmNvZGluZyA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGFmdGVyVHJhbnNmb3JtKHN0cmVhbSwgZXIsIGRhdGEpIHtcbiAgdmFyIHRzID0gc3RyZWFtLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMudHJhbnNmb3JtaW5nID0gZmFsc2U7XG5cbiAgdmFyIGNiID0gdHMud3JpdGVjYjtcblxuICBpZiAoIWNiKSByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdubyB3cml0ZWNiIGluIFRyYW5zZm9ybSBjbGFzcycpKTtcblxuICB0cy53cml0ZWNodW5rID0gbnVsbDtcbiAgdHMud3JpdGVjYiA9IG51bGw7XG5cbiAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKSBzdHJlYW0ucHVzaChkYXRhKTtcblxuICBjYihlcik7XG5cbiAgdmFyIHJzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBycy5yZWFkaW5nID0gZmFsc2U7XG4gIGlmIChycy5uZWVkUmVhZGFibGUgfHwgcnMubGVuZ3RoIDwgcnMuaGlnaFdhdGVyTWFyaykge1xuICAgIHN0cmVhbS5fcmVhZChycy5oaWdoV2F0ZXJNYXJrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBUcmFuc2Zvcm0ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkgcmV0dXJuIG5ldyBUcmFuc2Zvcm0ob3B0aW9ucyk7XG5cbiAgRHVwbGV4LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgdGhpcy5fdHJhbnNmb3JtU3RhdGUgPSBuZXcgVHJhbnNmb3JtU3RhdGUodGhpcyk7XG5cbiAgdmFyIHN0cmVhbSA9IHRoaXM7XG5cbiAgLy8gc3RhcnQgb3V0IGFza2luZyBmb3IgYSByZWFkYWJsZSBldmVudCBvbmNlIGRhdGEgaXMgdHJhbnNmb3JtZWQuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlID0gdHJ1ZTtcblxuICAvLyB3ZSBoYXZlIGltcGxlbWVudGVkIHRoZSBfcmVhZCBtZXRob2QsIGFuZCBkb25lIHRoZSBvdGhlciB0aGluZ3NcbiAgLy8gdGhhdCBSZWFkYWJsZSB3YW50cyBiZWZvcmUgdGhlIGZpcnN0IF9yZWFkIGNhbGwsIHNvIHVuc2V0IHRoZVxuICAvLyBzeW5jIGd1YXJkIGZsYWcuXG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fdHJhbnNmb3JtID0gb3B0aW9ucy50cmFuc2Zvcm07XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmx1c2ggPT09ICdmdW5jdGlvbicpIHRoaXMuX2ZsdXNoID0gb3B0aW9ucy5mbHVzaDtcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgdGhpcy5vbmNlKCdwcmVmaW5pc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fZmx1c2goZnVuY3Rpb24gKGVyLCBkYXRhKSB7XG4gICAgICBkb25lKHN0cmVhbSwgZXIsIGRhdGEpO1xuICAgIH0pO2Vsc2UgZG9uZShzdHJlYW0pO1xuICB9KTtcbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtID0gZmFsc2U7XG4gIHJldHVybiBEdXBsZXgucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCBjaHVuaywgZW5jb2RpbmcpO1xufTtcblxuLy8gVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB5b3UgZG8gc3R1ZmYhXG4vLyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuXG4vLyAnY2h1bmsnIGlzIGFuIGlucHV0IGNodW5rLlxuLy9cbi8vIENhbGwgYHB1c2gobmV3Q2h1bmspYCB0byBwYXNzIGFsb25nIHRyYW5zZm9ybWVkIG91dHB1dFxuLy8gdG8gdGhlIHJlYWRhYmxlIHNpZGUuICBZb3UgbWF5IGNhbGwgJ3B1c2gnIHplcm8gb3IgbW9yZSB0aW1lcy5cbi8vXG4vLyBDYWxsIGBjYihlcnIpYCB3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIHRoaXMgY2h1bmsuICBJZiB5b3UgcGFzc1xuLy8gYW4gZXJyb3IsIHRoZW4gdGhhdCdsbCBwdXQgdGhlIGh1cnQgb24gdGhlIHdob2xlIG9wZXJhdGlvbi4gIElmIHlvdVxuLy8gbmV2ZXIgY2FsbCBjYigpLCB0aGVuIHlvdSdsbCBuZXZlciBnZXQgYW5vdGhlciBjaHVuay5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRocm93IG5ldyBFcnJvcignX3RyYW5zZm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuVHJhbnNmb3JtLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB2YXIgdHMgPSB0aGlzLl90cmFuc2Zvcm1TdGF0ZTtcbiAgdHMud3JpdGVjYiA9IGNiO1xuICB0cy53cml0ZWNodW5rID0gY2h1bms7XG4gIHRzLndyaXRlZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgaWYgKCF0cy50cmFuc2Zvcm1pbmcpIHtcbiAgICB2YXIgcnMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmICh0cy5uZWVkVHJhbnNmb3JtIHx8IHJzLm5lZWRSZWFkYWJsZSB8fCBycy5sZW5ndGggPCBycy5oaWdoV2F0ZXJNYXJrKSB0aGlzLl9yZWFkKHJzLmhpZ2hXYXRlck1hcmspO1xuICB9XG59O1xuXG4vLyBEb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBhcmdzIGFyZSBoZXJlLlxuLy8gX3RyYW5zZm9ybSBkb2VzIGFsbCB0aGUgd29yay5cbi8vIFRoYXQgd2UgZ290IGhlcmUgbWVhbnMgdGhhdCB0aGUgcmVhZGFibGUgc2lkZSB3YW50cyBtb3JlIGRhdGEuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIHRzID0gdGhpcy5fdHJhbnNmb3JtU3RhdGU7XG5cbiAgaWYgKHRzLndyaXRlY2h1bmsgIT09IG51bGwgJiYgdHMud3JpdGVjYiAmJiAhdHMudHJhbnNmb3JtaW5nKSB7XG4gICAgdHMudHJhbnNmb3JtaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl90cmFuc2Zvcm0odHMud3JpdGVjaHVuaywgdHMud3JpdGVlbmNvZGluZywgdHMuYWZ0ZXJUcmFuc2Zvcm0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG1hcmsgdGhhdCB3ZSBuZWVkIGEgdHJhbnNmb3JtLCBzbyB0aGF0IGFueSBkYXRhIHRoYXQgY29tZXMgaW5cbiAgICAvLyB3aWxsIGdldCBwcm9jZXNzZWQsIG5vdyB0aGF0IHdlJ3ZlIGFza2VkIGZvciBpdC5cbiAgICB0cy5uZWVkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZG9uZShzdHJlYW0sIGVyLCBkYXRhKSB7XG4gIGlmIChlcikgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcblxuICBpZiAoZGF0YSAhPT0gbnVsbCAmJiBkYXRhICE9PSB1bmRlZmluZWQpIHN0cmVhbS5wdXNoKGRhdGEpO1xuXG4gIC8vIGlmIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgd3JpdGUgYnVmZmVyLCB0aGVuIHRoYXQgbWVhbnNcbiAgLy8gdGhhdCBub3RoaW5nIG1vcmUgd2lsbCBldmVyIGJlIHByb3ZpZGVkXG4gIHZhciB3cyA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHRzID0gc3RyZWFtLl90cmFuc2Zvcm1TdGF0ZTtcblxuICBpZiAod3MubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCcpO1xuXG4gIGlmICh0cy50cmFuc2Zvcm1pbmcpIHRocm93IG5ldyBFcnJvcignQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZycpO1xuXG4gIHJldHVybiBzdHJlYW0ucHVzaChudWxsKTtcbn0iLCIvLyBBIGJpdCBzaW1wbGVyIHRoYW4gcmVhZGFibGUgc3RyZWFtcy5cbi8vIEltcGxlbWVudCBhbiBhc3luYyAuX3dyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLCBhbmQgaXQnbGwgaGFuZGxlIGFsbFxuLy8gdGhlIGRyYWluIGV2ZW50IGVtaXNzaW9uIGFuZCBidWZmZXJpbmcuXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBXcml0YWJsZTtcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBwcm9jZXNzTmV4dFRpY2sgPSByZXF1aXJlKCdwcm9jZXNzLW5leHRpY2stYXJncycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYXN5bmNXcml0ZSA9ICFwcm9jZXNzLmJyb3dzZXIgJiYgWyd2MC4xMCcsICd2MC45LiddLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDAsIDUpKSA+IC0xID8gc2V0SW1tZWRpYXRlIDogcHJvY2Vzc05leHRUaWNrO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgRHVwbGV4O1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbldyaXRhYmxlLldyaXRhYmxlU3RhdGUgPSBXcml0YWJsZVN0YXRlO1xuXG4vKjxyZXBsYWNlbWVudD4qL1xudmFyIHV0aWwgPSByZXF1aXJlKCdjb3JlLXV0aWwtaXMnKTtcbnV0aWwuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbi8qPHJlcGxhY2VtZW50PiovXG52YXIgaW50ZXJuYWxVdGlsID0ge1xuICBkZXByZWNhdGU6IHJlcXVpcmUoJ3V0aWwtZGVwcmVjYXRlJylcbn07XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBTdHJlYW0gPSByZXF1aXJlKCcuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJ1ZmZlcjtcbi8qPHJlcGxhY2VtZW50PiovXG52YXIgYnVmZmVyU2hpbSA9IHJlcXVpcmUoJ2J1ZmZlci1zaGltcycpO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnV0aWwuaW5oZXJpdHMoV3JpdGFibGUsIFN0cmVhbSk7XG5cbmZ1bmN0aW9uIG5vcCgpIHt9XG5cbmZ1bmN0aW9uIFdyaXRlUmVxKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5jaHVuayA9IGNodW5rO1xuICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gIHRoaXMuY2FsbGJhY2sgPSBjYjtcbiAgdGhpcy5uZXh0ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0pIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBvYmplY3Qgc3RyZWFtIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBzdHJlYW1cbiAgLy8gY29udGFpbnMgYnVmZmVycyBvciBvYmplY3RzLlxuICB0aGlzLm9iamVjdE1vZGUgPSAhIW9wdGlvbnMub2JqZWN0TW9kZTtcblxuICBpZiAoc3RyZWFtIGluc3RhbmNlb2YgRHVwbGV4KSB0aGlzLm9iamVjdE1vZGUgPSB0aGlzLm9iamVjdE1vZGUgfHwgISFvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZTtcblxuICAvLyB0aGUgcG9pbnQgYXQgd2hpY2ggd3JpdGUoKSBzdGFydHMgcmV0dXJuaW5nIGZhbHNlXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgdGhhdCB3ZSBhbHdheXMgcmV0dXJuIGZhbHNlIGlmXG4gIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGlzIG5vdCBmbHVzaGVkIGltbWVkaWF0ZWx5IG9uIHdyaXRlKClcbiAgdmFyIGh3bSA9IG9wdGlvbnMuaGlnaFdhdGVyTWFyaztcbiAgdmFyIGRlZmF1bHRId20gPSB0aGlzLm9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDtcbiAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaHdtIHx8IGh3bSA9PT0gMCA/IGh3bSA6IGRlZmF1bHRId207XG5cbiAgLy8gY2FzdCB0byBpbnRzLlxuICB0aGlzLmhpZ2hXYXRlck1hcmsgPSB+fnRoaXMuaGlnaFdhdGVyTWFyaztcblxuICAvLyBkcmFpbiBldmVudCBmbGFnLlxuICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlO1xuICAvLyBhdCB0aGUgc3RhcnQgb2YgY2FsbGluZyBlbmQoKVxuICB0aGlzLmVuZGluZyA9IGZhbHNlO1xuICAvLyB3aGVuIGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYW5kIHJldHVybmVkXG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgLy8gd2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkXG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcblxuICAvLyBzaG91bGQgd2UgZGVjb2RlIHN0cmluZ3MgaW50byBidWZmZXJzIGJlZm9yZSBwYXNzaW5nIHRvIF93cml0ZT9cbiAgLy8gdGhpcyBpcyBoZXJlIHNvIHRoYXQgc29tZSBub2RlLWNvcmUgc3RyZWFtcyBjYW4gb3B0aW1pemUgc3RyaW5nXG4gIC8vIGhhbmRsaW5nIGF0IGEgbG93ZXIgbGV2ZWwuXG4gIHZhciBub0RlY29kZSA9IG9wdGlvbnMuZGVjb2RlU3RyaW5ncyA9PT0gZmFsc2U7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICd1dGY4JztcblxuICAvLyBub3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIHNlZSB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3cml0ZS5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7XG5cbiAgLy8gd2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbFxuICB0aGlzLmNvcmtlZCA9IDA7XG5cbiAgLy8gYSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgb253cml0ZSBjYiBpcyBjYWxsZWQgaW1tZWRpYXRlbHksXG4gIC8vIG9yIG9uIGEgbGF0ZXIgdGljay4gIFdlIHNldCB0aGlzIHRvIHRydWUgYXQgZmlyc3QsIGJlY2F1c2UgYW55XG4gIC8vIGFjdGlvbnMgdGhhdCBzaG91bGRuJ3QgaGFwcGVuIHVudGlsIFwibGF0ZXJcIiBzaG91bGQgZ2VuZXJhbGx5IGFsc29cbiAgLy8gbm90IGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIGNhbGwuXG4gIHRoaXMuc3luYyA9IHRydWU7XG5cbiAgLy8gYSBmbGFnIHRvIGtub3cgaWYgd2UncmUgcHJvY2Vzc2luZyBwcmV2aW91c2x5IGJ1ZmZlcmVkIGl0ZW1zLCB3aGljaFxuICAvLyBtYXkgY2FsbCB0aGUgX3dyaXRlKCkgY2FsbGJhY2sgaW4gdGhlIHNhbWUgdGljaywgc28gdGhhdCB3ZSBkb24ndFxuICAvLyBlbmQgdXAgaW4gYW4gb3ZlcmxhcHBlZCBvbndyaXRlIHNpdHVhdGlvbi5cbiAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG5cbiAgLy8gdGhlIGNhbGxiYWNrIHRoYXQncyBwYXNzZWQgdG8gX3dyaXRlKGNodW5rLGNiKVxuICB0aGlzLm9ud3JpdGUgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBvbndyaXRlKHN0cmVhbSwgZXIpO1xuICB9O1xuXG4gIC8vIHRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLGVuY29kaW5nLGNiKVxuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuXG4gIC8vIHRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cbiAgdGhpcy53cml0ZWxlbiA9IDA7XG5cbiAgdGhpcy5idWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuICB0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3QgPSBudWxsO1xuXG4gIC8vIG51bWJlciBvZiBwZW5kaW5nIHVzZXItc3VwcGxpZWQgd3JpdGUgY2FsbGJhY2tzXG4gIC8vIHRoaXMgbXVzdCBiZSAwIGJlZm9yZSAnZmluaXNoJyBjYW4gYmUgZW1pdHRlZFxuICB0aGlzLnBlbmRpbmdjYiA9IDA7XG5cbiAgLy8gZW1pdCBwcmVmaW5pc2ggaWYgdGhlIG9ubHkgdGhpbmcgd2UncmUgd2FpdGluZyBmb3IgaXMgX3dyaXRlIGNic1xuICAvLyBUaGlzIGlzIHJlbGV2YW50IGZvciBzeW5jaHJvbm91cyBUcmFuc2Zvcm0gc3RyZWFtc1xuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW5cbiAgdGhpcy5lcnJvckVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBjb3VudCBidWZmZXJlZCByZXF1ZXN0c1xuICB0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAvLyBhbGxvY2F0ZSB0aGUgZmlyc3QgQ29ya2VkUmVxdWVzdCwgdGhlcmUgaXMgYWx3YXlzXG4gIC8vIG9uZSBhbGxvY2F0ZWQgYW5kIGZyZWUgdG8gdXNlLCBhbmQgd2UgbWFpbnRhaW4gYXQgbW9zdCB0d29cbiAgdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBuZXcgQ29ya2VkUmVxdWVzdCh0aGlzKTtcbn1cblxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICB2YXIgY3VycmVudCA9IHRoaXMuYnVmZmVyZWRSZXF1ZXN0O1xuICB2YXIgb3V0ID0gW107XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgb3V0LnB1c2goY3VycmVudCk7XG4gICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgfVxuICByZXR1cm4gb3V0O1xufTtcblxuKGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUsICdidWZmZXInLCB7XG4gICAgICBnZXQ6IGludGVybmFsVXRpbC5kZXByZWNhdGUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXIoKTtcbiAgICAgIH0sICdfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciAnICsgJ2luc3RlYWQuJylcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykge31cbn0pKCk7XG5cbi8vIFRlc3QgX3dyaXRhYmxlU3RhdGUgZm9yIGluaGVyaXRhbmNlIHRvIGFjY291bnQgZm9yIER1cGxleCBzdHJlYW1zLFxuLy8gd2hvc2UgcHJvdG90eXBlIGNoYWluIG9ubHkgcG9pbnRzIHRvIFJlYWRhYmxlLlxudmFyIHJlYWxIYXNJbnN0YW5jZTtcbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5oYXNJbnN0YW5jZSAmJiB0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgcmVhbEhhc0luc3RhbmNlID0gRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV07XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXcml0YWJsZSwgU3ltYm9sLmhhc0luc3RhbmNlLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIGlmIChyZWFsSGFzSW5zdGFuY2UuY2FsbCh0aGlzLCBvYmplY3QpKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICByZWFsSGFzSW5zdGFuY2UgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIHRoaXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdyaXRhYmxlKG9wdGlvbnMpIHtcbiAgRHVwbGV4ID0gRHVwbGV4IHx8IHJlcXVpcmUoJy4vX3N0cmVhbV9kdXBsZXgnKTtcblxuICAvLyBXcml0YWJsZSBjdG9yIGlzIGFwcGxpZWQgdG8gRHVwbGV4ZXMsIHRvby5cbiAgLy8gYHJlYWxIYXNJbnN0YW5jZWAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdXNpbmcgcGxhaW4gYGluc3RhbmNlb2ZgXG4gIC8vIHdvdWxkIHJldHVybiBmYWxzZSwgYXMgbm8gYF93cml0YWJsZVN0YXRlYCBwcm9wZXJ0eSBpcyBhdHRhY2hlZC5cblxuICAvLyBUcnlpbmcgdG8gdXNlIHRoZSBjdXN0b20gYGluc3RhbmNlb2ZgIGZvciBXcml0YWJsZSBoZXJlIHdpbGwgYWxzbyBicmVhayB0aGVcbiAgLy8gTm9kZS5qcyBMYXp5VHJhbnNmb3JtIGltcGxlbWVudGF0aW9uLCB3aGljaCBoYXMgYSBub24tdHJpdmlhbCBnZXR0ZXIgZm9yXG4gIC8vIGBfd3JpdGFibGVTdGF0ZWAgdGhhdCB3b3VsZCBsZWFkIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgaWYgKCFyZWFsSGFzSW5zdGFuY2UuY2FsbChXcml0YWJsZSwgdGhpcykgJiYgISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkge1xuICAgIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG4gIH1cblxuICB0aGlzLl93cml0YWJsZVN0YXRlID0gbmV3IFdyaXRhYmxlU3RhdGUob3B0aW9ucywgdGhpcyk7XG5cbiAgLy8gbGVnYWN5LlxuICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy53cml0ZSA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGUgPSBvcHRpb25zLndyaXRlO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRldiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fd3JpdGV2ID0gb3B0aW9ucy53cml0ZXY7XG4gIH1cblxuICBTdHJlYW0uY2FsbCh0aGlzKTtcbn1cblxuLy8gT3RoZXJ3aXNlIHBlb3BsZSBjYW4gcGlwZSBXcml0YWJsZSBzdHJlYW1zLCB3aGljaCBpcyBqdXN0IHdyb25nLlxuV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ0Nhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUnKSk7XG59O1xuXG5mdW5jdGlvbiB3cml0ZUFmdGVyRW5kKHN0cmVhbSwgY2IpIHtcbiAgdmFyIGVyID0gbmV3IEVycm9yKCd3cml0ZSBhZnRlciBlbmQnKTtcbiAgLy8gVE9ETzogZGVmZXIgZXJyb3IgZXZlbnRzIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlLCBub3QganVzdCB0aGUgY2JcbiAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXIpO1xuICBwcm9jZXNzTmV4dFRpY2soY2IsIGVyKTtcbn1cblxuLy8gQ2hlY2tzIHRoYXQgYSB1c2VyLXN1cHBsaWVkIGNodW5rIGlzIHZhbGlkLCBlc3BlY2lhbGx5IGZvciB0aGUgcGFydGljdWxhclxuLy8gbW9kZSB0aGUgc3RyZWFtIGlzIGluLiBDdXJyZW50bHkgdGhpcyBtZWFucyB0aGF0IGBudWxsYCBpcyBuZXZlciBhY2NlcHRlZFxuLy8gYW5kIHVuZGVmaW5lZC9ub24tc3RyaW5nIHZhbHVlcyBhcmUgb25seSBhbGxvd2VkIGluIG9iamVjdCBtb2RlLlxuZnVuY3Rpb24gdmFsaWRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgY2IpIHtcbiAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgdmFyIGVyID0gZmFsc2U7XG5cbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgZXIgPSBuZXcgVHlwZUVycm9yKCdNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbScpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycgJiYgY2h1bmsgIT09IHVuZGVmaW5lZCAmJiAhc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGVyID0gbmV3IFR5cGVFcnJvcignSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuaycpO1xuICB9XG4gIGlmIChlcikge1xuICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICBwcm9jZXNzTmV4dFRpY2soY2IsIGVyKTtcbiAgICB2YWxpZCA9IGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWxpZDtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcbiAgdmFyIHJldCA9IGZhbHNlO1xuICB2YXIgaXNCdWYgPSBCdWZmZXIuaXNCdWZmZXIoY2h1bmspO1xuXG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIGlmIChpc0J1ZikgZW5jb2RpbmcgPSAnYnVmZmVyJztlbHNlIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gc3RhdGUuZGVmYXVsdEVuY29kaW5nO1xuXG4gIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIGNiID0gbm9wO1xuXG4gIGlmIChzdGF0ZS5lbmRlZCkgd3JpdGVBZnRlckVuZCh0aGlzLCBjYik7ZWxzZSBpZiAoaXNCdWYgfHwgdmFsaWRDaHVuayh0aGlzLCBzdGF0ZSwgY2h1bmssIGNiKSkge1xuICAgIHN0YXRlLnBlbmRpbmdjYisrO1xuICAgIHJldCA9IHdyaXRlT3JCdWZmZXIodGhpcywgc3RhdGUsIGlzQnVmLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBzdGF0ZS5jb3JrZWQrKztcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHN0YXRlLmNvcmtlZCkge1xuICAgIHN0YXRlLmNvcmtlZC0tO1xuXG4gICAgaWYgKCFzdGF0ZS53cml0aW5nICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmZpbmlzaGVkICYmICFzdGF0ZS5idWZmZXJQcm9jZXNzaW5nICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCkgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICB9XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nID0gZnVuY3Rpb24gc2V0RGVmYXVsdEVuY29kaW5nKGVuY29kaW5nKSB7XG4gIC8vIG5vZGU6OlBhcnNlRW5jb2RpbmcoKSByZXF1aXJlcyBsb3dlciBjYXNlLlxuICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykgZW5jb2RpbmcgPSBlbmNvZGluZy50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIShbJ2hleCcsICd1dGY4JywgJ3V0Zi04JywgJ2FzY2lpJywgJ2JpbmFyeScsICdiYXNlNjQnLCAndWNzMicsICd1Y3MtMicsICd1dGYxNmxlJywgJ3V0Zi0xNmxlJywgJ3JhdyddLmluZGV4T2YoKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKCkpID4gLTEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpO1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIGRlY29kZUNodW5rKHN0YXRlLCBjaHVuaywgZW5jb2RpbmcpIHtcbiAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlICYmIHN0YXRlLmRlY29kZVN0cmluZ3MgIT09IGZhbHNlICYmIHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICBjaHVuayA9IGJ1ZmZlclNoaW0uZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cblxuLy8gaWYgd2UncmUgYWxyZWFkeSB3cml0aW5nIHNvbWV0aGluZywgdGhlbiBqdXN0IHB1dCB0aGlzXG4vLyBpbiB0aGUgcXVldWUsIGFuZCB3YWl0IG91ciB0dXJuLiAgT3RoZXJ3aXNlLCBjYWxsIF93cml0ZVxuLy8gSWYgd2UgcmV0dXJuIGZhbHNlLCB0aGVuIHdlIG5lZWQgYSBkcmFpbiBldmVudCwgc28gc2V0IHRoYXQgZmxhZy5cbmZ1bmN0aW9uIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgaXNCdWYsIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgaWYgKCFpc0J1Zikge1xuICAgIGNodW5rID0gZGVjb2RlQ2h1bmsoc3RhdGUsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIGVuY29kaW5nID0gJ2J1ZmZlcic7XG4gIH1cbiAgdmFyIGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gIHN0YXRlLmxlbmd0aCArPSBsZW47XG5cbiAgdmFyIHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIC8vIHdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuICBpZiAoIXJldCkgc3RhdGUubmVlZERyYWluID0gdHJ1ZTtcblxuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQpIHtcbiAgICB2YXIgbGFzdCA9IHN0YXRlLmxhc3RCdWZmZXJlZFJlcXVlc3Q7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG5ldyBXcml0ZVJlcShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgICBpZiAobGFzdCkge1xuICAgICAgbGFzdC5uZXh0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtcbiAgICB9XG4gICAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQgKz0gMTtcbiAgfSBlbHNlIHtcbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCB3cml0ZXYsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBzdGF0ZS53cml0ZWxlbiA9IGxlbjtcbiAgc3RhdGUud3JpdGVjYiA9IGNiO1xuICBzdGF0ZS53cml0aW5nID0gdHJ1ZTtcbiAgc3RhdGUuc3luYyA9IHRydWU7XG4gIGlmICh3cml0ZXYpIHN0cmVhbS5fd3JpdGV2KGNodW5rLCBzdGF0ZS5vbndyaXRlKTtlbHNlIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKTtcbiAgc3RhdGUuc3luYyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgc3luYywgZXIsIGNiKSB7XG4gIC0tc3RhdGUucGVuZGluZ2NiO1xuICBpZiAoc3luYykgcHJvY2Vzc05leHRUaWNrKGNiLCBlcik7ZWxzZSBjYihlcik7XG5cbiAgc3RyZWFtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWU7XG4gIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVyKTtcbn1cblxuZnVuY3Rpb24gb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKSB7XG4gIHN0YXRlLndyaXRpbmcgPSBmYWxzZTtcbiAgc3RhdGUud3JpdGVjYiA9IG51bGw7XG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlbjtcbiAgc3RhdGUud3JpdGVsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgdmFyIHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICB2YXIgc3luYyA9IHN0YXRlLnN5bmM7XG4gIHZhciBjYiA9IHN0YXRlLndyaXRlY2I7XG5cbiAgb253cml0ZVN0YXRlVXBkYXRlKHN0YXRlKTtcblxuICBpZiAoZXIpIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBzeW5jLCBlciwgY2IpO2Vsc2Uge1xuICAgIC8vIENoZWNrIGlmIHdlJ3JlIGFjdHVhbGx5IHJlYWR5IHRvIGZpbmlzaCwgYnV0IGRvbid0IGVtaXQgeWV0XG4gICAgdmFyIGZpbmlzaGVkID0gbmVlZEZpbmlzaChzdGF0ZSk7XG5cbiAgICBpZiAoIWZpbmlzaGVkICYmICFzdGF0ZS5jb3JrZWQgJiYgIXN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgJiYgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0KSB7XG4gICAgICBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3luYykge1xuICAgICAgLyo8cmVwbGFjZW1lbnQ+Ki9cbiAgICAgIGFzeW5jV3JpdGUoYWZ0ZXJXcml0ZSwgc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKTtcbiAgICAgIC8qPC9yZXBsYWNlbWVudD4qL1xuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGZpbmlzaGVkLCBjYik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmluaXNoZWQsIGNiKSB7XG4gIGlmICghZmluaXNoZWQpIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKTtcbiAgc3RhdGUucGVuZGluZ2NiLS07XG4gIGNiKCk7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG4vLyBNdXN0IGZvcmNlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBuZXh0VGljaywgc28gdGhhdCB3ZSBkb24ndFxuLy8gZW1pdCAnZHJhaW4nIGJlZm9yZSB0aGUgd3JpdGUoKSBjb25zdW1lciBnZXRzIHRoZSAnZmFsc2UnIHJldHVyblxuLy8gdmFsdWUsIGFuZCBoYXMgYSBjaGFuY2UgdG8gYXR0YWNoIGEgJ2RyYWluJyBsaXN0ZW5lci5cbmZ1bmN0aW9uIG9ud3JpdGVEcmFpbihzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUubmVlZERyYWluKSB7XG4gICAgc3RhdGUubmVlZERyYWluID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoJ2RyYWluJyk7XG4gIH1cbn1cblxuLy8gaWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXRcbmZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IHRydWU7XG4gIHZhciBlbnRyeSA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdDtcblxuICBpZiAoc3RyZWFtLl93cml0ZXYgJiYgZW50cnkgJiYgZW50cnkubmV4dCkge1xuICAgIC8vIEZhc3QgY2FzZSwgd3JpdGUgZXZlcnl0aGluZyB1c2luZyBfd3JpdGV2KClcbiAgICB2YXIgbCA9IHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50O1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobCk7XG4gICAgdmFyIGhvbGRlciA9IHN0YXRlLmNvcmtlZFJlcXVlc3RzRnJlZTtcbiAgICBob2xkZXIuZW50cnkgPSBlbnRyeTtcblxuICAgIHZhciBjb3VudCA9IDA7XG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICBidWZmZXJbY291bnRdID0gZW50cnk7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cblxuICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBidWZmZXIsICcnLCBob2xkZXIuZmluaXNoKTtcblxuICAgIC8vIGRvV3JpdGUgaXMgYWxtb3N0IGFsd2F5cyBhc3luYywgZGVmZXIgdGhlc2UgdG8gc2F2ZSBhIGJpdCBvZiB0aW1lXG4gICAgLy8gYXMgdGhlIGhvdCBwYXRoIGVuZHMgd2l0aCBkb1dyaXRlXG4gICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgc3RhdGUubGFzdEJ1ZmZlcmVkUmVxdWVzdCA9IG51bGw7XG4gICAgaWYgKGhvbGRlci5uZXh0KSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBob2xkZXIubmV4dDtcbiAgICAgIGhvbGRlci5uZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlID0gbmV3IENvcmtlZFJlcXVlc3Qoc3RhdGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBTbG93IGNhc2UsIHdyaXRlIGNodW5rcyBvbmUtYnktb25lXG4gICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICB2YXIgY2h1bmsgPSBlbnRyeS5jaHVuaztcbiAgICAgIHZhciBlbmNvZGluZyA9IGVudHJ5LmVuY29kaW5nO1xuICAgICAgdmFyIGNiID0gZW50cnkuY2FsbGJhY2s7XG4gICAgICB2YXIgbGVuID0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG5cbiAgICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgZmFsc2UsIGxlbiwgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAvLyBpZiB3ZSBkaWRuJ3QgY2FsbCB0aGUgb253cml0ZSBpbW1lZGlhdGVseSwgdGhlblxuICAgICAgLy8gaXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXQgZG9lcy5cbiAgICAgIC8vIGFsc28sIHRoYXQgbWVhbnMgdGhhdCB0aGUgY2h1bmsgYW5kIGNiIGFyZSBjdXJyZW50bHlcbiAgICAgIC8vIGJlaW5nIHByb2Nlc3NlZCwgc28gbW92ZSB0aGUgYnVmZmVyIGNvdW50ZXIgcGFzdCB0aGVtLlxuICAgICAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5ID09PSBudWxsKSBzdGF0ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0ID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdENvdW50ID0gMDtcbiAgc3RhdGUuYnVmZmVyZWRSZXF1ZXN0ID0gZW50cnk7XG4gIHN0YXRlLmJ1ZmZlclByb2Nlc3NpbmcgPSBmYWxzZTtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG5ldyBFcnJvcignX3dyaXRlKCkgaXMgbm90IGltcGxlbWVudGVkJykpO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLl93cml0ZXYgPSBudWxsO1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodHlwZW9mIGNodW5rID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGNodW5rICE9PSBudWxsICYmIGNodW5rICE9PSB1bmRlZmluZWQpIHRoaXMud3JpdGUoY2h1bmssIGVuY29kaW5nKTtcblxuICAvLyAuZW5kKCkgZnVsbHkgdW5jb3Jrc1xuICBpZiAoc3RhdGUuY29ya2VkKSB7XG4gICAgc3RhdGUuY29ya2VkID0gMTtcbiAgICB0aGlzLnVuY29yaygpO1xuICB9XG5cbiAgLy8gaWdub3JlIHVubmVjZXNzYXJ5IGVuZCgpIGNhbGxzLlxuICBpZiAoIXN0YXRlLmVuZGluZyAmJiAhc3RhdGUuZmluaXNoZWQpIGVuZFdyaXRhYmxlKHRoaXMsIHN0YXRlLCBjYik7XG59O1xuXG5mdW5jdGlvbiBuZWVkRmluaXNoKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5lbmRpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmIHN0YXRlLmJ1ZmZlcmVkUmVxdWVzdCA9PT0gbnVsbCAmJiAhc3RhdGUuZmluaXNoZWQgJiYgIXN0YXRlLndyaXRpbmc7XG59XG5cbmZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7XG4gIGlmICghc3RhdGUucHJlZmluaXNoZWQpIHtcbiAgICBzdGF0ZS5wcmVmaW5pc2hlZCA9IHRydWU7XG4gICAgc3RyZWFtLmVtaXQoJ3ByZWZpbmlzaCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpIHtcbiAgdmFyIG5lZWQgPSBuZWVkRmluaXNoKHN0YXRlKTtcbiAgaWYgKG5lZWQpIHtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwKSB7XG4gICAgICBwcmVmaW5pc2goc3RyZWFtLCBzdGF0ZSk7XG4gICAgICBzdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgICBzdHJlYW0uZW1pdCgnZmluaXNoJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5lZWQ7XG59XG5cbmZ1bmN0aW9uIGVuZFdyaXRhYmxlKHN0cmVhbSwgc3RhdGUsIGNiKSB7XG4gIHN0YXRlLmVuZGluZyA9IHRydWU7XG4gIGZpbmlzaE1heWJlKHN0cmVhbSwgc3RhdGUpO1xuICBpZiAoY2IpIHtcbiAgICBpZiAoc3RhdGUuZmluaXNoZWQpIHByb2Nlc3NOZXh0VGljayhjYik7ZWxzZSBzdHJlYW0ub25jZSgnZmluaXNoJywgY2IpO1xuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgc3RyZWFtLndyaXRhYmxlID0gZmFsc2U7XG59XG5cbi8vIEl0IHNlZW1zIGEgbGlua2VkIGxpc3QgYnV0IGl0IGlzIG5vdFxuLy8gdGhlcmUgd2lsbCBiZSBvbmx5IDIgb2YgdGhlc2UgZm9yIGVhY2ggc3RyZWFtXG5mdW5jdGlvbiBDb3JrZWRSZXF1ZXN0KHN0YXRlKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgdGhpcy5lbnRyeSA9IG51bGw7XG4gIHRoaXMuZmluaXNoID0gZnVuY3Rpb24gKGVycikge1xuICAgIHZhciBlbnRyeSA9IF90aGlzLmVudHJ5O1xuICAgIF90aGlzLmVudHJ5ID0gbnVsbDtcbiAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgIHZhciBjYiA9IGVudHJ5LmNhbGxiYWNrO1xuICAgICAgc3RhdGUucGVuZGluZ2NiLS07XG4gICAgICBjYihlcnIpO1xuICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgIH1cbiAgICBpZiAoc3RhdGUuY29ya2VkUmVxdWVzdHNGcmVlKSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dCA9IF90aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUgPSBfdGhpcztcbiAgICB9XG4gIH07XG59IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuLyo8cmVwbGFjZW1lbnQ+Ki9cbnZhciBidWZmZXJTaGltID0gcmVxdWlyZSgnYnVmZmVyLXNoaW1zJyk7XG4vKjwvcmVwbGFjZW1lbnQ+Ki9cblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJMaXN0O1xuXG5mdW5jdGlvbiBCdWZmZXJMaXN0KCkge1xuICB0aGlzLmhlYWQgPSBudWxsO1xuICB0aGlzLnRhaWwgPSBudWxsO1xuICB0aGlzLmxlbmd0aCA9IDA7XG59XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAodikge1xuICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IG51bGwgfTtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkgdGhpcy50YWlsLm5leHQgPSBlbnRyeTtlbHNlIHRoaXMuaGVhZCA9IGVudHJ5O1xuICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgKyt0aGlzLmxlbmd0aDtcbn07XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAodikge1xuICB2YXIgZW50cnkgPSB7IGRhdGE6IHYsIG5leHQ6IHRoaXMuaGVhZCB9O1xuICBpZiAodGhpcy5sZW5ndGggPT09IDApIHRoaXMudGFpbCA9IGVudHJ5O1xuICB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgKyt0aGlzLmxlbmd0aDtcbn07XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgdmFyIHJldCA9IHRoaXMuaGVhZC5kYXRhO1xuICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7ZWxzZSB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dDtcbiAgLS10aGlzLmxlbmd0aDtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkJ1ZmZlckxpc3QucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICB0aGlzLmxlbmd0aCA9IDA7XG59O1xuXG5CdWZmZXJMaXN0LnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gKHMpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIHZhciBwID0gdGhpcy5oZWFkO1xuICB2YXIgcmV0ID0gJycgKyBwLmRhdGE7XG4gIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgcmV0ICs9IHMgKyBwLmRhdGE7XG4gIH1yZXR1cm4gcmV0O1xufTtcblxuQnVmZmVyTGlzdC5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24gKG4pIHtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gYnVmZmVyU2hpbS5hbGxvYygwKTtcbiAgaWYgKHRoaXMubGVuZ3RoID09PSAxKSByZXR1cm4gdGhpcy5oZWFkLmRhdGE7XG4gIHZhciByZXQgPSBidWZmZXJTaGltLmFsbG9jVW5zYWZlKG4gPj4+IDApO1xuICB2YXIgcCA9IHRoaXMuaGVhZDtcbiAgdmFyIGkgPSAwO1xuICB3aGlsZSAocCkge1xuICAgIHAuZGF0YS5jb3B5KHJldCwgaSk7XG4gICAgaSArPSBwLmRhdGEubGVuZ3RoO1xuICAgIHAgPSBwLm5leHQ7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG52YXIgYnVmZmVyU2hpbSA9IHJlcXVpcmUoJ2J1ZmZlci1zaGltcycpO1xuXG52YXIgaXNFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nIHx8IGZ1bmN0aW9uIChlbmNvZGluZykge1xuICBlbmNvZGluZyA9ICcnICsgZW5jb2Rpbmc7XG4gIHN3aXRjaCAoZW5jb2RpbmcgJiYgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6Y2FzZSAndXRmOCc6Y2FzZSAndXRmLTgnOmNhc2UgJ2FzY2lpJzpjYXNlICdiaW5hcnknOmNhc2UgJ2Jhc2U2NCc6Y2FzZSAndWNzMic6Y2FzZSAndWNzLTInOmNhc2UgJ3V0ZjE2bGUnOmNhc2UgJ3V0Zi0xNmxlJzpjYXNlICdyYXcnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX25vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICBpZiAoIWVuYykgcmV0dXJuICd1dGY4JztcbiAgdmFyIHJldHJpZWQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmMpIHtcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gJ3V0ZjgnO1xuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuICd1dGYxNmxlJztcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gJ2xhdGluMSc7XG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGVuYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyZXRyaWVkKSByZXR1cm47IC8vIHVuZGVmaW5lZFxuICAgICAgICBlbmMgPSAoJycgKyBlbmMpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHJpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLy8gRG8gbm90IGNhY2hlIGBCdWZmZXIuaXNFbmNvZGluZ2Agd2hlbiBjaGVja2luZyBlbmNvZGluZyBuYW1lcyBhcyBzb21lXG4vLyBtb2R1bGVzIG1vbmtleS1wYXRjaCBpdCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgZW5jb2RpbmdzXG5mdW5jdGlvbiBub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgdmFyIG5lbmMgPSBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKTtcbiAgaWYgKHR5cGVvZiBuZW5jICE9PSAnc3RyaW5nJyAmJiAoQnVmZmVyLmlzRW5jb2RpbmcgPT09IGlzRW5jb2RpbmcgfHwgIWlzRW5jb2RpbmcoZW5jKSkpIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuYyk7XG4gIHJldHVybiBuZW5jIHx8IGVuYztcbn1cblxuLy8gU3RyaW5nRGVjb2RlciBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGVmZmljaWVudGx5IHNwbGl0dGluZyBhIHNlcmllcyBvZlxuLy8gYnVmZmVycyBpbnRvIGEgc2VyaWVzIG9mIEpTIHN0cmluZ3Mgd2l0aG91dCBicmVha2luZyBhcGFydCBtdWx0aS1ieXRlXG4vLyBjaGFyYWN0ZXJzLlxuZXhwb3J0cy5TdHJpbmdEZWNvZGVyID0gU3RyaW5nRGVjb2RlcjtcbmZ1bmN0aW9uIFN0cmluZ0RlY29kZXIoZW5jb2RpbmcpIHtcbiAgdGhpcy5lbmNvZGluZyA9IG5vcm1hbGl6ZUVuY29kaW5nKGVuY29kaW5nKTtcbiAgdmFyIG5iO1xuICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIHRoaXMudGV4dCA9IHV0ZjE2VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gdXRmMTZFbmQ7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1dGY4JzpcbiAgICAgIHRoaXMuZmlsbExhc3QgPSB1dGY4RmlsbExhc3Q7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgdGhpcy50ZXh0ID0gYmFzZTY0VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gYmFzZTY0RW5kO1xuICAgICAgbmIgPSAzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMud3JpdGUgPSBzaW1wbGVXcml0ZTtcbiAgICAgIHRoaXMuZW5kID0gc2ltcGxlRW5kO1xuICAgICAgcmV0dXJuO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAwO1xuICB0aGlzLmxhc3RUb3RhbCA9IDA7XG4gIHRoaXMubGFzdENoYXIgPSBidWZmZXJTaGltLmFsbG9jVW5zYWZlKG5iKTtcbn1cblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmIChidWYubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIHZhciByO1xuICB2YXIgaTtcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICByID0gdGhpcy5maWxsTGFzdChidWYpO1xuICAgIGlmIChyID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICBpID0gdGhpcy5sYXN0TmVlZDtcbiAgICB0aGlzLmxhc3ROZWVkID0gMDtcbiAgfSBlbHNlIHtcbiAgICBpID0gMDtcbiAgfVxuICBpZiAoaSA8IGJ1Zi5sZW5ndGgpIHJldHVybiByID8gciArIHRoaXMudGV4dChidWYsIGkpIDogdGhpcy50ZXh0KGJ1ZiwgaSk7XG4gIHJldHVybiByIHx8ICcnO1xufTtcblxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gdXRmOEVuZDtcblxuLy8gUmV0dXJucyBvbmx5IGNvbXBsZXRlIGNoYXJhY3RlcnMgaW4gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLnRleHQgPSB1dGY4VGV4dDtcblxuLy8gQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBwYXJ0aWFsIG5vbi1VVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlclxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZmlsbExhc3QgPSBmdW5jdGlvbiAoYnVmKSB7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59O1xuXG4vLyBDaGVja3MgdGhlIHR5cGUgb2YgYSBVVEYtOCBieXRlLCB3aGV0aGVyIGl0J3MgQVNDSUksIGEgbGVhZGluZyBieXRlLCBvciBhXG4vLyBjb250aW51YXRpb24gYnl0ZS5cbmZ1bmN0aW9uIHV0ZjhDaGVja0J5dGUoYnl0ZSkge1xuICBpZiAoYnl0ZSA8PSAweDdGKSByZXR1cm4gMDtlbHNlIGlmIChieXRlID4+IDUgPT09IDB4MDYpIHJldHVybiAyO2Vsc2UgaWYgKGJ5dGUgPj4gNCA9PT0gMHgwRSkgcmV0dXJuIDM7ZWxzZSBpZiAoYnl0ZSA+PiAzID09PSAweDFFKSByZXR1cm4gNDtcbiAgcmV0dXJuIC0xO1xufVxuXG4vLyBDaGVja3MgYXQgbW9zdCAzIGJ5dGVzIGF0IHRoZSBlbmQgb2YgYSBCdWZmZXIgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuXG4vLyBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyLiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzICgyLCAzLCBvciA0KVxuLy8gbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBVVEYtOCBjaGFyYWN0ZXIgKGlmIGFwcGxpY2FibGUpIGFyZSByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0luY29tcGxldGUoc2VsZiwgYnVmLCBpKSB7XG4gIHZhciBqID0gYnVmLmxlbmd0aCAtIDE7XG4gIGlmIChqIDwgaSkgcmV0dXJuIDA7XG4gIHZhciBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAxO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSkgcmV0dXJuIDA7XG4gIG5iID0gdXRmOENoZWNrQnl0ZShidWZbal0pO1xuICBpZiAobmIgPj0gMCkge1xuICAgIGlmIChuYiA+IDApIHNlbGYubGFzdE5lZWQgPSBuYiAtIDI7XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIGlmICgtLWogPCBpKSByZXR1cm4gMDtcbiAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkge1xuICAgICAgaWYgKG5iID09PSAyKSBuYiA9IDA7ZWxzZSBzZWxmLmxhc3ROZWVkID0gbmIgLSAzO1xuICAgIH1cbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vIFZhbGlkYXRlcyBhcyBtYW55IGNvbnRpbnVhdGlvbiBieXRlcyBmb3IgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciBhc1xuLy8gbmVlZGVkIG9yIGFyZSBhdmFpbGFibGUuIElmIHdlIHNlZSBhIG5vbi1jb250aW51YXRpb24gYnl0ZSB3aGVyZSB3ZSBleHBlY3Rcbi8vIG9uZSwgd2UgXCJyZXBsYWNlXCIgdGhlIHZhbGlkYXRlZCBjb250aW51YXRpb24gYnl0ZXMgd2UndmUgc2VlbiBzbyBmYXIgd2l0aFxuLy8gVVRGLTggcmVwbGFjZW1lbnQgY2hhcmFjdGVycyAoJ1xcdWZmZmQnKSwgdG8gbWF0Y2ggdjgncyBVVEYtOCBkZWNvZGluZ1xuLy8gYmVoYXZpb3IuIFRoZSBjb250aW51YXRpb24gYnl0ZSBjaGVjayBpcyBpbmNsdWRlZCB0aHJlZSB0aW1lcyBpbiB0aGUgY2FzZVxuLy8gd2hlcmUgYWxsIG9mIHRoZSBjb250aW51YXRpb24gYnl0ZXMgZm9yIGEgY2hhcmFjdGVyIGV4aXN0IGluIHRoZSBzYW1lIGJ1ZmZlci5cbi8vIEl0IGlzIGFsc28gZG9uZSB0aGlzIHdheSBhcyBhIHNsaWdodCBwZXJmb3JtYW5jZSBpbmNyZWFzZSBpbnN0ZWFkIG9mIHVzaW5nIGFcbi8vIGxvb3AuXG5mdW5jdGlvbiB1dGY4Q2hlY2tFeHRyYUJ5dGVzKHNlbGYsIGJ1ZiwgcCkge1xuICBpZiAoKGJ1ZlswXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgc2VsZi5sYXN0TmVlZCA9IDA7XG4gICAgcmV0dXJuICdcXHVmZmZkJy5yZXBlYXQocCk7XG4gIH1cbiAgaWYgKHNlbGYubGFzdE5lZWQgPiAxICYmIGJ1Zi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKChidWZbMV0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgc2VsZi5sYXN0TmVlZCA9IDE7XG4gICAgICByZXR1cm4gJ1xcdWZmZmQnLnJlcGVhdChwICsgMSk7XG4gICAgfVxuICAgIGlmIChzZWxmLmxhc3ROZWVkID4gMiAmJiBidWYubGVuZ3RoID4gMikge1xuICAgICAgaWYgKChidWZbMl0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgICBzZWxmLmxhc3ROZWVkID0gMjtcbiAgICAgICAgcmV0dXJuICdcXHVmZmZkJy5yZXBlYXQocCArIDIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBBdHRlbXB0cyB0byBjb21wbGV0ZSBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXIuXG5mdW5jdGlvbiB1dGY4RmlsbExhc3QoYnVmKSB7XG4gIHZhciBwID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICB2YXIgciA9IHV0ZjhDaGVja0V4dHJhQnl0ZXModGhpcywgYnVmLCBwKTtcbiAgaWYgKHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHI7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDtcbn1cblxuLy8gUmV0dXJucyBhbGwgY29tcGxldGUgVVRGLTggY2hhcmFjdGVycyBpbiBhIEJ1ZmZlci4gSWYgdGhlIEJ1ZmZlciBlbmRlZCBvbiBhXG4vLyBwYXJ0aWFsIGNoYXJhY3RlciwgdGhlIGNoYXJhY3RlcidzIGJ5dGVzIGFyZSBidWZmZXJlZCB1bnRpbCB0aGUgcmVxdWlyZWRcbi8vIG51bWJlciBvZiBieXRlcyBhcmUgYXZhaWxhYmxlLlxuZnVuY3Rpb24gdXRmOFRleHQoYnVmLCBpKSB7XG4gIHZhciB0b3RhbCA9IHV0ZjhDaGVja0luY29tcGxldGUodGhpcywgYnVmLCBpKTtcbiAgaWYgKCF0aGlzLmxhc3ROZWVkKSByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSk7XG4gIHRoaXMubGFzdFRvdGFsID0gdG90YWw7XG4gIHZhciBlbmQgPSBidWYubGVuZ3RoIC0gKHRvdGFsIC0gdGhpcy5sYXN0TmVlZCk7XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIDAsIGVuZCk7XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpLCBlbmQpO1xufVxuXG4vLyBGb3IgVVRGLTgsIGEgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGZvciBlYWNoIGJ1ZmZlcmVkIGJ5dGUgb2YgYSAocGFydGlhbClcbi8vIGNoYXJhY3RlciBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgb3V0cHV0LlxuZnVuY3Rpb24gdXRmOEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyAnXFx1ZmZmZCcucmVwZWF0KHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZCk7XG4gIHJldHVybiByO1xufVxuXG4vLyBVVEYtMTZMRSB0eXBpY2FsbHkgbmVlZHMgdHdvIGJ5dGVzIHBlciBjaGFyYWN0ZXIsIGJ1dCBldmVuIGlmIHdlIGhhdmUgYW4gZXZlblxuLy8gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSwgd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBlbmQgb24gYSBsZWFkaW5nL2hpZ2hcbi8vIHN1cnJvZ2F0ZS4gSW4gdGhhdCBjYXNlLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IHR3byBieXRlcyBpbiBvcmRlciB0b1xuLy8gZGVjb2RlIHRoZSBsYXN0IGNoYXJhY3RlciBwcm9wZXJseS5cbmZ1bmN0aW9uIHV0ZjE2VGV4dChidWYsIGkpIHtcbiAgaWYgKChidWYubGVuZ3RoIC0gaSkgJSAyID09PSAwKSB7XG4gICAgdmFyIHIgPSBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpKTtcbiAgICBpZiAocikge1xuICAgICAgdmFyIGMgPSByLmNoYXJDb2RlQXQoci5sZW5ndGggLSAxKTtcbiAgICAgIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REJGRikge1xuICAgICAgICB0aGlzLmxhc3ROZWVkID0gMjtcbiAgICAgICAgdGhpcy5sYXN0VG90YWwgPSA0O1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiByLnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDE7XG4gIHRoaXMubGFzdFRvdGFsID0gMjtcbiAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpLCBidWYubGVuZ3RoIC0gMSk7XG59XG5cbi8vIEZvciBVVEYtMTZMRSB3ZSBkbyBub3QgZXhwbGljaXRseSBhcHBlbmQgc3BlY2lhbCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIGlmIHdlXG4vLyBlbmQgb24gYSBwYXJ0aWFsIGNoYXJhY3Rlciwgd2Ugc2ltcGx5IGxldCB2OCBoYW5kbGUgdGhhdC5cbmZ1bmN0aW9uIHV0ZjE2RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgdmFyIGVuZCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgICByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ3V0ZjE2bGUnLCAwLCBlbmQpO1xuICB9XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRUZXh0KGJ1ZiwgaSkge1xuICB2YXIgbiA9IChidWYubGVuZ3RoIC0gaSkgJSAzO1xuICBpZiAobiA9PT0gMCkgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSk7XG4gIHRoaXMubGFzdE5lZWQgPSAzIC0gbjtcbiAgdGhpcy5sYXN0VG90YWwgPSAzO1xuICBpZiAobiA9PT0gMSkge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGksIGJ1Zi5sZW5ndGggLSBuKTtcbn1cblxuZnVuY3Rpb24gYmFzZTY0RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ2Jhc2U2NCcsIDAsIDMgLSB0aGlzLmxhc3ROZWVkKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFBhc3MgYnl0ZXMgb24gdGhyb3VnaCBmb3Igc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIChlLmcuIGFzY2lpLCBsYXRpbjEsIGhleClcbmZ1bmN0aW9uIHNpbXBsZVdyaXRlKGJ1Zikge1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xufVxuXG5mdW5jdGlvbiBzaW1wbGVFbmQoYnVmKSB7XG4gIHJldHVybiBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpLlBhc3NUaHJvdWdoXG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzJyk7XG5leHBvcnRzLlN0cmVhbSA9IGV4cG9ydHM7XG5leHBvcnRzLlJlYWRhYmxlID0gZXhwb3J0cztcbmV4cG9ydHMuV3JpdGFibGUgPSByZXF1aXJlKCcuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzJyk7XG5leHBvcnRzLkR1cGxleCA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fZHVwbGV4LmpzJyk7XG5leHBvcnRzLlRyYW5zZm9ybSA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzJyk7XG5leHBvcnRzLlBhc3NUaHJvdWdoID0gcmVxdWlyZSgnLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcycpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3JlYWRhYmxlJykuVHJhbnNmb3JtXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL19zdHJlYW1fd3JpdGFibGUuanMnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNvcmUgPSByZXF1aXJlKCcuLi8nKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnbG9kYXNoL2lzQXJyYXknKSxcbiAgICBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnbG9kYXNoL2lzRnVuY3Rpb24nKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCdsb2Rhc2gvaXNPYmplY3RMaWtlJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXG4gICAgdmFyIGVycm9yVGV4dCA9ICdQbGVhc2UgdmVyaWZ5IG9wdGlvbnMnOyAvLyBGb3IgYmV0dGVyIG1pbmlmaWNhdGlvbiBiZWNhdXNlIHRoaXMgc3RyaW5nIGlzIHJlcGVhdGluZ1xuXG4gICAgaWYgKCFpc09iamVjdExpa2Uob3B0aW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnJvclRleHQpO1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbihvcHRpb25zLnJlcXVlc3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3JUZXh0ICsgJy5yZXF1ZXN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0FycmF5KG9wdGlvbnMuZXhwb3NlKSB8fCBvcHRpb25zLmV4cG9zZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnJvclRleHQgKyAnLmV4cG9zZScpO1xuICAgIH1cblxuXG4gICAgdmFyIHBsdW1iaW5nID0gY29yZSh7XG4gICAgICAgIFByb21pc2VJbXBsOiBvcHRpb25zLlByb21pc2VJbXBsLFxuICAgICAgICBjb25zdHJ1Y3Rvck1peGluOiBvcHRpb25zLmNvbnN0cnVjdG9yTWl4aW5cbiAgICB9KTtcblxuXG4gICAgLy8gSW50ZXJjZXB0aW5nIFJlcXVlc3QncyBpbml0IG1ldGhvZFxuXG4gICAgdmFyIG9yaWdpbmFsSW5pdCA9IG9wdGlvbnMucmVxdWVzdC5SZXF1ZXN0LnByb3RvdHlwZS5pbml0O1xuXG4gICAgb3B0aW9ucy5yZXF1ZXN0LlJlcXVlc3QucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBSUCRpbml0SW50ZXJjZXB0b3IocmVxdWVzdE9wdGlvbnMpIHtcblxuICAgICAgICAvLyBJbml0IG1heSBiZSBjYWxsZWQgYWdhaW4gLSBjdXJyZW50bHkgaW4gY2FzZSBvZiByZWRpcmVjdHNcbiAgICAgICAgaWYgKGlzT2JqZWN0TGlrZShyZXF1ZXN0T3B0aW9ucykgJiYgIXRoaXMuX2NhbGxiYWNrICYmICF0aGlzLl9ycF9wcm9taXNlKSB7XG5cbiAgICAgICAgICAgIHBsdW1iaW5nLmluaXQuY2FsbCh0aGlzLCByZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnaW5hbEluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIH07XG5cblxuICAgIC8vIEV4cG9zaW5nIHRoZSBQcm9taXNlIGNhcGFiaWxpdGllc1xuXG4gICAgdmFyIHRoZW5FeHBvc2VkID0gZmFsc2U7XG4gICAgZm9yICggdmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5leHBvc2UubGVuZ3RoOyBpKz0xICkge1xuXG4gICAgICAgIHZhciBtZXRob2QgPSBvcHRpb25zLmV4cG9zZVtpXTtcblxuICAgICAgICBwbHVtYmluZ1sgbWV0aG9kID09PSAncHJvbWlzZScgPyAnZXhwb3NlUHJvbWlzZScgOiAnZXhwb3NlUHJvbWlzZU1ldGhvZCcgXShcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdWVzdC5SZXF1ZXN0LnByb3RvdHlwZSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAnX3JwX3Byb21pc2UnLFxuICAgICAgICAgICAgbWV0aG9kXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3RoZW4nKSB7XG4gICAgICAgICAgICB0aGVuRXhwb3NlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGlmICghdGhlbkV4cG9zZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgZXhwb3NlIFwidGhlblwiJyk7XG4gICAgfVxuXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5cbmZ1bmN0aW9uIFJlcXVlc3RFcnJvcihjYXVzZSwgb3B0aW9ucywgcmVzcG9uc2UpIHtcblxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0RXJyb3InO1xuICAgIHRoaXMubWVzc2FnZSA9IFN0cmluZyhjYXVzZSk7XG4gICAgdGhpcy5jYXVzZSA9IGNhdXNlO1xuICAgIHRoaXMuZXJyb3IgPSBjYXVzZTsgLy8gbGVnYWN5IGF0dHJpYnV0ZVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7IC8vIHJlcXVpcmVkIGZvciBub24tVjggZW52aXJvbm1lbnRzXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMpO1xuICAgIH1cblxufVxuUmVxdWVzdEVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblJlcXVlc3RFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZXF1ZXN0RXJyb3I7XG5cblxuZnVuY3Rpb24gU3RhdHVzQ29kZUVycm9yKHN0YXR1c0NvZGUsIGJvZHksIG9wdGlvbnMsIHJlc3BvbnNlKSB7XG5cbiAgICB0aGlzLm5hbWUgPSAnU3RhdHVzQ29kZUVycm9yJztcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICAgIHRoaXMubWVzc2FnZSA9IHN0YXR1c0NvZGUgKyAnIC0gJyArIChKU09OICYmIEpTT04uc3RyaW5naWZ5ID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiBib2R5KTtcbiAgICB0aGlzLmVycm9yID0gYm9keTsgLy8gbGVnYWN5IGF0dHJpYnV0ZVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7IC8vIHJlcXVpcmVkIGZvciBub24tVjggZW52aXJvbm1lbnRzXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMpO1xuICAgIH1cblxufVxuU3RhdHVzQ29kZUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblN0YXR1c0NvZGVFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGF0dXNDb2RlRXJyb3I7XG5cblxuZnVuY3Rpb24gVHJhbnNmb3JtRXJyb3IoY2F1c2UsIG9wdGlvbnMsIHJlc3BvbnNlKSB7XG5cbiAgICB0aGlzLm5hbWUgPSAnVHJhbnNmb3JtRXJyb3InO1xuICAgIHRoaXMubWVzc2FnZSA9IFN0cmluZyhjYXVzZSk7XG4gICAgdGhpcy5jYXVzZSA9IGNhdXNlO1xuICAgIHRoaXMuZXJyb3IgPSBjYXVzZTsgLy8gbGVnYWN5IGF0dHJpYnV0ZVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7IC8vIHJlcXVpcmVkIGZvciBub24tVjggZW52aXJvbm1lbnRzXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMpO1xuICAgIH1cblxufVxuVHJhbnNmb3JtRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuVHJhbnNmb3JtRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhbnNmb3JtRXJyb3I7XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUmVxdWVzdEVycm9yOiBSZXF1ZXN0RXJyb3IsXG4gICAgU3RhdHVzQ29kZUVycm9yOiBTdGF0dXNDb2RlRXJyb3IsXG4gICAgVHJhbnNmb3JtRXJyb3I6IFRyYW5zZm9ybUVycm9yXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXJyb3JzID0gcmVxdWlyZSgnLi9lcnJvcnMuanMnKSxcbiAgICBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnbG9kYXNoL2lzRnVuY3Rpb24nKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCdsb2Rhc2gvaXNPYmplY3RMaWtlJyksXG4gICAgaXNTdHJpbmcgPSByZXF1aXJlKCdsb2Rhc2gvaXNTdHJpbmcnKSxcbiAgICBpc1VuZGVmaW5lZCA9IHJlcXVpcmUoJ2xvZGFzaC9pc1VuZGVmaW5lZCcpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblxuICAgIHZhciBlcnJvclRleHQgPSAnUGxlYXNlIHZlcmlmeSBvcHRpb25zJzsgLy8gRm9yIGJldHRlciBtaW5pZmljYXRpb24gYmVjYXVzZSB0aGlzIHN0cmluZyBpcyByZXBlYXRpbmdcblxuICAgIGlmICghaXNPYmplY3RMaWtlKG9wdGlvbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyb3JUZXh0KTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24ob3B0aW9ucy5Qcm9taXNlSW1wbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnJvclRleHQgKyAnLlByb21pc2VJbXBsJyk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1VuZGVmaW5lZChvcHRpb25zLmNvbnN0cnVjdG9yTWl4aW4pICYmICFpc0Z1bmN0aW9uKG9wdGlvbnMuY29uc3RydWN0b3JNaXhpbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnJvclRleHQgKyAnLlByb21pc2VJbXBsJyk7XG4gICAgfVxuXG4gICAgdmFyIFByb21pc2VJbXBsID0gb3B0aW9ucy5Qcm9taXNlSW1wbDtcbiAgICB2YXIgY29uc3RydWN0b3JNaXhpbiA9IG9wdGlvbnMuY29uc3RydWN0b3JNaXhpbjtcblxuXG4gICAgdmFyIHBsdW1iaW5nID0ge307XG5cbiAgICBwbHVtYmluZy5pbml0ID0gZnVuY3Rpb24gKHJlcXVlc3RPcHRpb25zKSB7XG5cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHNlbGYuX3JwX3Byb21pc2UgPSBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgc2VsZi5fcnBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICBzZWxmLl9ycF9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgICAgICBpZiAoY29uc3RydWN0b3JNaXhpbikge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yTWl4aW4uYXBwbHkoc2VsZiwgYXJndW1lbnRzKTsgLy8gVXNpbmcgYXJndW1lbnRzIHNpbmNlIHNwZWNpZmljIFByb21pc2UgbGlicmFyaWVzIG1heSBwYXNzIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzZWxmLl9ycF9jYWxsYmFja09yaWcgPSByZXF1ZXN0T3B0aW9ucy5jYWxsYmFjaztcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY2FsbGJhY2sgPSBzZWxmLmNhbGxiYWNrID0gZnVuY3Rpb24gUlAkY2FsbGJhY2soZXJyLCByZXNwb25zZSwgYm9keSkge1xuICAgICAgICAgICAgcGx1bWJpbmcuY2FsbGJhY2suY2FsbChzZWxmLCBlcnIsIHJlc3BvbnNlLCBib2R5KTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoaXNTdHJpbmcocmVxdWVzdE9wdGlvbnMubWV0aG9kKSkge1xuICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMubWV0aG9kID0gcmVxdWVzdE9wdGlvbnMubWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0T3B0aW9ucy50cmFuc2Zvcm0gPSByZXF1ZXN0T3B0aW9ucy50cmFuc2Zvcm0gfHwgcGx1bWJpbmcuZGVmYXVsdFRyYW5zZm9ybWF0aW9uc1tyZXF1ZXN0T3B0aW9ucy5tZXRob2RdO1xuXG4gICAgICAgIHNlbGYuX3JwX29wdGlvbnMgPSByZXF1ZXN0T3B0aW9ucztcbiAgICAgICAgc2VsZi5fcnBfb3B0aW9ucy5zaW1wbGUgPSByZXF1ZXN0T3B0aW9ucy5zaW1wbGUgIT09IGZhbHNlO1xuICAgICAgICBzZWxmLl9ycF9vcHRpb25zLnJlc29sdmVXaXRoRnVsbFJlc3BvbnNlID0gcmVxdWVzdE9wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UgPT09IHRydWU7XG4gICAgICAgIHNlbGYuX3JwX29wdGlvbnMudHJhbnNmb3JtMnh4T25seSA9IHJlcXVlc3RPcHRpb25zLnRyYW5zZm9ybTJ4eE9ubHkgPT09IHRydWU7XG5cbiAgICB9O1xuXG4gICAgcGx1bWJpbmcuZGVmYXVsdFRyYW5zZm9ybWF0aW9ucyA9IHtcbiAgICAgICAgSEVBRDogZnVuY3Rpb24gKGJvZHksIHJlc3BvbnNlLCByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlID8gcmVzcG9uc2UgOiByZXNwb25zZS5oZWFkZXJzO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHBsdW1iaW5nLmNhbGxiYWNrID0gZnVuY3Rpb24gKGVyciwgcmVzcG9uc2UsIGJvZHkpIHtcblxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIG9yaWdDYWxsYmFja1RocmV3RXhjZXB0aW9uID0gZmFsc2UsIHRocm93bkV4Y2VwdGlvbiA9IG51bGw7XG5cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2VsZi5fcnBfY2FsbGJhY2tPcmlnKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzZWxmLl9ycF9jYWxsYmFja09yaWcuYXBwbHkoc2VsZiwgYXJndW1lbnRzKTsgLy8gVE9ETzogQXBwbHkgdG8gc2VsZiBtaW1pY3MgYmVoYXZpb3Igb2YgcmVxdWVzdEAyLiBJcyB0aGF0IGFsc28gcmlnaHQgZm9yIHJlcXVlc3RAbmV4dD9cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBvcmlnQ2FsbGJhY2tUaHJld0V4Y2VwdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhyb3duRXhjZXB0aW9uID0gZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpczJ4eCA9ICFlcnIgJiYgL14yLy50ZXN0KCcnICsgcmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG5cbiAgICAgICAgaWYgKGVycikge1xuXG4gICAgICAgICAgICBzZWxmLl9ycF9yZWplY3QobmV3IGVycm9ycy5SZXF1ZXN0RXJyb3IoZXJyLCBzZWxmLl9ycF9vcHRpb25zLCByZXNwb25zZSkpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZi5fcnBfb3B0aW9ucy5zaW1wbGUgJiYgIWlzMnh4KSB7XG5cbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHNlbGYuX3JwX29wdGlvbnMudHJhbnNmb3JtKSAmJiBzZWxmLl9ycF9vcHRpb25zLnRyYW5zZm9ybTJ4eE9ubHkgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICAobmV3IFByb21pc2VJbXBsKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc2VsZi5fcnBfb3B0aW9ucy50cmFuc2Zvcm0oYm9keSwgcmVzcG9uc2UsIHNlbGYuX3JwX29wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpKTsgLy8gdHJhbnNmb3JtIG1heSByZXR1cm4gYSBQcm9taXNlXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0cmFuc2Zvcm1lZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9ycF9yZWplY3QobmV3IGVycm9ycy5TdGF0dXNDb2RlRXJyb3IocmVzcG9uc2Uuc3RhdHVzQ29kZSwgYm9keSwgc2VsZi5fcnBfb3B0aW9ucywgdHJhbnNmb3JtZWRSZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKHRyYW5zZm9ybUVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnBfcmVqZWN0KG5ldyBlcnJvcnMuVHJhbnNmb3JtRXJyb3IodHJhbnNmb3JtRXJyLCBzZWxmLl9ycF9vcHRpb25zLCByZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9ycF9yZWplY3QobmV3IGVycm9ycy5TdGF0dXNDb2RlRXJyb3IocmVzcG9uc2Uuc3RhdHVzQ29kZSwgYm9keSwgc2VsZi5fcnBfb3B0aW9ucywgcmVzcG9uc2UpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihzZWxmLl9ycF9vcHRpb25zLnRyYW5zZm9ybSkgJiYgKGlzMnh4IHx8IHNlbGYuX3JwX29wdGlvbnMudHJhbnNmb3JtMnh4T25seSA9PT0gZmFsc2UpKSB7XG5cbiAgICAgICAgICAgICAgICAobmV3IFByb21pc2VJbXBsKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc2VsZi5fcnBfb3B0aW9ucy50cmFuc2Zvcm0oYm9keSwgcmVzcG9uc2UsIHNlbGYuX3JwX29wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpKTsgLy8gdHJhbnNmb3JtIG1heSByZXR1cm4gYSBQcm9taXNlXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0cmFuc2Zvcm1lZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9ycF9yZXNvbHZlKHRyYW5zZm9ybWVkUmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKHRyYW5zZm9ybUVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcnBfcmVqZWN0KG5ldyBlcnJvcnMuVHJhbnNmb3JtRXJyb3IodHJhbnNmb3JtRXJyLCBzZWxmLl9ycF9vcHRpb25zLCByZXNwb25zZSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxmLl9ycF9vcHRpb25zLnJlc29sdmVXaXRoRnVsbFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fcnBfcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuX3JwX3Jlc29sdmUoYm9keSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcmlnQ2FsbGJhY2tUaHJld0V4Y2VwdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgdGhyb3duRXhjZXB0aW9uO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgcGx1bWJpbmcuZXhwb3NlUHJvbWlzZU1ldGhvZCA9IGZ1bmN0aW9uIChleHBvc2VUbywgYmluZFRvLCBwcm9taXNlUHJvcGVydHlLZXksIG1ldGhvZFRvRXhwb3NlLCBleHBvc2VBcykge1xuXG4gICAgICAgIGV4cG9zZUFzID0gZXhwb3NlQXMgfHwgbWV0aG9kVG9FeHBvc2U7XG5cbiAgICAgICAgaWYgKGV4cG9zZUFzIGluIGV4cG9zZVRvKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBleHBvc2UgbWV0aG9kIFwiJyArIGV4cG9zZUFzICsgJ1wiJyk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBvc2VUb1tleHBvc2VBc10gPSBmdW5jdGlvbiBSUCRleHBvc2VkKCkge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSBiaW5kVG8gfHwgdGhpcztcbiAgICAgICAgICAgIHJldHVybiBzZWxmW3Byb21pc2VQcm9wZXJ0eUtleV1bbWV0aG9kVG9FeHBvc2VdLmFwcGx5KHNlbGZbcHJvbWlzZVByb3BlcnR5S2V5XSwgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgIH07XG5cbiAgICBwbHVtYmluZy5leHBvc2VQcm9taXNlID0gZnVuY3Rpb24gKGV4cG9zZVRvLCBiaW5kVG8sIHByb21pc2VQcm9wZXJ0eUtleSwgZXhwb3NlQXMpIHtcblxuICAgICAgICBleHBvc2VBcyA9IGV4cG9zZUFzIHx8ICdwcm9taXNlJztcblxuICAgICAgICBpZiAoZXhwb3NlQXMgaW4gZXhwb3NlVG8pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGV4cG9zZSBtZXRob2QgXCInICsgZXhwb3NlQXMgKyAnXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cG9zZVRvW2V4cG9zZUFzXSA9IGZ1bmN0aW9uIFJQJHByb21pc2UoKSB7XG4gICAgICAgICAgICB2YXIgc2VsZiA9IGJpbmRUbyB8fCB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGZbcHJvbWlzZVByb3BlcnR5S2V5XTtcbiAgICAgICAgfTtcblxuICAgIH07XG5cbiAgICByZXR1cm4gcGx1bWJpbmc7XG5cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjb25maWd1cmUgPSByZXF1aXJlKCdyZXF1ZXN0LXByb21pc2UtY29yZS9jb25maWd1cmUvcmVxdWVzdDInKSxcbiAgICBzdGVhbHRoeVJlcXVpcmUgPSByZXF1aXJlKCdzdGVhbHRoeS1yZXF1aXJlJyk7XG5cbi8vIExvYWQgUmVxdWVzdCBmcmVzaGx5IC0gc28gdGhhdCB1c2VycyBjYW4gcmVxdWlyZSBhbiB1bmFsdGVyZWQgcmVxdWVzdCBpbnN0YW5jZSFcbnZhciByZXF1ZXN0ID0gc3RlYWx0aHlSZXF1aXJlKHJlcXVpcmUuY2FjaGUsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmVxdWlyZSgncmVxdWVzdCcpO1xufSxcbmZ1bmN0aW9uICgpIHtcbiAgICByZXF1aXJlKCd0b3VnaC1jb29raWUnKTtcbn0sIG1vZHVsZSk7XG5cblxuY29uZmlndXJlKHtcbiAgICByZXF1ZXN0OiByZXF1ZXN0LFxuICAgIFByb21pc2VJbXBsOiBQcm9taXNlLFxuICAgIGV4cG9zZTogW1xuICAgICAgICAndGhlbicsXG4gICAgICAgICdjYXRjaCcsXG4gICAgICAgICdwcm9taXNlJ1xuICAgIF1cbn0pO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdDtcbiIsIi8vIENvcHlyaWdodCAyMDEwLTIwMTIgTWlrZWFsIFJvZ2Vyc1xuLy9cbi8vICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4vL1xuLy8gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuLy8gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuLy8gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4vLyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4vLyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBleHRlbmQgICAgICAgICAgICAgICAgPSByZXF1aXJlKCdleHRlbmQnKVxuICAsIGNvb2tpZXMgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vbGliL2Nvb2tpZXMnKVxuICAsIGhlbHBlcnMgICAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vbGliL2hlbHBlcnMnKVxuXG52YXIgcGFyYW1zSGF2ZVJlcXVlc3RCb2R5ID0gaGVscGVycy5wYXJhbXNIYXZlUmVxdWVzdEJvZHlcblxuXG4vLyBvcmdhbml6ZSBwYXJhbXMgZm9yIHBhdGNoLCBwb3N0LCBwdXQsIGhlYWQsIGRlbFxuZnVuY3Rpb24gaW5pdFBhcmFtcyh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0aW9uc1xuICB9XG5cbiAgdmFyIHBhcmFtcyA9IHt9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICBleHRlbmQocGFyYW1zLCBvcHRpb25zLCB7dXJpOiB1cml9KVxuICB9IGVsc2UgaWYgKHR5cGVvZiB1cmkgPT09ICdzdHJpbmcnKSB7XG4gICAgZXh0ZW5kKHBhcmFtcywge3VyaTogdXJpfSlcbiAgfSBlbHNlIHtcbiAgICBleHRlbmQocGFyYW1zLCB1cmkpXG4gIH1cblxuICBwYXJhbXMuY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBwYXJhbXMuY2FsbGJhY2tcbiAgcmV0dXJuIHBhcmFtc1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0ICh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgdXJpID09PSAndW5kZWZpbmVkJykge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5kZWZpbmVkIGlzIG5vdCBhIHZhbGlkIHVyaSBvciBvcHRpb25zIG9iamVjdC4nKVxuICB9XG5cbiAgdmFyIHBhcmFtcyA9IGluaXRQYXJhbXModXJpLCBvcHRpb25zLCBjYWxsYmFjaylcblxuICBpZiAocGFyYW1zLm1ldGhvZCA9PT0gJ0hFQUQnICYmIHBhcmFtc0hhdmVSZXF1ZXN0Qm9keShwYXJhbXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdIVFRQIEhFQUQgcmVxdWVzdHMgTVVTVCBOT1QgaW5jbHVkZSBhIHJlcXVlc3QgYm9keS4nKVxuICB9XG5cbiAgcmV0dXJuIG5ldyByZXF1ZXN0LlJlcXVlc3QocGFyYW1zKVxufVxuXG5mdW5jdGlvbiB2ZXJiRnVuYyAodmVyYikge1xuICB2YXIgbWV0aG9kID0gdmVyYi50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBmdW5jdGlvbiAodXJpLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIHZhciBwYXJhbXMgPSBpbml0UGFyYW1zKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICAgcGFyYW1zLm1ldGhvZCA9IG1ldGhvZFxuICAgIHJldHVybiByZXF1ZXN0KHBhcmFtcywgcGFyYW1zLmNhbGxiYWNrKVxuICB9XG59XG5cbi8vIGRlZmluZSBsaWtlIHRoaXMgdG8gcGxlYXNlIGNvZGVpbnRlbC9pbnRlbGxpc2Vuc2UgSURFc1xucmVxdWVzdC5nZXQgPSB2ZXJiRnVuYygnZ2V0JylcbnJlcXVlc3QuaGVhZCA9IHZlcmJGdW5jKCdoZWFkJylcbnJlcXVlc3QucG9zdCA9IHZlcmJGdW5jKCdwb3N0JylcbnJlcXVlc3QucHV0ID0gdmVyYkZ1bmMoJ3B1dCcpXG5yZXF1ZXN0LnBhdGNoID0gdmVyYkZ1bmMoJ3BhdGNoJylcbnJlcXVlc3QuZGVsID0gdmVyYkZ1bmMoJ2RlbGV0ZScpXG5yZXF1ZXN0WydkZWxldGUnXSA9IHZlcmJGdW5jKCdkZWxldGUnKVxuXG5yZXF1ZXN0LmphciA9IGZ1bmN0aW9uIChzdG9yZSkge1xuICByZXR1cm4gY29va2llcy5qYXIoc3RvcmUpXG59XG5cbnJlcXVlc3QuY29va2llID0gZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gY29va2llcy5wYXJzZShzdHIpXG59XG5cbmZ1bmN0aW9uIHdyYXBSZXF1ZXN0TWV0aG9kIChtZXRob2QsIG9wdGlvbnMsIHJlcXVlc3RlciwgdmVyYikge1xuXG4gIHJldHVybiBmdW5jdGlvbiAodXJpLCBvcHRzLCBjYWxsYmFjaykge1xuICAgIHZhciBwYXJhbXMgPSBpbml0UGFyYW1zKHVyaSwgb3B0cywgY2FsbGJhY2spXG5cbiAgICB2YXIgdGFyZ2V0ID0ge31cbiAgICBleHRlbmQodHJ1ZSwgdGFyZ2V0LCBvcHRpb25zLCBwYXJhbXMpXG5cbiAgICB0YXJnZXQucG9vbCA9IHBhcmFtcy5wb29sIHx8IG9wdGlvbnMucG9vbFxuXG4gICAgaWYgKHZlcmIpIHtcbiAgICAgIHRhcmdldC5tZXRob2QgPSB2ZXJiLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlcXVlc3RlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWV0aG9kID0gcmVxdWVzdGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGhvZCh0YXJnZXQsIHRhcmdldC5jYWxsYmFjaylcbiAgfVxufVxuXG5yZXF1ZXN0LmRlZmF1bHRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHJlcXVlc3Rlcikge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlcXVlc3RlciA9IG9wdGlvbnNcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHZhciBkZWZhdWx0cyAgICAgID0gd3JhcFJlcXVlc3RNZXRob2Qoc2VsZiwgb3B0aW9ucywgcmVxdWVzdGVyKVxuXG4gIHZhciB2ZXJicyA9IFsnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnZGVsJywgJ2RlbGV0ZSddXG4gIHZlcmJzLmZvckVhY2goZnVuY3Rpb24odmVyYikge1xuICAgIGRlZmF1bHRzW3ZlcmJdICA9IHdyYXBSZXF1ZXN0TWV0aG9kKHNlbGZbdmVyYl0sIG9wdGlvbnMsIHJlcXVlc3RlciwgdmVyYilcbiAgfSlcblxuICBkZWZhdWx0cy5jb29raWUgICA9IHdyYXBSZXF1ZXN0TWV0aG9kKHNlbGYuY29va2llLCBvcHRpb25zLCByZXF1ZXN0ZXIpXG4gIGRlZmF1bHRzLmphciAgICAgID0gc2VsZi5qYXJcbiAgZGVmYXVsdHMuZGVmYXVsdHMgPSBzZWxmLmRlZmF1bHRzXG4gIHJldHVybiBkZWZhdWx0c1xufVxuXG5yZXF1ZXN0LmZvcmV2ZXIgPSBmdW5jdGlvbiAoYWdlbnRPcHRpb25zLCBvcHRpb25zQXJnKSB7XG4gIHZhciBvcHRpb25zID0ge31cbiAgaWYgKG9wdGlvbnNBcmcpIHtcbiAgICBleHRlbmQob3B0aW9ucywgb3B0aW9uc0FyZylcbiAgfVxuICBpZiAoYWdlbnRPcHRpb25zKSB7XG4gICAgb3B0aW9ucy5hZ2VudE9wdGlvbnMgPSBhZ2VudE9wdGlvbnNcbiAgfVxuXG4gIG9wdGlvbnMuZm9yZXZlciA9IHRydWVcbiAgcmV0dXJuIHJlcXVlc3QuZGVmYXVsdHMob3B0aW9ucylcbn1cblxuLy8gRXhwb3J0c1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVlc3RcbnJlcXVlc3QuUmVxdWVzdCA9IHJlcXVpcmUoJy4vcmVxdWVzdCcpXG5yZXF1ZXN0LmluaXRQYXJhbXMgPSBpbml0UGFyYW1zXG5cbi8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciByZXF1ZXN0LmRlYnVnXG5PYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWVzdCwgJ2RlYnVnJywge1xuICBlbnVtZXJhYmxlIDogdHJ1ZSxcbiAgZ2V0IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QuUmVxdWVzdC5kZWJ1Z1xuICB9LFxuICBzZXQgOiBmdW5jdGlvbihkZWJ1Zykge1xuICAgIHJlcXVlc3QuUmVxdWVzdC5kZWJ1ZyA9IGRlYnVnXG4gIH1cbn0pXG4iLCIndXNlIHN0cmljdCdcblxudmFyIGNhc2VsZXNzID0gcmVxdWlyZSgnY2FzZWxlc3MnKVxuICAsIHV1aWQgPSByZXF1aXJlKCd1dWlkJylcbiAgLCBoZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJylcblxudmFyIG1kNSA9IGhlbHBlcnMubWQ1XG4gICwgdG9CYXNlNjQgPSBoZWxwZXJzLnRvQmFzZTY0XG5cblxuZnVuY3Rpb24gQXV0aCAocmVxdWVzdCkge1xuICAvLyBkZWZpbmUgYWxsIHB1YmxpYyBwcm9wZXJ0aWVzIGhlcmVcbiAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICB0aGlzLmhhc0F1dGggPSBmYWxzZVxuICB0aGlzLnNlbnRBdXRoID0gZmFsc2VcbiAgdGhpcy5iZWFyZXJUb2tlbiA9IG51bGxcbiAgdGhpcy51c2VyID0gbnVsbFxuICB0aGlzLnBhc3MgPSBudWxsXG59XG5cbkF1dGgucHJvdG90eXBlLmJhc2ljID0gZnVuY3Rpb24gKHVzZXIsIHBhc3MsIHNlbmRJbW1lZGlhdGVseSkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKHR5cGVvZiB1c2VyICE9PSAnc3RyaW5nJyB8fCAocGFzcyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwYXNzICE9PSAnc3RyaW5nJykpIHtcbiAgICBzZWxmLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ2F1dGgoKSByZWNlaXZlZCBpbnZhbGlkIHVzZXIgb3IgcGFzc3dvcmQnKSlcbiAgfVxuICBzZWxmLnVzZXIgPSB1c2VyXG4gIHNlbGYucGFzcyA9IHBhc3NcbiAgc2VsZi5oYXNBdXRoID0gdHJ1ZVxuICB2YXIgaGVhZGVyID0gdXNlciArICc6JyArIChwYXNzIHx8ICcnKVxuICBpZiAoc2VuZEltbWVkaWF0ZWx5IHx8IHR5cGVvZiBzZW5kSW1tZWRpYXRlbHkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIGF1dGhIZWFkZXIgPSAnQmFzaWMgJyArIHRvQmFzZTY0KGhlYWRlcilcbiAgICBzZWxmLnNlbnRBdXRoID0gdHJ1ZVxuICAgIHJldHVybiBhdXRoSGVhZGVyXG4gIH1cbn1cblxuQXV0aC5wcm90b3R5cGUuYmVhcmVyID0gZnVuY3Rpb24gKGJlYXJlciwgc2VuZEltbWVkaWF0ZWx5KSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBzZWxmLmJlYXJlclRva2VuID0gYmVhcmVyXG4gIHNlbGYuaGFzQXV0aCA9IHRydWVcbiAgaWYgKHNlbmRJbW1lZGlhdGVseSB8fCB0eXBlb2Ygc2VuZEltbWVkaWF0ZWx5ID09PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgYmVhcmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBiZWFyZXIgPSBiZWFyZXIoKVxuICAgIH1cbiAgICB2YXIgYXV0aEhlYWRlciA9ICdCZWFyZXIgJyArIChiZWFyZXIgfHwgJycpXG4gICAgc2VsZi5zZW50QXV0aCA9IHRydWVcbiAgICByZXR1cm4gYXV0aEhlYWRlclxuICB9XG59XG5cbkF1dGgucHJvdG90eXBlLmRpZ2VzdCA9IGZ1bmN0aW9uIChtZXRob2QsIHBhdGgsIGF1dGhIZWFkZXIpIHtcbiAgLy8gVE9ETzogTW9yZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBSRkMgMjYxNy5cbiAgLy8gICAtIGhhbmRsZSBjaGFsbGVuZ2UuZG9tYWluXG4gIC8vICAgLSBzdXBwb3J0IHFvcD1cImF1dGgtaW50XCIgb25seVxuICAvLyAgIC0gaGFuZGxlIEF1dGhlbnRpY2F0aW9uLUluZm8gKG5vdCBuZWNlc3NhcmlseT8pXG4gIC8vICAgLSBjaGVjayBjaGFsbGVuZ2Uuc3RhbGUgKG5vdCBuZWNlc3NhcmlseT8pXG4gIC8vICAgLSBpbmNyZWFzZSBuYyAobm90IG5lY2Vzc2FyaWx5PylcbiAgLy8gRm9yIHJlZmVyZW5jZTpcbiAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjYxNyNzZWN0aW9uLTNcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JhZ2Rlci9jdXJsL2Jsb2IvbWFzdGVyL2xpYi9odHRwX2RpZ2VzdC5jXG5cbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgdmFyIGNoYWxsZW5nZSA9IHt9XG4gIHZhciByZSA9IC8oW2EtejAtOV8tXSspPSg/OlwiKFteXCJdKylcInwoW2EtejAtOV8tXSspKS9naVxuICBmb3IgKDs7KSB7XG4gICAgdmFyIG1hdGNoID0gcmUuZXhlYyhhdXRoSGVhZGVyKVxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNoYWxsZW5nZVttYXRjaFsxXV0gPSBtYXRjaFsyXSB8fCBtYXRjaFszXVxuICB9XG5cbiAgLyoqXG4gICAqIFJGQyAyNjE3OiBoYW5kbGUgYm90aCBNRDUgYW5kIE1ENS1zZXNzIGFsZ29yaXRobXMuXG4gICAqXG4gICAqIElmIHRoZSBhbGdvcml0aG0gZGlyZWN0aXZlJ3MgdmFsdWUgaXMgXCJNRDVcIiBvciB1bnNwZWNpZmllZCwgdGhlbiBIQTEgaXNcbiAgICogICBIQTE9TUQ1KHVzZXJuYW1lOnJlYWxtOnBhc3N3b3JkKVxuICAgKiBJZiB0aGUgYWxnb3JpdGhtIGRpcmVjdGl2ZSdzIHZhbHVlIGlzIFwiTUQ1LXNlc3NcIiwgdGhlbiBIQTEgaXNcbiAgICogICBIQTE9TUQ1KE1ENSh1c2VybmFtZTpyZWFsbTpwYXNzd29yZCk6bm9uY2U6Y25vbmNlKVxuICAgKi9cbiAgdmFyIGhhMUNvbXB1dGUgPSBmdW5jdGlvbiAoYWxnb3JpdGhtLCB1c2VyLCByZWFsbSwgcGFzcywgbm9uY2UsIGNub25jZSkge1xuICAgIHZhciBoYTEgPSBtZDUodXNlciArICc6JyArIHJlYWxtICsgJzonICsgcGFzcylcbiAgICBpZiAoYWxnb3JpdGhtICYmIGFsZ29yaXRobS50b0xvd2VyQ2FzZSgpID09PSAnbWQ1LXNlc3MnKSB7XG4gICAgICByZXR1cm4gbWQ1KGhhMSArICc6JyArIG5vbmNlICsgJzonICsgY25vbmNlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaGExXG4gICAgfVxuICB9XG5cbiAgdmFyIHFvcCA9IC8oXnwsKVxccyphdXRoXFxzKigkfCwpLy50ZXN0KGNoYWxsZW5nZS5xb3ApICYmICdhdXRoJ1xuICB2YXIgbmMgPSBxb3AgJiYgJzAwMDAwMDAxJ1xuICB2YXIgY25vbmNlID0gcW9wICYmIHV1aWQoKS5yZXBsYWNlKC8tL2csICcnKVxuICB2YXIgaGExID0gaGExQ29tcHV0ZShjaGFsbGVuZ2UuYWxnb3JpdGhtLCBzZWxmLnVzZXIsIGNoYWxsZW5nZS5yZWFsbSwgc2VsZi5wYXNzLCBjaGFsbGVuZ2Uubm9uY2UsIGNub25jZSlcbiAgdmFyIGhhMiA9IG1kNShtZXRob2QgKyAnOicgKyBwYXRoKVxuICB2YXIgZGlnZXN0UmVzcG9uc2UgPSBxb3BcbiAgICA/IG1kNShoYTEgKyAnOicgKyBjaGFsbGVuZ2Uubm9uY2UgKyAnOicgKyBuYyArICc6JyArIGNub25jZSArICc6JyArIHFvcCArICc6JyArIGhhMilcbiAgICA6IG1kNShoYTEgKyAnOicgKyBjaGFsbGVuZ2Uubm9uY2UgKyAnOicgKyBoYTIpXG4gIHZhciBhdXRoVmFsdWVzID0ge1xuICAgIHVzZXJuYW1lOiBzZWxmLnVzZXIsXG4gICAgcmVhbG06IGNoYWxsZW5nZS5yZWFsbSxcbiAgICBub25jZTogY2hhbGxlbmdlLm5vbmNlLFxuICAgIHVyaTogcGF0aCxcbiAgICBxb3A6IHFvcCxcbiAgICByZXNwb25zZTogZGlnZXN0UmVzcG9uc2UsXG4gICAgbmM6IG5jLFxuICAgIGNub25jZTogY25vbmNlLFxuICAgIGFsZ29yaXRobTogY2hhbGxlbmdlLmFsZ29yaXRobSxcbiAgICBvcGFxdWU6IGNoYWxsZW5nZS5vcGFxdWVcbiAgfVxuXG4gIGF1dGhIZWFkZXIgPSBbXVxuICBmb3IgKHZhciBrIGluIGF1dGhWYWx1ZXMpIHtcbiAgICBpZiAoYXV0aFZhbHVlc1trXSkge1xuICAgICAgaWYgKGsgPT09ICdxb3AnIHx8IGsgPT09ICduYycgfHwgayA9PT0gJ2FsZ29yaXRobScpIHtcbiAgICAgICAgYXV0aEhlYWRlci5wdXNoKGsgKyAnPScgKyBhdXRoVmFsdWVzW2tdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXV0aEhlYWRlci5wdXNoKGsgKyAnPVwiJyArIGF1dGhWYWx1ZXNba10gKyAnXCInKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBhdXRoSGVhZGVyID0gJ0RpZ2VzdCAnICsgYXV0aEhlYWRlci5qb2luKCcsICcpXG4gIHNlbGYuc2VudEF1dGggPSB0cnVlXG4gIHJldHVybiBhdXRoSGVhZGVyXG59XG5cbkF1dGgucHJvdG90eXBlLm9uUmVxdWVzdCA9IGZ1bmN0aW9uICh1c2VyLCBwYXNzLCBzZW5kSW1tZWRpYXRlbHksIGJlYXJlcikge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgICAsIHJlcXVlc3QgPSBzZWxmLnJlcXVlc3RcblxuICB2YXIgYXV0aEhlYWRlclxuICBpZiAoYmVhcmVyID09PSB1bmRlZmluZWQgJiYgdXNlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc2VsZi5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdubyBhdXRoIG1lY2hhbmlzbSBkZWZpbmVkJykpXG4gIH0gZWxzZSBpZiAoYmVhcmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICBhdXRoSGVhZGVyID0gc2VsZi5iZWFyZXIoYmVhcmVyLCBzZW5kSW1tZWRpYXRlbHkpXG4gIH0gZWxzZSB7XG4gICAgYXV0aEhlYWRlciA9IHNlbGYuYmFzaWModXNlciwgcGFzcywgc2VuZEltbWVkaWF0ZWx5KVxuICB9XG4gIGlmIChhdXRoSGVhZGVyKSB7XG4gICAgcmVxdWVzdC5zZXRIZWFkZXIoJ2F1dGhvcml6YXRpb24nLCBhdXRoSGVhZGVyKVxuICB9XG59XG5cbkF1dGgucHJvdG90eXBlLm9uUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCByZXF1ZXN0ID0gc2VsZi5yZXF1ZXN0XG5cbiAgaWYgKCFzZWxmLmhhc0F1dGggfHwgc2VsZi5zZW50QXV0aCkgeyByZXR1cm4gbnVsbCB9XG5cbiAgdmFyIGMgPSBjYXNlbGVzcyhyZXNwb25zZS5oZWFkZXJzKVxuXG4gIHZhciBhdXRoSGVhZGVyID0gYy5nZXQoJ3d3dy1hdXRoZW50aWNhdGUnKVxuICB2YXIgYXV0aFZlcmIgPSBhdXRoSGVhZGVyICYmIGF1dGhIZWFkZXIuc3BsaXQoJyAnKVswXS50b0xvd2VyQ2FzZSgpXG4gIHJlcXVlc3QuZGVidWcoJ3JlYXV0aCcsIGF1dGhWZXJiKVxuXG4gIHN3aXRjaCAoYXV0aFZlcmIpIHtcbiAgICBjYXNlICdiYXNpYyc6XG4gICAgICByZXR1cm4gc2VsZi5iYXNpYyhzZWxmLnVzZXIsIHNlbGYucGFzcywgdHJ1ZSlcblxuICAgIGNhc2UgJ2JlYXJlcic6XG4gICAgICByZXR1cm4gc2VsZi5iZWFyZXIoc2VsZi5iZWFyZXJUb2tlbiwgdHJ1ZSlcblxuICAgIGNhc2UgJ2RpZ2VzdCc6XG4gICAgICByZXR1cm4gc2VsZi5kaWdlc3QocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QucGF0aCwgYXV0aEhlYWRlcilcbiAgfVxufVxuXG5leHBvcnRzLkF1dGggPSBBdXRoXG4iLCIndXNlIHN0cmljdCdcblxudmFyIHRvdWdoID0gcmVxdWlyZSgndG91Z2gtY29va2llJylcblxudmFyIENvb2tpZSA9IHRvdWdoLkNvb2tpZVxuICAsIENvb2tpZUphciA9IHRvdWdoLkNvb2tpZUphclxuXG5cbmV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbihzdHIpIHtcbiAgaWYgKHN0ciAmJiBzdHIudXJpKSB7XG4gICAgc3RyID0gc3RyLnVyaVxuICB9XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGNvb2tpZSBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgU1RSSU5HIGFzIHBhcmFtJylcbiAgfVxuICByZXR1cm4gQ29va2llLnBhcnNlKHN0ciwge2xvb3NlOiB0cnVlfSlcbn1cblxuLy8gQWRhcHQgdGhlIHNvbWV0aW1lcy1Bc3luYyBhcGkgb2YgdG91Z2guQ29va2llSmFyIHRvIG91ciByZXF1aXJlbWVudHNcbmZ1bmN0aW9uIFJlcXVlc3RKYXIoc3RvcmUpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHNlbGYuX2phciA9IG5ldyBDb29raWVKYXIoc3RvcmUsIHtsb29zZU1vZGU6IHRydWV9KVxufVxuUmVxdWVzdEphci5wcm90b3R5cGUuc2V0Q29va2llID0gZnVuY3Rpb24oY29va2llT3JTdHIsIHVyaSwgb3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgcmV0dXJuIHNlbGYuX2phci5zZXRDb29raWVTeW5jKGNvb2tpZU9yU3RyLCB1cmksIG9wdGlvbnMgfHwge30pXG59XG5SZXF1ZXN0SmFyLnByb3RvdHlwZS5nZXRDb29raWVTdHJpbmcgPSBmdW5jdGlvbih1cmkpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHJldHVybiBzZWxmLl9qYXIuZ2V0Q29va2llU3RyaW5nU3luYyh1cmkpXG59XG5SZXF1ZXN0SmFyLnByb3RvdHlwZS5nZXRDb29raWVzID0gZnVuY3Rpb24odXJpKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICByZXR1cm4gc2VsZi5famFyLmdldENvb2tpZXNTeW5jKHVyaSlcbn1cblxuZXhwb3J0cy5qYXIgPSBmdW5jdGlvbihzdG9yZSkge1xuICByZXR1cm4gbmV3IFJlcXVlc3RKYXIoc3RvcmUpXG59XG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gZm9ybWF0SG9zdG5hbWUoaG9zdG5hbWUpIHtcbiAgLy8gY2Fub25pY2FsaXplIHRoZSBob3N0bmFtZSwgc28gdGhhdCAnb29nbGUuY29tJyB3b24ndCBtYXRjaCAnZ29vZ2xlLmNvbSdcbiAgcmV0dXJuIGhvc3RuYW1lLnJlcGxhY2UoL15cXC4qLywgJy4nKS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9Qcm94eVpvbmUoem9uZSkge1xuICB6b25lID0gem9uZS50cmltKCkudG9Mb3dlckNhc2UoKVxuXG4gIHZhciB6b25lUGFydHMgPSB6b25lLnNwbGl0KCc6JywgMilcbiAgICAsIHpvbmVIb3N0ID0gZm9ybWF0SG9zdG5hbWUoem9uZVBhcnRzWzBdKVxuICAgICwgem9uZVBvcnQgPSB6b25lUGFydHNbMV1cbiAgICAsIGhhc1BvcnQgPSB6b25lLmluZGV4T2YoJzonKSA+IC0xXG5cbiAgcmV0dXJuIHtob3N0bmFtZTogem9uZUhvc3QsIHBvcnQ6IHpvbmVQb3J0LCBoYXNQb3J0OiBoYXNQb3J0fVxufVxuXG5mdW5jdGlvbiB1cmlJbk5vUHJveHkodXJpLCBub1Byb3h5KSB7XG4gIHZhciBwb3J0ID0gdXJpLnBvcnQgfHwgKHVyaS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnNDQzJyA6ICc4MCcpXG4gICAgLCBob3N0bmFtZSA9IGZvcm1hdEhvc3RuYW1lKHVyaS5ob3N0bmFtZSlcbiAgICAsIG5vUHJveHlMaXN0ID0gbm9Qcm94eS5zcGxpdCgnLCcpXG5cbiAgLy8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBub1Byb3h5TGlzdCB1bnRpbCBpdCBmaW5kcyBhIG1hdGNoLlxuICByZXR1cm4gbm9Qcm94eUxpc3QubWFwKHBhcnNlTm9Qcm94eVpvbmUpLnNvbWUoZnVuY3Rpb24obm9Qcm94eVpvbmUpIHtcbiAgICB2YXIgaXNNYXRjaGVkQXQgPSBob3N0bmFtZS5pbmRleE9mKG5vUHJveHlab25lLmhvc3RuYW1lKVxuICAgICAgLCBob3N0bmFtZU1hdGNoZWQgPSAoXG4gICAgICAgICAgaXNNYXRjaGVkQXQgPiAtMSAmJlxuICAgICAgICAgIChpc01hdGNoZWRBdCA9PT0gaG9zdG5hbWUubGVuZ3RoIC0gbm9Qcm94eVpvbmUuaG9zdG5hbWUubGVuZ3RoKVxuICAgICAgICApXG5cbiAgICBpZiAobm9Qcm94eVpvbmUuaGFzUG9ydCkge1xuICAgICAgcmV0dXJuIChwb3J0ID09PSBub1Byb3h5Wm9uZS5wb3J0KSAmJiBob3N0bmFtZU1hdGNoZWRcbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdG5hbWVNYXRjaGVkXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldFByb3h5RnJvbVVSSSh1cmkpIHtcbiAgLy8gRGVjaWRlIHRoZSBwcm9wZXIgcmVxdWVzdCBwcm94eSB0byB1c2UgYmFzZWQgb24gdGhlIHJlcXVlc3QgVVJJIG9iamVjdCBhbmQgdGhlXG4gIC8vIGVudmlyb25tZW50YWwgdmFyaWFibGVzIChOT19QUk9YWSwgSFRUUF9QUk9YWSwgZXRjLilcbiAgLy8gcmVzcGVjdCBOT19QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKHNlZTogaHR0cDovL2x5bnguaXNjLm9yZy9jdXJyZW50L2JyZWFrb3V0L2x5bnhfaGVscC9rZXlzdHJva2VzL2Vudmlyb25tZW50cy5odG1sKVxuXG4gIHZhciBub1Byb3h5ID0gcHJvY2Vzcy5lbnYuTk9fUFJPWFkgfHwgcHJvY2Vzcy5lbnYubm9fcHJveHkgfHwgJydcblxuICAvLyBpZiB0aGUgbm9Qcm94eSBpcyBhIHdpbGRjYXJkIHRoZW4gcmV0dXJuIG51bGxcblxuICBpZiAobm9Qcm94eSA9PT0gJyonKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIGlmIHRoZSBub1Byb3h5IGlzIG5vdCBlbXB0eSBhbmQgdGhlIHVyaSBpcyBmb3VuZCByZXR1cm4gbnVsbFxuXG4gIGlmIChub1Byb3h5ICE9PSAnJyAmJiB1cmlJbk5vUHJveHkodXJpLCBub1Byb3h5KSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBDaGVjayBmb3IgSFRUUCBvciBIVFRQUyBQcm94eSBpbiBlbnZpcm9ubWVudCBFbHNlIGRlZmF1bHQgdG8gbnVsbFxuXG4gIGlmICh1cmkucHJvdG9jb2wgPT09ICdodHRwOicpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuSFRUUF9QUk9YWSB8fFxuICAgICAgICAgICBwcm9jZXNzLmVudi5odHRwX3Byb3h5IHx8IG51bGxcbiAgfVxuXG4gIGlmICh1cmkucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52LkhUVFBTX1BST1hZIHx8XG4gICAgICAgICAgIHByb2Nlc3MuZW52Lmh0dHBzX3Byb3h5IHx8XG4gICAgICAgICAgIHByb2Nlc3MuZW52LkhUVFBfUFJPWFkgIHx8XG4gICAgICAgICAgIHByb2Nlc3MuZW52Lmh0dHBfcHJveHkgIHx8IG51bGxcbiAgfVxuXG4gIC8vIGlmIG5vbmUgb2YgdGhhdCB3b3JrcywgcmV0dXJuIG51bGxcbiAgLy8gKFdoYXQgdXJpIHByb3RvY29sIGFyZSB5b3UgdXNpbmcgdGhlbj8pXG5cbiAgcmV0dXJuIG51bGxcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm94eUZyb21VUklcbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcXMgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCdoYXItdmFsaWRhdG9yJylcbnZhciBleHRlbmQgPSByZXF1aXJlKCdleHRlbmQnKVxuXG5mdW5jdGlvbiBIYXIgKHJlcXVlc3QpIHtcbiAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxufVxuXG5IYXIucHJvdG90eXBlLnJlZHVjZXIgPSBmdW5jdGlvbiAob2JqLCBwYWlyKSB7XG4gIC8vIG5ldyBwcm9wZXJ0eSA/XG4gIGlmIChvYmpbcGFpci5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb2JqW3BhaXIubmFtZV0gPSBwYWlyLnZhbHVlXG4gICAgcmV0dXJuIG9ialxuICB9XG5cbiAgLy8gZXhpc3Rpbmc/IGNvbnZlcnQgdG8gYXJyYXlcbiAgdmFyIGFyciA9IFtcbiAgICBvYmpbcGFpci5uYW1lXSxcbiAgICBwYWlyLnZhbHVlXG4gIF1cblxuICBvYmpbcGFpci5uYW1lXSA9IGFyclxuXG4gIHJldHVybiBvYmpcbn1cblxuSGFyLnByb3RvdHlwZS5wcmVwID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgLy8gY29uc3RydWN0IHV0aWxpdHkgcHJvcGVydGllc1xuICBkYXRhLnF1ZXJ5T2JqID0ge31cbiAgZGF0YS5oZWFkZXJzT2JqID0ge31cbiAgZGF0YS5wb3N0RGF0YS5qc29uT2JqID0gZmFsc2VcbiAgZGF0YS5wb3N0RGF0YS5wYXJhbXNPYmogPSBmYWxzZVxuXG4gIC8vIGNvbnN0cnVjdCBxdWVyeSBvYmplY3RzXG4gIGlmIChkYXRhLnF1ZXJ5U3RyaW5nICYmIGRhdGEucXVlcnlTdHJpbmcubGVuZ3RoKSB7XG4gICAgZGF0YS5xdWVyeU9iaiA9IGRhdGEucXVlcnlTdHJpbmcucmVkdWNlKHRoaXMucmVkdWNlciwge30pXG4gIH1cblxuICAvLyBjb25zdHJ1Y3QgaGVhZGVycyBvYmplY3RzXG4gIGlmIChkYXRhLmhlYWRlcnMgJiYgZGF0YS5oZWFkZXJzLmxlbmd0aCkge1xuICAgIC8vIGxvd2VDYXNlIGhlYWRlciBrZXlzXG4gICAgZGF0YS5oZWFkZXJzT2JqID0gZGF0YS5oZWFkZXJzLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uIChoZWFkZXJzLCBoZWFkZXIpIHtcbiAgICAgIGhlYWRlcnNbaGVhZGVyLm5hbWVdID0gaGVhZGVyLnZhbHVlXG4gICAgICByZXR1cm4gaGVhZGVyc1xuICAgIH0sIHt9KVxuICB9XG5cbiAgLy8gY29uc3RydWN0IENvb2tpZSBoZWFkZXJcbiAgaWYgKGRhdGEuY29va2llcyAmJiBkYXRhLmNvb2tpZXMubGVuZ3RoKSB7XG4gICAgdmFyIGNvb2tpZXMgPSBkYXRhLmNvb2tpZXMubWFwKGZ1bmN0aW9uIChjb29raWUpIHtcbiAgICAgIHJldHVybiBjb29raWUubmFtZSArICc9JyArIGNvb2tpZS52YWx1ZVxuICAgIH0pXG5cbiAgICBpZiAoY29va2llcy5sZW5ndGgpIHtcbiAgICAgIGRhdGEuaGVhZGVyc09iai5jb29raWUgPSBjb29raWVzLmpvaW4oJzsgJylcbiAgICB9XG4gIH1cblxuICAvLyBwcmVwIGJvZHlcbiAgZnVuY3Rpb24gc29tZSAoYXJyKSB7XG4gICAgcmV0dXJuIGFyci5zb21lKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICByZXR1cm4gZGF0YS5wb3N0RGF0YS5taW1lVHlwZS5pbmRleE9mKHR5cGUpID09PSAwXG4gICAgfSlcbiAgfVxuXG4gIGlmIChzb21lKFtcbiAgICAnbXVsdGlwYXJ0L21peGVkJyxcbiAgICAnbXVsdGlwYXJ0L3JlbGF0ZWQnLFxuICAgICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAnbXVsdGlwYXJ0L2FsdGVybmF0aXZlJ10pKSB7XG5cbiAgICAvLyByZXNldCB2YWx1ZXNcbiAgICBkYXRhLnBvc3REYXRhLm1pbWVUeXBlID0gJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gIH1cblxuICBlbHNlIGlmIChzb21lKFtcbiAgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ10pKSB7XG5cbiAgICBpZiAoIWRhdGEucG9zdERhdGEucGFyYW1zKSB7XG4gICAgICBkYXRhLnBvc3REYXRhLnRleHQgPSAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhLnBvc3REYXRhLnBhcmFtc09iaiA9IGRhdGEucG9zdERhdGEucGFyYW1zLnJlZHVjZSh0aGlzLnJlZHVjZXIsIHt9KVxuXG4gICAgICAvLyBhbHdheXMgb3ZlcndyaXRlXG4gICAgICBkYXRhLnBvc3REYXRhLnRleHQgPSBxcy5zdHJpbmdpZnkoZGF0YS5wb3N0RGF0YS5wYXJhbXNPYmopXG4gICAgfVxuICB9XG5cbiAgZWxzZSBpZiAoc29tZShbXG4gICAgJ3RleHQvanNvbicsXG4gICAgJ3RleHQveC1qc29uJyxcbiAgICAnYXBwbGljYXRpb24vanNvbicsXG4gICAgJ2FwcGxpY2F0aW9uL3gtanNvbiddKSkge1xuXG4gICAgZGF0YS5wb3N0RGF0YS5taW1lVHlwZSA9ICdhcHBsaWNhdGlvbi9qc29uJ1xuXG4gICAgaWYgKGRhdGEucG9zdERhdGEudGV4dCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YS5wb3N0RGF0YS5qc29uT2JqID0gSlNPTi5wYXJzZShkYXRhLnBvc3REYXRhLnRleHQpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5kZWJ1ZyhlKVxuXG4gICAgICAgIC8vIGZvcmNlIGJhY2sgdG8gdGV4dC9wbGFpblxuICAgICAgICBkYXRhLnBvc3REYXRhLm1pbWVUeXBlID0gJ3RleHQvcGxhaW4nXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGFcbn1cblxuSGFyLnByb3RvdHlwZS5vcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgLy8gc2tpcCBpZiBubyBoYXIgcHJvcGVydHkgZGVmaW5lZFxuICBpZiAoIW9wdGlvbnMuaGFyKSB7XG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfVxuXG4gIHZhciBoYXIgPSB7fVxuICBleHRlbmQoaGFyLCBvcHRpb25zLmhhcilcblxuICAvLyBvbmx5IHByb2Nlc3MgdGhlIGZpcnN0IGVudHJ5XG4gIGlmIChoYXIubG9nICYmIGhhci5sb2cuZW50cmllcykge1xuICAgIGhhciA9IGhhci5sb2cuZW50cmllc1swXVxuICB9XG5cbiAgLy8gYWRkIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gbWFrZSB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWxcbiAgaGFyLnVybCA9IGhhci51cmwgfHwgb3B0aW9ucy51cmwgfHwgb3B0aW9ucy51cmkgfHwgb3B0aW9ucy5iYXNlVXJsIHx8ICcvJ1xuICBoYXIuaHR0cFZlcnNpb24gPSBoYXIuaHR0cFZlcnNpb24gfHwgJ0hUVFAvMS4xJ1xuICBoYXIucXVlcnlTdHJpbmcgPSBoYXIucXVlcnlTdHJpbmcgfHwgW11cbiAgaGFyLmhlYWRlcnMgPSBoYXIuaGVhZGVycyB8fCBbXVxuICBoYXIuY29va2llcyA9IGhhci5jb29raWVzIHx8IFtdXG4gIGhhci5wb3N0RGF0YSA9IGhhci5wb3N0RGF0YSB8fCB7fVxuICBoYXIucG9zdERhdGEubWltZVR5cGUgPSBoYXIucG9zdERhdGEubWltZVR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcblxuICBoYXIuYm9keVNpemUgPSAwXG4gIGhhci5oZWFkZXJzU2l6ZSA9IDBcbiAgaGFyLnBvc3REYXRhLnNpemUgPSAwXG5cbiAgaWYgKCF2YWxpZGF0ZS5yZXF1ZXN0KGhhcikpIHtcbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG5cbiAgLy8gY2xlYW4gdXAgYW5kIGdldCBzb21lIHV0aWxpdHkgcHJvcGVydGllc1xuICB2YXIgcmVxID0gdGhpcy5wcmVwKGhhcilcblxuICAvLyBjb25zdHJ1Y3QgbmV3IG9wdGlvbnNcbiAgaWYgKHJlcS51cmwpIHtcbiAgICBvcHRpb25zLnVybCA9IHJlcS51cmxcbiAgfVxuXG4gIGlmIChyZXEubWV0aG9kKSB7XG4gICAgb3B0aW9ucy5tZXRob2QgPSByZXEubWV0aG9kXG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocmVxLnF1ZXJ5T2JqKS5sZW5ndGgpIHtcbiAgICBvcHRpb25zLnFzID0gcmVxLnF1ZXJ5T2JqXG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocmVxLmhlYWRlcnNPYmopLmxlbmd0aCkge1xuICAgIG9wdGlvbnMuaGVhZGVycyA9IHJlcS5oZWFkZXJzT2JqXG4gIH1cblxuICBmdW5jdGlvbiB0ZXN0ICh0eXBlKSB7XG4gICAgcmV0dXJuIHJlcS5wb3N0RGF0YS5taW1lVHlwZS5pbmRleE9mKHR5cGUpID09PSAwXG4gIH1cbiAgaWYgKHRlc3QoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpKSB7XG4gICAgb3B0aW9ucy5mb3JtID0gcmVxLnBvc3REYXRhLnBhcmFtc09ialxuICB9XG4gIGVsc2UgaWYgKHRlc3QoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIGlmIChyZXEucG9zdERhdGEuanNvbk9iaikge1xuICAgICAgb3B0aW9ucy5ib2R5ID0gcmVxLnBvc3REYXRhLmpzb25PYmpcbiAgICAgIG9wdGlvbnMuanNvbiA9IHRydWVcbiAgICB9XG4gIH1cbiAgZWxzZSBpZiAodGVzdCgnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKSB7XG4gICAgb3B0aW9ucy5mb3JtRGF0YSA9IHt9XG5cbiAgICByZXEucG9zdERhdGEucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICB2YXIgYXR0YWNobWVudCA9IHt9XG5cbiAgICAgIGlmICghcGFyYW0uZmlsZU5hbWUgJiYgIXBhcmFtLmZpbGVOYW1lICYmICFwYXJhbS5jb250ZW50VHlwZSkge1xuICAgICAgICBvcHRpb25zLmZvcm1EYXRhW3BhcmFtLm5hbWVdID0gcGFyYW0udmFsdWVcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIGF0dGVtcHQgdG8gcmVhZCBmcm9tIGRpc2shXG4gICAgICBpZiAocGFyYW0uZmlsZU5hbWUgJiYgIXBhcmFtLnZhbHVlKSB7XG4gICAgICAgIGF0dGFjaG1lbnQudmFsdWUgPSBmcy5jcmVhdGVSZWFkU3RyZWFtKHBhcmFtLmZpbGVOYW1lKVxuICAgICAgfSBlbHNlIGlmIChwYXJhbS52YWx1ZSkge1xuICAgICAgICBhdHRhY2htZW50LnZhbHVlID0gcGFyYW0udmFsdWVcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtLmZpbGVOYW1lKSB7XG4gICAgICAgIGF0dGFjaG1lbnQub3B0aW9ucyA9IHtcbiAgICAgICAgICBmaWxlbmFtZTogcGFyYW0uZmlsZU5hbWUsXG4gICAgICAgICAgY29udGVudFR5cGU6IHBhcmFtLmNvbnRlbnRUeXBlID8gcGFyYW0uY29udGVudFR5cGUgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb3B0aW9ucy5mb3JtRGF0YVtwYXJhbS5uYW1lXSA9IGF0dGFjaG1lbnRcbiAgICB9KVxuICB9XG4gIGVsc2Uge1xuICAgIGlmIChyZXEucG9zdERhdGEudGV4dCkge1xuICAgICAgb3B0aW9ucy5ib2R5ID0gcmVxLnBvc3REYXRhLnRleHRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5leHBvcnRzLkhhciA9IEhhclxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBqc29uU2FmZVN0cmluZ2lmeSA9IHJlcXVpcmUoJ2pzb24tc3RyaW5naWZ5LXNhZmUnKVxuICAsIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gICwgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcblxudmFyIGRlZmVyID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ3VuZGVmaW5lZCdcbiAgPyBwcm9jZXNzLm5leHRUaWNrXG4gIDogc2V0SW1tZWRpYXRlXG5cbmZ1bmN0aW9uIHBhcmFtc0hhdmVSZXF1ZXN0Qm9keShwYXJhbXMpIHtcbiAgcmV0dXJuIChcbiAgICBwYXJhbXMuYm9keSB8fFxuICAgIHBhcmFtcy5yZXF1ZXN0Qm9keVN0cmVhbSB8fFxuICAgIChwYXJhbXMuanNvbiAmJiB0eXBlb2YgcGFyYW1zLmpzb24gIT09ICdib29sZWFuJykgfHxcbiAgICBwYXJhbXMubXVsdGlwYXJ0XG4gIClcbn1cblxuZnVuY3Rpb24gc2FmZVN0cmluZ2lmeSAob2JqLCByZXBsYWNlcikge1xuICB2YXIgcmV0XG4gIHRyeSB7XG4gICAgcmV0ID0gSlNPTi5zdHJpbmdpZnkob2JqLCByZXBsYWNlcilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldCA9IGpzb25TYWZlU3RyaW5naWZ5KG9iaiwgcmVwbGFjZXIpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBtZDUgKHN0cikge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShzdHIpLmRpZ2VzdCgnaGV4Jylcbn1cblxuZnVuY3Rpb24gaXNSZWFkU3RyZWFtIChycykge1xuICByZXR1cm4gcnMucmVhZGFibGUgJiYgcnMucGF0aCAmJiBycy5tb2RlXG59XG5cbmZ1bmN0aW9uIHRvQmFzZTY0IChzdHIpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciB8fCAnJywgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jylcbn1cblxuZnVuY3Rpb24gY29weSAob2JqKSB7XG4gIHZhciBvID0ge31cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChpKSB7XG4gICAgb1tpXSA9IG9ialtpXVxuICB9KVxuICByZXR1cm4gb1xufVxuXG5mdW5jdGlvbiB2ZXJzaW9uICgpIHtcbiAgdmFyIG51bWJlcnMgPSBwcm9jZXNzLnZlcnNpb24ucmVwbGFjZSgndicsICcnKS5zcGxpdCgnLicpXG4gIHJldHVybiB7XG4gICAgbWFqb3I6IHBhcnNlSW50KG51bWJlcnNbMF0sIDEwKSxcbiAgICBtaW5vcjogcGFyc2VJbnQobnVtYmVyc1sxXSwgMTApLFxuICAgIHBhdGNoOiBwYXJzZUludChudW1iZXJzWzJdLCAxMClcbiAgfVxufVxuXG5leHBvcnRzLnBhcmFtc0hhdmVSZXF1ZXN0Qm9keSA9IHBhcmFtc0hhdmVSZXF1ZXN0Qm9keVxuZXhwb3J0cy5zYWZlU3RyaW5naWZ5ICAgICAgICAgPSBzYWZlU3RyaW5naWZ5XG5leHBvcnRzLm1kNSAgICAgICAgICAgICAgICAgICA9IG1kNVxuZXhwb3J0cy5pc1JlYWRTdHJlYW0gICAgICAgICAgPSBpc1JlYWRTdHJlYW1cbmV4cG9ydHMudG9CYXNlNjQgICAgICAgICAgICAgID0gdG9CYXNlNjRcbmV4cG9ydHMuY29weSAgICAgICAgICAgICAgICAgID0gY29weVxuZXhwb3J0cy52ZXJzaW9uICAgICAgICAgICAgICAgPSB2ZXJzaW9uXG5leHBvcnRzLmRlZmVyICAgICAgICAgICAgICAgICA9IGRlZmVyXG4iLCIndXNlIHN0cmljdCdcblxudmFyIHV1aWQgPSByZXF1aXJlKCd1dWlkJylcbiAgLCBDb21iaW5lZFN0cmVhbSA9IHJlcXVpcmUoJ2NvbWJpbmVkLXN0cmVhbScpXG4gICwgaXNzdHJlYW0gPSByZXF1aXJlKCdpc3N0cmVhbScpXG4gICwgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcblxuXG5mdW5jdGlvbiBNdWx0aXBhcnQgKHJlcXVlc3QpIHtcbiAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICB0aGlzLmJvdW5kYXJ5ID0gdXVpZCgpXG4gIHRoaXMuY2h1bmtlZCA9IGZhbHNlXG4gIHRoaXMuYm9keSA9IG51bGxcbn1cblxuTXVsdGlwYXJ0LnByb3RvdHlwZS5pc0NodW5rZWQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgICAsIGNodW5rZWQgPSBmYWxzZVxuICAgICwgcGFydHMgPSBvcHRpb25zLmRhdGEgfHwgb3B0aW9uc1xuXG4gIGlmICghcGFydHMuZm9yRWFjaCkge1xuICAgIHNlbGYucmVxdWVzdC5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignQXJndW1lbnQgZXJyb3IsIG9wdGlvbnMubXVsdGlwYXJ0LicpKVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuY2h1bmtlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2h1bmtlZCA9IG9wdGlvbnMuY2h1bmtlZFxuICB9XG5cbiAgaWYgKHNlbGYucmVxdWVzdC5nZXRIZWFkZXIoJ3RyYW5zZmVyLWVuY29kaW5nJykgPT09ICdjaHVua2VkJykge1xuICAgIGNodW5rZWQgPSB0cnVlXG4gIH1cblxuICBpZiAoIWNodW5rZWQpIHtcbiAgICBwYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgICBpZiAodHlwZW9mIHBhcnQuYm9keSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VsZi5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdCb2R5IGF0dHJpYnV0ZSBtaXNzaW5nIGluIG11bHRpcGFydC4nKSlcbiAgICAgIH1cbiAgICAgIGlmIChpc3N0cmVhbShwYXJ0LmJvZHkpKSB7XG4gICAgICAgIGNodW5rZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjaHVua2VkXG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUuc2V0SGVhZGVycyA9IGZ1bmN0aW9uIChjaHVua2VkKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIGlmIChjaHVua2VkICYmICFzZWxmLnJlcXVlc3QuaGFzSGVhZGVyKCd0cmFuc2Zlci1lbmNvZGluZycpKSB7XG4gICAgc2VsZi5yZXF1ZXN0LnNldEhlYWRlcigndHJhbnNmZXItZW5jb2RpbmcnLCAnY2h1bmtlZCcpXG4gIH1cblxuICB2YXIgaGVhZGVyID0gc2VsZi5yZXF1ZXN0LmdldEhlYWRlcignY29udGVudC10eXBlJylcblxuICBpZiAoIWhlYWRlciB8fCBoZWFkZXIuaW5kZXhPZignbXVsdGlwYXJ0JykgPT09IC0xKSB7XG4gICAgc2VsZi5yZXF1ZXN0LnNldEhlYWRlcignY29udGVudC10eXBlJywgJ211bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0nICsgc2VsZi5ib3VuZGFyeSlcbiAgfSBlbHNlIHtcbiAgICBpZiAoaGVhZGVyLmluZGV4T2YoJ2JvdW5kYXJ5JykgIT09IC0xKSB7XG4gICAgICBzZWxmLmJvdW5kYXJ5ID0gaGVhZGVyLnJlcGxhY2UoLy4qYm91bmRhcnk9KFteXFxzO10rKS4qLywgJyQxJylcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5yZXF1ZXN0LnNldEhlYWRlcignY29udGVudC10eXBlJywgaGVhZGVyICsgJzsgYm91bmRhcnk9JyArIHNlbGYuYm91bmRhcnkpXG4gICAgfVxuICB9XG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbiAocGFydHMsIGNodW5rZWQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHZhciBib2R5ID0gY2h1bmtlZCA/IG5ldyBDb21iaW5lZFN0cmVhbSgpIDogW11cblxuICBmdW5jdGlvbiBhZGQgKHBhcnQpIHtcbiAgICBpZiAodHlwZW9mIHBhcnQgPT09ICdudW1iZXInKSB7XG4gICAgICBwYXJ0ID0gcGFydC50b1N0cmluZygpXG4gICAgfVxuICAgIHJldHVybiBjaHVua2VkID8gYm9keS5hcHBlbmQocGFydCkgOiBib2R5LnB1c2goQnVmZmVyLmZyb20ocGFydCkpXG4gIH1cblxuICBpZiAoc2VsZi5yZXF1ZXN0LnByZWFtYmxlQ1JMRikge1xuICAgIGFkZCgnXFxyXFxuJylcbiAgfVxuXG4gIHBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnQpIHtcbiAgICB2YXIgcHJlYW1ibGUgPSAnLS0nICsgc2VsZi5ib3VuZGFyeSArICdcXHJcXG4nXG4gICAgT2JqZWN0LmtleXMocGFydCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoa2V5ID09PSAnYm9keScpIHsgcmV0dXJuIH1cbiAgICAgIHByZWFtYmxlICs9IGtleSArICc6ICcgKyBwYXJ0W2tleV0gKyAnXFxyXFxuJ1xuICAgIH0pXG4gICAgcHJlYW1ibGUgKz0gJ1xcclxcbidcbiAgICBhZGQocHJlYW1ibGUpXG4gICAgYWRkKHBhcnQuYm9keSlcbiAgICBhZGQoJ1xcclxcbicpXG4gIH0pXG4gIGFkZCgnLS0nICsgc2VsZi5ib3VuZGFyeSArICctLScpXG5cbiAgaWYgKHNlbGYucmVxdWVzdC5wb3N0YW1ibGVDUkxGKSB7XG4gICAgYWRkKCdcXHJcXG4nKVxuICB9XG5cbiAgcmV0dXJuIGJvZHlcbn1cblxuTXVsdGlwYXJ0LnByb3RvdHlwZS5vblJlcXVlc3QgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICB2YXIgY2h1bmtlZCA9IHNlbGYuaXNDaHVua2VkKG9wdGlvbnMpXG4gICAgLCBwYXJ0cyA9IG9wdGlvbnMuZGF0YSB8fCBvcHRpb25zXG5cbiAgc2VsZi5zZXRIZWFkZXJzKGNodW5rZWQpXG4gIHNlbGYuY2h1bmtlZCA9IGNodW5rZWRcbiAgc2VsZi5ib2R5ID0gc2VsZi5idWlsZChwYXJ0cywgY2h1bmtlZClcbn1cblxuZXhwb3J0cy5NdWx0aXBhcnQgPSBNdWx0aXBhcnRcbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgdXJsID0gcmVxdWlyZSgndXJsJylcbiAgLCBxcyA9IHJlcXVpcmUoJ3FzJylcbiAgLCBjYXNlbGVzcyA9IHJlcXVpcmUoJ2Nhc2VsZXNzJylcbiAgLCB1dWlkID0gcmVxdWlyZSgndXVpZCcpXG4gICwgb2F1dGggPSByZXF1aXJlKCdvYXV0aC1zaWduJylcbiAgLCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxuICAsIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cblxuZnVuY3Rpb24gT0F1dGggKHJlcXVlc3QpIHtcbiAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICB0aGlzLnBhcmFtcyA9IG51bGxcbn1cblxuT0F1dGgucHJvdG90eXBlLmJ1aWxkUGFyYW1zID0gZnVuY3Rpb24gKF9vYXV0aCwgdXJpLCBtZXRob2QsIHF1ZXJ5LCBmb3JtLCBxc0xpYikge1xuICB2YXIgb2EgPSB7fVxuICBmb3IgKHZhciBpIGluIF9vYXV0aCkge1xuICAgIG9hWydvYXV0aF8nICsgaV0gPSBfb2F1dGhbaV1cbiAgfVxuICBpZiAoIW9hLm9hdXRoX3ZlcnNpb24pIHtcbiAgICBvYS5vYXV0aF92ZXJzaW9uID0gJzEuMCdcbiAgfVxuICBpZiAoIW9hLm9hdXRoX3RpbWVzdGFtcCkge1xuICAgIG9hLm9hdXRoX3RpbWVzdGFtcCA9IE1hdGguZmxvb3IoIERhdGUubm93KCkgLyAxMDAwICkudG9TdHJpbmcoKVxuICB9XG4gIGlmICghb2Eub2F1dGhfbm9uY2UpIHtcbiAgICBvYS5vYXV0aF9ub25jZSA9IHV1aWQoKS5yZXBsYWNlKC8tL2csICcnKVxuICB9XG4gIGlmICghb2Eub2F1dGhfc2lnbmF0dXJlX21ldGhvZCkge1xuICAgIG9hLm9hdXRoX3NpZ25hdHVyZV9tZXRob2QgPSAnSE1BQy1TSEExJ1xuICB9XG5cbiAgdmFyIGNvbnN1bWVyX3NlY3JldF9vcl9wcml2YXRlX2tleSA9IG9hLm9hdXRoX2NvbnN1bWVyX3NlY3JldCB8fCBvYS5vYXV0aF9wcml2YXRlX2tleVxuICBkZWxldGUgb2Eub2F1dGhfY29uc3VtZXJfc2VjcmV0XG4gIGRlbGV0ZSBvYS5vYXV0aF9wcml2YXRlX2tleVxuXG4gIHZhciB0b2tlbl9zZWNyZXQgPSBvYS5vYXV0aF90b2tlbl9zZWNyZXRcbiAgZGVsZXRlIG9hLm9hdXRoX3Rva2VuX3NlY3JldFxuXG4gIHZhciByZWFsbSA9IG9hLm9hdXRoX3JlYWxtXG4gIGRlbGV0ZSBvYS5vYXV0aF9yZWFsbVxuICBkZWxldGUgb2Eub2F1dGhfdHJhbnNwb3J0X21ldGhvZFxuXG4gIHZhciBiYXNldXJsID0gdXJpLnByb3RvY29sICsgJy8vJyArIHVyaS5ob3N0ICsgdXJpLnBhdGhuYW1lXG4gIHZhciBwYXJhbXMgPSBxc0xpYi5wYXJzZShbXS5jb25jYXQocXVlcnksIGZvcm0sIHFzTGliLnN0cmluZ2lmeShvYSkpLmpvaW4oJyYnKSlcblxuICBvYS5vYXV0aF9zaWduYXR1cmUgPSBvYXV0aC5zaWduKFxuICAgIG9hLm9hdXRoX3NpZ25hdHVyZV9tZXRob2QsXG4gICAgbWV0aG9kLFxuICAgIGJhc2V1cmwsXG4gICAgcGFyYW1zLFxuICAgIGNvbnN1bWVyX3NlY3JldF9vcl9wcml2YXRlX2tleSxcbiAgICB0b2tlbl9zZWNyZXQpXG5cbiAgaWYgKHJlYWxtKSB7XG4gICAgb2EucmVhbG0gPSByZWFsbVxuICB9XG5cbiAgcmV0dXJuIG9hXG59XG5cbk9BdXRoLnByb3RvdHlwZS5idWlsZEJvZHlIYXNoID0gZnVuY3Rpb24oX29hdXRoLCBib2R5KSB7XG4gIGlmIChbJ0hNQUMtU0hBMScsICdSU0EtU0hBMSddLmluZGV4T2YoX29hdXRoLnNpZ25hdHVyZV9tZXRob2QgfHwgJ0hNQUMtU0hBMScpIDwgMCkge1xuICAgIHRoaXMucmVxdWVzdC5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignb2F1dGg6ICcgKyBfb2F1dGguc2lnbmF0dXJlX21ldGhvZCArXG4gICAgICAnIHNpZ25hdHVyZV9tZXRob2Qgbm90IHN1cHBvcnRlZCB3aXRoIGJvZHlfaGFzaCBzaWduaW5nLicpKVxuICB9XG5cbiAgdmFyIHNoYXN1bSA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJylcbiAgc2hhc3VtLnVwZGF0ZShib2R5IHx8ICcnKVxuICB2YXIgc2hhMSA9IHNoYXN1bS5kaWdlc3QoJ2hleCcpXG5cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNoYTEpLnRvU3RyaW5nKCdiYXNlNjQnKVxufVxuXG5PQXV0aC5wcm90b3R5cGUuY29uY2F0UGFyYW1zID0gZnVuY3Rpb24gKG9hLCBzZXAsIHdyYXApIHtcbiAgd3JhcCA9IHdyYXAgfHwgJydcblxuICB2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMob2EpLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBpICE9PSAncmVhbG0nICYmIGkgIT09ICdvYXV0aF9zaWduYXR1cmUnXG4gIH0pLnNvcnQoKVxuXG4gIGlmIChvYS5yZWFsbSkge1xuICAgIHBhcmFtcy5zcGxpY2UoMCwgMCwgJ3JlYWxtJylcbiAgfVxuICBwYXJhbXMucHVzaCgnb2F1dGhfc2lnbmF0dXJlJylcblxuICByZXR1cm4gcGFyYW1zLm1hcChmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiBpICsgJz0nICsgd3JhcCArIG9hdXRoLnJmYzM5ODYob2FbaV0pICsgd3JhcFxuICB9KS5qb2luKHNlcClcbn1cblxuT0F1dGgucHJvdG90eXBlLm9uUmVxdWVzdCA9IGZ1bmN0aW9uIChfb2F1dGgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHNlbGYucGFyYW1zID0gX29hdXRoXG5cbiAgdmFyIHVyaSA9IHNlbGYucmVxdWVzdC51cmkgfHwge31cbiAgICAsIG1ldGhvZCA9IHNlbGYucmVxdWVzdC5tZXRob2QgfHwgJydcbiAgICAsIGhlYWRlcnMgPSBjYXNlbGVzcyhzZWxmLnJlcXVlc3QuaGVhZGVycylcbiAgICAsIGJvZHkgPSBzZWxmLnJlcXVlc3QuYm9keSB8fCAnJ1xuICAgICwgcXNMaWIgPSBzZWxmLnJlcXVlc3QucXNMaWIgfHwgcXNcblxuICB2YXIgZm9ybVxuICAgICwgcXVlcnlcbiAgICAsIGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpIHx8ICcnXG4gICAgLCBmb3JtQ29udGVudFR5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xuICAgICwgdHJhbnNwb3J0ID0gX29hdXRoLnRyYW5zcG9ydF9tZXRob2QgfHwgJ2hlYWRlcidcblxuICBpZiAoY29udGVudFR5cGUuc2xpY2UoMCwgZm9ybUNvbnRlbnRUeXBlLmxlbmd0aCkgPT09IGZvcm1Db250ZW50VHlwZSkge1xuICAgIGNvbnRlbnRUeXBlID0gZm9ybUNvbnRlbnRUeXBlXG4gICAgZm9ybSA9IGJvZHlcbiAgfVxuICBpZiAodXJpLnF1ZXJ5KSB7XG4gICAgcXVlcnkgPSB1cmkucXVlcnlcbiAgfVxuICBpZiAodHJhbnNwb3J0ID09PSAnYm9keScgJiYgKG1ldGhvZCAhPT0gJ1BPU1QnIHx8IGNvbnRlbnRUeXBlICE9PSBmb3JtQ29udGVudFR5cGUpKSB7XG4gICAgc2VsZi5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdvYXV0aDogdHJhbnNwb3J0X21ldGhvZCBvZiBib2R5IHJlcXVpcmVzIFBPU1QgJyArXG4gICAgICAnYW5kIGNvbnRlbnQtdHlwZSAnICsgZm9ybUNvbnRlbnRUeXBlKSlcbiAgfVxuXG4gIGlmICghZm9ybSAmJiB0eXBlb2YgX29hdXRoLmJvZHlfaGFzaCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgX29hdXRoLmJvZHlfaGFzaCA9IHNlbGYuYnVpbGRCb2R5SGFzaChfb2F1dGgsIHNlbGYucmVxdWVzdC5ib2R5LnRvU3RyaW5nKCkpXG4gIH1cblxuICB2YXIgb2EgPSBzZWxmLmJ1aWxkUGFyYW1zKF9vYXV0aCwgdXJpLCBtZXRob2QsIHF1ZXJ5LCBmb3JtLCBxc0xpYilcblxuICBzd2l0Y2ggKHRyYW5zcG9ydCkge1xuICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICBzZWxmLnJlcXVlc3Quc2V0SGVhZGVyKCdBdXRob3JpemF0aW9uJywgJ09BdXRoICcgKyBzZWxmLmNvbmNhdFBhcmFtcyhvYSwgJywnLCAnXCInKSlcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlICdxdWVyeSc6XG4gICAgICB2YXIgaHJlZiA9IHNlbGYucmVxdWVzdC51cmkuaHJlZiArPSAocXVlcnkgPyAnJicgOiAnPycpICsgc2VsZi5jb25jYXRQYXJhbXMob2EsICcmJylcbiAgICAgIHNlbGYucmVxdWVzdC51cmkgPSB1cmwucGFyc2UoaHJlZilcbiAgICAgIHNlbGYucmVxdWVzdC5wYXRoID0gc2VsZi5yZXF1ZXN0LnVyaS5wYXRoXG4gICAgICBicmVha1xuXG4gICAgY2FzZSAnYm9keSc6XG4gICAgICBzZWxmLnJlcXVlc3QuYm9keSA9IChmb3JtID8gZm9ybSArICcmJyA6ICcnKSArIHNlbGYuY29uY2F0UGFyYW1zKG9hLCAnJicpXG4gICAgICBicmVha1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHNlbGYucmVxdWVzdC5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignb2F1dGg6IHRyYW5zcG9ydF9tZXRob2QgaW52YWxpZCcpKVxuICB9XG59XG5cbmV4cG9ydHMuT0F1dGggPSBPQXV0aFxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBxcyA9IHJlcXVpcmUoJ3FzJylcbiAgLCBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJylcblxuXG5mdW5jdGlvbiBRdWVyeXN0cmluZyAocmVxdWVzdCkge1xuICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gIHRoaXMubGliID0gbnVsbFxuICB0aGlzLnVzZVF1ZXJ5c3RyaW5nID0gbnVsbFxuICB0aGlzLnBhcnNlT3B0aW9ucyA9IG51bGxcbiAgdGhpcy5zdHJpbmdpZnlPcHRpb25zID0gbnVsbFxufVxuXG5RdWVyeXN0cmluZy5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmICh0aGlzLmxpYikge3JldHVybn1cblxuICB0aGlzLnVzZVF1ZXJ5c3RyaW5nID0gb3B0aW9ucy51c2VRdWVyeXN0cmluZ1xuICB0aGlzLmxpYiA9ICh0aGlzLnVzZVF1ZXJ5c3RyaW5nID8gcXVlcnlzdHJpbmcgOiBxcylcblxuICB0aGlzLnBhcnNlT3B0aW9ucyA9IG9wdGlvbnMucXNQYXJzZU9wdGlvbnMgfHwge31cbiAgdGhpcy5zdHJpbmdpZnlPcHRpb25zID0gb3B0aW9ucy5xc1N0cmluZ2lmeU9wdGlvbnMgfHwge31cbn1cblxuUXVlcnlzdHJpbmcucHJvdG90eXBlLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuICh0aGlzLnVzZVF1ZXJ5c3RyaW5nKVxuICAgID8gdGhpcy5yZmMzOTg2KHRoaXMubGliLnN0cmluZ2lmeShvYmosXG4gICAgICB0aGlzLnN0cmluZ2lmeU9wdGlvbnMuc2VwIHx8IG51bGwsXG4gICAgICB0aGlzLnN0cmluZ2lmeU9wdGlvbnMuZXEgfHwgbnVsbCxcbiAgICAgIHRoaXMuc3RyaW5naWZ5T3B0aW9ucykpXG4gICAgOiB0aGlzLmxpYi5zdHJpbmdpZnkob2JqLCB0aGlzLnN0cmluZ2lmeU9wdGlvbnMpXG59XG5cblF1ZXJ5c3RyaW5nLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuICh0aGlzLnVzZVF1ZXJ5c3RyaW5nKVxuICAgID8gdGhpcy5saWIucGFyc2Uoc3RyLFxuICAgICAgdGhpcy5wYXJzZU9wdGlvbnMuc2VwIHx8IG51bGwsXG4gICAgICB0aGlzLnBhcnNlT3B0aW9ucy5lcSB8fCBudWxsLFxuICAgICAgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgOiB0aGlzLmxpYi5wYXJzZShzdHIsIHRoaXMucGFyc2VPcHRpb25zKVxufVxuXG5RdWVyeXN0cmluZy5wcm90b3R5cGUucmZjMzk4NiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICB9KVxufVxuXG5RdWVyeXN0cmluZy5wcm90b3R5cGUudW5lc2NhcGUgPSBxdWVyeXN0cmluZy51bmVzY2FwZVxuXG5leHBvcnRzLlF1ZXJ5c3RyaW5nID0gUXVlcnlzdHJpbmdcbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgdXJsID0gcmVxdWlyZSgndXJsJylcbnZhciBpc1VybCA9IC9eaHR0cHM/Oi9cblxuZnVuY3Rpb24gUmVkaXJlY3QgKHJlcXVlc3QpIHtcbiAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICB0aGlzLmZvbGxvd1JlZGlyZWN0ID0gdHJ1ZVxuICB0aGlzLmZvbGxvd1JlZGlyZWN0cyA9IHRydWVcbiAgdGhpcy5mb2xsb3dBbGxSZWRpcmVjdHMgPSBmYWxzZVxuICB0aGlzLmZvbGxvd09yaWdpbmFsSHR0cE1ldGhvZCA9IGZhbHNlXG4gIHRoaXMuYWxsb3dSZWRpcmVjdCA9IGZ1bmN0aW9uICgpIHtyZXR1cm4gdHJ1ZX1cbiAgdGhpcy5tYXhSZWRpcmVjdHMgPSAxMFxuICB0aGlzLnJlZGlyZWN0cyA9IFtdXG4gIHRoaXMucmVkaXJlY3RzRm9sbG93ZWQgPSAwXG4gIHRoaXMucmVtb3ZlUmVmZXJlckhlYWRlciA9IGZhbHNlXG59XG5cblJlZGlyZWN0LnByb3RvdHlwZS5vblJlcXVlc3QgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICBpZiAob3B0aW9ucy5tYXhSZWRpcmVjdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHNlbGYubWF4UmVkaXJlY3RzID0gb3B0aW9ucy5tYXhSZWRpcmVjdHNcbiAgfVxuICBpZiAodHlwZW9mIG9wdGlvbnMuZm9sbG93UmVkaXJlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzZWxmLmFsbG93UmVkaXJlY3QgPSBvcHRpb25zLmZvbGxvd1JlZGlyZWN0XG4gIH1cbiAgaWYgKG9wdGlvbnMuZm9sbG93UmVkaXJlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgIHNlbGYuZm9sbG93UmVkaXJlY3RzID0gISFvcHRpb25zLmZvbGxvd1JlZGlyZWN0XG4gIH1cbiAgaWYgKG9wdGlvbnMuZm9sbG93QWxsUmVkaXJlY3RzICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZWxmLmZvbGxvd0FsbFJlZGlyZWN0cyA9IG9wdGlvbnMuZm9sbG93QWxsUmVkaXJlY3RzXG4gIH1cbiAgaWYgKHNlbGYuZm9sbG93UmVkaXJlY3RzIHx8IHNlbGYuZm9sbG93QWxsUmVkaXJlY3RzKSB7XG4gICAgc2VsZi5yZWRpcmVjdHMgPSBzZWxmLnJlZGlyZWN0cyB8fCBbXVxuICB9XG4gIGlmIChvcHRpb25zLnJlbW92ZVJlZmVyZXJIZWFkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHNlbGYucmVtb3ZlUmVmZXJlckhlYWRlciA9IG9wdGlvbnMucmVtb3ZlUmVmZXJlckhlYWRlclxuICB9XG4gIGlmIChvcHRpb25zLmZvbGxvd09yaWdpbmFsSHR0cE1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc2VsZi5mb2xsb3dPcmlnaW5hbEh0dHBNZXRob2QgPSBvcHRpb25zLmZvbGxvd09yaWdpbmFsSHR0cE1ldGhvZFxuICB9XG59XG5cblJlZGlyZWN0LnByb3RvdHlwZS5yZWRpcmVjdFRvID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwgcmVxdWVzdCA9IHNlbGYucmVxdWVzdFxuXG4gIHZhciByZWRpcmVjdFRvID0gbnVsbFxuICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAzMDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8IDQwMCAmJiByZXNwb25zZS5jYXNlbGVzcy5oYXMoJ2xvY2F0aW9uJykpIHtcbiAgICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5jYXNlbGVzcy5nZXQoJ2xvY2F0aW9uJylcbiAgICByZXF1ZXN0LmRlYnVnKCdyZWRpcmVjdCcsIGxvY2F0aW9uKVxuXG4gICAgaWYgKHNlbGYuZm9sbG93QWxsUmVkaXJlY3RzKSB7XG4gICAgICByZWRpcmVjdFRvID0gbG9jYXRpb25cbiAgICB9IGVsc2UgaWYgKHNlbGYuZm9sbG93UmVkaXJlY3RzKSB7XG4gICAgICBzd2l0Y2ggKHJlcXVlc3QubWV0aG9kKSB7XG4gICAgICAgIGNhc2UgJ1BBVENIJzpcbiAgICAgICAgY2FzZSAnUFVUJzpcbiAgICAgICAgY2FzZSAnUE9TVCc6XG4gICAgICAgIGNhc2UgJ0RFTEVURSc6XG4gICAgICAgICAgLy8gRG8gbm90IGZvbGxvdyByZWRpcmVjdHNcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlZGlyZWN0VG8gPSBsb2NhdGlvblxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDQwMSkge1xuICAgIHZhciBhdXRoSGVhZGVyID0gcmVxdWVzdC5fYXV0aC5vblJlc3BvbnNlKHJlc3BvbnNlKVxuICAgIGlmIChhdXRoSGVhZGVyKSB7XG4gICAgICByZXF1ZXN0LnNldEhlYWRlcignYXV0aG9yaXphdGlvbicsIGF1dGhIZWFkZXIpXG4gICAgICByZWRpcmVjdFRvID0gcmVxdWVzdC51cmlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlZGlyZWN0VG9cbn1cblxuUmVkaXJlY3QucHJvdG90eXBlLm9uUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCByZXF1ZXN0ID0gc2VsZi5yZXF1ZXN0XG5cbiAgdmFyIHJlZGlyZWN0VG8gPSBzZWxmLnJlZGlyZWN0VG8ocmVzcG9uc2UpXG4gIGlmICghcmVkaXJlY3RUbyB8fCAhc2VsZi5hbGxvd1JlZGlyZWN0LmNhbGwocmVxdWVzdCwgcmVzcG9uc2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXF1ZXN0LmRlYnVnKCdyZWRpcmVjdCB0bycsIHJlZGlyZWN0VG8pXG5cbiAgLy8gaWdub3JlIGFueSBwb3RlbnRpYWwgcmVzcG9uc2UgYm9keS4gIGl0IGNhbm5vdCBwb3NzaWJseSBiZSB1c2VmdWxcbiAgLy8gdG8gdXMgYXQgdGhpcyBwb2ludC5cbiAgLy8gcmVzcG9uc2UucmVzdW1lIHNob3VsZCBiZSBkZWZpbmVkLCBidXQgY2hlY2sgYW55d2F5IGJlZm9yZSBjYWxsaW5nLiBXb3JrYXJvdW5kIGZvciBicm93c2VyaWZ5LlxuICBpZiAocmVzcG9uc2UucmVzdW1lKSB7XG4gICAgcmVzcG9uc2UucmVzdW1lKClcbiAgfVxuXG4gIGlmIChzZWxmLnJlZGlyZWN0c0ZvbGxvd2VkID49IHNlbGYubWF4UmVkaXJlY3RzKSB7XG4gICAgcmVxdWVzdC5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignRXhjZWVkZWQgbWF4UmVkaXJlY3RzLiBQcm9iYWJseSBzdHVjayBpbiBhIHJlZGlyZWN0IGxvb3AgJyArIHJlcXVlc3QudXJpLmhyZWYpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHNlbGYucmVkaXJlY3RzRm9sbG93ZWQgKz0gMVxuXG4gIGlmICghaXNVcmwudGVzdChyZWRpcmVjdFRvKSkge1xuICAgIHJlZGlyZWN0VG8gPSB1cmwucmVzb2x2ZShyZXF1ZXN0LnVyaS5ocmVmLCByZWRpcmVjdFRvKVxuICB9XG5cbiAgdmFyIHVyaVByZXYgPSByZXF1ZXN0LnVyaVxuICByZXF1ZXN0LnVyaSA9IHVybC5wYXJzZShyZWRpcmVjdFRvKVxuXG4gIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBjaGFuZ2UgcHJvdG9jb2wgZnJvbSBodHRwcyB0byBodHRwIG9yIHZpY2UgdmVyc2FcbiAgaWYgKHJlcXVlc3QudXJpLnByb3RvY29sICE9PSB1cmlQcmV2LnByb3RvY29sKSB7XG4gICAgZGVsZXRlIHJlcXVlc3QuYWdlbnRcbiAgfVxuXG4gIHNlbGYucmVkaXJlY3RzLnB1c2goXG4gICAgeyBzdGF0dXNDb2RlIDogcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICAgICwgcmVkaXJlY3RVcmk6IHJlZGlyZWN0VG9cbiAgICB9XG4gIClcbiAgaWYgKHNlbGYuZm9sbG93QWxsUmVkaXJlY3RzICYmIHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCdcbiAgICAmJiByZXNwb25zZS5zdGF0dXNDb2RlICE9PSA0MDEgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMzA3KSB7XG4gICAgcmVxdWVzdC5tZXRob2QgPSBzZWxmLmZvbGxvd09yaWdpbmFsSHR0cE1ldGhvZCA/IHJlcXVlc3QubWV0aG9kIDogJ0dFVCdcbiAgfVxuICAvLyByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnIC8vIEZvcmNlIGFsbCByZWRpcmVjdHMgdG8gdXNlIEdFVCB8fCBjb21tZW50ZWQgb3V0IGZpeGVzICMyMTVcbiAgZGVsZXRlIHJlcXVlc3Quc3JjXG4gIGRlbGV0ZSByZXF1ZXN0LnJlcVxuICBkZWxldGUgcmVxdWVzdC5fc3RhcnRlZFxuICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gNDAxICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDMwNykge1xuICAgIC8vIFJlbW92ZSBwYXJhbWV0ZXJzIGZyb20gdGhlIHByZXZpb3VzIHJlc3BvbnNlLCB1bmxlc3MgdGhpcyBpcyB0aGUgc2Vjb25kIHJlcXVlc3RcbiAgICAvLyBmb3IgYSBzZXJ2ZXIgdGhhdCByZXF1aXJlcyBkaWdlc3QgYXV0aGVudGljYXRpb24uXG4gICAgZGVsZXRlIHJlcXVlc3QuYm9keVxuICAgIGRlbGV0ZSByZXF1ZXN0Ll9mb3JtXG4gICAgaWYgKHJlcXVlc3QuaGVhZGVycykge1xuICAgICAgcmVxdWVzdC5yZW1vdmVIZWFkZXIoJ2hvc3QnKVxuICAgICAgcmVxdWVzdC5yZW1vdmVIZWFkZXIoJ2NvbnRlbnQtdHlwZScpXG4gICAgICByZXF1ZXN0LnJlbW92ZUhlYWRlcignY29udGVudC1sZW5ndGgnKVxuICAgICAgaWYgKHJlcXVlc3QudXJpLmhvc3RuYW1lICE9PSByZXF1ZXN0Lm9yaWdpbmFsSG9zdC5zcGxpdCgnOicpWzBdKSB7XG4gICAgICAgIC8vIFJlbW92ZSBhdXRob3JpemF0aW9uIGlmIGNoYW5naW5nIGhvc3RuYW1lcyAoYnV0IG5vdCBpZiBqdXN0XG4gICAgICAgIC8vIGNoYW5naW5nIHBvcnRzIG9yIHByb3RvY29scykuICBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIGN1cmw6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWdkZXIvY3VybC9ibG9iLzZiZWIwZWVlL2xpYi9odHRwLmMjTDcxMFxuICAgICAgICByZXF1ZXN0LnJlbW92ZUhlYWRlcignYXV0aG9yaXphdGlvbicpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFzZWxmLnJlbW92ZVJlZmVyZXJIZWFkZXIpIHtcbiAgICByZXF1ZXN0LnNldEhlYWRlcigncmVmZXJlcicsIHVyaVByZXYuaHJlZilcbiAgfVxuXG4gIHJlcXVlc3QuZW1pdCgncmVkaXJlY3QnKVxuXG4gIHJlcXVlc3QuaW5pdCgpXG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0cy5SZWRpcmVjdCA9IFJlZGlyZWN0XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpXG4gICwgdHVubmVsID0gcmVxdWlyZSgndHVubmVsLWFnZW50JylcblxudmFyIGRlZmF1bHRQcm94eUhlYWRlcldoaXRlTGlzdCA9IFtcbiAgJ2FjY2VwdCcsXG4gICdhY2NlcHQtY2hhcnNldCcsXG4gICdhY2NlcHQtZW5jb2RpbmcnLFxuICAnYWNjZXB0LWxhbmd1YWdlJyxcbiAgJ2FjY2VwdC1yYW5nZXMnLFxuICAnY2FjaGUtY29udHJvbCcsXG4gICdjb250ZW50LWVuY29kaW5nJyxcbiAgJ2NvbnRlbnQtbGFuZ3VhZ2UnLFxuICAnY29udGVudC1sb2NhdGlvbicsXG4gICdjb250ZW50LW1kNScsXG4gICdjb250ZW50LXJhbmdlJyxcbiAgJ2NvbnRlbnQtdHlwZScsXG4gICdjb25uZWN0aW9uJyxcbiAgJ2RhdGUnLFxuICAnZXhwZWN0JyxcbiAgJ21heC1mb3J3YXJkcycsXG4gICdwcmFnbWEnLFxuICAncmVmZXJlcicsXG4gICd0ZScsXG4gICd1c2VyLWFnZW50JyxcbiAgJ3ZpYSdcbl1cblxudmFyIGRlZmF1bHRQcm94eUhlYWRlckV4Y2x1c2l2ZUxpc3QgPSBbXG4gICdwcm94eS1hdXRob3JpemF0aW9uJ1xuXVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RQcm94eUhvc3QodXJpT2JqZWN0KSB7XG4gIHZhciBwb3J0ID0gdXJpT2JqZWN0LnBvcnRcbiAgICAsIHByb3RvY29sID0gdXJpT2JqZWN0LnByb3RvY29sXG4gICAgLCBwcm94eUhvc3QgPSB1cmlPYmplY3QuaG9zdG5hbWUgKyAnOidcblxuICBpZiAocG9ydCkge1xuICAgIHByb3h5SG9zdCArPSBwb3J0XG4gIH0gZWxzZSBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgcHJveHlIb3N0ICs9ICc0NDMnXG4gIH0gZWxzZSB7XG4gICAgcHJveHlIb3N0ICs9ICc4MCdcbiAgfVxuXG4gIHJldHVybiBwcm94eUhvc3Rcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0UHJveHlIZWFkZXJXaGl0ZUxpc3QoaGVhZGVycywgcHJveHlIZWFkZXJXaGl0ZUxpc3QpIHtcbiAgdmFyIHdoaXRlTGlzdCA9IHByb3h5SGVhZGVyV2hpdGVMaXN0XG4gICAgLnJlZHVjZShmdW5jdGlvbiAoc2V0LCBoZWFkZXIpIHtcbiAgICAgIHNldFtoZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB0cnVlXG4gICAgICByZXR1cm4gc2V0XG4gICAgfSwge30pXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgLmZpbHRlcihmdW5jdGlvbiAoaGVhZGVyKSB7XG4gICAgICByZXR1cm4gd2hpdGVMaXN0W2hlYWRlci50b0xvd2VyQ2FzZSgpXVxuICAgIH0pXG4gICAgLnJlZHVjZShmdW5jdGlvbiAoc2V0LCBoZWFkZXIpIHtcbiAgICAgIHNldFtoZWFkZXJdID0gaGVhZGVyc1toZWFkZXJdXG4gICAgICByZXR1cm4gc2V0XG4gICAgfSwge30pXG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFR1bm5lbE9wdGlvbnMgKHJlcXVlc3QsIHByb3h5SGVhZGVycykge1xuICB2YXIgcHJveHkgPSByZXF1ZXN0LnByb3h5XG5cbiAgdmFyIHR1bm5lbE9wdGlvbnMgPSB7XG4gICAgcHJveHkgOiB7XG4gICAgICBob3N0ICAgICAgOiBwcm94eS5ob3N0bmFtZSxcbiAgICAgIHBvcnQgICAgICA6ICtwcm94eS5wb3J0LFxuICAgICAgcHJveHlBdXRoIDogcHJveHkuYXV0aCxcbiAgICAgIGhlYWRlcnMgICA6IHByb3h5SGVhZGVyc1xuICAgIH0sXG4gICAgaGVhZGVycyAgICAgICAgICAgIDogcmVxdWVzdC5oZWFkZXJzLFxuICAgIGNhICAgICAgICAgICAgICAgICA6IHJlcXVlc3QuY2EsXG4gICAgY2VydCAgICAgICAgICAgICAgIDogcmVxdWVzdC5jZXJ0LFxuICAgIGtleSAgICAgICAgICAgICAgICA6IHJlcXVlc3Qua2V5LFxuICAgIHBhc3NwaHJhc2UgICAgICAgICA6IHJlcXVlc3QucGFzc3BocmFzZSxcbiAgICBwZnggICAgICAgICAgICAgICAgOiByZXF1ZXN0LnBmeCxcbiAgICBjaXBoZXJzICAgICAgICAgICAgOiByZXF1ZXN0LmNpcGhlcnMsXG4gICAgcmVqZWN0VW5hdXRob3JpemVkIDogcmVxdWVzdC5yZWplY3RVbmF1dGhvcml6ZWQsXG4gICAgc2VjdXJlT3B0aW9ucyAgICAgIDogcmVxdWVzdC5zZWN1cmVPcHRpb25zLFxuICAgIHNlY3VyZVByb3RvY29sICAgICA6IHJlcXVlc3Quc2VjdXJlUHJvdG9jb2xcbiAgfVxuXG4gIHJldHVybiB0dW5uZWxPcHRpb25zXG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFR1bm5lbEZuTmFtZSh1cmksIHByb3h5KSB7XG4gIHZhciB1cmlQcm90b2NvbCA9ICh1cmkucHJvdG9jb2wgPT09ICdodHRwczonID8gJ2h0dHBzJyA6ICdodHRwJylcbiAgdmFyIHByb3h5UHJvdG9jb2wgPSAocHJveHkucHJvdG9jb2wgPT09ICdodHRwczonID8gJ0h0dHBzJyA6ICdIdHRwJylcbiAgcmV0dXJuIFt1cmlQcm90b2NvbCwgcHJveHlQcm90b2NvbF0uam9pbignT3ZlcicpXG59XG5cbmZ1bmN0aW9uIGdldFR1bm5lbEZuKHJlcXVlc3QpIHtcbiAgdmFyIHVyaSA9IHJlcXVlc3QudXJpXG4gIHZhciBwcm94eSA9IHJlcXVlc3QucHJveHlcbiAgdmFyIHR1bm5lbEZuTmFtZSA9IGNvbnN0cnVjdFR1bm5lbEZuTmFtZSh1cmksIHByb3h5KVxuICByZXR1cm4gdHVubmVsW3R1bm5lbEZuTmFtZV1cbn1cblxuXG5mdW5jdGlvbiBUdW5uZWwgKHJlcXVlc3QpIHtcbiAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICB0aGlzLnByb3h5SGVhZGVyV2hpdGVMaXN0ID0gZGVmYXVsdFByb3h5SGVhZGVyV2hpdGVMaXN0XG4gIHRoaXMucHJveHlIZWFkZXJFeGNsdXNpdmVMaXN0ID0gW11cbiAgaWYgKHR5cGVvZiByZXF1ZXN0LnR1bm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aGlzLnR1bm5lbE92ZXJyaWRlID0gcmVxdWVzdC50dW5uZWxcbiAgfVxufVxuXG5UdW5uZWwucHJvdG90eXBlLmlzRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCByZXF1ZXN0ID0gc2VsZi5yZXF1ZXN0XG4gIC8vIFR1bm5lbCBIVFRQUyBieSBkZWZhdWx0LiBBbGxvdyB0aGUgdXNlciB0byBvdmVycmlkZSB0aGlzIHNldHRpbmcuXG5cbiAgLy8gSWYgc2VsZi50dW5uZWxPdmVycmlkZSBpcyBzZXQgKHRoZSB1c2VyIHNwZWNpZmllZCBhIHZhbHVlKSwgdXNlIGl0LlxuICBpZiAodHlwZW9mIHNlbGYudHVubmVsT3ZlcnJpZGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHNlbGYudHVubmVsT3ZlcnJpZGVcbiAgfVxuXG4gIC8vIElmIHRoZSBkZXN0aW5hdGlvbiBpcyBIVFRQUywgdHVubmVsLlxuICBpZiAocmVxdWVzdC51cmkucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgZG8gbm90IHVzZSB0dW5uZWwuXG4gIHJldHVybiBmYWxzZVxufVxuXG5UdW5uZWwucHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCByZXF1ZXN0ID0gc2VsZi5yZXF1ZXN0XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblxuICBpZiAodHlwZW9mIHJlcXVlc3QucHJveHkgPT09ICdzdHJpbmcnKSB7XG4gICAgcmVxdWVzdC5wcm94eSA9IHVybC5wYXJzZShyZXF1ZXN0LnByb3h5KVxuICB9XG5cbiAgaWYgKCFyZXF1ZXN0LnByb3h5IHx8ICFyZXF1ZXN0LnR1bm5lbCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gU2V0dXAgUHJveHkgSGVhZGVyIEV4Y2x1c2l2ZSBMaXN0IGFuZCBXaGl0ZSBMaXN0XG4gIGlmIChvcHRpb25zLnByb3h5SGVhZGVyV2hpdGVMaXN0KSB7XG4gICAgc2VsZi5wcm94eUhlYWRlcldoaXRlTGlzdCA9IG9wdGlvbnMucHJveHlIZWFkZXJXaGl0ZUxpc3RcbiAgfVxuICBpZiAob3B0aW9ucy5wcm94eUhlYWRlckV4Y2x1c2l2ZUxpc3QpIHtcbiAgICBzZWxmLnByb3h5SGVhZGVyRXhjbHVzaXZlTGlzdCA9IG9wdGlvbnMucHJveHlIZWFkZXJFeGNsdXNpdmVMaXN0XG4gIH1cblxuICB2YXIgcHJveHlIZWFkZXJFeGNsdXNpdmVMaXN0ID0gc2VsZi5wcm94eUhlYWRlckV4Y2x1c2l2ZUxpc3QuY29uY2F0KGRlZmF1bHRQcm94eUhlYWRlckV4Y2x1c2l2ZUxpc3QpXG4gIHZhciBwcm94eUhlYWRlcldoaXRlTGlzdCA9IHNlbGYucHJveHlIZWFkZXJXaGl0ZUxpc3QuY29uY2F0KHByb3h5SGVhZGVyRXhjbHVzaXZlTGlzdClcblxuICAvLyBTZXR1cCBQcm94eSBIZWFkZXJzIGFuZCBQcm94eSBIZWFkZXJzIEhvc3RcbiAgLy8gT25seSBzZW5kIHRoZSBQcm94eSBXaGl0ZSBMaXN0ZWQgSGVhZGVyIG5hbWVzXG4gIHZhciBwcm94eUhlYWRlcnMgPSBjb25zdHJ1Y3RQcm94eUhlYWRlcldoaXRlTGlzdChyZXF1ZXN0LmhlYWRlcnMsIHByb3h5SGVhZGVyV2hpdGVMaXN0KVxuICBwcm94eUhlYWRlcnMuaG9zdCA9IGNvbnN0cnVjdFByb3h5SG9zdChyZXF1ZXN0LnVyaSlcblxuICBwcm94eUhlYWRlckV4Y2x1c2l2ZUxpc3QuZm9yRWFjaChyZXF1ZXN0LnJlbW92ZUhlYWRlciwgcmVxdWVzdClcblxuICAvLyBTZXQgQWdlbnQgZnJvbSBUdW5uZWwgRGF0YVxuICB2YXIgdHVubmVsRm4gPSBnZXRUdW5uZWxGbihyZXF1ZXN0KVxuICB2YXIgdHVubmVsT3B0aW9ucyA9IGNvbnN0cnVjdFR1bm5lbE9wdGlvbnMocmVxdWVzdCwgcHJveHlIZWFkZXJzKVxuICByZXF1ZXN0LmFnZW50ID0gdHVubmVsRm4odHVubmVsT3B0aW9ucylcblxuICByZXR1cm4gdHJ1ZVxufVxuXG5UdW5uZWwuZGVmYXVsdFByb3h5SGVhZGVyV2hpdGVMaXN0ID0gZGVmYXVsdFByb3h5SGVhZGVyV2hpdGVMaXN0XG5UdW5uZWwuZGVmYXVsdFByb3h5SGVhZGVyRXhjbHVzaXZlTGlzdCA9IGRlZmF1bHRQcm94eUhlYWRlckV4Y2x1c2l2ZUxpc3RcbmV4cG9ydHMuVHVubmVsID0gVHVubmVsXG4iLCIndXNlIHN0cmljdCdcblxudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJylcbiAgLCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJylcbiAgLCB1cmwgPSByZXF1aXJlKCd1cmwnKVxuICAsIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcbiAgLCBzdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxuICAsIHpsaWIgPSByZXF1aXJlKCd6bGliJylcbiAgLCBoYXdrID0gcmVxdWlyZSgnaGF3aycpXG4gICwgYXdzMiA9IHJlcXVpcmUoJ2F3cy1zaWduMicpXG4gICwgYXdzNCA9IHJlcXVpcmUoJ2F3czQnKVxuICAsIGh0dHBTaWduYXR1cmUgPSByZXF1aXJlKCdodHRwLXNpZ25hdHVyZScpXG4gICwgbWltZSA9IHJlcXVpcmUoJ21pbWUtdHlwZXMnKVxuICAsIHN0cmluZ3N0cmVhbSA9IHJlcXVpcmUoJ3N0cmluZ3N0cmVhbScpXG4gICwgY2FzZWxlc3MgPSByZXF1aXJlKCdjYXNlbGVzcycpXG4gICwgRm9yZXZlckFnZW50ID0gcmVxdWlyZSgnZm9yZXZlci1hZ2VudCcpXG4gICwgRm9ybURhdGEgPSByZXF1aXJlKCdmb3JtLWRhdGEnKVxuICAsIGV4dGVuZCA9IHJlcXVpcmUoJ2V4dGVuZCcpXG4gICwgaXNzdHJlYW0gPSByZXF1aXJlKCdpc3N0cmVhbScpXG4gICwgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnaXMtdHlwZWRhcnJheScpLnN0cmljdFxuICAsIGhlbHBlcnMgPSByZXF1aXJlKCcuL2xpYi9oZWxwZXJzJylcbiAgLCBjb29raWVzID0gcmVxdWlyZSgnLi9saWIvY29va2llcycpXG4gICwgZ2V0UHJveHlGcm9tVVJJID0gcmVxdWlyZSgnLi9saWIvZ2V0UHJveHlGcm9tVVJJJylcbiAgLCBRdWVyeXN0cmluZyA9IHJlcXVpcmUoJy4vbGliL3F1ZXJ5c3RyaW5nJykuUXVlcnlzdHJpbmdcbiAgLCBIYXIgPSByZXF1aXJlKCcuL2xpYi9oYXInKS5IYXJcbiAgLCBBdXRoID0gcmVxdWlyZSgnLi9saWIvYXV0aCcpLkF1dGhcbiAgLCBPQXV0aCA9IHJlcXVpcmUoJy4vbGliL29hdXRoJykuT0F1dGhcbiAgLCBNdWx0aXBhcnQgPSByZXF1aXJlKCcuL2xpYi9tdWx0aXBhcnQnKS5NdWx0aXBhcnRcbiAgLCBSZWRpcmVjdCA9IHJlcXVpcmUoJy4vbGliL3JlZGlyZWN0JykuUmVkaXJlY3RcbiAgLCBUdW5uZWwgPSByZXF1aXJlKCcuL2xpYi90dW5uZWwnKS5UdW5uZWxcbiAgLCBub3cgPSByZXF1aXJlKCdwZXJmb3JtYW5jZS1ub3cnKVxuICAsIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbnZhciBzYWZlU3RyaW5naWZ5ID0gaGVscGVycy5zYWZlU3RyaW5naWZ5XG4gICwgaXNSZWFkU3RyZWFtID0gaGVscGVycy5pc1JlYWRTdHJlYW1cbiAgLCB0b0Jhc2U2NCA9IGhlbHBlcnMudG9CYXNlNjRcbiAgLCBkZWZlciA9IGhlbHBlcnMuZGVmZXJcbiAgLCBjb3B5ID0gaGVscGVycy5jb3B5XG4gICwgdmVyc2lvbiA9IGhlbHBlcnMudmVyc2lvblxuICAsIGdsb2JhbENvb2tpZUphciA9IGNvb2tpZXMuamFyKClcblxuXG52YXIgZ2xvYmFsUG9vbCA9IHt9XG5cbmZ1bmN0aW9uIGZpbHRlckZvck5vblJlc2VydmVkKHJlc2VydmVkLCBvcHRpb25zKSB7XG4gIC8vIEZpbHRlciBvdXQgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgcmVzZXJ2ZWQuXG4gIC8vIFJlc2VydmVkIHZhbHVlcyBhcmUgcGFzc2VkIGluIGF0IGNhbGwgc2l0ZS5cblxuICB2YXIgb2JqZWN0ID0ge31cbiAgZm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XG4gICAgdmFyIG5vdFJlc2VydmVkID0gKHJlc2VydmVkLmluZGV4T2YoaSkgPT09IC0xKVxuICAgIGlmIChub3RSZXNlcnZlZCkge1xuICAgICAgb2JqZWN0W2ldID0gb3B0aW9uc1tpXVxuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0XG59XG5cbmZ1bmN0aW9uIGZpbHRlck91dFJlc2VydmVkRnVuY3Rpb25zKHJlc2VydmVkLCBvcHRpb25zKSB7XG4gIC8vIEZpbHRlciBvdXQgcHJvcGVydGllcyB0aGF0IGFyZSBmdW5jdGlvbnMgYW5kIGFyZSByZXNlcnZlZC5cbiAgLy8gUmVzZXJ2ZWQgdmFsdWVzIGFyZSBwYXNzZWQgaW4gYXQgY2FsbCBzaXRlLlxuXG4gIHZhciBvYmplY3QgPSB7fVxuICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICB2YXIgaXNSZXNlcnZlZCA9ICEocmVzZXJ2ZWQuaW5kZXhPZihpKSA9PT0gLTEpXG4gICAgdmFyIGlzRnVuY3Rpb24gPSAodHlwZW9mIG9wdGlvbnNbaV0gPT09ICdmdW5jdGlvbicpXG4gICAgaWYgKCEoaXNSZXNlcnZlZCAmJiBpc0Z1bmN0aW9uKSkge1xuICAgICAgb2JqZWN0W2ldID0gb3B0aW9uc1tpXVxuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0XG5cbn1cblxuLy8gUmV0dXJuIGEgc2ltcGxlciByZXF1ZXN0IG9iamVjdCB0byBhbGxvdyBzZXJpYWxpemF0aW9uXG5mdW5jdGlvbiByZXF1ZXN0VG9KU09OKCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgcmV0dXJuIHtcbiAgICB1cmk6IHNlbGYudXJpLFxuICAgIG1ldGhvZDogc2VsZi5tZXRob2QsXG4gICAgaGVhZGVyczogc2VsZi5oZWFkZXJzXG4gIH1cbn1cblxuLy8gUmV0dXJuIGEgc2ltcGxlciByZXNwb25zZSBvYmplY3QgdG8gYWxsb3cgc2VyaWFsaXphdGlvblxuZnVuY3Rpb24gcmVzcG9uc2VUb0pTT04oKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICByZXR1cm4ge1xuICAgIHN0YXR1c0NvZGU6IHNlbGYuc3RhdHVzQ29kZSxcbiAgICBib2R5OiBzZWxmLmJvZHksXG4gICAgaGVhZGVyczogc2VsZi5oZWFkZXJzLFxuICAgIHJlcXVlc3Q6IHJlcXVlc3RUb0pTT04uY2FsbChzZWxmLnJlcXVlc3QpXG4gIH1cbn1cblxuZnVuY3Rpb24gUmVxdWVzdCAob3B0aW9ucykge1xuICAvLyBpZiBnaXZlbiB0aGUgbWV0aG9kIHByb3BlcnR5IGluIG9wdGlvbnMsIHNldCBwcm9wZXJ0eSBleHBsaWNpdE1ldGhvZCB0byB0cnVlXG5cbiAgLy8gZXh0ZW5kIHRoZSBSZXF1ZXN0IGluc3RhbmNlIHdpdGggYW55IG5vbi1yZXNlcnZlZCBwcm9wZXJ0aWVzXG4gIC8vIHJlbW92ZSBhbnkgcmVzZXJ2ZWQgZnVuY3Rpb25zIGZyb20gdGhlIG9wdGlvbnMgb2JqZWN0XG4gIC8vIHNldCBSZXF1ZXN0IGluc3RhbmNlIHRvIGJlIHJlYWRhYmxlIGFuZCB3cml0YWJsZVxuICAvLyBjYWxsIGluaXRcblxuICB2YXIgc2VsZiA9IHRoaXNcblxuICAvLyBzdGFydCB3aXRoIEhBUiwgdGhlbiBvdmVycmlkZSB3aXRoIGFkZGl0aW9uYWwgb3B0aW9uc1xuICBpZiAob3B0aW9ucy5oYXIpIHtcbiAgICBzZWxmLl9oYXIgPSBuZXcgSGFyKHNlbGYpXG4gICAgb3B0aW9ucyA9IHNlbGYuX2hhci5vcHRpb25zKG9wdGlvbnMpXG4gIH1cblxuICBzdHJlYW0uU3RyZWFtLmNhbGwoc2VsZilcbiAgdmFyIHJlc2VydmVkID0gT2JqZWN0LmtleXMoUmVxdWVzdC5wcm90b3R5cGUpXG4gIHZhciBub25SZXNlcnZlZCA9IGZpbHRlckZvck5vblJlc2VydmVkKHJlc2VydmVkLCBvcHRpb25zKVxuXG4gIGV4dGVuZChzZWxmLCBub25SZXNlcnZlZClcbiAgb3B0aW9ucyA9IGZpbHRlck91dFJlc2VydmVkRnVuY3Rpb25zKHJlc2VydmVkLCBvcHRpb25zKVxuXG4gIHNlbGYucmVhZGFibGUgPSB0cnVlXG4gIHNlbGYud3JpdGFibGUgPSB0cnVlXG4gIGlmIChvcHRpb25zLm1ldGhvZCkge1xuICAgIHNlbGYuZXhwbGljaXRNZXRob2QgPSB0cnVlXG4gIH1cbiAgc2VsZi5fcXMgPSBuZXcgUXVlcnlzdHJpbmcoc2VsZilcbiAgc2VsZi5fYXV0aCA9IG5ldyBBdXRoKHNlbGYpXG4gIHNlbGYuX29hdXRoID0gbmV3IE9BdXRoKHNlbGYpXG4gIHNlbGYuX211bHRpcGFydCA9IG5ldyBNdWx0aXBhcnQoc2VsZilcbiAgc2VsZi5fcmVkaXJlY3QgPSBuZXcgUmVkaXJlY3Qoc2VsZilcbiAgc2VsZi5fdHVubmVsID0gbmV3IFR1bm5lbChzZWxmKVxuICBzZWxmLmluaXQob3B0aW9ucylcbn1cblxudXRpbC5pbmhlcml0cyhSZXF1ZXN0LCBzdHJlYW0uU3RyZWFtKVxuXG4vLyBEZWJ1Z2dpbmdcblJlcXVlc3QuZGVidWcgPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHICYmIC9cXGJyZXF1ZXN0XFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpXG5mdW5jdGlvbiBkZWJ1ZygpIHtcbiAgaWYgKFJlcXVlc3QuZGVidWcpIHtcbiAgICBjb25zb2xlLmVycm9yKCdSRVFVRVNUICVzJywgdXRpbC5mb3JtYXQuYXBwbHkodXRpbCwgYXJndW1lbnRzKSlcbiAgfVxufVxuUmVxdWVzdC5wcm90b3R5cGUuZGVidWcgPSBkZWJ1Z1xuXG5SZXF1ZXN0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgLy8gaW5pdCgpIGNvbnRhaW5zIGFsbCB0aGUgY29kZSB0byBzZXR1cCB0aGUgcmVxdWVzdCBvYmplY3QuXG4gIC8vIHRoZSBhY3R1YWwgb3V0Z29pbmcgcmVxdWVzdCBpcyBub3Qgc3RhcnRlZCB1bnRpbCBzdGFydCgpIGlzIGNhbGxlZFxuICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGJvdGggdGhlIGNvbnN0cnVjdG9yIGFuZCBvbiByZWRpcmVjdC5cbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG4gIHNlbGYuaGVhZGVycyA9IHNlbGYuaGVhZGVycyA/IGNvcHkoc2VsZi5oZWFkZXJzKSA6IHt9XG5cbiAgLy8gRGVsZXRlIGhlYWRlcnMgd2l0aCB2YWx1ZSB1bmRlZmluZWQgc2luY2UgdGhleSBicmVha1xuICAvLyBDbGllbnRSZXF1ZXN0Lk91dGdvaW5nTWVzc2FnZS5zZXRIZWFkZXIgaW4gbm9kZSAwLjEyXG4gIGZvciAodmFyIGhlYWRlck5hbWUgaW4gc2VsZi5oZWFkZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBzZWxmLmhlYWRlcnNbaGVhZGVyTmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkZWxldGUgc2VsZi5oZWFkZXJzW2hlYWRlck5hbWVdXG4gICAgfVxuICB9XG5cbiAgY2FzZWxlc3MuaHR0cGlmeShzZWxmLCBzZWxmLmhlYWRlcnMpXG5cbiAgaWYgKCFzZWxmLm1ldGhvZCkge1xuICAgIHNlbGYubWV0aG9kID0gb3B0aW9ucy5tZXRob2QgfHwgJ0dFVCdcbiAgfVxuICBpZiAoIXNlbGYubG9jYWxBZGRyZXNzKSB7XG4gICAgc2VsZi5sb2NhbEFkZHJlc3MgPSBvcHRpb25zLmxvY2FsQWRkcmVzc1xuICB9XG5cbiAgc2VsZi5fcXMuaW5pdChvcHRpb25zKVxuXG4gIGRlYnVnKG9wdGlvbnMpXG4gIGlmICghc2VsZi5wb29sICYmIHNlbGYucG9vbCAhPT0gZmFsc2UpIHtcbiAgICBzZWxmLnBvb2wgPSBnbG9iYWxQb29sXG4gIH1cbiAgc2VsZi5kZXN0cyA9IHNlbGYuZGVzdHMgfHwgW11cbiAgc2VsZi5fX2lzUmVxdWVzdFJlcXVlc3QgPSB0cnVlXG5cbiAgLy8gUHJvdGVjdCBhZ2FpbnN0IGRvdWJsZSBjYWxsYmFja1xuICBpZiAoIXNlbGYuX2NhbGxiYWNrICYmIHNlbGYuY2FsbGJhY2spIHtcbiAgICBzZWxmLl9jYWxsYmFjayA9IHNlbGYuY2FsbGJhY2tcbiAgICBzZWxmLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHNlbGYuX2NhbGxiYWNrQ2FsbGVkKSB7XG4gICAgICAgIHJldHVybiAvLyBQcmludCBhIHdhcm5pbmcgbWF5YmU/XG4gICAgICB9XG4gICAgICBzZWxmLl9jYWxsYmFja0NhbGxlZCA9IHRydWVcbiAgICAgIHNlbGYuX2NhbGxiYWNrLmFwcGx5KHNlbGYsIGFyZ3VtZW50cylcbiAgICB9XG4gICAgc2VsZi5vbignZXJyb3InLCBzZWxmLmNhbGxiYWNrLmJpbmQoKSlcbiAgICBzZWxmLm9uKCdjb21wbGV0ZScsIHNlbGYuY2FsbGJhY2suYmluZChzZWxmLCBudWxsKSlcbiAgfVxuXG4gIC8vIFBlb3BsZSB1c2UgdGhpcyBwcm9wZXJ0eSBpbnN0ZWFkIGFsbCB0aGUgdGltZSwgc28gc3VwcG9ydCBpdFxuICBpZiAoIXNlbGYudXJpICYmIHNlbGYudXJsKSB7XG4gICAgc2VsZi51cmkgPSBzZWxmLnVybFxuICAgIGRlbGV0ZSBzZWxmLnVybFxuICB9XG5cbiAgLy8gSWYgdGhlcmUncyBhIGJhc2VVcmwsIHRoZW4gdXNlIGl0IGFzIHRoZSBiYXNlIFVSTCAoaS5lLiB1cmkgbXVzdCBiZVxuICAvLyBzcGVjaWZpZWQgYXMgYSByZWxhdGl2ZSBwYXRoIGFuZCBpcyBhcHBlbmRlZCB0byBiYXNlVXJsKS5cbiAgaWYgKHNlbGYuYmFzZVVybCkge1xuICAgIGlmICh0eXBlb2Ygc2VsZi5iYXNlVXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ29wdGlvbnMuYmFzZVVybCBtdXN0IGJlIGEgc3RyaW5nJykpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZWxmLnVyaSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdvcHRpb25zLnVyaSBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gdXNpbmcgb3B0aW9ucy5iYXNlVXJsJykpXG4gICAgfVxuXG4gICAgaWYgKHNlbGYudXJpLmluZGV4T2YoJy8vJykgPT09IDAgfHwgc2VsZi51cmkuaW5kZXhPZignOi8vJykgIT09IC0xKSB7XG4gICAgICByZXR1cm4gc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignb3B0aW9ucy51cmkgbXVzdCBiZSBhIHBhdGggd2hlbiB1c2luZyBvcHRpb25zLmJhc2VVcmwnKSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYWxsIGNhc2VzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlJ3Mgb25seSBvbmUgc2xhc2ggYmV0d2VlblxuICAgIC8vIGJhc2VVcmwgYW5kIHVyaS5cbiAgICB2YXIgYmFzZVVybEVuZHNXaXRoU2xhc2ggPSBzZWxmLmJhc2VVcmwubGFzdEluZGV4T2YoJy8nKSA9PT0gc2VsZi5iYXNlVXJsLmxlbmd0aCAtIDFcbiAgICB2YXIgdXJpU3RhcnRzV2l0aFNsYXNoID0gc2VsZi51cmkuaW5kZXhPZignLycpID09PSAwXG5cbiAgICBpZiAoYmFzZVVybEVuZHNXaXRoU2xhc2ggJiYgdXJpU3RhcnRzV2l0aFNsYXNoKSB7XG4gICAgICBzZWxmLnVyaSA9IHNlbGYuYmFzZVVybCArIHNlbGYudXJpLnNsaWNlKDEpXG4gICAgfSBlbHNlIGlmIChiYXNlVXJsRW5kc1dpdGhTbGFzaCB8fCB1cmlTdGFydHNXaXRoU2xhc2gpIHtcbiAgICAgIHNlbGYudXJpID0gc2VsZi5iYXNlVXJsICsgc2VsZi51cmlcbiAgICB9IGVsc2UgaWYgKHNlbGYudXJpID09PSAnJykge1xuICAgICAgc2VsZi51cmkgPSBzZWxmLmJhc2VVcmxcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi51cmkgPSBzZWxmLmJhc2VVcmwgKyAnLycgKyBzZWxmLnVyaVxuICAgIH1cbiAgICBkZWxldGUgc2VsZi5iYXNlVXJsXG4gIH1cblxuICAvLyBBIFVSSSBpcyBuZWVkZWQgYnkgdGhpcyBwb2ludCwgZW1pdCBlcnJvciBpZiB3ZSBoYXZlbid0IGJlZW4gYWJsZSB0byBnZXQgb25lXG4gIGlmICghc2VsZi51cmkpIHtcbiAgICByZXR1cm4gc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignb3B0aW9ucy51cmkgaXMgYSByZXF1aXJlZCBhcmd1bWVudCcpKVxuICB9XG5cbiAgLy8gSWYgYSBzdHJpbmcgVVJJL1VSTCB3YXMgZ2l2ZW4sIHBhcnNlIGl0IGludG8gYSBVUkwgb2JqZWN0XG4gIGlmICh0eXBlb2Ygc2VsZi51cmkgPT09ICdzdHJpbmcnKSB7XG4gICAgc2VsZi51cmkgPSB1cmwucGFyc2Uoc2VsZi51cmkpXG4gIH1cblxuICAvLyBTb21lIFVSTCBvYmplY3RzIGFyZSBub3QgZnJvbSBhIFVSTCBwYXJzZWQgc3RyaW5nIGFuZCBuZWVkIGhyZWYgYWRkZWRcbiAgaWYgKCFzZWxmLnVyaS5ocmVmKSB7XG4gICAgc2VsZi51cmkuaHJlZiA9IHVybC5mb3JtYXQoc2VsZi51cmkpXG4gIH1cblxuICAvLyBERVBSRUNBVEVEOiBXYXJuaW5nIGZvciB1c2VycyBvZiB0aGUgb2xkIFVuaXggU29ja2V0cyBVUkwgU2NoZW1lXG4gIGlmIChzZWxmLnVyaS5wcm90b2NvbCA9PT0gJ3VuaXg6Jykge1xuICAgIHJldHVybiBzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdgdW5peDovL2AgVVJMIHNjaGVtZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBQbGVhc2UgdXNlIHRoZSBmb3JtYXQgYGh0dHA6Ly91bml4OlNPQ0tFVDpQQVRIYCcpKVxuICB9XG5cbiAgLy8gU3VwcG9ydCBVbml4IFNvY2tldHNcbiAgaWYgKHNlbGYudXJpLmhvc3QgPT09ICd1bml4Jykge1xuICAgIHNlbGYuZW5hYmxlVW5peFNvY2tldCgpXG4gIH1cblxuICBpZiAoc2VsZi5zdHJpY3RTU0wgPT09IGZhbHNlKSB7XG4gICAgc2VsZi5yZWplY3RVbmF1dGhvcml6ZWQgPSBmYWxzZVxuICB9XG5cbiAgaWYgKCFzZWxmLnVyaS5wYXRobmFtZSkge3NlbGYudXJpLnBhdGhuYW1lID0gJy8nfVxuXG4gIGlmICghKHNlbGYudXJpLmhvc3QgfHwgKHNlbGYudXJpLmhvc3RuYW1lICYmIHNlbGYudXJpLnBvcnQpKSAmJiAhc2VsZi51cmkuaXNVbml4KSB7XG4gICAgLy8gSW52YWxpZCBVUkk6IGl0IG1heSBnZW5lcmF0ZSBsb3Qgb2YgYmFkIGVycm9ycywgbGlrZSAnVHlwZUVycm9yOiBDYW5ub3QgY2FsbCBtZXRob2QgYGluZGV4T2ZgIG9mIHVuZGVmaW5lZCcgaW4gQ29va2llSmFyXG4gICAgLy8gRGV0ZWN0IGFuZCByZWplY3QgaXQgYXMgc29vbiBhcyBwb3NzaWJsZVxuICAgIHZhciBmYXVsdHlVcmkgPSB1cmwuZm9ybWF0KHNlbGYudXJpKVxuICAgIHZhciBtZXNzYWdlID0gJ0ludmFsaWQgVVJJIFwiJyArIGZhdWx0eVVyaSArICdcIidcbiAgICBpZiAoT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBObyBvcHRpb24gPyBUaGlzIGNhbiBiZSB0aGUgc2lnbiBvZiBhIHJlZGlyZWN0XG4gICAgICAvLyBBcyB0aGlzIGlzIGEgY2FzZSB3aGVyZSB0aGUgdXNlciBjYW5ub3QgZG8gYW55dGhpbmcgKHRoZXkgZGlkbid0IGNhbGwgcmVxdWVzdCBkaXJlY3RseSB3aXRoIHRoaXMgVVJMKVxuICAgICAgLy8gdGhleSBzaG91bGQgYmUgd2FybmVkIHRoYXQgaXQgY2FuIGJlIGNhdXNlZCBieSBhIHJlZGlyZWN0aW9uIChjYW4gc2F2ZSBzb21lIGhhaXIpXG4gICAgICBtZXNzYWdlICs9ICcuIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBhIGNyYXBweSByZWRpcmVjdGlvbi4nXG4gICAgfVxuICAgIC8vIFRoaXMgZXJyb3Igd2FzIGZhdGFsXG4gICAgc2VsZi5hYm9ydCgpXG4gICAgcmV0dXJuIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpXG4gIH1cblxuICBpZiAoIXNlbGYuaGFzT3duUHJvcGVydHkoJ3Byb3h5JykpIHtcbiAgICBzZWxmLnByb3h5ID0gZ2V0UHJveHlGcm9tVVJJKHNlbGYudXJpKVxuICB9XG5cbiAgc2VsZi50dW5uZWwgPSBzZWxmLl90dW5uZWwuaXNFbmFibGVkKClcbiAgaWYgKHNlbGYucHJveHkpIHtcbiAgICBzZWxmLl90dW5uZWwuc2V0dXAob3B0aW9ucylcbiAgfVxuXG4gIHNlbGYuX3JlZGlyZWN0Lm9uUmVxdWVzdChvcHRpb25zKVxuXG4gIHNlbGYuc2V0SG9zdCA9IGZhbHNlXG4gIGlmICghc2VsZi5oYXNIZWFkZXIoJ2hvc3QnKSkge1xuICAgIHZhciBob3N0SGVhZGVyTmFtZSA9IHNlbGYub3JpZ2luYWxIb3N0SGVhZGVyTmFtZSB8fCAnaG9zdCdcbiAgICAvLyBXaGVuIHVzZWQgd2l0aCBhbiBJUHY2IGFkZHJlc3MsIGBob3N0YCB3aWxsIHByb3ZpZGVcbiAgICAvLyB0aGUgY29ycmVjdCBicmFja2V0ZWQgZm9ybWF0LCB1bmxpa2UgdXNpbmcgYGhvc3RuYW1lYCBhbmRcbiAgICAvLyBvcHRpb25hbGx5IGFkZGluZyB0aGUgYHBvcnRgIHdoZW4gbmVjZXNzYXJ5LlxuICAgIHNlbGYuc2V0SGVhZGVyKGhvc3RIZWFkZXJOYW1lLCBzZWxmLnVyaS5ob3N0KVxuICAgIHNlbGYuc2V0SG9zdCA9IHRydWVcbiAgfVxuXG4gIHNlbGYuamFyKHNlbGYuX2phciB8fCBvcHRpb25zLmphcilcblxuICBpZiAoIXNlbGYudXJpLnBvcnQpIHtcbiAgICBpZiAoc2VsZi51cmkucHJvdG9jb2wgPT09ICdodHRwOicpIHtzZWxmLnVyaS5wb3J0ID0gODB9XG4gICAgZWxzZSBpZiAoc2VsZi51cmkucHJvdG9jb2wgPT09ICdodHRwczonKSB7c2VsZi51cmkucG9ydCA9IDQ0M31cbiAgfVxuXG4gIGlmIChzZWxmLnByb3h5ICYmICFzZWxmLnR1bm5lbCkge1xuICAgIHNlbGYucG9ydCA9IHNlbGYucHJveHkucG9ydFxuICAgIHNlbGYuaG9zdCA9IHNlbGYucHJveHkuaG9zdG5hbWVcbiAgfSBlbHNlIHtcbiAgICBzZWxmLnBvcnQgPSBzZWxmLnVyaS5wb3J0XG4gICAgc2VsZi5ob3N0ID0gc2VsZi51cmkuaG9zdG5hbWVcbiAgfVxuXG4gIGlmIChvcHRpb25zLmZvcm0pIHtcbiAgICBzZWxmLmZvcm0ob3B0aW9ucy5mb3JtKVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICB2YXIgZm9ybURhdGEgPSBvcHRpb25zLmZvcm1EYXRhXG4gICAgdmFyIHJlcXVlc3RGb3JtID0gc2VsZi5mb3JtKClcbiAgICB2YXIgYXBwZW5kRm9ybVZhbHVlID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnb3B0aW9ucycpKSB7XG4gICAgICAgIHJlcXVlc3RGb3JtLmFwcGVuZChrZXksIHZhbHVlLnZhbHVlLCB2YWx1ZS5vcHRpb25zKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdEZvcm0uYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGZvcm1LZXkgaW4gZm9ybURhdGEpIHtcbiAgICAgIGlmIChmb3JtRGF0YS5oYXNPd25Qcm9wZXJ0eShmb3JtS2V5KSkge1xuICAgICAgICB2YXIgZm9ybVZhbHVlID0gZm9ybURhdGFbZm9ybUtleV1cbiAgICAgICAgaWYgKGZvcm1WYWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb3JtVmFsdWUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGFwcGVuZEZvcm1WYWx1ZShmb3JtS2V5LCBmb3JtVmFsdWVbal0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFwcGVuZEZvcm1WYWx1ZShmb3JtS2V5LCBmb3JtVmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy5xcykge1xuICAgIHNlbGYucXMob3B0aW9ucy5xcylcbiAgfVxuXG4gIGlmIChzZWxmLnVyaS5wYXRoKSB7XG4gICAgc2VsZi5wYXRoID0gc2VsZi51cmkucGF0aFxuICB9IGVsc2Uge1xuICAgIHNlbGYucGF0aCA9IHNlbGYudXJpLnBhdGhuYW1lICsgKHNlbGYudXJpLnNlYXJjaCB8fCAnJylcbiAgfVxuXG4gIGlmIChzZWxmLnBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgc2VsZi5wYXRoID0gJy8nXG4gIH1cblxuICAvLyBBdXRoIG11c3QgaGFwcGVuIGxhc3QgaW4gY2FzZSBzaWduaW5nIGlzIGRlcGVuZGVudCBvbiBvdGhlciBoZWFkZXJzXG4gIGlmIChvcHRpb25zLmF3cykge1xuICAgIHNlbGYuYXdzKG9wdGlvbnMuYXdzKVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuaGF3aykge1xuICAgIHNlbGYuaGF3ayhvcHRpb25zLmhhd2spXG4gIH1cblxuICBpZiAob3B0aW9ucy5odHRwU2lnbmF0dXJlKSB7XG4gICAgc2VsZi5odHRwU2lnbmF0dXJlKG9wdGlvbnMuaHR0cFNpZ25hdHVyZSlcbiAgfVxuXG4gIGlmIChvcHRpb25zLmF1dGgpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMuYXV0aCwgJ3VzZXJuYW1lJykpIHtcbiAgICAgIG9wdGlvbnMuYXV0aC51c2VyID0gb3B0aW9ucy5hdXRoLnVzZXJuYW1lXG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucy5hdXRoLCAncGFzc3dvcmQnKSkge1xuICAgICAgb3B0aW9ucy5hdXRoLnBhc3MgPSBvcHRpb25zLmF1dGgucGFzc3dvcmRcbiAgICB9XG5cbiAgICBzZWxmLmF1dGgoXG4gICAgICBvcHRpb25zLmF1dGgudXNlcixcbiAgICAgIG9wdGlvbnMuYXV0aC5wYXNzLFxuICAgICAgb3B0aW9ucy5hdXRoLnNlbmRJbW1lZGlhdGVseSxcbiAgICAgIG9wdGlvbnMuYXV0aC5iZWFyZXJcbiAgICApXG4gIH1cblxuICBpZiAoc2VsZi5nemlwICYmICFzZWxmLmhhc0hlYWRlcignYWNjZXB0LWVuY29kaW5nJykpIHtcbiAgICBzZWxmLnNldEhlYWRlcignYWNjZXB0LWVuY29kaW5nJywgJ2d6aXAsIGRlZmxhdGUnKVxuICB9XG5cbiAgaWYgKHNlbGYudXJpLmF1dGggJiYgIXNlbGYuaGFzSGVhZGVyKCdhdXRob3JpemF0aW9uJykpIHtcbiAgICB2YXIgdXJpQXV0aFBpZWNlcyA9IHNlbGYudXJpLmF1dGguc3BsaXQoJzonKS5tYXAoZnVuY3Rpb24oaXRlbSkge3JldHVybiBzZWxmLl9xcy51bmVzY2FwZShpdGVtKX0pXG4gICAgc2VsZi5hdXRoKHVyaUF1dGhQaWVjZXNbMF0sIHVyaUF1dGhQaWVjZXMuc2xpY2UoMSkuam9pbignOicpLCB0cnVlKVxuICB9XG5cbiAgaWYgKCFzZWxmLnR1bm5lbCAmJiBzZWxmLnByb3h5ICYmIHNlbGYucHJveHkuYXV0aCAmJiAhc2VsZi5oYXNIZWFkZXIoJ3Byb3h5LWF1dGhvcml6YXRpb24nKSkge1xuICAgIHZhciBwcm94eUF1dGhQaWVjZXMgPSBzZWxmLnByb3h5LmF1dGguc3BsaXQoJzonKS5tYXAoZnVuY3Rpb24oaXRlbSkge3JldHVybiBzZWxmLl9xcy51bmVzY2FwZShpdGVtKX0pXG4gICAgdmFyIGF1dGhIZWFkZXIgPSAnQmFzaWMgJyArIHRvQmFzZTY0KHByb3h5QXV0aFBpZWNlcy5qb2luKCc6JykpXG4gICAgc2VsZi5zZXRIZWFkZXIoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCBhdXRoSGVhZGVyKVxuICB9XG5cbiAgaWYgKHNlbGYucHJveHkgJiYgIXNlbGYudHVubmVsKSB7XG4gICAgc2VsZi5wYXRoID0gKHNlbGYudXJpLnByb3RvY29sICsgJy8vJyArIHNlbGYudXJpLmhvc3QgKyBzZWxmLnBhdGgpXG4gIH1cblxuICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgc2VsZi5qc29uKG9wdGlvbnMuanNvbilcbiAgfVxuICBpZiAob3B0aW9ucy5tdWx0aXBhcnQpIHtcbiAgICBzZWxmLm11bHRpcGFydChvcHRpb25zLm11bHRpcGFydClcbiAgfVxuXG4gIGlmIChvcHRpb25zLnRpbWUpIHtcbiAgICBzZWxmLnRpbWluZyA9IHRydWVcblxuICAgIC8vIE5PVEU6IGVsYXBzZWRUaW1lIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgLnRpbWluZ3NcbiAgICBzZWxmLmVsYXBzZWRUaW1lID0gc2VsZi5lbGFwc2VkVGltZSB8fCAwXG4gIH1cblxuICBmdW5jdGlvbiBzZXRDb250ZW50TGVuZ3RoICgpIHtcbiAgICBpZiAoaXNUeXBlZEFycmF5KHNlbGYuYm9keSkpIHtcbiAgICAgIHNlbGYuYm9keSA9IEJ1ZmZlci5mcm9tKHNlbGYuYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXNlbGYuaGFzSGVhZGVyKCdjb250ZW50LWxlbmd0aCcpKSB7XG4gICAgICB2YXIgbGVuZ3RoXG4gICAgICBpZiAodHlwZW9mIHNlbGYuYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc2VsZi5ib2R5KVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzZWxmLmJvZHkpKSB7XG4gICAgICAgIGxlbmd0aCA9IHNlbGYuYm9keS5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtyZXR1cm4gYSArIGIubGVuZ3RofSwgMClcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBsZW5ndGggPSBzZWxmLmJvZHkubGVuZ3RoXG4gICAgICB9XG5cbiAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgc2VsZi5zZXRIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgbGVuZ3RoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignQXJndW1lbnQgZXJyb3IsIG9wdGlvbnMuYm9keS4nKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHNlbGYuYm9keSAmJiAhaXNzdHJlYW0oc2VsZi5ib2R5KSkge1xuICAgIHNldENvbnRlbnRMZW5ndGgoKVxuICB9XG5cbiAgaWYgKG9wdGlvbnMub2F1dGgpIHtcbiAgICBzZWxmLm9hdXRoKG9wdGlvbnMub2F1dGgpXG4gIH0gZWxzZSBpZiAoc2VsZi5fb2F1dGgucGFyYW1zICYmIHNlbGYuaGFzSGVhZGVyKCdhdXRob3JpemF0aW9uJykpIHtcbiAgICBzZWxmLm9hdXRoKHNlbGYuX29hdXRoLnBhcmFtcylcbiAgfVxuXG4gIHZhciBwcm90b2NvbCA9IHNlbGYucHJveHkgJiYgIXNlbGYudHVubmVsID8gc2VsZi5wcm94eS5wcm90b2NvbCA6IHNlbGYudXJpLnByb3RvY29sXG4gICAgLCBkZWZhdWx0TW9kdWxlcyA9IHsnaHR0cDonOmh0dHAsICdodHRwczonOmh0dHBzfVxuICAgICwgaHR0cE1vZHVsZXMgPSBzZWxmLmh0dHBNb2R1bGVzIHx8IHt9XG5cbiAgc2VsZi5odHRwTW9kdWxlID0gaHR0cE1vZHVsZXNbcHJvdG9jb2xdIHx8IGRlZmF1bHRNb2R1bGVzW3Byb3RvY29sXVxuXG4gIGlmICghc2VsZi5odHRwTW9kdWxlKSB7XG4gICAgcmV0dXJuIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ0ludmFsaWQgcHJvdG9jb2w6ICcgKyBwcm90b2NvbCkpXG4gIH1cblxuICBpZiAob3B0aW9ucy5jYSkge1xuICAgIHNlbGYuY2EgPSBvcHRpb25zLmNhXG4gIH1cblxuICBpZiAoIXNlbGYuYWdlbnQpIHtcbiAgICBpZiAob3B0aW9ucy5hZ2VudE9wdGlvbnMpIHtcbiAgICAgIHNlbGYuYWdlbnRPcHRpb25zID0gb3B0aW9ucy5hZ2VudE9wdGlvbnNcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hZ2VudENsYXNzKSB7XG4gICAgICBzZWxmLmFnZW50Q2xhc3MgPSBvcHRpb25zLmFnZW50Q2xhc3NcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9yZXZlcikge1xuICAgICAgdmFyIHYgPSB2ZXJzaW9uKClcbiAgICAgIC8vIHVzZSBGb3JldmVyQWdlbnQgaW4gbm9kZSAwLjEwLSBvbmx5XG4gICAgICBpZiAodi5tYWpvciA9PT0gMCAmJiB2Lm1pbm9yIDw9IDEwKSB7XG4gICAgICAgIHNlbGYuYWdlbnRDbGFzcyA9IHByb3RvY29sID09PSAnaHR0cDonID8gRm9yZXZlckFnZW50IDogRm9yZXZlckFnZW50LlNTTFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5hZ2VudENsYXNzID0gc2VsZi5odHRwTW9kdWxlLkFnZW50XG4gICAgICAgIHNlbGYuYWdlbnRPcHRpb25zID0gc2VsZi5hZ2VudE9wdGlvbnMgfHwge31cbiAgICAgICAgc2VsZi5hZ2VudE9wdGlvbnMua2VlcEFsaXZlID0gdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLmFnZW50Q2xhc3MgPSBzZWxmLmh0dHBNb2R1bGUuQWdlbnRcbiAgICB9XG4gIH1cblxuICBpZiAoc2VsZi5wb29sID09PSBmYWxzZSkge1xuICAgIHNlbGYuYWdlbnQgPSBmYWxzZVxuICB9IGVsc2Uge1xuICAgIHNlbGYuYWdlbnQgPSBzZWxmLmFnZW50IHx8IHNlbGYuZ2V0TmV3QWdlbnQoKVxuICB9XG5cbiAgc2VsZi5vbigncGlwZScsIGZ1bmN0aW9uIChzcmMpIHtcbiAgICBpZiAoc2VsZi5udGljayAmJiBzZWxmLl9zdGFydGVkKSB7XG4gICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdZb3UgY2Fubm90IHBpcGUgdG8gdGhpcyBzdHJlYW0gYWZ0ZXIgdGhlIG91dGJvdW5kIHJlcXVlc3QgaGFzIHN0YXJ0ZWQuJykpXG4gICAgfVxuICAgIHNlbGYuc3JjID0gc3JjXG4gICAgaWYgKGlzUmVhZFN0cmVhbShzcmMpKSB7XG4gICAgICBpZiAoIXNlbGYuaGFzSGVhZGVyKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICBzZWxmLnNldEhlYWRlcignY29udGVudC10eXBlJywgbWltZS5sb29rdXAoc3JjLnBhdGgpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3JjLmhlYWRlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBzcmMuaGVhZGVycykge1xuICAgICAgICAgIGlmICghc2VsZi5oYXNIZWFkZXIoaSkpIHtcbiAgICAgICAgICAgIHNlbGYuc2V0SGVhZGVyKGksIHNyYy5oZWFkZXJzW2ldKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNlbGYuX2pzb24gJiYgIXNlbGYuaGFzSGVhZGVyKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICBzZWxmLnNldEhlYWRlcignY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKVxuICAgICAgfVxuICAgICAgaWYgKHNyYy5tZXRob2QgJiYgIXNlbGYuZXhwbGljaXRNZXRob2QpIHtcbiAgICAgICAgc2VsZi5tZXRob2QgPSBzcmMubWV0aG9kXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2VsZi5vbigncGlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyAgIGNvbnNvbGUuZXJyb3IoJ1lvdSBoYXZlIGFscmVhZHkgcGlwZWQgdG8gdGhpcyBzdHJlYW0uIFBpcGVpbmcgdHdpY2UgaXMgbGlrZWx5IHRvIGJyZWFrIHRoZSByZXF1ZXN0LicpXG4gICAgLy8gfSlcbiAgfSlcblxuICBkZWZlcihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNlbGYuX2Fib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoc2VsZi5fZm9ybSkge1xuICAgICAgICBpZiAoIXNlbGYuX2F1dGguaGFzQXV0aCkge1xuICAgICAgICAgIHNlbGYuX2Zvcm0ucGlwZShzZWxmKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlbGYuX2F1dGguaGFzQXV0aCAmJiBzZWxmLl9hdXRoLnNlbnRBdXRoKSB7XG4gICAgICAgICAgc2VsZi5fZm9ybS5waXBlKHNlbGYpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzZWxmLl9tdWx0aXBhcnQgJiYgc2VsZi5fbXVsdGlwYXJ0LmNodW5rZWQpIHtcbiAgICAgICAgc2VsZi5fbXVsdGlwYXJ0LmJvZHkucGlwZShzZWxmKVxuICAgICAgfVxuICAgICAgaWYgKHNlbGYuYm9keSkge1xuICAgICAgICBpZiAoaXNzdHJlYW0oc2VsZi5ib2R5KSkge1xuICAgICAgICAgIHNlbGYuYm9keS5waXBlKHNlbGYpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0Q29udGVudExlbmd0aCgpXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VsZi5ib2R5KSkge1xuICAgICAgICAgICAgc2VsZi5ib2R5LmZvckVhY2goZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgICAgICAgICAgc2VsZi53cml0ZShwYXJ0KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZi53cml0ZShzZWxmLmJvZHkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYuZW5kKClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWxmLnJlcXVlc3RCb2R5U3RyZWFtKSB7XG4gICAgICAgIGNvbnNvbGUud2Fybignb3B0aW9ucy5yZXF1ZXN0Qm9keVN0cmVhbSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgcGFzcyB0aGUgcmVxdWVzdCBvYmplY3QgdG8gc3RyZWFtLnBpcGUuJylcbiAgICAgICAgc2VsZi5yZXF1ZXN0Qm9keVN0cmVhbS5waXBlKHNlbGYpXG4gICAgICB9IGVsc2UgaWYgKCFzZWxmLnNyYykge1xuICAgICAgICBpZiAoc2VsZi5fYXV0aC5oYXNBdXRoICYmICFzZWxmLl9hdXRoLnNlbnRBdXRoKSB7XG4gICAgICAgICAgc2VsZi5lbmQoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLm1ldGhvZCAhPT0gJ0dFVCcgJiYgdHlwZW9mIHNlbGYubWV0aG9kICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHNlbGYuc2V0SGVhZGVyKCdjb250ZW50LWxlbmd0aCcsIDApXG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5lbmQoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZWxmLl9mb3JtICYmICFzZWxmLmhhc0hlYWRlcignY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgLy8gQmVmb3JlIGVuZGluZyB0aGUgcmVxdWVzdCwgd2UgaGFkIHRvIGNvbXB1dGUgdGhlIGxlbmd0aCBvZiB0aGUgd2hvbGUgZm9ybSwgYXN5bmNseVxuICAgICAgc2VsZi5zZXRIZWFkZXIoc2VsZi5fZm9ybS5nZXRIZWFkZXJzKCksIHRydWUpXG4gICAgICBzZWxmLl9mb3JtLmdldExlbmd0aChmdW5jdGlvbiAoZXJyLCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKCFlcnIgJiYgIWlzTmFOKGxlbmd0aCkpIHtcbiAgICAgICAgICBzZWxmLnNldEhlYWRlcignY29udGVudC1sZW5ndGgnLCBsZW5ndGgpXG4gICAgICAgIH1cbiAgICAgICAgZW5kKClcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZCgpXG4gICAgfVxuXG4gICAgc2VsZi5udGljayA9IHRydWVcbiAgfSlcblxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5nZXROZXdBZ2VudCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHZhciBBZ2VudCA9IHNlbGYuYWdlbnRDbGFzc1xuICB2YXIgb3B0aW9ucyA9IHt9XG4gIGlmIChzZWxmLmFnZW50T3B0aW9ucykge1xuICAgIGZvciAodmFyIGkgaW4gc2VsZi5hZ2VudE9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnNbaV0gPSBzZWxmLmFnZW50T3B0aW9uc1tpXVxuICAgIH1cbiAgfVxuICBpZiAoc2VsZi5jYSkge1xuICAgIG9wdGlvbnMuY2EgPSBzZWxmLmNhXG4gIH1cbiAgaWYgKHNlbGYuY2lwaGVycykge1xuICAgIG9wdGlvbnMuY2lwaGVycyA9IHNlbGYuY2lwaGVyc1xuICB9XG4gIGlmIChzZWxmLnNlY3VyZVByb3RvY29sKSB7XG4gICAgb3B0aW9ucy5zZWN1cmVQcm90b2NvbCA9IHNlbGYuc2VjdXJlUHJvdG9jb2xcbiAgfVxuICBpZiAoc2VsZi5zZWN1cmVPcHRpb25zKSB7XG4gICAgb3B0aW9ucy5zZWN1cmVPcHRpb25zID0gc2VsZi5zZWN1cmVPcHRpb25zXG4gIH1cbiAgaWYgKHR5cGVvZiBzZWxmLnJlamVjdFVuYXV0aG9yaXplZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZCA9IHNlbGYucmVqZWN0VW5hdXRob3JpemVkXG4gIH1cblxuICBpZiAoc2VsZi5jZXJ0ICYmIHNlbGYua2V5KSB7XG4gICAgb3B0aW9ucy5rZXkgPSBzZWxmLmtleVxuICAgIG9wdGlvbnMuY2VydCA9IHNlbGYuY2VydFxuICB9XG5cbiAgaWYgKHNlbGYucGZ4KSB7XG4gICAgb3B0aW9ucy5wZnggPSBzZWxmLnBmeFxuICB9XG5cbiAgaWYgKHNlbGYucGFzc3BocmFzZSkge1xuICAgIG9wdGlvbnMucGFzc3BocmFzZSA9IHNlbGYucGFzc3BocmFzZVxuICB9XG5cbiAgdmFyIHBvb2xLZXkgPSAnJ1xuXG4gIC8vIGRpZmZlcmVudCB0eXBlcyBvZiBhZ2VudHMgYXJlIGluIGRpZmZlcmVudCBwb29sc1xuICBpZiAoQWdlbnQgIT09IHNlbGYuaHR0cE1vZHVsZS5BZ2VudCkge1xuICAgIHBvb2xLZXkgKz0gQWdlbnQubmFtZVxuICB9XG5cbiAgLy8gY2Egb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgaWYgcHJveHkgb3IgZGVzdGluYXRpb24gYXJlIGh0dHBzXG4gIHZhciBwcm94eSA9IHNlbGYucHJveHlcbiAgaWYgKHR5cGVvZiBwcm94eSA9PT0gJ3N0cmluZycpIHtcbiAgICBwcm94eSA9IHVybC5wYXJzZShwcm94eSlcbiAgfVxuICB2YXIgaXNIdHRwcyA9IChwcm94eSAmJiBwcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHx8IHRoaXMudXJpLnByb3RvY29sID09PSAnaHR0cHM6J1xuXG4gIGlmIChpc0h0dHBzKSB7XG4gICAgaWYgKG9wdGlvbnMuY2EpIHtcbiAgICAgIGlmIChwb29sS2V5KSB7XG4gICAgICAgIHBvb2xLZXkgKz0gJzonXG4gICAgICB9XG4gICAgICBwb29sS2V5ICs9IG9wdGlvbnMuY2FcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVqZWN0VW5hdXRob3JpemVkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHBvb2xLZXkpIHtcbiAgICAgICAgcG9vbEtleSArPSAnOidcbiAgICAgIH1cbiAgICAgIHBvb2xLZXkgKz0gb3B0aW9ucy5yZWplY3RVbmF1dGhvcml6ZWRcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jZXJ0KSB7XG4gICAgICBpZiAocG9vbEtleSkge1xuICAgICAgICBwb29sS2V5ICs9ICc6J1xuICAgICAgfVxuICAgICAgcG9vbEtleSArPSBvcHRpb25zLmNlcnQudG9TdHJpbmcoJ2FzY2lpJykgKyBvcHRpb25zLmtleS50b1N0cmluZygnYXNjaWknKVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnBmeCkge1xuICAgICAgaWYgKHBvb2xLZXkpIHtcbiAgICAgICAgcG9vbEtleSArPSAnOidcbiAgICAgIH1cbiAgICAgIHBvb2xLZXkgKz0gb3B0aW9ucy5wZngudG9TdHJpbmcoJ2FzY2lpJylcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jaXBoZXJzKSB7XG4gICAgICBpZiAocG9vbEtleSkge1xuICAgICAgICBwb29sS2V5ICs9ICc6J1xuICAgICAgfVxuICAgICAgcG9vbEtleSArPSBvcHRpb25zLmNpcGhlcnNcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zZWN1cmVQcm90b2NvbCkge1xuICAgICAgaWYgKHBvb2xLZXkpIHtcbiAgICAgICAgcG9vbEtleSArPSAnOidcbiAgICAgIH1cbiAgICAgIHBvb2xLZXkgKz0gb3B0aW9ucy5zZWN1cmVQcm90b2NvbFxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNlY3VyZU9wdGlvbnMpIHtcbiAgICAgIGlmIChwb29sS2V5KSB7XG4gICAgICAgIHBvb2xLZXkgKz0gJzonXG4gICAgICB9XG4gICAgICBwb29sS2V5ICs9IG9wdGlvbnMuc2VjdXJlT3B0aW9uc1xuICAgIH1cbiAgfVxuXG4gIGlmIChzZWxmLnBvb2wgPT09IGdsb2JhbFBvb2wgJiYgIXBvb2xLZXkgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID09PSAwICYmIHNlbGYuaHR0cE1vZHVsZS5nbG9iYWxBZ2VudCkge1xuICAgIC8vIG5vdCBkb2luZyBhbnl0aGluZyBzcGVjaWFsLiAgVXNlIHRoZSBnbG9iYWxBZ2VudFxuICAgIHJldHVybiBzZWxmLmh0dHBNb2R1bGUuZ2xvYmFsQWdlbnRcbiAgfVxuXG4gIC8vIHdlJ3JlIHVzaW5nIGEgc3RvcmVkIGFnZW50LiAgTWFrZSBzdXJlIGl0J3MgcHJvdG9jb2wtc3BlY2lmaWNcbiAgcG9vbEtleSA9IHNlbGYudXJpLnByb3RvY29sICsgcG9vbEtleVxuXG4gIC8vIGdlbmVyYXRlIGEgbmV3IGFnZW50IGZvciB0aGlzIHNldHRpbmcgaWYgbm9uZSB5ZXQgZXhpc3RzXG4gIGlmICghc2VsZi5wb29sW3Bvb2xLZXldKSB7XG4gICAgc2VsZi5wb29sW3Bvb2xLZXldID0gbmV3IEFnZW50KG9wdGlvbnMpXG4gICAgLy8gcHJvcGVybHkgc2V0IG1heFNvY2tldHMgb24gbmV3IGFnZW50c1xuICAgIGlmIChzZWxmLnBvb2wubWF4U29ja2V0cykge1xuICAgICAgc2VsZi5wb29sW3Bvb2xLZXldLm1heFNvY2tldHMgPSBzZWxmLnBvb2wubWF4U29ja2V0c1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWxmLnBvb2xbcG9vbEtleV1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIHN0YXJ0KCkgaXMgY2FsbGVkIG9uY2Ugd2UgYXJlIHJlYWR5IHRvIHNlbmQgdGhlIG91dGdvaW5nIEhUVFAgcmVxdWVzdC5cbiAgLy8gdGhpcyBpcyB1c3VhbGx5IGNhbGxlZCBvbiB0aGUgZmlyc3Qgd3JpdGUoKSwgZW5kKCkgb3Igb24gbmV4dFRpY2soKVxuICB2YXIgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi50aW1pbmcpIHtcbiAgICAvLyBBbGwgdGltaW5ncyB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMgcmVxdWVzdCdzIHN0YXJ0VGltZS4gIEluIG9yZGVyIHRvIGRvIHRoaXMsXG4gICAgLy8gd2UgbmVlZCB0byBjYXB0dXJlIHRoZSB3YWxsLWNsb2NrIHN0YXJ0IHRpbWUgKHZpYSBEYXRlKSwgaW1tZWRpYXRlbHkgZm9sbG93ZWRcbiAgICAvLyBieSB0aGUgaGlnaC1yZXNvbHV0aW9uIHRpbWVyICh2aWEgbm93KCkpLiAgV2hpbGUgdGhlc2UgdHdvIHdvbid0IGJlIHNldFxuICAgIC8vIGF0IHRoZSBfZXhhY3RfIHNhbWUgdGltZSwgdGhleSBzaG91bGQgYmUgY2xvc2UgZW5vdWdoIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlXG4gICAgLy8gaGlnaC1yZXNvbHV0aW9uLCBtb25vdG9uaWNhbGx5IG5vbi1kZWNyZWFzaW5nIHRpbWVzdGFtcHMgcmVsYXRpdmUgdG8gc3RhcnRUaW1lLlxuICAgIHZhciBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgIHZhciBzdGFydFRpbWVOb3cgPSBub3coKVxuICB9XG5cbiAgaWYgKHNlbGYuX2Fib3J0ZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHNlbGYuX3N0YXJ0ZWQgPSB0cnVlXG4gIHNlbGYubWV0aG9kID0gc2VsZi5tZXRob2QgfHwgJ0dFVCdcbiAgc2VsZi5ocmVmID0gc2VsZi51cmkuaHJlZlxuXG4gIGlmIChzZWxmLnNyYyAmJiBzZWxmLnNyYy5zdGF0ICYmIHNlbGYuc3JjLnN0YXQuc2l6ZSAmJiAhc2VsZi5oYXNIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJykpIHtcbiAgICBzZWxmLnNldEhlYWRlcignY29udGVudC1sZW5ndGgnLCBzZWxmLnNyYy5zdGF0LnNpemUpXG4gIH1cbiAgaWYgKHNlbGYuX2F3cykge1xuICAgIHNlbGYuYXdzKHNlbGYuX2F3cywgdHJ1ZSlcbiAgfVxuXG4gIC8vIFdlIGhhdmUgYSBtZXRob2QgbmFtZWQgYXV0aCwgd2hpY2ggaXMgY29tcGxldGVseSBkaWZmZXJlbnQgZnJvbSB0aGUgaHR0cC5yZXF1ZXN0XG4gIC8vIGF1dGggb3B0aW9uLiAgSWYgd2UgZG9uJ3QgcmVtb3ZlIGl0LCB3ZSdyZSBnb25uYSBoYXZlIGEgYmFkIHRpbWUuXG4gIHZhciByZXFPcHRpb25zID0gY29weShzZWxmKVxuICBkZWxldGUgcmVxT3B0aW9ucy5hdXRoXG5cbiAgZGVidWcoJ21ha2UgcmVxdWVzdCcsIHNlbGYudXJpLmhyZWYpXG5cbiAgLy8gbm9kZSB2Ni44LjAgbm93IHN1cHBvcnRzIGEgYHRpbWVvdXRgIHZhbHVlIGluIGBodHRwLnJlcXVlc3QoKWAsIGJ1dCB3ZVxuICAvLyBzaG91bGQgZGVsZXRlIGl0IGZvciBub3cgc2luY2Ugd2UgaGFuZGxlIHRpbWVvdXRzIG1hbnVhbGx5IGZvciBiZXR0ZXJcbiAgLy8gY29uc2lzdGVuY3kgd2l0aCBub2RlIHZlcnNpb25zIGJlZm9yZSB2Ni44LjBcbiAgZGVsZXRlIHJlcU9wdGlvbnMudGltZW91dFxuXG4gIHRyeSB7XG4gICAgc2VsZi5yZXEgPSBzZWxmLmh0dHBNb2R1bGUucmVxdWVzdChyZXFPcHRpb25zKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHNlbGYudGltaW5nKSB7XG4gICAgc2VsZi5zdGFydFRpbWUgPSBzdGFydFRpbWVcbiAgICBzZWxmLnN0YXJ0VGltZU5vdyA9IHN0YXJ0VGltZU5vd1xuXG4gICAgLy8gVGltaW5nIHZhbHVlcyB3aWxsIGFsbCBiZSByZWxhdGl2ZSB0byBzdGFydFRpbWUgKGJ5IGNvbXBhcmluZyB0byBzdGFydFRpbWVOb3dcbiAgICAvLyBzbyB3ZSBoYXZlIGFuIGFjY3VyYXRlIGNsb2NrKVxuICAgIHNlbGYudGltaW5ncyA9IHt9XG4gIH1cblxuICB2YXIgdGltZW91dFxuICBpZiAoc2VsZi50aW1lb3V0ICYmICFzZWxmLnRpbWVvdXRUaW1lcikge1xuICAgIGlmIChzZWxmLnRpbWVvdXQgPCAwKSB7XG4gICAgICB0aW1lb3V0ID0gMFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlbGYudGltZW91dCA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc2VsZi50aW1lb3V0KSkge1xuICAgICAgdGltZW91dCA9IHNlbGYudGltZW91dFxuICAgIH1cbiAgfVxuXG4gIHNlbGYucmVxLm9uKCdyZXNwb25zZScsIHNlbGYub25SZXF1ZXN0UmVzcG9uc2UuYmluZChzZWxmKSlcbiAgc2VsZi5yZXEub24oJ2Vycm9yJywgc2VsZi5vblJlcXVlc3RFcnJvci5iaW5kKHNlbGYpKVxuICBzZWxmLnJlcS5vbignZHJhaW4nLCBmdW5jdGlvbigpIHtcbiAgICBzZWxmLmVtaXQoJ2RyYWluJylcbiAgfSlcbiAgc2VsZi5yZXEub24oJ3NvY2tldCcsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIC8vIGAuX2Nvbm5lY3RpbmdgIHdhcyB0aGUgb2xkIHByb3BlcnR5IHdoaWNoIHdhcyBtYWRlIHB1YmxpYyBpbiBub2RlIHY2LjEuMFxuICAgIHZhciBpc0Nvbm5lY3RpbmcgPSBzb2NrZXQuX2Nvbm5lY3RpbmcgfHwgc29ja2V0LmNvbm5lY3RpbmdcbiAgICBpZiAoc2VsZi50aW1pbmcpIHtcbiAgICAgIHNlbGYudGltaW5ncy5zb2NrZXQgPSBub3coKSAtIHNlbGYuc3RhcnRUaW1lTm93XG5cbiAgICAgIGlmIChpc0Nvbm5lY3RpbmcpIHtcbiAgICAgICAgdmFyIG9uTG9va3VwVGltaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgc2VsZi50aW1pbmdzLmxvb2t1cCA9IG5vdygpIC0gc2VsZi5zdGFydFRpbWVOb3dcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvbkNvbm5lY3RUaW1pbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBzZWxmLnRpbWluZ3MuY29ubmVjdCA9IG5vdygpIC0gc2VsZi5zdGFydFRpbWVOb3dcbiAgICAgICAgfVxuXG4gICAgICAgIHNvY2tldC5vbmNlKCdsb29rdXAnLCBvbkxvb2t1cFRpbWluZylcbiAgICAgICAgc29ja2V0Lm9uY2UoJ2Nvbm5lY3QnLCBvbkNvbm5lY3RUaW1pbmcpXG5cbiAgICAgICAgLy8gY2xlYW4gdXAgdGltaW5nIGV2ZW50IGxpc3RlbmVycyBpZiBuZWVkZWQgb24gZXJyb3JcbiAgICAgICAgc2VsZi5yZXEub25jZSgnZXJyb3InLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2xvb2t1cCcsIG9uTG9va3VwVGltaW5nKVxuICAgICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY29ubmVjdCcsIG9uQ29ubmVjdFRpbWluZylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2V0UmVxVGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgLy8gVGhpcyB0aW1lb3V0IHNldHMgdGhlIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgKmJldHdlZW4qIGJ5dGVzIHNlbnRcbiAgICAgIC8vIGZyb20gdGhlIHNlcnZlciBvbmNlIGNvbm5lY3RlZC5cbiAgICAgIC8vXG4gICAgICAvLyBJbiBwYXJ0aWN1bGFyLCBpdCdzIHVzZWZ1bCBmb3IgZXJyb3JpbmcgaWYgdGhlIHNlcnZlciBmYWlscyB0byBzZW5kXG4gICAgICAvLyBkYXRhIGhhbGZ3YXkgdGhyb3VnaCBzdHJlYW1pbmcgYSByZXNwb25zZS5cbiAgICAgIHNlbGYucmVxLnNldFRpbWVvdXQodGltZW91dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc2VsZi5yZXEpIHtcbiAgICAgICAgICBzZWxmLmFib3J0KClcbiAgICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcignRVNPQ0tFVFRJTUVET1VUJylcbiAgICAgICAgICBlLmNvZGUgPSAnRVNPQ0tFVFRJTUVET1VUJ1xuICAgICAgICAgIGUuY29ubmVjdCA9IGZhbHNlXG4gICAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIGlmICh0aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE9ubHkgc3RhcnQgdGhlIGNvbm5lY3Rpb24gdGltZXIgaWYgd2UncmUgYWN0dWFsbHkgY29ubmVjdGluZyBhIG5ld1xuICAgICAgLy8gc29ja2V0LCBvdGhlcndpc2UgaWYgd2UncmUgYWxyZWFkeSBjb25uZWN0ZWQgKGJlY2F1c2UgdGhpcyBpcyBhXG4gICAgICAvLyBrZWVwLWFsaXZlIGNvbm5lY3Rpb24pIGRvIG5vdCBib3RoZXIuIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIHdlIHdvbid0XG4gICAgICAvLyBnZXQgYSAnY29ubmVjdCcgZXZlbnQgZm9yIGFuIGFscmVhZHkgY29ubmVjdGVkIHNvY2tldC5cbiAgICAgIGlmIChpc0Nvbm5lY3RpbmcpIHtcbiAgICAgICAgdmFyIG9uUmVxU29ja0Nvbm5lY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Nvbm5lY3QnLCBvblJlcVNvY2tDb25uZWN0KVxuICAgICAgICAgIGNsZWFyVGltZW91dChzZWxmLnRpbWVvdXRUaW1lcilcbiAgICAgICAgICBzZWxmLnRpbWVvdXRUaW1lciA9IG51bGxcbiAgICAgICAgICBzZXRSZXFUaW1lb3V0KClcbiAgICAgICAgfVxuXG4gICAgICAgIHNvY2tldC5vbignY29ubmVjdCcsIG9uUmVxU29ja0Nvbm5lY3QpXG5cbiAgICAgICAgc2VsZi5yZXEub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjb25uZWN0Jywgb25SZXFTb2NrQ29ubmVjdClcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTZXQgYSB0aW1lb3V0IGluIG1lbW9yeSAtIHRoaXMgYmxvY2sgd2lsbCB0aHJvdyBpZiB0aGUgc2VydmVyIHRha2VzIG1vcmVcbiAgICAgICAgLy8gdGhhbiBgdGltZW91dGAgdG8gd3JpdGUgdGhlIEhUVFAgc3RhdHVzIGFuZCBoZWFkZXJzIChjb3JyZXNwb25kaW5nIHRvXG4gICAgICAgIC8vIHRoZSBvbigncmVzcG9uc2UnKSBldmVudCBvbiB0aGUgY2xpZW50KS4gTkI6IHRoaXMgbWVhc3VyZXMgd2FsbC1jbG9ja1xuICAgICAgICAvLyB0aW1lLCBub3QgdGhlIHRpbWUgYmV0d2VlbiBieXRlcyBzZW50IGJ5IHRoZSBzZXJ2ZXIuXG4gICAgICAgIHNlbGYudGltZW91dFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjb25uZWN0Jywgb25SZXFTb2NrQ29ubmVjdClcbiAgICAgICAgICBzZWxmLmFib3J0KClcbiAgICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcignRVRJTUVET1VUJylcbiAgICAgICAgICBlLmNvZGUgPSAnRVRJTUVET1VUJ1xuICAgICAgICAgIGUuY29ubmVjdCA9IHRydWVcbiAgICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgZSlcbiAgICAgICAgfSwgdGltZW91dClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgY29ubmVjdGVkXG4gICAgICAgIHNldFJlcVRpbWVvdXQoKVxuICAgICAgfVxuICAgIH1cbiAgICBzZWxmLmVtaXQoJ3NvY2tldCcsIHNvY2tldClcbiAgfSlcblxuICBzZWxmLmVtaXQoJ3JlcXVlc3QnLCBzZWxmLnJlcSlcbn1cblxuUmVxdWVzdC5wcm90b3R5cGUub25SZXF1ZXN0RXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmIChzZWxmLl9hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHNlbGYucmVxICYmIHNlbGYucmVxLl9yZXVzZWRTb2NrZXQgJiYgZXJyb3IuY29kZSA9PT0gJ0VDT05OUkVTRVQnXG4gICAgICAmJiBzZWxmLmFnZW50LmFkZFJlcXVlc3ROb3JldXNlKSB7XG4gICAgc2VsZi5hZ2VudCA9IHsgYWRkUmVxdWVzdDogc2VsZi5hZ2VudC5hZGRSZXF1ZXN0Tm9yZXVzZS5iaW5kKHNlbGYuYWdlbnQpIH1cbiAgICBzZWxmLnN0YXJ0KClcbiAgICBzZWxmLnJlcS5lbmQoKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzZWxmLnRpbWVvdXQgJiYgc2VsZi50aW1lb3V0VGltZXIpIHtcbiAgICBjbGVhclRpbWVvdXQoc2VsZi50aW1lb3V0VGltZXIpXG4gICAgc2VsZi50aW1lb3V0VGltZXIgPSBudWxsXG4gIH1cbiAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5vblJlcXVlc3RSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICB2YXIgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi50aW1pbmcpIHtcbiAgICBzZWxmLnRpbWluZ3MucmVzcG9uc2UgPSBub3coKSAtIHNlbGYuc3RhcnRUaW1lTm93XG4gIH1cblxuICBkZWJ1Zygnb25SZXF1ZXN0UmVzcG9uc2UnLCBzZWxmLnVyaS5ocmVmLCByZXNwb25zZS5zdGF0dXNDb2RlLCByZXNwb25zZS5oZWFkZXJzKVxuICByZXNwb25zZS5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgaWYgKHNlbGYudGltaW5nKSB7XG4gICAgICBzZWxmLnRpbWluZ3MuZW5kID0gbm93KCkgLSBzZWxmLnN0YXJ0VGltZU5vd1xuICAgICAgcmVzcG9uc2UudGltaW5nU3RhcnQgPSBzZWxmLnN0YXJ0VGltZVxuXG4gICAgICAvLyBmaWxsIGluIHRoZSBibGFua3MgZm9yIGFueSBwZXJpb2RzIHRoYXQgZGlkbid0IHRyaWdnZXIsIHN1Y2ggYXNcbiAgICAgIC8vIG5vIGxvb2t1cCBvciBjb25uZWN0IGR1ZSB0byBrZWVwIGFsaXZlXG4gICAgICBpZiAoIXNlbGYudGltaW5ncy5zb2NrZXQpIHtcbiAgICAgICAgc2VsZi50aW1pbmdzLnNvY2tldCA9IDBcbiAgICAgIH1cbiAgICAgIGlmICghc2VsZi50aW1pbmdzLmxvb2t1cCkge1xuICAgICAgICBzZWxmLnRpbWluZ3MubG9va3VwID0gc2VsZi50aW1pbmdzLnNvY2tldFxuICAgICAgfVxuICAgICAgaWYgKCFzZWxmLnRpbWluZ3MuY29ubmVjdCkge1xuICAgICAgICBzZWxmLnRpbWluZ3MuY29ubmVjdCA9IHNlbGYudGltaW5ncy5sb29rdXBcbiAgICAgIH1cbiAgICAgIGlmICghc2VsZi50aW1pbmdzLnJlc3BvbnNlKSB7XG4gICAgICAgIHNlbGYudGltaW5ncy5yZXNwb25zZSA9IHNlbGYudGltaW5ncy5jb25uZWN0XG4gICAgICB9XG5cbiAgICAgIGRlYnVnKCdlbGFwc2VkIHRpbWUnLCBzZWxmLnRpbWluZ3MuZW5kKVxuXG4gICAgICAvLyBlbGFwc2VkVGltZSBpbmNsdWRlcyBhbGwgcmVkaXJlY3RzXG4gICAgICBzZWxmLmVsYXBzZWRUaW1lICs9IE1hdGgucm91bmQoc2VsZi50aW1pbmdzLmVuZClcblxuICAgICAgLy8gTk9URTogZWxhcHNlZFRpbWUgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiAudGltaW5nc1xuICAgICAgcmVzcG9uc2UuZWxhcHNlZFRpbWUgPSBzZWxmLmVsYXBzZWRUaW1lXG5cbiAgICAgIC8vIHRpbWluZ3MgaXMganVzdCBmb3IgdGhlIGZpbmFsIGZldGNoXG4gICAgICByZXNwb25zZS50aW1pbmdzID0gc2VsZi50aW1pbmdzXG5cbiAgICAgIC8vIHByZS1jYWxjdWxhdGUgcGhhc2UgdGltaW5ncyBhcyB3ZWxsXG4gICAgICByZXNwb25zZS50aW1pbmdQaGFzZXMgPSB7XG4gICAgICAgIHdhaXQ6IHNlbGYudGltaW5ncy5zb2NrZXQsXG4gICAgICAgIGRuczogc2VsZi50aW1pbmdzLmxvb2t1cCAtIHNlbGYudGltaW5ncy5zb2NrZXQsXG4gICAgICAgIHRjcDogc2VsZi50aW1pbmdzLmNvbm5lY3QgLSBzZWxmLnRpbWluZ3MubG9va3VwLFxuICAgICAgICBmaXJzdEJ5dGU6IHNlbGYudGltaW5ncy5yZXNwb25zZSAtIHNlbGYudGltaW5ncy5jb25uZWN0LFxuICAgICAgICBkb3dubG9hZDogc2VsZi50aW1pbmdzLmVuZCAtIHNlbGYudGltaW5ncy5yZXNwb25zZSxcbiAgICAgICAgdG90YWw6IHNlbGYudGltaW5ncy5lbmRcbiAgICAgIH1cbiAgICB9XG4gICAgZGVidWcoJ3Jlc3BvbnNlIGVuZCcsIHNlbGYudXJpLmhyZWYsIHJlc3BvbnNlLnN0YXR1c0NvZGUsIHJlc3BvbnNlLmhlYWRlcnMpXG4gIH0pXG5cbiAgaWYgKHNlbGYuX2Fib3J0ZWQpIHtcbiAgICBkZWJ1ZygnYWJvcnRlZCcsIHNlbGYudXJpLmhyZWYpXG4gICAgcmVzcG9uc2UucmVzdW1lKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIHNlbGYucmVzcG9uc2UgPSByZXNwb25zZVxuICByZXNwb25zZS5yZXF1ZXN0ID0gc2VsZlxuICByZXNwb25zZS50b0pTT04gPSByZXNwb25zZVRvSlNPTlxuXG4gIC8vIFhYWCBUaGlzIGlzIGRpZmZlcmVudCBvbiAwLjEwLCBiZWNhdXNlIFNTTCBpcyBzdHJpY3QgYnkgZGVmYXVsdFxuICBpZiAoc2VsZi5odHRwTW9kdWxlID09PSBodHRwcyAmJlxuICAgICAgc2VsZi5zdHJpY3RTU0wgJiYgKCFyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgnc29ja2V0JykgfHxcbiAgICAgICFyZXNwb25zZS5zb2NrZXQuYXV0aG9yaXplZCkpIHtcbiAgICBkZWJ1Zygnc3RyaWN0IHNzbCBlcnJvcicsIHNlbGYudXJpLmhyZWYpXG4gICAgdmFyIHNzbEVyciA9IHJlc3BvbnNlLmhhc093blByb3BlcnR5KCdzb2NrZXQnKSA/IHJlc3BvbnNlLnNvY2tldC5hdXRob3JpemF0aW9uRXJyb3IgOiBzZWxmLnVyaS5ocmVmICsgJyBkb2VzIG5vdCBzdXBwb3J0IFNTTCdcbiAgICBzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdTU0wgRXJyb3I6ICcgKyBzc2xFcnIpKVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gU2F2ZSB0aGUgb3JpZ2luYWwgaG9zdCBiZWZvcmUgYW55IHJlZGlyZWN0IChpZiBpdCBjaGFuZ2VzLCB3ZSBuZWVkIHRvXG4gIC8vIHJlbW92ZSBhbnkgYXV0aG9yaXphdGlvbiBoZWFkZXJzKS4gIEFsc28gcmVtZW1iZXIgdGhlIGNhc2Ugb2YgdGhlIGhlYWRlclxuICAvLyBuYW1lIGJlY2F1c2UgbG90cyBvZiBicm9rZW4gc2VydmVycyBleHBlY3QgSG9zdCBpbnN0ZWFkIG9mIGhvc3QgYW5kIHdlXG4gIC8vIHdhbnQgdGhlIGNhbGxlciB0byBiZSBhYmxlIHRvIHNwZWNpZnkgdGhpcy5cbiAgc2VsZi5vcmlnaW5hbEhvc3QgPSBzZWxmLmdldEhlYWRlcignaG9zdCcpXG4gIGlmICghc2VsZi5vcmlnaW5hbEhvc3RIZWFkZXJOYW1lKSB7XG4gICAgc2VsZi5vcmlnaW5hbEhvc3RIZWFkZXJOYW1lID0gc2VsZi5oYXNIZWFkZXIoJ2hvc3QnKVxuICB9XG4gIGlmIChzZWxmLnNldEhvc3QpIHtcbiAgICBzZWxmLnJlbW92ZUhlYWRlcignaG9zdCcpXG4gIH1cbiAgaWYgKHNlbGYudGltZW91dCAmJiBzZWxmLnRpbWVvdXRUaW1lcikge1xuICAgIGNsZWFyVGltZW91dChzZWxmLnRpbWVvdXRUaW1lcilcbiAgICBzZWxmLnRpbWVvdXRUaW1lciA9IG51bGxcbiAgfVxuXG4gIHZhciB0YXJnZXRDb29raWVKYXIgPSAoc2VsZi5famFyICYmIHNlbGYuX2phci5zZXRDb29raWUpID8gc2VsZi5famFyIDogZ2xvYmFsQ29va2llSmFyXG4gIHZhciBhZGRDb29raWUgPSBmdW5jdGlvbiAoY29va2llKSB7XG4gICAgLy9zZXQgdGhlIGNvb2tpZSBpZiBpdCdzIGRvbWFpbiBpbiB0aGUgaHJlZidzIGRvbWFpbi5cbiAgICB0cnkge1xuICAgICAgdGFyZ2V0Q29va2llSmFyLnNldENvb2tpZShjb29raWUsIHNlbGYudXJpLmhyZWYsIHtpZ25vcmVFcnJvcjogdHJ1ZX0pXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGUpXG4gICAgfVxuICB9XG5cbiAgcmVzcG9uc2UuY2FzZWxlc3MgPSBjYXNlbGVzcyhyZXNwb25zZS5oZWFkZXJzKVxuXG4gIGlmIChyZXNwb25zZS5jYXNlbGVzcy5oYXMoJ3NldC1jb29raWUnKSAmJiAoIXNlbGYuX2Rpc2FibGVDb29raWVzKSkge1xuICAgIHZhciBoZWFkZXJOYW1lID0gcmVzcG9uc2UuY2FzZWxlc3MuaGFzKCdzZXQtY29va2llJylcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNwb25zZS5oZWFkZXJzW2hlYWRlck5hbWVdKSkge1xuICAgICAgcmVzcG9uc2UuaGVhZGVyc1toZWFkZXJOYW1lXS5mb3JFYWNoKGFkZENvb2tpZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkQ29va2llKHJlc3BvbnNlLmhlYWRlcnNbaGVhZGVyTmFtZV0pXG4gICAgfVxuICB9XG5cbiAgaWYgKHNlbGYuX3JlZGlyZWN0Lm9uUmVzcG9uc2UocmVzcG9uc2UpKSB7XG4gICAgcmV0dXJuIC8vIElnbm9yZSB0aGUgcmVzdCBvZiB0aGUgcmVzcG9uc2VcbiAgfSBlbHNlIHtcbiAgICAvLyBCZSBhIGdvb2Qgc3RyZWFtIGFuZCBlbWl0IGVuZCB3aGVuIHRoZSByZXNwb25zZSBpcyBmaW5pc2hlZC5cbiAgICAvLyBIYWNrIHRvIGVtaXQgZW5kIG9uIGNsb3NlIGJlY2F1c2Ugb2YgYSBjb3JlIGJ1ZyB0aGF0IG5ldmVyIGZpcmVzIGVuZFxuICAgIHJlc3BvbnNlLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc2VsZi5fZW5kZWQpIHtcbiAgICAgICAgc2VsZi5yZXNwb25zZS5lbWl0KCdlbmQnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXNwb25zZS5vbmNlKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9lbmRlZCA9IHRydWVcbiAgICB9KVxuXG4gICAgdmFyIG5vQm9keSA9IGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzZWxmLm1ldGhvZCA9PT0gJ0hFQUQnXG4gICAgICAgIC8vIEluZm9ybWF0aW9uYWxcbiAgICAgICAgfHwgKGNvZGUgPj0gMTAwICYmIGNvZGUgPCAyMDApXG4gICAgICAgIC8vIE5vIENvbnRlbnRcbiAgICAgICAgfHwgY29kZSA9PT0gMjA0XG4gICAgICAgIC8vIE5vdCBNb2RpZmllZFxuICAgICAgICB8fCBjb2RlID09PSAzMDRcbiAgICAgIClcbiAgICB9XG5cbiAgICB2YXIgcmVzcG9uc2VDb250ZW50XG4gICAgaWYgKHNlbGYuZ3ppcCAmJiAhbm9Cb2R5KHJlc3BvbnNlLnN0YXR1c0NvZGUpKSB7XG4gICAgICB2YXIgY29udGVudEVuY29kaW5nID0gcmVzcG9uc2UuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddIHx8ICdpZGVudGl0eSdcbiAgICAgIGNvbnRlbnRFbmNvZGluZyA9IGNvbnRlbnRFbmNvZGluZy50cmltKCkudG9Mb3dlckNhc2UoKVxuXG4gICAgICAvLyBCZSBtb3JlIGxlbmllbnQgd2l0aCBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2UgKHZlcnkgcmFyZWx5KVxuICAgICAgLy8gc2VydmVycyBzZW5kIHNsaWdodGx5IGludmFsaWQgZ3ppcCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcbiAgICAgIC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cbiAgICAgIC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG4gICAgICB2YXIgemxpYk9wdGlvbnMgPSB7XG4gICAgICAgIGZsdXNoOiB6bGliLlpfU1lOQ19GTFVTSFxuICAgICAgLCBmaW5pc2hGbHVzaDogemxpYi5aX1NZTkNfRkxVU0hcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRFbmNvZGluZyA9PT0gJ2d6aXAnKSB7XG4gICAgICAgIHJlc3BvbnNlQ29udGVudCA9IHpsaWIuY3JlYXRlR3VuemlwKHpsaWJPcHRpb25zKVxuICAgICAgICByZXNwb25zZS5waXBlKHJlc3BvbnNlQ29udGVudClcbiAgICAgIH0gZWxzZSBpZiAoY29udGVudEVuY29kaW5nID09PSAnZGVmbGF0ZScpIHtcbiAgICAgICAgcmVzcG9uc2VDb250ZW50ID0gemxpYi5jcmVhdGVJbmZsYXRlKHpsaWJPcHRpb25zKVxuICAgICAgICByZXNwb25zZS5waXBlKHJlc3BvbnNlQ29udGVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNpbmNlIHByZXZpb3VzIHZlcnNpb25zIGRpZG4ndCBjaGVjayBmb3IgQ29udGVudC1FbmNvZGluZyBoZWFkZXIsXG4gICAgICAgIC8vIGlnbm9yZSBhbnkgaW52YWxpZCB2YWx1ZXMgdG8gcHJlc2VydmUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHlcbiAgICAgICAgaWYgKGNvbnRlbnRFbmNvZGluZyAhPT0gJ2lkZW50aXR5Jykge1xuICAgICAgICAgIGRlYnVnKCdpZ25vcmluZyB1bnJlY29nbml6ZWQgQ29udGVudC1FbmNvZGluZyAnICsgY29udGVudEVuY29kaW5nKVxuICAgICAgICB9XG4gICAgICAgIHJlc3BvbnNlQ29udGVudCA9IHJlc3BvbnNlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3BvbnNlQ29udGVudCA9IHJlc3BvbnNlXG4gICAgfVxuXG4gICAgaWYgKHNlbGYuZW5jb2RpbmcpIHtcbiAgICAgIGlmIChzZWxmLmRlc3RzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdJZ25vcmluZyBlbmNvZGluZyBwYXJhbWV0ZXIgYXMgdGhpcyBzdHJlYW0gaXMgYmVpbmcgcGlwZWQgdG8gYW5vdGhlciBzdHJlYW0gd2hpY2ggbWFrZXMgdGhlIGVuY29kaW5nIG9wdGlvbiBpbnZhbGlkLicpXG4gICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlQ29udGVudC5zZXRFbmNvZGluZykge1xuICAgICAgICByZXNwb25zZUNvbnRlbnQuc2V0RW5jb2Rpbmcoc2VsZi5lbmNvZGluZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNob3VsZCBvbmx5IG9jY3VyIG9uIG5vZGUgcHJlLXYwLjkuNCAoam95ZW50L25vZGVAOWI1YWJlNSkgd2l0aFxuICAgICAgICAvLyB6bGliIHN0cmVhbXMuXG4gICAgICAgIC8vIElmL1doZW4gc3VwcG9ydCBmb3IgMC45LjQgaXMgZHJvcHBlZCwgdGhpcyBzaG91bGQgYmUgdW5uZWNlc3NhcnkuXG4gICAgICAgIHJlc3BvbnNlQ29udGVudCA9IHJlc3BvbnNlQ29udGVudC5waXBlKHN0cmluZ3N0cmVhbShzZWxmLmVuY29kaW5nKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VsZi5fcGF1c2VkKSB7XG4gICAgICByZXNwb25zZUNvbnRlbnQucGF1c2UoKVxuICAgIH1cblxuICAgIHNlbGYucmVzcG9uc2VDb250ZW50ID0gcmVzcG9uc2VDb250ZW50XG5cbiAgICBzZWxmLmVtaXQoJ3Jlc3BvbnNlJywgcmVzcG9uc2UpXG5cbiAgICBzZWxmLmRlc3RzLmZvckVhY2goZnVuY3Rpb24gKGRlc3QpIHtcbiAgICAgIHNlbGYucGlwZURlc3QoZGVzdClcbiAgICB9KVxuXG4gICAgcmVzcG9uc2VDb250ZW50Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICBpZiAoc2VsZi50aW1pbmcgJiYgIXNlbGYucmVzcG9uc2VTdGFydGVkKSB7XG4gICAgICAgIHNlbGYucmVzcG9uc2VTdGFydFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpXG5cbiAgICAgICAgLy8gTk9URTogcmVzcG9uc2VTdGFydFRpbWUgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiAudGltaW5nc1xuICAgICAgICByZXNwb25zZS5yZXNwb25zZVN0YXJ0VGltZSA9IHNlbGYucmVzcG9uc2VTdGFydFRpbWVcbiAgICAgIH1cbiAgICAgIHNlbGYuX2Rlc3RkYXRhID0gdHJ1ZVxuICAgICAgc2VsZi5lbWl0KCdkYXRhJywgY2h1bmspXG4gICAgfSlcbiAgICByZXNwb25zZUNvbnRlbnQub25jZSgnZW5kJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICBzZWxmLmVtaXQoJ2VuZCcsIGNodW5rKVxuICAgIH0pXG4gICAgcmVzcG9uc2VDb250ZW50Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycm9yKVxuICAgIH0pXG4gICAgcmVzcG9uc2VDb250ZW50Lm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtzZWxmLmVtaXQoJ2Nsb3NlJyl9KVxuXG4gICAgaWYgKHNlbGYuY2FsbGJhY2spIHtcbiAgICAgIHNlbGYucmVhZFJlc3BvbnNlQm9keShyZXNwb25zZSlcbiAgICB9XG4gICAgLy9pZiBubyBjYWxsYmFja1xuICAgIGVsc2Uge1xuICAgICAgc2VsZi5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc2VsZi5fYWJvcnRlZCkge1xuICAgICAgICAgIGRlYnVnKCdhYm9ydGVkJywgc2VsZi51cmkuaHJlZilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzZWxmLmVtaXQoJ2NvbXBsZXRlJywgcmVzcG9uc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuICBkZWJ1ZygnZmluaXNoIGluaXQgZnVuY3Rpb24nLCBzZWxmLnVyaS5ocmVmKVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5yZWFkUmVzcG9uc2VCb2R5ID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBkZWJ1ZygncmVhZGluZyByZXNwb25zZVxcJ3MgYm9keScpXG4gIHZhciBidWZmZXJzID0gW11cbiAgICAsIGJ1ZmZlckxlbmd0aCA9IDBcbiAgICAsIHN0cmluZ3MgPSBbXVxuXG4gIHNlbGYub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICAgIHN0cmluZ3MucHVzaChjaHVuaylcbiAgICB9IGVsc2UgaWYgKGNodW5rLmxlbmd0aCkge1xuICAgICAgYnVmZmVyTGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuICAgICAgYnVmZmVycy5wdXNoKGNodW5rKVxuICAgIH1cbiAgfSlcbiAgc2VsZi5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgIGRlYnVnKCdlbmQgZXZlbnQnLCBzZWxmLnVyaS5ocmVmKVxuICAgIGlmIChzZWxmLl9hYm9ydGVkKSB7XG4gICAgICBkZWJ1ZygnYWJvcnRlZCcsIHNlbGYudXJpLmhyZWYpXG4gICAgICAvLyBgYnVmZmVyYCBpcyBkZWZpbmVkIGluIHRoZSBwYXJlbnQgc2NvcGUgYW5kIHVzZWQgaW4gYSBjbG9zdXJlIGl0IGV4aXN0cyBmb3IgdGhlIGxpZmUgb2YgdGhlIHJlcXVlc3QuXG4gICAgICAvLyBUaGlzIGNhbiBsZWFkIHRvIGxlYWt5IGJlaGF2aW9yIGlmIHRoZSB1c2VyIHJldGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgICAgYnVmZmVycyA9IFtdXG4gICAgICBidWZmZXJMZW5ndGggPSAwXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyTGVuZ3RoKSB7XG4gICAgICBkZWJ1ZygnaGFzIGJvZHknLCBzZWxmLnVyaS5ocmVmLCBidWZmZXJMZW5ndGgpXG4gICAgICByZXNwb25zZS5ib2R5ID0gQnVmZmVyLmNvbmNhdChidWZmZXJzLCBidWZmZXJMZW5ndGgpXG4gICAgICBpZiAoc2VsZi5lbmNvZGluZyAhPT0gbnVsbCkge1xuICAgICAgICByZXNwb25zZS5ib2R5ID0gcmVzcG9uc2UuYm9keS50b1N0cmluZyhzZWxmLmVuY29kaW5nKVxuICAgICAgfVxuICAgICAgLy8gYGJ1ZmZlcmAgaXMgZGVmaW5lZCBpbiB0aGUgcGFyZW50IHNjb3BlIGFuZCB1c2VkIGluIGEgY2xvc3VyZSBpdCBleGlzdHMgZm9yIHRoZSBsaWZlIG9mIHRoZSBSZXF1ZXN0LlxuICAgICAgLy8gVGhpcyBjYW4gbGVhZCB0byBsZWFreSBiZWhhdmlvciBpZiB0aGUgdXNlciByZXRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0IG9iamVjdC5cbiAgICAgIGJ1ZmZlcnMgPSBbXVxuICAgICAgYnVmZmVyTGVuZ3RoID0gMFxuICAgIH0gZWxzZSBpZiAoc3RyaW5ncy5sZW5ndGgpIHtcbiAgICAgIC8vIFRoZSBVVEY4IEJPTSBbMHhFRiwweEJCLDB4QkZdIGlzIGNvbnZlcnRlZCB0byBbMHhGRSwweEZGXSBpbiB0aGUgSlMgVVRDMTYvVUNTMiByZXByZXNlbnRhdGlvbi5cbiAgICAgIC8vIFN0cmlwIHRoaXMgdmFsdWUgb3V0IHdoZW4gdGhlIGVuY29kaW5nIGlzIHNldCB0byAndXRmOCcsIGFzIHVwc3RyZWFtIGNvbnN1bWVycyB3b24ndCBleHBlY3QgaXQgYW5kIGl0IGJyZWFrcyBKU09OLnBhcnNlKCkuXG4gICAgICBpZiAoc2VsZi5lbmNvZGluZyA9PT0gJ3V0ZjgnICYmIHN0cmluZ3NbMF0ubGVuZ3RoID4gMCAmJiBzdHJpbmdzWzBdWzBdID09PSAnXFx1RkVGRicpIHtcbiAgICAgICAgc3RyaW5nc1swXSA9IHN0cmluZ3NbMF0uc3Vic3RyaW5nKDEpXG4gICAgICB9XG4gICAgICByZXNwb25zZS5ib2R5ID0gc3RyaW5ncy5qb2luKCcnKVxuICAgIH1cblxuICAgIGlmIChzZWxmLl9qc29uKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZS5ib2R5ID0gSlNPTi5wYXJzZShyZXNwb25zZS5ib2R5LCBzZWxmLl9qc29uUmV2aXZlcilcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVidWcoJ2ludmFsaWQgSlNPTiByZWNlaXZlZCcsIHNlbGYudXJpLmhyZWYpXG4gICAgICB9XG4gICAgfVxuICAgIGRlYnVnKCdlbWl0dGluZyBjb21wbGV0ZScsIHNlbGYudXJpLmhyZWYpXG4gICAgaWYgKHR5cGVvZiByZXNwb25zZS5ib2R5ID09PSAndW5kZWZpbmVkJyAmJiAhc2VsZi5fanNvbikge1xuICAgICAgcmVzcG9uc2UuYm9keSA9IHNlbGYuZW5jb2RpbmcgPT09IG51bGwgPyBCdWZmZXIuYWxsb2MoMCkgOiAnJ1xuICAgIH1cbiAgICBzZWxmLmVtaXQoJ2NvbXBsZXRlJywgcmVzcG9uc2UsIHJlc3BvbnNlLmJvZHkpXG4gIH0pXG59XG5cblJlcXVlc3QucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgc2VsZi5fYWJvcnRlZCA9IHRydWVcblxuICBpZiAoc2VsZi5yZXEpIHtcbiAgICBzZWxmLnJlcS5hYm9ydCgpXG4gIH1cbiAgZWxzZSBpZiAoc2VsZi5yZXNwb25zZSkge1xuICAgIHNlbGYucmVzcG9uc2UuZGVzdHJveSgpXG4gIH1cblxuICBzZWxmLmVtaXQoJ2Fib3J0Jylcbn1cblxuUmVxdWVzdC5wcm90b3R5cGUucGlwZURlc3QgPSBmdW5jdGlvbiAoZGVzdCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgdmFyIHJlc3BvbnNlID0gc2VsZi5yZXNwb25zZVxuICAvLyBDYWxsZWQgYWZ0ZXIgdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkXG4gIGlmIChkZXN0LmhlYWRlcnMgJiYgIWRlc3QuaGVhZGVyc1NlbnQpIHtcbiAgICBpZiAocmVzcG9uc2UuY2FzZWxlc3MuaGFzKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgdmFyIGN0bmFtZSA9IHJlc3BvbnNlLmNhc2VsZXNzLmhhcygnY29udGVudC10eXBlJylcbiAgICAgIGlmIChkZXN0LnNldEhlYWRlcikge1xuICAgICAgICBkZXN0LnNldEhlYWRlcihjdG5hbWUsIHJlc3BvbnNlLmhlYWRlcnNbY3RuYW1lXSlcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkZXN0LmhlYWRlcnNbY3RuYW1lXSA9IHJlc3BvbnNlLmhlYWRlcnNbY3RuYW1lXVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5jYXNlbGVzcy5oYXMoJ2NvbnRlbnQtbGVuZ3RoJykpIHtcbiAgICAgIHZhciBjbG5hbWUgPSByZXNwb25zZS5jYXNlbGVzcy5oYXMoJ2NvbnRlbnQtbGVuZ3RoJylcbiAgICAgIGlmIChkZXN0LnNldEhlYWRlcikge1xuICAgICAgICBkZXN0LnNldEhlYWRlcihjbG5hbWUsIHJlc3BvbnNlLmhlYWRlcnNbY2xuYW1lXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlc3QuaGVhZGVyc1tjbG5hbWVdID0gcmVzcG9uc2UuaGVhZGVyc1tjbG5hbWVdXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChkZXN0LnNldEhlYWRlciAmJiAhZGVzdC5oZWFkZXJzU2VudCkge1xuICAgIGZvciAodmFyIGkgaW4gcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgLy8gSWYgdGhlIHJlc3BvbnNlIGNvbnRlbnQgaXMgYmVpbmcgZGVjb2RlZCwgdGhlIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVyXG4gICAgICAvLyBvZiB0aGUgcmVzcG9uc2UgZG9lc24ndCByZXByZXNlbnQgdGhlIHBpcGVkIGNvbnRlbnQsIHNvIGRvbid0IHBhc3MgaXQuXG4gICAgICBpZiAoIXNlbGYuZ3ppcCB8fCBpICE9PSAnY29udGVudC1lbmNvZGluZycpIHtcbiAgICAgICAgZGVzdC5zZXRIZWFkZXIoaSwgcmVzcG9uc2UuaGVhZGVyc1tpXSlcbiAgICAgIH1cbiAgICB9XG4gICAgZGVzdC5zdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICB9XG4gIGlmIChzZWxmLnBpcGVmaWx0ZXIpIHtcbiAgICBzZWxmLnBpcGVmaWx0ZXIocmVzcG9uc2UsIGRlc3QpXG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUucXMgPSBmdW5jdGlvbiAocSwgY2xvYmJlcikge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgdmFyIGJhc2VcbiAgaWYgKCFjbG9iYmVyICYmIHNlbGYudXJpLnF1ZXJ5KSB7XG4gICAgYmFzZSA9IHNlbGYuX3FzLnBhcnNlKHNlbGYudXJpLnF1ZXJ5KVxuICB9IGVsc2Uge1xuICAgIGJhc2UgPSB7fVxuICB9XG5cbiAgZm9yICh2YXIgaSBpbiBxKSB7XG4gICAgYmFzZVtpXSA9IHFbaV1cbiAgfVxuXG4gIHZhciBxcyA9IHNlbGYuX3FzLnN0cmluZ2lmeShiYXNlKVxuXG4gIGlmIChxcyA9PT0gJycpIHtcbiAgICByZXR1cm4gc2VsZlxuICB9XG5cbiAgc2VsZi51cmkgPSB1cmwucGFyc2Uoc2VsZi51cmkuaHJlZi5zcGxpdCgnPycpWzBdICsgJz8nICsgcXMpXG4gIHNlbGYudXJsID0gc2VsZi51cmlcbiAgc2VsZi5wYXRoID0gc2VsZi51cmkucGF0aFxuXG4gIGlmIChzZWxmLnVyaS5ob3N0ID09PSAndW5peCcpIHtcbiAgICBzZWxmLmVuYWJsZVVuaXhTb2NrZXQoKVxuICB9XG5cbiAgcmV0dXJuIHNlbGZcbn1cblJlcXVlc3QucHJvdG90eXBlLmZvcm0gPSBmdW5jdGlvbiAoZm9ybSkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKGZvcm0pIHtcbiAgICBpZiAoIS9eYXBwbGljYXRpb25cXC94LXd3dy1mb3JtLXVybGVuY29kZWRcXGIvLnRlc3Qoc2VsZi5nZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgc2VsZi5zZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKVxuICAgIH1cbiAgICBzZWxmLmJvZHkgPSAodHlwZW9mIGZvcm0gPT09ICdzdHJpbmcnKVxuICAgICAgPyBzZWxmLl9xcy5yZmMzOTg2KGZvcm0udG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgIDogc2VsZi5fcXMuc3RyaW5naWZ5KGZvcm0pLnRvU3RyaW5nKCd1dGY4JylcbiAgICByZXR1cm4gc2VsZlxuICB9XG4gIC8vIGNyZWF0ZSBmb3JtLWRhdGEgb2JqZWN0XG4gIHNlbGYuX2Zvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBzZWxmLl9mb3JtLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuICAgIGVyci5tZXNzYWdlID0gJ2Zvcm0tZGF0YTogJyArIGVyci5tZXNzYWdlXG4gICAgc2VsZi5lbWl0KCdlcnJvcicsIGVycilcbiAgICBzZWxmLmFib3J0KClcbiAgfSlcbiAgcmV0dXJuIHNlbGYuX2Zvcm1cbn1cblJlcXVlc3QucHJvdG90eXBlLm11bHRpcGFydCA9IGZ1bmN0aW9uIChtdWx0aXBhcnQpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgc2VsZi5fbXVsdGlwYXJ0Lm9uUmVxdWVzdChtdWx0aXBhcnQpXG5cbiAgaWYgKCFzZWxmLl9tdWx0aXBhcnQuY2h1bmtlZCkge1xuICAgIHNlbGYuYm9keSA9IHNlbGYuX211bHRpcGFydC5ib2R5XG4gIH1cblxuICByZXR1cm4gc2VsZlxufVxuUmVxdWVzdC5wcm90b3R5cGUuanNvbiA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgaWYgKCFzZWxmLmhhc0hlYWRlcignYWNjZXB0JykpIHtcbiAgICBzZWxmLnNldEhlYWRlcignYWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzZWxmLmpzb25SZXBsYWNlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNlbGYuX2pzb25SZXBsYWNlciA9IHNlbGYuanNvblJlcGxhY2VyXG4gIH1cblxuICBzZWxmLl9qc29uID0gdHJ1ZVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgaWYgKHNlbGYuYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIS9eYXBwbGljYXRpb25cXC94LXd3dy1mb3JtLXVybGVuY29kZWRcXGIvLnRlc3Qoc2VsZi5nZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICBzZWxmLmJvZHkgPSBzYWZlU3RyaW5naWZ5KHNlbGYuYm9keSwgc2VsZi5fanNvblJlcGxhY2VyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5ib2R5ID0gc2VsZi5fcXMucmZjMzk4NihzZWxmLmJvZHkpXG4gICAgICB9XG4gICAgICBpZiAoIXNlbGYuaGFzSGVhZGVyKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICBzZWxmLnNldEhlYWRlcignY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzZWxmLmJvZHkgPSBzYWZlU3RyaW5naWZ5KHZhbCwgc2VsZi5fanNvblJlcGxhY2VyKVxuICAgIGlmICghc2VsZi5oYXNIZWFkZXIoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBzZWxmLnNldEhlYWRlcignY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2VsZi5qc29uUmV2aXZlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNlbGYuX2pzb25SZXZpdmVyID0gc2VsZi5qc29uUmV2aXZlclxuICB9XG5cbiAgcmV0dXJuIHNlbGZcbn1cblJlcXVlc3QucHJvdG90eXBlLmdldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lLCBoZWFkZXJzKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICB2YXIgcmVzdWx0LCByZSwgbWF0Y2hcbiAgaWYgKCFoZWFkZXJzKSB7XG4gICAgaGVhZGVycyA9IHNlbGYuaGVhZGVyc1xuICB9XG4gIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChrZXkubGVuZ3RoICE9PSBuYW1lLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHJlID0gbmV3IFJlZ0V4cChuYW1lLCAnaScpXG4gICAgbWF0Y2ggPSBrZXkubWF0Y2gocmUpXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICByZXN1bHQgPSBoZWFkZXJzW2tleV1cbiAgICB9XG4gIH0pXG4gIHJldHVybiByZXN1bHRcbn1cblJlcXVlc3QucHJvdG90eXBlLmVuYWJsZVVuaXhTb2NrZXQgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEdldCB0aGUgc29ja2V0ICYgcmVxdWVzdCBwYXRocyBmcm9tIHRoZSBVUkxcbiAgdmFyIHVuaXhQYXJ0cyA9IHRoaXMudXJpLnBhdGguc3BsaXQoJzonKVxuICAgICwgaG9zdCA9IHVuaXhQYXJ0c1swXVxuICAgICwgcGF0aCA9IHVuaXhQYXJ0c1sxXVxuICAvLyBBcHBseSB1bml4IHByb3BlcnRpZXMgdG8gcmVxdWVzdFxuICB0aGlzLnNvY2tldFBhdGggPSBob3N0XG4gIHRoaXMudXJpLnBhdGhuYW1lID0gcGF0aFxuICB0aGlzLnVyaS5wYXRoID0gcGF0aFxuICB0aGlzLnVyaS5ob3N0ID0gaG9zdFxuICB0aGlzLnVyaS5ob3N0bmFtZSA9IGhvc3RcbiAgdGhpcy51cmkuaXNVbml4ID0gdHJ1ZVxufVxuXG5cblJlcXVlc3QucHJvdG90eXBlLmF1dGggPSBmdW5jdGlvbiAodXNlciwgcGFzcywgc2VuZEltbWVkaWF0ZWx5LCBiZWFyZXIpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgc2VsZi5fYXV0aC5vblJlcXVlc3QodXNlciwgcGFzcywgc2VuZEltbWVkaWF0ZWx5LCBiZWFyZXIpXG5cbiAgcmV0dXJuIHNlbGZcbn1cblJlcXVlc3QucHJvdG90eXBlLmF3cyA9IGZ1bmN0aW9uIChvcHRzLCBub3cpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgaWYgKCFub3cpIHtcbiAgICBzZWxmLl9hd3MgPSBvcHRzXG4gICAgcmV0dXJuIHNlbGZcbiAgfVxuXG4gIGlmIChvcHRzLnNpZ25fdmVyc2lvbiA9PSA0IHx8IG9wdHMuc2lnbl92ZXJzaW9uID09ICc0Jykge1xuICAgIC8vIHVzZSBhd3M0XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBob3N0OiBzZWxmLnVyaS5ob3N0LFxuICAgICAgcGF0aDogc2VsZi51cmkucGF0aCxcbiAgICAgIG1ldGhvZDogc2VsZi5tZXRob2QsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdjb250ZW50LXR5cGUnOiBzZWxmLmdldEhlYWRlcignY29udGVudC10eXBlJykgfHwgJydcbiAgICAgIH0sXG4gICAgICBib2R5OiBzZWxmLmJvZHlcbiAgICB9XG4gICAgdmFyIHNpZ25SZXMgPSBhd3M0LnNpZ24ob3B0aW9ucywge1xuICAgICAgYWNjZXNzS2V5SWQ6IG9wdHMua2V5LFxuICAgICAgc2VjcmV0QWNjZXNzS2V5OiBvcHRzLnNlY3JldCxcbiAgICAgIHNlc3Npb25Ub2tlbjogb3B0cy5zZXNzaW9uXG4gICAgfSlcbiAgICBzZWxmLnNldEhlYWRlcignYXV0aG9yaXphdGlvbicsIHNpZ25SZXMuaGVhZGVycy5BdXRob3JpemF0aW9uKVxuICAgIHNlbGYuc2V0SGVhZGVyKCd4LWFtei1kYXRlJywgc2lnblJlcy5oZWFkZXJzWydYLUFtei1EYXRlJ10pXG4gICAgaWYgKHNpZ25SZXMuaGVhZGVyc1snWC1BbXotU2VjdXJpdHktVG9rZW4nXSkge1xuICAgICAgc2VsZi5zZXRIZWFkZXIoJ3gtYW16LXNlY3VyaXR5LXRva2VuJywgc2lnblJlcy5oZWFkZXJzWydYLUFtei1TZWN1cml0eS1Ub2tlbiddKVxuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBkZWZhdWx0OiB1c2UgYXdzLXNpZ24yXG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpXG4gICAgc2VsZi5zZXRIZWFkZXIoJ2RhdGUnLCBkYXRlLnRvVVRDU3RyaW5nKCkpXG4gICAgdmFyIGF1dGggPVxuICAgICAgeyBrZXk6IG9wdHMua2V5XG4gICAgICAsIHNlY3JldDogb3B0cy5zZWNyZXRcbiAgICAgICwgdmVyYjogc2VsZi5tZXRob2QudG9VcHBlckNhc2UoKVxuICAgICAgLCBkYXRlOiBkYXRlXG4gICAgICAsIGNvbnRlbnRUeXBlOiBzZWxmLmdldEhlYWRlcignY29udGVudC10eXBlJykgfHwgJydcbiAgICAgICwgbWQ1OiBzZWxmLmdldEhlYWRlcignY29udGVudC1tZDUnKSB8fCAnJ1xuICAgICAgLCBhbWF6b25IZWFkZXJzOiBhd3MyLmNhbm9uaWNhbGl6ZUhlYWRlcnMoc2VsZi5oZWFkZXJzKVxuICAgICAgfVxuICAgIHZhciBwYXRoID0gc2VsZi51cmkucGF0aFxuICAgIGlmIChvcHRzLmJ1Y2tldCAmJiBwYXRoKSB7XG4gICAgICBhdXRoLnJlc291cmNlID0gJy8nICsgb3B0cy5idWNrZXQgKyBwYXRoXG4gICAgfSBlbHNlIGlmIChvcHRzLmJ1Y2tldCAmJiAhcGF0aCkge1xuICAgICAgYXV0aC5yZXNvdXJjZSA9ICcvJyArIG9wdHMuYnVja2V0XG4gICAgfSBlbHNlIGlmICghb3B0cy5idWNrZXQgJiYgcGF0aCkge1xuICAgICAgYXV0aC5yZXNvdXJjZSA9IHBhdGhcbiAgICB9IGVsc2UgaWYgKCFvcHRzLmJ1Y2tldCAmJiAhcGF0aCkge1xuICAgICAgYXV0aC5yZXNvdXJjZSA9ICcvJ1xuICAgIH1cbiAgICBhdXRoLnJlc291cmNlID0gYXdzMi5jYW5vbmljYWxpemVSZXNvdXJjZShhdXRoLnJlc291cmNlKVxuICAgIHNlbGYuc2V0SGVhZGVyKCdhdXRob3JpemF0aW9uJywgYXdzMi5hdXRob3JpemF0aW9uKGF1dGgpKVxuICB9XG5cbiAgcmV0dXJuIHNlbGZcbn1cblJlcXVlc3QucHJvdG90eXBlLmh0dHBTaWduYXR1cmUgPSBmdW5jdGlvbiAob3B0cykge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaHR0cFNpZ25hdHVyZS5zaWduUmVxdWVzdCh7XG4gICAgZ2V0SGVhZGVyOiBmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBzZWxmLmdldEhlYWRlcihoZWFkZXIsIHNlbGYuaGVhZGVycylcbiAgICB9LFxuICAgIHNldEhlYWRlcjogZnVuY3Rpb24oaGVhZGVyLCB2YWx1ZSkge1xuICAgICAgc2VsZi5zZXRIZWFkZXIoaGVhZGVyLCB2YWx1ZSlcbiAgICB9LFxuICAgIG1ldGhvZDogc2VsZi5tZXRob2QsXG4gICAgcGF0aDogc2VsZi5wYXRoXG4gIH0sIG9wdHMpXG4gIGRlYnVnKCdodHRwU2lnbmF0dXJlIGF1dGhvcml6YXRpb24nLCBzZWxmLmdldEhlYWRlcignYXV0aG9yaXphdGlvbicpKVxuXG4gIHJldHVybiBzZWxmXG59XG5SZXF1ZXN0LnByb3RvdHlwZS5oYXdrID0gZnVuY3Rpb24gKG9wdHMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIHNlbGYuc2V0SGVhZGVyKCdBdXRob3JpemF0aW9uJywgaGF3ay5jbGllbnQuaGVhZGVyKHNlbGYudXJpLCBzZWxmLm1ldGhvZCwgb3B0cykuZmllbGQpXG59XG5SZXF1ZXN0LnByb3RvdHlwZS5vYXV0aCA9IGZ1bmN0aW9uIChfb2F1dGgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgc2VsZi5fb2F1dGgub25SZXF1ZXN0KF9vYXV0aClcblxuICByZXR1cm4gc2VsZlxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5qYXIgPSBmdW5jdGlvbiAoamFyKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICB2YXIgY29va2llc1xuXG4gIGlmIChzZWxmLl9yZWRpcmVjdC5yZWRpcmVjdHNGb2xsb3dlZCA9PT0gMCkge1xuICAgIHNlbGYub3JpZ2luYWxDb29raWVIZWFkZXIgPSBzZWxmLmdldEhlYWRlcignY29va2llJylcbiAgfVxuXG4gIGlmICghamFyKSB7XG4gICAgLy8gZGlzYWJsZSBjb29raWVzXG4gICAgY29va2llcyA9IGZhbHNlXG4gICAgc2VsZi5fZGlzYWJsZUNvb2tpZXMgPSB0cnVlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhcmdldENvb2tpZUphciA9IChqYXIgJiYgamFyLmdldENvb2tpZVN0cmluZykgPyBqYXIgOiBnbG9iYWxDb29raWVKYXJcbiAgICB2YXIgdXJpaHJlZiA9IHNlbGYudXJpLmhyZWZcbiAgICAvL2ZldGNoIGNvb2tpZSBpbiB0aGUgU3BlY2lmaWVkIGhvc3RcbiAgICBpZiAodGFyZ2V0Q29va2llSmFyKSB7XG4gICAgICBjb29raWVzID0gdGFyZ2V0Q29va2llSmFyLmdldENvb2tpZVN0cmluZyh1cmlocmVmKVxuICAgIH1cbiAgfVxuXG4gIC8vaWYgbmVlZCBjb29raWUgYW5kIGNvb2tpZSBpcyBub3QgZW1wdHlcbiAgaWYgKGNvb2tpZXMgJiYgY29va2llcy5sZW5ndGgpIHtcbiAgICBpZiAoc2VsZi5vcmlnaW5hbENvb2tpZUhlYWRlcikge1xuICAgICAgLy8gRG9uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIENvb2tpZSBoZWFkZXJcbiAgICAgIHNlbGYuc2V0SGVhZGVyKCdjb29raWUnLCBzZWxmLm9yaWdpbmFsQ29va2llSGVhZGVyICsgJzsgJyArIGNvb2tpZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuc2V0SGVhZGVyKCdjb29raWUnLCBjb29raWVzKVxuICAgIH1cbiAgfVxuICBzZWxmLl9qYXIgPSBqYXJcbiAgcmV0dXJuIHNlbGZcbn1cblxuXG4vLyBTdHJlYW0gQVBJXG5SZXF1ZXN0LnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKGRlc3QsIG9wdHMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG5cbiAgaWYgKHNlbGYucmVzcG9uc2UpIHtcbiAgICBpZiAoc2VsZi5fZGVzdGRhdGEpIHtcbiAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgcGlwZSBhZnRlciBkYXRhIGhhcyBiZWVuIGVtaXR0ZWQgZnJvbSB0aGUgcmVzcG9uc2UuJykpXG4gICAgfSBlbHNlIGlmIChzZWxmLl9lbmRlZCkge1xuICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignWW91IGNhbm5vdCBwaXBlIGFmdGVyIHRoZSByZXNwb25zZSBoYXMgYmVlbiBlbmRlZC4nKSlcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLlN0cmVhbS5wcm90b3R5cGUucGlwZS5jYWxsKHNlbGYsIGRlc3QsIG9wdHMpXG4gICAgICBzZWxmLnBpcGVEZXN0KGRlc3QpXG4gICAgICByZXR1cm4gZGVzdFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzZWxmLmRlc3RzLnB1c2goZGVzdClcbiAgICBzdHJlYW0uU3RyZWFtLnByb3RvdHlwZS5waXBlLmNhbGwoc2VsZiwgZGVzdCwgb3B0cylcbiAgICByZXR1cm4gZGVzdFxuICB9XG59XG5SZXF1ZXN0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmIChzZWxmLl9hYm9ydGVkKSB7cmV0dXJufVxuXG4gIGlmICghc2VsZi5fc3RhcnRlZCkge1xuICAgIHNlbGYuc3RhcnQoKVxuICB9XG4gIGlmIChzZWxmLnJlcSkge1xuICAgIHJldHVybiBzZWxmLnJlcS53cml0ZS5hcHBseShzZWxmLnJlcSwgYXJndW1lbnRzKVxuICB9XG59XG5SZXF1ZXN0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmIChzZWxmLl9hYm9ydGVkKSB7cmV0dXJufVxuXG4gIGlmIChjaHVuaykge1xuICAgIHNlbGYud3JpdGUoY2h1bmspXG4gIH1cbiAgaWYgKCFzZWxmLl9zdGFydGVkKSB7XG4gICAgc2VsZi5zdGFydCgpXG4gIH1cbiAgaWYgKHNlbGYucmVxKSB7XG4gICAgc2VsZi5yZXEuZW5kKClcbiAgfVxufVxuUmVxdWVzdC5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoIXNlbGYucmVzcG9uc2VDb250ZW50KSB7XG4gICAgc2VsZi5fcGF1c2VkID0gdHJ1ZVxuICB9IGVsc2Uge1xuICAgIHNlbGYucmVzcG9uc2VDb250ZW50LnBhdXNlLmFwcGx5KHNlbGYucmVzcG9uc2VDb250ZW50LCBhcmd1bWVudHMpXG4gIH1cbn1cblJlcXVlc3QucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzXG4gIGlmICghc2VsZi5yZXNwb25zZUNvbnRlbnQpIHtcbiAgICBzZWxmLl9wYXVzZWQgPSBmYWxzZVxuICB9IGVsc2Uge1xuICAgIHNlbGYucmVzcG9uc2VDb250ZW50LnJlc3VtZS5hcHBseShzZWxmLnJlc3BvbnNlQ29udGVudCwgYXJndW1lbnRzKVxuICB9XG59XG5SZXF1ZXN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgaWYgKCFzZWxmLl9lbmRlZCkge1xuICAgIHNlbGYuZW5kKClcbiAgfSBlbHNlIGlmIChzZWxmLnJlc3BvbnNlKSB7XG4gICAgc2VsZi5yZXNwb25zZS5kZXN0cm95KClcbiAgfVxufVxuXG5SZXF1ZXN0LmRlZmF1bHRQcm94eUhlYWRlcldoaXRlTGlzdCA9XG4gIFR1bm5lbC5kZWZhdWx0UHJveHlIZWFkZXJXaGl0ZUxpc3Quc2xpY2UoKVxuXG5SZXF1ZXN0LmRlZmF1bHRQcm94eUhlYWRlckV4Y2x1c2l2ZUxpc3QgPVxuICBUdW5uZWwuZGVmYXVsdFByb3h5SGVhZGVyRXhjbHVzaXZlTGlzdC5zbGljZSgpXG5cbi8vIEV4cG9ydHNcblxuUmVxdWVzdC5wcm90b3R5cGUudG9KU09OID0gcmVxdWVzdFRvSlNPTlxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0XG4iLCIndXNlIHN0cmljdCdcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBIYXNoQmFzZSA9IHJlcXVpcmUoJ2hhc2gtYmFzZScpXG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCAoKSB7XG4gIEhhc2hCYXNlLmNhbGwodGhpcywgNjQpXG5cbiAgLy8gc3RhdGVcbiAgdGhpcy5fYSA9IDB4Njc0NTIzMDFcbiAgdGhpcy5fYiA9IDB4ZWZjZGFiODlcbiAgdGhpcy5fYyA9IDB4OThiYWRjZmVcbiAgdGhpcy5fZCA9IDB4MTAzMjU0NzZcbiAgdGhpcy5fZSA9IDB4YzNkMmUxZjBcbn1cblxuaW5oZXJpdHMoUklQRU1EMTYwLCBIYXNoQmFzZSlcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbSA9IG5ldyBBcnJheSgxNilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSBtW2ldID0gdGhpcy5fYmxvY2sucmVhZEludDMyTEUoaSAqIDQpXG5cbiAgdmFyIGFsID0gdGhpcy5fYVxuICB2YXIgYmwgPSB0aGlzLl9iXG4gIHZhciBjbCA9IHRoaXMuX2NcbiAgdmFyIGRsID0gdGhpcy5fZFxuICB2YXIgZWwgPSB0aGlzLl9lXG5cbiAgLy8gTWogPSAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1XG4gIC8vIEsgPSAweDAwMDAwMDAwXG4gIC8vIFNqID0gMTEsIDE0LCAxNSwgMTIsIDUsIDgsIDcsIDksIDExLCAxMywgMTQsIDE1LCA2LCA3LCA5LCA4XG4gIGFsID0gZm4xKGFsLCBibCwgY2wsIGRsLCBlbCwgbVswXSwgMHgwMDAwMDAwMCwgMTEpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuMShlbCwgYWwsIGJsLCBjbCwgZGwsIG1bMV0sIDB4MDAwMDAwMDAsIDE0KTsgYmwgPSByb3RsKGJsLCAxMClcbiAgZGwgPSBmbjEoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzJdLCAweDAwMDAwMDAwLCAxNSk7IGFsID0gcm90bChhbCwgMTApXG4gIGNsID0gZm4xKGNsLCBkbCwgZWwsIGFsLCBibCwgbVszXSwgMHgwMDAwMDAwMCwgMTIpOyBlbCA9IHJvdGwoZWwsIDEwKVxuICBibCA9IGZuMShibCwgY2wsIGRsLCBlbCwgYWwsIG1bNF0sIDB4MDAwMDAwMDAsIDUpOyBkbCA9IHJvdGwoZGwsIDEwKVxuICBhbCA9IGZuMShhbCwgYmwsIGNsLCBkbCwgZWwsIG1bNV0sIDB4MDAwMDAwMDAsIDgpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuMShlbCwgYWwsIGJsLCBjbCwgZGwsIG1bNl0sIDB4MDAwMDAwMDAsIDcpOyBibCA9IHJvdGwoYmwsIDEwKVxuICBkbCA9IGZuMShkbCwgZWwsIGFsLCBibCwgY2wsIG1bN10sIDB4MDAwMDAwMDAsIDkpOyBhbCA9IHJvdGwoYWwsIDEwKVxuICBjbCA9IGZuMShjbCwgZGwsIGVsLCBhbCwgYmwsIG1bOF0sIDB4MDAwMDAwMDAsIDExKTsgZWwgPSByb3RsKGVsLCAxMClcbiAgYmwgPSBmbjEoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzldLCAweDAwMDAwMDAwLCAxMyk7IGRsID0gcm90bChkbCwgMTApXG4gIGFsID0gZm4xKGFsLCBibCwgY2wsIGRsLCBlbCwgbVsxMF0sIDB4MDAwMDAwMDAsIDE0KTsgY2wgPSByb3RsKGNsLCAxMClcbiAgZWwgPSBmbjEoZWwsIGFsLCBibCwgY2wsIGRsLCBtWzExXSwgMHgwMDAwMDAwMCwgMTUpOyBibCA9IHJvdGwoYmwsIDEwKVxuICBkbCA9IGZuMShkbCwgZWwsIGFsLCBibCwgY2wsIG1bMTJdLCAweDAwMDAwMDAwLCA2KTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjEoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzEzXSwgMHgwMDAwMDAwMCwgNyk7IGVsID0gcm90bChlbCwgMTApXG4gIGJsID0gZm4xKGJsLCBjbCwgZGwsIGVsLCBhbCwgbVsxNF0sIDB4MDAwMDAwMDAsIDkpOyBkbCA9IHJvdGwoZGwsIDEwKVxuICBhbCA9IGZuMShhbCwgYmwsIGNsLCBkbCwgZWwsIG1bMTVdLCAweDAwMDAwMDAwLCA4KTsgY2wgPSByb3RsKGNsLCAxMClcblxuICAvLyBNaiA9IDcsIDQsIDEzLCAxLCAxMCwgNiwgMTUsIDMsIDEyLCAwLCA5LCA1LCAyLCAxNCwgMTEsIDhcbiAgLy8gSyA9IDB4NWE4Mjc5OTlcbiAgLy8gU2ogPSA3LCA2LCA4LCAxMywgMTEsIDksIDcsIDE1LCA3LCAxMiwgMTUsIDksIDExLCA3LCAxMywgMTJcbiAgZWwgPSBmbjIoZWwsIGFsLCBibCwgY2wsIGRsLCBtWzddLCAweDVhODI3OTk5LCA3KTsgYmwgPSByb3RsKGJsLCAxMClcbiAgZGwgPSBmbjIoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzRdLCAweDVhODI3OTk5LCA2KTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjIoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzEzXSwgMHg1YTgyNzk5OSwgOCk7IGVsID0gcm90bChlbCwgMTApXG4gIGJsID0gZm4yKGJsLCBjbCwgZGwsIGVsLCBhbCwgbVsxXSwgMHg1YTgyNzk5OSwgMTMpOyBkbCA9IHJvdGwoZGwsIDEwKVxuICBhbCA9IGZuMihhbCwgYmwsIGNsLCBkbCwgZWwsIG1bMTBdLCAweDVhODI3OTk5LCAxMSk7IGNsID0gcm90bChjbCwgMTApXG4gIGVsID0gZm4yKGVsLCBhbCwgYmwsIGNsLCBkbCwgbVs2XSwgMHg1YTgyNzk5OSwgOSk7IGJsID0gcm90bChibCwgMTApXG4gIGRsID0gZm4yKGRsLCBlbCwgYWwsIGJsLCBjbCwgbVsxNV0sIDB4NWE4Mjc5OTksIDcpOyBhbCA9IHJvdGwoYWwsIDEwKVxuICBjbCA9IGZuMihjbCwgZGwsIGVsLCBhbCwgYmwsIG1bM10sIDB4NWE4Mjc5OTksIDE1KTsgZWwgPSByb3RsKGVsLCAxMClcbiAgYmwgPSBmbjIoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzEyXSwgMHg1YTgyNzk5OSwgNyk7IGRsID0gcm90bChkbCwgMTApXG4gIGFsID0gZm4yKGFsLCBibCwgY2wsIGRsLCBlbCwgbVswXSwgMHg1YTgyNzk5OSwgMTIpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuMihlbCwgYWwsIGJsLCBjbCwgZGwsIG1bOV0sIDB4NWE4Mjc5OTksIDE1KTsgYmwgPSByb3RsKGJsLCAxMClcbiAgZGwgPSBmbjIoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzVdLCAweDVhODI3OTk5LCA5KTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjIoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzJdLCAweDVhODI3OTk5LCAxMSk7IGVsID0gcm90bChlbCwgMTApXG4gIGJsID0gZm4yKGJsLCBjbCwgZGwsIGVsLCBhbCwgbVsxNF0sIDB4NWE4Mjc5OTksIDcpOyBkbCA9IHJvdGwoZGwsIDEwKVxuICBhbCA9IGZuMihhbCwgYmwsIGNsLCBkbCwgZWwsIG1bMTFdLCAweDVhODI3OTk5LCAxMyk7IGNsID0gcm90bChjbCwgMTApXG4gIGVsID0gZm4yKGVsLCBhbCwgYmwsIGNsLCBkbCwgbVs4XSwgMHg1YTgyNzk5OSwgMTIpOyBibCA9IHJvdGwoYmwsIDEwKVxuXG4gIC8vIE1qID0gMywgMTAsIDE0LCA0LCA5LCAxNSwgOCwgMSwgMiwgNywgMCwgNiwgMTMsIDExLCA1LCAxMlxuICAvLyBLID0gMHg2ZWQ5ZWJhMVxuICAvLyBTaiA9IDExLCAxMywgNiwgNywgMTQsIDksIDEzLCAxNSwgMTQsIDgsIDEzLCA2LCA1LCAxMiwgNywgNVxuICBkbCA9IGZuMyhkbCwgZWwsIGFsLCBibCwgY2wsIG1bM10sIDB4NmVkOWViYTEsIDExKTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjMoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzEwXSwgMHg2ZWQ5ZWJhMSwgMTMpOyBlbCA9IHJvdGwoZWwsIDEwKVxuICBibCA9IGZuMyhibCwgY2wsIGRsLCBlbCwgYWwsIG1bMTRdLCAweDZlZDllYmExLCA2KTsgZGwgPSByb3RsKGRsLCAxMClcbiAgYWwgPSBmbjMoYWwsIGJsLCBjbCwgZGwsIGVsLCBtWzRdLCAweDZlZDllYmExLCA3KTsgY2wgPSByb3RsKGNsLCAxMClcbiAgZWwgPSBmbjMoZWwsIGFsLCBibCwgY2wsIGRsLCBtWzldLCAweDZlZDllYmExLCAxNCk7IGJsID0gcm90bChibCwgMTApXG4gIGRsID0gZm4zKGRsLCBlbCwgYWwsIGJsLCBjbCwgbVsxNV0sIDB4NmVkOWViYTEsIDkpOyBhbCA9IHJvdGwoYWwsIDEwKVxuICBjbCA9IGZuMyhjbCwgZGwsIGVsLCBhbCwgYmwsIG1bOF0sIDB4NmVkOWViYTEsIDEzKTsgZWwgPSByb3RsKGVsLCAxMClcbiAgYmwgPSBmbjMoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzFdLCAweDZlZDllYmExLCAxNSk7IGRsID0gcm90bChkbCwgMTApXG4gIGFsID0gZm4zKGFsLCBibCwgY2wsIGRsLCBlbCwgbVsyXSwgMHg2ZWQ5ZWJhMSwgMTQpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuMyhlbCwgYWwsIGJsLCBjbCwgZGwsIG1bN10sIDB4NmVkOWViYTEsIDgpOyBibCA9IHJvdGwoYmwsIDEwKVxuICBkbCA9IGZuMyhkbCwgZWwsIGFsLCBibCwgY2wsIG1bMF0sIDB4NmVkOWViYTEsIDEzKTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjMoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzZdLCAweDZlZDllYmExLCA2KTsgZWwgPSByb3RsKGVsLCAxMClcbiAgYmwgPSBmbjMoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzEzXSwgMHg2ZWQ5ZWJhMSwgNSk7IGRsID0gcm90bChkbCwgMTApXG4gIGFsID0gZm4zKGFsLCBibCwgY2wsIGRsLCBlbCwgbVsxMV0sIDB4NmVkOWViYTEsIDEyKTsgY2wgPSByb3RsKGNsLCAxMClcbiAgZWwgPSBmbjMoZWwsIGFsLCBibCwgY2wsIGRsLCBtWzVdLCAweDZlZDllYmExLCA3KTsgYmwgPSByb3RsKGJsLCAxMClcbiAgZGwgPSBmbjMoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzEyXSwgMHg2ZWQ5ZWJhMSwgNSk7IGFsID0gcm90bChhbCwgMTApXG5cbiAgLy8gTWogPSAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyXG4gIC8vIEsgPSAweDhmMWJiY2RjXG4gIC8vIFNqID0gMTEsIDEyLCAxNCwgMTUsIDE0LCAxNSwgOSwgOCwgOSwgMTQsIDUsIDYsIDgsIDYsIDUsIDEyXG4gIGNsID0gZm40KGNsLCBkbCwgZWwsIGFsLCBibCwgbVsxXSwgMHg4ZjFiYmNkYywgMTEpOyBlbCA9IHJvdGwoZWwsIDEwKVxuICBibCA9IGZuNChibCwgY2wsIGRsLCBlbCwgYWwsIG1bOV0sIDB4OGYxYmJjZGMsIDEyKTsgZGwgPSByb3RsKGRsLCAxMClcbiAgYWwgPSBmbjQoYWwsIGJsLCBjbCwgZGwsIGVsLCBtWzExXSwgMHg4ZjFiYmNkYywgMTQpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuNChlbCwgYWwsIGJsLCBjbCwgZGwsIG1bMTBdLCAweDhmMWJiY2RjLCAxNSk7IGJsID0gcm90bChibCwgMTApXG4gIGRsID0gZm40KGRsLCBlbCwgYWwsIGJsLCBjbCwgbVswXSwgMHg4ZjFiYmNkYywgMTQpOyBhbCA9IHJvdGwoYWwsIDEwKVxuICBjbCA9IGZuNChjbCwgZGwsIGVsLCBhbCwgYmwsIG1bOF0sIDB4OGYxYmJjZGMsIDE1KTsgZWwgPSByb3RsKGVsLCAxMClcbiAgYmwgPSBmbjQoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzEyXSwgMHg4ZjFiYmNkYywgOSk7IGRsID0gcm90bChkbCwgMTApXG4gIGFsID0gZm40KGFsLCBibCwgY2wsIGRsLCBlbCwgbVs0XSwgMHg4ZjFiYmNkYywgOCk7IGNsID0gcm90bChjbCwgMTApXG4gIGVsID0gZm40KGVsLCBhbCwgYmwsIGNsLCBkbCwgbVsxM10sIDB4OGYxYmJjZGMsIDkpOyBibCA9IHJvdGwoYmwsIDEwKVxuICBkbCA9IGZuNChkbCwgZWwsIGFsLCBibCwgY2wsIG1bM10sIDB4OGYxYmJjZGMsIDE0KTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjQoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzddLCAweDhmMWJiY2RjLCA1KTsgZWwgPSByb3RsKGVsLCAxMClcbiAgYmwgPSBmbjQoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzE1XSwgMHg4ZjFiYmNkYywgNik7IGRsID0gcm90bChkbCwgMTApXG4gIGFsID0gZm40KGFsLCBibCwgY2wsIGRsLCBlbCwgbVsxNF0sIDB4OGYxYmJjZGMsIDgpOyBjbCA9IHJvdGwoY2wsIDEwKVxuICBlbCA9IGZuNChlbCwgYWwsIGJsLCBjbCwgZGwsIG1bNV0sIDB4OGYxYmJjZGMsIDYpOyBibCA9IHJvdGwoYmwsIDEwKVxuICBkbCA9IGZuNChkbCwgZWwsIGFsLCBibCwgY2wsIG1bNl0sIDB4OGYxYmJjZGMsIDUpOyBhbCA9IHJvdGwoYWwsIDEwKVxuICBjbCA9IGZuNChjbCwgZGwsIGVsLCBhbCwgYmwsIG1bMl0sIDB4OGYxYmJjZGMsIDEyKTsgZWwgPSByb3RsKGVsLCAxMClcblxuICAvLyBNaiA9IDQsIDAsIDUsIDksIDcsIDEyLCAyLCAxMCwgMTQsIDEsIDMsIDgsIDExLCA2LCAxNSwgMTNcbiAgLy8gSyA9IDB4YTk1M2ZkNGVcbiAgLy8gU2ogPSA5LCAxNSwgNSwgMTEsIDYsIDgsIDEzLCAxMiwgNSwgMTIsIDEzLCAxNCwgMTEsIDgsIDUsIDZcbiAgYmwgPSBmbjUoYmwsIGNsLCBkbCwgZWwsIGFsLCBtWzRdLCAweGE5NTNmZDRlLCA5KTsgZGwgPSByb3RsKGRsLCAxMClcbiAgYWwgPSBmbjUoYWwsIGJsLCBjbCwgZGwsIGVsLCBtWzBdLCAweGE5NTNmZDRlLCAxNSk7IGNsID0gcm90bChjbCwgMTApXG4gIGVsID0gZm41KGVsLCBhbCwgYmwsIGNsLCBkbCwgbVs1XSwgMHhhOTUzZmQ0ZSwgNSk7IGJsID0gcm90bChibCwgMTApXG4gIGRsID0gZm41KGRsLCBlbCwgYWwsIGJsLCBjbCwgbVs5XSwgMHhhOTUzZmQ0ZSwgMTEpOyBhbCA9IHJvdGwoYWwsIDEwKVxuICBjbCA9IGZuNShjbCwgZGwsIGVsLCBhbCwgYmwsIG1bN10sIDB4YTk1M2ZkNGUsIDYpOyBlbCA9IHJvdGwoZWwsIDEwKVxuICBibCA9IGZuNShibCwgY2wsIGRsLCBlbCwgYWwsIG1bMTJdLCAweGE5NTNmZDRlLCA4KTsgZGwgPSByb3RsKGRsLCAxMClcbiAgYWwgPSBmbjUoYWwsIGJsLCBjbCwgZGwsIGVsLCBtWzJdLCAweGE5NTNmZDRlLCAxMyk7IGNsID0gcm90bChjbCwgMTApXG4gIGVsID0gZm41KGVsLCBhbCwgYmwsIGNsLCBkbCwgbVsxMF0sIDB4YTk1M2ZkNGUsIDEyKTsgYmwgPSByb3RsKGJsLCAxMClcbiAgZGwgPSBmbjUoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzE0XSwgMHhhOTUzZmQ0ZSwgNSk7IGFsID0gcm90bChhbCwgMTApXG4gIGNsID0gZm41KGNsLCBkbCwgZWwsIGFsLCBibCwgbVsxXSwgMHhhOTUzZmQ0ZSwgMTIpOyBlbCA9IHJvdGwoZWwsIDEwKVxuICBibCA9IGZuNShibCwgY2wsIGRsLCBlbCwgYWwsIG1bM10sIDB4YTk1M2ZkNGUsIDEzKTsgZGwgPSByb3RsKGRsLCAxMClcbiAgYWwgPSBmbjUoYWwsIGJsLCBjbCwgZGwsIGVsLCBtWzhdLCAweGE5NTNmZDRlLCAxNCk7IGNsID0gcm90bChjbCwgMTApXG4gIGVsID0gZm41KGVsLCBhbCwgYmwsIGNsLCBkbCwgbVsxMV0sIDB4YTk1M2ZkNGUsIDExKTsgYmwgPSByb3RsKGJsLCAxMClcbiAgZGwgPSBmbjUoZGwsIGVsLCBhbCwgYmwsIGNsLCBtWzZdLCAweGE5NTNmZDRlLCA4KTsgYWwgPSByb3RsKGFsLCAxMClcbiAgY2wgPSBmbjUoY2wsIGRsLCBlbCwgYWwsIGJsLCBtWzE1XSwgMHhhOTUzZmQ0ZSwgNSk7IGVsID0gcm90bChlbCwgMTApXG4gIGJsID0gZm41KGJsLCBjbCwgZGwsIGVsLCBhbCwgbVsxM10sIDB4YTk1M2ZkNGUsIDYpOyBkbCA9IHJvdGwoZGwsIDEwKVxuXG4gIHZhciBhciA9IHRoaXMuX2FcbiAgdmFyIGJyID0gdGhpcy5fYlxuICB2YXIgY3IgPSB0aGlzLl9jXG4gIHZhciBkciA9IHRoaXMuX2RcbiAgdmFyIGVyID0gdGhpcy5fZVxuXG4gIC8vIE0naiA9IDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTJcbiAgLy8gSycgPSAweDUwYTI4YmU2XG4gIC8vIFMnaiA9IDgsIDksIDksIDExLCAxMywgMTUsIDE1LCA1LCA3LCA3LCA4LCAxMSwgMTQsIDE0LCAxMiwgNlxuICBhciA9IGZuNShhciwgYnIsIGNyLCBkciwgZXIsIG1bNV0sIDB4NTBhMjhiZTYsIDgpOyBjciA9IHJvdGwoY3IsIDEwKVxuICBlciA9IGZuNShlciwgYXIsIGJyLCBjciwgZHIsIG1bMTRdLCAweDUwYTI4YmU2LCA5KTsgYnIgPSByb3RsKGJyLCAxMClcbiAgZHIgPSBmbjUoZHIsIGVyLCBhciwgYnIsIGNyLCBtWzddLCAweDUwYTI4YmU2LCA5KTsgYXIgPSByb3RsKGFyLCAxMClcbiAgY3IgPSBmbjUoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzBdLCAweDUwYTI4YmU2LCAxMSk7IGVyID0gcm90bChlciwgMTApXG4gIGJyID0gZm41KGJyLCBjciwgZHIsIGVyLCBhciwgbVs5XSwgMHg1MGEyOGJlNiwgMTMpOyBkciA9IHJvdGwoZHIsIDEwKVxuICBhciA9IGZuNShhciwgYnIsIGNyLCBkciwgZXIsIG1bMl0sIDB4NTBhMjhiZTYsIDE1KTsgY3IgPSByb3RsKGNyLCAxMClcbiAgZXIgPSBmbjUoZXIsIGFyLCBiciwgY3IsIGRyLCBtWzExXSwgMHg1MGEyOGJlNiwgMTUpOyBiciA9IHJvdGwoYnIsIDEwKVxuICBkciA9IGZuNShkciwgZXIsIGFyLCBiciwgY3IsIG1bNF0sIDB4NTBhMjhiZTYsIDUpOyBhciA9IHJvdGwoYXIsIDEwKVxuICBjciA9IGZuNShjciwgZHIsIGVyLCBhciwgYnIsIG1bMTNdLCAweDUwYTI4YmU2LCA3KTsgZXIgPSByb3RsKGVyLCAxMClcbiAgYnIgPSBmbjUoYnIsIGNyLCBkciwgZXIsIGFyLCBtWzZdLCAweDUwYTI4YmU2LCA3KTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjUoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzE1XSwgMHg1MGEyOGJlNiwgOCk7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm41KGVyLCBhciwgYnIsIGNyLCBkciwgbVs4XSwgMHg1MGEyOGJlNiwgMTEpOyBiciA9IHJvdGwoYnIsIDEwKVxuICBkciA9IGZuNShkciwgZXIsIGFyLCBiciwgY3IsIG1bMV0sIDB4NTBhMjhiZTYsIDE0KTsgYXIgPSByb3RsKGFyLCAxMClcbiAgY3IgPSBmbjUoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzEwXSwgMHg1MGEyOGJlNiwgMTQpOyBlciA9IHJvdGwoZXIsIDEwKVxuICBiciA9IGZuNShiciwgY3IsIGRyLCBlciwgYXIsIG1bM10sIDB4NTBhMjhiZTYsIDEyKTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjUoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzEyXSwgMHg1MGEyOGJlNiwgNik7IGNyID0gcm90bChjciwgMTApXG5cbiAgLy8gTSdqID0gNiwgMTEsIDMsIDcsIDAsIDEzLCA1LCAxMCwgMTQsIDE1LCA4LCAxMiwgNCwgOSwgMSwgMlxuICAvLyBLJyA9IDB4NWM0ZGQxMjRcbiAgLy8gUydqID0gOSwgMTMsIDE1LCA3LCAxMiwgOCwgOSwgMTEsIDcsIDcsIDEyLCA3LCA2LCAxNSwgMTMsIDExXG4gIGVyID0gZm40KGVyLCBhciwgYnIsIGNyLCBkciwgbVs2XSwgMHg1YzRkZDEyNCwgOSk7IGJyID0gcm90bChiciwgMTApXG4gIGRyID0gZm40KGRyLCBlciwgYXIsIGJyLCBjciwgbVsxMV0sIDB4NWM0ZGQxMjQsIDEzKTsgYXIgPSByb3RsKGFyLCAxMClcbiAgY3IgPSBmbjQoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzNdLCAweDVjNGRkMTI0LCAxNSk7IGVyID0gcm90bChlciwgMTApXG4gIGJyID0gZm40KGJyLCBjciwgZHIsIGVyLCBhciwgbVs3XSwgMHg1YzRkZDEyNCwgNyk7IGRyID0gcm90bChkciwgMTApXG4gIGFyID0gZm40KGFyLCBiciwgY3IsIGRyLCBlciwgbVswXSwgMHg1YzRkZDEyNCwgMTIpOyBjciA9IHJvdGwoY3IsIDEwKVxuICBlciA9IGZuNChlciwgYXIsIGJyLCBjciwgZHIsIG1bMTNdLCAweDVjNGRkMTI0LCA4KTsgYnIgPSByb3RsKGJyLCAxMClcbiAgZHIgPSBmbjQoZHIsIGVyLCBhciwgYnIsIGNyLCBtWzVdLCAweDVjNGRkMTI0LCA5KTsgYXIgPSByb3RsKGFyLCAxMClcbiAgY3IgPSBmbjQoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzEwXSwgMHg1YzRkZDEyNCwgMTEpOyBlciA9IHJvdGwoZXIsIDEwKVxuICBiciA9IGZuNChiciwgY3IsIGRyLCBlciwgYXIsIG1bMTRdLCAweDVjNGRkMTI0LCA3KTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjQoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzE1XSwgMHg1YzRkZDEyNCwgNyk7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm40KGVyLCBhciwgYnIsIGNyLCBkciwgbVs4XSwgMHg1YzRkZDEyNCwgMTIpOyBiciA9IHJvdGwoYnIsIDEwKVxuICBkciA9IGZuNChkciwgZXIsIGFyLCBiciwgY3IsIG1bMTJdLCAweDVjNGRkMTI0LCA3KTsgYXIgPSByb3RsKGFyLCAxMClcbiAgY3IgPSBmbjQoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzRdLCAweDVjNGRkMTI0LCA2KTsgZXIgPSByb3RsKGVyLCAxMClcbiAgYnIgPSBmbjQoYnIsIGNyLCBkciwgZXIsIGFyLCBtWzldLCAweDVjNGRkMTI0LCAxNSk7IGRyID0gcm90bChkciwgMTApXG4gIGFyID0gZm40KGFyLCBiciwgY3IsIGRyLCBlciwgbVsxXSwgMHg1YzRkZDEyNCwgMTMpOyBjciA9IHJvdGwoY3IsIDEwKVxuICBlciA9IGZuNChlciwgYXIsIGJyLCBjciwgZHIsIG1bMl0sIDB4NWM0ZGQxMjQsIDExKTsgYnIgPSByb3RsKGJyLCAxMClcblxuICAvLyBNJ2ogPSAxNSwgNSwgMSwgMywgNywgMTQsIDYsIDksIDExLCA4LCAxMiwgMiwgMTAsIDAsIDQsIDEzXG4gIC8vIEsnID0gMHg2ZDcwM2VmM1xuICAvLyBTJ2ogPSA5LCA3LCAxNSwgMTEsIDgsIDYsIDYsIDE0LCAxMiwgMTMsIDUsIDE0LCAxMywgMTMsIDcsIDVcbiAgZHIgPSBmbjMoZHIsIGVyLCBhciwgYnIsIGNyLCBtWzE1XSwgMHg2ZDcwM2VmMywgOSk7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm4zKGNyLCBkciwgZXIsIGFyLCBiciwgbVs1XSwgMHg2ZDcwM2VmMywgNyk7IGVyID0gcm90bChlciwgMTApXG4gIGJyID0gZm4zKGJyLCBjciwgZHIsIGVyLCBhciwgbVsxXSwgMHg2ZDcwM2VmMywgMTUpOyBkciA9IHJvdGwoZHIsIDEwKVxuICBhciA9IGZuMyhhciwgYnIsIGNyLCBkciwgZXIsIG1bM10sIDB4NmQ3MDNlZjMsIDExKTsgY3IgPSByb3RsKGNyLCAxMClcbiAgZXIgPSBmbjMoZXIsIGFyLCBiciwgY3IsIGRyLCBtWzddLCAweDZkNzAzZWYzLCA4KTsgYnIgPSByb3RsKGJyLCAxMClcbiAgZHIgPSBmbjMoZHIsIGVyLCBhciwgYnIsIGNyLCBtWzE0XSwgMHg2ZDcwM2VmMywgNik7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm4zKGNyLCBkciwgZXIsIGFyLCBiciwgbVs2XSwgMHg2ZDcwM2VmMywgNik7IGVyID0gcm90bChlciwgMTApXG4gIGJyID0gZm4zKGJyLCBjciwgZHIsIGVyLCBhciwgbVs5XSwgMHg2ZDcwM2VmMywgMTQpOyBkciA9IHJvdGwoZHIsIDEwKVxuICBhciA9IGZuMyhhciwgYnIsIGNyLCBkciwgZXIsIG1bMTFdLCAweDZkNzAzZWYzLCAxMik7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm4zKGVyLCBhciwgYnIsIGNyLCBkciwgbVs4XSwgMHg2ZDcwM2VmMywgMTMpOyBiciA9IHJvdGwoYnIsIDEwKVxuICBkciA9IGZuMyhkciwgZXIsIGFyLCBiciwgY3IsIG1bMTJdLCAweDZkNzAzZWYzLCA1KTsgYXIgPSByb3RsKGFyLCAxMClcbiAgY3IgPSBmbjMoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzJdLCAweDZkNzAzZWYzLCAxNCk7IGVyID0gcm90bChlciwgMTApXG4gIGJyID0gZm4zKGJyLCBjciwgZHIsIGVyLCBhciwgbVsxMF0sIDB4NmQ3MDNlZjMsIDEzKTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjMoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzBdLCAweDZkNzAzZWYzLCAxMyk7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm4zKGVyLCBhciwgYnIsIGNyLCBkciwgbVs0XSwgMHg2ZDcwM2VmMywgNyk7IGJyID0gcm90bChiciwgMTApXG4gIGRyID0gZm4zKGRyLCBlciwgYXIsIGJyLCBjciwgbVsxM10sIDB4NmQ3MDNlZjMsIDUpOyBhciA9IHJvdGwoYXIsIDEwKVxuXG4gIC8vIE0naiA9IDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTRcbiAgLy8gSycgPSAweDdhNmQ3NmU5XG4gIC8vIFMnaiA9IDE1LCA1LCA4LCAxMSwgMTQsIDE0LCA2LCAxNCwgNiwgOSwgMTIsIDksIDEyLCA1LCAxNSwgOFxuICBjciA9IGZuMihjciwgZHIsIGVyLCBhciwgYnIsIG1bOF0sIDB4N2E2ZDc2ZTksIDE1KTsgZXIgPSByb3RsKGVyLCAxMClcbiAgYnIgPSBmbjIoYnIsIGNyLCBkciwgZXIsIGFyLCBtWzZdLCAweDdhNmQ3NmU5LCA1KTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjIoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzRdLCAweDdhNmQ3NmU5LCA4KTsgY3IgPSByb3RsKGNyLCAxMClcbiAgZXIgPSBmbjIoZXIsIGFyLCBiciwgY3IsIGRyLCBtWzFdLCAweDdhNmQ3NmU5LCAxMSk7IGJyID0gcm90bChiciwgMTApXG4gIGRyID0gZm4yKGRyLCBlciwgYXIsIGJyLCBjciwgbVszXSwgMHg3YTZkNzZlOSwgMTQpOyBhciA9IHJvdGwoYXIsIDEwKVxuICBjciA9IGZuMihjciwgZHIsIGVyLCBhciwgYnIsIG1bMTFdLCAweDdhNmQ3NmU5LCAxNCk7IGVyID0gcm90bChlciwgMTApXG4gIGJyID0gZm4yKGJyLCBjciwgZHIsIGVyLCBhciwgbVsxNV0sIDB4N2E2ZDc2ZTksIDYpOyBkciA9IHJvdGwoZHIsIDEwKVxuICBhciA9IGZuMihhciwgYnIsIGNyLCBkciwgZXIsIG1bMF0sIDB4N2E2ZDc2ZTksIDE0KTsgY3IgPSByb3RsKGNyLCAxMClcbiAgZXIgPSBmbjIoZXIsIGFyLCBiciwgY3IsIGRyLCBtWzVdLCAweDdhNmQ3NmU5LCA2KTsgYnIgPSByb3RsKGJyLCAxMClcbiAgZHIgPSBmbjIoZHIsIGVyLCBhciwgYnIsIGNyLCBtWzEyXSwgMHg3YTZkNzZlOSwgOSk7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm4yKGNyLCBkciwgZXIsIGFyLCBiciwgbVsyXSwgMHg3YTZkNzZlOSwgMTIpOyBlciA9IHJvdGwoZXIsIDEwKVxuICBiciA9IGZuMihiciwgY3IsIGRyLCBlciwgYXIsIG1bMTNdLCAweDdhNmQ3NmU5LCA5KTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjIoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzldLCAweDdhNmQ3NmU5LCAxMik7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm4yKGVyLCBhciwgYnIsIGNyLCBkciwgbVs3XSwgMHg3YTZkNzZlOSwgNSk7IGJyID0gcm90bChiciwgMTApXG4gIGRyID0gZm4yKGRyLCBlciwgYXIsIGJyLCBjciwgbVsxMF0sIDB4N2E2ZDc2ZTksIDE1KTsgYXIgPSByb3RsKGFyLCAxMClcbiAgY3IgPSBmbjIoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzE0XSwgMHg3YTZkNzZlOSwgOCk7IGVyID0gcm90bChlciwgMTApXG5cbiAgLy8gTSdqID0gMTIsIDE1LCAxMCwgNCwgMSwgNSwgOCwgNywgNiwgMiwgMTMsIDE0LCAwLCAzLCA5LCAxMVxuICAvLyBLJyA9IDB4MDAwMDAwMDBcbiAgLy8gUydqID0gOCwgNSwgMTIsIDksIDEyLCA1LCAxNCwgNiwgOCwgMTMsIDYsIDUsIDE1LCAxMywgMTEsIDExXG4gIGJyID0gZm4xKGJyLCBjciwgZHIsIGVyLCBhciwgbVsxMl0sIDB4MDAwMDAwMDAsIDgpOyBkciA9IHJvdGwoZHIsIDEwKVxuICBhciA9IGZuMShhciwgYnIsIGNyLCBkciwgZXIsIG1bMTVdLCAweDAwMDAwMDAwLCA1KTsgY3IgPSByb3RsKGNyLCAxMClcbiAgZXIgPSBmbjEoZXIsIGFyLCBiciwgY3IsIGRyLCBtWzEwXSwgMHgwMDAwMDAwMCwgMTIpOyBiciA9IHJvdGwoYnIsIDEwKVxuICBkciA9IGZuMShkciwgZXIsIGFyLCBiciwgY3IsIG1bNF0sIDB4MDAwMDAwMDAsIDkpOyBhciA9IHJvdGwoYXIsIDEwKVxuICBjciA9IGZuMShjciwgZHIsIGVyLCBhciwgYnIsIG1bMV0sIDB4MDAwMDAwMDAsIDEyKTsgZXIgPSByb3RsKGVyLCAxMClcbiAgYnIgPSBmbjEoYnIsIGNyLCBkciwgZXIsIGFyLCBtWzVdLCAweDAwMDAwMDAwLCA1KTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjEoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzhdLCAweDAwMDAwMDAwLCAxNCk7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm4xKGVyLCBhciwgYnIsIGNyLCBkciwgbVs3XSwgMHgwMDAwMDAwMCwgNik7IGJyID0gcm90bChiciwgMTApXG4gIGRyID0gZm4xKGRyLCBlciwgYXIsIGJyLCBjciwgbVs2XSwgMHgwMDAwMDAwMCwgOCk7IGFyID0gcm90bChhciwgMTApXG4gIGNyID0gZm4xKGNyLCBkciwgZXIsIGFyLCBiciwgbVsyXSwgMHgwMDAwMDAwMCwgMTMpOyBlciA9IHJvdGwoZXIsIDEwKVxuICBiciA9IGZuMShiciwgY3IsIGRyLCBlciwgYXIsIG1bMTNdLCAweDAwMDAwMDAwLCA2KTsgZHIgPSByb3RsKGRyLCAxMClcbiAgYXIgPSBmbjEoYXIsIGJyLCBjciwgZHIsIGVyLCBtWzE0XSwgMHgwMDAwMDAwMCwgNSk7IGNyID0gcm90bChjciwgMTApXG4gIGVyID0gZm4xKGVyLCBhciwgYnIsIGNyLCBkciwgbVswXSwgMHgwMDAwMDAwMCwgMTUpOyBiciA9IHJvdGwoYnIsIDEwKVxuICBkciA9IGZuMShkciwgZXIsIGFyLCBiciwgY3IsIG1bM10sIDB4MDAwMDAwMDAsIDEzKTsgYXIgPSByb3RsKGFyLCAxMClcbiAgY3IgPSBmbjEoY3IsIGRyLCBlciwgYXIsIGJyLCBtWzldLCAweDAwMDAwMDAwLCAxMSk7IGVyID0gcm90bChlciwgMTApXG4gIGJyID0gZm4xKGJyLCBjciwgZHIsIGVyLCBhciwgbVsxMV0sIDB4MDAwMDAwMDAsIDExKTsgZHIgPSByb3RsKGRyLCAxMClcblxuICAvLyBjaGFuZ2Ugc3RhdGVcbiAgdmFyIHQgPSAodGhpcy5fYiArIGNsICsgZHIpIHwgMFxuICB0aGlzLl9iID0gKHRoaXMuX2MgKyBkbCArIGVyKSB8IDBcbiAgdGhpcy5fYyA9ICh0aGlzLl9kICsgZWwgKyBhcikgfCAwXG4gIHRoaXMuX2QgPSAodGhpcy5fZSArIGFsICsgYnIpIHwgMFxuICB0aGlzLl9lID0gKHRoaXMuX2EgKyBibCArIGNyKSB8IDBcbiAgdGhpcy5fYSA9IHRcbn1cblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBjcmVhdGUgcGFkZGluZyBhbmQgaGFuZGxlIGJsb2Nrc1xuICB0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXSA9IDB4ODBcbiAgaWYgKHRoaXMuX2Jsb2NrT2Zmc2V0ID4gNTYpIHtcbiAgICB0aGlzLl9ibG9jay5maWxsKDAsIHRoaXMuX2Jsb2NrT2Zmc2V0LCA2NClcbiAgICB0aGlzLl91cGRhdGUoKVxuICAgIHRoaXMuX2Jsb2NrT2Zmc2V0ID0gMFxuICB9XG5cbiAgdGhpcy5fYmxvY2suZmlsbCgwLCB0aGlzLl9ibG9ja09mZnNldCwgNTYpXG4gIHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLCA1NilcbiAgdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sIDYwKVxuICB0aGlzLl91cGRhdGUoKVxuXG4gIC8vIHByb2R1Y2UgcmVzdWx0XG4gIHZhciBidWZmZXIgPSBuZXcgQnVmZmVyKDIwKVxuICBidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2EsIDApXG4gIGJ1ZmZlci53cml0ZUludDMyTEUodGhpcy5fYiwgNClcbiAgYnVmZmVyLndyaXRlSW50MzJMRSh0aGlzLl9jLCA4KVxuICBidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2QsIDEyKVxuICBidWZmZXIud3JpdGVJbnQzMkxFKHRoaXMuX2UsIDE2KVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIHJvdGwgKHgsIG4pIHtcbiAgcmV0dXJuICh4IDw8IG4pIHwgKHggPj4+ICgzMiAtIG4pKVxufVxuXG5mdW5jdGlvbiBmbjEgKGEsIGIsIGMsIGQsIGUsIG0sIGssIHMpIHtcbiAgcmV0dXJuIChyb3RsKChhICsgKGIgXiBjIF4gZCkgKyBtICsgaykgfCAwLCBzKSArIGUpIHwgMFxufVxuXG5mdW5jdGlvbiBmbjIgKGEsIGIsIGMsIGQsIGUsIG0sIGssIHMpIHtcbiAgcmV0dXJuIChyb3RsKChhICsgKChiICYgYykgfCAoKH5iKSAmIGQpKSArIG0gKyBrKSB8IDAsIHMpICsgZSkgfCAwXG59XG5cbmZ1bmN0aW9uIGZuMyAoYSwgYiwgYywgZCwgZSwgbSwgaywgcykge1xuICByZXR1cm4gKHJvdGwoKGEgKyAoKGIgfCAofmMpKSBeIGQpICsgbSArIGspIHwgMCwgcykgKyBlKSB8IDBcbn1cblxuZnVuY3Rpb24gZm40IChhLCBiLCBjLCBkLCBlLCBtLCBrLCBzKSB7XG4gIHJldHVybiAocm90bCgoYSArICgoYiAmIGQpIHwgKGMgJiAofmQpKSkgKyBtICsgaykgfCAwLCBzKSArIGUpIHwgMFxufVxuXG5mdW5jdGlvbiBmbjUgKGEsIGIsIGMsIGQsIGUsIG0sIGssIHMpIHtcbiAgcmV0dXJuIChyb3RsKChhICsgKGIgXiAoYyB8ICh+ZCkpKSArIG0gKyBrKSB8IDAsIHMpICsgZSkgfCAwXG59XG5cbm1vZHVsZS5leHBvcnRzID0gUklQRU1EMTYwXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2J1ZmZlcicpXG4iLCI7KGZ1bmN0aW9uIChzYXgpIHsgLy8gd3JhcHBlciBmb3Igbm9uLW5vZGUgZW52c1xuICBzYXgucGFyc2VyID0gZnVuY3Rpb24gKHN0cmljdCwgb3B0KSB7IHJldHVybiBuZXcgU0FYUGFyc2VyKHN0cmljdCwgb3B0KSB9XG4gIHNheC5TQVhQYXJzZXIgPSBTQVhQYXJzZXJcbiAgc2F4LlNBWFN0cmVhbSA9IFNBWFN0cmVhbVxuICBzYXguY3JlYXRlU3RyZWFtID0gY3JlYXRlU3RyZWFtXG5cbiAgLy8gV2hlbiB3ZSBwYXNzIHRoZSBNQVhfQlVGRkVSX0xFTkdUSCBwb3NpdGlvbiwgc3RhcnQgY2hlY2tpbmcgZm9yIGJ1ZmZlciBvdmVycnVucy5cbiAgLy8gV2hlbiB3ZSBjaGVjaywgc2NoZWR1bGUgdGhlIG5leHQgY2hlY2sgZm9yIE1BWF9CVUZGRVJfTEVOR1RIIC0gKG1heChidWZmZXIgbGVuZ3RocykpLFxuICAvLyBzaW5jZSB0aGF0J3MgdGhlIGVhcmxpZXN0IHRoYXQgYSBidWZmZXIgb3ZlcnJ1biBjb3VsZCBvY2N1ci4gIFRoaXMgd2F5LCBjaGVja3MgYXJlXG4gIC8vIGFzIHJhcmUgYXMgcmVxdWlyZWQsIGJ1dCBhcyBvZnRlbiBhcyBuZWNlc3NhcnkgdG8gZW5zdXJlIG5ldmVyIGNyb3NzaW5nIHRoaXMgYm91bmQuXG4gIC8vIEZ1cnRoZXJtb3JlLCBidWZmZXJzIGFyZSBvbmx5IHRlc3RlZCBhdCBtb3N0IG9uY2UgcGVyIHdyaXRlKCksIHNvIHBhc3NpbmcgYSB2ZXJ5XG4gIC8vIGxhcmdlIHN0cmluZyBpbnRvIHdyaXRlKCkgbWlnaHQgaGF2ZSB1bmRlc2lyYWJsZSBlZmZlY3RzLCBidXQgdGhpcyBpcyBtYW5hZ2VhYmxlIGJ5XG4gIC8vIHRoZSBjYWxsZXIsIHNvIGl0IGlzIGFzc3VtZWQgdG8gYmUgc2FmZS4gIFRodXMsIGEgY2FsbCB0byB3cml0ZSgpIG1heSwgaW4gdGhlIGV4dHJlbWVcbiAgLy8gZWRnZSBjYXNlLCByZXN1bHQgaW4gY3JlYXRpbmcgYXQgbW9zdCBvbmUgY29tcGxldGUgY29weSBvZiB0aGUgc3RyaW5nIHBhc3NlZCBpbi5cbiAgLy8gU2V0IHRvIEluZmluaXR5IHRvIGhhdmUgdW5saW1pdGVkIGJ1ZmZlcnMuXG4gIHNheC5NQVhfQlVGRkVSX0xFTkdUSCA9IDY0ICogMTAyNFxuXG4gIHZhciBidWZmZXJzID0gW1xuICAgICdjb21tZW50JywgJ3NnbWxEZWNsJywgJ3RleHROb2RlJywgJ3RhZ05hbWUnLCAnZG9jdHlwZScsXG4gICAgJ3Byb2NJbnN0TmFtZScsICdwcm9jSW5zdEJvZHknLCAnZW50aXR5JywgJ2F0dHJpYk5hbWUnLFxuICAgICdhdHRyaWJWYWx1ZScsICdjZGF0YScsICdzY3JpcHQnXG4gIF1cblxuICBzYXguRVZFTlRTID0gW1xuICAgICd0ZXh0JyxcbiAgICAncHJvY2Vzc2luZ2luc3RydWN0aW9uJyxcbiAgICAnc2dtbGRlY2xhcmF0aW9uJyxcbiAgICAnZG9jdHlwZScsXG4gICAgJ2NvbW1lbnQnLFxuICAgICdvcGVudGFnc3RhcnQnLFxuICAgICdhdHRyaWJ1dGUnLFxuICAgICdvcGVudGFnJyxcbiAgICAnY2xvc2V0YWcnLFxuICAgICdvcGVuY2RhdGEnLFxuICAgICdjZGF0YScsXG4gICAgJ2Nsb3NlY2RhdGEnLFxuICAgICdlcnJvcicsXG4gICAgJ2VuZCcsXG4gICAgJ3JlYWR5JyxcbiAgICAnc2NyaXB0JyxcbiAgICAnb3Blbm5hbWVzcGFjZScsXG4gICAgJ2Nsb3NlbmFtZXNwYWNlJ1xuICBdXG5cbiAgZnVuY3Rpb24gU0FYUGFyc2VyIChzdHJpY3QsIG9wdCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTQVhQYXJzZXIpKSB7XG4gICAgICByZXR1cm4gbmV3IFNBWFBhcnNlcihzdHJpY3QsIG9wdClcbiAgICB9XG5cbiAgICB2YXIgcGFyc2VyID0gdGhpc1xuICAgIGNsZWFyQnVmZmVycyhwYXJzZXIpXG4gICAgcGFyc2VyLnEgPSBwYXJzZXIuYyA9ICcnXG4gICAgcGFyc2VyLmJ1ZmZlckNoZWNrUG9zaXRpb24gPSBzYXguTUFYX0JVRkZFUl9MRU5HVEhcbiAgICBwYXJzZXIub3B0ID0gb3B0IHx8IHt9XG4gICAgcGFyc2VyLm9wdC5sb3dlcmNhc2UgPSBwYXJzZXIub3B0Lmxvd2VyY2FzZSB8fCBwYXJzZXIub3B0Lmxvd2VyY2FzZXRhZ3NcbiAgICBwYXJzZXIubG9vc2VDYXNlID0gcGFyc2VyLm9wdC5sb3dlcmNhc2UgPyAndG9Mb3dlckNhc2UnIDogJ3RvVXBwZXJDYXNlJ1xuICAgIHBhcnNlci50YWdzID0gW11cbiAgICBwYXJzZXIuY2xvc2VkID0gcGFyc2VyLmNsb3NlZFJvb3QgPSBwYXJzZXIuc2F3Um9vdCA9IGZhbHNlXG4gICAgcGFyc2VyLnRhZyA9IHBhcnNlci5lcnJvciA9IG51bGxcbiAgICBwYXJzZXIuc3RyaWN0ID0gISFzdHJpY3RcbiAgICBwYXJzZXIubm9zY3JpcHQgPSAhIShzdHJpY3QgfHwgcGFyc2VyLm9wdC5ub3NjcmlwdClcbiAgICBwYXJzZXIuc3RhdGUgPSBTLkJFR0lOXG4gICAgcGFyc2VyLnN0cmljdEVudGl0aWVzID0gcGFyc2VyLm9wdC5zdHJpY3RFbnRpdGllc1xuICAgIHBhcnNlci5FTlRJVElFUyA9IHBhcnNlci5zdHJpY3RFbnRpdGllcyA/IE9iamVjdC5jcmVhdGUoc2F4LlhNTF9FTlRJVElFUykgOiBPYmplY3QuY3JlYXRlKHNheC5FTlRJVElFUylcbiAgICBwYXJzZXIuYXR0cmliTGlzdCA9IFtdXG5cbiAgICAvLyBuYW1lc3BhY2VzIGZvcm0gYSBwcm90b3R5cGUgY2hhaW4uXG4gICAgLy8gaXQgYWx3YXlzIHBvaW50cyBhdCB0aGUgY3VycmVudCB0YWcsXG4gICAgLy8gd2hpY2ggcHJvdG9zIHRvIGl0cyBwYXJlbnQgdGFnLlxuICAgIGlmIChwYXJzZXIub3B0LnhtbG5zKSB7XG4gICAgICBwYXJzZXIubnMgPSBPYmplY3QuY3JlYXRlKHJvb3ROUylcbiAgICB9XG5cbiAgICAvLyBtb3N0bHkganVzdCBmb3IgZXJyb3IgcmVwb3J0aW5nXG4gICAgcGFyc2VyLnRyYWNrUG9zaXRpb24gPSBwYXJzZXIub3B0LnBvc2l0aW9uICE9PSBmYWxzZVxuICAgIGlmIChwYXJzZXIudHJhY2tQb3NpdGlvbikge1xuICAgICAgcGFyc2VyLnBvc2l0aW9uID0gcGFyc2VyLmxpbmUgPSBwYXJzZXIuY29sdW1uID0gMFxuICAgIH1cbiAgICBlbWl0KHBhcnNlciwgJ29ucmVhZHknKVxuICB9XG5cbiAgaWYgKCFPYmplY3QuY3JlYXRlKSB7XG4gICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICBmdW5jdGlvbiBGICgpIHt9XG4gICAgICBGLnByb3RvdHlwZSA9IG9cbiAgICAgIHZhciBuZXdmID0gbmV3IEYoKVxuICAgICAgcmV0dXJuIG5ld2ZcbiAgICB9XG4gIH1cblxuICBpZiAoIU9iamVjdC5rZXlzKSB7XG4gICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiAobykge1xuICAgICAgdmFyIGEgPSBbXVxuICAgICAgZm9yICh2YXIgaSBpbiBvKSBpZiAoby5oYXNPd25Qcm9wZXJ0eShpKSkgYS5wdXNoKGkpXG4gICAgICByZXR1cm4gYVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrQnVmZmVyTGVuZ3RoIChwYXJzZXIpIHtcbiAgICB2YXIgbWF4QWxsb3dlZCA9IE1hdGgubWF4KHNheC5NQVhfQlVGRkVSX0xFTkdUSCwgMTApXG4gICAgdmFyIG1heEFjdHVhbCA9IDBcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGJ1ZmZlcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgbGVuID0gcGFyc2VyW2J1ZmZlcnNbaV1dLmxlbmd0aFxuICAgICAgaWYgKGxlbiA+IG1heEFsbG93ZWQpIHtcbiAgICAgICAgLy8gVGV4dC9jZGF0YSBub2RlcyBjYW4gZ2V0IGJpZywgYW5kIHNpbmNlIHRoZXkncmUgYnVmZmVyZWQsXG4gICAgICAgIC8vIHdlIGNhbiBnZXQgaGVyZSB1bmRlciBub3JtYWwgY29uZGl0aW9ucy5cbiAgICAgICAgLy8gQXZvaWQgaXNzdWVzIGJ5IGVtaXR0aW5nIHRoZSB0ZXh0IG5vZGUgbm93LFxuICAgICAgICAvLyBzbyBhdCBsZWFzdCBpdCB3b24ndCBnZXQgYW55IGJpZ2dlci5cbiAgICAgICAgc3dpdGNoIChidWZmZXJzW2ldKSB7XG4gICAgICAgICAgY2FzZSAndGV4dE5vZGUnOlxuICAgICAgICAgICAgY2xvc2VUZXh0KHBhcnNlcilcbiAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICBjYXNlICdjZGF0YSc6XG4gICAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbmNkYXRhJywgcGFyc2VyLmNkYXRhKVxuICAgICAgICAgICAgcGFyc2VyLmNkYXRhID0gJydcbiAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICBjYXNlICdzY3JpcHQnOlxuICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25zY3JpcHQnLCBwYXJzZXIuc2NyaXB0KVxuICAgICAgICAgICAgcGFyc2VyLnNjcmlwdCA9ICcnXG4gICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGVycm9yKHBhcnNlciwgJ01heCBidWZmZXIgbGVuZ3RoIGV4Y2VlZGVkOiAnICsgYnVmZmVyc1tpXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWF4QWN0dWFsID0gTWF0aC5tYXgobWF4QWN0dWFsLCBsZW4pXG4gICAgfVxuICAgIC8vIHNjaGVkdWxlIHRoZSBuZXh0IGNoZWNrIGZvciB0aGUgZWFybGllc3QgcG9zc2libGUgYnVmZmVyIG92ZXJydW4uXG4gICAgdmFyIG0gPSBzYXguTUFYX0JVRkZFUl9MRU5HVEggLSBtYXhBY3R1YWxcbiAgICBwYXJzZXIuYnVmZmVyQ2hlY2tQb3NpdGlvbiA9IG0gKyBwYXJzZXIucG9zaXRpb25cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyQnVmZmVycyAocGFyc2VyKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBidWZmZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcGFyc2VyW2J1ZmZlcnNbaV1dID0gJydcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaEJ1ZmZlcnMgKHBhcnNlcikge1xuICAgIGNsb3NlVGV4dChwYXJzZXIpXG4gICAgaWYgKHBhcnNlci5jZGF0YSAhPT0gJycpIHtcbiAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uY2RhdGEnLCBwYXJzZXIuY2RhdGEpXG4gICAgICBwYXJzZXIuY2RhdGEgPSAnJ1xuICAgIH1cbiAgICBpZiAocGFyc2VyLnNjcmlwdCAhPT0gJycpIHtcbiAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uc2NyaXB0JywgcGFyc2VyLnNjcmlwdClcbiAgICAgIHBhcnNlci5zY3JpcHQgPSAnJ1xuICAgIH1cbiAgfVxuXG4gIFNBWFBhcnNlci5wcm90b3R5cGUgPSB7XG4gICAgZW5kOiBmdW5jdGlvbiAoKSB7IGVuZCh0aGlzKSB9LFxuICAgIHdyaXRlOiB3cml0ZSxcbiAgICByZXN1bWU6IGZ1bmN0aW9uICgpIHsgdGhpcy5lcnJvciA9IG51bGw7IHJldHVybiB0aGlzIH0sXG4gICAgY2xvc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMud3JpdGUobnVsbCkgfSxcbiAgICBmbHVzaDogZnVuY3Rpb24gKCkgeyBmbHVzaEJ1ZmZlcnModGhpcykgfVxuICB9XG5cbiAgdmFyIFN0cmVhbVxuICB0cnkge1xuICAgIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbVxuICB9IGNhdGNoIChleCkge1xuICAgIFN0cmVhbSA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cblxuICB2YXIgc3RyZWFtV3JhcHMgPSBzYXguRVZFTlRTLmZpbHRlcihmdW5jdGlvbiAoZXYpIHtcbiAgICByZXR1cm4gZXYgIT09ICdlcnJvcicgJiYgZXYgIT09ICdlbmQnXG4gIH0pXG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyZWFtIChzdHJpY3QsIG9wdCkge1xuICAgIHJldHVybiBuZXcgU0FYU3RyZWFtKHN0cmljdCwgb3B0KVxuICB9XG5cbiAgZnVuY3Rpb24gU0FYU3RyZWFtIChzdHJpY3QsIG9wdCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTQVhTdHJlYW0pKSB7XG4gICAgICByZXR1cm4gbmV3IFNBWFN0cmVhbShzdHJpY3QsIG9wdClcbiAgICB9XG5cbiAgICBTdHJlYW0uYXBwbHkodGhpcylcblxuICAgIHRoaXMuX3BhcnNlciA9IG5ldyBTQVhQYXJzZXIoc3RyaWN0LCBvcHQpXG4gICAgdGhpcy53cml0YWJsZSA9IHRydWVcbiAgICB0aGlzLnJlYWRhYmxlID0gdHJ1ZVxuXG4gICAgdmFyIG1lID0gdGhpc1xuXG4gICAgdGhpcy5fcGFyc2VyLm9uZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuZW1pdCgnZW5kJylcbiAgICB9XG5cbiAgICB0aGlzLl9wYXJzZXIub25lcnJvciA9IGZ1bmN0aW9uIChlcikge1xuICAgICAgbWUuZW1pdCgnZXJyb3InLCBlcilcblxuICAgICAgLy8gaWYgZGlkbid0IHRocm93LCB0aGVuIG1lYW5zIGVycm9yIHdhcyBoYW5kbGVkLlxuICAgICAgLy8gZ28gYWhlYWQgYW5kIGNsZWFyIGVycm9yLCBzbyB3ZSBjYW4gd3JpdGUgYWdhaW4uXG4gICAgICBtZS5fcGFyc2VyLmVycm9yID0gbnVsbFxuICAgIH1cblxuICAgIHRoaXMuX2RlY29kZXIgPSBudWxsXG5cbiAgICBzdHJlYW1XcmFwcy5mb3JFYWNoKGZ1bmN0aW9uIChldikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lLCAnb24nICsgZXYsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIG1lLl9wYXJzZXJbJ29uJyArIGV2XVxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgICAgaWYgKCFoKSB7XG4gICAgICAgICAgICBtZS5yZW1vdmVBbGxMaXN0ZW5lcnMoZXYpXG4gICAgICAgICAgICBtZS5fcGFyc2VyWydvbicgKyBldl0gPSBoXG4gICAgICAgICAgICByZXR1cm4gaFxuICAgICAgICAgIH1cbiAgICAgICAgICBtZS5vbihldiwgaClcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgU0FYU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3RyZWFtLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogU0FYU3RyZWFtXG4gICAgfVxuICB9KVxuXG4gIFNBWFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgQnVmZmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgQnVmZmVyLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmXG4gICAgICBCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgIGlmICghdGhpcy5fZGVjb2Rlcikge1xuICAgICAgICB2YXIgU0QgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpLlN0cmluZ0RlY29kZXJcbiAgICAgICAgdGhpcy5fZGVjb2RlciA9IG5ldyBTRCgndXRmOCcpXG4gICAgICB9XG4gICAgICBkYXRhID0gdGhpcy5fZGVjb2Rlci53cml0ZShkYXRhKVxuICAgIH1cblxuICAgIHRoaXMuX3BhcnNlci53cml0ZShkYXRhLnRvU3RyaW5nKCkpXG4gICAgdGhpcy5lbWl0KCdkYXRhJywgZGF0YSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgU0FYU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICB0aGlzLndyaXRlKGNodW5rKVxuICAgIH1cbiAgICB0aGlzLl9wYXJzZXIuZW5kKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgU0FYU3RyZWFtLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldiwgaGFuZGxlcikge1xuICAgIHZhciBtZSA9IHRoaXNcbiAgICBpZiAoIW1lLl9wYXJzZXJbJ29uJyArIGV2XSAmJiBzdHJlYW1XcmFwcy5pbmRleE9mKGV2KSAhPT0gLTEpIHtcbiAgICAgIG1lLl9wYXJzZXJbJ29uJyArIGV2XSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gW2FyZ3VtZW50c1swXV0gOiBBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgICAgIGFyZ3Muc3BsaWNlKDAsIDAsIGV2KVxuICAgICAgICBtZS5lbWl0LmFwcGx5KG1lLCBhcmdzKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwobWUsIGV2LCBoYW5kbGVyKVxuICB9XG5cbiAgLy8gY2hhcmFjdGVyIGNsYXNzZXMgYW5kIHRva2Vuc1xuICB2YXIgd2hpdGVzcGFjZSA9ICdcXHJcXG5cXHQgJ1xuXG4gIC8vIHRoaXMgcmVhbGx5IG5lZWRzIHRvIGJlIHJlcGxhY2VkIHdpdGggY2hhcmFjdGVyIGNsYXNzZXMuXG4gIC8vIFhNTCBhbGxvd3MgYWxsIG1hbm5lciBvZiByaWRpY3Vsb3VzIG51bWJlcnMgYW5kIGRpZ2l0cy5cblxuICAvLyAoTGV0dGVyIHwgXCJfXCIgfCBcIjpcIilcbiAgdmFyIHF1b3RlID0gJ1xcJ1wiJ1xuICB2YXIgYXR0cmliRW5kID0gd2hpdGVzcGFjZSArICc+J1xuICB2YXIgQ0RBVEEgPSAnW0NEQVRBWydcbiAgdmFyIERPQ1RZUEUgPSAnRE9DVFlQRSdcbiAgdmFyIFhNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJ1xuICB2YXIgWE1MTlNfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvJ1xuICB2YXIgcm9vdE5TID0geyB4bWw6IFhNTF9OQU1FU1BBQ0UsIHhtbG5zOiBYTUxOU19OQU1FU1BBQ0UgfVxuXG4gIC8vIHR1cm4gYWxsIHRoZSBzdHJpbmcgY2hhcmFjdGVyIHNldHMgaW50byBjaGFyYWN0ZXIgY2xhc3Mgb2JqZWN0cy5cbiAgd2hpdGVzcGFjZSA9IGNoYXJDbGFzcyh3aGl0ZXNwYWNlKVxuXG4gIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5hbWVTdGFydENoYXJcbiAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiB3b3JrcyBvbiBzdHJpbmdzLCBhIHNpbmdsZSBjaGFyYWN0ZXIgYXQgYSB0aW1lXG4gIC8vIGFzIHN1Y2gsIGl0IGNhbm5vdCBldmVyIHN1cHBvcnQgYXN0cmFsLXBsYW5lIGNoYXJhY3RlcnMgKDEwMDAwLUVGRkZGKVxuICAvLyB3aXRob3V0IGEgc2lnbmlmaWNhbnQgYnJlYWtpbmcgY2hhbmdlIHRvIGVpdGhlciB0aGlzICBwYXJzZXIsIG9yIHRoZVxuICAvLyBKYXZhU2NyaXB0IGxhbmd1YWdlLiAgSW1wbGVtZW50YXRpb24gb2YgYW4gZW1vamktY2FwYWJsZSB4bWwgcGFyc2VyXG4gIC8vIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuXG4gIHZhciBuYW1lU3RhcnQgPSAvWzpfQS1aYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXS9cblxuICB2YXIgbmFtZUJvZHkgPSAvWzpfQS1aYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFx1MDBCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MC5cXGQtXS9cblxuICB2YXIgZW50aXR5U3RhcnQgPSAvWyM6X0EtWmEtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRF0vXG4gIHZhciBlbnRpdHlCb2R5ID0gL1sjOl9BLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwLlxcZC1dL1xuXG4gIHF1b3RlID0gY2hhckNsYXNzKHF1b3RlKVxuICBhdHRyaWJFbmQgPSBjaGFyQ2xhc3MoYXR0cmliRW5kKVxuXG4gIGZ1bmN0aW9uIGNoYXJDbGFzcyAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5zcGxpdCgnJykucmVkdWNlKGZ1bmN0aW9uIChzLCBjKSB7XG4gICAgICBzW2NdID0gdHJ1ZVxuICAgICAgcmV0dXJuIHNcbiAgICB9LCB7fSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTWF0Y2ggKHJlZ2V4LCBjKSB7XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QoYylcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzIChjaGFyY2xhc3MsIGMpIHtcbiAgICByZXR1cm4gY2hhcmNsYXNzW2NdXG4gIH1cblxuICBmdW5jdGlvbiBub3RNYXRjaCAocmVnZXgsIGMpIHtcbiAgICByZXR1cm4gIWlzTWF0Y2gocmVnZXgsIGMpXG4gIH1cblxuICBmdW5jdGlvbiBub3QgKGNoYXJjbGFzcywgYykge1xuICAgIHJldHVybiAhaXMoY2hhcmNsYXNzLCBjKVxuICB9XG5cbiAgdmFyIFMgPSAwXG4gIHNheC5TVEFURSA9IHtcbiAgICBCRUdJTjogUysrLCAvLyBsZWFkaW5nIGJ5dGUgb3JkZXIgbWFyayBvciB3aGl0ZXNwYWNlXG4gICAgQkVHSU5fV0hJVEVTUEFDRTogUysrLCAvLyBsZWFkaW5nIHdoaXRlc3BhY2VcbiAgICBURVhUOiBTKyssIC8vIGdlbmVyYWwgc3R1ZmZcbiAgICBURVhUX0VOVElUWTogUysrLCAvLyAmYW1wIGFuZCBzdWNoLlxuICAgIE9QRU5fV0FLQTogUysrLCAvLyA8XG4gICAgU0dNTF9ERUNMOiBTKyssIC8vIDwhQkxBUkdcbiAgICBTR01MX0RFQ0xfUVVPVEVEOiBTKyssIC8vIDwhQkxBUkcgZm9vIFwiYmFyXG4gICAgRE9DVFlQRTogUysrLCAvLyA8IURPQ1RZUEVcbiAgICBET0NUWVBFX1FVT1RFRDogUysrLCAvLyA8IURPQ1RZUEUgXCIvL2JsYWhcbiAgICBET0NUWVBFX0RURDogUysrLCAvLyA8IURPQ1RZUEUgXCIvL2JsYWhcIiBbIC4uLlxuICAgIERPQ1RZUEVfRFREX1FVT1RFRDogUysrLCAvLyA8IURPQ1RZUEUgXCIvL2JsYWhcIiBbIFwiZm9vXG4gICAgQ09NTUVOVF9TVEFSVElORzogUysrLCAvLyA8IS1cbiAgICBDT01NRU5UOiBTKyssIC8vIDwhLS1cbiAgICBDT01NRU5UX0VORElORzogUysrLCAvLyA8IS0tIGJsYWggLVxuICAgIENPTU1FTlRfRU5ERUQ6IFMrKywgLy8gPCEtLSBibGFoIC0tXG4gICAgQ0RBVEE6IFMrKywgLy8gPCFbQ0RBVEFbIHNvbWV0aGluZ1xuICAgIENEQVRBX0VORElORzogUysrLCAvLyBdXG4gICAgQ0RBVEFfRU5ESU5HXzI6IFMrKywgLy8gXV1cbiAgICBQUk9DX0lOU1Q6IFMrKywgLy8gPD9oaVxuICAgIFBST0NfSU5TVF9CT0RZOiBTKyssIC8vIDw/aGkgdGhlcmVcbiAgICBQUk9DX0lOU1RfRU5ESU5HOiBTKyssIC8vIDw/aGkgXCJ0aGVyZVwiID9cbiAgICBPUEVOX1RBRzogUysrLCAvLyA8c3Ryb25nXG4gICAgT1BFTl9UQUdfU0xBU0g6IFMrKywgLy8gPHN0cm9uZyAvXG4gICAgQVRUUklCOiBTKyssIC8vIDxhXG4gICAgQVRUUklCX05BTUU6IFMrKywgLy8gPGEgZm9vXG4gICAgQVRUUklCX05BTUVfU0FXX1dISVRFOiBTKyssIC8vIDxhIGZvbyBfXG4gICAgQVRUUklCX1ZBTFVFOiBTKyssIC8vIDxhIGZvbz1cbiAgICBBVFRSSUJfVkFMVUVfUVVPVEVEOiBTKyssIC8vIDxhIGZvbz1cImJhclxuICAgIEFUVFJJQl9WQUxVRV9DTE9TRUQ6IFMrKywgLy8gPGEgZm9vPVwiYmFyXCJcbiAgICBBVFRSSUJfVkFMVUVfVU5RVU9URUQ6IFMrKywgLy8gPGEgZm9vPWJhclxuICAgIEFUVFJJQl9WQUxVRV9FTlRJVFlfUTogUysrLCAvLyA8Zm9vIGJhcj1cIiZxdW90O1wiXG4gICAgQVRUUklCX1ZBTFVFX0VOVElUWV9VOiBTKyssIC8vIDxmb28gYmFyPSZxdW90XG4gICAgQ0xPU0VfVEFHOiBTKyssIC8vIDwvYVxuICAgIENMT1NFX1RBR19TQVdfV0hJVEU6IFMrKywgLy8gPC9hICAgPlxuICAgIFNDUklQVDogUysrLCAvLyA8c2NyaXB0PiAuLi5cbiAgICBTQ1JJUFRfRU5ESU5HOiBTKysgLy8gPHNjcmlwdD4gLi4uIDxcbiAgfVxuXG4gIHNheC5YTUxfRU5USVRJRVMgPSB7XG4gICAgJ2FtcCc6ICcmJyxcbiAgICAnZ3QnOiAnPicsXG4gICAgJ2x0JzogJzwnLFxuICAgICdxdW90JzogJ1wiJyxcbiAgICAnYXBvcyc6IFwiJ1wiXG4gIH1cblxuICBzYXguRU5USVRJRVMgPSB7XG4gICAgJ2FtcCc6ICcmJyxcbiAgICAnZ3QnOiAnPicsXG4gICAgJ2x0JzogJzwnLFxuICAgICdxdW90JzogJ1wiJyxcbiAgICAnYXBvcyc6IFwiJ1wiLFxuICAgICdBRWxpZyc6IDE5OCxcbiAgICAnQWFjdXRlJzogMTkzLFxuICAgICdBY2lyYyc6IDE5NCxcbiAgICAnQWdyYXZlJzogMTkyLFxuICAgICdBcmluZyc6IDE5NyxcbiAgICAnQXRpbGRlJzogMTk1LFxuICAgICdBdW1sJzogMTk2LFxuICAgICdDY2VkaWwnOiAxOTksXG4gICAgJ0VUSCc6IDIwOCxcbiAgICAnRWFjdXRlJzogMjAxLFxuICAgICdFY2lyYyc6IDIwMixcbiAgICAnRWdyYXZlJzogMjAwLFxuICAgICdFdW1sJzogMjAzLFxuICAgICdJYWN1dGUnOiAyMDUsXG4gICAgJ0ljaXJjJzogMjA2LFxuICAgICdJZ3JhdmUnOiAyMDQsXG4gICAgJ0l1bWwnOiAyMDcsXG4gICAgJ050aWxkZSc6IDIwOSxcbiAgICAnT2FjdXRlJzogMjExLFxuICAgICdPY2lyYyc6IDIxMixcbiAgICAnT2dyYXZlJzogMjEwLFxuICAgICdPc2xhc2gnOiAyMTYsXG4gICAgJ090aWxkZSc6IDIxMyxcbiAgICAnT3VtbCc6IDIxNCxcbiAgICAnVEhPUk4nOiAyMjIsXG4gICAgJ1VhY3V0ZSc6IDIxOCxcbiAgICAnVWNpcmMnOiAyMTksXG4gICAgJ1VncmF2ZSc6IDIxNyxcbiAgICAnVXVtbCc6IDIyMCxcbiAgICAnWWFjdXRlJzogMjIxLFxuICAgICdhYWN1dGUnOiAyMjUsXG4gICAgJ2FjaXJjJzogMjI2LFxuICAgICdhZWxpZyc6IDIzMCxcbiAgICAnYWdyYXZlJzogMjI0LFxuICAgICdhcmluZyc6IDIyOSxcbiAgICAnYXRpbGRlJzogMjI3LFxuICAgICdhdW1sJzogMjI4LFxuICAgICdjY2VkaWwnOiAyMzEsXG4gICAgJ2VhY3V0ZSc6IDIzMyxcbiAgICAnZWNpcmMnOiAyMzQsXG4gICAgJ2VncmF2ZSc6IDIzMixcbiAgICAnZXRoJzogMjQwLFxuICAgICdldW1sJzogMjM1LFxuICAgICdpYWN1dGUnOiAyMzcsXG4gICAgJ2ljaXJjJzogMjM4LFxuICAgICdpZ3JhdmUnOiAyMzYsXG4gICAgJ2l1bWwnOiAyMzksXG4gICAgJ250aWxkZSc6IDI0MSxcbiAgICAnb2FjdXRlJzogMjQzLFxuICAgICdvY2lyYyc6IDI0NCxcbiAgICAnb2dyYXZlJzogMjQyLFxuICAgICdvc2xhc2gnOiAyNDgsXG4gICAgJ290aWxkZSc6IDI0NSxcbiAgICAnb3VtbCc6IDI0NixcbiAgICAnc3psaWcnOiAyMjMsXG4gICAgJ3Rob3JuJzogMjU0LFxuICAgICd1YWN1dGUnOiAyNTAsXG4gICAgJ3VjaXJjJzogMjUxLFxuICAgICd1Z3JhdmUnOiAyNDksXG4gICAgJ3V1bWwnOiAyNTIsXG4gICAgJ3lhY3V0ZSc6IDI1MyxcbiAgICAneXVtbCc6IDI1NSxcbiAgICAnY29weSc6IDE2OSxcbiAgICAncmVnJzogMTc0LFxuICAgICduYnNwJzogMTYwLFxuICAgICdpZXhjbCc6IDE2MSxcbiAgICAnY2VudCc6IDE2MixcbiAgICAncG91bmQnOiAxNjMsXG4gICAgJ2N1cnJlbic6IDE2NCxcbiAgICAneWVuJzogMTY1LFxuICAgICdicnZiYXInOiAxNjYsXG4gICAgJ3NlY3QnOiAxNjcsXG4gICAgJ3VtbCc6IDE2OCxcbiAgICAnb3JkZic6IDE3MCxcbiAgICAnbGFxdW8nOiAxNzEsXG4gICAgJ25vdCc6IDE3MixcbiAgICAnc2h5JzogMTczLFxuICAgICdtYWNyJzogMTc1LFxuICAgICdkZWcnOiAxNzYsXG4gICAgJ3BsdXNtbic6IDE3NyxcbiAgICAnc3VwMSc6IDE4NSxcbiAgICAnc3VwMic6IDE3OCxcbiAgICAnc3VwMyc6IDE3OSxcbiAgICAnYWN1dGUnOiAxODAsXG4gICAgJ21pY3JvJzogMTgxLFxuICAgICdwYXJhJzogMTgyLFxuICAgICdtaWRkb3QnOiAxODMsXG4gICAgJ2NlZGlsJzogMTg0LFxuICAgICdvcmRtJzogMTg2LFxuICAgICdyYXF1byc6IDE4NyxcbiAgICAnZnJhYzE0JzogMTg4LFxuICAgICdmcmFjMTInOiAxODksXG4gICAgJ2ZyYWMzNCc6IDE5MCxcbiAgICAnaXF1ZXN0JzogMTkxLFxuICAgICd0aW1lcyc6IDIxNSxcbiAgICAnZGl2aWRlJzogMjQ3LFxuICAgICdPRWxpZyc6IDMzOCxcbiAgICAnb2VsaWcnOiAzMzksXG4gICAgJ1NjYXJvbic6IDM1MixcbiAgICAnc2Nhcm9uJzogMzUzLFxuICAgICdZdW1sJzogMzc2LFxuICAgICdmbm9mJzogNDAyLFxuICAgICdjaXJjJzogNzEwLFxuICAgICd0aWxkZSc6IDczMixcbiAgICAnQWxwaGEnOiA5MTMsXG4gICAgJ0JldGEnOiA5MTQsXG4gICAgJ0dhbW1hJzogOTE1LFxuICAgICdEZWx0YSc6IDkxNixcbiAgICAnRXBzaWxvbic6IDkxNyxcbiAgICAnWmV0YSc6IDkxOCxcbiAgICAnRXRhJzogOTE5LFxuICAgICdUaGV0YSc6IDkyMCxcbiAgICAnSW90YSc6IDkyMSxcbiAgICAnS2FwcGEnOiA5MjIsXG4gICAgJ0xhbWJkYSc6IDkyMyxcbiAgICAnTXUnOiA5MjQsXG4gICAgJ051JzogOTI1LFxuICAgICdYaSc6IDkyNixcbiAgICAnT21pY3Jvbic6IDkyNyxcbiAgICAnUGknOiA5MjgsXG4gICAgJ1Jobyc6IDkyOSxcbiAgICAnU2lnbWEnOiA5MzEsXG4gICAgJ1RhdSc6IDkzMixcbiAgICAnVXBzaWxvbic6IDkzMyxcbiAgICAnUGhpJzogOTM0LFxuICAgICdDaGknOiA5MzUsXG4gICAgJ1BzaSc6IDkzNixcbiAgICAnT21lZ2EnOiA5MzcsXG4gICAgJ2FscGhhJzogOTQ1LFxuICAgICdiZXRhJzogOTQ2LFxuICAgICdnYW1tYSc6IDk0NyxcbiAgICAnZGVsdGEnOiA5NDgsXG4gICAgJ2Vwc2lsb24nOiA5NDksXG4gICAgJ3pldGEnOiA5NTAsXG4gICAgJ2V0YSc6IDk1MSxcbiAgICAndGhldGEnOiA5NTIsXG4gICAgJ2lvdGEnOiA5NTMsXG4gICAgJ2thcHBhJzogOTU0LFxuICAgICdsYW1iZGEnOiA5NTUsXG4gICAgJ211JzogOTU2LFxuICAgICdudSc6IDk1NyxcbiAgICAneGknOiA5NTgsXG4gICAgJ29taWNyb24nOiA5NTksXG4gICAgJ3BpJzogOTYwLFxuICAgICdyaG8nOiA5NjEsXG4gICAgJ3NpZ21hZic6IDk2MixcbiAgICAnc2lnbWEnOiA5NjMsXG4gICAgJ3RhdSc6IDk2NCxcbiAgICAndXBzaWxvbic6IDk2NSxcbiAgICAncGhpJzogOTY2LFxuICAgICdjaGknOiA5NjcsXG4gICAgJ3BzaSc6IDk2OCxcbiAgICAnb21lZ2EnOiA5NjksXG4gICAgJ3RoZXRhc3ltJzogOTc3LFxuICAgICd1cHNpaCc6IDk3OCxcbiAgICAncGl2JzogOTgyLFxuICAgICdlbnNwJzogODE5NCxcbiAgICAnZW1zcCc6IDgxOTUsXG4gICAgJ3RoaW5zcCc6IDgyMDEsXG4gICAgJ3p3bmonOiA4MjA0LFxuICAgICd6d2onOiA4MjA1LFxuICAgICdscm0nOiA4MjA2LFxuICAgICdybG0nOiA4MjA3LFxuICAgICduZGFzaCc6IDgyMTEsXG4gICAgJ21kYXNoJzogODIxMixcbiAgICAnbHNxdW8nOiA4MjE2LFxuICAgICdyc3F1byc6IDgyMTcsXG4gICAgJ3NicXVvJzogODIxOCxcbiAgICAnbGRxdW8nOiA4MjIwLFxuICAgICdyZHF1byc6IDgyMjEsXG4gICAgJ2JkcXVvJzogODIyMixcbiAgICAnZGFnZ2VyJzogODIyNCxcbiAgICAnRGFnZ2VyJzogODIyNSxcbiAgICAnYnVsbCc6IDgyMjYsXG4gICAgJ2hlbGxpcCc6IDgyMzAsXG4gICAgJ3Blcm1pbCc6IDgyNDAsXG4gICAgJ3ByaW1lJzogODI0MixcbiAgICAnUHJpbWUnOiA4MjQzLFxuICAgICdsc2FxdW8nOiA4MjQ5LFxuICAgICdyc2FxdW8nOiA4MjUwLFxuICAgICdvbGluZSc6IDgyNTQsXG4gICAgJ2ZyYXNsJzogODI2MCxcbiAgICAnZXVybyc6IDgzNjQsXG4gICAgJ2ltYWdlJzogODQ2NSxcbiAgICAnd2VpZXJwJzogODQ3MixcbiAgICAncmVhbCc6IDg0NzYsXG4gICAgJ3RyYWRlJzogODQ4MixcbiAgICAnYWxlZnN5bSc6IDg1MDEsXG4gICAgJ2xhcnInOiA4NTkyLFxuICAgICd1YXJyJzogODU5MyxcbiAgICAncmFycic6IDg1OTQsXG4gICAgJ2RhcnInOiA4NTk1LFxuICAgICdoYXJyJzogODU5NixcbiAgICAnY3JhcnInOiA4NjI5LFxuICAgICdsQXJyJzogODY1NixcbiAgICAndUFycic6IDg2NTcsXG4gICAgJ3JBcnInOiA4NjU4LFxuICAgICdkQXJyJzogODY1OSxcbiAgICAnaEFycic6IDg2NjAsXG4gICAgJ2ZvcmFsbCc6IDg3MDQsXG4gICAgJ3BhcnQnOiA4NzA2LFxuICAgICdleGlzdCc6IDg3MDcsXG4gICAgJ2VtcHR5JzogODcwOSxcbiAgICAnbmFibGEnOiA4NzExLFxuICAgICdpc2luJzogODcxMixcbiAgICAnbm90aW4nOiA4NzEzLFxuICAgICduaSc6IDg3MTUsXG4gICAgJ3Byb2QnOiA4NzE5LFxuICAgICdzdW0nOiA4NzIxLFxuICAgICdtaW51cyc6IDg3MjIsXG4gICAgJ2xvd2FzdCc6IDg3MjcsXG4gICAgJ3JhZGljJzogODczMCxcbiAgICAncHJvcCc6IDg3MzMsXG4gICAgJ2luZmluJzogODczNCxcbiAgICAnYW5nJzogODczNixcbiAgICAnYW5kJzogODc0MyxcbiAgICAnb3InOiA4NzQ0LFxuICAgICdjYXAnOiA4NzQ1LFxuICAgICdjdXAnOiA4NzQ2LFxuICAgICdpbnQnOiA4NzQ3LFxuICAgICd0aGVyZTQnOiA4NzU2LFxuICAgICdzaW0nOiA4NzY0LFxuICAgICdjb25nJzogODc3MyxcbiAgICAnYXN5bXAnOiA4Nzc2LFxuICAgICduZSc6IDg4MDAsXG4gICAgJ2VxdWl2JzogODgwMSxcbiAgICAnbGUnOiA4ODA0LFxuICAgICdnZSc6IDg4MDUsXG4gICAgJ3N1Yic6IDg4MzQsXG4gICAgJ3N1cCc6IDg4MzUsXG4gICAgJ25zdWInOiA4ODM2LFxuICAgICdzdWJlJzogODgzOCxcbiAgICAnc3VwZSc6IDg4MzksXG4gICAgJ29wbHVzJzogODg1MyxcbiAgICAnb3RpbWVzJzogODg1NSxcbiAgICAncGVycCc6IDg4NjksXG4gICAgJ3Nkb3QnOiA4OTAxLFxuICAgICdsY2VpbCc6IDg5NjgsXG4gICAgJ3JjZWlsJzogODk2OSxcbiAgICAnbGZsb29yJzogODk3MCxcbiAgICAncmZsb29yJzogODk3MSxcbiAgICAnbGFuZyc6IDkwMDEsXG4gICAgJ3JhbmcnOiA5MDAyLFxuICAgICdsb3onOiA5Njc0LFxuICAgICdzcGFkZXMnOiA5ODI0LFxuICAgICdjbHVicyc6IDk4MjcsXG4gICAgJ2hlYXJ0cyc6IDk4MjksXG4gICAgJ2RpYW1zJzogOTgzMFxuICB9XG5cbiAgT2JqZWN0LmtleXMoc2F4LkVOVElUSUVTKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZSA9IHNheC5FTlRJVElFU1trZXldXG4gICAgdmFyIHMgPSB0eXBlb2YgZSA9PT0gJ251bWJlcicgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpIDogZVxuICAgIHNheC5FTlRJVElFU1trZXldID0gc1xuICB9KVxuXG4gIGZvciAodmFyIHMgaW4gc2F4LlNUQVRFKSB7XG4gICAgc2F4LlNUQVRFW3NheC5TVEFURVtzXV0gPSBzXG4gIH1cblxuICAvLyBzaG9ydGhhbmRcbiAgUyA9IHNheC5TVEFURVxuXG4gIGZ1bmN0aW9uIGVtaXQgKHBhcnNlciwgZXZlbnQsIGRhdGEpIHtcbiAgICBwYXJzZXJbZXZlbnRdICYmIHBhcnNlcltldmVudF0oZGF0YSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXROb2RlIChwYXJzZXIsIG5vZGVUeXBlLCBkYXRhKSB7XG4gICAgaWYgKHBhcnNlci50ZXh0Tm9kZSkgY2xvc2VUZXh0KHBhcnNlcilcbiAgICBlbWl0KHBhcnNlciwgbm9kZVR5cGUsIGRhdGEpXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZVRleHQgKHBhcnNlcikge1xuICAgIHBhcnNlci50ZXh0Tm9kZSA9IHRleHRvcHRzKHBhcnNlci5vcHQsIHBhcnNlci50ZXh0Tm9kZSlcbiAgICBpZiAocGFyc2VyLnRleHROb2RlKSBlbWl0KHBhcnNlciwgJ29udGV4dCcsIHBhcnNlci50ZXh0Tm9kZSlcbiAgICBwYXJzZXIudGV4dE5vZGUgPSAnJ1xuICB9XG5cbiAgZnVuY3Rpb24gdGV4dG9wdHMgKG9wdCwgdGV4dCkge1xuICAgIGlmIChvcHQudHJpbSkgdGV4dCA9IHRleHQudHJpbSgpXG4gICAgaWYgKG9wdC5ub3JtYWxpemUpIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xccysvZywgJyAnKVxuICAgIHJldHVybiB0ZXh0XG4gIH1cblxuICBmdW5jdGlvbiBlcnJvciAocGFyc2VyLCBlcikge1xuICAgIGNsb3NlVGV4dChwYXJzZXIpXG4gICAgaWYgKHBhcnNlci50cmFja1Bvc2l0aW9uKSB7XG4gICAgICBlciArPSAnXFxuTGluZTogJyArIHBhcnNlci5saW5lICtcbiAgICAgICAgJ1xcbkNvbHVtbjogJyArIHBhcnNlci5jb2x1bW4gK1xuICAgICAgICAnXFxuQ2hhcjogJyArIHBhcnNlci5jXG4gICAgfVxuICAgIGVyID0gbmV3IEVycm9yKGVyKVxuICAgIHBhcnNlci5lcnJvciA9IGVyXG4gICAgZW1pdChwYXJzZXIsICdvbmVycm9yJywgZXIpXG4gICAgcmV0dXJuIHBhcnNlclxuICB9XG5cbiAgZnVuY3Rpb24gZW5kIChwYXJzZXIpIHtcbiAgICBpZiAocGFyc2VyLnNhd1Jvb3QgJiYgIXBhcnNlci5jbG9zZWRSb290KSBzdHJpY3RGYWlsKHBhcnNlciwgJ1VuY2xvc2VkIHJvb3QgdGFnJylcbiAgICBpZiAoKHBhcnNlci5zdGF0ZSAhPT0gUy5CRUdJTikgJiZcbiAgICAgIChwYXJzZXIuc3RhdGUgIT09IFMuQkVHSU5fV0hJVEVTUEFDRSkgJiZcbiAgICAgIChwYXJzZXIuc3RhdGUgIT09IFMuVEVYVCkpIHtcbiAgICAgIGVycm9yKHBhcnNlciwgJ1VuZXhwZWN0ZWQgZW5kJylcbiAgICB9XG4gICAgY2xvc2VUZXh0KHBhcnNlcilcbiAgICBwYXJzZXIuYyA9ICcnXG4gICAgcGFyc2VyLmNsb3NlZCA9IHRydWVcbiAgICBlbWl0KHBhcnNlciwgJ29uZW5kJylcbiAgICBTQVhQYXJzZXIuY2FsbChwYXJzZXIsIHBhcnNlci5zdHJpY3QsIHBhcnNlci5vcHQpXG4gICAgcmV0dXJuIHBhcnNlclxuICB9XG5cbiAgZnVuY3Rpb24gc3RyaWN0RmFpbCAocGFyc2VyLCBtZXNzYWdlKSB7XG4gICAgaWYgKHR5cGVvZiBwYXJzZXIgIT09ICdvYmplY3QnIHx8ICEocGFyc2VyIGluc3RhbmNlb2YgU0FYUGFyc2VyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgY2FsbCB0byBzdHJpY3RGYWlsJylcbiAgICB9XG4gICAgaWYgKHBhcnNlci5zdHJpY3QpIHtcbiAgICAgIGVycm9yKHBhcnNlciwgbWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBuZXdUYWcgKHBhcnNlcikge1xuICAgIGlmICghcGFyc2VyLnN0cmljdCkgcGFyc2VyLnRhZ05hbWUgPSBwYXJzZXIudGFnTmFtZVtwYXJzZXIubG9vc2VDYXNlXSgpXG4gICAgdmFyIHBhcmVudCA9IHBhcnNlci50YWdzW3BhcnNlci50YWdzLmxlbmd0aCAtIDFdIHx8IHBhcnNlclxuICAgIHZhciB0YWcgPSBwYXJzZXIudGFnID0geyBuYW1lOiBwYXJzZXIudGFnTmFtZSwgYXR0cmlidXRlczoge30gfVxuXG4gICAgLy8gd2lsbCBiZSBvdmVycmlkZGVuIGlmIHRhZyBjb250YWlscyBhbiB4bWxucz1cImZvb1wiIG9yIHhtbG5zOmZvbz1cImJhclwiXG4gICAgaWYgKHBhcnNlci5vcHQueG1sbnMpIHtcbiAgICAgIHRhZy5ucyA9IHBhcmVudC5uc1xuICAgIH1cbiAgICBwYXJzZXIuYXR0cmliTGlzdC5sZW5ndGggPSAwXG4gICAgZW1pdE5vZGUocGFyc2VyLCAnb25vcGVudGFnc3RhcnQnLCB0YWcpXG4gIH1cblxuICBmdW5jdGlvbiBxbmFtZSAobmFtZSwgYXR0cmlidXRlKSB7XG4gICAgdmFyIGkgPSBuYW1lLmluZGV4T2YoJzonKVxuICAgIHZhciBxdWFsTmFtZSA9IGkgPCAwID8gWyAnJywgbmFtZSBdIDogbmFtZS5zcGxpdCgnOicpXG4gICAgdmFyIHByZWZpeCA9IHF1YWxOYW1lWzBdXG4gICAgdmFyIGxvY2FsID0gcXVhbE5hbWVbMV1cblxuICAgIC8vIDx4IFwieG1sbnNcIj1cImh0dHA6Ly9mb29cIj5cbiAgICBpZiAoYXR0cmlidXRlICYmIG5hbWUgPT09ICd4bWxucycpIHtcbiAgICAgIHByZWZpeCA9ICd4bWxucydcbiAgICAgIGxvY2FsID0gJydcbiAgICB9XG5cbiAgICByZXR1cm4geyBwcmVmaXg6IHByZWZpeCwgbG9jYWw6IGxvY2FsIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJpYiAocGFyc2VyKSB7XG4gICAgaWYgKCFwYXJzZXIuc3RyaWN0KSB7XG4gICAgICBwYXJzZXIuYXR0cmliTmFtZSA9IHBhcnNlci5hdHRyaWJOYW1lW3BhcnNlci5sb29zZUNhc2VdKClcbiAgICB9XG5cbiAgICBpZiAocGFyc2VyLmF0dHJpYkxpc3QuaW5kZXhPZihwYXJzZXIuYXR0cmliTmFtZSkgIT09IC0xIHx8XG4gICAgICBwYXJzZXIudGFnLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkocGFyc2VyLmF0dHJpYk5hbWUpKSB7XG4gICAgICBwYXJzZXIuYXR0cmliTmFtZSA9IHBhcnNlci5hdHRyaWJWYWx1ZSA9ICcnXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocGFyc2VyLm9wdC54bWxucykge1xuICAgICAgdmFyIHFuID0gcW5hbWUocGFyc2VyLmF0dHJpYk5hbWUsIHRydWUpXG4gICAgICB2YXIgcHJlZml4ID0gcW4ucHJlZml4XG4gICAgICB2YXIgbG9jYWwgPSBxbi5sb2NhbFxuXG4gICAgICBpZiAocHJlZml4ID09PSAneG1sbnMnKSB7XG4gICAgICAgIC8vIG5hbWVzcGFjZSBiaW5kaW5nIGF0dHJpYnV0ZS4gcHVzaCB0aGUgYmluZGluZyBpbnRvIHNjb3BlXG4gICAgICAgIGlmIChsb2NhbCA9PT0gJ3htbCcgJiYgcGFyc2VyLmF0dHJpYlZhbHVlICE9PSBYTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsXG4gICAgICAgICAgICAneG1sOiBwcmVmaXggbXVzdCBiZSBib3VuZCB0byAnICsgWE1MX05BTUVTUEFDRSArICdcXG4nICtcbiAgICAgICAgICAgICdBY3R1YWw6ICcgKyBwYXJzZXIuYXR0cmliVmFsdWUpXG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWwgPT09ICd4bWxucycgJiYgcGFyc2VyLmF0dHJpYlZhbHVlICE9PSBYTUxOU19OQU1FU1BBQ0UpIHtcbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlcixcbiAgICAgICAgICAgICd4bWxuczogcHJlZml4IG11c3QgYmUgYm91bmQgdG8gJyArIFhNTE5TX05BTUVTUEFDRSArICdcXG4nICtcbiAgICAgICAgICAgICdBY3R1YWw6ICcgKyBwYXJzZXIuYXR0cmliVmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHRhZyA9IHBhcnNlci50YWdcbiAgICAgICAgICB2YXIgcGFyZW50ID0gcGFyc2VyLnRhZ3NbcGFyc2VyLnRhZ3MubGVuZ3RoIC0gMV0gfHwgcGFyc2VyXG4gICAgICAgICAgaWYgKHRhZy5ucyA9PT0gcGFyZW50Lm5zKSB7XG4gICAgICAgICAgICB0YWcubnMgPSBPYmplY3QuY3JlYXRlKHBhcmVudC5ucylcbiAgICAgICAgICB9XG4gICAgICAgICAgdGFnLm5zW2xvY2FsXSA9IHBhcnNlci5hdHRyaWJWYWx1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGRlZmVyIG9uYXR0cmlidXRlIGV2ZW50cyB1bnRpbCBhbGwgYXR0cmlidXRlcyBoYXZlIGJlZW4gc2VlblxuICAgICAgLy8gc28gYW55IG5ldyBiaW5kaW5ncyBjYW4gdGFrZSBlZmZlY3QuIHByZXNlcnZlIGF0dHJpYnV0ZSBvcmRlclxuICAgICAgLy8gc28gZGVmZXJyZWQgZXZlbnRzIGNhbiBiZSBlbWl0dGVkIGluIGRvY3VtZW50IG9yZGVyXG4gICAgICBwYXJzZXIuYXR0cmliTGlzdC5wdXNoKFtwYXJzZXIuYXR0cmliTmFtZSwgcGFyc2VyLmF0dHJpYlZhbHVlXSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW4gbm9uLXhtbG5zIG1vZGUsIHdlIGNhbiBlbWl0IHRoZSBldmVudCByaWdodCBhd2F5XG4gICAgICBwYXJzZXIudGFnLmF0dHJpYnV0ZXNbcGFyc2VyLmF0dHJpYk5hbWVdID0gcGFyc2VyLmF0dHJpYlZhbHVlXG4gICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbmF0dHJpYnV0ZScsIHtcbiAgICAgICAgbmFtZTogcGFyc2VyLmF0dHJpYk5hbWUsXG4gICAgICAgIHZhbHVlOiBwYXJzZXIuYXR0cmliVmFsdWVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBwYXJzZXIuYXR0cmliVmFsdWUgPSAnJ1xuICB9XG5cbiAgZnVuY3Rpb24gb3BlblRhZyAocGFyc2VyLCBzZWxmQ2xvc2luZykge1xuICAgIGlmIChwYXJzZXIub3B0LnhtbG5zKSB7XG4gICAgICAvLyBlbWl0IG5hbWVzcGFjZSBiaW5kaW5nIGV2ZW50c1xuICAgICAgdmFyIHRhZyA9IHBhcnNlci50YWdcblxuICAgICAgLy8gYWRkIG5hbWVzcGFjZSBpbmZvIHRvIHRhZ1xuICAgICAgdmFyIHFuID0gcW5hbWUocGFyc2VyLnRhZ05hbWUpXG4gICAgICB0YWcucHJlZml4ID0gcW4ucHJlZml4XG4gICAgICB0YWcubG9jYWwgPSBxbi5sb2NhbFxuICAgICAgdGFnLnVyaSA9IHRhZy5uc1txbi5wcmVmaXhdIHx8ICcnXG5cbiAgICAgIGlmICh0YWcucHJlZml4ICYmICF0YWcudXJpKSB7XG4gICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnVW5ib3VuZCBuYW1lc3BhY2UgcHJlZml4OiAnICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShwYXJzZXIudGFnTmFtZSkpXG4gICAgICAgIHRhZy51cmkgPSBxbi5wcmVmaXhcbiAgICAgIH1cblxuICAgICAgdmFyIHBhcmVudCA9IHBhcnNlci50YWdzW3BhcnNlci50YWdzLmxlbmd0aCAtIDFdIHx8IHBhcnNlclxuICAgICAgaWYgKHRhZy5ucyAmJiBwYXJlbnQubnMgIT09IHRhZy5ucykge1xuICAgICAgICBPYmplY3Qua2V5cyh0YWcubnMpLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbm9wZW5uYW1lc3BhY2UnLCB7XG4gICAgICAgICAgICBwcmVmaXg6IHAsXG4gICAgICAgICAgICB1cmk6IHRhZy5uc1twXVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIGhhbmRsZSBkZWZlcnJlZCBvbmF0dHJpYnV0ZSBldmVudHNcbiAgICAgIC8vIE5vdGU6IGRvIG5vdCBhcHBseSBkZWZhdWx0IG5zIHRvIGF0dHJpYnV0ZXM6XG4gICAgICAvLyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwtbmFtZXMvI2RlZmF1bHRpbmdcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFyc2VyLmF0dHJpYkxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBudiA9IHBhcnNlci5hdHRyaWJMaXN0W2ldXG4gICAgICAgIHZhciBuYW1lID0gbnZbMF1cbiAgICAgICAgdmFyIHZhbHVlID0gbnZbMV1cbiAgICAgICAgdmFyIHF1YWxOYW1lID0gcW5hbWUobmFtZSwgdHJ1ZSlcbiAgICAgICAgdmFyIHByZWZpeCA9IHF1YWxOYW1lLnByZWZpeFxuICAgICAgICB2YXIgbG9jYWwgPSBxdWFsTmFtZS5sb2NhbFxuICAgICAgICB2YXIgdXJpID0gcHJlZml4ID09PSAnJyA/ICcnIDogKHRhZy5uc1twcmVmaXhdIHx8ICcnKVxuICAgICAgICB2YXIgYSA9IHtcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmVmaXg6IHByZWZpeCxcbiAgICAgICAgICBsb2NhbDogbG9jYWwsXG4gICAgICAgICAgdXJpOiB1cmlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHRoZXJlJ3MgYW55IGF0dHJpYnV0ZXMgd2l0aCBhbiB1bmRlZmluZWQgbmFtZXNwYWNlLFxuICAgICAgICAvLyB0aGVuIGZhaWwgb24gdGhlbSBub3cuXG4gICAgICAgIGlmIChwcmVmaXggJiYgcHJlZml4ICE9PSAneG1sbnMnICYmICF1cmkpIHtcbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ1VuYm91bmQgbmFtZXNwYWNlIHByZWZpeDogJyArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShwcmVmaXgpKVxuICAgICAgICAgIGEudXJpID0gcHJlZml4XG4gICAgICAgIH1cbiAgICAgICAgcGFyc2VyLnRhZy5hdHRyaWJ1dGVzW25hbWVdID0gYVxuICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbmF0dHJpYnV0ZScsIGEpXG4gICAgICB9XG4gICAgICBwYXJzZXIuYXR0cmliTGlzdC5sZW5ndGggPSAwXG4gICAgfVxuXG4gICAgcGFyc2VyLnRhZy5pc1NlbGZDbG9zaW5nID0gISFzZWxmQ2xvc2luZ1xuXG4gICAgLy8gcHJvY2VzcyB0aGUgdGFnXG4gICAgcGFyc2VyLnNhd1Jvb3QgPSB0cnVlXG4gICAgcGFyc2VyLnRhZ3MucHVzaChwYXJzZXIudGFnKVxuICAgIGVtaXROb2RlKHBhcnNlciwgJ29ub3BlbnRhZycsIHBhcnNlci50YWcpXG4gICAgaWYgKCFzZWxmQ2xvc2luZykge1xuICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciA8c2NyaXB0PiBpbiBub24tc3RyaWN0IG1vZGUuXG4gICAgICBpZiAoIXBhcnNlci5ub3NjcmlwdCAmJiBwYXJzZXIudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc2NyaXB0Jykge1xuICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNDUklQVFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICB9XG4gICAgICBwYXJzZXIudGFnID0gbnVsbFxuICAgICAgcGFyc2VyLnRhZ05hbWUgPSAnJ1xuICAgIH1cbiAgICBwYXJzZXIuYXR0cmliTmFtZSA9IHBhcnNlci5hdHRyaWJWYWx1ZSA9ICcnXG4gICAgcGFyc2VyLmF0dHJpYkxpc3QubGVuZ3RoID0gMFxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VUYWcgKHBhcnNlcikge1xuICAgIGlmICghcGFyc2VyLnRhZ05hbWUpIHtcbiAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnV2VpcmQgZW1wdHkgY2xvc2UgdGFnLicpXG4gICAgICBwYXJzZXIudGV4dE5vZGUgKz0gJzwvPidcbiAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHBhcnNlci5zY3JpcHQpIHtcbiAgICAgIGlmIChwYXJzZXIudGFnTmFtZSAhPT0gJ3NjcmlwdCcpIHtcbiAgICAgICAgcGFyc2VyLnNjcmlwdCArPSAnPC8nICsgcGFyc2VyLnRhZ05hbWUgKyAnPidcbiAgICAgICAgcGFyc2VyLnRhZ05hbWUgPSAnJ1xuICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNDUklQVFxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uc2NyaXB0JywgcGFyc2VyLnNjcmlwdClcbiAgICAgIHBhcnNlci5zY3JpcHQgPSAnJ1xuICAgIH1cblxuICAgIC8vIGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBjbG9zaW5nIHRhZyBhY3R1YWxseSBleGlzdHMuXG4gICAgLy8gPGE+PGI+PC9jPjwvYj48L2E+IHdpbGwgY2xvc2UgZXZlcnl0aGluZywgb3RoZXJ3aXNlLlxuICAgIHZhciB0ID0gcGFyc2VyLnRhZ3MubGVuZ3RoXG4gICAgdmFyIHRhZ05hbWUgPSBwYXJzZXIudGFnTmFtZVxuICAgIGlmICghcGFyc2VyLnN0cmljdCkge1xuICAgICAgdGFnTmFtZSA9IHRhZ05hbWVbcGFyc2VyLmxvb3NlQ2FzZV0oKVxuICAgIH1cbiAgICB2YXIgY2xvc2VUbyA9IHRhZ05hbWVcbiAgICB3aGlsZSAodC0tKSB7XG4gICAgICB2YXIgY2xvc2UgPSBwYXJzZXIudGFnc1t0XVxuICAgICAgaWYgKGNsb3NlLm5hbWUgIT09IGNsb3NlVG8pIHtcbiAgICAgICAgLy8gZmFpbCB0aGUgZmlyc3QgdGltZSBpbiBzdHJpY3QgbW9kZVxuICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ1VuZXhwZWN0ZWQgY2xvc2UgdGFnJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGlkbid0IGZpbmQgaXQuICB3ZSBhbHJlYWR5IGZhaWxlZCBmb3Igc3RyaWN0LCBzbyBqdXN0IGFib3J0LlxuICAgIGlmICh0IDwgMCkge1xuICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdVbm1hdGNoZWQgY2xvc2luZyB0YWc6ICcgKyBwYXJzZXIudGFnTmFtZSlcbiAgICAgIHBhcnNlci50ZXh0Tm9kZSArPSAnPC8nICsgcGFyc2VyLnRhZ05hbWUgKyAnPidcbiAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHBhcnNlci50YWdOYW1lID0gdGFnTmFtZVxuICAgIHZhciBzID0gcGFyc2VyLnRhZ3MubGVuZ3RoXG4gICAgd2hpbGUgKHMtLSA+IHQpIHtcbiAgICAgIHZhciB0YWcgPSBwYXJzZXIudGFnID0gcGFyc2VyLnRhZ3MucG9wKClcbiAgICAgIHBhcnNlci50YWdOYW1lID0gcGFyc2VyLnRhZy5uYW1lXG4gICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbmNsb3NldGFnJywgcGFyc2VyLnRhZ05hbWUpXG5cbiAgICAgIHZhciB4ID0ge31cbiAgICAgIGZvciAodmFyIGkgaW4gdGFnLm5zKSB7XG4gICAgICAgIHhbaV0gPSB0YWcubnNbaV1cbiAgICAgIH1cblxuICAgICAgdmFyIHBhcmVudCA9IHBhcnNlci50YWdzW3BhcnNlci50YWdzLmxlbmd0aCAtIDFdIHx8IHBhcnNlclxuICAgICAgaWYgKHBhcnNlci5vcHQueG1sbnMgJiYgdGFnLm5zICE9PSBwYXJlbnQubnMpIHtcbiAgICAgICAgLy8gcmVtb3ZlIG5hbWVzcGFjZSBiaW5kaW5ncyBpbnRyb2R1Y2VkIGJ5IHRhZ1xuICAgICAgICBPYmplY3Qua2V5cyh0YWcubnMpLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICB2YXIgbiA9IHRhZy5uc1twXVxuICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29uY2xvc2VuYW1lc3BhY2UnLCB7IHByZWZpeDogcCwgdXJpOiBuIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0ID09PSAwKSBwYXJzZXIuY2xvc2VkUm9vdCA9IHRydWVcbiAgICBwYXJzZXIudGFnTmFtZSA9IHBhcnNlci5hdHRyaWJWYWx1ZSA9IHBhcnNlci5hdHRyaWJOYW1lID0gJydcbiAgICBwYXJzZXIuYXR0cmliTGlzdC5sZW5ndGggPSAwXG4gICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUVudGl0eSAocGFyc2VyKSB7XG4gICAgdmFyIGVudGl0eSA9IHBhcnNlci5lbnRpdHlcbiAgICB2YXIgZW50aXR5TEMgPSBlbnRpdHkudG9Mb3dlckNhc2UoKVxuICAgIHZhciBudW1cbiAgICB2YXIgbnVtU3RyID0gJydcblxuICAgIGlmIChwYXJzZXIuRU5USVRJRVNbZW50aXR5XSkge1xuICAgICAgcmV0dXJuIHBhcnNlci5FTlRJVElFU1tlbnRpdHldXG4gICAgfVxuICAgIGlmIChwYXJzZXIuRU5USVRJRVNbZW50aXR5TENdKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLkVOVElUSUVTW2VudGl0eUxDXVxuICAgIH1cbiAgICBlbnRpdHkgPSBlbnRpdHlMQ1xuICAgIGlmIChlbnRpdHkuY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgIGlmIChlbnRpdHkuY2hhckF0KDEpID09PSAneCcpIHtcbiAgICAgICAgZW50aXR5ID0gZW50aXR5LnNsaWNlKDIpXG4gICAgICAgIG51bSA9IHBhcnNlSW50KGVudGl0eSwgMTYpXG4gICAgICAgIG51bVN0ciA9IG51bS50b1N0cmluZygxNilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudGl0eSA9IGVudGl0eS5zbGljZSgxKVxuICAgICAgICBudW0gPSBwYXJzZUludChlbnRpdHksIDEwKVxuICAgICAgICBudW1TdHIgPSBudW0udG9TdHJpbmcoMTApXG4gICAgICB9XG4gICAgfVxuICAgIGVudGl0eSA9IGVudGl0eS5yZXBsYWNlKC9eMCsvLCAnJylcbiAgICBpZiAobnVtU3RyLnRvTG93ZXJDYXNlKCkgIT09IGVudGl0eSkge1xuICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdJbnZhbGlkIGNoYXJhY3RlciBlbnRpdHknKVxuICAgICAgcmV0dXJuICcmJyArIHBhcnNlci5lbnRpdHkgKyAnOydcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQobnVtKVxuICB9XG5cbiAgZnVuY3Rpb24gYmVnaW5XaGl0ZVNwYWNlIChwYXJzZXIsIGMpIHtcbiAgICBpZiAoYyA9PT0gJzwnKSB7XG4gICAgICBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fV0FLQVxuICAgICAgcGFyc2VyLnN0YXJ0VGFnUG9zaXRpb24gPSBwYXJzZXIucG9zaXRpb25cbiAgICB9IGVsc2UgaWYgKG5vdCh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgLy8gaGF2ZSB0byBwcm9jZXNzIHRoaXMgYXMgYSB0ZXh0IG5vZGUuXG4gICAgICAvLyB3ZWlyZCwgYnV0IGhhcHBlbnMuXG4gICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ05vbi13aGl0ZXNwYWNlIGJlZm9yZSBmaXJzdCB0YWcuJylcbiAgICAgIHBhcnNlci50ZXh0Tm9kZSA9IGNcbiAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoYXJBdCAoY2h1bmssIGkpIHtcbiAgICB2YXIgcmVzdWx0ID0gJydcbiAgICBpZiAoaSA8IGNodW5rLmxlbmd0aCkge1xuICAgICAgcmVzdWx0ID0gY2h1bmsuY2hhckF0KGkpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlIChjaHVuaykge1xuICAgIHZhciBwYXJzZXIgPSB0aGlzXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuZXJyb3JcbiAgICB9XG4gICAgaWYgKHBhcnNlci5jbG9zZWQpIHtcbiAgICAgIHJldHVybiBlcnJvcihwYXJzZXIsXG4gICAgICAgICdDYW5ub3Qgd3JpdGUgYWZ0ZXIgY2xvc2UuIEFzc2lnbiBhbiBvbnJlYWR5IGhhbmRsZXIuJylcbiAgICB9XG4gICAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZW5kKHBhcnNlcilcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNodW5rID0gY2h1bmsudG9TdHJpbmcoKVxuICAgIH1cbiAgICB2YXIgaSA9IDBcbiAgICB2YXIgYyA9ICcnXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGMgPSBjaGFyQXQoY2h1bmssIGkrKylcbiAgICAgIHBhcnNlci5jID0gY1xuXG4gICAgICBpZiAoIWMpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnNlci50cmFja1Bvc2l0aW9uKSB7XG4gICAgICAgIHBhcnNlci5wb3NpdGlvbisrXG4gICAgICAgIGlmIChjID09PSAnXFxuJykge1xuICAgICAgICAgIHBhcnNlci5saW5lKytcbiAgICAgICAgICBwYXJzZXIuY29sdW1uID0gMFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlci5jb2x1bW4rK1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAocGFyc2VyLnN0YXRlKSB7XG4gICAgICAgIGNhc2UgUy5CRUdJTjpcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkJFR0lOX1dISVRFU1BBQ0VcbiAgICAgICAgICBpZiAoYyA9PT0gJ1xcdUZFRkYnKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBiZWdpbldoaXRlU3BhY2UocGFyc2VyLCBjKVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkJFR0lOX1dISVRFU1BBQ0U6XG4gICAgICAgICAgYmVnaW5XaGl0ZVNwYWNlKHBhcnNlciwgYylcbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5URVhUOlxuICAgICAgICAgIGlmIChwYXJzZXIuc2F3Um9vdCAmJiAhcGFyc2VyLmNsb3NlZFJvb3QpIHtcbiAgICAgICAgICAgIHZhciBzdGFydGkgPSBpIC0gMVxuICAgICAgICAgICAgd2hpbGUgKGMgJiYgYyAhPT0gJzwnICYmIGMgIT09ICcmJykge1xuICAgICAgICAgICAgICBjID0gY2hhckF0KGNodW5rLCBpKyspXG4gICAgICAgICAgICAgIGlmIChjICYmIHBhcnNlci50cmFja1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VyLnBvc2l0aW9uKytcbiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICAgIHBhcnNlci5saW5lKytcbiAgICAgICAgICAgICAgICAgIHBhcnNlci5jb2x1bW4gPSAwXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBhcnNlci5jb2x1bW4rK1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyc2VyLnRleHROb2RlICs9IGNodW5rLnN1YnN0cmluZyhzdGFydGksIGkgLSAxKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYyA9PT0gJzwnICYmICEocGFyc2VyLnNhd1Jvb3QgJiYgcGFyc2VyLmNsb3NlZFJvb3QgJiYgIXBhcnNlci5zdHJpY3QpKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fV0FLQVxuICAgICAgICAgICAgcGFyc2VyLnN0YXJ0VGFnUG9zaXRpb24gPSBwYXJzZXIucG9zaXRpb25cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5vdCh3aGl0ZXNwYWNlLCBjKSAmJiAoIXBhcnNlci5zYXdSb290IHx8IHBhcnNlci5jbG9zZWRSb290KSkge1xuICAgICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ1RleHQgZGF0YSBvdXRzaWRlIG9mIHJvb3Qgbm9kZS4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICcmJykge1xuICAgICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRfRU5USVRZXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJzZXIudGV4dE5vZGUgKz0gY1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5TQ1JJUFQ6XG4gICAgICAgICAgLy8gb25seSBub24tc3RyaWN0XG4gICAgICAgICAgaWYgKGMgPT09ICc8Jykge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRfRU5ESU5HXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5zY3JpcHQgKz0gY1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5TQ1JJUFRfRU5ESU5HOlxuICAgICAgICAgIGlmIChjID09PSAnLycpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0xPU0VfVEFHXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5zY3JpcHQgKz0gJzwnICsgY1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuT1BFTl9XQUtBOlxuICAgICAgICAgIC8vIGVpdGhlciBhIC8sID8sICEsIG9yIHRleHQgaXMgY29taW5nIG5leHQuXG4gICAgICAgICAgaWYgKGMgPT09ICchJykge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TR01MX0RFQ0xcbiAgICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCA9ICcnXG4gICAgICAgICAgfSBlbHNlIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgICAgLy8gd2FpdCBmb3IgaXQuLi5cbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2gobmFtZVN0YXJ0LCBjKSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1RBR1xuICAgICAgICAgICAgcGFyc2VyLnRhZ05hbWUgPSBjXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnLycpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0xPU0VfVEFHXG4gICAgICAgICAgICBwYXJzZXIudGFnTmFtZSA9ICcnXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnPycpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuUFJPQ19JTlNUXG4gICAgICAgICAgICBwYXJzZXIucHJvY0luc3ROYW1lID0gcGFyc2VyLnByb2NJbnN0Qm9keSA9ICcnXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnVW5lbmNvZGVkIDwnKVxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIHNvbWUgd2hpdGVzcGFjZSwgdGhlbiBhZGQgdGhhdCBpbi5cbiAgICAgICAgICAgIGlmIChwYXJzZXIuc3RhcnRUYWdQb3NpdGlvbiArIDEgPCBwYXJzZXIucG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgdmFyIHBhZCA9IHBhcnNlci5wb3NpdGlvbiAtIHBhcnNlci5zdGFydFRhZ1Bvc2l0aW9uXG4gICAgICAgICAgICAgIGMgPSBuZXcgQXJyYXkocGFkKS5qb2luKCcgJykgKyBjXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZXIudGV4dE5vZGUgKz0gJzwnICsgY1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLlNHTUxfREVDTDpcbiAgICAgICAgICBpZiAoKHBhcnNlci5zZ21sRGVjbCArIGMpLnRvVXBwZXJDYXNlKCkgPT09IENEQVRBKSB7XG4gICAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbm9wZW5jZGF0YScpXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBXG4gICAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLmNkYXRhID0gJydcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNlci5zZ21sRGVjbCArIGMgPT09ICctLScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVFxuICAgICAgICAgICAgcGFyc2VyLmNvbW1lbnQgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnNnbWxEZWNsID0gJydcbiAgICAgICAgICB9IGVsc2UgaWYgKChwYXJzZXIuc2dtbERlY2wgKyBjKS50b1VwcGVyQ2FzZSgpID09PSBET0NUWVBFKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVcbiAgICAgICAgICAgIGlmIChwYXJzZXIuZG9jdHlwZSB8fCBwYXJzZXIuc2F3Um9vdCkge1xuICAgICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlcixcbiAgICAgICAgICAgICAgICAnSW5hcHByb3ByaWF0ZWx5IGxvY2F0ZWQgZG9jdHlwZSBkZWNsYXJhdGlvbicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZXIuZG9jdHlwZSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgPSAnJ1xuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJz4nKSB7XG4gICAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbnNnbWxkZWNsYXJhdGlvbicsIHBhcnNlci5zZ21sRGVjbClcbiAgICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzKHF1b3RlLCBjKSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TR01MX0RFQ0xfUVVPVEVEXG4gICAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgKz0gY1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgKz0gY1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5TR01MX0RFQ0xfUVVPVEVEOlxuICAgICAgICAgIGlmIChjID09PSBwYXJzZXIucSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TR01MX0RFQ0xcbiAgICAgICAgICAgIHBhcnNlci5xID0gJydcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyc2VyLnNnbWxEZWNsICs9IGNcbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5ET0NUWVBFOlxuICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25kb2N0eXBlJywgcGFyc2VyLmRvY3R5cGUpXG4gICAgICAgICAgICBwYXJzZXIuZG9jdHlwZSA9IHRydWUgLy8ganVzdCByZW1lbWJlciB0aGF0IHdlIHNhdyBpdC5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLmRvY3R5cGUgKz0gY1xuICAgICAgICAgICAgaWYgKGMgPT09ICdbJykge1xuICAgICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVfRFREXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHF1b3RlLCBjKSkge1xuICAgICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVfUVVPVEVEXG4gICAgICAgICAgICAgIHBhcnNlci5xID0gY1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5ET0NUWVBFX1FVT1RFRDpcbiAgICAgICAgICBwYXJzZXIuZG9jdHlwZSArPSBjXG4gICAgICAgICAgaWYgKGMgPT09IHBhcnNlci5xKSB7XG4gICAgICAgICAgICBwYXJzZXIucSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuRE9DVFlQRV9EVEQ6XG4gICAgICAgICAgcGFyc2VyLmRvY3R5cGUgKz0gY1xuICAgICAgICAgIGlmIChjID09PSAnXScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuRE9DVFlQRVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXMocXVvdGUsIGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVfRFREX1FVT1RFRFxuICAgICAgICAgICAgcGFyc2VyLnEgPSBjXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkRPQ1RZUEVfRFREX1FVT1RFRDpcbiAgICAgICAgICBwYXJzZXIuZG9jdHlwZSArPSBjXG4gICAgICAgICAgaWYgKGMgPT09IHBhcnNlci5xKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVfRFREXG4gICAgICAgICAgICBwYXJzZXIucSA9ICcnXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkNPTU1FTlQ6XG4gICAgICAgICAgaWYgKGMgPT09ICctJykge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DT01NRU5UX0VORElOR1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXIuY29tbWVudCArPSBjXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkNPTU1FTlRfRU5ESU5HOlxuICAgICAgICAgIGlmIChjID09PSAnLScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVF9FTkRFRFxuICAgICAgICAgICAgcGFyc2VyLmNvbW1lbnQgPSB0ZXh0b3B0cyhwYXJzZXIub3B0LCBwYXJzZXIuY29tbWVudClcbiAgICAgICAgICAgIGlmIChwYXJzZXIuY29tbWVudCkge1xuICAgICAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbmNvbW1lbnQnLCBwYXJzZXIuY29tbWVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlci5jb21tZW50ID0gJydcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLmNvbW1lbnQgKz0gJy0nICsgY1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DT01NRU5UXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkNPTU1FTlRfRU5ERUQ6XG4gICAgICAgICAgaWYgKGMgIT09ICc+Jykge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdNYWxmb3JtZWQgY29tbWVudCcpXG4gICAgICAgICAgICAvLyBhbGxvdyA8IS0tIGJsYWggLS0gYmxvbyAtLT4gaW4gbm9uLXN0cmljdCBtb2RlLFxuICAgICAgICAgICAgLy8gd2hpY2ggaXMgYSBjb21tZW50IG9mIFwiIGJsYWggLS0gYmxvbyBcIlxuICAgICAgICAgICAgcGFyc2VyLmNvbW1lbnQgKz0gJy0tJyArIGNcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQ0RBVEE6XG4gICAgICAgICAgaWYgKGMgPT09ICddJykge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DREFUQV9FTkRJTkdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLmNkYXRhICs9IGNcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQ0RBVEFfRU5ESU5HOlxuICAgICAgICAgIGlmIChjID09PSAnXScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0RBVEFfRU5ESU5HXzJcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLmNkYXRhICs9ICddJyArIGNcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0RBVEFcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQ0RBVEFfRU5ESU5HXzI6XG4gICAgICAgICAgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgaWYgKHBhcnNlci5jZGF0YSkge1xuICAgICAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbmNkYXRhJywgcGFyc2VyLmNkYXRhKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCAnb25jbG9zZWNkYXRhJylcbiAgICAgICAgICAgIHBhcnNlci5jZGF0YSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICddJykge1xuICAgICAgICAgICAgcGFyc2VyLmNkYXRhICs9ICddJ1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXIuY2RhdGEgKz0gJ11dJyArIGNcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0RBVEFcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuUFJPQ19JTlNUOlxuICAgICAgICAgIGlmIChjID09PSAnPycpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuUFJPQ19JTlNUX0VORElOR1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXMod2hpdGVzcGFjZSwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuUFJPQ19JTlNUX0JPRFlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VyLnByb2NJbnN0TmFtZSArPSBjXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLlBST0NfSU5TVF9CT0RZOlxuICAgICAgICAgIGlmICghcGFyc2VyLnByb2NJbnN0Qm9keSAmJiBpcyh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5QUk9DX0lOU1RfRU5ESU5HXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5wcm9jSW5zdEJvZHkgKz0gY1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5QUk9DX0lOU1RfRU5ESU5HOlxuICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgJ29ucHJvY2Vzc2luZ2luc3RydWN0aW9uJywge1xuICAgICAgICAgICAgICBuYW1lOiBwYXJzZXIucHJvY0luc3ROYW1lLFxuICAgICAgICAgICAgICBib2R5OiBwYXJzZXIucHJvY0luc3RCb2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcGFyc2VyLnByb2NJbnN0TmFtZSA9IHBhcnNlci5wcm9jSW5zdEJvZHkgPSAnJ1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlci5wcm9jSW5zdEJvZHkgKz0gJz8nICsgY1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5QUk9DX0lOU1RfQk9EWVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5PUEVOX1RBRzpcbiAgICAgICAgICBpZiAoaXNNYXRjaChuYW1lQm9keSwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci50YWdOYW1lICs9IGNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3VGFnKHBhcnNlcilcbiAgICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgICAgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICcvJykge1xuICAgICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fVEFHX1NMQVNIXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAobm90KHdoaXRlc3BhY2UsIGMpKSB7XG4gICAgICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdJbnZhbGlkIGNoYXJhY3RlciBpbiB0YWcgbmFtZScpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuT1BFTl9UQUdfU0xBU0g6XG4gICAgICAgICAgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgb3BlblRhZyhwYXJzZXIsIHRydWUpXG4gICAgICAgICAgICBjbG9zZVRhZyhwYXJzZXIpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnRm9yd2FyZC1zbGFzaCBpbiBvcGVuaW5nIHRhZyBub3QgZm9sbG93ZWQgYnkgPicpXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQlxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5BVFRSSUI6XG4gICAgICAgICAgLy8gaGF2ZW4ndCByZWFkIHRoZSBhdHRyaWJ1dGUgbmFtZSB5ZXQuXG4gICAgICAgICAgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJz4nKSB7XG4gICAgICAgICAgICBvcGVuVGFnKHBhcnNlcilcbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICcvJykge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1RBR19TTEFTSFxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaChuYW1lU3RhcnQsIGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliTmFtZSA9IGNcbiAgICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9OQU1FXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCBhdHRyaWJ1dGUgbmFtZScpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkFUVFJJQl9OQU1FOlxuICAgICAgICAgIGlmIChjID09PSAnPScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnQXR0cmlidXRlIHdpdGhvdXQgdmFsdWUnKVxuICAgICAgICAgICAgcGFyc2VyLmF0dHJpYlZhbHVlID0gcGFyc2VyLmF0dHJpYk5hbWVcbiAgICAgICAgICAgIGF0dHJpYihwYXJzZXIpXG4gICAgICAgICAgICBvcGVuVGFnKHBhcnNlcilcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9OQU1FX1NBV19XSElURVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaChuYW1lQm9keSwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5hdHRyaWJOYW1lICs9IGNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lJylcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQVRUUklCX05BTUVfU0FXX1dISVRFOlxuICAgICAgICAgIGlmIChjID09PSAnPScpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFXG4gICAgICAgICAgfSBlbHNlIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdBdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZScpXG4gICAgICAgICAgICBwYXJzZXIudGFnLmF0dHJpYnV0ZXNbcGFyc2VyLmF0dHJpYk5hbWVdID0gJydcbiAgICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSA9ICcnXG4gICAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsICdvbmF0dHJpYnV0ZScsIHtcbiAgICAgICAgICAgICAgbmFtZTogcGFyc2VyLmF0dHJpYk5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHBhcnNlci5hdHRyaWJOYW1lID0gJydcbiAgICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgICAgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2gobmFtZVN0YXJ0LCBjKSkge1xuICAgICAgICAgICAgICBwYXJzZXIuYXR0cmliTmFtZSA9IGNcbiAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfTkFNRVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lJylcbiAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFOlxuICAgICAgICAgIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzKHF1b3RlLCBjKSkge1xuICAgICAgICAgICAgcGFyc2VyLnEgPSBjXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9RVU9URURcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdVbnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUnKVxuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfVU5RVU9URURcbiAgICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSA9IGNcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX1FVT1RFRDpcbiAgICAgICAgICBpZiAoYyAhPT0gcGFyc2VyLnEpIHtcbiAgICAgICAgICAgIGlmIChjID09PSAnJicpIHtcbiAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfRU5USVRZX1FcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSArPSBjXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBhdHRyaWIocGFyc2VyKVxuICAgICAgICAgIHBhcnNlci5xID0gJydcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9DTE9TRURcbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfQ0xPU0VEOlxuICAgICAgICAgIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJcbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnLycpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuT1BFTl9UQUdfU0xBU0hcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2gobmFtZVN0YXJ0LCBjKSkge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsICdObyB3aGl0ZXNwYWNlIGJldHdlZW4gYXR0cmlidXRlcycpXG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliTmFtZSA9IGNcbiAgICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9OQU1FXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCBhdHRyaWJ1dGUgbmFtZScpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9VTlFVT1RFRDpcbiAgICAgICAgICBpZiAobm90KGF0dHJpYkVuZCwgYykpIHtcbiAgICAgICAgICAgIGlmIChjID09PSAnJicpIHtcbiAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfRU5USVRZX1VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSArPSBjXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBhdHRyaWIocGFyc2VyKVxuICAgICAgICAgIGlmIChjID09PSAnPicpIHtcbiAgICAgICAgICAgIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQlxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5DTE9TRV9UQUc6XG4gICAgICAgICAgaWYgKCFwYXJzZXIudGFnTmFtZSkge1xuICAgICAgICAgICAgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5vdE1hdGNoKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICAgICAgaWYgKHBhcnNlci5zY3JpcHQpIHtcbiAgICAgICAgICAgICAgICBwYXJzZXIuc2NyaXB0ICs9ICc8LycgKyBjXG4gICAgICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0ludmFsaWQgdGFnbmFtZSBpbiBjbG9zaW5nIHRhZy4nKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJzZXIudGFnTmFtZSA9IGNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgY2xvc2VUYWcocGFyc2VyKVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaChuYW1lQm9keSwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci50YWdOYW1lICs9IGNcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNlci5zY3JpcHQpIHtcbiAgICAgICAgICAgIHBhcnNlci5zY3JpcHQgKz0gJzwvJyArIHBhcnNlci50YWdOYW1lXG4gICAgICAgICAgICBwYXJzZXIudGFnTmFtZSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNDUklQVFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobm90KHdoaXRlc3BhY2UsIGMpKSB7XG4gICAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCAnSW52YWxpZCB0YWduYW1lIGluIGNsb3NpbmcgdGFnJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0xPU0VfVEFHX1NBV19XSElURVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgIGNhc2UgUy5DTE9TRV9UQUdfU0FXX1dISVRFOlxuICAgICAgICAgIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGMgPT09ICc+Jykge1xuICAgICAgICAgICAgY2xvc2VUYWcocGFyc2VyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBjbG9zaW5nIHRhZycpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgY2FzZSBTLlRFWFRfRU5USVRZOlxuICAgICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX0VOVElUWV9ROlxuICAgICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX0VOVElUWV9VOlxuICAgICAgICAgIHZhciByZXR1cm5TdGF0ZVxuICAgICAgICAgIHZhciBidWZmZXJcbiAgICAgICAgICBzd2l0Y2ggKHBhcnNlci5zdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSBTLlRFWFRfRU5USVRZOlxuICAgICAgICAgICAgICByZXR1cm5TdGF0ZSA9IFMuVEVYVFxuICAgICAgICAgICAgICBidWZmZXIgPSAndGV4dE5vZGUnXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfRU5USVRZX1E6XG4gICAgICAgICAgICAgIHJldHVyblN0YXRlID0gUy5BVFRSSUJfVkFMVUVfUVVPVEVEXG4gICAgICAgICAgICAgIGJ1ZmZlciA9ICdhdHRyaWJWYWx1ZSdcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9FTlRJVFlfVTpcbiAgICAgICAgICAgICAgcmV0dXJuU3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9VTlFVT1RFRFxuICAgICAgICAgICAgICBidWZmZXIgPSAnYXR0cmliVmFsdWUnXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGMgPT09ICc7Jykge1xuICAgICAgICAgICAgcGFyc2VyW2J1ZmZlcl0gKz0gcGFyc2VFbnRpdHkocGFyc2VyKVxuICAgICAgICAgICAgcGFyc2VyLmVudGl0eSA9ICcnXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSByZXR1cm5TdGF0ZVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaChwYXJzZXIuZW50aXR5Lmxlbmd0aCA/IGVudGl0eUJvZHkgOiBlbnRpdHlTdGFydCwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5lbnRpdHkgKz0gY1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgJ0ludmFsaWQgY2hhcmFjdGVyIGluIGVudGl0eSBuYW1lJylcbiAgICAgICAgICAgIHBhcnNlcltidWZmZXJdICs9ICcmJyArIHBhcnNlci5lbnRpdHkgKyBjXG4gICAgICAgICAgICBwYXJzZXIuZW50aXR5ID0gJydcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IHJldHVyblN0YXRlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWVcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwYXJzZXIsICdVbmtub3duIHN0YXRlOiAnICsgcGFyc2VyLnN0YXRlKVxuICAgICAgfVxuICAgIH0gLy8gd2hpbGVcblxuICAgIGlmIChwYXJzZXIucG9zaXRpb24gPj0gcGFyc2VyLmJ1ZmZlckNoZWNrUG9zaXRpb24pIHtcbiAgICAgIGNoZWNrQnVmZmVyTGVuZ3RoKHBhcnNlcilcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlclxuICB9XG5cbiAgLyohIGh0dHA6Ly9tdGhzLmJlL2Zyb21jb2RlcG9pbnQgdjAuMS4wIGJ5IEBtYXRoaWFzICovXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghU3RyaW5nLmZyb21Db2RlUG9pbnQpIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcbiAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3JcbiAgICAgIHZhciBmcm9tQ29kZVBvaW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgTUFYX1NJWkUgPSAweDQwMDBcbiAgICAgICAgdmFyIGNvZGVVbml0cyA9IFtdXG4gICAgICAgIHZhciBoaWdoU3Vycm9nYXRlXG4gICAgICAgIHZhciBsb3dTdXJyb2dhdGVcbiAgICAgICAgdmFyIGluZGV4ID0gLTFcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gJydcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gJydcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICB2YXIgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlzRmluaXRlKGNvZGVQb2ludCkgfHwgLy8gYE5hTmAsIGArSW5maW5pdHlgLCBvciBgLUluZmluaXR5YFxuICAgICAgICAgICAgY29kZVBvaW50IDwgMCB8fCAvLyBub3QgYSB2YWxpZCBVbmljb2RlIGNvZGUgcG9pbnRcbiAgICAgICAgICAgIGNvZGVQb2ludCA+IDB4MTBGRkZGIHx8IC8vIG5vdCBhIHZhbGlkIFVuaWNvZGUgY29kZSBwb2ludFxuICAgICAgICAgICAgZmxvb3IoY29kZVBvaW50KSAhPT0gY29kZVBvaW50IC8vIG5vdCBhbiBpbnRlZ2VyXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQ6ICcgKyBjb2RlUG9pbnQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhGRkZGKSB7IC8vIEJNUCBjb2RlIHBvaW50XG4gICAgICAgICAgICBjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpXG4gICAgICAgICAgfSBlbHNlIHsgLy8gQXN0cmFsIGNvZGUgcG9pbnQ7IHNwbGl0IGluIHN1cnJvZ2F0ZSBoYWx2ZXNcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG4gICAgICAgICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgICAgICAgaGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgMHhEODAwXG4gICAgICAgICAgICBsb3dTdXJyb2dhdGUgPSAoY29kZVBvaW50ICUgMHg0MDApICsgMHhEQzAwXG4gICAgICAgICAgICBjb2RlVW5pdHMucHVzaChoaWdoU3Vycm9nYXRlLCBsb3dTdXJyb2dhdGUpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmRleCArIDEgPT09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdGcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY29kZVVuaXRzKVxuICAgICAgICAgICAgY29kZVVuaXRzLmxlbmd0aCA9IDBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0cmluZywgJ2Zyb21Db2RlUG9pbnQnLCB7XG4gICAgICAgICAgdmFsdWU6IGZyb21Db2RlUG9pbnQsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBTdHJpbmcuZnJvbUNvZGVQb2ludCA9IGZyb21Db2RlUG9pbnRcbiAgICAgIH1cbiAgICB9KCkpXG4gIH1cbn0pKHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJyA/IHRoaXMuc2F4ID0ge30gOiBleHBvcnRzKVxuIiwiLy8gcHJvdG90eXBlIGNsYXNzIGZvciBoYXNoIGZ1bmN0aW9uc1xuZnVuY3Rpb24gSGFzaCAoYmxvY2tTaXplLCBmaW5hbFNpemUpIHtcbiAgdGhpcy5fYmxvY2sgPSBuZXcgQnVmZmVyKGJsb2NrU2l6ZSlcbiAgdGhpcy5fZmluYWxTaXplID0gZmluYWxTaXplXG4gIHRoaXMuX2Jsb2NrU2l6ZSA9IGJsb2NrU2l6ZVxuICB0aGlzLl9sZW4gPSAwXG4gIHRoaXMuX3MgPSAwXG59XG5cbkhhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmMpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIGVuYyA9IGVuYyB8fCAndXRmOCdcbiAgICBkYXRhID0gbmV3IEJ1ZmZlcihkYXRhLCBlbmMpXG4gIH1cblxuICB2YXIgbCA9IHRoaXMuX2xlbiArPSBkYXRhLmxlbmd0aFxuICB2YXIgcyA9IHRoaXMuX3MgfHwgMFxuICB2YXIgZiA9IDBcbiAgdmFyIGJ1ZmZlciA9IHRoaXMuX2Jsb2NrXG5cbiAgd2hpbGUgKHMgPCBsKSB7XG4gICAgdmFyIHQgPSBNYXRoLm1pbihkYXRhLmxlbmd0aCwgZiArIHRoaXMuX2Jsb2NrU2l6ZSAtIChzICUgdGhpcy5fYmxvY2tTaXplKSlcbiAgICB2YXIgY2ggPSAodCAtIGYpXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoOyBpKyspIHtcbiAgICAgIGJ1ZmZlclsocyAlIHRoaXMuX2Jsb2NrU2l6ZSkgKyBpXSA9IGRhdGFbaSArIGZdXG4gICAgfVxuXG4gICAgcyArPSBjaFxuICAgIGYgKz0gY2hcblxuICAgIGlmICgocyAlIHRoaXMuX2Jsb2NrU2l6ZSkgPT09IDApIHtcbiAgICAgIHRoaXMuX3VwZGF0ZShidWZmZXIpXG4gICAgfVxuICB9XG4gIHRoaXMuX3MgPSBzXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuSGFzaC5wcm90b3R5cGUuZGlnZXN0ID0gZnVuY3Rpb24gKGVuYykge1xuICAvLyBTdXBwb3NlIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgTSwgaW4gYml0cywgaXMgbFxuICB2YXIgbCA9IHRoaXMuX2xlbiAqIDhcblxuICAvLyBBcHBlbmQgdGhlIGJpdCAxIHRvIHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2VcbiAgdGhpcy5fYmxvY2tbdGhpcy5fbGVuICUgdGhpcy5fYmxvY2tTaXplXSA9IDB4ODBcblxuICAvLyBhbmQgdGhlbiBrIHplcm8gYml0cywgd2hlcmUgayBpcyB0aGUgc21hbGxlc3Qgbm9uLW5lZ2F0aXZlIHNvbHV0aW9uIHRvIHRoZSBlcXVhdGlvbiAobCArIDEgKyBrKSA9PT0gZmluYWxTaXplIG1vZCBibG9ja1NpemVcbiAgdGhpcy5fYmxvY2suZmlsbCgwLCB0aGlzLl9sZW4gJSB0aGlzLl9ibG9ja1NpemUgKyAxKVxuXG4gIGlmIChsICUgKHRoaXMuX2Jsb2NrU2l6ZSAqIDgpID49IHRoaXMuX2ZpbmFsU2l6ZSAqIDgpIHtcbiAgICB0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spXG4gICAgdGhpcy5fYmxvY2suZmlsbCgwKVxuICB9XG5cbiAgLy8gdG8gdGhpcyBhcHBlbmQgdGhlIGJsb2NrIHdoaWNoIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgbCB3cml0dGVuIGluIGJpbmFyeVxuICAvLyBUT0RPOiBoYW5kbGUgY2FzZSB3aGVyZSBsIGlzID4gTWF0aC5wb3coMiwgMjkpXG4gIHRoaXMuX2Jsb2NrLndyaXRlSW50MzJCRShsLCB0aGlzLl9ibG9ja1NpemUgLSA0KVxuXG4gIHZhciBoYXNoID0gdGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSB8fCB0aGlzLl9oYXNoKClcblxuICByZXR1cm4gZW5jID8gaGFzaC50b1N0cmluZyhlbmMpIDogaGFzaFxufVxuXG5IYXNoLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ191cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaFxuIiwidmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFNIQSAoYWxnb3JpdGhtKSB7XG4gIGFsZ29yaXRobSA9IGFsZ29yaXRobS50b0xvd2VyQ2FzZSgpXG5cbiAgdmFyIEFsZ29yaXRobSA9IGV4cG9ydHNbYWxnb3JpdGhtXVxuICBpZiAoIUFsZ29yaXRobSkgdGhyb3cgbmV3IEVycm9yKGFsZ29yaXRobSArICcgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpJylcblxuICByZXR1cm4gbmV3IEFsZ29yaXRobSgpXG59XG5cbmV4cG9ydHMuc2hhID0gcmVxdWlyZSgnLi9zaGEnKVxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGExJylcbmV4cG9ydHMuc2hhMjI0ID0gcmVxdWlyZSgnLi9zaGEyMjQnKVxuZXhwb3J0cy5zaGEyNTYgPSByZXF1aXJlKCcuL3NoYTI1NicpXG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhMzg0JylcbmV4cG9ydHMuc2hhNTEyID0gcmVxdWlyZSgnLi9zaGE1MTInKVxuIiwiLypcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2VjdXJlIEhhc2ggQWxnb3JpdGhtLCBTSEEtMCwgYXMgZGVmaW5lZFxuICogaW4gRklQUyBQVUIgMTgwLTFcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNoYTEuanMgb2YgdGhlIHNhbWUgcmVwb3NpdG9yeS5cbiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gU0hBLTAgYW5kIFNIQS0xIGlzIGp1c3QgYSBiaXR3aXNlIHJvdGF0ZSBsZWZ0XG4gKiBvcGVyYXRpb24gd2FzIGFkZGVkLlxuICovXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9oYXNoJylcblxudmFyIEsgPSBbXG4gIDB4NWE4Mjc5OTksIDB4NmVkOWViYTEsIDB4OGYxYmJjZGMgfCAwLCAweGNhNjJjMWQ2IHwgMFxuXVxuXG52YXIgVyA9IG5ldyBBcnJheSg4MClcblxuZnVuY3Rpb24gU2hhICgpIHtcbiAgdGhpcy5pbml0KClcbiAgdGhpcy5fdyA9IFdcblxuICBIYXNoLmNhbGwodGhpcywgNjQsIDU2KVxufVxuXG5pbmhlcml0cyhTaGEsIEhhc2gpXG5cblNoYS5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fYSA9IDB4Njc0NTIzMDFcbiAgdGhpcy5fYiA9IDB4ZWZjZGFiODlcbiAgdGhpcy5fYyA9IDB4OThiYWRjZmVcbiAgdGhpcy5fZCA9IDB4MTAzMjU0NzZcbiAgdGhpcy5fZSA9IDB4YzNkMmUxZjBcblxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiByb3RsNSAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDUpIHwgKG51bSA+Pj4gMjcpXG59XG5cbmZ1bmN0aW9uIHJvdGwzMCAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDMwKSB8IChudW0gPj4+IDIpXG59XG5cbmZ1bmN0aW9uIGZ0IChzLCBiLCBjLCBkKSB7XG4gIGlmIChzID09PSAwKSByZXR1cm4gKGIgJiBjKSB8ICgofmIpICYgZClcbiAgaWYgKHMgPT09IDIpIHJldHVybiAoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZClcbiAgcmV0dXJuIGIgXiBjIF4gZFxufVxuXG5TaGEucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoTSkge1xuICB2YXIgVyA9IHRoaXMuX3dcblxuICB2YXIgYSA9IHRoaXMuX2EgfCAwXG4gIHZhciBiID0gdGhpcy5fYiB8IDBcbiAgdmFyIGMgPSB0aGlzLl9jIHwgMFxuICB2YXIgZCA9IHRoaXMuX2QgfCAwXG4gIHZhciBlID0gdGhpcy5fZSB8IDBcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIFdbaV0gPSBNLnJlYWRJbnQzMkJFKGkgKiA0KVxuICBmb3IgKDsgaSA8IDgwOyArK2kpIFdbaV0gPSBXW2kgLSAzXSBeIFdbaSAtIDhdIF4gV1tpIC0gMTRdIF4gV1tpIC0gMTZdXG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCA4MDsgKytqKSB7XG4gICAgdmFyIHMgPSB+fihqIC8gMjApXG4gICAgdmFyIHQgPSAocm90bDUoYSkgKyBmdChzLCBiLCBjLCBkKSArIGUgKyBXW2pdICsgS1tzXSkgfCAwXG5cbiAgICBlID0gZFxuICAgIGQgPSBjXG4gICAgYyA9IHJvdGwzMChiKVxuICAgIGIgPSBhXG4gICAgYSA9IHRcbiAgfVxuXG4gIHRoaXMuX2EgPSAoYSArIHRoaXMuX2EpIHwgMFxuICB0aGlzLl9iID0gKGIgKyB0aGlzLl9iKSB8IDBcbiAgdGhpcy5fYyA9IChjICsgdGhpcy5fYykgfCAwXG4gIHRoaXMuX2QgPSAoZCArIHRoaXMuX2QpIHwgMFxuICB0aGlzLl9lID0gKGUgKyB0aGlzLl9lKSB8IDBcbn1cblxuU2hhLnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDIwKVxuXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EgfCAwLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iIHwgMCwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYyB8IDAsIDgpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2QgfCAwLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSB8IDAsIDE2KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhXG4iLCIvKlxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0xLCBhcyBkZWZpbmVkXG4gKiBpbiBGSVBTIFBVQiAxODAtMVxuICogVmVyc2lvbiAyLjFhIENvcHlyaWdodCBQYXVsIEpvaG5zdG9uIDIwMDAgLSAyMDAyLlxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgZGV0YWlscy5cbiAqL1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBLID0gW1xuICAweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjIHwgMCwgMHhjYTYyYzFkNiB8IDBcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoODApXG5cbmZ1bmN0aW9uIFNoYTEgKCkge1xuICB0aGlzLmluaXQoKVxuICB0aGlzLl93ID0gV1xuXG4gIEhhc2guY2FsbCh0aGlzLCA2NCwgNTYpXG59XG5cbmluaGVyaXRzKFNoYTEsIEhhc2gpXG5cblNoYTEucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2EgPSAweDY3NDUyMzAxXG4gIHRoaXMuX2IgPSAweGVmY2RhYjg5XG4gIHRoaXMuX2MgPSAweDk4YmFkY2ZlXG4gIHRoaXMuX2QgPSAweDEwMzI1NDc2XG4gIHRoaXMuX2UgPSAweGMzZDJlMWYwXG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gcm90bDEgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAxKSB8IChudW0gPj4+IDMxKVxufVxuXG5mdW5jdGlvbiByb3RsNSAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDUpIHwgKG51bSA+Pj4gMjcpXG59XG5cbmZ1bmN0aW9uIHJvdGwzMCAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDMwKSB8IChudW0gPj4+IDIpXG59XG5cbmZ1bmN0aW9uIGZ0IChzLCBiLCBjLCBkKSB7XG4gIGlmIChzID09PSAwKSByZXR1cm4gKGIgJiBjKSB8ICgofmIpICYgZClcbiAgaWYgKHMgPT09IDIpIHJldHVybiAoYiAmIGMpIHwgKGIgJiBkKSB8IChjICYgZClcbiAgcmV0dXJuIGIgXiBjIF4gZFxufVxuXG5TaGExLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGEgPSB0aGlzLl9hIHwgMFxuICB2YXIgYiA9IHRoaXMuX2IgfCAwXG4gIHZhciBjID0gdGhpcy5fYyB8IDBcbiAgdmFyIGQgPSB0aGlzLl9kIHwgMFxuICB2YXIgZSA9IHRoaXMuX2UgfCAwXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgZm9yICg7IGkgPCA4MDsgKytpKSBXW2ldID0gcm90bDEoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSlcblxuICBmb3IgKHZhciBqID0gMDsgaiA8IDgwOyArK2opIHtcbiAgICB2YXIgcyA9IH5+KGogLyAyMClcbiAgICB2YXIgdCA9IChyb3RsNShhKSArIGZ0KHMsIGIsIGMsIGQpICsgZSArIFdbal0gKyBLW3NdKSB8IDBcblxuICAgIGUgPSBkXG4gICAgZCA9IGNcbiAgICBjID0gcm90bDMwKGIpXG4gICAgYiA9IGFcbiAgICBhID0gdFxuICB9XG5cbiAgdGhpcy5fYSA9IChhICsgdGhpcy5fYSkgfCAwXG4gIHRoaXMuX2IgPSAoYiArIHRoaXMuX2IpIHwgMFxuICB0aGlzLl9jID0gKGMgKyB0aGlzLl9jKSB8IDBcbiAgdGhpcy5fZCA9IChkICsgdGhpcy5fZCkgfCAwXG4gIHRoaXMuX2UgPSAoZSArIHRoaXMuX2UpIHwgMFxufVxuXG5TaGExLnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDIwKVxuXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2EgfCAwLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iIHwgMCwgNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5fYyB8IDAsIDgpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2QgfCAwLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSB8IDAsIDE2KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhMVxuIiwiLyoqXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY3VyZSBIYXNoIEFsZ29yaXRobSwgU0hBLTI1NiwgYXMgZGVmaW5lZFxuICogaW4gRklQUyAxODAtMlxuICogVmVyc2lvbiAyLjItYmV0YSBDb3B5cmlnaHQgQW5nZWwgTWFyaW4sIFBhdWwgSm9obnN0b24gMjAwMCAtIDIwMDkuXG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKlxuICovXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBTaGEyNTYgPSByZXF1aXJlKCcuL3NoYTI1NicpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBXID0gbmV3IEFycmF5KDY0KVxuXG5mdW5jdGlvbiBTaGEyMjQgKCkge1xuICB0aGlzLmluaXQoKVxuXG4gIHRoaXMuX3cgPSBXIC8vIG5ldyBBcnJheSg2NClcblxuICBIYXNoLmNhbGwodGhpcywgNjQsIDU2KVxufVxuXG5pbmhlcml0cyhTaGEyMjQsIFNoYTI1NilcblxuU2hhMjI0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHhjMTA1OWVkOFxuICB0aGlzLl9iID0gMHgzNjdjZDUwN1xuICB0aGlzLl9jID0gMHgzMDcwZGQxN1xuICB0aGlzLl9kID0gMHhmNzBlNTkzOVxuICB0aGlzLl9lID0gMHhmZmMwMGIzMVxuICB0aGlzLl9mID0gMHg2ODU4MTUxMVxuICB0aGlzLl9nID0gMHg2NGY5OGZhN1xuICB0aGlzLl9oID0gMHhiZWZhNGZhNFxuXG4gIHJldHVybiB0aGlzXG59XG5cblNoYTIyNC5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcigyOClcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iLCA0KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9jLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSwgMTYpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2YsIDIwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9nLCAyNClcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTIyNFxuIiwiLyoqXG4gKiBBIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNlY3VyZSBIYXNoIEFsZ29yaXRobSwgU0hBLTI1NiwgYXMgZGVmaW5lZFxuICogaW4gRklQUyAxODAtMlxuICogVmVyc2lvbiAyLjItYmV0YSBDb3B5cmlnaHQgQW5nZWwgTWFyaW4sIFBhdWwgSm9obnN0b24gMjAwMCAtIDIwMDkuXG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XG4gKlxuICovXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9oYXNoJylcblxudmFyIEsgPSBbXG4gIDB4NDI4QTJGOTgsIDB4NzEzNzQ0OTEsIDB4QjVDMEZCQ0YsIDB4RTlCNURCQTUsXG4gIDB4Mzk1NkMyNUIsIDB4NTlGMTExRjEsIDB4OTIzRjgyQTQsIDB4QUIxQzVFRDUsXG4gIDB4RDgwN0FBOTgsIDB4MTI4MzVCMDEsIDB4MjQzMTg1QkUsIDB4NTUwQzdEQzMsXG4gIDB4NzJCRTVENzQsIDB4ODBERUIxRkUsIDB4OUJEQzA2QTcsIDB4QzE5QkYxNzQsXG4gIDB4RTQ5QjY5QzEsIDB4RUZCRTQ3ODYsIDB4MEZDMTlEQzYsIDB4MjQwQ0ExQ0MsXG4gIDB4MkRFOTJDNkYsIDB4NEE3NDg0QUEsIDB4NUNCMEE5REMsIDB4NzZGOTg4REEsXG4gIDB4OTgzRTUxNTIsIDB4QTgzMUM2NkQsIDB4QjAwMzI3QzgsIDB4QkY1OTdGQzcsXG4gIDB4QzZFMDBCRjMsIDB4RDVBNzkxNDcsIDB4MDZDQTYzNTEsIDB4MTQyOTI5NjcsXG4gIDB4MjdCNzBBODUsIDB4MkUxQjIxMzgsIDB4NEQyQzZERkMsIDB4NTMzODBEMTMsXG4gIDB4NjUwQTczNTQsIDB4NzY2QTBBQkIsIDB4ODFDMkM5MkUsIDB4OTI3MjJDODUsXG4gIDB4QTJCRkU4QTEsIDB4QTgxQTY2NEIsIDB4QzI0QjhCNzAsIDB4Qzc2QzUxQTMsXG4gIDB4RDE5MkU4MTksIDB4RDY5OTA2MjQsIDB4RjQwRTM1ODUsIDB4MTA2QUEwNzAsXG4gIDB4MTlBNEMxMTYsIDB4MUUzNzZDMDgsIDB4Mjc0ODc3NEMsIDB4MzRCMEJDQjUsXG4gIDB4MzkxQzBDQjMsIDB4NEVEOEFBNEEsIDB4NUI5Q0NBNEYsIDB4NjgyRTZGRjMsXG4gIDB4NzQ4RjgyRUUsIDB4NzhBNTYzNkYsIDB4ODRDODc4MTQsIDB4OENDNzAyMDgsXG4gIDB4OTBCRUZGRkEsIDB4QTQ1MDZDRUIsIDB4QkVGOUEzRjcsIDB4QzY3MTc4RjJcbl1cblxudmFyIFcgPSBuZXcgQXJyYXkoNjQpXG5cbmZ1bmN0aW9uIFNoYTI1NiAoKSB7XG4gIHRoaXMuaW5pdCgpXG5cbiAgdGhpcy5fdyA9IFcgLy8gbmV3IEFycmF5KDY0KVxuXG4gIEhhc2guY2FsbCh0aGlzLCA2NCwgNTYpXG59XG5cbmluaGVyaXRzKFNoYTI1NiwgSGFzaClcblxuU2hhMjU2LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9hID0gMHg2YTA5ZTY2N1xuICB0aGlzLl9iID0gMHhiYjY3YWU4NVxuICB0aGlzLl9jID0gMHgzYzZlZjM3MlxuICB0aGlzLl9kID0gMHhhNTRmZjUzYVxuICB0aGlzLl9lID0gMHg1MTBlNTI3ZlxuICB0aGlzLl9mID0gMHg5YjA1Njg4Y1xuICB0aGlzLl9nID0gMHgxZjgzZDlhYlxuICB0aGlzLl9oID0gMHg1YmUwY2QxOVxuXG4gIHJldHVybiB0aGlzXG59XG5cbmZ1bmN0aW9uIGNoICh4LCB5LCB6KSB7XG4gIHJldHVybiB6IF4gKHggJiAoeSBeIHopKVxufVxuXG5mdW5jdGlvbiBtYWogKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgfCAoeiAmICh4IHwgeSkpXG59XG5cbmZ1bmN0aW9uIHNpZ21hMCAoeCkge1xuICByZXR1cm4gKHggPj4+IDIgfCB4IDw8IDMwKSBeICh4ID4+PiAxMyB8IHggPDwgMTkpIF4gKHggPj4+IDIyIHwgeCA8PCAxMClcbn1cblxuZnVuY3Rpb24gc2lnbWExICh4KSB7XG4gIHJldHVybiAoeCA+Pj4gNiB8IHggPDwgMjYpIF4gKHggPj4+IDExIHwgeCA8PCAyMSkgXiAoeCA+Pj4gMjUgfCB4IDw8IDcpXG59XG5cbmZ1bmN0aW9uIGdhbW1hMCAoeCkge1xuICByZXR1cm4gKHggPj4+IDcgfCB4IDw8IDI1KSBeICh4ID4+PiAxOCB8IHggPDwgMTQpIF4gKHggPj4+IDMpXG59XG5cbmZ1bmN0aW9uIGdhbW1hMSAoeCkge1xuICByZXR1cm4gKHggPj4+IDE3IHwgeCA8PCAxNSkgXiAoeCA+Pj4gMTkgfCB4IDw8IDEzKSBeICh4ID4+PiAxMClcbn1cblxuU2hhMjU2LnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKE0pIHtcbiAgdmFyIFcgPSB0aGlzLl93XG5cbiAgdmFyIGEgPSB0aGlzLl9hIHwgMFxuICB2YXIgYiA9IHRoaXMuX2IgfCAwXG4gIHZhciBjID0gdGhpcy5fYyB8IDBcbiAgdmFyIGQgPSB0aGlzLl9kIHwgMFxuICB2YXIgZSA9IHRoaXMuX2UgfCAwXG4gIHZhciBmID0gdGhpcy5fZiB8IDBcbiAgdmFyIGcgPSB0aGlzLl9nIHwgMFxuICB2YXIgaCA9IHRoaXMuX2ggfCAwXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSBXW2ldID0gTS5yZWFkSW50MzJCRShpICogNClcbiAgZm9yICg7IGkgPCA2NDsgKytpKSBXW2ldID0gKGdhbW1hMShXW2kgLSAyXSkgKyBXW2kgLSA3XSArIGdhbW1hMChXW2kgLSAxNV0pICsgV1tpIC0gMTZdKSB8IDBcblxuICBmb3IgKHZhciBqID0gMDsgaiA8IDY0OyArK2opIHtcbiAgICB2YXIgVDEgPSAoaCArIHNpZ21hMShlKSArIGNoKGUsIGYsIGcpICsgS1tqXSArIFdbal0pIHwgMFxuICAgIHZhciBUMiA9IChzaWdtYTAoYSkgKyBtYWooYSwgYiwgYykpIHwgMFxuXG4gICAgaCA9IGdcbiAgICBnID0gZlxuICAgIGYgPSBlXG4gICAgZSA9IChkICsgVDEpIHwgMFxuICAgIGQgPSBjXG4gICAgYyA9IGJcbiAgICBiID0gYVxuICAgIGEgPSAoVDEgKyBUMikgfCAwXG4gIH1cblxuICB0aGlzLl9hID0gKGEgKyB0aGlzLl9hKSB8IDBcbiAgdGhpcy5fYiA9IChiICsgdGhpcy5fYikgfCAwXG4gIHRoaXMuX2MgPSAoYyArIHRoaXMuX2MpIHwgMFxuICB0aGlzLl9kID0gKGQgKyB0aGlzLl9kKSB8IDBcbiAgdGhpcy5fZSA9IChlICsgdGhpcy5fZSkgfCAwXG4gIHRoaXMuX2YgPSAoZiArIHRoaXMuX2YpIHwgMFxuICB0aGlzLl9nID0gKGcgKyB0aGlzLl9nKSB8IDBcbiAgdGhpcy5faCA9IChoICsgdGhpcy5faCkgfCAwXG59XG5cblNoYTI1Ni5wcm90b3R5cGUuX2hhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBIID0gbmV3IEJ1ZmZlcigzMilcblxuICBILndyaXRlSW50MzJCRSh0aGlzLl9hLCAwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9iLCA0KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9jLCA4KVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9kLCAxMilcbiAgSC53cml0ZUludDMyQkUodGhpcy5fZSwgMTYpXG4gIEgud3JpdGVJbnQzMkJFKHRoaXMuX2YsIDIwKVxuICBILndyaXRlSW50MzJCRSh0aGlzLl9nLCAyNClcbiAgSC53cml0ZUludDMyQkUodGhpcy5faCwgMjgpXG5cbiAgcmV0dXJuIEhcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTaGEyNTZcbiIsInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBTSEE1MTIgPSByZXF1aXJlKCcuL3NoYTUxMicpXG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vaGFzaCcpXG5cbnZhciBXID0gbmV3IEFycmF5KDE2MClcblxuZnVuY3Rpb24gU2hhMzg0ICgpIHtcbiAgdGhpcy5pbml0KClcbiAgdGhpcy5fdyA9IFdcblxuICBIYXNoLmNhbGwodGhpcywgMTI4LCAxMTIpXG59XG5cbmluaGVyaXRzKFNoYTM4NCwgU0hBNTEyKVxuXG5TaGEzODQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2FoID0gMHhjYmJiOWQ1ZFxuICB0aGlzLl9iaCA9IDB4NjI5YTI5MmFcbiAgdGhpcy5fY2ggPSAweDkxNTkwMTVhXG4gIHRoaXMuX2RoID0gMHgxNTJmZWNkOFxuICB0aGlzLl9laCA9IDB4NjczMzI2NjdcbiAgdGhpcy5fZmggPSAweDhlYjQ0YTg3XG4gIHRoaXMuX2doID0gMHhkYjBjMmUwZFxuICB0aGlzLl9oaCA9IDB4NDdiNTQ4MWRcblxuICB0aGlzLl9hbCA9IDB4YzEwNTllZDhcbiAgdGhpcy5fYmwgPSAweDM2N2NkNTA3XG4gIHRoaXMuX2NsID0gMHgzMDcwZGQxN1xuICB0aGlzLl9kbCA9IDB4ZjcwZTU5MzlcbiAgdGhpcy5fZWwgPSAweGZmYzAwYjMxXG4gIHRoaXMuX2ZsID0gMHg2ODU4MTUxMVxuICB0aGlzLl9nbCA9IDB4NjRmOThmYTdcbiAgdGhpcy5faGwgPSAweGJlZmE0ZmE0XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuU2hhMzg0LnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDQ4KVxuXG4gIGZ1bmN0aW9uIHdyaXRlSW50NjRCRSAoaCwgbCwgb2Zmc2V0KSB7XG4gICAgSC53cml0ZUludDMyQkUoaCwgb2Zmc2V0KVxuICAgIEgud3JpdGVJbnQzMkJFKGwsIG9mZnNldCArIDQpXG4gIH1cblxuICB3cml0ZUludDY0QkUodGhpcy5fYWgsIHRoaXMuX2FsLCAwKVxuICB3cml0ZUludDY0QkUodGhpcy5fYmgsIHRoaXMuX2JsLCA4KVxuICB3cml0ZUludDY0QkUodGhpcy5fY2gsIHRoaXMuX2NsLCAxNilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2RoLCB0aGlzLl9kbCwgMjQpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9laCwgdGhpcy5fZWwsIDMyKVxuICB3cml0ZUludDY0QkUodGhpcy5fZmgsIHRoaXMuX2ZsLCA0MClcblxuICByZXR1cm4gSFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNoYTM4NFxuIiwidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIEhhc2ggPSByZXF1aXJlKCcuL2hhc2gnKVxuXG52YXIgSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXVxuXG52YXIgVyA9IG5ldyBBcnJheSgxNjApXG5cbmZ1bmN0aW9uIFNoYTUxMiAoKSB7XG4gIHRoaXMuaW5pdCgpXG4gIHRoaXMuX3cgPSBXXG5cbiAgSGFzaC5jYWxsKHRoaXMsIDEyOCwgMTEyKVxufVxuXG5pbmhlcml0cyhTaGE1MTIsIEhhc2gpXG5cblNoYTUxMi5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fYWggPSAweDZhMDllNjY3XG4gIHRoaXMuX2JoID0gMHhiYjY3YWU4NVxuICB0aGlzLl9jaCA9IDB4M2M2ZWYzNzJcbiAgdGhpcy5fZGggPSAweGE1NGZmNTNhXG4gIHRoaXMuX2VoID0gMHg1MTBlNTI3ZlxuICB0aGlzLl9maCA9IDB4OWIwNTY4OGNcbiAgdGhpcy5fZ2ggPSAweDFmODNkOWFiXG4gIHRoaXMuX2hoID0gMHg1YmUwY2QxOVxuXG4gIHRoaXMuX2FsID0gMHhmM2JjYzkwOFxuICB0aGlzLl9ibCA9IDB4ODRjYWE3M2JcbiAgdGhpcy5fY2wgPSAweGZlOTRmODJiXG4gIHRoaXMuX2RsID0gMHg1ZjFkMzZmMVxuICB0aGlzLl9lbCA9IDB4YWRlNjgyZDFcbiAgdGhpcy5fZmwgPSAweDJiM2U2YzFmXG4gIHRoaXMuX2dsID0gMHhmYjQxYmQ2YlxuICB0aGlzLl9obCA9IDB4MTM3ZTIxNzlcblxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiBDaCAoeCwgeSwgeikge1xuICByZXR1cm4geiBeICh4ICYgKHkgXiB6KSlcbn1cblxuZnVuY3Rpb24gbWFqICh4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIHwgKHogJiAoeCB8IHkpKVxufVxuXG5mdW5jdGlvbiBzaWdtYTAgKHgsIHhsKSB7XG4gIHJldHVybiAoeCA+Pj4gMjggfCB4bCA8PCA0KSBeICh4bCA+Pj4gMiB8IHggPDwgMzApIF4gKHhsID4+PiA3IHwgeCA8PCAyNSlcbn1cblxuZnVuY3Rpb24gc2lnbWExICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDE0IHwgeGwgPDwgMTgpIF4gKHggPj4+IDE4IHwgeGwgPDwgMTQpIF4gKHhsID4+PiA5IHwgeCA8PCAyMylcbn1cblxuZnVuY3Rpb24gR2FtbWEwICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDEgfCB4bCA8PCAzMSkgXiAoeCA+Pj4gOCB8IHhsIDw8IDI0KSBeICh4ID4+PiA3KVxufVxuXG5mdW5jdGlvbiBHYW1tYTBsICh4LCB4bCkge1xuICByZXR1cm4gKHggPj4+IDEgfCB4bCA8PCAzMSkgXiAoeCA+Pj4gOCB8IHhsIDw8IDI0KSBeICh4ID4+PiA3IHwgeGwgPDwgMjUpXG59XG5cbmZ1bmN0aW9uIEdhbW1hMSAoeCwgeGwpIHtcbiAgcmV0dXJuICh4ID4+PiAxOSB8IHhsIDw8IDEzKSBeICh4bCA+Pj4gMjkgfCB4IDw8IDMpIF4gKHggPj4+IDYpXG59XG5cbmZ1bmN0aW9uIEdhbW1hMWwgKHgsIHhsKSB7XG4gIHJldHVybiAoeCA+Pj4gMTkgfCB4bCA8PCAxMykgXiAoeGwgPj4+IDI5IHwgeCA8PCAzKSBeICh4ID4+PiA2IHwgeGwgPDwgMjYpXG59XG5cbmZ1bmN0aW9uIGdldENhcnJ5IChhLCBiKSB7XG4gIHJldHVybiAoYSA+Pj4gMCkgPCAoYiA+Pj4gMCkgPyAxIDogMFxufVxuXG5TaGE1MTIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoTSkge1xuICB2YXIgVyA9IHRoaXMuX3dcblxuICB2YXIgYWggPSB0aGlzLl9haCB8IDBcbiAgdmFyIGJoID0gdGhpcy5fYmggfCAwXG4gIHZhciBjaCA9IHRoaXMuX2NoIHwgMFxuICB2YXIgZGggPSB0aGlzLl9kaCB8IDBcbiAgdmFyIGVoID0gdGhpcy5fZWggfCAwXG4gIHZhciBmaCA9IHRoaXMuX2ZoIHwgMFxuICB2YXIgZ2ggPSB0aGlzLl9naCB8IDBcbiAgdmFyIGhoID0gdGhpcy5faGggfCAwXG5cbiAgdmFyIGFsID0gdGhpcy5fYWwgfCAwXG4gIHZhciBibCA9IHRoaXMuX2JsIHwgMFxuICB2YXIgY2wgPSB0aGlzLl9jbCB8IDBcbiAgdmFyIGRsID0gdGhpcy5fZGwgfCAwXG4gIHZhciBlbCA9IHRoaXMuX2VsIHwgMFxuICB2YXIgZmwgPSB0aGlzLl9mbCB8IDBcbiAgdmFyIGdsID0gdGhpcy5fZ2wgfCAwXG4gIHZhciBobCA9IHRoaXMuX2hsIHwgMFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkgKz0gMikge1xuICAgIFdbaV0gPSBNLnJlYWRJbnQzMkJFKGkgKiA0KVxuICAgIFdbaSArIDFdID0gTS5yZWFkSW50MzJCRShpICogNCArIDQpXG4gIH1cbiAgZm9yICg7IGkgPCAxNjA7IGkgKz0gMikge1xuICAgIHZhciB4aCA9IFdbaSAtIDE1ICogMl1cbiAgICB2YXIgeGwgPSBXW2kgLSAxNSAqIDIgKyAxXVxuICAgIHZhciBnYW1tYTAgPSBHYW1tYTAoeGgsIHhsKVxuICAgIHZhciBnYW1tYTBsID0gR2FtbWEwbCh4bCwgeGgpXG5cbiAgICB4aCA9IFdbaSAtIDIgKiAyXVxuICAgIHhsID0gV1tpIC0gMiAqIDIgKyAxXVxuICAgIHZhciBnYW1tYTEgPSBHYW1tYTEoeGgsIHhsKVxuICAgIHZhciBnYW1tYTFsID0gR2FtbWExbCh4bCwgeGgpXG5cbiAgICAvLyBXW2ldID0gZ2FtbWEwICsgV1tpIC0gN10gKyBnYW1tYTEgKyBXW2kgLSAxNl1cbiAgICB2YXIgV2k3aCA9IFdbaSAtIDcgKiAyXVxuICAgIHZhciBXaTdsID0gV1tpIC0gNyAqIDIgKyAxXVxuXG4gICAgdmFyIFdpMTZoID0gV1tpIC0gMTYgKiAyXVxuICAgIHZhciBXaTE2bCA9IFdbaSAtIDE2ICogMiArIDFdXG5cbiAgICB2YXIgV2lsID0gKGdhbW1hMGwgKyBXaTdsKSB8IDBcbiAgICB2YXIgV2loID0gKGdhbW1hMCArIFdpN2ggKyBnZXRDYXJyeShXaWwsIGdhbW1hMGwpKSB8IDBcbiAgICBXaWwgPSAoV2lsICsgZ2FtbWExbCkgfCAwXG4gICAgV2loID0gKFdpaCArIGdhbW1hMSArIGdldENhcnJ5KFdpbCwgZ2FtbWExbCkpIHwgMFxuICAgIFdpbCA9IChXaWwgKyBXaTE2bCkgfCAwXG4gICAgV2loID0gKFdpaCArIFdpMTZoICsgZ2V0Q2FycnkoV2lsLCBXaTE2bCkpIHwgMFxuXG4gICAgV1tpXSA9IFdpaFxuICAgIFdbaSArIDFdID0gV2lsXG4gIH1cblxuICBmb3IgKHZhciBqID0gMDsgaiA8IDE2MDsgaiArPSAyKSB7XG4gICAgV2loID0gV1tqXVxuICAgIFdpbCA9IFdbaiArIDFdXG5cbiAgICB2YXIgbWFqaCA9IG1haihhaCwgYmgsIGNoKVxuICAgIHZhciBtYWpsID0gbWFqKGFsLCBibCwgY2wpXG5cbiAgICB2YXIgc2lnbWEwaCA9IHNpZ21hMChhaCwgYWwpXG4gICAgdmFyIHNpZ21hMGwgPSBzaWdtYTAoYWwsIGFoKVxuICAgIHZhciBzaWdtYTFoID0gc2lnbWExKGVoLCBlbClcbiAgICB2YXIgc2lnbWExbCA9IHNpZ21hMShlbCwgZWgpXG5cbiAgICAvLyB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbal0gKyBXW2pdXG4gICAgdmFyIEtpaCA9IEtbal1cbiAgICB2YXIgS2lsID0gS1tqICsgMV1cblxuICAgIHZhciBjaGggPSBDaChlaCwgZmgsIGdoKVxuICAgIHZhciBjaGwgPSBDaChlbCwgZmwsIGdsKVxuXG4gICAgdmFyIHQxbCA9IChobCArIHNpZ21hMWwpIHwgMFxuICAgIHZhciB0MWggPSAoaGggKyBzaWdtYTFoICsgZ2V0Q2FycnkodDFsLCBobCkpIHwgMFxuICAgIHQxbCA9ICh0MWwgKyBjaGwpIHwgMFxuICAgIHQxaCA9ICh0MWggKyBjaGggKyBnZXRDYXJyeSh0MWwsIGNobCkpIHwgMFxuICAgIHQxbCA9ICh0MWwgKyBLaWwpIHwgMFxuICAgIHQxaCA9ICh0MWggKyBLaWggKyBnZXRDYXJyeSh0MWwsIEtpbCkpIHwgMFxuICAgIHQxbCA9ICh0MWwgKyBXaWwpIHwgMFxuICAgIHQxaCA9ICh0MWggKyBXaWggKyBnZXRDYXJyeSh0MWwsIFdpbCkpIHwgMFxuXG4gICAgLy8gdDIgPSBzaWdtYTAgKyBtYWpcbiAgICB2YXIgdDJsID0gKHNpZ21hMGwgKyBtYWpsKSB8IDBcbiAgICB2YXIgdDJoID0gKHNpZ21hMGggKyBtYWpoICsgZ2V0Q2FycnkodDJsLCBzaWdtYTBsKSkgfCAwXG5cbiAgICBoaCA9IGdoXG4gICAgaGwgPSBnbFxuICAgIGdoID0gZmhcbiAgICBnbCA9IGZsXG4gICAgZmggPSBlaFxuICAgIGZsID0gZWxcbiAgICBlbCA9IChkbCArIHQxbCkgfCAwXG4gICAgZWggPSAoZGggKyB0MWggKyBnZXRDYXJyeShlbCwgZGwpKSB8IDBcbiAgICBkaCA9IGNoXG4gICAgZGwgPSBjbFxuICAgIGNoID0gYmhcbiAgICBjbCA9IGJsXG4gICAgYmggPSBhaFxuICAgIGJsID0gYWxcbiAgICBhbCA9ICh0MWwgKyB0MmwpIHwgMFxuICAgIGFoID0gKHQxaCArIHQyaCArIGdldENhcnJ5KGFsLCB0MWwpKSB8IDBcbiAgfVxuXG4gIHRoaXMuX2FsID0gKHRoaXMuX2FsICsgYWwpIHwgMFxuICB0aGlzLl9ibCA9ICh0aGlzLl9ibCArIGJsKSB8IDBcbiAgdGhpcy5fY2wgPSAodGhpcy5fY2wgKyBjbCkgfCAwXG4gIHRoaXMuX2RsID0gKHRoaXMuX2RsICsgZGwpIHwgMFxuICB0aGlzLl9lbCA9ICh0aGlzLl9lbCArIGVsKSB8IDBcbiAgdGhpcy5fZmwgPSAodGhpcy5fZmwgKyBmbCkgfCAwXG4gIHRoaXMuX2dsID0gKHRoaXMuX2dsICsgZ2wpIHwgMFxuICB0aGlzLl9obCA9ICh0aGlzLl9obCArIGhsKSB8IDBcblxuICB0aGlzLl9haCA9ICh0aGlzLl9haCArIGFoICsgZ2V0Q2FycnkodGhpcy5fYWwsIGFsKSkgfCAwXG4gIHRoaXMuX2JoID0gKHRoaXMuX2JoICsgYmggKyBnZXRDYXJyeSh0aGlzLl9ibCwgYmwpKSB8IDBcbiAgdGhpcy5fY2ggPSAodGhpcy5fY2ggKyBjaCArIGdldENhcnJ5KHRoaXMuX2NsLCBjbCkpIHwgMFxuICB0aGlzLl9kaCA9ICh0aGlzLl9kaCArIGRoICsgZ2V0Q2FycnkodGhpcy5fZGwsIGRsKSkgfCAwXG4gIHRoaXMuX2VoID0gKHRoaXMuX2VoICsgZWggKyBnZXRDYXJyeSh0aGlzLl9lbCwgZWwpKSB8IDBcbiAgdGhpcy5fZmggPSAodGhpcy5fZmggKyBmaCArIGdldENhcnJ5KHRoaXMuX2ZsLCBmbCkpIHwgMFxuICB0aGlzLl9naCA9ICh0aGlzLl9naCArIGdoICsgZ2V0Q2FycnkodGhpcy5fZ2wsIGdsKSkgfCAwXG4gIHRoaXMuX2hoID0gKHRoaXMuX2hoICsgaGggKyBnZXRDYXJyeSh0aGlzLl9obCwgaGwpKSB8IDBcbn1cblxuU2hhNTEyLnByb3RvdHlwZS5faGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIEggPSBuZXcgQnVmZmVyKDY0KVxuXG4gIGZ1bmN0aW9uIHdyaXRlSW50NjRCRSAoaCwgbCwgb2Zmc2V0KSB7XG4gICAgSC53cml0ZUludDMyQkUoaCwgb2Zmc2V0KVxuICAgIEgud3JpdGVJbnQzMkJFKGwsIG9mZnNldCArIDQpXG4gIH1cblxuICB3cml0ZUludDY0QkUodGhpcy5fYWgsIHRoaXMuX2FsLCAwKVxuICB3cml0ZUludDY0QkUodGhpcy5fYmgsIHRoaXMuX2JsLCA4KVxuICB3cml0ZUludDY0QkUodGhpcy5fY2gsIHRoaXMuX2NsLCAxNilcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2RoLCB0aGlzLl9kbCwgMjQpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9laCwgdGhpcy5fZWwsIDMyKVxuICB3cml0ZUludDY0QkUodGhpcy5fZmgsIHRoaXMuX2ZsLCA0MClcbiAgd3JpdGVJbnQ2NEJFKHRoaXMuX2doLCB0aGlzLl9nbCwgNDgpXG4gIHdyaXRlSW50NjRCRSh0aGlzLl9oaCwgdGhpcy5faGwsIDU2KVxuXG4gIHJldHVybiBIXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2hhNTEyXG4iLCIvLyBDb3B5cmlnaHQgMjAxNSBKb3llbnQsIEluYy5cblxudmFyIGFsZ0luZm8gPSB7XG5cdCdkc2EnOiB7XG5cdFx0cGFydHM6IFsncCcsICdxJywgJ2cnLCAneSddLFxuXHRcdHNpemVQYXJ0OiAncCdcblx0fSxcblx0J3JzYSc6IHtcblx0XHRwYXJ0czogWydlJywgJ24nXSxcblx0XHRzaXplUGFydDogJ24nXG5cdH0sXG5cdCdlY2RzYSc6IHtcblx0XHRwYXJ0czogWydjdXJ2ZScsICdRJ10sXG5cdFx0c2l6ZVBhcnQ6ICdRJ1xuXHR9LFxuXHQnZWQyNTUxOSc6IHtcblx0XHRwYXJ0czogWydSJ10sXG5cdFx0bm9ybWFsaXplOiBmYWxzZSxcblx0XHRzaXplUGFydDogJ1InXG5cdH1cbn07XG5hbGdJbmZvWydjdXJ2ZTI1NTE5J10gPSBhbGdJbmZvWydlZDI1NTE5J107XG5cbnZhciBhbGdQcml2SW5mbyA9IHtcblx0J2RzYSc6IHtcblx0XHRwYXJ0czogWydwJywgJ3EnLCAnZycsICd5JywgJ3gnXVxuXHR9LFxuXHQncnNhJzoge1xuXHRcdHBhcnRzOiBbJ24nLCAnZScsICdkJywgJ2lxbXAnLCAncCcsICdxJ11cblx0fSxcblx0J2VjZHNhJzoge1xuXHRcdHBhcnRzOiBbJ2N1cnZlJywgJ1EnLCAnZCddXG5cdH0sXG5cdCdlZDI1NTE5Jzoge1xuXHRcdHBhcnRzOiBbJ1InLCAnciddLFxuXHRcdG5vcm1hbGl6ZTogZmFsc2Vcblx0fVxufTtcbmFsZ1ByaXZJbmZvWydjdXJ2ZTI1NTE5J10gPSBhbGdQcml2SW5mb1snZWQyNTUxOSddO1xuXG52YXIgaGFzaEFsZ3MgPSB7XG5cdCdtZDUnOiB0cnVlLFxuXHQnc2hhMSc6IHRydWUsXG5cdCdzaGEyNTYnOiB0cnVlLFxuXHQnc2hhMzg0JzogdHJ1ZSxcblx0J3NoYTUxMic6IHRydWVcbn07XG5cbi8qXG4gKiBUYWtlbiBmcm9tXG4gKiBodHRwOi8vY3NyYy5uaXN0Lmdvdi9ncm91cHMvU1QvdG9vbGtpdC9kb2N1bWVudHMvZHNzL05JU1RSZUN1ci5wZGZcbiAqL1xudmFyIGN1cnZlcyA9IHtcblx0J25pc3RwMjU2Jzoge1xuXHRcdHNpemU6IDI1Nixcblx0XHRwa2NzOG9pZDogJzEuMi44NDAuMTAwNDUuMy4xLjcnLFxuXHRcdHA6IG5ldyBCdWZmZXIoKCcwMCcgK1xuXHRcdCAgICAnZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAnICtcblx0XHQgICAgJzAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0YTogbmV3IEJ1ZmZlcigoJzAwJyArXG5cdFx0ICAgICdGRkZGRkZGRiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCcgK1xuXHRcdCAgICAnMDAwMDAwMDAgRkZGRkZGRkYgRkZGRkZGRkYgRkZGRkZGRkMnKS5cblx0XHQgICAgcmVwbGFjZSgvIC9nLCAnJyksICdoZXgnKSxcblx0XHRiOiBuZXcgQnVmZmVyKChcblx0XHQgICAgJzVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjJyArXG5cdFx0ICAgICc2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YicpLlxuXHRcdCAgICByZXBsYWNlKC8gL2csICcnKSwgJ2hleCcpLFxuXHRcdHM6IG5ldyBCdWZmZXIoKCcwMCcgK1xuXHRcdCAgICAnYzQ5ZDM2MDggODZlNzA0OTMgNmE2Njc4ZTEgMTM5ZDI2YjcnICtcblx0XHQgICAgJzgxOWY3ZTkwJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0bjogbmV3IEJ1ZmZlcigoJzAwJyArXG5cdFx0ICAgICdmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZicgK1xuXHRcdCAgICAnYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEnKS5cblx0XHQgICAgcmVwbGFjZSgvIC9nLCAnJyksICdoZXgnKSxcblx0XHRHOiBuZXcgQnVmZmVyKCgnMDQnICtcblx0XHQgICAgJzZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyJyArXG5cdFx0ICAgICc3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NicgK1xuXHRcdCAgICAnNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYnICtcblx0XHQgICAgJzJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1JykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4Jylcblx0fSxcblx0J25pc3RwMzg0Jzoge1xuXHRcdHNpemU6IDM4NCxcblx0XHRwa2NzOG9pZDogJzEuMy4xMzIuMC4zNCcsXG5cdFx0cDogbmV3IEJ1ZmZlcigoJzAwJyArXG5cdFx0ICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicgK1xuXHRcdCAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUnICtcblx0XHQgICAgJ2ZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0YTogbmV3IEJ1ZmZlcigoJzAwJyArXG5cdFx0ICAgICdGRkZGRkZGRiBGRkZGRkZGRiBGRkZGRkZGRiBGRkZGRkZGRicgK1xuXHRcdCAgICAnRkZGRkZGRkYgRkZGRkZGRkYgRkZGRkZGRkYgRkZGRkZGRkUnICtcblx0XHQgICAgJ0ZGRkZGRkZGIDAwMDAwMDAwIDAwMDAwMDAwIEZGRkZGRkZDJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0YjogbmV3IEJ1ZmZlcigoXG5cdFx0ICAgICdiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOScgK1xuXHRcdCAgICAnMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEnICtcblx0XHQgICAgJ2M2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0czogbmV3IEJ1ZmZlcigoJzAwJyArXG5cdFx0ICAgICdhMzM1OTI2YSBhMzE5YTI3YSAxZDAwODk2YSA2NzczYTQ4MicgK1xuXHRcdCAgICAnN2FjZGFjNzMnKS5cblx0XHQgICAgcmVwbGFjZSgvIC9nLCAnJyksICdoZXgnKSxcblx0XHRuOiBuZXcgQnVmZmVyKCgnMDAnICtcblx0XHQgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmJyArXG5cdFx0ICAgICdmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZicgK1xuXHRcdCAgICAnNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMnKS5cblx0XHQgICAgcmVwbGFjZSgvIC9nLCAnJyksICdoZXgnKSxcblx0XHRHOiBuZXcgQnVmZmVyKCgnMDQnICtcblx0XHQgICAgJ2FhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0JyArXG5cdFx0ICAgICc2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCcgK1xuXHRcdCAgICAnNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjcnICtcblx0XHQgICAgJzM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5JyArXG5cdFx0ICAgICdmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCcgK1xuXHRcdCAgICAnMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYnKS5cblx0XHQgICAgcmVwbGFjZSgvIC9nLCAnJyksICdoZXgnKVxuXHR9LFxuXHQnbmlzdHA1MjEnOiB7XG5cdFx0c2l6ZTogNTIxLFxuXHRcdHBrY3M4b2lkOiAnMS4zLjEzMi4wLjM1Jyxcblx0XHRwOiBuZXcgQnVmZmVyKChcblx0XHQgICAgJzAxZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmJyArXG5cdFx0ICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicgK1xuXHRcdCAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYnICtcblx0XHQgICAgJ2ZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmJyArXG5cdFx0ICAgICdmZmZmJykucmVwbGFjZSgvIC9nLCAnJyksICdoZXgnKSxcblx0XHRhOiBuZXcgQnVmZmVyKCgnMDFGRicgK1xuXHRcdCAgICAnRkZGRkZGRkYgRkZGRkZGRkYgRkZGRkZGRkYgRkZGRkZGRkYnICtcblx0XHQgICAgJ0ZGRkZGRkZGIEZGRkZGRkZGIEZGRkZGRkZGIEZGRkZGRkZGJyArXG5cdFx0ICAgICdGRkZGRkZGRiBGRkZGRkZGRiBGRkZGRkZGRiBGRkZGRkZGRicgK1xuXHRcdCAgICAnRkZGRkZGRkYgRkZGRkZGRkYgRkZGRkZGRkYgRkZGRkZGRkMnKS5cblx0XHQgICAgcmVwbGFjZSgvIC9nLCAnJyksICdoZXgnKSxcblx0XHRiOiBuZXcgQnVmZmVyKCgnNTEnICtcblx0XHQgICAgJzk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlJyArXG5cdFx0ICAgICdhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMScgK1xuXHRcdCAgICAnNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcnICtcblx0XHQgICAgJzM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwJykuXG5cdFx0ICAgIHJlcGxhY2UoLyAvZywgJycpLCAnaGV4JyksXG5cdFx0czogbmV3IEJ1ZmZlcigoJzAwJyArXG5cdFx0ICAgICdkMDllODgwMCAyOTFjYjg1MyA5NmNjNjcxNyAzOTMyODRhYScgK1xuXHRcdCAgICAnYTBkYTY0YmEnKS5yZXBsYWNlKC8gL2csICcnKSwgJ2hleCcpLFxuXHRcdG46IG5ldyBCdWZmZXIoKCcwMWZmJyArXG5cdFx0ICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZicgK1xuXHRcdCAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEnICtcblx0XHQgICAgJzUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwJyArXG5cdFx0ICAgICczYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOScpLlxuXHRcdCAgICByZXBsYWNlKC8gL2csICcnKSwgJ2hleCcpLFxuXHRcdEc6IG5ldyBCdWZmZXIoKCcwNCcgK1xuXHRcdCAgICAnMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MicgK1xuXHRcdCAgICAgICAgICc5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYScgK1xuXHRcdCAgICAgICAgICdhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZScgK1xuXHRcdCAgICAgICAgICczMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NicgK1xuXHRcdCAgICAnMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOScgK1xuXHRcdCAgICAgICAgICc5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYycgK1xuXHRcdCAgICAgICAgICc5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MScgK1xuXHRcdCAgICAgICAgICczNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCcpLlxuXHRcdCAgICByZXBsYWNlKC8gL2csICcnKSwgJ2hleCcpXG5cdH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRpbmZvOiBhbGdJbmZvLFxuXHRwcml2SW5mbzogYWxnUHJpdkluZm8sXG5cdGhhc2hBbGdzOiBoYXNoQWxncyxcblx0Y3VydmVzOiBjdXJ2ZXNcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxNiBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSBDZXJ0aWZpY2F0ZTtcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgYWxncyA9IHJlcXVpcmUoJy4vYWxncycpO1xudmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xudmFyIEZpbmdlcnByaW50ID0gcmVxdWlyZSgnLi9maW5nZXJwcmludCcpO1xudmFyIFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vc2lnbmF0dXJlJyk7XG52YXIgZXJycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBLZXkgPSByZXF1aXJlKCcuL2tleScpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuL3ByaXZhdGUta2V5Jyk7XG52YXIgSWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbnZhciBmb3JtYXRzID0ge307XG5mb3JtYXRzWydvcGVuc3NoJ10gPSByZXF1aXJlKCcuL2Zvcm1hdHMvb3BlbnNzaC1jZXJ0Jyk7XG5mb3JtYXRzWyd4NTA5J10gPSByZXF1aXJlKCcuL2Zvcm1hdHMveDUwOScpO1xuZm9ybWF0c1sncGVtJ10gPSByZXF1aXJlKCcuL2Zvcm1hdHMveDUwOS1wZW0nKTtcblxudmFyIENlcnRpZmljYXRlUGFyc2VFcnJvciA9IGVycnMuQ2VydGlmaWNhdGVQYXJzZUVycm9yO1xudmFyIEludmFsaWRBbGdvcml0aG1FcnJvciA9IGVycnMuSW52YWxpZEFsZ29yaXRobUVycm9yO1xuXG5mdW5jdGlvbiBDZXJ0aWZpY2F0ZShvcHRzKSB7XG5cdGFzc2VydC5vYmplY3Qob3B0cywgJ29wdGlvbnMnKTtcblx0YXNzZXJ0LmFycmF5T2ZPYmplY3Qob3B0cy5zdWJqZWN0cywgJ29wdGlvbnMuc3ViamVjdHMnKTtcblx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShvcHRzLnN1YmplY3RzWzBdLCBJZGVudGl0eSwgWzEsIDBdLFxuXHQgICAgJ29wdGlvbnMuc3ViamVjdHMnKTtcblx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShvcHRzLnN1YmplY3RLZXksIEtleSwgWzEsIDBdLFxuXHQgICAgJ29wdGlvbnMuc3ViamVjdEtleScpO1xuXHR1dGlscy5hc3NlcnRDb21wYXRpYmxlKG9wdHMuaXNzdWVyLCBJZGVudGl0eSwgWzEsIDBdLCAnb3B0aW9ucy5pc3N1ZXInKTtcblx0aWYgKG9wdHMuaXNzdWVyS2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHR1dGlscy5hc3NlcnRDb21wYXRpYmxlKG9wdHMuaXNzdWVyS2V5LCBLZXksIFsxLCAwXSxcblx0XHQgICAgJ29wdGlvbnMuaXNzdWVyS2V5Jyk7XG5cdH1cblx0YXNzZXJ0Lm9iamVjdChvcHRzLnNpZ25hdHVyZXMsICdvcHRpb25zLnNpZ25hdHVyZXMnKTtcblx0YXNzZXJ0LmJ1ZmZlcihvcHRzLnNlcmlhbCwgJ29wdGlvbnMuc2VyaWFsJyk7XG5cdGFzc2VydC5kYXRlKG9wdHMudmFsaWRGcm9tLCAnb3B0aW9ucy52YWxpZEZyb20nKTtcblx0YXNzZXJ0LmRhdGUob3B0cy52YWxpZFVudGlsLCAnb3B0b25zLnZhbGlkVW50aWwnKTtcblxuXHRhc3NlcnQub3B0aW9uYWxBcnJheU9mU3RyaW5nKG9wdHMucHVycG9zZXMsICdvcHRpb25zLnB1cnBvc2VzJyk7XG5cblx0dGhpcy5faGFzaENhY2hlID0ge307XG5cblx0dGhpcy5zdWJqZWN0cyA9IG9wdHMuc3ViamVjdHM7XG5cdHRoaXMuaXNzdWVyID0gb3B0cy5pc3N1ZXI7XG5cdHRoaXMuc3ViamVjdEtleSA9IG9wdHMuc3ViamVjdEtleTtcblx0dGhpcy5pc3N1ZXJLZXkgPSBvcHRzLmlzc3VlcktleTtcblx0dGhpcy5zaWduYXR1cmVzID0gb3B0cy5zaWduYXR1cmVzO1xuXHR0aGlzLnNlcmlhbCA9IG9wdHMuc2VyaWFsO1xuXHR0aGlzLnZhbGlkRnJvbSA9IG9wdHMudmFsaWRGcm9tO1xuXHR0aGlzLnZhbGlkVW50aWwgPSBvcHRzLnZhbGlkVW50aWw7XG5cdHRoaXMucHVycG9zZXMgPSBvcHRzLnB1cnBvc2VzO1xufVxuXG5DZXJ0aWZpY2F0ZS5mb3JtYXRzID0gZm9ybWF0cztcblxuQ2VydGlmaWNhdGUucHJvdG90eXBlLnRvQnVmZmVyID0gZnVuY3Rpb24gKGZvcm1hdCwgb3B0aW9ucykge1xuXHRpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpXG5cdFx0Zm9ybWF0ID0gJ3g1MDknO1xuXHRhc3NlcnQuc3RyaW5nKGZvcm1hdCwgJ2Zvcm1hdCcpO1xuXHRhc3NlcnQub2JqZWN0KGZvcm1hdHNbZm9ybWF0XSwgJ2Zvcm1hdHNbZm9ybWF0XScpO1xuXHRhc3NlcnQub3B0aW9uYWxPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKTtcblxuXHRyZXR1cm4gKGZvcm1hdHNbZm9ybWF0XS53cml0ZSh0aGlzLCBvcHRpb25zKSk7XG59O1xuXG5DZXJ0aWZpY2F0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoZm9ybWF0LCBvcHRpb25zKSB7XG5cdGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZClcblx0XHRmb3JtYXQgPSAncGVtJztcblx0cmV0dXJuICh0aGlzLnRvQnVmZmVyKGZvcm1hdCwgb3B0aW9ucykudG9TdHJpbmcoKSk7XG59O1xuXG5DZXJ0aWZpY2F0ZS5wcm90b3R5cGUuZmluZ2VycHJpbnQgPSBmdW5jdGlvbiAoYWxnbykge1xuXHRpZiAoYWxnbyA9PT0gdW5kZWZpbmVkKVxuXHRcdGFsZ28gPSAnc2hhMjU2Jztcblx0YXNzZXJ0LnN0cmluZyhhbGdvLCAnYWxnb3JpdGhtJyk7XG5cdHZhciBvcHRzID0ge1xuXHRcdHR5cGU6ICdjZXJ0aWZpY2F0ZScsXG5cdFx0aGFzaDogdGhpcy5oYXNoKGFsZ28pLFxuXHRcdGFsZ29yaXRobTogYWxnb1xuXHR9O1xuXHRyZXR1cm4gKG5ldyBGaW5nZXJwcmludChvcHRzKSk7XG59O1xuXG5DZXJ0aWZpY2F0ZS5wcm90b3R5cGUuaGFzaCA9IGZ1bmN0aW9uIChhbGdvKSB7XG5cdGFzc2VydC5zdHJpbmcoYWxnbywgJ2FsZ29yaXRobScpO1xuXHRhbGdvID0gYWxnby50b0xvd2VyQ2FzZSgpO1xuXHRpZiAoYWxncy5oYXNoQWxnc1thbGdvXSA9PT0gdW5kZWZpbmVkKVxuXHRcdHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKGFsZ28pKTtcblxuXHRpZiAodGhpcy5faGFzaENhY2hlW2FsZ29dKVxuXHRcdHJldHVybiAodGhpcy5faGFzaENhY2hlW2FsZ29dKTtcblxuXHR2YXIgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ28pLlxuXHQgICAgdXBkYXRlKHRoaXMudG9CdWZmZXIoJ3g1MDknKSkuZGlnZXN0KCk7XG5cdHRoaXMuX2hhc2hDYWNoZVthbGdvXSA9IGhhc2g7XG5cdHJldHVybiAoaGFzaCk7XG59O1xuXG5DZXJ0aWZpY2F0ZS5wcm90b3R5cGUuaXNFeHBpcmVkID0gZnVuY3Rpb24gKHdoZW4pIHtcblx0aWYgKHdoZW4gPT09IHVuZGVmaW5lZClcblx0XHR3aGVuID0gbmV3IERhdGUoKTtcblx0cmV0dXJuICghKCh3aGVuLmdldFRpbWUoKSA+PSB0aGlzLnZhbGlkRnJvbS5nZXRUaW1lKCkpICYmXG5cdFx0KHdoZW4uZ2V0VGltZSgpIDwgdGhpcy52YWxpZFVudGlsLmdldFRpbWUoKSkpKTtcbn07XG5cbkNlcnRpZmljYXRlLnByb3RvdHlwZS5pc1NpZ25lZEJ5ID0gZnVuY3Rpb24gKGlzc3VlckNlcnQpIHtcblx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShpc3N1ZXJDZXJ0LCBDZXJ0aWZpY2F0ZSwgWzEsIDBdLCAnaXNzdWVyJyk7XG5cblx0aWYgKCF0aGlzLmlzc3Vlci5lcXVhbHMoaXNzdWVyQ2VydC5zdWJqZWN0c1swXSkpXG5cdFx0cmV0dXJuIChmYWxzZSk7XG5cdGlmICh0aGlzLmlzc3Vlci5wdXJwb3NlcyAmJiB0aGlzLmlzc3Vlci5wdXJwb3Nlcy5sZW5ndGggPiAwICYmXG5cdCAgICB0aGlzLmlzc3Vlci5wdXJwb3Nlcy5pbmRleE9mKCdjYScpID09PSAtMSkge1xuXHRcdHJldHVybiAoZmFsc2UpO1xuXHR9XG5cblx0cmV0dXJuICh0aGlzLmlzU2lnbmVkQnlLZXkoaXNzdWVyQ2VydC5zdWJqZWN0S2V5KSk7XG59O1xuXG5DZXJ0aWZpY2F0ZS5wcm90b3R5cGUuaXNTaWduZWRCeUtleSA9IGZ1bmN0aW9uIChpc3N1ZXJLZXkpIHtcblx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShpc3N1ZXJLZXksIEtleSwgWzEsIDJdLCAnaXNzdWVyS2V5Jyk7XG5cblx0aWYgKHRoaXMuaXNzdWVyS2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gKHRoaXMuaXNzdWVyS2V5LlxuXHRcdCAgICBmaW5nZXJwcmludCgnc2hhNTEyJykubWF0Y2hlcyhpc3N1ZXJLZXkpKTtcblx0fVxuXG5cdHZhciBmbXQgPSBPYmplY3Qua2V5cyh0aGlzLnNpZ25hdHVyZXMpWzBdO1xuXHR2YXIgdmFsaWQgPSBmb3JtYXRzW2ZtdF0udmVyaWZ5KHRoaXMsIGlzc3VlcktleSk7XG5cdGlmICh2YWxpZClcblx0XHR0aGlzLmlzc3VlcktleSA9IGlzc3VlcktleTtcblx0cmV0dXJuICh2YWxpZCk7XG59O1xuXG5DZXJ0aWZpY2F0ZS5wcm90b3R5cGUuc2lnbldpdGggPSBmdW5jdGlvbiAoa2V5KSB7XG5cdHV0aWxzLmFzc2VydENvbXBhdGlibGUoa2V5LCBQcml2YXRlS2V5LCBbMSwgMl0sICdrZXknKTtcblx0dmFyIGZtdHMgPSBPYmplY3Qua2V5cyhmb3JtYXRzKTtcblx0dmFyIGRpZE9uZSA9IGZhbHNlO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGZtdHMubGVuZ3RoOyArK2kpIHtcblx0XHRpZiAoZm10c1tpXSAhPT0gJ3BlbScpIHtcblx0XHRcdHZhciByZXQgPSBmb3JtYXRzW2ZtdHNbaV1dLnNpZ24odGhpcywga2V5KTtcblx0XHRcdGlmIChyZXQgPT09IHRydWUpXG5cdFx0XHRcdGRpZE9uZSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdGlmICghZGlkT25lKSB7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignRmFpbGVkIHRvIHNpZ24gdGhlIGNlcnRpZmljYXRlIGZvciBhbnkgJyArXG5cdFx0ICAgICdhdmFpbGFibGUgY2VydGlmaWNhdGUgZm9ybWF0cycpKTtcblx0fVxufTtcblxuQ2VydGlmaWNhdGUuY3JlYXRlU2VsZlNpZ25lZCA9IGZ1bmN0aW9uIChzdWJqZWN0T3JTdWJqZWN0cywga2V5LCBvcHRpb25zKSB7XG5cdHZhciBzdWJqZWN0cztcblx0aWYgKEFycmF5LmlzQXJyYXkoc3ViamVjdE9yU3ViamVjdHMpKVxuXHRcdHN1YmplY3RzID0gc3ViamVjdE9yU3ViamVjdHM7XG5cdGVsc2Vcblx0XHRzdWJqZWN0cyA9IFtzdWJqZWN0T3JTdWJqZWN0c107XG5cblx0YXNzZXJ0LmFycmF5T2ZPYmplY3Qoc3ViamVjdHMpO1xuXHRzdWJqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJqZWN0KSB7XG5cdFx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShzdWJqZWN0LCBJZGVudGl0eSwgWzEsIDBdLCAnc3ViamVjdCcpO1xuXHR9KTtcblxuXHR1dGlscy5hc3NlcnRDb21wYXRpYmxlKGtleSwgUHJpdmF0ZUtleSwgWzEsIDJdLCAncHJpdmF0ZSBrZXknKTtcblxuXHRhc3NlcnQub3B0aW9uYWxPYmplY3Qob3B0aW9ucywgJ29wdGlvbnMnKTtcblx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRvcHRpb25zID0ge307XG5cdGFzc2VydC5vcHRpb25hbE9iamVjdChvcHRpb25zLnZhbGlkRnJvbSwgJ29wdGlvbnMudmFsaWRGcm9tJyk7XG5cdGFzc2VydC5vcHRpb25hbE9iamVjdChvcHRpb25zLnZhbGlkVW50aWwsICdvcHRpb25zLnZhbGlkVW50aWwnKTtcblx0dmFyIHZhbGlkRnJvbSA9IG9wdGlvbnMudmFsaWRGcm9tO1xuXHR2YXIgdmFsaWRVbnRpbCA9IG9wdGlvbnMudmFsaWRVbnRpbDtcblx0aWYgKHZhbGlkRnJvbSA9PT0gdW5kZWZpbmVkKVxuXHRcdHZhbGlkRnJvbSA9IG5ldyBEYXRlKCk7XG5cdGlmICh2YWxpZFVudGlsID09PSB1bmRlZmluZWQpIHtcblx0XHRhc3NlcnQub3B0aW9uYWxOdW1iZXIob3B0aW9ucy5saWZldGltZSwgJ29wdGlvbnMubGlmZXRpbWUnKTtcblx0XHR2YXIgbGlmZXRpbWUgPSBvcHRpb25zLmxpZmV0aW1lO1xuXHRcdGlmIChsaWZldGltZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bGlmZXRpbWUgPSAxMCozNjUqMjQqMzYwMDtcblx0XHR2YWxpZFVudGlsID0gbmV3IERhdGUoKTtcblx0XHR2YWxpZFVudGlsLnNldFRpbWUodmFsaWRVbnRpbC5nZXRUaW1lKCkgKyBsaWZldGltZSoxMDAwKTtcblx0fVxuXHRhc3NlcnQub3B0aW9uYWxCdWZmZXIob3B0aW9ucy5zZXJpYWwsICdvcHRpb25zLnNlcmlhbCcpO1xuXHR2YXIgc2VyaWFsID0gb3B0aW9ucy5zZXJpYWw7XG5cdGlmIChzZXJpYWwgPT09IHVuZGVmaW5lZClcblx0XHRzZXJpYWwgPSBuZXcgQnVmZmVyKCcwMDAwMDAwMDAwMDAwMDAxJywgJ2hleCcpO1xuXG5cdHZhciBwdXJwb3NlcyA9IG9wdGlvbnMucHVycG9zZXM7XG5cdGlmIChwdXJwb3NlcyA9PT0gdW5kZWZpbmVkKVxuXHRcdHB1cnBvc2VzID0gW107XG5cblx0aWYgKHB1cnBvc2VzLmluZGV4T2YoJ3NpZ25hdHVyZScpID09PSAtMSlcblx0XHRwdXJwb3Nlcy5wdXNoKCdzaWduYXR1cmUnKTtcblxuXHQvKiBTZWxmLXNpZ25lZCBjZXJ0cyBhcmUgYWx3YXlzIENBcy4gKi9cblx0aWYgKHB1cnBvc2VzLmluZGV4T2YoJ2NhJykgPT09IC0xKVxuXHRcdHB1cnBvc2VzLnB1c2goJ2NhJyk7XG5cdGlmIChwdXJwb3Nlcy5pbmRleE9mKCdjcmwnKSA9PT0gLTEpXG5cdFx0cHVycG9zZXMucHVzaCgnY3JsJyk7XG5cblx0Lypcblx0ICogSWYgd2Ugd2VyZW4ndCBleHBsaWNpdGx5IGdpdmVuIGFueSBvdGhlciBwdXJwb3NlcywgZG8gdGhlIHNlbnNpYmxlXG5cdCAqIHRoaW5nIGFuZCBhZGQgc29tZSBiYXNpYyBvbmVzIGRlcGVuZGluZyBvbiB0aGUgc3ViamVjdCB0eXBlLlxuXHQgKi9cblx0aWYgKHB1cnBvc2VzLmxlbmd0aCA8PSAzKSB7XG5cdFx0dmFyIGhvc3RTdWJqZWN0cyA9IHN1YmplY3RzLmZpbHRlcihmdW5jdGlvbiAoc3ViamVjdCkge1xuXHRcdFx0cmV0dXJuIChzdWJqZWN0LnR5cGUgPT09ICdob3N0Jyk7XG5cdFx0fSk7XG5cdFx0dmFyIHVzZXJTdWJqZWN0cyA9IHN1YmplY3RzLmZpbHRlcihmdW5jdGlvbiAoc3ViamVjdCkge1xuXHRcdFx0cmV0dXJuIChzdWJqZWN0LnR5cGUgPT09ICd1c2VyJyk7XG5cdFx0fSk7XG5cdFx0aWYgKGhvc3RTdWJqZWN0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRpZiAocHVycG9zZXMuaW5kZXhPZignc2VydmVyQXV0aCcpID09PSAtMSlcblx0XHRcdFx0cHVycG9zZXMucHVzaCgnc2VydmVyQXV0aCcpO1xuXHRcdH1cblx0XHRpZiAodXNlclN1YmplY3RzLmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChwdXJwb3Nlcy5pbmRleE9mKCdjbGllbnRBdXRoJykgPT09IC0xKVxuXHRcdFx0XHRwdXJwb3Nlcy5wdXNoKCdjbGllbnRBdXRoJyk7XG5cdFx0fVxuXHRcdGlmICh1c2VyU3ViamVjdHMubGVuZ3RoID4gMCB8fCBob3N0U3ViamVjdHMubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKHB1cnBvc2VzLmluZGV4T2YoJ2tleUFncmVlbWVudCcpID09PSAtMSlcblx0XHRcdFx0cHVycG9zZXMucHVzaCgna2V5QWdyZWVtZW50Jyk7XG5cdFx0XHRpZiAoa2V5LnR5cGUgPT09ICdyc2EnICYmXG5cdFx0XHQgICAgcHVycG9zZXMuaW5kZXhPZignZW5jcnlwdGlvbicpID09PSAtMSlcblx0XHRcdFx0cHVycG9zZXMucHVzaCgnZW5jcnlwdGlvbicpO1xuXHRcdH1cblx0fVxuXG5cdHZhciBjZXJ0ID0gbmV3IENlcnRpZmljYXRlKHtcblx0XHRzdWJqZWN0czogc3ViamVjdHMsXG5cdFx0aXNzdWVyOiBzdWJqZWN0c1swXSxcblx0XHRzdWJqZWN0S2V5OiBrZXkudG9QdWJsaWMoKSxcblx0XHRpc3N1ZXJLZXk6IGtleS50b1B1YmxpYygpLFxuXHRcdHNpZ25hdHVyZXM6IHt9LFxuXHRcdHNlcmlhbDogc2VyaWFsLFxuXHRcdHZhbGlkRnJvbTogdmFsaWRGcm9tLFxuXHRcdHZhbGlkVW50aWw6IHZhbGlkVW50aWwsXG5cdFx0cHVycG9zZXM6IHB1cnBvc2VzXG5cdH0pO1xuXHRjZXJ0LnNpZ25XaXRoKGtleSk7XG5cblx0cmV0dXJuIChjZXJ0KTtcbn07XG5cbkNlcnRpZmljYXRlLmNyZWF0ZSA9XG4gICAgZnVuY3Rpb24gKHN1YmplY3RPclN1YmplY3RzLCBrZXksIGlzc3VlciwgaXNzdWVyS2V5LCBvcHRpb25zKSB7XG5cdHZhciBzdWJqZWN0cztcblx0aWYgKEFycmF5LmlzQXJyYXkoc3ViamVjdE9yU3ViamVjdHMpKVxuXHRcdHN1YmplY3RzID0gc3ViamVjdE9yU3ViamVjdHM7XG5cdGVsc2Vcblx0XHRzdWJqZWN0cyA9IFtzdWJqZWN0T3JTdWJqZWN0c107XG5cblx0YXNzZXJ0LmFycmF5T2ZPYmplY3Qoc3ViamVjdHMpO1xuXHRzdWJqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJqZWN0KSB7XG5cdFx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShzdWJqZWN0LCBJZGVudGl0eSwgWzEsIDBdLCAnc3ViamVjdCcpO1xuXHR9KTtcblxuXHR1dGlscy5hc3NlcnRDb21wYXRpYmxlKGtleSwgS2V5LCBbMSwgMF0sICdrZXknKTtcblx0aWYgKFByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSkpXG5cdFx0a2V5ID0ga2V5LnRvUHVibGljKCk7XG5cdHV0aWxzLmFzc2VydENvbXBhdGlibGUoaXNzdWVyLCBJZGVudGl0eSwgWzEsIDBdLCAnaXNzdWVyJyk7XG5cdHV0aWxzLmFzc2VydENvbXBhdGlibGUoaXNzdWVyS2V5LCBQcml2YXRlS2V5LCBbMSwgMl0sICdpc3N1ZXIga2V5Jyk7XG5cblx0YXNzZXJ0Lm9wdGlvbmFsT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJyk7XG5cdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0b3B0aW9ucyA9IHt9O1xuXHRhc3NlcnQub3B0aW9uYWxPYmplY3Qob3B0aW9ucy52YWxpZEZyb20sICdvcHRpb25zLnZhbGlkRnJvbScpO1xuXHRhc3NlcnQub3B0aW9uYWxPYmplY3Qob3B0aW9ucy52YWxpZFVudGlsLCAnb3B0aW9ucy52YWxpZFVudGlsJyk7XG5cdHZhciB2YWxpZEZyb20gPSBvcHRpb25zLnZhbGlkRnJvbTtcblx0dmFyIHZhbGlkVW50aWwgPSBvcHRpb25zLnZhbGlkVW50aWw7XG5cdGlmICh2YWxpZEZyb20gPT09IHVuZGVmaW5lZClcblx0XHR2YWxpZEZyb20gPSBuZXcgRGF0ZSgpO1xuXHRpZiAodmFsaWRVbnRpbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0YXNzZXJ0Lm9wdGlvbmFsTnVtYmVyKG9wdGlvbnMubGlmZXRpbWUsICdvcHRpb25zLmxpZmV0aW1lJyk7XG5cdFx0dmFyIGxpZmV0aW1lID0gb3B0aW9ucy5saWZldGltZTtcblx0XHRpZiAobGlmZXRpbWUgPT09IHVuZGVmaW5lZClcblx0XHRcdGxpZmV0aW1lID0gMTAqMzY1KjI0KjM2MDA7XG5cdFx0dmFsaWRVbnRpbCA9IG5ldyBEYXRlKCk7XG5cdFx0dmFsaWRVbnRpbC5zZXRUaW1lKHZhbGlkVW50aWwuZ2V0VGltZSgpICsgbGlmZXRpbWUqMTAwMCk7XG5cdH1cblx0YXNzZXJ0Lm9wdGlvbmFsQnVmZmVyKG9wdGlvbnMuc2VyaWFsLCAnb3B0aW9ucy5zZXJpYWwnKTtcblx0dmFyIHNlcmlhbCA9IG9wdGlvbnMuc2VyaWFsO1xuXHRpZiAoc2VyaWFsID09PSB1bmRlZmluZWQpXG5cdFx0c2VyaWFsID0gbmV3IEJ1ZmZlcignMDAwMDAwMDAwMDAwMDAwMScsICdoZXgnKTtcblxuXHR2YXIgcHVycG9zZXMgPSBvcHRpb25zLnB1cnBvc2VzO1xuXHRpZiAocHVycG9zZXMgPT09IHVuZGVmaW5lZClcblx0XHRwdXJwb3NlcyA9IFtdO1xuXG5cdGlmIChwdXJwb3Nlcy5pbmRleE9mKCdzaWduYXR1cmUnKSA9PT0gLTEpXG5cdFx0cHVycG9zZXMucHVzaCgnc2lnbmF0dXJlJyk7XG5cblx0aWYgKG9wdGlvbnMuY2EgPT09IHRydWUpIHtcblx0XHRpZiAocHVycG9zZXMuaW5kZXhPZignY2EnKSA9PT0gLTEpXG5cdFx0XHRwdXJwb3Nlcy5wdXNoKCdjYScpO1xuXHRcdGlmIChwdXJwb3Nlcy5pbmRleE9mKCdjcmwnKSA9PT0gLTEpXG5cdFx0XHRwdXJwb3Nlcy5wdXNoKCdjcmwnKTtcblx0fVxuXG5cdHZhciBob3N0U3ViamVjdHMgPSBzdWJqZWN0cy5maWx0ZXIoZnVuY3Rpb24gKHN1YmplY3QpIHtcblx0XHRyZXR1cm4gKHN1YmplY3QudHlwZSA9PT0gJ2hvc3QnKTtcblx0fSk7XG5cdHZhciB1c2VyU3ViamVjdHMgPSBzdWJqZWN0cy5maWx0ZXIoZnVuY3Rpb24gKHN1YmplY3QpIHtcblx0XHRyZXR1cm4gKHN1YmplY3QudHlwZSA9PT0gJ3VzZXInKTtcblx0fSk7XG5cdGlmIChob3N0U3ViamVjdHMubGVuZ3RoID4gMCkge1xuXHRcdGlmIChwdXJwb3Nlcy5pbmRleE9mKCdzZXJ2ZXJBdXRoJykgPT09IC0xKVxuXHRcdFx0cHVycG9zZXMucHVzaCgnc2VydmVyQXV0aCcpO1xuXHR9XG5cdGlmICh1c2VyU3ViamVjdHMubGVuZ3RoID4gMCkge1xuXHRcdGlmIChwdXJwb3Nlcy5pbmRleE9mKCdjbGllbnRBdXRoJykgPT09IC0xKVxuXHRcdFx0cHVycG9zZXMucHVzaCgnY2xpZW50QXV0aCcpO1xuXHR9XG5cdGlmICh1c2VyU3ViamVjdHMubGVuZ3RoID4gMCB8fCBob3N0U3ViamVjdHMubGVuZ3RoID4gMCkge1xuXHRcdGlmIChwdXJwb3Nlcy5pbmRleE9mKCdrZXlBZ3JlZW1lbnQnKSA9PT0gLTEpXG5cdFx0XHRwdXJwb3Nlcy5wdXNoKCdrZXlBZ3JlZW1lbnQnKTtcblx0XHRpZiAoa2V5LnR5cGUgPT09ICdyc2EnICYmXG5cdFx0ICAgIHB1cnBvc2VzLmluZGV4T2YoJ2VuY3J5cHRpb24nKSA9PT0gLTEpXG5cdFx0XHRwdXJwb3Nlcy5wdXNoKCdlbmNyeXB0aW9uJyk7XG5cdH1cblxuXHR2YXIgY2VydCA9IG5ldyBDZXJ0aWZpY2F0ZSh7XG5cdFx0c3ViamVjdHM6IHN1YmplY3RzLFxuXHRcdGlzc3VlcjogaXNzdWVyLFxuXHRcdHN1YmplY3RLZXk6IGtleSxcblx0XHRpc3N1ZXJLZXk6IGlzc3VlcktleS50b1B1YmxpYygpLFxuXHRcdHNpZ25hdHVyZXM6IHt9LFxuXHRcdHNlcmlhbDogc2VyaWFsLFxuXHRcdHZhbGlkRnJvbTogdmFsaWRGcm9tLFxuXHRcdHZhbGlkVW50aWw6IHZhbGlkVW50aWwsXG5cdFx0cHVycG9zZXM6IHB1cnBvc2VzXG5cdH0pO1xuXHRjZXJ0LnNpZ25XaXRoKGlzc3VlcktleSk7XG5cblx0cmV0dXJuIChjZXJ0KTtcbn07XG5cbkNlcnRpZmljYXRlLnBhcnNlID0gZnVuY3Rpb24gKGRhdGEsIGZvcm1hdCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIChkYXRhKSAhPT0gJ3N0cmluZycpXG5cdFx0YXNzZXJ0LmJ1ZmZlcihkYXRhLCAnZGF0YScpO1xuXHRpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpXG5cdFx0Zm9ybWF0ID0gJ2F1dG8nO1xuXHRhc3NlcnQuc3RyaW5nKGZvcm1hdCwgJ2Zvcm1hdCcpO1xuXHRpZiAodHlwZW9mIChvcHRpb25zKSA9PT0gJ3N0cmluZycpXG5cdFx0b3B0aW9ucyA9IHsgZmlsZW5hbWU6IG9wdGlvbnMgfTtcblx0YXNzZXJ0Lm9wdGlvbmFsT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJyk7XG5cdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0b3B0aW9ucyA9IHt9O1xuXHRhc3NlcnQub3B0aW9uYWxTdHJpbmcob3B0aW9ucy5maWxlbmFtZSwgJ29wdGlvbnMuZmlsZW5hbWUnKTtcblx0aWYgKG9wdGlvbnMuZmlsZW5hbWUgPT09IHVuZGVmaW5lZClcblx0XHRvcHRpb25zLmZpbGVuYW1lID0gJyh1bm5hbWVkKSc7XG5cblx0YXNzZXJ0Lm9iamVjdChmb3JtYXRzW2Zvcm1hdF0sICdmb3JtYXRzW2Zvcm1hdF0nKTtcblxuXHR0cnkge1xuXHRcdHZhciBrID0gZm9ybWF0c1tmb3JtYXRdLnJlYWQoZGF0YSwgb3B0aW9ucyk7XG5cdFx0cmV0dXJuIChrKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHRocm93IChuZXcgQ2VydGlmaWNhdGVQYXJzZUVycm9yKG9wdGlvbnMuZmlsZW5hbWUsIGZvcm1hdCwgZSkpO1xuXHR9XG59O1xuXG5DZXJ0aWZpY2F0ZS5pc0NlcnRpZmljYXRlID0gZnVuY3Rpb24gKG9iaiwgdmVyKSB7XG5cdHJldHVybiAodXRpbHMuaXNDb21wYXRpYmxlKG9iaiwgQ2VydGlmaWNhdGUsIHZlcikpO1xufTtcblxuLypcbiAqIEFQSSB2ZXJzaW9ucyBmb3IgQ2VydGlmaWNhdGU6XG4gKiBbMSwwXSAtLSBpbml0aWFsIHZlclxuICovXG5DZXJ0aWZpY2F0ZS5wcm90b3R5cGUuX3NzaHBrQXBpVmVyc2lvbiA9IFsxLCAwXTtcblxuQ2VydGlmaWNhdGUuX29sZFZlcnNpb25EZXRlY3QgPSBmdW5jdGlvbiAob2JqKSB7XG5cdHJldHVybiAoWzEsIDBdKTtcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxNyBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdERpZmZpZUhlbGxtYW46IERpZmZpZUhlbGxtYW4sXG5cdGdlbmVyYXRlRUNEU0E6IGdlbmVyYXRlRUNEU0EsXG5cdGdlbmVyYXRlRUQyNTUxOTogZ2VuZXJhdGVFRDI1NTE5XG59O1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi9hbGdzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgZWQ7XG52YXIgbmFjbDtcblxudmFyIEtleSA9IHJlcXVpcmUoJy4va2V5Jyk7XG52YXIgUHJpdmF0ZUtleSA9IHJlcXVpcmUoJy4vcHJpdmF0ZS1rZXknKTtcblxudmFyIENSWVBUT19IQVZFX0VDREggPSAoY3J5cHRvLmNyZWF0ZUVDREggIT09IHVuZGVmaW5lZCk7XG5cbnZhciBlY2RoLCBlYywganNibjtcblxuZnVuY3Rpb24gRGlmZmllSGVsbG1hbihrZXkpIHtcblx0dXRpbHMuYXNzZXJ0Q29tcGF0aWJsZShrZXksIEtleSwgWzEsIDRdLCAna2V5Jyk7XG5cdHRoaXMuX2lzUHJpdiA9IFByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSwgWzEsIDNdKTtcblx0dGhpcy5fYWxnbyA9IGtleS50eXBlO1xuXHR0aGlzLl9jdXJ2ZSA9IGtleS5jdXJ2ZTtcblx0dGhpcy5fa2V5ID0ga2V5O1xuXHRpZiAoa2V5LnR5cGUgPT09ICdkc2EnKSB7XG5cdFx0aWYgKCFDUllQVE9fSEFWRV9FQ0RIKSB7XG5cdFx0XHR0aHJvdyAobmV3IEVycm9yKCdEdWUgdG8gYnVncyBpbiB0aGUgbm9kZSAwLjEwICcgK1xuXHRcdFx0ICAgICdjcnlwdG8gQVBJLCBub2RlIDAuMTIueCBvciBsYXRlciBpcyByZXF1aXJlZCAnICtcblx0XHRcdCAgICAndG8gdXNlIERIJykpO1xuXHRcdH1cblx0XHR0aGlzLl9kaCA9IGNyeXB0by5jcmVhdGVEaWZmaWVIZWxsbWFuKFxuXHRcdCAgICBrZXkucGFydC5wLmRhdGEsIHVuZGVmaW5lZCxcblx0XHQgICAga2V5LnBhcnQuZy5kYXRhLCB1bmRlZmluZWQpO1xuXHRcdHRoaXMuX3AgPSBrZXkucGFydC5wO1xuXHRcdHRoaXMuX2cgPSBrZXkucGFydC5nO1xuXHRcdGlmICh0aGlzLl9pc1ByaXYpXG5cdFx0XHR0aGlzLl9kaC5zZXRQcml2YXRlS2V5KGtleS5wYXJ0LnguZGF0YSk7XG5cdFx0dGhpcy5fZGguc2V0UHVibGljS2V5KGtleS5wYXJ0LnkuZGF0YSk7XG5cblx0fSBlbHNlIGlmIChrZXkudHlwZSA9PT0gJ2VjZHNhJykge1xuXHRcdGlmICghQ1JZUFRPX0hBVkVfRUNESCkge1xuXHRcdFx0aWYgKGVjZGggPT09IHVuZGVmaW5lZClcblx0XHRcdFx0ZWNkaCA9IHJlcXVpcmUoJ2VjYy1qc2JuJyk7XG5cdFx0XHRpZiAoZWMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0ZWMgPSByZXF1aXJlKCdlY2MtanNibi9saWIvZWMnKTtcblx0XHRcdGlmIChqc2JuID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGpzYm4gPSByZXF1aXJlKCdqc2JuJykuQmlnSW50ZWdlcjtcblxuXHRcdFx0dGhpcy5fZWNQYXJhbXMgPSBuZXcgWDlFQ1BhcmFtZXRlcnModGhpcy5fY3VydmUpO1xuXG5cdFx0XHRpZiAodGhpcy5faXNQcml2KSB7XG5cdFx0XHRcdHRoaXMuX3ByaXYgPSBuZXcgRUNQcml2YXRlKFxuXHRcdFx0XHQgICAgdGhpcy5fZWNQYXJhbXMsIGtleS5wYXJ0LmQuZGF0YSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGN1cnZlID0ge1xuXHRcdFx0J25pc3RwMjU2JzogJ3ByaW1lMjU2djEnLFxuXHRcdFx0J25pc3RwMzg0JzogJ3NlY3AzODRyMScsXG5cdFx0XHQnbmlzdHA1MjEnOiAnc2VjcDUyMXIxJ1xuXHRcdH1ba2V5LmN1cnZlXTtcblx0XHR0aGlzLl9kaCA9IGNyeXB0by5jcmVhdGVFQ0RIKGN1cnZlKTtcblx0XHRpZiAodHlwZW9mICh0aGlzLl9kaCkgIT09ICdvYmplY3QnIHx8XG5cdFx0ICAgIHR5cGVvZiAodGhpcy5fZGguc2V0UHJpdmF0ZUtleSkgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdENSWVBUT19IQVZFX0VDREggPSBmYWxzZTtcblx0XHRcdERpZmZpZUhlbGxtYW4uY2FsbCh0aGlzLCBrZXkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy5faXNQcml2KVxuXHRcdFx0dGhpcy5fZGguc2V0UHJpdmF0ZUtleShrZXkucGFydC5kLmRhdGEpO1xuXHRcdHRoaXMuX2RoLnNldFB1YmxpY0tleShrZXkucGFydC5RLmRhdGEpO1xuXG5cdH0gZWxzZSBpZiAoa2V5LnR5cGUgPT09ICdjdXJ2ZTI1NTE5Jykge1xuXHRcdGlmIChlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZWQgPSByZXF1aXJlKCdqb2RpZDI1NTE5Jyk7XG5cblx0XHRpZiAodGhpcy5faXNQcml2KSB7XG5cdFx0XHR0aGlzLl9wcml2ID0ga2V5LnBhcnQuci5kYXRhO1xuXHRcdFx0aWYgKHRoaXMuX3ByaXZbMF0gPT09IDB4MDApXG5cdFx0XHRcdHRoaXMuX3ByaXYgPSB0aGlzLl9wcml2LnNsaWNlKDEpO1xuXHRcdFx0dGhpcy5fcHJpdiA9IHRoaXMuX3ByaXYuc2xpY2UoMCwgMzIpO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXHRcdHRocm93IChuZXcgRXJyb3IoJ0RIIG5vdCBzdXBwb3J0ZWQgZm9yICcgKyBrZXkudHlwZSArICcga2V5cycpKTtcblx0fVxufVxuXG5EaWZmaWVIZWxsbWFuLnByb3RvdHlwZS5nZXRQdWJsaWNLZXkgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICh0aGlzLl9pc1ByaXYpXG5cdFx0cmV0dXJuICh0aGlzLl9rZXkudG9QdWJsaWMoKSk7XG5cdHJldHVybiAodGhpcy5fa2V5KTtcbn07XG5cbkRpZmZpZUhlbGxtYW4ucHJvdG90eXBlLmdldFByaXZhdGVLZXkgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICh0aGlzLl9pc1ByaXYpXG5cdFx0cmV0dXJuICh0aGlzLl9rZXkpO1xuXHRlbHNlXG5cdFx0cmV0dXJuICh1bmRlZmluZWQpO1xufTtcbkRpZmZpZUhlbGxtYW4ucHJvdG90eXBlLmdldEtleSA9IERpZmZpZUhlbGxtYW4ucHJvdG90eXBlLmdldFByaXZhdGVLZXk7XG5cbkRpZmZpZUhlbGxtYW4ucHJvdG90eXBlLl9rZXlDaGVjayA9IGZ1bmN0aW9uIChwaywgaXNQdWIpIHtcblx0YXNzZXJ0Lm9iamVjdChwaywgJ2tleScpO1xuXHRpZiAoIWlzUHViKVxuXHRcdHV0aWxzLmFzc2VydENvbXBhdGlibGUocGssIFByaXZhdGVLZXksIFsxLCAzXSwgJ2tleScpO1xuXHR1dGlscy5hc3NlcnRDb21wYXRpYmxlKHBrLCBLZXksIFsxLCA0XSwgJ2tleScpO1xuXG5cdGlmIChway50eXBlICE9PSB0aGlzLl9hbGdvKSB7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignQSAnICsgcGsudHlwZSArICcga2V5IGNhbm5vdCBiZSB1c2VkIGluICcgK1xuXHRcdCAgICB0aGlzLl9hbGdvICsgJyBEaWZmaWUtSGVsbG1hbicpKTtcblx0fVxuXG5cdGlmIChway5jdXJ2ZSAhPT0gdGhpcy5fY3VydmUpIHtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdBIGtleSBmcm9tIHRoZSAnICsgcGsuY3VydmUgKyAnIGN1cnZlICcgK1xuXHRcdCAgICAnY2Fubm90IGJlIHVzZWQgd2l0aCBhICcgKyB0aGlzLl9jdXJ2ZSArXG5cdFx0ICAgICcgRGlmZmllLUhlbGxtYW4nKSk7XG5cdH1cblxuXHRpZiAocGsudHlwZSA9PT0gJ2RzYScpIHtcblx0XHRhc3NlcnQuZGVlcEVxdWFsKHBrLnBhcnQucCwgdGhpcy5fcCxcblx0XHQgICAgJ0RTQSBrZXkgcHJpbWUgZG9lcyBub3QgbWF0Y2gnKTtcblx0XHRhc3NlcnQuZGVlcEVxdWFsKHBrLnBhcnQuZywgdGhpcy5fZyxcblx0XHQgICAgJ0RTQSBrZXkgZ2VuZXJhdG9yIGRvZXMgbm90IG1hdGNoJyk7XG5cdH1cbn07XG5cbkRpZmZpZUhlbGxtYW4ucHJvdG90eXBlLnNldEtleSA9IGZ1bmN0aW9uIChwaykge1xuXHR0aGlzLl9rZXlDaGVjayhwayk7XG5cblx0aWYgKHBrLnR5cGUgPT09ICdkc2EnKSB7XG5cdFx0dGhpcy5fZGguc2V0UHJpdmF0ZUtleShway5wYXJ0LnguZGF0YSk7XG5cdFx0dGhpcy5fZGguc2V0UHVibGljS2V5KHBrLnBhcnQueS5kYXRhKTtcblxuXHR9IGVsc2UgaWYgKHBrLnR5cGUgPT09ICdlY2RzYScpIHtcblx0XHRpZiAoQ1JZUFRPX0hBVkVfRUNESCkge1xuXHRcdFx0dGhpcy5fZGguc2V0UHJpdmF0ZUtleShway5wYXJ0LmQuZGF0YSk7XG5cdFx0XHR0aGlzLl9kaC5zZXRQdWJsaWNLZXkocGsucGFydC5RLmRhdGEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9wcml2ID0gbmV3IEVDUHJpdmF0ZShcblx0XHRcdCAgICB0aGlzLl9lY1BhcmFtcywgcGsucGFydC5kLmRhdGEpO1xuXHRcdH1cblxuXHR9IGVsc2UgaWYgKHBrLnR5cGUgPT09ICdjdXJ2ZTI1NTE5Jykge1xuXHRcdHRoaXMuX3ByaXYgPSBway5wYXJ0LnIuZGF0YTtcblx0XHRpZiAodGhpcy5fcHJpdlswXSA9PT0gMHgwMClcblx0XHRcdHRoaXMuX3ByaXYgPSB0aGlzLl9wcml2LnNsaWNlKDEpO1xuXHRcdHRoaXMuX3ByaXYgPSB0aGlzLl9wcml2LnNsaWNlKDAsIDMyKTtcblx0fVxuXHR0aGlzLl9rZXkgPSBwaztcblx0dGhpcy5faXNQcml2ID0gdHJ1ZTtcbn07XG5EaWZmaWVIZWxsbWFuLnByb3RvdHlwZS5zZXRQcml2YXRlS2V5ID0gRGlmZmllSGVsbG1hbi5wcm90b3R5cGUuc2V0S2V5O1xuXG5EaWZmaWVIZWxsbWFuLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0ID0gZnVuY3Rpb24gKG90aGVycGspIHtcblx0dGhpcy5fa2V5Q2hlY2sob3RoZXJwaywgdHJ1ZSk7XG5cdGlmICghdGhpcy5faXNQcml2KVxuXHRcdHRocm93IChuZXcgRXJyb3IoJ0RIIGV4Y2hhbmdlIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB3aXRoICcgK1xuXHRcdCAgICAnYSBwcml2YXRlIGtleSB5ZXQnKSk7XG5cblx0dmFyIHB1Yjtcblx0aWYgKHRoaXMuX2FsZ28gPT09ICdkc2EnKSB7XG5cdFx0cmV0dXJuICh0aGlzLl9kaC5jb21wdXRlU2VjcmV0KFxuXHRcdCAgICBvdGhlcnBrLnBhcnQueS5kYXRhKSk7XG5cblx0fSBlbHNlIGlmICh0aGlzLl9hbGdvID09PSAnZWNkc2EnKSB7XG5cdFx0aWYgKENSWVBUT19IQVZFX0VDREgpIHtcblx0XHRcdHJldHVybiAodGhpcy5fZGguY29tcHV0ZVNlY3JldChcblx0XHRcdCAgICBvdGhlcnBrLnBhcnQuUS5kYXRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHB1YiA9IG5ldyBFQ1B1YmxpYyhcblx0XHRcdCAgICB0aGlzLl9lY1BhcmFtcywgb3RoZXJway5wYXJ0LlEuZGF0YSk7XG5cdFx0XHRyZXR1cm4gKHRoaXMuX3ByaXYuZGVyaXZlU2hhcmVkU2VjcmV0KHB1YikpO1xuXHRcdH1cblxuXHR9IGVsc2UgaWYgKHRoaXMuX2FsZ28gPT09ICdjdXJ2ZTI1NTE5Jykge1xuXHRcdHB1YiA9IG90aGVycGsucGFydC5SLmRhdGE7XG5cdFx0aWYgKHB1YlswXSA9PT0gMHgwMClcblx0XHRcdHB1YiA9IHB1Yi5zbGljZSgxKTtcblxuXHRcdHZhciBzZWNyZXQgPSBlZC5kaC5jb21wdXRlS2V5KFxuXHRcdCAgICB0aGlzLl9wcml2LnRvU3RyaW5nKCdiaW5hcnknKSxcblx0XHQgICAgcHViLnRvU3RyaW5nKCdiaW5hcnknKSk7XG5cblx0XHRyZXR1cm4gKG5ldyBCdWZmZXIoc2VjcmV0LCAnYmluYXJ5JykpO1xuXHR9XG5cblx0dGhyb3cgKG5ldyBFcnJvcignSW52YWxpZCBhbGdvcml0aG06ICcgKyB0aGlzLl9hbGdvKSk7XG59O1xuXG5EaWZmaWVIZWxsbWFuLnByb3RvdHlwZS5nZW5lcmF0ZUtleSA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHBhcnRzID0gW107XG5cdHZhciBwcml2LCBwdWI7XG5cdGlmICh0aGlzLl9hbGdvID09PSAnZHNhJykge1xuXHRcdHRoaXMuX2RoLmdlbmVyYXRlS2V5cygpO1xuXG5cdFx0cGFydHMucHVzaCh7bmFtZTogJ3AnLCBkYXRhOiB0aGlzLl9wLmRhdGF9KTtcblx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAncScsIGRhdGE6IHRoaXMuX2tleS5wYXJ0LnEuZGF0YX0pO1xuXHRcdHBhcnRzLnB1c2goe25hbWU6ICdnJywgZGF0YTogdGhpcy5fZy5kYXRhfSk7XG5cdFx0cGFydHMucHVzaCh7bmFtZTogJ3knLCBkYXRhOiB0aGlzLl9kaC5nZXRQdWJsaWNLZXkoKX0pO1xuXHRcdHBhcnRzLnB1c2goe25hbWU6ICd4JywgZGF0YTogdGhpcy5fZGguZ2V0UHJpdmF0ZUtleSgpfSk7XG5cdFx0dGhpcy5fa2V5ID0gbmV3IFByaXZhdGVLZXkoe1xuXHRcdFx0dHlwZTogJ2RzYScsXG5cdFx0XHRwYXJ0czogcGFydHNcblx0XHR9KTtcblx0XHR0aGlzLl9pc1ByaXYgPSB0cnVlO1xuXHRcdHJldHVybiAodGhpcy5fa2V5KTtcblxuXHR9IGVsc2UgaWYgKHRoaXMuX2FsZ28gPT09ICdlY2RzYScpIHtcblx0XHRpZiAoQ1JZUFRPX0hBVkVfRUNESCkge1xuXHRcdFx0dGhpcy5fZGguZ2VuZXJhdGVLZXlzKCk7XG5cblx0XHRcdHBhcnRzLnB1c2goe25hbWU6ICdjdXJ2ZScsXG5cdFx0XHQgICAgZGF0YTogbmV3IEJ1ZmZlcih0aGlzLl9jdXJ2ZSl9KTtcblx0XHRcdHBhcnRzLnB1c2goe25hbWU6ICdRJywgZGF0YTogdGhpcy5fZGguZ2V0UHVibGljS2V5KCl9KTtcblx0XHRcdHBhcnRzLnB1c2goe25hbWU6ICdkJywgZGF0YTogdGhpcy5fZGguZ2V0UHJpdmF0ZUtleSgpfSk7XG5cdFx0XHR0aGlzLl9rZXkgPSBuZXcgUHJpdmF0ZUtleSh7XG5cdFx0XHRcdHR5cGU6ICdlY2RzYScsXG5cdFx0XHRcdGN1cnZlOiB0aGlzLl9jdXJ2ZSxcblx0XHRcdFx0cGFydHM6IHBhcnRzXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuX2lzUHJpdiA9IHRydWU7XG5cdFx0XHRyZXR1cm4gKHRoaXMuX2tleSk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIG4gPSB0aGlzLl9lY1BhcmFtcy5nZXROKCk7XG5cdFx0XHR2YXIgciA9IG5ldyBqc2JuKGNyeXB0by5yYW5kb21CeXRlcyhuLmJpdExlbmd0aCgpKSk7XG5cdFx0XHR2YXIgbjEgPSBuLnN1YnRyYWN0KGpzYm4uT05FKTtcblx0XHRcdHByaXYgPSByLm1vZChuMSkuYWRkKGpzYm4uT05FKTtcblx0XHRcdHB1YiA9IHRoaXMuX2VjUGFyYW1zLmdldEcoKS5tdWx0aXBseShwcml2KTtcblxuXHRcdFx0cHJpdiA9IG5ldyBCdWZmZXIocHJpdi50b0J5dGVBcnJheSgpKTtcblx0XHRcdHB1YiA9IG5ldyBCdWZmZXIodGhpcy5fZWNQYXJhbXMuZ2V0Q3VydmUoKS5cblx0XHRcdCAgICBlbmNvZGVQb2ludEhleChwdWIpLCAnaGV4Jyk7XG5cblx0XHRcdHRoaXMuX3ByaXYgPSBuZXcgRUNQcml2YXRlKHRoaXMuX2VjUGFyYW1zLCBwcml2KTtcblxuXHRcdFx0cGFydHMucHVzaCh7bmFtZTogJ2N1cnZlJyxcblx0XHRcdCAgICBkYXRhOiBuZXcgQnVmZmVyKHRoaXMuX2N1cnZlKX0pO1xuXHRcdFx0cGFydHMucHVzaCh7bmFtZTogJ1EnLCBkYXRhOiBwdWJ9KTtcblx0XHRcdHBhcnRzLnB1c2goe25hbWU6ICdkJywgZGF0YTogcHJpdn0pO1xuXG5cdFx0XHR0aGlzLl9rZXkgPSBuZXcgUHJpdmF0ZUtleSh7XG5cdFx0XHRcdHR5cGU6ICdlY2RzYScsXG5cdFx0XHRcdGN1cnZlOiB0aGlzLl9jdXJ2ZSxcblx0XHRcdFx0cGFydHM6IHBhcnRzXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuX2lzUHJpdiA9IHRydWU7XG5cdFx0XHRyZXR1cm4gKHRoaXMuX2tleSk7XG5cdFx0fVxuXG5cdH0gZWxzZSBpZiAodGhpcy5fYWxnbyA9PT0gJ2N1cnZlMjU1MTknKSB7XG5cdFx0cHJpdiA9IGVkLmRoLmdlbmVyYXRlS2V5KCk7XG5cdFx0cHViID0gZWQuZGgucHVibGljS2V5KHByaXYpO1xuXHRcdHRoaXMuX3ByaXYgPSBwcml2ID0gbmV3IEJ1ZmZlcihwcml2LCAnYmluYXJ5Jyk7XG5cdFx0cHViID0gbmV3IEJ1ZmZlcihwdWIsICdiaW5hcnknKTtcblxuXHRcdHBhcnRzLnB1c2goe25hbWU6ICdSJywgZGF0YTogcHVifSk7XG5cdFx0cGFydHMucHVzaCh7bmFtZTogJ3InLCBkYXRhOiBCdWZmZXIuY29uY2F0KFtwcml2LCBwdWJdKX0pO1xuXHRcdHRoaXMuX2tleSA9IG5ldyBQcml2YXRlS2V5KHtcblx0XHRcdHR5cGU6ICdjdXJ2ZTI1NTE5Jyxcblx0XHRcdHBhcnRzOiBwYXJ0c1xuXHRcdH0pO1xuXHRcdHRoaXMuX2lzUHJpdiA9IHRydWU7XG5cdFx0cmV0dXJuICh0aGlzLl9rZXkpO1xuXHR9XG5cblx0dGhyb3cgKG5ldyBFcnJvcignSW52YWxpZCBhbGdvcml0aG06ICcgKyB0aGlzLl9hbGdvKSk7XG59O1xuRGlmZmllSGVsbG1hbi5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzID0gRGlmZmllSGVsbG1hbi5wcm90b3R5cGUuZ2VuZXJhdGVLZXk7XG5cbi8qIFRoZXNlIGFyZSBoZWxwZXJzIGZvciB1c2luZyBlY2MtanNibiAoZm9yIG5vZGUgMC4xMCBjb21wYXRpYmlsaXR5KS4gKi9cblxuZnVuY3Rpb24gWDlFQ1BhcmFtZXRlcnMobmFtZSkge1xuXHR2YXIgcGFyYW1zID0gYWxncy5jdXJ2ZXNbbmFtZV07XG5cdGFzc2VydC5vYmplY3QocGFyYW1zKTtcblxuXHR2YXIgcCA9IG5ldyBqc2JuKHBhcmFtcy5wKTtcblx0dmFyIGEgPSBuZXcganNibihwYXJhbXMuYSk7XG5cdHZhciBiID0gbmV3IGpzYm4ocGFyYW1zLmIpO1xuXHR2YXIgbiA9IG5ldyBqc2JuKHBhcmFtcy5uKTtcblx0dmFyIGggPSBqc2JuLk9ORTtcblx0dmFyIGN1cnZlID0gbmV3IGVjLkVDQ3VydmVGcChwLCBhLCBiKTtcblx0dmFyIEcgPSBjdXJ2ZS5kZWNvZGVQb2ludEhleChwYXJhbXMuRy50b1N0cmluZygnaGV4JykpO1xuXG5cdHRoaXMuY3VydmUgPSBjdXJ2ZTtcblx0dGhpcy5nID0gRztcblx0dGhpcy5uID0gbjtcblx0dGhpcy5oID0gaDtcbn1cblg5RUNQYXJhbWV0ZXJzLnByb3RvdHlwZS5nZXRDdXJ2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLmN1cnZlKTsgfTtcblg5RUNQYXJhbWV0ZXJzLnByb3RvdHlwZS5nZXRHID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuZyk7IH07XG5YOUVDUGFyYW1ldGVycy5wcm90b3R5cGUuZ2V0TiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLm4pOyB9O1xuWDlFQ1BhcmFtZXRlcnMucHJvdG90eXBlLmdldEggPSBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5oKTsgfTtcblxuZnVuY3Rpb24gRUNQdWJsaWMocGFyYW1zLCBidWZmZXIpIHtcblx0dGhpcy5fcGFyYW1zID0gcGFyYW1zO1xuXHRpZiAoYnVmZmVyWzBdID09PSAweDAwKVxuXHRcdGJ1ZmZlciA9IGJ1ZmZlci5zbGljZSgxKTtcblx0dGhpcy5fcHViID0gcGFyYW1zLmdldEN1cnZlKCkuZGVjb2RlUG9pbnRIZXgoYnVmZmVyLnRvU3RyaW5nKCdoZXgnKSk7XG59XG5cbmZ1bmN0aW9uIEVDUHJpdmF0ZShwYXJhbXMsIGJ1ZmZlcikge1xuXHR0aGlzLl9wYXJhbXMgPSBwYXJhbXM7XG5cdHRoaXMuX3ByaXYgPSBuZXcganNibih1dGlscy5tcE5vcm1hbGl6ZShidWZmZXIpKTtcbn1cbkVDUHJpdmF0ZS5wcm90b3R5cGUuZGVyaXZlU2hhcmVkU2VjcmV0ID0gZnVuY3Rpb24gKHB1YktleSkge1xuXHRhc3NlcnQub2socHViS2V5IGluc3RhbmNlb2YgRUNQdWJsaWMpO1xuXHR2YXIgUyA9IHB1YktleS5fcHViLm11bHRpcGx5KHRoaXMuX3ByaXYpO1xuXHRyZXR1cm4gKG5ldyBCdWZmZXIoUy5nZXRYKCkudG9CaWdJbnRlZ2VyKCkudG9CeXRlQXJyYXkoKSkpO1xufTtcblxuZnVuY3Rpb24gZ2VuZXJhdGVFRDI1NTE5KCkge1xuXHRpZiAobmFjbCA9PT0gdW5kZWZpbmVkKVxuXHRcdG5hY2wgPSByZXF1aXJlKCd0d2VldG5hY2wnKTtcblxuXHR2YXIgcGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyKCk7XG5cdHZhciBwcml2ID0gbmV3IEJ1ZmZlcihwYWlyLnNlY3JldEtleSk7XG5cdHZhciBwdWIgPSBuZXcgQnVmZmVyKHBhaXIucHVibGljS2V5KTtcblx0YXNzZXJ0LnN0cmljdEVxdWFsKHByaXYubGVuZ3RoLCA2NCk7XG5cdGFzc2VydC5zdHJpY3RFcXVhbChwdWIubGVuZ3RoLCAzMik7XG5cblx0dmFyIHBhcnRzID0gW107XG5cdHBhcnRzLnB1c2goe25hbWU6ICdSJywgZGF0YTogcHVifSk7XG5cdHBhcnRzLnB1c2goe25hbWU6ICdyJywgZGF0YTogcHJpdn0pO1xuXHR2YXIga2V5ID0gbmV3IFByaXZhdGVLZXkoe1xuXHRcdHR5cGU6ICdlZDI1NTE5Jyxcblx0XHRwYXJ0czogcGFydHNcblx0fSk7XG5cdHJldHVybiAoa2V5KTtcbn1cblxuLyogR2VuZXJhdGVzIGEgbmV3IEVDRFNBIHByaXZhdGUga2V5IG9uIGEgZ2l2ZW4gY3VydmUuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUVDRFNBKGN1cnZlKSB7XG5cdHZhciBwYXJ0cyA9IFtdO1xuXHR2YXIga2V5O1xuXG5cdGlmIChDUllQVE9fSEFWRV9FQ0RIKSB7XG5cdFx0Lypcblx0XHQgKiBOb2RlIGNyeXB0byBkb2Vzbid0IGV4cG9zZSBrZXkgZ2VuZXJhdGlvbiBkaXJlY3RseSwgYnV0IHRoZVxuXHRcdCAqIEVDREggaW5zdGFuY2VzIGNhbiBnZW5lcmF0ZSBrZXlzLiBJdCB0dXJucyBvdXQgdGhpcyBqdXN0XG5cdFx0ICogY2FsbHMgaW50byB0aGUgT3BlblNTTCBnZW5lcmljIGtleSBnZW5lcmF0b3IsIGFuZCB3ZSBjYW5cblx0XHQgKiByZWFkIGl0cyBvdXRwdXQgaGFwcGlseSB3aXRob3V0IGRvaW5nIGFuIGFjdHVhbCBESC4gU28gd2Vcblx0XHQgKiB1c2UgdGhhdCBoZXJlLlxuXHRcdCAqL1xuXHRcdHZhciBvc0N1cnZlID0ge1xuXHRcdFx0J25pc3RwMjU2JzogJ3ByaW1lMjU2djEnLFxuXHRcdFx0J25pc3RwMzg0JzogJ3NlY3AzODRyMScsXG5cdFx0XHQnbmlzdHA1MjEnOiAnc2VjcDUyMXIxJ1xuXHRcdH1bY3VydmVdO1xuXG5cdFx0dmFyIGRoID0gY3J5cHRvLmNyZWF0ZUVDREgob3NDdXJ2ZSk7XG5cdFx0ZGguZ2VuZXJhdGVLZXlzKCk7XG5cblx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAnY3VydmUnLFxuXHRcdCAgICBkYXRhOiBuZXcgQnVmZmVyKGN1cnZlKX0pO1xuXHRcdHBhcnRzLnB1c2goe25hbWU6ICdRJywgZGF0YTogZGguZ2V0UHVibGljS2V5KCl9KTtcblx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAnZCcsIGRhdGE6IGRoLmdldFByaXZhdGVLZXkoKX0pO1xuXG5cdFx0a2V5ID0gbmV3IFByaXZhdGVLZXkoe1xuXHRcdFx0dHlwZTogJ2VjZHNhJyxcblx0XHRcdGN1cnZlOiBjdXJ2ZSxcblx0XHRcdHBhcnRzOiBwYXJ0c1xuXHRcdH0pO1xuXHRcdHJldHVybiAoa2V5KTtcblxuXHR9IGVsc2Uge1xuXHRcdGlmIChlY2RoID09PSB1bmRlZmluZWQpXG5cdFx0XHRlY2RoID0gcmVxdWlyZSgnZWNjLWpzYm4nKTtcblx0XHRpZiAoZWMgPT09IHVuZGVmaW5lZClcblx0XHRcdGVjID0gcmVxdWlyZSgnZWNjLWpzYm4vbGliL2VjJyk7XG5cdFx0aWYgKGpzYm4gPT09IHVuZGVmaW5lZClcblx0XHRcdGpzYm4gPSByZXF1aXJlKCdqc2JuJykuQmlnSW50ZWdlcjtcblxuXHRcdHZhciBlY1BhcmFtcyA9IG5ldyBYOUVDUGFyYW1ldGVycyhjdXJ2ZSk7XG5cblx0XHQvKiBUaGlzIGFsZ29yaXRobSB0YWtlbiBmcm9tIEZJUFMgUFVCIDE4Ni00IChzZWN0aW9uIEIuNC4xKSAqL1xuXHRcdHZhciBuID0gZWNQYXJhbXMuZ2V0TigpO1xuXHRcdC8qXG5cdFx0ICogVGhlIGNyeXB0by5yYW5kb21CeXRlcygpIGZ1bmN0aW9uIGNhbiBvbmx5IGdpdmUgdXMgd2hvbGVcblx0XHQgKiBieXRlcywgc28gdGFraW5nIGEgbm9kIGZyb20gWDkuNjIsIHdlIHJvdW5kIHVwLlxuXHRcdCAqL1xuXHRcdHZhciBjQnl0ZUxlbiA9IE1hdGguY2VpbCgobi5iaXRMZW5ndGgoKSArIDY0KSAvIDgpO1xuXHRcdHZhciBjID0gbmV3IGpzYm4oY3J5cHRvLnJhbmRvbUJ5dGVzKGNCeXRlTGVuKSk7XG5cblx0XHR2YXIgbjEgPSBuLnN1YnRyYWN0KGpzYm4uT05FKTtcblx0XHR2YXIgcHJpdiA9IGMubW9kKG4xKS5hZGQoanNibi5PTkUpO1xuXHRcdHZhciBwdWIgPSBlY1BhcmFtcy5nZXRHKCkubXVsdGlwbHkocHJpdik7XG5cblx0XHRwcml2ID0gbmV3IEJ1ZmZlcihwcml2LnRvQnl0ZUFycmF5KCkpO1xuXHRcdHB1YiA9IG5ldyBCdWZmZXIoZWNQYXJhbXMuZ2V0Q3VydmUoKS5cblx0XHQgICAgZW5jb2RlUG9pbnRIZXgocHViKSwgJ2hleCcpO1xuXG5cdFx0cGFydHMucHVzaCh7bmFtZTogJ2N1cnZlJywgZGF0YTogbmV3IEJ1ZmZlcihjdXJ2ZSl9KTtcblx0XHRwYXJ0cy5wdXNoKHtuYW1lOiAnUScsIGRhdGE6IHB1Yn0pO1xuXHRcdHBhcnRzLnB1c2goe25hbWU6ICdkJywgZGF0YTogcHJpdn0pO1xuXG5cdFx0a2V5ID0gbmV3IFByaXZhdGVLZXkoe1xuXHRcdFx0dHlwZTogJ2VjZHNhJyxcblx0XHRcdGN1cnZlOiBjdXJ2ZSxcblx0XHRcdHBhcnRzOiBwYXJ0c1xuXHRcdH0pO1xuXHRcdHJldHVybiAoa2V5KTtcblx0fVxufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRWZXJpZmllcjogVmVyaWZpZXIsXG5cdFNpZ25lcjogU2lnbmVyXG59O1xuXG52YXIgbmFjbDtcbnZhciBzdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgU2lnbmF0dXJlID0gcmVxdWlyZSgnLi9zaWduYXR1cmUnKTtcblxuZnVuY3Rpb24gVmVyaWZpZXIoa2V5LCBoYXNoQWxnbykge1xuXHRpZiAobmFjbCA9PT0gdW5kZWZpbmVkKVxuXHRcdG5hY2wgPSByZXF1aXJlKCd0d2VldG5hY2wnKTtcblxuXHRpZiAoaGFzaEFsZ28udG9Mb3dlckNhc2UoKSAhPT0gJ3NoYTUxMicpXG5cdFx0dGhyb3cgKG5ldyBFcnJvcignRUQyNTUxOSBvbmx5IHN1cHBvcnRzIHRoZSB1c2Ugb2YgJyArXG5cdFx0ICAgICdTSEEtNTEyIGhhc2hlcycpKTtcblxuXHR0aGlzLmtleSA9IGtleTtcblx0dGhpcy5jaHVua3MgPSBbXTtcblxuXHRzdHJlYW0uV3JpdGFibGUuY2FsbCh0aGlzLCB7fSk7XG59XG51dGlsLmluaGVyaXRzKFZlcmlmaWVyLCBzdHJlYW0uV3JpdGFibGUpO1xuXG5WZXJpZmllci5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmMsIGNiKSB7XG5cdHRoaXMuY2h1bmtzLnB1c2goY2h1bmspO1xuXHRjYigpO1xufTtcblxuVmVyaWZpZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChjaHVuaykge1xuXHRpZiAodHlwZW9mIChjaHVuaykgPT09ICdzdHJpbmcnKVxuXHRcdGNodW5rID0gbmV3IEJ1ZmZlcihjaHVuaywgJ2JpbmFyeScpO1xuXHR0aGlzLmNodW5rcy5wdXNoKGNodW5rKTtcbn07XG5cblZlcmlmaWVyLnByb3RvdHlwZS52ZXJpZnkgPSBmdW5jdGlvbiAoc2lnbmF0dXJlLCBmbXQpIHtcblx0dmFyIHNpZztcblx0aWYgKFNpZ25hdHVyZS5pc1NpZ25hdHVyZShzaWduYXR1cmUsIFsyLCAwXSkpIHtcblx0XHRpZiAoc2lnbmF0dXJlLnR5cGUgIT09ICdlZDI1NTE5Jylcblx0XHRcdHJldHVybiAoZmFsc2UpO1xuXHRcdHNpZyA9IHNpZ25hdHVyZS50b0J1ZmZlcigncmF3Jyk7XG5cblx0fSBlbHNlIGlmICh0eXBlb2YgKHNpZ25hdHVyZSkgPT09ICdzdHJpbmcnKSB7XG5cdFx0c2lnID0gbmV3IEJ1ZmZlcihzaWduYXR1cmUsICdiYXNlNjQnKTtcblxuXHR9IGVsc2UgaWYgKFNpZ25hdHVyZS5pc1NpZ25hdHVyZShzaWduYXR1cmUsIFsxLCAwXSkpIHtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdzaWduYXR1cmUgd2FzIGNyZWF0ZWQgYnkgdG9vIG9sZCAnICtcblx0XHQgICAgJ2EgdmVyc2lvbiBvZiBzc2hwayBhbmQgY2Fubm90IGJlIHZlcmlmaWVkJykpO1xuXHR9XG5cblx0YXNzZXJ0LmJ1ZmZlcihzaWcpO1xuXHRyZXR1cm4gKG5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnkoXG5cdCAgICBuZXcgVWludDhBcnJheShCdWZmZXIuY29uY2F0KHRoaXMuY2h1bmtzKSksXG5cdCAgICBuZXcgVWludDhBcnJheShzaWcpLFxuXHQgICAgbmV3IFVpbnQ4QXJyYXkodGhpcy5rZXkucGFydC5SLmRhdGEpKSk7XG59O1xuXG5mdW5jdGlvbiBTaWduZXIoa2V5LCBoYXNoQWxnbykge1xuXHRpZiAobmFjbCA9PT0gdW5kZWZpbmVkKVxuXHRcdG5hY2wgPSByZXF1aXJlKCd0d2VldG5hY2wnKTtcblxuXHRpZiAoaGFzaEFsZ28udG9Mb3dlckNhc2UoKSAhPT0gJ3NoYTUxMicpXG5cdFx0dGhyb3cgKG5ldyBFcnJvcignRUQyNTUxOSBvbmx5IHN1cHBvcnRzIHRoZSB1c2Ugb2YgJyArXG5cdFx0ICAgICdTSEEtNTEyIGhhc2hlcycpKTtcblxuXHR0aGlzLmtleSA9IGtleTtcblx0dGhpcy5jaHVua3MgPSBbXTtcblxuXHRzdHJlYW0uV3JpdGFibGUuY2FsbCh0aGlzLCB7fSk7XG59XG51dGlsLmluaGVyaXRzKFNpZ25lciwgc3RyZWFtLldyaXRhYmxlKTtcblxuU2lnbmVyLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuYywgY2IpIHtcblx0dGhpcy5jaHVua3MucHVzaChjaHVuayk7XG5cdGNiKCk7XG59O1xuXG5TaWduZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChjaHVuaykge1xuXHRpZiAodHlwZW9mIChjaHVuaykgPT09ICdzdHJpbmcnKVxuXHRcdGNodW5rID0gbmV3IEJ1ZmZlcihjaHVuaywgJ2JpbmFyeScpO1xuXHR0aGlzLmNodW5rcy5wdXNoKGNodW5rKTtcbn07XG5cblNpZ25lci5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHNpZyA9IG5hY2wuc2lnbi5kZXRhY2hlZChcblx0ICAgIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5jb25jYXQodGhpcy5jaHVua3MpKSxcblx0ICAgIG5ldyBVaW50OEFycmF5KHRoaXMua2V5LnBhcnQuci5kYXRhKSk7XG5cdHZhciBzaWdCdWYgPSBuZXcgQnVmZmVyKHNpZyk7XG5cdHZhciBzaWdPYmogPSBTaWduYXR1cmUucGFyc2Uoc2lnQnVmLCAnZWQyNTUxOScsICdyYXcnKTtcblx0c2lnT2JqLmhhc2hBbGdvcml0aG0gPSAnc2hhNTEyJztcblx0cmV0dXJuIChzaWdPYmopO1xufTtcbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBGaW5nZXJwcmludEZvcm1hdEVycm9yKGZwLCBmb3JtYXQpIHtcblx0aWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuXHRcdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEZpbmdlcnByaW50Rm9ybWF0RXJyb3IpO1xuXHR0aGlzLm5hbWUgPSAnRmluZ2VycHJpbnRGb3JtYXRFcnJvcic7XG5cdHRoaXMuZmluZ2VycHJpbnQgPSBmcDtcblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG5cdHRoaXMubWVzc2FnZSA9ICdGaW5nZXJwcmludCBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCwgb3IgaXMgaW52YWxpZDogJztcblx0aWYgKGZwICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5tZXNzYWdlICs9ICcgZmluZ2VycHJpbnQgPSAnICsgZnA7XG5cdGlmIChmb3JtYXQgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLm1lc3NhZ2UgKz0gJyBmb3JtYXQgPSAnICsgZm9ybWF0O1xufVxudXRpbC5pbmhlcml0cyhGaW5nZXJwcmludEZvcm1hdEVycm9yLCBFcnJvcik7XG5cbmZ1bmN0aW9uIEludmFsaWRBbGdvcml0aG1FcnJvcihhbGcpIHtcblx0aWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuXHRcdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEludmFsaWRBbGdvcml0aG1FcnJvcik7XG5cdHRoaXMubmFtZSA9ICdJbnZhbGlkQWxnb3JpdGhtRXJyb3InO1xuXHR0aGlzLmFsZ29yaXRobSA9IGFsZztcblx0dGhpcy5tZXNzYWdlID0gJ0FsZ29yaXRobSBcIicgKyBhbGcgKyAnXCIgaXMgbm90IHN1cHBvcnRlZCc7XG59XG51dGlsLmluaGVyaXRzKEludmFsaWRBbGdvcml0aG1FcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiBLZXlQYXJzZUVycm9yKG5hbWUsIGZvcm1hdCwgaW5uZXJFcnIpIHtcblx0aWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuXHRcdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEtleVBhcnNlRXJyb3IpO1xuXHR0aGlzLm5hbWUgPSAnS2V5UGFyc2VFcnJvcic7XG5cdHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuXHR0aGlzLmtleU5hbWUgPSBuYW1lO1xuXHR0aGlzLmlubmVyRXJyID0gaW5uZXJFcnI7XG5cdHRoaXMubWVzc2FnZSA9ICdGYWlsZWQgdG8gcGFyc2UgJyArIG5hbWUgKyAnIGFzIGEgdmFsaWQgJyArIGZvcm1hdCArXG5cdCAgICAnIGZvcm1hdCBrZXk6ICcgKyBpbm5lckVyci5tZXNzYWdlO1xufVxudXRpbC5pbmhlcml0cyhLZXlQYXJzZUVycm9yLCBFcnJvcik7XG5cbmZ1bmN0aW9uIFNpZ25hdHVyZVBhcnNlRXJyb3IodHlwZSwgZm9ybWF0LCBpbm5lckVycikge1xuXHRpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG5cdFx0RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgU2lnbmF0dXJlUGFyc2VFcnJvcik7XG5cdHRoaXMubmFtZSA9ICdTaWduYXR1cmVQYXJzZUVycm9yJztcblx0dGhpcy50eXBlID0gdHlwZTtcblx0dGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG5cdHRoaXMuaW5uZXJFcnIgPSBpbm5lckVycjtcblx0dGhpcy5tZXNzYWdlID0gJ0ZhaWxlZCB0byBwYXJzZSB0aGUgZ2l2ZW4gZGF0YSBhcyBhICcgKyB0eXBlICtcblx0ICAgICcgc2lnbmF0dXJlIGluICcgKyBmb3JtYXQgKyAnIGZvcm1hdDogJyArIGlubmVyRXJyLm1lc3NhZ2U7XG59XG51dGlsLmluaGVyaXRzKFNpZ25hdHVyZVBhcnNlRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gQ2VydGlmaWNhdGVQYXJzZUVycm9yKG5hbWUsIGZvcm1hdCwgaW5uZXJFcnIpIHtcblx0aWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuXHRcdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENlcnRpZmljYXRlUGFyc2VFcnJvcik7XG5cdHRoaXMubmFtZSA9ICdDZXJ0aWZpY2F0ZVBhcnNlRXJyb3InO1xuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdDtcblx0dGhpcy5jZXJ0TmFtZSA9IG5hbWU7XG5cdHRoaXMuaW5uZXJFcnIgPSBpbm5lckVycjtcblx0dGhpcy5tZXNzYWdlID0gJ0ZhaWxlZCB0byBwYXJzZSAnICsgbmFtZSArICcgYXMgYSB2YWxpZCAnICsgZm9ybWF0ICtcblx0ICAgICcgZm9ybWF0IGNlcnRpZmljYXRlOiAnICsgaW5uZXJFcnIubWVzc2FnZTtcbn1cbnV0aWwuaW5oZXJpdHMoQ2VydGlmaWNhdGVQYXJzZUVycm9yLCBFcnJvcik7XG5cbmZ1bmN0aW9uIEtleUVuY3J5cHRlZEVycm9yKG5hbWUsIGZvcm1hdCkge1xuXHRpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpXG5cdFx0RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgS2V5RW5jcnlwdGVkRXJyb3IpO1xuXHR0aGlzLm5hbWUgPSAnS2V5RW5jcnlwdGVkRXJyb3InO1xuXHR0aGlzLmZvcm1hdCA9IGZvcm1hdDtcblx0dGhpcy5rZXlOYW1lID0gbmFtZTtcblx0dGhpcy5tZXNzYWdlID0gJ1RoZSAnICsgZm9ybWF0ICsgJyBmb3JtYXQga2V5ICcgKyBuYW1lICsgJyBpcyAnICtcblx0ICAgICdlbmNyeXB0ZWQgKHBhc3N3b3JkLXByb3RlY3RlZCksIGFuZCBubyBwYXNzcGhyYXNlIHdhcyAnICtcblx0ICAgICdwcm92aWRlZCBpbiBgb3B0aW9uc2AnO1xufVxudXRpbC5pbmhlcml0cyhLZXlFbmNyeXB0ZWRFcnJvciwgRXJyb3IpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0RmluZ2VycHJpbnRGb3JtYXRFcnJvcjogRmluZ2VycHJpbnRGb3JtYXRFcnJvcixcblx0SW52YWxpZEFsZ29yaXRobUVycm9yOiBJbnZhbGlkQWxnb3JpdGhtRXJyb3IsXG5cdEtleVBhcnNlRXJyb3I6IEtleVBhcnNlRXJyb3IsXG5cdFNpZ25hdHVyZVBhcnNlRXJyb3I6IFNpZ25hdHVyZVBhcnNlRXJyb3IsXG5cdEtleUVuY3J5cHRlZEVycm9yOiBLZXlFbmNyeXB0ZWRFcnJvcixcblx0Q2VydGlmaWNhdGVQYXJzZUVycm9yOiBDZXJ0aWZpY2F0ZVBhcnNlRXJyb3Jcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxNSBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSBGaW5nZXJwcmludDtcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgYWxncyA9IHJlcXVpcmUoJy4vYWxncycpO1xudmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xudmFyIGVycnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xudmFyIEtleSA9IHJlcXVpcmUoJy4va2V5Jyk7XG52YXIgQ2VydGlmaWNhdGUgPSByZXF1aXJlKCcuL2NlcnRpZmljYXRlJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbnZhciBGaW5nZXJwcmludEZvcm1hdEVycm9yID0gZXJycy5GaW5nZXJwcmludEZvcm1hdEVycm9yO1xudmFyIEludmFsaWRBbGdvcml0aG1FcnJvciA9IGVycnMuSW52YWxpZEFsZ29yaXRobUVycm9yO1xuXG5mdW5jdGlvbiBGaW5nZXJwcmludChvcHRzKSB7XG5cdGFzc2VydC5vYmplY3Qob3B0cywgJ29wdGlvbnMnKTtcblx0YXNzZXJ0LnN0cmluZyhvcHRzLnR5cGUsICdvcHRpb25zLnR5cGUnKTtcblx0YXNzZXJ0LmJ1ZmZlcihvcHRzLmhhc2gsICdvcHRpb25zLmhhc2gnKTtcblx0YXNzZXJ0LnN0cmluZyhvcHRzLmFsZ29yaXRobSwgJ29wdGlvbnMuYWxnb3JpdGhtJyk7XG5cblx0dGhpcy5hbGdvcml0aG0gPSBvcHRzLmFsZ29yaXRobS50b0xvd2VyQ2FzZSgpO1xuXHRpZiAoYWxncy5oYXNoQWxnc1t0aGlzLmFsZ29yaXRobV0gIT09IHRydWUpXG5cdFx0dGhyb3cgKG5ldyBJbnZhbGlkQWxnb3JpdGhtRXJyb3IodGhpcy5hbGdvcml0aG0pKTtcblxuXHR0aGlzLmhhc2ggPSBvcHRzLmhhc2g7XG5cdHRoaXMudHlwZSA9IG9wdHMudHlwZTtcbn1cblxuRmluZ2VycHJpbnQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuXHRpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcblx0XHRpZiAodGhpcy5hbGdvcml0aG0gPT09ICdtZDUnKVxuXHRcdFx0Zm9ybWF0ID0gJ2hleCc7XG5cdFx0ZWxzZVxuXHRcdFx0Zm9ybWF0ID0gJ2Jhc2U2NCc7XG5cdH1cblx0YXNzZXJ0LnN0cmluZyhmb3JtYXQpO1xuXG5cdHN3aXRjaCAoZm9ybWF0KSB7XG5cdGNhc2UgJ2hleCc6XG5cdFx0cmV0dXJuIChhZGRDb2xvbnModGhpcy5oYXNoLnRvU3RyaW5nKCdoZXgnKSkpO1xuXHRjYXNlICdiYXNlNjQnOlxuXHRcdHJldHVybiAoc3NoQmFzZTY0Rm9ybWF0KHRoaXMuYWxnb3JpdGhtLFxuXHRcdCAgICB0aGlzLmhhc2gudG9TdHJpbmcoJ2Jhc2U2NCcpKSk7XG5cdGRlZmF1bHQ6XG5cdFx0dGhyb3cgKG5ldyBGaW5nZXJwcmludEZvcm1hdEVycm9yKHVuZGVmaW5lZCwgZm9ybWF0KSk7XG5cdH1cbn07XG5cbkZpbmdlcnByaW50LnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24gKG90aGVyKSB7XG5cdGFzc2VydC5vYmplY3Qob3RoZXIsICdrZXkgb3IgY2VydGlmaWNhdGUnKTtcblx0aWYgKHRoaXMudHlwZSA9PT0gJ2tleScpIHtcblx0XHR1dGlscy5hc3NlcnRDb21wYXRpYmxlKG90aGVyLCBLZXksIFsxLCAwXSwgJ2tleScpO1xuXHR9IGVsc2Uge1xuXHRcdHV0aWxzLmFzc2VydENvbXBhdGlibGUob3RoZXIsIENlcnRpZmljYXRlLCBbMSwgMF0sXG5cdFx0ICAgICdjZXJ0aWZpY2F0ZScpO1xuXHR9XG5cblx0dmFyIHRoZWlySGFzaCA9IG90aGVyLmhhc2godGhpcy5hbGdvcml0aG0pO1xuXHR2YXIgdGhlaXJIYXNoMiA9IGNyeXB0by5jcmVhdGVIYXNoKHRoaXMuYWxnb3JpdGhtKS5cblx0ICAgIHVwZGF0ZSh0aGVpckhhc2gpLmRpZ2VzdCgnYmFzZTY0Jyk7XG5cblx0aWYgKHRoaXMuaGFzaDIgPT09IHVuZGVmaW5lZClcblx0XHR0aGlzLmhhc2gyID0gY3J5cHRvLmNyZWF0ZUhhc2godGhpcy5hbGdvcml0aG0pLlxuXHRcdCAgICB1cGRhdGUodGhpcy5oYXNoKS5kaWdlc3QoJ2Jhc2U2NCcpO1xuXG5cdHJldHVybiAodGhpcy5oYXNoMiA9PT0gdGhlaXJIYXNoMik7XG59O1xuXG5GaW5nZXJwcmludC5wYXJzZSA9IGZ1bmN0aW9uIChmcCwgb3B0aW9ucykge1xuXHRhc3NlcnQuc3RyaW5nKGZwLCAnZmluZ2VycHJpbnQnKTtcblxuXHR2YXIgYWxnLCBoYXNoLCBlbkFsZ3M7XG5cdGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG5cdFx0ZW5BbGdzID0gb3B0aW9ucztcblx0XHRvcHRpb25zID0ge307XG5cdH1cblx0YXNzZXJ0Lm9wdGlvbmFsT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJyk7XG5cdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0b3B0aW9ucyA9IHt9O1xuXHRpZiAob3B0aW9ucy5lbkFsZ3MgIT09IHVuZGVmaW5lZClcblx0XHRlbkFsZ3MgPSBvcHRpb25zLmVuQWxncztcblx0YXNzZXJ0Lm9wdGlvbmFsQXJyYXlPZlN0cmluZyhlbkFsZ3MsICdhbGdvcml0aG1zJyk7XG5cblx0dmFyIHBhcnRzID0gZnAuc3BsaXQoJzonKTtcblx0aWYgKHBhcnRzLmxlbmd0aCA9PSAyKSB7XG5cdFx0YWxnID0gcGFydHNbMF0udG9Mb3dlckNhc2UoKTtcblx0XHQvKkpTU1RZTEVEKi9cblx0XHR2YXIgYmFzZTY0UkUgPSAvXltBLVphLXowLTkrXFwvPV0rJC87XG5cdFx0aWYgKCFiYXNlNjRSRS50ZXN0KHBhcnRzWzFdKSlcblx0XHRcdHRocm93IChuZXcgRmluZ2VycHJpbnRGb3JtYXRFcnJvcihmcCkpO1xuXHRcdHRyeSB7XG5cdFx0XHRoYXNoID0gbmV3IEJ1ZmZlcihwYXJ0c1sxXSwgJ2Jhc2U2NCcpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRocm93IChuZXcgRmluZ2VycHJpbnRGb3JtYXRFcnJvcihmcCkpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0YWxnID0gJ21kNSc7XG5cdFx0aWYgKHBhcnRzWzBdLnRvTG93ZXJDYXNlKCkgPT09ICdtZDUnKVxuXHRcdFx0cGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcblx0XHRwYXJ0cyA9IHBhcnRzLmpvaW4oJycpO1xuXHRcdC8qSlNTVFlMRUQqL1xuXHRcdHZhciBtZDVSRSA9IC9eW2EtZkEtRjAtOV0rJC87XG5cdFx0aWYgKCFtZDVSRS50ZXN0KHBhcnRzKSlcblx0XHRcdHRocm93IChuZXcgRmluZ2VycHJpbnRGb3JtYXRFcnJvcihmcCkpO1xuXHRcdHRyeSB7XG5cdFx0XHRoYXNoID0gbmV3IEJ1ZmZlcihwYXJ0cywgJ2hleCcpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRocm93IChuZXcgRmluZ2VycHJpbnRGb3JtYXRFcnJvcihmcCkpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChhbGcgPT09IHVuZGVmaW5lZClcblx0XHR0aHJvdyAobmV3IEZpbmdlcnByaW50Rm9ybWF0RXJyb3IoZnApKTtcblxuXHRpZiAoYWxncy5oYXNoQWxnc1thbGddID09PSB1bmRlZmluZWQpXG5cdFx0dGhyb3cgKG5ldyBJbnZhbGlkQWxnb3JpdGhtRXJyb3IoYWxnKSk7XG5cblx0aWYgKGVuQWxncyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0ZW5BbGdzID0gZW5BbGdzLm1hcChmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS50b0xvd2VyQ2FzZSgpOyB9KTtcblx0XHRpZiAoZW5BbGdzLmluZGV4T2YoYWxnKSA9PT0gLTEpXG5cdFx0XHR0aHJvdyAobmV3IEludmFsaWRBbGdvcml0aG1FcnJvcihhbGcpKTtcblx0fVxuXG5cdHJldHVybiAobmV3IEZpbmdlcnByaW50KHtcblx0XHRhbGdvcml0aG06IGFsZyxcblx0XHRoYXNoOiBoYXNoLFxuXHRcdHR5cGU6IG9wdGlvbnMudHlwZSB8fCAna2V5J1xuXHR9KSk7XG59O1xuXG5mdW5jdGlvbiBhZGRDb2xvbnMocykge1xuXHQvKkpTU1RZTEVEKi9cblx0cmV0dXJuIChzLnJlcGxhY2UoLyguezJ9KSg/PS4pL2csICckMTonKSk7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFN0cmlwKHMpIHtcblx0LypKU1NUWUxFRCovXG5cdHJldHVybiAocy5yZXBsYWNlKC89KiQvLCAnJykpO1xufVxuXG5mdW5jdGlvbiBzc2hCYXNlNjRGb3JtYXQoYWxnLCBoKSB7XG5cdHJldHVybiAoYWxnLnRvVXBwZXJDYXNlKCkgKyAnOicgKyBiYXNlNjRTdHJpcChoKSk7XG59XG5cbkZpbmdlcnByaW50LmlzRmluZ2VycHJpbnQgPSBmdW5jdGlvbiAob2JqLCB2ZXIpIHtcblx0cmV0dXJuICh1dGlscy5pc0NvbXBhdGlibGUob2JqLCBGaW5nZXJwcmludCwgdmVyKSk7XG59O1xuXG4vKlxuICogQVBJIHZlcnNpb25zIGZvciBGaW5nZXJwcmludDpcbiAqIFsxLDBdIC0tIGluaXRpYWwgdmVyXG4gKiBbMSwxXSAtLSBmaXJzdCB0YWdnZWQgdmVyXG4gKi9cbkZpbmdlcnByaW50LnByb3RvdHlwZS5fc3NocGtBcGlWZXJzaW9uID0gWzEsIDFdO1xuXG5GaW5nZXJwcmludC5fb2xkVmVyc2lvbkRldGVjdCA9IGZ1bmN0aW9uIChvYmopIHtcblx0YXNzZXJ0LmZ1bmMob2JqLnRvU3RyaW5nKTtcblx0YXNzZXJ0LmZ1bmMob2JqLm1hdGNoZXMpO1xuXHRyZXR1cm4gKFsxLCAwXSk7XG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRyZWFkOiByZWFkLFxuXHR3cml0ZTogd3JpdGVcbn07XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBLZXkgPSByZXF1aXJlKCcuLi9rZXknKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi4vcHJpdmF0ZS1rZXknKTtcblxudmFyIHBlbSA9IHJlcXVpcmUoJy4vcGVtJyk7XG52YXIgc3NoID0gcmVxdWlyZSgnLi9zc2gnKTtcbnZhciByZmM0MjUzID0gcmVxdWlyZSgnLi9yZmM0MjUzJyk7XG5cbmZ1bmN0aW9uIHJlYWQoYnVmLCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgKGJ1ZikgPT09ICdzdHJpbmcnKSB7XG5cdFx0aWYgKGJ1Zi50cmltKCkubWF0Y2goL15bLV0rWyBdKkJFR0lOLykpXG5cdFx0XHRyZXR1cm4gKHBlbS5yZWFkKGJ1Ziwgb3B0aW9ucykpO1xuXHRcdGlmIChidWYubWF0Y2goL15cXHMqc3NoLVthLXpdLykpXG5cdFx0XHRyZXR1cm4gKHNzaC5yZWFkKGJ1Ziwgb3B0aW9ucykpO1xuXHRcdGlmIChidWYubWF0Y2goL15cXHMqZWNkc2EtLykpXG5cdFx0XHRyZXR1cm4gKHNzaC5yZWFkKGJ1Ziwgb3B0aW9ucykpO1xuXHRcdGJ1ZiA9IG5ldyBCdWZmZXIoYnVmLCAnYmluYXJ5Jyk7XG5cdH0gZWxzZSB7XG5cdFx0YXNzZXJ0LmJ1ZmZlcihidWYpO1xuXHRcdGlmIChmaW5kUEVNSGVhZGVyKGJ1ZikpXG5cdFx0XHRyZXR1cm4gKHBlbS5yZWFkKGJ1Ziwgb3B0aW9ucykpO1xuXHRcdGlmIChmaW5kU1NISGVhZGVyKGJ1ZikpXG5cdFx0XHRyZXR1cm4gKHNzaC5yZWFkKGJ1Ziwgb3B0aW9ucykpO1xuXHR9XG5cdGlmIChidWYucmVhZFVJbnQzMkJFKDApIDwgYnVmLmxlbmd0aClcblx0XHRyZXR1cm4gKHJmYzQyNTMucmVhZChidWYsIG9wdGlvbnMpKTtcblx0dGhyb3cgKG5ldyBFcnJvcignRmFpbGVkIHRvIGF1dG8tZGV0ZWN0IGZvcm1hdCBvZiBrZXknKSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRTU0hIZWFkZXIoYnVmKSB7XG5cdHZhciBvZmZzZXQgPSAwO1xuXHR3aGlsZSAob2Zmc2V0IDwgYnVmLmxlbmd0aCAmJlxuXHQgICAgKGJ1ZltvZmZzZXRdID09PSAzMiB8fCBidWZbb2Zmc2V0XSA9PT0gMTAgfHwgYnVmW29mZnNldF0gPT09IDkpKVxuXHRcdCsrb2Zmc2V0O1xuXHRpZiAob2Zmc2V0ICsgNCA8PSBidWYubGVuZ3RoICYmXG5cdCAgICBidWYuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyA0KS50b1N0cmluZygnYXNjaWknKSA9PT0gJ3NzaC0nKVxuXHRcdHJldHVybiAodHJ1ZSk7XG5cdGlmIChvZmZzZXQgKyA2IDw9IGJ1Zi5sZW5ndGggJiZcblx0ICAgIGJ1Zi5zbGljZShvZmZzZXQsIG9mZnNldCArIDYpLnRvU3RyaW5nKCdhc2NpaScpID09PSAnZWNkc2EtJylcblx0XHRyZXR1cm4gKHRydWUpO1xuXHRyZXR1cm4gKGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gZmluZFBFTUhlYWRlcihidWYpIHtcblx0dmFyIG9mZnNldCA9IDA7XG5cdHdoaWxlIChvZmZzZXQgPCBidWYubGVuZ3RoICYmXG5cdCAgICAoYnVmW29mZnNldF0gPT09IDMyIHx8IGJ1ZltvZmZzZXRdID09PSAxMCkpXG5cdFx0KytvZmZzZXQ7XG5cdGlmIChidWZbb2Zmc2V0XSAhPT0gNDUpXG5cdFx0cmV0dXJuIChmYWxzZSk7XG5cdHdoaWxlIChvZmZzZXQgPCBidWYubGVuZ3RoICYmXG5cdCAgICAoYnVmW29mZnNldF0gPT09IDQ1KSlcblx0XHQrK29mZnNldDtcblx0d2hpbGUgKG9mZnNldCA8IGJ1Zi5sZW5ndGggJiZcblx0ICAgIChidWZbb2Zmc2V0XSA9PT0gMzIpKVxuXHRcdCsrb2Zmc2V0O1xuXHRpZiAob2Zmc2V0ICsgNSA+IGJ1Zi5sZW5ndGggfHxcblx0ICAgIGJ1Zi5zbGljZShvZmZzZXQsIG9mZnNldCArIDUpLnRvU3RyaW5nKCdhc2NpaScpICE9PSAnQkVHSU4nKVxuXHRcdHJldHVybiAoZmFsc2UpO1xuXHRyZXR1cm4gKHRydWUpO1xufVxuXG5mdW5jdGlvbiB3cml0ZShrZXksIG9wdGlvbnMpIHtcblx0dGhyb3cgKG5ldyBFcnJvcignXCJhdXRvXCIgZm9ybWF0IGNhbm5vdCBiZSB1c2VkIGZvciB3cml0aW5nJykpO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTcgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRyZWFkOiByZWFkLFxuXHR2ZXJpZnk6IHZlcmlmeSxcblx0c2lnbjogc2lnbixcblx0c2lnbkFzeW5jOiBzaWduQXN5bmMsXG5cdHdyaXRlOiB3cml0ZSxcblxuXHQvKiBJbnRlcm5hbCBwcml2YXRlIEFQSSAqL1xuXHRmcm9tQnVmZmVyOiBmcm9tQnVmZmVyLFxuXHR0b0J1ZmZlcjogdG9CdWZmZXJcbn07XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIFNTSEJ1ZmZlciA9IHJlcXVpcmUoJy4uL3NzaC1idWZmZXInKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi4vYWxncycpO1xudmFyIEtleSA9IHJlcXVpcmUoJy4uL2tleScpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuLi9wcml2YXRlLWtleScpO1xudmFyIElkZW50aXR5ID0gcmVxdWlyZSgnLi4vaWRlbnRpdHknKTtcbnZhciByZmM0MjUzID0gcmVxdWlyZSgnLi9yZmM0MjUzJyk7XG52YXIgU2lnbmF0dXJlID0gcmVxdWlyZSgnLi4vc2lnbmF0dXJlJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIENlcnRpZmljYXRlID0gcmVxdWlyZSgnLi4vY2VydGlmaWNhdGUnKTtcblxuZnVuY3Rpb24gdmVyaWZ5KGNlcnQsIGtleSkge1xuXHQvKlxuXHQgKiBXZSBhbHdheXMgZ2l2ZSBhbiBpc3N1ZXJLZXksIHNvIGlmIG91ciB2ZXJpZnkoKSBpcyBiZWluZyBjYWxsZWQgdGhlblxuXHQgKiB0aGVyZSB3YXMgbm8gc2lnbmF0dXJlLiBSZXR1cm4gZmFsc2UuXG5cdCAqL1xuXHRyZXR1cm4gKGZhbHNlKTtcbn1cblxudmFyIFRZUEVTID0ge1xuXHQndXNlcic6IDEsXG5cdCdob3N0JzogMlxufTtcbk9iamVjdC5rZXlzKFRZUEVTKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IFRZUEVTW1RZUEVTW2tdXSA9IGs7IH0pO1xuXG52YXIgRUNEU0FfQUxHTyA9IC9eZWNkc2Etc2hhMi0oW15ALV0rKS1jZXJ0LXYwMUBvcGVuc3NoLmNvbSQvO1xuXG5mdW5jdGlvbiByZWFkKGJ1Ziwgb3B0aW9ucykge1xuXHRpZiAoQnVmZmVyLmlzQnVmZmVyKGJ1ZikpXG5cdFx0YnVmID0gYnVmLnRvU3RyaW5nKCdhc2NpaScpO1xuXHR2YXIgcGFydHMgPSBidWYudHJpbSgpLnNwbGl0KC9bIFxcdFxcbl0rL2cpO1xuXHRpZiAocGFydHMubGVuZ3RoIDwgMiB8fCBwYXJ0cy5sZW5ndGggPiAzKVxuXHRcdHRocm93IChuZXcgRXJyb3IoJ05vdCBhIHZhbGlkIFNTSCBjZXJ0aWZpY2F0ZSBsaW5lJykpO1xuXG5cdHZhciBhbGdvID0gcGFydHNbMF07XG5cdHZhciBkYXRhID0gcGFydHNbMV07XG5cblx0ZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgJ2Jhc2U2NCcpO1xuXHRyZXR1cm4gKGZyb21CdWZmZXIoZGF0YSwgYWxnbykpO1xufVxuXG5mdW5jdGlvbiBmcm9tQnVmZmVyKGRhdGEsIGFsZ28sIHBhcnRpYWwpIHtcblx0dmFyIHNzaGJ1ZiA9IG5ldyBTU0hCdWZmZXIoeyBidWZmZXI6IGRhdGEgfSk7XG5cdHZhciBpbm5lckFsZ28gPSBzc2hidWYucmVhZFN0cmluZygpO1xuXHRpZiAoYWxnbyAhPT0gdW5kZWZpbmVkICYmIGlubmVyQWxnbyAhPT0gYWxnbylcblx0XHR0aHJvdyAobmV3IEVycm9yKCdTU0ggY2VydGlmaWNhdGUgYWxnb3JpdGhtIG1pc21hdGNoJykpO1xuXHRpZiAoYWxnbyA9PT0gdW5kZWZpbmVkKVxuXHRcdGFsZ28gPSBpbm5lckFsZ287XG5cblx0dmFyIGNlcnQgPSB7fTtcblx0Y2VydC5zaWduYXR1cmVzID0ge307XG5cdGNlcnQuc2lnbmF0dXJlcy5vcGVuc3NoID0ge307XG5cblx0Y2VydC5zaWduYXR1cmVzLm9wZW5zc2gubm9uY2UgPSBzc2hidWYucmVhZEJ1ZmZlcigpO1xuXG5cdHZhciBrZXkgPSB7fTtcblx0dmFyIHBhcnRzID0gKGtleS5wYXJ0cyA9IFtdKTtcblx0a2V5LnR5cGUgPSBnZXRBbGcoYWxnbyk7XG5cblx0dmFyIHBhcnRDb3VudCA9IGFsZ3MuaW5mb1trZXkudHlwZV0ucGFydHMubGVuZ3RoO1xuXHR3aGlsZSAocGFydHMubGVuZ3RoIDwgcGFydENvdW50KVxuXHRcdHBhcnRzLnB1c2goc3NoYnVmLnJlYWRQYXJ0KCkpO1xuXHRhc3NlcnQub2socGFydHMubGVuZ3RoID49IDEsICdrZXkgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBwYXJ0Jyk7XG5cblx0dmFyIGFsZ0luZm8gPSBhbGdzLmluZm9ba2V5LnR5cGVdO1xuXHRpZiAoa2V5LnR5cGUgPT09ICdlY2RzYScpIHtcblx0XHR2YXIgcmVzID0gRUNEU0FfQUxHTy5leGVjKGFsZ28pO1xuXHRcdGFzc2VydC5vayhyZXMgIT09IG51bGwpO1xuXHRcdGFzc2VydC5zdHJpY3RFcXVhbChyZXNbMV0sIHBhcnRzWzBdLmRhdGEudG9TdHJpbmcoKSk7XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGFsZ0luZm8ucGFydHMubGVuZ3RoOyArK2kpIHtcblx0XHRwYXJ0c1tpXS5uYW1lID0gYWxnSW5mby5wYXJ0c1tpXTtcblx0XHRpZiAocGFydHNbaV0ubmFtZSAhPT0gJ2N1cnZlJyAmJlxuXHRcdCAgICBhbGdJbmZvLm5vcm1hbGl6ZSAhPT0gZmFsc2UpIHtcblx0XHRcdHZhciBwID0gcGFydHNbaV07XG5cdFx0XHRwLmRhdGEgPSB1dGlscy5tcE5vcm1hbGl6ZShwLmRhdGEpO1xuXHRcdH1cblx0fVxuXG5cdGNlcnQuc3ViamVjdEtleSA9IG5ldyBLZXkoa2V5KTtcblxuXHRjZXJ0LnNlcmlhbCA9IHNzaGJ1Zi5yZWFkSW50NjQoKTtcblxuXHR2YXIgdHlwZSA9IFRZUEVTW3NzaGJ1Zi5yZWFkSW50KCldO1xuXHRhc3NlcnQuc3RyaW5nKHR5cGUsICd2YWxpZCBjZXJ0IHR5cGUnKTtcblxuXHRjZXJ0LnNpZ25hdHVyZXMub3BlbnNzaC5rZXlJZCA9IHNzaGJ1Zi5yZWFkU3RyaW5nKCk7XG5cblx0dmFyIHByaW5jaXBhbHMgPSBbXTtcblx0dmFyIHBidWYgPSBzc2hidWYucmVhZEJ1ZmZlcigpO1xuXHR2YXIgcHNzaGJ1ZiA9IG5ldyBTU0hCdWZmZXIoeyBidWZmZXI6IHBidWYgfSk7XG5cdHdoaWxlICghcHNzaGJ1Zi5hdEVuZCgpKVxuXHRcdHByaW5jaXBhbHMucHVzaChwc3NoYnVmLnJlYWRTdHJpbmcoKSk7XG5cdGlmIChwcmluY2lwYWxzLmxlbmd0aCA9PT0gMClcblx0XHRwcmluY2lwYWxzID0gWycqJ107XG5cblx0Y2VydC5zdWJqZWN0cyA9IHByaW5jaXBhbHMubWFwKGZ1bmN0aW9uIChwcikge1xuXHRcdGlmICh0eXBlID09PSAndXNlcicpXG5cdFx0XHRyZXR1cm4gKElkZW50aXR5LmZvclVzZXIocHIpKTtcblx0XHRlbHNlIGlmICh0eXBlID09PSAnaG9zdCcpXG5cdFx0XHRyZXR1cm4gKElkZW50aXR5LmZvckhvc3QocHIpKTtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdVbmtub3duIGlkZW50aXR5IHR5cGUgJyArIHR5cGUpKTtcblx0fSk7XG5cblx0Y2VydC52YWxpZEZyb20gPSBpbnQ2NFRvRGF0ZShzc2hidWYucmVhZEludDY0KCkpO1xuXHRjZXJ0LnZhbGlkVW50aWwgPSBpbnQ2NFRvRGF0ZShzc2hidWYucmVhZEludDY0KCkpO1xuXG5cdGNlcnQuc2lnbmF0dXJlcy5vcGVuc3NoLmNyaXRpY2FsID0gc3NoYnVmLnJlYWRCdWZmZXIoKTtcblx0Y2VydC5zaWduYXR1cmVzLm9wZW5zc2guZXh0cyA9IHNzaGJ1Zi5yZWFkQnVmZmVyKCk7XG5cblx0LyogcmVzZXJ2ZWQgKi9cblx0c3NoYnVmLnJlYWRCdWZmZXIoKTtcblxuXHR2YXIgc2lnbmluZ0tleUJ1ZiA9IHNzaGJ1Zi5yZWFkQnVmZmVyKCk7XG5cdGNlcnQuaXNzdWVyS2V5ID0gcmZjNDI1My5yZWFkKHNpZ25pbmdLZXlCdWYpO1xuXG5cdC8qXG5cdCAqIE9wZW5TU0ggY2VydHMgZG9uJ3QgZ2l2ZSB0aGUgaWRlbnRpdHkgb2YgdGhlIGlzc3VlciwganVzdCB0aGVpclxuXHQgKiBwdWJsaWMga2V5LiBTbywgd2UgdXNlIGFuIElkZW50aXR5IHRoYXQgbWF0Y2hlcyBhbnl0aGluZy4gVGhlXG5cdCAqIGlzU2lnbmVkQnkoKSBmdW5jdGlvbiB3aWxsIGxhdGVyIHRlbGwgeW91IGlmIHRoZSBrZXkgbWF0Y2hlcy5cblx0ICovXG5cdGNlcnQuaXNzdWVyID0gSWRlbnRpdHkuZm9ySG9zdCgnKionKTtcblxuXHR2YXIgc2lnQnVmID0gc3NoYnVmLnJlYWRCdWZmZXIoKTtcblx0Y2VydC5zaWduYXR1cmVzLm9wZW5zc2guc2lnbmF0dXJlID1cblx0ICAgIFNpZ25hdHVyZS5wYXJzZShzaWdCdWYsIGNlcnQuaXNzdWVyS2V5LnR5cGUsICdzc2gnKTtcblxuXHRpZiAocGFydGlhbCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cGFydGlhbC5yZW1haW5kZXIgPSBzc2hidWYucmVtYWluZGVyKCk7XG5cdFx0cGFydGlhbC5jb25zdW1lZCA9IHNzaGJ1Zi5fb2Zmc2V0O1xuXHR9XG5cblx0cmV0dXJuIChuZXcgQ2VydGlmaWNhdGUoY2VydCkpO1xufVxuXG5mdW5jdGlvbiBpbnQ2NFRvRGF0ZShidWYpIHtcblx0dmFyIGkgPSBidWYucmVhZFVJbnQzMkJFKDApICogNDI5NDk2NzI5Njtcblx0aSArPSBidWYucmVhZFVJbnQzMkJFKDQpO1xuXHR2YXIgZCA9IG5ldyBEYXRlKCk7XG5cdGQuc2V0VGltZShpICogMTAwMCk7XG5cdGQuc291cmNlSW50NjQgPSBidWY7XG5cdHJldHVybiAoZCk7XG59XG5cbmZ1bmN0aW9uIGRhdGVUb0ludDY0KGRhdGUpIHtcblx0aWYgKGRhdGUuc291cmNlSW50NjQgIT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm4gKGRhdGUuc291cmNlSW50NjQpO1xuXHR2YXIgaSA9IE1hdGgucm91bmQoZGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcblx0dmFyIHVwcGVyID0gTWF0aC5mbG9vcihpIC8gNDI5NDk2NzI5Nik7XG5cdHZhciBsb3dlciA9IE1hdGguZmxvb3IoaSAlIDQyOTQ5NjcyOTYpO1xuXHR2YXIgYnVmID0gbmV3IEJ1ZmZlcig4KTtcblx0YnVmLndyaXRlVUludDMyQkUodXBwZXIsIDApO1xuXHRidWYud3JpdGVVSW50MzJCRShsb3dlciwgNCk7XG5cdHJldHVybiAoYnVmKTtcbn1cblxuZnVuY3Rpb24gc2lnbihjZXJ0LCBrZXkpIHtcblx0aWYgKGNlcnQuc2lnbmF0dXJlcy5vcGVuc3NoID09PSB1bmRlZmluZWQpXG5cdFx0Y2VydC5zaWduYXR1cmVzLm9wZW5zc2ggPSB7fTtcblx0dHJ5IHtcblx0XHR2YXIgYmxvYiA9IHRvQnVmZmVyKGNlcnQsIHRydWUpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0ZGVsZXRlIChjZXJ0LnNpZ25hdHVyZXMub3BlbnNzaCk7XG5cdFx0cmV0dXJuIChmYWxzZSk7XG5cdH1cblx0dmFyIHNpZyA9IGNlcnQuc2lnbmF0dXJlcy5vcGVuc3NoO1xuXHR2YXIgaGFzaEFsZ28gPSB1bmRlZmluZWQ7XG5cdGlmIChrZXkudHlwZSA9PT0gJ3JzYScgfHwga2V5LnR5cGUgPT09ICdkc2EnKVxuXHRcdGhhc2hBbGdvID0gJ3NoYTEnO1xuXHR2YXIgc2lnbmVyID0ga2V5LmNyZWF0ZVNpZ24oaGFzaEFsZ28pO1xuXHRzaWduZXIud3JpdGUoYmxvYik7XG5cdHNpZy5zaWduYXR1cmUgPSBzaWduZXIuc2lnbigpO1xuXHRyZXR1cm4gKHRydWUpO1xufVxuXG5mdW5jdGlvbiBzaWduQXN5bmMoY2VydCwgc2lnbmVyLCBkb25lKSB7XG5cdGlmIChjZXJ0LnNpZ25hdHVyZXMub3BlbnNzaCA9PT0gdW5kZWZpbmVkKVxuXHRcdGNlcnQuc2lnbmF0dXJlcy5vcGVuc3NoID0ge307XG5cdHRyeSB7XG5cdFx0dmFyIGJsb2IgPSB0b0J1ZmZlcihjZXJ0LCB0cnVlKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGRlbGV0ZSAoY2VydC5zaWduYXR1cmVzLm9wZW5zc2gpO1xuXHRcdGRvbmUoZSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHZhciBzaWcgPSBjZXJ0LnNpZ25hdHVyZXMub3BlbnNzaDtcblxuXHRzaWduZXIoYmxvYiwgZnVuY3Rpb24gKGVyciwgc2lnbmF0dXJlKSB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0ZG9uZShlcnIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Lypcblx0XHRcdCAqIFRoaXMgd2lsbCB0aHJvdyBpZiB0aGUgc2lnbmF0dXJlIGlzbid0IG9mIGFcblx0XHRcdCAqIHR5cGUvYWxnbyB0aGF0IGNhbiBiZSB1c2VkIGZvciBTU0guXG5cdFx0XHQgKi9cblx0XHRcdHNpZ25hdHVyZS50b0J1ZmZlcignc3NoJyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0ZG9uZShlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c2lnLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcblx0XHRkb25lKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiB3cml0ZShjZXJ0LCBvcHRpb25zKSB7XG5cdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0b3B0aW9ucyA9IHt9O1xuXG5cdHZhciBibG9iID0gdG9CdWZmZXIoY2VydCk7XG5cdHZhciBvdXQgPSBnZXRDZXJ0VHlwZShjZXJ0LnN1YmplY3RLZXkpICsgJyAnICsgYmxvYi50b1N0cmluZygnYmFzZTY0Jyk7XG5cdGlmIChvcHRpb25zLmNvbW1lbnQpXG5cdFx0b3V0ID0gb3V0ICsgJyAnICsgb3B0aW9ucy5jb21tZW50O1xuXHRyZXR1cm4gKG91dCk7XG59XG5cblxuZnVuY3Rpb24gdG9CdWZmZXIoY2VydCwgbm9TaWcpIHtcblx0YXNzZXJ0Lm9iamVjdChjZXJ0LnNpZ25hdHVyZXMub3BlbnNzaCwgJ3NpZ25hdHVyZSBmb3Igb3BlbnNzaCBmb3JtYXQnKTtcblx0dmFyIHNpZyA9IGNlcnQuc2lnbmF0dXJlcy5vcGVuc3NoO1xuXG5cdGlmIChzaWcubm9uY2UgPT09IHVuZGVmaW5lZClcblx0XHRzaWcubm9uY2UgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpO1xuXHR2YXIgYnVmID0gbmV3IFNTSEJ1ZmZlcih7fSk7XG5cdGJ1Zi53cml0ZVN0cmluZyhnZXRDZXJ0VHlwZShjZXJ0LnN1YmplY3RLZXkpKTtcblx0YnVmLndyaXRlQnVmZmVyKHNpZy5ub25jZSk7XG5cblx0dmFyIGtleSA9IGNlcnQuc3ViamVjdEtleTtcblx0dmFyIGFsZ0luZm8gPSBhbGdzLmluZm9ba2V5LnR5cGVdO1xuXHRhbGdJbmZvLnBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcnQpIHtcblx0XHRidWYud3JpdGVQYXJ0KGtleS5wYXJ0W3BhcnRdKTtcblx0fSk7XG5cblx0YnVmLndyaXRlSW50NjQoY2VydC5zZXJpYWwpO1xuXG5cdHZhciB0eXBlID0gY2VydC5zdWJqZWN0c1swXS50eXBlO1xuXHRhc3NlcnQubm90U3RyaWN0RXF1YWwodHlwZSwgJ3Vua25vd24nKTtcblx0Y2VydC5zdWJqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuXHRcdGFzc2VydC5zdHJpY3RFcXVhbChpZC50eXBlLCB0eXBlKTtcblx0fSk7XG5cdHR5cGUgPSBUWVBFU1t0eXBlXTtcblx0YnVmLndyaXRlSW50KHR5cGUpO1xuXG5cdGlmIChzaWcua2V5SWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHNpZy5rZXlJZCA9IGNlcnQuc3ViamVjdHNbMF0udHlwZSArICdfJyArXG5cdFx0ICAgIChjZXJ0LnN1YmplY3RzWzBdLnVpZCB8fCBjZXJ0LnN1YmplY3RzWzBdLmhvc3RuYW1lKTtcblx0fVxuXHRidWYud3JpdGVTdHJpbmcoc2lnLmtleUlkKTtcblxuXHR2YXIgc3ViID0gbmV3IFNTSEJ1ZmZlcih7fSk7XG5cdGNlcnQuc3ViamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcblx0XHRpZiAodHlwZSA9PT0gVFlQRVMuaG9zdClcblx0XHRcdHN1Yi53cml0ZVN0cmluZyhpZC5ob3N0bmFtZSk7XG5cdFx0ZWxzZSBpZiAodHlwZSA9PT0gVFlQRVMudXNlcilcblx0XHRcdHN1Yi53cml0ZVN0cmluZyhpZC51aWQpO1xuXHR9KTtcblx0YnVmLndyaXRlQnVmZmVyKHN1Yi50b0J1ZmZlcigpKTtcblxuXHRidWYud3JpdGVJbnQ2NChkYXRlVG9JbnQ2NChjZXJ0LnZhbGlkRnJvbSkpO1xuXHRidWYud3JpdGVJbnQ2NChkYXRlVG9JbnQ2NChjZXJ0LnZhbGlkVW50aWwpKTtcblxuXHRpZiAoc2lnLmNyaXRpY2FsID09PSB1bmRlZmluZWQpXG5cdFx0c2lnLmNyaXRpY2FsID0gbmV3IEJ1ZmZlcigwKTtcblx0YnVmLndyaXRlQnVmZmVyKHNpZy5jcml0aWNhbCk7XG5cblx0aWYgKHNpZy5leHRzID09PSB1bmRlZmluZWQpXG5cdFx0c2lnLmV4dHMgPSBuZXcgQnVmZmVyKDApO1xuXHRidWYud3JpdGVCdWZmZXIoc2lnLmV4dHMpO1xuXG5cdC8qIHJlc2VydmVkICovXG5cdGJ1Zi53cml0ZUJ1ZmZlcihuZXcgQnVmZmVyKDApKTtcblxuXHRzdWIgPSByZmM0MjUzLndyaXRlKGNlcnQuaXNzdWVyS2V5KTtcblx0YnVmLndyaXRlQnVmZmVyKHN1Yik7XG5cblx0aWYgKCFub1NpZylcblx0XHRidWYud3JpdGVCdWZmZXIoc2lnLnNpZ25hdHVyZS50b0J1ZmZlcignc3NoJykpO1xuXG5cdHJldHVybiAoYnVmLnRvQnVmZmVyKCkpO1xufVxuXG5mdW5jdGlvbiBnZXRBbGcoY2VydFR5cGUpIHtcblx0aWYgKGNlcnRUeXBlID09PSAnc3NoLXJzYS1jZXJ0LXYwMUBvcGVuc3NoLmNvbScpXG5cdFx0cmV0dXJuICgncnNhJyk7XG5cdGlmIChjZXJ0VHlwZSA9PT0gJ3NzaC1kc3MtY2VydC12MDFAb3BlbnNzaC5jb20nKVxuXHRcdHJldHVybiAoJ2RzYScpO1xuXHRpZiAoY2VydFR5cGUubWF0Y2goRUNEU0FfQUxHTykpXG5cdFx0cmV0dXJuICgnZWNkc2EnKTtcblx0aWYgKGNlcnRUeXBlID09PSAnc3NoLWVkMjU1MTktY2VydC12MDFAb3BlbnNzaC5jb20nKVxuXHRcdHJldHVybiAoJ2VkMjU1MTknKTtcblx0dGhyb3cgKG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY2VydCB0eXBlICcgKyBjZXJ0VHlwZSkpO1xufVxuXG5mdW5jdGlvbiBnZXRDZXJ0VHlwZShrZXkpIHtcblx0aWYgKGtleS50eXBlID09PSAncnNhJylcblx0XHRyZXR1cm4gKCdzc2gtcnNhLWNlcnQtdjAxQG9wZW5zc2guY29tJyk7XG5cdGlmIChrZXkudHlwZSA9PT0gJ2RzYScpXG5cdFx0cmV0dXJuICgnc3NoLWRzcy1jZXJ0LXYwMUBvcGVuc3NoLmNvbScpO1xuXHRpZiAoa2V5LnR5cGUgPT09ICdlY2RzYScpXG5cdFx0cmV0dXJuICgnZWNkc2Etc2hhMi0nICsga2V5LmN1cnZlICsgJy1jZXJ0LXYwMUBvcGVuc3NoLmNvbScpO1xuXHRpZiAoa2V5LnR5cGUgPT09ICdlZDI1NTE5Jylcblx0XHRyZXR1cm4gKCdzc2gtZWQyNTUxOS1jZXJ0LXYwMUBvcGVuc3NoLmNvbScpO1xuXHR0aHJvdyAobmV3IEVycm9yKCdVbnN1cHBvcnRlZCBrZXkgdHlwZSAnICsga2V5LnR5cGUpKTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0cmVhZDogcmVhZCxcblx0d3JpdGU6IHdyaXRlXG59O1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBhc24xID0gcmVxdWlyZSgnYXNuMScpO1xudmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xudmFyIGFsZ3MgPSByZXF1aXJlKCcuLi9hbGdzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIEtleSA9IHJlcXVpcmUoJy4uL2tleScpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuLi9wcml2YXRlLWtleScpO1xuXG52YXIgcGtjczEgPSByZXF1aXJlKCcuL3BrY3MxJyk7XG52YXIgcGtjczggPSByZXF1aXJlKCcuL3BrY3M4Jyk7XG52YXIgc3NocHJpdiA9IHJlcXVpcmUoJy4vc3NoLXByaXZhdGUnKTtcbnZhciByZmM0MjUzID0gcmVxdWlyZSgnLi9yZmM0MjUzJyk7XG5cbnZhciBlcnJvcnMgPSByZXF1aXJlKCcuLi9lcnJvcnMnKTtcblxuLypcbiAqIEZvciByZWFkaW5nIHdlIHN1cHBvcnQgYm90aCBQS0NTIzEgYW5kIFBLQ1MjOC4gSWYgd2UgZmluZCBhIHByaXZhdGUga2V5LFxuICogd2UganVzdCB0YWtlIHRoZSBwdWJsaWMgY29tcG9uZW50IG9mIGl0IGFuZCB1c2UgdGhhdC5cbiAqL1xuZnVuY3Rpb24gcmVhZChidWYsIG9wdGlvbnMsIGZvcmNlVHlwZSkge1xuXHR2YXIgaW5wdXQgPSBidWY7XG5cdGlmICh0eXBlb2YgKGJ1ZikgIT09ICdzdHJpbmcnKSB7XG5cdFx0YXNzZXJ0LmJ1ZmZlcihidWYsICdidWYnKTtcblx0XHRidWYgPSBidWYudG9TdHJpbmcoJ2FzY2lpJyk7XG5cdH1cblxuXHR2YXIgbGluZXMgPSBidWYudHJpbSgpLnNwbGl0KCdcXG4nKTtcblxuXHR2YXIgbSA9IGxpbmVzWzBdLm1hdGNoKC8qSlNTVFlMRUQqL1xuXHQgICAgL1stXStbIF0qQkVHSU4gKFtBLVowLTldKyApPyhQVUJMSUN8UFJJVkFURSkgS0VZWyBdKlstXSsvKTtcblx0YXNzZXJ0Lm9rKG0sICdpbnZhbGlkIFBFTSBoZWFkZXInKTtcblxuXHR2YXIgbTIgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5tYXRjaCgvKkpTU1RZTEVEKi9cblx0ICAgIC9bLV0rWyBdKkVORCAoW0EtWjAtOV0rICk/KFBVQkxJQ3xQUklWQVRFKSBLRVlbIF0qWy1dKy8pO1xuXHRhc3NlcnQub2sobTIsICdpbnZhbGlkIFBFTSBmb290ZXInKTtcblxuXHQvKiBCZWdpbiBhbmQgZW5kIGJhbm5lcnMgbXVzdCBtYXRjaCBrZXkgdHlwZSAqL1xuXHRhc3NlcnQuZXF1YWwobVsyXSwgbTJbMl0pO1xuXHR2YXIgdHlwZSA9IG1bMl0udG9Mb3dlckNhc2UoKTtcblxuXHR2YXIgYWxnO1xuXHRpZiAobVsxXSkge1xuXHRcdC8qIFRoZXkgYWxzbyBtdXN0IG1hdGNoIGFsZ29yaXRobXMsIGlmIGdpdmVuICovXG5cdFx0YXNzZXJ0LmVxdWFsKG1bMV0sIG0yWzFdLCAnUEVNIGhlYWRlciBhbmQgZm9vdGVyIG1pc21hdGNoJyk7XG5cdFx0YWxnID0gbVsxXS50cmltKCk7XG5cdH1cblxuXHR2YXIgaGVhZGVycyA9IHt9O1xuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGxpbmVzID0gbGluZXMuc2xpY2UoMSk7XG5cdFx0bSA9IGxpbmVzWzBdLm1hdGNoKC8qSlNTVFlMRUQqL1xuXHRcdCAgICAvXihbQS1aYS16MC05LV0rKTogKC4rKSQvKTtcblx0XHRpZiAoIW0pXG5cdFx0XHRicmVhaztcblx0XHRoZWFkZXJzW21bMV0udG9Mb3dlckNhc2UoKV0gPSBtWzJdO1xuXHR9XG5cblx0dmFyIGNpcGhlciwga2V5LCBpdjtcblx0aWYgKGhlYWRlcnNbJ3Byb2MtdHlwZSddKSB7XG5cdFx0dmFyIHBhcnRzID0gaGVhZGVyc1sncHJvYy10eXBlJ10uc3BsaXQoJywnKTtcblx0XHRpZiAocGFydHNbMF0gPT09ICc0JyAmJiBwYXJ0c1sxXSA9PT0gJ0VOQ1JZUFRFRCcpIHtcblx0XHRcdGlmICh0eXBlb2YgKG9wdGlvbnMucGFzc3BocmFzZSkgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdG9wdGlvbnMucGFzc3BocmFzZSA9IG5ldyBCdWZmZXIoXG5cdFx0XHRcdCAgICBvcHRpb25zLnBhc3NwaHJhc2UsICd1dGYtOCcpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFCdWZmZXIuaXNCdWZmZXIob3B0aW9ucy5wYXNzcGhyYXNlKSkge1xuXHRcdFx0XHR0aHJvdyAobmV3IGVycm9ycy5LZXlFbmNyeXB0ZWRFcnJvcihcblx0XHRcdFx0ICAgIG9wdGlvbnMuZmlsZW5hbWUsICdQRU0nKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJ0cyA9IGhlYWRlcnNbJ2Rlay1pbmZvJ10uc3BsaXQoJywnKTtcblx0XHRcdFx0YXNzZXJ0Lm9rKHBhcnRzLmxlbmd0aCA9PT0gMik7XG5cdFx0XHRcdGNpcGhlciA9IHBhcnRzWzBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdGl2ID0gbmV3IEJ1ZmZlcihwYXJ0c1sxXSwgJ2hleCcpO1xuXHRcdFx0XHRrZXkgPSB1dGlscy5vcGVuc3NsS2V5RGVyaXYoY2lwaGVyLCBpdixcblx0XHRcdFx0ICAgIG9wdGlvbnMucGFzc3BocmFzZSwgMSkua2V5O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qIENob3Agb2ZmIHRoZSBmaXJzdCBhbmQgbGFzdCBsaW5lcyAqL1xuXHRsaW5lcyA9IGxpbmVzLnNsaWNlKDAsIC0xKS5qb2luKCcnKTtcblx0YnVmID0gbmV3IEJ1ZmZlcihsaW5lcywgJ2Jhc2U2NCcpO1xuXG5cdGlmIChjaXBoZXIgJiYga2V5ICYmIGl2KSB7XG5cdFx0dmFyIGNpcGhlclN0cmVhbSA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGNpcGhlciwga2V5LCBpdik7XG5cdFx0dmFyIGNodW5rLCBjaHVua3MgPSBbXTtcblx0XHRjaXBoZXJTdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0aWYgKGUudG9TdHJpbmcoKS5pbmRleE9mKCdiYWQgZGVjcnlwdCcpICE9PSAtMSkge1xuXHRcdFx0XHR0aHJvdyAobmV3IEVycm9yKCdJbmNvcnJlY3QgcGFzc3BocmFzZSAnICtcblx0XHRcdFx0ICAgICdzdXBwbGllZCwgY291bGQgbm90IGRlY3J5cHQga2V5JykpO1xuXHRcdFx0fVxuXHRcdFx0dGhyb3cgKGUpO1xuXHRcdH0pO1xuXHRcdGNpcGhlclN0cmVhbS53cml0ZShidWYpO1xuXHRcdGNpcGhlclN0cmVhbS5lbmQoKTtcblx0XHR3aGlsZSAoKGNodW5rID0gY2lwaGVyU3RyZWFtLnJlYWQoKSkgIT09IG51bGwpXG5cdFx0XHRjaHVua3MucHVzaChjaHVuayk7XG5cdFx0YnVmID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuXHR9XG5cblx0LyogVGhlIG5ldyBPcGVuU1NIIGludGVybmFsIGZvcm1hdCBhYnVzZXMgUEVNIGhlYWRlcnMgKi9cblx0aWYgKGFsZyAmJiBhbGcudG9Mb3dlckNhc2UoKSA9PT0gJ29wZW5zc2gnKVxuXHRcdHJldHVybiAoc3NocHJpdi5yZWFkU1NIUHJpdmF0ZSh0eXBlLCBidWYsIG9wdGlvbnMpKTtcblx0aWYgKGFsZyAmJiBhbGcudG9Mb3dlckNhc2UoKSA9PT0gJ3NzaDInKVxuXHRcdHJldHVybiAocmZjNDI1My5yZWFkVHlwZSh0eXBlLCBidWYsIG9wdGlvbnMpKTtcblxuXHR2YXIgZGVyID0gbmV3IGFzbjEuQmVyUmVhZGVyKGJ1Zik7XG5cdGRlci5vcmlnaW5hbElucHV0ID0gaW5wdXQ7XG5cblx0Lypcblx0ICogQWxsIG9mIHRoZSBQRU0gZmlsZSB0eXBlcyBzdGFydCB3aXRoIGEgc2VxdWVuY2UgdGFnLCBzbyBjaG9wIGl0XG5cdCAqIG9mZiBoZXJlXG5cdCAqL1xuXHRkZXIucmVhZFNlcXVlbmNlKCk7XG5cblx0LyogUEtDUyMxIHR5cGUga2V5cyBuYW1lIGFuIGFsZ29yaXRobSBpbiB0aGUgYmFubmVyIGV4cGxpY2l0bHkgKi9cblx0aWYgKGFsZykge1xuXHRcdGlmIChmb3JjZVR5cGUpXG5cdFx0XHRhc3NlcnQuc3RyaWN0RXF1YWwoZm9yY2VUeXBlLCAncGtjczEnKTtcblx0XHRyZXR1cm4gKHBrY3MxLnJlYWRQa2NzMShhbGcsIHR5cGUsIGRlcikpO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChmb3JjZVR5cGUpXG5cdFx0XHRhc3NlcnQuc3RyaWN0RXF1YWwoZm9yY2VUeXBlLCAncGtjczgnKTtcblx0XHRyZXR1cm4gKHBrY3M4LnJlYWRQa2NzOChhbGcsIHR5cGUsIGRlcikpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHdyaXRlKGtleSwgb3B0aW9ucywgdHlwZSkge1xuXHRhc3NlcnQub2JqZWN0KGtleSk7XG5cblx0dmFyIGFsZyA9IHsnZWNkc2EnOiAnRUMnLCAncnNhJzogJ1JTQScsICdkc2EnOiAnRFNBJ31ba2V5LnR5cGVdO1xuXHR2YXIgaGVhZGVyO1xuXG5cdHZhciBkZXIgPSBuZXcgYXNuMS5CZXJXcml0ZXIoKTtcblxuXHRpZiAoUHJpdmF0ZUtleS5pc1ByaXZhdGVLZXkoa2V5KSkge1xuXHRcdGlmICh0eXBlICYmIHR5cGUgPT09ICdwa2NzOCcpIHtcblx0XHRcdGhlYWRlciA9ICdQUklWQVRFIEtFWSc7XG5cdFx0XHRwa2NzOC53cml0ZVBrY3M4KGRlciwga2V5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHR5cGUpXG5cdFx0XHRcdGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlLCAncGtjczEnKTtcblx0XHRcdGhlYWRlciA9IGFsZyArICcgUFJJVkFURSBLRVknO1xuXHRcdFx0cGtjczEud3JpdGVQa2NzMShkZXIsIGtleSk7XG5cdFx0fVxuXG5cdH0gZWxzZSBpZiAoS2V5LmlzS2V5KGtleSkpIHtcblx0XHRpZiAodHlwZSAmJiB0eXBlID09PSAncGtjczEnKSB7XG5cdFx0XHRoZWFkZXIgPSBhbGcgKyAnIFBVQkxJQyBLRVknO1xuXHRcdFx0cGtjczEud3JpdGVQa2NzMShkZXIsIGtleSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlKVxuXHRcdFx0XHRhc3NlcnQuc3RyaWN0RXF1YWwodHlwZSwgJ3BrY3M4Jyk7XG5cdFx0XHRoZWFkZXIgPSAnUFVCTElDIEtFWSc7XG5cdFx0XHRwa2NzOC53cml0ZVBrY3M4KGRlciwga2V5KTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdrZXkgaXMgbm90IGEgS2V5IG9yIFByaXZhdGVLZXknKSk7XG5cdH1cblxuXHR2YXIgdG1wID0gZGVyLmJ1ZmZlci50b1N0cmluZygnYmFzZTY0Jyk7XG5cdHZhciBsZW4gPSB0bXAubGVuZ3RoICsgKHRtcC5sZW5ndGggLyA2NCkgK1xuXHQgICAgMTggKyAxNiArIGhlYWRlci5sZW5ndGgqMiArIDEwO1xuXHR2YXIgYnVmID0gbmV3IEJ1ZmZlcihsZW4pO1xuXHR2YXIgbyA9IDA7XG5cdG8gKz0gYnVmLndyaXRlKCctLS0tLUJFR0lOICcgKyBoZWFkZXIgKyAnLS0tLS1cXG4nLCBvKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0bXAubGVuZ3RoOyApIHtcblx0XHR2YXIgbGltaXQgPSBpICsgNjQ7XG5cdFx0aWYgKGxpbWl0ID4gdG1wLmxlbmd0aClcblx0XHRcdGxpbWl0ID0gdG1wLmxlbmd0aDtcblx0XHRvICs9IGJ1Zi53cml0ZSh0bXAuc2xpY2UoaSwgbGltaXQpLCBvKTtcblx0XHRidWZbbysrXSA9IDEwO1xuXHRcdGkgPSBsaW1pdDtcblx0fVxuXHRvICs9IGJ1Zi53cml0ZSgnLS0tLS1FTkQgJyArIGhlYWRlciArICctLS0tLVxcbicsIG8pO1xuXG5cdHJldHVybiAoYnVmLnNsaWNlKDAsIG8pKTtcbn1cbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0cmVhZDogcmVhZCxcblx0cmVhZFBrY3MxOiByZWFkUGtjczEsXG5cdHdyaXRlOiB3cml0ZSxcblx0d3JpdGVQa2NzMTogd3JpdGVQa2NzMVxufTtcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgYXNuMSA9IHJlcXVpcmUoJ2FzbjEnKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi4vYWxncycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxudmFyIEtleSA9IHJlcXVpcmUoJy4uL2tleScpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuLi9wcml2YXRlLWtleScpO1xudmFyIHBlbSA9IHJlcXVpcmUoJy4vcGVtJyk7XG5cbnZhciBwa2NzOCA9IHJlcXVpcmUoJy4vcGtjczgnKTtcbnZhciByZWFkRUNEU0FDdXJ2ZSA9IHBrY3M4LnJlYWRFQ0RTQUN1cnZlO1xuXG5mdW5jdGlvbiByZWFkKGJ1Ziwgb3B0aW9ucykge1xuXHRyZXR1cm4gKHBlbS5yZWFkKGJ1Ziwgb3B0aW9ucywgJ3BrY3MxJykpO1xufVxuXG5mdW5jdGlvbiB3cml0ZShrZXksIG9wdGlvbnMpIHtcblx0cmV0dXJuIChwZW0ud3JpdGUoa2V5LCBvcHRpb25zLCAncGtjczEnKSk7XG59XG5cbi8qIEhlbHBlciB0byByZWFkIGluIGEgc2luZ2xlIG1waW50ICovXG5mdW5jdGlvbiByZWFkTVBJbnQoZGVyLCBubSkge1xuXHRhc3NlcnQuc3RyaWN0RXF1YWwoZGVyLnBlZWsoKSwgYXNuMS5CZXIuSW50ZWdlcixcblx0ICAgIG5tICsgJyBpcyBub3QgYW4gSW50ZWdlcicpO1xuXHRyZXR1cm4gKHV0aWxzLm1wTm9ybWFsaXplKGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkludGVnZXIsIHRydWUpKSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzMShhbGcsIHR5cGUsIGRlcikge1xuXHRzd2l0Y2ggKGFsZykge1xuXHRjYXNlICdSU0EnOlxuXHRcdGlmICh0eXBlID09PSAncHVibGljJylcblx0XHRcdHJldHVybiAocmVhZFBrY3MxUlNBUHVibGljKGRlcikpO1xuXHRcdGVsc2UgaWYgKHR5cGUgPT09ICdwcml2YXRlJylcblx0XHRcdHJldHVybiAocmVhZFBrY3MxUlNBUHJpdmF0ZShkZXIpKTtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdVbmtub3duIGtleSB0eXBlOiAnICsgdHlwZSkpO1xuXHRjYXNlICdEU0EnOlxuXHRcdGlmICh0eXBlID09PSAncHVibGljJylcblx0XHRcdHJldHVybiAocmVhZFBrY3MxRFNBUHVibGljKGRlcikpO1xuXHRcdGVsc2UgaWYgKHR5cGUgPT09ICdwcml2YXRlJylcblx0XHRcdHJldHVybiAocmVhZFBrY3MxRFNBUHJpdmF0ZShkZXIpKTtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdVbmtub3duIGtleSB0eXBlOiAnICsgdHlwZSkpO1xuXHRjYXNlICdFQyc6XG5cdGNhc2UgJ0VDRFNBJzpcblx0XHRpZiAodHlwZSA9PT0gJ3ByaXZhdGUnKVxuXHRcdFx0cmV0dXJuIChyZWFkUGtjczFFQ0RTQVByaXZhdGUoZGVyKSk7XG5cdFx0ZWxzZSBpZiAodHlwZSA9PT0gJ3B1YmxpYycpXG5cdFx0XHRyZXR1cm4gKHJlYWRQa2NzMUVDRFNBUHVibGljKGRlcikpO1xuXHRcdHRocm93IChuZXcgRXJyb3IoJ1Vua25vd24ga2V5IHR5cGU6ICcgKyB0eXBlKSk7XG5cdGRlZmF1bHQ6XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignVW5rbm93biBrZXkgYWxnbzogJyArIGFsZykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzMVJTQVB1YmxpYyhkZXIpIHtcblx0Ly8gbW9kdWx1cyBhbmQgZXhwb25lbnRcblx0dmFyIG4gPSByZWFkTVBJbnQoZGVyLCAnbW9kdWx1cycpO1xuXHR2YXIgZSA9IHJlYWRNUEludChkZXIsICdleHBvbmVudCcpO1xuXG5cdC8vIG5vdywgbWFrZSB0aGUga2V5XG5cdHZhciBrZXkgPSB7XG5cdFx0dHlwZTogJ3JzYScsXG5cdFx0cGFydHM6IFtcblx0XHRcdHsgbmFtZTogJ2UnLCBkYXRhOiBlIH0sXG5cdFx0XHR7IG5hbWU6ICduJywgZGF0YTogbiB9XG5cdFx0XVxuXHR9O1xuXG5cdHJldHVybiAobmV3IEtleShrZXkpKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBrY3MxUlNBUHJpdmF0ZShkZXIpIHtcblx0dmFyIHZlcnNpb24gPSByZWFkTVBJbnQoZGVyLCAndmVyc2lvbicpO1xuXHRhc3NlcnQuc3RyaWN0RXF1YWwodmVyc2lvblswXSwgMCk7XG5cblx0Ly8gbW9kdWx1cyB0aGVuIHB1YmxpYyBleHBvbmVudFxuXHR2YXIgbiA9IHJlYWRNUEludChkZXIsICdtb2R1bHVzJyk7XG5cdHZhciBlID0gcmVhZE1QSW50KGRlciwgJ3B1YmxpYyBleHBvbmVudCcpO1xuXHR2YXIgZCA9IHJlYWRNUEludChkZXIsICdwcml2YXRlIGV4cG9uZW50Jyk7XG5cdHZhciBwID0gcmVhZE1QSW50KGRlciwgJ3ByaW1lMScpO1xuXHR2YXIgcSA9IHJlYWRNUEludChkZXIsICdwcmltZTInKTtcblx0dmFyIGRtb2RwID0gcmVhZE1QSW50KGRlciwgJ2V4cG9uZW50MScpO1xuXHR2YXIgZG1vZHEgPSByZWFkTVBJbnQoZGVyLCAnZXhwb25lbnQyJyk7XG5cdHZhciBpcW1wID0gcmVhZE1QSW50KGRlciwgJ2lxbXAnKTtcblxuXHQvLyBub3csIG1ha2UgdGhlIGtleVxuXHR2YXIga2V5ID0ge1xuXHRcdHR5cGU6ICdyc2EnLFxuXHRcdHBhcnRzOiBbXG5cdFx0XHR7IG5hbWU6ICduJywgZGF0YTogbiB9LFxuXHRcdFx0eyBuYW1lOiAnZScsIGRhdGE6IGUgfSxcblx0XHRcdHsgbmFtZTogJ2QnLCBkYXRhOiBkIH0sXG5cdFx0XHR7IG5hbWU6ICdpcW1wJywgZGF0YTogaXFtcCB9LFxuXHRcdFx0eyBuYW1lOiAncCcsIGRhdGE6IHAgfSxcblx0XHRcdHsgbmFtZTogJ3EnLCBkYXRhOiBxIH0sXG5cdFx0XHR7IG5hbWU6ICdkbW9kcCcsIGRhdGE6IGRtb2RwIH0sXG5cdFx0XHR7IG5hbWU6ICdkbW9kcScsIGRhdGE6IGRtb2RxIH1cblx0XHRdXG5cdH07XG5cblx0cmV0dXJuIChuZXcgUHJpdmF0ZUtleShrZXkpKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBrY3MxRFNBUHJpdmF0ZShkZXIpIHtcblx0dmFyIHZlcnNpb24gPSByZWFkTVBJbnQoZGVyLCAndmVyc2lvbicpO1xuXHRhc3NlcnQuc3RyaWN0RXF1YWwodmVyc2lvbi5yZWFkVUludDgoMCksIDApO1xuXG5cdHZhciBwID0gcmVhZE1QSW50KGRlciwgJ3AnKTtcblx0dmFyIHEgPSByZWFkTVBJbnQoZGVyLCAncScpO1xuXHR2YXIgZyA9IHJlYWRNUEludChkZXIsICdnJyk7XG5cdHZhciB5ID0gcmVhZE1QSW50KGRlciwgJ3knKTtcblx0dmFyIHggPSByZWFkTVBJbnQoZGVyLCAneCcpO1xuXG5cdC8vIG5vdywgbWFrZSB0aGUga2V5XG5cdHZhciBrZXkgPSB7XG5cdFx0dHlwZTogJ2RzYScsXG5cdFx0cGFydHM6IFtcblx0XHRcdHsgbmFtZTogJ3AnLCBkYXRhOiBwIH0sXG5cdFx0XHR7IG5hbWU6ICdxJywgZGF0YTogcSB9LFxuXHRcdFx0eyBuYW1lOiAnZycsIGRhdGE6IGcgfSxcblx0XHRcdHsgbmFtZTogJ3knLCBkYXRhOiB5IH0sXG5cdFx0XHR7IG5hbWU6ICd4JywgZGF0YTogeCB9XG5cdFx0XVxuXHR9O1xuXG5cdHJldHVybiAobmV3IFByaXZhdGVLZXkoa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzMURTQVB1YmxpYyhkZXIpIHtcblx0dmFyIHkgPSByZWFkTVBJbnQoZGVyLCAneScpO1xuXHR2YXIgcCA9IHJlYWRNUEludChkZXIsICdwJyk7XG5cdHZhciBxID0gcmVhZE1QSW50KGRlciwgJ3EnKTtcblx0dmFyIGcgPSByZWFkTVBJbnQoZGVyLCAnZycpO1xuXG5cdHZhciBrZXkgPSB7XG5cdFx0dHlwZTogJ2RzYScsXG5cdFx0cGFydHM6IFtcblx0XHRcdHsgbmFtZTogJ3knLCBkYXRhOiB5IH0sXG5cdFx0XHR7IG5hbWU6ICdwJywgZGF0YTogcCB9LFxuXHRcdFx0eyBuYW1lOiAncScsIGRhdGE6IHEgfSxcblx0XHRcdHsgbmFtZTogJ2cnLCBkYXRhOiBnIH1cblx0XHRdXG5cdH07XG5cblx0cmV0dXJuIChuZXcgS2V5KGtleSkpO1xufVxuXG5mdW5jdGlvbiByZWFkUGtjczFFQ0RTQVB1YmxpYyhkZXIpIHtcblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXG5cdHZhciBvaWQgPSBkZXIucmVhZE9JRCgpO1xuXHRhc3NlcnQuc3RyaWN0RXF1YWwob2lkLCAnMS4yLjg0MC4xMDA0NS4yLjEnLCAnbXVzdCBiZSBlY1B1YmxpY0tleScpO1xuXG5cdHZhciBjdXJ2ZU9pZCA9IGRlci5yZWFkT0lEKCk7XG5cblx0dmFyIGN1cnZlO1xuXHR2YXIgY3VydmVzID0gT2JqZWN0LmtleXMoYWxncy5jdXJ2ZXMpO1xuXHRmb3IgKHZhciBqID0gMDsgaiA8IGN1cnZlcy5sZW5ndGg7ICsraikge1xuXHRcdHZhciBjID0gY3VydmVzW2pdO1xuXHRcdHZhciBjZCA9IGFsZ3MuY3VydmVzW2NdO1xuXHRcdGlmIChjZC5wa2NzOG9pZCA9PT0gY3VydmVPaWQpIHtcblx0XHRcdGN1cnZlID0gYztcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRhc3NlcnQuc3RyaW5nKGN1cnZlLCAnYSBrbm93biBFQ0RTQSBuYW1lZCBjdXJ2ZScpO1xuXG5cdHZhciBRID0gZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuQml0U3RyaW5nLCB0cnVlKTtcblx0USA9IHV0aWxzLmVjTm9ybWFsaXplKFEpO1xuXG5cdHZhciBrZXkgPSB7XG5cdFx0dHlwZTogJ2VjZHNhJyxcblx0XHRwYXJ0czogW1xuXHRcdFx0eyBuYW1lOiAnY3VydmUnLCBkYXRhOiBuZXcgQnVmZmVyKGN1cnZlKSB9LFxuXHRcdFx0eyBuYW1lOiAnUScsIGRhdGE6IFEgfVxuXHRcdF1cblx0fTtcblxuXHRyZXR1cm4gKG5ldyBLZXkoa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzMUVDRFNBUHJpdmF0ZShkZXIpIHtcblx0dmFyIHZlcnNpb24gPSByZWFkTVBJbnQoZGVyLCAndmVyc2lvbicpO1xuXHRhc3NlcnQuc3RyaWN0RXF1YWwodmVyc2lvbi5yZWFkVUludDgoMCksIDEpO1xuXG5cdC8vIHByaXZhdGUga2V5XG5cdHZhciBkID0gZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuT2N0ZXRTdHJpbmcsIHRydWUpO1xuXG5cdGRlci5yZWFkU2VxdWVuY2UoMHhhMCk7XG5cdHZhciBjdXJ2ZSA9IHJlYWRFQ0RTQUN1cnZlKGRlcik7XG5cdGFzc2VydC5zdHJpbmcoY3VydmUsICdhIGtub3duIGVsbGlwdGljIGN1cnZlJyk7XG5cblx0ZGVyLnJlYWRTZXF1ZW5jZSgweGExKTtcblx0dmFyIFEgPSBkZXIucmVhZFN0cmluZyhhc24xLkJlci5CaXRTdHJpbmcsIHRydWUpO1xuXHRRID0gdXRpbHMuZWNOb3JtYWxpemUoUSk7XG5cblx0dmFyIGtleSA9IHtcblx0XHR0eXBlOiAnZWNkc2EnLFxuXHRcdHBhcnRzOiBbXG5cdFx0XHR7IG5hbWU6ICdjdXJ2ZScsIGRhdGE6IG5ldyBCdWZmZXIoY3VydmUpIH0sXG5cdFx0XHR7IG5hbWU6ICdRJywgZGF0YTogUSB9LFxuXHRcdFx0eyBuYW1lOiAnZCcsIGRhdGE6IGQgfVxuXHRcdF1cblx0fTtcblxuXHRyZXR1cm4gKG5ldyBQcml2YXRlS2V5KGtleSkpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVBrY3MxKGRlciwga2V5KSB7XG5cdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cblx0c3dpdGNoIChrZXkudHlwZSkge1xuXHRjYXNlICdyc2EnOlxuXHRcdGlmIChQcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXkpKVxuXHRcdFx0d3JpdGVQa2NzMVJTQVByaXZhdGUoZGVyLCBrZXkpO1xuXHRcdGVsc2Vcblx0XHRcdHdyaXRlUGtjczFSU0FQdWJsaWMoZGVyLCBrZXkpO1xuXHRcdGJyZWFrO1xuXHRjYXNlICdkc2EnOlxuXHRcdGlmIChQcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXkpKVxuXHRcdFx0d3JpdGVQa2NzMURTQVByaXZhdGUoZGVyLCBrZXkpO1xuXHRcdGVsc2Vcblx0XHRcdHdyaXRlUGtjczFEU0FQdWJsaWMoZGVyLCBrZXkpO1xuXHRcdGJyZWFrO1xuXHRjYXNlICdlY2RzYSc6XG5cdFx0aWYgKFByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSkpXG5cdFx0XHR3cml0ZVBrY3MxRUNEU0FQcml2YXRlKGRlciwga2V5KTtcblx0XHRlbHNlXG5cdFx0XHR3cml0ZVBrY3MxRUNEU0FQdWJsaWMoZGVyLCBrZXkpO1xuXHRcdGJyZWFrO1xuXHRkZWZhdWx0OlxuXHRcdHRocm93IChuZXcgRXJyb3IoJ1Vua25vd24ga2V5IGFsZ286ICcgKyBrZXkudHlwZSkpO1xuXHR9XG5cblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGtjczFSU0FQdWJsaWMoZGVyLCBrZXkpIHtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0Lm4uZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5lLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVBrY3MxUlNBUHJpdmF0ZShkZXIsIGtleSkge1xuXHR2YXIgdmVyID0gbmV3IEJ1ZmZlcigxKTtcblx0dmVyWzBdID0gMDtcblx0ZGVyLndyaXRlQnVmZmVyKHZlciwgYXNuMS5CZXIuSW50ZWdlcik7XG5cblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0Lm4uZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5lLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuZC5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LnAuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5xLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRpZiAoIWtleS5wYXJ0LmRtb2RwIHx8ICFrZXkucGFydC5kbW9kcSlcblx0XHR1dGlscy5hZGRSU0FNaXNzaW5nKGtleSk7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5kbW9kcC5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmRtb2RxLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuaXFtcC5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQa2NzMURTQVByaXZhdGUoZGVyLCBrZXkpIHtcblx0dmFyIHZlciA9IG5ldyBCdWZmZXIoMSk7XG5cdHZlclswXSA9IDA7XG5cdGRlci53cml0ZUJ1ZmZlcih2ZXIsIGFzbjEuQmVyLkludGVnZXIpO1xuXG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5wLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQucS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmcuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC55LmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQueC5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQa2NzMURTQVB1YmxpYyhkZXIsIGtleSkge1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQueS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LnAuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5xLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuZy5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQa2NzMUVDRFNBUHVibGljKGRlciwga2V5KSB7XG5cdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cblx0ZGVyLndyaXRlT0lEKCcxLjIuODQwLjEwMDQ1LjIuMScpOyAvKiBlY1B1YmxpY0tleSAqL1xuXHR2YXIgY3VydmUgPSBrZXkucGFydC5jdXJ2ZS5kYXRhLnRvU3RyaW5nKCk7XG5cdHZhciBjdXJ2ZU9pZCA9IGFsZ3MuY3VydmVzW2N1cnZlXS5wa2NzOG9pZDtcblx0YXNzZXJ0LnN0cmluZyhjdXJ2ZU9pZCwgJ2Ega25vd24gRUNEU0EgbmFtZWQgY3VydmUnKTtcblx0ZGVyLndyaXRlT0lEKGN1cnZlT2lkKTtcblxuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblxuXHR2YXIgUSA9IHV0aWxzLmVjTm9ybWFsaXplKGtleS5wYXJ0LlEuZGF0YSwgdHJ1ZSk7XG5cdGRlci53cml0ZUJ1ZmZlcihRLCBhc24xLkJlci5CaXRTdHJpbmcpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVBrY3MxRUNEU0FQcml2YXRlKGRlciwga2V5KSB7XG5cdHZhciB2ZXIgPSBuZXcgQnVmZmVyKDEpO1xuXHR2ZXJbMF0gPSAxO1xuXHRkZXIud3JpdGVCdWZmZXIodmVyLCBhc24xLkJlci5JbnRlZ2VyKTtcblxuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuZC5kYXRhLCBhc24xLkJlci5PY3RldFN0cmluZyk7XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoMHhhMCk7XG5cdHZhciBjdXJ2ZSA9IGtleS5wYXJ0LmN1cnZlLmRhdGEudG9TdHJpbmcoKTtcblx0dmFyIGN1cnZlT2lkID0gYWxncy5jdXJ2ZXNbY3VydmVdLnBrY3M4b2lkO1xuXHRhc3NlcnQuc3RyaW5nKGN1cnZlT2lkLCAnYSBrbm93biBFQ0RTQSBuYW1lZCBjdXJ2ZScpO1xuXHRkZXIud3JpdGVPSUQoY3VydmVPaWQpO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblxuXHRkZXIuc3RhcnRTZXF1ZW5jZSgweGExKTtcblx0dmFyIFEgPSB1dGlscy5lY05vcm1hbGl6ZShrZXkucGFydC5RLmRhdGEsIHRydWUpO1xuXHRkZXIud3JpdGVCdWZmZXIoUSwgYXNuMS5CZXIuQml0U3RyaW5nKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAxNSBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHJlYWQ6IHJlYWQsXG5cdHJlYWRQa2NzODogcmVhZFBrY3M4LFxuXHR3cml0ZTogd3JpdGUsXG5cdHdyaXRlUGtjczg6IHdyaXRlUGtjczgsXG5cblx0cmVhZEVDRFNBQ3VydmU6IHJlYWRFQ0RTQUN1cnZlLFxuXHR3cml0ZUVDRFNBQ3VydmU6IHdyaXRlRUNEU0FDdXJ2ZVxufTtcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgYXNuMSA9IHJlcXVpcmUoJ2FzbjEnKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi4vYWxncycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBLZXkgPSByZXF1aXJlKCcuLi9rZXknKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi4vcHJpdmF0ZS1rZXknKTtcbnZhciBwZW0gPSByZXF1aXJlKCcuL3BlbScpO1xuXG5mdW5jdGlvbiByZWFkKGJ1Ziwgb3B0aW9ucykge1xuXHRyZXR1cm4gKHBlbS5yZWFkKGJ1Ziwgb3B0aW9ucywgJ3BrY3M4JykpO1xufVxuXG5mdW5jdGlvbiB3cml0ZShrZXksIG9wdGlvbnMpIHtcblx0cmV0dXJuIChwZW0ud3JpdGUoa2V5LCBvcHRpb25zLCAncGtjczgnKSk7XG59XG5cbi8qIEhlbHBlciB0byByZWFkIGluIGEgc2luZ2xlIG1waW50ICovXG5mdW5jdGlvbiByZWFkTVBJbnQoZGVyLCBubSkge1xuXHRhc3NlcnQuc3RyaWN0RXF1YWwoZGVyLnBlZWsoKSwgYXNuMS5CZXIuSW50ZWdlcixcblx0ICAgIG5tICsgJyBpcyBub3QgYW4gSW50ZWdlcicpO1xuXHRyZXR1cm4gKHV0aWxzLm1wTm9ybWFsaXplKGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkludGVnZXIsIHRydWUpKSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzOChhbGcsIHR5cGUsIGRlcikge1xuXHQvKiBQcml2YXRlIGtleXMgaW4gcGtjcyM4IGZvcm1hdCBoYXZlIGEgd2VpcmQgZXh0cmEgaW50ICovXG5cdGlmIChkZXIucGVlaygpID09PSBhc24xLkJlci5JbnRlZ2VyKSB7XG5cdFx0YXNzZXJ0LnN0cmljdEVxdWFsKHR5cGUsICdwcml2YXRlJyxcblx0XHQgICAgJ3VuZXhwZWN0ZWQgSW50ZWdlciBhdCBzdGFydCBvZiBwdWJsaWMga2V5Jyk7XG5cdFx0ZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuSW50ZWdlciwgdHJ1ZSk7XG5cdH1cblxuXHRkZXIucmVhZFNlcXVlbmNlKCk7XG5cdHZhciBuZXh0ID0gZGVyLm9mZnNldCArIGRlci5sZW5ndGg7XG5cblx0dmFyIG9pZCA9IGRlci5yZWFkT0lEKCk7XG5cdHN3aXRjaCAob2lkKSB7XG5cdGNhc2UgJzEuMi44NDAuMTEzNTQ5LjEuMS4xJzpcblx0XHRkZXIuX29mZnNldCA9IG5leHQ7XG5cdFx0aWYgKHR5cGUgPT09ICdwdWJsaWMnKVxuXHRcdFx0cmV0dXJuIChyZWFkUGtjczhSU0FQdWJsaWMoZGVyKSk7XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIChyZWFkUGtjczhSU0FQcml2YXRlKGRlcikpO1xuXHRjYXNlICcxLjIuODQwLjEwMDQwLjQuMSc6XG5cdFx0aWYgKHR5cGUgPT09ICdwdWJsaWMnKVxuXHRcdFx0cmV0dXJuIChyZWFkUGtjczhEU0FQdWJsaWMoZGVyKSk7XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIChyZWFkUGtjczhEU0FQcml2YXRlKGRlcikpO1xuXHRjYXNlICcxLjIuODQwLjEwMDQ1LjIuMSc6XG5cdFx0aWYgKHR5cGUgPT09ICdwdWJsaWMnKVxuXHRcdFx0cmV0dXJuIChyZWFkUGtjczhFQ0RTQVB1YmxpYyhkZXIpKTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gKHJlYWRQa2NzOEVDRFNBUHJpdmF0ZShkZXIpKTtcblx0ZGVmYXVsdDpcblx0XHR0aHJvdyAobmV3IEVycm9yKCdVbmtub3duIGtleSB0eXBlIE9JRCAnICsgb2lkKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVhZFBrY3M4UlNBUHVibGljKGRlcikge1xuXHQvLyBiaXQgc3RyaW5nIHNlcXVlbmNlXG5cdGRlci5yZWFkU2VxdWVuY2UoYXNuMS5CZXIuQml0U3RyaW5nKTtcblx0ZGVyLnJlYWRCeXRlKCk7XG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblxuXHQvLyBtb2R1bHVzXG5cdHZhciBuID0gcmVhZE1QSW50KGRlciwgJ21vZHVsdXMnKTtcblx0dmFyIGUgPSByZWFkTVBJbnQoZGVyLCAnZXhwb25lbnQnKTtcblxuXHQvLyBub3csIG1ha2UgdGhlIGtleVxuXHR2YXIga2V5ID0ge1xuXHRcdHR5cGU6ICdyc2EnLFxuXHRcdHNvdXJjZTogZGVyLm9yaWdpbmFsSW5wdXQsXG5cdFx0cGFydHM6IFtcblx0XHRcdHsgbmFtZTogJ2UnLCBkYXRhOiBlIH0sXG5cdFx0XHR7IG5hbWU6ICduJywgZGF0YTogbiB9XG5cdFx0XVxuXHR9O1xuXG5cdHJldHVybiAobmV3IEtleShrZXkpKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBrY3M4UlNBUHJpdmF0ZShkZXIpIHtcblx0ZGVyLnJlYWRTZXF1ZW5jZShhc24xLkJlci5PY3RldFN0cmluZyk7XG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblxuXHR2YXIgdmVyID0gcmVhZE1QSW50KGRlciwgJ3ZlcnNpb24nKTtcblx0YXNzZXJ0LmVxdWFsKHZlclswXSwgMHgwLCAndW5rbm93biBSU0EgcHJpdmF0ZSBrZXkgdmVyc2lvbicpO1xuXG5cdC8vIG1vZHVsdXMgdGhlbiBwdWJsaWMgZXhwb25lbnRcblx0dmFyIG4gPSByZWFkTVBJbnQoZGVyLCAnbW9kdWx1cycpO1xuXHR2YXIgZSA9IHJlYWRNUEludChkZXIsICdwdWJsaWMgZXhwb25lbnQnKTtcblx0dmFyIGQgPSByZWFkTVBJbnQoZGVyLCAncHJpdmF0ZSBleHBvbmVudCcpO1xuXHR2YXIgcCA9IHJlYWRNUEludChkZXIsICdwcmltZTEnKTtcblx0dmFyIHEgPSByZWFkTVBJbnQoZGVyLCAncHJpbWUyJyk7XG5cdHZhciBkbW9kcCA9IHJlYWRNUEludChkZXIsICdleHBvbmVudDEnKTtcblx0dmFyIGRtb2RxID0gcmVhZE1QSW50KGRlciwgJ2V4cG9uZW50MicpO1xuXHR2YXIgaXFtcCA9IHJlYWRNUEludChkZXIsICdpcW1wJyk7XG5cblx0Ly8gbm93LCBtYWtlIHRoZSBrZXlcblx0dmFyIGtleSA9IHtcblx0XHR0eXBlOiAncnNhJyxcblx0XHRwYXJ0czogW1xuXHRcdFx0eyBuYW1lOiAnbicsIGRhdGE6IG4gfSxcblx0XHRcdHsgbmFtZTogJ2UnLCBkYXRhOiBlIH0sXG5cdFx0XHR7IG5hbWU6ICdkJywgZGF0YTogZCB9LFxuXHRcdFx0eyBuYW1lOiAnaXFtcCcsIGRhdGE6IGlxbXAgfSxcblx0XHRcdHsgbmFtZTogJ3AnLCBkYXRhOiBwIH0sXG5cdFx0XHR7IG5hbWU6ICdxJywgZGF0YTogcSB9LFxuXHRcdFx0eyBuYW1lOiAnZG1vZHAnLCBkYXRhOiBkbW9kcCB9LFxuXHRcdFx0eyBuYW1lOiAnZG1vZHEnLCBkYXRhOiBkbW9kcSB9XG5cdFx0XVxuXHR9O1xuXG5cdHJldHVybiAobmV3IFByaXZhdGVLZXkoa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRQa2NzOERTQVB1YmxpYyhkZXIpIHtcblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXG5cdHZhciBwID0gcmVhZE1QSW50KGRlciwgJ3AnKTtcblx0dmFyIHEgPSByZWFkTVBJbnQoZGVyLCAncScpO1xuXHR2YXIgZyA9IHJlYWRNUEludChkZXIsICdnJyk7XG5cblx0Ly8gYml0IHN0cmluZyBzZXF1ZW5jZVxuXHRkZXIucmVhZFNlcXVlbmNlKGFzbjEuQmVyLkJpdFN0cmluZyk7XG5cdGRlci5yZWFkQnl0ZSgpO1xuXG5cdHZhciB5ID0gcmVhZE1QSW50KGRlciwgJ3knKTtcblxuXHQvLyBub3csIG1ha2UgdGhlIGtleVxuXHR2YXIga2V5ID0ge1xuXHRcdHR5cGU6ICdkc2EnLFxuXHRcdHBhcnRzOiBbXG5cdFx0XHR7IG5hbWU6ICdwJywgZGF0YTogcCB9LFxuXHRcdFx0eyBuYW1lOiAncScsIGRhdGE6IHEgfSxcblx0XHRcdHsgbmFtZTogJ2cnLCBkYXRhOiBnIH0sXG5cdFx0XHR7IG5hbWU6ICd5JywgZGF0YTogeSB9XG5cdFx0XVxuXHR9O1xuXG5cdHJldHVybiAobmV3IEtleShrZXkpKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBrY3M4RFNBUHJpdmF0ZShkZXIpIHtcblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXG5cdHZhciBwID0gcmVhZE1QSW50KGRlciwgJ3AnKTtcblx0dmFyIHEgPSByZWFkTVBJbnQoZGVyLCAncScpO1xuXHR2YXIgZyA9IHJlYWRNUEludChkZXIsICdnJyk7XG5cblx0ZGVyLnJlYWRTZXF1ZW5jZShhc24xLkJlci5PY3RldFN0cmluZyk7XG5cdHZhciB4ID0gcmVhZE1QSW50KGRlciwgJ3gnKTtcblxuXHQvKiBUaGUgcGtjcyM4IGZvcm1hdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBwdWJsaWMga2V5ICovXG5cdHZhciB5ID0gdXRpbHMuY2FsY3VsYXRlRFNBUHVibGljKGcsIHAsIHgpO1xuXG5cdHZhciBrZXkgPSB7XG5cdFx0dHlwZTogJ2RzYScsXG5cdFx0cGFydHM6IFtcblx0XHRcdHsgbmFtZTogJ3AnLCBkYXRhOiBwIH0sXG5cdFx0XHR7IG5hbWU6ICdxJywgZGF0YTogcSB9LFxuXHRcdFx0eyBuYW1lOiAnZycsIGRhdGE6IGcgfSxcblx0XHRcdHsgbmFtZTogJ3knLCBkYXRhOiB5IH0sXG5cdFx0XHR7IG5hbWU6ICd4JywgZGF0YTogeCB9XG5cdFx0XVxuXHR9O1xuXG5cdHJldHVybiAobmV3IFByaXZhdGVLZXkoa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRFQ0RTQUN1cnZlKGRlcikge1xuXHR2YXIgY3VydmVOYW1lLCBjdXJ2ZU5hbWVzO1xuXHR2YXIgaiwgYywgY2Q7XG5cblx0aWYgKGRlci5wZWVrKCkgPT09IGFzbjEuQmVyLk9JRCkge1xuXHRcdHZhciBvaWQgPSBkZXIucmVhZE9JRCgpO1xuXG5cdFx0Y3VydmVOYW1lcyA9IE9iamVjdC5rZXlzKGFsZ3MuY3VydmVzKTtcblx0XHRmb3IgKGogPSAwOyBqIDwgY3VydmVOYW1lcy5sZW5ndGg7ICsraikge1xuXHRcdFx0YyA9IGN1cnZlTmFtZXNbal07XG5cdFx0XHRjZCA9IGFsZ3MuY3VydmVzW2NdO1xuXHRcdFx0aWYgKGNkLnBrY3M4b2lkID09PSBvaWQpIHtcblx0XHRcdFx0Y3VydmVOYW1lID0gYztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cdFx0Ly8gRUNQYXJhbWV0ZXJzIHNlcXVlbmNlXG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHRcdHZhciB2ZXJzaW9uID0gZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuSW50ZWdlciwgdHJ1ZSk7XG5cdFx0YXNzZXJ0LnN0cmljdEVxdWFsKHZlcnNpb25bMF0sIDEsICdFQ0RTQSBrZXkgbm90IHZlcnNpb24gMScpO1xuXG5cdFx0dmFyIGN1cnZlID0ge307XG5cblx0XHQvLyBGaWVsZElEIHNlcXVlbmNlXG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHRcdHZhciBmaWVsZFR5cGVPaWQgPSBkZXIucmVhZE9JRCgpO1xuXHRcdGFzc2VydC5zdHJpY3RFcXVhbChmaWVsZFR5cGVPaWQsICcxLjIuODQwLjEwMDQ1LjEuMScsXG5cdFx0ICAgICdFQ0RTQSBrZXkgaXMgbm90IGZyb20gYSBwcmltZS1maWVsZCcpO1xuXHRcdHZhciBwID0gY3VydmUucCA9IHV0aWxzLm1wTm9ybWFsaXplKFxuXHRcdCAgICBkZXIucmVhZFN0cmluZyhhc24xLkJlci5JbnRlZ2VyLCB0cnVlKSk7XG5cdFx0Lypcblx0XHQgKiBwIGFsd2F5cyBzdGFydHMgd2l0aCBhIDEgYml0LCBzbyBjb3VudCB0aGUgemVyb3MgdG8gZ2V0IGl0c1xuXHRcdCAqIHJlYWwgc2l6ZS5cblx0XHQgKi9cblx0XHRjdXJ2ZS5zaXplID0gcC5sZW5ndGggKiA4IC0gdXRpbHMuY291bnRaZXJvcyhwKTtcblxuXHRcdC8vIEN1cnZlIHNlcXVlbmNlXG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHRcdGN1cnZlLmEgPSB1dGlscy5tcE5vcm1hbGl6ZShcblx0XHQgICAgZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuT2N0ZXRTdHJpbmcsIHRydWUpKTtcblx0XHRjdXJ2ZS5iID0gdXRpbHMubXBOb3JtYWxpemUoXG5cdFx0ICAgIGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLk9jdGV0U3RyaW5nLCB0cnVlKSk7XG5cdFx0aWYgKGRlci5wZWVrKCkgPT09IGFzbjEuQmVyLkJpdFN0cmluZylcblx0XHRcdGN1cnZlLnMgPSBkZXIucmVhZFN0cmluZyhhc24xLkJlci5CaXRTdHJpbmcsIHRydWUpO1xuXG5cdFx0Ly8gQ29tYmluZWQgR3ggYW5kIEd5XG5cdFx0Y3VydmUuRyA9IGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLk9jdGV0U3RyaW5nLCB0cnVlKTtcblx0XHRhc3NlcnQuc3RyaWN0RXF1YWwoY3VydmUuR1swXSwgMHg0LFxuXHRcdCAgICAndW5jb21wcmVzc2VkIEcgaXMgcmVxdWlyZWQnKTtcblxuXHRcdGN1cnZlLm4gPSB1dGlscy5tcE5vcm1hbGl6ZShcblx0XHQgICAgZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuSW50ZWdlciwgdHJ1ZSkpO1xuXHRcdGN1cnZlLmggPSB1dGlscy5tcE5vcm1hbGl6ZShcblx0XHQgICAgZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuSW50ZWdlciwgdHJ1ZSkpO1xuXHRcdGFzc2VydC5zdHJpY3RFcXVhbChjdXJ2ZS5oWzBdLCAweDEsICdhIGNvZmFjdG9yPTEgY3VydmUgaXMgJyArXG5cdFx0ICAgICdyZXF1aXJlZCcpO1xuXG5cdFx0Y3VydmVOYW1lcyA9IE9iamVjdC5rZXlzKGFsZ3MuY3VydmVzKTtcblx0XHR2YXIga3MgPSBPYmplY3Qua2V5cyhjdXJ2ZSk7XG5cdFx0Zm9yIChqID0gMDsgaiA8IGN1cnZlTmFtZXMubGVuZ3RoOyArK2opIHtcblx0XHRcdGMgPSBjdXJ2ZU5hbWVzW2pdO1xuXHRcdFx0Y2QgPSBhbGdzLmN1cnZlc1tjXTtcblx0XHRcdHZhciBlcXVhbCA9IHRydWU7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdHZhciBrID0ga3NbaV07XG5cdFx0XHRcdGlmIChjZFtrXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRpZiAodHlwZW9mIChjZFtrXSkgPT09ICdvYmplY3QnICYmXG5cdFx0XHRcdCAgICBjZFtrXS5lcXVhbHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmICghY2Rba10uZXF1YWxzKGN1cnZlW2tdKSkge1xuXHRcdFx0XHRcdFx0ZXF1YWwgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIoY2Rba10pKSB7XG5cdFx0XHRcdFx0aWYgKGNkW2tdLnRvU3RyaW5nKCdiaW5hcnknKVxuXHRcdFx0XHRcdCAgICAhPT0gY3VydmVba10udG9TdHJpbmcoJ2JpbmFyeScpKSB7XG5cdFx0XHRcdFx0XHRlcXVhbCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChjZFtrXSAhPT0gY3VydmVba10pIHtcblx0XHRcdFx0XHRcdGVxdWFsID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChlcXVhbCkge1xuXHRcdFx0XHRjdXJ2ZU5hbWUgPSBjO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIChjdXJ2ZU5hbWUpO1xufVxuXG5mdW5jdGlvbiByZWFkUGtjczhFQ0RTQVByaXZhdGUoZGVyKSB7XG5cdHZhciBjdXJ2ZU5hbWUgPSByZWFkRUNEU0FDdXJ2ZShkZXIpO1xuXHRhc3NlcnQuc3RyaW5nKGN1cnZlTmFtZSwgJ2Ega25vd24gZWxsaXB0aWMgY3VydmUnKTtcblxuXHRkZXIucmVhZFNlcXVlbmNlKGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXG5cdHZhciB2ZXJzaW9uID0gcmVhZE1QSW50KGRlciwgJ3ZlcnNpb24nKTtcblx0YXNzZXJ0LmVxdWFsKHZlcnNpb25bMF0sIDEsICd1bmtub3duIHZlcnNpb24gb2YgRUNEU0Ega2V5Jyk7XG5cblx0dmFyIGQgPSBkZXIucmVhZFN0cmluZyhhc24xLkJlci5PY3RldFN0cmluZywgdHJ1ZSk7XG5cdGRlci5yZWFkU2VxdWVuY2UoMHhhMSk7XG5cblx0dmFyIFEgPSBkZXIucmVhZFN0cmluZyhhc24xLkJlci5CaXRTdHJpbmcsIHRydWUpO1xuXHRRID0gdXRpbHMuZWNOb3JtYWxpemUoUSk7XG5cblx0dmFyIGtleSA9IHtcblx0XHR0eXBlOiAnZWNkc2EnLFxuXHRcdHBhcnRzOiBbXG5cdFx0XHR7IG5hbWU6ICdjdXJ2ZScsIGRhdGE6IG5ldyBCdWZmZXIoY3VydmVOYW1lKSB9LFxuXHRcdFx0eyBuYW1lOiAnUScsIGRhdGE6IFEgfSxcblx0XHRcdHsgbmFtZTogJ2QnLCBkYXRhOiBkIH1cblx0XHRdXG5cdH07XG5cblx0cmV0dXJuIChuZXcgUHJpdmF0ZUtleShrZXkpKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBrY3M4RUNEU0FQdWJsaWMoZGVyKSB7XG5cdHZhciBjdXJ2ZU5hbWUgPSByZWFkRUNEU0FDdXJ2ZShkZXIpO1xuXHRhc3NlcnQuc3RyaW5nKGN1cnZlTmFtZSwgJ2Ega25vd24gZWxsaXB0aWMgY3VydmUnKTtcblxuXHR2YXIgUSA9IGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkJpdFN0cmluZywgdHJ1ZSk7XG5cdFEgPSB1dGlscy5lY05vcm1hbGl6ZShRKTtcblxuXHR2YXIga2V5ID0ge1xuXHRcdHR5cGU6ICdlY2RzYScsXG5cdFx0cGFydHM6IFtcblx0XHRcdHsgbmFtZTogJ2N1cnZlJywgZGF0YTogbmV3IEJ1ZmZlcihjdXJ2ZU5hbWUpIH0sXG5cdFx0XHR7IG5hbWU6ICdRJywgZGF0YTogUSB9XG5cdFx0XVxuXHR9O1xuXG5cdHJldHVybiAobmV3IEtleShrZXkpKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQa2NzOChkZXIsIGtleSkge1xuXHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXG5cdGlmIChQcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXkpKSB7XG5cdFx0dmFyIHNpbGx5SW50ID0gbmV3IEJ1ZmZlcigxKTtcblx0XHRzaWxseUludFswXSA9IDB4MDtcblx0XHRkZXIud3JpdGVCdWZmZXIoc2lsbHlJbnQsIGFzbjEuQmVyLkludGVnZXIpO1xuXHR9XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblx0c3dpdGNoIChrZXkudHlwZSkge1xuXHRjYXNlICdyc2EnOlxuXHRcdGRlci53cml0ZU9JRCgnMS4yLjg0MC4xMTM1NDkuMS4xLjEnKTtcblx0XHRpZiAoUHJpdmF0ZUtleS5pc1ByaXZhdGVLZXkoa2V5KSlcblx0XHRcdHdyaXRlUGtjczhSU0FQcml2YXRlKGtleSwgZGVyKTtcblx0XHRlbHNlXG5cdFx0XHR3cml0ZVBrY3M4UlNBUHVibGljKGtleSwgZGVyKTtcblx0XHRicmVhaztcblx0Y2FzZSAnZHNhJzpcblx0XHRkZXIud3JpdGVPSUQoJzEuMi44NDAuMTAwNDAuNC4xJyk7XG5cdFx0aWYgKFByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSkpXG5cdFx0XHR3cml0ZVBrY3M4RFNBUHJpdmF0ZShrZXksIGRlcik7XG5cdFx0ZWxzZVxuXHRcdFx0d3JpdGVQa2NzOERTQVB1YmxpYyhrZXksIGRlcik7XG5cdFx0YnJlYWs7XG5cdGNhc2UgJ2VjZHNhJzpcblx0XHRkZXIud3JpdGVPSUQoJzEuMi44NDAuMTAwNDUuMi4xJyk7XG5cdFx0aWYgKFByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSkpXG5cdFx0XHR3cml0ZVBrY3M4RUNEU0FQcml2YXRlKGtleSwgZGVyKTtcblx0XHRlbHNlXG5cdFx0XHR3cml0ZVBrY3M4RUNEU0FQdWJsaWMoa2V5LCBkZXIpO1xuXHRcdGJyZWFrO1xuXHRkZWZhdWx0OlxuXHRcdHRocm93IChuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGtleSB0eXBlOiAnICsga2V5LnR5cGUpKTtcblx0fVxuXG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVBrY3M4UlNBUHJpdmF0ZShrZXksIGRlcikge1xuXHRkZXIud3JpdGVOdWxsKCk7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdGRlci5zdGFydFNlcXVlbmNlKGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblxuXHR2YXIgdmVyc2lvbiA9IG5ldyBCdWZmZXIoMSk7XG5cdHZlcnNpb25bMF0gPSAwO1xuXHRkZXIud3JpdGVCdWZmZXIodmVyc2lvbiwgYXNuMS5CZXIuSW50ZWdlcik7XG5cblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0Lm4uZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5lLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuZC5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LnAuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5xLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRpZiAoIWtleS5wYXJ0LmRtb2RwIHx8ICFrZXkucGFydC5kbW9kcSlcblx0XHR1dGlscy5hZGRSU0FNaXNzaW5nKGtleSk7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5kbW9kcC5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmRtb2RxLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuaXFtcC5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblxuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGtjczhSU0FQdWJsaWMoa2V5LCBkZXIpIHtcblx0ZGVyLndyaXRlTnVsbCgpO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblxuXHRkZXIuc3RhcnRTZXF1ZW5jZShhc24xLkJlci5CaXRTdHJpbmcpO1xuXHRkZXIud3JpdGVCeXRlKDB4MDApO1xuXG5cdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5uLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQuZS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGtjczhEU0FQcml2YXRlKGtleSwgZGVyKSB7XG5cdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5wLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQucS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmcuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdGRlci5zdGFydFNlcXVlbmNlKGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LnguZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVBrY3M4RFNBUHVibGljKGtleSwgZGVyKSB7XG5cdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5wLmRhdGEsIGFzbjEuQmVyLkludGVnZXIpO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQucS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLndyaXRlQnVmZmVyKGtleS5wYXJ0LmcuZGF0YSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblxuXHRkZXIuc3RhcnRTZXF1ZW5jZShhc24xLkJlci5CaXRTdHJpbmcpO1xuXHRkZXIud3JpdGVCeXRlKDB4MDApO1xuXHRkZXIud3JpdGVCdWZmZXIoa2V5LnBhcnQueS5kYXRhLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlRUNEU0FDdXJ2ZShrZXksIGRlcikge1xuXHR2YXIgY3VydmUgPSBhbGdzLmN1cnZlc1trZXkuY3VydmVdO1xuXHRpZiAoY3VydmUucGtjczhvaWQpIHtcblx0XHQvKiBUaGlzIG9uZSBoYXMgYSBuYW1lIGluIHBrY3MjOCwgc28ganVzdCB3cml0ZSB0aGUgb2lkICovXG5cdFx0ZGVyLndyaXRlT0lEKGN1cnZlLnBrY3M4b2lkKTtcblxuXHR9IGVsc2Uge1xuXHRcdC8vIEVDUGFyYW1ldGVycyBzZXF1ZW5jZVxuXHRcdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cblx0XHR2YXIgdmVyc2lvbiA9IG5ldyBCdWZmZXIoMSk7XG5cdFx0dmVyc2lvbi53cml0ZVVJbnQ4KDEsIDApO1xuXHRcdGRlci53cml0ZUJ1ZmZlcih2ZXJzaW9uLCBhc24xLkJlci5JbnRlZ2VyKTtcblxuXHRcdC8vIEZpZWxkSUQgc2VxdWVuY2Vcblx0XHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRcdGRlci53cml0ZU9JRCgnMS4yLjg0MC4xMDA0NS4xLjEnKTsgLy8gcHJpbWUtZmllbGRcblx0XHRkZXIud3JpdGVCdWZmZXIoY3VydmUucCwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0XHQvLyBDdXJ2ZSBzZXF1ZW5jZVxuXHRcdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cdFx0dmFyIGEgPSBjdXJ2ZS5wO1xuXHRcdGlmIChhWzBdID09PSAweDApXG5cdFx0XHRhID0gYS5zbGljZSgxKTtcblx0XHRkZXIud3JpdGVCdWZmZXIoYSwgYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRcdGRlci53cml0ZUJ1ZmZlcihjdXJ2ZS5iLCBhc24xLkJlci5PY3RldFN0cmluZyk7XG5cdFx0ZGVyLndyaXRlQnVmZmVyKGN1cnZlLnMsIGFzbjEuQmVyLkJpdFN0cmluZyk7XG5cdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0XHRkZXIud3JpdGVCdWZmZXIoY3VydmUuRywgYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRcdGRlci53cml0ZUJ1ZmZlcihjdXJ2ZS5uLCBhc24xLkJlci5JbnRlZ2VyKTtcblx0XHR2YXIgaCA9IGN1cnZlLmg7XG5cdFx0aWYgKCFoKSB7XG5cdFx0XHRoID0gbmV3IEJ1ZmZlcigxKTtcblx0XHRcdGhbMF0gPSAxO1xuXHRcdH1cblx0XHRkZXIud3JpdGVCdWZmZXIoaCwgYXNuMS5CZXIuSW50ZWdlcik7XG5cblx0XHQvLyBFQ1BhcmFtZXRlcnNcblx0XHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0fVxufVxuXG5mdW5jdGlvbiB3cml0ZVBrY3M4RUNEU0FQdWJsaWMoa2V5LCBkZXIpIHtcblx0d3JpdGVFQ0RTQUN1cnZlKGtleSwgZGVyKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0dmFyIFEgPSB1dGlscy5lY05vcm1hbGl6ZShrZXkucGFydC5RLmRhdGEsIHRydWUpO1xuXHRkZXIud3JpdGVCdWZmZXIoUSwgYXNuMS5CZXIuQml0U3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQa2NzOEVDRFNBUHJpdmF0ZShrZXksIGRlcikge1xuXHR3cml0ZUVDRFNBQ3VydmUoa2V5LCBkZXIpO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblxuXHRkZXIuc3RhcnRTZXF1ZW5jZShhc24xLkJlci5PY3RldFN0cmluZyk7XG5cdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cblx0dmFyIHZlcnNpb24gPSBuZXcgQnVmZmVyKDEpO1xuXHR2ZXJzaW9uWzBdID0gMTtcblx0ZGVyLndyaXRlQnVmZmVyKHZlcnNpb24sIGFzbjEuQmVyLkludGVnZXIpO1xuXG5cdGRlci53cml0ZUJ1ZmZlcihrZXkucGFydC5kLmRhdGEsIGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblxuXHRkZXIuc3RhcnRTZXF1ZW5jZSgweGExKTtcblx0dmFyIFEgPSB1dGlscy5lY05vcm1hbGl6ZShrZXkucGFydC5RLmRhdGEsIHRydWUpO1xuXHRkZXIud3JpdGVCdWZmZXIoUSwgYXNuMS5CZXIuQml0U3RyaW5nKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRyZWFkOiByZWFkLmJpbmQodW5kZWZpbmVkLCBmYWxzZSwgdW5kZWZpbmVkKSxcblx0cmVhZFR5cGU6IHJlYWQuYmluZCh1bmRlZmluZWQsIGZhbHNlKSxcblx0d3JpdGU6IHdyaXRlLFxuXHQvKiBzZW1pLXByaXZhdGUgYXBpLCB1c2VkIGJ5IHNzaHBrLWFnZW50ICovXG5cdHJlYWRQYXJ0aWFsOiByZWFkLmJpbmQodW5kZWZpbmVkLCB0cnVlKSxcblxuXHQvKiBzaGFyZWQgd2l0aCBzc2ggZm9ybWF0ICovXG5cdHJlYWRJbnRlcm5hbDogcmVhZCxcblx0a2V5VHlwZVRvQWxnOiBrZXlUeXBlVG9BbGcsXG5cdGFsZ1RvS2V5VHlwZTogYWxnVG9LZXlUeXBlXG59O1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi4vYWxncycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBLZXkgPSByZXF1aXJlKCcuLi9rZXknKTtcbnZhciBQcml2YXRlS2V5ID0gcmVxdWlyZSgnLi4vcHJpdmF0ZS1rZXknKTtcbnZhciBTU0hCdWZmZXIgPSByZXF1aXJlKCcuLi9zc2gtYnVmZmVyJyk7XG5cbmZ1bmN0aW9uIGFsZ1RvS2V5VHlwZShhbGcpIHtcblx0YXNzZXJ0LnN0cmluZyhhbGcpO1xuXHRpZiAoYWxnID09PSAnc3NoLWRzcycpXG5cdFx0cmV0dXJuICgnZHNhJyk7XG5cdGVsc2UgaWYgKGFsZyA9PT0gJ3NzaC1yc2EnKVxuXHRcdHJldHVybiAoJ3JzYScpO1xuXHRlbHNlIGlmIChhbGcgPT09ICdzc2gtZWQyNTUxOScpXG5cdFx0cmV0dXJuICgnZWQyNTUxOScpO1xuXHRlbHNlIGlmIChhbGcgPT09ICdzc2gtY3VydmUyNTUxOScpXG5cdFx0cmV0dXJuICgnY3VydmUyNTUxOScpO1xuXHRlbHNlIGlmIChhbGcubWF0Y2goL15lY2RzYS1zaGEyLS8pKVxuXHRcdHJldHVybiAoJ2VjZHNhJyk7XG5cdGVsc2Vcblx0XHR0aHJvdyAobmV3IEVycm9yKCdVbmtub3duIGFsZ29yaXRobSAnICsgYWxnKSk7XG59XG5cbmZ1bmN0aW9uIGtleVR5cGVUb0FsZyhrZXkpIHtcblx0YXNzZXJ0Lm9iamVjdChrZXkpO1xuXHRpZiAoa2V5LnR5cGUgPT09ICdkc2EnKVxuXHRcdHJldHVybiAoJ3NzaC1kc3MnKTtcblx0ZWxzZSBpZiAoa2V5LnR5cGUgPT09ICdyc2EnKVxuXHRcdHJldHVybiAoJ3NzaC1yc2EnKTtcblx0ZWxzZSBpZiAoa2V5LnR5cGUgPT09ICdlZDI1NTE5Jylcblx0XHRyZXR1cm4gKCdzc2gtZWQyNTUxOScpO1xuXHRlbHNlIGlmIChrZXkudHlwZSA9PT0gJ2N1cnZlMjU1MTknKVxuXHRcdHJldHVybiAoJ3NzaC1jdXJ2ZTI1NTE5Jyk7XG5cdGVsc2UgaWYgKGtleS50eXBlID09PSAnZWNkc2EnKVxuXHRcdHJldHVybiAoJ2VjZHNhLXNoYTItJyArIGtleS5wYXJ0LmN1cnZlLmRhdGEudG9TdHJpbmcoKSk7XG5cdGVsc2Vcblx0XHR0aHJvdyAobmV3IEVycm9yKCdVbmtub3duIGtleSB0eXBlICcgKyBrZXkudHlwZSkpO1xufVxuXG5mdW5jdGlvbiByZWFkKHBhcnRpYWwsIHR5cGUsIGJ1Ziwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIChidWYpID09PSAnc3RyaW5nJylcblx0XHRidWYgPSBuZXcgQnVmZmVyKGJ1Zik7XG5cdGFzc2VydC5idWZmZXIoYnVmLCAnYnVmJyk7XG5cblx0dmFyIGtleSA9IHt9O1xuXG5cdHZhciBwYXJ0cyA9IGtleS5wYXJ0cyA9IFtdO1xuXHR2YXIgc3NoYnVmID0gbmV3IFNTSEJ1ZmZlcih7YnVmZmVyOiBidWZ9KTtcblxuXHR2YXIgYWxnID0gc3NoYnVmLnJlYWRTdHJpbmcoKTtcblx0YXNzZXJ0Lm9rKCFzc2hidWYuYXRFbmQoKSwgJ2tleSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHBhcnQnKTtcblxuXHRrZXkudHlwZSA9IGFsZ1RvS2V5VHlwZShhbGcpO1xuXG5cdHZhciBwYXJ0Q291bnQgPSBhbGdzLmluZm9ba2V5LnR5cGVdLnBhcnRzLmxlbmd0aDtcblx0aWYgKHR5cGUgJiYgdHlwZSA9PT0gJ3ByaXZhdGUnKVxuXHRcdHBhcnRDb3VudCA9IGFsZ3MucHJpdkluZm9ba2V5LnR5cGVdLnBhcnRzLmxlbmd0aDtcblxuXHR3aGlsZSAoIXNzaGJ1Zi5hdEVuZCgpICYmIHBhcnRzLmxlbmd0aCA8IHBhcnRDb3VudClcblx0XHRwYXJ0cy5wdXNoKHNzaGJ1Zi5yZWFkUGFydCgpKTtcblx0d2hpbGUgKCFwYXJ0aWFsICYmICFzc2hidWYuYXRFbmQoKSlcblx0XHRwYXJ0cy5wdXNoKHNzaGJ1Zi5yZWFkUGFydCgpKTtcblxuXHRhc3NlcnQub2socGFydHMubGVuZ3RoID49IDEsXG5cdCAgICAna2V5IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgcGFydCcpO1xuXHRhc3NlcnQub2socGFydGlhbCB8fCBzc2hidWYuYXRFbmQoKSxcblx0ICAgICdsZWZ0b3ZlciBieXRlcyBhdCBlbmQgb2Yga2V5Jyk7XG5cblx0dmFyIENvbnN0cnVjdG9yID0gS2V5O1xuXHR2YXIgYWxnSW5mbyA9IGFsZ3MuaW5mb1trZXkudHlwZV07XG5cdGlmICh0eXBlID09PSAncHJpdmF0ZScgfHwgYWxnSW5mby5wYXJ0cy5sZW5ndGggIT09IHBhcnRzLmxlbmd0aCkge1xuXHRcdGFsZ0luZm8gPSBhbGdzLnByaXZJbmZvW2tleS50eXBlXTtcblx0XHRDb25zdHJ1Y3RvciA9IFByaXZhdGVLZXk7XG5cdH1cblx0YXNzZXJ0LnN0cmljdEVxdWFsKGFsZ0luZm8ucGFydHMubGVuZ3RoLCBwYXJ0cy5sZW5ndGgpO1xuXG5cdGlmIChrZXkudHlwZSA9PT0gJ2VjZHNhJykge1xuXHRcdHZhciByZXMgPSAvXmVjZHNhLXNoYTItKC4rKSQvLmV4ZWMoYWxnKTtcblx0XHRhc3NlcnQub2socmVzICE9PSBudWxsKTtcblx0XHRhc3NlcnQuc3RyaWN0RXF1YWwocmVzWzFdLCBwYXJ0c1swXS5kYXRhLnRvU3RyaW5nKCkpO1xuXHR9XG5cblx0dmFyIG5vcm1hbGl6ZWQgPSB0cnVlO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGFsZ0luZm8ucGFydHMubGVuZ3RoOyArK2kpIHtcblx0XHRwYXJ0c1tpXS5uYW1lID0gYWxnSW5mby5wYXJ0c1tpXTtcblx0XHRpZiAocGFydHNbaV0ubmFtZSAhPT0gJ2N1cnZlJyAmJlxuXHRcdCAgICBhbGdJbmZvLm5vcm1hbGl6ZSAhPT0gZmFsc2UpIHtcblx0XHRcdHZhciBwID0gcGFydHNbaV07XG5cdFx0XHR2YXIgbmQgPSB1dGlscy5tcE5vcm1hbGl6ZShwLmRhdGEpO1xuXHRcdFx0aWYgKG5kICE9PSBwLmRhdGEpIHtcblx0XHRcdFx0cC5kYXRhID0gbmQ7XG5cdFx0XHRcdG5vcm1hbGl6ZWQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAobm9ybWFsaXplZClcblx0XHRrZXkuX3JmYzQyNTNDYWNoZSA9IHNzaGJ1Zi50b0J1ZmZlcigpO1xuXG5cdGlmIChwYXJ0aWFsICYmIHR5cGVvZiAocGFydGlhbCkgPT09ICdvYmplY3QnKSB7XG5cdFx0cGFydGlhbC5yZW1haW5kZXIgPSBzc2hidWYucmVtYWluZGVyKCk7XG5cdFx0cGFydGlhbC5jb25zdW1lZCA9IHNzaGJ1Zi5fb2Zmc2V0O1xuXHR9XG5cblx0cmV0dXJuIChuZXcgQ29uc3RydWN0b3Ioa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlKGtleSwgb3B0aW9ucykge1xuXHRhc3NlcnQub2JqZWN0KGtleSk7XG5cblx0dmFyIGFsZyA9IGtleVR5cGVUb0FsZyhrZXkpO1xuXHR2YXIgaTtcblxuXHR2YXIgYWxnSW5mbyA9IGFsZ3MuaW5mb1trZXkudHlwZV07XG5cdGlmIChQcml2YXRlS2V5LmlzUHJpdmF0ZUtleShrZXkpKVxuXHRcdGFsZ0luZm8gPSBhbGdzLnByaXZJbmZvW2tleS50eXBlXTtcblx0dmFyIHBhcnRzID0gYWxnSW5mby5wYXJ0cztcblxuXHR2YXIgYnVmID0gbmV3IFNTSEJ1ZmZlcih7fSk7XG5cblx0YnVmLndyaXRlU3RyaW5nKGFsZyk7XG5cblx0Zm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgKytpKSB7XG5cdFx0dmFyIGRhdGEgPSBrZXkucGFydFtwYXJ0c1tpXV0uZGF0YTtcblx0XHRpZiAoYWxnSW5mby5ub3JtYWxpemUgIT09IGZhbHNlKVxuXHRcdFx0ZGF0YSA9IHV0aWxzLm1wTm9ybWFsaXplKGRhdGEpO1xuXHRcdGJ1Zi53cml0ZUJ1ZmZlcihkYXRhKTtcblx0fVxuXG5cdHJldHVybiAoYnVmLnRvQnVmZmVyKCkpO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRyZWFkOiByZWFkLFxuXHRyZWFkU1NIUHJpdmF0ZTogcmVhZFNTSFByaXZhdGUsXG5cdHdyaXRlOiB3cml0ZVxufTtcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgYXNuMSA9IHJlcXVpcmUoJ2FzbjEnKTtcbnZhciBhbGdzID0gcmVxdWlyZSgnLi4vYWxncycpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcblxudmFyIEtleSA9IHJlcXVpcmUoJy4uL2tleScpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuLi9wcml2YXRlLWtleScpO1xudmFyIHBlbSA9IHJlcXVpcmUoJy4vcGVtJyk7XG52YXIgcmZjNDI1MyA9IHJlcXVpcmUoJy4vcmZjNDI1MycpO1xudmFyIFNTSEJ1ZmZlciA9IHJlcXVpcmUoJy4uL3NzaC1idWZmZXInKTtcbnZhciBlcnJvcnMgPSByZXF1aXJlKCcuLi9lcnJvcnMnKTtcblxudmFyIGJjcnlwdDtcblxuZnVuY3Rpb24gcmVhZChidWYsIG9wdGlvbnMpIHtcblx0cmV0dXJuIChwZW0ucmVhZChidWYsIG9wdGlvbnMpKTtcbn1cblxudmFyIE1BR0lDID0gJ29wZW5zc2gta2V5LXYxJztcblxuZnVuY3Rpb24gcmVhZFNTSFByaXZhdGUodHlwZSwgYnVmLCBvcHRpb25zKSB7XG5cdGJ1ZiA9IG5ldyBTU0hCdWZmZXIoe2J1ZmZlcjogYnVmfSk7XG5cblx0dmFyIG1hZ2ljID0gYnVmLnJlYWRDU3RyaW5nKCk7XG5cdGFzc2VydC5zdHJpY3RFcXVhbChtYWdpYywgTUFHSUMsICdiYWQgbWFnaWMgc3RyaW5nJyk7XG5cblx0dmFyIGNpcGhlciA9IGJ1Zi5yZWFkU3RyaW5nKCk7XG5cdHZhciBrZGYgPSBidWYucmVhZFN0cmluZygpO1xuXHR2YXIga2RmT3B0cyA9IGJ1Zi5yZWFkQnVmZmVyKCk7XG5cblx0dmFyIG5rZXlzID0gYnVmLnJlYWRJbnQoKTtcblx0aWYgKG5rZXlzICE9PSAxKSB7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignT3BlblNTSC1mb3JtYXQga2V5IGZpbGUgY29udGFpbnMgJyArXG5cdFx0ICAgICdtdWx0aXBsZSBrZXlzOiB0aGlzIGlzIHVuc3VwcG9ydGVkLicpKTtcblx0fVxuXG5cdHZhciBwdWJLZXkgPSBidWYucmVhZEJ1ZmZlcigpO1xuXG5cdGlmICh0eXBlID09PSAncHVibGljJykge1xuXHRcdGFzc2VydC5vayhidWYuYXRFbmQoKSwgJ2V4Y2VzcyBieXRlcyBsZWZ0IGFmdGVyIGtleScpO1xuXHRcdHJldHVybiAocmZjNDI1My5yZWFkKHB1YktleSkpO1xuXHR9XG5cblx0dmFyIHByaXZLZXlCbG9iID0gYnVmLnJlYWRCdWZmZXIoKTtcblx0YXNzZXJ0Lm9rKGJ1Zi5hdEVuZCgpLCAnZXhjZXNzIGJ5dGVzIGxlZnQgYWZ0ZXIga2V5Jyk7XG5cblx0dmFyIGtkZk9wdHNCdWYgPSBuZXcgU1NIQnVmZmVyKHsgYnVmZmVyOiBrZGZPcHRzIH0pO1xuXHRzd2l0Y2ggKGtkZikge1xuXHRjYXNlICdub25lJzpcblx0XHRpZiAoY2lwaGVyICE9PSAnbm9uZScpIHtcblx0XHRcdHRocm93IChuZXcgRXJyb3IoJ09wZW5TU0gtZm9ybWF0IGtleSB1c2VzIEtERiBcIm5vbmVcIiAnICtcblx0XHRcdCAgICAgJ2J1dCBzcGVjaWZpZXMgYSBjaXBoZXIgb3RoZXIgdGhhbiBcIm5vbmVcIicpKTtcblx0XHR9XG5cdFx0YnJlYWs7XG5cdGNhc2UgJ2JjcnlwdCc6XG5cdFx0dmFyIHNhbHQgPSBrZGZPcHRzQnVmLnJlYWRCdWZmZXIoKTtcblx0XHR2YXIgcm91bmRzID0ga2RmT3B0c0J1Zi5yZWFkSW50KCk7XG5cdFx0dmFyIGNpbmYgPSB1dGlscy5vcGVuc3NoQ2lwaGVySW5mbyhjaXBoZXIpO1xuXHRcdGlmIChiY3J5cHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YmNyeXB0ID0gcmVxdWlyZSgnYmNyeXB0LXBia2RmJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiAob3B0aW9ucy5wYXNzcGhyYXNlKSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdG9wdGlvbnMucGFzc3BocmFzZSA9IG5ldyBCdWZmZXIob3B0aW9ucy5wYXNzcGhyYXNlLFxuXHRcdFx0ICAgICd1dGYtOCcpO1xuXHRcdH1cblx0XHRpZiAoIUJ1ZmZlci5pc0J1ZmZlcihvcHRpb25zLnBhc3NwaHJhc2UpKSB7XG5cdFx0XHR0aHJvdyAobmV3IGVycm9ycy5LZXlFbmNyeXB0ZWRFcnJvcihcblx0XHRcdCAgICBvcHRpb25zLmZpbGVuYW1lLCAnT3BlblNTSCcpKTtcblx0XHR9XG5cblx0XHR2YXIgcGFzcyA9IG5ldyBVaW50OEFycmF5KG9wdGlvbnMucGFzc3BocmFzZSk7XG5cdFx0dmFyIHNhbHRpID0gbmV3IFVpbnQ4QXJyYXkoc2FsdCk7XG5cdFx0LyogVXNlIHRoZSBwYmtkZiB0byBkZXJpdmUgYm90aCB0aGUga2V5IGFuZCB0aGUgSVYuICovXG5cdFx0dmFyIG91dCA9IG5ldyBVaW50OEFycmF5KGNpbmYua2V5U2l6ZSArIGNpbmYuYmxvY2tTaXplKTtcblx0XHR2YXIgcmVzID0gYmNyeXB0LnBia2RmKHBhc3MsIHBhc3MubGVuZ3RoLCBzYWx0aSwgc2FsdGkubGVuZ3RoLFxuXHRcdCAgICBvdXQsIG91dC5sZW5ndGgsIHJvdW5kcyk7XG5cdFx0aWYgKHJlcyAhPT0gMCkge1xuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcignYmNyeXB0X3Bia2RmIGZ1bmN0aW9uIHJldHVybmVkICcgK1xuXHRcdFx0ICAgICdmYWlsdXJlLCBwYXJhbWV0ZXJzIGludmFsaWQnKSk7XG5cdFx0fVxuXHRcdG91dCA9IG5ldyBCdWZmZXIob3V0KTtcblx0XHR2YXIgY2tleSA9IG91dC5zbGljZSgwLCBjaW5mLmtleVNpemUpO1xuXHRcdHZhciBpdiA9IG91dC5zbGljZShjaW5mLmtleVNpemUsIGNpbmYua2V5U2l6ZSArIGNpbmYuYmxvY2tTaXplKTtcblx0XHR2YXIgY2lwaGVyU3RyZWFtID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoY2luZi5vcGVuc3NsTmFtZSxcblx0XHQgICAgY2tleSwgaXYpO1xuXHRcdGNpcGhlclN0cmVhbS5zZXRBdXRvUGFkZGluZyhmYWxzZSk7XG5cdFx0dmFyIGNodW5rLCBjaHVua3MgPSBbXTtcblx0XHRjaXBoZXJTdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZSkge1xuXHRcdFx0aWYgKGUudG9TdHJpbmcoKS5pbmRleE9mKCdiYWQgZGVjcnlwdCcpICE9PSAtMSkge1xuXHRcdFx0XHR0aHJvdyAobmV3IEVycm9yKCdJbmNvcnJlY3QgcGFzc3BocmFzZSAnICtcblx0XHRcdFx0ICAgICdzdXBwbGllZCwgY291bGQgbm90IGRlY3J5cHQga2V5JykpO1xuXHRcdFx0fVxuXHRcdFx0dGhyb3cgKGUpO1xuXHRcdH0pO1xuXHRcdGNpcGhlclN0cmVhbS53cml0ZShwcml2S2V5QmxvYik7XG5cdFx0Y2lwaGVyU3RyZWFtLmVuZCgpO1xuXHRcdHdoaWxlICgoY2h1bmsgPSBjaXBoZXJTdHJlYW0ucmVhZCgpKSAhPT0gbnVsbClcblx0XHRcdGNodW5rcy5wdXNoKGNodW5rKTtcblx0XHRwcml2S2V5QmxvYiA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKTtcblx0XHRicmVhaztcblx0ZGVmYXVsdDpcblx0XHR0aHJvdyAobmV3IEVycm9yKFxuXHRcdCAgICAnT3BlblNTSC1mb3JtYXQga2V5IHVzZXMgdW5rbm93biBLREYgXCInICsga2RmICsgJ1wiJykpO1xuXHR9XG5cblx0YnVmID0gbmV3IFNTSEJ1ZmZlcih7YnVmZmVyOiBwcml2S2V5QmxvYn0pO1xuXG5cdHZhciBjaGVja0ludDEgPSBidWYucmVhZEludCgpO1xuXHR2YXIgY2hlY2tJbnQyID0gYnVmLnJlYWRJbnQoKTtcblx0aWYgKGNoZWNrSW50MSAhPT0gY2hlY2tJbnQyKSB7XG5cdFx0dGhyb3cgKG5ldyBFcnJvcignSW5jb3JyZWN0IHBhc3NwaHJhc2Ugc3VwcGxpZWQsIGNvdWxkIG5vdCAnICtcblx0XHQgICAgJ2RlY3J5cHQga2V5JykpO1xuXHR9XG5cblx0dmFyIHJldCA9IHt9O1xuXHR2YXIga2V5ID0gcmZjNDI1My5yZWFkSW50ZXJuYWwocmV0LCAncHJpdmF0ZScsIGJ1Zi5yZW1haW5kZXIoKSk7XG5cblx0YnVmLnNraXAocmV0LmNvbnN1bWVkKTtcblxuXHR2YXIgY29tbWVudCA9IGJ1Zi5yZWFkU3RyaW5nKCk7XG5cdGtleS5jb21tZW50ID0gY29tbWVudDtcblxuXHRyZXR1cm4gKGtleSk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlKGtleSwgb3B0aW9ucykge1xuXHR2YXIgcHViS2V5O1xuXHRpZiAoUHJpdmF0ZUtleS5pc1ByaXZhdGVLZXkoa2V5KSlcblx0XHRwdWJLZXkgPSBrZXkudG9QdWJsaWMoKTtcblx0ZWxzZVxuXHRcdHB1YktleSA9IGtleTtcblxuXHR2YXIgY2lwaGVyID0gJ25vbmUnO1xuXHR2YXIga2RmID0gJ25vbmUnO1xuXHR2YXIga2Rmb3B0cyA9IG5ldyBCdWZmZXIoMCk7XG5cdHZhciBjaW5mID0geyBibG9ja1NpemU6IDggfTtcblx0dmFyIHBhc3NwaHJhc2U7XG5cdGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcblx0XHRwYXNzcGhyYXNlID0gb3B0aW9ucy5wYXNzcGhyYXNlO1xuXHRcdGlmICh0eXBlb2YgKHBhc3NwaHJhc2UpID09PSAnc3RyaW5nJylcblx0XHRcdHBhc3NwaHJhc2UgPSBuZXcgQnVmZmVyKHBhc3NwaHJhc2UsICd1dGYtOCcpO1xuXHRcdGlmIChwYXNzcGhyYXNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGFzc2VydC5idWZmZXIocGFzc3BocmFzZSwgJ29wdGlvbnMucGFzc3BocmFzZScpO1xuXHRcdFx0YXNzZXJ0Lm9wdGlvbmFsU3RyaW5nKG9wdGlvbnMuY2lwaGVyLCAnb3B0aW9ucy5jaXBoZXInKTtcblx0XHRcdGNpcGhlciA9IG9wdGlvbnMuY2lwaGVyO1xuXHRcdFx0aWYgKGNpcGhlciA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjaXBoZXIgPSAnYWVzMTI4LWN0cic7XG5cdFx0XHRjaW5mID0gdXRpbHMub3BlbnNzaENpcGhlckluZm8oY2lwaGVyKTtcblx0XHRcdGtkZiA9ICdiY3J5cHQnO1xuXHRcdH1cblx0fVxuXG5cdHZhciBwcml2QnVmO1xuXHRpZiAoUHJpdmF0ZUtleS5pc1ByaXZhdGVLZXkoa2V5KSkge1xuXHRcdHByaXZCdWYgPSBuZXcgU1NIQnVmZmVyKHt9KTtcblx0XHR2YXIgY2hlY2tJbnQgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkucmVhZFVJbnQzMkJFKDApO1xuXHRcdHByaXZCdWYud3JpdGVJbnQoY2hlY2tJbnQpO1xuXHRcdHByaXZCdWYud3JpdGVJbnQoY2hlY2tJbnQpO1xuXHRcdHByaXZCdWYud3JpdGUoa2V5LnRvQnVmZmVyKCdyZmM0MjUzJykpO1xuXHRcdHByaXZCdWYud3JpdGVTdHJpbmcoa2V5LmNvbW1lbnQgfHwgJycpO1xuXG5cdFx0dmFyIG4gPSAxO1xuXHRcdHdoaWxlIChwcml2QnVmLl9vZmZzZXQgJSBjaW5mLmJsb2NrU2l6ZSAhPT0gMClcblx0XHRcdHByaXZCdWYud3JpdGVDaGFyKG4rKyk7XG5cdFx0cHJpdkJ1ZiA9IHByaXZCdWYudG9CdWZmZXIoKTtcblx0fVxuXG5cdHN3aXRjaCAoa2RmKSB7XG5cdGNhc2UgJ25vbmUnOlxuXHRcdGJyZWFrO1xuXHRjYXNlICdiY3J5cHQnOlxuXHRcdHZhciBzYWx0ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KTtcblx0XHR2YXIgcm91bmRzID0gMTY7XG5cdFx0dmFyIGtkZnNzaCA9IG5ldyBTU0hCdWZmZXIoe30pO1xuXHRcdGtkZnNzaC53cml0ZUJ1ZmZlcihzYWx0KTtcblx0XHRrZGZzc2gud3JpdGVJbnQocm91bmRzKTtcblx0XHRrZGZvcHRzID0ga2Rmc3NoLnRvQnVmZmVyKCk7XG5cblx0XHRpZiAoYmNyeXB0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGJjcnlwdCA9IHJlcXVpcmUoJ2JjcnlwdC1wYmtkZicpO1xuXHRcdH1cblx0XHR2YXIgcGFzcyA9IG5ldyBVaW50OEFycmF5KHBhc3NwaHJhc2UpO1xuXHRcdHZhciBzYWx0aSA9IG5ldyBVaW50OEFycmF5KHNhbHQpO1xuXHRcdC8qIFVzZSB0aGUgcGJrZGYgdG8gZGVyaXZlIGJvdGggdGhlIGtleSBhbmQgdGhlIElWLiAqL1xuXHRcdHZhciBvdXQgPSBuZXcgVWludDhBcnJheShjaW5mLmtleVNpemUgKyBjaW5mLmJsb2NrU2l6ZSk7XG5cdFx0dmFyIHJlcyA9IGJjcnlwdC5wYmtkZihwYXNzLCBwYXNzLmxlbmd0aCwgc2FsdGksIHNhbHRpLmxlbmd0aCxcblx0XHQgICAgb3V0LCBvdXQubGVuZ3RoLCByb3VuZHMpO1xuXHRcdGlmIChyZXMgIT09IDApIHtcblx0XHRcdHRocm93IChuZXcgRXJyb3IoJ2JjcnlwdF9wYmtkZiBmdW5jdGlvbiByZXR1cm5lZCAnICtcblx0XHRcdCAgICAnZmFpbHVyZSwgcGFyYW1ldGVycyBpbnZhbGlkJykpO1xuXHRcdH1cblx0XHRvdXQgPSBuZXcgQnVmZmVyKG91dCk7XG5cdFx0dmFyIGNrZXkgPSBvdXQuc2xpY2UoMCwgY2luZi5rZXlTaXplKTtcblx0XHR2YXIgaXYgPSBvdXQuc2xpY2UoY2luZi5rZXlTaXplLCBjaW5mLmtleVNpemUgKyBjaW5mLmJsb2NrU2l6ZSk7XG5cblx0XHR2YXIgY2lwaGVyU3RyZWFtID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGNpbmYub3BlbnNzbE5hbWUsXG5cdFx0ICAgIGNrZXksIGl2KTtcblx0XHRjaXBoZXJTdHJlYW0uc2V0QXV0b1BhZGRpbmcoZmFsc2UpO1xuXHRcdHZhciBjaHVuaywgY2h1bmtzID0gW107XG5cdFx0Y2lwaGVyU3RyZWFtLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdHRocm93IChlKTtcblx0XHR9KTtcblx0XHRjaXBoZXJTdHJlYW0ud3JpdGUocHJpdkJ1Zik7XG5cdFx0Y2lwaGVyU3RyZWFtLmVuZCgpO1xuXHRcdHdoaWxlICgoY2h1bmsgPSBjaXBoZXJTdHJlYW0ucmVhZCgpKSAhPT0gbnVsbClcblx0XHRcdGNodW5rcy5wdXNoKGNodW5rKTtcblx0XHRwcml2QnVmID0gQnVmZmVyLmNvbmNhdChjaHVua3MpO1xuXHRcdGJyZWFrO1xuXHRkZWZhdWx0OlxuXHRcdHRocm93IChuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGtkZiAnICsga2RmKSk7XG5cdH1cblxuXHR2YXIgYnVmID0gbmV3IFNTSEJ1ZmZlcih7fSk7XG5cblx0YnVmLndyaXRlQ1N0cmluZyhNQUdJQyk7XG5cdGJ1Zi53cml0ZVN0cmluZyhjaXBoZXIpO1x0LyogY2lwaGVyICovXG5cdGJ1Zi53cml0ZVN0cmluZyhrZGYpO1x0XHQvKiBrZGYgKi9cblx0YnVmLndyaXRlQnVmZmVyKGtkZm9wdHMpO1x0Lyoga2Rmb3B0aW9ucyAqL1xuXG5cdGJ1Zi53cml0ZUludCgxKTtcdFx0LyogbmtleXMgKi9cblx0YnVmLndyaXRlQnVmZmVyKHB1YktleS50b0J1ZmZlcigncmZjNDI1MycpKTtcblxuXHRpZiAocHJpdkJ1Zilcblx0XHRidWYud3JpdGVCdWZmZXIocHJpdkJ1Zik7XG5cblx0YnVmID0gYnVmLnRvQnVmZmVyKCk7XG5cblx0dmFyIGhlYWRlcjtcblx0aWYgKFByaXZhdGVLZXkuaXNQcml2YXRlS2V5KGtleSkpXG5cdFx0aGVhZGVyID0gJ09QRU5TU0ggUFJJVkFURSBLRVknO1xuXHRlbHNlXG5cdFx0aGVhZGVyID0gJ09QRU5TU0ggUFVCTElDIEtFWSc7XG5cblx0dmFyIHRtcCA9IGJ1Zi50b1N0cmluZygnYmFzZTY0Jyk7XG5cdHZhciBsZW4gPSB0bXAubGVuZ3RoICsgKHRtcC5sZW5ndGggLyA3MCkgK1xuXHQgICAgMTggKyAxNiArIGhlYWRlci5sZW5ndGgqMiArIDEwO1xuXHRidWYgPSBuZXcgQnVmZmVyKGxlbik7XG5cdHZhciBvID0gMDtcblx0byArPSBidWYud3JpdGUoJy0tLS0tQkVHSU4gJyArIGhlYWRlciArICctLS0tLVxcbicsIG8pO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRtcC5sZW5ndGg7ICkge1xuXHRcdHZhciBsaW1pdCA9IGkgKyA3MDtcblx0XHRpZiAobGltaXQgPiB0bXAubGVuZ3RoKVxuXHRcdFx0bGltaXQgPSB0bXAubGVuZ3RoO1xuXHRcdG8gKz0gYnVmLndyaXRlKHRtcC5zbGljZShpLCBsaW1pdCksIG8pO1xuXHRcdGJ1ZltvKytdID0gMTA7XG5cdFx0aSA9IGxpbWl0O1xuXHR9XG5cdG8gKz0gYnVmLndyaXRlKCctLS0tLUVORCAnICsgaGVhZGVyICsgJy0tLS0tXFxuJywgbyk7XG5cblx0cmV0dXJuIChidWYuc2xpY2UoMCwgbykpO1xufVxuIiwiLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRyZWFkOiByZWFkLFxuXHR3cml0ZTogd3JpdGVcbn07XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIHJmYzQyNTMgPSByZXF1aXJlKCcuL3JmYzQyNTMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgS2V5ID0gcmVxdWlyZSgnLi4va2V5Jyk7XG52YXIgUHJpdmF0ZUtleSA9IHJlcXVpcmUoJy4uL3ByaXZhdGUta2V5Jyk7XG5cbnZhciBzc2hwcml2ID0gcmVxdWlyZSgnLi9zc2gtcHJpdmF0ZScpO1xuXG4vKkpTU1RZTEVEKi9cbnZhciBTU0hLRVlfUkUgPSAvXihbYS16MC05LV0rKVsgXFx0XSsoW2EtekEtWjAtOStcXC9dK1s9XSopKFtcXG4gXFx0XSsoW15cXG5dKykpPyQvO1xuLypKU1NUWUxFRCovXG52YXIgU1NIS0VZX1JFMiA9IC9eKFthLXowLTktXSspWyBcXHRdKyhbYS16QS1aMC05K1xcLyBcXHRcXG5dK1s9XSopKC4qKSQvO1xuXG5mdW5jdGlvbiByZWFkKGJ1Ziwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIChidWYpICE9PSAnc3RyaW5nJykge1xuXHRcdGFzc2VydC5idWZmZXIoYnVmLCAnYnVmJyk7XG5cdFx0YnVmID0gYnVmLnRvU3RyaW5nKCdhc2NpaScpO1xuXHR9XG5cblx0dmFyIHRyaW1tZWQgPSBidWYudHJpbSgpLnJlcGxhY2UoL1tcXFxcXFxyXS9nLCAnJyk7XG5cdHZhciBtID0gdHJpbW1lZC5tYXRjaChTU0hLRVlfUkUpO1xuXHRpZiAoIW0pXG5cdFx0bSA9IHRyaW1tZWQubWF0Y2goU1NIS0VZX1JFMik7XG5cdGFzc2VydC5vayhtLCAna2V5IG11c3QgbWF0Y2ggcmVnZXgnKTtcblxuXHR2YXIgdHlwZSA9IHJmYzQyNTMuYWxnVG9LZXlUeXBlKG1bMV0pO1xuXHR2YXIga2J1ZiA9IG5ldyBCdWZmZXIobVsyXSwgJ2Jhc2U2NCcpO1xuXG5cdC8qXG5cdCAqIFRoaXMgaXMgYSBiaXQgdHJpY2t5LiBJZiB3ZSBtYW5hZ2VkIHRvIHBhcnNlIHRoZSBrZXkgYW5kIGxvY2F0ZSB0aGVcblx0ICoga2V5IGNvbW1lbnQgd2l0aCB0aGUgcmVnZXgsIHRoZW4gZG8gYSBub24tcGFydGlhbCByZWFkIGFuZCBhc3NlcnRcblx0ICogdGhhdCB3ZSBoYXZlIGNvbnN1bWVkIGFsbCBieXRlcy4gSWYgd2UgY291bGRuJ3QgbG9jYXRlIHRoZSBrZXlcblx0ICogY29tbWVudCwgdGhvdWdoLCB0aGVyZSBtYXkgYmUgd2hpdGVzcGFjZSBzaGVuYW5pZ2FucyBnb2luZyBvbiB0aGF0XG5cdCAqIGhhdmUgY29uam9pbmVkIHRoZSBjb21tZW50IHRvIHRoZSByZXN0IG9mIHRoZSBrZXkuIFdlIGRvIGEgcGFydGlhbFxuXHQgKiByZWFkIGluIHRoaXMgY2FzZSB0byB0cnkgdG8gbWFrZSB0aGUgYmVzdCBvdXQgb2YgYSBzb3JyeSBzaXR1YXRpb24uXG5cdCAqL1xuXHR2YXIga2V5O1xuXHR2YXIgcmV0ID0ge307XG5cdGlmIChtWzRdKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGtleSA9IHJmYzQyNTMucmVhZChrYnVmKTtcblxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG0gPSB0cmltbWVkLm1hdGNoKFNTSEtFWV9SRTIpO1xuXHRcdFx0YXNzZXJ0Lm9rKG0sICdrZXkgbXVzdCBtYXRjaCByZWdleCcpO1xuXHRcdFx0a2J1ZiA9IG5ldyBCdWZmZXIobVsyXSwgJ2Jhc2U2NCcpO1xuXHRcdFx0a2V5ID0gcmZjNDI1My5yZWFkSW50ZXJuYWwocmV0LCAncHVibGljJywga2J1Zik7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGtleSA9IHJmYzQyNTMucmVhZEludGVybmFsKHJldCwgJ3B1YmxpYycsIGtidWYpO1xuXHR9XG5cblx0YXNzZXJ0LnN0cmljdEVxdWFsKHR5cGUsIGtleS50eXBlKTtcblxuXHRpZiAobVs0XSAmJiBtWzRdLmxlbmd0aCA+IDApIHtcblx0XHRrZXkuY29tbWVudCA9IG1bNF07XG5cblx0fSBlbHNlIGlmIChyZXQuY29uc3VtZWQpIHtcblx0XHQvKlxuXHRcdCAqIE5vdyB0aGUgbWFnaWM6IHRyeWluZyB0byByZWNvdmVyIHRoZSBrZXkgY29tbWVudCB3aGVuIGl0J3Ncblx0XHQgKiBnb3R0ZW4gY29uam9pbmVkIHRvIHRoZSBrZXkgb3Igb3RoZXJ3aXNlIHNoZW5hbmlnYW4nZC5cblx0XHQgKlxuXHRcdCAqIFdvcmsgb3V0IGhvdyBtdWNoIGJhc2U2NCB3ZSB1c2VkLCB0aGVuIGRyb3AgYWxsIG5vbi1iYXNlNjRcblx0XHQgKiBjaGFycyBmcm9tIHRoZSBiZWdpbm5pbmcgdXAgdG8gdGhpcyBwb2ludCBpbiB0aGUgdGhlIHN0cmluZy5cblx0XHQgKiBUaGVuIG9mZnNldCBpbiB0aGlzIGFuZCB0cnkgdG8gbWFrZSB1cCBmb3IgbWlzc2luZyA9IGNoYXJzLlxuXHRcdCAqL1xuXHRcdHZhciBkYXRhID0gbVsyXSArIG1bM107XG5cdFx0dmFyIHJlYWxPZmZzZXQgPSBNYXRoLmNlaWwocmV0LmNvbnN1bWVkIC8gMykgKiA0O1xuXHRcdGRhdGEgPSBkYXRhLnNsaWNlKDAsIHJlYWxPZmZzZXQgLSAyKS4gLypKU1NUWUxFRCovXG5cdFx0ICAgIHJlcGxhY2UoL1teYS16QS1aMC05K1xcLz1dL2csICcnKSArXG5cdFx0ICAgIGRhdGEuc2xpY2UocmVhbE9mZnNldCAtIDIpO1xuXG5cdFx0dmFyIHBhZGRpbmcgPSByZXQuY29uc3VtZWQgJSAzO1xuXHRcdGlmIChwYWRkaW5nID4gMCAmJlxuXHRcdCAgICBkYXRhLnNsaWNlKHJlYWxPZmZzZXQgLSAxLCByZWFsT2Zmc2V0KSAhPT0gJz0nKVxuXHRcdFx0cmVhbE9mZnNldC0tO1xuXHRcdHdoaWxlIChkYXRhLnNsaWNlKHJlYWxPZmZzZXQsIHJlYWxPZmZzZXQgKyAxKSA9PT0gJz0nKVxuXHRcdFx0cmVhbE9mZnNldCsrO1xuXG5cdFx0LyogRmluYWxseSwgZ3JhYiB3aGF0IHdlIHRoaW5rIGlzIHRoZSBjb21tZW50ICYgY2xlYW4gaXQgdXAuICovXG5cdFx0dmFyIHRyYWlsZXIgPSBkYXRhLnNsaWNlKHJlYWxPZmZzZXQpO1xuXHRcdHRyYWlsZXIgPSB0cmFpbGVyLnJlcGxhY2UoL1tcXHJcXG5dL2csICcgJykuXG5cdFx0ICAgIHJlcGxhY2UoL15cXHMrLywgJycpO1xuXHRcdGlmICh0cmFpbGVyLm1hdGNoKC9eW2EtekEtWjAtOV0vKSlcblx0XHRcdGtleS5jb21tZW50ID0gdHJhaWxlcjtcblx0fVxuXG5cdHJldHVybiAoa2V5KTtcbn1cblxuZnVuY3Rpb24gd3JpdGUoa2V5LCBvcHRpb25zKSB7XG5cdGFzc2VydC5vYmplY3Qoa2V5KTtcblx0aWYgKCFLZXkuaXNLZXkoa2V5KSlcblx0XHR0aHJvdyAobmV3IEVycm9yKCdNdXN0IGJlIGEgcHVibGljIGtleScpKTtcblxuXHR2YXIgcGFydHMgPSBbXTtcblx0dmFyIGFsZyA9IHJmYzQyNTMua2V5VHlwZVRvQWxnKGtleSk7XG5cdHBhcnRzLnB1c2goYWxnKTtcblxuXHR2YXIgYnVmID0gcmZjNDI1My53cml0ZShrZXkpO1xuXHRwYXJ0cy5wdXNoKGJ1Zi50b1N0cmluZygnYmFzZTY0JykpO1xuXG5cdGlmIChrZXkuY29tbWVudClcblx0XHRwYXJ0cy5wdXNoKGtleS5jb21tZW50KTtcblxuXHRyZXR1cm4gKG5ldyBCdWZmZXIocGFydHMuam9pbignICcpKSk7XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAxNiBKb3llbnQsIEluYy5cblxudmFyIHg1MDkgPSByZXF1aXJlKCcuL3g1MDknKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHJlYWQ6IHJlYWQsXG5cdHZlcmlmeTogeDUwOS52ZXJpZnksXG5cdHNpZ246IHg1MDkuc2lnbixcblx0d3JpdGU6IHdyaXRlXG59O1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBhc24xID0gcmVxdWlyZSgnYXNuMScpO1xudmFyIGFsZ3MgPSByZXF1aXJlKCcuLi9hbGdzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIEtleSA9IHJlcXVpcmUoJy4uL2tleScpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuLi9wcml2YXRlLWtleScpO1xudmFyIHBlbSA9IHJlcXVpcmUoJy4vcGVtJyk7XG52YXIgSWRlbnRpdHkgPSByZXF1aXJlKCcuLi9pZGVudGl0eScpO1xudmFyIFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4uL3NpZ25hdHVyZScpO1xudmFyIENlcnRpZmljYXRlID0gcmVxdWlyZSgnLi4vY2VydGlmaWNhdGUnKTtcblxuZnVuY3Rpb24gcmVhZChidWYsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiAoYnVmKSAhPT0gJ3N0cmluZycpIHtcblx0XHRhc3NlcnQuYnVmZmVyKGJ1ZiwgJ2J1ZicpO1xuXHRcdGJ1ZiA9IGJ1Zi50b1N0cmluZygnYXNjaWknKTtcblx0fVxuXG5cdHZhciBsaW5lcyA9IGJ1Zi50cmltKCkuc3BsaXQoL1tcXHJcXG5dKy9nKTtcblxuXHR2YXIgbSA9IGxpbmVzWzBdLm1hdGNoKC8qSlNTVFlMRUQqL1xuXHQgICAgL1stXStbIF0qQkVHSU4gQ0VSVElGSUNBVEVbIF0qWy1dKy8pO1xuXHRhc3NlcnQub2sobSwgJ2ludmFsaWQgUEVNIGhlYWRlcicpO1xuXG5cdHZhciBtMiA9IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC8qSlNTVFlMRUQqL1xuXHQgICAgL1stXStbIF0qRU5EIENFUlRJRklDQVRFWyBdKlstXSsvKTtcblx0YXNzZXJ0Lm9rKG0yLCAnaW52YWxpZCBQRU0gZm9vdGVyJyk7XG5cblx0dmFyIGhlYWRlcnMgPSB7fTtcblx0d2hpbGUgKHRydWUpIHtcblx0XHRsaW5lcyA9IGxpbmVzLnNsaWNlKDEpO1xuXHRcdG0gPSBsaW5lc1swXS5tYXRjaCgvKkpTU1RZTEVEKi9cblx0XHQgICAgL14oW0EtWmEtejAtOS1dKyk6ICguKykkLyk7XG5cdFx0aWYgKCFtKVxuXHRcdFx0YnJlYWs7XG5cdFx0aGVhZGVyc1ttWzFdLnRvTG93ZXJDYXNlKCldID0gbVsyXTtcblx0fVxuXG5cdC8qIENob3Agb2ZmIHRoZSBmaXJzdCBhbmQgbGFzdCBsaW5lcyAqL1xuXHRsaW5lcyA9IGxpbmVzLnNsaWNlKDAsIC0xKS5qb2luKCcnKTtcblx0YnVmID0gbmV3IEJ1ZmZlcihsaW5lcywgJ2Jhc2U2NCcpO1xuXG5cdHJldHVybiAoeDUwOS5yZWFkKGJ1Ziwgb3B0aW9ucykpO1xufVxuXG5mdW5jdGlvbiB3cml0ZShjZXJ0LCBvcHRpb25zKSB7XG5cdHZhciBkYnVmID0geDUwOS53cml0ZShjZXJ0LCBvcHRpb25zKTtcblxuXHR2YXIgaGVhZGVyID0gJ0NFUlRJRklDQVRFJztcblx0dmFyIHRtcCA9IGRidWYudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXHR2YXIgbGVuID0gdG1wLmxlbmd0aCArICh0bXAubGVuZ3RoIC8gNjQpICtcblx0ICAgIDE4ICsgMTYgKyBoZWFkZXIubGVuZ3RoKjIgKyAxMDtcblx0dmFyIGJ1ZiA9IG5ldyBCdWZmZXIobGVuKTtcblx0dmFyIG8gPSAwO1xuXHRvICs9IGJ1Zi53cml0ZSgnLS0tLS1CRUdJTiAnICsgaGVhZGVyICsgJy0tLS0tXFxuJywgbyk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdG1wLmxlbmd0aDsgKSB7XG5cdFx0dmFyIGxpbWl0ID0gaSArIDY0O1xuXHRcdGlmIChsaW1pdCA+IHRtcC5sZW5ndGgpXG5cdFx0XHRsaW1pdCA9IHRtcC5sZW5ndGg7XG5cdFx0byArPSBidWYud3JpdGUodG1wLnNsaWNlKGksIGxpbWl0KSwgbyk7XG5cdFx0YnVmW28rK10gPSAxMDtcblx0XHRpID0gbGltaXQ7XG5cdH1cblx0byArPSBidWYud3JpdGUoJy0tLS0tRU5EICcgKyBoZWFkZXIgKyAnLS0tLS1cXG4nLCBvKTtcblxuXHRyZXR1cm4gKGJ1Zi5zbGljZSgwLCBvKSk7XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAxNyBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cdHJlYWQ6IHJlYWQsXG5cdHZlcmlmeTogdmVyaWZ5LFxuXHRzaWduOiBzaWduLFxuXHRzaWduQXN5bmM6IHNpZ25Bc3luYyxcblx0d3JpdGU6IHdyaXRlXG59O1xuXG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0LXBsdXMnKTtcbnZhciBhc24xID0gcmVxdWlyZSgnYXNuMScpO1xudmFyIGFsZ3MgPSByZXF1aXJlKCcuLi9hbGdzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIEtleSA9IHJlcXVpcmUoJy4uL2tleScpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuLi9wcml2YXRlLWtleScpO1xudmFyIHBlbSA9IHJlcXVpcmUoJy4vcGVtJyk7XG52YXIgSWRlbnRpdHkgPSByZXF1aXJlKCcuLi9pZGVudGl0eScpO1xudmFyIFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4uL3NpZ25hdHVyZScpO1xudmFyIENlcnRpZmljYXRlID0gcmVxdWlyZSgnLi4vY2VydGlmaWNhdGUnKTtcbnZhciBwa2NzOCA9IHJlcXVpcmUoJy4vcGtjczgnKTtcblxuLypcbiAqIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBSRkM1MjgwIChYLjUwOSkuXG4gKi9cblxuLyogSGVscGVyIHRvIHJlYWQgaW4gYSBzaW5nbGUgbXBpbnQgKi9cbmZ1bmN0aW9uIHJlYWRNUEludChkZXIsIG5tKSB7XG5cdGFzc2VydC5zdHJpY3RFcXVhbChkZXIucGVlaygpLCBhc24xLkJlci5JbnRlZ2VyLFxuXHQgICAgbm0gKyAnIGlzIG5vdCBhbiBJbnRlZ2VyJyk7XG5cdHJldHVybiAodXRpbHMubXBOb3JtYWxpemUoZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuSW50ZWdlciwgdHJ1ZSkpKTtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5KGNlcnQsIGtleSkge1xuXHR2YXIgc2lnID0gY2VydC5zaWduYXR1cmVzLng1MDk7XG5cdGFzc2VydC5vYmplY3Qoc2lnLCAneDUwOSBzaWduYXR1cmUnKTtcblxuXHR2YXIgYWxnUGFydHMgPSBzaWcuYWxnby5zcGxpdCgnLScpO1xuXHRpZiAoYWxnUGFydHNbMF0gIT09IGtleS50eXBlKVxuXHRcdHJldHVybiAoZmFsc2UpO1xuXG5cdHZhciBibG9iID0gc2lnLmNhY2hlO1xuXHRpZiAoYmxvYiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFyIGRlciA9IG5ldyBhc24xLkJlcldyaXRlcigpO1xuXHRcdHdyaXRlVEJTQ2VydChjZXJ0LCBkZXIpO1xuXHRcdGJsb2IgPSBkZXIuYnVmZmVyO1xuXHR9XG5cblx0dmFyIHZlcmlmaWVyID0ga2V5LmNyZWF0ZVZlcmlmeShhbGdQYXJ0c1sxXSk7XG5cdHZlcmlmaWVyLndyaXRlKGJsb2IpO1xuXHRyZXR1cm4gKHZlcmlmaWVyLnZlcmlmeShzaWcuc2lnbmF0dXJlKSk7XG59XG5cbmZ1bmN0aW9uIExvY2FsKGkpIHtcblx0cmV0dXJuIChhc24xLkJlci5Db250ZXh0IHwgYXNuMS5CZXIuQ29uc3RydWN0b3IgfCBpKTtcbn1cblxuZnVuY3Rpb24gQ29udGV4dChpKSB7XG5cdHJldHVybiAoYXNuMS5CZXIuQ29udGV4dCB8IGkpO1xufVxuXG52YXIgU0lHTl9BTEdTID0ge1xuXHQncnNhLW1kNSc6ICcxLjIuODQwLjExMzU0OS4xLjEuNCcsXG5cdCdyc2Etc2hhMSc6ICcxLjIuODQwLjExMzU0OS4xLjEuNScsXG5cdCdyc2Etc2hhMjU2JzogJzEuMi44NDAuMTEzNTQ5LjEuMS4xMScsXG5cdCdyc2Etc2hhMzg0JzogJzEuMi44NDAuMTEzNTQ5LjEuMS4xMicsXG5cdCdyc2Etc2hhNTEyJzogJzEuMi44NDAuMTEzNTQ5LjEuMS4xMycsXG5cdCdkc2Etc2hhMSc6ICcxLjIuODQwLjEwMDQwLjQuMycsXG5cdCdkc2Etc2hhMjU2JzogJzIuMTYuODQwLjEuMTAxLjMuNC4zLjInLFxuXHQnZWNkc2Etc2hhMSc6ICcxLjIuODQwLjEwMDQ1LjQuMScsXG5cdCdlY2RzYS1zaGEyNTYnOiAnMS4yLjg0MC4xMDA0NS40LjMuMicsXG5cdCdlY2RzYS1zaGEzODQnOiAnMS4yLjg0MC4xMDA0NS40LjMuMycsXG5cdCdlY2RzYS1zaGE1MTInOiAnMS4yLjg0MC4xMDA0NS40LjMuNCdcbn07XG5PYmplY3Qua2V5cyhTSUdOX0FMR1MpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcblx0U0lHTl9BTEdTW1NJR05fQUxHU1trXV0gPSBrO1xufSk7XG5TSUdOX0FMR1NbJzEuMy4xNC4zLjIuMyddID0gJ3JzYS1tZDUnO1xuU0lHTl9BTEdTWycxLjMuMTQuMy4yLjI5J10gPSAncnNhLXNoYTEnO1xuXG52YXIgRVhUUyA9IHtcblx0J2lzc3VlcktleUlkJzogJzIuNS4yOS4zNScsXG5cdCdhbHROYW1lJzogJzIuNS4yOS4xNycsXG5cdCdiYXNpY0NvbnN0cmFpbnRzJzogJzIuNS4yOS4xOScsXG5cdCdrZXlVc2FnZSc6ICcyLjUuMjkuMTUnLFxuXHQnZXh0S2V5VXNhZ2UnOiAnMi41LjI5LjM3J1xufTtcblxuZnVuY3Rpb24gcmVhZChidWYsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiAoYnVmKSA9PT0gJ3N0cmluZycpIHtcblx0XHRidWYgPSBuZXcgQnVmZmVyKGJ1ZiwgJ2JpbmFyeScpO1xuXHR9XG5cdGFzc2VydC5idWZmZXIoYnVmLCAnYnVmJyk7XG5cblx0dmFyIGRlciA9IG5ldyBhc24xLkJlclJlYWRlcihidWYpO1xuXG5cdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0aWYgKE1hdGguYWJzKGRlci5sZW5ndGggLSBkZXIucmVtYWluKSA+IDEpIHtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdERVIgc2VxdWVuY2UgZG9lcyBub3QgY29udGFpbiB3aG9sZSBieXRlICcgK1xuXHRcdCAgICAnc3RyZWFtJykpO1xuXHR9XG5cblx0dmFyIHRic1N0YXJ0ID0gZGVyLm9mZnNldDtcblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHR2YXIgc2lnT2Zmc2V0ID0gZGVyLm9mZnNldCArIGRlci5sZW5ndGg7XG5cdHZhciB0YnNFbmQgPSBzaWdPZmZzZXQ7XG5cblx0aWYgKGRlci5wZWVrKCkgPT09IExvY2FsKDApKSB7XG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZShMb2NhbCgwKSk7XG5cdFx0dmFyIHZlcnNpb24gPSBkZXIucmVhZEludCgpO1xuXHRcdGFzc2VydC5vayh2ZXJzaW9uIDw9IDMsXG5cdFx0ICAgICdvbmx5IHguNTA5IHZlcnNpb25zIHVwIHRvIHYzIHN1cHBvcnRlZCcpO1xuXHR9XG5cblx0dmFyIGNlcnQgPSB7fTtcblx0Y2VydC5zaWduYXR1cmVzID0ge307XG5cdHZhciBzaWcgPSAoY2VydC5zaWduYXR1cmVzLng1MDkgPSB7fSk7XG5cdHNpZy5leHRyYXMgPSB7fTtcblxuXHRjZXJ0LnNlcmlhbCA9IHJlYWRNUEludChkZXIsICdzZXJpYWwnKTtcblxuXHRkZXIucmVhZFNlcXVlbmNlKCk7XG5cdHZhciBhZnRlciA9IGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoO1xuXHR2YXIgY2VydEFsZ09pZCA9IGRlci5yZWFkT0lEKCk7XG5cdHZhciBjZXJ0QWxnID0gU0lHTl9BTEdTW2NlcnRBbGdPaWRdO1xuXHRpZiAoY2VydEFsZyA9PT0gdW5kZWZpbmVkKVxuXHRcdHRocm93IChuZXcgRXJyb3IoJ3Vua25vd24gc2lnbmF0dXJlIGFsZ29yaXRobSAnICsgY2VydEFsZ09pZCkpO1xuXG5cdGRlci5fb2Zmc2V0ID0gYWZ0ZXI7XG5cdGNlcnQuaXNzdWVyID0gSWRlbnRpdHkucGFyc2VBc24xKGRlcik7XG5cblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHRjZXJ0LnZhbGlkRnJvbSA9IHJlYWREYXRlKGRlcik7XG5cdGNlcnQudmFsaWRVbnRpbCA9IHJlYWREYXRlKGRlcik7XG5cblx0Y2VydC5zdWJqZWN0cyA9IFtJZGVudGl0eS5wYXJzZUFzbjEoZGVyKV07XG5cblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHRhZnRlciA9IGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoO1xuXHRjZXJ0LnN1YmplY3RLZXkgPSBwa2NzOC5yZWFkUGtjczgodW5kZWZpbmVkLCAncHVibGljJywgZGVyKTtcblx0ZGVyLl9vZmZzZXQgPSBhZnRlcjtcblxuXHQvKiBpc3N1ZXJVbmlxdWVJRCAqL1xuXHRpZiAoZGVyLnBlZWsoKSA9PT0gTG9jYWwoMSkpIHtcblx0XHRkZXIucmVhZFNlcXVlbmNlKExvY2FsKDEpKTtcblx0XHRzaWcuZXh0cmFzLmlzc3VlclVuaXF1ZUlEID1cblx0XHQgICAgYnVmLnNsaWNlKGRlci5vZmZzZXQsIGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoKTtcblx0XHRkZXIuX29mZnNldCArPSBkZXIubGVuZ3RoO1xuXHR9XG5cblx0Lyogc3ViamVjdFVuaXF1ZUlEICovXG5cdGlmIChkZXIucGVlaygpID09PSBMb2NhbCgyKSkge1xuXHRcdGRlci5yZWFkU2VxdWVuY2UoTG9jYWwoMikpO1xuXHRcdHNpZy5leHRyYXMuc3ViamVjdFVuaXF1ZUlEID1cblx0XHQgICAgYnVmLnNsaWNlKGRlci5vZmZzZXQsIGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoKTtcblx0XHRkZXIuX29mZnNldCArPSBkZXIubGVuZ3RoO1xuXHR9XG5cblx0LyogZXh0ZW5zaW9ucyAqL1xuXHRpZiAoZGVyLnBlZWsoKSA9PT0gTG9jYWwoMykpIHtcblx0XHRkZXIucmVhZFNlcXVlbmNlKExvY2FsKDMpKTtcblx0XHR2YXIgZXh0RW5kID0gZGVyLm9mZnNldCArIGRlci5sZW5ndGg7XG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXG5cdFx0d2hpbGUgKGRlci5vZmZzZXQgPCBleHRFbmQpXG5cdFx0XHRyZWFkRXh0ZW5zaW9uKGNlcnQsIGJ1ZiwgZGVyKTtcblxuXHRcdGFzc2VydC5zdHJpY3RFcXVhbChkZXIub2Zmc2V0LCBleHRFbmQpO1xuXHR9XG5cblx0YXNzZXJ0LnN0cmljdEVxdWFsKGRlci5vZmZzZXQsIHNpZ09mZnNldCk7XG5cblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHRhZnRlciA9IGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoO1xuXHR2YXIgc2lnQWxnT2lkID0gZGVyLnJlYWRPSUQoKTtcblx0dmFyIHNpZ0FsZyA9IFNJR05fQUxHU1tzaWdBbGdPaWRdO1xuXHRpZiAoc2lnQWxnID09PSB1bmRlZmluZWQpXG5cdFx0dGhyb3cgKG5ldyBFcnJvcigndW5rbm93biBzaWduYXR1cmUgYWxnb3JpdGhtICcgKyBzaWdBbGdPaWQpKTtcblx0ZGVyLl9vZmZzZXQgPSBhZnRlcjtcblxuXHR2YXIgc2lnRGF0YSA9IGRlci5yZWFkU3RyaW5nKGFzbjEuQmVyLkJpdFN0cmluZywgdHJ1ZSk7XG5cdGlmIChzaWdEYXRhWzBdID09PSAwKVxuXHRcdHNpZ0RhdGEgPSBzaWdEYXRhLnNsaWNlKDEpO1xuXHR2YXIgYWxnUGFydHMgPSBzaWdBbGcuc3BsaXQoJy0nKTtcblxuXHRzaWcuc2lnbmF0dXJlID0gU2lnbmF0dXJlLnBhcnNlKHNpZ0RhdGEsIGFsZ1BhcnRzWzBdLCAnYXNuMScpO1xuXHRzaWcuc2lnbmF0dXJlLmhhc2hBbGdvcml0aG0gPSBhbGdQYXJ0c1sxXTtcblx0c2lnLmFsZ28gPSBzaWdBbGc7XG5cdHNpZy5jYWNoZSA9IGJ1Zi5zbGljZSh0YnNTdGFydCwgdGJzRW5kKTtcblxuXHRyZXR1cm4gKG5ldyBDZXJ0aWZpY2F0ZShjZXJ0KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWREYXRlKGRlcikge1xuXHRpZiAoZGVyLnBlZWsoKSA9PT0gYXNuMS5CZXIuVVRDVGltZSkge1xuXHRcdHJldHVybiAodXRjVGltZVRvRGF0ZShkZXIucmVhZFN0cmluZyhhc24xLkJlci5VVENUaW1lKSkpO1xuXHR9IGVsc2UgaWYgKGRlci5wZWVrKCkgPT09IGFzbjEuQmVyLkdlbmVyYWxpemVkVGltZSkge1xuXHRcdHJldHVybiAoZ1RpbWVUb0RhdGUoZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuR2VuZXJhbGl6ZWRUaW1lKSkpO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IChuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGRhdGUgZm9ybWF0JykpO1xuXHR9XG59XG5cbi8qIFJGQzUyODAsIHNlY3Rpb24gNC4yLjEuNiAoR2VuZXJhbE5hbWUgdHlwZSkgKi9cbnZhciBBTFROQU1FID0ge1xuXHRPdGhlck5hbWU6IExvY2FsKDApLFxuXHRSRkM4MjJOYW1lOiBDb250ZXh0KDEpLFxuXHRETlNOYW1lOiBDb250ZXh0KDIpLFxuXHRYNDAwQWRkcmVzczogTG9jYWwoMyksXG5cdERpcmVjdG9yeU5hbWU6IExvY2FsKDQpLFxuXHRFRElQYXJ0eU5hbWU6IExvY2FsKDUpLFxuXHRVUkk6IENvbnRleHQoNiksXG5cdElQQWRkcmVzczogQ29udGV4dCg3KSxcblx0T0lEOiBDb250ZXh0KDgpXG59O1xuXG4vKiBSRkM1MjgwLCBzZWN0aW9uIDQuMi4xLjEyIChLZXlQdXJwb3NlSWQpICovXG52YXIgRVhUUFVSUE9TRSA9IHtcblx0J3NlcnZlckF1dGgnOiAnMS4zLjYuMS41LjUuNy4zLjEnLFxuXHQnY2xpZW50QXV0aCc6ICcxLjMuNi4xLjUuNS43LjMuMicsXG5cdCdjb2RlU2lnbmluZyc6ICcxLjMuNi4xLjUuNS43LjMuMycsXG5cblx0LyogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvb2lkLWRvY3MvYmxvYi9tYXN0ZXIvcm9vdC5tZCAqL1xuXHQnam95ZW50RG9ja2VyJzogJzEuMy42LjEuNC4xLjM4Njc4LjEuNC4xJyxcblx0J2pveWVudENtb24nOiAnMS4zLjYuMS40LjEuMzg2NzguMS40LjInXG59O1xudmFyIEVYVFBVUlBPU0VfUkVWID0ge307XG5PYmplY3Qua2V5cyhFWFRQVVJQT1NFKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG5cdEVYVFBVUlBPU0VfUkVWW0VYVFBVUlBPU0Vba11dID0gaztcbn0pO1xuXG52YXIgS0VZVVNFQklUUyA9IFtcblx0J3NpZ25hdHVyZScsICdpZGVudGl0eScsICdrZXlFbmNyeXB0aW9uJyxcblx0J2VuY3J5cHRpb24nLCAna2V5QWdyZWVtZW50JywgJ2NhJywgJ2NybCdcbl07XG5cbmZ1bmN0aW9uIHJlYWRFeHRlbnNpb24oY2VydCwgYnVmLCBkZXIpIHtcblx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHR2YXIgYWZ0ZXIgPSBkZXIub2Zmc2V0ICsgZGVyLmxlbmd0aDtcblx0dmFyIGV4dElkID0gZGVyLnJlYWRPSUQoKTtcblx0dmFyIGlkO1xuXHR2YXIgc2lnID0gY2VydC5zaWduYXR1cmVzLng1MDk7XG5cdHNpZy5leHRyYXMuZXh0cyA9IFtdO1xuXG5cdHZhciBjcml0aWNhbDtcblx0aWYgKGRlci5wZWVrKCkgPT09IGFzbjEuQmVyLkJvb2xlYW4pXG5cdFx0Y3JpdGljYWwgPSBkZXIucmVhZEJvb2xlYW4oKTtcblxuXHRzd2l0Y2ggKGV4dElkKSB7XG5cdGNhc2UgKEVYVFMuYmFzaWNDb25zdHJhaW50cyk6XG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZShhc24xLkJlci5PY3RldFN0cmluZyk7XG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHRcdHZhciBiY0VuZCA9IGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoO1xuXHRcdHZhciBjYSA9IGZhbHNlO1xuXHRcdGlmIChkZXIucGVlaygpID09PSBhc24xLkJlci5Cb29sZWFuKVxuXHRcdFx0Y2EgPSBkZXIucmVhZEJvb2xlYW4oKTtcblx0XHRpZiAoY2VydC5wdXJwb3NlcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y2VydC5wdXJwb3NlcyA9IFtdO1xuXHRcdGlmIChjYSA9PT0gdHJ1ZSlcblx0XHRcdGNlcnQucHVycG9zZXMucHVzaCgnY2EnKTtcblx0XHR2YXIgYmMgPSB7IG9pZDogZXh0SWQsIGNyaXRpY2FsOiBjcml0aWNhbCB9O1xuXHRcdGlmIChkZXIub2Zmc2V0IDwgYmNFbmQgJiYgZGVyLnBlZWsoKSA9PT0gYXNuMS5CZXIuSW50ZWdlcilcblx0XHRcdGJjLnBhdGhMZW4gPSBkZXIucmVhZEludCgpO1xuXHRcdHNpZy5leHRyYXMuZXh0cy5wdXNoKGJjKTtcblx0XHRicmVhaztcblx0Y2FzZSAoRVhUUy5leHRLZXlVc2FnZSk6XG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZShhc24xLkJlci5PY3RldFN0cmluZyk7XG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHRcdGlmIChjZXJ0LnB1cnBvc2VzID09PSB1bmRlZmluZWQpXG5cdFx0XHRjZXJ0LnB1cnBvc2VzID0gW107XG5cdFx0dmFyIGVrRW5kID0gZGVyLm9mZnNldCArIGRlci5sZW5ndGg7XG5cdFx0d2hpbGUgKGRlci5vZmZzZXQgPCBla0VuZCkge1xuXHRcdFx0dmFyIG9pZCA9IGRlci5yZWFkT0lEKCk7XG5cdFx0XHRjZXJ0LnB1cnBvc2VzLnB1c2goRVhUUFVSUE9TRV9SRVZbb2lkXSB8fCBvaWQpO1xuXHRcdH1cblx0XHQvKlxuXHRcdCAqIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrOiBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGEgY2VydFxuXHRcdCAqIHRoYXQncyBvbmx5IGFsbG93ZWQgdG8gZG8gc2VydmVyQXV0aCBvciBjbGllbnRBdXRoIChhbmQgbm90XG5cdFx0ICogdGhlIG90aGVyKSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgYWxsIG91ciBTdWJqZWN0cyBhcmUgb2Zcblx0XHQgKiB0aGUgcmlnaHQgdHlwZS4gQnV0IHdlIGFscmVhZHkgcGFyc2VkIG91ciBTdWJqZWN0cyBhbmRcblx0XHQgKiBkZWNpZGVkIGlmIHRoZXkgd2VyZSBob3N0cyBvciB1c2VycyBlYXJsaWVyIChzaW5jZSBpdCBhcHBlYXJzXG5cdFx0ICogZmlyc3QgaW4gdGhlIGNlcnQpLlxuXHRcdCAqXG5cdFx0ICogU28gd2UgZ28gdGhyb3VnaCBhbmQgbXV0YXRlIHRoZW0gaW50byB0aGUgcmlnaHQga2luZCBoZXJlIGlmXG5cdFx0ICogaXQgZG9lc24ndCBtYXRjaC4gVGhpcyBtaWdodCBub3QgYmUgaHVnZWx5IGJlbmVmaWNpYWwsIGFzIGl0XG5cdFx0ICogc2VlbXMgdGhhdCBzaW5nbGUtcHVycG9zZSBjZXJ0cyBhcmUgbm90IG9mdGVuIHNlZW4gaW4gdGhlXG5cdFx0ICogd2lsZC5cblx0XHQgKi9cblx0XHRpZiAoY2VydC5wdXJwb3Nlcy5pbmRleE9mKCdzZXJ2ZXJBdXRoJykgIT09IC0xICYmXG5cdFx0ICAgIGNlcnQucHVycG9zZXMuaW5kZXhPZignY2xpZW50QXV0aCcpID09PSAtMSkge1xuXHRcdFx0Y2VydC5zdWJqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChpZGUpIHtcblx0XHRcdFx0aWYgKGlkZS50eXBlICE9PSAnaG9zdCcpIHtcblx0XHRcdFx0XHRpZGUudHlwZSA9ICdob3N0Jztcblx0XHRcdFx0XHRpZGUuaG9zdG5hbWUgPSBpZGUudWlkIHx8XG5cdFx0XHRcdFx0ICAgIGlkZS5lbWFpbCB8fFxuXHRcdFx0XHRcdCAgICBpZGUuY29tcG9uZW50c1swXS52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChjZXJ0LnB1cnBvc2VzLmluZGV4T2YoJ2NsaWVudEF1dGgnKSAhPT0gLTEgJiZcblx0XHQgICAgY2VydC5wdXJwb3Nlcy5pbmRleE9mKCdzZXJ2ZXJBdXRoJykgPT09IC0xKSB7XG5cdFx0XHRjZXJ0LnN1YmplY3RzLmZvckVhY2goZnVuY3Rpb24gKGlkZSkge1xuXHRcdFx0XHRpZiAoaWRlLnR5cGUgIT09ICd1c2VyJykge1xuXHRcdFx0XHRcdGlkZS50eXBlID0gJ3VzZXInO1xuXHRcdFx0XHRcdGlkZS51aWQgPSBpZGUuaG9zdG5hbWUgfHxcblx0XHRcdFx0XHQgICAgaWRlLmVtYWlsIHx8XG5cdFx0XHRcdFx0ICAgIGlkZS5jb21wb25lbnRzWzBdLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0c2lnLmV4dHJhcy5leHRzLnB1c2goeyBvaWQ6IGV4dElkLCBjcml0aWNhbDogY3JpdGljYWwgfSk7XG5cdFx0YnJlYWs7XG5cdGNhc2UgKEVYVFMua2V5VXNhZ2UpOlxuXHRcdGRlci5yZWFkU2VxdWVuY2UoYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRcdHZhciBiaXRzID0gZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuQml0U3RyaW5nLCB0cnVlKTtcblx0XHR2YXIgc2V0Qml0cyA9IHJlYWRCaXRGaWVsZChiaXRzLCBLRVlVU0VCSVRTKTtcblx0XHRzZXRCaXRzLmZvckVhY2goZnVuY3Rpb24gKGJpdCkge1xuXHRcdFx0aWYgKGNlcnQucHVycG9zZXMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y2VydC5wdXJwb3NlcyA9IFtdO1xuXHRcdFx0aWYgKGNlcnQucHVycG9zZXMuaW5kZXhPZihiaXQpID09PSAtMSlcblx0XHRcdFx0Y2VydC5wdXJwb3Nlcy5wdXNoKGJpdCk7XG5cdFx0fSk7XG5cdFx0c2lnLmV4dHJhcy5leHRzLnB1c2goeyBvaWQ6IGV4dElkLCBjcml0aWNhbDogY3JpdGljYWwsXG5cdFx0ICAgIGJpdHM6IGJpdHMgfSk7XG5cdFx0YnJlYWs7XG5cdGNhc2UgKEVYVFMuYWx0TmFtZSk6XG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZShhc24xLkJlci5PY3RldFN0cmluZyk7XG5cdFx0ZGVyLnJlYWRTZXF1ZW5jZSgpO1xuXHRcdHZhciBhZUVuZCA9IGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoO1xuXHRcdHdoaWxlIChkZXIub2Zmc2V0IDwgYWVFbmQpIHtcblx0XHRcdHN3aXRjaCAoZGVyLnBlZWsoKSkge1xuXHRcdFx0Y2FzZSBBTFROQU1FLk90aGVyTmFtZTpcblx0XHRcdGNhc2UgQUxUTkFNRS5FRElQYXJ0eU5hbWU6XG5cdFx0XHRcdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0XHRcdFx0ZGVyLl9vZmZzZXQgKz0gZGVyLmxlbmd0aDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIEFMVE5BTUUuT0lEOlxuXHRcdFx0XHRkZXIucmVhZE9JRChBTFROQU1FLk9JRCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBBTFROQU1FLlJGQzgyMk5hbWU6XG5cdFx0XHRcdC8qIFJGQzgyMiBzcGVjaWZpZXMgZW1haWwgYWRkcmVzc2VzICovXG5cdFx0XHRcdHZhciBlbWFpbCA9IGRlci5yZWFkU3RyaW5nKEFMVE5BTUUuUkZDODIyTmFtZSk7XG5cdFx0XHRcdGlkID0gSWRlbnRpdHkuZm9yRW1haWwoZW1haWwpO1xuXHRcdFx0XHRpZiAoIWNlcnQuc3ViamVjdHNbMF0uZXF1YWxzKGlkKSlcblx0XHRcdFx0XHRjZXJ0LnN1YmplY3RzLnB1c2goaWQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgQUxUTkFNRS5EaXJlY3RvcnlOYW1lOlxuXHRcdFx0XHRkZXIucmVhZFNlcXVlbmNlKEFMVE5BTUUuRGlyZWN0b3J5TmFtZSk7XG5cdFx0XHRcdGlkID0gSWRlbnRpdHkucGFyc2VBc24xKGRlcik7XG5cdFx0XHRcdGlmICghY2VydC5zdWJqZWN0c1swXS5lcXVhbHMoaWQpKVxuXHRcdFx0XHRcdGNlcnQuc3ViamVjdHMucHVzaChpZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBBTFROQU1FLkROU05hbWU6XG5cdFx0XHRcdHZhciBob3N0ID0gZGVyLnJlYWRTdHJpbmcoXG5cdFx0XHRcdCAgICBBTFROQU1FLkROU05hbWUpO1xuXHRcdFx0XHRpZCA9IElkZW50aXR5LmZvckhvc3QoaG9zdCk7XG5cdFx0XHRcdGlmICghY2VydC5zdWJqZWN0c1swXS5lcXVhbHMoaWQpKVxuXHRcdFx0XHRcdGNlcnQuc3ViamVjdHMucHVzaChpZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZGVyLnJlYWRTdHJpbmcoZGVyLnBlZWsoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRzaWcuZXh0cmFzLmV4dHMucHVzaCh7IG9pZDogZXh0SWQsIGNyaXRpY2FsOiBjcml0aWNhbCB9KTtcblx0XHRicmVhaztcblx0ZGVmYXVsdDpcblx0XHRzaWcuZXh0cmFzLmV4dHMucHVzaCh7XG5cdFx0XHRvaWQ6IGV4dElkLFxuXHRcdFx0Y3JpdGljYWw6IGNyaXRpY2FsLFxuXHRcdFx0ZGF0YTogZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuT2N0ZXRTdHJpbmcsIHRydWUpXG5cdFx0fSk7XG5cdFx0YnJlYWs7XG5cdH1cblxuXHRkZXIuX29mZnNldCA9IGFmdGVyO1xufVxuXG52YXIgVVRDVElNRV9SRSA9XG4gICAgL14oWzAtOV17Mn0pKFswLTldezJ9KShbMC05XXsyfSkoWzAtOV17Mn0pKFswLTldezJ9KShbMC05XXsyfSk/WiQvO1xuZnVuY3Rpb24gdXRjVGltZVRvRGF0ZSh0KSB7XG5cdHZhciBtID0gdC5tYXRjaChVVENUSU1FX1JFKTtcblx0YXNzZXJ0Lm9rKG0sICd0aW1lc3RhbXBzIG11c3QgYmUgaW4gVVRDJyk7XG5cdHZhciBkID0gbmV3IERhdGUoKTtcblxuXHR2YXIgdGhpc1llYXIgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG5cdHZhciBjZW50dXJ5ID0gTWF0aC5mbG9vcih0aGlzWWVhciAvIDEwMCkgKiAxMDA7XG5cblx0dmFyIHllYXIgPSBwYXJzZUludChtWzFdLCAxMCk7XG5cdGlmICh0aGlzWWVhciAlIDEwMCA8IDUwICYmIHllYXIgPj0gNjApXG5cdFx0eWVhciArPSAoY2VudHVyeSAtIDEpO1xuXHRlbHNlXG5cdFx0eWVhciArPSBjZW50dXJ5O1xuXHRkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIHBhcnNlSW50KG1bMl0sIDEwKSAtIDEsIHBhcnNlSW50KG1bM10sIDEwKSk7XG5cdGQuc2V0VVRDSG91cnMocGFyc2VJbnQobVs0XSwgMTApLCBwYXJzZUludChtWzVdLCAxMCkpO1xuXHRpZiAobVs2XSAmJiBtWzZdLmxlbmd0aCA+IDApXG5cdFx0ZC5zZXRVVENTZWNvbmRzKHBhcnNlSW50KG1bNl0sIDEwKSk7XG5cdHJldHVybiAoZCk7XG59XG5cbnZhciBHVElNRV9SRSA9XG4gICAgL14oWzAtOV17NH0pKFswLTldezJ9KShbMC05XXsyfSkoWzAtOV17Mn0pKFswLTldezJ9KShbMC05XXsyfSk/WiQvO1xuZnVuY3Rpb24gZ1RpbWVUb0RhdGUodCkge1xuXHR2YXIgbSA9IHQubWF0Y2goR1RJTUVfUkUpO1xuXHRhc3NlcnQub2sobSk7XG5cdHZhciBkID0gbmV3IERhdGUoKTtcblxuXHRkLnNldFVUQ0Z1bGxZZWFyKHBhcnNlSW50KG1bMV0sIDEwKSwgcGFyc2VJbnQobVsyXSwgMTApIC0gMSxcblx0ICAgIHBhcnNlSW50KG1bM10sIDEwKSk7XG5cdGQuc2V0VVRDSG91cnMocGFyc2VJbnQobVs0XSwgMTApLCBwYXJzZUludChtWzVdLCAxMCkpO1xuXHRpZiAobVs2XSAmJiBtWzZdLmxlbmd0aCA+IDApXG5cdFx0ZC5zZXRVVENTZWNvbmRzKHBhcnNlSW50KG1bNl0sIDEwKSk7XG5cdHJldHVybiAoZCk7XG59XG5cbmZ1bmN0aW9uIHplcm9QYWQobikge1xuXHR2YXIgcyA9ICcnICsgbjtcblx0d2hpbGUgKHMubGVuZ3RoIDwgMilcblx0XHRzID0gJzAnICsgcztcblx0cmV0dXJuIChzKTtcbn1cblxuZnVuY3Rpb24gZGF0ZVRvVVRDVGltZShkKSB7XG5cdHZhciBzID0gJyc7XG5cdHMgKz0gemVyb1BhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDApO1xuXHRzICs9IHplcm9QYWQoZC5nZXRVVENNb250aCgpICsgMSk7XG5cdHMgKz0gemVyb1BhZChkLmdldFVUQ0RhdGUoKSk7XG5cdHMgKz0gemVyb1BhZChkLmdldFVUQ0hvdXJzKCkpO1xuXHRzICs9IHplcm9QYWQoZC5nZXRVVENNaW51dGVzKCkpO1xuXHRzICs9IHplcm9QYWQoZC5nZXRVVENTZWNvbmRzKCkpO1xuXHRzICs9ICdaJztcblx0cmV0dXJuIChzKTtcbn1cblxuZnVuY3Rpb24gc2lnbihjZXJ0LCBrZXkpIHtcblx0aWYgKGNlcnQuc2lnbmF0dXJlcy54NTA5ID09PSB1bmRlZmluZWQpXG5cdFx0Y2VydC5zaWduYXR1cmVzLng1MDkgPSB7fTtcblx0dmFyIHNpZyA9IGNlcnQuc2lnbmF0dXJlcy54NTA5O1xuXG5cdHNpZy5hbGdvID0ga2V5LnR5cGUgKyAnLScgKyBrZXkuZGVmYXVsdEhhc2hBbGdvcml0aG0oKTtcblx0aWYgKFNJR05fQUxHU1tzaWcuYWxnb10gPT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm4gKGZhbHNlKTtcblxuXHR2YXIgZGVyID0gbmV3IGFzbjEuQmVyV3JpdGVyKCk7XG5cdHdyaXRlVEJTQ2VydChjZXJ0LCBkZXIpO1xuXHR2YXIgYmxvYiA9IGRlci5idWZmZXI7XG5cdHNpZy5jYWNoZSA9IGJsb2I7XG5cblx0dmFyIHNpZ25lciA9IGtleS5jcmVhdGVTaWduKCk7XG5cdHNpZ25lci53cml0ZShibG9iKTtcblx0Y2VydC5zaWduYXR1cmVzLng1MDkuc2lnbmF0dXJlID0gc2lnbmVyLnNpZ24oKTtcblxuXHRyZXR1cm4gKHRydWUpO1xufVxuXG5mdW5jdGlvbiBzaWduQXN5bmMoY2VydCwgc2lnbmVyLCBkb25lKSB7XG5cdGlmIChjZXJ0LnNpZ25hdHVyZXMueDUwOSA9PT0gdW5kZWZpbmVkKVxuXHRcdGNlcnQuc2lnbmF0dXJlcy54NTA5ID0ge307XG5cdHZhciBzaWcgPSBjZXJ0LnNpZ25hdHVyZXMueDUwOTtcblxuXHR2YXIgZGVyID0gbmV3IGFzbjEuQmVyV3JpdGVyKCk7XG5cdHdyaXRlVEJTQ2VydChjZXJ0LCBkZXIpO1xuXHR2YXIgYmxvYiA9IGRlci5idWZmZXI7XG5cdHNpZy5jYWNoZSA9IGJsb2I7XG5cblx0c2lnbmVyKGJsb2IsIGZ1bmN0aW9uIChlcnIsIHNpZ25hdHVyZSkge1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdGRvbmUoZXJyKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c2lnLmFsZ28gPSBzaWduYXR1cmUudHlwZSArICctJyArIHNpZ25hdHVyZS5oYXNoQWxnb3JpdGhtO1xuXHRcdGlmIChTSUdOX0FMR1Nbc2lnLmFsZ29dID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRvbmUobmV3IEVycm9yKCdJbnZhbGlkIHNpZ25pbmcgYWxnb3JpdGhtIFwiJyArXG5cdFx0XHQgICAgc2lnLmFsZ28gKyAnXCInKSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHNpZy5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG5cdFx0ZG9uZSgpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gd3JpdGUoY2VydCwgb3B0aW9ucykge1xuXHR2YXIgc2lnID0gY2VydC5zaWduYXR1cmVzLng1MDk7XG5cdGFzc2VydC5vYmplY3Qoc2lnLCAneDUwOSBzaWduYXR1cmUnKTtcblxuXHR2YXIgZGVyID0gbmV3IGFzbjEuQmVyV3JpdGVyKCk7XG5cdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cdGlmIChzaWcuY2FjaGUpIHtcblx0XHRkZXIuX2Vuc3VyZShzaWcuY2FjaGUubGVuZ3RoKTtcblx0XHRzaWcuY2FjaGUuY29weShkZXIuX2J1ZiwgZGVyLl9vZmZzZXQpO1xuXHRcdGRlci5fb2Zmc2V0ICs9IHNpZy5jYWNoZS5sZW5ndGg7XG5cdH0gZWxzZSB7XG5cdFx0d3JpdGVUQlNDZXJ0KGNlcnQsIGRlcik7XG5cdH1cblxuXHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRkZXIud3JpdGVPSUQoU0lHTl9BTEdTW3NpZy5hbGdvXSk7XG5cdGlmIChzaWcuYWxnby5tYXRjaCgvXnJzYS0vKSlcblx0XHRkZXIud3JpdGVOdWxsKCk7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdHZhciBzaWdEYXRhID0gc2lnLnNpZ25hdHVyZS50b0J1ZmZlcignYXNuMScpO1xuXHR2YXIgZGF0YSA9IG5ldyBCdWZmZXIoc2lnRGF0YS5sZW5ndGggKyAxKTtcblx0ZGF0YVswXSA9IDA7XG5cdHNpZ0RhdGEuY29weShkYXRhLCAxKTtcblx0ZGVyLndyaXRlQnVmZmVyKGRhdGEsIGFzbjEuQmVyLkJpdFN0cmluZyk7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xuXG5cdHJldHVybiAoZGVyLmJ1ZmZlcik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVEJTQ2VydChjZXJ0LCBkZXIpIHtcblx0dmFyIHNpZyA9IGNlcnQuc2lnbmF0dXJlcy54NTA5O1xuXHRhc3NlcnQub2JqZWN0KHNpZywgJ3g1MDkgc2lnbmF0dXJlJyk7XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblxuXHRkZXIuc3RhcnRTZXF1ZW5jZShMb2NhbCgwKSk7XG5cdGRlci53cml0ZUludCgyKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0ZGVyLndyaXRlQnVmZmVyKHV0aWxzLm1wTm9ybWFsaXplKGNlcnQuc2VyaWFsKSwgYXNuMS5CZXIuSW50ZWdlcik7XG5cblx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblx0ZGVyLndyaXRlT0lEKFNJR05fQUxHU1tzaWcuYWxnb10pO1xuXHRkZXIuZW5kU2VxdWVuY2UoKTtcblxuXHRjZXJ0Lmlzc3Vlci50b0FzbjEoZGVyKTtcblxuXHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRkZXIud3JpdGVTdHJpbmcoZGF0ZVRvVVRDVGltZShjZXJ0LnZhbGlkRnJvbSksIGFzbjEuQmVyLlVUQ1RpbWUpO1xuXHRkZXIud3JpdGVTdHJpbmcoZGF0ZVRvVVRDVGltZShjZXJ0LnZhbGlkVW50aWwpLCBhc24xLkJlci5VVENUaW1lKTtcblx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cblx0dmFyIHN1YmplY3QgPSBjZXJ0LnN1YmplY3RzWzBdO1xuXHR2YXIgYWx0TmFtZXMgPSBjZXJ0LnN1YmplY3RzLnNsaWNlKDEpO1xuXHRzdWJqZWN0LnRvQXNuMShkZXIpO1xuXG5cdHBrY3M4LndyaXRlUGtjczgoZGVyLCBjZXJ0LnN1YmplY3RLZXkpO1xuXG5cdGlmIChzaWcuZXh0cmFzICYmIHNpZy5leHRyYXMuaXNzdWVyVW5pcXVlSUQpIHtcblx0XHRkZXIud3JpdGVCdWZmZXIoc2lnLmV4dHJhcy5pc3N1ZXJVbmlxdWVJRCwgTG9jYWwoMSkpO1xuXHR9XG5cblx0aWYgKHNpZy5leHRyYXMgJiYgc2lnLmV4dHJhcy5zdWJqZWN0VW5pcXVlSUQpIHtcblx0XHRkZXIud3JpdGVCdWZmZXIoc2lnLmV4dHJhcy5zdWJqZWN0VW5pcXVlSUQsIExvY2FsKDIpKTtcblx0fVxuXG5cdGlmIChhbHROYW1lcy5sZW5ndGggPiAwIHx8IHN1YmplY3QudHlwZSA9PT0gJ2hvc3QnIHx8XG5cdCAgICAoY2VydC5wdXJwb3NlcyAhPT0gdW5kZWZpbmVkICYmIGNlcnQucHVycG9zZXMubGVuZ3RoID4gMCkgfHxcblx0ICAgIChzaWcuZXh0cmFzICYmIHNpZy5leHRyYXMuZXh0cykpIHtcblx0XHRkZXIuc3RhcnRTZXF1ZW5jZShMb2NhbCgzKSk7XG5cdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoKTtcblxuXHRcdHZhciBleHRzID0gW107XG5cdFx0aWYgKGNlcnQucHVycG9zZXMgIT09IHVuZGVmaW5lZCAmJiBjZXJ0LnB1cnBvc2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdGV4dHMucHVzaCh7XG5cdFx0XHRcdG9pZDogRVhUUy5iYXNpY0NvbnN0cmFpbnRzLFxuXHRcdFx0XHRjcml0aWNhbDogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0XHRleHRzLnB1c2goe1xuXHRcdFx0XHRvaWQ6IEVYVFMua2V5VXNhZ2UsXG5cdFx0XHRcdGNyaXRpY2FsOiB0cnVlXG5cdFx0XHR9KTtcblx0XHRcdGV4dHMucHVzaCh7XG5cdFx0XHRcdG9pZDogRVhUUy5leHRLZXlVc2FnZSxcblx0XHRcdFx0Y3JpdGljYWw6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRleHRzLnB1c2goeyBvaWQ6IEVYVFMuYWx0TmFtZSB9KTtcblx0XHRpZiAoc2lnLmV4dHJhcyAmJiBzaWcuZXh0cmFzLmV4dHMpXG5cdFx0XHRleHRzID0gc2lnLmV4dHJhcy5leHRzO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRcdFx0ZGVyLndyaXRlT0lEKGV4dHNbaV0ub2lkKTtcblxuXHRcdFx0aWYgKGV4dHNbaV0uY3JpdGljYWwgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0ZGVyLndyaXRlQm9vbGVhbihleHRzW2ldLmNyaXRpY2FsKTtcblxuXHRcdFx0aWYgKGV4dHNbaV0ub2lkID09PSBFWFRTLmFsdE5hbWUpIHtcblx0XHRcdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRcdFx0XHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRcdFx0XHRpZiAoc3ViamVjdC50eXBlID09PSAnaG9zdCcpIHtcblx0XHRcdFx0XHRkZXIud3JpdGVTdHJpbmcoc3ViamVjdC5ob3N0bmFtZSxcblx0XHRcdFx0XHQgICAgQ29udGV4dCgyKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhbHROYW1lcy5sZW5ndGg7ICsraikge1xuXHRcdFx0XHRcdGlmIChhbHROYW1lc1tqXS50eXBlID09PSAnaG9zdCcpIHtcblx0XHRcdFx0XHRcdGRlci53cml0ZVN0cmluZyhcblx0XHRcdFx0XHRcdCAgICBhbHROYW1lc1tqXS5ob3N0bmFtZSxcblx0XHRcdFx0XHRcdCAgICBBTFROQU1FLkROU05hbWUpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYWx0TmFtZXNbal0udHlwZSA9PT1cblx0XHRcdFx0XHQgICAgJ2VtYWlsJykge1xuXHRcdFx0XHRcdFx0ZGVyLndyaXRlU3RyaW5nKFxuXHRcdFx0XHRcdFx0ICAgIGFsdE5hbWVzW2pdLmVtYWlsLFxuXHRcdFx0XHRcdFx0ICAgIEFMVE5BTUUuUkZDODIyTmFtZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0XHQgKiBFbmNvZGUgYW55dGhpbmcgZWxzZSBhcyBhXG5cdFx0XHRcdFx0XHQgKiBETiBzdHlsZSBuYW1lIGZvciBub3cuXG5cdFx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRcdGRlci5zdGFydFNlcXVlbmNlKFxuXHRcdFx0XHRcdFx0ICAgIEFMVE5BTUUuRGlyZWN0b3J5TmFtZSk7XG5cdFx0XHRcdFx0XHRhbHROYW1lc1tqXS50b0FzbjEoZGVyKTtcblx0XHRcdFx0XHRcdGRlci5lbmRTZXF1ZW5jZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0XHRcdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGV4dHNbaV0ub2lkID09PSBFWFRTLmJhc2ljQ29uc3RyYWludHMpIHtcblx0XHRcdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRcdFx0XHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRcdFx0XHR2YXIgY2EgPSAoY2VydC5wdXJwb3Nlcy5pbmRleE9mKCdjYScpICE9PSAtMSk7XG5cdFx0XHRcdHZhciBwYXRoTGVuID0gZXh0c1tpXS5wYXRoTGVuO1xuXHRcdFx0XHRkZXIud3JpdGVCb29sZWFuKGNhKTtcblx0XHRcdFx0aWYgKHBhdGhMZW4gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRkZXIud3JpdGVJbnQocGF0aExlbik7XG5cdFx0XHRcdGRlci5lbmRTZXF1ZW5jZSgpO1xuXHRcdFx0XHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0XHRcdH0gZWxzZSBpZiAoZXh0c1tpXS5vaWQgPT09IEVYVFMuZXh0S2V5VXNhZ2UpIHtcblx0XHRcdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRcdFx0XHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRcdFx0XHRjZXJ0LnB1cnBvc2VzLmZvckVhY2goZnVuY3Rpb24gKHB1cnBvc2UpIHtcblx0XHRcdFx0XHRpZiAocHVycG9zZSA9PT0gJ2NhJylcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRpZiAoS0VZVVNFQklUUy5pbmRleE9mKHB1cnBvc2UpICE9PSAtMSlcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR2YXIgb2lkID0gcHVycG9zZTtcblx0XHRcdFx0XHRpZiAoRVhUUFVSUE9TRVtwdXJwb3NlXSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0b2lkID0gRVhUUFVSUE9TRVtwdXJwb3NlXTtcblx0XHRcdFx0XHRkZXIud3JpdGVPSUQob2lkKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGRlci5lbmRTZXF1ZW5jZSgpO1xuXHRcdFx0XHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0XHRcdH0gZWxzZSBpZiAoZXh0c1tpXS5vaWQgPT09IEVYVFMua2V5VXNhZ2UpIHtcblx0XHRcdFx0ZGVyLnN0YXJ0U2VxdWVuY2UoYXNuMS5CZXIuT2N0ZXRTdHJpbmcpO1xuXHRcdFx0XHQvKlxuXHRcdFx0XHQgKiBJZiB3ZSBwYXJzZWQgdGhpcyBjZXJ0aWZpY2F0ZSBmcm9tIGEgYnl0ZVxuXHRcdFx0XHQgKiBzdHJlYW0gKGkuZS4gd2UgZGlkbid0IGdlbmVyYXRlIGl0IGluIHNzaHBrKVxuXHRcdFx0XHQgKiB0aGVuIHdlJ2xsIGhhdmUgYSBcIi5iaXRzXCIgcHJvcGVydHkgb24gdGhlXG5cdFx0XHRcdCAqIGV4dCB3aXRoIHRoZSBvcmlnaW5hbCByYXcgYnl0ZSBjb250ZW50cy5cblx0XHRcdFx0ICpcblx0XHRcdFx0ICogSWYgd2UgaGF2ZSB0aGlzLCB1c2UgaXQgaGVyZSBpbnN0ZWFkIG9mXG5cdFx0XHRcdCAqIHJlZ2VuZXJhdGluZyBpdC4gVGhpcyBndWFyYW50ZWVzIHdlIG91dHB1dFxuXHRcdFx0XHQgKiB0aGUgc2FtZSBkYXRhIHdlIHBhcnNlZCwgc28gc2lnbmF0dXJlcyBzdGlsbFxuXHRcdFx0XHQgKiB2YWxpZGF0ZS5cblx0XHRcdFx0ICovXG5cdFx0XHRcdGlmIChleHRzW2ldLmJpdHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGRlci53cml0ZUJ1ZmZlcihleHRzW2ldLmJpdHMsXG5cdFx0XHRcdFx0ICAgIGFzbjEuQmVyLkJpdFN0cmluZyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIGJpdHMgPSB3cml0ZUJpdEZpZWxkKGNlcnQucHVycG9zZXMsXG5cdFx0XHRcdFx0ICAgIEtFWVVTRUJJVFMpO1xuXHRcdFx0XHRcdGRlci53cml0ZUJ1ZmZlcihiaXRzLFxuXHRcdFx0XHRcdCAgICBhc24xLkJlci5CaXRTdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRlci5lbmRTZXF1ZW5jZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVyLndyaXRlQnVmZmVyKGV4dHNbaV0uZGF0YSxcblx0XHRcdFx0ICAgIGFzbjEuQmVyLk9jdGV0U3RyaW5nKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdFx0fVxuXG5cdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdFx0ZGVyLmVuZFNlcXVlbmNlKCk7XG5cdH1cblxuXHRkZXIuZW5kU2VxdWVuY2UoKTtcbn1cblxuLypcbiAqIFJlYWRzIGFuIEFTTi4xIEJFUiBiaXRmaWVsZCBvdXQgb2YgdGhlIEJ1ZmZlciBwcm9kdWNlZCBieSBkb2luZ1xuICogYEJlclJlYWRlciNyZWFkU3RyaW5nKGFzbjEuQmVyLkJpdFN0cmluZylgLiBUaGF0IGZ1bmN0aW9uIGdpdmVzIHVzIHRoZSByYXdcbiAqIGNvbnRlbnRzIG9mIHRoZSBCaXRTdHJpbmcgdGFnLCB3aGljaCBpcyBhIGNvdW50IG9mIHVudXNlZCBiaXRzIGZvbGxvd2VkIGJ5XG4gKiB0aGUgYml0cyBhcyBhIHJpZ2h0LXBhZGRlZCBieXRlIHN0cmluZy5cbiAqXG4gKiBgYml0c2AgaXMgdGhlIEJ1ZmZlciwgYGJpdEluZGV4YCBzaG91bGQgY29udGFpbiBhbiBhcnJheSBvZiBzdHJpbmcgbmFtZXNcbiAqIGZvciB0aGUgYml0cyBpbiB0aGUgc3RyaW5nLCBvcmRlcmVkIHN0YXJ0aW5nIHdpdGggYml0ICMwIGluIHRoZSBBU04uMSBzcGVjLlxuICpcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgU3RyaW5ncywgdGhlIG5hbWVzIG9mIHRoZSBiaXRzIHRoYXQgd2VyZSBzZXQgdG8gMS5cbiAqL1xuZnVuY3Rpb24gcmVhZEJpdEZpZWxkKGJpdHMsIGJpdEluZGV4KSB7XG5cdHZhciBiaXRMZW4gPSA4ICogKGJpdHMubGVuZ3RoIC0gMSkgLSBiaXRzWzBdO1xuXHR2YXIgc2V0Qml0cyA9IHt9O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGJpdExlbjsgKytpKSB7XG5cdFx0dmFyIGJ5dGVOID0gMSArIE1hdGguZmxvb3IoaSAvIDgpO1xuXHRcdHZhciBiaXQgPSA3IC0gKGkgJSA4KTtcblx0XHR2YXIgbWFzayA9IDEgPDwgYml0O1xuXHRcdHZhciBiaXRWYWwgPSAoKGJpdHNbYnl0ZU5dICYgbWFzaykgIT09IDApO1xuXHRcdHZhciBuYW1lID0gYml0SW5kZXhbaV07XG5cdFx0aWYgKGJpdFZhbCAmJiB0eXBlb2YgKG5hbWUpID09PSAnc3RyaW5nJykge1xuXHRcdFx0c2V0Qml0c1tuYW1lXSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiAoT2JqZWN0LmtleXMoc2V0Qml0cykpO1xufVxuXG4vKlxuICogYHNldEJpdHNgIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsIGNvbnRhaW5pbmcgdGhlIG5hbWVzIGZvciBlYWNoIGJpdCB0aGF0XG4gKiBzb3VsZCBiZSBzZXQgdG8gMS4gYGJpdEluZGV4YCBpcyBzYW1lIGFzIGluIGByZWFkQml0RmllbGQoKWAuXG4gKlxuICogUmV0dXJucyBhIEJ1ZmZlciwgcmVhZHkgdG8gYmUgd3JpdHRlbiBvdXQgd2l0aCBgQmVyV3JpdGVyI3dyaXRlU3RyaW5nKClgLlxuICovXG5mdW5jdGlvbiB3cml0ZUJpdEZpZWxkKHNldEJpdHMsIGJpdEluZGV4KSB7XG5cdHZhciBiaXRMZW4gPSBiaXRJbmRleC5sZW5ndGg7XG5cdHZhciBibGVuID0gTWF0aC5jZWlsKGJpdExlbiAvIDgpO1xuXHR2YXIgdW51c2VkID0gYmxlbiAqIDggLSBiaXRMZW47XG5cdHZhciBiaXRzID0gbmV3IEJ1ZmZlcigxICsgYmxlbik7XG5cdGJpdHMuZmlsbCgwKTtcblx0Yml0c1swXSA9IHVudXNlZDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBiaXRMZW47ICsraSkge1xuXHRcdHZhciBieXRlTiA9IDEgKyBNYXRoLmZsb29yKGkgLyA4KTtcblx0XHR2YXIgYml0ID0gNyAtIChpICUgOCk7XG5cdFx0dmFyIG1hc2sgPSAxIDw8IGJpdDtcblx0XHR2YXIgbmFtZSA9IGJpdEluZGV4W2ldO1xuXHRcdGlmIChuYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRjb250aW51ZTtcblx0XHR2YXIgYml0VmFsID0gKHNldEJpdHMuaW5kZXhPZihuYW1lKSAhPT0gLTEpO1xuXHRcdGlmIChiaXRWYWwpIHtcblx0XHRcdGJpdHNbYnl0ZU5dIHw9IG1hc2s7XG5cdFx0fVxuXHR9XG5cdHJldHVybiAoYml0cyk7XG59XG4iLCIvLyBDb3B5cmlnaHQgMjAxNyBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSBJZGVudGl0eTtcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydC1wbHVzJyk7XG52YXIgYWxncyA9IHJlcXVpcmUoJy4vYWxncycpO1xudmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xudmFyIEZpbmdlcnByaW50ID0gcmVxdWlyZSgnLi9maW5nZXJwcmludCcpO1xudmFyIFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vc2lnbmF0dXJlJyk7XG52YXIgZXJycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBhc24xID0gcmVxdWlyZSgnYXNuMScpO1xuXG4vKkpTU1RZTEVEKi9cbnZhciBETlNfTkFNRV9SRSA9IC9eKFsqXXxbYS16MC05XVthLXowLTlcXC1dezAsNjJ9KSg/OlxcLihbKl18W2EtejAtOV1bYS16MC05XFwtXXswLDYyfSkpKiQvaTtcblxudmFyIG9pZHMgPSB7fTtcbm9pZHMuY24gPSAnMi41LjQuMyc7XG5vaWRzLm8gPSAnMi41LjQuMTAnO1xub2lkcy5vdSA9ICcyLjUuNC4xMSc7XG5vaWRzLmwgPSAnMi41LjQuNyc7XG5vaWRzLnMgPSAnMi41LjQuOCc7XG5vaWRzLmMgPSAnMi41LjQuNic7XG5vaWRzLnNuID0gJzIuNS40LjQnO1xub2lkcy5kYyA9ICcwLjkuMjM0Mi4xOTIwMDMwMC4xMDAuMS4yNSc7XG5vaWRzLnVpZCA9ICcwLjkuMjM0Mi4xOTIwMDMwMC4xMDAuMS4xJztcbm9pZHMubWFpbCA9ICcwLjkuMjM0Mi4xOTIwMDMwMC4xMDAuMS4zJztcblxudmFyIHVub2lkcyA9IHt9O1xuT2JqZWN0LmtleXMob2lkcykuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuXHR1bm9pZHNbb2lkc1trXV0gPSBrO1xufSk7XG5cbmZ1bmN0aW9uIElkZW50aXR5KG9wdHMpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRhc3NlcnQub2JqZWN0KG9wdHMsICdvcHRpb25zJyk7XG5cdGFzc2VydC5hcnJheU9mT2JqZWN0KG9wdHMuY29tcG9uZW50cywgJ29wdGlvbnMuY29tcG9uZW50cycpO1xuXHR0aGlzLmNvbXBvbmVudHMgPSBvcHRzLmNvbXBvbmVudHM7XG5cdHRoaXMuY29tcG9uZW50TG9va3VwID0ge307XG5cdHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG5cdFx0aWYgKGMubmFtZSAmJiAhYy5vaWQpXG5cdFx0XHRjLm9pZCA9IG9pZHNbYy5uYW1lXTtcblx0XHRpZiAoYy5vaWQgJiYgIWMubmFtZSlcblx0XHRcdGMubmFtZSA9IHVub2lkc1tjLm9pZF07XG5cdFx0aWYgKHNlbGYuY29tcG9uZW50TG9va3VwW2MubmFtZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHNlbGYuY29tcG9uZW50TG9va3VwW2MubmFtZV0gPSBbXTtcblx0XHRzZWxmLmNvbXBvbmVudExvb2t1cFtjLm5hbWVdLnB1c2goYyk7XG5cdH0pO1xuXHRpZiAodGhpcy5jb21wb25lbnRMb29rdXAuY24gJiYgdGhpcy5jb21wb25lbnRMb29rdXAuY24ubGVuZ3RoID4gMCkge1xuXHRcdHRoaXMuY24gPSB0aGlzLmNvbXBvbmVudExvb2t1cC5jblswXS52YWx1ZTtcblx0fVxuXHRhc3NlcnQub3B0aW9uYWxTdHJpbmcob3B0cy50eXBlLCAnb3B0aW9ucy50eXBlJyk7XG5cdGlmIChvcHRzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdGlmICh0aGlzLmNvbXBvbmVudHMubGVuZ3RoID09PSAxICYmXG5cdFx0ICAgIHRoaXMuY29tcG9uZW50TG9va3VwLmNuICYmXG5cdFx0ICAgIHRoaXMuY29tcG9uZW50TG9va3VwLmNuLmxlbmd0aCA9PT0gMSAmJlxuXHRcdCAgICB0aGlzLmNvbXBvbmVudExvb2t1cC5jblswXS52YWx1ZS5tYXRjaChETlNfTkFNRV9SRSkpIHtcblx0XHRcdHRoaXMudHlwZSA9ICdob3N0Jztcblx0XHRcdHRoaXMuaG9zdG5hbWUgPSB0aGlzLmNvbXBvbmVudExvb2t1cC5jblswXS52YWx1ZTtcblxuXHRcdH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRMb29rdXAuZGMgJiZcblx0XHQgICAgdGhpcy5jb21wb25lbnRzLmxlbmd0aCA9PT0gdGhpcy5jb21wb25lbnRMb29rdXAuZGMubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLnR5cGUgPSAnaG9zdCc7XG5cdFx0XHR0aGlzLmhvc3RuYW1lID0gdGhpcy5jb21wb25lbnRMb29rdXAuZGMubWFwKFxuXHRcdFx0ICAgIGZ1bmN0aW9uIChjKSB7XG5cdFx0XHRcdHJldHVybiAoYy52YWx1ZSk7XG5cdFx0XHR9KS5qb2luKCcuJyk7XG5cblx0XHR9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50TG9va3VwLnVpZCAmJlxuXHRcdCAgICB0aGlzLmNvbXBvbmVudHMubGVuZ3RoID09PVxuXHRcdCAgICB0aGlzLmNvbXBvbmVudExvb2t1cC51aWQubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLnR5cGUgPSAndXNlcic7XG5cdFx0XHR0aGlzLnVpZCA9IHRoaXMuY29tcG9uZW50TG9va3VwLnVpZFswXS52YWx1ZTtcblxuXHRcdH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRMb29rdXAuY24gJiZcblx0XHQgICAgdGhpcy5jb21wb25lbnRMb29rdXAuY24ubGVuZ3RoID09PSAxICYmXG5cdFx0ICAgIHRoaXMuY29tcG9uZW50TG9va3VwLmNuWzBdLnZhbHVlLm1hdGNoKEROU19OQU1FX1JFKSkge1xuXHRcdFx0dGhpcy50eXBlID0gJ2hvc3QnO1xuXHRcdFx0dGhpcy5ob3N0bmFtZSA9IHRoaXMuY29tcG9uZW50TG9va3VwLmNuWzBdLnZhbHVlO1xuXG5cdFx0fSBlbHNlIGlmICh0aGlzLmNvbXBvbmVudExvb2t1cC51aWQgJiZcblx0XHQgICAgdGhpcy5jb21wb25lbnRMb29rdXAudWlkLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0dGhpcy50eXBlID0gJ3VzZXInO1xuXHRcdFx0dGhpcy51aWQgPSB0aGlzLmNvbXBvbmVudExvb2t1cC51aWRbMF0udmFsdWU7XG5cblx0XHR9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50TG9va3VwLm1haWwgJiZcblx0XHQgICAgdGhpcy5jb21wb25lbnRMb29rdXAubWFpbC5sZW5ndGggPT09IDEpIHtcblx0XHRcdHRoaXMudHlwZSA9ICdlbWFpbCc7XG5cdFx0XHR0aGlzLmVtYWlsID0gdGhpcy5jb21wb25lbnRMb29rdXAubWFpbFswXS52YWx1ZTtcblxuXHRcdH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRMb29rdXAuY24gJiZcblx0XHQgICAgdGhpcy5jb21wb25lbnRMb29rdXAuY24ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHR0aGlzLnR5cGUgPSAndXNlcic7XG5cdFx0XHR0aGlzLnVpZCA9IHRoaXMuY29tcG9uZW50TG9va3VwLmNuWzBdLnZhbHVlO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudHlwZSA9ICd1bmtub3duJztcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gb3B0cy50eXBlO1xuXHRcdGlmICh0aGlzLnR5cGUgPT09ICdob3N0Jylcblx0XHRcdHRoaXMuaG9zdG5hbWUgPSBvcHRzLmhvc3RuYW1lO1xuXHRcdGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ3VzZXInKVxuXHRcdFx0dGhpcy51aWQgPSBvcHRzLnVpZDtcblx0XHRlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdlbWFpbCcpXG5cdFx0XHR0aGlzLmVtYWlsID0gb3B0cy5lbWFpbDtcblx0XHRlbHNlXG5cdFx0XHR0aHJvdyAobmV3IEVycm9yKCdVbmtub3duIHR5cGUgJyArIHRoaXMudHlwZSkpO1xuXHR9XG59XG5cbklkZW50aXR5LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICh0aGlzLmNvbXBvbmVudHMubWFwKGZ1bmN0aW9uIChjKSB7XG5cdFx0cmV0dXJuIChjLm5hbWUudG9VcHBlckNhc2UoKSArICc9JyArIGMudmFsdWUpO1xuXHR9KS5qb2luKCcsICcpKTtcbn07XG5cbi8qXG4gKiBUaGVzZSBhcmUgZnJvbSBYLjY4MCAtLSBQcmludGFibGVTdHJpbmcgYWxsb3dlZCBjaGFycyBhcmUgaW4gc2VjdGlvbiAzNy40XG4gKiB0YWJsZSA4LiBTcGVjIGZvciBJQTVTdHJpbmdzIGlzIFwiMSw2ICsgU1BBQ0UgKyBERUxcIiB3aGVyZSAxIHJlZmVycyB0b1xuICogSVNPIElSICMwMDEgKHN0YW5kYXJkIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycykgYW5kIDYgcmVmZXJzIHRvIElTTyBJUiAjMDA2XG4gKiAodGhlIGJhc2ljIEFTQ0lJIGNoYXJhY3RlciBzZXQpLlxuICovXG4vKiBKU1NUWUxFRCAqL1xudmFyIE5PVF9QUklOVEFCTEUgPSAvW15hLXpBLVowLTkgJygpLCsuXFwvOj0/LV0vO1xuLyogSlNTVFlMRUQgKi9cbnZhciBOT1RfSUE1ID0gL1teXFx4MDAtXFx4N2ZdLztcblxuSWRlbnRpdHkucHJvdG90eXBlLnRvQXNuMSA9IGZ1bmN0aW9uIChkZXIsIHRhZykge1xuXHRkZXIuc3RhcnRTZXF1ZW5jZSh0YWcpO1xuXHR0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuXHRcdGRlci5zdGFydFNlcXVlbmNlKGFzbjEuQmVyLkNvbnN0cnVjdG9yIHwgYXNuMS5CZXIuU2V0KTtcblx0XHRkZXIuc3RhcnRTZXF1ZW5jZSgpO1xuXHRcdGRlci53cml0ZU9JRChjLm9pZCk7XG5cdFx0Lypcblx0XHQgKiBJZiB3ZSBmaXQgaW4gYSBQcmludGFibGVTdHJpbmcsIHVzZSB0aGF0LiBPdGhlcndpc2UgdXNlIGFuXG5cdFx0ICogSUE1U3RyaW5nIG9yIFVURjhTdHJpbmcuXG5cdFx0ICovXG5cdFx0aWYgKGMudmFsdWUubWF0Y2goTk9UX0lBNSkpIHtcblx0XHRcdHZhciB2ID0gbmV3IEJ1ZmZlcihjLnZhbHVlLCAndXRmOCcpO1xuXHRcdFx0ZGVyLndyaXRlQnVmZmVyKHYsIGFzbjEuQmVyLlV0ZjhTdHJpbmcpO1xuXHRcdH0gZWxzZSBpZiAoYy52YWx1ZS5tYXRjaChOT1RfUFJJTlRBQkxFKSkge1xuXHRcdFx0ZGVyLndyaXRlU3RyaW5nKGMudmFsdWUsIGFzbjEuQmVyLklBNVN0cmluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlci53cml0ZVN0cmluZyhjLnZhbHVlLCBhc24xLkJlci5QcmludGFibGVTdHJpbmcpO1xuXHRcdH1cblx0XHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0XHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0fSk7XG5cdGRlci5lbmRTZXF1ZW5jZSgpO1xufTtcblxuZnVuY3Rpb24gZ2xvYk1hdGNoKGEsIGIpIHtcblx0aWYgKGEgPT09ICcqKicgfHwgYiA9PT0gJyoqJylcblx0XHRyZXR1cm4gKHRydWUpO1xuXHR2YXIgYVBhcnRzID0gYS5zcGxpdCgnLicpO1xuXHR2YXIgYlBhcnRzID0gYi5zcGxpdCgnLicpO1xuXHRpZiAoYVBhcnRzLmxlbmd0aCAhPT0gYlBhcnRzLmxlbmd0aClcblx0XHRyZXR1cm4gKGZhbHNlKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhUGFydHMubGVuZ3RoOyArK2kpIHtcblx0XHRpZiAoYVBhcnRzW2ldID09PSAnKicgfHwgYlBhcnRzW2ldID09PSAnKicpXG5cdFx0XHRjb250aW51ZTtcblx0XHRpZiAoYVBhcnRzW2ldICE9PSBiUGFydHNbaV0pXG5cdFx0XHRyZXR1cm4gKGZhbHNlKTtcblx0fVxuXHRyZXR1cm4gKHRydWUpO1xufVxuXG5JZGVudGl0eS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG5cdGlmICghSWRlbnRpdHkuaXNJZGVudGl0eShvdGhlciwgWzEsIDBdKSlcblx0XHRyZXR1cm4gKGZhbHNlKTtcblx0aWYgKG90aGVyLmNvbXBvbmVudHMubGVuZ3RoICE9PSB0aGlzLmNvbXBvbmVudHMubGVuZ3RoKVxuXHRcdHJldHVybiAoZmFsc2UpO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29tcG9uZW50cy5sZW5ndGg7ICsraSkge1xuXHRcdGlmICh0aGlzLmNvbXBvbmVudHNbaV0ub2lkICE9PSBvdGhlci5jb21wb25lbnRzW2ldLm9pZClcblx0XHRcdHJldHVybiAoZmFsc2UpO1xuXHRcdGlmICghZ2xvYk1hdGNoKHRoaXMuY29tcG9uZW50c1tpXS52YWx1ZSxcblx0XHQgICAgb3RoZXIuY29tcG9uZW50c1tpXS52YWx1ZSkpIHtcblx0XHRcdHJldHVybiAoZmFsc2UpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gKHRydWUpO1xufTtcblxuSWRlbnRpdHkuZm9ySG9zdCA9IGZ1bmN0aW9uIChob3N0bmFtZSkge1xuXHRhc3NlcnQuc3RyaW5nKGhvc3RuYW1lLCAnaG9zdG5hbWUnKTtcblx0cmV0dXJuIChuZXcgSWRlbnRpdHkoe1xuXHRcdHR5cGU6ICdob3N0Jyxcblx0XHRob3N0bmFtZTogaG9zdG5hbWUsXG5cdFx0Y29tcG9uZW50czogWyB7IG5hbWU6ICdjbicsIHZhbHVlOiBob3N0bmFtZSB9IF1cblx0fSkpO1xufTtcblxuSWRlbnRpdHkuZm9yVXNlciA9IGZ1bmN0aW9uICh1aWQpIHtcblx0YXNzZXJ0LnN0cmluZyh1aWQsICd1aWQnKTtcblx0cmV0dXJuIChuZXcgSWRlbnRpdHkoe1xuXHRcdHR5cGU6ICd1c2VyJyxcblx0XHR1aWQ6IHVpZCxcblx0XHRjb21wb25lbnRzOiBbIHsgbmFtZTogJ3VpZCcsIHZhbHVlOiB1aWQgfSBdXG5cdH0pKTtcbn07XG5cbklkZW50aXR5LmZvckVtYWlsID0gZnVuY3Rpb24gKGVtYWlsKSB7XG5cdGFzc2VydC5zdHJpbmcoZW1haWwsICdlbWFpbCcpO1xuXHRyZXR1cm4gKG5ldyBJZGVudGl0eSh7XG5cdFx0dHlwZTogJ2VtYWlsJyxcblx0XHRlbWFpbDogZW1haWwsXG5cdFx0Y29tcG9uZW50czogWyB7IG5hbWU6ICdtYWlsJywgdmFsdWU6IGVtYWlsIH0gXVxuXHR9KSk7XG59O1xuXG5JZGVudGl0eS5wYXJzZUROID0gZnVuY3Rpb24gKGRuKSB7XG5cdGFzc2VydC5zdHJpbmcoZG4sICdkbicpO1xuXHR2YXIgcGFydHMgPSBkbi5zcGxpdCgnLCcpO1xuXHR2YXIgY21wcyA9IHBhcnRzLm1hcChmdW5jdGlvbiAoYykge1xuXHRcdGMgPSBjLnRyaW0oKTtcblx0XHR2YXIgZXFQb3MgPSBjLmluZGV4T2YoJz0nKTtcblx0XHR2YXIgbmFtZSA9IGMuc2xpY2UoMCwgZXFQb3MpLnRvTG93ZXJDYXNlKCk7XG5cdFx0dmFyIHZhbHVlID0gYy5zbGljZShlcVBvcyArIDEpO1xuXHRcdHJldHVybiAoeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG5cdH0pO1xuXHRyZXR1cm4gKG5ldyBJZGVudGl0eSh7IGNvbXBvbmVudHM6IGNtcHMgfSkpO1xufTtcblxuSWRlbnRpdHkucGFyc2VBc24xID0gZnVuY3Rpb24gKGRlciwgdG9wKSB7XG5cdHZhciBjb21wb25lbnRzID0gW107XG5cdGRlci5yZWFkU2VxdWVuY2UodG9wKTtcblx0dmFyIGVuZCA9IGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoO1xuXHR3aGlsZSAoZGVyLm9mZnNldCA8IGVuZCkge1xuXHRcdGRlci5yZWFkU2VxdWVuY2UoYXNuMS5CZXIuQ29uc3RydWN0b3IgfCBhc24xLkJlci5TZXQpO1xuXHRcdHZhciBhZnRlciA9IGRlci5vZmZzZXQgKyBkZXIubGVuZ3RoO1xuXHRcdGRlci5yZWFkU2VxdWVuY2UoKTtcblx0XHR2YXIgb2lkID0gZGVyLnJlYWRPSUQoKTtcblx0XHR2YXIgdHlwZSA9IGRlci5wZWVrKCk7XG5cdFx0dmFyIHZhbHVlO1xuXHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdGNhc2UgYXNuMS5CZXIuUHJpbnRhYmxlU3RyaW5nOlxuXHRcdGNhc2UgYXNuMS5CZXIuSUE1U3RyaW5nOlxuXHRcdGNhc2UgYXNuMS5CZXIuT2N0ZXRTdHJpbmc6XG5cdFx0Y2FzZSBhc24xLkJlci5UNjFTdHJpbmc6XG5cdFx0XHR2YWx1ZSA9IGRlci5yZWFkU3RyaW5nKHR5cGUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBhc24xLkJlci5VdGY4U3RyaW5nOlxuXHRcdFx0dmFsdWUgPSBkZXIucmVhZFN0cmluZyh0eXBlLCB0cnVlKTtcblx0XHRcdHZhbHVlID0gdmFsdWUudG9TdHJpbmcoJ3V0ZjgnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgYXNuMS5CZXIuQ2hhcmFjdGVyU3RyaW5nOlxuXHRcdGNhc2UgYXNuMS5CZXIuQk1QU3RyaW5nOlxuXHRcdFx0dmFsdWUgPSBkZXIucmVhZFN0cmluZyh0eXBlLCB0cnVlKTtcblx0XHRcdHZhbHVlID0gdmFsdWUudG9TdHJpbmcoJ3V0ZjE2bGUnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyAobmV3IEVycm9yKCdVbmtub3duIGFzbjEgdHlwZSAnICsgdHlwZSkpO1xuXHRcdH1cblx0XHRjb21wb25lbnRzLnB1c2goeyBvaWQ6IG9pZCwgdmFsdWU6IHZhbHVlIH0pO1xuXHRcdGRlci5fb2Zmc2V0ID0gYWZ0ZXI7XG5cdH1cblx0ZGVyLl9vZmZzZXQgPSBlbmQ7XG5cdHJldHVybiAobmV3IElkZW50aXR5KHtcblx0XHRjb21wb25lbnRzOiBjb21wb25lbnRzXG5cdH0pKTtcbn07XG5cbklkZW50aXR5LmlzSWRlbnRpdHkgPSBmdW5jdGlvbiAob2JqLCB2ZXIpIHtcblx0cmV0dXJuICh1dGlscy5pc0NvbXBhdGlibGUob2JqLCBJZGVudGl0eSwgdmVyKSk7XG59O1xuXG4vKlxuICogQVBJIHZlcnNpb25zIGZvciBJZGVudGl0eTpcbiAqIFsxLDBdIC0tIGluaXRpYWwgdmVyXG4gKi9cbklkZW50aXR5LnByb3RvdHlwZS5fc3NocGtBcGlWZXJzaW9uID0gWzEsIDBdO1xuXG5JZGVudGl0eS5fb2xkVmVyc2lvbkRldGVjdCA9IGZ1bmN0aW9uIChvYmopIHtcblx0cmV0dXJuIChbMSwgMF0pO1xufTtcbiIsIi8vIENvcHlyaWdodCAyMDE1IEpveWVudCwgSW5jLlxuXG52YXIgS2V5ID0gcmVxdWlyZSgnLi9rZXknKTtcbnZhciBGaW5nZXJwcmludCA9IHJlcXVpcmUoJy4vZmluZ2VycHJpbnQnKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuL3NpZ25hdHVyZScpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuL3ByaXZhdGUta2V5Jyk7XG52YXIgQ2VydGlmaWNhdGUgPSByZXF1aXJlKCcuL2NlcnRpZmljYXRlJyk7XG52YXIgSWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG52YXIgZXJycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHQvKiB0b3AtbGV2ZWwgY2xhc3NlcyAqL1xuXHRLZXk6IEtleSxcblx0cGFyc2VLZXk6IEtleS5wYXJzZSxcblx0RmluZ2VycHJpbnQ6IEZpbmdlcnByaW50LFxuXHRwYXJzZUZpbmdlcnByaW50OiBGaW5nZXJwcmludC5wYXJzZSxcblx0U2lnbmF0dXJlOiBTaWduYXR1cmUsXG5cdHBhcnNlU2lnbmF0dXJlOiBTaWduYXR1cmUucGFyc2UsXG5cdFByaXZhdGVLZXk6IFByaXZhdGVLZXksXG5cdHBhcnNlUHJpdmF0ZUtleTogUHJpdmF0ZUtleS5wYXJzZSxcblx0Z2VuZXJhdGVQcml2YXRlS2V5OiBQcml2YXRlS2V5LmdlbmVyYXRlLFxuXHRDZXJ0aWZpY2F0ZTogQ2VydGlmaWNhdGUsXG5cdHBhcnNlQ2VydGlmaWNhdGU6IENlcnRpZmljYXRlLnBhcnNlLFxuXHRjcmVhdGVTZWxmU2lnbmVkQ2VydGlmaWNhdGU6IENlcnRpZmljYXRlLmNyZWF0ZVNlbGZTaWduZWQsXG5cdGNyZWF0ZUNlcnRpZmljYXRlOiBDZXJ0aWZpY2F0ZS5jcmVhdGUsXG5cdElkZW50aXR5OiBJZGVudGl0eSxcblx0aWRlbnRpdHlGcm9tRE46IElkZW50aXR5LnBhcnNlRE4sXG5cdGlkZW50aXR5Rm9ySG9zdDogSWRlbnRpdHkuZm9ySG9zdCxcblx0aWRlbnRpdHlGb3JVc2VyOiBJZGVudGl0eS5mb3JVc2VyLFxuXHRpZGVudGl0eUZvckVtYWlsOiBJZGVudGl0eS5mb3JFbWFpbCxcblxuXHQvKiBlcnJvcnMgKi9cblx0RmluZ2VycHJpbnRGb3JtYXRFcnJvcjogZXJycy5GaW5nZXJwcmludEZvcm1hdEVycm9yLFxuXHRJbnZhbGlkQWxnb3JpdGhtRXJyb3I6IGVycnMuSW52YWxpZEFsZ29yaXRobUVycm9yLFxuXHRLZXlQYXJzZUVycm9yOiBlcnJzLktleVBhcnNlRXJyb3IsXG5cdFNpZ25hdHVyZVBhcnNlRXJyb3I6IGVycnMuU2lnbmF0dXJlUGFyc2VFcnJvcixcblx0S2V5RW5jcnlwdGVkRXJyb3I6IGVycnMuS2V5RW5jcnlwdGVkRXJyb3IsXG5cdENlcnRpZmljYXRlUGFyc2VFcnJvcjogZXJycy5DZXJ0aWZpY2F0ZVBhcnNlRXJyb3Jcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxNyBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSBLZXk7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIGFsZ3MgPSByZXF1aXJlKCcuL2FsZ3MnKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBGaW5nZXJwcmludCA9IHJlcXVpcmUoJy4vZmluZ2VycHJpbnQnKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuL3NpZ25hdHVyZScpO1xudmFyIERpZmZpZUhlbGxtYW4gPSByZXF1aXJlKCcuL2RoZScpLkRpZmZpZUhlbGxtYW47XG52YXIgZXJycyA9IHJlcXVpcmUoJy4vZXJyb3JzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgUHJpdmF0ZUtleSA9IHJlcXVpcmUoJy4vcHJpdmF0ZS1rZXknKTtcbnZhciBlZENvbXBhdDtcblxudHJ5IHtcblx0ZWRDb21wYXQgPSByZXF1aXJlKCcuL2VkLWNvbXBhdCcpO1xufSBjYXRjaCAoZSkge1xuXHQvKiBKdXN0IGNvbnRpbnVlIHRocm91Z2gsIGFuZCBiYWlsIG91dCBpZiB3ZSB0cnkgdG8gdXNlIGl0LiAqL1xufVxuXG52YXIgSW52YWxpZEFsZ29yaXRobUVycm9yID0gZXJycy5JbnZhbGlkQWxnb3JpdGhtRXJyb3I7XG52YXIgS2V5UGFyc2VFcnJvciA9IGVycnMuS2V5UGFyc2VFcnJvcjtcblxudmFyIGZvcm1hdHMgPSB7fTtcbmZvcm1hdHNbJ2F1dG8nXSA9IHJlcXVpcmUoJy4vZm9ybWF0cy9hdXRvJyk7XG5mb3JtYXRzWydwZW0nXSA9IHJlcXVpcmUoJy4vZm9ybWF0cy9wZW0nKTtcbmZvcm1hdHNbJ3BrY3MxJ10gPSByZXF1aXJlKCcuL2Zvcm1hdHMvcGtjczEnKTtcbmZvcm1hdHNbJ3BrY3M4J10gPSByZXF1aXJlKCcuL2Zvcm1hdHMvcGtjczgnKTtcbmZvcm1hdHNbJ3JmYzQyNTMnXSA9IHJlcXVpcmUoJy4vZm9ybWF0cy9yZmM0MjUzJyk7XG5mb3JtYXRzWydzc2gnXSA9IHJlcXVpcmUoJy4vZm9ybWF0cy9zc2gnKTtcbmZvcm1hdHNbJ3NzaC1wcml2YXRlJ10gPSByZXF1aXJlKCcuL2Zvcm1hdHMvc3NoLXByaXZhdGUnKTtcbmZvcm1hdHNbJ29wZW5zc2gnXSA9IGZvcm1hdHNbJ3NzaC1wcml2YXRlJ107XG5cbmZ1bmN0aW9uIEtleShvcHRzKSB7XG5cdGFzc2VydC5vYmplY3Qob3B0cywgJ29wdGlvbnMnKTtcblx0YXNzZXJ0LmFycmF5T2ZPYmplY3Qob3B0cy5wYXJ0cywgJ29wdGlvbnMucGFydHMnKTtcblx0YXNzZXJ0LnN0cmluZyhvcHRzLnR5cGUsICdvcHRpb25zLnR5cGUnKTtcblx0YXNzZXJ0Lm9wdGlvbmFsU3RyaW5nKG9wdHMuY29tbWVudCwgJ29wdGlvbnMuY29tbWVudCcpO1xuXG5cdHZhciBhbGdJbmZvID0gYWxncy5pbmZvW29wdHMudHlwZV07XG5cdGlmICh0eXBlb2YgKGFsZ0luZm8pICE9PSAnb2JqZWN0Jylcblx0XHR0aHJvdyAobmV3IEludmFsaWRBbGdvcml0aG1FcnJvcihvcHRzLnR5cGUpKTtcblxuXHR2YXIgcGFydExvb2t1cCA9IHt9O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IG9wdHMucGFydHMubGVuZ3RoOyArK2kpIHtcblx0XHR2YXIgcGFydCA9IG9wdHMucGFydHNbaV07XG5cdFx0cGFydExvb2t1cFtwYXJ0Lm5hbWVdID0gcGFydDtcblx0fVxuXG5cdHRoaXMudHlwZSA9IG9wdHMudHlwZTtcblx0dGhpcy5wYXJ0cyA9IG9wdHMucGFydHM7XG5cdHRoaXMucGFydCA9IHBhcnRMb29rdXA7XG5cdHRoaXMuY29tbWVudCA9IHVuZGVmaW5lZDtcblx0dGhpcy5zb3VyY2UgPSBvcHRzLnNvdXJjZTtcblxuXHQvKiBmb3Igc3BlZWRpbmcgdXAgaGFzaGluZy9maW5nZXJwcmludCBvcGVyYXRpb25zICovXG5cdHRoaXMuX3JmYzQyNTNDYWNoZSA9IG9wdHMuX3JmYzQyNTNDYWNoZTtcblx0dGhpcy5faGFzaENhY2hlID0ge307XG5cblx0dmFyIHN6O1xuXHR0aGlzLmN1cnZlID0gdW5kZWZpbmVkO1xuXHRpZiAodGhpcy50eXBlID09PSAnZWNkc2EnKSB7XG5cdFx0dmFyIGN1cnZlID0gdGhpcy5wYXJ0LmN1cnZlLmRhdGEudG9TdHJpbmcoKTtcblx0XHR0aGlzLmN1cnZlID0gY3VydmU7XG5cdFx0c3ogPSBhbGdzLmN1cnZlc1tjdXJ2ZV0uc2l6ZTtcblx0fSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdlZDI1NTE5Jykge1xuXHRcdHN6ID0gMjU2O1xuXHRcdHRoaXMuY3VydmUgPSAnY3VydmUyNTUxOSc7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHN6UGFydCA9IHRoaXMucGFydFthbGdJbmZvLnNpemVQYXJ0XTtcblx0XHRzeiA9IHN6UGFydC5kYXRhLmxlbmd0aDtcblx0XHRzeiA9IHN6ICogOCAtIHV0aWxzLmNvdW50WmVyb3Moc3pQYXJ0LmRhdGEpO1xuXHR9XG5cdHRoaXMuc2l6ZSA9IHN6O1xufVxuXG5LZXkuZm9ybWF0cyA9IGZvcm1hdHM7XG5cbktleS5wcm90b3R5cGUudG9CdWZmZXIgPSBmdW5jdGlvbiAoZm9ybWF0LCBvcHRpb25zKSB7XG5cdGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZClcblx0XHRmb3JtYXQgPSAnc3NoJztcblx0YXNzZXJ0LnN0cmluZyhmb3JtYXQsICdmb3JtYXQnKTtcblx0YXNzZXJ0Lm9iamVjdChmb3JtYXRzW2Zvcm1hdF0sICdmb3JtYXRzW2Zvcm1hdF0nKTtcblx0YXNzZXJ0Lm9wdGlvbmFsT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJyk7XG5cblx0aWYgKGZvcm1hdCA9PT0gJ3JmYzQyNTMnKSB7XG5cdFx0aWYgKHRoaXMuX3JmYzQyNTNDYWNoZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy5fcmZjNDI1M0NhY2hlID0gZm9ybWF0c1sncmZjNDI1MyddLndyaXRlKHRoaXMpO1xuXHRcdHJldHVybiAodGhpcy5fcmZjNDI1M0NhY2hlKTtcblx0fVxuXG5cdHJldHVybiAoZm9ybWF0c1tmb3JtYXRdLndyaXRlKHRoaXMsIG9wdGlvbnMpKTtcbn07XG5cbktleS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoZm9ybWF0LCBvcHRpb25zKSB7XG5cdHJldHVybiAodGhpcy50b0J1ZmZlcihmb3JtYXQsIG9wdGlvbnMpLnRvU3RyaW5nKCkpO1xufTtcblxuS2V5LnByb3RvdHlwZS5oYXNoID0gZnVuY3Rpb24gKGFsZ28pIHtcblx0YXNzZXJ0LnN0cmluZyhhbGdvLCAnYWxnb3JpdGhtJyk7XG5cdGFsZ28gPSBhbGdvLnRvTG93ZXJDYXNlKCk7XG5cdGlmIChhbGdzLmhhc2hBbGdzW2FsZ29dID09PSB1bmRlZmluZWQpXG5cdFx0dGhyb3cgKG5ldyBJbnZhbGlkQWxnb3JpdGhtRXJyb3IoYWxnbykpO1xuXG5cdGlmICh0aGlzLl9oYXNoQ2FjaGVbYWxnb10pXG5cdFx0cmV0dXJuICh0aGlzLl9oYXNoQ2FjaGVbYWxnb10pO1xuXG5cdHZhciBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnbykuXG5cdCAgICB1cGRhdGUodGhpcy50b0J1ZmZlcigncmZjNDI1MycpKS5kaWdlc3QoKTtcblx0dGhpcy5faGFzaENhY2hlW2FsZ29dID0gaGFzaDtcblx0cmV0dXJuIChoYXNoKTtcbn07XG5cbktleS5wcm90b3R5cGUuZmluZ2VycHJpbnQgPSBmdW5jdGlvbiAoYWxnbykge1xuXHRpZiAoYWxnbyA9PT0gdW5kZWZpbmVkKVxuXHRcdGFsZ28gPSAnc2hhMjU2Jztcblx0YXNzZXJ0LnN0cmluZyhhbGdvLCAnYWxnb3JpdGhtJyk7XG5cdHZhciBvcHRzID0ge1xuXHRcdHR5cGU6ICdrZXknLFxuXHRcdGhhc2g6IHRoaXMuaGFzaChhbGdvKSxcblx0XHRhbGdvcml0aG06IGFsZ29cblx0fTtcblx0cmV0dXJuIChuZXcgRmluZ2VycHJpbnQob3B0cykpO1xufTtcblxuS2V5LnByb3RvdHlwZS5kZWZhdWx0SGFzaEFsZ29yaXRobSA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIGhhc2hBbGdvID0gJ3NoYTEnO1xuXHRpZiAodGhpcy50eXBlID09PSAncnNhJylcblx0XHRoYXNoQWxnbyA9ICdzaGEyNTYnO1xuXHRpZiAodGhpcy50eXBlID09PSAnZHNhJyAmJiB0aGlzLnNpemUgPiAxMDI0KVxuXHRcdGhhc2hBbGdvID0gJ3NoYTI1Nic7XG5cdGlmICh0aGlzLnR5cGUgPT09ICdlZDI1NTE5Jylcblx0XHRoYXNoQWxnbyA9ICdzaGE1MTInO1xuXHRpZiAodGhpcy50eXBlID09PSAnZWNkc2EnKSB7XG5cdFx0aWYgKHRoaXMuc2l6ZSA8PSAyNTYpXG5cdFx0XHRoYXNoQWxnbyA9ICdzaGEyNTYnO1xuXHRcdGVsc2UgaWYgKHRoaXMuc2l6ZSA8PSAzODQpXG5cdFx0XHRoYXNoQWxnbyA9ICdzaGEzODQnO1xuXHRcdGVsc2Vcblx0XHRcdGhhc2hBbGdvID0gJ3NoYTUxMic7XG5cdH1cblx0cmV0dXJuIChoYXNoQWxnbyk7XG59O1xuXG5LZXkucHJvdG90eXBlLmNyZWF0ZVZlcmlmeSA9IGZ1bmN0aW9uIChoYXNoQWxnbykge1xuXHRpZiAoaGFzaEFsZ28gPT09IHVuZGVmaW5lZClcblx0XHRoYXNoQWxnbyA9IHRoaXMuZGVmYXVsdEhhc2hBbGdvcml0aG0oKTtcblx0YXNzZXJ0LnN0cmluZyhoYXNoQWxnbywgJ2hhc2ggYWxnb3JpdGhtJyk7XG5cblx0LyogRUQyNTUxOSBpcyBub3Qgc3VwcG9ydGVkIGJ5IE9wZW5TU0wsIHVzZSBhIGphdmFzY3JpcHQgaW1wbC4gKi9cblx0aWYgKHRoaXMudHlwZSA9PT0gJ2VkMjU1MTknICYmIGVkQ29tcGF0ICE9PSB1bmRlZmluZWQpXG5cdFx0cmV0dXJuIChuZXcgZWRDb21wYXQuVmVyaWZpZXIodGhpcywgaGFzaEFsZ28pKTtcblx0aWYgKHRoaXMudHlwZSA9PT0gJ2N1cnZlMjU1MTknKVxuXHRcdHRocm93IChuZXcgRXJyb3IoJ0N1cnZlMjU1MTkga2V5cyBhcmUgbm90IHN1aXRhYmxlIGZvciAnICtcblx0XHQgICAgJ3NpZ25pbmcgb3IgdmVyaWZpY2F0aW9uJykpO1xuXG5cdHZhciB2LCBubSwgZXJyO1xuXHR0cnkge1xuXHRcdG5tID0gaGFzaEFsZ28udG9VcHBlckNhc2UoKTtcblx0XHR2ID0gY3J5cHRvLmNyZWF0ZVZlcmlmeShubSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRlcnIgPSBlO1xuXHR9XG5cdGlmICh2ID09PSB1bmRlZmluZWQgfHwgKGVyciBpbnN0YW5jZW9mIEVycm9yICYmXG5cdCAgICBlcnIubWVzc2FnZS5tYXRjaCgvVW5rbm93biBtZXNzYWdlIGRpZ2VzdC8pKSkge1xuXHRcdG5tID0gJ1JTQS0nO1xuXHRcdG5tICs9IGhhc2hBbGdvLnRvVXBwZXJDYXNlKCk7XG5cdFx0diA9IGNyeXB0by5jcmVhdGVWZXJpZnkobm0pO1xuXHR9XG5cdGFzc2VydC5vayh2LCAnZmFpbGVkIHRvIGNyZWF0ZSB2ZXJpZmllcicpO1xuXHR2YXIgb2xkVmVyaWZ5ID0gdi52ZXJpZnkuYmluZCh2KTtcblx0dmFyIGtleSA9IHRoaXMudG9CdWZmZXIoJ3BrY3M4Jyk7XG5cdHZhciBjdXJ2ZSA9IHRoaXMuY3VydmU7XG5cdHZhciBzZWxmID0gdGhpcztcblx0di52ZXJpZnkgPSBmdW5jdGlvbiAoc2lnbmF0dXJlLCBmbXQpIHtcblx0XHRpZiAoU2lnbmF0dXJlLmlzU2lnbmF0dXJlKHNpZ25hdHVyZSwgWzIsIDBdKSkge1xuXHRcdFx0aWYgKHNpZ25hdHVyZS50eXBlICE9PSBzZWxmLnR5cGUpXG5cdFx0XHRcdHJldHVybiAoZmFsc2UpO1xuXHRcdFx0aWYgKHNpZ25hdHVyZS5oYXNoQWxnb3JpdGhtICYmXG5cdFx0XHQgICAgc2lnbmF0dXJlLmhhc2hBbGdvcml0aG0gIT09IGhhc2hBbGdvKVxuXHRcdFx0XHRyZXR1cm4gKGZhbHNlKTtcblx0XHRcdGlmIChzaWduYXR1cmUuY3VydmUgJiYgc2VsZi50eXBlID09PSAnZWNkc2EnICYmXG5cdFx0XHQgICAgc2lnbmF0dXJlLmN1cnZlICE9PSBjdXJ2ZSlcblx0XHRcdFx0cmV0dXJuIChmYWxzZSk7XG5cdFx0XHRyZXR1cm4gKG9sZFZlcmlmeShrZXksIHNpZ25hdHVyZS50b0J1ZmZlcignYXNuMScpKSk7XG5cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiAoc2lnbmF0dXJlKSA9PT0gJ3N0cmluZycgfHxcblx0XHQgICAgQnVmZmVyLmlzQnVmZmVyKHNpZ25hdHVyZSkpIHtcblx0XHRcdHJldHVybiAob2xkVmVyaWZ5KGtleSwgc2lnbmF0dXJlLCBmbXQpKTtcblxuXHRcdC8qXG5cdFx0ICogQXZvaWQgZG9pbmcgdGhpcyBvbiB2YWxpZCBhcmd1bWVudHMsIHdhbGtpbmcgdGhlIHByb3RvdHlwZVxuXHRcdCAqIGNoYWluIGNhbiBiZSBxdWl0ZSBzbG93LlxuXHRcdCAqL1xuXHRcdH0gZWxzZSBpZiAoU2lnbmF0dXJlLmlzU2lnbmF0dXJlKHNpZ25hdHVyZSwgWzEsIDBdKSkge1xuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcignc2lnbmF0dXJlIHdhcyBjcmVhdGVkIGJ5IHRvbyBvbGQgJyArXG5cdFx0XHQgICAgJ2EgdmVyc2lvbiBvZiBzc2hwayBhbmQgY2Fubm90IGJlIHZlcmlmaWVkJykpO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IChuZXcgVHlwZUVycm9yKCdzaWduYXR1cmUgbXVzdCBiZSBhIHN0cmluZywgJyArXG5cdFx0XHQgICAgJ0J1ZmZlciwgb3IgU2lnbmF0dXJlIG9iamVjdCcpKTtcblx0XHR9XG5cdH07XG5cdHJldHVybiAodik7XG59O1xuXG5LZXkucHJvdG90eXBlLmNyZWF0ZURpZmZpZUhlbGxtYW4gPSBmdW5jdGlvbiAoKSB7XG5cdGlmICh0aGlzLnR5cGUgPT09ICdyc2EnKVxuXHRcdHRocm93IChuZXcgRXJyb3IoJ1JTQSBrZXlzIGRvIG5vdCBzdXBwb3J0IERpZmZpZS1IZWxsbWFuJykpO1xuXG5cdHJldHVybiAobmV3IERpZmZpZUhlbGxtYW4odGhpcykpO1xufTtcbktleS5wcm90b3R5cGUuY3JlYXRlREggPSBLZXkucHJvdG90eXBlLmNyZWF0ZURpZmZpZUhlbGxtYW47XG5cbktleS5wYXJzZSA9IGZ1bmN0aW9uIChkYXRhLCBmb3JtYXQsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiAoZGF0YSkgIT09ICdzdHJpbmcnKVxuXHRcdGFzc2VydC5idWZmZXIoZGF0YSwgJ2RhdGEnKTtcblx0aWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKVxuXHRcdGZvcm1hdCA9ICdhdXRvJztcblx0YXNzZXJ0LnN0cmluZyhmb3JtYXQsICdmb3JtYXQnKTtcblx0aWYgKHR5cGVvZiAob3B0aW9ucykgPT09ICdzdHJpbmcnKVxuXHRcdG9wdGlvbnMgPSB7IGZpbGVuYW1lOiBvcHRpb25zIH07XG5cdGFzc2VydC5vcHRpb25hbE9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpO1xuXHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdG9wdGlvbnMgPSB7fTtcblx0YXNzZXJ0Lm9wdGlvbmFsU3RyaW5nKG9wdGlvbnMuZmlsZW5hbWUsICdvcHRpb25zLmZpbGVuYW1lJyk7XG5cdGlmIChvcHRpb25zLmZpbGVuYW1lID09PSB1bmRlZmluZWQpXG5cdFx0b3B0aW9ucy5maWxlbmFtZSA9ICcodW5uYW1lZCknO1xuXG5cdGFzc2VydC5vYmplY3QoZm9ybWF0c1tmb3JtYXRdLCAnZm9ybWF0c1tmb3JtYXRdJyk7XG5cblx0dHJ5IHtcblx0XHR2YXIgayA9IGZvcm1hdHNbZm9ybWF0XS5yZWFkKGRhdGEsIG9wdGlvbnMpO1xuXHRcdGlmIChrIGluc3RhbmNlb2YgUHJpdmF0ZUtleSlcblx0XHRcdGsgPSBrLnRvUHVibGljKCk7XG5cdFx0aWYgKCFrLmNvbW1lbnQpXG5cdFx0XHRrLmNvbW1lbnQgPSBvcHRpb25zLmZpbGVuYW1lO1xuXHRcdHJldHVybiAoayk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAoZS5uYW1lID09PSAnS2V5RW5jcnlwdGVkRXJyb3InKVxuXHRcdFx0dGhyb3cgKGUpO1xuXHRcdHRocm93IChuZXcgS2V5UGFyc2VFcnJvcihvcHRpb25zLmZpbGVuYW1lLCBmb3JtYXQsIGUpKTtcblx0fVxufTtcblxuS2V5LmlzS2V5ID0gZnVuY3Rpb24gKG9iaiwgdmVyKSB7XG5cdHJldHVybiAodXRpbHMuaXNDb21wYXRpYmxlKG9iaiwgS2V5LCB2ZXIpKTtcbn07XG5cbi8qXG4gKiBBUEkgdmVyc2lvbnMgZm9yIEtleTpcbiAqIFsxLDBdIC0tIGluaXRpYWwgdmVyLCBtYXkgdGFrZSBTaWduYXR1cmUgZm9yIGNyZWF0ZVZlcmlmeSBvciBtYXkgbm90XG4gKiBbMSwxXSAtLSBhZGRlZCBwa2NzMSwgcGtjczggZm9ybWF0c1xuICogWzEsMl0gLS0gYWRkZWQgYXV0bywgc3NoLXByaXZhdGUsIG9wZW5zc2ggZm9ybWF0c1xuICogWzEsM10gLS0gYWRkZWQgZGVmYXVsdEhhc2hBbGdvcml0aG1cbiAqIFsxLDRdIC0tIGFkZGVkIGVkIHN1cHBvcnQsIGNyZWF0ZURIXG4gKiBbMSw1XSAtLSBmaXJzdCBleHBsaWNpdGx5IHRhZ2dlZCB2ZXJzaW9uXG4gKi9cbktleS5wcm90b3R5cGUuX3NzaHBrQXBpVmVyc2lvbiA9IFsxLCA1XTtcblxuS2V5Ll9vbGRWZXJzaW9uRGV0ZWN0ID0gZnVuY3Rpb24gKG9iaikge1xuXHRhc3NlcnQuZnVuYyhvYmoudG9CdWZmZXIpO1xuXHRhc3NlcnQuZnVuYyhvYmouZmluZ2VycHJpbnQpO1xuXHRpZiAob2JqLmNyZWF0ZURIKVxuXHRcdHJldHVybiAoWzEsIDRdKTtcblx0aWYgKG9iai5kZWZhdWx0SGFzaEFsZ29yaXRobSlcblx0XHRyZXR1cm4gKFsxLCAzXSk7XG5cdGlmIChvYmouZm9ybWF0c1snYXV0byddKVxuXHRcdHJldHVybiAoWzEsIDJdKTtcblx0aWYgKG9iai5mb3JtYXRzWydwa2NzMSddKVxuXHRcdHJldHVybiAoWzEsIDFdKTtcblx0cmV0dXJuIChbMSwgMF0pO1xufTtcbiIsIi8vIENvcHlyaWdodCAyMDE3IEpveWVudCwgSW5jLlxuXG5tb2R1bGUuZXhwb3J0cyA9IFByaXZhdGVLZXk7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIGFsZ3MgPSByZXF1aXJlKCcuL2FsZ3MnKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBGaW5nZXJwcmludCA9IHJlcXVpcmUoJy4vZmluZ2VycHJpbnQnKTtcbnZhciBTaWduYXR1cmUgPSByZXF1aXJlKCcuL3NpZ25hdHVyZScpO1xudmFyIGVycnMgPSByZXF1aXJlKCcuL2Vycm9ycycpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgZGhlID0gcmVxdWlyZSgnLi9kaGUnKTtcbnZhciBnZW5lcmF0ZUVDRFNBID0gZGhlLmdlbmVyYXRlRUNEU0E7XG52YXIgZ2VuZXJhdGVFRDI1NTE5ID0gZGhlLmdlbmVyYXRlRUQyNTUxOTtcbnZhciBlZENvbXBhdDtcbnZhciBlZDtcblxudHJ5IHtcblx0ZWRDb21wYXQgPSByZXF1aXJlKCcuL2VkLWNvbXBhdCcpO1xufSBjYXRjaCAoZSkge1xuXHQvKiBKdXN0IGNvbnRpbnVlIHRocm91Z2gsIGFuZCBiYWlsIG91dCBpZiB3ZSB0cnkgdG8gdXNlIGl0LiAqL1xufVxuXG52YXIgS2V5ID0gcmVxdWlyZSgnLi9rZXknKTtcblxudmFyIEludmFsaWRBbGdvcml0aG1FcnJvciA9IGVycnMuSW52YWxpZEFsZ29yaXRobUVycm9yO1xudmFyIEtleVBhcnNlRXJyb3IgPSBlcnJzLktleVBhcnNlRXJyb3I7XG52YXIgS2V5RW5jcnlwdGVkRXJyb3IgPSBlcnJzLktleUVuY3J5cHRlZEVycm9yO1xuXG52YXIgZm9ybWF0cyA9IHt9O1xuZm9ybWF0c1snYXV0byddID0gcmVxdWlyZSgnLi9mb3JtYXRzL2F1dG8nKTtcbmZvcm1hdHNbJ3BlbSddID0gcmVxdWlyZSgnLi9mb3JtYXRzL3BlbScpO1xuZm9ybWF0c1sncGtjczEnXSA9IHJlcXVpcmUoJy4vZm9ybWF0cy9wa2NzMScpO1xuZm9ybWF0c1sncGtjczgnXSA9IHJlcXVpcmUoJy4vZm9ybWF0cy9wa2NzOCcpO1xuZm9ybWF0c1sncmZjNDI1MyddID0gcmVxdWlyZSgnLi9mb3JtYXRzL3JmYzQyNTMnKTtcbmZvcm1hdHNbJ3NzaC1wcml2YXRlJ10gPSByZXF1aXJlKCcuL2Zvcm1hdHMvc3NoLXByaXZhdGUnKTtcbmZvcm1hdHNbJ29wZW5zc2gnXSA9IGZvcm1hdHNbJ3NzaC1wcml2YXRlJ107XG5mb3JtYXRzWydzc2gnXSA9IGZvcm1hdHNbJ3NzaC1wcml2YXRlJ107XG5cbmZ1bmN0aW9uIFByaXZhdGVLZXkob3B0cykge1xuXHRhc3NlcnQub2JqZWN0KG9wdHMsICdvcHRpb25zJyk7XG5cdEtleS5jYWxsKHRoaXMsIG9wdHMpO1xuXG5cdHRoaXMuX3B1YkNhY2hlID0gdW5kZWZpbmVkO1xufVxudXRpbC5pbmhlcml0cyhQcml2YXRlS2V5LCBLZXkpO1xuXG5Qcml2YXRlS2V5LmZvcm1hdHMgPSBmb3JtYXRzO1xuXG5Qcml2YXRlS2V5LnByb3RvdHlwZS50b0J1ZmZlciA9IGZ1bmN0aW9uIChmb3JtYXQsIG9wdGlvbnMpIHtcblx0aWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKVxuXHRcdGZvcm1hdCA9ICdwa2NzMSc7XG5cdGFzc2VydC5zdHJpbmcoZm9ybWF0LCAnZm9ybWF0Jyk7XG5cdGFzc2VydC5vYmplY3QoZm9ybWF0c1tmb3JtYXRdLCAnZm9ybWF0c1tmb3JtYXRdJyk7XG5cdGFzc2VydC5vcHRpb25hbE9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpO1xuXG5cdHJldHVybiAoZm9ybWF0c1tmb3JtYXRdLndyaXRlKHRoaXMsIG9wdGlvbnMpKTtcbn07XG5cblByaXZhdGVLZXkucHJvdG90eXBlLmhhc2ggPSBmdW5jdGlvbiAoYWxnbykge1xuXHRyZXR1cm4gKHRoaXMudG9QdWJsaWMoKS5oYXNoKGFsZ28pKTtcbn07XG5cblByaXZhdGVLZXkucHJvdG90eXBlLnRvUHVibGljID0gZnVuY3Rpb24gKCkge1xuXHRpZiAodGhpcy5fcHViQ2FjaGUpXG5cdFx0cmV0dXJuICh0aGlzLl9wdWJDYWNoZSk7XG5cblx0dmFyIGFsZ0luZm8gPSBhbGdzLmluZm9bdGhpcy50eXBlXTtcblx0dmFyIHB1YlBhcnRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYWxnSW5mby5wYXJ0cy5sZW5ndGg7ICsraSkge1xuXHRcdHZhciBwID0gYWxnSW5mby5wYXJ0c1tpXTtcblx0XHRwdWJQYXJ0cy5wdXNoKHRoaXMucGFydFtwXSk7XG5cdH1cblxuXHR0aGlzLl9wdWJDYWNoZSA9IG5ldyBLZXkoe1xuXHRcdHR5cGU6IHRoaXMudHlwZSxcblx0XHRzb3VyY2U6IHRoaXMsXG5cdFx0cGFydHM6IHB1YlBhcnRzXG5cdH0pO1xuXHRpZiAodGhpcy5jb21tZW50KVxuXHRcdHRoaXMuX3B1YkNhY2hlLmNvbW1lbnQgPSB0aGlzLmNvbW1lbnQ7XG5cdHJldHVybiAodGhpcy5fcHViQ2FjaGUpO1xufTtcblxuUHJpdmF0ZUtleS5wcm90b3R5cGUuZGVyaXZlID0gZnVuY3Rpb24gKG5ld1R5cGUsIG5ld1NpemUpIHtcblx0YXNzZXJ0LnN0cmluZyhuZXdUeXBlLCAndHlwZScpO1xuXHRhc3NlcnQub3B0aW9uYWxOdW1iZXIobmV3U2l6ZSwgJ3NpemUnKTtcblx0dmFyIHByaXYsIHB1YjtcblxuXHRpZiAodGhpcy50eXBlID09PSAnZWQyNTUxOScgJiYgbmV3VHlwZSA9PT0gJ2N1cnZlMjU1MTknKSB7XG5cdFx0aWYgKGVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRlZCA9IHJlcXVpcmUoJ2pvZGlkMjU1MTknKTtcblxuXHRcdHByaXYgPSB0aGlzLnBhcnQuci5kYXRhO1xuXHRcdGlmIChwcml2WzBdID09PSAweDAwKVxuXHRcdFx0cHJpdiA9IHByaXYuc2xpY2UoMSk7XG5cdFx0cHJpdiA9IHByaXYuc2xpY2UoMCwgMzIpO1xuXG5cdFx0cHViID0gZWQuZGgucHVibGljS2V5KHByaXYpO1xuXHRcdHByaXYgPSB1dGlscy5tcE5vcm1hbGl6ZShCdWZmZXIuY29uY2F0KFtwcml2LCBwdWJdKSk7XG5cblx0XHRyZXR1cm4gKG5ldyBQcml2YXRlS2V5KHtcblx0XHRcdHR5cGU6ICdjdXJ2ZTI1NTE5Jyxcblx0XHRcdHBhcnRzOiBbXG5cdFx0XHRcdHsgbmFtZTogJ1InLCBkYXRhOiB1dGlscy5tcE5vcm1hbGl6ZShwdWIpIH0sXG5cdFx0XHRcdHsgbmFtZTogJ3InLCBkYXRhOiBwcml2IH1cblx0XHRcdF1cblx0XHR9KSk7XG5cdH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnY3VydmUyNTUxOScgJiYgbmV3VHlwZSA9PT0gJ2VkMjU1MTknKSB7XG5cdFx0aWYgKGVkID09PSB1bmRlZmluZWQpXG5cdFx0XHRlZCA9IHJlcXVpcmUoJ2pvZGlkMjU1MTknKTtcblxuXHRcdHByaXYgPSB0aGlzLnBhcnQuci5kYXRhO1xuXHRcdGlmIChwcml2WzBdID09PSAweDAwKVxuXHRcdFx0cHJpdiA9IHByaXYuc2xpY2UoMSk7XG5cdFx0cHJpdiA9IHByaXYuc2xpY2UoMCwgMzIpO1xuXG5cdFx0cHViID0gZWQuZWRkc2EucHVibGljS2V5KHByaXYudG9TdHJpbmcoJ2JpbmFyeScpKTtcblx0XHRwdWIgPSBuZXcgQnVmZmVyKHB1YiwgJ2JpbmFyeScpO1xuXG5cdFx0cHJpdiA9IHV0aWxzLm1wTm9ybWFsaXplKEJ1ZmZlci5jb25jYXQoW3ByaXYsIHB1Yl0pKTtcblxuXHRcdHJldHVybiAobmV3IFByaXZhdGVLZXkoe1xuXHRcdFx0dHlwZTogJ2VkMjU1MTknLFxuXHRcdFx0cGFydHM6IFtcblx0XHRcdFx0eyBuYW1lOiAnUicsIGRhdGE6IHV0aWxzLm1wTm9ybWFsaXplKHB1YikgfSxcblx0XHRcdFx0eyBuYW1lOiAncicsIGRhdGE6IHByaXYgfVxuXHRcdFx0XVxuXHRcdH0pKTtcblx0fVxuXHR0aHJvdyAobmV3IEVycm9yKCdLZXkgZGVyaXZhdGlvbiBub3Qgc3VwcG9ydGVkIGZyb20gJyArIHRoaXMudHlwZSArXG5cdCAgICAnIHRvICcgKyBuZXdUeXBlKSk7XG59O1xuXG5Qcml2YXRlS2V5LnByb3RvdHlwZS5jcmVhdGVWZXJpZnkgPSBmdW5jdGlvbiAoaGFzaEFsZ28pIHtcblx0cmV0dXJuICh0aGlzLnRvUHVibGljKCkuY3JlYXRlVmVyaWZ5KGhhc2hBbGdvKSk7XG59O1xuXG5Qcml2YXRlS2V5LnByb3RvdHlwZS5jcmVhdGVTaWduID0gZnVuY3Rpb24gKGhhc2hBbGdvKSB7XG5cdGlmIChoYXNoQWxnbyA9PT0gdW5kZWZpbmVkKVxuXHRcdGhhc2hBbGdvID0gdGhpcy5kZWZhdWx0SGFzaEFsZ29yaXRobSgpO1xuXHRhc3NlcnQuc3RyaW5nKGhhc2hBbGdvLCAnaGFzaCBhbGdvcml0aG0nKTtcblxuXHQvKiBFRDI1NTE5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgT3BlblNTTCwgdXNlIGEgamF2YXNjcmlwdCBpbXBsLiAqL1xuXHRpZiAodGhpcy50eXBlID09PSAnZWQyNTUxOScgJiYgZWRDb21wYXQgIT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm4gKG5ldyBlZENvbXBhdC5TaWduZXIodGhpcywgaGFzaEFsZ28pKTtcblx0aWYgKHRoaXMudHlwZSA9PT0gJ2N1cnZlMjU1MTknKVxuXHRcdHRocm93IChuZXcgRXJyb3IoJ0N1cnZlMjU1MTkga2V5cyBhcmUgbm90IHN1aXRhYmxlIGZvciAnICtcblx0XHQgICAgJ3NpZ25pbmcgb3IgdmVyaWZpY2F0aW9uJykpO1xuXG5cdHZhciB2LCBubSwgZXJyO1xuXHR0cnkge1xuXHRcdG5tID0gaGFzaEFsZ28udG9VcHBlckNhc2UoKTtcblx0XHR2ID0gY3J5cHRvLmNyZWF0ZVNpZ24obm0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0ZXJyID0gZTtcblx0fVxuXHRpZiAodiA9PT0gdW5kZWZpbmVkIHx8IChlcnIgaW5zdGFuY2VvZiBFcnJvciAmJlxuXHQgICAgZXJyLm1lc3NhZ2UubWF0Y2goL1Vua25vd24gbWVzc2FnZSBkaWdlc3QvKSkpIHtcblx0XHRubSA9ICdSU0EtJztcblx0XHRubSArPSBoYXNoQWxnby50b1VwcGVyQ2FzZSgpO1xuXHRcdHYgPSBjcnlwdG8uY3JlYXRlU2lnbihubSk7XG5cdH1cblx0YXNzZXJ0Lm9rKHYsICdmYWlsZWQgdG8gY3JlYXRlIHZlcmlmaWVyJyk7XG5cdHZhciBvbGRTaWduID0gdi5zaWduLmJpbmQodik7XG5cdHZhciBrZXkgPSB0aGlzLnRvQnVmZmVyKCdwa2NzMScpO1xuXHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblx0dmFyIGN1cnZlID0gdGhpcy5jdXJ2ZTtcblx0di5zaWduID0gZnVuY3Rpb24gKCkge1xuXHRcdHZhciBzaWcgPSBvbGRTaWduKGtleSk7XG5cdFx0aWYgKHR5cGVvZiAoc2lnKSA9PT0gJ3N0cmluZycpXG5cdFx0XHRzaWcgPSBuZXcgQnVmZmVyKHNpZywgJ2JpbmFyeScpO1xuXHRcdHNpZyA9IFNpZ25hdHVyZS5wYXJzZShzaWcsIHR5cGUsICdhc24xJyk7XG5cdFx0c2lnLmhhc2hBbGdvcml0aG0gPSBoYXNoQWxnbztcblx0XHRzaWcuY3VydmUgPSBjdXJ2ZTtcblx0XHRyZXR1cm4gKHNpZyk7XG5cdH07XG5cdHJldHVybiAodik7XG59O1xuXG5Qcml2YXRlS2V5LnBhcnNlID0gZnVuY3Rpb24gKGRhdGEsIGZvcm1hdCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIChkYXRhKSAhPT0gJ3N0cmluZycpXG5cdFx0YXNzZXJ0LmJ1ZmZlcihkYXRhLCAnZGF0YScpO1xuXHRpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpXG5cdFx0Zm9ybWF0ID0gJ2F1dG8nO1xuXHRhc3NlcnQuc3RyaW5nKGZvcm1hdCwgJ2Zvcm1hdCcpO1xuXHRpZiAodHlwZW9mIChvcHRpb25zKSA9PT0gJ3N0cmluZycpXG5cdFx0b3B0aW9ucyA9IHsgZmlsZW5hbWU6IG9wdGlvbnMgfTtcblx0YXNzZXJ0Lm9wdGlvbmFsT2JqZWN0KG9wdGlvbnMsICdvcHRpb25zJyk7XG5cdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0b3B0aW9ucyA9IHt9O1xuXHRhc3NlcnQub3B0aW9uYWxTdHJpbmcob3B0aW9ucy5maWxlbmFtZSwgJ29wdGlvbnMuZmlsZW5hbWUnKTtcblx0aWYgKG9wdGlvbnMuZmlsZW5hbWUgPT09IHVuZGVmaW5lZClcblx0XHRvcHRpb25zLmZpbGVuYW1lID0gJyh1bm5hbWVkKSc7XG5cblx0YXNzZXJ0Lm9iamVjdChmb3JtYXRzW2Zvcm1hdF0sICdmb3JtYXRzW2Zvcm1hdF0nKTtcblxuXHR0cnkge1xuXHRcdHZhciBrID0gZm9ybWF0c1tmb3JtYXRdLnJlYWQoZGF0YSwgb3B0aW9ucyk7XG5cdFx0YXNzZXJ0Lm9rKGsgaW5zdGFuY2VvZiBQcml2YXRlS2V5LCAna2V5IGlzIG5vdCBhIHByaXZhdGUga2V5Jyk7XG5cdFx0aWYgKCFrLmNvbW1lbnQpXG5cdFx0XHRrLmNvbW1lbnQgPSBvcHRpb25zLmZpbGVuYW1lO1xuXHRcdHJldHVybiAoayk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAoZS5uYW1lID09PSAnS2V5RW5jcnlwdGVkRXJyb3InKVxuXHRcdFx0dGhyb3cgKGUpO1xuXHRcdHRocm93IChuZXcgS2V5UGFyc2VFcnJvcihvcHRpb25zLmZpbGVuYW1lLCBmb3JtYXQsIGUpKTtcblx0fVxufTtcblxuUHJpdmF0ZUtleS5pc1ByaXZhdGVLZXkgPSBmdW5jdGlvbiAob2JqLCB2ZXIpIHtcblx0cmV0dXJuICh1dGlscy5pc0NvbXBhdGlibGUob2JqLCBQcml2YXRlS2V5LCB2ZXIpKTtcbn07XG5cblByaXZhdGVLZXkuZ2VuZXJhdGUgPSBmdW5jdGlvbiAodHlwZSwgb3B0aW9ucykge1xuXHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdG9wdGlvbnMgPSB7fTtcblx0YXNzZXJ0Lm9iamVjdChvcHRpb25zLCAnb3B0aW9ucycpO1xuXG5cdHN3aXRjaCAodHlwZSkge1xuXHRjYXNlICdlY2RzYSc6XG5cdFx0aWYgKG9wdGlvbnMuY3VydmUgPT09IHVuZGVmaW5lZClcblx0XHRcdG9wdGlvbnMuY3VydmUgPSAnbmlzdHAyNTYnO1xuXHRcdGFzc2VydC5zdHJpbmcob3B0aW9ucy5jdXJ2ZSwgJ29wdGlvbnMuY3VydmUnKTtcblx0XHRyZXR1cm4gKGdlbmVyYXRlRUNEU0Eob3B0aW9ucy5jdXJ2ZSkpO1xuXHRjYXNlICdlZDI1NTE5Jzpcblx0XHRyZXR1cm4gKGdlbmVyYXRlRUQyNTUxOSgpKTtcblx0ZGVmYXVsdDpcblx0XHR0aHJvdyAobmV3IEVycm9yKCdLZXkgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkIHdpdGgga2V5ICcgK1xuXHRcdCAgICAndHlwZSBcIicgKyB0eXBlICsgJ1wiJykpO1xuXHR9XG59O1xuXG4vKlxuICogQVBJIHZlcnNpb25zIGZvciBQcml2YXRlS2V5OlxuICogWzEsMF0gLS0gaW5pdGlhbCB2ZXJcbiAqIFsxLDFdIC0tIGFkZGVkIGF1dG8sIHBrY3NbMThdLCBvcGVuc3NoL3NzaC1wcml2YXRlIGZvcm1hdHNcbiAqIFsxLDJdIC0tIGFkZGVkIGRlZmF1bHRIYXNoQWxnb3JpdGhtXG4gKiBbMSwzXSAtLSBhZGRlZCBkZXJpdmUsIGVkLCBjcmVhdGVESFxuICogWzEsNF0gLS0gZmlyc3QgdGFnZ2VkIHZlcnNpb25cbiAqL1xuUHJpdmF0ZUtleS5wcm90b3R5cGUuX3NzaHBrQXBpVmVyc2lvbiA9IFsxLCA0XTtcblxuUHJpdmF0ZUtleS5fb2xkVmVyc2lvbkRldGVjdCA9IGZ1bmN0aW9uIChvYmopIHtcblx0YXNzZXJ0LmZ1bmMob2JqLnRvUHVibGljKTtcblx0YXNzZXJ0LmZ1bmMob2JqLmNyZWF0ZVNpZ24pO1xuXHRpZiAob2JqLmRlcml2ZSlcblx0XHRyZXR1cm4gKFsxLCAzXSk7XG5cdGlmIChvYmouZGVmYXVsdEhhc2hBbGdvcml0aG0pXG5cdFx0cmV0dXJuIChbMSwgMl0pO1xuXHRpZiAob2JqLmZvcm1hdHNbJ2F1dG8nXSlcblx0XHRyZXR1cm4gKFsxLCAxXSk7XG5cdHJldHVybiAoWzEsIDBdKTtcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxNSBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSBTaWduYXR1cmU7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIGFsZ3MgPSByZXF1aXJlKCcuL2FsZ3MnKTtcbnZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbnZhciBlcnJzID0gcmVxdWlyZSgnLi9lcnJvcnMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBhc24xID0gcmVxdWlyZSgnYXNuMScpO1xudmFyIFNTSEJ1ZmZlciA9IHJlcXVpcmUoJy4vc3NoLWJ1ZmZlcicpO1xuXG52YXIgSW52YWxpZEFsZ29yaXRobUVycm9yID0gZXJycy5JbnZhbGlkQWxnb3JpdGhtRXJyb3I7XG52YXIgU2lnbmF0dXJlUGFyc2VFcnJvciA9IGVycnMuU2lnbmF0dXJlUGFyc2VFcnJvcjtcblxuZnVuY3Rpb24gU2lnbmF0dXJlKG9wdHMpIHtcblx0YXNzZXJ0Lm9iamVjdChvcHRzLCAnb3B0aW9ucycpO1xuXHRhc3NlcnQuYXJyYXlPZk9iamVjdChvcHRzLnBhcnRzLCAnb3B0aW9ucy5wYXJ0cycpO1xuXHRhc3NlcnQuc3RyaW5nKG9wdHMudHlwZSwgJ29wdGlvbnMudHlwZScpO1xuXG5cdHZhciBwYXJ0TG9va3VwID0ge307XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgb3B0cy5wYXJ0cy5sZW5ndGg7ICsraSkge1xuXHRcdHZhciBwYXJ0ID0gb3B0cy5wYXJ0c1tpXTtcblx0XHRwYXJ0TG9va3VwW3BhcnQubmFtZV0gPSBwYXJ0O1xuXHR9XG5cblx0dGhpcy50eXBlID0gb3B0cy50eXBlO1xuXHR0aGlzLmhhc2hBbGdvcml0aG0gPSBvcHRzLmhhc2hBbGdvO1xuXHR0aGlzLmN1cnZlID0gb3B0cy5jdXJ2ZTtcblx0dGhpcy5wYXJ0cyA9IG9wdHMucGFydHM7XG5cdHRoaXMucGFydCA9IHBhcnRMb29rdXA7XG59XG5cblNpZ25hdHVyZS5wcm90b3R5cGUudG9CdWZmZXIgPSBmdW5jdGlvbiAoZm9ybWF0KSB7XG5cdGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZClcblx0XHRmb3JtYXQgPSAnYXNuMSc7XG5cdGFzc2VydC5zdHJpbmcoZm9ybWF0LCAnZm9ybWF0Jyk7XG5cblx0dmFyIGJ1Zjtcblx0dmFyIHN0eXBlID0gJ3NzaC0nICsgdGhpcy50eXBlO1xuXG5cdHN3aXRjaCAodGhpcy50eXBlKSB7XG5cdGNhc2UgJ3JzYSc6XG5cdFx0c3dpdGNoICh0aGlzLmhhc2hBbGdvcml0aG0pIHtcblx0XHRjYXNlICdzaGEyNTYnOlxuXHRcdFx0c3R5cGUgPSAncnNhLXNoYTItMjU2Jztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ3NoYTUxMic6XG5cdFx0XHRzdHlwZSA9ICdyc2Etc2hhMi01MTInO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnc2hhMSc6XG5cdFx0Y2FzZSB1bmRlZmluZWQ6XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcignU1NIIHNpZ25hdHVyZSAnICtcblx0XHRcdCAgICAnZm9ybWF0IGRvZXMgbm90IHN1cHBvcnQgaGFzaCAnICtcblx0XHRcdCAgICAnYWxnb3JpdGhtICcgKyB0aGlzLmhhc2hBbGdvcml0aG0pKTtcblx0XHR9XG5cdFx0aWYgKGZvcm1hdCA9PT0gJ3NzaCcpIHtcblx0XHRcdGJ1ZiA9IG5ldyBTU0hCdWZmZXIoe30pO1xuXHRcdFx0YnVmLndyaXRlU3RyaW5nKHN0eXBlKTtcblx0XHRcdGJ1Zi53cml0ZVBhcnQodGhpcy5wYXJ0LnNpZyk7XG5cdFx0XHRyZXR1cm4gKGJ1Zi50b0J1ZmZlcigpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuICh0aGlzLnBhcnQuc2lnLmRhdGEpO1xuXHRcdH1cblx0XHRicmVhaztcblxuXHRjYXNlICdlZDI1NTE5Jzpcblx0XHRpZiAoZm9ybWF0ID09PSAnc3NoJykge1xuXHRcdFx0YnVmID0gbmV3IFNTSEJ1ZmZlcih7fSk7XG5cdFx0XHRidWYud3JpdGVTdHJpbmcoc3R5cGUpO1xuXHRcdFx0YnVmLndyaXRlUGFydCh0aGlzLnBhcnQuc2lnKTtcblx0XHRcdHJldHVybiAoYnVmLnRvQnVmZmVyKCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gKHRoaXMucGFydC5zaWcuZGF0YSk7XG5cdFx0fVxuXHRcdGJyZWFrO1xuXG5cdGNhc2UgJ2RzYSc6XG5cdGNhc2UgJ2VjZHNhJzpcblx0XHR2YXIgciwgcztcblx0XHRpZiAoZm9ybWF0ID09PSAnYXNuMScpIHtcblx0XHRcdHZhciBkZXIgPSBuZXcgYXNuMS5CZXJXcml0ZXIoKTtcblx0XHRcdGRlci5zdGFydFNlcXVlbmNlKCk7XG5cdFx0XHRyID0gdXRpbHMubXBOb3JtYWxpemUodGhpcy5wYXJ0LnIuZGF0YSk7XG5cdFx0XHRzID0gdXRpbHMubXBOb3JtYWxpemUodGhpcy5wYXJ0LnMuZGF0YSk7XG5cdFx0XHRkZXIud3JpdGVCdWZmZXIociwgYXNuMS5CZXIuSW50ZWdlcik7XG5cdFx0XHRkZXIud3JpdGVCdWZmZXIocywgYXNuMS5CZXIuSW50ZWdlcik7XG5cdFx0XHRkZXIuZW5kU2VxdWVuY2UoKTtcblx0XHRcdHJldHVybiAoZGVyLmJ1ZmZlcik7XG5cdFx0fSBlbHNlIGlmIChmb3JtYXQgPT09ICdzc2gnICYmIHRoaXMudHlwZSA9PT0gJ2RzYScpIHtcblx0XHRcdGJ1ZiA9IG5ldyBTU0hCdWZmZXIoe30pO1xuXHRcdFx0YnVmLndyaXRlU3RyaW5nKCdzc2gtZHNzJyk7XG5cdFx0XHRyID0gdGhpcy5wYXJ0LnIuZGF0YTtcblx0XHRcdGlmIChyLmxlbmd0aCA+IDIwICYmIHJbMF0gPT09IDB4MDApXG5cdFx0XHRcdHIgPSByLnNsaWNlKDEpO1xuXHRcdFx0cyA9IHRoaXMucGFydC5zLmRhdGE7XG5cdFx0XHRpZiAocy5sZW5ndGggPiAyMCAmJiBzWzBdID09PSAweDAwKVxuXHRcdFx0XHRzID0gcy5zbGljZSgxKTtcblx0XHRcdGlmICgodGhpcy5oYXNoQWxnb3JpdGhtICYmXG5cdFx0XHQgICAgdGhpcy5oYXNoQWxnb3JpdGhtICE9PSAnc2hhMScpIHx8XG5cdFx0XHQgICAgci5sZW5ndGggKyBzLmxlbmd0aCAhPT0gNDApIHtcblx0XHRcdFx0dGhyb3cgKG5ldyBFcnJvcignT3BlblNTSCBvbmx5IHN1cHBvcnRzICcgK1xuXHRcdFx0XHQgICAgJ0RTQSBzaWduYXR1cmVzIHdpdGggU0hBMSBoYXNoJykpO1xuXHRcdFx0fVxuXHRcdFx0YnVmLndyaXRlQnVmZmVyKEJ1ZmZlci5jb25jYXQoW3IsIHNdKSk7XG5cdFx0XHRyZXR1cm4gKGJ1Zi50b0J1ZmZlcigpKTtcblx0XHR9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ3NzaCcgJiYgdGhpcy50eXBlID09PSAnZWNkc2EnKSB7XG5cdFx0XHR2YXIgaW5uZXIgPSBuZXcgU1NIQnVmZmVyKHt9KTtcblx0XHRcdHIgPSB0aGlzLnBhcnQuci5kYXRhO1xuXHRcdFx0aW5uZXIud3JpdGVCdWZmZXIocik7XG5cdFx0XHRpbm5lci53cml0ZVBhcnQodGhpcy5wYXJ0LnMpO1xuXG5cdFx0XHRidWYgPSBuZXcgU1NIQnVmZmVyKHt9KTtcblx0XHRcdC8qIFhYWDogZmluZCBhIG1vcmUgcHJvcGVyIHdheSB0byBkbyB0aGlzPyAqL1xuXHRcdFx0dmFyIGN1cnZlO1xuXHRcdFx0aWYgKHJbMF0gPT09IDB4MDApXG5cdFx0XHRcdHIgPSByLnNsaWNlKDEpO1xuXHRcdFx0dmFyIHN6ID0gci5sZW5ndGggKiA4O1xuXHRcdFx0aWYgKHN6ID09PSAyNTYpXG5cdFx0XHRcdGN1cnZlID0gJ25pc3RwMjU2Jztcblx0XHRcdGVsc2UgaWYgKHN6ID09PSAzODQpXG5cdFx0XHRcdGN1cnZlID0gJ25pc3RwMzg0Jztcblx0XHRcdGVsc2UgaWYgKHN6ID09PSA1MjgpXG5cdFx0XHRcdGN1cnZlID0gJ25pc3RwNTIxJztcblx0XHRcdGJ1Zi53cml0ZVN0cmluZygnZWNkc2Etc2hhMi0nICsgY3VydmUpO1xuXHRcdFx0YnVmLndyaXRlQnVmZmVyKGlubmVyLnRvQnVmZmVyKCkpO1xuXHRcdFx0cmV0dXJuIChidWYudG9CdWZmZXIoKSk7XG5cdFx0fVxuXHRcdHRocm93IChuZXcgRXJyb3IoJ0ludmFsaWQgc2lnbmF0dXJlIGZvcm1hdCcpKTtcblx0ZGVmYXVsdDpcblx0XHR0aHJvdyAobmV3IEVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSBkYXRhJykpO1xuXHR9XG59O1xuXG5TaWduYXR1cmUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuXHRhc3NlcnQub3B0aW9uYWxTdHJpbmcoZm9ybWF0LCAnZm9ybWF0Jyk7XG5cdHJldHVybiAodGhpcy50b0J1ZmZlcihmb3JtYXQpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG59O1xuXG5TaWduYXR1cmUucGFyc2UgPSBmdW5jdGlvbiAoZGF0YSwgdHlwZSwgZm9ybWF0KSB7XG5cdGlmICh0eXBlb2YgKGRhdGEpID09PSAnc3RyaW5nJylcblx0XHRkYXRhID0gbmV3IEJ1ZmZlcihkYXRhLCAnYmFzZTY0Jyk7XG5cdGFzc2VydC5idWZmZXIoZGF0YSwgJ2RhdGEnKTtcblx0YXNzZXJ0LnN0cmluZyhmb3JtYXQsICdmb3JtYXQnKTtcblx0YXNzZXJ0LnN0cmluZyh0eXBlLCAndHlwZScpO1xuXG5cdHZhciBvcHRzID0ge307XG5cdG9wdHMudHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcblx0b3B0cy5wYXJ0cyA9IFtdO1xuXG5cdHRyeSB7XG5cdFx0YXNzZXJ0Lm9rKGRhdGEubGVuZ3RoID4gMCwgJ3NpZ25hdHVyZSBtdXN0IG5vdCBiZSBlbXB0eScpO1xuXHRcdHN3aXRjaCAob3B0cy50eXBlKSB7XG5cdFx0Y2FzZSAncnNhJzpcblx0XHRcdHJldHVybiAocGFyc2VPbmVOdW0oZGF0YSwgdHlwZSwgZm9ybWF0LCBvcHRzKSk7XG5cdFx0Y2FzZSAnZWQyNTUxOSc6XG5cdFx0XHRyZXR1cm4gKHBhcnNlT25lTnVtKGRhdGEsIHR5cGUsIGZvcm1hdCwgb3B0cykpO1xuXG5cdFx0Y2FzZSAnZHNhJzpcblx0XHRjYXNlICdlY2RzYSc6XG5cdFx0XHRpZiAoZm9ybWF0ID09PSAnYXNuMScpXG5cdFx0XHRcdHJldHVybiAocGFyc2VEU0Fhc24xKGRhdGEsIHR5cGUsIGZvcm1hdCwgb3B0cykpO1xuXHRcdFx0ZWxzZSBpZiAob3B0cy50eXBlID09PSAnZHNhJylcblx0XHRcdFx0cmV0dXJuIChwYXJzZURTQShkYXRhLCB0eXBlLCBmb3JtYXQsIG9wdHMpKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0cmV0dXJuIChwYXJzZUVDRFNBKGRhdGEsIHR5cGUsIGZvcm1hdCwgb3B0cykpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IChuZXcgSW52YWxpZEFsZ29yaXRobUVycm9yKHR5cGUpKTtcblx0XHR9XG5cblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmIChlIGluc3RhbmNlb2YgSW52YWxpZEFsZ29yaXRobUVycm9yKVxuXHRcdFx0dGhyb3cgKGUpO1xuXHRcdHRocm93IChuZXcgU2lnbmF0dXJlUGFyc2VFcnJvcih0eXBlLCBmb3JtYXQsIGUpKTtcblx0fVxufTtcblxuZnVuY3Rpb24gcGFyc2VPbmVOdW0oZGF0YSwgdHlwZSwgZm9ybWF0LCBvcHRzKSB7XG5cdGlmIChmb3JtYXQgPT09ICdzc2gnKSB7XG5cdFx0dHJ5IHtcblx0XHRcdHZhciBidWYgPSBuZXcgU1NIQnVmZmVyKHtidWZmZXI6IGRhdGF9KTtcblx0XHRcdHZhciBoZWFkID0gYnVmLnJlYWRTdHJpbmcoKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvKiBmYWxsIHRocm91Z2ggKi9cblx0XHR9XG5cdFx0aWYgKGJ1ZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YXIgbXNnID0gJ1NTSCBzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgJyArXG5cdFx0XHQgICAgJ3R5cGUgKGV4cGVjdGVkICcgKyB0eXBlICsgJywgZ290ICcgKyBoZWFkICsgJyknO1xuXHRcdFx0c3dpdGNoIChoZWFkKSB7XG5cdFx0XHRjYXNlICdzc2gtcnNhJzpcblx0XHRcdFx0YXNzZXJ0LnN0cmljdEVxdWFsKHR5cGUsICdyc2EnLCBtc2cpO1xuXHRcdFx0XHRvcHRzLmhhc2hBbGdvID0gJ3NoYTEnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JzYS1zaGEyLTI1Nic6XG5cdFx0XHRcdGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlLCAncnNhJywgbXNnKTtcblx0XHRcdFx0b3B0cy5oYXNoQWxnbyA9ICdzaGEyNTYnO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3JzYS1zaGEyLTUxMic6XG5cdFx0XHRcdGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlLCAncnNhJywgbXNnKTtcblx0XHRcdFx0b3B0cy5oYXNoQWxnbyA9ICdzaGE1MTInO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3NzaC1lZDI1NTE5Jzpcblx0XHRcdFx0YXNzZXJ0LnN0cmljdEVxdWFsKHR5cGUsICdlZDI1NTE5JywgbXNnKTtcblx0XHRcdFx0b3B0cy5oYXNoQWxnbyA9ICdzaGE1MTInO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IChuZXcgRXJyb3IoJ1Vua25vd24gU1NIIHNpZ25hdHVyZSAnICtcblx0XHRcdFx0ICAgICd0eXBlOiAnICsgaGVhZCkpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHNpZyA9IGJ1Zi5yZWFkUGFydCgpO1xuXHRcdFx0YXNzZXJ0Lm9rKGJ1Zi5hdEVuZCgpLCAnZXh0cmEgdHJhaWxpbmcgYnl0ZXMnKTtcblx0XHRcdHNpZy5uYW1lID0gJ3NpZyc7XG5cdFx0XHRvcHRzLnBhcnRzLnB1c2goc2lnKTtcblx0XHRcdHJldHVybiAobmV3IFNpZ25hdHVyZShvcHRzKSk7XG5cdFx0fVxuXHR9XG5cdG9wdHMucGFydHMucHVzaCh7bmFtZTogJ3NpZycsIGRhdGE6IGRhdGF9KTtcblx0cmV0dXJuIChuZXcgU2lnbmF0dXJlKG9wdHMpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEU0Fhc24xKGRhdGEsIHR5cGUsIGZvcm1hdCwgb3B0cykge1xuXHR2YXIgZGVyID0gbmV3IGFzbjEuQmVyUmVhZGVyKGRhdGEpO1xuXHRkZXIucmVhZFNlcXVlbmNlKCk7XG5cdHZhciByID0gZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuSW50ZWdlciwgdHJ1ZSk7XG5cdHZhciBzID0gZGVyLnJlYWRTdHJpbmcoYXNuMS5CZXIuSW50ZWdlciwgdHJ1ZSk7XG5cblx0b3B0cy5wYXJ0cy5wdXNoKHtuYW1lOiAncicsIGRhdGE6IHV0aWxzLm1wTm9ybWFsaXplKHIpfSk7XG5cdG9wdHMucGFydHMucHVzaCh7bmFtZTogJ3MnLCBkYXRhOiB1dGlscy5tcE5vcm1hbGl6ZShzKX0pO1xuXG5cdHJldHVybiAobmV3IFNpZ25hdHVyZShvcHRzKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRFNBKGRhdGEsIHR5cGUsIGZvcm1hdCwgb3B0cykge1xuXHRpZiAoZGF0YS5sZW5ndGggIT0gNDApIHtcblx0XHR2YXIgYnVmID0gbmV3IFNTSEJ1ZmZlcih7YnVmZmVyOiBkYXRhfSk7XG5cdFx0dmFyIGQgPSBidWYucmVhZEJ1ZmZlcigpO1xuXHRcdGlmIChkLnRvU3RyaW5nKCdhc2NpaScpID09PSAnc3NoLWRzcycpXG5cdFx0XHRkID0gYnVmLnJlYWRCdWZmZXIoKTtcblx0XHRhc3NlcnQub2soYnVmLmF0RW5kKCksICdleHRyYSB0cmFpbGluZyBieXRlcycpO1xuXHRcdGFzc2VydC5zdHJpY3RFcXVhbChkLmxlbmd0aCwgNDAsICdpbnZhbGlkIGlubmVyIGxlbmd0aCcpO1xuXHRcdGRhdGEgPSBkO1xuXHR9XG5cdG9wdHMucGFydHMucHVzaCh7bmFtZTogJ3InLCBkYXRhOiBkYXRhLnNsaWNlKDAsIDIwKX0pO1xuXHRvcHRzLnBhcnRzLnB1c2goe25hbWU6ICdzJywgZGF0YTogZGF0YS5zbGljZSgyMCwgNDApfSk7XG5cdHJldHVybiAobmV3IFNpZ25hdHVyZShvcHRzKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRUNEU0EoZGF0YSwgdHlwZSwgZm9ybWF0LCBvcHRzKSB7XG5cdHZhciBidWYgPSBuZXcgU1NIQnVmZmVyKHtidWZmZXI6IGRhdGF9KTtcblxuXHR2YXIgciwgcztcblx0dmFyIGlubmVyID0gYnVmLnJlYWRCdWZmZXIoKTtcblx0dmFyIHN0eXBlID0gaW5uZXIudG9TdHJpbmcoJ2FzY2lpJyk7XG5cdGlmIChzdHlwZS5zbGljZSgwLCA2KSA9PT0gJ2VjZHNhLScpIHtcblx0XHR2YXIgcGFydHMgPSBzdHlwZS5zcGxpdCgnLScpO1xuXHRcdGFzc2VydC5zdHJpY3RFcXVhbChwYXJ0c1swXSwgJ2VjZHNhJyk7XG5cdFx0YXNzZXJ0LnN0cmljdEVxdWFsKHBhcnRzWzFdLCAnc2hhMicpO1xuXHRcdG9wdHMuY3VydmUgPSBwYXJ0c1syXTtcblx0XHRzd2l0Y2ggKG9wdHMuY3VydmUpIHtcblx0XHRjYXNlICduaXN0cDI1Nic6XG5cdFx0XHRvcHRzLmhhc2hBbGdvID0gJ3NoYTI1Nic7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICduaXN0cDM4NCc6XG5cdFx0XHRvcHRzLmhhc2hBbGdvID0gJ3NoYTM4NCc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICduaXN0cDUyMSc6XG5cdFx0XHRvcHRzLmhhc2hBbGdvID0gJ3NoYTUxMic7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgRUNEU0EgY3VydmU6ICcgK1xuXHRcdFx0ICAgIG9wdHMuY3VydmUpKTtcblx0XHR9XG5cdFx0aW5uZXIgPSBidWYucmVhZEJ1ZmZlcigpO1xuXHRcdGFzc2VydC5vayhidWYuYXRFbmQoKSwgJ2V4dHJhIHRyYWlsaW5nIGJ5dGVzIG9uIG91dGVyJyk7XG5cdFx0YnVmID0gbmV3IFNTSEJ1ZmZlcih7YnVmZmVyOiBpbm5lcn0pO1xuXHRcdHIgPSBidWYucmVhZFBhcnQoKTtcblx0fSBlbHNlIHtcblx0XHRyID0ge2RhdGE6IGlubmVyfTtcblx0fVxuXG5cdHMgPSBidWYucmVhZFBhcnQoKTtcblx0YXNzZXJ0Lm9rKGJ1Zi5hdEVuZCgpLCAnZXh0cmEgdHJhaWxpbmcgYnl0ZXMnKTtcblxuXHRyLm5hbWUgPSAncic7XG5cdHMubmFtZSA9ICdzJztcblxuXHRvcHRzLnBhcnRzLnB1c2gocik7XG5cdG9wdHMucGFydHMucHVzaChzKTtcblx0cmV0dXJuIChuZXcgU2lnbmF0dXJlKG9wdHMpKTtcbn1cblxuU2lnbmF0dXJlLmlzU2lnbmF0dXJlID0gZnVuY3Rpb24gKG9iaiwgdmVyKSB7XG5cdHJldHVybiAodXRpbHMuaXNDb21wYXRpYmxlKG9iaiwgU2lnbmF0dXJlLCB2ZXIpKTtcbn07XG5cbi8qXG4gKiBBUEkgdmVyc2lvbnMgZm9yIFNpZ25hdHVyZTpcbiAqIFsxLDBdIC0tIGluaXRpYWwgdmVyXG4gKiBbMiwwXSAtLSBzdXBwb3J0IGZvciByc2EgaW4gZnVsbCBzc2ggZm9ybWF0LCBjb21wYXQgd2l0aCBzc2hway1hZ2VudFxuICogICAgICAgICAgaGFzaEFsZ29yaXRobSBwcm9wZXJ0eVxuICogWzIsMV0gLS0gZmlyc3QgdGFnZ2VkIHZlcnNpb25cbiAqL1xuU2lnbmF0dXJlLnByb3RvdHlwZS5fc3NocGtBcGlWZXJzaW9uID0gWzIsIDFdO1xuXG5TaWduYXR1cmUuX29sZFZlcnNpb25EZXRlY3QgPSBmdW5jdGlvbiAob2JqKSB7XG5cdGFzc2VydC5mdW5jKG9iai50b0J1ZmZlcik7XG5cdGlmIChvYmouaGFzT3duUHJvcGVydHkoJ2hhc2hBbGdvcml0aG0nKSlcblx0XHRyZXR1cm4gKFsyLCAwXSk7XG5cdHJldHVybiAoWzEsIDBdKTtcbn07XG4iLCIvLyBDb3B5cmlnaHQgMjAxNSBKb3llbnQsIEluYy5cblxubW9kdWxlLmV4cG9ydHMgPSBTU0hCdWZmZXI7XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xuXG5mdW5jdGlvbiBTU0hCdWZmZXIob3B0cykge1xuXHRhc3NlcnQub2JqZWN0KG9wdHMsICdvcHRpb25zJyk7XG5cdGlmIChvcHRzLmJ1ZmZlciAhPT0gdW5kZWZpbmVkKVxuXHRcdGFzc2VydC5idWZmZXIob3B0cy5idWZmZXIsICdvcHRpb25zLmJ1ZmZlcicpO1xuXG5cdHRoaXMuX3NpemUgPSBvcHRzLmJ1ZmZlciA/IG9wdHMuYnVmZmVyLmxlbmd0aCA6IDEwMjQ7XG5cdHRoaXMuX2J1ZmZlciA9IG9wdHMuYnVmZmVyIHx8IChuZXcgQnVmZmVyKHRoaXMuX3NpemUpKTtcblx0dGhpcy5fb2Zmc2V0ID0gMDtcbn1cblxuU1NIQnVmZmVyLnByb3RvdHlwZS50b0J1ZmZlciA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICh0aGlzLl9idWZmZXIuc2xpY2UoMCwgdGhpcy5fb2Zmc2V0KSk7XG59O1xuXG5TU0hCdWZmZXIucHJvdG90eXBlLmF0RW5kID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gKHRoaXMuX29mZnNldCA+PSB0aGlzLl9idWZmZXIubGVuZ3RoKTtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUucmVtYWluZGVyID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gKHRoaXMuX2J1ZmZlci5zbGljZSh0aGlzLl9vZmZzZXQpKTtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uIChuKSB7XG5cdHRoaXMuX29mZnNldCArPSBuO1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS5leHBhbmQgPSBmdW5jdGlvbiAoKSB7XG5cdHRoaXMuX3NpemUgKj0gMjtcblx0dmFyIGJ1ZiA9IG5ldyBCdWZmZXIodGhpcy5fc2l6ZSk7XG5cdHRoaXMuX2J1ZmZlci5jb3B5KGJ1ZiwgMCk7XG5cdHRoaXMuX2J1ZmZlciA9IGJ1Zjtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUucmVhZFBhcnQgPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiAoe2RhdGE6IHRoaXMucmVhZEJ1ZmZlcigpfSk7XG59O1xuXG5TU0hCdWZmZXIucHJvdG90eXBlLnJlYWRCdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBsZW4gPSB0aGlzLl9idWZmZXIucmVhZFVJbnQzMkJFKHRoaXMuX29mZnNldCk7XG5cdHRoaXMuX29mZnNldCArPSA0O1xuXHRhc3NlcnQub2sodGhpcy5fb2Zmc2V0ICsgbGVuIDw9IHRoaXMuX2J1ZmZlci5sZW5ndGgsXG5cdCAgICAnbGVuZ3RoIG91dCBvZiBib3VuZHMgYXQgKzB4JyArIHRoaXMuX29mZnNldC50b1N0cmluZygxNikgK1xuXHQgICAgJyAoZGF0YSB0cnVuY2F0ZWQ/KScpO1xuXHR2YXIgYnVmID0gdGhpcy5fYnVmZmVyLnNsaWNlKHRoaXMuX29mZnNldCwgdGhpcy5fb2Zmc2V0ICsgbGVuKTtcblx0dGhpcy5fb2Zmc2V0ICs9IGxlbjtcblx0cmV0dXJuIChidWYpO1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS5yZWFkU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gKHRoaXMucmVhZEJ1ZmZlcigpLnRvU3RyaW5nKCkpO1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS5yZWFkQ1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9mZnNldCA9IHRoaXMuX29mZnNldDtcblx0d2hpbGUgKG9mZnNldCA8IHRoaXMuX2J1ZmZlci5sZW5ndGggJiZcblx0ICAgIHRoaXMuX2J1ZmZlcltvZmZzZXRdICE9PSAweDAwKVxuXHRcdG9mZnNldCsrO1xuXHRhc3NlcnQub2sob2Zmc2V0IDwgdGhpcy5fYnVmZmVyLmxlbmd0aCwgJ2Mgc3RyaW5nIGRvZXMgbm90IHRlcm1pbmF0ZScpO1xuXHR2YXIgc3RyID0gdGhpcy5fYnVmZmVyLnNsaWNlKHRoaXMuX29mZnNldCwgb2Zmc2V0KS50b1N0cmluZygpO1xuXHR0aGlzLl9vZmZzZXQgPSBvZmZzZXQgKyAxO1xuXHRyZXR1cm4gKHN0cik7XG59O1xuXG5TU0hCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciB2ID0gdGhpcy5fYnVmZmVyLnJlYWRVSW50MzJCRSh0aGlzLl9vZmZzZXQpO1xuXHR0aGlzLl9vZmZzZXQgKz0gNDtcblx0cmV0dXJuICh2KTtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUucmVhZEludDY0ID0gZnVuY3Rpb24gKCkge1xuXHRhc3NlcnQub2sodGhpcy5fb2Zmc2V0ICsgOCA8IHRoaXMuX2J1ZmZlci5sZW5ndGgsXG5cdCAgICAnYnVmZmVyIG5vdCBsb25nIGVub3VnaCB0byByZWFkIEludDY0Jyk7XG5cdHZhciB2ID0gdGhpcy5fYnVmZmVyLnNsaWNlKHRoaXMuX29mZnNldCwgdGhpcy5fb2Zmc2V0ICsgOCk7XG5cdHRoaXMuX29mZnNldCArPSA4O1xuXHRyZXR1cm4gKHYpO1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS5yZWFkQ2hhciA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHYgPSB0aGlzLl9idWZmZXJbdGhpcy5fb2Zmc2V0KytdO1xuXHRyZXR1cm4gKHYpO1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS53cml0ZUJ1ZmZlciA9IGZ1bmN0aW9uIChidWYpIHtcblx0d2hpbGUgKHRoaXMuX29mZnNldCArIDQgKyBidWYubGVuZ3RoID4gdGhpcy5fc2l6ZSlcblx0XHR0aGlzLmV4cGFuZCgpO1xuXHR0aGlzLl9idWZmZXIud3JpdGVVSW50MzJCRShidWYubGVuZ3RoLCB0aGlzLl9vZmZzZXQpO1xuXHR0aGlzLl9vZmZzZXQgKz0gNDtcblx0YnVmLmNvcHkodGhpcy5fYnVmZmVyLCB0aGlzLl9vZmZzZXQpO1xuXHR0aGlzLl9vZmZzZXQgKz0gYnVmLmxlbmd0aDtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUud3JpdGVTdHJpbmcgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdHRoaXMud3JpdGVCdWZmZXIobmV3IEJ1ZmZlcihzdHIsICd1dGY4JykpO1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS53cml0ZUNTdHJpbmcgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdHdoaWxlICh0aGlzLl9vZmZzZXQgKyAxICsgc3RyLmxlbmd0aCA+IHRoaXMuX3NpemUpXG5cdFx0dGhpcy5leHBhbmQoKTtcblx0dGhpcy5fYnVmZmVyLndyaXRlKHN0ciwgdGhpcy5fb2Zmc2V0KTtcblx0dGhpcy5fb2Zmc2V0ICs9IHN0ci5sZW5ndGg7XG5cdHRoaXMuX2J1ZmZlclt0aGlzLl9vZmZzZXQrK10gPSAwO1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS53cml0ZUludCA9IGZ1bmN0aW9uICh2KSB7XG5cdHdoaWxlICh0aGlzLl9vZmZzZXQgKyA0ID4gdGhpcy5fc2l6ZSlcblx0XHR0aGlzLmV4cGFuZCgpO1xuXHR0aGlzLl9idWZmZXIud3JpdGVVSW50MzJCRSh2LCB0aGlzLl9vZmZzZXQpO1xuXHR0aGlzLl9vZmZzZXQgKz0gNDtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ2NCA9IGZ1bmN0aW9uICh2KSB7XG5cdGFzc2VydC5idWZmZXIodiwgJ3ZhbHVlJyk7XG5cdGlmICh2Lmxlbmd0aCA+IDgpIHtcblx0XHR2YXIgbGVhZCA9IHYuc2xpY2UoMCwgdi5sZW5ndGggLSA4KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlYWQubGVuZ3RoOyArK2kpIHtcblx0XHRcdGFzc2VydC5zdHJpY3RFcXVhbChsZWFkW2ldLCAwLFxuXHRcdFx0ICAgICdtdXN0IGZpdCBpbiA2NCBiaXRzIG9mIHByZWNpc2lvbicpO1xuXHRcdH1cblx0XHR2ID0gdi5zbGljZSh2Lmxlbmd0aCAtIDgsIHYubGVuZ3RoKTtcblx0fVxuXHR3aGlsZSAodGhpcy5fb2Zmc2V0ICsgOCA+IHRoaXMuX3NpemUpXG5cdFx0dGhpcy5leHBhbmQoKTtcblx0di5jb3B5KHRoaXMuX2J1ZmZlciwgdGhpcy5fb2Zmc2V0KTtcblx0dGhpcy5fb2Zmc2V0ICs9IDg7XG59O1xuXG5TU0hCdWZmZXIucHJvdG90eXBlLndyaXRlQ2hhciA9IGZ1bmN0aW9uICh2KSB7XG5cdHdoaWxlICh0aGlzLl9vZmZzZXQgKyAxID4gdGhpcy5fc2l6ZSlcblx0XHR0aGlzLmV4cGFuZCgpO1xuXHR0aGlzLl9idWZmZXJbdGhpcy5fb2Zmc2V0KytdID0gdjtcbn07XG5cblNTSEJ1ZmZlci5wcm90b3R5cGUud3JpdGVQYXJ0ID0gZnVuY3Rpb24gKHApIHtcblx0dGhpcy53cml0ZUJ1ZmZlcihwLmRhdGEpO1xufTtcblxuU1NIQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChidWYpIHtcblx0d2hpbGUgKHRoaXMuX29mZnNldCArIGJ1Zi5sZW5ndGggPiB0aGlzLl9zaXplKVxuXHRcdHRoaXMuZXhwYW5kKCk7XG5cdGJ1Zi5jb3B5KHRoaXMuX2J1ZmZlciwgdGhpcy5fb2Zmc2V0KTtcblx0dGhpcy5fb2Zmc2V0ICs9IGJ1Zi5sZW5ndGg7XG59O1xuIiwiLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRidWZmZXJTcGxpdDogYnVmZmVyU3BsaXQsXG5cdGFkZFJTQU1pc3Npbmc6IGFkZFJTQU1pc3NpbmcsXG5cdGNhbGN1bGF0ZURTQVB1YmxpYzogY2FsY3VsYXRlRFNBUHVibGljLFxuXHRtcE5vcm1hbGl6ZTogbXBOb3JtYWxpemUsXG5cdGVjTm9ybWFsaXplOiBlY05vcm1hbGl6ZSxcblx0Y291bnRaZXJvczogY291bnRaZXJvcyxcblx0YXNzZXJ0Q29tcGF0aWJsZTogYXNzZXJ0Q29tcGF0aWJsZSxcblx0aXNDb21wYXRpYmxlOiBpc0NvbXBhdGlibGUsXG5cdG9wZW5zc2xLZXlEZXJpdjogb3BlbnNzbEtleURlcml2LFxuXHRvcGVuc3NoQ2lwaGVySW5mbzogb3BlbnNzaENpcGhlckluZm9cbn07XG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQtcGx1cycpO1xudmFyIFByaXZhdGVLZXkgPSByZXF1aXJlKCcuL3ByaXZhdGUta2V5Jyk7XG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbnZhciBNQVhfQ0xBU1NfREVQVEggPSAzO1xuXG5mdW5jdGlvbiBpc0NvbXBhdGlibGUob2JqLCBrbGFzcywgbmVlZFZlcikge1xuXHRpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiAob2JqKSAhPT0gJ29iamVjdCcpXG5cdFx0cmV0dXJuIChmYWxzZSk7XG5cdGlmIChuZWVkVmVyID09PSB1bmRlZmluZWQpXG5cdFx0bmVlZFZlciA9IGtsYXNzLnByb3RvdHlwZS5fc3NocGtBcGlWZXJzaW9uO1xuXHRpZiAob2JqIGluc3RhbmNlb2Yga2xhc3MgJiZcblx0ICAgIGtsYXNzLnByb3RvdHlwZS5fc3NocGtBcGlWZXJzaW9uWzBdID09IG5lZWRWZXJbMF0pXG5cdFx0cmV0dXJuICh0cnVlKTtcblx0dmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG5cdHZhciBkZXB0aCA9IDA7XG5cdHdoaWxlIChwcm90by5jb25zdHJ1Y3Rvci5uYW1lICE9PSBrbGFzcy5uYW1lKSB7XG5cdFx0cHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuXHRcdGlmICghcHJvdG8gfHwgKytkZXB0aCA+IE1BWF9DTEFTU19ERVBUSClcblx0XHRcdHJldHVybiAoZmFsc2UpO1xuXHR9XG5cdGlmIChwcm90by5jb25zdHJ1Y3Rvci5uYW1lICE9PSBrbGFzcy5uYW1lKVxuXHRcdHJldHVybiAoZmFsc2UpO1xuXHR2YXIgdmVyID0gcHJvdG8uX3NzaHBrQXBpVmVyc2lvbjtcblx0aWYgKHZlciA9PT0gdW5kZWZpbmVkKVxuXHRcdHZlciA9IGtsYXNzLl9vbGRWZXJzaW9uRGV0ZWN0KG9iaik7XG5cdGlmICh2ZXJbMF0gIT0gbmVlZFZlclswXSB8fCB2ZXJbMV0gPCBuZWVkVmVyWzFdKVxuXHRcdHJldHVybiAoZmFsc2UpO1xuXHRyZXR1cm4gKHRydWUpO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRDb21wYXRpYmxlKG9iaiwga2xhc3MsIG5lZWRWZXIsIG5hbWUpIHtcblx0aWYgKG5hbWUgPT09IHVuZGVmaW5lZClcblx0XHRuYW1lID0gJ29iamVjdCc7XG5cdGFzc2VydC5vayhvYmosIG5hbWUgKyAnIG11c3Qgbm90IGJlIG51bGwnKTtcblx0YXNzZXJ0Lm9iamVjdChvYmosIG5hbWUgKyAnIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG5cdGlmIChuZWVkVmVyID09PSB1bmRlZmluZWQpXG5cdFx0bmVlZFZlciA9IGtsYXNzLnByb3RvdHlwZS5fc3NocGtBcGlWZXJzaW9uO1xuXHRpZiAob2JqIGluc3RhbmNlb2Yga2xhc3MgJiZcblx0ICAgIGtsYXNzLnByb3RvdHlwZS5fc3NocGtBcGlWZXJzaW9uWzBdID09IG5lZWRWZXJbMF0pXG5cdFx0cmV0dXJuO1xuXHR2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcblx0dmFyIGRlcHRoID0gMDtcblx0d2hpbGUgKHByb3RvLmNvbnN0cnVjdG9yLm5hbWUgIT09IGtsYXNzLm5hbWUpIHtcblx0XHRwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG5cdFx0YXNzZXJ0Lm9rKHByb3RvICYmICsrZGVwdGggPD0gTUFYX0NMQVNTX0RFUFRILFxuXHRcdCAgICBuYW1lICsgJyBtdXN0IGJlIGEgJyArIGtsYXNzLm5hbWUgKyAnIGluc3RhbmNlJyk7XG5cdH1cblx0YXNzZXJ0LnN0cmljdEVxdWFsKHByb3RvLmNvbnN0cnVjdG9yLm5hbWUsIGtsYXNzLm5hbWUsXG5cdCAgICBuYW1lICsgJyBtdXN0IGJlIGEgJyArIGtsYXNzLm5hbWUgKyAnIGluc3RhbmNlJyk7XG5cdHZhciB2ZXIgPSBwcm90by5fc3NocGtBcGlWZXJzaW9uO1xuXHRpZiAodmVyID09PSB1bmRlZmluZWQpXG5cdFx0dmVyID0ga2xhc3MuX29sZFZlcnNpb25EZXRlY3Qob2JqKTtcblx0YXNzZXJ0Lm9rKHZlclswXSA9PSBuZWVkVmVyWzBdICYmIHZlclsxXSA+PSBuZWVkVmVyWzFdLFxuXHQgICAgbmFtZSArICcgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggJyArIGtsYXNzLm5hbWUgKyAnIGtsYXNzICcgK1xuXHQgICAgJ3ZlcnNpb24gJyArIG5lZWRWZXJbMF0gKyAnLicgKyBuZWVkVmVyWzFdKTtcbn1cblxudmFyIENJUEhFUl9MRU4gPSB7XG5cdCdkZXMtZWRlMy1jYmMnOiB7IGtleTogNywgaXY6IDggfSxcblx0J2Flcy0xMjgtY2JjJzogeyBrZXk6IDE2LCBpdjogMTYgfVxufTtcbnZhciBQS0NTNV9TQUxUX0xFTiA9IDg7XG5cbmZ1bmN0aW9uIG9wZW5zc2xLZXlEZXJpdihjaXBoZXIsIHNhbHQsIHBhc3NwaHJhc2UsIGNvdW50KSB7XG5cdGFzc2VydC5idWZmZXIoc2FsdCwgJ3NhbHQnKTtcblx0YXNzZXJ0LmJ1ZmZlcihwYXNzcGhyYXNlLCAncGFzc3BocmFzZScpO1xuXHRhc3NlcnQubnVtYmVyKGNvdW50LCAnaXRlcmF0aW9uIGNvdW50Jyk7XG5cblx0dmFyIGNsZW4gPSBDSVBIRVJfTEVOW2NpcGhlcl07XG5cdGFzc2VydC5vYmplY3QoY2xlbiwgJ3N1cHBvcnRlZCBjaXBoZXInKTtcblxuXHRzYWx0ID0gc2FsdC5zbGljZSgwLCBQS0NTNV9TQUxUX0xFTik7XG5cblx0dmFyIEQsIERfcHJldiwgYnVmcztcblx0dmFyIG1hdGVyaWFsID0gbmV3IEJ1ZmZlcigwKTtcblx0d2hpbGUgKG1hdGVyaWFsLmxlbmd0aCA8IGNsZW4ua2V5ICsgY2xlbi5pdikge1xuXHRcdGJ1ZnMgPSBbXTtcblx0XHRpZiAoRF9wcmV2KVxuXHRcdFx0YnVmcy5wdXNoKERfcHJldik7XG5cdFx0YnVmcy5wdXNoKHBhc3NwaHJhc2UpO1xuXHRcdGJ1ZnMucHVzaChzYWx0KTtcblx0XHREID0gQnVmZmVyLmNvbmNhdChidWZzKTtcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNvdW50OyArK2opXG5cdFx0XHREID0gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShEKS5kaWdlc3QoKTtcblx0XHRtYXRlcmlhbCA9IEJ1ZmZlci5jb25jYXQoW21hdGVyaWFsLCBEXSk7XG5cdFx0RF9wcmV2ID0gRDtcblx0fVxuXG5cdHJldHVybiAoe1xuXHQgICAga2V5OiBtYXRlcmlhbC5zbGljZSgwLCBjbGVuLmtleSksXG5cdCAgICBpdjogbWF0ZXJpYWwuc2xpY2UoY2xlbi5rZXksIGNsZW4ua2V5ICsgY2xlbi5pdilcblx0fSk7XG59XG5cbi8qIENvdW50IGxlYWRpbmcgemVybyBiaXRzIG9uIGEgYnVmZmVyICovXG5mdW5jdGlvbiBjb3VudFplcm9zKGJ1Zikge1xuXHR2YXIgbyA9IDAsIG9iaXQgPSA4O1xuXHR3aGlsZSAobyA8IGJ1Zi5sZW5ndGgpIHtcblx0XHR2YXIgbWFzayA9ICgxIDw8IG9iaXQpO1xuXHRcdGlmICgoYnVmW29dICYgbWFzaykgPT09IG1hc2spXG5cdFx0XHRicmVhaztcblx0XHRvYml0LS07XG5cdFx0aWYgKG9iaXQgPCAwKSB7XG5cdFx0XHRvKys7XG5cdFx0XHRvYml0ID0gODtcblx0XHR9XG5cdH1cblx0cmV0dXJuIChvKjggKyAoOCAtIG9iaXQpIC0gMSk7XG59XG5cbmZ1bmN0aW9uIGJ1ZmZlclNwbGl0KGJ1ZiwgY2hyKSB7XG5cdGFzc2VydC5idWZmZXIoYnVmKTtcblx0YXNzZXJ0LnN0cmluZyhjaHIpO1xuXG5cdHZhciBwYXJ0cyA9IFtdO1xuXHR2YXIgbGFzdFBhcnQgPSAwO1xuXHR2YXIgbWF0Y2hlcyA9IDA7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgKytpKSB7XG5cdFx0aWYgKGJ1ZltpXSA9PT0gY2hyLmNoYXJDb2RlQXQobWF0Y2hlcykpXG5cdFx0XHQrK21hdGNoZXM7XG5cdFx0ZWxzZSBpZiAoYnVmW2ldID09PSBjaHIuY2hhckNvZGVBdCgwKSlcblx0XHRcdG1hdGNoZXMgPSAxO1xuXHRcdGVsc2Vcblx0XHRcdG1hdGNoZXMgPSAwO1xuXG5cdFx0aWYgKG1hdGNoZXMgPj0gY2hyLmxlbmd0aCkge1xuXHRcdFx0dmFyIG5ld1BhcnQgPSBpICsgMTtcblx0XHRcdHBhcnRzLnB1c2goYnVmLnNsaWNlKGxhc3RQYXJ0LCBuZXdQYXJ0IC0gbWF0Y2hlcykpO1xuXHRcdFx0bGFzdFBhcnQgPSBuZXdQYXJ0O1xuXHRcdFx0bWF0Y2hlcyA9IDA7XG5cdFx0fVxuXHR9XG5cdGlmIChsYXN0UGFydCA8PSBidWYubGVuZ3RoKVxuXHRcdHBhcnRzLnB1c2goYnVmLnNsaWNlKGxhc3RQYXJ0LCBidWYubGVuZ3RoKSk7XG5cblx0cmV0dXJuIChwYXJ0cyk7XG59XG5cbmZ1bmN0aW9uIGVjTm9ybWFsaXplKGJ1ZiwgYWRkWmVybykge1xuXHRhc3NlcnQuYnVmZmVyKGJ1Zik7XG5cdGlmIChidWZbMF0gPT09IDB4MDAgJiYgYnVmWzFdID09PSAweDA0KSB7XG5cdFx0aWYgKGFkZFplcm8pXG5cdFx0XHRyZXR1cm4gKGJ1Zik7XG5cdFx0cmV0dXJuIChidWYuc2xpY2UoMSkpO1xuXHR9IGVsc2UgaWYgKGJ1ZlswXSA9PT0gMHgwNCkge1xuXHRcdGlmICghYWRkWmVybylcblx0XHRcdHJldHVybiAoYnVmKTtcblx0fSBlbHNlIHtcblx0XHR3aGlsZSAoYnVmWzBdID09PSAweDAwKVxuXHRcdFx0YnVmID0gYnVmLnNsaWNlKDEpO1xuXHRcdGlmIChidWZbMF0gPT09IDB4MDIgfHwgYnVmWzBdID09PSAweDAzKVxuXHRcdFx0dGhyb3cgKG5ldyBFcnJvcignQ29tcHJlc3NlZCBlbGxpcHRpYyBjdXJ2ZSBwb2ludHMgJyArXG5cdFx0XHQgICAgJ2FyZSBub3Qgc3VwcG9ydGVkJykpO1xuXHRcdGlmIChidWZbMF0gIT09IDB4MDQpXG5cdFx0XHR0aHJvdyAobmV3IEVycm9yKCdOb3QgYSB2YWxpZCBlbGxpcHRpYyBjdXJ2ZSBwb2ludCcpKTtcblx0XHRpZiAoIWFkZFplcm8pXG5cdFx0XHRyZXR1cm4gKGJ1Zik7XG5cdH1cblx0dmFyIGIgPSBuZXcgQnVmZmVyKGJ1Zi5sZW5ndGggKyAxKTtcblx0YlswXSA9IDB4MDtcblx0YnVmLmNvcHkoYiwgMSk7XG5cdHJldHVybiAoYik7XG59XG5cbmZ1bmN0aW9uIG1wTm9ybWFsaXplKGJ1Zikge1xuXHRhc3NlcnQuYnVmZmVyKGJ1Zik7XG5cdHdoaWxlIChidWYubGVuZ3RoID4gMSAmJiBidWZbMF0gPT09IDB4MDAgJiYgKGJ1ZlsxXSAmIDB4ODApID09PSAweDAwKVxuXHRcdGJ1ZiA9IGJ1Zi5zbGljZSgxKTtcblx0aWYgKChidWZbMF0gJiAweDgwKSA9PT0gMHg4MCkge1xuXHRcdHZhciBiID0gbmV3IEJ1ZmZlcihidWYubGVuZ3RoICsgMSk7XG5cdFx0YlswXSA9IDB4MDA7XG5cdFx0YnVmLmNvcHkoYiwgMSk7XG5cdFx0YnVmID0gYjtcblx0fVxuXHRyZXR1cm4gKGJ1Zik7XG59XG5cbmZ1bmN0aW9uIGJpZ2ludFRvTXBCdWYoYmlnaW50KSB7XG5cdHZhciBidWYgPSBuZXcgQnVmZmVyKGJpZ2ludC50b0J5dGVBcnJheSgpKTtcblx0YnVmID0gbXBOb3JtYWxpemUoYnVmKTtcblx0cmV0dXJuIChidWYpO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVEU0FQdWJsaWMoZywgcCwgeCkge1xuXHRhc3NlcnQuYnVmZmVyKGcpO1xuXHRhc3NlcnQuYnVmZmVyKHApO1xuXHRhc3NlcnQuYnVmZmVyKHgpO1xuXHR0cnkge1xuXHRcdHZhciBiaWdJbnQgPSByZXF1aXJlKCdqc2JuJykuQmlnSW50ZWdlcjtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHRocm93IChuZXcgRXJyb3IoJ1RvIGxvYWQgYSBQS0NTIzggZm9ybWF0IERTQSBwcml2YXRlIGtleSwgJyArXG5cdFx0ICAgICd0aGUgbm9kZSBqc2JuIGxpYnJhcnkgaXMgcmVxdWlyZWQuJykpO1xuXHR9XG5cdGcgPSBuZXcgYmlnSW50KGcpO1xuXHRwID0gbmV3IGJpZ0ludChwKTtcblx0eCA9IG5ldyBiaWdJbnQoeCk7XG5cdHZhciB5ID0gZy5tb2RQb3coeCwgcCk7XG5cdHZhciB5YnVmID0gYmlnaW50VG9NcEJ1Zih5KTtcblx0cmV0dXJuICh5YnVmKTtcbn1cblxuZnVuY3Rpb24gYWRkUlNBTWlzc2luZyhrZXkpIHtcblx0YXNzZXJ0Lm9iamVjdChrZXkpO1xuXHRhc3NlcnRDb21wYXRpYmxlKGtleSwgUHJpdmF0ZUtleSwgWzEsIDFdKTtcblx0dHJ5IHtcblx0XHR2YXIgYmlnSW50ID0gcmVxdWlyZSgnanNibicpLkJpZ0ludGVnZXI7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHR0aHJvdyAobmV3IEVycm9yKCdUbyB3cml0ZSBhIFBFTSBwcml2YXRlIGtleSBmcm9tICcgK1xuXHRcdCAgICAndGhpcyBzb3VyY2UsIHRoZSBub2RlIGpzYm4gbGliIGlzIHJlcXVpcmVkLicpKTtcblx0fVxuXG5cdHZhciBkID0gbmV3IGJpZ0ludChrZXkucGFydC5kLmRhdGEpO1xuXHR2YXIgYnVmO1xuXG5cdGlmICgha2V5LnBhcnQuZG1vZHApIHtcblx0XHR2YXIgcCA9IG5ldyBiaWdJbnQoa2V5LnBhcnQucC5kYXRhKTtcblx0XHR2YXIgZG1vZHAgPSBkLm1vZChwLnN1YnRyYWN0KDEpKTtcblxuXHRcdGJ1ZiA9IGJpZ2ludFRvTXBCdWYoZG1vZHApO1xuXHRcdGtleS5wYXJ0LmRtb2RwID0ge25hbWU6ICdkbW9kcCcsIGRhdGE6IGJ1Zn07XG5cdFx0a2V5LnBhcnRzLnB1c2goa2V5LnBhcnQuZG1vZHApO1xuXHR9XG5cdGlmICgha2V5LnBhcnQuZG1vZHEpIHtcblx0XHR2YXIgcSA9IG5ldyBiaWdJbnQoa2V5LnBhcnQucS5kYXRhKTtcblx0XHR2YXIgZG1vZHEgPSBkLm1vZChxLnN1YnRyYWN0KDEpKTtcblxuXHRcdGJ1ZiA9IGJpZ2ludFRvTXBCdWYoZG1vZHEpO1xuXHRcdGtleS5wYXJ0LmRtb2RxID0ge25hbWU6ICdkbW9kcScsIGRhdGE6IGJ1Zn07XG5cdFx0a2V5LnBhcnRzLnB1c2goa2V5LnBhcnQuZG1vZHEpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG9wZW5zc2hDaXBoZXJJbmZvKGNpcGhlcikge1xuXHR2YXIgaW5mID0ge307XG5cdHN3aXRjaCAoY2lwaGVyKSB7XG5cdGNhc2UgJzNkZXMtY2JjJzpcblx0XHRpbmYua2V5U2l6ZSA9IDI0O1xuXHRcdGluZi5ibG9ja1NpemUgPSA4O1xuXHRcdGluZi5vcGVuc3NsTmFtZSA9ICdkZXMtZWRlMy1jYmMnO1xuXHRcdGJyZWFrO1xuXHRjYXNlICdibG93ZmlzaC1jYmMnOlxuXHRcdGluZi5rZXlTaXplID0gMTY7XG5cdFx0aW5mLmJsb2NrU2l6ZSA9IDg7XG5cdFx0aW5mLm9wZW5zc2xOYW1lID0gJ2JmLWNiYyc7XG5cdFx0YnJlYWs7XG5cdGNhc2UgJ2FlczEyOC1jYmMnOlxuXHRjYXNlICdhZXMxMjgtY3RyJzpcblx0Y2FzZSAnYWVzMTI4LWdjbUBvcGVuc3NoLmNvbSc6XG5cdFx0aW5mLmtleVNpemUgPSAxNjtcblx0XHRpbmYuYmxvY2tTaXplID0gMTY7XG5cdFx0aW5mLm9wZW5zc2xOYW1lID0gJ2Flcy0xMjgtJyArIGNpcGhlci5zbGljZSg3LCAxMCk7XG5cdFx0YnJlYWs7XG5cdGNhc2UgJ2FlczE5Mi1jYmMnOlxuXHRjYXNlICdhZXMxOTItY3RyJzpcblx0Y2FzZSAnYWVzMTkyLWdjbUBvcGVuc3NoLmNvbSc6XG5cdFx0aW5mLmtleVNpemUgPSAyNDtcblx0XHRpbmYuYmxvY2tTaXplID0gMTY7XG5cdFx0aW5mLm9wZW5zc2xOYW1lID0gJ2Flcy0xOTItJyArIGNpcGhlci5zbGljZSg3LCAxMCk7XG5cdFx0YnJlYWs7XG5cdGNhc2UgJ2FlczI1Ni1jYmMnOlxuXHRjYXNlICdhZXMyNTYtY3RyJzpcblx0Y2FzZSAnYWVzMjU2LWdjbUBvcGVuc3NoLmNvbSc6XG5cdFx0aW5mLmtleVNpemUgPSAzMjtcblx0XHRpbmYuYmxvY2tTaXplID0gMTY7XG5cdFx0aW5mLm9wZW5zc2xOYW1lID0gJ2Flcy0yNTYtJyArIGNpcGhlci5zbGljZSg3LCAxMCk7XG5cdFx0YnJlYWs7XG5cdGRlZmF1bHQ6XG5cdFx0dGhyb3cgKG5ldyBFcnJvcihcblx0XHQgICAgJ1Vuc3VwcG9ydGVkIG9wZW5zc2wgY2lwaGVyIFwiJyArIGNpcGhlciArICdcIicpKTtcblx0fVxuXHRyZXR1cm4gKGluZik7XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIE1hcmsgQ2F2YWdlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gQ29weXJpZ2h0IDIwMTUgSm95ZW50LCBJbmMuXG5cbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuXG4vLy8tLS0gR2xvYmFsc1xuXG4vKiBKU1NUWUxFRCAqL1xudmFyIFVVSURfUkVHRVhQID0gL15bYS1mQS1GMC05XXs4fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXsxMn0kLztcblxuXG4vLy8tLS0gSW50ZXJuYWxcblxuZnVuY3Rpb24gX2NhcGl0YWxpemUoc3RyKSB7XG4gICAgcmV0dXJuIChzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSkpO1xufVxuXG5mdW5jdGlvbiBfdG9zcyhuYW1lLCBleHBlY3RlZCwgb3BlciwgYXJnLCBhY3R1YWwpIHtcbiAgICB0aHJvdyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHtcbiAgICAgICAgbWVzc2FnZTogdXRpbC5mb3JtYXQoJyVzICglcykgaXMgcmVxdWlyZWQnLCBuYW1lLCBleHBlY3RlZCksXG4gICAgICAgIGFjdHVhbDogKGFjdHVhbCA9PT0gdW5kZWZpbmVkKSA/IHR5cGVvZiAoYXJnKSA6IGFjdHVhbChhcmcpLFxuICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgICAgIG9wZXJhdG9yOiBvcGVyIHx8ICc9PT0nLFxuICAgICAgICBzdGFja1N0YXJ0RnVuY3Rpb246IF90b3NzLmNhbGxlclxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0Q2xhc3MoYXJnKSB7XG4gICAgcmV0dXJuIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKS5zbGljZSg4LCAtMSkpO1xufVxuXG5mdW5jdGlvbiBub29wKCkge1xuICAgIC8vIFdoeSBldmVuIGJvdGhlciB3aXRoIGFzc2VydHM/XG59XG5cblxuLy8vLS0tIEV4cG9ydHNcblxudmFyIHR5cGVzID0ge1xuICAgIGJvb2w6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ2Jvb2xlYW4nOyB9XG4gICAgfSxcbiAgICBmdW5jOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdmdW5jdGlvbic7IH1cbiAgICB9LFxuICAgIHN0cmluZzoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnc3RyaW5nJzsgfVxuICAgIH0sXG4gICAgb2JqZWN0OiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIChhcmcpID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG51bWJlcjoge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKGFyZyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGZpbml0ZToge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiAoYXJnKSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKGFyZykgJiYgaXNGaW5pdGUoYXJnKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYnVmZmVyOiB7XG4gICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBCdWZmZXIuaXNCdWZmZXIoYXJnKTsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdCdWZmZXIuaXNCdWZmZXInXG4gICAgfSxcbiAgICBhcnJheToge1xuICAgICAgICBjaGVjazogZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gQXJyYXkuaXNBcnJheShhcmcpOyB9LFxuICAgICAgICBvcGVyYXRvcjogJ0FycmF5LmlzQXJyYXknXG4gICAgfSxcbiAgICBzdHJlYW06IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIFN0cmVhbTsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdpbnN0YW5jZW9mJyxcbiAgICAgICAgYWN0dWFsOiBfZ2V0Q2xhc3NcbiAgICB9LFxuICAgIGRhdGU6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIERhdGU7IH0sXG4gICAgICAgIG9wZXJhdG9yOiAnaW5zdGFuY2VvZicsXG4gICAgICAgIGFjdHVhbDogX2dldENsYXNzXG4gICAgfSxcbiAgICByZWdleHA6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIFJlZ0V4cDsgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdpbnN0YW5jZW9mJyxcbiAgICAgICAgYWN0dWFsOiBfZ2V0Q2xhc3NcbiAgICB9LFxuICAgIHV1aWQ6IHtcbiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgKGFyZykgPT09ICdzdHJpbmcnICYmIFVVSURfUkVHRVhQLnRlc3QoYXJnKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3BlcmF0b3I6ICdpc1VVSUQnXG4gICAgfVxufTtcblxuZnVuY3Rpb24gX3NldEV4cG9ydHMobmRlYnVnKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0eXBlcyk7XG4gICAgdmFyIG91dDtcblxuICAgIC8qIHJlLWV4cG9ydCBzdGFuZGFyZCBhc3NlcnQgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9OREVCVUcpIHtcbiAgICAgICAgb3V0ID0gbm9vcDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgPSBmdW5jdGlvbiAoYXJnLCBtc2cpIHtcbiAgICAgICAgICAgIGlmICghYXJnKSB7XG4gICAgICAgICAgICAgICAgX3Rvc3MobXNnLCAndHJ1ZScsIGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyogc3RhbmRhcmQgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtrXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgb3V0W2tdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoIXR5cGUuY2hlY2soYXJnKSkge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgaywgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKiBvcHRpb25hbCBjaGVja3MgKi9cbiAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgdmFyIG5hbWUgPSAnb3B0aW9uYWwnICsgX2NhcGl0YWxpemUoayk7XG4gICAgICAgIGlmIChuZGVidWcpIHtcbiAgICAgICAgICAgIG91dFtuYW1lXSA9IG5vb3A7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1trXTtcbiAgICAgICAgb3V0W25hbWVdID0gZnVuY3Rpb24gKGFyZywgbXNnKSB7XG4gICAgICAgICAgICBpZiAoYXJnID09PSB1bmRlZmluZWQgfHwgYXJnID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZykpIHtcbiAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGssIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogYXJyYXlPZiBjaGVja3MgKi9cbiAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgdmFyIG5hbWUgPSAnYXJyYXlPZicgKyBfY2FwaXRhbGl6ZShrKTtcbiAgICAgICAgaWYgKG5kZWJ1Zykge1xuICAgICAgICAgICAgb3V0W25hbWVdID0gbm9vcDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2tdO1xuICAgICAgICB2YXIgZXhwZWN0ZWQgPSAnWycgKyBrICsgJ10nO1xuICAgICAgICBvdXRbbmFtZV0gPSBmdW5jdGlvbiAoYXJnLCBtc2cpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBleHBlY3RlZCwgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXR5cGUuY2hlY2soYXJnW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBfdG9zcyhtc2csIGV4cGVjdGVkLCB0eXBlLm9wZXJhdG9yLCBhcmcsIHR5cGUuYWN0dWFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKiBvcHRpb25hbEFycmF5T2YgY2hlY2tzICovXG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHZhciBuYW1lID0gJ29wdGlvbmFsQXJyYXlPZicgKyBfY2FwaXRhbGl6ZShrKTtcbiAgICAgICAgaWYgKG5kZWJ1Zykge1xuICAgICAgICAgICAgb3V0W25hbWVdID0gbm9vcDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2tdO1xuICAgICAgICB2YXIgZXhwZWN0ZWQgPSAnWycgKyBrICsgJ10nO1xuICAgICAgICBvdXRbbmFtZV0gPSBmdW5jdGlvbiAoYXJnLCBtc2cpIHtcbiAgICAgICAgICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgICAgIF90b3NzKG1zZywgZXhwZWN0ZWQsIHR5cGUub3BlcmF0b3IsIGFyZywgdHlwZS5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0eXBlLmNoZWNrKGFyZ1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3Rvc3MobXNnLCBleHBlY3RlZCwgdHlwZS5vcGVyYXRvciwgYXJnLCB0eXBlLmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyogcmUtZXhwb3J0IGJ1aWx0LWluIGFzc2VydGlvbnMgKi9cbiAgICBPYmplY3Qua2V5cyhhc3NlcnQpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaWYgKGsgPT09ICdBc3NlcnRpb25FcnJvcicpIHtcbiAgICAgICAgICAgIG91dFtrXSA9IGFzc2VydFtrXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmRlYnVnKSB7XG4gICAgICAgICAgICBvdXRba10gPSBub29wO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG91dFtrXSA9IGFzc2VydFtrXTtcbiAgICB9KTtcblxuICAgIC8qIGV4cG9ydCBvdXJzZWx2ZXMgKGZvciB1bml0IHRlc3RzIF9vbmx5XykgKi9cbiAgICBvdXQuX3NldEV4cG9ydHMgPSBfc2V0RXhwb3J0cztcblxuICAgIHJldHVybiBvdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldEV4cG9ydHMocHJvY2Vzcy5lbnYuTk9ERV9OREVCVUcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNOYXRpdmUgPSAvXFwubm9kZSQvO1xuXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgY2FsbGJhY2spIHtcbiAgICBmb3IgKCB2YXIga2V5IGluIG9iaiApIHtcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayhrZXkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7XG4gICAgZm9yRWFjaChzb3VyY2UsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBjbGVhckNhY2hlKHJlcXVpcmVDYWNoZSkge1xuICAgIGZvckVhY2gocmVxdWlyZUNhY2hlLCBmdW5jdGlvbiAocmVzb2x2ZWRQYXRoKSB7XG4gICAgICAgIGlmICghaXNOYXRpdmUudGVzdChyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgICAgICBkZWxldGUgcmVxdWlyZUNhY2hlW3Jlc29sdmVkUGF0aF07XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVxdWlyZUNhY2hlLCBjYWxsYmFjaywgY2FsbGJhY2tGb3JNb2R1bGVzVG9LZWVwLCBtb2R1bGUpIHtcblxuICAgIHZhciBvcmlnaW5hbENhY2hlID0gYXNzaWduKHt9LCByZXF1aXJlQ2FjaGUpO1xuICAgIGNsZWFyQ2FjaGUocmVxdWlyZUNhY2hlKTtcblxuICAgIGlmIChjYWxsYmFja0Zvck1vZHVsZXNUb0tlZXApIHtcblxuICAgICAgICB2YXIgb3JpZ2luYWxNb2R1bGVDaGlsZHJlbiA9IG1vZHVsZS5jaGlsZHJlbiA/IG1vZHVsZS5jaGlsZHJlbi5zbGljZSgpIDogZmFsc2U7IC8vIENyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgbW9kdWxlLmNoaWxkcmVuXG5cbiAgICAgICAgY2FsbGJhY2tGb3JNb2R1bGVzVG9LZWVwKCk7XG5cbiAgICAgICAgLy8gTGlzdHMgdGhlIGNhY2hlIGVudHJpZXMgbWFkZSBieSBjYWxsYmFja0Zvck1vZHVsZXNUb0tlZXAoKVxuICAgICAgICB2YXIgbW9kdWxlc1RvS2VlcCA9IFtdO1xuICAgICAgICBmb3JFYWNoKHJlcXVpcmVDYWNoZSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgbW9kdWxlc1RvS2VlcC5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIERpc2NhcmRzIHRoZSBtb2R1bGVzIHJlcXVpcmVkIGluIGNhbGxiYWNrRm9yTW9kdWxlc1RvS2VlcCgpXG4gICAgICAgIGNsZWFyQ2FjaGUocmVxdWlyZUNhY2hlKTtcblxuICAgICAgICBpZiAobW9kdWxlLmNoaWxkcmVuKSB7IC8vIE9ubHkgdHJ1ZSBmb3Igbm9kZS5qc1xuICAgICAgICAgICAgbW9kdWxlLmNoaWxkcmVuID0gb3JpZ2luYWxNb2R1bGVDaGlsZHJlbjsgLy8gUmVtb3ZlcyBsYXN0IHJlZmVyZW5jZXMgdG8gbW9kdWxlcyByZXF1aXJlZCBpbiBjYWxsYmFja0Zvck1vZHVsZXNUb0tlZXAoKSAtPiBObyBtZW1vcnkgbGVha1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGFrZXMgdGhlIGNhY2hlIGVudHJpZXMgb2YgdGhlIG9yaWdpbmFsIGNhY2hlIGluIGNhc2UgdGhlIG1vZHVsZXMgd2hlcmUgcmVxdWlyZWQgYmVmb3JlXG4gICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IG1vZHVsZXNUb0tlZXAubGVuZ3RoOyBpKz0xICkge1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsQ2FjaGVbbW9kdWxlc1RvS2VlcFtpXV0pIHtcbiAgICAgICAgICAgICAgICByZXF1aXJlQ2FjaGVbbW9kdWxlc1RvS2VlcFtpXV0gPSBvcmlnaW5hbENhY2hlW21vZHVsZXNUb0tlZXBbaV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICB2YXIgZnJlc2hNb2R1bGUgPSBjYWxsYmFjaygpO1xuXG4gICAgdmFyIHN0ZWFsdGhDYWNoZSA9IGNhbGxiYWNrRm9yTW9kdWxlc1RvS2VlcCA/IGFzc2lnbih7fSwgcmVxdWlyZUNhY2hlKSA6IGZhbHNlO1xuXG4gICAgY2xlYXJDYWNoZShyZXF1aXJlQ2FjaGUpO1xuXG4gICAgaWYgKGNhbGxiYWNrRm9yTW9kdWxlc1RvS2VlcCkge1xuICAgICAgICAvLyBJbiBjYXNlIG1vZHVsZXMgdG8ga2VlcCB3ZXJlIHJlcXVpcmVkIGluc2lkZSB0aGUgc3RlYWx0aHkgcmVxdWlyZSBmb3IgdGhlIGZpcnN0IHRpbWUsIGNvcHkgdGhlbSB0byB0aGUgcmVzdG9yZWQgY2FjaGVcbiAgICAgICAgZm9yICggdmFyIGsgPSAwOyBrIDwgbW9kdWxlc1RvS2VlcC5sZW5ndGg7IGsrPTEgKSB7XG4gICAgICAgICAgICBpZiAoc3RlYWx0aENhY2hlW21vZHVsZXNUb0tlZXBba11dKSB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZUNhY2hlW21vZHVsZXNUb0tlZXBba11dID0gc3RlYWx0aENhY2hlW21vZHVsZXNUb0tlZXBba11dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXNzaWduKHJlcXVpcmVDYWNoZSwgb3JpZ2luYWxDYWNoZSk7XG5cbiAgICByZXR1cm4gZnJlc2hNb2R1bGU7XG5cbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW07XG5cbnZhciBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmluaGVyaXRzKFN0cmVhbSwgRUUpO1xuU3RyZWFtLlJlYWRhYmxlID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLmpzJyk7XG5TdHJlYW0uV3JpdGFibGUgPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUuanMnKTtcblN0cmVhbS5EdXBsZXggPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0vZHVwbGV4LmpzJyk7XG5TdHJlYW0uVHJhbnNmb3JtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qcycpO1xuU3RyZWFtLlBhc3NUaHJvdWdoID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoLmpzJyk7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuNC54XG5TdHJlYW0uU3RyZWFtID0gU3RyZWFtO1xuXG5cblxuLy8gb2xkLXN0eWxlIHN0cmVhbXMuICBOb3RlIHRoYXQgdGhlIHBpcGUgbWV0aG9kICh0aGUgb25seSByZWxldmFudFxuLy8gcGFydCBvZiB0aGlzIGNsYXNzKSBpcyBvdmVycmlkZGVuIGluIHRoZSBSZWFkYWJsZSBjbGFzcy5cblxuZnVuY3Rpb24gU3RyZWFtKCkge1xuICBFRS5jYWxsKHRoaXMpO1xufVxuXG5TdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIHZhciBzb3VyY2UgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGlmIChkZXN0LndyaXRhYmxlKSB7XG4gICAgICBpZiAoZmFsc2UgPT09IGRlc3Qud3JpdGUoY2h1bmspICYmIHNvdXJjZS5wYXVzZSkge1xuICAgICAgICBzb3VyY2UucGF1c2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzb3VyY2Uub24oJ2RhdGEnLCBvbmRhdGEpO1xuXG4gIGZ1bmN0aW9uIG9uZHJhaW4oKSB7XG4gICAgaWYgKHNvdXJjZS5yZWFkYWJsZSAmJiBzb3VyY2UucmVzdW1lKSB7XG4gICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgfVxuICB9XG5cbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICAvLyBJZiB0aGUgJ2VuZCcgb3B0aW9uIGlzIG5vdCBzdXBwbGllZCwgZGVzdC5lbmQoKSB3aWxsIGJlIGNhbGxlZCB3aGVuXG4gIC8vIHNvdXJjZSBnZXRzIHRoZSAnZW5kJyBvciAnY2xvc2UnIGV2ZW50cy4gIE9ubHkgZGVzdC5lbmQoKSBvbmNlLlxuICBpZiAoIWRlc3QuX2lzU3RkaW8gJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMuZW5kICE9PSBmYWxzZSkpIHtcbiAgICBzb3VyY2Uub24oJ2VuZCcsIG9uZW5kKTtcbiAgICBzb3VyY2Uub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIH1cblxuICB2YXIgZGlkT25FbmQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm47XG4gICAgZGlkT25FbmQgPSB0cnVlO1xuXG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVybjtcbiAgICBkaWRPbkVuZCA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIGRlc3QuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgZGVzdC5kZXN0cm95KCk7XG4gIH1cblxuICAvLyBkb24ndCBsZWF2ZSBkYW5nbGluZyBwaXBlcyB3aGVuIHRoZXJlIGFyZSBlcnJvcnMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKEVFLmxpc3RlbmVyQ291bnQodGhpcywgJ2Vycm9yJykgPT09IDApIHtcbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgc3RyZWFtIGVycm9yIGluIHBpcGUuXG4gICAgfVxuICB9XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuICBkZXN0Lm9uKCdlcnJvcicsIG9uZXJyb3IpO1xuXG4gIC8vIHJlbW92ZSBhbGwgdGhlIGV2ZW50IGxpc3RlbmVycyB0aGF0IHdlcmUgYWRkZWQuXG4gIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25kYXRhKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbmVuZCk7XG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uY2xvc2UpO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIGNsZWFudXApO1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBjbGVhbnVwKTtcblxuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgY2xlYW51cCk7XG4gIH1cblxuICBzb3VyY2Uub24oJ2VuZCcsIGNsZWFudXApO1xuICBzb3VyY2Uub24oJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgZGVzdC5vbignY2xvc2UnLCBjbGVhbnVwKTtcblxuICBkZXN0LmVtaXQoJ3BpcGUnLCBzb3VyY2UpO1xuXG4gIC8vIEFsbG93IGZvciB1bml4LWxpa2UgdXNhZ2U6IEEucGlwZShCKS5waXBlKEMpXG4gIHJldHVybiBkZXN0O1xufTtcbiIsInZhciBDbGllbnRSZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvcmVxdWVzdCcpXG52YXIgZXh0ZW5kID0gcmVxdWlyZSgneHRlbmQnKVxudmFyIHN0YXR1c0NvZGVzID0gcmVxdWlyZSgnYnVpbHRpbi1zdGF0dXMtY29kZXMnKVxudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpXG5cbnZhciBodHRwID0gZXhwb3J0c1xuXG5odHRwLnJlcXVlc3QgPSBmdW5jdGlvbiAob3B0cywgY2IpIHtcblx0aWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJylcblx0XHRvcHRzID0gdXJsLnBhcnNlKG9wdHMpXG5cdGVsc2Vcblx0XHRvcHRzID0gZXh0ZW5kKG9wdHMpXG5cblx0Ly8gTm9ybWFsbHksIHRoZSBwYWdlIGlzIGxvYWRlZCBmcm9tIGh0dHAgb3IgaHR0cHMsIHNvIG5vdCBzcGVjaWZ5aW5nIGEgcHJvdG9jb2xcblx0Ly8gd2lsbCByZXN1bHQgaW4gYSAodmFsaWQpIHByb3RvY29sLXJlbGF0aXZlIHVybC4gSG93ZXZlciwgdGhpcyB3b24ndCB3b3JrIGlmXG5cdC8vIHRoZSBwcm90b2NvbCBpcyBzb21ldGhpbmcgZWxzZSwgbGlrZSAnZmlsZTonXG5cdHZhciBkZWZhdWx0UHJvdG9jb2wgPSBnbG9iYWwubG9jYXRpb24ucHJvdG9jb2wuc2VhcmNoKC9eaHR0cHM/OiQvKSA9PT0gLTEgPyAnaHR0cDonIDogJydcblxuXHR2YXIgcHJvdG9jb2wgPSBvcHRzLnByb3RvY29sIHx8IGRlZmF1bHRQcm90b2NvbFxuXHR2YXIgaG9zdCA9IG9wdHMuaG9zdG5hbWUgfHwgb3B0cy5ob3N0XG5cdHZhciBwb3J0ID0gb3B0cy5wb3J0XG5cdHZhciBwYXRoID0gb3B0cy5wYXRoIHx8ICcvJ1xuXG5cdC8vIE5lY2Vzc2FyeSBmb3IgSVB2NiBhZGRyZXNzZXNcblx0aWYgKGhvc3QgJiYgaG9zdC5pbmRleE9mKCc6JykgIT09IC0xKVxuXHRcdGhvc3QgPSAnWycgKyBob3N0ICsgJ10nXG5cblx0Ly8gVGhpcyBtYXkgYmUgYSByZWxhdGl2ZSB1cmwuIFRoZSBicm93c2VyIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0byBpbnRlcnByZXQgaXQgY29ycmVjdGx5LlxuXHRvcHRzLnVybCA9IChob3N0ID8gKHByb3RvY29sICsgJy8vJyArIGhvc3QpIDogJycpICsgKHBvcnQgPyAnOicgKyBwb3J0IDogJycpICsgcGF0aFxuXHRvcHRzLm1ldGhvZCA9IChvcHRzLm1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKVxuXHRvcHRzLmhlYWRlcnMgPSBvcHRzLmhlYWRlcnMgfHwge31cblxuXHQvLyBBbHNvIHZhbGlkIG9wdHMuYXV0aCwgb3B0cy5tb2RlXG5cblx0dmFyIHJlcSA9IG5ldyBDbGllbnRSZXF1ZXN0KG9wdHMpXG5cdGlmIChjYilcblx0XHRyZXEub24oJ3Jlc3BvbnNlJywgY2IpXG5cdHJldHVybiByZXFcbn1cblxuaHR0cC5nZXQgPSBmdW5jdGlvbiBnZXQgKG9wdHMsIGNiKSB7XG5cdHZhciByZXEgPSBodHRwLnJlcXVlc3Qob3B0cywgY2IpXG5cdHJlcS5lbmQoKVxuXHRyZXR1cm4gcmVxXG59XG5cbmh0dHAuQWdlbnQgPSBmdW5jdGlvbiAoKSB7fVxuaHR0cC5BZ2VudC5kZWZhdWx0TWF4U29ja2V0cyA9IDRcblxuaHR0cC5TVEFUVVNfQ09ERVMgPSBzdGF0dXNDb2Rlc1xuXG5odHRwLk1FVEhPRFMgPSBbXG5cdCdDSEVDS09VVCcsXG5cdCdDT05ORUNUJyxcblx0J0NPUFknLFxuXHQnREVMRVRFJyxcblx0J0dFVCcsXG5cdCdIRUFEJyxcblx0J0xPQ0snLFxuXHQnTS1TRUFSQ0gnLFxuXHQnTUVSR0UnLFxuXHQnTUtBQ1RJVklUWScsXG5cdCdNS0NPTCcsXG5cdCdNT1ZFJyxcblx0J05PVElGWScsXG5cdCdPUFRJT05TJyxcblx0J1BBVENIJyxcblx0J1BPU1QnLFxuXHQnUFJPUEZJTkQnLFxuXHQnUFJPUFBBVENIJyxcblx0J1BVUkdFJyxcblx0J1BVVCcsXG5cdCdSRVBPUlQnLFxuXHQnU0VBUkNIJyxcblx0J1NVQlNDUklCRScsXG5cdCdUUkFDRScsXG5cdCdVTkxPQ0snLFxuXHQnVU5TVUJTQ1JJQkUnXG5dIiwiZXhwb3J0cy5mZXRjaCA9IGlzRnVuY3Rpb24oZ2xvYmFsLmZldGNoKSAmJiBpc0Z1bmN0aW9uKGdsb2JhbC5SZWFkYWJsZVN0cmVhbSlcblxuZXhwb3J0cy5ibG9iQ29uc3RydWN0b3IgPSBmYWxzZVxudHJ5IHtcblx0bmV3IEJsb2IoW25ldyBBcnJheUJ1ZmZlcigxKV0pXG5cdGV4cG9ydHMuYmxvYkNvbnN0cnVjdG9yID0gdHJ1ZVxufSBjYXRjaCAoZSkge31cblxuLy8gVGhlIHhociByZXF1ZXN0IHRvIGV4YW1wbGUuY29tIG1heSB2aW9sYXRlIHNvbWUgcmVzdHJpY3RpdmUgQ1NQIGNvbmZpZ3VyYXRpb25zLFxuLy8gc28gaWYgd2UncmUgcnVubmluZyBpbiBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBgZmV0Y2hgLCBhdm9pZCBjYWxsaW5nIGdldFhIUigpXG4vLyBhbmQgYXNzdW1lIHN1cHBvcnQgZm9yIGNlcnRhaW4gZmVhdHVyZXMgYmVsb3cuXG52YXIgeGhyXG5mdW5jdGlvbiBnZXRYSFIgKCkge1xuXHQvLyBDYWNoZSB0aGUgeGhyIHZhbHVlXG5cdGlmICh4aHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHhoclxuXG5cdGlmIChnbG9iYWwuWE1MSHR0cFJlcXVlc3QpIHtcblx0XHR4aHIgPSBuZXcgZ2xvYmFsLlhNTEh0dHBSZXF1ZXN0KClcblx0XHQvLyBJZiBYRG9tYWluUmVxdWVzdCBpcyBhdmFpbGFibGUgKGllIG9ubHksIHdoZXJlIHhociBtaWdodCBub3Qgd29ya1xuXHRcdC8vIGNyb3NzIGRvbWFpbiksIHVzZSB0aGUgcGFnZSBsb2NhdGlvbi4gT3RoZXJ3aXNlIHVzZSBleGFtcGxlLmNvbVxuXHRcdC8vIE5vdGU6IHRoaXMgZG9lc24ndCBhY3R1YWxseSBtYWtlIGFuIGh0dHAgcmVxdWVzdC5cblx0XHR0cnkge1xuXHRcdFx0eGhyLm9wZW4oJ0dFVCcsIGdsb2JhbC5YRG9tYWluUmVxdWVzdCA/ICcvJyA6ICdodHRwczovL2V4YW1wbGUuY29tJylcblx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdHhociA9IG51bGxcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gU2VydmljZSB3b3JrZXJzIGRvbid0IGhhdmUgWEhSXG5cdFx0eGhyID0gbnVsbFxuXHR9XG5cdHJldHVybiB4aHJcbn1cblxuZnVuY3Rpb24gY2hlY2tUeXBlU3VwcG9ydCAodHlwZSkge1xuXHR2YXIgeGhyID0gZ2V0WEhSKClcblx0aWYgKCF4aHIpIHJldHVybiBmYWxzZVxuXHR0cnkge1xuXHRcdHhoci5yZXNwb25zZVR5cGUgPSB0eXBlXG5cdFx0cmV0dXJuIHhoci5yZXNwb25zZVR5cGUgPT09IHR5cGVcblx0fSBjYXRjaCAoZSkge31cblx0cmV0dXJuIGZhbHNlXG59XG5cbi8vIEZvciBzb21lIHN0cmFuZ2UgcmVhc29uLCBTYWZhcmkgNy4wIHJlcG9ydHMgdHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciA9PT0gJ29iamVjdCcuXG4vLyBTYWZhcmkgNy4xIGFwcGVhcnMgdG8gaGF2ZSBmaXhlZCB0aGlzIGJ1Zy5cbnZhciBoYXZlQXJyYXlCdWZmZXIgPSB0eXBlb2YgZ2xvYmFsLkFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJ1xudmFyIGhhdmVTbGljZSA9IGhhdmVBcnJheUJ1ZmZlciAmJiBpc0Z1bmN0aW9uKGdsb2JhbC5BcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2UpXG5cbi8vIElmIGZldGNoIGlzIHN1cHBvcnRlZCwgdGhlbiBhcnJheWJ1ZmZlciB3aWxsIGJlIHN1cHBvcnRlZCB0b28uIFNraXAgY2FsbGluZ1xuLy8gY2hlY2tUeXBlU3VwcG9ydCgpLCBzaW5jZSB0aGF0IGNhbGxzIGdldFhIUigpLlxuZXhwb3J0cy5hcnJheWJ1ZmZlciA9IGV4cG9ydHMuZmV0Y2ggfHwgKGhhdmVBcnJheUJ1ZmZlciAmJiBjaGVja1R5cGVTdXBwb3J0KCdhcnJheWJ1ZmZlcicpKVxuXG4vLyBUaGVzZSBuZXh0IHR3byB0ZXN0cyB1bmF2b2lkYWJseSBzaG93IHdhcm5pbmdzIGluIENocm9tZS4gU2luY2UgZmV0Y2ggd2lsbCBhbHdheXNcbi8vIGJlIHVzZWQgaWYgaXQncyBhdmFpbGFibGUsIGp1c3QgcmV0dXJuIGZhbHNlIGZvciB0aGVzZSB0byBhdm9pZCB0aGUgd2FybmluZ3MuXG5leHBvcnRzLm1zc3RyZWFtID0gIWV4cG9ydHMuZmV0Y2ggJiYgaGF2ZVNsaWNlICYmIGNoZWNrVHlwZVN1cHBvcnQoJ21zLXN0cmVhbScpXG5leHBvcnRzLm1vemNodW5rZWRhcnJheWJ1ZmZlciA9ICFleHBvcnRzLmZldGNoICYmIGhhdmVBcnJheUJ1ZmZlciAmJlxuXHRjaGVja1R5cGVTdXBwb3J0KCdtb3otY2h1bmtlZC1hcnJheWJ1ZmZlcicpXG5cbi8vIElmIGZldGNoIGlzIHN1cHBvcnRlZCwgdGhlbiBvdmVycmlkZU1pbWVUeXBlIHdpbGwgYmUgc3VwcG9ydGVkIHRvby4gU2tpcCBjYWxsaW5nXG4vLyBnZXRYSFIoKS5cbmV4cG9ydHMub3ZlcnJpZGVNaW1lVHlwZSA9IGV4cG9ydHMuZmV0Y2ggfHwgKGdldFhIUigpID8gaXNGdW5jdGlvbihnZXRYSFIoKS5vdmVycmlkZU1pbWVUeXBlKSA6IGZhbHNlKVxuXG5leHBvcnRzLnZiQXJyYXkgPSBpc0Z1bmN0aW9uKGdsb2JhbC5WQkFycmF5KVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG59XG5cbnhociA9IG51bGwgLy8gSGVscCBnY1xuIiwidmFyIGNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL2NhcGFiaWxpdHknKVxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxudmFyIHJlc3BvbnNlID0gcmVxdWlyZSgnLi9yZXNwb25zZScpXG52YXIgc3RyZWFtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJylcbnZhciB0b0FycmF5QnVmZmVyID0gcmVxdWlyZSgndG8tYXJyYXlidWZmZXInKVxuXG52YXIgSW5jb21pbmdNZXNzYWdlID0gcmVzcG9uc2UuSW5jb21pbmdNZXNzYWdlXG52YXIgclN0YXRlcyA9IHJlc3BvbnNlLnJlYWR5U3RhdGVzXG5cbmZ1bmN0aW9uIGRlY2lkZU1vZGUgKHByZWZlckJpbmFyeSwgdXNlRmV0Y2gpIHtcblx0aWYgKGNhcGFiaWxpdHkuZmV0Y2ggJiYgdXNlRmV0Y2gpIHtcblx0XHRyZXR1cm4gJ2ZldGNoJ1xuXHR9IGVsc2UgaWYgKGNhcGFiaWxpdHkubW96Y2h1bmtlZGFycmF5YnVmZmVyKSB7XG5cdFx0cmV0dXJuICdtb3otY2h1bmtlZC1hcnJheWJ1ZmZlcidcblx0fSBlbHNlIGlmIChjYXBhYmlsaXR5Lm1zc3RyZWFtKSB7XG5cdFx0cmV0dXJuICdtcy1zdHJlYW0nXG5cdH0gZWxzZSBpZiAoY2FwYWJpbGl0eS5hcnJheWJ1ZmZlciAmJiBwcmVmZXJCaW5hcnkpIHtcblx0XHRyZXR1cm4gJ2FycmF5YnVmZmVyJ1xuXHR9IGVsc2UgaWYgKGNhcGFiaWxpdHkudmJBcnJheSAmJiBwcmVmZXJCaW5hcnkpIHtcblx0XHRyZXR1cm4gJ3RleHQ6dmJhcnJheSdcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gJ3RleHQnXG5cdH1cbn1cblxudmFyIENsaWVudFJlcXVlc3QgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRzKSB7XG5cdHZhciBzZWxmID0gdGhpc1xuXHRzdHJlYW0uV3JpdGFibGUuY2FsbChzZWxmKVxuXG5cdHNlbGYuX29wdHMgPSBvcHRzXG5cdHNlbGYuX2JvZHkgPSBbXVxuXHRzZWxmLl9oZWFkZXJzID0ge31cblx0aWYgKG9wdHMuYXV0aClcblx0XHRzZWxmLnNldEhlYWRlcignQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgbmV3IEJ1ZmZlcihvcHRzLmF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKSlcblx0T2JqZWN0LmtleXMob3B0cy5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG5cdFx0c2VsZi5zZXRIZWFkZXIobmFtZSwgb3B0cy5oZWFkZXJzW25hbWVdKVxuXHR9KVxuXG5cdHZhciBwcmVmZXJCaW5hcnlcblx0dmFyIHVzZUZldGNoID0gdHJ1ZVxuXHRpZiAob3B0cy5tb2RlID09PSAnZGlzYWJsZS1mZXRjaCcgfHwgJ3RpbWVvdXQnIGluIG9wdHMpIHtcblx0XHQvLyBJZiB0aGUgdXNlIG9mIFhIUiBzaG91bGQgYmUgcHJlZmVycmVkIGFuZCBpbmNsdWRlcyBwcmVzZXJ2aW5nIHRoZSAnY29udGVudC10eXBlJyBoZWFkZXIuXG5cdFx0Ly8gRm9yY2UgWEhSIHRvIGJlIHVzZWQgc2luY2UgdGhlIEZldGNoIEFQSSBkb2VzIG5vdCB5ZXQgc3VwcG9ydCB0aW1lb3V0cy5cblx0XHR1c2VGZXRjaCA9IGZhbHNlXG5cdFx0cHJlZmVyQmluYXJ5ID0gdHJ1ZVxuXHR9IGVsc2UgaWYgKG9wdHMubW9kZSA9PT0gJ3ByZWZlci1zdHJlYW1pbmcnKSB7XG5cdFx0Ly8gSWYgc3RyZWFtaW5nIGlzIGEgaGlnaCBwcmlvcml0eSBidXQgYmluYXJ5IGNvbXBhdGliaWxpdHkgYW5kXG5cdFx0Ly8gdGhlIGFjY3VyYWN5IG9mIHRoZSAnY29udGVudC10eXBlJyBoZWFkZXIgYXJlbid0XG5cdFx0cHJlZmVyQmluYXJ5ID0gZmFsc2Vcblx0fSBlbHNlIGlmIChvcHRzLm1vZGUgPT09ICdhbGxvdy13cm9uZy1jb250ZW50LXR5cGUnKSB7XG5cdFx0Ly8gSWYgc3RyZWFtaW5nIGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gcHJlc2VydmluZyB0aGUgJ2NvbnRlbnQtdHlwZScgaGVhZGVyXG5cdFx0cHJlZmVyQmluYXJ5ID0gIWNhcGFiaWxpdHkub3ZlcnJpZGVNaW1lVHlwZVxuXHR9IGVsc2UgaWYgKCFvcHRzLm1vZGUgfHwgb3B0cy5tb2RlID09PSAnZGVmYXVsdCcgfHwgb3B0cy5tb2RlID09PSAncHJlZmVyLWZhc3QnKSB7XG5cdFx0Ly8gVXNlIGJpbmFyeSBpZiB0ZXh0IHN0cmVhbWluZyBtYXkgY29ycnVwdCBkYXRhIG9yIHRoZSBjb250ZW50LXR5cGUgaGVhZGVyLCBvciBmb3Igc3BlZWRcblx0XHRwcmVmZXJCaW5hcnkgPSB0cnVlXG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIGZvciBvcHRzLm1vZGUnKVxuXHR9XG5cdHNlbGYuX21vZGUgPSBkZWNpZGVNb2RlKHByZWZlckJpbmFyeSwgdXNlRmV0Y2gpXG5cblx0c2VsZi5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuXHRcdHNlbGYuX29uRmluaXNoKClcblx0fSlcbn1cblxuaW5oZXJpdHMoQ2xpZW50UmVxdWVzdCwgc3RyZWFtLldyaXRhYmxlKVxuXG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5zZXRIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcblx0dmFyIHNlbGYgPSB0aGlzXG5cdHZhciBsb3dlck5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblx0Ly8gVGhpcyBjaGVjayBpcyBub3QgbmVjZXNzYXJ5LCBidXQgaXQgcHJldmVudHMgd2FybmluZ3MgZnJvbSBicm93c2VycyBhYm91dCBzZXR0aW5nIHVuc2FmZVxuXHQvLyBoZWFkZXJzLiBUbyBiZSBob25lc3QgSSdtIG5vdCBlbnRpcmVseSBzdXJlIGhpZGluZyB0aGVzZSB3YXJuaW5ncyBpcyBhIGdvb2QgdGhpbmcsIGJ1dFxuXHQvLyBodHRwLWJyb3dzZXJpZnkgZGlkIGl0LCBzbyBJIHdpbGwgdG9vLlxuXHRpZiAodW5zYWZlSGVhZGVycy5pbmRleE9mKGxvd2VyTmFtZSkgIT09IC0xKVxuXHRcdHJldHVyblxuXG5cdHNlbGYuX2hlYWRlcnNbbG93ZXJOYW1lXSA9IHtcblx0XHRuYW1lOiBuYW1lLFxuXHRcdHZhbHVlOiB2YWx1ZVxuXHR9XG59XG5cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLmdldEhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdHZhciBoZWFkZXIgPSB0aGlzLl9oZWFkZXJzW25hbWUudG9Mb3dlckNhc2UoKV1cblx0aWYgKGhlYWRlcilcblx0XHRyZXR1cm4gaGVhZGVyLnZhbHVlXG5cdHJldHVybiBudWxsXG59XG5cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLnJlbW92ZUhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdHZhciBzZWxmID0gdGhpc1xuXHRkZWxldGUgc2VsZi5faGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldXG59XG5cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLl9vbkZpbmlzaCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIHNlbGYgPSB0aGlzXG5cblx0aWYgKHNlbGYuX2Rlc3Ryb3llZClcblx0XHRyZXR1cm5cblx0dmFyIG9wdHMgPSBzZWxmLl9vcHRzXG5cblx0dmFyIGhlYWRlcnNPYmogPSBzZWxmLl9oZWFkZXJzXG5cdHZhciBib2R5ID0gbnVsbFxuXHRpZiAob3B0cy5tZXRob2QgIT09ICdHRVQnICYmIG9wdHMubWV0aG9kICE9PSAnSEVBRCcpIHtcblx0XHRpZiAoY2FwYWJpbGl0eS5ibG9iQ29uc3RydWN0b3IpIHtcblx0XHRcdGJvZHkgPSBuZXcgZ2xvYmFsLkJsb2Ioc2VsZi5fYm9keS5tYXAoZnVuY3Rpb24gKGJ1ZmZlcikge1xuXHRcdFx0XHRyZXR1cm4gdG9BcnJheUJ1ZmZlcihidWZmZXIpXG5cdFx0XHR9KSwge1xuXHRcdFx0XHR0eXBlOiAoaGVhZGVyc09ialsnY29udGVudC10eXBlJ10gfHwge30pLnZhbHVlIHx8ICcnXG5cdFx0XHR9KVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBnZXQgdXRmOCBzdHJpbmdcblx0XHRcdGJvZHkgPSBCdWZmZXIuY29uY2F0KHNlbGYuX2JvZHkpLnRvU3RyaW5nKClcblx0XHR9XG5cdH1cblxuXHQvLyBjcmVhdGUgZmxhdHRlbmVkIGxpc3Qgb2YgaGVhZGVyc1xuXHR2YXIgaGVhZGVyc0xpc3QgPSBbXVxuXHRPYmplY3Qua2V5cyhoZWFkZXJzT2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlOYW1lKSB7XG5cdFx0dmFyIG5hbWUgPSBoZWFkZXJzT2JqW2tleU5hbWVdLm5hbWVcblx0XHR2YXIgdmFsdWUgPSBoZWFkZXJzT2JqW2tleU5hbWVdLnZhbHVlXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG5cdFx0XHRcdGhlYWRlcnNMaXN0LnB1c2goW25hbWUsIHZdKVxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVhZGVyc0xpc3QucHVzaChbbmFtZSwgdmFsdWVdKVxuXHRcdH1cblx0fSlcblxuXHRpZiAoc2VsZi5fbW9kZSA9PT0gJ2ZldGNoJykge1xuXHRcdGdsb2JhbC5mZXRjaChzZWxmLl9vcHRzLnVybCwge1xuXHRcdFx0bWV0aG9kOiBzZWxmLl9vcHRzLm1ldGhvZCxcblx0XHRcdGhlYWRlcnM6IGhlYWRlcnNMaXN0LFxuXHRcdFx0Ym9keTogYm9keSB8fCB1bmRlZmluZWQsXG5cdFx0XHRtb2RlOiAnY29ycycsXG5cdFx0XHRjcmVkZW50aWFsczogb3B0cy53aXRoQ3JlZGVudGlhbHMgPyAnaW5jbHVkZScgOiAnc2FtZS1vcmlnaW4nXG5cdFx0fSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcblx0XHRcdHNlbGYuX2ZldGNoUmVzcG9uc2UgPSByZXNwb25zZVxuXHRcdFx0c2VsZi5fY29ubmVjdCgpXG5cdFx0fSwgZnVuY3Rpb24gKHJlYXNvbikge1xuXHRcdFx0c2VsZi5lbWl0KCdlcnJvcicsIHJlYXNvbilcblx0XHR9KVxuXHR9IGVsc2Uge1xuXHRcdHZhciB4aHIgPSBzZWxmLl94aHIgPSBuZXcgZ2xvYmFsLlhNTEh0dHBSZXF1ZXN0KClcblx0XHR0cnkge1xuXHRcdFx0eGhyLm9wZW4oc2VsZi5fb3B0cy5tZXRob2QsIHNlbGYuX29wdHMudXJsLCB0cnVlKVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0cHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpXG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0Ly8gQ2FuJ3Qgc2V0IHJlc3BvbnNlVHlwZSBvbiByZWFsbHkgb2xkIGJyb3dzZXJzXG5cdFx0aWYgKCdyZXNwb25zZVR5cGUnIGluIHhocilcblx0XHRcdHhoci5yZXNwb25zZVR5cGUgPSBzZWxmLl9tb2RlLnNwbGl0KCc6JylbMF1cblxuXHRcdGlmICgnd2l0aENyZWRlbnRpYWxzJyBpbiB4aHIpXG5cdFx0XHR4aHIud2l0aENyZWRlbnRpYWxzID0gISFvcHRzLndpdGhDcmVkZW50aWFsc1xuXG5cdFx0aWYgKHNlbGYuX21vZGUgPT09ICd0ZXh0JyAmJiAnb3ZlcnJpZGVNaW1lVHlwZScgaW4geGhyKVxuXHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWQnKVxuXG5cdFx0aWYgKCd0aW1lb3V0JyBpbiBvcHRzKSB7XG5cdFx0XHR4aHIudGltZW91dCA9IG9wdHMudGltZW91dFxuXHRcdFx0eGhyLm9udGltZW91dCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2VsZi5lbWl0KCd0aW1lb3V0Jylcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoZWFkZXJzTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChoZWFkZXIpIHtcblx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuXHRcdH0pXG5cblx0XHRzZWxmLl9yZXNwb25zZSA9IG51bGxcblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0c3dpdGNoICh4aHIucmVhZHlTdGF0ZSkge1xuXHRcdFx0XHRjYXNlIHJTdGF0ZXMuTE9BRElORzpcblx0XHRcdFx0Y2FzZSByU3RhdGVzLkRPTkU6XG5cdFx0XHRcdFx0c2VsZi5fb25YSFJQcm9ncmVzcygpXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gTmVjZXNzYXJ5IGZvciBzdHJlYW1pbmcgaW4gRmlyZWZveCwgc2luY2UgeGhyLnJlc3BvbnNlIGlzIE9OTFkgZGVmaW5lZFxuXHRcdC8vIGluIG9ucHJvZ3Jlc3MsIG5vdCBpbiBvbnJlYWR5c3RhdGVjaGFuZ2Ugd2l0aCB4aHIucmVhZHlTdGF0ZSA9IDNcblx0XHRpZiAoc2VsZi5fbW9kZSA9PT0gJ21vei1jaHVua2VkLWFycmF5YnVmZmVyJykge1xuXHRcdFx0eGhyLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGYuX29uWEhSUHJvZ3Jlc3MoKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKHNlbGYuX2Rlc3Ryb3llZClcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHRzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdYSFIgZXJyb3InKSlcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0eGhyLnNlbmQoYm9keSlcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRzZWxmLmVtaXQoJ2Vycm9yJywgZXJyKVxuXHRcdFx0fSlcblx0XHRcdHJldHVyblxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiB4aHIuc3RhdHVzIGlzIHJlYWRhYmxlIGFuZCBub24temVybywgaW5kaWNhdGluZyBubyBlcnJvci5cbiAqIEV2ZW4gdGhvdWdoIHRoZSBzcGVjIHNheXMgaXQgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiByZWFkeVN0YXRlIDMsXG4gKiBhY2Nlc3NpbmcgaXQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpbiBJRThcbiAqL1xuZnVuY3Rpb24gc3RhdHVzVmFsaWQgKHhocikge1xuXHR0cnkge1xuXHRcdHZhciBzdGF0dXMgPSB4aHIuc3RhdHVzXG5cdFx0cmV0dXJuIChzdGF0dXMgIT09IG51bGwgJiYgc3RhdHVzICE9PSAwKVxuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cbn1cblxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuX29uWEhSUHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBzZWxmID0gdGhpc1xuXG5cdGlmICghc3RhdHVzVmFsaWQoc2VsZi5feGhyKSB8fCBzZWxmLl9kZXN0cm95ZWQpXG5cdFx0cmV0dXJuXG5cblx0aWYgKCFzZWxmLl9yZXNwb25zZSlcblx0XHRzZWxmLl9jb25uZWN0KClcblxuXHRzZWxmLl9yZXNwb25zZS5fb25YSFJQcm9ncmVzcygpXG59XG5cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLl9jb25uZWN0ID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgc2VsZiA9IHRoaXNcblxuXHRpZiAoc2VsZi5fZGVzdHJveWVkKVxuXHRcdHJldHVyblxuXG5cdHNlbGYuX3Jlc3BvbnNlID0gbmV3IEluY29taW5nTWVzc2FnZShzZWxmLl94aHIsIHNlbGYuX2ZldGNoUmVzcG9uc2UsIHNlbGYuX21vZGUpXG5cdHNlbGYuX3Jlc3BvbnNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xuXHRcdHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpXG5cdH0pXG5cblx0c2VsZi5lbWl0KCdyZXNwb25zZScsIHNlbGYuX3Jlc3BvbnNlKVxufVxuXG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuXHR2YXIgc2VsZiA9IHRoaXNcblxuXHRzZWxmLl9ib2R5LnB1c2goY2h1bmspXG5cdGNiKClcbn1cblxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuYWJvcnQgPSBDbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuXHR2YXIgc2VsZiA9IHRoaXNcblx0c2VsZi5fZGVzdHJveWVkID0gdHJ1ZVxuXHRpZiAoc2VsZi5fcmVzcG9uc2UpXG5cdFx0c2VsZi5fcmVzcG9uc2UuX2Rlc3Ryb3llZCA9IHRydWVcblx0aWYgKHNlbGYuX3hocilcblx0XHRzZWxmLl94aHIuYWJvcnQoKVxuXHQvLyBDdXJyZW50bHksIHRoZXJlIGlzbid0IGEgd2F5IHRvIHRydWx5IGFib3J0IGEgZmV0Y2guXG5cdC8vIElmIHlvdSBsaWtlIGJpa2VzaGVkZGluZywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzI3XG59XG5cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2IpIHtcblx0dmFyIHNlbGYgPSB0aGlzXG5cdGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdGNiID0gZGF0YVxuXHRcdGRhdGEgPSB1bmRlZmluZWRcblx0fVxuXG5cdHN0cmVhbS5Xcml0YWJsZS5wcm90b3R5cGUuZW5kLmNhbGwoc2VsZiwgZGF0YSwgZW5jb2RpbmcsIGNiKVxufVxuXG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5mbHVzaEhlYWRlcnMgPSBmdW5jdGlvbiAoKSB7fVxuQ2xpZW50UmVxdWVzdC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uICgpIHt9XG5DbGllbnRSZXF1ZXN0LnByb3RvdHlwZS5zZXROb0RlbGF5ID0gZnVuY3Rpb24gKCkge31cbkNsaWVudFJlcXVlc3QucHJvdG90eXBlLnNldFNvY2tldEtlZXBBbGl2ZSA9IGZ1bmN0aW9uICgpIHt9XG5cbi8vIFRha2VuIGZyb20gaHR0cDovL3d3dy53My5vcmcvVFIvWE1MSHR0cFJlcXVlc3QvI3RoZS1zZXRyZXF1ZXN0aGVhZGVyJTI4JTI5LW1ldGhvZFxudmFyIHVuc2FmZUhlYWRlcnMgPSBbXG5cdCdhY2NlcHQtY2hhcnNldCcsXG5cdCdhY2NlcHQtZW5jb2RpbmcnLFxuXHQnYWNjZXNzLWNvbnRyb2wtcmVxdWVzdC1oZWFkZXJzJyxcblx0J2FjY2Vzcy1jb250cm9sLXJlcXVlc3QtbWV0aG9kJyxcblx0J2Nvbm5lY3Rpb24nLFxuXHQnY29udGVudC1sZW5ndGgnLFxuXHQnY29va2llJyxcblx0J2Nvb2tpZTInLFxuXHQnZGF0ZScsXG5cdCdkbnQnLFxuXHQnZXhwZWN0Jyxcblx0J2hvc3QnLFxuXHQna2VlcC1hbGl2ZScsXG5cdCdvcmlnaW4nLFxuXHQncmVmZXJlcicsXG5cdCd0ZScsXG5cdCd0cmFpbGVyJyxcblx0J3RyYW5zZmVyLWVuY29kaW5nJyxcblx0J3VwZ3JhZGUnLFxuXHQndXNlci1hZ2VudCcsXG5cdCd2aWEnXG5dXG4iLCJ2YXIgY2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vY2FwYWJpbGl0eScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG52YXIgc3RyZWFtID0gcmVxdWlyZSgncmVhZGFibGUtc3RyZWFtJylcblxudmFyIHJTdGF0ZXMgPSBleHBvcnRzLnJlYWR5U3RhdGVzID0ge1xuXHRVTlNFTlQ6IDAsXG5cdE9QRU5FRDogMSxcblx0SEVBREVSU19SRUNFSVZFRDogMixcblx0TE9BRElORzogMyxcblx0RE9ORTogNFxufVxuXG52YXIgSW5jb21pbmdNZXNzYWdlID0gZXhwb3J0cy5JbmNvbWluZ01lc3NhZ2UgPSBmdW5jdGlvbiAoeGhyLCByZXNwb25zZSwgbW9kZSkge1xuXHR2YXIgc2VsZiA9IHRoaXNcblx0c3RyZWFtLlJlYWRhYmxlLmNhbGwoc2VsZilcblxuXHRzZWxmLl9tb2RlID0gbW9kZVxuXHRzZWxmLmhlYWRlcnMgPSB7fVxuXHRzZWxmLnJhd0hlYWRlcnMgPSBbXVxuXHRzZWxmLnRyYWlsZXJzID0ge31cblx0c2VsZi5yYXdUcmFpbGVycyA9IFtdXG5cblx0Ly8gRmFrZSB0aGUgJ2Nsb3NlJyBldmVudCwgYnV0IG9ubHkgb25jZSAnZW5kJyBmaXJlc1xuXHRzZWxmLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG5cdFx0Ly8gVGhlIG5leHRUaWNrIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHRoZSAncmVxdWVzdCcgbW9kdWxlIGZyb20gY2F1c2luZyBhbiBpbmZpbml0ZSBsb29wXG5cdFx0cHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdFx0XHRzZWxmLmVtaXQoJ2Nsb3NlJylcblx0XHR9KVxuXHR9KVxuXG5cdGlmIChtb2RlID09PSAnZmV0Y2gnKSB7XG5cdFx0c2VsZi5fZmV0Y2hSZXNwb25zZSA9IHJlc3BvbnNlXG5cblx0XHRzZWxmLnVybCA9IHJlc3BvbnNlLnVybFxuXHRcdHNlbGYuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c1xuXHRcdHNlbGYuc3RhdHVzTWVzc2FnZSA9IHJlc3BvbnNlLnN0YXR1c1RleHRcblx0XHRcblx0XHRyZXNwb25zZS5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyLCBrZXkpe1xuXHRcdFx0c2VsZi5oZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXSA9IGhlYWRlclxuXHRcdFx0c2VsZi5yYXdIZWFkZXJzLnB1c2goa2V5LCBoZWFkZXIpXG5cdFx0fSlcblxuXG5cdFx0Ly8gVE9ETzogdGhpcyBkb2Vzbid0IHJlc3BlY3QgYmFja3ByZXNzdXJlLiBPbmNlIFdyaXRhYmxlU3RyZWFtIGlzIGF2YWlsYWJsZSwgdGhpcyBjYW4gYmUgZml4ZWRcblx0XHR2YXIgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKVxuXHRcdGZ1bmN0aW9uIHJlYWQgKCkge1xuXHRcdFx0cmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcblx0XHRcdFx0aWYgKHNlbGYuX2Rlc3Ryb3llZClcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0aWYgKHJlc3VsdC5kb25lKSB7XG5cdFx0XHRcdFx0c2VsZi5wdXNoKG51bGwpXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdH1cblx0XHRcdFx0c2VsZi5wdXNoKG5ldyBCdWZmZXIocmVzdWx0LnZhbHVlKSlcblx0XHRcdFx0cmVhZCgpXG5cdFx0XHR9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcblx0XHRcdFx0c2VsZi5lbWl0KCdlcnJvcicsIGVycilcblx0XHRcdH0pXG5cdFx0fVxuXHRcdHJlYWQoKVxuXG5cdH0gZWxzZSB7XG5cdFx0c2VsZi5feGhyID0geGhyXG5cdFx0c2VsZi5fcG9zID0gMFxuXG5cdFx0c2VsZi51cmwgPSB4aHIucmVzcG9uc2VVUkxcblx0XHRzZWxmLnN0YXR1c0NvZGUgPSB4aHIuc3RhdHVzXG5cdFx0c2VsZi5zdGF0dXNNZXNzYWdlID0geGhyLnN0YXR1c1RleHRcblx0XHR2YXIgaGVhZGVycyA9IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKS5zcGxpdCgvXFxyP1xcbi8pXG5cdFx0aGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoZWFkZXIpIHtcblx0XHRcdHZhciBtYXRjaGVzID0gaGVhZGVyLm1hdGNoKC9eKFteOl0rKTpcXHMqKC4qKS8pXG5cdFx0XHRpZiAobWF0Y2hlcykge1xuXHRcdFx0XHR2YXIga2V5ID0gbWF0Y2hlc1sxXS50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuXHRcdFx0XHRcdGlmIChzZWxmLmhlYWRlcnNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRzZWxmLmhlYWRlcnNba2V5XSA9IFtdXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNlbGYuaGVhZGVyc1trZXldLnB1c2gobWF0Y2hlc1syXSlcblx0XHRcdFx0fSBlbHNlIGlmIChzZWxmLmhlYWRlcnNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0c2VsZi5oZWFkZXJzW2tleV0gKz0gJywgJyArIG1hdGNoZXNbMl1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZWxmLmhlYWRlcnNba2V5XSA9IG1hdGNoZXNbMl1cblx0XHRcdFx0fVxuXHRcdFx0XHRzZWxmLnJhd0hlYWRlcnMucHVzaChtYXRjaGVzWzFdLCBtYXRjaGVzWzJdKVxuXHRcdFx0fVxuXHRcdH0pXG5cblx0XHRzZWxmLl9jaGFyc2V0ID0gJ3gtdXNlci1kZWZpbmVkJ1xuXHRcdGlmICghY2FwYWJpbGl0eS5vdmVycmlkZU1pbWVUeXBlKSB7XG5cdFx0XHR2YXIgbWltZVR5cGUgPSBzZWxmLnJhd0hlYWRlcnNbJ21pbWUtdHlwZSddXG5cdFx0XHRpZiAobWltZVR5cGUpIHtcblx0XHRcdFx0dmFyIGNoYXJzZXRNYXRjaCA9IG1pbWVUeXBlLm1hdGNoKC87XFxzKmNoYXJzZXQ9KFteO10pKDt8JCkvKVxuXHRcdFx0XHRpZiAoY2hhcnNldE1hdGNoKSB7XG5cdFx0XHRcdFx0c2VsZi5fY2hhcnNldCA9IGNoYXJzZXRNYXRjaFsxXS50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICghc2VsZi5fY2hhcnNldClcblx0XHRcdFx0c2VsZi5fY2hhcnNldCA9ICd1dGYtOCcgLy8gYmVzdCBndWVzc1xuXHRcdH1cblx0fVxufVxuXG5pbmhlcml0cyhJbmNvbWluZ01lc3NhZ2UsIHN0cmVhbS5SZWFkYWJsZSlcblxuSW5jb21pbmdNZXNzYWdlLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHt9XG5cbkluY29taW5nTWVzc2FnZS5wcm90b3R5cGUuX29uWEhSUHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBzZWxmID0gdGhpc1xuXG5cdHZhciB4aHIgPSBzZWxmLl94aHJcblxuXHR2YXIgcmVzcG9uc2UgPSBudWxsXG5cdHN3aXRjaCAoc2VsZi5fbW9kZSkge1xuXHRcdGNhc2UgJ3RleHQ6dmJhcnJheSc6IC8vIEZvciBJRTlcblx0XHRcdGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gclN0YXRlcy5ET05FKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gVGhpcyBmYWlscyBpbiBJRThcblx0XHRcdFx0cmVzcG9uc2UgPSBuZXcgZ2xvYmFsLlZCQXJyYXkoeGhyLnJlc3BvbnNlQm9keSkudG9BcnJheSgpXG5cdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0aWYgKHJlc3BvbnNlICE9PSBudWxsKSB7XG5cdFx0XHRcdHNlbGYucHVzaChuZXcgQnVmZmVyKHJlc3BvbnNlKSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHRcdC8vIEZhbGxzIHRocm91Z2ggaW4gSUU4XHRcblx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdHRyeSB7IC8vIFRoaXMgd2lsbCBmYWlsIHdoZW4gcmVhZHlTdGF0ZSA9IDMgaW4gSUU5LiBTd2l0Y2ggbW9kZSBhbmQgd2FpdCBmb3IgcmVhZHlTdGF0ZSA9IDRcblx0XHRcdFx0cmVzcG9uc2UgPSB4aHIucmVzcG9uc2VUZXh0XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHNlbGYuX21vZGUgPSAndGV4dDp2YmFycmF5J1xuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdFx0aWYgKHJlc3BvbnNlLmxlbmd0aCA+IHNlbGYuX3Bvcykge1xuXHRcdFx0XHR2YXIgbmV3RGF0YSA9IHJlc3BvbnNlLnN1YnN0cihzZWxmLl9wb3MpXG5cdFx0XHRcdGlmIChzZWxmLl9jaGFyc2V0ID09PSAneC11c2VyLWRlZmluZWQnKSB7XG5cdFx0XHRcdFx0dmFyIGJ1ZmZlciA9IG5ldyBCdWZmZXIobmV3RGF0YS5sZW5ndGgpXG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBuZXdEYXRhLmxlbmd0aDsgaSsrKVxuXHRcdFx0XHRcdFx0YnVmZmVyW2ldID0gbmV3RGF0YS5jaGFyQ29kZUF0KGkpICYgMHhmZlxuXG5cdFx0XHRcdFx0c2VsZi5wdXNoKGJ1ZmZlcilcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZWxmLnB1c2gobmV3RGF0YSwgc2VsZi5fY2hhcnNldClcblx0XHRcdFx0fVxuXHRcdFx0XHRzZWxmLl9wb3MgPSByZXNwb25zZS5sZW5ndGhcblx0XHRcdH1cblx0XHRcdGJyZWFrXG5cdFx0Y2FzZSAnYXJyYXlidWZmZXInOlxuXHRcdFx0aWYgKHhoci5yZWFkeVN0YXRlICE9PSByU3RhdGVzLkRPTkUgfHwgIXhoci5yZXNwb25zZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdHJlc3BvbnNlID0geGhyLnJlc3BvbnNlXG5cdFx0XHRzZWxmLnB1c2gobmV3IEJ1ZmZlcihuZXcgVWludDhBcnJheShyZXNwb25zZSkpKVxuXHRcdFx0YnJlYWtcblx0XHRjYXNlICdtb3otY2h1bmtlZC1hcnJheWJ1ZmZlcic6IC8vIHRha2Ugd2hvbGVcblx0XHRcdHJlc3BvbnNlID0geGhyLnJlc3BvbnNlXG5cdFx0XHRpZiAoeGhyLnJlYWR5U3RhdGUgIT09IHJTdGF0ZXMuTE9BRElORyB8fCAhcmVzcG9uc2UpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRzZWxmLnB1c2gobmV3IEJ1ZmZlcihuZXcgVWludDhBcnJheShyZXNwb25zZSkpKVxuXHRcdFx0YnJlYWtcblx0XHRjYXNlICdtcy1zdHJlYW0nOlxuXHRcdFx0cmVzcG9uc2UgPSB4aHIucmVzcG9uc2Vcblx0XHRcdGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gclN0YXRlcy5MT0FESU5HKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0dmFyIHJlYWRlciA9IG5ldyBnbG9iYWwuTVNTdHJlYW1SZWFkZXIoKVxuXHRcdFx0cmVhZGVyLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChyZWFkZXIucmVzdWx0LmJ5dGVMZW5ndGggPiBzZWxmLl9wb3MpIHtcblx0XHRcdFx0XHRzZWxmLnB1c2gobmV3IEJ1ZmZlcihuZXcgVWludDhBcnJheShyZWFkZXIucmVzdWx0LnNsaWNlKHNlbGYuX3BvcykpKSlcblx0XHRcdFx0XHRzZWxmLl9wb3MgPSByZWFkZXIucmVzdWx0LmJ5dGVMZW5ndGhcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0c2VsZi5wdXNoKG51bGwpXG5cdFx0XHR9XG5cdFx0XHQvLyByZWFkZXIub25lcnJvciA9ID8/PyAvLyBUT0RPOiB0aGlzXG5cdFx0XHRyZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIocmVzcG9uc2UpXG5cdFx0XHRicmVha1xuXHR9XG5cblx0Ly8gVGhlIG1zLXN0cmVhbSBjYXNlIGhhbmRsZXMgZW5kIHNlcGFyYXRlbHkgaW4gcmVhZGVyLm9ubG9hZCgpXG5cdGlmIChzZWxmLl94aHIucmVhZHlTdGF0ZSA9PT0gclN0YXRlcy5ET05FICYmIHNlbGYuX21vZGUgIT09ICdtcy1zdHJlYW0nKSB7XG5cdFx0c2VsZi5wdXNoKG51bGwpXG5cdH1cbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuXG52YXIgaXNCdWZmZXJFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nXG4gIHx8IGZ1bmN0aW9uKGVuY29kaW5nKSB7XG4gICAgICAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICBjYXNlICdoZXgnOiBjYXNlICd1dGY4JzogY2FzZSAndXRmLTgnOiBjYXNlICdhc2NpaSc6IGNhc2UgJ2JpbmFyeSc6IGNhc2UgJ2Jhc2U2NCc6IGNhc2UgJ3VjczInOiBjYXNlICd1Y3MtMic6IGNhc2UgJ3V0ZjE2bGUnOiBjYXNlICd1dGYtMTZsZSc6IGNhc2UgJ3Jhdyc6IHJldHVybiB0cnVlO1xuICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlO1xuICAgICAgIH1cbiAgICAgfVxuXG5cbmZ1bmN0aW9uIGFzc2VydEVuY29kaW5nKGVuY29kaW5nKSB7XG4gIGlmIChlbmNvZGluZyAmJiAhaXNCdWZmZXJFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZyk7XG4gIH1cbn1cblxuLy8gU3RyaW5nRGVjb2RlciBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGVmZmljaWVudGx5IHNwbGl0dGluZyBhIHNlcmllcyBvZlxuLy8gYnVmZmVycyBpbnRvIGEgc2VyaWVzIG9mIEpTIHN0cmluZ3Mgd2l0aG91dCBicmVha2luZyBhcGFydCBtdWx0aS1ieXRlXG4vLyBjaGFyYWN0ZXJzLiBDRVNVLTggaXMgaGFuZGxlZCBhcyBwYXJ0IG9mIHRoZSBVVEYtOCBlbmNvZGluZy5cbi8vXG4vLyBAVE9ETyBIYW5kbGluZyBhbGwgZW5jb2RpbmdzIGluc2lkZSBhIHNpbmdsZSBvYmplY3QgbWFrZXMgaXQgdmVyeSBkaWZmaWN1bHRcbi8vIHRvIHJlYXNvbiBhYm91dCB0aGlzIGNvZGUsIHNvIGl0IHNob3VsZCBiZSBzcGxpdCB1cCBpbiB0aGUgZnV0dXJlLlxuLy8gQFRPRE8gVGhlcmUgc2hvdWxkIGJlIGEgdXRmOC1zdHJpY3QgZW5jb2RpbmcgdGhhdCByZWplY3RzIGludmFsaWQgVVRGLTggY29kZVxuLy8gcG9pbnRzIGFzIHVzZWQgYnkgQ0VTVS04LlxudmFyIFN0cmluZ0RlY29kZXIgPSBleHBvcnRzLlN0cmluZ0RlY29kZXIgPSBmdW5jdGlvbihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9dLywgJycpO1xuICBhc3NlcnRFbmNvZGluZyhlbmNvZGluZyk7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgLy8gQ0VTVS04IHJlcHJlc2VudHMgZWFjaCBvZiBTdXJyb2dhdGUgUGFpciBieSAzLWJ5dGVzXG4gICAgICB0aGlzLnN1cnJvZ2F0ZVNpemUgPSAzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICAvLyBVVEYtMTYgcmVwcmVzZW50cyBlYWNoIG9mIFN1cnJvZ2F0ZSBQYWlyIGJ5IDItYnl0ZXNcbiAgICAgIHRoaXMuc3Vycm9nYXRlU2l6ZSA9IDI7XG4gICAgICB0aGlzLmRldGVjdEluY29tcGxldGVDaGFyID0gdXRmMTZEZXRlY3RJbmNvbXBsZXRlQ2hhcjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAvLyBCYXNlLTY0IHN0b3JlcyAzIGJ5dGVzIGluIDQgY2hhcnMsIGFuZCBwYWRzIHRoZSByZW1haW5kZXIuXG4gICAgICB0aGlzLnN1cnJvZ2F0ZVNpemUgPSAzO1xuICAgICAgdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhciA9IGJhc2U2NERldGVjdEluY29tcGxldGVDaGFyO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMud3JpdGUgPSBwYXNzVGhyb3VnaFdyaXRlO1xuICAgICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRW5vdWdoIHNwYWNlIHRvIHN0b3JlIGFsbCBieXRlcyBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIuIFVURi04IG5lZWRzIDRcbiAgLy8gYnl0ZXMsIGJ1dCBDRVNVLTggbWF5IHJlcXVpcmUgdXAgdG8gNiAoMyBieXRlcyBwZXIgc3Vycm9nYXRlKS5cbiAgdGhpcy5jaGFyQnVmZmVyID0gbmV3IEJ1ZmZlcig2KTtcbiAgLy8gTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGZvciB0aGUgY3VycmVudCBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgY2hhcmFjdGVyLlxuICB0aGlzLmNoYXJSZWNlaXZlZCA9IDA7XG4gIC8vIE51bWJlciBvZiBieXRlcyBleHBlY3RlZCBmb3IgdGhlIGN1cnJlbnQgaW5jb21wbGV0ZSBtdWx0aS1ieXRlIGNoYXJhY3Rlci5cbiAgdGhpcy5jaGFyTGVuZ3RoID0gMDtcbn07XG5cblxuLy8gd3JpdGUgZGVjb2RlcyB0aGUgZ2l2ZW4gYnVmZmVyIGFuZCByZXR1cm5zIGl0IGFzIEpTIHN0cmluZyB0aGF0IGlzXG4vLyBndWFyYW50ZWVkIHRvIG5vdCBjb250YWluIGFueSBwYXJ0aWFsIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gQW55IHBhcnRpYWxcbi8vIGNoYXJhY3RlciBmb3VuZCBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaXMgYnVmZmVyZWQgdXAsIGFuZCB3aWxsIGJlXG4vLyByZXR1cm5lZCB3aGVuIGNhbGxpbmcgd3JpdGUgYWdhaW4gd2l0aCB0aGUgcmVtYWluaW5nIGJ5dGVzLlxuLy9cbi8vIE5vdGU6IENvbnZlcnRpbmcgYSBCdWZmZXIgY29udGFpbmluZyBhbiBvcnBoYW4gc3Vycm9nYXRlIHRvIGEgU3RyaW5nXG4vLyBjdXJyZW50bHkgd29ya3MsIGJ1dCBjb252ZXJ0aW5nIGEgU3RyaW5nIHRvIGEgQnVmZmVyICh2aWEgYG5ldyBCdWZmZXJgLCBvclxuLy8gQnVmZmVyI3dyaXRlKSB3aWxsIHJlcGxhY2UgaW5jb21wbGV0ZSBzdXJyb2dhdGVzIHdpdGggdGhlIHVuaWNvZGVcbi8vIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4gU2VlIGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvMTIxMTczMDA5LyAuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICB2YXIgY2hhclN0ciA9ICcnO1xuICAvLyBpZiBvdXIgbGFzdCB3cml0ZSBlbmRlZCB3aXRoIGFuIGluY29tcGxldGUgbXVsdGlieXRlIGNoYXJhY3RlclxuICB3aGlsZSAodGhpcy5jaGFyTGVuZ3RoKSB7XG4gICAgLy8gZGV0ZXJtaW5lIGhvdyBtYW55IHJlbWFpbmluZyBieXRlcyB0aGlzIGJ1ZmZlciBoYXMgdG8gb2ZmZXIgZm9yIHRoaXMgY2hhclxuICAgIHZhciBhdmFpbGFibGUgPSAoYnVmZmVyLmxlbmd0aCA+PSB0aGlzLmNoYXJMZW5ndGggLSB0aGlzLmNoYXJSZWNlaXZlZCkgP1xuICAgICAgICB0aGlzLmNoYXJMZW5ndGggLSB0aGlzLmNoYXJSZWNlaXZlZCA6XG4gICAgICAgIGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAvLyBhZGQgdGhlIG5ldyBieXRlcyB0byB0aGUgY2hhciBidWZmZXJcbiAgICBidWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsIHRoaXMuY2hhclJlY2VpdmVkLCAwLCBhdmFpbGFibGUpO1xuICAgIHRoaXMuY2hhclJlY2VpdmVkICs9IGF2YWlsYWJsZTtcblxuICAgIGlmICh0aGlzLmNoYXJSZWNlaXZlZCA8IHRoaXMuY2hhckxlbmd0aCkge1xuICAgICAgLy8gc3RpbGwgbm90IGVub3VnaCBjaGFycyBpbiB0aGlzIGJ1ZmZlcj8gd2FpdCBmb3IgbW9yZSAuLi5cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgYnl0ZXMgYmVsb25naW5nIHRvIHRoZSBjdXJyZW50IGNoYXJhY3RlciBmcm9tIHRoZSBidWZmZXJcbiAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UoYXZhaWxhYmxlLCBidWZmZXIubGVuZ3RoKTtcblxuICAgIC8vIGdldCB0aGUgY2hhcmFjdGVyIHRoYXQgd2FzIHNwbGl0XG4gICAgY2hhclN0ciA9IHRoaXMuY2hhckJ1ZmZlci5zbGljZSgwLCB0aGlzLmNoYXJMZW5ndGgpLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xuXG4gICAgLy8gQ0VTVS04OiBsZWFkIHN1cnJvZ2F0ZSAoRDgwMC1EQkZGKSBpcyBhbHNvIHRoZSBpbmNvbXBsZXRlIGNoYXJhY3RlclxuICAgIHZhciBjaGFyQ29kZSA9IGNoYXJTdHIuY2hhckNvZGVBdChjaGFyU3RyLmxlbmd0aCAtIDEpO1xuICAgIGlmIChjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggKz0gdGhpcy5zdXJyb2dhdGVTaXplO1xuICAgICAgY2hhclN0ciA9ICcnO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHRoaXMuY2hhclJlY2VpdmVkID0gdGhpcy5jaGFyTGVuZ3RoID0gMDtcblxuICAgIC8vIGlmIHRoZXJlIGFyZSBubyBtb3JlIGJ5dGVzIGluIHRoaXMgYnVmZmVyLCBqdXN0IGVtaXQgb3VyIGNoYXJcbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNoYXJTdHI7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIGFuZCBzZXQgY2hhckxlbmd0aCAvIGNoYXJSZWNlaXZlZFxuICB0aGlzLmRldGVjdEluY29tcGxldGVDaGFyKGJ1ZmZlcik7XG5cbiAgdmFyIGVuZCA9IGJ1ZmZlci5sZW5ndGg7XG4gIGlmICh0aGlzLmNoYXJMZW5ndGgpIHtcbiAgICAvLyBidWZmZXIgdGhlIGluY29tcGxldGUgY2hhcmFjdGVyIGJ5dGVzIHdlIGdvdFxuICAgIGJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCAtIHRoaXMuY2hhclJlY2VpdmVkLCBlbmQpO1xuICAgIGVuZCAtPSB0aGlzLmNoYXJSZWNlaXZlZDtcbiAgfVxuXG4gIGNoYXJTdHIgKz0gYnVmZmVyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIGVuZCk7XG5cbiAgdmFyIGVuZCA9IGNoYXJTdHIubGVuZ3RoIC0gMTtcbiAgdmFyIGNoYXJDb2RlID0gY2hhclN0ci5jaGFyQ29kZUF0KGVuZCk7XG4gIC8vIENFU1UtODogbGVhZCBzdXJyb2dhdGUgKEQ4MDAtREJGRikgaXMgYWxzbyB0aGUgaW5jb21wbGV0ZSBjaGFyYWN0ZXJcbiAgaWYgKGNoYXJDb2RlID49IDB4RDgwMCAmJiBjaGFyQ29kZSA8PSAweERCRkYpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc3Vycm9nYXRlU2l6ZTtcbiAgICB0aGlzLmNoYXJMZW5ndGggKz0gc2l6ZTtcbiAgICB0aGlzLmNoYXJSZWNlaXZlZCArPSBzaXplO1xuICAgIHRoaXMuY2hhckJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgc2l6ZSwgMCwgc2l6ZSk7XG4gICAgYnVmZmVyLmNvcHkodGhpcy5jaGFyQnVmZmVyLCAwLCAwLCBzaXplKTtcbiAgICByZXR1cm4gY2hhclN0ci5zdWJzdHJpbmcoMCwgZW5kKTtcbiAgfVxuXG4gIC8vIG9yIGp1c3QgZW1pdCB0aGUgY2hhclN0clxuICByZXR1cm4gY2hhclN0cjtcbn07XG5cbi8vIGRldGVjdEluY29tcGxldGVDaGFyIGRldGVybWluZXMgaWYgdGhlcmUgaXMgYW4gaW5jb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXIgYXRcbi8vIHRoZSBlbmQgb2YgdGhlIGdpdmVuIGJ1ZmZlci4gSWYgc28sIGl0IHNldHMgdGhpcy5jaGFyTGVuZ3RoIHRvIHRoZSBieXRlXG4vLyBsZW5ndGggdGhhdCBjaGFyYWN0ZXIsIGFuZCBzZXRzIHRoaXMuY2hhclJlY2VpdmVkIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXNcbi8vIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBjaGFyYWN0ZXIuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5kZXRlY3RJbmNvbXBsZXRlQ2hhciA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICAvLyBkZXRlcm1pbmUgaG93IG1hbnkgYnl0ZXMgd2UgaGF2ZSB0byBjaGVjayBhdCB0aGUgZW5kIG9mIHRoaXMgYnVmZmVyXG4gIHZhciBpID0gKGJ1ZmZlci5sZW5ndGggPj0gMykgPyAzIDogYnVmZmVyLmxlbmd0aDtcblxuICAvLyBGaWd1cmUgb3V0IGlmIG9uZSBvZiB0aGUgbGFzdCBpIGJ5dGVzIG9mIG91ciBidWZmZXIgYW5ub3VuY2VzIGFuXG4gIC8vIGluY29tcGxldGUgY2hhci5cbiAgZm9yICg7IGkgPiAwOyBpLS0pIHtcbiAgICB2YXIgYyA9IGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gaV07XG5cbiAgICAvLyBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCNEZXNjcmlwdGlvblxuXG4gICAgLy8gMTEwWFhYWFhcbiAgICBpZiAoaSA9PSAxICYmIGMgPj4gNSA9PSAweDA2KSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gMTExMFhYWFhcbiAgICBpZiAoaSA8PSAyICYmIGMgPj4gNCA9PSAweDBFKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSAzO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gMTExMTBYWFhcbiAgICBpZiAoaSA8PSAzICYmIGMgPj4gMyA9PSAweDFFKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSA0O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHRoaXMuY2hhclJlY2VpdmVkID0gaTtcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICB2YXIgcmVzID0gJyc7XG4gIGlmIChidWZmZXIgJiYgYnVmZmVyLmxlbmd0aClcbiAgICByZXMgPSB0aGlzLndyaXRlKGJ1ZmZlcik7XG5cbiAgaWYgKHRoaXMuY2hhclJlY2VpdmVkKSB7XG4gICAgdmFyIGNyID0gdGhpcy5jaGFyUmVjZWl2ZWQ7XG4gICAgdmFyIGJ1ZiA9IHRoaXMuY2hhckJ1ZmZlcjtcbiAgICB2YXIgZW5jID0gdGhpcy5lbmNvZGluZztcbiAgICByZXMgKz0gYnVmLnNsaWNlKDAsIGNyKS50b1N0cmluZyhlbmMpO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbmZ1bmN0aW9uIHBhc3NUaHJvdWdoV3JpdGUoYnVmZmVyKSB7XG4gIHJldHVybiBidWZmZXIudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHV0ZjE2RGV0ZWN0SW5jb21wbGV0ZUNoYXIoYnVmZmVyKSB7XG4gIHRoaXMuY2hhclJlY2VpdmVkID0gYnVmZmVyLmxlbmd0aCAlIDI7XG4gIHRoaXMuY2hhckxlbmd0aCA9IHRoaXMuY2hhclJlY2VpdmVkID8gMiA6IDA7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NERldGVjdEluY29tcGxldGVDaGFyKGJ1ZmZlcikge1xuICB0aGlzLmNoYXJSZWNlaXZlZCA9IGJ1ZmZlci5sZW5ndGggJSAzO1xuICB0aGlzLmNoYXJMZW5ndGggPSB0aGlzLmNoYXJSZWNlaXZlZCA/IDMgOiAwO1xufVxuIiwidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJylcbnZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxudmFyIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpLlN0cmluZ0RlY29kZXJcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmdTdHJlYW1cbm1vZHVsZS5leHBvcnRzLkFsaWduZWRTdHJpbmdEZWNvZGVyID0gQWxpZ25lZFN0cmluZ0RlY29kZXJcblxuZnVuY3Rpb24gU3RyaW5nU3RyZWFtKGZyb20sIHRvKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdHJpbmdTdHJlYW0pKSByZXR1cm4gbmV3IFN0cmluZ1N0cmVhbShmcm9tLCB0bylcblxuICBTdHJlYW0uY2FsbCh0aGlzKVxuXG4gIGlmIChmcm9tID09IG51bGwpIGZyb20gPSAndXRmOCdcblxuICB0aGlzLnJlYWRhYmxlID0gdGhpcy53cml0YWJsZSA9IHRydWVcbiAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICB0aGlzLnRvRW5jb2RpbmcgPSAodG8gPT0gbnVsbCA/IGZyb20gOiB0bylcbiAgdGhpcy5mcm9tRW5jb2RpbmcgPSAodG8gPT0gbnVsbCA/ICcnIDogZnJvbSlcbiAgdGhpcy5kZWNvZGVyID0gbmV3IEFsaWduZWRTdHJpbmdEZWNvZGVyKHRoaXMudG9FbmNvZGluZylcbn1cbnV0aWwuaW5oZXJpdHMoU3RyaW5nU3RyZWFtLCBTdHJlYW0pXG5cblN0cmluZ1N0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gIGlmICghdGhpcy53cml0YWJsZSkge1xuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ3N0cmVhbSBub3Qgd3JpdGFibGUnKVxuICAgIGVyci5jb2RlID0gJ0VQSVBFJ1xuICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKHRoaXMuZnJvbUVuY29kaW5nKSB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkgZGF0YSA9IGRhdGEudG9TdHJpbmcoKVxuICAgIGRhdGEgPSBuZXcgQnVmZmVyKGRhdGEsIHRoaXMuZnJvbUVuY29kaW5nKVxuICB9XG4gIHZhciBzdHJpbmcgPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YSlcbiAgaWYgKHN0cmluZy5sZW5ndGgpIHRoaXMuZW1pdCgnZGF0YScsIHN0cmluZylcbiAgcmV0dXJuICF0aGlzLnBhdXNlZFxufVxuXG5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmRlY29kZXIuZmx1c2gpIHtcbiAgICB2YXIgc3RyaW5nID0gdGhpcy5kZWNvZGVyLmZsdXNoKClcbiAgICBpZiAoc3RyaW5nLmxlbmd0aCkgdGhpcy5lbWl0KCdkYXRhJywgc3RyaW5nKVxuICB9XG59XG5cblN0cmluZ1N0cmVhbS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy53cml0YWJsZSAmJiAhdGhpcy5yZWFkYWJsZSkgcmV0dXJuXG4gIHRoaXMuZmx1c2goKVxuICB0aGlzLmVtaXQoJ2VuZCcpXG4gIHRoaXMud3JpdGFibGUgPSB0aGlzLnJlYWRhYmxlID0gZmFsc2VcbiAgdGhpcy5kZXN0cm95KClcbn1cblxuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZGVjb2RlciA9IG51bGxcbiAgdGhpcy53cml0YWJsZSA9IHRoaXMucmVhZGFibGUgPSBmYWxzZVxuICB0aGlzLmVtaXQoJ2Nsb3NlJylcbn1cblxuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnBhdXNlZCA9IHRydWVcbn1cblxuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnBhdXNlZCkgdGhpcy5lbWl0KCdkcmFpbicpXG4gIHRoaXMucGF1c2VkID0gZmFsc2Vcbn1cblxuZnVuY3Rpb24gQWxpZ25lZFN0cmluZ0RlY29kZXIoZW5jb2RpbmcpIHtcbiAgU3RyaW5nRGVjb2Rlci5jYWxsKHRoaXMsIGVuY29kaW5nKVxuXG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICB0aGlzLndyaXRlID0gYWxpZ25lZFdyaXRlXG4gICAgICB0aGlzLmFsaWduZWRCdWZmZXIgPSBuZXcgQnVmZmVyKDMpXG4gICAgICB0aGlzLmFsaWduZWRCeXRlcyA9IDBcbiAgICAgIGJyZWFrXG4gIH1cbn1cbnV0aWwuaW5oZXJpdHMoQWxpZ25lZFN0cmluZ0RlY29kZXIsIFN0cmluZ0RlY29kZXIpXG5cbkFsaWduZWRTdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuYWxpZ25lZEJ1ZmZlciB8fCAhdGhpcy5hbGlnbmVkQnl0ZXMpIHJldHVybiAnJ1xuICB2YXIgbGVmdG92ZXIgPSB0aGlzLmFsaWduZWRCdWZmZXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5hbGlnbmVkQnl0ZXMpXG4gIHRoaXMuYWxpZ25lZEJ5dGVzID0gMFxuICByZXR1cm4gbGVmdG92ZXJcbn1cblxuZnVuY3Rpb24gYWxpZ25lZFdyaXRlKGJ1ZmZlcikge1xuICB2YXIgcmVtID0gKHRoaXMuYWxpZ25lZEJ5dGVzICsgYnVmZmVyLmxlbmd0aCkgJSB0aGlzLmFsaWduZWRCdWZmZXIubGVuZ3RoXG4gIGlmICghcmVtICYmICF0aGlzLmFsaWduZWRCeXRlcykgcmV0dXJuIGJ1ZmZlci50b1N0cmluZyh0aGlzLmVuY29kaW5nKVxuXG4gIHZhciByZXR1cm5CdWZmZXIgPSBuZXcgQnVmZmVyKHRoaXMuYWxpZ25lZEJ5dGVzICsgYnVmZmVyLmxlbmd0aCAtIHJlbSlcblxuICB0aGlzLmFsaWduZWRCdWZmZXIuY29weShyZXR1cm5CdWZmZXIsIDAsIDAsIHRoaXMuYWxpZ25lZEJ5dGVzKVxuICBidWZmZXIuY29weShyZXR1cm5CdWZmZXIsIHRoaXMuYWxpZ25lZEJ5dGVzLCAwLCBidWZmZXIubGVuZ3RoIC0gcmVtKVxuXG4gIGJ1ZmZlci5jb3B5KHRoaXMuYWxpZ25lZEJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCAtIHJlbSwgYnVmZmVyLmxlbmd0aClcbiAgdGhpcy5hbGlnbmVkQnl0ZXMgPSByZW1cblxuICByZXR1cm4gcmV0dXJuQnVmZmVyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQG1vZHVsZSBzeW1ib2wtdHJlZVxuICogQGF1dGhvciBKb3JpcyB2YW4gZGVyIFdlbCA8am9yaXNAam9yaXN2YW5kZXJ3ZWwuY29tPlxuICovXG5cbmNvbnN0IFN5bWJvbFRyZWVOb2RlID0gcmVxdWlyZSgnLi9TeW1ib2xUcmVlTm9kZScpO1xuY29uc3QgVHJlZVBvc2l0aW9uID0gcmVxdWlyZSgnLi9UcmVlUG9zaXRpb24nKTtcbmNvbnN0IFRyZWVJdGVyYXRvciA9IHJlcXVpcmUoJy4vVHJlZUl0ZXJhdG9yJyk7XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXZlcnNlQXJyYXlJbmRleChhcnJheSwgcmV2ZXJzZUluZGV4KSB7XG4gICAgICAgIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxIC0gcmV2ZXJzZUluZGV4XTsgLy8gbm8gbmVlZCB0byBjaGVjayBgaW5kZXggPj0gMGBcbn1cblxuY2xhc3MgU3ltYm9sVHJlZSB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAgICAgKiBAYWxpYXMgbW9kdWxlOnN5bWJvbC10cmVlXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb249J1N5bWJvbFRyZWUgZGF0YSddIERlc2NyaXB0aW9uIHVzZWQgZm9yIHRoZSBTeW1ib2xcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0cnVjdG9yKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zeW1ib2wgPSBTeW1ib2woZGVzY3JpcHRpb24gfHwgJ1N5bWJvbFRyZWUgZGF0YScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gKG9wdGlvbmFsbHkpIGluaXRpYWxpemUgYW4gb2JqZWN0IHJpZ2h0IGFmdGVyIGl0cyBjcmVhdGlvbixcbiAgICAgICAgICogdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgVjgncyBmYXN0IHByb3BlcnRpZXMuIEFsc28gdXNlZnVsIGlmIHlvdSB3b3VsZCBsaWtlIHRvXG4gICAgICAgICAqIGZyZWV6ZSB5b3VyIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogYE8oMSlgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQGFsaWFzIG1vZHVsZTpzeW1ib2wtdHJlZSNpbml0aWFsaXplXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBvYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIGluaXRpYWxpemUob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm9kZShvYmplY3QpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIF9ub2RlKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gb2JqZWN0W3RoaXMuc3ltYm9sXTtcblxuICAgICAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKG9iamVjdFt0aGlzLnN5bWJvbF0gPSBuZXcgU3ltYm9sVHJlZU5vZGUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBoYXMgYW55IGNoaWxkcmVuLiBPdGhlcndpc2UgaXQgcmV0dXJucyBgZmFsc2VgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGhhc0NoaWxkcmVuXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGhhc0NoaWxkcmVuKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub2RlKG9iamVjdCkuaGFzQ2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGdpdmVuIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBmaXJzdENoaWxkXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgZmlyc3RDaGlsZChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0aGUgbGFzdCBjaGlsZCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGxhc3RDaGlsZFxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIGxhc3RDaGlsZChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLmxhc3RDaGlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIHRoZSBnaXZlbiBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgcHJldmlvdXNTaWJsaW5nXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgcHJldmlvdXNTaWJsaW5nKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub2RlKG9iamVjdCkucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgdGhlIG5leHQgc2libGluZyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIG5leHRTaWJsaW5nXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgbmV4dFNpYmxpbmcob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5uZXh0U2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm4gdGhlIHBhcmVudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHBhcmVudFxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIHBhcmVudChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLnBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaW5kIHRoZSBpbmNsdXNpdmUgZGVzY2VuZGFudCB0aGF0IGlzIGxhc3QgaW4gdHJlZSBvcmRlciBvZiB0aGUgZ2l2ZW4gb2JqZWN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCAod29yc3QgY2FzZSkgd2hlcmUgYG5gIGlzIHRoZSBkZXB0aCBvZiB0aGUgc3VidHJlZSBvZiBgb2JqZWN0YFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGxhc3RJbmNsdXNpdmVEZXNjZW5kYW50XG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgbGFzdEluY2x1c2l2ZURlc2NlbmRhbnQob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RDaGlsZDtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IG9iamVjdDtcblxuICAgICAgICAgICAgICAgIHdoaWxlICgobGFzdENoaWxkID0gdGhpcy5fbm9kZShjdXJyZW50KS5sYXN0Q2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbGFzdENoaWxkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpbmQgdGhlIHByZWNlZGluZyBvYmplY3QgKEEpIG9mIHRoZSBnaXZlbiBvYmplY3QgKEIpLlxuICAgICAgICAgKiBBbiBvYmplY3QgQSBpcyBwcmVjZWRpbmcgYW4gb2JqZWN0IEIgaWYgQSBhbmQgQiBhcmUgaW4gdGhlIHNhbWUgdHJlZVxuICAgICAgICAgKiBhbmQgQSBjb21lcyBiZWZvcmUgQiBpbiB0cmVlIG9yZGVyLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKG4pYCAod29yc3QgY2FzZSlcbiAgICAgICAgICogKiBgTygxKWAgKGFtb3J0aXplZCB3aGVuIHdhbGtpbmcgdGhlIGVudGlyZSB0cmVlKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIHByZWNlZGluZ1xuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJvb3RdIElmIHNldCwgYHJvb3RgIG11c3QgYmUgYW4gaW5jbHVzaXZlIGFuY2VzdG9yXG4gICAgICAgICAqICAgICAgICBvZiB0aGUgcmV0dXJuIHZhbHVlIChvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQpLiBUaGlzIGNoZWNrIF9hc3N1bWVzX1xuICAgICAgICAgKiAgICAgICAgdGhhdCBgcm9vdGAgaXMgYWxzbyBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGBvYmplY3RgXG4gICAgICAgICAqIEByZXR1cm4gez9PYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICBwcmVjZWRpbmcob2JqZWN0LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJlZVJvb3QgPSBvcHRpb25zICYmIG9wdGlvbnMucm9vdDtcblxuICAgICAgICAgICAgICAgIGlmIChvYmplY3QgPT09IHRyZWVSb290KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1NpYmxpbmcgPSB0aGlzLl9ub2RlKG9iamVjdCkucHJldmlvdXNTaWJsaW5nO1xuXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU2libGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQocHJldmlvdXNTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBwcmV2aW91cyBzaWJsaW5nIHJldHVybiB0aGUgcGFyZW50IChtaWdodCBiZSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub2RlKG9iamVjdCkucGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpbmQgdGhlIGZvbGxvd2luZyBvYmplY3QgKEEpIG9mIHRoZSBnaXZlbiBvYmplY3QgKEIpLlxuICAgICAgICAgKiBBbiBvYmplY3QgQSBpcyBmb2xsb3dpbmcgYW4gb2JqZWN0IEIgaWYgQSBhbmQgQiBhcmUgaW4gdGhlIHNhbWUgdHJlZVxuICAgICAgICAgKiBhbmQgQSBjb21lcyBhZnRlciBCIGluIHRyZWUgb3JkZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlKSB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBvYmplY3RzIGluIHRoZSBlbnRpcmUgdHJlZVxuICAgICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkIHdoZW4gd2Fsa2luZyB0aGUgZW50aXJlIHRyZWUpXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgZm9sbG93aW5nXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJvb3RdIElmIHNldCwgYHJvb3RgIG11c3QgYmUgYW4gaW5jbHVzaXZlIGFuY2VzdG9yXG4gICAgICAgICAqICAgICAgICBvZiB0aGUgcmV0dXJuIHZhbHVlIChvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQpLiBUaGlzIGNoZWNrIF9hc3N1bWVzX1xuICAgICAgICAgKiAgICAgICAgdGhhdCBgcm9vdGAgaXMgYWxzbyBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGBvYmplY3RgXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2tpcENoaWxkcmVuPWZhbHNlXSBJZiBzZXQsIGlnbm9yZSB0aGUgY2hpbGRyZW4gb2YgYG9iamVjdGBcbiAgICAgICAgICogQHJldHVybiB7P09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIGZvbGxvd2luZyhvYmplY3QsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmVlUm9vdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yb290O1xuICAgICAgICAgICAgICAgIGNvbnN0IHNraXBDaGlsZHJlbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5za2lwQ2hpbGRyZW47XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gIXNraXBDaGlsZHJlbiAmJiB0aGlzLl9ub2RlKG9iamVjdCkuZmlyc3RDaGlsZDtcblxuICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IG9iamVjdDtcblxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSB0cmVlUm9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSB0aGlzLl9ub2RlKGN1cnJlbnQpLm5leHRTaWJsaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGhpcy5fbm9kZShjdXJyZW50KS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBcHBlbmQgYWxsIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gYW4gYXJyYXkuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBgcGFyZW50YFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGNoaWxkcmVuVG9BcnJheVxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuYXJyYXk9W11dXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gRnVuY3Rpb24gdG8gdGVzdCBlYWNoIG9iamVjdCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFycmF5LlxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VkIHdpdGggYXJndW1lbnRzIChvYmplY3QpLiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhbiBvYmplY3RcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgaW5jbHVkZWQuXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnMudGhpc0FyZ10gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgZmlsdGVyYC5cbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0W119XG4gICAgICAgICAqL1xuICAgICAgICBjaGlsZHJlblRvQXJyYXkocGFyZW50LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXkgICA9IChvcHRpb25zICYmIG9wdGlvbnMuYXJyYXkpIHx8IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlciAgPSAob3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcikgfHwgcmV0dXJuVHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGlzQXJnID0gKG9wdGlvbnMgJiYgb3B0aW9ucy50aGlzQXJnKSB8fCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShwYXJlbnQpO1xuICAgICAgICAgICAgICAgIGxldCBvYmplY3QgPSBwYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgIHdoaWxlIChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9ub2RlKG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldENhY2hlZEluZGV4KHBhcmVudE5vZGUsIGluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci5jYWxsKHRoaXNBcmcsIG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaChvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQXBwZW5kIGFsbCBpbmNsdXNpdmUgYW5jZXN0b3JzIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gYW4gYXJyYXkuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIGFuY2VzdG9ycyBvZiB0aGUgZ2l2ZW4gYG9iamVjdGBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBhbmNlc3RvcnNUb0FycmF5XG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdFtdfSBbb3B0aW9ucy5hcnJheT1bXV1cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSBGdW5jdGlvbiB0byB0ZXN0IGVhY2ggb2JqZWN0IGJlZm9yZSBpdCBpcyBhZGRlZCB0byB0aGUgYXJyYXkuXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZWQgd2l0aCBhcmd1bWVudHMgKG9iamVjdCkuIFNob3VsZCByZXR1cm4gYHRydWVgIGlmIGFuIG9iamVjdFxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0byBiZSBpbmNsdWRlZC5cbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9ucy50aGlzQXJnXSBWYWx1ZSB0byB1c2UgYXMgYHRoaXNgIHdoZW4gZXhlY3V0aW5nIGBmaWx0ZXJgLlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3RbXX1cbiAgICAgICAgICovXG4gICAgICAgIGFuY2VzdG9yc1RvQXJyYXkob2JqZWN0LCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXkgICA9IChvcHRpb25zICYmIG9wdGlvbnMuYXJyYXkpIHx8IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlciAgPSAob3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcikgfHwgcmV0dXJuVHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aGlzQXJnID0gKG9wdGlvbnMgJiYgb3B0aW9ucy50aGlzQXJnKSB8fCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICBsZXQgYW5jZXN0b3IgPSBvYmplY3Q7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuY2FsbCh0aGlzQXJnLCBhbmNlc3RvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaChhbmNlc3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IHRoaXMuX25vZGUoYW5jZXN0b3IpLnBhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQXBwZW5kIGFsbCBkZXNjZW5kYW50cyBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIGFuIGFycmF5IChpbiB0cmVlIG9yZGVyKS5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTyhuKWAgd2hlcmUgYG5gIGlzIHRoZSBhbW91bnQgb2Ygb2JqZWN0cyBpbiB0aGUgc3ViLXRyZWUgb2YgdGhlIGdpdmVuIGBvYmplY3RgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgdHJlZVRvQXJyYXlcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJvb3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdFtdfSBbb3B0aW9ucy5hcnJheT1bXV1cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSBGdW5jdGlvbiB0byB0ZXN0IGVhY2ggb2JqZWN0IGJlZm9yZSBpdCBpcyBhZGRlZCB0byB0aGUgYXJyYXkuXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZWQgd2l0aCBhcmd1bWVudHMgKG9iamVjdCkuIFNob3VsZCByZXR1cm4gYHRydWVgIGlmIGFuIG9iamVjdFxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0byBiZSBpbmNsdWRlZC5cbiAgICAgICAgICogQHBhcmFtIHsqfSBbb3B0aW9ucy50aGlzQXJnXSBWYWx1ZSB0byB1c2UgYXMgYHRoaXNgIHdoZW4gZXhlY3V0aW5nIGBmaWx0ZXJgLlxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3RbXX1cbiAgICAgICAgICovXG4gICAgICAgIHRyZWVUb0FycmF5KHJvb3QsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheSAgID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5hcnJheSkgfHwgW107XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyICA9IChvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyKSB8fCByZXR1cm5UcnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNBcmcgPSAob3B0aW9ucyAmJiBvcHRpb25zLnRoaXNBcmcpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgIGxldCBvYmplY3QgPSByb290O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci5jYWxsKHRoaXNBcmcsIG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaChvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gdGhpcy5mb2xsb3dpbmcob2JqZWN0LCB7cm9vdDogcm9vdH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBvYmplY3RcbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWAgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvblxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGNoaWxkcmVuSXRlcmF0b3JcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmVudFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmV2ZXJzZT1mYWxzZV1cbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KVxuICAgICAgICAgKi9cbiAgICAgICAgY2hpbGRyZW5JdGVyYXRvcihwYXJlbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlID0gb3B0aW9ucyAmJiBvcHRpb25zLnJldmVyc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocGFyZW50KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2UgPyBwYXJlbnROb2RlLmxhc3RDaGlsZCA6IHBhcmVudE5vZGUuZmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2UgPyBUcmVlSXRlcmF0b3IuUFJFViA6IFRyZWVJdGVyYXRvci5ORVhUXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSBwcmV2aW91cyBzaWJsaW5ncyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiAoaW4gcmV2ZXJzZSB0cmVlIG9yZGVyKVxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYCBmb3IgYSBzaW5nbGUgaXRlcmF0aW9uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgcHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KVxuICAgICAgICAgKi9cbiAgICAgICAgcHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBUcmVlSXRlcmF0b3IuUFJFVlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgbmV4dCBzaWJsaW5ncyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiAoaW4gdHJlZSBvcmRlcilcbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWAgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvblxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIG5leHRTaWJsaW5nc0l0ZXJhdG9yXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KVxuICAgICAgICAgKi9cbiAgICAgICAgbmV4dFNpYmxpbmdzSXRlcmF0b3Iob2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm9kZShvYmplY3QpLm5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgVHJlZUl0ZXJhdG9yLk5FWFRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgaW5jbHVzaXZlIGFuY2VzdG9ycyBvZiB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBhbmNlc3RvcnNJdGVyYXRvclxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNilcbiAgICAgICAgICovXG4gICAgICAgIGFuY2VzdG9yc0l0ZXJhdG9yKG9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVJdGVyYXRvci5QQVJFTlRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgZGVzY2VuZGFudHMgb2YgdGhlIGdpdmVuIG9iamVjdCAoaW4gdHJlZSBvcmRlcikuXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIG9iamVjdHMgaW4gdGhlIHN1Yi10cmVlIG9mIHRoZSBnaXZlbiBgcm9vdGA6XG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlIGZvciBhIHNpbmdsZSBpdGVyYXRpb24pXG4gICAgICAgICAqICogYE8obilgIChhbW9ydGl6ZWQsIHdoZW4gY29tcGxldGluZyB0aGUgaXRlcmF0b3IpXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgdHJlZUl0ZXJhdG9yXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByb290XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmV2ZXJzZT1mYWxzZV1cbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KVxuICAgICAgICAgKi9cbiAgICAgICAgdHJlZUl0ZXJhdG9yKHJvb3QsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlID0gb3B0aW9ucyAmJiBvcHRpb25zLnJldmVyc2U7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRyZWVJdGVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZSA/IHRoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQocm9vdCkgOiByb290LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZSA/IFRyZWVJdGVyYXRvci5QUkVDRURJTkcgOiBUcmVlSXRlcmF0b3IuRk9MTE9XSU5HXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gb2JqZWN0ICh0aGUgbnVtYmVyIG9mIHByZWNlZGluZyBzaWJsaW5ncykuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIHByZWNlZGluZyBzaWJsaW5nc1xuICAgICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgaW5kZXhcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNoaWxkXG4gICAgICAgICAqIEByZXR1cm4ge051bWJlcn0gVGhlIG51bWJlciBvZiBwcmVjZWRpbmcgc2libGluZ3MsIG9yIC0xIGlmIHRoZSBvYmplY3QgaGFzIG5vIHBhcmVudFxuICAgICAgICAgKi9cbiAgICAgICAgaW5kZXgoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSB0aGlzLl9ub2RlKGNoaWxkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShjaGlsZE5vZGUucGFyZW50KTtcblxuICAgICAgICAgICAgICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gcHJpbmNpcGFsLCB5b3UgY291bGQgYWxzbyBmaW5kIG91dCB0aGUgbnVtYmVyIG9mIHByZWNlZGluZyBzaWJsaW5nc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIG9iamVjdHMgdGhhdCBkbyBub3QgaGF2ZSBhIHBhcmVudC4gVGhpcyBtZXRob2QgbGltaXRzIGl0c2VsZiBvbmx5IHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvYmplY3RzIHRoYXQgaGF2ZSBhIHBhcmVudCBiZWNhdXNlIHRoYXQgbGV0cyB1cyBvcHRpbWl6ZSBtb3JlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50SW5kZXggPSBjaGlsZE5vZGUuZ2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0ID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUuY2hpbGRJbmRleENhY2hlZFVwVG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlZFVwVG9Ob2RlID0gdGhpcy5fbm9kZShwYXJlbnROb2RlLmNoaWxkSW5kZXhDYWNoZWRVcFRvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IGNhY2hlZFVwVG9Ob2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0gY2FjaGVkVXBUb05vZGUuZ2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSkgKyAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHdoaWxlIChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9ub2RlKG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldENhY2hlZEluZGV4KHBhcmVudE5vZGUsIGN1cnJlbnRJbmRleCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QgPT09IGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbyA9IGNoaWxkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGlsZHJlbi5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTyhuKWAgd2hlcmUgYG5gIGlzIHRoZSBhbW91bnQgb2YgY2hpbGRyZW5cbiAgICAgICAgICogKiBgTygxKWAgKGFtb3J0aXplZCwgaWYgdGhlIHRyZWUgaXMgbm90IG1vZGlmaWVkKVxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGNoaWxkcmVuQ291bnRcbiAgICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSNcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBhcmVudFxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICBjaGlsZHJlbkNvdW50KHBhcmVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHBhcmVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXBhcmVudE5vZGUubGFzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleChwYXJlbnROb2RlLmxhc3RDaGlsZCkgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXBhcmUgdGhlIHBvc2l0aW9uIG9mIGFuIG9iamVjdCByZWxhdGl2ZSB0byBhbm90aGVyIG9iamVjdC4gQSBiaXQgc2V0IGlzIHJldHVybmVkOlxuICAgICAgICAgKlxuICAgICAgICAgKiA8dWw+XG4gICAgICAgICAqICAgICA8bGk+RElTQ09OTkVDVEVEIDogMTwvbGk+XG4gICAgICAgICAqICAgICA8bGk+UFJFQ0VESU5HIDogMjwvbGk+XG4gICAgICAgICAqICAgICA8bGk+Rk9MTE9XSU5HIDogNDwvbGk+XG4gICAgICAgICAqICAgICA8bGk+Q09OVEFJTlMgOiA4PC9saT5cbiAgICAgICAgICogICAgIDxsaT5DT05UQUlORURfQlkgOiAxNjwvbGk+XG4gICAgICAgICAqIDwvdWw+XG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBzZW1hbnRpY3MgYXJlIHRoZSBzYW1lIGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIGluIERPTSwgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXRcbiAgICAgICAgICogRElTQ09OTkVDVEVEIG5ldmVyIG9jY3VycyB3aXRoIGFueSBvdGhlciBiaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIHdoZXJlIGBuYCBhbmQgYG1gIGFyZSB0aGUgYW1vdW50IG9mIGFuY2VzdG9ycyBvZiBgbGVmdGAgYW5kIGByaWdodGA7XG4gICAgICAgICAqIHdoZXJlIGBvYCBpcyB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIG9mIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIGBsZWZ0YCBhbmQgYHJpZ2h0YDpcbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTyhuICsgbSArIG8pYCAod29yc3QgY2FzZSlcbiAgICAgICAgICogKiBgTyhuICsgbSlgIChhbW9ydGl6ZWQsIGlmIHRoZSB0cmVlIGlzIG5vdCBtb2RpZmllZClcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBjb21wYXJlVHJlZVBvc2l0aW9uXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByaWdodFxuICAgICAgICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICBjb21wYXJlVHJlZVBvc2l0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gRE9NIHRlcm1zOlxuICAgICAgICAgICAgICAgIC8vIGxlZnQgPSByZWZlcmVuY2UgLyBjb250ZXh0IG9iamVjdFxuICAgICAgICAgICAgICAgIC8vIHJpZ2h0ID0gb3RoZXJcblxuICAgICAgICAgICAgICAgIGlmIChsZWZ0ID09PSByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoganNoaW50IC1XMDE2ICovXG5cbiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0QW5jZXN0b3JzID0gW107IHsgLy8gaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGVmdEFuY2VzdG9yID0gbGVmdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlZnRBbmNlc3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVmdEFuY2VzdG9yID09PSByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmVlUG9zaXRpb24uQ09OVEFJTlMgfCBUcmVlUG9zaXRpb24uUFJFQ0VESU5HO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIGlzIGFuY2VzdG9yIG9mIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEFuY2VzdG9ycy5wdXNoKGxlZnRBbmNlc3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRBbmNlc3RvciA9IHRoaXMucGFyZW50KGxlZnRBbmNlc3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBjb25zdCByaWdodEFuY2VzdG9ycyA9IFtdOyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmlnaHRBbmNlc3RvciA9IHJpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmlnaHRBbmNlc3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRBbmNlc3RvciA9PT0gbGVmdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmVlUG9zaXRpb24uQ09OVEFJTkVEX0JZIHwgVHJlZVBvc2l0aW9uLkZPTExPV0lORztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0QW5jZXN0b3JzLnB1c2gocmlnaHRBbmNlc3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0QW5jZXN0b3IgPSB0aGlzLnBhcmVudChyaWdodEFuY2VzdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3QgPSByZXZlcnNlQXJyYXlJbmRleChsZWZ0QW5jZXN0b3JzLCAwKTtcblxuICAgICAgICAgICAgICAgIGlmICghcm9vdCB8fCByb290ICE9PSByZXZlcnNlQXJyYXlJbmRleChyaWdodEFuY2VzdG9ycywgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IHVubGlrZSBET00sIHByZWNlZGluZyAvIGZvbGxvd2luZyBpcyBub3Qgc2V0IGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmVlUG9zaXRpb24uRElTQ09OTkVDVEVEO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3JcbiAgICAgICAgICAgICAgICBsZXQgY29tbW9uQW5jZXN0b3JJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5jZXN0b3JzTWluTGVuZ3RoID0gTWF0aC5taW4obGVmdEFuY2VzdG9ycy5sZW5ndGgsIHJpZ2h0QW5jZXN0b3JzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuY2VzdG9yc01pbkxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsZWZ0QW5jZXN0b3IgID0gcmV2ZXJzZUFycmF5SW5kZXgobGVmdEFuY2VzdG9ycywgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByaWdodEFuY2VzdG9yID0gcmV2ZXJzZUFycmF5SW5kZXgocmlnaHRBbmNlc3RvcnMsIGkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVmdEFuY2VzdG9yICE9PSByaWdodEFuY2VzdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tb25BbmNlc3RvckluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBpbmRleGVzIHdpdGhpbiB0aGUgY29tbW9uIGFuY2VzdG9yXG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdEluZGV4ICA9IHRoaXMuaW5kZXgocmV2ZXJzZUFycmF5SW5kZXgobGVmdEFuY2VzdG9ycywgY29tbW9uQW5jZXN0b3JJbmRleCArIDEpKTtcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodEluZGV4ID0gdGhpcy5pbmRleChyZXZlcnNlQXJyYXlJbmRleChyaWdodEFuY2VzdG9ycywgY29tbW9uQW5jZXN0b3JJbmRleCArIDEpKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByaWdodEluZGV4IDwgbGVmdEluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICA/IFRyZWVQb3NpdGlvbi5QUkVDRURJTkdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogVHJlZVBvc2l0aW9uLkZPTExPV0lORztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoaXMgdHJlZS5cbiAgICAgICAgICogSGFzIG5vIGVmZmVjdCBpZiBhbHJlYWR5IHJlbW92ZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgcmVtb3ZlXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZW1vdmVPYmplY3RcbiAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSByZW1vdmVPYmplY3RcbiAgICAgICAgICovXG4gICAgICAgIHJlbW92ZShyZW1vdmVPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVOb2RlID0gdGhpcy5fbm9kZShyZW1vdmVPYmplY3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHJlbW92ZU5vZGUucGFyZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlTm9kZS5wcmV2aW91c1NpYmxpbmcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHROb2RlID0gdGhpcy5fbm9kZShyZW1vdmVOb2RlLm5leHRTaWJsaW5nKTtcblxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZS5maXJzdENoaWxkID09PSByZW1vdmVPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5maXJzdENoaWxkID0gcmVtb3ZlTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUubGFzdENoaWxkID09PSByZW1vdmVPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLm5leHRTaWJsaW5nID0gcmVtb3ZlTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobmV4dE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlLnByZXZpb3VzU2libGluZyA9IHJlbW92ZU5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUucGFyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZS5uZXh0U2libGluZyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbkNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlT2JqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluc2VydCB0aGUgZ2l2ZW4gb2JqZWN0IGJlZm9yZSB0aGUgcmVmZXJlbmNlIG9iamVjdC5cbiAgICAgICAgICogYG5ld09iamVjdGAgaXMgbm93IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIGByZWZlcmVuY2VPYmplY3RgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGluc2VydEJlZm9yZVxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdPYmplY3RcbiAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBuZXdPYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZVxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IG5ld09iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgaW5zZXJ0QmVmb3JlKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlT2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlTm9kZS5wcmV2aW91c1NpYmxpbmcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlTm9kZS5wYXJlbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5ld05vZGUuaXNBdHRhY2hlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0dpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU5vZGUucGFyZW50O1xuICAgICAgICAgICAgICAgIG5ld05vZGUucHJldmlvdXNTaWJsaW5nID0gcmVmZXJlbmNlTm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICAgICAgbmV3Tm9kZS5uZXh0U2libGluZyA9IHJlZmVyZW5jZU9iamVjdDtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLnByZXZpb3VzU2libGluZyA9IG5ld09iamVjdDtcblxuICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUubmV4dFNpYmxpbmcgPSBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5maXJzdENoaWxkID09PSByZWZlcmVuY2VPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuZmlyc3RDaGlsZCA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbkNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3T2JqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluc2VydCB0aGUgZ2l2ZW4gb2JqZWN0IGFmdGVyIHRoZSByZWZlcmVuY2Ugb2JqZWN0LlxuICAgICAgICAgKiBgbmV3T2JqZWN0YCBpcyBub3cgdGhlIG5leHQgc2libGluZyBvZiBgcmVmZXJlbmNlT2JqZWN0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBgTygxKWBcbiAgICAgICAgICpcbiAgICAgICAgICogQG1ldGhvZCBpbnNlcnRBZnRlclxuICAgICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlI1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlT2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBuZXdPYmplY3RcbiAgICAgICAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBuZXdPYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZVxuICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IG5ld09iamVjdFxuICAgICAgICAgKi9cbiAgICAgICAgaW5zZXJ0QWZ0ZXIocmVmZXJlbmNlT2JqZWN0LCBuZXdPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VPYmplY3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHROb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VOb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUucGFyZW50KTtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbmV3Tm9kZS5wYXJlbnQgPSByZWZlcmVuY2VOb2RlLnBhcmVudDtcbiAgICAgICAgICAgICAgICBuZXdOb2RlLnByZXZpb3VzU2libGluZyA9IHJlZmVyZW5jZU9iamVjdDtcbiAgICAgICAgICAgICAgICBuZXdOb2RlLm5leHRTaWJsaW5nID0gcmVmZXJlbmNlTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLm5leHRTaWJsaW5nID0gbmV3T2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgaWYgKG5leHROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZS5wcmV2aW91c1NpYmxpbmcgPSBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPT09IHJlZmVyZW5jZU9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRyZW5DaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld09iamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBhcyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGdpdmVuIHJlZmVyZW5jZSBvYmplY3QuXG4gICAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgZmlyc3QgY2hpbGQgb2YgYHJlZmVyZW5jZU9iamVjdGAuXG4gICAgICAgICAqXG4gICAgICAgICAqICogYE8oMSlgXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZXRob2QgcHJlcGVuZENoaWxkXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdFxuICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBwcmVwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0LCBuZXdPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VPYmplY3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZS5pc0F0dGFjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VOb2RlLmhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydEJlZm9yZShyZWZlcmVuY2VOb2RlLmZpcnN0Q2hpbGQsIG5ld09iamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZS5wYXJlbnQgPSByZWZlcmVuY2VPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLmZpcnN0Q2hpbGQgPSBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLmxhc3RDaGlsZCA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUuY2hpbGRyZW5DaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld09iamVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBhcyB0aGUgbGFzdCBjaGlsZCBvZiB0aGUgZ2l2ZW4gcmVmZXJlbmNlIG9iamVjdC5cbiAgICAgICAgICogYG5ld09iamVjdGAgaXMgbm93IHRoZSBsYXN0IGNoaWxkIG9mIGByZWZlcmVuY2VPYmplY3RgLlxuICAgICAgICAgKlxuICAgICAgICAgKiAqIGBPKDEpYFxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWV0aG9kIGFwcGVuZENoaWxkXG4gICAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdFxuICAgICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0XG4gICAgICAgICAqL1xuICAgICAgICBhcHBlbmRDaGlsZChyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuX25vZGUobmV3T2JqZWN0KTtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGUuaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QWZ0ZXIocmVmZXJlbmNlTm9kZS5sYXN0Q2hpbGQsIG5ld09iamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZS5wYXJlbnQgPSByZWZlcmVuY2VPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLmZpcnN0Q2hpbGQgPSBuZXdPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLmxhc3RDaGlsZCA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUuY2hpbGRyZW5DaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld09iamVjdDtcbiAgICAgICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbFRyZWU7XG5TeW1ib2xUcmVlLlRyZWVQb3NpdGlvbiA9IFRyZWVQb3NpdGlvbjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBTeW1ib2xUcmVlTm9kZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU2libGluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0U2libGluZyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0Q2hpbGQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdENoaWxkID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIC8qKiBUaGlzIHZhbHVlIGlzIGluY3JlbWVudGVkIGFueXRpbWUgYSBjaGlsZHJlbiBpcyBhZGRlZCBvciByZW1vdmVkICovXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlblZlcnNpb24gPSAwO1xuICAgICAgICAgICAgICAgIC8qKiBUaGUgbGFzdCBjaGlsZCBvYmplY3Qgd2hpY2ggaGFzIGEgY2FjaGVkIGluZGV4ICovXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZEluZGV4Q2FjaGVkVXBUbyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAvKiogVGhpcyB2YWx1ZSByZXByZXNlbnRzIHRoZSBjYWNoZWQgbm9kZSBpbmRleCwgYXMgbG9uZyBhc1xuICAgICAgICAgICAgICAgICAqIGNhY2hlZEluZGV4VmVyc2lvbiBtYXRjaGVzIHdpdGggdGhlIGNoaWxkcmVuVmVyc2lvbiBvZiB0aGUgcGFyZW50ICovXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkSW5kZXhWZXJzaW9uID0gTmFOOyAvLyBOYU4gaXMgbmV2ZXIgZXF1YWwgdG8gYW55dGhpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIGdldCBpc0F0dGFjaGVkKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMucGFyZW50IHx8IHRoaXMucHJldmlvdXNTaWJsaW5nIHx8IHRoaXMubmV4dFNpYmxpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0IGhhc0NoaWxkcmVuKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZHJlbkNoYW5nZWQoKSB7XG4gICAgICAgICAgICAgICAgLyoganNoaW50IC1XMDE2ICovXG4gICAgICAgICAgICAgICAgLy8gaW50ZWdlciB3cmFwIGFyb3VuZFxuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5WZXJzaW9uID0gKHRoaXMuY2hpbGRyZW5WZXJzaW9uICsgMSkgJiAweEZGRkZGRkZGO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIC8vIChhc3N1bWVzIHBhcmVudE5vZGUgaXMgYWN0dWFsbHkgdGhlIHBhcmVudClcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRJbmRleFZlcnNpb24gIT09IHBhcmVudE5vZGUuY2hpbGRyZW5WZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhY2hlZEluZGV4IGlzIG5vIGxvbmdlciB2YWxpZFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEluZGV4OyAvLyAtMSBpZiBub3QgY2FjaGVkXG4gICAgICAgIH1cblxuICAgICAgICBzZXRDYWNoZWRJbmRleChwYXJlbnROb2RlLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIC8vIChhc3N1bWVzIHBhcmVudE5vZGUgaXMgYWN0dWFsbHkgdGhlIHBhcmVudClcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IHBhcmVudE5vZGUuY2hpbGRyZW5WZXJzaW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkSW5kZXggPSBpbmRleDtcbiAgICAgICAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgVFJFRSA9IFN5bWJvbCgpO1xuY29uc3QgUk9PVCA9IFN5bWJvbCgpO1xuY29uc3QgTkVYVCA9IFN5bWJvbCgpO1xuY29uc3QgSVRFUkFURV9GVU5DID0gU3ltYm9sKCk7XG5cbmNsYXNzIFRyZWVJdGVyYXRvciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRyZWUsIHJvb3QsIGZpcnN0UmVzdWx0LCBpdGVyYXRlRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzW1RSRUVdID0gdHJlZTtcbiAgICAgICAgICAgICAgICB0aGlzW1JPT1RdID0gcm9vdDtcbiAgICAgICAgICAgICAgICB0aGlzW05FWFRdID0gZmlyc3RSZXN1bHQ7XG4gICAgICAgICAgICAgICAgdGhpc1tJVEVSQVRFX0ZVTkNdID0gaXRlcmF0ZUZ1bmN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmVlID0gdGhpc1tUUkVFXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRlRnVuYyA9IHRoaXNbSVRFUkFURV9GVU5DXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb290ID0gdGhpc1tST09UXTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpc1tORVhUXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tORVhUXTtcblxuICAgICAgICAgICAgICAgIGlmIChpdGVyYXRlRnVuYyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuX25vZGUodmFsdWUpLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXRlcmF0ZUZ1bmMgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlKS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXRlcmF0ZUZ1bmMgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlKS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZXJhdGVGdW5jID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzW05FWFRdID0gdHJlZS5wcmVjZWRpbmcodmFsdWUsIHtyb290OiByb290fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgLyogaWYgKGl0ZXJhdGVGdW5jID09PSA1KSovIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLmZvbGxvd2luZyh2YWx1ZSwge3Jvb3Q6IHJvb3R9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZUl0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLml0ZXJhdG9yLCB7XG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxufSk7XG5cblRyZWVJdGVyYXRvci5QUkVWID0gMTtcblRyZWVJdGVyYXRvci5ORVhUID0gMjtcblRyZWVJdGVyYXRvci5QQVJFTlQgPSAzO1xuVHJlZUl0ZXJhdG9yLlBSRUNFRElORyA9IDQ7XG5UcmVlSXRlcmF0b3IuRk9MTE9XSU5HID0gNTtcblxuT2JqZWN0LmZyZWV6ZShUcmVlSXRlcmF0b3IpO1xuT2JqZWN0LmZyZWV6ZShUcmVlSXRlcmF0b3IucHJvdG90eXBlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmVlSXRlcmF0b3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIHNvcnQta2V5cyAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgLy8gc2FtZSBhcyBET00gRE9DVU1FTlRfUE9TSVRJT05fXG4gICAgICAgIERJU0NPTk5FQ1RFRDogMSxcbiAgICAgICAgUFJFQ0VESU5HOiAyLFxuICAgICAgICBGT0xMT1dJTkc6IDQsXG4gICAgICAgIENPTlRBSU5TOiA4LFxuICAgICAgICBDT05UQUlORURfQlk6IDE2LFxufSk7XG4iLCJ2YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJ1Zikge1xuXHQvLyBJZiB0aGUgYnVmZmVyIGlzIGJhY2tlZCBieSBhIFVpbnQ4QXJyYXksIGEgZmFzdGVyIHZlcnNpb24gd2lsbCB3b3JrXG5cdGlmIChidWYgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG5cdFx0Ly8gSWYgdGhlIGJ1ZmZlciBpc24ndCBhIHN1YmFycmF5LCByZXR1cm4gdGhlIHVuZGVybHlpbmcgQXJyYXlCdWZmZXJcblx0XHRpZiAoYnVmLmJ5dGVPZmZzZXQgPT09IDAgJiYgYnVmLmJ5dGVMZW5ndGggPT09IGJ1Zi5idWZmZXIuYnl0ZUxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGJ1Zi5idWZmZXJcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBidWYuYnVmZmVyLnNsaWNlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCB0byBnZXQgYSBwcm9wZXIgY29weVxuXHRcdFx0cmV0dXJuIGJ1Zi5idWZmZXIuc2xpY2UoYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlT2Zmc2V0ICsgYnVmLmJ5dGVMZW5ndGgpXG5cdFx0fVxuXHR9XG5cblx0aWYgKEJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG5cdFx0Ly8gVGhpcyBpcyB0aGUgc2xvdyB2ZXJzaW9uIHRoYXQgd2lsbCB3b3JrIHdpdGggYW55IEJ1ZmZlclxuXHRcdC8vIGltcGxlbWVudGF0aW9uIChldmVuIGluIG9sZCBicm93c2Vycylcblx0XHR2YXIgYXJyYXlDb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmxlbmd0aClcblx0XHR2YXIgbGVuID0gYnVmLmxlbmd0aFxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGFycmF5Q29weVtpXSA9IGJ1ZltpXVxuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXlDb3B5LmJ1ZmZlclxuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG5cdH1cbn1cbiIsIi8qIVxuICogQ29weXJpZ2h0IChjKSAyMDE1LCBTYWxlc2ZvcmNlLmNvbSwgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTYWxlc2ZvcmNlLmNvbSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5XG4gKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0XG4gKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFXG4gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SXG4gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRlxuICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTXG4gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTlxuICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSlcbiAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFXG4gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xudmFyIG5ldCA9IHJlcXVpcmUoJ25ldCcpO1xudmFyIHVybFBhcnNlID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgcHVic3VmZml4ID0gcmVxdWlyZSgnLi9wdWJzdWZmaXgnKTtcbnZhciBTdG9yZSA9IHJlcXVpcmUoJy4vc3RvcmUnKS5TdG9yZTtcbnZhciBNZW1vcnlDb29raWVTdG9yZSA9IHJlcXVpcmUoJy4vbWVtc3RvcmUnKS5NZW1vcnlDb29raWVTdG9yZTtcbnZhciBwYXRoTWF0Y2ggPSByZXF1aXJlKCcuL3BhdGhNYXRjaCcpLnBhdGhNYXRjaDtcbnZhciBWRVJTSU9OID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcblxudmFyIHB1bnljb2RlO1xudHJ5IHtcbiAgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xufSBjYXRjaChlKSB7XG4gIGNvbnNvbGUud2FybihcImNvb2tpZTogY2FuJ3QgbG9hZCBwdW55Y29kZTsgd29uJ3QgdXNlIHB1bnljb2RlIGZvciBkb21haW4gbm9ybWFsaXphdGlvblwiKTtcbn1cblxudmFyIERBVEVfREVMSU0gPSAvW1xceDA5XFx4MjAtXFx4MkZcXHgzQi1cXHg0MFxceDVCLVxceDYwXFx4N0ItXFx4N0VdLztcblxuLy8gRnJvbSBSRkM2MjY1IFM0LjEuMVxuLy8gbm90ZSB0aGF0IGl0IGV4Y2x1ZGVzIFxceDNCIFwiO1wiXG52YXIgQ09PS0lFX09DVEVUICA9IC9bXFx4MjFcXHgyMy1cXHgyQlxceDJELVxceDNBXFx4M0MtXFx4NUJcXHg1RC1cXHg3RV0vO1xudmFyIENPT0tJRV9PQ1RFVFMgPSBuZXcgUmVnRXhwKCdeJytDT09LSUVfT0NURVQuc291cmNlKycrJCcpO1xuXG52YXIgQ09OVFJPTF9DSEFSUyA9IC9bXFx4MDAtXFx4MUZdLztcblxuLy8gRG91YmxlIHF1b3RlcyBhcmUgcGFydCBvZiB0aGUgdmFsdWUgKHNlZTogUzQuMS4xKS5cbi8vICdcXHInLCAnXFxuJyBhbmQgJ1xcMCcgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSB0ZXJtaW5hdG9yIGluIHRoZSBcInJlbGF4ZWRcIiBtb2RlXG4vLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vQ2hyb21pdW1XZWJBcHBzL2Nocm9taXVtL2Jsb2IvYjNkM2I0ZGE4YmI5NGMxYjJlMDYxNjAwZGYxMDZkNTkwZmRhMzYyMC9uZXQvY29va2llcy9wYXJzZWRfY29va2llLmNjI0w2MClcbi8vICc9JyBhbmQgJzsnIGFyZSBhdHRyaWJ1dGUvdmFsdWVzIHNlcGFyYXRvcnNcbi8vIChzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9DaHJvbWl1bVdlYkFwcHMvY2hyb21pdW0vYmxvYi9iM2QzYjRkYThiYjk0YzFiMmUwNjE2MDBkZjEwNmQ1OTBmZGEzNjIwL25ldC9jb29raWVzL3BhcnNlZF9jb29raWUuY2MjTDY0KVxudmFyIENPT0tJRV9QQUlSID0gL14oKFtePTtdKykpXFxzKj1cXHMqKFteXFxuXFxyXFwwXSopLztcblxuLy8gVXNlZCB0byBwYXJzZSBub24tUkZDLWNvbXBsaWFudCBjb29raWVzIGxpa2UgJz1hYmMnIHdoZW4gZ2l2ZW4gdGhlIGBsb29zZWBcbi8vIG9wdGlvbiBpbiBDb29raWUucGFyc2U6XG52YXIgTE9PU0VfQ09PS0lFX1BBSVIgPSAvXigoPzo9KT8oW149O10qKVxccyo9XFxzKik/KFteXFxuXFxyXFwwXSopLztcblxuLy8gUkZDNjI2NSBTNC4xLjEgZGVmaW5lcyBwYXRoIHZhbHVlIGFzICdhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIidcbi8vIE5vdGUgJzsnIGlzIFxceDNCXG52YXIgUEFUSF9WQUxVRSA9IC9bXFx4MjAtXFx4M0FcXHgzQy1cXHg3RV0rLztcblxudmFyIERBWV9PRl9NT05USCA9IC9eKFxcZHsxLDJ9KVteXFxkXSokLztcbnZhciBUSU1FID0gL14oXFxkezEsMn0pW15cXGRdKjooXFxkezEsMn0pW15cXGRdKjooXFxkezEsMn0pW15cXGRdKiQvO1xudmFyIE1PTlRIID0gL14oSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpL2k7XG5cbnZhciBNT05USF9UT19OVU0gPSB7XG4gIGphbjowLCBmZWI6MSwgbWFyOjIsIGFwcjozLCBtYXk6NCwganVuOjUsXG4gIGp1bDo2LCBhdWc6Nywgc2VwOjgsIG9jdDo5LCBub3Y6MTAsIGRlYzoxMVxufTtcbnZhciBOVU1fVE9fTU9OVEggPSBbXG4gICdKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYXknLCdKdW4nLCdKdWwnLCdBdWcnLCdTZXAnLCdPY3QnLCdOb3YnLCdEZWMnXG5dO1xudmFyIE5VTV9UT19EQVkgPSBbXG4gICdTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXG5dO1xuXG52YXIgWUVBUiA9IC9eKFxcZHsyfXxcXGR7NH0pJC87IC8vIDIgdG8gNCBkaWdpdHNcblxudmFyIE1BWF9USU1FID0gMjE0NzQ4MzY0NzAwMDsgLy8gMzEtYml0IG1heFxudmFyIE1JTl9USU1FID0gMDsgLy8gMzEtYml0IG1pblxuXG5cbi8vIFJGQzYyNjUgUzUuMS4xIGRhdGUgcGFyc2VyOlxuZnVuY3Rpb24gcGFyc2VEYXRlKHN0cikge1xuICBpZiAoIXN0cikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qIFJGQzYyNjUgUzUuMS4xOlxuICAgKiAyLiBQcm9jZXNzIGVhY2ggZGF0ZS10b2tlbiBzZXF1ZW50aWFsbHkgaW4gdGhlIG9yZGVyIHRoZSBkYXRlLXRva2Vuc1xuICAgKiBhcHBlYXIgaW4gdGhlIGNvb2tpZS1kYXRlXG4gICAqL1xuICB2YXIgdG9rZW5zID0gc3RyLnNwbGl0KERBVEVfREVMSU0pO1xuICBpZiAoIXRva2Vucykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBob3VyID0gbnVsbDtcbiAgdmFyIG1pbnV0ZXMgPSBudWxsO1xuICB2YXIgc2Vjb25kcyA9IG51bGw7XG4gIHZhciBkYXkgPSBudWxsO1xuICB2YXIgbW9udGggPSBudWxsO1xuICB2YXIgeWVhciA9IG51bGw7XG5cbiAgZm9yICh2YXIgaT0wOyBpPHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXS50cmltKCk7XG4gICAgaWYgKCF0b2tlbi5sZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQ7XG5cbiAgICAvKiAyLjEuIElmIHRoZSBmb3VuZC10aW1lIGZsYWcgaXMgbm90IHNldCBhbmQgdGhlIHRva2VuIG1hdGNoZXMgdGhlIHRpbWVcbiAgICAgKiBwcm9kdWN0aW9uLCBzZXQgdGhlIGZvdW5kLXRpbWUgZmxhZyBhbmQgc2V0IHRoZSBob3VyLSB2YWx1ZSxcbiAgICAgKiBtaW51dGUtdmFsdWUsIGFuZCBzZWNvbmQtdmFsdWUgdG8gdGhlIG51bWJlcnMgZGVub3RlZCBieSB0aGUgZGlnaXRzIGluXG4gICAgICogdGhlIGRhdGUtdG9rZW4sIHJlc3BlY3RpdmVseS4gIFNraXAgdGhlIHJlbWFpbmluZyBzdWItc3RlcHMgYW5kIGNvbnRpbnVlXG4gICAgICogdG8gdGhlIG5leHQgZGF0ZS10b2tlbi5cbiAgICAgKi9cbiAgICBpZiAoc2Vjb25kcyA9PT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gVElNRS5leGVjKHRva2VuKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgaG91ciA9IHBhcnNlSW50KHJlc3VsdFsxXSwgMTApO1xuICAgICAgICBtaW51dGVzID0gcGFyc2VJbnQocmVzdWx0WzJdLCAxMCk7XG4gICAgICAgIHNlY29uZHMgPSBwYXJzZUludChyZXN1bHRbM10sIDEwKTtcbiAgICAgICAgLyogUkZDNjI2NSBTNS4xLjEuNTpcbiAgICAgICAgICogW2ZhaWwgaWZdXG4gICAgICAgICAqICogIHRoZSBob3VyLXZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAyMyxcbiAgICAgICAgICogKiAgdGhlIG1pbnV0ZS12YWx1ZSBpcyBncmVhdGVyIHRoYW4gNTksIG9yXG4gICAgICAgICAqICogIHRoZSBzZWNvbmQtdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDU5LlxuICAgICAgICAgKi9cbiAgICAgICAgaWYoaG91ciA+IDIzIHx8IG1pbnV0ZXMgPiA1OSB8fCBzZWNvbmRzID4gNTkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiAyLjIuIElmIHRoZSBmb3VuZC1kYXktb2YtbW9udGggZmxhZyBpcyBub3Qgc2V0IGFuZCB0aGUgZGF0ZS10b2tlbiBtYXRjaGVzXG4gICAgICogdGhlIGRheS1vZi1tb250aCBwcm9kdWN0aW9uLCBzZXQgdGhlIGZvdW5kLWRheS1vZi0gbW9udGggZmxhZyBhbmQgc2V0XG4gICAgICogdGhlIGRheS1vZi1tb250aC12YWx1ZSB0byB0aGUgbnVtYmVyIGRlbm90ZWQgYnkgdGhlIGRhdGUtdG9rZW4uICBTa2lwXG4gICAgICogdGhlIHJlbWFpbmluZyBzdWItc3RlcHMgYW5kIGNvbnRpbnVlIHRvIHRoZSBuZXh0IGRhdGUtdG9rZW4uXG4gICAgICovXG4gICAgaWYgKGRheSA9PT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gREFZX09GX01PTlRILmV4ZWModG9rZW4pO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBkYXkgPSBwYXJzZUludChyZXN1bHQsIDEwKTtcbiAgICAgICAgLyogUkZDNjI2NSBTNS4xLjEuNTpcbiAgICAgICAgICogW2ZhaWwgaWZdIHRoZSBkYXktb2YtbW9udGgtdmFsdWUgaXMgbGVzcyB0aGFuIDEgb3IgZ3JlYXRlciB0aGFuIDMxXG4gICAgICAgICAqL1xuICAgICAgICBpZihkYXkgPCAxIHx8IGRheSA+IDMxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIDIuMy4gSWYgdGhlIGZvdW5kLW1vbnRoIGZsYWcgaXMgbm90IHNldCBhbmQgdGhlIGRhdGUtdG9rZW4gbWF0Y2hlcyB0aGVcbiAgICAgKiBtb250aCBwcm9kdWN0aW9uLCBzZXQgdGhlIGZvdW5kLW1vbnRoIGZsYWcgYW5kIHNldCB0aGUgbW9udGgtdmFsdWUgdG9cbiAgICAgKiB0aGUgbW9udGggZGVub3RlZCBieSB0aGUgZGF0ZS10b2tlbi4gIFNraXAgdGhlIHJlbWFpbmluZyBzdWItc3RlcHMgYW5kXG4gICAgICogY29udGludWUgdG8gdGhlIG5leHQgZGF0ZS10b2tlbi5cbiAgICAgKi9cbiAgICBpZiAobW9udGggPT09IG51bGwpIHtcbiAgICAgIHJlc3VsdCA9IE1PTlRILmV4ZWModG9rZW4pO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBtb250aCA9IE1PTlRIX1RPX05VTVtyZXN1bHRbMV0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIDIuNC4gSWYgdGhlIGZvdW5kLXllYXIgZmxhZyBpcyBub3Qgc2V0IGFuZCB0aGUgZGF0ZS10b2tlbiBtYXRjaGVzIHRoZSB5ZWFyXG4gICAgICogcHJvZHVjdGlvbiwgc2V0IHRoZSBmb3VuZC15ZWFyIGZsYWcgYW5kIHNldCB0aGUgeWVhci12YWx1ZSB0byB0aGUgbnVtYmVyXG4gICAgICogZGVub3RlZCBieSB0aGUgZGF0ZS10b2tlbi4gIFNraXAgdGhlIHJlbWFpbmluZyBzdWItc3RlcHMgYW5kIGNvbnRpbnVlIHRvXG4gICAgICogdGhlIG5leHQgZGF0ZS10b2tlbi5cbiAgICAgKi9cbiAgICBpZiAoeWVhciA9PT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gWUVBUi5leGVjKHRva2VuKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgeWVhciA9IHBhcnNlSW50KHJlc3VsdFswXSwgMTApO1xuICAgICAgICAvKiBGcm9tIFM1LjEuMTpcbiAgICAgICAgICogMy4gIElmIHRoZSB5ZWFyLXZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA3MCBhbmQgbGVzc1xuICAgICAgICAgKiB0aGFuIG9yIGVxdWFsIHRvIDk5LCBpbmNyZW1lbnQgdGhlIHllYXItdmFsdWUgYnkgMTkwMC5cbiAgICAgICAgICogNC4gIElmIHRoZSB5ZWFyLXZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwIGFuZCBsZXNzXG4gICAgICAgICAqIHRoYW4gb3IgZXF1YWwgdG8gNjksIGluY3JlbWVudCB0aGUgeWVhci12YWx1ZSBieSAyMDAwLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKDcwIDw9IHllYXIgJiYgeWVhciA8PSA5OSkge1xuICAgICAgICAgIHllYXIgKz0gMTkwMDtcbiAgICAgICAgfSBlbHNlIGlmICgwIDw9IHllYXIgJiYgeWVhciA8PSA2OSkge1xuICAgICAgICAgIHllYXIgKz0gMjAwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh5ZWFyIDwgMTYwMSkge1xuICAgICAgICAgIHJldHVybjsgLy8gNS4gLi4uIHRoZSB5ZWFyLXZhbHVlIGlzIGxlc3MgdGhhbiAxNjAxXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc2Vjb25kcyA9PT0gbnVsbCB8fCBkYXkgPT09IG51bGwgfHwgbW9udGggPT09IG51bGwgfHwgeWVhciA9PT0gbnVsbCkge1xuICAgIHJldHVybjsgLy8gNS4gLi4uIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm91bmQtZGF5LW9mLW1vbnRoLCBmb3VuZC1tb250aCwgZm91bmQtXG4gICAgICAgICAgICAvLyB5ZWFyLCBvciBmb3VuZC10aW1lIGZsYWdzIGlzIG5vdCBzZXQsXG4gIH1cblxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlcywgc2Vjb25kcykpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUpIHtcbiAgdmFyIGQgPSBkYXRlLmdldFVUQ0RhdGUoKTsgZCA9IGQgPj0gMTAgPyBkIDogJzAnK2Q7XG4gIHZhciBoID0gZGF0ZS5nZXRVVENIb3VycygpOyBoID0gaCA+PSAxMCA/IGggOiAnMCcraDtcbiAgdmFyIG0gPSBkYXRlLmdldFVUQ01pbnV0ZXMoKTsgbSA9IG0gPj0gMTAgPyBtIDogJzAnK207XG4gIHZhciBzID0gZGF0ZS5nZXRVVENTZWNvbmRzKCk7IHMgPSBzID49IDEwID8gcyA6ICcwJytzO1xuICByZXR1cm4gTlVNX1RPX0RBWVtkYXRlLmdldFVUQ0RheSgpXSArICcsICcgK1xuICAgIGQrJyAnKyBOVU1fVE9fTU9OVEhbZGF0ZS5nZXRVVENNb250aCgpXSArJyAnKyBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKycgJytcbiAgICBoKyc6JyttKyc6JytzKycgR01UJztcbn1cblxuLy8gUzUuMS4yIENhbm9uaWNhbGl6ZWQgSG9zdCBOYW1lc1xuZnVuY3Rpb24gY2Fub25pY2FsRG9tYWluKHN0cikge1xuICBpZiAoc3RyID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoL15cXC4vLCcnKTsgLy8gUzQuMS4yLjMgJiBTNS4yLjM6IGlnbm9yZSBsZWFkaW5nIC5cblxuICAvLyBjb252ZXJ0IHRvIElETiBpZiBhbnkgbm9uLUFTQ0lJIGNoYXJhY3RlcnNcbiAgaWYgKHB1bnljb2RlICYmIC9bXlxcdTAwMDEtXFx1MDA3Zl0vLnRlc3Qoc3RyKSkge1xuICAgIHN0ciA9IHB1bnljb2RlLnRvQVNDSUkoc3RyKTtcbiAgfVxuXG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKTtcbn1cblxuLy8gUzUuMS4zIERvbWFpbiBNYXRjaGluZ1xuZnVuY3Rpb24gZG9tYWluTWF0Y2goc3RyLCBkb21TdHIsIGNhbm9uaWNhbGl6ZSkge1xuICBpZiAoc3RyID09IG51bGwgfHwgZG9tU3RyID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoY2Fub25pY2FsaXplICE9PSBmYWxzZSkge1xuICAgIHN0ciA9IGNhbm9uaWNhbERvbWFpbihzdHIpO1xuICAgIGRvbVN0ciA9IGNhbm9uaWNhbERvbWFpbihkb21TdHIpO1xuICB9XG5cbiAgLypcbiAgICogXCJUaGUgZG9tYWluIHN0cmluZyBhbmQgdGhlIHN0cmluZyBhcmUgaWRlbnRpY2FsLiAoTm90ZSB0aGF0IGJvdGggdGhlXG4gICAqIGRvbWFpbiBzdHJpbmcgYW5kIHRoZSBzdHJpbmcgd2lsbCBoYXZlIGJlZW4gY2Fub25pY2FsaXplZCB0byBsb3dlciBjYXNlIGF0XG4gICAqIHRoaXMgcG9pbnQpXCJcbiAgICovXG4gIGlmIChzdHIgPT0gZG9tU3RyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiBcIkFsbCBvZiB0aGUgZm9sbG93aW5nIFt0aHJlZV0gY29uZGl0aW9ucyBob2xkOlwiIChvcmRlciBhZGp1c3RlZCBmcm9tIHRoZSBSRkMpICovXG5cbiAgLyogXCIqIFRoZSBzdHJpbmcgaXMgYSBob3N0IG5hbWUgKGkuZS4sIG5vdCBhbiBJUCBhZGRyZXNzKS5cIiAqL1xuICBpZiAobmV0LmlzSVAoc3RyKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qIFwiKiBUaGUgZG9tYWluIHN0cmluZyBpcyBhIHN1ZmZpeCBvZiB0aGUgc3RyaW5nXCIgKi9cbiAgdmFyIGlkeCA9IHN0ci5pbmRleE9mKGRvbVN0cik7XG4gIGlmIChpZHggPD0gMCkge1xuICAgIHJldHVybiBmYWxzZTsgLy8gaXQncyBhIG5vbi1tYXRjaCAoLTEpIG9yIHByZWZpeCAoMClcbiAgfVxuXG4gIC8vIGUuZyBcImEuYi5jXCIuaW5kZXhPZihcImIuY1wiKSA9PT0gMlxuICAvLyA1ID09PSAzKzJcbiAgaWYgKHN0ci5sZW5ndGggIT09IGRvbVN0ci5sZW5ndGggKyBpZHgpIHsgLy8gaXQncyBub3QgYSBzdWZmaXhcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiBcIiogVGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgdGhhdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGRvbWFpblxuICAqIHN0cmluZyBpcyBhICV4MkUgKFwiLlwiKSBjaGFyYWN0ZXIuXCIgKi9cbiAgaWYgKHN0ci5zdWJzdHIoaWR4LTEsMSkgIT09ICcuJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5cbi8vIFJGQzYyNjUgUzUuMS40IFBhdGhzIGFuZCBQYXRoLU1hdGNoXG5cbi8qXG4gKiBcIlRoZSB1c2VyIGFnZW50IE1VU1QgdXNlIGFuIGFsZ29yaXRobSBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtXG4gKiB0byBjb21wdXRlIHRoZSBkZWZhdWx0LXBhdGggb2YgYSBjb29raWU6XCJcbiAqXG4gKiBBc3N1bXB0aW9uOiB0aGUgcGF0aCAoYW5kIG5vdCBxdWVyeSBwYXJ0IG9yIGFic29sdXRlIHVyaSkgaXMgcGFzc2VkIGluLlxuICovXG5mdW5jdGlvbiBkZWZhdWx0UGF0aChwYXRoKSB7XG4gIC8vIFwiMi4gSWYgdGhlIHVyaS1wYXRoIGlzIGVtcHR5IG9yIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHVyaS1wYXRoIGlzIG5vdFxuICAvLyBhICV4MkYgKFwiL1wiKSBjaGFyYWN0ZXIsIG91dHB1dCAleDJGIChcIi9cIikgYW5kIHNraXAgdGhlIHJlbWFpbmluZyBzdGVwcy5cbiAgaWYgKCFwYXRoIHx8IHBhdGguc3Vic3RyKDAsMSkgIT09IFwiL1wiKSB7XG4gICAgcmV0dXJuIFwiL1wiO1xuICB9XG5cbiAgLy8gXCIzLiBJZiB0aGUgdXJpLXBhdGggY29udGFpbnMgbm8gbW9yZSB0aGFuIG9uZSAleDJGIChcIi9cIikgY2hhcmFjdGVyLCBvdXRwdXRcbiAgLy8gJXgyRiAoXCIvXCIpIGFuZCBza2lwIHRoZSByZW1haW5pbmcgc3RlcC5cIlxuICBpZiAocGF0aCA9PT0gXCIvXCIpIHtcbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIHZhciByaWdodFNsYXNoID0gcGF0aC5sYXN0SW5kZXhPZihcIi9cIik7XG4gIGlmIChyaWdodFNsYXNoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiL1wiO1xuICB9XG5cbiAgLy8gXCI0LiBPdXRwdXQgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVyaS1wYXRoIGZyb20gdGhlIGZpcnN0IGNoYXJhY3RlciB1cCB0byxcbiAgLy8gYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSByaWdodC1tb3N0ICV4MkYgKFwiL1wiKS5cIlxuICByZXR1cm4gcGF0aC5zbGljZSgwLCByaWdodFNsYXNoKTtcbn1cblxuXG5mdW5jdGlvbiBwYXJzZShzdHIsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBzdHIgPSBzdHIudHJpbSgpO1xuXG4gIC8vIFdlIHVzZSBhIHJlZ2V4IHRvIHBhcnNlIHRoZSBcIm5hbWUtdmFsdWUtcGFpclwiIHBhcnQgb2YgUzUuMlxuICB2YXIgZmlyc3RTZW1pID0gc3RyLmluZGV4T2YoJzsnKTsgLy8gUzUuMiBzdGVwIDFcbiAgdmFyIHBhaXJSZSA9IG9wdGlvbnMubG9vc2UgPyBMT09TRV9DT09LSUVfUEFJUiA6IENPT0tJRV9QQUlSO1xuICB2YXIgcmVzdWx0ID0gcGFpclJlLmV4ZWMoZmlyc3RTZW1pID09PSAtMSA/IHN0ciA6IHN0ci5zdWJzdHIoMCxmaXJzdFNlbWkpKTtcblxuICAvLyBSeCBzYXRpc2ZpZXMgdGhlIFwidGhlIG5hbWUgc3RyaW5nIGlzIGVtcHR5XCIgYW5kIFwibGFja3MgYSAleDNEIChcIj1cIilcIlxuICAvLyBjb25zdHJhaW50cyBhcyB3ZWxsIGFzIHRyaW1taW5nIGFueSB3aGl0ZXNwYWNlLlxuICBpZiAoIXJlc3VsdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjID0gbmV3IENvb2tpZSgpO1xuICBpZiAocmVzdWx0WzFdKSB7XG4gICAgYy5rZXkgPSByZXN1bHRbMl0udHJpbSgpO1xuICB9IGVsc2Uge1xuICAgIGMua2V5ID0gJyc7XG4gIH1cbiAgYy52YWx1ZSA9IHJlc3VsdFszXS50cmltKCk7XG4gIGlmIChDT05UUk9MX0NIQVJTLnRlc3QoYy5rZXkpIHx8IENPTlRST0xfQ0hBUlMudGVzdChjLnZhbHVlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmaXJzdFNlbWkgPT09IC0xKSB7XG4gICAgcmV0dXJuIGM7XG4gIH1cblxuICAvLyBTNS4yLjMgXCJ1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmdcbiAgLy8gKGluY2x1ZGluZyB0aGUgJXgzQiAoXCI7XCIpIGluIHF1ZXN0aW9uKS5cIiBwbHVzIGxhdGVyIG9uIGluIHRoZSBzYW1lIHNlY3Rpb25cbiAgLy8gXCJkaXNjYXJkIHRoZSBmaXJzdCBcIjtcIiBhbmQgdHJpbVwiLlxuICB2YXIgdW5wYXJzZWQgPSBzdHIuc2xpY2UoZmlyc3RTZW1pICsgMSkudHJpbSgpO1xuXG4gIC8vIFwiSWYgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgc3RyaW5nIGlzIGVtcHR5LCBza2lwIHRoZSByZXN0IG9mIHRoZXNlXG4gIC8vIHN0ZXBzLlwiXG4gIGlmICh1bnBhcnNlZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIC8qXG4gICAqIFM1LjIgc2F5cyB0aGF0IHdoZW4gbG9vcGluZyBvdmVyIHRoZSBpdGVtcyBcIltwXXJvY2VzcyB0aGUgYXR0cmlidXRlLW5hbWVcbiAgICogYW5kIGF0dHJpYnV0ZS12YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHJlcXVpcmVtZW50cyBpbiB0aGUgZm9sbG93aW5nXG4gICAqIHN1YnNlY3Rpb25zXCIgZm9yIGV2ZXJ5IGl0ZW0uICBQbHVzLCBmb3IgbWFueSBvZiB0aGUgaW5kaXZpZHVhbCBhdHRyaWJ1dGVzXG4gICAqIGluIFM1LjMgaXQgc2F5cyB0byB1c2UgdGhlIFwiYXR0cmlidXRlLXZhbHVlIG9mIHRoZSBsYXN0IGF0dHJpYnV0ZSBpbiB0aGVcbiAgICogY29va2llLWF0dHJpYnV0ZS1saXN0XCIuICBUaGVyZWZvcmUsIGluIHRoaXMgaW1wbGVtZW50YXRpb24sIHdlIG92ZXJ3cml0ZVxuICAgKiB0aGUgcHJldmlvdXMgdmFsdWUuXG4gICAqL1xuICB2YXIgY29va2llX2F2cyA9IHVucGFyc2VkLnNwbGl0KCc7Jyk7XG4gIHdoaWxlIChjb29raWVfYXZzLmxlbmd0aCkge1xuICAgIHZhciBhdiA9IGNvb2tpZV9hdnMuc2hpZnQoKS50cmltKCk7XG4gICAgaWYgKGF2Lmxlbmd0aCA9PT0gMCkgeyAvLyBoYXBwZW5zIGlmIFwiOztcIiBhcHBlYXJzXG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGF2X3NlcCA9IGF2LmluZGV4T2YoJz0nKTtcbiAgICB2YXIgYXZfa2V5LCBhdl92YWx1ZTtcblxuICAgIGlmIChhdl9zZXAgPT09IC0xKSB7XG4gICAgICBhdl9rZXkgPSBhdjtcbiAgICAgIGF2X3ZhbHVlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgYXZfa2V5ID0gYXYuc3Vic3RyKDAsYXZfc2VwKTtcbiAgICAgIGF2X3ZhbHVlID0gYXYuc3Vic3RyKGF2X3NlcCsxKTtcbiAgICB9XG5cbiAgICBhdl9rZXkgPSBhdl9rZXkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoYXZfdmFsdWUpIHtcbiAgICAgIGF2X3ZhbHVlID0gYXZfdmFsdWUudHJpbSgpO1xuICAgIH1cblxuICAgIHN3aXRjaChhdl9rZXkpIHtcbiAgICBjYXNlICdleHBpcmVzJzogLy8gUzUuMi4xXG4gICAgICBpZiAoYXZfdmFsdWUpIHtcbiAgICAgICAgdmFyIGV4cCA9IHBhcnNlRGF0ZShhdl92YWx1ZSk7XG4gICAgICAgIC8vIFwiSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBmYWlsZWQgdG8gcGFyc2UgYXMgYSBjb29raWUgZGF0ZSwgaWdub3JlIHRoZVxuICAgICAgICAvLyBjb29raWUtYXYuXCJcbiAgICAgICAgaWYgKGV4cCkge1xuICAgICAgICAgIC8vIG92ZXIgYW5kIHVuZGVyZmxvdyBub3QgcmVhbGlzdGljYWxseSBhIGNvbmNlcm46IFY4J3MgZ2V0VGltZSgpIHNlZW1zIHRvXG4gICAgICAgICAgLy8gc3RvcmUgc29tZXRoaW5nIGxhcmdlciB0aGFuIGEgMzItYml0IHRpbWVfdCAoZXZlbiB3aXRoIDMyLWJpdCBub2RlKVxuICAgICAgICAgIGMuZXhwaXJlcyA9IGV4cDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdtYXgtYWdlJzogLy8gUzUuMi4yXG4gICAgICBpZiAoYXZfdmFsdWUpIHtcbiAgICAgICAgLy8gXCJJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90IGEgRElHSVQgb3IgYSBcIi1cIlxuICAgICAgICAvLyBjaGFyYWN0ZXIgLi4uW29yXS4uLiBJZiB0aGUgcmVtYWluZGVyIG9mIGF0dHJpYnV0ZS12YWx1ZSBjb250YWlucyBhXG4gICAgICAgIC8vIG5vbi1ESUdJVCBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlwiXG4gICAgICAgIGlmICgvXi0/WzAtOV0rJC8udGVzdChhdl92YWx1ZSkpIHtcbiAgICAgICAgICB2YXIgZGVsdGEgPSBwYXJzZUludChhdl92YWx1ZSwgMTApO1xuICAgICAgICAgIC8vIFwiSWYgZGVsdGEtc2Vjb25kcyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybyAoMCksIGxldCBleHBpcnktdGltZVxuICAgICAgICAgIC8vIGJlIHRoZSBlYXJsaWVzdCByZXByZXNlbnRhYmxlIGRhdGUgYW5kIHRpbWUuXCJcbiAgICAgICAgICBjLnNldE1heEFnZShkZWx0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZG9tYWluJzogLy8gUzUuMi4zXG4gICAgICAvLyBcIklmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHksIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuICBIb3dldmVyLFxuICAgICAgLy8gdGhlIHVzZXIgYWdlbnQgU0hPVUxEIGlnbm9yZSB0aGUgY29va2llLWF2IGVudGlyZWx5LlwiXG4gICAgICBpZiAoYXZfdmFsdWUpIHtcbiAgICAgICAgLy8gUzUuMi4zIFwiTGV0IGNvb2tpZS1kb21haW4gYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZSB3aXRob3V0IHRoZSBsZWFkaW5nICV4MkVcbiAgICAgICAgLy8gKFwiLlwiKSBjaGFyYWN0ZXIuXCJcbiAgICAgICAgdmFyIGRvbWFpbiA9IGF2X3ZhbHVlLnRyaW0oKS5yZXBsYWNlKC9eXFwuLywgJycpO1xuICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgLy8gXCJDb252ZXJ0IHRoZSBjb29raWUtZG9tYWluIHRvIGxvd2VyIGNhc2UuXCJcbiAgICAgICAgICBjLmRvbWFpbiA9IGRvbWFpbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3BhdGgnOiAvLyBTNS4yLjRcbiAgICAgIC8qXG4gICAgICAgKiBcIklmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbiAgICAgICAqIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgJXgyRiAoXCIvXCIpOlxuICAgICAgICogICBMZXQgY29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC5cbiAgICAgICAqIE90aGVyd2lzZTpcbiAgICAgICAqICAgTGV0IGNvb2tpZS1wYXRoIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXCJcbiAgICAgICAqXG4gICAgICAgKiBXZSdsbCByZXByZXNlbnQgdGhlIGRlZmF1bHQtcGF0aCBhcyBudWxsIHNpbmNlIGl0IGRlcGVuZHMgb24gdGhlXG4gICAgICAgKiBjb250ZXh0IG9mIHRoZSBwYXJzaW5nLlxuICAgICAgICovXG4gICAgICBjLnBhdGggPSBhdl92YWx1ZSAmJiBhdl92YWx1ZVswXSA9PT0gXCIvXCIgPyBhdl92YWx1ZSA6IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlY3VyZSc6IC8vIFM1LjIuNVxuICAgICAgLypcbiAgICAgICAqIFwiSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJTZWN1cmVcIixcbiAgICAgICAqIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0XG4gICAgICAgKiB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIFNlY3VyZSBhbmQgYW4gZW1wdHkgYXR0cmlidXRlLXZhbHVlLlwiXG4gICAgICAgKi9cbiAgICAgIGMuc2VjdXJlID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaHR0cG9ubHknOiAvLyBTNS4yLjYgLS0gZWZmZWN0aXZlbHkgdGhlIHNhbWUgYXMgJ3NlY3VyZSdcbiAgICAgIGMuaHR0cE9ubHkgPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgYy5leHRlbnNpb25zID0gYy5leHRlbnNpb25zIHx8IFtdO1xuICAgICAgYy5leHRlbnNpb25zLnB1c2goYXYpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGM7XG59XG5cbi8vIGF2b2lkIHRoZSBWOCBkZW9wdGltaXphdGlvbiBtb25zdGVyIVxuZnVuY3Rpb24ganNvblBhcnNlKHN0cikge1xuICB2YXIgb2JqO1xuICB0cnkge1xuICAgIG9iaiA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGZyb21KU09OKHN0cikge1xuICBpZiAoIXN0cikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG9iajtcbiAgaWYgKHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKSB7XG4gICAgb2JqID0ganNvblBhcnNlKHN0cik7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gYXNzdW1lIGl0J3MgYW4gT2JqZWN0XG4gICAgb2JqID0gc3RyO1xuICB9XG5cbiAgdmFyIGMgPSBuZXcgQ29va2llKCk7XG4gIGZvciAodmFyIGk9MDsgaTxDb29raWUuc2VyaWFsaXphYmxlUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcm9wID0gQ29va2llLnNlcmlhbGl6YWJsZVByb3BlcnRpZXNbaV07XG4gICAgaWYgKG9ialtwcm9wXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIG9ialtwcm9wXSA9PT0gQ29va2llLnByb3RvdHlwZVtwcm9wXSlcbiAgICB7XG4gICAgICBjb250aW51ZTsgLy8gbGVhdmUgYXMgcHJvdG90eXBlIGRlZmF1bHRcbiAgICB9XG5cbiAgICBpZiAocHJvcCA9PT0gJ2V4cGlyZXMnIHx8XG4gICAgICAgIHByb3AgPT09ICdjcmVhdGlvbicgfHxcbiAgICAgICAgcHJvcCA9PT0gJ2xhc3RBY2Nlc3NlZCcpXG4gICAge1xuICAgICAgaWYgKG9ialtwcm9wXSA9PT0gbnVsbCkge1xuICAgICAgICBjW3Byb3BdID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNbcHJvcF0gPSBvYmpbcHJvcF0gPT0gXCJJbmZpbml0eVwiID9cbiAgICAgICAgICBcIkluZmluaXR5XCIgOiBuZXcgRGF0ZShvYmpbcHJvcF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjW3Byb3BdID0gb2JqW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjO1xufVxuXG4vKiBTZWN0aW9uIDUuNCBwYXJ0IDI6XG4gKiBcIiogIENvb2tpZXMgd2l0aCBsb25nZXIgcGF0aHMgYXJlIGxpc3RlZCBiZWZvcmUgY29va2llcyB3aXRoXG4gKiAgICAgc2hvcnRlciBwYXRocy5cbiAqXG4gKiAgKiAgQW1vbmcgY29va2llcyB0aGF0IGhhdmUgZXF1YWwtbGVuZ3RoIHBhdGggZmllbGRzLCBjb29raWVzIHdpdGhcbiAqICAgICBlYXJsaWVyIGNyZWF0aW9uLXRpbWVzIGFyZSBsaXN0ZWQgYmVmb3JlIGNvb2tpZXMgd2l0aCBsYXRlclxuICogICAgIGNyZWF0aW9uLXRpbWVzLlwiXG4gKi9cblxuZnVuY3Rpb24gY29va2llQ29tcGFyZShhLGIpIHtcbiAgdmFyIGNtcCA9IDA7XG5cbiAgLy8gZGVzY2VuZGluZyBmb3IgbGVuZ3RoOiBiIENNUCBhXG4gIHZhciBhUGF0aExlbiA9IGEucGF0aCA/IGEucGF0aC5sZW5ndGggOiAwO1xuICB2YXIgYlBhdGhMZW4gPSBiLnBhdGggPyBiLnBhdGgubGVuZ3RoIDogMDtcbiAgY21wID0gYlBhdGhMZW4gLSBhUGF0aExlbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICAvLyBhc2NlbmRpbmcgZm9yIHRpbWU6IGEgQ01QIGJcbiAgdmFyIGFUaW1lID0gYS5jcmVhdGlvbiA/IGEuY3JlYXRpb24uZ2V0VGltZSgpIDogTUFYX1RJTUU7XG4gIHZhciBiVGltZSA9IGIuY3JlYXRpb24gPyBiLmNyZWF0aW9uLmdldFRpbWUoKSA6IE1BWF9USU1FO1xuICBjbXAgPSBhVGltZSAtIGJUaW1lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIC8vIGJyZWFrIHRpZXMgZm9yIHRoZSBzYW1lIG1pbGxpc2Vjb25kIChwcmVjaXNpb24gb2YgSmF2YVNjcmlwdCdzIGNsb2NrKVxuICBjbXAgPSBhLmNyZWF0aW9uSW5kZXggLSBiLmNyZWF0aW9uSW5kZXg7XG5cbiAgcmV0dXJuIGNtcDtcbn1cblxuLy8gR2l2ZXMgdGhlIHBlcm11dGF0aW9uIG9mIGFsbCBwb3NzaWJsZSBwYXRoTWF0Y2goKWVzIG9mIGEgZ2l2ZW4gcGF0aC4gVGhlXG4vLyBhcnJheSBpcyBpbiBsb25nZXN0LXRvLXNob3J0ZXN0IG9yZGVyLiAgSGFuZHkgZm9yIGluZGV4aW5nLlxuZnVuY3Rpb24gcGVybXV0ZVBhdGgocGF0aCkge1xuICBpZiAocGF0aCA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIFsnLyddO1xuICB9XG4gIGlmIChwYXRoLmxhc3RJbmRleE9mKCcvJykgPT09IHBhdGgubGVuZ3RoLTEpIHtcbiAgICBwYXRoID0gcGF0aC5zdWJzdHIoMCxwYXRoLmxlbmd0aC0xKTtcbiAgfVxuICB2YXIgcGVybXV0YXRpb25zID0gW3BhdGhdO1xuICB3aGlsZSAocGF0aC5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGxpbmRleCA9IHBhdGgubGFzdEluZGV4T2YoJy8nKTtcbiAgICBpZiAobGluZGV4ID09PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcGF0aCA9IHBhdGguc3Vic3RyKDAsbGluZGV4KTtcbiAgICBwZXJtdXRhdGlvbnMucHVzaChwYXRoKTtcbiAgfVxuICBwZXJtdXRhdGlvbnMucHVzaCgnLycpO1xuICByZXR1cm4gcGVybXV0YXRpb25zO1xufVxuXG5mdW5jdGlvbiBnZXRDb29raWVDb250ZXh0KHVybCkge1xuICBpZiAodXJsIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICAvLyBOT1RFOiBkZWNvZGVVUkkgd2lsbCB0aHJvdyBvbiBtYWxmb3JtZWQgVVJJcyAoc2VlIEdILTMyKS5cbiAgLy8gVGhlcmVmb3JlLCB3ZSB3aWxsIGp1c3Qgc2tpcCBkZWNvZGluZyBmb3Igc3VjaCBVUklzLlxuICB0cnkge1xuICAgIHVybCA9IGRlY29kZVVSSSh1cmwpO1xuICB9XG4gIGNhdGNoKGVycikge1xuICAgIC8vIFNpbGVudGx5IHN3YWxsb3cgZXJyb3JcbiAgfVxuXG4gIHJldHVybiB1cmxQYXJzZSh1cmwpO1xufVxuXG5mdW5jdGlvbiBDb29raWUob3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgICBpZiAoQ29va2llLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxuICAgICAgICBDb29raWUucHJvdG90eXBlW3Byb3BdICE9PSBvcHRpb25zW3Byb3BdICYmXG4gICAgICAgIHByb3Auc3Vic3RyKDAsMSkgIT09ICdfJylcbiAgICB7XG4gICAgICB0aGlzW3Byb3BdID0gb3B0aW9uc1twcm9wXTtcbiAgICB9XG4gIH0sIHRoaXMpO1xuXG4gIHRoaXMuY3JlYXRpb24gPSB0aGlzLmNyZWF0aW9uIHx8IG5ldyBEYXRlKCk7XG5cbiAgLy8gdXNlZCB0byBicmVhayBjcmVhdGlvbiB0aWVzIGluIGNvb2tpZUNvbXBhcmUoKTpcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjcmVhdGlvbkluZGV4Jywge1xuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsIC8vIGltcG9ydGFudCBmb3IgYXNzZXJ0LmRlZXBFcXVhbCBjaGVja3NcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogKytDb29raWUuY29va2llc0NyZWF0ZWRcbiAgfSk7XG59XG5cbkNvb2tpZS5jb29raWVzQ3JlYXRlZCA9IDA7IC8vIGluY3JlbWVudGVkIGVhY2ggdGltZSBhIGNvb2tpZSBpcyBjcmVhdGVkXG5cbkNvb2tpZS5wYXJzZSA9IHBhcnNlO1xuQ29va2llLmZyb21KU09OID0gZnJvbUpTT047XG5cbkNvb2tpZS5wcm90b3R5cGUua2V5ID0gXCJcIjtcbkNvb2tpZS5wcm90b3R5cGUudmFsdWUgPSBcIlwiO1xuXG4vLyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIFJGQyBoYXMgdGhlbTpcbkNvb2tpZS5wcm90b3R5cGUuZXhwaXJlcyA9IFwiSW5maW5pdHlcIjsgLy8gY29lcmNlcyB0byBsaXRlcmFsIEluZmluaXR5XG5Db29raWUucHJvdG90eXBlLm1heEFnZSA9IG51bGw7IC8vIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBleHBpcmVzIGZvciBUVExcbkNvb2tpZS5wcm90b3R5cGUuZG9tYWluID0gbnVsbDtcbkNvb2tpZS5wcm90b3R5cGUucGF0aCA9IG51bGw7XG5Db29raWUucHJvdG90eXBlLnNlY3VyZSA9IGZhbHNlO1xuQ29va2llLnByb3RvdHlwZS5odHRwT25seSA9IGZhbHNlO1xuQ29va2llLnByb3RvdHlwZS5leHRlbnNpb25zID0gbnVsbDtcblxuLy8gc2V0IGJ5IHRoZSBDb29raWVKYXI6XG5Db29raWUucHJvdG90eXBlLmhvc3RPbmx5ID0gbnVsbDsgLy8gYm9vbGVhbiB3aGVuIHNldFxuQ29va2llLnByb3RvdHlwZS5wYXRoSXNEZWZhdWx0ID0gbnVsbDsgLy8gYm9vbGVhbiB3aGVuIHNldFxuQ29va2llLnByb3RvdHlwZS5jcmVhdGlvbiA9IG51bGw7IC8vIERhdGUgd2hlbiBzZXQ7IGRlZmF1bHRlZCBieSBDb29raWUucGFyc2VcbkNvb2tpZS5wcm90b3R5cGUubGFzdEFjY2Vzc2VkID0gbnVsbDsgLy8gRGF0ZSB3aGVuIHNldFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENvb2tpZS5wcm90b3R5cGUsICdjcmVhdGlvbkluZGV4Jywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxuICB3cml0YWJsZTogdHJ1ZSxcbiAgdmFsdWU6IDBcbn0pO1xuXG5Db29raWUuc2VyaWFsaXphYmxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKENvb2tpZS5wcm90b3R5cGUpXG4gIC5maWx0ZXIoZnVuY3Rpb24ocHJvcCkge1xuICAgIHJldHVybiAhKFxuICAgICAgQ29va2llLnByb3RvdHlwZVtwcm9wXSBpbnN0YW5jZW9mIEZ1bmN0aW9uIHx8XG4gICAgICBwcm9wID09PSAnY3JlYXRpb25JbmRleCcgfHxcbiAgICAgIHByb3Auc3Vic3RyKDAsMSkgPT09ICdfJ1xuICAgICk7XG4gIH0pO1xuXG5Db29raWUucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgcmV0dXJuICdDb29raWU9XCInK3RoaXMudG9TdHJpbmcoKSArXG4gICAgJzsgaG9zdE9ubHk9JysodGhpcy5ob3N0T25seSAhPSBudWxsID8gdGhpcy5ob3N0T25seSA6ICc/JykgK1xuICAgICc7IGFBZ2U9JysodGhpcy5sYXN0QWNjZXNzZWQgPyAobm93LXRoaXMubGFzdEFjY2Vzc2VkLmdldFRpbWUoKSkrJ21zJyA6ICc/JykgK1xuICAgICc7IGNBZ2U9JysodGhpcy5jcmVhdGlvbiA/IChub3ctdGhpcy5jcmVhdGlvbi5nZXRUaW1lKCkpKydtcycgOiAnPycpICtcbiAgICAnXCInO1xufTtcblxuQ29va2llLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbigpIHtcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIHZhciBwcm9wcyA9IENvb2tpZS5zZXJpYWxpemFibGVQcm9wZXJ0aWVzO1xuICBmb3IgKHZhciBpPTA7IGk8cHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHJvcCA9IHByb3BzW2ldO1xuICAgIGlmICh0aGlzW3Byb3BdID09PSBDb29raWUucHJvdG90eXBlW3Byb3BdKSB7XG4gICAgICBjb250aW51ZTsgLy8gbGVhdmUgYXMgcHJvdG90eXBlIGRlZmF1bHRcbiAgICB9XG5cbiAgICBpZiAocHJvcCA9PT0gJ2V4cGlyZXMnIHx8XG4gICAgICAgIHByb3AgPT09ICdjcmVhdGlvbicgfHxcbiAgICAgICAgcHJvcCA9PT0gJ2xhc3RBY2Nlc3NlZCcpXG4gICAge1xuICAgICAgaWYgKHRoaXNbcHJvcF0gPT09IG51bGwpIHtcbiAgICAgICAgb2JqW3Byb3BdID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtwcm9wXSA9IHRoaXNbcHJvcF0gPT0gXCJJbmZpbml0eVwiID8gLy8gaW50ZW50aW9uYWxseSBub3QgPT09XG4gICAgICAgICAgXCJJbmZpbml0eVwiIDogdGhpc1twcm9wXS50b0lTT1N0cmluZygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ21heEFnZScpIHtcbiAgICAgIGlmICh0aGlzW3Byb3BdICE9PSBudWxsKSB7XG4gICAgICAgIC8vIGFnYWluLCBpbnRlbnRpb25hbGx5IG5vdCA9PT1cbiAgICAgICAgb2JqW3Byb3BdID0gKHRoaXNbcHJvcF0gPT0gSW5maW5pdHkgfHwgdGhpc1twcm9wXSA9PSAtSW5maW5pdHkpID9cbiAgICAgICAgICB0aGlzW3Byb3BdLnRvU3RyaW5nKCkgOiB0aGlzW3Byb3BdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpc1twcm9wXSAhPT0gQ29va2llLnByb3RvdHlwZVtwcm9wXSkge1xuICAgICAgICBvYmpbcHJvcF0gPSB0aGlzW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG5Db29raWUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBmcm9tSlNPTih0aGlzLnRvSlNPTigpKTtcbn07XG5cbkNvb2tpZS5wcm90b3R5cGUudmFsaWRhdGUgPSBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgaWYgKCFDT09LSUVfT0NURVRTLnRlc3QodGhpcy52YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHRoaXMuZXhwaXJlcyAhPSBJbmZpbml0eSAmJiAhKHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGUpICYmICFwYXJzZURhdGUodGhpcy5leHBpcmVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodGhpcy5tYXhBZ2UgIT0gbnVsbCAmJiB0aGlzLm1heEFnZSA8PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBcIk1heC1BZ2U9XCIgbm9uLXplcm8tZGlnaXQgKkRJR0lUXG4gIH1cbiAgaWYgKHRoaXMucGF0aCAhPSBudWxsICYmICFQQVRIX1ZBTFVFLnRlc3QodGhpcy5wYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBjZG9tYWluID0gdGhpcy5jZG9tYWluKCk7XG4gIGlmIChjZG9tYWluKSB7XG4gICAgaWYgKGNkb21haW4ubWF0Y2goL1xcLiQvKSkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBTNC4xLjIuMyBzdWdnZXN0cyB0aGF0IHRoaXMgaXMgYmFkLiBkb21haW5NYXRjaCgpIHRlc3RzIGNvbmZpcm0gdGhpc1xuICAgIH1cbiAgICB2YXIgc3VmZml4ID0gcHVic3VmZml4LmdldFB1YmxpY1N1ZmZpeChjZG9tYWluKTtcbiAgICBpZiAoc3VmZml4ID09IG51bGwpIHsgLy8gaXQncyBhIHB1YmxpYyBzdWZmaXhcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5Db29raWUucHJvdG90eXBlLnNldEV4cGlyZXMgPSBmdW5jdGlvbiBzZXRFeHBpcmVzKGV4cCkge1xuICBpZiAoZXhwIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHRoaXMuZXhwaXJlcyA9IGV4cDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmV4cGlyZXMgPSBwYXJzZURhdGUoZXhwKSB8fCBcIkluZmluaXR5XCI7XG4gIH1cbn07XG5cbkNvb2tpZS5wcm90b3R5cGUuc2V0TWF4QWdlID0gZnVuY3Rpb24gc2V0TWF4QWdlKGFnZSkge1xuICBpZiAoYWdlID09PSBJbmZpbml0eSB8fCBhZ2UgPT09IC1JbmZpbml0eSkge1xuICAgIHRoaXMubWF4QWdlID0gYWdlLnRvU3RyaW5nKCk7IC8vIHNvIEpTT04uc3RyaW5naWZ5KCkgd29ya3NcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1heEFnZSA9IGFnZTtcbiAgfVxufTtcblxuLy8gZ2l2ZXMgQ29va2llIGhlYWRlciBmb3JtYXRcbkNvb2tpZS5wcm90b3R5cGUuY29va2llU3RyaW5nID0gZnVuY3Rpb24gY29va2llU3RyaW5nKCkge1xuICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgdmFsID0gJyc7XG4gIH1cbiAgaWYgKHRoaXMua2V5ID09PSAnJykge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcmV0dXJuIHRoaXMua2V5Kyc9Jyt2YWw7XG59O1xuXG4vLyBnaXZlcyBTZXQtQ29va2llIGhlYWRlciBmb3JtYXRcbkNvb2tpZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgdmFyIHN0ciA9IHRoaXMuY29va2llU3RyaW5nKCk7XG5cbiAgaWYgKHRoaXMuZXhwaXJlcyAhPSBJbmZpbml0eSkge1xuICAgIGlmICh0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBzdHIgKz0gJzsgRXhwaXJlcz0nK2Zvcm1hdERhdGUodGhpcy5leHBpcmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9ICc7IEV4cGlyZXM9Jyt0aGlzLmV4cGlyZXM7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMubWF4QWdlICE9IG51bGwgJiYgdGhpcy5tYXhBZ2UgIT0gSW5maW5pdHkpIHtcbiAgICBzdHIgKz0gJzsgTWF4LUFnZT0nK3RoaXMubWF4QWdlO1xuICB9XG5cbiAgaWYgKHRoaXMuZG9tYWluICYmICF0aGlzLmhvc3RPbmx5KSB7XG4gICAgc3RyICs9ICc7IERvbWFpbj0nK3RoaXMuZG9tYWluO1xuICB9XG4gIGlmICh0aGlzLnBhdGgpIHtcbiAgICBzdHIgKz0gJzsgUGF0aD0nK3RoaXMucGF0aDtcbiAgfVxuXG4gIGlmICh0aGlzLnNlY3VyZSkge1xuICAgIHN0ciArPSAnOyBTZWN1cmUnO1xuICB9XG4gIGlmICh0aGlzLmh0dHBPbmx5KSB7XG4gICAgc3RyICs9ICc7IEh0dHBPbmx5JztcbiAgfVxuICBpZiAodGhpcy5leHRlbnNpb25zKSB7XG4gICAgdGhpcy5leHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24oZXh0KSB7XG4gICAgICBzdHIgKz0gJzsgJytleHQ7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxuLy8gVFRMKCkgcGFydGlhbGx5IHJlcGxhY2VzIHRoZSBcImV4cGlyeS10aW1lXCIgcGFydHMgb2YgUzUuMyBzdGVwIDMgKHNldENvb2tpZSgpXG4vLyBlbHNld2hlcmUpXG4vLyBTNS4zIHNheXMgdG8gZ2l2ZSB0aGUgXCJsYXRlc3QgcmVwcmVzZW50YWJsZSBkYXRlXCIgZm9yIHdoaWNoIHdlIHVzZSBJbmZpbml0eVxuLy8gRm9yIFwiZXhwaXJlZFwiIHdlIHVzZSAwXG5Db29raWUucHJvdG90eXBlLlRUTCA9IGZ1bmN0aW9uIFRUTChub3cpIHtcbiAgLyogUkZDNjI2NSBTNC4xLjIuMiBJZiBhIGNvb2tpZSBoYXMgYm90aCB0aGUgTWF4LUFnZSBhbmQgdGhlIEV4cGlyZXNcbiAgICogYXR0cmlidXRlLCB0aGUgTWF4LUFnZSBhdHRyaWJ1dGUgaGFzIHByZWNlZGVuY2UgYW5kIGNvbnRyb2xzIHRoZVxuICAgKiBleHBpcmF0aW9uIGRhdGUgb2YgdGhlIGNvb2tpZS5cbiAgICogKENvbmN1cnMgd2l0aCBTNS4zIHN0ZXAgMylcbiAgICovXG4gIGlmICh0aGlzLm1heEFnZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMubWF4QWdlPD0wID8gMCA6IHRoaXMubWF4QWdlKjEwMDA7XG4gIH1cblxuICB2YXIgZXhwaXJlcyA9IHRoaXMuZXhwaXJlcztcbiAgaWYgKGV4cGlyZXMgIT0gSW5maW5pdHkpIHtcbiAgICBpZiAoIShleHBpcmVzIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgIGV4cGlyZXMgPSBwYXJzZURhdGUoZXhwaXJlcykgfHwgSW5maW5pdHk7XG4gICAgfVxuXG4gICAgaWYgKGV4cGlyZXMgPT0gSW5maW5pdHkpIHtcbiAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwaXJlcy5nZXRUaW1lKCkgLSAobm93IHx8IERhdGUubm93KCkpO1xuICB9XG5cbiAgcmV0dXJuIEluZmluaXR5O1xufTtcblxuLy8gZXhwaXJ5VGltZSgpIHJlcGxhY2VzIHRoZSBcImV4cGlyeS10aW1lXCIgcGFydHMgb2YgUzUuMyBzdGVwIDMgKHNldENvb2tpZSgpXG4vLyBlbHNld2hlcmUpXG5Db29raWUucHJvdG90eXBlLmV4cGlyeVRpbWUgPSBmdW5jdGlvbiBleHBpcnlUaW1lKG5vdykge1xuICBpZiAodGhpcy5tYXhBZ2UgIT0gbnVsbCkge1xuICAgIHZhciByZWxhdGl2ZVRvID0gbm93IHx8IHRoaXMuY3JlYXRpb24gfHwgbmV3IERhdGUoKTtcbiAgICB2YXIgYWdlID0gKHRoaXMubWF4QWdlIDw9IDApID8gLUluZmluaXR5IDogdGhpcy5tYXhBZ2UqMTAwMDtcbiAgICByZXR1cm4gcmVsYXRpdmVUby5nZXRUaW1lKCkgKyBhZ2U7XG4gIH1cblxuICBpZiAodGhpcy5leHBpcmVzID09IEluZmluaXR5KSB7XG4gICAgcmV0dXJuIEluZmluaXR5O1xuICB9XG4gIHJldHVybiB0aGlzLmV4cGlyZXMuZ2V0VGltZSgpO1xufTtcblxuLy8gZXhwaXJ5RGF0ZSgpIHJlcGxhY2VzIHRoZSBcImV4cGlyeS10aW1lXCIgcGFydHMgb2YgUzUuMyBzdGVwIDMgKHNldENvb2tpZSgpXG4vLyBlbHNld2hlcmUpLCBleGNlcHQgaXQgcmV0dXJucyBhIERhdGVcbkNvb2tpZS5wcm90b3R5cGUuZXhwaXJ5RGF0ZSA9IGZ1bmN0aW9uIGV4cGlyeURhdGUobm93KSB7XG4gIHZhciBtaWxsaXNlYyA9IHRoaXMuZXhwaXJ5VGltZShub3cpO1xuICBpZiAobWlsbGlzZWMgPT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoTUFYX1RJTUUpO1xuICB9IGVsc2UgaWYgKG1pbGxpc2VjID09IC1JbmZpbml0eSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShNSU5fVElNRSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKG1pbGxpc2VjKTtcbiAgfVxufTtcblxuLy8gVGhpcyByZXBsYWNlcyB0aGUgXCJwZXJzaXN0ZW50LWZsYWdcIiBwYXJ0cyBvZiBTNS4zIHN0ZXAgM1xuQ29va2llLnByb3RvdHlwZS5pc1BlcnNpc3RlbnQgPSBmdW5jdGlvbiBpc1BlcnNpc3RlbnQoKSB7XG4gIHJldHVybiAodGhpcy5tYXhBZ2UgIT0gbnVsbCB8fCB0aGlzLmV4cGlyZXMgIT0gSW5maW5pdHkpO1xufTtcblxuLy8gTW9zdGx5IFM1LjEuMiBhbmQgUzUuMi4zOlxuQ29va2llLnByb3RvdHlwZS5jZG9tYWluID1cbkNvb2tpZS5wcm90b3R5cGUuY2Fub25pY2FsaXplZERvbWFpbiA9IGZ1bmN0aW9uIGNhbm9uaWNhbGl6ZWREb21haW4oKSB7XG4gIGlmICh0aGlzLmRvbWFpbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGNhbm9uaWNhbERvbWFpbih0aGlzLmRvbWFpbik7XG59O1xuXG5mdW5jdGlvbiBDb29raWVKYXIoc3RvcmUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImJvb2xlYW5cIikge1xuICAgIG9wdGlvbnMgPSB7cmVqZWN0UHVibGljU3VmZml4ZXM6IG9wdGlvbnN9O1xuICB9IGVsc2UgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBpZiAob3B0aW9ucy5yZWplY3RQdWJsaWNTdWZmaXhlcyAhPSBudWxsKSB7XG4gICAgdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyA9IG9wdGlvbnMucmVqZWN0UHVibGljU3VmZml4ZXM7XG4gIH1cbiAgaWYgKG9wdGlvbnMubG9vc2VNb2RlICE9IG51bGwpIHtcbiAgICB0aGlzLmVuYWJsZUxvb3NlTW9kZSA9IG9wdGlvbnMubG9vc2VNb2RlO1xuICB9XG5cbiAgaWYgKCFzdG9yZSkge1xuICAgIHN0b3JlID0gbmV3IE1lbW9yeUNvb2tpZVN0b3JlKCk7XG4gIH1cbiAgdGhpcy5zdG9yZSA9IHN0b3JlO1xufVxuQ29va2llSmFyLnByb3RvdHlwZS5zdG9yZSA9IG51bGw7XG5Db29raWVKYXIucHJvdG90eXBlLnJlamVjdFB1YmxpY1N1ZmZpeGVzID0gdHJ1ZTtcbkNvb2tpZUphci5wcm90b3R5cGUuZW5hYmxlTG9vc2VNb2RlID0gZmFsc2U7XG52YXIgQ0FOX0JFX1NZTkMgPSBbXTtcblxuQ0FOX0JFX1NZTkMucHVzaCgnc2V0Q29va2llJyk7XG5Db29raWVKYXIucHJvdG90eXBlLnNldENvb2tpZSA9IGZ1bmN0aW9uKGNvb2tpZSwgdXJsLCBvcHRpb25zLCBjYikge1xuICB2YXIgZXJyO1xuICB2YXIgY29udGV4dCA9IGdldENvb2tpZUNvbnRleHQodXJsKTtcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIGNiID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgaG9zdCA9IGNhbm9uaWNhbERvbWFpbihjb250ZXh0Lmhvc3RuYW1lKTtcbiAgdmFyIGxvb3NlID0gdGhpcy5lbmFibGVMb29zZU1vZGU7XG4gIGlmIChvcHRpb25zLmxvb3NlICE9IG51bGwpIHtcbiAgICBsb29zZSA9IG9wdGlvbnMubG9vc2U7XG4gIH1cblxuICAvLyBTNS4zIHN0ZXAgMVxuICBpZiAoIShjb29raWUgaW5zdGFuY2VvZiBDb29raWUpKSB7XG4gICAgY29va2llID0gQ29va2llLnBhcnNlKGNvb2tpZSwgeyBsb29zZTogbG9vc2UgfSk7XG4gIH1cbiAgaWYgKCFjb29raWUpIHtcbiAgICBlcnIgPSBuZXcgRXJyb3IoXCJDb29raWUgZmFpbGVkIHRvIHBhcnNlXCIpO1xuICAgIHJldHVybiBjYihvcHRpb25zLmlnbm9yZUVycm9yID8gbnVsbCA6IGVycik7XG4gIH1cblxuICAvLyBTNS4zIHN0ZXAgMlxuICB2YXIgbm93ID0gb3B0aW9ucy5ub3cgfHwgbmV3IERhdGUoKTsgLy8gd2lsbCBhc3NpZ24gbGF0ZXIgdG8gc2F2ZSBlZmZvcnQgaW4gdGhlIGZhY2Ugb2YgZXJyb3JzXG5cbiAgLy8gUzUuMyBzdGVwIDM6IE5PT1A7IHBlcnNpc3RlbnQtZmxhZyBhbmQgZXhwaXJ5LXRpbWUgaXMgaGFuZGxlZCBieSBnZXRDb29raWUoKVxuXG4gIC8vIFM1LjMgc3RlcCA0OiBOT09QOyBkb21haW4gaXMgbnVsbCBieSBkZWZhdWx0XG5cbiAgLy8gUzUuMyBzdGVwIDU6IHB1YmxpYyBzdWZmaXhlc1xuICBpZiAodGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyAmJiBjb29raWUuZG9tYWluKSB7XG4gICAgdmFyIHN1ZmZpeCA9IHB1YnN1ZmZpeC5nZXRQdWJsaWNTdWZmaXgoY29va2llLmNkb21haW4oKSk7XG4gICAgaWYgKHN1ZmZpeCA9PSBudWxsKSB7IC8vIGUuZy4gXCJjb21cIlxuICAgICAgZXJyID0gbmV3IEVycm9yKFwiQ29va2llIGhhcyBkb21haW4gc2V0IHRvIGEgcHVibGljIHN1ZmZpeFwiKTtcbiAgICAgIHJldHVybiBjYihvcHRpb25zLmlnbm9yZUVycm9yID8gbnVsbCA6IGVycik7XG4gICAgfVxuICB9XG5cbiAgLy8gUzUuMyBzdGVwIDY6XG4gIGlmIChjb29raWUuZG9tYWluKSB7XG4gICAgaWYgKCFkb21haW5NYXRjaChob3N0LCBjb29raWUuY2RvbWFpbigpLCBmYWxzZSkpIHtcbiAgICAgIGVyciA9IG5ldyBFcnJvcihcIkNvb2tpZSBub3QgaW4gdGhpcyBob3N0J3MgZG9tYWluLiBDb29raWU6XCIrY29va2llLmNkb21haW4oKStcIiBSZXF1ZXN0OlwiK2hvc3QpO1xuICAgICAgcmV0dXJuIGNiKG9wdGlvbnMuaWdub3JlRXJyb3IgPyBudWxsIDogZXJyKTtcbiAgICB9XG5cbiAgICBpZiAoY29va2llLmhvc3RPbmx5ID09IG51bGwpIHsgLy8gZG9uJ3QgcmVzZXQgaWYgYWxyZWFkeSBzZXRcbiAgICAgIGNvb2tpZS5ob3N0T25seSA9IGZhbHNlO1xuICAgIH1cblxuICB9IGVsc2Uge1xuICAgIGNvb2tpZS5ob3N0T25seSA9IHRydWU7XG4gICAgY29va2llLmRvbWFpbiA9IGhvc3Q7XG4gIH1cblxuICAvL1M1LjIuNCBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGVtcHR5IG9yIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlXG4gIC8vYXR0cmlidXRlLXZhbHVlIGlzIG5vdCAleDJGIChcIi9cIik6XG4gIC8vTGV0IGNvb2tpZS1wYXRoIGJlIHRoZSBkZWZhdWx0LXBhdGguXG4gIGlmICghY29va2llLnBhdGggfHwgY29va2llLnBhdGhbMF0gIT09ICcvJykge1xuICAgIGNvb2tpZS5wYXRoID0gZGVmYXVsdFBhdGgoY29udGV4dC5wYXRobmFtZSk7XG4gICAgY29va2llLnBhdGhJc0RlZmF1bHQgPSB0cnVlO1xuICB9XG5cbiAgLy8gUzUuMyBzdGVwIDg6IE5PT1A7IHNlY3VyZSBhdHRyaWJ1dGVcbiAgLy8gUzUuMyBzdGVwIDk6IE5PT1A7IGh0dHBPbmx5IGF0dHJpYnV0ZVxuXG4gIC8vIFM1LjMgc3RlcCAxMFxuICBpZiAob3B0aW9ucy5odHRwID09PSBmYWxzZSAmJiBjb29raWUuaHR0cE9ubHkpIHtcbiAgICBlcnIgPSBuZXcgRXJyb3IoXCJDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUElcIik7XG4gICAgcmV0dXJuIGNiKG9wdGlvbnMuaWdub3JlRXJyb3IgPyBudWxsIDogZXJyKTtcbiAgfVxuXG4gIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG5cbiAgaWYgKCFzdG9yZS51cGRhdGVDb29raWUpIHtcbiAgICBzdG9yZS51cGRhdGVDb29raWUgPSBmdW5jdGlvbihvbGRDb29raWUsIG5ld0Nvb2tpZSwgY2IpIHtcbiAgICAgIHRoaXMucHV0Q29va2llKG5ld0Nvb2tpZSwgY2IpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB3aXRoQ29va2llKGVyciwgb2xkQ29va2llKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgfVxuXG4gICAgdmFyIG5leHQgPSBmdW5jdGlvbihlcnIpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYihudWxsLCBjb29raWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAob2xkQ29va2llKSB7XG4gICAgICAvLyBTNS4zIHN0ZXAgMTEgLSBcIklmIHRoZSBjb29raWUgc3RvcmUgY29udGFpbnMgYSBjb29raWUgd2l0aCB0aGUgc2FtZSBuYW1lLFxuICAgICAgLy8gZG9tYWluLCBhbmQgcGF0aCBhcyB0aGUgbmV3bHkgY3JlYXRlZCBjb29raWU6XCJcbiAgICAgIGlmIChvcHRpb25zLmh0dHAgPT09IGZhbHNlICYmIG9sZENvb2tpZS5odHRwT25seSkgeyAvLyBzdGVwIDExLjJcbiAgICAgICAgZXJyID0gbmV3IEVycm9yKFwib2xkIENvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSVwiKTtcbiAgICAgICAgcmV0dXJuIGNiKG9wdGlvbnMuaWdub3JlRXJyb3IgPyBudWxsIDogZXJyKTtcbiAgICAgIH1cbiAgICAgIGNvb2tpZS5jcmVhdGlvbiA9IG9sZENvb2tpZS5jcmVhdGlvbjsgLy8gc3RlcCAxMS4zXG4gICAgICBjb29raWUuY3JlYXRpb25JbmRleCA9IG9sZENvb2tpZS5jcmVhdGlvbkluZGV4OyAvLyBwcmVzZXJ2ZSB0aWUtYnJlYWtlclxuICAgICAgY29va2llLmxhc3RBY2Nlc3NlZCA9IG5vdztcbiAgICAgIC8vIFN0ZXAgMTEuNCAoZGVsZXRlIGNvb2tpZSkgaXMgaW1wbGllZCBieSBqdXN0IHNldHRpbmcgdGhlIG5ldyBvbmU6XG4gICAgICBzdG9yZS51cGRhdGVDb29raWUob2xkQ29va2llLCBjb29raWUsIG5leHQpOyAvLyBzdGVwIDEyXG5cbiAgICB9IGVsc2Uge1xuICAgICAgY29va2llLmNyZWF0aW9uID0gY29va2llLmxhc3RBY2Nlc3NlZCA9IG5vdztcbiAgICAgIHN0b3JlLnB1dENvb2tpZShjb29raWUsIG5leHQpOyAvLyBzdGVwIDEyXG4gICAgfVxuICB9XG5cbiAgc3RvcmUuZmluZENvb2tpZShjb29raWUuZG9tYWluLCBjb29raWUucGF0aCwgY29va2llLmtleSwgd2l0aENvb2tpZSk7XG59O1xuXG4vLyBSRkM2MzY1IFM1LjRcbkNBTl9CRV9TWU5DLnB1c2goJ2dldENvb2tpZXMnKTtcbkNvb2tpZUphci5wcm90b3R5cGUuZ2V0Q29va2llcyA9IGZ1bmN0aW9uKHVybCwgb3B0aW9ucywgY2IpIHtcbiAgdmFyIGNvbnRleHQgPSBnZXRDb29raWVDb250ZXh0KHVybCk7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICBjYiA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIGhvc3QgPSBjYW5vbmljYWxEb21haW4oY29udGV4dC5ob3N0bmFtZSk7XG4gIHZhciBwYXRoID0gY29udGV4dC5wYXRobmFtZSB8fCAnLyc7XG5cbiAgdmFyIHNlY3VyZSA9IG9wdGlvbnMuc2VjdXJlO1xuICBpZiAoc2VjdXJlID09IG51bGwgJiYgY29udGV4dC5wcm90b2NvbCAmJlxuICAgICAgKGNvbnRleHQucHJvdG9jb2wgPT0gJ2h0dHBzOicgfHwgY29udGV4dC5wcm90b2NvbCA9PSAnd3NzOicpKVxuICB7XG4gICAgc2VjdXJlID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBodHRwID0gb3B0aW9ucy5odHRwO1xuICBpZiAoaHR0cCA9PSBudWxsKSB7XG4gICAgaHR0cCA9IHRydWU7XG4gIH1cblxuICB2YXIgbm93ID0gb3B0aW9ucy5ub3cgfHwgRGF0ZS5ub3coKTtcbiAgdmFyIGV4cGlyZUNoZWNrID0gb3B0aW9ucy5leHBpcmUgIT09IGZhbHNlO1xuICB2YXIgYWxsUGF0aHMgPSAhIW9wdGlvbnMuYWxsUGF0aHM7XG4gIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG5cbiAgZnVuY3Rpb24gbWF0Y2hpbmdDb29raWUoYykge1xuICAgIC8vIFwiRWl0aGVyOlxuICAgIC8vICAgVGhlIGNvb2tpZSdzIGhvc3Qtb25seS1mbGFnIGlzIHRydWUgYW5kIHRoZSBjYW5vbmljYWxpemVkXG4gICAgLy8gICByZXF1ZXN0LWhvc3QgaXMgaWRlbnRpY2FsIHRvIHRoZSBjb29raWUncyBkb21haW4uXG4gICAgLy8gT3I6XG4gICAgLy8gICBUaGUgY29va2llJ3MgaG9zdC1vbmx5LWZsYWcgaXMgZmFsc2UgYW5kIHRoZSBjYW5vbmljYWxpemVkXG4gICAgLy8gICByZXF1ZXN0LWhvc3QgZG9tYWluLW1hdGNoZXMgdGhlIGNvb2tpZSdzIGRvbWFpbi5cIlxuICAgIGlmIChjLmhvc3RPbmx5KSB7XG4gICAgICBpZiAoYy5kb21haW4gIT0gaG9zdCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZG9tYWluTWF0Y2goaG9zdCwgYy5kb21haW4sIGZhbHNlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gXCJUaGUgcmVxdWVzdC11cmkncyBwYXRoIHBhdGgtbWF0Y2hlcyB0aGUgY29va2llJ3MgcGF0aC5cIlxuICAgIGlmICghYWxsUGF0aHMgJiYgIXBhdGhNYXRjaChwYXRoLCBjLnBhdGgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gXCJJZiB0aGUgY29va2llJ3Mgc2VjdXJlLW9ubHktZmxhZyBpcyB0cnVlLCB0aGVuIHRoZSByZXF1ZXN0LXVyaSdzXG4gICAgLy8gc2NoZW1lIG11c3QgZGVub3RlIGEgXCJzZWN1cmVcIiBwcm90b2NvbFwiXG4gICAgaWYgKGMuc2VjdXJlICYmICFzZWN1cmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBcIklmIHRoZSBjb29raWUncyBodHRwLW9ubHktZmxhZyBpcyB0cnVlLCB0aGVuIGV4Y2x1ZGUgdGhlIGNvb2tpZSBpZiB0aGVcbiAgICAvLyBjb29raWUtc3RyaW5nIGlzIGJlaW5nIGdlbmVyYXRlZCBmb3IgYSBcIm5vbi1IVFRQXCIgQVBJXCJcbiAgICBpZiAoYy5odHRwT25seSAmJiAhaHR0cCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIGRlZmVycmVkIGZyb20gUzUuM1xuICAgIC8vIG5vbi1SRkM6IGFsbG93IHJldGVudGlvbiBvZiBleHBpcmVkIGNvb2tpZXMgYnkgY2hvaWNlXG4gICAgaWYgKGV4cGlyZUNoZWNrICYmIGMuZXhwaXJ5VGltZSgpIDw9IG5vdykge1xuICAgICAgc3RvcmUucmVtb3ZlQ29va2llKGMuZG9tYWluLCBjLnBhdGgsIGMua2V5LCBmdW5jdGlvbigpe30pOyAvLyByZXN1bHQgaWdub3JlZFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RvcmUuZmluZENvb2tpZXMoaG9zdCwgYWxsUGF0aHMgPyBudWxsIDogcGF0aCwgZnVuY3Rpb24oZXJyLGNvb2tpZXMpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICB9XG5cbiAgICBjb29raWVzID0gY29va2llcy5maWx0ZXIobWF0Y2hpbmdDb29raWUpO1xuXG4gICAgLy8gc29ydGluZyBvZiBTNS40IHBhcnQgMlxuICAgIGlmIChvcHRpb25zLnNvcnQgIT09IGZhbHNlKSB7XG4gICAgICBjb29raWVzID0gY29va2llcy5zb3J0KGNvb2tpZUNvbXBhcmUpO1xuICAgIH1cblxuICAgIC8vIFM1LjQgcGFydCAzXG4gICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgY29va2llcy5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtcbiAgICAgIGMubGFzdEFjY2Vzc2VkID0gbm93O1xuICAgIH0pO1xuICAgIC8vIFRPRE8gcGVyc2lzdCBsYXN0QWNjZXNzZWRcblxuICAgIGNiKG51bGwsY29va2llcyk7XG4gIH0pO1xufTtcblxuQ0FOX0JFX1NZTkMucHVzaCgnZ2V0Q29va2llU3RyaW5nJyk7XG5Db29raWVKYXIucHJvdG90eXBlLmdldENvb2tpZVN0cmluZyA9IGZ1bmN0aW9uKC8qLi4uLCBjYiovKSB7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO1xuICB2YXIgY2IgPSBhcmdzLnBvcCgpO1xuICB2YXIgbmV4dCA9IGZ1bmN0aW9uKGVycixjb29raWVzKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2IoZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2IobnVsbCwgY29va2llc1xuICAgICAgICAuc29ydChjb29raWVDb21wYXJlKVxuICAgICAgICAubWFwKGZ1bmN0aW9uKGMpe1xuICAgICAgICAgIHJldHVybiBjLmNvb2tpZVN0cmluZygpO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignOyAnKSk7XG4gICAgfVxuICB9O1xuICBhcmdzLnB1c2gobmV4dCk7XG4gIHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLGFyZ3MpO1xufTtcblxuQ0FOX0JFX1NZTkMucHVzaCgnZ2V0U2V0Q29va2llU3RyaW5ncycpO1xuQ29va2llSmFyLnByb3RvdHlwZS5nZXRTZXRDb29raWVTdHJpbmdzID0gZnVuY3Rpb24oLyouLi4sIGNiKi8pIHtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7XG4gIHZhciBjYiA9IGFyZ3MucG9wKCk7XG4gIHZhciBuZXh0ID0gZnVuY3Rpb24oZXJyLGNvb2tpZXMpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYihudWxsLCBjb29raWVzLm1hcChmdW5jdGlvbihjKXtcbiAgICAgICAgcmV0dXJuIGMudG9TdHJpbmcoKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH07XG4gIGFyZ3MucHVzaChuZXh0KTtcbiAgdGhpcy5nZXRDb29raWVzLmFwcGx5KHRoaXMsYXJncyk7XG59O1xuXG5DQU5fQkVfU1lOQy5wdXNoKCdzZXJpYWxpemUnKTtcbkNvb2tpZUphci5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24oY2IpIHtcbiAgdmFyIHR5cGUgPSB0aGlzLnN0b3JlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmICh0eXBlID09PSAnT2JqZWN0Jykge1xuICAgIHR5cGUgPSBudWxsO1xuICB9XG5cbiAgLy8gdXBkYXRlIFJFQURNRS5tZCBcIlNlcmlhbGl6YXRpb24gRm9ybWF0XCIgaWYgeW91IGNoYW5nZSB0aGlzLCBwbGVhc2UhXG4gIHZhciBzZXJpYWxpemVkID0ge1xuICAgIC8vIFRoZSB2ZXJzaW9uIG9mIHRvdWdoLWNvb2tpZSB0aGF0IHNlcmlhbGl6ZWQgdGhpcyBqYXIuIEdlbmVyYWxseSBhIGdvb2RcbiAgICAvLyBwcmFjdGljZSBzaW5jZSBmdXR1cmUgdmVyc2lvbnMgY2FuIG1ha2UgZGF0YSBpbXBvcnQgZGVjaXNpb25zIGJhc2VkIG9uXG4gICAgLy8ga25vd24gcGFzdCBiZWhhdmlvci4gV2hlbi9pZiB0aGlzIG1hdHRlcnMsIHVzZSBgc2VtdmVyYC5cbiAgICB2ZXJzaW9uOiAndG91Z2gtY29va2llQCcrVkVSU0lPTixcblxuICAgIC8vIGFkZCB0aGUgc3RvcmUgdHlwZSwgdG8gbWFrZSBodW1hbnMgaGFwcHk6XG4gICAgc3RvcmVUeXBlOiB0eXBlLFxuXG4gICAgLy8gQ29va2llSmFyIGNvbmZpZ3VyYXRpb246XG4gICAgcmVqZWN0UHVibGljU3VmZml4ZXM6ICEhdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyxcblxuICAgIC8vIHRoaXMgZ2V0cyBmaWxsZWQgZnJvbSBnZXRBbGxDb29raWVzOlxuICAgIGNvb2tpZXM6IFtdXG4gIH07XG5cbiAgaWYgKCEodGhpcy5zdG9yZS5nZXRBbGxDb29raWVzICYmXG4gICAgICAgIHR5cGVvZiB0aGlzLnN0b3JlLmdldEFsbENvb2tpZXMgPT09ICdmdW5jdGlvbicpKVxuICB7XG4gICAgcmV0dXJuIGNiKG5ldyBFcnJvcignc3RvcmUgZG9lcyBub3Qgc3VwcG9ydCBnZXRBbGxDb29raWVzIGFuZCBjYW5ub3QgYmUgc2VyaWFsaXplZCcpKTtcbiAgfVxuXG4gIHRoaXMuc3RvcmUuZ2V0QWxsQ29va2llcyhmdW5jdGlvbihlcnIsY29va2llcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJldHVybiBjYihlcnIpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZWQuY29va2llcyA9IGNvb2tpZXMubWFwKGZ1bmN0aW9uKGNvb2tpZSkge1xuICAgICAgLy8gY29udmVydCB0byBzZXJpYWxpemVkICdyYXcnIGNvb2tpZXNcbiAgICAgIGNvb2tpZSA9IChjb29raWUgaW5zdGFuY2VvZiBDb29raWUpID8gY29va2llLnRvSlNPTigpIDogY29va2llO1xuXG4gICAgICAvLyBSZW1vdmUgdGhlIGluZGV4IHNvIG5ldyBvbmVzIGdldCBhc3NpZ25lZCBkdXJpbmcgZGVzZXJpYWxpemF0aW9uXG4gICAgICBkZWxldGUgY29va2llLmNyZWF0aW9uSW5kZXg7XG5cbiAgICAgIHJldHVybiBjb29raWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2IobnVsbCwgc2VyaWFsaXplZCk7XG4gIH0pO1xufTtcblxuLy8gd2VsbC1rbm93biBuYW1lIHRoYXQgSlNPTi5zdHJpbmdpZnkgY2FsbHNcbkNvb2tpZUphci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNlcmlhbGl6ZVN5bmMoKTtcbn07XG5cbi8vIHVzZSB0aGUgY2xhc3MgbWV0aG9kIENvb2tpZUphci5kZXNlcmlhbGl6ZSBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhpcyBkaXJlY3RseVxuQ0FOX0JFX1NZTkMucHVzaCgnX2ltcG9ydENvb2tpZXMnKTtcbkNvb2tpZUphci5wcm90b3R5cGUuX2ltcG9ydENvb2tpZXMgPSBmdW5jdGlvbihzZXJpYWxpemVkLCBjYikge1xuICB2YXIgamFyID0gdGhpcztcbiAgdmFyIGNvb2tpZXMgPSBzZXJpYWxpemVkLmNvb2tpZXM7XG4gIGlmICghY29va2llcyB8fCAhQXJyYXkuaXNBcnJheShjb29raWVzKSkge1xuICAgIHJldHVybiBjYihuZXcgRXJyb3IoJ3NlcmlhbGl6ZWQgamFyIGhhcyBubyBjb29raWVzIGFycmF5JykpO1xuICB9XG5cbiAgZnVuY3Rpb24gcHV0TmV4dChlcnIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvb2tpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gY2IoZXJyLCBqYXIpO1xuICAgIH1cblxuICAgIHZhciBjb29raWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvb2tpZSA9IGZyb21KU09OKGNvb2tpZXMuc2hpZnQoKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGNiKGUpO1xuICAgIH1cblxuICAgIGlmIChjb29raWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBwdXROZXh0KG51bGwpOyAvLyBza2lwIHRoaXMgY29va2llXG4gICAgfVxuXG4gICAgamFyLnN0b3JlLnB1dENvb2tpZShjb29raWUsIHB1dE5leHQpO1xuICB9XG5cbiAgcHV0TmV4dCgpO1xufTtcblxuQ29va2llSmFyLmRlc2VyaWFsaXplID0gZnVuY3Rpb24oc3RyT3JPYmosIHN0b3JlLCBjYikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMykge1xuICAgIC8vIHN0b3JlIGlzIG9wdGlvbmFsXG4gICAgY2IgPSBzdG9yZTtcbiAgICBzdG9yZSA9IG51bGw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZDtcbiAgaWYgKHR5cGVvZiBzdHJPck9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICBzZXJpYWxpemVkID0ganNvblBhcnNlKHN0ck9yT2JqKTtcbiAgICBpZiAoc2VyaWFsaXplZCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gY2Ioc2VyaWFsaXplZCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWQgPSBzdHJPck9iajtcbiAgfVxuXG4gIHZhciBqYXIgPSBuZXcgQ29va2llSmFyKHN0b3JlLCBzZXJpYWxpemVkLnJlamVjdFB1YmxpY1N1ZmZpeGVzKTtcbiAgamFyLl9pbXBvcnRDb29raWVzKHNlcmlhbGl6ZWQsIGZ1bmN0aW9uKGVycikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJldHVybiBjYihlcnIpO1xuICAgIH1cbiAgICBjYihudWxsLCBqYXIpO1xuICB9KTtcbn07XG5cbkNvb2tpZUphci5kZXNlcmlhbGl6ZVN5bmMgPSBmdW5jdGlvbihzdHJPck9iaiwgc3RvcmUpIHtcbiAgdmFyIHNlcmlhbGl6ZWQgPSB0eXBlb2Ygc3RyT3JPYmogPT09ICdzdHJpbmcnID9cbiAgICBKU09OLnBhcnNlKHN0ck9yT2JqKSA6IHN0ck9yT2JqO1xuICB2YXIgamFyID0gbmV3IENvb2tpZUphcihzdG9yZSwgc2VyaWFsaXplZC5yZWplY3RQdWJsaWNTdWZmaXhlcyk7XG5cbiAgLy8gY2F0Y2ggdGhpcyBtaXN0YWtlIGVhcmx5OlxuICBpZiAoIWphci5zdG9yZS5zeW5jaHJvbm91cykge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLicpO1xuICB9XG5cbiAgamFyLl9pbXBvcnRDb29raWVzU3luYyhzZXJpYWxpemVkKTtcbiAgcmV0dXJuIGphcjtcbn07XG5Db29raWVKYXIuZnJvbUpTT04gPSBDb29raWVKYXIuZGVzZXJpYWxpemVTeW5jO1xuXG5DQU5fQkVfU1lOQy5wdXNoKCdjbG9uZScpO1xuQ29va2llSmFyLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKG5ld1N0b3JlLCBjYikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIGNiID0gbmV3U3RvcmU7XG4gICAgbmV3U3RvcmUgPSBudWxsO1xuICB9XG5cbiAgdGhpcy5zZXJpYWxpemUoZnVuY3Rpb24oZXJyLHNlcmlhbGl6ZWQpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICB9XG4gICAgQ29va2llSmFyLmRlc2VyaWFsaXplKG5ld1N0b3JlLCBzZXJpYWxpemVkLCBjYik7XG4gIH0pO1xufTtcblxuLy8gVXNlIGEgY2xvc3VyZSB0byBwcm92aWRlIGEgdHJ1ZSBpbXBlcmF0aXZlIEFQSSBmb3Igc3luY2hyb25vdXMgc3RvcmVzLlxuZnVuY3Rpb24gc3luY1dyYXAobWV0aG9kKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuc3RvcmUuc3luY2hyb25vdXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB2YXIgc3luY0Vyciwgc3luY1Jlc3VsdDtcbiAgICBhcmdzLnB1c2goZnVuY3Rpb24gc3luY0NiKGVyciwgcmVzdWx0KSB7XG4gICAgICBzeW5jRXJyID0gZXJyO1xuICAgICAgc3luY1Jlc3VsdCA9IHJlc3VsdDtcbiAgICB9KTtcbiAgICB0aGlzW21ldGhvZF0uYXBwbHkodGhpcywgYXJncyk7XG5cbiAgICBpZiAoc3luY0Vycikge1xuICAgICAgdGhyb3cgc3luY0VycjtcbiAgICB9XG4gICAgcmV0dXJuIHN5bmNSZXN1bHQ7XG4gIH07XG59XG5cbi8vIHdyYXAgYWxsIGRlY2xhcmVkIENBTl9CRV9TWU5DIG1ldGhvZHMgaW4gdGhlIHN5bmMgd3JhcHBlclxuQ0FOX0JFX1NZTkMuZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgQ29va2llSmFyLnByb3RvdHlwZVttZXRob2QrJ1N5bmMnXSA9IHN5bmNXcmFwKG1ldGhvZCk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENvb2tpZUphcjogQ29va2llSmFyLFxuICBDb29raWU6IENvb2tpZSxcbiAgU3RvcmU6IFN0b3JlLFxuICBNZW1vcnlDb29raWVTdG9yZTogTWVtb3J5Q29va2llU3RvcmUsXG4gIHBhcnNlRGF0ZTogcGFyc2VEYXRlLFxuICBmb3JtYXREYXRlOiBmb3JtYXREYXRlLFxuICBwYXJzZTogcGFyc2UsXG4gIGZyb21KU09OOiBmcm9tSlNPTixcbiAgZG9tYWluTWF0Y2g6IGRvbWFpbk1hdGNoLFxuICBkZWZhdWx0UGF0aDogZGVmYXVsdFBhdGgsXG4gIHBhdGhNYXRjaDogcGF0aE1hdGNoLFxuICBnZXRQdWJsaWNTdWZmaXg6IHB1YnN1ZmZpeC5nZXRQdWJsaWNTdWZmaXgsXG4gIGNvb2tpZUNvbXBhcmU6IGNvb2tpZUNvbXBhcmUsXG4gIHBlcm11dGVEb21haW46IHJlcXVpcmUoJy4vcGVybXV0ZURvbWFpbicpLnBlcm11dGVEb21haW4sXG4gIHBlcm11dGVQYXRoOiBwZXJtdXRlUGF0aCxcbiAgY2Fub25pY2FsRG9tYWluOiBjYW5vbmljYWxEb21haW5cbn07XG4iLCIvKiFcbiAqIENvcHlyaWdodCAoYykgMjAxNSwgU2FsZXNmb3JjZS5jb20sIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgU2FsZXNmb3JjZS5jb20gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heVxuICogYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dFxuICogc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRVxuICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUlxuICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0ZcbiAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTU1xuICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU5cbiAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpXG4gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRVxuICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cbid1c2Ugc3RyaWN0JztcbnZhciBTdG9yZSA9IHJlcXVpcmUoJy4vc3RvcmUnKS5TdG9yZTtcbnZhciBwZXJtdXRlRG9tYWluID0gcmVxdWlyZSgnLi9wZXJtdXRlRG9tYWluJykucGVybXV0ZURvbWFpbjtcbnZhciBwYXRoTWF0Y2ggPSByZXF1aXJlKCcuL3BhdGhNYXRjaCcpLnBhdGhNYXRjaDtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5mdW5jdGlvbiBNZW1vcnlDb29raWVTdG9yZSgpIHtcbiAgU3RvcmUuY2FsbCh0aGlzKTtcbiAgdGhpcy5pZHggPSB7fTtcbn1cbnV0aWwuaW5oZXJpdHMoTWVtb3J5Q29va2llU3RvcmUsIFN0b3JlKTtcbmV4cG9ydHMuTWVtb3J5Q29va2llU3RvcmUgPSBNZW1vcnlDb29raWVTdG9yZTtcbk1lbW9yeUNvb2tpZVN0b3JlLnByb3RvdHlwZS5pZHggPSBudWxsO1xuXG4vLyBTaW5jZSBpdCdzIGp1c3QgYSBzdHJ1Y3QgaW4gUkFNLCB0aGlzIFN0b3JlIGlzIHN5bmNocm9ub3VzXG5NZW1vcnlDb29raWVTdG9yZS5wcm90b3R5cGUuc3luY2hyb25vdXMgPSB0cnVlO1xuXG4vLyBmb3JjZSBhIGRlZmF1bHQgZGVwdGg6XG5NZW1vcnlDb29raWVTdG9yZS5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gXCJ7IGlkeDogXCIrdXRpbC5pbnNwZWN0KHRoaXMuaWR4LCBmYWxzZSwgMikrJyB9Jztcbn07XG5cbk1lbW9yeUNvb2tpZVN0b3JlLnByb3RvdHlwZS5maW5kQ29va2llID0gZnVuY3Rpb24oZG9tYWluLCBwYXRoLCBrZXksIGNiKSB7XG4gIGlmICghdGhpcy5pZHhbZG9tYWluXSkge1xuICAgIHJldHVybiBjYihudWxsLHVuZGVmaW5lZCk7XG4gIH1cbiAgaWYgKCF0aGlzLmlkeFtkb21haW5dW3BhdGhdKSB7XG4gICAgcmV0dXJuIGNiKG51bGwsdW5kZWZpbmVkKTtcbiAgfVxuICByZXR1cm4gY2IobnVsbCx0aGlzLmlkeFtkb21haW5dW3BhdGhdW2tleV18fG51bGwpO1xufTtcblxuTWVtb3J5Q29va2llU3RvcmUucHJvdG90eXBlLmZpbmRDb29raWVzID0gZnVuY3Rpb24oZG9tYWluLCBwYXRoLCBjYikge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICBpZiAoIWRvbWFpbikge1xuICAgIHJldHVybiBjYihudWxsLFtdKTtcbiAgfVxuXG4gIHZhciBwYXRoTWF0Y2hlcjtcbiAgaWYgKCFwYXRoKSB7XG4gICAgLy8gbnVsbCBtZWFucyBcImFsbCBwYXRoc1wiXG4gICAgcGF0aE1hdGNoZXIgPSBmdW5jdGlvbiBtYXRjaEFsbChkb21haW5JbmRleCkge1xuICAgICAgZm9yICh2YXIgY3VyUGF0aCBpbiBkb21haW5JbmRleCkge1xuICAgICAgICB2YXIgcGF0aEluZGV4ID0gZG9tYWluSW5kZXhbY3VyUGF0aF07XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwYXRoSW5kZXgpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2gocGF0aEluZGV4W2tleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICB9IGVsc2Uge1xuICAgIHBhdGhNYXRjaGVyID0gZnVuY3Rpb24gbWF0Y2hSRkMoZG9tYWluSW5kZXgpIHtcbiAgICAgICAvL05PVEU6IHdlIHNob3VsZCB1c2UgcGF0aC1tYXRjaCBhbGdvcml0aG0gZnJvbSBTNS4xLjQgaGVyZVxuICAgICAgIC8vKHNlZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9DaHJvbWl1bVdlYkFwcHMvY2hyb21pdW0vYmxvYi9iM2QzYjRkYThiYjk0YzFiMmUwNjE2MDBkZjEwNmQ1OTBmZGEzNjIwL25ldC9jb29raWVzL2Nhbm9uaWNhbF9jb29raWUuY2MjTDI5OSlcbiAgICAgICBPYmplY3Qua2V5cyhkb21haW5JbmRleCkuZm9yRWFjaChmdW5jdGlvbiAoY29va2llUGF0aCkge1xuICAgICAgICAgaWYgKHBhdGhNYXRjaChwYXRoLCBjb29raWVQYXRoKSkge1xuICAgICAgICAgICB2YXIgcGF0aEluZGV4ID0gZG9tYWluSW5kZXhbY29va2llUGF0aF07XG5cbiAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBhdGhJbmRleCkge1xuICAgICAgICAgICAgIHJlc3VsdHMucHVzaChwYXRoSW5kZXhba2V5XSk7XG4gICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICB9KTtcbiAgICAgfTtcbiAgfVxuXG4gIHZhciBkb21haW5zID0gcGVybXV0ZURvbWFpbihkb21haW4pIHx8IFtkb21haW5dO1xuICB2YXIgaWR4ID0gdGhpcy5pZHg7XG4gIGRvbWFpbnMuZm9yRWFjaChmdW5jdGlvbihjdXJEb21haW4pIHtcbiAgICB2YXIgZG9tYWluSW5kZXggPSBpZHhbY3VyRG9tYWluXTtcbiAgICBpZiAoIWRvbWFpbkluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBhdGhNYXRjaGVyKGRvbWFpbkluZGV4KTtcbiAgfSk7XG5cbiAgY2IobnVsbCxyZXN1bHRzKTtcbn07XG5cbk1lbW9yeUNvb2tpZVN0b3JlLnByb3RvdHlwZS5wdXRDb29raWUgPSBmdW5jdGlvbihjb29raWUsIGNiKSB7XG4gIGlmICghdGhpcy5pZHhbY29va2llLmRvbWFpbl0pIHtcbiAgICB0aGlzLmlkeFtjb29raWUuZG9tYWluXSA9IHt9O1xuICB9XG4gIGlmICghdGhpcy5pZHhbY29va2llLmRvbWFpbl1bY29va2llLnBhdGhdKSB7XG4gICAgdGhpcy5pZHhbY29va2llLmRvbWFpbl1bY29va2llLnBhdGhdID0ge307XG4gIH1cbiAgdGhpcy5pZHhbY29va2llLmRvbWFpbl1bY29va2llLnBhdGhdW2Nvb2tpZS5rZXldID0gY29va2llO1xuICBjYihudWxsKTtcbn07XG5cbk1lbW9yeUNvb2tpZVN0b3JlLnByb3RvdHlwZS51cGRhdGVDb29raWUgPSBmdW5jdGlvbihvbGRDb29raWUsIG5ld0Nvb2tpZSwgY2IpIHtcbiAgLy8gdXBkYXRlQ29va2llKCkgbWF5IGF2b2lkIHVwZGF0aW5nIGNvb2tpZXMgdGhhdCBhcmUgaWRlbnRpY2FsLiAgRm9yIGV4YW1wbGUsXG4gIC8vIGxhc3RBY2Nlc3NlZCBtYXkgbm90IGJlIGltcG9ydGFudCB0byBzb21lIHN0b3JlcyBhbmQgYW4gZXF1YWxpdHlcbiAgLy8gY29tcGFyaXNvbiBjb3VsZCBleGNsdWRlIHRoYXQgZmllbGQuXG4gIHRoaXMucHV0Q29va2llKG5ld0Nvb2tpZSxjYik7XG59O1xuXG5NZW1vcnlDb29raWVTdG9yZS5wcm90b3R5cGUucmVtb3ZlQ29va2llID0gZnVuY3Rpb24oZG9tYWluLCBwYXRoLCBrZXksIGNiKSB7XG4gIGlmICh0aGlzLmlkeFtkb21haW5dICYmIHRoaXMuaWR4W2RvbWFpbl1bcGF0aF0gJiYgdGhpcy5pZHhbZG9tYWluXVtwYXRoXVtrZXldKSB7XG4gICAgZGVsZXRlIHRoaXMuaWR4W2RvbWFpbl1bcGF0aF1ba2V5XTtcbiAgfVxuICBjYihudWxsKTtcbn07XG5cbk1lbW9yeUNvb2tpZVN0b3JlLnByb3RvdHlwZS5yZW1vdmVDb29raWVzID0gZnVuY3Rpb24oZG9tYWluLCBwYXRoLCBjYikge1xuICBpZiAodGhpcy5pZHhbZG9tYWluXSkge1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBkZWxldGUgdGhpcy5pZHhbZG9tYWluXVtwYXRoXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMuaWR4W2RvbWFpbl07XG4gICAgfVxuICB9XG4gIHJldHVybiBjYihudWxsKTtcbn07XG5cbk1lbW9yeUNvb2tpZVN0b3JlLnByb3RvdHlwZS5nZXRBbGxDb29raWVzID0gZnVuY3Rpb24oY2IpIHtcbiAgdmFyIGNvb2tpZXMgPSBbXTtcbiAgdmFyIGlkeCA9IHRoaXMuaWR4O1xuXG4gIHZhciBkb21haW5zID0gT2JqZWN0LmtleXMoaWR4KTtcbiAgZG9tYWlucy5mb3JFYWNoKGZ1bmN0aW9uKGRvbWFpbikge1xuICAgIHZhciBwYXRocyA9IE9iamVjdC5rZXlzKGlkeFtkb21haW5dKTtcbiAgICBwYXRocy5mb3JFYWNoKGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoaWR4W2RvbWFpbl1bcGF0aF0pO1xuICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgY29va2llcy5wdXNoKGlkeFtkb21haW5dW3BhdGhdW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gU29ydCBieSBjcmVhdGlvbkluZGV4IHNvIGRlc2VyaWFsaXppbmcgcmV0YWlucyB0aGUgY3JlYXRpb24gb3JkZXIuXG4gIC8vIFdoZW4gaW1wbGVtZW50aW5nIHlvdXIgb3duIHN0b3JlLCB0aGlzIFNIT1VMRCByZXRhaW4gdGhlIG9yZGVyIHRvb1xuICBjb29raWVzLnNvcnQoZnVuY3Rpb24oYSxiKSB7XG4gICAgcmV0dXJuIChhLmNyZWF0aW9uSW5kZXh8fDApIC0gKGIuY3JlYXRpb25JbmRleHx8MCk7XG4gIH0pO1xuXG4gIGNiKG51bGwsIGNvb2tpZXMpO1xufTtcbiIsIi8qIVxuICogQ29weXJpZ2h0IChjKSAyMDE1LCBTYWxlc2ZvcmNlLmNvbSwgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTYWxlc2ZvcmNlLmNvbSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5XG4gKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0XG4gKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFXG4gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SXG4gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRlxuICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTXG4gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTlxuICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSlcbiAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFXG4gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXCJ1c2Ugc3RyaWN0XCI7XG4vKlxuICogXCJBIHJlcXVlc3QtcGF0aCBwYXRoLW1hdGNoZXMgYSBnaXZlbiBjb29raWUtcGF0aCBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlXG4gKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBob2xkczpcIlxuICovXG5mdW5jdGlvbiBwYXRoTWF0Y2ggKHJlcVBhdGgsIGNvb2tpZVBhdGgpIHtcbiAgLy8gXCJvICBUaGUgY29va2llLXBhdGggYW5kIHRoZSByZXF1ZXN0LXBhdGggYXJlIGlkZW50aWNhbC5cIlxuICBpZiAoY29va2llUGF0aCA9PT0gcmVxUGF0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIGlkeCA9IHJlcVBhdGguaW5kZXhPZihjb29raWVQYXRoKTtcbiAgaWYgKGlkeCA9PT0gMCkge1xuICAgIC8vIFwibyAgVGhlIGNvb2tpZS1wYXRoIGlzIGEgcHJlZml4IG9mIHRoZSByZXF1ZXN0LXBhdGgsIGFuZCB0aGUgbGFzdFxuICAgIC8vIGNoYXJhY3RlciBvZiB0aGUgY29va2llLXBhdGggaXMgJXgyRiAoXCIvXCIpLlwiXG4gICAgaWYgKGNvb2tpZVBhdGguc3Vic3RyKC0xKSA9PT0gXCIvXCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFwiIG8gIFRoZSBjb29raWUtcGF0aCBpcyBhIHByZWZpeCBvZiB0aGUgcmVxdWVzdC1wYXRoLCBhbmQgdGhlIGZpcnN0XG4gICAgLy8gY2hhcmFjdGVyIG9mIHRoZSByZXF1ZXN0LXBhdGggdGhhdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGNvb2tpZS0gcGF0aFxuICAgIC8vIGlzIGEgJXgyRiAoXCIvXCIpIGNoYXJhY3Rlci5cIlxuICAgIGlmIChyZXFQYXRoLnN1YnN0cihjb29raWVQYXRoLmxlbmd0aCwgMSkgPT09IFwiL1wiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydHMucGF0aE1hdGNoID0gcGF0aE1hdGNoO1xuIiwiLyohXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFNhbGVzZm9yY2UuY29tLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNhbGVzZm9yY2UuY29tIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXlcbiAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXRcbiAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkVcbiAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JcbiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GXG4gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1NcbiAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOXG4gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKVxuICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEVcbiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cInVzZSBzdHJpY3RcIjtcbnZhciBwdWJzdWZmaXggPSByZXF1aXJlKCcuL3B1YnN1ZmZpeCcpO1xuXG4vLyBHaXZlcyB0aGUgcGVybXV0YXRpb24gb2YgYWxsIHBvc3NpYmxlIGRvbWFpbk1hdGNoKCllcyBvZiBhIGdpdmVuIGRvbWFpbi4gVGhlXG4vLyBhcnJheSBpcyBpbiBzaG9ydGVzdC10by1sb25nZXN0IG9yZGVyLiAgSGFuZHkgZm9yIGluZGV4aW5nLlxuZnVuY3Rpb24gcGVybXV0ZURvbWFpbiAoZG9tYWluKSB7XG4gIHZhciBwdWJTdWYgPSBwdWJzdWZmaXguZ2V0UHVibGljU3VmZml4KGRvbWFpbik7XG4gIGlmICghcHViU3VmKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHB1YlN1ZiA9PSBkb21haW4pIHtcbiAgICByZXR1cm4gW2RvbWFpbl07XG4gIH1cblxuICB2YXIgcHJlZml4ID0gZG9tYWluLnNsaWNlKDAsIC0ocHViU3VmLmxlbmd0aCArIDEpKTsgLy8gXCIuZXhhbXBsZS5jb21cIlxuICB2YXIgcGFydHMgPSBwcmVmaXguc3BsaXQoJy4nKS5yZXZlcnNlKCk7XG4gIHZhciBjdXIgPSBwdWJTdWY7XG4gIHZhciBwZXJtdXRhdGlvbnMgPSBbY3VyXTtcbiAgd2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuICAgIGN1ciA9IHBhcnRzLnNoaWZ0KCkgKyAnLicgKyBjdXI7XG4gICAgcGVybXV0YXRpb25zLnB1c2goY3VyKTtcbiAgfVxuICByZXR1cm4gcGVybXV0YXRpb25zO1xufVxuXG5leHBvcnRzLnBlcm11dGVEb21haW4gPSBwZXJtdXRlRG9tYWluO1xuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIEFVVE9NQVRJQ0FMTFkgR0VORVJBVEVEIGJ5IGdlbmVyYXRlLXB1YnN1ZmZpeC5qcyAqXG4gKiAgICAgICAgICAgICAgICAgIERPIE5PVCBFRElUISAgICAgICAgICAgICAgICAgICAgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5tb2R1bGUuZXhwb3J0cy5nZXRQdWJsaWNTdWZmaXggPSBmdW5jdGlvbiBnZXRQdWJsaWNTdWZmaXgoZG9tYWluKSB7XG4gIC8qIVxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFNhbGVzZm9yY2UuY29tLCBJbmMuXG4gICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gICAqXG4gICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAgICpcbiAgICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgKlxuICAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgU2FsZXNmb3JjZS5jb20gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heVxuICAgKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0XG4gICAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAgICpcbiAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICAgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFXG4gICAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JcbiAgICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0ZcbiAgICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTXG4gICAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOXG4gICAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpXG4gICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFXG4gICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICAgKi9cbiAgaWYgKCFkb21haW4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoZG9tYWluLm1hdGNoKC9eXFwuLykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgYXNjaWlEb21haW4gPSBwdW55Y29kZS50b0FTQ0lJKGRvbWFpbik7XG4gIHZhciBjb252ZXJ0ZWQgPSBmYWxzZTtcbiAgaWYgKGFzY2lpRG9tYWluICE9PSBkb21haW4pIHtcbiAgICBkb21haW4gPSBhc2NpaURvbWFpbjtcbiAgICBjb252ZXJ0ZWQgPSB0cnVlO1xuICB9XG4gIGlmIChpbmRleFtkb21haW5dKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkb21haW4gPSBkb21haW4udG9Mb3dlckNhc2UoKTtcbiAgdmFyIHBhcnRzID0gZG9tYWluLnNwbGl0KCcuJykucmV2ZXJzZSgpO1xuXG4gIHZhciBzdWZmaXggPSAnJztcbiAgdmFyIHN1ZmZpeExlbiA9IDA7XG4gIGZvciAodmFyIGk9MDsgaTxwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG4gICAgdmFyIHN0YXJzdHIgPSAnKicrc3VmZml4O1xuICAgIHZhciBwYXJ0c3RyID0gcGFydCtzdWZmaXg7XG5cbiAgICBpZiAoaW5kZXhbc3RhcnN0cl0pIHsgLy8gc3RhciBydWxlIG1hdGNoZXNcbiAgICAgIHN1ZmZpeExlbiA9IGkrMTtcbiAgICAgIGlmIChpbmRleFtwYXJ0c3RyXSA9PT0gZmFsc2UpIHsgLy8gZXhjZXB0aW9uIHJ1bGUgbWF0Y2hlcyAoTkI6IGZhbHNlLCBub3QgdW5kZWZpbmVkKVxuICAgICAgICBzdWZmaXhMZW4tLTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGluZGV4W3BhcnRzdHJdKSB7IC8vIGV4YWN0IG1hdGNoLCBub3QgZXhjZXB0aW9uXG4gICAgICBzdWZmaXhMZW4gPSBpKzE7XG4gICAgfVxuXG4gICAgc3VmZml4ID0gJy4nK3BhcnRzdHI7XG4gIH1cblxuICBpZiAoaW5kZXhbJyonK3N1ZmZpeF0pIHsgLy8gKi5kb21haW4gZXhpc3RzIChlLmcuICoua3lvdG8uanAgZm9yIGRvbWFpbj0na3lvdG8uanAnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN1ZmZpeExlbiA9IHN1ZmZpeExlbiB8fCAxO1xuICBpZiAocGFydHMubGVuZ3RoID4gc3VmZml4TGVuKSB7XG4gICAgdmFyIHB1YmxpY1N1ZmZpeCA9IHBhcnRzLnNsaWNlKDAsc3VmZml4TGVuKzEpLnJldmVyc2UoKS5qb2luKCcuJyk7XG4gICAgcmV0dXJuIGNvbnZlcnRlZCA/IHB1bnljb2RlLnRvVW5pY29kZShwdWJsaWNTdWZmaXgpIDogcHVibGljU3VmZml4O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vLyBUaGUgZm9sbG93aW5nIGdlbmVyYXRlZCBzdHJ1Y3R1cmUgaXMgdXNlZCB1bmRlciB0aGUgTVBMIHZlcnNpb24gMi4wXG4vLyBTZWUgcHVibGljLXN1ZmZpeC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb25cblxudmFyIGluZGV4ID0gbW9kdWxlLmV4cG9ydHMuaW5kZXggPSBPYmplY3QuZnJlZXplKFxue1wiYWNcIjp0cnVlLFwiY29tLmFjXCI6dHJ1ZSxcImVkdS5hY1wiOnRydWUsXCJnb3YuYWNcIjp0cnVlLFwibmV0LmFjXCI6dHJ1ZSxcIm1pbC5hY1wiOnRydWUsXCJvcmcuYWNcIjp0cnVlLFwiYWRcIjp0cnVlLFwibm9tLmFkXCI6dHJ1ZSxcImFlXCI6dHJ1ZSxcImNvLmFlXCI6dHJ1ZSxcIm5ldC5hZVwiOnRydWUsXCJvcmcuYWVcIjp0cnVlLFwic2NoLmFlXCI6dHJ1ZSxcImFjLmFlXCI6dHJ1ZSxcImdvdi5hZVwiOnRydWUsXCJtaWwuYWVcIjp0cnVlLFwiYWVyb1wiOnRydWUsXCJhY2NpZGVudC1pbnZlc3RpZ2F0aW9uLmFlcm9cIjp0cnVlLFwiYWNjaWRlbnQtcHJldmVudGlvbi5hZXJvXCI6dHJ1ZSxcImFlcm9iYXRpYy5hZXJvXCI6dHJ1ZSxcImFlcm9jbHViLmFlcm9cIjp0cnVlLFwiYWVyb2Ryb21lLmFlcm9cIjp0cnVlLFwiYWdlbnRzLmFlcm9cIjp0cnVlLFwiYWlyY3JhZnQuYWVyb1wiOnRydWUsXCJhaXJsaW5lLmFlcm9cIjp0cnVlLFwiYWlycG9ydC5hZXJvXCI6dHJ1ZSxcImFpci1zdXJ2ZWlsbGFuY2UuYWVyb1wiOnRydWUsXCJhaXJ0cmFmZmljLmFlcm9cIjp0cnVlLFwiYWlyLXRyYWZmaWMtY29udHJvbC5hZXJvXCI6dHJ1ZSxcImFtYnVsYW5jZS5hZXJvXCI6dHJ1ZSxcImFtdXNlbWVudC5hZXJvXCI6dHJ1ZSxcImFzc29jaWF0aW9uLmFlcm9cIjp0cnVlLFwiYXV0aG9yLmFlcm9cIjp0cnVlLFwiYmFsbG9vbmluZy5hZXJvXCI6dHJ1ZSxcImJyb2tlci5hZXJvXCI6dHJ1ZSxcImNhYS5hZXJvXCI6dHJ1ZSxcImNhcmdvLmFlcm9cIjp0cnVlLFwiY2F0ZXJpbmcuYWVyb1wiOnRydWUsXCJjZXJ0aWZpY2F0aW9uLmFlcm9cIjp0cnVlLFwiY2hhbXBpb25zaGlwLmFlcm9cIjp0cnVlLFwiY2hhcnRlci5hZXJvXCI6dHJ1ZSxcImNpdmlsYXZpYXRpb24uYWVyb1wiOnRydWUsXCJjbHViLmFlcm9cIjp0cnVlLFwiY29uZmVyZW5jZS5hZXJvXCI6dHJ1ZSxcImNvbnN1bHRhbnQuYWVyb1wiOnRydWUsXCJjb25zdWx0aW5nLmFlcm9cIjp0cnVlLFwiY29udHJvbC5hZXJvXCI6dHJ1ZSxcImNvdW5jaWwuYWVyb1wiOnRydWUsXCJjcmV3LmFlcm9cIjp0cnVlLFwiZGVzaWduLmFlcm9cIjp0cnVlLFwiZGdjYS5hZXJvXCI6dHJ1ZSxcImVkdWNhdG9yLmFlcm9cIjp0cnVlLFwiZW1lcmdlbmN5LmFlcm9cIjp0cnVlLFwiZW5naW5lLmFlcm9cIjp0cnVlLFwiZW5naW5lZXIuYWVyb1wiOnRydWUsXCJlbnRlcnRhaW5tZW50LmFlcm9cIjp0cnVlLFwiZXF1aXBtZW50LmFlcm9cIjp0cnVlLFwiZXhjaGFuZ2UuYWVyb1wiOnRydWUsXCJleHByZXNzLmFlcm9cIjp0cnVlLFwiZmVkZXJhdGlvbi5hZXJvXCI6dHJ1ZSxcImZsaWdodC5hZXJvXCI6dHJ1ZSxcImZyZWlnaHQuYWVyb1wiOnRydWUsXCJmdWVsLmFlcm9cIjp0cnVlLFwiZ2xpZGluZy5hZXJvXCI6dHJ1ZSxcImdvdmVybm1lbnQuYWVyb1wiOnRydWUsXCJncm91bmRoYW5kbGluZy5hZXJvXCI6dHJ1ZSxcImdyb3VwLmFlcm9cIjp0cnVlLFwiaGFuZ2dsaWRpbmcuYWVyb1wiOnRydWUsXCJob21lYnVpbHQuYWVyb1wiOnRydWUsXCJpbnN1cmFuY2UuYWVyb1wiOnRydWUsXCJqb3VybmFsLmFlcm9cIjp0cnVlLFwiam91cm5hbGlzdC5hZXJvXCI6dHJ1ZSxcImxlYXNpbmcuYWVyb1wiOnRydWUsXCJsb2dpc3RpY3MuYWVyb1wiOnRydWUsXCJtYWdhemluZS5hZXJvXCI6dHJ1ZSxcIm1haW50ZW5hbmNlLmFlcm9cIjp0cnVlLFwibWFya2V0cGxhY2UuYWVyb1wiOnRydWUsXCJtZWRpYS5hZXJvXCI6dHJ1ZSxcIm1pY3JvbGlnaHQuYWVyb1wiOnRydWUsXCJtb2RlbGxpbmcuYWVyb1wiOnRydWUsXCJuYXZpZ2F0aW9uLmFlcm9cIjp0cnVlLFwicGFyYWNodXRpbmcuYWVyb1wiOnRydWUsXCJwYXJhZ2xpZGluZy5hZXJvXCI6dHJ1ZSxcInBhc3Nlbmdlci1hc3NvY2lhdGlvbi5hZXJvXCI6dHJ1ZSxcInBpbG90LmFlcm9cIjp0cnVlLFwicHJlc3MuYWVyb1wiOnRydWUsXCJwcm9kdWN0aW9uLmFlcm9cIjp0cnVlLFwicmVjcmVhdGlvbi5hZXJvXCI6dHJ1ZSxcInJlcGJvZHkuYWVyb1wiOnRydWUsXCJyZXMuYWVyb1wiOnRydWUsXCJyZXNlYXJjaC5hZXJvXCI6dHJ1ZSxcInJvdG9yY3JhZnQuYWVyb1wiOnRydWUsXCJzYWZldHkuYWVyb1wiOnRydWUsXCJzY2llbnRpc3QuYWVyb1wiOnRydWUsXCJzZXJ2aWNlcy5hZXJvXCI6dHJ1ZSxcInNob3cuYWVyb1wiOnRydWUsXCJza3lkaXZpbmcuYWVyb1wiOnRydWUsXCJzb2Z0d2FyZS5hZXJvXCI6dHJ1ZSxcInN0dWRlbnQuYWVyb1wiOnRydWUsXCJ0YXhpLmFlcm9cIjp0cnVlLFwidHJhZGVyLmFlcm9cIjp0cnVlLFwidHJhZGluZy5hZXJvXCI6dHJ1ZSxcInRyYWluZXIuYWVyb1wiOnRydWUsXCJ1bmlvbi5hZXJvXCI6dHJ1ZSxcIndvcmtpbmdncm91cC5hZXJvXCI6dHJ1ZSxcIndvcmtzLmFlcm9cIjp0cnVlLFwiYWZcIjp0cnVlLFwiZ292LmFmXCI6dHJ1ZSxcImNvbS5hZlwiOnRydWUsXCJvcmcuYWZcIjp0cnVlLFwibmV0LmFmXCI6dHJ1ZSxcImVkdS5hZlwiOnRydWUsXCJhZ1wiOnRydWUsXCJjb20uYWdcIjp0cnVlLFwib3JnLmFnXCI6dHJ1ZSxcIm5ldC5hZ1wiOnRydWUsXCJjby5hZ1wiOnRydWUsXCJub20uYWdcIjp0cnVlLFwiYWlcIjp0cnVlLFwib2ZmLmFpXCI6dHJ1ZSxcImNvbS5haVwiOnRydWUsXCJuZXQuYWlcIjp0cnVlLFwib3JnLmFpXCI6dHJ1ZSxcImFsXCI6dHJ1ZSxcImNvbS5hbFwiOnRydWUsXCJlZHUuYWxcIjp0cnVlLFwiZ292LmFsXCI6dHJ1ZSxcIm1pbC5hbFwiOnRydWUsXCJuZXQuYWxcIjp0cnVlLFwib3JnLmFsXCI6dHJ1ZSxcImFtXCI6dHJ1ZSxcImFuXCI6dHJ1ZSxcImNvbS5hblwiOnRydWUsXCJuZXQuYW5cIjp0cnVlLFwib3JnLmFuXCI6dHJ1ZSxcImVkdS5hblwiOnRydWUsXCJhb1wiOnRydWUsXCJlZC5hb1wiOnRydWUsXCJndi5hb1wiOnRydWUsXCJvZy5hb1wiOnRydWUsXCJjby5hb1wiOnRydWUsXCJwYi5hb1wiOnRydWUsXCJpdC5hb1wiOnRydWUsXCJhcVwiOnRydWUsXCJhclwiOnRydWUsXCJjb20uYXJcIjp0cnVlLFwiZWR1LmFyXCI6dHJ1ZSxcImdvYi5hclwiOnRydWUsXCJnb3YuYXJcIjp0cnVlLFwiaW50LmFyXCI6dHJ1ZSxcIm1pbC5hclwiOnRydWUsXCJuZXQuYXJcIjp0cnVlLFwib3JnLmFyXCI6dHJ1ZSxcInR1ci5hclwiOnRydWUsXCJhcnBhXCI6dHJ1ZSxcImUxNjQuYXJwYVwiOnRydWUsXCJpbi1hZGRyLmFycGFcIjp0cnVlLFwiaXA2LmFycGFcIjp0cnVlLFwiaXJpcy5hcnBhXCI6dHJ1ZSxcInVyaS5hcnBhXCI6dHJ1ZSxcInVybi5hcnBhXCI6dHJ1ZSxcImFzXCI6dHJ1ZSxcImdvdi5hc1wiOnRydWUsXCJhc2lhXCI6dHJ1ZSxcImF0XCI6dHJ1ZSxcImFjLmF0XCI6dHJ1ZSxcImNvLmF0XCI6dHJ1ZSxcImd2LmF0XCI6dHJ1ZSxcIm9yLmF0XCI6dHJ1ZSxcImF1XCI6dHJ1ZSxcImNvbS5hdVwiOnRydWUsXCJuZXQuYXVcIjp0cnVlLFwib3JnLmF1XCI6dHJ1ZSxcImVkdS5hdVwiOnRydWUsXCJnb3YuYXVcIjp0cnVlLFwiYXNuLmF1XCI6dHJ1ZSxcImlkLmF1XCI6dHJ1ZSxcImluZm8uYXVcIjp0cnVlLFwiY29uZi5hdVwiOnRydWUsXCJvei5hdVwiOnRydWUsXCJhY3QuYXVcIjp0cnVlLFwibnN3LmF1XCI6dHJ1ZSxcIm50LmF1XCI6dHJ1ZSxcInFsZC5hdVwiOnRydWUsXCJzYS5hdVwiOnRydWUsXCJ0YXMuYXVcIjp0cnVlLFwidmljLmF1XCI6dHJ1ZSxcIndhLmF1XCI6dHJ1ZSxcImFjdC5lZHUuYXVcIjp0cnVlLFwibnN3LmVkdS5hdVwiOnRydWUsXCJudC5lZHUuYXVcIjp0cnVlLFwicWxkLmVkdS5hdVwiOnRydWUsXCJzYS5lZHUuYXVcIjp0cnVlLFwidGFzLmVkdS5hdVwiOnRydWUsXCJ2aWMuZWR1LmF1XCI6dHJ1ZSxcIndhLmVkdS5hdVwiOnRydWUsXCJxbGQuZ292LmF1XCI6dHJ1ZSxcInNhLmdvdi5hdVwiOnRydWUsXCJ0YXMuZ292LmF1XCI6dHJ1ZSxcInZpYy5nb3YuYXVcIjp0cnVlLFwid2EuZ292LmF1XCI6dHJ1ZSxcImF3XCI6dHJ1ZSxcImNvbS5hd1wiOnRydWUsXCJheFwiOnRydWUsXCJhelwiOnRydWUsXCJjb20uYXpcIjp0cnVlLFwibmV0LmF6XCI6dHJ1ZSxcImludC5helwiOnRydWUsXCJnb3YuYXpcIjp0cnVlLFwib3JnLmF6XCI6dHJ1ZSxcImVkdS5helwiOnRydWUsXCJpbmZvLmF6XCI6dHJ1ZSxcInBwLmF6XCI6dHJ1ZSxcIm1pbC5helwiOnRydWUsXCJuYW1lLmF6XCI6dHJ1ZSxcInByby5helwiOnRydWUsXCJiaXouYXpcIjp0cnVlLFwiYmFcIjp0cnVlLFwib3JnLmJhXCI6dHJ1ZSxcIm5ldC5iYVwiOnRydWUsXCJlZHUuYmFcIjp0cnVlLFwiZ292LmJhXCI6dHJ1ZSxcIm1pbC5iYVwiOnRydWUsXCJ1bnNhLmJhXCI6dHJ1ZSxcInVuYmkuYmFcIjp0cnVlLFwiY28uYmFcIjp0cnVlLFwiY29tLmJhXCI6dHJ1ZSxcInJzLmJhXCI6dHJ1ZSxcImJiXCI6dHJ1ZSxcImJpei5iYlwiOnRydWUsXCJjby5iYlwiOnRydWUsXCJjb20uYmJcIjp0cnVlLFwiZWR1LmJiXCI6dHJ1ZSxcImdvdi5iYlwiOnRydWUsXCJpbmZvLmJiXCI6dHJ1ZSxcIm5ldC5iYlwiOnRydWUsXCJvcmcuYmJcIjp0cnVlLFwic3RvcmUuYmJcIjp0cnVlLFwidHYuYmJcIjp0cnVlLFwiKi5iZFwiOnRydWUsXCJiZVwiOnRydWUsXCJhYy5iZVwiOnRydWUsXCJiZlwiOnRydWUsXCJnb3YuYmZcIjp0cnVlLFwiYmdcIjp0cnVlLFwiYS5iZ1wiOnRydWUsXCJiLmJnXCI6dHJ1ZSxcImMuYmdcIjp0cnVlLFwiZC5iZ1wiOnRydWUsXCJlLmJnXCI6dHJ1ZSxcImYuYmdcIjp0cnVlLFwiZy5iZ1wiOnRydWUsXCJoLmJnXCI6dHJ1ZSxcImkuYmdcIjp0cnVlLFwiai5iZ1wiOnRydWUsXCJrLmJnXCI6dHJ1ZSxcImwuYmdcIjp0cnVlLFwibS5iZ1wiOnRydWUsXCJuLmJnXCI6dHJ1ZSxcIm8uYmdcIjp0cnVlLFwicC5iZ1wiOnRydWUsXCJxLmJnXCI6dHJ1ZSxcInIuYmdcIjp0cnVlLFwicy5iZ1wiOnRydWUsXCJ0LmJnXCI6dHJ1ZSxcInUuYmdcIjp0cnVlLFwidi5iZ1wiOnRydWUsXCJ3LmJnXCI6dHJ1ZSxcInguYmdcIjp0cnVlLFwieS5iZ1wiOnRydWUsXCJ6LmJnXCI6dHJ1ZSxcIjAuYmdcIjp0cnVlLFwiMS5iZ1wiOnRydWUsXCIyLmJnXCI6dHJ1ZSxcIjMuYmdcIjp0cnVlLFwiNC5iZ1wiOnRydWUsXCI1LmJnXCI6dHJ1ZSxcIjYuYmdcIjp0cnVlLFwiNy5iZ1wiOnRydWUsXCI4LmJnXCI6dHJ1ZSxcIjkuYmdcIjp0cnVlLFwiYmhcIjp0cnVlLFwiY29tLmJoXCI6dHJ1ZSxcImVkdS5iaFwiOnRydWUsXCJuZXQuYmhcIjp0cnVlLFwib3JnLmJoXCI6dHJ1ZSxcImdvdi5iaFwiOnRydWUsXCJiaVwiOnRydWUsXCJjby5iaVwiOnRydWUsXCJjb20uYmlcIjp0cnVlLFwiZWR1LmJpXCI6dHJ1ZSxcIm9yLmJpXCI6dHJ1ZSxcIm9yZy5iaVwiOnRydWUsXCJiaXpcIjp0cnVlLFwiYmpcIjp0cnVlLFwiYXNzby5ialwiOnRydWUsXCJiYXJyZWF1LmJqXCI6dHJ1ZSxcImdvdXYuYmpcIjp0cnVlLFwiYm1cIjp0cnVlLFwiY29tLmJtXCI6dHJ1ZSxcImVkdS5ibVwiOnRydWUsXCJnb3YuYm1cIjp0cnVlLFwibmV0LmJtXCI6dHJ1ZSxcIm9yZy5ibVwiOnRydWUsXCIqLmJuXCI6dHJ1ZSxcImJvXCI6dHJ1ZSxcImNvbS5ib1wiOnRydWUsXCJlZHUuYm9cIjp0cnVlLFwiZ292LmJvXCI6dHJ1ZSxcImdvYi5ib1wiOnRydWUsXCJpbnQuYm9cIjp0cnVlLFwib3JnLmJvXCI6dHJ1ZSxcIm5ldC5ib1wiOnRydWUsXCJtaWwuYm9cIjp0cnVlLFwidHYuYm9cIjp0cnVlLFwiYnJcIjp0cnVlLFwiYWRtLmJyXCI6dHJ1ZSxcImFkdi5iclwiOnRydWUsXCJhZ3IuYnJcIjp0cnVlLFwiYW0uYnJcIjp0cnVlLFwiYXJxLmJyXCI6dHJ1ZSxcImFydC5iclwiOnRydWUsXCJhdG8uYnJcIjp0cnVlLFwiYi5iclwiOnRydWUsXCJiaW8uYnJcIjp0cnVlLFwiYmxvZy5iclwiOnRydWUsXCJibWQuYnJcIjp0cnVlLFwiY2ltLmJyXCI6dHJ1ZSxcImNuZy5iclwiOnRydWUsXCJjbnQuYnJcIjp0cnVlLFwiY29tLmJyXCI6dHJ1ZSxcImNvb3AuYnJcIjp0cnVlLFwiZWNuLmJyXCI6dHJ1ZSxcImVjby5iclwiOnRydWUsXCJlZHUuYnJcIjp0cnVlLFwiZW1wLmJyXCI6dHJ1ZSxcImVuZy5iclwiOnRydWUsXCJlc3AuYnJcIjp0cnVlLFwiZXRjLmJyXCI6dHJ1ZSxcImV0aS5iclwiOnRydWUsXCJmYXIuYnJcIjp0cnVlLFwiZmxvZy5iclwiOnRydWUsXCJmbS5iclwiOnRydWUsXCJmbmQuYnJcIjp0cnVlLFwiZm90LmJyXCI6dHJ1ZSxcImZzdC5iclwiOnRydWUsXCJnMTIuYnJcIjp0cnVlLFwiZ2dmLmJyXCI6dHJ1ZSxcImdvdi5iclwiOnRydWUsXCJpbWIuYnJcIjp0cnVlLFwiaW5kLmJyXCI6dHJ1ZSxcImluZi5iclwiOnRydWUsXCJqb3IuYnJcIjp0cnVlLFwianVzLmJyXCI6dHJ1ZSxcImxlZy5iclwiOnRydWUsXCJsZWwuYnJcIjp0cnVlLFwibWF0LmJyXCI6dHJ1ZSxcIm1lZC5iclwiOnRydWUsXCJtaWwuYnJcIjp0cnVlLFwibXAuYnJcIjp0cnVlLFwibXVzLmJyXCI6dHJ1ZSxcIm5ldC5iclwiOnRydWUsXCIqLm5vbS5iclwiOnRydWUsXCJub3QuYnJcIjp0cnVlLFwibnRyLmJyXCI6dHJ1ZSxcIm9kby5iclwiOnRydWUsXCJvcmcuYnJcIjp0cnVlLFwicHBnLmJyXCI6dHJ1ZSxcInByby5iclwiOnRydWUsXCJwc2MuYnJcIjp0cnVlLFwicHNpLmJyXCI6dHJ1ZSxcInFzbC5iclwiOnRydWUsXCJyYWRpby5iclwiOnRydWUsXCJyZWMuYnJcIjp0cnVlLFwic2xnLmJyXCI6dHJ1ZSxcInNydi5iclwiOnRydWUsXCJ0YXhpLmJyXCI6dHJ1ZSxcInRlby5iclwiOnRydWUsXCJ0bXAuYnJcIjp0cnVlLFwidHJkLmJyXCI6dHJ1ZSxcInR1ci5iclwiOnRydWUsXCJ0di5iclwiOnRydWUsXCJ2ZXQuYnJcIjp0cnVlLFwidmxvZy5iclwiOnRydWUsXCJ3aWtpLmJyXCI6dHJ1ZSxcInpsZy5iclwiOnRydWUsXCJic1wiOnRydWUsXCJjb20uYnNcIjp0cnVlLFwibmV0LmJzXCI6dHJ1ZSxcIm9yZy5ic1wiOnRydWUsXCJlZHUuYnNcIjp0cnVlLFwiZ292LmJzXCI6dHJ1ZSxcImJ0XCI6dHJ1ZSxcImNvbS5idFwiOnRydWUsXCJlZHUuYnRcIjp0cnVlLFwiZ292LmJ0XCI6dHJ1ZSxcIm5ldC5idFwiOnRydWUsXCJvcmcuYnRcIjp0cnVlLFwiYnZcIjp0cnVlLFwiYndcIjp0cnVlLFwiY28uYndcIjp0cnVlLFwib3JnLmJ3XCI6dHJ1ZSxcImJ5XCI6dHJ1ZSxcImdvdi5ieVwiOnRydWUsXCJtaWwuYnlcIjp0cnVlLFwiY29tLmJ5XCI6dHJ1ZSxcIm9mLmJ5XCI6dHJ1ZSxcImJ6XCI6dHJ1ZSxcImNvbS5ielwiOnRydWUsXCJuZXQuYnpcIjp0cnVlLFwib3JnLmJ6XCI6dHJ1ZSxcImVkdS5ielwiOnRydWUsXCJnb3YuYnpcIjp0cnVlLFwiY2FcIjp0cnVlLFwiYWIuY2FcIjp0cnVlLFwiYmMuY2FcIjp0cnVlLFwibWIuY2FcIjp0cnVlLFwibmIuY2FcIjp0cnVlLFwibmYuY2FcIjp0cnVlLFwibmwuY2FcIjp0cnVlLFwibnMuY2FcIjp0cnVlLFwibnQuY2FcIjp0cnVlLFwibnUuY2FcIjp0cnVlLFwib24uY2FcIjp0cnVlLFwicGUuY2FcIjp0cnVlLFwicWMuY2FcIjp0cnVlLFwic2suY2FcIjp0cnVlLFwieWsuY2FcIjp0cnVlLFwiZ2MuY2FcIjp0cnVlLFwiY2F0XCI6dHJ1ZSxcImNjXCI6dHJ1ZSxcImNkXCI6dHJ1ZSxcImdvdi5jZFwiOnRydWUsXCJjZlwiOnRydWUsXCJjZ1wiOnRydWUsXCJjaFwiOnRydWUsXCJjaVwiOnRydWUsXCJvcmcuY2lcIjp0cnVlLFwib3IuY2lcIjp0cnVlLFwiY29tLmNpXCI6dHJ1ZSxcImNvLmNpXCI6dHJ1ZSxcImVkdS5jaVwiOnRydWUsXCJlZC5jaVwiOnRydWUsXCJhYy5jaVwiOnRydWUsXCJuZXQuY2lcIjp0cnVlLFwiZ28uY2lcIjp0cnVlLFwiYXNzby5jaVwiOnRydWUsXCJ4bi0tYXJvcG9ydC1ieWEuY2lcIjp0cnVlLFwiaW50LmNpXCI6dHJ1ZSxcInByZXNzZS5jaVwiOnRydWUsXCJtZC5jaVwiOnRydWUsXCJnb3V2LmNpXCI6dHJ1ZSxcIiouY2tcIjp0cnVlLFwid3d3LmNrXCI6ZmFsc2UsXCJjbFwiOnRydWUsXCJnb3YuY2xcIjp0cnVlLFwiZ29iLmNsXCI6dHJ1ZSxcImNvLmNsXCI6dHJ1ZSxcIm1pbC5jbFwiOnRydWUsXCJjbVwiOnRydWUsXCJjby5jbVwiOnRydWUsXCJjb20uY21cIjp0cnVlLFwiZ292LmNtXCI6dHJ1ZSxcIm5ldC5jbVwiOnRydWUsXCJjblwiOnRydWUsXCJhYy5jblwiOnRydWUsXCJjb20uY25cIjp0cnVlLFwiZWR1LmNuXCI6dHJ1ZSxcImdvdi5jblwiOnRydWUsXCJuZXQuY25cIjp0cnVlLFwib3JnLmNuXCI6dHJ1ZSxcIm1pbC5jblwiOnRydWUsXCJ4bi0tNTVxeDVkLmNuXCI6dHJ1ZSxcInhuLS1pbzBhN2kuY25cIjp0cnVlLFwieG4tLW9kMGFsZy5jblwiOnRydWUsXCJhaC5jblwiOnRydWUsXCJiai5jblwiOnRydWUsXCJjcS5jblwiOnRydWUsXCJmai5jblwiOnRydWUsXCJnZC5jblwiOnRydWUsXCJncy5jblwiOnRydWUsXCJnei5jblwiOnRydWUsXCJneC5jblwiOnRydWUsXCJoYS5jblwiOnRydWUsXCJoYi5jblwiOnRydWUsXCJoZS5jblwiOnRydWUsXCJoaS5jblwiOnRydWUsXCJobC5jblwiOnRydWUsXCJobi5jblwiOnRydWUsXCJqbC5jblwiOnRydWUsXCJqcy5jblwiOnRydWUsXCJqeC5jblwiOnRydWUsXCJsbi5jblwiOnRydWUsXCJubS5jblwiOnRydWUsXCJueC5jblwiOnRydWUsXCJxaC5jblwiOnRydWUsXCJzYy5jblwiOnRydWUsXCJzZC5jblwiOnRydWUsXCJzaC5jblwiOnRydWUsXCJzbi5jblwiOnRydWUsXCJzeC5jblwiOnRydWUsXCJ0ai5jblwiOnRydWUsXCJ4ai5jblwiOnRydWUsXCJ4ei5jblwiOnRydWUsXCJ5bi5jblwiOnRydWUsXCJ6ai5jblwiOnRydWUsXCJoay5jblwiOnRydWUsXCJtby5jblwiOnRydWUsXCJ0dy5jblwiOnRydWUsXCJjb1wiOnRydWUsXCJhcnRzLmNvXCI6dHJ1ZSxcImNvbS5jb1wiOnRydWUsXCJlZHUuY29cIjp0cnVlLFwiZmlybS5jb1wiOnRydWUsXCJnb3YuY29cIjp0cnVlLFwiaW5mby5jb1wiOnRydWUsXCJpbnQuY29cIjp0cnVlLFwibWlsLmNvXCI6dHJ1ZSxcIm5ldC5jb1wiOnRydWUsXCJub20uY29cIjp0cnVlLFwib3JnLmNvXCI6dHJ1ZSxcInJlYy5jb1wiOnRydWUsXCJ3ZWIuY29cIjp0cnVlLFwiY29tXCI6dHJ1ZSxcImNvb3BcIjp0cnVlLFwiY3JcIjp0cnVlLFwiYWMuY3JcIjp0cnVlLFwiY28uY3JcIjp0cnVlLFwiZWQuY3JcIjp0cnVlLFwiZmkuY3JcIjp0cnVlLFwiZ28uY3JcIjp0cnVlLFwib3IuY3JcIjp0cnVlLFwic2EuY3JcIjp0cnVlLFwiY3VcIjp0cnVlLFwiY29tLmN1XCI6dHJ1ZSxcImVkdS5jdVwiOnRydWUsXCJvcmcuY3VcIjp0cnVlLFwibmV0LmN1XCI6dHJ1ZSxcImdvdi5jdVwiOnRydWUsXCJpbmYuY3VcIjp0cnVlLFwiY3ZcIjp0cnVlLFwiY3dcIjp0cnVlLFwiY29tLmN3XCI6dHJ1ZSxcImVkdS5jd1wiOnRydWUsXCJuZXQuY3dcIjp0cnVlLFwib3JnLmN3XCI6dHJ1ZSxcImN4XCI6dHJ1ZSxcImdvdi5jeFwiOnRydWUsXCJhYy5jeVwiOnRydWUsXCJiaXouY3lcIjp0cnVlLFwiY29tLmN5XCI6dHJ1ZSxcImVrbG9nZXMuY3lcIjp0cnVlLFwiZ292LmN5XCI6dHJ1ZSxcImx0ZC5jeVwiOnRydWUsXCJuYW1lLmN5XCI6dHJ1ZSxcIm5ldC5jeVwiOnRydWUsXCJvcmcuY3lcIjp0cnVlLFwicGFybGlhbWVudC5jeVwiOnRydWUsXCJwcmVzcy5jeVwiOnRydWUsXCJwcm8uY3lcIjp0cnVlLFwidG0uY3lcIjp0cnVlLFwiY3pcIjp0cnVlLFwiZGVcIjp0cnVlLFwiZGpcIjp0cnVlLFwiZGtcIjp0cnVlLFwiZG1cIjp0cnVlLFwiY29tLmRtXCI6dHJ1ZSxcIm5ldC5kbVwiOnRydWUsXCJvcmcuZG1cIjp0cnVlLFwiZWR1LmRtXCI6dHJ1ZSxcImdvdi5kbVwiOnRydWUsXCJkb1wiOnRydWUsXCJhcnQuZG9cIjp0cnVlLFwiY29tLmRvXCI6dHJ1ZSxcImVkdS5kb1wiOnRydWUsXCJnb2IuZG9cIjp0cnVlLFwiZ292LmRvXCI6dHJ1ZSxcIm1pbC5kb1wiOnRydWUsXCJuZXQuZG9cIjp0cnVlLFwib3JnLmRvXCI6dHJ1ZSxcInNsZC5kb1wiOnRydWUsXCJ3ZWIuZG9cIjp0cnVlLFwiZHpcIjp0cnVlLFwiY29tLmR6XCI6dHJ1ZSxcIm9yZy5kelwiOnRydWUsXCJuZXQuZHpcIjp0cnVlLFwiZ292LmR6XCI6dHJ1ZSxcImVkdS5kelwiOnRydWUsXCJhc3NvLmR6XCI6dHJ1ZSxcInBvbC5kelwiOnRydWUsXCJhcnQuZHpcIjp0cnVlLFwiZWNcIjp0cnVlLFwiY29tLmVjXCI6dHJ1ZSxcImluZm8uZWNcIjp0cnVlLFwibmV0LmVjXCI6dHJ1ZSxcImZpbi5lY1wiOnRydWUsXCJrMTIuZWNcIjp0cnVlLFwibWVkLmVjXCI6dHJ1ZSxcInByby5lY1wiOnRydWUsXCJvcmcuZWNcIjp0cnVlLFwiZWR1LmVjXCI6dHJ1ZSxcImdvdi5lY1wiOnRydWUsXCJnb2IuZWNcIjp0cnVlLFwibWlsLmVjXCI6dHJ1ZSxcImVkdVwiOnRydWUsXCJlZVwiOnRydWUsXCJlZHUuZWVcIjp0cnVlLFwiZ292LmVlXCI6dHJ1ZSxcInJpaWsuZWVcIjp0cnVlLFwibGliLmVlXCI6dHJ1ZSxcIm1lZC5lZVwiOnRydWUsXCJjb20uZWVcIjp0cnVlLFwicHJpLmVlXCI6dHJ1ZSxcImFpcC5lZVwiOnRydWUsXCJvcmcuZWVcIjp0cnVlLFwiZmllLmVlXCI6dHJ1ZSxcImVnXCI6dHJ1ZSxcImNvbS5lZ1wiOnRydWUsXCJlZHUuZWdcIjp0cnVlLFwiZXVuLmVnXCI6dHJ1ZSxcImdvdi5lZ1wiOnRydWUsXCJtaWwuZWdcIjp0cnVlLFwibmFtZS5lZ1wiOnRydWUsXCJuZXQuZWdcIjp0cnVlLFwib3JnLmVnXCI6dHJ1ZSxcInNjaS5lZ1wiOnRydWUsXCIqLmVyXCI6dHJ1ZSxcImVzXCI6dHJ1ZSxcImNvbS5lc1wiOnRydWUsXCJub20uZXNcIjp0cnVlLFwib3JnLmVzXCI6dHJ1ZSxcImdvYi5lc1wiOnRydWUsXCJlZHUuZXNcIjp0cnVlLFwiZXRcIjp0cnVlLFwiY29tLmV0XCI6dHJ1ZSxcImdvdi5ldFwiOnRydWUsXCJvcmcuZXRcIjp0cnVlLFwiZWR1LmV0XCI6dHJ1ZSxcImJpei5ldFwiOnRydWUsXCJuYW1lLmV0XCI6dHJ1ZSxcImluZm8uZXRcIjp0cnVlLFwibmV0LmV0XCI6dHJ1ZSxcImV1XCI6dHJ1ZSxcImZpXCI6dHJ1ZSxcImFsYW5kLmZpXCI6dHJ1ZSxcIiouZmpcIjp0cnVlLFwiKi5ma1wiOnRydWUsXCJmbVwiOnRydWUsXCJmb1wiOnRydWUsXCJmclwiOnRydWUsXCJjb20uZnJcIjp0cnVlLFwiYXNzby5mclwiOnRydWUsXCJub20uZnJcIjp0cnVlLFwicHJkLmZyXCI6dHJ1ZSxcInByZXNzZS5mclwiOnRydWUsXCJ0bS5mclwiOnRydWUsXCJhZXJvcG9ydC5mclwiOnRydWUsXCJhc3NlZGljLmZyXCI6dHJ1ZSxcImF2b2NhdC5mclwiOnRydWUsXCJhdm91ZXMuZnJcIjp0cnVlLFwiY2NpLmZyXCI6dHJ1ZSxcImNoYW1iYWdyaS5mclwiOnRydWUsXCJjaGlydXJnaWVucy1kZW50aXN0ZXMuZnJcIjp0cnVlLFwiZXhwZXJ0cy1jb21wdGFibGVzLmZyXCI6dHJ1ZSxcImdlb21ldHJlLWV4cGVydC5mclwiOnRydWUsXCJnb3V2LmZyXCI6dHJ1ZSxcImdyZXRhLmZyXCI6dHJ1ZSxcImh1aXNzaWVyLWp1c3RpY2UuZnJcIjp0cnVlLFwibWVkZWNpbi5mclwiOnRydWUsXCJub3RhaXJlcy5mclwiOnRydWUsXCJwaGFybWFjaWVuLmZyXCI6dHJ1ZSxcInBvcnQuZnJcIjp0cnVlLFwidmV0ZXJpbmFpcmUuZnJcIjp0cnVlLFwiZ2FcIjp0cnVlLFwiZ2JcIjp0cnVlLFwiZ2RcIjp0cnVlLFwiZ2VcIjp0cnVlLFwiY29tLmdlXCI6dHJ1ZSxcImVkdS5nZVwiOnRydWUsXCJnb3YuZ2VcIjp0cnVlLFwib3JnLmdlXCI6dHJ1ZSxcIm1pbC5nZVwiOnRydWUsXCJuZXQuZ2VcIjp0cnVlLFwicHZ0LmdlXCI6dHJ1ZSxcImdmXCI6dHJ1ZSxcImdnXCI6dHJ1ZSxcImNvLmdnXCI6dHJ1ZSxcIm5ldC5nZ1wiOnRydWUsXCJvcmcuZ2dcIjp0cnVlLFwiZ2hcIjp0cnVlLFwiY29tLmdoXCI6dHJ1ZSxcImVkdS5naFwiOnRydWUsXCJnb3YuZ2hcIjp0cnVlLFwib3JnLmdoXCI6dHJ1ZSxcIm1pbC5naFwiOnRydWUsXCJnaVwiOnRydWUsXCJjb20uZ2lcIjp0cnVlLFwibHRkLmdpXCI6dHJ1ZSxcImdvdi5naVwiOnRydWUsXCJtb2QuZ2lcIjp0cnVlLFwiZWR1LmdpXCI6dHJ1ZSxcIm9yZy5naVwiOnRydWUsXCJnbFwiOnRydWUsXCJjby5nbFwiOnRydWUsXCJjb20uZ2xcIjp0cnVlLFwiZWR1LmdsXCI6dHJ1ZSxcIm5ldC5nbFwiOnRydWUsXCJvcmcuZ2xcIjp0cnVlLFwiZ21cIjp0cnVlLFwiZ25cIjp0cnVlLFwiYWMuZ25cIjp0cnVlLFwiY29tLmduXCI6dHJ1ZSxcImVkdS5nblwiOnRydWUsXCJnb3YuZ25cIjp0cnVlLFwib3JnLmduXCI6dHJ1ZSxcIm5ldC5nblwiOnRydWUsXCJnb3ZcIjp0cnVlLFwiZ3BcIjp0cnVlLFwiY29tLmdwXCI6dHJ1ZSxcIm5ldC5ncFwiOnRydWUsXCJtb2JpLmdwXCI6dHJ1ZSxcImVkdS5ncFwiOnRydWUsXCJvcmcuZ3BcIjp0cnVlLFwiYXNzby5ncFwiOnRydWUsXCJncVwiOnRydWUsXCJnclwiOnRydWUsXCJjb20uZ3JcIjp0cnVlLFwiZWR1LmdyXCI6dHJ1ZSxcIm5ldC5nclwiOnRydWUsXCJvcmcuZ3JcIjp0cnVlLFwiZ292LmdyXCI6dHJ1ZSxcImdzXCI6dHJ1ZSxcImd0XCI6dHJ1ZSxcImNvbS5ndFwiOnRydWUsXCJlZHUuZ3RcIjp0cnVlLFwiZ29iLmd0XCI6dHJ1ZSxcImluZC5ndFwiOnRydWUsXCJtaWwuZ3RcIjp0cnVlLFwibmV0Lmd0XCI6dHJ1ZSxcIm9yZy5ndFwiOnRydWUsXCIqLmd1XCI6dHJ1ZSxcImd3XCI6dHJ1ZSxcImd5XCI6dHJ1ZSxcImNvLmd5XCI6dHJ1ZSxcImNvbS5neVwiOnRydWUsXCJuZXQuZ3lcIjp0cnVlLFwiaGtcIjp0cnVlLFwiY29tLmhrXCI6dHJ1ZSxcImVkdS5oa1wiOnRydWUsXCJnb3YuaGtcIjp0cnVlLFwiaWR2LmhrXCI6dHJ1ZSxcIm5ldC5oa1wiOnRydWUsXCJvcmcuaGtcIjp0cnVlLFwieG4tLTU1cXg1ZC5oa1wiOnRydWUsXCJ4bi0td2N2czIyZC5oa1wiOnRydWUsXCJ4bi0tbGN2cjMyZC5oa1wiOnRydWUsXCJ4bi0tbXh0cTFtLmhrXCI6dHJ1ZSxcInhuLS1nbXF3NWEuaGtcIjp0cnVlLFwieG4tLWNpcXBuLmhrXCI6dHJ1ZSxcInhuLS1nbXEwNTBpLmhrXCI6dHJ1ZSxcInhuLS16ZjBhdnguaGtcIjp0cnVlLFwieG4tLWlvMGE3aS5oa1wiOnRydWUsXCJ4bi0tbWswYXhpLmhrXCI6dHJ1ZSxcInhuLS1vZDBhbGcuaGtcIjp0cnVlLFwieG4tLW9kMGFxM2IuaGtcIjp0cnVlLFwieG4tLXRuMGFnLmhrXCI6dHJ1ZSxcInhuLS11YzBhdHYuaGtcIjp0cnVlLFwieG4tLXVjMGF5NGEuaGtcIjp0cnVlLFwiaG1cIjp0cnVlLFwiaG5cIjp0cnVlLFwiY29tLmhuXCI6dHJ1ZSxcImVkdS5oblwiOnRydWUsXCJvcmcuaG5cIjp0cnVlLFwibmV0LmhuXCI6dHJ1ZSxcIm1pbC5oblwiOnRydWUsXCJnb2IuaG5cIjp0cnVlLFwiaHJcIjp0cnVlLFwiaXouaHJcIjp0cnVlLFwiZnJvbS5oclwiOnRydWUsXCJuYW1lLmhyXCI6dHJ1ZSxcImNvbS5oclwiOnRydWUsXCJodFwiOnRydWUsXCJjb20uaHRcIjp0cnVlLFwic2hvcC5odFwiOnRydWUsXCJmaXJtLmh0XCI6dHJ1ZSxcImluZm8uaHRcIjp0cnVlLFwiYWR1bHQuaHRcIjp0cnVlLFwibmV0Lmh0XCI6dHJ1ZSxcInByby5odFwiOnRydWUsXCJvcmcuaHRcIjp0cnVlLFwibWVkLmh0XCI6dHJ1ZSxcImFydC5odFwiOnRydWUsXCJjb29wLmh0XCI6dHJ1ZSxcInBvbC5odFwiOnRydWUsXCJhc3NvLmh0XCI6dHJ1ZSxcImVkdS5odFwiOnRydWUsXCJyZWwuaHRcIjp0cnVlLFwiZ291di5odFwiOnRydWUsXCJwZXJzby5odFwiOnRydWUsXCJodVwiOnRydWUsXCJjby5odVwiOnRydWUsXCJpbmZvLmh1XCI6dHJ1ZSxcIm9yZy5odVwiOnRydWUsXCJwcml2Lmh1XCI6dHJ1ZSxcInNwb3J0Lmh1XCI6dHJ1ZSxcInRtLmh1XCI6dHJ1ZSxcIjIwMDAuaHVcIjp0cnVlLFwiYWdyYXIuaHVcIjp0cnVlLFwiYm9sdC5odVwiOnRydWUsXCJjYXNpbm8uaHVcIjp0cnVlLFwiY2l0eS5odVwiOnRydWUsXCJlcm90aWNhLmh1XCI6dHJ1ZSxcImVyb3Rpa2EuaHVcIjp0cnVlLFwiZmlsbS5odVwiOnRydWUsXCJmb3J1bS5odVwiOnRydWUsXCJnYW1lcy5odVwiOnRydWUsXCJob3RlbC5odVwiOnRydWUsXCJpbmdhdGxhbi5odVwiOnRydWUsXCJqb2dhc3ouaHVcIjp0cnVlLFwia29ueXZlbG8uaHVcIjp0cnVlLFwibGFrYXMuaHVcIjp0cnVlLFwibWVkaWEuaHVcIjp0cnVlLFwibmV3cy5odVwiOnRydWUsXCJyZWtsYW0uaHVcIjp0cnVlLFwic2V4Lmh1XCI6dHJ1ZSxcInNob3AuaHVcIjp0cnVlLFwic3VsaS5odVwiOnRydWUsXCJzemV4Lmh1XCI6dHJ1ZSxcInRvenNkZS5odVwiOnRydWUsXCJ1dGF6YXMuaHVcIjp0cnVlLFwidmlkZW8uaHVcIjp0cnVlLFwiaWRcIjp0cnVlLFwiYWMuaWRcIjp0cnVlLFwiYml6LmlkXCI6dHJ1ZSxcImNvLmlkXCI6dHJ1ZSxcImRlc2EuaWRcIjp0cnVlLFwiZ28uaWRcIjp0cnVlLFwibWlsLmlkXCI6dHJ1ZSxcIm15LmlkXCI6dHJ1ZSxcIm5ldC5pZFwiOnRydWUsXCJvci5pZFwiOnRydWUsXCJzY2guaWRcIjp0cnVlLFwid2ViLmlkXCI6dHJ1ZSxcImllXCI6dHJ1ZSxcImdvdi5pZVwiOnRydWUsXCJpbFwiOnRydWUsXCJhYy5pbFwiOnRydWUsXCJjby5pbFwiOnRydWUsXCJnb3YuaWxcIjp0cnVlLFwiaWRmLmlsXCI6dHJ1ZSxcImsxMi5pbFwiOnRydWUsXCJtdW5pLmlsXCI6dHJ1ZSxcIm5ldC5pbFwiOnRydWUsXCJvcmcuaWxcIjp0cnVlLFwiaW1cIjp0cnVlLFwiYWMuaW1cIjp0cnVlLFwiY28uaW1cIjp0cnVlLFwiY29tLmltXCI6dHJ1ZSxcImx0ZC5jby5pbVwiOnRydWUsXCJuZXQuaW1cIjp0cnVlLFwib3JnLmltXCI6dHJ1ZSxcInBsYy5jby5pbVwiOnRydWUsXCJ0dC5pbVwiOnRydWUsXCJ0di5pbVwiOnRydWUsXCJpblwiOnRydWUsXCJjby5pblwiOnRydWUsXCJmaXJtLmluXCI6dHJ1ZSxcIm5ldC5pblwiOnRydWUsXCJvcmcuaW5cIjp0cnVlLFwiZ2VuLmluXCI6dHJ1ZSxcImluZC5pblwiOnRydWUsXCJuaWMuaW5cIjp0cnVlLFwiYWMuaW5cIjp0cnVlLFwiZWR1LmluXCI6dHJ1ZSxcInJlcy5pblwiOnRydWUsXCJnb3YuaW5cIjp0cnVlLFwibWlsLmluXCI6dHJ1ZSxcImluZm9cIjp0cnVlLFwiaW50XCI6dHJ1ZSxcImV1LmludFwiOnRydWUsXCJpb1wiOnRydWUsXCJjb20uaW9cIjp0cnVlLFwiaXFcIjp0cnVlLFwiZ292LmlxXCI6dHJ1ZSxcImVkdS5pcVwiOnRydWUsXCJtaWwuaXFcIjp0cnVlLFwiY29tLmlxXCI6dHJ1ZSxcIm9yZy5pcVwiOnRydWUsXCJuZXQuaXFcIjp0cnVlLFwiaXJcIjp0cnVlLFwiYWMuaXJcIjp0cnVlLFwiY28uaXJcIjp0cnVlLFwiZ292LmlyXCI6dHJ1ZSxcImlkLmlyXCI6dHJ1ZSxcIm5ldC5pclwiOnRydWUsXCJvcmcuaXJcIjp0cnVlLFwic2NoLmlyXCI6dHJ1ZSxcInhuLS1tZ2JhM2E0ZjE2YS5pclwiOnRydWUsXCJ4bi0tbWdiYTNhNGZyYS5pclwiOnRydWUsXCJpc1wiOnRydWUsXCJuZXQuaXNcIjp0cnVlLFwiY29tLmlzXCI6dHJ1ZSxcImVkdS5pc1wiOnRydWUsXCJnb3YuaXNcIjp0cnVlLFwib3JnLmlzXCI6dHJ1ZSxcImludC5pc1wiOnRydWUsXCJpdFwiOnRydWUsXCJnb3YuaXRcIjp0cnVlLFwiZWR1Lml0XCI6dHJ1ZSxcImFici5pdFwiOnRydWUsXCJhYnJ1enpvLml0XCI6dHJ1ZSxcImFvc3RhLXZhbGxleS5pdFwiOnRydWUsXCJhb3N0YXZhbGxleS5pdFwiOnRydWUsXCJiYXMuaXRcIjp0cnVlLFwiYmFzaWxpY2F0YS5pdFwiOnRydWUsXCJjYWwuaXRcIjp0cnVlLFwiY2FsYWJyaWEuaXRcIjp0cnVlLFwiY2FtLml0XCI6dHJ1ZSxcImNhbXBhbmlhLml0XCI6dHJ1ZSxcImVtaWxpYS1yb21hZ25hLml0XCI6dHJ1ZSxcImVtaWxpYXJvbWFnbmEuaXRcIjp0cnVlLFwiZW1yLml0XCI6dHJ1ZSxcImZyaXVsaS12LWdpdWxpYS5pdFwiOnRydWUsXCJmcml1bGktdmUtZ2l1bGlhLml0XCI6dHJ1ZSxcImZyaXVsaS12ZWdpdWxpYS5pdFwiOnRydWUsXCJmcml1bGktdmVuZXppYS1naXVsaWEuaXRcIjp0cnVlLFwiZnJpdWxpLXZlbmV6aWFnaXVsaWEuaXRcIjp0cnVlLFwiZnJpdWxpLXZnaXVsaWEuaXRcIjp0cnVlLFwiZnJpdWxpdi1naXVsaWEuaXRcIjp0cnVlLFwiZnJpdWxpdmUtZ2l1bGlhLml0XCI6dHJ1ZSxcImZyaXVsaXZlZ2l1bGlhLml0XCI6dHJ1ZSxcImZyaXVsaXZlbmV6aWEtZ2l1bGlhLml0XCI6dHJ1ZSxcImZyaXVsaXZlbmV6aWFnaXVsaWEuaXRcIjp0cnVlLFwiZnJpdWxpdmdpdWxpYS5pdFwiOnRydWUsXCJmdmcuaXRcIjp0cnVlLFwibGF6Lml0XCI6dHJ1ZSxcImxhemlvLml0XCI6dHJ1ZSxcImxpZy5pdFwiOnRydWUsXCJsaWd1cmlhLml0XCI6dHJ1ZSxcImxvbS5pdFwiOnRydWUsXCJsb21iYXJkaWEuaXRcIjp0cnVlLFwibG9tYmFyZHkuaXRcIjp0cnVlLFwibHVjYW5pYS5pdFwiOnRydWUsXCJtYXIuaXRcIjp0cnVlLFwibWFyY2hlLml0XCI6dHJ1ZSxcIm1vbC5pdFwiOnRydWUsXCJtb2xpc2UuaXRcIjp0cnVlLFwicGllZG1vbnQuaXRcIjp0cnVlLFwicGllbW9udGUuaXRcIjp0cnVlLFwicG1uLml0XCI6dHJ1ZSxcInB1Zy5pdFwiOnRydWUsXCJwdWdsaWEuaXRcIjp0cnVlLFwic2FyLml0XCI6dHJ1ZSxcInNhcmRlZ25hLml0XCI6dHJ1ZSxcInNhcmRpbmlhLml0XCI6dHJ1ZSxcInNpYy5pdFwiOnRydWUsXCJzaWNpbGlhLml0XCI6dHJ1ZSxcInNpY2lseS5pdFwiOnRydWUsXCJ0YWEuaXRcIjp0cnVlLFwidG9zLml0XCI6dHJ1ZSxcInRvc2NhbmEuaXRcIjp0cnVlLFwidHJlbnRpbm8tYS1hZGlnZS5pdFwiOnRydWUsXCJ0cmVudGluby1hYWRpZ2UuaXRcIjp0cnVlLFwidHJlbnRpbm8tYWx0by1hZGlnZS5pdFwiOnRydWUsXCJ0cmVudGluby1hbHRvYWRpZ2UuaXRcIjp0cnVlLFwidHJlbnRpbm8tcy10aXJvbC5pdFwiOnRydWUsXCJ0cmVudGluby1zdGlyb2wuaXRcIjp0cnVlLFwidHJlbnRpbm8tc3VkLXRpcm9sLml0XCI6dHJ1ZSxcInRyZW50aW5vLXN1ZHRpcm9sLml0XCI6dHJ1ZSxcInRyZW50aW5vLXN1ZWQtdGlyb2wuaXRcIjp0cnVlLFwidHJlbnRpbm8tc3VlZHRpcm9sLml0XCI6dHJ1ZSxcInRyZW50aW5vYS1hZGlnZS5pdFwiOnRydWUsXCJ0cmVudGlub2FhZGlnZS5pdFwiOnRydWUsXCJ0cmVudGlub2FsdG8tYWRpZ2UuaXRcIjp0cnVlLFwidHJlbnRpbm9hbHRvYWRpZ2UuaXRcIjp0cnVlLFwidHJlbnRpbm9zLXRpcm9sLml0XCI6dHJ1ZSxcInRyZW50aW5vc3Rpcm9sLml0XCI6dHJ1ZSxcInRyZW50aW5vc3VkLXRpcm9sLml0XCI6dHJ1ZSxcInRyZW50aW5vc3VkdGlyb2wuaXRcIjp0cnVlLFwidHJlbnRpbm9zdWVkLXRpcm9sLml0XCI6dHJ1ZSxcInRyZW50aW5vc3VlZHRpcm9sLml0XCI6dHJ1ZSxcInR1c2NhbnkuaXRcIjp0cnVlLFwidW1iLml0XCI6dHJ1ZSxcInVtYnJpYS5pdFwiOnRydWUsXCJ2YWwtZC1hb3N0YS5pdFwiOnRydWUsXCJ2YWwtZGFvc3RhLml0XCI6dHJ1ZSxcInZhbGQtYW9zdGEuaXRcIjp0cnVlLFwidmFsZGFvc3RhLml0XCI6dHJ1ZSxcInZhbGxlLWFvc3RhLml0XCI6dHJ1ZSxcInZhbGxlLWQtYW9zdGEuaXRcIjp0cnVlLFwidmFsbGUtZGFvc3RhLml0XCI6dHJ1ZSxcInZhbGxlYW9zdGEuaXRcIjp0cnVlLFwidmFsbGVkLWFvc3RhLml0XCI6dHJ1ZSxcInZhbGxlZGFvc3RhLml0XCI6dHJ1ZSxcInZhbGxlZS1hb3N0ZS5pdFwiOnRydWUsXCJ2YWxsZWVhb3N0ZS5pdFwiOnRydWUsXCJ2YW8uaXRcIjp0cnVlLFwidmRhLml0XCI6dHJ1ZSxcInZlbi5pdFwiOnRydWUsXCJ2ZW5ldG8uaXRcIjp0cnVlLFwiYWcuaXRcIjp0cnVlLFwiYWdyaWdlbnRvLml0XCI6dHJ1ZSxcImFsLml0XCI6dHJ1ZSxcImFsZXNzYW5kcmlhLml0XCI6dHJ1ZSxcImFsdG8tYWRpZ2UuaXRcIjp0cnVlLFwiYWx0b2FkaWdlLml0XCI6dHJ1ZSxcImFuLml0XCI6dHJ1ZSxcImFuY29uYS5pdFwiOnRydWUsXCJhbmRyaWEtYmFybGV0dGEtdHJhbmkuaXRcIjp0cnVlLFwiYW5kcmlhLXRyYW5pLWJhcmxldHRhLml0XCI6dHJ1ZSxcImFuZHJpYWJhcmxldHRhdHJhbmkuaXRcIjp0cnVlLFwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdFwiOnRydWUsXCJhby5pdFwiOnRydWUsXCJhb3N0YS5pdFwiOnRydWUsXCJhb3N0ZS5pdFwiOnRydWUsXCJhcC5pdFwiOnRydWUsXCJhcS5pdFwiOnRydWUsXCJhcXVpbGEuaXRcIjp0cnVlLFwiYXIuaXRcIjp0cnVlLFwiYXJlenpvLml0XCI6dHJ1ZSxcImFzY29saS1waWNlbm8uaXRcIjp0cnVlLFwiYXNjb2xpcGljZW5vLml0XCI6dHJ1ZSxcImFzdGkuaXRcIjp0cnVlLFwiYXQuaXRcIjp0cnVlLFwiYXYuaXRcIjp0cnVlLFwiYXZlbGxpbm8uaXRcIjp0cnVlLFwiYmEuaXRcIjp0cnVlLFwiYmFsc2FuLml0XCI6dHJ1ZSxcImJhcmkuaXRcIjp0cnVlLFwiYmFybGV0dGEtdHJhbmktYW5kcmlhLml0XCI6dHJ1ZSxcImJhcmxldHRhdHJhbmlhbmRyaWEuaXRcIjp0cnVlLFwiYmVsbHVuby5pdFwiOnRydWUsXCJiZW5ldmVudG8uaXRcIjp0cnVlLFwiYmVyZ2Ftby5pdFwiOnRydWUsXCJiZy5pdFwiOnRydWUsXCJiaS5pdFwiOnRydWUsXCJiaWVsbGEuaXRcIjp0cnVlLFwiYmwuaXRcIjp0cnVlLFwiYm4uaXRcIjp0cnVlLFwiYm8uaXRcIjp0cnVlLFwiYm9sb2duYS5pdFwiOnRydWUsXCJib2x6YW5vLml0XCI6dHJ1ZSxcImJvemVuLml0XCI6dHJ1ZSxcImJyLml0XCI6dHJ1ZSxcImJyZXNjaWEuaXRcIjp0cnVlLFwiYnJpbmRpc2kuaXRcIjp0cnVlLFwiYnMuaXRcIjp0cnVlLFwiYnQuaXRcIjp0cnVlLFwiYnouaXRcIjp0cnVlLFwiY2EuaXRcIjp0cnVlLFwiY2FnbGlhcmkuaXRcIjp0cnVlLFwiY2FsdGFuaXNzZXR0YS5pdFwiOnRydWUsXCJjYW1waWRhbm8tbWVkaW8uaXRcIjp0cnVlLFwiY2FtcGlkYW5vbWVkaW8uaXRcIjp0cnVlLFwiY2FtcG9iYXNzby5pdFwiOnRydWUsXCJjYXJib25pYS1pZ2xlc2lhcy5pdFwiOnRydWUsXCJjYXJib25pYWlnbGVzaWFzLml0XCI6dHJ1ZSxcImNhcnJhcmEtbWFzc2EuaXRcIjp0cnVlLFwiY2FycmFyYW1hc3NhLml0XCI6dHJ1ZSxcImNhc2VydGEuaXRcIjp0cnVlLFwiY2F0YW5pYS5pdFwiOnRydWUsXCJjYXRhbnphcm8uaXRcIjp0cnVlLFwiY2IuaXRcIjp0cnVlLFwiY2UuaXRcIjp0cnVlLFwiY2VzZW5hLWZvcmxpLml0XCI6dHJ1ZSxcImNlc2VuYWZvcmxpLml0XCI6dHJ1ZSxcImNoLml0XCI6dHJ1ZSxcImNoaWV0aS5pdFwiOnRydWUsXCJjaS5pdFwiOnRydWUsXCJjbC5pdFwiOnRydWUsXCJjbi5pdFwiOnRydWUsXCJjby5pdFwiOnRydWUsXCJjb21vLml0XCI6dHJ1ZSxcImNvc2VuemEuaXRcIjp0cnVlLFwiY3IuaXRcIjp0cnVlLFwiY3JlbW9uYS5pdFwiOnRydWUsXCJjcm90b25lLml0XCI6dHJ1ZSxcImNzLml0XCI6dHJ1ZSxcImN0Lml0XCI6dHJ1ZSxcImN1bmVvLml0XCI6dHJ1ZSxcImN6Lml0XCI6dHJ1ZSxcImRlbGwtb2dsaWFzdHJhLml0XCI6dHJ1ZSxcImRlbGxvZ2xpYXN0cmEuaXRcIjp0cnVlLFwiZW4uaXRcIjp0cnVlLFwiZW5uYS5pdFwiOnRydWUsXCJmYy5pdFwiOnRydWUsXCJmZS5pdFwiOnRydWUsXCJmZXJtby5pdFwiOnRydWUsXCJmZXJyYXJhLml0XCI6dHJ1ZSxcImZnLml0XCI6dHJ1ZSxcImZpLml0XCI6dHJ1ZSxcImZpcmVuemUuaXRcIjp0cnVlLFwiZmxvcmVuY2UuaXRcIjp0cnVlLFwiZm0uaXRcIjp0cnVlLFwiZm9nZ2lhLml0XCI6dHJ1ZSxcImZvcmxpLWNlc2VuYS5pdFwiOnRydWUsXCJmb3JsaWNlc2VuYS5pdFwiOnRydWUsXCJmci5pdFwiOnRydWUsXCJmcm9zaW5vbmUuaXRcIjp0cnVlLFwiZ2UuaXRcIjp0cnVlLFwiZ2Vub2EuaXRcIjp0cnVlLFwiZ2Vub3ZhLml0XCI6dHJ1ZSxcImdvLml0XCI6dHJ1ZSxcImdvcml6aWEuaXRcIjp0cnVlLFwiZ3IuaXRcIjp0cnVlLFwiZ3Jvc3NldG8uaXRcIjp0cnVlLFwiaWdsZXNpYXMtY2FyYm9uaWEuaXRcIjp0cnVlLFwiaWdsZXNpYXNjYXJib25pYS5pdFwiOnRydWUsXCJpbS5pdFwiOnRydWUsXCJpbXBlcmlhLml0XCI6dHJ1ZSxcImlzLml0XCI6dHJ1ZSxcImlzZXJuaWEuaXRcIjp0cnVlLFwia3IuaXRcIjp0cnVlLFwibGEtc3BlemlhLml0XCI6dHJ1ZSxcImxhcXVpbGEuaXRcIjp0cnVlLFwibGFzcGV6aWEuaXRcIjp0cnVlLFwibGF0aW5hLml0XCI6dHJ1ZSxcImxjLml0XCI6dHJ1ZSxcImxlLml0XCI6dHJ1ZSxcImxlY2NlLml0XCI6dHJ1ZSxcImxlY2NvLml0XCI6dHJ1ZSxcImxpLml0XCI6dHJ1ZSxcImxpdm9ybm8uaXRcIjp0cnVlLFwibG8uaXRcIjp0cnVlLFwibG9kaS5pdFwiOnRydWUsXCJsdC5pdFwiOnRydWUsXCJsdS5pdFwiOnRydWUsXCJsdWNjYS5pdFwiOnRydWUsXCJtYWNlcmF0YS5pdFwiOnRydWUsXCJtYW50b3ZhLml0XCI6dHJ1ZSxcIm1hc3NhLWNhcnJhcmEuaXRcIjp0cnVlLFwibWFzc2FjYXJyYXJhLml0XCI6dHJ1ZSxcIm1hdGVyYS5pdFwiOnRydWUsXCJtYi5pdFwiOnRydWUsXCJtYy5pdFwiOnRydWUsXCJtZS5pdFwiOnRydWUsXCJtZWRpby1jYW1waWRhbm8uaXRcIjp0cnVlLFwibWVkaW9jYW1waWRhbm8uaXRcIjp0cnVlLFwibWVzc2luYS5pdFwiOnRydWUsXCJtaS5pdFwiOnRydWUsXCJtaWxhbi5pdFwiOnRydWUsXCJtaWxhbm8uaXRcIjp0cnVlLFwibW4uaXRcIjp0cnVlLFwibW8uaXRcIjp0cnVlLFwibW9kZW5hLml0XCI6dHJ1ZSxcIm1vbnphLWJyaWFuemEuaXRcIjp0cnVlLFwibW9uemEtZS1kZWxsYS1icmlhbnphLml0XCI6dHJ1ZSxcIm1vbnphLml0XCI6dHJ1ZSxcIm1vbnphYnJpYW56YS5pdFwiOnRydWUsXCJtb256YWVicmlhbnphLml0XCI6dHJ1ZSxcIm1vbnphZWRlbGxhYnJpYW56YS5pdFwiOnRydWUsXCJtcy5pdFwiOnRydWUsXCJtdC5pdFwiOnRydWUsXCJuYS5pdFwiOnRydWUsXCJuYXBsZXMuaXRcIjp0cnVlLFwibmFwb2xpLml0XCI6dHJ1ZSxcIm5vLml0XCI6dHJ1ZSxcIm5vdmFyYS5pdFwiOnRydWUsXCJudS5pdFwiOnRydWUsXCJudW9yby5pdFwiOnRydWUsXCJvZy5pdFwiOnRydWUsXCJvZ2xpYXN0cmEuaXRcIjp0cnVlLFwib2xiaWEtdGVtcGlvLml0XCI6dHJ1ZSxcIm9sYmlhdGVtcGlvLml0XCI6dHJ1ZSxcIm9yLml0XCI6dHJ1ZSxcIm9yaXN0YW5vLml0XCI6dHJ1ZSxcIm90Lml0XCI6dHJ1ZSxcInBhLml0XCI6dHJ1ZSxcInBhZG92YS5pdFwiOnRydWUsXCJwYWR1YS5pdFwiOnRydWUsXCJwYWxlcm1vLml0XCI6dHJ1ZSxcInBhcm1hLml0XCI6dHJ1ZSxcInBhdmlhLml0XCI6dHJ1ZSxcInBjLml0XCI6dHJ1ZSxcInBkLml0XCI6dHJ1ZSxcInBlLml0XCI6dHJ1ZSxcInBlcnVnaWEuaXRcIjp0cnVlLFwicGVzYXJvLXVyYmluby5pdFwiOnRydWUsXCJwZXNhcm91cmJpbm8uaXRcIjp0cnVlLFwicGVzY2FyYS5pdFwiOnRydWUsXCJwZy5pdFwiOnRydWUsXCJwaS5pdFwiOnRydWUsXCJwaWFjZW56YS5pdFwiOnRydWUsXCJwaXNhLml0XCI6dHJ1ZSxcInBpc3RvaWEuaXRcIjp0cnVlLFwicG4uaXRcIjp0cnVlLFwicG8uaXRcIjp0cnVlLFwicG9yZGVub25lLml0XCI6dHJ1ZSxcInBvdGVuemEuaXRcIjp0cnVlLFwicHIuaXRcIjp0cnVlLFwicHJhdG8uaXRcIjp0cnVlLFwicHQuaXRcIjp0cnVlLFwicHUuaXRcIjp0cnVlLFwicHYuaXRcIjp0cnVlLFwicHouaXRcIjp0cnVlLFwicmEuaXRcIjp0cnVlLFwicmFndXNhLml0XCI6dHJ1ZSxcInJhdmVubmEuaXRcIjp0cnVlLFwicmMuaXRcIjp0cnVlLFwicmUuaXRcIjp0cnVlLFwicmVnZ2lvLWNhbGFicmlhLml0XCI6dHJ1ZSxcInJlZ2dpby1lbWlsaWEuaXRcIjp0cnVlLFwicmVnZ2lvY2FsYWJyaWEuaXRcIjp0cnVlLFwicmVnZ2lvZW1pbGlhLml0XCI6dHJ1ZSxcInJnLml0XCI6dHJ1ZSxcInJpLml0XCI6dHJ1ZSxcInJpZXRpLml0XCI6dHJ1ZSxcInJpbWluaS5pdFwiOnRydWUsXCJybS5pdFwiOnRydWUsXCJybi5pdFwiOnRydWUsXCJyby5pdFwiOnRydWUsXCJyb21hLml0XCI6dHJ1ZSxcInJvbWUuaXRcIjp0cnVlLFwicm92aWdvLml0XCI6dHJ1ZSxcInNhLml0XCI6dHJ1ZSxcInNhbGVybm8uaXRcIjp0cnVlLFwic2Fzc2FyaS5pdFwiOnRydWUsXCJzYXZvbmEuaXRcIjp0cnVlLFwic2kuaXRcIjp0cnVlLFwic2llbmEuaXRcIjp0cnVlLFwic2lyYWN1c2EuaXRcIjp0cnVlLFwic28uaXRcIjp0cnVlLFwic29uZHJpby5pdFwiOnRydWUsXCJzcC5pdFwiOnRydWUsXCJzci5pdFwiOnRydWUsXCJzcy5pdFwiOnRydWUsXCJzdWVkdGlyb2wuaXRcIjp0cnVlLFwic3YuaXRcIjp0cnVlLFwidGEuaXRcIjp0cnVlLFwidGFyYW50by5pdFwiOnRydWUsXCJ0ZS5pdFwiOnRydWUsXCJ0ZW1waW8tb2xiaWEuaXRcIjp0cnVlLFwidGVtcGlvb2xiaWEuaXRcIjp0cnVlLFwidGVyYW1vLml0XCI6dHJ1ZSxcInRlcm5pLml0XCI6dHJ1ZSxcInRuLml0XCI6dHJ1ZSxcInRvLml0XCI6dHJ1ZSxcInRvcmluby5pdFwiOnRydWUsXCJ0cC5pdFwiOnRydWUsXCJ0ci5pdFwiOnRydWUsXCJ0cmFuaS1hbmRyaWEtYmFybGV0dGEuaXRcIjp0cnVlLFwidHJhbmktYmFybGV0dGEtYW5kcmlhLml0XCI6dHJ1ZSxcInRyYW5pYW5kcmlhYmFybGV0dGEuaXRcIjp0cnVlLFwidHJhbmliYXJsZXR0YWFuZHJpYS5pdFwiOnRydWUsXCJ0cmFwYW5pLml0XCI6dHJ1ZSxcInRyZW50aW5vLml0XCI6dHJ1ZSxcInRyZW50by5pdFwiOnRydWUsXCJ0cmV2aXNvLml0XCI6dHJ1ZSxcInRyaWVzdGUuaXRcIjp0cnVlLFwidHMuaXRcIjp0cnVlLFwidHVyaW4uaXRcIjp0cnVlLFwidHYuaXRcIjp0cnVlLFwidWQuaXRcIjp0cnVlLFwidWRpbmUuaXRcIjp0cnVlLFwidXJiaW5vLXBlc2Fyby5pdFwiOnRydWUsXCJ1cmJpbm9wZXNhcm8uaXRcIjp0cnVlLFwidmEuaXRcIjp0cnVlLFwidmFyZXNlLml0XCI6dHJ1ZSxcInZiLml0XCI6dHJ1ZSxcInZjLml0XCI6dHJ1ZSxcInZlLml0XCI6dHJ1ZSxcInZlbmV6aWEuaXRcIjp0cnVlLFwidmVuaWNlLml0XCI6dHJ1ZSxcInZlcmJhbmlhLml0XCI6dHJ1ZSxcInZlcmNlbGxpLml0XCI6dHJ1ZSxcInZlcm9uYS5pdFwiOnRydWUsXCJ2aS5pdFwiOnRydWUsXCJ2aWJvLXZhbGVudGlhLml0XCI6dHJ1ZSxcInZpYm92YWxlbnRpYS5pdFwiOnRydWUsXCJ2aWNlbnphLml0XCI6dHJ1ZSxcInZpdGVyYm8uaXRcIjp0cnVlLFwidnIuaXRcIjp0cnVlLFwidnMuaXRcIjp0cnVlLFwidnQuaXRcIjp0cnVlLFwidnYuaXRcIjp0cnVlLFwiamVcIjp0cnVlLFwiY28uamVcIjp0cnVlLFwibmV0LmplXCI6dHJ1ZSxcIm9yZy5qZVwiOnRydWUsXCIqLmptXCI6dHJ1ZSxcImpvXCI6dHJ1ZSxcImNvbS5qb1wiOnRydWUsXCJvcmcuam9cIjp0cnVlLFwibmV0LmpvXCI6dHJ1ZSxcImVkdS5qb1wiOnRydWUsXCJzY2guam9cIjp0cnVlLFwiZ292LmpvXCI6dHJ1ZSxcIm1pbC5qb1wiOnRydWUsXCJuYW1lLmpvXCI6dHJ1ZSxcImpvYnNcIjp0cnVlLFwianBcIjp0cnVlLFwiYWMuanBcIjp0cnVlLFwiYWQuanBcIjp0cnVlLFwiY28uanBcIjp0cnVlLFwiZWQuanBcIjp0cnVlLFwiZ28uanBcIjp0cnVlLFwiZ3IuanBcIjp0cnVlLFwibGcuanBcIjp0cnVlLFwibmUuanBcIjp0cnVlLFwib3IuanBcIjp0cnVlLFwiYWljaGkuanBcIjp0cnVlLFwiYWtpdGEuanBcIjp0cnVlLFwiYW9tb3JpLmpwXCI6dHJ1ZSxcImNoaWJhLmpwXCI6dHJ1ZSxcImVoaW1lLmpwXCI6dHJ1ZSxcImZ1a3VpLmpwXCI6dHJ1ZSxcImZ1a3Vva2EuanBcIjp0cnVlLFwiZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImdpZnUuanBcIjp0cnVlLFwiZ3VubWEuanBcIjp0cnVlLFwiaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcImhva2thaWRvLmpwXCI6dHJ1ZSxcImh5b2dvLmpwXCI6dHJ1ZSxcImliYXJha2kuanBcIjp0cnVlLFwiaXNoaWthd2EuanBcIjp0cnVlLFwiaXdhdGUuanBcIjp0cnVlLFwia2FnYXdhLmpwXCI6dHJ1ZSxcImthZ29zaGltYS5qcFwiOnRydWUsXCJrYW5hZ2F3YS5qcFwiOnRydWUsXCJrb2NoaS5qcFwiOnRydWUsXCJrdW1hbW90by5qcFwiOnRydWUsXCJreW90by5qcFwiOnRydWUsXCJtaWUuanBcIjp0cnVlLFwibWl5YWdpLmpwXCI6dHJ1ZSxcIm1peWF6YWtpLmpwXCI6dHJ1ZSxcIm5hZ2Fuby5qcFwiOnRydWUsXCJuYWdhc2FraS5qcFwiOnRydWUsXCJuYXJhLmpwXCI6dHJ1ZSxcIm5paWdhdGEuanBcIjp0cnVlLFwib2l0YS5qcFwiOnRydWUsXCJva2F5YW1hLmpwXCI6dHJ1ZSxcIm9raW5hd2EuanBcIjp0cnVlLFwib3Nha2EuanBcIjp0cnVlLFwic2FnYS5qcFwiOnRydWUsXCJzYWl0YW1hLmpwXCI6dHJ1ZSxcInNoaWdhLmpwXCI6dHJ1ZSxcInNoaW1hbmUuanBcIjp0cnVlLFwic2hpenVva2EuanBcIjp0cnVlLFwidG9jaGlnaS5qcFwiOnRydWUsXCJ0b2t1c2hpbWEuanBcIjp0cnVlLFwidG9reW8uanBcIjp0cnVlLFwidG90dG9yaS5qcFwiOnRydWUsXCJ0b3lhbWEuanBcIjp0cnVlLFwid2FrYXlhbWEuanBcIjp0cnVlLFwieWFtYWdhdGEuanBcIjp0cnVlLFwieWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcInlhbWFuYXNoaS5qcFwiOnRydWUsXCJ4bi0tNHB2eHMuanBcIjp0cnVlLFwieG4tLXZndTQwMmMuanBcIjp0cnVlLFwieG4tLWMzczE0bS5qcFwiOnRydWUsXCJ4bi0tZjZxeDUzYS5qcFwiOnRydWUsXCJ4bi0tOHB2cjR1LmpwXCI6dHJ1ZSxcInhuLS11aXN0MjJoLmpwXCI6dHJ1ZSxcInhuLS1kanJzNzJkNnV5LmpwXCI6dHJ1ZSxcInhuLS1ta3J1NDVpLmpwXCI6dHJ1ZSxcInhuLS0wdHJxN3A3bm4uanBcIjp0cnVlLFwieG4tLThsdHI2MmsuanBcIjp0cnVlLFwieG4tLTJtNGExNWUuanBcIjp0cnVlLFwieG4tLWVmdm45cy5qcFwiOnRydWUsXCJ4bi0tMzJ2cDMwaC5qcFwiOnRydWUsXCJ4bi0tNGl0Nzk3ay5qcFwiOnRydWUsXCJ4bi0tMWxxczcxZC5qcFwiOnRydWUsXCJ4bi0tNXJ0cDQ5Yy5qcFwiOnRydWUsXCJ4bi0tNWpzMDQ1ZC5qcFwiOnRydWUsXCJ4bi0tZWhxejU2bi5qcFwiOnRydWUsXCJ4bi0tMWxxczAzbi5qcFwiOnRydWUsXCJ4bi0tcXFxdDExbS5qcFwiOnRydWUsXCJ4bi0ta2JycTdvLmpwXCI6dHJ1ZSxcInhuLS1wc3N1MzNsLmpwXCI6dHJ1ZSxcInhuLS1udHNxMTdnLmpwXCI6dHJ1ZSxcInhuLS11aXN6M2cuanBcIjp0cnVlLFwieG4tLTZidHc1YS5qcFwiOnRydWUsXCJ4bi0tMWN0d28uanBcIjp0cnVlLFwieG4tLTZvcngyci5qcFwiOnRydWUsXCJ4bi0tcmh0NjFlLmpwXCI6dHJ1ZSxcInhuLS1yaHQyN3ouanBcIjp0cnVlLFwieG4tLWRqdHk0ay5qcFwiOnRydWUsXCJ4bi0tbml0MjI1ay5qcFwiOnRydWUsXCJ4bi0tcmh0M2QuanBcIjp0cnVlLFwieG4tLWtsdHk1eC5qcFwiOnRydWUsXCJ4bi0ta2x0eDlhLmpwXCI6dHJ1ZSxcInhuLS1rbHRwN2QuanBcIjp0cnVlLFwieG4tLXV1d3U1OGEuanBcIjp0cnVlLFwieG4tLXpieDAyNWQuanBcIjp0cnVlLFwieG4tLW50c28waXF4M2EuanBcIjp0cnVlLFwieG4tLWVscXExNmguanBcIjp0cnVlLFwieG4tLTRpdDE2OGQuanBcIjp0cnVlLFwieG4tLWtsdDc4N2QuanBcIjp0cnVlLFwieG4tLXJueTMxaC5qcFwiOnRydWUsXCJ4bi0tN3QwYTI2NGMuanBcIjp0cnVlLFwieG4tLTVydHEzNGsuanBcIjp0cnVlLFwieG4tLWs3eW45NWUuanBcIjp0cnVlLFwieG4tLXRvcjEzMW8uanBcIjp0cnVlLFwieG4tLWQ1cXY3ejg3NmMuanBcIjp0cnVlLFwiKi5rYXdhc2FraS5qcFwiOnRydWUsXCIqLmtpdGFreXVzaHUuanBcIjp0cnVlLFwiKi5rb2JlLmpwXCI6dHJ1ZSxcIioubmFnb3lhLmpwXCI6dHJ1ZSxcIiouc2FwcG9yby5qcFwiOnRydWUsXCIqLnNlbmRhaS5qcFwiOnRydWUsXCIqLnlva29oYW1hLmpwXCI6dHJ1ZSxcImNpdHkua2F3YXNha2kuanBcIjpmYWxzZSxcImNpdHkua2l0YWt5dXNodS5qcFwiOmZhbHNlLFwiY2l0eS5rb2JlLmpwXCI6ZmFsc2UsXCJjaXR5Lm5hZ295YS5qcFwiOmZhbHNlLFwiY2l0eS5zYXBwb3JvLmpwXCI6ZmFsc2UsXCJjaXR5LnNlbmRhaS5qcFwiOmZhbHNlLFwiY2l0eS55b2tvaGFtYS5qcFwiOmZhbHNlLFwiYWlzYWkuYWljaGkuanBcIjp0cnVlLFwiYW1hLmFpY2hpLmpwXCI6dHJ1ZSxcImFuam8uYWljaGkuanBcIjp0cnVlLFwiYXN1a2UuYWljaGkuanBcIjp0cnVlLFwiY2hpcnl1LmFpY2hpLmpwXCI6dHJ1ZSxcImNoaXRhLmFpY2hpLmpwXCI6dHJ1ZSxcImZ1c28uYWljaGkuanBcIjp0cnVlLFwiZ2FtYWdvcmkuYWljaGkuanBcIjp0cnVlLFwiaGFuZGEuYWljaGkuanBcIjp0cnVlLFwiaGF6dS5haWNoaS5qcFwiOnRydWUsXCJoZWtpbmFuLmFpY2hpLmpwXCI6dHJ1ZSxcImhpZ2FzaGl1cmEuYWljaGkuanBcIjp0cnVlLFwiaWNoaW5vbWl5YS5haWNoaS5qcFwiOnRydWUsXCJpbmF6YXdhLmFpY2hpLmpwXCI6dHJ1ZSxcImludXlhbWEuYWljaGkuanBcIjp0cnVlLFwiaXNzaGlraS5haWNoaS5qcFwiOnRydWUsXCJpd2FrdXJhLmFpY2hpLmpwXCI6dHJ1ZSxcImthbmllLmFpY2hpLmpwXCI6dHJ1ZSxcImthcml5YS5haWNoaS5qcFwiOnRydWUsXCJrYXN1Z2FpLmFpY2hpLmpwXCI6dHJ1ZSxcImtpcmEuYWljaGkuanBcIjp0cnVlLFwia2l5b3N1LmFpY2hpLmpwXCI6dHJ1ZSxcImtvbWFraS5haWNoaS5qcFwiOnRydWUsXCJrb25hbi5haWNoaS5qcFwiOnRydWUsXCJrb3RhLmFpY2hpLmpwXCI6dHJ1ZSxcIm1paGFtYS5haWNoaS5qcFwiOnRydWUsXCJtaXlvc2hpLmFpY2hpLmpwXCI6dHJ1ZSxcIm5pc2hpby5haWNoaS5qcFwiOnRydWUsXCJuaXNzaGluLmFpY2hpLmpwXCI6dHJ1ZSxcIm9idS5haWNoaS5qcFwiOnRydWUsXCJvZ3VjaGkuYWljaGkuanBcIjp0cnVlLFwib2hhcnUuYWljaGkuanBcIjp0cnVlLFwib2themFraS5haWNoaS5qcFwiOnRydWUsXCJvd2FyaWFzYWhpLmFpY2hpLmpwXCI6dHJ1ZSxcInNldG8uYWljaGkuanBcIjp0cnVlLFwic2hpa2F0c3UuYWljaGkuanBcIjp0cnVlLFwic2hpbnNoaXJvLmFpY2hpLmpwXCI6dHJ1ZSxcInNoaXRhcmEuYWljaGkuanBcIjp0cnVlLFwidGFoYXJhLmFpY2hpLmpwXCI6dHJ1ZSxcInRha2FoYW1hLmFpY2hpLmpwXCI6dHJ1ZSxcInRvYmlzaGltYS5haWNoaS5qcFwiOnRydWUsXCJ0b2VpLmFpY2hpLmpwXCI6dHJ1ZSxcInRvZ28uYWljaGkuanBcIjp0cnVlLFwidG9rYWkuYWljaGkuanBcIjp0cnVlLFwidG9rb25hbWUuYWljaGkuanBcIjp0cnVlLFwidG95b2FrZS5haWNoaS5qcFwiOnRydWUsXCJ0b3lvaGFzaGkuYWljaGkuanBcIjp0cnVlLFwidG95b2thd2EuYWljaGkuanBcIjp0cnVlLFwidG95b25lLmFpY2hpLmpwXCI6dHJ1ZSxcInRveW90YS5haWNoaS5qcFwiOnRydWUsXCJ0c3VzaGltYS5haWNoaS5qcFwiOnRydWUsXCJ5YXRvbWkuYWljaGkuanBcIjp0cnVlLFwiYWtpdGEuYWtpdGEuanBcIjp0cnVlLFwiZGFpc2VuLmFraXRhLmpwXCI6dHJ1ZSxcImZ1amlzYXRvLmFraXRhLmpwXCI6dHJ1ZSxcImdvam9tZS5ha2l0YS5qcFwiOnRydWUsXCJoYWNoaXJvZ2F0YS5ha2l0YS5qcFwiOnRydWUsXCJoYXBwb3UuYWtpdGEuanBcIjp0cnVlLFwiaGlnYXNoaW5hcnVzZS5ha2l0YS5qcFwiOnRydWUsXCJob25qby5ha2l0YS5qcFwiOnRydWUsXCJob25qeW8uYWtpdGEuanBcIjp0cnVlLFwiaWthd2EuYWtpdGEuanBcIjp0cnVlLFwia2FtaWtvYW5pLmFraXRhLmpwXCI6dHJ1ZSxcImthbWlva2EuYWtpdGEuanBcIjp0cnVlLFwia2F0YWdhbWkuYWtpdGEuanBcIjp0cnVlLFwia2F6dW5vLmFraXRhLmpwXCI6dHJ1ZSxcImtpdGFha2l0YS5ha2l0YS5qcFwiOnRydWUsXCJrb3Nha2EuYWtpdGEuanBcIjp0cnVlLFwia3lvd2EuYWtpdGEuanBcIjp0cnVlLFwibWlzYXRvLmFraXRhLmpwXCI6dHJ1ZSxcIm1pdGFuZS5ha2l0YS5qcFwiOnRydWUsXCJtb3JpeW9zaGkuYWtpdGEuanBcIjp0cnVlLFwibmlrYWhvLmFraXRhLmpwXCI6dHJ1ZSxcIm5vc2hpcm8uYWtpdGEuanBcIjp0cnVlLFwib2RhdGUuYWtpdGEuanBcIjp0cnVlLFwib2dhLmFraXRhLmpwXCI6dHJ1ZSxcIm9nYXRhLmFraXRhLmpwXCI6dHJ1ZSxcInNlbWJva3UuYWtpdGEuanBcIjp0cnVlLFwieW9rb3RlLmFraXRhLmpwXCI6dHJ1ZSxcInl1cmlob25qby5ha2l0YS5qcFwiOnRydWUsXCJhb21vcmkuYW9tb3JpLmpwXCI6dHJ1ZSxcImdvbm9oZS5hb21vcmkuanBcIjp0cnVlLFwiaGFjaGlub2hlLmFvbW9yaS5qcFwiOnRydWUsXCJoYXNoaWthbWkuYW9tb3JpLmpwXCI6dHJ1ZSxcImhpcmFuYWkuYW9tb3JpLmpwXCI6dHJ1ZSxcImhpcm9zYWtpLmFvbW9yaS5qcFwiOnRydWUsXCJpdGF5YW5hZ2kuYW9tb3JpLmpwXCI6dHJ1ZSxcImt1cm9pc2hpLmFvbW9yaS5qcFwiOnRydWUsXCJtaXNhd2EuYW9tb3JpLmpwXCI6dHJ1ZSxcIm11dHN1LmFvbW9yaS5qcFwiOnRydWUsXCJuYWthZG9tYXJpLmFvbW9yaS5qcFwiOnRydWUsXCJub2hlamkuYW9tb3JpLmpwXCI6dHJ1ZSxcIm9pcmFzZS5hb21vcmkuanBcIjp0cnVlLFwib3dhbmkuYW9tb3JpLmpwXCI6dHJ1ZSxcInJva3Vub2hlLmFvbW9yaS5qcFwiOnRydWUsXCJzYW5ub2hlLmFvbW9yaS5qcFwiOnRydWUsXCJzaGljaGlub2hlLmFvbW9yaS5qcFwiOnRydWUsXCJzaGluZ28uYW9tb3JpLmpwXCI6dHJ1ZSxcInRha2tvLmFvbW9yaS5qcFwiOnRydWUsXCJ0b3dhZGEuYW9tb3JpLmpwXCI6dHJ1ZSxcInRzdWdhcnUuYW9tb3JpLmpwXCI6dHJ1ZSxcInRzdXJ1dGEuYW9tb3JpLmpwXCI6dHJ1ZSxcImFiaWtvLmNoaWJhLmpwXCI6dHJ1ZSxcImFzYWhpLmNoaWJhLmpwXCI6dHJ1ZSxcImNob25hbi5jaGliYS5qcFwiOnRydWUsXCJjaG9zZWkuY2hpYmEuanBcIjp0cnVlLFwiY2hvc2hpLmNoaWJhLmpwXCI6dHJ1ZSxcImNodW8uY2hpYmEuanBcIjp0cnVlLFwiZnVuYWJhc2hpLmNoaWJhLmpwXCI6dHJ1ZSxcImZ1dHRzdS5jaGliYS5qcFwiOnRydWUsXCJoYW5hbWlnYXdhLmNoaWJhLmpwXCI6dHJ1ZSxcImljaGloYXJhLmNoaWJhLmpwXCI6dHJ1ZSxcImljaGlrYXdhLmNoaWJhLmpwXCI6dHJ1ZSxcImljaGlub21peWEuY2hpYmEuanBcIjp0cnVlLFwiaW56YWkuY2hpYmEuanBcIjp0cnVlLFwiaXN1bWkuY2hpYmEuanBcIjp0cnVlLFwia2FtYWdheWEuY2hpYmEuanBcIjp0cnVlLFwia2Ftb2dhd2EuY2hpYmEuanBcIjp0cnVlLFwia2FzaGl3YS5jaGliYS5qcFwiOnRydWUsXCJrYXRvcmkuY2hpYmEuanBcIjp0cnVlLFwia2F0c3V1cmEuY2hpYmEuanBcIjp0cnVlLFwia2ltaXRzdS5jaGliYS5qcFwiOnRydWUsXCJraXNhcmF6dS5jaGliYS5qcFwiOnRydWUsXCJrb3pha2kuY2hpYmEuanBcIjp0cnVlLFwia3VqdWt1cmkuY2hpYmEuanBcIjp0cnVlLFwia3lvbmFuLmNoaWJhLmpwXCI6dHJ1ZSxcIm1hdHN1ZG8uY2hpYmEuanBcIjp0cnVlLFwibWlkb3JpLmNoaWJhLmpwXCI6dHJ1ZSxcIm1paGFtYS5jaGliYS5qcFwiOnRydWUsXCJtaW5hbWlib3NvLmNoaWJhLmpwXCI6dHJ1ZSxcIm1vYmFyYS5jaGliYS5qcFwiOnRydWUsXCJtdXRzdXphd2EuY2hpYmEuanBcIjp0cnVlLFwibmFnYXJhLmNoaWJhLmpwXCI6dHJ1ZSxcIm5hZ2FyZXlhbWEuY2hpYmEuanBcIjp0cnVlLFwibmFyYXNoaW5vLmNoaWJhLmpwXCI6dHJ1ZSxcIm5hcml0YS5jaGliYS5qcFwiOnRydWUsXCJub2RhLmNoaWJhLmpwXCI6dHJ1ZSxcIm9hbWlzaGlyYXNhdG8uY2hpYmEuanBcIjp0cnVlLFwib21pZ2F3YS5jaGliYS5qcFwiOnRydWUsXCJvbmp1a3UuY2hpYmEuanBcIjp0cnVlLFwib3Rha2kuY2hpYmEuanBcIjp0cnVlLFwic2FrYWUuY2hpYmEuanBcIjp0cnVlLFwic2FrdXJhLmNoaWJhLmpwXCI6dHJ1ZSxcInNoaW1vZnVzYS5jaGliYS5qcFwiOnRydWUsXCJzaGlyYWtvLmNoaWJhLmpwXCI6dHJ1ZSxcInNoaXJvaS5jaGliYS5qcFwiOnRydWUsXCJzaGlzdWkuY2hpYmEuanBcIjp0cnVlLFwic29kZWdhdXJhLmNoaWJhLmpwXCI6dHJ1ZSxcInNvc2EuY2hpYmEuanBcIjp0cnVlLFwidGFrby5jaGliYS5qcFwiOnRydWUsXCJ0YXRleWFtYS5jaGliYS5qcFwiOnRydWUsXCJ0b2dhbmUuY2hpYmEuanBcIjp0cnVlLFwidG9obm9zaG8uY2hpYmEuanBcIjp0cnVlLFwidG9taXNhdG8uY2hpYmEuanBcIjp0cnVlLFwidXJheWFzdS5jaGliYS5qcFwiOnRydWUsXCJ5YWNoaW1hdGEuY2hpYmEuanBcIjp0cnVlLFwieWFjaGl5by5jaGliYS5qcFwiOnRydWUsXCJ5b2thaWNoaWJhLmNoaWJhLmpwXCI6dHJ1ZSxcInlva29zaGliYWhpa2FyaS5jaGliYS5qcFwiOnRydWUsXCJ5b3RzdWthaWRvLmNoaWJhLmpwXCI6dHJ1ZSxcImFpbmFuLmVoaW1lLmpwXCI6dHJ1ZSxcImhvbmFpLmVoaW1lLmpwXCI6dHJ1ZSxcImlrYXRhLmVoaW1lLmpwXCI6dHJ1ZSxcImltYWJhcmkuZWhpbWUuanBcIjp0cnVlLFwiaXlvLmVoaW1lLmpwXCI6dHJ1ZSxcImthbWlqaW1hLmVoaW1lLmpwXCI6dHJ1ZSxcImtpaG9rdS5laGltZS5qcFwiOnRydWUsXCJrdW1ha29nZW4uZWhpbWUuanBcIjp0cnVlLFwibWFzYWtpLmVoaW1lLmpwXCI6dHJ1ZSxcIm1hdHN1bm8uZWhpbWUuanBcIjp0cnVlLFwibWF0c3V5YW1hLmVoaW1lLmpwXCI6dHJ1ZSxcIm5hbWlrYXRhLmVoaW1lLmpwXCI6dHJ1ZSxcIm5paWhhbWEuZWhpbWUuanBcIjp0cnVlLFwib3p1LmVoaW1lLmpwXCI6dHJ1ZSxcInNhaWpvLmVoaW1lLmpwXCI6dHJ1ZSxcInNlaXlvLmVoaW1lLmpwXCI6dHJ1ZSxcInNoaWtva3VjaHVvLmVoaW1lLmpwXCI6dHJ1ZSxcInRvYmUuZWhpbWUuanBcIjp0cnVlLFwidG9vbi5laGltZS5qcFwiOnRydWUsXCJ1Y2hpa28uZWhpbWUuanBcIjp0cnVlLFwidXdhamltYS5laGltZS5qcFwiOnRydWUsXCJ5YXdhdGFoYW1hLmVoaW1lLmpwXCI6dHJ1ZSxcImVjaGl6ZW4uZnVrdWkuanBcIjp0cnVlLFwiZWloZWlqaS5mdWt1aS5qcFwiOnRydWUsXCJmdWt1aS5mdWt1aS5qcFwiOnRydWUsXCJpa2VkYS5mdWt1aS5qcFwiOnRydWUsXCJrYXRzdXlhbWEuZnVrdWkuanBcIjp0cnVlLFwibWloYW1hLmZ1a3VpLmpwXCI6dHJ1ZSxcIm1pbmFtaWVjaGl6ZW4uZnVrdWkuanBcIjp0cnVlLFwib2JhbWEuZnVrdWkuanBcIjp0cnVlLFwib2hpLmZ1a3VpLmpwXCI6dHJ1ZSxcIm9uby5mdWt1aS5qcFwiOnRydWUsXCJzYWJhZS5mdWt1aS5qcFwiOnRydWUsXCJzYWthaS5mdWt1aS5qcFwiOnRydWUsXCJ0YWthaGFtYS5mdWt1aS5qcFwiOnRydWUsXCJ0c3VydWdhLmZ1a3VpLmpwXCI6dHJ1ZSxcIndha2FzYS5mdWt1aS5qcFwiOnRydWUsXCJhc2hpeWEuZnVrdW9rYS5qcFwiOnRydWUsXCJidXplbi5mdWt1b2thLmpwXCI6dHJ1ZSxcImNoaWt1Z28uZnVrdW9rYS5qcFwiOnRydWUsXCJjaGlrdWhvLmZ1a3Vva2EuanBcIjp0cnVlLFwiY2hpa3Vqby5mdWt1b2thLmpwXCI6dHJ1ZSxcImNoaWt1c2hpbm8uZnVrdW9rYS5qcFwiOnRydWUsXCJjaGlrdXplbi5mdWt1b2thLmpwXCI6dHJ1ZSxcImNodW8uZnVrdW9rYS5qcFwiOnRydWUsXCJkYXphaWZ1LmZ1a3Vva2EuanBcIjp0cnVlLFwiZnVrdWNoaS5mdWt1b2thLmpwXCI6dHJ1ZSxcImhha2F0YS5mdWt1b2thLmpwXCI6dHJ1ZSxcImhpZ2FzaGkuZnVrdW9rYS5qcFwiOnRydWUsXCJoaXJva2F3YS5mdWt1b2thLmpwXCI6dHJ1ZSxcImhpc2F5YW1hLmZ1a3Vva2EuanBcIjp0cnVlLFwiaWl6dWthLmZ1a3Vva2EuanBcIjp0cnVlLFwiaW5hdHN1a2kuZnVrdW9rYS5qcFwiOnRydWUsXCJrYWhvLmZ1a3Vva2EuanBcIjp0cnVlLFwia2FzdWdhLmZ1a3Vva2EuanBcIjp0cnVlLFwia2FzdXlhLmZ1a3Vva2EuanBcIjp0cnVlLFwia2F3YXJhLmZ1a3Vva2EuanBcIjp0cnVlLFwia2Vpc2VuLmZ1a3Vva2EuanBcIjp0cnVlLFwia29nYS5mdWt1b2thLmpwXCI6dHJ1ZSxcImt1cmF0ZS5mdWt1b2thLmpwXCI6dHJ1ZSxcImt1cm9naS5mdWt1b2thLmpwXCI6dHJ1ZSxcImt1cnVtZS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm1pbmFtaS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm1peWFrby5mdWt1b2thLmpwXCI6dHJ1ZSxcIm1peWFtYS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm1peWF3YWthLmZ1a3Vva2EuanBcIjp0cnVlLFwibWl6dW1ha2kuZnVrdW9rYS5qcFwiOnRydWUsXCJtdW5ha2F0YS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm5ha2FnYXdhLmZ1a3Vva2EuanBcIjp0cnVlLFwibmFrYW1hLmZ1a3Vva2EuanBcIjp0cnVlLFwibmlzaGkuZnVrdW9rYS5qcFwiOnRydWUsXCJub2dhdGEuZnVrdW9rYS5qcFwiOnRydWUsXCJvZ29yaS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm9rYWdha2kuZnVrdW9rYS5qcFwiOnRydWUsXCJva2F3YS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm9raS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm9tdXRhLmZ1a3Vva2EuanBcIjp0cnVlLFwib25nYS5mdWt1b2thLmpwXCI6dHJ1ZSxcIm9ub2pvLmZ1a3Vva2EuanBcIjp0cnVlLFwib3RvLmZ1a3Vva2EuanBcIjp0cnVlLFwic2FpZ2F3YS5mdWt1b2thLmpwXCI6dHJ1ZSxcInNhc2FndXJpLmZ1a3Vva2EuanBcIjp0cnVlLFwic2hpbmd1LmZ1a3Vva2EuanBcIjp0cnVlLFwic2hpbnlvc2hpdG9taS5mdWt1b2thLmpwXCI6dHJ1ZSxcInNob25haS5mdWt1b2thLmpwXCI6dHJ1ZSxcInNvZWRhLmZ1a3Vva2EuanBcIjp0cnVlLFwic3VlLmZ1a3Vva2EuanBcIjp0cnVlLFwidGFjaGlhcmFpLmZ1a3Vva2EuanBcIjp0cnVlLFwidGFnYXdhLmZ1a3Vva2EuanBcIjp0cnVlLFwidGFrYXRhLmZ1a3Vva2EuanBcIjp0cnVlLFwidG9oby5mdWt1b2thLmpwXCI6dHJ1ZSxcInRveW90c3UuZnVrdW9rYS5qcFwiOnRydWUsXCJ0c3Vpa2kuZnVrdW9rYS5qcFwiOnRydWUsXCJ1a2loYS5mdWt1b2thLmpwXCI6dHJ1ZSxcInVtaS5mdWt1b2thLmpwXCI6dHJ1ZSxcInVzdWkuZnVrdW9rYS5qcFwiOnRydWUsXCJ5YW1hZGEuZnVrdW9rYS5qcFwiOnRydWUsXCJ5YW1lLmZ1a3Vva2EuanBcIjp0cnVlLFwieWFuYWdhd2EuZnVrdW9rYS5qcFwiOnRydWUsXCJ5dWt1aGFzaGkuZnVrdW9rYS5qcFwiOnRydWUsXCJhaXp1YmFuZ2UuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImFpenVtaXNhdG8uZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImFpenV3YWthbWF0c3UuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImFzYWthd2EuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImJhbmRhaS5mdWt1c2hpbWEuanBcIjp0cnVlLFwiZGF0ZS5mdWt1c2hpbWEuanBcIjp0cnVlLFwiZnVrdXNoaW1hLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJmdXJ1ZG9uby5mdWt1c2hpbWEuanBcIjp0cnVlLFwiZnV0YWJhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJoYW5hd2EuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImhpZ2FzaGkuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImhpcmF0YS5mdWt1c2hpbWEuanBcIjp0cnVlLFwiaGlyb25vLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJpaXRhdGUuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImluYXdhc2hpcm8uZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImlzaGlrYXdhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJpd2FraS5mdWt1c2hpbWEuanBcIjp0cnVlLFwiaXp1bWl6YWtpLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJrYWdhbWlpc2hpLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJrYW5leWFtYS5mdWt1c2hpbWEuanBcIjp0cnVlLFwia2F3YW1hdGEuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImtpdGFrYXRhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJraXRhc2hpb2JhcmEuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImtvb3JpLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJrb3JpeWFtYS5mdWt1c2hpbWEuanBcIjp0cnVlLFwia3VuaW1pLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJtaWhhcnUuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcIm1pc2hpbWEuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcIm5hbWllLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJuYW5nby5mdWt1c2hpbWEuanBcIjp0cnVlLFwibmlzaGlhaXp1LmZ1a3VzaGltYS5qcFwiOnRydWUsXCJuaXNoaWdvLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJva3VtYS5mdWt1c2hpbWEuanBcIjp0cnVlLFwib21vdGVnby5mdWt1c2hpbWEuanBcIjp0cnVlLFwib25vLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJvdGFtYS5mdWt1c2hpbWEuanBcIjp0cnVlLFwic2FtZWdhd2EuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcInNoaW1vZ28uZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcInNoaXJha2F3YS5mdWt1c2hpbWEuanBcIjp0cnVlLFwic2hvd2EuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcInNvbWEuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcInN1a2FnYXdhLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJ0YWlzaGluLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJ0YW1ha2F3YS5mdWt1c2hpbWEuanBcIjp0cnVlLFwidGFuYWd1cmEuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcInRlbmVpLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJ5YWJ1a2kuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcInlhbWF0by5mdWt1c2hpbWEuanBcIjp0cnVlLFwieWFtYXRzdXJpLmZ1a3VzaGltYS5qcFwiOnRydWUsXCJ5YW5haXp1LmZ1a3VzaGltYS5qcFwiOnRydWUsXCJ5dWdhd2EuZnVrdXNoaW1hLmpwXCI6dHJ1ZSxcImFucGFjaGkuZ2lmdS5qcFwiOnRydWUsXCJlbmEuZ2lmdS5qcFwiOnRydWUsXCJnaWZ1LmdpZnUuanBcIjp0cnVlLFwiZ2luYW4uZ2lmdS5qcFwiOnRydWUsXCJnb2RvLmdpZnUuanBcIjp0cnVlLFwiZ3Vqby5naWZ1LmpwXCI6dHJ1ZSxcImhhc2hpbWEuZ2lmdS5qcFwiOnRydWUsXCJoaWNoaXNvLmdpZnUuanBcIjp0cnVlLFwiaGlkYS5naWZ1LmpwXCI6dHJ1ZSxcImhpZ2FzaGlzaGlyYWthd2EuZ2lmdS5qcFwiOnRydWUsXCJpYmlnYXdhLmdpZnUuanBcIjp0cnVlLFwiaWtlZGEuZ2lmdS5qcFwiOnRydWUsXCJrYWthbWlnYWhhcmEuZ2lmdS5qcFwiOnRydWUsXCJrYW5pLmdpZnUuanBcIjp0cnVlLFwia2FzYWhhcmEuZ2lmdS5qcFwiOnRydWUsXCJrYXNhbWF0c3UuZ2lmdS5qcFwiOnRydWUsXCJrYXdhdWUuZ2lmdS5qcFwiOnRydWUsXCJraXRhZ2F0YS5naWZ1LmpwXCI6dHJ1ZSxcIm1pbm8uZ2lmdS5qcFwiOnRydWUsXCJtaW5va2Ftby5naWZ1LmpwXCI6dHJ1ZSxcIm1pdGFrZS5naWZ1LmpwXCI6dHJ1ZSxcIm1penVuYW1pLmdpZnUuanBcIjp0cnVlLFwibW90b3N1LmdpZnUuanBcIjp0cnVlLFwibmFrYXRzdWdhd2EuZ2lmdS5qcFwiOnRydWUsXCJvZ2FraS5naWZ1LmpwXCI6dHJ1ZSxcInNha2Fob2dpLmdpZnUuanBcIjp0cnVlLFwic2VraS5naWZ1LmpwXCI6dHJ1ZSxcInNla2lnYWhhcmEuZ2lmdS5qcFwiOnRydWUsXCJzaGlyYWthd2EuZ2lmdS5qcFwiOnRydWUsXCJ0YWppbWkuZ2lmdS5qcFwiOnRydWUsXCJ0YWtheWFtYS5naWZ1LmpwXCI6dHJ1ZSxcInRhcnVpLmdpZnUuanBcIjp0cnVlLFwidG9raS5naWZ1LmpwXCI6dHJ1ZSxcInRvbWlrYS5naWZ1LmpwXCI6dHJ1ZSxcIndhbm91Y2hpLmdpZnUuanBcIjp0cnVlLFwieWFtYWdhdGEuZ2lmdS5qcFwiOnRydWUsXCJ5YW90c3UuZ2lmdS5qcFwiOnRydWUsXCJ5b3JvLmdpZnUuanBcIjp0cnVlLFwiYW5uYWthLmd1bm1hLmpwXCI6dHJ1ZSxcImNoaXlvZGEuZ3VubWEuanBcIjp0cnVlLFwiZnVqaW9rYS5ndW5tYS5qcFwiOnRydWUsXCJoaWdhc2hpYWdhdHN1bWEuZ3VubWEuanBcIjp0cnVlLFwiaXNlc2FraS5ndW5tYS5qcFwiOnRydWUsXCJpdGFrdXJhLmd1bm1hLmpwXCI6dHJ1ZSxcImthbm5hLmd1bm1hLmpwXCI6dHJ1ZSxcImthbnJhLmd1bm1hLmpwXCI6dHJ1ZSxcImthdGFzaGluYS5ndW5tYS5qcFwiOnRydWUsXCJrYXdhYmEuZ3VubWEuanBcIjp0cnVlLFwia2lyeXUuZ3VubWEuanBcIjp0cnVlLFwia3VzYXRzdS5ndW5tYS5qcFwiOnRydWUsXCJtYWViYXNoaS5ndW5tYS5qcFwiOnRydWUsXCJtZWl3YS5ndW5tYS5qcFwiOnRydWUsXCJtaWRvcmkuZ3VubWEuanBcIjp0cnVlLFwibWluYWthbWkuZ3VubWEuanBcIjp0cnVlLFwibmFnYW5vaGFyYS5ndW5tYS5qcFwiOnRydWUsXCJuYWthbm9qby5ndW5tYS5qcFwiOnRydWUsXCJuYW5tb2t1Lmd1bm1hLmpwXCI6dHJ1ZSxcIm51bWF0YS5ndW5tYS5qcFwiOnRydWUsXCJvaXp1bWkuZ3VubWEuanBcIjp0cnVlLFwib3JhLmd1bm1hLmpwXCI6dHJ1ZSxcIm90YS5ndW5tYS5qcFwiOnRydWUsXCJzaGlidWthd2EuZ3VubWEuanBcIjp0cnVlLFwic2hpbW9uaXRhLmd1bm1hLmpwXCI6dHJ1ZSxcInNoaW50by5ndW5tYS5qcFwiOnRydWUsXCJzaG93YS5ndW5tYS5qcFwiOnRydWUsXCJ0YWthc2FraS5ndW5tYS5qcFwiOnRydWUsXCJ0YWtheWFtYS5ndW5tYS5qcFwiOnRydWUsXCJ0YW1hbXVyYS5ndW5tYS5qcFwiOnRydWUsXCJ0YXRlYmF5YXNoaS5ndW5tYS5qcFwiOnRydWUsXCJ0b21pb2thLmd1bm1hLmpwXCI6dHJ1ZSxcInRzdWtpeW9uby5ndW5tYS5qcFwiOnRydWUsXCJ0c3VtYWdvaS5ndW5tYS5qcFwiOnRydWUsXCJ1ZW5vLmd1bm1hLmpwXCI6dHJ1ZSxcInlvc2hpb2thLmd1bm1hLmpwXCI6dHJ1ZSxcImFzYW1pbmFtaS5oaXJvc2hpbWEuanBcIjp0cnVlLFwiZGFpd2EuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcImV0YWppbWEuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcImZ1Y2h1Lmhpcm9zaGltYS5qcFwiOnRydWUsXCJmdWt1eWFtYS5oaXJvc2hpbWEuanBcIjp0cnVlLFwiaGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcImhpZ2FzaGloaXJvc2hpbWEuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcImhvbmdvLmhpcm9zaGltYS5qcFwiOnRydWUsXCJqaW5zZWtpa29nZW4uaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcImthaXRhLmhpcm9zaGltYS5qcFwiOnRydWUsXCJrdWkuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcImt1bWFuby5oaXJvc2hpbWEuanBcIjp0cnVlLFwia3VyZS5oaXJvc2hpbWEuanBcIjp0cnVlLFwibWloYXJhLmhpcm9zaGltYS5qcFwiOnRydWUsXCJtaXlvc2hpLmhpcm9zaGltYS5qcFwiOnRydWUsXCJuYWthLmhpcm9zaGltYS5qcFwiOnRydWUsXCJvbm9taWNoaS5oaXJvc2hpbWEuanBcIjp0cnVlLFwib3Nha2lrYW1pamltYS5oaXJvc2hpbWEuanBcIjp0cnVlLFwib3Rha2UuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcInNha2EuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcInNlcmEuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcInNlcmFuaXNoaS5oaXJvc2hpbWEuanBcIjp0cnVlLFwic2hpbmljaGkuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcInNob2JhcmEuaGlyb3NoaW1hLmpwXCI6dHJ1ZSxcInRha2VoYXJhLmhpcm9zaGltYS5qcFwiOnRydWUsXCJhYmFzaGlyaS5ob2trYWlkby5qcFwiOnRydWUsXCJhYmlyYS5ob2trYWlkby5qcFwiOnRydWUsXCJhaWJldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcImFrYWJpcmEuaG9ra2FpZG8uanBcIjp0cnVlLFwiYWtrZXNoaS5ob2trYWlkby5qcFwiOnRydWUsXCJhc2FoaWthd2EuaG9ra2FpZG8uanBcIjp0cnVlLFwiYXNoaWJldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcImFzaG9yby5ob2trYWlkby5qcFwiOnRydWUsXCJhc3NhYnUuaG9ra2FpZG8uanBcIjp0cnVlLFwiYXRzdW1hLmhva2thaWRvLmpwXCI6dHJ1ZSxcImJpYmFpLmhva2thaWRvLmpwXCI6dHJ1ZSxcImJpZWkuaG9ra2FpZG8uanBcIjp0cnVlLFwiYmlmdWthLmhva2thaWRvLmpwXCI6dHJ1ZSxcImJpaG9yby5ob2trYWlkby5qcFwiOnRydWUsXCJiaXJhdG9yaS5ob2trYWlkby5qcFwiOnRydWUsXCJjaGlwcHViZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJjaGl0b3NlLmhva2thaWRvLmpwXCI6dHJ1ZSxcImRhdGUuaG9ra2FpZG8uanBcIjp0cnVlLFwiZWJldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcImVtYmV0c3UuaG9ra2FpZG8uanBcIjp0cnVlLFwiZW5pd2EuaG9ra2FpZG8uanBcIjp0cnVlLFwiZXJpbW8uaG9ra2FpZG8uanBcIjp0cnVlLFwiZXNhbi5ob2trYWlkby5qcFwiOnRydWUsXCJlc2FzaGkuaG9ra2FpZG8uanBcIjp0cnVlLFwiZnVrYWdhd2EuaG9ra2FpZG8uanBcIjp0cnVlLFwiZnVrdXNoaW1hLmhva2thaWRvLmpwXCI6dHJ1ZSxcImZ1cmFuby5ob2trYWlkby5qcFwiOnRydWUsXCJmdXJ1YmlyYS5ob2trYWlkby5qcFwiOnRydWUsXCJoYWJvcm8uaG9ra2FpZG8uanBcIjp0cnVlLFwiaGFrb2RhdGUuaG9ra2FpZG8uanBcIjp0cnVlLFwiaGFtYXRvbmJldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcImhpZGFrYS5ob2trYWlkby5qcFwiOnRydWUsXCJoaWdhc2hpa2FndXJhLmhva2thaWRvLmpwXCI6dHJ1ZSxcImhpZ2FzaGlrYXdhLmhva2thaWRvLmpwXCI6dHJ1ZSxcImhpcm9vLmhva2thaWRvLmpwXCI6dHJ1ZSxcImhva3VyeXUuaG9ra2FpZG8uanBcIjp0cnVlLFwiaG9rdXRvLmhva2thaWRvLmpwXCI6dHJ1ZSxcImhvbmJldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcImhvcm9rYW5haS5ob2trYWlkby5qcFwiOnRydWUsXCJob3Jvbm9iZS5ob2trYWlkby5qcFwiOnRydWUsXCJpa2VkYS5ob2trYWlkby5qcFwiOnRydWUsXCJpbWFrYW5lLmhva2thaWRvLmpwXCI6dHJ1ZSxcImlzaGlrYXJpLmhva2thaWRvLmpwXCI6dHJ1ZSxcIml3YW1pemF3YS5ob2trYWlkby5qcFwiOnRydWUsXCJpd2FuYWkuaG9ra2FpZG8uanBcIjp0cnVlLFwia2FtaWZ1cmFuby5ob2trYWlkby5qcFwiOnRydWUsXCJrYW1pa2F3YS5ob2trYWlkby5qcFwiOnRydWUsXCJrYW1pc2hpaG9yby5ob2trYWlkby5qcFwiOnRydWUsXCJrYW1pc3VuYWdhd2EuaG9ra2FpZG8uanBcIjp0cnVlLFwia2Ftb2VuYWkuaG9ra2FpZG8uanBcIjp0cnVlLFwia2F5YWJlLmhva2thaWRvLmpwXCI6dHJ1ZSxcImtlbWJ1Y2hpLmhva2thaWRvLmpwXCI6dHJ1ZSxcImtpa29uYWkuaG9ra2FpZG8uanBcIjp0cnVlLFwia2ltb2JldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcImtpdGFoaXJvc2hpbWEuaG9ra2FpZG8uanBcIjp0cnVlLFwia2l0YW1pLmhva2thaWRvLmpwXCI6dHJ1ZSxcImtpeW9zYXRvLmhva2thaWRvLmpwXCI6dHJ1ZSxcImtvc2hpbWl6dS5ob2trYWlkby5qcFwiOnRydWUsXCJrdW5uZXBwdS5ob2trYWlkby5qcFwiOnRydWUsXCJrdXJpeWFtYS5ob2trYWlkby5qcFwiOnRydWUsXCJrdXJvbWF0c3VuYWkuaG9ra2FpZG8uanBcIjp0cnVlLFwia3VzaGlyby5ob2trYWlkby5qcFwiOnRydWUsXCJrdXRjaGFuLmhva2thaWRvLmpwXCI6dHJ1ZSxcImt5b3dhLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm1hc2hpa2UuaG9ra2FpZG8uanBcIjp0cnVlLFwibWF0c3VtYWUuaG9ra2FpZG8uanBcIjp0cnVlLFwibWlrYXNhLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm1pbmFtaWZ1cmFuby5ob2trYWlkby5qcFwiOnRydWUsXCJtb21iZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJtb3NldXNoaS5ob2trYWlkby5qcFwiOnRydWUsXCJtdWthd2EuaG9ra2FpZG8uanBcIjp0cnVlLFwibXVyb3Jhbi5ob2trYWlkby5qcFwiOnRydWUsXCJuYWllLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm5ha2FnYXdhLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm5ha2FzYXRzdW5haS5ob2trYWlkby5qcFwiOnRydWUsXCJuYWthdG9tYmV0c3UuaG9ra2FpZG8uanBcIjp0cnVlLFwibmFuYWUuaG9ra2FpZG8uanBcIjp0cnVlLFwibmFucG9yby5ob2trYWlkby5qcFwiOnRydWUsXCJuYXlvcm8uaG9ra2FpZG8uanBcIjp0cnVlLFwibmVtdXJvLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm5paWthcHB1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcIm5pa2kuaG9ra2FpZG8uanBcIjp0cnVlLFwibmlzaGlva29wcGUuaG9ra2FpZG8uanBcIjp0cnVlLFwibm9ib3JpYmV0c3UuaG9ra2FpZG8uanBcIjp0cnVlLFwibnVtYXRhLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm9iaWhpcm8uaG9ra2FpZG8uanBcIjp0cnVlLFwib2JpcmEuaG9ra2FpZG8uanBcIjp0cnVlLFwib2tldG8uaG9ra2FpZG8uanBcIjp0cnVlLFwib2tvcHBlLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm90YXJ1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcIm90b2JlLmhva2thaWRvLmpwXCI6dHJ1ZSxcIm90b2Z1a2UuaG9ra2FpZG8uanBcIjp0cnVlLFwib3RvaW5lcHB1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcIm91bXUuaG9ra2FpZG8uanBcIjp0cnVlLFwib3pvcmEuaG9ra2FpZG8uanBcIjp0cnVlLFwicGlwcHUuaG9ra2FpZG8uanBcIjp0cnVlLFwicmFua29zaGkuaG9ra2FpZG8uanBcIjp0cnVlLFwicmVidW4uaG9ra2FpZG8uanBcIjp0cnVlLFwicmlrdWJldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcInJpc2hpcmkuaG9ra2FpZG8uanBcIjp0cnVlLFwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanBcIjp0cnVlLFwic2Fyb21hLmhva2thaWRvLmpwXCI6dHJ1ZSxcInNhcnVmdXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJzaGFrb3Rhbi5ob2trYWlkby5qcFwiOnRydWUsXCJzaGFyaS5ob2trYWlkby5qcFwiOnRydWUsXCJzaGliZWNoYS5ob2trYWlkby5qcFwiOnRydWUsXCJzaGliZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJzaGlrYWJlLmhva2thaWRvLmpwXCI6dHJ1ZSxcInNoaWthb2kuaG9ra2FpZG8uanBcIjp0cnVlLFwic2hpbWFtYWtpLmhva2thaWRvLmpwXCI6dHJ1ZSxcInNoaW1penUuaG9ra2FpZG8uanBcIjp0cnVlLFwic2hpbW9rYXdhLmhva2thaWRvLmpwXCI6dHJ1ZSxcInNoaW5zaGlub3RzdS5ob2trYWlkby5qcFwiOnRydWUsXCJzaGludG9rdS5ob2trYWlkby5qcFwiOnRydWUsXCJzaGlyYW51a2EuaG9ra2FpZG8uanBcIjp0cnVlLFwic2hpcmFvaS5ob2trYWlkby5qcFwiOnRydWUsXCJzaGlyaXVjaGkuaG9ra2FpZG8uanBcIjp0cnVlLFwic29iZXRzdS5ob2trYWlkby5qcFwiOnRydWUsXCJzdW5hZ2F3YS5ob2trYWlkby5qcFwiOnRydWUsXCJ0YWlraS5ob2trYWlkby5qcFwiOnRydWUsXCJ0YWthc3UuaG9ra2FpZG8uanBcIjp0cnVlLFwidGFraWthd2EuaG9ra2FpZG8uanBcIjp0cnVlLFwidGFraW5vdWUuaG9ra2FpZG8uanBcIjp0cnVlLFwidGVzaGlrYWdhLmhva2thaWRvLmpwXCI6dHJ1ZSxcInRvYmV0c3UuaG9ra2FpZG8uanBcIjp0cnVlLFwidG9obWEuaG9ra2FpZG8uanBcIjp0cnVlLFwidG9tYWtvbWFpLmhva2thaWRvLmpwXCI6dHJ1ZSxcInRvbWFyaS5ob2trYWlkby5qcFwiOnRydWUsXCJ0b3lhLmhva2thaWRvLmpwXCI6dHJ1ZSxcInRveWFrby5ob2trYWlkby5qcFwiOnRydWUsXCJ0b3lvdG9taS5ob2trYWlkby5qcFwiOnRydWUsXCJ0b3lvdXJhLmhva2thaWRvLmpwXCI6dHJ1ZSxcInRzdWJldHN1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcInRzdWtpZ2F0YS5ob2trYWlkby5qcFwiOnRydWUsXCJ1cmFrYXdhLmhva2thaWRvLmpwXCI6dHJ1ZSxcInVyYXVzdS5ob2trYWlkby5qcFwiOnRydWUsXCJ1cnl1Lmhva2thaWRvLmpwXCI6dHJ1ZSxcInV0YXNoaW5haS5ob2trYWlkby5qcFwiOnRydWUsXCJ3YWtrYW5haS5ob2trYWlkby5qcFwiOnRydWUsXCJ3YXNzYW11Lmhva2thaWRvLmpwXCI6dHJ1ZSxcInlha3Vtby5ob2trYWlkby5qcFwiOnRydWUsXCJ5b2ljaGkuaG9ra2FpZG8uanBcIjp0cnVlLFwiYWlvaS5oeW9nby5qcFwiOnRydWUsXCJha2FzaGkuaHlvZ28uanBcIjp0cnVlLFwiYWtvLmh5b2dvLmpwXCI6dHJ1ZSxcImFtYWdhc2FraS5oeW9nby5qcFwiOnRydWUsXCJhb2dha2kuaHlvZ28uanBcIjp0cnVlLFwiYXNhZ28uaHlvZ28uanBcIjp0cnVlLFwiYXNoaXlhLmh5b2dvLmpwXCI6dHJ1ZSxcImF3YWppLmh5b2dvLmpwXCI6dHJ1ZSxcImZ1a3VzYWtpLmh5b2dvLmpwXCI6dHJ1ZSxcImdvc2hpa2kuaHlvZ28uanBcIjp0cnVlLFwiaGFyaW1hLmh5b2dvLmpwXCI6dHJ1ZSxcImhpbWVqaS5oeW9nby5qcFwiOnRydWUsXCJpY2hpa2F3YS5oeW9nby5qcFwiOnRydWUsXCJpbmFnYXdhLmh5b2dvLmpwXCI6dHJ1ZSxcIml0YW1pLmh5b2dvLmpwXCI6dHJ1ZSxcImtha29nYXdhLmh5b2dvLmpwXCI6dHJ1ZSxcImthbWlnb3JpLmh5b2dvLmpwXCI6dHJ1ZSxcImthbWlrYXdhLmh5b2dvLmpwXCI6dHJ1ZSxcImthc2FpLmh5b2dvLmpwXCI6dHJ1ZSxcImthc3VnYS5oeW9nby5qcFwiOnRydWUsXCJrYXdhbmlzaGkuaHlvZ28uanBcIjp0cnVlLFwibWlraS5oeW9nby5qcFwiOnRydWUsXCJtaW5hbWlhd2FqaS5oeW9nby5qcFwiOnRydWUsXCJuaXNoaW5vbWl5YS5oeW9nby5qcFwiOnRydWUsXCJuaXNoaXdha2kuaHlvZ28uanBcIjp0cnVlLFwib25vLmh5b2dvLmpwXCI6dHJ1ZSxcInNhbmRhLmh5b2dvLmpwXCI6dHJ1ZSxcInNhbm5hbi5oeW9nby5qcFwiOnRydWUsXCJzYXNheWFtYS5oeW9nby5qcFwiOnRydWUsXCJzYXlvLmh5b2dvLmpwXCI6dHJ1ZSxcInNoaW5ndS5oeW9nby5qcFwiOnRydWUsXCJzaGlub25zZW4uaHlvZ28uanBcIjp0cnVlLFwic2hpc28uaHlvZ28uanBcIjp0cnVlLFwic3Vtb3RvLmh5b2dvLmpwXCI6dHJ1ZSxcInRhaXNoaS5oeW9nby5qcFwiOnRydWUsXCJ0YWthLmh5b2dvLmpwXCI6dHJ1ZSxcInRha2FyYXp1a2EuaHlvZ28uanBcIjp0cnVlLFwidGFrYXNhZ28uaHlvZ28uanBcIjp0cnVlLFwidGFraW5vLmh5b2dvLmpwXCI6dHJ1ZSxcInRhbWJhLmh5b2dvLmpwXCI6dHJ1ZSxcInRhdHN1bm8uaHlvZ28uanBcIjp0cnVlLFwidG95b29rYS5oeW9nby5qcFwiOnRydWUsXCJ5YWJ1Lmh5b2dvLmpwXCI6dHJ1ZSxcInlhc2hpcm8uaHlvZ28uanBcIjp0cnVlLFwieW9rYS5oeW9nby5qcFwiOnRydWUsXCJ5b2thd2EuaHlvZ28uanBcIjp0cnVlLFwiYW1pLmliYXJha2kuanBcIjp0cnVlLFwiYXNhaGkuaWJhcmFraS5qcFwiOnRydWUsXCJiYW5kby5pYmFyYWtpLmpwXCI6dHJ1ZSxcImNoaWt1c2VpLmliYXJha2kuanBcIjp0cnVlLFwiZGFpZ28uaWJhcmFraS5qcFwiOnRydWUsXCJmdWppc2hpcm8uaWJhcmFraS5qcFwiOnRydWUsXCJoaXRhY2hpLmliYXJha2kuanBcIjp0cnVlLFwiaGl0YWNoaW5ha2EuaWJhcmFraS5qcFwiOnRydWUsXCJoaXRhY2hpb21peWEuaWJhcmFraS5qcFwiOnRydWUsXCJoaXRhY2hpb3RhLmliYXJha2kuanBcIjp0cnVlLFwiaWJhcmFraS5pYmFyYWtpLmpwXCI6dHJ1ZSxcImluYS5pYmFyYWtpLmpwXCI6dHJ1ZSxcImluYXNoaWtpLmliYXJha2kuanBcIjp0cnVlLFwiaXRha28uaWJhcmFraS5qcFwiOnRydWUsXCJpd2FtYS5pYmFyYWtpLmpwXCI6dHJ1ZSxcImpvc28uaWJhcmFraS5qcFwiOnRydWUsXCJrYW1pc3UuaWJhcmFraS5qcFwiOnRydWUsXCJrYXNhbWEuaWJhcmFraS5qcFwiOnRydWUsXCJrYXNoaW1hLmliYXJha2kuanBcIjp0cnVlLFwia2FzdW1pZ2F1cmEuaWJhcmFraS5qcFwiOnRydWUsXCJrb2dhLmliYXJha2kuanBcIjp0cnVlLFwibWloby5pYmFyYWtpLmpwXCI6dHJ1ZSxcIm1pdG8uaWJhcmFraS5qcFwiOnRydWUsXCJtb3JpeWEuaWJhcmFraS5qcFwiOnRydWUsXCJuYWthLmliYXJha2kuanBcIjp0cnVlLFwibmFtZWdhdGEuaWJhcmFraS5qcFwiOnRydWUsXCJvYXJhaS5pYmFyYWtpLmpwXCI6dHJ1ZSxcIm9nYXdhLmliYXJha2kuanBcIjp0cnVlLFwib21pdGFtYS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInJ5dWdhc2FraS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInNha2FpLmliYXJha2kuanBcIjp0cnVlLFwic2FrdXJhZ2F3YS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInNoaW1vZGF0ZS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInNoaW1vdHN1bWEuaWJhcmFraS5qcFwiOnRydWUsXCJzaGlyb3NhdG8uaWJhcmFraS5qcFwiOnRydWUsXCJzb3dhLmliYXJha2kuanBcIjp0cnVlLFwic3VpZnUuaWJhcmFraS5qcFwiOnRydWUsXCJ0YWthaGFnaS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInRhbWF0c3VrdXJpLmliYXJha2kuanBcIjp0cnVlLFwidG9rYWkuaWJhcmFraS5qcFwiOnRydWUsXCJ0b21vYmUuaWJhcmFraS5qcFwiOnRydWUsXCJ0b25lLmliYXJha2kuanBcIjp0cnVlLFwidG9yaWRlLmliYXJha2kuanBcIjp0cnVlLFwidHN1Y2hpdXJhLmliYXJha2kuanBcIjp0cnVlLFwidHN1a3ViYS5pYmFyYWtpLmpwXCI6dHJ1ZSxcInVjaGloYXJhLmliYXJha2kuanBcIjp0cnVlLFwidXNoaWt1LmliYXJha2kuanBcIjp0cnVlLFwieWFjaGl5by5pYmFyYWtpLmpwXCI6dHJ1ZSxcInlhbWFnYXRhLmliYXJha2kuanBcIjp0cnVlLFwieWF3YXJhLmliYXJha2kuanBcIjp0cnVlLFwieXVraS5pYmFyYWtpLmpwXCI6dHJ1ZSxcImFuYW1penUuaXNoaWthd2EuanBcIjp0cnVlLFwiaGFrdWkuaXNoaWthd2EuanBcIjp0cnVlLFwiaGFrdXNhbi5pc2hpa2F3YS5qcFwiOnRydWUsXCJrYWdhLmlzaGlrYXdhLmpwXCI6dHJ1ZSxcImthaG9rdS5pc2hpa2F3YS5qcFwiOnRydWUsXCJrYW5hemF3YS5pc2hpa2F3YS5qcFwiOnRydWUsXCJrYXdha2l0YS5pc2hpa2F3YS5qcFwiOnRydWUsXCJrb21hdHN1LmlzaGlrYXdhLmpwXCI6dHJ1ZSxcIm5ha2Fub3RvLmlzaGlrYXdhLmpwXCI6dHJ1ZSxcIm5hbmFvLmlzaGlrYXdhLmpwXCI6dHJ1ZSxcIm5vbWkuaXNoaWthd2EuanBcIjp0cnVlLFwibm9ub2ljaGkuaXNoaWthd2EuanBcIjp0cnVlLFwibm90by5pc2hpa2F3YS5qcFwiOnRydWUsXCJzaGlrYS5pc2hpa2F3YS5qcFwiOnRydWUsXCJzdXp1LmlzaGlrYXdhLmpwXCI6dHJ1ZSxcInRzdWJhdGEuaXNoaWthd2EuanBcIjp0cnVlLFwidHN1cnVnaS5pc2hpa2F3YS5qcFwiOnRydWUsXCJ1Y2hpbmFkYS5pc2hpa2F3YS5qcFwiOnRydWUsXCJ3YWppbWEuaXNoaWthd2EuanBcIjp0cnVlLFwiZnVkYWkuaXdhdGUuanBcIjp0cnVlLFwiZnVqaXNhd2EuaXdhdGUuanBcIjp0cnVlLFwiaGFuYW1ha2kuaXdhdGUuanBcIjp0cnVlLFwiaGlyYWl6dW1pLml3YXRlLmpwXCI6dHJ1ZSxcImhpcm9uby5pd2F0ZS5qcFwiOnRydWUsXCJpY2hpbm9oZS5pd2F0ZS5qcFwiOnRydWUsXCJpY2hpbm9zZWtpLml3YXRlLmpwXCI6dHJ1ZSxcIml3YWl6dW1pLml3YXRlLmpwXCI6dHJ1ZSxcIml3YXRlLml3YXRlLmpwXCI6dHJ1ZSxcImpvYm9qaS5pd2F0ZS5qcFwiOnRydWUsXCJrYW1haXNoaS5pd2F0ZS5qcFwiOnRydWUsXCJrYW5lZ2FzYWtpLml3YXRlLmpwXCI6dHJ1ZSxcImthcnVtYWkuaXdhdGUuanBcIjp0cnVlLFwia2F3YWkuaXdhdGUuanBcIjp0cnVlLFwia2l0YWthbWkuaXdhdGUuanBcIjp0cnVlLFwia3VqaS5pd2F0ZS5qcFwiOnRydWUsXCJrdW5vaGUuaXdhdGUuanBcIjp0cnVlLFwia3V6dW1ha2kuaXdhdGUuanBcIjp0cnVlLFwibWl5YWtvLml3YXRlLmpwXCI6dHJ1ZSxcIm1penVzYXdhLml3YXRlLmpwXCI6dHJ1ZSxcIm1vcmlva2EuaXdhdGUuanBcIjp0cnVlLFwibmlub2hlLml3YXRlLmpwXCI6dHJ1ZSxcIm5vZGEuaXdhdGUuanBcIjp0cnVlLFwib2Z1bmF0by5pd2F0ZS5qcFwiOnRydWUsXCJvc2h1Lml3YXRlLmpwXCI6dHJ1ZSxcIm90c3VjaGkuaXdhdGUuanBcIjp0cnVlLFwicmlrdXplbnRha2F0YS5pd2F0ZS5qcFwiOnRydWUsXCJzaGl3YS5pd2F0ZS5qcFwiOnRydWUsXCJzaGl6dWt1aXNoaS5pd2F0ZS5qcFwiOnRydWUsXCJzdW1pdGEuaXdhdGUuanBcIjp0cnVlLFwidGFub2hhdGEuaXdhdGUuanBcIjp0cnVlLFwidG9uby5pd2F0ZS5qcFwiOnRydWUsXCJ5YWhhYmEuaXdhdGUuanBcIjp0cnVlLFwieWFtYWRhLml3YXRlLmpwXCI6dHJ1ZSxcImF5YWdhd2Eua2FnYXdhLmpwXCI6dHJ1ZSxcImhpZ2FzaGlrYWdhd2Eua2FnYXdhLmpwXCI6dHJ1ZSxcImthbm9uamkua2FnYXdhLmpwXCI6dHJ1ZSxcImtvdG9oaXJhLmthZ2F3YS5qcFwiOnRydWUsXCJtYW5uby5rYWdhd2EuanBcIjp0cnVlLFwibWFydWdhbWUua2FnYXdhLmpwXCI6dHJ1ZSxcIm1pdG95by5rYWdhd2EuanBcIjp0cnVlLFwibmFvc2hpbWEua2FnYXdhLmpwXCI6dHJ1ZSxcInNhbnVraS5rYWdhd2EuanBcIjp0cnVlLFwidGFkb3RzdS5rYWdhd2EuanBcIjp0cnVlLFwidGFrYW1hdHN1LmthZ2F3YS5qcFwiOnRydWUsXCJ0b25vc2hvLmthZ2F3YS5qcFwiOnRydWUsXCJ1Y2hpbm9taS5rYWdhd2EuanBcIjp0cnVlLFwidXRhenUua2FnYXdhLmpwXCI6dHJ1ZSxcInplbnRzdWppLmthZ2F3YS5qcFwiOnRydWUsXCJha3VuZS5rYWdvc2hpbWEuanBcIjp0cnVlLFwiYW1hbWkua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcImhpb2tpLmthZ29zaGltYS5qcFwiOnRydWUsXCJpc2Eua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcImlzZW4ua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcIml6dW1pLmthZ29zaGltYS5qcFwiOnRydWUsXCJrYWdvc2hpbWEua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcImthbm95YS5rYWdvc2hpbWEuanBcIjp0cnVlLFwia2F3YW5hYmUua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcImtpbmtvLmthZ29zaGltYS5qcFwiOnRydWUsXCJrb3V5YW1hLmthZ29zaGltYS5qcFwiOnRydWUsXCJtYWt1cmF6YWtpLmthZ29zaGltYS5qcFwiOnRydWUsXCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcIm1pbmFtaXRhbmUua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcIm5ha2F0YW5lLmthZ29zaGltYS5qcFwiOnRydWUsXCJuaXNoaW5vb21vdGUua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcInNhdHN1bWFzZW5kYWkua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcInNvby5rYWdvc2hpbWEuanBcIjp0cnVlLFwidGFydW1penUua2Fnb3NoaW1hLmpwXCI6dHJ1ZSxcInl1c3VpLmthZ29zaGltYS5qcFwiOnRydWUsXCJhaWthd2Eua2FuYWdhd2EuanBcIjp0cnVlLFwiYXRzdWdpLmthbmFnYXdhLmpwXCI6dHJ1ZSxcImF5YXNlLmthbmFnYXdhLmpwXCI6dHJ1ZSxcImNoaWdhc2FraS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJlYmluYS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJmdWppc2F3YS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJoYWRhbm8ua2FuYWdhd2EuanBcIjp0cnVlLFwiaGFrb25lLmthbmFnYXdhLmpwXCI6dHJ1ZSxcImhpcmF0c3VrYS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJpc2VoYXJhLmthbmFnYXdhLmpwXCI6dHJ1ZSxcImthaXNlaS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJrYW1ha3VyYS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJraXlva2F3YS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJtYXRzdWRhLmthbmFnYXdhLmpwXCI6dHJ1ZSxcIm1pbmFtaWFzaGlnYXJhLmthbmFnYXdhLmpwXCI6dHJ1ZSxcIm1pdXJhLmthbmFnYXdhLmpwXCI6dHJ1ZSxcIm5ha2FpLmthbmFnYXdhLmpwXCI6dHJ1ZSxcIm5pbm9taXlhLmthbmFnYXdhLmpwXCI6dHJ1ZSxcIm9kYXdhcmEua2FuYWdhd2EuanBcIjp0cnVlLFwib2kua2FuYWdhd2EuanBcIjp0cnVlLFwib2lzby5rYW5hZ2F3YS5qcFwiOnRydWUsXCJzYWdhbWloYXJhLmthbmFnYXdhLmpwXCI6dHJ1ZSxcInNhbXVrYXdhLmthbmFnYXdhLmpwXCI6dHJ1ZSxcInRzdWt1aS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJ5YW1ha2l0YS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJ5YW1hdG8ua2FuYWdhd2EuanBcIjp0cnVlLFwieW9rb3N1a2Eua2FuYWdhd2EuanBcIjp0cnVlLFwieXVnYXdhcmEua2FuYWdhd2EuanBcIjp0cnVlLFwiemFtYS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJ6dXNoaS5rYW5hZ2F3YS5qcFwiOnRydWUsXCJha2kua29jaGkuanBcIjp0cnVlLFwiZ2Vpc2VpLmtvY2hpLmpwXCI6dHJ1ZSxcImhpZGFrYS5rb2NoaS5qcFwiOnRydWUsXCJoaWdhc2hpdHN1bm8ua29jaGkuanBcIjp0cnVlLFwiaW5vLmtvY2hpLmpwXCI6dHJ1ZSxcImthZ2FtaS5rb2NoaS5qcFwiOnRydWUsXCJrYW1pLmtvY2hpLmpwXCI6dHJ1ZSxcImtpdGFnYXdhLmtvY2hpLmpwXCI6dHJ1ZSxcImtvY2hpLmtvY2hpLmpwXCI6dHJ1ZSxcIm1paGFyYS5rb2NoaS5qcFwiOnRydWUsXCJtb3RveWFtYS5rb2NoaS5qcFwiOnRydWUsXCJtdXJvdG8ua29jaGkuanBcIjp0cnVlLFwibmFoYXJpLmtvY2hpLmpwXCI6dHJ1ZSxcIm5ha2FtdXJhLmtvY2hpLmpwXCI6dHJ1ZSxcIm5hbmtva3Uua29jaGkuanBcIjp0cnVlLFwibmlzaGl0b3NhLmtvY2hpLmpwXCI6dHJ1ZSxcIm5peW9kb2dhd2Eua29jaGkuanBcIjp0cnVlLFwib2NoaS5rb2NoaS5qcFwiOnRydWUsXCJva2F3YS5rb2NoaS5qcFwiOnRydWUsXCJvdG95by5rb2NoaS5qcFwiOnRydWUsXCJvdHN1a2kua29jaGkuanBcIjp0cnVlLFwic2FrYXdhLmtvY2hpLmpwXCI6dHJ1ZSxcInN1a3Vtby5rb2NoaS5qcFwiOnRydWUsXCJzdXNha2kua29jaGkuanBcIjp0cnVlLFwidG9zYS5rb2NoaS5qcFwiOnRydWUsXCJ0b3Nhc2hpbWl6dS5rb2NoaS5qcFwiOnRydWUsXCJ0b3lvLmtvY2hpLmpwXCI6dHJ1ZSxcInRzdW5vLmtvY2hpLmpwXCI6dHJ1ZSxcInVtYWppLmtvY2hpLmpwXCI6dHJ1ZSxcInlhc3VkYS5rb2NoaS5qcFwiOnRydWUsXCJ5dXN1aGFyYS5rb2NoaS5qcFwiOnRydWUsXCJhbWFrdXNhLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcImFyYW8ua3VtYW1vdG8uanBcIjp0cnVlLFwiYXNvLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcImNob3lvLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcImd5b2t1dG8ua3VtYW1vdG8uanBcIjp0cnVlLFwiaGl0b3lvc2hpLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcImthbWlhbWFrdXNhLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcImthc2hpbWEua3VtYW1vdG8uanBcIjp0cnVlLFwia2lrdWNoaS5rdW1hbW90by5qcFwiOnRydWUsXCJrb3NhLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcImt1bWFtb3RvLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcIm1hc2hpa2kua3VtYW1vdG8uanBcIjp0cnVlLFwibWlmdW5lLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcIm1pbmFtYXRhLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcIm1pbmFtaW9ndW5pLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcIm5hZ2FzdS5rdW1hbW90by5qcFwiOnRydWUsXCJuaXNoaWhhcmEua3VtYW1vdG8uanBcIjp0cnVlLFwib2d1bmkua3VtYW1vdG8uanBcIjp0cnVlLFwib3p1Lmt1bWFtb3RvLmpwXCI6dHJ1ZSxcInN1bW90by5rdW1hbW90by5qcFwiOnRydWUsXCJ0YWthbW9yaS5rdW1hbW90by5qcFwiOnRydWUsXCJ1a2kua3VtYW1vdG8uanBcIjp0cnVlLFwidXRvLmt1bWFtb3RvLmpwXCI6dHJ1ZSxcInlhbWFnYS5rdW1hbW90by5qcFwiOnRydWUsXCJ5YW1hdG8ua3VtYW1vdG8uanBcIjp0cnVlLFwieWF0c3VzaGlyby5rdW1hbW90by5qcFwiOnRydWUsXCJheWFiZS5reW90by5qcFwiOnRydWUsXCJmdWt1Y2hpeWFtYS5reW90by5qcFwiOnRydWUsXCJoaWdhc2hpeWFtYS5reW90by5qcFwiOnRydWUsXCJpZGUua3lvdG8uanBcIjp0cnVlLFwiaW5lLmt5b3RvLmpwXCI6dHJ1ZSxcImpveW8ua3lvdG8uanBcIjp0cnVlLFwia2FtZW9rYS5reW90by5qcFwiOnRydWUsXCJrYW1vLmt5b3RvLmpwXCI6dHJ1ZSxcImtpdGEua3lvdG8uanBcIjp0cnVlLFwia2l6dS5reW90by5qcFwiOnRydWUsXCJrdW1peWFtYS5reW90by5qcFwiOnRydWUsXCJreW90YW1iYS5reW90by5qcFwiOnRydWUsXCJreW90YW5hYmUua3lvdG8uanBcIjp0cnVlLFwia3lvdGFuZ28ua3lvdG8uanBcIjp0cnVlLFwibWFpenVydS5reW90by5qcFwiOnRydWUsXCJtaW5hbWkua3lvdG8uanBcIjp0cnVlLFwibWluYW1peWFtYXNoaXJvLmt5b3RvLmpwXCI6dHJ1ZSxcIm1peWF6dS5reW90by5qcFwiOnRydWUsXCJtdWtvLmt5b3RvLmpwXCI6dHJ1ZSxcIm5hZ2Fva2FreW8ua3lvdG8uanBcIjp0cnVlLFwibmFrYWd5by5reW90by5qcFwiOnRydWUsXCJuYW50YW4ua3lvdG8uanBcIjp0cnVlLFwib3lhbWF6YWtpLmt5b3RvLmpwXCI6dHJ1ZSxcInNha3lvLmt5b3RvLmpwXCI6dHJ1ZSxcInNlaWthLmt5b3RvLmpwXCI6dHJ1ZSxcInRhbmFiZS5reW90by5qcFwiOnRydWUsXCJ1amkua3lvdG8uanBcIjp0cnVlLFwidWppdGF3YXJhLmt5b3RvLmpwXCI6dHJ1ZSxcIndhenVrYS5reW90by5qcFwiOnRydWUsXCJ5YW1hc2hpbmEua3lvdG8uanBcIjp0cnVlLFwieWF3YXRhLmt5b3RvLmpwXCI6dHJ1ZSxcImFzYWhpLm1pZS5qcFwiOnRydWUsXCJpbmFiZS5taWUuanBcIjp0cnVlLFwiaXNlLm1pZS5qcFwiOnRydWUsXCJrYW1leWFtYS5taWUuanBcIjp0cnVlLFwia2F3YWdvZS5taWUuanBcIjp0cnVlLFwia2loby5taWUuanBcIjp0cnVlLFwia2lzb3Nha2kubWllLmpwXCI6dHJ1ZSxcImtpd2EubWllLmpwXCI6dHJ1ZSxcImtvbW9uby5taWUuanBcIjp0cnVlLFwia3VtYW5vLm1pZS5qcFwiOnRydWUsXCJrdXdhbmEubWllLmpwXCI6dHJ1ZSxcIm1hdHN1c2FrYS5taWUuanBcIjp0cnVlLFwibWVpd2EubWllLmpwXCI6dHJ1ZSxcIm1paGFtYS5taWUuanBcIjp0cnVlLFwibWluYW1paXNlLm1pZS5qcFwiOnRydWUsXCJtaXN1Z2kubWllLmpwXCI6dHJ1ZSxcIm1peWFtYS5taWUuanBcIjp0cnVlLFwibmFiYXJpLm1pZS5qcFwiOnRydWUsXCJzaGltYS5taWUuanBcIjp0cnVlLFwic3V6dWthLm1pZS5qcFwiOnRydWUsXCJ0YWRvLm1pZS5qcFwiOnRydWUsXCJ0YWlraS5taWUuanBcIjp0cnVlLFwidGFraS5taWUuanBcIjp0cnVlLFwidGFtYWtpLm1pZS5qcFwiOnRydWUsXCJ0b2JhLm1pZS5qcFwiOnRydWUsXCJ0c3UubWllLmpwXCI6dHJ1ZSxcInVkb25vLm1pZS5qcFwiOnRydWUsXCJ1cmVzaGluby5taWUuanBcIjp0cnVlLFwid2F0YXJhaS5taWUuanBcIjp0cnVlLFwieW9ra2FpY2hpLm1pZS5qcFwiOnRydWUsXCJmdXJ1a2F3YS5taXlhZ2kuanBcIjp0cnVlLFwiaGlnYXNoaW1hdHN1c2hpbWEubWl5YWdpLmpwXCI6dHJ1ZSxcImlzaGlub21ha2kubWl5YWdpLmpwXCI6dHJ1ZSxcIml3YW51bWEubWl5YWdpLmpwXCI6dHJ1ZSxcImtha3VkYS5taXlhZ2kuanBcIjp0cnVlLFwia2FtaS5taXlhZ2kuanBcIjp0cnVlLFwia2F3YXNha2kubWl5YWdpLmpwXCI6dHJ1ZSxcImtlc2VubnVtYS5taXlhZ2kuanBcIjp0cnVlLFwibWFydW1vcmkubWl5YWdpLmpwXCI6dHJ1ZSxcIm1hdHN1c2hpbWEubWl5YWdpLmpwXCI6dHJ1ZSxcIm1pbmFtaXNhbnJpa3UubWl5YWdpLmpwXCI6dHJ1ZSxcIm1pc2F0by5taXlhZ2kuanBcIjp0cnVlLFwibXVyYXRhLm1peWFnaS5qcFwiOnRydWUsXCJuYXRvcmkubWl5YWdpLmpwXCI6dHJ1ZSxcIm9nYXdhcmEubWl5YWdpLmpwXCI6dHJ1ZSxcIm9oaXJhLm1peWFnaS5qcFwiOnRydWUsXCJvbmFnYXdhLm1peWFnaS5qcFwiOnRydWUsXCJvc2FraS5taXlhZ2kuanBcIjp0cnVlLFwicmlmdS5taXlhZ2kuanBcIjp0cnVlLFwic2VtaW5lLm1peWFnaS5qcFwiOnRydWUsXCJzaGliYXRhLm1peWFnaS5qcFwiOnRydWUsXCJzaGljaGlrYXNodWt1Lm1peWFnaS5qcFwiOnRydWUsXCJzaGlrYW1hLm1peWFnaS5qcFwiOnRydWUsXCJzaGlvZ2FtYS5taXlhZ2kuanBcIjp0cnVlLFwic2hpcm9pc2hpLm1peWFnaS5qcFwiOnRydWUsXCJ0YWdham8ubWl5YWdpLmpwXCI6dHJ1ZSxcInRhaXdhLm1peWFnaS5qcFwiOnRydWUsXCJ0b21lLm1peWFnaS5qcFwiOnRydWUsXCJ0b21peWEubWl5YWdpLmpwXCI6dHJ1ZSxcIndha3V5YS5taXlhZ2kuanBcIjp0cnVlLFwid2F0YXJpLm1peWFnaS5qcFwiOnRydWUsXCJ5YW1hbW90by5taXlhZ2kuanBcIjp0cnVlLFwiemFvLm1peWFnaS5qcFwiOnRydWUsXCJheWEubWl5YXpha2kuanBcIjp0cnVlLFwiZWJpbm8ubWl5YXpha2kuanBcIjp0cnVlLFwiZ29rYXNlLm1peWF6YWtpLmpwXCI6dHJ1ZSxcImh5dWdhLm1peWF6YWtpLmpwXCI6dHJ1ZSxcImthZG9nYXdhLm1peWF6YWtpLmpwXCI6dHJ1ZSxcImthd2FtaW5hbWkubWl5YXpha2kuanBcIjp0cnVlLFwia2lqby5taXlhemFraS5qcFwiOnRydWUsXCJraXRhZ2F3YS5taXlhemFraS5qcFwiOnRydWUsXCJraXRha2F0YS5taXlhemFraS5qcFwiOnRydWUsXCJraXRhdXJhLm1peWF6YWtpLmpwXCI6dHJ1ZSxcImtvYmF5YXNoaS5taXlhemFraS5qcFwiOnRydWUsXCJrdW5pdG9taS5taXlhemFraS5qcFwiOnRydWUsXCJrdXNoaW1hLm1peWF6YWtpLmpwXCI6dHJ1ZSxcIm1pbWF0YS5taXlhemFraS5qcFwiOnRydWUsXCJtaXlha29ub2pvLm1peWF6YWtpLmpwXCI6dHJ1ZSxcIm1peWF6YWtpLm1peWF6YWtpLmpwXCI6dHJ1ZSxcIm1vcm90c3VrYS5taXlhemFraS5qcFwiOnRydWUsXCJuaWNoaW5hbi5taXlhemFraS5qcFwiOnRydWUsXCJuaXNoaW1lcmEubWl5YXpha2kuanBcIjp0cnVlLFwibm9iZW9rYS5taXlhemFraS5qcFwiOnRydWUsXCJzYWl0by5taXlhemFraS5qcFwiOnRydWUsXCJzaGlpYmEubWl5YXpha2kuanBcIjp0cnVlLFwic2hpbnRvbWkubWl5YXpha2kuanBcIjp0cnVlLFwidGFrYWhhcnUubWl5YXpha2kuanBcIjp0cnVlLFwidGFrYW5hYmUubWl5YXpha2kuanBcIjp0cnVlLFwidGFrYXpha2kubWl5YXpha2kuanBcIjp0cnVlLFwidHN1bm8ubWl5YXpha2kuanBcIjp0cnVlLFwiYWNoaS5uYWdhbm8uanBcIjp0cnVlLFwiYWdlbWF0c3UubmFnYW5vLmpwXCI6dHJ1ZSxcImFuYW4ubmFnYW5vLmpwXCI6dHJ1ZSxcImFva2kubmFnYW5vLmpwXCI6dHJ1ZSxcImFzYWhpLm5hZ2Fuby5qcFwiOnRydWUsXCJhenVtaW5vLm5hZ2Fuby5qcFwiOnRydWUsXCJjaGlrdWhva3UubmFnYW5vLmpwXCI6dHJ1ZSxcImNoaWt1bWEubmFnYW5vLmpwXCI6dHJ1ZSxcImNoaW5vLm5hZ2Fuby5qcFwiOnRydWUsXCJmdWppbWkubmFnYW5vLmpwXCI6dHJ1ZSxcImhha3ViYS5uYWdhbm8uanBcIjp0cnVlLFwiaGFyYS5uYWdhbm8uanBcIjp0cnVlLFwiaGlyYXlhLm5hZ2Fuby5qcFwiOnRydWUsXCJpaWRhLm5hZ2Fuby5qcFwiOnRydWUsXCJpaWppbWEubmFnYW5vLmpwXCI6dHJ1ZSxcImlpeWFtYS5uYWdhbm8uanBcIjp0cnVlLFwiaWl6dW5hLm5hZ2Fuby5qcFwiOnRydWUsXCJpa2VkYS5uYWdhbm8uanBcIjp0cnVlLFwiaWt1c2FrYS5uYWdhbm8uanBcIjp0cnVlLFwiaW5hLm5hZ2Fuby5qcFwiOnRydWUsXCJrYXJ1aXphd2EubmFnYW5vLmpwXCI6dHJ1ZSxcImthd2FrYW1pLm5hZ2Fuby5qcFwiOnRydWUsXCJraXNvLm5hZ2Fuby5qcFwiOnRydWUsXCJraXNvZnVrdXNoaW1hLm5hZ2Fuby5qcFwiOnRydWUsXCJraXRhYWlraS5uYWdhbm8uanBcIjp0cnVlLFwia29tYWdhbmUubmFnYW5vLmpwXCI6dHJ1ZSxcImtvbW9yby5uYWdhbm8uanBcIjp0cnVlLFwibWF0c3VrYXdhLm5hZ2Fuby5qcFwiOnRydWUsXCJtYXRzdW1vdG8ubmFnYW5vLmpwXCI6dHJ1ZSxcIm1pYXNhLm5hZ2Fuby5qcFwiOnRydWUsXCJtaW5hbWlhaWtpLm5hZ2Fuby5qcFwiOnRydWUsXCJtaW5hbWltYWtpLm5hZ2Fuby5qcFwiOnRydWUsXCJtaW5hbWltaW5vd2EubmFnYW5vLmpwXCI6dHJ1ZSxcIm1pbm93YS5uYWdhbm8uanBcIjp0cnVlLFwibWl5YWRhLm5hZ2Fuby5qcFwiOnRydWUsXCJtaXlvdGEubmFnYW5vLmpwXCI6dHJ1ZSxcIm1vY2hpenVraS5uYWdhbm8uanBcIjp0cnVlLFwibmFnYW5vLm5hZ2Fuby5qcFwiOnRydWUsXCJuYWdhd2EubmFnYW5vLmpwXCI6dHJ1ZSxcIm5hZ2lzby5uYWdhbm8uanBcIjp0cnVlLFwibmFrYWdhd2EubmFnYW5vLmpwXCI6dHJ1ZSxcIm5ha2Fuby5uYWdhbm8uanBcIjp0cnVlLFwibm96YXdhb25zZW4ubmFnYW5vLmpwXCI6dHJ1ZSxcIm9idXNlLm5hZ2Fuby5qcFwiOnRydWUsXCJvZ2F3YS5uYWdhbm8uanBcIjp0cnVlLFwib2theWEubmFnYW5vLmpwXCI6dHJ1ZSxcIm9tYWNoaS5uYWdhbm8uanBcIjp0cnVlLFwib21pLm5hZ2Fuby5qcFwiOnRydWUsXCJvb2t1d2EubmFnYW5vLmpwXCI6dHJ1ZSxcIm9vc2hpa2EubmFnYW5vLmpwXCI6dHJ1ZSxcIm90YWtpLm5hZ2Fuby5qcFwiOnRydWUsXCJvdGFyaS5uYWdhbm8uanBcIjp0cnVlLFwic2FrYWUubmFnYW5vLmpwXCI6dHJ1ZSxcInNha2FraS5uYWdhbm8uanBcIjp0cnVlLFwic2FrdS5uYWdhbm8uanBcIjp0cnVlLFwic2FrdWhvLm5hZ2Fuby5qcFwiOnRydWUsXCJzaGltb3N1d2EubmFnYW5vLmpwXCI6dHJ1ZSxcInNoaW5hbm9tYWNoaS5uYWdhbm8uanBcIjp0cnVlLFwic2hpb2ppcmkubmFnYW5vLmpwXCI6dHJ1ZSxcInN1d2EubmFnYW5vLmpwXCI6dHJ1ZSxcInN1emFrYS5uYWdhbm8uanBcIjp0cnVlLFwidGFrYWdpLm5hZ2Fuby5qcFwiOnRydWUsXCJ0YWthbW9yaS5uYWdhbm8uanBcIjp0cnVlLFwidGFrYXlhbWEubmFnYW5vLmpwXCI6dHJ1ZSxcInRhdGVzaGluYS5uYWdhbm8uanBcIjp0cnVlLFwidGF0c3Vuby5uYWdhbm8uanBcIjp0cnVlLFwidG9nYWt1c2hpLm5hZ2Fuby5qcFwiOnRydWUsXCJ0b2d1cmEubmFnYW5vLmpwXCI6dHJ1ZSxcInRvbWkubmFnYW5vLmpwXCI6dHJ1ZSxcInVlZGEubmFnYW5vLmpwXCI6dHJ1ZSxcIndhZGEubmFnYW5vLmpwXCI6dHJ1ZSxcInlhbWFnYXRhLm5hZ2Fuby5qcFwiOnRydWUsXCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcFwiOnRydWUsXCJ5YXNha2EubmFnYW5vLmpwXCI6dHJ1ZSxcInlhc3Vva2EubmFnYW5vLmpwXCI6dHJ1ZSxcImNoaWppd2EubmFnYXNha2kuanBcIjp0cnVlLFwiZnV0c3UubmFnYXNha2kuanBcIjp0cnVlLFwiZ290by5uYWdhc2FraS5qcFwiOnRydWUsXCJoYXNhbWkubmFnYXNha2kuanBcIjp0cnVlLFwiaGlyYWRvLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcImlraS5uYWdhc2FraS5qcFwiOnRydWUsXCJpc2FoYXlhLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcImthd2F0YW5hLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcImt1Y2hpbm90c3UubmFnYXNha2kuanBcIjp0cnVlLFwibWF0c3V1cmEubmFnYXNha2kuanBcIjp0cnVlLFwibmFnYXNha2kubmFnYXNha2kuanBcIjp0cnVlLFwib2JhbWEubmFnYXNha2kuanBcIjp0cnVlLFwib211cmEubmFnYXNha2kuanBcIjp0cnVlLFwib3NldG8ubmFnYXNha2kuanBcIjp0cnVlLFwic2Fpa2FpLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcInNhc2Viby5uYWdhc2FraS5qcFwiOnRydWUsXCJzZWloaS5uYWdhc2FraS5qcFwiOnRydWUsXCJzaGltYWJhcmEubmFnYXNha2kuanBcIjp0cnVlLFwic2hpbmthbWlnb3RvLm5hZ2FzYWtpLmpwXCI6dHJ1ZSxcInRvZ2l0c3UubmFnYXNha2kuanBcIjp0cnVlLFwidHN1c2hpbWEubmFnYXNha2kuanBcIjp0cnVlLFwidW56ZW4ubmFnYXNha2kuanBcIjp0cnVlLFwiYW5kby5uYXJhLmpwXCI6dHJ1ZSxcImdvc2UubmFyYS5qcFwiOnRydWUsXCJoZWd1cmkubmFyYS5qcFwiOnRydWUsXCJoaWdhc2hpeW9zaGluby5uYXJhLmpwXCI6dHJ1ZSxcImlrYXJ1Z2EubmFyYS5qcFwiOnRydWUsXCJpa29tYS5uYXJhLmpwXCI6dHJ1ZSxcImthbWlraXRheWFtYS5uYXJhLmpwXCI6dHJ1ZSxcImthbm1ha2kubmFyYS5qcFwiOnRydWUsXCJrYXNoaWJhLm5hcmEuanBcIjp0cnVlLFwia2FzaGloYXJhLm5hcmEuanBcIjp0cnVlLFwia2F0c3VyYWdpLm5hcmEuanBcIjp0cnVlLFwia2F3YWkubmFyYS5qcFwiOnRydWUsXCJrYXdha2FtaS5uYXJhLmpwXCI6dHJ1ZSxcImthd2FuaXNoaS5uYXJhLmpwXCI6dHJ1ZSxcImtvcnlvLm5hcmEuanBcIjp0cnVlLFwia3Vyb3Rha2kubmFyYS5qcFwiOnRydWUsXCJtaXRzdWUubmFyYS5qcFwiOnRydWUsXCJtaXlha2UubmFyYS5qcFwiOnRydWUsXCJuYXJhLm5hcmEuanBcIjp0cnVlLFwibm9zZWdhd2EubmFyYS5qcFwiOnRydWUsXCJvamkubmFyYS5qcFwiOnRydWUsXCJvdWRhLm5hcmEuanBcIjp0cnVlLFwib3lvZG8ubmFyYS5qcFwiOnRydWUsXCJzYWt1cmFpLm5hcmEuanBcIjp0cnVlLFwic2FuZ28ubmFyYS5qcFwiOnRydWUsXCJzaGltb2ljaGkubmFyYS5qcFwiOnRydWUsXCJzaGltb2tpdGF5YW1hLm5hcmEuanBcIjp0cnVlLFwic2hpbmpvLm5hcmEuanBcIjp0cnVlLFwic29uaS5uYXJhLmpwXCI6dHJ1ZSxcInRha2F0b3JpLm5hcmEuanBcIjp0cnVlLFwidGF3YXJhbW90by5uYXJhLmpwXCI6dHJ1ZSxcInRlbmthd2EubmFyYS5qcFwiOnRydWUsXCJ0ZW5yaS5uYXJhLmpwXCI6dHJ1ZSxcInVkYS5uYXJhLmpwXCI6dHJ1ZSxcInlhbWF0b2tvcml5YW1hLm5hcmEuanBcIjp0cnVlLFwieWFtYXRvdGFrYWRhLm5hcmEuanBcIjp0cnVlLFwieWFtYXpvZS5uYXJhLmpwXCI6dHJ1ZSxcInlvc2hpbm8ubmFyYS5qcFwiOnRydWUsXCJhZ2EubmlpZ2F0YS5qcFwiOnRydWUsXCJhZ2Fuby5uaWlnYXRhLmpwXCI6dHJ1ZSxcImdvc2VuLm5paWdhdGEuanBcIjp0cnVlLFwiaXRvaWdhd2EubmlpZ2F0YS5qcFwiOnRydWUsXCJpenVtb3pha2kubmlpZ2F0YS5qcFwiOnRydWUsXCJqb2V0c3UubmlpZ2F0YS5qcFwiOnRydWUsXCJrYW1vLm5paWdhdGEuanBcIjp0cnVlLFwia2FyaXdhLm5paWdhdGEuanBcIjp0cnVlLFwia2FzaGl3YXpha2kubmlpZ2F0YS5qcFwiOnRydWUsXCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcFwiOnRydWUsXCJtaXRzdWtlLm5paWdhdGEuanBcIjp0cnVlLFwibXVpa2EubmlpZ2F0YS5qcFwiOnRydWUsXCJtdXJha2FtaS5uaWlnYXRhLmpwXCI6dHJ1ZSxcIm15b2tvLm5paWdhdGEuanBcIjp0cnVlLFwibmFnYW9rYS5uaWlnYXRhLmpwXCI6dHJ1ZSxcIm5paWdhdGEubmlpZ2F0YS5qcFwiOnRydWUsXCJvaml5YS5uaWlnYXRhLmpwXCI6dHJ1ZSxcIm9taS5uaWlnYXRhLmpwXCI6dHJ1ZSxcInNhZG8ubmlpZ2F0YS5qcFwiOnRydWUsXCJzYW5qby5uaWlnYXRhLmpwXCI6dHJ1ZSxcInNlaXJvLm5paWdhdGEuanBcIjp0cnVlLFwic2Vpcm91Lm5paWdhdGEuanBcIjp0cnVlLFwic2VraWthd2EubmlpZ2F0YS5qcFwiOnRydWUsXCJzaGliYXRhLm5paWdhdGEuanBcIjp0cnVlLFwidGFnYW1pLm5paWdhdGEuanBcIjp0cnVlLFwidGFpbmFpLm5paWdhdGEuanBcIjp0cnVlLFwidG9jaGlvLm5paWdhdGEuanBcIjp0cnVlLFwidG9rYW1hY2hpLm5paWdhdGEuanBcIjp0cnVlLFwidHN1YmFtZS5uaWlnYXRhLmpwXCI6dHJ1ZSxcInRzdW5hbi5uaWlnYXRhLmpwXCI6dHJ1ZSxcInVvbnVtYS5uaWlnYXRhLmpwXCI6dHJ1ZSxcInlhaGlrby5uaWlnYXRhLmpwXCI6dHJ1ZSxcInlvaXRhLm5paWdhdGEuanBcIjp0cnVlLFwieXV6YXdhLm5paWdhdGEuanBcIjp0cnVlLFwiYmVwcHUub2l0YS5qcFwiOnRydWUsXCJidW5nb29uby5vaXRhLmpwXCI6dHJ1ZSxcImJ1bmdvdGFrYWRhLm9pdGEuanBcIjp0cnVlLFwiaGFzYW1hLm9pdGEuanBcIjp0cnVlLFwiaGlqaS5vaXRhLmpwXCI6dHJ1ZSxcImhpbWVzaGltYS5vaXRhLmpwXCI6dHJ1ZSxcImhpdGEub2l0YS5qcFwiOnRydWUsXCJrYW1pdHN1ZS5vaXRhLmpwXCI6dHJ1ZSxcImtva29ub2Uub2l0YS5qcFwiOnRydWUsXCJrdWp1Lm9pdGEuanBcIjp0cnVlLFwia3VuaXNha2kub2l0YS5qcFwiOnRydWUsXCJrdXN1Lm9pdGEuanBcIjp0cnVlLFwib2l0YS5vaXRhLmpwXCI6dHJ1ZSxcInNhaWtpLm9pdGEuanBcIjp0cnVlLFwidGFrZXRhLm9pdGEuanBcIjp0cnVlLFwidHN1a3VtaS5vaXRhLmpwXCI6dHJ1ZSxcInVzYS5vaXRhLmpwXCI6dHJ1ZSxcInVzdWtpLm9pdGEuanBcIjp0cnVlLFwieXVmdS5vaXRhLmpwXCI6dHJ1ZSxcImFrYWl3YS5va2F5YW1hLmpwXCI6dHJ1ZSxcImFzYWt1Y2hpLm9rYXlhbWEuanBcIjp0cnVlLFwiYml6ZW4ub2theWFtYS5qcFwiOnRydWUsXCJoYXlhc2hpbWEub2theWFtYS5qcFwiOnRydWUsXCJpYmFyYS5va2F5YW1hLmpwXCI6dHJ1ZSxcImthZ2FtaW5vLm9rYXlhbWEuanBcIjp0cnVlLFwia2FzYW9rYS5va2F5YW1hLmpwXCI6dHJ1ZSxcImtpYmljaHVvLm9rYXlhbWEuanBcIjp0cnVlLFwia3VtZW5hbi5va2F5YW1hLmpwXCI6dHJ1ZSxcImt1cmFzaGlraS5va2F5YW1hLmpwXCI6dHJ1ZSxcIm1hbml3YS5va2F5YW1hLmpwXCI6dHJ1ZSxcIm1pc2FraS5va2F5YW1hLmpwXCI6dHJ1ZSxcIm5hZ2kub2theWFtYS5qcFwiOnRydWUsXCJuaWltaS5va2F5YW1hLmpwXCI6dHJ1ZSxcIm5pc2hpYXdha3VyYS5va2F5YW1hLmpwXCI6dHJ1ZSxcIm9rYXlhbWEub2theWFtYS5qcFwiOnRydWUsXCJzYXRvc2hvLm9rYXlhbWEuanBcIjp0cnVlLFwic2V0b3VjaGkub2theWFtYS5qcFwiOnRydWUsXCJzaGluam8ub2theWFtYS5qcFwiOnRydWUsXCJzaG9vLm9rYXlhbWEuanBcIjp0cnVlLFwic29qYS5va2F5YW1hLmpwXCI6dHJ1ZSxcInRha2FoYXNoaS5va2F5YW1hLmpwXCI6dHJ1ZSxcInRhbWFuby5va2F5YW1hLmpwXCI6dHJ1ZSxcInRzdXlhbWEub2theWFtYS5qcFwiOnRydWUsXCJ3YWtlLm9rYXlhbWEuanBcIjp0cnVlLFwieWFrYWdlLm9rYXlhbWEuanBcIjp0cnVlLFwiYWd1bmkub2tpbmF3YS5qcFwiOnRydWUsXCJnaW5vd2FuLm9raW5hd2EuanBcIjp0cnVlLFwiZ2lub3phLm9raW5hd2EuanBcIjp0cnVlLFwiZ3VzaGlrYW1pLm9raW5hd2EuanBcIjp0cnVlLFwiaGFlYmFydS5va2luYXdhLmpwXCI6dHJ1ZSxcImhpZ2FzaGkub2tpbmF3YS5qcFwiOnRydWUsXCJoaXJhcmEub2tpbmF3YS5qcFwiOnRydWUsXCJpaGV5YS5va2luYXdhLmpwXCI6dHJ1ZSxcImlzaGlnYWtpLm9raW5hd2EuanBcIjp0cnVlLFwiaXNoaWthd2Eub2tpbmF3YS5qcFwiOnRydWUsXCJpdG9tYW4ub2tpbmF3YS5qcFwiOnRydWUsXCJpemVuYS5va2luYXdhLmpwXCI6dHJ1ZSxcImthZGVuYS5va2luYXdhLmpwXCI6dHJ1ZSxcImtpbi5va2luYXdhLmpwXCI6dHJ1ZSxcImtpdGFkYWl0by5va2luYXdhLmpwXCI6dHJ1ZSxcImtpdGFuYWthZ3VzdWt1Lm9raW5hd2EuanBcIjp0cnVlLFwia3VtZWppbWEub2tpbmF3YS5qcFwiOnRydWUsXCJrdW5pZ2FtaS5va2luYXdhLmpwXCI6dHJ1ZSxcIm1pbmFtaWRhaXRvLm9raW5hd2EuanBcIjp0cnVlLFwibW90b2J1Lm9raW5hd2EuanBcIjp0cnVlLFwibmFnby5va2luYXdhLmpwXCI6dHJ1ZSxcIm5haGEub2tpbmF3YS5qcFwiOnRydWUsXCJuYWthZ3VzdWt1Lm9raW5hd2EuanBcIjp0cnVlLFwibmFraWppbi5va2luYXdhLmpwXCI6dHJ1ZSxcIm5hbmpvLm9raW5hd2EuanBcIjp0cnVlLFwibmlzaGloYXJhLm9raW5hd2EuanBcIjp0cnVlLFwib2dpbWkub2tpbmF3YS5qcFwiOnRydWUsXCJva2luYXdhLm9raW5hd2EuanBcIjp0cnVlLFwib25uYS5va2luYXdhLmpwXCI6dHJ1ZSxcInNoaW1vamkub2tpbmF3YS5qcFwiOnRydWUsXCJ0YWtldG9taS5va2luYXdhLmpwXCI6dHJ1ZSxcInRhcmFtYS5va2luYXdhLmpwXCI6dHJ1ZSxcInRva2FzaGlraS5va2luYXdhLmpwXCI6dHJ1ZSxcInRvbWlndXN1a3Uub2tpbmF3YS5qcFwiOnRydWUsXCJ0b25ha2kub2tpbmF3YS5qcFwiOnRydWUsXCJ1cmFzb2Uub2tpbmF3YS5qcFwiOnRydWUsXCJ1cnVtYS5va2luYXdhLmpwXCI6dHJ1ZSxcInlhZXNlLm9raW5hd2EuanBcIjp0cnVlLFwieW9taXRhbi5va2luYXdhLmpwXCI6dHJ1ZSxcInlvbmFiYXJ1Lm9raW5hd2EuanBcIjp0cnVlLFwieW9uYWd1bmkub2tpbmF3YS5qcFwiOnRydWUsXCJ6YW1hbWkub2tpbmF3YS5qcFwiOnRydWUsXCJhYmVuby5vc2FrYS5qcFwiOnRydWUsXCJjaGloYXlhYWthc2FrYS5vc2FrYS5qcFwiOnRydWUsXCJjaHVvLm9zYWthLmpwXCI6dHJ1ZSxcImRhaXRvLm9zYWthLmpwXCI6dHJ1ZSxcImZ1amlpZGVyYS5vc2FrYS5qcFwiOnRydWUsXCJoYWJpa2luby5vc2FrYS5qcFwiOnRydWUsXCJoYW5uYW4ub3Nha2EuanBcIjp0cnVlLFwiaGlnYXNoaW9zYWthLm9zYWthLmpwXCI6dHJ1ZSxcImhpZ2FzaGlzdW1peW9zaGkub3Nha2EuanBcIjp0cnVlLFwiaGlnYXNoaXlvZG9nYXdhLm9zYWthLmpwXCI6dHJ1ZSxcImhpcmFrYXRhLm9zYWthLmpwXCI6dHJ1ZSxcImliYXJha2kub3Nha2EuanBcIjp0cnVlLFwiaWtlZGEub3Nha2EuanBcIjp0cnVlLFwiaXp1bWkub3Nha2EuanBcIjp0cnVlLFwiaXp1bWlvdHN1Lm9zYWthLmpwXCI6dHJ1ZSxcIml6dW1pc2Fuby5vc2FrYS5qcFwiOnRydWUsXCJrYWRvbWEub3Nha2EuanBcIjp0cnVlLFwia2FpenVrYS5vc2FrYS5qcFwiOnRydWUsXCJrYW5hbi5vc2FrYS5qcFwiOnRydWUsXCJrYXNoaXdhcmEub3Nha2EuanBcIjp0cnVlLFwia2F0YW5vLm9zYWthLmpwXCI6dHJ1ZSxcImthd2FjaGluYWdhbm8ub3Nha2EuanBcIjp0cnVlLFwia2lzaGl3YWRhLm9zYWthLmpwXCI6dHJ1ZSxcImtpdGEub3Nha2EuanBcIjp0cnVlLFwia3VtYXRvcmkub3Nha2EuanBcIjp0cnVlLFwibWF0c3ViYXJhLm9zYWthLmpwXCI6dHJ1ZSxcIm1pbmF0by5vc2FrYS5qcFwiOnRydWUsXCJtaW5vaC5vc2FrYS5qcFwiOnRydWUsXCJtaXNha2kub3Nha2EuanBcIjp0cnVlLFwibW9yaWd1Y2hpLm9zYWthLmpwXCI6dHJ1ZSxcIm5leWFnYXdhLm9zYWthLmpwXCI6dHJ1ZSxcIm5pc2hpLm9zYWthLmpwXCI6dHJ1ZSxcIm5vc2Uub3Nha2EuanBcIjp0cnVlLFwib3Nha2FzYXlhbWEub3Nha2EuanBcIjp0cnVlLFwic2FrYWkub3Nha2EuanBcIjp0cnVlLFwic2F5YW1hLm9zYWthLmpwXCI6dHJ1ZSxcInNlbm5hbi5vc2FrYS5qcFwiOnRydWUsXCJzZXR0c3Uub3Nha2EuanBcIjp0cnVlLFwic2hpam9uYXdhdGUub3Nha2EuanBcIjp0cnVlLFwic2hpbWFtb3RvLm9zYWthLmpwXCI6dHJ1ZSxcInN1aXRhLm9zYWthLmpwXCI6dHJ1ZSxcInRhZGFva2Eub3Nha2EuanBcIjp0cnVlLFwidGFpc2hpLm9zYWthLmpwXCI6dHJ1ZSxcInRhamlyaS5vc2FrYS5qcFwiOnRydWUsXCJ0YWthaXNoaS5vc2FrYS5qcFwiOnRydWUsXCJ0YWthdHN1a2kub3Nha2EuanBcIjp0cnVlLFwidG9uZGFiYXlhc2hpLm9zYWthLmpwXCI6dHJ1ZSxcInRveW9uYWthLm9zYWthLmpwXCI6dHJ1ZSxcInRveW9uby5vc2FrYS5qcFwiOnRydWUsXCJ5YW8ub3Nha2EuanBcIjp0cnVlLFwiYXJpYWtlLnNhZ2EuanBcIjp0cnVlLFwiYXJpdGEuc2FnYS5qcFwiOnRydWUsXCJmdWt1ZG9taS5zYWdhLmpwXCI6dHJ1ZSxcImdlbmthaS5zYWdhLmpwXCI6dHJ1ZSxcImhhbWF0YW1hLnNhZ2EuanBcIjp0cnVlLFwiaGl6ZW4uc2FnYS5qcFwiOnRydWUsXCJpbWFyaS5zYWdhLmpwXCI6dHJ1ZSxcImthbWltaW5lLnNhZ2EuanBcIjp0cnVlLFwia2FuemFraS5zYWdhLmpwXCI6dHJ1ZSxcImthcmF0c3Uuc2FnYS5qcFwiOnRydWUsXCJrYXNoaW1hLnNhZ2EuanBcIjp0cnVlLFwia2l0YWdhdGEuc2FnYS5qcFwiOnRydWUsXCJraXRhaGF0YS5zYWdhLmpwXCI6dHJ1ZSxcImtpeWFtYS5zYWdhLmpwXCI6dHJ1ZSxcImtvdWhva3Uuc2FnYS5qcFwiOnRydWUsXCJreXVyYWdpLnNhZ2EuanBcIjp0cnVlLFwibmlzaGlhcml0YS5zYWdhLmpwXCI6dHJ1ZSxcIm9naS5zYWdhLmpwXCI6dHJ1ZSxcIm9tYWNoaS5zYWdhLmpwXCI6dHJ1ZSxcIm91Y2hpLnNhZ2EuanBcIjp0cnVlLFwic2FnYS5zYWdhLmpwXCI6dHJ1ZSxcInNoaXJvaXNoaS5zYWdhLmpwXCI6dHJ1ZSxcInRha3Uuc2FnYS5qcFwiOnRydWUsXCJ0YXJhLnNhZ2EuanBcIjp0cnVlLFwidG9zdS5zYWdhLmpwXCI6dHJ1ZSxcInlvc2hpbm9nYXJpLnNhZ2EuanBcIjp0cnVlLFwiYXJha2F3YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImFzYWthLnNhaXRhbWEuanBcIjp0cnVlLFwiY2hpY2hpYnUuc2FpdGFtYS5qcFwiOnRydWUsXCJmdWppbWkuc2FpdGFtYS5qcFwiOnRydWUsXCJmdWppbWluby5zYWl0YW1hLmpwXCI6dHJ1ZSxcImZ1a2F5YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImhhbm5vLnNhaXRhbWEuanBcIjp0cnVlLFwiaGFueXUuc2FpdGFtYS5qcFwiOnRydWUsXCJoYXN1ZGEuc2FpdGFtYS5qcFwiOnRydWUsXCJoYXRvZ2F5YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImhhdG95YW1hLnNhaXRhbWEuanBcIjp0cnVlLFwiaGlkYWthLnNhaXRhbWEuanBcIjp0cnVlLFwiaGlnYXNoaWNoaWNoaWJ1LnNhaXRhbWEuanBcIjp0cnVlLFwiaGlnYXNoaW1hdHN1eWFtYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImhvbmpvLnNhaXRhbWEuanBcIjp0cnVlLFwiaW5hLnNhaXRhbWEuanBcIjp0cnVlLFwiaXJ1bWEuc2FpdGFtYS5qcFwiOnRydWUsXCJpd2F0c3VraS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImthbWlpenVtaS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImthbWlrYXdhLnNhaXRhbWEuanBcIjp0cnVlLFwia2FtaXNhdG8uc2FpdGFtYS5qcFwiOnRydWUsXCJrYXN1a2FiZS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImthd2Fnb2Uuc2FpdGFtYS5qcFwiOnRydWUsXCJrYXdhZ3VjaGkuc2FpdGFtYS5qcFwiOnRydWUsXCJrYXdhamltYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImthem8uc2FpdGFtYS5qcFwiOnRydWUsXCJraXRhbW90by5zYWl0YW1hLmpwXCI6dHJ1ZSxcImtvc2hpZ2F5YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImtvdW5vc3Uuc2FpdGFtYS5qcFwiOnRydWUsXCJrdWtpLnNhaXRhbWEuanBcIjp0cnVlLFwia3VtYWdheWEuc2FpdGFtYS5qcFwiOnRydWUsXCJtYXRzdWJ1c2hpLnNhaXRhbWEuanBcIjp0cnVlLFwibWluYW5vLnNhaXRhbWEuanBcIjp0cnVlLFwibWlzYXRvLnNhaXRhbWEuanBcIjp0cnVlLFwibWl5YXNoaXJvLnNhaXRhbWEuanBcIjp0cnVlLFwibWl5b3NoaS5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm1vcm95YW1hLnNhaXRhbWEuanBcIjp0cnVlLFwibmFnYXRvcm8uc2FpdGFtYS5qcFwiOnRydWUsXCJuYW1lZ2F3YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm5paXphLnNhaXRhbWEuanBcIjp0cnVlLFwib2dhbm8uc2FpdGFtYS5qcFwiOnRydWUsXCJvZ2F3YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm9nb3NlLnNhaXRhbWEuanBcIjp0cnVlLFwib2tlZ2F3YS5zYWl0YW1hLmpwXCI6dHJ1ZSxcIm9taXlhLnNhaXRhbWEuanBcIjp0cnVlLFwib3Rha2kuc2FpdGFtYS5qcFwiOnRydWUsXCJyYW56YW4uc2FpdGFtYS5qcFwiOnRydWUsXCJyeW9rYW1pLnNhaXRhbWEuanBcIjp0cnVlLFwic2FpdGFtYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcInNha2Fkby5zYWl0YW1hLmpwXCI6dHJ1ZSxcInNhdHRlLnNhaXRhbWEuanBcIjp0cnVlLFwic2F5YW1hLnNhaXRhbWEuanBcIjp0cnVlLFwic2hpa2kuc2FpdGFtYS5qcFwiOnRydWUsXCJzaGlyYW9rYS5zYWl0YW1hLmpwXCI6dHJ1ZSxcInNva2Euc2FpdGFtYS5qcFwiOnRydWUsXCJzdWdpdG8uc2FpdGFtYS5qcFwiOnRydWUsXCJ0b2RhLnNhaXRhbWEuanBcIjp0cnVlLFwidG9raWdhd2Euc2FpdGFtYS5qcFwiOnRydWUsXCJ0b2tvcm96YXdhLnNhaXRhbWEuanBcIjp0cnVlLFwidHN1cnVnYXNoaW1hLnNhaXRhbWEuanBcIjp0cnVlLFwidXJhd2Euc2FpdGFtYS5qcFwiOnRydWUsXCJ3YXJhYmkuc2FpdGFtYS5qcFwiOnRydWUsXCJ5YXNoaW8uc2FpdGFtYS5qcFwiOnRydWUsXCJ5b2tvemUuc2FpdGFtYS5qcFwiOnRydWUsXCJ5b25vLnNhaXRhbWEuanBcIjp0cnVlLFwieW9yaWkuc2FpdGFtYS5qcFwiOnRydWUsXCJ5b3NoaWRhLnNhaXRhbWEuanBcIjp0cnVlLFwieW9zaGlrYXdhLnNhaXRhbWEuanBcIjp0cnVlLFwieW9zaGltaS5zYWl0YW1hLmpwXCI6dHJ1ZSxcImFpc2hvLnNoaWdhLmpwXCI6dHJ1ZSxcImdhbW8uc2hpZ2EuanBcIjp0cnVlLFwiaGlnYXNoaW9taS5zaGlnYS5qcFwiOnRydWUsXCJoaWtvbmUuc2hpZ2EuanBcIjp0cnVlLFwia29rYS5zaGlnYS5qcFwiOnRydWUsXCJrb25hbi5zaGlnYS5qcFwiOnRydWUsXCJrb3NlaS5zaGlnYS5qcFwiOnRydWUsXCJrb3RvLnNoaWdhLmpwXCI6dHJ1ZSxcImt1c2F0c3Uuc2hpZ2EuanBcIjp0cnVlLFwibWFpYmFyYS5zaGlnYS5qcFwiOnRydWUsXCJtb3JpeWFtYS5zaGlnYS5qcFwiOnRydWUsXCJuYWdhaGFtYS5zaGlnYS5qcFwiOnRydWUsXCJuaXNoaWF6YWkuc2hpZ2EuanBcIjp0cnVlLFwibm90b2dhd2Euc2hpZ2EuanBcIjp0cnVlLFwib21paGFjaGltYW4uc2hpZ2EuanBcIjp0cnVlLFwib3RzdS5zaGlnYS5qcFwiOnRydWUsXCJyaXR0by5zaGlnYS5qcFwiOnRydWUsXCJyeXVvaC5zaGlnYS5qcFwiOnRydWUsXCJ0YWthc2hpbWEuc2hpZ2EuanBcIjp0cnVlLFwidGFrYXRzdWtpLnNoaWdhLmpwXCI6dHJ1ZSxcInRvcmFoaW1lLnNoaWdhLmpwXCI6dHJ1ZSxcInRveW9zYXRvLnNoaWdhLmpwXCI6dHJ1ZSxcInlhc3Uuc2hpZ2EuanBcIjp0cnVlLFwiYWthZ2kuc2hpbWFuZS5qcFwiOnRydWUsXCJhbWEuc2hpbWFuZS5qcFwiOnRydWUsXCJnb3RzdS5zaGltYW5lLmpwXCI6dHJ1ZSxcImhhbWFkYS5zaGltYW5lLmpwXCI6dHJ1ZSxcImhpZ2FzaGlpenVtby5zaGltYW5lLmpwXCI6dHJ1ZSxcImhpa2F3YS5zaGltYW5lLmpwXCI6dHJ1ZSxcImhpa2ltaS5zaGltYW5lLmpwXCI6dHJ1ZSxcIml6dW1vLnNoaW1hbmUuanBcIjp0cnVlLFwia2FraW5va2kuc2hpbWFuZS5qcFwiOnRydWUsXCJtYXN1ZGEuc2hpbWFuZS5qcFwiOnRydWUsXCJtYXRzdWUuc2hpbWFuZS5qcFwiOnRydWUsXCJtaXNhdG8uc2hpbWFuZS5qcFwiOnRydWUsXCJuaXNoaW5vc2hpbWEuc2hpbWFuZS5qcFwiOnRydWUsXCJvaGRhLnNoaW1hbmUuanBcIjp0cnVlLFwib2tpbm9zaGltYS5zaGltYW5lLmpwXCI6dHJ1ZSxcIm9rdWl6dW1vLnNoaW1hbmUuanBcIjp0cnVlLFwic2hpbWFuZS5zaGltYW5lLmpwXCI6dHJ1ZSxcInRhbWF5dS5zaGltYW5lLmpwXCI6dHJ1ZSxcInRzdXdhbm8uc2hpbWFuZS5qcFwiOnRydWUsXCJ1bm5hbi5zaGltYW5lLmpwXCI6dHJ1ZSxcInlha3Vtby5zaGltYW5lLmpwXCI6dHJ1ZSxcInlhc3VnaS5zaGltYW5lLmpwXCI6dHJ1ZSxcInlhdHN1a2Euc2hpbWFuZS5qcFwiOnRydWUsXCJhcmFpLnNoaXp1b2thLmpwXCI6dHJ1ZSxcImF0YW1pLnNoaXp1b2thLmpwXCI6dHJ1ZSxcImZ1amkuc2hpenVva2EuanBcIjp0cnVlLFwiZnVqaWVkYS5zaGl6dW9rYS5qcFwiOnRydWUsXCJmdWppa2F3YS5zaGl6dW9rYS5qcFwiOnRydWUsXCJmdWppbm9taXlhLnNoaXp1b2thLmpwXCI6dHJ1ZSxcImZ1a3Vyb2kuc2hpenVva2EuanBcIjp0cnVlLFwiZ290ZW1iYS5zaGl6dW9rYS5qcFwiOnRydWUsXCJoYWliYXJhLnNoaXp1b2thLmpwXCI6dHJ1ZSxcImhhbWFtYXRzdS5zaGl6dW9rYS5qcFwiOnRydWUsXCJoaWdhc2hpaXp1LnNoaXp1b2thLmpwXCI6dHJ1ZSxcIml0by5zaGl6dW9rYS5qcFwiOnRydWUsXCJpd2F0YS5zaGl6dW9rYS5qcFwiOnRydWUsXCJpenUuc2hpenVva2EuanBcIjp0cnVlLFwiaXp1bm9rdW5pLnNoaXp1b2thLmpwXCI6dHJ1ZSxcImtha2VnYXdhLnNoaXp1b2thLmpwXCI6dHJ1ZSxcImthbm5hbWkuc2hpenVva2EuanBcIjp0cnVlLFwia2F3YW5laG9uLnNoaXp1b2thLmpwXCI6dHJ1ZSxcImthd2F6dS5zaGl6dW9rYS5qcFwiOnRydWUsXCJraWt1Z2F3YS5zaGl6dW9rYS5qcFwiOnRydWUsXCJrb3NhaS5zaGl6dW9rYS5qcFwiOnRydWUsXCJtYWtpbm9oYXJhLnNoaXp1b2thLmpwXCI6dHJ1ZSxcIm1hdHN1emFraS5zaGl6dW9rYS5qcFwiOnRydWUsXCJtaW5hbWlpenUuc2hpenVva2EuanBcIjp0cnVlLFwibWlzaGltYS5zaGl6dW9rYS5qcFwiOnRydWUsXCJtb3JpbWFjaGkuc2hpenVva2EuanBcIjp0cnVlLFwibmlzaGlpenUuc2hpenVva2EuanBcIjp0cnVlLFwibnVtYXp1LnNoaXp1b2thLmpwXCI6dHJ1ZSxcIm9tYWV6YWtpLnNoaXp1b2thLmpwXCI6dHJ1ZSxcInNoaW1hZGEuc2hpenVva2EuanBcIjp0cnVlLFwic2hpbWl6dS5zaGl6dW9rYS5qcFwiOnRydWUsXCJzaGltb2RhLnNoaXp1b2thLmpwXCI6dHJ1ZSxcInNoaXp1b2thLnNoaXp1b2thLmpwXCI6dHJ1ZSxcInN1c29uby5zaGl6dW9rYS5qcFwiOnRydWUsXCJ5YWl6dS5zaGl6dW9rYS5qcFwiOnRydWUsXCJ5b3NoaWRhLnNoaXp1b2thLmpwXCI6dHJ1ZSxcImFzaGlrYWdhLnRvY2hpZ2kuanBcIjp0cnVlLFwiYmF0by50b2NoaWdpLmpwXCI6dHJ1ZSxcImhhZ2EudG9jaGlnaS5qcFwiOnRydWUsXCJpY2hpa2FpLnRvY2hpZ2kuanBcIjp0cnVlLFwiaXdhZnVuZS50b2NoaWdpLmpwXCI6dHJ1ZSxcImthbWlub2thd2EudG9jaGlnaS5qcFwiOnRydWUsXCJrYW51bWEudG9jaGlnaS5qcFwiOnRydWUsXCJrYXJhc3V5YW1hLnRvY2hpZ2kuanBcIjp0cnVlLFwia3Vyb2lzby50b2NoaWdpLmpwXCI6dHJ1ZSxcIm1hc2hpa28udG9jaGlnaS5qcFwiOnRydWUsXCJtaWJ1LnRvY2hpZ2kuanBcIjp0cnVlLFwibW9rYS50b2NoaWdpLmpwXCI6dHJ1ZSxcIm1vdGVnaS50b2NoaWdpLmpwXCI6dHJ1ZSxcIm5hc3UudG9jaGlnaS5qcFwiOnRydWUsXCJuYXN1c2hpb2JhcmEudG9jaGlnaS5qcFwiOnRydWUsXCJuaWtrby50b2NoaWdpLmpwXCI6dHJ1ZSxcIm5pc2hpa2F0YS50b2NoaWdpLmpwXCI6dHJ1ZSxcIm5vZ2kudG9jaGlnaS5qcFwiOnRydWUsXCJvaGlyYS50b2NoaWdpLmpwXCI6dHJ1ZSxcIm9odGF3YXJhLnRvY2hpZ2kuanBcIjp0cnVlLFwib3lhbWEudG9jaGlnaS5qcFwiOnRydWUsXCJzYWt1cmEudG9jaGlnaS5qcFwiOnRydWUsXCJzYW5vLnRvY2hpZ2kuanBcIjp0cnVlLFwic2hpbW90c3VrZS50b2NoaWdpLmpwXCI6dHJ1ZSxcInNoaW95YS50b2NoaWdpLmpwXCI6dHJ1ZSxcInRha2FuZXphd2EudG9jaGlnaS5qcFwiOnRydWUsXCJ0b2NoaWdpLnRvY2hpZ2kuanBcIjp0cnVlLFwidHN1Z2EudG9jaGlnaS5qcFwiOnRydWUsXCJ1amlpZS50b2NoaWdpLmpwXCI6dHJ1ZSxcInV0c3Vub21peWEudG9jaGlnaS5qcFwiOnRydWUsXCJ5YWl0YS50b2NoaWdpLmpwXCI6dHJ1ZSxcImFpenVtaS50b2t1c2hpbWEuanBcIjp0cnVlLFwiYW5hbi50b2t1c2hpbWEuanBcIjp0cnVlLFwiaWNoaWJhLnRva3VzaGltYS5qcFwiOnRydWUsXCJpdGFuby50b2t1c2hpbWEuanBcIjp0cnVlLFwia2FpbmFuLnRva3VzaGltYS5qcFwiOnRydWUsXCJrb21hdHN1c2hpbWEudG9rdXNoaW1hLmpwXCI6dHJ1ZSxcIm1hdHN1c2hpZ2UudG9rdXNoaW1hLmpwXCI6dHJ1ZSxcIm1pbWEudG9rdXNoaW1hLmpwXCI6dHJ1ZSxcIm1pbmFtaS50b2t1c2hpbWEuanBcIjp0cnVlLFwibWl5b3NoaS50b2t1c2hpbWEuanBcIjp0cnVlLFwibXVnaS50b2t1c2hpbWEuanBcIjp0cnVlLFwibmFrYWdhd2EudG9rdXNoaW1hLmpwXCI6dHJ1ZSxcIm5hcnV0by50b2t1c2hpbWEuanBcIjp0cnVlLFwic2FuYWdvY2hpLnRva3VzaGltYS5qcFwiOnRydWUsXCJzaGlzaGlrdWkudG9rdXNoaW1hLmpwXCI6dHJ1ZSxcInRva3VzaGltYS50b2t1c2hpbWEuanBcIjp0cnVlLFwid2FqaWtpLnRva3VzaGltYS5qcFwiOnRydWUsXCJhZGFjaGkudG9reW8uanBcIjp0cnVlLFwiYWtpcnVuby50b2t5by5qcFwiOnRydWUsXCJha2lzaGltYS50b2t5by5qcFwiOnRydWUsXCJhb2dhc2hpbWEudG9reW8uanBcIjp0cnVlLFwiYXJha2F3YS50b2t5by5qcFwiOnRydWUsXCJidW5reW8udG9reW8uanBcIjp0cnVlLFwiY2hpeW9kYS50b2t5by5qcFwiOnRydWUsXCJjaG9mdS50b2t5by5qcFwiOnRydWUsXCJjaHVvLnRva3lvLmpwXCI6dHJ1ZSxcImVkb2dhd2EudG9reW8uanBcIjp0cnVlLFwiZnVjaHUudG9reW8uanBcIjp0cnVlLFwiZnVzc2EudG9reW8uanBcIjp0cnVlLFwiaGFjaGlqby50b2t5by5qcFwiOnRydWUsXCJoYWNoaW9qaS50b2t5by5qcFwiOnRydWUsXCJoYW11cmEudG9reW8uanBcIjp0cnVlLFwiaGlnYXNoaWt1cnVtZS50b2t5by5qcFwiOnRydWUsXCJoaWdhc2hpbXVyYXlhbWEudG9reW8uanBcIjp0cnVlLFwiaGlnYXNoaXlhbWF0by50b2t5by5qcFwiOnRydWUsXCJoaW5vLnRva3lvLmpwXCI6dHJ1ZSxcImhpbm9kZS50b2t5by5qcFwiOnRydWUsXCJoaW5vaGFyYS50b2t5by5qcFwiOnRydWUsXCJpbmFnaS50b2t5by5qcFwiOnRydWUsXCJpdGFiYXNoaS50b2t5by5qcFwiOnRydWUsXCJrYXRzdXNoaWthLnRva3lvLmpwXCI6dHJ1ZSxcImtpdGEudG9reW8uanBcIjp0cnVlLFwia2l5b3NlLnRva3lvLmpwXCI6dHJ1ZSxcImtvZGFpcmEudG9reW8uanBcIjp0cnVlLFwia29nYW5laS50b2t5by5qcFwiOnRydWUsXCJrb2t1YnVuamkudG9reW8uanBcIjp0cnVlLFwia29tYWUudG9reW8uanBcIjp0cnVlLFwia290by50b2t5by5qcFwiOnRydWUsXCJrb3V6dXNoaW1hLnRva3lvLmpwXCI6dHJ1ZSxcImt1bml0YWNoaS50b2t5by5qcFwiOnRydWUsXCJtYWNoaWRhLnRva3lvLmpwXCI6dHJ1ZSxcIm1lZ3Vyby50b2t5by5qcFwiOnRydWUsXCJtaW5hdG8udG9reW8uanBcIjp0cnVlLFwibWl0YWthLnRva3lvLmpwXCI6dHJ1ZSxcIm1penVoby50b2t5by5qcFwiOnRydWUsXCJtdXNhc2hpbXVyYXlhbWEudG9reW8uanBcIjp0cnVlLFwibXVzYXNoaW5vLnRva3lvLmpwXCI6dHJ1ZSxcIm5ha2Fuby50b2t5by5qcFwiOnRydWUsXCJuZXJpbWEudG9reW8uanBcIjp0cnVlLFwib2dhc2F3YXJhLnRva3lvLmpwXCI6dHJ1ZSxcIm9rdXRhbWEudG9reW8uanBcIjp0cnVlLFwib21lLnRva3lvLmpwXCI6dHJ1ZSxcIm9zaGltYS50b2t5by5qcFwiOnRydWUsXCJvdGEudG9reW8uanBcIjp0cnVlLFwic2V0YWdheWEudG9reW8uanBcIjp0cnVlLFwic2hpYnV5YS50b2t5by5qcFwiOnRydWUsXCJzaGluYWdhd2EudG9reW8uanBcIjp0cnVlLFwic2hpbmp1a3UudG9reW8uanBcIjp0cnVlLFwic3VnaW5hbWkudG9reW8uanBcIjp0cnVlLFwic3VtaWRhLnRva3lvLmpwXCI6dHJ1ZSxcInRhY2hpa2F3YS50b2t5by5qcFwiOnRydWUsXCJ0YWl0by50b2t5by5qcFwiOnRydWUsXCJ0YW1hLnRva3lvLmpwXCI6dHJ1ZSxcInRvc2hpbWEudG9reW8uanBcIjp0cnVlLFwiY2hpenUudG90dG9yaS5qcFwiOnRydWUsXCJoaW5vLnRvdHRvcmkuanBcIjp0cnVlLFwia2F3YWhhcmEudG90dG9yaS5qcFwiOnRydWUsXCJrb2dlLnRvdHRvcmkuanBcIjp0cnVlLFwia290b3VyYS50b3R0b3JpLmpwXCI6dHJ1ZSxcIm1pc2FzYS50b3R0b3JpLmpwXCI6dHJ1ZSxcIm5hbmJ1LnRvdHRvcmkuanBcIjp0cnVlLFwibmljaGluYW4udG90dG9yaS5qcFwiOnRydWUsXCJzYWthaW1pbmF0by50b3R0b3JpLmpwXCI6dHJ1ZSxcInRvdHRvcmkudG90dG9yaS5qcFwiOnRydWUsXCJ3YWthc2EudG90dG9yaS5qcFwiOnRydWUsXCJ5YXp1LnRvdHRvcmkuanBcIjp0cnVlLFwieW9uYWdvLnRvdHRvcmkuanBcIjp0cnVlLFwiYXNhaGkudG95YW1hLmpwXCI6dHJ1ZSxcImZ1Y2h1LnRveWFtYS5qcFwiOnRydWUsXCJmdWt1bWl0c3UudG95YW1hLmpwXCI6dHJ1ZSxcImZ1bmFoYXNoaS50b3lhbWEuanBcIjp0cnVlLFwiaGltaS50b3lhbWEuanBcIjp0cnVlLFwiaW1penUudG95YW1hLmpwXCI6dHJ1ZSxcImluYW1pLnRveWFtYS5qcFwiOnRydWUsXCJqb2hhbmEudG95YW1hLmpwXCI6dHJ1ZSxcImthbWlpY2hpLnRveWFtYS5qcFwiOnRydWUsXCJrdXJvYmUudG95YW1hLmpwXCI6dHJ1ZSxcIm5ha2FuaWlrYXdhLnRveWFtYS5qcFwiOnRydWUsXCJuYW1lcmlrYXdhLnRveWFtYS5qcFwiOnRydWUsXCJuYW50by50b3lhbWEuanBcIjp0cnVlLFwibnl1emVuLnRveWFtYS5qcFwiOnRydWUsXCJveWFiZS50b3lhbWEuanBcIjp0cnVlLFwidGFpcmEudG95YW1hLmpwXCI6dHJ1ZSxcInRha2Fva2EudG95YW1hLmpwXCI6dHJ1ZSxcInRhdGV5YW1hLnRveWFtYS5qcFwiOnRydWUsXCJ0b2dhLnRveWFtYS5qcFwiOnRydWUsXCJ0b25hbWkudG95YW1hLmpwXCI6dHJ1ZSxcInRveWFtYS50b3lhbWEuanBcIjp0cnVlLFwidW5henVraS50b3lhbWEuanBcIjp0cnVlLFwidW96dS50b3lhbWEuanBcIjp0cnVlLFwieWFtYWRhLnRveWFtYS5qcFwiOnRydWUsXCJhcmlkYS53YWtheWFtYS5qcFwiOnRydWUsXCJhcmlkYWdhd2Eud2FrYXlhbWEuanBcIjp0cnVlLFwiZ29iby53YWtheWFtYS5qcFwiOnRydWUsXCJoYXNoaW1vdG8ud2FrYXlhbWEuanBcIjp0cnVlLFwiaGlkYWthLndha2F5YW1hLmpwXCI6dHJ1ZSxcImhpcm9nYXdhLndha2F5YW1hLmpwXCI6dHJ1ZSxcImluYW1pLndha2F5YW1hLmpwXCI6dHJ1ZSxcIml3YWRlLndha2F5YW1hLmpwXCI6dHJ1ZSxcImthaW5hbi53YWtheWFtYS5qcFwiOnRydWUsXCJrYW1pdG9uZGEud2FrYXlhbWEuanBcIjp0cnVlLFwia2F0c3VyYWdpLndha2F5YW1hLmpwXCI6dHJ1ZSxcImtpbWluby53YWtheWFtYS5qcFwiOnRydWUsXCJraW5va2F3YS53YWtheWFtYS5qcFwiOnRydWUsXCJraXRheWFtYS53YWtheWFtYS5qcFwiOnRydWUsXCJrb3lhLndha2F5YW1hLmpwXCI6dHJ1ZSxcImtvemEud2FrYXlhbWEuanBcIjp0cnVlLFwia296YWdhd2Eud2FrYXlhbWEuanBcIjp0cnVlLFwia3Vkb3lhbWEud2FrYXlhbWEuanBcIjp0cnVlLFwia3VzaGltb3RvLndha2F5YW1hLmpwXCI6dHJ1ZSxcIm1paGFtYS53YWtheWFtYS5qcFwiOnRydWUsXCJtaXNhdG8ud2FrYXlhbWEuanBcIjp0cnVlLFwibmFjaGlrYXRzdXVyYS53YWtheWFtYS5qcFwiOnRydWUsXCJzaGluZ3Uud2FrYXlhbWEuanBcIjp0cnVlLFwic2hpcmFoYW1hLndha2F5YW1hLmpwXCI6dHJ1ZSxcInRhaWppLndha2F5YW1hLmpwXCI6dHJ1ZSxcInRhbmFiZS53YWtheWFtYS5qcFwiOnRydWUsXCJ3YWtheWFtYS53YWtheWFtYS5qcFwiOnRydWUsXCJ5dWFzYS53YWtheWFtYS5qcFwiOnRydWUsXCJ5dXJhLndha2F5YW1hLmpwXCI6dHJ1ZSxcImFzYWhpLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcImZ1bmFnYXRhLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcImhpZ2FzaGluZS55YW1hZ2F0YS5qcFwiOnRydWUsXCJpaWRlLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcImthaG9rdS55YW1hZ2F0YS5qcFwiOnRydWUsXCJrYW1pbm95YW1hLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcImthbmV5YW1hLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcImthd2FuaXNoaS55YW1hZ2F0YS5qcFwiOnRydWUsXCJtYW11cm9nYXdhLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcIm1pa2F3YS55YW1hZ2F0YS5qcFwiOnRydWUsXCJtdXJheWFtYS55YW1hZ2F0YS5qcFwiOnRydWUsXCJuYWdhaS55YW1hZ2F0YS5qcFwiOnRydWUsXCJuYWtheWFtYS55YW1hZ2F0YS5qcFwiOnRydWUsXCJuYW55by55YW1hZ2F0YS5qcFwiOnRydWUsXCJuaXNoaWthd2EueWFtYWdhdGEuanBcIjp0cnVlLFwib2JhbmF6YXdhLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcIm9lLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcIm9ndW5pLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcIm9oa3VyYS55YW1hZ2F0YS5qcFwiOnRydWUsXCJvaXNoaWRhLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcInNhZ2FlLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcInNha2F0YS55YW1hZ2F0YS5qcFwiOnRydWUsXCJzYWtlZ2F3YS55YW1hZ2F0YS5qcFwiOnRydWUsXCJzaGluam8ueWFtYWdhdGEuanBcIjp0cnVlLFwic2hpcmF0YWthLnlhbWFnYXRhLmpwXCI6dHJ1ZSxcInNob25haS55YW1hZ2F0YS5qcFwiOnRydWUsXCJ0YWthaGF0YS55YW1hZ2F0YS5qcFwiOnRydWUsXCJ0ZW5kby55YW1hZ2F0YS5qcFwiOnRydWUsXCJ0b3phd2EueWFtYWdhdGEuanBcIjp0cnVlLFwidHN1cnVva2EueWFtYWdhdGEuanBcIjp0cnVlLFwieWFtYWdhdGEueWFtYWdhdGEuanBcIjp0cnVlLFwieWFtYW5vYmUueWFtYWdhdGEuanBcIjp0cnVlLFwieW9uZXphd2EueWFtYWdhdGEuanBcIjp0cnVlLFwieXV6YS55YW1hZ2F0YS5qcFwiOnRydWUsXCJhYnUueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcImhhZ2kueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcImhpa2FyaS55YW1hZ3VjaGkuanBcIjp0cnVlLFwiaG9mdS55YW1hZ3VjaGkuanBcIjp0cnVlLFwiaXdha3VuaS55YW1hZ3VjaGkuanBcIjp0cnVlLFwia3VkYW1hdHN1LnlhbWFndWNoaS5qcFwiOnRydWUsXCJtaXRvdS55YW1hZ3VjaGkuanBcIjp0cnVlLFwibmFnYXRvLnlhbWFndWNoaS5qcFwiOnRydWUsXCJvc2hpbWEueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcInNoaW1vbm9zZWtpLnlhbWFndWNoaS5qcFwiOnRydWUsXCJzaHVuYW4ueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcInRhYnVzZS55YW1hZ3VjaGkuanBcIjp0cnVlLFwidG9rdXlhbWEueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcInRveW90YS55YW1hZ3VjaGkuanBcIjp0cnVlLFwidWJlLnlhbWFndWNoaS5qcFwiOnRydWUsXCJ5dXUueWFtYWd1Y2hpLmpwXCI6dHJ1ZSxcImNodW8ueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcImRvc2hpLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJmdWVmdWtpLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJmdWppa2F3YS55YW1hbmFzaGkuanBcIjp0cnVlLFwiZnVqaWthd2FndWNoaWtvLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJmdWppeW9zaGlkYS55YW1hbmFzaGkuanBcIjp0cnVlLFwiaGF5YWthd2EueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcImhva3V0by55YW1hbmFzaGkuanBcIjp0cnVlLFwiaWNoaWthd2FtaXNhdG8ueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcImthaS55YW1hbmFzaGkuanBcIjp0cnVlLFwia29mdS55YW1hbmFzaGkuanBcIjp0cnVlLFwia29zaHUueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcImtvc3VnZS55YW1hbmFzaGkuanBcIjp0cnVlLFwibWluYW1pLWFscHMueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcIm1pbm9idS55YW1hbmFzaGkuanBcIjp0cnVlLFwibmFrYW1pY2hpLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJuYW5idS55YW1hbmFzaGkuanBcIjp0cnVlLFwibmFydXNhd2EueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcIm5pcmFzYWtpLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJuaXNoaWthdHN1cmEueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcIm9zaGluby55YW1hbmFzaGkuanBcIjp0cnVlLFwib3RzdWtpLnlhbWFuYXNoaS5qcFwiOnRydWUsXCJzaG93YS55YW1hbmFzaGkuanBcIjp0cnVlLFwidGFiYXlhbWEueWFtYW5hc2hpLmpwXCI6dHJ1ZSxcInRzdXJ1LnlhbWFuYXNoaS5qcFwiOnRydWUsXCJ1ZW5vaGFyYS55YW1hbmFzaGkuanBcIjp0cnVlLFwieWFtYW5ha2Frby55YW1hbmFzaGkuanBcIjp0cnVlLFwieWFtYW5hc2hpLnlhbWFuYXNoaS5qcFwiOnRydWUsXCIqLmtlXCI6dHJ1ZSxcImtnXCI6dHJ1ZSxcIm9yZy5rZ1wiOnRydWUsXCJuZXQua2dcIjp0cnVlLFwiY29tLmtnXCI6dHJ1ZSxcImVkdS5rZ1wiOnRydWUsXCJnb3Yua2dcIjp0cnVlLFwibWlsLmtnXCI6dHJ1ZSxcIioua2hcIjp0cnVlLFwia2lcIjp0cnVlLFwiZWR1LmtpXCI6dHJ1ZSxcImJpei5raVwiOnRydWUsXCJuZXQua2lcIjp0cnVlLFwib3JnLmtpXCI6dHJ1ZSxcImdvdi5raVwiOnRydWUsXCJpbmZvLmtpXCI6dHJ1ZSxcImNvbS5raVwiOnRydWUsXCJrbVwiOnRydWUsXCJvcmcua21cIjp0cnVlLFwibm9tLmttXCI6dHJ1ZSxcImdvdi5rbVwiOnRydWUsXCJwcmQua21cIjp0cnVlLFwidG0ua21cIjp0cnVlLFwiZWR1LmttXCI6dHJ1ZSxcIm1pbC5rbVwiOnRydWUsXCJhc3Mua21cIjp0cnVlLFwiY29tLmttXCI6dHJ1ZSxcImNvb3Aua21cIjp0cnVlLFwiYXNzby5rbVwiOnRydWUsXCJwcmVzc2Uua21cIjp0cnVlLFwibWVkZWNpbi5rbVwiOnRydWUsXCJub3RhaXJlcy5rbVwiOnRydWUsXCJwaGFybWFjaWVucy5rbVwiOnRydWUsXCJ2ZXRlcmluYWlyZS5rbVwiOnRydWUsXCJnb3V2LmttXCI6dHJ1ZSxcImtuXCI6dHJ1ZSxcIm5ldC5rblwiOnRydWUsXCJvcmcua25cIjp0cnVlLFwiZWR1LmtuXCI6dHJ1ZSxcImdvdi5rblwiOnRydWUsXCJrcFwiOnRydWUsXCJjb20ua3BcIjp0cnVlLFwiZWR1LmtwXCI6dHJ1ZSxcImdvdi5rcFwiOnRydWUsXCJvcmcua3BcIjp0cnVlLFwicmVwLmtwXCI6dHJ1ZSxcInRyYS5rcFwiOnRydWUsXCJrclwiOnRydWUsXCJhYy5rclwiOnRydWUsXCJjby5rclwiOnRydWUsXCJlcy5rclwiOnRydWUsXCJnby5rclwiOnRydWUsXCJocy5rclwiOnRydWUsXCJrZy5rclwiOnRydWUsXCJtaWwua3JcIjp0cnVlLFwibXMua3JcIjp0cnVlLFwibmUua3JcIjp0cnVlLFwib3Iua3JcIjp0cnVlLFwicGUua3JcIjp0cnVlLFwicmUua3JcIjp0cnVlLFwic2Mua3JcIjp0cnVlLFwiYnVzYW4ua3JcIjp0cnVlLFwiY2h1bmdidWsua3JcIjp0cnVlLFwiY2h1bmduYW0ua3JcIjp0cnVlLFwiZGFlZ3Uua3JcIjp0cnVlLFwiZGFlamVvbi5rclwiOnRydWUsXCJnYW5nd29uLmtyXCI6dHJ1ZSxcImd3YW5nanUua3JcIjp0cnVlLFwiZ3llb25nYnVrLmtyXCI6dHJ1ZSxcImd5ZW9uZ2dpLmtyXCI6dHJ1ZSxcImd5ZW9uZ25hbS5rclwiOnRydWUsXCJpbmNoZW9uLmtyXCI6dHJ1ZSxcImplanUua3JcIjp0cnVlLFwiamVvbmJ1ay5rclwiOnRydWUsXCJqZW9ubmFtLmtyXCI6dHJ1ZSxcInNlb3VsLmtyXCI6dHJ1ZSxcInVsc2FuLmtyXCI6dHJ1ZSxcIioua3dcIjp0cnVlLFwia3lcIjp0cnVlLFwiZWR1Lmt5XCI6dHJ1ZSxcImdvdi5reVwiOnRydWUsXCJjb20ua3lcIjp0cnVlLFwib3JnLmt5XCI6dHJ1ZSxcIm5ldC5reVwiOnRydWUsXCJrelwiOnRydWUsXCJvcmcua3pcIjp0cnVlLFwiZWR1Lmt6XCI6dHJ1ZSxcIm5ldC5relwiOnRydWUsXCJnb3Yua3pcIjp0cnVlLFwibWlsLmt6XCI6dHJ1ZSxcImNvbS5relwiOnRydWUsXCJsYVwiOnRydWUsXCJpbnQubGFcIjp0cnVlLFwibmV0LmxhXCI6dHJ1ZSxcImluZm8ubGFcIjp0cnVlLFwiZWR1LmxhXCI6dHJ1ZSxcImdvdi5sYVwiOnRydWUsXCJwZXIubGFcIjp0cnVlLFwiY29tLmxhXCI6dHJ1ZSxcIm9yZy5sYVwiOnRydWUsXCJsYlwiOnRydWUsXCJjb20ubGJcIjp0cnVlLFwiZWR1LmxiXCI6dHJ1ZSxcImdvdi5sYlwiOnRydWUsXCJuZXQubGJcIjp0cnVlLFwib3JnLmxiXCI6dHJ1ZSxcImxjXCI6dHJ1ZSxcImNvbS5sY1wiOnRydWUsXCJuZXQubGNcIjp0cnVlLFwiY28ubGNcIjp0cnVlLFwib3JnLmxjXCI6dHJ1ZSxcImVkdS5sY1wiOnRydWUsXCJnb3YubGNcIjp0cnVlLFwibGlcIjp0cnVlLFwibGtcIjp0cnVlLFwiZ292LmxrXCI6dHJ1ZSxcInNjaC5sa1wiOnRydWUsXCJuZXQubGtcIjp0cnVlLFwiaW50LmxrXCI6dHJ1ZSxcImNvbS5sa1wiOnRydWUsXCJvcmcubGtcIjp0cnVlLFwiZWR1LmxrXCI6dHJ1ZSxcIm5nby5sa1wiOnRydWUsXCJzb2MubGtcIjp0cnVlLFwid2ViLmxrXCI6dHJ1ZSxcImx0ZC5sa1wiOnRydWUsXCJhc3NuLmxrXCI6dHJ1ZSxcImdycC5sa1wiOnRydWUsXCJob3RlbC5sa1wiOnRydWUsXCJhYy5sa1wiOnRydWUsXCJsclwiOnRydWUsXCJjb20ubHJcIjp0cnVlLFwiZWR1LmxyXCI6dHJ1ZSxcImdvdi5sclwiOnRydWUsXCJvcmcubHJcIjp0cnVlLFwibmV0LmxyXCI6dHJ1ZSxcImxzXCI6dHJ1ZSxcImNvLmxzXCI6dHJ1ZSxcIm9yZy5sc1wiOnRydWUsXCJsdFwiOnRydWUsXCJnb3YubHRcIjp0cnVlLFwibHVcIjp0cnVlLFwibHZcIjp0cnVlLFwiY29tLmx2XCI6dHJ1ZSxcImVkdS5sdlwiOnRydWUsXCJnb3YubHZcIjp0cnVlLFwib3JnLmx2XCI6dHJ1ZSxcIm1pbC5sdlwiOnRydWUsXCJpZC5sdlwiOnRydWUsXCJuZXQubHZcIjp0cnVlLFwiYXNuLmx2XCI6dHJ1ZSxcImNvbmYubHZcIjp0cnVlLFwibHlcIjp0cnVlLFwiY29tLmx5XCI6dHJ1ZSxcIm5ldC5seVwiOnRydWUsXCJnb3YubHlcIjp0cnVlLFwicGxjLmx5XCI6dHJ1ZSxcImVkdS5seVwiOnRydWUsXCJzY2gubHlcIjp0cnVlLFwibWVkLmx5XCI6dHJ1ZSxcIm9yZy5seVwiOnRydWUsXCJpZC5seVwiOnRydWUsXCJtYVwiOnRydWUsXCJjby5tYVwiOnRydWUsXCJuZXQubWFcIjp0cnVlLFwiZ292Lm1hXCI6dHJ1ZSxcIm9yZy5tYVwiOnRydWUsXCJhYy5tYVwiOnRydWUsXCJwcmVzcy5tYVwiOnRydWUsXCJtY1wiOnRydWUsXCJ0bS5tY1wiOnRydWUsXCJhc3NvLm1jXCI6dHJ1ZSxcIm1kXCI6dHJ1ZSxcIm1lXCI6dHJ1ZSxcImNvLm1lXCI6dHJ1ZSxcIm5ldC5tZVwiOnRydWUsXCJvcmcubWVcIjp0cnVlLFwiZWR1Lm1lXCI6dHJ1ZSxcImFjLm1lXCI6dHJ1ZSxcImdvdi5tZVwiOnRydWUsXCJpdHMubWVcIjp0cnVlLFwicHJpdi5tZVwiOnRydWUsXCJtZ1wiOnRydWUsXCJvcmcubWdcIjp0cnVlLFwibm9tLm1nXCI6dHJ1ZSxcImdvdi5tZ1wiOnRydWUsXCJwcmQubWdcIjp0cnVlLFwidG0ubWdcIjp0cnVlLFwiZWR1Lm1nXCI6dHJ1ZSxcIm1pbC5tZ1wiOnRydWUsXCJjb20ubWdcIjp0cnVlLFwiY28ubWdcIjp0cnVlLFwibWhcIjp0cnVlLFwibWlsXCI6dHJ1ZSxcIm1rXCI6dHJ1ZSxcImNvbS5ta1wiOnRydWUsXCJvcmcubWtcIjp0cnVlLFwibmV0Lm1rXCI6dHJ1ZSxcImVkdS5ta1wiOnRydWUsXCJnb3YubWtcIjp0cnVlLFwiaW5mLm1rXCI6dHJ1ZSxcIm5hbWUubWtcIjp0cnVlLFwibWxcIjp0cnVlLFwiY29tLm1sXCI6dHJ1ZSxcImVkdS5tbFwiOnRydWUsXCJnb3V2Lm1sXCI6dHJ1ZSxcImdvdi5tbFwiOnRydWUsXCJuZXQubWxcIjp0cnVlLFwib3JnLm1sXCI6dHJ1ZSxcInByZXNzZS5tbFwiOnRydWUsXCIqLm1tXCI6dHJ1ZSxcIm1uXCI6dHJ1ZSxcImdvdi5tblwiOnRydWUsXCJlZHUubW5cIjp0cnVlLFwib3JnLm1uXCI6dHJ1ZSxcIm1vXCI6dHJ1ZSxcImNvbS5tb1wiOnRydWUsXCJuZXQubW9cIjp0cnVlLFwib3JnLm1vXCI6dHJ1ZSxcImVkdS5tb1wiOnRydWUsXCJnb3YubW9cIjp0cnVlLFwibW9iaVwiOnRydWUsXCJtcFwiOnRydWUsXCJtcVwiOnRydWUsXCJtclwiOnRydWUsXCJnb3YubXJcIjp0cnVlLFwibXNcIjp0cnVlLFwiY29tLm1zXCI6dHJ1ZSxcImVkdS5tc1wiOnRydWUsXCJnb3YubXNcIjp0cnVlLFwibmV0Lm1zXCI6dHJ1ZSxcIm9yZy5tc1wiOnRydWUsXCJtdFwiOnRydWUsXCJjb20ubXRcIjp0cnVlLFwiZWR1Lm10XCI6dHJ1ZSxcIm5ldC5tdFwiOnRydWUsXCJvcmcubXRcIjp0cnVlLFwibXVcIjp0cnVlLFwiY29tLm11XCI6dHJ1ZSxcIm5ldC5tdVwiOnRydWUsXCJvcmcubXVcIjp0cnVlLFwiZ292Lm11XCI6dHJ1ZSxcImFjLm11XCI6dHJ1ZSxcImNvLm11XCI6dHJ1ZSxcIm9yLm11XCI6dHJ1ZSxcIm11c2V1bVwiOnRydWUsXCJhY2FkZW15Lm11c2V1bVwiOnRydWUsXCJhZ3JpY3VsdHVyZS5tdXNldW1cIjp0cnVlLFwiYWlyLm11c2V1bVwiOnRydWUsXCJhaXJndWFyZC5tdXNldW1cIjp0cnVlLFwiYWxhYmFtYS5tdXNldW1cIjp0cnVlLFwiYWxhc2thLm11c2V1bVwiOnRydWUsXCJhbWJlci5tdXNldW1cIjp0cnVlLFwiYW1idWxhbmNlLm11c2V1bVwiOnRydWUsXCJhbWVyaWNhbi5tdXNldW1cIjp0cnVlLFwiYW1lcmljYW5hLm11c2V1bVwiOnRydWUsXCJhbWVyaWNhbmFudGlxdWVzLm11c2V1bVwiOnRydWUsXCJhbWVyaWNhbmFydC5tdXNldW1cIjp0cnVlLFwiYW1zdGVyZGFtLm11c2V1bVwiOnRydWUsXCJhbmQubXVzZXVtXCI6dHJ1ZSxcImFubmVmcmFuay5tdXNldW1cIjp0cnVlLFwiYW50aHJvLm11c2V1bVwiOnRydWUsXCJhbnRocm9wb2xvZ3kubXVzZXVtXCI6dHJ1ZSxcImFudGlxdWVzLm11c2V1bVwiOnRydWUsXCJhcXVhcml1bS5tdXNldW1cIjp0cnVlLFwiYXJib3JldHVtLm11c2V1bVwiOnRydWUsXCJhcmNoYWVvbG9naWNhbC5tdXNldW1cIjp0cnVlLFwiYXJjaGFlb2xvZ3kubXVzZXVtXCI6dHJ1ZSxcImFyY2hpdGVjdHVyZS5tdXNldW1cIjp0cnVlLFwiYXJ0Lm11c2V1bVwiOnRydWUsXCJhcnRhbmRkZXNpZ24ubXVzZXVtXCI6dHJ1ZSxcImFydGNlbnRlci5tdXNldW1cIjp0cnVlLFwiYXJ0ZGVjby5tdXNldW1cIjp0cnVlLFwiYXJ0ZWR1Y2F0aW9uLm11c2V1bVwiOnRydWUsXCJhcnRnYWxsZXJ5Lm11c2V1bVwiOnRydWUsXCJhcnRzLm11c2V1bVwiOnRydWUsXCJhcnRzYW5kY3JhZnRzLm11c2V1bVwiOnRydWUsXCJhc21hdGFydC5tdXNldW1cIjp0cnVlLFwiYXNzYXNzaW5hdGlvbi5tdXNldW1cIjp0cnVlLFwiYXNzaXNpLm11c2V1bVwiOnRydWUsXCJhc3NvY2lhdGlvbi5tdXNldW1cIjp0cnVlLFwiYXN0cm9ub215Lm11c2V1bVwiOnRydWUsXCJhdGxhbnRhLm11c2V1bVwiOnRydWUsXCJhdXN0aW4ubXVzZXVtXCI6dHJ1ZSxcImF1c3RyYWxpYS5tdXNldW1cIjp0cnVlLFwiYXV0b21vdGl2ZS5tdXNldW1cIjp0cnVlLFwiYXZpYXRpb24ubXVzZXVtXCI6dHJ1ZSxcImF4aXMubXVzZXVtXCI6dHJ1ZSxcImJhZGFqb3oubXVzZXVtXCI6dHJ1ZSxcImJhZ2hkYWQubXVzZXVtXCI6dHJ1ZSxcImJhaG4ubXVzZXVtXCI6dHJ1ZSxcImJhbGUubXVzZXVtXCI6dHJ1ZSxcImJhbHRpbW9yZS5tdXNldW1cIjp0cnVlLFwiYmFyY2Vsb25hLm11c2V1bVwiOnRydWUsXCJiYXNlYmFsbC5tdXNldW1cIjp0cnVlLFwiYmFzZWwubXVzZXVtXCI6dHJ1ZSxcImJhdGhzLm11c2V1bVwiOnRydWUsXCJiYXVlcm4ubXVzZXVtXCI6dHJ1ZSxcImJlYXV4YXJ0cy5tdXNldW1cIjp0cnVlLFwiYmVlbGRlbmdlbHVpZC5tdXNldW1cIjp0cnVlLFwiYmVsbGV2dWUubXVzZXVtXCI6dHJ1ZSxcImJlcmdiYXUubXVzZXVtXCI6dHJ1ZSxcImJlcmtlbGV5Lm11c2V1bVwiOnRydWUsXCJiZXJsaW4ubXVzZXVtXCI6dHJ1ZSxcImJlcm4ubXVzZXVtXCI6dHJ1ZSxcImJpYmxlLm11c2V1bVwiOnRydWUsXCJiaWxiYW8ubXVzZXVtXCI6dHJ1ZSxcImJpbGwubXVzZXVtXCI6dHJ1ZSxcImJpcmRhcnQubXVzZXVtXCI6dHJ1ZSxcImJpcnRocGxhY2UubXVzZXVtXCI6dHJ1ZSxcImJvbm4ubXVzZXVtXCI6dHJ1ZSxcImJvc3Rvbi5tdXNldW1cIjp0cnVlLFwiYm90YW5pY2FsLm11c2V1bVwiOnRydWUsXCJib3RhbmljYWxnYXJkZW4ubXVzZXVtXCI6dHJ1ZSxcImJvdGFuaWNnYXJkZW4ubXVzZXVtXCI6dHJ1ZSxcImJvdGFueS5tdXNldW1cIjp0cnVlLFwiYnJhbmR5d2luZXZhbGxleS5tdXNldW1cIjp0cnVlLFwiYnJhc2lsLm11c2V1bVwiOnRydWUsXCJicmlzdG9sLm11c2V1bVwiOnRydWUsXCJicml0aXNoLm11c2V1bVwiOnRydWUsXCJicml0aXNoY29sdW1iaWEubXVzZXVtXCI6dHJ1ZSxcImJyb2FkY2FzdC5tdXNldW1cIjp0cnVlLFwiYnJ1bmVsLm11c2V1bVwiOnRydWUsXCJicnVzc2VsLm11c2V1bVwiOnRydWUsXCJicnVzc2Vscy5tdXNldW1cIjp0cnVlLFwiYnJ1eGVsbGVzLm11c2V1bVwiOnRydWUsXCJidWlsZGluZy5tdXNldW1cIjp0cnVlLFwiYnVyZ2hvZi5tdXNldW1cIjp0cnVlLFwiYnVzLm11c2V1bVwiOnRydWUsXCJidXNoZXkubXVzZXVtXCI6dHJ1ZSxcImNhZGFxdWVzLm11c2V1bVwiOnRydWUsXCJjYWxpZm9ybmlhLm11c2V1bVwiOnRydWUsXCJjYW1icmlkZ2UubXVzZXVtXCI6dHJ1ZSxcImNhbi5tdXNldW1cIjp0cnVlLFwiY2FuYWRhLm11c2V1bVwiOnRydWUsXCJjYXBlYnJldG9uLm11c2V1bVwiOnRydWUsXCJjYXJyaWVyLm11c2V1bVwiOnRydWUsXCJjYXJ0b29uYXJ0Lm11c2V1bVwiOnRydWUsXCJjYXNhZGVsYW1vbmVkYS5tdXNldW1cIjp0cnVlLFwiY2FzdGxlLm11c2V1bVwiOnRydWUsXCJjYXN0cmVzLm11c2V1bVwiOnRydWUsXCJjZWx0aWMubXVzZXVtXCI6dHJ1ZSxcImNlbnRlci5tdXNldW1cIjp0cnVlLFwiY2hhdHRhbm9vZ2EubXVzZXVtXCI6dHJ1ZSxcImNoZWx0ZW5oYW0ubXVzZXVtXCI6dHJ1ZSxcImNoZXNhcGVha2ViYXkubXVzZXVtXCI6dHJ1ZSxcImNoaWNhZ28ubXVzZXVtXCI6dHJ1ZSxcImNoaWxkcmVuLm11c2V1bVwiOnRydWUsXCJjaGlsZHJlbnMubXVzZXVtXCI6dHJ1ZSxcImNoaWxkcmVuc2dhcmRlbi5tdXNldW1cIjp0cnVlLFwiY2hpcm9wcmFjdGljLm11c2V1bVwiOnRydWUsXCJjaG9jb2xhdGUubXVzZXVtXCI6dHJ1ZSxcImNocmlzdGlhbnNidXJnLm11c2V1bVwiOnRydWUsXCJjaW5jaW5uYXRpLm11c2V1bVwiOnRydWUsXCJjaW5lbWEubXVzZXVtXCI6dHJ1ZSxcImNpcmN1cy5tdXNldW1cIjp0cnVlLFwiY2l2aWxpc2F0aW9uLm11c2V1bVwiOnRydWUsXCJjaXZpbGl6YXRpb24ubXVzZXVtXCI6dHJ1ZSxcImNpdmlsd2FyLm11c2V1bVwiOnRydWUsXCJjbGludG9uLm11c2V1bVwiOnRydWUsXCJjbG9jay5tdXNldW1cIjp0cnVlLFwiY29hbC5tdXNldW1cIjp0cnVlLFwiY29hc3RhbGRlZmVuY2UubXVzZXVtXCI6dHJ1ZSxcImNvZHkubXVzZXVtXCI6dHJ1ZSxcImNvbGR3YXIubXVzZXVtXCI6dHJ1ZSxcImNvbGxlY3Rpb24ubXVzZXVtXCI6dHJ1ZSxcImNvbG9uaWFsd2lsbGlhbXNidXJnLm11c2V1bVwiOnRydWUsXCJjb2xvcmFkb3BsYXRlYXUubXVzZXVtXCI6dHJ1ZSxcImNvbHVtYmlhLm11c2V1bVwiOnRydWUsXCJjb2x1bWJ1cy5tdXNldW1cIjp0cnVlLFwiY29tbXVuaWNhdGlvbi5tdXNldW1cIjp0cnVlLFwiY29tbXVuaWNhdGlvbnMubXVzZXVtXCI6dHJ1ZSxcImNvbW11bml0eS5tdXNldW1cIjp0cnVlLFwiY29tcHV0ZXIubXVzZXVtXCI6dHJ1ZSxcImNvbXB1dGVyaGlzdG9yeS5tdXNldW1cIjp0cnVlLFwieG4tLWNvbXVuaWNhZXMtdjZhMm8ubXVzZXVtXCI6dHJ1ZSxcImNvbnRlbXBvcmFyeS5tdXNldW1cIjp0cnVlLFwiY29udGVtcG9yYXJ5YXJ0Lm11c2V1bVwiOnRydWUsXCJjb252ZW50Lm11c2V1bVwiOnRydWUsXCJjb3BlbmhhZ2VuLm11c2V1bVwiOnRydWUsXCJjb3Jwb3JhdGlvbi5tdXNldW1cIjp0cnVlLFwieG4tLWNvcnJlaW9zLWUtdGVsZWNvbXVuaWNhZXMtZ2hjMjlhLm11c2V1bVwiOnRydWUsXCJjb3J2ZXR0ZS5tdXNldW1cIjp0cnVlLFwiY29zdHVtZS5tdXNldW1cIjp0cnVlLFwiY291bnRyeWVzdGF0ZS5tdXNldW1cIjp0cnVlLFwiY291bnR5Lm11c2V1bVwiOnRydWUsXCJjcmFmdHMubXVzZXVtXCI6dHJ1ZSxcImNyYW5icm9vay5tdXNldW1cIjp0cnVlLFwiY3JlYXRpb24ubXVzZXVtXCI6dHJ1ZSxcImN1bHR1cmFsLm11c2V1bVwiOnRydWUsXCJjdWx0dXJhbGNlbnRlci5tdXNldW1cIjp0cnVlLFwiY3VsdHVyZS5tdXNldW1cIjp0cnVlLFwiY3liZXIubXVzZXVtXCI6dHJ1ZSxcImN5bXJ1Lm11c2V1bVwiOnRydWUsXCJkYWxpLm11c2V1bVwiOnRydWUsXCJkYWxsYXMubXVzZXVtXCI6dHJ1ZSxcImRhdGFiYXNlLm11c2V1bVwiOnRydWUsXCJkZHIubXVzZXVtXCI6dHJ1ZSxcImRlY29yYXRpdmVhcnRzLm11c2V1bVwiOnRydWUsXCJkZWxhd2FyZS5tdXNldW1cIjp0cnVlLFwiZGVsbWVuaG9yc3QubXVzZXVtXCI6dHJ1ZSxcImRlbm1hcmsubXVzZXVtXCI6dHJ1ZSxcImRlcG90Lm11c2V1bVwiOnRydWUsXCJkZXNpZ24ubXVzZXVtXCI6dHJ1ZSxcImRldHJvaXQubXVzZXVtXCI6dHJ1ZSxcImRpbm9zYXVyLm11c2V1bVwiOnRydWUsXCJkaXNjb3ZlcnkubXVzZXVtXCI6dHJ1ZSxcImRvbGxzLm11c2V1bVwiOnRydWUsXCJkb25vc3RpYS5tdXNldW1cIjp0cnVlLFwiZHVyaGFtLm11c2V1bVwiOnRydWUsXCJlYXN0YWZyaWNhLm11c2V1bVwiOnRydWUsXCJlYXN0Y29hc3QubXVzZXVtXCI6dHJ1ZSxcImVkdWNhdGlvbi5tdXNldW1cIjp0cnVlLFwiZWR1Y2F0aW9uYWwubXVzZXVtXCI6dHJ1ZSxcImVneXB0aWFuLm11c2V1bVwiOnRydWUsXCJlaXNlbmJhaG4ubXVzZXVtXCI6dHJ1ZSxcImVsYnVyZy5tdXNldW1cIjp0cnVlLFwiZWx2ZW5kcmVsbC5tdXNldW1cIjp0cnVlLFwiZW1icm9pZGVyeS5tdXNldW1cIjp0cnVlLFwiZW5jeWNsb3BlZGljLm11c2V1bVwiOnRydWUsXCJlbmdsYW5kLm11c2V1bVwiOnRydWUsXCJlbnRvbW9sb2d5Lm11c2V1bVwiOnRydWUsXCJlbnZpcm9ubWVudC5tdXNldW1cIjp0cnVlLFwiZW52aXJvbm1lbnRhbGNvbnNlcnZhdGlvbi5tdXNldW1cIjp0cnVlLFwiZXBpbGVwc3kubXVzZXVtXCI6dHJ1ZSxcImVzc2V4Lm11c2V1bVwiOnRydWUsXCJlc3RhdGUubXVzZXVtXCI6dHJ1ZSxcImV0aG5vbG9neS5tdXNldW1cIjp0cnVlLFwiZXhldGVyLm11c2V1bVwiOnRydWUsXCJleGhpYml0aW9uLm11c2V1bVwiOnRydWUsXCJmYW1pbHkubXVzZXVtXCI6dHJ1ZSxcImZhcm0ubXVzZXVtXCI6dHJ1ZSxcImZhcm1lcXVpcG1lbnQubXVzZXVtXCI6dHJ1ZSxcImZhcm1lcnMubXVzZXVtXCI6dHJ1ZSxcImZhcm1zdGVhZC5tdXNldW1cIjp0cnVlLFwiZmllbGQubXVzZXVtXCI6dHJ1ZSxcImZpZ3VlcmVzLm11c2V1bVwiOnRydWUsXCJmaWxhdGVsaWEubXVzZXVtXCI6dHJ1ZSxcImZpbG0ubXVzZXVtXCI6dHJ1ZSxcImZpbmVhcnQubXVzZXVtXCI6dHJ1ZSxcImZpbmVhcnRzLm11c2V1bVwiOnRydWUsXCJmaW5sYW5kLm11c2V1bVwiOnRydWUsXCJmbGFuZGVycy5tdXNldW1cIjp0cnVlLFwiZmxvcmlkYS5tdXNldW1cIjp0cnVlLFwiZm9yY2UubXVzZXVtXCI6dHJ1ZSxcImZvcnRtaXNzb3VsYS5tdXNldW1cIjp0cnVlLFwiZm9ydHdvcnRoLm11c2V1bVwiOnRydWUsXCJmb3VuZGF0aW9uLm11c2V1bVwiOnRydWUsXCJmcmFuY2Fpc2UubXVzZXVtXCI6dHJ1ZSxcImZyYW5rZnVydC5tdXNldW1cIjp0cnVlLFwiZnJhbnppc2thbmVyLm11c2V1bVwiOnRydWUsXCJmcmVlbWFzb25yeS5tdXNldW1cIjp0cnVlLFwiZnJlaWJ1cmcubXVzZXVtXCI6dHJ1ZSxcImZyaWJvdXJnLm11c2V1bVwiOnRydWUsXCJmcm9nLm11c2V1bVwiOnRydWUsXCJmdW5kYWNpby5tdXNldW1cIjp0cnVlLFwiZnVybml0dXJlLm11c2V1bVwiOnRydWUsXCJnYWxsZXJ5Lm11c2V1bVwiOnRydWUsXCJnYXJkZW4ubXVzZXVtXCI6dHJ1ZSxcImdhdGV3YXkubXVzZXVtXCI6dHJ1ZSxcImdlZWx2aW5jay5tdXNldW1cIjp0cnVlLFwiZ2Vtb2xvZ2ljYWwubXVzZXVtXCI6dHJ1ZSxcImdlb2xvZ3kubXVzZXVtXCI6dHJ1ZSxcImdlb3JnaWEubXVzZXVtXCI6dHJ1ZSxcImdpZXNzZW4ubXVzZXVtXCI6dHJ1ZSxcImdsYXMubXVzZXVtXCI6dHJ1ZSxcImdsYXNzLm11c2V1bVwiOnRydWUsXCJnb3JnZS5tdXNldW1cIjp0cnVlLFwiZ3JhbmRyYXBpZHMubXVzZXVtXCI6dHJ1ZSxcImdyYXoubXVzZXVtXCI6dHJ1ZSxcImd1ZXJuc2V5Lm11c2V1bVwiOnRydWUsXCJoYWxsb2ZmYW1lLm11c2V1bVwiOnRydWUsXCJoYW1idXJnLm11c2V1bVwiOnRydWUsXCJoYW5kc29uLm11c2V1bVwiOnRydWUsXCJoYXJ2ZXN0Y2VsZWJyYXRpb24ubXVzZXVtXCI6dHJ1ZSxcImhhd2FpaS5tdXNldW1cIjp0cnVlLFwiaGVhbHRoLm11c2V1bVwiOnRydWUsXCJoZWltYXR1bmR1aHJlbi5tdXNldW1cIjp0cnVlLFwiaGVsbGFzLm11c2V1bVwiOnRydWUsXCJoZWxzaW5raS5tdXNldW1cIjp0cnVlLFwiaGVtYnlnZHNmb3JidW5kLm11c2V1bVwiOnRydWUsXCJoZXJpdGFnZS5tdXNldW1cIjp0cnVlLFwiaGlzdG9pcmUubXVzZXVtXCI6dHJ1ZSxcImhpc3RvcmljYWwubXVzZXVtXCI6dHJ1ZSxcImhpc3RvcmljYWxzb2NpZXR5Lm11c2V1bVwiOnRydWUsXCJoaXN0b3JpY2hvdXNlcy5tdXNldW1cIjp0cnVlLFwiaGlzdG9yaXNjaC5tdXNldW1cIjp0cnVlLFwiaGlzdG9yaXNjaGVzLm11c2V1bVwiOnRydWUsXCJoaXN0b3J5Lm11c2V1bVwiOnRydWUsXCJoaXN0b3J5b2ZzY2llbmNlLm11c2V1bVwiOnRydWUsXCJob3JvbG9neS5tdXNldW1cIjp0cnVlLFwiaG91c2UubXVzZXVtXCI6dHJ1ZSxcImh1bWFuaXRpZXMubXVzZXVtXCI6dHJ1ZSxcImlsbHVzdHJhdGlvbi5tdXNldW1cIjp0cnVlLFwiaW1hZ2VhbmRzb3VuZC5tdXNldW1cIjp0cnVlLFwiaW5kaWFuLm11c2V1bVwiOnRydWUsXCJpbmRpYW5hLm11c2V1bVwiOnRydWUsXCJpbmRpYW5hcG9saXMubXVzZXVtXCI6dHJ1ZSxcImluZGlhbm1hcmtldC5tdXNldW1cIjp0cnVlLFwiaW50ZWxsaWdlbmNlLm11c2V1bVwiOnRydWUsXCJpbnRlcmFjdGl2ZS5tdXNldW1cIjp0cnVlLFwiaXJhcS5tdXNldW1cIjp0cnVlLFwiaXJvbi5tdXNldW1cIjp0cnVlLFwiaXNsZW9mbWFuLm11c2V1bVwiOnRydWUsXCJqYW1pc29uLm11c2V1bVwiOnRydWUsXCJqZWZmZXJzb24ubXVzZXVtXCI6dHJ1ZSxcImplcnVzYWxlbS5tdXNldW1cIjp0cnVlLFwiamV3ZWxyeS5tdXNldW1cIjp0cnVlLFwiamV3aXNoLm11c2V1bVwiOnRydWUsXCJqZXdpc2hhcnQubXVzZXVtXCI6dHJ1ZSxcImpmay5tdXNldW1cIjp0cnVlLFwiam91cm5hbGlzbS5tdXNldW1cIjp0cnVlLFwianVkYWljYS5tdXNldW1cIjp0cnVlLFwianVkeWdhcmxhbmQubXVzZXVtXCI6dHJ1ZSxcImp1ZWRpc2NoZXMubXVzZXVtXCI6dHJ1ZSxcImp1aWYubXVzZXVtXCI6dHJ1ZSxcImthcmF0ZS5tdXNldW1cIjp0cnVlLFwia2FyaWthdHVyLm11c2V1bVwiOnRydWUsXCJraWRzLm11c2V1bVwiOnRydWUsXCJrb2ViZW5oYXZuLm11c2V1bVwiOnRydWUsXCJrb2Vsbi5tdXNldW1cIjp0cnVlLFwia3Vuc3QubXVzZXVtXCI6dHJ1ZSxcImt1bnN0c2FtbWx1bmcubXVzZXVtXCI6dHJ1ZSxcImt1bnN0dW5kZGVzaWduLm11c2V1bVwiOnRydWUsXCJsYWJvci5tdXNldW1cIjp0cnVlLFwibGFib3VyLm11c2V1bVwiOnRydWUsXCJsYWpvbGxhLm11c2V1bVwiOnRydWUsXCJsYW5jYXNoaXJlLm11c2V1bVwiOnRydWUsXCJsYW5kZXMubXVzZXVtXCI6dHJ1ZSxcImxhbnMubXVzZXVtXCI6dHJ1ZSxcInhuLS1sbnMtcWxhLm11c2V1bVwiOnRydWUsXCJsYXJzc29uLm11c2V1bVwiOnRydWUsXCJsZXdpc21pbGxlci5tdXNldW1cIjp0cnVlLFwibGluY29sbi5tdXNldW1cIjp0cnVlLFwibGluei5tdXNldW1cIjp0cnVlLFwibGl2aW5nLm11c2V1bVwiOnRydWUsXCJsaXZpbmdoaXN0b3J5Lm11c2V1bVwiOnRydWUsXCJsb2NhbGhpc3RvcnkubXVzZXVtXCI6dHJ1ZSxcImxvbmRvbi5tdXNldW1cIjp0cnVlLFwibG9zYW5nZWxlcy5tdXNldW1cIjp0cnVlLFwibG91dnJlLm11c2V1bVwiOnRydWUsXCJsb3lhbGlzdC5tdXNldW1cIjp0cnVlLFwibHVjZXJuZS5tdXNldW1cIjp0cnVlLFwibHV4ZW1ib3VyZy5tdXNldW1cIjp0cnVlLFwibHV6ZXJuLm11c2V1bVwiOnRydWUsXCJtYWQubXVzZXVtXCI6dHJ1ZSxcIm1hZHJpZC5tdXNldW1cIjp0cnVlLFwibWFsbG9yY2EubXVzZXVtXCI6dHJ1ZSxcIm1hbmNoZXN0ZXIubXVzZXVtXCI6dHJ1ZSxcIm1hbnNpb24ubXVzZXVtXCI6dHJ1ZSxcIm1hbnNpb25zLm11c2V1bVwiOnRydWUsXCJtYW54Lm11c2V1bVwiOnRydWUsXCJtYXJidXJnLm11c2V1bVwiOnRydWUsXCJtYXJpdGltZS5tdXNldW1cIjp0cnVlLFwibWFyaXRpbW8ubXVzZXVtXCI6dHJ1ZSxcIm1hcnlsYW5kLm11c2V1bVwiOnRydWUsXCJtYXJ5bGh1cnN0Lm11c2V1bVwiOnRydWUsXCJtZWRpYS5tdXNldW1cIjp0cnVlLFwibWVkaWNhbC5tdXNldW1cIjp0cnVlLFwibWVkaXppbmhpc3RvcmlzY2hlcy5tdXNldW1cIjp0cnVlLFwibWVlcmVzLm11c2V1bVwiOnRydWUsXCJtZW1vcmlhbC5tdXNldW1cIjp0cnVlLFwibWVzYXZlcmRlLm11c2V1bVwiOnRydWUsXCJtaWNoaWdhbi5tdXNldW1cIjp0cnVlLFwibWlkYXRsYW50aWMubXVzZXVtXCI6dHJ1ZSxcIm1pbGl0YXJ5Lm11c2V1bVwiOnRydWUsXCJtaWxsLm11c2V1bVwiOnRydWUsXCJtaW5lcnMubXVzZXVtXCI6dHJ1ZSxcIm1pbmluZy5tdXNldW1cIjp0cnVlLFwibWlubmVzb3RhLm11c2V1bVwiOnRydWUsXCJtaXNzaWxlLm11c2V1bVwiOnRydWUsXCJtaXNzb3VsYS5tdXNldW1cIjp0cnVlLFwibW9kZXJuLm11c2V1bVwiOnRydWUsXCJtb21hLm11c2V1bVwiOnRydWUsXCJtb25leS5tdXNldW1cIjp0cnVlLFwibW9ubW91dGgubXVzZXVtXCI6dHJ1ZSxcIm1vbnRpY2VsbG8ubXVzZXVtXCI6dHJ1ZSxcIm1vbnRyZWFsLm11c2V1bVwiOnRydWUsXCJtb3Njb3cubXVzZXVtXCI6dHJ1ZSxcIm1vdG9yY3ljbGUubXVzZXVtXCI6dHJ1ZSxcIm11ZW5jaGVuLm11c2V1bVwiOnRydWUsXCJtdWVuc3Rlci5tdXNldW1cIjp0cnVlLFwibXVsaG91c2UubXVzZXVtXCI6dHJ1ZSxcIm11bmNpZS5tdXNldW1cIjp0cnVlLFwibXVzZWV0Lm11c2V1bVwiOnRydWUsXCJtdXNldW1jZW50ZXIubXVzZXVtXCI6dHJ1ZSxcIm11c2V1bXZlcmVuaWdpbmcubXVzZXVtXCI6dHJ1ZSxcIm11c2ljLm11c2V1bVwiOnRydWUsXCJuYXRpb25hbC5tdXNldW1cIjp0cnVlLFwibmF0aW9uYWxmaXJlYXJtcy5tdXNldW1cIjp0cnVlLFwibmF0aW9uYWxoZXJpdGFnZS5tdXNldW1cIjp0cnVlLFwibmF0aXZlYW1lcmljYW4ubXVzZXVtXCI6dHJ1ZSxcIm5hdHVyYWxoaXN0b3J5Lm11c2V1bVwiOnRydWUsXCJuYXR1cmFsaGlzdG9yeW11c2V1bS5tdXNldW1cIjp0cnVlLFwibmF0dXJhbHNjaWVuY2VzLm11c2V1bVwiOnRydWUsXCJuYXR1cmUubXVzZXVtXCI6dHJ1ZSxcIm5hdHVyaGlzdG9yaXNjaGVzLm11c2V1bVwiOnRydWUsXCJuYXR1dXJ3ZXRlbnNjaGFwcGVuLm11c2V1bVwiOnRydWUsXCJuYXVtYnVyZy5tdXNldW1cIjp0cnVlLFwibmF2YWwubXVzZXVtXCI6dHJ1ZSxcIm5lYnJhc2thLm11c2V1bVwiOnRydWUsXCJuZXVlcy5tdXNldW1cIjp0cnVlLFwibmV3aGFtcHNoaXJlLm11c2V1bVwiOnRydWUsXCJuZXdqZXJzZXkubXVzZXVtXCI6dHJ1ZSxcIm5ld21leGljby5tdXNldW1cIjp0cnVlLFwibmV3cG9ydC5tdXNldW1cIjp0cnVlLFwibmV3c3BhcGVyLm11c2V1bVwiOnRydWUsXCJuZXd5b3JrLm11c2V1bVwiOnRydWUsXCJuaWVwY2UubXVzZXVtXCI6dHJ1ZSxcIm5vcmZvbGsubXVzZXVtXCI6dHJ1ZSxcIm5vcnRoLm11c2V1bVwiOnRydWUsXCJucncubXVzZXVtXCI6dHJ1ZSxcIm51ZXJuYmVyZy5tdXNldW1cIjp0cnVlLFwibnVyZW1iZXJnLm11c2V1bVwiOnRydWUsXCJueWMubXVzZXVtXCI6dHJ1ZSxcIm55bnkubXVzZXVtXCI6dHJ1ZSxcIm9jZWFub2dyYXBoaWMubXVzZXVtXCI6dHJ1ZSxcIm9jZWFub2dyYXBoaXF1ZS5tdXNldW1cIjp0cnVlLFwib21haGEubXVzZXVtXCI6dHJ1ZSxcIm9ubGluZS5tdXNldW1cIjp0cnVlLFwib250YXJpby5tdXNldW1cIjp0cnVlLFwib3BlbmFpci5tdXNldW1cIjp0cnVlLFwib3JlZ29uLm11c2V1bVwiOnRydWUsXCJvcmVnb250cmFpbC5tdXNldW1cIjp0cnVlLFwib3RhZ28ubXVzZXVtXCI6dHJ1ZSxcIm94Zm9yZC5tdXNldW1cIjp0cnVlLFwicGFjaWZpYy5tdXNldW1cIjp0cnVlLFwicGFkZXJib3JuLm11c2V1bVwiOnRydWUsXCJwYWxhY2UubXVzZXVtXCI6dHJ1ZSxcInBhbGVvLm11c2V1bVwiOnRydWUsXCJwYWxtc3ByaW5ncy5tdXNldW1cIjp0cnVlLFwicGFuYW1hLm11c2V1bVwiOnRydWUsXCJwYXJpcy5tdXNldW1cIjp0cnVlLFwicGFzYWRlbmEubXVzZXVtXCI6dHJ1ZSxcInBoYXJtYWN5Lm11c2V1bVwiOnRydWUsXCJwaGlsYWRlbHBoaWEubXVzZXVtXCI6dHJ1ZSxcInBoaWxhZGVscGhpYWFyZWEubXVzZXVtXCI6dHJ1ZSxcInBoaWxhdGVseS5tdXNldW1cIjp0cnVlLFwicGhvZW5peC5tdXNldW1cIjp0cnVlLFwicGhvdG9ncmFwaHkubXVzZXVtXCI6dHJ1ZSxcInBpbG90cy5tdXNldW1cIjp0cnVlLFwicGl0dHNidXJnaC5tdXNldW1cIjp0cnVlLFwicGxhbmV0YXJpdW0ubXVzZXVtXCI6dHJ1ZSxcInBsYW50YXRpb24ubXVzZXVtXCI6dHJ1ZSxcInBsYW50cy5tdXNldW1cIjp0cnVlLFwicGxhemEubXVzZXVtXCI6dHJ1ZSxcInBvcnRhbC5tdXNldW1cIjp0cnVlLFwicG9ydGxhbmQubXVzZXVtXCI6dHJ1ZSxcInBvcnRsbGlnYXQubXVzZXVtXCI6dHJ1ZSxcInBvc3RzLWFuZC10ZWxlY29tbXVuaWNhdGlvbnMubXVzZXVtXCI6dHJ1ZSxcInByZXNlcnZhdGlvbi5tdXNldW1cIjp0cnVlLFwicHJlc2lkaW8ubXVzZXVtXCI6dHJ1ZSxcInByZXNzLm11c2V1bVwiOnRydWUsXCJwcm9qZWN0Lm11c2V1bVwiOnRydWUsXCJwdWJsaWMubXVzZXVtXCI6dHJ1ZSxcInB1Ym9sLm11c2V1bVwiOnRydWUsXCJxdWViZWMubXVzZXVtXCI6dHJ1ZSxcInJhaWxyb2FkLm11c2V1bVwiOnRydWUsXCJyYWlsd2F5Lm11c2V1bVwiOnRydWUsXCJyZXNlYXJjaC5tdXNldW1cIjp0cnVlLFwicmVzaXN0YW5jZS5tdXNldW1cIjp0cnVlLFwicmlvZGVqYW5laXJvLm11c2V1bVwiOnRydWUsXCJyb2NoZXN0ZXIubXVzZXVtXCI6dHJ1ZSxcInJvY2thcnQubXVzZXVtXCI6dHJ1ZSxcInJvbWEubXVzZXVtXCI6dHJ1ZSxcInJ1c3NpYS5tdXNldW1cIjp0cnVlLFwic2FpbnRsb3Vpcy5tdXNldW1cIjp0cnVlLFwic2FsZW0ubXVzZXVtXCI6dHJ1ZSxcInNhbHZhZG9yZGFsaS5tdXNldW1cIjp0cnVlLFwic2FsemJ1cmcubXVzZXVtXCI6dHJ1ZSxcInNhbmRpZWdvLm11c2V1bVwiOnRydWUsXCJzYW5mcmFuY2lzY28ubXVzZXVtXCI6dHJ1ZSxcInNhbnRhYmFyYmFyYS5tdXNldW1cIjp0cnVlLFwic2FudGFjcnV6Lm11c2V1bVwiOnRydWUsXCJzYW50YWZlLm11c2V1bVwiOnRydWUsXCJzYXNrYXRjaGV3YW4ubXVzZXVtXCI6dHJ1ZSxcInNhdHgubXVzZXVtXCI6dHJ1ZSxcInNhdmFubmFoZ2EubXVzZXVtXCI6dHJ1ZSxcInNjaGxlc2lzY2hlcy5tdXNldW1cIjp0cnVlLFwic2Nob2VuYnJ1bm4ubXVzZXVtXCI6dHJ1ZSxcInNjaG9rb2xhZGVuLm11c2V1bVwiOnRydWUsXCJzY2hvb2wubXVzZXVtXCI6dHJ1ZSxcInNjaHdlaXoubXVzZXVtXCI6dHJ1ZSxcInNjaWVuY2UubXVzZXVtXCI6dHJ1ZSxcInNjaWVuY2VhbmRoaXN0b3J5Lm11c2V1bVwiOnRydWUsXCJzY2llbmNlYW5kaW5kdXN0cnkubXVzZXVtXCI6dHJ1ZSxcInNjaWVuY2VjZW50ZXIubXVzZXVtXCI6dHJ1ZSxcInNjaWVuY2VjZW50ZXJzLm11c2V1bVwiOnRydWUsXCJzY2llbmNlLWZpY3Rpb24ubXVzZXVtXCI6dHJ1ZSxcInNjaWVuY2VoaXN0b3J5Lm11c2V1bVwiOnRydWUsXCJzY2llbmNlcy5tdXNldW1cIjp0cnVlLFwic2NpZW5jZXNuYXR1cmVsbGVzLm11c2V1bVwiOnRydWUsXCJzY290bGFuZC5tdXNldW1cIjp0cnVlLFwic2VhcG9ydC5tdXNldW1cIjp0cnVlLFwic2V0dGxlbWVudC5tdXNldW1cIjp0cnVlLFwic2V0dGxlcnMubXVzZXVtXCI6dHJ1ZSxcInNoZWxsLm11c2V1bVwiOnRydWUsXCJzaGVyYnJvb2tlLm11c2V1bVwiOnRydWUsXCJzaWJlbmlrLm11c2V1bVwiOnRydWUsXCJzaWxrLm11c2V1bVwiOnRydWUsXCJza2kubXVzZXVtXCI6dHJ1ZSxcInNrb2xlLm11c2V1bVwiOnRydWUsXCJzb2NpZXR5Lm11c2V1bVwiOnRydWUsXCJzb2xvZ25lLm11c2V1bVwiOnRydWUsXCJzb3VuZGFuZHZpc2lvbi5tdXNldW1cIjp0cnVlLFwic291dGhjYXJvbGluYS5tdXNldW1cIjp0cnVlLFwic291dGh3ZXN0Lm11c2V1bVwiOnRydWUsXCJzcGFjZS5tdXNldW1cIjp0cnVlLFwic3B5Lm11c2V1bVwiOnRydWUsXCJzcXVhcmUubXVzZXVtXCI6dHJ1ZSxcInN0YWR0Lm11c2V1bVwiOnRydWUsXCJzdGFsYmFucy5tdXNldW1cIjp0cnVlLFwic3Rhcm5iZXJnLm11c2V1bVwiOnRydWUsXCJzdGF0ZS5tdXNldW1cIjp0cnVlLFwic3RhdGVvZmRlbGF3YXJlLm11c2V1bVwiOnRydWUsXCJzdGF0aW9uLm11c2V1bVwiOnRydWUsXCJzdGVhbS5tdXNldW1cIjp0cnVlLFwic3RlaWVybWFyay5tdXNldW1cIjp0cnVlLFwic3Rqb2huLm11c2V1bVwiOnRydWUsXCJzdG9ja2hvbG0ubXVzZXVtXCI6dHJ1ZSxcInN0cGV0ZXJzYnVyZy5tdXNldW1cIjp0cnVlLFwic3R1dHRnYXJ0Lm11c2V1bVwiOnRydWUsXCJzdWlzc2UubXVzZXVtXCI6dHJ1ZSxcInN1cmdlb25zaGFsbC5tdXNldW1cIjp0cnVlLFwic3VycmV5Lm11c2V1bVwiOnRydWUsXCJzdml6emVyYS5tdXNldW1cIjp0cnVlLFwic3dlZGVuLm11c2V1bVwiOnRydWUsXCJzeWRuZXkubXVzZXVtXCI6dHJ1ZSxcInRhbmsubXVzZXVtXCI6dHJ1ZSxcInRjbS5tdXNldW1cIjp0cnVlLFwidGVjaG5vbG9neS5tdXNldW1cIjp0cnVlLFwidGVsZWtvbW11bmlrYXRpb24ubXVzZXVtXCI6dHJ1ZSxcInRlbGV2aXNpb24ubXVzZXVtXCI6dHJ1ZSxcInRleGFzLm11c2V1bVwiOnRydWUsXCJ0ZXh0aWxlLm11c2V1bVwiOnRydWUsXCJ0aGVhdGVyLm11c2V1bVwiOnRydWUsXCJ0aW1lLm11c2V1bVwiOnRydWUsXCJ0aW1la2VlcGluZy5tdXNldW1cIjp0cnVlLFwidG9wb2xvZ3kubXVzZXVtXCI6dHJ1ZSxcInRvcmluby5tdXNldW1cIjp0cnVlLFwidG91Y2gubXVzZXVtXCI6dHJ1ZSxcInRvd24ubXVzZXVtXCI6dHJ1ZSxcInRyYW5zcG9ydC5tdXNldW1cIjp0cnVlLFwidHJlZS5tdXNldW1cIjp0cnVlLFwidHJvbGxleS5tdXNldW1cIjp0cnVlLFwidHJ1c3QubXVzZXVtXCI6dHJ1ZSxcInRydXN0ZWUubXVzZXVtXCI6dHJ1ZSxcInVocmVuLm11c2V1bVwiOnRydWUsXCJ1bG0ubXVzZXVtXCI6dHJ1ZSxcInVuZGVyc2VhLm11c2V1bVwiOnRydWUsXCJ1bml2ZXJzaXR5Lm11c2V1bVwiOnRydWUsXCJ1c2EubXVzZXVtXCI6dHJ1ZSxcInVzYW50aXF1ZXMubXVzZXVtXCI6dHJ1ZSxcInVzYXJ0cy5tdXNldW1cIjp0cnVlLFwidXNjb3VudHJ5ZXN0YXRlLm11c2V1bVwiOnRydWUsXCJ1c2N1bHR1cmUubXVzZXVtXCI6dHJ1ZSxcInVzZGVjb3JhdGl2ZWFydHMubXVzZXVtXCI6dHJ1ZSxcInVzZ2FyZGVuLm11c2V1bVwiOnRydWUsXCJ1c2hpc3RvcnkubXVzZXVtXCI6dHJ1ZSxcInVzaHVhaWEubXVzZXVtXCI6dHJ1ZSxcInVzbGl2aW5naGlzdG9yeS5tdXNldW1cIjp0cnVlLFwidXRhaC5tdXNldW1cIjp0cnVlLFwidXZpYy5tdXNldW1cIjp0cnVlLFwidmFsbGV5Lm11c2V1bVwiOnRydWUsXCJ2YW50YWEubXVzZXVtXCI6dHJ1ZSxcInZlcnNhaWxsZXMubXVzZXVtXCI6dHJ1ZSxcInZpa2luZy5tdXNldW1cIjp0cnVlLFwidmlsbGFnZS5tdXNldW1cIjp0cnVlLFwidmlyZ2luaWEubXVzZXVtXCI6dHJ1ZSxcInZpcnR1YWwubXVzZXVtXCI6dHJ1ZSxcInZpcnR1ZWwubXVzZXVtXCI6dHJ1ZSxcInZsYWFuZGVyZW4ubXVzZXVtXCI6dHJ1ZSxcInZvbGtlbmt1bmRlLm11c2V1bVwiOnRydWUsXCJ3YWxlcy5tdXNldW1cIjp0cnVlLFwid2FsbG9uaWUubXVzZXVtXCI6dHJ1ZSxcIndhci5tdXNldW1cIjp0cnVlLFwid2FzaGluZ3RvbmRjLm11c2V1bVwiOnRydWUsXCJ3YXRjaGFuZGNsb2NrLm11c2V1bVwiOnRydWUsXCJ3YXRjaC1hbmQtY2xvY2subXVzZXVtXCI6dHJ1ZSxcIndlc3Rlcm4ubXVzZXVtXCI6dHJ1ZSxcIndlc3RmYWxlbi5tdXNldW1cIjp0cnVlLFwid2hhbGluZy5tdXNldW1cIjp0cnVlLFwid2lsZGxpZmUubXVzZXVtXCI6dHJ1ZSxcIndpbGxpYW1zYnVyZy5tdXNldW1cIjp0cnVlLFwid2luZG1pbGwubXVzZXVtXCI6dHJ1ZSxcIndvcmtzaG9wLm11c2V1bVwiOnRydWUsXCJ5b3JrLm11c2V1bVwiOnRydWUsXCJ5b3Jrc2hpcmUubXVzZXVtXCI6dHJ1ZSxcInlvc2VtaXRlLm11c2V1bVwiOnRydWUsXCJ5b3V0aC5tdXNldW1cIjp0cnVlLFwiem9vbG9naWNhbC5tdXNldW1cIjp0cnVlLFwiem9vbG9neS5tdXNldW1cIjp0cnVlLFwieG4tLTlkYmhibGc2ZGkubXVzZXVtXCI6dHJ1ZSxcInhuLS1oMWFlZ2gubXVzZXVtXCI6dHJ1ZSxcIm12XCI6dHJ1ZSxcImFlcm8ubXZcIjp0cnVlLFwiYml6Lm12XCI6dHJ1ZSxcImNvbS5tdlwiOnRydWUsXCJjb29wLm12XCI6dHJ1ZSxcImVkdS5tdlwiOnRydWUsXCJnb3YubXZcIjp0cnVlLFwiaW5mby5tdlwiOnRydWUsXCJpbnQubXZcIjp0cnVlLFwibWlsLm12XCI6dHJ1ZSxcIm11c2V1bS5tdlwiOnRydWUsXCJuYW1lLm12XCI6dHJ1ZSxcIm5ldC5tdlwiOnRydWUsXCJvcmcubXZcIjp0cnVlLFwicHJvLm12XCI6dHJ1ZSxcIm13XCI6dHJ1ZSxcImFjLm13XCI6dHJ1ZSxcImJpei5td1wiOnRydWUsXCJjby5td1wiOnRydWUsXCJjb20ubXdcIjp0cnVlLFwiY29vcC5td1wiOnRydWUsXCJlZHUubXdcIjp0cnVlLFwiZ292Lm13XCI6dHJ1ZSxcImludC5td1wiOnRydWUsXCJtdXNldW0ubXdcIjp0cnVlLFwibmV0Lm13XCI6dHJ1ZSxcIm9yZy5td1wiOnRydWUsXCJteFwiOnRydWUsXCJjb20ubXhcIjp0cnVlLFwib3JnLm14XCI6dHJ1ZSxcImdvYi5teFwiOnRydWUsXCJlZHUubXhcIjp0cnVlLFwibmV0Lm14XCI6dHJ1ZSxcIm15XCI6dHJ1ZSxcImNvbS5teVwiOnRydWUsXCJuZXQubXlcIjp0cnVlLFwib3JnLm15XCI6dHJ1ZSxcImdvdi5teVwiOnRydWUsXCJlZHUubXlcIjp0cnVlLFwibWlsLm15XCI6dHJ1ZSxcIm5hbWUubXlcIjp0cnVlLFwiKi5telwiOnRydWUsXCJ0ZWxlZGF0YS5telwiOmZhbHNlLFwibmFcIjp0cnVlLFwiaW5mby5uYVwiOnRydWUsXCJwcm8ubmFcIjp0cnVlLFwibmFtZS5uYVwiOnRydWUsXCJzY2hvb2wubmFcIjp0cnVlLFwib3IubmFcIjp0cnVlLFwiZHIubmFcIjp0cnVlLFwidXMubmFcIjp0cnVlLFwibXgubmFcIjp0cnVlLFwiY2EubmFcIjp0cnVlLFwiaW4ubmFcIjp0cnVlLFwiY2MubmFcIjp0cnVlLFwidHYubmFcIjp0cnVlLFwid3MubmFcIjp0cnVlLFwibW9iaS5uYVwiOnRydWUsXCJjby5uYVwiOnRydWUsXCJjb20ubmFcIjp0cnVlLFwib3JnLm5hXCI6dHJ1ZSxcIm5hbWVcIjp0cnVlLFwibmNcIjp0cnVlLFwiYXNzby5uY1wiOnRydWUsXCJuZVwiOnRydWUsXCJuZXRcIjp0cnVlLFwibmZcIjp0cnVlLFwiY29tLm5mXCI6dHJ1ZSxcIm5ldC5uZlwiOnRydWUsXCJwZXIubmZcIjp0cnVlLFwicmVjLm5mXCI6dHJ1ZSxcIndlYi5uZlwiOnRydWUsXCJhcnRzLm5mXCI6dHJ1ZSxcImZpcm0ubmZcIjp0cnVlLFwiaW5mby5uZlwiOnRydWUsXCJvdGhlci5uZlwiOnRydWUsXCJzdG9yZS5uZlwiOnRydWUsXCJuZ1wiOnRydWUsXCJjb20ubmdcIjp0cnVlLFwiZWR1Lm5nXCI6dHJ1ZSxcIm5hbWUubmdcIjp0cnVlLFwibmV0Lm5nXCI6dHJ1ZSxcIm9yZy5uZ1wiOnRydWUsXCJzY2gubmdcIjp0cnVlLFwiZ292Lm5nXCI6dHJ1ZSxcIm1pbC5uZ1wiOnRydWUsXCJtb2JpLm5nXCI6dHJ1ZSxcIioubmlcIjp0cnVlLFwibmxcIjp0cnVlLFwiYnYubmxcIjp0cnVlLFwibm9cIjp0cnVlLFwiZmhzLm5vXCI6dHJ1ZSxcInZncy5ub1wiOnRydWUsXCJmeWxrZXNiaWJsLm5vXCI6dHJ1ZSxcImZvbGtlYmlibC5ub1wiOnRydWUsXCJtdXNldW0ubm9cIjp0cnVlLFwiaWRyZXR0Lm5vXCI6dHJ1ZSxcInByaXYubm9cIjp0cnVlLFwibWlsLm5vXCI6dHJ1ZSxcInN0YXQubm9cIjp0cnVlLFwiZGVwLm5vXCI6dHJ1ZSxcImtvbW11bmUubm9cIjp0cnVlLFwiaGVyYWQubm9cIjp0cnVlLFwiYWEubm9cIjp0cnVlLFwiYWgubm9cIjp0cnVlLFwiYnUubm9cIjp0cnVlLFwiZm0ubm9cIjp0cnVlLFwiaGwubm9cIjp0cnVlLFwiaG0ubm9cIjp0cnVlLFwiamFuLW1heWVuLm5vXCI6dHJ1ZSxcIm1yLm5vXCI6dHJ1ZSxcIm5sLm5vXCI6dHJ1ZSxcIm50Lm5vXCI6dHJ1ZSxcIm9mLm5vXCI6dHJ1ZSxcIm9sLm5vXCI6dHJ1ZSxcIm9zbG8ubm9cIjp0cnVlLFwicmwubm9cIjp0cnVlLFwic2Yubm9cIjp0cnVlLFwic3Qubm9cIjp0cnVlLFwic3ZhbGJhcmQubm9cIjp0cnVlLFwidG0ubm9cIjp0cnVlLFwidHIubm9cIjp0cnVlLFwidmEubm9cIjp0cnVlLFwidmYubm9cIjp0cnVlLFwiZ3MuYWEubm9cIjp0cnVlLFwiZ3MuYWgubm9cIjp0cnVlLFwiZ3MuYnUubm9cIjp0cnVlLFwiZ3MuZm0ubm9cIjp0cnVlLFwiZ3MuaGwubm9cIjp0cnVlLFwiZ3MuaG0ubm9cIjp0cnVlLFwiZ3MuamFuLW1heWVuLm5vXCI6dHJ1ZSxcImdzLm1yLm5vXCI6dHJ1ZSxcImdzLm5sLm5vXCI6dHJ1ZSxcImdzLm50Lm5vXCI6dHJ1ZSxcImdzLm9mLm5vXCI6dHJ1ZSxcImdzLm9sLm5vXCI6dHJ1ZSxcImdzLm9zbG8ubm9cIjp0cnVlLFwiZ3Mucmwubm9cIjp0cnVlLFwiZ3Muc2Yubm9cIjp0cnVlLFwiZ3Muc3Qubm9cIjp0cnVlLFwiZ3Muc3ZhbGJhcmQubm9cIjp0cnVlLFwiZ3MudG0ubm9cIjp0cnVlLFwiZ3MudHIubm9cIjp0cnVlLFwiZ3MudmEubm9cIjp0cnVlLFwiZ3MudmYubm9cIjp0cnVlLFwiYWtyZWhhbW4ubm9cIjp0cnVlLFwieG4tLWtyZWhhbW4tZHhhLm5vXCI6dHJ1ZSxcImFsZ2FyZC5ub1wiOnRydWUsXCJ4bi0tbGdyZC1wb2FjLm5vXCI6dHJ1ZSxcImFybmEubm9cIjp0cnVlLFwiYnJ1bXVuZGRhbC5ub1wiOnRydWUsXCJicnluZS5ub1wiOnRydWUsXCJicm9ubm95c3VuZC5ub1wiOnRydWUsXCJ4bi0tYnJubnlzdW5kLW04YWMubm9cIjp0cnVlLFwiZHJvYmFrLm5vXCI6dHJ1ZSxcInhuLS1kcmJhay13dWEubm9cIjp0cnVlLFwiZWdlcnN1bmQubm9cIjp0cnVlLFwiZmV0c3VuZC5ub1wiOnRydWUsXCJmbG9yby5ub1wiOnRydWUsXCJ4bi0tZmxvci1qcmEubm9cIjp0cnVlLFwiZnJlZHJpa3N0YWQubm9cIjp0cnVlLFwiaG9ra3N1bmQubm9cIjp0cnVlLFwiaG9uZWZvc3Mubm9cIjp0cnVlLFwieG4tLWhuZWZvc3MtcTFhLm5vXCI6dHJ1ZSxcImplc3NoZWltLm5vXCI6dHJ1ZSxcImpvcnBlbGFuZC5ub1wiOnRydWUsXCJ4bi0tanJwZWxhbmQtNTRhLm5vXCI6dHJ1ZSxcImtpcmtlbmVzLm5vXCI6dHJ1ZSxcImtvcGVydmlrLm5vXCI6dHJ1ZSxcImtyb2tzdGFkZWx2YS5ub1wiOnRydWUsXCJsYW5nZXZhZy5ub1wiOnRydWUsXCJ4bi0tbGFuZ2V2Zy1qeGEubm9cIjp0cnVlLFwibGVpcnZpay5ub1wiOnRydWUsXCJtam9uZGFsZW4ubm9cIjp0cnVlLFwieG4tLW1qbmRhbGVuLTY0YS5ub1wiOnRydWUsXCJtby1pLXJhbmEubm9cIjp0cnVlLFwibW9zam9lbi5ub1wiOnRydWUsXCJ4bi0tbW9zamVuLWV5YS5ub1wiOnRydWUsXCJuZXNvZGR0YW5nZW4ubm9cIjp0cnVlLFwib3JrYW5nZXIubm9cIjp0cnVlLFwib3NveXJvLm5vXCI6dHJ1ZSxcInhuLS1vc3lyby13dWEubm9cIjp0cnVlLFwicmFob2x0Lm5vXCI6dHJ1ZSxcInhuLS1yaG9sdC1tcmEubm9cIjp0cnVlLFwic2FuZG5lc3Nqb2VuLm5vXCI6dHJ1ZSxcInhuLS1zYW5kbmVzc2plbi1vZ2Iubm9cIjp0cnVlLFwic2tlZHNtb2tvcnNldC5ub1wiOnRydWUsXCJzbGF0dHVtLm5vXCI6dHJ1ZSxcInNwamVsa2F2aWsubm9cIjp0cnVlLFwic3RhdGhlbGxlLm5vXCI6dHJ1ZSxcInN0YXZlcm4ubm9cIjp0cnVlLFwic3Rqb3JkYWxzaGFsc2VuLm5vXCI6dHJ1ZSxcInhuLS1zdGpyZGFsc2hhbHNlbi1zcWIubm9cIjp0cnVlLFwidGFuYW5nZXIubm9cIjp0cnVlLFwidHJhbmJ5Lm5vXCI6dHJ1ZSxcInZvc3NldmFuZ2VuLm5vXCI6dHJ1ZSxcImFmam9yZC5ub1wiOnRydWUsXCJ4bi0tZmpvcmQtbHJhLm5vXCI6dHJ1ZSxcImFnZGVuZXMubm9cIjp0cnVlLFwiYWwubm9cIjp0cnVlLFwieG4tLWwtMWZhLm5vXCI6dHJ1ZSxcImFsZXN1bmQubm9cIjp0cnVlLFwieG4tLWxlc3VuZC1odWEubm9cIjp0cnVlLFwiYWxzdGFoYXVnLm5vXCI6dHJ1ZSxcImFsdGEubm9cIjp0cnVlLFwieG4tLWx0LWxpYWMubm9cIjp0cnVlLFwiYWxhaGVhZGp1Lm5vXCI6dHJ1ZSxcInhuLS1sYWhlYWRqdS03eWEubm9cIjp0cnVlLFwiYWx2ZGFsLm5vXCI6dHJ1ZSxcImFtbGkubm9cIjp0cnVlLFwieG4tLW1saS10bGEubm9cIjp0cnVlLFwiYW1vdC5ub1wiOnRydWUsXCJ4bi0tbW90LXRsYS5ub1wiOnRydWUsXCJhbmRlYnUubm9cIjp0cnVlLFwiYW5kb3kubm9cIjp0cnVlLFwieG4tLWFuZHktaXJhLm5vXCI6dHJ1ZSxcImFuZGFzdW9sby5ub1wiOnRydWUsXCJhcmRhbC5ub1wiOnRydWUsXCJ4bi0tcmRhbC1wb2Eubm9cIjp0cnVlLFwiYXJlbWFyay5ub1wiOnRydWUsXCJhcmVuZGFsLm5vXCI6dHJ1ZSxcInhuLS1zLTFmYS5ub1wiOnRydWUsXCJhc2VyYWwubm9cIjp0cnVlLFwieG4tLXNlcmFsLWxyYS5ub1wiOnRydWUsXCJhc2tlci5ub1wiOnRydWUsXCJhc2tpbS5ub1wiOnRydWUsXCJhc2t2b2xsLm5vXCI6dHJ1ZSxcImFza295Lm5vXCI6dHJ1ZSxcInhuLS1hc2t5LWlyYS5ub1wiOnRydWUsXCJhc25lcy5ub1wiOnRydWUsXCJ4bi0tc25lcy1wb2Eubm9cIjp0cnVlLFwiYXVkbmVkYWxuLm5vXCI6dHJ1ZSxcImF1a3JhLm5vXCI6dHJ1ZSxcImF1cmUubm9cIjp0cnVlLFwiYXVybGFuZC5ub1wiOnRydWUsXCJhdXJza29nLWhvbGFuZC5ub1wiOnRydWUsXCJ4bi0tYXVyc2tvZy1obGFuZC1qbmIubm9cIjp0cnVlLFwiYXVzdGV2b2xsLm5vXCI6dHJ1ZSxcImF1c3RyaGVpbS5ub1wiOnRydWUsXCJhdmVyb3kubm9cIjp0cnVlLFwieG4tLWF2ZXJ5LXl1YS5ub1wiOnRydWUsXCJiYWxlc3RyYW5kLm5vXCI6dHJ1ZSxcImJhbGxhbmdlbi5ub1wiOnRydWUsXCJiYWxhdC5ub1wiOnRydWUsXCJ4bi0tYmx0LWVsYWIubm9cIjp0cnVlLFwiYmFsc2Zqb3JkLm5vXCI6dHJ1ZSxcImJhaGNjYXZ1b3RuYS5ub1wiOnRydWUsXCJ4bi0tYmhjY2F2dW90bmEtazdhLm5vXCI6dHJ1ZSxcImJhbWJsZS5ub1wiOnRydWUsXCJiYXJkdS5ub1wiOnRydWUsXCJiZWFyZHUubm9cIjp0cnVlLFwiYmVpYXJuLm5vXCI6dHJ1ZSxcImJhamRkYXIubm9cIjp0cnVlLFwieG4tLWJqZGRhci1wdGEubm9cIjp0cnVlLFwiYmFpZGFyLm5vXCI6dHJ1ZSxcInhuLS1iaWRyLTVuYWMubm9cIjp0cnVlLFwiYmVyZy5ub1wiOnRydWUsXCJiZXJnZW4ubm9cIjp0cnVlLFwiYmVybGV2YWcubm9cIjp0cnVlLFwieG4tLWJlcmxldmctanhhLm5vXCI6dHJ1ZSxcImJlYXJhbHZhaGtpLm5vXCI6dHJ1ZSxcInhuLS1iZWFyYWx2aGtpLXk0YS5ub1wiOnRydWUsXCJiaW5kYWwubm9cIjp0cnVlLFwiYmlya2VuZXMubm9cIjp0cnVlLFwiYmphcmtveS5ub1wiOnRydWUsXCJ4bi0tYmphcmt5LWZ5YS5ub1wiOnRydWUsXCJiamVya3JlaW0ubm9cIjp0cnVlLFwiYmp1Z24ubm9cIjp0cnVlLFwiYm9kby5ub1wiOnRydWUsXCJ4bi0tYm9kLTJuYS5ub1wiOnRydWUsXCJiYWRhZGRqYS5ub1wiOnRydWUsXCJ4bi0tYmRkZGotbXJhYmQubm9cIjp0cnVlLFwiYnVkZWpqdS5ub1wiOnRydWUsXCJib2tuLm5vXCI6dHJ1ZSxcImJyZW1hbmdlci5ub1wiOnRydWUsXCJicm9ubm95Lm5vXCI6dHJ1ZSxcInhuLS1icm5ueS13dWFjLm5vXCI6dHJ1ZSxcImJ5Z2xhbmQubm9cIjp0cnVlLFwiYnlrbGUubm9cIjp0cnVlLFwiYmFydW0ubm9cIjp0cnVlLFwieG4tLWJydW0tdm9hLm5vXCI6dHJ1ZSxcImJvLnRlbGVtYXJrLm5vXCI6dHJ1ZSxcInhuLS1iLTVnYS50ZWxlbWFyay5ub1wiOnRydWUsXCJiby5ub3JkbGFuZC5ub1wiOnRydWUsXCJ4bi0tYi01Z2Eubm9yZGxhbmQubm9cIjp0cnVlLFwiYmlldmF0Lm5vXCI6dHJ1ZSxcInhuLS1iaWV2dC0wcWEubm9cIjp0cnVlLFwiYm9tbG8ubm9cIjp0cnVlLFwieG4tLWJtbG8tZ3JhLm5vXCI6dHJ1ZSxcImJhdHNmam9yZC5ub1wiOnRydWUsXCJ4bi0tYnRzZmpvcmQtOXphLm5vXCI6dHJ1ZSxcImJhaGNhdnVvdG5hLm5vXCI6dHJ1ZSxcInhuLS1iaGNhdnVvdG5hLXM0YS5ub1wiOnRydWUsXCJkb3ZyZS5ub1wiOnRydWUsXCJkcmFtbWVuLm5vXCI6dHJ1ZSxcImRyYW5nZWRhbC5ub1wiOnRydWUsXCJkeXJveS5ub1wiOnRydWUsXCJ4bi0tZHlyeS1pcmEubm9cIjp0cnVlLFwiZG9ubmEubm9cIjp0cnVlLFwieG4tLWRubmEtZ3JhLm5vXCI6dHJ1ZSxcImVpZC5ub1wiOnRydWUsXCJlaWRmam9yZC5ub1wiOnRydWUsXCJlaWRzYmVyZy5ub1wiOnRydWUsXCJlaWRza29nLm5vXCI6dHJ1ZSxcImVpZHN2b2xsLm5vXCI6dHJ1ZSxcImVpZ2Vyc3VuZC5ub1wiOnRydWUsXCJlbHZlcnVtLm5vXCI6dHJ1ZSxcImVuZWJha2subm9cIjp0cnVlLFwiZW5nZXJkYWwubm9cIjp0cnVlLFwiZXRuZS5ub1wiOnRydWUsXCJldG5lZGFsLm5vXCI6dHJ1ZSxcImV2ZW5lcy5ub1wiOnRydWUsXCJldmVuYXNzaS5ub1wiOnRydWUsXCJ4bi0tZXZlbmktMHFhMDFnYS5ub1wiOnRydWUsXCJldmplLW9nLWhvcm5uZXMubm9cIjp0cnVlLFwiZmFyc3VuZC5ub1wiOnRydWUsXCJmYXVza2Uubm9cIjp0cnVlLFwiZnVvc3Nrby5ub1wiOnRydWUsXCJmdW9pc2t1Lm5vXCI6dHJ1ZSxcImZlZGplLm5vXCI6dHJ1ZSxcImZldC5ub1wiOnRydWUsXCJmaW5ub3kubm9cIjp0cnVlLFwieG4tLWZpbm55LXl1YS5ub1wiOnRydWUsXCJmaXRqYXIubm9cIjp0cnVlLFwiZmphbGVyLm5vXCI6dHJ1ZSxcImZqZWxsLm5vXCI6dHJ1ZSxcImZsYWtzdGFkLm5vXCI6dHJ1ZSxcImZsYXRhbmdlci5ub1wiOnRydWUsXCJmbGVra2Vmam9yZC5ub1wiOnRydWUsXCJmbGVzYmVyZy5ub1wiOnRydWUsXCJmbG9yYS5ub1wiOnRydWUsXCJmbGEubm9cIjp0cnVlLFwieG4tLWZsLXppYS5ub1wiOnRydWUsXCJmb2xsZGFsLm5vXCI6dHJ1ZSxcImZvcnNhbmQubm9cIjp0cnVlLFwiZm9zbmVzLm5vXCI6dHJ1ZSxcImZyZWkubm9cIjp0cnVlLFwiZnJvZ24ubm9cIjp0cnVlLFwiZnJvbGFuZC5ub1wiOnRydWUsXCJmcm9zdGEubm9cIjp0cnVlLFwiZnJhbmEubm9cIjp0cnVlLFwieG4tLWZybmEtd29hLm5vXCI6dHJ1ZSxcImZyb3lhLm5vXCI6dHJ1ZSxcInhuLS1mcnlhLWhyYS5ub1wiOnRydWUsXCJmdXNhLm5vXCI6dHJ1ZSxcImZ5cmVzZGFsLm5vXCI6dHJ1ZSxcImZvcmRlLm5vXCI6dHJ1ZSxcInhuLS1mcmRlLWdyYS5ub1wiOnRydWUsXCJnYW12aWsubm9cIjp0cnVlLFwiZ2FuZ2F2aWlrYS5ub1wiOnRydWUsXCJ4bi0tZ2dhdmlpa2EtOHlhNDdoLm5vXCI6dHJ1ZSxcImdhdWxhci5ub1wiOnRydWUsXCJnYXVzZGFsLm5vXCI6dHJ1ZSxcImdpbGRlc2thbC5ub1wiOnRydWUsXCJ4bi0tZ2lsZGVza2wtZzBhLm5vXCI6dHJ1ZSxcImdpc2tlLm5vXCI6dHJ1ZSxcImdqZW1uZXMubm9cIjp0cnVlLFwiZ2plcmRydW0ubm9cIjp0cnVlLFwiZ2plcnN0YWQubm9cIjp0cnVlLFwiZ2plc2RhbC5ub1wiOnRydWUsXCJnam92aWsubm9cIjp0cnVlLFwieG4tLWdqdmlrLXd1YS5ub1wiOnRydWUsXCJnbG9wcGVuLm5vXCI6dHJ1ZSxcImdvbC5ub1wiOnRydWUsXCJncmFuLm5vXCI6dHJ1ZSxcImdyYW5lLm5vXCI6dHJ1ZSxcImdyYW52aW4ubm9cIjp0cnVlLFwiZ3JhdGFuZ2VuLm5vXCI6dHJ1ZSxcImdyaW1zdGFkLm5vXCI6dHJ1ZSxcImdyb25nLm5vXCI6dHJ1ZSxcImtyYWFuZ2hrZS5ub1wiOnRydWUsXCJ4bi0ta3Jhbmdoa2UtYjBhLm5vXCI6dHJ1ZSxcImdydWUubm9cIjp0cnVlLFwiZ3VsZW4ubm9cIjp0cnVlLFwiaGFkc2VsLm5vXCI6dHJ1ZSxcImhhbGRlbi5ub1wiOnRydWUsXCJoYWxzYS5ub1wiOnRydWUsXCJoYW1hci5ub1wiOnRydWUsXCJoYW1hcm95Lm5vXCI6dHJ1ZSxcImhhYm1lci5ub1wiOnRydWUsXCJ4bi0taGJtZXIteHFhLm5vXCI6dHJ1ZSxcImhhcG1pci5ub1wiOnRydWUsXCJ4bi0taHBtaXIteHFhLm5vXCI6dHJ1ZSxcImhhbW1lcmZlc3Qubm9cIjp0cnVlLFwiaGFtbWFyZmVhc3RhLm5vXCI6dHJ1ZSxcInhuLS1obW1yZmVhc3RhLXM0YWMubm9cIjp0cnVlLFwiaGFyYW0ubm9cIjp0cnVlLFwiaGFyZWlkLm5vXCI6dHJ1ZSxcImhhcnN0YWQubm9cIjp0cnVlLFwiaGFzdmlrLm5vXCI6dHJ1ZSxcImFrbm9sdW9rdGEubm9cIjp0cnVlLFwieG4tLWtvbHVva3RhLTd5YTU3aC5ub1wiOnRydWUsXCJoYXR0ZmplbGxkYWwubm9cIjp0cnVlLFwiYWFyYm9ydGUubm9cIjp0cnVlLFwiaGF1Z2VzdW5kLm5vXCI6dHJ1ZSxcImhlbW5lLm5vXCI6dHJ1ZSxcImhlbW5lcy5ub1wiOnRydWUsXCJoZW1zZWRhbC5ub1wiOnRydWUsXCJoZXJveS5tb3JlLW9nLXJvbXNkYWwubm9cIjp0cnVlLFwieG4tLWhlcnktaXJhLnhuLS1tcmUtb2ctcm9tc2RhbC1xcWIubm9cIjp0cnVlLFwiaGVyb3kubm9yZGxhbmQubm9cIjp0cnVlLFwieG4tLWhlcnktaXJhLm5vcmRsYW5kLm5vXCI6dHJ1ZSxcImhpdHJhLm5vXCI6dHJ1ZSxcImhqYXJ0ZGFsLm5vXCI6dHJ1ZSxcImhqZWxtZWxhbmQubm9cIjp0cnVlLFwiaG9ib2wubm9cIjp0cnVlLFwieG4tLWhvYmwtaXJhLm5vXCI6dHJ1ZSxcImhvZi5ub1wiOnRydWUsXCJob2wubm9cIjp0cnVlLFwiaG9sZS5ub1wiOnRydWUsXCJob2xtZXN0cmFuZC5ub1wiOnRydWUsXCJob2x0YWxlbi5ub1wiOnRydWUsXCJ4bi0taG9sdGxlbi1oeGEubm9cIjp0cnVlLFwiaG9ybmluZGFsLm5vXCI6dHJ1ZSxcImhvcnRlbi5ub1wiOnRydWUsXCJodXJkYWwubm9cIjp0cnVlLFwiaHVydW0ubm9cIjp0cnVlLFwiaHZhbGVyLm5vXCI6dHJ1ZSxcImh5bGxlc3RhZC5ub1wiOnRydWUsXCJoYWdlYm9zdGFkLm5vXCI6dHJ1ZSxcInhuLS1oZ2Vib3N0YWQtZzNhLm5vXCI6dHJ1ZSxcImhveWFuZ2VyLm5vXCI6dHJ1ZSxcInhuLS1oeWFuZ2VyLXExYS5ub1wiOnRydWUsXCJob3lsYW5kZXQubm9cIjp0cnVlLFwieG4tLWh5bGFuZGV0LTU0YS5ub1wiOnRydWUsXCJoYS5ub1wiOnRydWUsXCJ4bi0taC0yZmEubm9cIjp0cnVlLFwiaWJlc3RhZC5ub1wiOnRydWUsXCJpbmRlcm95Lm5vXCI6dHJ1ZSxcInhuLS1pbmRlcnktZnlhLm5vXCI6dHJ1ZSxcIml2ZWxhbmQubm9cIjp0cnVlLFwiamV2bmFrZXIubm9cIjp0cnVlLFwiam9uZGFsLm5vXCI6dHJ1ZSxcImpvbHN0ZXIubm9cIjp0cnVlLFwieG4tLWpsc3Rlci1ieWEubm9cIjp0cnVlLFwia2FyYXNqb2subm9cIjp0cnVlLFwia2FyYXNqb2hrYS5ub1wiOnRydWUsXCJ4bi0ta3Jqb2hrYS1od2FiNDlqLm5vXCI6dHJ1ZSxcImthcmxzb3kubm9cIjp0cnVlLFwiZ2Fsc2Eubm9cIjp0cnVlLFwieG4tLWdscy1lbGFjLm5vXCI6dHJ1ZSxcImthcm1veS5ub1wiOnRydWUsXCJ4bi0ta2FybXkteXVhLm5vXCI6dHJ1ZSxcImthdXRva2Vpbm8ubm9cIjp0cnVlLFwiZ3VvdmRhZ2VhaWRudS5ub1wiOnRydWUsXCJrbGVwcC5ub1wiOnRydWUsXCJrbGFidS5ub1wiOnRydWUsXCJ4bi0ta2xidS13b2Eubm9cIjp0cnVlLFwia29uZ3NiZXJnLm5vXCI6dHJ1ZSxcImtvbmdzdmluZ2VyLm5vXCI6dHJ1ZSxcImtyYWdlcm8ubm9cIjp0cnVlLFwieG4tLWtyYWdlci1neWEubm9cIjp0cnVlLFwia3Jpc3RpYW5zYW5kLm5vXCI6dHJ1ZSxcImtyaXN0aWFuc3VuZC5ub1wiOnRydWUsXCJrcm9kc2hlcmFkLm5vXCI6dHJ1ZSxcInhuLS1rcmRzaGVyYWQtbThhLm5vXCI6dHJ1ZSxcImt2YWxzdW5kLm5vXCI6dHJ1ZSxcInJhaGtrZXJhdmp1Lm5vXCI6dHJ1ZSxcInhuLS1yaGtrZXJ2anUtMDFhZi5ub1wiOnRydWUsXCJrdmFtLm5vXCI6dHJ1ZSxcImt2aW5lc2RhbC5ub1wiOnRydWUsXCJrdmlubmhlcmFkLm5vXCI6dHJ1ZSxcImt2aXRlc2VpZC5ub1wiOnRydWUsXCJrdml0c295Lm5vXCI6dHJ1ZSxcInhuLS1rdml0c3ktZnlhLm5vXCI6dHJ1ZSxcImt2YWZqb3JkLm5vXCI6dHJ1ZSxcInhuLS1rdmZqb3JkLW54YS5ub1wiOnRydWUsXCJnaWVodGF2dW9hdG5hLm5vXCI6dHJ1ZSxcImt2YW5hbmdlbi5ub1wiOnRydWUsXCJ4bi0ta3ZuYW5nZW4tazBhLm5vXCI6dHJ1ZSxcIm5hdnVvdG5hLm5vXCI6dHJ1ZSxcInhuLS1udnVvdG5hLWh3YS5ub1wiOnRydWUsXCJrYWZqb3JkLm5vXCI6dHJ1ZSxcInhuLS1rZmpvcmQtaXVhLm5vXCI6dHJ1ZSxcImdhaXZ1b3RuYS5ub1wiOnRydWUsXCJ4bi0tZ2l2dW90bmEtOHlhLm5vXCI6dHJ1ZSxcImxhcnZpay5ub1wiOnRydWUsXCJsYXZhbmdlbi5ub1wiOnRydWUsXCJsYXZhZ2lzLm5vXCI6dHJ1ZSxcImxvYWJhdC5ub1wiOnRydWUsXCJ4bi0tbG9hYnQtMHFhLm5vXCI6dHJ1ZSxcImxlYmVzYnkubm9cIjp0cnVlLFwiZGF2dmVzaWlkYS5ub1wiOnRydWUsXCJsZWlrYW5nZXIubm9cIjp0cnVlLFwibGVpcmZqb3JkLm5vXCI6dHJ1ZSxcImxla2Eubm9cIjp0cnVlLFwibGVrc3Zpay5ub1wiOnRydWUsXCJsZW52aWsubm9cIjp0cnVlLFwibGVhbmdhdmlpa2Eubm9cIjp0cnVlLFwieG4tLWxlYWdhdmlpa2EtNTJiLm5vXCI6dHJ1ZSxcImxlc2phLm5vXCI6dHJ1ZSxcImxldmFuZ2VyLm5vXCI6dHJ1ZSxcImxpZXIubm9cIjp0cnVlLFwibGllcm5lLm5vXCI6dHJ1ZSxcImxpbGxlaGFtbWVyLm5vXCI6dHJ1ZSxcImxpbGxlc2FuZC5ub1wiOnRydWUsXCJsaW5kZXNuZXMubm9cIjp0cnVlLFwibGluZGFzLm5vXCI6dHJ1ZSxcInhuLS1saW5kcy1wcmEubm9cIjp0cnVlLFwibG9tLm5vXCI6dHJ1ZSxcImxvcHBhLm5vXCI6dHJ1ZSxcImxhaHBwaS5ub1wiOnRydWUsXCJ4bi0tbGhwcGkteHFhLm5vXCI6dHJ1ZSxcImx1bmQubm9cIjp0cnVlLFwibHVubmVyLm5vXCI6dHJ1ZSxcImx1cm95Lm5vXCI6dHJ1ZSxcInhuLS1sdXJ5LWlyYS5ub1wiOnRydWUsXCJsdXN0ZXIubm9cIjp0cnVlLFwibHluZ2RhbC5ub1wiOnRydWUsXCJseW5nZW4ubm9cIjp0cnVlLFwiaXZndS5ub1wiOnRydWUsXCJsYXJkYWwubm9cIjp0cnVlLFwibGVyZGFsLm5vXCI6dHJ1ZSxcInhuLS1scmRhbC1zcmEubm9cIjp0cnVlLFwibG9kaW5nZW4ubm9cIjp0cnVlLFwieG4tLWxkaW5nZW4tcTFhLm5vXCI6dHJ1ZSxcImxvcmVuc2tvZy5ub1wiOnRydWUsXCJ4bi0tbHJlbnNrb2ctNTRhLm5vXCI6dHJ1ZSxcImxvdGVuLm5vXCI6dHJ1ZSxcInhuLS1sdGVuLWdyYS5ub1wiOnRydWUsXCJtYWx2aWsubm9cIjp0cnVlLFwibWFzb3kubm9cIjp0cnVlLFwieG4tLW1zeS11bGEwaC5ub1wiOnRydWUsXCJtdW9zYXQubm9cIjp0cnVlLFwieG4tLW11b3N0LTBxYS5ub1wiOnRydWUsXCJtYW5kYWwubm9cIjp0cnVlLFwibWFya2VyLm5vXCI6dHJ1ZSxcIm1hcm5hcmRhbC5ub1wiOnRydWUsXCJtYXNmam9yZGVuLm5vXCI6dHJ1ZSxcIm1lbGFuZC5ub1wiOnRydWUsXCJtZWxkYWwubm9cIjp0cnVlLFwibWVsaHVzLm5vXCI6dHJ1ZSxcIm1lbG95Lm5vXCI6dHJ1ZSxcInhuLS1tZWx5LWlyYS5ub1wiOnRydWUsXCJtZXJha2VyLm5vXCI6dHJ1ZSxcInhuLS1tZXJrZXIta3VhLm5vXCI6dHJ1ZSxcIm1vYXJla2Uubm9cIjp0cnVlLFwieG4tLW1vcmVrZS1qdWEubm9cIjp0cnVlLFwibWlkc3VuZC5ub1wiOnRydWUsXCJtaWR0cmUtZ2F1bGRhbC5ub1wiOnRydWUsXCJtb2RhbGVuLm5vXCI6dHJ1ZSxcIm1vZHVtLm5vXCI6dHJ1ZSxcIm1vbGRlLm5vXCI6dHJ1ZSxcIm1vc2tlbmVzLm5vXCI6dHJ1ZSxcIm1vc3Mubm9cIjp0cnVlLFwibW9zdmlrLm5vXCI6dHJ1ZSxcIm1hbHNlbHYubm9cIjp0cnVlLFwieG4tLW1sc2Vsdi1pdWEubm9cIjp0cnVlLFwibWFsYXR2dW9wbWkubm9cIjp0cnVlLFwieG4tLW1sYXR2dW9wbWktczRhLm5vXCI6dHJ1ZSxcIm5hbWRhbHNlaWQubm9cIjp0cnVlLFwiYWVqcmllLm5vXCI6dHJ1ZSxcIm5hbXNvcy5ub1wiOnRydWUsXCJuYW1zc2tvZ2FuLm5vXCI6dHJ1ZSxcIm5hYW1lc2pldnVlbWllLm5vXCI6dHJ1ZSxcInhuLS1ubWVzamV2dWVtaWUtdGNiYS5ub1wiOnRydWUsXCJsYWFrZXN2dWVtaWUubm9cIjp0cnVlLFwibmFubmVzdGFkLm5vXCI6dHJ1ZSxcIm5hcnZpay5ub1wiOnRydWUsXCJuYXJ2aWlrYS5ub1wiOnRydWUsXCJuYXVzdGRhbC5ub1wiOnRydWUsXCJuZWRyZS1laWtlci5ub1wiOnRydWUsXCJuZXMuYWtlcnNodXMubm9cIjp0cnVlLFwibmVzLmJ1c2tlcnVkLm5vXCI6dHJ1ZSxcIm5lc25hLm5vXCI6dHJ1ZSxcIm5lc29kZGVuLm5vXCI6dHJ1ZSxcIm5lc3NlYnkubm9cIjp0cnVlLFwidW5qYXJnYS5ub1wiOnRydWUsXCJ4bi0tdW5qcmdhLXJ0YS5ub1wiOnRydWUsXCJuZXNzZXQubm9cIjp0cnVlLFwibmlzc2VkYWwubm9cIjp0cnVlLFwibml0dGVkYWwubm9cIjp0cnVlLFwibm9yZC1hdXJkYWwubm9cIjp0cnVlLFwibm9yZC1mcm9uLm5vXCI6dHJ1ZSxcIm5vcmQtb2RhbC5ub1wiOnRydWUsXCJub3JkZGFsLm5vXCI6dHJ1ZSxcIm5vcmRrYXBwLm5vXCI6dHJ1ZSxcImRhdnZlbmphcmdhLm5vXCI6dHJ1ZSxcInhuLS1kYXZ2ZW5qcmdhLXk0YS5ub1wiOnRydWUsXCJub3JkcmUtbGFuZC5ub1wiOnRydWUsXCJub3JkcmVpc2Eubm9cIjp0cnVlLFwicmFpc2Eubm9cIjp0cnVlLFwieG4tLXJpc2EtNW5hLm5vXCI6dHJ1ZSxcIm5vcmUtb2ctdXZkYWwubm9cIjp0cnVlLFwibm90b2RkZW4ubm9cIjp0cnVlLFwibmFyb3kubm9cIjp0cnVlLFwieG4tLW5yeS15bGE1Zy5ub1wiOnRydWUsXCJub3R0ZXJveS5ub1wiOnRydWUsXCJ4bi0tbnR0ZXJ5LWJ5YWUubm9cIjp0cnVlLFwib2RkYS5ub1wiOnRydWUsXCJva3NuZXMubm9cIjp0cnVlLFwieG4tLWtzbmVzLXV1YS5ub1wiOnRydWUsXCJvcHBkYWwubm9cIjp0cnVlLFwib3BwZWdhcmQubm9cIjp0cnVlLFwieG4tLW9wcGVncmQtaXhhLm5vXCI6dHJ1ZSxcIm9ya2RhbC5ub1wiOnRydWUsXCJvcmxhbmQubm9cIjp0cnVlLFwieG4tLXJsYW5kLXV1YS5ub1wiOnRydWUsXCJvcnNrb2cubm9cIjp0cnVlLFwieG4tLXJza29nLXV1YS5ub1wiOnRydWUsXCJvcnN0YS5ub1wiOnRydWUsXCJ4bi0tcnN0YS1mcmEubm9cIjp0cnVlLFwib3MuaGVkbWFyay5ub1wiOnRydWUsXCJvcy5ob3JkYWxhbmQubm9cIjp0cnVlLFwib3Nlbi5ub1wiOnRydWUsXCJvc3Rlcm95Lm5vXCI6dHJ1ZSxcInhuLS1vc3RlcnktZnlhLm5vXCI6dHJ1ZSxcIm9zdHJlLXRvdGVuLm5vXCI6dHJ1ZSxcInhuLS1zdHJlLXRvdGVuLXpjYi5ub1wiOnRydWUsXCJvdmVyaGFsbGEubm9cIjp0cnVlLFwib3ZyZS1laWtlci5ub1wiOnRydWUsXCJ4bi0tdnJlLWVpa2VyLWs4YS5ub1wiOnRydWUsXCJveWVyLm5vXCI6dHJ1ZSxcInhuLS15ZXItem5hLm5vXCI6dHJ1ZSxcIm95Z2FyZGVuLm5vXCI6dHJ1ZSxcInhuLS15Z2FyZGVuLXAxYS5ub1wiOnRydWUsXCJveXN0cmUtc2xpZHJlLm5vXCI6dHJ1ZSxcInhuLS15c3RyZS1zbGlkcmUtdWpiLm5vXCI6dHJ1ZSxcInBvcnNhbmdlci5ub1wiOnRydWUsXCJwb3JzYW5ndS5ub1wiOnRydWUsXCJ4bi0tcG9yc2d1LXN0YTI2Zi5ub1wiOnRydWUsXCJwb3JzZ3J1bm4ubm9cIjp0cnVlLFwicmFkb3kubm9cIjp0cnVlLFwieG4tLXJhZHktaXJhLm5vXCI6dHJ1ZSxcInJha2tlc3RhZC5ub1wiOnRydWUsXCJyYW5hLm5vXCI6dHJ1ZSxcInJ1b3ZhdC5ub1wiOnRydWUsXCJyYW5kYWJlcmcubm9cIjp0cnVlLFwicmF1bWEubm9cIjp0cnVlLFwicmVuZGFsZW4ubm9cIjp0cnVlLFwicmVubmVidS5ub1wiOnRydWUsXCJyZW5uZXNveS5ub1wiOnRydWUsXCJ4bi0tcmVubmVzeS12MWEubm9cIjp0cnVlLFwicmluZGFsLm5vXCI6dHJ1ZSxcInJpbmdlYnUubm9cIjp0cnVlLFwicmluZ2VyaWtlLm5vXCI6dHJ1ZSxcInJpbmdzYWtlci5ub1wiOnRydWUsXCJyaXNzYS5ub1wiOnRydWUsXCJyaXNvci5ub1wiOnRydWUsXCJ4bi0tcmlzci1pcmEubm9cIjp0cnVlLFwicm9hbi5ub1wiOnRydWUsXCJyb2xsYWcubm9cIjp0cnVlLFwicnlnZ2Uubm9cIjp0cnVlLFwicmFsaW5nZW4ubm9cIjp0cnVlLFwieG4tLXJsaW5nZW4tbXhhLm5vXCI6dHJ1ZSxcInJvZG95Lm5vXCI6dHJ1ZSxcInhuLS1yZHktMG5hYi5ub1wiOnRydWUsXCJyb21za29nLm5vXCI6dHJ1ZSxcInhuLS1ybXNrb2ctYnlhLm5vXCI6dHJ1ZSxcInJvcm9zLm5vXCI6dHJ1ZSxcInhuLS1ycm9zLWdyYS5ub1wiOnRydWUsXCJyb3N0Lm5vXCI6dHJ1ZSxcInhuLS1yc3QtMG5hLm5vXCI6dHJ1ZSxcInJveWtlbi5ub1wiOnRydWUsXCJ4bi0tcnlrZW4tdnVhLm5vXCI6dHJ1ZSxcInJveXJ2aWsubm9cIjp0cnVlLFwieG4tLXJ5cnZpay1ieWEubm9cIjp0cnVlLFwicmFkZS5ub1wiOnRydWUsXCJ4bi0tcmRlLXVsYS5ub1wiOnRydWUsXCJzYWxhbmdlbi5ub1wiOnRydWUsXCJzaWVsbGFrLm5vXCI6dHJ1ZSxcInNhbHRkYWwubm9cIjp0cnVlLFwic2FsYXQubm9cIjp0cnVlLFwieG4tLXNsdC1lbGFiLm5vXCI6dHJ1ZSxcInhuLS1zbGF0LTVuYS5ub1wiOnRydWUsXCJzYW1uYW5nZXIubm9cIjp0cnVlLFwic2FuZGUubW9yZS1vZy1yb21zZGFsLm5vXCI6dHJ1ZSxcInNhbmRlLnhuLS1tcmUtb2ctcm9tc2RhbC1xcWIubm9cIjp0cnVlLFwic2FuZGUudmVzdGZvbGQubm9cIjp0cnVlLFwic2FuZGVmam9yZC5ub1wiOnRydWUsXCJzYW5kbmVzLm5vXCI6dHJ1ZSxcInNhbmRveS5ub1wiOnRydWUsXCJ4bi0tc2FuZHkteXVhLm5vXCI6dHJ1ZSxcInNhcnBzYm9yZy5ub1wiOnRydWUsXCJzYXVkYS5ub1wiOnRydWUsXCJzYXVoZXJhZC5ub1wiOnRydWUsXCJzZWwubm9cIjp0cnVlLFwic2VsYnUubm9cIjp0cnVlLFwic2VsamUubm9cIjp0cnVlLFwic2Vsam9yZC5ub1wiOnRydWUsXCJzaWdkYWwubm9cIjp0cnVlLFwic2lsamFuLm5vXCI6dHJ1ZSxcInNpcmRhbC5ub1wiOnRydWUsXCJza2F1bi5ub1wiOnRydWUsXCJza2Vkc21vLm5vXCI6dHJ1ZSxcInNraS5ub1wiOnRydWUsXCJza2llbi5ub1wiOnRydWUsXCJza2lwdHZldC5ub1wiOnRydWUsXCJza2plcnZveS5ub1wiOnRydWUsXCJ4bi0tc2tqZXJ2eS12MWEubm9cIjp0cnVlLFwic2tpZXJ2YS5ub1wiOnRydWUsXCJ4bi0tc2tpZXJ2LXV0YS5ub1wiOnRydWUsXCJza2phay5ub1wiOnRydWUsXCJ4bi0tc2tqay1zb2Eubm9cIjp0cnVlLFwic2tvZGplLm5vXCI6dHJ1ZSxcInNrYW5sYW5kLm5vXCI6dHJ1ZSxcInhuLS1za25sYW5kLWZ4YS5ub1wiOnRydWUsXCJza2FuaXQubm9cIjp0cnVlLFwieG4tLXNrbml0LXlxYS5ub1wiOnRydWUsXCJzbW9sYS5ub1wiOnRydWUsXCJ4bi0tc21sYS1ocmEubm9cIjp0cnVlLFwic25pbGxmam9yZC5ub1wiOnRydWUsXCJzbmFzYS5ub1wiOnRydWUsXCJ4bi0tc25zYS1yb2Eubm9cIjp0cnVlLFwic25vYXNhLm5vXCI6dHJ1ZSxcInNuYWFzZS5ub1wiOnRydWUsXCJ4bi0tc25hc2UtbnJhLm5vXCI6dHJ1ZSxcInNvZ25kYWwubm9cIjp0cnVlLFwic29rbmRhbC5ub1wiOnRydWUsXCJzb2xhLm5vXCI6dHJ1ZSxcInNvbHVuZC5ub1wiOnRydWUsXCJzb25nZGFsZW4ubm9cIjp0cnVlLFwic29ydGxhbmQubm9cIjp0cnVlLFwic3B5ZGViZXJnLm5vXCI6dHJ1ZSxcInN0YW5nZS5ub1wiOnRydWUsXCJzdGF2YW5nZXIubm9cIjp0cnVlLFwic3RlaWdlbi5ub1wiOnRydWUsXCJzdGVpbmtqZXIubm9cIjp0cnVlLFwic3Rqb3JkYWwubm9cIjp0cnVlLFwieG4tLXN0anJkYWwtczFhLm5vXCI6dHJ1ZSxcInN0b2trZS5ub1wiOnRydWUsXCJzdG9yLWVsdmRhbC5ub1wiOnRydWUsXCJzdG9yZC5ub1wiOnRydWUsXCJzdG9yZGFsLm5vXCI6dHJ1ZSxcInN0b3Jmam9yZC5ub1wiOnRydWUsXCJvbWFzdnVvdG5hLm5vXCI6dHJ1ZSxcInN0cmFuZC5ub1wiOnRydWUsXCJzdHJhbmRhLm5vXCI6dHJ1ZSxcInN0cnluLm5vXCI6dHJ1ZSxcInN1bGEubm9cIjp0cnVlLFwic3VsZGFsLm5vXCI6dHJ1ZSxcInN1bmQubm9cIjp0cnVlLFwic3VubmRhbC5ub1wiOnRydWUsXCJzdXJuYWRhbC5ub1wiOnRydWUsXCJzdmVpby5ub1wiOnRydWUsXCJzdmVsdmlrLm5vXCI6dHJ1ZSxcInN5a2t5bHZlbi5ub1wiOnRydWUsXCJzb2duZS5ub1wiOnRydWUsXCJ4bi0tc2duZS1ncmEubm9cIjp0cnVlLFwic29tbmEubm9cIjp0cnVlLFwieG4tLXNtbmEtZ3JhLm5vXCI6dHJ1ZSxcInNvbmRyZS1sYW5kLm5vXCI6dHJ1ZSxcInhuLS1zbmRyZS1sYW5kLTBjYi5ub1wiOnRydWUsXCJzb3ItYXVyZGFsLm5vXCI6dHJ1ZSxcInhuLS1zci1hdXJkYWwtbDhhLm5vXCI6dHJ1ZSxcInNvci1mcm9uLm5vXCI6dHJ1ZSxcInhuLS1zci1mcm9uLXExYS5ub1wiOnRydWUsXCJzb3Itb2RhbC5ub1wiOnRydWUsXCJ4bi0tc3Itb2RhbC1xMWEubm9cIjp0cnVlLFwic29yLXZhcmFuZ2VyLm5vXCI6dHJ1ZSxcInhuLS1zci12YXJhbmdlci1nZ2Iubm9cIjp0cnVlLFwibWF0dGEtdmFyamphdC5ub1wiOnRydWUsXCJ4bi0tbXR0YS12cmpqYXQtazdhZi5ub1wiOnRydWUsXCJzb3Jmb2xkLm5vXCI6dHJ1ZSxcInhuLS1zcmZvbGQtYnlhLm5vXCI6dHJ1ZSxcInNvcnJlaXNhLm5vXCI6dHJ1ZSxcInhuLS1zcnJlaXNhLXExYS5ub1wiOnRydWUsXCJzb3J1bS5ub1wiOnRydWUsXCJ4bi0tc3J1bS1ncmEubm9cIjp0cnVlLFwidGFuYS5ub1wiOnRydWUsXCJkZWF0bnUubm9cIjp0cnVlLFwidGltZS5ub1wiOnRydWUsXCJ0aW5ndm9sbC5ub1wiOnRydWUsXCJ0aW5uLm5vXCI6dHJ1ZSxcInRqZWxkc3VuZC5ub1wiOnRydWUsXCJkaWVsZGRhbnVvcnJpLm5vXCI6dHJ1ZSxcInRqb21lLm5vXCI6dHJ1ZSxcInhuLS10am1lLWhyYS5ub1wiOnRydWUsXCJ0b2trZS5ub1wiOnRydWUsXCJ0b2xnYS5ub1wiOnRydWUsXCJ0b3Jza2VuLm5vXCI6dHJ1ZSxcInRyYW5veS5ub1wiOnRydWUsXCJ4bi0tdHJhbnkteXVhLm5vXCI6dHJ1ZSxcInRyb21zby5ub1wiOnRydWUsXCJ4bi0tdHJvbXMtenVhLm5vXCI6dHJ1ZSxcInRyb21zYS5ub1wiOnRydWUsXCJyb21zYS5ub1wiOnRydWUsXCJ0cm9uZGhlaW0ubm9cIjp0cnVlLFwidHJvYW5kaW4ubm9cIjp0cnVlLFwidHJ5c2lsLm5vXCI6dHJ1ZSxcInRyYW5hLm5vXCI6dHJ1ZSxcInhuLS10cm5hLXdvYS5ub1wiOnRydWUsXCJ0cm9nc3RhZC5ub1wiOnRydWUsXCJ4bi0tdHJnc3RhZC1yMWEubm9cIjp0cnVlLFwidHZlZGVzdHJhbmQubm9cIjp0cnVlLFwidHlkYWwubm9cIjp0cnVlLFwidHluc2V0Lm5vXCI6dHJ1ZSxcInR5c2Zqb3JkLm5vXCI6dHJ1ZSxcImRpdnRhc3Z1b2RuYS5ub1wiOnRydWUsXCJkaXZ0dGFzdnVvdG5hLm5vXCI6dHJ1ZSxcInR5c25lcy5ub1wiOnRydWUsXCJ0eXN2YXIubm9cIjp0cnVlLFwieG4tLXR5c3ZyLXZyYS5ub1wiOnRydWUsXCJ0b25zYmVyZy5ub1wiOnRydWUsXCJ4bi0tdG5zYmVyZy1xMWEubm9cIjp0cnVlLFwidWxsZW5zYWtlci5ub1wiOnRydWUsXCJ1bGxlbnN2YW5nLm5vXCI6dHJ1ZSxcInVsdmlrLm5vXCI6dHJ1ZSxcInV0c2lyYS5ub1wiOnRydWUsXCJ2YWRzby5ub1wiOnRydWUsXCJ4bi0tdmFkcy1qcmEubm9cIjp0cnVlLFwiY2FoY2VzdW9sby5ub1wiOnRydWUsXCJ4bi0taGNlc3VvbG8tN3lhMzViLm5vXCI6dHJ1ZSxcInZha3NkYWwubm9cIjp0cnVlLFwidmFsbGUubm9cIjp0cnVlLFwidmFuZy5ub1wiOnRydWUsXCJ2YW55bHZlbi5ub1wiOnRydWUsXCJ2YXJkby5ub1wiOnRydWUsXCJ4bi0tdmFyZC1qcmEubm9cIjp0cnVlLFwidmFyZ2dhdC5ub1wiOnRydWUsXCJ4bi0tdnJnZ3QteHFhZC5ub1wiOnRydWUsXCJ2ZWZzbi5ub1wiOnRydWUsXCJ2YWFwc3RlLm5vXCI6dHJ1ZSxcInZlZ2Eubm9cIjp0cnVlLFwidmVnYXJzaGVpLm5vXCI6dHJ1ZSxcInhuLS12ZWdyc2hlaS1jMGEubm9cIjp0cnVlLFwidmVubmVzbGEubm9cIjp0cnVlLFwidmVyZGFsLm5vXCI6dHJ1ZSxcInZlcnJhbi5ub1wiOnRydWUsXCJ2ZXN0Ynkubm9cIjp0cnVlLFwidmVzdG5lcy5ub1wiOnRydWUsXCJ2ZXN0cmUtc2xpZHJlLm5vXCI6dHJ1ZSxcInZlc3RyZS10b3Rlbi5ub1wiOnRydWUsXCJ2ZXN0dmFnb3kubm9cIjp0cnVlLFwieG4tLXZlc3R2Z3ktaXhhNm8ubm9cIjp0cnVlLFwidmV2ZWxzdGFkLm5vXCI6dHJ1ZSxcInZpay5ub1wiOnRydWUsXCJ2aWtuYS5ub1wiOnRydWUsXCJ2aW5kYWZqb3JkLm5vXCI6dHJ1ZSxcInZvbGRhLm5vXCI6dHJ1ZSxcInZvc3Mubm9cIjp0cnVlLFwidmFyb3kubm9cIjp0cnVlLFwieG4tLXZyeS15bGE1Zy5ub1wiOnRydWUsXCJ2YWdhbi5ub1wiOnRydWUsXCJ4bi0tdmdhbi1xb2Eubm9cIjp0cnVlLFwidm9hZ2F0Lm5vXCI6dHJ1ZSxcInZhZ3NveS5ub1wiOnRydWUsXCJ4bi0tdmdzeS1xb2Ewai5ub1wiOnRydWUsXCJ2YWdhLm5vXCI6dHJ1ZSxcInhuLS12Zy15aWFiLm5vXCI6dHJ1ZSxcInZhbGVyLm9zdGZvbGQubm9cIjp0cnVlLFwieG4tLXZsZXItcW9hLnhuLS1zdGZvbGQtOXhhLm5vXCI6dHJ1ZSxcInZhbGVyLmhlZG1hcmsubm9cIjp0cnVlLFwieG4tLXZsZXItcW9hLmhlZG1hcmsubm9cIjp0cnVlLFwiKi5ucFwiOnRydWUsXCJuclwiOnRydWUsXCJiaXoubnJcIjp0cnVlLFwiaW5mby5uclwiOnRydWUsXCJnb3YubnJcIjp0cnVlLFwiZWR1Lm5yXCI6dHJ1ZSxcIm9yZy5uclwiOnRydWUsXCJuZXQubnJcIjp0cnVlLFwiY29tLm5yXCI6dHJ1ZSxcIm51XCI6dHJ1ZSxcIm56XCI6dHJ1ZSxcImFjLm56XCI6dHJ1ZSxcImNvLm56XCI6dHJ1ZSxcImNyaS5uelwiOnRydWUsXCJnZWVrLm56XCI6dHJ1ZSxcImdlbi5uelwiOnRydWUsXCJnb3Z0Lm56XCI6dHJ1ZSxcImhlYWx0aC5uelwiOnRydWUsXCJpd2kubnpcIjp0cnVlLFwia2l3aS5uelwiOnRydWUsXCJtYW9yaS5uelwiOnRydWUsXCJtaWwubnpcIjp0cnVlLFwieG4tLW1vcmktcXNhLm56XCI6dHJ1ZSxcIm5ldC5uelwiOnRydWUsXCJvcmcubnpcIjp0cnVlLFwicGFybGlhbWVudC5uelwiOnRydWUsXCJzY2hvb2wubnpcIjp0cnVlLFwib21cIjp0cnVlLFwiY28ub21cIjp0cnVlLFwiY29tLm9tXCI6dHJ1ZSxcImVkdS5vbVwiOnRydWUsXCJnb3Yub21cIjp0cnVlLFwibWVkLm9tXCI6dHJ1ZSxcIm11c2V1bS5vbVwiOnRydWUsXCJuZXQub21cIjp0cnVlLFwib3JnLm9tXCI6dHJ1ZSxcInByby5vbVwiOnRydWUsXCJvcmdcIjp0cnVlLFwicGFcIjp0cnVlLFwiYWMucGFcIjp0cnVlLFwiZ29iLnBhXCI6dHJ1ZSxcImNvbS5wYVwiOnRydWUsXCJvcmcucGFcIjp0cnVlLFwic2xkLnBhXCI6dHJ1ZSxcImVkdS5wYVwiOnRydWUsXCJuZXQucGFcIjp0cnVlLFwiaW5nLnBhXCI6dHJ1ZSxcImFiby5wYVwiOnRydWUsXCJtZWQucGFcIjp0cnVlLFwibm9tLnBhXCI6dHJ1ZSxcInBlXCI6dHJ1ZSxcImVkdS5wZVwiOnRydWUsXCJnb2IucGVcIjp0cnVlLFwibm9tLnBlXCI6dHJ1ZSxcIm1pbC5wZVwiOnRydWUsXCJvcmcucGVcIjp0cnVlLFwiY29tLnBlXCI6dHJ1ZSxcIm5ldC5wZVwiOnRydWUsXCJwZlwiOnRydWUsXCJjb20ucGZcIjp0cnVlLFwib3JnLnBmXCI6dHJ1ZSxcImVkdS5wZlwiOnRydWUsXCIqLnBnXCI6dHJ1ZSxcInBoXCI6dHJ1ZSxcImNvbS5waFwiOnRydWUsXCJuZXQucGhcIjp0cnVlLFwib3JnLnBoXCI6dHJ1ZSxcImdvdi5waFwiOnRydWUsXCJlZHUucGhcIjp0cnVlLFwibmdvLnBoXCI6dHJ1ZSxcIm1pbC5waFwiOnRydWUsXCJpLnBoXCI6dHJ1ZSxcInBrXCI6dHJ1ZSxcImNvbS5wa1wiOnRydWUsXCJuZXQucGtcIjp0cnVlLFwiZWR1LnBrXCI6dHJ1ZSxcIm9yZy5wa1wiOnRydWUsXCJmYW0ucGtcIjp0cnVlLFwiYml6LnBrXCI6dHJ1ZSxcIndlYi5wa1wiOnRydWUsXCJnb3YucGtcIjp0cnVlLFwiZ29iLnBrXCI6dHJ1ZSxcImdvay5wa1wiOnRydWUsXCJnb24ucGtcIjp0cnVlLFwiZ29wLnBrXCI6dHJ1ZSxcImdvcy5wa1wiOnRydWUsXCJpbmZvLnBrXCI6dHJ1ZSxcInBsXCI6dHJ1ZSxcImNvbS5wbFwiOnRydWUsXCJuZXQucGxcIjp0cnVlLFwib3JnLnBsXCI6dHJ1ZSxcImFpZC5wbFwiOnRydWUsXCJhZ3JvLnBsXCI6dHJ1ZSxcImF0bS5wbFwiOnRydWUsXCJhdXRvLnBsXCI6dHJ1ZSxcImJpei5wbFwiOnRydWUsXCJlZHUucGxcIjp0cnVlLFwiZ21pbmEucGxcIjp0cnVlLFwiZ3NtLnBsXCI6dHJ1ZSxcImluZm8ucGxcIjp0cnVlLFwibWFpbC5wbFwiOnRydWUsXCJtaWFzdGEucGxcIjp0cnVlLFwibWVkaWEucGxcIjp0cnVlLFwibWlsLnBsXCI6dHJ1ZSxcIm5pZXJ1Y2hvbW9zY2kucGxcIjp0cnVlLFwibm9tLnBsXCI6dHJ1ZSxcInBjLnBsXCI6dHJ1ZSxcInBvd2lhdC5wbFwiOnRydWUsXCJwcml2LnBsXCI6dHJ1ZSxcInJlYWxlc3RhdGUucGxcIjp0cnVlLFwicmVsLnBsXCI6dHJ1ZSxcInNleC5wbFwiOnRydWUsXCJzaG9wLnBsXCI6dHJ1ZSxcInNrbGVwLnBsXCI6dHJ1ZSxcInNvcy5wbFwiOnRydWUsXCJzemtvbGEucGxcIjp0cnVlLFwidGFyZ2kucGxcIjp0cnVlLFwidG0ucGxcIjp0cnVlLFwidG91cmlzbS5wbFwiOnRydWUsXCJ0cmF2ZWwucGxcIjp0cnVlLFwidHVyeXN0eWthLnBsXCI6dHJ1ZSxcImdvdi5wbFwiOnRydWUsXCJhcC5nb3YucGxcIjp0cnVlLFwiaWMuZ292LnBsXCI6dHJ1ZSxcImlzLmdvdi5wbFwiOnRydWUsXCJ1cy5nb3YucGxcIjp0cnVlLFwia21wc3AuZ292LnBsXCI6dHJ1ZSxcImtwcHNwLmdvdi5wbFwiOnRydWUsXCJrd3BzcC5nb3YucGxcIjp0cnVlLFwicHNwLmdvdi5wbFwiOnRydWUsXCJ3c2tyLmdvdi5wbFwiOnRydWUsXCJrd3AuZ292LnBsXCI6dHJ1ZSxcIm13Lmdvdi5wbFwiOnRydWUsXCJ1Zy5nb3YucGxcIjp0cnVlLFwidW0uZ292LnBsXCI6dHJ1ZSxcInVtaWcuZ292LnBsXCI6dHJ1ZSxcInVnaW0uZ292LnBsXCI6dHJ1ZSxcInVwb3cuZ292LnBsXCI6dHJ1ZSxcInV3Lmdvdi5wbFwiOnRydWUsXCJzdGFyb3N0d28uZ292LnBsXCI6dHJ1ZSxcInBhLmdvdi5wbFwiOnRydWUsXCJwby5nb3YucGxcIjp0cnVlLFwicHNzZS5nb3YucGxcIjp0cnVlLFwicHVwLmdvdi5wbFwiOnRydWUsXCJyemd3Lmdvdi5wbFwiOnRydWUsXCJzYS5nb3YucGxcIjp0cnVlLFwic28uZ292LnBsXCI6dHJ1ZSxcInNyLmdvdi5wbFwiOnRydWUsXCJ3c2EuZ292LnBsXCI6dHJ1ZSxcInNrby5nb3YucGxcIjp0cnVlLFwidXpzLmdvdi5wbFwiOnRydWUsXCJ3aWloLmdvdi5wbFwiOnRydWUsXCJ3aW5iLmdvdi5wbFwiOnRydWUsXCJwaW5iLmdvdi5wbFwiOnRydWUsXCJ3aW9zLmdvdi5wbFwiOnRydWUsXCJ3aXRkLmdvdi5wbFwiOnRydWUsXCJ3em1pdXcuZ292LnBsXCI6dHJ1ZSxcInBpdy5nb3YucGxcIjp0cnVlLFwid2l3Lmdvdi5wbFwiOnRydWUsXCJncml3Lmdvdi5wbFwiOnRydWUsXCJ3aWYuZ292LnBsXCI6dHJ1ZSxcIm91bS5nb3YucGxcIjp0cnVlLFwic2RuLmdvdi5wbFwiOnRydWUsXCJ6cC5nb3YucGxcIjp0cnVlLFwidXBwby5nb3YucGxcIjp0cnVlLFwibXVwLmdvdi5wbFwiOnRydWUsXCJ3dW96Lmdvdi5wbFwiOnRydWUsXCJrb25zdWxhdC5nb3YucGxcIjp0cnVlLFwib2lybS5nb3YucGxcIjp0cnVlLFwiYXVndXN0b3cucGxcIjp0cnVlLFwiYmFiaWEtZ29yYS5wbFwiOnRydWUsXCJiZWR6aW4ucGxcIjp0cnVlLFwiYmVza2lkeS5wbFwiOnRydWUsXCJiaWFsb3dpZXphLnBsXCI6dHJ1ZSxcImJpYWx5c3Rvay5wbFwiOnRydWUsXCJiaWVsYXdhLnBsXCI6dHJ1ZSxcImJpZXN6Y3phZHkucGxcIjp0cnVlLFwiYm9sZXNsYXdpZWMucGxcIjp0cnVlLFwiYnlkZ29zemN6LnBsXCI6dHJ1ZSxcImJ5dG9tLnBsXCI6dHJ1ZSxcImNpZXN6eW4ucGxcIjp0cnVlLFwiY3plbGFkei5wbFwiOnRydWUsXCJjemVzdC5wbFwiOnRydWUsXCJkbHVnb2xla2EucGxcIjp0cnVlLFwiZWxibGFnLnBsXCI6dHJ1ZSxcImVsay5wbFwiOnRydWUsXCJnbG9nb3cucGxcIjp0cnVlLFwiZ25pZXpuby5wbFwiOnRydWUsXCJnb3JsaWNlLnBsXCI6dHJ1ZSxcImdyYWpld28ucGxcIjp0cnVlLFwiaWxhd2EucGxcIjp0cnVlLFwiamF3b3J6bm8ucGxcIjp0cnVlLFwiamVsZW5pYS1nb3JhLnBsXCI6dHJ1ZSxcImpnb3JhLnBsXCI6dHJ1ZSxcImthbGlzei5wbFwiOnRydWUsXCJrYXppbWllcnotZG9sbnkucGxcIjp0cnVlLFwia2FycGFjei5wbFwiOnRydWUsXCJrYXJ0dXp5LnBsXCI6dHJ1ZSxcImthc3p1YnkucGxcIjp0cnVlLFwia2F0b3dpY2UucGxcIjp0cnVlLFwia2Vwbm8ucGxcIjp0cnVlLFwia2V0cnp5bi5wbFwiOnRydWUsXCJrbG9kemtvLnBsXCI6dHJ1ZSxcImtvYmllcnp5Y2UucGxcIjp0cnVlLFwia29sb2JyemVnLnBsXCI6dHJ1ZSxcImtvbmluLnBsXCI6dHJ1ZSxcImtvbnNrb3dvbGEucGxcIjp0cnVlLFwia3V0bm8ucGxcIjp0cnVlLFwibGFweS5wbFwiOnRydWUsXCJsZWJvcmsucGxcIjp0cnVlLFwibGVnbmljYS5wbFwiOnRydWUsXCJsZXphanNrLnBsXCI6dHJ1ZSxcImxpbWFub3dhLnBsXCI6dHJ1ZSxcImxvbXphLnBsXCI6dHJ1ZSxcImxvd2ljei5wbFwiOnRydWUsXCJsdWJpbi5wbFwiOnRydWUsXCJsdWtvdy5wbFwiOnRydWUsXCJtYWxib3JrLnBsXCI6dHJ1ZSxcIm1hbG9wb2xza2EucGxcIjp0cnVlLFwibWF6b3dzemUucGxcIjp0cnVlLFwibWF6dXJ5LnBsXCI6dHJ1ZSxcIm1pZWxlYy5wbFwiOnRydWUsXCJtaWVsbm8ucGxcIjp0cnVlLFwibXJhZ293by5wbFwiOnRydWUsXCJuYWtsby5wbFwiOnRydWUsXCJub3dhcnVkYS5wbFwiOnRydWUsXCJueXNhLnBsXCI6dHJ1ZSxcIm9sYXdhLnBsXCI6dHJ1ZSxcIm9sZWNrby5wbFwiOnRydWUsXCJvbGt1c3oucGxcIjp0cnVlLFwib2xzenR5bi5wbFwiOnRydWUsXCJvcG9jem5vLnBsXCI6dHJ1ZSxcIm9wb2xlLnBsXCI6dHJ1ZSxcIm9zdHJvZGEucGxcIjp0cnVlLFwib3N0cm9sZWthLnBsXCI6dHJ1ZSxcIm9zdHJvd2llYy5wbFwiOnRydWUsXCJvc3Ryb3d3bGtwLnBsXCI6dHJ1ZSxcInBpbGEucGxcIjp0cnVlLFwicGlzei5wbFwiOnRydWUsXCJwb2RoYWxlLnBsXCI6dHJ1ZSxcInBvZGxhc2llLnBsXCI6dHJ1ZSxcInBvbGtvd2ljZS5wbFwiOnRydWUsXCJwb21vcnplLnBsXCI6dHJ1ZSxcInBvbW9yc2tpZS5wbFwiOnRydWUsXCJwcm9jaG93aWNlLnBsXCI6dHJ1ZSxcInBydXN6a293LnBsXCI6dHJ1ZSxcInByemV3b3Jzay5wbFwiOnRydWUsXCJwdWxhd3kucGxcIjp0cnVlLFwicmFkb20ucGxcIjp0cnVlLFwicmF3YS1tYXoucGxcIjp0cnVlLFwicnlibmlrLnBsXCI6dHJ1ZSxcInJ6ZXN6b3cucGxcIjp0cnVlLFwic2Fub2sucGxcIjp0cnVlLFwic2VqbnkucGxcIjp0cnVlLFwic2xhc2sucGxcIjp0cnVlLFwic2x1cHNrLnBsXCI6dHJ1ZSxcInNvc25vd2llYy5wbFwiOnRydWUsXCJzdGFsb3dhLXdvbGEucGxcIjp0cnVlLFwic2tvY3pvdy5wbFwiOnRydWUsXCJzdGFyYWNob3dpY2UucGxcIjp0cnVlLFwic3RhcmdhcmQucGxcIjp0cnVlLFwic3V3YWxraS5wbFwiOnRydWUsXCJzd2lkbmljYS5wbFwiOnRydWUsXCJzd2llYm9kemluLnBsXCI6dHJ1ZSxcInN3aW5vdWpzY2llLnBsXCI6dHJ1ZSxcInN6Y3plY2luLnBsXCI6dHJ1ZSxcInN6Y3p5dG5vLnBsXCI6dHJ1ZSxcInRhcm5vYnJ6ZWcucGxcIjp0cnVlLFwidGdvcnkucGxcIjp0cnVlLFwidHVyZWsucGxcIjp0cnVlLFwidHljaHkucGxcIjp0cnVlLFwidXN0a2EucGxcIjp0cnVlLFwid2FsYnJ6eWNoLnBsXCI6dHJ1ZSxcIndhcm1pYS5wbFwiOnRydWUsXCJ3YXJzemF3YS5wbFwiOnRydWUsXCJ3YXcucGxcIjp0cnVlLFwid2Vncm93LnBsXCI6dHJ1ZSxcIndpZWx1bi5wbFwiOnRydWUsXCJ3bG9jbC5wbFwiOnRydWUsXCJ3bG9jbGF3ZWsucGxcIjp0cnVlLFwid29kemlzbGF3LnBsXCI6dHJ1ZSxcIndvbG9taW4ucGxcIjp0cnVlLFwid3JvY2xhdy5wbFwiOnRydWUsXCJ6YWNocG9tb3IucGxcIjp0cnVlLFwiemFnYW4ucGxcIjp0cnVlLFwiemFyb3cucGxcIjp0cnVlLFwiemdvcmEucGxcIjp0cnVlLFwiemdvcnplbGVjLnBsXCI6dHJ1ZSxcInBtXCI6dHJ1ZSxcInBuXCI6dHJ1ZSxcImdvdi5wblwiOnRydWUsXCJjby5wblwiOnRydWUsXCJvcmcucG5cIjp0cnVlLFwiZWR1LnBuXCI6dHJ1ZSxcIm5ldC5wblwiOnRydWUsXCJwb3N0XCI6dHJ1ZSxcInByXCI6dHJ1ZSxcImNvbS5wclwiOnRydWUsXCJuZXQucHJcIjp0cnVlLFwib3JnLnByXCI6dHJ1ZSxcImdvdi5wclwiOnRydWUsXCJlZHUucHJcIjp0cnVlLFwiaXNsYS5wclwiOnRydWUsXCJwcm8ucHJcIjp0cnVlLFwiYml6LnByXCI6dHJ1ZSxcImluZm8ucHJcIjp0cnVlLFwibmFtZS5wclwiOnRydWUsXCJlc3QucHJcIjp0cnVlLFwicHJvZi5wclwiOnRydWUsXCJhYy5wclwiOnRydWUsXCJwcm9cIjp0cnVlLFwiYWNhLnByb1wiOnRydWUsXCJiYXIucHJvXCI6dHJ1ZSxcImNwYS5wcm9cIjp0cnVlLFwianVyLnByb1wiOnRydWUsXCJsYXcucHJvXCI6dHJ1ZSxcIm1lZC5wcm9cIjp0cnVlLFwiZW5nLnByb1wiOnRydWUsXCJwc1wiOnRydWUsXCJlZHUucHNcIjp0cnVlLFwiZ292LnBzXCI6dHJ1ZSxcInNlYy5wc1wiOnRydWUsXCJwbG8ucHNcIjp0cnVlLFwiY29tLnBzXCI6dHJ1ZSxcIm9yZy5wc1wiOnRydWUsXCJuZXQucHNcIjp0cnVlLFwicHRcIjp0cnVlLFwibmV0LnB0XCI6dHJ1ZSxcImdvdi5wdFwiOnRydWUsXCJvcmcucHRcIjp0cnVlLFwiZWR1LnB0XCI6dHJ1ZSxcImludC5wdFwiOnRydWUsXCJwdWJsLnB0XCI6dHJ1ZSxcImNvbS5wdFwiOnRydWUsXCJub21lLnB0XCI6dHJ1ZSxcInB3XCI6dHJ1ZSxcImNvLnB3XCI6dHJ1ZSxcIm5lLnB3XCI6dHJ1ZSxcIm9yLnB3XCI6dHJ1ZSxcImVkLnB3XCI6dHJ1ZSxcImdvLnB3XCI6dHJ1ZSxcImJlbGF1LnB3XCI6dHJ1ZSxcInB5XCI6dHJ1ZSxcImNvbS5weVwiOnRydWUsXCJjb29wLnB5XCI6dHJ1ZSxcImVkdS5weVwiOnRydWUsXCJnb3YucHlcIjp0cnVlLFwibWlsLnB5XCI6dHJ1ZSxcIm5ldC5weVwiOnRydWUsXCJvcmcucHlcIjp0cnVlLFwicWFcIjp0cnVlLFwiY29tLnFhXCI6dHJ1ZSxcImVkdS5xYVwiOnRydWUsXCJnb3YucWFcIjp0cnVlLFwibWlsLnFhXCI6dHJ1ZSxcIm5hbWUucWFcIjp0cnVlLFwibmV0LnFhXCI6dHJ1ZSxcIm9yZy5xYVwiOnRydWUsXCJzY2gucWFcIjp0cnVlLFwicmVcIjp0cnVlLFwiY29tLnJlXCI6dHJ1ZSxcImFzc28ucmVcIjp0cnVlLFwibm9tLnJlXCI6dHJ1ZSxcInJvXCI6dHJ1ZSxcImNvbS5yb1wiOnRydWUsXCJvcmcucm9cIjp0cnVlLFwidG0ucm9cIjp0cnVlLFwibnQucm9cIjp0cnVlLFwibm9tLnJvXCI6dHJ1ZSxcImluZm8ucm9cIjp0cnVlLFwicmVjLnJvXCI6dHJ1ZSxcImFydHMucm9cIjp0cnVlLFwiZmlybS5yb1wiOnRydWUsXCJzdG9yZS5yb1wiOnRydWUsXCJ3d3cucm9cIjp0cnVlLFwicnNcIjp0cnVlLFwiY28ucnNcIjp0cnVlLFwib3JnLnJzXCI6dHJ1ZSxcImVkdS5yc1wiOnRydWUsXCJhYy5yc1wiOnRydWUsXCJnb3YucnNcIjp0cnVlLFwiaW4ucnNcIjp0cnVlLFwicnVcIjp0cnVlLFwiYWMucnVcIjp0cnVlLFwiY29tLnJ1XCI6dHJ1ZSxcImVkdS5ydVwiOnRydWUsXCJpbnQucnVcIjp0cnVlLFwibmV0LnJ1XCI6dHJ1ZSxcIm9yZy5ydVwiOnRydWUsXCJwcC5ydVwiOnRydWUsXCJhZHlnZXlhLnJ1XCI6dHJ1ZSxcImFsdGFpLnJ1XCI6dHJ1ZSxcImFtdXIucnVcIjp0cnVlLFwiYXJraGFuZ2Vsc2sucnVcIjp0cnVlLFwiYXN0cmFraGFuLnJ1XCI6dHJ1ZSxcImJhc2hraXJpYS5ydVwiOnRydWUsXCJiZWxnb3JvZC5ydVwiOnRydWUsXCJiaXIucnVcIjp0cnVlLFwiYnJ5YW5zay5ydVwiOnRydWUsXCJidXJ5YXRpYS5ydVwiOnRydWUsXCJjYmcucnVcIjp0cnVlLFwiY2hlbC5ydVwiOnRydWUsXCJjaGVseWFiaW5zay5ydVwiOnRydWUsXCJjaGl0YS5ydVwiOnRydWUsXCJjaHVrb3RrYS5ydVwiOnRydWUsXCJjaHV2YXNoaWEucnVcIjp0cnVlLFwiZGFnZXN0YW4ucnVcIjp0cnVlLFwiZHVkaW5rYS5ydVwiOnRydWUsXCJlLWJ1cmcucnVcIjp0cnVlLFwiZ3Jvem55LnJ1XCI6dHJ1ZSxcImlya3V0c2sucnVcIjp0cnVlLFwiaXZhbm92by5ydVwiOnRydWUsXCJpemhldnNrLnJ1XCI6dHJ1ZSxcImphci5ydVwiOnRydWUsXCJqb3Noa2FyLW9sYS5ydVwiOnRydWUsXCJrYWxteWtpYS5ydVwiOnRydWUsXCJrYWx1Z2EucnVcIjp0cnVlLFwia2FtY2hhdGthLnJ1XCI6dHJ1ZSxcImthcmVsaWEucnVcIjp0cnVlLFwia2F6YW4ucnVcIjp0cnVlLFwia2Noci5ydVwiOnRydWUsXCJrZW1lcm92by5ydVwiOnRydWUsXCJraGFiYXJvdnNrLnJ1XCI6dHJ1ZSxcImtoYWthc3NpYS5ydVwiOnRydWUsXCJraHYucnVcIjp0cnVlLFwia2lyb3YucnVcIjp0cnVlLFwia29lbmlnLnJ1XCI6dHJ1ZSxcImtvbWkucnVcIjp0cnVlLFwia29zdHJvbWEucnVcIjp0cnVlLFwia3Jhc25veWFyc2sucnVcIjp0cnVlLFwia3ViYW4ucnVcIjp0cnVlLFwia3VyZ2FuLnJ1XCI6dHJ1ZSxcImt1cnNrLnJ1XCI6dHJ1ZSxcImxpcGV0c2sucnVcIjp0cnVlLFwibWFnYWRhbi5ydVwiOnRydWUsXCJtYXJpLnJ1XCI6dHJ1ZSxcIm1hcmktZWwucnVcIjp0cnVlLFwibWFyaW5lLnJ1XCI6dHJ1ZSxcIm1vcmRvdmlhLnJ1XCI6dHJ1ZSxcIm1zay5ydVwiOnRydWUsXCJtdXJtYW5zay5ydVwiOnRydWUsXCJuYWxjaGlrLnJ1XCI6dHJ1ZSxcIm5ub3YucnVcIjp0cnVlLFwibm92LnJ1XCI6dHJ1ZSxcIm5vdm9zaWJpcnNrLnJ1XCI6dHJ1ZSxcIm5zay5ydVwiOnRydWUsXCJvbXNrLnJ1XCI6dHJ1ZSxcIm9yZW5idXJnLnJ1XCI6dHJ1ZSxcIm9yeW9sLnJ1XCI6dHJ1ZSxcInBhbGFuYS5ydVwiOnRydWUsXCJwZW56YS5ydVwiOnRydWUsXCJwZXJtLnJ1XCI6dHJ1ZSxcInB0ei5ydVwiOnRydWUsXCJybmQucnVcIjp0cnVlLFwicnlhemFuLnJ1XCI6dHJ1ZSxcInNha2hhbGluLnJ1XCI6dHJ1ZSxcInNhbWFyYS5ydVwiOnRydWUsXCJzYXJhdG92LnJ1XCI6dHJ1ZSxcInNpbWJpcnNrLnJ1XCI6dHJ1ZSxcInNtb2xlbnNrLnJ1XCI6dHJ1ZSxcInNwYi5ydVwiOnRydWUsXCJzdGF2cm9wb2wucnVcIjp0cnVlLFwic3R2LnJ1XCI6dHJ1ZSxcInN1cmd1dC5ydVwiOnRydWUsXCJ0YW1ib3YucnVcIjp0cnVlLFwidGF0YXJzdGFuLnJ1XCI6dHJ1ZSxcInRvbS5ydVwiOnRydWUsXCJ0b21zay5ydVwiOnRydWUsXCJ0c2FyaXRzeW4ucnVcIjp0cnVlLFwidHNrLnJ1XCI6dHJ1ZSxcInR1bGEucnVcIjp0cnVlLFwidHV2YS5ydVwiOnRydWUsXCJ0dmVyLnJ1XCI6dHJ1ZSxcInR5dW1lbi5ydVwiOnRydWUsXCJ1ZG0ucnVcIjp0cnVlLFwidWRtdXJ0aWEucnVcIjp0cnVlLFwidWxhbi11ZGUucnVcIjp0cnVlLFwidmxhZGlrYXZrYXoucnVcIjp0cnVlLFwidmxhZGltaXIucnVcIjp0cnVlLFwidmxhZGl2b3N0b2sucnVcIjp0cnVlLFwidm9sZ29ncmFkLnJ1XCI6dHJ1ZSxcInZvbG9nZGEucnVcIjp0cnVlLFwidm9yb25lemgucnVcIjp0cnVlLFwidnJuLnJ1XCI6dHJ1ZSxcInZ5YXRrYS5ydVwiOnRydWUsXCJ5YWt1dGlhLnJ1XCI6dHJ1ZSxcInlhbWFsLnJ1XCI6dHJ1ZSxcInlhcm9zbGF2bC5ydVwiOnRydWUsXCJ5ZWthdGVyaW5idXJnLnJ1XCI6dHJ1ZSxcInl1emhuby1zYWtoYWxpbnNrLnJ1XCI6dHJ1ZSxcImFtdXJzay5ydVwiOnRydWUsXCJiYWlrYWwucnVcIjp0cnVlLFwiY213LnJ1XCI6dHJ1ZSxcImZhcmVhc3QucnVcIjp0cnVlLFwiamFtYWwucnVcIjp0cnVlLFwia21zLnJ1XCI6dHJ1ZSxcImstdXJhbHNrLnJ1XCI6dHJ1ZSxcImt1c3RhbmFpLnJ1XCI6dHJ1ZSxcImt1emJhc3MucnVcIjp0cnVlLFwibWFnbml0a2EucnVcIjp0cnVlLFwibXl0aXMucnVcIjp0cnVlLFwibmFraG9ka2EucnVcIjp0cnVlLFwibmt6LnJ1XCI6dHJ1ZSxcIm5vcmlsc2sucnVcIjp0cnVlLFwib3Nrb2wucnVcIjp0cnVlLFwicHlhdGlnb3Jzay5ydVwiOnRydWUsXCJydWJ0c292c2sucnVcIjp0cnVlLFwic256LnJ1XCI6dHJ1ZSxcInN5enJhbi5ydVwiOnRydWUsXCJ2ZG9uc2sucnVcIjp0cnVlLFwiemdyYWQucnVcIjp0cnVlLFwiZ292LnJ1XCI6dHJ1ZSxcIm1pbC5ydVwiOnRydWUsXCJ0ZXN0LnJ1XCI6dHJ1ZSxcInJ3XCI6dHJ1ZSxcImdvdi5yd1wiOnRydWUsXCJuZXQucndcIjp0cnVlLFwiZWR1LnJ3XCI6dHJ1ZSxcImFjLnJ3XCI6dHJ1ZSxcImNvbS5yd1wiOnRydWUsXCJjby5yd1wiOnRydWUsXCJpbnQucndcIjp0cnVlLFwibWlsLnJ3XCI6dHJ1ZSxcImdvdXYucndcIjp0cnVlLFwic2FcIjp0cnVlLFwiY29tLnNhXCI6dHJ1ZSxcIm5ldC5zYVwiOnRydWUsXCJvcmcuc2FcIjp0cnVlLFwiZ292LnNhXCI6dHJ1ZSxcIm1lZC5zYVwiOnRydWUsXCJwdWIuc2FcIjp0cnVlLFwiZWR1LnNhXCI6dHJ1ZSxcInNjaC5zYVwiOnRydWUsXCJzYlwiOnRydWUsXCJjb20uc2JcIjp0cnVlLFwiZWR1LnNiXCI6dHJ1ZSxcImdvdi5zYlwiOnRydWUsXCJuZXQuc2JcIjp0cnVlLFwib3JnLnNiXCI6dHJ1ZSxcInNjXCI6dHJ1ZSxcImNvbS5zY1wiOnRydWUsXCJnb3Yuc2NcIjp0cnVlLFwibmV0LnNjXCI6dHJ1ZSxcIm9yZy5zY1wiOnRydWUsXCJlZHUuc2NcIjp0cnVlLFwic2RcIjp0cnVlLFwiY29tLnNkXCI6dHJ1ZSxcIm5ldC5zZFwiOnRydWUsXCJvcmcuc2RcIjp0cnVlLFwiZWR1LnNkXCI6dHJ1ZSxcIm1lZC5zZFwiOnRydWUsXCJ0di5zZFwiOnRydWUsXCJnb3Yuc2RcIjp0cnVlLFwiaW5mby5zZFwiOnRydWUsXCJzZVwiOnRydWUsXCJhLnNlXCI6dHJ1ZSxcImFjLnNlXCI6dHJ1ZSxcImIuc2VcIjp0cnVlLFwiYmQuc2VcIjp0cnVlLFwiYnJhbmQuc2VcIjp0cnVlLFwiYy5zZVwiOnRydWUsXCJkLnNlXCI6dHJ1ZSxcImUuc2VcIjp0cnVlLFwiZi5zZVwiOnRydWUsXCJmaC5zZVwiOnRydWUsXCJmaHNrLnNlXCI6dHJ1ZSxcImZodi5zZVwiOnRydWUsXCJnLnNlXCI6dHJ1ZSxcImguc2VcIjp0cnVlLFwiaS5zZVwiOnRydWUsXCJrLnNlXCI6dHJ1ZSxcImtvbWZvcmIuc2VcIjp0cnVlLFwia29tbXVuYWxmb3JidW5kLnNlXCI6dHJ1ZSxcImtvbXZ1eC5zZVwiOnRydWUsXCJsLnNlXCI6dHJ1ZSxcImxhbmJpYi5zZVwiOnRydWUsXCJtLnNlXCI6dHJ1ZSxcIm4uc2VcIjp0cnVlLFwibmF0dXJicnVrc2d5bW4uc2VcIjp0cnVlLFwiby5zZVwiOnRydWUsXCJvcmcuc2VcIjp0cnVlLFwicC5zZVwiOnRydWUsXCJwYXJ0aS5zZVwiOnRydWUsXCJwcC5zZVwiOnRydWUsXCJwcmVzcy5zZVwiOnRydWUsXCJyLnNlXCI6dHJ1ZSxcInMuc2VcIjp0cnVlLFwidC5zZVwiOnRydWUsXCJ0bS5zZVwiOnRydWUsXCJ1LnNlXCI6dHJ1ZSxcIncuc2VcIjp0cnVlLFwieC5zZVwiOnRydWUsXCJ5LnNlXCI6dHJ1ZSxcInouc2VcIjp0cnVlLFwic2dcIjp0cnVlLFwiY29tLnNnXCI6dHJ1ZSxcIm5ldC5zZ1wiOnRydWUsXCJvcmcuc2dcIjp0cnVlLFwiZ292LnNnXCI6dHJ1ZSxcImVkdS5zZ1wiOnRydWUsXCJwZXIuc2dcIjp0cnVlLFwic2hcIjp0cnVlLFwiY29tLnNoXCI6dHJ1ZSxcIm5ldC5zaFwiOnRydWUsXCJnb3Yuc2hcIjp0cnVlLFwib3JnLnNoXCI6dHJ1ZSxcIm1pbC5zaFwiOnRydWUsXCJzaVwiOnRydWUsXCJzalwiOnRydWUsXCJza1wiOnRydWUsXCJzbFwiOnRydWUsXCJjb20uc2xcIjp0cnVlLFwibmV0LnNsXCI6dHJ1ZSxcImVkdS5zbFwiOnRydWUsXCJnb3Yuc2xcIjp0cnVlLFwib3JnLnNsXCI6dHJ1ZSxcInNtXCI6dHJ1ZSxcInNuXCI6dHJ1ZSxcImFydC5zblwiOnRydWUsXCJjb20uc25cIjp0cnVlLFwiZWR1LnNuXCI6dHJ1ZSxcImdvdXYuc25cIjp0cnVlLFwib3JnLnNuXCI6dHJ1ZSxcInBlcnNvLnNuXCI6dHJ1ZSxcInVuaXYuc25cIjp0cnVlLFwic29cIjp0cnVlLFwiY29tLnNvXCI6dHJ1ZSxcIm5ldC5zb1wiOnRydWUsXCJvcmcuc29cIjp0cnVlLFwic3JcIjp0cnVlLFwic3RcIjp0cnVlLFwiY28uc3RcIjp0cnVlLFwiY29tLnN0XCI6dHJ1ZSxcImNvbnN1bGFkby5zdFwiOnRydWUsXCJlZHUuc3RcIjp0cnVlLFwiZW1iYWl4YWRhLnN0XCI6dHJ1ZSxcImdvdi5zdFwiOnRydWUsXCJtaWwuc3RcIjp0cnVlLFwibmV0LnN0XCI6dHJ1ZSxcIm9yZy5zdFwiOnRydWUsXCJwcmluY2lwZS5zdFwiOnRydWUsXCJzYW90b21lLnN0XCI6dHJ1ZSxcInN0b3JlLnN0XCI6dHJ1ZSxcInN1XCI6dHJ1ZSxcImFkeWdleWEuc3VcIjp0cnVlLFwiYXJraGFuZ2Vsc2suc3VcIjp0cnVlLFwiYmFsYXNob3Yuc3VcIjp0cnVlLFwiYmFzaGtpcmlhLnN1XCI6dHJ1ZSxcImJyeWFuc2suc3VcIjp0cnVlLFwiZGFnZXN0YW4uc3VcIjp0cnVlLFwiZ3Jvem55LnN1XCI6dHJ1ZSxcIml2YW5vdm8uc3VcIjp0cnVlLFwia2FsbXlraWEuc3VcIjp0cnVlLFwia2FsdWdhLnN1XCI6dHJ1ZSxcImthcmVsaWEuc3VcIjp0cnVlLFwia2hha2Fzc2lhLnN1XCI6dHJ1ZSxcImtyYXNub2Rhci5zdVwiOnRydWUsXCJrdXJnYW4uc3VcIjp0cnVlLFwibGVudWcuc3VcIjp0cnVlLFwibW9yZG92aWEuc3VcIjp0cnVlLFwibXNrLnN1XCI6dHJ1ZSxcIm11cm1hbnNrLnN1XCI6dHJ1ZSxcIm5hbGNoaWsuc3VcIjp0cnVlLFwibm92LnN1XCI6dHJ1ZSxcIm9ibmluc2suc3VcIjp0cnVlLFwicGVuemEuc3VcIjp0cnVlLFwicG9rcm92c2suc3VcIjp0cnVlLFwic29jaGkuc3VcIjp0cnVlLFwic3BiLnN1XCI6dHJ1ZSxcInRvZ2xpYXR0aS5zdVwiOnRydWUsXCJ0cm9pdHNrLnN1XCI6dHJ1ZSxcInR1bGEuc3VcIjp0cnVlLFwidHV2YS5zdVwiOnRydWUsXCJ2bGFkaWthdmthei5zdVwiOnRydWUsXCJ2bGFkaW1pci5zdVwiOnRydWUsXCJ2b2xvZ2RhLnN1XCI6dHJ1ZSxcInN2XCI6dHJ1ZSxcImNvbS5zdlwiOnRydWUsXCJlZHUuc3ZcIjp0cnVlLFwiZ29iLnN2XCI6dHJ1ZSxcIm9yZy5zdlwiOnRydWUsXCJyZWQuc3ZcIjp0cnVlLFwic3hcIjp0cnVlLFwiZ292LnN4XCI6dHJ1ZSxcInN5XCI6dHJ1ZSxcImVkdS5zeVwiOnRydWUsXCJnb3Yuc3lcIjp0cnVlLFwibmV0LnN5XCI6dHJ1ZSxcIm1pbC5zeVwiOnRydWUsXCJjb20uc3lcIjp0cnVlLFwib3JnLnN5XCI6dHJ1ZSxcInN6XCI6dHJ1ZSxcImNvLnN6XCI6dHJ1ZSxcImFjLnN6XCI6dHJ1ZSxcIm9yZy5zelwiOnRydWUsXCJ0Y1wiOnRydWUsXCJ0ZFwiOnRydWUsXCJ0ZWxcIjp0cnVlLFwidGZcIjp0cnVlLFwidGdcIjp0cnVlLFwidGhcIjp0cnVlLFwiYWMudGhcIjp0cnVlLFwiY28udGhcIjp0cnVlLFwiZ28udGhcIjp0cnVlLFwiaW4udGhcIjp0cnVlLFwibWkudGhcIjp0cnVlLFwibmV0LnRoXCI6dHJ1ZSxcIm9yLnRoXCI6dHJ1ZSxcInRqXCI6dHJ1ZSxcImFjLnRqXCI6dHJ1ZSxcImJpei50alwiOnRydWUsXCJjby50alwiOnRydWUsXCJjb20udGpcIjp0cnVlLFwiZWR1LnRqXCI6dHJ1ZSxcImdvLnRqXCI6dHJ1ZSxcImdvdi50alwiOnRydWUsXCJpbnQudGpcIjp0cnVlLFwibWlsLnRqXCI6dHJ1ZSxcIm5hbWUudGpcIjp0cnVlLFwibmV0LnRqXCI6dHJ1ZSxcIm5pYy50alwiOnRydWUsXCJvcmcudGpcIjp0cnVlLFwidGVzdC50alwiOnRydWUsXCJ3ZWIudGpcIjp0cnVlLFwidGtcIjp0cnVlLFwidGxcIjp0cnVlLFwiZ292LnRsXCI6dHJ1ZSxcInRtXCI6dHJ1ZSxcImNvbS50bVwiOnRydWUsXCJjby50bVwiOnRydWUsXCJvcmcudG1cIjp0cnVlLFwibmV0LnRtXCI6dHJ1ZSxcIm5vbS50bVwiOnRydWUsXCJnb3YudG1cIjp0cnVlLFwibWlsLnRtXCI6dHJ1ZSxcImVkdS50bVwiOnRydWUsXCJ0blwiOnRydWUsXCJjb20udG5cIjp0cnVlLFwiZW5zLnRuXCI6dHJ1ZSxcImZpbi50blwiOnRydWUsXCJnb3YudG5cIjp0cnVlLFwiaW5kLnRuXCI6dHJ1ZSxcImludGwudG5cIjp0cnVlLFwibmF0LnRuXCI6dHJ1ZSxcIm5ldC50blwiOnRydWUsXCJvcmcudG5cIjp0cnVlLFwiaW5mby50blwiOnRydWUsXCJwZXJzby50blwiOnRydWUsXCJ0b3VyaXNtLnRuXCI6dHJ1ZSxcImVkdW5ldC50blwiOnRydWUsXCJybnJ0LnRuXCI6dHJ1ZSxcInJucy50blwiOnRydWUsXCJybnUudG5cIjp0cnVlLFwibWluY29tLnRuXCI6dHJ1ZSxcImFncmluZXQudG5cIjp0cnVlLFwiZGVmZW5zZS50blwiOnRydWUsXCJ0dXJlbi50blwiOnRydWUsXCJ0b1wiOnRydWUsXCJjb20udG9cIjp0cnVlLFwiZ292LnRvXCI6dHJ1ZSxcIm5ldC50b1wiOnRydWUsXCJvcmcudG9cIjp0cnVlLFwiZWR1LnRvXCI6dHJ1ZSxcIm1pbC50b1wiOnRydWUsXCJ0cFwiOnRydWUsXCJ0clwiOnRydWUsXCJjb20udHJcIjp0cnVlLFwiaW5mby50clwiOnRydWUsXCJiaXoudHJcIjp0cnVlLFwibmV0LnRyXCI6dHJ1ZSxcIm9yZy50clwiOnRydWUsXCJ3ZWIudHJcIjp0cnVlLFwiZ2VuLnRyXCI6dHJ1ZSxcInR2LnRyXCI6dHJ1ZSxcImF2LnRyXCI6dHJ1ZSxcImRyLnRyXCI6dHJ1ZSxcImJicy50clwiOnRydWUsXCJuYW1lLnRyXCI6dHJ1ZSxcInRlbC50clwiOnRydWUsXCJnb3YudHJcIjp0cnVlLFwiYmVsLnRyXCI6dHJ1ZSxcInBvbC50clwiOnRydWUsXCJtaWwudHJcIjp0cnVlLFwiazEyLnRyXCI6dHJ1ZSxcImVkdS50clwiOnRydWUsXCJrZXAudHJcIjp0cnVlLFwibmMudHJcIjp0cnVlLFwiZ292Lm5jLnRyXCI6dHJ1ZSxcInRyYXZlbFwiOnRydWUsXCJ0dFwiOnRydWUsXCJjby50dFwiOnRydWUsXCJjb20udHRcIjp0cnVlLFwib3JnLnR0XCI6dHJ1ZSxcIm5ldC50dFwiOnRydWUsXCJiaXoudHRcIjp0cnVlLFwiaW5mby50dFwiOnRydWUsXCJwcm8udHRcIjp0cnVlLFwiaW50LnR0XCI6dHJ1ZSxcImNvb3AudHRcIjp0cnVlLFwiam9icy50dFwiOnRydWUsXCJtb2JpLnR0XCI6dHJ1ZSxcInRyYXZlbC50dFwiOnRydWUsXCJtdXNldW0udHRcIjp0cnVlLFwiYWVyby50dFwiOnRydWUsXCJuYW1lLnR0XCI6dHJ1ZSxcImdvdi50dFwiOnRydWUsXCJlZHUudHRcIjp0cnVlLFwidHZcIjp0cnVlLFwidHdcIjp0cnVlLFwiZWR1LnR3XCI6dHJ1ZSxcImdvdi50d1wiOnRydWUsXCJtaWwudHdcIjp0cnVlLFwiY29tLnR3XCI6dHJ1ZSxcIm5ldC50d1wiOnRydWUsXCJvcmcudHdcIjp0cnVlLFwiaWR2LnR3XCI6dHJ1ZSxcImdhbWUudHdcIjp0cnVlLFwiZWJpei50d1wiOnRydWUsXCJjbHViLnR3XCI6dHJ1ZSxcInhuLS16ZjBhbzY0YS50d1wiOnRydWUsXCJ4bi0tdWMwYXR2LnR3XCI6dHJ1ZSxcInhuLS1jenJ3MjhiLnR3XCI6dHJ1ZSxcInR6XCI6dHJ1ZSxcImFjLnR6XCI6dHJ1ZSxcImNvLnR6XCI6dHJ1ZSxcImdvLnR6XCI6dHJ1ZSxcImhvdGVsLnR6XCI6dHJ1ZSxcImluZm8udHpcIjp0cnVlLFwibWUudHpcIjp0cnVlLFwibWlsLnR6XCI6dHJ1ZSxcIm1vYmkudHpcIjp0cnVlLFwibmUudHpcIjp0cnVlLFwib3IudHpcIjp0cnVlLFwic2MudHpcIjp0cnVlLFwidHYudHpcIjp0cnVlLFwidWFcIjp0cnVlLFwiY29tLnVhXCI6dHJ1ZSxcImVkdS51YVwiOnRydWUsXCJnb3YudWFcIjp0cnVlLFwiaW4udWFcIjp0cnVlLFwibmV0LnVhXCI6dHJ1ZSxcIm9yZy51YVwiOnRydWUsXCJjaGVya2Fzc3kudWFcIjp0cnVlLFwiY2hlcmthc3kudWFcIjp0cnVlLFwiY2hlcm5pZ292LnVhXCI6dHJ1ZSxcImNoZXJuaWhpdi51YVwiOnRydWUsXCJjaGVybml2dHNpLnVhXCI6dHJ1ZSxcImNoZXJub3Z0c3kudWFcIjp0cnVlLFwiY2sudWFcIjp0cnVlLFwiY24udWFcIjp0cnVlLFwiY3IudWFcIjp0cnVlLFwiY3JpbWVhLnVhXCI6dHJ1ZSxcImN2LnVhXCI6dHJ1ZSxcImRuLnVhXCI6dHJ1ZSxcImRuZXByb3BldHJvdnNrLnVhXCI6dHJ1ZSxcImRuaXByb3BldHJvdnNrLnVhXCI6dHJ1ZSxcImRvbWluaWMudWFcIjp0cnVlLFwiZG9uZXRzay51YVwiOnRydWUsXCJkcC51YVwiOnRydWUsXCJpZi51YVwiOnRydWUsXCJpdmFuby1mcmFua2l2c2sudWFcIjp0cnVlLFwia2gudWFcIjp0cnVlLFwia2hhcmtpdi51YVwiOnRydWUsXCJraGFya292LnVhXCI6dHJ1ZSxcImtoZXJzb24udWFcIjp0cnVlLFwia2htZWxuaXRza2l5LnVhXCI6dHJ1ZSxcImtobWVsbnl0c2t5aS51YVwiOnRydWUsXCJraWV2LnVhXCI6dHJ1ZSxcImtpcm92b2dyYWQudWFcIjp0cnVlLFwia20udWFcIjp0cnVlLFwia3IudWFcIjp0cnVlLFwia3J5bS51YVwiOnRydWUsXCJrcy51YVwiOnRydWUsXCJrdi51YVwiOnRydWUsXCJreWl2LnVhXCI6dHJ1ZSxcImxnLnVhXCI6dHJ1ZSxcImx0LnVhXCI6dHJ1ZSxcImx1Z2Fuc2sudWFcIjp0cnVlLFwibHV0c2sudWFcIjp0cnVlLFwibHYudWFcIjp0cnVlLFwibHZpdi51YVwiOnRydWUsXCJtay51YVwiOnRydWUsXCJteWtvbGFpdi51YVwiOnRydWUsXCJuaWtvbGFldi51YVwiOnRydWUsXCJvZC51YVwiOnRydWUsXCJvZGVzYS51YVwiOnRydWUsXCJvZGVzc2EudWFcIjp0cnVlLFwicGwudWFcIjp0cnVlLFwicG9sdGF2YS51YVwiOnRydWUsXCJyaXZuZS51YVwiOnRydWUsXCJyb3Zuby51YVwiOnRydWUsXCJydi51YVwiOnRydWUsXCJzYi51YVwiOnRydWUsXCJzZWJhc3RvcG9sLnVhXCI6dHJ1ZSxcInNldmFzdG9wb2wudWFcIjp0cnVlLFwic20udWFcIjp0cnVlLFwic3VteS51YVwiOnRydWUsXCJ0ZS51YVwiOnRydWUsXCJ0ZXJub3BpbC51YVwiOnRydWUsXCJ1ei51YVwiOnRydWUsXCJ1emhnb3JvZC51YVwiOnRydWUsXCJ2aW5uaWNhLnVhXCI6dHJ1ZSxcInZpbm55dHNpYS51YVwiOnRydWUsXCJ2bi51YVwiOnRydWUsXCJ2b2x5bi51YVwiOnRydWUsXCJ5YWx0YS51YVwiOnRydWUsXCJ6YXBvcml6aHpoZS51YVwiOnRydWUsXCJ6YXBvcml6aHpoaWEudWFcIjp0cnVlLFwiemhpdG9taXIudWFcIjp0cnVlLFwiemh5dG9teXIudWFcIjp0cnVlLFwienAudWFcIjp0cnVlLFwienQudWFcIjp0cnVlLFwidWdcIjp0cnVlLFwiY28udWdcIjp0cnVlLFwib3IudWdcIjp0cnVlLFwiYWMudWdcIjp0cnVlLFwic2MudWdcIjp0cnVlLFwiZ28udWdcIjp0cnVlLFwibmUudWdcIjp0cnVlLFwiY29tLnVnXCI6dHJ1ZSxcIm9yZy51Z1wiOnRydWUsXCJ1a1wiOnRydWUsXCJhYy51a1wiOnRydWUsXCJjby51a1wiOnRydWUsXCJnb3YudWtcIjp0cnVlLFwibHRkLnVrXCI6dHJ1ZSxcIm1lLnVrXCI6dHJ1ZSxcIm5ldC51a1wiOnRydWUsXCJuaHMudWtcIjp0cnVlLFwib3JnLnVrXCI6dHJ1ZSxcInBsYy51a1wiOnRydWUsXCJwb2xpY2UudWtcIjp0cnVlLFwiKi5zY2gudWtcIjp0cnVlLFwidXNcIjp0cnVlLFwiZG5pLnVzXCI6dHJ1ZSxcImZlZC51c1wiOnRydWUsXCJpc2EudXNcIjp0cnVlLFwia2lkcy51c1wiOnRydWUsXCJuc24udXNcIjp0cnVlLFwiYWsudXNcIjp0cnVlLFwiYWwudXNcIjp0cnVlLFwiYXIudXNcIjp0cnVlLFwiYXMudXNcIjp0cnVlLFwiYXoudXNcIjp0cnVlLFwiY2EudXNcIjp0cnVlLFwiY28udXNcIjp0cnVlLFwiY3QudXNcIjp0cnVlLFwiZGMudXNcIjp0cnVlLFwiZGUudXNcIjp0cnVlLFwiZmwudXNcIjp0cnVlLFwiZ2EudXNcIjp0cnVlLFwiZ3UudXNcIjp0cnVlLFwiaGkudXNcIjp0cnVlLFwiaWEudXNcIjp0cnVlLFwiaWQudXNcIjp0cnVlLFwiaWwudXNcIjp0cnVlLFwiaW4udXNcIjp0cnVlLFwia3MudXNcIjp0cnVlLFwia3kudXNcIjp0cnVlLFwibGEudXNcIjp0cnVlLFwibWEudXNcIjp0cnVlLFwibWQudXNcIjp0cnVlLFwibWUudXNcIjp0cnVlLFwibWkudXNcIjp0cnVlLFwibW4udXNcIjp0cnVlLFwibW8udXNcIjp0cnVlLFwibXMudXNcIjp0cnVlLFwibXQudXNcIjp0cnVlLFwibmMudXNcIjp0cnVlLFwibmQudXNcIjp0cnVlLFwibmUudXNcIjp0cnVlLFwibmgudXNcIjp0cnVlLFwibmoudXNcIjp0cnVlLFwibm0udXNcIjp0cnVlLFwibnYudXNcIjp0cnVlLFwibnkudXNcIjp0cnVlLFwib2gudXNcIjp0cnVlLFwib2sudXNcIjp0cnVlLFwib3IudXNcIjp0cnVlLFwicGEudXNcIjp0cnVlLFwicHIudXNcIjp0cnVlLFwicmkudXNcIjp0cnVlLFwic2MudXNcIjp0cnVlLFwic2QudXNcIjp0cnVlLFwidG4udXNcIjp0cnVlLFwidHgudXNcIjp0cnVlLFwidXQudXNcIjp0cnVlLFwidmkudXNcIjp0cnVlLFwidnQudXNcIjp0cnVlLFwidmEudXNcIjp0cnVlLFwid2EudXNcIjp0cnVlLFwid2kudXNcIjp0cnVlLFwid3YudXNcIjp0cnVlLFwid3kudXNcIjp0cnVlLFwiazEyLmFrLnVzXCI6dHJ1ZSxcImsxMi5hbC51c1wiOnRydWUsXCJrMTIuYXIudXNcIjp0cnVlLFwiazEyLmFzLnVzXCI6dHJ1ZSxcImsxMi5hei51c1wiOnRydWUsXCJrMTIuY2EudXNcIjp0cnVlLFwiazEyLmNvLnVzXCI6dHJ1ZSxcImsxMi5jdC51c1wiOnRydWUsXCJrMTIuZGMudXNcIjp0cnVlLFwiazEyLmRlLnVzXCI6dHJ1ZSxcImsxMi5mbC51c1wiOnRydWUsXCJrMTIuZ2EudXNcIjp0cnVlLFwiazEyLmd1LnVzXCI6dHJ1ZSxcImsxMi5pYS51c1wiOnRydWUsXCJrMTIuaWQudXNcIjp0cnVlLFwiazEyLmlsLnVzXCI6dHJ1ZSxcImsxMi5pbi51c1wiOnRydWUsXCJrMTIua3MudXNcIjp0cnVlLFwiazEyLmt5LnVzXCI6dHJ1ZSxcImsxMi5sYS51c1wiOnRydWUsXCJrMTIubWEudXNcIjp0cnVlLFwiazEyLm1kLnVzXCI6dHJ1ZSxcImsxMi5tZS51c1wiOnRydWUsXCJrMTIubWkudXNcIjp0cnVlLFwiazEyLm1uLnVzXCI6dHJ1ZSxcImsxMi5tby51c1wiOnRydWUsXCJrMTIubXMudXNcIjp0cnVlLFwiazEyLm10LnVzXCI6dHJ1ZSxcImsxMi5uYy51c1wiOnRydWUsXCJrMTIubmUudXNcIjp0cnVlLFwiazEyLm5oLnVzXCI6dHJ1ZSxcImsxMi5uai51c1wiOnRydWUsXCJrMTIubm0udXNcIjp0cnVlLFwiazEyLm52LnVzXCI6dHJ1ZSxcImsxMi5ueS51c1wiOnRydWUsXCJrMTIub2gudXNcIjp0cnVlLFwiazEyLm9rLnVzXCI6dHJ1ZSxcImsxMi5vci51c1wiOnRydWUsXCJrMTIucGEudXNcIjp0cnVlLFwiazEyLnByLnVzXCI6dHJ1ZSxcImsxMi5yaS51c1wiOnRydWUsXCJrMTIuc2MudXNcIjp0cnVlLFwiazEyLnRuLnVzXCI6dHJ1ZSxcImsxMi50eC51c1wiOnRydWUsXCJrMTIudXQudXNcIjp0cnVlLFwiazEyLnZpLnVzXCI6dHJ1ZSxcImsxMi52dC51c1wiOnRydWUsXCJrMTIudmEudXNcIjp0cnVlLFwiazEyLndhLnVzXCI6dHJ1ZSxcImsxMi53aS51c1wiOnRydWUsXCJrMTIud3kudXNcIjp0cnVlLFwiY2MuYWsudXNcIjp0cnVlLFwiY2MuYWwudXNcIjp0cnVlLFwiY2MuYXIudXNcIjp0cnVlLFwiY2MuYXMudXNcIjp0cnVlLFwiY2MuYXoudXNcIjp0cnVlLFwiY2MuY2EudXNcIjp0cnVlLFwiY2MuY28udXNcIjp0cnVlLFwiY2MuY3QudXNcIjp0cnVlLFwiY2MuZGMudXNcIjp0cnVlLFwiY2MuZGUudXNcIjp0cnVlLFwiY2MuZmwudXNcIjp0cnVlLFwiY2MuZ2EudXNcIjp0cnVlLFwiY2MuZ3UudXNcIjp0cnVlLFwiY2MuaGkudXNcIjp0cnVlLFwiY2MuaWEudXNcIjp0cnVlLFwiY2MuaWQudXNcIjp0cnVlLFwiY2MuaWwudXNcIjp0cnVlLFwiY2MuaW4udXNcIjp0cnVlLFwiY2Mua3MudXNcIjp0cnVlLFwiY2Mua3kudXNcIjp0cnVlLFwiY2MubGEudXNcIjp0cnVlLFwiY2MubWEudXNcIjp0cnVlLFwiY2MubWQudXNcIjp0cnVlLFwiY2MubWUudXNcIjp0cnVlLFwiY2MubWkudXNcIjp0cnVlLFwiY2MubW4udXNcIjp0cnVlLFwiY2MubW8udXNcIjp0cnVlLFwiY2MubXMudXNcIjp0cnVlLFwiY2MubXQudXNcIjp0cnVlLFwiY2MubmMudXNcIjp0cnVlLFwiY2MubmQudXNcIjp0cnVlLFwiY2MubmUudXNcIjp0cnVlLFwiY2MubmgudXNcIjp0cnVlLFwiY2MubmoudXNcIjp0cnVlLFwiY2Mubm0udXNcIjp0cnVlLFwiY2MubnYudXNcIjp0cnVlLFwiY2MubnkudXNcIjp0cnVlLFwiY2Mub2gudXNcIjp0cnVlLFwiY2Mub2sudXNcIjp0cnVlLFwiY2Mub3IudXNcIjp0cnVlLFwiY2MucGEudXNcIjp0cnVlLFwiY2MucHIudXNcIjp0cnVlLFwiY2MucmkudXNcIjp0cnVlLFwiY2Muc2MudXNcIjp0cnVlLFwiY2Muc2QudXNcIjp0cnVlLFwiY2MudG4udXNcIjp0cnVlLFwiY2MudHgudXNcIjp0cnVlLFwiY2MudXQudXNcIjp0cnVlLFwiY2MudmkudXNcIjp0cnVlLFwiY2MudnQudXNcIjp0cnVlLFwiY2MudmEudXNcIjp0cnVlLFwiY2Mud2EudXNcIjp0cnVlLFwiY2Mud2kudXNcIjp0cnVlLFwiY2Mud3YudXNcIjp0cnVlLFwiY2Mud3kudXNcIjp0cnVlLFwibGliLmFrLnVzXCI6dHJ1ZSxcImxpYi5hbC51c1wiOnRydWUsXCJsaWIuYXIudXNcIjp0cnVlLFwibGliLmFzLnVzXCI6dHJ1ZSxcImxpYi5hei51c1wiOnRydWUsXCJsaWIuY2EudXNcIjp0cnVlLFwibGliLmNvLnVzXCI6dHJ1ZSxcImxpYi5jdC51c1wiOnRydWUsXCJsaWIuZGMudXNcIjp0cnVlLFwibGliLmRlLnVzXCI6dHJ1ZSxcImxpYi5mbC51c1wiOnRydWUsXCJsaWIuZ2EudXNcIjp0cnVlLFwibGliLmd1LnVzXCI6dHJ1ZSxcImxpYi5oaS51c1wiOnRydWUsXCJsaWIuaWEudXNcIjp0cnVlLFwibGliLmlkLnVzXCI6dHJ1ZSxcImxpYi5pbC51c1wiOnRydWUsXCJsaWIuaW4udXNcIjp0cnVlLFwibGliLmtzLnVzXCI6dHJ1ZSxcImxpYi5reS51c1wiOnRydWUsXCJsaWIubGEudXNcIjp0cnVlLFwibGliLm1hLnVzXCI6dHJ1ZSxcImxpYi5tZC51c1wiOnRydWUsXCJsaWIubWUudXNcIjp0cnVlLFwibGliLm1pLnVzXCI6dHJ1ZSxcImxpYi5tbi51c1wiOnRydWUsXCJsaWIubW8udXNcIjp0cnVlLFwibGliLm1zLnVzXCI6dHJ1ZSxcImxpYi5tdC51c1wiOnRydWUsXCJsaWIubmMudXNcIjp0cnVlLFwibGliLm5kLnVzXCI6dHJ1ZSxcImxpYi5uZS51c1wiOnRydWUsXCJsaWIubmgudXNcIjp0cnVlLFwibGliLm5qLnVzXCI6dHJ1ZSxcImxpYi5ubS51c1wiOnRydWUsXCJsaWIubnYudXNcIjp0cnVlLFwibGliLm55LnVzXCI6dHJ1ZSxcImxpYi5vaC51c1wiOnRydWUsXCJsaWIub2sudXNcIjp0cnVlLFwibGliLm9yLnVzXCI6dHJ1ZSxcImxpYi5wYS51c1wiOnRydWUsXCJsaWIucHIudXNcIjp0cnVlLFwibGliLnJpLnVzXCI6dHJ1ZSxcImxpYi5zYy51c1wiOnRydWUsXCJsaWIuc2QudXNcIjp0cnVlLFwibGliLnRuLnVzXCI6dHJ1ZSxcImxpYi50eC51c1wiOnRydWUsXCJsaWIudXQudXNcIjp0cnVlLFwibGliLnZpLnVzXCI6dHJ1ZSxcImxpYi52dC51c1wiOnRydWUsXCJsaWIudmEudXNcIjp0cnVlLFwibGliLndhLnVzXCI6dHJ1ZSxcImxpYi53aS51c1wiOnRydWUsXCJsaWIud3kudXNcIjp0cnVlLFwicHZ0LmsxMi5tYS51c1wiOnRydWUsXCJjaHRyLmsxMi5tYS51c1wiOnRydWUsXCJwYXJvY2guazEyLm1hLnVzXCI6dHJ1ZSxcInV5XCI6dHJ1ZSxcImNvbS51eVwiOnRydWUsXCJlZHUudXlcIjp0cnVlLFwiZ3ViLnV5XCI6dHJ1ZSxcIm1pbC51eVwiOnRydWUsXCJuZXQudXlcIjp0cnVlLFwib3JnLnV5XCI6dHJ1ZSxcInV6XCI6dHJ1ZSxcImNvLnV6XCI6dHJ1ZSxcImNvbS51elwiOnRydWUsXCJuZXQudXpcIjp0cnVlLFwib3JnLnV6XCI6dHJ1ZSxcInZhXCI6dHJ1ZSxcInZjXCI6dHJ1ZSxcImNvbS52Y1wiOnRydWUsXCJuZXQudmNcIjp0cnVlLFwib3JnLnZjXCI6dHJ1ZSxcImdvdi52Y1wiOnRydWUsXCJtaWwudmNcIjp0cnVlLFwiZWR1LnZjXCI6dHJ1ZSxcInZlXCI6dHJ1ZSxcImFydHMudmVcIjp0cnVlLFwiY28udmVcIjp0cnVlLFwiY29tLnZlXCI6dHJ1ZSxcImUxMi52ZVwiOnRydWUsXCJlZHUudmVcIjp0cnVlLFwiZmlybS52ZVwiOnRydWUsXCJnb2IudmVcIjp0cnVlLFwiZ292LnZlXCI6dHJ1ZSxcImluZm8udmVcIjp0cnVlLFwiaW50LnZlXCI6dHJ1ZSxcIm1pbC52ZVwiOnRydWUsXCJuZXQudmVcIjp0cnVlLFwib3JnLnZlXCI6dHJ1ZSxcInJlYy52ZVwiOnRydWUsXCJzdG9yZS52ZVwiOnRydWUsXCJ0ZWMudmVcIjp0cnVlLFwid2ViLnZlXCI6dHJ1ZSxcInZnXCI6dHJ1ZSxcInZpXCI6dHJ1ZSxcImNvLnZpXCI6dHJ1ZSxcImNvbS52aVwiOnRydWUsXCJrMTIudmlcIjp0cnVlLFwibmV0LnZpXCI6dHJ1ZSxcIm9yZy52aVwiOnRydWUsXCJ2blwiOnRydWUsXCJjb20udm5cIjp0cnVlLFwibmV0LnZuXCI6dHJ1ZSxcIm9yZy52blwiOnRydWUsXCJlZHUudm5cIjp0cnVlLFwiZ292LnZuXCI6dHJ1ZSxcImludC52blwiOnRydWUsXCJhYy52blwiOnRydWUsXCJiaXoudm5cIjp0cnVlLFwiaW5mby52blwiOnRydWUsXCJuYW1lLnZuXCI6dHJ1ZSxcInByby52blwiOnRydWUsXCJoZWFsdGgudm5cIjp0cnVlLFwidnVcIjp0cnVlLFwiY29tLnZ1XCI6dHJ1ZSxcImVkdS52dVwiOnRydWUsXCJuZXQudnVcIjp0cnVlLFwib3JnLnZ1XCI6dHJ1ZSxcIndmXCI6dHJ1ZSxcIndzXCI6dHJ1ZSxcImNvbS53c1wiOnRydWUsXCJuZXQud3NcIjp0cnVlLFwib3JnLndzXCI6dHJ1ZSxcImdvdi53c1wiOnRydWUsXCJlZHUud3NcIjp0cnVlLFwieXRcIjp0cnVlLFwieG4tLW1nYmFhbTdhOGhcIjp0cnVlLFwieG4tLXk5YTNhcVwiOnRydWUsXCJ4bi0tNTRiN2Z0YTBjY1wiOnRydWUsXCJ4bi0tOTBhaXNcIjp0cnVlLFwieG4tLWZpcXM4c1wiOnRydWUsXCJ4bi0tZmlxejlzXCI6dHJ1ZSxcInhuLS1sZ2JiYXQxYWQ4alwiOnRydWUsXCJ4bi0td2diaDFjXCI6dHJ1ZSxcInhuLS1ub2RlXCI6dHJ1ZSxcInhuLS1xeGFtXCI6dHJ1ZSxcInhuLS1qNncxOTNnXCI6dHJ1ZSxcInhuLS1oMmJyajljXCI6dHJ1ZSxcInhuLS1tZ2JiaDFhNzFlXCI6dHJ1ZSxcInhuLS1mcGNyajljM2RcIjp0cnVlLFwieG4tLWdlY3JqOWNcIjp0cnVlLFwieG4tLXM5YnJqOWNcIjp0cnVlLFwieG4tLTQ1YnJqOWNcIjp0cnVlLFwieG4tLXhrYzJkbDNhNWVlMGhcIjp0cnVlLFwieG4tLW1nYmEzYTRmMTZhXCI6dHJ1ZSxcInhuLS1tZ2JhM2E0ZnJhXCI6dHJ1ZSxcInhuLS1tZ2J0eDJiXCI6dHJ1ZSxcInhuLS1tZ2JheWg3Z3BhXCI6dHJ1ZSxcInhuLS0zZTBiNzA3ZVwiOnRydWUsXCJ4bi0tODBhbzIxYVwiOnRydWUsXCJ4bi0tZnpjMmM5ZTJjXCI6dHJ1ZSxcInhuLS14a2MyYWwzaHllMmFcIjp0cnVlLFwieG4tLW1nYmMwYTlhemNnXCI6dHJ1ZSxcInhuLS1kMWFsZlwiOnRydWUsXCJ4bi0tbDFhY2NcIjp0cnVlLFwieG4tLW1peDg5MWZcIjp0cnVlLFwieG4tLW1peDA4MmZcIjp0cnVlLFwieG4tLW1nYng0Y2QwYWJcIjp0cnVlLFwieG4tLW1nYjlhd2JmXCI6dHJ1ZSxcInhuLS1tZ2JhaTlhemdxcDZqXCI6dHJ1ZSxcInhuLS1tZ2JhaTlhNWV2YTAwYlwiOnRydWUsXCJ4bi0teWdiaTJhbW14XCI6dHJ1ZSxcInhuLS05MGEzYWNcIjp0cnVlLFwieG4tLW8xYWMueG4tLTkwYTNhY1wiOnRydWUsXCJ4bi0tYzFhdmcueG4tLTkwYTNhY1wiOnRydWUsXCJ4bi0tOTBhemgueG4tLTkwYTNhY1wiOnRydWUsXCJ4bi0tZDFhdC54bi0tOTBhM2FjXCI6dHJ1ZSxcInhuLS1vMWFjaC54bi0tOTBhM2FjXCI6dHJ1ZSxcInhuLS04MGF1LnhuLS05MGEzYWNcIjp0cnVlLFwieG4tLXAxYWlcIjp0cnVlLFwieG4tLXdnYmw2YVwiOnRydWUsXCJ4bi0tbWdiZXJwNGE1ZDRhclwiOnRydWUsXCJ4bi0tbWdiZXJwNGE1ZDRhODdnXCI6dHJ1ZSxcInhuLS1tZ2JxbHk3YzBhNjdmYmNcIjp0cnVlLFwieG4tLW1nYnFseTdjdmFmclwiOnRydWUsXCJ4bi0tbWdicGwyZmhcIjp0cnVlLFwieG4tLXlmcm80aTY3b1wiOnRydWUsXCJ4bi0tY2xjaGMwZWEwYjJnMmE5Z2NkXCI6dHJ1ZSxcInhuLS1vZ2JwZjhmbFwiOnRydWUsXCJ4bi0tbWdidGY4ZmxcIjp0cnVlLFwieG4tLW8zY3c0aFwiOnRydWUsXCJ4bi0tcGdiczBkaFwiOnRydWUsXCJ4bi0ta3ByeTU3ZFwiOnRydWUsXCJ4bi0ta3BydzEzZFwiOnRydWUsXCJ4bi0tbm54Mzg4YVwiOnRydWUsXCJ4bi0tajFhbWhcIjp0cnVlLFwieG4tLW1nYjJkZGVzXCI6dHJ1ZSxcInh4eFwiOnRydWUsXCIqLnllXCI6dHJ1ZSxcImFjLnphXCI6dHJ1ZSxcImFncmljYS56YVwiOnRydWUsXCJhbHQuemFcIjp0cnVlLFwiY28uemFcIjp0cnVlLFwiZWR1LnphXCI6dHJ1ZSxcImdvdi56YVwiOnRydWUsXCJncm9uZGFyLnphXCI6dHJ1ZSxcImxhdy56YVwiOnRydWUsXCJtaWwuemFcIjp0cnVlLFwibmV0LnphXCI6dHJ1ZSxcIm5nby56YVwiOnRydWUsXCJuaXMuemFcIjp0cnVlLFwibm9tLnphXCI6dHJ1ZSxcIm9yZy56YVwiOnRydWUsXCJzY2hvb2wuemFcIjp0cnVlLFwidG0uemFcIjp0cnVlLFwid2ViLnphXCI6dHJ1ZSxcIiouem1cIjp0cnVlLFwiKi56d1wiOnRydWUsXCJhYWFcIjp0cnVlLFwiYWFycFwiOnRydWUsXCJhYmFydGhcIjp0cnVlLFwiYWJiXCI6dHJ1ZSxcImFiYm90dFwiOnRydWUsXCJhYmJ2aWVcIjp0cnVlLFwiYWJjXCI6dHJ1ZSxcImFibGVcIjp0cnVlLFwiYWJvZ2Fkb1wiOnRydWUsXCJhYnVkaGFiaVwiOnRydWUsXCJhY2FkZW15XCI6dHJ1ZSxcImFjY2VudHVyZVwiOnRydWUsXCJhY2NvdW50YW50XCI6dHJ1ZSxcImFjY291bnRhbnRzXCI6dHJ1ZSxcImFjb1wiOnRydWUsXCJhY3RpdmVcIjp0cnVlLFwiYWN0b3JcIjp0cnVlLFwiYWRhY1wiOnRydWUsXCJhZHNcIjp0cnVlLFwiYWR1bHRcIjp0cnVlLFwiYWVnXCI6dHJ1ZSxcImFldG5hXCI6dHJ1ZSxcImFmYW1pbHljb21wYW55XCI6dHJ1ZSxcImFmbFwiOnRydWUsXCJhZnJpY2FcIjp0cnVlLFwiYWZyaWNhbWFnaWNcIjp0cnVlLFwiYWdha2hhblwiOnRydWUsXCJhZ2VuY3lcIjp0cnVlLFwiYWlnXCI6dHJ1ZSxcImFpZ29cIjp0cnVlLFwiYWlyYnVzXCI6dHJ1ZSxcImFpcmZvcmNlXCI6dHJ1ZSxcImFpcnRlbFwiOnRydWUsXCJha2RuXCI6dHJ1ZSxcImFsZmFyb21lb1wiOnRydWUsXCJhbGliYWJhXCI6dHJ1ZSxcImFsaXBheVwiOnRydWUsXCJhbGxmaW5hbnpcIjp0cnVlLFwiYWxsc3RhdGVcIjp0cnVlLFwiYWxseVwiOnRydWUsXCJhbHNhY2VcIjp0cnVlLFwiYWxzdG9tXCI6dHJ1ZSxcImFtZXJpY2FuZXhwcmVzc1wiOnRydWUsXCJhbWVyaWNhbmZhbWlseVwiOnRydWUsXCJhbWV4XCI6dHJ1ZSxcImFtZmFtXCI6dHJ1ZSxcImFtaWNhXCI6dHJ1ZSxcImFtc3RlcmRhbVwiOnRydWUsXCJhbmFseXRpY3NcIjp0cnVlLFwiYW5kcm9pZFwiOnRydWUsXCJhbnF1YW5cIjp0cnVlLFwiYW56XCI6dHJ1ZSxcImFvbFwiOnRydWUsXCJhcGFydG1lbnRzXCI6dHJ1ZSxcImFwcFwiOnRydWUsXCJhcHBsZVwiOnRydWUsXCJhcXVhcmVsbGVcIjp0cnVlLFwiYXJhbWNvXCI6dHJ1ZSxcImFyY2hpXCI6dHJ1ZSxcImFybXlcIjp0cnVlLFwiYXJ0ZVwiOnRydWUsXCJhc2RhXCI6dHJ1ZSxcImFzc29jaWF0ZXNcIjp0cnVlLFwiYXRobGV0YVwiOnRydWUsXCJhdHRvcm5leVwiOnRydWUsXCJhdWN0aW9uXCI6dHJ1ZSxcImF1ZGlcIjp0cnVlLFwiYXVkaWJsZVwiOnRydWUsXCJhdWRpb1wiOnRydWUsXCJhdXNwb3N0XCI6dHJ1ZSxcImF1dGhvclwiOnRydWUsXCJhdXRvXCI6dHJ1ZSxcImF1dG9zXCI6dHJ1ZSxcImF2aWFuY2FcIjp0cnVlLFwiYXdzXCI6dHJ1ZSxcImF4YVwiOnRydWUsXCJhenVyZVwiOnRydWUsXCJiYWJ5XCI6dHJ1ZSxcImJhaWR1XCI6dHJ1ZSxcImJhbmFtZXhcIjp0cnVlLFwiYmFuYW5hcmVwdWJsaWNcIjp0cnVlLFwiYmFuZFwiOnRydWUsXCJiYW5rXCI6dHJ1ZSxcImJhclwiOnRydWUsXCJiYXJjZWxvbmFcIjp0cnVlLFwiYmFyY2xheWNhcmRcIjp0cnVlLFwiYmFyY2xheXNcIjp0cnVlLFwiYmFyZWZvb3RcIjp0cnVlLFwiYmFyZ2FpbnNcIjp0cnVlLFwiYmFza2V0YmFsbFwiOnRydWUsXCJiYXVoYXVzXCI6dHJ1ZSxcImJheWVyblwiOnRydWUsXCJiYmNcIjp0cnVlLFwiYmJ0XCI6dHJ1ZSxcImJidmFcIjp0cnVlLFwiYmNnXCI6dHJ1ZSxcImJjblwiOnRydWUsXCJiZWF0c1wiOnRydWUsXCJiZWVyXCI6dHJ1ZSxcImJlbnRsZXlcIjp0cnVlLFwiYmVybGluXCI6dHJ1ZSxcImJlc3RcIjp0cnVlLFwiYmVzdGJ1eVwiOnRydWUsXCJiZXRcIjp0cnVlLFwiYmhhcnRpXCI6dHJ1ZSxcImJpYmxlXCI6dHJ1ZSxcImJpZFwiOnRydWUsXCJiaWtlXCI6dHJ1ZSxcImJpbmdcIjp0cnVlLFwiYmluZ29cIjp0cnVlLFwiYmlvXCI6dHJ1ZSxcImJsYWNrXCI6dHJ1ZSxcImJsYWNrZnJpZGF5XCI6dHJ1ZSxcImJsYW5jb1wiOnRydWUsXCJibG9ja2J1c3RlclwiOnRydWUsXCJibG9nXCI6dHJ1ZSxcImJsb29tYmVyZ1wiOnRydWUsXCJibHVlXCI6dHJ1ZSxcImJtc1wiOnRydWUsXCJibXdcIjp0cnVlLFwiYm5sXCI6dHJ1ZSxcImJucHBhcmliYXNcIjp0cnVlLFwiYm9hdHNcIjp0cnVlLFwiYm9laHJpbmdlclwiOnRydWUsXCJib2ZhXCI6dHJ1ZSxcImJvbVwiOnRydWUsXCJib25kXCI6dHJ1ZSxcImJvb1wiOnRydWUsXCJib29rXCI6dHJ1ZSxcImJvb2tpbmdcIjp0cnVlLFwiYm9vdHNcIjp0cnVlLFwiYm9zY2hcIjp0cnVlLFwiYm9zdGlrXCI6dHJ1ZSxcImJvdFwiOnRydWUsXCJib3V0aXF1ZVwiOnRydWUsXCJicmFkZXNjb1wiOnRydWUsXCJicmlkZ2VzdG9uZVwiOnRydWUsXCJicm9hZHdheVwiOnRydWUsXCJicm9rZXJcIjp0cnVlLFwiYnJvdGhlclwiOnRydWUsXCJicnVzc2Vsc1wiOnRydWUsXCJidWRhcGVzdFwiOnRydWUsXCJidWdhdHRpXCI6dHJ1ZSxcImJ1aWxkXCI6dHJ1ZSxcImJ1aWxkZXJzXCI6dHJ1ZSxcImJ1c2luZXNzXCI6dHJ1ZSxcImJ1eVwiOnRydWUsXCJidXp6XCI6dHJ1ZSxcImJ6aFwiOnRydWUsXCJjYWJcIjp0cnVlLFwiY2FmZVwiOnRydWUsXCJjYWxcIjp0cnVlLFwiY2FsbFwiOnRydWUsXCJjYWx2aW5rbGVpblwiOnRydWUsXCJjYW1lcmFcIjp0cnVlLFwiY2FtcFwiOnRydWUsXCJjYW5jZXJyZXNlYXJjaFwiOnRydWUsXCJjYW5vblwiOnRydWUsXCJjYXBldG93blwiOnRydWUsXCJjYXBpdGFsXCI6dHJ1ZSxcImNhcGl0YWxvbmVcIjp0cnVlLFwiY2FyXCI6dHJ1ZSxcImNhcmF2YW5cIjp0cnVlLFwiY2FyZHNcIjp0cnVlLFwiY2FyZVwiOnRydWUsXCJjYXJlZXJcIjp0cnVlLFwiY2FyZWVyc1wiOnRydWUsXCJjYXJzXCI6dHJ1ZSxcImNhcnRpZXJcIjp0cnVlLFwiY2FzYVwiOnRydWUsXCJjYXNlXCI6dHJ1ZSxcImNhc2VpaFwiOnRydWUsXCJjYXNoXCI6dHJ1ZSxcImNhc2lub1wiOnRydWUsXCJjYXRlcmluZ1wiOnRydWUsXCJjYmFcIjp0cnVlLFwiY2JuXCI6dHJ1ZSxcImNicmVcIjp0cnVlLFwiY2JzXCI6dHJ1ZSxcImNlYlwiOnRydWUsXCJjZW50ZXJcIjp0cnVlLFwiY2VvXCI6dHJ1ZSxcImNlcm5cIjp0cnVlLFwiY2ZhXCI6dHJ1ZSxcImNmZFwiOnRydWUsXCJjaGFuZWxcIjp0cnVlLFwiY2hhbm5lbFwiOnRydWUsXCJjaGFzZVwiOnRydWUsXCJjaGF0XCI6dHJ1ZSxcImNoZWFwXCI6dHJ1ZSxcImNoaW50YWlcIjp0cnVlLFwiY2hsb2VcIjp0cnVlLFwiY2hyaXN0bWFzXCI6dHJ1ZSxcImNocm9tZVwiOnRydWUsXCJjaHJ5c2xlclwiOnRydWUsXCJjaHVyY2hcIjp0cnVlLFwiY2lwcmlhbmlcIjp0cnVlLFwiY2lyY2xlXCI6dHJ1ZSxcImNpc2NvXCI6dHJ1ZSxcImNpdGFkZWxcIjp0cnVlLFwiY2l0aVwiOnRydWUsXCJjaXRpY1wiOnRydWUsXCJjaXR5XCI6dHJ1ZSxcImNpdHllYXRzXCI6dHJ1ZSxcImNsYWltc1wiOnRydWUsXCJjbGVhbmluZ1wiOnRydWUsXCJjbGlja1wiOnRydWUsXCJjbGluaWNcIjp0cnVlLFwiY2xvdGhpbmdcIjp0cnVlLFwiY2xvdWRcIjp0cnVlLFwiY2x1YlwiOnRydWUsXCJjbHVibWVkXCI6dHJ1ZSxcImNvYWNoXCI6dHJ1ZSxcImNvZGVzXCI6dHJ1ZSxcImNvZmZlZVwiOnRydWUsXCJjb2xsZWdlXCI6dHJ1ZSxcImNvbG9nbmVcIjp0cnVlLFwiY29tY2FzdFwiOnRydWUsXCJjb21tYmFua1wiOnRydWUsXCJjb21tdW5pdHlcIjp0cnVlLFwiY29tcGFueVwiOnRydWUsXCJjb21wdXRlclwiOnRydWUsXCJjb21zZWNcIjp0cnVlLFwiY29uZG9zXCI6dHJ1ZSxcImNvbnN0cnVjdGlvblwiOnRydWUsXCJjb25zdWx0aW5nXCI6dHJ1ZSxcImNvbnRhY3RcIjp0cnVlLFwiY29udHJhY3RvcnNcIjp0cnVlLFwiY29va2luZ1wiOnRydWUsXCJjb29raW5nY2hhbm5lbFwiOnRydWUsXCJjb29sXCI6dHJ1ZSxcImNvcnNpY2FcIjp0cnVlLFwiY291bnRyeVwiOnRydWUsXCJjb3Vwb25cIjp0cnVlLFwiY291cG9uc1wiOnRydWUsXCJjb3Vyc2VzXCI6dHJ1ZSxcImNyZWRpdFwiOnRydWUsXCJjcmVkaXRjYXJkXCI6dHJ1ZSxcImNyZWRpdHVuaW9uXCI6dHJ1ZSxcImNyaWNrZXRcIjp0cnVlLFwiY3Jvd25cIjp0cnVlLFwiY3JzXCI6dHJ1ZSxcImNydWlzZXNcIjp0cnVlLFwiY3NjXCI6dHJ1ZSxcImN1aXNpbmVsbGFcIjp0cnVlLFwiY3ltcnVcIjp0cnVlLFwiY3lvdVwiOnRydWUsXCJkYWJ1clwiOnRydWUsXCJkYWRcIjp0cnVlLFwiZGFuY2VcIjp0cnVlLFwiZGF0ZVwiOnRydWUsXCJkYXRpbmdcIjp0cnVlLFwiZGF0c3VuXCI6dHJ1ZSxcImRheVwiOnRydWUsXCJkY2xrXCI6dHJ1ZSxcImRkc1wiOnRydWUsXCJkZWFsXCI6dHJ1ZSxcImRlYWxlclwiOnRydWUsXCJkZWFsc1wiOnRydWUsXCJkZWdyZWVcIjp0cnVlLFwiZGVsaXZlcnlcIjp0cnVlLFwiZGVsbFwiOnRydWUsXCJkZWxvaXR0ZVwiOnRydWUsXCJkZWx0YVwiOnRydWUsXCJkZW1vY3JhdFwiOnRydWUsXCJkZW50YWxcIjp0cnVlLFwiZGVudGlzdFwiOnRydWUsXCJkZXNpXCI6dHJ1ZSxcImRlc2lnblwiOnRydWUsXCJkZXZcIjp0cnVlLFwiZGhsXCI6dHJ1ZSxcImRpYW1vbmRzXCI6dHJ1ZSxcImRpZXRcIjp0cnVlLFwiZGlnaXRhbFwiOnRydWUsXCJkaXJlY3RcIjp0cnVlLFwiZGlyZWN0b3J5XCI6dHJ1ZSxcImRpc2NvdW50XCI6dHJ1ZSxcImRpc2NvdmVyXCI6dHJ1ZSxcImRpc2hcIjp0cnVlLFwiZG5wXCI6dHJ1ZSxcImRvY3NcIjp0cnVlLFwiZG9kZ2VcIjp0cnVlLFwiZG9nXCI6dHJ1ZSxcImRvaGFcIjp0cnVlLFwiZG9tYWluc1wiOnRydWUsXCJkb29zYW5cIjp0cnVlLFwiZG90XCI6dHJ1ZSxcImRvd25sb2FkXCI6dHJ1ZSxcImRyaXZlXCI6dHJ1ZSxcImRzdHZcIjp0cnVlLFwiZHR2XCI6dHJ1ZSxcImR1YmFpXCI6dHJ1ZSxcImR1Y2tcIjp0cnVlLFwiZHVubG9wXCI6dHJ1ZSxcImR1bnNcIjp0cnVlLFwiZHVwb250XCI6dHJ1ZSxcImR1cmJhblwiOnRydWUsXCJkdmFnXCI6dHJ1ZSxcImR3Z1wiOnRydWUsXCJlYXJ0aFwiOnRydWUsXCJlYXRcIjp0cnVlLFwiZWRla2FcIjp0cnVlLFwiZWR1Y2F0aW9uXCI6dHJ1ZSxcImVtYWlsXCI6dHJ1ZSxcImVtZXJja1wiOnRydWUsXCJlbWVyc29uXCI6dHJ1ZSxcImVuZXJneVwiOnRydWUsXCJlbmdpbmVlclwiOnRydWUsXCJlbmdpbmVlcmluZ1wiOnRydWUsXCJlbnRlcnByaXNlc1wiOnRydWUsXCJlcG9zdFwiOnRydWUsXCJlcHNvblwiOnRydWUsXCJlcXVpcG1lbnRcIjp0cnVlLFwiZXJpY3Nzb25cIjp0cnVlLFwiZXJuaVwiOnRydWUsXCJlc3FcIjp0cnVlLFwiZXN0YXRlXCI6dHJ1ZSxcImVzdXJhbmNlXCI6dHJ1ZSxcImV0aXNhbGF0XCI6dHJ1ZSxcImV1cm92aXNpb25cIjp0cnVlLFwiZXVzXCI6dHJ1ZSxcImV2ZW50c1wiOnRydWUsXCJldmVyYmFua1wiOnRydWUsXCJleGNoYW5nZVwiOnRydWUsXCJleHBlcnRcIjp0cnVlLFwiZXhwb3NlZFwiOnRydWUsXCJleHByZXNzXCI6dHJ1ZSxcImV4dHJhc3BhY2VcIjp0cnVlLFwiZmFnZVwiOnRydWUsXCJmYWlsXCI6dHJ1ZSxcImZhaXJ3aW5kc1wiOnRydWUsXCJmYWl0aFwiOnRydWUsXCJmYW1pbHlcIjp0cnVlLFwiZmFuXCI6dHJ1ZSxcImZhbnNcIjp0cnVlLFwiZmFybVwiOnRydWUsXCJmYXJtZXJzXCI6dHJ1ZSxcImZhc2hpb25cIjp0cnVlLFwiZmFzdFwiOnRydWUsXCJmZWRleFwiOnRydWUsXCJmZWVkYmFja1wiOnRydWUsXCJmZXJyYXJpXCI6dHJ1ZSxcImZlcnJlcm9cIjp0cnVlLFwiZmlhdFwiOnRydWUsXCJmaWRlbGl0eVwiOnRydWUsXCJmaWRvXCI6dHJ1ZSxcImZpbG1cIjp0cnVlLFwiZmluYWxcIjp0cnVlLFwiZmluYW5jZVwiOnRydWUsXCJmaW5hbmNpYWxcIjp0cnVlLFwiZmlyZVwiOnRydWUsXCJmaXJlc3RvbmVcIjp0cnVlLFwiZmlybWRhbGVcIjp0cnVlLFwiZmlzaFwiOnRydWUsXCJmaXNoaW5nXCI6dHJ1ZSxcImZpdFwiOnRydWUsXCJmaXRuZXNzXCI6dHJ1ZSxcImZsaWNrclwiOnRydWUsXCJmbGlnaHRzXCI6dHJ1ZSxcImZsaXJcIjp0cnVlLFwiZmxvcmlzdFwiOnRydWUsXCJmbG93ZXJzXCI6dHJ1ZSxcImZsc21pZHRoXCI6dHJ1ZSxcImZseVwiOnRydWUsXCJmb29cIjp0cnVlLFwiZm9vZG5ldHdvcmtcIjp0cnVlLFwiZm9vdGJhbGxcIjp0cnVlLFwiZm9yZFwiOnRydWUsXCJmb3JleFwiOnRydWUsXCJmb3JzYWxlXCI6dHJ1ZSxcImZvcnVtXCI6dHJ1ZSxcImZvdW5kYXRpb25cIjp0cnVlLFwiZm94XCI6dHJ1ZSxcImZyZXNlbml1c1wiOnRydWUsXCJmcmxcIjp0cnVlLFwiZnJvZ2Fuc1wiOnRydWUsXCJmcm9udGRvb3JcIjp0cnVlLFwiZnJvbnRpZXJcIjp0cnVlLFwiZnRyXCI6dHJ1ZSxcImZ1aml0c3VcIjp0cnVlLFwiZnVqaXhlcm94XCI6dHJ1ZSxcImZ1bmRcIjp0cnVlLFwiZnVybml0dXJlXCI6dHJ1ZSxcImZ1dGJvbFwiOnRydWUsXCJmeWlcIjp0cnVlLFwiZ2FsXCI6dHJ1ZSxcImdhbGxlcnlcIjp0cnVlLFwiZ2FsbG9cIjp0cnVlLFwiZ2FsbHVwXCI6dHJ1ZSxcImdhbWVcIjp0cnVlLFwiZ2FtZXNcIjp0cnVlLFwiZ2FwXCI6dHJ1ZSxcImdhcmRlblwiOnRydWUsXCJnYml6XCI6dHJ1ZSxcImdkblwiOnRydWUsXCJnZWFcIjp0cnVlLFwiZ2VudFwiOnRydWUsXCJnZW50aW5nXCI6dHJ1ZSxcImdlb3JnZVwiOnRydWUsXCJnZ2VlXCI6dHJ1ZSxcImdpZnRcIjp0cnVlLFwiZ2lmdHNcIjp0cnVlLFwiZ2l2ZXNcIjp0cnVlLFwiZ2l2aW5nXCI6dHJ1ZSxcImdsYWRlXCI6dHJ1ZSxcImdsYXNzXCI6dHJ1ZSxcImdsZVwiOnRydWUsXCJnbG9iYWxcIjp0cnVlLFwiZ2xvYm9cIjp0cnVlLFwiZ21haWxcIjp0cnVlLFwiZ21vXCI6dHJ1ZSxcImdteFwiOnRydWUsXCJnb2RhZGR5XCI6dHJ1ZSxcImdvbGRcIjp0cnVlLFwiZ29sZHBvaW50XCI6dHJ1ZSxcImdvbGZcIjp0cnVlLFwiZ29vXCI6dHJ1ZSxcImdvb2RoYW5kc1wiOnRydWUsXCJnb29keWVhclwiOnRydWUsXCJnb29nXCI6dHJ1ZSxcImdvb2dsZVwiOnRydWUsXCJnb3BcIjp0cnVlLFwiZ290XCI6dHJ1ZSxcImdvdHZcIjp0cnVlLFwiZ3JhaW5nZXJcIjp0cnVlLFwiZ3JhcGhpY3NcIjp0cnVlLFwiZ3JhdGlzXCI6dHJ1ZSxcImdyZWVuXCI6dHJ1ZSxcImdyaXBlXCI6dHJ1ZSxcImdyb3VwXCI6dHJ1ZSxcImd1YXJkaWFuXCI6dHJ1ZSxcImd1Y2NpXCI6dHJ1ZSxcImd1Z2VcIjp0cnVlLFwiZ3VpZGVcIjp0cnVlLFwiZ3VpdGFyc1wiOnRydWUsXCJndXJ1XCI6dHJ1ZSxcImhhbWJ1cmdcIjp0cnVlLFwiaGFuZ291dFwiOnRydWUsXCJoYXVzXCI6dHJ1ZSxcImhib1wiOnRydWUsXCJoZGZjXCI6dHJ1ZSxcImhkZmNiYW5rXCI6dHJ1ZSxcImhlYWx0aFwiOnRydWUsXCJoZWFsdGhjYXJlXCI6dHJ1ZSxcImhlbHBcIjp0cnVlLFwiaGVsc2lua2lcIjp0cnVlLFwiaGVyZVwiOnRydWUsXCJoZXJtZXNcIjp0cnVlLFwiaGd0dlwiOnRydWUsXCJoaXBob3BcIjp0cnVlLFwiaGlzYW1pdHN1XCI6dHJ1ZSxcImhpdGFjaGlcIjp0cnVlLFwiaGl2XCI6dHJ1ZSxcImhrdFwiOnRydWUsXCJob2NrZXlcIjp0cnVlLFwiaG9sZGluZ3NcIjp0cnVlLFwiaG9saWRheVwiOnRydWUsXCJob21lZGVwb3RcIjp0cnVlLFwiaG9tZWdvb2RzXCI6dHJ1ZSxcImhvbWVzXCI6dHJ1ZSxcImhvbWVzZW5zZVwiOnRydWUsXCJob25kYVwiOnRydWUsXCJob25leXdlbGxcIjp0cnVlLFwiaG9yc2VcIjp0cnVlLFwiaG9zdFwiOnRydWUsXCJob3N0aW5nXCI6dHJ1ZSxcImhvdFwiOnRydWUsXCJob3RlbGVzXCI6dHJ1ZSxcImhvdG1haWxcIjp0cnVlLFwiaG91c2VcIjp0cnVlLFwiaG93XCI6dHJ1ZSxcImhzYmNcIjp0cnVlLFwiaHRjXCI6dHJ1ZSxcImh1Z2hlc1wiOnRydWUsXCJoeWF0dFwiOnRydWUsXCJoeXVuZGFpXCI6dHJ1ZSxcImlibVwiOnRydWUsXCJpY2JjXCI6dHJ1ZSxcImljZVwiOnRydWUsXCJpY3VcIjp0cnVlLFwiaWVlZVwiOnRydWUsXCJpZm1cIjp0cnVlLFwiaWluZXRcIjp0cnVlLFwiaWthbm9cIjp0cnVlLFwiaW1hbWF0XCI6dHJ1ZSxcImltZGJcIjp0cnVlLFwiaW1tb1wiOnRydWUsXCJpbW1vYmlsaWVuXCI6dHJ1ZSxcImluZHVzdHJpZXNcIjp0cnVlLFwiaW5maW5pdGlcIjp0cnVlLFwiaW5nXCI6dHJ1ZSxcImlua1wiOnRydWUsXCJpbnN0aXR1dGVcIjp0cnVlLFwiaW5zdXJhbmNlXCI6dHJ1ZSxcImluc3VyZVwiOnRydWUsXCJpbnRlbFwiOnRydWUsXCJpbnRlcm5hdGlvbmFsXCI6dHJ1ZSxcImludHVpdFwiOnRydWUsXCJpbnZlc3RtZW50c1wiOnRydWUsXCJpcGlyYW5nYVwiOnRydWUsXCJpcmlzaFwiOnRydWUsXCJpc2VsZWN0XCI6dHJ1ZSxcImlzbWFpbGlcIjp0cnVlLFwiaXN0XCI6dHJ1ZSxcImlzdGFuYnVsXCI6dHJ1ZSxcIml0YXVcIjp0cnVlLFwiaXR2XCI6dHJ1ZSxcIml2ZWNvXCI6dHJ1ZSxcIml3Y1wiOnRydWUsXCJqYWd1YXJcIjp0cnVlLFwiamF2YVwiOnRydWUsXCJqY2JcIjp0cnVlLFwiamNwXCI6dHJ1ZSxcImplZXBcIjp0cnVlLFwiamV0enRcIjp0cnVlLFwiamV3ZWxyeVwiOnRydWUsXCJqaW9cIjp0cnVlLFwiamxjXCI6dHJ1ZSxcImpsbFwiOnRydWUsXCJqbXBcIjp0cnVlLFwiam5qXCI6dHJ1ZSxcImpvYnVyZ1wiOnRydWUsXCJqb3RcIjp0cnVlLFwiam95XCI6dHJ1ZSxcImpwbW9yZ2FuXCI6dHJ1ZSxcImpwcnNcIjp0cnVlLFwianVlZ29zXCI6dHJ1ZSxcImp1bmlwZXJcIjp0cnVlLFwia2F1ZmVuXCI6dHJ1ZSxcImtkZGlcIjp0cnVlLFwia2Vycnlob3RlbHNcIjp0cnVlLFwia2Vycnlsb2dpc3RpY3NcIjp0cnVlLFwia2Vycnlwcm9wZXJ0aWVzXCI6dHJ1ZSxcImtmaFwiOnRydWUsXCJraWFcIjp0cnVlLFwia2ltXCI6dHJ1ZSxcImtpbmRlclwiOnRydWUsXCJraW5kbGVcIjp0cnVlLFwia2l0Y2hlblwiOnRydWUsXCJraXdpXCI6dHJ1ZSxcImtvZWxuXCI6dHJ1ZSxcImtvbWF0c3VcIjp0cnVlLFwia29zaGVyXCI6dHJ1ZSxcImtwbWdcIjp0cnVlLFwia3BuXCI6dHJ1ZSxcImtyZFwiOnRydWUsXCJrcmVkXCI6dHJ1ZSxcImt1b2tncm91cFwiOnRydWUsXCJreWtuZXRcIjp0cnVlLFwia3lvdG9cIjp0cnVlLFwibGFjYWl4YVwiOnRydWUsXCJsYWRicm9rZXNcIjp0cnVlLFwibGFtYm9yZ2hpbmlcIjp0cnVlLFwibGFuY2FzdGVyXCI6dHJ1ZSxcImxhbmNpYVwiOnRydWUsXCJsYW5jb21lXCI6dHJ1ZSxcImxhbmRcIjp0cnVlLFwibGFuZHJvdmVyXCI6dHJ1ZSxcImxhbnhlc3NcIjp0cnVlLFwibGFzYWxsZVwiOnRydWUsXCJsYXRcIjp0cnVlLFwibGF0aW5vXCI6dHJ1ZSxcImxhdHJvYmVcIjp0cnVlLFwibGF3XCI6dHJ1ZSxcImxhd3llclwiOnRydWUsXCJsZHNcIjp0cnVlLFwibGVhc2VcIjp0cnVlLFwibGVjbGVyY1wiOnRydWUsXCJsZWZyYWtcIjp0cnVlLFwibGVnYWxcIjp0cnVlLFwibGVnb1wiOnRydWUsXCJsZXh1c1wiOnRydWUsXCJsZ2J0XCI6dHJ1ZSxcImxpYWlzb25cIjp0cnVlLFwibGlkbFwiOnRydWUsXCJsaWZlXCI6dHJ1ZSxcImxpZmVpbnN1cmFuY2VcIjp0cnVlLFwibGlmZXN0eWxlXCI6dHJ1ZSxcImxpZ2h0aW5nXCI6dHJ1ZSxcImxpa2VcIjp0cnVlLFwibGlsbHlcIjp0cnVlLFwibGltaXRlZFwiOnRydWUsXCJsaW1vXCI6dHJ1ZSxcImxpbmNvbG5cIjp0cnVlLFwibGluZGVcIjp0cnVlLFwibGlua1wiOnRydWUsXCJsaXBzeVwiOnRydWUsXCJsaXZlXCI6dHJ1ZSxcImxpdmluZ1wiOnRydWUsXCJsaXhpbFwiOnRydWUsXCJsb2FuXCI6dHJ1ZSxcImxvYW5zXCI6dHJ1ZSxcImxvY2tlclwiOnRydWUsXCJsb2N1c1wiOnRydWUsXCJsb2Z0XCI6dHJ1ZSxcImxvbFwiOnRydWUsXCJsb25kb25cIjp0cnVlLFwibG90dGVcIjp0cnVlLFwibG90dG9cIjp0cnVlLFwibG92ZVwiOnRydWUsXCJscGxcIjp0cnVlLFwibHBsZmluYW5jaWFsXCI6dHJ1ZSxcImx0ZFwiOnRydWUsXCJsdGRhXCI6dHJ1ZSxcImx1bmRiZWNrXCI6dHJ1ZSxcImx1cGluXCI6dHJ1ZSxcImx1eGVcIjp0cnVlLFwibHV4dXJ5XCI6dHJ1ZSxcIm1hY3lzXCI6dHJ1ZSxcIm1hZHJpZFwiOnRydWUsXCJtYWlmXCI6dHJ1ZSxcIm1haXNvblwiOnRydWUsXCJtYWtldXBcIjp0cnVlLFwibWFuXCI6dHJ1ZSxcIm1hbmFnZW1lbnRcIjp0cnVlLFwibWFuZ29cIjp0cnVlLFwibWFya2V0XCI6dHJ1ZSxcIm1hcmtldGluZ1wiOnRydWUsXCJtYXJrZXRzXCI6dHJ1ZSxcIm1hcnJpb3R0XCI6dHJ1ZSxcIm1hcnNoYWxsc1wiOnRydWUsXCJtYXNlcmF0aVwiOnRydWUsXCJtYXR0ZWxcIjp0cnVlLFwibWJhXCI6dHJ1ZSxcIm1jZFwiOnRydWUsXCJtY2RvbmFsZHNcIjp0cnVlLFwibWNraW5zZXlcIjp0cnVlLFwibWVkXCI6dHJ1ZSxcIm1lZGlhXCI6dHJ1ZSxcIm1lZXRcIjp0cnVlLFwibWVsYm91cm5lXCI6dHJ1ZSxcIm1lbWVcIjp0cnVlLFwibWVtb3JpYWxcIjp0cnVlLFwibWVuXCI6dHJ1ZSxcIm1lbnVcIjp0cnVlLFwibWVvXCI6dHJ1ZSxcIm1ldGxpZmVcIjp0cnVlLFwibWlhbWlcIjp0cnVlLFwibWljcm9zb2Z0XCI6dHJ1ZSxcIm1pbmlcIjp0cnVlLFwibWludFwiOnRydWUsXCJtaXRcIjp0cnVlLFwibWl0c3ViaXNoaVwiOnRydWUsXCJtbGJcIjp0cnVlLFwibWxzXCI6dHJ1ZSxcIm1tYVwiOnRydWUsXCJtbmV0XCI6dHJ1ZSxcIm1vYmlseVwiOnRydWUsXCJtb2RhXCI6dHJ1ZSxcIm1vZVwiOnRydWUsXCJtb2lcIjp0cnVlLFwibW9tXCI6dHJ1ZSxcIm1vbmFzaFwiOnRydWUsXCJtb25leVwiOnRydWUsXCJtb25zdGVyXCI6dHJ1ZSxcIm1vbnRibGFuY1wiOnRydWUsXCJtb3BhclwiOnRydWUsXCJtb3Jtb25cIjp0cnVlLFwibW9ydGdhZ2VcIjp0cnVlLFwibW9zY293XCI6dHJ1ZSxcIm1vdG9cIjp0cnVlLFwibW90b3JjeWNsZXNcIjp0cnVlLFwibW92XCI6dHJ1ZSxcIm1vdmllXCI6dHJ1ZSxcIm1vdmlzdGFyXCI6dHJ1ZSxcIm1zZFwiOnRydWUsXCJtdG5cIjp0cnVlLFwibXRwY1wiOnRydWUsXCJtdHJcIjp0cnVlLFwibXVsdGljaG9pY2VcIjp0cnVlLFwibXV0dWFsXCI6dHJ1ZSxcIm11dHVlbGxlXCI6dHJ1ZSxcIm16YW5zaW1hZ2ljXCI6dHJ1ZSxcIm5hYlwiOnRydWUsXCJuYWRleFwiOnRydWUsXCJuYWdveWFcIjp0cnVlLFwibmFzcGVyc1wiOnRydWUsXCJuYXRpb253aWRlXCI6dHJ1ZSxcIm5hdHVyYVwiOnRydWUsXCJuYXZ5XCI6dHJ1ZSxcIm5iYVwiOnRydWUsXCJuZWNcIjp0cnVlLFwibmV0YmFua1wiOnRydWUsXCJuZXRmbGl4XCI6dHJ1ZSxcIm5ldHdvcmtcIjp0cnVlLFwibmV1c3RhclwiOnRydWUsXCJuZXdcIjp0cnVlLFwibmV3aG9sbGFuZFwiOnRydWUsXCJuZXdzXCI6dHJ1ZSxcIm5leHRcIjp0cnVlLFwibmV4dGRpcmVjdFwiOnRydWUsXCJuZXh1c1wiOnRydWUsXCJuZmxcIjp0cnVlLFwibmdvXCI6dHJ1ZSxcIm5oa1wiOnRydWUsXCJuaWNvXCI6dHJ1ZSxcIm5pa2VcIjp0cnVlLFwibmlrb25cIjp0cnVlLFwibmluamFcIjp0cnVlLFwibmlzc2FuXCI6dHJ1ZSxcIm5va2lhXCI6dHJ1ZSxcIm5vcnRod2VzdGVybm11dHVhbFwiOnRydWUsXCJub3J0b25cIjp0cnVlLFwibm93XCI6dHJ1ZSxcIm5vd3J1elwiOnRydWUsXCJub3d0dlwiOnRydWUsXCJucmFcIjp0cnVlLFwibnJ3XCI6dHJ1ZSxcIm50dFwiOnRydWUsXCJueWNcIjp0cnVlLFwib2JpXCI6dHJ1ZSxcIm9ic2VydmVyXCI6dHJ1ZSxcIm9mZlwiOnRydWUsXCJvZmZpY2VcIjp0cnVlLFwib2tpbmF3YVwiOnRydWUsXCJvbGF5YW5cIjp0cnVlLFwib2xheWFuZ3JvdXBcIjp0cnVlLFwib2xkbmF2eVwiOnRydWUsXCJvbGxvXCI6dHJ1ZSxcIm9tZWdhXCI6dHJ1ZSxcIm9uZVwiOnRydWUsXCJvbmdcIjp0cnVlLFwib25sXCI6dHJ1ZSxcIm9ubGluZVwiOnRydWUsXCJvbnlvdXJzaWRlXCI6dHJ1ZSxcIm9vb1wiOnRydWUsXCJvcGVuXCI6dHJ1ZSxcIm9yYWNsZVwiOnRydWUsXCJvcmFuZ2VcIjp0cnVlLFwib3JnYW5pY1wiOnRydWUsXCJvcmllbnRleHByZXNzXCI6dHJ1ZSxcIm9zYWthXCI6dHJ1ZSxcIm90c3VrYVwiOnRydWUsXCJvdHRcIjp0cnVlLFwib3ZoXCI6dHJ1ZSxcInBhZ2VcIjp0cnVlLFwicGFtcGVyZWRjaGVmXCI6dHJ1ZSxcInBhbmFzb25pY1wiOnRydWUsXCJwYW5lcmFpXCI6dHJ1ZSxcInBhcmlzXCI6dHJ1ZSxcInBhcnNcIjp0cnVlLFwicGFydG5lcnNcIjp0cnVlLFwicGFydHNcIjp0cnVlLFwicGFydHlcIjp0cnVlLFwicGFzc2FnZW5zXCI6dHJ1ZSxcInBheVwiOnRydWUsXCJwYXl1XCI6dHJ1ZSxcInBjY3dcIjp0cnVlLFwicGV0XCI6dHJ1ZSxcInBmaXplclwiOnRydWUsXCJwaGFybWFjeVwiOnRydWUsXCJwaGlsaXBzXCI6dHJ1ZSxcInBob3RvXCI6dHJ1ZSxcInBob3RvZ3JhcGh5XCI6dHJ1ZSxcInBob3Rvc1wiOnRydWUsXCJwaHlzaW9cIjp0cnVlLFwicGlhZ2V0XCI6dHJ1ZSxcInBpY3NcIjp0cnVlLFwicGljdGV0XCI6dHJ1ZSxcInBpY3R1cmVzXCI6dHJ1ZSxcInBpZFwiOnRydWUsXCJwaW5cIjp0cnVlLFwicGluZ1wiOnRydWUsXCJwaW5rXCI6dHJ1ZSxcInBpb25lZXJcIjp0cnVlLFwicGl6emFcIjp0cnVlLFwicGxhY2VcIjp0cnVlLFwicGxheVwiOnRydWUsXCJwbGF5c3RhdGlvblwiOnRydWUsXCJwbHVtYmluZ1wiOnRydWUsXCJwbHVzXCI6dHJ1ZSxcInBuY1wiOnRydWUsXCJwb2hsXCI6dHJ1ZSxcInBva2VyXCI6dHJ1ZSxcInBvbGl0aWVcIjp0cnVlLFwicG9yblwiOnRydWUsXCJwcmFtZXJpY2FcIjp0cnVlLFwicHJheGlcIjp0cnVlLFwicHJlc3NcIjp0cnVlLFwicHJpbWVcIjp0cnVlLFwicHJvZFwiOnRydWUsXCJwcm9kdWN0aW9uc1wiOnRydWUsXCJwcm9mXCI6dHJ1ZSxcInByb2dyZXNzaXZlXCI6dHJ1ZSxcInByb21vXCI6dHJ1ZSxcInByb3BlcnRpZXNcIjp0cnVlLFwicHJvcGVydHlcIjp0cnVlLFwicHJvdGVjdGlvblwiOnRydWUsXCJwcnVcIjp0cnVlLFwicHJ1ZGVudGlhbFwiOnRydWUsXCJwdWJcIjp0cnVlLFwicXBvblwiOnRydWUsXCJxdWViZWNcIjp0cnVlLFwicXVlc3RcIjp0cnVlLFwicXZjXCI6dHJ1ZSxcInJhY2luZ1wiOnRydWUsXCJyYWlkXCI6dHJ1ZSxcInJlYWRcIjp0cnVlLFwicmVhbGVzdGF0ZVwiOnRydWUsXCJyZWFsdG9yXCI6dHJ1ZSxcInJlYWx0eVwiOnRydWUsXCJyZWNpcGVzXCI6dHJ1ZSxcInJlZFwiOnRydWUsXCJyZWRzdG9uZVwiOnRydWUsXCJyZWR1bWJyZWxsYVwiOnRydWUsXCJyZWhhYlwiOnRydWUsXCJyZWlzZVwiOnRydWUsXCJyZWlzZW5cIjp0cnVlLFwicmVpdFwiOnRydWUsXCJyZWxpYW5jZVwiOnRydWUsXCJyZW5cIjp0cnVlLFwicmVudFwiOnRydWUsXCJyZW50YWxzXCI6dHJ1ZSxcInJlcGFpclwiOnRydWUsXCJyZXBvcnRcIjp0cnVlLFwicmVwdWJsaWNhblwiOnRydWUsXCJyZXN0XCI6dHJ1ZSxcInJlc3RhdXJhbnRcIjp0cnVlLFwicmV2aWV3XCI6dHJ1ZSxcInJldmlld3NcIjp0cnVlLFwicmV4cm90aFwiOnRydWUsXCJyaWNoXCI6dHJ1ZSxcInJpY2hhcmRsaVwiOnRydWUsXCJyaWNvaFwiOnRydWUsXCJyaWdodGF0aG9tZVwiOnRydWUsXCJyaWxcIjp0cnVlLFwicmlvXCI6dHJ1ZSxcInJpcFwiOnRydWUsXCJyb2NoZXJcIjp0cnVlLFwicm9ja3NcIjp0cnVlLFwicm9kZW9cIjp0cnVlLFwicm9nZXJzXCI6dHJ1ZSxcInJvb21cIjp0cnVlLFwicnN2cFwiOnRydWUsXCJydWhyXCI6dHJ1ZSxcInJ1blwiOnRydWUsXCJyd2VcIjp0cnVlLFwicnl1a3l1XCI6dHJ1ZSxcInNhYXJsYW5kXCI6dHJ1ZSxcInNhZmVcIjp0cnVlLFwic2FmZXR5XCI6dHJ1ZSxcInNha3VyYVwiOnRydWUsXCJzYWxlXCI6dHJ1ZSxcInNhbG9uXCI6dHJ1ZSxcInNhbXNjbHViXCI6dHJ1ZSxcInNhbXN1bmdcIjp0cnVlLFwic2FuZHZpa1wiOnRydWUsXCJzYW5kdmlrY29yb21hbnRcIjp0cnVlLFwic2Fub2ZpXCI6dHJ1ZSxcInNhcFwiOnRydWUsXCJzYXBvXCI6dHJ1ZSxcInNhcmxcIjp0cnVlLFwic2FzXCI6dHJ1ZSxcInNhdmVcIjp0cnVlLFwic2F4b1wiOnRydWUsXCJzYmlcIjp0cnVlLFwic2JzXCI6dHJ1ZSxcInNjYVwiOnRydWUsXCJzY2JcIjp0cnVlLFwic2NoYWVmZmxlclwiOnRydWUsXCJzY2htaWR0XCI6dHJ1ZSxcInNjaG9sYXJzaGlwc1wiOnRydWUsXCJzY2hvb2xcIjp0cnVlLFwic2NodWxlXCI6dHJ1ZSxcInNjaHdhcnpcIjp0cnVlLFwic2NpZW5jZVwiOnRydWUsXCJzY2pvaG5zb25cIjp0cnVlLFwic2NvclwiOnRydWUsXCJzY290XCI6dHJ1ZSxcInNlYXRcIjp0cnVlLFwic2VjdXJlXCI6dHJ1ZSxcInNlY3VyaXR5XCI6dHJ1ZSxcInNlZWtcIjp0cnVlLFwic2VuZXJcIjp0cnVlLFwic2VydmljZXNcIjp0cnVlLFwic2VzXCI6dHJ1ZSxcInNldmVuXCI6dHJ1ZSxcInNld1wiOnRydWUsXCJzZXhcIjp0cnVlLFwic2V4eVwiOnRydWUsXCJzZnJcIjp0cnVlLFwic2hhbmdyaWxhXCI6dHJ1ZSxcInNoYXJwXCI6dHJ1ZSxcInNoYXdcIjp0cnVlLFwic2hlbGxcIjp0cnVlLFwic2hpYVwiOnRydWUsXCJzaGlrc2hhXCI6dHJ1ZSxcInNob2VzXCI6dHJ1ZSxcInNob3VqaVwiOnRydWUsXCJzaG93XCI6dHJ1ZSxcInNob3d0aW1lXCI6dHJ1ZSxcInNocmlyYW1cIjp0cnVlLFwic2lsa1wiOnRydWUsXCJzaW5hXCI6dHJ1ZSxcInNpbmdsZXNcIjp0cnVlLFwic2l0ZVwiOnRydWUsXCJza2lcIjp0cnVlLFwic2tpblwiOnRydWUsXCJza3lcIjp0cnVlLFwic2t5cGVcIjp0cnVlLFwic2xpbmdcIjp0cnVlLFwic21hcnRcIjp0cnVlLFwic21pbGVcIjp0cnVlLFwic25jZlwiOnRydWUsXCJzb2NjZXJcIjp0cnVlLFwic29jaWFsXCI6dHJ1ZSxcInNvZnRiYW5rXCI6dHJ1ZSxcInNvZnR3YXJlXCI6dHJ1ZSxcInNvaHVcIjp0cnVlLFwic29sYXJcIjp0cnVlLFwic29sdXRpb25zXCI6dHJ1ZSxcInNvbmdcIjp0cnVlLFwic29ueVwiOnRydWUsXCJzb3lcIjp0cnVlLFwic3BhY2VcIjp0cnVlLFwic3BpZWdlbFwiOnRydWUsXCJzcG90XCI6dHJ1ZSxcInNwcmVhZGJldHRpbmdcIjp0cnVlLFwic3JsXCI6dHJ1ZSxcInNydFwiOnRydWUsXCJzdGFkYVwiOnRydWUsXCJzdGFwbGVzXCI6dHJ1ZSxcInN0YXJcIjp0cnVlLFwic3Rhcmh1YlwiOnRydWUsXCJzdGF0ZWJhbmtcIjp0cnVlLFwic3RhdGVmYXJtXCI6dHJ1ZSxcInN0YXRvaWxcIjp0cnVlLFwic3RjXCI6dHJ1ZSxcInN0Y2dyb3VwXCI6dHJ1ZSxcInN0b2NraG9sbVwiOnRydWUsXCJzdG9yYWdlXCI6dHJ1ZSxcInN0b3JlXCI6dHJ1ZSxcInN0dWRpb1wiOnRydWUsXCJzdHVkeVwiOnRydWUsXCJzdHlsZVwiOnRydWUsXCJzdWNrc1wiOnRydWUsXCJzdXBlcnNwb3J0XCI6dHJ1ZSxcInN1cHBsaWVzXCI6dHJ1ZSxcInN1cHBseVwiOnRydWUsXCJzdXBwb3J0XCI6dHJ1ZSxcInN1cmZcIjp0cnVlLFwic3VyZ2VyeVwiOnRydWUsXCJzdXp1a2lcIjp0cnVlLFwic3dhdGNoXCI6dHJ1ZSxcInN3aWZ0Y292ZXJcIjp0cnVlLFwic3dpc3NcIjp0cnVlLFwic3lkbmV5XCI6dHJ1ZSxcInN5bWFudGVjXCI6dHJ1ZSxcInN5c3RlbXNcIjp0cnVlLFwidGFiXCI6dHJ1ZSxcInRhaXBlaVwiOnRydWUsXCJ0YWxrXCI6dHJ1ZSxcInRhb2Jhb1wiOnRydWUsXCJ0YXJnZXRcIjp0cnVlLFwidGF0YW1vdG9yc1wiOnRydWUsXCJ0YXRhclwiOnRydWUsXCJ0YXR0b29cIjp0cnVlLFwidGF4XCI6dHJ1ZSxcInRheGlcIjp0cnVlLFwidGNpXCI6dHJ1ZSxcInRka1wiOnRydWUsXCJ0ZWFtXCI6dHJ1ZSxcInRlY2hcIjp0cnVlLFwidGVjaG5vbG9neVwiOnRydWUsXCJ0ZWxlY2l0eVwiOnRydWUsXCJ0ZWxlZm9uaWNhXCI6dHJ1ZSxcInRlbWFzZWtcIjp0cnVlLFwidGVubmlzXCI6dHJ1ZSxcInRldmFcIjp0cnVlLFwidGhkXCI6dHJ1ZSxcInRoZWF0ZXJcIjp0cnVlLFwidGhlYXRyZVwiOnRydWUsXCJ0aGVndWFyZGlhblwiOnRydWUsXCJ0aWFhXCI6dHJ1ZSxcInRpY2tldHNcIjp0cnVlLFwidGllbmRhXCI6dHJ1ZSxcInRpZmZhbnlcIjp0cnVlLFwidGlwc1wiOnRydWUsXCJ0aXJlc1wiOnRydWUsXCJ0aXJvbFwiOnRydWUsXCJ0am1heHhcIjp0cnVlLFwidGp4XCI6dHJ1ZSxcInRrbWF4eFwiOnRydWUsXCJ0bWFsbFwiOnRydWUsXCJ0b2RheVwiOnRydWUsXCJ0b2t5b1wiOnRydWUsXCJ0b29sc1wiOnRydWUsXCJ0b3BcIjp0cnVlLFwidG9yYXlcIjp0cnVlLFwidG9zaGliYVwiOnRydWUsXCJ0b3RhbFwiOnRydWUsXCJ0b3Vyc1wiOnRydWUsXCJ0b3duXCI6dHJ1ZSxcInRveW90YVwiOnRydWUsXCJ0b3lzXCI6dHJ1ZSxcInRyYWRlXCI6dHJ1ZSxcInRyYWRpbmdcIjp0cnVlLFwidHJhaW5pbmdcIjp0cnVlLFwidHJhdmVsY2hhbm5lbFwiOnRydWUsXCJ0cmF2ZWxlcnNcIjp0cnVlLFwidHJhdmVsZXJzaW5zdXJhbmNlXCI6dHJ1ZSxcInRydXN0XCI6dHJ1ZSxcInRydlwiOnRydWUsXCJ0dWJlXCI6dHJ1ZSxcInR1aVwiOnRydWUsXCJ0dW5lc1wiOnRydWUsXCJ0dXNodVwiOnRydWUsXCJ0dnNcIjp0cnVlLFwidWJhbmtcIjp0cnVlLFwidWJzXCI6dHJ1ZSxcInVjb25uZWN0XCI6dHJ1ZSxcInVuaXZlcnNpdHlcIjp0cnVlLFwidW5vXCI6dHJ1ZSxcInVvbFwiOnRydWUsXCJ1cHNcIjp0cnVlLFwidmFjYXRpb25zXCI6dHJ1ZSxcInZhbmFcIjp0cnVlLFwidmFuZ3VhcmRcIjp0cnVlLFwidmVnYXNcIjp0cnVlLFwidmVudHVyZXNcIjp0cnVlLFwidmVyaXNpZ25cIjp0cnVlLFwidmVyc2ljaGVydW5nXCI6dHJ1ZSxcInZldFwiOnRydWUsXCJ2aWFqZXNcIjp0cnVlLFwidmlkZW9cIjp0cnVlLFwidmlnXCI6dHJ1ZSxcInZpa2luZ1wiOnRydWUsXCJ2aWxsYXNcIjp0cnVlLFwidmluXCI6dHJ1ZSxcInZpcFwiOnRydWUsXCJ2aXJnaW5cIjp0cnVlLFwidmlzYVwiOnRydWUsXCJ2aXNpb25cIjp0cnVlLFwidmlzdGFcIjp0cnVlLFwidmlzdGFwcmludFwiOnRydWUsXCJ2aXZhXCI6dHJ1ZSxcInZpdm9cIjp0cnVlLFwidmxhYW5kZXJlblwiOnRydWUsXCJ2b2RrYVwiOnRydWUsXCJ2b2xrc3dhZ2VuXCI6dHJ1ZSxcInZvdGVcIjp0cnVlLFwidm90aW5nXCI6dHJ1ZSxcInZvdG9cIjp0cnVlLFwidm95YWdlXCI6dHJ1ZSxcInZ1ZWxvc1wiOnRydWUsXCJ3YWxlc1wiOnRydWUsXCJ3YWxtYXJ0XCI6dHJ1ZSxcIndhbHRlclwiOnRydWUsXCJ3YW5nXCI6dHJ1ZSxcIndhbmdnb3VcIjp0cnVlLFwid2FybWFuXCI6dHJ1ZSxcIndhdGNoXCI6dHJ1ZSxcIndhdGNoZXNcIjp0cnVlLFwid2VhdGhlclwiOnRydWUsXCJ3ZWF0aGVyY2hhbm5lbFwiOnRydWUsXCJ3ZWJjYW1cIjp0cnVlLFwid2ViZXJcIjp0cnVlLFwid2Vic2l0ZVwiOnRydWUsXCJ3ZWRcIjp0cnVlLFwid2VkZGluZ1wiOnRydWUsXCJ3ZWlib1wiOnRydWUsXCJ3ZWlyXCI6dHJ1ZSxcIndob3N3aG9cIjp0cnVlLFwid2llblwiOnRydWUsXCJ3aWtpXCI6dHJ1ZSxcIndpbGxpYW1oaWxsXCI6dHJ1ZSxcIndpblwiOnRydWUsXCJ3aW5kb3dzXCI6dHJ1ZSxcIndpbmVcIjp0cnVlLFwid2lubmVyc1wiOnRydWUsXCJ3bWVcIjp0cnVlLFwid29sdGVyc2tsdXdlclwiOnRydWUsXCJ3b29kc2lkZVwiOnRydWUsXCJ3b3JrXCI6dHJ1ZSxcIndvcmtzXCI6dHJ1ZSxcIndvcmxkXCI6dHJ1ZSxcInd0Y1wiOnRydWUsXCJ3dGZcIjp0cnVlLFwieGJveFwiOnRydWUsXCJ4ZXJveFwiOnRydWUsXCJ4ZmluaXR5XCI6dHJ1ZSxcInhpaHVhblwiOnRydWUsXCJ4aW5cIjp0cnVlLFwieG4tLTExYjRjM2RcIjp0cnVlLFwieG4tLTFjazJlMWJcIjp0cnVlLFwieG4tLTFxcXcyM2FcIjp0cnVlLFwieG4tLTMwcnI3eVwiOnRydWUsXCJ4bi0tM2JzdDAwbVwiOnRydWUsXCJ4bi0tM2RzNDQzZ1wiOnRydWUsXCJ4bi0tM29xMTh2bDhwbjM2YVwiOnRydWUsXCJ4bi0tM3B4dThrXCI6dHJ1ZSxcInhuLS00MmMyZDlhXCI6dHJ1ZSxcInhuLS00NXExMWNcIjp0cnVlLFwieG4tLTRnYnJpbVwiOnRydWUsXCJ4bi0tNGdxNDhsZjlqXCI6dHJ1ZSxcInhuLS01NXF3NDJnXCI6dHJ1ZSxcInhuLS01NXF4NWRcIjp0cnVlLFwieG4tLTVzdTM0ajkzNmJnc2dcIjp0cnVlLFwieG4tLTV0em01Z1wiOnRydWUsXCJ4bi0tNmZyejgyZ1wiOnRydWUsXCJ4bi0tNnFxOTg2YjN4bFwiOnRydWUsXCJ4bi0tODBhZHhoa3NcIjp0cnVlLFwieG4tLTgwYXNlaGRiXCI6dHJ1ZSxcInhuLS04MGFzd2dcIjp0cnVlLFwieG4tLTh5MGEwNjNhXCI6dHJ1ZSxcInhuLS05ZGJxMmFcIjp0cnVlLFwieG4tLTlldDUydVwiOnRydWUsXCJ4bi0tOWtydDAwYVwiOnRydWUsXCJ4bi0tYjR3NjA1ZmVyZFwiOnRydWUsXCJ4bi0tYmNrMWI5YTVkcmU0Y1wiOnRydWUsXCJ4bi0tYzFhdmdcIjp0cnVlLFwieG4tLWMyYnI3Z1wiOnRydWUsXCJ4bi0tY2NrMmIzYlwiOnRydWUsXCJ4bi0tY2c0YmtpXCI6dHJ1ZSxcInhuLS1jenI2OTRiXCI6dHJ1ZSxcInhuLS1jenJzMHRcIjp0cnVlLFwieG4tLWN6cnUyZFwiOnRydWUsXCJ4bi0tZDFhY2ozYlwiOnRydWUsXCJ4bi0tZWNrdmR0YzlkXCI6dHJ1ZSxcInhuLS1lZnZ5ODhoXCI6dHJ1ZSxcInhuLS1lc3R2NzVnXCI6dHJ1ZSxcInhuLS1mY3Q0MjlrXCI6dHJ1ZSxcInhuLS1maGJlaVwiOnRydWUsXCJ4bi0tZmlxMjI4YzVoc1wiOnRydWUsXCJ4bi0tZmlxNjRiXCI6dHJ1ZSxcInhuLS1manE3MjBhXCI6dHJ1ZSxcInhuLS1mbHczNTFlXCI6dHJ1ZSxcInhuLS1menlzOGQ2OXV2Z21cIjp0cnVlLFwieG4tLWcyeHg0OGNcIjp0cnVlLFwieG4tLWdja3IzZjBmXCI6dHJ1ZSxcInhuLS1oeHQ4MTRlXCI6dHJ1ZSxcInhuLS1pMWI2YjFhNmEyZVwiOnRydWUsXCJ4bi0taW1yNTEzblwiOnRydWUsXCJ4bi0taW8wYTdpXCI6dHJ1ZSxcInhuLS1qMWFlZlwiOnRydWUsXCJ4bi0tamxxNjF1OXc3YlwiOnRydWUsXCJ4bi0tanZyMTg5bVwiOnRydWUsXCJ4bi0ta2NyeDc3ZDF4NGFcIjp0cnVlLFwieG4tLWtwdTcxNmZcIjp0cnVlLFwieG4tLWtwdXQzaVwiOnRydWUsXCJ4bi0tbWdiYTNhM2VqdFwiOnRydWUsXCJ4bi0tbWdiYTdjMGJibjBhXCI6dHJ1ZSxcInhuLS1tZ2JhYWtjN2R2ZlwiOnRydWUsXCJ4bi0tbWdiYWIyYmRcIjp0cnVlLFwieG4tLW1nYmI5ZmJwb2JcIjp0cnVlLFwieG4tLW1nYmNhN2R6ZG9cIjp0cnVlLFwieG4tLW1nYnQzZGhkXCI6dHJ1ZSxcInhuLS1tazFidTQ0Y1wiOnRydWUsXCJ4bi0tbXh0cTFtXCI6dHJ1ZSxcInhuLS1uZ2JjNWF6ZFwiOnRydWUsXCJ4bi0tbmdiZTllMGFcIjp0cnVlLFwieG4tLW5xdjdmXCI6dHJ1ZSxcInhuLS1ucXY3ZnMwMGVtYVwiOnRydWUsXCJ4bi0tbnlxeTI2YVwiOnRydWUsXCJ4bi0tcDFhY2ZcIjp0cnVlLFwieG4tLXBidDk3N2NcIjp0cnVlLFwieG4tLXBzc3kydVwiOnRydWUsXCJ4bi0tcTlqeWI0Y1wiOnRydWUsXCJ4bi0tcWNrYTFwbWNcIjp0cnVlLFwieG4tLXJocXY5NmdcIjp0cnVlLFwieG4tLXJvdnU4OGJcIjp0cnVlLFwieG4tLXNlczU1NGdcIjp0cnVlLFwieG4tLXQ2MGI1NmFcIjp0cnVlLFwieG4tLXRja3dlXCI6dHJ1ZSxcInhuLS11bnVwNHlcIjp0cnVlLFwieG4tLXZlcm1nZW5zYmVyYXRlci1jdGJcIjp0cnVlLFwieG4tLXZlcm1nZW5zYmVyYXR1bmctcHdiXCI6dHJ1ZSxcInhuLS12aHF1dlwiOnRydWUsXCJ4bi0tdnVxODYxYlwiOnRydWUsXCJ4bi0tdzRyODVlbDhmaHU1ZG5yYVwiOnRydWUsXCJ4bi0tdzRyczQwbFwiOnRydWUsXCJ4bi0teGhxNTIxYlwiOnRydWUsXCJ4bi0temZyMTY0YlwiOnRydWUsXCJ4cGVyaWFcIjp0cnVlLFwieHl6XCI6dHJ1ZSxcInlhY2h0c1wiOnRydWUsXCJ5YWhvb1wiOnRydWUsXCJ5YW1heHVuXCI6dHJ1ZSxcInlhbmRleFwiOnRydWUsXCJ5b2RvYmFzaGlcIjp0cnVlLFwieW9nYVwiOnRydWUsXCJ5b2tvaGFtYVwiOnRydWUsXCJ5b3VcIjp0cnVlLFwieW91dHViZVwiOnRydWUsXCJ5dW5cIjp0cnVlLFwiemFwcG9zXCI6dHJ1ZSxcInphcmFcIjp0cnVlLFwiemVyb1wiOnRydWUsXCJ6aXBcIjp0cnVlLFwiemlwcG9cIjp0cnVlLFwiem9uZVwiOnRydWUsXCJ6dWVyaWNoXCI6dHJ1ZSxcImNsb3VkZnJvbnQubmV0XCI6dHJ1ZSxcImFwLW5vcnRoZWFzdC0xLmNvbXB1dGUuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJhcC1zb3V0aGVhc3QtMS5jb21wdXRlLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiYXAtc291dGhlYXN0LTIuY29tcHV0ZS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcImNuLW5vcnRoLTEuY29tcHV0ZS5hbWF6b25hd3MuY25cIjp0cnVlLFwiY29tcHV0ZS5hbWF6b25hd3MuY25cIjp0cnVlLFwiY29tcHV0ZS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcImNvbXB1dGUtMS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcImV1LXdlc3QtMS5jb21wdXRlLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiZXUtY2VudHJhbC0xLmNvbXB1dGUuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJzYS1lYXN0LTEuY29tcHV0ZS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInVzLWVhc3QtMS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInVzLWdvdi13ZXN0LTEuY29tcHV0ZS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInVzLXdlc3QtMS5jb21wdXRlLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwidXMtd2VzdC0yLmNvbXB1dGUuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJ6LTEuY29tcHV0ZS0xLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiei0yLmNvbXB1dGUtMS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcImVsYXN0aWNiZWFuc3RhbGsuY29tXCI6dHJ1ZSxcImVsYi5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInMzLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiczMtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJzMy1hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInMzLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiczMtZXh0ZXJuYWwtMS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcInMzLWV4dGVybmFsLTIuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJzMy1maXBzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJzMy1ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJzMy1ldS13ZXN0LTEuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJzMy1zYS1lYXN0LTEuYW1hem9uYXdzLmNvbVwiOnRydWUsXCJzMy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiczMtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb21cIjp0cnVlLFwiczMuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuXCI6dHJ1ZSxcInMzLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tXCI6dHJ1ZSxcImJldGFpbmFib3guY29tXCI6dHJ1ZSxcImFlLm9yZ1wiOnRydWUsXCJhci5jb21cIjp0cnVlLFwiYnIuY29tXCI6dHJ1ZSxcImNuLmNvbVwiOnRydWUsXCJjb20uZGVcIjp0cnVlLFwiY29tLnNlXCI6dHJ1ZSxcImRlLmNvbVwiOnRydWUsXCJldS5jb21cIjp0cnVlLFwiZ2IuY29tXCI6dHJ1ZSxcImdiLm5ldFwiOnRydWUsXCJodS5jb21cIjp0cnVlLFwiaHUubmV0XCI6dHJ1ZSxcImpwLm5ldFwiOnRydWUsXCJqcG4uY29tXCI6dHJ1ZSxcImtyLmNvbVwiOnRydWUsXCJtZXguY29tXCI6dHJ1ZSxcIm5vLmNvbVwiOnRydWUsXCJxYy5jb21cIjp0cnVlLFwicnUuY29tXCI6dHJ1ZSxcInNhLmNvbVwiOnRydWUsXCJzZS5jb21cIjp0cnVlLFwic2UubmV0XCI6dHJ1ZSxcInVrLmNvbVwiOnRydWUsXCJ1ay5uZXRcIjp0cnVlLFwidXMuY29tXCI6dHJ1ZSxcInV5LmNvbVwiOnRydWUsXCJ6YS5ielwiOnRydWUsXCJ6YS5jb21cIjp0cnVlLFwiYWZyaWNhLmNvbVwiOnRydWUsXCJnci5jb21cIjp0cnVlLFwiaW4ubmV0XCI6dHJ1ZSxcInVzLm9yZ1wiOnRydWUsXCJjby5jb21cIjp0cnVlLFwiYy5sYVwiOnRydWUsXCJjbG91ZGNvbnRyb2xsZWQuY29tXCI6dHJ1ZSxcImNsb3VkY29udHJvbGFwcC5jb21cIjp0cnVlLFwiY28uY2FcIjp0cnVlLFwiYy5jZG43Ny5vcmdcIjp0cnVlLFwiY2RuNzctc3NsLm5ldFwiOnRydWUsXCJyLmNkbjc3Lm5ldFwiOnRydWUsXCJyc2MuY2RuNzcub3JnXCI6dHJ1ZSxcInNzbC5vcmlnaW4uY2RuNzctc2VjdXJlLm9yZ1wiOnRydWUsXCJjby5ubFwiOnRydWUsXCJjby5ub1wiOnRydWUsXCIqLnBsYXRmb3JtLnNoXCI6dHJ1ZSxcImN1cGNha2UuaXNcIjp0cnVlLFwiZHJlYW1ob3N0ZXJzLmNvbVwiOnRydWUsXCJkdWNrZG5zLm9yZ1wiOnRydWUsXCJkeW5kbnMtYXQtaG9tZS5jb21cIjp0cnVlLFwiZHluZG5zLWF0LXdvcmsuY29tXCI6dHJ1ZSxcImR5bmRucy1ibG9nLmNvbVwiOnRydWUsXCJkeW5kbnMtZnJlZS5jb21cIjp0cnVlLFwiZHluZG5zLWhvbWUuY29tXCI6dHJ1ZSxcImR5bmRucy1pcC5jb21cIjp0cnVlLFwiZHluZG5zLW1haWwuY29tXCI6dHJ1ZSxcImR5bmRucy1vZmZpY2UuY29tXCI6dHJ1ZSxcImR5bmRucy1waWNzLmNvbVwiOnRydWUsXCJkeW5kbnMtcmVtb3RlLmNvbVwiOnRydWUsXCJkeW5kbnMtc2VydmVyLmNvbVwiOnRydWUsXCJkeW5kbnMtd2ViLmNvbVwiOnRydWUsXCJkeW5kbnMtd2lraS5jb21cIjp0cnVlLFwiZHluZG5zLXdvcmsuY29tXCI6dHJ1ZSxcImR5bmRucy5iaXpcIjp0cnVlLFwiZHluZG5zLmluZm9cIjp0cnVlLFwiZHluZG5zLm9yZ1wiOnRydWUsXCJkeW5kbnMudHZcIjp0cnVlLFwiYXQtYmFuZC1jYW1wLm5ldFwiOnRydWUsXCJhdGguY3hcIjp0cnVlLFwiYmFycmVsLW9mLWtub3dsZWRnZS5pbmZvXCI6dHJ1ZSxcImJhcnJlbGwtb2Yta25vd2xlZGdlLmluZm9cIjp0cnVlLFwiYmV0dGVyLXRoYW4udHZcIjp0cnVlLFwiYmxvZ2Rucy5jb21cIjp0cnVlLFwiYmxvZ2Rucy5uZXRcIjp0cnVlLFwiYmxvZ2Rucy5vcmdcIjp0cnVlLFwiYmxvZ3NpdGUub3JnXCI6dHJ1ZSxcImJvbGRseWdvaW5nbm93aGVyZS5vcmdcIjp0cnVlLFwiYnJva2UtaXQubmV0XCI6dHJ1ZSxcImJ1eXNob3VzZXMubmV0XCI6dHJ1ZSxcImNlY2hpcmUuY29tXCI6dHJ1ZSxcImRuc2FsaWFzLmNvbVwiOnRydWUsXCJkbnNhbGlhcy5uZXRcIjp0cnVlLFwiZG5zYWxpYXMub3JnXCI6dHJ1ZSxcImRuc2Rvam8uY29tXCI6dHJ1ZSxcImRuc2Rvam8ubmV0XCI6dHJ1ZSxcImRuc2Rvam8ub3JnXCI6dHJ1ZSxcImRvZXMtaXQubmV0XCI6dHJ1ZSxcImRvZXNudGV4aXN0LmNvbVwiOnRydWUsXCJkb2VzbnRleGlzdC5vcmdcIjp0cnVlLFwiZG9udGV4aXN0LmNvbVwiOnRydWUsXCJkb250ZXhpc3QubmV0XCI6dHJ1ZSxcImRvbnRleGlzdC5vcmdcIjp0cnVlLFwiZG9vbWRucy5jb21cIjp0cnVlLFwiZG9vbWRucy5vcmdcIjp0cnVlLFwiZHZyZG5zLm9yZ1wiOnRydWUsXCJkeW4tby1zYXVyLmNvbVwiOnRydWUsXCJkeW5hbGlhcy5jb21cIjp0cnVlLFwiZHluYWxpYXMubmV0XCI6dHJ1ZSxcImR5bmFsaWFzLm9yZ1wiOnRydWUsXCJkeW5hdGhvbWUubmV0XCI6dHJ1ZSxcImR5bmRucy53c1wiOnRydWUsXCJlbmRvZmludGVybmV0Lm5ldFwiOnRydWUsXCJlbmRvZmludGVybmV0Lm9yZ1wiOnRydWUsXCJlbmRvZnRoZWludGVybmV0Lm9yZ1wiOnRydWUsXCJlc3QtYS1sYS1tYWlzb24uY29tXCI6dHJ1ZSxcImVzdC1hLWxhLW1hc2lvbi5jb21cIjp0cnVlLFwiZXN0LWxlLXBhdHJvbi5jb21cIjp0cnVlLFwiZXN0LW1vbi1ibG9ndWV1ci5jb21cIjp0cnVlLFwiZm9yLWJldHRlci5iaXpcIjp0cnVlLFwiZm9yLW1vcmUuYml6XCI6dHJ1ZSxcImZvci1vdXIuaW5mb1wiOnRydWUsXCJmb3Itc29tZS5iaXpcIjp0cnVlLFwiZm9yLXRoZS5iaXpcIjp0cnVlLFwiZm9yZ290Lmhlci5uYW1lXCI6dHJ1ZSxcImZvcmdvdC5oaXMubmFtZVwiOnRydWUsXCJmcm9tLWFrLmNvbVwiOnRydWUsXCJmcm9tLWFsLmNvbVwiOnRydWUsXCJmcm9tLWFyLmNvbVwiOnRydWUsXCJmcm9tLWF6Lm5ldFwiOnRydWUsXCJmcm9tLWNhLmNvbVwiOnRydWUsXCJmcm9tLWNvLm5ldFwiOnRydWUsXCJmcm9tLWN0LmNvbVwiOnRydWUsXCJmcm9tLWRjLmNvbVwiOnRydWUsXCJmcm9tLWRlLmNvbVwiOnRydWUsXCJmcm9tLWZsLmNvbVwiOnRydWUsXCJmcm9tLWdhLmNvbVwiOnRydWUsXCJmcm9tLWhpLmNvbVwiOnRydWUsXCJmcm9tLWlhLmNvbVwiOnRydWUsXCJmcm9tLWlkLmNvbVwiOnRydWUsXCJmcm9tLWlsLmNvbVwiOnRydWUsXCJmcm9tLWluLmNvbVwiOnRydWUsXCJmcm9tLWtzLmNvbVwiOnRydWUsXCJmcm9tLWt5LmNvbVwiOnRydWUsXCJmcm9tLWxhLm5ldFwiOnRydWUsXCJmcm9tLW1hLmNvbVwiOnRydWUsXCJmcm9tLW1kLmNvbVwiOnRydWUsXCJmcm9tLW1lLm9yZ1wiOnRydWUsXCJmcm9tLW1pLmNvbVwiOnRydWUsXCJmcm9tLW1uLmNvbVwiOnRydWUsXCJmcm9tLW1vLmNvbVwiOnRydWUsXCJmcm9tLW1zLmNvbVwiOnRydWUsXCJmcm9tLW10LmNvbVwiOnRydWUsXCJmcm9tLW5jLmNvbVwiOnRydWUsXCJmcm9tLW5kLmNvbVwiOnRydWUsXCJmcm9tLW5lLmNvbVwiOnRydWUsXCJmcm9tLW5oLmNvbVwiOnRydWUsXCJmcm9tLW5qLmNvbVwiOnRydWUsXCJmcm9tLW5tLmNvbVwiOnRydWUsXCJmcm9tLW52LmNvbVwiOnRydWUsXCJmcm9tLW55Lm5ldFwiOnRydWUsXCJmcm9tLW9oLmNvbVwiOnRydWUsXCJmcm9tLW9rLmNvbVwiOnRydWUsXCJmcm9tLW9yLmNvbVwiOnRydWUsXCJmcm9tLXBhLmNvbVwiOnRydWUsXCJmcm9tLXByLmNvbVwiOnRydWUsXCJmcm9tLXJpLmNvbVwiOnRydWUsXCJmcm9tLXNjLmNvbVwiOnRydWUsXCJmcm9tLXNkLmNvbVwiOnRydWUsXCJmcm9tLXRuLmNvbVwiOnRydWUsXCJmcm9tLXR4LmNvbVwiOnRydWUsXCJmcm9tLXV0LmNvbVwiOnRydWUsXCJmcm9tLXZhLmNvbVwiOnRydWUsXCJmcm9tLXZ0LmNvbVwiOnRydWUsXCJmcm9tLXdhLmNvbVwiOnRydWUsXCJmcm9tLXdpLmNvbVwiOnRydWUsXCJmcm9tLXd2LmNvbVwiOnRydWUsXCJmcm9tLXd5LmNvbVwiOnRydWUsXCJmdHBhY2Nlc3MuY2NcIjp0cnVlLFwiZnVldHRlcnRkYXNuZXR6LmRlXCI6dHJ1ZSxcImdhbWUtaG9zdC5vcmdcIjp0cnVlLFwiZ2FtZS1zZXJ2ZXIuY2NcIjp0cnVlLFwiZ2V0bXlpcC5jb21cIjp0cnVlLFwiZ2V0cy1pdC5uZXRcIjp0cnVlLFwiZ28uZHluZG5zLm9yZ1wiOnRydWUsXCJnb3RkbnMuY29tXCI6dHJ1ZSxcImdvdGRucy5vcmdcIjp0cnVlLFwiZ3Jva3MtdGhlLmluZm9cIjp0cnVlLFwiZ3Jva3MtdGhpcy5pbmZvXCI6dHJ1ZSxcImhhbS1yYWRpby1vcC5uZXRcIjp0cnVlLFwiaGVyZS1mb3ItbW9yZS5pbmZvXCI6dHJ1ZSxcImhvYmJ5LXNpdGUuY29tXCI6dHJ1ZSxcImhvYmJ5LXNpdGUub3JnXCI6dHJ1ZSxcImhvbWUuZHluZG5zLm9yZ1wiOnRydWUsXCJob21lZG5zLm9yZ1wiOnRydWUsXCJob21lZnRwLm5ldFwiOnRydWUsXCJob21lZnRwLm9yZ1wiOnRydWUsXCJob21laXAubmV0XCI6dHJ1ZSxcImhvbWVsaW51eC5jb21cIjp0cnVlLFwiaG9tZWxpbnV4Lm5ldFwiOnRydWUsXCJob21lbGludXgub3JnXCI6dHJ1ZSxcImhvbWV1bml4LmNvbVwiOnRydWUsXCJob21ldW5peC5uZXRcIjp0cnVlLFwiaG9tZXVuaXgub3JnXCI6dHJ1ZSxcImlhbWFsbGFtYS5jb21cIjp0cnVlLFwiaW4tdGhlLWJhbmQubmV0XCI6dHJ1ZSxcImlzLWEtYW5hcmNoaXN0LmNvbVwiOnRydWUsXCJpcy1hLWJsb2dnZXIuY29tXCI6dHJ1ZSxcImlzLWEtYm9va2tlZXBlci5jb21cIjp0cnVlLFwiaXMtYS1icnVpbnNmYW4ub3JnXCI6dHJ1ZSxcImlzLWEtYnVsbHMtZmFuLmNvbVwiOnRydWUsXCJpcy1hLWNhbmRpZGF0ZS5vcmdcIjp0cnVlLFwiaXMtYS1jYXRlcmVyLmNvbVwiOnRydWUsXCJpcy1hLWNlbHRpY3NmYW4ub3JnXCI6dHJ1ZSxcImlzLWEtY2hlZi5jb21cIjp0cnVlLFwiaXMtYS1jaGVmLm5ldFwiOnRydWUsXCJpcy1hLWNoZWYub3JnXCI6dHJ1ZSxcImlzLWEtY29uc2VydmF0aXZlLmNvbVwiOnRydWUsXCJpcy1hLWNwYS5jb21cIjp0cnVlLFwiaXMtYS1jdWJpY2xlLXNsYXZlLmNvbVwiOnRydWUsXCJpcy1hLWRlbW9jcmF0LmNvbVwiOnRydWUsXCJpcy1hLWRlc2lnbmVyLmNvbVwiOnRydWUsXCJpcy1hLWRvY3Rvci5jb21cIjp0cnVlLFwiaXMtYS1maW5hbmNpYWxhZHZpc29yLmNvbVwiOnRydWUsXCJpcy1hLWdlZWsuY29tXCI6dHJ1ZSxcImlzLWEtZ2Vlay5uZXRcIjp0cnVlLFwiaXMtYS1nZWVrLm9yZ1wiOnRydWUsXCJpcy1hLWdyZWVuLmNvbVwiOnRydWUsXCJpcy1hLWd1cnUuY29tXCI6dHJ1ZSxcImlzLWEtaGFyZC13b3JrZXIuY29tXCI6dHJ1ZSxcImlzLWEtaHVudGVyLmNvbVwiOnRydWUsXCJpcy1hLWtuaWdodC5vcmdcIjp0cnVlLFwiaXMtYS1sYW5kc2NhcGVyLmNvbVwiOnRydWUsXCJpcy1hLWxhd3llci5jb21cIjp0cnVlLFwiaXMtYS1saWJlcmFsLmNvbVwiOnRydWUsXCJpcy1hLWxpYmVydGFyaWFuLmNvbVwiOnRydWUsXCJpcy1hLWxpbnV4LXVzZXIub3JnXCI6dHJ1ZSxcImlzLWEtbGxhbWEuY29tXCI6dHJ1ZSxcImlzLWEtbXVzaWNpYW4uY29tXCI6dHJ1ZSxcImlzLWEtbmFzY2FyZmFuLmNvbVwiOnRydWUsXCJpcy1hLW51cnNlLmNvbVwiOnRydWUsXCJpcy1hLXBhaW50ZXIuY29tXCI6dHJ1ZSxcImlzLWEtcGF0c2Zhbi5vcmdcIjp0cnVlLFwiaXMtYS1wZXJzb25hbHRyYWluZXIuY29tXCI6dHJ1ZSxcImlzLWEtcGhvdG9ncmFwaGVyLmNvbVwiOnRydWUsXCJpcy1hLXBsYXllci5jb21cIjp0cnVlLFwiaXMtYS1yZXB1YmxpY2FuLmNvbVwiOnRydWUsXCJpcy1hLXJvY2tzdGFyLmNvbVwiOnRydWUsXCJpcy1hLXNvY2lhbGlzdC5jb21cIjp0cnVlLFwiaXMtYS1zb3hmYW4ub3JnXCI6dHJ1ZSxcImlzLWEtc3R1ZGVudC5jb21cIjp0cnVlLFwiaXMtYS10ZWFjaGVyLmNvbVwiOnRydWUsXCJpcy1hLXRlY2hpZS5jb21cIjp0cnVlLFwiaXMtYS10aGVyYXBpc3QuY29tXCI6dHJ1ZSxcImlzLWFuLWFjY291bnRhbnQuY29tXCI6dHJ1ZSxcImlzLWFuLWFjdG9yLmNvbVwiOnRydWUsXCJpcy1hbi1hY3RyZXNzLmNvbVwiOnRydWUsXCJpcy1hbi1hbmFyY2hpc3QuY29tXCI6dHJ1ZSxcImlzLWFuLWFydGlzdC5jb21cIjp0cnVlLFwiaXMtYW4tZW5naW5lZXIuY29tXCI6dHJ1ZSxcImlzLWFuLWVudGVydGFpbmVyLmNvbVwiOnRydWUsXCJpcy1ieS51c1wiOnRydWUsXCJpcy1jZXJ0aWZpZWQuY29tXCI6dHJ1ZSxcImlzLWZvdW5kLm9yZ1wiOnRydWUsXCJpcy1nb25lLmNvbVwiOnRydWUsXCJpcy1pbnRvLWFuaW1lLmNvbVwiOnRydWUsXCJpcy1pbnRvLWNhcnMuY29tXCI6dHJ1ZSxcImlzLWludG8tY2FydG9vbnMuY29tXCI6dHJ1ZSxcImlzLWludG8tZ2FtZXMuY29tXCI6dHJ1ZSxcImlzLWxlZXQuY29tXCI6dHJ1ZSxcImlzLWxvc3Qub3JnXCI6dHJ1ZSxcImlzLW5vdC1jZXJ0aWZpZWQuY29tXCI6dHJ1ZSxcImlzLXNhdmVkLm9yZ1wiOnRydWUsXCJpcy1zbGljay5jb21cIjp0cnVlLFwiaXMtdWJlcmxlZXQuY29tXCI6dHJ1ZSxcImlzLXZlcnktYmFkLm9yZ1wiOnRydWUsXCJpcy12ZXJ5LWV2aWwub3JnXCI6dHJ1ZSxcImlzLXZlcnktZ29vZC5vcmdcIjp0cnVlLFwiaXMtdmVyeS1uaWNlLm9yZ1wiOnRydWUsXCJpcy12ZXJ5LXN3ZWV0Lm9yZ1wiOnRydWUsXCJpcy13aXRoLXRoZWJhbmQuY29tXCI6dHJ1ZSxcImlzYS1nZWVrLmNvbVwiOnRydWUsXCJpc2EtZ2Vlay5uZXRcIjp0cnVlLFwiaXNhLWdlZWsub3JnXCI6dHJ1ZSxcImlzYS1ob2NrZXludXQuY29tXCI6dHJ1ZSxcImlzc21hcnRlcnRoYW55b3UuY29tXCI6dHJ1ZSxcImlzdGVpbmdlZWsuZGVcIjp0cnVlLFwiaXN0bWVpbi5kZVwiOnRydWUsXCJraWNrcy1hc3MubmV0XCI6dHJ1ZSxcImtpY2tzLWFzcy5vcmdcIjp0cnVlLFwia25vd3NpdGFsbC5pbmZvXCI6dHJ1ZSxcImxhbmQtNC1zYWxlLnVzXCI6dHJ1ZSxcImxlYnRpbW5ldHouZGVcIjp0cnVlLFwibGVpdHVuZ3Nlbi5kZVwiOnRydWUsXCJsaWtlcy1waWUuY29tXCI6dHJ1ZSxcImxpa2VzY2FuZHkuY29tXCI6dHJ1ZSxcIm1lcnNlaW5lLm51XCI6dHJ1ZSxcIm1pbmUubnVcIjp0cnVlLFwibWlzY29uZnVzZWQub3JnXCI6dHJ1ZSxcIm15cGV0cy53c1wiOnRydWUsXCJteXBob3Rvcy5jY1wiOnRydWUsXCJuZWF0LXVybC5jb21cIjp0cnVlLFwib2ZmaWNlLW9uLXRoZS5uZXRcIjp0cnVlLFwib24tdGhlLXdlYi50dlwiOnRydWUsXCJwb2R6b25lLm5ldFwiOnRydWUsXCJwb2R6b25lLm9yZ1wiOnRydWUsXCJyZWFkbXlibG9nLm9yZ1wiOnRydWUsXCJzYXZlcy10aGUtd2hhbGVzLmNvbVwiOnRydWUsXCJzY3JhcHBlci1zaXRlLm5ldFwiOnRydWUsXCJzY3JhcHBpbmcuY2NcIjp0cnVlLFwic2VsZmlwLmJpelwiOnRydWUsXCJzZWxmaXAuY29tXCI6dHJ1ZSxcInNlbGZpcC5pbmZvXCI6dHJ1ZSxcInNlbGZpcC5uZXRcIjp0cnVlLFwic2VsZmlwLm9yZ1wiOnRydWUsXCJzZWxscy1mb3ItbGVzcy5jb21cIjp0cnVlLFwic2VsbHMtZm9yLXUuY29tXCI6dHJ1ZSxcInNlbGxzLWl0Lm5ldFwiOnRydWUsXCJzZWxsc3lvdXJob21lLm9yZ1wiOnRydWUsXCJzZXJ2ZWJicy5jb21cIjp0cnVlLFwic2VydmViYnMubmV0XCI6dHJ1ZSxcInNlcnZlYmJzLm9yZ1wiOnRydWUsXCJzZXJ2ZWZ0cC5uZXRcIjp0cnVlLFwic2VydmVmdHAub3JnXCI6dHJ1ZSxcInNlcnZlZ2FtZS5vcmdcIjp0cnVlLFwic2hhY2tuZXQubnVcIjp0cnVlLFwic2ltcGxlLXVybC5jb21cIjp0cnVlLFwic3BhY2UtdG8tcmVudC5jb21cIjp0cnVlLFwic3R1ZmYtNC1zYWxlLm9yZ1wiOnRydWUsXCJzdHVmZi00LXNhbGUudXNcIjp0cnVlLFwidGVhY2hlcy15b2dhLmNvbVwiOnRydWUsXCJ0aHJ1aGVyZS5uZXRcIjp0cnVlLFwidHJhZXVtdGdlcmFkZS5kZVwiOnRydWUsXCJ3ZWJob3AuYml6XCI6dHJ1ZSxcIndlYmhvcC5pbmZvXCI6dHJ1ZSxcIndlYmhvcC5uZXRcIjp0cnVlLFwid2ViaG9wLm9yZ1wiOnRydWUsXCJ3b3JzZS10aGFuLnR2XCI6dHJ1ZSxcIndyaXRlc3RoaXNibG9nLmNvbVwiOnRydWUsXCJldS5vcmdcIjp0cnVlLFwiYWwuZXUub3JnXCI6dHJ1ZSxcImFzc28uZXUub3JnXCI6dHJ1ZSxcImF0LmV1Lm9yZ1wiOnRydWUsXCJhdS5ldS5vcmdcIjp0cnVlLFwiYmUuZXUub3JnXCI6dHJ1ZSxcImJnLmV1Lm9yZ1wiOnRydWUsXCJjYS5ldS5vcmdcIjp0cnVlLFwiY2QuZXUub3JnXCI6dHJ1ZSxcImNoLmV1Lm9yZ1wiOnRydWUsXCJjbi5ldS5vcmdcIjp0cnVlLFwiY3kuZXUub3JnXCI6dHJ1ZSxcImN6LmV1Lm9yZ1wiOnRydWUsXCJkZS5ldS5vcmdcIjp0cnVlLFwiZGsuZXUub3JnXCI6dHJ1ZSxcImVkdS5ldS5vcmdcIjp0cnVlLFwiZWUuZXUub3JnXCI6dHJ1ZSxcImVzLmV1Lm9yZ1wiOnRydWUsXCJmaS5ldS5vcmdcIjp0cnVlLFwiZnIuZXUub3JnXCI6dHJ1ZSxcImdyLmV1Lm9yZ1wiOnRydWUsXCJoci5ldS5vcmdcIjp0cnVlLFwiaHUuZXUub3JnXCI6dHJ1ZSxcImllLmV1Lm9yZ1wiOnRydWUsXCJpbC5ldS5vcmdcIjp0cnVlLFwiaW4uZXUub3JnXCI6dHJ1ZSxcImludC5ldS5vcmdcIjp0cnVlLFwiaXMuZXUub3JnXCI6dHJ1ZSxcIml0LmV1Lm9yZ1wiOnRydWUsXCJqcC5ldS5vcmdcIjp0cnVlLFwia3IuZXUub3JnXCI6dHJ1ZSxcImx0LmV1Lm9yZ1wiOnRydWUsXCJsdS5ldS5vcmdcIjp0cnVlLFwibHYuZXUub3JnXCI6dHJ1ZSxcIm1jLmV1Lm9yZ1wiOnRydWUsXCJtZS5ldS5vcmdcIjp0cnVlLFwibWsuZXUub3JnXCI6dHJ1ZSxcIm10LmV1Lm9yZ1wiOnRydWUsXCJteS5ldS5vcmdcIjp0cnVlLFwibmV0LmV1Lm9yZ1wiOnRydWUsXCJuZy5ldS5vcmdcIjp0cnVlLFwibmwuZXUub3JnXCI6dHJ1ZSxcIm5vLmV1Lm9yZ1wiOnRydWUsXCJuei5ldS5vcmdcIjp0cnVlLFwicGFyaXMuZXUub3JnXCI6dHJ1ZSxcInBsLmV1Lm9yZ1wiOnRydWUsXCJwdC5ldS5vcmdcIjp0cnVlLFwicS1hLmV1Lm9yZ1wiOnRydWUsXCJyby5ldS5vcmdcIjp0cnVlLFwicnUuZXUub3JnXCI6dHJ1ZSxcInNlLmV1Lm9yZ1wiOnRydWUsXCJzaS5ldS5vcmdcIjp0cnVlLFwic2suZXUub3JnXCI6dHJ1ZSxcInRyLmV1Lm9yZ1wiOnRydWUsXCJ1ay5ldS5vcmdcIjp0cnVlLFwidXMuZXUub3JnXCI6dHJ1ZSxcImEuc3NsLmZhc3RseS5uZXRcIjp0cnVlLFwiYi5zc2wuZmFzdGx5Lm5ldFwiOnRydWUsXCJnbG9iYWwuc3NsLmZhc3RseS5uZXRcIjp0cnVlLFwiYS5wcm9kLmZhc3RseS5uZXRcIjp0cnVlLFwiZ2xvYmFsLnByb2QuZmFzdGx5Lm5ldFwiOnRydWUsXCJmaXJlYmFzZWFwcC5jb21cIjp0cnVlLFwiZmx5bm5odWIuY29tXCI6dHJ1ZSxcInNlcnZpY2UuZ292LnVrXCI6dHJ1ZSxcImdpdGh1Yi5pb1wiOnRydWUsXCJnaXRodWJ1c2VyY29udGVudC5jb21cIjp0cnVlLFwicm8uY29tXCI6dHJ1ZSxcImFwcHNwb3QuY29tXCI6dHJ1ZSxcImJsb2dzcG90LmFlXCI6dHJ1ZSxcImJsb2dzcG90LmFsXCI6dHJ1ZSxcImJsb2dzcG90LmFtXCI6dHJ1ZSxcImJsb2dzcG90LmJhXCI6dHJ1ZSxcImJsb2dzcG90LmJlXCI6dHJ1ZSxcImJsb2dzcG90LmJnXCI6dHJ1ZSxcImJsb2dzcG90LmJqXCI6dHJ1ZSxcImJsb2dzcG90LmNhXCI6dHJ1ZSxcImJsb2dzcG90LmNmXCI6dHJ1ZSxcImJsb2dzcG90LmNoXCI6dHJ1ZSxcImJsb2dzcG90LmNsXCI6dHJ1ZSxcImJsb2dzcG90LmNvLmF0XCI6dHJ1ZSxcImJsb2dzcG90LmNvLmlkXCI6dHJ1ZSxcImJsb2dzcG90LmNvLmlsXCI6dHJ1ZSxcImJsb2dzcG90LmNvLmtlXCI6dHJ1ZSxcImJsb2dzcG90LmNvLm56XCI6dHJ1ZSxcImJsb2dzcG90LmNvLnVrXCI6dHJ1ZSxcImJsb2dzcG90LmNvLnphXCI6dHJ1ZSxcImJsb2dzcG90LmNvbVwiOnRydWUsXCJibG9nc3BvdC5jb20uYXJcIjp0cnVlLFwiYmxvZ3Nwb3QuY29tLmF1XCI6dHJ1ZSxcImJsb2dzcG90LmNvbS5iclwiOnRydWUsXCJibG9nc3BvdC5jb20uYnlcIjp0cnVlLFwiYmxvZ3Nwb3QuY29tLmNvXCI6dHJ1ZSxcImJsb2dzcG90LmNvbS5jeVwiOnRydWUsXCJibG9nc3BvdC5jb20uZWVcIjp0cnVlLFwiYmxvZ3Nwb3QuY29tLmVnXCI6dHJ1ZSxcImJsb2dzcG90LmNvbS5lc1wiOnRydWUsXCJibG9nc3BvdC5jb20ubXRcIjp0cnVlLFwiYmxvZ3Nwb3QuY29tLm5nXCI6dHJ1ZSxcImJsb2dzcG90LmNvbS50clwiOnRydWUsXCJibG9nc3BvdC5jb20udXlcIjp0cnVlLFwiYmxvZ3Nwb3QuY3ZcIjp0cnVlLFwiYmxvZ3Nwb3QuY3pcIjp0cnVlLFwiYmxvZ3Nwb3QuZGVcIjp0cnVlLFwiYmxvZ3Nwb3QuZGtcIjp0cnVlLFwiYmxvZ3Nwb3QuZmlcIjp0cnVlLFwiYmxvZ3Nwb3QuZnJcIjp0cnVlLFwiYmxvZ3Nwb3QuZ3JcIjp0cnVlLFwiYmxvZ3Nwb3QuaGtcIjp0cnVlLFwiYmxvZ3Nwb3QuaHJcIjp0cnVlLFwiYmxvZ3Nwb3QuaHVcIjp0cnVlLFwiYmxvZ3Nwb3QuaWVcIjp0cnVlLFwiYmxvZ3Nwb3QuaW5cIjp0cnVlLFwiYmxvZ3Nwb3QuaXNcIjp0cnVlLFwiYmxvZ3Nwb3QuaXRcIjp0cnVlLFwiYmxvZ3Nwb3QuanBcIjp0cnVlLFwiYmxvZ3Nwb3Qua3JcIjp0cnVlLFwiYmxvZ3Nwb3QubGlcIjp0cnVlLFwiYmxvZ3Nwb3QubHRcIjp0cnVlLFwiYmxvZ3Nwb3QubHVcIjp0cnVlLFwiYmxvZ3Nwb3QubWRcIjp0cnVlLFwiYmxvZ3Nwb3QubWtcIjp0cnVlLFwiYmxvZ3Nwb3QubXJcIjp0cnVlLFwiYmxvZ3Nwb3QubXhcIjp0cnVlLFwiYmxvZ3Nwb3QubXlcIjp0cnVlLFwiYmxvZ3Nwb3QubmxcIjp0cnVlLFwiYmxvZ3Nwb3Qubm9cIjp0cnVlLFwiYmxvZ3Nwb3QucGVcIjp0cnVlLFwiYmxvZ3Nwb3QucHRcIjp0cnVlLFwiYmxvZ3Nwb3QucWFcIjp0cnVlLFwiYmxvZ3Nwb3QucmVcIjp0cnVlLFwiYmxvZ3Nwb3Qucm9cIjp0cnVlLFwiYmxvZ3Nwb3QucnNcIjp0cnVlLFwiYmxvZ3Nwb3QucnVcIjp0cnVlLFwiYmxvZ3Nwb3Quc2VcIjp0cnVlLFwiYmxvZ3Nwb3Quc2dcIjp0cnVlLFwiYmxvZ3Nwb3Quc2lcIjp0cnVlLFwiYmxvZ3Nwb3Quc2tcIjp0cnVlLFwiYmxvZ3Nwb3Quc25cIjp0cnVlLFwiYmxvZ3Nwb3QudGRcIjp0cnVlLFwiYmxvZ3Nwb3QudHdcIjp0cnVlLFwiYmxvZ3Nwb3QudWdcIjp0cnVlLFwiYmxvZ3Nwb3Qudm5cIjp0cnVlLFwiY29kZXNwb3QuY29tXCI6dHJ1ZSxcImdvb2dsZWFwaXMuY29tXCI6dHJ1ZSxcImdvb2dsZWNvZGUuY29tXCI6dHJ1ZSxcInBhZ2VzcGVlZG1vYmlsaXplci5jb21cIjp0cnVlLFwid2l0aGdvb2dsZS5jb21cIjp0cnVlLFwid2l0aHlvdXR1YmUuY29tXCI6dHJ1ZSxcImhlcm9rdWFwcC5jb21cIjp0cnVlLFwiaGVyb2t1c3NsLmNvbVwiOnRydWUsXCJpa2kuZmlcIjp0cnVlLFwiYml6LmF0XCI6dHJ1ZSxcImluZm8uYXRcIjp0cnVlLFwiY28ucGxcIjp0cnVlLFwiYXp1cmV3ZWJzaXRlcy5uZXRcIjp0cnVlLFwiYXp1cmUtbW9iaWxlLm5ldFwiOnRydWUsXCJjbG91ZGFwcC5uZXRcIjp0cnVlLFwiYm1vYXR0YWNobWVudHMub3JnXCI6dHJ1ZSxcIjR1LmNvbVwiOnRydWUsXCJuZnNob3N0LmNvbVwiOnRydWUsXCJueWMubW5cIjp0cnVlLFwibmlkLmlvXCI6dHJ1ZSxcIm9wZXJhdW5pdGUuY29tXCI6dHJ1ZSxcIm91dHN5c3RlbXNjbG91ZC5jb21cIjp0cnVlLFwiYXJ0LnBsXCI6dHJ1ZSxcImdsaXdpY2UucGxcIjp0cnVlLFwia3Jha293LnBsXCI6dHJ1ZSxcInBvem5hbi5wbFwiOnRydWUsXCJ3cm9jLnBsXCI6dHJ1ZSxcInpha29wYW5lLnBsXCI6dHJ1ZSxcInBhbnRoZW9uLmlvXCI6dHJ1ZSxcImdvdHBhbnRoZW9uLmNvbVwiOnRydWUsXCJwcml2LmF0XCI6dHJ1ZSxcInFhMi5jb21cIjp0cnVlLFwicmhjbG91ZC5jb21cIjp0cnVlLFwic2FuZGNhdHMuaW9cIjp0cnVlLFwiYml6LnVhXCI6dHJ1ZSxcImNvLnVhXCI6dHJ1ZSxcInBwLnVhXCI6dHJ1ZSxcInNpbmFhcHAuY29tXCI6dHJ1ZSxcInZpcHNpbmFhcHAuY29tXCI6dHJ1ZSxcIjFrYXBwLmNvbVwiOnRydWUsXCJnZGEucGxcIjp0cnVlLFwiZ2RhbnNrLnBsXCI6dHJ1ZSxcImdkeW5pYS5wbFwiOnRydWUsXCJtZWQucGxcIjp0cnVlLFwic29wb3QucGxcIjp0cnVlLFwiaGsuY29tXCI6dHJ1ZSxcImhrLm9yZ1wiOnRydWUsXCJsdGQuaGtcIjp0cnVlLFwiaW5jLmhrXCI6dHJ1ZSxcInlvbGFzaXRlLmNvbVwiOnRydWUsXCJ6YS5uZXRcIjp0cnVlLFwiemEub3JnXCI6dHJ1ZX0pO1xuXG4vLyBFTkQgb2YgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZmlsZVxuIiwiLyohXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFNhbGVzZm9yY2UuY29tLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNhbGVzZm9yY2UuY29tIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXlcbiAqIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXRcbiAqIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkVcbiAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JcbiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GXG4gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1NcbiAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOXG4gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKVxuICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEVcbiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG4ndXNlIHN0cmljdCc7XG4vKmpzaGludCB1bnVzZWQ6ZmFsc2UgKi9cblxuZnVuY3Rpb24gU3RvcmUoKSB7XG59XG5leHBvcnRzLlN0b3JlID0gU3RvcmU7XG5cbi8vIFN0b3JlcyBtYXkgYmUgc3luY2hyb25vdXMsIGJ1dCBhcmUgc3RpbGwgcmVxdWlyZWQgdG8gdXNlIGFcbi8vIENvbnRpbnVhdGlvbi1QYXNzaW5nIFN0eWxlIEFQSS4gIFRoZSBDb29raWVKYXIgaXRzZWxmIHdpbGwgZXhwb3NlIGEgXCIqU3luY1wiXG4vLyBBUEkgdGhhdCBjb252ZXJ0cyBmcm9tIHN5bmNocm9ub3VzLWNhbGxiYWNrcyB0byBpbXBlcmF0aXZlIHN0eWxlLlxuU3RvcmUucHJvdG90eXBlLnN5bmNocm9ub3VzID0gZmFsc2U7XG5cblN0b3JlLnByb3RvdHlwZS5maW5kQ29va2llID0gZnVuY3Rpb24oZG9tYWluLCBwYXRoLCBrZXksIGNiKSB7XG4gIHRocm93IG5ldyBFcnJvcignZmluZENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5maW5kQ29va2llcyA9IGZ1bmN0aW9uKGRvbWFpbiwgcGF0aCwgY2IpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdmaW5kQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5wdXRDb29raWUgPSBmdW5jdGlvbihjb29raWUsIGNiKSB7XG4gIHRocm93IG5ldyBFcnJvcigncHV0Q29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLnVwZGF0ZUNvb2tpZSA9IGZ1bmN0aW9uKG9sZENvb2tpZSwgbmV3Q29va2llLCBjYikge1xuICAvLyByZWNvbW1lbmRlZCBkZWZhdWx0IGltcGxlbWVudGF0aW9uOlxuICAvLyByZXR1cm4gdGhpcy5wdXRDb29raWUobmV3Q29va2llLCBjYik7XG4gIHRocm93IG5ldyBFcnJvcigndXBkYXRlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLnJlbW92ZUNvb2tpZSA9IGZ1bmN0aW9uKGRvbWFpbiwgcGF0aCwga2V5LCBjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3JlbW92ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5yZW1vdmVDb29raWVzID0gZnVuY3Rpb24oZG9tYWluLCBwYXRoLCBjYikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ3JlbW92ZUNvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkJyk7XG59O1xuXG5TdG9yZS5wcm90b3R5cGUuZ2V0QWxsQ29va2llcyA9IGZ1bmN0aW9uKGNiKSB7XG4gIHRocm93IG5ldyBFcnJvcignZ2V0QWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQgKHRoZXJlZm9yZSBqYXIgY2Fubm90IGJlIHNlcmlhbGl6ZWQpJyk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIl9hcmdzXCI6IFtcbiAgICBbXG4gICAgICB7XG4gICAgICAgIFwicmF3XCI6IFwidG91Z2gtY29va2llQF4yLjMuMlwiLFxuICAgICAgICBcInNjb3BlXCI6IG51bGwsXG4gICAgICAgIFwiZXNjYXBlZE5hbWVcIjogXCJ0b3VnaC1jb29raWVcIixcbiAgICAgICAgXCJuYW1lXCI6IFwidG91Z2gtY29va2llXCIsXG4gICAgICAgIFwicmF3U3BlY1wiOiBcIl4yLjMuMlwiLFxuICAgICAgICBcInNwZWNcIjogXCI+PTIuMy4yIDwzLjAuMFwiLFxuICAgICAgICBcInR5cGVcIjogXCJyYW5nZVwiXG4gICAgICB9LFxuICAgICAgXCIvaG9tZS9nYWJyaWVsL0RvY3VtZW50cy93ZWItc2NyYXBlci1jaHJvbWUtZXh0ZW5zaW9uL25vZGVfbW9kdWxlcy9qc2RvbVwiXG4gICAgXVxuICBdLFxuICBcIl9mcm9tXCI6IFwidG91Z2gtY29va2llQD49Mi4zLjIgPDMuMC4wXCIsXG4gIFwiX2lkXCI6IFwidG91Z2gtY29va2llQDIuMy4yXCIsXG4gIFwiX2luQ2FjaGVcIjogdHJ1ZSxcbiAgXCJfbG9jYXRpb25cIjogXCIvdG91Z2gtY29va2llXCIsXG4gIFwiX25vZGVWZXJzaW9uXCI6IFwiNy4wLjBcIixcbiAgXCJfbnBtT3BlcmF0aW9uYWxJbnRlcm5hbFwiOiB7XG4gICAgXCJob3N0XCI6IFwicGFja2FnZXMtMTItd2VzdC5pbnRlcm5hbC5ucG1qcy5jb21cIixcbiAgICBcInRtcFwiOiBcInRtcC90b3VnaC1jb29raWUtMi4zLjIudGd6XzE0Nzc0MTUyMzI5MTJfMC42MTMzNjA5NDMwMzk4NzkyXCJcbiAgfSxcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJuYW1lXCI6IFwianN0YXNoXCIsXG4gICAgXCJlbWFpbFwiOiBcImpzdGFzaEBnbWFpbC5jb21cIlxuICB9LFxuICBcIl9ucG1WZXJzaW9uXCI6IFwiMy4xMC44XCIsXG4gIFwiX3BoYW50b21DaGlsZHJlblwiOiB7fSxcbiAgXCJfcmVxdWVzdGVkXCI6IHtcbiAgICBcInJhd1wiOiBcInRvdWdoLWNvb2tpZUBeMi4zLjJcIixcbiAgICBcInNjb3BlXCI6IG51bGwsXG4gICAgXCJlc2NhcGVkTmFtZVwiOiBcInRvdWdoLWNvb2tpZVwiLFxuICAgIFwibmFtZVwiOiBcInRvdWdoLWNvb2tpZVwiLFxuICAgIFwicmF3U3BlY1wiOiBcIl4yLjMuMlwiLFxuICAgIFwic3BlY1wiOiBcIj49Mi4zLjIgPDMuMC4wXCIsXG4gICAgXCJ0eXBlXCI6IFwicmFuZ2VcIlxuICB9LFxuICBcIl9yZXF1aXJlZEJ5XCI6IFtcbiAgICBcIi9qc2RvbVwiLFxuICAgIFwiL3JlcXVlc3RcIixcbiAgICBcIi9yZXF1ZXN0LXByb21pc2UtbmF0aXZlXCJcbiAgXSxcbiAgXCJfcmVzb2x2ZWRcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b3VnaC1jb29raWUvLS90b3VnaC1jb29raWUtMi4zLjIudGd6XCIsXG4gIFwiX3NoYXN1bVwiOiBcImYwODFmNzZlNGM4NTcyMGU2YzM3YTVmYWNlZDczNzE1MGQ4NDA3MmFcIixcbiAgXCJfc2hyaW5rd3JhcFwiOiBudWxsLFxuICBcIl9zcGVjXCI6IFwidG91Z2gtY29va2llQF4yLjMuMlwiLFxuICBcIl93aGVyZVwiOiBcIi9ob21lL2dhYnJpZWwvRG9jdW1lbnRzL3dlYi1zY3JhcGVyLWNocm9tZS1leHRlbnNpb24vbm9kZV9tb2R1bGVzL2pzZG9tXCIsXG4gIFwiYXV0aG9yXCI6IHtcbiAgICBcIm5hbWVcIjogXCJKZXJlbXkgU3Rhc2hld3NreVwiLFxuICAgIFwiZW1haWxcIjogXCJqc3Rhc2hld3NreUBzYWxlc2ZvcmNlLmNvbVwiXG4gIH0sXG4gIFwiYnVnc1wiOiB7XG4gICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vc2FsZXNmb3JjZS90b3VnaC1jb29raWUvaXNzdWVzXCJcbiAgfSxcbiAgXCJjb250cmlidXRvcnNcIjogW1xuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIkFsZXhhbmRlciBTYXZpblwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJJYW4gTGl2aW5nc3RvbmVcIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiSXZhbiBOaWt1bGluXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIkxhbGl0IEthcG9vclwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJTYW0gVGhvbXBzb25cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiU2ViYXN0aWFuIE1heXJcIlxuICAgIH1cbiAgXSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwicHVueWNvZGVcIjogXCJeMS40LjFcIlxuICB9LFxuICBcImRlc2NyaXB0aW9uXCI6IFwiUkZDNjI2NSBDb29raWVzIGFuZCBDb29raWUgSmFyIGZvciBub2RlLmpzXCIsXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImFzeW5jXCI6IFwiXjEuNC4yXCIsXG4gICAgXCJzdHJpbmcucHJvdG90eXBlLnJlcGVhdFwiOiBcIl4wLjIuMFwiLFxuICAgIFwidm93c1wiOiBcIl4wLjguMVwiXG4gIH0sXG4gIFwiZGlyZWN0b3JpZXNcIjoge30sXG4gIFwiZGlzdFwiOiB7XG4gICAgXCJzaGFzdW1cIjogXCJmMDgxZjc2ZTRjODU3MjBlNmMzN2E1ZmFjZWQ3MzcxNTBkODQwNzJhXCIsXG4gICAgXCJ0YXJiYWxsXCI6IFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG91Z2gtY29va2llLy0vdG91Z2gtY29va2llLTIuMy4yLnRnelwiXG4gIH0sXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0wLjhcIlxuICB9LFxuICBcImZpbGVzXCI6IFtcbiAgICBcImxpYlwiXG4gIF0sXG4gIFwiZ2l0SGVhZFwiOiBcIjI2MTBkZjVkYzhlZjczNzNhNDgzZDUwOTAwNmU1ODg3NTcyYTQwNzZcIixcbiAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9zYWxlc2ZvcmNlL3RvdWdoLWNvb2tpZVwiLFxuICBcImtleXdvcmRzXCI6IFtcbiAgICBcIkhUVFBcIixcbiAgICBcImNvb2tpZVwiLFxuICAgIFwiY29va2llc1wiLFxuICAgIFwic2V0LWNvb2tpZVwiLFxuICAgIFwiY29va2llamFyXCIsXG4gICAgXCJqYXJcIixcbiAgICBcIlJGQzYyNjVcIixcbiAgICBcIlJGQzI5NjVcIlxuICBdLFxuICBcImxpY2Vuc2VcIjogXCJCU0QtMy1DbGF1c2VcIixcbiAgXCJtYWluXCI6IFwiLi9saWIvY29va2llXCIsXG4gIFwibWFpbnRhaW5lcnNcIjogW1xuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcImF3YXRlcm1hXCIsXG4gICAgICBcImVtYWlsXCI6IFwiYXdhdGVybWFAYXdhdGVybWEubmV0XCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcImpzdGFzaFwiLFxuICAgICAgXCJlbWFpbFwiOiBcImpzdGFzaEBnbWFpbC5jb21cIlxuICAgIH0sXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwibmV4eHlcIixcbiAgICAgIFwiZW1haWxcIjogXCJlbWlseUBjb250YWN0dmliZS5jb21cIlxuICAgIH1cbiAgXSxcbiAgXCJuYW1lXCI6IFwidG91Z2gtY29va2llXCIsXG4gIFwib3B0aW9uYWxEZXBlbmRlbmNpZXNcIjoge30sXG4gIFwicmVhZG1lXCI6IFwiRVJST1I6IE5vIFJFQURNRSBkYXRhIGZvdW5kIVwiLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiZ2l0Oi8vZ2l0aHViLmNvbS9zYWxlc2ZvcmNlL3RvdWdoLWNvb2tpZS5naXRcIlxuICB9LFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwic3VmZml4dXBcIjogXCJjdXJsIC1vIHB1YmxpY19zdWZmaXhfbGlzdC5kYXQgaHR0cHM6Ly9wdWJsaWNzdWZmaXgub3JnL2xpc3QvcHVibGljX3N1ZmZpeF9saXN0LmRhdCAmJiAuL2dlbmVyYXRlLXB1YnN1ZmZpeC5qc1wiLFxuICAgIFwidGVzdFwiOiBcInZvd3MgdGVzdC8qX3Rlc3QuanNcIlxuICB9LFxuICBcInZlcnNpb25cIjogXCIyLjMuMlwiXG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHB1bnljb2RlID0gcmVxdWlyZShcInB1bnljb2RlXCIpO1xudmFyIG1hcHBpbmdUYWJsZSA9IHJlcXVpcmUoXCIuL2xpYi9tYXBwaW5nVGFibGUuanNvblwiKTtcblxudmFyIFBST0NFU1NJTkdfT1BUSU9OUyA9IHtcbiAgVFJBTlNJVElPTkFMOiAwLFxuICBOT05UUkFOU0lUSU9OQUw6IDFcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShzdHIpIHsgLy8gZml4IGJ1ZyBpbiB2OFxuICByZXR1cm4gc3RyLnNwbGl0KCdcXHUwMDAwJykubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLm5vcm1hbGl6ZSgnTkZDJyk7IH0pLmpvaW4oJ1xcdTAwMDAnKTtcbn1cblxuZnVuY3Rpb24gZmluZFN0YXR1cyh2YWwpIHtcbiAgdmFyIHN0YXJ0ID0gMDtcbiAgdmFyIGVuZCA9IG1hcHBpbmdUYWJsZS5sZW5ndGggLSAxO1xuXG4gIHdoaWxlIChzdGFydCA8PSBlbmQpIHtcbiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigoc3RhcnQgKyBlbmQpIC8gMik7XG5cbiAgICB2YXIgdGFyZ2V0ID0gbWFwcGluZ1RhYmxlW21pZF07XG4gICAgaWYgKHRhcmdldFswXVswXSA8PSB2YWwgJiYgdGFyZ2V0WzBdWzFdID49IHZhbCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHRhcmdldFswXVswXSA+IHZhbCkge1xuICAgICAgZW5kID0gbWlkIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSBtaWQgKyAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgcmVnZXhBc3RyYWxTeW1ib2xzID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZztcblxuZnVuY3Rpb24gY291bnRTeW1ib2xzKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgLy8gcmVwbGFjZSBldmVyeSBzdXJyb2dhdGUgcGFpciB3aXRoIGEgQk1QIHN5bWJvbFxuICAgIC5yZXBsYWNlKHJlZ2V4QXN0cmFsU3ltYm9scywgJ18nKVxuICAgIC8vIHRoZW4gZ2V0IHRoZSBsZW5ndGhcbiAgICAubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBtYXBDaGFycyhkb21haW5fbmFtZSwgdXNlU1REMywgcHJvY2Vzc2luZ19vcHRpb24pIHtcbiAgdmFyIGhhc0Vycm9yID0gZmFsc2U7XG4gIHZhciBwcm9jZXNzZWQgPSBcIlwiO1xuXG4gIHZhciBsZW4gPSBjb3VudFN5bWJvbHMoZG9tYWluX25hbWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIGNvZGVQb2ludCA9IGRvbWFpbl9uYW1lLmNvZGVQb2ludEF0KGkpO1xuICAgIHZhciBzdGF0dXMgPSBmaW5kU3RhdHVzKGNvZGVQb2ludCk7XG5cbiAgICBzd2l0Y2ggKHN0YXR1c1sxXSkge1xuICAgICAgY2FzZSBcImRpc2FsbG93ZWRcIjpcbiAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaWdub3JlZFwiOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJtYXBwZWRcIjpcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RhdHVzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGV2aWF0aW9uXCI6XG4gICAgICAgIGlmIChwcm9jZXNzaW5nX29wdGlvbiA9PT0gUFJPQ0VTU0lOR19PUFRJT05TLlRSQU5TSVRJT05BTCkge1xuICAgICAgICAgIHByb2Nlc3NlZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsIHN0YXR1c1syXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidmFsaWRcIjpcbiAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIjpcbiAgICAgICAgaWYgKHVzZVNURDMpIHtcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGVQb2ludCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RhdHVzWzJdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkaXNhbGxvd2VkX1NURDNfdmFsaWRcIjpcbiAgICAgICAgaWYgKHVzZVNURDMpIHtcbiAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzZWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZVBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdHJpbmc6IHByb2Nlc3NlZCxcbiAgICBlcnJvcjogaGFzRXJyb3JcbiAgfTtcbn1cblxudmFyIGNvbWJpbmluZ01hcmtzUmVnZXggPSAvW1xcdTAzMDAtXFx1MDM2RlxcdTA0ODMtXFx1MDQ4OVxcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA2MTAtXFx1MDYxQVxcdTA2NEItXFx1MDY1RlxcdTA2NzBcXHUwNkQ2LVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTFcXHUwNzMwLVxcdTA3NEFcXHUwN0E2LVxcdTA3QjBcXHUwN0VCLVxcdTA3RjNcXHUwODE2LVxcdTA4MTlcXHUwODFCLVxcdTA4MjNcXHUwODI1LVxcdTA4MjdcXHUwODI5LVxcdTA4MkRcXHUwODU5LVxcdTA4NUJcXHUwOEU0LVxcdTA5MDNcXHUwOTNBLVxcdTA5M0NcXHUwOTNFLVxcdTA5NEZcXHUwOTUxLVxcdTA5NTdcXHUwOTYyXFx1MDk2M1xcdTA5ODEtXFx1MDk4M1xcdTA5QkNcXHUwOUJFLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRFxcdTA5RDdcXHUwOUUyXFx1MDlFM1xcdTBBMDEtXFx1MEEwM1xcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTcwXFx1MEE3MVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQUJDXFx1MEFCRS1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQjAxLVxcdTBCMDNcXHUwQjNDXFx1MEIzRS1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCNjJcXHUwQjYzXFx1MEI4MlxcdTBCQkUtXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDRFxcdTBCRDdcXHUwQzAwLVxcdTBDMDNcXHUwQzNFLVxcdTBDNDRcXHUwQzQ2LVxcdTBDNDhcXHUwQzRBLVxcdTBDNERcXHUwQzU1XFx1MEM1NlxcdTBDNjJcXHUwQzYzXFx1MEM4MS1cXHUwQzgzXFx1MENCQ1xcdTBDQkUtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENFMlxcdTBDRTNcXHUwRDAxLVxcdTBEMDNcXHUwRDNFLVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENERcXHUwRDU3XFx1MEQ2MlxcdTBENjNcXHUwRDgyXFx1MEQ4M1xcdTBEQ0FcXHUwRENGLVxcdTBERDRcXHUwREQ2XFx1MEREOC1cXHUwRERGXFx1MERGMlxcdTBERjNcXHUwRTMxXFx1MEUzNC1cXHUwRTNBXFx1MEU0Ny1cXHUwRTRFXFx1MEVCMVxcdTBFQjQtXFx1MEVCOVxcdTBFQkJcXHUwRUJDXFx1MEVDOC1cXHUwRUNEXFx1MEYxOFxcdTBGMTlcXHUwRjM1XFx1MEYzN1xcdTBGMzlcXHUwRjNFXFx1MEYzRlxcdTBGNzEtXFx1MEY4NFxcdTBGODZcXHUwRjg3XFx1MEY4RC1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMkItXFx1MTAzRVxcdTEwNTYtXFx1MTA1OVxcdTEwNUUtXFx1MTA2MFxcdTEwNjItXFx1MTA2NFxcdTEwNjctXFx1MTA2RFxcdTEwNzEtXFx1MTA3NFxcdTEwODItXFx1MTA4RFxcdTEwOEZcXHUxMDlBLVxcdTEwOURcXHUxMzVELVxcdTEzNUZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdCNC1cXHUxN0QzXFx1MTdERFxcdTE4MEItXFx1MTgwRFxcdTE4QTlcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOUIwLVxcdTE5QzBcXHUxOUM4XFx1MTlDOVxcdTFBMTctXFx1MUExQlxcdTFBNTUtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0ZcXHUxQUIwLVxcdTFBQkVcXHUxQjAwLVxcdTFCMDRcXHUxQjM0LVxcdTFCNDRcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCODJcXHUxQkExLVxcdTFCQURcXHUxQkU2LVxcdTFCRjNcXHUxQzI0LVxcdTFDMzdcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRThcXHUxQ0VEXFx1MUNGMi1cXHUxQ0Y0XFx1MUNGOFxcdTFDRjlcXHUxREMwLVxcdTFERjVcXHUxREZDLVxcdTFERkZcXHUyMEQwLVxcdTIwRjBcXHUyQ0VGLVxcdTJDRjFcXHUyRDdGXFx1MkRFMC1cXHUyREZGXFx1MzAyQS1cXHUzMDJGXFx1MzA5OVxcdTMwOUFcXHVBNjZGLVxcdUE2NzJcXHVBNjc0LVxcdUE2N0RcXHVBNjlGXFx1QTZGMFxcdUE2RjFcXHVBODAyXFx1QTgwNlxcdUE4MEJcXHVBODIzLVxcdUE4MjdcXHVBODgwXFx1QTg4MVxcdUE4QjQtXFx1QThDNFxcdUE4RTAtXFx1QThGMVxcdUE5MjYtXFx1QTkyRFxcdUE5NDctXFx1QTk1M1xcdUE5ODAtXFx1QTk4M1xcdUE5QjMtXFx1QTlDMFxcdUE5RTVcXHVBQTI5LVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBNERcXHVBQTdCLVxcdUFBN0RcXHVBQUIwXFx1QUFCMi1cXHVBQUI0XFx1QUFCN1xcdUFBQjhcXHVBQUJFXFx1QUFCRlxcdUFBQzFcXHVBQUVCLVxcdUFBRUZcXHVBQUY1XFx1QUFGNlxcdUFCRTMtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1RkIxRVxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyRF18XFx1RDgwMFtcXHVEREZEXFx1REVFMFxcdURGNzYtXFx1REY3QV18XFx1RDgwMltcXHVERTAxLVxcdURFMDNcXHVERTA1XFx1REUwNlxcdURFMEMtXFx1REUwRlxcdURFMzgtXFx1REUzQVxcdURFM0ZcXHVERUU1XFx1REVFNl18XFx1RDgwNFtcXHVEQzAwLVxcdURDMDJcXHVEQzM4LVxcdURDNDZcXHVEQzdGLVxcdURDODJcXHVEQ0IwLVxcdURDQkFcXHVERDAwLVxcdUREMDJcXHVERDI3LVxcdUREMzRcXHVERDczXFx1REQ4MC1cXHVERDgyXFx1RERCMy1cXHVEREMwXFx1REUyQy1cXHVERTM3XFx1REVERi1cXHVERUVBXFx1REYwMS1cXHVERjAzXFx1REYzQ1xcdURGM0UtXFx1REY0NFxcdURGNDdcXHVERjQ4XFx1REY0Qi1cXHVERjREXFx1REY1N1xcdURGNjJcXHVERjYzXFx1REY2Ni1cXHVERjZDXFx1REY3MC1cXHVERjc0XXxcXHVEODA1W1xcdURDQjAtXFx1RENDM1xcdUREQUYtXFx1RERCNVxcdUREQjgtXFx1RERDMFxcdURFMzAtXFx1REU0MFxcdURFQUItXFx1REVCN118XFx1RDgxQVtcXHVERUYwLVxcdURFRjRcXHVERjMwLVxcdURGMzZdfFxcdUQ4MUJbXFx1REY1MS1cXHVERjdFXFx1REY4Ri1cXHVERjkyXXxcXHVEODJGW1xcdURDOURcXHVEQzlFXXxcXHVEODM0W1xcdURENjUtXFx1REQ2OVxcdURENkQtXFx1REQ3MlxcdUREN0ItXFx1REQ4MlxcdUREODUtXFx1REQ4QlxcdUREQUEtXFx1RERBRFxcdURFNDItXFx1REU0NF18XFx1RDgzQVtcXHVEQ0QwLVxcdURDRDZdfFxcdURCNDBbXFx1REQwMC1cXHVEREVGXS87XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTGFiZWwobGFiZWwsIHByb2Nlc3Npbmdfb3B0aW9uKSB7XG4gIGlmIChsYWJlbC5zdWJzdHIoMCwgNCkgPT09IFwieG4tLVwiKSB7XG4gICAgbGFiZWwgPSBwdW55Y29kZS50b1VuaWNvZGUobGFiZWwpO1xuICAgIHByb2Nlc3Npbmdfb3B0aW9uID0gUFJPQ0VTU0lOR19PUFRJT05TLk5PTlRSQU5TSVRJT05BTDtcbiAgfVxuXG4gIHZhciBlcnJvciA9IGZhbHNlO1xuXG4gIGlmIChub3JtYWxpemUobGFiZWwpICE9PSBsYWJlbCB8fFxuICAgICAgKGxhYmVsWzNdID09PSBcIi1cIiAmJiBsYWJlbFs0XSA9PT0gXCItXCIpIHx8XG4gICAgICBsYWJlbFswXSA9PT0gXCItXCIgfHwgbGFiZWxbbGFiZWwubGVuZ3RoIC0gMV0gPT09IFwiLVwiIHx8XG4gICAgICBsYWJlbC5pbmRleE9mKFwiLlwiKSAhPT0gLTEgfHxcbiAgICAgIGxhYmVsLnNlYXJjaChjb21iaW5pbmdNYXJrc1JlZ2V4KSA9PT0gMCkge1xuICAgIGVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBsZW4gPSBjb3VudFN5bWJvbHMobGFiZWwpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHN0YXR1cyA9IGZpbmRTdGF0dXMobGFiZWwuY29kZVBvaW50QXQoaSkpO1xuICAgIGlmICgocHJvY2Vzc2luZyA9PT0gUFJPQ0VTU0lOR19PUFRJT05TLlRSQU5TSVRJT05BTCAmJiBzdGF0dXNbMV0gIT09IFwidmFsaWRcIikgfHxcbiAgICAgICAgKHByb2Nlc3NpbmcgPT09IFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwgJiZcbiAgICAgICAgIHN0YXR1c1sxXSAhPT0gXCJ2YWxpZFwiICYmIHN0YXR1c1sxXSAhPT0gXCJkZXZpYXRpb25cIikpIHtcbiAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGFiZWw6IGxhYmVsLFxuICAgIGVycm9yOiBlcnJvclxuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbikge1xuICB2YXIgcmVzdWx0ID0gbWFwQ2hhcnMoZG9tYWluX25hbWUsIHVzZVNURDMsIHByb2Nlc3Npbmdfb3B0aW9uKTtcbiAgcmVzdWx0LnN0cmluZyA9IG5vcm1hbGl6ZShyZXN1bHQuc3RyaW5nKTtcblxuICB2YXIgbGFiZWxzID0gcmVzdWx0LnN0cmluZy5zcGxpdChcIi5cIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGFiZWxzLmxlbmd0aDsgKytpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWxpZGF0aW9uID0gdmFsaWRhdGVMYWJlbChsYWJlbHNbaV0pO1xuICAgICAgbGFiZWxzW2ldID0gdmFsaWRhdGlvbi5sYWJlbDtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHJlc3VsdC5lcnJvciB8fCB2YWxpZGF0aW9uLmVycm9yO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0cmluZzogbGFiZWxzLmpvaW4oXCIuXCIpLFxuICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMudG9BU0NJSSA9IGZ1bmN0aW9uKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbiwgdmVyaWZ5RG5zTGVuZ3RoKSB7XG4gIHZhciByZXN1bHQgPSBwcm9jZXNzaW5nKGRvbWFpbl9uYW1lLCB1c2VTVEQzLCBwcm9jZXNzaW5nX29wdGlvbik7XG4gIHZhciBsYWJlbHMgPSByZXN1bHQuc3RyaW5nLnNwbGl0KFwiLlwiKTtcbiAgbGFiZWxzID0gbGFiZWxzLm1hcChmdW5jdGlvbihsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBwdW55Y29kZS50b0FTQ0lJKGwpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdHJ1ZTtcbiAgICAgIHJldHVybiBsO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHZlcmlmeURuc0xlbmd0aCkge1xuICAgIHZhciB0b3RhbCA9IGxhYmVscy5zbGljZSgwLCBsYWJlbHMubGVuZ3RoIC0gMSkuam9pbihcIi5cIikubGVuZ3RoO1xuICAgIGlmICh0b3RhbC5sZW5ndGggPiAyNTMgfHwgdG90YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQuZXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGk9MDsgaSA8IGxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGxhYmVscy5sZW5ndGggPiA2MyB8fCBsYWJlbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc3VsdC5lcnJvciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChyZXN1bHQuZXJyb3IpIHJldHVybiBudWxsO1xuICByZXR1cm4gbGFiZWxzLmpvaW4oXCIuXCIpO1xufTtcblxubW9kdWxlLmV4cG9ydHMudG9Vbmljb2RlID0gZnVuY3Rpb24oZG9tYWluX25hbWUsIHVzZVNURDMpIHtcbiAgdmFyIHJlc3VsdCA9IHByb2Nlc3NpbmcoZG9tYWluX25hbWUsIHVzZVNURDMsIFBST0NFU1NJTkdfT1BUSU9OUy5OT05UUkFOU0lUSU9OQUwpO1xuXG4gIHJldHVybiB7XG4gICAgZG9tYWluOiByZXN1bHQuc3RyaW5nLFxuICAgIGVycm9yOiByZXN1bHQuZXJyb3JcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzLlBST0NFU1NJTkdfT1BUSU9OUyA9IFBST0NFU1NJTkdfT1BUSU9OUztcbiIsIm1vZHVsZS5leHBvcnRzPVtbWzAsNDRdLFwiZGlzYWxsb3dlZF9TVEQzX3ZhbGlkXCJdLFtbNDUsNDZdLFwidmFsaWRcIl0sW1s0Nyw0N10sXCJkaXNhbGxvd2VkX1NURDNfdmFsaWRcIl0sW1s0OCw1N10sXCJ2YWxpZFwiXSxbWzU4LDY0XSxcImRpc2FsbG93ZWRfU1REM192YWxpZFwiXSxbWzY1LDY1XSxcIm1hcHBlZFwiLFs5N11dLFtbNjYsNjZdLFwibWFwcGVkXCIsWzk4XV0sW1s2Nyw2N10sXCJtYXBwZWRcIixbOTldXSxbWzY4LDY4XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzY5LDY5XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzcwLDcwXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzcxLDcxXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzcyLDcyXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzczLDczXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzc0LDc0XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzc1LDc1XSxcIm1hcHBlZFwiLFsxMDddXSxbWzc2LDc2XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzc3LDc3XSxcIm1hcHBlZFwiLFsxMDldXSxbWzc4LDc4XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzc5LDc5XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzgwLDgwXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzgxLDgxXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzgyLDgyXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzgzLDgzXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzg0LDg0XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzg1LDg1XSxcIm1hcHBlZFwiLFsxMTddXSxbWzg2LDg2XSxcIm1hcHBlZFwiLFsxMThdXSxbWzg3LDg3XSxcIm1hcHBlZFwiLFsxMTldXSxbWzg4LDg4XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzg5LDg5XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzkwLDkwXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzkxLDk2XSxcImRpc2FsbG93ZWRfU1REM192YWxpZFwiXSxbWzk3LDEyMl0sXCJ2YWxpZFwiXSxbWzEyMywxMjddLFwiZGlzYWxsb3dlZF9TVEQzX3ZhbGlkXCJdLFtbMTI4LDE1OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTYwLDE2MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyXV0sW1sxNjEsMTY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNjgsMTY4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzc2XV0sW1sxNjksMTY5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNzAsMTcwXSxcIm1hcHBlZFwiLFs5N11dLFtbMTcxLDE3Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTczLDE3M10sXCJpZ25vcmVkXCJdLFtbMTc0LDE3NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTc1LDE3NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Ml1dLFtbMTc2LDE3N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTc4LDE3OF0sXCJtYXBwZWRcIixbNTBdXSxbWzE3OSwxNzldLFwibWFwcGVkXCIsWzUxXV0sW1sxODAsMTgwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzY5XV0sW1sxODEsMTgxXSxcIm1hcHBlZFwiLFs5NTZdXSxbWzE4MiwxODJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE4MywxODNdLFwidmFsaWRcIl0sW1sxODQsMTg0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsODA3XV0sW1sxODUsMTg1XSxcIm1hcHBlZFwiLFs0OV1dLFtbMTg2LDE4Nl0sXCJtYXBwZWRcIixbMTExXV0sW1sxODcsMTg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxODgsMTg4XSxcIm1hcHBlZFwiLFs0OSw4MjYwLDUyXV0sW1sxODksMTg5XSxcIm1hcHBlZFwiLFs0OSw4MjYwLDUwXV0sW1sxOTAsMTkwXSxcIm1hcHBlZFwiLFs1MSw4MjYwLDUyXV0sW1sxOTEsMTkxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxOTIsMTkyXSxcIm1hcHBlZFwiLFsyMjRdXSxbWzE5MywxOTNdLFwibWFwcGVkXCIsWzIyNV1dLFtbMTk0LDE5NF0sXCJtYXBwZWRcIixbMjI2XV0sW1sxOTUsMTk1XSxcIm1hcHBlZFwiLFsyMjddXSxbWzE5NiwxOTZdLFwibWFwcGVkXCIsWzIyOF1dLFtbMTk3LDE5N10sXCJtYXBwZWRcIixbMjI5XV0sW1sxOTgsMTk4XSxcIm1hcHBlZFwiLFsyMzBdXSxbWzE5OSwxOTldLFwibWFwcGVkXCIsWzIzMV1dLFtbMjAwLDIwMF0sXCJtYXBwZWRcIixbMjMyXV0sW1syMDEsMjAxXSxcIm1hcHBlZFwiLFsyMzNdXSxbWzIwMiwyMDJdLFwibWFwcGVkXCIsWzIzNF1dLFtbMjAzLDIwM10sXCJtYXBwZWRcIixbMjM1XV0sW1syMDQsMjA0XSxcIm1hcHBlZFwiLFsyMzZdXSxbWzIwNSwyMDVdLFwibWFwcGVkXCIsWzIzN11dLFtbMjA2LDIwNl0sXCJtYXBwZWRcIixbMjM4XV0sW1syMDcsMjA3XSxcIm1hcHBlZFwiLFsyMzldXSxbWzIwOCwyMDhdLFwibWFwcGVkXCIsWzI0MF1dLFtbMjA5LDIwOV0sXCJtYXBwZWRcIixbMjQxXV0sW1syMTAsMjEwXSxcIm1hcHBlZFwiLFsyNDJdXSxbWzIxMSwyMTFdLFwibWFwcGVkXCIsWzI0M11dLFtbMjEyLDIxMl0sXCJtYXBwZWRcIixbMjQ0XV0sW1syMTMsMjEzXSxcIm1hcHBlZFwiLFsyNDVdXSxbWzIxNCwyMTRdLFwibWFwcGVkXCIsWzI0Nl1dLFtbMjE1LDIxNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjE2LDIxNl0sXCJtYXBwZWRcIixbMjQ4XV0sW1syMTcsMjE3XSxcIm1hcHBlZFwiLFsyNDldXSxbWzIxOCwyMThdLFwibWFwcGVkXCIsWzI1MF1dLFtbMjE5LDIxOV0sXCJtYXBwZWRcIixbMjUxXV0sW1syMjAsMjIwXSxcIm1hcHBlZFwiLFsyNTJdXSxbWzIyMSwyMjFdLFwibWFwcGVkXCIsWzI1M11dLFtbMjIyLDIyMl0sXCJtYXBwZWRcIixbMjU0XV0sW1syMjMsMjIzXSxcImRldmlhdGlvblwiLFsxMTUsMTE1XV0sW1syMjQsMjQ2XSxcInZhbGlkXCJdLFtbMjQ3LDI0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjQ4LDI1NV0sXCJ2YWxpZFwiXSxbWzI1NiwyNTZdLFwibWFwcGVkXCIsWzI1N11dLFtbMjU3LDI1N10sXCJ2YWxpZFwiXSxbWzI1OCwyNThdLFwibWFwcGVkXCIsWzI1OV1dLFtbMjU5LDI1OV0sXCJ2YWxpZFwiXSxbWzI2MCwyNjBdLFwibWFwcGVkXCIsWzI2MV1dLFtbMjYxLDI2MV0sXCJ2YWxpZFwiXSxbWzI2MiwyNjJdLFwibWFwcGVkXCIsWzI2M11dLFtbMjYzLDI2M10sXCJ2YWxpZFwiXSxbWzI2NCwyNjRdLFwibWFwcGVkXCIsWzI2NV1dLFtbMjY1LDI2NV0sXCJ2YWxpZFwiXSxbWzI2NiwyNjZdLFwibWFwcGVkXCIsWzI2N11dLFtbMjY3LDI2N10sXCJ2YWxpZFwiXSxbWzI2OCwyNjhdLFwibWFwcGVkXCIsWzI2OV1dLFtbMjY5LDI2OV0sXCJ2YWxpZFwiXSxbWzI3MCwyNzBdLFwibWFwcGVkXCIsWzI3MV1dLFtbMjcxLDI3MV0sXCJ2YWxpZFwiXSxbWzI3MiwyNzJdLFwibWFwcGVkXCIsWzI3M11dLFtbMjczLDI3M10sXCJ2YWxpZFwiXSxbWzI3NCwyNzRdLFwibWFwcGVkXCIsWzI3NV1dLFtbMjc1LDI3NV0sXCJ2YWxpZFwiXSxbWzI3NiwyNzZdLFwibWFwcGVkXCIsWzI3N11dLFtbMjc3LDI3N10sXCJ2YWxpZFwiXSxbWzI3OCwyNzhdLFwibWFwcGVkXCIsWzI3OV1dLFtbMjc5LDI3OV0sXCJ2YWxpZFwiXSxbWzI4MCwyODBdLFwibWFwcGVkXCIsWzI4MV1dLFtbMjgxLDI4MV0sXCJ2YWxpZFwiXSxbWzI4MiwyODJdLFwibWFwcGVkXCIsWzI4M11dLFtbMjgzLDI4M10sXCJ2YWxpZFwiXSxbWzI4NCwyODRdLFwibWFwcGVkXCIsWzI4NV1dLFtbMjg1LDI4NV0sXCJ2YWxpZFwiXSxbWzI4NiwyODZdLFwibWFwcGVkXCIsWzI4N11dLFtbMjg3LDI4N10sXCJ2YWxpZFwiXSxbWzI4OCwyODhdLFwibWFwcGVkXCIsWzI4OV1dLFtbMjg5LDI4OV0sXCJ2YWxpZFwiXSxbWzI5MCwyOTBdLFwibWFwcGVkXCIsWzI5MV1dLFtbMjkxLDI5MV0sXCJ2YWxpZFwiXSxbWzI5MiwyOTJdLFwibWFwcGVkXCIsWzI5M11dLFtbMjkzLDI5M10sXCJ2YWxpZFwiXSxbWzI5NCwyOTRdLFwibWFwcGVkXCIsWzI5NV1dLFtbMjk1LDI5NV0sXCJ2YWxpZFwiXSxbWzI5NiwyOTZdLFwibWFwcGVkXCIsWzI5N11dLFtbMjk3LDI5N10sXCJ2YWxpZFwiXSxbWzI5OCwyOThdLFwibWFwcGVkXCIsWzI5OV1dLFtbMjk5LDI5OV0sXCJ2YWxpZFwiXSxbWzMwMCwzMDBdLFwibWFwcGVkXCIsWzMwMV1dLFtbMzAxLDMwMV0sXCJ2YWxpZFwiXSxbWzMwMiwzMDJdLFwibWFwcGVkXCIsWzMwM11dLFtbMzAzLDMwM10sXCJ2YWxpZFwiXSxbWzMwNCwzMDRdLFwibWFwcGVkXCIsWzEwNSw3NzVdXSxbWzMwNSwzMDVdLFwidmFsaWRcIl0sW1szMDYsMzA3XSxcIm1hcHBlZFwiLFsxMDUsMTA2XV0sW1szMDgsMzA4XSxcIm1hcHBlZFwiLFszMDldXSxbWzMwOSwzMDldLFwidmFsaWRcIl0sW1szMTAsMzEwXSxcIm1hcHBlZFwiLFszMTFdXSxbWzMxMSwzMTJdLFwidmFsaWRcIl0sW1szMTMsMzEzXSxcIm1hcHBlZFwiLFszMTRdXSxbWzMxNCwzMTRdLFwidmFsaWRcIl0sW1szMTUsMzE1XSxcIm1hcHBlZFwiLFszMTZdXSxbWzMxNiwzMTZdLFwidmFsaWRcIl0sW1szMTcsMzE3XSxcIm1hcHBlZFwiLFszMThdXSxbWzMxOCwzMThdLFwidmFsaWRcIl0sW1szMTksMzIwXSxcIm1hcHBlZFwiLFsxMDgsMTgzXV0sW1szMjEsMzIxXSxcIm1hcHBlZFwiLFszMjJdXSxbWzMyMiwzMjJdLFwidmFsaWRcIl0sW1szMjMsMzIzXSxcIm1hcHBlZFwiLFszMjRdXSxbWzMyNCwzMjRdLFwidmFsaWRcIl0sW1szMjUsMzI1XSxcIm1hcHBlZFwiLFszMjZdXSxbWzMyNiwzMjZdLFwidmFsaWRcIl0sW1szMjcsMzI3XSxcIm1hcHBlZFwiLFszMjhdXSxbWzMyOCwzMjhdLFwidmFsaWRcIl0sW1szMjksMzI5XSxcIm1hcHBlZFwiLFs3MDAsMTEwXV0sW1szMzAsMzMwXSxcIm1hcHBlZFwiLFszMzFdXSxbWzMzMSwzMzFdLFwidmFsaWRcIl0sW1szMzIsMzMyXSxcIm1hcHBlZFwiLFszMzNdXSxbWzMzMywzMzNdLFwidmFsaWRcIl0sW1szMzQsMzM0XSxcIm1hcHBlZFwiLFszMzVdXSxbWzMzNSwzMzVdLFwidmFsaWRcIl0sW1szMzYsMzM2XSxcIm1hcHBlZFwiLFszMzddXSxbWzMzNywzMzddLFwidmFsaWRcIl0sW1szMzgsMzM4XSxcIm1hcHBlZFwiLFszMzldXSxbWzMzOSwzMzldLFwidmFsaWRcIl0sW1szNDAsMzQwXSxcIm1hcHBlZFwiLFszNDFdXSxbWzM0MSwzNDFdLFwidmFsaWRcIl0sW1szNDIsMzQyXSxcIm1hcHBlZFwiLFszNDNdXSxbWzM0MywzNDNdLFwidmFsaWRcIl0sW1szNDQsMzQ0XSxcIm1hcHBlZFwiLFszNDVdXSxbWzM0NSwzNDVdLFwidmFsaWRcIl0sW1szNDYsMzQ2XSxcIm1hcHBlZFwiLFszNDddXSxbWzM0NywzNDddLFwidmFsaWRcIl0sW1szNDgsMzQ4XSxcIm1hcHBlZFwiLFszNDldXSxbWzM0OSwzNDldLFwidmFsaWRcIl0sW1szNTAsMzUwXSxcIm1hcHBlZFwiLFszNTFdXSxbWzM1MSwzNTFdLFwidmFsaWRcIl0sW1szNTIsMzUyXSxcIm1hcHBlZFwiLFszNTNdXSxbWzM1MywzNTNdLFwidmFsaWRcIl0sW1szNTQsMzU0XSxcIm1hcHBlZFwiLFszNTVdXSxbWzM1NSwzNTVdLFwidmFsaWRcIl0sW1szNTYsMzU2XSxcIm1hcHBlZFwiLFszNTddXSxbWzM1NywzNTddLFwidmFsaWRcIl0sW1szNTgsMzU4XSxcIm1hcHBlZFwiLFszNTldXSxbWzM1OSwzNTldLFwidmFsaWRcIl0sW1szNjAsMzYwXSxcIm1hcHBlZFwiLFszNjFdXSxbWzM2MSwzNjFdLFwidmFsaWRcIl0sW1szNjIsMzYyXSxcIm1hcHBlZFwiLFszNjNdXSxbWzM2MywzNjNdLFwidmFsaWRcIl0sW1szNjQsMzY0XSxcIm1hcHBlZFwiLFszNjVdXSxbWzM2NSwzNjVdLFwidmFsaWRcIl0sW1szNjYsMzY2XSxcIm1hcHBlZFwiLFszNjddXSxbWzM2NywzNjddLFwidmFsaWRcIl0sW1szNjgsMzY4XSxcIm1hcHBlZFwiLFszNjldXSxbWzM2OSwzNjldLFwidmFsaWRcIl0sW1szNzAsMzcwXSxcIm1hcHBlZFwiLFszNzFdXSxbWzM3MSwzNzFdLFwidmFsaWRcIl0sW1szNzIsMzcyXSxcIm1hcHBlZFwiLFszNzNdXSxbWzM3MywzNzNdLFwidmFsaWRcIl0sW1szNzQsMzc0XSxcIm1hcHBlZFwiLFszNzVdXSxbWzM3NSwzNzVdLFwidmFsaWRcIl0sW1szNzYsMzc2XSxcIm1hcHBlZFwiLFsyNTVdXSxbWzM3NywzNzddLFwibWFwcGVkXCIsWzM3OF1dLFtbMzc4LDM3OF0sXCJ2YWxpZFwiXSxbWzM3OSwzNzldLFwibWFwcGVkXCIsWzM4MF1dLFtbMzgwLDM4MF0sXCJ2YWxpZFwiXSxbWzM4MSwzODFdLFwibWFwcGVkXCIsWzM4Ml1dLFtbMzgyLDM4Ml0sXCJ2YWxpZFwiXSxbWzM4MywzODNdLFwibWFwcGVkXCIsWzExNV1dLFtbMzg0LDM4NF0sXCJ2YWxpZFwiXSxbWzM4NSwzODVdLFwibWFwcGVkXCIsWzU5NV1dLFtbMzg2LDM4Nl0sXCJtYXBwZWRcIixbMzg3XV0sW1szODcsMzg3XSxcInZhbGlkXCJdLFtbMzg4LDM4OF0sXCJtYXBwZWRcIixbMzg5XV0sW1szODksMzg5XSxcInZhbGlkXCJdLFtbMzkwLDM5MF0sXCJtYXBwZWRcIixbNTk2XV0sW1szOTEsMzkxXSxcIm1hcHBlZFwiLFszOTJdXSxbWzM5MiwzOTJdLFwidmFsaWRcIl0sW1szOTMsMzkzXSxcIm1hcHBlZFwiLFs1OThdXSxbWzM5NCwzOTRdLFwibWFwcGVkXCIsWzU5OV1dLFtbMzk1LDM5NV0sXCJtYXBwZWRcIixbMzk2XV0sW1szOTYsMzk3XSxcInZhbGlkXCJdLFtbMzk4LDM5OF0sXCJtYXBwZWRcIixbNDc3XV0sW1szOTksMzk5XSxcIm1hcHBlZFwiLFs2MDFdXSxbWzQwMCw0MDBdLFwibWFwcGVkXCIsWzYwM11dLFtbNDAxLDQwMV0sXCJtYXBwZWRcIixbNDAyXV0sW1s0MDIsNDAyXSxcInZhbGlkXCJdLFtbNDAzLDQwM10sXCJtYXBwZWRcIixbNjA4XV0sW1s0MDQsNDA0XSxcIm1hcHBlZFwiLFs2MTFdXSxbWzQwNSw0MDVdLFwidmFsaWRcIl0sW1s0MDYsNDA2XSxcIm1hcHBlZFwiLFs2MTddXSxbWzQwNyw0MDddLFwibWFwcGVkXCIsWzYxNl1dLFtbNDA4LDQwOF0sXCJtYXBwZWRcIixbNDA5XV0sW1s0MDksNDExXSxcInZhbGlkXCJdLFtbNDEyLDQxMl0sXCJtYXBwZWRcIixbNjIzXV0sW1s0MTMsNDEzXSxcIm1hcHBlZFwiLFs2MjZdXSxbWzQxNCw0MTRdLFwidmFsaWRcIl0sW1s0MTUsNDE1XSxcIm1hcHBlZFwiLFs2MjldXSxbWzQxNiw0MTZdLFwibWFwcGVkXCIsWzQxN11dLFtbNDE3LDQxN10sXCJ2YWxpZFwiXSxbWzQxOCw0MThdLFwibWFwcGVkXCIsWzQxOV1dLFtbNDE5LDQxOV0sXCJ2YWxpZFwiXSxbWzQyMCw0MjBdLFwibWFwcGVkXCIsWzQyMV1dLFtbNDIxLDQyMV0sXCJ2YWxpZFwiXSxbWzQyMiw0MjJdLFwibWFwcGVkXCIsWzY0MF1dLFtbNDIzLDQyM10sXCJtYXBwZWRcIixbNDI0XV0sW1s0MjQsNDI0XSxcInZhbGlkXCJdLFtbNDI1LDQyNV0sXCJtYXBwZWRcIixbNjQzXV0sW1s0MjYsNDI3XSxcInZhbGlkXCJdLFtbNDI4LDQyOF0sXCJtYXBwZWRcIixbNDI5XV0sW1s0MjksNDI5XSxcInZhbGlkXCJdLFtbNDMwLDQzMF0sXCJtYXBwZWRcIixbNjQ4XV0sW1s0MzEsNDMxXSxcIm1hcHBlZFwiLFs0MzJdXSxbWzQzMiw0MzJdLFwidmFsaWRcIl0sW1s0MzMsNDMzXSxcIm1hcHBlZFwiLFs2NTBdXSxbWzQzNCw0MzRdLFwibWFwcGVkXCIsWzY1MV1dLFtbNDM1LDQzNV0sXCJtYXBwZWRcIixbNDM2XV0sW1s0MzYsNDM2XSxcInZhbGlkXCJdLFtbNDM3LDQzN10sXCJtYXBwZWRcIixbNDM4XV0sW1s0MzgsNDM4XSxcInZhbGlkXCJdLFtbNDM5LDQzOV0sXCJtYXBwZWRcIixbNjU4XV0sW1s0NDAsNDQwXSxcIm1hcHBlZFwiLFs0NDFdXSxbWzQ0MSw0NDNdLFwidmFsaWRcIl0sW1s0NDQsNDQ0XSxcIm1hcHBlZFwiLFs0NDVdXSxbWzQ0NSw0NTFdLFwidmFsaWRcIl0sW1s0NTIsNDU0XSxcIm1hcHBlZFwiLFsxMDAsMzgyXV0sW1s0NTUsNDU3XSxcIm1hcHBlZFwiLFsxMDgsMTA2XV0sW1s0NTgsNDYwXSxcIm1hcHBlZFwiLFsxMTAsMTA2XV0sW1s0NjEsNDYxXSxcIm1hcHBlZFwiLFs0NjJdXSxbWzQ2Miw0NjJdLFwidmFsaWRcIl0sW1s0NjMsNDYzXSxcIm1hcHBlZFwiLFs0NjRdXSxbWzQ2NCw0NjRdLFwidmFsaWRcIl0sW1s0NjUsNDY1XSxcIm1hcHBlZFwiLFs0NjZdXSxbWzQ2Niw0NjZdLFwidmFsaWRcIl0sW1s0NjcsNDY3XSxcIm1hcHBlZFwiLFs0NjhdXSxbWzQ2OCw0NjhdLFwidmFsaWRcIl0sW1s0NjksNDY5XSxcIm1hcHBlZFwiLFs0NzBdXSxbWzQ3MCw0NzBdLFwidmFsaWRcIl0sW1s0NzEsNDcxXSxcIm1hcHBlZFwiLFs0NzJdXSxbWzQ3Miw0NzJdLFwidmFsaWRcIl0sW1s0NzMsNDczXSxcIm1hcHBlZFwiLFs0NzRdXSxbWzQ3NCw0NzRdLFwidmFsaWRcIl0sW1s0NzUsNDc1XSxcIm1hcHBlZFwiLFs0NzZdXSxbWzQ3Niw0NzddLFwidmFsaWRcIl0sW1s0NzgsNDc4XSxcIm1hcHBlZFwiLFs0NzldXSxbWzQ3OSw0NzldLFwidmFsaWRcIl0sW1s0ODAsNDgwXSxcIm1hcHBlZFwiLFs0ODFdXSxbWzQ4MSw0ODFdLFwidmFsaWRcIl0sW1s0ODIsNDgyXSxcIm1hcHBlZFwiLFs0ODNdXSxbWzQ4Myw0ODNdLFwidmFsaWRcIl0sW1s0ODQsNDg0XSxcIm1hcHBlZFwiLFs0ODVdXSxbWzQ4NSw0ODVdLFwidmFsaWRcIl0sW1s0ODYsNDg2XSxcIm1hcHBlZFwiLFs0ODddXSxbWzQ4Nyw0ODddLFwidmFsaWRcIl0sW1s0ODgsNDg4XSxcIm1hcHBlZFwiLFs0ODldXSxbWzQ4OSw0ODldLFwidmFsaWRcIl0sW1s0OTAsNDkwXSxcIm1hcHBlZFwiLFs0OTFdXSxbWzQ5MSw0OTFdLFwidmFsaWRcIl0sW1s0OTIsNDkyXSxcIm1hcHBlZFwiLFs0OTNdXSxbWzQ5Myw0OTNdLFwidmFsaWRcIl0sW1s0OTQsNDk0XSxcIm1hcHBlZFwiLFs0OTVdXSxbWzQ5NSw0OTZdLFwidmFsaWRcIl0sW1s0OTcsNDk5XSxcIm1hcHBlZFwiLFsxMDAsMTIyXV0sW1s1MDAsNTAwXSxcIm1hcHBlZFwiLFs1MDFdXSxbWzUwMSw1MDFdLFwidmFsaWRcIl0sW1s1MDIsNTAyXSxcIm1hcHBlZFwiLFs0MDVdXSxbWzUwMyw1MDNdLFwibWFwcGVkXCIsWzQ0N11dLFtbNTA0LDUwNF0sXCJtYXBwZWRcIixbNTA1XV0sW1s1MDUsNTA1XSxcInZhbGlkXCJdLFtbNTA2LDUwNl0sXCJtYXBwZWRcIixbNTA3XV0sW1s1MDcsNTA3XSxcInZhbGlkXCJdLFtbNTA4LDUwOF0sXCJtYXBwZWRcIixbNTA5XV0sW1s1MDksNTA5XSxcInZhbGlkXCJdLFtbNTEwLDUxMF0sXCJtYXBwZWRcIixbNTExXV0sW1s1MTEsNTExXSxcInZhbGlkXCJdLFtbNTEyLDUxMl0sXCJtYXBwZWRcIixbNTEzXV0sW1s1MTMsNTEzXSxcInZhbGlkXCJdLFtbNTE0LDUxNF0sXCJtYXBwZWRcIixbNTE1XV0sW1s1MTUsNTE1XSxcInZhbGlkXCJdLFtbNTE2LDUxNl0sXCJtYXBwZWRcIixbNTE3XV0sW1s1MTcsNTE3XSxcInZhbGlkXCJdLFtbNTE4LDUxOF0sXCJtYXBwZWRcIixbNTE5XV0sW1s1MTksNTE5XSxcInZhbGlkXCJdLFtbNTIwLDUyMF0sXCJtYXBwZWRcIixbNTIxXV0sW1s1MjEsNTIxXSxcInZhbGlkXCJdLFtbNTIyLDUyMl0sXCJtYXBwZWRcIixbNTIzXV0sW1s1MjMsNTIzXSxcInZhbGlkXCJdLFtbNTI0LDUyNF0sXCJtYXBwZWRcIixbNTI1XV0sW1s1MjUsNTI1XSxcInZhbGlkXCJdLFtbNTI2LDUyNl0sXCJtYXBwZWRcIixbNTI3XV0sW1s1MjcsNTI3XSxcInZhbGlkXCJdLFtbNTI4LDUyOF0sXCJtYXBwZWRcIixbNTI5XV0sW1s1MjksNTI5XSxcInZhbGlkXCJdLFtbNTMwLDUzMF0sXCJtYXBwZWRcIixbNTMxXV0sW1s1MzEsNTMxXSxcInZhbGlkXCJdLFtbNTMyLDUzMl0sXCJtYXBwZWRcIixbNTMzXV0sW1s1MzMsNTMzXSxcInZhbGlkXCJdLFtbNTM0LDUzNF0sXCJtYXBwZWRcIixbNTM1XV0sW1s1MzUsNTM1XSxcInZhbGlkXCJdLFtbNTM2LDUzNl0sXCJtYXBwZWRcIixbNTM3XV0sW1s1MzcsNTM3XSxcInZhbGlkXCJdLFtbNTM4LDUzOF0sXCJtYXBwZWRcIixbNTM5XV0sW1s1MzksNTM5XSxcInZhbGlkXCJdLFtbNTQwLDU0MF0sXCJtYXBwZWRcIixbNTQxXV0sW1s1NDEsNTQxXSxcInZhbGlkXCJdLFtbNTQyLDU0Ml0sXCJtYXBwZWRcIixbNTQzXV0sW1s1NDMsNTQzXSxcInZhbGlkXCJdLFtbNTQ0LDU0NF0sXCJtYXBwZWRcIixbNDE0XV0sW1s1NDUsNTQ1XSxcInZhbGlkXCJdLFtbNTQ2LDU0Nl0sXCJtYXBwZWRcIixbNTQ3XV0sW1s1NDcsNTQ3XSxcInZhbGlkXCJdLFtbNTQ4LDU0OF0sXCJtYXBwZWRcIixbNTQ5XV0sW1s1NDksNTQ5XSxcInZhbGlkXCJdLFtbNTUwLDU1MF0sXCJtYXBwZWRcIixbNTUxXV0sW1s1NTEsNTUxXSxcInZhbGlkXCJdLFtbNTUyLDU1Ml0sXCJtYXBwZWRcIixbNTUzXV0sW1s1NTMsNTUzXSxcInZhbGlkXCJdLFtbNTU0LDU1NF0sXCJtYXBwZWRcIixbNTU1XV0sW1s1NTUsNTU1XSxcInZhbGlkXCJdLFtbNTU2LDU1Nl0sXCJtYXBwZWRcIixbNTU3XV0sW1s1NTcsNTU3XSxcInZhbGlkXCJdLFtbNTU4LDU1OF0sXCJtYXBwZWRcIixbNTU5XV0sW1s1NTksNTU5XSxcInZhbGlkXCJdLFtbNTYwLDU2MF0sXCJtYXBwZWRcIixbNTYxXV0sW1s1NjEsNTYxXSxcInZhbGlkXCJdLFtbNTYyLDU2Ml0sXCJtYXBwZWRcIixbNTYzXV0sW1s1NjMsNTYzXSxcInZhbGlkXCJdLFtbNTY0LDU2Nl0sXCJ2YWxpZFwiXSxbWzU2Nyw1NjldLFwidmFsaWRcIl0sW1s1NzAsNTcwXSxcIm1hcHBlZFwiLFsxMTM2NV1dLFtbNTcxLDU3MV0sXCJtYXBwZWRcIixbNTcyXV0sW1s1NzIsNTcyXSxcInZhbGlkXCJdLFtbNTczLDU3M10sXCJtYXBwZWRcIixbNDEwXV0sW1s1NzQsNTc0XSxcIm1hcHBlZFwiLFsxMTM2Nl1dLFtbNTc1LDU3Nl0sXCJ2YWxpZFwiXSxbWzU3Nyw1NzddLFwibWFwcGVkXCIsWzU3OF1dLFtbNTc4LDU3OF0sXCJ2YWxpZFwiXSxbWzU3OSw1NzldLFwibWFwcGVkXCIsWzM4NF1dLFtbNTgwLDU4MF0sXCJtYXBwZWRcIixbNjQ5XV0sW1s1ODEsNTgxXSxcIm1hcHBlZFwiLFs2NTJdXSxbWzU4Miw1ODJdLFwibWFwcGVkXCIsWzU4M11dLFtbNTgzLDU4M10sXCJ2YWxpZFwiXSxbWzU4NCw1ODRdLFwibWFwcGVkXCIsWzU4NV1dLFtbNTg1LDU4NV0sXCJ2YWxpZFwiXSxbWzU4Niw1ODZdLFwibWFwcGVkXCIsWzU4N11dLFtbNTg3LDU4N10sXCJ2YWxpZFwiXSxbWzU4OCw1ODhdLFwibWFwcGVkXCIsWzU4OV1dLFtbNTg5LDU4OV0sXCJ2YWxpZFwiXSxbWzU5MCw1OTBdLFwibWFwcGVkXCIsWzU5MV1dLFtbNTkxLDU5MV0sXCJ2YWxpZFwiXSxbWzU5Miw2ODBdLFwidmFsaWRcIl0sW1s2ODEsNjg1XSxcInZhbGlkXCJdLFtbNjg2LDY4N10sXCJ2YWxpZFwiXSxbWzY4OCw2ODhdLFwibWFwcGVkXCIsWzEwNF1dLFtbNjg5LDY4OV0sXCJtYXBwZWRcIixbNjE0XV0sW1s2OTAsNjkwXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzY5MSw2OTFdLFwibWFwcGVkXCIsWzExNF1dLFtbNjkyLDY5Ml0sXCJtYXBwZWRcIixbNjMzXV0sW1s2OTMsNjkzXSxcIm1hcHBlZFwiLFs2MzVdXSxbWzY5NCw2OTRdLFwibWFwcGVkXCIsWzY0MV1dLFtbNjk1LDY5NV0sXCJtYXBwZWRcIixbMTE5XV0sW1s2OTYsNjk2XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzY5Nyw3MDVdLFwidmFsaWRcIl0sW1s3MDYsNzA5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MTAsNzIxXSxcInZhbGlkXCJdLFtbNzIyLDcyN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzI4LDcyOF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3NF1dLFtbNzI5LDcyOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3NV1dLFtbNzMwLDczMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3OF1dLFtbNzMxLDczMV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDgwOF1dLFtbNzMyLDczMl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3MV1dLFtbNzMzLDczM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3OV1dLFtbNzM0LDczNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzM1LDczNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzM2LDczNl0sXCJtYXBwZWRcIixbNjExXV0sW1s3MzcsNzM3XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzczOCw3MzhdLFwibWFwcGVkXCIsWzExNV1dLFtbNzM5LDczOV0sXCJtYXBwZWRcIixbMTIwXV0sW1s3NDAsNzQwXSxcIm1hcHBlZFwiLFs2NjFdXSxbWzc0MSw3NDVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzc0Niw3NDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzc0OCw3NDhdLFwidmFsaWRcIl0sW1s3NDksNzQ5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3NTAsNzUwXSxcInZhbGlkXCJdLFtbNzUxLDc2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzY4LDgzMV0sXCJ2YWxpZFwiXSxbWzgzMiw4MzJdLFwibWFwcGVkXCIsWzc2OF1dLFtbODMzLDgzM10sXCJtYXBwZWRcIixbNzY5XV0sW1s4MzQsODM0XSxcInZhbGlkXCJdLFtbODM1LDgzNV0sXCJtYXBwZWRcIixbNzg3XV0sW1s4MzYsODM2XSxcIm1hcHBlZFwiLFs3NzYsNzY5XV0sW1s4MzcsODM3XSxcIm1hcHBlZFwiLFs5NTNdXSxbWzgzOCw4NDZdLFwidmFsaWRcIl0sW1s4NDcsODQ3XSxcImlnbm9yZWRcIl0sW1s4NDgsODU1XSxcInZhbGlkXCJdLFtbODU2LDg2MF0sXCJ2YWxpZFwiXSxbWzg2MSw4NjNdLFwidmFsaWRcIl0sW1s4NjQsODY1XSxcInZhbGlkXCJdLFtbODY2LDg2Nl0sXCJ2YWxpZFwiXSxbWzg2Nyw4NzldLFwidmFsaWRcIl0sW1s4ODAsODgwXSxcIm1hcHBlZFwiLFs4ODFdXSxbWzg4MSw4ODFdLFwidmFsaWRcIl0sW1s4ODIsODgyXSxcIm1hcHBlZFwiLFs4ODNdXSxbWzg4Myw4ODNdLFwidmFsaWRcIl0sW1s4ODQsODg0XSxcIm1hcHBlZFwiLFs2OTddXSxbWzg4NSw4ODVdLFwidmFsaWRcIl0sW1s4ODYsODg2XSxcIm1hcHBlZFwiLFs4ODddXSxbWzg4Nyw4ODddLFwidmFsaWRcIl0sW1s4ODgsODg5XSxcImRpc2FsbG93ZWRcIl0sW1s4OTAsODkwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsOTUzXV0sW1s4OTEsODkzXSxcInZhbGlkXCJdLFtbODk0LDg5NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzU5XV0sW1s4OTUsODk1XSxcIm1hcHBlZFwiLFsxMDExXV0sW1s4OTYsODk5XSxcImRpc2FsbG93ZWRcIl0sW1s5MDAsOTAwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzY5XV0sW1s5MDEsOTAxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzc2LDc2OV1dLFtbOTAyLDkwMl0sXCJtYXBwZWRcIixbOTQwXV0sW1s5MDMsOTAzXSxcIm1hcHBlZFwiLFsxODNdXSxbWzkwNCw5MDRdLFwibWFwcGVkXCIsWzk0MV1dLFtbOTA1LDkwNV0sXCJtYXBwZWRcIixbOTQyXV0sW1s5MDYsOTA2XSxcIm1hcHBlZFwiLFs5NDNdXSxbWzkwNyw5MDddLFwiZGlzYWxsb3dlZFwiXSxbWzkwOCw5MDhdLFwibWFwcGVkXCIsWzk3Ml1dLFtbOTA5LDkwOV0sXCJkaXNhbGxvd2VkXCJdLFtbOTEwLDkxMF0sXCJtYXBwZWRcIixbOTczXV0sW1s5MTEsOTExXSxcIm1hcHBlZFwiLFs5NzRdXSxbWzkxMiw5MTJdLFwidmFsaWRcIl0sW1s5MTMsOTEzXSxcIm1hcHBlZFwiLFs5NDVdXSxbWzkxNCw5MTRdLFwibWFwcGVkXCIsWzk0Nl1dLFtbOTE1LDkxNV0sXCJtYXBwZWRcIixbOTQ3XV0sW1s5MTYsOTE2XSxcIm1hcHBlZFwiLFs5NDhdXSxbWzkxNyw5MTddLFwibWFwcGVkXCIsWzk0OV1dLFtbOTE4LDkxOF0sXCJtYXBwZWRcIixbOTUwXV0sW1s5MTksOTE5XSxcIm1hcHBlZFwiLFs5NTFdXSxbWzkyMCw5MjBdLFwibWFwcGVkXCIsWzk1Ml1dLFtbOTIxLDkyMV0sXCJtYXBwZWRcIixbOTUzXV0sW1s5MjIsOTIyXSxcIm1hcHBlZFwiLFs5NTRdXSxbWzkyMyw5MjNdLFwibWFwcGVkXCIsWzk1NV1dLFtbOTI0LDkyNF0sXCJtYXBwZWRcIixbOTU2XV0sW1s5MjUsOTI1XSxcIm1hcHBlZFwiLFs5NTddXSxbWzkyNiw5MjZdLFwibWFwcGVkXCIsWzk1OF1dLFtbOTI3LDkyN10sXCJtYXBwZWRcIixbOTU5XV0sW1s5MjgsOTI4XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzkyOSw5MjldLFwibWFwcGVkXCIsWzk2MV1dLFtbOTMwLDkzMF0sXCJkaXNhbGxvd2VkXCJdLFtbOTMxLDkzMV0sXCJtYXBwZWRcIixbOTYzXV0sW1s5MzIsOTMyXSxcIm1hcHBlZFwiLFs5NjRdXSxbWzkzMyw5MzNdLFwibWFwcGVkXCIsWzk2NV1dLFtbOTM0LDkzNF0sXCJtYXBwZWRcIixbOTY2XV0sW1s5MzUsOTM1XSxcIm1hcHBlZFwiLFs5NjddXSxbWzkzNiw5MzZdLFwibWFwcGVkXCIsWzk2OF1dLFtbOTM3LDkzN10sXCJtYXBwZWRcIixbOTY5XV0sW1s5MzgsOTM4XSxcIm1hcHBlZFwiLFs5NzBdXSxbWzkzOSw5MzldLFwibWFwcGVkXCIsWzk3MV1dLFtbOTQwLDk2MV0sXCJ2YWxpZFwiXSxbWzk2Miw5NjJdLFwiZGV2aWF0aW9uXCIsWzk2M11dLFtbOTYzLDk3NF0sXCJ2YWxpZFwiXSxbWzk3NSw5NzVdLFwibWFwcGVkXCIsWzk4M11dLFtbOTc2LDk3Nl0sXCJtYXBwZWRcIixbOTQ2XV0sW1s5NzcsOTc3XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzk3OCw5NzhdLFwibWFwcGVkXCIsWzk2NV1dLFtbOTc5LDk3OV0sXCJtYXBwZWRcIixbOTczXV0sW1s5ODAsOTgwXSxcIm1hcHBlZFwiLFs5NzFdXSxbWzk4MSw5ODFdLFwibWFwcGVkXCIsWzk2Nl1dLFtbOTgyLDk4Ml0sXCJtYXBwZWRcIixbOTYwXV0sW1s5ODMsOTgzXSxcInZhbGlkXCJdLFtbOTg0LDk4NF0sXCJtYXBwZWRcIixbOTg1XV0sW1s5ODUsOTg1XSxcInZhbGlkXCJdLFtbOTg2LDk4Nl0sXCJtYXBwZWRcIixbOTg3XV0sW1s5ODcsOTg3XSxcInZhbGlkXCJdLFtbOTg4LDk4OF0sXCJtYXBwZWRcIixbOTg5XV0sW1s5ODksOTg5XSxcInZhbGlkXCJdLFtbOTkwLDk5MF0sXCJtYXBwZWRcIixbOTkxXV0sW1s5OTEsOTkxXSxcInZhbGlkXCJdLFtbOTkyLDk5Ml0sXCJtYXBwZWRcIixbOTkzXV0sW1s5OTMsOTkzXSxcInZhbGlkXCJdLFtbOTk0LDk5NF0sXCJtYXBwZWRcIixbOTk1XV0sW1s5OTUsOTk1XSxcInZhbGlkXCJdLFtbOTk2LDk5Nl0sXCJtYXBwZWRcIixbOTk3XV0sW1s5OTcsOTk3XSxcInZhbGlkXCJdLFtbOTk4LDk5OF0sXCJtYXBwZWRcIixbOTk5XV0sW1s5OTksOTk5XSxcInZhbGlkXCJdLFtbMTAwMCwxMDAwXSxcIm1hcHBlZFwiLFsxMDAxXV0sW1sxMDAxLDEwMDFdLFwidmFsaWRcIl0sW1sxMDAyLDEwMDJdLFwibWFwcGVkXCIsWzEwMDNdXSxbWzEwMDMsMTAwM10sXCJ2YWxpZFwiXSxbWzEwMDQsMTAwNF0sXCJtYXBwZWRcIixbMTAwNV1dLFtbMTAwNSwxMDA1XSxcInZhbGlkXCJdLFtbMTAwNiwxMDA2XSxcIm1hcHBlZFwiLFsxMDA3XV0sW1sxMDA3LDEwMDddLFwidmFsaWRcIl0sW1sxMDA4LDEwMDhdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTAwOSwxMDA5XSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEwMTAsMTAxMF0sXCJtYXBwZWRcIixbOTYzXV0sW1sxMDExLDEwMTFdLFwidmFsaWRcIl0sW1sxMDEyLDEwMTJdLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTAxMywxMDEzXSxcIm1hcHBlZFwiLFs5NDldXSxbWzEwMTQsMTAxNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxNSwxMDE1XSxcIm1hcHBlZFwiLFsxMDE2XV0sW1sxMDE2LDEwMTZdLFwidmFsaWRcIl0sW1sxMDE3LDEwMTddLFwibWFwcGVkXCIsWzk2M11dLFtbMTAxOCwxMDE4XSxcIm1hcHBlZFwiLFsxMDE5XV0sW1sxMDE5LDEwMTldLFwidmFsaWRcIl0sW1sxMDIwLDEwMjBdLFwidmFsaWRcIl0sW1sxMDIxLDEwMjFdLFwibWFwcGVkXCIsWzg5MV1dLFtbMTAyMiwxMDIyXSxcIm1hcHBlZFwiLFs4OTJdXSxbWzEwMjMsMTAyM10sXCJtYXBwZWRcIixbODkzXV0sW1sxMDI0LDEwMjRdLFwibWFwcGVkXCIsWzExMDRdXSxbWzEwMjUsMTAyNV0sXCJtYXBwZWRcIixbMTEwNV1dLFtbMTAyNiwxMDI2XSxcIm1hcHBlZFwiLFsxMTA2XV0sW1sxMDI3LDEwMjddLFwibWFwcGVkXCIsWzExMDddXSxbWzEwMjgsMTAyOF0sXCJtYXBwZWRcIixbMTEwOF1dLFtbMTAyOSwxMDI5XSxcIm1hcHBlZFwiLFsxMTA5XV0sW1sxMDMwLDEwMzBdLFwibWFwcGVkXCIsWzExMTBdXSxbWzEwMzEsMTAzMV0sXCJtYXBwZWRcIixbMTExMV1dLFtbMTAzMiwxMDMyXSxcIm1hcHBlZFwiLFsxMTEyXV0sW1sxMDMzLDEwMzNdLFwibWFwcGVkXCIsWzExMTNdXSxbWzEwMzQsMTAzNF0sXCJtYXBwZWRcIixbMTExNF1dLFtbMTAzNSwxMDM1XSxcIm1hcHBlZFwiLFsxMTE1XV0sW1sxMDM2LDEwMzZdLFwibWFwcGVkXCIsWzExMTZdXSxbWzEwMzcsMTAzN10sXCJtYXBwZWRcIixbMTExN11dLFtbMTAzOCwxMDM4XSxcIm1hcHBlZFwiLFsxMTE4XV0sW1sxMDM5LDEwMzldLFwibWFwcGVkXCIsWzExMTldXSxbWzEwNDAsMTA0MF0sXCJtYXBwZWRcIixbMTA3Ml1dLFtbMTA0MSwxMDQxXSxcIm1hcHBlZFwiLFsxMDczXV0sW1sxMDQyLDEwNDJdLFwibWFwcGVkXCIsWzEwNzRdXSxbWzEwNDMsMTA0M10sXCJtYXBwZWRcIixbMTA3NV1dLFtbMTA0NCwxMDQ0XSxcIm1hcHBlZFwiLFsxMDc2XV0sW1sxMDQ1LDEwNDVdLFwibWFwcGVkXCIsWzEwNzddXSxbWzEwNDYsMTA0Nl0sXCJtYXBwZWRcIixbMTA3OF1dLFtbMTA0NywxMDQ3XSxcIm1hcHBlZFwiLFsxMDc5XV0sW1sxMDQ4LDEwNDhdLFwibWFwcGVkXCIsWzEwODBdXSxbWzEwNDksMTA0OV0sXCJtYXBwZWRcIixbMTA4MV1dLFtbMTA1MCwxMDUwXSxcIm1hcHBlZFwiLFsxMDgyXV0sW1sxMDUxLDEwNTFdLFwibWFwcGVkXCIsWzEwODNdXSxbWzEwNTIsMTA1Ml0sXCJtYXBwZWRcIixbMTA4NF1dLFtbMTA1MywxMDUzXSxcIm1hcHBlZFwiLFsxMDg1XV0sW1sxMDU0LDEwNTRdLFwibWFwcGVkXCIsWzEwODZdXSxbWzEwNTUsMTA1NV0sXCJtYXBwZWRcIixbMTA4N11dLFtbMTA1NiwxMDU2XSxcIm1hcHBlZFwiLFsxMDg4XV0sW1sxMDU3LDEwNTddLFwibWFwcGVkXCIsWzEwODldXSxbWzEwNTgsMTA1OF0sXCJtYXBwZWRcIixbMTA5MF1dLFtbMTA1OSwxMDU5XSxcIm1hcHBlZFwiLFsxMDkxXV0sW1sxMDYwLDEwNjBdLFwibWFwcGVkXCIsWzEwOTJdXSxbWzEwNjEsMTA2MV0sXCJtYXBwZWRcIixbMTA5M11dLFtbMTA2MiwxMDYyXSxcIm1hcHBlZFwiLFsxMDk0XV0sW1sxMDYzLDEwNjNdLFwibWFwcGVkXCIsWzEwOTVdXSxbWzEwNjQsMTA2NF0sXCJtYXBwZWRcIixbMTA5Nl1dLFtbMTA2NSwxMDY1XSxcIm1hcHBlZFwiLFsxMDk3XV0sW1sxMDY2LDEwNjZdLFwibWFwcGVkXCIsWzEwOThdXSxbWzEwNjcsMTA2N10sXCJtYXBwZWRcIixbMTA5OV1dLFtbMTA2OCwxMDY4XSxcIm1hcHBlZFwiLFsxMTAwXV0sW1sxMDY5LDEwNjldLFwibWFwcGVkXCIsWzExMDFdXSxbWzEwNzAsMTA3MF0sXCJtYXBwZWRcIixbMTEwMl1dLFtbMTA3MSwxMDcxXSxcIm1hcHBlZFwiLFsxMTAzXV0sW1sxMDcyLDExMDNdLFwidmFsaWRcIl0sW1sxMTA0LDExMDRdLFwidmFsaWRcIl0sW1sxMTA1LDExMTZdLFwidmFsaWRcIl0sW1sxMTE3LDExMTddLFwidmFsaWRcIl0sW1sxMTE4LDExMTldLFwidmFsaWRcIl0sW1sxMTIwLDExMjBdLFwibWFwcGVkXCIsWzExMjFdXSxbWzExMjEsMTEyMV0sXCJ2YWxpZFwiXSxbWzExMjIsMTEyMl0sXCJtYXBwZWRcIixbMTEyM11dLFtbMTEyMywxMTIzXSxcInZhbGlkXCJdLFtbMTEyNCwxMTI0XSxcIm1hcHBlZFwiLFsxMTI1XV0sW1sxMTI1LDExMjVdLFwidmFsaWRcIl0sW1sxMTI2LDExMjZdLFwibWFwcGVkXCIsWzExMjddXSxbWzExMjcsMTEyN10sXCJ2YWxpZFwiXSxbWzExMjgsMTEyOF0sXCJtYXBwZWRcIixbMTEyOV1dLFtbMTEyOSwxMTI5XSxcInZhbGlkXCJdLFtbMTEzMCwxMTMwXSxcIm1hcHBlZFwiLFsxMTMxXV0sW1sxMTMxLDExMzFdLFwidmFsaWRcIl0sW1sxMTMyLDExMzJdLFwibWFwcGVkXCIsWzExMzNdXSxbWzExMzMsMTEzM10sXCJ2YWxpZFwiXSxbWzExMzQsMTEzNF0sXCJtYXBwZWRcIixbMTEzNV1dLFtbMTEzNSwxMTM1XSxcInZhbGlkXCJdLFtbMTEzNiwxMTM2XSxcIm1hcHBlZFwiLFsxMTM3XV0sW1sxMTM3LDExMzddLFwidmFsaWRcIl0sW1sxMTM4LDExMzhdLFwibWFwcGVkXCIsWzExMzldXSxbWzExMzksMTEzOV0sXCJ2YWxpZFwiXSxbWzExNDAsMTE0MF0sXCJtYXBwZWRcIixbMTE0MV1dLFtbMTE0MSwxMTQxXSxcInZhbGlkXCJdLFtbMTE0MiwxMTQyXSxcIm1hcHBlZFwiLFsxMTQzXV0sW1sxMTQzLDExNDNdLFwidmFsaWRcIl0sW1sxMTQ0LDExNDRdLFwibWFwcGVkXCIsWzExNDVdXSxbWzExNDUsMTE0NV0sXCJ2YWxpZFwiXSxbWzExNDYsMTE0Nl0sXCJtYXBwZWRcIixbMTE0N11dLFtbMTE0NywxMTQ3XSxcInZhbGlkXCJdLFtbMTE0OCwxMTQ4XSxcIm1hcHBlZFwiLFsxMTQ5XV0sW1sxMTQ5LDExNDldLFwidmFsaWRcIl0sW1sxMTUwLDExNTBdLFwibWFwcGVkXCIsWzExNTFdXSxbWzExNTEsMTE1MV0sXCJ2YWxpZFwiXSxbWzExNTIsMTE1Ml0sXCJtYXBwZWRcIixbMTE1M11dLFtbMTE1MywxMTUzXSxcInZhbGlkXCJdLFtbMTE1NCwxMTU0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTU1LDExNThdLFwidmFsaWRcIl0sW1sxMTU5LDExNTldLFwidmFsaWRcIl0sW1sxMTYwLDExNjFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExNjIsMTE2Ml0sXCJtYXBwZWRcIixbMTE2M11dLFtbMTE2MywxMTYzXSxcInZhbGlkXCJdLFtbMTE2NCwxMTY0XSxcIm1hcHBlZFwiLFsxMTY1XV0sW1sxMTY1LDExNjVdLFwidmFsaWRcIl0sW1sxMTY2LDExNjZdLFwibWFwcGVkXCIsWzExNjddXSxbWzExNjcsMTE2N10sXCJ2YWxpZFwiXSxbWzExNjgsMTE2OF0sXCJtYXBwZWRcIixbMTE2OV1dLFtbMTE2OSwxMTY5XSxcInZhbGlkXCJdLFtbMTE3MCwxMTcwXSxcIm1hcHBlZFwiLFsxMTcxXV0sW1sxMTcxLDExNzFdLFwidmFsaWRcIl0sW1sxMTcyLDExNzJdLFwibWFwcGVkXCIsWzExNzNdXSxbWzExNzMsMTE3M10sXCJ2YWxpZFwiXSxbWzExNzQsMTE3NF0sXCJtYXBwZWRcIixbMTE3NV1dLFtbMTE3NSwxMTc1XSxcInZhbGlkXCJdLFtbMTE3NiwxMTc2XSxcIm1hcHBlZFwiLFsxMTc3XV0sW1sxMTc3LDExNzddLFwidmFsaWRcIl0sW1sxMTc4LDExNzhdLFwibWFwcGVkXCIsWzExNzldXSxbWzExNzksMTE3OV0sXCJ2YWxpZFwiXSxbWzExODAsMTE4MF0sXCJtYXBwZWRcIixbMTE4MV1dLFtbMTE4MSwxMTgxXSxcInZhbGlkXCJdLFtbMTE4MiwxMTgyXSxcIm1hcHBlZFwiLFsxMTgzXV0sW1sxMTgzLDExODNdLFwidmFsaWRcIl0sW1sxMTg0LDExODRdLFwibWFwcGVkXCIsWzExODVdXSxbWzExODUsMTE4NV0sXCJ2YWxpZFwiXSxbWzExODYsMTE4Nl0sXCJtYXBwZWRcIixbMTE4N11dLFtbMTE4NywxMTg3XSxcInZhbGlkXCJdLFtbMTE4OCwxMTg4XSxcIm1hcHBlZFwiLFsxMTg5XV0sW1sxMTg5LDExODldLFwidmFsaWRcIl0sW1sxMTkwLDExOTBdLFwibWFwcGVkXCIsWzExOTFdXSxbWzExOTEsMTE5MV0sXCJ2YWxpZFwiXSxbWzExOTIsMTE5Ml0sXCJtYXBwZWRcIixbMTE5M11dLFtbMTE5MywxMTkzXSxcInZhbGlkXCJdLFtbMTE5NCwxMTk0XSxcIm1hcHBlZFwiLFsxMTk1XV0sW1sxMTk1LDExOTVdLFwidmFsaWRcIl0sW1sxMTk2LDExOTZdLFwibWFwcGVkXCIsWzExOTddXSxbWzExOTcsMTE5N10sXCJ2YWxpZFwiXSxbWzExOTgsMTE5OF0sXCJtYXBwZWRcIixbMTE5OV1dLFtbMTE5OSwxMTk5XSxcInZhbGlkXCJdLFtbMTIwMCwxMjAwXSxcIm1hcHBlZFwiLFsxMjAxXV0sW1sxMjAxLDEyMDFdLFwidmFsaWRcIl0sW1sxMjAyLDEyMDJdLFwibWFwcGVkXCIsWzEyMDNdXSxbWzEyMDMsMTIwM10sXCJ2YWxpZFwiXSxbWzEyMDQsMTIwNF0sXCJtYXBwZWRcIixbMTIwNV1dLFtbMTIwNSwxMjA1XSxcInZhbGlkXCJdLFtbMTIwNiwxMjA2XSxcIm1hcHBlZFwiLFsxMjA3XV0sW1sxMjA3LDEyMDddLFwidmFsaWRcIl0sW1sxMjA4LDEyMDhdLFwibWFwcGVkXCIsWzEyMDldXSxbWzEyMDksMTIwOV0sXCJ2YWxpZFwiXSxbWzEyMTAsMTIxMF0sXCJtYXBwZWRcIixbMTIxMV1dLFtbMTIxMSwxMjExXSxcInZhbGlkXCJdLFtbMTIxMiwxMjEyXSxcIm1hcHBlZFwiLFsxMjEzXV0sW1sxMjEzLDEyMTNdLFwidmFsaWRcIl0sW1sxMjE0LDEyMTRdLFwibWFwcGVkXCIsWzEyMTVdXSxbWzEyMTUsMTIxNV0sXCJ2YWxpZFwiXSxbWzEyMTYsMTIxNl0sXCJkaXNhbGxvd2VkXCJdLFtbMTIxNywxMjE3XSxcIm1hcHBlZFwiLFsxMjE4XV0sW1sxMjE4LDEyMThdLFwidmFsaWRcIl0sW1sxMjE5LDEyMTldLFwibWFwcGVkXCIsWzEyMjBdXSxbWzEyMjAsMTIyMF0sXCJ2YWxpZFwiXSxbWzEyMjEsMTIyMV0sXCJtYXBwZWRcIixbMTIyMl1dLFtbMTIyMiwxMjIyXSxcInZhbGlkXCJdLFtbMTIyMywxMjIzXSxcIm1hcHBlZFwiLFsxMjI0XV0sW1sxMjI0LDEyMjRdLFwidmFsaWRcIl0sW1sxMjI1LDEyMjVdLFwibWFwcGVkXCIsWzEyMjZdXSxbWzEyMjYsMTIyNl0sXCJ2YWxpZFwiXSxbWzEyMjcsMTIyN10sXCJtYXBwZWRcIixbMTIyOF1dLFtbMTIyOCwxMjI4XSxcInZhbGlkXCJdLFtbMTIyOSwxMjI5XSxcIm1hcHBlZFwiLFsxMjMwXV0sW1sxMjMwLDEyMzBdLFwidmFsaWRcIl0sW1sxMjMxLDEyMzFdLFwidmFsaWRcIl0sW1sxMjMyLDEyMzJdLFwibWFwcGVkXCIsWzEyMzNdXSxbWzEyMzMsMTIzM10sXCJ2YWxpZFwiXSxbWzEyMzQsMTIzNF0sXCJtYXBwZWRcIixbMTIzNV1dLFtbMTIzNSwxMjM1XSxcInZhbGlkXCJdLFtbMTIzNiwxMjM2XSxcIm1hcHBlZFwiLFsxMjM3XV0sW1sxMjM3LDEyMzddLFwidmFsaWRcIl0sW1sxMjM4LDEyMzhdLFwibWFwcGVkXCIsWzEyMzldXSxbWzEyMzksMTIzOV0sXCJ2YWxpZFwiXSxbWzEyNDAsMTI0MF0sXCJtYXBwZWRcIixbMTI0MV1dLFtbMTI0MSwxMjQxXSxcInZhbGlkXCJdLFtbMTI0MiwxMjQyXSxcIm1hcHBlZFwiLFsxMjQzXV0sW1sxMjQzLDEyNDNdLFwidmFsaWRcIl0sW1sxMjQ0LDEyNDRdLFwibWFwcGVkXCIsWzEyNDVdXSxbWzEyNDUsMTI0NV0sXCJ2YWxpZFwiXSxbWzEyNDYsMTI0Nl0sXCJtYXBwZWRcIixbMTI0N11dLFtbMTI0NywxMjQ3XSxcInZhbGlkXCJdLFtbMTI0OCwxMjQ4XSxcIm1hcHBlZFwiLFsxMjQ5XV0sW1sxMjQ5LDEyNDldLFwidmFsaWRcIl0sW1sxMjUwLDEyNTBdLFwibWFwcGVkXCIsWzEyNTFdXSxbWzEyNTEsMTI1MV0sXCJ2YWxpZFwiXSxbWzEyNTIsMTI1Ml0sXCJtYXBwZWRcIixbMTI1M11dLFtbMTI1MywxMjUzXSxcInZhbGlkXCJdLFtbMTI1NCwxMjU0XSxcIm1hcHBlZFwiLFsxMjU1XV0sW1sxMjU1LDEyNTVdLFwidmFsaWRcIl0sW1sxMjU2LDEyNTZdLFwibWFwcGVkXCIsWzEyNTddXSxbWzEyNTcsMTI1N10sXCJ2YWxpZFwiXSxbWzEyNTgsMTI1OF0sXCJtYXBwZWRcIixbMTI1OV1dLFtbMTI1OSwxMjU5XSxcInZhbGlkXCJdLFtbMTI2MCwxMjYwXSxcIm1hcHBlZFwiLFsxMjYxXV0sW1sxMjYxLDEyNjFdLFwidmFsaWRcIl0sW1sxMjYyLDEyNjJdLFwibWFwcGVkXCIsWzEyNjNdXSxbWzEyNjMsMTI2M10sXCJ2YWxpZFwiXSxbWzEyNjQsMTI2NF0sXCJtYXBwZWRcIixbMTI2NV1dLFtbMTI2NSwxMjY1XSxcInZhbGlkXCJdLFtbMTI2NiwxMjY2XSxcIm1hcHBlZFwiLFsxMjY3XV0sW1sxMjY3LDEyNjddLFwidmFsaWRcIl0sW1sxMjY4LDEyNjhdLFwibWFwcGVkXCIsWzEyNjldXSxbWzEyNjksMTI2OV0sXCJ2YWxpZFwiXSxbWzEyNzAsMTI3MF0sXCJtYXBwZWRcIixbMTI3MV1dLFtbMTI3MSwxMjcxXSxcInZhbGlkXCJdLFtbMTI3MiwxMjcyXSxcIm1hcHBlZFwiLFsxMjczXV0sW1sxMjczLDEyNzNdLFwidmFsaWRcIl0sW1sxMjc0LDEyNzRdLFwibWFwcGVkXCIsWzEyNzVdXSxbWzEyNzUsMTI3NV0sXCJ2YWxpZFwiXSxbWzEyNzYsMTI3Nl0sXCJtYXBwZWRcIixbMTI3N11dLFtbMTI3NywxMjc3XSxcInZhbGlkXCJdLFtbMTI3OCwxMjc4XSxcIm1hcHBlZFwiLFsxMjc5XV0sW1sxMjc5LDEyNzldLFwidmFsaWRcIl0sW1sxMjgwLDEyODBdLFwibWFwcGVkXCIsWzEyODFdXSxbWzEyODEsMTI4MV0sXCJ2YWxpZFwiXSxbWzEyODIsMTI4Ml0sXCJtYXBwZWRcIixbMTI4M11dLFtbMTI4MywxMjgzXSxcInZhbGlkXCJdLFtbMTI4NCwxMjg0XSxcIm1hcHBlZFwiLFsxMjg1XV0sW1sxMjg1LDEyODVdLFwidmFsaWRcIl0sW1sxMjg2LDEyODZdLFwibWFwcGVkXCIsWzEyODddXSxbWzEyODcsMTI4N10sXCJ2YWxpZFwiXSxbWzEyODgsMTI4OF0sXCJtYXBwZWRcIixbMTI4OV1dLFtbMTI4OSwxMjg5XSxcInZhbGlkXCJdLFtbMTI5MCwxMjkwXSxcIm1hcHBlZFwiLFsxMjkxXV0sW1sxMjkxLDEyOTFdLFwidmFsaWRcIl0sW1sxMjkyLDEyOTJdLFwibWFwcGVkXCIsWzEyOTNdXSxbWzEyOTMsMTI5M10sXCJ2YWxpZFwiXSxbWzEyOTQsMTI5NF0sXCJtYXBwZWRcIixbMTI5NV1dLFtbMTI5NSwxMjk1XSxcInZhbGlkXCJdLFtbMTI5NiwxMjk2XSxcIm1hcHBlZFwiLFsxMjk3XV0sW1sxMjk3LDEyOTddLFwidmFsaWRcIl0sW1sxMjk4LDEyOThdLFwibWFwcGVkXCIsWzEyOTldXSxbWzEyOTksMTI5OV0sXCJ2YWxpZFwiXSxbWzEzMDAsMTMwMF0sXCJtYXBwZWRcIixbMTMwMV1dLFtbMTMwMSwxMzAxXSxcInZhbGlkXCJdLFtbMTMwMiwxMzAyXSxcIm1hcHBlZFwiLFsxMzAzXV0sW1sxMzAzLDEzMDNdLFwidmFsaWRcIl0sW1sxMzA0LDEzMDRdLFwibWFwcGVkXCIsWzEzMDVdXSxbWzEzMDUsMTMwNV0sXCJ2YWxpZFwiXSxbWzEzMDYsMTMwNl0sXCJtYXBwZWRcIixbMTMwN11dLFtbMTMwNywxMzA3XSxcInZhbGlkXCJdLFtbMTMwOCwxMzA4XSxcIm1hcHBlZFwiLFsxMzA5XV0sW1sxMzA5LDEzMDldLFwidmFsaWRcIl0sW1sxMzEwLDEzMTBdLFwibWFwcGVkXCIsWzEzMTFdXSxbWzEzMTEsMTMxMV0sXCJ2YWxpZFwiXSxbWzEzMTIsMTMxMl0sXCJtYXBwZWRcIixbMTMxM11dLFtbMTMxMywxMzEzXSxcInZhbGlkXCJdLFtbMTMxNCwxMzE0XSxcIm1hcHBlZFwiLFsxMzE1XV0sW1sxMzE1LDEzMTVdLFwidmFsaWRcIl0sW1sxMzE2LDEzMTZdLFwibWFwcGVkXCIsWzEzMTddXSxbWzEzMTcsMTMxN10sXCJ2YWxpZFwiXSxbWzEzMTgsMTMxOF0sXCJtYXBwZWRcIixbMTMxOV1dLFtbMTMxOSwxMzE5XSxcInZhbGlkXCJdLFtbMTMyMCwxMzIwXSxcIm1hcHBlZFwiLFsxMzIxXV0sW1sxMzIxLDEzMjFdLFwidmFsaWRcIl0sW1sxMzIyLDEzMjJdLFwibWFwcGVkXCIsWzEzMjNdXSxbWzEzMjMsMTMyM10sXCJ2YWxpZFwiXSxbWzEzMjQsMTMyNF0sXCJtYXBwZWRcIixbMTMyNV1dLFtbMTMyNSwxMzI1XSxcInZhbGlkXCJdLFtbMTMyNiwxMzI2XSxcIm1hcHBlZFwiLFsxMzI3XV0sW1sxMzI3LDEzMjddLFwidmFsaWRcIl0sW1sxMzI4LDEzMjhdLFwiZGlzYWxsb3dlZFwiXSxbWzEzMjksMTMyOV0sXCJtYXBwZWRcIixbMTM3N11dLFtbMTMzMCwxMzMwXSxcIm1hcHBlZFwiLFsxMzc4XV0sW1sxMzMxLDEzMzFdLFwibWFwcGVkXCIsWzEzNzldXSxbWzEzMzIsMTMzMl0sXCJtYXBwZWRcIixbMTM4MF1dLFtbMTMzMywxMzMzXSxcIm1hcHBlZFwiLFsxMzgxXV0sW1sxMzM0LDEzMzRdLFwibWFwcGVkXCIsWzEzODJdXSxbWzEzMzUsMTMzNV0sXCJtYXBwZWRcIixbMTM4M11dLFtbMTMzNiwxMzM2XSxcIm1hcHBlZFwiLFsxMzg0XV0sW1sxMzM3LDEzMzddLFwibWFwcGVkXCIsWzEzODVdXSxbWzEzMzgsMTMzOF0sXCJtYXBwZWRcIixbMTM4Nl1dLFtbMTMzOSwxMzM5XSxcIm1hcHBlZFwiLFsxMzg3XV0sW1sxMzQwLDEzNDBdLFwibWFwcGVkXCIsWzEzODhdXSxbWzEzNDEsMTM0MV0sXCJtYXBwZWRcIixbMTM4OV1dLFtbMTM0MiwxMzQyXSxcIm1hcHBlZFwiLFsxMzkwXV0sW1sxMzQzLDEzNDNdLFwibWFwcGVkXCIsWzEzOTFdXSxbWzEzNDQsMTM0NF0sXCJtYXBwZWRcIixbMTM5Ml1dLFtbMTM0NSwxMzQ1XSxcIm1hcHBlZFwiLFsxMzkzXV0sW1sxMzQ2LDEzNDZdLFwibWFwcGVkXCIsWzEzOTRdXSxbWzEzNDcsMTM0N10sXCJtYXBwZWRcIixbMTM5NV1dLFtbMTM0OCwxMzQ4XSxcIm1hcHBlZFwiLFsxMzk2XV0sW1sxMzQ5LDEzNDldLFwibWFwcGVkXCIsWzEzOTddXSxbWzEzNTAsMTM1MF0sXCJtYXBwZWRcIixbMTM5OF1dLFtbMTM1MSwxMzUxXSxcIm1hcHBlZFwiLFsxMzk5XV0sW1sxMzUyLDEzNTJdLFwibWFwcGVkXCIsWzE0MDBdXSxbWzEzNTMsMTM1M10sXCJtYXBwZWRcIixbMTQwMV1dLFtbMTM1NCwxMzU0XSxcIm1hcHBlZFwiLFsxNDAyXV0sW1sxMzU1LDEzNTVdLFwibWFwcGVkXCIsWzE0MDNdXSxbWzEzNTYsMTM1Nl0sXCJtYXBwZWRcIixbMTQwNF1dLFtbMTM1NywxMzU3XSxcIm1hcHBlZFwiLFsxNDA1XV0sW1sxMzU4LDEzNThdLFwibWFwcGVkXCIsWzE0MDZdXSxbWzEzNTksMTM1OV0sXCJtYXBwZWRcIixbMTQwN11dLFtbMTM2MCwxMzYwXSxcIm1hcHBlZFwiLFsxNDA4XV0sW1sxMzYxLDEzNjFdLFwibWFwcGVkXCIsWzE0MDldXSxbWzEzNjIsMTM2Ml0sXCJtYXBwZWRcIixbMTQxMF1dLFtbMTM2MywxMzYzXSxcIm1hcHBlZFwiLFsxNDExXV0sW1sxMzY0LDEzNjRdLFwibWFwcGVkXCIsWzE0MTJdXSxbWzEzNjUsMTM2NV0sXCJtYXBwZWRcIixbMTQxM11dLFtbMTM2NiwxMzY2XSxcIm1hcHBlZFwiLFsxNDE0XV0sW1sxMzY3LDEzNjhdLFwiZGlzYWxsb3dlZFwiXSxbWzEzNjksMTM2OV0sXCJ2YWxpZFwiXSxbWzEzNzAsMTM3NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTM3NiwxMzc2XSxcImRpc2FsbG93ZWRcIl0sW1sxMzc3LDE0MTRdLFwidmFsaWRcIl0sW1sxNDE1LDE0MTVdLFwibWFwcGVkXCIsWzEzODEsMTQxMF1dLFtbMTQxNiwxNDE2XSxcImRpc2FsbG93ZWRcIl0sW1sxNDE3LDE0MTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE0MTgsMTQxOF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTQxOSwxNDIwXSxcImRpc2FsbG93ZWRcIl0sW1sxNDIxLDE0MjJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE0MjMsMTQyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTQyNCwxNDI0XSxcImRpc2FsbG93ZWRcIl0sW1sxNDI1LDE0NDFdLFwidmFsaWRcIl0sW1sxNDQyLDE0NDJdLFwidmFsaWRcIl0sW1sxNDQzLDE0NTVdLFwidmFsaWRcIl0sW1sxNDU2LDE0NjVdLFwidmFsaWRcIl0sW1sxNDY2LDE0NjZdLFwidmFsaWRcIl0sW1sxNDY3LDE0NjldLFwidmFsaWRcIl0sW1sxNDcwLDE0NzBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE0NzEsMTQ3MV0sXCJ2YWxpZFwiXSxbWzE0NzIsMTQ3Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTQ3MywxNDc0XSxcInZhbGlkXCJdLFtbMTQ3NSwxNDc1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNDc2LDE0NzZdLFwidmFsaWRcIl0sW1sxNDc3LDE0NzddLFwidmFsaWRcIl0sW1sxNDc4LDE0NzhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE0NzksMTQ3OV0sXCJ2YWxpZFwiXSxbWzE0ODAsMTQ4N10sXCJkaXNhbGxvd2VkXCJdLFtbMTQ4OCwxNTE0XSxcInZhbGlkXCJdLFtbMTUxNSwxNTE5XSxcImRpc2FsbG93ZWRcIl0sW1sxNTIwLDE1MjRdLFwidmFsaWRcIl0sW1sxNTI1LDE1MzVdLFwiZGlzYWxsb3dlZFwiXSxbWzE1MzYsMTUzOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTU0MCwxNTQwXSxcImRpc2FsbG93ZWRcIl0sW1sxNTQxLDE1NDFdLFwiZGlzYWxsb3dlZFwiXSxbWzE1NDIsMTU0Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTU0NywxNTQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNTQ4LDE1NDhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE1NDksMTU1MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTU1MiwxNTU3XSxcInZhbGlkXCJdLFtbMTU1OCwxNTYyXSxcInZhbGlkXCJdLFtbMTU2MywxNTYzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNTY0LDE1NjRdLFwiZGlzYWxsb3dlZFwiXSxbWzE1NjUsMTU2NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTU2NiwxNTY2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNTY3LDE1NjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE1NjgsMTU2OF0sXCJ2YWxpZFwiXSxbWzE1NjksMTU5NF0sXCJ2YWxpZFwiXSxbWzE1OTUsMTU5OV0sXCJ2YWxpZFwiXSxbWzE2MDAsMTYwMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTYwMSwxNjE4XSxcInZhbGlkXCJdLFtbMTYxOSwxNjIxXSxcInZhbGlkXCJdLFtbMTYyMiwxNjI0XSxcInZhbGlkXCJdLFtbMTYyNSwxNjMwXSxcInZhbGlkXCJdLFtbMTYzMSwxNjMxXSxcInZhbGlkXCJdLFtbMTYzMiwxNjQxXSxcInZhbGlkXCJdLFtbMTY0MiwxNjQ1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNjQ2LDE2NDddLFwidmFsaWRcIl0sW1sxNjQ4LDE2NTJdLFwidmFsaWRcIl0sW1sxNjUzLDE2NTNdLFwibWFwcGVkXCIsWzE1NzUsMTY1Ml1dLFtbMTY1NCwxNjU0XSxcIm1hcHBlZFwiLFsxNjA4LDE2NTJdXSxbWzE2NTUsMTY1NV0sXCJtYXBwZWRcIixbMTczNSwxNjUyXV0sW1sxNjU2LDE2NTZdLFwibWFwcGVkXCIsWzE2MTAsMTY1Ml1dLFtbMTY1NywxNzE5XSxcInZhbGlkXCJdLFtbMTcyMCwxNzIxXSxcInZhbGlkXCJdLFtbMTcyMiwxNzI2XSxcInZhbGlkXCJdLFtbMTcyNywxNzI3XSxcInZhbGlkXCJdLFtbMTcyOCwxNzQyXSxcInZhbGlkXCJdLFtbMTc0MywxNzQzXSxcInZhbGlkXCJdLFtbMTc0NCwxNzQ3XSxcInZhbGlkXCJdLFtbMTc0OCwxNzQ4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNzQ5LDE3NTZdLFwidmFsaWRcIl0sW1sxNzU3LDE3NTddLFwiZGlzYWxsb3dlZFwiXSxbWzE3NTgsMTc1OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTc1OSwxNzY4XSxcInZhbGlkXCJdLFtbMTc2OSwxNzY5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxNzcwLDE3NzNdLFwidmFsaWRcIl0sW1sxNzc0LDE3NzVdLFwidmFsaWRcIl0sW1sxNzc2LDE3ODVdLFwidmFsaWRcIl0sW1sxNzg2LDE3OTBdLFwidmFsaWRcIl0sW1sxNzkxLDE3OTFdLFwidmFsaWRcIl0sW1sxNzkyLDE4MDVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzE4MDYsMTgwNl0sXCJkaXNhbGxvd2VkXCJdLFtbMTgwNywxODA3XSxcImRpc2FsbG93ZWRcIl0sW1sxODA4LDE4MzZdLFwidmFsaWRcIl0sW1sxODM3LDE4MzldLFwidmFsaWRcIl0sW1sxODQwLDE4NjZdLFwidmFsaWRcIl0sW1sxODY3LDE4NjhdLFwiZGlzYWxsb3dlZFwiXSxbWzE4NjksMTg3MV0sXCJ2YWxpZFwiXSxbWzE4NzIsMTkwMV0sXCJ2YWxpZFwiXSxbWzE5MDIsMTkxOV0sXCJ2YWxpZFwiXSxbWzE5MjAsMTk2OF0sXCJ2YWxpZFwiXSxbWzE5NjksMTk2OV0sXCJ2YWxpZFwiXSxbWzE5NzAsMTk4M10sXCJkaXNhbGxvd2VkXCJdLFtbMTk4NCwyMDM3XSxcInZhbGlkXCJdLFtbMjAzOCwyMDQyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1syMDQzLDIwNDddLFwiZGlzYWxsb3dlZFwiXSxbWzIwNDgsMjA5M10sXCJ2YWxpZFwiXSxbWzIwOTQsMjA5NV0sXCJkaXNhbGxvd2VkXCJdLFtbMjA5NiwyMTEwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1syMTExLDIxMTFdLFwiZGlzYWxsb3dlZFwiXSxbWzIxMTIsMjEzOV0sXCJ2YWxpZFwiXSxbWzIxNDAsMjE0MV0sXCJkaXNhbGxvd2VkXCJdLFtbMjE0MiwyMTQyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1syMTQzLDIyMDddLFwiZGlzYWxsb3dlZFwiXSxbWzIyMDgsMjIwOF0sXCJ2YWxpZFwiXSxbWzIyMDksMjIwOV0sXCJ2YWxpZFwiXSxbWzIyMTAsMjIyMF0sXCJ2YWxpZFwiXSxbWzIyMjEsMjIyNl0sXCJ2YWxpZFwiXSxbWzIyMjcsMjIyOF0sXCJ2YWxpZFwiXSxbWzIyMjksMjI3NF0sXCJkaXNhbGxvd2VkXCJdLFtbMjI3NSwyMjc1XSxcInZhbGlkXCJdLFtbMjI3NiwyMzAyXSxcInZhbGlkXCJdLFtbMjMwMywyMzAzXSxcInZhbGlkXCJdLFtbMjMwNCwyMzA0XSxcInZhbGlkXCJdLFtbMjMwNSwyMzA3XSxcInZhbGlkXCJdLFtbMjMwOCwyMzA4XSxcInZhbGlkXCJdLFtbMjMwOSwyMzYxXSxcInZhbGlkXCJdLFtbMjM2MiwyMzYzXSxcInZhbGlkXCJdLFtbMjM2NCwyMzgxXSxcInZhbGlkXCJdLFtbMjM4MiwyMzgyXSxcInZhbGlkXCJdLFtbMjM4MywyMzgzXSxcInZhbGlkXCJdLFtbMjM4NCwyMzg4XSxcInZhbGlkXCJdLFtbMjM4OSwyMzg5XSxcInZhbGlkXCJdLFtbMjM5MCwyMzkxXSxcInZhbGlkXCJdLFtbMjM5MiwyMzkyXSxcIm1hcHBlZFwiLFsyMzI1LDIzNjRdXSxbWzIzOTMsMjM5M10sXCJtYXBwZWRcIixbMjMyNiwyMzY0XV0sW1syMzk0LDIzOTRdLFwibWFwcGVkXCIsWzIzMjcsMjM2NF1dLFtbMjM5NSwyMzk1XSxcIm1hcHBlZFwiLFsyMzMyLDIzNjRdXSxbWzIzOTYsMjM5Nl0sXCJtYXBwZWRcIixbMjMzNywyMzY0XV0sW1syMzk3LDIzOTddLFwibWFwcGVkXCIsWzIzMzgsMjM2NF1dLFtbMjM5OCwyMzk4XSxcIm1hcHBlZFwiLFsyMzQ3LDIzNjRdXSxbWzIzOTksMjM5OV0sXCJtYXBwZWRcIixbMjM1MSwyMzY0XV0sW1syNDAwLDI0MDNdLFwidmFsaWRcIl0sW1syNDA0LDI0MDVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI0MDYsMjQxNV0sXCJ2YWxpZFwiXSxbWzI0MTYsMjQxNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjQxNywyNDE4XSxcInZhbGlkXCJdLFtbMjQxOSwyNDIzXSxcInZhbGlkXCJdLFtbMjQyNCwyNDI0XSxcInZhbGlkXCJdLFtbMjQyNSwyNDI2XSxcInZhbGlkXCJdLFtbMjQyNywyNDI4XSxcInZhbGlkXCJdLFtbMjQyOSwyNDI5XSxcInZhbGlkXCJdLFtbMjQzMCwyNDMxXSxcInZhbGlkXCJdLFtbMjQzMiwyNDMyXSxcInZhbGlkXCJdLFtbMjQzMywyNDM1XSxcInZhbGlkXCJdLFtbMjQzNiwyNDM2XSxcImRpc2FsbG93ZWRcIl0sW1syNDM3LDI0NDRdLFwidmFsaWRcIl0sW1syNDQ1LDI0NDZdLFwiZGlzYWxsb3dlZFwiXSxbWzI0NDcsMjQ0OF0sXCJ2YWxpZFwiXSxbWzI0NDksMjQ1MF0sXCJkaXNhbGxvd2VkXCJdLFtbMjQ1MSwyNDcyXSxcInZhbGlkXCJdLFtbMjQ3MywyNDczXSxcImRpc2FsbG93ZWRcIl0sW1syNDc0LDI0ODBdLFwidmFsaWRcIl0sW1syNDgxLDI0ODFdLFwiZGlzYWxsb3dlZFwiXSxbWzI0ODIsMjQ4Ml0sXCJ2YWxpZFwiXSxbWzI0ODMsMjQ4NV0sXCJkaXNhbGxvd2VkXCJdLFtbMjQ4NiwyNDg5XSxcInZhbGlkXCJdLFtbMjQ5MCwyNDkxXSxcImRpc2FsbG93ZWRcIl0sW1syNDkyLDI0OTJdLFwidmFsaWRcIl0sW1syNDkzLDI0OTNdLFwidmFsaWRcIl0sW1syNDk0LDI1MDBdLFwidmFsaWRcIl0sW1syNTAxLDI1MDJdLFwiZGlzYWxsb3dlZFwiXSxbWzI1MDMsMjUwNF0sXCJ2YWxpZFwiXSxbWzI1MDUsMjUwNl0sXCJkaXNhbGxvd2VkXCJdLFtbMjUwNywyNTA5XSxcInZhbGlkXCJdLFtbMjUxMCwyNTEwXSxcInZhbGlkXCJdLFtbMjUxMSwyNTE4XSxcImRpc2FsbG93ZWRcIl0sW1syNTE5LDI1MTldLFwidmFsaWRcIl0sW1syNTIwLDI1MjNdLFwiZGlzYWxsb3dlZFwiXSxbWzI1MjQsMjUyNF0sXCJtYXBwZWRcIixbMjQ2NSwyNDkyXV0sW1syNTI1LDI1MjVdLFwibWFwcGVkXCIsWzI0NjYsMjQ5Ml1dLFtbMjUyNiwyNTI2XSxcImRpc2FsbG93ZWRcIl0sW1syNTI3LDI1MjddLFwibWFwcGVkXCIsWzI0NzksMjQ5Ml1dLFtbMjUyOCwyNTMxXSxcInZhbGlkXCJdLFtbMjUzMiwyNTMzXSxcImRpc2FsbG93ZWRcIl0sW1syNTM0LDI1NDVdLFwidmFsaWRcIl0sW1syNTQ2LDI1NTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzI1NTUsMjU1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjU1NiwyNTYwXSxcImRpc2FsbG93ZWRcIl0sW1syNTYxLDI1NjFdLFwidmFsaWRcIl0sW1syNTYyLDI1NjJdLFwidmFsaWRcIl0sW1syNTYzLDI1NjNdLFwidmFsaWRcIl0sW1syNTY0LDI1NjRdLFwiZGlzYWxsb3dlZFwiXSxbWzI1NjUsMjU3MF0sXCJ2YWxpZFwiXSxbWzI1NzEsMjU3NF0sXCJkaXNhbGxvd2VkXCJdLFtbMjU3NSwyNTc2XSxcInZhbGlkXCJdLFtbMjU3NywyNTc4XSxcImRpc2FsbG93ZWRcIl0sW1syNTc5LDI2MDBdLFwidmFsaWRcIl0sW1syNjAxLDI2MDFdLFwiZGlzYWxsb3dlZFwiXSxbWzI2MDIsMjYwOF0sXCJ2YWxpZFwiXSxbWzI2MDksMjYwOV0sXCJkaXNhbGxvd2VkXCJdLFtbMjYxMCwyNjEwXSxcInZhbGlkXCJdLFtbMjYxMSwyNjExXSxcIm1hcHBlZFwiLFsyNjEwLDI2MjBdXSxbWzI2MTIsMjYxMl0sXCJkaXNhbGxvd2VkXCJdLFtbMjYxMywyNjEzXSxcInZhbGlkXCJdLFtbMjYxNCwyNjE0XSxcIm1hcHBlZFwiLFsyNjE2LDI2MjBdXSxbWzI2MTUsMjYxNV0sXCJkaXNhbGxvd2VkXCJdLFtbMjYxNiwyNjE3XSxcInZhbGlkXCJdLFtbMjYxOCwyNjE5XSxcImRpc2FsbG93ZWRcIl0sW1syNjIwLDI2MjBdLFwidmFsaWRcIl0sW1syNjIxLDI2MjFdLFwiZGlzYWxsb3dlZFwiXSxbWzI2MjIsMjYyNl0sXCJ2YWxpZFwiXSxbWzI2MjcsMjYzMF0sXCJkaXNhbGxvd2VkXCJdLFtbMjYzMSwyNjMyXSxcInZhbGlkXCJdLFtbMjYzMywyNjM0XSxcImRpc2FsbG93ZWRcIl0sW1syNjM1LDI2MzddLFwidmFsaWRcIl0sW1syNjM4LDI2NDBdLFwiZGlzYWxsb3dlZFwiXSxbWzI2NDEsMjY0MV0sXCJ2YWxpZFwiXSxbWzI2NDIsMjY0OF0sXCJkaXNhbGxvd2VkXCJdLFtbMjY0OSwyNjQ5XSxcIm1hcHBlZFwiLFsyNTgyLDI2MjBdXSxbWzI2NTAsMjY1MF0sXCJtYXBwZWRcIixbMjU4MywyNjIwXV0sW1syNjUxLDI2NTFdLFwibWFwcGVkXCIsWzI1ODgsMjYyMF1dLFtbMjY1MiwyNjUyXSxcInZhbGlkXCJdLFtbMjY1MywyNjUzXSxcImRpc2FsbG93ZWRcIl0sW1syNjU0LDI2NTRdLFwibWFwcGVkXCIsWzI2MDMsMjYyMF1dLFtbMjY1NSwyNjYxXSxcImRpc2FsbG93ZWRcIl0sW1syNjYyLDI2NzZdLFwidmFsaWRcIl0sW1syNjc3LDI2NzddLFwidmFsaWRcIl0sW1syNjc4LDI2ODhdLFwiZGlzYWxsb3dlZFwiXSxbWzI2ODksMjY5MV0sXCJ2YWxpZFwiXSxbWzI2OTIsMjY5Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMjY5MywyNjk5XSxcInZhbGlkXCJdLFtbMjcwMCwyNzAwXSxcInZhbGlkXCJdLFtbMjcwMSwyNzAxXSxcInZhbGlkXCJdLFtbMjcwMiwyNzAyXSxcImRpc2FsbG93ZWRcIl0sW1syNzAzLDI3MDVdLFwidmFsaWRcIl0sW1syNzA2LDI3MDZdLFwiZGlzYWxsb3dlZFwiXSxbWzI3MDcsMjcyOF0sXCJ2YWxpZFwiXSxbWzI3MjksMjcyOV0sXCJkaXNhbGxvd2VkXCJdLFtbMjczMCwyNzM2XSxcInZhbGlkXCJdLFtbMjczNywyNzM3XSxcImRpc2FsbG93ZWRcIl0sW1syNzM4LDI3MzldLFwidmFsaWRcIl0sW1syNzQwLDI3NDBdLFwiZGlzYWxsb3dlZFwiXSxbWzI3NDEsMjc0NV0sXCJ2YWxpZFwiXSxbWzI3NDYsMjc0N10sXCJkaXNhbGxvd2VkXCJdLFtbMjc0OCwyNzU3XSxcInZhbGlkXCJdLFtbMjc1OCwyNzU4XSxcImRpc2FsbG93ZWRcIl0sW1syNzU5LDI3NjFdLFwidmFsaWRcIl0sW1syNzYyLDI3NjJdLFwiZGlzYWxsb3dlZFwiXSxbWzI3NjMsMjc2NV0sXCJ2YWxpZFwiXSxbWzI3NjYsMjc2N10sXCJkaXNhbGxvd2VkXCJdLFtbMjc2OCwyNzY4XSxcInZhbGlkXCJdLFtbMjc2OSwyNzgzXSxcImRpc2FsbG93ZWRcIl0sW1syNzg0LDI3ODRdLFwidmFsaWRcIl0sW1syNzg1LDI3ODddLFwidmFsaWRcIl0sW1syNzg4LDI3ODldLFwiZGlzYWxsb3dlZFwiXSxbWzI3OTAsMjc5OV0sXCJ2YWxpZFwiXSxbWzI4MDAsMjgwMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjgwMSwyODAxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1syODAyLDI4MDhdLFwiZGlzYWxsb3dlZFwiXSxbWzI4MDksMjgwOV0sXCJ2YWxpZFwiXSxbWzI4MTAsMjgxNl0sXCJkaXNhbGxvd2VkXCJdLFtbMjgxNywyODE5XSxcInZhbGlkXCJdLFtbMjgyMCwyODIwXSxcImRpc2FsbG93ZWRcIl0sW1syODIxLDI4MjhdLFwidmFsaWRcIl0sW1syODI5LDI4MzBdLFwiZGlzYWxsb3dlZFwiXSxbWzI4MzEsMjgzMl0sXCJ2YWxpZFwiXSxbWzI4MzMsMjgzNF0sXCJkaXNhbGxvd2VkXCJdLFtbMjgzNSwyODU2XSxcInZhbGlkXCJdLFtbMjg1NywyODU3XSxcImRpc2FsbG93ZWRcIl0sW1syODU4LDI4NjRdLFwidmFsaWRcIl0sW1syODY1LDI4NjVdLFwiZGlzYWxsb3dlZFwiXSxbWzI4NjYsMjg2N10sXCJ2YWxpZFwiXSxbWzI4NjgsMjg2OF0sXCJkaXNhbGxvd2VkXCJdLFtbMjg2OSwyODY5XSxcInZhbGlkXCJdLFtbMjg3MCwyODczXSxcInZhbGlkXCJdLFtbMjg3NCwyODc1XSxcImRpc2FsbG93ZWRcIl0sW1syODc2LDI4ODNdLFwidmFsaWRcIl0sW1syODg0LDI4ODRdLFwidmFsaWRcIl0sW1syODg1LDI4ODZdLFwiZGlzYWxsb3dlZFwiXSxbWzI4ODcsMjg4OF0sXCJ2YWxpZFwiXSxbWzI4ODksMjg5MF0sXCJkaXNhbGxvd2VkXCJdLFtbMjg5MSwyODkzXSxcInZhbGlkXCJdLFtbMjg5NCwyOTAxXSxcImRpc2FsbG93ZWRcIl0sW1syOTAyLDI5MDNdLFwidmFsaWRcIl0sW1syOTA0LDI5MDddLFwiZGlzYWxsb3dlZFwiXSxbWzI5MDgsMjkwOF0sXCJtYXBwZWRcIixbMjg0OSwyODc2XV0sW1syOTA5LDI5MDldLFwibWFwcGVkXCIsWzI4NTAsMjg3Nl1dLFtbMjkxMCwyOTEwXSxcImRpc2FsbG93ZWRcIl0sW1syOTExLDI5MTNdLFwidmFsaWRcIl0sW1syOTE0LDI5MTVdLFwidmFsaWRcIl0sW1syOTE2LDI5MTddLFwiZGlzYWxsb3dlZFwiXSxbWzI5MTgsMjkyN10sXCJ2YWxpZFwiXSxbWzI5MjgsMjkyOF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMjkyOSwyOTI5XSxcInZhbGlkXCJdLFtbMjkzMCwyOTM1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1syOTM2LDI5NDVdLFwiZGlzYWxsb3dlZFwiXSxbWzI5NDYsMjk0N10sXCJ2YWxpZFwiXSxbWzI5NDgsMjk0OF0sXCJkaXNhbGxvd2VkXCJdLFtbMjk0OSwyOTU0XSxcInZhbGlkXCJdLFtbMjk1NSwyOTU3XSxcImRpc2FsbG93ZWRcIl0sW1syOTU4LDI5NjBdLFwidmFsaWRcIl0sW1syOTYxLDI5NjFdLFwiZGlzYWxsb3dlZFwiXSxbWzI5NjIsMjk2NV0sXCJ2YWxpZFwiXSxbWzI5NjYsMjk2OF0sXCJkaXNhbGxvd2VkXCJdLFtbMjk2OSwyOTcwXSxcInZhbGlkXCJdLFtbMjk3MSwyOTcxXSxcImRpc2FsbG93ZWRcIl0sW1syOTcyLDI5NzJdLFwidmFsaWRcIl0sW1syOTczLDI5NzNdLFwiZGlzYWxsb3dlZFwiXSxbWzI5NzQsMjk3NV0sXCJ2YWxpZFwiXSxbWzI5NzYsMjk3OF0sXCJkaXNhbGxvd2VkXCJdLFtbMjk3OSwyOTgwXSxcInZhbGlkXCJdLFtbMjk4MSwyOTgzXSxcImRpc2FsbG93ZWRcIl0sW1syOTg0LDI5ODZdLFwidmFsaWRcIl0sW1syOTg3LDI5ODldLFwiZGlzYWxsb3dlZFwiXSxbWzI5OTAsMjk5N10sXCJ2YWxpZFwiXSxbWzI5OTgsMjk5OF0sXCJ2YWxpZFwiXSxbWzI5OTksMzAwMV0sXCJ2YWxpZFwiXSxbWzMwMDIsMzAwNV0sXCJkaXNhbGxvd2VkXCJdLFtbMzAwNiwzMDEwXSxcInZhbGlkXCJdLFtbMzAxMSwzMDEzXSxcImRpc2FsbG93ZWRcIl0sW1szMDE0LDMwMTZdLFwidmFsaWRcIl0sW1szMDE3LDMwMTddLFwiZGlzYWxsb3dlZFwiXSxbWzMwMTgsMzAyMV0sXCJ2YWxpZFwiXSxbWzMwMjIsMzAyM10sXCJkaXNhbGxvd2VkXCJdLFtbMzAyNCwzMDI0XSxcInZhbGlkXCJdLFtbMzAyNSwzMDMwXSxcImRpc2FsbG93ZWRcIl0sW1szMDMxLDMwMzFdLFwidmFsaWRcIl0sW1szMDMyLDMwNDVdLFwiZGlzYWxsb3dlZFwiXSxbWzMwNDYsMzA0Nl0sXCJ2YWxpZFwiXSxbWzMwNDcsMzA1NV0sXCJ2YWxpZFwiXSxbWzMwNTYsMzA1OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzA1OSwzMDY2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szMDY3LDMwNzFdLFwiZGlzYWxsb3dlZFwiXSxbWzMwNzIsMzA3Ml0sXCJ2YWxpZFwiXSxbWzMwNzMsMzA3NV0sXCJ2YWxpZFwiXSxbWzMwNzYsMzA3Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMzA3NywzMDg0XSxcInZhbGlkXCJdLFtbMzA4NSwzMDg1XSxcImRpc2FsbG93ZWRcIl0sW1szMDg2LDMwODhdLFwidmFsaWRcIl0sW1szMDg5LDMwODldLFwiZGlzYWxsb3dlZFwiXSxbWzMwOTAsMzExMl0sXCJ2YWxpZFwiXSxbWzMxMTMsMzExM10sXCJkaXNhbGxvd2VkXCJdLFtbMzExNCwzMTIzXSxcInZhbGlkXCJdLFtbMzEyNCwzMTI0XSxcInZhbGlkXCJdLFtbMzEyNSwzMTI5XSxcInZhbGlkXCJdLFtbMzEzMCwzMTMyXSxcImRpc2FsbG93ZWRcIl0sW1szMTMzLDMxMzNdLFwidmFsaWRcIl0sW1szMTM0LDMxNDBdLFwidmFsaWRcIl0sW1szMTQxLDMxNDFdLFwiZGlzYWxsb3dlZFwiXSxbWzMxNDIsMzE0NF0sXCJ2YWxpZFwiXSxbWzMxNDUsMzE0NV0sXCJkaXNhbGxvd2VkXCJdLFtbMzE0NiwzMTQ5XSxcInZhbGlkXCJdLFtbMzE1MCwzMTU2XSxcImRpc2FsbG93ZWRcIl0sW1szMTU3LDMxNThdLFwidmFsaWRcIl0sW1szMTU5LDMxNTldLFwiZGlzYWxsb3dlZFwiXSxbWzMxNjAsMzE2MV0sXCJ2YWxpZFwiXSxbWzMxNjIsMzE2Ml0sXCJ2YWxpZFwiXSxbWzMxNjMsMzE2N10sXCJkaXNhbGxvd2VkXCJdLFtbMzE2OCwzMTY5XSxcInZhbGlkXCJdLFtbMzE3MCwzMTcxXSxcInZhbGlkXCJdLFtbMzE3MiwzMTczXSxcImRpc2FsbG93ZWRcIl0sW1szMTc0LDMxODNdLFwidmFsaWRcIl0sW1szMTg0LDMxOTFdLFwiZGlzYWxsb3dlZFwiXSxbWzMxOTIsMzE5OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzIwMCwzMjAwXSxcImRpc2FsbG93ZWRcIl0sW1szMjAxLDMyMDFdLFwidmFsaWRcIl0sW1szMjAyLDMyMDNdLFwidmFsaWRcIl0sW1szMjA0LDMyMDRdLFwiZGlzYWxsb3dlZFwiXSxbWzMyMDUsMzIxMl0sXCJ2YWxpZFwiXSxbWzMyMTMsMzIxM10sXCJkaXNhbGxvd2VkXCJdLFtbMzIxNCwzMjE2XSxcInZhbGlkXCJdLFtbMzIxNywzMjE3XSxcImRpc2FsbG93ZWRcIl0sW1szMjE4LDMyNDBdLFwidmFsaWRcIl0sW1szMjQxLDMyNDFdLFwiZGlzYWxsb3dlZFwiXSxbWzMyNDIsMzI1MV0sXCJ2YWxpZFwiXSxbWzMyNTIsMzI1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMzI1MywzMjU3XSxcInZhbGlkXCJdLFtbMzI1OCwzMjU5XSxcImRpc2FsbG93ZWRcIl0sW1szMjYwLDMyNjFdLFwidmFsaWRcIl0sW1szMjYyLDMyNjhdLFwidmFsaWRcIl0sW1szMjY5LDMyNjldLFwiZGlzYWxsb3dlZFwiXSxbWzMyNzAsMzI3Ml0sXCJ2YWxpZFwiXSxbWzMyNzMsMzI3M10sXCJkaXNhbGxvd2VkXCJdLFtbMzI3NCwzMjc3XSxcInZhbGlkXCJdLFtbMzI3OCwzMjg0XSxcImRpc2FsbG93ZWRcIl0sW1szMjg1LDMyODZdLFwidmFsaWRcIl0sW1szMjg3LDMyOTNdLFwiZGlzYWxsb3dlZFwiXSxbWzMyOTQsMzI5NF0sXCJ2YWxpZFwiXSxbWzMyOTUsMzI5NV0sXCJkaXNhbGxvd2VkXCJdLFtbMzI5NiwzMjk3XSxcInZhbGlkXCJdLFtbMzI5OCwzMjk5XSxcInZhbGlkXCJdLFtbMzMwMCwzMzAxXSxcImRpc2FsbG93ZWRcIl0sW1szMzAyLDMzMTFdLFwidmFsaWRcIl0sW1szMzEyLDMzMTJdLFwiZGlzYWxsb3dlZFwiXSxbWzMzMTMsMzMxNF0sXCJ2YWxpZFwiXSxbWzMzMTUsMzMyOF0sXCJkaXNhbGxvd2VkXCJdLFtbMzMyOSwzMzI5XSxcInZhbGlkXCJdLFtbMzMzMCwzMzMxXSxcInZhbGlkXCJdLFtbMzMzMiwzMzMyXSxcImRpc2FsbG93ZWRcIl0sW1szMzMzLDMzNDBdLFwidmFsaWRcIl0sW1szMzQxLDMzNDFdLFwiZGlzYWxsb3dlZFwiXSxbWzMzNDIsMzM0NF0sXCJ2YWxpZFwiXSxbWzMzNDUsMzM0NV0sXCJkaXNhbGxvd2VkXCJdLFtbMzM0NiwzMzY4XSxcInZhbGlkXCJdLFtbMzM2OSwzMzY5XSxcInZhbGlkXCJdLFtbMzM3MCwzMzg1XSxcInZhbGlkXCJdLFtbMzM4NiwzMzg2XSxcInZhbGlkXCJdLFtbMzM4NywzMzg4XSxcImRpc2FsbG93ZWRcIl0sW1szMzg5LDMzODldLFwidmFsaWRcIl0sW1szMzkwLDMzOTVdLFwidmFsaWRcIl0sW1szMzk2LDMzOTZdLFwidmFsaWRcIl0sW1szMzk3LDMzOTddLFwiZGlzYWxsb3dlZFwiXSxbWzMzOTgsMzQwMF0sXCJ2YWxpZFwiXSxbWzM0MDEsMzQwMV0sXCJkaXNhbGxvd2VkXCJdLFtbMzQwMiwzNDA1XSxcInZhbGlkXCJdLFtbMzQwNiwzNDA2XSxcInZhbGlkXCJdLFtbMzQwNywzNDE0XSxcImRpc2FsbG93ZWRcIl0sW1szNDE1LDM0MTVdLFwidmFsaWRcIl0sW1szNDE2LDM0MjJdLFwiZGlzYWxsb3dlZFwiXSxbWzM0MjMsMzQyM10sXCJ2YWxpZFwiXSxbWzM0MjQsMzQyNV0sXCJ2YWxpZFwiXSxbWzM0MjYsMzQyN10sXCJ2YWxpZFwiXSxbWzM0MjgsMzQyOV0sXCJkaXNhbGxvd2VkXCJdLFtbMzQzMCwzNDM5XSxcInZhbGlkXCJdLFtbMzQ0MCwzNDQ1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szNDQ2LDM0NDhdLFwiZGlzYWxsb3dlZFwiXSxbWzM0NDksMzQ0OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzQ1MCwzNDU1XSxcInZhbGlkXCJdLFtbMzQ1NiwzNDU3XSxcImRpc2FsbG93ZWRcIl0sW1szNDU4LDM0NTldLFwidmFsaWRcIl0sW1szNDYwLDM0NjBdLFwiZGlzYWxsb3dlZFwiXSxbWzM0NjEsMzQ3OF0sXCJ2YWxpZFwiXSxbWzM0NzksMzQ4MV0sXCJkaXNhbGxvd2VkXCJdLFtbMzQ4MiwzNTA1XSxcInZhbGlkXCJdLFtbMzUwNiwzNTA2XSxcImRpc2FsbG93ZWRcIl0sW1szNTA3LDM1MTVdLFwidmFsaWRcIl0sW1szNTE2LDM1MTZdLFwiZGlzYWxsb3dlZFwiXSxbWzM1MTcsMzUxN10sXCJ2YWxpZFwiXSxbWzM1MTgsMzUxOV0sXCJkaXNhbGxvd2VkXCJdLFtbMzUyMCwzNTI2XSxcInZhbGlkXCJdLFtbMzUyNywzNTI5XSxcImRpc2FsbG93ZWRcIl0sW1szNTMwLDM1MzBdLFwidmFsaWRcIl0sW1szNTMxLDM1MzRdLFwiZGlzYWxsb3dlZFwiXSxbWzM1MzUsMzU0MF0sXCJ2YWxpZFwiXSxbWzM1NDEsMzU0MV0sXCJkaXNhbGxvd2VkXCJdLFtbMzU0MiwzNTQyXSxcInZhbGlkXCJdLFtbMzU0MywzNTQzXSxcImRpc2FsbG93ZWRcIl0sW1szNTQ0LDM1NTFdLFwidmFsaWRcIl0sW1szNTUyLDM1NTddLFwiZGlzYWxsb3dlZFwiXSxbWzM1NTgsMzU2N10sXCJ2YWxpZFwiXSxbWzM1NjgsMzU2OV0sXCJkaXNhbGxvd2VkXCJdLFtbMzU3MCwzNTcxXSxcInZhbGlkXCJdLFtbMzU3MiwzNTcyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szNTczLDM1ODRdLFwiZGlzYWxsb3dlZFwiXSxbWzM1ODUsMzYzNF0sXCJ2YWxpZFwiXSxbWzM2MzUsMzYzNV0sXCJtYXBwZWRcIixbMzY2MSwzNjM0XV0sW1szNjM2LDM2NDJdLFwidmFsaWRcIl0sW1szNjQzLDM2NDZdLFwiZGlzYWxsb3dlZFwiXSxbWzM2NDcsMzY0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzY0OCwzNjYyXSxcInZhbGlkXCJdLFtbMzY2MywzNjYzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szNjY0LDM2NzNdLFwidmFsaWRcIl0sW1szNjc0LDM2NzVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM2NzYsMzcxMl0sXCJkaXNhbGxvd2VkXCJdLFtbMzcxMywzNzE0XSxcInZhbGlkXCJdLFtbMzcxNSwzNzE1XSxcImRpc2FsbG93ZWRcIl0sW1szNzE2LDM3MTZdLFwidmFsaWRcIl0sW1szNzE3LDM3MThdLFwiZGlzYWxsb3dlZFwiXSxbWzM3MTksMzcyMF0sXCJ2YWxpZFwiXSxbWzM3MjEsMzcyMV0sXCJkaXNhbGxvd2VkXCJdLFtbMzcyMiwzNzIyXSxcInZhbGlkXCJdLFtbMzcyMywzNzI0XSxcImRpc2FsbG93ZWRcIl0sW1szNzI1LDM3MjVdLFwidmFsaWRcIl0sW1szNzI2LDM3MzFdLFwiZGlzYWxsb3dlZFwiXSxbWzM3MzIsMzczNV0sXCJ2YWxpZFwiXSxbWzM3MzYsMzczNl0sXCJkaXNhbGxvd2VkXCJdLFtbMzczNywzNzQzXSxcInZhbGlkXCJdLFtbMzc0NCwzNzQ0XSxcImRpc2FsbG93ZWRcIl0sW1szNzQ1LDM3NDddLFwidmFsaWRcIl0sW1szNzQ4LDM3NDhdLFwiZGlzYWxsb3dlZFwiXSxbWzM3NDksMzc0OV0sXCJ2YWxpZFwiXSxbWzM3NTAsMzc1MF0sXCJkaXNhbGxvd2VkXCJdLFtbMzc1MSwzNzUxXSxcInZhbGlkXCJdLFtbMzc1MiwzNzUzXSxcImRpc2FsbG93ZWRcIl0sW1szNzU0LDM3NTVdLFwidmFsaWRcIl0sW1szNzU2LDM3NTZdLFwiZGlzYWxsb3dlZFwiXSxbWzM3NTcsMzc2Ml0sXCJ2YWxpZFwiXSxbWzM3NjMsMzc2M10sXCJtYXBwZWRcIixbMzc4OSwzNzYyXV0sW1szNzY0LDM3NjldLFwidmFsaWRcIl0sW1szNzcwLDM3NzBdLFwiZGlzYWxsb3dlZFwiXSxbWzM3NzEsMzc3M10sXCJ2YWxpZFwiXSxbWzM3NzQsMzc3NV0sXCJkaXNhbGxvd2VkXCJdLFtbMzc3NiwzNzgwXSxcInZhbGlkXCJdLFtbMzc4MSwzNzgxXSxcImRpc2FsbG93ZWRcIl0sW1szNzgyLDM3ODJdLFwidmFsaWRcIl0sW1szNzgzLDM3ODNdLFwiZGlzYWxsb3dlZFwiXSxbWzM3ODQsMzc4OV0sXCJ2YWxpZFwiXSxbWzM3OTAsMzc5MV0sXCJkaXNhbGxvd2VkXCJdLFtbMzc5MiwzODAxXSxcInZhbGlkXCJdLFtbMzgwMiwzODAzXSxcImRpc2FsbG93ZWRcIl0sW1szODA0LDM4MDRdLFwibWFwcGVkXCIsWzM3NTUsMzczN11dLFtbMzgwNSwzODA1XSxcIm1hcHBlZFwiLFszNzU1LDM3NDVdXSxbWzM4MDYsMzgwN10sXCJ2YWxpZFwiXSxbWzM4MDgsMzgzOV0sXCJkaXNhbGxvd2VkXCJdLFtbMzg0MCwzODQwXSxcInZhbGlkXCJdLFtbMzg0MSwzODUwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szODUxLDM4NTFdLFwidmFsaWRcIl0sW1szODUyLDM4NTJdLFwibWFwcGVkXCIsWzM4NTFdXSxbWzM4NTMsMzg2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzg2NCwzODY1XSxcInZhbGlkXCJdLFtbMzg2NiwzODcxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szODcyLDM4ODFdLFwidmFsaWRcIl0sW1szODgyLDM4OTJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM4OTMsMzg5M10sXCJ2YWxpZFwiXSxbWzM4OTQsMzg5NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzg5NSwzODk1XSxcInZhbGlkXCJdLFtbMzg5NiwzODk2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1szODk3LDM4OTddLFwidmFsaWRcIl0sW1szODk4LDM5MDFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzM5MDIsMzkwNl0sXCJ2YWxpZFwiXSxbWzM5MDcsMzkwN10sXCJtYXBwZWRcIixbMzkwNiw0MDIzXV0sW1szOTA4LDM5MTFdLFwidmFsaWRcIl0sW1szOTEyLDM5MTJdLFwiZGlzYWxsb3dlZFwiXSxbWzM5MTMsMzkxNl0sXCJ2YWxpZFwiXSxbWzM5MTcsMzkxN10sXCJtYXBwZWRcIixbMzkxNiw0MDIzXV0sW1szOTE4LDM5MjFdLFwidmFsaWRcIl0sW1szOTIyLDM5MjJdLFwibWFwcGVkXCIsWzM5MjEsNDAyM11dLFtbMzkyMywzOTI2XSxcInZhbGlkXCJdLFtbMzkyNywzOTI3XSxcIm1hcHBlZFwiLFszOTI2LDQwMjNdXSxbWzM5MjgsMzkzMV0sXCJ2YWxpZFwiXSxbWzM5MzIsMzkzMl0sXCJtYXBwZWRcIixbMzkzMSw0MDIzXV0sW1szOTMzLDM5NDRdLFwidmFsaWRcIl0sW1szOTQ1LDM5NDVdLFwibWFwcGVkXCIsWzM5MDQsNDAyMV1dLFtbMzk0NiwzOTQ2XSxcInZhbGlkXCJdLFtbMzk0NywzOTQ4XSxcInZhbGlkXCJdLFtbMzk0OSwzOTUyXSxcImRpc2FsbG93ZWRcIl0sW1szOTUzLDM5NTRdLFwidmFsaWRcIl0sW1szOTU1LDM5NTVdLFwibWFwcGVkXCIsWzM5NTMsMzk1NF1dLFtbMzk1NiwzOTU2XSxcInZhbGlkXCJdLFtbMzk1NywzOTU3XSxcIm1hcHBlZFwiLFszOTUzLDM5NTZdXSxbWzM5NTgsMzk1OF0sXCJtYXBwZWRcIixbNDAxOCwzOTY4XV0sW1szOTU5LDM5NTldLFwibWFwcGVkXCIsWzQwMTgsMzk1MywzOTY4XV0sW1szOTYwLDM5NjBdLFwibWFwcGVkXCIsWzQwMTksMzk2OF1dLFtbMzk2MSwzOTYxXSxcIm1hcHBlZFwiLFs0MDE5LDM5NTMsMzk2OF1dLFtbMzk2MiwzOTY4XSxcInZhbGlkXCJdLFtbMzk2OSwzOTY5XSxcIm1hcHBlZFwiLFszOTUzLDM5NjhdXSxbWzM5NzAsMzk3Ml0sXCJ2YWxpZFwiXSxbWzM5NzMsMzk3M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMzk3NCwzOTc5XSxcInZhbGlkXCJdLFtbMzk4MCwzOTgzXSxcInZhbGlkXCJdLFtbMzk4NCwzOTg2XSxcInZhbGlkXCJdLFtbMzk4NywzOTg3XSxcIm1hcHBlZFwiLFszOTg2LDQwMjNdXSxbWzM5ODgsMzk4OV0sXCJ2YWxpZFwiXSxbWzM5OTAsMzk5MF0sXCJ2YWxpZFwiXSxbWzM5OTEsMzk5MV0sXCJ2YWxpZFwiXSxbWzM5OTIsMzk5Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMzk5MywzOTk2XSxcInZhbGlkXCJdLFtbMzk5NywzOTk3XSxcIm1hcHBlZFwiLFszOTk2LDQwMjNdXSxbWzM5OTgsNDAwMV0sXCJ2YWxpZFwiXSxbWzQwMDIsNDAwMl0sXCJtYXBwZWRcIixbNDAwMSw0MDIzXV0sW1s0MDAzLDQwMDZdLFwidmFsaWRcIl0sW1s0MDA3LDQwMDddLFwibWFwcGVkXCIsWzQwMDYsNDAyM11dLFtbNDAwOCw0MDExXSxcInZhbGlkXCJdLFtbNDAxMiw0MDEyXSxcIm1hcHBlZFwiLFs0MDExLDQwMjNdXSxbWzQwMTMsNDAxM10sXCJ2YWxpZFwiXSxbWzQwMTQsNDAxNl0sXCJ2YWxpZFwiXSxbWzQwMTcsNDAyM10sXCJ2YWxpZFwiXSxbWzQwMjQsNDAyNF0sXCJ2YWxpZFwiXSxbWzQwMjUsNDAyNV0sXCJtYXBwZWRcIixbMzk4NCw0MDIxXV0sW1s0MDI2LDQwMjhdLFwidmFsaWRcIl0sW1s0MDI5LDQwMjldLFwiZGlzYWxsb3dlZFwiXSxbWzQwMzAsNDAzN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDAzOCw0MDM4XSxcInZhbGlkXCJdLFtbNDAzOSw0MDQ0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MDQ1LDQwNDVdLFwiZGlzYWxsb3dlZFwiXSxbWzQwNDYsNDA0Nl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDA0Nyw0MDQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MDQ4LDQwNDldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQwNTAsNDA1Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDA1Myw0MDU2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MDU3LDQwNThdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQwNTksNDA5NV0sXCJkaXNhbGxvd2VkXCJdLFtbNDA5Niw0MTI5XSxcInZhbGlkXCJdLFtbNDEzMCw0MTMwXSxcInZhbGlkXCJdLFtbNDEzMSw0MTM1XSxcInZhbGlkXCJdLFtbNDEzNiw0MTM2XSxcInZhbGlkXCJdLFtbNDEzNyw0MTM4XSxcInZhbGlkXCJdLFtbNDEzOSw0MTM5XSxcInZhbGlkXCJdLFtbNDE0MCw0MTQ2XSxcInZhbGlkXCJdLFtbNDE0Nyw0MTQ5XSxcInZhbGlkXCJdLFtbNDE1MCw0MTUzXSxcInZhbGlkXCJdLFtbNDE1NCw0MTU5XSxcInZhbGlkXCJdLFtbNDE2MCw0MTY5XSxcInZhbGlkXCJdLFtbNDE3MCw0MTc1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MTc2LDQxODVdLFwidmFsaWRcIl0sW1s0MTg2LDQyNDldLFwidmFsaWRcIl0sW1s0MjUwLDQyNTNdLFwidmFsaWRcIl0sW1s0MjU0LDQyNTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyNTYsNDI5M10sXCJkaXNhbGxvd2VkXCJdLFtbNDI5NCw0Mjk0XSxcImRpc2FsbG93ZWRcIl0sW1s0Mjk1LDQyOTVdLFwibWFwcGVkXCIsWzExNTU5XV0sW1s0Mjk2LDQzMDBdLFwiZGlzYWxsb3dlZFwiXSxbWzQzMDEsNDMwMV0sXCJtYXBwZWRcIixbMTE1NjVdXSxbWzQzMDIsNDMwM10sXCJkaXNhbGxvd2VkXCJdLFtbNDMwNCw0MzQyXSxcInZhbGlkXCJdLFtbNDM0Myw0MzQ0XSxcInZhbGlkXCJdLFtbNDM0NSw0MzQ2XSxcInZhbGlkXCJdLFtbNDM0Nyw0MzQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzQ4LDQzNDhdLFwibWFwcGVkXCIsWzQzMTZdXSxbWzQzNDksNDM1MV0sXCJ2YWxpZFwiXSxbWzQzNTIsNDQ0MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDQ0Miw0NDQ2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0NDQ3LDQ0NDhdLFwiZGlzYWxsb3dlZFwiXSxbWzQ0NDksNDUxNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDUxNSw0NTE5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0NTIwLDQ2MDFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQ2MDIsNDYwN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDYwOCw0NjE0XSxcInZhbGlkXCJdLFtbNDYxNSw0NjE1XSxcInZhbGlkXCJdLFtbNDYxNiw0Njc4XSxcInZhbGlkXCJdLFtbNDY3OSw0Njc5XSxcInZhbGlkXCJdLFtbNDY4MCw0NjgwXSxcInZhbGlkXCJdLFtbNDY4MSw0NjgxXSxcImRpc2FsbG93ZWRcIl0sW1s0NjgyLDQ2ODVdLFwidmFsaWRcIl0sW1s0Njg2LDQ2ODddLFwiZGlzYWxsb3dlZFwiXSxbWzQ2ODgsNDY5NF0sXCJ2YWxpZFwiXSxbWzQ2OTUsNDY5NV0sXCJkaXNhbGxvd2VkXCJdLFtbNDY5Niw0Njk2XSxcInZhbGlkXCJdLFtbNDY5Nyw0Njk3XSxcImRpc2FsbG93ZWRcIl0sW1s0Njk4LDQ3MDFdLFwidmFsaWRcIl0sW1s0NzAyLDQ3MDNdLFwiZGlzYWxsb3dlZFwiXSxbWzQ3MDQsNDc0Ml0sXCJ2YWxpZFwiXSxbWzQ3NDMsNDc0M10sXCJ2YWxpZFwiXSxbWzQ3NDQsNDc0NF0sXCJ2YWxpZFwiXSxbWzQ3NDUsNDc0NV0sXCJkaXNhbGxvd2VkXCJdLFtbNDc0Niw0NzQ5XSxcInZhbGlkXCJdLFtbNDc1MCw0NzUxXSxcImRpc2FsbG93ZWRcIl0sW1s0NzUyLDQ3ODJdLFwidmFsaWRcIl0sW1s0NzgzLDQ3ODNdLFwidmFsaWRcIl0sW1s0Nzg0LDQ3ODRdLFwidmFsaWRcIl0sW1s0Nzg1LDQ3ODVdLFwiZGlzYWxsb3dlZFwiXSxbWzQ3ODYsNDc4OV0sXCJ2YWxpZFwiXSxbWzQ3OTAsNDc5MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDc5Miw0Nzk4XSxcInZhbGlkXCJdLFtbNDc5OSw0Nzk5XSxcImRpc2FsbG93ZWRcIl0sW1s0ODAwLDQ4MDBdLFwidmFsaWRcIl0sW1s0ODAxLDQ4MDFdLFwiZGlzYWxsb3dlZFwiXSxbWzQ4MDIsNDgwNV0sXCJ2YWxpZFwiXSxbWzQ4MDYsNDgwN10sXCJkaXNhbGxvd2VkXCJdLFtbNDgwOCw0ODE0XSxcInZhbGlkXCJdLFtbNDgxNSw0ODE1XSxcInZhbGlkXCJdLFtbNDgxNiw0ODIyXSxcInZhbGlkXCJdLFtbNDgyMyw0ODIzXSxcImRpc2FsbG93ZWRcIl0sW1s0ODI0LDQ4NDZdLFwidmFsaWRcIl0sW1s0ODQ3LDQ4NDddLFwidmFsaWRcIl0sW1s0ODQ4LDQ4NzhdLFwidmFsaWRcIl0sW1s0ODc5LDQ4NzldLFwidmFsaWRcIl0sW1s0ODgwLDQ4ODBdLFwidmFsaWRcIl0sW1s0ODgxLDQ4ODFdLFwiZGlzYWxsb3dlZFwiXSxbWzQ4ODIsNDg4NV0sXCJ2YWxpZFwiXSxbWzQ4ODYsNDg4N10sXCJkaXNhbGxvd2VkXCJdLFtbNDg4OCw0ODk0XSxcInZhbGlkXCJdLFtbNDg5NSw0ODk1XSxcInZhbGlkXCJdLFtbNDg5Niw0OTM0XSxcInZhbGlkXCJdLFtbNDkzNSw0OTM1XSxcInZhbGlkXCJdLFtbNDkzNiw0OTU0XSxcInZhbGlkXCJdLFtbNDk1NSw0OTU2XSxcImRpc2FsbG93ZWRcIl0sW1s0OTU3LDQ5NThdLFwidmFsaWRcIl0sW1s0OTU5LDQ5NTldLFwidmFsaWRcIl0sW1s0OTYwLDQ5NjBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQ5NjEsNDk4OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDk4OSw0OTkxXSxcImRpc2FsbG93ZWRcIl0sW1s0OTkyLDUwMDddLFwidmFsaWRcIl0sW1s1MDA4LDUwMTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzUwMTgsNTAyM10sXCJkaXNhbGxvd2VkXCJdLFtbNTAyNCw1MTA4XSxcInZhbGlkXCJdLFtbNTEwOSw1MTA5XSxcInZhbGlkXCJdLFtbNTExMCw1MTExXSxcImRpc2FsbG93ZWRcIl0sW1s1MTEyLDUxMTJdLFwibWFwcGVkXCIsWzUxMDRdXSxbWzUxMTMsNTExM10sXCJtYXBwZWRcIixbNTEwNV1dLFtbNTExNCw1MTE0XSxcIm1hcHBlZFwiLFs1MTA2XV0sW1s1MTE1LDUxMTVdLFwibWFwcGVkXCIsWzUxMDddXSxbWzUxMTYsNTExNl0sXCJtYXBwZWRcIixbNTEwOF1dLFtbNTExNyw1MTE3XSxcIm1hcHBlZFwiLFs1MTA5XV0sW1s1MTE4LDUxMTldLFwiZGlzYWxsb3dlZFwiXSxbWzUxMjAsNTEyMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNTEyMSw1NzQwXSxcInZhbGlkXCJdLFtbNTc0MSw1NzQyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s1NzQzLDU3NTBdLFwidmFsaWRcIl0sW1s1NzUxLDU3NTldLFwidmFsaWRcIl0sW1s1NzYwLDU3NjBdLFwiZGlzYWxsb3dlZFwiXSxbWzU3NjEsNTc4Nl0sXCJ2YWxpZFwiXSxbWzU3ODcsNTc4OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNTc4OSw1NzkxXSxcImRpc2FsbG93ZWRcIl0sW1s1NzkyLDU4NjZdLFwidmFsaWRcIl0sW1s1ODY3LDU4NzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzU4NzMsNTg4MF0sXCJ2YWxpZFwiXSxbWzU4ODEsNTg4N10sXCJkaXNhbGxvd2VkXCJdLFtbNTg4OCw1OTAwXSxcInZhbGlkXCJdLFtbNTkwMSw1OTAxXSxcImRpc2FsbG93ZWRcIl0sW1s1OTAyLDU5MDhdLFwidmFsaWRcIl0sW1s1OTA5LDU5MTldLFwiZGlzYWxsb3dlZFwiXSxbWzU5MjAsNTk0MF0sXCJ2YWxpZFwiXSxbWzU5NDEsNTk0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNTk0Myw1OTUxXSxcImRpc2FsbG93ZWRcIl0sW1s1OTUyLDU5NzFdLFwidmFsaWRcIl0sW1s1OTcyLDU5ODNdLFwiZGlzYWxsb3dlZFwiXSxbWzU5ODQsNTk5Nl0sXCJ2YWxpZFwiXSxbWzU5OTcsNTk5N10sXCJkaXNhbGxvd2VkXCJdLFtbNTk5OCw2MDAwXSxcInZhbGlkXCJdLFtbNjAwMSw2MDAxXSxcImRpc2FsbG93ZWRcIl0sW1s2MDAyLDYwMDNdLFwidmFsaWRcIl0sW1s2MDA0LDYwMTVdLFwiZGlzYWxsb3dlZFwiXSxbWzYwMTYsNjA2N10sXCJ2YWxpZFwiXSxbWzYwNjgsNjA2OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjA3MCw2MDk5XSxcInZhbGlkXCJdLFtbNjEwMCw2MTAyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2MTAzLDYxMDNdLFwidmFsaWRcIl0sW1s2MTA0LDYxMDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzYxMDgsNjEwOF0sXCJ2YWxpZFwiXSxbWzYxMDksNjEwOV0sXCJ2YWxpZFwiXSxbWzYxMTAsNjExMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjExMiw2MTIxXSxcInZhbGlkXCJdLFtbNjEyMiw2MTI3XSxcImRpc2FsbG93ZWRcIl0sW1s2MTI4LDYxMzddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzYxMzgsNjE0M10sXCJkaXNhbGxvd2VkXCJdLFtbNjE0NCw2MTQ5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2MTUwLDYxNTBdLFwiZGlzYWxsb3dlZFwiXSxbWzYxNTEsNjE1NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjE1NSw2MTU3XSxcImlnbm9yZWRcIl0sW1s2MTU4LDYxNThdLFwiZGlzYWxsb3dlZFwiXSxbWzYxNTksNjE1OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjE2MCw2MTY5XSxcInZhbGlkXCJdLFtbNjE3MCw2MTc1XSxcImRpc2FsbG93ZWRcIl0sW1s2MTc2LDYyNjNdLFwidmFsaWRcIl0sW1s2MjY0LDYyNzFdLFwiZGlzYWxsb3dlZFwiXSxbWzYyNzIsNjMxM10sXCJ2YWxpZFwiXSxbWzYzMTQsNjMxNF0sXCJ2YWxpZFwiXSxbWzYzMTUsNjMxOV0sXCJkaXNhbGxvd2VkXCJdLFtbNjMyMCw2Mzg5XSxcInZhbGlkXCJdLFtbNjM5MCw2Mzk5XSxcImRpc2FsbG93ZWRcIl0sW1s2NDAwLDY0MjhdLFwidmFsaWRcIl0sW1s2NDI5LDY0MzBdLFwidmFsaWRcIl0sW1s2NDMxLDY0MzFdLFwiZGlzYWxsb3dlZFwiXSxbWzY0MzIsNjQ0M10sXCJ2YWxpZFwiXSxbWzY0NDQsNjQ0N10sXCJkaXNhbGxvd2VkXCJdLFtbNjQ0OCw2NDU5XSxcInZhbGlkXCJdLFtbNjQ2MCw2NDYzXSxcImRpc2FsbG93ZWRcIl0sW1s2NDY0LDY0NjRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY0NjUsNjQ2N10sXCJkaXNhbGxvd2VkXCJdLFtbNjQ2OCw2NDY5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NDcwLDY1MDldLFwidmFsaWRcIl0sW1s2NTEwLDY1MTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY1MTIsNjUxNl0sXCJ2YWxpZFwiXSxbWzY1MTcsNjUyN10sXCJkaXNhbGxvd2VkXCJdLFtbNjUyOCw2NTY5XSxcInZhbGlkXCJdLFtbNjU3MCw2NTcxXSxcInZhbGlkXCJdLFtbNjU3Miw2NTc1XSxcImRpc2FsbG93ZWRcIl0sW1s2NTc2LDY2MDFdLFwidmFsaWRcIl0sW1s2NjAyLDY2MDddLFwiZGlzYWxsb3dlZFwiXSxbWzY2MDgsNjYxN10sXCJ2YWxpZFwiXSxbWzY2MTgsNjYxOF0sXCJ2YWxpZFwiLFtdLFwiWFY4XCJdLFtbNjYxOSw2NjIxXSxcImRpc2FsbG93ZWRcIl0sW1s2NjIyLDY2MjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2MjQsNjY1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjY1Niw2NjgzXSxcInZhbGlkXCJdLFtbNjY4NCw2Njg1XSxcImRpc2FsbG93ZWRcIl0sW1s2Njg2LDY2ODddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2ODgsNjc1MF0sXCJ2YWxpZFwiXSxbWzY3NTEsNjc1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjc1Miw2NzgwXSxcInZhbGlkXCJdLFtbNjc4MSw2NzgyXSxcImRpc2FsbG93ZWRcIl0sW1s2NzgzLDY3OTNdLFwidmFsaWRcIl0sW1s2Nzk0LDY3OTldLFwiZGlzYWxsb3dlZFwiXSxbWzY4MDAsNjgwOV0sXCJ2YWxpZFwiXSxbWzY4MTAsNjgxNV0sXCJkaXNhbGxvd2VkXCJdLFtbNjgxNiw2ODIyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODIzLDY4MjNdLFwidmFsaWRcIl0sW1s2ODI0LDY4MjldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4MzAsNjgzMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjgzMiw2ODQ1XSxcInZhbGlkXCJdLFtbNjg0Niw2ODQ2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODQ3LDY5MTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY5MTIsNjk4N10sXCJ2YWxpZFwiXSxbWzY5ODgsNjk5MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjk5Miw3MDAxXSxcInZhbGlkXCJdLFtbNzAwMiw3MDE4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MDE5LDcwMjddLFwidmFsaWRcIl0sW1s3MDI4LDcwMzZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMzcsNzAzOV0sXCJkaXNhbGxvd2VkXCJdLFtbNzA0MCw3MDgyXSxcInZhbGlkXCJdLFtbNzA4Myw3MDg1XSxcInZhbGlkXCJdLFtbNzA4Niw3MDk3XSxcInZhbGlkXCJdLFtbNzA5OCw3MTAzXSxcInZhbGlkXCJdLFtbNzEwNCw3MTU1XSxcInZhbGlkXCJdLFtbNzE1Niw3MTYzXSxcImRpc2FsbG93ZWRcIl0sW1s3MTY0LDcxNjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcxNjgsNzIyM10sXCJ2YWxpZFwiXSxbWzcyMjQsNzIyNl0sXCJkaXNhbGxvd2VkXCJdLFtbNzIyNyw3MjMxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MjMyLDcyNDFdLFwidmFsaWRcIl0sW1s3MjQyLDcyNDRdLFwiZGlzYWxsb3dlZFwiXSxbWzcyNDUsNzI5M10sXCJ2YWxpZFwiXSxbWzcyOTQsNzI5NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzI5Niw3MzU5XSxcImRpc2FsbG93ZWRcIl0sW1s3MzYwLDczNjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzczNjgsNzM3NV0sXCJkaXNhbGxvd2VkXCJdLFtbNzM3Niw3Mzc4XSxcInZhbGlkXCJdLFtbNzM3OSw3Mzc5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MzgwLDc0MTBdLFwidmFsaWRcIl0sW1s3NDExLDc0MTRdLFwidmFsaWRcIl0sW1s3NDE1LDc0MTVdLFwiZGlzYWxsb3dlZFwiXSxbWzc0MTYsNzQxN10sXCJ2YWxpZFwiXSxbWzc0MTgsNzQyM10sXCJkaXNhbGxvd2VkXCJdLFtbNzQyNCw3NDY3XSxcInZhbGlkXCJdLFtbNzQ2OCw3NDY4XSxcIm1hcHBlZFwiLFs5N11dLFtbNzQ2OSw3NDY5XSxcIm1hcHBlZFwiLFsyMzBdXSxbWzc0NzAsNzQ3MF0sXCJtYXBwZWRcIixbOThdXSxbWzc0NzEsNzQ3MV0sXCJ2YWxpZFwiXSxbWzc0NzIsNzQ3Ml0sXCJtYXBwZWRcIixbMTAwXV0sW1s3NDczLDc0NzNdLFwibWFwcGVkXCIsWzEwMV1dLFtbNzQ3NCw3NDc0XSxcIm1hcHBlZFwiLFs0NzddXSxbWzc0NzUsNzQ3NV0sXCJtYXBwZWRcIixbMTAzXV0sW1s3NDc2LDc0NzZdLFwibWFwcGVkXCIsWzEwNF1dLFtbNzQ3Nyw3NDc3XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzc0NzgsNzQ3OF0sXCJtYXBwZWRcIixbMTA2XV0sW1s3NDc5LDc0NzldLFwibWFwcGVkXCIsWzEwN11dLFtbNzQ4MCw3NDgwXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzc0ODEsNzQ4MV0sXCJtYXBwZWRcIixbMTA5XV0sW1s3NDgyLDc0ODJdLFwibWFwcGVkXCIsWzExMF1dLFtbNzQ4Myw3NDgzXSxcInZhbGlkXCJdLFtbNzQ4NCw3NDg0XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzc0ODUsNzQ4NV0sXCJtYXBwZWRcIixbNTQ3XV0sW1s3NDg2LDc0ODZdLFwibWFwcGVkXCIsWzExMl1dLFtbNzQ4Nyw3NDg3XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzc0ODgsNzQ4OF0sXCJtYXBwZWRcIixbMTE2XV0sW1s3NDg5LDc0ODldLFwibWFwcGVkXCIsWzExN11dLFtbNzQ5MCw3NDkwXSxcIm1hcHBlZFwiLFsxMTldXSxbWzc0OTEsNzQ5MV0sXCJtYXBwZWRcIixbOTddXSxbWzc0OTIsNzQ5Ml0sXCJtYXBwZWRcIixbNTkyXV0sW1s3NDkzLDc0OTNdLFwibWFwcGVkXCIsWzU5M11dLFtbNzQ5NCw3NDk0XSxcIm1hcHBlZFwiLFs3NDI2XV0sW1s3NDk1LDc0OTVdLFwibWFwcGVkXCIsWzk4XV0sW1s3NDk2LDc0OTZdLFwibWFwcGVkXCIsWzEwMF1dLFtbNzQ5Nyw3NDk3XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzc0OTgsNzQ5OF0sXCJtYXBwZWRcIixbNjAxXV0sW1s3NDk5LDc0OTldLFwibWFwcGVkXCIsWzYwM11dLFtbNzUwMCw3NTAwXSxcIm1hcHBlZFwiLFs2MDRdXSxbWzc1MDEsNzUwMV0sXCJtYXBwZWRcIixbMTAzXV0sW1s3NTAyLDc1MDJdLFwidmFsaWRcIl0sW1s3NTAzLDc1MDNdLFwibWFwcGVkXCIsWzEwN11dLFtbNzUwNCw3NTA0XSxcIm1hcHBlZFwiLFsxMDldXSxbWzc1MDUsNzUwNV0sXCJtYXBwZWRcIixbMzMxXV0sW1s3NTA2LDc1MDZdLFwibWFwcGVkXCIsWzExMV1dLFtbNzUwNyw3NTA3XSxcIm1hcHBlZFwiLFs1OTZdXSxbWzc1MDgsNzUwOF0sXCJtYXBwZWRcIixbNzQ0Nl1dLFtbNzUwOSw3NTA5XSxcIm1hcHBlZFwiLFs3NDQ3XV0sW1s3NTEwLDc1MTBdLFwibWFwcGVkXCIsWzExMl1dLFtbNzUxMSw3NTExXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzc1MTIsNzUxMl0sXCJtYXBwZWRcIixbMTE3XV0sW1s3NTEzLDc1MTNdLFwibWFwcGVkXCIsWzc0NTNdXSxbWzc1MTQsNzUxNF0sXCJtYXBwZWRcIixbNjIzXV0sW1s3NTE1LDc1MTVdLFwibWFwcGVkXCIsWzExOF1dLFtbNzUxNiw3NTE2XSxcIm1hcHBlZFwiLFs3NDYxXV0sW1s3NTE3LDc1MTddLFwibWFwcGVkXCIsWzk0Nl1dLFtbNzUxOCw3NTE4XSxcIm1hcHBlZFwiLFs5NDddXSxbWzc1MTksNzUxOV0sXCJtYXBwZWRcIixbOTQ4XV0sW1s3NTIwLDc1MjBdLFwibWFwcGVkXCIsWzk2Nl1dLFtbNzUyMSw3NTIxXSxcIm1hcHBlZFwiLFs5NjddXSxbWzc1MjIsNzUyMl0sXCJtYXBwZWRcIixbMTA1XV0sW1s3NTIzLDc1MjNdLFwibWFwcGVkXCIsWzExNF1dLFtbNzUyNCw3NTI0XSxcIm1hcHBlZFwiLFsxMTddXSxbWzc1MjUsNzUyNV0sXCJtYXBwZWRcIixbMTE4XV0sW1s3NTI2LDc1MjZdLFwibWFwcGVkXCIsWzk0Nl1dLFtbNzUyNyw3NTI3XSxcIm1hcHBlZFwiLFs5NDddXSxbWzc1MjgsNzUyOF0sXCJtYXBwZWRcIixbOTYxXV0sW1s3NTI5LDc1MjldLFwibWFwcGVkXCIsWzk2Nl1dLFtbNzUzMCw3NTMwXSxcIm1hcHBlZFwiLFs5NjddXSxbWzc1MzEsNzUzMV0sXCJ2YWxpZFwiXSxbWzc1MzIsNzU0M10sXCJ2YWxpZFwiXSxbWzc1NDQsNzU0NF0sXCJtYXBwZWRcIixbMTA4NV1dLFtbNzU0NSw3NTc4XSxcInZhbGlkXCJdLFtbNzU3OSw3NTc5XSxcIm1hcHBlZFwiLFs1OTRdXSxbWzc1ODAsNzU4MF0sXCJtYXBwZWRcIixbOTldXSxbWzc1ODEsNzU4MV0sXCJtYXBwZWRcIixbNTk3XV0sW1s3NTgyLDc1ODJdLFwibWFwcGVkXCIsWzI0MF1dLFtbNzU4Myw3NTgzXSxcIm1hcHBlZFwiLFs2MDRdXSxbWzc1ODQsNzU4NF0sXCJtYXBwZWRcIixbMTAyXV0sW1s3NTg1LDc1ODVdLFwibWFwcGVkXCIsWzYwN11dLFtbNzU4Niw3NTg2XSxcIm1hcHBlZFwiLFs2MDldXSxbWzc1ODcsNzU4N10sXCJtYXBwZWRcIixbNjEzXV0sW1s3NTg4LDc1ODhdLFwibWFwcGVkXCIsWzYxNl1dLFtbNzU4OSw3NTg5XSxcIm1hcHBlZFwiLFs2MTddXSxbWzc1OTAsNzU5MF0sXCJtYXBwZWRcIixbNjE4XV0sW1s3NTkxLDc1OTFdLFwibWFwcGVkXCIsWzc1NDddXSxbWzc1OTIsNzU5Ml0sXCJtYXBwZWRcIixbNjY5XV0sW1s3NTkzLDc1OTNdLFwibWFwcGVkXCIsWzYyMV1dLFtbNzU5NCw3NTk0XSxcIm1hcHBlZFwiLFs3NTU3XV0sW1s3NTk1LDc1OTVdLFwibWFwcGVkXCIsWzY3MV1dLFtbNzU5Niw3NTk2XSxcIm1hcHBlZFwiLFs2MjVdXSxbWzc1OTcsNzU5N10sXCJtYXBwZWRcIixbNjI0XV0sW1s3NTk4LDc1OThdLFwibWFwcGVkXCIsWzYyNl1dLFtbNzU5OSw3NTk5XSxcIm1hcHBlZFwiLFs2MjddXSxbWzc2MDAsNzYwMF0sXCJtYXBwZWRcIixbNjI4XV0sW1s3NjAxLDc2MDFdLFwibWFwcGVkXCIsWzYyOV1dLFtbNzYwMiw3NjAyXSxcIm1hcHBlZFwiLFs2MzJdXSxbWzc2MDMsNzYwM10sXCJtYXBwZWRcIixbNjQyXV0sW1s3NjA0LDc2MDRdLFwibWFwcGVkXCIsWzY0M11dLFtbNzYwNSw3NjA1XSxcIm1hcHBlZFwiLFs0MjddXSxbWzc2MDYsNzYwNl0sXCJtYXBwZWRcIixbNjQ5XV0sW1s3NjA3LDc2MDddLFwibWFwcGVkXCIsWzY1MF1dLFtbNzYwOCw3NjA4XSxcIm1hcHBlZFwiLFs3NDUyXV0sW1s3NjA5LDc2MDldLFwibWFwcGVkXCIsWzY1MV1dLFtbNzYxMCw3NjEwXSxcIm1hcHBlZFwiLFs2NTJdXSxbWzc2MTEsNzYxMV0sXCJtYXBwZWRcIixbMTIyXV0sW1s3NjEyLDc2MTJdLFwibWFwcGVkXCIsWzY1Nl1dLFtbNzYxMyw3NjEzXSxcIm1hcHBlZFwiLFs2NTddXSxbWzc2MTQsNzYxNF0sXCJtYXBwZWRcIixbNjU4XV0sW1s3NjE1LDc2MTVdLFwibWFwcGVkXCIsWzk1Ml1dLFtbNzYxNiw3NjE5XSxcInZhbGlkXCJdLFtbNzYyMCw3NjI2XSxcInZhbGlkXCJdLFtbNzYyNyw3NjU0XSxcInZhbGlkXCJdLFtbNzY1NSw3NjY5XSxcInZhbGlkXCJdLFtbNzY3MCw3Njc1XSxcImRpc2FsbG93ZWRcIl0sW1s3Njc2LDc2NzZdLFwidmFsaWRcIl0sW1s3Njc3LDc2NzddLFwidmFsaWRcIl0sW1s3Njc4LDc2NzldLFwidmFsaWRcIl0sW1s3NjgwLDc2ODBdLFwibWFwcGVkXCIsWzc2ODFdXSxbWzc2ODEsNzY4MV0sXCJ2YWxpZFwiXSxbWzc2ODIsNzY4Ml0sXCJtYXBwZWRcIixbNzY4M11dLFtbNzY4Myw3NjgzXSxcInZhbGlkXCJdLFtbNzY4NCw3Njg0XSxcIm1hcHBlZFwiLFs3Njg1XV0sW1s3Njg1LDc2ODVdLFwidmFsaWRcIl0sW1s3Njg2LDc2ODZdLFwibWFwcGVkXCIsWzc2ODddXSxbWzc2ODcsNzY4N10sXCJ2YWxpZFwiXSxbWzc2ODgsNzY4OF0sXCJtYXBwZWRcIixbNzY4OV1dLFtbNzY4OSw3Njg5XSxcInZhbGlkXCJdLFtbNzY5MCw3NjkwXSxcIm1hcHBlZFwiLFs3NjkxXV0sW1s3NjkxLDc2OTFdLFwidmFsaWRcIl0sW1s3NjkyLDc2OTJdLFwibWFwcGVkXCIsWzc2OTNdXSxbWzc2OTMsNzY5M10sXCJ2YWxpZFwiXSxbWzc2OTQsNzY5NF0sXCJtYXBwZWRcIixbNzY5NV1dLFtbNzY5NSw3Njk1XSxcInZhbGlkXCJdLFtbNzY5Niw3Njk2XSxcIm1hcHBlZFwiLFs3Njk3XV0sW1s3Njk3LDc2OTddLFwidmFsaWRcIl0sW1s3Njk4LDc2OThdLFwibWFwcGVkXCIsWzc2OTldXSxbWzc2OTksNzY5OV0sXCJ2YWxpZFwiXSxbWzc3MDAsNzcwMF0sXCJtYXBwZWRcIixbNzcwMV1dLFtbNzcwMSw3NzAxXSxcInZhbGlkXCJdLFtbNzcwMiw3NzAyXSxcIm1hcHBlZFwiLFs3NzAzXV0sW1s3NzAzLDc3MDNdLFwidmFsaWRcIl0sW1s3NzA0LDc3MDRdLFwibWFwcGVkXCIsWzc3MDVdXSxbWzc3MDUsNzcwNV0sXCJ2YWxpZFwiXSxbWzc3MDYsNzcwNl0sXCJtYXBwZWRcIixbNzcwN11dLFtbNzcwNyw3NzA3XSxcInZhbGlkXCJdLFtbNzcwOCw3NzA4XSxcIm1hcHBlZFwiLFs3NzA5XV0sW1s3NzA5LDc3MDldLFwidmFsaWRcIl0sW1s3NzEwLDc3MTBdLFwibWFwcGVkXCIsWzc3MTFdXSxbWzc3MTEsNzcxMV0sXCJ2YWxpZFwiXSxbWzc3MTIsNzcxMl0sXCJtYXBwZWRcIixbNzcxM11dLFtbNzcxMyw3NzEzXSxcInZhbGlkXCJdLFtbNzcxNCw3NzE0XSxcIm1hcHBlZFwiLFs3NzE1XV0sW1s3NzE1LDc3MTVdLFwidmFsaWRcIl0sW1s3NzE2LDc3MTZdLFwibWFwcGVkXCIsWzc3MTddXSxbWzc3MTcsNzcxN10sXCJ2YWxpZFwiXSxbWzc3MTgsNzcxOF0sXCJtYXBwZWRcIixbNzcxOV1dLFtbNzcxOSw3NzE5XSxcInZhbGlkXCJdLFtbNzcyMCw3NzIwXSxcIm1hcHBlZFwiLFs3NzIxXV0sW1s3NzIxLDc3MjFdLFwidmFsaWRcIl0sW1s3NzIyLDc3MjJdLFwibWFwcGVkXCIsWzc3MjNdXSxbWzc3MjMsNzcyM10sXCJ2YWxpZFwiXSxbWzc3MjQsNzcyNF0sXCJtYXBwZWRcIixbNzcyNV1dLFtbNzcyNSw3NzI1XSxcInZhbGlkXCJdLFtbNzcyNiw3NzI2XSxcIm1hcHBlZFwiLFs3NzI3XV0sW1s3NzI3LDc3MjddLFwidmFsaWRcIl0sW1s3NzI4LDc3MjhdLFwibWFwcGVkXCIsWzc3MjldXSxbWzc3MjksNzcyOV0sXCJ2YWxpZFwiXSxbWzc3MzAsNzczMF0sXCJtYXBwZWRcIixbNzczMV1dLFtbNzczMSw3NzMxXSxcInZhbGlkXCJdLFtbNzczMiw3NzMyXSxcIm1hcHBlZFwiLFs3NzMzXV0sW1s3NzMzLDc3MzNdLFwidmFsaWRcIl0sW1s3NzM0LDc3MzRdLFwibWFwcGVkXCIsWzc3MzVdXSxbWzc3MzUsNzczNV0sXCJ2YWxpZFwiXSxbWzc3MzYsNzczNl0sXCJtYXBwZWRcIixbNzczN11dLFtbNzczNyw3NzM3XSxcInZhbGlkXCJdLFtbNzczOCw3NzM4XSxcIm1hcHBlZFwiLFs3NzM5XV0sW1s3NzM5LDc3MzldLFwidmFsaWRcIl0sW1s3NzQwLDc3NDBdLFwibWFwcGVkXCIsWzc3NDFdXSxbWzc3NDEsNzc0MV0sXCJ2YWxpZFwiXSxbWzc3NDIsNzc0Ml0sXCJtYXBwZWRcIixbNzc0M11dLFtbNzc0Myw3NzQzXSxcInZhbGlkXCJdLFtbNzc0NCw3NzQ0XSxcIm1hcHBlZFwiLFs3NzQ1XV0sW1s3NzQ1LDc3NDVdLFwidmFsaWRcIl0sW1s3NzQ2LDc3NDZdLFwibWFwcGVkXCIsWzc3NDddXSxbWzc3NDcsNzc0N10sXCJ2YWxpZFwiXSxbWzc3NDgsNzc0OF0sXCJtYXBwZWRcIixbNzc0OV1dLFtbNzc0OSw3NzQ5XSxcInZhbGlkXCJdLFtbNzc1MCw3NzUwXSxcIm1hcHBlZFwiLFs3NzUxXV0sW1s3NzUxLDc3NTFdLFwidmFsaWRcIl0sW1s3NzUyLDc3NTJdLFwibWFwcGVkXCIsWzc3NTNdXSxbWzc3NTMsNzc1M10sXCJ2YWxpZFwiXSxbWzc3NTQsNzc1NF0sXCJtYXBwZWRcIixbNzc1NV1dLFtbNzc1NSw3NzU1XSxcInZhbGlkXCJdLFtbNzc1Niw3NzU2XSxcIm1hcHBlZFwiLFs3NzU3XV0sW1s3NzU3LDc3NTddLFwidmFsaWRcIl0sW1s3NzU4LDc3NThdLFwibWFwcGVkXCIsWzc3NTldXSxbWzc3NTksNzc1OV0sXCJ2YWxpZFwiXSxbWzc3NjAsNzc2MF0sXCJtYXBwZWRcIixbNzc2MV1dLFtbNzc2MSw3NzYxXSxcInZhbGlkXCJdLFtbNzc2Miw3NzYyXSxcIm1hcHBlZFwiLFs3NzYzXV0sW1s3NzYzLDc3NjNdLFwidmFsaWRcIl0sW1s3NzY0LDc3NjRdLFwibWFwcGVkXCIsWzc3NjVdXSxbWzc3NjUsNzc2NV0sXCJ2YWxpZFwiXSxbWzc3NjYsNzc2Nl0sXCJtYXBwZWRcIixbNzc2N11dLFtbNzc2Nyw3NzY3XSxcInZhbGlkXCJdLFtbNzc2OCw3NzY4XSxcIm1hcHBlZFwiLFs3NzY5XV0sW1s3NzY5LDc3NjldLFwidmFsaWRcIl0sW1s3NzcwLDc3NzBdLFwibWFwcGVkXCIsWzc3NzFdXSxbWzc3NzEsNzc3MV0sXCJ2YWxpZFwiXSxbWzc3NzIsNzc3Ml0sXCJtYXBwZWRcIixbNzc3M11dLFtbNzc3Myw3NzczXSxcInZhbGlkXCJdLFtbNzc3NCw3Nzc0XSxcIm1hcHBlZFwiLFs3Nzc1XV0sW1s3Nzc1LDc3NzVdLFwidmFsaWRcIl0sW1s3Nzc2LDc3NzZdLFwibWFwcGVkXCIsWzc3NzddXSxbWzc3NzcsNzc3N10sXCJ2YWxpZFwiXSxbWzc3NzgsNzc3OF0sXCJtYXBwZWRcIixbNzc3OV1dLFtbNzc3OSw3Nzc5XSxcInZhbGlkXCJdLFtbNzc4MCw3NzgwXSxcIm1hcHBlZFwiLFs3NzgxXV0sW1s3NzgxLDc3ODFdLFwidmFsaWRcIl0sW1s3NzgyLDc3ODJdLFwibWFwcGVkXCIsWzc3ODNdXSxbWzc3ODMsNzc4M10sXCJ2YWxpZFwiXSxbWzc3ODQsNzc4NF0sXCJtYXBwZWRcIixbNzc4NV1dLFtbNzc4NSw3Nzg1XSxcInZhbGlkXCJdLFtbNzc4Niw3Nzg2XSxcIm1hcHBlZFwiLFs3Nzg3XV0sW1s3Nzg3LDc3ODddLFwidmFsaWRcIl0sW1s3Nzg4LDc3ODhdLFwibWFwcGVkXCIsWzc3ODldXSxbWzc3ODksNzc4OV0sXCJ2YWxpZFwiXSxbWzc3OTAsNzc5MF0sXCJtYXBwZWRcIixbNzc5MV1dLFtbNzc5MSw3NzkxXSxcInZhbGlkXCJdLFtbNzc5Miw3NzkyXSxcIm1hcHBlZFwiLFs3NzkzXV0sW1s3NzkzLDc3OTNdLFwidmFsaWRcIl0sW1s3Nzk0LDc3OTRdLFwibWFwcGVkXCIsWzc3OTVdXSxbWzc3OTUsNzc5NV0sXCJ2YWxpZFwiXSxbWzc3OTYsNzc5Nl0sXCJtYXBwZWRcIixbNzc5N11dLFtbNzc5Nyw3Nzk3XSxcInZhbGlkXCJdLFtbNzc5OCw3Nzk4XSxcIm1hcHBlZFwiLFs3Nzk5XV0sW1s3Nzk5LDc3OTldLFwidmFsaWRcIl0sW1s3ODAwLDc4MDBdLFwibWFwcGVkXCIsWzc4MDFdXSxbWzc4MDEsNzgwMV0sXCJ2YWxpZFwiXSxbWzc4MDIsNzgwMl0sXCJtYXBwZWRcIixbNzgwM11dLFtbNzgwMyw3ODAzXSxcInZhbGlkXCJdLFtbNzgwNCw3ODA0XSxcIm1hcHBlZFwiLFs3ODA1XV0sW1s3ODA1LDc4MDVdLFwidmFsaWRcIl0sW1s3ODA2LDc4MDZdLFwibWFwcGVkXCIsWzc4MDddXSxbWzc4MDcsNzgwN10sXCJ2YWxpZFwiXSxbWzc4MDgsNzgwOF0sXCJtYXBwZWRcIixbNzgwOV1dLFtbNzgwOSw3ODA5XSxcInZhbGlkXCJdLFtbNzgxMCw3ODEwXSxcIm1hcHBlZFwiLFs3ODExXV0sW1s3ODExLDc4MTFdLFwidmFsaWRcIl0sW1s3ODEyLDc4MTJdLFwibWFwcGVkXCIsWzc4MTNdXSxbWzc4MTMsNzgxM10sXCJ2YWxpZFwiXSxbWzc4MTQsNzgxNF0sXCJtYXBwZWRcIixbNzgxNV1dLFtbNzgxNSw3ODE1XSxcInZhbGlkXCJdLFtbNzgxNiw3ODE2XSxcIm1hcHBlZFwiLFs3ODE3XV0sW1s3ODE3LDc4MTddLFwidmFsaWRcIl0sW1s3ODE4LDc4MThdLFwibWFwcGVkXCIsWzc4MTldXSxbWzc4MTksNzgxOV0sXCJ2YWxpZFwiXSxbWzc4MjAsNzgyMF0sXCJtYXBwZWRcIixbNzgyMV1dLFtbNzgyMSw3ODIxXSxcInZhbGlkXCJdLFtbNzgyMiw3ODIyXSxcIm1hcHBlZFwiLFs3ODIzXV0sW1s3ODIzLDc4MjNdLFwidmFsaWRcIl0sW1s3ODI0LDc4MjRdLFwibWFwcGVkXCIsWzc4MjVdXSxbWzc4MjUsNzgyNV0sXCJ2YWxpZFwiXSxbWzc4MjYsNzgyNl0sXCJtYXBwZWRcIixbNzgyN11dLFtbNzgyNyw3ODI3XSxcInZhbGlkXCJdLFtbNzgyOCw3ODI4XSxcIm1hcHBlZFwiLFs3ODI5XV0sW1s3ODI5LDc4MzNdLFwidmFsaWRcIl0sW1s3ODM0LDc4MzRdLFwibWFwcGVkXCIsWzk3LDcwMl1dLFtbNzgzNSw3ODM1XSxcIm1hcHBlZFwiLFs3Nzc3XV0sW1s3ODM2LDc4MzddLFwidmFsaWRcIl0sW1s3ODM4LDc4MzhdLFwibWFwcGVkXCIsWzExNSwxMTVdXSxbWzc4MzksNzgzOV0sXCJ2YWxpZFwiXSxbWzc4NDAsNzg0MF0sXCJtYXBwZWRcIixbNzg0MV1dLFtbNzg0MSw3ODQxXSxcInZhbGlkXCJdLFtbNzg0Miw3ODQyXSxcIm1hcHBlZFwiLFs3ODQzXV0sW1s3ODQzLDc4NDNdLFwidmFsaWRcIl0sW1s3ODQ0LDc4NDRdLFwibWFwcGVkXCIsWzc4NDVdXSxbWzc4NDUsNzg0NV0sXCJ2YWxpZFwiXSxbWzc4NDYsNzg0Nl0sXCJtYXBwZWRcIixbNzg0N11dLFtbNzg0Nyw3ODQ3XSxcInZhbGlkXCJdLFtbNzg0OCw3ODQ4XSxcIm1hcHBlZFwiLFs3ODQ5XV0sW1s3ODQ5LDc4NDldLFwidmFsaWRcIl0sW1s3ODUwLDc4NTBdLFwibWFwcGVkXCIsWzc4NTFdXSxbWzc4NTEsNzg1MV0sXCJ2YWxpZFwiXSxbWzc4NTIsNzg1Ml0sXCJtYXBwZWRcIixbNzg1M11dLFtbNzg1Myw3ODUzXSxcInZhbGlkXCJdLFtbNzg1NCw3ODU0XSxcIm1hcHBlZFwiLFs3ODU1XV0sW1s3ODU1LDc4NTVdLFwidmFsaWRcIl0sW1s3ODU2LDc4NTZdLFwibWFwcGVkXCIsWzc4NTddXSxbWzc4NTcsNzg1N10sXCJ2YWxpZFwiXSxbWzc4NTgsNzg1OF0sXCJtYXBwZWRcIixbNzg1OV1dLFtbNzg1OSw3ODU5XSxcInZhbGlkXCJdLFtbNzg2MCw3ODYwXSxcIm1hcHBlZFwiLFs3ODYxXV0sW1s3ODYxLDc4NjFdLFwidmFsaWRcIl0sW1s3ODYyLDc4NjJdLFwibWFwcGVkXCIsWzc4NjNdXSxbWzc4NjMsNzg2M10sXCJ2YWxpZFwiXSxbWzc4NjQsNzg2NF0sXCJtYXBwZWRcIixbNzg2NV1dLFtbNzg2NSw3ODY1XSxcInZhbGlkXCJdLFtbNzg2Niw3ODY2XSxcIm1hcHBlZFwiLFs3ODY3XV0sW1s3ODY3LDc4NjddLFwidmFsaWRcIl0sW1s3ODY4LDc4NjhdLFwibWFwcGVkXCIsWzc4NjldXSxbWzc4NjksNzg2OV0sXCJ2YWxpZFwiXSxbWzc4NzAsNzg3MF0sXCJtYXBwZWRcIixbNzg3MV1dLFtbNzg3MSw3ODcxXSxcInZhbGlkXCJdLFtbNzg3Miw3ODcyXSxcIm1hcHBlZFwiLFs3ODczXV0sW1s3ODczLDc4NzNdLFwidmFsaWRcIl0sW1s3ODc0LDc4NzRdLFwibWFwcGVkXCIsWzc4NzVdXSxbWzc4NzUsNzg3NV0sXCJ2YWxpZFwiXSxbWzc4NzYsNzg3Nl0sXCJtYXBwZWRcIixbNzg3N11dLFtbNzg3Nyw3ODc3XSxcInZhbGlkXCJdLFtbNzg3OCw3ODc4XSxcIm1hcHBlZFwiLFs3ODc5XV0sW1s3ODc5LDc4NzldLFwidmFsaWRcIl0sW1s3ODgwLDc4ODBdLFwibWFwcGVkXCIsWzc4ODFdXSxbWzc4ODEsNzg4MV0sXCJ2YWxpZFwiXSxbWzc4ODIsNzg4Ml0sXCJtYXBwZWRcIixbNzg4M11dLFtbNzg4Myw3ODgzXSxcInZhbGlkXCJdLFtbNzg4NCw3ODg0XSxcIm1hcHBlZFwiLFs3ODg1XV0sW1s3ODg1LDc4ODVdLFwidmFsaWRcIl0sW1s3ODg2LDc4ODZdLFwibWFwcGVkXCIsWzc4ODddXSxbWzc4ODcsNzg4N10sXCJ2YWxpZFwiXSxbWzc4ODgsNzg4OF0sXCJtYXBwZWRcIixbNzg4OV1dLFtbNzg4OSw3ODg5XSxcInZhbGlkXCJdLFtbNzg5MCw3ODkwXSxcIm1hcHBlZFwiLFs3ODkxXV0sW1s3ODkxLDc4OTFdLFwidmFsaWRcIl0sW1s3ODkyLDc4OTJdLFwibWFwcGVkXCIsWzc4OTNdXSxbWzc4OTMsNzg5M10sXCJ2YWxpZFwiXSxbWzc4OTQsNzg5NF0sXCJtYXBwZWRcIixbNzg5NV1dLFtbNzg5NSw3ODk1XSxcInZhbGlkXCJdLFtbNzg5Niw3ODk2XSxcIm1hcHBlZFwiLFs3ODk3XV0sW1s3ODk3LDc4OTddLFwidmFsaWRcIl0sW1s3ODk4LDc4OThdLFwibWFwcGVkXCIsWzc4OTldXSxbWzc4OTksNzg5OV0sXCJ2YWxpZFwiXSxbWzc5MDAsNzkwMF0sXCJtYXBwZWRcIixbNzkwMV1dLFtbNzkwMSw3OTAxXSxcInZhbGlkXCJdLFtbNzkwMiw3OTAyXSxcIm1hcHBlZFwiLFs3OTAzXV0sW1s3OTAzLDc5MDNdLFwidmFsaWRcIl0sW1s3OTA0LDc5MDRdLFwibWFwcGVkXCIsWzc5MDVdXSxbWzc5MDUsNzkwNV0sXCJ2YWxpZFwiXSxbWzc5MDYsNzkwNl0sXCJtYXBwZWRcIixbNzkwN11dLFtbNzkwNyw3OTA3XSxcInZhbGlkXCJdLFtbNzkwOCw3OTA4XSxcIm1hcHBlZFwiLFs3OTA5XV0sW1s3OTA5LDc5MDldLFwidmFsaWRcIl0sW1s3OTEwLDc5MTBdLFwibWFwcGVkXCIsWzc5MTFdXSxbWzc5MTEsNzkxMV0sXCJ2YWxpZFwiXSxbWzc5MTIsNzkxMl0sXCJtYXBwZWRcIixbNzkxM11dLFtbNzkxMyw3OTEzXSxcInZhbGlkXCJdLFtbNzkxNCw3OTE0XSxcIm1hcHBlZFwiLFs3OTE1XV0sW1s3OTE1LDc5MTVdLFwidmFsaWRcIl0sW1s3OTE2LDc5MTZdLFwibWFwcGVkXCIsWzc5MTddXSxbWzc5MTcsNzkxN10sXCJ2YWxpZFwiXSxbWzc5MTgsNzkxOF0sXCJtYXBwZWRcIixbNzkxOV1dLFtbNzkxOSw3OTE5XSxcInZhbGlkXCJdLFtbNzkyMCw3OTIwXSxcIm1hcHBlZFwiLFs3OTIxXV0sW1s3OTIxLDc5MjFdLFwidmFsaWRcIl0sW1s3OTIyLDc5MjJdLFwibWFwcGVkXCIsWzc5MjNdXSxbWzc5MjMsNzkyM10sXCJ2YWxpZFwiXSxbWzc5MjQsNzkyNF0sXCJtYXBwZWRcIixbNzkyNV1dLFtbNzkyNSw3OTI1XSxcInZhbGlkXCJdLFtbNzkyNiw3OTI2XSxcIm1hcHBlZFwiLFs3OTI3XV0sW1s3OTI3LDc5MjddLFwidmFsaWRcIl0sW1s3OTI4LDc5MjhdLFwibWFwcGVkXCIsWzc5MjldXSxbWzc5MjksNzkyOV0sXCJ2YWxpZFwiXSxbWzc5MzAsNzkzMF0sXCJtYXBwZWRcIixbNzkzMV1dLFtbNzkzMSw3OTMxXSxcInZhbGlkXCJdLFtbNzkzMiw3OTMyXSxcIm1hcHBlZFwiLFs3OTMzXV0sW1s3OTMzLDc5MzNdLFwidmFsaWRcIl0sW1s3OTM0LDc5MzRdLFwibWFwcGVkXCIsWzc5MzVdXSxbWzc5MzUsNzkzNV0sXCJ2YWxpZFwiXSxbWzc5MzYsNzk0M10sXCJ2YWxpZFwiXSxbWzc5NDQsNzk0NF0sXCJtYXBwZWRcIixbNzkzNl1dLFtbNzk0NSw3OTQ1XSxcIm1hcHBlZFwiLFs3OTM3XV0sW1s3OTQ2LDc5NDZdLFwibWFwcGVkXCIsWzc5MzhdXSxbWzc5NDcsNzk0N10sXCJtYXBwZWRcIixbNzkzOV1dLFtbNzk0OCw3OTQ4XSxcIm1hcHBlZFwiLFs3OTQwXV0sW1s3OTQ5LDc5NDldLFwibWFwcGVkXCIsWzc5NDFdXSxbWzc5NTAsNzk1MF0sXCJtYXBwZWRcIixbNzk0Ml1dLFtbNzk1MSw3OTUxXSxcIm1hcHBlZFwiLFs3OTQzXV0sW1s3OTUyLDc5NTddLFwidmFsaWRcIl0sW1s3OTU4LDc5NTldLFwiZGlzYWxsb3dlZFwiXSxbWzc5NjAsNzk2MF0sXCJtYXBwZWRcIixbNzk1Ml1dLFtbNzk2MSw3OTYxXSxcIm1hcHBlZFwiLFs3OTUzXV0sW1s3OTYyLDc5NjJdLFwibWFwcGVkXCIsWzc5NTRdXSxbWzc5NjMsNzk2M10sXCJtYXBwZWRcIixbNzk1NV1dLFtbNzk2NCw3OTY0XSxcIm1hcHBlZFwiLFs3OTU2XV0sW1s3OTY1LDc5NjVdLFwibWFwcGVkXCIsWzc5NTddXSxbWzc5NjYsNzk2N10sXCJkaXNhbGxvd2VkXCJdLFtbNzk2OCw3OTc1XSxcInZhbGlkXCJdLFtbNzk3Niw3OTc2XSxcIm1hcHBlZFwiLFs3OTY4XV0sW1s3OTc3LDc5NzddLFwibWFwcGVkXCIsWzc5NjldXSxbWzc5NzgsNzk3OF0sXCJtYXBwZWRcIixbNzk3MF1dLFtbNzk3OSw3OTc5XSxcIm1hcHBlZFwiLFs3OTcxXV0sW1s3OTgwLDc5ODBdLFwibWFwcGVkXCIsWzc5NzJdXSxbWzc5ODEsNzk4MV0sXCJtYXBwZWRcIixbNzk3M11dLFtbNzk4Miw3OTgyXSxcIm1hcHBlZFwiLFs3OTc0XV0sW1s3OTgzLDc5ODNdLFwibWFwcGVkXCIsWzc5NzVdXSxbWzc5ODQsNzk5MV0sXCJ2YWxpZFwiXSxbWzc5OTIsNzk5Ml0sXCJtYXBwZWRcIixbNzk4NF1dLFtbNzk5Myw3OTkzXSxcIm1hcHBlZFwiLFs3OTg1XV0sW1s3OTk0LDc5OTRdLFwibWFwcGVkXCIsWzc5ODZdXSxbWzc5OTUsNzk5NV0sXCJtYXBwZWRcIixbNzk4N11dLFtbNzk5Niw3OTk2XSxcIm1hcHBlZFwiLFs3OTg4XV0sW1s3OTk3LDc5OTddLFwibWFwcGVkXCIsWzc5ODldXSxbWzc5OTgsNzk5OF0sXCJtYXBwZWRcIixbNzk5MF1dLFtbNzk5OSw3OTk5XSxcIm1hcHBlZFwiLFs3OTkxXV0sW1s4MDAwLDgwMDVdLFwidmFsaWRcIl0sW1s4MDA2LDgwMDddLFwiZGlzYWxsb3dlZFwiXSxbWzgwMDgsODAwOF0sXCJtYXBwZWRcIixbODAwMF1dLFtbODAwOSw4MDA5XSxcIm1hcHBlZFwiLFs4MDAxXV0sW1s4MDEwLDgwMTBdLFwibWFwcGVkXCIsWzgwMDJdXSxbWzgwMTEsODAxMV0sXCJtYXBwZWRcIixbODAwM11dLFtbODAxMiw4MDEyXSxcIm1hcHBlZFwiLFs4MDA0XV0sW1s4MDEzLDgwMTNdLFwibWFwcGVkXCIsWzgwMDVdXSxbWzgwMTQsODAxNV0sXCJkaXNhbGxvd2VkXCJdLFtbODAxNiw4MDIzXSxcInZhbGlkXCJdLFtbODAyNCw4MDI0XSxcImRpc2FsbG93ZWRcIl0sW1s4MDI1LDgwMjVdLFwibWFwcGVkXCIsWzgwMTddXSxbWzgwMjYsODAyNl0sXCJkaXNhbGxvd2VkXCJdLFtbODAyNyw4MDI3XSxcIm1hcHBlZFwiLFs4MDE5XV0sW1s4MDI4LDgwMjhdLFwiZGlzYWxsb3dlZFwiXSxbWzgwMjksODAyOV0sXCJtYXBwZWRcIixbODAyMV1dLFtbODAzMCw4MDMwXSxcImRpc2FsbG93ZWRcIl0sW1s4MDMxLDgwMzFdLFwibWFwcGVkXCIsWzgwMjNdXSxbWzgwMzIsODAzOV0sXCJ2YWxpZFwiXSxbWzgwNDAsODA0MF0sXCJtYXBwZWRcIixbODAzMl1dLFtbODA0MSw4MDQxXSxcIm1hcHBlZFwiLFs4MDMzXV0sW1s4MDQyLDgwNDJdLFwibWFwcGVkXCIsWzgwMzRdXSxbWzgwNDMsODA0M10sXCJtYXBwZWRcIixbODAzNV1dLFtbODA0NCw4MDQ0XSxcIm1hcHBlZFwiLFs4MDM2XV0sW1s4MDQ1LDgwNDVdLFwibWFwcGVkXCIsWzgwMzddXSxbWzgwNDYsODA0Nl0sXCJtYXBwZWRcIixbODAzOF1dLFtbODA0Nyw4MDQ3XSxcIm1hcHBlZFwiLFs4MDM5XV0sW1s4MDQ4LDgwNDhdLFwidmFsaWRcIl0sW1s4MDQ5LDgwNDldLFwibWFwcGVkXCIsWzk0MF1dLFtbODA1MCw4MDUwXSxcInZhbGlkXCJdLFtbODA1MSw4MDUxXSxcIm1hcHBlZFwiLFs5NDFdXSxbWzgwNTIsODA1Ml0sXCJ2YWxpZFwiXSxbWzgwNTMsODA1M10sXCJtYXBwZWRcIixbOTQyXV0sW1s4MDU0LDgwNTRdLFwidmFsaWRcIl0sW1s4MDU1LDgwNTVdLFwibWFwcGVkXCIsWzk0M11dLFtbODA1Niw4MDU2XSxcInZhbGlkXCJdLFtbODA1Nyw4MDU3XSxcIm1hcHBlZFwiLFs5NzJdXSxbWzgwNTgsODA1OF0sXCJ2YWxpZFwiXSxbWzgwNTksODA1OV0sXCJtYXBwZWRcIixbOTczXV0sW1s4MDYwLDgwNjBdLFwidmFsaWRcIl0sW1s4MDYxLDgwNjFdLFwibWFwcGVkXCIsWzk3NF1dLFtbODA2Miw4MDYzXSxcImRpc2FsbG93ZWRcIl0sW1s4MDY0LDgwNjRdLFwibWFwcGVkXCIsWzc5MzYsOTUzXV0sW1s4MDY1LDgwNjVdLFwibWFwcGVkXCIsWzc5MzcsOTUzXV0sW1s4MDY2LDgwNjZdLFwibWFwcGVkXCIsWzc5MzgsOTUzXV0sW1s4MDY3LDgwNjddLFwibWFwcGVkXCIsWzc5MzksOTUzXV0sW1s4MDY4LDgwNjhdLFwibWFwcGVkXCIsWzc5NDAsOTUzXV0sW1s4MDY5LDgwNjldLFwibWFwcGVkXCIsWzc5NDEsOTUzXV0sW1s4MDcwLDgwNzBdLFwibWFwcGVkXCIsWzc5NDIsOTUzXV0sW1s4MDcxLDgwNzFdLFwibWFwcGVkXCIsWzc5NDMsOTUzXV0sW1s4MDcyLDgwNzJdLFwibWFwcGVkXCIsWzc5MzYsOTUzXV0sW1s4MDczLDgwNzNdLFwibWFwcGVkXCIsWzc5MzcsOTUzXV0sW1s4MDc0LDgwNzRdLFwibWFwcGVkXCIsWzc5MzgsOTUzXV0sW1s4MDc1LDgwNzVdLFwibWFwcGVkXCIsWzc5MzksOTUzXV0sW1s4MDc2LDgwNzZdLFwibWFwcGVkXCIsWzc5NDAsOTUzXV0sW1s4MDc3LDgwNzddLFwibWFwcGVkXCIsWzc5NDEsOTUzXV0sW1s4MDc4LDgwNzhdLFwibWFwcGVkXCIsWzc5NDIsOTUzXV0sW1s4MDc5LDgwNzldLFwibWFwcGVkXCIsWzc5NDMsOTUzXV0sW1s4MDgwLDgwODBdLFwibWFwcGVkXCIsWzc5NjgsOTUzXV0sW1s4MDgxLDgwODFdLFwibWFwcGVkXCIsWzc5NjksOTUzXV0sW1s4MDgyLDgwODJdLFwibWFwcGVkXCIsWzc5NzAsOTUzXV0sW1s4MDgzLDgwODNdLFwibWFwcGVkXCIsWzc5NzEsOTUzXV0sW1s4MDg0LDgwODRdLFwibWFwcGVkXCIsWzc5NzIsOTUzXV0sW1s4MDg1LDgwODVdLFwibWFwcGVkXCIsWzc5NzMsOTUzXV0sW1s4MDg2LDgwODZdLFwibWFwcGVkXCIsWzc5NzQsOTUzXV0sW1s4MDg3LDgwODddLFwibWFwcGVkXCIsWzc5NzUsOTUzXV0sW1s4MDg4LDgwODhdLFwibWFwcGVkXCIsWzc5NjgsOTUzXV0sW1s4MDg5LDgwODldLFwibWFwcGVkXCIsWzc5NjksOTUzXV0sW1s4MDkwLDgwOTBdLFwibWFwcGVkXCIsWzc5NzAsOTUzXV0sW1s4MDkxLDgwOTFdLFwibWFwcGVkXCIsWzc5NzEsOTUzXV0sW1s4MDkyLDgwOTJdLFwibWFwcGVkXCIsWzc5NzIsOTUzXV0sW1s4MDkzLDgwOTNdLFwibWFwcGVkXCIsWzc5NzMsOTUzXV0sW1s4MDk0LDgwOTRdLFwibWFwcGVkXCIsWzc5NzQsOTUzXV0sW1s4MDk1LDgwOTVdLFwibWFwcGVkXCIsWzc5NzUsOTUzXV0sW1s4MDk2LDgwOTZdLFwibWFwcGVkXCIsWzgwMzIsOTUzXV0sW1s4MDk3LDgwOTddLFwibWFwcGVkXCIsWzgwMzMsOTUzXV0sW1s4MDk4LDgwOThdLFwibWFwcGVkXCIsWzgwMzQsOTUzXV0sW1s4MDk5LDgwOTldLFwibWFwcGVkXCIsWzgwMzUsOTUzXV0sW1s4MTAwLDgxMDBdLFwibWFwcGVkXCIsWzgwMzYsOTUzXV0sW1s4MTAxLDgxMDFdLFwibWFwcGVkXCIsWzgwMzcsOTUzXV0sW1s4MTAyLDgxMDJdLFwibWFwcGVkXCIsWzgwMzgsOTUzXV0sW1s4MTAzLDgxMDNdLFwibWFwcGVkXCIsWzgwMzksOTUzXV0sW1s4MTA0LDgxMDRdLFwibWFwcGVkXCIsWzgwMzIsOTUzXV0sW1s4MTA1LDgxMDVdLFwibWFwcGVkXCIsWzgwMzMsOTUzXV0sW1s4MTA2LDgxMDZdLFwibWFwcGVkXCIsWzgwMzQsOTUzXV0sW1s4MTA3LDgxMDddLFwibWFwcGVkXCIsWzgwMzUsOTUzXV0sW1s4MTA4LDgxMDhdLFwibWFwcGVkXCIsWzgwMzYsOTUzXV0sW1s4MTA5LDgxMDldLFwibWFwcGVkXCIsWzgwMzcsOTUzXV0sW1s4MTEwLDgxMTBdLFwibWFwcGVkXCIsWzgwMzgsOTUzXV0sW1s4MTExLDgxMTFdLFwibWFwcGVkXCIsWzgwMzksOTUzXV0sW1s4MTEyLDgxMTNdLFwidmFsaWRcIl0sW1s4MTE0LDgxMTRdLFwibWFwcGVkXCIsWzgwNDgsOTUzXV0sW1s4MTE1LDgxMTVdLFwibWFwcGVkXCIsWzk0NSw5NTNdXSxbWzgxMTYsODExNl0sXCJtYXBwZWRcIixbOTQwLDk1M11dLFtbODExNyw4MTE3XSxcImRpc2FsbG93ZWRcIl0sW1s4MTE4LDgxMThdLFwidmFsaWRcIl0sW1s4MTE5LDgxMTldLFwibWFwcGVkXCIsWzgxMTgsOTUzXV0sW1s4MTIwLDgxMjBdLFwibWFwcGVkXCIsWzgxMTJdXSxbWzgxMjEsODEyMV0sXCJtYXBwZWRcIixbODExM11dLFtbODEyMiw4MTIyXSxcIm1hcHBlZFwiLFs4MDQ4XV0sW1s4MTIzLDgxMjNdLFwibWFwcGVkXCIsWzk0MF1dLFtbODEyNCw4MTI0XSxcIm1hcHBlZFwiLFs5NDUsOTUzXV0sW1s4MTI1LDgxMjVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3ODddXSxbWzgxMjYsODEyNl0sXCJtYXBwZWRcIixbOTUzXV0sW1s4MTI3LDgxMjddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3ODddXSxbWzgxMjgsODEyOF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDgzNF1dLFtbODEyOSw4MTI5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzc2LDgzNF1dLFtbODEzMCw4MTMwXSxcIm1hcHBlZFwiLFs4MDUyLDk1M11dLFtbODEzMSw4MTMxXSxcIm1hcHBlZFwiLFs5NTEsOTUzXV0sW1s4MTMyLDgxMzJdLFwibWFwcGVkXCIsWzk0Miw5NTNdXSxbWzgxMzMsODEzM10sXCJkaXNhbGxvd2VkXCJdLFtbODEzNCw4MTM0XSxcInZhbGlkXCJdLFtbODEzNSw4MTM1XSxcIm1hcHBlZFwiLFs4MTM0LDk1M11dLFtbODEzNiw4MTM2XSxcIm1hcHBlZFwiLFs4MDUwXV0sW1s4MTM3LDgxMzddLFwibWFwcGVkXCIsWzk0MV1dLFtbODEzOCw4MTM4XSxcIm1hcHBlZFwiLFs4MDUyXV0sW1s4MTM5LDgxMzldLFwibWFwcGVkXCIsWzk0Ml1dLFtbODE0MCw4MTQwXSxcIm1hcHBlZFwiLFs5NTEsOTUzXV0sW1s4MTQxLDgxNDFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3ODcsNzY4XV0sW1s4MTQyLDgxNDJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3ODcsNzY5XV0sW1s4MTQzLDgxNDNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3ODcsODM0XV0sW1s4MTQ0LDgxNDZdLFwidmFsaWRcIl0sW1s4MTQ3LDgxNDddLFwibWFwcGVkXCIsWzkxMl1dLFtbODE0OCw4MTQ5XSxcImRpc2FsbG93ZWRcIl0sW1s4MTUwLDgxNTFdLFwidmFsaWRcIl0sW1s4MTUyLDgxNTJdLFwibWFwcGVkXCIsWzgxNDRdXSxbWzgxNTMsODE1M10sXCJtYXBwZWRcIixbODE0NV1dLFtbODE1NCw4MTU0XSxcIm1hcHBlZFwiLFs4MDU0XV0sW1s4MTU1LDgxNTVdLFwibWFwcGVkXCIsWzk0M11dLFtbODE1Niw4MTU2XSxcImRpc2FsbG93ZWRcIl0sW1s4MTU3LDgxNTddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3ODgsNzY4XV0sW1s4MTU4LDgxNThdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3ODgsNzY5XV0sW1s4MTU5LDgxNTldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3ODgsODM0XV0sW1s4MTYwLDgxNjJdLFwidmFsaWRcIl0sW1s4MTYzLDgxNjNdLFwibWFwcGVkXCIsWzk0NF1dLFtbODE2NCw4MTY3XSxcInZhbGlkXCJdLFtbODE2OCw4MTY4XSxcIm1hcHBlZFwiLFs4MTYwXV0sW1s4MTY5LDgxNjldLFwibWFwcGVkXCIsWzgxNjFdXSxbWzgxNzAsODE3MF0sXCJtYXBwZWRcIixbODA1OF1dLFtbODE3MSw4MTcxXSxcIm1hcHBlZFwiLFs5NzNdXSxbWzgxNzIsODE3Ml0sXCJtYXBwZWRcIixbODE2NV1dLFtbODE3Myw4MTczXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzc2LDc2OF1dLFtbODE3NCw4MTc0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzc2LDc2OV1dLFtbODE3NSw4MTc1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTZdXSxbWzgxNzYsODE3N10sXCJkaXNhbGxvd2VkXCJdLFtbODE3OCw4MTc4XSxcIm1hcHBlZFwiLFs4MDYwLDk1M11dLFtbODE3OSw4MTc5XSxcIm1hcHBlZFwiLFs5NjksOTUzXV0sW1s4MTgwLDgxODBdLFwibWFwcGVkXCIsWzk3NCw5NTNdXSxbWzgxODEsODE4MV0sXCJkaXNhbGxvd2VkXCJdLFtbODE4Miw4MTgyXSxcInZhbGlkXCJdLFtbODE4Myw4MTgzXSxcIm1hcHBlZFwiLFs4MTgyLDk1M11dLFtbODE4NCw4MTg0XSxcIm1hcHBlZFwiLFs4MDU2XV0sW1s4MTg1LDgxODVdLFwibWFwcGVkXCIsWzk3Ml1dLFtbODE4Niw4MTg2XSxcIm1hcHBlZFwiLFs4MDYwXV0sW1s4MTg3LDgxODddLFwibWFwcGVkXCIsWzk3NF1dLFtbODE4OCw4MTg4XSxcIm1hcHBlZFwiLFs5NjksOTUzXV0sW1s4MTg5LDgxODldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw3NjldXSxbWzgxOTAsODE5MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc4OF1dLFtbODE5MSw4MTkxXSxcImRpc2FsbG93ZWRcIl0sW1s4MTkyLDgyMDJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMl1dLFtbODIwMyw4MjAzXSxcImlnbm9yZWRcIl0sW1s4MjA0LDgyMDVdLFwiZGV2aWF0aW9uXCIsW11dLFtbODIwNiw4MjA3XSxcImRpc2FsbG93ZWRcIl0sW1s4MjA4LDgyMDhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyMDksODIwOV0sXCJtYXBwZWRcIixbODIwOF1dLFtbODIxMCw4MjE0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MjE1LDgyMTVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiw4MTldXSxbWzgyMTYsODIyN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODIyOCw4MjMwXSxcImRpc2FsbG93ZWRcIl0sW1s4MjMxLDgyMzFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyMzIsODIzOF0sXCJkaXNhbGxvd2VkXCJdLFtbODIzOSw4MjM5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzJdXSxbWzgyNDAsODI0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODI0Myw4MjQzXSxcIm1hcHBlZFwiLFs4MjQyLDgyNDJdXSxbWzgyNDQsODI0NF0sXCJtYXBwZWRcIixbODI0Miw4MjQyLDgyNDJdXSxbWzgyNDUsODI0NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODI0Niw4MjQ2XSxcIm1hcHBlZFwiLFs4MjQ1LDgyNDVdXSxbWzgyNDcsODI0N10sXCJtYXBwZWRcIixbODI0NSw4MjQ1LDgyNDVdXSxbWzgyNDgsODI1MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODI1Miw4MjUyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzMsMzNdXSxbWzgyNTMsODI1M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODI1NCw4MjU0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzczXV0sW1s4MjU1LDgyNjJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNjMsODI2M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzYzLDYzXV0sW1s4MjY0LDgyNjRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2MywzM11dLFtbODI2NSw4MjY1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzMsNjNdXSxbWzgyNjYsODI2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODI3MCw4Mjc0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4Mjc1LDgyNzZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyNzcsODI3OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODI3OSw4Mjc5XSxcIm1hcHBlZFwiLFs4MjQyLDgyNDIsODI0Miw4MjQyXV0sW1s4MjgwLDgyODZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgyODcsODI4N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyXV0sW1s4Mjg4LDgyODhdLFwiaWdub3JlZFwiXSxbWzgyODksODI5MV0sXCJkaXNhbGxvd2VkXCJdLFtbODI5Miw4MjkyXSxcImlnbm9yZWRcIl0sW1s4MjkzLDgyOTNdLFwiZGlzYWxsb3dlZFwiXSxbWzgyOTQsODI5N10sXCJkaXNhbGxvd2VkXCJdLFtbODI5OCw4MzAzXSxcImRpc2FsbG93ZWRcIl0sW1s4MzA0LDgzMDRdLFwibWFwcGVkXCIsWzQ4XV0sW1s4MzA1LDgzMDVdLFwibWFwcGVkXCIsWzEwNV1dLFtbODMwNiw4MzA3XSxcImRpc2FsbG93ZWRcIl0sW1s4MzA4LDgzMDhdLFwibWFwcGVkXCIsWzUyXV0sW1s4MzA5LDgzMDldLFwibWFwcGVkXCIsWzUzXV0sW1s4MzEwLDgzMTBdLFwibWFwcGVkXCIsWzU0XV0sW1s4MzExLDgzMTFdLFwibWFwcGVkXCIsWzU1XV0sW1s4MzEyLDgzMTJdLFwibWFwcGVkXCIsWzU2XV0sW1s4MzEzLDgzMTNdLFwibWFwcGVkXCIsWzU3XV0sW1s4MzE0LDgzMTRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0M11dLFtbODMxNSw4MzE1XSxcIm1hcHBlZFwiLFs4NzIyXV0sW1s4MzE2LDgzMTZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2MV1dLFtbODMxNyw4MzE3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDBdXSxbWzgzMTgsODMxOF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQxXV0sW1s4MzE5LDgzMTldLFwibWFwcGVkXCIsWzExMF1dLFtbODMyMCw4MzIwXSxcIm1hcHBlZFwiLFs0OF1dLFtbODMyMSw4MzIxXSxcIm1hcHBlZFwiLFs0OV1dLFtbODMyMiw4MzIyXSxcIm1hcHBlZFwiLFs1MF1dLFtbODMyMyw4MzIzXSxcIm1hcHBlZFwiLFs1MV1dLFtbODMyNCw4MzI0XSxcIm1hcHBlZFwiLFs1Ml1dLFtbODMyNSw4MzI1XSxcIm1hcHBlZFwiLFs1M11dLFtbODMyNiw4MzI2XSxcIm1hcHBlZFwiLFs1NF1dLFtbODMyNyw4MzI3XSxcIm1hcHBlZFwiLFs1NV1dLFtbODMyOCw4MzI4XSxcIm1hcHBlZFwiLFs1Nl1dLFtbODMyOSw4MzI5XSxcIm1hcHBlZFwiLFs1N11dLFtbODMzMCw4MzMwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDNdXSxbWzgzMzEsODMzMV0sXCJtYXBwZWRcIixbODcyMl1dLFtbODMzMiw4MzMyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjFdXSxbWzgzMzMsODMzM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwXV0sW1s4MzM0LDgzMzRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MV1dLFtbODMzNSw4MzM1XSxcImRpc2FsbG93ZWRcIl0sW1s4MzM2LDgzMzZdLFwibWFwcGVkXCIsWzk3XV0sW1s4MzM3LDgzMzddLFwibWFwcGVkXCIsWzEwMV1dLFtbODMzOCw4MzM4XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzgzMzksODMzOV0sXCJtYXBwZWRcIixbMTIwXV0sW1s4MzQwLDgzNDBdLFwibWFwcGVkXCIsWzYwMV1dLFtbODM0MSw4MzQxXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzgzNDIsODM0Ml0sXCJtYXBwZWRcIixbMTA3XV0sW1s4MzQzLDgzNDNdLFwibWFwcGVkXCIsWzEwOF1dLFtbODM0NCw4MzQ0XSxcIm1hcHBlZFwiLFsxMDldXSxbWzgzNDUsODM0NV0sXCJtYXBwZWRcIixbMTEwXV0sW1s4MzQ2LDgzNDZdLFwibWFwcGVkXCIsWzExMl1dLFtbODM0Nyw4MzQ3XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzgzNDgsODM0OF0sXCJtYXBwZWRcIixbMTE2XV0sW1s4MzQ5LDgzNTFdLFwiZGlzYWxsb3dlZFwiXSxbWzgzNTIsODM1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODM2MCw4MzYwXSxcIm1hcHBlZFwiLFsxMTQsMTE1XV0sW1s4MzYxLDgzNjJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzNjMsODM2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODM2NCw4MzY0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4MzY1LDgzNjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzNjgsODM2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODM3MCw4MzczXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4Mzc0LDgzNzZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzNzcsODM3N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODM3OCw4Mzc4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4Mzc5LDgzODFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzgzODIsODM4Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODM4Myw4Mzk5XSxcImRpc2FsbG93ZWRcIl0sW1s4NDAwLDg0MTddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0MTgsODQxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQyMCw4NDI2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDI3LDg0MjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0MjgsODQzMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQzMiw4NDMyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDMzLDg0NDddLFwiZGlzYWxsb3dlZFwiXSxbWzg0NDgsODQ0OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzk3LDQ3LDk5XV0sW1s4NDQ5LDg0NDldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5Nyw0NywxMTVdXSxbWzg0NTAsODQ1MF0sXCJtYXBwZWRcIixbOTldXSxbWzg0NTEsODQ1MV0sXCJtYXBwZWRcIixbMTc2LDk5XV0sW1s4NDUyLDg0NTJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0NTMsODQ1M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzk5LDQ3LDExMV1dLFtbODQ1NCw4NDU0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTksNDcsMTE3XV0sW1s4NDU1LDg0NTVdLFwibWFwcGVkXCIsWzYwM11dLFtbODQ1Niw4NDU2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDU3LDg0NTddLFwibWFwcGVkXCIsWzE3NiwxMDJdXSxbWzg0NTgsODQ1OF0sXCJtYXBwZWRcIixbMTAzXV0sW1s4NDU5LDg0NjJdLFwibWFwcGVkXCIsWzEwNF1dLFtbODQ2Myw4NDYzXSxcIm1hcHBlZFwiLFsyOTVdXSxbWzg0NjQsODQ2NV0sXCJtYXBwZWRcIixbMTA1XV0sW1s4NDY2LDg0NjddLFwibWFwcGVkXCIsWzEwOF1dLFtbODQ2OCw4NDY4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NDY5LDg0NjldLFwibWFwcGVkXCIsWzExMF1dLFtbODQ3MCw4NDcwXSxcIm1hcHBlZFwiLFsxMTAsMTExXV0sW1s4NDcxLDg0NzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0NzMsODQ3M10sXCJtYXBwZWRcIixbMTEyXV0sW1s4NDc0LDg0NzRdLFwibWFwcGVkXCIsWzExM11dLFtbODQ3NSw4NDc3XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzg0NzgsODQ3OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQ4MCw4NDgwXSxcIm1hcHBlZFwiLFsxMTUsMTA5XV0sW1s4NDgxLDg0ODFdLFwibWFwcGVkXCIsWzExNiwxMDEsMTA4XV0sW1s4NDgyLDg0ODJdLFwibWFwcGVkXCIsWzExNiwxMDldXSxbWzg0ODMsODQ4M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQ4NCw4NDg0XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzg0ODUsODQ4NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQ4Niw4NDg2XSxcIm1hcHBlZFwiLFs5NjldXSxbWzg0ODcsODQ4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQ4OCw4NDg4XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzg0ODksODQ4OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODQ5MCw4NDkwXSxcIm1hcHBlZFwiLFsxMDddXSxbWzg0OTEsODQ5MV0sXCJtYXBwZWRcIixbMjI5XV0sW1s4NDkyLDg0OTJdLFwibWFwcGVkXCIsWzk4XV0sW1s4NDkzLDg0OTNdLFwibWFwcGVkXCIsWzk5XV0sW1s4NDk0LDg0OTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg0OTUsODQ5Nl0sXCJtYXBwZWRcIixbMTAxXV0sW1s4NDk3LDg0OTddLFwibWFwcGVkXCIsWzEwMl1dLFtbODQ5OCw4NDk4XSxcImRpc2FsbG93ZWRcIl0sW1s4NDk5LDg0OTldLFwibWFwcGVkXCIsWzEwOV1dLFtbODUwMCw4NTAwXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzg1MDEsODUwMV0sXCJtYXBwZWRcIixbMTQ4OF1dLFtbODUwMiw4NTAyXSxcIm1hcHBlZFwiLFsxNDg5XV0sW1s4NTAzLDg1MDNdLFwibWFwcGVkXCIsWzE0OTBdXSxbWzg1MDQsODUwNF0sXCJtYXBwZWRcIixbMTQ5MV1dLFtbODUwNSw4NTA1XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzg1MDYsODUwNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODUwNyw4NTA3XSxcIm1hcHBlZFwiLFsxMDIsOTcsMTIwXV0sW1s4NTA4LDg1MDhdLFwibWFwcGVkXCIsWzk2MF1dLFtbODUwOSw4NTEwXSxcIm1hcHBlZFwiLFs5NDddXSxbWzg1MTEsODUxMV0sXCJtYXBwZWRcIixbOTYwXV0sW1s4NTEyLDg1MTJdLFwibWFwcGVkXCIsWzg3MjFdXSxbWzg1MTMsODUxNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODUxNyw4NTE4XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzg1MTksODUxOV0sXCJtYXBwZWRcIixbMTAxXV0sW1s4NTIwLDg1MjBdLFwibWFwcGVkXCIsWzEwNV1dLFtbODUyMSw4NTIxXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzg1MjIsODUyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODUyNCw4NTI0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NTI1LDg1MjVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1MjYsODUyNl0sXCJ2YWxpZFwiXSxbWzg1MjcsODUyN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODUyOCw4NTI4XSxcIm1hcHBlZFwiLFs0OSw4MjYwLDU1XV0sW1s4NTI5LDg1MjldLFwibWFwcGVkXCIsWzQ5LDgyNjAsNTddXSxbWzg1MzAsODUzMF0sXCJtYXBwZWRcIixbNDksODI2MCw0OSw0OF1dLFtbODUzMSw4NTMxXSxcIm1hcHBlZFwiLFs0OSw4MjYwLDUxXV0sW1s4NTMyLDg1MzJdLFwibWFwcGVkXCIsWzUwLDgyNjAsNTFdXSxbWzg1MzMsODUzM10sXCJtYXBwZWRcIixbNDksODI2MCw1M11dLFtbODUzNCw4NTM0XSxcIm1hcHBlZFwiLFs1MCw4MjYwLDUzXV0sW1s4NTM1LDg1MzVdLFwibWFwcGVkXCIsWzUxLDgyNjAsNTNdXSxbWzg1MzYsODUzNl0sXCJtYXBwZWRcIixbNTIsODI2MCw1M11dLFtbODUzNyw4NTM3XSxcIm1hcHBlZFwiLFs0OSw4MjYwLDU0XV0sW1s4NTM4LDg1MzhdLFwibWFwcGVkXCIsWzUzLDgyNjAsNTRdXSxbWzg1MzksODUzOV0sXCJtYXBwZWRcIixbNDksODI2MCw1Nl1dLFtbODU0MCw4NTQwXSxcIm1hcHBlZFwiLFs1MSw4MjYwLDU2XV0sW1s4NTQxLDg1NDFdLFwibWFwcGVkXCIsWzUzLDgyNjAsNTZdXSxbWzg1NDIsODU0Ml0sXCJtYXBwZWRcIixbNTUsODI2MCw1Nl1dLFtbODU0Myw4NTQzXSxcIm1hcHBlZFwiLFs0OSw4MjYwXV0sW1s4NTQ0LDg1NDRdLFwibWFwcGVkXCIsWzEwNV1dLFtbODU0NSw4NTQ1XSxcIm1hcHBlZFwiLFsxMDUsMTA1XV0sW1s4NTQ2LDg1NDZdLFwibWFwcGVkXCIsWzEwNSwxMDUsMTA1XV0sW1s4NTQ3LDg1NDddLFwibWFwcGVkXCIsWzEwNSwxMThdXSxbWzg1NDgsODU0OF0sXCJtYXBwZWRcIixbMTE4XV0sW1s4NTQ5LDg1NDldLFwibWFwcGVkXCIsWzExOCwxMDVdXSxbWzg1NTAsODU1MF0sXCJtYXBwZWRcIixbMTE4LDEwNSwxMDVdXSxbWzg1NTEsODU1MV0sXCJtYXBwZWRcIixbMTE4LDEwNSwxMDUsMTA1XV0sW1s4NTUyLDg1NTJdLFwibWFwcGVkXCIsWzEwNSwxMjBdXSxbWzg1NTMsODU1M10sXCJtYXBwZWRcIixbMTIwXV0sW1s4NTU0LDg1NTRdLFwibWFwcGVkXCIsWzEyMCwxMDVdXSxbWzg1NTUsODU1NV0sXCJtYXBwZWRcIixbMTIwLDEwNSwxMDVdXSxbWzg1NTYsODU1Nl0sXCJtYXBwZWRcIixbMTA4XV0sW1s4NTU3LDg1NTddLFwibWFwcGVkXCIsWzk5XV0sW1s4NTU4LDg1NThdLFwibWFwcGVkXCIsWzEwMF1dLFtbODU1OSw4NTU5XSxcIm1hcHBlZFwiLFsxMDldXSxbWzg1NjAsODU2MF0sXCJtYXBwZWRcIixbMTA1XV0sW1s4NTYxLDg1NjFdLFwibWFwcGVkXCIsWzEwNSwxMDVdXSxbWzg1NjIsODU2Ml0sXCJtYXBwZWRcIixbMTA1LDEwNSwxMDVdXSxbWzg1NjMsODU2M10sXCJtYXBwZWRcIixbMTA1LDExOF1dLFtbODU2NCw4NTY0XSxcIm1hcHBlZFwiLFsxMThdXSxbWzg1NjUsODU2NV0sXCJtYXBwZWRcIixbMTE4LDEwNV1dLFtbODU2Niw4NTY2XSxcIm1hcHBlZFwiLFsxMTgsMTA1LDEwNV1dLFtbODU2Nyw4NTY3XSxcIm1hcHBlZFwiLFsxMTgsMTA1LDEwNSwxMDVdXSxbWzg1NjgsODU2OF0sXCJtYXBwZWRcIixbMTA1LDEyMF1dLFtbODU2OSw4NTY5XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzg1NzAsODU3MF0sXCJtYXBwZWRcIixbMTIwLDEwNV1dLFtbODU3MSw4NTcxXSxcIm1hcHBlZFwiLFsxMjAsMTA1LDEwNV1dLFtbODU3Miw4NTcyXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzg1NzMsODU3M10sXCJtYXBwZWRcIixbOTldXSxbWzg1NzQsODU3NF0sXCJtYXBwZWRcIixbMTAwXV0sW1s4NTc1LDg1NzVdLFwibWFwcGVkXCIsWzEwOV1dLFtbODU3Niw4NTc4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NTc5LDg1NzldLFwiZGlzYWxsb3dlZFwiXSxbWzg1ODAsODU4MF0sXCJ2YWxpZFwiXSxbWzg1ODEsODU4NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODU4NSw4NTg1XSxcIm1hcHBlZFwiLFs0OCw4MjYwLDUxXV0sW1s4NTg2LDg1ODddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg1ODgsODU5MV0sXCJkaXNhbGxvd2VkXCJdLFtbODU5Miw4NjgyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NjgzLDg2OTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg2OTIsODcwM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODcwNCw4NzQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NzQ4LDg3NDhdLFwibWFwcGVkXCIsWzg3NDcsODc0N11dLFtbODc0OSw4NzQ5XSxcIm1hcHBlZFwiLFs4NzQ3LDg3NDcsODc0N11dLFtbODc1MCw4NzUwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4NzUxLDg3NTFdLFwibWFwcGVkXCIsWzg3NTAsODc1MF1dLFtbODc1Miw4NzUyXSxcIm1hcHBlZFwiLFs4NzUwLDg3NTAsODc1MF1dLFtbODc1Myw4Nzk5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4ODAwLDg4MDBdLFwiZGlzYWxsb3dlZF9TVEQzX3ZhbGlkXCJdLFtbODgwMSw4ODEzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4ODE0LDg4MTVdLFwiZGlzYWxsb3dlZF9TVEQzX3ZhbGlkXCJdLFtbODgxNiw4OTQ1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4OTQ2LDg5NTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzg5NjAsODk2MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbODk2MSw4OTYxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s4OTYyLDkwMDBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkwMDEsOTAwMV0sXCJtYXBwZWRcIixbMTIyOTZdXSxbWzkwMDIsOTAwMl0sXCJtYXBwZWRcIixbMTIyOTddXSxbWzkwMDMsOTA4Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTA4Myw5MDgzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MDg0LDkwODRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkwODUsOTExNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTExNSw5MTY2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MTY3LDkxNjhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkxNjksOTE3OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTE4MCw5MTkxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MTkyLDkxOTJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkxOTMsOTIwM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTIwNCw5MjEwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MjExLDkyMTVdLFwiZGlzYWxsb3dlZFwiXSxbWzkyMTYsOTI1Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTI1Myw5MjU0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MjU1LDkyNzldLFwiZGlzYWxsb3dlZFwiXSxbWzkyODAsOTI5MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTI5MSw5MzExXSxcImRpc2FsbG93ZWRcIl0sW1s5MzEyLDkzMTJdLFwibWFwcGVkXCIsWzQ5XV0sW1s5MzEzLDkzMTNdLFwibWFwcGVkXCIsWzUwXV0sW1s5MzE0LDkzMTRdLFwibWFwcGVkXCIsWzUxXV0sW1s5MzE1LDkzMTVdLFwibWFwcGVkXCIsWzUyXV0sW1s5MzE2LDkzMTZdLFwibWFwcGVkXCIsWzUzXV0sW1s5MzE3LDkzMTddLFwibWFwcGVkXCIsWzU0XV0sW1s5MzE4LDkzMThdLFwibWFwcGVkXCIsWzU1XV0sW1s5MzE5LDkzMTldLFwibWFwcGVkXCIsWzU2XV0sW1s5MzIwLDkzMjBdLFwibWFwcGVkXCIsWzU3XV0sW1s5MzIxLDkzMjFdLFwibWFwcGVkXCIsWzQ5LDQ4XV0sW1s5MzIyLDkzMjJdLFwibWFwcGVkXCIsWzQ5LDQ5XV0sW1s5MzIzLDkzMjNdLFwibWFwcGVkXCIsWzQ5LDUwXV0sW1s5MzI0LDkzMjRdLFwibWFwcGVkXCIsWzQ5LDUxXV0sW1s5MzI1LDkzMjVdLFwibWFwcGVkXCIsWzQ5LDUyXV0sW1s5MzI2LDkzMjZdLFwibWFwcGVkXCIsWzQ5LDUzXV0sW1s5MzI3LDkzMjddLFwibWFwcGVkXCIsWzQ5LDU0XV0sW1s5MzI4LDkzMjhdLFwibWFwcGVkXCIsWzQ5LDU1XV0sW1s5MzI5LDkzMjldLFwibWFwcGVkXCIsWzQ5LDU2XV0sW1s5MzMwLDkzMzBdLFwibWFwcGVkXCIsWzQ5LDU3XV0sW1s5MzMxLDkzMzFdLFwibWFwcGVkXCIsWzUwLDQ4XV0sW1s5MzMyLDkzMzJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OSw0MV1dLFtbOTMzMyw5MzMzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTAsNDFdXSxbWzkzMzQsOTMzNF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDUxLDQxXV0sW1s5MzM1LDkzMzVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1Miw0MV1dLFtbOTMzNiw5MzM2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTMsNDFdXSxbWzkzMzcsOTMzN10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDU0LDQxXV0sW1s5MzM4LDkzMzhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1NSw0MV1dLFtbOTMzOSw5MzM5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTYsNDFdXSxbWzkzNDAsOTM0MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDU3LDQxXV0sW1s5MzQxLDkzNDFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OSw0OCw0MV1dLFtbOTM0Miw5MzQyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNDksNDFdXSxbWzkzNDMsOTM0M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQ5LDUwLDQxXV0sW1s5MzQ0LDkzNDRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OSw1MSw0MV1dLFtbOTM0NSw5MzQ1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNTIsNDFdXSxbWzkzNDYsOTM0Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQ5LDUzLDQxXV0sW1s5MzQ3LDkzNDddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OSw1NCw0MV1dLFtbOTM0OCw5MzQ4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDksNTUsNDFdXSxbWzkzNDksOTM0OV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQ5LDU2LDQxXV0sW1s5MzUwLDkzNTBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OSw1Nyw0MV1dLFtbOTM1MSw5MzUxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNTAsNDgsNDFdXSxbWzkzNTIsOTM3MV0sXCJkaXNhbGxvd2VkXCJdLFtbOTM3Miw5MzcyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsOTcsNDFdXSxbWzkzNzMsOTM3M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDk4LDQxXV0sW1s5Mzc0LDkzNzRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw5OSw0MV1dLFtbOTM3NSw5Mzc1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAwLDQxXV0sW1s5Mzc2LDkzNzZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDEsNDFdXSxbWzkzNzcsOTM3N10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEwMiw0MV1dLFtbOTM3OCw5Mzc4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTAzLDQxXV0sW1s5Mzc5LDkzNzldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDQsNDFdXSxbWzkzODAsOTM4MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEwNSw0MV1dLFtbOTM4MSw5MzgxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA2LDQxXV0sW1s5MzgyLDkzODJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDcsNDFdXSxbWzkzODMsOTM4M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEwOCw0MV1dLFtbOTM4NCw5Mzg0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTA5LDQxXV0sW1s5Mzg1LDkzODVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTAsNDFdXSxbWzkzODYsOTM4Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDExMSw0MV1dLFtbOTM4Nyw5Mzg3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTEyLDQxXV0sW1s5Mzg4LDkzODhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTMsNDFdXSxbWzkzODksOTM4OV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDExNCw0MV1dLFtbOTM5MCw5MzkwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE1LDQxXV0sW1s5MzkxLDkzOTFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTYsNDFdXSxbWzkzOTIsOTM5Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDExNyw0MV1dLFtbOTM5Myw5MzkzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTE4LDQxXV0sW1s5Mzk0LDkzOTRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTksNDFdXSxbWzkzOTUsOTM5NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDEyMCw0MV1dLFtbOTM5Niw5Mzk2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTIxLDQxXV0sW1s5Mzk3LDkzOTddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMjIsNDFdXSxbWzkzOTgsOTM5OF0sXCJtYXBwZWRcIixbOTddXSxbWzkzOTksOTM5OV0sXCJtYXBwZWRcIixbOThdXSxbWzk0MDAsOTQwMF0sXCJtYXBwZWRcIixbOTldXSxbWzk0MDEsOTQwMV0sXCJtYXBwZWRcIixbMTAwXV0sW1s5NDAyLDk0MDJdLFwibWFwcGVkXCIsWzEwMV1dLFtbOTQwMyw5NDAzXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzk0MDQsOTQwNF0sXCJtYXBwZWRcIixbMTAzXV0sW1s5NDA1LDk0MDVdLFwibWFwcGVkXCIsWzEwNF1dLFtbOTQwNiw5NDA2XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzk0MDcsOTQwN10sXCJtYXBwZWRcIixbMTA2XV0sW1s5NDA4LDk0MDhdLFwibWFwcGVkXCIsWzEwN11dLFtbOTQwOSw5NDA5XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzk0MTAsOTQxMF0sXCJtYXBwZWRcIixbMTA5XV0sW1s5NDExLDk0MTFdLFwibWFwcGVkXCIsWzExMF1dLFtbOTQxMiw5NDEyXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzk0MTMsOTQxM10sXCJtYXBwZWRcIixbMTEyXV0sW1s5NDE0LDk0MTRdLFwibWFwcGVkXCIsWzExM11dLFtbOTQxNSw5NDE1XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzk0MTYsOTQxNl0sXCJtYXBwZWRcIixbMTE1XV0sW1s5NDE3LDk0MTddLFwibWFwcGVkXCIsWzExNl1dLFtbOTQxOCw5NDE4XSxcIm1hcHBlZFwiLFsxMTddXSxbWzk0MTksOTQxOV0sXCJtYXBwZWRcIixbMTE4XV0sW1s5NDIwLDk0MjBdLFwibWFwcGVkXCIsWzExOV1dLFtbOTQyMSw5NDIxXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzk0MjIsOTQyMl0sXCJtYXBwZWRcIixbMTIxXV0sW1s5NDIzLDk0MjNdLFwibWFwcGVkXCIsWzEyMl1dLFtbOTQyNCw5NDI0XSxcIm1hcHBlZFwiLFs5N11dLFtbOTQyNSw5NDI1XSxcIm1hcHBlZFwiLFs5OF1dLFtbOTQyNiw5NDI2XSxcIm1hcHBlZFwiLFs5OV1dLFtbOTQyNyw5NDI3XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzk0MjgsOTQyOF0sXCJtYXBwZWRcIixbMTAxXV0sW1s5NDI5LDk0MjldLFwibWFwcGVkXCIsWzEwMl1dLFtbOTQzMCw5NDMwXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzk0MzEsOTQzMV0sXCJtYXBwZWRcIixbMTA0XV0sW1s5NDMyLDk0MzJdLFwibWFwcGVkXCIsWzEwNV1dLFtbOTQzMyw5NDMzXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzk0MzQsOTQzNF0sXCJtYXBwZWRcIixbMTA3XV0sW1s5NDM1LDk0MzVdLFwibWFwcGVkXCIsWzEwOF1dLFtbOTQzNiw5NDM2XSxcIm1hcHBlZFwiLFsxMDldXSxbWzk0MzcsOTQzN10sXCJtYXBwZWRcIixbMTEwXV0sW1s5NDM4LDk0MzhdLFwibWFwcGVkXCIsWzExMV1dLFtbOTQzOSw5NDM5XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzk0NDAsOTQ0MF0sXCJtYXBwZWRcIixbMTEzXV0sW1s5NDQxLDk0NDFdLFwibWFwcGVkXCIsWzExNF1dLFtbOTQ0Miw5NDQyXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzk0NDMsOTQ0M10sXCJtYXBwZWRcIixbMTE2XV0sW1s5NDQ0LDk0NDRdLFwibWFwcGVkXCIsWzExN11dLFtbOTQ0NSw5NDQ1XSxcIm1hcHBlZFwiLFsxMThdXSxbWzk0NDYsOTQ0Nl0sXCJtYXBwZWRcIixbMTE5XV0sW1s5NDQ3LDk0NDddLFwibWFwcGVkXCIsWzEyMF1dLFtbOTQ0OCw5NDQ4XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzk0NDksOTQ0OV0sXCJtYXBwZWRcIixbMTIyXV0sW1s5NDUwLDk0NTBdLFwibWFwcGVkXCIsWzQ4XV0sW1s5NDUxLDk0NzBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk0NzEsOTQ3MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTQ3Miw5NjIxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NjIyLDk2MzFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk2MzIsOTcxMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTcxMiw5NzE5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NzIwLDk3MjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk3MjgsOTc0N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTc0OCw5NzQ5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NzUwLDk3NTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk3NTIsOTc1Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTc1Myw5NzUzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5NzU0LDk4MzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk4NDAsOTg0MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTg0Miw5ODUzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5ODU0LDk4NTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk4NTYsOTg2NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTg2Niw5ODczXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5ODc0LDk4ODRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk4ODUsOTg4NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTg4Niw5ODg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5ODg4LDk4ODldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk4OTAsOTkwNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTkwNiw5OTA2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTA3LDk5MTZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5MTcsOTkxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTkyMCw5OTIzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTI0LDk5MzNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5MzQsOTkzNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTkzNSw5OTUzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTU0LDk5NTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5NTUsOTk1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTk1Niw5OTU5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTYwLDk5ODNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5ODQsOTk4NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTk4NSw5OTg4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTg5LDk5ODldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzk5OTAsOTk5M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTk5NCw5OTk1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5OTk2LDEwMDIzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDAyNCwxMDAyNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwMjUsMTAwNTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDYwLDEwMDYwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA2MSwxMDA2MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwNjIsMTAwNjJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDYzLDEwMDY2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA2NywxMDA2OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwNzAsMTAwNzBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDcxLDEwMDcxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA3MiwxMDA3OF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAwNzksMTAwODBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMDgxLDEwMDg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDA4OCwxMDEwMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxMDIsMTAxMzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTMzLDEwMTM1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDEzNiwxMDE1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxNjAsMTAxNjBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTYxLDEwMTc0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDE3NSwxMDE3NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxNzYsMTAxODJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTgzLDEwMTg2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDE4NywxMDE4N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxODgsMTAxODhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMTg5LDEwMTg5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDE5MCwxMDE5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAxOTIsMTAyMTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwMjIwLDEwMjIzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDIyNCwxMDIzOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTAyNDAsMTA0OTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwNDk2LDEwNzYzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDc2NCwxMDc2NF0sXCJtYXBwZWRcIixbODc0Nyw4NzQ3LDg3NDcsODc0N11dLFtbMTA3NjUsMTA4NjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEwODY4LDEwODY4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTgsNTgsNjFdXSxbWzEwODY5LDEwODY5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjEsNjFdXSxbWzEwODcwLDEwODcwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjEsNjEsNjFdXSxbWzEwODcxLDEwOTcxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMDk3MiwxMDk3Ml0sXCJtYXBwZWRcIixbMTA5NzMsODI0XV0sW1sxMDk3MywxMTAwN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEwMDgsMTEwMjFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMDIyLDExMDI3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTAyOCwxMTAzNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEwMzUsMTEwMzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMDQwLDExMDQzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTA0NCwxMTA4NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEwODUsMTEwODddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMDg4LDExMDkyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTA5MywxMTA5N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEwOTgsMTExMjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMTI0LDExMTI1XSxcImRpc2FsbG93ZWRcIl0sW1sxMTEyNiwxMTE1N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTExNTgsMTExNTldLFwiZGlzYWxsb3dlZFwiXSxbWzExMTYwLDExMTkzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTE5NCwxMTE5Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMTExOTcsMTEyMDhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMjA5LDExMjA5XSxcImRpc2FsbG93ZWRcIl0sW1sxMTIxMCwxMTIxN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEyMTgsMTEyNDNdLFwiZGlzYWxsb3dlZFwiXSxbWzExMjQ0LDExMjQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTI0OCwxMTI2M10sXCJkaXNhbGxvd2VkXCJdLFtbMTEyNjQsMTEyNjRdLFwibWFwcGVkXCIsWzExMzEyXV0sW1sxMTI2NSwxMTI2NV0sXCJtYXBwZWRcIixbMTEzMTNdXSxbWzExMjY2LDExMjY2XSxcIm1hcHBlZFwiLFsxMTMxNF1dLFtbMTEyNjcsMTEyNjddLFwibWFwcGVkXCIsWzExMzE1XV0sW1sxMTI2OCwxMTI2OF0sXCJtYXBwZWRcIixbMTEzMTZdXSxbWzExMjY5LDExMjY5XSxcIm1hcHBlZFwiLFsxMTMxN11dLFtbMTEyNzAsMTEyNzBdLFwibWFwcGVkXCIsWzExMzE4XV0sW1sxMTI3MSwxMTI3MV0sXCJtYXBwZWRcIixbMTEzMTldXSxbWzExMjcyLDExMjcyXSxcIm1hcHBlZFwiLFsxMTMyMF1dLFtbMTEyNzMsMTEyNzNdLFwibWFwcGVkXCIsWzExMzIxXV0sW1sxMTI3NCwxMTI3NF0sXCJtYXBwZWRcIixbMTEzMjJdXSxbWzExMjc1LDExMjc1XSxcIm1hcHBlZFwiLFsxMTMyM11dLFtbMTEyNzYsMTEyNzZdLFwibWFwcGVkXCIsWzExMzI0XV0sW1sxMTI3NywxMTI3N10sXCJtYXBwZWRcIixbMTEzMjVdXSxbWzExMjc4LDExMjc4XSxcIm1hcHBlZFwiLFsxMTMyNl1dLFtbMTEyNzksMTEyNzldLFwibWFwcGVkXCIsWzExMzI3XV0sW1sxMTI4MCwxMTI4MF0sXCJtYXBwZWRcIixbMTEzMjhdXSxbWzExMjgxLDExMjgxXSxcIm1hcHBlZFwiLFsxMTMyOV1dLFtbMTEyODIsMTEyODJdLFwibWFwcGVkXCIsWzExMzMwXV0sW1sxMTI4MywxMTI4M10sXCJtYXBwZWRcIixbMTEzMzFdXSxbWzExMjg0LDExMjg0XSxcIm1hcHBlZFwiLFsxMTMzMl1dLFtbMTEyODUsMTEyODVdLFwibWFwcGVkXCIsWzExMzMzXV0sW1sxMTI4NiwxMTI4Nl0sXCJtYXBwZWRcIixbMTEzMzRdXSxbWzExMjg3LDExMjg3XSxcIm1hcHBlZFwiLFsxMTMzNV1dLFtbMTEyODgsMTEyODhdLFwibWFwcGVkXCIsWzExMzM2XV0sW1sxMTI4OSwxMTI4OV0sXCJtYXBwZWRcIixbMTEzMzddXSxbWzExMjkwLDExMjkwXSxcIm1hcHBlZFwiLFsxMTMzOF1dLFtbMTEyOTEsMTEyOTFdLFwibWFwcGVkXCIsWzExMzM5XV0sW1sxMTI5MiwxMTI5Ml0sXCJtYXBwZWRcIixbMTEzNDBdXSxbWzExMjkzLDExMjkzXSxcIm1hcHBlZFwiLFsxMTM0MV1dLFtbMTEyOTQsMTEyOTRdLFwibWFwcGVkXCIsWzExMzQyXV0sW1sxMTI5NSwxMTI5NV0sXCJtYXBwZWRcIixbMTEzNDNdXSxbWzExMjk2LDExMjk2XSxcIm1hcHBlZFwiLFsxMTM0NF1dLFtbMTEyOTcsMTEyOTddLFwibWFwcGVkXCIsWzExMzQ1XV0sW1sxMTI5OCwxMTI5OF0sXCJtYXBwZWRcIixbMTEzNDZdXSxbWzExMjk5LDExMjk5XSxcIm1hcHBlZFwiLFsxMTM0N11dLFtbMTEzMDAsMTEzMDBdLFwibWFwcGVkXCIsWzExMzQ4XV0sW1sxMTMwMSwxMTMwMV0sXCJtYXBwZWRcIixbMTEzNDldXSxbWzExMzAyLDExMzAyXSxcIm1hcHBlZFwiLFsxMTM1MF1dLFtbMTEzMDMsMTEzMDNdLFwibWFwcGVkXCIsWzExMzUxXV0sW1sxMTMwNCwxMTMwNF0sXCJtYXBwZWRcIixbMTEzNTJdXSxbWzExMzA1LDExMzA1XSxcIm1hcHBlZFwiLFsxMTM1M11dLFtbMTEzMDYsMTEzMDZdLFwibWFwcGVkXCIsWzExMzU0XV0sW1sxMTMwNywxMTMwN10sXCJtYXBwZWRcIixbMTEzNTVdXSxbWzExMzA4LDExMzA4XSxcIm1hcHBlZFwiLFsxMTM1Nl1dLFtbMTEzMDksMTEzMDldLFwibWFwcGVkXCIsWzExMzU3XV0sW1sxMTMxMCwxMTMxMF0sXCJtYXBwZWRcIixbMTEzNThdXSxbWzExMzExLDExMzExXSxcImRpc2FsbG93ZWRcIl0sW1sxMTMxMiwxMTM1OF0sXCJ2YWxpZFwiXSxbWzExMzU5LDExMzU5XSxcImRpc2FsbG93ZWRcIl0sW1sxMTM2MCwxMTM2MF0sXCJtYXBwZWRcIixbMTEzNjFdXSxbWzExMzYxLDExMzYxXSxcInZhbGlkXCJdLFtbMTEzNjIsMTEzNjJdLFwibWFwcGVkXCIsWzYxOV1dLFtbMTEzNjMsMTEzNjNdLFwibWFwcGVkXCIsWzc1NDldXSxbWzExMzY0LDExMzY0XSxcIm1hcHBlZFwiLFs2MzddXSxbWzExMzY1LDExMzY2XSxcInZhbGlkXCJdLFtbMTEzNjcsMTEzNjddLFwibWFwcGVkXCIsWzExMzY4XV0sW1sxMTM2OCwxMTM2OF0sXCJ2YWxpZFwiXSxbWzExMzY5LDExMzY5XSxcIm1hcHBlZFwiLFsxMTM3MF1dLFtbMTEzNzAsMTEzNzBdLFwidmFsaWRcIl0sW1sxMTM3MSwxMTM3MV0sXCJtYXBwZWRcIixbMTEzNzJdXSxbWzExMzcyLDExMzcyXSxcInZhbGlkXCJdLFtbMTEzNzMsMTEzNzNdLFwibWFwcGVkXCIsWzU5M11dLFtbMTEzNzQsMTEzNzRdLFwibWFwcGVkXCIsWzYyNV1dLFtbMTEzNzUsMTEzNzVdLFwibWFwcGVkXCIsWzU5Ml1dLFtbMTEzNzYsMTEzNzZdLFwibWFwcGVkXCIsWzU5NF1dLFtbMTEzNzcsMTEzNzddLFwidmFsaWRcIl0sW1sxMTM3OCwxMTM3OF0sXCJtYXBwZWRcIixbMTEzNzldXSxbWzExMzc5LDExMzc5XSxcInZhbGlkXCJdLFtbMTEzODAsMTEzODBdLFwidmFsaWRcIl0sW1sxMTM4MSwxMTM4MV0sXCJtYXBwZWRcIixbMTEzODJdXSxbWzExMzgyLDExMzgzXSxcInZhbGlkXCJdLFtbMTEzODQsMTEzODddLFwidmFsaWRcIl0sW1sxMTM4OCwxMTM4OF0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMTM4OSwxMTM4OV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMTM5MCwxMTM5MF0sXCJtYXBwZWRcIixbNTc1XV0sW1sxMTM5MSwxMTM5MV0sXCJtYXBwZWRcIixbNTc2XV0sW1sxMTM5MiwxMTM5Ml0sXCJtYXBwZWRcIixbMTEzOTNdXSxbWzExMzkzLDExMzkzXSxcInZhbGlkXCJdLFtbMTEzOTQsMTEzOTRdLFwibWFwcGVkXCIsWzExMzk1XV0sW1sxMTM5NSwxMTM5NV0sXCJ2YWxpZFwiXSxbWzExMzk2LDExMzk2XSxcIm1hcHBlZFwiLFsxMTM5N11dLFtbMTEzOTcsMTEzOTddLFwidmFsaWRcIl0sW1sxMTM5OCwxMTM5OF0sXCJtYXBwZWRcIixbMTEzOTldXSxbWzExMzk5LDExMzk5XSxcInZhbGlkXCJdLFtbMTE0MDAsMTE0MDBdLFwibWFwcGVkXCIsWzExNDAxXV0sW1sxMTQwMSwxMTQwMV0sXCJ2YWxpZFwiXSxbWzExNDAyLDExNDAyXSxcIm1hcHBlZFwiLFsxMTQwM11dLFtbMTE0MDMsMTE0MDNdLFwidmFsaWRcIl0sW1sxMTQwNCwxMTQwNF0sXCJtYXBwZWRcIixbMTE0MDVdXSxbWzExNDA1LDExNDA1XSxcInZhbGlkXCJdLFtbMTE0MDYsMTE0MDZdLFwibWFwcGVkXCIsWzExNDA3XV0sW1sxMTQwNywxMTQwN10sXCJ2YWxpZFwiXSxbWzExNDA4LDExNDA4XSxcIm1hcHBlZFwiLFsxMTQwOV1dLFtbMTE0MDksMTE0MDldLFwidmFsaWRcIl0sW1sxMTQxMCwxMTQxMF0sXCJtYXBwZWRcIixbMTE0MTFdXSxbWzExNDExLDExNDExXSxcInZhbGlkXCJdLFtbMTE0MTIsMTE0MTJdLFwibWFwcGVkXCIsWzExNDEzXV0sW1sxMTQxMywxMTQxM10sXCJ2YWxpZFwiXSxbWzExNDE0LDExNDE0XSxcIm1hcHBlZFwiLFsxMTQxNV1dLFtbMTE0MTUsMTE0MTVdLFwidmFsaWRcIl0sW1sxMTQxNiwxMTQxNl0sXCJtYXBwZWRcIixbMTE0MTddXSxbWzExNDE3LDExNDE3XSxcInZhbGlkXCJdLFtbMTE0MTgsMTE0MThdLFwibWFwcGVkXCIsWzExNDE5XV0sW1sxMTQxOSwxMTQxOV0sXCJ2YWxpZFwiXSxbWzExNDIwLDExNDIwXSxcIm1hcHBlZFwiLFsxMTQyMV1dLFtbMTE0MjEsMTE0MjFdLFwidmFsaWRcIl0sW1sxMTQyMiwxMTQyMl0sXCJtYXBwZWRcIixbMTE0MjNdXSxbWzExNDIzLDExNDIzXSxcInZhbGlkXCJdLFtbMTE0MjQsMTE0MjRdLFwibWFwcGVkXCIsWzExNDI1XV0sW1sxMTQyNSwxMTQyNV0sXCJ2YWxpZFwiXSxbWzExNDI2LDExNDI2XSxcIm1hcHBlZFwiLFsxMTQyN11dLFtbMTE0MjcsMTE0MjddLFwidmFsaWRcIl0sW1sxMTQyOCwxMTQyOF0sXCJtYXBwZWRcIixbMTE0MjldXSxbWzExNDI5LDExNDI5XSxcInZhbGlkXCJdLFtbMTE0MzAsMTE0MzBdLFwibWFwcGVkXCIsWzExNDMxXV0sW1sxMTQzMSwxMTQzMV0sXCJ2YWxpZFwiXSxbWzExNDMyLDExNDMyXSxcIm1hcHBlZFwiLFsxMTQzM11dLFtbMTE0MzMsMTE0MzNdLFwidmFsaWRcIl0sW1sxMTQzNCwxMTQzNF0sXCJtYXBwZWRcIixbMTE0MzVdXSxbWzExNDM1LDExNDM1XSxcInZhbGlkXCJdLFtbMTE0MzYsMTE0MzZdLFwibWFwcGVkXCIsWzExNDM3XV0sW1sxMTQzNywxMTQzN10sXCJ2YWxpZFwiXSxbWzExNDM4LDExNDM4XSxcIm1hcHBlZFwiLFsxMTQzOV1dLFtbMTE0MzksMTE0MzldLFwidmFsaWRcIl0sW1sxMTQ0MCwxMTQ0MF0sXCJtYXBwZWRcIixbMTE0NDFdXSxbWzExNDQxLDExNDQxXSxcInZhbGlkXCJdLFtbMTE0NDIsMTE0NDJdLFwibWFwcGVkXCIsWzExNDQzXV0sW1sxMTQ0MywxMTQ0M10sXCJ2YWxpZFwiXSxbWzExNDQ0LDExNDQ0XSxcIm1hcHBlZFwiLFsxMTQ0NV1dLFtbMTE0NDUsMTE0NDVdLFwidmFsaWRcIl0sW1sxMTQ0NiwxMTQ0Nl0sXCJtYXBwZWRcIixbMTE0NDddXSxbWzExNDQ3LDExNDQ3XSxcInZhbGlkXCJdLFtbMTE0NDgsMTE0NDhdLFwibWFwcGVkXCIsWzExNDQ5XV0sW1sxMTQ0OSwxMTQ0OV0sXCJ2YWxpZFwiXSxbWzExNDUwLDExNDUwXSxcIm1hcHBlZFwiLFsxMTQ1MV1dLFtbMTE0NTEsMTE0NTFdLFwidmFsaWRcIl0sW1sxMTQ1MiwxMTQ1Ml0sXCJtYXBwZWRcIixbMTE0NTNdXSxbWzExNDUzLDExNDUzXSxcInZhbGlkXCJdLFtbMTE0NTQsMTE0NTRdLFwibWFwcGVkXCIsWzExNDU1XV0sW1sxMTQ1NSwxMTQ1NV0sXCJ2YWxpZFwiXSxbWzExNDU2LDExNDU2XSxcIm1hcHBlZFwiLFsxMTQ1N11dLFtbMTE0NTcsMTE0NTddLFwidmFsaWRcIl0sW1sxMTQ1OCwxMTQ1OF0sXCJtYXBwZWRcIixbMTE0NTldXSxbWzExNDU5LDExNDU5XSxcInZhbGlkXCJdLFtbMTE0NjAsMTE0NjBdLFwibWFwcGVkXCIsWzExNDYxXV0sW1sxMTQ2MSwxMTQ2MV0sXCJ2YWxpZFwiXSxbWzExNDYyLDExNDYyXSxcIm1hcHBlZFwiLFsxMTQ2M11dLFtbMTE0NjMsMTE0NjNdLFwidmFsaWRcIl0sW1sxMTQ2NCwxMTQ2NF0sXCJtYXBwZWRcIixbMTE0NjVdXSxbWzExNDY1LDExNDY1XSxcInZhbGlkXCJdLFtbMTE0NjYsMTE0NjZdLFwibWFwcGVkXCIsWzExNDY3XV0sW1sxMTQ2NywxMTQ2N10sXCJ2YWxpZFwiXSxbWzExNDY4LDExNDY4XSxcIm1hcHBlZFwiLFsxMTQ2OV1dLFtbMTE0NjksMTE0NjldLFwidmFsaWRcIl0sW1sxMTQ3MCwxMTQ3MF0sXCJtYXBwZWRcIixbMTE0NzFdXSxbWzExNDcxLDExNDcxXSxcInZhbGlkXCJdLFtbMTE0NzIsMTE0NzJdLFwibWFwcGVkXCIsWzExNDczXV0sW1sxMTQ3MywxMTQ3M10sXCJ2YWxpZFwiXSxbWzExNDc0LDExNDc0XSxcIm1hcHBlZFwiLFsxMTQ3NV1dLFtbMTE0NzUsMTE0NzVdLFwidmFsaWRcIl0sW1sxMTQ3NiwxMTQ3Nl0sXCJtYXBwZWRcIixbMTE0NzddXSxbWzExNDc3LDExNDc3XSxcInZhbGlkXCJdLFtbMTE0NzgsMTE0NzhdLFwibWFwcGVkXCIsWzExNDc5XV0sW1sxMTQ3OSwxMTQ3OV0sXCJ2YWxpZFwiXSxbWzExNDgwLDExNDgwXSxcIm1hcHBlZFwiLFsxMTQ4MV1dLFtbMTE0ODEsMTE0ODFdLFwidmFsaWRcIl0sW1sxMTQ4MiwxMTQ4Ml0sXCJtYXBwZWRcIixbMTE0ODNdXSxbWzExNDgzLDExNDgzXSxcInZhbGlkXCJdLFtbMTE0ODQsMTE0ODRdLFwibWFwcGVkXCIsWzExNDg1XV0sW1sxMTQ4NSwxMTQ4NV0sXCJ2YWxpZFwiXSxbWzExNDg2LDExNDg2XSxcIm1hcHBlZFwiLFsxMTQ4N11dLFtbMTE0ODcsMTE0ODddLFwidmFsaWRcIl0sW1sxMTQ4OCwxMTQ4OF0sXCJtYXBwZWRcIixbMTE0ODldXSxbWzExNDg5LDExNDg5XSxcInZhbGlkXCJdLFtbMTE0OTAsMTE0OTBdLFwibWFwcGVkXCIsWzExNDkxXV0sW1sxMTQ5MSwxMTQ5Ml0sXCJ2YWxpZFwiXSxbWzExNDkzLDExNDk4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTQ5OSwxMTQ5OV0sXCJtYXBwZWRcIixbMTE1MDBdXSxbWzExNTAwLDExNTAwXSxcInZhbGlkXCJdLFtbMTE1MDEsMTE1MDFdLFwibWFwcGVkXCIsWzExNTAyXV0sW1sxMTUwMiwxMTUwNV0sXCJ2YWxpZFwiXSxbWzExNTA2LDExNTA2XSxcIm1hcHBlZFwiLFsxMTUwN11dLFtbMTE1MDcsMTE1MDddLFwidmFsaWRcIl0sW1sxMTUwOCwxMTUxMl0sXCJkaXNhbGxvd2VkXCJdLFtbMTE1MTMsMTE1MTldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExNTIwLDExNTU3XSxcInZhbGlkXCJdLFtbMTE1NTgsMTE1NThdLFwiZGlzYWxsb3dlZFwiXSxbWzExNTU5LDExNTU5XSxcInZhbGlkXCJdLFtbMTE1NjAsMTE1NjRdLFwiZGlzYWxsb3dlZFwiXSxbWzExNTY1LDExNTY1XSxcInZhbGlkXCJdLFtbMTE1NjYsMTE1NjddLFwiZGlzYWxsb3dlZFwiXSxbWzExNTY4LDExNjIxXSxcInZhbGlkXCJdLFtbMTE2MjIsMTE2MjNdLFwidmFsaWRcIl0sW1sxMTYyNCwxMTYzMF0sXCJkaXNhbGxvd2VkXCJdLFtbMTE2MzEsMTE2MzFdLFwibWFwcGVkXCIsWzExNjE3XV0sW1sxMTYzMiwxMTYzMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE2MzMsMTE2NDZdLFwiZGlzYWxsb3dlZFwiXSxbWzExNjQ3LDExNjQ3XSxcInZhbGlkXCJdLFtbMTE2NDgsMTE2NzBdLFwidmFsaWRcIl0sW1sxMTY3MSwxMTY3OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTE2ODAsMTE2ODZdLFwidmFsaWRcIl0sW1sxMTY4NywxMTY4N10sXCJkaXNhbGxvd2VkXCJdLFtbMTE2ODgsMTE2OTRdLFwidmFsaWRcIl0sW1sxMTY5NSwxMTY5NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTE2OTYsMTE3MDJdLFwidmFsaWRcIl0sW1sxMTcwMywxMTcwM10sXCJkaXNhbGxvd2VkXCJdLFtbMTE3MDQsMTE3MTBdLFwidmFsaWRcIl0sW1sxMTcxMSwxMTcxMV0sXCJkaXNhbGxvd2VkXCJdLFtbMTE3MTIsMTE3MThdLFwidmFsaWRcIl0sW1sxMTcxOSwxMTcxOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTE3MjAsMTE3MjZdLFwidmFsaWRcIl0sW1sxMTcyNywxMTcyN10sXCJkaXNhbGxvd2VkXCJdLFtbMTE3MjgsMTE3MzRdLFwidmFsaWRcIl0sW1sxMTczNSwxMTczNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTE3MzYsMTE3NDJdLFwidmFsaWRcIl0sW1sxMTc0MywxMTc0M10sXCJkaXNhbGxvd2VkXCJdLFtbMTE3NDQsMTE3NzVdLFwidmFsaWRcIl0sW1sxMTc3NiwxMTc5OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE4MDAsMTE4MDNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExODA0LDExODA1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTgwNiwxMTgyMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE4MjMsMTE4MjNdLFwidmFsaWRcIl0sW1sxMTgyNCwxMTgyNF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE4MjUsMTE4MjVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExODI2LDExODM1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTgzNiwxMTg0Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE4NDMsMTE5MDNdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTA0LDExOTI5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMTkzMCwxMTkzMF0sXCJkaXNhbGxvd2VkXCJdLFtbMTE5MzEsMTE5MzRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTM1LDExOTM1XSxcIm1hcHBlZFwiLFsyNzU5N11dLFtbMTE5MzYsMTIwMThdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMDE5LDEyMDE5XSxcIm1hcHBlZFwiLFs0MDg2M11dLFtbMTIwMjAsMTIwMzFdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDMyLDEyMDMyXSxcIm1hcHBlZFwiLFsxOTk2OF1dLFtbMTIwMzMsMTIwMzNdLFwibWFwcGVkXCIsWzIwMDA4XV0sW1sxMjAzNCwxMjAzNF0sXCJtYXBwZWRcIixbMjAwMjJdXSxbWzEyMDM1LDEyMDM1XSxcIm1hcHBlZFwiLFsyMDAzMV1dLFtbMTIwMzYsMTIwMzZdLFwibWFwcGVkXCIsWzIwMDU3XV0sW1sxMjAzNywxMjAzN10sXCJtYXBwZWRcIixbMjAxMDFdXSxbWzEyMDM4LDEyMDM4XSxcIm1hcHBlZFwiLFsyMDEwOF1dLFtbMTIwMzksMTIwMzldLFwibWFwcGVkXCIsWzIwMTI4XV0sW1sxMjA0MCwxMjA0MF0sXCJtYXBwZWRcIixbMjAxNTRdXSxbWzEyMDQxLDEyMDQxXSxcIm1hcHBlZFwiLFsyMDc5OV1dLFtbMTIwNDIsMTIwNDJdLFwibWFwcGVkXCIsWzIwODM3XV0sW1sxMjA0MywxMjA0M10sXCJtYXBwZWRcIixbMjA4NDNdXSxbWzEyMDQ0LDEyMDQ0XSxcIm1hcHBlZFwiLFsyMDg2Nl1dLFtbMTIwNDUsMTIwNDVdLFwibWFwcGVkXCIsWzIwODg2XV0sW1sxMjA0NiwxMjA0Nl0sXCJtYXBwZWRcIixbMjA5MDddXSxbWzEyMDQ3LDEyMDQ3XSxcIm1hcHBlZFwiLFsyMDk2MF1dLFtbMTIwNDgsMTIwNDhdLFwibWFwcGVkXCIsWzIwOTgxXV0sW1sxMjA0OSwxMjA0OV0sXCJtYXBwZWRcIixbMjA5OTJdXSxbWzEyMDUwLDEyMDUwXSxcIm1hcHBlZFwiLFsyMTE0N11dLFtbMTIwNTEsMTIwNTFdLFwibWFwcGVkXCIsWzIxMjQxXV0sW1sxMjA1MiwxMjA1Ml0sXCJtYXBwZWRcIixbMjEyNjldXSxbWzEyMDUzLDEyMDUzXSxcIm1hcHBlZFwiLFsyMTI3NF1dLFtbMTIwNTQsMTIwNTRdLFwibWFwcGVkXCIsWzIxMzA0XV0sW1sxMjA1NSwxMjA1NV0sXCJtYXBwZWRcIixbMjEzMTNdXSxbWzEyMDU2LDEyMDU2XSxcIm1hcHBlZFwiLFsyMTM0MF1dLFtbMTIwNTcsMTIwNTddLFwibWFwcGVkXCIsWzIxMzUzXV0sW1sxMjA1OCwxMjA1OF0sXCJtYXBwZWRcIixbMjEzNzhdXSxbWzEyMDU5LDEyMDU5XSxcIm1hcHBlZFwiLFsyMTQzMF1dLFtbMTIwNjAsMTIwNjBdLFwibWFwcGVkXCIsWzIxNDQ4XV0sW1sxMjA2MSwxMjA2MV0sXCJtYXBwZWRcIixbMjE0NzVdXSxbWzEyMDYyLDEyMDYyXSxcIm1hcHBlZFwiLFsyMjIzMV1dLFtbMTIwNjMsMTIwNjNdLFwibWFwcGVkXCIsWzIyMzAzXV0sW1sxMjA2NCwxMjA2NF0sXCJtYXBwZWRcIixbMjI3NjNdXSxbWzEyMDY1LDEyMDY1XSxcIm1hcHBlZFwiLFsyMjc4Nl1dLFtbMTIwNjYsMTIwNjZdLFwibWFwcGVkXCIsWzIyNzk0XV0sW1sxMjA2NywxMjA2N10sXCJtYXBwZWRcIixbMjI4MDVdXSxbWzEyMDY4LDEyMDY4XSxcIm1hcHBlZFwiLFsyMjgyM11dLFtbMTIwNjksMTIwNjldLFwibWFwcGVkXCIsWzIyODk5XV0sW1sxMjA3MCwxMjA3MF0sXCJtYXBwZWRcIixbMjMzNzZdXSxbWzEyMDcxLDEyMDcxXSxcIm1hcHBlZFwiLFsyMzQyNF1dLFtbMTIwNzIsMTIwNzJdLFwibWFwcGVkXCIsWzIzNTQ0XV0sW1sxMjA3MywxMjA3M10sXCJtYXBwZWRcIixbMjM1NjddXSxbWzEyMDc0LDEyMDc0XSxcIm1hcHBlZFwiLFsyMzU4Nl1dLFtbMTIwNzUsMTIwNzVdLFwibWFwcGVkXCIsWzIzNjA4XV0sW1sxMjA3NiwxMjA3Nl0sXCJtYXBwZWRcIixbMjM2NjJdXSxbWzEyMDc3LDEyMDc3XSxcIm1hcHBlZFwiLFsyMzY2NV1dLFtbMTIwNzgsMTIwNzhdLFwibWFwcGVkXCIsWzI0MDI3XV0sW1sxMjA3OSwxMjA3OV0sXCJtYXBwZWRcIixbMjQwMzddXSxbWzEyMDgwLDEyMDgwXSxcIm1hcHBlZFwiLFsyNDA0OV1dLFtbMTIwODEsMTIwODFdLFwibWFwcGVkXCIsWzI0MDYyXV0sW1sxMjA4MiwxMjA4Ml0sXCJtYXBwZWRcIixbMjQxNzhdXSxbWzEyMDgzLDEyMDgzXSxcIm1hcHBlZFwiLFsyNDE4Nl1dLFtbMTIwODQsMTIwODRdLFwibWFwcGVkXCIsWzI0MTkxXV0sW1sxMjA4NSwxMjA4NV0sXCJtYXBwZWRcIixbMjQzMDhdXSxbWzEyMDg2LDEyMDg2XSxcIm1hcHBlZFwiLFsyNDMxOF1dLFtbMTIwODcsMTIwODddLFwibWFwcGVkXCIsWzI0MzMxXV0sW1sxMjA4OCwxMjA4OF0sXCJtYXBwZWRcIixbMjQzMzldXSxbWzEyMDg5LDEyMDg5XSxcIm1hcHBlZFwiLFsyNDQwMF1dLFtbMTIwOTAsMTIwOTBdLFwibWFwcGVkXCIsWzI0NDE3XV0sW1sxMjA5MSwxMjA5MV0sXCJtYXBwZWRcIixbMjQ0MzVdXSxbWzEyMDkyLDEyMDkyXSxcIm1hcHBlZFwiLFsyNDUxNV1dLFtbMTIwOTMsMTIwOTNdLFwibWFwcGVkXCIsWzI1MDk2XV0sW1sxMjA5NCwxMjA5NF0sXCJtYXBwZWRcIixbMjUxNDJdXSxbWzEyMDk1LDEyMDk1XSxcIm1hcHBlZFwiLFsyNTE2M11dLFtbMTIwOTYsMTIwOTZdLFwibWFwcGVkXCIsWzI1OTAzXV0sW1sxMjA5NywxMjA5N10sXCJtYXBwZWRcIixbMjU5MDhdXSxbWzEyMDk4LDEyMDk4XSxcIm1hcHBlZFwiLFsyNTk5MV1dLFtbMTIwOTksMTIwOTldLFwibWFwcGVkXCIsWzI2MDA3XV0sW1sxMjEwMCwxMjEwMF0sXCJtYXBwZWRcIixbMjYwMjBdXSxbWzEyMTAxLDEyMTAxXSxcIm1hcHBlZFwiLFsyNjA0MV1dLFtbMTIxMDIsMTIxMDJdLFwibWFwcGVkXCIsWzI2MDgwXV0sW1sxMjEwMywxMjEwM10sXCJtYXBwZWRcIixbMjYwODVdXSxbWzEyMTA0LDEyMTA0XSxcIm1hcHBlZFwiLFsyNjM1Ml1dLFtbMTIxMDUsMTIxMDVdLFwibWFwcGVkXCIsWzI2Mzc2XV0sW1sxMjEwNiwxMjEwNl0sXCJtYXBwZWRcIixbMjY0MDhdXSxbWzEyMTA3LDEyMTA3XSxcIm1hcHBlZFwiLFsyNzQyNF1dLFtbMTIxMDgsMTIxMDhdLFwibWFwcGVkXCIsWzI3NDkwXV0sW1sxMjEwOSwxMjEwOV0sXCJtYXBwZWRcIixbMjc1MTNdXSxbWzEyMTEwLDEyMTEwXSxcIm1hcHBlZFwiLFsyNzU3MV1dLFtbMTIxMTEsMTIxMTFdLFwibWFwcGVkXCIsWzI3NTk1XV0sW1sxMjExMiwxMjExMl0sXCJtYXBwZWRcIixbMjc2MDRdXSxbWzEyMTEzLDEyMTEzXSxcIm1hcHBlZFwiLFsyNzYxMV1dLFtbMTIxMTQsMTIxMTRdLFwibWFwcGVkXCIsWzI3NjYzXV0sW1sxMjExNSwxMjExNV0sXCJtYXBwZWRcIixbMjc2NjhdXSxbWzEyMTE2LDEyMTE2XSxcIm1hcHBlZFwiLFsyNzcwMF1dLFtbMTIxMTcsMTIxMTddLFwibWFwcGVkXCIsWzI4Nzc5XV0sW1sxMjExOCwxMjExOF0sXCJtYXBwZWRcIixbMjkyMjZdXSxbWzEyMTE5LDEyMTE5XSxcIm1hcHBlZFwiLFsyOTIzOF1dLFtbMTIxMjAsMTIxMjBdLFwibWFwcGVkXCIsWzI5MjQzXV0sW1sxMjEyMSwxMjEyMV0sXCJtYXBwZWRcIixbMjkyNDddXSxbWzEyMTIyLDEyMTIyXSxcIm1hcHBlZFwiLFsyOTI1NV1dLFtbMTIxMjMsMTIxMjNdLFwibWFwcGVkXCIsWzI5MjczXV0sW1sxMjEyNCwxMjEyNF0sXCJtYXBwZWRcIixbMjkyNzVdXSxbWzEyMTI1LDEyMTI1XSxcIm1hcHBlZFwiLFsyOTM1Nl1dLFtbMTIxMjYsMTIxMjZdLFwibWFwcGVkXCIsWzI5NTcyXV0sW1sxMjEyNywxMjEyN10sXCJtYXBwZWRcIixbMjk1NzddXSxbWzEyMTI4LDEyMTI4XSxcIm1hcHBlZFwiLFsyOTkxNl1dLFtbMTIxMjksMTIxMjldLFwibWFwcGVkXCIsWzI5OTI2XV0sW1sxMjEzMCwxMjEzMF0sXCJtYXBwZWRcIixbMjk5NzZdXSxbWzEyMTMxLDEyMTMxXSxcIm1hcHBlZFwiLFsyOTk4M11dLFtbMTIxMzIsMTIxMzJdLFwibWFwcGVkXCIsWzI5OTkyXV0sW1sxMjEzMywxMjEzM10sXCJtYXBwZWRcIixbMzAwMDBdXSxbWzEyMTM0LDEyMTM0XSxcIm1hcHBlZFwiLFszMDA5MV1dLFtbMTIxMzUsMTIxMzVdLFwibWFwcGVkXCIsWzMwMDk4XV0sW1sxMjEzNiwxMjEzNl0sXCJtYXBwZWRcIixbMzAzMjZdXSxbWzEyMTM3LDEyMTM3XSxcIm1hcHBlZFwiLFszMDMzM11dLFtbMTIxMzgsMTIxMzhdLFwibWFwcGVkXCIsWzMwMzgyXV0sW1sxMjEzOSwxMjEzOV0sXCJtYXBwZWRcIixbMzAzOTldXSxbWzEyMTQwLDEyMTQwXSxcIm1hcHBlZFwiLFszMDQ0Nl1dLFtbMTIxNDEsMTIxNDFdLFwibWFwcGVkXCIsWzMwNjgzXV0sW1sxMjE0MiwxMjE0Ml0sXCJtYXBwZWRcIixbMzA2OTBdXSxbWzEyMTQzLDEyMTQzXSxcIm1hcHBlZFwiLFszMDcwN11dLFtbMTIxNDQsMTIxNDRdLFwibWFwcGVkXCIsWzMxMDM0XV0sW1sxMjE0NSwxMjE0NV0sXCJtYXBwZWRcIixbMzExNjBdXSxbWzEyMTQ2LDEyMTQ2XSxcIm1hcHBlZFwiLFszMTE2Nl1dLFtbMTIxNDcsMTIxNDddLFwibWFwcGVkXCIsWzMxMzQ4XV0sW1sxMjE0OCwxMjE0OF0sXCJtYXBwZWRcIixbMzE0MzVdXSxbWzEyMTQ5LDEyMTQ5XSxcIm1hcHBlZFwiLFszMTQ4MV1dLFtbMTIxNTAsMTIxNTBdLFwibWFwcGVkXCIsWzMxODU5XV0sW1sxMjE1MSwxMjE1MV0sXCJtYXBwZWRcIixbMzE5OTJdXSxbWzEyMTUyLDEyMTUyXSxcIm1hcHBlZFwiLFszMjU2Nl1dLFtbMTIxNTMsMTIxNTNdLFwibWFwcGVkXCIsWzMyNTkzXV0sW1sxMjE1NCwxMjE1NF0sXCJtYXBwZWRcIixbMzI2NTBdXSxbWzEyMTU1LDEyMTU1XSxcIm1hcHBlZFwiLFszMjcwMV1dLFtbMTIxNTYsMTIxNTZdLFwibWFwcGVkXCIsWzMyNzY5XV0sW1sxMjE1NywxMjE1N10sXCJtYXBwZWRcIixbMzI3ODBdXSxbWzEyMTU4LDEyMTU4XSxcIm1hcHBlZFwiLFszMjc4Nl1dLFtbMTIxNTksMTIxNTldLFwibWFwcGVkXCIsWzMyODE5XV0sW1sxMjE2MCwxMjE2MF0sXCJtYXBwZWRcIixbMzI4OTVdXSxbWzEyMTYxLDEyMTYxXSxcIm1hcHBlZFwiLFszMjkwNV1dLFtbMTIxNjIsMTIxNjJdLFwibWFwcGVkXCIsWzMzMjUxXV0sW1sxMjE2MywxMjE2M10sXCJtYXBwZWRcIixbMzMyNThdXSxbWzEyMTY0LDEyMTY0XSxcIm1hcHBlZFwiLFszMzI2N11dLFtbMTIxNjUsMTIxNjVdLFwibWFwcGVkXCIsWzMzMjc2XV0sW1sxMjE2NiwxMjE2Nl0sXCJtYXBwZWRcIixbMzMyOTJdXSxbWzEyMTY3LDEyMTY3XSxcIm1hcHBlZFwiLFszMzMwN11dLFtbMTIxNjgsMTIxNjhdLFwibWFwcGVkXCIsWzMzMzExXV0sW1sxMjE2OSwxMjE2OV0sXCJtYXBwZWRcIixbMzMzOTBdXSxbWzEyMTcwLDEyMTcwXSxcIm1hcHBlZFwiLFszMzM5NF1dLFtbMTIxNzEsMTIxNzFdLFwibWFwcGVkXCIsWzMzNDAwXV0sW1sxMjE3MiwxMjE3Ml0sXCJtYXBwZWRcIixbMzQzODFdXSxbWzEyMTczLDEyMTczXSxcIm1hcHBlZFwiLFszNDQxMV1dLFtbMTIxNzQsMTIxNzRdLFwibWFwcGVkXCIsWzM0ODgwXV0sW1sxMjE3NSwxMjE3NV0sXCJtYXBwZWRcIixbMzQ4OTJdXSxbWzEyMTc2LDEyMTc2XSxcIm1hcHBlZFwiLFszNDkxNV1dLFtbMTIxNzcsMTIxNzddLFwibWFwcGVkXCIsWzM1MTk4XV0sW1sxMjE3OCwxMjE3OF0sXCJtYXBwZWRcIixbMzUyMTFdXSxbWzEyMTc5LDEyMTc5XSxcIm1hcHBlZFwiLFszNTI4Ml1dLFtbMTIxODAsMTIxODBdLFwibWFwcGVkXCIsWzM1MzI4XV0sW1sxMjE4MSwxMjE4MV0sXCJtYXBwZWRcIixbMzU4OTVdXSxbWzEyMTgyLDEyMTgyXSxcIm1hcHBlZFwiLFszNTkxMF1dLFtbMTIxODMsMTIxODNdLFwibWFwcGVkXCIsWzM1OTI1XV0sW1sxMjE4NCwxMjE4NF0sXCJtYXBwZWRcIixbMzU5NjBdXSxbWzEyMTg1LDEyMTg1XSxcIm1hcHBlZFwiLFszNTk5N11dLFtbMTIxODYsMTIxODZdLFwibWFwcGVkXCIsWzM2MTk2XV0sW1sxMjE4NywxMjE4N10sXCJtYXBwZWRcIixbMzYyMDhdXSxbWzEyMTg4LDEyMTg4XSxcIm1hcHBlZFwiLFszNjI3NV1dLFtbMTIxODksMTIxODldLFwibWFwcGVkXCIsWzM2NTIzXV0sW1sxMjE5MCwxMjE5MF0sXCJtYXBwZWRcIixbMzY1NTRdXSxbWzEyMTkxLDEyMTkxXSxcIm1hcHBlZFwiLFszNjc2M11dLFtbMTIxOTIsMTIxOTJdLFwibWFwcGVkXCIsWzM2Nzg0XV0sW1sxMjE5MywxMjE5M10sXCJtYXBwZWRcIixbMzY3ODldXSxbWzEyMTk0LDEyMTk0XSxcIm1hcHBlZFwiLFszNzAwOV1dLFtbMTIxOTUsMTIxOTVdLFwibWFwcGVkXCIsWzM3MTkzXV0sW1sxMjE5NiwxMjE5Nl0sXCJtYXBwZWRcIixbMzczMThdXSxbWzEyMTk3LDEyMTk3XSxcIm1hcHBlZFwiLFszNzMyNF1dLFtbMTIxOTgsMTIxOThdLFwibWFwcGVkXCIsWzM3MzI5XV0sW1sxMjE5OSwxMjE5OV0sXCJtYXBwZWRcIixbMzgyNjNdXSxbWzEyMjAwLDEyMjAwXSxcIm1hcHBlZFwiLFszODI3Ml1dLFtbMTIyMDEsMTIyMDFdLFwibWFwcGVkXCIsWzM4NDI4XV0sW1sxMjIwMiwxMjIwMl0sXCJtYXBwZWRcIixbMzg1ODJdXSxbWzEyMjAzLDEyMjAzXSxcIm1hcHBlZFwiLFszODU4NV1dLFtbMTIyMDQsMTIyMDRdLFwibWFwcGVkXCIsWzM4NjMyXV0sW1sxMjIwNSwxMjIwNV0sXCJtYXBwZWRcIixbMzg3MzddXSxbWzEyMjA2LDEyMjA2XSxcIm1hcHBlZFwiLFszODc1MF1dLFtbMTIyMDcsMTIyMDddLFwibWFwcGVkXCIsWzM4NzU0XV0sW1sxMjIwOCwxMjIwOF0sXCJtYXBwZWRcIixbMzg3NjFdXSxbWzEyMjA5LDEyMjA5XSxcIm1hcHBlZFwiLFszODg1OV1dLFtbMTIyMTAsMTIyMTBdLFwibWFwcGVkXCIsWzM4ODkzXV0sW1sxMjIxMSwxMjIxMV0sXCJtYXBwZWRcIixbMzg4OTldXSxbWzEyMjEyLDEyMjEyXSxcIm1hcHBlZFwiLFszODkxM11dLFtbMTIyMTMsMTIyMTNdLFwibWFwcGVkXCIsWzM5MDgwXV0sW1sxMjIxNCwxMjIxNF0sXCJtYXBwZWRcIixbMzkxMzFdXSxbWzEyMjE1LDEyMjE1XSxcIm1hcHBlZFwiLFszOTEzNV1dLFtbMTIyMTYsMTIyMTZdLFwibWFwcGVkXCIsWzM5MzE4XV0sW1sxMjIxNywxMjIxN10sXCJtYXBwZWRcIixbMzkzMjFdXSxbWzEyMjE4LDEyMjE4XSxcIm1hcHBlZFwiLFszOTM0MF1dLFtbMTIyMTksMTIyMTldLFwibWFwcGVkXCIsWzM5NTkyXV0sW1sxMjIyMCwxMjIyMF0sXCJtYXBwZWRcIixbMzk2NDBdXSxbWzEyMjIxLDEyMjIxXSxcIm1hcHBlZFwiLFszOTY0N11dLFtbMTIyMjIsMTIyMjJdLFwibWFwcGVkXCIsWzM5NzE3XV0sW1sxMjIyMywxMjIyM10sXCJtYXBwZWRcIixbMzk3MjddXSxbWzEyMjI0LDEyMjI0XSxcIm1hcHBlZFwiLFszOTczMF1dLFtbMTIyMjUsMTIyMjVdLFwibWFwcGVkXCIsWzM5NzQwXV0sW1sxMjIyNiwxMjIyNl0sXCJtYXBwZWRcIixbMzk3NzBdXSxbWzEyMjI3LDEyMjI3XSxcIm1hcHBlZFwiLFs0MDE2NV1dLFtbMTIyMjgsMTIyMjhdLFwibWFwcGVkXCIsWzQwNTY1XV0sW1sxMjIyOSwxMjIyOV0sXCJtYXBwZWRcIixbNDA1NzVdXSxbWzEyMjMwLDEyMjMwXSxcIm1hcHBlZFwiLFs0MDYxM11dLFtbMTIyMzEsMTIyMzFdLFwibWFwcGVkXCIsWzQwNjM1XV0sW1sxMjIzMiwxMjIzMl0sXCJtYXBwZWRcIixbNDA2NDNdXSxbWzEyMjMzLDEyMjMzXSxcIm1hcHBlZFwiLFs0MDY1M11dLFtbMTIyMzQsMTIyMzRdLFwibWFwcGVkXCIsWzQwNjU3XV0sW1sxMjIzNSwxMjIzNV0sXCJtYXBwZWRcIixbNDA2OTddXSxbWzEyMjM2LDEyMjM2XSxcIm1hcHBlZFwiLFs0MDcwMV1dLFtbMTIyMzcsMTIyMzddLFwibWFwcGVkXCIsWzQwNzE4XV0sW1sxMjIzOCwxMjIzOF0sXCJtYXBwZWRcIixbNDA3MjNdXSxbWzEyMjM5LDEyMjM5XSxcIm1hcHBlZFwiLFs0MDczNl1dLFtbMTIyNDAsMTIyNDBdLFwibWFwcGVkXCIsWzQwNzYzXV0sW1sxMjI0MSwxMjI0MV0sXCJtYXBwZWRcIixbNDA3NzhdXSxbWzEyMjQyLDEyMjQyXSxcIm1hcHBlZFwiLFs0MDc4Nl1dLFtbMTIyNDMsMTIyNDNdLFwibWFwcGVkXCIsWzQwODQ1XV0sW1sxMjI0NCwxMjI0NF0sXCJtYXBwZWRcIixbNDA4NjBdXSxbWzEyMjQ1LDEyMjQ1XSxcIm1hcHBlZFwiLFs0MDg2NF1dLFtbMTIyNDYsMTIyNzFdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMjcyLDEyMjgzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjI4NCwxMjI4N10sXCJkaXNhbGxvd2VkXCJdLFtbMTIyODgsMTIyODhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMl1dLFtbMTIyODksMTIyODldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMjkwLDEyMjkwXSxcIm1hcHBlZFwiLFs0Nl1dLFtbMTIyOTEsMTIyOTJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMjkzLDEyMjk1XSxcInZhbGlkXCJdLFtbMTIyOTYsMTIzMjldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMzMwLDEyMzMzXSxcInZhbGlkXCJdLFtbMTIzMzQsMTIzNDFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMzQyLDEyMzQyXSxcIm1hcHBlZFwiLFsxMjMwNl1dLFtbMTIzNDMsMTIzNDNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMzQ0LDEyMzQ0XSxcIm1hcHBlZFwiLFsyMTMxM11dLFtbMTIzNDUsMTIzNDVdLFwibWFwcGVkXCIsWzIxMzE2XV0sW1sxMjM0NiwxMjM0Nl0sXCJtYXBwZWRcIixbMjEzMTddXSxbWzEyMzQ3LDEyMzQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjM0OCwxMjM0OF0sXCJ2YWxpZFwiXSxbWzEyMzQ5LDEyMzQ5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjM1MCwxMjM1MF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTIzNTEsMTIzNTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMzUyLDEyMzUyXSxcImRpc2FsbG93ZWRcIl0sW1sxMjM1MywxMjQzNl0sXCJ2YWxpZFwiXSxbWzEyNDM3LDEyNDM4XSxcInZhbGlkXCJdLFtbMTI0MzksMTI0NDBdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNDQxLDEyNDQyXSxcInZhbGlkXCJdLFtbMTI0NDMsMTI0NDNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxMjQ0MV1dLFtbMTI0NDQsMTI0NDRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxMjQ0Ml1dLFtbMTI0NDUsMTI0NDZdLFwidmFsaWRcIl0sW1sxMjQ0NywxMjQ0N10sXCJtYXBwZWRcIixbMTI0MjQsMTI0MjZdXSxbWzEyNDQ4LDEyNDQ4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjQ0OSwxMjU0Ml0sXCJ2YWxpZFwiXSxbWzEyNTQzLDEyNTQzXSxcIm1hcHBlZFwiLFsxMjQ2NywxMjQ4OF1dLFtbMTI1NDQsMTI1NDhdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNTQ5LDEyNTg4XSxcInZhbGlkXCJdLFtbMTI1ODksMTI1ODldLFwidmFsaWRcIl0sW1sxMjU5MCwxMjU5Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMTI1OTMsMTI1OTNdLFwibWFwcGVkXCIsWzQzNTJdXSxbWzEyNTk0LDEyNTk0XSxcIm1hcHBlZFwiLFs0MzUzXV0sW1sxMjU5NSwxMjU5NV0sXCJtYXBwZWRcIixbNDUyMl1dLFtbMTI1OTYsMTI1OTZdLFwibWFwcGVkXCIsWzQzNTRdXSxbWzEyNTk3LDEyNTk3XSxcIm1hcHBlZFwiLFs0NTI0XV0sW1sxMjU5OCwxMjU5OF0sXCJtYXBwZWRcIixbNDUyNV1dLFtbMTI1OTksMTI1OTldLFwibWFwcGVkXCIsWzQzNTVdXSxbWzEyNjAwLDEyNjAwXSxcIm1hcHBlZFwiLFs0MzU2XV0sW1sxMjYwMSwxMjYwMV0sXCJtYXBwZWRcIixbNDM1N11dLFtbMTI2MDIsMTI2MDJdLFwibWFwcGVkXCIsWzQ1MjhdXSxbWzEyNjAzLDEyNjAzXSxcIm1hcHBlZFwiLFs0NTI5XV0sW1sxMjYwNCwxMjYwNF0sXCJtYXBwZWRcIixbNDUzMF1dLFtbMTI2MDUsMTI2MDVdLFwibWFwcGVkXCIsWzQ1MzFdXSxbWzEyNjA2LDEyNjA2XSxcIm1hcHBlZFwiLFs0NTMyXV0sW1sxMjYwNywxMjYwN10sXCJtYXBwZWRcIixbNDUzM11dLFtbMTI2MDgsMTI2MDhdLFwibWFwcGVkXCIsWzQzNzhdXSxbWzEyNjA5LDEyNjA5XSxcIm1hcHBlZFwiLFs0MzU4XV0sW1sxMjYxMCwxMjYxMF0sXCJtYXBwZWRcIixbNDM1OV1dLFtbMTI2MTEsMTI2MTFdLFwibWFwcGVkXCIsWzQzNjBdXSxbWzEyNjEyLDEyNjEyXSxcIm1hcHBlZFwiLFs0Mzg1XV0sW1sxMjYxMywxMjYxM10sXCJtYXBwZWRcIixbNDM2MV1dLFtbMTI2MTQsMTI2MTRdLFwibWFwcGVkXCIsWzQzNjJdXSxbWzEyNjE1LDEyNjE1XSxcIm1hcHBlZFwiLFs0MzYzXV0sW1sxMjYxNiwxMjYxNl0sXCJtYXBwZWRcIixbNDM2NF1dLFtbMTI2MTcsMTI2MTddLFwibWFwcGVkXCIsWzQzNjVdXSxbWzEyNjE4LDEyNjE4XSxcIm1hcHBlZFwiLFs0MzY2XV0sW1sxMjYxOSwxMjYxOV0sXCJtYXBwZWRcIixbNDM2N11dLFtbMTI2MjAsMTI2MjBdLFwibWFwcGVkXCIsWzQzNjhdXSxbWzEyNjIxLDEyNjIxXSxcIm1hcHBlZFwiLFs0MzY5XV0sW1sxMjYyMiwxMjYyMl0sXCJtYXBwZWRcIixbNDM3MF1dLFtbMTI2MjMsMTI2MjNdLFwibWFwcGVkXCIsWzQ0NDldXSxbWzEyNjI0LDEyNjI0XSxcIm1hcHBlZFwiLFs0NDUwXV0sW1sxMjYyNSwxMjYyNV0sXCJtYXBwZWRcIixbNDQ1MV1dLFtbMTI2MjYsMTI2MjZdLFwibWFwcGVkXCIsWzQ0NTJdXSxbWzEyNjI3LDEyNjI3XSxcIm1hcHBlZFwiLFs0NDUzXV0sW1sxMjYyOCwxMjYyOF0sXCJtYXBwZWRcIixbNDQ1NF1dLFtbMTI2MjksMTI2MjldLFwibWFwcGVkXCIsWzQ0NTVdXSxbWzEyNjMwLDEyNjMwXSxcIm1hcHBlZFwiLFs0NDU2XV0sW1sxMjYzMSwxMjYzMV0sXCJtYXBwZWRcIixbNDQ1N11dLFtbMTI2MzIsMTI2MzJdLFwibWFwcGVkXCIsWzQ0NThdXSxbWzEyNjMzLDEyNjMzXSxcIm1hcHBlZFwiLFs0NDU5XV0sW1sxMjYzNCwxMjYzNF0sXCJtYXBwZWRcIixbNDQ2MF1dLFtbMTI2MzUsMTI2MzVdLFwibWFwcGVkXCIsWzQ0NjFdXSxbWzEyNjM2LDEyNjM2XSxcIm1hcHBlZFwiLFs0NDYyXV0sW1sxMjYzNywxMjYzN10sXCJtYXBwZWRcIixbNDQ2M11dLFtbMTI2MzgsMTI2MzhdLFwibWFwcGVkXCIsWzQ0NjRdXSxbWzEyNjM5LDEyNjM5XSxcIm1hcHBlZFwiLFs0NDY1XV0sW1sxMjY0MCwxMjY0MF0sXCJtYXBwZWRcIixbNDQ2Nl1dLFtbMTI2NDEsMTI2NDFdLFwibWFwcGVkXCIsWzQ0NjddXSxbWzEyNjQyLDEyNjQyXSxcIm1hcHBlZFwiLFs0NDY4XV0sW1sxMjY0MywxMjY0M10sXCJtYXBwZWRcIixbNDQ2OV1dLFtbMTI2NDQsMTI2NDRdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNjQ1LDEyNjQ1XSxcIm1hcHBlZFwiLFs0MzcyXV0sW1sxMjY0NiwxMjY0Nl0sXCJtYXBwZWRcIixbNDM3M11dLFtbMTI2NDcsMTI2NDddLFwibWFwcGVkXCIsWzQ1NTFdXSxbWzEyNjQ4LDEyNjQ4XSxcIm1hcHBlZFwiLFs0NTUyXV0sW1sxMjY0OSwxMjY0OV0sXCJtYXBwZWRcIixbNDU1Nl1dLFtbMTI2NTAsMTI2NTBdLFwibWFwcGVkXCIsWzQ1NThdXSxbWzEyNjUxLDEyNjUxXSxcIm1hcHBlZFwiLFs0NTYzXV0sW1sxMjY1MiwxMjY1Ml0sXCJtYXBwZWRcIixbNDU2N11dLFtbMTI2NTMsMTI2NTNdLFwibWFwcGVkXCIsWzQ1NjldXSxbWzEyNjU0LDEyNjU0XSxcIm1hcHBlZFwiLFs0MzgwXV0sW1sxMjY1NSwxMjY1NV0sXCJtYXBwZWRcIixbNDU3M11dLFtbMTI2NTYsMTI2NTZdLFwibWFwcGVkXCIsWzQ1NzVdXSxbWzEyNjU3LDEyNjU3XSxcIm1hcHBlZFwiLFs0MzgxXV0sW1sxMjY1OCwxMjY1OF0sXCJtYXBwZWRcIixbNDM4Ml1dLFtbMTI2NTksMTI2NTldLFwibWFwcGVkXCIsWzQzODRdXSxbWzEyNjYwLDEyNjYwXSxcIm1hcHBlZFwiLFs0Mzg2XV0sW1sxMjY2MSwxMjY2MV0sXCJtYXBwZWRcIixbNDM4N11dLFtbMTI2NjIsMTI2NjJdLFwibWFwcGVkXCIsWzQzOTFdXSxbWzEyNjYzLDEyNjYzXSxcIm1hcHBlZFwiLFs0MzkzXV0sW1sxMjY2NCwxMjY2NF0sXCJtYXBwZWRcIixbNDM5NV1dLFtbMTI2NjUsMTI2NjVdLFwibWFwcGVkXCIsWzQzOTZdXSxbWzEyNjY2LDEyNjY2XSxcIm1hcHBlZFwiLFs0Mzk3XV0sW1sxMjY2NywxMjY2N10sXCJtYXBwZWRcIixbNDM5OF1dLFtbMTI2NjgsMTI2NjhdLFwibWFwcGVkXCIsWzQzOTldXSxbWzEyNjY5LDEyNjY5XSxcIm1hcHBlZFwiLFs0NDAyXV0sW1sxMjY3MCwxMjY3MF0sXCJtYXBwZWRcIixbNDQwNl1dLFtbMTI2NzEsMTI2NzFdLFwibWFwcGVkXCIsWzQ0MTZdXSxbWzEyNjcyLDEyNjcyXSxcIm1hcHBlZFwiLFs0NDIzXV0sW1sxMjY3MywxMjY3M10sXCJtYXBwZWRcIixbNDQyOF1dLFtbMTI2NzQsMTI2NzRdLFwibWFwcGVkXCIsWzQ1OTNdXSxbWzEyNjc1LDEyNjc1XSxcIm1hcHBlZFwiLFs0NTk0XV0sW1sxMjY3NiwxMjY3Nl0sXCJtYXBwZWRcIixbNDQzOV1dLFtbMTI2NzcsMTI2NzddLFwibWFwcGVkXCIsWzQ0NDBdXSxbWzEyNjc4LDEyNjc4XSxcIm1hcHBlZFwiLFs0NDQxXV0sW1sxMjY3OSwxMjY3OV0sXCJtYXBwZWRcIixbNDQ4NF1dLFtbMTI2ODAsMTI2ODBdLFwibWFwcGVkXCIsWzQ0ODVdXSxbWzEyNjgxLDEyNjgxXSxcIm1hcHBlZFwiLFs0NDg4XV0sW1sxMjY4MiwxMjY4Ml0sXCJtYXBwZWRcIixbNDQ5N11dLFtbMTI2ODMsMTI2ODNdLFwibWFwcGVkXCIsWzQ0OThdXSxbWzEyNjg0LDEyNjg0XSxcIm1hcHBlZFwiLFs0NTAwXV0sW1sxMjY4NSwxMjY4NV0sXCJtYXBwZWRcIixbNDUxMF1dLFtbMTI2ODYsMTI2ODZdLFwibWFwcGVkXCIsWzQ1MTNdXSxbWzEyNjg3LDEyNjg3XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY4OCwxMjY4OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI2OTAsMTI2OTBdLFwibWFwcGVkXCIsWzE5OTY4XV0sW1sxMjY5MSwxMjY5MV0sXCJtYXBwZWRcIixbMjAxMDhdXSxbWzEyNjkyLDEyNjkyXSxcIm1hcHBlZFwiLFsxOTk3N11dLFtbMTI2OTMsMTI2OTNdLFwibWFwcGVkXCIsWzIyMjM1XV0sW1sxMjY5NCwxMjY5NF0sXCJtYXBwZWRcIixbMTk5NzhdXSxbWzEyNjk1LDEyNjk1XSxcIm1hcHBlZFwiLFsyMDAxM11dLFtbMTI2OTYsMTI2OTZdLFwibWFwcGVkXCIsWzE5OTc5XV0sW1sxMjY5NywxMjY5N10sXCJtYXBwZWRcIixbMzAwMDJdXSxbWzEyNjk4LDEyNjk4XSxcIm1hcHBlZFwiLFsyMDA1N11dLFtbMTI2OTksMTI2OTldLFwibWFwcGVkXCIsWzE5OTkzXV0sW1sxMjcwMCwxMjcwMF0sXCJtYXBwZWRcIixbMTk5NjldXSxbWzEyNzAxLDEyNzAxXSxcIm1hcHBlZFwiLFsyMjgyNV1dLFtbMTI3MDIsMTI3MDJdLFwibWFwcGVkXCIsWzIyMzIwXV0sW1sxMjcwMywxMjcwM10sXCJtYXBwZWRcIixbMjAxNTRdXSxbWzEyNzA0LDEyNzI3XSxcInZhbGlkXCJdLFtbMTI3MjgsMTI3MzBdLFwidmFsaWRcIl0sW1sxMjczMSwxMjczNV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3MzYsMTI3NTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzUyLDEyNzcxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc3MiwxMjc4M10sXCJkaXNhbGxvd2VkXCJdLFtbMTI3ODQsMTI3OTldLFwidmFsaWRcIl0sW1sxMjgwMCwxMjgwMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNTIsNDFdXSxbWzEyODAxLDEyODAxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM1NCw0MV1dLFtbMTI4MDIsMTI4MDJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzU1LDQxXV0sW1sxMjgwMywxMjgwM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNTcsNDFdXSxbWzEyODA0LDEyODA0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM1OCw0MV1dLFtbMTI4MDUsMTI4MDVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzU5LDQxXV0sW1sxMjgwNiwxMjgwNl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNjEsNDFdXSxbWzEyODA3LDEyODA3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM2Myw0MV1dLFtbMTI4MDgsMTI4MDhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzY0LDQxXV0sW1sxMjgwOSwxMjgwOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNjYsNDFdXSxbWzEyODEwLDEyODEwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM2Nyw0MV1dLFtbMTI4MTEsMTI4MTFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0MzY4LDQxXV0sW1sxMjgxMiwxMjgxMl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDQzNjksNDFdXSxbWzEyODEzLDEyODEzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsNDM3MCw0MV1dLFtbMTI4MTQsMTI4MTRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0NDAzMiw0MV1dLFtbMTI4MTUsMTI4MTVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0NTIwOCw0MV1dLFtbMTI4MTYsMTI4MTZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0NTc5Niw0MV1dLFtbMTI4MTcsMTI4MTddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0Njk3Miw0MV1dLFtbMTI4MTgsMTI4MThdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0NzU2MCw0MV1dLFtbMTI4MTksMTI4MTldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0ODE0OCw0MV1dLFtbMTI4MjAsMTI4MjBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw0OTMyNCw0MV1dLFtbMTI4MjEsMTI4MjFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1MDUwMCw0MV1dLFtbMTI4MjIsMTI4MjJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1MTA4OCw0MV1dLFtbMTI4MjMsMTI4MjNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1MjI2NCw0MV1dLFtbMTI4MjQsMTI4MjRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1Mjg1Miw0MV1dLFtbMTI4MjUsMTI4MjVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1MzQ0MCw0MV1dLFtbMTI4MjYsMTI4MjZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1NDAyOCw0MV1dLFtbMTI4MjcsMTI4MjddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1NDYxNiw0MV1dLFtbMTI4MjgsMTI4MjhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1MTQ1Miw0MV1dLFtbMTI4MjksMTI4MjldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1MDcyNCw1MTIwNCw0MV1dLFtbMTI4MzAsMTI4MzBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw1MDcyNCw1NDk4MCw0MV1dLFtbMTI4MzEsMTI4MzFdLFwiZGlzYWxsb3dlZFwiXSxbWzEyODMyLDEyODMyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTk5NjgsNDFdXSxbWzEyODMzLDEyODMzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjAxMDgsNDFdXSxbWzEyODM0LDEyODM0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTk5NzcsNDFdXSxbWzEyODM1LDEyODM1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjIyMzUsNDFdXSxbWzEyODM2LDEyODM2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjAxMTYsNDFdXSxbWzEyODM3LDEyODM3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjA4NDUsNDFdXSxbWzEyODM4LDEyODM4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMTk5NzEsNDFdXSxbWzEyODM5LDEyODM5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjA4NDMsNDFdXSxbWzEyODQwLDEyODQwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjAwNjEsNDFdXSxbWzEyODQxLDEyODQxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjEzMTMsNDFdXSxbWzEyODQyLDEyODQyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjYzNzYsNDFdXSxbWzEyODQzLDEyODQzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjg3NzksNDFdXSxbWzEyODQ0LDEyODQ0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjc3MDAsNDFdXSxbWzEyODQ1LDEyODQ1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjY0MDgsNDFdXSxbWzEyODQ2LDEyODQ2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMzczMjksNDFdXSxbWzEyODQ3LDEyODQ3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjIzMDMsNDFdXSxbWzEyODQ4LDEyODQ4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjYwODUsNDFdXSxbWzEyODQ5LDEyODQ5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjY2NjYsNDFdXSxbWzEyODUwLDEyODUwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjYzNzcsNDFdXSxbWzEyODUxLDEyODUxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMzEwMzgsNDFdXSxbWzEyODUyLDEyODUyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjE1MTcsNDFdXSxbWzEyODUzLDEyODUzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjkzMDUsNDFdXSxbWzEyODU0LDEyODU0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMzYwMDEsNDFdXSxbWzEyODU1LDEyODU1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMzEwNjksNDFdXSxbWzEyODU2LDEyODU2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjExNzIsNDFdXSxbWzEyODU3LDEyODU3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjAxOTUsNDFdXSxbWzEyODU4LDEyODU4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjE2MjgsNDFdXSxbWzEyODU5LDEyODU5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjMzOTgsNDFdXSxbWzEyODYwLDEyODYwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMzA0MzUsNDFdXSxbWzEyODYxLDEyODYxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjAyMjUsNDFdXSxbWzEyODYyLDEyODYyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMzYwMzksNDFdXSxbWzEyODYzLDEyODYzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjEzMzIsNDFdXSxbWzEyODY0LDEyODY0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMzEwODUsNDFdXSxbWzEyODY1LDEyODY1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMjAyNDEsNDFdXSxbWzEyODY2LDEyODY2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMzMyNTgsNDFdXSxbWzEyODY3LDEyODY3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsMzMyNjcsNDFdXSxbWzEyODY4LDEyODY4XSxcIm1hcHBlZFwiLFsyMTgzOV1dLFtbMTI4NjksMTI4NjldLFwibWFwcGVkXCIsWzI0MTg4XV0sW1sxMjg3MCwxMjg3MF0sXCJtYXBwZWRcIixbMjU5OTFdXSxbWzEyODcxLDEyODcxXSxcIm1hcHBlZFwiLFszMTYzMV1dLFtbMTI4NzIsMTI4NzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyODgwLDEyODgwXSxcIm1hcHBlZFwiLFsxMTIsMTE2LDEwMV1dLFtbMTI4ODEsMTI4ODFdLFwibWFwcGVkXCIsWzUwLDQ5XV0sW1sxMjg4MiwxMjg4Ml0sXCJtYXBwZWRcIixbNTAsNTBdXSxbWzEyODgzLDEyODgzXSxcIm1hcHBlZFwiLFs1MCw1MV1dLFtbMTI4ODQsMTI4ODRdLFwibWFwcGVkXCIsWzUwLDUyXV0sW1sxMjg4NSwxMjg4NV0sXCJtYXBwZWRcIixbNTAsNTNdXSxbWzEyODg2LDEyODg2XSxcIm1hcHBlZFwiLFs1MCw1NF1dLFtbMTI4ODcsMTI4ODddLFwibWFwcGVkXCIsWzUwLDU1XV0sW1sxMjg4OCwxMjg4OF0sXCJtYXBwZWRcIixbNTAsNTZdXSxbWzEyODg5LDEyODg5XSxcIm1hcHBlZFwiLFs1MCw1N11dLFtbMTI4OTAsMTI4OTBdLFwibWFwcGVkXCIsWzUxLDQ4XV0sW1sxMjg5MSwxMjg5MV0sXCJtYXBwZWRcIixbNTEsNDldXSxbWzEyODkyLDEyODkyXSxcIm1hcHBlZFwiLFs1MSw1MF1dLFtbMTI4OTMsMTI4OTNdLFwibWFwcGVkXCIsWzUxLDUxXV0sW1sxMjg5NCwxMjg5NF0sXCJtYXBwZWRcIixbNTEsNTJdXSxbWzEyODk1LDEyODk1XSxcIm1hcHBlZFwiLFs1MSw1M11dLFtbMTI4OTYsMTI4OTZdLFwibWFwcGVkXCIsWzQzNTJdXSxbWzEyODk3LDEyODk3XSxcIm1hcHBlZFwiLFs0MzU0XV0sW1sxMjg5OCwxMjg5OF0sXCJtYXBwZWRcIixbNDM1NV1dLFtbMTI4OTksMTI4OTldLFwibWFwcGVkXCIsWzQzNTddXSxbWzEyOTAwLDEyOTAwXSxcIm1hcHBlZFwiLFs0MzU4XV0sW1sxMjkwMSwxMjkwMV0sXCJtYXBwZWRcIixbNDM1OV1dLFtbMTI5MDIsMTI5MDJdLFwibWFwcGVkXCIsWzQzNjFdXSxbWzEyOTAzLDEyOTAzXSxcIm1hcHBlZFwiLFs0MzYzXV0sW1sxMjkwNCwxMjkwNF0sXCJtYXBwZWRcIixbNDM2NF1dLFtbMTI5MDUsMTI5MDVdLFwibWFwcGVkXCIsWzQzNjZdXSxbWzEyOTA2LDEyOTA2XSxcIm1hcHBlZFwiLFs0MzY3XV0sW1sxMjkwNywxMjkwN10sXCJtYXBwZWRcIixbNDM2OF1dLFtbMTI5MDgsMTI5MDhdLFwibWFwcGVkXCIsWzQzNjldXSxbWzEyOTA5LDEyOTA5XSxcIm1hcHBlZFwiLFs0MzcwXV0sW1sxMjkxMCwxMjkxMF0sXCJtYXBwZWRcIixbNDQwMzJdXSxbWzEyOTExLDEyOTExXSxcIm1hcHBlZFwiLFs0NTIwOF1dLFtbMTI5MTIsMTI5MTJdLFwibWFwcGVkXCIsWzQ1Nzk2XV0sW1sxMjkxMywxMjkxM10sXCJtYXBwZWRcIixbNDY5NzJdXSxbWzEyOTE0LDEyOTE0XSxcIm1hcHBlZFwiLFs0NzU2MF1dLFtbMTI5MTUsMTI5MTVdLFwibWFwcGVkXCIsWzQ4MTQ4XV0sW1sxMjkxNiwxMjkxNl0sXCJtYXBwZWRcIixbNDkzMjRdXSxbWzEyOTE3LDEyOTE3XSxcIm1hcHBlZFwiLFs1MDUwMF1dLFtbMTI5MTgsMTI5MThdLFwibWFwcGVkXCIsWzUxMDg4XV0sW1sxMjkxOSwxMjkxOV0sXCJtYXBwZWRcIixbNTIyNjRdXSxbWzEyOTIwLDEyOTIwXSxcIm1hcHBlZFwiLFs1Mjg1Ml1dLFtbMTI5MjEsMTI5MjFdLFwibWFwcGVkXCIsWzUzNDQwXV0sW1sxMjkyMiwxMjkyMl0sXCJtYXBwZWRcIixbNTQwMjhdXSxbWzEyOTIzLDEyOTIzXSxcIm1hcHBlZFwiLFs1NDYxNl1dLFtbMTI5MjQsMTI5MjRdLFwibWFwcGVkXCIsWzUyMjgwLDQ0MjU2XV0sW1sxMjkyNSwxMjkyNV0sXCJtYXBwZWRcIixbNTE0NTIsNTEwMzJdXSxbWzEyOTI2LDEyOTI2XSxcIm1hcHBlZFwiLFs1MDg2NF1dLFtbMTI5MjcsMTI5MjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyOTI4LDEyOTI4XSxcIm1hcHBlZFwiLFsxOTk2OF1dLFtbMTI5MjksMTI5MjldLFwibWFwcGVkXCIsWzIwMTA4XV0sW1sxMjkzMCwxMjkzMF0sXCJtYXBwZWRcIixbMTk5NzddXSxbWzEyOTMxLDEyOTMxXSxcIm1hcHBlZFwiLFsyMjIzNV1dLFtbMTI5MzIsMTI5MzJdLFwibWFwcGVkXCIsWzIwMTE2XV0sW1sxMjkzMywxMjkzM10sXCJtYXBwZWRcIixbMjA4NDVdXSxbWzEyOTM0LDEyOTM0XSxcIm1hcHBlZFwiLFsxOTk3MV1dLFtbMTI5MzUsMTI5MzVdLFwibWFwcGVkXCIsWzIwODQzXV0sW1sxMjkzNiwxMjkzNl0sXCJtYXBwZWRcIixbMjAwNjFdXSxbWzEyOTM3LDEyOTM3XSxcIm1hcHBlZFwiLFsyMTMxM11dLFtbMTI5MzgsMTI5MzhdLFwibWFwcGVkXCIsWzI2Mzc2XV0sW1sxMjkzOSwxMjkzOV0sXCJtYXBwZWRcIixbMjg3NzldXSxbWzEyOTQwLDEyOTQwXSxcIm1hcHBlZFwiLFsyNzcwMF1dLFtbMTI5NDEsMTI5NDFdLFwibWFwcGVkXCIsWzI2NDA4XV0sW1sxMjk0MiwxMjk0Ml0sXCJtYXBwZWRcIixbMzczMjldXSxbWzEyOTQzLDEyOTQzXSxcIm1hcHBlZFwiLFsyMjMwM11dLFtbMTI5NDQsMTI5NDRdLFwibWFwcGVkXCIsWzI2MDg1XV0sW1sxMjk0NSwxMjk0NV0sXCJtYXBwZWRcIixbMjY2NjZdXSxbWzEyOTQ2LDEyOTQ2XSxcIm1hcHBlZFwiLFsyNjM3N11dLFtbMTI5NDcsMTI5NDddLFwibWFwcGVkXCIsWzMxMDM4XV0sW1sxMjk0OCwxMjk0OF0sXCJtYXBwZWRcIixbMjE1MTddXSxbWzEyOTQ5LDEyOTQ5XSxcIm1hcHBlZFwiLFsyOTMwNV1dLFtbMTI5NTAsMTI5NTBdLFwibWFwcGVkXCIsWzM2MDAxXV0sW1sxMjk1MSwxMjk1MV0sXCJtYXBwZWRcIixbMzEwNjldXSxbWzEyOTUyLDEyOTUyXSxcIm1hcHBlZFwiLFsyMTE3Ml1dLFtbMTI5NTMsMTI5NTNdLFwibWFwcGVkXCIsWzMxMTkyXV0sW1sxMjk1NCwxMjk1NF0sXCJtYXBwZWRcIixbMzAwMDddXSxbWzEyOTU1LDEyOTU1XSxcIm1hcHBlZFwiLFsyMjg5OV1dLFtbMTI5NTYsMTI5NTZdLFwibWFwcGVkXCIsWzM2OTY5XV0sW1sxMjk1NywxMjk1N10sXCJtYXBwZWRcIixbMjA3NzhdXSxbWzEyOTU4LDEyOTU4XSxcIm1hcHBlZFwiLFsyMTM2MF1dLFtbMTI5NTksMTI5NTldLFwibWFwcGVkXCIsWzI3ODgwXV0sW1sxMjk2MCwxMjk2MF0sXCJtYXBwZWRcIixbMzg5MTddXSxbWzEyOTYxLDEyOTYxXSxcIm1hcHBlZFwiLFsyMDI0MV1dLFtbMTI5NjIsMTI5NjJdLFwibWFwcGVkXCIsWzIwODg5XV0sW1sxMjk2MywxMjk2M10sXCJtYXBwZWRcIixbMjc0OTFdXSxbWzEyOTY0LDEyOTY0XSxcIm1hcHBlZFwiLFsxOTk3OF1dLFtbMTI5NjUsMTI5NjVdLFwibWFwcGVkXCIsWzIwMDEzXV0sW1sxMjk2NiwxMjk2Nl0sXCJtYXBwZWRcIixbMTk5NzldXSxbWzEyOTY3LDEyOTY3XSxcIm1hcHBlZFwiLFsyNDAzOF1dLFtbMTI5NjgsMTI5NjhdLFwibWFwcGVkXCIsWzIxNDkxXV0sW1sxMjk2OSwxMjk2OV0sXCJtYXBwZWRcIixbMjEzMDddXSxbWzEyOTcwLDEyOTcwXSxcIm1hcHBlZFwiLFsyMzQ0N11dLFtbMTI5NzEsMTI5NzFdLFwibWFwcGVkXCIsWzIzMzk4XV0sW1sxMjk3MiwxMjk3Ml0sXCJtYXBwZWRcIixbMzA0MzVdXSxbWzEyOTczLDEyOTczXSxcIm1hcHBlZFwiLFsyMDIyNV1dLFtbMTI5NzQsMTI5NzRdLFwibWFwcGVkXCIsWzM2MDM5XV0sW1sxMjk3NSwxMjk3NV0sXCJtYXBwZWRcIixbMjEzMzJdXSxbWzEyOTc2LDEyOTc2XSxcIm1hcHBlZFwiLFsyMjgxMl1dLFtbMTI5NzcsMTI5NzddLFwibWFwcGVkXCIsWzUxLDU0XV0sW1sxMjk3OCwxMjk3OF0sXCJtYXBwZWRcIixbNTEsNTVdXSxbWzEyOTc5LDEyOTc5XSxcIm1hcHBlZFwiLFs1MSw1Nl1dLFtbMTI5ODAsMTI5ODBdLFwibWFwcGVkXCIsWzUxLDU3XV0sW1sxMjk4MSwxMjk4MV0sXCJtYXBwZWRcIixbNTIsNDhdXSxbWzEyOTgyLDEyOTgyXSxcIm1hcHBlZFwiLFs1Miw0OV1dLFtbMTI5ODMsMTI5ODNdLFwibWFwcGVkXCIsWzUyLDUwXV0sW1sxMjk4NCwxMjk4NF0sXCJtYXBwZWRcIixbNTIsNTFdXSxbWzEyOTg1LDEyOTg1XSxcIm1hcHBlZFwiLFs1Miw1Ml1dLFtbMTI5ODYsMTI5ODZdLFwibWFwcGVkXCIsWzUyLDUzXV0sW1sxMjk4NywxMjk4N10sXCJtYXBwZWRcIixbNTIsNTRdXSxbWzEyOTg4LDEyOTg4XSxcIm1hcHBlZFwiLFs1Miw1NV1dLFtbMTI5ODksMTI5ODldLFwibWFwcGVkXCIsWzUyLDU2XV0sW1sxMjk5MCwxMjk5MF0sXCJtYXBwZWRcIixbNTIsNTddXSxbWzEyOTkxLDEyOTkxXSxcIm1hcHBlZFwiLFs1Myw0OF1dLFtbMTI5OTIsMTI5OTJdLFwibWFwcGVkXCIsWzQ5LDI2Mzc2XV0sW1sxMjk5MywxMjk5M10sXCJtYXBwZWRcIixbNTAsMjYzNzZdXSxbWzEyOTk0LDEyOTk0XSxcIm1hcHBlZFwiLFs1MSwyNjM3Nl1dLFtbMTI5OTUsMTI5OTVdLFwibWFwcGVkXCIsWzUyLDI2Mzc2XV0sW1sxMjk5NiwxMjk5Nl0sXCJtYXBwZWRcIixbNTMsMjYzNzZdXSxbWzEyOTk3LDEyOTk3XSxcIm1hcHBlZFwiLFs1NCwyNjM3Nl1dLFtbMTI5OTgsMTI5OThdLFwibWFwcGVkXCIsWzU1LDI2Mzc2XV0sW1sxMjk5OSwxMjk5OV0sXCJtYXBwZWRcIixbNTYsMjYzNzZdXSxbWzEzMDAwLDEzMDAwXSxcIm1hcHBlZFwiLFs1NywyNjM3Nl1dLFtbMTMwMDEsMTMwMDFdLFwibWFwcGVkXCIsWzQ5LDQ4LDI2Mzc2XV0sW1sxMzAwMiwxMzAwMl0sXCJtYXBwZWRcIixbNDksNDksMjYzNzZdXSxbWzEzMDAzLDEzMDAzXSxcIm1hcHBlZFwiLFs0OSw1MCwyNjM3Nl1dLFtbMTMwMDQsMTMwMDRdLFwibWFwcGVkXCIsWzEwNCwxMDNdXSxbWzEzMDA1LDEzMDA1XSxcIm1hcHBlZFwiLFsxMDEsMTE0LDEwM11dLFtbMTMwMDYsMTMwMDZdLFwibWFwcGVkXCIsWzEwMSwxMThdXSxbWzEzMDA3LDEzMDA3XSxcIm1hcHBlZFwiLFsxMDgsMTE2LDEwMF1dLFtbMTMwMDgsMTMwMDhdLFwibWFwcGVkXCIsWzEyNDUwXV0sW1sxMzAwOSwxMzAwOV0sXCJtYXBwZWRcIixbMTI0NTJdXSxbWzEzMDEwLDEzMDEwXSxcIm1hcHBlZFwiLFsxMjQ1NF1dLFtbMTMwMTEsMTMwMTFdLFwibWFwcGVkXCIsWzEyNDU2XV0sW1sxMzAxMiwxMzAxMl0sXCJtYXBwZWRcIixbMTI0NThdXSxbWzEzMDEzLDEzMDEzXSxcIm1hcHBlZFwiLFsxMjQ1OV1dLFtbMTMwMTQsMTMwMTRdLFwibWFwcGVkXCIsWzEyNDYxXV0sW1sxMzAxNSwxMzAxNV0sXCJtYXBwZWRcIixbMTI0NjNdXSxbWzEzMDE2LDEzMDE2XSxcIm1hcHBlZFwiLFsxMjQ2NV1dLFtbMTMwMTcsMTMwMTddLFwibWFwcGVkXCIsWzEyNDY3XV0sW1sxMzAxOCwxMzAxOF0sXCJtYXBwZWRcIixbMTI0NjldXSxbWzEzMDE5LDEzMDE5XSxcIm1hcHBlZFwiLFsxMjQ3MV1dLFtbMTMwMjAsMTMwMjBdLFwibWFwcGVkXCIsWzEyNDczXV0sW1sxMzAyMSwxMzAyMV0sXCJtYXBwZWRcIixbMTI0NzVdXSxbWzEzMDIyLDEzMDIyXSxcIm1hcHBlZFwiLFsxMjQ3N11dLFtbMTMwMjMsMTMwMjNdLFwibWFwcGVkXCIsWzEyNDc5XV0sW1sxMzAyNCwxMzAyNF0sXCJtYXBwZWRcIixbMTI0ODFdXSxbWzEzMDI1LDEzMDI1XSxcIm1hcHBlZFwiLFsxMjQ4NF1dLFtbMTMwMjYsMTMwMjZdLFwibWFwcGVkXCIsWzEyNDg2XV0sW1sxMzAyNywxMzAyN10sXCJtYXBwZWRcIixbMTI0ODhdXSxbWzEzMDI4LDEzMDI4XSxcIm1hcHBlZFwiLFsxMjQ5MF1dLFtbMTMwMjksMTMwMjldLFwibWFwcGVkXCIsWzEyNDkxXV0sW1sxMzAzMCwxMzAzMF0sXCJtYXBwZWRcIixbMTI0OTJdXSxbWzEzMDMxLDEzMDMxXSxcIm1hcHBlZFwiLFsxMjQ5M11dLFtbMTMwMzIsMTMwMzJdLFwibWFwcGVkXCIsWzEyNDk0XV0sW1sxMzAzMywxMzAzM10sXCJtYXBwZWRcIixbMTI0OTVdXSxbWzEzMDM0LDEzMDM0XSxcIm1hcHBlZFwiLFsxMjQ5OF1dLFtbMTMwMzUsMTMwMzVdLFwibWFwcGVkXCIsWzEyNTAxXV0sW1sxMzAzNiwxMzAzNl0sXCJtYXBwZWRcIixbMTI1MDRdXSxbWzEzMDM3LDEzMDM3XSxcIm1hcHBlZFwiLFsxMjUwN11dLFtbMTMwMzgsMTMwMzhdLFwibWFwcGVkXCIsWzEyNTEwXV0sW1sxMzAzOSwxMzAzOV0sXCJtYXBwZWRcIixbMTI1MTFdXSxbWzEzMDQwLDEzMDQwXSxcIm1hcHBlZFwiLFsxMjUxMl1dLFtbMTMwNDEsMTMwNDFdLFwibWFwcGVkXCIsWzEyNTEzXV0sW1sxMzA0MiwxMzA0Ml0sXCJtYXBwZWRcIixbMTI1MTRdXSxbWzEzMDQzLDEzMDQzXSxcIm1hcHBlZFwiLFsxMjUxNl1dLFtbMTMwNDQsMTMwNDRdLFwibWFwcGVkXCIsWzEyNTE4XV0sW1sxMzA0NSwxMzA0NV0sXCJtYXBwZWRcIixbMTI1MjBdXSxbWzEzMDQ2LDEzMDQ2XSxcIm1hcHBlZFwiLFsxMjUyMV1dLFtbMTMwNDcsMTMwNDddLFwibWFwcGVkXCIsWzEyNTIyXV0sW1sxMzA0OCwxMzA0OF0sXCJtYXBwZWRcIixbMTI1MjNdXSxbWzEzMDQ5LDEzMDQ5XSxcIm1hcHBlZFwiLFsxMjUyNF1dLFtbMTMwNTAsMTMwNTBdLFwibWFwcGVkXCIsWzEyNTI1XV0sW1sxMzA1MSwxMzA1MV0sXCJtYXBwZWRcIixbMTI1MjddXSxbWzEzMDUyLDEzMDUyXSxcIm1hcHBlZFwiLFsxMjUyOF1dLFtbMTMwNTMsMTMwNTNdLFwibWFwcGVkXCIsWzEyNTI5XV0sW1sxMzA1NCwxMzA1NF0sXCJtYXBwZWRcIixbMTI1MzBdXSxbWzEzMDU1LDEzMDU1XSxcImRpc2FsbG93ZWRcIl0sW1sxMzA1NiwxMzA1Nl0sXCJtYXBwZWRcIixbMTI0NTAsMTI0OTcsMTI1NDAsMTI0ODhdXSxbWzEzMDU3LDEzMDU3XSxcIm1hcHBlZFwiLFsxMjQ1MCwxMjUyMywxMjUwMSwxMjQ0OV1dLFtbMTMwNTgsMTMwNThdLFwibWFwcGVkXCIsWzEyNDUwLDEyNTMxLDEyNTA2LDEyNDUwXV0sW1sxMzA1OSwxMzA1OV0sXCJtYXBwZWRcIixbMTI0NTAsMTI1NDAsMTI1MjNdXSxbWzEzMDYwLDEzMDYwXSxcIm1hcHBlZFwiLFsxMjQ1MiwxMjQ5MSwxMjUzMSwxMjQ2NF1dLFtbMTMwNjEsMTMwNjFdLFwibWFwcGVkXCIsWzEyNDUyLDEyNTMxLDEyNDgxXV0sW1sxMzA2MiwxMzA2Ml0sXCJtYXBwZWRcIixbMTI0NTQsMTI0NTcsMTI1MzFdXSxbWzEzMDYzLDEzMDYzXSxcIm1hcHBlZFwiLFsxMjQ1NiwxMjQ3MywxMjQ2MywxMjU0MCwxMjQ4OV1dLFtbMTMwNjQsMTMwNjRdLFwibWFwcGVkXCIsWzEyNDU2LDEyNTQwLDEyNDU5LDEyNTQwXV0sW1sxMzA2NSwxMzA2NV0sXCJtYXBwZWRcIixbMTI0NTgsMTI1MzEsMTI0NzNdXSxbWzEzMDY2LDEzMDY2XSxcIm1hcHBlZFwiLFsxMjQ1OCwxMjU0MCwxMjUxMl1dLFtbMTMwNjcsMTMwNjddLFwibWFwcGVkXCIsWzEyNDU5LDEyNDUyLDEyNTIyXV0sW1sxMzA2OCwxMzA2OF0sXCJtYXBwZWRcIixbMTI0NTksMTI1MjEsMTI0ODMsMTI0ODhdXSxbWzEzMDY5LDEzMDY5XSxcIm1hcHBlZFwiLFsxMjQ1OSwxMjUyNSwxMjUyMiwxMjU0MF1dLFtbMTMwNzAsMTMwNzBdLFwibWFwcGVkXCIsWzEyNDYwLDEyNTI1LDEyNTMxXV0sW1sxMzA3MSwxMzA3MV0sXCJtYXBwZWRcIixbMTI0NjAsMTI1MzEsMTI1MTBdXSxbWzEzMDcyLDEzMDcyXSxcIm1hcHBlZFwiLFsxMjQ2MiwxMjQ2MF1dLFtbMTMwNzMsMTMwNzNdLFwibWFwcGVkXCIsWzEyNDYyLDEyNDkxLDEyNTQwXV0sW1sxMzA3NCwxMzA3NF0sXCJtYXBwZWRcIixbMTI0NjEsMTI1MTcsMTI1MjIsMTI1NDBdXSxbWzEzMDc1LDEzMDc1XSxcIm1hcHBlZFwiLFsxMjQ2MiwxMjUyMywxMjQ4MCwxMjU0MF1dLFtbMTMwNzYsMTMwNzZdLFwibWFwcGVkXCIsWzEyNDYxLDEyNTI1XV0sW1sxMzA3NywxMzA3N10sXCJtYXBwZWRcIixbMTI0NjEsMTI1MjUsMTI0NjQsMTI1MjEsMTI1MTJdXSxbWzEzMDc4LDEzMDc4XSxcIm1hcHBlZFwiLFsxMjQ2MSwxMjUyNSwxMjUxMywxMjU0MCwxMjQ4OCwxMjUyM11dLFtbMTMwNzksMTMwNzldLFwibWFwcGVkXCIsWzEyNDYxLDEyNTI1LDEyNTI3LDEyNDgzLDEyNDg4XV0sW1sxMzA4MCwxMzA4MF0sXCJtYXBwZWRcIixbMTI0NjQsMTI1MjEsMTI1MTJdXSxbWzEzMDgxLDEzMDgxXSxcIm1hcHBlZFwiLFsxMjQ2NCwxMjUyMSwxMjUxMiwxMjQ4OCwxMjUzMV1dLFtbMTMwODIsMTMwODJdLFwibWFwcGVkXCIsWzEyNDYzLDEyNTIzLDEyNDc2LDEyNDUyLDEyNTI1XV0sW1sxMzA4MywxMzA4M10sXCJtYXBwZWRcIixbMTI0NjMsMTI1MjUsMTI1NDAsMTI0OTNdXSxbWzEzMDg0LDEzMDg0XSxcIm1hcHBlZFwiLFsxMjQ2NSwxMjU0MCwxMjQ3M11dLFtbMTMwODUsMTMwODVdLFwibWFwcGVkXCIsWzEyNDY3LDEyNTIzLDEyNDkwXV0sW1sxMzA4NiwxMzA4Nl0sXCJtYXBwZWRcIixbMTI0NjcsMTI1NDAsMTI1MDldXSxbWzEzMDg3LDEzMDg3XSxcIm1hcHBlZFwiLFsxMjQ2OSwxMjQ1MiwxMjQ2MywxMjUyM11dLFtbMTMwODgsMTMwODhdLFwibWFwcGVkXCIsWzEyNDY5LDEyNTMxLDEyNDgxLDEyNTQwLDEyNTEyXV0sW1sxMzA4OSwxMzA4OV0sXCJtYXBwZWRcIixbMTI0NzEsMTI1MjIsMTI1MzEsMTI0NjRdXSxbWzEzMDkwLDEzMDkwXSxcIm1hcHBlZFwiLFsxMjQ3NSwxMjUzMSwxMjQ4MV1dLFtbMTMwOTEsMTMwOTFdLFwibWFwcGVkXCIsWzEyNDc1LDEyNTMxLDEyNDg4XV0sW1sxMzA5MiwxMzA5Ml0sXCJtYXBwZWRcIixbMTI0ODAsMTI1NDAsMTI0NzNdXSxbWzEzMDkzLDEzMDkzXSxcIm1hcHBlZFwiLFsxMjQ4NywxMjQ3MV1dLFtbMTMwOTQsMTMwOTRdLFwibWFwcGVkXCIsWzEyNDg5LDEyNTIzXV0sW1sxMzA5NSwxMzA5NV0sXCJtYXBwZWRcIixbMTI0ODgsMTI1MzFdXSxbWzEzMDk2LDEzMDk2XSxcIm1hcHBlZFwiLFsxMjQ5MCwxMjQ5NF1dLFtbMTMwOTcsMTMwOTddLFwibWFwcGVkXCIsWzEyNDk0LDEyNDgzLDEyNDg4XV0sW1sxMzA5OCwxMzA5OF0sXCJtYXBwZWRcIixbMTI0OTUsMTI0NTIsMTI0ODRdXSxbWzEzMDk5LDEzMDk5XSxcIm1hcHBlZFwiLFsxMjQ5NywxMjU0MCwxMjQ3NSwxMjUzMSwxMjQ4OF1dLFtbMTMxMDAsMTMxMDBdLFwibWFwcGVkXCIsWzEyNDk3LDEyNTQwLDEyNDg0XV0sW1sxMzEwMSwxMzEwMV0sXCJtYXBwZWRcIixbMTI0OTYsMTI1NDAsMTI1MjQsMTI1MjNdXSxbWzEzMTAyLDEzMTAyXSxcIm1hcHBlZFwiLFsxMjUwMCwxMjQ1MCwxMjQ3MywxMjQ4OCwxMjUyM11dLFtbMTMxMDMsMTMxMDNdLFwibWFwcGVkXCIsWzEyNTAwLDEyNDYzLDEyNTIzXV0sW1sxMzEwNCwxMzEwNF0sXCJtYXBwZWRcIixbMTI1MDAsMTI0NjddXSxbWzEzMTA1LDEzMTA1XSxcIm1hcHBlZFwiLFsxMjQ5OSwxMjUyM11dLFtbMTMxMDYsMTMxMDZdLFwibWFwcGVkXCIsWzEyNTAxLDEyNDQ5LDEyNTIxLDEyNDgzLDEyNDg5XV0sW1sxMzEwNywxMzEwN10sXCJtYXBwZWRcIixbMTI1MDEsMTI0NTEsMTI1NDAsMTI0ODhdXSxbWzEzMTA4LDEzMTA4XSxcIm1hcHBlZFwiLFsxMjUwMiwxMjQ4MywxMjQ3MSwxMjQ1NSwxMjUyM11dLFtbMTMxMDksMTMxMDldLFwibWFwcGVkXCIsWzEyNTAxLDEyNTIxLDEyNTMxXV0sW1sxMzExMCwxMzExMF0sXCJtYXBwZWRcIixbMTI1MDQsMTI0NjMsMTI0NzksMTI1NDAsMTI1MjNdXSxbWzEzMTExLDEzMTExXSxcIm1hcHBlZFwiLFsxMjUwNiwxMjQ3N11dLFtbMTMxMTIsMTMxMTJdLFwibWFwcGVkXCIsWzEyNTA2LDEyNDkxLDEyNDk4XV0sW1sxMzExMywxMzExM10sXCJtYXBwZWRcIixbMTI1MDQsMTI1MjMsMTI0ODRdXSxbWzEzMTE0LDEzMTE0XSxcIm1hcHBlZFwiLFsxMjUwNiwxMjUzMSwxMjQ3M11dLFtbMTMxMTUsMTMxMTVdLFwibWFwcGVkXCIsWzEyNTA2LDEyNTQwLDEyNDcyXV0sW1sxMzExNiwxMzExNl0sXCJtYXBwZWRcIixbMTI1MDUsMTI1NDAsMTI0NzldXSxbWzEzMTE3LDEzMTE3XSxcIm1hcHBlZFwiLFsxMjUwOSwxMjQ1MiwxMjUzMSwxMjQ4OF1dLFtbMTMxMTgsMTMxMThdLFwibWFwcGVkXCIsWzEyNTA4LDEyNTIzLDEyNDg4XV0sW1sxMzExOSwxMzExOV0sXCJtYXBwZWRcIixbMTI1MDcsMTI1MzFdXSxbWzEzMTIwLDEzMTIwXSxcIm1hcHBlZFwiLFsxMjUwOSwxMjUzMSwxMjQ4OV1dLFtbMTMxMjEsMTMxMjFdLFwibWFwcGVkXCIsWzEyNTA3LDEyNTQwLDEyNTIzXV0sW1sxMzEyMiwxMzEyMl0sXCJtYXBwZWRcIixbMTI1MDcsMTI1NDAsMTI1MzFdXSxbWzEzMTIzLDEzMTIzXSxcIm1hcHBlZFwiLFsxMjUxMCwxMjQ1MiwxMjQ2MywxMjUyNV1dLFtbMTMxMjQsMTMxMjRdLFwibWFwcGVkXCIsWzEyNTEwLDEyNDUyLDEyNTIzXV0sW1sxMzEyNSwxMzEyNV0sXCJtYXBwZWRcIixbMTI1MTAsMTI0ODMsMTI0OTVdXSxbWzEzMTI2LDEzMTI2XSxcIm1hcHBlZFwiLFsxMjUxMCwxMjUyMywxMjQ2M11dLFtbMTMxMjcsMTMxMjddLFwibWFwcGVkXCIsWzEyNTEwLDEyNTMxLDEyNDcxLDEyNTE5LDEyNTMxXV0sW1sxMzEyOCwxMzEyOF0sXCJtYXBwZWRcIixbMTI1MTEsMTI0NjMsMTI1MjUsMTI1MzFdXSxbWzEzMTI5LDEzMTI5XSxcIm1hcHBlZFwiLFsxMjUxMSwxMjUyMl1dLFtbMTMxMzAsMTMxMzBdLFwibWFwcGVkXCIsWzEyNTExLDEyNTIyLDEyNDk2LDEyNTQwLDEyNTIzXV0sW1sxMzEzMSwxMzEzMV0sXCJtYXBwZWRcIixbMTI1MTMsMTI0NjBdXSxbWzEzMTMyLDEzMTMyXSxcIm1hcHBlZFwiLFsxMjUxMywxMjQ2MCwxMjQ4OCwxMjUzMV1dLFtbMTMxMzMsMTMxMzNdLFwibWFwcGVkXCIsWzEyNTEzLDEyNTQwLDEyNDg4LDEyNTIzXV0sW1sxMzEzNCwxMzEzNF0sXCJtYXBwZWRcIixbMTI1MTYsMTI1NDAsMTI0ODldXSxbWzEzMTM1LDEzMTM1XSxcIm1hcHBlZFwiLFsxMjUxNiwxMjU0MCwxMjUyM11dLFtbMTMxMzYsMTMxMzZdLFwibWFwcGVkXCIsWzEyNTE4LDEyNDUwLDEyNTMxXV0sW1sxMzEzNywxMzEzN10sXCJtYXBwZWRcIixbMTI1MjIsMTI0ODMsMTI0ODgsMTI1MjNdXSxbWzEzMTM4LDEzMTM4XSxcIm1hcHBlZFwiLFsxMjUyMiwxMjUyMV1dLFtbMTMxMzksMTMxMzldLFwibWFwcGVkXCIsWzEyNTIzLDEyNTAwLDEyNTQwXV0sW1sxMzE0MCwxMzE0MF0sXCJtYXBwZWRcIixbMTI1MjMsMTI1NDAsMTI1MDIsMTI1MjNdXSxbWzEzMTQxLDEzMTQxXSxcIm1hcHBlZFwiLFsxMjUyNCwxMjUxMl1dLFtbMTMxNDIsMTMxNDJdLFwibWFwcGVkXCIsWzEyNTI0LDEyNTMxLDEyNDg4LDEyNDY2LDEyNTMxXV0sW1sxMzE0MywxMzE0M10sXCJtYXBwZWRcIixbMTI1MjcsMTI0ODMsMTI0ODhdXSxbWzEzMTQ0LDEzMTQ0XSxcIm1hcHBlZFwiLFs0OCwyODg1N11dLFtbMTMxNDUsMTMxNDVdLFwibWFwcGVkXCIsWzQ5LDI4ODU3XV0sW1sxMzE0NiwxMzE0Nl0sXCJtYXBwZWRcIixbNTAsMjg4NTddXSxbWzEzMTQ3LDEzMTQ3XSxcIm1hcHBlZFwiLFs1MSwyODg1N11dLFtbMTMxNDgsMTMxNDhdLFwibWFwcGVkXCIsWzUyLDI4ODU3XV0sW1sxMzE0OSwxMzE0OV0sXCJtYXBwZWRcIixbNTMsMjg4NTddXSxbWzEzMTUwLDEzMTUwXSxcIm1hcHBlZFwiLFs1NCwyODg1N11dLFtbMTMxNTEsMTMxNTFdLFwibWFwcGVkXCIsWzU1LDI4ODU3XV0sW1sxMzE1MiwxMzE1Ml0sXCJtYXBwZWRcIixbNTYsMjg4NTddXSxbWzEzMTUzLDEzMTUzXSxcIm1hcHBlZFwiLFs1NywyODg1N11dLFtbMTMxNTQsMTMxNTRdLFwibWFwcGVkXCIsWzQ5LDQ4LDI4ODU3XV0sW1sxMzE1NSwxMzE1NV0sXCJtYXBwZWRcIixbNDksNDksMjg4NTddXSxbWzEzMTU2LDEzMTU2XSxcIm1hcHBlZFwiLFs0OSw1MCwyODg1N11dLFtbMTMxNTcsMTMxNTddLFwibWFwcGVkXCIsWzQ5LDUxLDI4ODU3XV0sW1sxMzE1OCwxMzE1OF0sXCJtYXBwZWRcIixbNDksNTIsMjg4NTddXSxbWzEzMTU5LDEzMTU5XSxcIm1hcHBlZFwiLFs0OSw1MywyODg1N11dLFtbMTMxNjAsMTMxNjBdLFwibWFwcGVkXCIsWzQ5LDU0LDI4ODU3XV0sW1sxMzE2MSwxMzE2MV0sXCJtYXBwZWRcIixbNDksNTUsMjg4NTddXSxbWzEzMTYyLDEzMTYyXSxcIm1hcHBlZFwiLFs0OSw1NiwyODg1N11dLFtbMTMxNjMsMTMxNjNdLFwibWFwcGVkXCIsWzQ5LDU3LDI4ODU3XV0sW1sxMzE2NCwxMzE2NF0sXCJtYXBwZWRcIixbNTAsNDgsMjg4NTddXSxbWzEzMTY1LDEzMTY1XSxcIm1hcHBlZFwiLFs1MCw0OSwyODg1N11dLFtbMTMxNjYsMTMxNjZdLFwibWFwcGVkXCIsWzUwLDUwLDI4ODU3XV0sW1sxMzE2NywxMzE2N10sXCJtYXBwZWRcIixbNTAsNTEsMjg4NTddXSxbWzEzMTY4LDEzMTY4XSxcIm1hcHBlZFwiLFs1MCw1MiwyODg1N11dLFtbMTMxNjksMTMxNjldLFwibWFwcGVkXCIsWzEwNCwxMTIsOTddXSxbWzEzMTcwLDEzMTcwXSxcIm1hcHBlZFwiLFsxMDAsOTddXSxbWzEzMTcxLDEzMTcxXSxcIm1hcHBlZFwiLFs5NywxMTddXSxbWzEzMTcyLDEzMTcyXSxcIm1hcHBlZFwiLFs5OCw5NywxMTRdXSxbWzEzMTczLDEzMTczXSxcIm1hcHBlZFwiLFsxMTEsMTE4XV0sW1sxMzE3NCwxMzE3NF0sXCJtYXBwZWRcIixbMTEyLDk5XV0sW1sxMzE3NSwxMzE3NV0sXCJtYXBwZWRcIixbMTAwLDEwOV1dLFtbMTMxNzYsMTMxNzZdLFwibWFwcGVkXCIsWzEwMCwxMDksNTBdXSxbWzEzMTc3LDEzMTc3XSxcIm1hcHBlZFwiLFsxMDAsMTA5LDUxXV0sW1sxMzE3OCwxMzE3OF0sXCJtYXBwZWRcIixbMTA1LDExN11dLFtbMTMxNzksMTMxNzldLFwibWFwcGVkXCIsWzI0MTc5LDI1MTA0XV0sW1sxMzE4MCwxMzE4MF0sXCJtYXBwZWRcIixbMjYxNTcsMjE2NDRdXSxbWzEzMTgxLDEzMTgxXSxcIm1hcHBlZFwiLFsyMjgyMywyNzQ5MV1dLFtbMTMxODIsMTMxODJdLFwibWFwcGVkXCIsWzI2MTI2LDI3ODM1XV0sW1sxMzE4MywxMzE4M10sXCJtYXBwZWRcIixbMjY2NjYsMjQzMzUsMjAyNTAsMzEwMzhdXSxbWzEzMTg0LDEzMTg0XSxcIm1hcHBlZFwiLFsxMTIsOTddXSxbWzEzMTg1LDEzMTg1XSxcIm1hcHBlZFwiLFsxMTAsOTddXSxbWzEzMTg2LDEzMTg2XSxcIm1hcHBlZFwiLFs5NTYsOTddXSxbWzEzMTg3LDEzMTg3XSxcIm1hcHBlZFwiLFsxMDksOTddXSxbWzEzMTg4LDEzMTg4XSxcIm1hcHBlZFwiLFsxMDcsOTddXSxbWzEzMTg5LDEzMTg5XSxcIm1hcHBlZFwiLFsxMDcsOThdXSxbWzEzMTkwLDEzMTkwXSxcIm1hcHBlZFwiLFsxMDksOThdXSxbWzEzMTkxLDEzMTkxXSxcIm1hcHBlZFwiLFsxMDMsOThdXSxbWzEzMTkyLDEzMTkyXSxcIm1hcHBlZFwiLFs5OSw5NywxMDhdXSxbWzEzMTkzLDEzMTkzXSxcIm1hcHBlZFwiLFsxMDcsOTksOTcsMTA4XV0sW1sxMzE5NCwxMzE5NF0sXCJtYXBwZWRcIixbMTEyLDEwMl1dLFtbMTMxOTUsMTMxOTVdLFwibWFwcGVkXCIsWzExMCwxMDJdXSxbWzEzMTk2LDEzMTk2XSxcIm1hcHBlZFwiLFs5NTYsMTAyXV0sW1sxMzE5NywxMzE5N10sXCJtYXBwZWRcIixbOTU2LDEwM11dLFtbMTMxOTgsMTMxOThdLFwibWFwcGVkXCIsWzEwOSwxMDNdXSxbWzEzMTk5LDEzMTk5XSxcIm1hcHBlZFwiLFsxMDcsMTAzXV0sW1sxMzIwMCwxMzIwMF0sXCJtYXBwZWRcIixbMTA0LDEyMl1dLFtbMTMyMDEsMTMyMDFdLFwibWFwcGVkXCIsWzEwNywxMDQsMTIyXV0sW1sxMzIwMiwxMzIwMl0sXCJtYXBwZWRcIixbMTA5LDEwNCwxMjJdXSxbWzEzMjAzLDEzMjAzXSxcIm1hcHBlZFwiLFsxMDMsMTA0LDEyMl1dLFtbMTMyMDQsMTMyMDRdLFwibWFwcGVkXCIsWzExNiwxMDQsMTIyXV0sW1sxMzIwNSwxMzIwNV0sXCJtYXBwZWRcIixbOTU2LDEwOF1dLFtbMTMyMDYsMTMyMDZdLFwibWFwcGVkXCIsWzEwOSwxMDhdXSxbWzEzMjA3LDEzMjA3XSxcIm1hcHBlZFwiLFsxMDAsMTA4XV0sW1sxMzIwOCwxMzIwOF0sXCJtYXBwZWRcIixbMTA3LDEwOF1dLFtbMTMyMDksMTMyMDldLFwibWFwcGVkXCIsWzEwMiwxMDldXSxbWzEzMjEwLDEzMjEwXSxcIm1hcHBlZFwiLFsxMTAsMTA5XV0sW1sxMzIxMSwxMzIxMV0sXCJtYXBwZWRcIixbOTU2LDEwOV1dLFtbMTMyMTIsMTMyMTJdLFwibWFwcGVkXCIsWzEwOSwxMDldXSxbWzEzMjEzLDEzMjEzXSxcIm1hcHBlZFwiLFs5OSwxMDldXSxbWzEzMjE0LDEzMjE0XSxcIm1hcHBlZFwiLFsxMDcsMTA5XV0sW1sxMzIxNSwxMzIxNV0sXCJtYXBwZWRcIixbMTA5LDEwOSw1MF1dLFtbMTMyMTYsMTMyMTZdLFwibWFwcGVkXCIsWzk5LDEwOSw1MF1dLFtbMTMyMTcsMTMyMTddLFwibWFwcGVkXCIsWzEwOSw1MF1dLFtbMTMyMTgsMTMyMThdLFwibWFwcGVkXCIsWzEwNywxMDksNTBdXSxbWzEzMjE5LDEzMjE5XSxcIm1hcHBlZFwiLFsxMDksMTA5LDUxXV0sW1sxMzIyMCwxMzIyMF0sXCJtYXBwZWRcIixbOTksMTA5LDUxXV0sW1sxMzIyMSwxMzIyMV0sXCJtYXBwZWRcIixbMTA5LDUxXV0sW1sxMzIyMiwxMzIyMl0sXCJtYXBwZWRcIixbMTA3LDEwOSw1MV1dLFtbMTMyMjMsMTMyMjNdLFwibWFwcGVkXCIsWzEwOSw4NzI1LDExNV1dLFtbMTMyMjQsMTMyMjRdLFwibWFwcGVkXCIsWzEwOSw4NzI1LDExNSw1MF1dLFtbMTMyMjUsMTMyMjVdLFwibWFwcGVkXCIsWzExMiw5N11dLFtbMTMyMjYsMTMyMjZdLFwibWFwcGVkXCIsWzEwNywxMTIsOTddXSxbWzEzMjI3LDEzMjI3XSxcIm1hcHBlZFwiLFsxMDksMTEyLDk3XV0sW1sxMzIyOCwxMzIyOF0sXCJtYXBwZWRcIixbMTAzLDExMiw5N11dLFtbMTMyMjksMTMyMjldLFwibWFwcGVkXCIsWzExNCw5NywxMDBdXSxbWzEzMjMwLDEzMjMwXSxcIm1hcHBlZFwiLFsxMTQsOTcsMTAwLDg3MjUsMTE1XV0sW1sxMzIzMSwxMzIzMV0sXCJtYXBwZWRcIixbMTE0LDk3LDEwMCw4NzI1LDExNSw1MF1dLFtbMTMyMzIsMTMyMzJdLFwibWFwcGVkXCIsWzExMiwxMTVdXSxbWzEzMjMzLDEzMjMzXSxcIm1hcHBlZFwiLFsxMTAsMTE1XV0sW1sxMzIzNCwxMzIzNF0sXCJtYXBwZWRcIixbOTU2LDExNV1dLFtbMTMyMzUsMTMyMzVdLFwibWFwcGVkXCIsWzEwOSwxMTVdXSxbWzEzMjM2LDEzMjM2XSxcIm1hcHBlZFwiLFsxMTIsMTE4XV0sW1sxMzIzNywxMzIzN10sXCJtYXBwZWRcIixbMTEwLDExOF1dLFtbMTMyMzgsMTMyMzhdLFwibWFwcGVkXCIsWzk1NiwxMThdXSxbWzEzMjM5LDEzMjM5XSxcIm1hcHBlZFwiLFsxMDksMTE4XV0sW1sxMzI0MCwxMzI0MF0sXCJtYXBwZWRcIixbMTA3LDExOF1dLFtbMTMyNDEsMTMyNDFdLFwibWFwcGVkXCIsWzEwOSwxMThdXSxbWzEzMjQyLDEzMjQyXSxcIm1hcHBlZFwiLFsxMTIsMTE5XV0sW1sxMzI0MywxMzI0M10sXCJtYXBwZWRcIixbMTEwLDExOV1dLFtbMTMyNDQsMTMyNDRdLFwibWFwcGVkXCIsWzk1NiwxMTldXSxbWzEzMjQ1LDEzMjQ1XSxcIm1hcHBlZFwiLFsxMDksMTE5XV0sW1sxMzI0NiwxMzI0Nl0sXCJtYXBwZWRcIixbMTA3LDExOV1dLFtbMTMyNDcsMTMyNDddLFwibWFwcGVkXCIsWzEwOSwxMTldXSxbWzEzMjQ4LDEzMjQ4XSxcIm1hcHBlZFwiLFsxMDcsOTY5XV0sW1sxMzI0OSwxMzI0OV0sXCJtYXBwZWRcIixbMTA5LDk2OV1dLFtbMTMyNTAsMTMyNTBdLFwiZGlzYWxsb3dlZFwiXSxbWzEzMjUxLDEzMjUxXSxcIm1hcHBlZFwiLFs5OCwxMTNdXSxbWzEzMjUyLDEzMjUyXSxcIm1hcHBlZFwiLFs5OSw5OV1dLFtbMTMyNTMsMTMyNTNdLFwibWFwcGVkXCIsWzk5LDEwMF1dLFtbMTMyNTQsMTMyNTRdLFwibWFwcGVkXCIsWzk5LDg3MjUsMTA3LDEwM11dLFtbMTMyNTUsMTMyNTVdLFwiZGlzYWxsb3dlZFwiXSxbWzEzMjU2LDEzMjU2XSxcIm1hcHBlZFwiLFsxMDAsOThdXSxbWzEzMjU3LDEzMjU3XSxcIm1hcHBlZFwiLFsxMDMsMTIxXV0sW1sxMzI1OCwxMzI1OF0sXCJtYXBwZWRcIixbMTA0LDk3XV0sW1sxMzI1OSwxMzI1OV0sXCJtYXBwZWRcIixbMTA0LDExMl1dLFtbMTMyNjAsMTMyNjBdLFwibWFwcGVkXCIsWzEwNSwxMTBdXSxbWzEzMjYxLDEzMjYxXSxcIm1hcHBlZFwiLFsxMDcsMTA3XV0sW1sxMzI2MiwxMzI2Ml0sXCJtYXBwZWRcIixbMTA3LDEwOV1dLFtbMTMyNjMsMTMyNjNdLFwibWFwcGVkXCIsWzEwNywxMTZdXSxbWzEzMjY0LDEzMjY0XSxcIm1hcHBlZFwiLFsxMDgsMTA5XV0sW1sxMzI2NSwxMzI2NV0sXCJtYXBwZWRcIixbMTA4LDExMF1dLFtbMTMyNjYsMTMyNjZdLFwibWFwcGVkXCIsWzEwOCwxMTEsMTAzXV0sW1sxMzI2NywxMzI2N10sXCJtYXBwZWRcIixbMTA4LDEyMF1dLFtbMTMyNjgsMTMyNjhdLFwibWFwcGVkXCIsWzEwOSw5OF1dLFtbMTMyNjksMTMyNjldLFwibWFwcGVkXCIsWzEwOSwxMDUsMTA4XV0sW1sxMzI3MCwxMzI3MF0sXCJtYXBwZWRcIixbMTA5LDExMSwxMDhdXSxbWzEzMjcxLDEzMjcxXSxcIm1hcHBlZFwiLFsxMTIsMTA0XV0sW1sxMzI3MiwxMzI3Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMTMyNzMsMTMyNzNdLFwibWFwcGVkXCIsWzExMiwxMTIsMTA5XV0sW1sxMzI3NCwxMzI3NF0sXCJtYXBwZWRcIixbMTEyLDExNF1dLFtbMTMyNzUsMTMyNzVdLFwibWFwcGVkXCIsWzExNSwxMTRdXSxbWzEzMjc2LDEzMjc2XSxcIm1hcHBlZFwiLFsxMTUsMTE4XV0sW1sxMzI3NywxMzI3N10sXCJtYXBwZWRcIixbMTE5LDk4XV0sW1sxMzI3OCwxMzI3OF0sXCJtYXBwZWRcIixbMTE4LDg3MjUsMTA5XV0sW1sxMzI3OSwxMzI3OV0sXCJtYXBwZWRcIixbOTcsODcyNSwxMDldXSxbWzEzMjgwLDEzMjgwXSxcIm1hcHBlZFwiLFs0OSwyNjA4NV1dLFtbMTMyODEsMTMyODFdLFwibWFwcGVkXCIsWzUwLDI2MDg1XV0sW1sxMzI4MiwxMzI4Ml0sXCJtYXBwZWRcIixbNTEsMjYwODVdXSxbWzEzMjgzLDEzMjgzXSxcIm1hcHBlZFwiLFs1MiwyNjA4NV1dLFtbMTMyODQsMTMyODRdLFwibWFwcGVkXCIsWzUzLDI2MDg1XV0sW1sxMzI4NSwxMzI4NV0sXCJtYXBwZWRcIixbNTQsMjYwODVdXSxbWzEzMjg2LDEzMjg2XSxcIm1hcHBlZFwiLFs1NSwyNjA4NV1dLFtbMTMyODcsMTMyODddLFwibWFwcGVkXCIsWzU2LDI2MDg1XV0sW1sxMzI4OCwxMzI4OF0sXCJtYXBwZWRcIixbNTcsMjYwODVdXSxbWzEzMjg5LDEzMjg5XSxcIm1hcHBlZFwiLFs0OSw0OCwyNjA4NV1dLFtbMTMyOTAsMTMyOTBdLFwibWFwcGVkXCIsWzQ5LDQ5LDI2MDg1XV0sW1sxMzI5MSwxMzI5MV0sXCJtYXBwZWRcIixbNDksNTAsMjYwODVdXSxbWzEzMjkyLDEzMjkyXSxcIm1hcHBlZFwiLFs0OSw1MSwyNjA4NV1dLFtbMTMyOTMsMTMyOTNdLFwibWFwcGVkXCIsWzQ5LDUyLDI2MDg1XV0sW1sxMzI5NCwxMzI5NF0sXCJtYXBwZWRcIixbNDksNTMsMjYwODVdXSxbWzEzMjk1LDEzMjk1XSxcIm1hcHBlZFwiLFs0OSw1NCwyNjA4NV1dLFtbMTMyOTYsMTMyOTZdLFwibWFwcGVkXCIsWzQ5LDU1LDI2MDg1XV0sW1sxMzI5NywxMzI5N10sXCJtYXBwZWRcIixbNDksNTYsMjYwODVdXSxbWzEzMjk4LDEzMjk4XSxcIm1hcHBlZFwiLFs0OSw1NywyNjA4NV1dLFtbMTMyOTksMTMyOTldLFwibWFwcGVkXCIsWzUwLDQ4LDI2MDg1XV0sW1sxMzMwMCwxMzMwMF0sXCJtYXBwZWRcIixbNTAsNDksMjYwODVdXSxbWzEzMzAxLDEzMzAxXSxcIm1hcHBlZFwiLFs1MCw1MCwyNjA4NV1dLFtbMTMzMDIsMTMzMDJdLFwibWFwcGVkXCIsWzUwLDUxLDI2MDg1XV0sW1sxMzMwMywxMzMwM10sXCJtYXBwZWRcIixbNTAsNTIsMjYwODVdXSxbWzEzMzA0LDEzMzA0XSxcIm1hcHBlZFwiLFs1MCw1MywyNjA4NV1dLFtbMTMzMDUsMTMzMDVdLFwibWFwcGVkXCIsWzUwLDU0LDI2MDg1XV0sW1sxMzMwNiwxMzMwNl0sXCJtYXBwZWRcIixbNTAsNTUsMjYwODVdXSxbWzEzMzA3LDEzMzA3XSxcIm1hcHBlZFwiLFs1MCw1NiwyNjA4NV1dLFtbMTMzMDgsMTMzMDhdLFwibWFwcGVkXCIsWzUwLDU3LDI2MDg1XV0sW1sxMzMwOSwxMzMwOV0sXCJtYXBwZWRcIixbNTEsNDgsMjYwODVdXSxbWzEzMzEwLDEzMzEwXSxcIm1hcHBlZFwiLFs1MSw0OSwyNjA4NV1dLFtbMTMzMTEsMTMzMTFdLFwibWFwcGVkXCIsWzEwMyw5NywxMDhdXSxbWzEzMzEyLDE5ODkzXSxcInZhbGlkXCJdLFtbMTk4OTQsMTk5MDNdLFwiZGlzYWxsb3dlZFwiXSxbWzE5OTA0LDE5OTY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxOTk2OCw0MDg2OV0sXCJ2YWxpZFwiXSxbWzQwODcwLDQwODkxXSxcInZhbGlkXCJdLFtbNDA4OTIsNDA4OTldLFwidmFsaWRcIl0sW1s0MDkwMCw0MDkwN10sXCJ2YWxpZFwiXSxbWzQwOTA4LDQwOTA4XSxcInZhbGlkXCJdLFtbNDA5MDksNDA5MTddLFwidmFsaWRcIl0sW1s0MDkxOCw0MDk1OV0sXCJkaXNhbGxvd2VkXCJdLFtbNDA5NjAsNDIxMjRdLFwidmFsaWRcIl0sW1s0MjEyNSw0MjEyN10sXCJkaXNhbGxvd2VkXCJdLFtbNDIxMjgsNDIxNDVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyMTQ2LDQyMTQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjE0OCw0MjE2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDIxNjQsNDIxNjRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyMTY1LDQyMTc2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjE3Nyw0MjE3N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDIxNzgsNDIxODBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyMTgxLDQyMTgxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MjE4Miw0MjE4Ml0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDIxODMsNDIxOTFdLFwiZGlzYWxsb3dlZFwiXSxbWzQyMTkyLDQyMjM3XSxcInZhbGlkXCJdLFtbNDIyMzgsNDIyMzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyMjQwLDQyNTA4XSxcInZhbGlkXCJdLFtbNDI1MDksNDI1MTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyNTEyLDQyNTM5XSxcInZhbGlkXCJdLFtbNDI1NDAsNDI1NTldLFwiZGlzYWxsb3dlZFwiXSxbWzQyNTYwLDQyNTYwXSxcIm1hcHBlZFwiLFs0MjU2MV1dLFtbNDI1NjEsNDI1NjFdLFwidmFsaWRcIl0sW1s0MjU2Miw0MjU2Ml0sXCJtYXBwZWRcIixbNDI1NjNdXSxbWzQyNTYzLDQyNTYzXSxcInZhbGlkXCJdLFtbNDI1NjQsNDI1NjRdLFwibWFwcGVkXCIsWzQyNTY1XV0sW1s0MjU2NSw0MjU2NV0sXCJ2YWxpZFwiXSxbWzQyNTY2LDQyNTY2XSxcIm1hcHBlZFwiLFs0MjU2N11dLFtbNDI1NjcsNDI1NjddLFwidmFsaWRcIl0sW1s0MjU2OCw0MjU2OF0sXCJtYXBwZWRcIixbNDI1NjldXSxbWzQyNTY5LDQyNTY5XSxcInZhbGlkXCJdLFtbNDI1NzAsNDI1NzBdLFwibWFwcGVkXCIsWzQyNTcxXV0sW1s0MjU3MSw0MjU3MV0sXCJ2YWxpZFwiXSxbWzQyNTcyLDQyNTcyXSxcIm1hcHBlZFwiLFs0MjU3M11dLFtbNDI1NzMsNDI1NzNdLFwidmFsaWRcIl0sW1s0MjU3NCw0MjU3NF0sXCJtYXBwZWRcIixbNDI1NzVdXSxbWzQyNTc1LDQyNTc1XSxcInZhbGlkXCJdLFtbNDI1NzYsNDI1NzZdLFwibWFwcGVkXCIsWzQyNTc3XV0sW1s0MjU3Nyw0MjU3N10sXCJ2YWxpZFwiXSxbWzQyNTc4LDQyNTc4XSxcIm1hcHBlZFwiLFs0MjU3OV1dLFtbNDI1NzksNDI1NzldLFwidmFsaWRcIl0sW1s0MjU4MCw0MjU4MF0sXCJtYXBwZWRcIixbNDI1ODFdXSxbWzQyNTgxLDQyNTgxXSxcInZhbGlkXCJdLFtbNDI1ODIsNDI1ODJdLFwibWFwcGVkXCIsWzQyNTgzXV0sW1s0MjU4Myw0MjU4M10sXCJ2YWxpZFwiXSxbWzQyNTg0LDQyNTg0XSxcIm1hcHBlZFwiLFs0MjU4NV1dLFtbNDI1ODUsNDI1ODVdLFwidmFsaWRcIl0sW1s0MjU4Niw0MjU4Nl0sXCJtYXBwZWRcIixbNDI1ODddXSxbWzQyNTg3LDQyNTg3XSxcInZhbGlkXCJdLFtbNDI1ODgsNDI1ODhdLFwibWFwcGVkXCIsWzQyNTg5XV0sW1s0MjU4OSw0MjU4OV0sXCJ2YWxpZFwiXSxbWzQyNTkwLDQyNTkwXSxcIm1hcHBlZFwiLFs0MjU5MV1dLFtbNDI1OTEsNDI1OTFdLFwidmFsaWRcIl0sW1s0MjU5Miw0MjU5Ml0sXCJtYXBwZWRcIixbNDI1OTNdXSxbWzQyNTkzLDQyNTkzXSxcInZhbGlkXCJdLFtbNDI1OTQsNDI1OTRdLFwibWFwcGVkXCIsWzQyNTk1XV0sW1s0MjU5NSw0MjU5NV0sXCJ2YWxpZFwiXSxbWzQyNTk2LDQyNTk2XSxcIm1hcHBlZFwiLFs0MjU5N11dLFtbNDI1OTcsNDI1OTddLFwidmFsaWRcIl0sW1s0MjU5OCw0MjU5OF0sXCJtYXBwZWRcIixbNDI1OTldXSxbWzQyNTk5LDQyNTk5XSxcInZhbGlkXCJdLFtbNDI2MDAsNDI2MDBdLFwibWFwcGVkXCIsWzQyNjAxXV0sW1s0MjYwMSw0MjYwMV0sXCJ2YWxpZFwiXSxbWzQyNjAyLDQyNjAyXSxcIm1hcHBlZFwiLFs0MjYwM11dLFtbNDI2MDMsNDI2MDNdLFwidmFsaWRcIl0sW1s0MjYwNCw0MjYwNF0sXCJtYXBwZWRcIixbNDI2MDVdXSxbWzQyNjA1LDQyNjA3XSxcInZhbGlkXCJdLFtbNDI2MDgsNDI2MTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyNjEyLDQyNjE5XSxcInZhbGlkXCJdLFtbNDI2MjAsNDI2MjFdLFwidmFsaWRcIl0sW1s0MjYyMiw0MjYyMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDI2MjMsNDI2MjNdLFwidmFsaWRcIl0sW1s0MjYyNCw0MjYyNF0sXCJtYXBwZWRcIixbNDI2MjVdXSxbWzQyNjI1LDQyNjI1XSxcInZhbGlkXCJdLFtbNDI2MjYsNDI2MjZdLFwibWFwcGVkXCIsWzQyNjI3XV0sW1s0MjYyNyw0MjYyN10sXCJ2YWxpZFwiXSxbWzQyNjI4LDQyNjI4XSxcIm1hcHBlZFwiLFs0MjYyOV1dLFtbNDI2MjksNDI2MjldLFwidmFsaWRcIl0sW1s0MjYzMCw0MjYzMF0sXCJtYXBwZWRcIixbNDI2MzFdXSxbWzQyNjMxLDQyNjMxXSxcInZhbGlkXCJdLFtbNDI2MzIsNDI2MzJdLFwibWFwcGVkXCIsWzQyNjMzXV0sW1s0MjYzMyw0MjYzM10sXCJ2YWxpZFwiXSxbWzQyNjM0LDQyNjM0XSxcIm1hcHBlZFwiLFs0MjYzNV1dLFtbNDI2MzUsNDI2MzVdLFwidmFsaWRcIl0sW1s0MjYzNiw0MjYzNl0sXCJtYXBwZWRcIixbNDI2MzddXSxbWzQyNjM3LDQyNjM3XSxcInZhbGlkXCJdLFtbNDI2MzgsNDI2MzhdLFwibWFwcGVkXCIsWzQyNjM5XV0sW1s0MjYzOSw0MjYzOV0sXCJ2YWxpZFwiXSxbWzQyNjQwLDQyNjQwXSxcIm1hcHBlZFwiLFs0MjY0MV1dLFtbNDI2NDEsNDI2NDFdLFwidmFsaWRcIl0sW1s0MjY0Miw0MjY0Ml0sXCJtYXBwZWRcIixbNDI2NDNdXSxbWzQyNjQzLDQyNjQzXSxcInZhbGlkXCJdLFtbNDI2NDQsNDI2NDRdLFwibWFwcGVkXCIsWzQyNjQ1XV0sW1s0MjY0NSw0MjY0NV0sXCJ2YWxpZFwiXSxbWzQyNjQ2LDQyNjQ2XSxcIm1hcHBlZFwiLFs0MjY0N11dLFtbNDI2NDcsNDI2NDddLFwidmFsaWRcIl0sW1s0MjY0OCw0MjY0OF0sXCJtYXBwZWRcIixbNDI2NDldXSxbWzQyNjQ5LDQyNjQ5XSxcInZhbGlkXCJdLFtbNDI2NTAsNDI2NTBdLFwibWFwcGVkXCIsWzQyNjUxXV0sW1s0MjY1MSw0MjY1MV0sXCJ2YWxpZFwiXSxbWzQyNjUyLDQyNjUyXSxcIm1hcHBlZFwiLFsxMDk4XV0sW1s0MjY1Myw0MjY1M10sXCJtYXBwZWRcIixbMTEwMF1dLFtbNDI2NTQsNDI2NTRdLFwidmFsaWRcIl0sW1s0MjY1NSw0MjY1NV0sXCJ2YWxpZFwiXSxbWzQyNjU2LDQyNzI1XSxcInZhbGlkXCJdLFtbNDI3MjYsNDI3MzVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyNzM2LDQyNzM3XSxcInZhbGlkXCJdLFtbNDI3MzgsNDI3NDNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQyNzQ0LDQyNzUxXSxcImRpc2FsbG93ZWRcIl0sW1s0Mjc1Miw0Mjc3NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDI3NzUsNDI3NzhdLFwidmFsaWRcIl0sW1s0Mjc3OSw0Mjc4M10sXCJ2YWxpZFwiXSxbWzQyNzg0LDQyNzg1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0Mjc4Niw0Mjc4Nl0sXCJtYXBwZWRcIixbNDI3ODddXSxbWzQyNzg3LDQyNzg3XSxcInZhbGlkXCJdLFtbNDI3ODgsNDI3ODhdLFwibWFwcGVkXCIsWzQyNzg5XV0sW1s0Mjc4OSw0Mjc4OV0sXCJ2YWxpZFwiXSxbWzQyNzkwLDQyNzkwXSxcIm1hcHBlZFwiLFs0Mjc5MV1dLFtbNDI3OTEsNDI3OTFdLFwidmFsaWRcIl0sW1s0Mjc5Miw0Mjc5Ml0sXCJtYXBwZWRcIixbNDI3OTNdXSxbWzQyNzkzLDQyNzkzXSxcInZhbGlkXCJdLFtbNDI3OTQsNDI3OTRdLFwibWFwcGVkXCIsWzQyNzk1XV0sW1s0Mjc5NSw0Mjc5NV0sXCJ2YWxpZFwiXSxbWzQyNzk2LDQyNzk2XSxcIm1hcHBlZFwiLFs0Mjc5N11dLFtbNDI3OTcsNDI3OTddLFwidmFsaWRcIl0sW1s0Mjc5OCw0Mjc5OF0sXCJtYXBwZWRcIixbNDI3OTldXSxbWzQyNzk5LDQyODAxXSxcInZhbGlkXCJdLFtbNDI4MDIsNDI4MDJdLFwibWFwcGVkXCIsWzQyODAzXV0sW1s0MjgwMyw0MjgwM10sXCJ2YWxpZFwiXSxbWzQyODA0LDQyODA0XSxcIm1hcHBlZFwiLFs0MjgwNV1dLFtbNDI4MDUsNDI4MDVdLFwidmFsaWRcIl0sW1s0MjgwNiw0MjgwNl0sXCJtYXBwZWRcIixbNDI4MDddXSxbWzQyODA3LDQyODA3XSxcInZhbGlkXCJdLFtbNDI4MDgsNDI4MDhdLFwibWFwcGVkXCIsWzQyODA5XV0sW1s0MjgwOSw0MjgwOV0sXCJ2YWxpZFwiXSxbWzQyODEwLDQyODEwXSxcIm1hcHBlZFwiLFs0MjgxMV1dLFtbNDI4MTEsNDI4MTFdLFwidmFsaWRcIl0sW1s0MjgxMiw0MjgxMl0sXCJtYXBwZWRcIixbNDI4MTNdXSxbWzQyODEzLDQyODEzXSxcInZhbGlkXCJdLFtbNDI4MTQsNDI4MTRdLFwibWFwcGVkXCIsWzQyODE1XV0sW1s0MjgxNSw0MjgxNV0sXCJ2YWxpZFwiXSxbWzQyODE2LDQyODE2XSxcIm1hcHBlZFwiLFs0MjgxN11dLFtbNDI4MTcsNDI4MTddLFwidmFsaWRcIl0sW1s0MjgxOCw0MjgxOF0sXCJtYXBwZWRcIixbNDI4MTldXSxbWzQyODE5LDQyODE5XSxcInZhbGlkXCJdLFtbNDI4MjAsNDI4MjBdLFwibWFwcGVkXCIsWzQyODIxXV0sW1s0MjgyMSw0MjgyMV0sXCJ2YWxpZFwiXSxbWzQyODIyLDQyODIyXSxcIm1hcHBlZFwiLFs0MjgyM11dLFtbNDI4MjMsNDI4MjNdLFwidmFsaWRcIl0sW1s0MjgyNCw0MjgyNF0sXCJtYXBwZWRcIixbNDI4MjVdXSxbWzQyODI1LDQyODI1XSxcInZhbGlkXCJdLFtbNDI4MjYsNDI4MjZdLFwibWFwcGVkXCIsWzQyODI3XV0sW1s0MjgyNyw0MjgyN10sXCJ2YWxpZFwiXSxbWzQyODI4LDQyODI4XSxcIm1hcHBlZFwiLFs0MjgyOV1dLFtbNDI4MjksNDI4MjldLFwidmFsaWRcIl0sW1s0MjgzMCw0MjgzMF0sXCJtYXBwZWRcIixbNDI4MzFdXSxbWzQyODMxLDQyODMxXSxcInZhbGlkXCJdLFtbNDI4MzIsNDI4MzJdLFwibWFwcGVkXCIsWzQyODMzXV0sW1s0MjgzMyw0MjgzM10sXCJ2YWxpZFwiXSxbWzQyODM0LDQyODM0XSxcIm1hcHBlZFwiLFs0MjgzNV1dLFtbNDI4MzUsNDI4MzVdLFwidmFsaWRcIl0sW1s0MjgzNiw0MjgzNl0sXCJtYXBwZWRcIixbNDI4MzddXSxbWzQyODM3LDQyODM3XSxcInZhbGlkXCJdLFtbNDI4MzgsNDI4MzhdLFwibWFwcGVkXCIsWzQyODM5XV0sW1s0MjgzOSw0MjgzOV0sXCJ2YWxpZFwiXSxbWzQyODQwLDQyODQwXSxcIm1hcHBlZFwiLFs0Mjg0MV1dLFtbNDI4NDEsNDI4NDFdLFwidmFsaWRcIl0sW1s0Mjg0Miw0Mjg0Ml0sXCJtYXBwZWRcIixbNDI4NDNdXSxbWzQyODQzLDQyODQzXSxcInZhbGlkXCJdLFtbNDI4NDQsNDI4NDRdLFwibWFwcGVkXCIsWzQyODQ1XV0sW1s0Mjg0NSw0Mjg0NV0sXCJ2YWxpZFwiXSxbWzQyODQ2LDQyODQ2XSxcIm1hcHBlZFwiLFs0Mjg0N11dLFtbNDI4NDcsNDI4NDddLFwidmFsaWRcIl0sW1s0Mjg0OCw0Mjg0OF0sXCJtYXBwZWRcIixbNDI4NDldXSxbWzQyODQ5LDQyODQ5XSxcInZhbGlkXCJdLFtbNDI4NTAsNDI4NTBdLFwibWFwcGVkXCIsWzQyODUxXV0sW1s0Mjg1MSw0Mjg1MV0sXCJ2YWxpZFwiXSxbWzQyODUyLDQyODUyXSxcIm1hcHBlZFwiLFs0Mjg1M11dLFtbNDI4NTMsNDI4NTNdLFwidmFsaWRcIl0sW1s0Mjg1NCw0Mjg1NF0sXCJtYXBwZWRcIixbNDI4NTVdXSxbWzQyODU1LDQyODU1XSxcInZhbGlkXCJdLFtbNDI4NTYsNDI4NTZdLFwibWFwcGVkXCIsWzQyODU3XV0sW1s0Mjg1Nyw0Mjg1N10sXCJ2YWxpZFwiXSxbWzQyODU4LDQyODU4XSxcIm1hcHBlZFwiLFs0Mjg1OV1dLFtbNDI4NTksNDI4NTldLFwidmFsaWRcIl0sW1s0Mjg2MCw0Mjg2MF0sXCJtYXBwZWRcIixbNDI4NjFdXSxbWzQyODYxLDQyODYxXSxcInZhbGlkXCJdLFtbNDI4NjIsNDI4NjJdLFwibWFwcGVkXCIsWzQyODYzXV0sW1s0Mjg2Myw0Mjg2M10sXCJ2YWxpZFwiXSxbWzQyODY0LDQyODY0XSxcIm1hcHBlZFwiLFs0Mjg2M11dLFtbNDI4NjUsNDI4NzJdLFwidmFsaWRcIl0sW1s0Mjg3Myw0Mjg3M10sXCJtYXBwZWRcIixbNDI4NzRdXSxbWzQyODc0LDQyODc0XSxcInZhbGlkXCJdLFtbNDI4NzUsNDI4NzVdLFwibWFwcGVkXCIsWzQyODc2XV0sW1s0Mjg3Niw0Mjg3Nl0sXCJ2YWxpZFwiXSxbWzQyODc3LDQyODc3XSxcIm1hcHBlZFwiLFs3NTQ1XV0sW1s0Mjg3OCw0Mjg3OF0sXCJtYXBwZWRcIixbNDI4NzldXSxbWzQyODc5LDQyODc5XSxcInZhbGlkXCJdLFtbNDI4ODAsNDI4ODBdLFwibWFwcGVkXCIsWzQyODgxXV0sW1s0Mjg4MSw0Mjg4MV0sXCJ2YWxpZFwiXSxbWzQyODgyLDQyODgyXSxcIm1hcHBlZFwiLFs0Mjg4M11dLFtbNDI4ODMsNDI4ODNdLFwidmFsaWRcIl0sW1s0Mjg4NCw0Mjg4NF0sXCJtYXBwZWRcIixbNDI4ODVdXSxbWzQyODg1LDQyODg1XSxcInZhbGlkXCJdLFtbNDI4ODYsNDI4ODZdLFwibWFwcGVkXCIsWzQyODg3XV0sW1s0Mjg4Nyw0Mjg4OF0sXCJ2YWxpZFwiXSxbWzQyODg5LDQyODkwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0Mjg5MSw0Mjg5MV0sXCJtYXBwZWRcIixbNDI4OTJdXSxbWzQyODkyLDQyODkyXSxcInZhbGlkXCJdLFtbNDI4OTMsNDI4OTNdLFwibWFwcGVkXCIsWzYxM11dLFtbNDI4OTQsNDI4OTRdLFwidmFsaWRcIl0sW1s0Mjg5NSw0Mjg5NV0sXCJ2YWxpZFwiXSxbWzQyODk2LDQyODk2XSxcIm1hcHBlZFwiLFs0Mjg5N11dLFtbNDI4OTcsNDI4OTddLFwidmFsaWRcIl0sW1s0Mjg5OCw0Mjg5OF0sXCJtYXBwZWRcIixbNDI4OTldXSxbWzQyODk5LDQyODk5XSxcInZhbGlkXCJdLFtbNDI5MDAsNDI5MDFdLFwidmFsaWRcIl0sW1s0MjkwMiw0MjkwMl0sXCJtYXBwZWRcIixbNDI5MDNdXSxbWzQyOTAzLDQyOTAzXSxcInZhbGlkXCJdLFtbNDI5MDQsNDI5MDRdLFwibWFwcGVkXCIsWzQyOTA1XV0sW1s0MjkwNSw0MjkwNV0sXCJ2YWxpZFwiXSxbWzQyOTA2LDQyOTA2XSxcIm1hcHBlZFwiLFs0MjkwN11dLFtbNDI5MDcsNDI5MDddLFwidmFsaWRcIl0sW1s0MjkwOCw0MjkwOF0sXCJtYXBwZWRcIixbNDI5MDldXSxbWzQyOTA5LDQyOTA5XSxcInZhbGlkXCJdLFtbNDI5MTAsNDI5MTBdLFwibWFwcGVkXCIsWzQyOTExXV0sW1s0MjkxMSw0MjkxMV0sXCJ2YWxpZFwiXSxbWzQyOTEyLDQyOTEyXSxcIm1hcHBlZFwiLFs0MjkxM11dLFtbNDI5MTMsNDI5MTNdLFwidmFsaWRcIl0sW1s0MjkxNCw0MjkxNF0sXCJtYXBwZWRcIixbNDI5MTVdXSxbWzQyOTE1LDQyOTE1XSxcInZhbGlkXCJdLFtbNDI5MTYsNDI5MTZdLFwibWFwcGVkXCIsWzQyOTE3XV0sW1s0MjkxNyw0MjkxN10sXCJ2YWxpZFwiXSxbWzQyOTE4LDQyOTE4XSxcIm1hcHBlZFwiLFs0MjkxOV1dLFtbNDI5MTksNDI5MTldLFwidmFsaWRcIl0sW1s0MjkyMCw0MjkyMF0sXCJtYXBwZWRcIixbNDI5MjFdXSxbWzQyOTIxLDQyOTIxXSxcInZhbGlkXCJdLFtbNDI5MjIsNDI5MjJdLFwibWFwcGVkXCIsWzYxNF1dLFtbNDI5MjMsNDI5MjNdLFwibWFwcGVkXCIsWzYwNF1dLFtbNDI5MjQsNDI5MjRdLFwibWFwcGVkXCIsWzYwOV1dLFtbNDI5MjUsNDI5MjVdLFwibWFwcGVkXCIsWzYyMF1dLFtbNDI5MjYsNDI5MjddLFwiZGlzYWxsb3dlZFwiXSxbWzQyOTI4LDQyOTI4XSxcIm1hcHBlZFwiLFs2NzBdXSxbWzQyOTI5LDQyOTI5XSxcIm1hcHBlZFwiLFs2NDddXSxbWzQyOTMwLDQyOTMwXSxcIm1hcHBlZFwiLFs2NjldXSxbWzQyOTMxLDQyOTMxXSxcIm1hcHBlZFwiLFs0Mzg1OV1dLFtbNDI5MzIsNDI5MzJdLFwibWFwcGVkXCIsWzQyOTMzXV0sW1s0MjkzMyw0MjkzM10sXCJ2YWxpZFwiXSxbWzQyOTM0LDQyOTM0XSxcIm1hcHBlZFwiLFs0MjkzNV1dLFtbNDI5MzUsNDI5MzVdLFwidmFsaWRcIl0sW1s0MjkzNiw0Mjk5OF0sXCJkaXNhbGxvd2VkXCJdLFtbNDI5OTksNDI5OTldLFwidmFsaWRcIl0sW1s0MzAwMCw0MzAwMF0sXCJtYXBwZWRcIixbMjk1XV0sW1s0MzAwMSw0MzAwMV0sXCJtYXBwZWRcIixbMzM5XV0sW1s0MzAwMiw0MzAwMl0sXCJ2YWxpZFwiXSxbWzQzMDAzLDQzMDA3XSxcInZhbGlkXCJdLFtbNDMwMDgsNDMwNDddLFwidmFsaWRcIl0sW1s0MzA0OCw0MzA1MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMwNTIsNDMwNTVdLFwiZGlzYWxsb3dlZFwiXSxbWzQzMDU2LDQzMDY1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzA2Niw0MzA3MV0sXCJkaXNhbGxvd2VkXCJdLFtbNDMwNzIsNDMxMjNdLFwidmFsaWRcIl0sW1s0MzEyNCw0MzEyN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMxMjgsNDMxMzVdLFwiZGlzYWxsb3dlZFwiXSxbWzQzMTM2LDQzMjA0XSxcInZhbGlkXCJdLFtbNDMyMDUsNDMyMTNdLFwiZGlzYWxsb3dlZFwiXSxbWzQzMjE0LDQzMjE1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzIxNiw0MzIyNV0sXCJ2YWxpZFwiXSxbWzQzMjI2LDQzMjMxXSxcImRpc2FsbG93ZWRcIl0sW1s0MzIzMiw0MzI1NV0sXCJ2YWxpZFwiXSxbWzQzMjU2LDQzMjU4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzI1OSw0MzI1OV0sXCJ2YWxpZFwiXSxbWzQzMjYwLDQzMjYwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzI2MSw0MzI2MV0sXCJ2YWxpZFwiXSxbWzQzMjYyLDQzMjYzXSxcImRpc2FsbG93ZWRcIl0sW1s0MzI2NCw0MzMwOV0sXCJ2YWxpZFwiXSxbWzQzMzEwLDQzMzExXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzMxMiw0MzM0N10sXCJ2YWxpZFwiXSxbWzQzMzQ4LDQzMzU4XSxcImRpc2FsbG93ZWRcIl0sW1s0MzM1OSw0MzM1OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDMzNjAsNDMzODhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzMzg5LDQzMzkxXSxcImRpc2FsbG93ZWRcIl0sW1s0MzM5Miw0MzQ1Nl0sXCJ2YWxpZFwiXSxbWzQzNDU3LDQzNDY5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzQ3MCw0MzQ3MF0sXCJkaXNhbGxvd2VkXCJdLFtbNDM0NzEsNDM0ODFdLFwidmFsaWRcIl0sW1s0MzQ4Miw0MzQ4NV0sXCJkaXNhbGxvd2VkXCJdLFtbNDM0ODYsNDM0ODddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQzNDg4LDQzNTE4XSxcInZhbGlkXCJdLFtbNDM1MTksNDM1MTldLFwiZGlzYWxsb3dlZFwiXSxbWzQzNTIwLDQzNTc0XSxcInZhbGlkXCJdLFtbNDM1NzUsNDM1ODNdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNTg0LDQzNTk3XSxcInZhbGlkXCJdLFtbNDM1OTgsNDM1OTldLFwiZGlzYWxsb3dlZFwiXSxbWzQzNjAwLDQzNjA5XSxcInZhbGlkXCJdLFtbNDM2MTAsNDM2MTFdLFwiZGlzYWxsb3dlZFwiXSxbWzQzNjEyLDQzNjE1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzYxNiw0MzYzOF0sXCJ2YWxpZFwiXSxbWzQzNjM5LDQzNjQxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s0MzY0Miw0MzY0M10sXCJ2YWxpZFwiXSxbWzQzNjQ0LDQzNjQ3XSxcInZhbGlkXCJdLFtbNDM2NDgsNDM3MTRdLFwidmFsaWRcIl0sW1s0MzcxNSw0MzczOF0sXCJkaXNhbGxvd2VkXCJdLFtbNDM3MzksNDM3NDFdLFwidmFsaWRcIl0sW1s0Mzc0Miw0Mzc0M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDM3NDQsNDM3NTldLFwidmFsaWRcIl0sW1s0Mzc2MCw0Mzc2MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDM3NjIsNDM3NjZdLFwidmFsaWRcIl0sW1s0Mzc2Nyw0Mzc3Nl0sXCJkaXNhbGxvd2VkXCJdLFtbNDM3NzcsNDM3ODJdLFwidmFsaWRcIl0sW1s0Mzc4Myw0Mzc4NF0sXCJkaXNhbGxvd2VkXCJdLFtbNDM3ODUsNDM3OTBdLFwidmFsaWRcIl0sW1s0Mzc5MSw0Mzc5Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNDM3OTMsNDM3OThdLFwidmFsaWRcIl0sW1s0Mzc5OSw0MzgwN10sXCJkaXNhbGxvd2VkXCJdLFtbNDM4MDgsNDM4MTRdLFwidmFsaWRcIl0sW1s0MzgxNSw0MzgxNV0sXCJkaXNhbGxvd2VkXCJdLFtbNDM4MTYsNDM4MjJdLFwidmFsaWRcIl0sW1s0MzgyMyw0MzgyM10sXCJkaXNhbGxvd2VkXCJdLFtbNDM4MjQsNDM4NjZdLFwidmFsaWRcIl0sW1s0Mzg2Nyw0Mzg2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNDM4NjgsNDM4NjhdLFwibWFwcGVkXCIsWzQyNzkxXV0sW1s0Mzg2OSw0Mzg2OV0sXCJtYXBwZWRcIixbNDM4MzFdXSxbWzQzODcwLDQzODcwXSxcIm1hcHBlZFwiLFs2MTldXSxbWzQzODcxLDQzODcxXSxcIm1hcHBlZFwiLFs0Mzg1OF1dLFtbNDM4NzIsNDM4NzVdLFwidmFsaWRcIl0sW1s0Mzg3Niw0Mzg3N10sXCJ2YWxpZFwiXSxbWzQzODc4LDQzODg3XSxcImRpc2FsbG93ZWRcIl0sW1s0Mzg4OCw0Mzg4OF0sXCJtYXBwZWRcIixbNTAyNF1dLFtbNDM4ODksNDM4ODldLFwibWFwcGVkXCIsWzUwMjVdXSxbWzQzODkwLDQzODkwXSxcIm1hcHBlZFwiLFs1MDI2XV0sW1s0Mzg5MSw0Mzg5MV0sXCJtYXBwZWRcIixbNTAyN11dLFtbNDM4OTIsNDM4OTJdLFwibWFwcGVkXCIsWzUwMjhdXSxbWzQzODkzLDQzODkzXSxcIm1hcHBlZFwiLFs1MDI5XV0sW1s0Mzg5NCw0Mzg5NF0sXCJtYXBwZWRcIixbNTAzMF1dLFtbNDM4OTUsNDM4OTVdLFwibWFwcGVkXCIsWzUwMzFdXSxbWzQzODk2LDQzODk2XSxcIm1hcHBlZFwiLFs1MDMyXV0sW1s0Mzg5Nyw0Mzg5N10sXCJtYXBwZWRcIixbNTAzM11dLFtbNDM4OTgsNDM4OThdLFwibWFwcGVkXCIsWzUwMzRdXSxbWzQzODk5LDQzODk5XSxcIm1hcHBlZFwiLFs1MDM1XV0sW1s0MzkwMCw0MzkwMF0sXCJtYXBwZWRcIixbNTAzNl1dLFtbNDM5MDEsNDM5MDFdLFwibWFwcGVkXCIsWzUwMzddXSxbWzQzOTAyLDQzOTAyXSxcIm1hcHBlZFwiLFs1MDM4XV0sW1s0MzkwMyw0MzkwM10sXCJtYXBwZWRcIixbNTAzOV1dLFtbNDM5MDQsNDM5MDRdLFwibWFwcGVkXCIsWzUwNDBdXSxbWzQzOTA1LDQzOTA1XSxcIm1hcHBlZFwiLFs1MDQxXV0sW1s0MzkwNiw0MzkwNl0sXCJtYXBwZWRcIixbNTA0Ml1dLFtbNDM5MDcsNDM5MDddLFwibWFwcGVkXCIsWzUwNDNdXSxbWzQzOTA4LDQzOTA4XSxcIm1hcHBlZFwiLFs1MDQ0XV0sW1s0MzkwOSw0MzkwOV0sXCJtYXBwZWRcIixbNTA0NV1dLFtbNDM5MTAsNDM5MTBdLFwibWFwcGVkXCIsWzUwNDZdXSxbWzQzOTExLDQzOTExXSxcIm1hcHBlZFwiLFs1MDQ3XV0sW1s0MzkxMiw0MzkxMl0sXCJtYXBwZWRcIixbNTA0OF1dLFtbNDM5MTMsNDM5MTNdLFwibWFwcGVkXCIsWzUwNDldXSxbWzQzOTE0LDQzOTE0XSxcIm1hcHBlZFwiLFs1MDUwXV0sW1s0MzkxNSw0MzkxNV0sXCJtYXBwZWRcIixbNTA1MV1dLFtbNDM5MTYsNDM5MTZdLFwibWFwcGVkXCIsWzUwNTJdXSxbWzQzOTE3LDQzOTE3XSxcIm1hcHBlZFwiLFs1MDUzXV0sW1s0MzkxOCw0MzkxOF0sXCJtYXBwZWRcIixbNTA1NF1dLFtbNDM5MTksNDM5MTldLFwibWFwcGVkXCIsWzUwNTVdXSxbWzQzOTIwLDQzOTIwXSxcIm1hcHBlZFwiLFs1MDU2XV0sW1s0MzkyMSw0MzkyMV0sXCJtYXBwZWRcIixbNTA1N11dLFtbNDM5MjIsNDM5MjJdLFwibWFwcGVkXCIsWzUwNThdXSxbWzQzOTIzLDQzOTIzXSxcIm1hcHBlZFwiLFs1MDU5XV0sW1s0MzkyNCw0MzkyNF0sXCJtYXBwZWRcIixbNTA2MF1dLFtbNDM5MjUsNDM5MjVdLFwibWFwcGVkXCIsWzUwNjFdXSxbWzQzOTI2LDQzOTI2XSxcIm1hcHBlZFwiLFs1MDYyXV0sW1s0MzkyNyw0MzkyN10sXCJtYXBwZWRcIixbNTA2M11dLFtbNDM5MjgsNDM5MjhdLFwibWFwcGVkXCIsWzUwNjRdXSxbWzQzOTI5LDQzOTI5XSxcIm1hcHBlZFwiLFs1MDY1XV0sW1s0MzkzMCw0MzkzMF0sXCJtYXBwZWRcIixbNTA2Nl1dLFtbNDM5MzEsNDM5MzFdLFwibWFwcGVkXCIsWzUwNjddXSxbWzQzOTMyLDQzOTMyXSxcIm1hcHBlZFwiLFs1MDY4XV0sW1s0MzkzMyw0MzkzM10sXCJtYXBwZWRcIixbNTA2OV1dLFtbNDM5MzQsNDM5MzRdLFwibWFwcGVkXCIsWzUwNzBdXSxbWzQzOTM1LDQzOTM1XSxcIm1hcHBlZFwiLFs1MDcxXV0sW1s0MzkzNiw0MzkzNl0sXCJtYXBwZWRcIixbNTA3Ml1dLFtbNDM5MzcsNDM5MzddLFwibWFwcGVkXCIsWzUwNzNdXSxbWzQzOTM4LDQzOTM4XSxcIm1hcHBlZFwiLFs1MDc0XV0sW1s0MzkzOSw0MzkzOV0sXCJtYXBwZWRcIixbNTA3NV1dLFtbNDM5NDAsNDM5NDBdLFwibWFwcGVkXCIsWzUwNzZdXSxbWzQzOTQxLDQzOTQxXSxcIm1hcHBlZFwiLFs1MDc3XV0sW1s0Mzk0Miw0Mzk0Ml0sXCJtYXBwZWRcIixbNTA3OF1dLFtbNDM5NDMsNDM5NDNdLFwibWFwcGVkXCIsWzUwNzldXSxbWzQzOTQ0LDQzOTQ0XSxcIm1hcHBlZFwiLFs1MDgwXV0sW1s0Mzk0NSw0Mzk0NV0sXCJtYXBwZWRcIixbNTA4MV1dLFtbNDM5NDYsNDM5NDZdLFwibWFwcGVkXCIsWzUwODJdXSxbWzQzOTQ3LDQzOTQ3XSxcIm1hcHBlZFwiLFs1MDgzXV0sW1s0Mzk0OCw0Mzk0OF0sXCJtYXBwZWRcIixbNTA4NF1dLFtbNDM5NDksNDM5NDldLFwibWFwcGVkXCIsWzUwODVdXSxbWzQzOTUwLDQzOTUwXSxcIm1hcHBlZFwiLFs1MDg2XV0sW1s0Mzk1MSw0Mzk1MV0sXCJtYXBwZWRcIixbNTA4N11dLFtbNDM5NTIsNDM5NTJdLFwibWFwcGVkXCIsWzUwODhdXSxbWzQzOTUzLDQzOTUzXSxcIm1hcHBlZFwiLFs1MDg5XV0sW1s0Mzk1NCw0Mzk1NF0sXCJtYXBwZWRcIixbNTA5MF1dLFtbNDM5NTUsNDM5NTVdLFwibWFwcGVkXCIsWzUwOTFdXSxbWzQzOTU2LDQzOTU2XSxcIm1hcHBlZFwiLFs1MDkyXV0sW1s0Mzk1Nyw0Mzk1N10sXCJtYXBwZWRcIixbNTA5M11dLFtbNDM5NTgsNDM5NThdLFwibWFwcGVkXCIsWzUwOTRdXSxbWzQzOTU5LDQzOTU5XSxcIm1hcHBlZFwiLFs1MDk1XV0sW1s0Mzk2MCw0Mzk2MF0sXCJtYXBwZWRcIixbNTA5Nl1dLFtbNDM5NjEsNDM5NjFdLFwibWFwcGVkXCIsWzUwOTddXSxbWzQzOTYyLDQzOTYyXSxcIm1hcHBlZFwiLFs1MDk4XV0sW1s0Mzk2Myw0Mzk2M10sXCJtYXBwZWRcIixbNTA5OV1dLFtbNDM5NjQsNDM5NjRdLFwibWFwcGVkXCIsWzUxMDBdXSxbWzQzOTY1LDQzOTY1XSxcIm1hcHBlZFwiLFs1MTAxXV0sW1s0Mzk2Niw0Mzk2Nl0sXCJtYXBwZWRcIixbNTEwMl1dLFtbNDM5NjcsNDM5NjddLFwibWFwcGVkXCIsWzUxMDNdXSxbWzQzOTY4LDQ0MDEwXSxcInZhbGlkXCJdLFtbNDQwMTEsNDQwMTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzQ0MDEyLDQ0MDEzXSxcInZhbGlkXCJdLFtbNDQwMTQsNDQwMTVdLFwiZGlzYWxsb3dlZFwiXSxbWzQ0MDE2LDQ0MDI1XSxcInZhbGlkXCJdLFtbNDQwMjYsNDQwMzFdLFwiZGlzYWxsb3dlZFwiXSxbWzQ0MDMyLDU1MjAzXSxcInZhbGlkXCJdLFtbNTUyMDQsNTUyMTVdLFwiZGlzYWxsb3dlZFwiXSxbWzU1MjE2LDU1MjM4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s1NTIzOSw1NTI0Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNTUyNDMsNTUyOTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzU1MjkyLDU1Mjk1XSxcImRpc2FsbG93ZWRcIl0sW1s1NTI5Niw1NzM0M10sXCJkaXNhbGxvd2VkXCJdLFtbNTczNDQsNjM3NDNdLFwiZGlzYWxsb3dlZFwiXSxbWzYzNzQ0LDYzNzQ0XSxcIm1hcHBlZFwiLFszNTkxMl1dLFtbNjM3NDUsNjM3NDVdLFwibWFwcGVkXCIsWzI2MzU2XV0sW1s2Mzc0Niw2Mzc0Nl0sXCJtYXBwZWRcIixbMzY1NTRdXSxbWzYzNzQ3LDYzNzQ3XSxcIm1hcHBlZFwiLFszNjA0MF1dLFtbNjM3NDgsNjM3NDhdLFwibWFwcGVkXCIsWzI4MzY5XV0sW1s2Mzc0OSw2Mzc0OV0sXCJtYXBwZWRcIixbMjAwMThdXSxbWzYzNzUwLDYzNzUwXSxcIm1hcHBlZFwiLFsyMTQ3N11dLFtbNjM3NTEsNjM3NTJdLFwibWFwcGVkXCIsWzQwODYwXV0sW1s2Mzc1Myw2Mzc1M10sXCJtYXBwZWRcIixbMjI4NjVdXSxbWzYzNzU0LDYzNzU0XSxcIm1hcHBlZFwiLFszNzMyOV1dLFtbNjM3NTUsNjM3NTVdLFwibWFwcGVkXCIsWzIxODk1XV0sW1s2Mzc1Niw2Mzc1Nl0sXCJtYXBwZWRcIixbMjI4NTZdXSxbWzYzNzU3LDYzNzU3XSxcIm1hcHBlZFwiLFsyNTA3OF1dLFtbNjM3NTgsNjM3NThdLFwibWFwcGVkXCIsWzMwMzEzXV0sW1s2Mzc1OSw2Mzc1OV0sXCJtYXBwZWRcIixbMzI2NDVdXSxbWzYzNzYwLDYzNzYwXSxcIm1hcHBlZFwiLFszNDM2N11dLFtbNjM3NjEsNjM3NjFdLFwibWFwcGVkXCIsWzM0NzQ2XV0sW1s2Mzc2Miw2Mzc2Ml0sXCJtYXBwZWRcIixbMzUwNjRdXSxbWzYzNzYzLDYzNzYzXSxcIm1hcHBlZFwiLFszNzAwN11dLFtbNjM3NjQsNjM3NjRdLFwibWFwcGVkXCIsWzI3MTM4XV0sW1s2Mzc2NSw2Mzc2NV0sXCJtYXBwZWRcIixbMjc5MzFdXSxbWzYzNzY2LDYzNzY2XSxcIm1hcHBlZFwiLFsyODg4OV1dLFtbNjM3NjcsNjM3NjddLFwibWFwcGVkXCIsWzI5NjYyXV0sW1s2Mzc2OCw2Mzc2OF0sXCJtYXBwZWRcIixbMzM4NTNdXSxbWzYzNzY5LDYzNzY5XSxcIm1hcHBlZFwiLFszNzIyNl1dLFtbNjM3NzAsNjM3NzBdLFwibWFwcGVkXCIsWzM5NDA5XV0sW1s2Mzc3MSw2Mzc3MV0sXCJtYXBwZWRcIixbMjAwOThdXSxbWzYzNzcyLDYzNzcyXSxcIm1hcHBlZFwiLFsyMTM2NV1dLFtbNjM3NzMsNjM3NzNdLFwibWFwcGVkXCIsWzI3Mzk2XV0sW1s2Mzc3NCw2Mzc3NF0sXCJtYXBwZWRcIixbMjkyMTFdXSxbWzYzNzc1LDYzNzc1XSxcIm1hcHBlZFwiLFszNDM0OV1dLFtbNjM3NzYsNjM3NzZdLFwibWFwcGVkXCIsWzQwNDc4XV0sW1s2Mzc3Nyw2Mzc3N10sXCJtYXBwZWRcIixbMjM4ODhdXSxbWzYzNzc4LDYzNzc4XSxcIm1hcHBlZFwiLFsyODY1MV1dLFtbNjM3NzksNjM3NzldLFwibWFwcGVkXCIsWzM0MjUzXV0sW1s2Mzc4MCw2Mzc4MF0sXCJtYXBwZWRcIixbMzUxNzJdXSxbWzYzNzgxLDYzNzgxXSxcIm1hcHBlZFwiLFsyNTI4OV1dLFtbNjM3ODIsNjM3ODJdLFwibWFwcGVkXCIsWzMzMjQwXV0sW1s2Mzc4Myw2Mzc4M10sXCJtYXBwZWRcIixbMzQ4NDddXSxbWzYzNzg0LDYzNzg0XSxcIm1hcHBlZFwiLFsyNDI2Nl1dLFtbNjM3ODUsNjM3ODVdLFwibWFwcGVkXCIsWzI2MzkxXV0sW1s2Mzc4Niw2Mzc4Nl0sXCJtYXBwZWRcIixbMjgwMTBdXSxbWzYzNzg3LDYzNzg3XSxcIm1hcHBlZFwiLFsyOTQzNl1dLFtbNjM3ODgsNjM3ODhdLFwibWFwcGVkXCIsWzM3MDcwXV0sW1s2Mzc4OSw2Mzc4OV0sXCJtYXBwZWRcIixbMjAzNThdXSxbWzYzNzkwLDYzNzkwXSxcIm1hcHBlZFwiLFsyMDkxOV1dLFtbNjM3OTEsNjM3OTFdLFwibWFwcGVkXCIsWzIxMjE0XV0sW1s2Mzc5Miw2Mzc5Ml0sXCJtYXBwZWRcIixbMjU3OTZdXSxbWzYzNzkzLDYzNzkzXSxcIm1hcHBlZFwiLFsyNzM0N11dLFtbNjM3OTQsNjM3OTRdLFwibWFwcGVkXCIsWzI5MjAwXV0sW1s2Mzc5NSw2Mzc5NV0sXCJtYXBwZWRcIixbMzA0MzldXSxbWzYzNzk2LDYzNzk2XSxcIm1hcHBlZFwiLFszMjc2OV1dLFtbNjM3OTcsNjM3OTddLFwibWFwcGVkXCIsWzM0MzEwXV0sW1s2Mzc5OCw2Mzc5OF0sXCJtYXBwZWRcIixbMzQzOTZdXSxbWzYzNzk5LDYzNzk5XSxcIm1hcHBlZFwiLFszNjMzNV1dLFtbNjM4MDAsNjM4MDBdLFwibWFwcGVkXCIsWzM4NzA2XV0sW1s2MzgwMSw2MzgwMV0sXCJtYXBwZWRcIixbMzk3OTFdXSxbWzYzODAyLDYzODAyXSxcIm1hcHBlZFwiLFs0MDQ0Ml1dLFtbNjM4MDMsNjM4MDNdLFwibWFwcGVkXCIsWzMwODYwXV0sW1s2MzgwNCw2MzgwNF0sXCJtYXBwZWRcIixbMzExMDNdXSxbWzYzODA1LDYzODA1XSxcIm1hcHBlZFwiLFszMjE2MF1dLFtbNjM4MDYsNjM4MDZdLFwibWFwcGVkXCIsWzMzNzM3XV0sW1s2MzgwNyw2MzgwN10sXCJtYXBwZWRcIixbMzc2MzZdXSxbWzYzODA4LDYzODA4XSxcIm1hcHBlZFwiLFs0MDU3NV1dLFtbNjM4MDksNjM4MDldLFwibWFwcGVkXCIsWzM1NTQyXV0sW1s2MzgxMCw2MzgxMF0sXCJtYXBwZWRcIixbMjI3NTFdXSxbWzYzODExLDYzODExXSxcIm1hcHBlZFwiLFsyNDMyNF1dLFtbNjM4MTIsNjM4MTJdLFwibWFwcGVkXCIsWzMxODQwXV0sW1s2MzgxMyw2MzgxM10sXCJtYXBwZWRcIixbMzI4OTRdXSxbWzYzODE0LDYzODE0XSxcIm1hcHBlZFwiLFsyOTI4Ml1dLFtbNjM4MTUsNjM4MTVdLFwibWFwcGVkXCIsWzMwOTIyXV0sW1s2MzgxNiw2MzgxNl0sXCJtYXBwZWRcIixbMzYwMzRdXSxbWzYzODE3LDYzODE3XSxcIm1hcHBlZFwiLFszODY0N11dLFtbNjM4MTgsNjM4MThdLFwibWFwcGVkXCIsWzIyNzQ0XV0sW1s2MzgxOSw2MzgxOV0sXCJtYXBwZWRcIixbMjM2NTBdXSxbWzYzODIwLDYzODIwXSxcIm1hcHBlZFwiLFsyNzE1NV1dLFtbNjM4MjEsNjM4MjFdLFwibWFwcGVkXCIsWzI4MTIyXV0sW1s2MzgyMiw2MzgyMl0sXCJtYXBwZWRcIixbMjg0MzFdXSxbWzYzODIzLDYzODIzXSxcIm1hcHBlZFwiLFszMjA0N11dLFtbNjM4MjQsNjM4MjRdLFwibWFwcGVkXCIsWzMyMzExXV0sW1s2MzgyNSw2MzgyNV0sXCJtYXBwZWRcIixbMzg0NzVdXSxbWzYzODI2LDYzODI2XSxcIm1hcHBlZFwiLFsyMTIwMl1dLFtbNjM4MjcsNjM4MjddLFwibWFwcGVkXCIsWzMyOTA3XV0sW1s2MzgyOCw2MzgyOF0sXCJtYXBwZWRcIixbMjA5NTZdXSxbWzYzODI5LDYzODI5XSxcIm1hcHBlZFwiLFsyMDk0MF1dLFtbNjM4MzAsNjM4MzBdLFwibWFwcGVkXCIsWzMxMjYwXV0sW1s2MzgzMSw2MzgzMV0sXCJtYXBwZWRcIixbMzIxOTBdXSxbWzYzODMyLDYzODMyXSxcIm1hcHBlZFwiLFszMzc3N11dLFtbNjM4MzMsNjM4MzNdLFwibWFwcGVkXCIsWzM4NTE3XV0sW1s2MzgzNCw2MzgzNF0sXCJtYXBwZWRcIixbMzU3MTJdXSxbWzYzODM1LDYzODM1XSxcIm1hcHBlZFwiLFsyNTI5NV1dLFtbNjM4MzYsNjM4MzZdLFwibWFwcGVkXCIsWzI3MTM4XV0sW1s2MzgzNyw2MzgzN10sXCJtYXBwZWRcIixbMzU1ODJdXSxbWzYzODM4LDYzODM4XSxcIm1hcHBlZFwiLFsyMDAyNV1dLFtbNjM4MzksNjM4MzldLFwibWFwcGVkXCIsWzIzNTI3XV0sW1s2Mzg0MCw2Mzg0MF0sXCJtYXBwZWRcIixbMjQ1OTRdXSxbWzYzODQxLDYzODQxXSxcIm1hcHBlZFwiLFsyOTU3NV1dLFtbNjM4NDIsNjM4NDJdLFwibWFwcGVkXCIsWzMwMDY0XV0sW1s2Mzg0Myw2Mzg0M10sXCJtYXBwZWRcIixbMjEyNzFdXSxbWzYzODQ0LDYzODQ0XSxcIm1hcHBlZFwiLFszMDk3MV1dLFtbNjM4NDUsNjM4NDVdLFwibWFwcGVkXCIsWzIwNDE1XV0sW1s2Mzg0Niw2Mzg0Nl0sXCJtYXBwZWRcIixbMjQ0ODldXSxbWzYzODQ3LDYzODQ3XSxcIm1hcHBlZFwiLFsxOTk4MV1dLFtbNjM4NDgsNjM4NDhdLFwibWFwcGVkXCIsWzI3ODUyXV0sW1s2Mzg0OSw2Mzg0OV0sXCJtYXBwZWRcIixbMjU5NzZdXSxbWzYzODUwLDYzODUwXSxcIm1hcHBlZFwiLFszMjAzNF1dLFtbNjM4NTEsNjM4NTFdLFwibWFwcGVkXCIsWzIxNDQzXV0sW1s2Mzg1Miw2Mzg1Ml0sXCJtYXBwZWRcIixbMjI2MjJdXSxbWzYzODUzLDYzODUzXSxcIm1hcHBlZFwiLFszMDQ2NV1dLFtbNjM4NTQsNjM4NTRdLFwibWFwcGVkXCIsWzMzODY1XV0sW1s2Mzg1NSw2Mzg1NV0sXCJtYXBwZWRcIixbMzU0OThdXSxbWzYzODU2LDYzODU2XSxcIm1hcHBlZFwiLFsyNzU3OF1dLFtbNjM4NTcsNjM4NTddLFwibWFwcGVkXCIsWzM2Nzg0XV0sW1s2Mzg1OCw2Mzg1OF0sXCJtYXBwZWRcIixbMjc3ODRdXSxbWzYzODU5LDYzODU5XSxcIm1hcHBlZFwiLFsyNTM0Ml1dLFtbNjM4NjAsNjM4NjBdLFwibWFwcGVkXCIsWzMzNTA5XV0sW1s2Mzg2MSw2Mzg2MV0sXCJtYXBwZWRcIixbMjU1MDRdXSxbWzYzODYyLDYzODYyXSxcIm1hcHBlZFwiLFszMDA1M11dLFtbNjM4NjMsNjM4NjNdLFwibWFwcGVkXCIsWzIwMTQyXV0sW1s2Mzg2NCw2Mzg2NF0sXCJtYXBwZWRcIixbMjA4NDFdXSxbWzYzODY1LDYzODY1XSxcIm1hcHBlZFwiLFsyMDkzN11dLFtbNjM4NjYsNjM4NjZdLFwibWFwcGVkXCIsWzI2NzUzXV0sW1s2Mzg2Nyw2Mzg2N10sXCJtYXBwZWRcIixbMzE5NzVdXSxbWzYzODY4LDYzODY4XSxcIm1hcHBlZFwiLFszMzM5MV1dLFtbNjM4NjksNjM4NjldLFwibWFwcGVkXCIsWzM1NTM4XV0sW1s2Mzg3MCw2Mzg3MF0sXCJtYXBwZWRcIixbMzczMjddXSxbWzYzODcxLDYzODcxXSxcIm1hcHBlZFwiLFsyMTIzN11dLFtbNjM4NzIsNjM4NzJdLFwibWFwcGVkXCIsWzIxNTcwXV0sW1s2Mzg3Myw2Mzg3M10sXCJtYXBwZWRcIixbMjI4OTldXSxbWzYzODc0LDYzODc0XSxcIm1hcHBlZFwiLFsyNDMwMF1dLFtbNjM4NzUsNjM4NzVdLFwibWFwcGVkXCIsWzI2MDUzXV0sW1s2Mzg3Niw2Mzg3Nl0sXCJtYXBwZWRcIixbMjg2NzBdXSxbWzYzODc3LDYzODc3XSxcIm1hcHBlZFwiLFszMTAxOF1dLFtbNjM4NzgsNjM4NzhdLFwibWFwcGVkXCIsWzM4MzE3XV0sW1s2Mzg3OSw2Mzg3OV0sXCJtYXBwZWRcIixbMzk1MzBdXSxbWzYzODgwLDYzODgwXSxcIm1hcHBlZFwiLFs0MDU5OV1dLFtbNjM4ODEsNjM4ODFdLFwibWFwcGVkXCIsWzQwNjU0XV0sW1s2Mzg4Miw2Mzg4Ml0sXCJtYXBwZWRcIixbMjExNDddXSxbWzYzODgzLDYzODgzXSxcIm1hcHBlZFwiLFsyNjMxMF1dLFtbNjM4ODQsNjM4ODRdLFwibWFwcGVkXCIsWzI3NTExXV0sW1s2Mzg4NSw2Mzg4NV0sXCJtYXBwZWRcIixbMzY3MDZdXSxbWzYzODg2LDYzODg2XSxcIm1hcHBlZFwiLFsyNDE4MF1dLFtbNjM4ODcsNjM4ODddLFwibWFwcGVkXCIsWzI0OTc2XV0sW1s2Mzg4OCw2Mzg4OF0sXCJtYXBwZWRcIixbMjUwODhdXSxbWzYzODg5LDYzODg5XSxcIm1hcHBlZFwiLFsyNTc1NF1dLFtbNjM4OTAsNjM4OTBdLFwibWFwcGVkXCIsWzI4NDUxXV0sW1s2Mzg5MSw2Mzg5MV0sXCJtYXBwZWRcIixbMjkwMDFdXSxbWzYzODkyLDYzODkyXSxcIm1hcHBlZFwiLFsyOTgzM11dLFtbNjM4OTMsNjM4OTNdLFwibWFwcGVkXCIsWzMxMTc4XV0sW1s2Mzg5NCw2Mzg5NF0sXCJtYXBwZWRcIixbMzIyNDRdXSxbWzYzODk1LDYzODk1XSxcIm1hcHBlZFwiLFszMjg3OV1dLFtbNjM4OTYsNjM4OTZdLFwibWFwcGVkXCIsWzM2NjQ2XV0sW1s2Mzg5Nyw2Mzg5N10sXCJtYXBwZWRcIixbMzQwMzBdXSxbWzYzODk4LDYzODk4XSxcIm1hcHBlZFwiLFszNjg5OV1dLFtbNjM4OTksNjM4OTldLFwibWFwcGVkXCIsWzM3NzA2XV0sW1s2MzkwMCw2MzkwMF0sXCJtYXBwZWRcIixbMjEwMTVdXSxbWzYzOTAxLDYzOTAxXSxcIm1hcHBlZFwiLFsyMTE1NV1dLFtbNjM5MDIsNjM5MDJdLFwibWFwcGVkXCIsWzIxNjkzXV0sW1s2MzkwMyw2MzkwM10sXCJtYXBwZWRcIixbMjg4NzJdXSxbWzYzOTA0LDYzOTA0XSxcIm1hcHBlZFwiLFszNTAxMF1dLFtbNjM5MDUsNjM5MDVdLFwibWFwcGVkXCIsWzM1NDk4XV0sW1s2MzkwNiw2MzkwNl0sXCJtYXBwZWRcIixbMjQyNjVdXSxbWzYzOTA3LDYzOTA3XSxcIm1hcHBlZFwiLFsyNDU2NV1dLFtbNjM5MDgsNjM5MDhdLFwibWFwcGVkXCIsWzI1NDY3XV0sW1s2MzkwOSw2MzkwOV0sXCJtYXBwZWRcIixbMjc1NjZdXSxbWzYzOTEwLDYzOTEwXSxcIm1hcHBlZFwiLFszMTgwNl1dLFtbNjM5MTEsNjM5MTFdLFwibWFwcGVkXCIsWzI5NTU3XV0sW1s2MzkxMiw2MzkxMl0sXCJtYXBwZWRcIixbMjAxOTZdXSxbWzYzOTEzLDYzOTEzXSxcIm1hcHBlZFwiLFsyMjI2NV1dLFtbNjM5MTQsNjM5MTRdLFwibWFwcGVkXCIsWzIzNTI3XV0sW1s2MzkxNSw2MzkxNV0sXCJtYXBwZWRcIixbMjM5OTRdXSxbWzYzOTE2LDYzOTE2XSxcIm1hcHBlZFwiLFsyNDYwNF1dLFtbNjM5MTcsNjM5MTddLFwibWFwcGVkXCIsWzI5NjE4XV0sW1s2MzkxOCw2MzkxOF0sXCJtYXBwZWRcIixbMjk4MDFdXSxbWzYzOTE5LDYzOTE5XSxcIm1hcHBlZFwiLFszMjY2Nl1dLFtbNjM5MjAsNjM5MjBdLFwibWFwcGVkXCIsWzMyODM4XV0sW1s2MzkyMSw2MzkyMV0sXCJtYXBwZWRcIixbMzc0MjhdXSxbWzYzOTIyLDYzOTIyXSxcIm1hcHBlZFwiLFszODY0Nl1dLFtbNjM5MjMsNjM5MjNdLFwibWFwcGVkXCIsWzM4NzI4XV0sW1s2MzkyNCw2MzkyNF0sXCJtYXBwZWRcIixbMzg5MzZdXSxbWzYzOTI1LDYzOTI1XSxcIm1hcHBlZFwiLFsyMDM2M11dLFtbNjM5MjYsNjM5MjZdLFwibWFwcGVkXCIsWzMxMTUwXV0sW1s2MzkyNyw2MzkyN10sXCJtYXBwZWRcIixbMzczMDBdXSxbWzYzOTI4LDYzOTI4XSxcIm1hcHBlZFwiLFszODU4NF1dLFtbNjM5MjksNjM5MjldLFwibWFwcGVkXCIsWzI0ODAxXV0sW1s2MzkzMCw2MzkzMF0sXCJtYXBwZWRcIixbMjAxMDJdXSxbWzYzOTMxLDYzOTMxXSxcIm1hcHBlZFwiLFsyMDY5OF1dLFtbNjM5MzIsNjM5MzJdLFwibWFwcGVkXCIsWzIzNTM0XV0sW1s2MzkzMyw2MzkzM10sXCJtYXBwZWRcIixbMjM2MTVdXSxbWzYzOTM0LDYzOTM0XSxcIm1hcHBlZFwiLFsyNjAwOV1dLFtbNjM5MzUsNjM5MzVdLFwibWFwcGVkXCIsWzI3MTM4XV0sW1s2MzkzNiw2MzkzNl0sXCJtYXBwZWRcIixbMjkxMzRdXSxbWzYzOTM3LDYzOTM3XSxcIm1hcHBlZFwiLFszMDI3NF1dLFtbNjM5MzgsNjM5MzhdLFwibWFwcGVkXCIsWzM0MDQ0XV0sW1s2MzkzOSw2MzkzOV0sXCJtYXBwZWRcIixbMzY5ODhdXSxbWzYzOTQwLDYzOTQwXSxcIm1hcHBlZFwiLFs0MDg0NV1dLFtbNjM5NDEsNjM5NDFdLFwibWFwcGVkXCIsWzI2MjQ4XV0sW1s2Mzk0Miw2Mzk0Ml0sXCJtYXBwZWRcIixbMzg0NDZdXSxbWzYzOTQzLDYzOTQzXSxcIm1hcHBlZFwiLFsyMTEyOV1dLFtbNjM5NDQsNjM5NDRdLFwibWFwcGVkXCIsWzI2NDkxXV0sW1s2Mzk0NSw2Mzk0NV0sXCJtYXBwZWRcIixbMjY2MTFdXSxbWzYzOTQ2LDYzOTQ2XSxcIm1hcHBlZFwiLFsyNzk2OV1dLFtbNjM5NDcsNjM5NDddLFwibWFwcGVkXCIsWzI4MzE2XV0sW1s2Mzk0OCw2Mzk0OF0sXCJtYXBwZWRcIixbMjk3MDVdXSxbWzYzOTQ5LDYzOTQ5XSxcIm1hcHBlZFwiLFszMDA0MV1dLFtbNjM5NTAsNjM5NTBdLFwibWFwcGVkXCIsWzMwODI3XV0sW1s2Mzk1MSw2Mzk1MV0sXCJtYXBwZWRcIixbMzIwMTZdXSxbWzYzOTUyLDYzOTUyXSxcIm1hcHBlZFwiLFszOTAwNl1dLFtbNjM5NTMsNjM5NTNdLFwibWFwcGVkXCIsWzIwODQ1XV0sW1s2Mzk1NCw2Mzk1NF0sXCJtYXBwZWRcIixbMjUxMzRdXSxbWzYzOTU1LDYzOTU1XSxcIm1hcHBlZFwiLFszODUyMF1dLFtbNjM5NTYsNjM5NTZdLFwibWFwcGVkXCIsWzIwNTIzXV0sW1s2Mzk1Nyw2Mzk1N10sXCJtYXBwZWRcIixbMjM4MzNdXSxbWzYzOTU4LDYzOTU4XSxcIm1hcHBlZFwiLFsyODEzOF1dLFtbNjM5NTksNjM5NTldLFwibWFwcGVkXCIsWzM2NjUwXV0sW1s2Mzk2MCw2Mzk2MF0sXCJtYXBwZWRcIixbMjQ0NTldXSxbWzYzOTYxLDYzOTYxXSxcIm1hcHBlZFwiLFsyNDkwMF1dLFtbNjM5NjIsNjM5NjJdLFwibWFwcGVkXCIsWzI2NjQ3XV0sW1s2Mzk2Myw2Mzk2M10sXCJtYXBwZWRcIixbMjk1NzVdXSxbWzYzOTY0LDYzOTY0XSxcIm1hcHBlZFwiLFszODUzNF1dLFtbNjM5NjUsNjM5NjVdLFwibWFwcGVkXCIsWzIxMDMzXV0sW1s2Mzk2Niw2Mzk2Nl0sXCJtYXBwZWRcIixbMjE1MTldXSxbWzYzOTY3LDYzOTY3XSxcIm1hcHBlZFwiLFsyMzY1M11dLFtbNjM5NjgsNjM5NjhdLFwibWFwcGVkXCIsWzI2MTMxXV0sW1s2Mzk2OSw2Mzk2OV0sXCJtYXBwZWRcIixbMjY0NDZdXSxbWzYzOTcwLDYzOTcwXSxcIm1hcHBlZFwiLFsyNjc5Ml1dLFtbNjM5NzEsNjM5NzFdLFwibWFwcGVkXCIsWzI3ODc3XV0sW1s2Mzk3Miw2Mzk3Ml0sXCJtYXBwZWRcIixbMjk3MDJdXSxbWzYzOTczLDYzOTczXSxcIm1hcHBlZFwiLFszMDE3OF1dLFtbNjM5NzQsNjM5NzRdLFwibWFwcGVkXCIsWzMyNjMzXV0sW1s2Mzk3NSw2Mzk3NV0sXCJtYXBwZWRcIixbMzUwMjNdXSxbWzYzOTc2LDYzOTc2XSxcIm1hcHBlZFwiLFszNTA0MV1dLFtbNjM5NzcsNjM5NzddLFwibWFwcGVkXCIsWzM3MzI0XV0sW1s2Mzk3OCw2Mzk3OF0sXCJtYXBwZWRcIixbMzg2MjZdXSxbWzYzOTc5LDYzOTc5XSxcIm1hcHBlZFwiLFsyMTMxMV1dLFtbNjM5ODAsNjM5ODBdLFwibWFwcGVkXCIsWzI4MzQ2XV0sW1s2Mzk4MSw2Mzk4MV0sXCJtYXBwZWRcIixbMjE1MzNdXSxbWzYzOTgyLDYzOTgyXSxcIm1hcHBlZFwiLFsyOTEzNl1dLFtbNjM5ODMsNjM5ODNdLFwibWFwcGVkXCIsWzI5ODQ4XV0sW1s2Mzk4NCw2Mzk4NF0sXCJtYXBwZWRcIixbMzQyOThdXSxbWzYzOTg1LDYzOTg1XSxcIm1hcHBlZFwiLFszODU2M11dLFtbNjM5ODYsNjM5ODZdLFwibWFwcGVkXCIsWzQwMDIzXV0sW1s2Mzk4Nyw2Mzk4N10sXCJtYXBwZWRcIixbNDA2MDddXSxbWzYzOTg4LDYzOTg4XSxcIm1hcHBlZFwiLFsyNjUxOV1dLFtbNjM5ODksNjM5ODldLFwibWFwcGVkXCIsWzI4MTA3XV0sW1s2Mzk5MCw2Mzk5MF0sXCJtYXBwZWRcIixbMzMyNTZdXSxbWzYzOTkxLDYzOTkxXSxcIm1hcHBlZFwiLFszMTQzNV1dLFtbNjM5OTIsNjM5OTJdLFwibWFwcGVkXCIsWzMxNTIwXV0sW1s2Mzk5Myw2Mzk5M10sXCJtYXBwZWRcIixbMzE4OTBdXSxbWzYzOTk0LDYzOTk0XSxcIm1hcHBlZFwiLFsyOTM3Nl1dLFtbNjM5OTUsNjM5OTVdLFwibWFwcGVkXCIsWzI4ODI1XV0sW1s2Mzk5Niw2Mzk5Nl0sXCJtYXBwZWRcIixbMzU2NzJdXSxbWzYzOTk3LDYzOTk3XSxcIm1hcHBlZFwiLFsyMDE2MF1dLFtbNjM5OTgsNjM5OThdLFwibWFwcGVkXCIsWzMzNTkwXV0sW1s2Mzk5OSw2Mzk5OV0sXCJtYXBwZWRcIixbMjEwNTBdXSxbWzY0MDAwLDY0MDAwXSxcIm1hcHBlZFwiLFsyMDk5OV1dLFtbNjQwMDEsNjQwMDFdLFwibWFwcGVkXCIsWzI0MjMwXV0sW1s2NDAwMiw2NDAwMl0sXCJtYXBwZWRcIixbMjUyOTldXSxbWzY0MDAzLDY0MDAzXSxcIm1hcHBlZFwiLFszMTk1OF1dLFtbNjQwMDQsNjQwMDRdLFwibWFwcGVkXCIsWzIzNDI5XV0sW1s2NDAwNSw2NDAwNV0sXCJtYXBwZWRcIixbMjc5MzRdXSxbWzY0MDA2LDY0MDA2XSxcIm1hcHBlZFwiLFsyNjI5Ml1dLFtbNjQwMDcsNjQwMDddLFwibWFwcGVkXCIsWzM2NjY3XV0sW1s2NDAwOCw2NDAwOF0sXCJtYXBwZWRcIixbMzQ4OTJdXSxbWzY0MDA5LDY0MDA5XSxcIm1hcHBlZFwiLFszODQ3N11dLFtbNjQwMTAsNjQwMTBdLFwibWFwcGVkXCIsWzM1MjExXV0sW1s2NDAxMSw2NDAxMV0sXCJtYXBwZWRcIixbMjQyNzVdXSxbWzY0MDEyLDY0MDEyXSxcIm1hcHBlZFwiLFsyMDgwMF1dLFtbNjQwMTMsNjQwMTNdLFwibWFwcGVkXCIsWzIxOTUyXV0sW1s2NDAxNCw2NDAxNV0sXCJ2YWxpZFwiXSxbWzY0MDE2LDY0MDE2XSxcIm1hcHBlZFwiLFsyMjYxOF1dLFtbNjQwMTcsNjQwMTddLFwidmFsaWRcIl0sW1s2NDAxOCw2NDAxOF0sXCJtYXBwZWRcIixbMjYyMjhdXSxbWzY0MDE5LDY0MDIwXSxcInZhbGlkXCJdLFtbNjQwMjEsNjQwMjFdLFwibWFwcGVkXCIsWzIwOTU4XV0sW1s2NDAyMiw2NDAyMl0sXCJtYXBwZWRcIixbMjk0ODJdXSxbWzY0MDIzLDY0MDIzXSxcIm1hcHBlZFwiLFszMDQxMF1dLFtbNjQwMjQsNjQwMjRdLFwibWFwcGVkXCIsWzMxMDM2XV0sW1s2NDAyNSw2NDAyNV0sXCJtYXBwZWRcIixbMzEwNzBdXSxbWzY0MDI2LDY0MDI2XSxcIm1hcHBlZFwiLFszMTA3N11dLFtbNjQwMjcsNjQwMjddLFwibWFwcGVkXCIsWzMxMTE5XV0sW1s2NDAyOCw2NDAyOF0sXCJtYXBwZWRcIixbMzg3NDJdXSxbWzY0MDI5LDY0MDI5XSxcIm1hcHBlZFwiLFszMTkzNF1dLFtbNjQwMzAsNjQwMzBdLFwibWFwcGVkXCIsWzMyNzAxXV0sW1s2NDAzMSw2NDAzMV0sXCJ2YWxpZFwiXSxbWzY0MDMyLDY0MDMyXSxcIm1hcHBlZFwiLFszNDMyMl1dLFtbNjQwMzMsNjQwMzNdLFwidmFsaWRcIl0sW1s2NDAzNCw2NDAzNF0sXCJtYXBwZWRcIixbMzU1NzZdXSxbWzY0MDM1LDY0MDM2XSxcInZhbGlkXCJdLFtbNjQwMzcsNjQwMzddLFwibWFwcGVkXCIsWzM2OTIwXV0sW1s2NDAzOCw2NDAzOF0sXCJtYXBwZWRcIixbMzcxMTddXSxbWzY0MDM5LDY0MDQxXSxcInZhbGlkXCJdLFtbNjQwNDIsNjQwNDJdLFwibWFwcGVkXCIsWzM5MTUxXV0sW1s2NDA0Myw2NDA0M10sXCJtYXBwZWRcIixbMzkxNjRdXSxbWzY0MDQ0LDY0MDQ0XSxcIm1hcHBlZFwiLFszOTIwOF1dLFtbNjQwNDUsNjQwNDVdLFwibWFwcGVkXCIsWzQwMzcyXV0sW1s2NDA0Niw2NDA0Nl0sXCJtYXBwZWRcIixbMzcwODZdXSxbWzY0MDQ3LDY0MDQ3XSxcIm1hcHBlZFwiLFszODU4M11dLFtbNjQwNDgsNjQwNDhdLFwibWFwcGVkXCIsWzIwMzk4XV0sW1s2NDA0OSw2NDA0OV0sXCJtYXBwZWRcIixbMjA3MTFdXSxbWzY0MDUwLDY0MDUwXSxcIm1hcHBlZFwiLFsyMDgxM11dLFtbNjQwNTEsNjQwNTFdLFwibWFwcGVkXCIsWzIxMTkzXV0sW1s2NDA1Miw2NDA1Ml0sXCJtYXBwZWRcIixbMjEyMjBdXSxbWzY0MDUzLDY0MDUzXSxcIm1hcHBlZFwiLFsyMTMyOV1dLFtbNjQwNTQsNjQwNTRdLFwibWFwcGVkXCIsWzIxOTE3XV0sW1s2NDA1NSw2NDA1NV0sXCJtYXBwZWRcIixbMjIwMjJdXSxbWzY0MDU2LDY0MDU2XSxcIm1hcHBlZFwiLFsyMjEyMF1dLFtbNjQwNTcsNjQwNTddLFwibWFwcGVkXCIsWzIyNTkyXV0sW1s2NDA1OCw2NDA1OF0sXCJtYXBwZWRcIixbMjI2OTZdXSxbWzY0MDU5LDY0MDU5XSxcIm1hcHBlZFwiLFsyMzY1Ml1dLFtbNjQwNjAsNjQwNjBdLFwibWFwcGVkXCIsWzIzNjYyXV0sW1s2NDA2MSw2NDA2MV0sXCJtYXBwZWRcIixbMjQ3MjRdXSxbWzY0MDYyLDY0MDYyXSxcIm1hcHBlZFwiLFsyNDkzNl1dLFtbNjQwNjMsNjQwNjNdLFwibWFwcGVkXCIsWzI0OTc0XV0sW1s2NDA2NCw2NDA2NF0sXCJtYXBwZWRcIixbMjUwNzRdXSxbWzY0MDY1LDY0MDY1XSxcIm1hcHBlZFwiLFsyNTkzNV1dLFtbNjQwNjYsNjQwNjZdLFwibWFwcGVkXCIsWzI2MDgyXV0sW1s2NDA2Nyw2NDA2N10sXCJtYXBwZWRcIixbMjYyNTddXSxbWzY0MDY4LDY0MDY4XSxcIm1hcHBlZFwiLFsyNjc1N11dLFtbNjQwNjksNjQwNjldLFwibWFwcGVkXCIsWzI4MDIzXV0sW1s2NDA3MCw2NDA3MF0sXCJtYXBwZWRcIixbMjgxODZdXSxbWzY0MDcxLDY0MDcxXSxcIm1hcHBlZFwiLFsyODQ1MF1dLFtbNjQwNzIsNjQwNzJdLFwibWFwcGVkXCIsWzI5MDM4XV0sW1s2NDA3Myw2NDA3M10sXCJtYXBwZWRcIixbMjkyMjddXSxbWzY0MDc0LDY0MDc0XSxcIm1hcHBlZFwiLFsyOTczMF1dLFtbNjQwNzUsNjQwNzVdLFwibWFwcGVkXCIsWzMwODY1XV0sW1s2NDA3Niw2NDA3Nl0sXCJtYXBwZWRcIixbMzEwMzhdXSxbWzY0MDc3LDY0MDc3XSxcIm1hcHBlZFwiLFszMTA0OV1dLFtbNjQwNzgsNjQwNzhdLFwibWFwcGVkXCIsWzMxMDQ4XV0sW1s2NDA3OSw2NDA3OV0sXCJtYXBwZWRcIixbMzEwNTZdXSxbWzY0MDgwLDY0MDgwXSxcIm1hcHBlZFwiLFszMTA2Ml1dLFtbNjQwODEsNjQwODFdLFwibWFwcGVkXCIsWzMxMDY5XV0sW1s2NDA4Miw2NDA4Ml0sXCJtYXBwZWRcIixbMzExMTddXSxbWzY0MDgzLDY0MDgzXSxcIm1hcHBlZFwiLFszMTExOF1dLFtbNjQwODQsNjQwODRdLFwibWFwcGVkXCIsWzMxMjk2XV0sW1s2NDA4NSw2NDA4NV0sXCJtYXBwZWRcIixbMzEzNjFdXSxbWzY0MDg2LDY0MDg2XSxcIm1hcHBlZFwiLFszMTY4MF1dLFtbNjQwODcsNjQwODddLFwibWFwcGVkXCIsWzMyMjQ0XV0sW1s2NDA4OCw2NDA4OF0sXCJtYXBwZWRcIixbMzIyNjVdXSxbWzY0MDg5LDY0MDg5XSxcIm1hcHBlZFwiLFszMjMyMV1dLFtbNjQwOTAsNjQwOTBdLFwibWFwcGVkXCIsWzMyNjI2XV0sW1s2NDA5MSw2NDA5MV0sXCJtYXBwZWRcIixbMzI3NzNdXSxbWzY0MDkyLDY0MDkyXSxcIm1hcHBlZFwiLFszMzI2MV1dLFtbNjQwOTMsNjQwOTRdLFwibWFwcGVkXCIsWzMzNDAxXV0sW1s2NDA5NSw2NDA5NV0sXCJtYXBwZWRcIixbMzM4NzldXSxbWzY0MDk2LDY0MDk2XSxcIm1hcHBlZFwiLFszNTA4OF1dLFtbNjQwOTcsNjQwOTddLFwibWFwcGVkXCIsWzM1MjIyXV0sW1s2NDA5OCw2NDA5OF0sXCJtYXBwZWRcIixbMzU1ODVdXSxbWzY0MDk5LDY0MDk5XSxcIm1hcHBlZFwiLFszNTY0MV1dLFtbNjQxMDAsNjQxMDBdLFwibWFwcGVkXCIsWzM2MDUxXV0sW1s2NDEwMSw2NDEwMV0sXCJtYXBwZWRcIixbMzYxMDRdXSxbWzY0MTAyLDY0MTAyXSxcIm1hcHBlZFwiLFszNjc5MF1dLFtbNjQxMDMsNjQxMDNdLFwibWFwcGVkXCIsWzM2OTIwXV0sW1s2NDEwNCw2NDEwNF0sXCJtYXBwZWRcIixbMzg2MjddXSxbWzY0MTA1LDY0MTA1XSxcIm1hcHBlZFwiLFszODkxMV1dLFtbNjQxMDYsNjQxMDZdLFwibWFwcGVkXCIsWzM4OTcxXV0sW1s2NDEwNyw2NDEwN10sXCJtYXBwZWRcIixbMjQ2OTNdXSxbWzY0MTA4LDY0MTA4XSxcIm1hcHBlZFwiLFsxNDgyMDZdXSxbWzY0MTA5LDY0MTA5XSxcIm1hcHBlZFwiLFszMzMwNF1dLFtbNjQxMTAsNjQxMTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY0MTEyLDY0MTEyXSxcIm1hcHBlZFwiLFsyMDAwNl1dLFtbNjQxMTMsNjQxMTNdLFwibWFwcGVkXCIsWzIwOTE3XV0sW1s2NDExNCw2NDExNF0sXCJtYXBwZWRcIixbMjA4NDBdXSxbWzY0MTE1LDY0MTE1XSxcIm1hcHBlZFwiLFsyMDM1Ml1dLFtbNjQxMTYsNjQxMTZdLFwibWFwcGVkXCIsWzIwODA1XV0sW1s2NDExNyw2NDExN10sXCJtYXBwZWRcIixbMjA4NjRdXSxbWzY0MTE4LDY0MTE4XSxcIm1hcHBlZFwiLFsyMTE5MV1dLFtbNjQxMTksNjQxMTldLFwibWFwcGVkXCIsWzIxMjQyXV0sW1s2NDEyMCw2NDEyMF0sXCJtYXBwZWRcIixbMjE5MTddXSxbWzY0MTIxLDY0MTIxXSxcIm1hcHBlZFwiLFsyMTg0NV1dLFtbNjQxMjIsNjQxMjJdLFwibWFwcGVkXCIsWzIxOTEzXV0sW1s2NDEyMyw2NDEyM10sXCJtYXBwZWRcIixbMjE5ODZdXSxbWzY0MTI0LDY0MTI0XSxcIm1hcHBlZFwiLFsyMjYxOF1dLFtbNjQxMjUsNjQxMjVdLFwibWFwcGVkXCIsWzIyNzA3XV0sW1s2NDEyNiw2NDEyNl0sXCJtYXBwZWRcIixbMjI4NTJdXSxbWzY0MTI3LDY0MTI3XSxcIm1hcHBlZFwiLFsyMjg2OF1dLFtbNjQxMjgsNjQxMjhdLFwibWFwcGVkXCIsWzIzMTM4XV0sW1s2NDEyOSw2NDEyOV0sXCJtYXBwZWRcIixbMjMzMzZdXSxbWzY0MTMwLDY0MTMwXSxcIm1hcHBlZFwiLFsyNDI3NF1dLFtbNjQxMzEsNjQxMzFdLFwibWFwcGVkXCIsWzI0MjgxXV0sW1s2NDEzMiw2NDEzMl0sXCJtYXBwZWRcIixbMjQ0MjVdXSxbWzY0MTMzLDY0MTMzXSxcIm1hcHBlZFwiLFsyNDQ5M11dLFtbNjQxMzQsNjQxMzRdLFwibWFwcGVkXCIsWzI0NzkyXV0sW1s2NDEzNSw2NDEzNV0sXCJtYXBwZWRcIixbMjQ5MTBdXSxbWzY0MTM2LDY0MTM2XSxcIm1hcHBlZFwiLFsyNDg0MF1dLFtbNjQxMzcsNjQxMzddLFwibWFwcGVkXCIsWzI0OTc0XV0sW1s2NDEzOCw2NDEzOF0sXCJtYXBwZWRcIixbMjQ5MjhdXSxbWzY0MTM5LDY0MTM5XSxcIm1hcHBlZFwiLFsyNTA3NF1dLFtbNjQxNDAsNjQxNDBdLFwibWFwcGVkXCIsWzI1MTQwXV0sW1s2NDE0MSw2NDE0MV0sXCJtYXBwZWRcIixbMjU1NDBdXSxbWzY0MTQyLDY0MTQyXSxcIm1hcHBlZFwiLFsyNTYyOF1dLFtbNjQxNDMsNjQxNDNdLFwibWFwcGVkXCIsWzI1NjgyXV0sW1s2NDE0NCw2NDE0NF0sXCJtYXBwZWRcIixbMjU5NDJdXSxbWzY0MTQ1LDY0MTQ1XSxcIm1hcHBlZFwiLFsyNjIyOF1dLFtbNjQxNDYsNjQxNDZdLFwibWFwcGVkXCIsWzI2MzkxXV0sW1s2NDE0Nyw2NDE0N10sXCJtYXBwZWRcIixbMjYzOTVdXSxbWzY0MTQ4LDY0MTQ4XSxcIm1hcHBlZFwiLFsyNjQ1NF1dLFtbNjQxNDksNjQxNDldLFwibWFwcGVkXCIsWzI3NTEzXV0sW1s2NDE1MCw2NDE1MF0sXCJtYXBwZWRcIixbMjc1NzhdXSxbWzY0MTUxLDY0MTUxXSxcIm1hcHBlZFwiLFsyNzk2OV1dLFtbNjQxNTIsNjQxNTJdLFwibWFwcGVkXCIsWzI4Mzc5XV0sW1s2NDE1Myw2NDE1M10sXCJtYXBwZWRcIixbMjgzNjNdXSxbWzY0MTU0LDY0MTU0XSxcIm1hcHBlZFwiLFsyODQ1MF1dLFtbNjQxNTUsNjQxNTVdLFwibWFwcGVkXCIsWzI4NzAyXV0sW1s2NDE1Niw2NDE1Nl0sXCJtYXBwZWRcIixbMjkwMzhdXSxbWzY0MTU3LDY0MTU3XSxcIm1hcHBlZFwiLFszMDYzMV1dLFtbNjQxNTgsNjQxNThdLFwibWFwcGVkXCIsWzI5MjM3XV0sW1s2NDE1OSw2NDE1OV0sXCJtYXBwZWRcIixbMjkzNTldXSxbWzY0MTYwLDY0MTYwXSxcIm1hcHBlZFwiLFsyOTQ4Ml1dLFtbNjQxNjEsNjQxNjFdLFwibWFwcGVkXCIsWzI5ODA5XV0sW1s2NDE2Miw2NDE2Ml0sXCJtYXBwZWRcIixbMjk5NThdXSxbWzY0MTYzLDY0MTYzXSxcIm1hcHBlZFwiLFszMDAxMV1dLFtbNjQxNjQsNjQxNjRdLFwibWFwcGVkXCIsWzMwMjM3XV0sW1s2NDE2NSw2NDE2NV0sXCJtYXBwZWRcIixbMzAyMzldXSxbWzY0MTY2LDY0MTY2XSxcIm1hcHBlZFwiLFszMDQxMF1dLFtbNjQxNjcsNjQxNjddLFwibWFwcGVkXCIsWzMwNDI3XV0sW1s2NDE2OCw2NDE2OF0sXCJtYXBwZWRcIixbMzA0NTJdXSxbWzY0MTY5LDY0MTY5XSxcIm1hcHBlZFwiLFszMDUzOF1dLFtbNjQxNzAsNjQxNzBdLFwibWFwcGVkXCIsWzMwNTI4XV0sW1s2NDE3MSw2NDE3MV0sXCJtYXBwZWRcIixbMzA5MjRdXSxbWzY0MTcyLDY0MTcyXSxcIm1hcHBlZFwiLFszMTQwOV1dLFtbNjQxNzMsNjQxNzNdLFwibWFwcGVkXCIsWzMxNjgwXV0sW1s2NDE3NCw2NDE3NF0sXCJtYXBwZWRcIixbMzE4NjddXSxbWzY0MTc1LDY0MTc1XSxcIm1hcHBlZFwiLFszMjA5MV1dLFtbNjQxNzYsNjQxNzZdLFwibWFwcGVkXCIsWzMyMjQ0XV0sW1s2NDE3Nyw2NDE3N10sXCJtYXBwZWRcIixbMzI1NzRdXSxbWzY0MTc4LDY0MTc4XSxcIm1hcHBlZFwiLFszMjc3M11dLFtbNjQxNzksNjQxNzldLFwibWFwcGVkXCIsWzMzNjE4XV0sW1s2NDE4MCw2NDE4MF0sXCJtYXBwZWRcIixbMzM3NzVdXSxbWzY0MTgxLDY0MTgxXSxcIm1hcHBlZFwiLFszNDY4MV1dLFtbNjQxODIsNjQxODJdLFwibWFwcGVkXCIsWzM1MTM3XV0sW1s2NDE4Myw2NDE4M10sXCJtYXBwZWRcIixbMzUyMDZdXSxbWzY0MTg0LDY0MTg0XSxcIm1hcHBlZFwiLFszNTIyMl1dLFtbNjQxODUsNjQxODVdLFwibWFwcGVkXCIsWzM1NTE5XV0sW1s2NDE4Niw2NDE4Nl0sXCJtYXBwZWRcIixbMzU1NzZdXSxbWzY0MTg3LDY0MTg3XSxcIm1hcHBlZFwiLFszNTUzMV1dLFtbNjQxODgsNjQxODhdLFwibWFwcGVkXCIsWzM1NTg1XV0sW1s2NDE4OSw2NDE4OV0sXCJtYXBwZWRcIixbMzU1ODJdXSxbWzY0MTkwLDY0MTkwXSxcIm1hcHBlZFwiLFszNTU2NV1dLFtbNjQxOTEsNjQxOTFdLFwibWFwcGVkXCIsWzM1NjQxXV0sW1s2NDE5Miw2NDE5Ml0sXCJtYXBwZWRcIixbMzU3MjJdXSxbWzY0MTkzLDY0MTkzXSxcIm1hcHBlZFwiLFszNjEwNF1dLFtbNjQxOTQsNjQxOTRdLFwibWFwcGVkXCIsWzM2NjY0XV0sW1s2NDE5NSw2NDE5NV0sXCJtYXBwZWRcIixbMzY5NzhdXSxbWzY0MTk2LDY0MTk2XSxcIm1hcHBlZFwiLFszNzI3M11dLFtbNjQxOTcsNjQxOTddLFwibWFwcGVkXCIsWzM3NDk0XV0sW1s2NDE5OCw2NDE5OF0sXCJtYXBwZWRcIixbMzg1MjRdXSxbWzY0MTk5LDY0MTk5XSxcIm1hcHBlZFwiLFszODYyN11dLFtbNjQyMDAsNjQyMDBdLFwibWFwcGVkXCIsWzM4NzQyXV0sW1s2NDIwMSw2NDIwMV0sXCJtYXBwZWRcIixbMzg4NzVdXSxbWzY0MjAyLDY0MjAyXSxcIm1hcHBlZFwiLFszODkxMV1dLFtbNjQyMDMsNjQyMDNdLFwibWFwcGVkXCIsWzM4OTIzXV0sW1s2NDIwNCw2NDIwNF0sXCJtYXBwZWRcIixbMzg5NzFdXSxbWzY0MjA1LDY0MjA1XSxcIm1hcHBlZFwiLFszOTY5OF1dLFtbNjQyMDYsNjQyMDZdLFwibWFwcGVkXCIsWzQwODYwXV0sW1s2NDIwNyw2NDIwN10sXCJtYXBwZWRcIixbMTQxMzg2XV0sW1s2NDIwOCw2NDIwOF0sXCJtYXBwZWRcIixbMTQxMzgwXV0sW1s2NDIwOSw2NDIwOV0sXCJtYXBwZWRcIixbMTQ0MzQxXV0sW1s2NDIxMCw2NDIxMF0sXCJtYXBwZWRcIixbMTUyNjFdXSxbWzY0MjExLDY0MjExXSxcIm1hcHBlZFwiLFsxNjQwOF1dLFtbNjQyMTIsNjQyMTJdLFwibWFwcGVkXCIsWzE2NDQxXV0sW1s2NDIxMyw2NDIxM10sXCJtYXBwZWRcIixbMTUyMTM3XV0sW1s2NDIxNCw2NDIxNF0sXCJtYXBwZWRcIixbMTU0ODMyXV0sW1s2NDIxNSw2NDIxNV0sXCJtYXBwZWRcIixbMTYzNTM5XV0sW1s2NDIxNiw2NDIxNl0sXCJtYXBwZWRcIixbNDA3NzFdXSxbWzY0MjE3LDY0MjE3XSxcIm1hcHBlZFwiLFs0MDg0Nl1dLFtbNjQyMTgsNjQyNTVdLFwiZGlzYWxsb3dlZFwiXSxbWzY0MjU2LDY0MjU2XSxcIm1hcHBlZFwiLFsxMDIsMTAyXV0sW1s2NDI1Nyw2NDI1N10sXCJtYXBwZWRcIixbMTAyLDEwNV1dLFtbNjQyNTgsNjQyNThdLFwibWFwcGVkXCIsWzEwMiwxMDhdXSxbWzY0MjU5LDY0MjU5XSxcIm1hcHBlZFwiLFsxMDIsMTAyLDEwNV1dLFtbNjQyNjAsNjQyNjBdLFwibWFwcGVkXCIsWzEwMiwxMDIsMTA4XV0sW1s2NDI2MSw2NDI2Ml0sXCJtYXBwZWRcIixbMTE1LDExNl1dLFtbNjQyNjMsNjQyNzRdLFwiZGlzYWxsb3dlZFwiXSxbWzY0Mjc1LDY0Mjc1XSxcIm1hcHBlZFwiLFsxMzk2LDEzOThdXSxbWzY0Mjc2LDY0Mjc2XSxcIm1hcHBlZFwiLFsxMzk2LDEzODFdXSxbWzY0Mjc3LDY0Mjc3XSxcIm1hcHBlZFwiLFsxMzk2LDEzODddXSxbWzY0Mjc4LDY0Mjc4XSxcIm1hcHBlZFwiLFsxNDA2LDEzOThdXSxbWzY0Mjc5LDY0Mjc5XSxcIm1hcHBlZFwiLFsxMzk2LDEzODldXSxbWzY0MjgwLDY0Mjg0XSxcImRpc2FsbG93ZWRcIl0sW1s2NDI4NSw2NDI4NV0sXCJtYXBwZWRcIixbMTQ5NywxNDYwXV0sW1s2NDI4Niw2NDI4Nl0sXCJ2YWxpZFwiXSxbWzY0Mjg3LDY0Mjg3XSxcIm1hcHBlZFwiLFsxNTIyLDE0NjNdXSxbWzY0Mjg4LDY0Mjg4XSxcIm1hcHBlZFwiLFsxNTA2XV0sW1s2NDI4OSw2NDI4OV0sXCJtYXBwZWRcIixbMTQ4OF1dLFtbNjQyOTAsNjQyOTBdLFwibWFwcGVkXCIsWzE0OTFdXSxbWzY0MjkxLDY0MjkxXSxcIm1hcHBlZFwiLFsxNDkyXV0sW1s2NDI5Miw2NDI5Ml0sXCJtYXBwZWRcIixbMTQ5OV1dLFtbNjQyOTMsNjQyOTNdLFwibWFwcGVkXCIsWzE1MDBdXSxbWzY0Mjk0LDY0Mjk0XSxcIm1hcHBlZFwiLFsxNTAxXV0sW1s2NDI5NSw2NDI5NV0sXCJtYXBwZWRcIixbMTUxMl1dLFtbNjQyOTYsNjQyOTZdLFwibWFwcGVkXCIsWzE1MTRdXSxbWzY0Mjk3LDY0Mjk3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDNdXSxbWzY0Mjk4LDY0Mjk4XSxcIm1hcHBlZFwiLFsxNTEzLDE0NzNdXSxbWzY0Mjk5LDY0Mjk5XSxcIm1hcHBlZFwiLFsxNTEzLDE0NzRdXSxbWzY0MzAwLDY0MzAwXSxcIm1hcHBlZFwiLFsxNTEzLDE0NjgsMTQ3M11dLFtbNjQzMDEsNjQzMDFdLFwibWFwcGVkXCIsWzE1MTMsMTQ2OCwxNDc0XV0sW1s2NDMwMiw2NDMwMl0sXCJtYXBwZWRcIixbMTQ4OCwxNDYzXV0sW1s2NDMwMyw2NDMwM10sXCJtYXBwZWRcIixbMTQ4OCwxNDY0XV0sW1s2NDMwNCw2NDMwNF0sXCJtYXBwZWRcIixbMTQ4OCwxNDY4XV0sW1s2NDMwNSw2NDMwNV0sXCJtYXBwZWRcIixbMTQ4OSwxNDY4XV0sW1s2NDMwNiw2NDMwNl0sXCJtYXBwZWRcIixbMTQ5MCwxNDY4XV0sW1s2NDMwNyw2NDMwN10sXCJtYXBwZWRcIixbMTQ5MSwxNDY4XV0sW1s2NDMwOCw2NDMwOF0sXCJtYXBwZWRcIixbMTQ5MiwxNDY4XV0sW1s2NDMwOSw2NDMwOV0sXCJtYXBwZWRcIixbMTQ5MywxNDY4XV0sW1s2NDMxMCw2NDMxMF0sXCJtYXBwZWRcIixbMTQ5NCwxNDY4XV0sW1s2NDMxMSw2NDMxMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjQzMTIsNjQzMTJdLFwibWFwcGVkXCIsWzE0OTYsMTQ2OF1dLFtbNjQzMTMsNjQzMTNdLFwibWFwcGVkXCIsWzE0OTcsMTQ2OF1dLFtbNjQzMTQsNjQzMTRdLFwibWFwcGVkXCIsWzE0OTgsMTQ2OF1dLFtbNjQzMTUsNjQzMTVdLFwibWFwcGVkXCIsWzE0OTksMTQ2OF1dLFtbNjQzMTYsNjQzMTZdLFwibWFwcGVkXCIsWzE1MDAsMTQ2OF1dLFtbNjQzMTcsNjQzMTddLFwiZGlzYWxsb3dlZFwiXSxbWzY0MzE4LDY0MzE4XSxcIm1hcHBlZFwiLFsxNTAyLDE0NjhdXSxbWzY0MzE5LDY0MzE5XSxcImRpc2FsbG93ZWRcIl0sW1s2NDMyMCw2NDMyMF0sXCJtYXBwZWRcIixbMTUwNCwxNDY4XV0sW1s2NDMyMSw2NDMyMV0sXCJtYXBwZWRcIixbMTUwNSwxNDY4XV0sW1s2NDMyMiw2NDMyMl0sXCJkaXNhbGxvd2VkXCJdLFtbNjQzMjMsNjQzMjNdLFwibWFwcGVkXCIsWzE1MDcsMTQ2OF1dLFtbNjQzMjQsNjQzMjRdLFwibWFwcGVkXCIsWzE1MDgsMTQ2OF1dLFtbNjQzMjUsNjQzMjVdLFwiZGlzYWxsb3dlZFwiXSxbWzY0MzI2LDY0MzI2XSxcIm1hcHBlZFwiLFsxNTEwLDE0NjhdXSxbWzY0MzI3LDY0MzI3XSxcIm1hcHBlZFwiLFsxNTExLDE0NjhdXSxbWzY0MzI4LDY0MzI4XSxcIm1hcHBlZFwiLFsxNTEyLDE0NjhdXSxbWzY0MzI5LDY0MzI5XSxcIm1hcHBlZFwiLFsxNTEzLDE0NjhdXSxbWzY0MzMwLDY0MzMwXSxcIm1hcHBlZFwiLFsxNTE0LDE0NjhdXSxbWzY0MzMxLDY0MzMxXSxcIm1hcHBlZFwiLFsxNDkzLDE0NjVdXSxbWzY0MzMyLDY0MzMyXSxcIm1hcHBlZFwiLFsxNDg5LDE0NzFdXSxbWzY0MzMzLDY0MzMzXSxcIm1hcHBlZFwiLFsxNDk5LDE0NzFdXSxbWzY0MzM0LDY0MzM0XSxcIm1hcHBlZFwiLFsxNTA4LDE0NzFdXSxbWzY0MzM1LDY0MzM1XSxcIm1hcHBlZFwiLFsxNDg4LDE1MDBdXSxbWzY0MzM2LDY0MzM3XSxcIm1hcHBlZFwiLFsxNjQ5XV0sW1s2NDMzOCw2NDM0MV0sXCJtYXBwZWRcIixbMTY1OV1dLFtbNjQzNDIsNjQzNDVdLFwibWFwcGVkXCIsWzE2NjJdXSxbWzY0MzQ2LDY0MzQ5XSxcIm1hcHBlZFwiLFsxNjY0XV0sW1s2NDM1MCw2NDM1M10sXCJtYXBwZWRcIixbMTY1OF1dLFtbNjQzNTQsNjQzNTddLFwibWFwcGVkXCIsWzE2NjNdXSxbWzY0MzU4LDY0MzYxXSxcIm1hcHBlZFwiLFsxNjU3XV0sW1s2NDM2Miw2NDM2NV0sXCJtYXBwZWRcIixbMTcwMF1dLFtbNjQzNjYsNjQzNjldLFwibWFwcGVkXCIsWzE3MDJdXSxbWzY0MzcwLDY0MzczXSxcIm1hcHBlZFwiLFsxNjY4XV0sW1s2NDM3NCw2NDM3N10sXCJtYXBwZWRcIixbMTY2N11dLFtbNjQzNzgsNjQzODFdLFwibWFwcGVkXCIsWzE2NzBdXSxbWzY0MzgyLDY0Mzg1XSxcIm1hcHBlZFwiLFsxNjcxXV0sW1s2NDM4Niw2NDM4N10sXCJtYXBwZWRcIixbMTY3N11dLFtbNjQzODgsNjQzODldLFwibWFwcGVkXCIsWzE2NzZdXSxbWzY0MzkwLDY0MzkxXSxcIm1hcHBlZFwiLFsxNjc4XV0sW1s2NDM5Miw2NDM5M10sXCJtYXBwZWRcIixbMTY3Ml1dLFtbNjQzOTQsNjQzOTVdLFwibWFwcGVkXCIsWzE2ODhdXSxbWzY0Mzk2LDY0Mzk3XSxcIm1hcHBlZFwiLFsxNjgxXV0sW1s2NDM5OCw2NDQwMV0sXCJtYXBwZWRcIixbMTcwNV1dLFtbNjQ0MDIsNjQ0MDVdLFwibWFwcGVkXCIsWzE3MTFdXSxbWzY0NDA2LDY0NDA5XSxcIm1hcHBlZFwiLFsxNzE1XV0sW1s2NDQxMCw2NDQxM10sXCJtYXBwZWRcIixbMTcxM11dLFtbNjQ0MTQsNjQ0MTVdLFwibWFwcGVkXCIsWzE3MjJdXSxbWzY0NDE2LDY0NDE5XSxcIm1hcHBlZFwiLFsxNzIzXV0sW1s2NDQyMCw2NDQyMV0sXCJtYXBwZWRcIixbMTcyOF1dLFtbNjQ0MjIsNjQ0MjVdLFwibWFwcGVkXCIsWzE3MjldXSxbWzY0NDI2LDY0NDI5XSxcIm1hcHBlZFwiLFsxNzI2XV0sW1s2NDQzMCw2NDQzMV0sXCJtYXBwZWRcIixbMTc0Nl1dLFtbNjQ0MzIsNjQ0MzNdLFwibWFwcGVkXCIsWzE3NDddXSxbWzY0NDM0LDY0NDQ5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NDQ1MCw2NDQ2Nl0sXCJkaXNhbGxvd2VkXCJdLFtbNjQ0NjcsNjQ0NzBdLFwibWFwcGVkXCIsWzE3MDldXSxbWzY0NDcxLDY0NDcyXSxcIm1hcHBlZFwiLFsxNzM1XV0sW1s2NDQ3Myw2NDQ3NF0sXCJtYXBwZWRcIixbMTczNF1dLFtbNjQ0NzUsNjQ0NzZdLFwibWFwcGVkXCIsWzE3MzZdXSxbWzY0NDc3LDY0NDc3XSxcIm1hcHBlZFwiLFsxNzM1LDE2NTJdXSxbWzY0NDc4LDY0NDc5XSxcIm1hcHBlZFwiLFsxNzM5XV0sW1s2NDQ4MCw2NDQ4MV0sXCJtYXBwZWRcIixbMTczM11dLFtbNjQ0ODIsNjQ0ODNdLFwibWFwcGVkXCIsWzE3MzddXSxbWzY0NDg0LDY0NDg3XSxcIm1hcHBlZFwiLFsxNzQ0XV0sW1s2NDQ4OCw2NDQ4OV0sXCJtYXBwZWRcIixbMTYwOV1dLFtbNjQ0OTAsNjQ0OTFdLFwibWFwcGVkXCIsWzE1NzQsMTU3NV1dLFtbNjQ0OTIsNjQ0OTNdLFwibWFwcGVkXCIsWzE1NzQsMTc0OV1dLFtbNjQ0OTQsNjQ0OTVdLFwibWFwcGVkXCIsWzE1NzQsMTYwOF1dLFtbNjQ0OTYsNjQ0OTddLFwibWFwcGVkXCIsWzE1NzQsMTczNV1dLFtbNjQ0OTgsNjQ0OTldLFwibWFwcGVkXCIsWzE1NzQsMTczNF1dLFtbNjQ1MDAsNjQ1MDFdLFwibWFwcGVkXCIsWzE1NzQsMTczNl1dLFtbNjQ1MDIsNjQ1MDRdLFwibWFwcGVkXCIsWzE1NzQsMTc0NF1dLFtbNjQ1MDUsNjQ1MDddLFwibWFwcGVkXCIsWzE1NzQsMTYwOV1dLFtbNjQ1MDgsNjQ1MTFdLFwibWFwcGVkXCIsWzE3NDBdXSxbWzY0NTEyLDY0NTEyXSxcIm1hcHBlZFwiLFsxNTc0LDE1ODBdXSxbWzY0NTEzLDY0NTEzXSxcIm1hcHBlZFwiLFsxNTc0LDE1ODFdXSxbWzY0NTE0LDY0NTE0XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDVdXSxbWzY0NTE1LDY0NTE1XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDldXSxbWzY0NTE2LDY0NTE2XSxcIm1hcHBlZFwiLFsxNTc0LDE2MTBdXSxbWzY0NTE3LDY0NTE3XSxcIm1hcHBlZFwiLFsxNTc2LDE1ODBdXSxbWzY0NTE4LDY0NTE4XSxcIm1hcHBlZFwiLFsxNTc2LDE1ODFdXSxbWzY0NTE5LDY0NTE5XSxcIm1hcHBlZFwiLFsxNTc2LDE1ODJdXSxbWzY0NTIwLDY0NTIwXSxcIm1hcHBlZFwiLFsxNTc2LDE2MDVdXSxbWzY0NTIxLDY0NTIxXSxcIm1hcHBlZFwiLFsxNTc2LDE2MDldXSxbWzY0NTIyLDY0NTIyXSxcIm1hcHBlZFwiLFsxNTc2LDE2MTBdXSxbWzY0NTIzLDY0NTIzXSxcIm1hcHBlZFwiLFsxNTc4LDE1ODBdXSxbWzY0NTI0LDY0NTI0XSxcIm1hcHBlZFwiLFsxNTc4LDE1ODFdXSxbWzY0NTI1LDY0NTI1XSxcIm1hcHBlZFwiLFsxNTc4LDE1ODJdXSxbWzY0NTI2LDY0NTI2XSxcIm1hcHBlZFwiLFsxNTc4LDE2MDVdXSxbWzY0NTI3LDY0NTI3XSxcIm1hcHBlZFwiLFsxNTc4LDE2MDldXSxbWzY0NTI4LDY0NTI4XSxcIm1hcHBlZFwiLFsxNTc4LDE2MTBdXSxbWzY0NTI5LDY0NTI5XSxcIm1hcHBlZFwiLFsxNTc5LDE1ODBdXSxbWzY0NTMwLDY0NTMwXSxcIm1hcHBlZFwiLFsxNTc5LDE2MDVdXSxbWzY0NTMxLDY0NTMxXSxcIm1hcHBlZFwiLFsxNTc5LDE2MDldXSxbWzY0NTMyLDY0NTMyXSxcIm1hcHBlZFwiLFsxNTc5LDE2MTBdXSxbWzY0NTMzLDY0NTMzXSxcIm1hcHBlZFwiLFsxNTgwLDE1ODFdXSxbWzY0NTM0LDY0NTM0XSxcIm1hcHBlZFwiLFsxNTgwLDE2MDVdXSxbWzY0NTM1LDY0NTM1XSxcIm1hcHBlZFwiLFsxNTgxLDE1ODBdXSxbWzY0NTM2LDY0NTM2XSxcIm1hcHBlZFwiLFsxNTgxLDE2MDVdXSxbWzY0NTM3LDY0NTM3XSxcIm1hcHBlZFwiLFsxNTgyLDE1ODBdXSxbWzY0NTM4LDY0NTM4XSxcIm1hcHBlZFwiLFsxNTgyLDE1ODFdXSxbWzY0NTM5LDY0NTM5XSxcIm1hcHBlZFwiLFsxNTgyLDE2MDVdXSxbWzY0NTQwLDY0NTQwXSxcIm1hcHBlZFwiLFsxNTg3LDE1ODBdXSxbWzY0NTQxLDY0NTQxXSxcIm1hcHBlZFwiLFsxNTg3LDE1ODFdXSxbWzY0NTQyLDY0NTQyXSxcIm1hcHBlZFwiLFsxNTg3LDE1ODJdXSxbWzY0NTQzLDY0NTQzXSxcIm1hcHBlZFwiLFsxNTg3LDE2MDVdXSxbWzY0NTQ0LDY0NTQ0XSxcIm1hcHBlZFwiLFsxNTg5LDE1ODFdXSxbWzY0NTQ1LDY0NTQ1XSxcIm1hcHBlZFwiLFsxNTg5LDE2MDVdXSxbWzY0NTQ2LDY0NTQ2XSxcIm1hcHBlZFwiLFsxNTkwLDE1ODBdXSxbWzY0NTQ3LDY0NTQ3XSxcIm1hcHBlZFwiLFsxNTkwLDE1ODFdXSxbWzY0NTQ4LDY0NTQ4XSxcIm1hcHBlZFwiLFsxNTkwLDE1ODJdXSxbWzY0NTQ5LDY0NTQ5XSxcIm1hcHBlZFwiLFsxNTkwLDE2MDVdXSxbWzY0NTUwLDY0NTUwXSxcIm1hcHBlZFwiLFsxNTkxLDE1ODFdXSxbWzY0NTUxLDY0NTUxXSxcIm1hcHBlZFwiLFsxNTkxLDE2MDVdXSxbWzY0NTUyLDY0NTUyXSxcIm1hcHBlZFwiLFsxNTkyLDE2MDVdXSxbWzY0NTUzLDY0NTUzXSxcIm1hcHBlZFwiLFsxNTkzLDE1ODBdXSxbWzY0NTU0LDY0NTU0XSxcIm1hcHBlZFwiLFsxNTkzLDE2MDVdXSxbWzY0NTU1LDY0NTU1XSxcIm1hcHBlZFwiLFsxNTk0LDE1ODBdXSxbWzY0NTU2LDY0NTU2XSxcIm1hcHBlZFwiLFsxNTk0LDE2MDVdXSxbWzY0NTU3LDY0NTU3XSxcIm1hcHBlZFwiLFsxNjAxLDE1ODBdXSxbWzY0NTU4LDY0NTU4XSxcIm1hcHBlZFwiLFsxNjAxLDE1ODFdXSxbWzY0NTU5LDY0NTU5XSxcIm1hcHBlZFwiLFsxNjAxLDE1ODJdXSxbWzY0NTYwLDY0NTYwXSxcIm1hcHBlZFwiLFsxNjAxLDE2MDVdXSxbWzY0NTYxLDY0NTYxXSxcIm1hcHBlZFwiLFsxNjAxLDE2MDldXSxbWzY0NTYyLDY0NTYyXSxcIm1hcHBlZFwiLFsxNjAxLDE2MTBdXSxbWzY0NTYzLDY0NTYzXSxcIm1hcHBlZFwiLFsxNjAyLDE1ODFdXSxbWzY0NTY0LDY0NTY0XSxcIm1hcHBlZFwiLFsxNjAyLDE2MDVdXSxbWzY0NTY1LDY0NTY1XSxcIm1hcHBlZFwiLFsxNjAyLDE2MDldXSxbWzY0NTY2LDY0NTY2XSxcIm1hcHBlZFwiLFsxNjAyLDE2MTBdXSxbWzY0NTY3LDY0NTY3XSxcIm1hcHBlZFwiLFsxNjAzLDE1NzVdXSxbWzY0NTY4LDY0NTY4XSxcIm1hcHBlZFwiLFsxNjAzLDE1ODBdXSxbWzY0NTY5LDY0NTY5XSxcIm1hcHBlZFwiLFsxNjAzLDE1ODFdXSxbWzY0NTcwLDY0NTcwXSxcIm1hcHBlZFwiLFsxNjAzLDE1ODJdXSxbWzY0NTcxLDY0NTcxXSxcIm1hcHBlZFwiLFsxNjAzLDE2MDRdXSxbWzY0NTcyLDY0NTcyXSxcIm1hcHBlZFwiLFsxNjAzLDE2MDVdXSxbWzY0NTczLDY0NTczXSxcIm1hcHBlZFwiLFsxNjAzLDE2MDldXSxbWzY0NTc0LDY0NTc0XSxcIm1hcHBlZFwiLFsxNjAzLDE2MTBdXSxbWzY0NTc1LDY0NTc1XSxcIm1hcHBlZFwiLFsxNjA0LDE1ODBdXSxbWzY0NTc2LDY0NTc2XSxcIm1hcHBlZFwiLFsxNjA0LDE1ODFdXSxbWzY0NTc3LDY0NTc3XSxcIm1hcHBlZFwiLFsxNjA0LDE1ODJdXSxbWzY0NTc4LDY0NTc4XSxcIm1hcHBlZFwiLFsxNjA0LDE2MDVdXSxbWzY0NTc5LDY0NTc5XSxcIm1hcHBlZFwiLFsxNjA0LDE2MDldXSxbWzY0NTgwLDY0NTgwXSxcIm1hcHBlZFwiLFsxNjA0LDE2MTBdXSxbWzY0NTgxLDY0NTgxXSxcIm1hcHBlZFwiLFsxNjA1LDE1ODBdXSxbWzY0NTgyLDY0NTgyXSxcIm1hcHBlZFwiLFsxNjA1LDE1ODFdXSxbWzY0NTgzLDY0NTgzXSxcIm1hcHBlZFwiLFsxNjA1LDE1ODJdXSxbWzY0NTg0LDY0NTg0XSxcIm1hcHBlZFwiLFsxNjA1LDE2MDVdXSxbWzY0NTg1LDY0NTg1XSxcIm1hcHBlZFwiLFsxNjA1LDE2MDldXSxbWzY0NTg2LDY0NTg2XSxcIm1hcHBlZFwiLFsxNjA1LDE2MTBdXSxbWzY0NTg3LDY0NTg3XSxcIm1hcHBlZFwiLFsxNjA2LDE1ODBdXSxbWzY0NTg4LDY0NTg4XSxcIm1hcHBlZFwiLFsxNjA2LDE1ODFdXSxbWzY0NTg5LDY0NTg5XSxcIm1hcHBlZFwiLFsxNjA2LDE1ODJdXSxbWzY0NTkwLDY0NTkwXSxcIm1hcHBlZFwiLFsxNjA2LDE2MDVdXSxbWzY0NTkxLDY0NTkxXSxcIm1hcHBlZFwiLFsxNjA2LDE2MDldXSxbWzY0NTkyLDY0NTkyXSxcIm1hcHBlZFwiLFsxNjA2LDE2MTBdXSxbWzY0NTkzLDY0NTkzXSxcIm1hcHBlZFwiLFsxNjA3LDE1ODBdXSxbWzY0NTk0LDY0NTk0XSxcIm1hcHBlZFwiLFsxNjA3LDE2MDVdXSxbWzY0NTk1LDY0NTk1XSxcIm1hcHBlZFwiLFsxNjA3LDE2MDldXSxbWzY0NTk2LDY0NTk2XSxcIm1hcHBlZFwiLFsxNjA3LDE2MTBdXSxbWzY0NTk3LDY0NTk3XSxcIm1hcHBlZFwiLFsxNjEwLDE1ODBdXSxbWzY0NTk4LDY0NTk4XSxcIm1hcHBlZFwiLFsxNjEwLDE1ODFdXSxbWzY0NTk5LDY0NTk5XSxcIm1hcHBlZFwiLFsxNjEwLDE1ODJdXSxbWzY0NjAwLDY0NjAwXSxcIm1hcHBlZFwiLFsxNjEwLDE2MDVdXSxbWzY0NjAxLDY0NjAxXSxcIm1hcHBlZFwiLFsxNjEwLDE2MDldXSxbWzY0NjAyLDY0NjAyXSxcIm1hcHBlZFwiLFsxNjEwLDE2MTBdXSxbWzY0NjAzLDY0NjAzXSxcIm1hcHBlZFwiLFsxNTg0LDE2NDhdXSxbWzY0NjA0LDY0NjA0XSxcIm1hcHBlZFwiLFsxNTg1LDE2NDhdXSxbWzY0NjA1LDY0NjA1XSxcIm1hcHBlZFwiLFsxNjA5LDE2NDhdXSxbWzY0NjA2LDY0NjA2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTYxMiwxNjE3XV0sW1s2NDYwNyw2NDYwN10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTMsMTYxN11dLFtbNjQ2MDgsNjQ2MDhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjE0LDE2MTddXSxbWzY0NjA5LDY0NjA5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTYxNSwxNjE3XV0sW1s2NDYxMCw2NDYxMF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTYsMTYxN11dLFtbNjQ2MTEsNjQ2MTFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjE3LDE2NDhdXSxbWzY0NjEyLDY0NjEyXSxcIm1hcHBlZFwiLFsxNTc0LDE1ODVdXSxbWzY0NjEzLDY0NjEzXSxcIm1hcHBlZFwiLFsxNTc0LDE1ODZdXSxbWzY0NjE0LDY0NjE0XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDVdXSxbWzY0NjE1LDY0NjE1XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDZdXSxbWzY0NjE2LDY0NjE2XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDldXSxbWzY0NjE3LDY0NjE3XSxcIm1hcHBlZFwiLFsxNTc0LDE2MTBdXSxbWzY0NjE4LDY0NjE4XSxcIm1hcHBlZFwiLFsxNTc2LDE1ODVdXSxbWzY0NjE5LDY0NjE5XSxcIm1hcHBlZFwiLFsxNTc2LDE1ODZdXSxbWzY0NjIwLDY0NjIwXSxcIm1hcHBlZFwiLFsxNTc2LDE2MDVdXSxbWzY0NjIxLDY0NjIxXSxcIm1hcHBlZFwiLFsxNTc2LDE2MDZdXSxbWzY0NjIyLDY0NjIyXSxcIm1hcHBlZFwiLFsxNTc2LDE2MDldXSxbWzY0NjIzLDY0NjIzXSxcIm1hcHBlZFwiLFsxNTc2LDE2MTBdXSxbWzY0NjI0LDY0NjI0XSxcIm1hcHBlZFwiLFsxNTc4LDE1ODVdXSxbWzY0NjI1LDY0NjI1XSxcIm1hcHBlZFwiLFsxNTc4LDE1ODZdXSxbWzY0NjI2LDY0NjI2XSxcIm1hcHBlZFwiLFsxNTc4LDE2MDVdXSxbWzY0NjI3LDY0NjI3XSxcIm1hcHBlZFwiLFsxNTc4LDE2MDZdXSxbWzY0NjI4LDY0NjI4XSxcIm1hcHBlZFwiLFsxNTc4LDE2MDldXSxbWzY0NjI5LDY0NjI5XSxcIm1hcHBlZFwiLFsxNTc4LDE2MTBdXSxbWzY0NjMwLDY0NjMwXSxcIm1hcHBlZFwiLFsxNTc5LDE1ODVdXSxbWzY0NjMxLDY0NjMxXSxcIm1hcHBlZFwiLFsxNTc5LDE1ODZdXSxbWzY0NjMyLDY0NjMyXSxcIm1hcHBlZFwiLFsxNTc5LDE2MDVdXSxbWzY0NjMzLDY0NjMzXSxcIm1hcHBlZFwiLFsxNTc5LDE2MDZdXSxbWzY0NjM0LDY0NjM0XSxcIm1hcHBlZFwiLFsxNTc5LDE2MDldXSxbWzY0NjM1LDY0NjM1XSxcIm1hcHBlZFwiLFsxNTc5LDE2MTBdXSxbWzY0NjM2LDY0NjM2XSxcIm1hcHBlZFwiLFsxNjAxLDE2MDldXSxbWzY0NjM3LDY0NjM3XSxcIm1hcHBlZFwiLFsxNjAxLDE2MTBdXSxbWzY0NjM4LDY0NjM4XSxcIm1hcHBlZFwiLFsxNjAyLDE2MDldXSxbWzY0NjM5LDY0NjM5XSxcIm1hcHBlZFwiLFsxNjAyLDE2MTBdXSxbWzY0NjQwLDY0NjQwXSxcIm1hcHBlZFwiLFsxNjAzLDE1NzVdXSxbWzY0NjQxLDY0NjQxXSxcIm1hcHBlZFwiLFsxNjAzLDE2MDRdXSxbWzY0NjQyLDY0NjQyXSxcIm1hcHBlZFwiLFsxNjAzLDE2MDVdXSxbWzY0NjQzLDY0NjQzXSxcIm1hcHBlZFwiLFsxNjAzLDE2MDldXSxbWzY0NjQ0LDY0NjQ0XSxcIm1hcHBlZFwiLFsxNjAzLDE2MTBdXSxbWzY0NjQ1LDY0NjQ1XSxcIm1hcHBlZFwiLFsxNjA0LDE2MDVdXSxbWzY0NjQ2LDY0NjQ2XSxcIm1hcHBlZFwiLFsxNjA0LDE2MDldXSxbWzY0NjQ3LDY0NjQ3XSxcIm1hcHBlZFwiLFsxNjA0LDE2MTBdXSxbWzY0NjQ4LDY0NjQ4XSxcIm1hcHBlZFwiLFsxNjA1LDE1NzVdXSxbWzY0NjQ5LDY0NjQ5XSxcIm1hcHBlZFwiLFsxNjA1LDE2MDVdXSxbWzY0NjUwLDY0NjUwXSxcIm1hcHBlZFwiLFsxNjA2LDE1ODVdXSxbWzY0NjUxLDY0NjUxXSxcIm1hcHBlZFwiLFsxNjA2LDE1ODZdXSxbWzY0NjUyLDY0NjUyXSxcIm1hcHBlZFwiLFsxNjA2LDE2MDVdXSxbWzY0NjUzLDY0NjUzXSxcIm1hcHBlZFwiLFsxNjA2LDE2MDZdXSxbWzY0NjU0LDY0NjU0XSxcIm1hcHBlZFwiLFsxNjA2LDE2MDldXSxbWzY0NjU1LDY0NjU1XSxcIm1hcHBlZFwiLFsxNjA2LDE2MTBdXSxbWzY0NjU2LDY0NjU2XSxcIm1hcHBlZFwiLFsxNjA5LDE2NDhdXSxbWzY0NjU3LDY0NjU3XSxcIm1hcHBlZFwiLFsxNjEwLDE1ODVdXSxbWzY0NjU4LDY0NjU4XSxcIm1hcHBlZFwiLFsxNjEwLDE1ODZdXSxbWzY0NjU5LDY0NjU5XSxcIm1hcHBlZFwiLFsxNjEwLDE2MDVdXSxbWzY0NjYwLDY0NjYwXSxcIm1hcHBlZFwiLFsxNjEwLDE2MDZdXSxbWzY0NjYxLDY0NjYxXSxcIm1hcHBlZFwiLFsxNjEwLDE2MDldXSxbWzY0NjYyLDY0NjYyXSxcIm1hcHBlZFwiLFsxNjEwLDE2MTBdXSxbWzY0NjYzLDY0NjYzXSxcIm1hcHBlZFwiLFsxNTc0LDE1ODBdXSxbWzY0NjY0LDY0NjY0XSxcIm1hcHBlZFwiLFsxNTc0LDE1ODFdXSxbWzY0NjY1LDY0NjY1XSxcIm1hcHBlZFwiLFsxNTc0LDE1ODJdXSxbWzY0NjY2LDY0NjY2XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDVdXSxbWzY0NjY3LDY0NjY3XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDddXSxbWzY0NjY4LDY0NjY4XSxcIm1hcHBlZFwiLFsxNTc2LDE1ODBdXSxbWzY0NjY5LDY0NjY5XSxcIm1hcHBlZFwiLFsxNTc2LDE1ODFdXSxbWzY0NjcwLDY0NjcwXSxcIm1hcHBlZFwiLFsxNTc2LDE1ODJdXSxbWzY0NjcxLDY0NjcxXSxcIm1hcHBlZFwiLFsxNTc2LDE2MDVdXSxbWzY0NjcyLDY0NjcyXSxcIm1hcHBlZFwiLFsxNTc2LDE2MDddXSxbWzY0NjczLDY0NjczXSxcIm1hcHBlZFwiLFsxNTc4LDE1ODBdXSxbWzY0Njc0LDY0Njc0XSxcIm1hcHBlZFwiLFsxNTc4LDE1ODFdXSxbWzY0Njc1LDY0Njc1XSxcIm1hcHBlZFwiLFsxNTc4LDE1ODJdXSxbWzY0Njc2LDY0Njc2XSxcIm1hcHBlZFwiLFsxNTc4LDE2MDVdXSxbWzY0Njc3LDY0Njc3XSxcIm1hcHBlZFwiLFsxNTc4LDE2MDddXSxbWzY0Njc4LDY0Njc4XSxcIm1hcHBlZFwiLFsxNTc5LDE2MDVdXSxbWzY0Njc5LDY0Njc5XSxcIm1hcHBlZFwiLFsxNTgwLDE1ODFdXSxbWzY0NjgwLDY0NjgwXSxcIm1hcHBlZFwiLFsxNTgwLDE2MDVdXSxbWzY0NjgxLDY0NjgxXSxcIm1hcHBlZFwiLFsxNTgxLDE1ODBdXSxbWzY0NjgyLDY0NjgyXSxcIm1hcHBlZFwiLFsxNTgxLDE2MDVdXSxbWzY0NjgzLDY0NjgzXSxcIm1hcHBlZFwiLFsxNTgyLDE1ODBdXSxbWzY0Njg0LDY0Njg0XSxcIm1hcHBlZFwiLFsxNTgyLDE2MDVdXSxbWzY0Njg1LDY0Njg1XSxcIm1hcHBlZFwiLFsxNTg3LDE1ODBdXSxbWzY0Njg2LDY0Njg2XSxcIm1hcHBlZFwiLFsxNTg3LDE1ODFdXSxbWzY0Njg3LDY0Njg3XSxcIm1hcHBlZFwiLFsxNTg3LDE1ODJdXSxbWzY0Njg4LDY0Njg4XSxcIm1hcHBlZFwiLFsxNTg3LDE2MDVdXSxbWzY0Njg5LDY0Njg5XSxcIm1hcHBlZFwiLFsxNTg5LDE1ODFdXSxbWzY0NjkwLDY0NjkwXSxcIm1hcHBlZFwiLFsxNTg5LDE1ODJdXSxbWzY0NjkxLDY0NjkxXSxcIm1hcHBlZFwiLFsxNTg5LDE2MDVdXSxbWzY0NjkyLDY0NjkyXSxcIm1hcHBlZFwiLFsxNTkwLDE1ODBdXSxbWzY0NjkzLDY0NjkzXSxcIm1hcHBlZFwiLFsxNTkwLDE1ODFdXSxbWzY0Njk0LDY0Njk0XSxcIm1hcHBlZFwiLFsxNTkwLDE1ODJdXSxbWzY0Njk1LDY0Njk1XSxcIm1hcHBlZFwiLFsxNTkwLDE2MDVdXSxbWzY0Njk2LDY0Njk2XSxcIm1hcHBlZFwiLFsxNTkxLDE1ODFdXSxbWzY0Njk3LDY0Njk3XSxcIm1hcHBlZFwiLFsxNTkyLDE2MDVdXSxbWzY0Njk4LDY0Njk4XSxcIm1hcHBlZFwiLFsxNTkzLDE1ODBdXSxbWzY0Njk5LDY0Njk5XSxcIm1hcHBlZFwiLFsxNTkzLDE2MDVdXSxbWzY0NzAwLDY0NzAwXSxcIm1hcHBlZFwiLFsxNTk0LDE1ODBdXSxbWzY0NzAxLDY0NzAxXSxcIm1hcHBlZFwiLFsxNTk0LDE2MDVdXSxbWzY0NzAyLDY0NzAyXSxcIm1hcHBlZFwiLFsxNjAxLDE1ODBdXSxbWzY0NzAzLDY0NzAzXSxcIm1hcHBlZFwiLFsxNjAxLDE1ODFdXSxbWzY0NzA0LDY0NzA0XSxcIm1hcHBlZFwiLFsxNjAxLDE1ODJdXSxbWzY0NzA1LDY0NzA1XSxcIm1hcHBlZFwiLFsxNjAxLDE2MDVdXSxbWzY0NzA2LDY0NzA2XSxcIm1hcHBlZFwiLFsxNjAyLDE1ODFdXSxbWzY0NzA3LDY0NzA3XSxcIm1hcHBlZFwiLFsxNjAyLDE2MDVdXSxbWzY0NzA4LDY0NzA4XSxcIm1hcHBlZFwiLFsxNjAzLDE1ODBdXSxbWzY0NzA5LDY0NzA5XSxcIm1hcHBlZFwiLFsxNjAzLDE1ODFdXSxbWzY0NzEwLDY0NzEwXSxcIm1hcHBlZFwiLFsxNjAzLDE1ODJdXSxbWzY0NzExLDY0NzExXSxcIm1hcHBlZFwiLFsxNjAzLDE2MDRdXSxbWzY0NzEyLDY0NzEyXSxcIm1hcHBlZFwiLFsxNjAzLDE2MDVdXSxbWzY0NzEzLDY0NzEzXSxcIm1hcHBlZFwiLFsxNjA0LDE1ODBdXSxbWzY0NzE0LDY0NzE0XSxcIm1hcHBlZFwiLFsxNjA0LDE1ODFdXSxbWzY0NzE1LDY0NzE1XSxcIm1hcHBlZFwiLFsxNjA0LDE1ODJdXSxbWzY0NzE2LDY0NzE2XSxcIm1hcHBlZFwiLFsxNjA0LDE2MDVdXSxbWzY0NzE3LDY0NzE3XSxcIm1hcHBlZFwiLFsxNjA0LDE2MDddXSxbWzY0NzE4LDY0NzE4XSxcIm1hcHBlZFwiLFsxNjA1LDE1ODBdXSxbWzY0NzE5LDY0NzE5XSxcIm1hcHBlZFwiLFsxNjA1LDE1ODFdXSxbWzY0NzIwLDY0NzIwXSxcIm1hcHBlZFwiLFsxNjA1LDE1ODJdXSxbWzY0NzIxLDY0NzIxXSxcIm1hcHBlZFwiLFsxNjA1LDE2MDVdXSxbWzY0NzIyLDY0NzIyXSxcIm1hcHBlZFwiLFsxNjA2LDE1ODBdXSxbWzY0NzIzLDY0NzIzXSxcIm1hcHBlZFwiLFsxNjA2LDE1ODFdXSxbWzY0NzI0LDY0NzI0XSxcIm1hcHBlZFwiLFsxNjA2LDE1ODJdXSxbWzY0NzI1LDY0NzI1XSxcIm1hcHBlZFwiLFsxNjA2LDE2MDVdXSxbWzY0NzI2LDY0NzI2XSxcIm1hcHBlZFwiLFsxNjA2LDE2MDddXSxbWzY0NzI3LDY0NzI3XSxcIm1hcHBlZFwiLFsxNjA3LDE1ODBdXSxbWzY0NzI4LDY0NzI4XSxcIm1hcHBlZFwiLFsxNjA3LDE2MDVdXSxbWzY0NzI5LDY0NzI5XSxcIm1hcHBlZFwiLFsxNjA3LDE2NDhdXSxbWzY0NzMwLDY0NzMwXSxcIm1hcHBlZFwiLFsxNjEwLDE1ODBdXSxbWzY0NzMxLDY0NzMxXSxcIm1hcHBlZFwiLFsxNjEwLDE1ODFdXSxbWzY0NzMyLDY0NzMyXSxcIm1hcHBlZFwiLFsxNjEwLDE1ODJdXSxbWzY0NzMzLDY0NzMzXSxcIm1hcHBlZFwiLFsxNjEwLDE2MDVdXSxbWzY0NzM0LDY0NzM0XSxcIm1hcHBlZFwiLFsxNjEwLDE2MDddXSxbWzY0NzM1LDY0NzM1XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDVdXSxbWzY0NzM2LDY0NzM2XSxcIm1hcHBlZFwiLFsxNTc0LDE2MDddXSxbWzY0NzM3LDY0NzM3XSxcIm1hcHBlZFwiLFsxNTc2LDE2MDVdXSxbWzY0NzM4LDY0NzM4XSxcIm1hcHBlZFwiLFsxNTc2LDE2MDddXSxbWzY0NzM5LDY0NzM5XSxcIm1hcHBlZFwiLFsxNTc4LDE2MDVdXSxbWzY0NzQwLDY0NzQwXSxcIm1hcHBlZFwiLFsxNTc4LDE2MDddXSxbWzY0NzQxLDY0NzQxXSxcIm1hcHBlZFwiLFsxNTc5LDE2MDVdXSxbWzY0NzQyLDY0NzQyXSxcIm1hcHBlZFwiLFsxNTc5LDE2MDddXSxbWzY0NzQzLDY0NzQzXSxcIm1hcHBlZFwiLFsxNTg3LDE2MDVdXSxbWzY0NzQ0LDY0NzQ0XSxcIm1hcHBlZFwiLFsxNTg3LDE2MDddXSxbWzY0NzQ1LDY0NzQ1XSxcIm1hcHBlZFwiLFsxNTg4LDE2MDVdXSxbWzY0NzQ2LDY0NzQ2XSxcIm1hcHBlZFwiLFsxNTg4LDE2MDddXSxbWzY0NzQ3LDY0NzQ3XSxcIm1hcHBlZFwiLFsxNjAzLDE2MDRdXSxbWzY0NzQ4LDY0NzQ4XSxcIm1hcHBlZFwiLFsxNjAzLDE2MDVdXSxbWzY0NzQ5LDY0NzQ5XSxcIm1hcHBlZFwiLFsxNjA0LDE2MDVdXSxbWzY0NzUwLDY0NzUwXSxcIm1hcHBlZFwiLFsxNjA2LDE2MDVdXSxbWzY0NzUxLDY0NzUxXSxcIm1hcHBlZFwiLFsxNjA2LDE2MDddXSxbWzY0NzUyLDY0NzUyXSxcIm1hcHBlZFwiLFsxNjEwLDE2MDVdXSxbWzY0NzUzLDY0NzUzXSxcIm1hcHBlZFwiLFsxNjEwLDE2MDddXSxbWzY0NzU0LDY0NzU0XSxcIm1hcHBlZFwiLFsxNjAwLDE2MTQsMTYxN11dLFtbNjQ3NTUsNjQ3NTVdLFwibWFwcGVkXCIsWzE2MDAsMTYxNSwxNjE3XV0sW1s2NDc1Niw2NDc1Nl0sXCJtYXBwZWRcIixbMTYwMCwxNjE2LDE2MTddXSxbWzY0NzU3LDY0NzU3XSxcIm1hcHBlZFwiLFsxNTkxLDE2MDldXSxbWzY0NzU4LDY0NzU4XSxcIm1hcHBlZFwiLFsxNTkxLDE2MTBdXSxbWzY0NzU5LDY0NzU5XSxcIm1hcHBlZFwiLFsxNTkzLDE2MDldXSxbWzY0NzYwLDY0NzYwXSxcIm1hcHBlZFwiLFsxNTkzLDE2MTBdXSxbWzY0NzYxLDY0NzYxXSxcIm1hcHBlZFwiLFsxNTk0LDE2MDldXSxbWzY0NzYyLDY0NzYyXSxcIm1hcHBlZFwiLFsxNTk0LDE2MTBdXSxbWzY0NzYzLDY0NzYzXSxcIm1hcHBlZFwiLFsxNTg3LDE2MDldXSxbWzY0NzY0LDY0NzY0XSxcIm1hcHBlZFwiLFsxNTg3LDE2MTBdXSxbWzY0NzY1LDY0NzY1XSxcIm1hcHBlZFwiLFsxNTg4LDE2MDldXSxbWzY0NzY2LDY0NzY2XSxcIm1hcHBlZFwiLFsxNTg4LDE2MTBdXSxbWzY0NzY3LDY0NzY3XSxcIm1hcHBlZFwiLFsxNTgxLDE2MDldXSxbWzY0NzY4LDY0NzY4XSxcIm1hcHBlZFwiLFsxNTgxLDE2MTBdXSxbWzY0NzY5LDY0NzY5XSxcIm1hcHBlZFwiLFsxNTgwLDE2MDldXSxbWzY0NzcwLDY0NzcwXSxcIm1hcHBlZFwiLFsxNTgwLDE2MTBdXSxbWzY0NzcxLDY0NzcxXSxcIm1hcHBlZFwiLFsxNTgyLDE2MDldXSxbWzY0NzcyLDY0NzcyXSxcIm1hcHBlZFwiLFsxNTgyLDE2MTBdXSxbWzY0NzczLDY0NzczXSxcIm1hcHBlZFwiLFsxNTg5LDE2MDldXSxbWzY0Nzc0LDY0Nzc0XSxcIm1hcHBlZFwiLFsxNTg5LDE2MTBdXSxbWzY0Nzc1LDY0Nzc1XSxcIm1hcHBlZFwiLFsxNTkwLDE2MDldXSxbWzY0Nzc2LDY0Nzc2XSxcIm1hcHBlZFwiLFsxNTkwLDE2MTBdXSxbWzY0Nzc3LDY0Nzc3XSxcIm1hcHBlZFwiLFsxNTg4LDE1ODBdXSxbWzY0Nzc4LDY0Nzc4XSxcIm1hcHBlZFwiLFsxNTg4LDE1ODFdXSxbWzY0Nzc5LDY0Nzc5XSxcIm1hcHBlZFwiLFsxNTg4LDE1ODJdXSxbWzY0NzgwLDY0NzgwXSxcIm1hcHBlZFwiLFsxNTg4LDE2MDVdXSxbWzY0NzgxLDY0NzgxXSxcIm1hcHBlZFwiLFsxNTg4LDE1ODVdXSxbWzY0NzgyLDY0NzgyXSxcIm1hcHBlZFwiLFsxNTg3LDE1ODVdXSxbWzY0NzgzLDY0NzgzXSxcIm1hcHBlZFwiLFsxNTg5LDE1ODVdXSxbWzY0Nzg0LDY0Nzg0XSxcIm1hcHBlZFwiLFsxNTkwLDE1ODVdXSxbWzY0Nzg1LDY0Nzg1XSxcIm1hcHBlZFwiLFsxNTkxLDE2MDldXSxbWzY0Nzg2LDY0Nzg2XSxcIm1hcHBlZFwiLFsxNTkxLDE2MTBdXSxbWzY0Nzg3LDY0Nzg3XSxcIm1hcHBlZFwiLFsxNTkzLDE2MDldXSxbWzY0Nzg4LDY0Nzg4XSxcIm1hcHBlZFwiLFsxNTkzLDE2MTBdXSxbWzY0Nzg5LDY0Nzg5XSxcIm1hcHBlZFwiLFsxNTk0LDE2MDldXSxbWzY0NzkwLDY0NzkwXSxcIm1hcHBlZFwiLFsxNTk0LDE2MTBdXSxbWzY0NzkxLDY0NzkxXSxcIm1hcHBlZFwiLFsxNTg3LDE2MDldXSxbWzY0NzkyLDY0NzkyXSxcIm1hcHBlZFwiLFsxNTg3LDE2MTBdXSxbWzY0NzkzLDY0NzkzXSxcIm1hcHBlZFwiLFsxNTg4LDE2MDldXSxbWzY0Nzk0LDY0Nzk0XSxcIm1hcHBlZFwiLFsxNTg4LDE2MTBdXSxbWzY0Nzk1LDY0Nzk1XSxcIm1hcHBlZFwiLFsxNTgxLDE2MDldXSxbWzY0Nzk2LDY0Nzk2XSxcIm1hcHBlZFwiLFsxNTgxLDE2MTBdXSxbWzY0Nzk3LDY0Nzk3XSxcIm1hcHBlZFwiLFsxNTgwLDE2MDldXSxbWzY0Nzk4LDY0Nzk4XSxcIm1hcHBlZFwiLFsxNTgwLDE2MTBdXSxbWzY0Nzk5LDY0Nzk5XSxcIm1hcHBlZFwiLFsxNTgyLDE2MDldXSxbWzY0ODAwLDY0ODAwXSxcIm1hcHBlZFwiLFsxNTgyLDE2MTBdXSxbWzY0ODAxLDY0ODAxXSxcIm1hcHBlZFwiLFsxNTg5LDE2MDldXSxbWzY0ODAyLDY0ODAyXSxcIm1hcHBlZFwiLFsxNTg5LDE2MTBdXSxbWzY0ODAzLDY0ODAzXSxcIm1hcHBlZFwiLFsxNTkwLDE2MDldXSxbWzY0ODA0LDY0ODA0XSxcIm1hcHBlZFwiLFsxNTkwLDE2MTBdXSxbWzY0ODA1LDY0ODA1XSxcIm1hcHBlZFwiLFsxNTg4LDE1ODBdXSxbWzY0ODA2LDY0ODA2XSxcIm1hcHBlZFwiLFsxNTg4LDE1ODFdXSxbWzY0ODA3LDY0ODA3XSxcIm1hcHBlZFwiLFsxNTg4LDE1ODJdXSxbWzY0ODA4LDY0ODA4XSxcIm1hcHBlZFwiLFsxNTg4LDE2MDVdXSxbWzY0ODA5LDY0ODA5XSxcIm1hcHBlZFwiLFsxNTg4LDE1ODVdXSxbWzY0ODEwLDY0ODEwXSxcIm1hcHBlZFwiLFsxNTg3LDE1ODVdXSxbWzY0ODExLDY0ODExXSxcIm1hcHBlZFwiLFsxNTg5LDE1ODVdXSxbWzY0ODEyLDY0ODEyXSxcIm1hcHBlZFwiLFsxNTkwLDE1ODVdXSxbWzY0ODEzLDY0ODEzXSxcIm1hcHBlZFwiLFsxNTg4LDE1ODBdXSxbWzY0ODE0LDY0ODE0XSxcIm1hcHBlZFwiLFsxNTg4LDE1ODFdXSxbWzY0ODE1LDY0ODE1XSxcIm1hcHBlZFwiLFsxNTg4LDE1ODJdXSxbWzY0ODE2LDY0ODE2XSxcIm1hcHBlZFwiLFsxNTg4LDE2MDVdXSxbWzY0ODE3LDY0ODE3XSxcIm1hcHBlZFwiLFsxNTg3LDE2MDddXSxbWzY0ODE4LDY0ODE4XSxcIm1hcHBlZFwiLFsxNTg4LDE2MDddXSxbWzY0ODE5LDY0ODE5XSxcIm1hcHBlZFwiLFsxNTkxLDE2MDVdXSxbWzY0ODIwLDY0ODIwXSxcIm1hcHBlZFwiLFsxNTg3LDE1ODBdXSxbWzY0ODIxLDY0ODIxXSxcIm1hcHBlZFwiLFsxNTg3LDE1ODFdXSxbWzY0ODIyLDY0ODIyXSxcIm1hcHBlZFwiLFsxNTg3LDE1ODJdXSxbWzY0ODIzLDY0ODIzXSxcIm1hcHBlZFwiLFsxNTg4LDE1ODBdXSxbWzY0ODI0LDY0ODI0XSxcIm1hcHBlZFwiLFsxNTg4LDE1ODFdXSxbWzY0ODI1LDY0ODI1XSxcIm1hcHBlZFwiLFsxNTg4LDE1ODJdXSxbWzY0ODI2LDY0ODI2XSxcIm1hcHBlZFwiLFsxNTkxLDE2MDVdXSxbWzY0ODI3LDY0ODI3XSxcIm1hcHBlZFwiLFsxNTkyLDE2MDVdXSxbWzY0ODI4LDY0ODI5XSxcIm1hcHBlZFwiLFsxNTc1LDE2MTFdXSxbWzY0ODMwLDY0ODMxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NDgzMiw2NDg0N10sXCJkaXNhbGxvd2VkXCJdLFtbNjQ4NDgsNjQ4NDhdLFwibWFwcGVkXCIsWzE1NzgsMTU4MCwxNjA1XV0sW1s2NDg0OSw2NDg1MF0sXCJtYXBwZWRcIixbMTU3OCwxNTgxLDE1ODBdXSxbWzY0ODUxLDY0ODUxXSxcIm1hcHBlZFwiLFsxNTc4LDE1ODEsMTYwNV1dLFtbNjQ4NTIsNjQ4NTJdLFwibWFwcGVkXCIsWzE1NzgsMTU4MiwxNjA1XV0sW1s2NDg1Myw2NDg1M10sXCJtYXBwZWRcIixbMTU3OCwxNjA1LDE1ODBdXSxbWzY0ODU0LDY0ODU0XSxcIm1hcHBlZFwiLFsxNTc4LDE2MDUsMTU4MV1dLFtbNjQ4NTUsNjQ4NTVdLFwibWFwcGVkXCIsWzE1NzgsMTYwNSwxNTgyXV0sW1s2NDg1Niw2NDg1N10sXCJtYXBwZWRcIixbMTU4MCwxNjA1LDE1ODFdXSxbWzY0ODU4LDY0ODU4XSxcIm1hcHBlZFwiLFsxNTgxLDE2MDUsMTYxMF1dLFtbNjQ4NTksNjQ4NTldLFwibWFwcGVkXCIsWzE1ODEsMTYwNSwxNjA5XV0sW1s2NDg2MCw2NDg2MF0sXCJtYXBwZWRcIixbMTU4NywxNTgxLDE1ODBdXSxbWzY0ODYxLDY0ODYxXSxcIm1hcHBlZFwiLFsxNTg3LDE1ODAsMTU4MV1dLFtbNjQ4NjIsNjQ4NjJdLFwibWFwcGVkXCIsWzE1ODcsMTU4MCwxNjA5XV0sW1s2NDg2Myw2NDg2NF0sXCJtYXBwZWRcIixbMTU4NywxNjA1LDE1ODFdXSxbWzY0ODY1LDY0ODY1XSxcIm1hcHBlZFwiLFsxNTg3LDE2MDUsMTU4MF1dLFtbNjQ4NjYsNjQ4NjddLFwibWFwcGVkXCIsWzE1ODcsMTYwNSwxNjA1XV0sW1s2NDg2OCw2NDg2OV0sXCJtYXBwZWRcIixbMTU4OSwxNTgxLDE1ODFdXSxbWzY0ODcwLDY0ODcwXSxcIm1hcHBlZFwiLFsxNTg5LDE2MDUsMTYwNV1dLFtbNjQ4NzEsNjQ4NzJdLFwibWFwcGVkXCIsWzE1ODgsMTU4MSwxNjA1XV0sW1s2NDg3Myw2NDg3M10sXCJtYXBwZWRcIixbMTU4OCwxNTgwLDE2MTBdXSxbWzY0ODc0LDY0ODc1XSxcIm1hcHBlZFwiLFsxNTg4LDE2MDUsMTU4Ml1dLFtbNjQ4NzYsNjQ4NzddLFwibWFwcGVkXCIsWzE1ODgsMTYwNSwxNjA1XV0sW1s2NDg3OCw2NDg3OF0sXCJtYXBwZWRcIixbMTU5MCwxNTgxLDE2MDldXSxbWzY0ODc5LDY0ODgwXSxcIm1hcHBlZFwiLFsxNTkwLDE1ODIsMTYwNV1dLFtbNjQ4ODEsNjQ4ODJdLFwibWFwcGVkXCIsWzE1OTEsMTYwNSwxNTgxXV0sW1s2NDg4Myw2NDg4M10sXCJtYXBwZWRcIixbMTU5MSwxNjA1LDE2MDVdXSxbWzY0ODg0LDY0ODg0XSxcIm1hcHBlZFwiLFsxNTkxLDE2MDUsMTYxMF1dLFtbNjQ4ODUsNjQ4ODVdLFwibWFwcGVkXCIsWzE1OTMsMTU4MCwxNjA1XV0sW1s2NDg4Niw2NDg4N10sXCJtYXBwZWRcIixbMTU5MywxNjA1LDE2MDVdXSxbWzY0ODg4LDY0ODg4XSxcIm1hcHBlZFwiLFsxNTkzLDE2MDUsMTYwOV1dLFtbNjQ4ODksNjQ4ODldLFwibWFwcGVkXCIsWzE1OTQsMTYwNSwxNjA1XV0sW1s2NDg5MCw2NDg5MF0sXCJtYXBwZWRcIixbMTU5NCwxNjA1LDE2MTBdXSxbWzY0ODkxLDY0ODkxXSxcIm1hcHBlZFwiLFsxNTk0LDE2MDUsMTYwOV1dLFtbNjQ4OTIsNjQ4OTNdLFwibWFwcGVkXCIsWzE2MDEsMTU4MiwxNjA1XV0sW1s2NDg5NCw2NDg5NF0sXCJtYXBwZWRcIixbMTYwMiwxNjA1LDE1ODFdXSxbWzY0ODk1LDY0ODk1XSxcIm1hcHBlZFwiLFsxNjAyLDE2MDUsMTYwNV1dLFtbNjQ4OTYsNjQ4OTZdLFwibWFwcGVkXCIsWzE2MDQsMTU4MSwxNjA1XV0sW1s2NDg5Nyw2NDg5N10sXCJtYXBwZWRcIixbMTYwNCwxNTgxLDE2MTBdXSxbWzY0ODk4LDY0ODk4XSxcIm1hcHBlZFwiLFsxNjA0LDE1ODEsMTYwOV1dLFtbNjQ4OTksNjQ5MDBdLFwibWFwcGVkXCIsWzE2MDQsMTU4MCwxNTgwXV0sW1s2NDkwMSw2NDkwMl0sXCJtYXBwZWRcIixbMTYwNCwxNTgyLDE2MDVdXSxbWzY0OTAzLDY0OTA0XSxcIm1hcHBlZFwiLFsxNjA0LDE2MDUsMTU4MV1dLFtbNjQ5MDUsNjQ5MDVdLFwibWFwcGVkXCIsWzE2MDUsMTU4MSwxNTgwXV0sW1s2NDkwNiw2NDkwNl0sXCJtYXBwZWRcIixbMTYwNSwxNTgxLDE2MDVdXSxbWzY0OTA3LDY0OTA3XSxcIm1hcHBlZFwiLFsxNjA1LDE1ODEsMTYxMF1dLFtbNjQ5MDgsNjQ5MDhdLFwibWFwcGVkXCIsWzE2MDUsMTU4MCwxNTgxXV0sW1s2NDkwOSw2NDkwOV0sXCJtYXBwZWRcIixbMTYwNSwxNTgwLDE2MDVdXSxbWzY0OTEwLDY0OTEwXSxcIm1hcHBlZFwiLFsxNjA1LDE1ODIsMTU4MF1dLFtbNjQ5MTEsNjQ5MTFdLFwibWFwcGVkXCIsWzE2MDUsMTU4MiwxNjA1XV0sW1s2NDkxMiw2NDkxM10sXCJkaXNhbGxvd2VkXCJdLFtbNjQ5MTQsNjQ5MTRdLFwibWFwcGVkXCIsWzE2MDUsMTU4MCwxNTgyXV0sW1s2NDkxNSw2NDkxNV0sXCJtYXBwZWRcIixbMTYwNywxNjA1LDE1ODBdXSxbWzY0OTE2LDY0OTE2XSxcIm1hcHBlZFwiLFsxNjA3LDE2MDUsMTYwNV1dLFtbNjQ5MTcsNjQ5MTddLFwibWFwcGVkXCIsWzE2MDYsMTU4MSwxNjA1XV0sW1s2NDkxOCw2NDkxOF0sXCJtYXBwZWRcIixbMTYwNiwxNTgxLDE2MDldXSxbWzY0OTE5LDY0OTIwXSxcIm1hcHBlZFwiLFsxNjA2LDE1ODAsMTYwNV1dLFtbNjQ5MjEsNjQ5MjFdLFwibWFwcGVkXCIsWzE2MDYsMTU4MCwxNjA5XV0sW1s2NDkyMiw2NDkyMl0sXCJtYXBwZWRcIixbMTYwNiwxNjA1LDE2MTBdXSxbWzY0OTIzLDY0OTIzXSxcIm1hcHBlZFwiLFsxNjA2LDE2MDUsMTYwOV1dLFtbNjQ5MjQsNjQ5MjVdLFwibWFwcGVkXCIsWzE2MTAsMTYwNSwxNjA1XV0sW1s2NDkyNiw2NDkyNl0sXCJtYXBwZWRcIixbMTU3NiwxNTgyLDE2MTBdXSxbWzY0OTI3LDY0OTI3XSxcIm1hcHBlZFwiLFsxNTc4LDE1ODAsMTYxMF1dLFtbNjQ5MjgsNjQ5MjhdLFwibWFwcGVkXCIsWzE1NzgsMTU4MCwxNjA5XV0sW1s2NDkyOSw2NDkyOV0sXCJtYXBwZWRcIixbMTU3OCwxNTgyLDE2MTBdXSxbWzY0OTMwLDY0OTMwXSxcIm1hcHBlZFwiLFsxNTc4LDE1ODIsMTYwOV1dLFtbNjQ5MzEsNjQ5MzFdLFwibWFwcGVkXCIsWzE1NzgsMTYwNSwxNjEwXV0sW1s2NDkzMiw2NDkzMl0sXCJtYXBwZWRcIixbMTU3OCwxNjA1LDE2MDldXSxbWzY0OTMzLDY0OTMzXSxcIm1hcHBlZFwiLFsxNTgwLDE2MDUsMTYxMF1dLFtbNjQ5MzQsNjQ5MzRdLFwibWFwcGVkXCIsWzE1ODAsMTU4MSwxNjA5XV0sW1s2NDkzNSw2NDkzNV0sXCJtYXBwZWRcIixbMTU4MCwxNjA1LDE2MDldXSxbWzY0OTM2LDY0OTM2XSxcIm1hcHBlZFwiLFsxNTg3LDE1ODIsMTYwOV1dLFtbNjQ5MzcsNjQ5MzddLFwibWFwcGVkXCIsWzE1ODksMTU4MSwxNjEwXV0sW1s2NDkzOCw2NDkzOF0sXCJtYXBwZWRcIixbMTU4OCwxNTgxLDE2MTBdXSxbWzY0OTM5LDY0OTM5XSxcIm1hcHBlZFwiLFsxNTkwLDE1ODEsMTYxMF1dLFtbNjQ5NDAsNjQ5NDBdLFwibWFwcGVkXCIsWzE2MDQsMTU4MCwxNjEwXV0sW1s2NDk0MSw2NDk0MV0sXCJtYXBwZWRcIixbMTYwNCwxNjA1LDE2MTBdXSxbWzY0OTQyLDY0OTQyXSxcIm1hcHBlZFwiLFsxNjEwLDE1ODEsMTYxMF1dLFtbNjQ5NDMsNjQ5NDNdLFwibWFwcGVkXCIsWzE2MTAsMTU4MCwxNjEwXV0sW1s2NDk0NCw2NDk0NF0sXCJtYXBwZWRcIixbMTYxMCwxNjA1LDE2MTBdXSxbWzY0OTQ1LDY0OTQ1XSxcIm1hcHBlZFwiLFsxNjA1LDE2MDUsMTYxMF1dLFtbNjQ5NDYsNjQ5NDZdLFwibWFwcGVkXCIsWzE2MDIsMTYwNSwxNjEwXV0sW1s2NDk0Nyw2NDk0N10sXCJtYXBwZWRcIixbMTYwNiwxNTgxLDE2MTBdXSxbWzY0OTQ4LDY0OTQ4XSxcIm1hcHBlZFwiLFsxNjAyLDE2MDUsMTU4MV1dLFtbNjQ5NDksNjQ5NDldLFwibWFwcGVkXCIsWzE2MDQsMTU4MSwxNjA1XV0sW1s2NDk1MCw2NDk1MF0sXCJtYXBwZWRcIixbMTU5MywxNjA1LDE2MTBdXSxbWzY0OTUxLDY0OTUxXSxcIm1hcHBlZFwiLFsxNjAzLDE2MDUsMTYxMF1dLFtbNjQ5NTIsNjQ5NTJdLFwibWFwcGVkXCIsWzE2MDYsMTU4MCwxNTgxXV0sW1s2NDk1Myw2NDk1M10sXCJtYXBwZWRcIixbMTYwNSwxNTgyLDE2MTBdXSxbWzY0OTU0LDY0OTU0XSxcIm1hcHBlZFwiLFsxNjA0LDE1ODAsMTYwNV1dLFtbNjQ5NTUsNjQ5NTVdLFwibWFwcGVkXCIsWzE2MDMsMTYwNSwxNjA1XV0sW1s2NDk1Niw2NDk1Nl0sXCJtYXBwZWRcIixbMTYwNCwxNTgwLDE2MDVdXSxbWzY0OTU3LDY0OTU3XSxcIm1hcHBlZFwiLFsxNjA2LDE1ODAsMTU4MV1dLFtbNjQ5NTgsNjQ5NThdLFwibWFwcGVkXCIsWzE1ODAsMTU4MSwxNjEwXV0sW1s2NDk1OSw2NDk1OV0sXCJtYXBwZWRcIixbMTU4MSwxNTgwLDE2MTBdXSxbWzY0OTYwLDY0OTYwXSxcIm1hcHBlZFwiLFsxNjA1LDE1ODAsMTYxMF1dLFtbNjQ5NjEsNjQ5NjFdLFwibWFwcGVkXCIsWzE2MDEsMTYwNSwxNjEwXV0sW1s2NDk2Miw2NDk2Ml0sXCJtYXBwZWRcIixbMTU3NiwxNTgxLDE2MTBdXSxbWzY0OTYzLDY0OTYzXSxcIm1hcHBlZFwiLFsxNjAzLDE2MDUsMTYwNV1dLFtbNjQ5NjQsNjQ5NjRdLFwibWFwcGVkXCIsWzE1OTMsMTU4MCwxNjA1XV0sW1s2NDk2NSw2NDk2NV0sXCJtYXBwZWRcIixbMTU4OSwxNjA1LDE2MDVdXSxbWzY0OTY2LDY0OTY2XSxcIm1hcHBlZFwiLFsxNTg3LDE1ODIsMTYxMF1dLFtbNjQ5NjcsNjQ5NjddLFwibWFwcGVkXCIsWzE2MDYsMTU4MCwxNjEwXV0sW1s2NDk2OCw2NDk3NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjQ5NzYsNjUwMDddLFwiZGlzYWxsb3dlZFwiXSxbWzY1MDA4LDY1MDA4XSxcIm1hcHBlZFwiLFsxNTg5LDE2MDQsMTc0Nl1dLFtbNjUwMDksNjUwMDldLFwibWFwcGVkXCIsWzE2MDIsMTYwNCwxNzQ2XV0sW1s2NTAxMCw2NTAxMF0sXCJtYXBwZWRcIixbMTU3NSwxNjA0LDE2MDQsMTYwN11dLFtbNjUwMTEsNjUwMTFdLFwibWFwcGVkXCIsWzE1NzUsMTYwMywxNTc2LDE1ODVdXSxbWzY1MDEyLDY1MDEyXSxcIm1hcHBlZFwiLFsxNjA1LDE1ODEsMTYwNSwxNTgzXV0sW1s2NTAxMyw2NTAxM10sXCJtYXBwZWRcIixbMTU4OSwxNjA0LDE1OTMsMTYwNV1dLFtbNjUwMTQsNjUwMTRdLFwibWFwcGVkXCIsWzE1ODUsMTU4NywxNjA4LDE2MDRdXSxbWzY1MDE1LDY1MDE1XSxcIm1hcHBlZFwiLFsxNTkzLDE2MDQsMTYxMCwxNjA3XV0sW1s2NTAxNiw2NTAxNl0sXCJtYXBwZWRcIixbMTYwOCwxNTg3LDE2MDQsMTYwNV1dLFtbNjUwMTcsNjUwMTddLFwibWFwcGVkXCIsWzE1ODksMTYwNCwxNjA5XV0sW1s2NTAxOCw2NTAxOF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzE1ODksMTYwNCwxNjA5LDMyLDE1NzUsMTYwNCwxNjA0LDE2MDcsMzIsMTU5MywxNjA0LDE2MTAsMTYwNywzMiwxNjA4LDE1ODcsMTYwNCwxNjA1XV0sW1s2NTAxOSw2NTAxOV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzE1ODAsMTYwNCwzMiwxNTgwLDE2MDQsMTU3NSwxNjA0LDE2MDddXSxbWzY1MDIwLDY1MDIwXSxcIm1hcHBlZFwiLFsxNTg1LDE3NDAsMTU3NSwxNjA0XV0sW1s2NTAyMSw2NTAyMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjUwMjIsNjUwMjNdLFwiZGlzYWxsb3dlZFwiXSxbWzY1MDI0LDY1MDM5XSxcImlnbm9yZWRcIl0sW1s2NTA0MCw2NTA0MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQ0XV0sW1s2NTA0MSw2NTA0MV0sXCJtYXBwZWRcIixbMTIyODldXSxbWzY1MDQyLDY1MDQyXSxcImRpc2FsbG93ZWRcIl0sW1s2NTA0Myw2NTA0M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzU4XV0sW1s2NTA0NCw2NTA0NF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzU5XV0sW1s2NTA0NSw2NTA0NV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMzXV0sW1s2NTA0Niw2NTA0Nl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzYzXV0sW1s2NTA0Nyw2NTA0N10sXCJtYXBwZWRcIixbMTIzMTBdXSxbWzY1MDQ4LDY1MDQ4XSxcIm1hcHBlZFwiLFsxMjMxMV1dLFtbNjUwNDksNjUwNDldLFwiZGlzYWxsb3dlZFwiXSxbWzY1MDUwLDY1MDU1XSxcImRpc2FsbG93ZWRcIl0sW1s2NTA1Niw2NTA1OV0sXCJ2YWxpZFwiXSxbWzY1MDYwLDY1MDYyXSxcInZhbGlkXCJdLFtbNjUwNjMsNjUwNjldLFwidmFsaWRcIl0sW1s2NTA3MCw2NTA3MV0sXCJ2YWxpZFwiXSxbWzY1MDcyLDY1MDcyXSxcImRpc2FsbG93ZWRcIl0sW1s2NTA3Myw2NTA3M10sXCJtYXBwZWRcIixbODIxMl1dLFtbNjUwNzQsNjUwNzRdLFwibWFwcGVkXCIsWzgyMTFdXSxbWzY1MDc1LDY1MDc2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTVdXSxbWzY1MDc3LDY1MDc3XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDBdXSxbWzY1MDc4LDY1MDc4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDFdXSxbWzY1MDc5LDY1MDc5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMTIzXV0sW1s2NTA4MCw2NTA4MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzEyNV1dLFtbNjUwODEsNjUwODFdLFwibWFwcGVkXCIsWzEyMzA4XV0sW1s2NTA4Miw2NTA4Ml0sXCJtYXBwZWRcIixbMTIzMDldXSxbWzY1MDgzLDY1MDgzXSxcIm1hcHBlZFwiLFsxMjMwNF1dLFtbNjUwODQsNjUwODRdLFwibWFwcGVkXCIsWzEyMzA1XV0sW1s2NTA4NSw2NTA4NV0sXCJtYXBwZWRcIixbMTIyOThdXSxbWzY1MDg2LDY1MDg2XSxcIm1hcHBlZFwiLFsxMjI5OV1dLFtbNjUwODcsNjUwODddLFwibWFwcGVkXCIsWzEyMjk2XV0sW1s2NTA4OCw2NTA4OF0sXCJtYXBwZWRcIixbMTIyOTddXSxbWzY1MDg5LDY1MDg5XSxcIm1hcHBlZFwiLFsxMjMwMF1dLFtbNjUwOTAsNjUwOTBdLFwibWFwcGVkXCIsWzEyMzAxXV0sW1s2NTA5MSw2NTA5MV0sXCJtYXBwZWRcIixbMTIzMDJdXSxbWzY1MDkyLDY1MDkyXSxcIm1hcHBlZFwiLFsxMjMwM11dLFtbNjUwOTMsNjUwOTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY1MDk1LDY1MDk1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTFdXSxbWzY1MDk2LDY1MDk2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTNdXSxbWzY1MDk3LDY1MTAwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsNzczXV0sW1s2NTEwMSw2NTEwM10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzk1XV0sW1s2NTEwNCw2NTEwNF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQ0XV0sW1s2NTEwNSw2NTEwNV0sXCJtYXBwZWRcIixbMTIyODldXSxbWzY1MTA2LDY1MTA2XSxcImRpc2FsbG93ZWRcIl0sW1s2NTEwNyw2NTEwN10sXCJkaXNhbGxvd2VkXCJdLFtbNjUxMDgsNjUxMDhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1OV1dLFtbNjUxMDksNjUxMDldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1OF1dLFtbNjUxMTAsNjUxMTBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2M11dLFtbNjUxMTEsNjUxMTFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszM11dLFtbNjUxMTIsNjUxMTJdLFwibWFwcGVkXCIsWzgyMTJdXSxbWzY1MTEzLDY1MTEzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDBdXSxbWzY1MTE0LDY1MTE0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDFdXSxbWzY1MTE1LDY1MTE1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMTIzXV0sW1s2NTExNiw2NTExNl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzEyNV1dLFtbNjUxMTcsNjUxMTddLFwibWFwcGVkXCIsWzEyMzA4XV0sW1s2NTExOCw2NTExOF0sXCJtYXBwZWRcIixbMTIzMDldXSxbWzY1MTE5LDY1MTE5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzVdXSxbWzY1MTIwLDY1MTIwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzhdXSxbWzY1MTIxLDY1MTIxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDJdXSxbWzY1MTIyLDY1MTIyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDNdXSxbWzY1MTIzLDY1MTIzXSxcIm1hcHBlZFwiLFs0NV1dLFtbNjUxMjQsNjUxMjRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2MF1dLFtbNjUxMjUsNjUxMjVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2Ml1dLFtbNjUxMjYsNjUxMjZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2MV1dLFtbNjUxMjcsNjUxMjddLFwiZGlzYWxsb3dlZFwiXSxbWzY1MTI4LDY1MTI4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbOTJdXSxbWzY1MTI5LDY1MTI5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzZdXSxbWzY1MTMwLDY1MTMwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzddXSxbWzY1MTMxLDY1MTMxXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNjRdXSxbWzY1MTMyLDY1MTM1XSxcImRpc2FsbG93ZWRcIl0sW1s2NTEzNiw2NTEzNl0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTFdXSxbWzY1MTM3LDY1MTM3XSxcIm1hcHBlZFwiLFsxNjAwLDE2MTFdXSxbWzY1MTM4LDY1MTM4XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTYxMl1dLFtbNjUxMzksNjUxMzldLFwidmFsaWRcIl0sW1s2NTE0MCw2NTE0MF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTNdXSxbWzY1MTQxLDY1MTQxXSxcImRpc2FsbG93ZWRcIl0sW1s2NTE0Miw2NTE0Ml0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTRdXSxbWzY1MTQzLDY1MTQzXSxcIm1hcHBlZFwiLFsxNjAwLDE2MTRdXSxbWzY1MTQ0LDY1MTQ0XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTYxNV1dLFtbNjUxNDUsNjUxNDVdLFwibWFwcGVkXCIsWzE2MDAsMTYxNV1dLFtbNjUxNDYsNjUxNDZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszMiwxNjE2XV0sW1s2NTE0Nyw2NTE0N10sXCJtYXBwZWRcIixbMTYwMCwxNjE2XV0sW1s2NTE0OCw2NTE0OF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDE2MTddXSxbWzY1MTQ5LDY1MTQ5XSxcIm1hcHBlZFwiLFsxNjAwLDE2MTddXSxbWzY1MTUwLDY1MTUwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMzIsMTYxOF1dLFtbNjUxNTEsNjUxNTFdLFwibWFwcGVkXCIsWzE2MDAsMTYxOF1dLFtbNjUxNTIsNjUxNTJdLFwibWFwcGVkXCIsWzE1NjldXSxbWzY1MTUzLDY1MTU0XSxcIm1hcHBlZFwiLFsxNTcwXV0sW1s2NTE1NSw2NTE1Nl0sXCJtYXBwZWRcIixbMTU3MV1dLFtbNjUxNTcsNjUxNThdLFwibWFwcGVkXCIsWzE1NzJdXSxbWzY1MTU5LDY1MTYwXSxcIm1hcHBlZFwiLFsxNTczXV0sW1s2NTE2MSw2NTE2NF0sXCJtYXBwZWRcIixbMTU3NF1dLFtbNjUxNjUsNjUxNjZdLFwibWFwcGVkXCIsWzE1NzVdXSxbWzY1MTY3LDY1MTcwXSxcIm1hcHBlZFwiLFsxNTc2XV0sW1s2NTE3MSw2NTE3Ml0sXCJtYXBwZWRcIixbMTU3N11dLFtbNjUxNzMsNjUxNzZdLFwibWFwcGVkXCIsWzE1NzhdXSxbWzY1MTc3LDY1MTgwXSxcIm1hcHBlZFwiLFsxNTc5XV0sW1s2NTE4MSw2NTE4NF0sXCJtYXBwZWRcIixbMTU4MF1dLFtbNjUxODUsNjUxODhdLFwibWFwcGVkXCIsWzE1ODFdXSxbWzY1MTg5LDY1MTkyXSxcIm1hcHBlZFwiLFsxNTgyXV0sW1s2NTE5Myw2NTE5NF0sXCJtYXBwZWRcIixbMTU4M11dLFtbNjUxOTUsNjUxOTZdLFwibWFwcGVkXCIsWzE1ODRdXSxbWzY1MTk3LDY1MTk4XSxcIm1hcHBlZFwiLFsxNTg1XV0sW1s2NTE5OSw2NTIwMF0sXCJtYXBwZWRcIixbMTU4Nl1dLFtbNjUyMDEsNjUyMDRdLFwibWFwcGVkXCIsWzE1ODddXSxbWzY1MjA1LDY1MjA4XSxcIm1hcHBlZFwiLFsxNTg4XV0sW1s2NTIwOSw2NTIxMl0sXCJtYXBwZWRcIixbMTU4OV1dLFtbNjUyMTMsNjUyMTZdLFwibWFwcGVkXCIsWzE1OTBdXSxbWzY1MjE3LDY1MjIwXSxcIm1hcHBlZFwiLFsxNTkxXV0sW1s2NTIyMSw2NTIyNF0sXCJtYXBwZWRcIixbMTU5Ml1dLFtbNjUyMjUsNjUyMjhdLFwibWFwcGVkXCIsWzE1OTNdXSxbWzY1MjI5LDY1MjMyXSxcIm1hcHBlZFwiLFsxNTk0XV0sW1s2NTIzMyw2NTIzNl0sXCJtYXBwZWRcIixbMTYwMV1dLFtbNjUyMzcsNjUyNDBdLFwibWFwcGVkXCIsWzE2MDJdXSxbWzY1MjQxLDY1MjQ0XSxcIm1hcHBlZFwiLFsxNjAzXV0sW1s2NTI0NSw2NTI0OF0sXCJtYXBwZWRcIixbMTYwNF1dLFtbNjUyNDksNjUyNTJdLFwibWFwcGVkXCIsWzE2MDVdXSxbWzY1MjUzLDY1MjU2XSxcIm1hcHBlZFwiLFsxNjA2XV0sW1s2NTI1Nyw2NTI2MF0sXCJtYXBwZWRcIixbMTYwN11dLFtbNjUyNjEsNjUyNjJdLFwibWFwcGVkXCIsWzE2MDhdXSxbWzY1MjYzLDY1MjY0XSxcIm1hcHBlZFwiLFsxNjA5XV0sW1s2NTI2NSw2NTI2OF0sXCJtYXBwZWRcIixbMTYxMF1dLFtbNjUyNjksNjUyNzBdLFwibWFwcGVkXCIsWzE2MDQsMTU3MF1dLFtbNjUyNzEsNjUyNzJdLFwibWFwcGVkXCIsWzE2MDQsMTU3MV1dLFtbNjUyNzMsNjUyNzRdLFwibWFwcGVkXCIsWzE2MDQsMTU3M11dLFtbNjUyNzUsNjUyNzZdLFwibWFwcGVkXCIsWzE2MDQsMTU3NV1dLFtbNjUyNzcsNjUyNzhdLFwiZGlzYWxsb3dlZFwiXSxbWzY1Mjc5LDY1Mjc5XSxcImlnbm9yZWRcIl0sW1s2NTI4MCw2NTI4MF0sXCJkaXNhbGxvd2VkXCJdLFtbNjUyODEsNjUyODFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszM11dLFtbNjUyODIsNjUyODJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszNF1dLFtbNjUyODMsNjUyODNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszNV1dLFtbNjUyODQsNjUyODRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszNl1dLFtbNjUyODUsNjUyODVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszN11dLFtbNjUyODYsNjUyODZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszOF1dLFtbNjUyODcsNjUyODddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFszOV1dLFtbNjUyODgsNjUyODhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MF1dLFtbNjUyODksNjUyODldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MV1dLFtbNjUyOTAsNjUyOTBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0Ml1dLFtbNjUyOTEsNjUyOTFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0M11dLFtbNjUyOTIsNjUyOTJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0NF1dLFtbNjUyOTMsNjUyOTNdLFwibWFwcGVkXCIsWzQ1XV0sW1s2NTI5NCw2NTI5NF0sXCJtYXBwZWRcIixbNDZdXSxbWzY1Mjk1LDY1Mjk1XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDddXSxbWzY1Mjk2LDY1Mjk2XSxcIm1hcHBlZFwiLFs0OF1dLFtbNjUyOTcsNjUyOTddLFwibWFwcGVkXCIsWzQ5XV0sW1s2NTI5OCw2NTI5OF0sXCJtYXBwZWRcIixbNTBdXSxbWzY1Mjk5LDY1Mjk5XSxcIm1hcHBlZFwiLFs1MV1dLFtbNjUzMDAsNjUzMDBdLFwibWFwcGVkXCIsWzUyXV0sW1s2NTMwMSw2NTMwMV0sXCJtYXBwZWRcIixbNTNdXSxbWzY1MzAyLDY1MzAyXSxcIm1hcHBlZFwiLFs1NF1dLFtbNjUzMDMsNjUzMDNdLFwibWFwcGVkXCIsWzU1XV0sW1s2NTMwNCw2NTMwNF0sXCJtYXBwZWRcIixbNTZdXSxbWzY1MzA1LDY1MzA1XSxcIm1hcHBlZFwiLFs1N11dLFtbNjUzMDYsNjUzMDZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1OF1dLFtbNjUzMDcsNjUzMDddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1OV1dLFtbNjUzMDgsNjUzMDhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2MF1dLFtbNjUzMDksNjUzMDldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2MV1dLFtbNjUzMTAsNjUzMTBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2Ml1dLFtbNjUzMTEsNjUzMTFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2M11dLFtbNjUzMTIsNjUzMTJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs2NF1dLFtbNjUzMTMsNjUzMTNdLFwibWFwcGVkXCIsWzk3XV0sW1s2NTMxNCw2NTMxNF0sXCJtYXBwZWRcIixbOThdXSxbWzY1MzE1LDY1MzE1XSxcIm1hcHBlZFwiLFs5OV1dLFtbNjUzMTYsNjUzMTZdLFwibWFwcGVkXCIsWzEwMF1dLFtbNjUzMTcsNjUzMTddLFwibWFwcGVkXCIsWzEwMV1dLFtbNjUzMTgsNjUzMThdLFwibWFwcGVkXCIsWzEwMl1dLFtbNjUzMTksNjUzMTldLFwibWFwcGVkXCIsWzEwM11dLFtbNjUzMjAsNjUzMjBdLFwibWFwcGVkXCIsWzEwNF1dLFtbNjUzMjEsNjUzMjFdLFwibWFwcGVkXCIsWzEwNV1dLFtbNjUzMjIsNjUzMjJdLFwibWFwcGVkXCIsWzEwNl1dLFtbNjUzMjMsNjUzMjNdLFwibWFwcGVkXCIsWzEwN11dLFtbNjUzMjQsNjUzMjRdLFwibWFwcGVkXCIsWzEwOF1dLFtbNjUzMjUsNjUzMjVdLFwibWFwcGVkXCIsWzEwOV1dLFtbNjUzMjYsNjUzMjZdLFwibWFwcGVkXCIsWzExMF1dLFtbNjUzMjcsNjUzMjddLFwibWFwcGVkXCIsWzExMV1dLFtbNjUzMjgsNjUzMjhdLFwibWFwcGVkXCIsWzExMl1dLFtbNjUzMjksNjUzMjldLFwibWFwcGVkXCIsWzExM11dLFtbNjUzMzAsNjUzMzBdLFwibWFwcGVkXCIsWzExNF1dLFtbNjUzMzEsNjUzMzFdLFwibWFwcGVkXCIsWzExNV1dLFtbNjUzMzIsNjUzMzJdLFwibWFwcGVkXCIsWzExNl1dLFtbNjUzMzMsNjUzMzNdLFwibWFwcGVkXCIsWzExN11dLFtbNjUzMzQsNjUzMzRdLFwibWFwcGVkXCIsWzExOF1dLFtbNjUzMzUsNjUzMzVdLFwibWFwcGVkXCIsWzExOV1dLFtbNjUzMzYsNjUzMzZdLFwibWFwcGVkXCIsWzEyMF1dLFtbNjUzMzcsNjUzMzddLFwibWFwcGVkXCIsWzEyMV1dLFtbNjUzMzgsNjUzMzhdLFwibWFwcGVkXCIsWzEyMl1dLFtbNjUzMzksNjUzMzldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5MV1dLFtbNjUzNDAsNjUzNDBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5Ml1dLFtbNjUzNDEsNjUzNDFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5M11dLFtbNjUzNDIsNjUzNDJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5NF1dLFtbNjUzNDMsNjUzNDNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5NV1dLFtbNjUzNDQsNjUzNDRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs5Nl1dLFtbNjUzNDUsNjUzNDVdLFwibWFwcGVkXCIsWzk3XV0sW1s2NTM0Niw2NTM0Nl0sXCJtYXBwZWRcIixbOThdXSxbWzY1MzQ3LDY1MzQ3XSxcIm1hcHBlZFwiLFs5OV1dLFtbNjUzNDgsNjUzNDhdLFwibWFwcGVkXCIsWzEwMF1dLFtbNjUzNDksNjUzNDldLFwibWFwcGVkXCIsWzEwMV1dLFtbNjUzNTAsNjUzNTBdLFwibWFwcGVkXCIsWzEwMl1dLFtbNjUzNTEsNjUzNTFdLFwibWFwcGVkXCIsWzEwM11dLFtbNjUzNTIsNjUzNTJdLFwibWFwcGVkXCIsWzEwNF1dLFtbNjUzNTMsNjUzNTNdLFwibWFwcGVkXCIsWzEwNV1dLFtbNjUzNTQsNjUzNTRdLFwibWFwcGVkXCIsWzEwNl1dLFtbNjUzNTUsNjUzNTVdLFwibWFwcGVkXCIsWzEwN11dLFtbNjUzNTYsNjUzNTZdLFwibWFwcGVkXCIsWzEwOF1dLFtbNjUzNTcsNjUzNTddLFwibWFwcGVkXCIsWzEwOV1dLFtbNjUzNTgsNjUzNThdLFwibWFwcGVkXCIsWzExMF1dLFtbNjUzNTksNjUzNTldLFwibWFwcGVkXCIsWzExMV1dLFtbNjUzNjAsNjUzNjBdLFwibWFwcGVkXCIsWzExMl1dLFtbNjUzNjEsNjUzNjFdLFwibWFwcGVkXCIsWzExM11dLFtbNjUzNjIsNjUzNjJdLFwibWFwcGVkXCIsWzExNF1dLFtbNjUzNjMsNjUzNjNdLFwibWFwcGVkXCIsWzExNV1dLFtbNjUzNjQsNjUzNjRdLFwibWFwcGVkXCIsWzExNl1dLFtbNjUzNjUsNjUzNjVdLFwibWFwcGVkXCIsWzExN11dLFtbNjUzNjYsNjUzNjZdLFwibWFwcGVkXCIsWzExOF1dLFtbNjUzNjcsNjUzNjddLFwibWFwcGVkXCIsWzExOV1dLFtbNjUzNjgsNjUzNjhdLFwibWFwcGVkXCIsWzEyMF1dLFtbNjUzNjksNjUzNjldLFwibWFwcGVkXCIsWzEyMV1dLFtbNjUzNzAsNjUzNzBdLFwibWFwcGVkXCIsWzEyMl1dLFtbNjUzNzEsNjUzNzFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxMjNdXSxbWzY1MzcyLDY1MzcyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbMTI0XV0sW1s2NTM3Myw2NTM3M10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzEyNV1dLFtbNjUzNzQsNjUzNzRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFsxMjZdXSxbWzY1Mzc1LDY1Mzc1XSxcIm1hcHBlZFwiLFsxMDYyOV1dLFtbNjUzNzYsNjUzNzZdLFwibWFwcGVkXCIsWzEwNjMwXV0sW1s2NTM3Nyw2NTM3N10sXCJtYXBwZWRcIixbNDZdXSxbWzY1Mzc4LDY1Mzc4XSxcIm1hcHBlZFwiLFsxMjMwMF1dLFtbNjUzNzksNjUzNzldLFwibWFwcGVkXCIsWzEyMzAxXV0sW1s2NTM4MCw2NTM4MF0sXCJtYXBwZWRcIixbMTIyODldXSxbWzY1MzgxLDY1MzgxXSxcIm1hcHBlZFwiLFsxMjUzOV1dLFtbNjUzODIsNjUzODJdLFwibWFwcGVkXCIsWzEyNTMwXV0sW1s2NTM4Myw2NTM4M10sXCJtYXBwZWRcIixbMTI0NDldXSxbWzY1Mzg0LDY1Mzg0XSxcIm1hcHBlZFwiLFsxMjQ1MV1dLFtbNjUzODUsNjUzODVdLFwibWFwcGVkXCIsWzEyNDUzXV0sW1s2NTM4Niw2NTM4Nl0sXCJtYXBwZWRcIixbMTI0NTVdXSxbWzY1Mzg3LDY1Mzg3XSxcIm1hcHBlZFwiLFsxMjQ1N11dLFtbNjUzODgsNjUzODhdLFwibWFwcGVkXCIsWzEyNTE1XV0sW1s2NTM4OSw2NTM4OV0sXCJtYXBwZWRcIixbMTI1MTddXSxbWzY1MzkwLDY1MzkwXSxcIm1hcHBlZFwiLFsxMjUxOV1dLFtbNjUzOTEsNjUzOTFdLFwibWFwcGVkXCIsWzEyNDgzXV0sW1s2NTM5Miw2NTM5Ml0sXCJtYXBwZWRcIixbMTI1NDBdXSxbWzY1MzkzLDY1MzkzXSxcIm1hcHBlZFwiLFsxMjQ1MF1dLFtbNjUzOTQsNjUzOTRdLFwibWFwcGVkXCIsWzEyNDUyXV0sW1s2NTM5NSw2NTM5NV0sXCJtYXBwZWRcIixbMTI0NTRdXSxbWzY1Mzk2LDY1Mzk2XSxcIm1hcHBlZFwiLFsxMjQ1Nl1dLFtbNjUzOTcsNjUzOTddLFwibWFwcGVkXCIsWzEyNDU4XV0sW1s2NTM5OCw2NTM5OF0sXCJtYXBwZWRcIixbMTI0NTldXSxbWzY1Mzk5LDY1Mzk5XSxcIm1hcHBlZFwiLFsxMjQ2MV1dLFtbNjU0MDAsNjU0MDBdLFwibWFwcGVkXCIsWzEyNDYzXV0sW1s2NTQwMSw2NTQwMV0sXCJtYXBwZWRcIixbMTI0NjVdXSxbWzY1NDAyLDY1NDAyXSxcIm1hcHBlZFwiLFsxMjQ2N11dLFtbNjU0MDMsNjU0MDNdLFwibWFwcGVkXCIsWzEyNDY5XV0sW1s2NTQwNCw2NTQwNF0sXCJtYXBwZWRcIixbMTI0NzFdXSxbWzY1NDA1LDY1NDA1XSxcIm1hcHBlZFwiLFsxMjQ3M11dLFtbNjU0MDYsNjU0MDZdLFwibWFwcGVkXCIsWzEyNDc1XV0sW1s2NTQwNyw2NTQwN10sXCJtYXBwZWRcIixbMTI0NzddXSxbWzY1NDA4LDY1NDA4XSxcIm1hcHBlZFwiLFsxMjQ3OV1dLFtbNjU0MDksNjU0MDldLFwibWFwcGVkXCIsWzEyNDgxXV0sW1s2NTQxMCw2NTQxMF0sXCJtYXBwZWRcIixbMTI0ODRdXSxbWzY1NDExLDY1NDExXSxcIm1hcHBlZFwiLFsxMjQ4Nl1dLFtbNjU0MTIsNjU0MTJdLFwibWFwcGVkXCIsWzEyNDg4XV0sW1s2NTQxMyw2NTQxM10sXCJtYXBwZWRcIixbMTI0OTBdXSxbWzY1NDE0LDY1NDE0XSxcIm1hcHBlZFwiLFsxMjQ5MV1dLFtbNjU0MTUsNjU0MTVdLFwibWFwcGVkXCIsWzEyNDkyXV0sW1s2NTQxNiw2NTQxNl0sXCJtYXBwZWRcIixbMTI0OTNdXSxbWzY1NDE3LDY1NDE3XSxcIm1hcHBlZFwiLFsxMjQ5NF1dLFtbNjU0MTgsNjU0MThdLFwibWFwcGVkXCIsWzEyNDk1XV0sW1s2NTQxOSw2NTQxOV0sXCJtYXBwZWRcIixbMTI0OThdXSxbWzY1NDIwLDY1NDIwXSxcIm1hcHBlZFwiLFsxMjUwMV1dLFtbNjU0MjEsNjU0MjFdLFwibWFwcGVkXCIsWzEyNTA0XV0sW1s2NTQyMiw2NTQyMl0sXCJtYXBwZWRcIixbMTI1MDddXSxbWzY1NDIzLDY1NDIzXSxcIm1hcHBlZFwiLFsxMjUxMF1dLFtbNjU0MjQsNjU0MjRdLFwibWFwcGVkXCIsWzEyNTExXV0sW1s2NTQyNSw2NTQyNV0sXCJtYXBwZWRcIixbMTI1MTJdXSxbWzY1NDI2LDY1NDI2XSxcIm1hcHBlZFwiLFsxMjUxM11dLFtbNjU0MjcsNjU0MjddLFwibWFwcGVkXCIsWzEyNTE0XV0sW1s2NTQyOCw2NTQyOF0sXCJtYXBwZWRcIixbMTI1MTZdXSxbWzY1NDI5LDY1NDI5XSxcIm1hcHBlZFwiLFsxMjUxOF1dLFtbNjU0MzAsNjU0MzBdLFwibWFwcGVkXCIsWzEyNTIwXV0sW1s2NTQzMSw2NTQzMV0sXCJtYXBwZWRcIixbMTI1MjFdXSxbWzY1NDMyLDY1NDMyXSxcIm1hcHBlZFwiLFsxMjUyMl1dLFtbNjU0MzMsNjU0MzNdLFwibWFwcGVkXCIsWzEyNTIzXV0sW1s2NTQzNCw2NTQzNF0sXCJtYXBwZWRcIixbMTI1MjRdXSxbWzY1NDM1LDY1NDM1XSxcIm1hcHBlZFwiLFsxMjUyNV1dLFtbNjU0MzYsNjU0MzZdLFwibWFwcGVkXCIsWzEyNTI3XV0sW1s2NTQzNyw2NTQzN10sXCJtYXBwZWRcIixbMTI1MzFdXSxbWzY1NDM4LDY1NDM4XSxcIm1hcHBlZFwiLFsxMjQ0MV1dLFtbNjU0MzksNjU0MzldLFwibWFwcGVkXCIsWzEyNDQyXV0sW1s2NTQ0MCw2NTQ0MF0sXCJkaXNhbGxvd2VkXCJdLFtbNjU0NDEsNjU0NDFdLFwibWFwcGVkXCIsWzQzNTJdXSxbWzY1NDQyLDY1NDQyXSxcIm1hcHBlZFwiLFs0MzUzXV0sW1s2NTQ0Myw2NTQ0M10sXCJtYXBwZWRcIixbNDUyMl1dLFtbNjU0NDQsNjU0NDRdLFwibWFwcGVkXCIsWzQzNTRdXSxbWzY1NDQ1LDY1NDQ1XSxcIm1hcHBlZFwiLFs0NTI0XV0sW1s2NTQ0Niw2NTQ0Nl0sXCJtYXBwZWRcIixbNDUyNV1dLFtbNjU0NDcsNjU0NDddLFwibWFwcGVkXCIsWzQzNTVdXSxbWzY1NDQ4LDY1NDQ4XSxcIm1hcHBlZFwiLFs0MzU2XV0sW1s2NTQ0OSw2NTQ0OV0sXCJtYXBwZWRcIixbNDM1N11dLFtbNjU0NTAsNjU0NTBdLFwibWFwcGVkXCIsWzQ1MjhdXSxbWzY1NDUxLDY1NDUxXSxcIm1hcHBlZFwiLFs0NTI5XV0sW1s2NTQ1Miw2NTQ1Ml0sXCJtYXBwZWRcIixbNDUzMF1dLFtbNjU0NTMsNjU0NTNdLFwibWFwcGVkXCIsWzQ1MzFdXSxbWzY1NDU0LDY1NDU0XSxcIm1hcHBlZFwiLFs0NTMyXV0sW1s2NTQ1NSw2NTQ1NV0sXCJtYXBwZWRcIixbNDUzM11dLFtbNjU0NTYsNjU0NTZdLFwibWFwcGVkXCIsWzQzNzhdXSxbWzY1NDU3LDY1NDU3XSxcIm1hcHBlZFwiLFs0MzU4XV0sW1s2NTQ1OCw2NTQ1OF0sXCJtYXBwZWRcIixbNDM1OV1dLFtbNjU0NTksNjU0NTldLFwibWFwcGVkXCIsWzQzNjBdXSxbWzY1NDYwLDY1NDYwXSxcIm1hcHBlZFwiLFs0Mzg1XV0sW1s2NTQ2MSw2NTQ2MV0sXCJtYXBwZWRcIixbNDM2MV1dLFtbNjU0NjIsNjU0NjJdLFwibWFwcGVkXCIsWzQzNjJdXSxbWzY1NDYzLDY1NDYzXSxcIm1hcHBlZFwiLFs0MzYzXV0sW1s2NTQ2NCw2NTQ2NF0sXCJtYXBwZWRcIixbNDM2NF1dLFtbNjU0NjUsNjU0NjVdLFwibWFwcGVkXCIsWzQzNjVdXSxbWzY1NDY2LDY1NDY2XSxcIm1hcHBlZFwiLFs0MzY2XV0sW1s2NTQ2Nyw2NTQ2N10sXCJtYXBwZWRcIixbNDM2N11dLFtbNjU0NjgsNjU0NjhdLFwibWFwcGVkXCIsWzQzNjhdXSxbWzY1NDY5LDY1NDY5XSxcIm1hcHBlZFwiLFs0MzY5XV0sW1s2NTQ3MCw2NTQ3MF0sXCJtYXBwZWRcIixbNDM3MF1dLFtbNjU0NzEsNjU0NzNdLFwiZGlzYWxsb3dlZFwiXSxbWzY1NDc0LDY1NDc0XSxcIm1hcHBlZFwiLFs0NDQ5XV0sW1s2NTQ3NSw2NTQ3NV0sXCJtYXBwZWRcIixbNDQ1MF1dLFtbNjU0NzYsNjU0NzZdLFwibWFwcGVkXCIsWzQ0NTFdXSxbWzY1NDc3LDY1NDc3XSxcIm1hcHBlZFwiLFs0NDUyXV0sW1s2NTQ3OCw2NTQ3OF0sXCJtYXBwZWRcIixbNDQ1M11dLFtbNjU0NzksNjU0NzldLFwibWFwcGVkXCIsWzQ0NTRdXSxbWzY1NDgwLDY1NDgxXSxcImRpc2FsbG93ZWRcIl0sW1s2NTQ4Miw2NTQ4Ml0sXCJtYXBwZWRcIixbNDQ1NV1dLFtbNjU0ODMsNjU0ODNdLFwibWFwcGVkXCIsWzQ0NTZdXSxbWzY1NDg0LDY1NDg0XSxcIm1hcHBlZFwiLFs0NDU3XV0sW1s2NTQ4NSw2NTQ4NV0sXCJtYXBwZWRcIixbNDQ1OF1dLFtbNjU0ODYsNjU0ODZdLFwibWFwcGVkXCIsWzQ0NTldXSxbWzY1NDg3LDY1NDg3XSxcIm1hcHBlZFwiLFs0NDYwXV0sW1s2NTQ4OCw2NTQ4OV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU0OTAsNjU0OTBdLFwibWFwcGVkXCIsWzQ0NjFdXSxbWzY1NDkxLDY1NDkxXSxcIm1hcHBlZFwiLFs0NDYyXV0sW1s2NTQ5Miw2NTQ5Ml0sXCJtYXBwZWRcIixbNDQ2M11dLFtbNjU0OTMsNjU0OTNdLFwibWFwcGVkXCIsWzQ0NjRdXSxbWzY1NDk0LDY1NDk0XSxcIm1hcHBlZFwiLFs0NDY1XV0sW1s2NTQ5NSw2NTQ5NV0sXCJtYXBwZWRcIixbNDQ2Nl1dLFtbNjU0OTYsNjU0OTddLFwiZGlzYWxsb3dlZFwiXSxbWzY1NDk4LDY1NDk4XSxcIm1hcHBlZFwiLFs0NDY3XV0sW1s2NTQ5OSw2NTQ5OV0sXCJtYXBwZWRcIixbNDQ2OF1dLFtbNjU1MDAsNjU1MDBdLFwibWFwcGVkXCIsWzQ0NjldXSxbWzY1NTAxLDY1NTAzXSxcImRpc2FsbG93ZWRcIl0sW1s2NTUwNCw2NTUwNF0sXCJtYXBwZWRcIixbMTYyXV0sW1s2NTUwNSw2NTUwNV0sXCJtYXBwZWRcIixbMTYzXV0sW1s2NTUwNiw2NTUwNl0sXCJtYXBwZWRcIixbMTcyXV0sW1s2NTUwNyw2NTUwN10sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzMyLDc3Ml1dLFtbNjU1MDgsNjU1MDhdLFwibWFwcGVkXCIsWzE2Nl1dLFtbNjU1MDksNjU1MDldLFwibWFwcGVkXCIsWzE2NV1dLFtbNjU1MTAsNjU1MTBdLFwibWFwcGVkXCIsWzgzNjFdXSxbWzY1NTExLDY1NTExXSxcImRpc2FsbG93ZWRcIl0sW1s2NTUxMiw2NTUxMl0sXCJtYXBwZWRcIixbOTQ3NF1dLFtbNjU1MTMsNjU1MTNdLFwibWFwcGVkXCIsWzg1OTJdXSxbWzY1NTE0LDY1NTE0XSxcIm1hcHBlZFwiLFs4NTkzXV0sW1s2NTUxNSw2NTUxNV0sXCJtYXBwZWRcIixbODU5NF1dLFtbNjU1MTYsNjU1MTZdLFwibWFwcGVkXCIsWzg1OTVdXSxbWzY1NTE3LDY1NTE3XSxcIm1hcHBlZFwiLFs5NjMyXV0sW1s2NTUxOCw2NTUxOF0sXCJtYXBwZWRcIixbOTY3NV1dLFtbNjU1MTksNjU1MjhdLFwiZGlzYWxsb3dlZFwiXSxbWzY1NTI5LDY1NTMxXSxcImRpc2FsbG93ZWRcIl0sW1s2NTUzMiw2NTUzMl0sXCJkaXNhbGxvd2VkXCJdLFtbNjU1MzMsNjU1MzNdLFwiZGlzYWxsb3dlZFwiXSxbWzY1NTM0LDY1NTM1XSxcImRpc2FsbG93ZWRcIl0sW1s2NTUzNiw2NTU0N10sXCJ2YWxpZFwiXSxbWzY1NTQ4LDY1NTQ4XSxcImRpc2FsbG93ZWRcIl0sW1s2NTU0OSw2NTU3NF0sXCJ2YWxpZFwiXSxbWzY1NTc1LDY1NTc1XSxcImRpc2FsbG93ZWRcIl0sW1s2NTU3Niw2NTU5NF0sXCJ2YWxpZFwiXSxbWzY1NTk1LDY1NTk1XSxcImRpc2FsbG93ZWRcIl0sW1s2NTU5Niw2NTU5N10sXCJ2YWxpZFwiXSxbWzY1NTk4LDY1NTk4XSxcImRpc2FsbG93ZWRcIl0sW1s2NTU5OSw2NTYxM10sXCJ2YWxpZFwiXSxbWzY1NjE0LDY1NjE1XSxcImRpc2FsbG93ZWRcIl0sW1s2NTYxNiw2NTYyOV0sXCJ2YWxpZFwiXSxbWzY1NjMwLDY1NjYzXSxcImRpc2FsbG93ZWRcIl0sW1s2NTY2NCw2NTc4Nl0sXCJ2YWxpZFwiXSxbWzY1Nzg3LDY1NzkxXSxcImRpc2FsbG93ZWRcIl0sW1s2NTc5Miw2NTc5NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjU3OTUsNjU3OThdLFwiZGlzYWxsb3dlZFwiXSxbWzY1Nzk5LDY1ODQzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NTg0NCw2NTg0Nl0sXCJkaXNhbGxvd2VkXCJdLFtbNjU4NDcsNjU4NTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY1ODU2LDY1OTMwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NTkzMSw2NTkzMl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjU5MzMsNjU5MzVdLFwiZGlzYWxsb3dlZFwiXSxbWzY1OTM2LDY1OTQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NTk0OCw2NTk1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjU5NTIsNjU5NTJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY1OTUzLDY1OTk5XSxcImRpc2FsbG93ZWRcIl0sW1s2NjAwMCw2NjA0NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjYwNDUsNjYwNDVdLFwidmFsaWRcIl0sW1s2NjA0Niw2NjE3NV0sXCJkaXNhbGxvd2VkXCJdLFtbNjYxNzYsNjYyMDRdLFwidmFsaWRcIl0sW1s2NjIwNSw2NjIwN10sXCJkaXNhbGxvd2VkXCJdLFtbNjYyMDgsNjYyNTZdLFwidmFsaWRcIl0sW1s2NjI1Nyw2NjI3MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjYyNzIsNjYyNzJdLFwidmFsaWRcIl0sW1s2NjI3Myw2NjI5OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjYzMDAsNjYzMDNdLFwiZGlzYWxsb3dlZFwiXSxbWzY2MzA0LDY2MzM0XSxcInZhbGlkXCJdLFtbNjYzMzUsNjYzMzVdLFwidmFsaWRcIl0sW1s2NjMzNiw2NjMzOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjYzNDAsNjYzNTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY2MzUyLDY2MzY4XSxcInZhbGlkXCJdLFtbNjYzNjksNjYzNjldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2MzcwLDY2Mzc3XSxcInZhbGlkXCJdLFtbNjYzNzgsNjYzNzhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY2Mzc5LDY2MzgzXSxcImRpc2FsbG93ZWRcIl0sW1s2NjM4NCw2NjQyNl0sXCJ2YWxpZFwiXSxbWzY2NDI3LDY2NDMxXSxcImRpc2FsbG93ZWRcIl0sW1s2NjQzMiw2NjQ2MV0sXCJ2YWxpZFwiXSxbWzY2NDYyLDY2NDYyXSxcImRpc2FsbG93ZWRcIl0sW1s2NjQ2Myw2NjQ2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjY0NjQsNjY0OTldLFwidmFsaWRcIl0sW1s2NjUwMCw2NjUwM10sXCJkaXNhbGxvd2VkXCJdLFtbNjY1MDQsNjY1MTFdLFwidmFsaWRcIl0sW1s2NjUxMiw2NjUxN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjY1MTgsNjY1NTldLFwiZGlzYWxsb3dlZFwiXSxbWzY2NTYwLDY2NTYwXSxcIm1hcHBlZFwiLFs2NjYwMF1dLFtbNjY1NjEsNjY1NjFdLFwibWFwcGVkXCIsWzY2NjAxXV0sW1s2NjU2Miw2NjU2Ml0sXCJtYXBwZWRcIixbNjY2MDJdXSxbWzY2NTYzLDY2NTYzXSxcIm1hcHBlZFwiLFs2NjYwM11dLFtbNjY1NjQsNjY1NjRdLFwibWFwcGVkXCIsWzY2NjA0XV0sW1s2NjU2NSw2NjU2NV0sXCJtYXBwZWRcIixbNjY2MDVdXSxbWzY2NTY2LDY2NTY2XSxcIm1hcHBlZFwiLFs2NjYwNl1dLFtbNjY1NjcsNjY1NjddLFwibWFwcGVkXCIsWzY2NjA3XV0sW1s2NjU2OCw2NjU2OF0sXCJtYXBwZWRcIixbNjY2MDhdXSxbWzY2NTY5LDY2NTY5XSxcIm1hcHBlZFwiLFs2NjYwOV1dLFtbNjY1NzAsNjY1NzBdLFwibWFwcGVkXCIsWzY2NjEwXV0sW1s2NjU3MSw2NjU3MV0sXCJtYXBwZWRcIixbNjY2MTFdXSxbWzY2NTcyLDY2NTcyXSxcIm1hcHBlZFwiLFs2NjYxMl1dLFtbNjY1NzMsNjY1NzNdLFwibWFwcGVkXCIsWzY2NjEzXV0sW1s2NjU3NCw2NjU3NF0sXCJtYXBwZWRcIixbNjY2MTRdXSxbWzY2NTc1LDY2NTc1XSxcIm1hcHBlZFwiLFs2NjYxNV1dLFtbNjY1NzYsNjY1NzZdLFwibWFwcGVkXCIsWzY2NjE2XV0sW1s2NjU3Nyw2NjU3N10sXCJtYXBwZWRcIixbNjY2MTddXSxbWzY2NTc4LDY2NTc4XSxcIm1hcHBlZFwiLFs2NjYxOF1dLFtbNjY1NzksNjY1NzldLFwibWFwcGVkXCIsWzY2NjE5XV0sW1s2NjU4MCw2NjU4MF0sXCJtYXBwZWRcIixbNjY2MjBdXSxbWzY2NTgxLDY2NTgxXSxcIm1hcHBlZFwiLFs2NjYyMV1dLFtbNjY1ODIsNjY1ODJdLFwibWFwcGVkXCIsWzY2NjIyXV0sW1s2NjU4Myw2NjU4M10sXCJtYXBwZWRcIixbNjY2MjNdXSxbWzY2NTg0LDY2NTg0XSxcIm1hcHBlZFwiLFs2NjYyNF1dLFtbNjY1ODUsNjY1ODVdLFwibWFwcGVkXCIsWzY2NjI1XV0sW1s2NjU4Niw2NjU4Nl0sXCJtYXBwZWRcIixbNjY2MjZdXSxbWzY2NTg3LDY2NTg3XSxcIm1hcHBlZFwiLFs2NjYyN11dLFtbNjY1ODgsNjY1ODhdLFwibWFwcGVkXCIsWzY2NjI4XV0sW1s2NjU4OSw2NjU4OV0sXCJtYXBwZWRcIixbNjY2MjldXSxbWzY2NTkwLDY2NTkwXSxcIm1hcHBlZFwiLFs2NjYzMF1dLFtbNjY1OTEsNjY1OTFdLFwibWFwcGVkXCIsWzY2NjMxXV0sW1s2NjU5Miw2NjU5Ml0sXCJtYXBwZWRcIixbNjY2MzJdXSxbWzY2NTkzLDY2NTkzXSxcIm1hcHBlZFwiLFs2NjYzM11dLFtbNjY1OTQsNjY1OTRdLFwibWFwcGVkXCIsWzY2NjM0XV0sW1s2NjU5NSw2NjU5NV0sXCJtYXBwZWRcIixbNjY2MzVdXSxbWzY2NTk2LDY2NTk2XSxcIm1hcHBlZFwiLFs2NjYzNl1dLFtbNjY1OTcsNjY1OTddLFwibWFwcGVkXCIsWzY2NjM3XV0sW1s2NjU5OCw2NjU5OF0sXCJtYXBwZWRcIixbNjY2MzhdXSxbWzY2NTk5LDY2NTk5XSxcIm1hcHBlZFwiLFs2NjYzOV1dLFtbNjY2MDAsNjY2MzddLFwidmFsaWRcIl0sW1s2NjYzOCw2NjcxN10sXCJ2YWxpZFwiXSxbWzY2NzE4LDY2NzE5XSxcImRpc2FsbG93ZWRcIl0sW1s2NjcyMCw2NjcyOV0sXCJ2YWxpZFwiXSxbWzY2NzMwLDY2ODE1XSxcImRpc2FsbG93ZWRcIl0sW1s2NjgxNiw2Njg1NV0sXCJ2YWxpZFwiXSxbWzY2ODU2LDY2ODYzXSxcImRpc2FsbG93ZWRcIl0sW1s2Njg2NCw2NjkxNV0sXCJ2YWxpZFwiXSxbWzY2OTE2LDY2OTI2XSxcImRpc2FsbG93ZWRcIl0sW1s2NjkyNyw2NjkyN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjY5MjgsNjcwNzFdLFwiZGlzYWxsb3dlZFwiXSxbWzY3MDcyLDY3MzgyXSxcInZhbGlkXCJdLFtbNjczODMsNjczOTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY3MzkyLDY3NDEzXSxcInZhbGlkXCJdLFtbNjc0MTQsNjc0MjNdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NDI0LDY3NDMxXSxcInZhbGlkXCJdLFtbNjc0MzIsNjc1ODNdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NTg0LDY3NTg5XSxcInZhbGlkXCJdLFtbNjc1OTAsNjc1OTFdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NTkyLDY3NTkyXSxcInZhbGlkXCJdLFtbNjc1OTMsNjc1OTNdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NTk0LDY3NjM3XSxcInZhbGlkXCJdLFtbNjc2MzgsNjc2MzhdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NjM5LDY3NjQwXSxcInZhbGlkXCJdLFtbNjc2NDEsNjc2NDNdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NjQ0LDY3NjQ0XSxcInZhbGlkXCJdLFtbNjc2NDUsNjc2NDZdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NjQ3LDY3NjQ3XSxcInZhbGlkXCJdLFtbNjc2NDgsNjc2NjldLFwidmFsaWRcIl0sW1s2NzY3MCw2NzY3MF0sXCJkaXNhbGxvd2VkXCJdLFtbNjc2NzEsNjc2NzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY3NjgwLDY3NzAyXSxcInZhbGlkXCJdLFtbNjc3MDMsNjc3MTFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY3NzEyLDY3NzQyXSxcInZhbGlkXCJdLFtbNjc3NDMsNjc3NTBdLFwiZGlzYWxsb3dlZFwiXSxbWzY3NzUxLDY3NzU5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2Nzc2MCw2NzgwN10sXCJkaXNhbGxvd2VkXCJdLFtbNjc4MDgsNjc4MjZdLFwidmFsaWRcIl0sW1s2NzgyNyw2NzgyN10sXCJkaXNhbGxvd2VkXCJdLFtbNjc4MjgsNjc4MjldLFwidmFsaWRcIl0sW1s2NzgzMCw2NzgzNF0sXCJkaXNhbGxvd2VkXCJdLFtbNjc4MzUsNjc4MzldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY3ODQwLDY3ODYxXSxcInZhbGlkXCJdLFtbNjc4NjIsNjc4NjVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY3ODY2LDY3ODY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2Nzg2OCw2Nzg3MF0sXCJkaXNhbGxvd2VkXCJdLFtbNjc4NzEsNjc4NzFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY3ODcyLDY3ODk3XSxcInZhbGlkXCJdLFtbNjc4OTgsNjc5MDJdLFwiZGlzYWxsb3dlZFwiXSxbWzY3OTAzLDY3OTAzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2NzkwNCw2Nzk2N10sXCJkaXNhbGxvd2VkXCJdLFtbNjc5NjgsNjgwMjNdLFwidmFsaWRcIl0sW1s2ODAyNCw2ODAyN10sXCJkaXNhbGxvd2VkXCJdLFtbNjgwMjgsNjgwMjldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4MDMwLDY4MDMxXSxcInZhbGlkXCJdLFtbNjgwMzIsNjgwNDddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4MDQ4LDY4MDQ5XSxcImRpc2FsbG93ZWRcIl0sW1s2ODA1MCw2ODA5NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjgwOTYsNjgwOTldLFwidmFsaWRcIl0sW1s2ODEwMCw2ODEwMF0sXCJkaXNhbGxvd2VkXCJdLFtbNjgxMDEsNjgxMDJdLFwidmFsaWRcIl0sW1s2ODEwMyw2ODEwN10sXCJkaXNhbGxvd2VkXCJdLFtbNjgxMDgsNjgxMTVdLFwidmFsaWRcIl0sW1s2ODExNiw2ODExNl0sXCJkaXNhbGxvd2VkXCJdLFtbNjgxMTcsNjgxMTldLFwidmFsaWRcIl0sW1s2ODEyMCw2ODEyMF0sXCJkaXNhbGxvd2VkXCJdLFtbNjgxMjEsNjgxNDddLFwidmFsaWRcIl0sW1s2ODE0OCw2ODE1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjgxNTIsNjgxNTRdLFwidmFsaWRcIl0sW1s2ODE1NSw2ODE1OF0sXCJkaXNhbGxvd2VkXCJdLFtbNjgxNTksNjgxNTldLFwidmFsaWRcIl0sW1s2ODE2MCw2ODE2N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjgxNjgsNjgxNzVdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MTc2LDY4MTg0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODE4NSw2ODE5MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjgxOTIsNjgyMjBdLFwidmFsaWRcIl0sW1s2ODIyMSw2ODIyM10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjgyMjQsNjgyNTJdLFwidmFsaWRcIl0sW1s2ODI1Myw2ODI1NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjgyNTYsNjgyODddLFwiZGlzYWxsb3dlZFwiXSxbWzY4Mjg4LDY4Mjk1XSxcInZhbGlkXCJdLFtbNjgyOTYsNjgyOTZdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4Mjk3LDY4MzI2XSxcInZhbGlkXCJdLFtbNjgzMjcsNjgzMzBdLFwiZGlzYWxsb3dlZFwiXSxbWzY4MzMxLDY4MzQyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODM0Myw2ODM1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNjgzNTIsNjg0MDVdLFwidmFsaWRcIl0sW1s2ODQwNiw2ODQwOF0sXCJkaXNhbGxvd2VkXCJdLFtbNjg0MDksNjg0MTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4NDE2LDY4NDM3XSxcInZhbGlkXCJdLFtbNjg0MzgsNjg0MzldLFwiZGlzYWxsb3dlZFwiXSxbWzY4NDQwLDY4NDQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2ODQ0OCw2ODQ2Nl0sXCJ2YWxpZFwiXSxbWzY4NDY3LDY4NDcxXSxcImRpc2FsbG93ZWRcIl0sW1s2ODQ3Miw2ODQ3OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjg0ODAsNjg0OTddLFwidmFsaWRcIl0sW1s2ODQ5OCw2ODUwNF0sXCJkaXNhbGxvd2VkXCJdLFtbNjg1MDUsNjg1MDhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY4NTA5LDY4NTIwXSxcImRpc2FsbG93ZWRcIl0sW1s2ODUyMSw2ODUyN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjg1MjgsNjg2MDddLFwiZGlzYWxsb3dlZFwiXSxbWzY4NjA4LDY4NjgwXSxcInZhbGlkXCJdLFtbNjg2ODEsNjg3MzVdLFwiZGlzYWxsb3dlZFwiXSxbWzY4NzM2LDY4NzM2XSxcIm1hcHBlZFwiLFs2ODgwMF1dLFtbNjg3MzcsNjg3MzddLFwibWFwcGVkXCIsWzY4ODAxXV0sW1s2ODczOCw2ODczOF0sXCJtYXBwZWRcIixbNjg4MDJdXSxbWzY4NzM5LDY4NzM5XSxcIm1hcHBlZFwiLFs2ODgwM11dLFtbNjg3NDAsNjg3NDBdLFwibWFwcGVkXCIsWzY4ODA0XV0sW1s2ODc0MSw2ODc0MV0sXCJtYXBwZWRcIixbNjg4MDVdXSxbWzY4NzQyLDY4NzQyXSxcIm1hcHBlZFwiLFs2ODgwNl1dLFtbNjg3NDMsNjg3NDNdLFwibWFwcGVkXCIsWzY4ODA3XV0sW1s2ODc0NCw2ODc0NF0sXCJtYXBwZWRcIixbNjg4MDhdXSxbWzY4NzQ1LDY4NzQ1XSxcIm1hcHBlZFwiLFs2ODgwOV1dLFtbNjg3NDYsNjg3NDZdLFwibWFwcGVkXCIsWzY4ODEwXV0sW1s2ODc0Nyw2ODc0N10sXCJtYXBwZWRcIixbNjg4MTFdXSxbWzY4NzQ4LDY4NzQ4XSxcIm1hcHBlZFwiLFs2ODgxMl1dLFtbNjg3NDksNjg3NDldLFwibWFwcGVkXCIsWzY4ODEzXV0sW1s2ODc1MCw2ODc1MF0sXCJtYXBwZWRcIixbNjg4MTRdXSxbWzY4NzUxLDY4NzUxXSxcIm1hcHBlZFwiLFs2ODgxNV1dLFtbNjg3NTIsNjg3NTJdLFwibWFwcGVkXCIsWzY4ODE2XV0sW1s2ODc1Myw2ODc1M10sXCJtYXBwZWRcIixbNjg4MTddXSxbWzY4NzU0LDY4NzU0XSxcIm1hcHBlZFwiLFs2ODgxOF1dLFtbNjg3NTUsNjg3NTVdLFwibWFwcGVkXCIsWzY4ODE5XV0sW1s2ODc1Niw2ODc1Nl0sXCJtYXBwZWRcIixbNjg4MjBdXSxbWzY4NzU3LDY4NzU3XSxcIm1hcHBlZFwiLFs2ODgyMV1dLFtbNjg3NTgsNjg3NThdLFwibWFwcGVkXCIsWzY4ODIyXV0sW1s2ODc1OSw2ODc1OV0sXCJtYXBwZWRcIixbNjg4MjNdXSxbWzY4NzYwLDY4NzYwXSxcIm1hcHBlZFwiLFs2ODgyNF1dLFtbNjg3NjEsNjg3NjFdLFwibWFwcGVkXCIsWzY4ODI1XV0sW1s2ODc2Miw2ODc2Ml0sXCJtYXBwZWRcIixbNjg4MjZdXSxbWzY4NzYzLDY4NzYzXSxcIm1hcHBlZFwiLFs2ODgyN11dLFtbNjg3NjQsNjg3NjRdLFwibWFwcGVkXCIsWzY4ODI4XV0sW1s2ODc2NSw2ODc2NV0sXCJtYXBwZWRcIixbNjg4MjldXSxbWzY4NzY2LDY4NzY2XSxcIm1hcHBlZFwiLFs2ODgzMF1dLFtbNjg3NjcsNjg3NjddLFwibWFwcGVkXCIsWzY4ODMxXV0sW1s2ODc2OCw2ODc2OF0sXCJtYXBwZWRcIixbNjg4MzJdXSxbWzY4NzY5LDY4NzY5XSxcIm1hcHBlZFwiLFs2ODgzM11dLFtbNjg3NzAsNjg3NzBdLFwibWFwcGVkXCIsWzY4ODM0XV0sW1s2ODc3MSw2ODc3MV0sXCJtYXBwZWRcIixbNjg4MzVdXSxbWzY4NzcyLDY4NzcyXSxcIm1hcHBlZFwiLFs2ODgzNl1dLFtbNjg3NzMsNjg3NzNdLFwibWFwcGVkXCIsWzY4ODM3XV0sW1s2ODc3NCw2ODc3NF0sXCJtYXBwZWRcIixbNjg4MzhdXSxbWzY4Nzc1LDY4Nzc1XSxcIm1hcHBlZFwiLFs2ODgzOV1dLFtbNjg3NzYsNjg3NzZdLFwibWFwcGVkXCIsWzY4ODQwXV0sW1s2ODc3Nyw2ODc3N10sXCJtYXBwZWRcIixbNjg4NDFdXSxbWzY4Nzc4LDY4Nzc4XSxcIm1hcHBlZFwiLFs2ODg0Ml1dLFtbNjg3NzksNjg3NzldLFwibWFwcGVkXCIsWzY4ODQzXV0sW1s2ODc4MCw2ODc4MF0sXCJtYXBwZWRcIixbNjg4NDRdXSxbWzY4NzgxLDY4NzgxXSxcIm1hcHBlZFwiLFs2ODg0NV1dLFtbNjg3ODIsNjg3ODJdLFwibWFwcGVkXCIsWzY4ODQ2XV0sW1s2ODc4Myw2ODc4M10sXCJtYXBwZWRcIixbNjg4NDddXSxbWzY4Nzg0LDY4Nzg0XSxcIm1hcHBlZFwiLFs2ODg0OF1dLFtbNjg3ODUsNjg3ODVdLFwibWFwcGVkXCIsWzY4ODQ5XV0sW1s2ODc4Niw2ODc4Nl0sXCJtYXBwZWRcIixbNjg4NTBdXSxbWzY4Nzg3LDY4Nzk5XSxcImRpc2FsbG93ZWRcIl0sW1s2ODgwMCw2ODg1MF0sXCJ2YWxpZFwiXSxbWzY4ODUxLDY4ODU3XSxcImRpc2FsbG93ZWRcIl0sW1s2ODg1OCw2ODg2M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjg4NjQsNjkyMTVdLFwiZGlzYWxsb3dlZFwiXSxbWzY5MjE2LDY5MjQ2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2OTI0Nyw2OTYzMV0sXCJkaXNhbGxvd2VkXCJdLFtbNjk2MzIsNjk3MDJdLFwidmFsaWRcIl0sW1s2OTcwMyw2OTcwOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjk3MTAsNjk3MTNdLFwiZGlzYWxsb3dlZFwiXSxbWzY5NzE0LDY5NzMzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s2OTczNCw2OTc0M10sXCJ2YWxpZFwiXSxbWzY5NzQ0LDY5NzU4XSxcImRpc2FsbG93ZWRcIl0sW1s2OTc1OSw2OTc1OV0sXCJ2YWxpZFwiXSxbWzY5NzYwLDY5ODE4XSxcInZhbGlkXCJdLFtbNjk4MTksNjk4MjBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY5ODIxLDY5ODIxXSxcImRpc2FsbG93ZWRcIl0sW1s2OTgyMiw2OTgyNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNjk4MjYsNjk4MzldLFwiZGlzYWxsb3dlZFwiXSxbWzY5ODQwLDY5ODY0XSxcInZhbGlkXCJdLFtbNjk4NjUsNjk4NzFdLFwiZGlzYWxsb3dlZFwiXSxbWzY5ODcyLDY5ODgxXSxcInZhbGlkXCJdLFtbNjk4ODIsNjk4ODddLFwiZGlzYWxsb3dlZFwiXSxbWzY5ODg4LDY5OTQwXSxcInZhbGlkXCJdLFtbNjk5NDEsNjk5NDFdLFwiZGlzYWxsb3dlZFwiXSxbWzY5OTQyLDY5OTUxXSxcInZhbGlkXCJdLFtbNjk5NTIsNjk5NTVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzY5OTU2LDY5OTY3XSxcImRpc2FsbG93ZWRcIl0sW1s2OTk2OCw3MDAwM10sXCJ2YWxpZFwiXSxbWzcwMDA0LDcwMDA1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MDAwNiw3MDAwNl0sXCJ2YWxpZFwiXSxbWzcwMDA3LDcwMDE1XSxcImRpc2FsbG93ZWRcIl0sW1s3MDAxNiw3MDA4NF0sXCJ2YWxpZFwiXSxbWzcwMDg1LDcwMDg4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MDA4OSw3MDA4OV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAwOTAsNzAwOTJdLFwidmFsaWRcIl0sW1s3MDA5Myw3MDA5M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAwOTQsNzAwOTVdLFwiZGlzYWxsb3dlZFwiXSxbWzcwMDk2LDcwMTA1XSxcInZhbGlkXCJdLFtbNzAxMDYsNzAxMDZdLFwidmFsaWRcIl0sW1s3MDEwNyw3MDEwN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAxMDgsNzAxMDhdLFwidmFsaWRcIl0sW1s3MDEwOSw3MDExMV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAxMTIsNzAxMTJdLFwiZGlzYWxsb3dlZFwiXSxbWzcwMTEzLDcwMTMyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MDEzMyw3MDE0M10sXCJkaXNhbGxvd2VkXCJdLFtbNzAxNDQsNzAxNjFdLFwidmFsaWRcIl0sW1s3MDE2Miw3MDE2Ml0sXCJkaXNhbGxvd2VkXCJdLFtbNzAxNjMsNzAxOTldLFwidmFsaWRcIl0sW1s3MDIwMCw3MDIwNV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbNzAyMDYsNzAyNzFdLFwiZGlzYWxsb3dlZFwiXSxbWzcwMjcyLDcwMjc4XSxcInZhbGlkXCJdLFtbNzAyNzksNzAyNzldLFwiZGlzYWxsb3dlZFwiXSxbWzcwMjgwLDcwMjgwXSxcInZhbGlkXCJdLFtbNzAyODEsNzAyODFdLFwiZGlzYWxsb3dlZFwiXSxbWzcwMjgyLDcwMjg1XSxcInZhbGlkXCJdLFtbNzAyODYsNzAyODZdLFwiZGlzYWxsb3dlZFwiXSxbWzcwMjg3LDcwMzAxXSxcInZhbGlkXCJdLFtbNzAzMDIsNzAzMDJdLFwiZGlzYWxsb3dlZFwiXSxbWzcwMzAzLDcwMzEyXSxcInZhbGlkXCJdLFtbNzAzMTMsNzAzMTNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwMzE0LDcwMzE5XSxcImRpc2FsbG93ZWRcIl0sW1s3MDMyMCw3MDM3OF0sXCJ2YWxpZFwiXSxbWzcwMzc5LDcwMzgzXSxcImRpc2FsbG93ZWRcIl0sW1s3MDM4NCw3MDM5M10sXCJ2YWxpZFwiXSxbWzcwMzk0LDcwMzk5XSxcImRpc2FsbG93ZWRcIl0sW1s3MDQwMCw3MDQwMF0sXCJ2YWxpZFwiXSxbWzcwNDAxLDcwNDAzXSxcInZhbGlkXCJdLFtbNzA0MDQsNzA0MDRdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDA1LDcwNDEyXSxcInZhbGlkXCJdLFtbNzA0MTMsNzA0MTRdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDE1LDcwNDE2XSxcInZhbGlkXCJdLFtbNzA0MTcsNzA0MThdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDE5LDcwNDQwXSxcInZhbGlkXCJdLFtbNzA0NDEsNzA0NDFdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDQyLDcwNDQ4XSxcInZhbGlkXCJdLFtbNzA0NDksNzA0NDldLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDUwLDcwNDUxXSxcInZhbGlkXCJdLFtbNzA0NTIsNzA0NTJdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDUzLDcwNDU3XSxcInZhbGlkXCJdLFtbNzA0NTgsNzA0NTldLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDYwLDcwNDY4XSxcInZhbGlkXCJdLFtbNzA0NjksNzA0NzBdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDcxLDcwNDcyXSxcInZhbGlkXCJdLFtbNzA0NzMsNzA0NzRdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDc1LDcwNDc3XSxcInZhbGlkXCJdLFtbNzA0NzgsNzA0NzldLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDgwLDcwNDgwXSxcInZhbGlkXCJdLFtbNzA0ODEsNzA0ODZdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDg3LDcwNDg3XSxcInZhbGlkXCJdLFtbNzA0ODgsNzA0OTJdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNDkzLDcwNDk5XSxcInZhbGlkXCJdLFtbNzA1MDAsNzA1MDFdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNTAyLDcwNTA4XSxcInZhbGlkXCJdLFtbNzA1MDksNzA1MTFdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNTEyLDcwNTE2XSxcInZhbGlkXCJdLFtbNzA1MTcsNzA3ODNdLFwiZGlzYWxsb3dlZFwiXSxbWzcwNzg0LDcwODUzXSxcInZhbGlkXCJdLFtbNzA4NTQsNzA4NTRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcwODU1LDcwODU1XSxcInZhbGlkXCJdLFtbNzA4NTYsNzA4NjNdLFwiZGlzYWxsb3dlZFwiXSxbWzcwODY0LDcwODczXSxcInZhbGlkXCJdLFtbNzA4NzQsNzEwMzldLFwiZGlzYWxsb3dlZFwiXSxbWzcxMDQwLDcxMDkzXSxcInZhbGlkXCJdLFtbNzEwOTQsNzEwOTVdLFwiZGlzYWxsb3dlZFwiXSxbWzcxMDk2LDcxMTA0XSxcInZhbGlkXCJdLFtbNzExMDUsNzExMTNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcxMTE0LDcxMTI3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MTEyOCw3MTEzM10sXCJ2YWxpZFwiXSxbWzcxMTM0LDcxMTY3XSxcImRpc2FsbG93ZWRcIl0sW1s3MTE2OCw3MTIzMl0sXCJ2YWxpZFwiXSxbWzcxMjMzLDcxMjM1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MTIzNiw3MTIzNl0sXCJ2YWxpZFwiXSxbWzcxMjM3LDcxMjQ3XSxcImRpc2FsbG93ZWRcIl0sW1s3MTI0OCw3MTI1N10sXCJ2YWxpZFwiXSxbWzcxMjU4LDcxMjk1XSxcImRpc2FsbG93ZWRcIl0sW1s3MTI5Niw3MTM1MV0sXCJ2YWxpZFwiXSxbWzcxMzUyLDcxMzU5XSxcImRpc2FsbG93ZWRcIl0sW1s3MTM2MCw3MTM2OV0sXCJ2YWxpZFwiXSxbWzcxMzcwLDcxNDIzXSxcImRpc2FsbG93ZWRcIl0sW1s3MTQyNCw3MTQ0OV0sXCJ2YWxpZFwiXSxbWzcxNDUwLDcxNDUyXSxcImRpc2FsbG93ZWRcIl0sW1s3MTQ1Myw3MTQ2N10sXCJ2YWxpZFwiXSxbWzcxNDY4LDcxNDcxXSxcImRpc2FsbG93ZWRcIl0sW1s3MTQ3Miw3MTQ4MV0sXCJ2YWxpZFwiXSxbWzcxNDgyLDcxNDg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3MTQ4OCw3MTgzOV0sXCJkaXNhbGxvd2VkXCJdLFtbNzE4NDAsNzE4NDBdLFwibWFwcGVkXCIsWzcxODcyXV0sW1s3MTg0MSw3MTg0MV0sXCJtYXBwZWRcIixbNzE4NzNdXSxbWzcxODQyLDcxODQyXSxcIm1hcHBlZFwiLFs3MTg3NF1dLFtbNzE4NDMsNzE4NDNdLFwibWFwcGVkXCIsWzcxODc1XV0sW1s3MTg0NCw3MTg0NF0sXCJtYXBwZWRcIixbNzE4NzZdXSxbWzcxODQ1LDcxODQ1XSxcIm1hcHBlZFwiLFs3MTg3N11dLFtbNzE4NDYsNzE4NDZdLFwibWFwcGVkXCIsWzcxODc4XV0sW1s3MTg0Nyw3MTg0N10sXCJtYXBwZWRcIixbNzE4NzldXSxbWzcxODQ4LDcxODQ4XSxcIm1hcHBlZFwiLFs3MTg4MF1dLFtbNzE4NDksNzE4NDldLFwibWFwcGVkXCIsWzcxODgxXV0sW1s3MTg1MCw3MTg1MF0sXCJtYXBwZWRcIixbNzE4ODJdXSxbWzcxODUxLDcxODUxXSxcIm1hcHBlZFwiLFs3MTg4M11dLFtbNzE4NTIsNzE4NTJdLFwibWFwcGVkXCIsWzcxODg0XV0sW1s3MTg1Myw3MTg1M10sXCJtYXBwZWRcIixbNzE4ODVdXSxbWzcxODU0LDcxODU0XSxcIm1hcHBlZFwiLFs3MTg4Nl1dLFtbNzE4NTUsNzE4NTVdLFwibWFwcGVkXCIsWzcxODg3XV0sW1s3MTg1Niw3MTg1Nl0sXCJtYXBwZWRcIixbNzE4ODhdXSxbWzcxODU3LDcxODU3XSxcIm1hcHBlZFwiLFs3MTg4OV1dLFtbNzE4NTgsNzE4NThdLFwibWFwcGVkXCIsWzcxODkwXV0sW1s3MTg1OSw3MTg1OV0sXCJtYXBwZWRcIixbNzE4OTFdXSxbWzcxODYwLDcxODYwXSxcIm1hcHBlZFwiLFs3MTg5Ml1dLFtbNzE4NjEsNzE4NjFdLFwibWFwcGVkXCIsWzcxODkzXV0sW1s3MTg2Miw3MTg2Ml0sXCJtYXBwZWRcIixbNzE4OTRdXSxbWzcxODYzLDcxODYzXSxcIm1hcHBlZFwiLFs3MTg5NV1dLFtbNzE4NjQsNzE4NjRdLFwibWFwcGVkXCIsWzcxODk2XV0sW1s3MTg2NSw3MTg2NV0sXCJtYXBwZWRcIixbNzE4OTddXSxbWzcxODY2LDcxODY2XSxcIm1hcHBlZFwiLFs3MTg5OF1dLFtbNzE4NjcsNzE4NjddLFwibWFwcGVkXCIsWzcxODk5XV0sW1s3MTg2OCw3MTg2OF0sXCJtYXBwZWRcIixbNzE5MDBdXSxbWzcxODY5LDcxODY5XSxcIm1hcHBlZFwiLFs3MTkwMV1dLFtbNzE4NzAsNzE4NzBdLFwibWFwcGVkXCIsWzcxOTAyXV0sW1s3MTg3MSw3MTg3MV0sXCJtYXBwZWRcIixbNzE5MDNdXSxbWzcxODcyLDcxOTEzXSxcInZhbGlkXCJdLFtbNzE5MTQsNzE5MjJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzcxOTIzLDcxOTM0XSxcImRpc2FsbG93ZWRcIl0sW1s3MTkzNSw3MTkzNV0sXCJ2YWxpZFwiXSxbWzcxOTM2LDcyMzgzXSxcImRpc2FsbG93ZWRcIl0sW1s3MjM4NCw3MjQ0MF0sXCJ2YWxpZFwiXSxbWzcyNDQxLDczNzI3XSxcImRpc2FsbG93ZWRcIl0sW1s3MzcyOCw3NDYwNl0sXCJ2YWxpZFwiXSxbWzc0NjA3LDc0NjQ4XSxcInZhbGlkXCJdLFtbNzQ2NDksNzQ2NDldLFwidmFsaWRcIl0sW1s3NDY1MCw3NDc1MV0sXCJkaXNhbGxvd2VkXCJdLFtbNzQ3NTIsNzQ4NTBdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzc0ODUxLDc0ODYyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3NDg2Myw3NDg2M10sXCJkaXNhbGxvd2VkXCJdLFtbNzQ4NjQsNzQ4NjddLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzc0ODY4LDc0ODY4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s3NDg2OSw3NDg3OV0sXCJkaXNhbGxvd2VkXCJdLFtbNzQ4ODAsNzUwNzVdLFwidmFsaWRcIl0sW1s3NTA3Niw3NzgyM10sXCJkaXNhbGxvd2VkXCJdLFtbNzc4MjQsNzg4OTRdLFwidmFsaWRcIl0sW1s3ODg5NSw4Mjk0M10sXCJkaXNhbGxvd2VkXCJdLFtbODI5NDQsODM1MjZdLFwidmFsaWRcIl0sW1s4MzUyNyw5MjE1OV0sXCJkaXNhbGxvd2VkXCJdLFtbOTIxNjAsOTI3MjhdLFwidmFsaWRcIl0sW1s5MjcyOSw5MjczNV0sXCJkaXNhbGxvd2VkXCJdLFtbOTI3MzYsOTI3NjZdLFwidmFsaWRcIl0sW1s5Mjc2Nyw5Mjc2N10sXCJkaXNhbGxvd2VkXCJdLFtbOTI3NjgsOTI3NzddLFwidmFsaWRcIl0sW1s5Mjc3OCw5Mjc4MV0sXCJkaXNhbGxvd2VkXCJdLFtbOTI3ODIsOTI3ODNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzkyNzg0LDkyODc5XSxcImRpc2FsbG93ZWRcIl0sW1s5Mjg4MCw5MjkwOV0sXCJ2YWxpZFwiXSxbWzkyOTEwLDkyOTExXSxcImRpc2FsbG93ZWRcIl0sW1s5MjkxMiw5MjkxNl0sXCJ2YWxpZFwiXSxbWzkyOTE3LDkyOTE3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MjkxOCw5MjkyN10sXCJkaXNhbGxvd2VkXCJdLFtbOTI5MjgsOTI5ODJdLFwidmFsaWRcIl0sW1s5Mjk4Myw5Mjk5MV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTI5OTIsOTI5OTVdLFwidmFsaWRcIl0sW1s5Mjk5Niw5Mjk5N10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbOTI5OTgsOTMwMDddLFwiZGlzYWxsb3dlZFwiXSxbWzkzMDA4LDkzMDE3XSxcInZhbGlkXCJdLFtbOTMwMTgsOTMwMThdLFwiZGlzYWxsb3dlZFwiXSxbWzkzMDE5LDkzMDI1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1s5MzAyNiw5MzAyNl0sXCJkaXNhbGxvd2VkXCJdLFtbOTMwMjcsOTMwNDddLFwidmFsaWRcIl0sW1s5MzA0OCw5MzA1Ml0sXCJkaXNhbGxvd2VkXCJdLFtbOTMwNTMsOTMwNzFdLFwidmFsaWRcIl0sW1s5MzA3Miw5Mzk1MV0sXCJkaXNhbGxvd2VkXCJdLFtbOTM5NTIsOTQwMjBdLFwidmFsaWRcIl0sW1s5NDAyMSw5NDAzMV0sXCJkaXNhbGxvd2VkXCJdLFtbOTQwMzIsOTQwNzhdLFwidmFsaWRcIl0sW1s5NDA3OSw5NDA5NF0sXCJkaXNhbGxvd2VkXCJdLFtbOTQwOTUsOTQxMTFdLFwidmFsaWRcIl0sW1s5NDExMiwxMTA1OTFdLFwiZGlzYWxsb3dlZFwiXSxbWzExMDU5MiwxMTA1OTNdLFwidmFsaWRcIl0sW1sxMTA1OTQsMTEzNjYzXSxcImRpc2FsbG93ZWRcIl0sW1sxMTM2NjQsMTEzNzcwXSxcInZhbGlkXCJdLFtbMTEzNzcxLDExMzc3NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTEzNzc2LDExMzc4OF0sXCJ2YWxpZFwiXSxbWzExMzc4OSwxMTM3OTFdLFwiZGlzYWxsb3dlZFwiXSxbWzExMzc5MiwxMTM4MDBdLFwidmFsaWRcIl0sW1sxMTM4MDEsMTEzODA3XSxcImRpc2FsbG93ZWRcIl0sW1sxMTM4MDgsMTEzODE3XSxcInZhbGlkXCJdLFtbMTEzODE4LDExMzgxOV0sXCJkaXNhbGxvd2VkXCJdLFtbMTEzODIwLDExMzgyMF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTEzODIxLDExMzgyMl0sXCJ2YWxpZFwiXSxbWzExMzgyMywxMTM4MjNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExMzgyNCwxMTM4MjddLFwiaWdub3JlZFwiXSxbWzExMzgyOCwxMTg3ODNdLFwiZGlzYWxsb3dlZFwiXSxbWzExODc4NCwxMTkwMjldLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTAzMCwxMTkwMzldLFwiZGlzYWxsb3dlZFwiXSxbWzExOTA0MCwxMTkwNzhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTA3OSwxMTkwODBdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTA4MSwxMTkwODFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTA4MiwxMTkxMzNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTEzNCwxMTkxMzRdLFwibWFwcGVkXCIsWzExOTEyNywxMTkxNDFdXSxbWzExOTEzNSwxMTkxMzVdLFwibWFwcGVkXCIsWzExOTEyOCwxMTkxNDFdXSxbWzExOTEzNiwxMTkxMzZdLFwibWFwcGVkXCIsWzExOTEyOCwxMTkxNDEsMTE5MTUwXV0sW1sxMTkxMzcsMTE5MTM3XSxcIm1hcHBlZFwiLFsxMTkxMjgsMTE5MTQxLDExOTE1MV1dLFtbMTE5MTM4LDExOTEzOF0sXCJtYXBwZWRcIixbMTE5MTI4LDExOTE0MSwxMTkxNTJdXSxbWzExOTEzOSwxMTkxMzldLFwibWFwcGVkXCIsWzExOTEyOCwxMTkxNDEsMTE5MTUzXV0sW1sxMTkxNDAsMTE5MTQwXSxcIm1hcHBlZFwiLFsxMTkxMjgsMTE5MTQxLDExOTE1NF1dLFtbMTE5MTQxLDExOTE1NF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE5MTU1LDExOTE2Ml0sXCJkaXNhbGxvd2VkXCJdLFtbMTE5MTYzLDExOTIyNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTE5MjI3LDExOTIyN10sXCJtYXBwZWRcIixbMTE5MjI1LDExOTE0MV1dLFtbMTE5MjI4LDExOTIyOF0sXCJtYXBwZWRcIixbMTE5MjI2LDExOTE0MV1dLFtbMTE5MjI5LDExOTIyOV0sXCJtYXBwZWRcIixbMTE5MjI1LDExOTE0MSwxMTkxNTBdXSxbWzExOTIzMCwxMTkyMzBdLFwibWFwcGVkXCIsWzExOTIyNiwxMTkxNDEsMTE5MTUwXV0sW1sxMTkyMzEsMTE5MjMxXSxcIm1hcHBlZFwiLFsxMTkyMjUsMTE5MTQxLDExOTE1MV1dLFtbMTE5MjMyLDExOTIzMl0sXCJtYXBwZWRcIixbMTE5MjI2LDExOTE0MSwxMTkxNTFdXSxbWzExOTIzMywxMTkyNjFdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTI2MiwxMTkyNzJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTI3MywxMTkyOTVdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTI5NiwxMTkzNjVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTM2NiwxMTk1NTFdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTU1MiwxMTk2MzhdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTYzOSwxMTk2NDddLFwiZGlzYWxsb3dlZFwiXSxbWzExOTY0OCwxMTk2NjVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzExOTY2NiwxMTk4MDddLFwiZGlzYWxsb3dlZFwiXSxbWzExOTgwOCwxMTk4MDhdLFwibWFwcGVkXCIsWzk3XV0sW1sxMTk4MDksMTE5ODA5XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTE5ODEwLDExOTgxMF0sXCJtYXBwZWRcIixbOTldXSxbWzExOTgxMSwxMTk4MTFdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTE5ODEyLDExOTgxMl0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMTk4MTMsMTE5ODEzXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzExOTgxNCwxMTk4MTRdLFwibWFwcGVkXCIsWzEwM11dLFtbMTE5ODE1LDExOTgxNV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMTk4MTYsMTE5ODE2XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzExOTgxNywxMTk4MTddLFwibWFwcGVkXCIsWzEwNl1dLFtbMTE5ODE4LDExOTgxOF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMTk4MTksMTE5ODE5XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzExOTgyMCwxMTk4MjBdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTE5ODIxLDExOTgyMV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMTk4MjIsMTE5ODIyXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzExOTgyMywxMTk4MjNdLFwibWFwcGVkXCIsWzExMl1dLFtbMTE5ODI0LDExOTgyNF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMTk4MjUsMTE5ODI1XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzExOTgyNiwxMTk4MjZdLFwibWFwcGVkXCIsWzExNV1dLFtbMTE5ODI3LDExOTgyN10sXCJtYXBwZWRcIixbMTE2XV0sW1sxMTk4MjgsMTE5ODI4XSxcIm1hcHBlZFwiLFsxMTddXSxbWzExOTgyOSwxMTk4MjldLFwibWFwcGVkXCIsWzExOF1dLFtbMTE5ODMwLDExOTgzMF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMTk4MzEsMTE5ODMxXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzExOTgzMiwxMTk4MzJdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTE5ODMzLDExOTgzM10sXCJtYXBwZWRcIixbMTIyXV0sW1sxMTk4MzQsMTE5ODM0XSxcIm1hcHBlZFwiLFs5N11dLFtbMTE5ODM1LDExOTgzNV0sXCJtYXBwZWRcIixbOThdXSxbWzExOTgzNiwxMTk4MzZdLFwibWFwcGVkXCIsWzk5XV0sW1sxMTk4MzcsMTE5ODM3XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzExOTgzOCwxMTk4MzhdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTE5ODM5LDExOTgzOV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMTk4NDAsMTE5ODQwXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzExOTg0MSwxMTk4NDFdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTE5ODQyLDExOTg0Ml0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMTk4NDMsMTE5ODQzXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzExOTg0NCwxMTk4NDRdLFwibWFwcGVkXCIsWzEwN11dLFtbMTE5ODQ1LDExOTg0NV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMTk4NDYsMTE5ODQ2XSxcIm1hcHBlZFwiLFsxMDldXSxbWzExOTg0NywxMTk4NDddLFwibWFwcGVkXCIsWzExMF1dLFtbMTE5ODQ4LDExOTg0OF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMTk4NDksMTE5ODQ5XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzExOTg1MCwxMTk4NTBdLFwibWFwcGVkXCIsWzExM11dLFtbMTE5ODUxLDExOTg1MV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMTk4NTIsMTE5ODUyXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzExOTg1MywxMTk4NTNdLFwibWFwcGVkXCIsWzExNl1dLFtbMTE5ODU0LDExOTg1NF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMTk4NTUsMTE5ODU1XSxcIm1hcHBlZFwiLFsxMThdXSxbWzExOTg1NiwxMTk4NTZdLFwibWFwcGVkXCIsWzExOV1dLFtbMTE5ODU3LDExOTg1N10sXCJtYXBwZWRcIixbMTIwXV0sW1sxMTk4NTgsMTE5ODU4XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzExOTg1OSwxMTk4NTldLFwibWFwcGVkXCIsWzEyMl1dLFtbMTE5ODYwLDExOTg2MF0sXCJtYXBwZWRcIixbOTddXSxbWzExOTg2MSwxMTk4NjFdLFwibWFwcGVkXCIsWzk4XV0sW1sxMTk4NjIsMTE5ODYyXSxcIm1hcHBlZFwiLFs5OV1dLFtbMTE5ODYzLDExOTg2M10sXCJtYXBwZWRcIixbMTAwXV0sW1sxMTk4NjQsMTE5ODY0XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzExOTg2NSwxMTk4NjVdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTE5ODY2LDExOTg2Nl0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMTk4NjcsMTE5ODY3XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzExOTg2OCwxMTk4NjhdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTE5ODY5LDExOTg2OV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMTk4NzAsMTE5ODcwXSxcIm1hcHBlZFwiLFsxMDddXSxbWzExOTg3MSwxMTk4NzFdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTE5ODcyLDExOTg3Ml0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMTk4NzMsMTE5ODczXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzExOTg3NCwxMTk4NzRdLFwibWFwcGVkXCIsWzExMV1dLFtbMTE5ODc1LDExOTg3NV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMTk4NzYsMTE5ODc2XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzExOTg3NywxMTk4NzddLFwibWFwcGVkXCIsWzExNF1dLFtbMTE5ODc4LDExOTg3OF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMTk4NzksMTE5ODc5XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzExOTg4MCwxMTk4ODBdLFwibWFwcGVkXCIsWzExN11dLFtbMTE5ODgxLDExOTg4MV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMTk4ODIsMTE5ODgyXSxcIm1hcHBlZFwiLFsxMTldXSxbWzExOTg4MywxMTk4ODNdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTE5ODg0LDExOTg4NF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMTk4ODUsMTE5ODg1XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzExOTg4NiwxMTk4ODZdLFwibWFwcGVkXCIsWzk3XV0sW1sxMTk4ODcsMTE5ODg3XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTE5ODg4LDExOTg4OF0sXCJtYXBwZWRcIixbOTldXSxbWzExOTg4OSwxMTk4ODldLFwibWFwcGVkXCIsWzEwMF1dLFtbMTE5ODkwLDExOTg5MF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMTk4OTEsMTE5ODkxXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzExOTg5MiwxMTk4OTJdLFwibWFwcGVkXCIsWzEwM11dLFtbMTE5ODkzLDExOTg5M10sXCJkaXNhbGxvd2VkXCJdLFtbMTE5ODk0LDExOTg5NF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMTk4OTUsMTE5ODk1XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzExOTg5NiwxMTk4OTZdLFwibWFwcGVkXCIsWzEwN11dLFtbMTE5ODk3LDExOTg5N10sXCJtYXBwZWRcIixbMTA4XV0sW1sxMTk4OTgsMTE5ODk4XSxcIm1hcHBlZFwiLFsxMDldXSxbWzExOTg5OSwxMTk4OTldLFwibWFwcGVkXCIsWzExMF1dLFtbMTE5OTAwLDExOTkwMF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMTk5MDEsMTE5OTAxXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzExOTkwMiwxMTk5MDJdLFwibWFwcGVkXCIsWzExM11dLFtbMTE5OTAzLDExOTkwM10sXCJtYXBwZWRcIixbMTE0XV0sW1sxMTk5MDQsMTE5OTA0XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzExOTkwNSwxMTk5MDVdLFwibWFwcGVkXCIsWzExNl1dLFtbMTE5OTA2LDExOTkwNl0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMTk5MDcsMTE5OTA3XSxcIm1hcHBlZFwiLFsxMThdXSxbWzExOTkwOCwxMTk5MDhdLFwibWFwcGVkXCIsWzExOV1dLFtbMTE5OTA5LDExOTkwOV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMTk5MTAsMTE5OTEwXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzExOTkxMSwxMTk5MTFdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTE5OTEyLDExOTkxMl0sXCJtYXBwZWRcIixbOTddXSxbWzExOTkxMywxMTk5MTNdLFwibWFwcGVkXCIsWzk4XV0sW1sxMTk5MTQsMTE5OTE0XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTE5OTE1LDExOTkxNV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMTk5MTYsMTE5OTE2XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzExOTkxNywxMTk5MTddLFwibWFwcGVkXCIsWzEwMl1dLFtbMTE5OTE4LDExOTkxOF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMTk5MTksMTE5OTE5XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzExOTkyMCwxMTk5MjBdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTE5OTIxLDExOTkyMV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMTk5MjIsMTE5OTIyXSxcIm1hcHBlZFwiLFsxMDddXSxbWzExOTkyMywxMTk5MjNdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTE5OTI0LDExOTkyNF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMTk5MjUsMTE5OTI1XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzExOTkyNiwxMTk5MjZdLFwibWFwcGVkXCIsWzExMV1dLFtbMTE5OTI3LDExOTkyN10sXCJtYXBwZWRcIixbMTEyXV0sW1sxMTk5MjgsMTE5OTI4XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzExOTkyOSwxMTk5MjldLFwibWFwcGVkXCIsWzExNF1dLFtbMTE5OTMwLDExOTkzMF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMTk5MzEsMTE5OTMxXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzExOTkzMiwxMTk5MzJdLFwibWFwcGVkXCIsWzExN11dLFtbMTE5OTMzLDExOTkzM10sXCJtYXBwZWRcIixbMTE4XV0sW1sxMTk5MzQsMTE5OTM0XSxcIm1hcHBlZFwiLFsxMTldXSxbWzExOTkzNSwxMTk5MzVdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTE5OTM2LDExOTkzNl0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMTk5MzcsMTE5OTM3XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzExOTkzOCwxMTk5MzhdLFwibWFwcGVkXCIsWzk3XV0sW1sxMTk5MzksMTE5OTM5XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTE5OTQwLDExOTk0MF0sXCJtYXBwZWRcIixbOTldXSxbWzExOTk0MSwxMTk5NDFdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTE5OTQyLDExOTk0Ml0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMTk5NDMsMTE5OTQzXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzExOTk0NCwxMTk5NDRdLFwibWFwcGVkXCIsWzEwM11dLFtbMTE5OTQ1LDExOTk0NV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMTk5NDYsMTE5OTQ2XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzExOTk0NywxMTk5NDddLFwibWFwcGVkXCIsWzEwNl1dLFtbMTE5OTQ4LDExOTk0OF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMTk5NDksMTE5OTQ5XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzExOTk1MCwxMTk5NTBdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTE5OTUxLDExOTk1MV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMTk5NTIsMTE5OTUyXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzExOTk1MywxMTk5NTNdLFwibWFwcGVkXCIsWzExMl1dLFtbMTE5OTU0LDExOTk1NF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMTk5NTUsMTE5OTU1XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzExOTk1NiwxMTk5NTZdLFwibWFwcGVkXCIsWzExNV1dLFtbMTE5OTU3LDExOTk1N10sXCJtYXBwZWRcIixbMTE2XV0sW1sxMTk5NTgsMTE5OTU4XSxcIm1hcHBlZFwiLFsxMTddXSxbWzExOTk1OSwxMTk5NTldLFwibWFwcGVkXCIsWzExOF1dLFtbMTE5OTYwLDExOTk2MF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMTk5NjEsMTE5OTYxXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzExOTk2MiwxMTk5NjJdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTE5OTYzLDExOTk2M10sXCJtYXBwZWRcIixbMTIyXV0sW1sxMTk5NjQsMTE5OTY0XSxcIm1hcHBlZFwiLFs5N11dLFtbMTE5OTY1LDExOTk2NV0sXCJkaXNhbGxvd2VkXCJdLFtbMTE5OTY2LDExOTk2Nl0sXCJtYXBwZWRcIixbOTldXSxbWzExOTk2NywxMTk5NjddLFwibWFwcGVkXCIsWzEwMF1dLFtbMTE5OTY4LDExOTk2OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTE5OTcwLDExOTk3MF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMTk5NzEsMTE5OTcyXSxcImRpc2FsbG93ZWRcIl0sW1sxMTk5NzMsMTE5OTczXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzExOTk3NCwxMTk5NzRdLFwibWFwcGVkXCIsWzEwN11dLFtbMTE5OTc1LDExOTk3Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMTE5OTc3LDExOTk3N10sXCJtYXBwZWRcIixbMTEwXV0sW1sxMTk5NzgsMTE5OTc4XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzExOTk3OSwxMTk5NzldLFwibWFwcGVkXCIsWzExMl1dLFtbMTE5OTgwLDExOTk4MF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMTk5ODEsMTE5OTgxXSxcImRpc2FsbG93ZWRcIl0sW1sxMTk5ODIsMTE5OTgyXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzExOTk4MywxMTk5ODNdLFwibWFwcGVkXCIsWzExNl1dLFtbMTE5OTg0LDExOTk4NF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMTk5ODUsMTE5OTg1XSxcIm1hcHBlZFwiLFsxMThdXSxbWzExOTk4NiwxMTk5ODZdLFwibWFwcGVkXCIsWzExOV1dLFtbMTE5OTg3LDExOTk4N10sXCJtYXBwZWRcIixbMTIwXV0sW1sxMTk5ODgsMTE5OTg4XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzExOTk4OSwxMTk5ODldLFwibWFwcGVkXCIsWzEyMl1dLFtbMTE5OTkwLDExOTk5MF0sXCJtYXBwZWRcIixbOTddXSxbWzExOTk5MSwxMTk5OTFdLFwibWFwcGVkXCIsWzk4XV0sW1sxMTk5OTIsMTE5OTkyXSxcIm1hcHBlZFwiLFs5OV1dLFtbMTE5OTkzLDExOTk5M10sXCJtYXBwZWRcIixbMTAwXV0sW1sxMTk5OTQsMTE5OTk0XSxcImRpc2FsbG93ZWRcIl0sW1sxMTk5OTUsMTE5OTk1XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzExOTk5NiwxMTk5OTZdLFwiZGlzYWxsb3dlZFwiXSxbWzExOTk5NywxMTk5OTddLFwibWFwcGVkXCIsWzEwNF1dLFtbMTE5OTk4LDExOTk5OF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMTk5OTksMTE5OTk5XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDAwMCwxMjAwMDBdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMDAxLDEyMDAwMV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAwMDIsMTIwMDAyXSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDAwMywxMjAwMDNdLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMDA0LDEyMDAwNF0sXCJkaXNhbGxvd2VkXCJdLFtbMTIwMDA1LDEyMDAwNV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAwMDYsMTIwMDA2XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDAwNywxMjAwMDddLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMDA4LDEyMDAwOF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAwMDksMTIwMDA5XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDAxMCwxMjAwMTBdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMDExLDEyMDAxMV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAwMTIsMTIwMDEyXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDAxMywxMjAwMTNdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMDE0LDEyMDAxNF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAwMTUsMTIwMDE1XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDAxNiwxMjAwMTZdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAwMTcsMTIwMDE3XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMDE4LDEyMDAxOF0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDAxOSwxMjAwMTldLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMDIwLDEyMDAyMF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAwMjEsMTIwMDIxXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDAyMiwxMjAwMjJdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMDIzLDEyMDAyM10sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjAwMjQsMTIwMDI0XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDAyNSwxMjAwMjVdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMDI2LDEyMDAyNl0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAwMjcsMTIwMDI3XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDAyOCwxMjAwMjhdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMDI5LDEyMDAyOV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAwMzAsMTIwMDMwXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDAzMSwxMjAwMzFdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMDMyLDEyMDAzMl0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAwMzMsMTIwMDMzXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDAzNCwxMjAwMzRdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMDM1LDEyMDAzNV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAwMzYsMTIwMDM2XSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDAzNywxMjAwMzddLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMDM4LDEyMDAzOF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAwMzksMTIwMDM5XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDA0MCwxMjAwNDBdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMDQxLDEyMDA0MV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAwNDIsMTIwMDQyXSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMDQzLDEyMDA0M10sXCJtYXBwZWRcIixbOThdXSxbWzEyMDA0NCwxMjAwNDRdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAwNDUsMTIwMDQ1XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDA0NiwxMjAwNDZdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMDQ3LDEyMDA0N10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAwNDgsMTIwMDQ4XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDA0OSwxMjAwNDldLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMDUwLDEyMDA1MF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAwNTEsMTIwMDUxXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDA1MiwxMjAwNTJdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMDUzLDEyMDA1M10sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAwNTQsMTIwMDU0XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDA1NSwxMjAwNTVdLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMDU2LDEyMDA1Nl0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAwNTcsMTIwMDU3XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDA1OCwxMjAwNThdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMDU5LDEyMDA1OV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAwNjAsMTIwMDYwXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDA2MSwxMjAwNjFdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMDYyLDEyMDA2Ml0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAwNjMsMTIwMDYzXSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDA2NCwxMjAwNjRdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMDY1LDEyMDA2NV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAwNjYsMTIwMDY2XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDA2NywxMjAwNjddLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMDY4LDEyMDA2OF0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDA2OSwxMjAwNjldLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAwNzAsMTIwMDcwXSxcImRpc2FsbG93ZWRcIl0sW1sxMjAwNzEsMTIwMDcxXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDA3MiwxMjAwNzJdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMDczLDEyMDA3M10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAwNzQsMTIwMDc0XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDA3NSwxMjAwNzZdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDA3NywxMjAwNzddLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMDc4LDEyMDA3OF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAwNzksMTIwMDc5XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDA4MCwxMjAwODBdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMDgxLDEyMDA4MV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAwODIsMTIwMDgyXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDA4MywxMjAwODNdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMDg0LDEyMDA4NF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAwODUsMTIwMDg1XSxcImRpc2FsbG93ZWRcIl0sW1sxMjAwODYsMTIwMDg2XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDA4NywxMjAwODddLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMDg4LDEyMDA4OF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAwODksMTIwMDg5XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDA5MCwxMjAwOTBdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMDkxLDEyMDA5MV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAwOTIsMTIwMDkyXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDA5MywxMjAwOTNdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDA5NCwxMjAwOTRdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAwOTUsMTIwMDk1XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMDk2LDEyMDA5Nl0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDA5NywxMjAwOTddLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMDk4LDEyMDA5OF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAwOTksMTIwMDk5XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDEwMCwxMjAxMDBdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMTAxLDEyMDEwMV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjAxMDIsMTIwMTAyXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDEwMywxMjAxMDNdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMTA0LDEyMDEwNF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAxMDUsMTIwMTA1XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDEwNiwxMjAxMDZdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMTA3LDEyMDEwN10sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAxMDgsMTIwMTA4XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDEwOSwxMjAxMDldLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMTEwLDEyMDExMF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAxMTEsMTIwMTExXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDExMiwxMjAxMTJdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMTEzLDEyMDExM10sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAxMTQsMTIwMTE0XSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDExNSwxMjAxMTVdLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMTE2LDEyMDExNl0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAxMTcsMTIwMTE3XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDExOCwxMjAxMThdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMTE5LDEyMDExOV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAxMjAsMTIwMTIwXSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMTIxLDEyMDEyMV0sXCJtYXBwZWRcIixbOThdXSxbWzEyMDEyMiwxMjAxMjJdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDEyMywxMjAxMjNdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMTI0LDEyMDEyNF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAxMjUsMTIwMTI1XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDEyNiwxMjAxMjZdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMTI3LDEyMDEyN10sXCJkaXNhbGxvd2VkXCJdLFtbMTIwMTI4LDEyMDEyOF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAxMjksMTIwMTI5XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDEzMCwxMjAxMzBdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMTMxLDEyMDEzMV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAxMzIsMTIwMTMyXSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDEzMywxMjAxMzNdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDEzNCwxMjAxMzRdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMTM1LDEyMDEzN10sXCJkaXNhbGxvd2VkXCJdLFtbMTIwMTM4LDEyMDEzOF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAxMzksMTIwMTM5XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDE0MCwxMjAxNDBdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMTQxLDEyMDE0MV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAxNDIsMTIwMTQyXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDE0MywxMjAxNDNdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMTQ0LDEyMDE0NF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAxNDUsMTIwMTQ1XSxcImRpc2FsbG93ZWRcIl0sW1sxMjAxNDYsMTIwMTQ2XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMTQ3LDEyMDE0N10sXCJtYXBwZWRcIixbOThdXSxbWzEyMDE0OCwxMjAxNDhdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAxNDksMTIwMTQ5XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDE1MCwxMjAxNTBdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMTUxLDEyMDE1MV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAxNTIsMTIwMTUyXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDE1MywxMjAxNTNdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMTU0LDEyMDE1NF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAxNTUsMTIwMTU1XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDE1NiwxMjAxNTZdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMTU3LDEyMDE1N10sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAxNTgsMTIwMTU4XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDE1OSwxMjAxNTldLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMTYwLDEyMDE2MF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAxNjEsMTIwMTYxXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDE2MiwxMjAxNjJdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMTYzLDEyMDE2M10sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAxNjQsMTIwMTY0XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDE2NSwxMjAxNjVdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMTY2LDEyMDE2Nl0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAxNjcsMTIwMTY3XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDE2OCwxMjAxNjhdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMTY5LDEyMDE2OV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAxNzAsMTIwMTcwXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDE3MSwxMjAxNzFdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMTcyLDEyMDE3Ml0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDE3MywxMjAxNzNdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAxNzQsMTIwMTc0XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMTc1LDEyMDE3NV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAxNzYsMTIwMTc2XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDE3NywxMjAxNzddLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMTc4LDEyMDE3OF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAxNzksMTIwMTc5XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDE4MCwxMjAxODBdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMTgxLDEyMDE4MV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAxODIsMTIwMTgyXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDE4MywxMjAxODNdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMTg0LDEyMDE4NF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAxODUsMTIwMTg1XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDE4NiwxMjAxODZdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMTg3LDEyMDE4N10sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAxODgsMTIwMTg4XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDE4OSwxMjAxODldLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMTkwLDEyMDE5MF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAxOTEsMTIwMTkxXSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDE5MiwxMjAxOTJdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMTkzLDEyMDE5M10sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAxOTQsMTIwMTk0XSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDE5NSwxMjAxOTVdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMTk2LDEyMDE5Nl0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAxOTcsMTIwMTk3XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDE5OCwxMjAxOThdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAxOTksMTIwMTk5XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMjAwLDEyMDIwMF0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDIwMSwxMjAyMDFdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMjAyLDEyMDIwMl0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAyMDMsMTIwMjAzXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDIwNCwxMjAyMDRdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMjA1LDEyMDIwNV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjAyMDYsMTIwMjA2XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDIwNywxMjAyMDddLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMjA4LDEyMDIwOF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAyMDksMTIwMjA5XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDIxMCwxMjAyMTBdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMjExLDEyMDIxMV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAyMTIsMTIwMjEyXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDIxMywxMjAyMTNdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMjE0LDEyMDIxNF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAyMTUsMTIwMjE1XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDIxNiwxMjAyMTZdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMjE3LDEyMDIxN10sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAyMTgsMTIwMjE4XSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDIxOSwxMjAyMTldLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMjIwLDEyMDIyMF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAyMjEsMTIwMjIxXSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDIyMiwxMjAyMjJdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMjIzLDEyMDIyM10sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAyMjQsMTIwMjI0XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMjI1LDEyMDIyNV0sXCJtYXBwZWRcIixbOThdXSxbWzEyMDIyNiwxMjAyMjZdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAyMjcsMTIwMjI3XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDIyOCwxMjAyMjhdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMjI5LDEyMDIyOV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAyMzAsMTIwMjMwXSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDIzMSwxMjAyMzFdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMjMyLDEyMDIzMl0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAyMzMsMTIwMjMzXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDIzNCwxMjAyMzRdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMjM1LDEyMDIzNV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAyMzYsMTIwMjM2XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDIzNywxMjAyMzddLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMjM4LDEyMDIzOF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAyMzksMTIwMjM5XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDI0MCwxMjAyNDBdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMjQxLDEyMDI0MV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAyNDIsMTIwMjQyXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDI0MywxMjAyNDNdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMjQ0LDEyMDI0NF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAyNDUsMTIwMjQ1XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDI0NiwxMjAyNDZdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMjQ3LDEyMDI0N10sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAyNDgsMTIwMjQ4XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDI0OSwxMjAyNDldLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMjUwLDEyMDI1MF0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDI1MSwxMjAyNTFdLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAyNTIsMTIwMjUyXSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMjUzLDEyMDI1M10sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAyNTQsMTIwMjU0XSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDI1NSwxMjAyNTVdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMjU2LDEyMDI1Nl0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAyNTcsMTIwMjU3XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDI1OCwxMjAyNThdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMjU5LDEyMDI1OV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAyNjAsMTIwMjYwXSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDI2MSwxMjAyNjFdLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMjYyLDEyMDI2Ml0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAyNjMsMTIwMjYzXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDI2NCwxMjAyNjRdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMjY1LDEyMDI2NV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAyNjYsMTIwMjY2XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDI2NywxMjAyNjddLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMjY4LDEyMDI2OF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAyNjksMTIwMjY5XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDI3MCwxMjAyNzBdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMjcxLDEyMDI3MV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAyNzIsMTIwMjcyXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDI3MywxMjAyNzNdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMjc0LDEyMDI3NF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAyNzUsMTIwMjc1XSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDI3NiwxMjAyNzZdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAyNzcsMTIwMjc3XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMjc4LDEyMDI3OF0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDI3OSwxMjAyNzldLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMjgwLDEyMDI4MF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAyODEsMTIwMjgxXSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDI4MiwxMjAyODJdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMjgzLDEyMDI4M10sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjAyODQsMTIwMjg0XSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDI4NSwxMjAyODVdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMjg2LDEyMDI4Nl0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAyODcsMTIwMjg3XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDI4OCwxMjAyODhdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMjg5LDEyMDI4OV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAyOTAsMTIwMjkwXSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDI5MSwxMjAyOTFdLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMjkyLDEyMDI5Ml0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAyOTMsMTIwMjkzXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDI5NCwxMjAyOTRdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMjk1LDEyMDI5NV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAyOTYsMTIwMjk2XSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDI5NywxMjAyOTddLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMjk4LDEyMDI5OF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAyOTksMTIwMjk5XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDMwMCwxMjAzMDBdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMzAxLDEyMDMwMV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAzMDIsMTIwMzAyXSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMzAzLDEyMDMwM10sXCJtYXBwZWRcIixbOThdXSxbWzEyMDMwNCwxMjAzMDRdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAzMDUsMTIwMzA1XSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDMwNiwxMjAzMDZdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMzA3LDEyMDMwN10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAzMDgsMTIwMzA4XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDMwOSwxMjAzMDldLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMzEwLDEyMDMxMF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAzMTEsMTIwMzExXSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDMxMiwxMjAzMTJdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMzEzLDEyMDMxM10sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAzMTQsMTIwMzE0XSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDMxNSwxMjAzMTVdLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMzE2LDEyMDMxNl0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAzMTcsMTIwMzE3XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDMxOCwxMjAzMThdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMzE5LDEyMDMxOV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAzMjAsMTIwMzIwXSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDMyMSwxMjAzMjFdLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwMzIyLDEyMDMyMl0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjAzMjMsMTIwMzIzXSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDMyNCwxMjAzMjRdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwMzI1LDEyMDMyNV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjAzMjYsMTIwMzI2XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDMyNywxMjAzMjddLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwMzI4LDEyMDMyOF0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDMyOSwxMjAzMjldLFwibWFwcGVkXCIsWzk4XV0sW1sxMjAzMzAsMTIwMzMwXSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwMzMxLDEyMDMzMV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjAzMzIsMTIwMzMyXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDMzMywxMjAzMzNdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwMzM0LDEyMDMzNF0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjAzMzUsMTIwMzM1XSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDMzNiwxMjAzMzZdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwMzM3LDEyMDMzN10sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjAzMzgsMTIwMzM4XSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDMzOSwxMjAzMzldLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwMzQwLDEyMDM0MF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjAzNDEsMTIwMzQxXSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDM0MiwxMjAzNDJdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwMzQzLDEyMDM0M10sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjAzNDQsMTIwMzQ0XSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDM0NSwxMjAzNDVdLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwMzQ2LDEyMDM0Nl0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjAzNDcsMTIwMzQ3XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDM0OCwxMjAzNDhdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwMzQ5LDEyMDM0OV0sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjAzNTAsMTIwMzUwXSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDM1MSwxMjAzNTFdLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwMzUyLDEyMDM1Ml0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjAzNTMsMTIwMzUzXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDM1NCwxMjAzNTRdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjAzNTUsMTIwMzU1XSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwMzU2LDEyMDM1Nl0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDM1NywxMjAzNTddLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwMzU4LDEyMDM1OF0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjAzNTksMTIwMzU5XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDM2MCwxMjAzNjBdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwMzYxLDEyMDM2MV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjAzNjIsMTIwMzYyXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDM2MywxMjAzNjNdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwMzY0LDEyMDM2NF0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjAzNjUsMTIwMzY1XSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDM2NiwxMjAzNjZdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwMzY3LDEyMDM2N10sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjAzNjgsMTIwMzY4XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDM2OSwxMjAzNjldLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwMzcwLDEyMDM3MF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjAzNzEsMTIwMzcxXSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDM3MiwxMjAzNzJdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwMzczLDEyMDM3M10sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjAzNzQsMTIwMzc0XSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDM3NSwxMjAzNzVdLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwMzc2LDEyMDM3Nl0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjAzNzcsMTIwMzc3XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDM3OCwxMjAzNzhdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwMzc5LDEyMDM3OV0sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjAzODAsMTIwMzgwXSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwMzgxLDEyMDM4MV0sXCJtYXBwZWRcIixbOThdXSxbWzEyMDM4MiwxMjAzODJdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjAzODMsMTIwMzgzXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDM4NCwxMjAzODRdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwMzg1LDEyMDM4NV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjAzODYsMTIwMzg2XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDM4NywxMjAzODddLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwMzg4LDEyMDM4OF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjAzODksMTIwMzg5XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDM5MCwxMjAzOTBdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwMzkxLDEyMDM5MV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjAzOTIsMTIwMzkyXSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDM5MywxMjAzOTNdLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwMzk0LDEyMDM5NF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjAzOTUsMTIwMzk1XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDM5NiwxMjAzOTZdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwMzk3LDEyMDM5N10sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjAzOTgsMTIwMzk4XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDM5OSwxMjAzOTldLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwNDAwLDEyMDQwMF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjA0MDEsMTIwNDAxXSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDQwMiwxMjA0MDJdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwNDAzLDEyMDQwM10sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjA0MDQsMTIwNDA0XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDQwNSwxMjA0MDVdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwNDA2LDEyMDQwNl0sXCJtYXBwZWRcIixbOTddXSxbWzEyMDQwNywxMjA0MDddLFwibWFwcGVkXCIsWzk4XV0sW1sxMjA0MDgsMTIwNDA4XSxcIm1hcHBlZFwiLFs5OV1dLFtbMTIwNDA5LDEyMDQwOV0sXCJtYXBwZWRcIixbMTAwXV0sW1sxMjA0MTAsMTIwNDEwXSxcIm1hcHBlZFwiLFsxMDFdXSxbWzEyMDQxMSwxMjA0MTFdLFwibWFwcGVkXCIsWzEwMl1dLFtbMTIwNDEyLDEyMDQxMl0sXCJtYXBwZWRcIixbMTAzXV0sW1sxMjA0MTMsMTIwNDEzXSxcIm1hcHBlZFwiLFsxMDRdXSxbWzEyMDQxNCwxMjA0MTRdLFwibWFwcGVkXCIsWzEwNV1dLFtbMTIwNDE1LDEyMDQxNV0sXCJtYXBwZWRcIixbMTA2XV0sW1sxMjA0MTYsMTIwNDE2XSxcIm1hcHBlZFwiLFsxMDddXSxbWzEyMDQxNywxMjA0MTddLFwibWFwcGVkXCIsWzEwOF1dLFtbMTIwNDE4LDEyMDQxOF0sXCJtYXBwZWRcIixbMTA5XV0sW1sxMjA0MTksMTIwNDE5XSxcIm1hcHBlZFwiLFsxMTBdXSxbWzEyMDQyMCwxMjA0MjBdLFwibWFwcGVkXCIsWzExMV1dLFtbMTIwNDIxLDEyMDQyMV0sXCJtYXBwZWRcIixbMTEyXV0sW1sxMjA0MjIsMTIwNDIyXSxcIm1hcHBlZFwiLFsxMTNdXSxbWzEyMDQyMywxMjA0MjNdLFwibWFwcGVkXCIsWzExNF1dLFtbMTIwNDI0LDEyMDQyNF0sXCJtYXBwZWRcIixbMTE1XV0sW1sxMjA0MjUsMTIwNDI1XSxcIm1hcHBlZFwiLFsxMTZdXSxbWzEyMDQyNiwxMjA0MjZdLFwibWFwcGVkXCIsWzExN11dLFtbMTIwNDI3LDEyMDQyN10sXCJtYXBwZWRcIixbMTE4XV0sW1sxMjA0MjgsMTIwNDI4XSxcIm1hcHBlZFwiLFsxMTldXSxbWzEyMDQyOSwxMjA0MjldLFwibWFwcGVkXCIsWzEyMF1dLFtbMTIwNDMwLDEyMDQzMF0sXCJtYXBwZWRcIixbMTIxXV0sW1sxMjA0MzEsMTIwNDMxXSxcIm1hcHBlZFwiLFsxMjJdXSxbWzEyMDQzMiwxMjA0MzJdLFwibWFwcGVkXCIsWzk3XV0sW1sxMjA0MzMsMTIwNDMzXSxcIm1hcHBlZFwiLFs5OF1dLFtbMTIwNDM0LDEyMDQzNF0sXCJtYXBwZWRcIixbOTldXSxbWzEyMDQzNSwxMjA0MzVdLFwibWFwcGVkXCIsWzEwMF1dLFtbMTIwNDM2LDEyMDQzNl0sXCJtYXBwZWRcIixbMTAxXV0sW1sxMjA0MzcsMTIwNDM3XSxcIm1hcHBlZFwiLFsxMDJdXSxbWzEyMDQzOCwxMjA0MzhdLFwibWFwcGVkXCIsWzEwM11dLFtbMTIwNDM5LDEyMDQzOV0sXCJtYXBwZWRcIixbMTA0XV0sW1sxMjA0NDAsMTIwNDQwXSxcIm1hcHBlZFwiLFsxMDVdXSxbWzEyMDQ0MSwxMjA0NDFdLFwibWFwcGVkXCIsWzEwNl1dLFtbMTIwNDQyLDEyMDQ0Ml0sXCJtYXBwZWRcIixbMTA3XV0sW1sxMjA0NDMsMTIwNDQzXSxcIm1hcHBlZFwiLFsxMDhdXSxbWzEyMDQ0NCwxMjA0NDRdLFwibWFwcGVkXCIsWzEwOV1dLFtbMTIwNDQ1LDEyMDQ0NV0sXCJtYXBwZWRcIixbMTEwXV0sW1sxMjA0NDYsMTIwNDQ2XSxcIm1hcHBlZFwiLFsxMTFdXSxbWzEyMDQ0NywxMjA0NDddLFwibWFwcGVkXCIsWzExMl1dLFtbMTIwNDQ4LDEyMDQ0OF0sXCJtYXBwZWRcIixbMTEzXV0sW1sxMjA0NDksMTIwNDQ5XSxcIm1hcHBlZFwiLFsxMTRdXSxbWzEyMDQ1MCwxMjA0NTBdLFwibWFwcGVkXCIsWzExNV1dLFtbMTIwNDUxLDEyMDQ1MV0sXCJtYXBwZWRcIixbMTE2XV0sW1sxMjA0NTIsMTIwNDUyXSxcIm1hcHBlZFwiLFsxMTddXSxbWzEyMDQ1MywxMjA0NTNdLFwibWFwcGVkXCIsWzExOF1dLFtbMTIwNDU0LDEyMDQ1NF0sXCJtYXBwZWRcIixbMTE5XV0sW1sxMjA0NTUsMTIwNDU1XSxcIm1hcHBlZFwiLFsxMjBdXSxbWzEyMDQ1NiwxMjA0NTZdLFwibWFwcGVkXCIsWzEyMV1dLFtbMTIwNDU3LDEyMDQ1N10sXCJtYXBwZWRcIixbMTIyXV0sW1sxMjA0NTgsMTIwNDU4XSxcIm1hcHBlZFwiLFs5N11dLFtbMTIwNDU5LDEyMDQ1OV0sXCJtYXBwZWRcIixbOThdXSxbWzEyMDQ2MCwxMjA0NjBdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjA0NjEsMTIwNDYxXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyMDQ2MiwxMjA0NjJdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTIwNDYzLDEyMDQ2M10sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjA0NjQsMTIwNDY0XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyMDQ2NSwxMjA0NjVdLFwibWFwcGVkXCIsWzEwNF1dLFtbMTIwNDY2LDEyMDQ2Nl0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjA0NjcsMTIwNDY3XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyMDQ2OCwxMjA0NjhdLFwibWFwcGVkXCIsWzEwN11dLFtbMTIwNDY5LDEyMDQ2OV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjA0NzAsMTIwNDcwXSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyMDQ3MSwxMjA0NzFdLFwibWFwcGVkXCIsWzExMF1dLFtbMTIwNDcyLDEyMDQ3Ml0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjA0NzMsMTIwNDczXSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyMDQ3NCwxMjA0NzRdLFwibWFwcGVkXCIsWzExM11dLFtbMTIwNDc1LDEyMDQ3NV0sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjA0NzYsMTIwNDc2XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyMDQ3NywxMjA0NzddLFwibWFwcGVkXCIsWzExNl1dLFtbMTIwNDc4LDEyMDQ3OF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjA0NzksMTIwNDc5XSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyMDQ4MCwxMjA0ODBdLFwibWFwcGVkXCIsWzExOV1dLFtbMTIwNDgxLDEyMDQ4MV0sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjA0ODIsMTIwNDgyXSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyMDQ4MywxMjA0ODNdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTIwNDg0LDEyMDQ4NF0sXCJtYXBwZWRcIixbMzA1XV0sW1sxMjA0ODUsMTIwNDg1XSxcIm1hcHBlZFwiLFs1NjddXSxbWzEyMDQ4NiwxMjA0ODddLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDQ4OCwxMjA0ODhdLFwibWFwcGVkXCIsWzk0NV1dLFtbMTIwNDg5LDEyMDQ4OV0sXCJtYXBwZWRcIixbOTQ2XV0sW1sxMjA0OTAsMTIwNDkwXSxcIm1hcHBlZFwiLFs5NDddXSxbWzEyMDQ5MSwxMjA0OTFdLFwibWFwcGVkXCIsWzk0OF1dLFtbMTIwNDkyLDEyMDQ5Ml0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA0OTMsMTIwNDkzXSxcIm1hcHBlZFwiLFs5NTBdXSxbWzEyMDQ5NCwxMjA0OTRdLFwibWFwcGVkXCIsWzk1MV1dLFtbMTIwNDk1LDEyMDQ5NV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA0OTYsMTIwNDk2XSxcIm1hcHBlZFwiLFs5NTNdXSxbWzEyMDQ5NywxMjA0OTddLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNDk4LDEyMDQ5OF0sXCJtYXBwZWRcIixbOTU1XV0sW1sxMjA0OTksMTIwNDk5XSxcIm1hcHBlZFwiLFs5NTZdXSxbWzEyMDUwMCwxMjA1MDBdLFwibWFwcGVkXCIsWzk1N11dLFtbMTIwNTAxLDEyMDUwMV0sXCJtYXBwZWRcIixbOTU4XV0sW1sxMjA1MDIsMTIwNTAyXSxcIm1hcHBlZFwiLFs5NTldXSxbWzEyMDUwMywxMjA1MDNdLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNTA0LDEyMDUwNF0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA1MDUsMTIwNTA1XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDUwNiwxMjA1MDZdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNTA3LDEyMDUwN10sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA1MDgsMTIwNTA4XSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDUwOSwxMjA1MDldLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNTEwLDEyMDUxMF0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA1MTEsMTIwNTExXSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDUxMiwxMjA1MTJdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNTEzLDEyMDUxM10sXCJtYXBwZWRcIixbODcxMV1dLFtbMTIwNTE0LDEyMDUxNF0sXCJtYXBwZWRcIixbOTQ1XV0sW1sxMjA1MTUsMTIwNTE1XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzEyMDUxNiwxMjA1MTZdLFwibWFwcGVkXCIsWzk0N11dLFtbMTIwNTE3LDEyMDUxN10sXCJtYXBwZWRcIixbOTQ4XV0sW1sxMjA1MTgsMTIwNTE4XSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDUxOSwxMjA1MTldLFwibWFwcGVkXCIsWzk1MF1dLFtbMTIwNTIwLDEyMDUyMF0sXCJtYXBwZWRcIixbOTUxXV0sW1sxMjA1MjEsMTIwNTIxXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDUyMiwxMjA1MjJdLFwibWFwcGVkXCIsWzk1M11dLFtbMTIwNTIzLDEyMDUyM10sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA1MjQsMTIwNTI0XSxcIm1hcHBlZFwiLFs5NTVdXSxbWzEyMDUyNSwxMjA1MjVdLFwibWFwcGVkXCIsWzk1Nl1dLFtbMTIwNTI2LDEyMDUyNl0sXCJtYXBwZWRcIixbOTU3XV0sW1sxMjA1MjcsMTIwNTI3XSxcIm1hcHBlZFwiLFs5NThdXSxbWzEyMDUyOCwxMjA1MjhdLFwibWFwcGVkXCIsWzk1OV1dLFtbMTIwNTI5LDEyMDUyOV0sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA1MzAsMTIwNTMwXSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDUzMSwxMjA1MzJdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNTMzLDEyMDUzM10sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA1MzQsMTIwNTM0XSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDUzNSwxMjA1MzVdLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNTM2LDEyMDUzNl0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA1MzcsMTIwNTM3XSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDUzOCwxMjA1MzhdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNTM5LDEyMDUzOV0sXCJtYXBwZWRcIixbODcwNl1dLFtbMTIwNTQwLDEyMDU0MF0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA1NDEsMTIwNTQxXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDU0MiwxMjA1NDJdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNTQzLDEyMDU0M10sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA1NDQsMTIwNTQ0XSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDU0NSwxMjA1NDVdLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNTQ2LDEyMDU0Nl0sXCJtYXBwZWRcIixbOTQ1XV0sW1sxMjA1NDcsMTIwNTQ3XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzEyMDU0OCwxMjA1NDhdLFwibWFwcGVkXCIsWzk0N11dLFtbMTIwNTQ5LDEyMDU0OV0sXCJtYXBwZWRcIixbOTQ4XV0sW1sxMjA1NTAsMTIwNTUwXSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDU1MSwxMjA1NTFdLFwibWFwcGVkXCIsWzk1MF1dLFtbMTIwNTUyLDEyMDU1Ml0sXCJtYXBwZWRcIixbOTUxXV0sW1sxMjA1NTMsMTIwNTUzXSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDU1NCwxMjA1NTRdLFwibWFwcGVkXCIsWzk1M11dLFtbMTIwNTU1LDEyMDU1NV0sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA1NTYsMTIwNTU2XSxcIm1hcHBlZFwiLFs5NTVdXSxbWzEyMDU1NywxMjA1NTddLFwibWFwcGVkXCIsWzk1Nl1dLFtbMTIwNTU4LDEyMDU1OF0sXCJtYXBwZWRcIixbOTU3XV0sW1sxMjA1NTksMTIwNTU5XSxcIm1hcHBlZFwiLFs5NThdXSxbWzEyMDU2MCwxMjA1NjBdLFwibWFwcGVkXCIsWzk1OV1dLFtbMTIwNTYxLDEyMDU2MV0sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA1NjIsMTIwNTYyXSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDU2MywxMjA1NjNdLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNTY0LDEyMDU2NF0sXCJtYXBwZWRcIixbOTYzXV0sW1sxMjA1NjUsMTIwNTY1XSxcIm1hcHBlZFwiLFs5NjRdXSxbWzEyMDU2NiwxMjA1NjZdLFwibWFwcGVkXCIsWzk2NV1dLFtbMTIwNTY3LDEyMDU2N10sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA1NjgsMTIwNTY4XSxcIm1hcHBlZFwiLFs5NjddXSxbWzEyMDU2OSwxMjA1NjldLFwibWFwcGVkXCIsWzk2OF1dLFtbMTIwNTcwLDEyMDU3MF0sXCJtYXBwZWRcIixbOTY5XV0sW1sxMjA1NzEsMTIwNTcxXSxcIm1hcHBlZFwiLFs4NzExXV0sW1sxMjA1NzIsMTIwNTcyXSxcIm1hcHBlZFwiLFs5NDVdXSxbWzEyMDU3MywxMjA1NzNdLFwibWFwcGVkXCIsWzk0Nl1dLFtbMTIwNTc0LDEyMDU3NF0sXCJtYXBwZWRcIixbOTQ3XV0sW1sxMjA1NzUsMTIwNTc1XSxcIm1hcHBlZFwiLFs5NDhdXSxbWzEyMDU3NiwxMjA1NzZdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNTc3LDEyMDU3N10sXCJtYXBwZWRcIixbOTUwXV0sW1sxMjA1NzgsMTIwNTc4XSxcIm1hcHBlZFwiLFs5NTFdXSxbWzEyMDU3OSwxMjA1NzldLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNTgwLDEyMDU4MF0sXCJtYXBwZWRcIixbOTUzXV0sW1sxMjA1ODEsMTIwNTgxXSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDU4MiwxMjA1ODJdLFwibWFwcGVkXCIsWzk1NV1dLFtbMTIwNTgzLDEyMDU4M10sXCJtYXBwZWRcIixbOTU2XV0sW1sxMjA1ODQsMTIwNTg0XSxcIm1hcHBlZFwiLFs5NTddXSxbWzEyMDU4NSwxMjA1ODVdLFwibWFwcGVkXCIsWzk1OF1dLFtbMTIwNTg2LDEyMDU4Nl0sXCJtYXBwZWRcIixbOTU5XV0sW1sxMjA1ODcsMTIwNTg3XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDU4OCwxMjA1ODhdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNTg5LDEyMDU5MF0sXCJtYXBwZWRcIixbOTYzXV0sW1sxMjA1OTEsMTIwNTkxXSxcIm1hcHBlZFwiLFs5NjRdXSxbWzEyMDU5MiwxMjA1OTJdLFwibWFwcGVkXCIsWzk2NV1dLFtbMTIwNTkzLDEyMDU5M10sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA1OTQsMTIwNTk0XSxcIm1hcHBlZFwiLFs5NjddXSxbWzEyMDU5NSwxMjA1OTVdLFwibWFwcGVkXCIsWzk2OF1dLFtbMTIwNTk2LDEyMDU5Nl0sXCJtYXBwZWRcIixbOTY5XV0sW1sxMjA1OTcsMTIwNTk3XSxcIm1hcHBlZFwiLFs4NzA2XV0sW1sxMjA1OTgsMTIwNTk4XSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDU5OSwxMjA1OTldLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNjAwLDEyMDYwMF0sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA2MDEsMTIwNjAxXSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDYwMiwxMjA2MDJdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNjAzLDEyMDYwM10sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA2MDQsMTIwNjA0XSxcIm1hcHBlZFwiLFs5NDVdXSxbWzEyMDYwNSwxMjA2MDVdLFwibWFwcGVkXCIsWzk0Nl1dLFtbMTIwNjA2LDEyMDYwNl0sXCJtYXBwZWRcIixbOTQ3XV0sW1sxMjA2MDcsMTIwNjA3XSxcIm1hcHBlZFwiLFs5NDhdXSxbWzEyMDYwOCwxMjA2MDhdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNjA5LDEyMDYwOV0sXCJtYXBwZWRcIixbOTUwXV0sW1sxMjA2MTAsMTIwNjEwXSxcIm1hcHBlZFwiLFs5NTFdXSxbWzEyMDYxMSwxMjA2MTFdLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNjEyLDEyMDYxMl0sXCJtYXBwZWRcIixbOTUzXV0sW1sxMjA2MTMsMTIwNjEzXSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDYxNCwxMjA2MTRdLFwibWFwcGVkXCIsWzk1NV1dLFtbMTIwNjE1LDEyMDYxNV0sXCJtYXBwZWRcIixbOTU2XV0sW1sxMjA2MTYsMTIwNjE2XSxcIm1hcHBlZFwiLFs5NTddXSxbWzEyMDYxNywxMjA2MTddLFwibWFwcGVkXCIsWzk1OF1dLFtbMTIwNjE4LDEyMDYxOF0sXCJtYXBwZWRcIixbOTU5XV0sW1sxMjA2MTksMTIwNjE5XSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDYyMCwxMjA2MjBdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNjIxLDEyMDYyMV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA2MjIsMTIwNjIyXSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEyMDYyMywxMjA2MjNdLFwibWFwcGVkXCIsWzk2NF1dLFtbMTIwNjI0LDEyMDYyNF0sXCJtYXBwZWRcIixbOTY1XV0sW1sxMjA2MjUsMTIwNjI1XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDYyNiwxMjA2MjZdLFwibWFwcGVkXCIsWzk2N11dLFtbMTIwNjI3LDEyMDYyN10sXCJtYXBwZWRcIixbOTY4XV0sW1sxMjA2MjgsMTIwNjI4XSxcIm1hcHBlZFwiLFs5NjldXSxbWzEyMDYyOSwxMjA2MjldLFwibWFwcGVkXCIsWzg3MTFdXSxbWzEyMDYzMCwxMjA2MzBdLFwibWFwcGVkXCIsWzk0NV1dLFtbMTIwNjMxLDEyMDYzMV0sXCJtYXBwZWRcIixbOTQ2XV0sW1sxMjA2MzIsMTIwNjMyXSxcIm1hcHBlZFwiLFs5NDddXSxbWzEyMDYzMywxMjA2MzNdLFwibWFwcGVkXCIsWzk0OF1dLFtbMTIwNjM0LDEyMDYzNF0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA2MzUsMTIwNjM1XSxcIm1hcHBlZFwiLFs5NTBdXSxbWzEyMDYzNiwxMjA2MzZdLFwibWFwcGVkXCIsWzk1MV1dLFtbMTIwNjM3LDEyMDYzN10sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA2MzgsMTIwNjM4XSxcIm1hcHBlZFwiLFs5NTNdXSxbWzEyMDYzOSwxMjA2MzldLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNjQwLDEyMDY0MF0sXCJtYXBwZWRcIixbOTU1XV0sW1sxMjA2NDEsMTIwNjQxXSxcIm1hcHBlZFwiLFs5NTZdXSxbWzEyMDY0MiwxMjA2NDJdLFwibWFwcGVkXCIsWzk1N11dLFtbMTIwNjQzLDEyMDY0M10sXCJtYXBwZWRcIixbOTU4XV0sW1sxMjA2NDQsMTIwNjQ0XSxcIm1hcHBlZFwiLFs5NTldXSxbWzEyMDY0NSwxMjA2NDVdLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNjQ2LDEyMDY0Nl0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA2NDcsMTIwNjQ4XSxcIm1hcHBlZFwiLFs5NjNdXSxbWzEyMDY0OSwxMjA2NDldLFwibWFwcGVkXCIsWzk2NF1dLFtbMTIwNjUwLDEyMDY1MF0sXCJtYXBwZWRcIixbOTY1XV0sW1sxMjA2NTEsMTIwNjUxXSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDY1MiwxMjA2NTJdLFwibWFwcGVkXCIsWzk2N11dLFtbMTIwNjUzLDEyMDY1M10sXCJtYXBwZWRcIixbOTY4XV0sW1sxMjA2NTQsMTIwNjU0XSxcIm1hcHBlZFwiLFs5NjldXSxbWzEyMDY1NSwxMjA2NTVdLFwibWFwcGVkXCIsWzg3MDZdXSxbWzEyMDY1NiwxMjA2NTZdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNjU3LDEyMDY1N10sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA2NTgsMTIwNjU4XSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDY1OSwxMjA2NTldLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNjYwLDEyMDY2MF0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA2NjEsMTIwNjYxXSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDY2MiwxMjA2NjJdLFwibWFwcGVkXCIsWzk0NV1dLFtbMTIwNjYzLDEyMDY2M10sXCJtYXBwZWRcIixbOTQ2XV0sW1sxMjA2NjQsMTIwNjY0XSxcIm1hcHBlZFwiLFs5NDddXSxbWzEyMDY2NSwxMjA2NjVdLFwibWFwcGVkXCIsWzk0OF1dLFtbMTIwNjY2LDEyMDY2Nl0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA2NjcsMTIwNjY3XSxcIm1hcHBlZFwiLFs5NTBdXSxbWzEyMDY2OCwxMjA2NjhdLFwibWFwcGVkXCIsWzk1MV1dLFtbMTIwNjY5LDEyMDY2OV0sXCJtYXBwZWRcIixbOTUyXV0sW1sxMjA2NzAsMTIwNjcwXSxcIm1hcHBlZFwiLFs5NTNdXSxbWzEyMDY3MSwxMjA2NzFdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNjcyLDEyMDY3Ml0sXCJtYXBwZWRcIixbOTU1XV0sW1sxMjA2NzMsMTIwNjczXSxcIm1hcHBlZFwiLFs5NTZdXSxbWzEyMDY3NCwxMjA2NzRdLFwibWFwcGVkXCIsWzk1N11dLFtbMTIwNjc1LDEyMDY3NV0sXCJtYXBwZWRcIixbOTU4XV0sW1sxMjA2NzYsMTIwNjc2XSxcIm1hcHBlZFwiLFs5NTldXSxbWzEyMDY3NywxMjA2NzddLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNjc4LDEyMDY3OF0sXCJtYXBwZWRcIixbOTYxXV0sW1sxMjA2NzksMTIwNjc5XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDY4MCwxMjA2ODBdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNjgxLDEyMDY4MV0sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA2ODIsMTIwNjgyXSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDY4MywxMjA2ODNdLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNjg0LDEyMDY4NF0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA2ODUsMTIwNjg1XSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDY4NiwxMjA2ODZdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNjg3LDEyMDY4N10sXCJtYXBwZWRcIixbODcxMV1dLFtbMTIwNjg4LDEyMDY4OF0sXCJtYXBwZWRcIixbOTQ1XV0sW1sxMjA2ODksMTIwNjg5XSxcIm1hcHBlZFwiLFs5NDZdXSxbWzEyMDY5MCwxMjA2OTBdLFwibWFwcGVkXCIsWzk0N11dLFtbMTIwNjkxLDEyMDY5MV0sXCJtYXBwZWRcIixbOTQ4XV0sW1sxMjA2OTIsMTIwNjkyXSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDY5MywxMjA2OTNdLFwibWFwcGVkXCIsWzk1MF1dLFtbMTIwNjk0LDEyMDY5NF0sXCJtYXBwZWRcIixbOTUxXV0sW1sxMjA2OTUsMTIwNjk1XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDY5NiwxMjA2OTZdLFwibWFwcGVkXCIsWzk1M11dLFtbMTIwNjk3LDEyMDY5N10sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA2OTgsMTIwNjk4XSxcIm1hcHBlZFwiLFs5NTVdXSxbWzEyMDY5OSwxMjA2OTldLFwibWFwcGVkXCIsWzk1Nl1dLFtbMTIwNzAwLDEyMDcwMF0sXCJtYXBwZWRcIixbOTU3XV0sW1sxMjA3MDEsMTIwNzAxXSxcIm1hcHBlZFwiLFs5NThdXSxbWzEyMDcwMiwxMjA3MDJdLFwibWFwcGVkXCIsWzk1OV1dLFtbMTIwNzAzLDEyMDcwM10sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA3MDQsMTIwNzA0XSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDcwNSwxMjA3MDZdLFwibWFwcGVkXCIsWzk2M11dLFtbMTIwNzA3LDEyMDcwN10sXCJtYXBwZWRcIixbOTY0XV0sW1sxMjA3MDgsMTIwNzA4XSxcIm1hcHBlZFwiLFs5NjVdXSxbWzEyMDcwOSwxMjA3MDldLFwibWFwcGVkXCIsWzk2Nl1dLFtbMTIwNzEwLDEyMDcxMF0sXCJtYXBwZWRcIixbOTY3XV0sW1sxMjA3MTEsMTIwNzExXSxcIm1hcHBlZFwiLFs5NjhdXSxbWzEyMDcxMiwxMjA3MTJdLFwibWFwcGVkXCIsWzk2OV1dLFtbMTIwNzEzLDEyMDcxM10sXCJtYXBwZWRcIixbODcwNl1dLFtbMTIwNzE0LDEyMDcxNF0sXCJtYXBwZWRcIixbOTQ5XV0sW1sxMjA3MTUsMTIwNzE1XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDcxNiwxMjA3MTZdLFwibWFwcGVkXCIsWzk1NF1dLFtbMTIwNzE3LDEyMDcxN10sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA3MTgsMTIwNzE4XSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDcxOSwxMjA3MTldLFwibWFwcGVkXCIsWzk2MF1dLFtbMTIwNzIwLDEyMDcyMF0sXCJtYXBwZWRcIixbOTQ1XV0sW1sxMjA3MjEsMTIwNzIxXSxcIm1hcHBlZFwiLFs5NDZdXSxbWzEyMDcyMiwxMjA3MjJdLFwibWFwcGVkXCIsWzk0N11dLFtbMTIwNzIzLDEyMDcyM10sXCJtYXBwZWRcIixbOTQ4XV0sW1sxMjA3MjQsMTIwNzI0XSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDcyNSwxMjA3MjVdLFwibWFwcGVkXCIsWzk1MF1dLFtbMTIwNzI2LDEyMDcyNl0sXCJtYXBwZWRcIixbOTUxXV0sW1sxMjA3MjcsMTIwNzI3XSxcIm1hcHBlZFwiLFs5NTJdXSxbWzEyMDcyOCwxMjA3MjhdLFwibWFwcGVkXCIsWzk1M11dLFtbMTIwNzI5LDEyMDcyOV0sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA3MzAsMTIwNzMwXSxcIm1hcHBlZFwiLFs5NTVdXSxbWzEyMDczMSwxMjA3MzFdLFwibWFwcGVkXCIsWzk1Nl1dLFtbMTIwNzMyLDEyMDczMl0sXCJtYXBwZWRcIixbOTU3XV0sW1sxMjA3MzMsMTIwNzMzXSxcIm1hcHBlZFwiLFs5NThdXSxbWzEyMDczNCwxMjA3MzRdLFwibWFwcGVkXCIsWzk1OV1dLFtbMTIwNzM1LDEyMDczNV0sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA3MzYsMTIwNzM2XSxcIm1hcHBlZFwiLFs5NjFdXSxbWzEyMDczNywxMjA3MzddLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNzM4LDEyMDczOF0sXCJtYXBwZWRcIixbOTYzXV0sW1sxMjA3MzksMTIwNzM5XSxcIm1hcHBlZFwiLFs5NjRdXSxbWzEyMDc0MCwxMjA3NDBdLFwibWFwcGVkXCIsWzk2NV1dLFtbMTIwNzQxLDEyMDc0MV0sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA3NDIsMTIwNzQyXSxcIm1hcHBlZFwiLFs5NjddXSxbWzEyMDc0MywxMjA3NDNdLFwibWFwcGVkXCIsWzk2OF1dLFtbMTIwNzQ0LDEyMDc0NF0sXCJtYXBwZWRcIixbOTY5XV0sW1sxMjA3NDUsMTIwNzQ1XSxcIm1hcHBlZFwiLFs4NzExXV0sW1sxMjA3NDYsMTIwNzQ2XSxcIm1hcHBlZFwiLFs5NDVdXSxbWzEyMDc0NywxMjA3NDddLFwibWFwcGVkXCIsWzk0Nl1dLFtbMTIwNzQ4LDEyMDc0OF0sXCJtYXBwZWRcIixbOTQ3XV0sW1sxMjA3NDksMTIwNzQ5XSxcIm1hcHBlZFwiLFs5NDhdXSxbWzEyMDc1MCwxMjA3NTBdLFwibWFwcGVkXCIsWzk0OV1dLFtbMTIwNzUxLDEyMDc1MV0sXCJtYXBwZWRcIixbOTUwXV0sW1sxMjA3NTIsMTIwNzUyXSxcIm1hcHBlZFwiLFs5NTFdXSxbWzEyMDc1MywxMjA3NTNdLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNzU0LDEyMDc1NF0sXCJtYXBwZWRcIixbOTUzXV0sW1sxMjA3NTUsMTIwNzU1XSxcIm1hcHBlZFwiLFs5NTRdXSxbWzEyMDc1NiwxMjA3NTZdLFwibWFwcGVkXCIsWzk1NV1dLFtbMTIwNzU3LDEyMDc1N10sXCJtYXBwZWRcIixbOTU2XV0sW1sxMjA3NTgsMTIwNzU4XSxcIm1hcHBlZFwiLFs5NTddXSxbWzEyMDc1OSwxMjA3NTldLFwibWFwcGVkXCIsWzk1OF1dLFtbMTIwNzYwLDEyMDc2MF0sXCJtYXBwZWRcIixbOTU5XV0sW1sxMjA3NjEsMTIwNzYxXSxcIm1hcHBlZFwiLFs5NjBdXSxbWzEyMDc2MiwxMjA3NjJdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNzYzLDEyMDc2NF0sXCJtYXBwZWRcIixbOTYzXV0sW1sxMjA3NjUsMTIwNzY1XSxcIm1hcHBlZFwiLFs5NjRdXSxbWzEyMDc2NiwxMjA3NjZdLFwibWFwcGVkXCIsWzk2NV1dLFtbMTIwNzY3LDEyMDc2N10sXCJtYXBwZWRcIixbOTY2XV0sW1sxMjA3NjgsMTIwNzY4XSxcIm1hcHBlZFwiLFs5NjddXSxbWzEyMDc2OSwxMjA3NjldLFwibWFwcGVkXCIsWzk2OF1dLFtbMTIwNzcwLDEyMDc3MF0sXCJtYXBwZWRcIixbOTY5XV0sW1sxMjA3NzEsMTIwNzcxXSxcIm1hcHBlZFwiLFs4NzA2XV0sW1sxMjA3NzIsMTIwNzcyXSxcIm1hcHBlZFwiLFs5NDldXSxbWzEyMDc3MywxMjA3NzNdLFwibWFwcGVkXCIsWzk1Ml1dLFtbMTIwNzc0LDEyMDc3NF0sXCJtYXBwZWRcIixbOTU0XV0sW1sxMjA3NzUsMTIwNzc1XSxcIm1hcHBlZFwiLFs5NjZdXSxbWzEyMDc3NiwxMjA3NzZdLFwibWFwcGVkXCIsWzk2MV1dLFtbMTIwNzc3LDEyMDc3N10sXCJtYXBwZWRcIixbOTYwXV0sW1sxMjA3NzgsMTIwNzc5XSxcIm1hcHBlZFwiLFs5ODldXSxbWzEyMDc4MCwxMjA3ODFdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMDc4MiwxMjA3ODJdLFwibWFwcGVkXCIsWzQ4XV0sW1sxMjA3ODMsMTIwNzgzXSxcIm1hcHBlZFwiLFs0OV1dLFtbMTIwNzg0LDEyMDc4NF0sXCJtYXBwZWRcIixbNTBdXSxbWzEyMDc4NSwxMjA3ODVdLFwibWFwcGVkXCIsWzUxXV0sW1sxMjA3ODYsMTIwNzg2XSxcIm1hcHBlZFwiLFs1Ml1dLFtbMTIwNzg3LDEyMDc4N10sXCJtYXBwZWRcIixbNTNdXSxbWzEyMDc4OCwxMjA3ODhdLFwibWFwcGVkXCIsWzU0XV0sW1sxMjA3ODksMTIwNzg5XSxcIm1hcHBlZFwiLFs1NV1dLFtbMTIwNzkwLDEyMDc5MF0sXCJtYXBwZWRcIixbNTZdXSxbWzEyMDc5MSwxMjA3OTFdLFwibWFwcGVkXCIsWzU3XV0sW1sxMjA3OTIsMTIwNzkyXSxcIm1hcHBlZFwiLFs0OF1dLFtbMTIwNzkzLDEyMDc5M10sXCJtYXBwZWRcIixbNDldXSxbWzEyMDc5NCwxMjA3OTRdLFwibWFwcGVkXCIsWzUwXV0sW1sxMjA3OTUsMTIwNzk1XSxcIm1hcHBlZFwiLFs1MV1dLFtbMTIwNzk2LDEyMDc5Nl0sXCJtYXBwZWRcIixbNTJdXSxbWzEyMDc5NywxMjA3OTddLFwibWFwcGVkXCIsWzUzXV0sW1sxMjA3OTgsMTIwNzk4XSxcIm1hcHBlZFwiLFs1NF1dLFtbMTIwNzk5LDEyMDc5OV0sXCJtYXBwZWRcIixbNTVdXSxbWzEyMDgwMCwxMjA4MDBdLFwibWFwcGVkXCIsWzU2XV0sW1sxMjA4MDEsMTIwODAxXSxcIm1hcHBlZFwiLFs1N11dLFtbMTIwODAyLDEyMDgwMl0sXCJtYXBwZWRcIixbNDhdXSxbWzEyMDgwMywxMjA4MDNdLFwibWFwcGVkXCIsWzQ5XV0sW1sxMjA4MDQsMTIwODA0XSxcIm1hcHBlZFwiLFs1MF1dLFtbMTIwODA1LDEyMDgwNV0sXCJtYXBwZWRcIixbNTFdXSxbWzEyMDgwNiwxMjA4MDZdLFwibWFwcGVkXCIsWzUyXV0sW1sxMjA4MDcsMTIwODA3XSxcIm1hcHBlZFwiLFs1M11dLFtbMTIwODA4LDEyMDgwOF0sXCJtYXBwZWRcIixbNTRdXSxbWzEyMDgwOSwxMjA4MDldLFwibWFwcGVkXCIsWzU1XV0sW1sxMjA4MTAsMTIwODEwXSxcIm1hcHBlZFwiLFs1Nl1dLFtbMTIwODExLDEyMDgxMV0sXCJtYXBwZWRcIixbNTddXSxbWzEyMDgxMiwxMjA4MTJdLFwibWFwcGVkXCIsWzQ4XV0sW1sxMjA4MTMsMTIwODEzXSxcIm1hcHBlZFwiLFs0OV1dLFtbMTIwODE0LDEyMDgxNF0sXCJtYXBwZWRcIixbNTBdXSxbWzEyMDgxNSwxMjA4MTVdLFwibWFwcGVkXCIsWzUxXV0sW1sxMjA4MTYsMTIwODE2XSxcIm1hcHBlZFwiLFs1Ml1dLFtbMTIwODE3LDEyMDgxN10sXCJtYXBwZWRcIixbNTNdXSxbWzEyMDgxOCwxMjA4MThdLFwibWFwcGVkXCIsWzU0XV0sW1sxMjA4MTksMTIwODE5XSxcIm1hcHBlZFwiLFs1NV1dLFtbMTIwODIwLDEyMDgyMF0sXCJtYXBwZWRcIixbNTZdXSxbWzEyMDgyMSwxMjA4MjFdLFwibWFwcGVkXCIsWzU3XV0sW1sxMjA4MjIsMTIwODIyXSxcIm1hcHBlZFwiLFs0OF1dLFtbMTIwODIzLDEyMDgyM10sXCJtYXBwZWRcIixbNDldXSxbWzEyMDgyNCwxMjA4MjRdLFwibWFwcGVkXCIsWzUwXV0sW1sxMjA4MjUsMTIwODI1XSxcIm1hcHBlZFwiLFs1MV1dLFtbMTIwODI2LDEyMDgyNl0sXCJtYXBwZWRcIixbNTJdXSxbWzEyMDgyNywxMjA4MjddLFwibWFwcGVkXCIsWzUzXV0sW1sxMjA4MjgsMTIwODI4XSxcIm1hcHBlZFwiLFs1NF1dLFtbMTIwODI5LDEyMDgyOV0sXCJtYXBwZWRcIixbNTVdXSxbWzEyMDgzMCwxMjA4MzBdLFwibWFwcGVkXCIsWzU2XV0sW1sxMjA4MzEsMTIwODMxXSxcIm1hcHBlZFwiLFs1N11dLFtbMTIwODMyLDEyMTM0M10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTIxMzQ0LDEyMTM5OF0sXCJ2YWxpZFwiXSxbWzEyMTM5OSwxMjE0MDJdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMTQwMywxMjE0NTJdLFwidmFsaWRcIl0sW1sxMjE0NTMsMTIxNDYwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjE0NjEsMTIxNDYxXSxcInZhbGlkXCJdLFtbMTIxNDYyLDEyMTQ3NV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTIxNDc2LDEyMTQ3Nl0sXCJ2YWxpZFwiXSxbWzEyMTQ3NywxMjE0ODNdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyMTQ4NCwxMjE0OThdLFwiZGlzYWxsb3dlZFwiXSxbWzEyMTQ5OSwxMjE1MDNdLFwidmFsaWRcIl0sW1sxMjE1MDQsMTIxNTA0XSxcImRpc2FsbG93ZWRcIl0sW1sxMjE1MDUsMTIxNTE5XSxcInZhbGlkXCJdLFtbMTIxNTIwLDEyNDkyN10sXCJkaXNhbGxvd2VkXCJdLFtbMTI0OTI4LDEyNTEyNF0sXCJ2YWxpZFwiXSxbWzEyNTEyNSwxMjUxMjZdLFwiZGlzYWxsb3dlZFwiXSxbWzEyNTEyNywxMjUxMzVdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNTEzNiwxMjUxNDJdLFwidmFsaWRcIl0sW1sxMjUxNDMsMTI2NDYzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY0NjQsMTI2NDY0XSxcIm1hcHBlZFwiLFsxNTc1XV0sW1sxMjY0NjUsMTI2NDY1XSxcIm1hcHBlZFwiLFsxNTc2XV0sW1sxMjY0NjYsMTI2NDY2XSxcIm1hcHBlZFwiLFsxNTgwXV0sW1sxMjY0NjcsMTI2NDY3XSxcIm1hcHBlZFwiLFsxNTgzXV0sW1sxMjY0NjgsMTI2NDY4XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY0NjksMTI2NDY5XSxcIm1hcHBlZFwiLFsxNjA4XV0sW1sxMjY0NzAsMTI2NDcwXSxcIm1hcHBlZFwiLFsxNTg2XV0sW1sxMjY0NzEsMTI2NDcxXSxcIm1hcHBlZFwiLFsxNTgxXV0sW1sxMjY0NzIsMTI2NDcyXSxcIm1hcHBlZFwiLFsxNTkxXV0sW1sxMjY0NzMsMTI2NDczXSxcIm1hcHBlZFwiLFsxNjEwXV0sW1sxMjY0NzQsMTI2NDc0XSxcIm1hcHBlZFwiLFsxNjAzXV0sW1sxMjY0NzUsMTI2NDc1XSxcIm1hcHBlZFwiLFsxNjA0XV0sW1sxMjY0NzYsMTI2NDc2XSxcIm1hcHBlZFwiLFsxNjA1XV0sW1sxMjY0NzcsMTI2NDc3XSxcIm1hcHBlZFwiLFsxNjA2XV0sW1sxMjY0NzgsMTI2NDc4XSxcIm1hcHBlZFwiLFsxNTg3XV0sW1sxMjY0NzksMTI2NDc5XSxcIm1hcHBlZFwiLFsxNTkzXV0sW1sxMjY0ODAsMTI2NDgwXSxcIm1hcHBlZFwiLFsxNjAxXV0sW1sxMjY0ODEsMTI2NDgxXSxcIm1hcHBlZFwiLFsxNTg5XV0sW1sxMjY0ODIsMTI2NDgyXSxcIm1hcHBlZFwiLFsxNjAyXV0sW1sxMjY0ODMsMTI2NDgzXSxcIm1hcHBlZFwiLFsxNTg1XV0sW1sxMjY0ODQsMTI2NDg0XSxcIm1hcHBlZFwiLFsxNTg4XV0sW1sxMjY0ODUsMTI2NDg1XSxcIm1hcHBlZFwiLFsxNTc4XV0sW1sxMjY0ODYsMTI2NDg2XSxcIm1hcHBlZFwiLFsxNTc5XV0sW1sxMjY0ODcsMTI2NDg3XSxcIm1hcHBlZFwiLFsxNTgyXV0sW1sxMjY0ODgsMTI2NDg4XSxcIm1hcHBlZFwiLFsxNTg0XV0sW1sxMjY0ODksMTI2NDg5XSxcIm1hcHBlZFwiLFsxNTkwXV0sW1sxMjY0OTAsMTI2NDkwXSxcIm1hcHBlZFwiLFsxNTkyXV0sW1sxMjY0OTEsMTI2NDkxXSxcIm1hcHBlZFwiLFsxNTk0XV0sW1sxMjY0OTIsMTI2NDkyXSxcIm1hcHBlZFwiLFsxNjQ2XV0sW1sxMjY0OTMsMTI2NDkzXSxcIm1hcHBlZFwiLFsxNzIyXV0sW1sxMjY0OTQsMTI2NDk0XSxcIm1hcHBlZFwiLFsxNjk3XV0sW1sxMjY0OTUsMTI2NDk1XSxcIm1hcHBlZFwiLFsxNjQ3XV0sW1sxMjY0OTYsMTI2NDk2XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY0OTcsMTI2NDk3XSxcIm1hcHBlZFwiLFsxNTc2XV0sW1sxMjY0OTgsMTI2NDk4XSxcIm1hcHBlZFwiLFsxNTgwXV0sW1sxMjY0OTksMTI2NDk5XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1MDAsMTI2NTAwXSxcIm1hcHBlZFwiLFsxNjA3XV0sW1sxMjY1MDEsMTI2NTAyXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1MDMsMTI2NTAzXSxcIm1hcHBlZFwiLFsxNTgxXV0sW1sxMjY1MDQsMTI2NTA0XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1MDUsMTI2NTA1XSxcIm1hcHBlZFwiLFsxNjEwXV0sW1sxMjY1MDYsMTI2NTA2XSxcIm1hcHBlZFwiLFsxNjAzXV0sW1sxMjY1MDcsMTI2NTA3XSxcIm1hcHBlZFwiLFsxNjA0XV0sW1sxMjY1MDgsMTI2NTA4XSxcIm1hcHBlZFwiLFsxNjA1XV0sW1sxMjY1MDksMTI2NTA5XSxcIm1hcHBlZFwiLFsxNjA2XV0sW1sxMjY1MTAsMTI2NTEwXSxcIm1hcHBlZFwiLFsxNTg3XV0sW1sxMjY1MTEsMTI2NTExXSxcIm1hcHBlZFwiLFsxNTkzXV0sW1sxMjY1MTIsMTI2NTEyXSxcIm1hcHBlZFwiLFsxNjAxXV0sW1sxMjY1MTMsMTI2NTEzXSxcIm1hcHBlZFwiLFsxNTg5XV0sW1sxMjY1MTQsMTI2NTE0XSxcIm1hcHBlZFwiLFsxNjAyXV0sW1sxMjY1MTUsMTI2NTE1XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1MTYsMTI2NTE2XSxcIm1hcHBlZFwiLFsxNTg4XV0sW1sxMjY1MTcsMTI2NTE3XSxcIm1hcHBlZFwiLFsxNTc4XV0sW1sxMjY1MTgsMTI2NTE4XSxcIm1hcHBlZFwiLFsxNTc5XV0sW1sxMjY1MTksMTI2NTE5XSxcIm1hcHBlZFwiLFsxNTgyXV0sW1sxMjY1MjAsMTI2NTIwXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1MjEsMTI2NTIxXSxcIm1hcHBlZFwiLFsxNTkwXV0sW1sxMjY1MjIsMTI2NTIyXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1MjMsMTI2NTIzXSxcIm1hcHBlZFwiLFsxNTk0XV0sW1sxMjY1MjQsMTI2NTI5XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1MzAsMTI2NTMwXSxcIm1hcHBlZFwiLFsxNTgwXV0sW1sxMjY1MzEsMTI2NTM0XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1MzUsMTI2NTM1XSxcIm1hcHBlZFwiLFsxNTgxXV0sW1sxMjY1MzYsMTI2NTM2XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1MzcsMTI2NTM3XSxcIm1hcHBlZFwiLFsxNjEwXV0sW1sxMjY1MzgsMTI2NTM4XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1MzksMTI2NTM5XSxcIm1hcHBlZFwiLFsxNjA0XV0sW1sxMjY1NDAsMTI2NTQwXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NDEsMTI2NTQxXSxcIm1hcHBlZFwiLFsxNjA2XV0sW1sxMjY1NDIsMTI2NTQyXSxcIm1hcHBlZFwiLFsxNTg3XV0sW1sxMjY1NDMsMTI2NTQzXSxcIm1hcHBlZFwiLFsxNTkzXV0sW1sxMjY1NDQsMTI2NTQ0XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NDUsMTI2NTQ1XSxcIm1hcHBlZFwiLFsxNTg5XV0sW1sxMjY1NDYsMTI2NTQ2XSxcIm1hcHBlZFwiLFsxNjAyXV0sW1sxMjY1NDcsMTI2NTQ3XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NDgsMTI2NTQ4XSxcIm1hcHBlZFwiLFsxNTg4XV0sW1sxMjY1NDksMTI2NTUwXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NTEsMTI2NTUxXSxcIm1hcHBlZFwiLFsxNTgyXV0sW1sxMjY1NTIsMTI2NTUyXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NTMsMTI2NTUzXSxcIm1hcHBlZFwiLFsxNTkwXV0sW1sxMjY1NTQsMTI2NTU0XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NTUsMTI2NTU1XSxcIm1hcHBlZFwiLFsxNTk0XV0sW1sxMjY1NTYsMTI2NTU2XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NTcsMTI2NTU3XSxcIm1hcHBlZFwiLFsxNzIyXV0sW1sxMjY1NTgsMTI2NTU4XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NTksMTI2NTU5XSxcIm1hcHBlZFwiLFsxNjQ3XV0sW1sxMjY1NjAsMTI2NTYwXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NjEsMTI2NTYxXSxcIm1hcHBlZFwiLFsxNTc2XV0sW1sxMjY1NjIsMTI2NTYyXSxcIm1hcHBlZFwiLFsxNTgwXV0sW1sxMjY1NjMsMTI2NTYzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NjQsMTI2NTY0XSxcIm1hcHBlZFwiLFsxNjA3XV0sW1sxMjY1NjUsMTI2NTY2XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NjcsMTI2NTY3XSxcIm1hcHBlZFwiLFsxNTgxXV0sW1sxMjY1NjgsMTI2NTY4XSxcIm1hcHBlZFwiLFsxNTkxXV0sW1sxMjY1NjksMTI2NTY5XSxcIm1hcHBlZFwiLFsxNjEwXV0sW1sxMjY1NzAsMTI2NTcwXSxcIm1hcHBlZFwiLFsxNjAzXV0sW1sxMjY1NzEsMTI2NTcxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1NzIsMTI2NTcyXSxcIm1hcHBlZFwiLFsxNjA1XV0sW1sxMjY1NzMsMTI2NTczXSxcIm1hcHBlZFwiLFsxNjA2XV0sW1sxMjY1NzQsMTI2NTc0XSxcIm1hcHBlZFwiLFsxNTg3XV0sW1sxMjY1NzUsMTI2NTc1XSxcIm1hcHBlZFwiLFsxNTkzXV0sW1sxMjY1NzYsMTI2NTc2XSxcIm1hcHBlZFwiLFsxNjAxXV0sW1sxMjY1NzcsMTI2NTc3XSxcIm1hcHBlZFwiLFsxNTg5XV0sW1sxMjY1NzgsMTI2NTc4XSxcIm1hcHBlZFwiLFsxNjAyXV0sW1sxMjY1NzksMTI2NTc5XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1ODAsMTI2NTgwXSxcIm1hcHBlZFwiLFsxNTg4XV0sW1sxMjY1ODEsMTI2NTgxXSxcIm1hcHBlZFwiLFsxNTc4XV0sW1sxMjY1ODIsMTI2NTgyXSxcIm1hcHBlZFwiLFsxNTc5XV0sW1sxMjY1ODMsMTI2NTgzXSxcIm1hcHBlZFwiLFsxNTgyXV0sW1sxMjY1ODQsMTI2NTg0XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1ODUsMTI2NTg1XSxcIm1hcHBlZFwiLFsxNTkwXV0sW1sxMjY1ODYsMTI2NTg2XSxcIm1hcHBlZFwiLFsxNTkyXV0sW1sxMjY1ODcsMTI2NTg3XSxcIm1hcHBlZFwiLFsxNTk0XV0sW1sxMjY1ODgsMTI2NTg4XSxcIm1hcHBlZFwiLFsxNjQ2XV0sW1sxMjY1ODksMTI2NTg5XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1OTAsMTI2NTkwXSxcIm1hcHBlZFwiLFsxNjk3XV0sW1sxMjY1OTEsMTI2NTkxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY1OTIsMTI2NTkyXSxcIm1hcHBlZFwiLFsxNTc1XV0sW1sxMjY1OTMsMTI2NTkzXSxcIm1hcHBlZFwiLFsxNTc2XV0sW1sxMjY1OTQsMTI2NTk0XSxcIm1hcHBlZFwiLFsxNTgwXV0sW1sxMjY1OTUsMTI2NTk1XSxcIm1hcHBlZFwiLFsxNTgzXV0sW1sxMjY1OTYsMTI2NTk2XSxcIm1hcHBlZFwiLFsxNjA3XV0sW1sxMjY1OTcsMTI2NTk3XSxcIm1hcHBlZFwiLFsxNjA4XV0sW1sxMjY1OTgsMTI2NTk4XSxcIm1hcHBlZFwiLFsxNTg2XV0sW1sxMjY1OTksMTI2NTk5XSxcIm1hcHBlZFwiLFsxNTgxXV0sW1sxMjY2MDAsMTI2NjAwXSxcIm1hcHBlZFwiLFsxNTkxXV0sW1sxMjY2MDEsMTI2NjAxXSxcIm1hcHBlZFwiLFsxNjEwXV0sW1sxMjY2MDIsMTI2NjAyXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY2MDMsMTI2NjAzXSxcIm1hcHBlZFwiLFsxNjA0XV0sW1sxMjY2MDQsMTI2NjA0XSxcIm1hcHBlZFwiLFsxNjA1XV0sW1sxMjY2MDUsMTI2NjA1XSxcIm1hcHBlZFwiLFsxNjA2XV0sW1sxMjY2MDYsMTI2NjA2XSxcIm1hcHBlZFwiLFsxNTg3XV0sW1sxMjY2MDcsMTI2NjA3XSxcIm1hcHBlZFwiLFsxNTkzXV0sW1sxMjY2MDgsMTI2NjA4XSxcIm1hcHBlZFwiLFsxNjAxXV0sW1sxMjY2MDksMTI2NjA5XSxcIm1hcHBlZFwiLFsxNTg5XV0sW1sxMjY2MTAsMTI2NjEwXSxcIm1hcHBlZFwiLFsxNjAyXV0sW1sxMjY2MTEsMTI2NjExXSxcIm1hcHBlZFwiLFsxNTg1XV0sW1sxMjY2MTIsMTI2NjEyXSxcIm1hcHBlZFwiLFsxNTg4XV0sW1sxMjY2MTMsMTI2NjEzXSxcIm1hcHBlZFwiLFsxNTc4XV0sW1sxMjY2MTQsMTI2NjE0XSxcIm1hcHBlZFwiLFsxNTc5XV0sW1sxMjY2MTUsMTI2NjE1XSxcIm1hcHBlZFwiLFsxNTgyXV0sW1sxMjY2MTYsMTI2NjE2XSxcIm1hcHBlZFwiLFsxNTg0XV0sW1sxMjY2MTcsMTI2NjE3XSxcIm1hcHBlZFwiLFsxNTkwXV0sW1sxMjY2MTgsMTI2NjE4XSxcIm1hcHBlZFwiLFsxNTkyXV0sW1sxMjY2MTksMTI2NjE5XSxcIm1hcHBlZFwiLFsxNTk0XV0sW1sxMjY2MjAsMTI2NjI0XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY2MjUsMTI2NjI1XSxcIm1hcHBlZFwiLFsxNTc2XV0sW1sxMjY2MjYsMTI2NjI2XSxcIm1hcHBlZFwiLFsxNTgwXV0sW1sxMjY2MjcsMTI2NjI3XSxcIm1hcHBlZFwiLFsxNTgzXV0sW1sxMjY2MjgsMTI2NjI4XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY2MjksMTI2NjI5XSxcIm1hcHBlZFwiLFsxNjA4XV0sW1sxMjY2MzAsMTI2NjMwXSxcIm1hcHBlZFwiLFsxNTg2XV0sW1sxMjY2MzEsMTI2NjMxXSxcIm1hcHBlZFwiLFsxNTgxXV0sW1sxMjY2MzIsMTI2NjMyXSxcIm1hcHBlZFwiLFsxNTkxXV0sW1sxMjY2MzMsMTI2NjMzXSxcIm1hcHBlZFwiLFsxNjEwXV0sW1sxMjY2MzQsMTI2NjM0XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY2MzUsMTI2NjM1XSxcIm1hcHBlZFwiLFsxNjA0XV0sW1sxMjY2MzYsMTI2NjM2XSxcIm1hcHBlZFwiLFsxNjA1XV0sW1sxMjY2MzcsMTI2NjM3XSxcIm1hcHBlZFwiLFsxNjA2XV0sW1sxMjY2MzgsMTI2NjM4XSxcIm1hcHBlZFwiLFsxNTg3XV0sW1sxMjY2MzksMTI2NjM5XSxcIm1hcHBlZFwiLFsxNTkzXV0sW1sxMjY2NDAsMTI2NjQwXSxcIm1hcHBlZFwiLFsxNjAxXV0sW1sxMjY2NDEsMTI2NjQxXSxcIm1hcHBlZFwiLFsxNTg5XV0sW1sxMjY2NDIsMTI2NjQyXSxcIm1hcHBlZFwiLFsxNjAyXV0sW1sxMjY2NDMsMTI2NjQzXSxcIm1hcHBlZFwiLFsxNTg1XV0sW1sxMjY2NDQsMTI2NjQ0XSxcIm1hcHBlZFwiLFsxNTg4XV0sW1sxMjY2NDUsMTI2NjQ1XSxcIm1hcHBlZFwiLFsxNTc4XV0sW1sxMjY2NDYsMTI2NjQ2XSxcIm1hcHBlZFwiLFsxNTc5XV0sW1sxMjY2NDcsMTI2NjQ3XSxcIm1hcHBlZFwiLFsxNTgyXV0sW1sxMjY2NDgsMTI2NjQ4XSxcIm1hcHBlZFwiLFsxNTg0XV0sW1sxMjY2NDksMTI2NjQ5XSxcIm1hcHBlZFwiLFsxNTkwXV0sW1sxMjY2NTAsMTI2NjUwXSxcIm1hcHBlZFwiLFsxNTkyXV0sW1sxMjY2NTEsMTI2NjUxXSxcIm1hcHBlZFwiLFsxNTk0XV0sW1sxMjY2NTIsMTI2NzAzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjY3MDQsMTI2NzA1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjY3MDYsMTI2OTc1XSxcImRpc2FsbG93ZWRcIl0sW1sxMjY5NzYsMTI3MDE5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjcwMjAsMTI3MDIzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjcwMjQsMTI3MTIzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjcxMjQsMTI3MTM1XSxcImRpc2FsbG93ZWRcIl0sW1sxMjcxMzYsMTI3MTUwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjcxNTEsMTI3MTUyXSxcImRpc2FsbG93ZWRcIl0sW1sxMjcxNTMsMTI3MTY2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjcxNjcsMTI3MTY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjcxNjgsMTI3MTY4XSxcImRpc2FsbG93ZWRcIl0sW1sxMjcxNjksMTI3MTgzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjcxODQsMTI3MTg0XSxcImRpc2FsbG93ZWRcIl0sW1sxMjcxODUsMTI3MTk5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjcyMDAsMTI3MjIxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjcyMjIsMTI3MjMxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjcyMzIsMTI3MjMyXSxcImRpc2FsbG93ZWRcIl0sW1sxMjcyMzMsMTI3MjMzXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDgsNDRdXSxbWzEyNzIzNCwxMjcyMzRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0OSw0NF1dLFtbMTI3MjM1LDEyNzIzNV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzUwLDQ0XV0sW1sxMjcyMzYsMTI3MjM2XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTEsNDRdXSxbWzEyNzIzNywxMjcyMzddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1Miw0NF1dLFtbMTI3MjM4LDEyNzIzOF0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzUzLDQ0XV0sW1sxMjcyMzksMTI3MjM5XSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTQsNDRdXSxbWzEyNzI0MCwxMjcyNDBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs1NSw0NF1dLFtbMTI3MjQxLDEyNzI0MV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzU2LDQ0XV0sW1sxMjcyNDIsMTI3MjQyXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNTcsNDRdXSxbWzEyNzI0MywxMjcyNDRdLFwidmFsaWRcIixbXSxcIk5WOFwiXSxbWzEyNzI0NSwxMjcyNDddLFwiZGlzYWxsb3dlZFwiXSxbWzEyNzI0OCwxMjcyNDhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCw5Nyw0MV1dLFtbMTI3MjQ5LDEyNzI0OV0sXCJkaXNhbGxvd2VkX1NURDNfbWFwcGVkXCIsWzQwLDk4LDQxXV0sW1sxMjcyNTAsMTI3MjUwXSxcImRpc2FsbG93ZWRfU1REM19tYXBwZWRcIixbNDAsOTksNDFdXSxbWzEyNzI1MSwxMjcyNTFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDAsNDFdXSxbWzEyNzI1MiwxMjcyNTJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDEsNDFdXSxbWzEyNzI1MywxMjcyNTNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDIsNDFdXSxbWzEyNzI1NCwxMjcyNTRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDMsNDFdXSxbWzEyNzI1NSwxMjcyNTVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDQsNDFdXSxbWzEyNzI1NiwxMjcyNTZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDUsNDFdXSxbWzEyNzI1NywxMjcyNTddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDYsNDFdXSxbWzEyNzI1OCwxMjcyNThdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDcsNDFdXSxbWzEyNzI1OSwxMjcyNTldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDgsNDFdXSxbWzEyNzI2MCwxMjcyNjBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMDksNDFdXSxbWzEyNzI2MSwxMjcyNjFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTAsNDFdXSxbWzEyNzI2MiwxMjcyNjJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTEsNDFdXSxbWzEyNzI2MywxMjcyNjNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTIsNDFdXSxbWzEyNzI2NCwxMjcyNjRdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTMsNDFdXSxbWzEyNzI2NSwxMjcyNjVdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTQsNDFdXSxbWzEyNzI2NiwxMjcyNjZdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTUsNDFdXSxbWzEyNzI2NywxMjcyNjddLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTYsNDFdXSxbWzEyNzI2OCwxMjcyNjhdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTcsNDFdXSxbWzEyNzI2OSwxMjcyNjldLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTgsNDFdXSxbWzEyNzI3MCwxMjcyNzBdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMTksNDFdXSxbWzEyNzI3MSwxMjcyNzFdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMjAsNDFdXSxbWzEyNzI3MiwxMjcyNzJdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMjEsNDFdXSxbWzEyNzI3MywxMjcyNzNdLFwiZGlzYWxsb3dlZF9TVEQzX21hcHBlZFwiLFs0MCwxMjIsNDFdXSxbWzEyNzI3NCwxMjcyNzRdLFwibWFwcGVkXCIsWzEyMzA4LDExNSwxMjMwOV1dLFtbMTI3Mjc1LDEyNzI3NV0sXCJtYXBwZWRcIixbOTldXSxbWzEyNzI3NiwxMjcyNzZdLFwibWFwcGVkXCIsWzExNF1dLFtbMTI3Mjc3LDEyNzI3N10sXCJtYXBwZWRcIixbOTksMTAwXV0sW1sxMjcyNzgsMTI3Mjc4XSxcIm1hcHBlZFwiLFsxMTksMTIyXV0sW1sxMjcyNzksMTI3Mjc5XSxcImRpc2FsbG93ZWRcIl0sW1sxMjcyODAsMTI3MjgwXSxcIm1hcHBlZFwiLFs5N11dLFtbMTI3MjgxLDEyNzI4MV0sXCJtYXBwZWRcIixbOThdXSxbWzEyNzI4MiwxMjcyODJdLFwibWFwcGVkXCIsWzk5XV0sW1sxMjcyODMsMTI3MjgzXSxcIm1hcHBlZFwiLFsxMDBdXSxbWzEyNzI4NCwxMjcyODRdLFwibWFwcGVkXCIsWzEwMV1dLFtbMTI3Mjg1LDEyNzI4NV0sXCJtYXBwZWRcIixbMTAyXV0sW1sxMjcyODYsMTI3Mjg2XSxcIm1hcHBlZFwiLFsxMDNdXSxbWzEyNzI4NywxMjcyODddLFwibWFwcGVkXCIsWzEwNF1dLFtbMTI3Mjg4LDEyNzI4OF0sXCJtYXBwZWRcIixbMTA1XV0sW1sxMjcyODksMTI3Mjg5XSxcIm1hcHBlZFwiLFsxMDZdXSxbWzEyNzI5MCwxMjcyOTBdLFwibWFwcGVkXCIsWzEwN11dLFtbMTI3MjkxLDEyNzI5MV0sXCJtYXBwZWRcIixbMTA4XV0sW1sxMjcyOTIsMTI3MjkyXSxcIm1hcHBlZFwiLFsxMDldXSxbWzEyNzI5MywxMjcyOTNdLFwibWFwcGVkXCIsWzExMF1dLFtbMTI3Mjk0LDEyNzI5NF0sXCJtYXBwZWRcIixbMTExXV0sW1sxMjcyOTUsMTI3Mjk1XSxcIm1hcHBlZFwiLFsxMTJdXSxbWzEyNzI5NiwxMjcyOTZdLFwibWFwcGVkXCIsWzExM11dLFtbMTI3Mjk3LDEyNzI5N10sXCJtYXBwZWRcIixbMTE0XV0sW1sxMjcyOTgsMTI3Mjk4XSxcIm1hcHBlZFwiLFsxMTVdXSxbWzEyNzI5OSwxMjcyOTldLFwibWFwcGVkXCIsWzExNl1dLFtbMTI3MzAwLDEyNzMwMF0sXCJtYXBwZWRcIixbMTE3XV0sW1sxMjczMDEsMTI3MzAxXSxcIm1hcHBlZFwiLFsxMThdXSxbWzEyNzMwMiwxMjczMDJdLFwibWFwcGVkXCIsWzExOV1dLFtbMTI3MzAzLDEyNzMwM10sXCJtYXBwZWRcIixbMTIwXV0sW1sxMjczMDQsMTI3MzA0XSxcIm1hcHBlZFwiLFsxMjFdXSxbWzEyNzMwNSwxMjczMDVdLFwibWFwcGVkXCIsWzEyMl1dLFtbMTI3MzA2LDEyNzMwNl0sXCJtYXBwZWRcIixbMTA0LDExOF1dLFtbMTI3MzA3LDEyNzMwN10sXCJtYXBwZWRcIixbMTA5LDExOF1dLFtbMTI3MzA4LDEyNzMwOF0sXCJtYXBwZWRcIixbMTE1LDEwMF1dLFtbMTI3MzA5LDEyNzMwOV0sXCJtYXBwZWRcIixbMTE1LDExNV1dLFtbMTI3MzEwLDEyNzMxMF0sXCJtYXBwZWRcIixbMTEyLDExMiwxMThdXSxbWzEyNzMxMSwxMjczMTFdLFwibWFwcGVkXCIsWzExOSw5OV1dLFtbMTI3MzEyLDEyNzMxOF0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzE5LDEyNzMxOV0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzIwLDEyNzMyNl0sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzI3LDEyNzMyN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzI4LDEyNzMzN10sXCJ2YWxpZFwiLFtdLFwiTlY4XCJdLFtbMTI3MzM4LDEyNzMzOF0sXCJtYXBwZWRcIixbMTA5LDk5XV0sW1sxMjczMzksMTI3MzM5XSxcIm1hcHBlZFwiLFsxMDksMTAwXV0sW1sxMjczNDAsMTI3MzQzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjczNDQsMTI3MzUyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjczNTMsMTI3MzUzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjczNTQsMTI3MzU0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjczNTUsMTI3MzU2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjczNTcsMTI3MzU4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjczNTksMTI3MzU5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjczNjAsMTI3MzY5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjczNzAsMTI3MzczXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjczNzQsMTI3Mzc1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjczNzYsMTI3Mzc2XSxcIm1hcHBlZFwiLFsxMDAsMTA2XV0sW1sxMjczNzcsMTI3Mzg2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjczODcsMTI3NDYxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjc0NjIsMTI3NDg3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc0ODgsMTI3NDg4XSxcIm1hcHBlZFwiLFsxMjQxMSwxMjM2M11dLFtbMTI3NDg5LDEyNzQ4OV0sXCJtYXBwZWRcIixbMTI0NjcsMTI0NjddXSxbWzEyNzQ5MCwxMjc0OTBdLFwibWFwcGVkXCIsWzEyNDY5XV0sW1sxMjc0OTEsMTI3NTAzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjc1MDQsMTI3NTA0XSxcIm1hcHBlZFwiLFsyNTE2M11dLFtbMTI3NTA1LDEyNzUwNV0sXCJtYXBwZWRcIixbMjMzODNdXSxbWzEyNzUwNiwxMjc1MDZdLFwibWFwcGVkXCIsWzIxNDUyXV0sW1sxMjc1MDcsMTI3NTA3XSxcIm1hcHBlZFwiLFsxMjQ4N11dLFtbMTI3NTA4LDEyNzUwOF0sXCJtYXBwZWRcIixbMjAxMDhdXSxbWzEyNzUwOSwxMjc1MDldLFwibWFwcGVkXCIsWzIyODEwXV0sW1sxMjc1MTAsMTI3NTEwXSxcIm1hcHBlZFwiLFszNTI5OV1dLFtbMTI3NTExLDEyNzUxMV0sXCJtYXBwZWRcIixbMjI4MjVdXSxbWzEyNzUxMiwxMjc1MTJdLFwibWFwcGVkXCIsWzIwMTMyXV0sW1sxMjc1MTMsMTI3NTEzXSxcIm1hcHBlZFwiLFsyNjE0NF1dLFtbMTI3NTE0LDEyNzUxNF0sXCJtYXBwZWRcIixbMjg5NjFdXSxbWzEyNzUxNSwxMjc1MTVdLFwibWFwcGVkXCIsWzI2MDA5XV0sW1sxMjc1MTYsMTI3NTE2XSxcIm1hcHBlZFwiLFsyMTA2OV1dLFtbMTI3NTE3LDEyNzUxN10sXCJtYXBwZWRcIixbMjQ0NjBdXSxbWzEyNzUxOCwxMjc1MThdLFwibWFwcGVkXCIsWzIwODc3XV0sW1sxMjc1MTksMTI3NTE5XSxcIm1hcHBlZFwiLFsyNjAzMl1dLFtbMTI3NTIwLDEyNzUyMF0sXCJtYXBwZWRcIixbMjEwMjFdXSxbWzEyNzUyMSwxMjc1MjFdLFwibWFwcGVkXCIsWzMyMDY2XV0sW1sxMjc1MjIsMTI3NTIyXSxcIm1hcHBlZFwiLFsyOTk4M11dLFtbMTI3NTIzLDEyNzUyM10sXCJtYXBwZWRcIixbMzYwMDldXSxbWzEyNzUyNCwxMjc1MjRdLFwibWFwcGVkXCIsWzIyNzY4XV0sW1sxMjc1MjUsMTI3NTI1XSxcIm1hcHBlZFwiLFsyMTU2MV1dLFtbMTI3NTI2LDEyNzUyNl0sXCJtYXBwZWRcIixbMjg0MzZdXSxbWzEyNzUyNywxMjc1MjddLFwibWFwcGVkXCIsWzI1MjM3XV0sW1sxMjc1MjgsMTI3NTI4XSxcIm1hcHBlZFwiLFsyNTQyOV1dLFtbMTI3NTI5LDEyNzUyOV0sXCJtYXBwZWRcIixbMTk5NjhdXSxbWzEyNzUzMCwxMjc1MzBdLFwibWFwcGVkXCIsWzE5OTc3XV0sW1sxMjc1MzEsMTI3NTMxXSxcIm1hcHBlZFwiLFszNjkzOF1dLFtbMTI3NTMyLDEyNzUzMl0sXCJtYXBwZWRcIixbMjQwMzhdXSxbWzEyNzUzMywxMjc1MzNdLFwibWFwcGVkXCIsWzIwMDEzXV0sW1sxMjc1MzQsMTI3NTM0XSxcIm1hcHBlZFwiLFsyMTQ5MV1dLFtbMTI3NTM1LDEyNzUzNV0sXCJtYXBwZWRcIixbMjUzNTFdXSxbWzEyNzUzNiwxMjc1MzZdLFwibWFwcGVkXCIsWzM2MjA4XV0sW1sxMjc1MzcsMTI3NTM3XSxcIm1hcHBlZFwiLFsyNTE3MV1dLFtbMTI3NTM4LDEyNzUzOF0sXCJtYXBwZWRcIixbMzExMDVdXSxbWzEyNzUzOSwxMjc1MzldLFwibWFwcGVkXCIsWzMxMzU0XV0sW1sxMjc1NDAsMTI3NTQwXSxcIm1hcHBlZFwiLFsyMTUxMl1dLFtbMTI3NTQxLDEyNzU0MV0sXCJtYXBwZWRcIixbMjgyODhdXSxbWzEyNzU0MiwxMjc1NDJdLFwibWFwcGVkXCIsWzI2Mzc3XV0sW1sxMjc1NDMsMTI3NTQzXSxcIm1hcHBlZFwiLFsyNjM3Nl1dLFtbMTI3NTQ0LDEyNzU0NF0sXCJtYXBwZWRcIixbMzAwMDNdXSxbWzEyNzU0NSwxMjc1NDVdLFwibWFwcGVkXCIsWzIxMTA2XV0sW1sxMjc1NDYsMTI3NTQ2XSxcIm1hcHBlZFwiLFsyMTk0Ml1dLFtbMTI3NTQ3LDEyNzU1MV0sXCJkaXNhbGxvd2VkXCJdLFtbMTI3NTUyLDEyNzU1Ml0sXCJtYXBwZWRcIixbMTIzMDgsMjY0MTIsMTIzMDldXSxbWzEyNzU1MywxMjc1NTNdLFwibWFwcGVkXCIsWzEyMzA4LDE5OTc3LDEyMzA5XV0sW1sxMjc1NTQsMTI3NTU0XSxcIm1hcHBlZFwiLFsxMjMwOCwyMDEwOCwxMjMwOV1dLFtbMTI3NTU1LDEyNzU1NV0sXCJtYXBwZWRcIixbMTIzMDgsMjM0MzMsMTIzMDldXSxbWzEyNzU1NiwxMjc1NTZdLFwibWFwcGVkXCIsWzEyMzA4LDI4ODU3LDEyMzA5XV0sW1sxMjc1NTcsMTI3NTU3XSxcIm1hcHBlZFwiLFsxMjMwOCwyNTE3MSwxMjMwOV1dLFtbMTI3NTU4LDEyNzU1OF0sXCJtYXBwZWRcIixbMTIzMDgsMzA0MjMsMTIzMDldXSxbWzEyNzU1OSwxMjc1NTldLFwibWFwcGVkXCIsWzEyMzA4LDIxMjEzLDEyMzA5XV0sW1sxMjc1NjAsMTI3NTYwXSxcIm1hcHBlZFwiLFsxMjMwOCwyNTk0MywxMjMwOV1dLFtbMTI3NTYxLDEyNzU2N10sXCJkaXNhbGxvd2VkXCJdLFtbMTI3NTY4LDEyNzU2OF0sXCJtYXBwZWRcIixbMjQ0NzFdXSxbWzEyNzU2OSwxMjc1NjldLFwibWFwcGVkXCIsWzIxNDg3XV0sW1sxMjc1NzAsMTI3NzQzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjc3NDQsMTI3Nzc2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc3NzcsMTI3Nzg4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc3ODksMTI3NzkxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc3OTIsMTI3Nzk3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc3OTgsMTI3Nzk4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc3OTksMTI3ODY4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc4NjksMTI3ODY5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc4NzAsMTI3ODcxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc4NzIsMTI3ODkxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc4OTIsMTI3OTAzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc5MDQsMTI3OTQwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc5NDEsMTI3OTQxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc5NDIsMTI3OTQ2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc5NDcsMTI3OTUwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc5NTEsMTI3OTU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc5NTYsMTI3OTY3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc5NjgsMTI3OTg0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc5ODUsMTI3OTkxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjc5OTIsMTI3OTk5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgwMDAsMTI4MDYyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgwNjMsMTI4MDYzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgwNjQsMTI4MDY0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgwNjUsMTI4MDY1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgwNjYsMTI4MjQ3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgyNDgsMTI4MjQ4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgyNDksMTI4MjUyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgyNTMsMTI4MjU0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgyNTUsMTI4MjU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgyNTYsMTI4MzE3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgzMTgsMTI4MzE5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgzMjAsMTI4MzIzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgzMjQsMTI4MzMwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgzMzEsMTI4MzM1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgzMzYsMTI4MzU5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgzNjAsMTI4Mzc3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjgzNzgsMTI4Mzc4XSxcImRpc2FsbG93ZWRcIl0sW1sxMjgzNzksMTI4NDE5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg0MjAsMTI4NDIwXSxcImRpc2FsbG93ZWRcIl0sW1sxMjg0MjEsMTI4NTA2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MDcsMTI4NTExXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MTIsMTI4NTEyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MTMsMTI4NTI4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MjksMTI4NTI5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MzAsMTI4NTMyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MzMsMTI4NTMzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MzQsMTI4NTM0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MzUsMTI4NTM1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MzYsMTI4NTM2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MzcsMTI4NTM3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MzgsMTI4NTM4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1MzksMTI4NTM5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NDAsMTI4NTQyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NDMsMTI4NTQzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NDQsMTI4NTQ5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NTAsMTI4NTUxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NTIsMTI4NTU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NTYsMTI4NTU2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NTcsMTI4NTU3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NTgsMTI4NTU5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NjAsMTI4NTYzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NjQsMTI4NTY0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NjUsMTI4NTc2XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NzcsMTI4NTc4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1NzksMTI4NTgwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1ODEsMTI4NTkxXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg1OTIsMTI4NjM5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg2NDAsMTI4NzA5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg3MTAsMTI4NzE5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg3MjAsMTI4NzIwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg3MjEsMTI4NzM1XSxcImRpc2FsbG93ZWRcIl0sW1sxMjg3MzYsMTI4NzQ4XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg3NDksMTI4NzUxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjg3NTIsMTI4NzU1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg3NTYsMTI4NzY3XSxcImRpc2FsbG93ZWRcIl0sW1sxMjg3NjgsMTI4ODgzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg4ODQsMTI4ODk1XSxcImRpc2FsbG93ZWRcIl0sW1sxMjg4OTYsMTI4OTgwXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjg5ODEsMTI5MDIzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjkwMjQsMTI5MDM1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjkwMzYsMTI5MDM5XSxcImRpc2FsbG93ZWRcIl0sW1sxMjkwNDAsMTI5MDk1XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjkwOTYsMTI5MTAzXSxcImRpc2FsbG93ZWRcIl0sW1sxMjkxMDQsMTI5MTEzXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjkxMTQsMTI5MTE5XSxcImRpc2FsbG93ZWRcIl0sW1sxMjkxMjAsMTI5MTU5XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjkxNjAsMTI5MTY3XSxcImRpc2FsbG93ZWRcIl0sW1sxMjkxNjgsMTI5MTk3XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjkxOTgsMTI5Mjk1XSxcImRpc2FsbG93ZWRcIl0sW1sxMjkyOTYsMTI5MzA0XSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjkzMDUsMTI5NDA3XSxcImRpc2FsbG93ZWRcIl0sW1sxMjk0MDgsMTI5NDEyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjk0MTMsMTI5NDcxXSxcImRpc2FsbG93ZWRcIl0sW1sxMjk0NzIsMTI5NDcyXSxcInZhbGlkXCIsW10sXCJOVjhcIl0sW1sxMjk0NzMsMTMxMDY5XSxcImRpc2FsbG93ZWRcIl0sW1sxMzEwNzAsMTMxMDcxXSxcImRpc2FsbG93ZWRcIl0sW1sxMzEwNzIsMTczNzgyXSxcInZhbGlkXCJdLFtbMTczNzgzLDE3MzgyM10sXCJkaXNhbGxvd2VkXCJdLFtbMTczODI0LDE3Nzk3Ml0sXCJ2YWxpZFwiXSxbWzE3Nzk3MywxNzc5ODNdLFwiZGlzYWxsb3dlZFwiXSxbWzE3Nzk4NCwxNzgyMDVdLFwidmFsaWRcIl0sW1sxNzgyMDYsMTc4MjA3XSxcImRpc2FsbG93ZWRcIl0sW1sxNzgyMDgsMTgzOTY5XSxcInZhbGlkXCJdLFtbMTgzOTcwLDE5NDU1OV0sXCJkaXNhbGxvd2VkXCJdLFtbMTk0NTYwLDE5NDU2MF0sXCJtYXBwZWRcIixbMjAwMjldXSxbWzE5NDU2MSwxOTQ1NjFdLFwibWFwcGVkXCIsWzIwMDI0XV0sW1sxOTQ1NjIsMTk0NTYyXSxcIm1hcHBlZFwiLFsyMDAzM11dLFtbMTk0NTYzLDE5NDU2M10sXCJtYXBwZWRcIixbMTMxMzYyXV0sW1sxOTQ1NjQsMTk0NTY0XSxcIm1hcHBlZFwiLFsyMDMyMF1dLFtbMTk0NTY1LDE5NDU2NV0sXCJtYXBwZWRcIixbMjAzOThdXSxbWzE5NDU2NiwxOTQ1NjZdLFwibWFwcGVkXCIsWzIwNDExXV0sW1sxOTQ1NjcsMTk0NTY3XSxcIm1hcHBlZFwiLFsyMDQ4Ml1dLFtbMTk0NTY4LDE5NDU2OF0sXCJtYXBwZWRcIixbMjA2MDJdXSxbWzE5NDU2OSwxOTQ1NjldLFwibWFwcGVkXCIsWzIwNjMzXV0sW1sxOTQ1NzAsMTk0NTcwXSxcIm1hcHBlZFwiLFsyMDcxMV1dLFtbMTk0NTcxLDE5NDU3MV0sXCJtYXBwZWRcIixbMjA2ODddXSxbWzE5NDU3MiwxOTQ1NzJdLFwibWFwcGVkXCIsWzEzNDcwXV0sW1sxOTQ1NzMsMTk0NTczXSxcIm1hcHBlZFwiLFsxMzI2NjZdXSxbWzE5NDU3NCwxOTQ1NzRdLFwibWFwcGVkXCIsWzIwODEzXV0sW1sxOTQ1NzUsMTk0NTc1XSxcIm1hcHBlZFwiLFsyMDgyMF1dLFtbMTk0NTc2LDE5NDU3Nl0sXCJtYXBwZWRcIixbMjA4MzZdXSxbWzE5NDU3NywxOTQ1NzddLFwibWFwcGVkXCIsWzIwODU1XV0sW1sxOTQ1NzgsMTk0NTc4XSxcIm1hcHBlZFwiLFsxMzIzODBdXSxbWzE5NDU3OSwxOTQ1NzldLFwibWFwcGVkXCIsWzEzNDk3XV0sW1sxOTQ1ODAsMTk0NTgwXSxcIm1hcHBlZFwiLFsyMDgzOV1dLFtbMTk0NTgxLDE5NDU4MV0sXCJtYXBwZWRcIixbMjA4NzddXSxbWzE5NDU4MiwxOTQ1ODJdLFwibWFwcGVkXCIsWzEzMjQyN11dLFtbMTk0NTgzLDE5NDU4M10sXCJtYXBwZWRcIixbMjA4ODddXSxbWzE5NDU4NCwxOTQ1ODRdLFwibWFwcGVkXCIsWzIwOTAwXV0sW1sxOTQ1ODUsMTk0NTg1XSxcIm1hcHBlZFwiLFsyMDE3Ml1dLFtbMTk0NTg2LDE5NDU4Nl0sXCJtYXBwZWRcIixbMjA5MDhdXSxbWzE5NDU4NywxOTQ1ODddLFwibWFwcGVkXCIsWzIwOTE3XV0sW1sxOTQ1ODgsMTk0NTg4XSxcIm1hcHBlZFwiLFsxNjg0MTVdXSxbWzE5NDU4OSwxOTQ1ODldLFwibWFwcGVkXCIsWzIwOTgxXV0sW1sxOTQ1OTAsMTk0NTkwXSxcIm1hcHBlZFwiLFsyMDk5NV1dLFtbMTk0NTkxLDE5NDU5MV0sXCJtYXBwZWRcIixbMTM1MzVdXSxbWzE5NDU5MiwxOTQ1OTJdLFwibWFwcGVkXCIsWzIxMDUxXV0sW1sxOTQ1OTMsMTk0NTkzXSxcIm1hcHBlZFwiLFsyMTA2Ml1dLFtbMTk0NTk0LDE5NDU5NF0sXCJtYXBwZWRcIixbMjExMDZdXSxbWzE5NDU5NSwxOTQ1OTVdLFwibWFwcGVkXCIsWzIxMTExXV0sW1sxOTQ1OTYsMTk0NTk2XSxcIm1hcHBlZFwiLFsxMzU4OV1dLFtbMTk0NTk3LDE5NDU5N10sXCJtYXBwZWRcIixbMjExOTFdXSxbWzE5NDU5OCwxOTQ1OThdLFwibWFwcGVkXCIsWzIxMTkzXV0sW1sxOTQ1OTksMTk0NTk5XSxcIm1hcHBlZFwiLFsyMTIyMF1dLFtbMTk0NjAwLDE5NDYwMF0sXCJtYXBwZWRcIixbMjEyNDJdXSxbWzE5NDYwMSwxOTQ2MDFdLFwibWFwcGVkXCIsWzIxMjUzXV0sW1sxOTQ2MDIsMTk0NjAyXSxcIm1hcHBlZFwiLFsyMTI1NF1dLFtbMTk0NjAzLDE5NDYwM10sXCJtYXBwZWRcIixbMjEyNzFdXSxbWzE5NDYwNCwxOTQ2MDRdLFwibWFwcGVkXCIsWzIxMzIxXV0sW1sxOTQ2MDUsMTk0NjA1XSxcIm1hcHBlZFwiLFsyMTMyOV1dLFtbMTk0NjA2LDE5NDYwNl0sXCJtYXBwZWRcIixbMjEzMzhdXSxbWzE5NDYwNywxOTQ2MDddLFwibWFwcGVkXCIsWzIxMzYzXV0sW1sxOTQ2MDgsMTk0NjA4XSxcIm1hcHBlZFwiLFsyMTM3M11dLFtbMTk0NjA5LDE5NDYxMV0sXCJtYXBwZWRcIixbMjEzNzVdXSxbWzE5NDYxMiwxOTQ2MTJdLFwibWFwcGVkXCIsWzEzMzY3Nl1dLFtbMTk0NjEzLDE5NDYxM10sXCJtYXBwZWRcIixbMjg3ODRdXSxbWzE5NDYxNCwxOTQ2MTRdLFwibWFwcGVkXCIsWzIxNDUwXV0sW1sxOTQ2MTUsMTk0NjE1XSxcIm1hcHBlZFwiLFsyMTQ3MV1dLFtbMTk0NjE2LDE5NDYxNl0sXCJtYXBwZWRcIixbMTMzOTg3XV0sW1sxOTQ2MTcsMTk0NjE3XSxcIm1hcHBlZFwiLFsyMTQ4M11dLFtbMTk0NjE4LDE5NDYxOF0sXCJtYXBwZWRcIixbMjE0ODldXSxbWzE5NDYxOSwxOTQ2MTldLFwibWFwcGVkXCIsWzIxNTEwXV0sW1sxOTQ2MjAsMTk0NjIwXSxcIm1hcHBlZFwiLFsyMTY2Ml1dLFtbMTk0NjIxLDE5NDYyMV0sXCJtYXBwZWRcIixbMjE1NjBdXSxbWzE5NDYyMiwxOTQ2MjJdLFwibWFwcGVkXCIsWzIxNTc2XV0sW1sxOTQ2MjMsMTk0NjIzXSxcIm1hcHBlZFwiLFsyMTYwOF1dLFtbMTk0NjI0LDE5NDYyNF0sXCJtYXBwZWRcIixbMjE2NjZdXSxbWzE5NDYyNSwxOTQ2MjVdLFwibWFwcGVkXCIsWzIxNzUwXV0sW1sxOTQ2MjYsMTk0NjI2XSxcIm1hcHBlZFwiLFsyMTc3Nl1dLFtbMTk0NjI3LDE5NDYyN10sXCJtYXBwZWRcIixbMjE4NDNdXSxbWzE5NDYyOCwxOTQ2MjhdLFwibWFwcGVkXCIsWzIxODU5XV0sW1sxOTQ2MjksMTk0NjMwXSxcIm1hcHBlZFwiLFsyMTg5Ml1dLFtbMTk0NjMxLDE5NDYzMV0sXCJtYXBwZWRcIixbMjE5MTNdXSxbWzE5NDYzMiwxOTQ2MzJdLFwibWFwcGVkXCIsWzIxOTMxXV0sW1sxOTQ2MzMsMTk0NjMzXSxcIm1hcHBlZFwiLFsyMTkzOV1dLFtbMTk0NjM0LDE5NDYzNF0sXCJtYXBwZWRcIixbMjE5NTRdXSxbWzE5NDYzNSwxOTQ2MzVdLFwibWFwcGVkXCIsWzIyMjk0XV0sW1sxOTQ2MzYsMTk0NjM2XSxcIm1hcHBlZFwiLFsyMjAyMl1dLFtbMTk0NjM3LDE5NDYzN10sXCJtYXBwZWRcIixbMjIyOTVdXSxbWzE5NDYzOCwxOTQ2MzhdLFwibWFwcGVkXCIsWzIyMDk3XV0sW1sxOTQ2MzksMTk0NjM5XSxcIm1hcHBlZFwiLFsyMjEzMl1dLFtbMTk0NjQwLDE5NDY0MF0sXCJtYXBwZWRcIixbMjA5OTldXSxbWzE5NDY0MSwxOTQ2NDFdLFwibWFwcGVkXCIsWzIyNzY2XV0sW1sxOTQ2NDIsMTk0NjQyXSxcIm1hcHBlZFwiLFsyMjQ3OF1dLFtbMTk0NjQzLDE5NDY0M10sXCJtYXBwZWRcIixbMjI1MTZdXSxbWzE5NDY0NCwxOTQ2NDRdLFwibWFwcGVkXCIsWzIyNTQxXV0sW1sxOTQ2NDUsMTk0NjQ1XSxcIm1hcHBlZFwiLFsyMjQxMV1dLFtbMTk0NjQ2LDE5NDY0Nl0sXCJtYXBwZWRcIixbMjI1NzhdXSxbWzE5NDY0NywxOTQ2NDddLFwibWFwcGVkXCIsWzIyNTc3XV0sW1sxOTQ2NDgsMTk0NjQ4XSxcIm1hcHBlZFwiLFsyMjcwMF1dLFtbMTk0NjQ5LDE5NDY0OV0sXCJtYXBwZWRcIixbMTM2NDIwXV0sW1sxOTQ2NTAsMTk0NjUwXSxcIm1hcHBlZFwiLFsyMjc3MF1dLFtbMTk0NjUxLDE5NDY1MV0sXCJtYXBwZWRcIixbMjI3NzVdXSxbWzE5NDY1MiwxOTQ2NTJdLFwibWFwcGVkXCIsWzIyNzkwXV0sW1sxOTQ2NTMsMTk0NjUzXSxcIm1hcHBlZFwiLFsyMjgxMF1dLFtbMTk0NjU0LDE5NDY1NF0sXCJtYXBwZWRcIixbMjI4MThdXSxbWzE5NDY1NSwxOTQ2NTVdLFwibWFwcGVkXCIsWzIyODgyXV0sW1sxOTQ2NTYsMTk0NjU2XSxcIm1hcHBlZFwiLFsxMzY4NzJdXSxbWzE5NDY1NywxOTQ2NTddLFwibWFwcGVkXCIsWzEzNjkzOF1dLFtbMTk0NjU4LDE5NDY1OF0sXCJtYXBwZWRcIixbMjMwMjBdXSxbWzE5NDY1OSwxOTQ2NTldLFwibWFwcGVkXCIsWzIzMDY3XV0sW1sxOTQ2NjAsMTk0NjYwXSxcIm1hcHBlZFwiLFsyMzA3OV1dLFtbMTk0NjYxLDE5NDY2MV0sXCJtYXBwZWRcIixbMjMwMDBdXSxbWzE5NDY2MiwxOTQ2NjJdLFwibWFwcGVkXCIsWzIzMTQyXV0sW1sxOTQ2NjMsMTk0NjYzXSxcIm1hcHBlZFwiLFsxNDA2Ml1dLFtbMTk0NjY0LDE5NDY2NF0sXCJkaXNhbGxvd2VkXCJdLFtbMTk0NjY1LDE5NDY2NV0sXCJtYXBwZWRcIixbMjMzMDRdXSxbWzE5NDY2NiwxOTQ2NjddLFwibWFwcGVkXCIsWzIzMzU4XV0sW1sxOTQ2NjgsMTk0NjY4XSxcIm1hcHBlZFwiLFsxMzc2NzJdXSxbWzE5NDY2OSwxOTQ2NjldLFwibWFwcGVkXCIsWzIzNDkxXV0sW1sxOTQ2NzAsMTk0NjcwXSxcIm1hcHBlZFwiLFsyMzUxMl1dLFtbMTk0NjcxLDE5NDY3MV0sXCJtYXBwZWRcIixbMjM1MjddXSxbWzE5NDY3MiwxOTQ2NzJdLFwibWFwcGVkXCIsWzIzNTM5XV0sW1sxOTQ2NzMsMTk0NjczXSxcIm1hcHBlZFwiLFsxMzgwMDhdXSxbWzE5NDY3NCwxOTQ2NzRdLFwibWFwcGVkXCIsWzIzNTUxXV0sW1sxOTQ2NzUsMTk0Njc1XSxcIm1hcHBlZFwiLFsyMzU1OF1dLFtbMTk0Njc2LDE5NDY3Nl0sXCJkaXNhbGxvd2VkXCJdLFtbMTk0Njc3LDE5NDY3N10sXCJtYXBwZWRcIixbMjM1ODZdXSxbWzE5NDY3OCwxOTQ2NzhdLFwibWFwcGVkXCIsWzE0MjA5XV0sW1sxOTQ2NzksMTk0Njc5XSxcIm1hcHBlZFwiLFsyMzY0OF1dLFtbMTk0NjgwLDE5NDY4MF0sXCJtYXBwZWRcIixbMjM2NjJdXSxbWzE5NDY4MSwxOTQ2ODFdLFwibWFwcGVkXCIsWzIzNzQ0XV0sW1sxOTQ2ODIsMTk0NjgyXSxcIm1hcHBlZFwiLFsyMzY5M11dLFtbMTk0NjgzLDE5NDY4M10sXCJtYXBwZWRcIixbMTM4NzI0XV0sW1sxOTQ2ODQsMTk0Njg0XSxcIm1hcHBlZFwiLFsyMzg3NV1dLFtbMTk0Njg1LDE5NDY4NV0sXCJtYXBwZWRcIixbMTM4NzI2XV0sW1sxOTQ2ODYsMTk0Njg2XSxcIm1hcHBlZFwiLFsyMzkxOF1dLFtbMTk0Njg3LDE5NDY4N10sXCJtYXBwZWRcIixbMjM5MTVdXSxbWzE5NDY4OCwxOTQ2ODhdLFwibWFwcGVkXCIsWzIzOTMyXV0sW1sxOTQ2ODksMTk0Njg5XSxcIm1hcHBlZFwiLFsyNDAzM11dLFtbMTk0NjkwLDE5NDY5MF0sXCJtYXBwZWRcIixbMjQwMzRdXSxbWzE5NDY5MSwxOTQ2OTFdLFwibWFwcGVkXCIsWzE0MzgzXV0sW1sxOTQ2OTIsMTk0NjkyXSxcIm1hcHBlZFwiLFsyNDA2MV1dLFtbMTk0NjkzLDE5NDY5M10sXCJtYXBwZWRcIixbMjQxMDRdXSxbWzE5NDY5NCwxOTQ2OTRdLFwibWFwcGVkXCIsWzI0MTI1XV0sW1sxOTQ2OTUsMTk0Njk1XSxcIm1hcHBlZFwiLFsyNDE2OV1dLFtbMTk0Njk2LDE5NDY5Nl0sXCJtYXBwZWRcIixbMTQ0MzRdXSxbWzE5NDY5NywxOTQ2OTddLFwibWFwcGVkXCIsWzEzOTY1MV1dLFtbMTk0Njk4LDE5NDY5OF0sXCJtYXBwZWRcIixbMTQ0NjBdXSxbWzE5NDY5OSwxOTQ2OTldLFwibWFwcGVkXCIsWzI0MjQwXV0sW1sxOTQ3MDAsMTk0NzAwXSxcIm1hcHBlZFwiLFsyNDI0M11dLFtbMTk0NzAxLDE5NDcwMV0sXCJtYXBwZWRcIixbMjQyNDZdXSxbWzE5NDcwMiwxOTQ3MDJdLFwibWFwcGVkXCIsWzI0MjY2XV0sW1sxOTQ3MDMsMTk0NzAzXSxcIm1hcHBlZFwiLFsxNzI5NDZdXSxbWzE5NDcwNCwxOTQ3MDRdLFwibWFwcGVkXCIsWzI0MzE4XV0sW1sxOTQ3MDUsMTk0NzA2XSxcIm1hcHBlZFwiLFsxNDAwODFdXSxbWzE5NDcwNywxOTQ3MDddLFwibWFwcGVkXCIsWzMzMjgxXV0sW1sxOTQ3MDgsMTk0NzA5XSxcIm1hcHBlZFwiLFsyNDM1NF1dLFtbMTk0NzEwLDE5NDcxMF0sXCJtYXBwZWRcIixbMTQ1MzVdXSxbWzE5NDcxMSwxOTQ3MTFdLFwibWFwcGVkXCIsWzE0NDA1Nl1dLFtbMTk0NzEyLDE5NDcxMl0sXCJtYXBwZWRcIixbMTU2MTIyXV0sW1sxOTQ3MTMsMTk0NzEzXSxcIm1hcHBlZFwiLFsyNDQxOF1dLFtbMTk0NzE0LDE5NDcxNF0sXCJtYXBwZWRcIixbMjQ0MjddXSxbWzE5NDcxNSwxOTQ3MTVdLFwibWFwcGVkXCIsWzE0NTYzXV0sW1sxOTQ3MTYsMTk0NzE2XSxcIm1hcHBlZFwiLFsyNDQ3NF1dLFtbMTk0NzE3LDE5NDcxN10sXCJtYXBwZWRcIixbMjQ1MjVdXSxbWzE5NDcxOCwxOTQ3MThdLFwibWFwcGVkXCIsWzI0NTM1XV0sW1sxOTQ3MTksMTk0NzE5XSxcIm1hcHBlZFwiLFsyNDU2OV1dLFtbMTk0NzIwLDE5NDcyMF0sXCJtYXBwZWRcIixbMjQ3MDVdXSxbWzE5NDcyMSwxOTQ3MjFdLFwibWFwcGVkXCIsWzE0NjUwXV0sW1sxOTQ3MjIsMTk0NzIyXSxcIm1hcHBlZFwiLFsxNDYyMF1dLFtbMTk0NzIzLDE5NDcyM10sXCJtYXBwZWRcIixbMjQ3MjRdXSxbWzE5NDcyNCwxOTQ3MjRdLFwibWFwcGVkXCIsWzE0MTAxMl1dLFtbMTk0NzI1LDE5NDcyNV0sXCJtYXBwZWRcIixbMjQ3NzVdXSxbWzE5NDcyNiwxOTQ3MjZdLFwibWFwcGVkXCIsWzI0OTA0XV0sW1sxOTQ3MjcsMTk0NzI3XSxcIm1hcHBlZFwiLFsyNDkwOF1dLFtbMTk0NzI4LDE5NDcyOF0sXCJtYXBwZWRcIixbMjQ5MTBdXSxbWzE5NDcyOSwxOTQ3MjldLFwibWFwcGVkXCIsWzI0OTA4XV0sW1sxOTQ3MzAsMTk0NzMwXSxcIm1hcHBlZFwiLFsyNDk1NF1dLFtbMTk0NzMxLDE5NDczMV0sXCJtYXBwZWRcIixbMjQ5NzRdXSxbWzE5NDczMiwxOTQ3MzJdLFwibWFwcGVkXCIsWzI1MDEwXV0sW1sxOTQ3MzMsMTk0NzMzXSxcIm1hcHBlZFwiLFsyNDk5Nl1dLFtbMTk0NzM0LDE5NDczNF0sXCJtYXBwZWRcIixbMjUwMDddXSxbWzE5NDczNSwxOTQ3MzVdLFwibWFwcGVkXCIsWzI1MDU0XV0sW1sxOTQ3MzYsMTk0NzM2XSxcIm1hcHBlZFwiLFsyNTA3NF1dLFtbMTk0NzM3LDE5NDczN10sXCJtYXBwZWRcIixbMjUwNzhdXSxbWzE5NDczOCwxOTQ3MzhdLFwibWFwcGVkXCIsWzI1MTA0XV0sW1sxOTQ3MzksMTk0NzM5XSxcIm1hcHBlZFwiLFsyNTExNV1dLFtbMTk0NzQwLDE5NDc0MF0sXCJtYXBwZWRcIixbMjUxODFdXSxbWzE5NDc0MSwxOTQ3NDFdLFwibWFwcGVkXCIsWzI1MjY1XV0sW1sxOTQ3NDIsMTk0NzQyXSxcIm1hcHBlZFwiLFsyNTMwMF1dLFtbMTk0NzQzLDE5NDc0M10sXCJtYXBwZWRcIixbMjU0MjRdXSxbWzE5NDc0NCwxOTQ3NDRdLFwibWFwcGVkXCIsWzE0MjA5Ml1dLFtbMTk0NzQ1LDE5NDc0NV0sXCJtYXBwZWRcIixbMjU0MDVdXSxbWzE5NDc0NiwxOTQ3NDZdLFwibWFwcGVkXCIsWzI1MzQwXV0sW1sxOTQ3NDcsMTk0NzQ3XSxcIm1hcHBlZFwiLFsyNTQ0OF1dLFtbMTk0NzQ4LDE5NDc0OF0sXCJtYXBwZWRcIixbMjU0NzVdXSxbWzE5NDc0OSwxOTQ3NDldLFwibWFwcGVkXCIsWzI1NTcyXV0sW1sxOTQ3NTAsMTk0NzUwXSxcIm1hcHBlZFwiLFsxNDIzMjFdXSxbWzE5NDc1MSwxOTQ3NTFdLFwibWFwcGVkXCIsWzI1NjM0XV0sW1sxOTQ3NTIsMTk0NzUyXSxcIm1hcHBlZFwiLFsyNTU0MV1dLFtbMTk0NzUzLDE5NDc1M10sXCJtYXBwZWRcIixbMjU1MTNdXSxbWzE5NDc1NCwxOTQ3NTRdLFwibWFwcGVkXCIsWzE0ODk0XV0sW1sxOTQ3NTUsMTk0NzU1XSxcIm1hcHBlZFwiLFsyNTcwNV1dLFtbMTk0NzU2LDE5NDc1Nl0sXCJtYXBwZWRcIixbMjU3MjZdXSxbWzE5NDc1NywxOTQ3NTddLFwibWFwcGVkXCIsWzI1NzU3XV0sW1sxOTQ3NTgsMTk0NzU4XSxcIm1hcHBlZFwiLFsyNTcxOV1dLFtbMTk0NzU5LDE5NDc1OV0sXCJtYXBwZWRcIixbMTQ5NTZdXSxbWzE5NDc2MCwxOTQ3NjBdLFwibWFwcGVkXCIsWzI1OTM1XV0sW1sxOTQ3NjEsMTk0NzYxXSxcIm1hcHBlZFwiLFsyNTk2NF1dLFtbMTk0NzYyLDE5NDc2Ml0sXCJtYXBwZWRcIixbMTQzMzcwXV0sW1sxOTQ3NjMsMTk0NzYzXSxcIm1hcHBlZFwiLFsyNjA4M11dLFtbMTk0NzY0LDE5NDc2NF0sXCJtYXBwZWRcIixbMjYzNjBdXSxbWzE5NDc2NSwxOTQ3NjVdLFwibWFwcGVkXCIsWzI2MTg1XV0sW1sxOTQ3NjYsMTk0NzY2XSxcIm1hcHBlZFwiLFsxNTEyOV1dLFtbMTk0NzY3LDE5NDc2N10sXCJtYXBwZWRcIixbMjYyNTddXSxbWzE5NDc2OCwxOTQ3NjhdLFwibWFwcGVkXCIsWzE1MTEyXV0sW1sxOTQ3NjksMTk0NzY5XSxcIm1hcHBlZFwiLFsxNTA3Nl1dLFtbMTk0NzcwLDE5NDc3MF0sXCJtYXBwZWRcIixbMjA4ODJdXSxbWzE5NDc3MSwxOTQ3NzFdLFwibWFwcGVkXCIsWzIwODg1XV0sW1sxOTQ3NzIsMTk0NzcyXSxcIm1hcHBlZFwiLFsyNjM2OF1dLFtbMTk0NzczLDE5NDc3M10sXCJtYXBwZWRcIixbMjYyNjhdXSxbWzE5NDc3NCwxOTQ3NzRdLFwibWFwcGVkXCIsWzMyOTQxXV0sW1sxOTQ3NzUsMTk0Nzc1XSxcIm1hcHBlZFwiLFsxNzM2OV1dLFtbMTk0Nzc2LDE5NDc3Nl0sXCJtYXBwZWRcIixbMjYzOTFdXSxbWzE5NDc3NywxOTQ3NzddLFwibWFwcGVkXCIsWzI2Mzk1XV0sW1sxOTQ3NzgsMTk0Nzc4XSxcIm1hcHBlZFwiLFsyNjQwMV1dLFtbMTk0Nzc5LDE5NDc3OV0sXCJtYXBwZWRcIixbMjY0NjJdXSxbWzE5NDc4MCwxOTQ3ODBdLFwibWFwcGVkXCIsWzI2NDUxXV0sW1sxOTQ3ODEsMTk0NzgxXSxcIm1hcHBlZFwiLFsxNDQzMjNdXSxbWzE5NDc4MiwxOTQ3ODJdLFwibWFwcGVkXCIsWzE1MTc3XV0sW1sxOTQ3ODMsMTk0NzgzXSxcIm1hcHBlZFwiLFsyNjYxOF1dLFtbMTk0Nzg0LDE5NDc4NF0sXCJtYXBwZWRcIixbMjY1MDFdXSxbWzE5NDc4NSwxOTQ3ODVdLFwibWFwcGVkXCIsWzI2NzA2XV0sW1sxOTQ3ODYsMTk0Nzg2XSxcIm1hcHBlZFwiLFsyNjc1N11dLFtbMTk0Nzg3LDE5NDc4N10sXCJtYXBwZWRcIixbMTQ0NDkzXV0sW1sxOTQ3ODgsMTk0Nzg4XSxcIm1hcHBlZFwiLFsyNjc2Nl1dLFtbMTk0Nzg5LDE5NDc4OV0sXCJtYXBwZWRcIixbMjY2NTVdXSxbWzE5NDc5MCwxOTQ3OTBdLFwibWFwcGVkXCIsWzI2OTAwXV0sW1sxOTQ3OTEsMTk0NzkxXSxcIm1hcHBlZFwiLFsxNTI2MV1dLFtbMTk0NzkyLDE5NDc5Ml0sXCJtYXBwZWRcIixbMjY5NDZdXSxbWzE5NDc5MywxOTQ3OTNdLFwibWFwcGVkXCIsWzI3MDQzXV0sW1sxOTQ3OTQsMTk0Nzk0XSxcIm1hcHBlZFwiLFsyNzExNF1dLFtbMTk0Nzk1LDE5NDc5NV0sXCJtYXBwZWRcIixbMjczMDRdXSxbWzE5NDc5NiwxOTQ3OTZdLFwibWFwcGVkXCIsWzE0NTA1OV1dLFtbMTk0Nzk3LDE5NDc5N10sXCJtYXBwZWRcIixbMjczNTVdXSxbWzE5NDc5OCwxOTQ3OThdLFwibWFwcGVkXCIsWzE1Mzg0XV0sW1sxOTQ3OTksMTk0Nzk5XSxcIm1hcHBlZFwiLFsyNzQyNV1dLFtbMTk0ODAwLDE5NDgwMF0sXCJtYXBwZWRcIixbMTQ1NTc1XV0sW1sxOTQ4MDEsMTk0ODAxXSxcIm1hcHBlZFwiLFsyNzQ3Nl1dLFtbMTk0ODAyLDE5NDgwMl0sXCJtYXBwZWRcIixbMTU0MzhdXSxbWzE5NDgwMywxOTQ4MDNdLFwibWFwcGVkXCIsWzI3NTA2XV0sW1sxOTQ4MDQsMTk0ODA0XSxcIm1hcHBlZFwiLFsyNzU1MV1dLFtbMTk0ODA1LDE5NDgwNV0sXCJtYXBwZWRcIixbMjc1NzhdXSxbWzE5NDgwNiwxOTQ4MDZdLFwibWFwcGVkXCIsWzI3NTc5XV0sW1sxOTQ4MDcsMTk0ODA3XSxcIm1hcHBlZFwiLFsxNDYwNjFdXSxbWzE5NDgwOCwxOTQ4MDhdLFwibWFwcGVkXCIsWzEzODUwN11dLFtbMTk0ODA5LDE5NDgwOV0sXCJtYXBwZWRcIixbMTQ2MTcwXV0sW1sxOTQ4MTAsMTk0ODEwXSxcIm1hcHBlZFwiLFsyNzcyNl1dLFtbMTk0ODExLDE5NDgxMV0sXCJtYXBwZWRcIixbMTQ2NjIwXV0sW1sxOTQ4MTIsMTk0ODEyXSxcIm1hcHBlZFwiLFsyNzgzOV1dLFtbMTk0ODEzLDE5NDgxM10sXCJtYXBwZWRcIixbMjc4NTNdXSxbWzE5NDgxNCwxOTQ4MTRdLFwibWFwcGVkXCIsWzI3NzUxXV0sW1sxOTQ4MTUsMTk0ODE1XSxcIm1hcHBlZFwiLFsyNzkyNl1dLFtbMTk0ODE2LDE5NDgxNl0sXCJtYXBwZWRcIixbMjc5NjZdXSxbWzE5NDgxNywxOTQ4MTddLFwibWFwcGVkXCIsWzI4MDIzXV0sW1sxOTQ4MTgsMTk0ODE4XSxcIm1hcHBlZFwiLFsyNzk2OV1dLFtbMTk0ODE5LDE5NDgxOV0sXCJtYXBwZWRcIixbMjgwMDldXSxbWzE5NDgyMCwxOTQ4MjBdLFwibWFwcGVkXCIsWzI4MDI0XV0sW1sxOTQ4MjEsMTk0ODIxXSxcIm1hcHBlZFwiLFsyODAzN11dLFtbMTk0ODIyLDE5NDgyMl0sXCJtYXBwZWRcIixbMTQ2NzE4XV0sW1sxOTQ4MjMsMTk0ODIzXSxcIm1hcHBlZFwiLFsyNzk1Nl1dLFtbMTk0ODI0LDE5NDgyNF0sXCJtYXBwZWRcIixbMjgyMDddXSxbWzE5NDgyNSwxOTQ4MjVdLFwibWFwcGVkXCIsWzI4MjcwXV0sW1sxOTQ4MjYsMTk0ODI2XSxcIm1hcHBlZFwiLFsxNTY2N11dLFtbMTk0ODI3LDE5NDgyN10sXCJtYXBwZWRcIixbMjgzNjNdXSxbWzE5NDgyOCwxOTQ4MjhdLFwibWFwcGVkXCIsWzI4MzU5XV0sW1sxOTQ4MjksMTk0ODI5XSxcIm1hcHBlZFwiLFsxNDcxNTNdXSxbWzE5NDgzMCwxOTQ4MzBdLFwibWFwcGVkXCIsWzI4MTUzXV0sW1sxOTQ4MzEsMTk0ODMxXSxcIm1hcHBlZFwiLFsyODUyNl1dLFtbMTk0ODMyLDE5NDgzMl0sXCJtYXBwZWRcIixbMTQ3Mjk0XV0sW1sxOTQ4MzMsMTk0ODMzXSxcIm1hcHBlZFwiLFsxNDczNDJdXSxbWzE5NDgzNCwxOTQ4MzRdLFwibWFwcGVkXCIsWzI4NjE0XV0sW1sxOTQ4MzUsMTk0ODM1XSxcIm1hcHBlZFwiLFsyODcyOV1dLFtbMTk0ODM2LDE5NDgzNl0sXCJtYXBwZWRcIixbMjg3MDJdXSxbWzE5NDgzNywxOTQ4MzddLFwibWFwcGVkXCIsWzI4Njk5XV0sW1sxOTQ4MzgsMTk0ODM4XSxcIm1hcHBlZFwiLFsxNTc2Nl1dLFtbMTk0ODM5LDE5NDgzOV0sXCJtYXBwZWRcIixbMjg3NDZdXSxbWzE5NDg0MCwxOTQ4NDBdLFwibWFwcGVkXCIsWzI4Nzk3XV0sW1sxOTQ4NDEsMTk0ODQxXSxcIm1hcHBlZFwiLFsyODc5MV1dLFtbMTk0ODQyLDE5NDg0Ml0sXCJtYXBwZWRcIixbMjg4NDVdXSxbWzE5NDg0MywxOTQ4NDNdLFwibWFwcGVkXCIsWzEzMjM4OV1dLFtbMTk0ODQ0LDE5NDg0NF0sXCJtYXBwZWRcIixbMjg5OTddXSxbWzE5NDg0NSwxOTQ4NDVdLFwibWFwcGVkXCIsWzE0ODA2N11dLFtbMTk0ODQ2LDE5NDg0Nl0sXCJtYXBwZWRcIixbMjkwODRdXSxbWzE5NDg0NywxOTQ4NDddLFwiZGlzYWxsb3dlZFwiXSxbWzE5NDg0OCwxOTQ4NDhdLFwibWFwcGVkXCIsWzI5MjI0XV0sW1sxOTQ4NDksMTk0ODQ5XSxcIm1hcHBlZFwiLFsyOTIzN11dLFtbMTk0ODUwLDE5NDg1MF0sXCJtYXBwZWRcIixbMjkyNjRdXSxbWzE5NDg1MSwxOTQ4NTFdLFwibWFwcGVkXCIsWzE0OTAwMF1dLFtbMTk0ODUyLDE5NDg1Ml0sXCJtYXBwZWRcIixbMjkzMTJdXSxbWzE5NDg1MywxOTQ4NTNdLFwibWFwcGVkXCIsWzI5MzMzXV0sW1sxOTQ4NTQsMTk0ODU0XSxcIm1hcHBlZFwiLFsxNDkzMDFdXSxbWzE5NDg1NSwxOTQ4NTVdLFwibWFwcGVkXCIsWzE0OTUyNF1dLFtbMTk0ODU2LDE5NDg1Nl0sXCJtYXBwZWRcIixbMjk1NjJdXSxbWzE5NDg1NywxOTQ4NTddLFwibWFwcGVkXCIsWzI5NTc5XV0sW1sxOTQ4NTgsMTk0ODU4XSxcIm1hcHBlZFwiLFsxNjA0NF1dLFtbMTk0ODU5LDE5NDg1OV0sXCJtYXBwZWRcIixbMjk2MDVdXSxbWzE5NDg2MCwxOTQ4NjFdLFwibWFwcGVkXCIsWzE2MDU2XV0sW1sxOTQ4NjIsMTk0ODYyXSxcIm1hcHBlZFwiLFsyOTc2N11dLFtbMTk0ODYzLDE5NDg2M10sXCJtYXBwZWRcIixbMjk3ODhdXSxbWzE5NDg2NCwxOTQ4NjRdLFwibWFwcGVkXCIsWzI5ODA5XV0sW1sxOTQ4NjUsMTk0ODY1XSxcIm1hcHBlZFwiLFsyOTgyOV1dLFtbMTk0ODY2LDE5NDg2Nl0sXCJtYXBwZWRcIixbMjk4OThdXSxbWzE5NDg2NywxOTQ4NjddLFwibWFwcGVkXCIsWzE2MTU1XV0sW1sxOTQ4NjgsMTk0ODY4XSxcIm1hcHBlZFwiLFsyOTk4OF1dLFtbMTk0ODY5LDE5NDg2OV0sXCJtYXBwZWRcIixbMTUwNTgyXV0sW1sxOTQ4NzAsMTk0ODcwXSxcIm1hcHBlZFwiLFszMDAxNF1dLFtbMTk0ODcxLDE5NDg3MV0sXCJtYXBwZWRcIixbMTUwNjc0XV0sW1sxOTQ4NzIsMTk0ODcyXSxcIm1hcHBlZFwiLFszMDA2NF1dLFtbMTk0ODczLDE5NDg3M10sXCJtYXBwZWRcIixbMTM5Njc5XV0sW1sxOTQ4NzQsMTk0ODc0XSxcIm1hcHBlZFwiLFszMDIyNF1dLFtbMTk0ODc1LDE5NDg3NV0sXCJtYXBwZWRcIixbMTUxNDU3XV0sW1sxOTQ4NzYsMTk0ODc2XSxcIm1hcHBlZFwiLFsxNTE0ODBdXSxbWzE5NDg3NywxOTQ4NzddLFwibWFwcGVkXCIsWzE1MTYyMF1dLFtbMTk0ODc4LDE5NDg3OF0sXCJtYXBwZWRcIixbMTYzODBdXSxbWzE5NDg3OSwxOTQ4NzldLFwibWFwcGVkXCIsWzE2MzkyXV0sW1sxOTQ4ODAsMTk0ODgwXSxcIm1hcHBlZFwiLFszMDQ1Ml1dLFtbMTk0ODgxLDE5NDg4MV0sXCJtYXBwZWRcIixbMTUxNzk1XV0sW1sxOTQ4ODIsMTk0ODgyXSxcIm1hcHBlZFwiLFsxNTE3OTRdXSxbWzE5NDg4MywxOTQ4ODNdLFwibWFwcGVkXCIsWzE1MTgzM11dLFtbMTk0ODg0LDE5NDg4NF0sXCJtYXBwZWRcIixbMTUxODU5XV0sW1sxOTQ4ODUsMTk0ODg1XSxcIm1hcHBlZFwiLFszMDQ5NF1dLFtbMTk0ODg2LDE5NDg4N10sXCJtYXBwZWRcIixbMzA0OTVdXSxbWzE5NDg4OCwxOTQ4ODhdLFwibWFwcGVkXCIsWzMwNTM4XV0sW1sxOTQ4ODksMTk0ODg5XSxcIm1hcHBlZFwiLFsxNjQ0MV1dLFtbMTk0ODkwLDE5NDg5MF0sXCJtYXBwZWRcIixbMzA2MDNdXSxbWzE5NDg5MSwxOTQ4OTFdLFwibWFwcGVkXCIsWzE2NDU0XV0sW1sxOTQ4OTIsMTk0ODkyXSxcIm1hcHBlZFwiLFsxNjUzNF1dLFtbMTk0ODkzLDE5NDg5M10sXCJtYXBwZWRcIixbMTUyNjA1XV0sW1sxOTQ4OTQsMTk0ODk0XSxcIm1hcHBlZFwiLFszMDc5OF1dLFtbMTk0ODk1LDE5NDg5NV0sXCJtYXBwZWRcIixbMzA4NjBdXSxbWzE5NDg5NiwxOTQ4OTZdLFwibWFwcGVkXCIsWzMwOTI0XV0sW1sxOTQ4OTcsMTk0ODk3XSxcIm1hcHBlZFwiLFsxNjYxMV1dLFtbMTk0ODk4LDE5NDg5OF0sXCJtYXBwZWRcIixbMTUzMTI2XV0sW1sxOTQ4OTksMTk0ODk5XSxcIm1hcHBlZFwiLFszMTA2Ml1dLFtbMTk0OTAwLDE5NDkwMF0sXCJtYXBwZWRcIixbMTUzMjQyXV0sW1sxOTQ5MDEsMTk0OTAxXSxcIm1hcHBlZFwiLFsxNTMyODVdXSxbWzE5NDkwMiwxOTQ5MDJdLFwibWFwcGVkXCIsWzMxMTE5XV0sW1sxOTQ5MDMsMTk0OTAzXSxcIm1hcHBlZFwiLFszMTIxMV1dLFtbMTk0OTA0LDE5NDkwNF0sXCJtYXBwZWRcIixbMTY2ODddXSxbWzE5NDkwNSwxOTQ5MDVdLFwibWFwcGVkXCIsWzMxMjk2XV0sW1sxOTQ5MDYsMTk0OTA2XSxcIm1hcHBlZFwiLFszMTMwNl1dLFtbMTk0OTA3LDE5NDkwN10sXCJtYXBwZWRcIixbMzEzMTFdXSxbWzE5NDkwOCwxOTQ5MDhdLFwibWFwcGVkXCIsWzE1Mzk4MF1dLFtbMTk0OTA5LDE5NDkxMF0sXCJtYXBwZWRcIixbMTU0Mjc5XV0sW1sxOTQ5MTEsMTk0OTExXSxcImRpc2FsbG93ZWRcIl0sW1sxOTQ5MTIsMTk0OTEyXSxcIm1hcHBlZFwiLFsxNjg5OF1dLFtbMTk0OTEzLDE5NDkxM10sXCJtYXBwZWRcIixbMTU0NTM5XV0sW1sxOTQ5MTQsMTk0OTE0XSxcIm1hcHBlZFwiLFszMTY4Nl1dLFtbMTk0OTE1LDE5NDkxNV0sXCJtYXBwZWRcIixbMzE2ODldXSxbWzE5NDkxNiwxOTQ5MTZdLFwibWFwcGVkXCIsWzE2OTM1XV0sW1sxOTQ5MTcsMTk0OTE3XSxcIm1hcHBlZFwiLFsxNTQ3NTJdXSxbWzE5NDkxOCwxOTQ5MThdLFwibWFwcGVkXCIsWzMxOTU0XV0sW1sxOTQ5MTksMTk0OTE5XSxcIm1hcHBlZFwiLFsxNzA1Nl1dLFtbMTk0OTIwLDE5NDkyMF0sXCJtYXBwZWRcIixbMzE5NzZdXSxbWzE5NDkyMSwxOTQ5MjFdLFwibWFwcGVkXCIsWzMxOTcxXV0sW1sxOTQ5MjIsMTk0OTIyXSxcIm1hcHBlZFwiLFszMjAwMF1dLFtbMTk0OTIzLDE5NDkyM10sXCJtYXBwZWRcIixbMTU1NTI2XV0sW1sxOTQ5MjQsMTk0OTI0XSxcIm1hcHBlZFwiLFszMjA5OV1dLFtbMTk0OTI1LDE5NDkyNV0sXCJtYXBwZWRcIixbMTcxNTNdXSxbWzE5NDkyNiwxOTQ5MjZdLFwibWFwcGVkXCIsWzMyMTk5XV0sW1sxOTQ5MjcsMTk0OTI3XSxcIm1hcHBlZFwiLFszMjI1OF1dLFtbMTk0OTI4LDE5NDkyOF0sXCJtYXBwZWRcIixbMzIzMjVdXSxbWzE5NDkyOSwxOTQ5MjldLFwibWFwcGVkXCIsWzE3MjA0XV0sW1sxOTQ5MzAsMTk0OTMwXSxcIm1hcHBlZFwiLFsxNTYyMDBdXSxbWzE5NDkzMSwxOTQ5MzFdLFwibWFwcGVkXCIsWzE1NjIzMV1dLFtbMTk0OTMyLDE5NDkzMl0sXCJtYXBwZWRcIixbMTcyNDFdXSxbWzE5NDkzMywxOTQ5MzNdLFwibWFwcGVkXCIsWzE1NjM3N11dLFtbMTk0OTM0LDE5NDkzNF0sXCJtYXBwZWRcIixbMzI2MzRdXSxbWzE5NDkzNSwxOTQ5MzVdLFwibWFwcGVkXCIsWzE1NjQ3OF1dLFtbMTk0OTM2LDE5NDkzNl0sXCJtYXBwZWRcIixbMzI2NjFdXSxbWzE5NDkzNywxOTQ5MzddLFwibWFwcGVkXCIsWzMyNzYyXV0sW1sxOTQ5MzgsMTk0OTM4XSxcIm1hcHBlZFwiLFszMjc3M11dLFtbMTk0OTM5LDE5NDkzOV0sXCJtYXBwZWRcIixbMTU2ODkwXV0sW1sxOTQ5NDAsMTk0OTQwXSxcIm1hcHBlZFwiLFsxNTY5NjNdXSxbWzE5NDk0MSwxOTQ5NDFdLFwibWFwcGVkXCIsWzMyODY0XV0sW1sxOTQ5NDIsMTk0OTQyXSxcIm1hcHBlZFwiLFsxNTcwOTZdXSxbWzE5NDk0MywxOTQ5NDNdLFwibWFwcGVkXCIsWzMyODgwXV0sW1sxOTQ5NDQsMTk0OTQ0XSxcIm1hcHBlZFwiLFsxNDQyMjNdXSxbWzE5NDk0NSwxOTQ5NDVdLFwibWFwcGVkXCIsWzE3MzY1XV0sW1sxOTQ5NDYsMTk0OTQ2XSxcIm1hcHBlZFwiLFszMjk0Nl1dLFtbMTk0OTQ3LDE5NDk0N10sXCJtYXBwZWRcIixbMzMwMjddXSxbWzE5NDk0OCwxOTQ5NDhdLFwibWFwcGVkXCIsWzE3NDE5XV0sW1sxOTQ5NDksMTk0OTQ5XSxcIm1hcHBlZFwiLFszMzA4Nl1dLFtbMTk0OTUwLDE5NDk1MF0sXCJtYXBwZWRcIixbMjMyMjFdXSxbWzE5NDk1MSwxOTQ5NTFdLFwibWFwcGVkXCIsWzE1NzYwN11dLFtbMTk0OTUyLDE5NDk1Ml0sXCJtYXBwZWRcIixbMTU3NjIxXV0sW1sxOTQ5NTMsMTk0OTUzXSxcIm1hcHBlZFwiLFsxNDQyNzVdXSxbWzE5NDk1NCwxOTQ5NTRdLFwibWFwcGVkXCIsWzE0NDI4NF1dLFtbMTk0OTU1LDE5NDk1NV0sXCJtYXBwZWRcIixbMzMyODFdXSxbWzE5NDk1NiwxOTQ5NTZdLFwibWFwcGVkXCIsWzMzMjg0XV0sW1sxOTQ5NTcsMTk0OTU3XSxcIm1hcHBlZFwiLFszNjc2Nl1dLFtbMTk0OTU4LDE5NDk1OF0sXCJtYXBwZWRcIixbMTc1MTVdXSxbWzE5NDk1OSwxOTQ5NTldLFwibWFwcGVkXCIsWzMzNDI1XV0sW1sxOTQ5NjAsMTk0OTYwXSxcIm1hcHBlZFwiLFszMzQxOV1dLFtbMTk0OTYxLDE5NDk2MV0sXCJtYXBwZWRcIixbMzM0MzddXSxbWzE5NDk2MiwxOTQ5NjJdLFwibWFwcGVkXCIsWzIxMTcxXV0sW1sxOTQ5NjMsMTk0OTYzXSxcIm1hcHBlZFwiLFszMzQ1N11dLFtbMTk0OTY0LDE5NDk2NF0sXCJtYXBwZWRcIixbMzM0NTldXSxbWzE5NDk2NSwxOTQ5NjVdLFwibWFwcGVkXCIsWzMzNDY5XV0sW1sxOTQ5NjYsMTk0OTY2XSxcIm1hcHBlZFwiLFszMzUxMF1dLFtbMTk0OTY3LDE5NDk2N10sXCJtYXBwZWRcIixbMTU4NTI0XV0sW1sxOTQ5NjgsMTk0OTY4XSxcIm1hcHBlZFwiLFszMzUwOV1dLFtbMTk0OTY5LDE5NDk2OV0sXCJtYXBwZWRcIixbMzM1NjVdXSxbWzE5NDk3MCwxOTQ5NzBdLFwibWFwcGVkXCIsWzMzNjM1XV0sW1sxOTQ5NzEsMTk0OTcxXSxcIm1hcHBlZFwiLFszMzcwOV1dLFtbMTk0OTcyLDE5NDk3Ml0sXCJtYXBwZWRcIixbMzM1NzFdXSxbWzE5NDk3MywxOTQ5NzNdLFwibWFwcGVkXCIsWzMzNzI1XV0sW1sxOTQ5NzQsMTk0OTc0XSxcIm1hcHBlZFwiLFszMzc2N11dLFtbMTk0OTc1LDE5NDk3NV0sXCJtYXBwZWRcIixbMzM4NzldXSxbWzE5NDk3NiwxOTQ5NzZdLFwibWFwcGVkXCIsWzMzNjE5XV0sW1sxOTQ5NzcsMTk0OTc3XSxcIm1hcHBlZFwiLFszMzczOF1dLFtbMTk0OTc4LDE5NDk3OF0sXCJtYXBwZWRcIixbMzM3NDBdXSxbWzE5NDk3OSwxOTQ5NzldLFwibWFwcGVkXCIsWzMzNzU2XV0sW1sxOTQ5ODAsMTk0OTgwXSxcIm1hcHBlZFwiLFsxNTg3NzRdXSxbWzE5NDk4MSwxOTQ5ODFdLFwibWFwcGVkXCIsWzE1OTA4M11dLFtbMTk0OTgyLDE5NDk4Ml0sXCJtYXBwZWRcIixbMTU4OTMzXV0sW1sxOTQ5ODMsMTk0OTgzXSxcIm1hcHBlZFwiLFsxNzcwN11dLFtbMTk0OTg0LDE5NDk4NF0sXCJtYXBwZWRcIixbMzQwMzNdXSxbWzE5NDk4NSwxOTQ5ODVdLFwibWFwcGVkXCIsWzM0MDM1XV0sW1sxOTQ5ODYsMTk0OTg2XSxcIm1hcHBlZFwiLFszNDA3MF1dLFtbMTk0OTg3LDE5NDk4N10sXCJtYXBwZWRcIixbMTYwNzE0XV0sW1sxOTQ5ODgsMTk0OTg4XSxcIm1hcHBlZFwiLFszNDE0OF1dLFtbMTk0OTg5LDE5NDk4OV0sXCJtYXBwZWRcIixbMTU5NTMyXV0sW1sxOTQ5OTAsMTk0OTkwXSxcIm1hcHBlZFwiLFsxNzc1N11dLFtbMTk0OTkxLDE5NDk5MV0sXCJtYXBwZWRcIixbMTc3NjFdXSxbWzE5NDk5MiwxOTQ5OTJdLFwibWFwcGVkXCIsWzE1OTY2NV1dLFtbMTk0OTkzLDE5NDk5M10sXCJtYXBwZWRcIixbMTU5OTU0XV0sW1sxOTQ5OTQsMTk0OTk0XSxcIm1hcHBlZFwiLFsxNzc3MV1dLFtbMTk0OTk1LDE5NDk5NV0sXCJtYXBwZWRcIixbMzQzODRdXSxbWzE5NDk5NiwxOTQ5OTZdLFwibWFwcGVkXCIsWzM0Mzk2XV0sW1sxOTQ5OTcsMTk0OTk3XSxcIm1hcHBlZFwiLFszNDQwN11dLFtbMTk0OTk4LDE5NDk5OF0sXCJtYXBwZWRcIixbMzQ0MDldXSxbWzE5NDk5OSwxOTQ5OTldLFwibWFwcGVkXCIsWzM0NDczXV0sW1sxOTUwMDAsMTk1MDAwXSxcIm1hcHBlZFwiLFszNDQ0MF1dLFtbMTk1MDAxLDE5NTAwMV0sXCJtYXBwZWRcIixbMzQ1NzRdXSxbWzE5NTAwMiwxOTUwMDJdLFwibWFwcGVkXCIsWzM0NTMwXV0sW1sxOTUwMDMsMTk1MDAzXSxcIm1hcHBlZFwiLFszNDY4MV1dLFtbMTk1MDA0LDE5NTAwNF0sXCJtYXBwZWRcIixbMzQ2MDBdXSxbWzE5NTAwNSwxOTUwMDVdLFwibWFwcGVkXCIsWzM0NjY3XV0sW1sxOTUwMDYsMTk1MDA2XSxcIm1hcHBlZFwiLFszNDY5NF1dLFtbMTk1MDA3LDE5NTAwN10sXCJkaXNhbGxvd2VkXCJdLFtbMTk1MDA4LDE5NTAwOF0sXCJtYXBwZWRcIixbMzQ3ODVdXSxbWzE5NTAwOSwxOTUwMDldLFwibWFwcGVkXCIsWzM0ODE3XV0sW1sxOTUwMTAsMTk1MDEwXSxcIm1hcHBlZFwiLFsxNzkxM11dLFtbMTk1MDExLDE5NTAxMV0sXCJtYXBwZWRcIixbMzQ5MTJdXSxbWzE5NTAxMiwxOTUwMTJdLFwibWFwcGVkXCIsWzM0OTE1XV0sW1sxOTUwMTMsMTk1MDEzXSxcIm1hcHBlZFwiLFsxNjEzODNdXSxbWzE5NTAxNCwxOTUwMTRdLFwibWFwcGVkXCIsWzM1MDMxXV0sW1sxOTUwMTUsMTk1MDE1XSxcIm1hcHBlZFwiLFszNTAzOF1dLFtbMTk1MDE2LDE5NTAxNl0sXCJtYXBwZWRcIixbMTc5NzNdXSxbWzE5NTAxNywxOTUwMTddLFwibWFwcGVkXCIsWzM1MDY2XV0sW1sxOTUwMTgsMTk1MDE4XSxcIm1hcHBlZFwiLFsxMzQ5OV1dLFtbMTk1MDE5LDE5NTAxOV0sXCJtYXBwZWRcIixbMTYxOTY2XV0sW1sxOTUwMjAsMTk1MDIwXSxcIm1hcHBlZFwiLFsxNjIxNTBdXSxbWzE5NTAyMSwxOTUwMjFdLFwibWFwcGVkXCIsWzE4MTEwXV0sW1sxOTUwMjIsMTk1MDIyXSxcIm1hcHBlZFwiLFsxODExOV1dLFtbMTk1MDIzLDE5NTAyM10sXCJtYXBwZWRcIixbMzU0ODhdXSxbWzE5NTAyNCwxOTUwMjRdLFwibWFwcGVkXCIsWzM1NTY1XV0sW1sxOTUwMjUsMTk1MDI1XSxcIm1hcHBlZFwiLFszNTcyMl1dLFtbMTk1MDI2LDE5NTAyNl0sXCJtYXBwZWRcIixbMzU5MjVdXSxbWzE5NTAyNywxOTUwMjddLFwibWFwcGVkXCIsWzE2Mjk4NF1dLFtbMTk1MDI4LDE5NTAyOF0sXCJtYXBwZWRcIixbMzYwMTFdXSxbWzE5NTAyOSwxOTUwMjldLFwibWFwcGVkXCIsWzM2MDMzXV0sW1sxOTUwMzAsMTk1MDMwXSxcIm1hcHBlZFwiLFszNjEyM11dLFtbMTk1MDMxLDE5NTAzMV0sXCJtYXBwZWRcIixbMzYyMTVdXSxbWzE5NTAzMiwxOTUwMzJdLFwibWFwcGVkXCIsWzE2MzYzMV1dLFtbMTk1MDMzLDE5NTAzM10sXCJtYXBwZWRcIixbMTMzMTI0XV0sW1sxOTUwMzQsMTk1MDM0XSxcIm1hcHBlZFwiLFszNjI5OV1dLFtbMTk1MDM1LDE5NTAzNV0sXCJtYXBwZWRcIixbMzYyODRdXSxbWzE5NTAzNiwxOTUwMzZdLFwibWFwcGVkXCIsWzM2MzM2XV0sW1sxOTUwMzcsMTk1MDM3XSxcIm1hcHBlZFwiLFsxMzMzNDJdXSxbWzE5NTAzOCwxOTUwMzhdLFwibWFwcGVkXCIsWzM2NTY0XV0sW1sxOTUwMzksMTk1MDM5XSxcIm1hcHBlZFwiLFszNjY2NF1dLFtbMTk1MDQwLDE5NTA0MF0sXCJtYXBwZWRcIixbMTY1MzMwXV0sW1sxOTUwNDEsMTk1MDQxXSxcIm1hcHBlZFwiLFsxNjUzNTddXSxbWzE5NTA0MiwxOTUwNDJdLFwibWFwcGVkXCIsWzM3MDEyXV0sW1sxOTUwNDMsMTk1MDQzXSxcIm1hcHBlZFwiLFszNzEwNV1dLFtbMTk1MDQ0LDE5NTA0NF0sXCJtYXBwZWRcIixbMzcxMzddXSxbWzE5NTA0NSwxOTUwNDVdLFwibWFwcGVkXCIsWzE2NTY3OF1dLFtbMTk1MDQ2LDE5NTA0Nl0sXCJtYXBwZWRcIixbMzcxNDddXSxbWzE5NTA0NywxOTUwNDddLFwibWFwcGVkXCIsWzM3NDMyXV0sW1sxOTUwNDgsMTk1MDQ4XSxcIm1hcHBlZFwiLFszNzU5MV1dLFtbMTk1MDQ5LDE5NTA0OV0sXCJtYXBwZWRcIixbMzc1OTJdXSxbWzE5NTA1MCwxOTUwNTBdLFwibWFwcGVkXCIsWzM3NTAwXV0sW1sxOTUwNTEsMTk1MDUxXSxcIm1hcHBlZFwiLFszNzg4MV1dLFtbMTk1MDUyLDE5NTA1Ml0sXCJtYXBwZWRcIixbMzc5MDldXSxbWzE5NTA1MywxOTUwNTNdLFwibWFwcGVkXCIsWzE2NjkwNl1dLFtbMTk1MDU0LDE5NTA1NF0sXCJtYXBwZWRcIixbMzgyODNdXSxbWzE5NTA1NSwxOTUwNTVdLFwibWFwcGVkXCIsWzE4ODM3XV0sW1sxOTUwNTYsMTk1MDU2XSxcIm1hcHBlZFwiLFszODMyN11dLFtbMTk1MDU3LDE5NTA1N10sXCJtYXBwZWRcIixbMTY3Mjg3XV0sW1sxOTUwNTgsMTk1MDU4XSxcIm1hcHBlZFwiLFsxODkxOF1dLFtbMTk1MDU5LDE5NTA1OV0sXCJtYXBwZWRcIixbMzg1OTVdXSxbWzE5NTA2MCwxOTUwNjBdLFwibWFwcGVkXCIsWzIzOTg2XV0sW1sxOTUwNjEsMTk1MDYxXSxcIm1hcHBlZFwiLFszODY5MV1dLFtbMTk1MDYyLDE5NTA2Ml0sXCJtYXBwZWRcIixbMTY4MjYxXV0sW1sxOTUwNjMsMTk1MDYzXSxcIm1hcHBlZFwiLFsxNjg0NzRdXSxbWzE5NTA2NCwxOTUwNjRdLFwibWFwcGVkXCIsWzE5MDU0XV0sW1sxOTUwNjUsMTk1MDY1XSxcIm1hcHBlZFwiLFsxOTA2Ml1dLFtbMTk1MDY2LDE5NTA2Nl0sXCJtYXBwZWRcIixbMzg4ODBdXSxbWzE5NTA2NywxOTUwNjddLFwibWFwcGVkXCIsWzE2ODk3MF1dLFtbMTk1MDY4LDE5NTA2OF0sXCJtYXBwZWRcIixbMTkxMjJdXSxbWzE5NTA2OSwxOTUwNjldLFwibWFwcGVkXCIsWzE2OTExMF1dLFtbMTk1MDcwLDE5NTA3MV0sXCJtYXBwZWRcIixbMzg5MjNdXSxbWzE5NTA3MiwxOTUwNzJdLFwibWFwcGVkXCIsWzM4OTUzXV0sW1sxOTUwNzMsMTk1MDczXSxcIm1hcHBlZFwiLFsxNjkzOThdXSxbWzE5NTA3NCwxOTUwNzRdLFwibWFwcGVkXCIsWzM5MTM4XV0sW1sxOTUwNzUsMTk1MDc1XSxcIm1hcHBlZFwiLFsxOTI1MV1dLFtbMTk1MDc2LDE5NTA3Nl0sXCJtYXBwZWRcIixbMzkyMDldXSxbWzE5NTA3NywxOTUwNzddLFwibWFwcGVkXCIsWzM5MzM1XV0sW1sxOTUwNzgsMTk1MDc4XSxcIm1hcHBlZFwiLFszOTM2Ml1dLFtbMTk1MDc5LDE5NTA3OV0sXCJtYXBwZWRcIixbMzk0MjJdXSxbWzE5NTA4MCwxOTUwODBdLFwibWFwcGVkXCIsWzE5NDA2XV0sW1sxOTUwODEsMTk1MDgxXSxcIm1hcHBlZFwiLFsxNzA4MDBdXSxbWzE5NTA4MiwxOTUwODJdLFwibWFwcGVkXCIsWzM5Njk4XV0sW1sxOTUwODMsMTk1MDgzXSxcIm1hcHBlZFwiLFs0MDAwMF1dLFtbMTk1MDg0LDE5NTA4NF0sXCJtYXBwZWRcIixbNDAxODldXSxbWzE5NTA4NSwxOTUwODVdLFwibWFwcGVkXCIsWzE5NjYyXV0sW1sxOTUwODYsMTk1MDg2XSxcIm1hcHBlZFwiLFsxOTY5M11dLFtbMTk1MDg3LDE5NTA4N10sXCJtYXBwZWRcIixbNDAyOTVdXSxbWzE5NTA4OCwxOTUwODhdLFwibWFwcGVkXCIsWzE3MjIzOF1dLFtbMTk1MDg5LDE5NTA4OV0sXCJtYXBwZWRcIixbMTk3MDRdXSxbWzE5NTA5MCwxOTUwOTBdLFwibWFwcGVkXCIsWzE3MjI5M11dLFtbMTk1MDkxLDE5NTA5MV0sXCJtYXBwZWRcIixbMTcyNTU4XV0sW1sxOTUwOTIsMTk1MDkyXSxcIm1hcHBlZFwiLFsxNzI2ODldXSxbWzE5NTA5MywxOTUwOTNdLFwibWFwcGVkXCIsWzQwNjM1XV0sW1sxOTUwOTQsMTk1MDk0XSxcIm1hcHBlZFwiLFsxOTc5OF1dLFtbMTk1MDk1LDE5NTA5NV0sXCJtYXBwZWRcIixbNDA2OTddXSxbWzE5NTA5NiwxOTUwOTZdLFwibWFwcGVkXCIsWzQwNzAyXV0sW1sxOTUwOTcsMTk1MDk3XSxcIm1hcHBlZFwiLFs0MDcwOV1dLFtbMTk1MDk4LDE5NTA5OF0sXCJtYXBwZWRcIixbNDA3MTldXSxbWzE5NTA5OSwxOTUwOTldLFwibWFwcGVkXCIsWzQwNzI2XV0sW1sxOTUxMDAsMTk1MTAwXSxcIm1hcHBlZFwiLFs0MDc2M11dLFtbMTk1MTAxLDE5NTEwMV0sXCJtYXBwZWRcIixbMTczNTY4XV0sW1sxOTUxMDIsMTk2NjA1XSxcImRpc2FsbG93ZWRcIl0sW1sxOTY2MDYsMTk2NjA3XSxcImRpc2FsbG93ZWRcIl0sW1sxOTY2MDgsMjYyMTQxXSxcImRpc2FsbG93ZWRcIl0sW1syNjIxNDIsMjYyMTQzXSxcImRpc2FsbG93ZWRcIl0sW1syNjIxNDQsMzI3Njc3XSxcImRpc2FsbG93ZWRcIl0sW1szMjc2NzgsMzI3Njc5XSxcImRpc2FsbG93ZWRcIl0sW1szMjc2ODAsMzkzMjEzXSxcImRpc2FsbG93ZWRcIl0sW1szOTMyMTQsMzkzMjE1XSxcImRpc2FsbG93ZWRcIl0sW1szOTMyMTYsNDU4NzQ5XSxcImRpc2FsbG93ZWRcIl0sW1s0NTg3NTAsNDU4NzUxXSxcImRpc2FsbG93ZWRcIl0sW1s0NTg3NTIsNTI0Mjg1XSxcImRpc2FsbG93ZWRcIl0sW1s1MjQyODYsNTI0Mjg3XSxcImRpc2FsbG93ZWRcIl0sW1s1MjQyODgsNTg5ODIxXSxcImRpc2FsbG93ZWRcIl0sW1s1ODk4MjIsNTg5ODIzXSxcImRpc2FsbG93ZWRcIl0sW1s1ODk4MjQsNjU1MzU3XSxcImRpc2FsbG93ZWRcIl0sW1s2NTUzNTgsNjU1MzU5XSxcImRpc2FsbG93ZWRcIl0sW1s2NTUzNjAsNzIwODkzXSxcImRpc2FsbG93ZWRcIl0sW1s3MjA4OTQsNzIwODk1XSxcImRpc2FsbG93ZWRcIl0sW1s3MjA4OTYsNzg2NDI5XSxcImRpc2FsbG93ZWRcIl0sW1s3ODY0MzAsNzg2NDMxXSxcImRpc2FsbG93ZWRcIl0sW1s3ODY0MzIsODUxOTY1XSxcImRpc2FsbG93ZWRcIl0sW1s4NTE5NjYsODUxOTY3XSxcImRpc2FsbG93ZWRcIl0sW1s4NTE5NjgsOTE3NTAxXSxcImRpc2FsbG93ZWRcIl0sW1s5MTc1MDIsOTE3NTAzXSxcImRpc2FsbG93ZWRcIl0sW1s5MTc1MDQsOTE3NTA0XSxcImRpc2FsbG93ZWRcIl0sW1s5MTc1MDUsOTE3NTA1XSxcImRpc2FsbG93ZWRcIl0sW1s5MTc1MDYsOTE3NTM1XSxcImRpc2FsbG93ZWRcIl0sW1s5MTc1MzYsOTE3NjMxXSxcImRpc2FsbG93ZWRcIl0sW1s5MTc2MzIsOTE3NzU5XSxcImRpc2FsbG93ZWRcIl0sW1s5MTc3NjAsOTE3OTk5XSxcImlnbm9yZWRcIl0sW1s5MTgwMDAsOTgzMDM3XSxcImRpc2FsbG93ZWRcIl0sW1s5ODMwMzgsOTgzMDM5XSxcImRpc2FsbG93ZWRcIl0sW1s5ODMwNDAsMTA0ODU3M10sXCJkaXNhbGxvd2VkXCJdLFtbMTA0ODU3NCwxMDQ4NTc1XSxcImRpc2FsbG93ZWRcIl0sW1sxMDQ4NTc2LDExMTQxMDldLFwiZGlzYWxsb3dlZFwiXSxbWzExMTQxMTAsMTExNDExMV0sXCJkaXNhbGxvd2VkXCJdXSIsIid1c2Ugc3RyaWN0J1xuXG52YXIgbmV0ID0gcmVxdWlyZSgnbmV0JylcbiAgLCB0bHMgPSByZXF1aXJlKCd0bHMnKVxuICAsIGh0dHAgPSByZXF1aXJlKCdodHRwJylcbiAgLCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJylcbiAgLCBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKVxuICAsIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG4gICwgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuICAsIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG4gIDtcblxuZXhwb3J0cy5odHRwT3Zlckh0dHAgPSBodHRwT3Zlckh0dHBcbmV4cG9ydHMuaHR0cHNPdmVySHR0cCA9IGh0dHBzT3Zlckh0dHBcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHNcbmV4cG9ydHMuaHR0cHNPdmVySHR0cHMgPSBodHRwc092ZXJIdHRwc1xuXG5cbmZ1bmN0aW9uIGh0dHBPdmVySHR0cChvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKVxuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0XG4gIHJldHVybiBhZ2VudFxufVxuXG5mdW5jdGlvbiBodHRwc092ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpXG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3RcbiAgYWdlbnQuY3JlYXRlU29ja2V0ID0gY3JlYXRlU2VjdXJlU29ja2V0XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzXG4gIHJldHVybiBhZ2VudFxufVxuXG5mdW5jdGlvbiBodHRwT3Zlckh0dHBzKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpXG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0XG4gIHJldHVybiBhZ2VudFxufVxuXG5mdW5jdGlvbiBodHRwc092ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKVxuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cHMucmVxdWVzdFxuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXRcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDNcbiAgcmV0dXJuIGFnZW50XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgc2VsZi5vcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICBzZWxmLnByb3h5T3B0aW9ucyA9IHNlbGYub3B0aW9ucy5wcm94eSB8fCB7fVxuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzXG4gIHNlbGYucmVxdWVzdHMgPSBbXVxuICBzZWxmLnNvY2tldHMgPSBbXVxuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0KSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNlbGYucmVxdWVzdHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHZhciBwZW5kaW5nID0gc2VsZi5yZXF1ZXN0c1tpXVxuICAgICAgaWYgKHBlbmRpbmcuaG9zdCA9PT0gaG9zdCAmJiBwZW5kaW5nLnBvcnQgPT09IHBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSlcbiAgICAgICAgcGVuZGluZy5yZXF1ZXN0Lm9uU29ja2V0KHNvY2tldClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KClcbiAgICBzZWxmLnJlbW92ZVNvY2tldChzb2NrZXQpXG4gIH0pXG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKVxuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuYWRkUmVxdWVzdCA9IGZ1bmN0aW9uIGFkZFJlcXVlc3QocmVxLCBvcHRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gICAvLyBMZWdhY3kgQVBJOiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgcGF0aClcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBob3N0OiBvcHRpb25zLFxuICAgICAgcG9ydDogYXJndW1lbnRzWzJdLFxuICAgICAgcGF0aDogYXJndW1lbnRzWzNdXG4gICAgfTtcbiAgfVxuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKHtob3N0OiBvcHRpb25zLmhvc3QsIHBvcnQ6IG9wdGlvbnMucG9ydCwgcmVxdWVzdDogcmVxfSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlQ29ubmVjdGlvbih7aG9zdDogb3B0aW9ucy5ob3N0LCBwb3J0OiBvcHRpb25zLnBvcnQsIHJlcXVlc3Q6IHJlcX0pXG59XG5cblR1bm5lbGluZ0FnZW50LnByb3RvdHlwZS5jcmVhdGVDb25uZWN0aW9uID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGlvbihwZW5kaW5nKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIHNlbGYuY3JlYXRlU29ja2V0KHBlbmRpbmcsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSlcbiAgICBzb2NrZXQub24oJ2Nsb3NlJywgb25DbG9zZU9yUmVtb3ZlKVxuICAgIHNvY2tldC5vbignYWdlbnRSZW1vdmUnLCBvbkNsb3NlT3JSZW1vdmUpXG4gICAgcGVuZGluZy5yZXF1ZXN0Lm9uU29ja2V0KHNvY2tldClcblxuICAgIGZ1bmN0aW9uIG9uRnJlZSgpIHtcbiAgICAgIHNlbGYuZW1pdCgnZnJlZScsIHNvY2tldCwgcGVuZGluZy5ob3N0LCBwZW5kaW5nLnBvcnQpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25DbG9zZU9yUmVtb3ZlKGVycikge1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KVxuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdmcmVlJywgb25GcmVlKVxuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSlcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignYWdlbnRSZW1vdmUnLCBvbkNsb3NlT3JSZW1vdmUpXG4gICAgfVxuICB9KVxufVxuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuY3JlYXRlU29ja2V0ID0gZnVuY3Rpb24gY3JlYXRlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICB2YXIgcGxhY2Vob2xkZXIgPSB7fVxuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcilcblxuICB2YXIgY29ubmVjdE9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe30sIHNlbGYucHJveHlPcHRpb25zLFxuICAgIHsgbWV0aG9kOiAnQ09OTkVDVCdcbiAgICAsIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydFxuICAgICwgYWdlbnQ6IGZhbHNlXG4gICAgfVxuICApXG4gIGlmIChjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpIHtcbiAgICBjb25uZWN0T3B0aW9ucy5oZWFkZXJzID0gY29ubmVjdE9wdGlvbnMuaGVhZGVycyB8fCB7fVxuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgQnVmZmVyLmZyb20oY29ubmVjdE9wdGlvbnMucHJveHlBdXRoKS50b1N0cmluZygnYmFzZTY0JylcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0JylcbiAgdmFyIGNvbm5lY3RSZXEgPSBzZWxmLnJlcXVlc3QoY29ubmVjdE9wdGlvbnMpXG4gIGNvbm5lY3RSZXEudXNlQ2h1bmtlZEVuY29kaW5nQnlEZWZhdWx0ID0gZmFsc2UgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgndXBncmFkZScsIG9uVXBncmFkZSkgICAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpXG4gIGNvbm5lY3RSZXEuZW5kKClcblxuICBmdW5jdGlvbiBvblJlc3BvbnNlKHJlcykge1xuICAgIC8vIFZlcnkgaGFja3kuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGh0dHAtcGFyc2VyIGxlYWtzLlxuICAgIHJlcy51cGdyYWRlID0gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZClcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gb25Db25uZWN0KHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgY29ubmVjdFJlcS5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuXG4gICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgIGFzc2VydC5lcXVhbChoZWFkLmxlbmd0aCwgMClcbiAgICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKVxuICAgICAgc2VsZi5zb2NrZXRzW3NlbGYuc29ja2V0cy5pbmRleE9mKHBsYWNlaG9sZGVyKV0gPSBzb2NrZXRcbiAgICAgIGNiKHNvY2tldClcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBzdGF0dXNDb2RlPSVkJywgcmVzLnN0YXR1c0NvZGUpXG4gICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCAnICsgJ3N0YXR1c0NvZGU9JyArIHJlcy5zdGF0dXNDb2RlKVxuICAgICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJ1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpXG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkVycm9yKGNhdXNlKSB7XG4gICAgY29ubmVjdFJlcS5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsIGNhdXNlLm1lc3NhZ2UsIGNhdXNlLnN0YWNrKVxuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgKyAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpXG4gICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJ1xuICAgIG9wdGlvbnMucmVxdWVzdC5lbWl0KCdlcnJvcicsIGVycm9yKVxuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKVxuICB9XG59XG5cblR1bm5lbGluZ0FnZW50LnByb3RvdHlwZS5yZW1vdmVTb2NrZXQgPSBmdW5jdGlvbiByZW1vdmVTb2NrZXQoc29ja2V0KSB7XG4gIHZhciBwb3MgPSB0aGlzLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXG4gIGlmIChwb3MgPT09IC0xKSByZXR1cm5cblxuICB0aGlzLnNvY2tldHMuc3BsaWNlKHBvcywgMSlcblxuICB2YXIgcGVuZGluZyA9IHRoaXMucmVxdWVzdHMuc2hpZnQoKVxuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVDb25uZWN0aW9uKHBlbmRpbmcpXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBUdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuY3JlYXRlU29ja2V0LmNhbGwoc2VsZiwgb3B0aW9ucywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIG1lcmdlT3B0aW9ucyh7fSwgc2VsZi5vcHRpb25zLFxuICAgICAgeyBzZXJ2ZXJuYW1lOiBvcHRpb25zLmhvc3RcbiAgICAgICwgc29ja2V0OiBzb2NrZXRcbiAgICAgIH1cbiAgICApKVxuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldFxuICAgIGNiKHNlY3VyZVNvY2tldClcbiAgfSlcbn1cblxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldXG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcylcbiAgICAgIGZvciAodmFyIGogPSAwLCBrZXlMZW4gPSBrZXlzLmxlbmd0aDsgaiA8IGtleUxlbjsgKytqKSB7XG4gICAgICAgIHZhciBrID0ga2V5c1tqXVxuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0XG59XG5cblxudmFyIGRlYnVnXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpXG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgYXJnc1swXSA9ICdUVU5ORUw6ICcgKyBhcmdzWzBdXG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MudW5zaGlmdCgnVFVOTkVMOicpXG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncylcbiAgfVxufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbigpIHt9XG59XG5leHBvcnRzLmRlYnVnID0gZGVidWcgLy8gZm9yIHRlc3RcbiIsIihmdW5jdGlvbihuYWNsKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFBvcnRlZCBpbiAyMDE0IGJ5IERtaXRyeSBDaGVzdG55a2ggYW5kIERldmkgTWFuZGlyaS5cbi8vIFB1YmxpYyBkb21haW4uXG4vL1xuLy8gSW1wbGVtZW50YXRpb24gZGVyaXZlZCBmcm9tIFR3ZWV0TmFDbCB2ZXJzaW9uIDIwMTQwNDI3LlxuLy8gU2VlIGZvciBkZXRhaWxzOiBodHRwOi8vdHdlZXRuYWNsLmNyLnlwLnRvL1xuXG52YXIgZ2YgPSBmdW5jdGlvbihpbml0KSB7XG4gIHZhciBpLCByID0gbmV3IEZsb2F0NjRBcnJheSgxNik7XG4gIGlmIChpbml0KSBmb3IgKGkgPSAwOyBpIDwgaW5pdC5sZW5ndGg7IGkrKykgcltpXSA9IGluaXRbaV07XG4gIHJldHVybiByO1xufTtcblxuLy8gIFBsdWdnYWJsZSwgaW5pdGlhbGl6ZWQgaW4gaGlnaC1sZXZlbCBBUEkgYmVsb3cuXG52YXIgcmFuZG9tYnl0ZXMgPSBmdW5jdGlvbigvKiB4LCBuICovKSB7IHRocm93IG5ldyBFcnJvcignbm8gUFJORycpOyB9O1xuXG52YXIgXzAgPSBuZXcgVWludDhBcnJheSgxNik7XG52YXIgXzkgPSBuZXcgVWludDhBcnJheSgzMik7IF85WzBdID0gOTtcblxudmFyIGdmMCA9IGdmKCksXG4gICAgZ2YxID0gZ2YoWzFdKSxcbiAgICBfMTIxNjY1ID0gZ2YoWzB4ZGI0MSwgMV0pLFxuICAgIEQgPSBnZihbMHg3OGEzLCAweDEzNTksIDB4NGRjYSwgMHg3NWViLCAweGQ4YWIsIDB4NDE0MSwgMHgwYTRkLCAweDAwNzAsIDB4ZTg5OCwgMHg3Nzc5LCAweDQwNzksIDB4OGNjNywgMHhmZTczLCAweDJiNmYsIDB4NmNlZSwgMHg1MjAzXSksXG4gICAgRDIgPSBnZihbMHhmMTU5LCAweDI2YjIsIDB4OWI5NCwgMHhlYmQ2LCAweGIxNTYsIDB4ODI4MywgMHgxNDlhLCAweDAwZTAsIDB4ZDEzMCwgMHhlZWYzLCAweDgwZjIsIDB4MTk4ZSwgMHhmY2U3LCAweDU2ZGYsIDB4ZDlkYywgMHgyNDA2XSksXG4gICAgWCA9IGdmKFsweGQ1MWEsIDB4OGYyNSwgMHgyZDYwLCAweGM5NTYsIDB4YTdiMiwgMHg5NTI1LCAweGM3NjAsIDB4NjkyYywgMHhkYzVjLCAweGZkZDYsIDB4ZTIzMSwgMHhjMGE0LCAweDUzZmUsIDB4Y2Q2ZSwgMHgzNmQzLCAweDIxNjldKSxcbiAgICBZID0gZ2YoWzB4NjY1OCwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2Nl0pLFxuICAgIEkgPSBnZihbMHhhMGIwLCAweDRhMGUsIDB4MWIyNywgMHhjNGVlLCAweGU0NzgsIDB4YWQyZiwgMHgxODA2LCAweDJmNDMsIDB4ZDdhNywgMHgzZGZiLCAweDAwOTksIDB4MmI0ZCwgMHhkZjBiLCAweDRmYzEsIDB4MjQ4MCwgMHgyYjgzXSk7XG5cbmZ1bmN0aW9uIHRzNjQoeCwgaSwgaCwgbCkge1xuICB4W2ldICAgPSAoaCA+PiAyNCkgJiAweGZmO1xuICB4W2krMV0gPSAoaCA+PiAxNikgJiAweGZmO1xuICB4W2krMl0gPSAoaCA+PiAgOCkgJiAweGZmO1xuICB4W2krM10gPSBoICYgMHhmZjtcbiAgeFtpKzRdID0gKGwgPj4gMjQpICAmIDB4ZmY7XG4gIHhbaSs1XSA9IChsID4+IDE2KSAgJiAweGZmO1xuICB4W2krNl0gPSAobCA+PiAgOCkgICYgMHhmZjtcbiAgeFtpKzddID0gbCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIHZuKHgsIHhpLCB5LCB5aSwgbikge1xuICB2YXIgaSxkID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgZCB8PSB4W3hpK2ldXnlbeWkraV07XG4gIHJldHVybiAoMSAmICgoZCAtIDEpID4+PiA4KSkgLSAxO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fdmVyaWZ5XzE2KHgsIHhpLCB5LCB5aSkge1xuICByZXR1cm4gdm4oeCx4aSx5LHlpLDE2KTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3ZlcmlmeV8zMih4LCB4aSwgeSwgeWkpIHtcbiAgcmV0dXJuIHZuKHgseGkseSx5aSwzMik7XG59XG5cbmZ1bmN0aW9uIGNvcmVfc2Fsc2EyMChvLCBwLCBrLCBjKSB7XG4gIHZhciBqMCAgPSBjWyAwXSAmIDB4ZmYgfCAoY1sgMV0gJiAweGZmKTw8OCB8IChjWyAyXSAmIDB4ZmYpPDwxNiB8IChjWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxICA9IGtbIDBdICYgMHhmZiB8IChrWyAxXSAmIDB4ZmYpPDw4IHwgKGtbIDJdICYgMHhmZik8PDE2IHwgKGtbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajIgID0ga1sgNF0gJiAweGZmIHwgKGtbIDVdICYgMHhmZik8PDggfCAoa1sgNl0gJiAweGZmKTw8MTYgfCAoa1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqMyAgPSBrWyA4XSAmIDB4ZmYgfCAoa1sgOV0gJiAweGZmKTw8OCB8IChrWzEwXSAmIDB4ZmYpPDwxNiB8IChrWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo0ICA9IGtbMTJdICYgMHhmZiB8IChrWzEzXSAmIDB4ZmYpPDw4IHwgKGtbMTRdICYgMHhmZik8PDE2IHwgKGtbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajUgID0gY1sgNF0gJiAweGZmIHwgKGNbIDVdICYgMHhmZik8PDggfCAoY1sgNl0gJiAweGZmKTw8MTYgfCAoY1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqNiAgPSBwWyAwXSAmIDB4ZmYgfCAocFsgMV0gJiAweGZmKTw8OCB8IChwWyAyXSAmIDB4ZmYpPDwxNiB8IChwWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo3ICA9IHBbIDRdICYgMHhmZiB8IChwWyA1XSAmIDB4ZmYpPDw4IHwgKHBbIDZdICYgMHhmZik8PDE2IHwgKHBbIDddICYgMHhmZik8PDI0LFxuICAgICAgajggID0gcFsgOF0gJiAweGZmIHwgKHBbIDldICYgMHhmZik8PDggfCAocFsxMF0gJiAweGZmKTw8MTYgfCAocFsxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqOSAgPSBwWzEyXSAmIDB4ZmYgfCAocFsxM10gJiAweGZmKTw8OCB8IChwWzE0XSAmIDB4ZmYpPDwxNiB8IChwWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMCA9IGNbIDhdICYgMHhmZiB8IChjWyA5XSAmIDB4ZmYpPDw4IHwgKGNbMTBdICYgMHhmZik8PDE2IHwgKGNbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajExID0ga1sxNl0gJiAweGZmIHwgKGtbMTddICYgMHhmZik8PDggfCAoa1sxOF0gJiAweGZmKTw8MTYgfCAoa1sxOV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTIgPSBrWzIwXSAmIDB4ZmYgfCAoa1syMV0gJiAweGZmKTw8OCB8IChrWzIyXSAmIDB4ZmYpPDwxNiB8IChrWzIzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMyA9IGtbMjRdICYgMHhmZiB8IChrWzI1XSAmIDB4ZmYpPDw4IHwgKGtbMjZdICYgMHhmZik8PDE2IHwgKGtbMjddICYgMHhmZik8PDI0LFxuICAgICAgajE0ID0ga1syOF0gJiAweGZmIHwgKGtbMjldICYgMHhmZik8PDggfCAoa1szMF0gJiAweGZmKTw8MTYgfCAoa1szMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTUgPSBjWzEyXSAmIDB4ZmYgfCAoY1sxM10gJiAweGZmKTw8OCB8IChjWzE0XSAmIDB4ZmYpPDwxNiB8IChjWzE1XSAmIDB4ZmYpPDwyNDtcblxuICB2YXIgeDAgPSBqMCwgeDEgPSBqMSwgeDIgPSBqMiwgeDMgPSBqMywgeDQgPSBqNCwgeDUgPSBqNSwgeDYgPSBqNiwgeDcgPSBqNyxcbiAgICAgIHg4ID0gajgsIHg5ID0gajksIHgxMCA9IGoxMCwgeDExID0gajExLCB4MTIgPSBqMTIsIHgxMyA9IGoxMywgeDE0ID0gajE0LFxuICAgICAgeDE1ID0gajE1LCB1O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkgKz0gMikge1xuICAgIHUgPSB4MCArIHgxMiB8IDA7XG4gICAgeDQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg0ICsgeDAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHg0IHwgMDtcbiAgICB4MTIgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEyICsgeDggfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4MSB8IDA7XG4gICAgeDkgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg5ICsgeDUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDkgfCAwO1xuICAgIHgxIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxICsgeDEzIHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg2IHwgMDtcbiAgICB4MTQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxNCArIHgxMCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDE0IHwgMDtcbiAgICB4NiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NiArIHgyIHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTEgfCAwO1xuICAgIHgzIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MyArIHgxNSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDMgfCAwO1xuICAgIHgxMSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTEgKyB4NyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDAgKyB4MyB8IDA7XG4gICAgeDEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxICsgeDAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxIHwgMDtcbiAgICB4MyBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MyArIHgyIHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDQgfCAwO1xuICAgIHg2IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NiArIHg1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4NiB8IDA7XG4gICAgeDQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDQgKyB4NyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4OSB8IDA7XG4gICAgeDExIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTEgKyB4MTAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHgxMSB8IDA7XG4gICAgeDkgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDkgKyB4OCB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDE0IHwgMDtcbiAgICB4MTIgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMiArIHgxNSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4MTIgfCAwO1xuICAgIHgxNCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTQgKyB4MTMgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuICB9XG4gICB4MCA9ICB4MCArICBqMCB8IDA7XG4gICB4MSA9ICB4MSArICBqMSB8IDA7XG4gICB4MiA9ICB4MiArICBqMiB8IDA7XG4gICB4MyA9ICB4MyArICBqMyB8IDA7XG4gICB4NCA9ICB4NCArICBqNCB8IDA7XG4gICB4NSA9ICB4NSArICBqNSB8IDA7XG4gICB4NiA9ICB4NiArICBqNiB8IDA7XG4gICB4NyA9ICB4NyArICBqNyB8IDA7XG4gICB4OCA9ICB4OCArICBqOCB8IDA7XG4gICB4OSA9ICB4OSArICBqOSB8IDA7XG4gIHgxMCA9IHgxMCArIGoxMCB8IDA7XG4gIHgxMSA9IHgxMSArIGoxMSB8IDA7XG4gIHgxMiA9IHgxMiArIGoxMiB8IDA7XG4gIHgxMyA9IHgxMyArIGoxMyB8IDA7XG4gIHgxNCA9IHgxNCArIGoxNCB8IDA7XG4gIHgxNSA9IHgxNSArIGoxNSB8IDA7XG5cbiAgb1sgMF0gPSB4MCA+Pj4gIDAgJiAweGZmO1xuICBvWyAxXSA9IHgwID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDJdID0geDAgPj4+IDE2ICYgMHhmZjtcbiAgb1sgM10gPSB4MCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDRdID0geDEgPj4+ICAwICYgMHhmZjtcbiAgb1sgNV0gPSB4MSA+Pj4gIDggJiAweGZmO1xuICBvWyA2XSA9IHgxID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDddID0geDEgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA4XSA9IHgyID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDldID0geDIgPj4+ICA4ICYgMHhmZjtcbiAgb1sxMF0gPSB4MiA+Pj4gMTYgJiAweGZmO1xuICBvWzExXSA9IHgyID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxMl0gPSB4MyA+Pj4gIDAgJiAweGZmO1xuICBvWzEzXSA9IHgzID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTRdID0geDMgPj4+IDE2ICYgMHhmZjtcbiAgb1sxNV0gPSB4MyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTZdID0geDQgPj4+ICAwICYgMHhmZjtcbiAgb1sxN10gPSB4NCA+Pj4gIDggJiAweGZmO1xuICBvWzE4XSA9IHg0ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTldID0geDQgPj4+IDI0ICYgMHhmZjtcblxuICBvWzIwXSA9IHg1ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjFdID0geDUgPj4+ICA4ICYgMHhmZjtcbiAgb1syMl0gPSB4NSA+Pj4gMTYgJiAweGZmO1xuICBvWzIzXSA9IHg1ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syNF0gPSB4NiA+Pj4gIDAgJiAweGZmO1xuICBvWzI1XSA9IHg2ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjZdID0geDYgPj4+IDE2ICYgMHhmZjtcbiAgb1syN10gPSB4NiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjhdID0geDcgPj4+ICAwICYgMHhmZjtcbiAgb1syOV0gPSB4NyA+Pj4gIDggJiAweGZmO1xuICBvWzMwXSA9IHg3ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMzFdID0geDcgPj4+IDI0ICYgMHhmZjtcblxuICBvWzMyXSA9IHg4ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMzNdID0geDggPj4+ICA4ICYgMHhmZjtcbiAgb1szNF0gPSB4OCA+Pj4gMTYgJiAweGZmO1xuICBvWzM1XSA9IHg4ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1szNl0gPSB4OSA+Pj4gIDAgJiAweGZmO1xuICBvWzM3XSA9IHg5ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzhdID0geDkgPj4+IDE2ICYgMHhmZjtcbiAgb1szOV0gPSB4OSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNDBdID0geDEwID4+PiAgMCAmIDB4ZmY7XG4gIG9bNDFdID0geDEwID4+PiAgOCAmIDB4ZmY7XG4gIG9bNDJdID0geDEwID4+PiAxNiAmIDB4ZmY7XG4gIG9bNDNdID0geDEwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s0NF0gPSB4MTEgPj4+ICAwICYgMHhmZjtcbiAgb1s0NV0gPSB4MTEgPj4+ICA4ICYgMHhmZjtcbiAgb1s0Nl0gPSB4MTEgPj4+IDE2ICYgMHhmZjtcbiAgb1s0N10gPSB4MTEgPj4+IDI0ICYgMHhmZjtcblxuICBvWzQ4XSA9IHgxMiA+Pj4gIDAgJiAweGZmO1xuICBvWzQ5XSA9IHgxMiA+Pj4gIDggJiAweGZmO1xuICBvWzUwXSA9IHgxMiA+Pj4gMTYgJiAweGZmO1xuICBvWzUxXSA9IHgxMiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNTJdID0geDEzID4+PiAgMCAmIDB4ZmY7XG4gIG9bNTNdID0geDEzID4+PiAgOCAmIDB4ZmY7XG4gIG9bNTRdID0geDEzID4+PiAxNiAmIDB4ZmY7XG4gIG9bNTVdID0geDEzID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s1Nl0gPSB4MTQgPj4+ICAwICYgMHhmZjtcbiAgb1s1N10gPSB4MTQgPj4+ICA4ICYgMHhmZjtcbiAgb1s1OF0gPSB4MTQgPj4+IDE2ICYgMHhmZjtcbiAgb1s1OV0gPSB4MTQgPj4+IDI0ICYgMHhmZjtcblxuICBvWzYwXSA9IHgxNSA+Pj4gIDAgJiAweGZmO1xuICBvWzYxXSA9IHgxNSA+Pj4gIDggJiAweGZmO1xuICBvWzYyXSA9IHgxNSA+Pj4gMTYgJiAweGZmO1xuICBvWzYzXSA9IHgxNSA+Pj4gMjQgJiAweGZmO1xufVxuXG5mdW5jdGlvbiBjb3JlX2hzYWxzYTIwKG8scCxrLGMpIHtcbiAgdmFyIGowICA9IGNbIDBdICYgMHhmZiB8IChjWyAxXSAmIDB4ZmYpPDw4IHwgKGNbIDJdICYgMHhmZik8PDE2IHwgKGNbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajEgID0ga1sgMF0gJiAweGZmIHwgKGtbIDFdICYgMHhmZik8PDggfCAoa1sgMl0gJiAweGZmKTw8MTYgfCAoa1sgM10gJiAweGZmKTw8MjQsXG4gICAgICBqMiAgPSBrWyA0XSAmIDB4ZmYgfCAoa1sgNV0gJiAweGZmKTw8OCB8IChrWyA2XSAmIDB4ZmYpPDwxNiB8IChrWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGozICA9IGtbIDhdICYgMHhmZiB8IChrWyA5XSAmIDB4ZmYpPDw4IHwgKGtbMTBdICYgMHhmZik8PDE2IHwgKGtbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajQgID0ga1sxMl0gJiAweGZmIHwgKGtbMTNdICYgMHhmZik8PDggfCAoa1sxNF0gJiAweGZmKTw8MTYgfCAoa1sxNV0gJiAweGZmKTw8MjQsXG4gICAgICBqNSAgPSBjWyA0XSAmIDB4ZmYgfCAoY1sgNV0gJiAweGZmKTw8OCB8IChjWyA2XSAmIDB4ZmYpPDwxNiB8IChjWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo2ICA9IHBbIDBdICYgMHhmZiB8IChwWyAxXSAmIDB4ZmYpPDw4IHwgKHBbIDJdICYgMHhmZik8PDE2IHwgKHBbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajcgID0gcFsgNF0gJiAweGZmIHwgKHBbIDVdICYgMHhmZik8PDggfCAocFsgNl0gJiAweGZmKTw8MTYgfCAocFsgN10gJiAweGZmKTw8MjQsXG4gICAgICBqOCAgPSBwWyA4XSAmIDB4ZmYgfCAocFsgOV0gJiAweGZmKTw8OCB8IChwWzEwXSAmIDB4ZmYpPDwxNiB8IChwWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo5ICA9IHBbMTJdICYgMHhmZiB8IChwWzEzXSAmIDB4ZmYpPDw4IHwgKHBbMTRdICYgMHhmZik8PDE2IHwgKHBbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajEwID0gY1sgOF0gJiAweGZmIHwgKGNbIDldICYgMHhmZik8PDggfCAoY1sxMF0gJiAweGZmKTw8MTYgfCAoY1sxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTEgPSBrWzE2XSAmIDB4ZmYgfCAoa1sxN10gJiAweGZmKTw8OCB8IChrWzE4XSAmIDB4ZmYpPDwxNiB8IChrWzE5XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMiA9IGtbMjBdICYgMHhmZiB8IChrWzIxXSAmIDB4ZmYpPDw4IHwgKGtbMjJdICYgMHhmZik8PDE2IHwgKGtbMjNdICYgMHhmZik8PDI0LFxuICAgICAgajEzID0ga1syNF0gJiAweGZmIHwgKGtbMjVdICYgMHhmZik8PDggfCAoa1syNl0gJiAweGZmKTw8MTYgfCAoa1syN10gJiAweGZmKTw8MjQsXG4gICAgICBqMTQgPSBrWzI4XSAmIDB4ZmYgfCAoa1syOV0gJiAweGZmKTw8OCB8IChrWzMwXSAmIDB4ZmYpPDwxNiB8IChrWzMxXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxNSA9IGNbMTJdICYgMHhmZiB8IChjWzEzXSAmIDB4ZmYpPDw4IHwgKGNbMTRdICYgMHhmZik8PDE2IHwgKGNbMTVdICYgMHhmZik8PDI0O1xuXG4gIHZhciB4MCA9IGowLCB4MSA9IGoxLCB4MiA9IGoyLCB4MyA9IGozLCB4NCA9IGo0LCB4NSA9IGo1LCB4NiA9IGo2LCB4NyA9IGo3LFxuICAgICAgeDggPSBqOCwgeDkgPSBqOSwgeDEwID0gajEwLCB4MTEgPSBqMTEsIHgxMiA9IGoxMiwgeDEzID0gajEzLCB4MTQgPSBqMTQsXG4gICAgICB4MTUgPSBqMTUsIHU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSArPSAyKSB7XG4gICAgdSA9IHgwICsgeDEyIHwgMDtcbiAgICB4NCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDQgKyB4MCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDQgfCAwO1xuICAgIHgxMiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTIgKyB4OCB8IDA7XG4gICAgeDAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4NSArIHgxIHwgMDtcbiAgICB4OSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDkgKyB4NSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4OSB8IDA7XG4gICAgeDEgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEgKyB4MTMgfCAwO1xuICAgIHg1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDEwICsgeDYgfCAwO1xuICAgIHgxNCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDE0ICsgeDEwIHwgMDtcbiAgICB4MiBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDIgKyB4MTQgfCAwO1xuICAgIHg2IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg2ICsgeDIgfCAwO1xuICAgIHgxMCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxNSArIHgxMSB8IDA7XG4gICAgeDMgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgzICsgeDE1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4MyB8IDA7XG4gICAgeDExIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxMSArIHg3IHwgMDtcbiAgICB4MTUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MCArIHgzIHwgMDtcbiAgICB4MSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEgKyB4MCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDEgfCAwO1xuICAgIHgzIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgzICsgeDIgfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4NCB8IDA7XG4gICAgeDYgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg2ICsgeDUgfCAwO1xuICAgIHg3IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4NyArIHg2IHwgMDtcbiAgICB4NCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NCArIHg3IHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg5IHwgMDtcbiAgICB4MTEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMSArIHgxMCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDExIHwgMDtcbiAgICB4OSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4OSArIHg4IHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTQgfCAwO1xuICAgIHgxMiBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEyICsgeDE1IHwgMDtcbiAgICB4MTMgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgxMyArIHgxMiB8IDA7XG4gICAgeDE0IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxNCArIHgxMyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG4gIH1cblxuICBvWyAwXSA9IHgwID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDFdID0geDAgPj4+ICA4ICYgMHhmZjtcbiAgb1sgMl0gPSB4MCA+Pj4gMTYgJiAweGZmO1xuICBvWyAzXSA9IHgwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sgNF0gPSB4NSA+Pj4gIDAgJiAweGZmO1xuICBvWyA1XSA9IHg1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDZdID0geDUgPj4+IDE2ICYgMHhmZjtcbiAgb1sgN10gPSB4NSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDhdID0geDEwID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDldID0geDEwID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTBdID0geDEwID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTFdID0geDEwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxMl0gPSB4MTUgPj4+ICAwICYgMHhmZjtcbiAgb1sxM10gPSB4MTUgPj4+ICA4ICYgMHhmZjtcbiAgb1sxNF0gPSB4MTUgPj4+IDE2ICYgMHhmZjtcbiAgb1sxNV0gPSB4MTUgPj4+IDI0ICYgMHhmZjtcblxuICBvWzE2XSA9IHg2ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTddID0geDYgPj4+ICA4ICYgMHhmZjtcbiAgb1sxOF0gPSB4NiA+Pj4gMTYgJiAweGZmO1xuICBvWzE5XSA9IHg2ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syMF0gPSB4NyA+Pj4gIDAgJiAweGZmO1xuICBvWzIxXSA9IHg3ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjJdID0geDcgPj4+IDE2ICYgMHhmZjtcbiAgb1syM10gPSB4NyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjRdID0geDggPj4+ICAwICYgMHhmZjtcbiAgb1syNV0gPSB4OCA+Pj4gIDggJiAweGZmO1xuICBvWzI2XSA9IHg4ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjddID0geDggPj4+IDI0ICYgMHhmZjtcblxuICBvWzI4XSA9IHg5ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjldID0geDkgPj4+ICA4ICYgMHhmZjtcbiAgb1szMF0gPSB4OSA+Pj4gMTYgJiAweGZmO1xuICBvWzMxXSA9IHg5ID4+PiAyNCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19jb3JlX3NhbHNhMjAob3V0LGlucCxrLGMpIHtcbiAgY29yZV9zYWxzYTIwKG91dCxpbnAsayxjKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2NvcmVfaHNhbHNhMjAob3V0LGlucCxrLGMpIHtcbiAgY29yZV9oc2Fsc2EyMChvdXQsaW5wLGssYyk7XG59XG5cbnZhciBzaWdtYSA9IG5ldyBVaW50OEFycmF5KFsxMDEsIDEyMCwgMTEyLCA5NywgMTEwLCAxMDAsIDMyLCA1MSwgNTAsIDQ1LCA5OCwgMTIxLCAxMTYsIDEwMSwgMzIsIDEwN10pO1xuICAgICAgICAgICAgLy8gXCJleHBhbmQgMzItYnl0ZSBrXCJcblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcihjLGNwb3MsbSxtcG9zLGIsbixrKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMTYpLCB4ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgdSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHpbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB6W2ldID0gbltpXTtcbiAgd2hpbGUgKGIgPj0gNjQpIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgY1tjcG9zK2ldID0gbVttcG9zK2ldIF4geFtpXTtcbiAgICB1ID0gMTtcbiAgICBmb3IgKGkgPSA4OyBpIDwgMTY7IGkrKykge1xuICAgICAgdSA9IHUgKyAoeltpXSAmIDB4ZmYpIHwgMDtcbiAgICAgIHpbaV0gPSB1ICYgMHhmZjtcbiAgICAgIHUgPj4+PSA4O1xuICAgIH1cbiAgICBiIC09IDY0O1xuICAgIGNwb3MgKz0gNjQ7XG4gICAgbXBvcyArPSA2NDtcbiAgfVxuICBpZiAoYiA+IDApIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYjsgaSsrKSBjW2Nwb3MraV0gPSBtW21wb3MraV0gXiB4W2ldO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAoYyxjcG9zLGIsbixrKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMTYpLCB4ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgdSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHpbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB6W2ldID0gbltpXTtcbiAgd2hpbGUgKGIgPj0gNjQpIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgY1tjcG9zK2ldID0geFtpXTtcbiAgICB1ID0gMTtcbiAgICBmb3IgKGkgPSA4OyBpIDwgMTY7IGkrKykge1xuICAgICAgdSA9IHUgKyAoeltpXSAmIDB4ZmYpIHwgMDtcbiAgICAgIHpbaV0gPSB1ICYgMHhmZjtcbiAgICAgIHUgPj4+PSA4O1xuICAgIH1cbiAgICBiIC09IDY0O1xuICAgIGNwb3MgKz0gNjQ7XG4gIH1cbiAgaWYgKGIgPiAwKSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IGI7IGkrKykgY1tjcG9zK2ldID0geFtpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbShjLGNwb3MsZCxuLGspIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19jb3JlX2hzYWxzYTIwKHMsbixrLHNpZ21hKTtcbiAgdmFyIHNuID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBzbltpXSA9IG5baSsxNl07XG4gIHJldHVybiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAoYyxjcG9zLGQsc24scyk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW1feG9yKGMsY3BvcyxtLG1wb3MsZCxuLGspIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19jb3JlX2hzYWxzYTIwKHMsbixrLHNpZ21hKTtcbiAgdmFyIHNuID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBzbltpXSA9IG5baSsxNl07XG4gIHJldHVybiBjcnlwdG9fc3RyZWFtX3NhbHNhMjBfeG9yKGMsY3BvcyxtLG1wb3MsZCxzbixzKTtcbn1cblxuLypcbiogUG9ydCBvZiBBbmRyZXcgTW9vbidzIFBvbHkxMzA1LWRvbm5hLTE2LiBQdWJsaWMgZG9tYWluLlxuKiBodHRwczovL2dpdGh1Yi5jb20vZmxvb2R5YmVycnkvcG9seTEzMDUtZG9ubmFcbiovXG5cbnZhciBwb2x5MTMwNSA9IGZ1bmN0aW9uKGtleSkge1xuICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgdGhpcy5yID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdGhpcy5oID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdGhpcy5wYWQgPSBuZXcgVWludDE2QXJyYXkoOCk7XG4gIHRoaXMubGVmdG92ZXIgPSAwO1xuICB0aGlzLmZpbiA9IDA7XG5cbiAgdmFyIHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NztcblxuICB0MCA9IGtleVsgMF0gJiAweGZmIHwgKGtleVsgMV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbMF0gPSAoIHQwICAgICAgICAgICAgICAgICAgICAgKSAmIDB4MWZmZjtcbiAgdDEgPSBrZXlbIDJdICYgMHhmZiB8IChrZXlbIDNdICYgMHhmZikgPDwgODsgdGhpcy5yWzFdID0gKCh0MCA+Pj4gMTMpIHwgKHQxIDw8ICAzKSkgJiAweDFmZmY7XG4gIHQyID0ga2V5WyA0XSAmIDB4ZmYgfCAoa2V5WyA1XSAmIDB4ZmYpIDw8IDg7IHRoaXMuclsyXSA9ICgodDEgPj4+IDEwKSB8ICh0MiA8PCAgNikpICYgMHgxZjAzO1xuICB0MyA9IGtleVsgNl0gJiAweGZmIHwgKGtleVsgN10gJiAweGZmKSA8PCA4OyB0aGlzLnJbM10gPSAoKHQyID4+PiAgNykgfCAodDMgPDwgIDkpKSAmIDB4MWZmZjtcbiAgdDQgPSBrZXlbIDhdICYgMHhmZiB8IChrZXlbIDldICYgMHhmZikgPDwgODsgdGhpcy5yWzRdID0gKCh0MyA+Pj4gIDQpIHwgKHQ0IDw8IDEyKSkgJiAweDAwZmY7XG4gIHRoaXMucls1XSA9ICgodDQgPj4+ICAxKSkgJiAweDFmZmU7XG4gIHQ1ID0ga2V5WzEwXSAmIDB4ZmYgfCAoa2V5WzExXSAmIDB4ZmYpIDw8IDg7IHRoaXMucls2XSA9ICgodDQgPj4+IDE0KSB8ICh0NSA8PCAgMikpICYgMHgxZmZmO1xuICB0NiA9IGtleVsxMl0gJiAweGZmIHwgKGtleVsxM10gJiAweGZmKSA8PCA4OyB0aGlzLnJbN10gPSAoKHQ1ID4+PiAxMSkgfCAodDYgPDwgIDUpKSAmIDB4MWY4MTtcbiAgdDcgPSBrZXlbMTRdICYgMHhmZiB8IChrZXlbMTVdICYgMHhmZikgPDwgODsgdGhpcy5yWzhdID0gKCh0NiA+Pj4gIDgpIHwgKHQ3IDw8ICA4KSkgJiAweDFmZmY7XG4gIHRoaXMucls5XSA9ICgodDcgPj4+ICA1KSkgJiAweDAwN2Y7XG5cbiAgdGhpcy5wYWRbMF0gPSBrZXlbMTZdICYgMHhmZiB8IChrZXlbMTddICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbMV0gPSBrZXlbMThdICYgMHhmZiB8IChrZXlbMTldICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbMl0gPSBrZXlbMjBdICYgMHhmZiB8IChrZXlbMjFdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbM10gPSBrZXlbMjJdICYgMHhmZiB8IChrZXlbMjNdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNF0gPSBrZXlbMjRdICYgMHhmZiB8IChrZXlbMjVdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNV0gPSBrZXlbMjZdICYgMHhmZiB8IChrZXlbMjddICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNl0gPSBrZXlbMjhdICYgMHhmZiB8IChrZXlbMjldICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbN10gPSBrZXlbMzBdICYgMHhmZiB8IChrZXlbMzFdICYgMHhmZikgPDwgODtcbn07XG5cbnBvbHkxMzA1LnByb3RvdHlwZS5ibG9ja3MgPSBmdW5jdGlvbihtLCBtcG9zLCBieXRlcykge1xuICB2YXIgaGliaXQgPSB0aGlzLmZpbiA/IDAgOiAoMSA8PCAxMSk7XG4gIHZhciB0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIGM7XG4gIHZhciBkMCwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcsIGQ4LCBkOTtcblxuICB2YXIgaDAgPSB0aGlzLmhbMF0sXG4gICAgICBoMSA9IHRoaXMuaFsxXSxcbiAgICAgIGgyID0gdGhpcy5oWzJdLFxuICAgICAgaDMgPSB0aGlzLmhbM10sXG4gICAgICBoNCA9IHRoaXMuaFs0XSxcbiAgICAgIGg1ID0gdGhpcy5oWzVdLFxuICAgICAgaDYgPSB0aGlzLmhbNl0sXG4gICAgICBoNyA9IHRoaXMuaFs3XSxcbiAgICAgIGg4ID0gdGhpcy5oWzhdLFxuICAgICAgaDkgPSB0aGlzLmhbOV07XG5cbiAgdmFyIHIwID0gdGhpcy5yWzBdLFxuICAgICAgcjEgPSB0aGlzLnJbMV0sXG4gICAgICByMiA9IHRoaXMuclsyXSxcbiAgICAgIHIzID0gdGhpcy5yWzNdLFxuICAgICAgcjQgPSB0aGlzLnJbNF0sXG4gICAgICByNSA9IHRoaXMucls1XSxcbiAgICAgIHI2ID0gdGhpcy5yWzZdLFxuICAgICAgcjcgPSB0aGlzLnJbN10sXG4gICAgICByOCA9IHRoaXMucls4XSxcbiAgICAgIHI5ID0gdGhpcy5yWzldO1xuXG4gIHdoaWxlIChieXRlcyA+PSAxNikge1xuICAgIHQwID0gbVttcG9zKyAwXSAmIDB4ZmYgfCAobVttcG9zKyAxXSAmIDB4ZmYpIDw8IDg7IGgwICs9ICggdDAgICAgICAgICAgICAgICAgICAgICApICYgMHgxZmZmO1xuICAgIHQxID0gbVttcG9zKyAyXSAmIDB4ZmYgfCAobVttcG9zKyAzXSAmIDB4ZmYpIDw8IDg7IGgxICs9ICgodDAgPj4+IDEzKSB8ICh0MSA8PCAgMykpICYgMHgxZmZmO1xuICAgIHQyID0gbVttcG9zKyA0XSAmIDB4ZmYgfCAobVttcG9zKyA1XSAmIDB4ZmYpIDw8IDg7IGgyICs9ICgodDEgPj4+IDEwKSB8ICh0MiA8PCAgNikpICYgMHgxZmZmO1xuICAgIHQzID0gbVttcG9zKyA2XSAmIDB4ZmYgfCAobVttcG9zKyA3XSAmIDB4ZmYpIDw8IDg7IGgzICs9ICgodDIgPj4+ICA3KSB8ICh0MyA8PCAgOSkpICYgMHgxZmZmO1xuICAgIHQ0ID0gbVttcG9zKyA4XSAmIDB4ZmYgfCAobVttcG9zKyA5XSAmIDB4ZmYpIDw8IDg7IGg0ICs9ICgodDMgPj4+ICA0KSB8ICh0NCA8PCAxMikpICYgMHgxZmZmO1xuICAgIGg1ICs9ICgodDQgPj4+ICAxKSkgJiAweDFmZmY7XG4gICAgdDUgPSBtW21wb3MrMTBdICYgMHhmZiB8IChtW21wb3MrMTFdICYgMHhmZikgPDwgODsgaDYgKz0gKCh0NCA+Pj4gMTQpIHwgKHQ1IDw8ICAyKSkgJiAweDFmZmY7XG4gICAgdDYgPSBtW21wb3MrMTJdICYgMHhmZiB8IChtW21wb3MrMTNdICYgMHhmZikgPDwgODsgaDcgKz0gKCh0NSA+Pj4gMTEpIHwgKHQ2IDw8ICA1KSkgJiAweDFmZmY7XG4gICAgdDcgPSBtW21wb3MrMTRdICYgMHhmZiB8IChtW21wb3MrMTVdICYgMHhmZikgPDwgODsgaDggKz0gKCh0NiA+Pj4gIDgpIHwgKHQ3IDw8ICA4KSkgJiAweDFmZmY7XG4gICAgaDkgKz0gKCh0NyA+Pj4gNSkpIHwgaGliaXQ7XG5cbiAgICBjID0gMDtcblxuICAgIGQwID0gYztcbiAgICBkMCArPSBoMCAqIHIwO1xuICAgIGQwICs9IGgxICogKDUgKiByOSk7XG4gICAgZDAgKz0gaDIgKiAoNSAqIHI4KTtcbiAgICBkMCArPSBoMyAqICg1ICogcjcpO1xuICAgIGQwICs9IGg0ICogKDUgKiByNik7XG4gICAgYyA9IChkMCA+Pj4gMTMpOyBkMCAmPSAweDFmZmY7XG4gICAgZDAgKz0gaDUgKiAoNSAqIHI1KTtcbiAgICBkMCArPSBoNiAqICg1ICogcjQpO1xuICAgIGQwICs9IGg3ICogKDUgKiByMyk7XG4gICAgZDAgKz0gaDggKiAoNSAqIHIyKTtcbiAgICBkMCArPSBoOSAqICg1ICogcjEpO1xuICAgIGMgKz0gKGQwID4+PiAxMyk7IGQwICY9IDB4MWZmZjtcblxuICAgIGQxID0gYztcbiAgICBkMSArPSBoMCAqIHIxO1xuICAgIGQxICs9IGgxICogcjA7XG4gICAgZDEgKz0gaDIgKiAoNSAqIHI5KTtcbiAgICBkMSArPSBoMyAqICg1ICogcjgpO1xuICAgIGQxICs9IGg0ICogKDUgKiByNyk7XG4gICAgYyA9IChkMSA+Pj4gMTMpOyBkMSAmPSAweDFmZmY7XG4gICAgZDEgKz0gaDUgKiAoNSAqIHI2KTtcbiAgICBkMSArPSBoNiAqICg1ICogcjUpO1xuICAgIGQxICs9IGg3ICogKDUgKiByNCk7XG4gICAgZDEgKz0gaDggKiAoNSAqIHIzKTtcbiAgICBkMSArPSBoOSAqICg1ICogcjIpO1xuICAgIGMgKz0gKGQxID4+PiAxMyk7IGQxICY9IDB4MWZmZjtcblxuICAgIGQyID0gYztcbiAgICBkMiArPSBoMCAqIHIyO1xuICAgIGQyICs9IGgxICogcjE7XG4gICAgZDIgKz0gaDIgKiByMDtcbiAgICBkMiArPSBoMyAqICg1ICogcjkpO1xuICAgIGQyICs9IGg0ICogKDUgKiByOCk7XG4gICAgYyA9IChkMiA+Pj4gMTMpOyBkMiAmPSAweDFmZmY7XG4gICAgZDIgKz0gaDUgKiAoNSAqIHI3KTtcbiAgICBkMiArPSBoNiAqICg1ICogcjYpO1xuICAgIGQyICs9IGg3ICogKDUgKiByNSk7XG4gICAgZDIgKz0gaDggKiAoNSAqIHI0KTtcbiAgICBkMiArPSBoOSAqICg1ICogcjMpO1xuICAgIGMgKz0gKGQyID4+PiAxMyk7IGQyICY9IDB4MWZmZjtcblxuICAgIGQzID0gYztcbiAgICBkMyArPSBoMCAqIHIzO1xuICAgIGQzICs9IGgxICogcjI7XG4gICAgZDMgKz0gaDIgKiByMTtcbiAgICBkMyArPSBoMyAqIHIwO1xuICAgIGQzICs9IGg0ICogKDUgKiByOSk7XG4gICAgYyA9IChkMyA+Pj4gMTMpOyBkMyAmPSAweDFmZmY7XG4gICAgZDMgKz0gaDUgKiAoNSAqIHI4KTtcbiAgICBkMyArPSBoNiAqICg1ICogcjcpO1xuICAgIGQzICs9IGg3ICogKDUgKiByNik7XG4gICAgZDMgKz0gaDggKiAoNSAqIHI1KTtcbiAgICBkMyArPSBoOSAqICg1ICogcjQpO1xuICAgIGMgKz0gKGQzID4+PiAxMyk7IGQzICY9IDB4MWZmZjtcblxuICAgIGQ0ID0gYztcbiAgICBkNCArPSBoMCAqIHI0O1xuICAgIGQ0ICs9IGgxICogcjM7XG4gICAgZDQgKz0gaDIgKiByMjtcbiAgICBkNCArPSBoMyAqIHIxO1xuICAgIGQ0ICs9IGg0ICogcjA7XG4gICAgYyA9IChkNCA+Pj4gMTMpOyBkNCAmPSAweDFmZmY7XG4gICAgZDQgKz0gaDUgKiAoNSAqIHI5KTtcbiAgICBkNCArPSBoNiAqICg1ICogcjgpO1xuICAgIGQ0ICs9IGg3ICogKDUgKiByNyk7XG4gICAgZDQgKz0gaDggKiAoNSAqIHI2KTtcbiAgICBkNCArPSBoOSAqICg1ICogcjUpO1xuICAgIGMgKz0gKGQ0ID4+PiAxMyk7IGQ0ICY9IDB4MWZmZjtcblxuICAgIGQ1ID0gYztcbiAgICBkNSArPSBoMCAqIHI1O1xuICAgIGQ1ICs9IGgxICogcjQ7XG4gICAgZDUgKz0gaDIgKiByMztcbiAgICBkNSArPSBoMyAqIHIyO1xuICAgIGQ1ICs9IGg0ICogcjE7XG4gICAgYyA9IChkNSA+Pj4gMTMpOyBkNSAmPSAweDFmZmY7XG4gICAgZDUgKz0gaDUgKiByMDtcbiAgICBkNSArPSBoNiAqICg1ICogcjkpO1xuICAgIGQ1ICs9IGg3ICogKDUgKiByOCk7XG4gICAgZDUgKz0gaDggKiAoNSAqIHI3KTtcbiAgICBkNSArPSBoOSAqICg1ICogcjYpO1xuICAgIGMgKz0gKGQ1ID4+PiAxMyk7IGQ1ICY9IDB4MWZmZjtcblxuICAgIGQ2ID0gYztcbiAgICBkNiArPSBoMCAqIHI2O1xuICAgIGQ2ICs9IGgxICogcjU7XG4gICAgZDYgKz0gaDIgKiByNDtcbiAgICBkNiArPSBoMyAqIHIzO1xuICAgIGQ2ICs9IGg0ICogcjI7XG4gICAgYyA9IChkNiA+Pj4gMTMpOyBkNiAmPSAweDFmZmY7XG4gICAgZDYgKz0gaDUgKiByMTtcbiAgICBkNiArPSBoNiAqIHIwO1xuICAgIGQ2ICs9IGg3ICogKDUgKiByOSk7XG4gICAgZDYgKz0gaDggKiAoNSAqIHI4KTtcbiAgICBkNiArPSBoOSAqICg1ICogcjcpO1xuICAgIGMgKz0gKGQ2ID4+PiAxMyk7IGQ2ICY9IDB4MWZmZjtcblxuICAgIGQ3ID0gYztcbiAgICBkNyArPSBoMCAqIHI3O1xuICAgIGQ3ICs9IGgxICogcjY7XG4gICAgZDcgKz0gaDIgKiByNTtcbiAgICBkNyArPSBoMyAqIHI0O1xuICAgIGQ3ICs9IGg0ICogcjM7XG4gICAgYyA9IChkNyA+Pj4gMTMpOyBkNyAmPSAweDFmZmY7XG4gICAgZDcgKz0gaDUgKiByMjtcbiAgICBkNyArPSBoNiAqIHIxO1xuICAgIGQ3ICs9IGg3ICogcjA7XG4gICAgZDcgKz0gaDggKiAoNSAqIHI5KTtcbiAgICBkNyArPSBoOSAqICg1ICogcjgpO1xuICAgIGMgKz0gKGQ3ID4+PiAxMyk7IGQ3ICY9IDB4MWZmZjtcblxuICAgIGQ4ID0gYztcbiAgICBkOCArPSBoMCAqIHI4O1xuICAgIGQ4ICs9IGgxICogcjc7XG4gICAgZDggKz0gaDIgKiByNjtcbiAgICBkOCArPSBoMyAqIHI1O1xuICAgIGQ4ICs9IGg0ICogcjQ7XG4gICAgYyA9IChkOCA+Pj4gMTMpOyBkOCAmPSAweDFmZmY7XG4gICAgZDggKz0gaDUgKiByMztcbiAgICBkOCArPSBoNiAqIHIyO1xuICAgIGQ4ICs9IGg3ICogcjE7XG4gICAgZDggKz0gaDggKiByMDtcbiAgICBkOCArPSBoOSAqICg1ICogcjkpO1xuICAgIGMgKz0gKGQ4ID4+PiAxMyk7IGQ4ICY9IDB4MWZmZjtcblxuICAgIGQ5ID0gYztcbiAgICBkOSArPSBoMCAqIHI5O1xuICAgIGQ5ICs9IGgxICogcjg7XG4gICAgZDkgKz0gaDIgKiByNztcbiAgICBkOSArPSBoMyAqIHI2O1xuICAgIGQ5ICs9IGg0ICogcjU7XG4gICAgYyA9IChkOSA+Pj4gMTMpOyBkOSAmPSAweDFmZmY7XG4gICAgZDkgKz0gaDUgKiByNDtcbiAgICBkOSArPSBoNiAqIHIzO1xuICAgIGQ5ICs9IGg3ICogcjI7XG4gICAgZDkgKz0gaDggKiByMTtcbiAgICBkOSArPSBoOSAqIHIwO1xuICAgIGMgKz0gKGQ5ID4+PiAxMyk7IGQ5ICY9IDB4MWZmZjtcblxuICAgIGMgPSAoKChjIDw8IDIpICsgYykpIHwgMDtcbiAgICBjID0gKGMgKyBkMCkgfCAwO1xuICAgIGQwID0gYyAmIDB4MWZmZjtcbiAgICBjID0gKGMgPj4+IDEzKTtcbiAgICBkMSArPSBjO1xuXG4gICAgaDAgPSBkMDtcbiAgICBoMSA9IGQxO1xuICAgIGgyID0gZDI7XG4gICAgaDMgPSBkMztcbiAgICBoNCA9IGQ0O1xuICAgIGg1ID0gZDU7XG4gICAgaDYgPSBkNjtcbiAgICBoNyA9IGQ3O1xuICAgIGg4ID0gZDg7XG4gICAgaDkgPSBkOTtcblxuICAgIG1wb3MgKz0gMTY7XG4gICAgYnl0ZXMgLT0gMTY7XG4gIH1cbiAgdGhpcy5oWzBdID0gaDA7XG4gIHRoaXMuaFsxXSA9IGgxO1xuICB0aGlzLmhbMl0gPSBoMjtcbiAgdGhpcy5oWzNdID0gaDM7XG4gIHRoaXMuaFs0XSA9IGg0O1xuICB0aGlzLmhbNV0gPSBoNTtcbiAgdGhpcy5oWzZdID0gaDY7XG4gIHRoaXMuaFs3XSA9IGg3O1xuICB0aGlzLmhbOF0gPSBoODtcbiAgdGhpcy5oWzldID0gaDk7XG59O1xuXG5wb2x5MTMwNS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24obWFjLCBtYWNwb3MpIHtcbiAgdmFyIGcgPSBuZXcgVWludDE2QXJyYXkoMTApO1xuICB2YXIgYywgbWFzaywgZiwgaTtcblxuICBpZiAodGhpcy5sZWZ0b3Zlcikge1xuICAgIGkgPSB0aGlzLmxlZnRvdmVyO1xuICAgIHRoaXMuYnVmZmVyW2krK10gPSAxO1xuICAgIGZvciAoOyBpIDwgMTY7IGkrKykgdGhpcy5idWZmZXJbaV0gPSAwO1xuICAgIHRoaXMuZmluID0gMTtcbiAgICB0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwgMCwgMTYpO1xuICB9XG5cbiAgYyA9IHRoaXMuaFsxXSA+Pj4gMTM7XG4gIHRoaXMuaFsxXSAmPSAweDFmZmY7XG4gIGZvciAoaSA9IDI7IGkgPCAxMDsgaSsrKSB7XG4gICAgdGhpcy5oW2ldICs9IGM7XG4gICAgYyA9IHRoaXMuaFtpXSA+Pj4gMTM7XG4gICAgdGhpcy5oW2ldICY9IDB4MWZmZjtcbiAgfVxuICB0aGlzLmhbMF0gKz0gKGMgKiA1KTtcbiAgYyA9IHRoaXMuaFswXSA+Pj4gMTM7XG4gIHRoaXMuaFswXSAmPSAweDFmZmY7XG4gIHRoaXMuaFsxXSArPSBjO1xuICBjID0gdGhpcy5oWzFdID4+PiAxMztcbiAgdGhpcy5oWzFdICY9IDB4MWZmZjtcbiAgdGhpcy5oWzJdICs9IGM7XG5cbiAgZ1swXSA9IHRoaXMuaFswXSArIDU7XG4gIGMgPSBnWzBdID4+PiAxMztcbiAgZ1swXSAmPSAweDFmZmY7XG4gIGZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7XG4gICAgZ1tpXSA9IHRoaXMuaFtpXSArIGM7XG4gICAgYyA9IGdbaV0gPj4+IDEzO1xuICAgIGdbaV0gJj0gMHgxZmZmO1xuICB9XG4gIGdbOV0gLT0gKDEgPDwgMTMpO1xuXG4gIG1hc2sgPSAoYyBeIDEpIC0gMTtcbiAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIGdbaV0gJj0gbWFzaztcbiAgbWFzayA9IH5tYXNrO1xuICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgdGhpcy5oW2ldID0gKHRoaXMuaFtpXSAmIG1hc2spIHwgZ1tpXTtcblxuICB0aGlzLmhbMF0gPSAoKHRoaXMuaFswXSAgICAgICApIHwgKHRoaXMuaFsxXSA8PCAxMykgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFsxXSA9ICgodGhpcy5oWzFdID4+PiAgMykgfCAodGhpcy5oWzJdIDw8IDEwKSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzJdID0gKCh0aGlzLmhbMl0gPj4+ICA2KSB8ICh0aGlzLmhbM10gPDwgIDcpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbM10gPSAoKHRoaXMuaFszXSA+Pj4gIDkpIHwgKHRoaXMuaFs0XSA8PCAgNCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFs0XSA9ICgodGhpcy5oWzRdID4+PiAxMikgfCAodGhpcy5oWzVdIDw8ICAxKSB8ICh0aGlzLmhbNl0gPDwgMTQpKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzVdID0gKCh0aGlzLmhbNl0gPj4+ICAyKSB8ICh0aGlzLmhbN10gPDwgMTEpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbNl0gPSAoKHRoaXMuaFs3XSA+Pj4gIDUpIHwgKHRoaXMuaFs4XSA8PCAgOCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFs3XSA9ICgodGhpcy5oWzhdID4+PiAgOCkgfCAodGhpcy5oWzldIDw8ICA1KSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcblxuICBmID0gdGhpcy5oWzBdICsgdGhpcy5wYWRbMF07XG4gIHRoaXMuaFswXSA9IGYgJiAweGZmZmY7XG4gIGZvciAoaSA9IDE7IGkgPCA4OyBpKyspIHtcbiAgICBmID0gKCgodGhpcy5oW2ldICsgdGhpcy5wYWRbaV0pIHwgMCkgKyAoZiA+Pj4gMTYpKSB8IDA7XG4gICAgdGhpcy5oW2ldID0gZiAmIDB4ZmZmZjtcbiAgfVxuXG4gIG1hY1ttYWNwb3MrIDBdID0gKHRoaXMuaFswXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyAxXSA9ICh0aGlzLmhbMF0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgMl0gPSAodGhpcy5oWzFdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDNdID0gKHRoaXMuaFsxXSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA0XSA9ICh0aGlzLmhbMl0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgNV0gPSAodGhpcy5oWzJdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDZdID0gKHRoaXMuaFszXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA3XSA9ICh0aGlzLmhbM10gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgOF0gPSAodGhpcy5oWzRdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDldID0gKHRoaXMuaFs0XSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEwXSA9ICh0aGlzLmhbNV0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysxMV0gPSAodGhpcy5oWzVdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTJdID0gKHRoaXMuaFs2XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEzXSA9ICh0aGlzLmhbNl0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysxNF0gPSAodGhpcy5oWzddID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTVdID0gKHRoaXMuaFs3XSA+Pj4gOCkgJiAweGZmO1xufTtcblxucG9seTEzMDUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKG0sIG1wb3MsIGJ5dGVzKSB7XG4gIHZhciBpLCB3YW50O1xuXG4gIGlmICh0aGlzLmxlZnRvdmVyKSB7XG4gICAgd2FudCA9ICgxNiAtIHRoaXMubGVmdG92ZXIpO1xuICAgIGlmICh3YW50ID4gYnl0ZXMpXG4gICAgICB3YW50ID0gYnl0ZXM7XG4gICAgZm9yIChpID0gMDsgaSA8IHdhbnQ7IGkrKylcbiAgICAgIHRoaXMuYnVmZmVyW3RoaXMubGVmdG92ZXIgKyBpXSA9IG1bbXBvcytpXTtcbiAgICBieXRlcyAtPSB3YW50O1xuICAgIG1wb3MgKz0gd2FudDtcbiAgICB0aGlzLmxlZnRvdmVyICs9IHdhbnQ7XG4gICAgaWYgKHRoaXMubGVmdG92ZXIgPCAxNilcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwgMCwgMTYpO1xuICAgIHRoaXMubGVmdG92ZXIgPSAwO1xuICB9XG5cbiAgaWYgKGJ5dGVzID49IDE2KSB7XG4gICAgd2FudCA9IGJ5dGVzIC0gKGJ5dGVzICUgMTYpO1xuICAgIHRoaXMuYmxvY2tzKG0sIG1wb3MsIHdhbnQpO1xuICAgIG1wb3MgKz0gd2FudDtcbiAgICBieXRlcyAtPSB3YW50O1xuICB9XG5cbiAgaWYgKGJ5dGVzKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzOyBpKyspXG4gICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyICsgaV0gPSBtW21wb3MraV07XG4gICAgdGhpcy5sZWZ0b3ZlciArPSBieXRlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gY3J5cHRvX29uZXRpbWVhdXRoKG91dCwgb3V0cG9zLCBtLCBtcG9zLCBuLCBrKSB7XG4gIHZhciBzID0gbmV3IHBvbHkxMzA1KGspO1xuICBzLnVwZGF0ZShtLCBtcG9zLCBuKTtcbiAgcy5maW5pc2gob3V0LCBvdXRwb3MpO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeShoLCBocG9zLCBtLCBtcG9zLCBuLCBrKSB7XG4gIHZhciB4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBjcnlwdG9fb25ldGltZWF1dGgoeCwwLG0sbXBvcyxuLGspO1xuICByZXR1cm4gY3J5cHRvX3ZlcmlmeV8xNihoLGhwb3MseCwwKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NlY3JldGJveChjLG0sZCxuLGspIHtcbiAgdmFyIGk7XG4gIGlmIChkIDwgMzIpIHJldHVybiAtMTtcbiAgY3J5cHRvX3N0cmVhbV94b3IoYywwLG0sMCxkLG4sayk7XG4gIGNyeXB0b19vbmV0aW1lYXV0aChjLCAxNiwgYywgMzIsIGQgLSAzMiwgYyk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSBjW2ldID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3hfb3BlbihtLGMsZCxuLGspIHtcbiAgdmFyIGk7XG4gIHZhciB4ID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBpZiAoZCA8IDMyKSByZXR1cm4gLTE7XG4gIGNyeXB0b19zdHJlYW0oeCwwLDMyLG4sayk7XG4gIGlmIChjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5KGMsIDE2LGMsIDMyLGQgLSAzMix4KSAhPT0gMCkgcmV0dXJuIC0xO1xuICBjcnlwdG9fc3RyZWFtX3hvcihtLDAsYywwLGQsbixrKTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIG1baV0gPSAwO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gc2V0MjU1MTkociwgYSkge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHJbaV0gPSBhW2ldfDA7XG59XG5cbmZ1bmN0aW9uIGNhcjI1NTE5KG8pIHtcbiAgdmFyIGksIHYsIGMgPSAxO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIHYgPSBvW2ldICsgYyArIDY1NTM1O1xuICAgIGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7XG4gICAgb1tpXSA9IHYgLSBjICogNjU1MzY7XG4gIH1cbiAgb1swXSArPSBjLTEgKyAzNyAqIChjLTEpO1xufVxuXG5mdW5jdGlvbiBzZWwyNTUxOShwLCBxLCBiKSB7XG4gIHZhciB0LCBjID0gfihiLTEpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB0ID0gYyAmIChwW2ldIF4gcVtpXSk7XG4gICAgcFtpXSBePSB0O1xuICAgIHFbaV0gXj0gdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYWNrMjU1MTkobywgbikge1xuICB2YXIgaSwgaiwgYjtcbiAgdmFyIG0gPSBnZigpLCB0ID0gZ2YoKTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHRbaV0gPSBuW2ldO1xuICBjYXIyNTUxOSh0KTtcbiAgY2FyMjU1MTkodCk7XG4gIGNhcjI1NTE5KHQpO1xuICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7XG4gICAgbVswXSA9IHRbMF0gLSAweGZmZWQ7XG4gICAgZm9yIChpID0gMTsgaSA8IDE1OyBpKyspIHtcbiAgICAgIG1baV0gPSB0W2ldIC0gMHhmZmZmIC0gKChtW2ktMV0+PjE2KSAmIDEpO1xuICAgICAgbVtpLTFdICY9IDB4ZmZmZjtcbiAgICB9XG4gICAgbVsxNV0gPSB0WzE1XSAtIDB4N2ZmZiAtICgobVsxNF0+PjE2KSAmIDEpO1xuICAgIGIgPSAobVsxNV0+PjE2KSAmIDE7XG4gICAgbVsxNF0gJj0gMHhmZmZmO1xuICAgIHNlbDI1NTE5KHQsIG0sIDEtYik7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBvWzIqaV0gPSB0W2ldICYgMHhmZjtcbiAgICBvWzIqaSsxXSA9IHRbaV0+Pjg7XG4gIH1cbn1cblxuZnVuY3Rpb24gbmVxMjU1MTkoYSwgYikge1xuICB2YXIgYyA9IG5ldyBVaW50OEFycmF5KDMyKSwgZCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgcGFjazI1NTE5KGMsIGEpO1xuICBwYWNrMjU1MTkoZCwgYik7XG4gIHJldHVybiBjcnlwdG9fdmVyaWZ5XzMyKGMsIDAsIGQsIDApO1xufVxuXG5mdW5jdGlvbiBwYXIyNTUxOShhKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBwYWNrMjU1MTkoZCwgYSk7XG4gIHJldHVybiBkWzBdICYgMTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrMjU1MTkobywgbikge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIG9baV0gPSBuWzIqaV0gKyAoblsyKmkrMV0gPDwgOCk7XG4gIG9bMTVdICY9IDB4N2ZmZjtcbn1cblxuZnVuY3Rpb24gQShvLCBhLCBiKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykgb1tpXSA9IGFbaV0gKyBiW2ldO1xufVxuXG5mdW5jdGlvbiBaKG8sIGEsIGIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSBvW2ldID0gYVtpXSAtIGJbaV07XG59XG5cbmZ1bmN0aW9uIE0obywgYSwgYikge1xuICB2YXIgdiwgYyxcbiAgICAgdDAgPSAwLCAgdDEgPSAwLCAgdDIgPSAwLCAgdDMgPSAwLCAgdDQgPSAwLCAgdDUgPSAwLCAgdDYgPSAwLCAgdDcgPSAwLFxuICAgICB0OCA9IDAsICB0OSA9IDAsIHQxMCA9IDAsIHQxMSA9IDAsIHQxMiA9IDAsIHQxMyA9IDAsIHQxNCA9IDAsIHQxNSA9IDAsXG4gICAgdDE2ID0gMCwgdDE3ID0gMCwgdDE4ID0gMCwgdDE5ID0gMCwgdDIwID0gMCwgdDIxID0gMCwgdDIyID0gMCwgdDIzID0gMCxcbiAgICB0MjQgPSAwLCB0MjUgPSAwLCB0MjYgPSAwLCB0MjcgPSAwLCB0MjggPSAwLCB0MjkgPSAwLCB0MzAgPSAwLFxuICAgIGIwID0gYlswXSxcbiAgICBiMSA9IGJbMV0sXG4gICAgYjIgPSBiWzJdLFxuICAgIGIzID0gYlszXSxcbiAgICBiNCA9IGJbNF0sXG4gICAgYjUgPSBiWzVdLFxuICAgIGI2ID0gYls2XSxcbiAgICBiNyA9IGJbN10sXG4gICAgYjggPSBiWzhdLFxuICAgIGI5ID0gYls5XSxcbiAgICBiMTAgPSBiWzEwXSxcbiAgICBiMTEgPSBiWzExXSxcbiAgICBiMTIgPSBiWzEyXSxcbiAgICBiMTMgPSBiWzEzXSxcbiAgICBiMTQgPSBiWzE0XSxcbiAgICBiMTUgPSBiWzE1XTtcblxuICB2ID0gYVswXTtcbiAgdDAgKz0gdiAqIGIwO1xuICB0MSArPSB2ICogYjE7XG4gIHQyICs9IHYgKiBiMjtcbiAgdDMgKz0gdiAqIGIzO1xuICB0NCArPSB2ICogYjQ7XG4gIHQ1ICs9IHYgKiBiNTtcbiAgdDYgKz0gdiAqIGI2O1xuICB0NyArPSB2ICogYjc7XG4gIHQ4ICs9IHYgKiBiODtcbiAgdDkgKz0gdiAqIGI5O1xuICB0MTAgKz0gdiAqIGIxMDtcbiAgdDExICs9IHYgKiBiMTE7XG4gIHQxMiArPSB2ICogYjEyO1xuICB0MTMgKz0gdiAqIGIxMztcbiAgdDE0ICs9IHYgKiBiMTQ7XG4gIHQxNSArPSB2ICogYjE1O1xuICB2ID0gYVsxXTtcbiAgdDEgKz0gdiAqIGIwO1xuICB0MiArPSB2ICogYjE7XG4gIHQzICs9IHYgKiBiMjtcbiAgdDQgKz0gdiAqIGIzO1xuICB0NSArPSB2ICogYjQ7XG4gIHQ2ICs9IHYgKiBiNTtcbiAgdDcgKz0gdiAqIGI2O1xuICB0OCArPSB2ICogYjc7XG4gIHQ5ICs9IHYgKiBiODtcbiAgdDEwICs9IHYgKiBiOTtcbiAgdDExICs9IHYgKiBiMTA7XG4gIHQxMiArPSB2ICogYjExO1xuICB0MTMgKz0gdiAqIGIxMjtcbiAgdDE0ICs9IHYgKiBiMTM7XG4gIHQxNSArPSB2ICogYjE0O1xuICB0MTYgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMl07XG4gIHQyICs9IHYgKiBiMDtcbiAgdDMgKz0gdiAqIGIxO1xuICB0NCArPSB2ICogYjI7XG4gIHQ1ICs9IHYgKiBiMztcbiAgdDYgKz0gdiAqIGI0O1xuICB0NyArPSB2ICogYjU7XG4gIHQ4ICs9IHYgKiBiNjtcbiAgdDkgKz0gdiAqIGI3O1xuICB0MTAgKz0gdiAqIGI4O1xuICB0MTEgKz0gdiAqIGI5O1xuICB0MTIgKz0gdiAqIGIxMDtcbiAgdDEzICs9IHYgKiBiMTE7XG4gIHQxNCArPSB2ICogYjEyO1xuICB0MTUgKz0gdiAqIGIxMztcbiAgdDE2ICs9IHYgKiBiMTQ7XG4gIHQxNyArPSB2ICogYjE1O1xuICB2ID0gYVszXTtcbiAgdDMgKz0gdiAqIGIwO1xuICB0NCArPSB2ICogYjE7XG4gIHQ1ICs9IHYgKiBiMjtcbiAgdDYgKz0gdiAqIGIzO1xuICB0NyArPSB2ICogYjQ7XG4gIHQ4ICs9IHYgKiBiNTtcbiAgdDkgKz0gdiAqIGI2O1xuICB0MTAgKz0gdiAqIGI3O1xuICB0MTEgKz0gdiAqIGI4O1xuICB0MTIgKz0gdiAqIGI5O1xuICB0MTMgKz0gdiAqIGIxMDtcbiAgdDE0ICs9IHYgKiBiMTE7XG4gIHQxNSArPSB2ICogYjEyO1xuICB0MTYgKz0gdiAqIGIxMztcbiAgdDE3ICs9IHYgKiBiMTQ7XG4gIHQxOCArPSB2ICogYjE1O1xuICB2ID0gYVs0XTtcbiAgdDQgKz0gdiAqIGIwO1xuICB0NSArPSB2ICogYjE7XG4gIHQ2ICs9IHYgKiBiMjtcbiAgdDcgKz0gdiAqIGIzO1xuICB0OCArPSB2ICogYjQ7XG4gIHQ5ICs9IHYgKiBiNTtcbiAgdDEwICs9IHYgKiBiNjtcbiAgdDExICs9IHYgKiBiNztcbiAgdDEyICs9IHYgKiBiODtcbiAgdDEzICs9IHYgKiBiOTtcbiAgdDE0ICs9IHYgKiBiMTA7XG4gIHQxNSArPSB2ICogYjExO1xuICB0MTYgKz0gdiAqIGIxMjtcbiAgdDE3ICs9IHYgKiBiMTM7XG4gIHQxOCArPSB2ICogYjE0O1xuICB0MTkgKz0gdiAqIGIxNTtcbiAgdiA9IGFbNV07XG4gIHQ1ICs9IHYgKiBiMDtcbiAgdDYgKz0gdiAqIGIxO1xuICB0NyArPSB2ICogYjI7XG4gIHQ4ICs9IHYgKiBiMztcbiAgdDkgKz0gdiAqIGI0O1xuICB0MTAgKz0gdiAqIGI1O1xuICB0MTEgKz0gdiAqIGI2O1xuICB0MTIgKz0gdiAqIGI3O1xuICB0MTMgKz0gdiAqIGI4O1xuICB0MTQgKz0gdiAqIGI5O1xuICB0MTUgKz0gdiAqIGIxMDtcbiAgdDE2ICs9IHYgKiBiMTE7XG4gIHQxNyArPSB2ICogYjEyO1xuICB0MTggKz0gdiAqIGIxMztcbiAgdDE5ICs9IHYgKiBiMTQ7XG4gIHQyMCArPSB2ICogYjE1O1xuICB2ID0gYVs2XTtcbiAgdDYgKz0gdiAqIGIwO1xuICB0NyArPSB2ICogYjE7XG4gIHQ4ICs9IHYgKiBiMjtcbiAgdDkgKz0gdiAqIGIzO1xuICB0MTAgKz0gdiAqIGI0O1xuICB0MTEgKz0gdiAqIGI1O1xuICB0MTIgKz0gdiAqIGI2O1xuICB0MTMgKz0gdiAqIGI3O1xuICB0MTQgKz0gdiAqIGI4O1xuICB0MTUgKz0gdiAqIGI5O1xuICB0MTYgKz0gdiAqIGIxMDtcbiAgdDE3ICs9IHYgKiBiMTE7XG4gIHQxOCArPSB2ICogYjEyO1xuICB0MTkgKz0gdiAqIGIxMztcbiAgdDIwICs9IHYgKiBiMTQ7XG4gIHQyMSArPSB2ICogYjE1O1xuICB2ID0gYVs3XTtcbiAgdDcgKz0gdiAqIGIwO1xuICB0OCArPSB2ICogYjE7XG4gIHQ5ICs9IHYgKiBiMjtcbiAgdDEwICs9IHYgKiBiMztcbiAgdDExICs9IHYgKiBiNDtcbiAgdDEyICs9IHYgKiBiNTtcbiAgdDEzICs9IHYgKiBiNjtcbiAgdDE0ICs9IHYgKiBiNztcbiAgdDE1ICs9IHYgKiBiODtcbiAgdDE2ICs9IHYgKiBiOTtcbiAgdDE3ICs9IHYgKiBiMTA7XG4gIHQxOCArPSB2ICogYjExO1xuICB0MTkgKz0gdiAqIGIxMjtcbiAgdDIwICs9IHYgKiBiMTM7XG4gIHQyMSArPSB2ICogYjE0O1xuICB0MjIgKz0gdiAqIGIxNTtcbiAgdiA9IGFbOF07XG4gIHQ4ICs9IHYgKiBiMDtcbiAgdDkgKz0gdiAqIGIxO1xuICB0MTAgKz0gdiAqIGIyO1xuICB0MTEgKz0gdiAqIGIzO1xuICB0MTIgKz0gdiAqIGI0O1xuICB0MTMgKz0gdiAqIGI1O1xuICB0MTQgKz0gdiAqIGI2O1xuICB0MTUgKz0gdiAqIGI3O1xuICB0MTYgKz0gdiAqIGI4O1xuICB0MTcgKz0gdiAqIGI5O1xuICB0MTggKz0gdiAqIGIxMDtcbiAgdDE5ICs9IHYgKiBiMTE7XG4gIHQyMCArPSB2ICogYjEyO1xuICB0MjEgKz0gdiAqIGIxMztcbiAgdDIyICs9IHYgKiBiMTQ7XG4gIHQyMyArPSB2ICogYjE1O1xuICB2ID0gYVs5XTtcbiAgdDkgKz0gdiAqIGIwO1xuICB0MTAgKz0gdiAqIGIxO1xuICB0MTEgKz0gdiAqIGIyO1xuICB0MTIgKz0gdiAqIGIzO1xuICB0MTMgKz0gdiAqIGI0O1xuICB0MTQgKz0gdiAqIGI1O1xuICB0MTUgKz0gdiAqIGI2O1xuICB0MTYgKz0gdiAqIGI3O1xuICB0MTcgKz0gdiAqIGI4O1xuICB0MTggKz0gdiAqIGI5O1xuICB0MTkgKz0gdiAqIGIxMDtcbiAgdDIwICs9IHYgKiBiMTE7XG4gIHQyMSArPSB2ICogYjEyO1xuICB0MjIgKz0gdiAqIGIxMztcbiAgdDIzICs9IHYgKiBiMTQ7XG4gIHQyNCArPSB2ICogYjE1O1xuICB2ID0gYVsxMF07XG4gIHQxMCArPSB2ICogYjA7XG4gIHQxMSArPSB2ICogYjE7XG4gIHQxMiArPSB2ICogYjI7XG4gIHQxMyArPSB2ICogYjM7XG4gIHQxNCArPSB2ICogYjQ7XG4gIHQxNSArPSB2ICogYjU7XG4gIHQxNiArPSB2ICogYjY7XG4gIHQxNyArPSB2ICogYjc7XG4gIHQxOCArPSB2ICogYjg7XG4gIHQxOSArPSB2ICogYjk7XG4gIHQyMCArPSB2ICogYjEwO1xuICB0MjEgKz0gdiAqIGIxMTtcbiAgdDIyICs9IHYgKiBiMTI7XG4gIHQyMyArPSB2ICogYjEzO1xuICB0MjQgKz0gdiAqIGIxNDtcbiAgdDI1ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzExXTtcbiAgdDExICs9IHYgKiBiMDtcbiAgdDEyICs9IHYgKiBiMTtcbiAgdDEzICs9IHYgKiBiMjtcbiAgdDE0ICs9IHYgKiBiMztcbiAgdDE1ICs9IHYgKiBiNDtcbiAgdDE2ICs9IHYgKiBiNTtcbiAgdDE3ICs9IHYgKiBiNjtcbiAgdDE4ICs9IHYgKiBiNztcbiAgdDE5ICs9IHYgKiBiODtcbiAgdDIwICs9IHYgKiBiOTtcbiAgdDIxICs9IHYgKiBiMTA7XG4gIHQyMiArPSB2ICogYjExO1xuICB0MjMgKz0gdiAqIGIxMjtcbiAgdDI0ICs9IHYgKiBiMTM7XG4gIHQyNSArPSB2ICogYjE0O1xuICB0MjYgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTJdO1xuICB0MTIgKz0gdiAqIGIwO1xuICB0MTMgKz0gdiAqIGIxO1xuICB0MTQgKz0gdiAqIGIyO1xuICB0MTUgKz0gdiAqIGIzO1xuICB0MTYgKz0gdiAqIGI0O1xuICB0MTcgKz0gdiAqIGI1O1xuICB0MTggKz0gdiAqIGI2O1xuICB0MTkgKz0gdiAqIGI3O1xuICB0MjAgKz0gdiAqIGI4O1xuICB0MjEgKz0gdiAqIGI5O1xuICB0MjIgKz0gdiAqIGIxMDtcbiAgdDIzICs9IHYgKiBiMTE7XG4gIHQyNCArPSB2ICogYjEyO1xuICB0MjUgKz0gdiAqIGIxMztcbiAgdDI2ICs9IHYgKiBiMTQ7XG4gIHQyNyArPSB2ICogYjE1O1xuICB2ID0gYVsxM107XG4gIHQxMyArPSB2ICogYjA7XG4gIHQxNCArPSB2ICogYjE7XG4gIHQxNSArPSB2ICogYjI7XG4gIHQxNiArPSB2ICogYjM7XG4gIHQxNyArPSB2ICogYjQ7XG4gIHQxOCArPSB2ICogYjU7XG4gIHQxOSArPSB2ICogYjY7XG4gIHQyMCArPSB2ICogYjc7XG4gIHQyMSArPSB2ICogYjg7XG4gIHQyMiArPSB2ICogYjk7XG4gIHQyMyArPSB2ICogYjEwO1xuICB0MjQgKz0gdiAqIGIxMTtcbiAgdDI1ICs9IHYgKiBiMTI7XG4gIHQyNiArPSB2ICogYjEzO1xuICB0MjcgKz0gdiAqIGIxNDtcbiAgdDI4ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzE0XTtcbiAgdDE0ICs9IHYgKiBiMDtcbiAgdDE1ICs9IHYgKiBiMTtcbiAgdDE2ICs9IHYgKiBiMjtcbiAgdDE3ICs9IHYgKiBiMztcbiAgdDE4ICs9IHYgKiBiNDtcbiAgdDE5ICs9IHYgKiBiNTtcbiAgdDIwICs9IHYgKiBiNjtcbiAgdDIxICs9IHYgKiBiNztcbiAgdDIyICs9IHYgKiBiODtcbiAgdDIzICs9IHYgKiBiOTtcbiAgdDI0ICs9IHYgKiBiMTA7XG4gIHQyNSArPSB2ICogYjExO1xuICB0MjYgKz0gdiAqIGIxMjtcbiAgdDI3ICs9IHYgKiBiMTM7XG4gIHQyOCArPSB2ICogYjE0O1xuICB0MjkgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTVdO1xuICB0MTUgKz0gdiAqIGIwO1xuICB0MTYgKz0gdiAqIGIxO1xuICB0MTcgKz0gdiAqIGIyO1xuICB0MTggKz0gdiAqIGIzO1xuICB0MTkgKz0gdiAqIGI0O1xuICB0MjAgKz0gdiAqIGI1O1xuICB0MjEgKz0gdiAqIGI2O1xuICB0MjIgKz0gdiAqIGI3O1xuICB0MjMgKz0gdiAqIGI4O1xuICB0MjQgKz0gdiAqIGI5O1xuICB0MjUgKz0gdiAqIGIxMDtcbiAgdDI2ICs9IHYgKiBiMTE7XG4gIHQyNyArPSB2ICogYjEyO1xuICB0MjggKz0gdiAqIGIxMztcbiAgdDI5ICs9IHYgKiBiMTQ7XG4gIHQzMCArPSB2ICogYjE1O1xuXG4gIHQwICArPSAzOCAqIHQxNjtcbiAgdDEgICs9IDM4ICogdDE3O1xuICB0MiAgKz0gMzggKiB0MTg7XG4gIHQzICArPSAzOCAqIHQxOTtcbiAgdDQgICs9IDM4ICogdDIwO1xuICB0NSAgKz0gMzggKiB0MjE7XG4gIHQ2ICArPSAzOCAqIHQyMjtcbiAgdDcgICs9IDM4ICogdDIzO1xuICB0OCAgKz0gMzggKiB0MjQ7XG4gIHQ5ICArPSAzOCAqIHQyNTtcbiAgdDEwICs9IDM4ICogdDI2O1xuICB0MTEgKz0gMzggKiB0Mjc7XG4gIHQxMiArPSAzOCAqIHQyODtcbiAgdDEzICs9IDM4ICogdDI5O1xuICB0MTQgKz0gMzggKiB0MzA7XG4gIC8vIHQxNSBsZWZ0IGFzIGlzXG5cbiAgLy8gZmlyc3QgY2FyXG4gIGMgPSAxO1xuICB2ID0gIHQwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQxICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDUgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ2ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDYgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ3ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDcgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ4ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDggPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ5ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDkgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDExICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTUgPSB2IC0gYyAqIDY1NTM2O1xuICB0MCArPSBjLTEgKyAzNyAqIChjLTEpO1xuXG4gIC8vIHNlY29uZCBjYXJcbiAgYyA9IDE7XG4gIHYgPSAgdDAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDYgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDcgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDggKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDkgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNSA9IHYgLSBjICogNjU1MzY7XG4gIHQwICs9IGMtMSArIDM3ICogKGMtMSk7XG5cbiAgb1sgMF0gPSB0MDtcbiAgb1sgMV0gPSB0MTtcbiAgb1sgMl0gPSB0MjtcbiAgb1sgM10gPSB0MztcbiAgb1sgNF0gPSB0NDtcbiAgb1sgNV0gPSB0NTtcbiAgb1sgNl0gPSB0NjtcbiAgb1sgN10gPSB0NztcbiAgb1sgOF0gPSB0ODtcbiAgb1sgOV0gPSB0OTtcbiAgb1sxMF0gPSB0MTA7XG4gIG9bMTFdID0gdDExO1xuICBvWzEyXSA9IHQxMjtcbiAgb1sxM10gPSB0MTM7XG4gIG9bMTRdID0gdDE0O1xuICBvWzE1XSA9IHQxNTtcbn1cblxuZnVuY3Rpb24gUyhvLCBhKSB7XG4gIE0obywgYSwgYSk7XG59XG5cbmZ1bmN0aW9uIGludjI1NTE5KG8sIGkpIHtcbiAgdmFyIGMgPSBnZigpO1xuICB2YXIgYTtcbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIGNbYV0gPSBpW2FdO1xuICBmb3IgKGEgPSAyNTM7IGEgPj0gMDsgYS0tKSB7XG4gICAgUyhjLCBjKTtcbiAgICBpZihhICE9PSAyICYmIGEgIT09IDQpIE0oYywgYywgaSk7XG4gIH1cbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIG9bYV0gPSBjW2FdO1xufVxuXG5mdW5jdGlvbiBwb3cyNTIzKG8sIGkpIHtcbiAgdmFyIGMgPSBnZigpO1xuICB2YXIgYTtcbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIGNbYV0gPSBpW2FdO1xuICBmb3IgKGEgPSAyNTA7IGEgPj0gMDsgYS0tKSB7XG4gICAgICBTKGMsIGMpO1xuICAgICAgaWYoYSAhPT0gMSkgTShjLCBjLCBpKTtcbiAgfVxuICBmb3IgKGEgPSAwOyBhIDwgMTY7IGErKykgb1thXSA9IGNbYV07XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIHApIHtcbiAgdmFyIHogPSBuZXcgVWludDhBcnJheSgzMik7XG4gIHZhciB4ID0gbmV3IEZsb2F0NjRBcnJheSg4MCksIHIsIGk7XG4gIHZhciBhID0gZ2YoKSwgYiA9IGdmKCksIGMgPSBnZigpLFxuICAgICAgZCA9IGdmKCksIGUgPSBnZigpLCBmID0gZ2YoKTtcbiAgZm9yIChpID0gMDsgaSA8IDMxOyBpKyspIHpbaV0gPSBuW2ldO1xuICB6WzMxXT0oblszMV0mMTI3KXw2NDtcbiAgelswXSY9MjQ4O1xuICB1bnBhY2syNTUxOSh4LHApO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJbaV09eFtpXTtcbiAgICBkW2ldPWFbaV09Y1tpXT0wO1xuICB9XG4gIGFbMF09ZFswXT0xO1xuICBmb3IgKGk9MjU0OyBpPj0wOyAtLWkpIHtcbiAgICByPSh6W2k+Pj4zXT4+PihpJjcpKSYxO1xuICAgIHNlbDI1NTE5KGEsYixyKTtcbiAgICBzZWwyNTUxOShjLGQscik7XG4gICAgQShlLGEsYyk7XG4gICAgWihhLGEsYyk7XG4gICAgQShjLGIsZCk7XG4gICAgWihiLGIsZCk7XG4gICAgUyhkLGUpO1xuICAgIFMoZixhKTtcbiAgICBNKGEsYyxhKTtcbiAgICBNKGMsYixlKTtcbiAgICBBKGUsYSxjKTtcbiAgICBaKGEsYSxjKTtcbiAgICBTKGIsYSk7XG4gICAgWihjLGQsZik7XG4gICAgTShhLGMsXzEyMTY2NSk7XG4gICAgQShhLGEsZCk7XG4gICAgTShjLGMsYSk7XG4gICAgTShhLGQsZik7XG4gICAgTShkLGIseCk7XG4gICAgUyhiLGUpO1xuICAgIHNlbDI1NTE5KGEsYixyKTtcbiAgICBzZWwyNTUxOShjLGQscik7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB4W2krMTZdPWFbaV07XG4gICAgeFtpKzMyXT1jW2ldO1xuICAgIHhbaSs0OF09YltpXTtcbiAgICB4W2krNjRdPWRbaV07XG4gIH1cbiAgdmFyIHgzMiA9IHguc3ViYXJyYXkoMzIpO1xuICB2YXIgeDE2ID0geC5zdWJhcnJheSgxNik7XG4gIGludjI1NTE5KHgzMix4MzIpO1xuICBNKHgxNix4MTYseDMyKTtcbiAgcGFjazI1NTE5KHEseDE2KTtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UocSwgbikge1xuICByZXR1cm4gY3J5cHRvX3NjYWxhcm11bHQocSwgbiwgXzkpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fYm94X2tleXBhaXIoeSwgeCkge1xuICByYW5kb21ieXRlcyh4LCAzMik7XG4gIHJldHVybiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHksIHgpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHksIHgpIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19zY2FsYXJtdWx0KHMsIHgsIHkpO1xuICByZXR1cm4gY3J5cHRvX2NvcmVfaHNhbHNhMjAoaywgXzAsIHMsIHNpZ21hKTtcbn1cblxudmFyIGNyeXB0b19ib3hfYWZ0ZXJubSA9IGNyeXB0b19zZWNyZXRib3g7XG52YXIgY3J5cHRvX2JveF9vcGVuX2FmdGVybm0gPSBjcnlwdG9fc2VjcmV0Ym94X29wZW47XG5cbmZ1bmN0aW9uIGNyeXB0b19ib3goYywgbSwgZCwgbiwgeSwgeCkge1xuICB2YXIgayA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgY3J5cHRvX2JveF9iZWZvcmVubShrLCB5LCB4KTtcbiAgcmV0dXJuIGNyeXB0b19ib3hfYWZ0ZXJubShjLCBtLCBkLCBuLCBrKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2JveF9vcGVuKG0sIGMsIGQsIG4sIHksIHgpIHtcbiAgdmFyIGsgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgeSwgeCk7XG4gIHJldHVybiBjcnlwdG9fYm94X29wZW5fYWZ0ZXJubShtLCBjLCBkLCBuLCBrKTtcbn1cblxudmFyIEsgPSBbXG4gIDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QsXG4gIDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMsXG4gIDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsIDB4YjYwNWQwMTksXG4gIDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgsXG4gIDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsIDB4NDU3MDZmYmUsXG4gIDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIsXG4gIDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEsXG4gIDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQsXG4gIDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMsXG4gIDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsIDB4NzdhYzljNjUsXG4gIDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMsXG4gIDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUsXG4gIDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsIDB4MmRiNDMyMTAsXG4gIDB4YjAwMzI3YzgsIDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQsXG4gIDB4YzZlMDBiZjMsIDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUsXG4gIDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsIDB4MGEwZTZlNzAsXG4gIDB4MjdiNzBhODUsIDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYsXG4gIDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYsXG4gIDB4NjUwYTczNTQsIDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgsXG4gIDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IsXG4gIDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEsXG4gIDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzAsXG4gIDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTAsXG4gIDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgsXG4gIDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMsXG4gIDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgsXG4gIDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IsXG4gIDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMsXG4gIDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsIDB4NDMxNzJmNjAsXG4gIDB4ODRjODc4MTQsIDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMsXG4gIDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTksXG4gIDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIsXG4gIDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcsXG4gIDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgsXG4gIDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsIDB4YTJjODk4YTYsXG4gIDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIsXG4gIDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMsXG4gIDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMsXG4gIDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEsXG4gIDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsIDB4NGE0NzU4MTdcbl07XG5cbmZ1bmN0aW9uIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgbSwgbikge1xuICB2YXIgd2ggPSBuZXcgSW50MzJBcnJheSgxNiksIHdsID0gbmV3IEludDMyQXJyYXkoMTYpLFxuICAgICAgYmgwLCBiaDEsIGJoMiwgYmgzLCBiaDQsIGJoNSwgYmg2LCBiaDcsXG4gICAgICBibDAsIGJsMSwgYmwyLCBibDMsIGJsNCwgYmw1LCBibDYsIGJsNyxcbiAgICAgIHRoLCB0bCwgaSwgaiwgaCwgbCwgYSwgYiwgYywgZDtcblxuICB2YXIgYWgwID0gaGhbMF0sXG4gICAgICBhaDEgPSBoaFsxXSxcbiAgICAgIGFoMiA9IGhoWzJdLFxuICAgICAgYWgzID0gaGhbM10sXG4gICAgICBhaDQgPSBoaFs0XSxcbiAgICAgIGFoNSA9IGhoWzVdLFxuICAgICAgYWg2ID0gaGhbNl0sXG4gICAgICBhaDcgPSBoaFs3XSxcblxuICAgICAgYWwwID0gaGxbMF0sXG4gICAgICBhbDEgPSBobFsxXSxcbiAgICAgIGFsMiA9IGhsWzJdLFxuICAgICAgYWwzID0gaGxbM10sXG4gICAgICBhbDQgPSBobFs0XSxcbiAgICAgIGFsNSA9IGhsWzVdLFxuICAgICAgYWw2ID0gaGxbNl0sXG4gICAgICBhbDcgPSBobFs3XTtcblxuICB2YXIgcG9zID0gMDtcbiAgd2hpbGUgKG4gPj0gMTI4KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGogPSA4ICogaSArIHBvcztcbiAgICAgIHdoW2ldID0gKG1baiswXSA8PCAyNCkgfCAobVtqKzFdIDw8IDE2KSB8IChtW2orMl0gPDwgOCkgfCBtW2orM107XG4gICAgICB3bFtpXSA9IChtW2orNF0gPDwgMjQpIHwgKG1bais1XSA8PCAxNikgfCAobVtqKzZdIDw8IDgpIHwgbVtqKzddO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgODA7IGkrKykge1xuICAgICAgYmgwID0gYWgwO1xuICAgICAgYmgxID0gYWgxO1xuICAgICAgYmgyID0gYWgyO1xuICAgICAgYmgzID0gYWgzO1xuICAgICAgYmg0ID0gYWg0O1xuICAgICAgYmg1ID0gYWg1O1xuICAgICAgYmg2ID0gYWg2O1xuICAgICAgYmg3ID0gYWg3O1xuXG4gICAgICBibDAgPSBhbDA7XG4gICAgICBibDEgPSBhbDE7XG4gICAgICBibDIgPSBhbDI7XG4gICAgICBibDMgPSBhbDM7XG4gICAgICBibDQgPSBhbDQ7XG4gICAgICBibDUgPSBhbDU7XG4gICAgICBibDYgPSBhbDY7XG4gICAgICBibDcgPSBhbDc7XG5cbiAgICAgIC8vIGFkZFxuICAgICAgaCA9IGFoNztcbiAgICAgIGwgPSBhbDc7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAvLyBTaWdtYTFcbiAgICAgIGggPSAoKGFoNCA+Pj4gMTQpIHwgKGFsNCA8PCAoMzItMTQpKSkgXiAoKGFoNCA+Pj4gMTgpIHwgKGFsNCA8PCAoMzItMTgpKSkgXiAoKGFsNCA+Pj4gKDQxLTMyKSkgfCAoYWg0IDw8ICgzMi0oNDEtMzIpKSkpO1xuICAgICAgbCA9ICgoYWw0ID4+PiAxNCkgfCAoYWg0IDw8ICgzMi0xNCkpKSBeICgoYWw0ID4+PiAxOCkgfCAoYWg0IDw8ICgzMi0xOCkpKSBeICgoYWg0ID4+PiAoNDEtMzIpKSB8IChhbDQgPDwgKDMyLSg0MS0zMikpKSk7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgLy8gQ2hcbiAgICAgIGggPSAoYWg0ICYgYWg1KSBeICh+YWg0ICYgYWg2KTtcbiAgICAgIGwgPSAoYWw0ICYgYWw1KSBeICh+YWw0ICYgYWw2KTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyBLXG4gICAgICBoID0gS1tpKjJdO1xuICAgICAgbCA9IEtbaSoyKzFdO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIHdcbiAgICAgIGggPSB3aFtpJTE2XTtcbiAgICAgIGwgPSB3bFtpJTE2XTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICBiICs9IGEgPj4+IDE2O1xuICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICAgIHRoID0gYyAmIDB4ZmZmZiB8IGQgPDwgMTY7XG4gICAgICB0bCA9IGEgJiAweGZmZmYgfCBiIDw8IDE2O1xuXG4gICAgICAvLyBhZGRcbiAgICAgIGggPSB0aDtcbiAgICAgIGwgPSB0bDtcblxuICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIFNpZ21hMFxuICAgICAgaCA9ICgoYWgwID4+PiAyOCkgfCAoYWwwIDw8ICgzMi0yOCkpKSBeICgoYWwwID4+PiAoMzQtMzIpKSB8IChhaDAgPDwgKDMyLSgzNC0zMikpKSkgXiAoKGFsMCA+Pj4gKDM5LTMyKSkgfCAoYWgwIDw8ICgzMi0oMzktMzIpKSkpO1xuICAgICAgbCA9ICgoYWwwID4+PiAyOCkgfCAoYWgwIDw8ICgzMi0yOCkpKSBeICgoYWgwID4+PiAoMzQtMzIpKSB8IChhbDAgPDwgKDMyLSgzNC0zMikpKSkgXiAoKGFoMCA+Pj4gKDM5LTMyKSkgfCAoYWwwIDw8ICgzMi0oMzktMzIpKSkpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIE1halxuICAgICAgaCA9IChhaDAgJiBhaDEpIF4gKGFoMCAmIGFoMikgXiAoYWgxICYgYWgyKTtcbiAgICAgIGwgPSAoYWwwICYgYWwxKSBeIChhbDAgJiBhbDIpIF4gKGFsMSAmIGFsMik7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICBiaDcgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICBibDcgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICAgIC8vIGFkZFxuICAgICAgaCA9IGJoMztcbiAgICAgIGwgPSBibDM7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICBoID0gdGg7XG4gICAgICBsID0gdGw7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICBiaDMgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICBibDMgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICAgIGFoMSA9IGJoMDtcbiAgICAgIGFoMiA9IGJoMTtcbiAgICAgIGFoMyA9IGJoMjtcbiAgICAgIGFoNCA9IGJoMztcbiAgICAgIGFoNSA9IGJoNDtcbiAgICAgIGFoNiA9IGJoNTtcbiAgICAgIGFoNyA9IGJoNjtcbiAgICAgIGFoMCA9IGJoNztcblxuICAgICAgYWwxID0gYmwwO1xuICAgICAgYWwyID0gYmwxO1xuICAgICAgYWwzID0gYmwyO1xuICAgICAgYWw0ID0gYmwzO1xuICAgICAgYWw1ID0gYmw0O1xuICAgICAgYWw2ID0gYmw1O1xuICAgICAgYWw3ID0gYmw2O1xuICAgICAgYWwwID0gYmw3O1xuXG4gICAgICBpZiAoaSUxNiA9PT0gMTUpIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IDE2OyBqKyspIHtcbiAgICAgICAgICAvLyBhZGRcbiAgICAgICAgICBoID0gd2hbal07XG4gICAgICAgICAgbCA9IHdsW2pdO1xuXG4gICAgICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAgICAgaCA9IHdoWyhqKzkpJTE2XTtcbiAgICAgICAgICBsID0gd2xbKGorOSklMTZdO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIC8vIHNpZ21hMFxuICAgICAgICAgIHRoID0gd2hbKGorMSklMTZdO1xuICAgICAgICAgIHRsID0gd2xbKGorMSklMTZdO1xuICAgICAgICAgIGggPSAoKHRoID4+PiAxKSB8ICh0bCA8PCAoMzItMSkpKSBeICgodGggPj4+IDgpIHwgKHRsIDw8ICgzMi04KSkpIF4gKHRoID4+PiA3KTtcbiAgICAgICAgICBsID0gKCh0bCA+Pj4gMSkgfCAodGggPDwgKDMyLTEpKSkgXiAoKHRsID4+PiA4KSB8ICh0aCA8PCAoMzItOCkpKSBeICgodGwgPj4+IDcpIHwgKHRoIDw8ICgzMi03KSkpO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIC8vIHNpZ21hMVxuICAgICAgICAgIHRoID0gd2hbKGorMTQpJTE2XTtcbiAgICAgICAgICB0bCA9IHdsWyhqKzE0KSUxNl07XG4gICAgICAgICAgaCA9ICgodGggPj4+IDE5KSB8ICh0bCA8PCAoMzItMTkpKSkgXiAoKHRsID4+PiAoNjEtMzIpKSB8ICh0aCA8PCAoMzItKDYxLTMyKSkpKSBeICh0aCA+Pj4gNik7XG4gICAgICAgICAgbCA9ICgodGwgPj4+IDE5KSB8ICh0aCA8PCAoMzItMTkpKSkgXiAoKHRoID4+PiAoNjEtMzIpKSB8ICh0bCA8PCAoMzItKDYxLTMyKSkpKSBeICgodGwgPj4+IDYpIHwgKHRoIDw8ICgzMi02KSkpO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICAgICAgd2hbal0gPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICAgICAgd2xbal0gPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGRcbiAgICBoID0gYWgwO1xuICAgIGwgPSBhbDA7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMF07XG4gICAgbCA9IGhsWzBdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMF0gPSBhaDAgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMF0gPSBhbDAgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgxO1xuICAgIGwgPSBhbDE7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMV07XG4gICAgbCA9IGhsWzFdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMV0gPSBhaDEgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMV0gPSBhbDEgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgyO1xuICAgIGwgPSBhbDI7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMl07XG4gICAgbCA9IGhsWzJdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMl0gPSBhaDIgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMl0gPSBhbDIgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgzO1xuICAgIGwgPSBhbDM7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbM107XG4gICAgbCA9IGhsWzNdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbM10gPSBhaDMgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbM10gPSBhbDMgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg0O1xuICAgIGwgPSBhbDQ7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNF07XG4gICAgbCA9IGhsWzRdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNF0gPSBhaDQgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNF0gPSBhbDQgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg1O1xuICAgIGwgPSBhbDU7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNV07XG4gICAgbCA9IGhsWzVdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNV0gPSBhaDUgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNV0gPSBhbDUgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg2O1xuICAgIGwgPSBhbDY7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNl07XG4gICAgbCA9IGhsWzZdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNl0gPSBhaDYgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNl0gPSBhbDYgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg3O1xuICAgIGwgPSBhbDc7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbN107XG4gICAgbCA9IGhsWzddO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbN10gPSBhaDcgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbN10gPSBhbDcgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBwb3MgKz0gMTI4O1xuICAgIG4gLT0gMTI4O1xuICB9XG5cbiAgcmV0dXJuIG47XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19oYXNoKG91dCwgbSwgbikge1xuICB2YXIgaGggPSBuZXcgSW50MzJBcnJheSg4KSxcbiAgICAgIGhsID0gbmV3IEludDMyQXJyYXkoOCksXG4gICAgICB4ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KSxcbiAgICAgIGksIGIgPSBuO1xuXG4gIGhoWzBdID0gMHg2YTA5ZTY2NztcbiAgaGhbMV0gPSAweGJiNjdhZTg1O1xuICBoaFsyXSA9IDB4M2M2ZWYzNzI7XG4gIGhoWzNdID0gMHhhNTRmZjUzYTtcbiAgaGhbNF0gPSAweDUxMGU1MjdmO1xuICBoaFs1XSA9IDB4OWIwNTY4OGM7XG4gIGhoWzZdID0gMHgxZjgzZDlhYjtcbiAgaGhbN10gPSAweDViZTBjZDE5O1xuXG4gIGhsWzBdID0gMHhmM2JjYzkwODtcbiAgaGxbMV0gPSAweDg0Y2FhNzNiO1xuICBobFsyXSA9IDB4ZmU5NGY4MmI7XG4gIGhsWzNdID0gMHg1ZjFkMzZmMTtcbiAgaGxbNF0gPSAweGFkZTY4MmQxO1xuICBobFs1XSA9IDB4MmIzZTZjMWY7XG4gIGhsWzZdID0gMHhmYjQxYmQ2YjtcbiAgaGxbN10gPSAweDEzN2UyMTc5O1xuXG4gIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgbSwgbik7XG4gIG4gJT0gMTI4O1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHhbaV0gPSBtW2ItbitpXTtcbiAgeFtuXSA9IDEyODtcblxuICBuID0gMjU2LTEyOCoobjwxMTI/MTowKTtcbiAgeFtuLTldID0gMDtcbiAgdHM2NCh4LCBuLTgsICAoYiAvIDB4MjAwMDAwMDApIHwgMCwgYiA8PCAzKTtcbiAgY3J5cHRvX2hhc2hibG9ja3NfaGwoaGgsIGhsLCB4LCBuKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB0czY0KG91dCwgOCppLCBoaFtpXSwgaGxbaV0pO1xuXG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBhZGQocCwgcSkge1xuICB2YXIgYSA9IGdmKCksIGIgPSBnZigpLCBjID0gZ2YoKSxcbiAgICAgIGQgPSBnZigpLCBlID0gZ2YoKSwgZiA9IGdmKCksXG4gICAgICBnID0gZ2YoKSwgaCA9IGdmKCksIHQgPSBnZigpO1xuXG4gIFooYSwgcFsxXSwgcFswXSk7XG4gIFoodCwgcVsxXSwgcVswXSk7XG4gIE0oYSwgYSwgdCk7XG4gIEEoYiwgcFswXSwgcFsxXSk7XG4gIEEodCwgcVswXSwgcVsxXSk7XG4gIE0oYiwgYiwgdCk7XG4gIE0oYywgcFszXSwgcVszXSk7XG4gIE0oYywgYywgRDIpO1xuICBNKGQsIHBbMl0sIHFbMl0pO1xuICBBKGQsIGQsIGQpO1xuICBaKGUsIGIsIGEpO1xuICBaKGYsIGQsIGMpO1xuICBBKGcsIGQsIGMpO1xuICBBKGgsIGIsIGEpO1xuXG4gIE0ocFswXSwgZSwgZik7XG4gIE0ocFsxXSwgaCwgZyk7XG4gIE0ocFsyXSwgZywgZik7XG4gIE0ocFszXSwgZSwgaCk7XG59XG5cbmZ1bmN0aW9uIGNzd2FwKHAsIHEsIGIpIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBzZWwyNTUxOShwW2ldLCBxW2ldLCBiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYWNrKHIsIHApIHtcbiAgdmFyIHR4ID0gZ2YoKSwgdHkgPSBnZigpLCB6aSA9IGdmKCk7XG4gIGludjI1NTE5KHppLCBwWzJdKTtcbiAgTSh0eCwgcFswXSwgemkpO1xuICBNKHR5LCBwWzFdLCB6aSk7XG4gIHBhY2syNTUxOShyLCB0eSk7XG4gIHJbMzFdIF49IHBhcjI1NTE5KHR4KSA8PCA3O1xufVxuXG5mdW5jdGlvbiBzY2FsYXJtdWx0KHAsIHEsIHMpIHtcbiAgdmFyIGIsIGk7XG4gIHNldDI1NTE5KHBbMF0sIGdmMCk7XG4gIHNldDI1NTE5KHBbMV0sIGdmMSk7XG4gIHNldDI1NTE5KHBbMl0sIGdmMSk7XG4gIHNldDI1NTE5KHBbM10sIGdmMCk7XG4gIGZvciAoaSA9IDI1NTsgaSA+PSAwOyAtLWkpIHtcbiAgICBiID0gKHNbKGkvOCl8MF0gPj4gKGkmNykpICYgMTtcbiAgICBjc3dhcChwLCBxLCBiKTtcbiAgICBhZGQocSwgcCk7XG4gICAgYWRkKHAsIHApO1xuICAgIGNzd2FwKHAsIHEsIGIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjYWxhcmJhc2UocCwgcykge1xuICB2YXIgcSA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcbiAgc2V0MjU1MTkocVswXSwgWCk7XG4gIHNldDI1NTE5KHFbMV0sIFkpO1xuICBzZXQyNTUxOShxWzJdLCBnZjEpO1xuICBNKHFbM10sIFgsIFkpO1xuICBzY2FsYXJtdWx0KHAsIHEsIHMpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzaywgc2VlZGVkKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcbiAgdmFyIGk7XG5cbiAgaWYgKCFzZWVkZWQpIHJhbmRvbWJ5dGVzKHNrLCAzMik7XG4gIGNyeXB0b19oYXNoKGQsIHNrLCAzMik7XG4gIGRbMF0gJj0gMjQ4O1xuICBkWzMxXSAmPSAxMjc7XG4gIGRbMzFdIHw9IDY0O1xuXG4gIHNjYWxhcmJhc2UocCwgZCk7XG4gIHBhY2socGssIHApO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBza1tpKzMyXSA9IHBrW2ldO1xuICByZXR1cm4gMDtcbn1cblxudmFyIEwgPSBuZXcgRmxvYXQ2NEFycmF5KFsweGVkLCAweGQzLCAweGY1LCAweDVjLCAweDFhLCAweDYzLCAweDEyLCAweDU4LCAweGQ2LCAweDljLCAweGY3LCAweGEyLCAweGRlLCAweGY5LCAweGRlLCAweDE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDEwXSk7XG5cbmZ1bmN0aW9uIG1vZEwociwgeCkge1xuICB2YXIgY2FycnksIGksIGosIGs7XG4gIGZvciAoaSA9IDYzOyBpID49IDMyOyAtLWkpIHtcbiAgICBjYXJyeSA9IDA7XG4gICAgZm9yIChqID0gaSAtIDMyLCBrID0gaSAtIDEyOyBqIDwgazsgKytqKSB7XG4gICAgICB4W2pdICs9IGNhcnJ5IC0gMTYgKiB4W2ldICogTFtqIC0gKGkgLSAzMildO1xuICAgICAgY2FycnkgPSAoeFtqXSArIDEyOCkgPj4gODtcbiAgICAgIHhbal0gLT0gY2FycnkgKiAyNTY7XG4gICAgfVxuICAgIHhbal0gKz0gY2Fycnk7XG4gICAgeFtpXSA9IDA7XG4gIH1cbiAgY2FycnkgPSAwO1xuICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykge1xuICAgIHhbal0gKz0gY2FycnkgLSAoeFszMV0gPj4gNCkgKiBMW2pdO1xuICAgIGNhcnJ5ID0geFtqXSA+PiA4O1xuICAgIHhbal0gJj0gMjU1O1xuICB9XG4gIGZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB4W2pdIC09IGNhcnJ5ICogTFtqXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICB4W2krMV0gKz0geFtpXSA+PiA4O1xuICAgIHJbaV0gPSB4W2ldICYgMjU1O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZHVjZShyKSB7XG4gIHZhciB4ID0gbmV3IEZsb2F0NjRBcnJheSg2NCksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB4W2ldID0gcltpXTtcbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHJbaV0gPSAwO1xuICBtb2RMKHIsIHgpO1xufVxuXG4vLyBOb3RlOiBkaWZmZXJlbmNlIGZyb20gQyAtIHNtbGVuIHJldHVybmVkLCBub3QgcGFzc2VkIGFzIGFyZ3VtZW50LlxuZnVuY3Rpb24gY3J5cHRvX3NpZ24oc20sIG0sIG4sIHNrKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoNjQpLCBoID0gbmV3IFVpbnQ4QXJyYXkoNjQpLCByID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgaSwgaiwgeCA9IG5ldyBGbG9hdDY0QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcblxuICBjcnlwdG9faGFzaChkLCBzaywgMzIpO1xuICBkWzBdICY9IDI0ODtcbiAgZFszMV0gJj0gMTI3O1xuICBkWzMxXSB8PSA2NDtcblxuICB2YXIgc21sZW4gPSBuICsgNjQ7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHNtWzY0ICsgaV0gPSBtW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgc21bMzIgKyBpXSA9IGRbMzIgKyBpXTtcblxuICBjcnlwdG9faGFzaChyLCBzbS5zdWJhcnJheSgzMiksIG4rMzIpO1xuICByZWR1Y2Uocik7XG4gIHNjYWxhcmJhc2UocCwgcik7XG4gIHBhY2soc20sIHApO1xuXG4gIGZvciAoaSA9IDMyOyBpIDwgNjQ7IGkrKykgc21baV0gPSBza1tpXTtcbiAgY3J5cHRvX2hhc2goaCwgc20sIG4gKyA2NCk7XG4gIHJlZHVjZShoKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeFtpXSA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB4W2ldID0gcltpXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykge1xuICAgICAgeFtpK2pdICs9IGhbaV0gKiBkW2pdO1xuICAgIH1cbiAgfVxuXG4gIG1vZEwoc20uc3ViYXJyYXkoMzIpLCB4KTtcbiAgcmV0dXJuIHNtbGVuO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tuZWcociwgcCkge1xuICB2YXIgdCA9IGdmKCksIGNoayA9IGdmKCksIG51bSA9IGdmKCksXG4gICAgICBkZW4gPSBnZigpLCBkZW4yID0gZ2YoKSwgZGVuNCA9IGdmKCksXG4gICAgICBkZW42ID0gZ2YoKTtcblxuICBzZXQyNTUxOShyWzJdLCBnZjEpO1xuICB1bnBhY2syNTUxOShyWzFdLCBwKTtcbiAgUyhudW0sIHJbMV0pO1xuICBNKGRlbiwgbnVtLCBEKTtcbiAgWihudW0sIG51bSwgclsyXSk7XG4gIEEoZGVuLCByWzJdLCBkZW4pO1xuXG4gIFMoZGVuMiwgZGVuKTtcbiAgUyhkZW40LCBkZW4yKTtcbiAgTShkZW42LCBkZW40LCBkZW4yKTtcbiAgTSh0LCBkZW42LCBudW0pO1xuICBNKHQsIHQsIGRlbik7XG5cbiAgcG93MjUyMyh0LCB0KTtcbiAgTSh0LCB0LCBudW0pO1xuICBNKHQsIHQsIGRlbik7XG4gIE0odCwgdCwgZGVuKTtcbiAgTShyWzBdLCB0LCBkZW4pO1xuXG4gIFMoY2hrLCByWzBdKTtcbiAgTShjaGssIGNoaywgZGVuKTtcbiAgaWYgKG5lcTI1NTE5KGNoaywgbnVtKSkgTShyWzBdLCByWzBdLCBJKTtcblxuICBTKGNoaywgclswXSk7XG4gIE0oY2hrLCBjaGssIGRlbik7XG4gIGlmIChuZXEyNTUxOShjaGssIG51bSkpIHJldHVybiAtMTtcblxuICBpZiAocGFyMjU1MTkoclswXSkgPT09IChwWzMxXT4+NykpIFooclswXSwgZ2YwLCByWzBdKTtcblxuICBNKHJbM10sIHJbMF0sIHJbMV0pO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NpZ25fb3BlbihtLCBzbSwgbiwgcGspIHtcbiAgdmFyIGksIG1sZW47XG4gIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoMzIpLCBoID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXSxcbiAgICAgIHEgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG5cbiAgbWxlbiA9IC0xO1xuICBpZiAobiA8IDY0KSByZXR1cm4gLTE7XG5cbiAgaWYgKHVucGFja25lZyhxLCBwaykpIHJldHVybiAtMTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBtW2ldID0gc21baV07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBtW2krMzJdID0gcGtbaV07XG4gIGNyeXB0b19oYXNoKGgsIG0sIG4pO1xuICByZWR1Y2UoaCk7XG4gIHNjYWxhcm11bHQocCwgcSwgaCk7XG5cbiAgc2NhbGFyYmFzZShxLCBzbS5zdWJhcnJheSgzMikpO1xuICBhZGQocCwgcSk7XG4gIHBhY2sodCwgcCk7XG5cbiAgbiAtPSA2NDtcbiAgaWYgKGNyeXB0b192ZXJpZnlfMzIoc20sIDAsIHQsIDApKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IHNtW2kgKyA2NF07XG4gIG1sZW4gPSBuO1xuICByZXR1cm4gbWxlbjtcbn1cblxudmFyIGNyeXB0b19zZWNyZXRib3hfS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVMgPSAyNCxcbiAgICBjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyA9IDMyLFxuICAgIGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTID0gMTYsXG4gICAgY3J5cHRvX3NjYWxhcm11bHRfQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9OT05DRUJZVEVTID0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTLFxuICAgIGNyeXB0b19ib3hfWkVST0JZVEVTID0gY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMsXG4gICAgY3J5cHRvX2JveF9CT1haRVJPQllURVMgPSBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyxcbiAgICBjcnlwdG9fc2lnbl9CWVRFUyA9IDY0LFxuICAgIGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMgPSA2NCxcbiAgICBjcnlwdG9fc2lnbl9TRUVEQllURVMgPSAzMixcbiAgICBjcnlwdG9faGFzaF9CWVRFUyA9IDY0O1xuXG5uYWNsLmxvd2xldmVsID0ge1xuICBjcnlwdG9fY29yZV9oc2Fsc2EyMDogY3J5cHRvX2NvcmVfaHNhbHNhMjAsXG4gIGNyeXB0b19zdHJlYW1feG9yOiBjcnlwdG9fc3RyZWFtX3hvcixcbiAgY3J5cHRvX3N0cmVhbTogY3J5cHRvX3N0cmVhbSxcbiAgY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcjogY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcixcbiAgY3J5cHRvX3N0cmVhbV9zYWxzYTIwOiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAsXG4gIGNyeXB0b19vbmV0aW1lYXV0aDogY3J5cHRvX29uZXRpbWVhdXRoLFxuICBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5OiBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5LFxuICBjcnlwdG9fdmVyaWZ5XzE2OiBjcnlwdG9fdmVyaWZ5XzE2LFxuICBjcnlwdG9fdmVyaWZ5XzMyOiBjcnlwdG9fdmVyaWZ5XzMyLFxuICBjcnlwdG9fc2VjcmV0Ym94OiBjcnlwdG9fc2VjcmV0Ym94LFxuICBjcnlwdG9fc2VjcmV0Ym94X29wZW46IGNyeXB0b19zZWNyZXRib3hfb3BlbixcbiAgY3J5cHRvX3NjYWxhcm11bHQ6IGNyeXB0b19zY2FsYXJtdWx0LFxuICBjcnlwdG9fc2NhbGFybXVsdF9iYXNlOiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlLFxuICBjcnlwdG9fYm94X2JlZm9yZW5tOiBjcnlwdG9fYm94X2JlZm9yZW5tLFxuICBjcnlwdG9fYm94X2FmdGVybm06IGNyeXB0b19ib3hfYWZ0ZXJubSxcbiAgY3J5cHRvX2JveDogY3J5cHRvX2JveCxcbiAgY3J5cHRvX2JveF9vcGVuOiBjcnlwdG9fYm94X29wZW4sXG4gIGNyeXB0b19ib3hfa2V5cGFpcjogY3J5cHRvX2JveF9rZXlwYWlyLFxuICBjcnlwdG9faGFzaDogY3J5cHRvX2hhc2gsXG4gIGNyeXB0b19zaWduOiBjcnlwdG9fc2lnbixcbiAgY3J5cHRvX3NpZ25fa2V5cGFpcjogY3J5cHRvX3NpZ25fa2V5cGFpcixcbiAgY3J5cHRvX3NpZ25fb3BlbjogY3J5cHRvX3NpZ25fb3BlbixcblxuICBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTLFxuICBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVM6IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyxcbiAgY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVM6IGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTLFxuICBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUzogY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMsXG4gIGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTOiBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyxcbiAgY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVM6IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTLFxuICBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTOiBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTLFxuICBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTOiBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTLFxuICBjcnlwdG9fYm94X0JFRk9SRU5NQllURVM6IGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyxcbiAgY3J5cHRvX2JveF9OT05DRUJZVEVTOiBjcnlwdG9fYm94X05PTkNFQllURVMsXG4gIGNyeXB0b19ib3hfWkVST0JZVEVTOiBjcnlwdG9fYm94X1pFUk9CWVRFUyxcbiAgY3J5cHRvX2JveF9CT1haRVJPQllURVM6IGNyeXB0b19ib3hfQk9YWkVST0JZVEVTLFxuICBjcnlwdG9fc2lnbl9CWVRFUzogY3J5cHRvX3NpZ25fQllURVMsXG4gIGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTOiBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyxcbiAgY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVM6IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTLFxuICBjcnlwdG9fc2lnbl9TRUVEQllURVM6IGNyeXB0b19zaWduX1NFRURCWVRFUyxcbiAgY3J5cHRvX2hhc2hfQllURVM6IGNyeXB0b19oYXNoX0JZVEVTXG59O1xuXG4vKiBIaWdoLWxldmVsIEFQSSAqL1xuXG5mdW5jdGlvbiBjaGVja0xlbmd0aHMoaywgbikge1xuICBpZiAoay5sZW5ndGggIT09IGNyeXB0b19zZWNyZXRib3hfS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIGtleSBzaXplJyk7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBub25jZSBzaXplJyk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQm94TGVuZ3Rocyhwaywgc2spIHtcbiAgaWYgKHBrLmxlbmd0aCAhPT0gY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgcHVibGljIGtleSBzaXplJyk7XG4gIGlmIChzay5sZW5ndGggIT09IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xufVxuXG5mdW5jdGlvbiBjaGVja0FycmF5VHlwZXMoKSB7XG4gIHZhciB0LCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgIGlmICgodCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHNbaV0pKSAhPT0gJ1tvYmplY3QgVWludDhBcnJheV0nKVxuICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgdHlwZSAnICsgdCArICcsIHVzZSBVaW50OEFycmF5Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW51cChhcnIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycltpXSA9IDA7XG59XG5cbi8vIFRPRE86IENvbXBsZXRlbHkgcmVtb3ZlIHRoaXMgaW4gdjAuMTUuXG5pZiAoIW5hY2wudXRpbCkge1xuICBuYWNsLnV0aWwgPSB7fTtcbiAgbmFjbC51dGlsLmRlY29kZVVURjggPSBuYWNsLnV0aWwuZW5jb2RlVVRGOCA9IG5hY2wudXRpbC5lbmNvZGVCYXNlNjQgPSBuYWNsLnV0aWwuZGVjb2RlQmFzZTY0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCduYWNsLnV0aWwgbW92ZWQgaW50byBzZXBhcmF0ZSBwYWNrYWdlOiBodHRwczovL2dpdGh1Yi5jb20vZGNoZXN0L3R3ZWV0bmFjbC11dGlsLWpzJyk7XG4gIH07XG59XG5cbm5hY2wucmFuZG9tQnl0ZXMgPSBmdW5jdGlvbihuKSB7XG4gIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gIHJhbmRvbWJ5dGVzKGIsIG4pO1xuICByZXR1cm4gYjtcbn07XG5cbm5hY2wuc2VjcmV0Ym94ID0gZnVuY3Rpb24obXNnLCBub25jZSwga2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2csIG5vbmNlLCBrZXkpO1xuICBjaGVja0xlbmd0aHMoa2V5LCBub25jZSk7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMgKyBtc2cubGVuZ3RoKTtcbiAgdmFyIGMgPSBuZXcgVWludDhBcnJheShtLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSBtW2krY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVNdID0gbXNnW2ldO1xuICBjcnlwdG9fc2VjcmV0Ym94KGMsIG0sIG0ubGVuZ3RoLCBub25jZSwga2V5KTtcbiAgcmV0dXJuIGMuc3ViYXJyYXkoY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMpO1xufTtcblxubmFjbC5zZWNyZXRib3gub3BlbiA9IGZ1bmN0aW9uKGJveCwgbm9uY2UsIGtleSkge1xuICBjaGVja0FycmF5VHlwZXMoYm94LCBub25jZSwga2V5KTtcbiAgY2hlY2tMZW5ndGhzKGtleSwgbm9uY2UpO1xuICB2YXIgYyA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTICsgYm94Lmxlbmd0aCk7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkoYy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJveC5sZW5ndGg7IGkrKykgY1tpK2NyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTXSA9IGJveFtpXTtcbiAgaWYgKGMubGVuZ3RoIDwgMzIpIHJldHVybiBmYWxzZTtcbiAgaWYgKGNyeXB0b19zZWNyZXRib3hfb3BlbihtLCBjLCBjLmxlbmd0aCwgbm9uY2UsIGtleSkgIT09IDApIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIG0uc3ViYXJyYXkoY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMpO1xufTtcblxubmFjbC5zZWNyZXRib3gua2V5TGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUztcbm5hY2wuc2VjcmV0Ym94Lm5vbmNlTGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTO1xubmFjbC5zZWNyZXRib3gub3ZlcmhlYWRMZW5ndGggPSBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUztcblxubmFjbC5zY2FsYXJNdWx0ID0gZnVuY3Rpb24obiwgcCkge1xuICBjaGVja0FycmF5VHlwZXMobiwgcCk7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIG4gc2l6ZScpO1xuICBpZiAocC5sZW5ndGggIT09IGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwIHNpemUnKTtcbiAgdmFyIHEgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyk7XG4gIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIHApO1xuICByZXR1cm4gcTtcbn07XG5cbm5hY2wuc2NhbGFyTXVsdC5iYXNlID0gZnVuY3Rpb24obikge1xuICBjaGVja0FycmF5VHlwZXMobik7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIG4gc2l6ZScpO1xuICB2YXIgcSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTKTtcbiAgY3J5cHRvX3NjYWxhcm11bHRfYmFzZShxLCBuKTtcbiAgcmV0dXJuIHE7XG59O1xuXG5uYWNsLnNjYWxhck11bHQuc2NhbGFyTGVuZ3RoID0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVM7XG5uYWNsLnNjYWxhck11bHQuZ3JvdXBFbGVtZW50TGVuZ3RoID0gY3J5cHRvX3NjYWxhcm11bHRfQllURVM7XG5cbm5hY2wuYm94ID0gZnVuY3Rpb24obXNnLCBub25jZSwgcHVibGljS2V5LCBzZWNyZXRLZXkpIHtcbiAgdmFyIGsgPSBuYWNsLmJveC5iZWZvcmUocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gbmFjbC5zZWNyZXRib3gobXNnLCBub25jZSwgayk7XG59O1xuXG5uYWNsLmJveC5iZWZvcmUgPSBmdW5jdGlvbihwdWJsaWNLZXksIHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICBjaGVja0JveExlbmd0aHMocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICB2YXIgayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyk7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgcHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gaztcbn07XG5cbm5hY2wuYm94LmFmdGVyID0gbmFjbC5zZWNyZXRib3g7XG5cbm5hY2wuYm94Lm9wZW4gPSBmdW5jdGlvbihtc2csIG5vbmNlLCBwdWJsaWNLZXksIHNlY3JldEtleSkge1xuICB2YXIgayA9IG5hY2wuYm94LmJlZm9yZShwdWJsaWNLZXksIHNlY3JldEtleSk7XG4gIHJldHVybiBuYWNsLnNlY3JldGJveC5vcGVuKG1zZywgbm9uY2UsIGspO1xufTtcblxubmFjbC5ib3gub3Blbi5hZnRlciA9IG5hY2wuc2VjcmV0Ym94Lm9wZW47XG5cbm5hY2wuYm94LmtleVBhaXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpO1xuICBjcnlwdG9fYm94X2tleXBhaXIocGssIHNrKTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IHNrfTtcbn07XG5cbm5hY2wuYm94LmtleVBhaXIuZnJvbVNlY3JldEtleSA9IGZ1bmN0aW9uKHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMoc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMpO1xuICBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHBrLCBzZWNyZXRLZXkpO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogbmV3IFVpbnQ4QXJyYXkoc2VjcmV0S2V5KX07XG59O1xuXG5uYWNsLmJveC5wdWJsaWNLZXlMZW5ndGggPSBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTO1xubmFjbC5ib3guc2VjcmV0S2V5TGVuZ3RoID0gY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUztcbm5hY2wuYm94LnNoYXJlZEtleUxlbmd0aCA9IGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUztcbm5hY2wuYm94Lm5vbmNlTGVuZ3RoID0gY3J5cHRvX2JveF9OT05DRUJZVEVTO1xubmFjbC5ib3gub3ZlcmhlYWRMZW5ndGggPSBuYWNsLnNlY3JldGJveC5vdmVyaGVhZExlbmd0aDtcblxubmFjbC5zaWduID0gZnVuY3Rpb24obXNnLCBzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZywgc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xuICB2YXIgc2lnbmVkTXNnID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMrbXNnLmxlbmd0aCk7XG4gIGNyeXB0b19zaWduKHNpZ25lZE1zZywgbXNnLCBtc2cubGVuZ3RoLCBzZWNyZXRLZXkpO1xuICByZXR1cm4gc2lnbmVkTXNnO1xufTtcblxubmFjbC5zaWduLm9wZW4gPSBmdW5jdGlvbihzaWduZWRNc2csIHB1YmxpY0tleSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25hY2wuc2lnbi5vcGVuIGFjY2VwdHMgMiBhcmd1bWVudHM7IGRpZCB5b3UgbWVhbiB0byB1c2UgbmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeT8nKTtcbiAgY2hlY2tBcnJheVR5cGVzKHNpZ25lZE1zZywgcHVibGljS2V5KTtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICB2YXIgdG1wID0gbmV3IFVpbnQ4QXJyYXkoc2lnbmVkTXNnLmxlbmd0aCk7XG4gIHZhciBtbGVuID0gY3J5cHRvX3NpZ25fb3Blbih0bXAsIHNpZ25lZE1zZywgc2lnbmVkTXNnLmxlbmd0aCwgcHVibGljS2V5KTtcbiAgaWYgKG1sZW4gPCAwKSByZXR1cm4gbnVsbDtcbiAgdmFyIG0gPSBuZXcgVWludDhBcnJheShtbGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSBtW2ldID0gdG1wW2ldO1xuICByZXR1cm4gbTtcbn07XG5cbm5hY2wuc2lnbi5kZXRhY2hlZCA9IGZ1bmN0aW9uKG1zZywgc2VjcmV0S2V5KSB7XG4gIHZhciBzaWduZWRNc2cgPSBuYWNsLnNpZ24obXNnLCBzZWNyZXRLZXkpO1xuICB2YXIgc2lnID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZy5sZW5ndGg7IGkrKykgc2lnW2ldID0gc2lnbmVkTXNnW2ldO1xuICByZXR1cm4gc2lnO1xufTtcblxubmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeSA9IGZ1bmN0aW9uKG1zZywgc2lnLCBwdWJsaWNLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZywgc2lnLCBwdWJsaWNLZXkpO1xuICBpZiAoc2lnLmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2lnbmF0dXJlIHNpemUnKTtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICB2YXIgc20gPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9CWVRFUyArIG1zZy5sZW5ndGgpO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTICsgbXNnLmxlbmd0aCk7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgY3J5cHRvX3NpZ25fQllURVM7IGkrKykgc21baV0gPSBzaWdbaV07XG4gIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHNtW2krY3J5cHRvX3NpZ25fQllURVNdID0gbXNnW2ldO1xuICByZXR1cm4gKGNyeXB0b19zaWduX29wZW4obSwgc20sIHNtLmxlbmd0aCwgcHVibGljS2V5KSA+PSAwKTtcbn07XG5cbm5hY2wuc2lnbi5rZXlQYWlyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKTtcbiAgdmFyIHNrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpO1xuICBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzayk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBza307XG59O1xuXG5uYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VjcmV0S2V5ID0gZnVuY3Rpb24oc2VjcmV0S2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhzZWNyZXRLZXkpO1xuICBpZiAoc2VjcmV0S2V5Lmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBway5sZW5ndGg7IGkrKykgcGtbaV0gPSBzZWNyZXRLZXlbMzIraV07XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBuZXcgVWludDhBcnJheShzZWNyZXRLZXkpfTtcbn07XG5cbm5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkID0gZnVuY3Rpb24oc2VlZCkge1xuICBjaGVja0FycmF5VHlwZXMoc2VlZCk7XG4gIGlmIChzZWVkLmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fU0VFREJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlZWQgc2l6ZScpO1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKSBza1tpXSA9IHNlZWRbaV07XG4gIGNyeXB0b19zaWduX2tleXBhaXIocGssIHNrLCB0cnVlKTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IHNrfTtcbn07XG5cbm5hY2wuc2lnbi5wdWJsaWNLZXlMZW5ndGggPSBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUztcbm5hY2wuc2lnbi5zZWNyZXRLZXlMZW5ndGggPSBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUztcbm5hY2wuc2lnbi5zZWVkTGVuZ3RoID0gY3J5cHRvX3NpZ25fU0VFREJZVEVTO1xubmFjbC5zaWduLnNpZ25hdHVyZUxlbmd0aCA9IGNyeXB0b19zaWduX0JZVEVTO1xuXG5uYWNsLmhhc2ggPSBmdW5jdGlvbihtc2cpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZyk7XG4gIHZhciBoID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2hhc2hfQllURVMpO1xuICBjcnlwdG9faGFzaChoLCBtc2csIG1zZy5sZW5ndGgpO1xuICByZXR1cm4gaDtcbn07XG5cbm5hY2wuaGFzaC5oYXNoTGVuZ3RoID0gY3J5cHRvX2hhc2hfQllURVM7XG5cbm5hY2wudmVyaWZ5ID0gZnVuY3Rpb24oeCwgeSkge1xuICBjaGVja0FycmF5VHlwZXMoeCwgeSk7XG4gIC8vIFplcm8gbGVuZ3RoIGFyZ3VtZW50cyBhcmUgY29uc2lkZXJlZCBub3QgZXF1YWwuXG4gIGlmICh4Lmxlbmd0aCA9PT0gMCB8fCB5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoeC5sZW5ndGggIT09IHkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAodm4oeCwgMCwgeSwgMCwgeC5sZW5ndGgpID09PSAwKSA/IHRydWUgOiBmYWxzZTtcbn07XG5cbm5hY2wuc2V0UFJORyA9IGZ1bmN0aW9uKGZuKSB7XG4gIHJhbmRvbWJ5dGVzID0gZm47XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gIC8vIEluaXRpYWxpemUgUFJORyBpZiBlbnZpcm9ubWVudCBwcm92aWRlcyBDU1BSTkcuXG4gIC8vIElmIG5vdCwgbWV0aG9kcyBjYWxsaW5nIHJhbmRvbWJ5dGVzIHdpbGwgdGhyb3cuXG4gIHZhciBjcnlwdG8gPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyAoc2VsZi5jcnlwdG8gfHwgc2VsZi5tc0NyeXB0bykgOiBudWxsO1xuICBpZiAoY3J5cHRvICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBCcm93c2Vycy5cbiAgICB2YXIgUVVPVEEgPSA2NTUzNjtcbiAgICBuYWNsLnNldFBSTkcoZnVuY3Rpb24oeCwgbikge1xuICAgICAgdmFyIGksIHYgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpICs9IFFVT1RBKSB7XG4gICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModi5zdWJhcnJheShpLCBpICsgTWF0aC5taW4obiAtIGksIFFVT1RBKSkpO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeFtpXSA9IHZbaV07XG4gICAgICBjbGVhbnVwKHYpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vZGUuanMuXG4gICAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gICAgaWYgKGNyeXB0byAmJiBjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcbiAgICAgIG5hY2wuc2V0UFJORyhmdW5jdGlvbih4LCBuKSB7XG4gICAgICAgIHZhciBpLCB2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKG4pO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB4W2ldID0gdltpXTtcbiAgICAgICAgY2xlYW51cCh2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSkoKTtcblxufSkodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgPyBtb2R1bGUuZXhwb3J0cyA6IChzZWxmLm5hY2wgPSBzZWxmLm5hY2wgfHwge30pKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwdW55Y29kZSA9IHJlcXVpcmUoJ3B1bnljb2RlJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIGZvciBhIHNpbXBsZSBwYXRoIFVSTFxuICAgIHNpbXBsZVBhdGhQYXR0ZXJuID0gL14oXFwvXFwvPyg/IVxcLylbXlxcP1xcc10qKShcXD9bXlxcc10qKT8kLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlsrYS16MC05QS1aXy1dezAsNjN9JC8sXG4gICAgaG9zdG5hbWVQYXJ0U3RhcnQgPSAvXihbK2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgdXRpbC5pc09iamVjdCh1cmwpICYmIHVybCBpbnN0YW5jZW9mIFVybCkgcmV0dXJuIHVybDtcblxuICB2YXIgdSA9IG5ldyBVcmw7XG4gIHUucGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCk7XG4gIHJldHVybiB1O1xufVxuXG5VcmwucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24odXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAoIXV0aWwuaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICAvLyBDb3B5IGNocm9tZSwgSUUsIG9wZXJhIGJhY2tzbGFzaC1oYW5kbGluZyBiZWhhdmlvci5cbiAgLy8gQmFjayBzbGFzaGVzIGJlZm9yZSB0aGUgcXVlcnkgc3RyaW5nIGdldCBjb252ZXJ0ZWQgdG8gZm9yd2FyZCBzbGFzaGVzXG4gIC8vIFNlZTogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTI1OTE2XG4gIHZhciBxdWVyeUluZGV4ID0gdXJsLmluZGV4T2YoJz8nKSxcbiAgICAgIHNwbGl0dGVyID1cbiAgICAgICAgICAocXVlcnlJbmRleCAhPT0gLTEgJiYgcXVlcnlJbmRleCA8IHVybC5pbmRleE9mKCcjJykpID8gJz8nIDogJyMnLFxuICAgICAgdVNwbGl0ID0gdXJsLnNwbGl0KHNwbGl0dGVyKSxcbiAgICAgIHNsYXNoUmVnZXggPSAvXFxcXC9nO1xuICB1U3BsaXRbMF0gPSB1U3BsaXRbMF0ucmVwbGFjZShzbGFzaFJlZ2V4LCAnLycpO1xuICB1cmwgPSB1U3BsaXQuam9pbihzcGxpdHRlcik7XG5cbiAgdmFyIHJlc3QgPSB1cmw7XG5cbiAgLy8gdHJpbSBiZWZvcmUgcHJvY2VlZGluZy5cbiAgLy8gVGhpcyBpcyB0byBzdXBwb3J0IHBhcnNlIHN0dWZmIGxpa2UgXCIgIGh0dHA6Ly9mb28uY29tICBcXG5cIlxuICByZXN0ID0gcmVzdC50cmltKCk7XG5cbiAgaWYgKCFzbGFzaGVzRGVub3RlSG9zdCAmJiB1cmwuc3BsaXQoJyMnKS5sZW5ndGggPT09IDEpIHtcbiAgICAvLyBUcnkgZmFzdCBwYXRoIHJlZ2V4cFxuICAgIHZhciBzaW1wbGVQYXRoID0gc2ltcGxlUGF0aFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgICBpZiAoc2ltcGxlUGF0aCkge1xuICAgICAgdGhpcy5wYXRoID0gcmVzdDtcbiAgICAgIHRoaXMuaHJlZiA9IHJlc3Q7XG4gICAgICB0aGlzLnBhdGhuYW1lID0gc2ltcGxlUGF0aFsxXTtcbiAgICAgIGlmIChzaW1wbGVQYXRoWzJdKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gc2ltcGxlUGF0aFsyXTtcbiAgICAgICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5zZWFyY2guc3Vic3RyKDEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWFyY2guc3Vic3RyKDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSAnJztcbiAgICAgICAgdGhpcy5xdWVyeSA9IHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9XG5cbiAgdmFyIHByb3RvID0gcHJvdG9jb2xQYXR0ZXJuLmV4ZWMocmVzdCk7XG4gIGlmIChwcm90bykge1xuICAgIHByb3RvID0gcHJvdG9bMF07XG4gICAgdmFyIGxvd2VyUHJvdG8gPSBwcm90by50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucHJvdG9jb2wgPSBsb3dlclByb3RvO1xuICAgIHJlc3QgPSByZXN0LnN1YnN0cihwcm90by5sZW5ndGgpO1xuICB9XG5cbiAgLy8gZmlndXJlIG91dCBpZiBpdCdzIGdvdCBhIGhvc3RcbiAgLy8gdXNlckBzZXJ2ZXIgaXMgKmFsd2F5cyogaW50ZXJwcmV0ZWQgYXMgYSBob3N0bmFtZSwgYW5kIHVybFxuICAvLyByZXNvbHV0aW9uIHdpbGwgdHJlYXQgLy9mb28vYmFyIGFzIGhvc3Q9Zm9vLHBhdGg9YmFyIGJlY2F1c2UgdGhhdCdzXG4gIC8vIGhvdyB0aGUgYnJvd3NlciByZXNvbHZlcyByZWxhdGl2ZSBVUkxzLlxuICBpZiAoc2xhc2hlc0Rlbm90ZUhvc3QgfHwgcHJvdG8gfHwgcmVzdC5tYXRjaCgvXlxcL1xcL1teQFxcL10rQFteQFxcL10rLykpIHtcbiAgICB2YXIgc2xhc2hlcyA9IHJlc3Quc3Vic3RyKDAsIDIpID09PSAnLy8nO1xuICAgIGlmIChzbGFzaGVzICYmICEocHJvdG8gJiYgaG9zdGxlc3NQcm90b2NvbFtwcm90b10pKSB7XG4gICAgICByZXN0ID0gcmVzdC5zdWJzdHIoMik7XG4gICAgICB0aGlzLnNsYXNoZXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaG9zdGxlc3NQcm90b2NvbFtwcm90b10gJiZcbiAgICAgIChzbGFzaGVzIHx8IChwcm90byAmJiAhc2xhc2hlZFByb3RvY29sW3Byb3RvXSkpKSB7XG5cbiAgICAvLyB0aGVyZSdzIGEgaG9zdG5hbWUuXG4gICAgLy8gdGhlIGZpcnN0IGluc3RhbmNlIG9mIC8sID8sIDssIG9yICMgZW5kcyB0aGUgaG9zdC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlIGlzIGFuIEAgaW4gdGhlIGhvc3RuYW1lLCB0aGVuIG5vbi1ob3N0IGNoYXJzICphcmUqIGFsbG93ZWRcbiAgICAvLyB0byB0aGUgbGVmdCBvZiB0aGUgbGFzdCBAIHNpZ24sIHVubGVzcyBzb21lIGhvc3QtZW5kaW5nIGNoYXJhY3RlclxuICAgIC8vIGNvbWVzICpiZWZvcmUqIHRoZSBALXNpZ24uXG4gICAgLy8gVVJMcyBhcmUgb2Jub3hpb3VzLlxuICAgIC8vXG4gICAgLy8gZXg6XG4gICAgLy8gaHR0cDovL2FAYkBjLyA9PiB1c2VyOmFAYiBob3N0OmNcbiAgICAvLyBodHRwOi8vYUBiP0BjID0+IHVzZXI6YSBob3N0OmMgcGF0aDovP0BjXG5cbiAgICAvLyB2MC4xMiBUT0RPKGlzYWFjcyk6IFRoaXMgaXMgbm90IHF1aXRlIGhvdyBDaHJvbWUgZG9lcyB0aGluZ3MuXG4gICAgLy8gUmV2aWV3IG91ciB0ZXN0IGNhc2UgYWdhaW5zdCBicm93c2VycyBtb3JlIGNvbXByZWhlbnNpdmVseS5cblxuICAgIC8vIGZpbmQgdGhlIGZpcnN0IGluc3RhbmNlIG9mIGFueSBob3N0RW5kaW5nQ2hhcnNcbiAgICB2YXIgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9zdEVuZGluZ0NoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKGhvc3RFbmRpbmdDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuXG4gICAgLy8gYXQgdGhpcyBwb2ludCwgZWl0aGVyIHdlIGhhdmUgYW4gZXhwbGljaXQgcG9pbnQgd2hlcmUgdGhlXG4gICAgLy8gYXV0aCBwb3J0aW9uIGNhbm5vdCBnbyBwYXN0LCBvciB0aGUgbGFzdCBAIGNoYXIgaXMgdGhlIGRlY2lkZXIuXG4gICAgdmFyIGF1dGgsIGF0U2lnbjtcbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIGF0U2lnbiBjYW4gYmUgYW55d2hlcmUuXG4gICAgICBhdFNpZ24gPSByZXN0Lmxhc3RJbmRleE9mKCdAJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGF0U2lnbiBtdXN0IGJlIGluIGF1dGggcG9ydGlvbi5cbiAgICAgIC8vIGh0dHA6Ly9hQGIvY0BkID0+IGhvc3Q6YiBhdXRoOmEgcGF0aDovY0BkXG4gICAgICBhdFNpZ24gPSByZXN0Lmxhc3RJbmRleE9mKCdAJywgaG9zdEVuZCk7XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGhhdmUgYSBwb3J0aW9uIHdoaWNoIGlzIGRlZmluaXRlbHkgdGhlIGF1dGguXG4gICAgLy8gUHVsbCB0aGF0IG9mZi5cbiAgICBpZiAoYXRTaWduICE9PSAtMSkge1xuICAgICAgYXV0aCA9IHJlc3Quc2xpY2UoMCwgYXRTaWduKTtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKGF0U2lnbiArIDEpO1xuICAgICAgdGhpcy5hdXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIH1cblxuICAgIC8vIHRoZSBob3N0IGlzIHRoZSByZW1haW5pbmcgdG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IG5vbi1ob3N0IGNoYXJcbiAgICBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub25Ib3N0Q2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2Yobm9uSG9zdENoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG4gICAgLy8gaWYgd2Ugc3RpbGwgaGF2ZSBub3QgaGl0IGl0LCB0aGVuIHRoZSBlbnRpcmUgdGhpbmcgaXMgYSBob3N0LlxuICAgIGlmIChob3N0RW5kID09PSAtMSlcbiAgICAgIGhvc3RFbmQgPSByZXN0Lmxlbmd0aDtcblxuICAgIHRoaXMuaG9zdCA9IHJlc3Quc2xpY2UoMCwgaG9zdEVuZCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoaG9zdEVuZCk7XG5cbiAgICAvLyBwdWxsIG91dCBwb3J0LlxuICAgIHRoaXMucGFyc2VIb3N0KCk7XG5cbiAgICAvLyB3ZSd2ZSBpbmRpY2F0ZWQgdGhhdCB0aGVyZSBpcyBhIGhvc3RuYW1lLFxuICAgIC8vIHNvIGV2ZW4gaWYgaXQncyBlbXB0eSwgaXQgaGFzIHRvIGJlIHByZXNlbnQuXG4gICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG5cbiAgICAvLyBpZiBob3N0bmFtZSBiZWdpbnMgd2l0aCBbIGFuZCBlbmRzIHdpdGggXVxuICAgIC8vIGFzc3VtZSB0aGF0IGl0J3MgYW4gSVB2NiBhZGRyZXNzLlxuICAgIHZhciBpcHY2SG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lWzBdID09PSAnWycgJiZcbiAgICAgICAgdGhpcy5ob3N0bmFtZVt0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDFdID09PSAnXSc7XG5cbiAgICAvLyB2YWxpZGF0ZSBhIGxpdHRsZS5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgdmFyIGhvc3RwYXJ0cyA9IHRoaXMuaG9zdG5hbWUuc3BsaXQoL1xcLi8pO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBob3N0cGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXJ0ID0gaG9zdHBhcnRzW2ldO1xuICAgICAgICBpZiAoIXBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIXBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICB2YXIgbmV3cGFydCA9ICcnO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwLCBrID0gcGFydC5sZW5ndGg7IGogPCBrOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJ0LmNoYXJDb2RlQXQoaikgPiAxMjcpIHtcbiAgICAgICAgICAgICAgLy8gd2UgcmVwbGFjZSBub24tQVNDSUkgY2hhciB3aXRoIGEgdGVtcG9yYXJ5IHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgIC8vIHdlIG5lZWQgdGhpcyB0byBtYWtlIHN1cmUgc2l6ZSBvZiBob3N0bmFtZSBpcyBub3RcbiAgICAgICAgICAgICAgLy8gYnJva2VuIGJ5IHJlcGxhY2luZyBub24tQVNDSUkgYnkgbm90aGluZ1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9ICd4JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gcGFydFtqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gd2UgdGVzdCBhZ2FpbiB3aXRoIEFTQ0lJIGNoYXIgb25seVxuICAgICAgICAgIGlmICghbmV3cGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgICAgdmFyIHZhbGlkUGFydHMgPSBob3N0cGFydHMuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICB2YXIgbm90SG9zdCA9IGhvc3RwYXJ0cy5zbGljZShpICsgMSk7XG4gICAgICAgICAgICB2YXIgYml0ID0gcGFydC5tYXRjaChob3N0bmFtZVBhcnRTdGFydCk7XG4gICAgICAgICAgICBpZiAoYml0KSB7XG4gICAgICAgICAgICAgIHZhbGlkUGFydHMucHVzaChiaXRbMV0pO1xuICAgICAgICAgICAgICBub3RIb3N0LnVuc2hpZnQoYml0WzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub3RIb3N0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXN0ID0gJy8nICsgbm90SG9zdC5qb2luKCcuJykgKyByZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ob3N0bmFtZSA9IHZhbGlkUGFydHMuam9pbignLicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaG9zdG5hbWUubGVuZ3RoID4gaG9zdG5hbWVNYXhMZW4pIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaG9zdG5hbWVzIGFyZSBhbHdheXMgbG93ZXIgY2FzZS5cbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIC8vIElETkEgU3VwcG9ydDogUmV0dXJucyBhIHB1bnljb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGF2ZSBub24tQVNDSUkgY2hhcmFjdGVycywgaS5lLiBpdCBkb2Vzbid0IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgQVNDSUktb25seS5cbiAgICAgIHRoaXMuaG9zdG5hbWUgPSBwdW55Y29kZS50b0FTQ0lJKHRoaXMuaG9zdG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBwID0gdGhpcy5wb3J0ID8gJzonICsgdGhpcy5wb3J0IDogJyc7XG4gICAgdmFyIGggPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuICAgIHRoaXMuaG9zdCA9IGggKyBwO1xuICAgIHRoaXMuaHJlZiArPSB0aGlzLmhvc3Q7XG5cbiAgICAvLyBzdHJpcCBbIGFuZCBdIGZyb20gdGhlIGhvc3RuYW1lXG4gICAgLy8gdGhlIGhvc3QgZmllbGQgc3RpbGwgcmV0YWlucyB0aGVtLCB0aG91Z2hcbiAgICBpZiAoaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS5zdWJzdHIoMSwgdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIGlmIChyZXN0WzBdICE9PSAnLycpIHtcbiAgICAgICAgcmVzdCA9ICcvJyArIHJlc3Q7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gbm93IHJlc3QgaXMgc2V0IHRvIHRoZSBwb3N0LWhvc3Qgc3R1ZmYuXG4gIC8vIGNob3Agb2ZmIGFueSBkZWxpbSBjaGFycy5cbiAgaWYgKCF1bnNhZmVQcm90b2NvbFtsb3dlclByb3RvXSkge1xuXG4gICAgLy8gRmlyc3QsIG1ha2UgMTAwJSBzdXJlIHRoYXQgYW55IFwiYXV0b0VzY2FwZVwiIGNoYXJzIGdldFxuICAgIC8vIGVzY2FwZWQsIGV2ZW4gaWYgZW5jb2RlVVJJQ29tcG9uZW50IGRvZXNuJ3QgdGhpbmsgdGhleVxuICAgIC8vIG5lZWQgdG8gYmUuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdXRvRXNjYXBlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdmFyIGFlID0gYXV0b0VzY2FwZVtpXTtcbiAgICAgIGlmIChyZXN0LmluZGV4T2YoYWUpID09PSAtMSlcbiAgICAgICAgY29udGludWU7XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKHV0aWwuaXNTdHJpbmcob2JqKSkgb2JqID0gdXJsUGFyc2Uob2JqKTtcbiAgaWYgKCEob2JqIGluc3RhbmNlb2YgVXJsKSkgcmV0dXJuIFVybC5wcm90b3R5cGUuZm9ybWF0LmNhbGwob2JqKTtcbiAgcmV0dXJuIG9iai5mb3JtYXQoKTtcbn1cblxuVXJsLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGF1dGggPSB0aGlzLmF1dGggfHwgJyc7XG4gIGlmIChhdXRoKSB7XG4gICAgYXV0aCA9IGVuY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICBhdXRoID0gYXV0aC5yZXBsYWNlKC8lM0EvaSwgJzonKTtcbiAgICBhdXRoICs9ICdAJztcbiAgfVxuXG4gIHZhciBwcm90b2NvbCA9IHRoaXMucHJvdG9jb2wgfHwgJycsXG4gICAgICBwYXRobmFtZSA9IHRoaXMucGF0aG5hbWUgfHwgJycsXG4gICAgICBoYXNoID0gdGhpcy5oYXNoIHx8ICcnLFxuICAgICAgaG9zdCA9IGZhbHNlLFxuICAgICAgcXVlcnkgPSAnJztcblxuICBpZiAodGhpcy5ob3N0KSB7XG4gICAgaG9zdCA9IGF1dGggKyB0aGlzLmhvc3Q7XG4gIH0gZWxzZSBpZiAodGhpcy5ob3N0bmFtZSkge1xuICAgIGhvc3QgPSBhdXRoICsgKHRoaXMuaG9zdG5hbWUuaW5kZXhPZignOicpID09PSAtMSA/XG4gICAgICAgIHRoaXMuaG9zdG5hbWUgOlxuICAgICAgICAnWycgKyB0aGlzLmhvc3RuYW1lICsgJ10nKTtcbiAgICBpZiAodGhpcy5wb3J0KSB7XG4gICAgICBob3N0ICs9ICc6JyArIHRoaXMucG9ydDtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5xdWVyeSAmJlxuICAgICAgdXRpbC5pc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAodXRpbC5pc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgdmFyIHRrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gIGZvciAodmFyIHRrID0gMDsgdGsgPCB0a2V5cy5sZW5ndGg7IHRrKyspIHtcbiAgICB2YXIgdGtleSA9IHRrZXlzW3RrXTtcbiAgICByZXN1bHRbdGtleV0gPSB0aGlzW3RrZXldO1xuICB9XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICB2YXIgcmtleXMgPSBPYmplY3Qua2V5cyhyZWxhdGl2ZSk7XG4gICAgZm9yICh2YXIgcmsgPSAwOyByayA8IHJrZXlzLmxlbmd0aDsgcmsrKykge1xuICAgICAgdmFyIHJrZXkgPSBya2V5c1tya107XG4gICAgICBpZiAocmtleSAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W3JrZXldID0gcmVsYXRpdmVbcmtleV07XG4gICAgfVxuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMocmVsYXRpdmUpO1xuICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPCBrZXlzLmxlbmd0aDsgdisrKSB7XG4gICAgICAgIHZhciBrID0ga2V5c1t2XTtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9XG4gICAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmVzdWx0LnByb3RvY29sID0gcmVsYXRpdmUucHJvdG9jb2w7XG4gICAgaWYgKCFyZWxhdGl2ZS5ob3N0ICYmICFob3N0bGVzc1Byb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgdmFyIHJlbFBhdGggPSAocmVsYXRpdmUucGF0aG5hbWUgfHwgJycpLnNwbGl0KCcvJyk7XG4gICAgICB3aGlsZSAocmVsUGF0aC5sZW5ndGggJiYgIShyZWxhdGl2ZS5ob3N0ID0gcmVsUGF0aC5zaGlmdCgpKSk7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3QpIHJlbGF0aXZlLmhvc3QgPSAnJztcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdG5hbWUpIHJlbGF0aXZlLmhvc3RuYW1lID0gJyc7XG4gICAgICBpZiAocmVsUGF0aFswXSAhPT0gJycpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICBpZiAocmVsUGF0aC5sZW5ndGggPCAyKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsUGF0aC5qb2luKCcvJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbGF0aXZlLnBhdGhuYW1lO1xuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHJlc3VsdC5ob3N0ID0gcmVsYXRpdmUuaG9zdCB8fCAnJztcbiAgICByZXN1bHQuYXV0aCA9IHJlbGF0aXZlLmF1dGg7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVsYXRpdmUuaG9zdG5hbWUgfHwgcmVsYXRpdmUuaG9zdDtcbiAgICByZXN1bHQucG9ydCA9IHJlbGF0aXZlLnBvcnQ7XG4gICAgLy8gdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnBhdGhuYW1lIHx8IHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHZhciBwID0gcmVzdWx0LnBhdGhuYW1lIHx8ICcnO1xuICAgICAgdmFyIHMgPSByZXN1bHQuc2VhcmNoIHx8ICcnO1xuICAgICAgcmVzdWx0LnBhdGggPSBwICsgcztcbiAgICB9XG4gICAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIgaXNTb3VyY2VBYnMgPSAocmVzdWx0LnBhdGhuYW1lICYmIHJlc3VsdC5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJyksXG4gICAgICBpc1JlbEFicyA9IChcbiAgICAgICAgICByZWxhdGl2ZS5ob3N0IHx8XG4gICAgICAgICAgcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLydcbiAgICAgICksXG4gICAgICBtdXN0RW5kQWJzID0gKGlzUmVsQWJzIHx8IGlzU291cmNlQWJzIHx8XG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuaG9zdCAmJiByZWxhdGl2ZS5wYXRobmFtZSkpLFxuICAgICAgcmVtb3ZlQWxsRG90cyA9IG11c3RFbmRBYnMsXG4gICAgICBzcmNQYXRoID0gcmVzdWx0LnBhdGhuYW1lICYmIHJlc3VsdC5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcmVsUGF0aCA9IHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICBwc3ljaG90aWMgPSByZXN1bHQucHJvdG9jb2wgJiYgIXNsYXNoZWRQcm90b2NvbFtyZXN1bHQucHJvdG9jb2xdO1xuXG4gIC8vIGlmIHRoZSB1cmwgaXMgYSBub24tc2xhc2hlZCB1cmwsIHRoZW4gcmVsYXRpdmVcbiAgLy8gbGlua3MgbGlrZSAuLi8uLiBzaG91bGQgYmUgYWJsZVxuICAvLyB0byBjcmF3bCB1cCB0byB0aGUgaG9zdG5hbWUsIGFzIHdlbGwuICBUaGlzIGlzIHN0cmFuZ2UuXG4gIC8vIHJlc3VsdC5wcm90b2NvbCBoYXMgYWxyZWFkeSBiZWVuIHNldCBieSBub3cuXG4gIC8vIExhdGVyIG9uLCBwdXQgdGhlIGZpcnN0IHBhdGggcGFydCBpbnRvIHRoZSBob3N0IGZpZWxkLlxuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gJyc7XG4gICAgcmVzdWx0LnBvcnQgPSBudWxsO1xuICAgIGlmIChyZXN1bHQuaG9zdCkge1xuICAgICAgaWYgKHNyY1BhdGhbMF0gPT09ICcnKSBzcmNQYXRoWzBdID0gcmVzdWx0Lmhvc3Q7XG4gICAgICBlbHNlIHNyY1BhdGgudW5zaGlmdChyZXN1bHQuaG9zdCk7XG4gICAgfVxuICAgIHJlc3VsdC5ob3N0ID0gJyc7XG4gICAgaWYgKHJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgICByZWxhdGl2ZS5ob3N0bmFtZSA9IG51bGw7XG4gICAgICByZWxhdGl2ZS5wb3J0ID0gbnVsbDtcbiAgICAgIGlmIChyZWxhdGl2ZS5ob3N0KSB7XG4gICAgICAgIGlmIChyZWxQYXRoWzBdID09PSAnJykgcmVsUGF0aFswXSA9IHJlbGF0aXZlLmhvc3Q7XG4gICAgICAgIGVsc2UgcmVsUGF0aC51bnNoaWZ0KHJlbGF0aXZlLmhvc3QpO1xuICAgICAgfVxuICAgICAgcmVsYXRpdmUuaG9zdCA9IG51bGw7XG4gICAgfVxuICAgIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzICYmIChyZWxQYXRoWzBdID09PSAnJyB8fCBzcmNQYXRoWzBdID09PSAnJyk7XG4gIH1cblxuICBpZiAoaXNSZWxBYnMpIHtcbiAgICAvLyBpdCdzIGFic29sdXRlLlxuICAgIHJlc3VsdC5ob3N0ID0gKHJlbGF0aXZlLmhvc3QgfHwgcmVsYXRpdmUuaG9zdCA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3QgOiByZXN1bHQuaG9zdDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAocmVsYXRpdmUuaG9zdG5hbWUgfHwgcmVsYXRpdmUuaG9zdG5hbWUgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgOiByZXN1bHQuaG9zdG5hbWU7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICBzcmNQYXRoID0gcmVsUGF0aDtcbiAgICAvLyBmYWxsIHRocm91Z2ggdG8gdGhlIGRvdC1oYW5kbGluZyBiZWxvdy5cbiAgfSBlbHNlIGlmIChyZWxQYXRoLmxlbmd0aCkge1xuICAgIC8vIGl0J3MgcmVsYXRpdmVcbiAgICAvLyB0aHJvdyBhd2F5IHRoZSBleGlzdGluZyBmaWxlLCBhbmQgdGFrZSB0aGUgbmV3IHBhdGggaW5zdGVhZC5cbiAgICBpZiAoIXNyY1BhdGgpIHNyY1BhdGggPSBbXTtcbiAgICBzcmNQYXRoLnBvcCgpO1xuICAgIHNyY1BhdGggPSBzcmNQYXRoLmNvbmNhdChyZWxQYXRoKTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICB9IGVsc2UgaWYgKCF1dGlsLmlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbGx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKCF1dGlsLmlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICF1dGlsLmlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCB8fCBzcmNQYXRoLmxlbmd0aCA+IDEpICYmXG4gICAgICAobGFzdCA9PT0gJy4nIHx8IGxhc3QgPT09ICcuLicpIHx8IGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoIW11c3RFbmRBYnMgJiYgIXJlbW92ZUFsbERvdHMpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHNyY1BhdGgudW5zaGlmdCgnLi4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAobXVzdEVuZEFicyAmJiBzcmNQYXRoWzBdICE9PSAnJyAmJlxuICAgICAgKCFzcmNQYXRoWzBdIHx8IHNyY1BhdGhbMF0uY2hhckF0KDApICE9PSAnLycpKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmIChoYXNUcmFpbGluZ1NsYXNoICYmIChzcmNQYXRoLmpvaW4oJy8nKS5zdWJzdHIoLTEpICE9PSAnLycpKSB7XG4gICAgc3JjUGF0aC5wdXNoKCcnKTtcbiAgfVxuXG4gIHZhciBpc0Fic29sdXRlID0gc3JjUGF0aFswXSA9PT0gJycgfHxcbiAgICAgIChzcmNQYXRoWzBdICYmIHNyY1BhdGhbMF0uY2hhckF0KDApID09PSAnLycpO1xuXG4gIC8vIHB1dCB0aGUgaG9zdCBiYWNrXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IGlzQWJzb2x1dGUgPyAnJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQYXRoLmxlbmd0aCA/IHNyY1BhdGguc2hpZnQoKSA6ICcnO1xuICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAvL3RoaXMgZXNwZWNpYWxseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghdXRpbC5pc051bGwocmVzdWx0LnBhdGhuYW1lKSB8fCAhdXRpbC5pc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNTdHJpbmc6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YoYXJnKSA9PT0gJ3N0cmluZyc7XG4gIH0sXG4gIGlzT2JqZWN0OiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gdHlwZW9mKGFyZykgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbiAgfSxcbiAgaXNOdWxsOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnID09PSBudWxsO1xuICB9LFxuICBpc051bGxPclVuZGVmaW5lZDogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGFyZyA9PSBudWxsO1xuICB9XG59O1xuIiwiXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZGVwcmVjYXRlO1xuXG4vKipcbiAqIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4gKiBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2Uubm9EZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuICpcbiAqIElmIGBsb2NhbFN0b3JhZ2UudGhyb3dEZXByZWNhdGlvbiA9IHRydWVgIGlzIHNldCwgdGhlbiBkZXByZWNhdGVkIGZ1bmN0aW9uc1xuICogd2lsbCB0aHJvdyBhbiBFcnJvciB3aGVuIGludm9rZWQuXG4gKlxuICogSWYgYGxvY2FsU3RvcmFnZS50cmFjZURlcHJlY2F0aW9uID0gdHJ1ZWAgaXMgc2V0LCB0aGVuIGRlcHJlY2F0ZWQgZnVuY3Rpb25zXG4gKiB3aWxsIGludm9rZSBgY29uc29sZS50cmFjZSgpYCBpbnN0ZWFkIG9mIGBjb25zb2xlLmVycm9yKClgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gdGhlIGZ1bmN0aW9uIHRvIGRlcHJlY2F0ZVxuICogQHBhcmFtIHtTdHJpbmd9IG1zZyAtIHRoZSBzdHJpbmcgdG8gcHJpbnQgdG8gdGhlIGNvbnNvbGUgd2hlbiBgZm5gIGlzIGludm9rZWRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gYSBuZXcgXCJkZXByZWNhdGVkXCIgdmVyc2lvbiBvZiBgZm5gXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGRlcHJlY2F0ZSAoZm4sIG1zZykge1xuICBpZiAoY29uZmlnKCdub0RlcHJlY2F0aW9uJykpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChjb25maWcoJ3Rocm93RGVwcmVjYXRpb24nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnKCd0cmFjZURlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBgbG9jYWxTdG9yYWdlYCBmb3IgYm9vbGVhbiB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBgbmFtZWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY29uZmlnIChuYW1lKSB7XG4gIC8vIGFjY2Vzc2luZyBnbG9iYWwubG9jYWxTdG9yYWdlIGNhbiB0cmlnZ2VyIGEgRE9NRXhjZXB0aW9uIGluIHNhbmRib3hlZCBpZnJhbWVzXG4gIHRyeSB7XG4gICAgaWYgKCFnbG9iYWwubG9jYWxTdG9yYWdlKSByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHZhbCA9IGdsb2JhbC5sb2NhbFN0b3JhZ2VbbmFtZV07XG4gIGlmIChudWxsID09IHZhbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZztcbmV4cG9ydHMuZm9ybWF0ID0gZnVuY3Rpb24oZikge1xuICBpZiAoIWlzU3RyaW5nKGYpKSB7XG4gICAgdmFyIG9iamVjdHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKGluc3BlY3QoYXJndW1lbnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZhciBpID0gMTtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24oeCkge1xuICAgIGlmICh4ID09PSAnJSUnKSByZXR1cm4gJyUnO1xuICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7XG4gICAgc3dpdGNoICh4KSB7XG4gICAgICBjYXNlICclcyc6IHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVkJzogcmV0dXJuIE51bWJlcihhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWonOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9KTtcbiAgZm9yICh2YXIgeCA9IGFyZ3NbaV07IGkgPCBsZW47IHggPSBhcmdzWysraV0pIHtcbiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkge1xuICAgICAgc3RyICs9ICcgJyArIHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufTtcblxuXG4vLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5leHBvcnRzLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKGZuLCBtc2cpIHtcbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKGlzVW5kZWZpbmVkKGdsb2JhbC5wcm9jZXNzKSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICBpZiAocHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgIGlmICghd2FybmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy50aHJvd0RlcHJlY2F0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLnRyYWNlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgY29uc29sZS50cmFjZShtc2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn07XG5cblxudmFyIGRlYnVncyA9IHt9O1xudmFyIGRlYnVnRW52aXJvbjtcbmV4cG9ydHMuZGVidWdsb2cgPSBmdW5jdGlvbihzZXQpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKGRlYnVnRW52aXJvbikpXG4gICAgZGVidWdFbnZpcm9uID0gcHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJztcbiAgc2V0ID0gc2V0LnRvVXBwZXJDYXNlKCk7XG4gIGlmICghZGVidWdzW3NldF0pIHtcbiAgICBpZiAobmV3IFJlZ0V4cCgnXFxcXGInICsgc2V0ICsgJ1xcXFxiJywgJ2knKS50ZXN0KGRlYnVnRW52aXJvbikpIHtcbiAgICAgIHZhciBwaWQgPSBwcm9jZXNzLnBpZDtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBtc2cgPSBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCclcyAlZDogJXMnLCBzZXQsIHBpZCwgbXNnKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7fTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlYnVnc1tzZXRdO1xufTtcblxuXG4vKipcbiAqIEVjaG9zIHRoZSB2YWx1ZSBvZiBhIHZhbHVlLiBUcnlzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBwcmludCBvdXQuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCBvcHRpb25zIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgb3V0cHV0LlxuICovXG4vKiBsZWdhY3k6IG9iaiwgc2hvd0hpZGRlbiwgZGVwdGgsIGNvbG9ycyovXG5mdW5jdGlvbiBpbnNwZWN0KG9iaiwgb3B0cykge1xuICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgdmFyIGN0eCA9IHtcbiAgICBzZWVuOiBbXSxcbiAgICBzdHlsaXplOiBzdHlsaXplTm9Db2xvclxuICB9O1xuICAvLyBsZWdhY3kuLi5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgY3R4LmRlcHRoID0gYXJndW1lbnRzWzJdO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSA0KSBjdHguY29sb3JzID0gYXJndW1lbnRzWzNdO1xuICBpZiAoaXNCb29sZWFuKG9wdHMpKSB7XG4gICAgLy8gbGVnYWN5Li4uXG4gICAgY3R4LnNob3dIaWRkZW4gPSBvcHRzO1xuICB9IGVsc2UgaWYgKG9wdHMpIHtcbiAgICAvLyBnb3QgYW4gXCJvcHRpb25zXCIgb2JqZWN0XG4gICAgZXhwb3J0cy5fZXh0ZW5kKGN0eCwgb3B0cyk7XG4gIH1cbiAgLy8gc2V0IGRlZmF1bHQgb3B0aW9uc1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LnNob3dIaWRkZW4pKSBjdHguc2hvd0hpZGRlbiA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmRlcHRoKSkgY3R4LmRlcHRoID0gMjtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jb2xvcnMpKSBjdHguY29sb3JzID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY3VzdG9tSW5zcGVjdCkpIGN0eC5jdXN0b21JbnNwZWN0ID0gdHJ1ZTtcbiAgaWYgKGN0eC5jb2xvcnMpIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjtcbiAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgb2JqLCBjdHguZGVwdGgpO1xufVxuZXhwb3J0cy5pbnNwZWN0ID0gaW5zcGVjdDtcblxuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3Ncbmluc3BlY3QuY29sb3JzID0ge1xuICAnYm9sZCcgOiBbMSwgMjJdLFxuICAnaXRhbGljJyA6IFszLCAyM10sXG4gICd1bmRlcmxpbmUnIDogWzQsIDI0XSxcbiAgJ2ludmVyc2UnIDogWzcsIDI3XSxcbiAgJ3doaXRlJyA6IFszNywgMzldLFxuICAnZ3JleScgOiBbOTAsIDM5XSxcbiAgJ2JsYWNrJyA6IFszMCwgMzldLFxuICAnYmx1ZScgOiBbMzQsIDM5XSxcbiAgJ2N5YW4nIDogWzM2LCAzOV0sXG4gICdncmVlbicgOiBbMzIsIDM5XSxcbiAgJ21hZ2VudGEnIDogWzM1LCAzOV0sXG4gICdyZWQnIDogWzMxLCAzOV0sXG4gICd5ZWxsb3cnIDogWzMzLCAzOV1cbn07XG5cbi8vIERvbid0IHVzZSAnYmx1ZScgbm90IHZpc2libGUgb24gY21kLmV4ZVxuaW5zcGVjdC5zdHlsZXMgPSB7XG4gICdzcGVjaWFsJzogJ2N5YW4nLFxuICAnbnVtYmVyJzogJ3llbGxvdycsXG4gICdib29sZWFuJzogJ3llbGxvdycsXG4gICd1bmRlZmluZWQnOiAnZ3JleScsXG4gICdudWxsJzogJ2JvbGQnLFxuICAnc3RyaW5nJzogJ2dyZWVuJyxcbiAgJ2RhdGUnOiAnbWFnZW50YScsXG4gIC8vIFwibmFtZVwiOiBpbnRlbnRpb25hbGx5IG5vdCBzdHlsaW5nXG4gICdyZWdleHAnOiAncmVkJ1xufTtcblxuXG5mdW5jdGlvbiBzdHlsaXplV2l0aENvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHZhciBzdHlsZSA9IGluc3BlY3Quc3R5bGVzW3N0eWxlVHlwZV07XG5cbiAgaWYgKHN0eWxlKSB7XG4gICAgcmV0dXJuICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMF0gKyAnbScgKyBzdHIgK1xuICAgICAgICAgICAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdICsgJ20nO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBzdHlsaXplTm9Db2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICByZXR1cm4gc3RyO1xufVxuXG5cbmZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KSB7XG4gIHZhciBoYXNoID0ge307XG5cbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlkeCkge1xuICAgIGhhc2hbdmFsXSA9IHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBoYXNoO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdXNlci1zcGVjaWZpZWQgaW5zcGVjdCBmdW5jdGlvbnMuXG4gIC8vIENoZWNrIHRoYXQgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYW4gaW5zcGVjdCBmdW5jdGlvbiBvbiBpdFxuICBpZiAoY3R4LmN1c3RvbUluc3BlY3QgJiZcbiAgICAgIHZhbHVlICYmXG4gICAgICBpc0Z1bmN0aW9uKHZhbHVlLmluc3BlY3QpICYmXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB1dGlsIG1vZHVsZSwgaXQncyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWxcbiAgICAgIHZhbHVlLmluc3BlY3QgIT09IGV4cG9ydHMuaW5zcGVjdCAmJlxuICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IGFueSBwcm90b3R5cGUgb2JqZWN0cyB1c2luZyB0aGUgY2lyY3VsYXIgY2hlY2suXG4gICAgICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpKSB7XG4gICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzLCBjdHgpO1xuICAgIGlmICghaXNTdHJpbmcocmV0KSkge1xuICAgICAgcmV0ID0gZm9ybWF0VmFsdWUoY3R4LCByZXQsIHJlY3Vyc2VUaW1lcyk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyBQcmltaXRpdmUgdHlwZXMgY2Fubm90IGhhdmUgcHJvcGVydGllc1xuICB2YXIgcHJpbWl0aXZlID0gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpO1xuICBpZiAocHJpbWl0aXZlKSB7XG4gICAgcmV0dXJuIHByaW1pdGl2ZTtcbiAgfVxuXG4gIC8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gIHZhciB2aXNpYmxlS2V5cyA9IGFycmF5VG9IYXNoKGtleXMpO1xuXG4gIGlmIChjdHguc2hvd0hpZGRlbikge1xuICAgIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gIH1cblxuICAvLyBJRSBkb2Vzbid0IG1ha2UgZXJyb3IgZmllbGRzIG5vbi1lbnVtZXJhYmxlXG4gIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9kd3c1MnNidCh2PXZzLjk0KS5hc3B4XG4gIGlmIChpc0Vycm9yKHZhbHVlKVxuICAgICAgJiYgKGtleXMuaW5kZXhPZignbWVzc2FnZScpID49IDAgfHwga2V5cy5pbmRleE9mKCdkZXNjcmlwdGlvbicpID49IDApKSB7XG4gICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIC8vIFNvbWUgdHlwZSBvZiBvYmplY3Qgd2l0aG91dCBwcm9wZXJ0aWVzIGNhbiBiZSBzaG9ydGN1dHRlZC5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICB2YXIgbmFtZSA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbRnVuY3Rpb24nICsgbmFtZSArICddJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9XG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ2RhdGUnKTtcbiAgICB9XG4gICAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNlID0gJycsIGFycmF5ID0gZmFsc2UsIGJyYWNlcyA9IFsneycsICd9J107XG5cbiAgLy8gTWFrZSBBcnJheSBzYXkgdGhhdCB0aGV5IGFyZSBBcnJheVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBhcnJheSA9IHRydWU7XG4gICAgYnJhY2VzID0gWydbJywgJ10nXTtcbiAgfVxuXG4gIC8vIE1ha2UgZnVuY3Rpb25zIHNheSB0aGF0IHRoZXkgYXJlIGZ1bmN0aW9uc1xuICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnO1xuICAgIGJhc2UgPSAnIFtGdW5jdGlvbicgKyBuICsgJ10nO1xuICB9XG5cbiAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBkYXRlcyB3aXRoIHByb3BlcnRpZXMgZmlyc3Qgc2F5IHRoZSBkYXRlXG4gIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpO1xuICB9XG5cbiAgLy8gTWFrZSBlcnJvciB3aXRoIG1lc3NhZ2UgZmlyc3Qgc2F5IHRoZSBlcnJvclxuICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmICghYXJyYXkgfHwgdmFsdWUubGVuZ3RoID09IDApKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyBicmFjZXNbMV07XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzIDwgMCkge1xuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuXG4gIHZhciBvdXRwdXQ7XG4gIGlmIChhcnJheSkge1xuICAgIG91dHB1dCA9IGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpO1xuICB9IGVsc2Uge1xuICAgIG91dHB1dCA9IGtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpO1xuICAgIH0pO1xuICB9XG5cbiAgY3R4LnNlZW4ucG9wKCk7XG5cbiAgcmV0dXJuIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgndW5kZWZpbmVkJywgJ3VuZGVmaW5lZCcpO1xuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIHNpbXBsZSA9ICdcXCcnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpLnJlcGxhY2UoL15cInxcIiQvZywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpICsgJ1xcJyc7XG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKHNpbXBsZSwgJ3N0cmluZycpO1xuICB9XG4gIGlmIChpc051bWJlcih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdudW1iZXInKTtcbiAgaWYgKGlzQm9vbGVhbih2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7XG4gIC8vIEZvciBzb21lIHJlYXNvbiB0eXBlb2YgbnVsbCBpcyBcIm9iamVjdFwiLCBzbyBzcGVjaWFsIGNhc2UgaGVyZS5cbiAgaWYgKGlzTnVsbCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCdudWxsJywgJ251bGwnKTtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gJ1snICsgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICsgJ10nO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleXMpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eSh2YWx1ZSwgU3RyaW5nKGkpKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBTdHJpbmcoaSksIHRydWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0LnB1c2goJycpO1xuICAgIH1cbiAgfVxuICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKCFrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIGtleSwgdHJ1ZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSkge1xuICB2YXIgbmFtZSwgc3RyLCBkZXNjO1xuICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KSB8fCB7IHZhbHVlOiB2YWx1ZVtrZXldIH07XG4gIGlmIChkZXNjLmdldCkge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXIvU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChkZXNjLnNldCkge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkge1xuICAgIG5hbWUgPSAnWycgKyBrZXkgKyAnXSc7XG4gIH1cbiAgaWYgKCFzdHIpIHtcbiAgICBpZiAoY3R4LnNlZW4uaW5kZXhPZihkZXNjLnZhbHVlKSA8IDApIHtcbiAgICAgIGlmIChpc051bGwocmVjdXJzZVRpbWVzKSkge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCByZWN1cnNlVGltZXMgLSAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHIuaW5kZXhPZignXFxuJykgPiAtMSkge1xuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBzdHIgPSBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJykuc3Vic3RyKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9ICdcXG4nICsgc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0NpcmN1bGFyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmIChpc1VuZGVmaW5lZChuYW1lKSkge1xuICAgIGlmIChhcnJheSAmJiBrZXkubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpO1xuICAgIGlmIChuYW1lLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDEsIG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ25hbWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJylcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG4gICAgICBuYW1lID0gY3R4LnN0eWxpemUobmFtZSwgJ3N0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuYW1lICsgJzogJyArIHN0cjtcbn1cblxuXG5mdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykge1xuICB2YXIgbnVtTGluZXNFc3QgPSAwO1xuICB2YXIgbGVuZ3RoID0gb3V0cHV0LnJlZHVjZShmdW5jdGlvbihwcmV2LCBjdXIpIHtcbiAgICBudW1MaW5lc0VzdCsrO1xuICAgIGlmIChjdXIuaW5kZXhPZignXFxuJykgPj0gMCkgbnVtTGluZXNFc3QrKztcbiAgICByZXR1cm4gcHJldiArIGN1ci5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZywgJycpLmxlbmd0aCArIDE7XG4gIH0sIDApO1xuXG4gIGlmIChsZW5ndGggPiA2MCkge1xuICAgIHJldHVybiBicmFjZXNbMF0gK1xuICAgICAgICAgICAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXFxuICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgb3V0cHV0LmpvaW4oJyxcXG4gICcpICtcbiAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgYnJhY2VzWzFdO1xuICB9XG5cbiAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyAnICcgKyBvdXRwdXQuam9pbignLCAnKSArICcgJyArIGJyYWNlc1sxXTtcbn1cblxuXG4vLyBOT1RFOiBUaGVzZSB0eXBlIGNoZWNraW5nIGZ1bmN0aW9ucyBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBgaW5zdGFuY2VvZmBcbi8vIGJlY2F1c2UgaXQgaXMgZnJhZ2lsZSBhbmQgY2FuIGJlIGVhc2lseSBmYWtlZCB3aXRoIGBPYmplY3QuY3JlYXRlKClgLlxuZnVuY3Rpb24gaXNBcnJheShhcikge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcik7XG59XG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnYm9vbGVhbic7XG59XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcblxuZnVuY3Rpb24gaXNOdWxsKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbE9yVW5kZWZpbmVkID0gaXNOdWxsT3JVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzU3ltYm9sKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCc7XG59XG5leHBvcnRzLmlzU3ltYm9sID0gaXNTeW1ib2w7XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHJlKSB7XG4gIHJldHVybiBpc09iamVjdChyZSkgJiYgb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIGlzRGF0ZShkKSB7XG4gIHJldHVybiBpc09iamVjdChkKSAmJiBvYmplY3RUb1N0cmluZyhkKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xufVxuZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7XG5cbmZ1bmN0aW9uIGlzRXJyb3IoZSkge1xuICByZXR1cm4gaXNPYmplY3QoZSkgJiZcbiAgICAgIChvYmplY3RUb1N0cmluZyhlKSA9PT0gJ1tvYmplY3QgRXJyb3JdJyB8fCBlIGluc3RhbmNlb2YgRXJyb3IpO1xufVxuZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZShhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbCB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sXG4gICAgICAgICB0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJztcbn1cbmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTtcblxuZXhwb3J0cy5pc0J1ZmZlciA9IHJlcXVpcmUoJy4vc3VwcG9ydC9pc0J1ZmZlcicpO1xuXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyhvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5cblxuZnVuY3Rpb24gcGFkKG4pIHtcbiAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4udG9TdHJpbmcoMTApIDogbi50b1N0cmluZygxMCk7XG59XG5cblxudmFyIG1vbnRocyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLFxuICAgICAgICAgICAgICAnT2N0JywgJ05vdicsICdEZWMnXTtcblxuLy8gMjYgRmViIDE2OjE5OjM0XG5mdW5jdGlvbiB0aW1lc3RhbXAoKSB7XG4gIHZhciBkID0gbmV3IERhdGUoKTtcbiAgdmFyIHRpbWUgPSBbcGFkKGQuZ2V0SG91cnMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldE1pbnV0ZXMoKSksXG4gICAgICAgICAgICAgIHBhZChkLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTtcbiAgcmV0dXJuIFtkLmdldERhdGUoKSwgbW9udGhzW2QuZ2V0TW9udGgoKV0sIHRpbWVdLmpvaW4oJyAnKTtcbn1cblxuXG4vLyBsb2cgaXMganVzdCBhIHRoaW4gd3JhcHBlciB0byBjb25zb2xlLmxvZyB0aGF0IHByZXBlbmRzIGEgdGltZXN0YW1wXG5leHBvcnRzLmxvZyA9IGZ1bmN0aW9uKCkge1xuICBjb25zb2xlLmxvZygnJXMgLSAlcycsIHRpbWVzdGFtcCgpLCBleHBvcnRzLmZvcm1hdC5hcHBseShleHBvcnRzLCBhcmd1bWVudHMpKTtcbn07XG5cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXIuXG4gKlxuICogVGhlIEZ1bmN0aW9uLnByb3RvdHlwZS5pbmhlcml0cyBmcm9tIGxhbmcuanMgcmV3cml0dGVuIGFzIGEgc3RhbmRhbG9uZVxuICogZnVuY3Rpb24gKG5vdCBvbiBGdW5jdGlvbi5wcm90b3R5cGUpLiBOT1RFOiBJZiB0aGlzIGZpbGUgaXMgdG8gYmUgbG9hZGVkXG4gKiBkdXJpbmcgYm9vdHN0cmFwcGluZyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJld3JpdHRlbiB1c2luZyBzb21lIG5hdGl2ZVxuICogZnVuY3Rpb25zIGFzIHByb3RvdHlwZSBzZXR1cCB1c2luZyBub3JtYWwgSmF2YVNjcmlwdCBkb2VzIG5vdCB3b3JrIGFzXG4gKiBleHBlY3RlZCBkdXJpbmcgYm9vdHN0cmFwcGluZyAoc2VlIG1pcnJvci5qcyBpbiByMTE0OTAzKS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHdoaWNoIG5lZWRzIHRvIGluaGVyaXQgdGhlXG4gKiAgICAgcHJvdG90eXBlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDdG9yIENvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGluaGVyaXQgcHJvdG90eXBlIGZyb20uXG4gKi9cbmV4cG9ydHMuaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG5leHBvcnRzLl9leHRlbmQgPSBmdW5jdGlvbihvcmlnaW4sIGFkZCkge1xuICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBhZGQgaXNuJ3QgYW4gb2JqZWN0XG4gIGlmICghYWRkIHx8ICFpc09iamVjdChhZGQpKSByZXR1cm4gb3JpZ2luO1xuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWRkKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIG9yaWdpbltrZXlzW2ldXSA9IGFkZFtrZXlzW2ldXTtcbiAgfVxuICByZXR1cm4gb3JpZ2luO1xufTtcblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cbiIsInZhciB2MSA9IHJlcXVpcmUoJy4vdjEnKTtcbnZhciB2NCA9IHJlcXVpcmUoJy4vdjQnKTtcblxudmFyIHV1aWQgPSB2NDtcbnV1aWQudjEgPSB2MTtcbnV1aWQudjQgPSB2NDtcblxubW9kdWxlLmV4cG9ydHMgPSB1dWlkO1xuIiwiLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbnZhciBieXRlVG9IZXggPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4W2ldID0gKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1V1aWQoYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBvZmZzZXQgfHwgMDtcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcbiAgcmV0dXJuICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICtcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnl0ZXNUb1V1aWQ7XG4iLCIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiAgSW4gdGhlXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXG4vLyBhbmQgaW5jb25zaXN0ZW50IHN1cHBvcnQgZm9yIHRoZSBgY3J5cHRvYCBBUEkuICBXZSBkbyB0aGUgYmVzdCB3ZSBjYW4gdmlhXG4vLyBmZWF0dXJlLWRldGVjdGlvblxudmFyIHJuZztcblxudmFyIGNyeXB0byA9IGdsb2JhbC5jcnlwdG8gfHwgZ2xvYmFsLm1zQ3J5cHRvOyAvLyBmb3IgSUUgMTFcbmlmIChjcnlwdG8gJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAvLyBXSEFUV0cgY3J5cHRvIFJORyAtIGh0dHA6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DcnlwdG9cbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBybmcgPSBmdW5jdGlvbiB3aGF0d2dSTkcoKSB7XG4gICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG4gICAgcmV0dXJuIHJuZHM4O1xuICB9O1xufVxuXG5pZiAoIXJuZykge1xuICAvLyBNYXRoLnJhbmRvbSgpLWJhc2VkIChSTkcpXG4gIC8vXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXG4gIC8vIHF1YWxpdHkuXG4gIHZhciAgcm5kcyA9IG5ldyBBcnJheSgxNik7XG4gIHJuZyA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCByOyBpIDwgMTY7IGkrKykge1xuICAgICAgaWYgKChpICYgMHgwMykgPT09IDApIHIgPSBNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwMDA7XG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xuICAgIH1cblxuICAgIHJldHVybiBybmRzO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJuZztcbiIsIi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBXZSBmZWF0dXJlXG4vLyBkZXRlY3QgdG8gZGV0ZXJtaW5lIHRoZSBiZXN0IFJORyBzb3VyY2UsIG5vcm1hbGl6aW5nIHRvIGEgZnVuY3Rpb24gdGhhdFxuLy8gcmV0dXJucyAxMjgtYml0cyBvZiByYW5kb21uZXNzLCBzaW5jZSB0aGF0J3Mgd2hhdCdzIHVzdWFsbHkgcmVxdWlyZWRcbnZhciBybmcgPSByZXF1aXJlKCcuL2xpYi9ybmcnKTtcbnZhciBieXRlc1RvVXVpZCA9IHJlcXVpcmUoJy4vbGliL2J5dGVzVG9VdWlkJyk7XG5cbi8vICoqYHYxKClgIC0gR2VuZXJhdGUgdGltZS1iYXNlZCBVVUlEKipcbi8vXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vTGlvc0svVVVJRC5qc1xuLy8gYW5kIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91dWlkLmh0bWxcblxuLy8gcmFuZG9tICMncyB3ZSBuZWVkIHRvIGluaXQgbm9kZSBhbmQgY2xvY2tzZXFcbnZhciBfc2VlZEJ5dGVzID0gcm5nKCk7XG5cbi8vIFBlciA0LjUsIGNyZWF0ZSBhbmQgNDgtYml0IG5vZGUgaWQsICg0NyByYW5kb20gYml0cyArIG11bHRpY2FzdCBiaXQgPSAxKVxudmFyIF9ub2RlSWQgPSBbXG4gIF9zZWVkQnl0ZXNbMF0gfCAweDAxLFxuICBfc2VlZEJ5dGVzWzFdLCBfc2VlZEJ5dGVzWzJdLCBfc2VlZEJ5dGVzWzNdLCBfc2VlZEJ5dGVzWzRdLCBfc2VlZEJ5dGVzWzVdXG5dO1xuXG4vLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxudmFyIF9jbG9ja3NlcSA9IChfc2VlZEJ5dGVzWzZdIDw8IDggfCBfc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcblxuLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXG52YXIgX2xhc3RNU2VjcyA9IDAsIF9sYXN0TlNlY3MgPSAwO1xuXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Jyb29mYS9ub2RlLXV1aWQgZm9yIEFQSSBkZXRhaWxzXG5mdW5jdGlvbiB2MShvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcbiAgdmFyIGIgPSBidWYgfHwgW107XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTtcblxuICAvLyBVVUlEIHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cbiAgdmFyIG1zZWNzID0gb3B0aW9ucy5tc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5tc2VjcyA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gIC8vIFBlciA0LjIuMS4yLCB1c2UgY291bnQgb2YgdXVpZCdzIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQgY2xvY2tcbiAgLy8gY3ljbGUgdG8gc2ltdWxhdGUgaGlnaGVyIHJlc29sdXRpb24gY2xvY2tcbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxO1xuXG4gIC8vIFRpbWUgc2luY2UgbGFzdCB1dWlkIGNyZWF0aW9uIChpbiBtc2VjcylcbiAgdmFyIGR0ID0gKG1zZWNzIC0gX2xhc3RNU2VjcykgKyAobnNlY3MgLSBfbGFzdE5TZWNzKS8xMDAwMDtcblxuICAvLyBQZXIgNC4yLjEuMiwgQnVtcCBjbG9ja3NlcSBvbiBjbG9jayByZWdyZXNzaW9uXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2xvY2tzZXEgPSBjbG9ja3NlcSArIDEgJiAweDNmZmY7XG4gIH1cblxuICAvLyBSZXNldCBuc2VjcyBpZiBjbG9jayByZWdyZXNzZXMgKG5ldyBjbG9ja3NlcSkgb3Igd2UndmUgbW92ZWQgb250byBhIG5ld1xuICAvLyB0aW1lIGludGVydmFsXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbnNlY3MgPSAwO1xuICB9XG5cbiAgLy8gUGVyIDQuMi4xLjIgVGhyb3cgZXJyb3IgaWYgdG9vIG1hbnkgdXVpZHMgYXJlIHJlcXVlc3RlZFxuICBpZiAobnNlY3MgPj0gMTAwMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3V1aWQudjEoKTogQ2FuXFwndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWMnKTtcbiAgfVxuXG4gIF9sYXN0TVNlY3MgPSBtc2VjcztcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xuICBfY2xvY2tzZXEgPSBjbG9ja3NlcTtcblxuICAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcbiAgbXNlY3MgKz0gMTIyMTkyOTI4MDAwMDA7XG5cbiAgLy8gYHRpbWVfbG93YFxuICB2YXIgdGwgPSAoKG1zZWNzICYgMHhmZmZmZmZmKSAqIDEwMDAwICsgbnNlY3MpICUgMHgxMDAwMDAwMDA7XG4gIGJbaSsrXSA9IHRsID4+PiAyNCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdGwgJiAweGZmO1xuXG4gIC8vIGB0aW1lX21pZGBcbiAgdmFyIHRtaCA9IChtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDApICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmO1xuXG4gIC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cbiAgYltpKytdID0gdG1oID4+PiAxNiAmIDB4ZmY7XG5cbiAgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG4gIGJbaSsrXSA9IGNsb2Nrc2VxID4+PiA4IHwgMHg4MDtcblxuICAvLyBgY2xvY2tfc2VxX2xvd2BcbiAgYltpKytdID0gY2xvY2tzZXEgJiAweGZmO1xuXG4gIC8vIGBub2RlYFxuICB2YXIgbm9kZSA9IG9wdGlvbnMubm9kZSB8fCBfbm9kZUlkO1xuICBmb3IgKHZhciBuID0gMDsgbiA8IDY7ICsrbikge1xuICAgIGJbaSArIG5dID0gbm9kZVtuXTtcbiAgfVxuXG4gIHJldHVybiBidWYgPyBidWYgOiBieXRlc1RvVXVpZChiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2MTtcbiIsInZhciBybmcgPSByZXF1aXJlKCcuL2xpYi9ybmcnKTtcbnZhciBieXRlc1RvVXVpZCA9IHJlcXVpcmUoJy4vbGliL2J5dGVzVG9VdWlkJyk7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcbiAgICBidWYgPSBvcHRpb25zID09ICdiaW5hcnknID8gbmV3IEFycmF5KDE2KSA6IG51bGw7XG4gICAgb3B0aW9ucyA9IG51bGw7XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgcm5nKSgpO1xuXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcbiAgcm5kc1s2XSA9IChybmRzWzZdICYgMHgwZikgfCAweDQwO1xuICBybmRzWzhdID0gKHJuZHNbOF0gJiAweDNmKSB8IDB4ODA7XG5cbiAgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG4gIGlmIChidWYpIHtcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcbiAgICAgIGJ1ZltpICsgaWldID0gcm5kc1tpaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBieXRlc1RvVXVpZChybmRzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2NDtcbiIsIi8qXG4gKiB2ZXJyb3IuanM6IHJpY2hlciBKYXZhU2NyaXB0IGVycm9yc1xuICovXG5cbnZhciBtb2RfYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG52YXIgbW9kX3V0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbnZhciBtb2RfZXh0c3ByaW50ZiA9IHJlcXVpcmUoJ2V4dHNwcmludGYnKTtcblxuLypcbiAqIFB1YmxpYyBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0cy5WRXJyb3IgPSBWRXJyb3I7XG5leHBvcnRzLldFcnJvciA9IFdFcnJvcjtcbmV4cG9ydHMuTXVsdGlFcnJvciA9IE11bHRpRXJyb3I7XG5cbi8qXG4gKiBMaWtlIEphdmFTY3JpcHQncyBidWlsdC1pbiBFcnJvciBjbGFzcywgYnV0IHN1cHBvcnRzIGEgXCJjYXVzZVwiIGFyZ3VtZW50IGFuZCBhXG4gKiBwcmludGYtc3R5bGUgbWVzc2FnZS4gIFRoZSBjYXVzZSBhcmd1bWVudCBjYW4gYmUgbnVsbC5cbiAqL1xuZnVuY3Rpb24gVkVycm9yKG9wdGlvbnMpXG57XG5cdHZhciBhcmdzLCBjYXVzZWRCeSwgY3RvciwgdGFpbG1zZztcblxuXHRpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiAob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG5cdFx0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cdH0gZWxzZSB7XG5cdFx0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cdFx0b3B0aW9ucyA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdHRhaWxtc2cgPSBhcmdzLmxlbmd0aCA+IDAgP1xuXHQgICAgbW9kX2V4dHNwcmludGYuc3ByaW50Zi5hcHBseShudWxsLCBhcmdzKSA6ICcnO1xuXHR0aGlzLmpzZV9zaG9ydG1zZyA9IHRhaWxtc2c7XG5cdHRoaXMuanNlX3N1bW1hcnkgPSB0YWlsbXNnO1xuXG5cdGlmIChvcHRpb25zKSB7XG5cdFx0Y2F1c2VkQnkgPSBvcHRpb25zLmNhdXNlO1xuXG5cdFx0aWYgKCFjYXVzZWRCeSB8fCAhKG9wdGlvbnMuY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikpXG5cdFx0XHRjYXVzZWRCeSA9IG9wdGlvbnM7XG5cblx0XHRpZiAoY2F1c2VkQnkgJiYgKGNhdXNlZEJ5IGluc3RhbmNlb2YgRXJyb3IpKSB7XG5cdFx0XHR0aGlzLmpzZV9jYXVzZSA9IGNhdXNlZEJ5O1xuXHRcdFx0dGhpcy5qc2Vfc3VtbWFyeSArPSAnOiAnICsgY2F1c2VkQnkubWVzc2FnZTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLm1lc3NhZ2UgPSB0aGlzLmpzZV9zdW1tYXJ5O1xuXHRFcnJvci5jYWxsKHRoaXMsIHRoaXMuanNlX3N1bW1hcnkpO1xuXG5cdGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuXHRcdGN0b3IgPSBvcHRpb25zID8gb3B0aW9ucy5jb25zdHJ1Y3Rvck9wdCA6IHVuZGVmaW5lZDtcblx0XHRjdG9yID0gY3RvciB8fCBhcmd1bWVudHMuY2FsbGVlO1xuXHRcdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIGN0b3IpO1xuXHR9XG59XG5cbm1vZF91dGlsLmluaGVyaXRzKFZFcnJvciwgRXJyb3IpO1xuVkVycm9yLnByb3RvdHlwZS5uYW1lID0gJ1ZFcnJvcic7XG5cblZFcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB2ZV90b1N0cmluZygpXG57XG5cdHZhciBzdHIgPSAodGhpcy5oYXNPd25Qcm9wZXJ0eSgnbmFtZScpICYmIHRoaXMubmFtZSB8fFxuXHRcdHRoaXMuY29uc3RydWN0b3IubmFtZSB8fCB0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5uYW1lKTtcblx0aWYgKHRoaXMubWVzc2FnZSlcblx0XHRzdHIgKz0gJzogJyArIHRoaXMubWVzc2FnZTtcblxuXHRyZXR1cm4gKHN0cik7XG59O1xuXG5WRXJyb3IucHJvdG90eXBlLmNhdXNlID0gZnVuY3Rpb24gdmVfY2F1c2UoKVxue1xuXHRyZXR1cm4gKHRoaXMuanNlX2NhdXNlKTtcbn07XG5cblxuLypcbiAqIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGVycm9ycyBmb3IgdGhlIHB1cnBvc2Ugb2YgY29uc3VtZXJzIHRoYXQgZ2VuZXJhbGx5XG4gKiBvbmx5IGRlYWwgd2l0aCBvbmUgZXJyb3IuICBDYWxsZXJzIGNhbiBleHRyYWN0IHRoZSBpbmRpdmlkdWFsIGVycm9yc1xuICogY29udGFpbmVkIGluIHRoaXMgb2JqZWN0LCBidXQgbWF5IGFsc28ganVzdCB0cmVhdCBpdCBhcyBhIG5vcm1hbCBzaW5nbGVcbiAqIGVycm9yLCBpbiB3aGljaCBjYXNlIGEgc3VtbWFyeSBtZXNzYWdlIHdpbGwgYmUgcHJpbnRlZC5cbiAqL1xuZnVuY3Rpb24gTXVsdGlFcnJvcihlcnJvcnMpXG57XG5cdG1vZF9hc3NlcnQub2soZXJyb3JzLmxlbmd0aCA+IDApO1xuXHR0aGlzLmFzZV9lcnJvcnMgPSBlcnJvcnM7XG5cblx0VkVycm9yLmNhbGwodGhpcywgZXJyb3JzWzBdLCAnZmlyc3Qgb2YgJWQgZXJyb3IlcycsXG5cdCAgICBlcnJvcnMubGVuZ3RoLCBlcnJvcnMubGVuZ3RoID09IDEgPyAnJyA6ICdzJyk7XG59XG5cbm1vZF91dGlsLmluaGVyaXRzKE11bHRpRXJyb3IsIFZFcnJvcik7XG5cblxuXG4vKlxuICogTGlrZSBKYXZhU2NyaXB0J3MgYnVpbHQtaW4gRXJyb3IgY2xhc3MsIGJ1dCBzdXBwb3J0cyBhIFwiY2F1c2VcIiBhcmd1bWVudCB3aGljaFxuICogaXMgd3JhcHBlZCwgbm90IFwiZm9sZGVkIGluXCIgYXMgd2l0aCBWRXJyb3IuXHRBY2NlcHRzIGEgcHJpbnRmLXN0eWxlIG1lc3NhZ2UuXG4gKiBUaGUgY2F1c2UgYXJndW1lbnQgY2FuIGJlIG51bGwuXG4gKi9cbmZ1bmN0aW9uIFdFcnJvcihvcHRpb25zKVxue1xuXHRFcnJvci5jYWxsKHRoaXMpO1xuXG5cdHZhciBhcmdzLCBjYXVzZSwgY3Rvcjtcblx0aWYgKHR5cGVvZiAob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG5cdFx0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cdH0gZWxzZSB7XG5cdFx0YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cdFx0b3B0aW9ucyA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHR0aGlzLm1lc3NhZ2UgPSBtb2RfZXh0c3ByaW50Zi5zcHJpbnRmLmFwcGx5KG51bGwsIGFyZ3MpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMubWVzc2FnZSA9ICcnO1xuXHR9XG5cblx0aWYgKG9wdGlvbnMpIHtcblx0XHRpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRjYXVzZSA9IG9wdGlvbnM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhdXNlID0gb3B0aW9ucy5jYXVzZTtcblx0XHRcdGN0b3IgPSBvcHRpb25zLmNvbnN0cnVjdG9yT3B0O1xuXHRcdH1cblx0fVxuXG5cdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIGN0b3IgfHwgdGhpcy5jb25zdHJ1Y3Rvcik7XG5cdGlmIChjYXVzZSlcblx0XHR0aGlzLmNhdXNlKGNhdXNlKTtcblxufVxuXG5tb2RfdXRpbC5pbmhlcml0cyhXRXJyb3IsIEVycm9yKTtcbldFcnJvci5wcm90b3R5cGUubmFtZSA9ICdXRXJyb3InO1xuXG5cbldFcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB3ZV90b1N0cmluZygpXG57XG5cdHZhciBzdHIgPSAodGhpcy5oYXNPd25Qcm9wZXJ0eSgnbmFtZScpICYmIHRoaXMubmFtZSB8fFxuXHRcdHRoaXMuY29uc3RydWN0b3IubmFtZSB8fCB0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5uYW1lKTtcblx0aWYgKHRoaXMubWVzc2FnZSlcblx0XHRzdHIgKz0gJzogJyArIHRoaXMubWVzc2FnZTtcblx0aWYgKHRoaXMud2VfY2F1c2UgJiYgdGhpcy53ZV9jYXVzZS5tZXNzYWdlKVxuXHRcdHN0ciArPSAnOyBjYXVzZWQgYnkgJyArIHRoaXMud2VfY2F1c2UudG9TdHJpbmcoKTtcblxuXHRyZXR1cm4gKHN0cik7XG59O1xuXG5XRXJyb3IucHJvdG90eXBlLmNhdXNlID0gZnVuY3Rpb24gd2VfY2F1c2UoYylcbntcblx0aWYgKGMgaW5zdGFuY2VvZiBFcnJvcilcblx0XHR0aGlzLndlX2NhdXNlID0gYztcblxuXHRyZXR1cm4gKHRoaXMud2VfY2F1c2UpO1xufTtcbiIsInZhciBpbmRleE9mID0gcmVxdWlyZSgnaW5kZXhvZicpO1xuXG52YXIgT2JqZWN0X2tleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKSByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHJlcy5wdXNoKGtleSlcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59O1xuXG52YXIgZm9yRWFjaCA9IGZ1bmN0aW9uICh4cywgZm4pIHtcbiAgICBpZiAoeHMuZm9yRWFjaCkgcmV0dXJuIHhzLmZvckVhY2goZm4pXG4gICAgZWxzZSBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZuKHhzW2ldLCBpLCB4cyk7XG4gICAgfVxufTtcblxudmFyIGRlZmluZVByb3AgPSAoZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnXycsIHt9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG5hbWUsIHtcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgb2JqW25hbWVdID0gdmFsdWU7XG4gICAgICAgIH07XG4gICAgfVxufSgpKTtcblxudmFyIGdsb2JhbHMgPSBbJ0FycmF5JywgJ0Jvb2xlYW4nLCAnRGF0ZScsICdFcnJvcicsICdFdmFsRXJyb3InLCAnRnVuY3Rpb24nLFxuJ0luZmluaXR5JywgJ0pTT04nLCAnTWF0aCcsICdOYU4nLCAnTnVtYmVyJywgJ09iamVjdCcsICdSYW5nZUVycm9yJyxcbidSZWZlcmVuY2VFcnJvcicsICdSZWdFeHAnLCAnU3RyaW5nJywgJ1N5bnRheEVycm9yJywgJ1R5cGVFcnJvcicsICdVUklFcnJvcicsXG4nZGVjb2RlVVJJJywgJ2RlY29kZVVSSUNvbXBvbmVudCcsICdlbmNvZGVVUkknLCAnZW5jb2RlVVJJQ29tcG9uZW50JywgJ2VzY2FwZScsXG4nZXZhbCcsICdpc0Zpbml0ZScsICdpc05hTicsICdwYXJzZUZsb2F0JywgJ3BhcnNlSW50JywgJ3VuZGVmaW5lZCcsICd1bmVzY2FwZSddO1xuXG5mdW5jdGlvbiBDb250ZXh0KCkge31cbkNvbnRleHQucHJvdG90eXBlID0ge307XG5cbnZhciBTY3JpcHQgPSBleHBvcnRzLlNjcmlwdCA9IGZ1bmN0aW9uIE5vZGVTY3JpcHQgKGNvZGUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU2NyaXB0KSkgcmV0dXJuIG5ldyBTY3JpcHQoY29kZSk7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbn07XG5cblNjcmlwdC5wcm90b3R5cGUucnVuSW5Db250ZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBpZiAoIShjb250ZXh0IGluc3RhbmNlb2YgQ29udGV4dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LlwiKTtcbiAgICB9XG4gICAgXG4gICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIGlmICghaWZyYW1lLnN0eWxlKSBpZnJhbWUuc3R5bGUgPSB7fTtcbiAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gICAgXG4gICAgdmFyIHdpbiA9IGlmcmFtZS5jb250ZW50V2luZG93O1xuICAgIHZhciB3RXZhbCA9IHdpbi5ldmFsLCB3RXhlY1NjcmlwdCA9IHdpbi5leGVjU2NyaXB0O1xuXG4gICAgaWYgKCF3RXZhbCAmJiB3RXhlY1NjcmlwdCkge1xuICAgICAgICAvLyB3aW4uZXZhbCgpIG1hZ2ljYWxseSBhcHBlYXJzIHdoZW4gdGhpcyBpcyBjYWxsZWQgaW4gSUU6XG4gICAgICAgIHdFeGVjU2NyaXB0LmNhbGwod2luLCAnbnVsbCcpO1xuICAgICAgICB3RXZhbCA9IHdpbi5ldmFsO1xuICAgIH1cbiAgICBcbiAgICBmb3JFYWNoKE9iamVjdF9rZXlzKGNvbnRleHQpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHdpbltrZXldID0gY29udGV4dFtrZXldO1xuICAgIH0pO1xuICAgIGZvckVhY2goZ2xvYmFscywgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoY29udGV4dFtrZXldKSB7XG4gICAgICAgICAgICB3aW5ba2V5XSA9IGNvbnRleHRba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHZhciB3aW5LZXlzID0gT2JqZWN0X2tleXMod2luKTtcblxuICAgIHZhciByZXMgPSB3RXZhbC5jYWxsKHdpbiwgdGhpcy5jb2RlKTtcbiAgICBcbiAgICBmb3JFYWNoKE9iamVjdF9rZXlzKHdpbiksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgLy8gQXZvaWQgY29weWluZyBjaXJjdWxhciBvYmplY3RzIGxpa2UgYHRvcGAgYW5kIGB3aW5kb3dgIGJ5IG9ubHlcbiAgICAgICAgLy8gdXBkYXRpbmcgZXhpc3RpbmcgY29udGV4dCBwcm9wZXJ0aWVzIG9yIG5ldyBwcm9wZXJ0aWVzIGluIHRoZSBgd2luYFxuICAgICAgICAvLyB0aGF0IHdhcyBvbmx5IGludHJvZHVjZWQgYWZ0ZXIgdGhlIGV2YWwuXG4gICAgICAgIGlmIChrZXkgaW4gY29udGV4dCB8fCBpbmRleE9mKHdpbktleXMsIGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICBjb250ZXh0W2tleV0gPSB3aW5ba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yRWFjaChnbG9iYWxzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBjb250ZXh0KSkge1xuICAgICAgICAgICAgZGVmaW5lUHJvcChjb250ZXh0LCBrZXksIHdpbltrZXldKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgICBcbiAgICByZXR1cm4gcmVzO1xufTtcblxuU2NyaXB0LnByb3RvdHlwZS5ydW5JblRoaXNDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBldmFsKHRoaXMuY29kZSk7IC8vIG1heWJlLi4uXG59O1xuXG5TY3JpcHQucHJvdG90eXBlLnJ1bkluTmV3Q29udGV4dCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdmFyIGN0eCA9IFNjcmlwdC5jcmVhdGVDb250ZXh0KGNvbnRleHQpO1xuICAgIHZhciByZXMgPSB0aGlzLnJ1bkluQ29udGV4dChjdHgpO1xuXG4gICAgZm9yRWFjaChPYmplY3Rfa2V5cyhjdHgpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGNvbnRleHRba2V5XSA9IGN0eFtrZXldO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlcztcbn07XG5cbmZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgZXhwb3J0c1tuYW1lXSA9IFNjcmlwdFtuYW1lXSA9IGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgIHZhciBzID0gU2NyaXB0KGNvZGUpO1xuICAgICAgICByZXR1cm4gc1tuYW1lXS5hcHBseShzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgIH07XG59KTtcblxuZXhwb3J0cy5jcmVhdGVTY3JpcHQgPSBmdW5jdGlvbiAoY29kZSkge1xuICAgIHJldHVybiBleHBvcnRzLlNjcmlwdChjb2RlKTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IFNjcmlwdC5jcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICB2YXIgY29weSA9IG5ldyBDb250ZXh0KCk7XG4gICAgaWYodHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvckVhY2goT2JqZWN0X2tleXMoY29udGV4dCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGNvcHlba2V5XSA9IGNvbnRleHRba2V5XTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb3B5O1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfKG1lc3NhZ2UsIG9wdHMpIHtcbiAgICByZXR1cm4gYCR7b3B0cyAmJiBvcHRzLmNvbnRleHQgPyBvcHRzLmNvbnRleHQgOiBcIlZhbHVlXCJ9ICR7bWVzc2FnZX0uYDtcbn1cblxuZnVuY3Rpb24gdHlwZShWKSB7XG4gICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiTnVsbFwiO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGVvZiBWKSB7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIlVuZGVmaW5lZFwiO1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiQm9vbGVhblwiO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XG4gICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIHJldHVybiBcIlN5bWJvbFwiO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAvLyBGYWxscyB0aHJvdWdoXG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgLy8gRmFsbHMgdGhyb3VnaFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gUGVyIEVTIHNwZWMsIHR5cGVvZiByZXR1cm5zIGFuIGltcGxlbWVudGlvbi1kZWZpbmVkIHZhbHVlIHRoYXQgaXMgbm90IGFueSBvZiB0aGUgZXhpc3Rpbmcgb25lcyBmb3JcbiAgICAgICAgICAgIC8vIHVuY2FsbGFibGUgbm9uLXN0YW5kYXJkIGV4b3RpYyBvYmplY3RzLiBZZXQgVHlwZSgpIHdoaWNoIHRoZSBXZWIgSURMIHNwZWMgZGVwZW5kcyBvbiByZXR1cm5zIE9iamVjdCBmb3JcbiAgICAgICAgICAgIC8vIHN1Y2ggY2FzZXMuIFNvIHRyZWF0IHRoZSBkZWZhdWx0IGNhc2UgYXMgYW4gb2JqZWN0LlxuICAgICAgICAgICAgcmV0dXJuIFwiT2JqZWN0XCI7XG4gICAgfVxufVxuXG4vLyBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZSBldmVuIGludGVnZXIgaWYgaXQgbGllcyBoYWxmd2F5IGJldHdlZW4gdHdvLlxuZnVuY3Rpb24gZXZlblJvdW5kKHgpIHtcbiAgICAvLyBUaGVyZSBhcmUgZm91ciBjYXNlcyBmb3IgbnVtYmVycyB3aXRoIGZyYWN0aW9uYWwgcGFydCBiZWluZyAuNTpcbiAgICAvL1xuICAgIC8vIGNhc2UgfCAgICAgeCAgICAgfCBmbG9vcih4KSB8IHJvdW5kKHgpIHwgZXhwZWN0ZWQgfCB4IDw+IDAgfCB4ICUgMSB8IHggJiAxIHwgICBleGFtcGxlXG4gICAgLy8gICAxICB8ICAybiArIDAuNSB8ICAybiAgICAgIHwgIDJuICsgMSAgfCAgMm4gICAgICB8ICAgPiAgICB8ICAwLjUgIHwgICAwICAgfCAgMC41IC0+ICAwXG4gICAgLy8gICAyICB8ICAybiArIDEuNSB8ICAybiArIDEgIHwgIDJuICsgMiAgfCAgMm4gKyAyICB8ICAgPiAgICB8ICAwLjUgIHwgICAxICAgfCAgMS41IC0+ICAyXG4gICAgLy8gICAzICB8IC0ybiAtIDAuNSB8IC0ybiAtIDEgIHwgLTJuICAgICAgfCAtMm4gICAgICB8ICAgPCAgICB8IC0wLjUgIHwgICAwICAgfCAtMC41IC0+ICAwXG4gICAgLy8gICA0ICB8IC0ybiAtIDEuNSB8IC0ybiAtIDIgIHwgLTJuIC0gMSAgfCAtMm4gLSAyICB8ICAgPCAgICB8IC0wLjUgIHwgICAxICAgfCAtMS41IC0+IC0yXG4gICAgLy8gKHdoZXJlIG4gaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlcilcbiAgICAvL1xuICAgIC8vIEJyYW5jaCBoZXJlIGZvciBjYXNlcyAxIGFuZCA0XG4gICAgaWYgKCh4ID4gMCAmJiAoeCAlIDEpID09PSArMC41ICYmICh4ICYgMSkgPT09IDApIHx8XG4gICAgICAgICh4IDwgMCAmJiAoeCAlIDEpID09PSAtMC41ICYmICh4ICYgMSkgPT09IDEpKSB7XG4gICAgICAgIHJldHVybiBjZW5zb3JOZWdhdGl2ZVplcm8oTWF0aC5mbG9vcih4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbnNvck5lZ2F0aXZlWmVybyhNYXRoLnJvdW5kKHgpKTtcbn1cblxuZnVuY3Rpb24gaW50ZWdlclBhcnQobikge1xuICAgIHJldHVybiBjZW5zb3JOZWdhdGl2ZVplcm8oTWF0aC50cnVuYyhuKSk7XG59XG5cbmZ1bmN0aW9uIHNpZ24oeCkge1xuICAgIHJldHVybiB4IDwgMCA/IC0xIDogMTtcbn1cblxuZnVuY3Rpb24gbW9kdWxvKHgsIHkpIHtcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI2Vxbi1tb2R1bG9cbiAgICAvLyBOb3RlIHRoYXQgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDQ2NzU1OS8zMTkxIGRvZXMgTk9UIHdvcmsgZm9yIGxhcmdlIG1vZHVsb3NcbiAgICBjb25zdCBzaWduTWlnaHROb3RNYXRjaCA9IHggJSB5O1xuICAgIGlmIChzaWduKHkpICE9PSBzaWduKHNpZ25NaWdodE5vdE1hdGNoKSkge1xuICAgICAgICByZXR1cm4gc2lnbk1pZ2h0Tm90TWF0Y2ggKyB5O1xuICAgIH1cbiAgICByZXR1cm4gc2lnbk1pZ2h0Tm90TWF0Y2g7XG59XG5cbmZ1bmN0aW9uIGNlbnNvck5lZ2F0aXZlWmVybyh4KSB7XG4gICAgcmV0dXJuIHggPT09IDAgPyAwIDogeDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW50ZWdlckNvbnZlcnNpb24oYml0TGVuZ3RoLCB0eXBlT3B0cykge1xuICAgIGNvbnN0IGlzU2lnbmVkID0gIXR5cGVPcHRzLnVuc2lnbmVkO1xuXG4gICAgbGV0IGxvd2VyQm91bmQ7XG4gICAgbGV0IHVwcGVyQm91bmQ7XG4gICAgaWYgKGJpdExlbmd0aCA9PT0gNjQpIHtcbiAgICAgICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG4gICAgICAgIGxvd2VyQm91bmQgPSAhaXNTaWduZWQgPyAwIDogLU1hdGgucG93KDIsIDUzKSArIDE7XG4gICAgfSBlbHNlIGlmICghaXNTaWduZWQpIHtcbiAgICAgICAgbG93ZXJCb3VuZCA9IDA7XG4gICAgICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb3dlckJvdW5kID0gLU1hdGgucG93KDIsIGJpdExlbmd0aCAtIDEpO1xuICAgICAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSkgLSAxO1xuICAgIH1cblxuICAgIGNvbnN0IHR3b1RvVGhlQml0TGVuZ3RoID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKTtcbiAgICBjb25zdCB0d29Ub09uZUxlc3NUaGFuVGhlQml0TGVuZ3RoID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSk7XG5cbiAgICByZXR1cm4gKFYsIG9wdHMpID0+IHtcbiAgICAgICAgaWYgKG9wdHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3B0cyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHggPSArVjtcbiAgICAgICAgeCA9IGNlbnNvck5lZ2F0aXZlWmVybyh4KTsgLy8gU3BlYyBkaXNjdXNzaW9uIG9uZ29pbmc6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZXljYW0vd2ViaWRsL2lzc3Vlcy8zMDZcblxuICAgICAgICBpZiAob3B0cy5lbmZvcmNlUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfKFwiaXMgbm90IGEgZmluaXRlIG51bWJlclwiLCBvcHRzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHggPSBpbnRlZ2VyUGFydCh4KTtcblxuICAgICAgICAgICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfKFxuICAgICAgICAgICAgICAgICAgICBgaXMgb3V0c2lkZSB0aGUgYWNjZXB0ZWQgcmFuZ2Ugb2YgJHtsb3dlckJvdW5kfSB0byAke3VwcGVyQm91bmR9LCBpbmNsdXNpdmVgLCBvcHRzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oeCkgJiYgb3B0cy5jbGFtcCkge1xuICAgICAgICAgICAgeCA9IE1hdGgubWluKE1hdGgubWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKTtcbiAgICAgICAgICAgIHggPSBldmVuUm91bmQoeCk7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpIHx8IHggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHggPSBpbnRlZ2VyUGFydCh4KTtcblxuICAgICAgICAvLyBNYXRoLnBvdygyLCA2NCkgaXMgbm90IGFjY3VyYXRlbHkgcmVwcmVzZW50YWJsZSBpbiBKYXZhU2NyaXB0LCBzbyB0cnkgdG8gYXZvaWQgdGhlc2UgcGVyLXNwZWMgb3BlcmF0aW9ucyBpZlxuICAgICAgICAvLyBwb3NzaWJsZS4gSG9wZWZ1bGx5IGl0J3MgYW4gb3B0aW1pemF0aW9uIGZvciB0aGUgbm9uLTY0LWJpdExlbmd0aCBjYXNlcyB0b28uXG4gICAgICAgIGlmICh4ID49IGxvd2VyQm91bmQgJiYgeCA8PSB1cHBlckJvdW5kKSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXNlIHdpbGwgbm90IHdvcmsgZ3JlYXQgZm9yIGJpdExlbmd0aCBvZiA2NCwgYnV0IG9oIHdlbGwuIFNlZSB0aGUgUkVBRE1FIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgIHggPSBtb2R1bG8oeCwgdHdvVG9UaGVCaXRMZW5ndGgpO1xuICAgICAgICBpZiAoaXNTaWduZWQgJiYgeCA+PSB0d29Ub09uZUxlc3NUaGFuVGhlQml0TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4geCAtIHR3b1RvVGhlQml0TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgIH07XG59XG5cbmV4cG9ydHMuYW55ID0gViA9PiB7XG4gICAgcmV0dXJuIFY7XG59O1xuXG5leHBvcnRzLnZvaWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydHMuYm9vbGVhbiA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gISF2YWw7XG59O1xuXG5leHBvcnRzLmJ5dGUgPSBjcmVhdGVJbnRlZ2VyQ29udmVyc2lvbig4LCB7IHVuc2lnbmVkOiBmYWxzZSB9KTtcbmV4cG9ydHMub2N0ZXQgPSBjcmVhdGVJbnRlZ2VyQ29udmVyc2lvbig4LCB7IHVuc2lnbmVkOiB0cnVlIH0pO1xuXG5leHBvcnRzLnNob3J0ID0gY3JlYXRlSW50ZWdlckNvbnZlcnNpb24oMTYsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuZXhwb3J0c1tcInVuc2lnbmVkIHNob3J0XCJdID0gY3JlYXRlSW50ZWdlckNvbnZlcnNpb24oMTYsIHsgdW5zaWduZWQ6IHRydWUgfSk7XG5cbmV4cG9ydHMubG9uZyA9IGNyZWF0ZUludGVnZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiBmYWxzZSB9KTtcbmV4cG9ydHNbXCJ1bnNpZ25lZCBsb25nXCJdID0gY3JlYXRlSW50ZWdlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IHRydWUgfSk7XG5cbmV4cG9ydHNbXCJsb25nIGxvbmdcIl0gPSBjcmVhdGVJbnRlZ2VyQ29udmVyc2lvbig2NCwgeyB1bnNpZ25lZDogZmFsc2UgfSk7XG5leHBvcnRzW1widW5zaWduZWQgbG9uZyBsb25nXCJdID0gY3JlYXRlSW50ZWdlckNvbnZlcnNpb24oNjQsIHsgdW5zaWduZWQ6IHRydWUgfSk7XG5cbmV4cG9ydHMuZG91YmxlID0gKFYsIG9wdHMpID0+IHtcbiAgICBjb25zdCB4ID0gK1Y7XG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF8oXCJpcyBub3QgYSBmaW5pdGUgZmxvYXRpbmctcG9pbnQgdmFsdWVcIiwgb3B0cykpO1xuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuZXhwb3J0c1tcInVucmVzdHJpY3RlZCBkb3VibGVcIl0gPSBWID0+IHtcbiAgICBjb25zdCB4ID0gK1Y7XG5cbiAgICByZXR1cm4geDtcbn07XG5cbmV4cG9ydHMuZmxvYXQgPSAoViwgb3B0cykgPT4ge1xuICAgIGNvbnN0IHggPSArVjtcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXyhcImlzIG5vdCBhIGZpbml0ZSBmbG9hdGluZy1wb2ludCB2YWx1ZVwiLCBvcHRzKSk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5pcyh4LCAtMCkpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgY29uc3QgYXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuICAgIGFycmF5WzBdID0geDtcbiAgICBjb25zdCB5ID0gYXJyYXlbMF07XG5cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF8oXCJpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBhIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWVcIiwgb3B0cykpO1xuICAgIH1cblxuICAgIHJldHVybiB5O1xufTtcblxuZXhwb3J0c1tcInVucmVzdHJpY3RlZCBmbG9hdFwiXSA9IFYgPT4ge1xuICAgIGNvbnN0IHggPSArVjtcblxuICAgIGlmIChpc05hTih4KSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmlzKHgsIC0wKSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG5cbiAgICBjb25zdCBhcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gICAgYXJyYXlbMF0gPSB4O1xuICAgIHJldHVybiBhcnJheVswXTtcbn07XG5cbmV4cG9ydHMuRE9NU3RyaW5nID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBpZiAob3B0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy50cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIFYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBWID09PSBcInN5bWJvbFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXyhcImlzIGEgc3ltYm9sLCB3aGljaCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nXCIsIG9wdHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKFYpO1xufTtcblxuZXhwb3J0cy5CeXRlU3RyaW5nID0gKFYsIG9wdHMpID0+IHtcbiAgICBjb25zdCB4ID0gZXhwb3J0cy5ET01TdHJpbmcoViwgb3B0cyk7XG4gICAgbGV0IGM7XG4gICAgZm9yIChsZXQgaSA9IDA7IChjID0geC5jb2RlUG9pbnRBdChpKSkgIT09IHVuZGVmaW5lZDsgKytpKSB7XG4gICAgICAgIGlmIChjID4gMjU1KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF8oXCJpcyBub3QgYSB2YWxpZCBCeXRlU3RyaW5nXCIsIG9wdHMpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuZXhwb3J0cy5VU1ZTdHJpbmcgPSAoViwgb3B0cykgPT4ge1xuICAgIGNvbnN0IFMgPSBleHBvcnRzLkRPTVN0cmluZyhWLCBvcHRzKTtcbiAgICBjb25zdCBuID0gUy5sZW5ndGg7XG4gICAgY29uc3QgVSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGNvbnN0IGMgPSBTLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMHhEODAwIHx8IGMgPiAweERGRkYpIHtcbiAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoMHhEQzAwIDw9IGMgJiYgYyA8PSAweERGRkYpIHtcbiAgICAgICAgICAgIFUucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludCgweEZGRkQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBuIC0gMSkge1xuICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KDB4RkZGRCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZCA9IFMuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICAgICAgICBpZiAoMHhEQzAwIDw9IGQgJiYgZCA8PSAweERGRkYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhID0gYyAmIDB4M0ZGO1xuICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBkICYgMHgzRkY7XG4gICAgICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KCgyIDw8IDE1KSArICgoMiA8PCA5KSAqIGEpICsgYikpO1xuICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KDB4RkZGRCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFUuam9pbihcIlwiKTtcbn07XG5cbmV4cG9ydHMub2JqZWN0ID0gKFYsIG9wdHMpID0+IHtcbiAgICBpZiAodHlwZShWKSAhPT0gXCJPYmplY3RcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF8oXCJpcyBub3QgYW4gb2JqZWN0XCIsIG9wdHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVjtcbn07XG5cbi8vIE5vdCBleHBvcnRlZCwgYnV0IHVzZWQgaW4gRnVuY3Rpb24gYW5kIFZvaWRGdW5jdGlvbi5cblxuLy8gTmVpdGhlciBGdW5jdGlvbiBub3IgVm9pZEZ1bmN0aW9uIGlzIGRlZmluZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCBzb1xuLy8gaGFuZGxpbmcgZm9yIHRoYXQgaXMgb21pdHRlZC5cbmZ1bmN0aW9uIGNvbnZlcnRDYWxsYmFja0Z1bmN0aW9uKFYsIG9wdHMpIHtcbiAgICBpZiAodHlwZW9mIFYgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF8oXCJpcyBub3QgYSBmdW5jdGlvblwiLCBvcHRzKSk7XG4gICAgfVxuICAgIHJldHVybiBWO1xufVxuXG5bXG4gICAgRXJyb3IsXG4gICAgQXJyYXlCdWZmZXIsIC8vIFRoZSBJc0RldGFjaGVkQnVmZmVyIGFic3RyYWN0IG9wZXJhdGlvbiBpcyBub3QgZXhwb3NlZCBpbiBKU1xuICAgIERhdGFWaWV3LCBJbnQ4QXJyYXksIEludDE2QXJyYXksIEludDMyQXJyYXksIFVpbnQ4QXJyYXksXG4gICAgVWludDE2QXJyYXksIFVpbnQzMkFycmF5LCBVaW50OENsYW1wZWRBcnJheSwgRmxvYXQzMkFycmF5LCBGbG9hdDY0QXJyYXlcbl0uZm9yRWFjaChmdW5jID0+IHtcbiAgICBjb25zdCBuYW1lID0gZnVuYy5uYW1lO1xuICAgIGNvbnN0IGFydGljbGUgPSAvXltBRUlPVV0vLnRlc3QobmFtZSkgPyBcImFuXCIgOiBcImFcIjtcbiAgICBleHBvcnRzW25hbWVdID0gKFYsIG9wdHMpID0+IHtcbiAgICAgICAgaWYgKCEoViBpbnN0YW5jZW9mIGZ1bmMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF8oYGlzIG5vdCAke2FydGljbGV9ICR7bmFtZX0gb2JqZWN0YCwgb3B0cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFY7XG4gICAgfTtcbn0pO1xuXG4vLyBDb21tb24gZGVmaW5pdGlvbnNcblxuZXhwb3J0cy5BcnJheUJ1ZmZlclZpZXcgPSAoViwgb3B0cykgPT4ge1xuICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KFYpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXyhcImlzIG5vdCBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIgb2JqZWN0XCIsIG9wdHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVjtcbn07XG5cbmV4cG9ydHMuQnVmZmVyU291cmNlID0gKFYsIG9wdHMpID0+IHtcbiAgICBpZiAoIShBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgViBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF8oXCJpcyBub3QgYW4gQXJyYXlCdWZmZXIgb2JqZWN0IG9yIGEgdmlldyBvbiBvbmVcIiwgb3B0cykpO1xuICAgIH1cblxuICAgIHJldHVybiBWO1xufTtcblxuZXhwb3J0cy5ET01UaW1lU3RhbXAgPSBleHBvcnRzW1widW5zaWduZWQgbG9uZyBsb25nXCJdO1xuXG5leHBvcnRzLkZ1bmN0aW9uID0gY29udmVydENhbGxiYWNrRnVuY3Rpb247XG5cbmV4cG9ydHMuVm9pZEZ1bmN0aW9uID0gY29udmVydENhbGxiYWNrRnVuY3Rpb247XG4iLCJ2YXIgYnVuZGxlRm4gPSBhcmd1bWVudHNbM107XG52YXIgc291cmNlcyA9IGFyZ3VtZW50c1s0XTtcbnZhciBjYWNoZSA9IGFyZ3VtZW50c1s1XTtcblxudmFyIHN0cmluZ2lmeSA9IEpTT04uc3RyaW5naWZ5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgb3B0aW9ucykge1xuICAgIHZhciB3a2V5O1xuICAgIHZhciBjYWNoZUtleXMgPSBPYmplY3Qua2V5cyhjYWNoZSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNhY2hlS2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGNhY2hlS2V5c1tpXTtcbiAgICAgICAgdmFyIGV4cCA9IGNhY2hlW2tleV0uZXhwb3J0cztcbiAgICAgICAgLy8gVXNpbmcgYmFiZWwgYXMgYSB0cmFuc3BpbGVyIHRvIHVzZSBlc21vZHVsZSwgdGhlIGV4cG9ydCB3aWxsIGFsd2F5c1xuICAgICAgICAvLyBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCBleHBvcnQgYXMgYSBwcm9wZXJ0eSBvZiBpdC4gVG8gZW5zdXJlXG4gICAgICAgIC8vIHRoZSBleGlzdGluZyBhcGkgYW5kIGJhYmVsIGVzbW9kdWxlIGV4cG9ydHMgYXJlIGJvdGggc3VwcG9ydGVkIHdlXG4gICAgICAgIC8vIGNoZWNrIGZvciBib3RoXG4gICAgICAgIGlmIChleHAgPT09IGZuIHx8IGV4cCAmJiBleHAuZGVmYXVsdCA9PT0gZm4pIHtcbiAgICAgICAgICAgIHdrZXkgPSBrZXk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghd2tleSkge1xuICAgICAgICB3a2V5ID0gTWF0aC5mbG9vcihNYXRoLnBvdygxNiwgOCkgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygxNik7XG4gICAgICAgIHZhciB3Y2FjaGUgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYWNoZUtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gY2FjaGVLZXlzW2ldO1xuICAgICAgICAgICAgd2NhY2hlW2tleV0gPSBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlc1t3a2V5XSA9IFtcbiAgICAgICAgICAgIEZ1bmN0aW9uKFsncmVxdWlyZScsJ21vZHVsZScsJ2V4cG9ydHMnXSwgJygnICsgZm4gKyAnKShzZWxmKScpLFxuICAgICAgICAgICAgd2NhY2hlXG4gICAgICAgIF07XG4gICAgfVxuICAgIHZhciBza2V5ID0gTWF0aC5mbG9vcihNYXRoLnBvdygxNiwgOCkgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygxNik7XG5cbiAgICB2YXIgc2NhY2hlID0ge307IHNjYWNoZVt3a2V5XSA9IHdrZXk7XG4gICAgc291cmNlc1tza2V5XSA9IFtcbiAgICAgICAgRnVuY3Rpb24oWydyZXF1aXJlJ10sIChcbiAgICAgICAgICAgIC8vIHRyeSB0byBjYWxsIGRlZmF1bHQgaWYgZGVmaW5lZCB0byBhbHNvIHN1cHBvcnQgYmFiZWwgZXNtb2R1bGVcbiAgICAgICAgICAgIC8vIGV4cG9ydHNcbiAgICAgICAgICAgICd2YXIgZiA9IHJlcXVpcmUoJyArIHN0cmluZ2lmeSh3a2V5KSArICcpOycgK1xuICAgICAgICAgICAgJyhmLmRlZmF1bHQgPyBmLmRlZmF1bHQgOiBmKShzZWxmKTsnXG4gICAgICAgICkpLFxuICAgICAgICBzY2FjaGVcbiAgICBdO1xuXG4gICAgdmFyIHdvcmtlclNvdXJjZXMgPSB7fTtcbiAgICByZXNvbHZlU291cmNlcyhza2V5KTtcblxuICAgIGZ1bmN0aW9uIHJlc29sdmVTb3VyY2VzKGtleSkge1xuICAgICAgICB3b3JrZXJTb3VyY2VzW2tleV0gPSB0cnVlO1xuXG4gICAgICAgIGZvciAodmFyIGRlcFBhdGggaW4gc291cmNlc1trZXldWzFdKSB7XG4gICAgICAgICAgICB2YXIgZGVwS2V5ID0gc291cmNlc1trZXldWzFdW2RlcFBhdGhdO1xuICAgICAgICAgICAgaWYgKCF3b3JrZXJTb3VyY2VzW2RlcEtleV0pIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlU291cmNlcyhkZXBLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNyYyA9ICcoJyArIGJ1bmRsZUZuICsgJykoeydcbiAgICAgICAgKyBPYmplY3Qua2V5cyh3b3JrZXJTb3VyY2VzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ2lmeShrZXkpICsgJzpbJ1xuICAgICAgICAgICAgICAgICsgc291cmNlc1trZXldWzBdXG4gICAgICAgICAgICAgICAgKyAnLCcgKyBzdHJpbmdpZnkoc291cmNlc1trZXldWzFdKSArICddJ1xuICAgICAgICAgICAgO1xuICAgICAgICB9KS5qb2luKCcsJylcbiAgICAgICAgKyAnfSx7fSxbJyArIHN0cmluZ2lmeShza2V5KSArICddKSdcbiAgICA7XG5cbiAgICB2YXIgVVJMID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMIHx8IHdpbmRvdy5tb3pVUkwgfHwgd2luZG93Lm1zVVJMO1xuXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbc3JjXSwgeyB0eXBlOiAndGV4dC9qYXZhc2NyaXB0JyB9KTtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmJhcmUpIHsgcmV0dXJuIGJsb2I7IH1cbiAgICB2YXIgd29ya2VyVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVcmwpO1xuICAgIHdvcmtlci5vYmplY3RVUkwgPSB3b3JrZXJVcmw7XG4gICAgcmV0dXJuIHdvcmtlcjtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwiODY2XCI6IFwiSUJNODY2XCIsXG4gIFwidW5pY29kZS0xLTEtdXRmLThcIjogXCJVVEYtOFwiLFxuICBcInV0Zi04XCI6IFwiVVRGLThcIixcbiAgXCJ1dGY4XCI6IFwiVVRGLThcIixcbiAgXCJjcDg2NlwiOiBcIklCTTg2NlwiLFxuICBcImNzaWJtODY2XCI6IFwiSUJNODY2XCIsXG4gIFwiaWJtODY2XCI6IFwiSUJNODY2XCIsXG4gIFwiY3Npc29sYXRpbjJcIjogXCJJU08tODg1OS0yXCIsXG4gIFwiaXNvLTg4NTktMlwiOiBcIklTTy04ODU5LTJcIixcbiAgXCJpc28taXItMTAxXCI6IFwiSVNPLTg4NTktMlwiLFxuICBcImlzbzg4NTktMlwiOiBcIklTTy04ODU5LTJcIixcbiAgXCJpc284ODU5MlwiOiBcIklTTy04ODU5LTJcIixcbiAgXCJpc29fODg1OS0yXCI6IFwiSVNPLTg4NTktMlwiLFxuICBcImlzb184ODU5LTI6MTk4N1wiOiBcIklTTy04ODU5LTJcIixcbiAgXCJsMlwiOiBcIklTTy04ODU5LTJcIixcbiAgXCJsYXRpbjJcIjogXCJJU08tODg1OS0yXCIsXG4gIFwiY3Npc29sYXRpbjNcIjogXCJJU08tODg1OS0zXCIsXG4gIFwiaXNvLTg4NTktM1wiOiBcIklTTy04ODU5LTNcIixcbiAgXCJpc28taXItMTA5XCI6IFwiSVNPLTg4NTktM1wiLFxuICBcImlzbzg4NTktM1wiOiBcIklTTy04ODU5LTNcIixcbiAgXCJpc284ODU5M1wiOiBcIklTTy04ODU5LTNcIixcbiAgXCJpc29fODg1OS0zXCI6IFwiSVNPLTg4NTktM1wiLFxuICBcImlzb184ODU5LTM6MTk4OFwiOiBcIklTTy04ODU5LTNcIixcbiAgXCJsM1wiOiBcIklTTy04ODU5LTNcIixcbiAgXCJsYXRpbjNcIjogXCJJU08tODg1OS0zXCIsXG4gIFwiY3Npc29sYXRpbjRcIjogXCJJU08tODg1OS00XCIsXG4gIFwiaXNvLTg4NTktNFwiOiBcIklTTy04ODU5LTRcIixcbiAgXCJpc28taXItMTEwXCI6IFwiSVNPLTg4NTktNFwiLFxuICBcImlzbzg4NTktNFwiOiBcIklTTy04ODU5LTRcIixcbiAgXCJpc284ODU5NFwiOiBcIklTTy04ODU5LTRcIixcbiAgXCJpc29fODg1OS00XCI6IFwiSVNPLTg4NTktNFwiLFxuICBcImlzb184ODU5LTQ6MTk4OFwiOiBcIklTTy04ODU5LTRcIixcbiAgXCJsNFwiOiBcIklTTy04ODU5LTRcIixcbiAgXCJsYXRpbjRcIjogXCJJU08tODg1OS00XCIsXG4gIFwiY3Npc29sYXRpbmN5cmlsbGljXCI6IFwiSVNPLTg4NTktNVwiLFxuICBcImN5cmlsbGljXCI6IFwiSVNPLTg4NTktNVwiLFxuICBcImlzby04ODU5LTVcIjogXCJJU08tODg1OS01XCIsXG4gIFwiaXNvLWlyLTE0NFwiOiBcIklTTy04ODU5LTVcIixcbiAgXCJpc284ODU5LTVcIjogXCJJU08tODg1OS01XCIsXG4gIFwiaXNvODg1OTVcIjogXCJJU08tODg1OS01XCIsXG4gIFwiaXNvXzg4NTktNVwiOiBcIklTTy04ODU5LTVcIixcbiAgXCJpc29fODg1OS01OjE5ODhcIjogXCJJU08tODg1OS01XCIsXG4gIFwiYXJhYmljXCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImFzbW8tNzA4XCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImNzaXNvODg1OTZlXCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImNzaXNvODg1OTZpXCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImNzaXNvbGF0aW5hcmFiaWNcIjogXCJJU08tODg1OS02XCIsXG4gIFwiZWNtYS0xMTRcIjogXCJJU08tODg1OS02XCIsXG4gIFwiaXNvLTg4NTktNlwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJpc28tODg1OS02LWVcIjogXCJJU08tODg1OS02XCIsXG4gIFwiaXNvLTg4NTktNi1pXCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImlzby1pci0xMjdcIjogXCJJU08tODg1OS02XCIsXG4gIFwiaXNvODg1OS02XCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImlzbzg4NTk2XCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImlzb184ODU5LTZcIjogXCJJU08tODg1OS02XCIsXG4gIFwiaXNvXzg4NTktNjoxOTg3XCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImNzaXNvbGF0aW5ncmVla1wiOiBcIklTTy04ODU5LTdcIixcbiAgXCJlY21hLTExOFwiOiBcIklTTy04ODU5LTdcIixcbiAgXCJlbG90XzkyOFwiOiBcIklTTy04ODU5LTdcIixcbiAgXCJncmVla1wiOiBcIklTTy04ODU5LTdcIixcbiAgXCJncmVlazhcIjogXCJJU08tODg1OS03XCIsXG4gIFwiaXNvLTg4NTktN1wiOiBcIklTTy04ODU5LTdcIixcbiAgXCJpc28taXItMTI2XCI6IFwiSVNPLTg4NTktN1wiLFxuICBcImlzbzg4NTktN1wiOiBcIklTTy04ODU5LTdcIixcbiAgXCJpc284ODU5N1wiOiBcIklTTy04ODU5LTdcIixcbiAgXCJpc29fODg1OS03XCI6IFwiSVNPLTg4NTktN1wiLFxuICBcImlzb184ODU5LTc6MTk4N1wiOiBcIklTTy04ODU5LTdcIixcbiAgXCJzdW5fZXVfZ3JlZWtcIjogXCJJU08tODg1OS03XCIsXG4gIFwiY3Npc284ODU5OGVcIjogXCJJU08tODg1OS04XCIsXG4gIFwiY3Npc29sYXRpbmhlYnJld1wiOiBcIklTTy04ODU5LThcIixcbiAgXCJoZWJyZXdcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaXNvLTg4NTktOFwiOiBcIklTTy04ODU5LThcIixcbiAgXCJpc28tODg1OS04LWVcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaXNvLWlyLTEzOFwiOiBcIklTTy04ODU5LThcIixcbiAgXCJpc284ODU5LThcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaXNvODg1OThcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaXNvXzg4NTktOFwiOiBcIklTTy04ODU5LThcIixcbiAgXCJpc29fODg1OS04OjE5ODhcIjogXCJJU08tODg1OS04XCIsXG4gIFwidmlzdWFsXCI6IFwiSVNPLTg4NTktOFwiLFxuICBcImNzaXNvbGF0aW42XCI6IFwiSVNPLTg4NTktMTBcIixcbiAgXCJpc28tODg1OS0xMFwiOiBcIklTTy04ODU5LTEwXCIsXG4gIFwiaXNvLWlyLTE1N1wiOiBcIklTTy04ODU5LTEwXCIsXG4gIFwiaXNvODg1OS0xMFwiOiBcIklTTy04ODU5LTEwXCIsXG4gIFwiaXNvODg1OTEwXCI6IFwiSVNPLTg4NTktMTBcIixcbiAgXCJsNlwiOiBcIklTTy04ODU5LTEwXCIsXG4gIFwibGF0aW42XCI6IFwiSVNPLTg4NTktMTBcIixcbiAgXCJpc28tODg1OS0xM1wiOiBcIklTTy04ODU5LTEzXCIsXG4gIFwiaXNvODg1OS0xM1wiOiBcIklTTy04ODU5LTEzXCIsXG4gIFwiaXNvODg1OTEzXCI6IFwiSVNPLTg4NTktMTNcIixcbiAgXCJpc28tODg1OS0xNFwiOiBcIklTTy04ODU5LTE0XCIsXG4gIFwiaXNvODg1OS0xNFwiOiBcIklTTy04ODU5LTE0XCIsXG4gIFwiaXNvODg1OTE0XCI6IFwiSVNPLTg4NTktMTRcIixcbiAgXCJjc2lzb2xhdGluOVwiOiBcIklTTy04ODU5LTE1XCIsXG4gIFwiaXNvLTg4NTktMTVcIjogXCJJU08tODg1OS0xNVwiLFxuICBcImlzbzg4NTktMTVcIjogXCJJU08tODg1OS0xNVwiLFxuICBcImlzbzg4NTkxNVwiOiBcIklTTy04ODU5LTE1XCIsXG4gIFwiaXNvXzg4NTktMTVcIjogXCJJU08tODg1OS0xNVwiLFxuICBcImw5XCI6IFwiSVNPLTg4NTktMTVcIixcbiAgXCJpc28tODg1OS0xNlwiOiBcIklTTy04ODU5LTE2XCIsXG4gIFwiY3Nrb2k4clwiOiBcIktPSTgtUlwiLFxuICBcImtvaVwiOiBcIktPSTgtUlwiLFxuICBcImtvaThcIjogXCJLT0k4LVJcIixcbiAgXCJrb2k4LXJcIjogXCJLT0k4LVJcIixcbiAgXCJrb2k4X3JcIjogXCJLT0k4LVJcIixcbiAgXCJrb2k4LXJ1XCI6IFwiS09JOC1VXCIsXG4gIFwia29pOC11XCI6IFwiS09JOC1VXCIsXG4gIFwiY3NtYWNpbnRvc2hcIjogXCJtYWNpbnRvc2hcIixcbiAgXCJtYWNcIjogXCJtYWNpbnRvc2hcIixcbiAgXCJtYWNpbnRvc2hcIjogXCJtYWNpbnRvc2hcIixcbiAgXCJ4LW1hYy1yb21hblwiOiBcIm1hY2ludG9zaFwiLFxuICBcImRvcy04NzRcIjogXCJ3aW5kb3dzLTg3NFwiLFxuICBcImlzby04ODU5LTExXCI6IFwid2luZG93cy04NzRcIixcbiAgXCJpc284ODU5LTExXCI6IFwid2luZG93cy04NzRcIixcbiAgXCJpc284ODU5MTFcIjogXCJ3aW5kb3dzLTg3NFwiLFxuICBcInRpcy02MjBcIjogXCJ3aW5kb3dzLTg3NFwiLFxuICBcIndpbmRvd3MtODc0XCI6IFwid2luZG93cy04NzRcIixcbiAgXCJjcDEyNTBcIjogXCJ3aW5kb3dzLTEyNTBcIixcbiAgXCJ3aW5kb3dzLTEyNTBcIjogXCJ3aW5kb3dzLTEyNTBcIixcbiAgXCJ4LWNwMTI1MFwiOiBcIndpbmRvd3MtMTI1MFwiLFxuICBcImNwMTI1MVwiOiBcIndpbmRvd3MtMTI1MVwiLFxuICBcIndpbmRvd3MtMTI1MVwiOiBcIndpbmRvd3MtMTI1MVwiLFxuICBcIngtY3AxMjUxXCI6IFwid2luZG93cy0xMjUxXCIsXG4gIFwiYW5zaV94My40LTE5NjhcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJhc2NpaVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImNwMTI1MlwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImNwODE5XCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwiY3Npc29sYXRpbjFcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJpYm04MTlcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJpc28tODg1OS0xXCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwiaXNvLWlyLTEwMFwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImlzbzg4NTktMVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImlzbzg4NTkxXCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwiaXNvXzg4NTktMVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImlzb184ODU5LTE6MTk4N1wiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImwxXCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwibGF0aW4xXCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwidXMtYXNjaWlcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJ3aW5kb3dzLTEyNTJcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJ4LWNwMTI1MlwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImNwMTI1M1wiOiBcIndpbmRvd3MtMTI1M1wiLFxuICBcIndpbmRvd3MtMTI1M1wiOiBcIndpbmRvd3MtMTI1M1wiLFxuICBcIngtY3AxMjUzXCI6IFwid2luZG93cy0xMjUzXCIsXG4gIFwiY3AxMjU0XCI6IFwid2luZG93cy0xMjU0XCIsXG4gIFwiY3Npc29sYXRpbjVcIjogXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJpc28tODg1OS05XCI6IFwid2luZG93cy0xMjU0XCIsXG4gIFwiaXNvLWlyLTE0OFwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImlzbzg4NTktOVwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImlzbzg4NTk5XCI6IFwid2luZG93cy0xMjU0XCIsXG4gIFwiaXNvXzg4NTktOVwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImlzb184ODU5LTk6MTk4OVwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImw1XCI6IFwid2luZG93cy0xMjU0XCIsXG4gIFwibGF0aW41XCI6IFwid2luZG93cy0xMjU0XCIsXG4gIFwid2luZG93cy0xMjU0XCI6IFwid2luZG93cy0xMjU0XCIsXG4gIFwieC1jcDEyNTRcIjogXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJjcDEyNTVcIjogXCJ3aW5kb3dzLTEyNTVcIixcbiAgXCJ3aW5kb3dzLTEyNTVcIjogXCJ3aW5kb3dzLTEyNTVcIixcbiAgXCJ4LWNwMTI1NVwiOiBcIndpbmRvd3MtMTI1NVwiLFxuICBcImNwMTI1NlwiOiBcIndpbmRvd3MtMTI1NlwiLFxuICBcIndpbmRvd3MtMTI1NlwiOiBcIndpbmRvd3MtMTI1NlwiLFxuICBcIngtY3AxMjU2XCI6IFwid2luZG93cy0xMjU2XCIsXG4gIFwiY3AxMjU3XCI6IFwid2luZG93cy0xMjU3XCIsXG4gIFwid2luZG93cy0xMjU3XCI6IFwid2luZG93cy0xMjU3XCIsXG4gIFwieC1jcDEyNTdcIjogXCJ3aW5kb3dzLTEyNTdcIixcbiAgXCJjcDEyNThcIjogXCJ3aW5kb3dzLTEyNThcIixcbiAgXCJ3aW5kb3dzLTEyNThcIjogXCJ3aW5kb3dzLTEyNThcIixcbiAgXCJ4LWNwMTI1OFwiOiBcIndpbmRvd3MtMTI1OFwiLFxuICBcImNoaW5lc2VcIjogXCJHQktcIixcbiAgXCJjc2diMjMxMlwiOiBcIkdCS1wiLFxuICBcImNzaXNvNThnYjIzMTI4MFwiOiBcIkdCS1wiLFxuICBcImdiMjMxMlwiOiBcIkdCS1wiLFxuICBcImdiXzIzMTJcIjogXCJHQktcIixcbiAgXCJnYl8yMzEyLTgwXCI6IFwiR0JLXCIsXG4gIFwiZ2JrXCI6IFwiR0JLXCIsXG4gIFwiaXNvLWlyLTU4XCI6IFwiR0JLXCIsXG4gIFwieC1nYmtcIjogXCJHQktcIixcbiAgXCJnYjE4MDMwXCI6IFwiZ2IxODAzMFwiLFxuICBcImJpZzVcIjogXCJCaWc1XCIsXG4gIFwiYmlnNS1oa3Njc1wiOiBcIkJpZzVcIixcbiAgXCJjbi1iaWc1XCI6IFwiQmlnNVwiLFxuICBcImNzYmlnNVwiOiBcIkJpZzVcIixcbiAgXCJ4LXgtYmlnNVwiOiBcIkJpZzVcIixcbiAgXCJjc2V1Y3BrZGZtdGphcGFuZXNlXCI6IFwiRVVDLUpQXCIsXG4gIFwiZXVjLWpwXCI6IFwiRVVDLUpQXCIsXG4gIFwieC1ldWMtanBcIjogXCJFVUMtSlBcIixcbiAgXCJjc3NoaWZ0amlzXCI6IFwiU2hpZnRfSklTXCIsXG4gIFwibXM5MzJcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJtc19rYW5qaVwiOiBcIlNoaWZ0X0pJU1wiLFxuICBcInNoaWZ0LWppc1wiOiBcIlNoaWZ0X0pJU1wiLFxuICBcInNoaWZ0X2ppc1wiOiBcIlNoaWZ0X0pJU1wiLFxuICBcInNqaXNcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJ3aW5kb3dzLTMxalwiOiBcIlNoaWZ0X0pJU1wiLFxuICBcIngtc2ppc1wiOiBcIlNoaWZ0X0pJU1wiLFxuICBcImNzZXVja3JcIjogXCJFVUMtS1JcIixcbiAgXCJjc2tzYzU2MDExOTg3XCI6IFwiRVVDLUtSXCIsXG4gIFwiZXVjLWtyXCI6IFwiRVVDLUtSXCIsXG4gIFwiaXNvLWlyLTE0OVwiOiBcIkVVQy1LUlwiLFxuICBcImtvcmVhblwiOiBcIkVVQy1LUlwiLFxuICBcImtzX2NfNTYwMS0xOTg3XCI6IFwiRVVDLUtSXCIsXG4gIFwia3NfY181NjAxLTE5ODlcIjogXCJFVUMtS1JcIixcbiAgXCJrc2M1NjAxXCI6IFwiRVVDLUtSXCIsXG4gIFwia3NjXzU2MDFcIjogXCJFVUMtS1JcIixcbiAgXCJ3aW5kb3dzLTk0OVwiOiBcIkVVQy1LUlwiLFxuICBcInV0Zi0xNmJlXCI6IFwiVVRGLTE2QkVcIixcbiAgXCJ1dGYtMTZcIjogXCJVVEYtMTZMRVwiLFxuICBcInV0Zi0xNmxlXCI6IFwiVVRGLTE2TEVcIlxufSIsIm1vZHVsZS5leHBvcnRzPVtcbiAgXCJVVEYtOFwiLFxuICBcIklCTTg2NlwiLFxuICBcIklTTy04ODU5LTJcIixcbiAgXCJJU08tODg1OS0zXCIsXG4gIFwiSVNPLTg4NTktNFwiLFxuICBcIklTTy04ODU5LTVcIixcbiAgXCJJU08tODg1OS02XCIsXG4gIFwiSVNPLTg4NTktN1wiLFxuICBcIklTTy04ODU5LThcIixcbiAgXCJJU08tODg1OS0xMFwiLFxuICBcIklTTy04ODU5LTEzXCIsXG4gIFwiSVNPLTg4NTktMTRcIixcbiAgXCJJU08tODg1OS0xNVwiLFxuICBcIklTTy04ODU5LTE2XCIsXG4gIFwiS09JOC1SXCIsXG4gIFwiS09JOC1VXCIsXG4gIFwibWFjaW50b3NoXCIsXG4gIFwid2luZG93cy04NzRcIixcbiAgXCJ3aW5kb3dzLTEyNTBcIixcbiAgXCJ3aW5kb3dzLTEyNTFcIixcbiAgXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJ3aW5kb3dzLTEyNTNcIixcbiAgXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJ3aW5kb3dzLTEyNTVcIixcbiAgXCJ3aW5kb3dzLTEyNTZcIixcbiAgXCJ3aW5kb3dzLTEyNTdcIixcbiAgXCJ3aW5kb3dzLTEyNThcIixcbiAgXCJHQktcIixcbiAgXCJnYjE4MDMwXCIsXG4gIFwiQmlnNVwiLFxuICBcIkVVQy1KUFwiLFxuICBcIlNoaWZ0X0pJU1wiLFxuICBcIkVVQy1LUlwiLFxuICBcIlVURi0xNkJFXCIsXG4gIFwiVVRGLTE2TEVcIlxuXSIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgaWNvbnZMaXRlID0gcmVxdWlyZShcImljb252LWxpdGVcIik7XG5jb25zdCBzdXBwb3J0ZWROYW1lcyA9IHJlcXVpcmUoXCIuL3N1cHBvcnRlZC1uYW1lcy5qc29uXCIpO1xuY29uc3QgbGFiZWxzVG9OYW1lcyA9IHJlcXVpcmUoXCIuL2xhYmVscy10by1uYW1lcy5qc29uXCIpO1xuXG5jb25zdCBzdXBwb3J0ZWROYW1lc1NldCA9IG5ldyBTZXQoc3VwcG9ydGVkTmFtZXMpO1xuXG4vLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbmNvZGluZy1nZXRcbmV4cG9ydHMubGFiZWxUb05hbWUgPSBsYWJlbCA9PiB7XG4gIGxhYmVsID0gU3RyaW5nKGxhYmVsKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICByZXR1cm4gbGFiZWxzVG9OYW1lc1tsYWJlbF0gfHwgbnVsbDtcbn07XG5cbi8vIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNkZWNvZGVcbmV4cG9ydHMuZGVjb2RlID0gKGJ1ZmZlciwgZmFsbGJhY2tFbmNvZGluZ05hbWUpID0+IHtcbiAgbGV0IGVuY29kaW5nID0gZmFsbGJhY2tFbmNvZGluZ05hbWU7XG4gIGlmICghZXhwb3J0cy5pc1N1cHBvcnRlZChlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgXCIke2VuY29kaW5nfVwiIGlzIG5vdCBhIHN1cHBvcnRlZCBlbmNvZGluZyBuYW1lYCk7XG4gIH1cblxuICBjb25zdCBib21FbmNvZGluZyA9IGV4cG9ydHMuZ2V0Qk9NRW5jb2RpbmcoYnVmZmVyKTtcbiAgaWYgKGJvbUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgZW5jb2RpbmcgPSBib21FbmNvZGluZztcbiAgfVxuXG4gIC8vIGljb252LWxpdGUgd2lsbCBzdHJpcCBCT01zIGZvciB1cywgc28gbm8gbmVlZCB0byBkbyB0aGUgc3R1ZmYgdGhlIHNwZWMgZG9lc1xuXG4gIHJldHVybiBpY29udkxpdGUuZGVjb2RlKGJ1ZmZlciwgZW5jb2RpbmcpO1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8xOTEwI2lzc3VlY29tbWVudC0yNTQwMTczNjlcbmV4cG9ydHMuZ2V0Qk9NRW5jb2RpbmcgPSBidWZmZXIgPT4ge1xuICBpZiAoYnVmZmVyWzBdID09PSAweEZFICYmIGJ1ZmZlclsxXSA9PT0gMHhGRikge1xuICAgIHJldHVybiBcIlVURi0xNkJFXCI7XG4gIH0gZWxzZSBpZiAoYnVmZmVyWzBdID09PSAweEZGICYmIGJ1ZmZlclsxXSA9PT0gMHhGRSkge1xuICAgIHJldHVybiBcIlVURi0xNkxFXCI7XG4gIH0gZWxzZSBpZiAoYnVmZmVyWzBdID09PSAweEVGICYmIGJ1ZmZlclsxXSA9PT0gMHhCQiAmJiBidWZmZXJbMl0gPT09IDB4QkYpIHtcbiAgICByZXR1cm4gXCJVVEYtOFwiO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnRzLmlzU3VwcG9ydGVkID0gbmFtZSA9PiB7XG4gIHJldHVybiBzdXBwb3J0ZWROYW1lc1NldC5oYXMoU3RyaW5nKG5hbWUpKTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHVzbSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpO1xuXG5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gY2xhc3MgVVJMSW1wbCB7XG4gIGNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yQXJncykge1xuICAgIGNvbnN0IHVybCA9IGNvbnN0cnVjdG9yQXJnc1swXTtcbiAgICBjb25zdCBiYXNlID0gY29uc3RydWN0b3JBcmdzWzFdO1xuXG4gICAgbGV0IHBhcnNlZEJhc2UgPSBudWxsO1xuICAgIGlmIChiYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnNlZEJhc2UgPSB1c20uYmFzaWNVUkxQYXJzZShiYXNlKTtcbiAgICAgIGlmIChwYXJzZWRCYXNlID09PSBcImZhaWx1cmVcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBiYXNlIFVSTFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRVUkwgPSB1c20uYmFzaWNVUkxQYXJzZSh1cmwsIHsgYmFzZVVSTDogcGFyc2VkQmFzZSB9KTtcbiAgICBpZiAocGFyc2VkVVJMID09PSBcImZhaWx1cmVcIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgVVJMXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX3VybCA9IHBhcnNlZFVSTDtcblxuICAgIC8vIFRPRE86IHF1ZXJ5IHN0dWZmXG4gIH1cblxuICBnZXQgaHJlZigpIHtcbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZVVSTCh0aGlzLl91cmwpO1xuICB9XG5cbiAgc2V0IGhyZWYodikge1xuICAgIGNvbnN0IHBhcnNlZFVSTCA9IHVzbS5iYXNpY1VSTFBhcnNlKHYpO1xuICAgIGlmIChwYXJzZWRVUkwgPT09IFwiZmFpbHVyZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBVUkxcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fdXJsID0gcGFyc2VkVVJMO1xuICB9XG5cbiAgZ2V0IG9yaWdpbigpIHtcbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZVVSTFRvVW5pY29kZU9yaWdpbih0aGlzLl91cmwpO1xuICB9XG5cbiAgZ2V0IHByb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwuc2NoZW1lICsgXCI6XCI7XG4gIH1cblxuICBzZXQgcHJvdG9jb2wodikge1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKHYgKyBcIjpcIiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJzY2hlbWUgc3RhcnRcIiB9KTtcbiAgfVxuXG4gIGdldCB1c2VybmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsLnVzZXJuYW1lO1xuICB9XG5cbiAgc2V0IHVzZXJuYW1lKHYpIHtcbiAgICBpZiAodXNtLmNhbm5vdEhhdmVBVXNlcm5hbWVQYXNzd29yZFBvcnQodGhpcy5fdXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVzbS5zZXRUaGVVc2VybmFtZSh0aGlzLl91cmwsIHYpO1xuICB9XG5cbiAgZ2V0IHBhc3N3b3JkKCkge1xuICAgIHJldHVybiB0aGlzLl91cmwucGFzc3dvcmQ7XG4gIH1cblxuICBzZXQgcGFzc3dvcmQodikge1xuICAgIGlmICh1c20uY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydCh0aGlzLl91cmwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLnNldFRoZVBhc3N3b3JkKHRoaXMuX3VybCwgdik7XG4gIH1cblxuICBnZXQgaG9zdCgpIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLl91cmw7XG5cbiAgICBpZiAodXJsLmhvc3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGlmICh1cmwucG9ydCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVzbS5zZXJpYWxpemVIb3N0KHVybC5ob3N0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpICsgXCI6XCIgKyB1c20uc2VyaWFsaXplSW50ZWdlcih1cmwucG9ydCk7XG4gIH1cblxuICBzZXQgaG9zdCh2KSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJob3N0XCIgfSk7XG4gIH1cblxuICBnZXQgaG9zdG5hbWUoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5ob3N0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNtLnNlcmlhbGl6ZUhvc3QodGhpcy5fdXJsLmhvc3QpO1xuICB9XG5cbiAgc2V0IGhvc3RuYW1lKHYpIHtcbiAgICBpZiAodGhpcy5fdXJsLmNhbm5vdEJlQUJhc2VVUkwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcImhvc3RuYW1lXCIgfSk7XG4gIH1cblxuICBnZXQgcG9ydCgpIHtcbiAgICBpZiAodGhpcy5fdXJsLnBvcnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiB1c20uc2VyaWFsaXplSW50ZWdlcih0aGlzLl91cmwucG9ydCk7XG4gIH1cblxuICBzZXQgcG9ydCh2KSB7XG4gICAgaWYgKHVzbS5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHRoaXMuX3VybCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdGhpcy5fdXJsLnBvcnQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB1c20uYmFzaWNVUkxQYXJzZSh2LCB7IHVybDogdGhpcy5fdXJsLCBzdGF0ZU92ZXJyaWRlOiBcInBvcnRcIiB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGF0aG5hbWUoKSB7XG4gICAgaWYgKHRoaXMuX3VybC5jYW5ub3RCZUFCYXNlVVJMKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdXJsLnBhdGhbMF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3VybC5wYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiL1wiICsgdGhpcy5fdXJsLnBhdGguam9pbihcIi9cIik7XG4gIH1cblxuICBzZXQgcGF0aG5hbWUodikge1xuICAgIGlmICh0aGlzLl91cmwuY2Fubm90QmVBQmFzZVVSTCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3VybC5wYXRoID0gW107XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UodiwgeyB1cmw6IHRoaXMuX3VybCwgc3RhdGVPdmVycmlkZTogXCJwYXRoIHN0YXJ0XCIgfSk7XG4gIH1cblxuICBnZXQgc2VhcmNoKCkge1xuICAgIGlmICh0aGlzLl91cmwucXVlcnkgPT09IG51bGwgfHwgdGhpcy5fdXJsLnF1ZXJ5ID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gXCI/XCIgKyB0aGlzLl91cmwucXVlcnk7XG4gIH1cblxuICBzZXQgc2VhcmNoKHYpIHtcbiAgICAvLyBUT0RPOiBxdWVyeSBzdHVmZlxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5fdXJsO1xuXG4gICAgaWYgKHYgPT09IFwiXCIpIHtcbiAgICAgIHVybC5xdWVyeSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSB2WzBdID09PSBcIj9cIiA/IHYuc3Vic3RyaW5nKDEpIDogdjtcbiAgICB1cmwucXVlcnkgPSBcIlwiO1xuICAgIHVzbS5iYXNpY1VSTFBhcnNlKGlucHV0LCB7IHVybCwgc3RhdGVPdmVycmlkZTogXCJxdWVyeVwiIH0pO1xuICB9XG5cbiAgZ2V0IGhhc2goKSB7XG4gICAgaWYgKHRoaXMuX3VybC5mcmFnbWVudCA9PT0gbnVsbCB8fCB0aGlzLl91cmwuZnJhZ21lbnQgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIiNcIiArIHRoaXMuX3VybC5mcmFnbWVudDtcbiAgfVxuXG4gIHNldCBoYXNoKHYpIHtcbiAgICBpZiAodiA9PT0gXCJcIikge1xuICAgICAgdGhpcy5fdXJsLmZyYWdtZW50ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHZbMF0gPT09IFwiI1wiID8gdi5zdWJzdHJpbmcoMSkgOiB2O1xuICAgIHRoaXMuX3VybC5mcmFnbWVudCA9IFwiXCI7XG4gICAgdXNtLmJhc2ljVVJMUGFyc2UoaW5wdXQsIHsgdXJsOiB0aGlzLl91cmwsIHN0YXRlT3ZlcnJpZGU6IFwiZnJhZ21lbnRcIiB9KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy5ocmVmO1xuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbnZlcnNpb25zID0gcmVxdWlyZShcIndlYmlkbC1jb252ZXJzaW9uc1wiKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5jb25zdCBJbXBsID0gcmVxdWlyZShcIi4vL1VSTC1pbXBsLmpzXCIpO1xuXG5jb25zdCBpbXBsID0gdXRpbHMuaW1wbFN5bWJvbDtcblxuZnVuY3Rpb24gVVJMKHVybCkge1xuICBpZiAoIXRoaXMgfHwgdGhpc1tpbXBsXSB8fCAhKHRoaXMgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1VSTCc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbiAgfVxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnVVJMJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgXCIgKyBhcmd1bWVudHMubGVuZ3RoICsgXCIgcHJlc2VudC5cIik7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDI7ICsraSkge1xuICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gIH1cbiAgYXJnc1swXSA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKGFyZ3NbMF0pO1xuICBpZiAoYXJnc1sxXSAhPT0gdW5kZWZpbmVkKSB7XG4gIGFyZ3NbMV0gPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShhcmdzWzFdKTtcbiAgfVxuXG4gIG1vZHVsZS5leHBvcnRzLnNldHVwKHRoaXMsIGFyZ3MpO1xufVxuXG5VUkwucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgaSA8IDA7ICsraSkge1xuICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gIH1cbiAgcmV0dXJuIHRoaXNbaW1wbF0udG9KU09OLmFwcGx5KHRoaXNbaW1wbF0sIGFyZ3MpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcImhyZWZcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaHJlZjtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5ocmVmID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuVVJMLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzIHx8ICFtb2R1bGUuZXhwb3J0cy5pcyh0aGlzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXMuaHJlZjtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcIm9yaWdpblwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5vcmlnaW47XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInByb3RvY29sXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnByb3RvY29sO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnByb3RvY29sID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwidXNlcm5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0udXNlcm5hbWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0udXNlcm5hbWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwYXNzd29yZFwiLCB7XG4gIGdldCgpIHtcbiAgICByZXR1cm4gdGhpc1tpbXBsXS5wYXNzd29yZDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5wYXNzd29yZCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcImhvc3RcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaG9zdDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5ob3N0ID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwiaG9zdG5hbWVcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXNbaW1wbF0uaG9zdG5hbWU7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaG9zdG5hbWUgPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJwb3J0XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnBvcnQ7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0ucG9ydCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVUkwucHJvdG90eXBlLCBcInBhdGhuYW1lXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnBhdGhuYW1lO1xuICB9LFxuICBzZXQoVikge1xuICAgIFYgPSBjb252ZXJzaW9uc1tcIlVTVlN0cmluZ1wiXShWKTtcbiAgICB0aGlzW2ltcGxdLnBhdGhuYW1lID0gVjtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFVSTC5wcm90b3R5cGUsIFwic2VhcmNoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLnNlYXJjaDtcbiAgfSxcbiAgc2V0KFYpIHtcbiAgICBWID0gY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0oVik7XG4gICAgdGhpc1tpbXBsXS5zZWFyY2ggPSBWO1xuICB9LFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVVJMLnByb3RvdHlwZSwgXCJoYXNoXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzW2ltcGxdLmhhc2g7XG4gIH0sXG4gIHNldChWKSB7XG4gICAgViA9IGNvbnZlcnNpb25zW1wiVVNWU3RyaW5nXCJdKFYpO1xuICAgIHRoaXNbaW1wbF0uaGFzaCA9IFY7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzKG9iaikge1xuICAgIHJldHVybiAhIW9iaiAmJiBvYmpbaW1wbF0gaW5zdGFuY2VvZiBJbXBsLmltcGxlbWVudGF0aW9uO1xuICB9LFxuICBjcmVhdGUoY29uc3RydWN0b3JBcmdzLCBwcml2YXRlRGF0YSkge1xuICAgIGxldCBvYmogPSBPYmplY3QuY3JlYXRlKFVSTC5wcm90b3R5cGUpO1xuICAgIHRoaXMuc2V0dXAob2JqLCBjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBzZXR1cChvYmosIGNvbnN0cnVjdG9yQXJncywgcHJpdmF0ZURhdGEpIHtcbiAgICBpZiAoIXByaXZhdGVEYXRhKSBwcml2YXRlRGF0YSA9IHt9O1xuICAgIHByaXZhdGVEYXRhLndyYXBwZXIgPSBvYmo7XG5cbiAgICBvYmpbaW1wbF0gPSBuZXcgSW1wbC5pbXBsZW1lbnRhdGlvbihjb25zdHJ1Y3RvckFyZ3MsIHByaXZhdGVEYXRhKTtcbiAgICBvYmpbaW1wbF1bdXRpbHMud3JhcHBlclN5bWJvbF0gPSBvYmo7XG4gIH0sXG4gIGludGVyZmFjZTogVVJMLFxuICBleHBvc2U6IHtcbiAgICBXaW5kb3c6IHsgVVJMOiBVUkwgfSxcbiAgICBXb3JrZXI6IHsgVVJMOiBVUkwgfVxuICB9XG59O1xuXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5VUkwgPSByZXF1aXJlKFwiLi9VUkxcIikuaW50ZXJmYWNlO1xuZXhwb3J0cy5zZXJpYWxpemVVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVVUkw7XG5leHBvcnRzLnNlcmlhbGl6ZVVSTFRvVW5pY29kZU9yaWdpbiA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLnNlcmlhbGl6ZVVSTFRvVW5pY29kZU9yaWdpbjtcbmV4cG9ydHMuYmFzaWNVUkxQYXJzZSA9IHJlcXVpcmUoXCIuL3VybC1zdGF0ZS1tYWNoaW5lXCIpLmJhc2ljVVJMUGFyc2U7XG5leHBvcnRzLnNldFRoZVVzZXJuYW1lID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlVXNlcm5hbWU7XG5leHBvcnRzLnNldFRoZVBhc3N3b3JkID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2V0VGhlUGFzc3dvcmQ7XG5leHBvcnRzLnNlcmlhbGl6ZUhvc3QgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5zZXJpYWxpemVIb3N0O1xuZXhwb3J0cy5zZXJpYWxpemVJbnRlZ2VyID0gcmVxdWlyZShcIi4vdXJsLXN0YXRlLW1hY2hpbmVcIikuc2VyaWFsaXplSW50ZWdlcjtcbmV4cG9ydHMucGFyc2VVUkwgPSByZXF1aXJlKFwiLi91cmwtc3RhdGUtbWFjaGluZVwiKS5wYXJzZVVSTDtcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5jb25zdCBwdW55Y29kZSA9IHJlcXVpcmUoXCJwdW55Y29kZVwiKTtcclxuY29uc3QgdHI0NiA9IHJlcXVpcmUoXCJ0cjQ2XCIpO1xyXG5cclxuY29uc3Qgc3BlY2lhbFNjaGVtZXMgPSB7XHJcbiAgZnRwOiAyMSxcclxuICBmaWxlOiBudWxsLFxyXG4gIGdvcGhlcjogNzAsXHJcbiAgaHR0cDogODAsXHJcbiAgaHR0cHM6IDQ0MyxcclxuICB3czogODAsXHJcbiAgd3NzOiA0NDNcclxufTtcclxuXHJcbmNvbnN0IGZhaWx1cmUgPSBTeW1ib2woXCJmYWlsdXJlXCIpO1xyXG5cclxuZnVuY3Rpb24gY291bnRTeW1ib2xzKHN0cikge1xyXG4gIHJldHVybiBwdW55Y29kZS51Y3MyLmRlY29kZShzdHIpLmxlbmd0aDtcclxufVxyXG5cclxuZnVuY3Rpb24gYXQoaW5wdXQsIGlkeCkge1xyXG4gIGNvbnN0IGMgPSBpbnB1dFtpZHhdO1xyXG4gIHJldHVybiBpc05hTihjKSA/IHVuZGVmaW5lZCA6IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJRGlnaXQoYykge1xyXG4gIHJldHVybiBjID49IDB4MzAgJiYgYyA8PSAweDM5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJQWxwaGEoYykge1xyXG4gIHJldHVybiAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4N0EpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHtcclxuICByZXR1cm4gaXNBU0NJSUFscGhhKGMpIHx8IGlzQVNDSUlEaWdpdChjKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBU0NJSUhleChjKSB7XHJcbiAgcmV0dXJuIGlzQVNDSUlEaWdpdChjKSB8fCAoYyA+PSAweDQxICYmIGMgPD0gMHg0NikgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4NjYpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NpbmdsZURvdChidWZmZXIpIHtcclxuICByZXR1cm4gYnVmZmVyID09PSBcIi5cIiB8fCBidWZmZXIudG9Mb3dlckNhc2UoKSA9PT0gXCIlMmVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEb3VibGVEb3QoYnVmZmVyKSB7XHJcbiAgYnVmZmVyID0gYnVmZmVyLnRvTG93ZXJDYXNlKCk7XHJcbiAgcmV0dXJuIGJ1ZmZlciA9PT0gXCIuLlwiIHx8IGJ1ZmZlciA9PT0gXCIlMmUuXCIgfHwgYnVmZmVyID09PSBcIi4lMmVcIiB8fCBidWZmZXIgPT09IFwiJTJlJTJlXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzV2luZG93c0RyaXZlTGV0dGVyQ29kZVBvaW50cyhjcDEsIGNwMikge1xyXG4gIHJldHVybiBpc0FTQ0lJQWxwaGEoY3AxKSAmJiAoY3AyID09PSA1OCB8fCBjcDIgPT09IDEyNCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzV2luZG93c0RyaXZlTGV0dGVyU3RyaW5nKHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID09PSAyICYmIGlzQVNDSUlBbHBoYShzdHJpbmcuY29kZVBvaW50QXQoMCkpICYmIChzdHJpbmdbMV0gPT09IFwiOlwiIHx8IHN0cmluZ1sxXSA9PT0gXCJ8XCIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc05vcm1hbGl6ZWRXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcoc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPT09IDIgJiYgaXNBU0NJSUFscGhhKHN0cmluZy5jb2RlUG9pbnRBdCgwKSkgJiYgc3RyaW5nWzFdID09PSBcIjpcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50KHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcuc2VhcmNoKC9cXHUwMDAwfFxcdTAwMDl8XFx1MDAwQXxcXHUwMDBEfFxcdTAwMjB8I3wlfFxcL3w6fFxcP3xAfFxcW3xcXFxcfFxcXS8pICE9PSAtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50RXhjbHVkaW5nUGVyY2VudChzdHJpbmcpIHtcclxuICByZXR1cm4gc3RyaW5nLnNlYXJjaCgvXFx1MDAwMHxcXHUwMDA5fFxcdTAwMEF8XFx1MDAwRHxcXHUwMDIwfCN8XFwvfDp8XFw/fEB8XFxbfFxcXFx8XFxdLykgIT09IC0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1NwZWNpYWxTY2hlbWUoc2NoZW1lKSB7XHJcbiAgcmV0dXJuIHNwZWNpYWxTY2hlbWVzW3NjaGVtZV0gIT09IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTcGVjaWFsKHVybCkge1xyXG4gIHJldHVybiBpc1NwZWNpYWxTY2hlbWUodXJsLnNjaGVtZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRQb3J0KHNjaGVtZSkge1xyXG4gIHJldHVybiBzcGVjaWFsU2NoZW1lc1tzY2hlbWVdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwZXJjZW50RW5jb2RlKGMpIHtcclxuICBsZXQgaGV4ID0gYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcclxuICBpZiAoaGV4Lmxlbmd0aCA9PT0gMSkge1xyXG4gICAgaGV4ID0gXCIwXCIgKyBoZXg7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gXCIlXCIgKyBoZXg7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHV0ZjhQZXJjZW50RW5jb2RlKGMpIHtcclxuICBjb25zdCBidWYgPSBuZXcgQnVmZmVyKGMpO1xyXG5cclxuICBsZXQgc3RyID0gXCJcIjtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyArK2kpIHtcclxuICAgIHN0ciArPSBwZXJjZW50RW5jb2RlKGJ1ZltpXSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1dGY4UGVyY2VudERlY29kZShzdHIpIHtcclxuICBjb25zdCBpbnB1dCA9IG5ldyBCdWZmZXIoc3RyKTtcclxuICBjb25zdCBvdXRwdXQgPSBbXTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgKytpKSB7XHJcbiAgICBpZiAoaW5wdXRbaV0gIT09IDM3KSB7XHJcbiAgICAgIG91dHB1dC5wdXNoKGlucHV0W2ldKTtcclxuICAgIH0gZWxzZSBpZiAoaW5wdXRbaV0gPT09IDM3ICYmIGlzQVNDSUlIZXgoaW5wdXRbaSArIDFdKSAmJiBpc0FTQ0lJSGV4KGlucHV0W2kgKyAyXSkpIHtcclxuICAgICAgb3V0cHV0LnB1c2gocGFyc2VJbnQoaW5wdXQuc2xpY2UoaSArIDEsIGkgKyAzKS50b1N0cmluZygpLCAxNikpO1xyXG4gICAgICBpICs9IDI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRwdXQucHVzaChpbnB1dFtpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBuZXcgQnVmZmVyKG91dHB1dCkudG9TdHJpbmcoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKGMpIHtcclxuICByZXR1cm4gYyA8PSAweDFGIHx8IGMgPiAweDdFO1xyXG59XHJcblxyXG5jb25zdCBleHRyYVBhdGhQZXJjZW50RW5jb2RlU2V0ID0gbmV3IFNldChbMzIsIDM0LCAzNSwgNjAsIDYyLCA2MywgOTYsIDEyMywgMTI1XSk7XHJcbmZ1bmN0aW9uIGlzUGF0aFBlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUoYykgfHwgZXh0cmFQYXRoUGVyY2VudEVuY29kZVNldC5oYXMoYyk7XHJcbn1cclxuXHJcbmNvbnN0IGV4dHJhVXNlcmluZm9QZXJjZW50RW5jb2RlU2V0ID1cclxuICBuZXcgU2V0KFs0NywgNTgsIDU5LCA2MSwgNjQsIDkxLCA5MiwgOTMsIDk0LCAxMjRdKTtcclxuZnVuY3Rpb24gaXNVc2VyaW5mb1BlcmNlbnRFbmNvZGUoYykge1xyXG4gIHJldHVybiBpc1BhdGhQZXJjZW50RW5jb2RlKGMpIHx8IGV4dHJhVXNlcmluZm9QZXJjZW50RW5jb2RlU2V0LmhhcyhjKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGVyY2VudEVuY29kZUNoYXIoYywgZW5jb2RlU2V0UHJlZGljYXRlKSB7XHJcbiAgY29uc3QgY1N0ciA9IFN0cmluZy5mcm9tQ29kZVBvaW50KGMpO1xyXG5cclxuICBpZiAoZW5jb2RlU2V0UHJlZGljYXRlKGMpKSB7XHJcbiAgICByZXR1cm4gdXRmOFBlcmNlbnRFbmNvZGUoY1N0cik7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY1N0cjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VJUHY0TnVtYmVyKGlucHV0KSB7XHJcbiAgbGV0IFIgPSAxMDtcclxuXHJcbiAgaWYgKGlucHV0Lmxlbmd0aCA+PSAyICYmIGlucHV0LmNoYXJBdCgwKSA9PT0gXCIwXCIgJiYgaW5wdXQuY2hhckF0KDEpLnRvTG93ZXJDYXNlKCkgPT09IFwieFwiKSB7XHJcbiAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZygyKTtcclxuICAgIFIgPSAxNjtcclxuICB9IGVsc2UgaWYgKGlucHV0Lmxlbmd0aCA+PSAyICYmIGlucHV0LmNoYXJBdCgwKSA9PT0gXCIwXCIpIHtcclxuICAgIGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDEpO1xyXG4gICAgUiA9IDg7XHJcbiAgfVxyXG5cclxuICBpZiAoaW5wdXQgPT09IFwiXCIpIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVnZXggPSBSID09PSAxMCA/IC9bXjAtOV0vIDogKFIgPT09IDE2ID8gL1teMC05QS1GYS1mXS8gOiAvW14wLTddLyk7XHJcbiAgaWYgKHJlZ2V4LnRlc3QoaW5wdXQpKSB7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJzZUludChpbnB1dCwgUik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlSVB2NChpbnB1dCkge1xyXG4gIGNvbnN0IHBhcnRzID0gaW5wdXQuc3BsaXQoXCIuXCIpO1xyXG4gIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PT0gXCJcIikge1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgcGFydHMucG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAocGFydHMubGVuZ3RoID4gNCkge1xyXG4gICAgcmV0dXJuIGlucHV0O1xyXG4gIH1cclxuXHJcbiAgY29uc3QgbnVtYmVycyA9IFtdO1xyXG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgaWYgKHBhcnQgPT09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgbiA9IHBhcnNlSVB2NE51bWJlcihwYXJ0KTtcclxuICAgIGlmIChuID09PSBmYWlsdXJlKSB7XHJcbiAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBudW1iZXJzLnB1c2gobik7XHJcbiAgfVxyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlcnMubGVuZ3RoIC0gMTsgKytpKSB7XHJcbiAgICBpZiAobnVtYmVyc1tpXSA+IDI1NSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSA+PSBNYXRoLnBvdygyNTYsIDUgLSBudW1iZXJzLmxlbmd0aCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgbGV0IGlwdjQgPSBudW1iZXJzLnBvcCgpO1xyXG4gIGxldCBjb3VudGVyID0gMDtcclxuXHJcbiAgZm9yIChjb25zdCBuIG9mIG51bWJlcnMpIHtcclxuICAgIGlwdjQgKz0gbiAqIE1hdGgucG93KDI1NiwgMyAtIGNvdW50ZXIpO1xyXG4gICAgKytjb3VudGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGlwdjQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcykge1xyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGxldCBuID0gYWRkcmVzcztcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyArK2kpIHtcclxuICAgIG91dHB1dCA9IFN0cmluZyhuICUgMjU2KSArIG91dHB1dDtcclxuICAgIGlmIChpICE9PSAzKSB7XHJcbiAgICAgIG91dHB1dCA9IFwiLlwiICsgb3V0cHV0O1xyXG4gICAgfVxyXG4gICAgbiA9IE1hdGguZmxvb3IobiAvIDI1Nik7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUlQdjYoaW5wdXQpIHtcclxuICBjb25zdCBpcCA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcclxuICBsZXQgcGllY2VQdHIgPSAwO1xyXG4gIGxldCBjb21wcmVzc1B0ciA9IG51bGw7XHJcbiAgbGV0IHBvaW50ZXIgPSAwO1xyXG5cclxuICBpbnB1dCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKGlucHV0KTtcclxuXHJcbiAgaWYgKGlucHV0W3BvaW50ZXJdID09PSA1OCkge1xyXG4gICAgaWYgKGlucHV0W3BvaW50ZXIgKyAxXSAhPT0gNTgpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgcG9pbnRlciArPSAyO1xyXG4gICAgKytwaWVjZVB0cjtcclxuICAgIGNvbXByZXNzUHRyID0gcGllY2VQdHI7XHJcbiAgfVxyXG5cclxuICB3aGlsZSAocG9pbnRlciA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgaWYgKHBpZWNlUHRyID09PSA4KSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNTgpIHtcclxuICAgICAgaWYgKGNvbXByZXNzUHRyICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuICAgICAgKytwb2ludGVyO1xyXG4gICAgICArK3BpZWNlUHRyO1xyXG4gICAgICBjb21wcmVzc1B0ciA9IHBpZWNlUHRyO1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdmFsdWUgPSAwO1xyXG4gICAgbGV0IGxlbmd0aCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKGxlbmd0aCA8IDQgJiYgaXNBU0NJSUhleChpbnB1dFtwb2ludGVyXSkpIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZSAqIDB4MTAgKyBwYXJzZUludChhdChpbnB1dCwgcG9pbnRlciksIDE2KTtcclxuICAgICAgKytwb2ludGVyO1xyXG4gICAgICArK2xlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDQ2KSB7XHJcbiAgICAgIGlmIChsZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcG9pbnRlciAtPSBsZW5ndGg7XHJcblxyXG4gICAgICBpZiAocGllY2VQdHIgPiA2KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBudW1iZXJzU2VlbiA9IDA7XHJcblxyXG4gICAgICB3aGlsZSAoaW5wdXRbcG9pbnRlcl0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGxldCBpcHY0UGllY2UgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAobnVtYmVyc1NlZW4gPiAwKSB7XHJcbiAgICAgICAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IDQ2ICYmIG51bWJlcnNTZWVuIDwgNCkge1xyXG4gICAgICAgICAgICArK3BvaW50ZXI7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaXNBU0NJSURpZ2l0KGlucHV0W3BvaW50ZXJdKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAoaXNBU0NJSURpZ2l0KGlucHV0W3BvaW50ZXJdKSkge1xyXG4gICAgICAgICAgY29uc3QgbnVtYmVyID0gcGFyc2VJbnQoYXQoaW5wdXQsIHBvaW50ZXIpKTtcclxuICAgICAgICAgIGlmIChpcHY0UGllY2UgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgaXB2NFBpZWNlID0gbnVtYmVyO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChpcHY0UGllY2UgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpcHY0UGllY2UgPSBpcHY0UGllY2UgKiAxMCArIG51bWJlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpcHY0UGllY2UgPiAyNTUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICArK3BvaW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpcFtwaWVjZVB0cl0gPSBpcFtwaWVjZVB0cl0gKiAweDEwMCArIGlwdjRQaWVjZTtcclxuXHJcbiAgICAgICAgKytudW1iZXJzU2VlbjtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID09PSAyIHx8IG51bWJlcnNTZWVuID09PSA0KSB7XHJcbiAgICAgICAgICArK3BpZWNlUHRyO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG51bWJlcnNTZWVuICE9PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfSBlbHNlIGlmIChpbnB1dFtwb2ludGVyXSA9PT0gNTgpIHtcclxuICAgICAgKytwb2ludGVyO1xyXG4gICAgICBpZiAoaW5wdXRbcG9pbnRlcl0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0W3BvaW50ZXJdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgaXBbcGllY2VQdHJdID0gdmFsdWU7XHJcbiAgICArK3BpZWNlUHRyO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbXByZXNzUHRyICE9PSBudWxsKSB7XHJcbiAgICBsZXQgc3dhcHMgPSBwaWVjZVB0ciAtIGNvbXByZXNzUHRyO1xyXG4gICAgcGllY2VQdHIgPSA3O1xyXG4gICAgd2hpbGUgKHBpZWNlUHRyICE9PSAwICYmIHN3YXBzID4gMCkge1xyXG4gICAgICBjb25zdCB0ZW1wID0gaXBbY29tcHJlc3NQdHIgKyBzd2FwcyAtIDFdOyAvLyBwaWVjZVxyXG4gICAgICBpcFtjb21wcmVzc1B0ciArIHN3YXBzIC0gMV0gPSBpcFtwaWVjZVB0cl07XHJcbiAgICAgIGlwW3BpZWNlUHRyXSA9IHRlbXA7XHJcbiAgICAgIC0tcGllY2VQdHI7XHJcbiAgICAgIC0tc3dhcHM7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChjb21wcmVzc1B0ciA9PT0gbnVsbCAmJiBwaWVjZVB0ciAhPT0gOCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaXA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZUlQdjYoYWRkcmVzcykge1xyXG4gIGxldCBvdXRwdXQgPSBcIlwiO1xyXG4gIGNvbnN0IHNlcVJlc3VsdCA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGFkZHJlc3MpO1xyXG4gIGNvbnN0IGNvbXByZXNzUHRyID0gc2VxUmVzdWx0LmlkeDtcclxuICBsZXQgaWdub3JlMCA9IGZhbHNlO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZHJlc3MubGVuZ3RoOyArK2kpIHtcclxuICAgIGNvbnN0IHBpZWNlID0gYWRkcmVzc1tpXTtcclxuXHJcbiAgICBpZiAoaWdub3JlMCAmJiBwaWVjZSA9PT0gMCkge1xyXG4gICAgICBjb250aW51ZTtcclxuICAgIH0gZWxzZSBpZiAoaWdub3JlMCkge1xyXG4gICAgICBpZ25vcmUwID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbXByZXNzUHRyID09PSBpKSB7XHJcbiAgICAgIGNvbnN0IHNlcGFyYXRvciA9IGkgPT09IDAgPyBcIjo6XCIgOiBcIjpcIjtcclxuICAgICAgb3V0cHV0ICs9IHNlcGFyYXRvcjtcclxuICAgICAgaWdub3JlMCA9IHRydWU7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG91dHB1dCArPSBwaWVjZS50b1N0cmluZygxNik7XHJcblxyXG4gICAgaWYgKGkgIT09IGFkZHJlc3MubGVuZ3RoIC0gMSkge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUhvc3QoaW5wdXQsIGlzU3BlY2lhbEFyZykge1xyXG4gIGlmIChpbnB1dFswXSA9PT0gXCJbXCIpIHtcclxuICAgIGlmIChpbnB1dFtpbnB1dC5sZW5ndGggLSAxXSAhPT0gXCJdXCIpIHtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlSVB2NihpbnB1dC5zdWJzdHJpbmcoMSwgaW5wdXQubGVuZ3RoIC0gMSkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFpc1NwZWNpYWxBcmcpIHtcclxuICAgIHJldHVybiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZG9tYWluID0gdXRmOFBlcmNlbnREZWNvZGUoaW5wdXQpO1xyXG4gIGNvbnN0IGFzY2lpRG9tYWluID0gdHI0Ni50b0FTQ0lJKGRvbWFpbiwgZmFsc2UsIHRyNDYuUFJPQ0VTU0lOR19PUFRJT05TLk5PTlRSQU5TSVRJT05BTCwgZmFsc2UpO1xyXG4gIGlmIChhc2NpaURvbWFpbiA9PT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50KGFzY2lpRG9tYWluKSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICBjb25zdCBpcHY0SG9zdCA9IHBhcnNlSVB2NChhc2NpaURvbWFpbik7XHJcbiAgaWYgKHR5cGVvZiBpcHY0SG9zdCA9PT0gXCJudW1iZXJcIiB8fCBpcHY0SG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgcmV0dXJuIGlwdjRIb3N0O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFzY2lpRG9tYWluO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZU9wYXF1ZUhvc3QoaW5wdXQpIHtcclxuICBpZiAoY29udGFpbnNGb3JiaWRkZW5Ib3N0Q29kZVBvaW50RXhjbHVkaW5nUGVyY2VudChpbnB1dCkpIHtcclxuICAgIHJldHVybiBmYWlsdXJlO1xyXG4gIH1cclxuXHJcbiAgbGV0IG91dHB1dCA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKGlucHV0KTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIG91dHB1dCArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc0MwQ29udHJvbFBlcmNlbnRFbmNvZGUpO1xyXG4gIH1cclxuICByZXR1cm4gb3V0cHV0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShhcnIpIHtcclxuICBsZXQgbWF4SWR4ID0gbnVsbDtcclxuICBsZXQgbWF4TGVuID0gMTsgLy8gb25seSBmaW5kIGVsZW1lbnRzID4gMVxyXG4gIGxldCBjdXJyU3RhcnQgPSBudWxsO1xyXG4gIGxldCBjdXJyTGVuID0gMDtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcclxuICAgIGlmIChhcnJbaV0gIT09IDApIHtcclxuICAgICAgaWYgKGN1cnJMZW4gPiBtYXhMZW4pIHtcclxuICAgICAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICAgICAgbWF4TGVuID0gY3VyckxlbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY3VyclN0YXJ0ID0gbnVsbDtcclxuICAgICAgY3VyckxlbiA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoY3VyclN0YXJ0ID09PSBudWxsKSB7XHJcbiAgICAgICAgY3VyclN0YXJ0ID0gaTtcclxuICAgICAgfVxyXG4gICAgICArK2N1cnJMZW47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpZiB0cmFpbGluZyB6ZXJvc1xyXG4gIGlmIChjdXJyTGVuID4gbWF4TGVuKSB7XHJcbiAgICBtYXhJZHggPSBjdXJyU3RhcnQ7XHJcbiAgICBtYXhMZW4gPSBjdXJyTGVuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGlkeDogbWF4SWR4LFxyXG4gICAgbGVuOiBtYXhMZW5cclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXJpYWxpemVIb3N0KGhvc3QpIHtcclxuICBpZiAodHlwZW9mIGhvc3QgPT09IFwibnVtYmVyXCIpIHtcclxuICAgIHJldHVybiBzZXJpYWxpemVJUHY0KGhvc3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gSVB2NiBzZXJpYWxpemVyXHJcbiAgaWYgKGhvc3QgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgcmV0dXJuIFwiW1wiICsgc2VyaWFsaXplSVB2Nihob3N0KSArIFwiXVwiO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGhvc3Q7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyaW1Db250cm9sQ2hhcnModXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9eW1xcdTAwMDAtXFx1MDAxRlxcdTAwMjBdK3xbXFx1MDAwMC1cXHUwMDFGXFx1MDAyMF0rJC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJpbVRhYkFuZE5ld2xpbmUodXJsKSB7XHJcbiAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXHUwMDA5fFxcdTAwMEF8XFx1MDAwRC9nLCBcIlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2hvcnRlblBhdGgodXJsKSB7XHJcbiAgY29uc3QgcGF0aCA9IHVybC5wYXRoO1xyXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBpZiAodXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgcGF0aC5sZW5ndGggPT09IDEgJiYgaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHBhdGhbMF0pKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwYXRoLnBvcCgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbmNsdWRlc0NyZWRlbnRpYWxzKHVybCkge1xyXG4gIHJldHVybiB1cmwudXNlcm5hbWUgIT09IFwiXCIgfHwgdXJsLnBhc3N3b3JkICE9PSBcIlwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0KHVybCkge1xyXG4gIHJldHVybiB1cmwuaG9zdCA9PT0gbnVsbCB8fCB1cmwuaG9zdCA9PT0gXCJcIiB8fCB1cmwuY2Fubm90QmVBQmFzZVVSTCB8fCB1cmwuc2NoZW1lID09PSBcImZpbGVcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNOb3JtYWxpemVkV2luZG93c0RyaXZlTGV0dGVyKHN0cmluZykge1xyXG4gIHJldHVybiAvXltBLVphLXpdOiQvLnRlc3Qoc3RyaW5nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gVVJMU3RhdGVNYWNoaW5lKGlucHV0LCBiYXNlLCBlbmNvZGluZ092ZXJyaWRlLCB1cmwsIHN0YXRlT3ZlcnJpZGUpIHtcclxuICB0aGlzLnBvaW50ZXIgPSAwO1xyXG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcclxuICB0aGlzLmJhc2UgPSBiYXNlIHx8IG51bGw7XHJcbiAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gZW5jb2RpbmdPdmVycmlkZSB8fCBcInV0Zi04XCI7XHJcbiAgdGhpcy5zdGF0ZU92ZXJyaWRlID0gc3RhdGVPdmVycmlkZTtcclxuICB0aGlzLnVybCA9IHVybDtcclxuICB0aGlzLmZhaWx1cmUgPSBmYWxzZTtcclxuICB0aGlzLnBhcnNlRXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgaWYgKCF0aGlzLnVybCkge1xyXG4gICAgdGhpcy51cmwgPSB7XHJcbiAgICAgIHNjaGVtZTogXCJcIixcclxuICAgICAgdXNlcm5hbWU6IFwiXCIsXHJcbiAgICAgIHBhc3N3b3JkOiBcIlwiLFxyXG4gICAgICBob3N0OiBudWxsLFxyXG4gICAgICBwb3J0OiBudWxsLFxyXG4gICAgICBwYXRoOiBbXSxcclxuICAgICAgcXVlcnk6IG51bGwsXHJcbiAgICAgIGZyYWdtZW50OiBudWxsLFxyXG5cclxuICAgICAgY2Fubm90QmVBQmFzZVVSTDogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVzID0gdHJpbUNvbnRyb2xDaGFycyh0aGlzLmlucHV0KTtcclxuICAgIGlmIChyZXMgIT09IHRoaXMuaW5wdXQpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5wdXQgPSByZXM7XHJcbiAgfVxyXG5cclxuICBjb25zdCByZXMgPSB0cmltVGFiQW5kTmV3bGluZSh0aGlzLmlucHV0KTtcclxuICBpZiAocmVzICE9PSB0aGlzLmlucHV0KSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuICB0aGlzLmlucHV0ID0gcmVzO1xyXG5cclxuICB0aGlzLnN0YXRlID0gc3RhdGVPdmVycmlkZSB8fCBcInNjaGVtZSBzdGFydFwiO1xyXG5cclxuICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgdGhpcy5hdEZsYWcgPSBmYWxzZTtcclxuICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IGZhbHNlO1xyXG5cclxuICB0aGlzLmlucHV0ID0gcHVueWNvZGUudWNzMi5kZWNvZGUodGhpcy5pbnB1dCk7XHJcblxyXG4gIGZvciAoOyB0aGlzLnBvaW50ZXIgPD0gdGhpcy5pbnB1dC5sZW5ndGg7ICsrdGhpcy5wb2ludGVyKSB7XHJcbiAgICBjb25zdCBjID0gdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXJdO1xyXG4gICAgY29uc3QgY1N0ciA9IGlzTmFOKGMpID8gdW5kZWZpbmVkIDogU3RyaW5nLmZyb21Db2RlUG9pbnQoYyk7XHJcblxyXG4gICAgLy8gZXhlYyBzdGF0ZSBtYWNoaW5lXHJcbiAgICBjb25zdCByZXQgPSB0aGlzW1wicGFyc2UgXCIgKyB0aGlzLnN0YXRlXShjLCBjU3RyKTtcclxuICAgIGlmICghcmV0KSB7XHJcbiAgICAgIGJyZWFrOyAvLyB0ZXJtaW5hdGUgYWxnb3JpdGhtXHJcbiAgICB9IGVsc2UgaWYgKHJldCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICB0aGlzLmZhaWx1cmUgPSB0cnVlO1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBzY2hlbWUgc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVNjaGVtZVN0YXJ0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhKGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzY2hlbWVcIjtcclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlU2NoZW1lKGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09PSA0MyB8fCBjID09PSA0NSB8fCBjID09PSA0Nikge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0ci50b0xvd2VyQ2FzZSgpO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNTgpIHtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgIWlzU3BlY2lhbFNjaGVtZSh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBpc1NwZWNpYWxTY2hlbWUodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpICYmIHRoaXMuYnVmZmVyID09PSBcImZpbGVcIikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgKHRoaXMudXJsLmhvc3QgPT09IFwiXCIgfHwgdGhpcy51cmwuaG9zdCA9PT0gbnVsbCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudXJsLnNjaGVtZSA9IHRoaXMuYnVmZmVyO1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51cmwuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSAhPT0gNDcgfHwgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSAhPT0gNDcpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZpbGVcIjtcclxuICAgIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiB0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gdGhpcy51cmwuc2NoZW1lKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwic3BlY2lhbCBhdXRob3JpdHkgc2xhc2hlc1wiO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdID09PSA0Nykge1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJwYXRoIG9yIGF1dGhvcml0eVwiO1xyXG4gICAgICArK3RoaXMucG9pbnRlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImNhbm5vdC1iZS1hLWJhc2UtVVJMIHBhdGhcIjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcIm5vIHNjaGVtZVwiO1xyXG4gICAgdGhpcy5wb2ludGVyID0gLTE7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICByZXR1cm4gZmFpbHVyZTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIG5vIHNjaGVtZVwiXSA9IGZ1bmN0aW9uIHBhcnNlTm9TY2hlbWUoYykge1xyXG4gIGlmICh0aGlzLmJhc2UgPT09IG51bGwgfHwgKHRoaXMuYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGMgIT09IDM1KSkge1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjID09PSAzNSkge1xyXG4gICAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSB0aGlzLmJhc2UucXVlcnk7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmICh0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgcmVsYXRpdmUgb3IgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsUmVsYXRpdmVPckF1dGhvcml0eShjKSB7XHJcbiAgaWYgKGMgPT09IDQ3ICYmIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0gPT09IDQ3KSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJzcGVjaWFsIGF1dGhvcml0eSBpZ25vcmUgc2xhc2hlc1wiO1xyXG4gICAgKyt0aGlzLnBvaW50ZXI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJyZWxhdGl2ZVwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoIG9yIGF1dGhvcml0eVwiXSA9IGZ1bmN0aW9uIHBhcnNlUGF0aE9yQXV0aG9yaXR5KGMpIHtcclxuICBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImF1dGhvcml0eVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZShjKSB7XHJcbiAgdGhpcy51cmwuc2NoZW1lID0gdGhpcy5iYXNlLnNjaGVtZTtcclxuICBpZiAoaXNOYU4oYykpIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnVybC5wYXRoID0gdGhpcy5iYXNlLnBhdGguc2xpY2UoKTtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInJlbGF0aXZlIHNsYXNoXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicXVlcnlcIjtcclxuICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC51c2VybmFtZSA9IHRoaXMuYmFzZS51c2VybmFtZTtcclxuICAgIHRoaXMudXJsLnBhc3N3b3JkID0gdGhpcy5iYXNlLnBhc3N3b3JkO1xyXG4gICAgdGhpcy51cmwuaG9zdCA9IHRoaXMuYmFzZS5ob3N0O1xyXG4gICAgdGhpcy51cmwucG9ydCA9IHRoaXMuYmFzZS5wb3J0O1xyXG4gICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IHRoaXMuYmFzZS5xdWVyeTtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicmVsYXRpdmUgc2xhc2hcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy51cmwudXNlcm5hbWUgPSB0aGlzLmJhc2UudXNlcm5hbWU7XHJcbiAgICB0aGlzLnVybC5wYXNzd29yZCA9IHRoaXMuYmFzZS5wYXNzd29yZDtcclxuICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgIHRoaXMudXJsLnBvcnQgPSB0aGlzLmJhc2UucG9ydDtcclxuICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgwLCB0aGlzLmJhc2UucGF0aC5sZW5ndGggLSAxKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHJlbGF0aXZlIHNsYXNoXCJdID0gZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZVNsYXNoKGMpIHtcclxuICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA0Nykge1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiYXV0aG9yaXR5XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXJsLnVzZXJuYW1lID0gdGhpcy5iYXNlLnVzZXJuYW1lO1xyXG4gICAgdGhpcy51cmwucGFzc3dvcmQgPSB0aGlzLmJhc2UucGFzc3dvcmQ7XHJcbiAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICB0aGlzLnVybC5wb3J0ID0gdGhpcy5iYXNlLnBvcnQ7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IHNsYXNoZXNcIl0gPSBmdW5jdGlvbiBwYXJzZVNwZWNpYWxBdXRob3JpdHlTbGFzaGVzKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgJiYgdGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSA9PT0gNDcpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICArK3RoaXMucG9pbnRlcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RhdGUgPSBcInNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCI7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHNwZWNpYWwgYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzXCJdID0gZnVuY3Rpb24gcGFyc2VTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlcyhjKSB7XHJcbiAgaWYgKGMgIT09IDQ3ICYmIGMgIT09IDkyKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJhdXRob3JpdHlcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgYXV0aG9yaXR5XCJdID0gZnVuY3Rpb24gcGFyc2VBdXRob3JpdHkoYywgY1N0cikge1xyXG4gIGlmIChjID09PSA2NCkge1xyXG4gICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmF0RmxhZykge1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiJTQwXCIgKyB0aGlzLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRoaXMuYXRGbGFnID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBjYXJlZnVsLCB0aGlzIGlzIGJhc2VkIG9uIGJ1ZmZlciBhbmQgaGFzIGl0cyBvd24gcG9pbnRlciAodGhpcy5wb2ludGVyICE9IHBvaW50ZXIpIGFuZCBpbm5lciBjaGFyc1xyXG4gICAgY29uc3QgbGVuID0gY291bnRTeW1ib2xzKHRoaXMuYnVmZmVyKTtcclxuICAgIGZvciAobGV0IHBvaW50ZXIgPSAwOyBwb2ludGVyIDwgbGVuOyArK3BvaW50ZXIpIHtcclxuICAgICAgY29uc3QgY29kZVBvaW50ID0gdGhpcy5idWZmZXIuY29kZVBvaW50QXQocG9pbnRlcik7XHJcblxyXG4gICAgICBpZiAoY29kZVBvaW50ID09PSA1OCAmJiAhdGhpcy5wYXNzd29yZFRva2VuU2VlbkZsYWcpIHtcclxuICAgICAgICB0aGlzLnBhc3N3b3JkVG9rZW5TZWVuRmxhZyA9IHRydWU7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZW5jb2RlZENvZGVQb2ludHMgPSBwZXJjZW50RW5jb2RlQ2hhcihjb2RlUG9pbnQsIGlzVXNlcmluZm9QZXJjZW50RW5jb2RlKTtcclxuICAgICAgaWYgKHRoaXMucGFzc3dvcmRUb2tlblNlZW5GbGFnKSB7XHJcbiAgICAgICAgdGhpcy51cmwucGFzc3dvcmQgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cmwudXNlcm5hbWUgKz0gZW5jb2RlZENvZGVQb2ludHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICB9IGVsc2UgaWYgKGlzTmFOKGMpIHx8IGMgPT09IDQ3IHx8IGMgPT09IDYzIHx8IGMgPT09IDM1IHx8XHJcbiAgICAgICAgICAgICAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5MikpIHtcclxuICAgIGlmICh0aGlzLmF0RmxhZyAmJiB0aGlzLmJ1ZmZlciA9PT0gXCJcIikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuICAgIHRoaXMucG9pbnRlciAtPSBjb3VudFN5bWJvbHModGhpcy5idWZmZXIpICsgMTtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImhvc3RcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RuYW1lXCJdID1cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUhvc3ROYW1lKGMsIGNTdHIpIHtcclxuICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlICYmIHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIGlmIChjID09PSA1OCAmJiAhdGhpcy5hcnJGbGFnKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaG9zdCA9IHBhcnNlSG9zdCh0aGlzLmJ1ZmZlciwgaXNTcGVjaWFsKHRoaXMudXJsKSk7XHJcbiAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVybC5ob3N0ID0gaG9zdDtcclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBvcnRcIjtcclxuICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgPT09IFwiaG9zdG5hbWVcIikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChpc05hTihjKSB8fCBjID09PSA0NyB8fCBjID09PSA2MyB8fCBjID09PSAzNSB8fFxyXG4gICAgICAgICAgICAgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpKSB7XHJcbiAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIGlmIChpc1NwZWNpYWwodGhpcy51cmwpICYmIHRoaXMuYnVmZmVyID09PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgdGhpcy5idWZmZXIgPT09IFwiXCIgJiZcclxuICAgICAgICAgICAgICAgKGluY2x1ZGVzQ3JlZGVudGlhbHModGhpcy51cmwpIHx8IHRoaXMudXJsLnBvcnQgIT09IG51bGwpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBob3N0ID0gcGFyc2VIb3N0KHRoaXMuYnVmZmVyLCBpc1NwZWNpYWwodGhpcy51cmwpKTtcclxuICAgIGlmIChob3N0ID09PSBmYWlsdXJlKSB7XHJcbiAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXJsLmhvc3QgPSBob3N0O1xyXG4gICAgdGhpcy5idWZmZXIgPSBcIlwiO1xyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgaWYgKHRoaXMuc3RhdGVPdmVycmlkZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChjID09PSA5MSkge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA5Mykge1xyXG4gICAgICB0aGlzLmFyckZsYWcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwb3J0XCJdID0gZnVuY3Rpb24gcGFyc2VQb3J0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNBU0NJSURpZ2l0KGMpKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciArPSBjU3RyO1xyXG4gIH0gZWxzZSBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUgfHxcclxuICAgICAgICAgICAgIChpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSB8fFxyXG4gICAgICAgICAgICAgdGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IFwiXCIpIHtcclxuICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHRoaXMuYnVmZmVyKTtcclxuICAgICAgaWYgKHBvcnQgPiBNYXRoLnBvdygyLCAxNikgLSAxKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFpbHVyZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVybC5wb3J0ID0gcG9ydCA9PT0gZGVmYXVsdFBvcnQodGhpcy51cmwuc2NoZW1lKSA/IG51bGwgOiBwb3J0O1xyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgcmV0dXJuIGZhaWx1cmU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbmNvbnN0IGZpbGVPdGhlcndpc2VDb2RlUG9pbnRzID0gbmV3IFNldChbNDcsIDkyLCA2MywgMzVdKTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlXCJdID0gZnVuY3Rpb24gcGFyc2VGaWxlKGMpIHtcclxuICB0aGlzLnVybC5zY2hlbWUgPSBcImZpbGVcIjtcclxuXHJcbiAgaWYgKGMgPT09IDQ3IHx8IGMgPT09IDkyKSB7XHJcbiAgICBpZiAoYyA9PT0gOTIpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGUgPSBcImZpbGUgc2xhc2hcIjtcclxuICB9IGVsc2UgaWYgKHRoaXMuYmFzZSAhPT0gbnVsbCAmJiB0aGlzLmJhc2Uuc2NoZW1lID09PSBcImZpbGVcIikge1xyXG4gICAgaWYgKGlzTmFOKGMpKSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgfSBlbHNlIGlmIChjID09PSA2Mykge1xyXG4gICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgIHRoaXMudXJsLnBhdGggPSB0aGlzLmJhc2UucGF0aC5zbGljZSgpO1xyXG4gICAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgICB9IGVsc2UgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgIHRoaXMudXJsLnF1ZXJ5ID0gdGhpcy5iYXNlLnF1ZXJ5O1xyXG4gICAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID09PSAwIHx8IC8vIHJlbWFpbmluZyBjb25zaXN0cyBvZiAwIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAhaXNXaW5kb3dzRHJpdmVMZXR0ZXJDb2RlUG9pbnRzKGMsIHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgICAodGhpcy5pbnB1dC5sZW5ndGggLSB0aGlzLnBvaW50ZXIgLSAxID49IDIgJiYgLy8gcmVtYWluaW5nIGhhcyBhdCBsZWFzdCAyIGNvZGUgcG9pbnRzXHJcbiAgICAgICAgICAgIWZpbGVPdGhlcndpc2VDb2RlUG9pbnRzLmhhcyh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDJdKSkpIHtcclxuICAgICAgICB0aGlzLnVybC5ob3N0ID0gdGhpcy5iYXNlLmhvc3Q7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aCA9IHRoaXMuYmFzZS5wYXRoLnNsaWNlKCk7XHJcbiAgICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5VUkxTdGF0ZU1hY2hpbmUucHJvdG90eXBlW1wicGFyc2UgZmlsZSBzbGFzaFwiXSA9IGZ1bmN0aW9uIHBhcnNlRmlsZVNsYXNoKGMpIHtcclxuICBpZiAoYyA9PT0gNDcgfHwgYyA9PT0gOTIpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwiZmlsZSBob3N0XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICh0aGlzLmJhc2UgIT09IG51bGwgJiYgdGhpcy5iYXNlLnNjaGVtZSA9PT0gXCJmaWxlXCIpIHtcclxuICAgICAgaWYgKGlzTm9ybWFsaXplZFdpbmRvd3NEcml2ZUxldHRlclN0cmluZyh0aGlzLmJhc2UucGF0aFswXSkpIHtcclxuICAgICAgICB0aGlzLnVybC5wYXRoLnB1c2godGhpcy5iYXNlLnBhdGhbMF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLmhvc3QgPSB0aGlzLmJhc2UuaG9zdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG4gICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmaWxlIGhvc3RcIl0gPSBmdW5jdGlvbiBwYXJzZUZpbGVIb3N0KGMsIGNTdHIpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgYyA9PT0gOTIgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpIHtcclxuICAgIC0tdGhpcy5wb2ludGVyO1xyXG4gICAgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGhcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWZmZXIgPT09IFwiXCIpIHtcclxuICAgICAgdGhpcy51cmwuaG9zdCA9IFwiXCI7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlT3ZlcnJpZGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0ZSA9IFwicGF0aCBzdGFydFwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGhvc3QgPSBwYXJzZUhvc3QodGhpcy5idWZmZXIsIGlzU3BlY2lhbCh0aGlzLnVybCkpO1xyXG4gICAgICBpZiAoaG9zdCA9PT0gZmFpbHVyZSkge1xyXG4gICAgICAgIHJldHVybiBmYWlsdXJlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChob3N0ID09PSBcImxvY2FsaG9zdFwiKSB7XHJcbiAgICAgICAgaG9zdCA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwuaG9zdCA9IGhvc3Q7XHJcblxyXG4gICAgICBpZiAodGhpcy5zdGF0ZU92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSBcInBhdGggc3RhcnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5idWZmZXIgKz0gY1N0cjtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuVVJMU3RhdGVNYWNoaW5lLnByb3RvdHlwZVtcInBhcnNlIHBhdGggc3RhcnRcIl0gPSBmdW5jdGlvbiBwYXJzZVBhdGhTdGFydChjKSB7XHJcbiAgaWYgKGlzU3BlY2lhbCh0aGlzLnVybCkpIHtcclxuICAgIGlmIChjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0ZSA9IFwicGF0aFwiO1xyXG5cclxuICAgIGlmIChjICE9PSA0NyAmJiBjICE9PSA5Mikge1xyXG4gICAgICAtLXRoaXMucG9pbnRlcjtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKCF0aGlzLnN0YXRlT3ZlcnJpZGUgJiYgYyA9PT0gNjMpIHtcclxuICAgIHRoaXMudXJsLnF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcInF1ZXJ5XCI7XHJcbiAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIGMgPT09IDM1KSB7XHJcbiAgICB0aGlzLnVybC5mcmFnbWVudCA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gIH0gZWxzZSBpZiAoYyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJwYXRoXCI7XHJcbiAgICBpZiAoYyAhPT0gNDcpIHtcclxuICAgICAgLS10aGlzLnBvaW50ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VQYXRoKGMpIHtcclxuICBpZiAoaXNOYU4oYykgfHwgYyA9PT0gNDcgfHwgKGlzU3BlY2lhbCh0aGlzLnVybCkgJiYgYyA9PT0gOTIpIHx8XHJcbiAgICAgICghdGhpcy5zdGF0ZU92ZXJyaWRlICYmIChjID09PSA2MyB8fCBjID09PSAzNSkpKSB7XHJcbiAgICBpZiAoaXNTcGVjaWFsKHRoaXMudXJsKSAmJiBjID09PSA5Mikge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0RvdWJsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgc2hvcnRlblBhdGgodGhpcy51cmwpO1xyXG4gICAgICBpZiAoYyAhPT0gNDcgJiYgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICAgIHRoaXMudXJsLnBhdGgucHVzaChcIlwiKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikgJiYgYyAhPT0gNDcgJiZcclxuICAgICAgICAgICAgICAgIShpc1NwZWNpYWwodGhpcy51cmwpICYmIGMgPT09IDkyKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoLnB1c2goXCJcIik7XHJcbiAgICB9IGVsc2UgaWYgKCFpc1NpbmdsZURvdCh0aGlzLmJ1ZmZlcikpIHtcclxuICAgICAgaWYgKHRoaXMudXJsLnNjaGVtZSA9PT0gXCJmaWxlXCIgJiYgdGhpcy51cmwucGF0aC5sZW5ndGggPT09IDAgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXJTdHJpbmcodGhpcy5idWZmZXIpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudXJsLmhvc3QgIT09IFwiXCIgJiYgdGhpcy51cmwuaG9zdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudXJsLmhvc3QgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyWzBdICsgXCI6XCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwucGF0aC5wdXNoKHRoaXMuYnVmZmVyKTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcclxuICAgIGlmICh0aGlzLnVybC5zY2hlbWUgPT09IFwiZmlsZVwiICYmIChjID09PSB1bmRlZmluZWQgfHwgYyA9PT0gNjMgfHwgYyA9PT0gMzUpKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLnVybC5wYXRoLmxlbmd0aCA+IDEgJiYgdGhpcy51cmwucGF0aFswXSA9PT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy51cmwucGF0aC5zaGlmdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoYyA9PT0gNjMpIHtcclxuICAgICAgdGhpcy51cmwucXVlcnkgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGMgPT09IDM1KSB7XHJcbiAgICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgICAgdGhpcy5zdGF0ZSA9IFwiZnJhZ21lbnRcIjtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVE9ETzogSWYgYyBpcyBub3QgYSBVUkwgY29kZSBwb2ludCBhbmQgbm90IFwiJVwiLCBwYXJzZSBlcnJvci5cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5idWZmZXIgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNQYXRoUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBjYW5ub3QtYmUtYS1iYXNlLVVSTCBwYXRoXCJdID0gZnVuY3Rpb24gcGFyc2VDYW5ub3RCZUFCYXNlVVJMUGF0aChjKSB7XHJcbiAgaWYgKGMgPT09IDYzKSB7XHJcbiAgICB0aGlzLnVybC5xdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLnN0YXRlID0gXCJxdWVyeVwiO1xyXG4gIH0gZWxzZSBpZiAoYyA9PT0gMzUpIHtcclxuICAgIHRoaXMudXJsLmZyYWdtZW50ID0gXCJcIjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImZyYWdtZW50XCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IEFkZDogbm90IGEgVVJMIGNvZGUgcG9pbnRcclxuICAgIGlmICghaXNOYU4oYykgJiYgYyAhPT0gMzcpIHtcclxuICAgICAgdGhpcy5wYXJzZUVycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgICAoIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAxXSkgfHxcclxuICAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc05hTihjKSkge1xyXG4gICAgICB0aGlzLnVybC5wYXRoWzBdID0gdGhpcy51cmwucGF0aFswXSArIHBlcmNlbnRFbmNvZGVDaGFyKGMsIGlzQzBDb250cm9sUGVyY2VudEVuY29kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBxdWVyeVwiXSA9IGZ1bmN0aW9uIHBhcnNlUXVlcnkoYywgY1N0cikge1xyXG4gIGlmIChpc05hTihjKSB8fCAoIXRoaXMuc3RhdGVPdmVycmlkZSAmJiBjID09PSAzNSkpIHtcclxuICAgIGlmICghaXNTcGVjaWFsKHRoaXMudXJsKSB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NcIiB8fCB0aGlzLnVybC5zY2hlbWUgPT09IFwid3NzXCIpIHtcclxuICAgICAgdGhpcy5lbmNvZGluZ092ZXJyaWRlID0gXCJ1dGYtOFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBCdWZmZXIodGhpcy5idWZmZXIpOyAvLyBUT0RPOiBVc2UgZW5jb2Rpbmcgb3ZlcnJpZGUgaW5zdGVhZFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgaWYgKGJ1ZmZlcltpXSA8IDB4MjEgfHwgYnVmZmVyW2ldID4gMHg3RSB8fCBidWZmZXJbaV0gPT09IDB4MjIgfHwgYnVmZmVyW2ldID09PSAweDIzIHx8XHJcbiAgICAgICAgICBidWZmZXJbaV0gPT09IDB4M0MgfHwgYnVmZmVyW2ldID09PSAweDNFKSB7XHJcbiAgICAgICAgdGhpcy51cmwucXVlcnkgKz0gcGVyY2VudEVuY29kZShidWZmZXJbaV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXJsLnF1ZXJ5ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGJ1ZmZlcltpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XHJcbiAgICBpZiAoYyA9PT0gMzUpIHtcclxuICAgICAgdGhpcy51cmwuZnJhZ21lbnQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnN0YXRlID0gXCJmcmFnbWVudFwiO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBUT0RPOiBJZiBjIGlzIG5vdCBhIFVSTCBjb2RlIHBvaW50IGFuZCBub3QgXCIlXCIsIHBhcnNlIGVycm9yLlxyXG4gICAgaWYgKGMgPT09IDM3ICYmXHJcbiAgICAgICghaXNBU0NJSUhleCh0aGlzLmlucHV0W3RoaXMucG9pbnRlciArIDFdKSB8fFxyXG4gICAgICAgICFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMl0pKSkge1xyXG4gICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnVmZmVyICs9IGNTdHI7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcblVSTFN0YXRlTWFjaGluZS5wcm90b3R5cGVbXCJwYXJzZSBmcmFnbWVudFwiXSA9IGZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQoYykge1xyXG4gIGlmIChpc05hTihjKSkgeyAvLyBkbyBub3RoaW5nXHJcbiAgfSBlbHNlIGlmIChjID09PSAweDApIHtcclxuICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIFRPRE86IElmIGMgaXMgbm90IGEgVVJMIGNvZGUgcG9pbnQgYW5kIG5vdCBcIiVcIiwgcGFyc2UgZXJyb3IuXHJcbiAgICBpZiAoYyA9PT0gMzcgJiZcclxuICAgICAgKCFpc0FTQ0lJSGV4KHRoaXMuaW5wdXRbdGhpcy5wb2ludGVyICsgMV0pIHx8XHJcbiAgICAgICAgIWlzQVNDSUlIZXgodGhpcy5pbnB1dFt0aGlzLnBvaW50ZXIgKyAyXSkpKSB7XHJcbiAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cmwuZnJhZ21lbnQgKz0gcGVyY2VudEVuY29kZUNoYXIoYywgaXNDMENvbnRyb2xQZXJjZW50RW5jb2RlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplVVJMKHVybCwgZXhjbHVkZUZyYWdtZW50KSB7XHJcbiAgbGV0IG91dHB1dCA9IHVybC5zY2hlbWUgKyBcIjpcIjtcclxuICBpZiAodXJsLmhvc3QgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIi8vXCI7XHJcblxyXG4gICAgaWYgKHVybC51c2VybmFtZSAhPT0gXCJcIiB8fCB1cmwucGFzc3dvcmQgIT09IFwiXCIpIHtcclxuICAgICAgb3V0cHV0ICs9IHVybC51c2VybmFtZTtcclxuICAgICAgaWYgKHVybC5wYXNzd29yZCAhPT0gXCJcIikge1xyXG4gICAgICAgIG91dHB1dCArPSBcIjpcIiArIHVybC5wYXNzd29yZDtcclxuICAgICAgfVxyXG4gICAgICBvdXRwdXQgKz0gXCJAXCI7XHJcbiAgICB9XHJcblxyXG4gICAgb3V0cHV0ICs9IHNlcmlhbGl6ZUhvc3QodXJsLmhvc3QpO1xyXG5cclxuICAgIGlmICh1cmwucG9ydCAhPT0gbnVsbCkge1xyXG4gICAgICBvdXRwdXQgKz0gXCI6XCIgKyB1cmwucG9ydDtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKHVybC5ob3N0ID09PSBudWxsICYmIHVybC5zY2hlbWUgPT09IFwiZmlsZVwiKSB7XHJcbiAgICBvdXRwdXQgKz0gXCIvL1wiO1xyXG4gIH1cclxuXHJcbiAgaWYgKHVybC5jYW5ub3RCZUFCYXNlVVJMKSB7XHJcbiAgICBvdXRwdXQgKz0gdXJsLnBhdGhbMF07XHJcbiAgfSBlbHNlIHtcclxuICAgIGZvciAoY29uc3Qgc3RyaW5nIG9mIHVybC5wYXRoKSB7XHJcbiAgICAgIG91dHB1dCArPSBcIi9cIiArIHN0cmluZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh1cmwucXVlcnkgIT09IG51bGwpIHtcclxuICAgIG91dHB1dCArPSBcIj9cIiArIHVybC5xdWVyeTtcclxuICB9XHJcblxyXG4gIGlmICghZXhjbHVkZUZyYWdtZW50ICYmIHVybC5mcmFnbWVudCAhPT0gbnVsbCkge1xyXG4gICAgb3V0cHV0ICs9IFwiI1wiICsgdXJsLmZyYWdtZW50O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG91dHB1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gc2VyaWFsaXplT3JpZ2luKHR1cGxlKSB7XHJcbiAgaWYgKHR1cGxlLnNjaGVtZSA9PT0gdW5kZWZpbmVkIHx8IHR1cGxlLmhvc3QgPT09IHVuZGVmaW5lZCB8fCB0dXBsZS5wb3J0ID09PSB1bmRlZmluZWQpIHtcclxuICAgIHJldHVybiBcIm51bGxcIjtcclxuICB9XHJcblxyXG4gIGxldCByZXN1bHQgPSB0dXBsZS5zY2hlbWUgKyBcIjovL1wiO1xyXG4gIHJlc3VsdCArPSB0cjQ2LnRvVW5pY29kZSh0dXBsZS5ob3N0LCBmYWxzZSkuZG9tYWluO1xyXG5cclxuICBpZiAodHVwbGUucG9ydCAhPT0gbnVsbCkge1xyXG4gICAgcmVzdWx0ICs9IFwiOlwiICsgdHVwbGUucG9ydDtcclxuICB9XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZVVSTCA9IHNlcmlhbGl6ZVVSTDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZVVSTFRvVW5pY29kZU9yaWdpbiA9IGZ1bmN0aW9uICh1cmwpIHtcclxuICBzd2l0Y2ggKHVybC5zY2hlbWUpIHtcclxuICAgIGNhc2UgXCJibG9iXCI6XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZVVSTFRvVW5pY29kZU9yaWdpbihtb2R1bGUuZXhwb3J0cy5wYXJzZVVSTCh1cmwucGF0aFswXSkpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgLy8gc2VyaWFsaXppbmcgYW4gb3BhcXVlIGlkZW50aWZpZXIgcmV0dXJucyBcIm51bGxcIlxyXG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICAgICAgfVxyXG4gICAgY2FzZSBcImZ0cFwiOlxyXG4gICAgY2FzZSBcImdvcGhlclwiOlxyXG4gICAgY2FzZSBcImh0dHBcIjpcclxuICAgIGNhc2UgXCJodHRwc1wiOlxyXG4gICAgY2FzZSBcIndzXCI6XHJcbiAgICBjYXNlIFwid3NzXCI6XHJcbiAgICAgIHJldHVybiBzZXJpYWxpemVPcmlnaW4oe1xyXG4gICAgICAgIHNjaGVtZTogdXJsLnNjaGVtZSxcclxuICAgICAgICBob3N0OiBzZXJpYWxpemVIb3N0KHVybC5ob3N0KSxcclxuICAgICAgICBwb3J0OiB1cmwucG9ydFxyXG4gICAgICB9KTtcclxuICAgIGNhc2UgXCJmaWxlXCI6XHJcbiAgICAgIC8vIHNwZWMgc2F5cyBcImV4ZXJjaXNlIHRvIHRoZSByZWFkZXJcIiwgY2hyb21lIHNheXMgXCJmaWxlOi8vXCJcclxuICAgICAgcmV0dXJuIFwiZmlsZTovL1wiO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgLy8gc2VyaWFsaXppbmcgYW4gb3BhcXVlIGlkZW50aWZpZXIgcmV0dXJucyBcIm51bGxcIlxyXG4gICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuYmFzaWNVUkxQYXJzZSA9IGZ1bmN0aW9uIChpbnB1dCwgb3B0aW9ucykge1xyXG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgIG9wdGlvbnMgPSB7fTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHVzbSA9IG5ldyBVUkxTdGF0ZU1hY2hpbmUoaW5wdXQsIG9wdGlvbnMuYmFzZVVSTCwgb3B0aW9ucy5lbmNvZGluZ092ZXJyaWRlLCBvcHRpb25zLnVybCwgb3B0aW9ucy5zdGF0ZU92ZXJyaWRlKTtcclxuICBpZiAodXNtLmZhaWx1cmUpIHtcclxuICAgIHJldHVybiBcImZhaWx1cmVcIjtcclxuICB9XHJcblxyXG4gIHJldHVybiB1c20udXJsO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2V0VGhlVXNlcm5hbWUgPSBmdW5jdGlvbiAodXJsLCB1c2VybmFtZSkge1xyXG4gIHVybC51c2VybmFtZSA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHVzZXJuYW1lKTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIHVybC51c2VybmFtZSArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2V0VGhlUGFzc3dvcmQgPSBmdW5jdGlvbiAodXJsLCBwYXNzd29yZCkge1xyXG4gIHVybC5wYXNzd29yZCA9IFwiXCI7XHJcbiAgY29uc3QgZGVjb2RlZCA9IHB1bnljb2RlLnVjczIuZGVjb2RlKHBhc3N3b3JkKTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyArK2kpIHtcclxuICAgIHVybC5wYXNzd29yZCArPSBwZXJjZW50RW5jb2RlQ2hhcihkZWNvZGVkW2ldLCBpc1VzZXJpbmZvUGVyY2VudEVuY29kZSk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplSG9zdCA9IHNlcmlhbGl6ZUhvc3Q7XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5jYW5ub3RIYXZlQVVzZXJuYW1lUGFzc3dvcmRQb3J0ID0gY2Fubm90SGF2ZUFVc2VybmFtZVBhc3N3b3JkUG9ydDtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUludGVnZXIgPSBmdW5jdGlvbiAoaW50ZWdlcikge1xyXG4gIHJldHVybiBTdHJpbmcoaW50ZWdlcik7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5wYXJzZVVSTCA9IGZ1bmN0aW9uIChpbnB1dCwgb3B0aW9ucykge1xyXG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgIG9wdGlvbnMgPSB7fTtcclxuICB9XHJcblxyXG4gIC8vIFdlIGRvbid0IGhhbmRsZSBibG9icywgc28gdGhpcyBqdXN0IGRlbGVnYXRlczpcclxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMuYmFzaWNVUkxQYXJzZShpbnB1dCwgeyBiYXNlVVJMOiBvcHRpb25zLmJhc2VVUkwsIGVuY29kaW5nT3ZlcnJpZGU6IG9wdGlvbnMuZW5jb2RpbmdPdmVycmlkZSB9KTtcclxufTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzLm1peGluID0gZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCBzb3VyY2UpIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleXNbaV0sIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXlzW2ldKSk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLndyYXBwZXJTeW1ib2wgPSBTeW1ib2woXCJ3cmFwcGVyXCIpO1xubW9kdWxlLmV4cG9ydHMuaW1wbFN5bWJvbCA9IFN5bWJvbChcImltcGxcIik7XG5cbm1vZHVsZS5leHBvcnRzLndyYXBwZXJGb3JJbXBsID0gZnVuY3Rpb24gKGltcGwpIHtcbiAgcmV0dXJuIGltcGxbbW9kdWxlLmV4cG9ydHMud3JhcHBlclN5bWJvbF07XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5pbXBsRm9yV3JhcHBlciA9IGZ1bmN0aW9uICh3cmFwcGVyKSB7XG4gIHJldHVybiB3cmFwcGVyW21vZHVsZS5leHBvcnRzLmltcGxTeW1ib2xdO1xufTtcblxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjb252ZXJzaW9ucyA9IHt9O1xubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJzaW9ucztcblxuZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgcmV0dXJuIHggPCAwID8gLTEgOiAxO1xufVxuXG5mdW5jdGlvbiBldmVuUm91bmQoeCkge1xuICAgIC8vIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28uXG4gICAgaWYgKCh4ICUgMSkgPT09IDAuNSAmJiAoeCAmIDEpID09PSAwKSB7IC8vIFtldmVuIG51bWJlcl0uNTsgcm91bmQgZG93biAoaS5lLiBmbG9vcilcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoeCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKGJpdExlbmd0aCwgdHlwZU9wdHMpIHtcbiAgICBpZiAoIXR5cGVPcHRzLnVuc2lnbmVkKSB7XG4gICAgICAgIC0tYml0TGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCBsb3dlckJvdW5kID0gdHlwZU9wdHMudW5zaWduZWQgPyAwIDogLU1hdGgucG93KDIsIGJpdExlbmd0aCk7XG4gICAgY29uc3QgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxO1xuXG4gICAgY29uc3QgbW9kdWxvVmFsID0gdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoID8gTWF0aC5wb3coMiwgdHlwZU9wdHMubW9kdWxvQml0TGVuZ3RoKSA6IE1hdGgucG93KDIsIGJpdExlbmd0aCk7XG4gICAgY29uc3QgbW9kdWxvQm91bmQgPSB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggPyBNYXRoLnBvdygyLCB0eXBlT3B0cy5tb2R1bG9CaXRMZW5ndGggLSAxKSA6IE1hdGgucG93KDIsIGJpdExlbmd0aCAtIDEpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKFYsIG9wdHMpIHtcbiAgICAgICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG5cbiAgICAgICAgbGV0IHggPSArVjtcblxuICAgICAgICBpZiAob3B0cy5lbmZvcmNlUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIGZpbml0ZSBudW1iZXJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHggPSBzaWduKHgpICogTWF0aC5mbG9vcihNYXRoLmFicyh4KSk7XG4gICAgICAgICAgICBpZiAoeCA8IGxvd2VyQm91bmQgfHwgeCA+IHVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGluIGJ5dGUgcmFuZ2VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTih4KSAmJiBvcHRzLmNsYW1wKSB7XG4gICAgICAgICAgICB4ID0gZXZlblJvdW5kKHgpO1xuXG4gICAgICAgICAgICBpZiAoeCA8IGxvd2VyQm91bmQpIHggPSBsb3dlckJvdW5kO1xuICAgICAgICAgICAgaWYgKHggPiB1cHBlckJvdW5kKSB4ID0gdXBwZXJCb3VuZDtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkgfHwgeCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICB4ID0gc2lnbih4KSAqIE1hdGguZmxvb3IoTWF0aC5hYnMoeCkpO1xuICAgICAgICB4ID0geCAlIG1vZHVsb1ZhbDtcblxuICAgICAgICBpZiAoIXR5cGVPcHRzLnVuc2lnbmVkICYmIHggPj0gbW9kdWxvQm91bmQpIHtcbiAgICAgICAgICAgIHJldHVybiB4IC0gbW9kdWxvVmFsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVPcHRzLnVuc2lnbmVkKSB7XG4gICAgICAgICAgICBpZiAoeCA8IDApIHtcbiAgICAgICAgICAgICAgeCArPSBtb2R1bG9WYWw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHggPT09IC0wKSB7IC8vIGRvbid0IHJldHVybiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgfVxufVxuXG5jb252ZXJzaW9uc1tcInZvaWRcIl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnZlcnNpb25zW1wiYm9vbGVhblwiXSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gISF2YWw7XG59O1xuXG5jb252ZXJzaW9uc1tcImJ5dGVcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDgsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJvY3RldFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oOCwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJzaG9ydFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMTYsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBzaG9ydFwiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMTYsIHsgdW5zaWduZWQ6IHRydWUgfSk7XG5cbmNvbnZlcnNpb25zW1wibG9uZ1wiXSA9IGNyZWF0ZU51bWJlckNvbnZlcnNpb24oMzIsIHsgdW5zaWduZWQ6IGZhbHNlIH0pO1xuY29udmVyc2lvbnNbXCJ1bnNpZ25lZCBsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogdHJ1ZSB9KTtcblxuY29udmVyc2lvbnNbXCJsb25nIGxvbmdcIl0gPSBjcmVhdGVOdW1iZXJDb252ZXJzaW9uKDMyLCB7IHVuc2lnbmVkOiBmYWxzZSwgbW9kdWxvQml0TGVuZ3RoOiA2NCB9KTtcbmNvbnZlcnNpb25zW1widW5zaWduZWQgbG9uZyBsb25nXCJdID0gY3JlYXRlTnVtYmVyQ29udmVyc2lvbigzMiwgeyB1bnNpZ25lZDogdHJ1ZSwgbW9kdWxvQml0TGVuZ3RoOiA2NCB9KTtcblxuY29udmVyc2lvbnNbXCJkb3VibGVcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IHggPSArVjtcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBpcyBub3QgYSBmaW5pdGUgZmxvYXRpbmctcG9pbnQgdmFsdWVcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHg7XG59O1xuXG5jb252ZXJzaW9uc1tcInVucmVzdHJpY3RlZCBkb3VibGVcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IHggPSArVjtcblxuICAgIGlmIChpc05hTih4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgTmFOXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuLy8gbm90IHF1aXRlIHZhbGlkLCBidXQgZ29vZCBlbm91Z2ggZm9yIEpTXG5jb252ZXJzaW9uc1tcImZsb2F0XCJdID0gY29udmVyc2lvbnNbXCJkb3VibGVcIl07XG5jb252ZXJzaW9uc1tcInVucmVzdHJpY3RlZCBmbG9hdFwiXSA9IGNvbnZlcnNpb25zW1widW5yZXN0cmljdGVkIGRvdWJsZVwiXTtcblxuY29udmVyc2lvbnNbXCJET01TdHJpbmdcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGlmICghb3B0cykgb3B0cyA9IHt9O1xuXG4gICAgaWYgKG9wdHMudHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiBWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmcoVik7XG59O1xuXG5jb252ZXJzaW9uc1tcIkJ5dGVTdHJpbmdcIl0gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAgIGNvbnN0IHggPSBTdHJpbmcoVik7XG4gICAgbGV0IGMgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IChjID0geC5jb2RlUG9pbnRBdChpKSkgIT09IHVuZGVmaW5lZDsgKytpKSB7XG4gICAgICAgIGlmIChjID4gMjU1KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgaXMgbm90IGEgdmFsaWQgYnl0ZXN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB4O1xufTtcblxuY29udmVyc2lvbnNbXCJVU1ZTdHJpbmdcIl0gPSBmdW5jdGlvbiAoVikge1xuICAgIGNvbnN0IFMgPSBTdHJpbmcoVik7XG4gICAgY29uc3QgbiA9IFMubGVuZ3RoO1xuICAgIGNvbnN0IFUgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBjb25zdCBjID0gUy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID4gMHhERkZGKSB7XG4gICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoYykpO1xuICAgICAgICB9IGVsc2UgaWYgKDB4REMwMCA8PSBjICYmIGMgPD0gMHhERkZGKSB7XG4gICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gbiAtIDEpIHtcbiAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGRkZEKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBTLmNoYXJDb2RlQXQoaSArIDEpO1xuICAgICAgICAgICAgICAgIGlmICgweERDMDAgPD0gZCAmJiBkIDw9IDB4REZGRikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gYyAmIDB4M0ZGO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiID0gZCAmIDB4M0ZGO1xuICAgICAgICAgICAgICAgICAgICBVLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoKDIgPDwgMTUpICsgKDIgPDwgOSkgKiBhICsgYikpO1xuICAgICAgICAgICAgICAgICAgICArK2k7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgVS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KDB4RkZGRCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBVLmpvaW4oJycpO1xufTtcblxuY29udmVyc2lvbnNbXCJEYXRlXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBpZiAoIShWIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IGlzIG5vdCBhIERhdGUgb2JqZWN0XCIpO1xuICAgIH1cbiAgICBpZiAoaXNOYU4oVikpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gVjtcbn07XG5cbmNvbnZlcnNpb25zW1wiUmVnRXhwXCJdID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgICBpZiAoIShWIGluc3RhbmNlb2YgUmVnRXhwKSkge1xuICAgICAgICBWID0gbmV3IFJlZ0V4cChWKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVjtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpe2Z1bmN0aW9uIF93YWthKHBhcnNlciwgc3RhcnRSdWxlKSB7XG4gIGlmKHN0YXJ0UnVsZSAmJiAhIHBhcnNlci5ydWxlc1tzdGFydFJ1bGVdKVxuICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgcnVsZSBtaXNzaW5nOiAnICsgSlNPTi5zdHJpbmdpZnkoc3RhcnRSdWxlKSlcblxuICByZXR1cm4ge1xuICAgIGdldFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBwYXJzZXIuc3RhdGVcbiAgICB9LFxuXG4gICAgZ2V0VHJhY2U6IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiAobWVzc2FnZSA/IG1lc3NhZ2UgKyAnXFxuJyA6ICcnKSArIHBhcnNlci5zdGF0ZS50cmFjZUxpbmUoKVxuICAgIH0sXG5cbiAgICBleGVjOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgaWYoISBzdGFydFJ1bGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gc3RhcnQgcnVsZSBnaXZlbicpXG5cbiAgICAgIHBhcnNlci5zdGF0ZS5zZXRJbnB1dChpbnB1dClcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VyLnJ1bGVzW3N0YXJ0UnVsZV0oKVxuICAgICAgfVxuICAgICAgY2F0Y2goZXJyKSB7XG4gICAgICAgIHZhciBlcnJvciA9IGVyclxuICAgICAgfVxuXG4gICAgICBpZihlcnJvciA9PSBudWxsKSB7XG4gICAgICAgIGlmKCEgcGFyc2VyLnN0YXRlLmFkdiB8fCAhIHBhcnNlci5zdGF0ZS5pc0VPRigpKVxuICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignVW5leHBlY3RlZCBzeW50YXggaW4gdG9wJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZXJyb3IgPT0gbnVsbCxcbiAgICAgICAgdmFsdWU6ICEgZXJyb3IgPyB2YWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0YXJ0V2l0aDogZnVuY3Rpb24ocnVsZSkge1xuICAgICAgcmV0dXJuIF93YWthKHBhcnNlciwgcnVsZSlcbiAgICB9LFxuICB9XG59O1xucmV0dXJuIF93YWthKChmdW5jdGlvbigpeyd1c2Ugc3RyaWN0JztcbnZhciBfcnVsZXM9e307XG5fcnVsZXMuTmFtZVN0YXJ0Q2hhciA9IGZ1bmN0aW9uKCkge1xudmFyIF9SPV9QLm1hdGNoKFwiOlwiKTtcbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkMD1fUC5jdXIoKTtcbmlmKCQwPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJBXCI8PSQwJiYkMDw9XCJaXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyIF9SPV9QLm1hdGNoKFwiX1wiKTtcbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkMT1fUC5jdXIoKTtcbmlmKCQxPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJhXCI8PSQxJiYkMTw9XCJ6XCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQyPV9QLmN1cigpO1xuaWYoJDI9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTAwQzBcIjw9JDImJiQyPD1cIlxcdTAwRDZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDM9X1AuY3VyKCk7XG5pZigkMz09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MDBEOFwiPD0kMyYmJDM8PVwiXFx1MDBGNlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkND1fUC5jdXIoKTtcbmlmKCQ0PT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUwMEY4XCI8PSQ0JiYkNDw9XCJcXHUwMkZGXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQ1PV9QLmN1cigpO1xuaWYoJDU9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTAzNzBcIjw9JDUmJiQ1PD1cIlxcdTAzN0RcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDY9X1AuY3VyKCk7XG5pZigkNj09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MDM3RlwiPD0kNiYmJDY8PVwiXFx1MUZGRlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkNz1fUC5jdXIoKTtcbmlmKCQ3PT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUyMDBDXCI8PSQ3JiYkNzw9XCJcXHUyMDBEXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQ4PV9QLmN1cigpO1xuaWYoJDg9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTIwNzBcIjw9JDgmJiQ4PD1cIlxcdTIxOEZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDk9X1AuY3VyKCk7XG5pZigkOT09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MkMwMFwiPD0kOSYmJDk8PVwiXFx1MkZFRlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkYT1fUC5jdXIoKTtcbmlmKCRhPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUzMDAxXCI8PSRhJiYkYTw9XCJcXHVEN0ZGXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICRiPV9QLmN1cigpO1xuaWYoJGI9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdUY5MDBcIjw9JGImJiRiPD1cIlxcdUZEQ0ZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJGM9X1AuY3VyKCk7XG5pZigkYz09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1RkRGMFwiPD0kYyYmJGM8PVwiXFx1RkZGRFwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbiRkOnt2YXIgJGU9X1AucG9zO1xudmFyICRmPV9QLmN1cigpO1xuaWYoJGY9PW51bGwpe19QLmFkdj1mYWxzZTtcbm51bGw7XG59ZWxzZXtcbl9QLnN0ZXAoXCJcXHVEODAwXCI8PSRmJiYkZjw9XCJcXHVEQjdGXCIpO1xufVxuaWYoIV9QLmFkdikgYnJlYWsgJGQ7XG52YXIgJGc9X1AuY3VyKCk7XG5pZigkZz09bnVsbCl7X1AuYWR2PWZhbHNlO1xubnVsbDtcbn1lbHNle1xuX1Auc3RlcChcIlxcdURDMDBcIjw9JGcmJiRnPD1cIlxcdURGRkZcIik7XG59XG52YXIgX1I9X1AuZG9jLnN1YnN0cmluZygkZSxfUC5wb3MpO1xufVxuaWYoIV9QLmFkdikgX1AucG9zPSRlO1xufVxucmV0dXJuIF9SO1xufVxuX3J1bGVzLk5hbWVDaGFyID0gZnVuY3Rpb24oKSB7XG52YXIgX1I9X3J1bGVzLk5hbWVTdGFydENoYXIoKTtcbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciBfUj1fUC5tYXRjaChcIi1cIik7XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgX1I9X1AubWF0Y2goXCIuXCIpO1xufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQwPV9QLmN1cigpO1xuaWYoJDA9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIjBcIjw9JDAmJiQwPD1cIjlcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgX1I9X1AubWF0Y2goXCJcXHUwMEI3XCIpO1xufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQxPV9QLmN1cigpO1xuaWYoJDE9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTAzMDBcIjw9JDEmJiQxPD1cIlxcdTAzNkZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDI9X1AuY3VyKCk7XG5pZigkMj09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MjAzRlwiPD0kMiYmJDI8PVwiXFx1MjA0MFwiKTtcbn1cbn1cbnJldHVybiBfUjtcbn1cbl9ydWxlcy5OYW1lID0gZnVuY3Rpb24oKSB7XG4kMDp7dmFyICQxPV9QLnBvcztcbl9ydWxlcy5OYW1lU3RhcnRDaGFyKCk7XG5pZighX1AuYWR2KSBicmVhayAkMDtcbnZhciAkMj1mYWxzZTtcbmZvcig7Oykge1xuX3J1bGVzLk5hbWVDaGFyKCk7XG5pZighX1AuYWR2KSBicmVhaztcbiQyPXRydWU7XG59OyBfUC5hZHY9dHJ1ZTtcbnZhciBfUj1fUC5kb2Muc3Vic3RyaW5nKCQxLF9QLnBvcyk7XG59XG5pZighX1AuYWR2KSBfUC5wb3M9JDE7XG5yZXR1cm4gX1I7XG59XG5fcnVsZXMuUU5hbWUgPSBmdW5jdGlvbigpIHtcbnZhciBfUj1fcnVsZXMuUHJlZml4ZWROYW1lKCk7XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgX1I9X3J1bGVzLlVucHJlZml4ZWROYW1lKCk7XG59XG5yZXR1cm4gX1I7XG59XG5fcnVsZXMuUHJlZml4ZWROYW1lID0gZnVuY3Rpb24oKSB7XG4kMDp7dmFyICQxPV9QLnBvcztcbl9ydWxlcy5QcmVmaXgoKTtcbmlmKCFfUC5hZHYpIGJyZWFrICQwO1xuX1AubWF0Y2goXCI6XCIpO1xuaWYoIV9QLmFkdikgYnJlYWsgJDA7XG5fcnVsZXMuTG9jYWxQYXJ0KCk7XG52YXIgX1I9X1AuZG9jLnN1YnN0cmluZygkMSxfUC5wb3MpO1xufVxuaWYoIV9QLmFkdikgX1AucG9zPSQxO1xucmV0dXJuIF9SO1xufVxuX3J1bGVzLlVucHJlZml4ZWROYW1lID0gZnVuY3Rpb24oKSB7XG52YXIgX1I9X3J1bGVzLkxvY2FsUGFydCgpO1xucmV0dXJuIF9SO1xufVxuX3J1bGVzLlByZWZpeCA9IGZ1bmN0aW9uKCkge1xudmFyIF9SPV9ydWxlcy5OQ05hbWUoKTtcbnJldHVybiBfUjtcbn1cbl9ydWxlcy5Mb2NhbFBhcnQgPSBmdW5jdGlvbigpIHtcbnZhciBfUj1fcnVsZXMuTkNOYW1lKCk7XG5yZXR1cm4gX1I7XG59XG5fcnVsZXMuTkNOYW1lU3RhcnRDaGFyID0gZnVuY3Rpb24oKSB7XG52YXIgJDA9X1AuY3VyKCk7XG5pZigkMD09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiQVwiPD0kMCYmJDA8PVwiWlwiKTtcbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciBfUj1fUC5tYXRjaChcIl9cIik7XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDE9X1AuY3VyKCk7XG5pZigkMT09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiYVwiPD0kMSYmJDE8PVwielwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkMj1fUC5jdXIoKTtcbmlmKCQyPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUwMEMwXCI8PSQyJiYkMjw9XCJcXHUwMEQ2XCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQzPV9QLmN1cigpO1xuaWYoJDM9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTAwRDhcIjw9JDMmJiQzPD1cIlxcdTAwRjZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDQ9X1AuY3VyKCk7XG5pZigkND09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MDBGOFwiPD0kNCYmJDQ8PVwiXFx1MDJGRlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkNT1fUC5jdXIoKTtcbmlmKCQ1PT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUwMzcwXCI8PSQ1JiYkNTw9XCJcXHUwMzdEXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQ2PV9QLmN1cigpO1xuaWYoJDY9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTAzN0ZcIjw9JDYmJiQ2PD1cIlxcdTFGRkZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDc9X1AuY3VyKCk7XG5pZigkNz09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MjAwQ1wiPD0kNyYmJDc8PVwiXFx1MjAwRFwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkOD1fUC5jdXIoKTtcbmlmKCQ4PT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUyMDcwXCI8PSQ4JiYkODw9XCJcXHUyMThGXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICQ5PV9QLmN1cigpO1xuaWYoJDk9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdTJDMDBcIjw9JDkmJiQ5PD1cIlxcdTJGRUZcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJGE9X1AuY3VyKCk7XG5pZigkYT09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MzAwMVwiPD0kYSYmJGE8PVwiXFx1RDdGRlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkYj1fUC5jdXIoKTtcbmlmKCRiPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHVGOTAwXCI8PSRiJiYkYjw9XCJcXHVGRENGXCIpO1xufVxufVxuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyICRjPV9QLmN1cigpO1xuaWYoJGM9PW51bGwpe19QLmFkdj1mYWxzZTtcbnZhciBfUj1udWxsO1xufWVsc2V7XG52YXIgX1I9X1Auc3RlcChcIlxcdUZERjBcIjw9JGMmJiRjPD1cIlxcdUZGRkRcIik7XG59XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG4kZDp7dmFyICRlPV9QLnBvcztcbnZhciAkZj1fUC5jdXIoKTtcbmlmKCRmPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG5udWxsO1xufWVsc2V7XG5fUC5zdGVwKFwiXFx1RDgwMFwiPD0kZiYmJGY8PVwiXFx1REI3RlwiKTtcbn1cbmlmKCFfUC5hZHYpIGJyZWFrICRkO1xudmFyICRnPV9QLmN1cigpO1xuaWYoJGc9PW51bGwpe19QLmFkdj1mYWxzZTtcbm51bGw7XG59ZWxzZXtcbl9QLnN0ZXAoXCJcXHVEQzAwXCI8PSRnJiYkZzw9XCJcXHVERkZGXCIpO1xufVxudmFyIF9SPV9QLmRvYy5zdWJzdHJpbmcoJGUsX1AucG9zKTtcbn1cbmlmKCFfUC5hZHYpIF9QLnBvcz0kZTtcbn1cbnJldHVybiBfUjtcbn1cbl9ydWxlcy5OQ05hbWVDaGFyID0gZnVuY3Rpb24oKSB7XG52YXIgX1I9X3J1bGVzLk5DTmFtZVN0YXJ0Q2hhcigpO1xuaWYoIV9QLmFkdil7IF9QLmFkdj10cnVlO1xudmFyIF9SPV9QLm1hdGNoKFwiLVwiKTtcbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciBfUj1fUC5tYXRjaChcIi5cIik7XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDA9X1AuY3VyKCk7XG5pZigkMD09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiMFwiPD0kMCYmJDA8PVwiOVwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciBfUj1fUC5tYXRjaChcIlxcdTAwQjdcIik7XG59XG5pZighX1AuYWR2KXsgX1AuYWR2PXRydWU7XG52YXIgJDE9X1AuY3VyKCk7XG5pZigkMT09bnVsbCl7X1AuYWR2PWZhbHNlO1xudmFyIF9SPW51bGw7XG59ZWxzZXtcbnZhciBfUj1fUC5zdGVwKFwiXFx1MDMwMFwiPD0kMSYmJDE8PVwiXFx1MDM2RlwiKTtcbn1cbn1cbmlmKCFfUC5hZHYpeyBfUC5hZHY9dHJ1ZTtcbnZhciAkMj1fUC5jdXIoKTtcbmlmKCQyPT1udWxsKXtfUC5hZHY9ZmFsc2U7XG52YXIgX1I9bnVsbDtcbn1lbHNle1xudmFyIF9SPV9QLnN0ZXAoXCJcXHUyMDNGXCI8PSQyJiYkMjw9XCJcXHUyMDQwXCIpO1xufVxufVxucmV0dXJuIF9SO1xufVxuX3J1bGVzLk5DTmFtZSA9IGZ1bmN0aW9uKCkge1xuJDA6e3ZhciAkMT1fUC5wb3M7XG5fcnVsZXMuTkNOYW1lU3RhcnRDaGFyKCk7XG5pZighX1AuYWR2KSBicmVhayAkMDtcbnZhciAkMj1mYWxzZTtcbmZvcig7Oykge1xuX3J1bGVzLk5DTmFtZUNoYXIoKTtcbmlmKCFfUC5hZHYpIGJyZWFrO1xuJDI9dHJ1ZTtcbn07IF9QLmFkdj10cnVlO1xudmFyIF9SPV9QLmRvYy5zdWJzdHJpbmcoJDEsX1AucG9zKTtcbn1cbmlmKCFfUC5hZHYpIF9QLnBvcz0kMTtcbnJldHVybiBfUjtcbn1cbmZ1bmN0aW9uIFBhcnNlclN0YXRlKCkge1xuICB0aGlzLmRvYyA9ICcnXG4gIHRoaXMucG9zID0gMFxuICB0aGlzLmFkdiA9IHRydWVcblxuICB0aGlzLnNldElucHV0ID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgdGhpcy5kb2MgPSBkb2NcbiAgICB0aGlzLnBvcyA9IDBcbiAgICB0aGlzLmFkdiA9IHRydWVcbiAgfVxuXG4gIHRoaXMuaXNFT0YgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wb3MgPT0gdGhpcy5kb2MubGVuZ3RoXG4gIH1cblxuICB0aGlzLmN1ciA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBfUC5kb2NbX1AucG9zXVxuICB9XG5cbiAgdGhpcy5tYXRjaCA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmKF9QLmFkdiA9IF9QLmRvYy5zdWJzdHIoX1AucG9zLCBzdHIubGVuZ3RoKSA9PSBzdHIpIHtcbiAgICAgIF9QLnBvcyArPSBzdHIubGVuZ3RoXG4gICAgICByZXR1cm4gc3RyXG4gICAgfVxuICB9XG5cbiAgdGhpcy5zdGVwID0gZnVuY3Rpb24oZmxhZykge1xuICAgIGlmKF9QLmFkdiA9IGZsYWcpIHtcbiAgICAgIF9QLnBvcysrXG4gICAgICByZXR1cm4gX1AuZG9jW19QLnBvcyAtIDFdXG4gICAgfVxuICB9XG5cbiAgdGhpcy51bmV4cGVjdGVkID0gZnVuY3Rpb24ocnVsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzeW50YXggaW4gJyArIHJ1bGUpXG4gIH1cblxuICB0aGlzLnRyYWNlTGluZSA9IGZ1bmN0aW9uKHBvcykge1xuICAgIGlmKCEgcG9zKSBwb3MgPSBfUC5wb3NcblxuICAgIHZhciBmcm9tID0gX1AuZG9jLmxhc3RJbmRleE9mKCdcXG4nLCBwb3MpLCB0byA9IF9QLmRvYy5pbmRleE9mKCdcXG4nLCBwb3MpXG4gICAgXG4gICAgaWYoZnJvbSA9PSAtMSlcbiAgICAgIGZyb20gPSAwXG4gICAgZWxzZVxuICAgICAgZnJvbSsrXG4gICAgXG4gICAgaWYodG8gPT0gLTEpXG4gICAgICB0byA9IHBvcy5sZW5ndGhcblxuICAgIHZhciBsaW5lTm8gPSBfUC5kb2Muc3Vic3RyaW5nKDAsIGZyb20pLnNwbGl0KCdcXG4nKS5sZW5ndGhcbiAgICB2YXIgbGluZSA9IF9QLmRvYy5zdWJzdHJpbmcoZnJvbSwgdG8pXG4gICAgdmFyIHBvaW50ZXIgPSBBcnJheSgyMDApLmpvaW4oJyAnKS5zdWJzdHIoMCwgcG9zIC0gZnJvbSkgKyAnXl5eJ1xuXG4gICAgcmV0dXJuIChcbiAgICAgICdMaW5lICcgKyBsaW5lTm8gKyAnOlxcbicgK1xuICAgICAgbGluZSArICdcXG4nICtcbiAgICAgIHBvaW50ZXJcbiAgICApXG4gIH1cbn1cbnZhciBfUCA9IG5ldyBQYXJzZXJTdGF0ZVxucmV0dXJuIHtcbiAgc3RhdGU6IF9QLFxuICBydWxlczogX3J1bGVzLFxufVxufSkoKSxudWxsKX0pKCkiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBwYXJzZXIgPSByZXF1aXJlKFwiLi9nZW5lcmF0ZWQtcGFyc2VyLmpzXCIpO1xuXG5leHBvcnRzLm5hbWUgPSBmdW5jdGlvbiAocG90ZW50aWFsTmFtZSkge1xuICAgIHJldHVybiBtYXBSZXN1bHQocGFyc2VyLnN0YXJ0V2l0aChcIk5hbWVcIikuZXhlYyhwb3RlbnRpYWxOYW1lKSk7XG59O1xuXG5leHBvcnRzLnFuYW1lID0gZnVuY3Rpb24gKHBvdGVudGlhbFFuYW1lKSB7XG4gICAgcmV0dXJuIG1hcFJlc3VsdChwYXJzZXIuc3RhcnRXaXRoKFwiUU5hbWVcIikuZXhlYyhwb3RlbnRpYWxRbmFtZSkpO1xufTtcblxuZnVuY3Rpb24gbWFwUmVzdWx0KHJlc3VsdCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IHJlc3VsdC5zdWNjZXNzLFxuICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yICYmIHBhcnNlci5nZXRUcmFjZShyZXN1bHQuZXJyb3IubWVzc2FnZSlcbiAgICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBleHRlbmRcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gZXh0ZW5kKCkge1xuICAgIHZhciB0YXJnZXQgPSB7fVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXVxuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRcbn1cbiJdfQ== diff --git a/extension/scripts/ChromePopupBrowser.js b/extension/scripts/ChromePopupBrowser.js index 814bb8a3..d5b4ac24 100644 --- a/extension/scripts/ChromePopupBrowser.js +++ b/extension/scripts/ChromePopupBrowser.js @@ -1,7 +1,7 @@ var jquery = require('jquery-deferred') var whenCallSequentially = require('../assets/jquery.whencallsequentially') -var ChromePopupBrowser = function (options, moreOptions) { +var ChromePopupBrowser = function (options) { this.pageLoadDelay = options.pageLoadDelay // Not setting window here as it conflicts with this.window. In any case window must be defined in this case diff --git a/extension/scripts/InMemoryStore.js b/extension/scripts/InMemoryStore.js new file mode 100644 index 00000000..f3c52e49 --- /dev/null +++ b/extension/scripts/InMemoryStore.js @@ -0,0 +1,20 @@ + +var InMemoryStore = function () { + this.data = [] +} + +InMemoryStore.prototype = { + + writeDocs: function (data, callback) { + data.forEach(function (data) { + this.data.push(data) + }.bind(this)) + callback() + }, + + initSitemapDataDb: function (sitemapId, callback) { + callback(this) + } +} + +module.exports = InMemoryStore diff --git a/extension/scripts/JSDOMBrowser.js b/extension/scripts/JSDOMBrowser.js index 1451056e..bf34f6a6 100644 --- a/extension/scripts/JSDOMBrowser.js +++ b/extension/scripts/JSDOMBrowser.js @@ -5,7 +5,7 @@ var jqueryDeferred = require('jquery-deferred') const contentScraper = require('../content_script/content_scraper') var whenCallSequentially = require('../assets/jquery.whencallsequentially') -var JSDOMBrowser = function (options, moreOptions) { +var JSDOMBrowser = function (options) { this.pageLoadDelay = options.pageLoadDelay } diff --git a/extension/scripts/JSDOMBrowserLoader.js b/extension/scripts/JSDOMBrowserLoader.js index 68f1bbfc..7e6316b5 100644 --- a/extension/scripts/JSDOMBrowserLoader.js +++ b/extension/scripts/JSDOMBrowserLoader.js @@ -12,7 +12,7 @@ module.exports = function (self) { const data = ev.data const UUID = data.UUID if (data.topic === 'init') { - browser = new JSDOMBrowser(data.options, {}) + browser = new JSDOMBrowser(data.options) return self.postMessage({ UUID }) diff --git a/extension/scripts/WebJSDOMBrowser.js b/extension/scripts/WebJSDOMBrowser.js index 21608be5..0054457f 100644 --- a/extension/scripts/WebJSDOMBrowser.js +++ b/extension/scripts/WebJSDOMBrowser.js @@ -4,7 +4,7 @@ const jsdomBrowserLoader = require('./JSDOMBrowserLoader') var jqueryDeferred = require('jquery-deferred') var whenCallSequentially = require('../assets/jquery.whencallsequentially') -const WebJSDOMBrowser = function (options, moreOptions) { +const WebJSDOMBrowser = function (options) { this.pageLoadDelay = options.pageLoadDelay const promises = {} this.promises = promises diff --git a/gulpfile.js b/gulpfile.js index f1dac988..501b8157 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -14,7 +14,7 @@ const runTests = (function () { if (timeout) clearTimeout(timeout) timeout = setTimeout(function () { runKarma(done) - runJSDOMTests() + // runJSDOMTests() }, 100) } })() diff --git a/index.js b/index.js index 3051cb62..89ea3ac1 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,6 @@ const Queue = require('./extension/scripts/Queue') const Sitemap = require('./extension/scripts/Sitemap') -const FakeStore = require('./tests/FakeStore') +const InMemoryStore = require('./extension/scripts/InMemoryStore') const Scraper = require('./extension/scripts/Scraper') const jsdom = require('jsdom') const jQuery = require('jquery') @@ -20,7 +20,7 @@ function scrapeJSDOM (sitemapInfo, options = {}) { const document = window.document const $ = jQuery(window) const q = new Queue() - const store = new FakeStore() + const store = new InMemoryStore() const sitemap = new Sitemap(sitemapInfo, {$, document, window}) const browser = new Browser({ pageLoadDelay: options.pageLoadDelay || 2000 diff --git a/karma.conf.js b/karma.conf.js index 2c8f1e73..1f0043b3 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -68,7 +68,7 @@ module.exports = function (config) { // Concurrency level // how many browser should be started simultaneous concurrency: Infinity, - // browserNoActivityTimeout: 50000000, + browserNoActivityTimeout: 50000000, plugins: [ 'karma-mocha', 'karma-browserify', diff --git a/tests/spec/ScraperSpec.js b/tests/spec/ScraperSpec.js index 5229b8cc..6c0bb55d 100644 --- a/tests/spec/ScraperSpec.js +++ b/tests/spec/ScraperSpec.js @@ -49,7 +49,7 @@ describe('Scraper', function () { var browser = new Browser({ pageLoadDelay: 100 - }, {$, document, window}) + }) var s = new Scraper({ queue: q, @@ -86,7 +86,7 @@ describe('Scraper', function () { var browser = new Browser({ pageLoadDelay: 500 - }, {$, document, window}) + }) var s = new Scraper({ queue: q, @@ -217,7 +217,7 @@ describe('Scraper', function () { var browser = new Browser({ pageLoadDelay: 500 - }, {$, document, window}) + }) var sitemap = new Sitemap({ id: 'test' @@ -268,7 +268,7 @@ describe('Scraper', function () { var browser = new Browser({ pageLoadDelay: 500 - }, {$, document, window}) + }) var s = new Scraper({ queue: q, diff --git a/tests/spec/browser/ChromePopupBrowserSpec.js b/tests/spec/browser/ChromePopupBrowserSpec.js index 25d66dc4..5d9e623b 100644 --- a/tests/spec/browser/ChromePopupBrowserSpec.js +++ b/tests/spec/browser/ChromePopupBrowserSpec.js @@ -19,7 +19,7 @@ describe('Chrome popup browser', function () { it('should init a popup window', function () { var browser = new ChromePopupBrowser({ pageLoadDelay: 500 - }, {$, document, window}) + }) browser._initPopupWindow(function () { }) assert.deepEqual(browser.tab, {id: 0}) @@ -28,7 +28,7 @@ describe('Chrome popup browser', function () { it('should load a page', function (done) { var browser = new ChromePopupBrowser({ pageLoadDelay: 500 - }, {$, document, window}) + }) browser._initPopupWindow(function () { }) browser.loadUrl('http://example,com/', function () { @@ -51,7 +51,7 @@ describe('Chrome popup browser', function () { var browser = new ChromePopupBrowser({ pageLoadDelay: 500 - }, {$, document, window}) + }) browser._initPopupWindow(function () { }) browser.fetchData('http://example,com/', sitemap, '_root', function (err, data) { diff --git a/tests/spec/browser/ScraperSpec.js b/tests/spec/browser/ScraperSpec.js index caef12be..ad2127d1 100644 --- a/tests/spec/browser/ScraperSpec.js +++ b/tests/spec/browser/ScraperSpec.js @@ -38,7 +38,7 @@ describe('Scraper', function () { var browser = new Browser({ pageLoadDelay: 500 - }, {$, document, window}) + }) var sitemap = new Sitemap({ id: 'test'